@fusion.dev/helix 0.103.3 → 0.104.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.
Files changed (49) hide show
  1. package/custom-elements.json +10505 -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
@@ -0,0 +1,268 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`:host {
3
+ display: contents;
4
+ }
5
+
6
+ [part="region"] {
7
+ background-color: var(--canvas-background-color, var(--helix-color-surface-sunken));
8
+ block-size: var(--canvas-block-size, 30rem);
9
+ border: var(--helix-border-thin) solid var(--canvas-border-color, var(--helix-color-border));
10
+ border-radius: var(--helix-radii-sm);
11
+ box-sizing: border-box;
12
+ display: grid;
13
+ grid-template-rows: auto 1fr auto;
14
+ overflow: hidden;
15
+ position: relative;
16
+ }
17
+
18
+ :host([separation="plain"]) [part="region"] {
19
+ background-color: transparent;
20
+ border: none;
21
+ border-radius: 0;
22
+ }
23
+
24
+ [part="viewport"] {
25
+ min-block-size: 0;
26
+ overflow: hidden;
27
+ position: relative;
28
+ }
29
+
30
+ :host(:not(:state(empty))) ::slotted([slot="empty"]) {
31
+ display: none;
32
+ }
33
+
34
+ [part="board"] {
35
+ block-size: var(--_canvas-plane-block-size);
36
+ inline-size: var(--_canvas-plane-inline-size);
37
+ inset: 0;
38
+ position: absolute;
39
+ transform: translate(var(--_canvas-x), var(--_canvas-y)) scale(var(--_canvas-zoom));
40
+ transform-origin: 0 0;
41
+
42
+ transition: transform var(--helix-duration-normal) var(--helix-easing-standard);
43
+ }
44
+
45
+ :host([grid]) [part="viewport"] {
46
+ background-position: var(--_canvas-rule-x) var(--_canvas-rule-y);
47
+ background-size: calc(var(--canvas-grid-size, 32px) * var(--_canvas-rule-zoom))
48
+ calc(var(--canvas-grid-size, 32px) * var(--_canvas-rule-zoom));
49
+
50
+ transition:
51
+ background-position var(--helix-duration-normal) var(--helix-easing-standard),
52
+ background-size var(--helix-duration-normal) var(--helix-easing-standard);
53
+ }
54
+
55
+ :host([grid="lines"]) [part="viewport"] {
56
+ --_canvas-rule: color-mix(in oklab, var(--helix-color-border) 50%, transparent);
57
+ background-image:
58
+ linear-gradient(to right, var(--_canvas-rule) var(--helix-border-thin), transparent 0),
59
+ linear-gradient(to bottom, var(--_canvas-rule) var(--helix-border-thin), transparent 0);
60
+ }
61
+
62
+ :host([grid="dots"]) [part="viewport"] {
63
+ background-image: radial-gradient(
64
+ var(--helix-color-border) var(--helix-border-thin),
65
+ transparent 0
66
+ );
67
+ }
68
+
69
+ :host(:state(direct)) [part="board"],
70
+ :host(:state(direct)) [part="viewport"] {
71
+ transition: none;
72
+ }
73
+
74
+ @media (prefers-reduced-motion: reduce) {
75
+ [part="board"],
76
+ :host([grid]) [part="viewport"] {
77
+ transition: none;
78
+ }
79
+ }
80
+
81
+ [part="edges"] {
82
+ inset: 0;
83
+ overflow: visible;
84
+ position: absolute;
85
+ }
86
+
87
+ [part="edge"] {
88
+ stroke: var(--_canvas-edge-color, var(--canvas-edge-color, var(--helix-color-border)));
89
+ stroke-width: var(--helix-border-thick);
90
+ }
91
+
92
+ [part="edge"] {
93
+ pointer-events: none;
94
+ }
95
+
96
+ [part="edge-target"] {
97
+ cursor: grab;
98
+ pointer-events: stroke;
99
+ stroke: transparent;
100
+ stroke-width: var(--canvas-edge-target-width, 12px);
101
+ }
102
+
103
+ [part="edge-target"]:focus {
104
+ outline: none;
105
+ }
106
+
107
+ [part="edge-target"]:hover + [part="edge"] {
108
+ stroke: var(--helix-color-focus-ring);
109
+ }
110
+
111
+ [part="edge-target"]:focus-visible + [part="edge"] {
112
+ stroke: var(--helix-color-focus-ring);
113
+ stroke-width: calc(var(--helix-border-thick) * 2);
114
+ }
115
+
116
+ [part="edge-end"] {
117
+ background-color: var(--helix-color-accent);
118
+ block-size: var(--canvas-handle-size, 0.625rem);
119
+ border: var(--helix-border-thick) solid var(--helix-color-surface);
120
+ border-radius: var(--helix-radii-full);
121
+ box-sizing: border-box;
122
+ cursor: grab;
123
+ inline-size: var(--canvas-handle-size, 0.625rem);
124
+ left: var(--_canvas-end-x);
125
+ position: absolute;
126
+ top: var(--_canvas-end-y);
127
+ transform: translate(-50%, -50%);
128
+ z-index: 1;
129
+ }
130
+
131
+ [part="edge-end"]::after {
132
+ content: "";
133
+ inset: calc(var(--helix-space-sm) * -1);
134
+ position: absolute;
135
+ }
136
+
137
+ :host(:state(holding)) [part="viewport"] {
138
+ cursor: grabbing;
139
+ }
140
+
141
+ [part="label-editor"] {
142
+ background-color: var(--helix-color-surface);
143
+ border: var(--helix-border-thin) solid var(--helix-color-accent);
144
+ border-radius: var(--helix-radii-sm);
145
+ box-sizing: border-box;
146
+ color: var(--helix-color-foreground);
147
+ font-family: var(--helix-font-sans);
148
+ font-size: var(--helix-text-xs);
149
+ inline-size: var(--canvas-label-editor-inline-size, 12rem);
150
+ left: var(--_canvas-editor-x);
151
+ padding: var(--helix-space-2xs) var(--helix-space-xs);
152
+ position: absolute;
153
+ text-align: center;
154
+ top: var(--_canvas-editor-y);
155
+ transform: translate(-50%, -50%);
156
+ z-index: 1;
157
+ }
158
+
159
+ [part="label-editor"][data-target="group"] {
160
+ text-align: start;
161
+ transform: translate(0, -100%);
162
+ }
163
+
164
+ [part="label-editor"]:focus-visible {
165
+ outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
166
+ outline-offset: var(--helix-size-focus-offset);
167
+ }
168
+
169
+ [part="marquee"] {
170
+ background-color: color-mix(in oklab, var(--helix-color-accent) 10%, transparent);
171
+ block-size: var(--_canvas-marquee-block-size);
172
+ border: var(--helix-border-thin) dashed var(--helix-color-accent);
173
+ box-sizing: border-box;
174
+ inline-size: var(--_canvas-marquee-inline-size);
175
+ left: var(--_canvas-marquee-x);
176
+ pointer-events: none;
177
+ position: absolute;
178
+ top: var(--_canvas-marquee-y);
179
+ z-index: 1;
180
+ }
181
+
182
+ [part="draft"] {
183
+ pointer-events: none;
184
+ stroke: var(--helix-color-accent);
185
+ stroke-dasharray: 6 4;
186
+ stroke-width: var(--helix-border-thick);
187
+ }
188
+
189
+ :host(:state(connecting)) [part="viewport"] {
190
+ cursor: crosshair;
191
+ }
192
+
193
+ [part="arrow"] {
194
+ fill: var(--canvas-edge-color, var(--helix-color-border));
195
+ }
196
+
197
+ @supports (fill: context-stroke) {
198
+ [part="arrow"] {
199
+ fill: context-stroke;
200
+ }
201
+ }
202
+
203
+ [part="edge"][data-tone="accent"] {
204
+ stroke: var(--helix-color-accent);
205
+ }
206
+ [part="edge"][data-tone="danger"] {
207
+ stroke: var(--helix-color-danger);
208
+ }
209
+ [part="edge"][data-tone="info"] {
210
+ stroke: var(--helix-color-info);
211
+ }
212
+ [part="edge"][data-tone="primary"] {
213
+ stroke: var(--helix-color-primary);
214
+ }
215
+ [part="edge"][data-tone="success"] {
216
+ stroke: var(--helix-color-success);
217
+ }
218
+ [part="edge"][data-tone="warning"] {
219
+ stroke: var(--helix-color-warning);
220
+ }
221
+
222
+ [part="edge"][data-selected] {
223
+ stroke: var(--helix-color-accent);
224
+ stroke-width: calc(var(--helix-border-thick) * 2);
225
+ }
226
+
227
+ [part="edge"][data-variant="dashed"] {
228
+ stroke-dasharray: 6 4;
229
+ }
230
+
231
+ [part="edge"][data-variant="dotted"] {
232
+ stroke-dasharray: 0 5;
233
+ stroke-linecap: round;
234
+ }
235
+
236
+ [part="label"] {
237
+ background-color: var(--canvas-background-color, var(--helix-color-surface-sunken));
238
+ color: var(--helix-color-foreground-subtle);
239
+ font-family: var(--helix-font-sans);
240
+ font-size: var(--helix-text-xs);
241
+ left: var(--_canvas-label-x);
242
+ line-height: 1;
243
+ padding: var(--helix-space-2xs);
244
+ pointer-events: none;
245
+ position: absolute;
246
+ top: var(--_canvas-label-y);
247
+ transform: translate(-50%, -50%);
248
+ white-space: nowrap;
249
+ }
250
+
251
+ [part="viewport"] {
252
+ cursor: grab;
253
+ touch-action: none;
254
+ }
255
+
256
+ :host(:state(pressing)) [part="viewport"] {
257
+ user-select: none;
258
+ }
259
+
260
+ [part="viewport"]:active {
261
+ cursor: grabbing;
262
+ }
263
+
264
+ @media print {
265
+ [part="controls"] {
266
+ display: none;
267
+ }
268
+ }`);
@@ -0,0 +1,63 @@
1
+ import { HelixHeadlessCanvas } from '@fusion.dev/helix-headless/canvas';
2
+ import type { CSSResultGroup } from 'lit';
3
+ /**
4
+ * @summary A board of cards and the connections between them, which a reader can walk, rearrange and connect.
5
+ *
6
+ * @description
7
+ * **Cards and connections say what they mean with `tone`**, the word every
8
+ * other family uses, and the tones resolve to semantic tokens, so a board
9
+ * follows the page into dark mode rather than carrying somebody else's hex into
10
+ * it. JSON Canvas's six color presets arrive as tones through `fromJsonCanvas`.
11
+ *
12
+ * The plane is the one thing that moves: panning and zooming write three custom
13
+ * properties and one transform reads them, so the cards are placed once in the
14
+ * document's own coordinates and never laid out again.
15
+ *
16
+ * @since 0.100.0
17
+ * @status experimental
18
+ * @category media
19
+ * @aliases Board, JSON Canvas, Whiteboard
20
+ * @documentation https://fusion.dev/helix/components/canvas
21
+ *
22
+ * @cssproperty --canvas-background-color - The well behind the board.
23
+ * @cssproperty --canvas-block-size - How tall the frame is.
24
+ * @cssproperty --canvas-border-color - Color of the frame's edge.
25
+ * @cssproperty --canvas-edge-color - Color of a connector with no tone. Written in an edge's own `style`, it colors that edge alone.
26
+ * @cssproperty --canvas-edge-target-width - How wide a connector is to a pointer, which is wider than it is drawn.
27
+ * @cssproperty --canvas-grid-size - How far apart the ruling is, in the document's own units, so it scales with the zoom.
28
+ * @cssproperty --canvas-handle-size - How large the ends of a selected connection are, one name with a card's points.
29
+ * @cssproperty --canvas-label-editor-inline-size - How wide the field a label is edited in is.
30
+ * @cssproperty --viewport-control-background-color - The ground under the pan and zoom buttons, one name with `Map`.
31
+ */
32
+ export declare class HelixCanvas extends HelixHeadlessCanvas {
33
+ /**
34
+ * Rules the plane, so a reader can see it move.
35
+ *
36
+ * **Baked in rather than a family of its own**, which was the question worth
37
+ * asking: a grid has no content, no position and nothing to slot, so an
38
+ * element for it would be an element with no reason to exist. It is the
39
+ * board's own surface, and what a consumer varies about it is a length.
40
+ *
41
+ * **On the plane and not on the well**, which is what makes it worth having:
42
+ * the ruling is drawn in the document's own units, so it moves and scales with
43
+ * the cards and a drag has something to move against. A grid on the frame
44
+ * would sit still while the board slid over it, which reads as the board
45
+ * standing still.
46
+ *
47
+ * Absent is no ruling, a resting value being an attribute's absence.
48
+ */
49
+ grid?: 'lines' | 'dots';
50
+ /**
51
+ * How the board stands off the page: `plain` for no frame at all.
52
+ *
53
+ * Framed is where it rests. Plain is for a board that fills a panel or an
54
+ * app's working area, where the container is already the frame.
55
+ */
56
+ separation?: 'outlined' | 'plain';
57
+ static styles: CSSResultGroup;
58
+ }
59
+ declare global {
60
+ interface HTMLElementTagNameMap {
61
+ 'helix-canvas': HelixCanvas;
62
+ }
63
+ }
@@ -0,0 +1,25 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { customElement } from '@fusion.dev/helix-core';
8
+ import { HelixHeadlessCanvas } from '@fusion.dev/helix-headless/canvas';
9
+ import { property } from 'lit/decorators.js';
10
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
11
+ import { styles as viewportStyles } from '../../shared/viewport/viewport.css.js';
12
+ import { styles } from './canvas-root.css.js';
13
+ let HelixCanvas = class HelixCanvas extends HelixHeadlessCanvas {
14
+ static { this.styles = [liveStyles, viewportStyles, styles]; }
15
+ };
16
+ __decorate([
17
+ property({ reflect: true })
18
+ ], HelixCanvas.prototype, "grid", void 0);
19
+ __decorate([
20
+ property({ reflect: true })
21
+ ], HelixCanvas.prototype, "separation", void 0);
22
+ HelixCanvas = __decorate([
23
+ customElement('helix-canvas')
24
+ ], HelixCanvas);
25
+ export { HelixCanvas };
@@ -41,11 +41,14 @@ justify-content: safe flex-end;
41
41
 
