@fusion.dev/helix 0.103.3 → 0.104.1

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.
Files changed (49) hide show
  1. package/custom-elements.json +10516 -753
  2. package/dist/announcement/root/announcement-root.js +2 -1
  3. package/dist/canvas/edge/canvas-edge.d.ts +24 -0
  4. package/dist/canvas/edge/canvas-edge.js +20 -0
  5. package/dist/canvas/index.d.ts +5 -0
  6. package/dist/canvas/index.js +4 -0
  7. package/dist/canvas/node/canvas-node.css.d.ts +1 -0
  8. package/dist/canvas/node/canvas-node.css.js +360 -0
  9. package/dist/canvas/node/canvas-node.d.ts +53 -0
  10. package/dist/canvas/node/canvas-node.js +23 -0
  11. package/dist/canvas/root/canvas-root.css.d.ts +1 -0
  12. package/dist/canvas/root/canvas-root.css.js +268 -0
  13. package/dist/canvas/root/canvas-root.d.ts +63 -0
  14. package/dist/canvas/root/canvas-root.js +25 -0
  15. package/dist/chat/root/chat-root.css.js +4 -10
  16. package/dist/chat/root/chat-root.js +2 -1
  17. package/dist/data-table/root/data-table-root.d.ts +1 -0
  18. package/dist/data-table/root/data-table-root.js +2 -1
  19. package/dist/drilldown/root/drilldown-root.js +2 -1
  20. package/dist/element-events.generated.js +15 -0
  21. package/dist/empty/root/empty-root.js +2 -1
  22. package/dist/index.d.ts +1 -0
  23. package/dist/index.js +1 -0
  24. package/dist/lightbox/root/lightbox-root.css.js +4 -9
  25. package/dist/lightbox/root/lightbox-root.js +2 -1
  26. package/dist/listbox/root/listbox-root.js +2 -0
  27. package/dist/map/root/map-root.css.js +2 -102
  28. package/dist/map/root/map-root.d.ts +2 -2
  29. package/dist/map/root/map-root.js +2 -1
  30. package/dist/menu/root/menu-root.js +2 -0
  31. package/dist/notifications/root/notifications-root.d.ts +1 -0
  32. package/dist/notifications/root/notifications-root.js +2 -1
  33. package/dist/pagination/root/pagination-root.css.js +0 -9
  34. package/dist/pagination/root/pagination-root.js +2 -1
  35. package/dist/sandbox/root/sandbox-root.d.ts +16 -1
  36. package/dist/sandbox/root/sandbox-root.js +13 -5
  37. package/dist/shared/live/live.css.d.ts +1 -0
  38. package/dist/shared/live/live.css.js +9 -0
  39. package/dist/shared/viewport/viewport.css.d.ts +1 -0
  40. package/dist/shared/viewport/viewport.css.js +106 -0
  41. package/dist/table/root/table-root.d.ts +1 -0
  42. package/dist/table/root/table-root.js +2 -1
  43. package/dist/tree/root/tree-root.d.ts +1 -0
  44. package/dist/tree/root/tree-root.js +2 -1
  45. package/dist/video/root/video-root.js +2 -1
  46. package/package.json +6 -6
  47. package/types/jsx.d.ts +5408 -746
  48. package/types/svelte.d.ts +3 -0
  49. package/types/vue.d.ts +1653 -209
@@ -13,7 +13,7 @@ import type { CSSResultGroup } from 'lit';
13
13
  * takes the header and footer a consumer slotted and leaves the buttons alone.
14
14
  *
15
15
  * @since 0.100.0
16
- * @status stable
16
+ * @status experimental
17
17
  * @category media
18
18
  * @aliases Map frame, Map container, Geo
19
19
  * @documentation https://fusion.dev/helix/components/map
@@ -21,7 +21,7 @@ import type { CSSResultGroup } from 'lit';
21
21
  * @cssproperty --map-background-color - The well behind the map, seen while tiles are on their way.
22
22
  * @cssproperty --map-block-size - How tall the frame is. A length, since the map fills it.
23
23
  * @cssproperty --map-border-color - Color of the frame's edge.
24
- * @cssproperty --map-control-background-color - The ground under the pan and zoom buttons.
24
+ * @cssproperty --viewport-control-background-color - The ground under the pan and zoom buttons, one name with `Canvas`.
25
25
  */
26
26
  export declare class HelixMap extends HelixHeadlessMap {
27
27
  static styles: CSSResultGroup;
@@ -6,9 +6,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessMap } from '@fusion.dev/helix-headless/map';
9
+ import { styles as viewportStyles } from '../../shared/viewport/viewport.css.js';
9
10
  import { styles } from './map-root.css.js';
