@epam/ai-dial-conversation-stages 1.1.0-dev.45 → 1.1.0-dev.456
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/components/CollapsedGroup/CollapsedGroup.d.ts +1 -7
- package/components/CollapsedGroup/CollapsedGroup.d.ts.map +1 -1
- package/components/StageIcon/StageIcon.d.ts +1 -15
- package/components/StageIcon/StageIcon.d.ts.map +1 -1
- package/components/StageItem/StageItem.d.ts +2 -12
- package/components/StageItem/StageItem.d.ts.map +1 -1
- package/components/StageMarkdownContent/StageCodeBlock.d.ts +2 -0
- package/components/StageMarkdownContent/StageCodeBlock.d.ts.map +1 -1
- package/components/StagesPanel/StagesPanel.d.ts +1 -5
- package/components/StagesPanel/StagesPanel.d.ts.map +1 -1
- package/index.css +1 -1
- package/index.js +325 -252
- package/models/collapsed-group.d.ts +14 -17
- package/models/collapsed-group.d.ts.map +1 -1
- package/models/stage-grouping.d.ts +6 -14
- package/models/stage-grouping.d.ts.map +1 -1
- package/models/stages-props.d.ts +40 -28
- package/models/stages-props.d.ts.map +1 -1
- package/package.json +3 -3
- package/utils/stage-grouping.d.ts +1 -7
- package/utils/stage-grouping.d.ts.map +1 -1
- package/utils/stage-name.d.ts +7 -14
- package/utils/stage-name.d.ts.map +1 -1
- package/utils/stage-progress.d.ts +1 -7
- package/utils/stage-progress.d.ts.map +1 -1
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
2
|
import { CollapsedGroupProps } from '../../models/collapsed-group';
|
|
3
|
-
/**
|
|
4
|
-
* Wraps `StagesPanel` with a single summary line whose text and default
|
|
5
|
-
* open/closed state track the run: expanded with a live progress line while
|
|
6
|
-
* streaming, then collapsed to one line — finished or failed — the moment
|
|
7
|
-
* it ends. A lone stage skips the summary line entirely and renders
|
|
8
|
-
* directly; an empty list renders nothing.
|
|
9
|
-
*/
|
|
3
|
+
/** Wraps `StagesPanel` with a collapsible summary line that tracks run state: live progress while streaming, one-line summary once finished. */
|
|
10
4
|
export declare const CollapsedGroup: FC<CollapsedGroupProps>;
|
|
11
5
|
//# sourceMappingURL=CollapsedGroup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CollapsedGroup.d.ts","sourceRoot":"","sources":["../../../src/components/CollapsedGroup/CollapsedGroup.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CollapsedGroup.d.ts","sourceRoot":"","sources":["../../../src/components/CollapsedGroup/CollapsedGroup.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,EAAE,EAA+B,MAAM,OAAO,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAUxE,gJAAgJ;AAChJ,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CA8OlD,CAAC"}
|
|
@@ -11,20 +11,6 @@ export interface StageIconProps {
|
|
|
11
11
|
/** Accessible label announced (visually hidden) alongside a failed stage's icon. Defaults to `'Failed'`. */
|
|
12
12
|
failedLabel?: string;
|
|
13
13
|
}
|
|
14
|
-
/**
|
|
15
|
-
* The row's single icon slot, filled by priority: exception (failed, or
|
|
16
|
-
* running via a spinner) always wins; everything else — completed, or a
|
|
17
|
-
* settled-but-unresolved stage from an aborted stream — falls back to one
|
|
18
|
-
* uniform check glyph, the same `IconCheck` glyph and size as the
|
|
19
|
-
* `CollapsedGroup` summary's own "Executed N steps" check, but in a quiet
|
|
20
|
-
* grey ink rather than the summary's success color — the summary is the one
|
|
21
|
-
* place that should read as a vivid confirmation, not every row. There is
|
|
22
|
-
* no separate "pending" glyph: the quiet tier is intentionally a single
|
|
23
|
-
* glyph, not a per-state icon set.
|
|
24
|
-
*
|
|
25
|
-
* The icon itself is `aria-hidden` (decorative) — status is also carried by
|
|
26
|
-
* text: failed stages get a visually-hidden label here, and their row name
|
|
27
|
-
* gets the warning ink color at the call site.
|
|
28
|
-
*/
|
|
14
|
+
/** Renders the icon for a stage, based on its status and whether it's currently executing. */
|
|
29
15
|
export declare const StageIcon: FC<StageIconProps>;
|
|
30
16
|
//# sourceMappingURL=StageIcon.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StageIcon.d.ts","sourceRoot":"","sources":["../../../src/components/StageIcon/StageIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"StageIcon.d.ts","sourceRoot":"","sources":["../../../src/components/StageIcon/StageIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAOxD,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAG3B,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,kEAAkE;IAClE,MAAM,EAAE,OAAO,CAAC;IAChB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4GAA4G;IAC5G,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,8FAA8F;AAC9F,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAgCxC,CAAC"}
|
|
@@ -11,19 +11,9 @@ export interface StageItemProps {
|
|
|
11
11
|
typography?: StageTypography;
|
|
12
12
|
/** User-visible strings. */
|
|
13
13
|
labels?: StagesPanelLabels;
|
|
14
|
-
/**
|
|
15
|
-
* Overrides the displayed name without affecting duration extraction —
|
|
16
|
-
* used to relabel an individual attempt (e.g. `'Attempt 2'`) inside a
|
|
17
|
-
* collapsed `×N` group while still reading that attempt's own duration
|
|
18
|
-
* from its real `stage.name`.
|
|
19
|
-
*/
|
|
14
|
+
/** Overrides the displayed name; used to relabel individual attempts (e.g. `'Attempt 2'`) inside a `×N` group. */
|
|
20
15
|
nameOverride?: string;
|
|
21
16
|
}
|
|
22
|
-
/**
|
|
23
|
-
* A single flat stage row: icon · name · tag? · duration? · chevron? — every
|
|
24
|
-
* element but the icon and name is optional and renders only when the data
|
|
25
|
-
* exists. Plain when the stage has no expandable content or attachments;
|
|
26
|
-
* becomes a disclosure button when it does.
|
|
27
|
-
*/
|
|
17
|
+
/** Renders a single stage row, optionally expandable to show its content. */
|
|
28
18
|
export declare const StageItem: FC<StageItemProps>;
|
|
29
19
|
//# sourceMappingURL=StageItem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StageItem.d.ts","sourceRoot":"","sources":["../../../src/components/StageItem/StageItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"StageItem.d.ts","sourceRoot":"","sources":["../../../src/components/StageItem/StageItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAQvD,OAAO,EAAE,EAAE,EAAY,MAAM,OAAO,CAAC;AACrC,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EAChB,MAAM,2BAA2B,CAAC;AAMnC,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,kEAAkE;IAClE,MAAM,EAAE,OAAO,CAAC;IAChB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,kHAAkH;IAClH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,6EAA6E;AAC7E,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CA+HxC,CAAC"}
|
|
@@ -4,6 +4,8 @@ interface Props {
|
|
|
4
4
|
children: ReactNode;
|
|
5
5
|
/** Language class from react-markdown (e.g. `language-json`). */
|
|
6
6
|
codeClassName?: string;
|
|
7
|
+
/** Typography class applied to the `<pre>` block. Defaults to `'dial-code-text'`. */
|
|
8
|
+
blockClassName?: string;
|
|
7
9
|
/** Accessible label for the copy button. */
|
|
8
10
|
copyAriaLabel: string;
|
|
9
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StageCodeBlock.d.ts","sourceRoot":"","sources":["../../../src/components/StageMarkdownContent/StageCodeBlock.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StageCodeBlock.d.ts","sourceRoot":"","sources":["../../../src/components/StageMarkdownContent/StageCodeBlock.tsx"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,EAAE,EACP,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAGf,UAAU,KAAK;IACb,6BAA6B;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,mEAAmE;AACnE,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,KAAK,CA4DpC,CAAC"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
2
|
import { StagesPanelProps } from '../../models/stages-props';
|
|
3
|
-
/**
|
|
4
|
-
* Displays an agent's accumulated stages as a flat, inline list of rows — no
|
|
5
|
-
* card, border, or panel around it. Repeated identical stage names collapse
|
|
6
|
-
* into one `×N` row that expands to the individual attempts.
|
|
7
|
-
*/
|
|
3
|
+
/** Flat inline list of agent stages; repeated identical names collapse into a ×N group row. */
|
|
8
4
|
export declare const StagesPanel: FC<StagesPanelProps>;
|
|
9
5
|
//# sourceMappingURL=StagesPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StagesPanel.d.ts","sourceRoot":"","sources":["../../../src/components/StagesPanel/StagesPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StagesPanel.d.ts","sourceRoot":"","sources":["../../../src/components/StagesPanel/StagesPanel.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,EAAE,EAAY,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAEV,gBAAgB,EAEjB,MAAM,2BAA2B,CAAC;AA6InC,+FAA+F;AAC/F,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CA+D5C,CAAC"}
|
package/index.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.
|
|
1
|
+
._panel_vd48n_1{color:var(--cs-text,var(--text-primary,#161b2d))}._row_vd48n_5:hover{background:var(--cs-row-hover,var(--bg-layer-sunken,#eef1f7))}._collapseButton_vd48n_9{background:var(--cs-button-bg,transparent)}._stageName_vd48n_13{color:var(--cs-stage-text,var(--text-secondary,#57647a))}._stageNameFailed_vd48n_17{color:var(--cs-failed-text,var(--text-warning,#7f6300))}._monoName_vd48n_21{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}._tag_vd48n_25{color:var(--cs-tag-text,var(--text-tertiary,#848e9c))}._count_vd48n_29{color:var(--cs-count-text,var(--text-tertiary,#848e9c));font-variant-numeric:tabular-nums}._duration_vd48n_34{color:var(--cs-duration-text,var(--text-tertiary,#848e9c));font-variant-numeric:tabular-nums}._iconSecondary_vd48n_39{color:var(--cs-icon-secondary,var(--text-secondary,#57647a));opacity:.7}._iconCompleted_vd48n_44{color:var(--cs-icon-completed,var(--text-tertiary,#848e9c))}._iconError_vd48n_48{color:var(--cs-icon-error,var(--text-warning,#7f6300))}._stageContent_vd48n_52{color:var(--cs-stage-text,var(--text-secondary,#57647a))}._codeBlock_vd48n_56{background:var(--cs-code-bg,var(--bg-layer-raised,#fcfcfc));border-color:var(--cs-code-border,var(--stroke-secondary,#d1dbea));color:var(--cs-code-text,var(--text-primary,#161b2d))}._codeInline_vd48n_62{background:var(--cs-code-bg,var(--bg-layer-raised,#fcfcfc));border:1px solid var(--cs-code-border,var(--stroke-secondary,#d1dbea));color:var(--cs-code-text,var(--text-primary,#161b2d))}._blockquote_vd48n_68{border-color:var(--cs-stage-text,var(--text-secondary,#57647a));color:var(--cs-stage-text,var(--text-secondary,#57647a))}._tableCell_vd48n_73{border-color:var(--cs-border,var(--stroke-secondary,#d1dbea));color:var(--cs-stage-text,var(--text-secondary,#57647a))}._toggleButton_1sa5v_1{color:var(--cs-cg-label,var(--text-secondary,#57647a));text-align:start;width:100%;min-width:0;justify-content:flex-start!important}._toggleButton_1sa5v_1:hover{color:var(--cs-cg-label-hover,var(--text-primary,#161b2d))}._executedLabel_1sa5v_13{color:var(--cs-cg-label,var(--text-secondary,#57647a))}._stepsCount_1sa5v_17{color:var(--cs-cg-steps-count,var(--text-tertiary,#848e9c));font-variant-numeric:tabular-nums}._doneIcon_1sa5v_22{color:var(--cs-cg-done,var(--text-success,#007274))}._failedText_1sa5v_26{color:var(--cs-cg-failed,var(--text-warning,#7f6300))}._liveName_1sa5v_30{color:var(--cs-cg-label,var(--text-primary,#161b2d))}
|
|
2
2
|
/*$vite$:1*/
|
package/index.js
CHANGED
|
@@ -1,105 +1,137 @@
|
|
|
1
1
|
import { MarkdownRenderer as e, StageStatus as t, buildCssVars as n, copyToClipboard as r, mergeClasses as i } from "@epam/ai-dial-chat-shared";
|
|
2
|
-
import { DIAL_ICON_SIZE as a,
|
|
3
|
-
import { IconAlertCircle as
|
|
4
|
-
import { memo as
|
|
5
|
-
import { Fragment as
|
|
2
|
+
import { DIAL_ICON_SIZE as a, DIAL_KIT_ICON_STROKE as o, ElementSize as s, EllipsisTooltip as c, GhostIconButton as l, LinkButton as u, Spinner as d } from "@epam/ai-dial-ui-kit";
|
|
3
|
+
import { IconAlertCircle as f, IconCheck as p, IconChevronDown as m, IconChevronRight as h, IconCopy as g } from "@tabler/icons-react";
|
|
4
|
+
import { memo as _, useCallback as v, useEffect as y, useRef as b, useState as x } from "react";
|
|
5
|
+
import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
|
|
6
6
|
//#region src/utils/stage-name.ts
|
|
7
|
-
var
|
|
8
|
-
let t = e
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
var T = /[([][^()[\]]*[)\]]/g, E = /(\d+(?:\.\d+)?)\s*s\b/, D = /\bStart:\s*(\d{1,2}):([0-5]\d):([0-5]\d(?:\.\d+)?)\b/i, O = (e) => {
|
|
8
|
+
let t = e.trimEnd();
|
|
9
|
+
return t.endsWith(":") ? t.slice(0, -1) : t;
|
|
10
|
+
}, k = 1440 * 60, A = k / 2, j = (e) => {
|
|
11
|
+
let t = D.exec(e);
|
|
12
|
+
if (!t) return;
|
|
13
|
+
let n = Number(t[1]);
|
|
14
|
+
if (!(n > 23)) return n * 60 * 60 + Number(t[2]) * 60 + Number(t[3]);
|
|
15
|
+
}, M = (e) => {
|
|
16
|
+
T.lastIndex = 0;
|
|
17
|
+
let t;
|
|
18
|
+
for (; t = T.exec(e);) {
|
|
19
|
+
let e = t[0].slice(1, -1), n = E.exec(e);
|
|
20
|
+
if (n) return {
|
|
21
|
+
durationLabel: `${n[1]}s`,
|
|
22
|
+
groupIndex: t.index,
|
|
23
|
+
groupLength: t[0].length,
|
|
24
|
+
startTimeSeconds: j(e)
|
|
25
|
+
};
|
|
17
26
|
}
|
|
27
|
+
}, N = (e) => {
|
|
28
|
+
let t = e ?? "", n = M(t);
|
|
18
29
|
return {
|
|
19
|
-
name: (
|
|
20
|
-
durationLabel:
|
|
30
|
+
name: O(n ? t.slice(0, n.groupIndex) + t.slice(n.groupIndex + n.groupLength) : t).trim().replace(/ {2,}/g, " "),
|
|
31
|
+
durationLabel: n?.durationLabel
|
|
21
32
|
};
|
|
22
|
-
},
|
|
33
|
+
}, P = (e) => e.length > 0 && !/\s/.test(e) && e.includes("_"), F = (e) => e >= 60 ? `${Math.floor(e / 60)}m ${Math.round(e % 60)}s` : `${e.toFixed(1)}s`, I = (e) => {
|
|
23
34
|
if (!e) return;
|
|
24
35
|
let t = /^(\d+(?:\.\d+)?)s$/.exec(e);
|
|
25
36
|
return t ? parseFloat(t[1]) : void 0;
|
|
26
|
-
},
|
|
37
|
+
}, L = (e) => {
|
|
38
|
+
let t = e.flatMap((e) => {
|
|
39
|
+
let t = M(e ?? ""), n = I(t?.durationLabel);
|
|
40
|
+
return n == null ? [] : [{
|
|
41
|
+
durationSeconds: n,
|
|
42
|
+
startTimeSeconds: t?.startTimeSeconds
|
|
43
|
+
}];
|
|
44
|
+
});
|
|
45
|
+
if (t.length === 0) return 0;
|
|
46
|
+
if (t.some(({ startTimeSeconds: e }) => e == null)) return t.reduce((e, { durationSeconds: t }) => e + t, 0);
|
|
47
|
+
let n = 0, r, i = t.flatMap(({ durationSeconds: e, startTimeSeconds: t }) => {
|
|
48
|
+
if (t == null) return [];
|
|
49
|
+
let i = t + n;
|
|
50
|
+
return r != null && r - i > A && (n += k, i += k), r = i, {
|
|
51
|
+
start: i,
|
|
52
|
+
end: i + e
|
|
53
|
+
};
|
|
54
|
+
}).sort((e, t) => e.start - t.start), a = 0, o = i[0].start, s = i[0].end;
|
|
55
|
+
for (let e of i.slice(1)) e.start <= s ? s = Math.max(s, e.end) : (a += s - o, o = e.start, s = e.end);
|
|
56
|
+
return a + s - o;
|
|
57
|
+
}, R = (e) => [...e].reverse().find((e) => e.status == null), z = (e, t) => e.findIndex((e) => e.index === t.index) + 1, B = (e) => {
|
|
27
58
|
let t = [], n = 0;
|
|
28
59
|
for (; n < e.length;) {
|
|
29
|
-
let r = e[n], i =
|
|
30
|
-
for (; a < e.length &&
|
|
60
|
+
let r = e[n], i = N(r.name).name, a = n + 1;
|
|
61
|
+
for (; a < e.length && N(e[a].name).name === i;) a += 1;
|
|
31
62
|
let o = e.slice(n, a);
|
|
32
63
|
o.length > 1 ? t.push({
|
|
33
|
-
kind: "group",
|
|
34
64
|
key: r.index,
|
|
35
65
|
name: i,
|
|
36
66
|
attempts: o
|
|
37
67
|
}) : t.push({
|
|
38
|
-
kind: "single",
|
|
39
68
|
key: r.index,
|
|
40
69
|
stage: r
|
|
41
70
|
}), n = a;
|
|
42
71
|
}
|
|
43
72
|
return t;
|
|
44
|
-
},
|
|
45
|
-
panel: "
|
|
46
|
-
row: "
|
|
47
|
-
collapseButton: "
|
|
48
|
-
stageName: "
|
|
49
|
-
stageNameFailed: "
|
|
50
|
-
monoName: "
|
|
51
|
-
tag: "
|
|
52
|
-
count: "
|
|
53
|
-
duration: "
|
|
54
|
-
iconSecondary: "
|
|
55
|
-
iconCompleted: "
|
|
56
|
-
iconError: "
|
|
57
|
-
stageContent: "
|
|
58
|
-
codeBlock: "
|
|
59
|
-
codeInline: "
|
|
60
|
-
blockquote: "
|
|
61
|
-
tableCell: "
|
|
62
|
-
},
|
|
63
|
-
size: 16,
|
|
64
|
-
ariaLabel: r
|
|
65
|
-
}) : e === t.Failed ? /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S(d, {
|
|
73
|
+
}, V = {
|
|
74
|
+
panel: "_panel_vd48n_1",
|
|
75
|
+
row: "_row_vd48n_5",
|
|
76
|
+
collapseButton: "_collapseButton_vd48n_9",
|
|
77
|
+
stageName: "_stageName_vd48n_13",
|
|
78
|
+
stageNameFailed: "_stageNameFailed_vd48n_17",
|
|
79
|
+
monoName: "_monoName_vd48n_21",
|
|
80
|
+
tag: "_tag_vd48n_25",
|
|
81
|
+
count: "_count_vd48n_29",
|
|
82
|
+
duration: "_duration_vd48n_34",
|
|
83
|
+
iconSecondary: "_iconSecondary_vd48n_39",
|
|
84
|
+
iconCompleted: "_iconCompleted_vd48n_44",
|
|
85
|
+
iconError: "_iconError_vd48n_48",
|
|
86
|
+
stageContent: "_stageContent_vd48n_52",
|
|
87
|
+
codeBlock: "_codeBlock_vd48n_56",
|
|
88
|
+
codeInline: "_codeInline_vd48n_62",
|
|
89
|
+
blockquote: "_blockquote_vd48n_68",
|
|
90
|
+
tableCell: "_tableCell_vd48n_73"
|
|
91
|
+
}, H = ({ status: e, isLive: n, runningLabel: r = "Running", failedLabel: i = "Failed" }) => e === t.Failed ? /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(f, {
|
|
66
92
|
size: a.MD,
|
|
67
|
-
className:
|
|
68
|
-
"aria-hidden": !0
|
|
69
|
-
|
|
93
|
+
className: V.iconError,
|
|
94
|
+
"aria-hidden": !0,
|
|
95
|
+
stroke: o
|
|
96
|
+
}), /* @__PURE__ */ C("span", {
|
|
70
97
|
className: "sr-only",
|
|
71
98
|
children: i
|
|
72
|
-
})] }) : /* @__PURE__ */
|
|
99
|
+
})] }) : e === t.Completed ? /* @__PURE__ */ C(p, {
|
|
73
100
|
size: a.SM,
|
|
74
|
-
className:
|
|
75
|
-
"aria-hidden": !0
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
101
|
+
className: V.iconCompleted,
|
|
102
|
+
"aria-hidden": !0,
|
|
103
|
+
stroke: o
|
|
104
|
+
}) : n ? /* @__PURE__ */ C(d, {
|
|
105
|
+
size: 16,
|
|
106
|
+
ariaLabel: r
|
|
107
|
+
}) : null, U = ({ children: e, codeClassName: t, blockClassName: n = "dial-code-text", copyAriaLabel: c }) => {
|
|
108
|
+
let [u, d] = x(!1), f = b(null);
|
|
109
|
+
y(() => () => {
|
|
110
|
+
f.current != null && clearTimeout(f.current);
|
|
80
111
|
}, []);
|
|
81
|
-
let
|
|
82
|
-
r(typeof e == "string" ? e : String(e ?? "")),
|
|
112
|
+
let m = v(() => {
|
|
113
|
+
r(typeof e == "string" ? e : String(e ?? "")), f.current && clearTimeout(f.current), d(!0), f.current = setTimeout(() => d(!1), 2e3);
|
|
83
114
|
}, [e]);
|
|
84
|
-
return /* @__PURE__ */
|
|
85
|
-
className: i("relative max-h-[300px] overflow-auto rounded border p-3
|
|
86
|
-
children: [/* @__PURE__ */
|
|
87
|
-
size:
|
|
88
|
-
icon:
|
|
115
|
+
return /* @__PURE__ */ w("pre", {
|
|
116
|
+
className: i("relative max-h-[300px] overflow-auto rounded border p-3", n, V.codeBlock),
|
|
117
|
+
children: [/* @__PURE__ */ C(l, {
|
|
118
|
+
size: s.Small,
|
|
119
|
+
icon: C(u ? p : g, {
|
|
89
120
|
size: a.SM,
|
|
90
|
-
className:
|
|
121
|
+
className: V.iconSecondary,
|
|
122
|
+
stroke: o
|
|
91
123
|
}),
|
|
92
|
-
"aria-label":
|
|
93
|
-
onClick:
|
|
124
|
+
"aria-label": c,
|
|
125
|
+
onClick: m,
|
|
94
126
|
className: "absolute end-2 top-2"
|
|
95
|
-
}), /* @__PURE__ */
|
|
96
|
-
className:
|
|
127
|
+
}), /* @__PURE__ */ C("code", {
|
|
128
|
+
className: t,
|
|
97
129
|
children: e
|
|
98
130
|
})]
|
|
99
131
|
});
|
|
100
|
-
},
|
|
101
|
-
let a = "mb-1.5 last:mb-0", o = i(n?.headingClassName ?? "dial-small-semi-text",
|
|
102
|
-
return /* @__PURE__ */
|
|
132
|
+
}, W = _(({ content: t, typography: n, copyAriaLabel: r = "Copy" }) => {
|
|
133
|
+
let a = "mb-1.5 last:mb-0", o = i(n?.headingClassName ?? "dial-small-semi-text", V.stageContent, a);
|
|
134
|
+
return /* @__PURE__ */ C(e, {
|
|
103
135
|
content: t,
|
|
104
136
|
classNames: {
|
|
105
137
|
h1: o,
|
|
@@ -108,313 +140,354 @@ var w = /[([][^()[\]]*[)\]]/g, T = /(\d+(?:\.\d+)?)\s*s\b/, E = /:\s*$/, D = (e)
|
|
|
108
140
|
h4: o,
|
|
109
141
|
h5: o,
|
|
110
142
|
h6: o,
|
|
111
|
-
p: i(n?.contentClassName ?? "dial-tiny-text",
|
|
112
|
-
ul: i(n?.contentClassName ?? "dial-tiny-text",
|
|
113
|
-
ol: i(n?.contentClassName ?? "dial-tiny-text",
|
|
114
|
-
strong: i(n?.strongClassName ?? n?.contentClassName ?? "dial-tiny-text",
|
|
115
|
-
codeInline:
|
|
116
|
-
blockquote: i(n?.contentClassName ?? "dial-tiny-text",
|
|
117
|
-
link: i(n?.contentClassName ?? "dial-tiny-text",
|
|
118
|
-
tableCell: i(n?.contentClassName ?? "dial-tiny-text",
|
|
143
|
+
p: i(n?.contentClassName ?? "dial-tiny-text", V.stageContent, "mb-1.5"),
|
|
144
|
+
ul: i(n?.contentClassName ?? "dial-tiny-text", V.stageContent, a),
|
|
145
|
+
ol: i(n?.contentClassName ?? "dial-tiny-text", V.stageContent, a),
|
|
146
|
+
strong: i(n?.strongClassName ?? n?.contentClassName ?? "dial-tiny-text", V.stageContent),
|
|
147
|
+
codeInline: V.codeInline,
|
|
148
|
+
blockquote: i(n?.contentClassName ?? "dial-tiny-text", V.blockquote, a),
|
|
149
|
+
link: i(n?.contentClassName ?? "dial-tiny-text", V.stageContent),
|
|
150
|
+
tableCell: i(n?.contentClassName ?? "dial-tiny-text", V.tableCell)
|
|
119
151
|
},
|
|
120
|
-
components: { code: ({ children: e, className: t }) => t?.includes("language-") ? /* @__PURE__ */
|
|
152
|
+
components: { code: ({ children: e, className: t }) => t?.includes("language-") ? /* @__PURE__ */ C(U, {
|
|
121
153
|
codeClassName: t,
|
|
154
|
+
blockClassName: n?.codeBlockClassName,
|
|
122
155
|
copyAriaLabel: r,
|
|
123
156
|
children: e
|
|
124
|
-
}) : /* @__PURE__ */
|
|
125
|
-
className: i("inline-block px-1.5 py-1", n?.codeClassName ?? "dial-
|
|
157
|
+
}) : /* @__PURE__ */ C("code", {
|
|
158
|
+
className: i("inline-block px-1.5 py-1", n?.codeClassName ?? "dial-code-text rounded-md", V.codeInline),
|
|
126
159
|
children: e
|
|
127
160
|
}) }
|
|
128
161
|
});
|
|
129
|
-
}),
|
|
130
|
-
let [
|
|
131
|
-
/* @__PURE__ */
|
|
162
|
+
}), G = ({ stage: e, isLive: n, typography: r, labels: s, nameOverride: l }) => {
|
|
163
|
+
let [u, d] = x(!1), { copyAriaLabel: f = "Copy stage content", runningAriaLabel: p, failedAriaLabel: g } = s ?? {}, { name: _, durationLabel: v } = N(e.name), y = l ?? _, b = !l && P(_), T = e.status === t.Failed, E = !!e.content, D = /* @__PURE__ */ w(S, { children: [
|
|
164
|
+
/* @__PURE__ */ C("span", {
|
|
132
165
|
className: "flex flex-none items-center",
|
|
133
|
-
children: /* @__PURE__ */
|
|
166
|
+
children: /* @__PURE__ */ C(H, {
|
|
134
167
|
status: e.status,
|
|
135
168
|
isLive: n,
|
|
136
|
-
runningLabel:
|
|
137
|
-
failedLabel:
|
|
169
|
+
runningLabel: p,
|
|
170
|
+
failedLabel: g
|
|
138
171
|
})
|
|
139
172
|
}),
|
|
140
|
-
/* @__PURE__ */
|
|
141
|
-
className: i("min-w-0 max-w-[22rem] truncate", r?.fontClassName ?? "dial-small-text",
|
|
142
|
-
children: /* @__PURE__ */
|
|
173
|
+
/* @__PURE__ */ C("span", {
|
|
174
|
+
className: i("min-w-0 max-w-[22rem] truncate", r?.fontClassName ?? "dial-small-text", V.stageName, T && V.stageNameFailed, b && V.monoName),
|
|
175
|
+
children: /* @__PURE__ */ C(c, { text: y || e.status || "" })
|
|
143
176
|
}),
|
|
144
|
-
e.tag && /* @__PURE__ */
|
|
145
|
-
className: i("flex-none", r?.
|
|
177
|
+
e.tag && /* @__PURE__ */ C("span", {
|
|
178
|
+
className: i("flex-none", r?.tagClassName ?? "dial-tiny-lead-text", V.tag),
|
|
146
179
|
children: e.tag
|
|
147
180
|
}),
|
|
148
|
-
|
|
149
|
-
className: i("flex-none", r?.countFontClassName ?? "dial-tiny-text",
|
|
150
|
-
children:
|
|
181
|
+
v && /* @__PURE__ */ C("span", {
|
|
182
|
+
className: i("flex-none", r?.countFontClassName ?? "dial-tiny-text", V.duration),
|
|
183
|
+
children: v
|
|
151
184
|
}),
|
|
152
|
-
|
|
153
|
-
className: i("flex-none",
|
|
154
|
-
children:
|
|
185
|
+
E && /* @__PURE__ */ C("span", {
|
|
186
|
+
className: i("flex-none", V.iconSecondary),
|
|
187
|
+
children: u ? /* @__PURE__ */ C(m, {
|
|
155
188
|
size: a.SM,
|
|
156
|
-
"aria-hidden": !0
|
|
157
|
-
|
|
189
|
+
"aria-hidden": !0,
|
|
190
|
+
stroke: o
|
|
191
|
+
}) : /* @__PURE__ */ C(h, {
|
|
158
192
|
size: a.SM,
|
|
159
193
|
className: "rtl:scale-x-[-1]",
|
|
160
|
-
"aria-hidden": !0
|
|
194
|
+
"aria-hidden": !0,
|
|
195
|
+
stroke: o
|
|
161
196
|
})
|
|
162
197
|
})
|
|
163
|
-
] }),
|
|
164
|
-
return
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
198
|
+
] }), O = i("flex w-full items-center gap-2 px-2 py-1.5", V.row);
|
|
199
|
+
return E ? /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("div", {
|
|
200
|
+
className: O,
|
|
201
|
+
children: /* @__PURE__ */ C("button", {
|
|
202
|
+
type: "button",
|
|
203
|
+
onClick: () => d((e) => !e),
|
|
204
|
+
"aria-expanded": u,
|
|
205
|
+
className: "flex min-w-0 flex-1 cursor-pointer items-center gap-2 text-start",
|
|
206
|
+
children: D
|
|
207
|
+
})
|
|
208
|
+
}), /* @__PURE__ */ C("div", {
|
|
209
|
+
className: i("grid overflow-hidden transition-[grid-template-rows] duration-[250ms] ease-in-out", u ? "grid-rows-[1fr]" : "grid-rows-[0fr]"),
|
|
210
|
+
children: /* @__PURE__ */ C("div", {
|
|
173
211
|
className: "overflow-hidden",
|
|
174
|
-
children: /* @__PURE__ */
|
|
212
|
+
children: /* @__PURE__ */ C("div", {
|
|
175
213
|
className: "mt-2 flex flex-col gap-3 py-1 ps-8",
|
|
176
|
-
children: e.content && /* @__PURE__ */
|
|
214
|
+
children: e.content && /* @__PURE__ */ C("div", {
|
|
177
215
|
className: "max-h-[300px] overflow-y-auto",
|
|
178
|
-
children: /* @__PURE__ */
|
|
216
|
+
children: /* @__PURE__ */ C(W, {
|
|
179
217
|
content: e.content,
|
|
180
218
|
typography: r,
|
|
181
|
-
copyAriaLabel:
|
|
219
|
+
copyAriaLabel: f
|
|
182
220
|
})
|
|
183
221
|
})
|
|
184
222
|
})
|
|
185
223
|
})
|
|
186
|
-
})] }) : /* @__PURE__ */
|
|
187
|
-
className:
|
|
188
|
-
children:
|
|
224
|
+
})] }) : /* @__PURE__ */ C("div", {
|
|
225
|
+
className: O,
|
|
226
|
+
children: D
|
|
189
227
|
});
|
|
190
|
-
},
|
|
191
|
-
let { runningAriaLabel:
|
|
192
|
-
|
|
193
|
-
return e + (A(n) ?? 0);
|
|
194
|
-
}, 0), _ = g > 0 ? k(g) : void 0;
|
|
195
|
-
return /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ C("button", {
|
|
228
|
+
}, K = ({ row: e, isLive: n, typography: r, labels: s }) => {
|
|
229
|
+
let { runningAriaLabel: l, failedAriaLabel: u, attemptLabel: d = (e) => `Attempt ${e}` } = s ?? {}, [f, p] = x(!1), g = e.attempts?.some((e) => e.status == null) ?? !1, _ = e.attempts?.some((e) => e.status === t.Failed), v = g ? null : _ ? t.Failed : t.Completed, y = L((e.attempts || []).map((e) => e.name)), b = y > 0 ? F(y) : void 0;
|
|
230
|
+
return /* @__PURE__ */ w("div", { children: [/* @__PURE__ */ w("button", {
|
|
196
231
|
type: "button",
|
|
197
|
-
onClick: () =>
|
|
198
|
-
"aria-expanded":
|
|
199
|
-
className: i("flex w-full items-center gap-2 px-2 py-1.5 text-start",
|
|
232
|
+
onClick: () => p((e) => !e),
|
|
233
|
+
"aria-expanded": f,
|
|
234
|
+
className: i("flex w-full items-center gap-2 rounded-lg px-2 py-1.5 text-start", V.collapseButton, V.row),
|
|
200
235
|
children: [
|
|
201
|
-
/* @__PURE__ */
|
|
236
|
+
/* @__PURE__ */ C("span", {
|
|
202
237
|
className: "flex flex-none items-center",
|
|
203
|
-
children: /* @__PURE__ */
|
|
204
|
-
status:
|
|
238
|
+
children: /* @__PURE__ */ C(H, {
|
|
239
|
+
status: v,
|
|
205
240
|
isLive: n,
|
|
206
|
-
runningLabel:
|
|
207
|
-
failedLabel:
|
|
241
|
+
runningLabel: l,
|
|
242
|
+
failedLabel: u
|
|
208
243
|
})
|
|
209
244
|
}),
|
|
210
|
-
/* @__PURE__ */ S("span", {
|
|
211
|
-
className: i("min-w-0 max-w-[22rem] truncate", r?.fontClassName ?? "dial-small-text", P.stageName, h && P.stageNameFailed),
|
|
212
|
-
children: /* @__PURE__ */ S(o, { text: e.name })
|
|
213
|
-
}),
|
|
214
245
|
/* @__PURE__ */ C("span", {
|
|
215
|
-
className: i("
|
|
216
|
-
children:
|
|
246
|
+
className: i("min-w-0 max-w-[22rem] truncate", r?.fontClassName ?? "dial-small-text", V.stageName, _ && V.stageNameFailed),
|
|
247
|
+
children: /* @__PURE__ */ C(c, { text: e.name })
|
|
248
|
+
}),
|
|
249
|
+
/* @__PURE__ */ w("span", {
|
|
250
|
+
className: i("flex-none", r?.countFontClassName ?? "dial-tiny-text", V.count),
|
|
251
|
+
children: ["×", e.attempts?.length ?? 0]
|
|
217
252
|
}),
|
|
218
|
-
|
|
219
|
-
className: i("flex-none", r?.countFontClassName ?? "dial-tiny-text",
|
|
220
|
-
children:
|
|
253
|
+
b && /* @__PURE__ */ C("span", {
|
|
254
|
+
className: i("flex-none", r?.countFontClassName ?? "dial-tiny-text", V.duration),
|
|
255
|
+
children: b
|
|
221
256
|
}),
|
|
222
|
-
/* @__PURE__ */
|
|
223
|
-
className: i("flex-none",
|
|
224
|
-
children:
|
|
257
|
+
/* @__PURE__ */ C("span", {
|
|
258
|
+
className: i("flex-none", V.iconSecondary),
|
|
259
|
+
children: f ? /* @__PURE__ */ C(m, {
|
|
225
260
|
size: a.SM,
|
|
226
|
-
"aria-hidden": !0
|
|
227
|
-
|
|
261
|
+
"aria-hidden": !0,
|
|
262
|
+
stroke: o
|
|
263
|
+
}) : /* @__PURE__ */ C(h, {
|
|
228
264
|
size: a.SM,
|
|
229
265
|
className: "rtl:scale-x-[-1]",
|
|
230
|
-
"aria-hidden": !0
|
|
266
|
+
"aria-hidden": !0,
|
|
267
|
+
stroke: o
|
|
231
268
|
})
|
|
232
269
|
})
|
|
233
270
|
]
|
|
234
|
-
}), /* @__PURE__ */
|
|
235
|
-
className: i("grid overflow-hidden transition-[grid-template-rows] duration-[250ms] ease-in-out",
|
|
236
|
-
children: /* @__PURE__ */
|
|
271
|
+
}), /* @__PURE__ */ C("div", {
|
|
272
|
+
className: i("grid overflow-hidden transition-[grid-template-rows] duration-[250ms] ease-in-out", f ? "grid-rows-[1fr]" : "grid-rows-[0fr]"),
|
|
273
|
+
children: /* @__PURE__ */ C("div", {
|
|
237
274
|
className: "overflow-hidden",
|
|
238
|
-
children: /* @__PURE__ */
|
|
275
|
+
children: /* @__PURE__ */ C("ul", {
|
|
239
276
|
role: "list",
|
|
240
277
|
className: "mt-1 flex flex-col gap-0.5 ps-6",
|
|
241
|
-
children: e.attempts
|
|
278
|
+
children: e.attempts?.map((e, t) => /* @__PURE__ */ C("li", {
|
|
242
279
|
role: "listitem",
|
|
243
|
-
children: /* @__PURE__ */
|
|
244
|
-
stage:
|
|
245
|
-
nameOverride:
|
|
246
|
-
isLive: n &&
|
|
280
|
+
children: /* @__PURE__ */ C(G, {
|
|
281
|
+
stage: e,
|
|
282
|
+
nameOverride: d(t + 1),
|
|
283
|
+
isLive: n && e.status == null,
|
|
247
284
|
typography: r,
|
|
248
285
|
labels: s
|
|
249
286
|
})
|
|
250
|
-
},
|
|
287
|
+
}, e.index))
|
|
251
288
|
})
|
|
252
289
|
})
|
|
253
290
|
})] });
|
|
254
|
-
},
|
|
291
|
+
}, q = ({ stages: e, isStreaming: t, className: r, styles: a, labels: o }) => {
|
|
255
292
|
let { colors: s, typography: c } = a ?? {}, l = n({
|
|
256
293
|
"--cs-text": s?.text,
|
|
257
294
|
"--cs-row-hover": s?.rowHoverColor,
|
|
295
|
+
"--cs-button-bg": s?.collapsedButtonBg,
|
|
258
296
|
"--cs-stage-text": s?.stageTextColor,
|
|
259
|
-
"--cs-failed-text": s?.failedColor
|
|
260
|
-
|
|
261
|
-
|
|
297
|
+
"--cs-failed-text": s?.failedColor,
|
|
298
|
+
"--cs-tag-text": s?.tagTextColor,
|
|
299
|
+
"--cs-count-text": s?.countTextColor,
|
|
300
|
+
"--cs-duration-text": s?.durationTextColor,
|
|
301
|
+
"--cs-icon-secondary": s?.iconSecondaryColor,
|
|
302
|
+
"--cs-icon-completed": s?.iconCompletedColor,
|
|
303
|
+
"--cs-icon-error": s?.iconErrorColor,
|
|
304
|
+
"--cs-code-bg": s?.codeBg,
|
|
305
|
+
"--cs-code-border": s?.codeBorderColor,
|
|
306
|
+
"--cs-code-text": s?.codeTextColor,
|
|
307
|
+
"--cs-border": s?.borderColor
|
|
308
|
+
}), u = B(e);
|
|
309
|
+
return /* @__PURE__ */ C("div", {
|
|
262
310
|
style: l,
|
|
263
|
-
className: i("w-full",
|
|
264
|
-
children: /* @__PURE__ */
|
|
311
|
+
className: i("w-full", V.panel, r),
|
|
312
|
+
children: /* @__PURE__ */ C("ul", {
|
|
265
313
|
role: "list",
|
|
266
314
|
className: "flex w-full flex-col gap-0.5 ps-5",
|
|
267
|
-
children:
|
|
315
|
+
children: u.map((e) => e.stage ? /* @__PURE__ */ C("li", {
|
|
268
316
|
role: "listitem",
|
|
269
|
-
children: /* @__PURE__ */
|
|
317
|
+
children: /* @__PURE__ */ C(G, {
|
|
270
318
|
stage: e.stage,
|
|
271
|
-
isLive:
|
|
319
|
+
isLive: t && e.stage.status == null,
|
|
272
320
|
typography: c,
|
|
273
321
|
labels: o
|
|
274
322
|
})
|
|
275
|
-
}, e.key) : /* @__PURE__ */
|
|
323
|
+
}, e.key) : /* @__PURE__ */ C("li", {
|
|
276
324
|
role: "listitem",
|
|
277
|
-
children: /* @__PURE__ */
|
|
325
|
+
children: /* @__PURE__ */ C(K, {
|
|
278
326
|
row: e,
|
|
279
|
-
isLive:
|
|
327
|
+
isLive: t && (e.attempts?.some((e) => e.status == null) ?? !1),
|
|
280
328
|
typography: c,
|
|
281
329
|
labels: o
|
|
282
330
|
})
|
|
283
331
|
}, e.key))
|
|
284
332
|
})
|
|
285
333
|
});
|
|
286
|
-
},
|
|
287
|
-
toggleButton: "
|
|
288
|
-
executedLabel: "
|
|
289
|
-
stepsCount: "
|
|
290
|
-
doneIcon: "
|
|
291
|
-
failedText: "
|
|
292
|
-
liveName: "
|
|
293
|
-
},
|
|
294
|
-
let { executedLabel:
|
|
295
|
-
|
|
296
|
-
|
|
334
|
+
}, J = {
|
|
335
|
+
toggleButton: "_toggleButton_1sa5v_1",
|
|
336
|
+
executedLabel: "_executedLabel_1sa5v_13",
|
|
337
|
+
stepsCount: "_stepsCount_1sa5v_17",
|
|
338
|
+
doneIcon: "_doneIcon_1sa5v_22",
|
|
339
|
+
failedText: "_failedText_1sa5v_26",
|
|
340
|
+
liveName: "_liveName_1sa5v_30"
|
|
341
|
+
}, Y = ({ stages: e, isStreaming: r, labels: s, className: l, styles: f }) => {
|
|
342
|
+
let { executedLabel: g = "Executed", stepsLabel: _ = () => "steps", failedCountLabel: v = (e) => `${e} failed`, runningStepLabel: S = (e, t) => `Step ${e} of ${t}`, runningAriaLabel: T = "Running", copyAriaLabel: E, failedAriaLabel: D, attemptLabel: O } = s ?? {}, [k, A] = x(r), j = b(r);
|
|
343
|
+
y(() => {
|
|
344
|
+
j.current && !r && A(!1), j.current = r;
|
|
297
345
|
}, [r]);
|
|
298
|
-
let { colors:
|
|
299
|
-
"--cs-cg-label":
|
|
300
|
-
"--cs-cg-label-hover":
|
|
301
|
-
"--cs-cg-steps-count":
|
|
302
|
-
"--cs-cg-done":
|
|
303
|
-
"--cs-cg-failed":
|
|
346
|
+
let { colors: M, panel: P } = f ?? {}, I = f?.typography ?? { fontClassName: "dial-small-text" }, B = n({
|
|
347
|
+
"--cs-cg-label": M?.labelColor,
|
|
348
|
+
"--cs-cg-label-hover": M?.labelHoverColor,
|
|
349
|
+
"--cs-cg-steps-count": M?.stepsCountColor,
|
|
350
|
+
"--cs-cg-done": M?.doneColor,
|
|
351
|
+
"--cs-cg-failed": M?.failedColor,
|
|
352
|
+
"--cs-text": P?.text,
|
|
353
|
+
"--cs-row-hover": P?.rowHoverColor,
|
|
354
|
+
"--cs-button-bg": P?.collapsedButtonBg,
|
|
355
|
+
"--cs-stage-text": P?.stageTextColor,
|
|
356
|
+
"--cs-failed-text": P?.failedColor,
|
|
357
|
+
"--cs-tag-text": P?.tagTextColor,
|
|
358
|
+
"--cs-count-text": P?.countTextColor,
|
|
359
|
+
"--cs-duration-text": P?.durationTextColor,
|
|
360
|
+
"--cs-icon-secondary": P?.iconSecondaryColor,
|
|
361
|
+
"--cs-icon-completed": P?.iconCompletedColor,
|
|
362
|
+
"--cs-icon-error": P?.iconErrorColor,
|
|
363
|
+
"--cs-code-bg": P?.codeBg,
|
|
364
|
+
"--cs-code-border": P?.codeBorderColor,
|
|
365
|
+
"--cs-code-text": P?.codeTextColor,
|
|
366
|
+
"--cs-border": P?.borderColor
|
|
304
367
|
});
|
|
305
368
|
if (e.length === 0) return null;
|
|
306
|
-
let
|
|
307
|
-
copyAriaLabel:
|
|
308
|
-
runningAriaLabel:
|
|
309
|
-
failedAriaLabel:
|
|
310
|
-
attemptLabel:
|
|
369
|
+
let V = {
|
|
370
|
+
copyAriaLabel: E,
|
|
371
|
+
runningAriaLabel: T,
|
|
372
|
+
failedAriaLabel: D,
|
|
373
|
+
attemptLabel: O
|
|
311
374
|
};
|
|
312
|
-
if (e.length === 1) return /* @__PURE__ */
|
|
375
|
+
if (e.length === 1) return /* @__PURE__ */ C(q, {
|
|
313
376
|
stages: e,
|
|
314
377
|
isStreaming: r,
|
|
315
|
-
className:
|
|
316
|
-
styles: {
|
|
317
|
-
|
|
378
|
+
className: l,
|
|
379
|
+
styles: {
|
|
380
|
+
colors: P,
|
|
381
|
+
typography: f?.typography
|
|
382
|
+
},
|
|
383
|
+
labels: V
|
|
318
384
|
});
|
|
319
|
-
let
|
|
320
|
-
let { durationLabel: n } = D(t.name);
|
|
321
|
-
return e + (A(n) ?? 0);
|
|
322
|
-
}, 0), U = H > 0 ? k(H) : void 0, W = r ? j(e) : void 0, G;
|
|
385
|
+
let H = e.some((e) => e.status === t.Failed), U = L(e.map((e) => e.name)), W = U > 0 ? F(U) : void 0, G = r ? R(e) : void 0, K;
|
|
323
386
|
if (r) {
|
|
324
|
-
let t =
|
|
325
|
-
|
|
387
|
+
let t = G ? z(e, G) : e.length, n = G ? N(G.name).name : "";
|
|
388
|
+
K = /* @__PURE__ */ w("span", {
|
|
326
389
|
role: "status",
|
|
327
390
|
"aria-live": "polite",
|
|
328
|
-
className: "
|
|
391
|
+
className: "flex min-w-0 items-center gap-2",
|
|
329
392
|
children: [
|
|
330
|
-
/* @__PURE__ */
|
|
331
|
-
|
|
332
|
-
|
|
393
|
+
/* @__PURE__ */ C("span", {
|
|
394
|
+
className: "flex flex-none items-center",
|
|
395
|
+
children: /* @__PURE__ */ C(d, {
|
|
396
|
+
size: 14,
|
|
397
|
+
ariaLabel: T
|
|
398
|
+
})
|
|
333
399
|
}),
|
|
334
|
-
/* @__PURE__ */
|
|
335
|
-
className: i(I.fontClassName,
|
|
336
|
-
children:
|
|
400
|
+
/* @__PURE__ */ C("span", {
|
|
401
|
+
className: i("flex-none whitespace-nowrap", I.fontClassName, J.liveName),
|
|
402
|
+
children: S(t, e.length)
|
|
337
403
|
}),
|
|
338
|
-
n && /* @__PURE__ */
|
|
339
|
-
className: i(I.fontClassName,
|
|
340
|
-
children: n
|
|
404
|
+
n && /* @__PURE__ */ C("span", {
|
|
405
|
+
className: i("min-w-0 max-w-[22rem] truncate", I.fontClassName, J.executedLabel),
|
|
406
|
+
children: /* @__PURE__ */ C(c, { text: n })
|
|
341
407
|
})
|
|
342
408
|
]
|
|
343
409
|
});
|
|
344
|
-
} else if (
|
|
410
|
+
} else if (H) {
|
|
345
411
|
let n = e.filter((e) => e.status === t.Failed).length;
|
|
346
|
-
|
|
412
|
+
K = /* @__PURE__ */ w("span", {
|
|
347
413
|
className: "inline-flex items-center gap-1",
|
|
348
414
|
children: [
|
|
349
|
-
/* @__PURE__ */
|
|
350
|
-
className: i(I.fontClassName,
|
|
415
|
+
/* @__PURE__ */ w("span", {
|
|
416
|
+
className: i(I.fontClassName, J.executedLabel),
|
|
351
417
|
children: [
|
|
352
|
-
|
|
418
|
+
g,
|
|
353
419
|
" ",
|
|
354
420
|
e.length,
|
|
355
421
|
" ",
|
|
356
|
-
|
|
422
|
+
_(e.length)
|
|
357
423
|
]
|
|
358
424
|
}),
|
|
359
|
-
/* @__PURE__ */
|
|
360
|
-
className: i(I.fontClassName,
|
|
361
|
-
children:
|
|
425
|
+
/* @__PURE__ */ C("span", {
|
|
426
|
+
className: i(I.fontClassName, J.failedText),
|
|
427
|
+
children: v(n)
|
|
362
428
|
}),
|
|
363
|
-
|
|
364
|
-
className: i(I.fontClassName,
|
|
365
|
-
children:
|
|
429
|
+
W && /* @__PURE__ */ C("span", {
|
|
430
|
+
className: i(I.fontClassName, J.stepsCount),
|
|
431
|
+
children: W
|
|
366
432
|
})
|
|
367
433
|
]
|
|
368
434
|
});
|
|
369
|
-
} else
|
|
435
|
+
} else K = /* @__PURE__ */ w("span", {
|
|
370
436
|
className: "inline-flex items-center gap-1",
|
|
371
437
|
children: [
|
|
372
|
-
/* @__PURE__ */
|
|
438
|
+
/* @__PURE__ */ C(p, {
|
|
373
439
|
size: a.SM,
|
|
374
|
-
className:
|
|
375
|
-
"aria-hidden": !0
|
|
440
|
+
className: J.doneIcon,
|
|
441
|
+
"aria-hidden": !0,
|
|
442
|
+
stroke: o
|
|
376
443
|
}),
|
|
377
|
-
/* @__PURE__ */
|
|
378
|
-
className: i(I.fontClassName,
|
|
444
|
+
/* @__PURE__ */ w("span", {
|
|
445
|
+
className: i(I.fontClassName, J.executedLabel),
|
|
379
446
|
children: [
|
|
380
|
-
|
|
447
|
+
g,
|
|
381
448
|
" ",
|
|
382
449
|
e.length,
|
|
383
450
|
" ",
|
|
384
|
-
|
|
451
|
+
_(e.length)
|
|
385
452
|
]
|
|
386
453
|
}),
|
|
387
|
-
|
|
388
|
-
className: i(I.fontClassName,
|
|
389
|
-
children:
|
|
454
|
+
W && /* @__PURE__ */ C("span", {
|
|
455
|
+
className: i(I.fontClassName, J.stepsCount),
|
|
456
|
+
children: W
|
|
390
457
|
})
|
|
391
458
|
]
|
|
392
459
|
});
|
|
393
|
-
return /* @__PURE__ */
|
|
394
|
-
style:
|
|
395
|
-
className: i("flex w-full flex-col gap-1",
|
|
396
|
-
children: [/* @__PURE__ */
|
|
397
|
-
className:
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
460
|
+
return /* @__PURE__ */ w("div", {
|
|
461
|
+
style: B,
|
|
462
|
+
className: i("flex w-full flex-col gap-1", l),
|
|
463
|
+
children: [/* @__PURE__ */ C(u, {
|
|
464
|
+
className: J.toggleButton,
|
|
465
|
+
textClassName: "min-w-0",
|
|
466
|
+
onClick: () => A((e) => !e),
|
|
467
|
+
"aria-expanded": k,
|
|
468
|
+
iconAfter: k ? /* @__PURE__ */ C(m, {
|
|
401
469
|
size: 12,
|
|
402
|
-
"aria-hidden": !0
|
|
403
|
-
|
|
470
|
+
"aria-hidden": !0,
|
|
471
|
+
stroke: o
|
|
472
|
+
}) : /* @__PURE__ */ C(h, {
|
|
404
473
|
size: 12,
|
|
405
474
|
className: "rtl:scale-x-[-1]",
|
|
406
|
-
"aria-hidden": !0
|
|
475
|
+
"aria-hidden": !0,
|
|
476
|
+
stroke: o
|
|
407
477
|
}),
|
|
408
|
-
label:
|
|
409
|
-
}), /* @__PURE__ */
|
|
410
|
-
className: i("grid transition-[grid-template-rows] duration-300 ease-in-out",
|
|
411
|
-
children: /* @__PURE__ */
|
|
478
|
+
label: K
|
|
479
|
+
}), /* @__PURE__ */ C("div", {
|
|
480
|
+
className: i("grid transition-[grid-template-rows] duration-300 ease-in-out", k ? "grid-rows-[1fr]" : "grid-rows-[0fr]"),
|
|
481
|
+
children: /* @__PURE__ */ C("div", {
|
|
412
482
|
className: "overflow-hidden",
|
|
413
|
-
children: /* @__PURE__ */
|
|
483
|
+
children: /* @__PURE__ */ C(q, {
|
|
414
484
|
stages: e,
|
|
415
485
|
isStreaming: r,
|
|
416
|
-
styles: {
|
|
417
|
-
|
|
486
|
+
styles: {
|
|
487
|
+
colors: P,
|
|
488
|
+
typography: f?.typography
|
|
489
|
+
},
|
|
490
|
+
labels: V,
|
|
418
491
|
className: "pt-1"
|
|
419
492
|
})
|
|
420
493
|
})
|
|
@@ -422,4 +495,4 @@ var w = /[([][^()[\]]*[)\]]/g, T = /(\d+(?:\.\d+)?)\s*s\b/, E = /:\s*$/, D = (e)
|
|
|
422
495
|
});
|
|
423
496
|
};
|
|
424
497
|
//#endregion
|
|
425
|
-
export {
|
|
498
|
+
export { Y as CollapsedGroup, q as StagesPanel };
|
|
@@ -1,40 +1,41 @@
|
|
|
1
1
|
import { Stage } from '@epam/ai-dial-chat-shared';
|
|
2
|
+
import { StagesPanelColors } from './stages-props';
|
|
2
3
|
/** Color overrides for the `CollapsedGroup` component applied as CSS custom properties. */
|
|
3
4
|
export interface CollapsedGroupColors {
|
|
4
|
-
/** Color of the toggle button label and icon.
|
|
5
|
+
/** Color of the toggle button label and icon. */
|
|
5
6
|
labelColor?: string;
|
|
6
|
-
/** Color of the toggle button label and icon on hover.
|
|
7
|
+
/** Color of the toggle button label and icon on hover. */
|
|
7
8
|
labelHoverColor?: string;
|
|
8
|
-
/** Color of the execution time.
|
|
9
|
+
/** Color of the execution time. */
|
|
9
10
|
stepsCountColor?: string;
|
|
10
|
-
/** Color of the leading check icon in the finished-and-successful summary.
|
|
11
|
+
/** Color of the leading check icon in the finished-and-successful summary. */
|
|
11
12
|
doneColor?: string;
|
|
12
|
-
/** Color of the "N failed" text in the failed summary.
|
|
13
|
+
/** Color of the "N failed" text in the failed summary. */
|
|
13
14
|
failedColor?: string;
|
|
14
15
|
}
|
|
15
16
|
/** Typography configuration for the toggle button label text. */
|
|
16
17
|
export interface CollapsedGroupTypography {
|
|
17
|
-
/** CSS utility class applied to the toggle button label. Defaults to `'dial-small-text'
|
|
18
|
+
/** CSS utility class applied to the toggle button label. Defaults to `'dial-small-text'`. */
|
|
18
19
|
fontClassName?: string;
|
|
19
|
-
/** Font family applied to the panel root via CSS custom property. */
|
|
20
|
-
fontFamily?: string;
|
|
21
20
|
}
|
|
22
21
|
/** Combined style overrides (colors and typography) for the `CollapsedGroup` component. */
|
|
23
22
|
export interface CollapsedGroupStyles {
|
|
24
23
|
/** Color overrides applied as CSS custom properties. */
|
|
25
24
|
colors?: CollapsedGroupColors;
|
|
26
|
-
/** Typography for the toggle button label.
|
|
25
|
+
/** Typography for the toggle button label. */
|
|
27
26
|
typography?: CollapsedGroupTypography;
|
|
27
|
+
/** Color overrides forwarded to the inner `StagesPanel`. */
|
|
28
|
+
panel?: StagesPanelColors;
|
|
28
29
|
}
|
|
29
30
|
/** User-visible strings for the `CollapsedGroup` component. */
|
|
30
31
|
export interface CollapsedGroupLabels {
|
|
31
32
|
/** Label shown before the steps count on the toggle button. Defaults to `'Executed'`. */
|
|
32
33
|
executedLabel?: string;
|
|
33
|
-
/** Returns the pluralized
|
|
34
|
+
/** Returns the pluralized steps label. Defaults to `() => 'steps'`. */
|
|
34
35
|
stepsLabel?: (count: number) => string;
|
|
35
|
-
/** Returns the "N failed"
|
|
36
|
+
/** Returns the "N failed" text in the failed summary. Defaults to `(n) => \`${n} failed\``. */
|
|
36
37
|
failedCountLabel?: (failedCount: number) => string;
|
|
37
|
-
/** Returns the "Step X of Y"
|
|
38
|
+
/** Returns the "Step X of Y" text in the running summary. Defaults to `(current, total) => \`Step ${current} of ${total}\``. */
|
|
38
39
|
runningStepLabel?: (current: number, total: number) => string;
|
|
39
40
|
/** Accessible label announced for the running summary's spinner. Defaults to `'Running'`. */
|
|
40
41
|
runningAriaLabel?: string;
|
|
@@ -49,11 +50,7 @@ export interface CollapsedGroupLabels {
|
|
|
49
50
|
export interface CollapsedGroupProps {
|
|
50
51
|
/** Ordered list of stages to display. */
|
|
51
52
|
stages: Stage[];
|
|
52
|
-
/**
|
|
53
|
-
* Whether the run is still streaming. Drives the summary line's state
|
|
54
|
-
* (running vs. finished vs. failed) and its default open/closed state —
|
|
55
|
-
* expanded while running, collapsed once finished.
|
|
56
|
-
*/
|
|
53
|
+
/** When true, expands to a live progress line; collapses to a summary once streaming ends. */
|
|
57
54
|
isStreaming: boolean;
|
|
58
55
|
/** User-visible strings for the toggle button. */
|
|
59
56
|
labels?: CollapsedGroupLabels;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collapsed-group.d.ts","sourceRoot":"","sources":["../../src/models/collapsed-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"collapsed-group.d.ts","sourceRoot":"","sources":["../../src/models/collapsed-group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,2FAA2F;AAC3F,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,iEAAiE;AACjE,MAAM,WAAW,wBAAwB;IACvC,6FAA6F;IAC7F,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,2FAA2F;AAC3F,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,8CAA8C;IAC9C,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,4DAA4D;IAC5D,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAED,+DAA+D;AAC/D,MAAM,WAAW,oBAAoB;IACnC,yFAAyF;IACzF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IACnD,gIAAgI;IAChI,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC9D,6FAA6F;IAC7F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0FAA0F;IAC1F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+FAA+F;IAC/F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mHAAmH;IACnH,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC;CAClD;AAED,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,8FAA8F;IAC9F,WAAW,EAAE,OAAO,CAAC;IACrB,kDAAkD;IAClD,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B"}
|
|
@@ -1,21 +1,13 @@
|
|
|
1
1
|
import { Stage } from '@epam/ai-dial-chat-shared';
|
|
2
|
-
/** A
|
|
3
|
-
export interface
|
|
4
|
-
kind: 'single';
|
|
5
|
-
/** Stable key for list rendering — the stage's own index. */
|
|
6
|
-
key: number;
|
|
7
|
-
stage: Stage;
|
|
8
|
-
}
|
|
9
|
-
/** A row formed by collapsing consecutive stages that share the same cleaned name into one `×N` row. */
|
|
10
|
-
export interface GroupedStageRow {
|
|
11
|
-
kind: 'group';
|
|
2
|
+
/** A row rendered inside a `StagesPanel` — either one stage or a collapsed `×N` group of identical attempts. */
|
|
3
|
+
export interface StageRow {
|
|
12
4
|
/** Stable key for list rendering — the first attempt's index. */
|
|
13
5
|
key: number;
|
|
14
6
|
/** Shared cleaned display name for the group. */
|
|
15
|
-
name
|
|
7
|
+
name?: string;
|
|
8
|
+
/** The single stage for this row (present only when there is one attempt). */
|
|
9
|
+
stage?: Stage;
|
|
16
10
|
/** Individual attempts in original order. */
|
|
17
|
-
attempts
|
|
11
|
+
attempts?: Stage[];
|
|
18
12
|
}
|
|
19
|
-
/** A row rendered inside a `StagesPanel` — either one stage or a collapsed `×N` group of identical attempts. */
|
|
20
|
-
export type StageRow = SingleStageRow | GroupedStageRow;
|
|
21
13
|
//# sourceMappingURL=stage-grouping.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stage-grouping.d.ts","sourceRoot":"","sources":["../../src/models/stage-grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,
|
|
1
|
+
{"version":3,"file":"stage-grouping.d.ts","sourceRoot":"","sources":["../../src/models/stage-grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,gHAAgH;AAChH,MAAM,WAAW,QAAQ;IACvB,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;CACpB"}
|
package/models/stages-props.d.ts
CHANGED
|
@@ -1,49 +1,61 @@
|
|
|
1
1
|
import { Stage } from '@epam/ai-dial-chat-shared';
|
|
2
|
-
/**
|
|
3
|
-
* Typography configuration for a stage row. The name is always the
|
|
4
|
-
* dominant text in the row — bigger than the expanded content — so
|
|
5
|
-
* `fontClassName` (name) and `contentClassName` (expanded markdown content)
|
|
6
|
-
* are deliberately separate fields, not one shared class.
|
|
7
|
-
*/
|
|
2
|
+
/** Typography class overrides for stage name and expanded content elements in `StagesPanel`. */
|
|
8
3
|
export interface StageTypography {
|
|
9
|
-
/** CSS utility class applied to the stage/step name. Defaults to `'dial-small-text'
|
|
4
|
+
/** CSS utility class applied to the stage/step name. Defaults to `'dial-small-text'`. */
|
|
10
5
|
fontClassName?: string;
|
|
11
|
-
/** CSS utility class applied to expanded
|
|
6
|
+
/** CSS utility class applied to expanded content text elements (paragraphs, lists, blockquotes, links, table cells). Defaults to `'dial-tiny-text'`. */
|
|
12
7
|
contentClassName?: string;
|
|
13
|
-
/** CSS utility class applied to `<strong>` (bold markdown) inside expanded content.
|
|
8
|
+
/** CSS utility class applied to `<strong>` (bold markdown) inside expanded content. Falls back to `contentClassName`, then `'dial-tiny-text'`. */
|
|
14
9
|
strongClassName?: string;
|
|
15
|
-
/** CSS utility class applied to every heading level (`h1`–`h6`) inside expanded content. Defaults to `'dial-small-semi-text'
|
|
10
|
+
/** CSS utility class applied to every heading level (`h1`–`h6`) inside expanded content. Defaults to `'dial-small-semi-text'`. */
|
|
16
11
|
headingClassName?: string;
|
|
17
|
-
/** CSS utility class applied to inline code elements. Defaults to `'
|
|
12
|
+
/** CSS utility class applied to inline code elements. Defaults to `'dial-code-text rounded-md'`. */
|
|
18
13
|
codeClassName?: string;
|
|
19
|
-
/**
|
|
20
|
-
|
|
14
|
+
/** CSS utility class applied to fenced code blocks (`<pre>`). Defaults to `'dial-code-text'`. */
|
|
15
|
+
codeBlockClassName?: string;
|
|
21
16
|
/** CSS utility class applied to count badges (e.g. `×N` collapsed group). Defaults to `'dial-tiny-text'`. */
|
|
22
17
|
countFontClassName?: string;
|
|
18
|
+
/** CSS utility class applied to a stage's tag label. Defaults to `'dial-tiny-lead-text'`, which uppercases the label itself. */
|
|
19
|
+
tagClassName?: string;
|
|
23
20
|
}
|
|
24
|
-
/**
|
|
25
|
-
* Color overrides for the `StagesPanel` component applied as CSS custom
|
|
26
|
-
* properties. The panel is an inline list (no card/border), so these only
|
|
27
|
-
* cover the row-level surface: per-row hover tint and text tones.
|
|
28
|
-
*/
|
|
21
|
+
/** CSS custom property color overrides for the `StagesPanel` component. */
|
|
29
22
|
export interface StagesPanelColors {
|
|
30
|
-
/** General text color. */
|
|
23
|
+
/** General text color. Defaults to `--text-primary`. */
|
|
31
24
|
text?: string;
|
|
32
|
-
/** Background tint on row hover. Defaults to `--bg-layer-
|
|
25
|
+
/** Background tint on row hover. Defaults to `--bg-layer-sunken`. */
|
|
33
26
|
rowHoverColor?: string;
|
|
34
|
-
/**
|
|
35
|
-
* Text color applied to each stage name row.
|
|
36
|
-
* Defaults to the app's `--text-secondary` theme variable (`#9fa6bd`).
|
|
37
|
-
*/
|
|
27
|
+
/** Text color of each stage name. Defaults to `--text-secondary`. */
|
|
38
28
|
stageTextColor?: string;
|
|
39
|
-
/**
|
|
29
|
+
/** Text and icon color for a failed stage. Defaults to `--text-warning`. */
|
|
40
30
|
failedColor?: string;
|
|
31
|
+
/** Background color of the collapse button. Defaults to transparent. */
|
|
32
|
+
collapsedButtonBg?: string;
|
|
33
|
+
/** Text color of stage tag labels. Defaults to `--text-tertiary`. */
|
|
34
|
+
tagTextColor?: string;
|
|
35
|
+
/** Text color of the attempt count badge (e.g. `×N`). Defaults to `--text-tertiary`. */
|
|
36
|
+
countTextColor?: string;
|
|
37
|
+
/** Text color of the total-duration label. Defaults to `--text-tertiary`. */
|
|
38
|
+
durationTextColor?: string;
|
|
39
|
+
/** Color of secondary (non-status) icons. Defaults to `--text-secondary` at 70% opacity. */
|
|
40
|
+
iconSecondaryColor?: string;
|
|
41
|
+
/** Color of the completed-check icon. Defaults to `--text-tertiary`. */
|
|
42
|
+
iconCompletedColor?: string;
|
|
43
|
+
/** Color of the error/exception icon. Defaults to `--text-warning`. */
|
|
44
|
+
iconErrorColor?: string;
|
|
45
|
+
/** Background color of fenced code blocks and inline code. Defaults to `--bg-layer-raised`. */
|
|
46
|
+
codeBg?: string;
|
|
47
|
+
/** Border color of fenced code blocks and inline code. Defaults to `--stroke-secondary`. */
|
|
48
|
+
codeBorderColor?: string;
|
|
49
|
+
/** Text color inside code blocks. Defaults to `--text-primary`. */
|
|
50
|
+
codeTextColor?: string;
|
|
51
|
+
/** Border color used for table cells and blockquotes. Defaults to `--stroke-secondary`. */
|
|
52
|
+
borderColor?: string;
|
|
41
53
|
}
|
|
42
54
|
/** Combined style overrides (colors and typography) for the `StagesPanel` component. */
|
|
43
55
|
export interface StagesPanelStyles {
|
|
44
56
|
/** Color overrides applied as CSS custom properties. */
|
|
45
57
|
colors?: StagesPanelColors;
|
|
46
|
-
/** Typography applied to the stage name and expanded content.
|
|
58
|
+
/** Typography applied to the stage name and expanded content. */
|
|
47
59
|
typography?: StageTypography;
|
|
48
60
|
}
|
|
49
61
|
/** User-visible strings for the `StagesPanel` component. */
|
|
@@ -54,14 +66,14 @@ export interface StagesPanelLabels {
|
|
|
54
66
|
runningAriaLabel?: string;
|
|
55
67
|
/** Visually-hidden label announced alongside a failed stage's icon. Defaults to `'Failed'`. */
|
|
56
68
|
failedAriaLabel?: string;
|
|
57
|
-
/**
|
|
69
|
+
/** Label for a single attempt given its 1-based number. Defaults to `(n) => \`Attempt ${n}\``. */
|
|
58
70
|
attemptLabel?: (attemptNumber: number) => string;
|
|
59
71
|
}
|
|
60
72
|
/** Props accepted by the `StagesPanel` component. */
|
|
61
73
|
export interface StagesPanelProps {
|
|
62
74
|
/** Ordered list of stages to display. */
|
|
63
75
|
stages: Stage[];
|
|
64
|
-
/** When `true
|
|
76
|
+
/** When `true`, every stage with `status: null` shows a live spinner. */
|
|
65
77
|
isStreaming: boolean;
|
|
66
78
|
/** Extra class name(s) merged onto the outer wrapper. */
|
|
67
79
|
className?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stages-props.d.ts","sourceRoot":"","sources":["../../src/models/stages-props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD
|
|
1
|
+
{"version":3,"file":"stages-props.d.ts","sourceRoot":"","sources":["../../src/models/stages-props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,gGAAgG;AAChG,MAAM,WAAW,eAAe;IAC9B,yFAAyF;IACzF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wJAAwJ;IACxJ,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kJAAkJ;IAClJ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kIAAkI;IAClI,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oGAAoG;IACpG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iGAAiG;IACjG,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6GAA6G;IAC7G,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gIAAgI;IAChI,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4FAA4F;IAC5F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,iEAAiE;IACjE,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,0FAA0F;IAC1F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+FAA+F;IAC/F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kGAAkG;IAClG,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,MAAM,CAAC;CAClD;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,yEAAyE;IACzE,WAAW,EAAE,OAAO,CAAC;IACrB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@epam/ai-dial-conversation-stages",
|
|
3
3
|
"description": "Panel for displaying agent processing stages during LLM response streaming",
|
|
4
|
-
"version": "1.1.0-dev.
|
|
4
|
+
"version": "1.1.0-dev.456",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./index.js",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"peerDependencies": {
|
|
20
20
|
"react": "^19.0.0",
|
|
21
21
|
"@tabler/icons-react": "^3.0.0",
|
|
22
|
-
"@epam/ai-dial-chat-shared": "1.1.0-dev.
|
|
23
|
-
"@epam/ai-dial-ui-kit": "^0.
|
|
22
|
+
"@epam/ai-dial-chat-shared": "1.1.0-dev.456",
|
|
23
|
+
"@epam/ai-dial-ui-kit": "^0.14.0-dev.15"
|
|
24
24
|
},
|
|
25
25
|
"repository": {
|
|
26
26
|
"type": "git",
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import { Stage } from '@epam/ai-dial-chat-shared';
|
|
2
2
|
import { StageRow } from '../models/stage-grouping';
|
|
3
|
-
/**
|
|
4
|
-
* Collapses consecutive stages that share the same cleaned name into a
|
|
5
|
-
* single `×N` group row (expanding to the individual attempts); every other
|
|
6
|
-
* stage renders as its own row. Grouping is by cleaned name, not the raw
|
|
7
|
-
* backend string, so a name differing only by its embedded duration still
|
|
8
|
-
* groups correctly.
|
|
9
|
-
*/
|
|
3
|
+
/** Groups consecutive stages with the same cleaned name into a `×N` group row; all others render as single rows. */
|
|
10
4
|
export declare const groupStagesByName: (stages: Stage[]) => StageRow[];
|
|
11
5
|
//# sourceMappingURL=stage-grouping.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stage-grouping.d.ts","sourceRoot":"","sources":["../../src/utils/stage-grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD
|
|
1
|
+
{"version":3,"file":"stage-grouping.d.ts","sourceRoot":"","sources":["../../src/utils/stage-grouping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,oHAAoH;AACpH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,KAAK,EAAE,KAAG,QAAQ,EA+B3D,CAAC"}
|
package/utils/stage-name.d.ts
CHANGED
|
@@ -1,26 +1,19 @@
|
|
|
1
1
|
/** Result of cleaning a raw backend stage name for display. */
|
|
2
|
-
|
|
3
|
-
/** Display name with any duration/timestamp group and trailing colon removed.
|
|
2
|
+
interface CleanedStageName {
|
|
3
|
+
/** Display name with any duration/timestamp bracket group and trailing colon removed. */
|
|
4
4
|
name: string;
|
|
5
5
|
/** Extracted duration label (e.g. `'3.99s'`), or `undefined` if the raw name carried none. */
|
|
6
6
|
durationLabel?: string;
|
|
7
7
|
}
|
|
8
|
-
/**
|
|
9
|
-
* Cleans a raw backend stage name for display: extracts an embedded
|
|
10
|
-
* duration (discarding any accompanying timestamps, which have no
|
|
11
|
-
* structured home in the UI today) and strips a single trailing colon.
|
|
12
|
-
* Never re-cases or rewrites the remaining text.
|
|
13
|
-
*/
|
|
8
|
+
/** Strips an embedded duration bracket group (e.g. `(7.18s, ...)`) and a trailing colon from a raw backend stage name. */
|
|
14
9
|
export declare const cleanStageName: (rawName: string) => CleanedStageName;
|
|
15
|
-
/**
|
|
16
|
-
* Heuristic for "this cleaned name is a raw identifier, not prose":
|
|
17
|
-
* no whitespace and at least one underscore (e.g. `My_OMDB_Agent__0_0_1_tool`).
|
|
18
|
-
* Prose with an embedded identifier substring (e.g. `Call My_OMDB_Agent_tool`)
|
|
19
|
-
* still contains a space and is left as normal text.
|
|
20
|
-
*/
|
|
10
|
+
/** Returns true if the name looks like a raw identifier: no whitespace and contains an underscore. */
|
|
21
11
|
export declare const isIdentifierLike: (name: string) => boolean;
|
|
22
12
|
/** Formats a total duration in seconds as `'Xm Ys'` when >= 60s, otherwise `'X.Xs'`. */
|
|
23
13
|
export declare const formatTotalDuration: (totalSeconds: number) => string;
|
|
24
14
|
/** Parses a duration label produced by {@link cleanStageName} (e.g. `'3.99s'`) back into seconds. */
|
|
25
15
|
export declare const parseDurationSeconds: (durationLabel: string | undefined) => number | undefined;
|
|
16
|
+
/** Returns the elapsed duration represented by stage names, without double-counting overlapping timed stages. */
|
|
17
|
+
export declare const calculateStagesDurationSeconds: (stageNames: string[]) => number;
|
|
18
|
+
export {};
|
|
26
19
|
//# sourceMappingURL=stage-name.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stage-name.d.ts","sourceRoot":"","sources":["../../src/utils/stage-name.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stage-name.d.ts","sourceRoot":"","sources":["../../src/utils/stage-name.ts"],"names":[],"mappings":"AAuCA,+DAA+D;AAC/D,UAAU,gBAAgB;IACxB,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkCD,0HAA0H;AAC1H,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,gBAiBhD,CAAC;AAEF,sGAAsG;AACtG,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,OACW,CAAC;AAE5D,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,GAAI,cAAc,MAAM,KAAG,MAO1D,CAAC;AAEF,qGAAqG;AACrG,eAAO,MAAM,oBAAoB,GAC/B,eAAe,MAAM,GAAG,SAAS,KAChC,MAAM,GAAG,SAIX,CAAC;AAEF,iHAAiH;AACjH,eAAO,MAAM,8BAA8B,GACzC,YAAY,MAAM,EAAE,KACnB,MA2DF,CAAC"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import { Stage } from '@epam/ai-dial-chat-shared';
|
|
2
|
-
/**
|
|
3
|
-
* Finds the currently-executing stage while a run is streaming: the last
|
|
4
|
-
* entry with `status: null`. Returns `undefined` once every stage has
|
|
5
|
-
* settled (or the list is empty), even if the caller still reports
|
|
6
|
-
* `isStreaming: true` — a transitional state between the last stage settling
|
|
7
|
-
* and the stream closing.
|
|
8
|
-
*/
|
|
2
|
+
/** Returns the last stage with `status: null` (the currently executing stage), or `undefined` if none exists. */
|
|
9
3
|
export declare const findLiveStage: (stages: Stage[]) => Stage | undefined;
|
|
10
4
|
/** 1-based position of `stage` within `stages`, by its stable `index` field. */
|
|
11
5
|
export declare const stagePosition: (stages: Stage[], stage: Stage) => number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stage-progress.d.ts","sourceRoot":"","sources":["../../src/utils/stage-progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD
|
|
1
|
+
{"version":3,"file":"stage-progress.d.ts","sourceRoot":"","sources":["../../src/utils/stage-progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,iHAAiH;AACjH,eAAO,MAAM,aAAa,GAAI,QAAQ,KAAK,EAAE,KAAG,KAAK,GAAG,SACK,CAAC;AAE9D,gFAAgF;AAChF,eAAO,MAAM,aAAa,GAAI,QAAQ,KAAK,EAAE,EAAE,OAAO,KAAK,KAAG,MACR,CAAC"}
|