@fusion.dev/helix 0.215.3 → 0.217.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 (80) hide show
  1. package/api.json +1 -1
  2. package/custom-elements.json +1 -1
  3. package/dist/area-chart/root/area-chart-root.js +8 -1
  4. package/dist/bar-chart/root/bar-chart-root.js +8 -1
  5. package/dist/chat/composer/chat-composer.css.js +1 -1
  6. package/dist/chat/composer/chat-composer.d.ts +1 -0
  7. package/dist/chat/composer/chat-composer.js +2 -1
  8. package/dist/code-editor/index.d.ts +1 -0
  9. package/dist/code-editor/index.js +1 -0
  10. package/dist/code-editor/root/code-editor-root.css.d.ts +1 -0
  11. package/dist/code-editor/root/code-editor-root.css.js +2 -0
  12. package/dist/code-editor/root/code-editor-root.d.ts +52 -0
  13. package/dist/code-editor/root/code-editor-root.js +28 -0
  14. package/dist/code-input/index.d.ts +1 -0
  15. package/dist/code-input/index.js +1 -0
  16. package/dist/code-input/root/code-input-root.css.d.ts +1 -0
  17. package/dist/code-input/root/code-input-root.css.js +2 -0
  18. package/dist/code-input/root/code-input-root.d.ts +33 -0
  19. package/dist/code-input/root/code-input-root.js +21 -0
  20. package/dist/command/root/command-root.d.ts +1 -0
  21. package/dist/command/root/command-root.js +1 -0
  22. package/dist/donut-chart/root/donut-chart-root.js +8 -1
  23. package/dist/element-events.generated.js +36 -3
  24. package/dist/filter-input/root/filter-input-root.css.js +1 -1
  25. package/dist/filter-input/root/filter-input-root.d.ts +1 -0
  26. package/dist/filter-input/root/filter-input-root.js +2 -0
  27. package/dist/heatmap/root/heatmap-root.js +2 -1
  28. package/dist/index.d.ts +4 -0
  29. package/dist/index.js +4 -0
  30. package/dist/input/root/input-root.css.js +1 -1
  31. package/dist/input/root/input-root.d.ts +1 -0
  32. package/dist/input/root/input-root.js +2 -0
  33. package/dist/line-chart/root/line-chart-root.js +2 -0
  34. package/dist/listbox/root/listbox-root.css.js +1 -1
  35. package/dist/listbox/root/listbox-root.d.ts +1 -0
  36. package/dist/listbox/root/listbox-root.js +2 -0
  37. package/dist/markdown/index.d.ts +2 -0
  38. package/dist/markdown/index.js +2 -0
  39. package/dist/markdown/root/markdown-root.css.d.ts +1 -0
  40. package/dist/markdown/root/markdown-root.css.js +2 -0
  41. package/dist/markdown/root/markdown-root.d.ts +32 -0
  42. package/dist/markdown/root/markdown-root.js +14 -0
  43. package/dist/sandbox/compile-worker.d.ts +8 -0
  44. package/dist/sandbox/compile-worker.generated.d.ts +4 -0
  45. package/dist/sandbox/compile-worker.generated.js +2 -0
  46. package/dist/sandbox/compile-worker.js +26 -0
  47. package/dist/sandbox/compile.d.ts +23 -1
  48. package/dist/sandbox/compile.js +16 -4
  49. package/dist/sandbox/index.d.ts +1 -0
  50. package/dist/sandbox/index.js +1 -0
  51. package/dist/scatter-chart/root/scatter-chart-root.js +8 -1
  52. package/dist/shared/chart/sonify.css.d.ts +1 -0
  53. package/dist/shared/chart/sonify.css.js +2 -0
  54. package/dist/shared/dictation/dictation.css.d.ts +1 -0
  55. package/dist/shared/dictation/dictation.css.js +2 -0
  56. package/dist/shortcut-overlay/index.d.ts +1 -0
  57. package/dist/shortcut-overlay/index.js +1 -0
  58. package/dist/shortcut-overlay/root/shortcut-overlay-root.css.d.ts +1 -0
  59. package/dist/shortcut-overlay/root/shortcut-overlay-root.css.js +2 -0
  60. package/dist/shortcut-overlay/root/shortcut-overlay-root.d.ts +33 -0
  61. package/dist/shortcut-overlay/root/shortcut-overlay-root.js +13 -0
  62. package/dist/spatial-bar-chart/root/spatial-bar-chart-root.js +2 -1
  63. package/dist/spatial-heatmap/root/spatial-heatmap-root.js +2 -1
  64. package/dist/spatial-ribbon-chart/root/spatial-ribbon-chart-root.js +2 -1
  65. package/dist/spatial-scatter-chart/root/spatial-scatter-chart-root.js +2 -1
  66. package/dist/spatial-surface-chart/root/spatial-surface-chart-root.js +2 -1
  67. package/dist/spatial-treemap/root/spatial-treemap-root.js +2 -1
  68. package/dist/textarea/root/textarea-root.css.js +1 -1
  69. package/dist/textarea/root/textarea-root.d.ts +1 -0
  70. package/dist/textarea/root/textarea-root.js +2 -0
  71. package/dist/toast/root/toast-root.d.ts +1 -0
  72. package/dist/toast/root/toast-root.js +1 -0
  73. package/examples.json +1 -1
  74. package/lint.json +1 -1
  75. package/package.json +11 -9
  76. package/skills/helix/SKILL.md +2 -2
  77. package/types/jsx.d.ts +4784 -165
  78. package/types/svelte.d.ts +4 -0
  79. package/types/vue.d.ts +1122 -0
  80. package/types/words.d.ts +491 -0
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,2 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`:host {display: block}:host(:state(streaming)) ::slotted(:last-child) {text-wrap: wrap}@media print {:host {print-color-adjust: economy}}`);
@@ -0,0 +1,32 @@
1
+ import { HelixHeadlessMarkdown } from '@fusion.dev/helix-headless/markdown';
2
+ import type { CSSResultGroup } from 'lit';
3
+ import '../../callout/index.js';
4
+ import '../../code-block/index.js';
5
+ /**
6
+ * @summary Markdown drawn as a document, which streams in place as a reply arrives.
7
+ *
8
+ * @description
9
+ * The document is drawn by the page's prose recipe: put `data-prose` on the
10
+ * element or on a container, and `@fusion.dev/helix-styles` sets its type,
11
+ * spacing, lists, and tables. A fence is drawn by `Code Block` and an alert by
12
+ * `Callout`, in this tier.
13
+ *
14
+ * While `streaming`, the block still arriving wraps its lines in the plain
15
+ * way, never `pretty` or `balance`, since those move earlier line breaks as
16
+ * each word arrives.
17
+ *
18
+ * @since 0.216.0
19
+ * @status experimental
20
+ * @category typography
21
+ * @aliases Markdown renderer, Streaming text, Rich text
22
+ * @documentation https://fusion.dev/helix/components/markdown
23
+ */
24
+ export declare class HelixMarkdown extends HelixHeadlessMarkdown {
25
+ static styles: CSSResultGroup;
26
+ static tier: string;
27
+ }
28
+ declare global {
29
+ interface HTMLElementTagNameMap {
30
+ 'helix-markdown': HelixMarkdown;
31
+ }
32
+ }
@@ -0,0 +1,14 @@
1
+ import { __decorate } from "tslib";
2
+ import { customElement } from '@fusion.dev/helix-core';
3
+ import { HelixHeadlessMarkdown } from '@fusion.dev/helix-headless/markdown';
4
+ import '../../callout/index.js';
5
+ import '../../code-block/index.js';
6
+ import { styles } from './markdown-root.css.js';
7
+ let HelixMarkdown = class HelixMarkdown extends HelixHeadlessMarkdown {
8
+ static { this.styles = styles; }
9
+ static { this.tier = 'helix-'; }
10
+ };
11
+ HelixMarkdown = __decorate([
12
+ customElement('helix-markdown')
13
+ ], HelixMarkdown);
14
+ export { HelixMarkdown };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The version of the messages the worker and the page exchange, which every
3
+ * answer ends with. A page that copied this file from an older release answers
4
+ * with another, or none, and is told to copy it again. Raise it whenever the
5
+ * messages change, and only then, so an upgrade that leaves them alone asks
6
+ * nobody to copy anything.
7
+ */
8
+ export declare const PROTOCOL = 1;
@@ -0,0 +1,4 @@
1
+ /** The version of the messages `compile-worker.ts` answers with. */
2
+ export declare const PROTOCOL = 1;
3
+ /** `compile-worker.ts`, minified, for the preview to start from a `blob:` address. */
4
+ export declare const WORKER = "var i=1,e=globalThis,t={};e.onmessage=async({data:[s,n,g,r]})=>{let a;try{t[n]??=import(n),a=await t[n]}catch(o){delete t[n],e.postMessage([s,void 0,`${r.filePath} needs ${n}, which did not load: ${o}`,1]);return}try{e.postMessage([s,a.transform(g,r),void 0,1])}catch(o){e.postMessage([s,void 0,String(o?.message),1])}};export{i as PROTOCOL};";
@@ -0,0 +1,2 @@
1
+ export const PROTOCOL = 1;
2
+ export const WORKER = "var i=1,e=globalThis,t={};e.onmessage=async({data:[s,n,g,r]})=>{let a;try{t[n]??=import(n),a=await t[n]}catch(o){delete t[n],e.postMessage([s,void 0,`${r.filePath} needs ${n}, which did not load: ${o}`,1]);return}try{e.postMessage([s,a.transform(g,r),void 0,1])}catch(o){e.postMessage([s,void 0,String(o?.message),1])}};export{i as PROTOCOL};";
@@ -0,0 +1,26 @@
1
+ export const PROTOCOL = 1;
2
+ const scope = globalThis;
3
+ const loaded = {};
4
+ scope.onmessage = async ({ data: [id, address, source, options] }) => {
5
+ let compiler;
6
+ try {
7
+ loaded[address] ??= import(address);
8
+ compiler = await loaded[address];
9
+ }
10
+ catch (error) {
11
+ delete loaded[address];
12
+ scope.postMessage([
13
+ id,
14
+ undefined,
15
+ `${options.filePath} needs ${address}, which did not load: ${error}`,
16
+ PROTOCOL,
17
+ ]);
18
+ return;
19
+ }
20
+ try {
21
+ scope.postMessage([id, compiler.transform(source, options), undefined, PROTOCOL]);
22
+ }
23
+ catch (error) {
24
+ scope.postMessage([id, undefined, String(error?.message), PROTOCOL]);
25
+ }
26
+ };
@@ -1,3 +1,4 @@
1
+ import { PROTOCOL, WORKER } from './compile-worker.generated.js';
1
2
  /**
2
3
  * The compiler a module file in TypeScript or JSX runs through before the
3
4
  * frame loads it, by its npm name and its pinned version.
@@ -39,6 +40,28 @@ type Transform = (source: string, options: Record<string, unknown>) => Promise<{
39
40
  code: string;
40
41
  sourceMap?: Record<string, unknown>;
41
42
  }>;
43
+ export { PROTOCOL, WORKER };
44
+ /**
45
+ * Starts the compiler's worker from a file the page serves, rather than from
46
+ * a `blob:` address.
47
+ *
48
+ * **For a page whose Content Security Policy refuses `blob:` workers**, which
49
+ * `worker-src 'self'` does, and which leaves TypeScript and JSX panes
50
+ * uncompiled. Copy `@fusion.dev/helix/sandbox/compile-worker.js` to where the
51
+ * page serves its own scripts, and call this before the first preview
52
+ * compiles:
53
+ *
54
+ * ```js
55
+ * import { registerCompilerWorker } from '@fusion.dev/helix/sandbox'
56
+ *
57
+ * registerCompilerWorker('/sandbox/compile-worker.js')
58
+ * ```
59
+ *
60
+ * The compiler itself still loads from the preview's `cdn`, so the policy's
61
+ * `script-src` names that host either way. A worker already started keeps
62
+ * running, and the address applies to the next page that starts one.
63
+ */
64
+ export declare const registerCompilerWorker: (address: string | URL) => void;
42
65
  /**
43
66
  * The compiler for each `cdn`, so each is set up once a page. A spec puts a
44
67
  * stand-in here, for an address of its own.
@@ -60,4 +83,3 @@ export declare const compilers: Map<string, Transform>;
60
83
  * console, and only where the example imports the file.
61
84
  */