10
11
  let HelixMap = class HelixMap extends HelixHeadlessMap {
11
- static { this.styles = styles; }
12
+ static { this.styles = [viewportStyles, styles]; }
12
13
  };
13
14
  HelixMap = __decorate([
14
15
  customElement('helix-map')
@@ -9,9 +9,11 @@ import { HelixHeadlessMenu } from '@fusion.dev/helix-headless/menu';
9
9
  import { styles as collectionStateStyles } from '../../shared/collection/state.css.js';
10
10
  import { styles as floatingEntranceStyles } from '../../shared/floating/entrance.css.js';
11
11
  import { styles as floatingPanelStyles } from '../../shared/floating/panel.css.js';
12
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
12
13
  import { styles } from './menu-root.css.js';
13
14
  let HelixMenu = class HelixMenu extends HelixHeadlessMenu {
14
15
  static { this.styles = [
16
+ liveStyles,
15
17
  collectionStateStyles,
16
18
  floatingPanelStyles,
17
19
  floatingEntranceStyles,
@@ -25,6 +25,7 @@ import '../notification/notification.js';
25
25
  * @slot header - Above the list, for a title and the mark-all control.
26
26
  *
27
27
  * @csspart list - The list itself.
28
+ * @csspart live - The empty and loading lines again, in a region a screen reader hears when they change. Visually hidden in the styled tier.
28
29
  * @csspart mark-all - The control that marks everything read.
29
30
  *
30
31
  * @cssproperty --notifications-max-block-size - How tall the feed may get before the list scrolls.
@@ -7,11 +7,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessNotifications } from '@fusion.dev/helix-headless/notifications';
9
9
  import { styles as collectionStateStyles } from '../../shared/collection/state.css.js';
10
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
10
11
  import { styles } from './notifications-root.css.js';
11
12
  import '../notification/notification.js';
12
13
  let HelixNotifications = class HelixNotifications extends HelixHeadlessNotifications {
13
14
  static { this.tier = 'helix-'; }
14
- static { this.styles = [collectionStateStyles, styles]; }
15
+ static { this.styles = [liveStyles, collectionStateStyles, styles]; }
15
16
  };
16
17
  HelixNotifications = __decorate([
17
18
  customElement('helix-notifications')
@@ -119,15 +119,6 @@ user-select: none;
119
119
  display: none;
120
120
  }
121
121
 
122
- [part="live"] {
123
- block-size: 1px;
124
- clip-path: inset(50%);
125
- inline-size: 1px;
126
- overflow: hidden;
127
- position: absolute;
128
- white-space: nowrap;
129
- }
130
-
131
122
  [part="status"] {
132
123
  color: var(--helix-color-foreground-muted);
133
124
  font-variant-numeric: tabular-nums;
@@ -6,9 +6,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessPagination } from '@fusion.dev/helix-headless/pagination';
9
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
9
10
  import { styles } from './pagination-root.css.js';
10
11
  let HelixPagination = class HelixPagination extends HelixHeadlessPagination {
11
- static { this.styles = styles; }
12
+ static { this.styles = [liveStyles, styles]; }
12
13
  };
13
14
  HelixPagination = __decorate([
14
15
  customElement('helix-pagination')
@@ -353,7 +353,13 @@ export declare class HelixSandbox extends HelixElement {
353
353
  */
354
354
  private answer;
355
355
  connectedCallback(): void;
356
- /** Watches the body, whose height is what the pane sizes are computed from. */
356
+ /**
357
+ * Watches the body, whose height is what the pane sizes are computed from.
358
+ *
359
+ * `render` asks for the render that height is for. The observer asks too, in
360
+ * the report it gives every box it starts watching, so only a caller that
361
+ * cannot wait for it passes true.
362
+ */
357
363
  private watchBody;
358
364
  /**
359
365
  * Takes the body's height before each render, so the conversion is current.
@@ -363,6 +369,15 @@ export declare class HelixSandbox extends HelixElement {
363
369
  * shim carries attributes but not tree traversal.
364
370
  */
365
371
  protected willUpdate(changed: PropertyValues): void;
372
+ /**
373
+ * Starts watching the body, now there is one.
374
+ *
375
+ * **The render its height is for is the observer's to ask for**, in the
376
+ * report every newly watched box gets, which arrives after layout and before
377
+ * the first paint. Asking here as well rendered once from inside this update
378
+ * and again when the report came. Where there is no observer, nothing else
379
+ * will ask.
380
+ */
366
381
  protected firstUpdated(changed: PropertyValues): void;
367
382
  disconnectedCallback(): void;
368
383
  /**
@@ -179,20 +179,25 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
179
179
  this.addEventListener('helix-console', this.handleConsole);
180
180
  this.addEventListener('helix-before-edit', this.handleSourceChange);
181
181
  if (this.hasUpdated) {
182
- this.watchBody();
182
+ this.watchBody(true);
183
183
  }
184
184
  }
185
- watchBody() {
185
+ watchBody(render) {
186
186
  const body = this.renderRoot.querySelector('[part="body"]');
187
187
  if (!body) {
188
188
  return;
189
189
  }
190
190
  this.bodyHeight = body.getBoundingClientRect().height;
191
191
  this.watch?.observe(body);
192
- this.requestUpdate();
192
+ if (render) {
193
+ this.requestUpdate();
194
+ }
193
195
  }
194
196
  willUpdate(changed) {
195
197
  super.willUpdate(changed);
198
+ if (!this.hasUpdated && this.childrenKnown) {
199
+ this.readPanel();
200
+ }
196
201
  if (!this.hasUpdated || typeof this.renderRoot?.querySelector !== 'function') {
197
202
  return;
198
203
  }
@@ -203,8 +208,11 @@ let HelixSandbox = class HelixSandbox extends HelixElement {
203
208
  }
204
209
  firstUpdated(changed) {
205
210
  super.firstUpdated(changed);
206
- this.readPanel();
207
- this.watchBody();
211
+ if (this.serverRendered) {
212
+ this.readPanel();
213
+ this.finishHydration();
214
+ }
215
+ this.watchBody(this.watch === undefined);
208
216
  }
209
217
  disconnectedCallback() {
210
218
  super.disconnectedCallback();
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,9 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`[part="live"] {
3
+ block-size: 1px;
4
+ clip-path: inset(50%);
5
+ inline-size: 1px;
6
+ overflow: hidden;
7
+ position: absolute;
8
+ white-space: nowrap;
9
+ }`);
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,106 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`[part="controls"] {
3
+ display: grid;
4
+ gap: var(--helix-space-2xs);
5
+
6
+ grid-template-areas:
7
+ ". up . zoomin"
8
+ "start . end zoomout"
9
+ ". down . full";
10
+ position: absolute;
11
+
12
+ inset-block-start: var(--helix-space-sm);
13
+ inset-inline-end: var(--helix-space-sm);
14
+ transition: opacity var(--helix-duration-fast) var(--helix-easing-standard);
15
+ }
16
+
17
+ [part="controls"]:not(:has([part="zoom-in"])) {
18
+ grid-template-areas:
19
+ ". up ."
20
+ "start . end"
21
+ ". down full";
22
+ }
23
+
24
+ [part="controls"]:not(:has([part="pan-up"])) {
25
+ grid-template-areas:
26
+ "zoomin"
27
+ "zoomout"
28
+ "full";
29
+ }
30
+
31
+ :host(:fullscreen) {
32
+ display: block;
33
+ }
34
+
35
+ :host(:state(fullscreen)) [part="region"] {
36
+ block-size: 100dvh;
37
+ border: none;
38
+ border-radius: 0;
39
+ }
40
+
41
+ :host([controls-placement="top-end"]) [part="controls"] {
42
+ inset-block: var(--helix-space-sm) auto;
43
+ inset-inline: auto var(--helix-space-sm);
44
+ }
45
+
46
+ :host([controls-placement="top-start"]) [part="controls"] {
47
+ inset-block: var(--helix-space-sm) auto;
48
+ inset-inline: var(--helix-space-sm) auto;
49
+ }
50
+
51
+ :host([controls-placement="bottom-end"]) [part="controls"] {
52
+ inset-block: auto var(--helix-space-sm);
53
+ inset-inline: auto var(--helix-space-sm);
54
+ }
55
+
56
+ :host([controls-placement="bottom-start"]) [part="controls"] {
57
+ inset-block: auto var(--helix-space-sm);
58
+ inset-inline: var(--helix-space-sm) auto;
59
+ }
60
+
61
+ [part="pan-up"] {
62
+ grid-area: up;
63
+ }
64
+ [part="pan-down"] {
65
+ grid-area: down;
66
+ }
67
+ [part="pan-start"] {
68
+ grid-area: start;
69
+ }
70
+ [part="pan-end"] {
71
+ grid-area: end;
72
+ }
73
+ [part="zoom-in"] {
74
+ grid-area: zoomin;
75
+ }
76
+ [part="zoom-out"] {
77
+ grid-area: zoomout;
78
+ }
79
+ [part="fullscreen"] {
80
+ grid-area: full;
81
+ }
82
+
83
+ [part="controls"] button {
84
+ align-items: center;
85
+ background-color: var(--viewport-control-background-color, var(--helix-color-surface-overlay));
86
+ border: var(--helix-border-thin) solid var(--helix-color-border);
87
+ border-radius: var(--helix-radii-sm);
88
+ block-size: var(--helix-size-control-sm);
89
+ color: var(--helix-color-foreground);
90
+ cursor: pointer;
91
+ display: inline-flex;
92
+ font-family: var(--helix-font-sans);
93
+ font-size: var(--helix-text-sm);
94
+ inline-size: var(--helix-size-control-sm);
95
+ justify-content: center;
96
+ padding: 0;
97
+ }
98
+
99
+ [part="controls"] button:focus-visible {
100
+ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
101
+ outline-offset: var(--helix-size-focus-offset);
102
+ }
103
+
104
+ [part="controls"] button:hover {
105
+ background-color: var(--helix-color-surface-raised);
106
+ }`);
@@ -15,6 +15,7 @@ import type { CSSResultGroup } from 'lit';
15
15
  *
16
16
  * @slot - The table's rows.
17
17
  *
18
+ * @csspart live - The empty and loading lines again, in a region a screen reader hears when they change. Visually hidden in the styled tier.
18
19
  * @csspart table - The grid.
19
20
  *
20
21
  * @cssproperty --table-columns - Track list for the columns, which wins over the one the columns worked out.
@@ -7,9 +7,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessTable } from '@fusion.dev/helix-headless/table';
9
9
  import { styles as collectionStateStyles } from '../../shared/collection/state.css.js';
10
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
10
11
  import { styles } from './table-root.css.js';
11
12
  let HelixTable = class HelixTable extends HelixHeadlessTable {
12
- static { this.styles = [collectionStateStyles, styles]; }
13
+ static { this.styles = [liveStyles, collectionStateStyles, styles]; }
13
14
  };
14
15
  HelixTable = __decorate([
15
16
  customElement('helix-table')
@@ -18,6 +18,7 @@ import type { CSSResultGroup } from 'lit';
18
18
  *
19
19
  * @event {HelixSelectEvent} helix-select - Fired when an item is chosen. Dispatched by the item and listened for here, because the tree is what a consumer holds a reference to. Cancelable: refusing it takes the decision and nothing moves.
20
20
  *
21
+ * @csspart live - The empty and loading lines again, in a region a screen reader hears when they change. Visually hidden in the styled tier.
21
22
  * @csspart tree - The tree container.
22
23
  *
23
24
  * @cssproperty --tree-chevron-gap - Set from `chevron-placement`; the space before the chevron.
@@ -8,9 +8,10 @@ import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessTree } from '@fusion.dev/helix-headless/tree';
9
9
  import { property } from 'lit/decorators.js';
10
10
  import { styles as collectionStateStyles } from '../../shared/collection/state.css.js';
11
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
11
12
  import { styles } from './tree-root.css.js';
12
13
  let HelixTree = class HelixTree extends HelixHeadlessTree {
13
- static { this.styles = [collectionStateStyles, styles]; }
14
+ static { this.styles = [liveStyles, collectionStateStyles, styles]; }
14
15
  };
15
16
  __decorate([
16
17
  property({ attribute: 'chevron-placement', reflect: true })
@@ -10,10 +10,11 @@ import { property } from 'lit/decorators.js';
10
10
  import '../../icon/index.js';
11
11
  import '../../menu/index.js';
12
12
  import { styles as glyphStyles } from '../../shared/glyph/glyph.css.js';
13
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
13
14
  import { styles } from './video-root.css.js';
14
15
  let HelixVideo = class HelixVideo extends HelixHeadlessVideo {
15
16
  static { this.tier = 'helix-'; }
16
- static { this.styles = [glyphStyles, styles]; }
17
+ static { this.styles = [liveStyles, glyphStyles, styles]; }
17
18
  };
18
19
  __decorate([
19
20
  property({ reflect: true })
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.103.3",
4
+ "version": "0.104.1",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -47,13 +47,13 @@
47
47
  },
48
48
  "bugs": "https://github.com/project-fusion/fusion/issues",
49
49
  "dependencies": {
50
- "@fusion.dev/helix-core": "0.103.3",
51
- "@fusion.dev/helix-headless": "0.103.3",
52
- "@fusion.dev/helix-styles": "0.103.3"
50
+ "@fusion.dev/helix-core": "0.104.1",
51
+ "@fusion.dev/helix-headless": "0.104.1",
52
+ "@fusion.dev/helix-styles": "0.104.1"
53
53
  },
54
54
  "devDependencies": {
55
- "@fusion.dev/helix-cem": "0.103.3",
56
- "@fusion.dev/helix-testing": "0.103.3",
55
+ "@fusion.dev/helix-cem": "0.104.1",
56
+ "@fusion.dev/helix-testing": "0.104.1",
57
57
  "@fusion.dev/scripts": "0.0.0-dev",
58
58
  "@happy-dom/global-registrator": "^20.0.0",
59
59
  "@lit-labs/ssr": "^4.1.0",