@fusion.dev/helix-headless 0.204.1 → 0.205.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/api.json +1 -1
- package/custom-elements.json +42 -3
- package/dist/chat/message/chat-message.d.ts +8 -0
- package/dist/chat/message/chat-message.js +2 -1
- package/dist/chat/root/chat-root.d.ts +1 -0
- package/dist/chat/root/chat-root.js +1 -1
- package/dist/log/line/log-line.d.ts +3 -0
- package/dist/log/line/log-line.js +5 -1
- package/dist/log/root/log-root.d.ts +11 -1
- package/dist/log/root/log-root.js +8 -2
- package/lint.json +1 -1
- package/package.json +5 -5
- package/types/jsx.d.ts +46 -2
- package/types/vue.d.ts +7 -2
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fusion.dev/helix-headless",
|
|
3
3
|
"description": "Headless component tier. Structure, accessibility, state, and form participation. No styling.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.205.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ross Sheppard <ross.sheppard@fusion.dev>",
|
|
7
7
|
"repository": {
|
|
@@ -53,14 +53,14 @@
|
|
|
53
53
|
},
|
|
54
54
|
"bugs": "https://github.com/project-fusion/fusion/issues",
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@fusion.dev/helix-core": "0.
|
|
57
|
-
"@fusion.dev/helix-icons": "0.
|
|
56
|
+
"@fusion.dev/helix-core": "0.205.0",
|
|
57
|
+
"@fusion.dev/helix-icons": "0.205.0",
|
|
58
58
|
"tslib": "^2.8.1",
|
|
59
59
|
"uqr": "^0.1.3"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@fusion.dev/helix-cem": "0.
|
|
63
|
-
"@fusion.dev/helix-testing": "0.
|
|
62
|
+
"@fusion.dev/helix-cem": "0.205.0",
|
|
63
|
+
"@fusion.dev/helix-testing": "0.205.0",
|
|
64
64
|
"@fusion.dev/scripts": "0.0.0-dev",
|
|
65
65
|
"@happy-dom/global-registrator": "^20.14.5",
|
|
66
66
|
"@lit-labs/ssr": "^4.1.0",
|
package/types/jsx.d.ts
CHANGED
|
@@ -19901,6 +19901,11 @@ true would write the attribute on upgrade. */
|
|
|
19901
19901
|
pinned?: (HelixHeadlessLog["pinned"]) | undefined;
|
|
19902
19902
|
/** Text a line has to hold to be shown, ignoring case. Empty shows every line. */
|
|
19903
19903
|
query?: (HelixHeadlessLog["query"]) | undefined;
|
|
19904
|
+
/** Whether the log says nothing to a screen reader as lines arrive, steps
|
|
19905
|
+
finish, or the run ends. For a log inside something that speaks for it,
|
|
19906
|
+
such as an agent's work in a chat turn, which the turn announces once it
|
|
19907
|
+
settles. */
|
|
19908
|
+
quiet?: (HelixHeadlessLog["quiet"]) | undefined;
|
|
19904
19909
|
/** The words on the button that returns to the newest line, where `resume` is empty. */
|
|
19905
19910
|
"resume-label"?: (HelixHeadlessLog["resumeLabel"]) | undefined;
|
|
19906
19911
|
/** The words on the button that returns to the newest line, where `resume` is empty. */
|
|
@@ -20051,6 +20056,11 @@ true would write the attribute on upgrade. */
|
|
|
20051
20056
|
"prop:pinned"?: (HelixHeadlessLog["pinned"]) | undefined;
|
|
20052
20057
|
/** Text a line has to hold to be shown, ignoring case. Empty shows every line. */
|
|
20053
20058
|
"prop:query"?: (HelixHeadlessLog["query"]) | undefined;
|
|
20059
|
+
/** Whether the log says nothing to a screen reader as lines arrive, steps
|
|
20060
|
+
finish, or the run ends. For a log inside something that speaks for it,
|
|
20061
|
+
such as an agent's work in a chat turn, which the turn announces once it
|
|
20062
|
+
settles. */
|
|
20063
|
+
"prop:quiet"?: (HelixHeadlessLog["quiet"]) | undefined;
|
|
20054
20064
|
/** The words on the button that returns to the newest line, where `resume` is empty. */
|
|
20055
20065
|
"attr:resume-label"?: (HelixHeadlessLog["resumeLabel"]) | undefined;
|
|
20056
20066
|
/** The words on the button that returns to the newest line, where `resume` is empty. */
|
|
@@ -43739,6 +43749,12 @@ export type CustomElements = {
|
|
|
43739
43749
|
* a page in another language sets them once there. The time moves on by
|
|
43740
43750
|
* itself, so "now" becomes "1 minute ago" while the page is open.
|
|
43741
43751
|
*
|
|
43752
|
+
* **An agent's work goes in `work`, and its answer in the content.** The work,
|
|
43753
|
+
* its thinking, the commands it ran and what they printed, is a record read
|
|
43754
|
+
* the way a log is, so a `Log` with `separation="plain"` and `quiet` sits there
|
|
43755
|
+
* above the answer. The chat says the turn once it settles, from the content
|
|
43756
|
+
* alone, so the work is never read aloud as part of the answer.
|
|
43757
|
+
*
|
|
43742
43758
|
* ## Attributes & Properties
|
|
43743
43759
|
*
|
|
43744
43760
|
* Component attributes and properties that can be applied to the element or by using JavaScript.
|
|
@@ -43807,6 +43823,7 @@ export type CustomElements = {
|
|
|
43807
43823
|
* - `avatar`: The author's avatar.
|
|
43808
43824
|
* - `indicator`: The indicator shown before the first token arrives. Defaults to the typing indicator.
|
|
43809
43825
|
* - `sources`: The turn's sources, such as citations, documents, or a retrieved page.
|
|
43826
|
+
* - `work`: What an agent did to arrive at the turn, such as a `Log` of its steps, above the content. A screen reader hears the turn without it.
|
|
43810
43827
|
*
|
|
43811
43828
|
* ## CSS Parts
|
|
43812
43829
|
*
|
|
@@ -43824,6 +43841,7 @@ export type CustomElements = {
|
|
|
43824
43841
|
* - `sources`: The turn's sources, under it and outside the bubble.
|
|
43825
43842
|
* - `state`: The text that names the turn's state, when there is one to show.
|
|
43826
43843
|
* - `time`: The turn's time.
|
|
43844
|
+
* - `work`: The box around the `work` slot, above the content.
|
|
43827
43845
|
*
|
|
43828
43846
|
* ## CSS States
|
|
43829
43847
|
*
|
|
@@ -44091,6 +44109,7 @@ export type CustomElements = {
|
|
|
44091
44109
|
* - `message-sources`: The sources of a turn from `turns`.
|
|
44092
44110
|
* - `message-state`: The state text of a turn from `turns`, when there is one to show.
|
|
44093
44111
|
* - `message-time`: The time of a turn from `turns`.
|
|
44112
|
+
* - `message-work`: The box around a turn's `work`, for a turn from `turns`, which has none.
|
|
44094
44113
|
* - `resume`: The control shown while the user is scrolled away from the bottom.
|
|
44095
44114
|
* - `resume-button`: The button the `resume` region shows when nothing is slotted into it.
|
|
44096
44115
|
* - `resume-mark`: The arrow on the default `resume-button`.
|
|
@@ -54828,6 +54847,7 @@ export type CustomElements = {
|
|
|
54828
54847
|
* - `line`: The row the number, the time, and the text sit in.
|
|
54829
54848
|
* - `line-debug`: The row of a line at `debug`.
|
|
54830
54849
|
* - `line-error`: The row of a line at `error`.
|
|
54850
|
+
* - `line-grouped`: The row of a line that belongs to a step, which the styled tier insets under the step's heading where there is no number.
|
|
54831
54851
|
* - `line-marked`: The row of a line `mark-lines` names on the log.
|
|
54832
54852
|
* - `line-selected`: The row of a line in the log's selection.
|
|
54833
54853
|
* - `line-warn`: The row of a line at `warn`.
|
|
@@ -54911,7 +54931,9 @@ export type CustomElements = {
|
|
|
54911
54931
|
* arrive, since reading a build aloud line by line helps nobody. A separate
|
|
54912
54932
|
* status region says each line at `error` once it arrives, each step once it
|
|
54913
54933
|
* finishes or fails, and the end of the run once `done` is set or `source`
|
|
54914
|
-
* ends. Set `done` yourself when output you `write` is complete.
|
|
54934
|
+
* ends. Set `done` yourself when output you `write` is complete. Set `quiet`
|
|
54935
|
+
* where something around the log speaks for it, as a chat turn does for an
|
|
54936
|
+
* agent's work.
|
|
54915
54937
|
*
|
|
54916
54938
|
* The log scrolls on this tier. It carries `data-scroller`, so following the
|
|
54917
54939
|
* newest line and drawing a window work with no stylesheet. Give the log a
|
|
@@ -54960,6 +54982,10 @@ export type CustomElements = {
|
|
|
54960
54982
|
* reflected, for the reason `Chat` gives at its own `pinned`: a default of
|
|
54961
54983
|
* true would write the attribute on upgrade.
|
|
54962
54984
|
* - `query`: Text a line has to hold to be shown, ignoring case. Empty shows every line.
|
|
54985
|
+
* - `quiet`: Whether the log says nothing to a screen reader as lines arrive, steps
|
|
54986
|
+
* finish, or the run ends. For a log inside something that speaks for it,
|
|
54987
|
+
* such as an agent's work in a chat turn, which the turn announces once it
|
|
54988
|
+
* settles.
|
|
54963
54989
|
* - `resume-label`/`resumeLabel`: The words on the button that returns to the newest line, where `resume` is empty.
|
|
54964
54990
|
* - `selectable`: Whether pressing a line's number selects the line, and pressing another
|
|
54965
54991
|
* with Shift selects every line between them. Each number is then a
|
|
@@ -55094,6 +55120,7 @@ export type CustomElements = {
|
|
|
55094
55120
|
* - `line`: The row of a line drawn from data.
|
|
55095
55121
|
* - `line-debug`: The row of a line drawn from data at `debug`.
|
|
55096
55122
|
* - `line-error`: The row of a line drawn from data at `error`.
|
|
55123
|
+
* - `line-grouped`: The row of a line drawn from data that belongs to a step.
|
|
55097
55124
|
* - `line-marked`: The row of a line drawn from data that `mark-lines` names.
|
|
55098
55125
|
* - `line-match`: Text in a line drawn from data that matches `query`.
|
|
55099
55126
|
* - `line-number`: The number of a line drawn from data.
|
|
@@ -75981,6 +76008,12 @@ export type CustomElementsSolidJs = {
|
|
|
75981
76008
|
* a page in another language sets them once there. The time moves on by
|
|
75982
76009
|
* itself, so "now" becomes "1 minute ago" while the page is open.
|
|
75983
76010
|
*
|
|
76011
|
+
* **An agent's work goes in `work`, and its answer in the content.** The work,
|
|
76012
|
+
* its thinking, the commands it ran and what they printed, is a record read
|
|
76013
|
+
* the way a log is, so a `Log` with `separation="plain"` and `quiet` sits there
|
|
76014
|
+
* above the answer. The chat says the turn once it settles, from the content
|
|
76015
|
+
* alone, so the work is never read aloud as part of the answer.
|
|
76016
|
+
*
|
|
75984
76017
|
* ## Attributes & Properties
|
|
75985
76018
|
*
|
|
75986
76019
|
* Component attributes and properties that can be applied to the element or by using JavaScript.
|
|
@@ -76049,6 +76082,7 @@ export type CustomElementsSolidJs = {
|
|
|
76049
76082
|
* - `avatar`: The author's avatar.
|
|
76050
76083
|
* - `indicator`: The indicator shown before the first token arrives. Defaults to the typing indicator.
|
|
76051
76084
|
* - `sources`: The turn's sources, such as citations, documents, or a retrieved page.
|
|
76085
|
+
* - `work`: What an agent did to arrive at the turn, such as a `Log` of its steps, above the content. A screen reader hears the turn without it.
|
|
76052
76086
|
*
|
|
76053
76087
|
* ## CSS Parts
|
|
76054
76088
|
*
|
|
@@ -76066,6 +76100,7 @@ export type CustomElementsSolidJs = {
|
|
|
76066
76100
|
* - `sources`: The turn's sources, under it and outside the bubble.
|
|
76067
76101
|
* - `state`: The text that names the turn's state, when there is one to show.
|
|
76068
76102
|
* - `time`: The turn's time.
|
|
76103
|
+
* - `work`: The box around the `work` slot, above the content.
|
|
76069
76104
|
*
|
|
76070
76105
|
* ## CSS States
|
|
76071
76106
|
*
|
|
@@ -76334,6 +76369,7 @@ export type CustomElementsSolidJs = {
|
|
|
76334
76369
|
* - `message-sources`: The sources of a turn from `turns`.
|
|
76335
76370
|
* - `message-state`: The state text of a turn from `turns`, when there is one to show.
|
|
76336
76371
|
* - `message-time`: The time of a turn from `turns`.
|
|
76372
|
+
* - `message-work`: The box around a turn's `work`, for a turn from `turns`, which has none.
|
|
76337
76373
|
* - `resume`: The control shown while the user is scrolled away from the bottom.
|
|
76338
76374
|
* - `resume-button`: The button the `resume` region shows when nothing is slotted into it.
|
|
76339
76375
|
* - `resume-mark`: The arrow on the default `resume-button`.
|
|
@@ -87172,6 +87208,7 @@ export type CustomElementsSolidJs = {
|
|
|
87172
87208
|
* - `line`: The row the number, the time, and the text sit in.
|
|
87173
87209
|
* - `line-debug`: The row of a line at `debug`.
|
|
87174
87210
|
* - `line-error`: The row of a line at `error`.
|
|
87211
|
+
* - `line-grouped`: The row of a line that belongs to a step, which the styled tier insets under the step's heading where there is no number.
|
|
87175
87212
|
* - `line-marked`: The row of a line `mark-lines` names on the log.
|
|
87176
87213
|
* - `line-selected`: The row of a line in the log's selection.
|
|
87177
87214
|
* - `line-warn`: The row of a line at `warn`.
|
|
@@ -87258,7 +87295,9 @@ export type CustomElementsSolidJs = {
|
|
|
87258
87295
|
* arrive, since reading a build aloud line by line helps nobody. A separate
|
|
87259
87296
|
* status region says each line at `error` once it arrives, each step once it
|
|
87260
87297
|
* finishes or fails, and the end of the run once `done` is set or `source`
|
|
87261
|
-
* ends. Set `done` yourself when output you `write` is complete.
|
|
87298
|
+
* ends. Set `done` yourself when output you `write` is complete. Set `quiet`
|
|
87299
|
+
* where something around the log speaks for it, as a chat turn does for an
|
|
87300
|
+
* agent's work.
|
|
87262
87301
|
*
|
|
87263
87302
|
* The log scrolls on this tier. It carries `data-scroller`, so following the
|
|
87264
87303
|
* newest line and drawing a window work with no stylesheet. Give the log a
|
|
@@ -87307,6 +87346,10 @@ export type CustomElementsSolidJs = {
|
|
|
87307
87346
|
* reflected, for the reason `Chat` gives at its own `pinned`: a default of
|
|
87308
87347
|
* true would write the attribute on upgrade.
|
|
87309
87348
|
* - `query`: Text a line has to hold to be shown, ignoring case. Empty shows every line.
|
|
87349
|
+
* - `quiet`: Whether the log says nothing to a screen reader as lines arrive, steps
|
|
87350
|
+
* finish, or the run ends. For a log inside something that speaks for it,
|
|
87351
|
+
* such as an agent's work in a chat turn, which the turn announces once it
|
|
87352
|
+
* settles.
|
|
87310
87353
|
* - `resume-label`/`resumeLabel`: The words on the button that returns to the newest line, where `resume` is empty.
|
|
87311
87354
|
* - `selectable`: Whether pressing a line's number selects the line, and pressing another
|
|
87312
87355
|
* with Shift selects every line between them. Each number is then a
|
|
@@ -87441,6 +87484,7 @@ export type CustomElementsSolidJs = {
|
|
|
87441
87484
|
* - `line`: The row of a line drawn from data.
|
|
87442
87485
|
* - `line-debug`: The row of a line drawn from data at `debug`.
|
|
87443
87486
|
* - `line-error`: The row of a line drawn from data at `error`.
|
|
87487
|
+
* - `line-grouped`: The row of a line drawn from data that belongs to a step.
|
|
87444
87488
|
* - `line-marked`: The row of a line drawn from data that `mark-lines` names.
|
|
87445
87489
|
* - `line-match`: Text in a line drawn from data that matches `query`.
|
|
87446
87490
|
* - `line-number`: The number of a line drawn from data.
|
package/types/vue.d.ts
CHANGED
|
@@ -10226,6 +10226,11 @@ true would write the attribute on upgrade. */
|
|
|
10226
10226
|
pinned?: (HelixHeadlessLog["pinned"]) | undefined;
|
|
10227
10227
|
/** Text a line has to hold to be shown, ignoring case. Empty shows every line. */
|
|
10228
10228
|
query?: (HelixHeadlessLog["query"]) | undefined;
|
|
10229
|
+
/** Whether the log says nothing to a screen reader as lines arrive, steps
|
|
10230
|
+
finish, or the run ends. For a log inside something that speaks for it,
|
|
10231
|
+
such as an agent's work in a chat turn, which the turn announces once it
|
|
10232
|
+
settles. */
|
|
10233
|
+
quiet?: (HelixHeadlessLog["quiet"]) | undefined;
|
|
10229
10234
|
/** The words on the button that returns to the newest line, where `resume` is empty. */
|
|
10230
10235
|
"resume-label"?: (HelixHeadlessLog["resumeLabel"]) | undefined;
|
|
10231
10236
|
/** The words on the button that returns to the newest line, where `resume` is empty. */
|
|
@@ -20754,7 +20759,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
20754
20759
|
HelixHeadlessChatComposerVueProps,
|
|
20755
20760
|
HelixHeadlessChatComposerVueEvents
|
|
20756
20761
|
>;
|
|
20757
|
-
/** A chat message carries its state: sending, arrived, streaming, or failed. A failed message has a retry control in the message, which fires 'helix-send'. 'streaming' is the state the others are arranged around. A streaming message changes height on every frame, so it is marked 'aria-busy' while it arrives and announced once when it settles. A screen reader cannot follow a stream read out character by character. A screen reader names the turn by its author and its time, such as "You, 2 minutes ago". The author is 'author-label', or "You" for 'me', or the 'author' itself where it is a name; give a turn by 'them' an 'author-label' to name it. The chat it sits in holds the sentence and the word for 'me', so a page in another language sets them once there. The time moves on by itself, so "now" becomes "1 minute ago" while the page is open. */
|
|
20762
|
+
/** A chat message carries its state: sending, arrived, streaming, or failed. A failed message has a retry control in the message, which fires 'helix-send'. 'streaming' is the state the others are arranged around. A streaming message changes height on every frame, so it is marked 'aria-busy' while it arrives and announced once when it settles. A screen reader cannot follow a stream read out character by character. A screen reader names the turn by its author and its time, such as "You, 2 minutes ago". The author is 'author-label', or "You" for 'me', or the 'author' itself where it is a name; give a turn by 'them' an 'author-label' to name it. The chat it sits in holds the sentence and the word for 'me', so a page in another language sets them once there. The time moves on by itself, so "now" becomes "1 minute ago" while the page is open. **An agent's work goes in 'work', and its answer in the content.** The work, its thinking, the commands it ran and what they printed, is a record read the way a log is, so a 'Log' with 'separation="plain"' and 'quiet' sits there above the answer. The chat says the turn once it settles, from the content alone, so the work is never read aloud as part of the answer. */
|
|
20758
20763
|
"helix-headless-chat-message": DefineCustomElement<
|
|
20759
20764
|
HelixHeadlessChatMessage,
|
|
20760
20765
|
HelixHeadlessChatMessageVueProps,
|
|
@@ -21036,7 +21041,7 @@ export interface WcToolkitVueGlobalComponents {
|
|
|
21036
21041
|
HelixHeadlessLogLineVueProps,
|
|
21037
21042
|
HelixHeadlessLogLineVueEvents
|
|
21038
21043
|
>;
|
|
21039
|
-
/** A log holds lines in the order they were written and keeps the reader at the newest one, until they scroll up to read. It stays where they left it while lines keep arriving, and a button returns them to the end ('resume-label', "Jump to latest"). **Lines arrive two ways.** For a log you serve whole, write 'Log.Line' elements as children, inside 'Log.Group' elements for the steps. For a log that is still being written, hand it text: 'write(chunk)' takes text as it arrives, in pieces that need not end at a line break, and 'source' takes a 'ReadableStream' or an async iterable and reads it to the end. 'lines' takes the lines as data. Text drawn from data is drawn one window at a time, so a log of a hundred thousand lines holds a screenful of elements, and the log needs a block size of its own. Do not use both ways at once. **Written text is read the way a terminal shows it.** A carriage return starts the line over, so a progress bar stays one line, and the line still being written is shown as it stands. ANSI colors and weights are drawn, in the sixteen colors the styled tier takes from your theme, and every other escape code is dropped. **Read a CI log's own markers with 'format'.** 'github-actions' reads the workflow commands a step writes, '::group::' and '::error::' among them, and the times at the start of a downloaded log. 'vercel' reads a Vercel build log's phases and its warnings. Each step opens as it starts, folds once it passes, stays open where it failed, and is timed from its lines. For any other log, give 'parse' a function that reads each finished line: it returns a level, a group, or 'open' and 'close' to start and end a step. **Steps fold.** Lines that name a group in 'groups' stand under its heading, which shows its status and how long it took and opens and closes the lines. A group a reader opens or closes fires 'helix-expand' with every open group. **Search with 'query'.** The log shows only the lines that hold it, marks each match, opens the groups that hold one, and says how many lines match. 'line-numbers' numbers the lines from the first ever written, so a number still names its line once 'limit' has let older lines go, and 'line-href' makes each number a link, such as '#L{n}'. 'scrollToLine(n)' takes a reader to one. 'timestamps' shows each line's 'at', on the clock or as the time into the run. 'mark-lines' marks lines, such as '12, 40-44'. **'selectable' lets a reader select lines**, as a code host does: pressing a number selects its line, and pressing another with Shift selects every line between them. 'selected-lines' holds the selection, such as '12-20', and 'helix-select' asks before it changes. With a 'line-href' that is a fragment, the address follows the selection, '#L12' or '#L12-L20', and a page opened at one selects it and scrolls to it. **The numbers are one tab stop.** Where they are links or buttons, Tab reaches the one a reader last used, or the first selected, and the arrow keys move between them, with Home and End for the first and the last. With Shift on a 'selectable' log, the selection follows. **What a screen reader hears.** The log is a 'log' and stays quiet as lines arrive, since reading a build aloud line by line helps nobody. A separate status region says each line at 'error' once it arrives, each step once it finishes or fails, and the end of the run once 'done' is set or 'source' ends. Set 'done' yourself when output you 'write' is complete. The log scrolls on this tier. It carries 'data-scroller', so following the newest line and drawing a window work with no stylesheet. Give the log a block size, such as 'helix-headless-log::part(log) { block-size: 20rem }'. '''js import '@fusion.dev/helix/log' ''' */
|
|
21044
|
+
/** A log holds lines in the order they were written and keeps the reader at the newest one, until they scroll up to read. It stays where they left it while lines keep arriving, and a button returns them to the end ('resume-label', "Jump to latest"). **Lines arrive two ways.** For a log you serve whole, write 'Log.Line' elements as children, inside 'Log.Group' elements for the steps. For a log that is still being written, hand it text: 'write(chunk)' takes text as it arrives, in pieces that need not end at a line break, and 'source' takes a 'ReadableStream' or an async iterable and reads it to the end. 'lines' takes the lines as data. Text drawn from data is drawn one window at a time, so a log of a hundred thousand lines holds a screenful of elements, and the log needs a block size of its own. Do not use both ways at once. **Written text is read the way a terminal shows it.** A carriage return starts the line over, so a progress bar stays one line, and the line still being written is shown as it stands. ANSI colors and weights are drawn, in the sixteen colors the styled tier takes from your theme, and every other escape code is dropped. **Read a CI log's own markers with 'format'.** 'github-actions' reads the workflow commands a step writes, '::group::' and '::error::' among them, and the times at the start of a downloaded log. 'vercel' reads a Vercel build log's phases and its warnings. Each step opens as it starts, folds once it passes, stays open where it failed, and is timed from its lines. For any other log, give 'parse' a function that reads each finished line: it returns a level, a group, or 'open' and 'close' to start and end a step. **Steps fold.** Lines that name a group in 'groups' stand under its heading, which shows its status and how long it took and opens and closes the lines. A group a reader opens or closes fires 'helix-expand' with every open group. **Search with 'query'.** The log shows only the lines that hold it, marks each match, opens the groups that hold one, and says how many lines match. 'line-numbers' numbers the lines from the first ever written, so a number still names its line once 'limit' has let older lines go, and 'line-href' makes each number a link, such as '#L{n}'. 'scrollToLine(n)' takes a reader to one. 'timestamps' shows each line's 'at', on the clock or as the time into the run. 'mark-lines' marks lines, such as '12, 40-44'. **'selectable' lets a reader select lines**, as a code host does: pressing a number selects its line, and pressing another with Shift selects every line between them. 'selected-lines' holds the selection, such as '12-20', and 'helix-select' asks before it changes. With a 'line-href' that is a fragment, the address follows the selection, '#L12' or '#L12-L20', and a page opened at one selects it and scrolls to it. **The numbers are one tab stop.** Where they are links or buttons, Tab reaches the one a reader last used, or the first selected, and the arrow keys move between them, with Home and End for the first and the last. With Shift on a 'selectable' log, the selection follows. **What a screen reader hears.** The log is a 'log' and stays quiet as lines arrive, since reading a build aloud line by line helps nobody. A separate status region says each line at 'error' once it arrives, each step once it finishes or fails, and the end of the run once 'done' is set or 'source' ends. Set 'done' yourself when output you 'write' is complete. Set 'quiet' where something around the log speaks for it, as a chat turn does for an agent's work. The log scrolls on this tier. It carries 'data-scroller', so following the newest line and drawing a window work with no stylesheet. Give the log a block size, such as 'helix-headless-log::part(log) { block-size: 20rem }'. '''js import '@fusion.dev/helix/log' ''' */
|
|
21040
21045
|
"helix-headless-log": DefineCustomElement<
|
|
21041
21046
|
HelixHeadlessLog,
|
|
21042
21047
|
HelixHeadlessLogVueProps,
|