@fusion.dev/helix 0.4.2 → 0.4.3
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/custom-elements.json +119 -119
- package/dist/aura/root/aura-root.d.ts +10 -31
- package/dist/badge/root/badge-root.css.js +3 -3
- package/dist/bar-chart/root/bar-chart-root.css.js +7 -9
- package/dist/button/root/button-root.d.ts +1 -1
- package/dist/button/root/button-root.js +1 -1
- package/dist/button-group/root/button-group-root.css.js +3 -3
- package/dist/callout/root/callout-root.css.js +1 -2
- package/dist/card/root/card-root.css.js +6 -8
- package/dist/carousel/root/carousel-root.css.js +2 -2
- package/dist/checkbox/root/checkbox-root.css.js +3 -4
- package/dist/copy-button/root/copy-button-root.d.ts +1 -1
- package/dist/copy-button/root/copy-button-root.js +1 -1
- package/dist/date-input/root/date-input-root.css.js +1 -1
- package/dist/date-picker/root/date-picker-root.css.js +1 -1
- package/dist/divider/root/divider-root.css.js +2 -2
- package/dist/drawer/root/drawer-root.css.js +1 -2
- package/dist/file-input/root/file-input-root.css.js +1 -1
- package/dist/heatmap/root/heatmap-root.css.js +3 -3
- package/dist/icon-button/root/icon-button-root.css.js +1 -2
- package/dist/icon-button/root/icon-button-root.d.ts +1 -1
- package/dist/icon-button/root/icon-button-root.js +1 -1
- package/dist/input/root/input-root.css.js +2 -3
- package/dist/kbd/root/kbd-root.css.js +4 -4
- package/dist/legend/root/legend-root.css.js +1 -2
- package/dist/loader/root/loader-root.css.js +2 -2
- package/dist/menu/root/menu-root.css.js +4 -4
- package/dist/meter/root/meter-root.css.js +9 -16
- package/dist/outline/root/outline-root.css.js +1 -1
- package/dist/popover/root/popover-root.css.js +1 -1
- package/dist/radio/root/radio-root.css.js +1 -2
- package/dist/sandbox/preview/sandbox-preview.d.ts +11 -31
- package/dist/sandbox/root/sandbox-root.d.ts +11 -32
- package/dist/select/root/select-root.css.js +1 -1
- package/dist/slider/root/slider-root.css.js +8 -8
- package/dist/sparkline/root/sparkline-root.css.js +1 -2
- package/dist/speed-dial/root/speed-dial-root.css.js +1 -1
- package/dist/steps/root/steps-root.css.js +4 -6
- package/dist/steps/step/step.css.js +2 -2
- package/dist/switch/root/switch-root.css.js +3 -4
- package/dist/tag/root/tag-root.css.js +9 -10
- package/dist/time-input/root/time-input-root.css.js +1 -1
- package/dist/toast/item/toast-item.css.js +5 -5
- package/dist/toast/root/toast-root.css.js +5 -8
- package/dist/toggle/group/toggle-group.css.js +9 -10
- package/dist/trend/root/trend-root.css.js +1 -1
- package/dist/video/root/video-root.css.js +2 -2
- package/dist/video-playlist/menu/video-playlist-menu.css.js +1 -2
- package/package.json +16 -21
- package/{jsx.d.ts → types/jsx.d.ts} +66 -190
- package/{vue.d.ts → types/vue.d.ts} +3 -3
- package/elements.css +0 -286
- package/helix.css +0 -31
- /package/dist/{mixins → shared}/mixin-control-surface/mixin-control-surface.d.ts +0 -0
- /package/dist/{mixins → shared}/mixin-control-surface/mixin-control-surface.js +0 -0
- /package/{svelte.d.ts → types/svelte.d.ts} +0 -0
|
@@ -10,16 +10,15 @@ z-index: var(--helix-layer-toast);
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
:host(:not([placement])) {
|
|
13
|
-
inset-block-end: var(--_toast-inset);
|
|
14
|
-
|
|
15
13
|
--_toast-enter: var(--helix-space-lg);
|
|
14
|
+
inset-block-end: var(--_toast-inset);
|
|
16
15
|
}
|
|
17
16
|
|
|
18
17
|
[part="region"] {
|
|
19
|
-
display: flex;
|
|
20
|
-
flex-direction: column;
|
|
21
18
|
|
|
22
19
|
--_toast-gap: var(--toast-gap, var(--helix-space-xs));
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
::slotted(*) {
|
|
@@ -27,15 +26,13 @@ pointer-events: auto;
|
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
:host([placement^="bottom"]) {
|
|
30
|
-
inset-block-end: var(--_toast-inset);
|
|
31
|
-
|
|
32
29
|
--_toast-enter: var(--helix-space-lg);
|
|
30
|
+
inset-block-end: var(--_toast-inset);
|
|
33
31
|
}
|
|
34
32
|
|
|
35
33
|
:host([placement^="top"]) {
|
|
36
|
-
inset-block-start: var(--_toast-inset);
|
|
37
|
-
|
|
38
34
|
--_toast-enter: calc(var(--helix-space-lg) * -1);
|
|
35
|
+
inset-block-start: var(--_toast-inset);
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
:host([placement^="top"]) [part="region"] {
|
|
@@ -28,6 +28,11 @@ align-items: start;
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
[part="track"] {
|
|
31
|
+
--_toggle-height: calc(var(--helix-size-control) - var(--helix-space-2xs) * 2);
|
|
32
|
+
|
|
33
|
+
--_toggle-radius: var(--helix-radii-sm);
|
|
34
|
+
|
|
35
|
+
--_indicator-surface: var(--helix-color-surface-raised);
|
|
31
36
|
display: inline-flex;
|
|
32
37
|
position: relative;
|
|
33
38
|
|
|
@@ -36,21 +41,11 @@ flex-wrap: wrap;
|
|
|
36
41
|
|
|
37
42
|
min-block-size: var(--helix-size-control);
|
|
38
43
|
|
|
39
|
-
--_toggle-height: calc(var(--helix-size-control) - var(--helix-space-2xs) * 2);
|
|
40
|
-
|
|
41
|
-
--_toggle-radius: var(--helix-radii-sm);
|
|
42
|
-
|
|
43
44
|
padding: var(--helix-space-2xs);
|
|
44
|
-
|
|
45
|
-
--_indicator-surface: var(--helix-color-surface-raised);
|
|
46
45
|
}
|
|
47
46
|
|
|
48
47
|
:host(:not([separation])) [part="track"],
|
|
49
48
|
:host([separation="outlined"]) [part="track"] {
|
|
50
|
-
background-color: var(--helix-color-surface-sunken);
|
|
51
|
-
border: var(--helix-border-thin) solid var(--helix-color-border);
|
|
52
|
-
border-radius: var(--helix-radii-sm);
|
|
53
|
-
padding: var(--helix-space-2xs);
|
|
54
49
|
|
|
55
50
|
--_toggle-radius: calc(var(--helix-radii-sm) - var(--helix-border-thin));
|
|
56
51
|
|
|
@@ -63,6 +58,10 @@ var(--helix-border-thin) *
|
|
|
63
58
|
);
|
|
64
59
|
|
|
65
60
|
--_indicator-surface: var(--helix-color-surface-overlay);
|
|
61
|
+
background-color: var(--helix-color-surface-sunken);
|
|
62
|
+
border: var(--helix-border-thin) solid var(--helix-color-border);
|
|
63
|
+
border-radius: var(--helix-radii-sm);
|
|
64
|
+
padding: var(--helix-space-2xs);
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
::slotted(helix-toggle) {
|
|
@@ -82,8 +82,8 @@ opacity: 0;
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
[part="controls"] :where(a, button) {
|
|
85
|
-
all: unset;
|
|
86
85
|
--icon-size: var(--helix-size-icon-tight);
|
|
86
|
+
all: unset;
|
|
87
87
|
|
|
88
88
|
align-items: center;
|
|
89
89
|
border-radius: var(--helix-radii-sm);
|
|
@@ -239,8 +239,8 @@ display: contents;
|
|
|
239
239
|
}
|
|
240
240
|
|
|
241
241
|
[part="start"] {
|
|
242
|
-
all: unset;
|
|
243
242
|
--icon-size: 40%;
|
|
243
|
+
all: unset;
|
|
244
244
|
|
|
245
245
|
align-items: center;
|
|
246
246
|
aspect-ratio: 1;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fusion.dev/helix",
|
|
3
3
|
"description": "Styled component tier. Extends the headless tier with token-driven presentation.",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.3",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ross Sheppard <ross.sheppard@fusion.dev>",
|
|
7
7
|
"repository": {
|
|
@@ -22,43 +22,38 @@
|
|
|
22
22
|
"default": "./dist/*/index.js"
|
|
23
23
|
},
|
|
24
24
|
"./custom-elements.json": "./custom-elements.json",
|
|
25
|
-
"./
|
|
26
|
-
"./
|
|
27
|
-
"./
|
|
28
|
-
"./svelte": "./svelte.d.ts",
|
|
29
|
-
"./vue": "./vue.d.ts"
|
|
25
|
+
"./jsx": "./types/jsx.d.ts",
|
|
26
|
+
"./svelte": "./types/svelte.d.ts",
|
|
27
|
+
"./vue": "./types/vue.d.ts"
|
|
30
28
|
},
|
|
31
29
|
"files": [
|
|
32
30
|
"custom-elements.json",
|
|
33
31
|
"dist",
|
|
34
|
-
"
|
|
35
|
-
"helix.css",
|
|
36
|
-
"jsx.d.ts",
|
|
37
|
-
"svelte.d.ts",
|
|
38
|
-
"vue.d.ts"
|
|
32
|
+
"types"
|
|
39
33
|
],
|
|
40
34
|
"customElements": "custom-elements.json",
|
|
41
35
|
"sideEffects": true,
|
|
42
36
|
"scripts": {
|
|
43
|
-
"analyze": "cem analyze --config
|
|
44
|
-
"build": "tsc -p tsconfig.json && tsc -p tsconfig.types.json",
|
|
45
|
-
"
|
|
46
|
-
"
|
|
37
|
+
"analyze": "bun --bun cem analyze --config cem.config.ts",
|
|
38
|
+
"build": "bun run element-events && tsc -p tsconfig.build.json && tsc -p tsconfig.types.json",
|
|
39
|
+
"element-events": "build-element-events --package styled",
|
|
40
|
+
"styles": "build-styles .",
|
|
41
|
+
"test": "bun run element-events && bun run test:pure && bun run test:dom && bun run test:ssr",
|
|
47
42
|
"test:dom": "bun test dom.spec",
|
|
48
43
|
"test:pure": "bun test pure.spec",
|
|
49
44
|
"test:ssr": "bun test ssr.spec",
|
|
50
|
-
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
45
|
+
"typecheck": "bun run element-events && tsc -p tsconfig.json --noEmit"
|
|
51
46
|
},
|
|
52
47
|
"bugs": "https://github.com/project-fusion/fusion/issues",
|
|
53
48
|
"dependencies": {
|
|
54
|
-
"@fusion.dev/helix-core": "0.4.
|
|
55
|
-
"@fusion.dev/helix-headless": "0.4.
|
|
56
|
-
"@fusion.dev/helix-styles": "0.4.
|
|
49
|
+
"@fusion.dev/helix-core": "0.4.3",
|
|
50
|
+
"@fusion.dev/helix-headless": "0.4.3",
|
|
51
|
+
"@fusion.dev/helix-styles": "0.4.3"
|
|
57
52
|
},
|
|
58
53
|
"devDependencies": {
|
|
59
54
|
"@custom-elements-manifest/analyzer": "^0.11.0",
|
|
60
|
-
"@fusion.dev/helix-cem": "0.4.
|
|
61
|
-
"@fusion.dev/helix-testing": "0.4.
|
|
55
|
+
"@fusion.dev/helix-cem": "0.4.3",
|
|
56
|
+
"@fusion.dev/helix-testing": "0.4.3",
|
|
62
57
|
"@fusion.dev/scripts": "0.0.0-dev",
|
|
63
58
|
"@happy-dom/global-registrator": "^20.0.0",
|
|
64
59
|
"@lit-labs/ssr": "^3.3.0",
|
|
@@ -18315,43 +18315,22 @@ export type CustomElements = {
|
|
|
18315
18315
|
|
|
18316
18316
|
/**
|
|
18317
18317
|
* One fragment shader over a full-screen triangle, with the palette read from
|
|
18318
|
-
* the tokens rather than given as colors.
|
|
18319
|
-
*
|
|
18320
|
-
*
|
|
18321
|
-
* against `--helix-color-primary` is a consequence of it.
|
|
18318
|
+
* the tokens rather than given as colors. A background written with hex values
|
|
18319
|
+
* is an asset that has to be re-cut when the brand moves; one written against
|
|
18320
|
+
* `--helix-color-primary` is a consequence of it.
|
|
18322
18321
|
*
|
|
18323
18322
|
* **Every shape ramps through four token stops**, and the token layer inverts
|
|
18324
|
-
* each
|
|
18325
|
-
*
|
|
18326
|
-
*
|
|
18327
|
-
*
|
|
18328
|
-
*
|
|
18329
|
-
* ground's own luminance, which the shader already has.
|
|
18323
|
+
* each: the page's background, `primary-subtle`, `primary`, then a peak. The
|
|
18324
|
+
* peak is the foreground on a dark page and `primary-active` on a light one,
|
|
18325
|
+
* because mixing a saturated hue toward near-black takes the chroma out of the
|
|
18326
|
+
* pixels carrying most of it. Which way the page runs is read off the ground's
|
|
18327
|
+
* own luminance rather than asked of the mode, which is a private token.
|
|
18330
18328
|
*
|
|
18331
18329
|
* **No dependency, and no scene graph.** The geometry is three vertices derived
|
|
18332
|
-
* from `gl_VertexID`, so there is no attribute, no buffer and no upload.
|
|
18333
|
-
* common implementations of this reach for a 3D library to draw one quad, which
|
|
18334
|
-
* is a camera and a material system for four vertices that never move.
|
|
18330
|
+
* from `gl_VertexID`, so there is no attribute, no buffer and no upload.
|
|
18335
18331
|
*
|
|
18336
18332
|
* **It stops when nobody is looking**, off screen and in a background tab, and
|
|
18337
|
-
* `prefers-reduced-motion` gets one still frame rather than an empty box
|
|
18338
|
-
* composition is the point and the drift is a garnish.
|
|
18339
|
-
*
|
|
18340
|
-
* **A layer over an interactive aura has to let the pointer through.** The
|
|
18341
|
-
* element is hit-testable only when `interactive` is set, because a background
|
|
18342
|
-
* that swallows clicks is worse than one that does nothing, but a scrim or an
|
|
18343
|
-
* overlay a consumer paints on top will absorb the move before it arrives. Any
|
|
18344
|
-
* decorative layer above this wants `pointer-events: none`. It has already
|
|
18345
|
-
* caught this repository's own bench once.
|
|
18346
|
-
*
|
|
18347
|
-
* **The fallback needs no detection.** Where WebGL is refused the canvas never
|
|
18348
|
-
* paints and is transparent, and the host carries a gradient of the same tokens
|
|
18349
|
-
* underneath. Nothing has to ask whether it worked.
|
|
18350
|
-
*
|
|
18351
|
-
* Presentation only, so there is no headless tier: the split exists to keep
|
|
18352
|
-
* behavior separate from styling, and there is no structure or semantics here
|
|
18353
|
-
* to separate. Decorative, so the host is hidden from assistive technology and
|
|
18354
|
-
* takes no pointer events.
|
|
18333
|
+
* `prefers-reduced-motion` gets one still frame rather than an empty box.
|
|
18355
18334
|
*
|
|
18356
18335
|
* ## Attributes & Properties
|
|
18357
18336
|
*
|
|
@@ -28088,41 +28067,21 @@ export type CustomElements = {
|
|
|
28088
28067
|
>;
|
|
28089
28068
|
|
|
28090
28069
|
/**
|
|
28091
|
-
* A sandboxed `<iframe>` pointed at `src`,
|
|
28092
|
-
*
|
|
28093
|
-
*
|
|
28070
|
+
* A sandboxed `<iframe>` pointed at `src`, a document the consumer provides.
|
|
28071
|
+
* That document imports whatever the examples need, listens for a render
|
|
28072
|
+
* message, and writes the markup into itself.
|
|
28094
28073
|
*
|
|
28095
28074
|
* **A frame rather than the page.** Rendering into the page meant an example
|
|
28096
|
-
* was styled by whatever surrounded it
|
|
28097
|
-
*
|
|
28098
|
-
*
|
|
28099
|
-
*
|
|
28100
|
-
*
|
|
28101
|
-
*
|
|
28102
|
-
* The cost is that the frame starts empty. Styles and element definitions do
|
|
28103
|
-
* not cross into it, because a document has its own stylesheets and a window
|
|
28104
|
-
* has its own custom element registry, so `src` has to load them. That is the
|
|
28105
|
-
* consumer's document rather than something guessed at here.
|
|
28075
|
+
* was styled by whatever surrounded it: an example restyling `helix-card`
|
|
28076
|
+
* restyled the sandbox too, a script ran against the real document, and a stray
|
|
28077
|
+
* `position: fixed` escaped the pane. The cost is that the frame starts empty,
|
|
28078
|
+
* a document having its own stylesheets and a window its own registry, so `src`
|
|
28079
|
+
* has to load them.
|
|
28106
28080
|
*
|
|
28107
28081
|
* **The source is not trusted, and the frame is what makes that safe.**
|
|
28108
|
-
* `sandbox="allow-scripts"` and
|
|
28109
|
-
*
|
|
28110
|
-
*
|
|
28111
|
-
* measured, through an `onerror` handler on an image that fails to load, which
|
|
28112
|
-
* `innerHTML` does not strip the way it refuses a `<script>` tag. That is what
|
|
28113
|
-
* lets a sandbox hold markup a reader pasted from somewhere, or one day arrived
|
|
28114
|
-
* in a shared link, rather than only what its owner typed.
|
|
28115
|
-
*
|
|
28116
|
-
* `allow-forms` is granted because examples have forms in them and a submit
|
|
28117
|
-
* that silently does nothing is a worse lie than one that navigates a frame
|
|
28118
|
-
* nobody is looking at. Top-level navigation, popups and modals are not.
|
|
28119
|
-
*
|
|
28120
|
-
* **`allow="clipboard-write *; fullscreen *"`, and the stars matter.** Both
|
|
28121
|
-
* policies default to `self`, and a frame on an opaque origin is not `self`, so
|
|
28122
|
-
* the default denies both: a component that copies to the clipboard and a video
|
|
28123
|
-
* offering a fullscreen button each become a control that silently does nothing,
|
|
28124
|
-
* a denied request rejecting a promise nobody was watching. Nothing else is
|
|
28125
|
-
* granted, and a copy still needs the reader's own gesture.
|
|
28082
|
+
* `sandbox="allow-scripts"` and never `allow-same-origin`: the two together are
|
|
28083
|
+
* the same as no sandbox at all, a document on its own origin being able to
|
|
28084
|
+
* reach up and remove the attribute.
|
|
28126
28085
|
*
|
|
28127
28086
|
* ## Attributes & Properties
|
|
28128
28087
|
*
|
|
@@ -28201,41 +28160,20 @@ export type CustomElements = {
|
|
|
28201
28160
|
>;
|
|
28202
28161
|
|
|
28203
28162
|
/**
|
|
28204
|
-
* Coordination is by event
|
|
28205
|
-
*
|
|
28206
|
-
*
|
|
28207
|
-
*
|
|
28163
|
+
* Coordination is by event: a source pane dispatches `helix-before-edit`, which
|
|
28164
|
+
* bubbles, and the sandbox hands the value to whatever preview is slotted into
|
|
28165
|
+
* it. Neither child knows the other exists, so either can be replaced or used
|
|
28166
|
+
* alone.
|
|
28208
28167
|
*
|
|
28209
28168
|
* The event carries the pane's `name`, which is what lets one sandbox hold
|
|
28210
|
-
* several panes
|
|
28211
|
-
*
|
|
28212
|
-
*
|
|
28213
|
-
*
|
|
28214
|
-
*
|
|
28215
|
-
*
|
|
28216
|
-
*
|
|
28217
|
-
*
|
|
28218
|
-
* all the splitter's, and the corner arrives on its own wherever a nested
|
|
28219
|
-
* splitter crosses the one it is in.
|
|
28220
|
-
*
|
|
28221
|
-
* The panes are the inner splitter and the panel is the outer one, which is the
|
|
28222
|
-
* order that makes the panel span the full width: the outer divider runs edge to
|
|
28223
|
-
* edge and the inner stops at it.
|
|
28224
|
-
*
|
|
28225
|
-
* **Both are controlled from here, so `split` and `panel-size` stay the truth.**
|
|
28226
|
-
* A splitter that owned its own position would leave this element reporting one
|
|
28227
|
-
* arrangement and showing another, and a consumer restoring a saved layout
|
|
28228
|
-
* writes to these two properties. Each splitter announces where it wants to go
|
|
28229
|
-
* and this answers, which is the same contract a form control has with a
|
|
28230
|
-
* framework.
|
|
28231
|
-
*
|
|
28232
|
-
* **The panel is in pixels here and a percentage in the splitter, and the
|
|
28233
|
-
* conversion belongs here.** A terminal wants a number of lines rather than a
|
|
28234
|
-
* share of the window, so its height should not change when the window does. A
|
|
28235
|
-
* splitter has no business knowing that, so it stays percentage-pure and this
|
|
28236
|
-
* element, which does know what is in the panel, holds the box and converts.
|
|
28237
|
-
* That is also what keeps a stored `panelSize` from a previous visit meaning
|
|
28238
|
-
* what it meant when it was written.
|
|
28169
|
+
* several panes: `html` is the preview's markup and `css` its stylesheet. A
|
|
28170
|
+
* pane named anything else is showing something rather than driving it, and is
|
|
28171
|
+
* ignored.
|
|
28172
|
+
*
|
|
28173
|
+
* **The dividers are two nested `helix-splitter`s**, not a grid this element
|
|
28174
|
+
* drags itself, so the pointer handling, the keyboard handling and the corner
|
|
28175
|
+
* are all the splitter's. The panes are the inner splitter and the panel is the
|
|
28176
|
+
* outer one, which is the order that makes the panel span the full width.
|
|
28239
28177
|
*
|
|
28240
28178
|
* ## Attributes & Properties
|
|
28241
28179
|
*
|
|
@@ -33956,43 +33894,22 @@ export type CustomElementsSolidJs = {
|
|
|
33956
33894
|
|
|
33957
33895
|
/**
|
|
33958
33896
|
* One fragment shader over a full-screen triangle, with the palette read from
|
|
33959
|
-
* the tokens rather than given as colors.
|
|
33960
|
-
*
|
|
33961
|
-
*
|
|
33962
|
-
* against `--helix-color-primary` is a consequence of it.
|
|
33897
|
+
* the tokens rather than given as colors. A background written with hex values
|
|
33898
|
+
* is an asset that has to be re-cut when the brand moves; one written against
|
|
33899
|
+
* `--helix-color-primary` is a consequence of it.
|
|
33963
33900
|
*
|
|
33964
33901
|
* **Every shape ramps through four token stops**, and the token layer inverts
|
|
33965
|
-
* each
|
|
33966
|
-
*
|
|
33967
|
-
*
|
|
33968
|
-
*
|
|
33969
|
-
*
|
|
33970
|
-
* ground's own luminance, which the shader already has.
|
|
33902
|
+
* each: the page's background, `primary-subtle`, `primary`, then a peak. The
|
|
33903
|
+
* peak is the foreground on a dark page and `primary-active` on a light one,
|
|
33904
|
+
* because mixing a saturated hue toward near-black takes the chroma out of the
|
|
33905
|
+
* pixels carrying most of it. Which way the page runs is read off the ground's
|
|
33906
|
+
* own luminance rather than asked of the mode, which is a private token.
|
|
33971
33907
|
*
|
|
33972
33908
|
* **No dependency, and no scene graph.** The geometry is three vertices derived
|
|
33973
|
-
* from `gl_VertexID`, so there is no attribute, no buffer and no upload.
|
|
33974
|
-
* common implementations of this reach for a 3D library to draw one quad, which
|
|
33975
|
-
* is a camera and a material system for four vertices that never move.
|
|
33909
|
+
* from `gl_VertexID`, so there is no attribute, no buffer and no upload.
|
|
33976
33910
|
*
|
|
33977
33911
|
* **It stops when nobody is looking**, off screen and in a background tab, and
|
|
33978
|
-
* `prefers-reduced-motion` gets one still frame rather than an empty box
|
|
33979
|
-
* composition is the point and the drift is a garnish.
|
|
33980
|
-
*
|
|
33981
|
-
* **A layer over an interactive aura has to let the pointer through.** The
|
|
33982
|
-
* element is hit-testable only when `interactive` is set, because a background
|
|
33983
|
-
* that swallows clicks is worse than one that does nothing, but a scrim or an
|
|
33984
|
-
* overlay a consumer paints on top will absorb the move before it arrives. Any
|
|
33985
|
-
* decorative layer above this wants `pointer-events: none`. It has already
|
|
33986
|
-
* caught this repository's own bench once.
|
|
33987
|
-
*
|
|
33988
|
-
* **The fallback needs no detection.** Where WebGL is refused the canvas never
|
|
33989
|
-
* paints and is transparent, and the host carries a gradient of the same tokens
|
|
33990
|
-
* underneath. Nothing has to ask whether it worked.
|
|
33991
|
-
*
|
|
33992
|
-
* Presentation only, so there is no headless tier: the split exists to keep
|
|
33993
|
-
* behavior separate from styling, and there is no structure or semantics here
|
|
33994
|
-
* to separate. Decorative, so the host is hidden from assistive technology and
|
|
33995
|
-
* takes no pointer events.
|
|
33912
|
+
* `prefers-reduced-motion` gets one still frame rather than an empty box.
|
|
33996
33913
|
*
|
|
33997
33914
|
* ## Attributes & Properties
|
|
33998
33915
|
*
|
|
@@ -43952,41 +43869,21 @@ export type CustomElementsSolidJs = {
|
|
|
43952
43869
|
>;
|
|
43953
43870
|
|
|
43954
43871
|
/**
|
|
43955
|
-
* A sandboxed `<iframe>` pointed at `src`,
|
|
43956
|
-
*
|
|
43957
|
-
*
|
|
43872
|
+
* A sandboxed `<iframe>` pointed at `src`, a document the consumer provides.
|
|
43873
|
+
* That document imports whatever the examples need, listens for a render
|
|
43874
|
+
* message, and writes the markup into itself.
|
|
43958
43875
|
*
|
|
43959
43876
|
* **A frame rather than the page.** Rendering into the page meant an example
|
|
43960
|
-
* was styled by whatever surrounded it
|
|
43961
|
-
*
|
|
43962
|
-
*
|
|
43963
|
-
*
|
|
43964
|
-
*
|
|
43965
|
-
*
|
|
43966
|
-
* The cost is that the frame starts empty. Styles and element definitions do
|
|
43967
|
-
* not cross into it, because a document has its own stylesheets and a window
|
|
43968
|
-
* has its own custom element registry, so `src` has to load them. That is the
|
|
43969
|
-
* consumer's document rather than something guessed at here.
|
|
43877
|
+
* was styled by whatever surrounded it: an example restyling `helix-card`
|
|
43878
|
+
* restyled the sandbox too, a script ran against the real document, and a stray
|
|
43879
|
+
* `position: fixed` escaped the pane. The cost is that the frame starts empty,
|
|
43880
|
+
* a document having its own stylesheets and a window its own registry, so `src`
|
|
43881
|
+
* has to load them.
|
|
43970
43882
|
*
|
|
43971
43883
|
* **The source is not trusted, and the frame is what makes that safe.**
|
|
43972
|
-
* `sandbox="allow-scripts"` and
|
|
43973
|
-
*
|
|
43974
|
-
*
|
|
43975
|
-
* measured, through an `onerror` handler on an image that fails to load, which
|
|
43976
|
-
* `innerHTML` does not strip the way it refuses a `<script>` tag. That is what
|
|
43977
|
-
* lets a sandbox hold markup a reader pasted from somewhere, or one day arrived
|
|
43978
|
-
* in a shared link, rather than only what its owner typed.
|
|
43979
|
-
*
|
|
43980
|
-
* `allow-forms` is granted because examples have forms in them and a submit
|
|
43981
|
-
* that silently does nothing is a worse lie than one that navigates a frame
|
|
43982
|
-
* nobody is looking at. Top-level navigation, popups and modals are not.
|
|
43983
|
-
*
|
|
43984
|
-
* **`allow="clipboard-write *; fullscreen *"`, and the stars matter.** Both
|
|
43985
|
-
* policies default to `self`, and a frame on an opaque origin is not `self`, so
|
|
43986
|
-
* the default denies both: a component that copies to the clipboard and a video
|
|
43987
|
-
* offering a fullscreen button each become a control that silently does nothing,
|
|
43988
|
-
* a denied request rejecting a promise nobody was watching. Nothing else is
|
|
43989
|
-
* granted, and a copy still needs the reader's own gesture.
|
|
43884
|
+
* `sandbox="allow-scripts"` and never `allow-same-origin`: the two together are
|
|
43885
|
+
* the same as no sandbox at all, a document on its own origin being able to
|
|
43886
|
+
* reach up and remove the attribute.
|
|
43990
43887
|
*
|
|
43991
43888
|
* ## Attributes & Properties
|
|
43992
43889
|
*
|
|
@@ -44068,41 +43965,20 @@ export type CustomElementsSolidJs = {
|
|
|
44068
43965
|
>;
|
|
44069
43966
|
|
|
44070
43967
|
/**
|
|
44071
|
-
* Coordination is by event
|
|
44072
|
-
*
|
|
44073
|
-
*
|
|
44074
|
-
*
|
|
43968
|
+
* Coordination is by event: a source pane dispatches `helix-before-edit`, which
|
|
43969
|
+
* bubbles, and the sandbox hands the value to whatever preview is slotted into
|
|
43970
|
+
* it. Neither child knows the other exists, so either can be replaced or used
|
|
43971
|
+
* alone.
|
|
44075
43972
|
*
|
|
44076
43973
|
* The event carries the pane's `name`, which is what lets one sandbox hold
|
|
44077
|
-
* several panes
|
|
44078
|
-
*
|
|
44079
|
-
*
|
|
44080
|
-
*
|
|
44081
|
-
*
|
|
44082
|
-
*
|
|
44083
|
-
*
|
|
44084
|
-
*
|
|
44085
|
-
* all the splitter's, and the corner arrives on its own wherever a nested
|
|
44086
|
-
* splitter crosses the one it is in.
|
|
44087
|
-
*
|
|
44088
|
-
* The panes are the inner splitter and the panel is the outer one, which is the
|
|
44089
|
-
* order that makes the panel span the full width: the outer divider runs edge to
|
|
44090
|
-
* edge and the inner stops at it.
|
|
44091
|
-
*
|
|
44092
|
-
* **Both are controlled from here, so `split` and `panel-size` stay the truth.**
|
|
44093
|
-
* A splitter that owned its own position would leave this element reporting one
|
|
44094
|
-
* arrangement and showing another, and a consumer restoring a saved layout
|
|
44095
|
-
* writes to these two properties. Each splitter announces where it wants to go
|
|
44096
|
-
* and this answers, which is the same contract a form control has with a
|
|
44097
|
-
* framework.
|
|
44098
|
-
*
|
|
44099
|
-
* **The panel is in pixels here and a percentage in the splitter, and the
|
|
44100
|
-
* conversion belongs here.** A terminal wants a number of lines rather than a
|
|
44101
|
-
* share of the window, so its height should not change when the window does. A
|
|
44102
|
-
* splitter has no business knowing that, so it stays percentage-pure and this
|
|
44103
|
-
* element, which does know what is in the panel, holds the box and converts.
|
|
44104
|
-
* That is also what keeps a stored `panelSize` from a previous visit meaning
|
|
44105
|
-
* what it meant when it was written.
|
|
43974
|
+
* several panes: `html` is the preview's markup and `css` its stylesheet. A
|
|
43975
|
+
* pane named anything else is showing something rather than driving it, and is
|
|
43976
|
+
* ignored.
|
|
43977
|
+
*
|
|
43978
|
+
* **The dividers are two nested `helix-splitter`s**, not a grid this element
|
|
43979
|
+
* drags itself, so the pointer handling, the keyboard handling and the corner
|
|
43980
|
+
* are all the splitter's. The panes are the inner splitter and the panel is the
|
|
43981
|
+
* outer one, which is the order that makes the panel span the full width.
|
|
44106
43982
|
*
|
|
44107
43983
|
* ## Attributes & Properties
|
|
44108
43984
|
*
|
|
@@ -10110,7 +10110,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
10110
10110
|
HelixAppHeaderVueProps,
|
|
10111
10111
|
HelixAppHeaderVueEvents
|
|
10112
10112
|
>;
|
|
10113
|
-
/** One fragment shader over a full-screen triangle, with the palette read from the tokens rather than given as colors.
|
|
10113
|
+
/** One fragment shader over a full-screen triangle, with the palette read from the tokens rather than given as colors. A background written with hex values is an asset that has to be re-cut when the brand moves; one written against '--helix-color-primary' is a consequence of it. **Every shape ramps through four token stops**, and the token layer inverts each: the page's background, 'primary-subtle', 'primary', then a peak. The peak is the foreground on a dark page and 'primary-active' on a light one, because mixing a saturated hue toward near-black takes the chroma out of the pixels carrying most of it. Which way the page runs is read off the ground's own luminance rather than asked of the mode, which is a private token. **No dependency, and no scene graph.** The geometry is three vertices derived from 'gl_VertexID', so there is no attribute, no buffer and no upload. **It stops when nobody is looking**, off screen and in a background tab, and 'prefers-reduced-motion' gets one still frame rather than an empty box. */
|
|
10114
10114
|
"helix-aura": DefineCustomElement<
|
|
10115
10115
|
HelixAura,
|
|
10116
10116
|
HelixAuraVueProps,
|
|
@@ -10548,13 +10548,13 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
10548
10548
|
HelixRatingVueProps,
|
|
10549
10549
|
HelixRatingVueEvents
|
|
10550
10550
|
>;
|
|
10551
|
-
/** A sandboxed '<iframe>' pointed at 'src',
|
|
10551
|
+
/** A sandboxed '<iframe>' pointed at 'src', a document the consumer provides. That document imports whatever the examples need, listens for a render message, and writes the markup into itself. **A frame rather than the page.** Rendering into the page meant an example was styled by whatever surrounded it: an example restyling 'helix-card' restyled the sandbox too, a script ran against the real document, and a stray 'position: fixed' escaped the pane. The cost is that the frame starts empty, a document having its own stylesheets and a window its own registry, so 'src' has to load them. **The source is not trusted, and the frame is what makes that safe.** 'sandbox="allow-scripts"' and never 'allow-same-origin': the two together are the same as no sandbox at all, a document on its own origin being able to reach up and remove the attribute. */
|
|
10552
10552
|
"helix-sandbox-preview": DefineCustomElement<
|
|
10553
10553
|
HelixSandboxPreview,
|
|
10554
10554
|
HelixSandboxPreviewVueProps,
|
|
10555
10555
|
HelixSandboxPreviewVueEvents
|
|
10556
10556
|
>;
|
|
10557
|
-
/** Coordination is by event
|
|
10557
|
+
/** Coordination is by event: a source pane dispatches 'helix-before-edit', which bubbles, and the sandbox hands the value to whatever preview is slotted into it. Neither child knows the other exists, so either can be replaced or used alone. The event carries the pane's 'name', which is what lets one sandbox hold several panes: 'html' is the preview's markup and 'css' its stylesheet. A pane named anything else is showing something rather than driving it, and is ignored. **The dividers are two nested 'helix-splitter's**, not a grid this element drags itself, so the pointer handling, the keyboard handling and the corner are all the splitter's. The panes are the inner splitter and the panel is the outer one, which is the order that makes the panel span the full width. */
|
|
10558
10558
|
"helix-sandbox": DefineCustomElement<
|
|
10559
10559
|
HelixSandbox,
|
|
10560
10560
|
HelixSandboxVueProps,
|