donobu 5.48.0 → 5.50.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/dist/esm/models/FlowMetadata.d.ts +1 -0
- package/dist/esm/models/Provenance.d.ts +1 -0
- package/dist/esm/models/Provenance.js +9 -0
- package/dist/esm/models/SuiteMetadata.d.ts +1 -0
- package/dist/esm/models/TestMetadata.d.ts +5 -0
- package/dist/esm/reporter/render.js +12 -2
- package/dist/esm/utils/buildProvenance.js +1 -0
- package/dist/models/FlowMetadata.d.ts +1 -0
- package/dist/models/Provenance.d.ts +1 -0
- package/dist/models/Provenance.js +9 -0
- package/dist/models/SuiteMetadata.d.ts +1 -0
- package/dist/models/TestMetadata.d.ts +5 -0
- package/dist/reporter/render.js +12 -2
- package/dist/utils/buildProvenance.js +1 -0
- package/package.json +1 -1
|
@@ -197,6 +197,7 @@ export declare const FlowMetadataSchema: z.ZodObject<{
|
|
|
197
197
|
branch: z.ZodOptional<z.ZodString>;
|
|
198
198
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
199
199
|
}, z.core.$loose>>;
|
|
200
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
200
201
|
}, z.core.$loose>>;
|
|
201
202
|
}, z.core.$loose>;
|
|
202
203
|
export type FlowMetadata = z.infer<typeof FlowMetadataSchema>;
|
|
@@ -38,6 +38,7 @@ export declare const ProvenanceSchema: z.ZodObject<{
|
|
|
38
38
|
branch: z.ZodOptional<z.ZodString>;
|
|
39
39
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
40
40
|
}, z.core.$loose>>;
|
|
41
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
41
42
|
}, z.core.$loose>;
|
|
42
43
|
export type Provenance = z.infer<typeof ProvenanceSchema>;
|
|
43
44
|
//# sourceMappingURL=Provenance.d.ts.map
|
|
@@ -55,6 +55,15 @@ exports.ProvenanceSchema = v4_1.z
|
|
|
55
55
|
'no CI markers were detected.'),
|
|
56
56
|
git: exports.GitProvenanceSchema.optional().describe('Git working-tree context at creation time. Absent when the CWD is ' +
|
|
57
57
|
'not a git repo or `git` is unavailable.'),
|
|
58
|
+
runId: v4_1.z
|
|
59
|
+
.string()
|
|
60
|
+
.optional()
|
|
61
|
+
.describe('Stable identifier for the CI/CD invocation (or local test run) that ' +
|
|
62
|
+
'produced this flow. Read verbatim from the DONOBU_RUN_ID environment ' +
|
|
63
|
+
'variable, which the test runner is responsible for setting (so every ' +
|
|
64
|
+
'flow in the same run shares it and it differs across runs). Absent ' +
|
|
65
|
+
'for flows created before runId capture, or by a run that did not set ' +
|
|
66
|
+
'DONOBU_RUN_ID.'),
|
|
58
67
|
})
|
|
59
68
|
.loose();
|
|
60
69
|
//# sourceMappingURL=Provenance.js.map
|
|
@@ -156,6 +156,7 @@ export declare const SuiteMetadataSchema: z.ZodObject<{
|
|
|
156
156
|
branch: z.ZodOptional<z.ZodString>;
|
|
157
157
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
158
158
|
}, z.core.$loose>>;
|
|
159
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
159
160
|
}, z.core.$loose>>;
|
|
160
161
|
}, z.core.$loose>;
|
|
161
162
|
export type SuiteMetadata = z.infer<typeof SuiteMetadataSchema>;
|
|
@@ -159,6 +159,7 @@ export declare const TestMetadataSchema: z.ZodObject<{
|
|
|
159
159
|
branch: z.ZodOptional<z.ZodString>;
|
|
160
160
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
161
161
|
}, z.core.$loose>>;
|
|
162
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
162
163
|
}, z.core.$loose>>;
|
|
163
164
|
}, z.core.$loose>;
|
|
164
165
|
export type TestMetadata = z.infer<typeof TestMetadataSchema>;
|
|
@@ -340,6 +341,7 @@ export declare const TestListItemSchema: z.ZodObject<{
|
|
|
340
341
|
branch: z.ZodOptional<z.ZodString>;
|
|
341
342
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
342
343
|
}, z.core.$loose>>;
|
|
344
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
343
345
|
}, z.core.$loose>>;
|
|
344
346
|
flowCount: z.ZodNumber;
|
|
345
347
|
latestFlow: z.ZodNullable<z.ZodObject<{
|
|
@@ -528,6 +530,7 @@ export declare const TestListItemSchema: z.ZodObject<{
|
|
|
528
530
|
branch: z.ZodOptional<z.ZodString>;
|
|
529
531
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
530
532
|
}, z.core.$loose>>;
|
|
533
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
531
534
|
}, z.core.$loose>>;
|
|
532
535
|
}, z.core.$loose>>;
|
|
533
536
|
}, z.core.$loose>;
|
|
@@ -688,6 +691,7 @@ export declare const TestListItemPaginatedResultSchema: z.ZodObject<{
|
|
|
688
691
|
branch: z.ZodOptional<z.ZodString>;
|
|
689
692
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
690
693
|
}, z.core.$loose>>;
|
|
694
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
691
695
|
}, z.core.$loose>>;
|
|
692
696
|
flowCount: z.ZodNumber;
|
|
693
697
|
latestFlow: z.ZodNullable<z.ZodObject<{
|
|
@@ -876,6 +880,7 @@ export declare const TestListItemPaginatedResultSchema: z.ZodObject<{
|
|
|
876
880
|
branch: z.ZodOptional<z.ZodString>;
|
|
877
881
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
878
882
|
}, z.core.$loose>>;
|
|
883
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
879
884
|
}, z.core.$loose>>;
|
|
880
885
|
}, z.core.$loose>>;
|
|
881
886
|
}, z.core.$loose>>;
|
|
@@ -1722,7 +1722,7 @@ function renderHtml(report, triage, outputDir) {
|
|
|
1722
1722
|
</div>
|
|
1723
1723
|
</div>
|
|
1724
1724
|
${test.plan ? `<span class="inline-reason" style="color:${reasonCfg(test.plan.plan.failureReason).color}" title="${esc(test.plan.plan.failureReason)}">${esc(reasonCfg(test.plan.plan.failureReason).label)}</span>` : ''}
|
|
1725
|
-
${test.tags.map((t) => `<span class="test-tag">${esc(t)}</span>`).join('')}
|
|
1725
|
+
${test.tags.map((t) => `<span class="test-tag" data-copy-tag="${esc(t)}" title="Click to copy"><span class="tag-label">${esc(t)}</span><span class="tag-copy-glyph"><svg viewBox="0 0 24 24"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg></span></span>`).join('')}
|
|
1726
1726
|
${totalStepCount > 0 ? `<span class="test-step-count" title="${totalStepCount} steps">${totalStepCount} steps</span>` : ''}
|
|
1727
1727
|
<span class="test-duration">${fmtDuration(totalTestDuration)}</span>
|
|
1728
1728
|
</div>
|
|
@@ -1870,7 +1870,13 @@ body::before{content:'';position:fixed;top:-750px;left:50%;transform:translateX(
|
|
|
1870
1870
|
.copy-flow-id .check-icon{color:#22c55e}
|
|
1871
1871
|
.inline-reason{font-size:11px;font-weight:500;flex-shrink:0;padding:1px 8px;border-radius:4px;background:var(--overlay-light)}
|
|
1872
1872
|
.test-step-count{font-size:11px;color:var(--text-dim);flex-shrink:0;font-family:var(--mono);padding:2px 8px;background:rgba(255,255,255,.04);border-radius:4px}
|
|
1873
|
-
.test-tag{font-size:11px;color:var(--accent);flex-shrink:0;font-family:var(--mono);padding:2px 8px;background:rgba(255,127,58,.08);border:1px solid rgba(255,127,58,.2);border-radius:4px}
|
|
1873
|
+
.test-tag{font-size:11px;color:var(--accent);flex-shrink:0;font-family:var(--mono);padding:2px 8px;background:rgba(255,127,58,.08);border:1px solid rgba(255,127,58,.2);border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;transition:background .15s,border-color .15s}
|
|
1874
|
+
.test-tag:hover{background:rgba(255,127,58,.16);border-color:rgba(255,127,58,.45)}
|
|
1875
|
+
.tag-copy-glyph{display:inline-flex;align-items:center;width:0;margin-left:0;opacity:0;overflow:hidden;transition:width .15s,opacity .15s,margin-left .15s}
|
|
1876
|
+
.test-tag:hover .tag-copy-glyph,.test-tag.copied .tag-copy-glyph{width:11px;margin-left:4px;opacity:.75}
|
|
1877
|
+
.tag-copy-glyph svg{width:11px;height:11px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
|
|
1878
|
+
.test-tag.copied{color:#22c55e;border-color:rgba(34,197,94,.45);background:rgba(34,197,94,.12)}
|
|
1879
|
+
.test-tag.copied .tag-copy-glyph{opacity:1}
|
|
1874
1880
|
.test-duration{font-size:12px;color:var(--text-dim);flex-shrink:0;font-family:var(--mono)}
|
|
1875
1881
|
.flow-id-detail{display:flex;align-items:center;gap:10px;margin-bottom:4px;padding:8px 12px;background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:var(--radius)}
|
|
1876
1882
|
.flow-id-detail .detail-label{margin-bottom:0;font-size:10px;letter-spacing:.8px}
|
|
@@ -2540,6 +2546,10 @@ details.ai-invocation[open]>summary .native-step-chevron{transform:rotate(90deg)
|
|
|
2540
2546
|
// Copy buttons (flow ID + JSON + inline text via data-copy-text)
|
|
2541
2547
|
var copyTextBtn=e.target.closest('.copy-text[data-copy-text]');
|
|
2542
2548
|
if(copyTextBtn){e.stopPropagation();e.preventDefault();navigator.clipboard.writeText(copyTextBtn.getAttribute('data-copy-text'));var copyTextSvg=copyTextBtn.innerHTML;copyTextBtn.innerHTML='<svg class="check-icon" viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></svg>';setTimeout(function(){copyTextBtn.innerHTML=copyTextSvg},2000);return}
|
|
2549
|
+
// Tag chip: click anywhere on the chip copies its tag text. The hover glyph
|
|
2550
|
+
// briefly becomes a check; stopPropagation keeps the card from expanding.
|
|
2551
|
+
var tagChip=e.target.closest('.test-tag[data-copy-tag]');
|
|
2552
|
+
if(tagChip){e.stopPropagation();navigator.clipboard.writeText(tagChip.getAttribute('data-copy-tag'));var glyph=tagChip.querySelector('.tag-copy-glyph');if(glyph){var glyphSvg=glyph.innerHTML;glyph.innerHTML='<svg class="check-icon" viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></svg>';tagChip.classList.add('copied');setTimeout(function(){glyph.innerHTML=glyphSvg;tagChip.classList.remove('copied')},1500)}return}
|
|
2543
2553
|
var flowBtn=e.target.closest('.copy-flow-id');
|
|
2544
2554
|
if(flowBtn){e.stopPropagation();navigator.clipboard.writeText(flowBtn.getAttribute('data-flow-id'));var copySvg=flowBtn.innerHTML;flowBtn.innerHTML='<svg class="check-icon" viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></svg>';setTimeout(function(){flowBtn.innerHTML=copySvg},2000);return}
|
|
2545
2555
|
var jsonBtn=e.target.closest('.copy-json');
|
|
@@ -197,6 +197,7 @@ export declare const FlowMetadataSchema: z.ZodObject<{
|
|
|
197
197
|
branch: z.ZodOptional<z.ZodString>;
|
|
198
198
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
199
199
|
}, z.core.$loose>>;
|
|
200
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
200
201
|
}, z.core.$loose>>;
|
|
201
202
|
}, z.core.$loose>;
|
|
202
203
|
export type FlowMetadata = z.infer<typeof FlowMetadataSchema>;
|
|
@@ -38,6 +38,7 @@ export declare const ProvenanceSchema: z.ZodObject<{
|
|
|
38
38
|
branch: z.ZodOptional<z.ZodString>;
|
|
39
39
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
40
40
|
}, z.core.$loose>>;
|
|
41
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
41
42
|
}, z.core.$loose>;
|
|
42
43
|
export type Provenance = z.infer<typeof ProvenanceSchema>;
|
|
43
44
|
//# sourceMappingURL=Provenance.d.ts.map
|
|
@@ -55,6 +55,15 @@ exports.ProvenanceSchema = v4_1.z
|
|
|
55
55
|
'no CI markers were detected.'),
|
|
56
56
|
git: exports.GitProvenanceSchema.optional().describe('Git working-tree context at creation time. Absent when the CWD is ' +
|
|
57
57
|
'not a git repo or `git` is unavailable.'),
|
|
58
|
+
runId: v4_1.z
|
|
59
|
+
.string()
|
|
60
|
+
.optional()
|
|
61
|
+
.describe('Stable identifier for the CI/CD invocation (or local test run) that ' +
|
|
62
|
+
'produced this flow. Read verbatim from the DONOBU_RUN_ID environment ' +
|
|
63
|
+
'variable, which the test runner is responsible for setting (so every ' +
|
|
64
|
+
'flow in the same run shares it and it differs across runs). Absent ' +
|
|
65
|
+
'for flows created before runId capture, or by a run that did not set ' +
|
|
66
|
+
'DONOBU_RUN_ID.'),
|
|
58
67
|
})
|
|
59
68
|
.loose();
|
|
60
69
|
//# sourceMappingURL=Provenance.js.map
|
|
@@ -156,6 +156,7 @@ export declare const SuiteMetadataSchema: z.ZodObject<{
|
|
|
156
156
|
branch: z.ZodOptional<z.ZodString>;
|
|
157
157
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
158
158
|
}, z.core.$loose>>;
|
|
159
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
159
160
|
}, z.core.$loose>>;
|
|
160
161
|
}, z.core.$loose>;
|
|
161
162
|
export type SuiteMetadata = z.infer<typeof SuiteMetadataSchema>;
|
|
@@ -159,6 +159,7 @@ export declare const TestMetadataSchema: z.ZodObject<{
|
|
|
159
159
|
branch: z.ZodOptional<z.ZodString>;
|
|
160
160
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
161
161
|
}, z.core.$loose>>;
|
|
162
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
162
163
|
}, z.core.$loose>>;
|
|
163
164
|
}, z.core.$loose>;
|
|
164
165
|
export type TestMetadata = z.infer<typeof TestMetadataSchema>;
|
|
@@ -340,6 +341,7 @@ export declare const TestListItemSchema: z.ZodObject<{
|
|
|
340
341
|
branch: z.ZodOptional<z.ZodString>;
|
|
341
342
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
342
343
|
}, z.core.$loose>>;
|
|
344
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
343
345
|
}, z.core.$loose>>;
|
|
344
346
|
flowCount: z.ZodNumber;
|
|
345
347
|
latestFlow: z.ZodNullable<z.ZodObject<{
|
|
@@ -528,6 +530,7 @@ export declare const TestListItemSchema: z.ZodObject<{
|
|
|
528
530
|
branch: z.ZodOptional<z.ZodString>;
|
|
529
531
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
530
532
|
}, z.core.$loose>>;
|
|
533
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
531
534
|
}, z.core.$loose>>;
|
|
532
535
|
}, z.core.$loose>>;
|
|
533
536
|
}, z.core.$loose>;
|
|
@@ -688,6 +691,7 @@ export declare const TestListItemPaginatedResultSchema: z.ZodObject<{
|
|
|
688
691
|
branch: z.ZodOptional<z.ZodString>;
|
|
689
692
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
690
693
|
}, z.core.$loose>>;
|
|
694
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
691
695
|
}, z.core.$loose>>;
|
|
692
696
|
flowCount: z.ZodNumber;
|
|
693
697
|
latestFlow: z.ZodNullable<z.ZodObject<{
|
|
@@ -876,6 +880,7 @@ export declare const TestListItemPaginatedResultSchema: z.ZodObject<{
|
|
|
876
880
|
branch: z.ZodOptional<z.ZodString>;
|
|
877
881
|
dirty: z.ZodOptional<z.ZodBoolean>;
|
|
878
882
|
}, z.core.$loose>>;
|
|
883
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
879
884
|
}, z.core.$loose>>;
|
|
880
885
|
}, z.core.$loose>>;
|
|
881
886
|
}, z.core.$loose>>;
|
package/dist/reporter/render.js
CHANGED
|
@@ -1722,7 +1722,7 @@ function renderHtml(report, triage, outputDir) {
|
|
|
1722
1722
|
</div>
|
|
1723
1723
|
</div>
|
|
1724
1724
|
${test.plan ? `<span class="inline-reason" style="color:${reasonCfg(test.plan.plan.failureReason).color}" title="${esc(test.plan.plan.failureReason)}">${esc(reasonCfg(test.plan.plan.failureReason).label)}</span>` : ''}
|
|
1725
|
-
${test.tags.map((t) => `<span class="test-tag">${esc(t)}</span>`).join('')}
|
|
1725
|
+
${test.tags.map((t) => `<span class="test-tag" data-copy-tag="${esc(t)}" title="Click to copy"><span class="tag-label">${esc(t)}</span><span class="tag-copy-glyph"><svg viewBox="0 0 24 24"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg></span></span>`).join('')}
|
|
1726
1726
|
${totalStepCount > 0 ? `<span class="test-step-count" title="${totalStepCount} steps">${totalStepCount} steps</span>` : ''}
|
|
1727
1727
|
<span class="test-duration">${fmtDuration(totalTestDuration)}</span>
|
|
1728
1728
|
</div>
|
|
@@ -1870,7 +1870,13 @@ body::before{content:'';position:fixed;top:-750px;left:50%;transform:translateX(
|
|
|
1870
1870
|
.copy-flow-id .check-icon{color:#22c55e}
|
|
1871
1871
|
.inline-reason{font-size:11px;font-weight:500;flex-shrink:0;padding:1px 8px;border-radius:4px;background:var(--overlay-light)}
|
|
1872
1872
|
.test-step-count{font-size:11px;color:var(--text-dim);flex-shrink:0;font-family:var(--mono);padding:2px 8px;background:rgba(255,255,255,.04);border-radius:4px}
|
|
1873
|
-
.test-tag{font-size:11px;color:var(--accent);flex-shrink:0;font-family:var(--mono);padding:2px 8px;background:rgba(255,127,58,.08);border:1px solid rgba(255,127,58,.2);border-radius:4px}
|
|
1873
|
+
.test-tag{font-size:11px;color:var(--accent);flex-shrink:0;font-family:var(--mono);padding:2px 8px;background:rgba(255,127,58,.08);border:1px solid rgba(255,127,58,.2);border-radius:4px;cursor:pointer;display:inline-flex;align-items:center;transition:background .15s,border-color .15s}
|
|
1874
|
+
.test-tag:hover{background:rgba(255,127,58,.16);border-color:rgba(255,127,58,.45)}
|
|
1875
|
+
.tag-copy-glyph{display:inline-flex;align-items:center;width:0;margin-left:0;opacity:0;overflow:hidden;transition:width .15s,opacity .15s,margin-left .15s}
|
|
1876
|
+
.test-tag:hover .tag-copy-glyph,.test-tag.copied .tag-copy-glyph{width:11px;margin-left:4px;opacity:.75}
|
|
1877
|
+
.tag-copy-glyph svg{width:11px;height:11px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
|
|
1878
|
+
.test-tag.copied{color:#22c55e;border-color:rgba(34,197,94,.45);background:rgba(34,197,94,.12)}
|
|
1879
|
+
.test-tag.copied .tag-copy-glyph{opacity:1}
|
|
1874
1880
|
.test-duration{font-size:12px;color:var(--text-dim);flex-shrink:0;font-family:var(--mono)}
|
|
1875
1881
|
.flow-id-detail{display:flex;align-items:center;gap:10px;margin-bottom:4px;padding:8px 12px;background:var(--surface-raised);border:1px solid var(--border-subtle);border-radius:var(--radius)}
|
|
1876
1882
|
.flow-id-detail .detail-label{margin-bottom:0;font-size:10px;letter-spacing:.8px}
|
|
@@ -2540,6 +2546,10 @@ details.ai-invocation[open]>summary .native-step-chevron{transform:rotate(90deg)
|
|
|
2540
2546
|
// Copy buttons (flow ID + JSON + inline text via data-copy-text)
|
|
2541
2547
|
var copyTextBtn=e.target.closest('.copy-text[data-copy-text]');
|
|
2542
2548
|
if(copyTextBtn){e.stopPropagation();e.preventDefault();navigator.clipboard.writeText(copyTextBtn.getAttribute('data-copy-text'));var copyTextSvg=copyTextBtn.innerHTML;copyTextBtn.innerHTML='<svg class="check-icon" viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></svg>';setTimeout(function(){copyTextBtn.innerHTML=copyTextSvg},2000);return}
|
|
2549
|
+
// Tag chip: click anywhere on the chip copies its tag text. The hover glyph
|
|
2550
|
+
// briefly becomes a check; stopPropagation keeps the card from expanding.
|
|
2551
|
+
var tagChip=e.target.closest('.test-tag[data-copy-tag]');
|
|
2552
|
+
if(tagChip){e.stopPropagation();navigator.clipboard.writeText(tagChip.getAttribute('data-copy-tag'));var glyph=tagChip.querySelector('.tag-copy-glyph');if(glyph){var glyphSvg=glyph.innerHTML;glyph.innerHTML='<svg class="check-icon" viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></svg>';tagChip.classList.add('copied');setTimeout(function(){glyph.innerHTML=glyphSvg;tagChip.classList.remove('copied')},1500)}return}
|
|
2543
2553
|
var flowBtn=e.target.closest('.copy-flow-id');
|
|
2544
2554
|
if(flowBtn){e.stopPropagation();navigator.clipboard.writeText(flowBtn.getAttribute('data-flow-id'));var copySvg=flowBtn.innerHTML;flowBtn.innerHTML='<svg class="check-icon" viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></svg>';setTimeout(function(){flowBtn.innerHTML=copySvg},2000);return}
|
|
2545
2555
|
var jsonBtn=e.target.closest('.copy-json');
|