42
42
  [part="header"][hidden],
43
43
  [part="resume"][hidden],
44
- [part="status"][hidden],
45
44
  [part="composer"][hidden] {
46
45
  display: none;
47
46
  }
48
47
 
48
+ [part="status"][data-empty] {
49
+ padding-block: 0;
50
+ }
51
+
49
52
  [part="header"] {
50
53
 
51
54
  --helix-size-tag: var(--helix-size-tag-sm);
@@ -126,15 +129,6 @@ padding-block: var(--helix-space-lg);
126
129
  text-align: center;
127
130
  }
128
131
 
129
- [part="live"] {
130
- block-size: 1px;
131
- clip-path: inset(50%);
132
- inline-size: 1px;
133
- overflow: hidden;
134
- position: absolute;
135
- white-space: nowrap;
136
- }
137
-
138
132
  [part="log"][data-windowed] {
139
133
  gap: var(--helix-space-none);
140
134
  }
@@ -7,12 +7,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessChat } from '@fusion.dev/helix-headless/chat';
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 './chat-root.css.js';
11
12
  import '../composer/chat-composer.js';
12
13
  import '../message/chat-message.js';
13
14
  let HelixChat = class HelixChat extends HelixHeadlessChat {
14
15
  static { this.tier = 'helix-'; }
15
- static { this.styles = [collectionStateStyles, styles]; }
16
+ static { this.styles = [liveStyles, collectionStateStyles, styles]; }
16
17
  };
