@fusion.dev/helix-headless 0.208.0 → 0.209.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/types/jsx.d.ts CHANGED
@@ -177,6 +177,7 @@ import type {
177
177
  HelixHeadlessTabs,
178
178
  HelixHeadlessTag,
179
179
  HelixHeadlessTagGroup,
180
+ HelixHeadlessTerminal,
180
181
  HelixHeadlessTextarea,
181
182
  HelixHeadlessTimeInput,
182
183
  HelixHeadlessTimePicker,
@@ -240,6 +241,12 @@ import type {
240
241
  HelixShortcutEvent,
241
242
  HelixSortEvent,
242
243
  HelixSortedEvent,
244
+ HelixTerminalBellEvent,
245
+ HelixTerminalInputEvent,
246
+ HelixTerminalLinkEvent,
247
+ HelixTerminalResizeEvent,
248
+ HelixTerminalRestartEvent,
249
+ HelixTerminalTitleEvent,
243
250
  HelixToggleEvent,
244
251
  HelixTourAskEvent,
245
252
  HelixTourStatusEvent,
@@ -33904,6 +33911,319 @@ select. */
33904
33911
  textContent?: (string | number) | undefined;
33905
33912
  };
33906
33913
 
33914
+ /** `HelixHeadlessTerminal` component event */
33915
+ export type HelixHeadlessTerminalElementEvent<E = Event> = TypedEvent<
33916
+ HelixHeadlessTerminal,
33917
+ E
33918
+ >;
33919
+ /** `helix-copy` event type */
33920
+ export type HelixHeadlessTerminalHelixCopyElementEvent =
33921
+ HelixHeadlessTerminalElementEvent<HelixCopyEvent>;
33922
+ /** `helix-terminal-bell` event type */
33923
+ export type HelixHeadlessTerminalHelixTerminalBellElementEvent =
33924
+ HelixHeadlessTerminalElementEvent<HelixTerminalBellEvent>;
33925
+ /** `helix-terminal-input` event type */
33926
+ export type HelixHeadlessTerminalHelixTerminalInputElementEvent =
33927
+ HelixHeadlessTerminalElementEvent<HelixTerminalInputEvent>;
33928
+ /** `helix-terminal-link` event type */
33929
+ export type HelixHeadlessTerminalHelixTerminalLinkElementEvent =
33930
+ HelixHeadlessTerminalElementEvent<HelixTerminalLinkEvent>;
33931
+ /** `helix-terminal-resize` event type */
33932
+ export type HelixHeadlessTerminalHelixTerminalResizeElementEvent =
33933
+ HelixHeadlessTerminalElementEvent<HelixTerminalResizeEvent>;
33934
+ /** `helix-terminal-restart` event type */
33935
+ export type HelixHeadlessTerminalHelixTerminalRestartElementEvent =
33936
+ HelixHeadlessTerminalElementEvent<HelixTerminalRestartEvent>;
33937
+ /** `helix-terminal-title` event type */
33938
+ export type HelixHeadlessTerminalHelixTerminalTitleElementEvent =
33939
+ HelixHeadlessTerminalElementEvent<HelixTerminalTitleEvent>;
33940
+
33941
+ export type HelixHeadlessTerminalProps = {
33942
+ /** The clear button's label. */
33943
+ "clear-label"?: (HelixHeadlessTerminal["clearLabel"]) | undefined;
33944
+ /** The clear button's label. */
33945
+ clearLabel?: (HelixHeadlessTerminal["clearLabel"]) | undefined;
33946
+ /** The grid's width in character cells. Set it with `rows` to fix the grid's size; unset, the grid fills the frame. */
33947
+ columns?: (HelixHeadlessTerminal["columns"]) | undefined;
33948
+ /** Which built-in controls the header shows, as a list of `find`, `copy`,
33949
+ `clear`, and `fullscreen`, or `none`. Absent is `find clear`. */
33950
+ controls?: (HelixHeadlessTerminal["controls"]) | undefined;
33951
+ /** The name of the row of controls, read by screen readers. */
33952
+ "controls-label"?: (HelixHeadlessTerminal["controlsLabel"]) | undefined;
33953
+ /** The name of the row of controls, read by screen readers. */
33954
+ controlsLabel?: (HelixHeadlessTerminal["controlsLabel"]) | undefined;
33955
+ /** What screen readers hear after a copy. */
33956
+ "copied-label"?: (HelixHeadlessTerminal["copiedLabel"]) | undefined;
33957
+ /** What screen readers hear after a copy. */
33958
+ copiedLabel?: (HelixHeadlessTerminal["copiedLabel"]) | undefined;
33959
+ /** The copy button's label. */
33960
+ "copy-label"?: (HelixHeadlessTerminal["copyLabel"]) | undefined;
33961
+ /** The copy button's label. */
33962
+ copyLabel?: (HelixHeadlessTerminal["copyLabel"]) | undefined;
33963
+ /** How the process exited, which the page sets when it does. While it is set,
33964
+ the status line says it, the frame sends no input, and Restart is shown.
33965
+ Clear it when a new process starts. */
33966
+ "exit-code"?: (HelixHeadlessTerminal["exitCode"] | `${number}`) | undefined;
33967
+ /** How the process exited, which the page sets when it does. While it is set,
33968
+ the status line says it, the frame sends no input, and Restart is shown.
33969
+ Clear it when a new process starts. */
33970
+ exitCode?: (HelixHeadlessTerminal["exitCode"]) | undefined;
33971
+ /** What the status line says once the process has exited. `{code}` is its
33972
+ exit code, written as the process gave it, and code `0` is a clean exit. */
33973
+ "exited-label"?: (HelixHeadlessTerminal["exitedLabel"]) | undefined;
33974
+ /** What the status line says once the process has exited. `{code}` is its
33975
+ exit code, written as the process gave it, and code `0` is a clean exit. */
33976
+ exitedLabel?: (HelixHeadlessTerminal["exitedLabel"]) | undefined;
33977
+ /** The terminal's name where `label` is empty and the host has no `aria-label`. */
33978
+ "fallback-label"?: (HelixHeadlessTerminal["fallbackLabel"]) | undefined;
33979
+ /** The terminal's name where `label` is empty and the host has no `aria-label`. */
33980
+ fallbackLabel?: (HelixHeadlessTerminal["fallbackLabel"]) | undefined;
33981
+ /** The label of the button that closes the find bar. */
33982
+ "find-close-label"?: (HelixHeadlessTerminal["findCloseLabel"]) | undefined;
33983
+ /** The label of the button that closes the find bar. */
33984
+ findCloseLabel?: (HelixHeadlessTerminal["findCloseLabel"]) | undefined;
33985
+ /** The name of the find bar's row of buttons, read by screen readers. */
33986
+ "find-controls-label"?: (HelixHeadlessTerminal["findControlsLabel"]) | undefined;
33987
+ /** The name of the find bar's row of buttons, read by screen readers. */
33988
+ findControlsLabel?: (HelixHeadlessTerminal["findControlsLabel"]) | undefined;
33989
+ /** The find button's label, and the find field's name and placeholder. */
33990
+ "find-label"?: (HelixHeadlessTerminal["findLabel"]) | undefined;
33991
+ /** The find button's label, and the find field's name and placeholder. */
33992
+ findLabel?: (HelixHeadlessTerminal["findLabel"]) | undefined;
33993
+ /** The next match button's label. */
33994
+ "find-next-label"?: (HelixHeadlessTerminal["findNextLabel"]) | undefined;
33995
+ /** The next match button's label. */
33996
+ findNextLabel?: (HelixHeadlessTerminal["findNextLabel"]) | undefined;
33997
+ /** The previous match button's label. */
33998
+ "find-previous-label"?: (HelixHeadlessTerminal["findPreviousLabel"]) | undefined;
33999
+ /** The previous match button's label. */
34000
+ findPreviousLabel?: (HelixHeadlessTerminal["findPreviousLabel"]) | undefined;
34001
+ /** The fullscreen button's label. */
34002
+ "fullscreen-label"?: (HelixHeadlessTerminal["fullscreenLabel"]) | undefined;
34003
+ /** The fullscreen button's label. */
34004
+ fullscreenLabel?: (HelixHeadlessTerminal["fullscreenLabel"]) | undefined;
34005
+ /** The name of the element the reader types into, which the renderer draws. */
34006
+ "input-label"?: (HelixHeadlessTerminal["inputLabel"]) | undefined;
34007
+ /** The name of the element the reader types into, which the renderer draws. */
34008
+ inputLabel?: (HelixHeadlessTerminal["inputLabel"]) | undefined;
34009
+ /** The terminal's name, in the header and for screen readers, such as the
34010
+ shell or the folder it runs in. Several terminals on a page need names
34011
+ that tell them apart. */
34012
+ label?: (HelixHeadlessTerminal["label"]) | undefined;
34013
+ /** What the find bar says of its matches. `{index}` is the current match,
34014
+ counting from 1, and `{count}` how many there are. */
34015
+ "matches-label"?: (HelixHeadlessTerminal["matchesLabel"]) | undefined;
34016
+ /** What the find bar says of its matches. `{index}` is the current match,
34017
+ counting from 1, and `{count}` how many there are. */
34018
+ matchesLabel?: (HelixHeadlessTerminal["matchesLabel"]) | undefined;
34019
+ /** Draws the output and sends no input, with no cursor, for a transcript or
34020
+ a command an agent ran. The attribute is `readonly`, the platform's
34021
+ spelling. */
34022
+ readonly?: (HelixHeadlessTerminal["readOnly"]) | undefined;
34023
+ /** Draws the output and sends no input, with no cursor, for a transcript or
34024
+ a command an agent ran. The attribute is `readonly`, the platform's
34025
+ spelling. */
34026
+ readOnly?: (HelixHeadlessTerminal["readOnly"]) | undefined;
34027
+ /** The Restart button's label. */
34028
+ "restart-label"?: (HelixHeadlessTerminal["restartLabel"]) | undefined;
34029
+ /** The Restart button's label. */
34030
+ restartLabel?: (HelixHeadlessTerminal["restartLabel"]) | undefined;
34031
+ /** The grid's height in lines. Set it with `columns` to fix the grid's size; unset, the grid fills the frame. */
34032
+ rows?: (HelixHeadlessTerminal["rows"]) | undefined;
34033
+ /** Keeps the grid as lines a screen reader moves through, and says new
34034
+ output as it arrives. Off by default, since it costs time on every
34035
+ write. Connect it to a setting your reader can turn on. */
34036
+ "screen-reader-mode"?: (HelixHeadlessTerminal["screenReaderMode"]) | undefined;
34037
+ /** Keeps the grid as lines a screen reader moves through, and says new
34038
+ output as it arrives. Off by default, since it costs time on every
34039
+ write. Connect it to a setting your reader can turn on. */
34040
+ screenReaderMode?: (HelixHeadlessTerminal["screenReaderMode"]) | undefined;
34041
+ /** What the terminal's input describes to a screen reader. `{key}` is the key that switches Tab. */
34042
+ "tab-hint-label"?: (HelixHeadlessTerminal["tabHintLabel"]) | undefined;
34043
+ /** What the terminal's input describes to a screen reader. `{key}` is the key that switches Tab. */
34044
+ tabHintLabel?: (HelixHeadlessTerminal["tabHintLabel"]) | undefined;
34045
+ /** What the status line says while Tab moves focus. `{key}` is the key that switches it back. */
34046
+ "tab-moves-focus-label"?: (HelixHeadlessTerminal["tabMovesFocusLabel"]) | undefined;
34047
+ /** What the status line says while Tab moves focus. `{key}` is the key that switches it back. */
34048
+ tabMovesFocusLabel?: (HelixHeadlessTerminal["tabMovesFocusLabel"]) | undefined;
34049
+ /** What screen readers hear when Tab goes back to typing in the terminal. */
34050
+ "tab-types-label"?: (HelixHeadlessTerminal["tabTypesLabel"]) | undefined;
34051
+ /** What screen readers hear when Tab goes back to typing in the terminal. */
34052
+ tabTypesLabel?: (HelixHeadlessTerminal["tabTypesLabel"]) | undefined;
34053
+
34054
+ /** The copy control or its key put the selection on the clipboard. */
34055
+ "onhelix-copy"?: ((e: HelixHeadlessTerminalHelixCopyElementEvent) => void) | undefined;
34056
+ /** The program rang the bell. The frame flashes once. */
34057
+ "onhelix-terminal-bell"?: ((
34058
+ e: HelixHeadlessTerminalHelixTerminalBellElementEvent,
34059
+ ) => void) | undefined;
34060
+ /** The reader typed or pasted, with `data` encoded for the program. Write it to the process. Not sent while `readonly`, or once `exit-code` is set. */
34061
+ "onhelix-terminal-input"?: ((
34062
+ e: HelixHeadlessTerminalHelixTerminalInputElementEvent,
34063
+ ) => void) | undefined;
34064
+ /** A link in the output was activated, with its `href`. Cancelable: cancel it to open the link yourself. Left alone, a web address opens in a new tab. */
34065
+ "onhelix-terminal-link"?: ((
34066
+ e: HelixHeadlessTerminalHelixTerminalLinkElementEvent,
34067
+ ) => void) | undefined;
34068
+ /** The grid changed size, with `columns`, `rows`, `width`, and `height`. Resize the process's pseudo-terminal to match. */
34069
+ "onhelix-terminal-resize"?: ((
34070
+ e: HelixHeadlessTerminalHelixTerminalResizeElementEvent,
34071
+ ) => void) | undefined;
34072
+ /** The Restart button was pressed after the process exited. Start a new process and clear `exit-code`. */
34073
+ "onhelix-terminal-restart"?: ((
34074
+ e: HelixHeadlessTerminalHelixTerminalRestartElementEvent,
34075
+ ) => void) | undefined;
34076
+ /** The program set its title, with `title`. The frame keeps its own `label`. */
34077
+ "onhelix-terminal-title"?: ((
34078
+ e: HelixHeadlessTerminalHelixTerminalTitleElementEvent,
34079
+ ) => void) | undefined;
34080
+ };
34081
+
34082
+ export type HelixHeadlessTerminalSolidJsProps = {
34083
+ /** The clear button's label. */
34084
+ "attr:clear-label"?: (HelixHeadlessTerminal["clearLabel"]) | undefined;
34085
+ /** The clear button's label. */
34086
+ "prop:clearLabel"?: (HelixHeadlessTerminal["clearLabel"]) | undefined;
34087
+ /** The grid's width in character cells. Set it with `rows` to fix the grid's size; unset, the grid fills the frame. */
34088
+ "prop:columns"?: (HelixHeadlessTerminal["columns"]) | undefined;
34089
+ /** Which built-in controls the header shows, as a list of `find`, `copy`,
34090
+ `clear`, and `fullscreen`, or `none`. Absent is `find clear`. */
34091
+ "prop:controls"?: (HelixHeadlessTerminal["controls"]) | undefined;
34092
+ /** The name of the row of controls, read by screen readers. */
34093
+ "attr:controls-label"?: (HelixHeadlessTerminal["controlsLabel"]) | undefined;
34094
+ /** The name of the row of controls, read by screen readers. */
34095
+ "prop:controlsLabel"?: (HelixHeadlessTerminal["controlsLabel"]) | undefined;
34096
+ /** What screen readers hear after a copy. */
34097
+ "attr:copied-label"?: (HelixHeadlessTerminal["copiedLabel"]) | undefined;
34098
+ /** What screen readers hear after a copy. */
34099
+ "prop:copiedLabel"?: (HelixHeadlessTerminal["copiedLabel"]) | undefined;
34100
+ /** The copy button's label. */
34101
+ "attr:copy-label"?: (HelixHeadlessTerminal["copyLabel"]) | undefined;
34102
+ /** The copy button's label. */
34103
+ "prop:copyLabel"?: (HelixHeadlessTerminal["copyLabel"]) | undefined;
34104
+ /** How the process exited, which the page sets when it does. While it is set,
34105
+ the status line says it, the frame sends no input, and Restart is shown.
34106
+ Clear it when a new process starts. */
34107
+ "attr:exit-code"?: (HelixHeadlessTerminal["exitCode"] | `${number}`) | undefined;
34108
+ /** How the process exited, which the page sets when it does. While it is set,
34109
+ the status line says it, the frame sends no input, and Restart is shown.
34110
+ Clear it when a new process starts. */
34111
+ "prop:exitCode"?: (HelixHeadlessTerminal["exitCode"]) | undefined;
34112
+ /** What the status line says once the process has exited. `{code}` is its
34113
+ exit code, written as the process gave it, and code `0` is a clean exit. */
34114
+ "attr:exited-label"?: (HelixHeadlessTerminal["exitedLabel"]) | undefined;
34115
+ /** What the status line says once the process has exited. `{code}` is its
34116
+ exit code, written as the process gave it, and code `0` is a clean exit. */
34117
+ "prop:exitedLabel"?: (HelixHeadlessTerminal["exitedLabel"]) | undefined;
34118
+ /** The terminal's name where `label` is empty and the host has no `aria-label`. */
34119
+ "attr:fallback-label"?: (HelixHeadlessTerminal["fallbackLabel"]) | undefined;
34120
+ /** The terminal's name where `label` is empty and the host has no `aria-label`. */
34121
+ "prop:fallbackLabel"?: (HelixHeadlessTerminal["fallbackLabel"]) | undefined;
34122
+ /** The label of the button that closes the find bar. */
34123
+ "attr:find-close-label"?: (HelixHeadlessTerminal["findCloseLabel"]) | undefined;
34124
+ /** The label of the button that closes the find bar. */
34125
+ "prop:findCloseLabel"?: (HelixHeadlessTerminal["findCloseLabel"]) | undefined;
34126
+ /** The name of the find bar's row of buttons, read by screen readers. */
34127
+ "attr:find-controls-label"?: (HelixHeadlessTerminal["findControlsLabel"]) | undefined;
34128
+ /** The name of the find bar's row of buttons, read by screen readers. */
34129
+ "prop:findControlsLabel"?: (HelixHeadlessTerminal["findControlsLabel"]) | undefined;
34130
+ /** The find button's label, and the find field's name and placeholder. */
34131
+ "attr:find-label"?: (HelixHeadlessTerminal["findLabel"]) | undefined;
34132
+ /** The find button's label, and the find field's name and placeholder. */
34133
+ "prop:findLabel"?: (HelixHeadlessTerminal["findLabel"]) | undefined;
34134
+ /** The next match button's label. */
34135
+ "attr:find-next-label"?: (HelixHeadlessTerminal["findNextLabel"]) | undefined;
34136
+ /** The next match button's label. */
34137
+ "prop:findNextLabel"?: (HelixHeadlessTerminal["findNextLabel"]) | undefined;
34138
+ /** The previous match button's label. */
34139
+ "attr:find-previous-label"?: (HelixHeadlessTerminal["findPreviousLabel"]) | undefined;
34140
+ /** The previous match button's label. */
34141
+ "prop:findPreviousLabel"?: (HelixHeadlessTerminal["findPreviousLabel"]) | undefined;
34142
+ /** The fullscreen button's label. */
34143
+ "attr:fullscreen-label"?: (HelixHeadlessTerminal["fullscreenLabel"]) | undefined;
34144
+ /** The fullscreen button's label. */
34145
+ "prop:fullscreenLabel"?: (HelixHeadlessTerminal["fullscreenLabel"]) | undefined;
34146
+ /** The name of the element the reader types into, which the renderer draws. */
34147
+ "attr:input-label"?: (HelixHeadlessTerminal["inputLabel"]) | undefined;
34148
+ /** The name of the element the reader types into, which the renderer draws. */
34149
+ "prop:inputLabel"?: (HelixHeadlessTerminal["inputLabel"]) | undefined;
34150
+ /** The terminal's name, in the header and for screen readers, such as the
34151
+ shell or the folder it runs in. Several terminals on a page need names
34152
+ that tell them apart. */
34153
+ "prop:label"?: (HelixHeadlessTerminal["label"]) | undefined;
34154
+ /** What the find bar says of its matches. `{index}` is the current match,
34155
+ counting from 1, and `{count}` how many there are. */
34156
+ "attr:matches-label"?: (HelixHeadlessTerminal["matchesLabel"]) | undefined;
34157
+ /** What the find bar says of its matches. `{index}` is the current match,
34158
+ counting from 1, and `{count}` how many there are. */
34159
+ "prop:matchesLabel"?: (HelixHeadlessTerminal["matchesLabel"]) | undefined;
34160
+ /** Draws the output and sends no input, with no cursor, for a transcript or
34161
+ a command an agent ran. The attribute is `readonly`, the platform's
34162
+ spelling. */
34163
+ "bool:readonly"?: (HelixHeadlessTerminal["readOnly"]) | undefined;
34164
+ /** Draws the output and sends no input, with no cursor, for a transcript or
34165
+ a command an agent ran. The attribute is `readonly`, the platform's
34166
+ spelling. */
34167
+ "prop:readOnly"?: (HelixHeadlessTerminal["readOnly"]) | undefined;
34168
+ /** The Restart button's label. */
34169
+ "attr:restart-label"?: (HelixHeadlessTerminal["restartLabel"]) | undefined;
34170
+ /** The Restart button's label. */
34171
+ "prop:restartLabel"?: (HelixHeadlessTerminal["restartLabel"]) | undefined;
34172
+ /** The grid's height in lines. Set it with `columns` to fix the grid's size; unset, the grid fills the frame. */
34173
+ "prop:rows"?: (HelixHeadlessTerminal["rows"]) | undefined;
34174
+ /** Keeps the grid as lines a screen reader moves through, and says new
34175
+ output as it arrives. Off by default, since it costs time on every
34176
+ write. Connect it to a setting your reader can turn on. */
34177
+ "bool:screen-reader-mode"?: (HelixHeadlessTerminal["screenReaderMode"]) | undefined;
34178
+ /** Keeps the grid as lines a screen reader moves through, and says new
34179
+ output as it arrives. Off by default, since it costs time on every
34180
+ write. Connect it to a setting your reader can turn on. */
34181
+ "prop:screenReaderMode"?: (HelixHeadlessTerminal["screenReaderMode"]) | undefined;
34182
+ /** What the terminal's input describes to a screen reader. `{key}` is the key that switches Tab. */
34183
+ "attr:tab-hint-label"?: (HelixHeadlessTerminal["tabHintLabel"]) | undefined;
34184
+ /** What the terminal's input describes to a screen reader. `{key}` is the key that switches Tab. */
34185
+ "prop:tabHintLabel"?: (HelixHeadlessTerminal["tabHintLabel"]) | undefined;
34186
+ /** What the status line says while Tab moves focus. `{key}` is the key that switches it back. */
34187
+ "attr:tab-moves-focus-label"?: (HelixHeadlessTerminal["tabMovesFocusLabel"]) | undefined;
34188
+ /** What the status line says while Tab moves focus. `{key}` is the key that switches it back. */
34189
+ "prop:tabMovesFocusLabel"?: (HelixHeadlessTerminal["tabMovesFocusLabel"]) | undefined;
34190
+ /** What screen readers hear when Tab goes back to typing in the terminal. */
34191
+ "attr:tab-types-label"?: (HelixHeadlessTerminal["tabTypesLabel"]) | undefined;
34192
+ /** What screen readers hear when Tab goes back to typing in the terminal. */
34193
+ "prop:tabTypesLabel"?: (HelixHeadlessTerminal["tabTypesLabel"]) | undefined;
34194
+ /** The copy control or its key put the selection on the clipboard. */
34195
+ "on:helix-copy"?: ((e: HelixHeadlessTerminalHelixCopyElementEvent) => void) | undefined;
34196
+ /** The program rang the bell. The frame flashes once. */
34197
+ "on:helix-terminal-bell"?: ((
34198
+ e: HelixHeadlessTerminalHelixTerminalBellElementEvent,
34199
+ ) => void) | undefined;
34200
+ /** The reader typed or pasted, with `data` encoded for the program. Write it to the process. Not sent while `readonly`, or once `exit-code` is set. */
34201
+ "on:helix-terminal-input"?: ((
34202
+ e: HelixHeadlessTerminalHelixTerminalInputElementEvent,
34203
+ ) => void) | undefined;
34204
+ /** A link in the output was activated, with its `href`. Cancelable: cancel it to open the link yourself. Left alone, a web address opens in a new tab. */
34205
+ "on:helix-terminal-link"?: ((
34206
+ e: HelixHeadlessTerminalHelixTerminalLinkElementEvent,
34207
+ ) => void) | undefined;
34208
+ /** The grid changed size, with `columns`, `rows`, `width`, and `height`. Resize the process's pseudo-terminal to match. */
34209
+ "on:helix-terminal-resize"?: ((
34210
+ e: HelixHeadlessTerminalHelixTerminalResizeElementEvent,
34211
+ ) => void) | undefined;
34212
+ /** The Restart button was pressed after the process exited. Start a new process and clear `exit-code`. */
34213
+ "on:helix-terminal-restart"?: ((
34214
+ e: HelixHeadlessTerminalHelixTerminalRestartElementEvent,
34215
+ ) => void) | undefined;
34216
+ /** The program set its title, with `title`. The frame keeps its own `label`. */
34217
+ "on:helix-terminal-title"?: ((
34218
+ e: HelixHeadlessTerminalHelixTerminalTitleElementEvent,
34219
+ ) => void) | undefined;
34220
+
34221
+ /** Set the innerHTML of the element */
34222
+ innerHTML?: (string) | undefined;
34223
+ /** Set the textContent of the element */
34224
+ textContent?: (string | number) | undefined;
34225
+ };
34226
+
33907
34227
  /** `HelixHeadlessTextarea` component event */
33908
34228
  export type HelixHeadlessTextareaElementEvent<E = Event> = TypedEvent<
33909
34229
  HelixHeadlessTextarea,
@@ -67579,6 +67899,266 @@ export type CustomElements<F extends Framework = "other"> = {
67579
67899
  HelixHeadlessTagProps & BaseProps<HelixHeadlessTag, F> & BaseEvents<HelixHeadlessTag>
67580
67900
  >;
67581
67901
 
67902
+ /**
67903
+ * Wraps a terminal drawn by xterm.js or another emulator. The frame adds a
67904
+ * header with the terminal's name and its controls, a find bar, and a status
67905
+ * line. `connectTerminal` in `@fusion.dev/helix-terminal` connects it to the
67906
+ * emulator and draws the terminal in the colors the `--terminal-*` properties
67907
+ * set, which the styled tier sets from your theme. Helix does not start a
67908
+ * process: you connect the stream. Write the program's output with `write()`, send what the
67909
+ * reader types to the process from `helix-terminal-input`, and resize the
67910
+ * process's pseudo-terminal from `helix-terminal-resize`.
67911
+ *
67912
+ * Output written before a renderer is connected is held and written first, so
67913
+ * the process can start before the emulator loads. `write()` resolves once
67914
+ * the renderer has parsed the output, which is how a page pauses a process
67915
+ * that writes faster than the terminal draws.
67916
+ *
67917
+ * The controls are a row in the header, and `controls` names which ones:
67918
+ * `find`, `copy`, `clear`, and `fullscreen`. `find clear` by default. A control
67919
+ * the renderer cannot answer is left out once it is connected. Set `exit-code`
67920
+ * when the process exits: the frame says how it exited, stops sending input,
67921
+ * and shows a Restart button that sends `helix-terminal-restart`.
67922
+ *
67923
+ * **Keyboard.** Every key goes to the program, Tab, Shift+Tab, and Escape
67924
+ * included, except these:
67925
+ *
67926
+ * - Control+Shift+F, or Command+F on a Mac, opens the find bar. Enter and
67927
+ * Shift+Enter move between the matches, and Escape closes the bar and
67928
+ * returns focus to the terminal.
67929
+ * - Control+Shift+C copies the selection. On a Mac, Command+C does.
67930
+ * - Control+M, or Control+Shift+M on a Mac, switches Tab between typing in the
67931
+ * terminal and moving focus out of it. The status line says when Tab moves
67932
+ * focus, and the terminal's input describes the key to a screen reader.
67933
+ *
67934
+ * **Screen readers.** A terminal draws its grid as a picture of text, so a
67935
+ * screen reader reads nothing in it by default. Set `screen-reader-mode` to
67936
+ * have the renderer keep the grid as lines a screen reader can move through
67937
+ * and announce new output as it arrives, which xterm.js calls screen reader
67938
+ * mode. It costs time on every write, so it is off by default: connect it to
67939
+ * a setting your reader can turn on.
67940
+ *
67941
+ * ## Attributes & Properties
67942
+ *
67943
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
67944
+ *
67945
+ * - `clear-label`/`clearLabel`: The clear button's label.
67946
+ * - `columns`: The grid's width in character cells. Set it with `rows` to fix the grid's size; unset, the grid fills the frame.
67947
+ * - `controls`: Which built-in controls the header shows, as a list of `find`, `copy`,
67948
+ * `clear`, and `fullscreen`, or `none`. Absent is `find clear`.
67949
+ * - `controls-label`/`controlsLabel`: The name of the row of controls, read by screen readers.
67950
+ * - `copied-label`/`copiedLabel`: What screen readers hear after a copy.
67951
+ * - `copy-label`/`copyLabel`: The copy button's label.
67952
+ * - `exit-code`/`exitCode`: How the process exited, which the page sets when it does. While it is set,
67953
+ * the status line says it, the frame sends no input, and Restart is shown.
67954
+ * Clear it when a new process starts.
67955
+ * - `exited-label`/`exitedLabel`: What the status line says once the process has exited. `{code}` is its
67956
+ * exit code, written as the process gave it, and code `0` is a clean exit.
67957
+ * - `fallback-label`/`fallbackLabel`: The terminal's name where `label` is empty and the host has no `aria-label`.
67958
+ * - `find-close-label`/`findCloseLabel`: The label of the button that closes the find bar.
67959
+ * - `find-controls-label`/`findControlsLabel`: The name of the find bar's row of buttons, read by screen readers.
67960
+ * - `find-label`/`findLabel`: The find button's label, and the find field's name and placeholder.
67961
+ * - `find-next-label`/`findNextLabel`: The next match button's label.
67962
+ * - `find-previous-label`/`findPreviousLabel`: The previous match button's label.
67963
+ * - `fullscreen-label`/`fullscreenLabel`: The fullscreen button's label.
67964
+ * - `input-label`/`inputLabel`: The name of the element the reader types into, which the renderer draws.
67965
+ * - `label`: The terminal's name, in the header and for screen readers, such as the
67966
+ * shell or the folder it runs in. Several terminals on a page need names
67967
+ * that tell them apart.
67968
+ * - `matches-label`/`matchesLabel`: What the find bar says of its matches. `{index}` is the current match,
67969
+ * counting from 1, and `{count}` how many there are.
67970
+ * - `readonly`/`readOnly`: Draws the output and sends no input, with no cursor, for a transcript or
67971
+ * a command an agent ran. The attribute is `readonly`, the platform's
67972
+ * spelling.
67973
+ * - `restart-label`/`restartLabel`: The Restart button's label.
67974
+ * - `rows`: The grid's height in lines. Set it with `columns` to fix the grid's size; unset, the grid fills the frame.
67975
+ * - `screen-reader-mode`/`screenReaderMode`: Keeps the grid as lines a screen reader moves through, and says new
67976
+ * output as it arrives. Off by default, since it costs time on every
67977
+ * write. Connect it to a setting your reader can turn on.
67978
+ * - `tab-hint-label`/`tabHintLabel`: What the terminal's input describes to a screen reader. `{key}` is the key that switches Tab.
67979
+ * - `tab-moves-focus-label`/`tabMovesFocusLabel`: What the status line says while Tab moves focus. `{key}` is the key that switches it back.
67980
+ * - `tab-types-label`/`tabTypesLabel`: What screen readers hear when Tab goes back to typing in the terminal.
67981
+ * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
67982
+ *
67983
+ * **Named `whenSettled` because `settled` is taken four times over**, by
67984
+ * Image, Splitter and both color controls, none of them about transitions. A
67985
+ * base class takes the name every subclass then cannot use.
67986
+ *
67987
+ * **The state it reports cannot be watched, which is why this exists.** A
67988
+ * custom state is deliberately not in the DOM, so there is no
67989
+ * `MutationObserver` equivalent for `ElementInternals.states`. Await this
67990
+ * instead.
67991
+ *
67992
+ * Separate from `updateComplete`, which resolves in the microtask checkpoint
67993
+ * the suppression is still active in. That is the distinction `readyToMove`
67994
+ * in `@fusion.dev/helix-testing` is written around.
67995
+ *
67996
+ * It never resolves where `requestAnimationFrame` never fires, which is a
67997
+ * server, a hidden tab, and happy-dom. Callers that must not hang there race
67998
+ * it against a timeout, as the happy-dom harness's `readyToMove` does. The
67999
+ * browser harness's awaits it alone: a browser always runs the frame, and a
68000
+ * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
68001
+ *
68002
+ * ## Events
68003
+ *
68004
+ * Events that will be emitted by the component.
68005
+ *
68006
+ * - `helix-copy`: The copy control or its key put the selection on the clipboard.
68007
+ * - `helix-terminal-bell`: The program rang the bell. The frame flashes once.
68008
+ * - `helix-terminal-input`: The reader typed or pasted, with `data` encoded for the program. Write it to the process. Not sent while `readonly`, or once `exit-code` is set.
68009
+ * - `helix-terminal-link`: A link in the output was activated, with its `href`. Cancelable: cancel it to open the link yourself. Left alone, a web address opens in a new tab.
68010
+ * - `helix-terminal-resize`: The grid changed size, with `columns`, `rows`, `width`, and `height`. Resize the process's pseudo-terminal to match.
68011
+ * - `helix-terminal-restart`: The Restart button was pressed after the process exited. Start a new process and clear `exit-code`.
68012
+ * - `helix-terminal-title`: The program set its title, with `title`. The frame keeps its own `label`.
68013
+ *
68014
+ * ## Slots
68015
+ *
68016
+ * Areas where markup can be added to the component.
68017
+ *
68018
+ * - `(default)`: The element your renderer draws the terminal in.
68019
+ * - `actions`: Controls of your own in the header, before the built-in ones, such as a button that splits the pane.
68020
+ * - `clear-icon`: Replaces the glyph inside the clear button.
68021
+ * - `copy-icon`: Replaces the glyph inside the copy button.
68022
+ * - `exit-actions`: Controls of your own beside Restart, shown once the process exits, such as a button that opens the whole log.
68023
+ * - `find-actions`: Controls of your own in the find bar, between the count and the buttons that move between matches.
68024
+ * - `find-close-icon`: Replaces the glyph inside the button that closes the find bar.
68025
+ * - `find-icon`: Replaces the glyph inside the find button.
68026
+ * - `find-next-icon`: Replaces the glyph inside the next match button.
68027
+ * - `find-previous-icon`: Replaces the glyph inside the previous match button.
68028
+ * - `fullscreen-icon`: Replaces the glyph inside the fullscreen button.
68029
+ * - `label`: The terminal's name in the header, such as an icon beside the shell's name. Replaces `label` there.
68030
+ * - `restart-icon`: Replaces the glyph inside the Restart button.
68031
+ *
68032
+ * ## Methods
68033
+ *
68034
+ * Methods that can be called to access component functionality.
68035
+ *
68036
+ * - `write(data: string | Uint8Array) => Promise<void>`: Writes the program's output. Resolves once the renderer has parsed it,
68037
+ * which is how a page pauses a process that writes faster than the
68038
+ * terminal draws. Output written before a renderer is attached is held and
68039
+ * written first.
68040
+ * - `paste(text: string) => void`: Inputs text as a paste does, in bracketed paste mode where the program
68041
+ * asked for it. It arrives as `helix-terminal-input`, like typed text.
68042
+ * - `clear() => void`: Clears the scrollback, keeping the line the cursor is on.
68043
+ * - `reset() => void`: Resets the emulator: its modes, its colors, and its screen.
68044
+ * - `text(scope: 'all' | 'screen' = 'screen') => string`: The terminal as plain text, as the renderer drew it: the lines on screen,
68045
+ * or with `all`, every line the scrollback holds. Empty before a renderer is
68046
+ * attached.
68047
+ * - `look() => TerminalLook`: The colors and the face the terminal is to be drawn in, as the
68048
+ * `--terminal-*` properties resolve where the frame is. `connectTerminal`
68049
+ * themes the renderer from it. A color nothing sets is left out, so the
68050
+ * renderer keeps its own: the headless tier sets none, and the styled tier
68051
+ * sets every one from the theme.
68052
+ * - `focus(options?: FocusOptions) => void`: Focuses the terminal's input, where a renderer is attached.
68053
+ * - `attach(renderer: TerminalRenderer) => TerminalSink`: Attaches what draws the terminal, and returns how it tells the frame what
68054
+ * happened. `connectTerminal` calls it; a page drawing its own terminal calls
68055
+ * it with its own renderer. Attaching another detaches the first.
68056
+ *
68057
+ * ## CSS Custom Properties
68058
+ *
68059
+ * CSS variables available for styling the component.
68060
+ *
68061
+ * - `--terminal-active-match-background-color`: The ground of the current match of a search.
68062
+ * - `--terminal-active-match-border-color`: The edge of the current match of a search.
68063
+ * - `--terminal-ansi-black`: ANSI black, which codes `30` and `40` draw.
68064
+ * - `--terminal-ansi-blue`: ANSI blue, which codes `34` and `44` draw.
68065
+ * - `--terminal-ansi-bright-black`: ANSI bright black, which codes `90` and `100` draw.
68066
+ * - `--terminal-ansi-bright-blue`: ANSI bright blue, which codes `94` and `104` draw.
68067
+ * - `--terminal-ansi-bright-cyan`: ANSI bright cyan, which codes `96` and `106` draw.
68068
+ * - `--terminal-ansi-bright-green`: ANSI bright green, which codes `92` and `102` draw.
68069
+ * - `--terminal-ansi-bright-magenta`: ANSI bright magenta, which codes `95` and `105` draw.
68070
+ * - `--terminal-ansi-bright-red`: ANSI bright red, which codes `91` and `101` draw.
68071
+ * - `--terminal-ansi-bright-white`: ANSI bright white, which codes `97` and `107` draw.
68072
+ * - `--terminal-ansi-bright-yellow`: ANSI bright yellow, which codes `93` and `103` draw.
68073
+ * - `--terminal-ansi-cyan`: ANSI cyan, which codes `36` and `46` draw.
68074
+ * - `--terminal-ansi-green`: ANSI green, which codes `32` and `42` draw.
68075
+ * - `--terminal-ansi-magenta`: ANSI magenta, which codes `35` and `45` draw.
68076
+ * - `--terminal-ansi-red`: ANSI red, which codes `31` and `41` draw.
68077
+ * - `--terminal-ansi-white`: ANSI white, which codes `37` and `47` draw.
68078
+ * - `--terminal-ansi-yellow`: ANSI yellow, which codes `33` and `43` draw.
68079
+ * - `--terminal-background-color`: The ground of the grid.
68080
+ * - `--terminal-color`: The text of the grid where the program sets no color.
68081
+ * - `--terminal-cursor-color`: The cursor.
68082
+ * - `--terminal-match-background-color`: The ground of every match of a search but the current one.
68083
+ * - `--terminal-scrollbar-thumb-color`: The grid's scrollbar.
68084
+ * - `--terminal-selection-background-color`: The ground of selected text. See-through, so the text keeps its color.
68085
+ *
68086
+ * ## CSS Parts
68087
+ *
68088
+ * Custom selectors for styling elements within the component.
68089
+ *
68090
+ * - `actions`: The `actions` slot, first in the header's toolbar.
68091
+ * - `clear`: The button that clears the scrollback.
68092
+ * - `clear-button`: The clear button's inner button.
68093
+ * - `clear-live`: The clear button's live region, which speaks while the button is pending.
68094
+ * - `clear-spinner`: The ring the clear button turns while it is pending.
68095
+ * - `clear-text`: The box the clear button's icon sits in.
68096
+ * - `controls`: The toolbar at the end of the header: your actions, then the built-in buttons, one tab stop that the arrows move along.
68097
+ * - `controls-toolbar`: The box inside the header's toolbar that lays its buttons out.
68098
+ * - `copy`: The button that copies the selection. Disabled while nothing is selected.
68099
+ * - `copy-button`: The copy button's inner button.
68100
+ * - `copy-live`: The copy button's live region, which speaks while the button is pending.
68101
+ * - `copy-spinner`: The ring the copy button turns while it is pending.
68102
+ * - `copy-text`: The box the copy button's icon sits in.
68103
+ * - `exit-actions`: The `exit-actions` slot, beside Restart in the status line.
68104
+ * - `find`: The button that opens and closes the find bar. Expanded while it is open.
68105
+ * - `find-actions`: The `find-actions` slot, first in the find bar's toolbar.
68106
+ * - `find-bar`: The bar under the header where the reader searches the output.
68107
+ * - `find-button`: The find button's inner button.
68108
+ * - `find-close`: The button that closes the find bar.
68109
+ * - `find-close-button`: The find bar's close button's inner button.
68110
+ * - `find-close-live`: The find bar's close button's live region, which speaks while the button is pending.
68111
+ * - `find-close-spinner`: The ring the find bar's close button turns while it is pending.
68112
+ * - `find-close-text`: The box the find bar's close button's icon sits in.
68113
+ * - `find-controls`: The toolbar at the end of the find bar: your find actions, then the buttons that move between matches and close the bar.
68114
+ * - `find-controls-toolbar`: The box inside the find bar's toolbar that lays its buttons out.
68115
+ * - `find-count`: Which match is current and how many there are, such as "3 of 12 matches".
68116
+ * - `find-field`: The search field in the find bar.
68117
+ * - `find-live`: The find button's live region, which speaks while the button is pending.
68118
+ * - `find-next`: The button that moves to the next match.
68119
+ * - `find-next-button`: The next match button's inner button.
68120
+ * - `find-next-live`: The next match button's live region, which speaks while the button is pending.
68121
+ * - `find-next-spinner`: The ring the next match button turns while it is pending.
68122
+ * - `find-next-text`: The box the next match button's icon sits in.
68123
+ * - `find-previous`: The button that moves to the previous match.
68124
+ * - `find-previous-button`: The previous match button's inner button.
68125
+ * - `find-previous-live`: The previous match button's live region, which speaks while the button is pending.
68126
+ * - `find-previous-spinner`: The ring the previous match button turns while it is pending.
68127
+ * - `find-previous-text`: The box the previous match button's icon sits in.
68128
+ * - `find-spinner`: The ring the find button turns while it is pending.
68129
+ * - `find-text`: The box the find button's icon sits in.
68130
+ * - `fullscreen`: The button that makes the terminal fill the screen. Pressed while it does.
68131
+ * - `fullscreen-button`: The fullscreen button's inner button.
68132
+ * - `fullscreen-live`: The fullscreen button's live region, which speaks while the button is pending.
68133
+ * - `fullscreen-spinner`: The ring the fullscreen button turns while it is pending.
68134
+ * - `fullscreen-text`: The box the fullscreen button's icon sits in.
68135
+ * - `header`: The strip above the terminal, with its name, your actions, and the controls.
68136
+ * - `label`: The terminal's name in the header.
68137
+ * - `live`: What screen readers hear after the frame acts: a match count, a copy, or a change to what Tab does. Visually hidden in the styled tier.
68138
+ * - `region`: The named group the terminal sits in.
68139
+ * - `restart`: The button in the status line that asks for a new process after the last one exited.
68140
+ * - `restart-button`: The Restart button's inner button.
68141
+ * - `restart-live`: The Restart button's live region, which speaks while the button is pending.
68142
+ * - `restart-spinner`: The ring the Restart button turns while it is pending.
68143
+ * - `restart-text`: The Restart button's label.
68144
+ * - `status`: The line under the terminal that says the process exited, or that Tab moves focus.
68145
+ * - `viewport`: The box the terminal is drawn in.
68146
+ *
68147
+ * ## CSS States
68148
+ *
68149
+ * These can be used to apply styling when a component is in a given state.
68150
+ *
68151
+ * - `bell`: The program rang the bell, held for a moment for a visual bell.
68152
+ * - `exited`: The process has exited, by `exit-code`.
68153
+ * - `find-open`: The find bar is open.
68154
+ * - `fullscreen`: The terminal fills the screen.
68155
+ * - `tab-moves-focus`: Tab moves focus out of the terminal, after Control+M.
68156
+ * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
68157
+ */
68158
+ "helix-headless-terminal": Partial<
68159
+ HelixHeadlessTerminalProps & BaseProps<HelixHeadlessTerminal, F> & BaseEvents<HelixHeadlessTerminal>
68160
+ >;
68161
+
67582
68162
  /**
67583
68163
  * Renders a `<textarea>`, so the caret, selection, spellcheck, resize handle,
67584
68164
  * and phone keyboard come from the platform. It is in the server markup, so the
@@ -69853,6 +70433,10 @@ export type CustomElements<F extends Framework = "other"> = {
69853
70433
  * tab stop while the toolbar's is elsewhere, so Tab stops once in the
69854
70434
  * toolbar. A composite without one keeps its own tab stop.
69855
70435
  *
70436
+ * A `<slot>` in the toolbar counts as the controls assigned to it, for a
70437
+ * toolbar a component draws in its own shadow root with your controls passed
70438
+ * into it: they share its tab stop and its arrows with the component's own.
70439
+ *
69856
70440
  * A toolbar inside another toolbar, a Helix one or the page's own
69857
70441
  * `role="toolbar"`, is a `group` of the outer one, as React Aria's is: the
69858
70442
  * outer toolbar's arrows walk through its controls and on past them, and it
@@ -100275,6 +100859,269 @@ export type CustomElementsSolidJs = {
100275
100859
  BaseEvents<HelixHeadlessTag>
100276
100860
  >;
100277
100861
 
100862
+ /**
100863
+ * Wraps a terminal drawn by xterm.js or another emulator. The frame adds a
100864
+ * header with the terminal's name and its controls, a find bar, and a status
100865
+ * line. `connectTerminal` in `@fusion.dev/helix-terminal` connects it to the
100866
+ * emulator and draws the terminal in the colors the `--terminal-*` properties
100867
+ * set, which the styled tier sets from your theme. Helix does not start a
100868
+ * process: you connect the stream. Write the program's output with `write()`, send what the
100869
+ * reader types to the process from `helix-terminal-input`, and resize the
100870
+ * process's pseudo-terminal from `helix-terminal-resize`.
100871
+ *
100872
+ * Output written before a renderer is connected is held and written first, so
100873
+ * the process can start before the emulator loads. `write()` resolves once
100874
+ * the renderer has parsed the output, which is how a page pauses a process
100875
+ * that writes faster than the terminal draws.
100876
+ *
100877
+ * The controls are a row in the header, and `controls` names which ones:
100878
+ * `find`, `copy`, `clear`, and `fullscreen`. `find clear` by default. A control
100879
+ * the renderer cannot answer is left out once it is connected. Set `exit-code`
100880
+ * when the process exits: the frame says how it exited, stops sending input,
100881
+ * and shows a Restart button that sends `helix-terminal-restart`.
100882
+ *
100883
+ * **Keyboard.** Every key goes to the program, Tab, Shift+Tab, and Escape
100884
+ * included, except these:
100885
+ *
100886
+ * - Control+Shift+F, or Command+F on a Mac, opens the find bar. Enter and
100887
+ * Shift+Enter move between the matches, and Escape closes the bar and
100888
+ * returns focus to the terminal.
100889
+ * - Control+Shift+C copies the selection. On a Mac, Command+C does.
100890
+ * - Control+M, or Control+Shift+M on a Mac, switches Tab between typing in the
100891
+ * terminal and moving focus out of it. The status line says when Tab moves
100892
+ * focus, and the terminal's input describes the key to a screen reader.
100893
+ *
100894
+ * **Screen readers.** A terminal draws its grid as a picture of text, so a
100895
+ * screen reader reads nothing in it by default. Set `screen-reader-mode` to
100896
+ * have the renderer keep the grid as lines a screen reader can move through
100897
+ * and announce new output as it arrives, which xterm.js calls screen reader
100898
+ * mode. It costs time on every write, so it is off by default: connect it to
100899
+ * a setting your reader can turn on.
100900
+ *
100901
+ * ## Attributes & Properties
100902
+ *
100903
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
100904
+ *
100905
+ * - `clear-label`/`clearLabel`: The clear button's label.
100906
+ * - `columns`: The grid's width in character cells. Set it with `rows` to fix the grid's size; unset, the grid fills the frame.
100907
+ * - `controls`: Which built-in controls the header shows, as a list of `find`, `copy`,
100908
+ * `clear`, and `fullscreen`, or `none`. Absent is `find clear`.
100909
+ * - `controls-label`/`controlsLabel`: The name of the row of controls, read by screen readers.
100910
+ * - `copied-label`/`copiedLabel`: What screen readers hear after a copy.
100911
+ * - `copy-label`/`copyLabel`: The copy button's label.
100912
+ * - `exit-code`/`exitCode`: How the process exited, which the page sets when it does. While it is set,
100913
+ * the status line says it, the frame sends no input, and Restart is shown.
100914
+ * Clear it when a new process starts.
100915
+ * - `exited-label`/`exitedLabel`: What the status line says once the process has exited. `{code}` is its
100916
+ * exit code, written as the process gave it, and code `0` is a clean exit.
100917
+ * - `fallback-label`/`fallbackLabel`: The terminal's name where `label` is empty and the host has no `aria-label`.
100918
+ * - `find-close-label`/`findCloseLabel`: The label of the button that closes the find bar.
100919
+ * - `find-controls-label`/`findControlsLabel`: The name of the find bar's row of buttons, read by screen readers.
100920
+ * - `find-label`/`findLabel`: The find button's label, and the find field's name and placeholder.
100921
+ * - `find-next-label`/`findNextLabel`: The next match button's label.
100922
+ * - `find-previous-label`/`findPreviousLabel`: The previous match button's label.
100923
+ * - `fullscreen-label`/`fullscreenLabel`: The fullscreen button's label.
100924
+ * - `input-label`/`inputLabel`: The name of the element the reader types into, which the renderer draws.
100925
+ * - `label`: The terminal's name, in the header and for screen readers, such as the
100926
+ * shell or the folder it runs in. Several terminals on a page need names
100927
+ * that tell them apart.
100928
+ * - `matches-label`/`matchesLabel`: What the find bar says of its matches. `{index}` is the current match,
100929
+ * counting from 1, and `{count}` how many there are.
100930
+ * - `readonly`/`readOnly`: Draws the output and sends no input, with no cursor, for a transcript or
100931
+ * a command an agent ran. The attribute is `readonly`, the platform's
100932
+ * spelling.
100933
+ * - `restart-label`/`restartLabel`: The Restart button's label.
100934
+ * - `rows`: The grid's height in lines. Set it with `columns` to fix the grid's size; unset, the grid fills the frame.
100935
+ * - `screen-reader-mode`/`screenReaderMode`: Keeps the grid as lines a screen reader moves through, and says new
100936
+ * output as it arrives. Off by default, since it costs time on every
100937
+ * write. Connect it to a setting your reader can turn on.
100938
+ * - `tab-hint-label`/`tabHintLabel`: What the terminal's input describes to a screen reader. `{key}` is the key that switches Tab.
100939
+ * - `tab-moves-focus-label`/`tabMovesFocusLabel`: What the status line says while Tab moves focus. `{key}` is the key that switches it back.
100940
+ * - `tab-types-label`/`tabTypesLabel`: What screen readers hear when Tab goes back to typing in the terminal.
100941
+ * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
100942
+ *
100943
+ * **Named `whenSettled` because `settled` is taken four times over**, by
100944
+ * Image, Splitter and both color controls, none of them about transitions. A
100945
+ * base class takes the name every subclass then cannot use.
100946
+ *
100947
+ * **The state it reports cannot be watched, which is why this exists.** A
100948
+ * custom state is deliberately not in the DOM, so there is no
100949
+ * `MutationObserver` equivalent for `ElementInternals.states`. Await this
100950
+ * instead.
100951
+ *
100952
+ * Separate from `updateComplete`, which resolves in the microtask checkpoint
100953
+ * the suppression is still active in. That is the distinction `readyToMove`
100954
+ * in `@fusion.dev/helix-testing` is written around.
100955
+ *
100956
+ * It never resolves where `requestAnimationFrame` never fires, which is a
100957
+ * server, a hidden tab, and happy-dom. Callers that must not hang there race
100958
+ * it against a timeout, as the happy-dom harness's `readyToMove` does. The
100959
+ * browser harness's awaits it alone: a browser always runs the frame, and a
100960
+ * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
100961
+ *
100962
+ * ## Events
100963
+ *
100964
+ * Events that will be emitted by the component.
100965
+ *
100966
+ * - `helix-copy`: The copy control or its key put the selection on the clipboard.
100967
+ * - `helix-terminal-bell`: The program rang the bell. The frame flashes once.
100968
+ * - `helix-terminal-input`: The reader typed or pasted, with `data` encoded for the program. Write it to the process. Not sent while `readonly`, or once `exit-code` is set.
100969
+ * - `helix-terminal-link`: A link in the output was activated, with its `href`. Cancelable: cancel it to open the link yourself. Left alone, a web address opens in a new tab.
100970
+ * - `helix-terminal-resize`: The grid changed size, with `columns`, `rows`, `width`, and `height`. Resize the process's pseudo-terminal to match.
100971
+ * - `helix-terminal-restart`: The Restart button was pressed after the process exited. Start a new process and clear `exit-code`.
100972
+ * - `helix-terminal-title`: The program set its title, with `title`. The frame keeps its own `label`.
100973
+ *
100974
+ * ## Slots
100975
+ *
100976
+ * Areas where markup can be added to the component.
100977
+ *
100978
+ * - `(default)`: The element your renderer draws the terminal in.
100979
+ * - `actions`: Controls of your own in the header, before the built-in ones, such as a button that splits the pane.
100980
+ * - `clear-icon`: Replaces the glyph inside the clear button.
100981
+ * - `copy-icon`: Replaces the glyph inside the copy button.
100982
+ * - `exit-actions`: Controls of your own beside Restart, shown once the process exits, such as a button that opens the whole log.
100983
+ * - `find-actions`: Controls of your own in the find bar, between the count and the buttons that move between matches.
100984
+ * - `find-close-icon`: Replaces the glyph inside the button that closes the find bar.
100985
+ * - `find-icon`: Replaces the glyph inside the find button.
100986
+ * - `find-next-icon`: Replaces the glyph inside the next match button.
100987
+ * - `find-previous-icon`: Replaces the glyph inside the previous match button.
100988
+ * - `fullscreen-icon`: Replaces the glyph inside the fullscreen button.
100989
+ * - `label`: The terminal's name in the header, such as an icon beside the shell's name. Replaces `label` there.
100990
+ * - `restart-icon`: Replaces the glyph inside the Restart button.
100991
+ *
100992
+ * ## Methods
100993
+ *
100994
+ * Methods that can be called to access component functionality.
100995
+ *
100996
+ * - `write(data: string | Uint8Array) => Promise<void>`: Writes the program's output. Resolves once the renderer has parsed it,
100997
+ * which is how a page pauses a process that writes faster than the
100998
+ * terminal draws. Output written before a renderer is attached is held and
100999
+ * written first.
101000
+ * - `paste(text: string) => void`: Inputs text as a paste does, in bracketed paste mode where the program
101001
+ * asked for it. It arrives as `helix-terminal-input`, like typed text.
101002
+ * - `clear() => void`: Clears the scrollback, keeping the line the cursor is on.
101003
+ * - `reset() => void`: Resets the emulator: its modes, its colors, and its screen.
101004
+ * - `text(scope: 'all' | 'screen' = 'screen') => string`: The terminal as plain text, as the renderer drew it: the lines on screen,
101005
+ * or with `all`, every line the scrollback holds. Empty before a renderer is
101006
+ * attached.
101007
+ * - `look() => TerminalLook`: The colors and the face the terminal is to be drawn in, as the
101008
+ * `--terminal-*` properties resolve where the frame is. `connectTerminal`
101009
+ * themes the renderer from it. A color nothing sets is left out, so the
101010
+ * renderer keeps its own: the headless tier sets none, and the styled tier
101011
+ * sets every one from the theme.
101012
+ * - `focus(options?: FocusOptions) => void`: Focuses the terminal's input, where a renderer is attached.
101013
+ * - `attach(renderer: TerminalRenderer) => TerminalSink`: Attaches what draws the terminal, and returns how it tells the frame what
101014
+ * happened. `connectTerminal` calls it; a page drawing its own terminal calls
101015
+ * it with its own renderer. Attaching another detaches the first.
101016
+ *
101017
+ * ## CSS Custom Properties
101018
+ *
101019
+ * CSS variables available for styling the component.
101020
+ *
101021
+ * - `--terminal-active-match-background-color`: The ground of the current match of a search.
101022
+ * - `--terminal-active-match-border-color`: The edge of the current match of a search.
101023
+ * - `--terminal-ansi-black`: ANSI black, which codes `30` and `40` draw.
101024
+ * - `--terminal-ansi-blue`: ANSI blue, which codes `34` and `44` draw.
101025
+ * - `--terminal-ansi-bright-black`: ANSI bright black, which codes `90` and `100` draw.
101026
+ * - `--terminal-ansi-bright-blue`: ANSI bright blue, which codes `94` and `104` draw.
101027
+ * - `--terminal-ansi-bright-cyan`: ANSI bright cyan, which codes `96` and `106` draw.
101028
+ * - `--terminal-ansi-bright-green`: ANSI bright green, which codes `92` and `102` draw.
101029
+ * - `--terminal-ansi-bright-magenta`: ANSI bright magenta, which codes `95` and `105` draw.
101030
+ * - `--terminal-ansi-bright-red`: ANSI bright red, which codes `91` and `101` draw.
101031
+ * - `--terminal-ansi-bright-white`: ANSI bright white, which codes `97` and `107` draw.
101032
+ * - `--terminal-ansi-bright-yellow`: ANSI bright yellow, which codes `93` and `103` draw.
101033
+ * - `--terminal-ansi-cyan`: ANSI cyan, which codes `36` and `46` draw.
101034
+ * - `--terminal-ansi-green`: ANSI green, which codes `32` and `42` draw.
101035
+ * - `--terminal-ansi-magenta`: ANSI magenta, which codes `35` and `45` draw.
101036
+ * - `--terminal-ansi-red`: ANSI red, which codes `31` and `41` draw.
101037
+ * - `--terminal-ansi-white`: ANSI white, which codes `37` and `47` draw.
101038
+ * - `--terminal-ansi-yellow`: ANSI yellow, which codes `33` and `43` draw.
101039
+ * - `--terminal-background-color`: The ground of the grid.
101040
+ * - `--terminal-color`: The text of the grid where the program sets no color.
101041
+ * - `--terminal-cursor-color`: The cursor.
101042
+ * - `--terminal-match-background-color`: The ground of every match of a search but the current one.
101043
+ * - `--terminal-scrollbar-thumb-color`: The grid's scrollbar.
101044
+ * - `--terminal-selection-background-color`: The ground of selected text. See-through, so the text keeps its color.
101045
+ *
101046
+ * ## CSS Parts
101047
+ *
101048
+ * Custom selectors for styling elements within the component.
101049
+ *
101050
+ * - `actions`: The `actions` slot, first in the header's toolbar.
101051
+ * - `clear`: The button that clears the scrollback.
101052
+ * - `clear-button`: The clear button's inner button.
101053
+ * - `clear-live`: The clear button's live region, which speaks while the button is pending.
101054
+ * - `clear-spinner`: The ring the clear button turns while it is pending.
101055
+ * - `clear-text`: The box the clear button's icon sits in.
101056
+ * - `controls`: The toolbar at the end of the header: your actions, then the built-in buttons, one tab stop that the arrows move along.
101057
+ * - `controls-toolbar`: The box inside the header's toolbar that lays its buttons out.
101058
+ * - `copy`: The button that copies the selection. Disabled while nothing is selected.
101059
+ * - `copy-button`: The copy button's inner button.
101060
+ * - `copy-live`: The copy button's live region, which speaks while the button is pending.
101061
+ * - `copy-spinner`: The ring the copy button turns while it is pending.
101062
+ * - `copy-text`: The box the copy button's icon sits in.
101063
+ * - `exit-actions`: The `exit-actions` slot, beside Restart in the status line.
101064
+ * - `find`: The button that opens and closes the find bar. Expanded while it is open.
101065
+ * - `find-actions`: The `find-actions` slot, first in the find bar's toolbar.
101066
+ * - `find-bar`: The bar under the header where the reader searches the output.
101067
+ * - `find-button`: The find button's inner button.
101068
+ * - `find-close`: The button that closes the find bar.
101069
+ * - `find-close-button`: The find bar's close button's inner button.
101070
+ * - `find-close-live`: The find bar's close button's live region, which speaks while the button is pending.
101071
+ * - `find-close-spinner`: The ring the find bar's close button turns while it is pending.
101072
+ * - `find-close-text`: The box the find bar's close button's icon sits in.
101073
+ * - `find-controls`: The toolbar at the end of the find bar: your find actions, then the buttons that move between matches and close the bar.
101074
+ * - `find-controls-toolbar`: The box inside the find bar's toolbar that lays its buttons out.
101075
+ * - `find-count`: Which match is current and how many there are, such as "3 of 12 matches".
101076
+ * - `find-field`: The search field in the find bar.
101077
+ * - `find-live`: The find button's live region, which speaks while the button is pending.
101078
+ * - `find-next`: The button that moves to the next match.
101079
+ * - `find-next-button`: The next match button's inner button.
101080
+ * - `find-next-live`: The next match button's live region, which speaks while the button is pending.
101081
+ * - `find-next-spinner`: The ring the next match button turns while it is pending.
101082
+ * - `find-next-text`: The box the next match button's icon sits in.
101083
+ * - `find-previous`: The button that moves to the previous match.
101084
+ * - `find-previous-button`: The previous match button's inner button.
101085
+ * - `find-previous-live`: The previous match button's live region, which speaks while the button is pending.
101086
+ * - `find-previous-spinner`: The ring the previous match button turns while it is pending.
101087
+ * - `find-previous-text`: The box the previous match button's icon sits in.
101088
+ * - `find-spinner`: The ring the find button turns while it is pending.
101089
+ * - `find-text`: The box the find button's icon sits in.
101090
+ * - `fullscreen`: The button that makes the terminal fill the screen. Pressed while it does.
101091
+ * - `fullscreen-button`: The fullscreen button's inner button.
101092
+ * - `fullscreen-live`: The fullscreen button's live region, which speaks while the button is pending.
101093
+ * - `fullscreen-spinner`: The ring the fullscreen button turns while it is pending.
101094
+ * - `fullscreen-text`: The box the fullscreen button's icon sits in.
101095
+ * - `header`: The strip above the terminal, with its name, your actions, and the controls.
101096
+ * - `label`: The terminal's name in the header.
101097
+ * - `live`: What screen readers hear after the frame acts: a match count, a copy, or a change to what Tab does. Visually hidden in the styled tier.
101098
+ * - `region`: The named group the terminal sits in.
101099
+ * - `restart`: The button in the status line that asks for a new process after the last one exited.
101100
+ * - `restart-button`: The Restart button's inner button.
101101
+ * - `restart-live`: The Restart button's live region, which speaks while the button is pending.
101102
+ * - `restart-spinner`: The ring the Restart button turns while it is pending.
101103
+ * - `restart-text`: The Restart button's label.
101104
+ * - `status`: The line under the terminal that says the process exited, or that Tab moves focus.
101105
+ * - `viewport`: The box the terminal is drawn in.
101106
+ *
101107
+ * ## CSS States
101108
+ *
101109
+ * These can be used to apply styling when a component is in a given state.
101110
+ *
101111
+ * - `bell`: The program rang the bell, held for a moment for a visual bell.
101112
+ * - `exited`: The process has exited, by `exit-code`.
101113
+ * - `find-open`: The find bar is open.
101114
+ * - `fullscreen`: The terminal fills the screen.
101115
+ * - `tab-moves-focus`: Tab moves focus out of the terminal, after Control+M.
101116
+ * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
101117
+ */
101118
+ "helix-headless-terminal": Partial<
101119
+ HelixHeadlessTerminalProps &
101120
+ HelixHeadlessTerminalSolidJsProps &
101121
+ BaseProps<HelixHeadlessTerminal, "solid"> &
101122
+ BaseEvents<HelixHeadlessTerminal>
101123
+ >;
101124
+
100278
101125
  /**
100279
101126
  * Renders a `<textarea>`, so the caret, selection, spellcheck, resize handle,
100280
101127
  * and phone keyboard come from the platform. It is in the server markup, so the
@@ -102571,6 +103418,10 @@ export type CustomElementsSolidJs = {
102571
103418
  * tab stop while the toolbar's is elsewhere, so Tab stops once in the
102572
103419
  * toolbar. A composite without one keeps its own tab stop.
102573
103420
  *
103421
+ * A `<slot>` in the toolbar counts as the controls assigned to it, for a
103422
+ * toolbar a component draws in its own shadow root with your controls passed
103423
+ * into it: they share its tab stop and its arrows with the component's own.
103424
+ *
102574
103425
  * A toolbar inside another toolbar, a Helix one or the page's own
102575
103426
  * `role="toolbar"`, is a `group` of the outer one, as React Aria's is: the
102576
103427
  * outer toolbar's arrows walk through its controls and on past them, and it
@@ -105305,6 +106156,54 @@ export type CustomCssProperties = {
105305
106156
  "--table-template"?: (string) | undefined;
105306
106157
  /** Written by the row on its `expand` cell: how deep the row sits, from 1. Do not set it. */
105307
106158
  "--table-row-level"?: (string) | undefined;
106159
+ /** The ground of the current match of a search. */
106160
+ "--terminal-active-match-background-color"?: (string) | undefined;
106161
+ /** The edge of the current match of a search. */
106162
+ "--terminal-active-match-border-color"?: (string) | undefined;
106163
+ /** ANSI black, which codes `30` and `40` draw. */
106164
+ "--terminal-ansi-black"?: (string) | undefined;
106165
+ /** ANSI blue, which codes `34` and `44` draw. */
106166
+ "--terminal-ansi-blue"?: (string) | undefined;
106167
+ /** ANSI bright black, which codes `90` and `100` draw. */
106168
+ "--terminal-ansi-bright-black"?: (string) | undefined;
106169
+ /** ANSI bright blue, which codes `94` and `104` draw. */
106170
+ "--terminal-ansi-bright-blue"?: (string) | undefined;
106171
+ /** ANSI bright cyan, which codes `96` and `106` draw. */
106172
+ "--terminal-ansi-bright-cyan"?: (string) | undefined;
106173
+ /** ANSI bright green, which codes `92` and `102` draw. */
106174
+ "--terminal-ansi-bright-green"?: (string) | undefined;
106175
+ /** ANSI bright magenta, which codes `95` and `105` draw. */
106176
+ "--terminal-ansi-bright-magenta"?: (string) | undefined;
106177
+ /** ANSI bright red, which codes `91` and `101` draw. */
106178
+ "--terminal-ansi-bright-red"?: (string) | undefined;
106179
+ /** ANSI bright white, which codes `97` and `107` draw. */
106180
+ "--terminal-ansi-bright-white"?: (string) | undefined;
106181
+ /** ANSI bright yellow, which codes `93` and `103` draw. */
106182
+ "--terminal-ansi-bright-yellow"?: (string) | undefined;
106183
+ /** ANSI cyan, which codes `36` and `46` draw. */
106184
+ "--terminal-ansi-cyan"?: (string) | undefined;
106185
+ /** ANSI green, which codes `32` and `42` draw. */
106186
+ "--terminal-ansi-green"?: (string) | undefined;
106187
+ /** ANSI magenta, which codes `35` and `45` draw. */
106188
+ "--terminal-ansi-magenta"?: (string) | undefined;
106189
+ /** ANSI red, which codes `31` and `41` draw. */
106190
+ "--terminal-ansi-red"?: (string) | undefined;
106191
+ /** ANSI white, which codes `37` and `47` draw. */
106192
+ "--terminal-ansi-white"?: (string) | undefined;
106193
+ /** ANSI yellow, which codes `33` and `43` draw. */
106194
+ "--terminal-ansi-yellow"?: (string) | undefined;
106195
+ /** The ground of the grid. */
106196
+ "--terminal-background-color"?: (string) | undefined;
106197
+ /** The text of the grid where the program sets no color. */
106198
+ "--terminal-color"?: (string) | undefined;
106199
+ /** The cursor. */
106200
+ "--terminal-cursor-color"?: (string) | undefined;
106201
+ /** The ground of every match of a search but the current one. */
106202
+ "--terminal-match-background-color"?: (string) | undefined;
106203
+ /** The grid's scrollbar. */
106204
+ "--terminal-scrollbar-thumb-color"?: (string) | undefined;
106205
+ /** The ground of selected text. See-through, so the text keeps its color. */
106206
+ "--terminal-selection-background-color"?: (string) | undefined;
105308
106207
  /** How long this message stays, in milliseconds, for a progress hint. */
105309
106208
  "--toast-duration"?: (string) | undefined;
105310
106209
  /** How far a swipe has moved the message across, in pixels, toward the right. */