62
85
  export declare const compile: (cdn: string, path: string, source: string) => Promise<string>;
63
- export {};
@@ -1,15 +1,27 @@
1
+ import { reportRuntime } from '@fusion.dev/helix-core';
2
+ import { PROTOCOL, WORKER } from './compile-worker.generated.js';
1
3
  export const COMPILER = 'sucrase@3.35.1';
2
4
  export const COMPILED = /\.(?:[cm]?ts|[jt]sx)$/;
3
- const WORKER = 'const l={};onmessage=async({data:[i,a,s,o]})=>{let c;try{c=await(l[a]??=import(a))}catch(e){delete l[a];return postMessage([i,,o.filePath+" needs "+a+", which did not load: "+e])}try{postMessage([i,c.transform(s,o)])}catch(e){postMessage([i,,String(e?.message)])}}';
5
+ export { PROTOCOL, WORKER };
6
+ let warned = false;
4
7
  let worker;
8
+ let workerAddress;
9
+ export const registerCompilerWorker = (address) => {
10
+ workerAddress = address;
11
+ };
5
12
  let sent = 0;
6
13
  const owed = new Map();
7
14
  const inWorker = (address) => (source, options) => {
8
15
  if (!worker) {
9
- worker = new Worker(URL.createObjectURL(new Blob([WORKER], { type: 'text/javascript' })), {
10
- type: 'module',
11
- });
16
+ worker = new Worker(workerAddress ?? URL.createObjectURL(new Blob([WORKER], { type: 'text/javascript' })), { type: 'module' });
12
17
  worker.onmessage = ({ data }) => {
18
+ if (data[3] !== PROTOCOL && !warned) {
19
+ warned = true;
20
+ reportRuntime({
21
+ kind: 'stale-worker',
22
+ message: `The compiler worker at ${String(workerAddress)} is from another release of @fusion.dev/helix. Copy @fusion.dev/helix/sandbox/compile-worker.js to that address again.`,
23
+ });
24
+ }
13
25
  owed.get(data[0])?.(data);
14
26
  owed.delete(data[0]);
15
27
  };
@@ -12,6 +12,7 @@
12
12
  * hardcodes `sandbox="allow-scripts allow-forms"` on its frame and never
13
13
  * `allow-same-origin`, which is the pairing that would undo it.
14
14
  */
15
+ export { registerCompilerWorker } from './compile.js';
15
16
  export * from './console/sandbox-console.js';
16
17
  export { isRender, LAYOUT_RULES, loggedText, type ServePreviewOptions, servePreview, withoutStylesheets, } from './frame.js';
17
18
  export * from './preview/sandbox-preview.js';
@@ -1,3 +1,4 @@
1
+ export { registerCompilerWorker } from './compile.js';
1
2
  export * from './console/sandbox-console.js';
2
3
  export { isRender, LAYOUT_RULES, loggedText, servePreview, withoutStylesheets, } from './frame.js';
3
4
  export * from './preview/sandbox-preview.js';
@@ -2,13 +2,20 @@ import { __decorate } from "tslib";
2
2
  import { customElement } from '@fusion.dev/helix-core';
3
3
  import { HelixHeadlessScatterChart } from '@fusion.dev/helix-headless/scatter-chart';
4
4
  import { styles as seriesStyles } from '../../shared/chart/series.css.js';
5
+ import { styles as sonifyStyles } from '../../shared/chart/sonify.css.js';
5
6
  import { styles as statusStyles } from '../../shared/chart/status.css.js';
6
7
  import { styles as tooltipStyles } from '../../shared/chart/tooltip.css.js';
7
8
  import { styles } from './scatter-chart-root.css.js';
8
9
  import '../../tooltip/index.js';
9
10
  let HelixScatterChart = class HelixScatterChart extends HelixHeadlessScatterChart {
10
11
  static { this.tier = 'helix-'; }
11
- static { this.styles = [seriesStyles, statusStyles, tooltipStyles, styles]; }
12
+ static { this.styles = [
13
+ seriesStyles,
14
+ statusStyles,
15
+ tooltipStyles,
16
+ styles,
17
+ sonifyStyles,
18
+ ]; }
12
19
  };
13
20
  HelixScatterChart = __decorate([
14
21
  customElement('helix-scatter-chart')
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,2 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`[part="sonify"] {all: unset;align-items: center;border-radius: var(--helix-radii-sm);box-sizing: border-box;color: var(--helix-color-foreground-muted);cursor: pointer;display: inline-flex;font-family: var(--helix-font-sans);font-size: var(--helix-text-xs);font-weight: var(--helix-weight-medium);gap: var(--helix-space-2xs);grid-column: 1 / -1;justify-self: start;min-block-size: var(--helix-size-icon-loose);padding-inline: var(--helix-space-2xs)}[part="sonify"] svg {block-size: var(--helix-size-icon-tight);inline-size: var(--helix-size-icon-tight)}[part="sonify"]:hover {background-color: color-mix(in oklab, var(--helix-color-foreground) 8%, transparent);color: var(--helix-color-foreground)}[part="sonify"]:focus-visible {outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);outline-offset: var(--helix-size-focus-offset)}[part="sonify"][aria-pressed="true"] {color: var(--helix-color-accent)}:host([summary="visible"]) [part="summary"] {block-size: auto;clip-path: none;color: var(--helix-color-foreground-muted);font-family: var(--helix-font-sans);font-size: var(--helix-text-sm);grid-column: 1 / -1;inline-size: auto;line-height: var(--helix-leading-normal);overflow: visible;position: static;white-space: normal}@media print {[part="sonify"] {display: none}}`);
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,2 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`[part~="voice-listening"] {box-shadow: 0 0 0 calc(var(--dictation-level, 0.4) * var(--helix-space-2xs) * 1.5) color-mix(in oklab, var(--helix-color-accent) 35%, transparent);color: var(--helix-color-accent);transition: box-shadow var(--helix-duration-fast) linear}@media (prefers-reduced-motion: reduce) {[part~="voice-listening"] {box-shadow: 0 0 0 calc(var(--helix-space-2xs) * 0.6) color-mix(in oklab, var(--helix-color-accent) 35%, transparent);transition: none}}@media print {[part~="voice"] {display: none}}`);
@@ -0,0 +1 @@
1
+ export * from './root/shortcut-overlay-root.js';
@@ -0,0 +1 @@
1
+ export * from './root/shortcut-overlay-root.js';
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,2 @@
1
+ import { createSheet } from '@fusion.dev/helix-core';
2
+ export const styles = createSheet(`[part="badge"] {align-items: center;background-color: var(--shortcut-overlay-badge-background-color, var(--helix-color-surface-inverse));border: var(--shortcut-overlay-badge-border-width, var(--helix-border-floating)) solid var(--helix-color-border);border-radius: var(--helix-radii-sm);box-shadow: var(--shortcut-overlay-badge-shadow, var(--helix-shadow-floating));color: var(--shortcut-overlay-badge-color, var(--helix-color-foreground-inverse));display: inline-flex;font-family: var(--helix-font-sans);font-size: var(--helix-text-xs);font-weight: var(--helix-weight-regular);gap: var(--helix-space-2xs);line-height: var(--helix-leading-tight);max-inline-size: var(--shortcut-overlay-badge-max-inline-size, 16rem);padding: var(--helix-space-2xs) var(--helix-space-xs)}[part="badge"] {animation: shortcut-overlay-in var(--helix-duration-fast) var(--helix-easing-standard)}@media (prefers-reduced-motion: reduce) {[part="badge"] {animation: none}}@keyframes shortcut-overlay-in {from {opacity: 0}}[part="badge-keys"], [part="keys"] kbd {font-family: var(--helix-font-sans);font-weight: var(--helix-weight-semibold)}[part="badge-name"] {overflow: hidden;text-overflow: ellipsis}[part="list"] {display: grid;gap: var(--helix-space-2xs);grid-template-columns: minmax(0, 1fr) auto;margin: var(--helix-space-none)}[part="row"] {border-block-end: var(--helix-border-thin) solid var(--helix-color-border);display: grid;grid-column: 1 / -1;grid-template-columns: subgrid;padding-block: var(--helix-space-xs)}[part="row"]:last-child {border-block-end-color: transparent}[part="name"], [part="keys"] {font-size: var(--helix-text-sm);margin: var(--helix-space-none)}[part="keys"] {color: var(--helix-color-foreground-muted);text-align: end}[part="empty"] {color: var(--helix-color-foreground-muted);font-size: var(--helix-text-sm);margin: var(--helix-space-none)}@media print {[part="badge"] {display: none}}`);
@@ -0,0 +1,33 @@
1
+ import { HelixHeadlessShortcutOverlay } from '@fusion.dev/helix-headless/shortcut-overlay';
2
+ import type { CSSResultGroup } from 'lit';
3
+ import '../../dialog/index.js';
4
+ /**
5
+ * @summary Shows every control's shortcut and what it does while a key is held.
6
+ *
7
+ * @description
8
+ * Each badge is a small inverse plate, as a tooltip is, with the keys first
9
+ * and the control's name after them, centered under the control.
10
+ * The sheet is a `Dialog` listing each shortcut's name with its keys at the
11
+ * end of the row.
12
+ *
13
+ * @since 0.216.0
14
+ * @status experimental
15
+ * @category navigation
16
+ * @aliases Keyboard shortcuts, Shortcut hints, Key tips, Cheat sheet
17
+ * @documentation https://fusion.dev/helix/components/shortcut-overlay
18
+ *
19
+ * @cssproperty --shortcut-overlay-badge-background-color - The badge's fill. Defaults to `surface-inverse`.
20
+ * @cssproperty --shortcut-overlay-badge-border-width - The badge's edge. Defaults to `border-floating`, which a theme sets to zero where a shadow alone lifts a surface.
21
+ * @cssproperty --shortcut-overlay-badge-color - The badge's text. Defaults to `foreground-inverse`.
22
+ * @cssproperty --shortcut-overlay-badge-max-inline-size - The widest a badge grows before its name ends in an ellipsis. Defaults to 16rem.
23
+ * @cssproperty --shortcut-overlay-badge-shadow - The badge's lift. Defaults to `shadow-floating`.
24
+ */
25
+ export declare class HelixShortcutOverlay extends HelixHeadlessShortcutOverlay {
26
+ static styles: CSSResultGroup;
27
+ static tier: string;
28
+ }
29
+ declare global {
30
+ interface HTMLElementTagNameMap {
31
+ 'helix-shortcut-overlay': HelixShortcutOverlay;
32
+ }
33
+ }
@@ -0,0 +1,13 @@
1
+ import { __decorate } from "tslib";
2
+ import { customElement } from '@fusion.dev/helix-core';
3
+ import { HelixHeadlessShortcutOverlay } from '@fusion.dev/helix-headless/shortcut-overlay';
4
+ import '../../dialog/index.js';
5
+ import { styles } from './shortcut-overlay-root.css.js';
6
+ let HelixShortcutOverlay = class HelixShortcutOverlay extends HelixHeadlessShortcutOverlay {
7
+ static { this.styles = [HelixHeadlessShortcutOverlay.styles, styles]; }
8
+ static { this.tier = 'helix-'; }
9
+ };
10
+ HelixShortcutOverlay = __decorate([
11
+ customElement('helix-shortcut-overlay')
12
+ ], HelixShortcutOverlay);
13
+ export { HelixShortcutOverlay };
@@ -3,12 +3,13 @@ import { customElement } from '@fusion.dev/helix-core';
3
3
  import { HelixHeadlessSpatialBarChart } from '@fusion.dev/helix-headless/spatial-bar-chart';
4
4
  import { property } from 'lit/decorators.js';
5
5
  import { styles as seriesStyles } from '../../shared/chart/series.css.js';
6
+ import { styles as sonifyStyles } from '../../shared/chart/sonify.css.js';
6
7
  import { styles as tooltipStyles } from '../../shared/chart/tooltip.css.js';
7
8
  import { styles } from './spatial-bar-chart-root.css.js';
8
9
  import '../../tooltip/index.js';
9
10
  let HelixSpatialBarChart = class HelixSpatialBarChart extends HelixHeadlessSpatialBarChart {
10
11
  static { this.tier = 'helix-'; }
11
- static { this.styles = [seriesStyles, tooltipStyles, styles]; }
12
+ static { this.styles = [seriesStyles, tooltipStyles, styles, sonifyStyles]; }
12
13
  };
13
14
  __decorate([
14
15
  property({ reflect: true })
@@ -2,6 +2,7 @@ import { __decorate } from "tslib";
2
2
  import { customElement } from '@fusion.dev/helix-core';
3
3
  import { HelixHeadlessSpatialHeatmap } from '@fusion.dev/helix-headless/spatial-heatmap';
4
4
  import { property } from 'lit/decorators.js';
5
+ import { styles as sonifyStyles } from '../../shared/chart/sonify.css.js';
5
6
  import { styles as tooltipStyles } from '../../shared/chart/tooltip.css.js';
6
7
  import { styles } from './spatial-heatmap-root.css.js';
7
8
  import '../../tooltip/index.js';
@@ -11,7 +12,7 @@ let HelixSpatialHeatmap = class HelixSpatialHeatmap extends HelixHeadlessSpatial
11
12
  this.minCell = 10;
12
13
  }
13
14
  static { this.tier = 'helix-'; }
14
- static { this.styles = [tooltipStyles, styles]; }
15
+ static { this.styles = [tooltipStyles, styles, sonifyStyles]; }
15
16
  };
16
17
  __decorate([
17
18
  property({ reflect: true })
@@ -3,12 +3,13 @@ import { customElement } from '@fusion.dev/helix-core';
3
3
  import { HelixHeadlessSpatialRibbonChart } from '@fusion.dev/helix-headless/spatial-ribbon-chart';
4
4
  import { property } from 'lit/decorators.js';
5
5
  import { styles as seriesStyles } from '../../shared/chart/series.css.js';
6
+ import { styles as sonifyStyles } from '../../shared/chart/sonify.css.js';
6
7
  import { styles as tooltipStyles } from '../../shared/chart/tooltip.css.js';
7
8
  import { styles } from './spatial-ribbon-chart-root.css.js';
8
9
  import '../../tooltip/index.js';
9
10
  let HelixSpatialRibbonChart = class HelixSpatialRibbonChart extends HelixHeadlessSpatialRibbonChart {
10
11
  static { this.tier = 'helix-'; }
11
- static { this.styles = [seriesStyles, tooltipStyles, styles]; }
12
+ static { this.styles = [seriesStyles, tooltipStyles, styles, sonifyStyles]; }
12
13
  };
13
14
  __decorate([
14
15
  property({ reflect: true })
@@ -3,12 +3,13 @@ import { customElement } from '@fusion.dev/helix-core';
3
3
  import { HelixHeadlessSpatialScatterChart } from '@fusion.dev/helix-headless/spatial-scatter-chart';
4
4
  import { property } from 'lit/decorators.js';
5
5
  import { styles as seriesStyles } from '../../shared/chart/series.css.js';
6
+ import { styles as sonifyStyles } from '../../shared/chart/sonify.css.js';
6
7
  import { styles as tooltipStyles } from '../../shared/chart/tooltip.css.js';
7
8
  import { styles } from './spatial-scatter-chart-root.css.js';
8
9
  import '../../tooltip/index.js';
9
10
  let HelixSpatialScatterChart = class HelixSpatialScatterChart extends HelixHeadlessSpatialScatterChart {
10
11
  static { this.tier = 'helix-'; }
11
- static { this.styles = [seriesStyles, tooltipStyles, styles]; }
12
+ static { this.styles = [seriesStyles, tooltipStyles, styles, sonifyStyles]; }
12
13
  };
13
14
  __decorate([
14
15
  property({ reflect: true })
@@ -2,12 +2,13 @@ import { __decorate } from "tslib";
2
2
  import { customElement } from '@fusion.dev/helix-core';
3
3
  import { HelixHeadlessSpatialSurfaceChart } from '@fusion.dev/helix-headless/spatial-surface-chart';
4
4
  import { property } from 'lit/decorators.js';
5
+ import { styles as sonifyStyles } from '../../shared/chart/sonify.css.js';
5
6
  import { styles as tooltipStyles } from '../../shared/chart/tooltip.css.js';
6
7
  import { styles } from './spatial-surface-chart-root.css.js';
7
8
  import '../../tooltip/index.js';
8
9
  let HelixSpatialSurfaceChart = class HelixSpatialSurfaceChart extends HelixHeadlessSpatialSurfaceChart {
9
10
  static { this.tier = 'helix-'; }
10
- static { this.styles = [tooltipStyles, styles]; }
11
+ static { this.styles = [tooltipStyles, styles, sonifyStyles]; }
11
12
  };
12
13
  __decorate([
13
14
  property({ reflect: true })
@@ -3,12 +3,13 @@ import { customElement } from '@fusion.dev/helix-core';
3
3
  import { HelixHeadlessSpatialTreemap } from '@fusion.dev/helix-headless/spatial-treemap';
4
4
  import { property } from 'lit/decorators.js';
5
5
  import { styles as seriesStyles } from '../../shared/chart/series.css.js';
6
+ import { styles as sonifyStyles } from '../../shared/chart/sonify.css.js';
6
7
  import { styles as tooltipStyles } from '../../shared/chart/tooltip.css.js';
7
8
  import { styles } from './spatial-treemap-root.css.js';
8
9
  import '../../tooltip/index.js';
9
10
  let HelixSpatialTreemap = class HelixSpatialTreemap extends HelixHeadlessSpatialTreemap {
10
11
  static { this.tier = 'helix-'; }
11
- static { this.styles = [seriesStyles, tooltipStyles, styles]; }
12
+ static { this.styles = [seriesStyles, tooltipStyles, styles, sonifyStyles]; }
12
13
  };
13
14
  __decorate([
14
15
  property({ reflect: true })
@@ -1,2 +1,2 @@
1
1
  import { createSheet } from '@fusion.dev/helix-core';
2
- export const styles = createSheet(`[part="field"] {background-color: var(--textarea-background-color, var(--helix-color-well));border: var(--helix-border-thin) solid var(--textarea-border-color, var(--helix-color-border));border-radius: var(--textarea-radius, var(--helix-radii-sm));display: flex;gap: var(--helix-space-2xs);padding: var(--textarea-padding, var(--helix-space-xs));transition: border-color var(--helix-duration-fast) var(--helix-easing-standard), background-color var(--helix-duration-fast) var(--helix-easing-standard)}[part="control"] {line-height: var(--helix-leading-normal);overflow-wrap: break-word;resize: var(--textarea-resize, vertical)}slot[name="start"]::slotted(*), slot[name="end"]::slotted(*) {align-self: flex-start;color: var(--helix-color-foreground-muted);flex: 0 0 auto}[part="clear"] {--icon-size: var(--helix-size-icon-tight);all: unset;align-items: center;align-self: flex-start;border-radius: var(--helix-radii-sm);box-sizing: border-box;color: var(--helix-color-foreground-muted);cursor: pointer;display: flex;flex: 0 0 auto;justify-content: center;min-block-size: var(--helix-size-icon-loose);min-inline-size: var(--helix-size-icon-loose);transition: color var(--helix-duration-fast) var(--helix-easing-standard)}[part="clear"]:hover {color: var(--helix-color-foreground)}[part="clear"]:focus-visible {outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);outline-offset: var(--helix-size-focus-offset)}:host([auto-grow]) [part="control"] {overflow: hidden;resize: none}:host(:disabled) [part="field"] {cursor: not-allowed;opacity: 0.5}:host([readonly]) [part="field"] {background-color: transparent}@media print {:host {print-color-adjust: exact}}`);
2
+ export const styles = createSheet(`[part="field"] {background-color: var(--textarea-background-color, var(--helix-color-well));border: var(--helix-border-thin) solid var(--textarea-border-color, var(--helix-color-border));border-radius: var(--textarea-radius, var(--helix-radii-sm));display: flex;gap: var(--helix-space-2xs);padding: var(--textarea-padding, var(--helix-space-xs));transition: border-color var(--helix-duration-fast) var(--helix-easing-standard), background-color var(--helix-duration-fast) var(--helix-easing-standard)}[part="control"] {line-height: var(--helix-leading-normal);overflow-wrap: break-word;resize: var(--textarea-resize, vertical)}slot[name="start"]::slotted(*), slot[name="end"]::slotted(*) {align-self: flex-start;color: var(--helix-color-foreground-muted);flex: 0 0 auto}[part="clear"], [part~="voice"] {--icon-size: var(--helix-size-icon-tight);all: unset;align-items: center;align-self: flex-start;border-radius: var(--helix-radii-sm);box-sizing: border-box;color: var(--helix-color-foreground-muted);cursor: pointer;display: flex;flex: 0 0 auto;justify-content: center;min-block-size: var(--helix-size-icon-loose);min-inline-size: var(--helix-size-icon-loose);transition: color var(--helix-duration-fast) var(--helix-easing-standard)}[part="clear"]:hover, [part~="voice"]:hover {color: var(--helix-color-foreground)}[part="clear"]:focus-visible, [part~="voice"]:focus-visible {outline: var(--helix-size-focus-ring) solid var(--helix-color-focus-ring);outline-offset: var(--helix-size-focus-offset)}:host([auto-grow]) [part="control"] {overflow: hidden;resize: none}:host(:disabled) [part="field"] {cursor: not-allowed;opacity: 0.5}:host([readonly]) [part="field"] {background-color: transparent}@media print {:host {print-color-adjust: exact}}`);
@@ -14,6 +14,7 @@ import type { CSSResultGroup } from 'lit';
14
14
  * @aliases Multiline, TextArea
15
15
  * @documentation https://fusion.dev/helix/components/textarea
16
16
  *
17
+ * @cssproperty --dictation-level - How loud the microphone is while the field listens for dictation, from 0 to 1, which the element sets; the ring around the dictation button grows with it.
17
18
  * @cssproperty --textarea-background-color - Fill behind the text.
18
19
  * @cssproperty --textarea-border-color - Edge of the field at rest. Hover, focus and an error still draw their own.
19
20
  * @cssproperty --textarea-padding - Space between the edge of the field and the text.
@@ -1,6 +1,7 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { customElement } from '@fusion.dev/helix-core';
3
3
  import { HelixHeadlessTextarea } from '@fusion.dev/helix-headless/textarea';
4
+ import { styles as dictationStyles } from '../../shared/dictation/dictation.css.js';
4
5
  import { styles as fieldStyles } from '../../shared/field/field.css.js';
5
6
  import { styles as fieldFrameStyles } from '../../shared/field/field-frame.css.js';
6
7
  import { styles as fieldStackedStyles } from '../../shared/field/field-stacked.css.js';
@@ -11,6 +12,7 @@ let HelixTextarea = class HelixTextarea extends HelixHeadlessTextarea {
11
12
  fieldFrameStyles,
12
13
  fieldStackedStyles,
13
14
  styles,
15
+ dictationStyles,
14
16
  ]; }
15
17
  };
16
18
  HelixTextarea = __decorate([
@@ -1,5 +1,6 @@
1
1
  import { HelixHeadlessToast } from '@fusion.dev/helix-headless/toast';
2
2
  import type { CSSResultGroup } from 'lit';
3
+ import '../../button/index.js';
3
4
  /**
4
5
  * @summary The region that holds toast messages, and the only element that announces them.
5
6
  *
@@ -1,6 +1,7 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { customElement } from '@fusion.dev/helix-core';
3
3
  import { HelixHeadlessToast } from '@fusion.dev/helix-headless/toast';
4
+ import '../../button/index.js';
4
5
  import { styles as liveStyles } from '../../shared/live/live.css.js';
5
6
  import { styles } from './toast-root.css.js';
6
7
  let HelixToast = class HelixToast extends HelixHeadlessToast {