17
18
  HelixChat = __decorate([
18
19
  customElement('helix-chat')
@@ -35,6 +35,7 @@ import '../../table/index.js';
35
35
  *
36
36
  * @csspart cell - One cell.
37
37
  * @csspart cell-selected - A cell of a selected row, beside `cell`.
38
+ * @csspart live - The empty and loading lines again, in a region a screen reader hears when they change. Visually hidden in the styled tier.
38
39
  * @csspart table - The grid.
39
40
  *
40
41
  * @cssproperty --data-table-block-size - How tall the scrolling box is while `windowed`.
@@ -7,13 +7,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { customElement } from '@fusion.dev/helix-core';
8
8
  import { HelixHeadlessDataTable } from '@fusion.dev/helix-headless/data-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 './data-table-root.css.js';
11
12
  import '../../checkbox/index.js';
12
13
  import '../../pagination/index.js';
13
14
  import '../../table/index.js';
14
15
  let HelixDataTable = class HelixDataTable extends HelixHeadlessDataTable {
15
16
  static { this.tier = 'helix-'; }
16
- static { this.styles = [collectionStateStyles, styles]; }
17
+ static { this.styles = [liveStyles, collectionStateStyles, styles]; }
17
18
  };
18
19
  HelixDataTable = __decorate([
19
20
  customElement('helix-data-table')
@@ -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 { HelixHeadlessDrilldown } from '@fusion.dev/helix-headless/drilldown';
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 './drilldown-root.css.js';
11
12
  let HelixDrilldown = class HelixDrilldown extends HelixHeadlessDrilldown {
12
- static { this.styles = [collectionStateStyles, styles]; }
13
+ static { this.styles = [liveStyles, collectionStateStyles, styles]; }
13
14
  };
14
15
  HelixDrilldown = __decorate([
15
16
  customElement('helix-drilldown')
@@ -4,6 +4,21 @@ registerElementEvents({
4
4
  'helix-announcement': ['helix-dismiss'],
5
5
  'helix-app-header': ['helix-scrolled'],
6
6
  'helix-avatar': ['error', 'load'],
7
+ 'helix-canvas': [
8
+ 'helix-before-move',
9
+ 'helix-before-reconnect',
10
+ 'helix-before-relabel',
11
+ 'helix-canvas-edit',
12
+ 'helix-canvas-pan',
13
+ 'helix-canvas-view',
14
+ 'helix-canvas-zoom',
15
+ 'helix-connect',
16
+ 'helix-move',
17
+ 'helix-reconnect',
18
+ 'helix-relabel',
19
+ 'helix-remove',
20
+ 'helix-select',
21
+ ],
7
22
  'helix-carousel': ['helix-select'],
8
23
  'helix-chat': ['helix-before-pin', 'helix-history', 'helix-send'],
9
24
  'helix-chat-composer': ['helix-send'],
@@ -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 { HelixHeadlessEmpty } from '@fusion.dev/helix-headless/empty';
9
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
9
10
  import { styles } from './empty-root.css.js';
10
11
  let HelixEmpty = class HelixEmpty extends HelixHeadlessEmpty {
11
- static { this.styles = styles; }
12
+ static { this.styles = [liveStyles, styles]; }
12
13
  };
13
14
  HelixEmpty = __decorate([
14
15
  customElement('helix-empty')
package/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ export * from './breadcrumbs/index.js';
18
18
  export * from './button/index.js';
19
19
  export * from './button-group/index.js';
20
20
  export * from './callout/index.js';
21
+ export * from './canvas/index.js';
21
22
  export * from './card/index.js';
22
23
  export * from './carousel/index.js';
23
24
  export * from './chat/index.js';
package/dist/index.js CHANGED
@@ -13,6 +13,7 @@ export * from './breadcrumbs/index.js';
13
13
  export * from './button/index.js';
14
14
  export * from './button-group/index.js';
15
15
  export * from './callout/index.js';
16
+ export * from './canvas/index.js';
16
17
  export * from './card/index.js';
17
18
  export * from './carousel/index.js';
18
19
  export * from './chat/index.js';
@@ -19,6 +19,10 @@ max-inline-size: 100vw;
19
19
  padding: var(--lightbox-padding, var(--helix-space-md));
20
20
  }
21
21
 
22
+ [part="dialog"]:focus-visible {
23
+ outline: none;
24
+ }
25
+
22
26
  [part="dialog"]:not([open]) {
23
27
  display: none;
24
28
  }
@@ -53,15 +57,6 @@ opacity: 0;
53
57
  visibility: hidden;
54
58
  }
55
59
 
56
- [part="live"] {
57
- block-size: 1px;
58
- clip-path: inset(50%);
59
- inline-size: 1px;
60
- overflow: hidden;
61
- position: absolute;
62
- white-space: nowrap;
63
- }
64
-
65
60
  @media (prefers-reduced-motion: reduce) {
66
61
  ::slotted([slot="header"]),
67
62
  ::slotted([slot="footer"]) {
@@ -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 { HelixHeadlessLightbox } from '@fusion.dev/helix-headless/lightbox';
9
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
9
10
  import { styles } from './lightbox-root.css.js';
10
11
  let HelixLightbox = class HelixLightbox extends HelixHeadlessLightbox {
11
- static { this.styles = styles; }
12
+ static { this.styles = [liveStyles, styles]; }
12
13
  };
13
14
  HelixLightbox = __decorate([
14
15
  customElement('helix-lightbox')
@@ -9,9 +9,11 @@ import { HelixHeadlessListbox } from '@fusion.dev/helix-headless/listbox';
9
9
  import { styles as collectionStateStyles } from '../../shared/collection/state.css.js';
10
10
  import { styles as fieldStyles } from '../../shared/field/field.css.js';
11
11
  import { styles as fieldStackedStyles } from '../../shared/field/field-stacked.css.js';
12
+ import { styles as liveStyles } from '../../shared/live/live.css.js';
12
13
  import { styles } from './listbox-root.css.js';
13
14
  let HelixListbox = class HelixListbox extends HelixHeadlessListbox {
14
15
  static { this.styles = [
16
+ liveStyles,
15
17
  collectionStateStyles,
16
18
  fieldStyles,
17
19
  fieldStackedStyles,
@@ -26,102 +26,6 @@ block-size: 100%;
26
26
  inline-size: 100%;
27
27
  }
28
28
 
29
- [part="controls"] {
30
- display: grid;
31
- gap: var(--helix-space-2xs);
32
-
33
- grid-template-areas:
34
- ". up . zoomin"
35
- "start . end zoomout"
36
- ". down . full";
37
- position: absolute;
38
-
39
- inset-block-start: var(--helix-space-sm);
40
- inset-inline-end: var(--helix-space-sm);
41
- transition: opacity var(--helix-duration-fast) var(--helix-easing-standard);
42
- }
43
-
44
- :host([controls]:not([controls~="zoom"])) [part="controls"] {
45
- grid-template-areas:
46
- ". up ."
47
- "start . end"
48
- ". down full";
49
- }
50
-
51
- :host([controls]:not([controls~="pan"])) [part="controls"] {
52
- grid-template-areas:
53
- "zoomin"
54
- "zoomout"
55
- "full";
56
- }
57
-
58
- :host([controls-placement="top-end"]) [part="controls"] {
59
- inset-block: var(--helix-space-sm) auto;
60
- inset-inline: auto var(--helix-space-sm);
61
- }
62
-
63
- :host([controls-placement="top-start"]) [part="controls"] {
64
- inset-block: var(--helix-space-sm) auto;
65
- inset-inline: var(--helix-space-sm) auto;
66
- }
67
-
68
- :host([controls-placement="bottom-end"]) [part="controls"] {
69
- inset-block: auto var(--helix-space-sm);
70
- inset-inline: auto var(--helix-space-sm);
71
- }
72
-
73
- :host([controls-placement="bottom-start"]) [part="controls"] {
74
- inset-block: auto var(--helix-space-sm);
75
- inset-inline: var(--helix-space-sm) auto;
76
- }
77
-
78
- [part="pan-up"] {
79
- grid-area: up;
80
- }
81
- [part="pan-down"] {
82
- grid-area: down;
83
- }
84
- [part="pan-start"] {
85
- grid-area: start;
86
- }
87
- [part="pan-end"] {
88
- grid-area: end;
89
- }
90
- [part="zoom-in"] {
91
- grid-area: zoomin;
92
- }
93
- [part="zoom-out"] {
94
- grid-area: zoomout;
95
- }
96
- [part="fullscreen"] {
97
- grid-area: full;
98
- }
99
-
100
- [part="controls"] button {
101
- align-items: center;
102
- background-color: var(--map-control-background-color, var(--helix-color-surface-overlay));
103
- border: var(--helix-border-thin) solid var(--helix-color-border);
104
- border-radius: var(--helix-radii-sm);
105
- block-size: var(--helix-size-control-sm);
106
- color: var(--helix-color-foreground);
107
- cursor: pointer;
108
- display: inline-flex;
109
- font-family: var(--helix-font-sans);
110
- font-size: var(--helix-text-sm);
111
- inline-size: var(--helix-size-control-sm);
112
- justify-content: center;
113
- padding: 0;
114
- }
115
-
116
- [part="controls"] button:focus-visible {
117
- outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);
118
- outline-offset: var(--helix-size-focus-offset);
119
- }
120
-
121
- [part="controls"] button:hover {
122
- background-color: var(--helix-color-surface-raised);
123
- }
124
-
125
29
  :host(:state(idle)) ::slotted([slot="header"]),
126
30
  :host(:state(idle)) ::slotted([slot="footer"]) {
127
31
  opacity: 0;
@@ -132,16 +36,12 @@ transition: opacity var(--helix-duration-fast) var(--helix-easing-standard);
132
36
 
133
37
  border-block-start: var(--helix-border-thin) solid var(--helix-color-border);
134
38
  color: var(--helix-color-foreground-subtle);
39
+
40
+ display: block;
135
41
  font-size: var(--helix-text-xs);
136
42
  padding: var(--helix-space-2xs) var(--helix-space-xs);
137
43
  }
138
44
 
139
- :host(:state(fullscreen)) [part="region"] {
140
- block-size: 100dvh;
141
- border: none;
142
- border-radius: 0;
143
- }
144
-
145
45
  @media print {
146
46
  [part="controls"] {
147
47
  display: none;