@qaick/runner 0.2.0-alpha.10
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/README.md +72 -0
- package/package-dist/fixtures/action-catalog-v1.qaick.json +8 -0
- package/package-dist/fixtures/checkout-nested.qaick.json +24 -0
- package/package-dist/fixtures/checkout-project.qaick.json +30 -0
- package/package-dist/fixtures/checkout-regression.qaick.json +16 -0
- package/package-dist/fixtures/invalid-binding.qaick.json +13 -0
- package/package-dist/fixtures/parallel-project.qaick.json +41 -0
- package/package-dist/fixtures/studio-flow-v7.qaick.json +23 -0
- package/package-dist/fixtures/studio-project-v7.qaick.json +47 -0
- package/package-dist/package.json +80 -0
- package/package-dist/src/build-info.d.ts +4 -0
- package/package-dist/src/build-info.d.ts.map +1 -0
- package/package-dist/src/build-info.js +5 -0
- package/package-dist/src/build-info.js.map +1 -0
- package/package-dist/src/demo/RunnerWalkthrough.d.ts +3 -0
- package/package-dist/src/demo/RunnerWalkthrough.d.ts.map +1 -0
- package/package-dist/src/demo/RunnerWalkthrough.js +23 -0
- package/package-dist/src/demo/RunnerWalkthrough.js.map +1 -0
- package/package-dist/src/demo/runner-walkthrough.css +31 -0
- package/package-dist/src/runner/RunnerModule.d.ts +8 -0
- package/package-dist/src/runner/RunnerModule.d.ts.map +1 -0
- package/package-dist/src/runner/RunnerModule.js +267 -0
- package/package-dist/src/runner/RunnerModule.js.map +1 -0
- package/package-dist/src/runner/catalog.d.ts +15 -0
- package/package-dist/src/runner/catalog.d.ts.map +1 -0
- package/package-dist/src/runner/catalog.js +16 -0
- package/package-dist/src/runner/catalog.js.map +1 -0
- package/package-dist/src/runner/fixture.d.ts +5 -0
- package/package-dist/src/runner/fixture.d.ts.map +1 -0
- package/package-dist/src/runner/fixture.js +28 -0
- package/package-dist/src/runner/fixture.js.map +1 -0
- package/package-dist/src/runner/history.d.ts +15 -0
- package/package-dist/src/runner/history.d.ts.map +1 -0
- package/package-dist/src/runner/history.js +7 -0
- package/package-dist/src/runner/history.js.map +1 -0
- package/package-dist/src/runner/package-load-error.d.ts +11 -0
- package/package-dist/src/runner/package-load-error.d.ts.map +1 -0
- package/package-dist/src/runner/package-load-error.js +10 -0
- package/package-dist/src/runner/package-load-error.js.map +1 -0
- package/package-dist/src/runner/package-loader.d.ts +4 -0
- package/package-dist/src/runner/package-loader.d.ts.map +1 -0
- package/package-dist/src/runner/package-loader.js +114 -0
- package/package-dist/src/runner/package-loader.js.map +1 -0
- package/package-dist/src/runner/redaction.d.ts +7 -0
- package/package-dist/src/runner/redaction.d.ts.map +1 -0
- package/package-dist/src/runner/redaction.js +38 -0
- package/package-dist/src/runner/redaction.js.map +1 -0
- package/package-dist/src/runner/result-export.d.ts +12 -0
- package/package-dist/src/runner/result-export.d.ts.map +1 -0
- package/package-dist/src/runner/result-export.js +9 -0
- package/package-dist/src/runner/result-export.js.map +1 -0
- package/package-dist/src/runner/runtime-client-adapter.d.ts +21 -0
- package/package-dist/src/runner/runtime-client-adapter.d.ts.map +1 -0
- package/package-dist/src/runner/runtime-client-adapter.js +40 -0
- package/package-dist/src/runner/runtime-client-adapter.js.map +1 -0
- package/package-dist/src/runner/runtime-client.d.ts +24 -0
- package/package-dist/src/runner/runtime-client.d.ts.map +1 -0
- package/package-dist/src/runner/runtime-client.js +5 -0
- package/package-dist/src/runner/runtime-client.js.map +1 -0
- package/package-dist/src/runner/studio-artifact-loader.d.ts +6 -0
- package/package-dist/src/runner/studio-artifact-loader.d.ts.map +1 -0
- package/package-dist/src/runner/studio-artifact-loader.js +331 -0
- package/package-dist/src/runner/studio-artifact-loader.js.map +1 -0
- package/package-dist/src/runner/types.d.ts +81 -0
- package/package-dist/src/runner/types.d.ts.map +1 -0
- package/package-dist/src/runner/types.js +5 -0
- package/package-dist/src/runner/types.js.map +1 -0
- package/package-dist/styles.css +262 -0
- package/package.json +80 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
:root { font-family: Inter, ui-sans-serif, system-ui, sans-serif; color: #182234; background: #f7f9fc; font-size: 13px; color-scheme: light; }
|
|
2
|
+
:root[data-theme='dark'] { color: #e6edf7; background: #111827; color-scheme: dark; }
|
|
3
|
+
* { box-sizing: border-box; } body { margin: 0; min-width: 1120px; } button, select { font: inherit; }
|
|
4
|
+
.runner-shell { height: 100vh; min-height: 100vh; display: grid; grid-template-rows: 44px minmax(0, 1fr); } .runner-header { display: flex; align-items: center; gap: 18px; padding: 0 12px 0 16px; border-bottom: 1px solid #dfe4ec; background: #fff; font-size: 13px; }
|
|
5
|
+
.runner-brand { display: flex; align-items: baseline; gap: 6px; flex: none; } .runner-brand-mark { color: #3569d4; font-size: 13px; font-weight: 700; letter-spacing: .04em; } .runner-brand-product { color: #182234; font-size: 13px; font-weight: 500; } .runner-brand .about-button { height: 25px; margin-left: 6px; padding: 0 9px; border: 0; border-radius: 4px; background: transparent; color: #40516c; font-size: 12px; font-weight: 650; } .runner-brand .about-button:hover { background: #f0f3f8; color: #182234; } .runner-logo { width: 30px; height: 30px; display: grid; place-items: center; border-radius: 8px; color: white; background: #3569d4; font-size: 13px; } .alpha-label { color: #70809a; font-size: 13px; } .header-spacer, .panel-spacer { flex: 1; }
|
|
6
|
+
.engine-status { display: flex; align-items: center; gap: 7px; color: #14804a; font-size: 12px; font-weight: 700; } .engine-status i { width: 8px; height: 8px; border-radius: 50%; background: #19a463; }
|
|
7
|
+
.theme-picker { display: flex; align-items: center; gap: 7px; color: #596a82; font-size: 12px; font-weight: 700; } .theme-picker select { min-width: 82px; height: 30px; padding: 0 8px; border: 1px solid #cdd7e5; border-radius: 6px; background: white; color: #182234; }
|
|
8
|
+
.runner-main { display: grid; grid-template-columns: 218px minmax(560px, 1fr) 350px; min-height: 0; overflow: hidden; } .runner-nav, .inspector { min-height: 0; overflow-y: auto; background: #fff; } .runner-nav { padding: 18px 12px; border-right: 1px solid #dfe4ec; }
|
|
9
|
+
.nav-label, .eyebrow { color: #8794a8; font-size: 11px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; } .nav-label { margin: 4px 12px 10px; }
|
|
10
|
+
.nav-item { display: flex; align-items: center; gap: 10px; padding: 11px 12px; border-radius: 7px; color: #40516c; font-size: 14px; text-decoration: none; cursor: pointer; } .nav-item span { width: 20px; text-align: center; } .nav-item.active { color: #2458c4; background: #e9f0ff; font-weight: 700; }
|
|
11
|
+
.package-card { margin: 24px 8px 0; padding: 12px; border: 1px solid #dce4f0; border-radius: 8px; background: #f8faff; } .package-card small { display: block; color: #77869b; } .package-card strong { display: block; margin: 5px 0; font-size: 12px; overflow-wrap: anywhere; }
|
|
12
|
+
.runner-workspace { min-height: 0; overflow-y: auto; padding: 26px 30px; background: #f7f9fc; } .eyebrow { color: #687a95; } h1 { margin: 5px 0 4px; font-size: 25px; letter-spacing: -.02em; } .description { margin: 0; color: #66758c; }
|
|
13
|
+
.run-controls { display: flex; align-items: end; flex-wrap: wrap; gap: 10px 14px; margin-top: 25px; } label { display: grid; gap: 6px; color: #596a82; font-size: 12px; font-weight: 700; } select { min-width: 145px; height: 36px; padding: 0 10px; border: 1px solid #cdd7e5; border-radius: 6px; background: white; color: #182234; }
|
|
14
|
+
.button { height: 36px; padding: 0 15px; border: 1px solid #cdd7e5; border-radius: 6px; background: white; color: #334560; font-weight: 700; cursor: pointer; } .button.primary { border-color: #3569d4; background: #3569d4; color: white; } .button.dry-run { border-color: #8a9fc4; color: #315da9; background: #eef3fc; } .button.stop { color: #b33a30; }
|
|
15
|
+
.file-button { position: relative; display: inline-grid; height: 36px; padding: 0 15px; place-items: center; border: 1px solid #cdd7e5; border-radius: 6px; background: white; color: #334560; cursor: pointer; } .file-button input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; } .load-error { margin: 12px 0 -8px; color: #b33a30; font-size: 12px; font-weight: 700; }
|
|
16
|
+
.inputs-panel { margin-top: 18px; } .input-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; padding: 16px; } .input-field { color: #596a82; } .input-field input { width: 100%; height: 34px; padding: 0 9px; border: 1px solid #cdd7e5; border-radius: 6px; color: #182234; background: #fff; font: inherit; font-weight: 500; } .input-hint { color: #7a899d; font-size: 11px; }
|
|
17
|
+
.history-view-banner { margin-top: 12px; padding: 9px 12px; border: 1px solid #b9cbed; border-radius: 6px; color: #315da9; background: #eaf2ff; font-size: 12px; font-weight: 700; }
|
|
18
|
+
.panel { margin-top: 24px; border: 1px solid #dce4ed; border-radius: 8px; background: white; overflow: hidden; } .panel-heading { display: flex; align-items: center; gap: 10px; padding: 14px 16px; border-bottom: 1px solid #e6ebf2; } h2 { margin: 0; font-size: 16px; } .running { color: #14804a; font-size: 12px; font-weight: 750; } .stopped { color: #b33a30; font-size: 12px; font-weight: 750; }
|
|
19
|
+
table { width: 100%; border-collapse: collapse; font-size: 13px; } th { padding: 10px 14px; color: #7b899d; background: #fafbfd; font-size: 11px; text-align: left; text-transform: uppercase; letter-spacing: .04em; } td { padding: 13px 14px; border-top: 1px solid #edf0f5; } tr.parent-row td { background: #fbfdff; } tr.nested-row td { background: #f3f7fd; } tr.selected td { background: #dce8ff !important; border-top-color: #9db9ed; } tr.selected td:first-child { border-left: 4px solid #3569d4; } tr.selected .hierarchy-name { color: #173e91; font-weight: 700; } tbody tr { cursor: pointer; }
|
|
20
|
+
.hierarchy-hint { display: flex; align-items: center; gap: 10px; padding: 9px 16px; border-bottom: 1px solid #dbe6fa; color: #315da9; background: #f2f6ff; font-size: 11px; } .hierarchy-hint span { color: #637897; } .hierarchy-action { padding: 4px 7px; border: 1px solid #b9cbed; border-radius: 4px; color: #315da9; background: #fff; font-size: 10px; font-weight: 700; cursor: pointer; } .hierarchy-action:first-of-type { margin-left: auto; } .hierarchy-name { display: inline-flex; align-items: center; gap: 7px; min-height: 22px; } .collapse-toggle { display: inline-grid; width: 18px; height: 18px; place-items: center; padding: 0; border: 1px solid #9eb5df; border-radius: 4px; color: #315da9; background: #eaf1ff; font-size: 14px; line-height: 1; cursor: pointer; } .branch-marker { color: #5d82ca; font-size: 18px; font-weight: 400; } .kind-label { display: inline-flex; padding: 3px 5px; border-radius: 4px; color: #6c7890; background: #edf1f7; font-size: 9px; font-weight: 800; letter-spacing: .05em; } .nested-label { color: #315da9; background: #e5efff; } .nested-row td:first-child { border-left: 3px solid #8eaded; } .parent-row td:first-child { border-left: 3px solid transparent; }
|
|
21
|
+
.step-icon { display: inline-grid; width: 20px; height: 20px; margin-right: 7px; place-items: center; border-radius: 50%; color: white; background: #18a15d; font-size: 11px; } .nested-row .step-icon { margin-left: 18px; } .nested-row .hierarchy-name { padding-left: 0 !important; } .step-icon.waiting { background: #efaa18; } .step-icon.skipped { color: #62738c; background: #edf1f6; } .step-icon.failed, .step-icon.cancelled { background: #c94b42; } .step-icon.pending { border: 2px solid #aab6c7; background: transparent; }
|
|
22
|
+
.selected-label { display: inline-flex; margin-left: 8px; padding: 3px 5px; border-radius: 4px; color: #2458c4; background: #c4d7ff; font-size: 9px; font-weight: 800; letter-spacing: .05em; }
|
|
23
|
+
.status { display: inline-flex; padding: 4px 8px; border-radius: 5px; font-size: 10px; font-weight: 800; letter-spacing: .03em; } .status.finished { color: #14804a; background: #e7f6ed; } .status.waiting { color: #98660b; background: #fff2d5; } .status.pending, .status.skipped { color: #62738c; background: #edf1f6; } .status.failed, .status.cancelled { color: #a33a32; background: #ffebe8; }
|
|
24
|
+
.loop-row td { background: #f5f8fe; border-top: 1px solid #c8d7f0; border-bottom: 1px solid #dce6f6; } .loop-row td:first-child { border-left: 3px solid #668bd2; border-radius: 9px 0 0 0; } .loop-row td:last-child { border-right: 1px solid #c8d7f0; border-radius: 0 9px 0 0; } .loop-icon { color: #fff; background: #668bd2; font-size: 15px; } .loop-label { color: #315da9; background: #e7efff; } .loop-progress { display: flex; align-items: center; flex-wrap: wrap; gap: 5px 8px; min-width: 220px; margin-bottom: 4px; color: #315da9; font-size: 10px; letter-spacing: .02em; } .loop-progress small { flex-basis: 100%; color: #71839c; font-size: 10px; } .loop-bar { width: 92px; height: 6px; overflow: hidden; border-radius: 99px; background: #dce6f6; } .loop-bar i { display: block; height: 100%; border-radius: inherit; background: #668bd2; transition: width .2s ease; } .loop-content td { border-top: 0; border-bottom: 0; background: #fbfdff; } .loop-content td:first-child { border-left: 3px solid #c8d7f0; } .loop-content td:last-child { border-right: 1px solid #c8d7f0; } .loop-end td { border-bottom: 1px solid #c8d7f0; } .loop-end td:first-child { border-radius: 0 0 0 9px; } .loop-end td:last-child { border-radius: 0 0 9px 0; }
|
|
25
|
+
.event-panel { margin-top: 18px; } .event-row td { padding: 9px 14px; font-size: 12px; } code { color: #294d9c; font-family: ui-monospace, monospace; font-size: 11px; }
|
|
26
|
+
.inspector { padding: 22px 18px; border-left: 1px solid #dfe4ec; } .inspector h2 { font-size: 17px; } .selected-detail-name { margin: 6px 0 0; color: #2458c4; font-size: 13px; } .run-id { margin: 5px 0 20px; color: #7a899d; font-family: ui-monospace, monospace; font-size: 10px; } .inspector-section { padding: 17px 0; border-top: 1px solid #e6ebf2; } .inspector-section h3 { margin: 0 0 11px; font-size: 13px; }
|
|
27
|
+
.selection-nav { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 10px; } .selection-nav .button { padding: 5px 8px; font-size: 11px; }
|
|
28
|
+
.parallel-event { color: #66758c; font-size: 10px; }
|
|
29
|
+
.event-filter { min-width: 120px; padding: 6px 8px; font-size: 11px; }
|
|
30
|
+
.key-values { display: grid; grid-template-columns: 1fr 1fr; border: 1px solid #e0e6ef; border-radius: 6px; overflow: hidden; font-size: 12px; } .key-values span { padding: 9px 10px; border-bottom: 1px solid #e9edf3; } .key-values span:nth-child(odd) { color: #63738a; background: #fafbfd; } .key-values span:nth-last-child(-n+2) { border-bottom: 0; }
|
|
31
|
+
.iteration-history { display: grid; gap: 7px; } .iteration-entry { display: grid; gap: 3px; padding: 9px 10px; border: 1px solid #dce4ed; border-radius: 6px; background: #fbfdff; font-size: 11px; } .iteration-entry span { color: #637897; font-size: 10px; } .iteration-entry small { color: #71839c; line-height: 1.35; } .timing-details { display: grid; gap: 4px; margin-top: 8px; padding: 9px 10px; border: 1px solid #dce4ed; border-radius: 6px; color: #637897; background: #fbfdff; font-size: 10px; } .timing-details strong { color: #40516c; font-size: 11px; }
|
|
32
|
+
.notice { padding: 12px; border-radius: 6px; color: #59708e; background: #f3f6fa; font-size: 12px; line-height: 1.5; } .draft-badge { position: fixed; right: 18px; bottom: 14px; padding: 7px 10px; border: 1px solid #e5c987; border-radius: 5px; color: #85600e; background: #fff7df; font-size: 11px; font-weight: 750; }
|
|
33
|
+
.about-button { height: 30px; padding: 0 10px; border: 1px solid #cdd7e5; border-radius: 6px; background: white; color: #40516c; font-size: 12px; font-weight: 700; cursor: pointer; }
|
|
34
|
+
.about-backdrop { position: fixed; inset: 0; z-index: 20; display: grid; place-items: center; background: rgb(7 12 24 / 48%); }
|
|
35
|
+
.about-dialog { position: relative; width: min(360px, calc(100vw - 40px)); padding: 28px; border: 1px solid #dce4ed; border-radius: 12px; background: white; color: #40516c; box-shadow: 0 20px 60px rgb(0 0 0 / 24%); text-align: center; }
|
|
36
|
+
.about-dialog .runner-logo { margin: 0 auto 14px; }.about-dialog h2 { margin: 0 0 8px; color: #182234; }.about-dialog p { margin: 0 0 8px; color: #66758c; line-height: 1.5; }.about-dialog small { color: #8794a8; }.about-dialog footer { margin-top: 24px; color: #7a899d; font-size: 11px; }.about-close { position: absolute; top: 10px; right: 12px; border: 0; background: transparent; color: #7a899d; font-size: 22px; cursor: pointer; }
|
|
37
|
+
.error-notice { padding: 12px; border: 1px solid #f0c5c1; border-radius: 6px; color: #9d332b; background: #fff1ef; font-size: 12px; line-height: 1.5; } .dry-run-issues { display: grid; gap: 8px; } .dry-run-issues .error-notice { font-size: 11px; } .dry-run-issues small { display: block; margin-top: 5px; color: inherit; opacity: .8; }
|
|
38
|
+
.validation-panel { display: flex; gap: 11px; align-items: flex-start; margin-top: 18px; padding: 13px 16px; border: 1px solid; border-radius: 8px; font-size: 12px; } .validation-panel strong { display: block; } .validation-panel small { display: block; margin-top: 3px; color: inherit; opacity: .8; } .validation-pass { border-color: #b9dfca; color: #176d41; background: #effaf3; } .validation-failed { display: grid; gap: 11px; border-color: #edc2bd; color: #963b33; background: #fff5f3; } .validation-heading { display: flex; gap: 11px; align-items: flex-start; } .validation-icon, .issue-icon { display: inline-grid; flex: 0 0 auto; width: 22px; height: 22px; place-items: center; border-radius: 50%; color: white; background: #1b9a5b; font-size: 14px; font-weight: 800; } .validation-failed .validation-icon, .issue-icon { background: #c94b42; } .validation-issues { display: grid; gap: 6px; padding-left: 33px; } .validation-issue { display: flex; gap: 8px; align-items: flex-start; padding: 8px 9px; border: 1px solid #f0d1cd; border-radius: 5px; background: rgba(255,255,255,.55); } .validation-issue .issue-icon { width: 16px; height: 16px; font-size: 12px; } .validation-issue span, .validation-issue small { display: block; } .validation-issue strong { font-size: 10px; letter-spacing: .04em; } .validation-issue span { margin-top: 2px; font-size: 11px; } .validation-issue small { margin-top: 3px; opacity: .75; }
|
|
39
|
+
|
|
40
|
+
:root[data-theme='dark'] .runner-header, :root[data-theme='dark'] .runner-nav, :root[data-theme='dark'] .inspector, :root[data-theme='dark'] .panel, :root[data-theme='dark'] .key-values, :root[data-theme='dark'] .button, :root[data-theme='dark'] select, :root[data-theme='dark'] .input-field input { border-color: #334155; background: #182235; color: #e6edf7; }
|
|
41
|
+
:root[data-theme='dark'] .runner-workspace { background: #111827; } :root[data-theme='dark'] .runner-header { border-color: #334155; } :root[data-theme='dark'] .runner-nav { border-color: #334155; } :root[data-theme='dark'] .inspector { border-color: #334155; }
|
|
42
|
+
:root[data-theme='dark'] .description, :root[data-theme='dark'] .nav-item, :root[data-theme='dark'] .run-id, :root[data-theme='dark'] .input-hint, :root[data-theme='dark'] .theme-picker, :root[data-theme='dark'] label { color: #a8b6ca; }
|
|
43
|
+
:root[data-theme='dark'] .nav-item.active { color: #b8d0ff; background: #243b68; } :root[data-theme='dark'] .package-card, :root[data-theme='dark'] .notice { border-color: #334155; background: #202c40; color: #b9c8dc; }
|
|
44
|
+
:root[data-theme='dark'] th { color: #9aaac0; background: #1c293d; } :root[data-theme='dark'] td { border-color: #2b3a50; } :root[data-theme='dark'] tr.parent-row td { background: #182235; } :root[data-theme='dark'] tr.nested-row td { background: #202c40; } :root[data-theme='dark'] tr.selected td { background: #243b68 !important; border-top-color: #496da8; } :root[data-theme='dark'] tr.selected .hierarchy-name { color: #d4e2ff; } :root[data-theme='dark'] .selected-detail-name { color: #a9c5ff; }
|
|
45
|
+
:root[data-theme='dark'] .hierarchy-hint { border-color: #314d80; color: #b8d0ff; background: #1b3159; } :root[data-theme='dark'] .hierarchy-hint span { color: #b0bfd5; } :root[data-theme='dark'] .hierarchy-action { border-color: #496da8; color: #c5d9ff; background: #202c40; } :root[data-theme='dark'] .collapse-toggle { border-color: #496da8; color: #c5d9ff; background: #294b80; } :root[data-theme='dark'] .kind-label { color: #b5c2d4; background: #334155; } :root[data-theme='dark'] .nested-label { color: #c5d9ff; background: #294b80; } :root[data-theme='dark'] .nested-row td:first-child { border-color: #6f96e5; } :root[data-theme='dark'] .branch-marker { color: #9ab9ff; }
|
|
46
|
+
:root[data-theme='dark'] .panel-heading, :root[data-theme='dark'] .inspector-section { border-color: #334155; } :root[data-theme='dark'] .key-values span { border-color: #334155; } :root[data-theme='dark'] .key-values span:nth-child(odd) { background: #1c293d; color: #a8b6ca; }
|
|
47
|
+
:root[data-theme='dark'] .iteration-entry { border-color: #334155; background: #1c293d; } :root[data-theme='dark'] .iteration-entry span, :root[data-theme='dark'] .iteration-entry small { color: #a8b6ca; }
|
|
48
|
+
:root[data-theme='dark'] .status.pending { color: #b5c2d4; background: #334155; } :root[data-theme='dark'] .file-button { border-color: #334155; background: #182235; color: #e6edf7; } :root[data-theme='dark'] .error-notice { border-color: #7f3434; background: #3a2025; color: #ffb4ad; }
|
|
49
|
+
:root[data-theme='dark'] body { background: #111827; } :root[data-theme='dark'] .runner-header strong, :root[data-theme='dark'] h1, :root[data-theme='dark'] h2, :root[data-theme='dark'] h3, :root[data-theme='dark'] td, :root[data-theme='dark'] .package-card strong { color: #e6edf7; }
|
|
50
|
+
:root[data-theme='dark'] .alpha-label, :root[data-theme='dark'] .nav-label, :root[data-theme='dark'] .eyebrow, :root[data-theme='dark'] .package-card small { color: #9aaac0; } :root[data-theme='dark'] code { color: #a9c7ff; }
|
|
51
|
+
:root[data-theme='dark'] .step-icon.pending { border-color: #718096; } :root[data-theme='dark'] .status.finished { color: #8ee0b1; background: #173b2d; } :root[data-theme='dark'] .status.waiting { color: #ffd27a; background: #4a3511; } :root[data-theme='dark'] .status.skipped { color: #b5c2d4; background: #334155; } :root[data-theme='dark'] .status.failed, :root[data-theme='dark'] .status.cancelled { color: #ffaaa2; background: #4a2428; }
|
|
52
|
+
:root[data-theme='dark'] .running { color: #8ee0b1; } :root[data-theme='dark'] .stopped, :root[data-theme='dark'] .load-error { color: #ffaaa2; } :root[data-theme='dark'] .draft-badge { border-color: #806a2e; color: #f4d477; background: #322b17; }
|
|
53
|
+
:root[data-theme='dark'] .loop-row td { background: #1c2b47; border-color: #405b8b; } :root[data-theme='dark'] .loop-row td:first-child { border-color: #79a1ff; } :root[data-theme='dark'] .loop-icon { color: #fff; background: #668bd2; } :root[data-theme='dark'] .loop-label { color: #d2e0ff; background: #294b80; } :root[data-theme='dark'] .loop-progress { color: #c5d9ff; } :root[data-theme='dark'] .loop-progress small { color: #b0bfd5; } :root[data-theme='dark'] .loop-bar { background: #334155; } :root[data-theme='dark'] .loop-bar i { background: #79a1ff; } :root[data-theme='dark'] .loop-content td { border-color: #405b8b; background: #151f31; } :root[data-theme='dark'] .loop-content td:first-child { border-color: #405b8b; } :root[data-theme='dark'] .loop-end td { border-color: #405b8b; }
|
|
54
|
+
:root[data-theme='dark'] .button:hover, :root[data-theme='dark'] .file-button:hover { border-color: #6289d9; background: #22324d; } :root[data-theme='dark'] .button.primary { border-color: #4d7fe0; background: #3f70d2; color: #fff; } :root[data-theme='dark'] .button.stop { color: #ffaaa2; }
|
|
55
|
+
:root[data-theme='dark'] .button.dry-run { border-color: #496da8; color: #c5d9ff; background: #202c40; }
|
|
56
|
+
:root[data-theme='dark'] .about-button, :root[data-theme='dark'] .about-dialog { border-color: #334155; background: #182235; color: #e6edf7; } :root[data-theme='dark'] .about-dialog h2 { color: #e6edf7; } :root[data-theme='dark'] .about-dialog p, :root[data-theme='dark'] .about-dialog footer { color: #a8b6ca; }
|
|
57
|
+
:root[data-theme='dark'] .validation-pass { border-color: #2d7653; color: #9be5b9; background: #173b2d; } :root[data-theme='dark'] .validation-failed { border-color: #7f3434; color: #ffb4ad; background: #3a2025; } :root[data-theme='dark'] .validation-issue { border-color: #6c3b3c; background: rgba(24, 20, 28, .45); }
|
|
58
|
+
.event-search { min-width: 180px; }
|
|
59
|
+
.empty-state { margin: 0; padding: 18px; color: var(--muted-text); }
|
|
60
|
+
.history-panel { margin-top: 16px; }
|
|
61
|
+
.history-panel table { width: 100%; }
|
|
62
|
+
.history-meta { display: block; margin-top: 3px; color: #71839c; font-size: 10px; }
|
|
63
|
+
.history-retention { display: flex; align-items: center; gap: 6px; font-size: 11px; }
|
|
64
|
+
.history-retention select { min-width: 92px; height: 30px; font-size: 11px; }
|
|
65
|
+
.history-delete { margin-left: 6px; color: #a33a32; }
|
|
66
|
+
.validation-issue[data-step-id] { cursor: pointer; }
|
|
67
|
+
.branch-path { display: grid; gap: 6px; margin-top: 8px; padding: 9px 10px; border: 1px solid #dce4ed; border-radius: 6px; background: #fbfdff; font-size: 11px; }
|
|
68
|
+
.branch-path-row { display: grid; grid-template-columns: auto 1fr auto; gap: 7px; align-items: center; }
|
|
69
|
+
.branch-path-row small { color: #71839c; font-size: 10px; }
|
|
70
|
+
.parallel-details { color: #637897; }
|
|
71
|
+
.parallel-details > span { font-size: 10px; }
|
|
72
|
+
.result-summary { display: grid; gap: 4px; margin-top: 8px; padding: 9px 10px; border: 1px solid #dce4ed; border-radius: 6px; color: #637897; background: #fbfdff; font-size: 10px; }
|
|
73
|
+
.result-summary strong { color: #40516c; font-size: 11px; }
|
|
74
|
+
.demo-entry { padding: 7px 10px; border: 1px solid var(--border); border-radius: 5px; background: var(--panel); color: var(--accent); font-size: 12px; font-weight: 650; text-decoration: none; }
|
|
75
|
+
|
|
76
|
+
.breakpoint-toggle { border: 0; background: transparent; color: var(--muted, #718096); cursor: pointer; margin-left: .4rem; padding: 0 .2rem; }
|
|
77
|
+
.breakpoint-toggle.active { color: #d64545; font-weight: 700; }
|
|
78
|
+
.inspector-actions { display: flex; gap: .5rem; flex-wrap: wrap; margin-top: .75rem; }
|
|
79
|
+
.attempt-history { display: grid; gap: .35rem; }
|
|
80
|
+
.debug-session-badge { height: 36px; display: inline-flex; align-items: center; padding: 0 .65rem; border: 1px solid #e5a4a4; border-radius: 6px; color: #a83232; background: #fff4f4; font-size: 11px; font-weight: 800; }
|
|
81
|
+
.execution-menu-label { color: #637897; font-size: 11px; font-weight: 700; }
|
|
82
|
+
.local-control { height: 30px; padding: 0 9px; font-size: 11px; }
|
|
83
|
+
.local-control.active { border-color: #d78383; color: #a83232; background: #fff4f4; }
|
|
84
|
+
.runner-context-menu { position: fixed; z-index: 20; min-width: 170px; padding: 6px; border: 1px solid #cbd6e6; border-radius: 7px; background: #fff; box-shadow: 0 8px 24px rgba(28, 47, 76, .18); }
|
|
85
|
+
.runner-context-menu strong { display: block; padding: 7px 9px 5px; color: #637897; font-size: 10px; text-transform: uppercase; letter-spacing: .05em; }
|
|
86
|
+
.runner-context-menu button { display: block; width: 100%; padding: 8px 9px; border: 0; border-radius: 4px; color: #243753; background: transparent; text-align: left; font: inherit; font-size: 12px; cursor: pointer; }
|
|
87
|
+
.runner-context-menu button:hover { background: #edf3ff; color: #173e91; }
|
|
88
|
+
.breakpoint-marker { display: inline-grid; width: 22px; height: 22px; place-items: center; color: #fff; background: #b93645; clip-path: polygon(30% 0, 70% 0, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0 70%, 0 30%); filter: drop-shadow(0 1px 1px rgba(62, 20, 27, .25)); font-family: Arial, sans-serif; font-size: 4.5px; font-weight: 900; letter-spacing: .06em; line-height: 1; }
|
|
89
|
+
|
|
90
|
+
.button.resume-highlight { border-color: #3569d4; background: #3569d4; color: #fff; box-shadow: 0 0 0 3px rgba(53, 105, 212, .18); }
|
|
91
|
+
|
|
92
|
+
/* Match Studio's compact toolbar rhythm and quiet menu controls. */
|
|
93
|
+
.runner-header { border-color: var(--runner-line); background: var(--runner-surface); }
|
|
94
|
+
.runner-brand { align-items: baseline; gap: 6px; }
|
|
95
|
+
.runner-brand-mark { color: var(--runner-blue); font-size: 13px; letter-spacing: .04em; }
|
|
96
|
+
.runner-brand-product { color: var(--runner-ink); font-size: 13px; font-weight: 500; }
|
|
97
|
+
.alpha-label { padding-left: 2px; color: var(--runner-faint); font-family: ui-monospace, monospace; font-size: 9.5px; }
|
|
98
|
+
.runner-header .about-button,
|
|
99
|
+
.runner-header .demo-entry { height: 25px; padding: 0 9px; border: 0; border-radius: 4px; background: transparent; color: var(--runner-ink-2); font-size: 12px; font-weight: 400; }
|
|
100
|
+
.runner-header .about-button:hover,
|
|
101
|
+
.runner-header .demo-entry:hover { background: var(--runner-surface-3); color: var(--runner-ink); }
|
|
102
|
+
.runner-header .demo-entry { display: inline-flex; align-items: center; text-decoration: none; }
|
|
103
|
+
.theme-picker { gap: 7px; color: var(--runner-ink-2); font-size: 12px; font-weight: 700; white-space: nowrap; }
|
|
104
|
+
.theme-picker select { min-width: 82px; height: 30px; padding: 0 8px; border-color: var(--runner-line); border-radius: 6px; background: var(--runner-surface); color: var(--runner-ink); font: inherit; font-weight: 400; }
|
|
105
|
+
|
|
106
|
+
/* Keep Runner aligned with the shared QAICK Studio design tokens. These are
|
|
107
|
+
Runner-scoped names so the integrated stylesheet does not overwrite Studio's
|
|
108
|
+
own variables. Execution statuses retain their semantic colours below. */
|
|
109
|
+
:root {
|
|
110
|
+
--runner-blue: #4f46d8;
|
|
111
|
+
--runner-blue-strong: #3f37b8;
|
|
112
|
+
--runner-blue-soft: #e8eeff;
|
|
113
|
+
--runner-blue-line: #c8d5fa;
|
|
114
|
+
--runner-ink: #182234;
|
|
115
|
+
--runner-ink-2: #34435b;
|
|
116
|
+
--runner-muted: #617089;
|
|
117
|
+
--runner-faint: #7c8aa0;
|
|
118
|
+
--runner-surface: #fff;
|
|
119
|
+
--runner-surface-2: #f7f8fc;
|
|
120
|
+
--runner-surface-3: #edf0f7;
|
|
121
|
+
--runner-pane: #eef0f2;
|
|
122
|
+
--runner-heading: #e1e4e8;
|
|
123
|
+
--runner-divider: #cbd1d8;
|
|
124
|
+
--runner-line: #e5e7eb;
|
|
125
|
+
--runner-line-strong: #cfd5dd;
|
|
126
|
+
--runner-ok: #14804a;
|
|
127
|
+
--runner-ok-soft: #e6f5ec;
|
|
128
|
+
--runner-warn: #92620a;
|
|
129
|
+
--runner-warn-soft: #fdf3e2;
|
|
130
|
+
--runner-fail: #bc3327;
|
|
131
|
+
--runner-fail-soft: #fdecea;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
:root[data-theme='dark'] {
|
|
135
|
+
--runner-blue: #8b9cff;
|
|
136
|
+
--runner-blue-strong: #aab5ff;
|
|
137
|
+
--runner-blue-soft: #252c4b;
|
|
138
|
+
--runner-blue-line: #4a5684;
|
|
139
|
+
--runner-ink: #edf1f8;
|
|
140
|
+
--runner-ink-2: #c8d1e2;
|
|
141
|
+
--runner-muted: #9da9bd;
|
|
142
|
+
--runner-faint: #7d899e;
|
|
143
|
+
--runner-surface: #171b24;
|
|
144
|
+
--runner-surface-2: #1d2230;
|
|
145
|
+
--runner-surface-3: #282f3e;
|
|
146
|
+
--runner-pane: #1b202a;
|
|
147
|
+
--runner-heading: #252c37;
|
|
148
|
+
--runner-divider: #3b4555;
|
|
149
|
+
--runner-line: #303949;
|
|
150
|
+
--runner-line-strong: #465267;
|
|
151
|
+
--runner-ok: #67d39a;
|
|
152
|
+
--runner-ok-soft: #1b382b;
|
|
153
|
+
--runner-warn: #e8bd66;
|
|
154
|
+
--runner-warn-soft: #3a301d;
|
|
155
|
+
--runner-fail: #ff8d83;
|
|
156
|
+
--runner-fail-soft: #402522;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
:root,
|
|
160
|
+
:root[data-theme='dark'] {
|
|
161
|
+
color: var(--runner-ink);
|
|
162
|
+
background: var(--runner-surface);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
body { background: var(--runner-surface-2); }
|
|
166
|
+
.runner-header,
|
|
167
|
+
.runner-nav,
|
|
168
|
+
.inspector,
|
|
169
|
+
.panel,
|
|
170
|
+
.button,
|
|
171
|
+
.file-button,
|
|
172
|
+
select,
|
|
173
|
+
.input-field input,
|
|
174
|
+
.about-button,
|
|
175
|
+
.about-dialog,
|
|
176
|
+
.hierarchy-action,
|
|
177
|
+
.runner-context-menu { border-color: var(--runner-line-strong); background: var(--runner-surface); color: var(--runner-ink-2); }
|
|
178
|
+
.runner-header { border-color: var(--runner-divider); }
|
|
179
|
+
.runner-brand-mark,
|
|
180
|
+
.runner-logo,
|
|
181
|
+
.button.primary,
|
|
182
|
+
.button.resume-highlight { background: var(--runner-blue); color: #fff; }
|
|
183
|
+
.runner-brand-mark { background: transparent; color: var(--runner-blue); }
|
|
184
|
+
.runner-brand-product,
|
|
185
|
+
.runner-header strong,
|
|
186
|
+
h1,
|
|
187
|
+
h2,
|
|
188
|
+
h3,
|
|
189
|
+
td,
|
|
190
|
+
.package-card strong,
|
|
191
|
+
.about-dialog h2 { color: var(--runner-ink); }
|
|
192
|
+
.alpha-label,
|
|
193
|
+
.nav-label,
|
|
194
|
+
.eyebrow,
|
|
195
|
+
.package-card small,
|
|
196
|
+
.run-id,
|
|
197
|
+
.input-hint,
|
|
198
|
+
.theme-picker,
|
|
199
|
+
label { color: var(--runner-muted); }
|
|
200
|
+
.runner-workspace { background: var(--runner-surface-2); }
|
|
201
|
+
.runner-nav { border-color: var(--runner-divider); }
|
|
202
|
+
.inspector { border-color: var(--runner-divider); }
|
|
203
|
+
.nav-item { color: var(--runner-muted); }
|
|
204
|
+
.nav-item.active { color: var(--runner-blue-strong); background: var(--runner-blue-soft); }
|
|
205
|
+
.package-card,
|
|
206
|
+
.notice { border-color: var(--runner-line); background: var(--runner-surface-3); color: var(--runner-muted); }
|
|
207
|
+
.button:hover,
|
|
208
|
+
.file-button:hover,
|
|
209
|
+
.about-button:hover { border-color: var(--runner-blue-line); background: var(--runner-blue-soft); }
|
|
210
|
+
.button.primary:hover,
|
|
211
|
+
.button.resume-highlight:hover { border-color: var(--runner-blue-strong); background: var(--runner-blue-strong); }
|
|
212
|
+
.panel-heading,
|
|
213
|
+
.inspector-section { border-color: var(--runner-line); }
|
|
214
|
+
th { color: var(--runner-faint); background: var(--runner-surface-2); }
|
|
215
|
+
td { border-color: var(--runner-line); }
|
|
216
|
+
tr.parent-row td,
|
|
217
|
+
.loop-content td { background: var(--runner-surface); }
|
|
218
|
+
tr.nested-row td { background: var(--runner-surface-3); }
|
|
219
|
+
tr.selected td { background: var(--runner-blue-soft) !important; border-top-color: var(--runner-blue-line); }
|
|
220
|
+
tr.selected td:first-child { border-left-color: var(--runner-blue); }
|
|
221
|
+
tr.selected .hierarchy-name,
|
|
222
|
+
.selected-detail-name,
|
|
223
|
+
code { color: var(--runner-blue-strong); }
|
|
224
|
+
.hierarchy-hint { border-color: var(--runner-blue-line); color: var(--runner-blue-strong); background: var(--runner-blue-soft); }
|
|
225
|
+
.hierarchy-hint span,
|
|
226
|
+
.parallel-details { color: var(--runner-muted); }
|
|
227
|
+
.hierarchy-action,
|
|
228
|
+
.collapse-toggle { border-color: var(--runner-blue-line); color: var(--runner-blue-strong); background: var(--runner-surface); }
|
|
229
|
+
.kind-label { color: var(--runner-muted); background: var(--runner-surface-3); }
|
|
230
|
+
.nested-label,
|
|
231
|
+
.loop-label { color: var(--runner-blue-strong); background: var(--runner-blue-soft); }
|
|
232
|
+
.key-values,
|
|
233
|
+
.iteration-entry,
|
|
234
|
+
.timing-details,
|
|
235
|
+
.branch-path,
|
|
236
|
+
.result-summary { border-color: var(--runner-line); background: var(--runner-surface); }
|
|
237
|
+
.key-values span:nth-child(odd) { color: var(--runner-muted); background: var(--runner-surface-2); }
|
|
238
|
+
.iteration-entry span,
|
|
239
|
+
.iteration-entry small,
|
|
240
|
+
.timing-details,
|
|
241
|
+
.branch-path-row small,
|
|
242
|
+
.result-summary { color: var(--runner-muted); }
|
|
243
|
+
.status.finished,
|
|
244
|
+
.validation-pass { color: var(--runner-ok); background: var(--runner-ok-soft); }
|
|
245
|
+
.status.waiting { color: var(--runner-warn); background: var(--runner-warn-soft); }
|
|
246
|
+
.status.failed,
|
|
247
|
+
.status.cancelled,
|
|
248
|
+
.validation-failed { color: var(--runner-fail); background: var(--runner-fail-soft); }
|
|
249
|
+
.error-notice { border-color: color-mix(in srgb, var(--runner-fail) 35%, var(--runner-surface)); color: var(--runner-fail); background: var(--runner-fail-soft); }
|
|
250
|
+
:root[data-theme='dark'] .runner-header,
|
|
251
|
+
:root[data-theme='dark'] .runner-nav,
|
|
252
|
+
:root[data-theme='dark'] .inspector,
|
|
253
|
+
:root[data-theme='dark'] .panel,
|
|
254
|
+
:root[data-theme='dark'] .button,
|
|
255
|
+
:root[data-theme='dark'] select,
|
|
256
|
+
:root[data-theme='dark'] .input-field input,
|
|
257
|
+
:root[data-theme='dark'] .about-button,
|
|
258
|
+
:root[data-theme='dark'] .about-dialog { background: var(--runner-surface); color: var(--runner-ink); }
|
|
259
|
+
:root[data-theme='dark'] .runner-workspace { background: var(--runner-surface-2); }
|
|
260
|
+
:root[data-theme='dark'] .package-card,
|
|
261
|
+
:root[data-theme='dark'] .notice,
|
|
262
|
+
:root[data-theme='dark'] .kind-label { background: var(--runner-surface-3); color: var(--runner-ink-2); }
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@qaick/runner",
|
|
3
|
+
"description": "Reusable QAick Runner module and standalone execution application.",
|
|
4
|
+
"version": "0.2.0-alpha.10",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"package-dist",
|
|
8
|
+
"README.md"
|
|
9
|
+
],
|
|
10
|
+
"main": "./package-dist/src/runner/RunnerModule.js",
|
|
11
|
+
"types": "./package-dist/src/runner/RunnerModule.d.ts",
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public",
|
|
14
|
+
"tag": "alpha"
|
|
15
|
+
},
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./package-dist/src/runner/RunnerModule.d.ts",
|
|
19
|
+
"import": "./package-dist/src/runner/RunnerModule.js"
|
|
20
|
+
},
|
|
21
|
+
"./runner-module": {
|
|
22
|
+
"types": "./package-dist/src/runner/RunnerModule.d.ts",
|
|
23
|
+
"import": "./package-dist/src/runner/RunnerModule.js"
|
|
24
|
+
},
|
|
25
|
+
"./runtime-client-adapter": {
|
|
26
|
+
"types": "./package-dist/src/runner/runtime-client-adapter.d.ts",
|
|
27
|
+
"import": "./package-dist/src/runner/runtime-client-adapter.js"
|
|
28
|
+
},
|
|
29
|
+
"./styles.css": "./package-dist/styles.css",
|
|
30
|
+
"./package.json": "./package.json"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"dev": "vite",
|
|
34
|
+
"build": "tsc -b && vite build",
|
|
35
|
+
"build:package": "node scripts/build-package.mjs",
|
|
36
|
+
"check:package": "npm run build:package && node scripts/check-package.mjs",
|
|
37
|
+
"pack:check": "npm run build:package && npm pack --dry-run",
|
|
38
|
+
"pack:tarball": "npm run build:package && npm pack",
|
|
39
|
+
"publish:alpha": "npm run check:package && npm publish --tag alpha",
|
|
40
|
+
"package:standalone": "npm run build && node scripts/package-standalone.mjs",
|
|
41
|
+
"smoke": "node scripts/smoke-check.mjs",
|
|
42
|
+
"smoke:deployment": "node scripts/smoke-check.mjs --deployment",
|
|
43
|
+
"lint": "oxlint",
|
|
44
|
+
"verify": "npm test && npm run build && npm run smoke && npm run lint",
|
|
45
|
+
"verify:clean": "npm ci && npm run verify",
|
|
46
|
+
"build:cloudflare": "npm run build",
|
|
47
|
+
"deploy:cloudflare": "npx wrangler deploy",
|
|
48
|
+
"deploy:cloudflare:preview": "npx wrangler versions upload",
|
|
49
|
+
"deploy": "npm run deploy:cloudflare",
|
|
50
|
+
"preview": "vite preview",
|
|
51
|
+
"test": "vitest run",
|
|
52
|
+
"typecheck": "tsc -b"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@qaick/contract": "0.2.10",
|
|
56
|
+
"@qaick/executor": "0.1.0-alpha.1",
|
|
57
|
+
"@qaick/http-executor": "0.1.0-alpha.1",
|
|
58
|
+
"@qaick/runtime": "0.1.0-alpha.2",
|
|
59
|
+
"zustand": "^5.0.15"
|
|
60
|
+
},
|
|
61
|
+
"peerDependencies": {
|
|
62
|
+
"react": ">=19.0.0",
|
|
63
|
+
"react-dom": ">=19.0.0"
|
|
64
|
+
},
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@vitejs/plugin-react": "^6.1.1",
|
|
67
|
+
"@testing-library/dom": "^10.4.2",
|
|
68
|
+
"@testing-library/react": "^16.3.3",
|
|
69
|
+
"@types/node": "^24.13.3",
|
|
70
|
+
"@types/react": "^19.2.18",
|
|
71
|
+
"@types/react-dom": "^19.2.7",
|
|
72
|
+
"jsdom": "^30.0.1",
|
|
73
|
+
"oxlint": "^1.81.0",
|
|
74
|
+
"react": "^19.2.8",
|
|
75
|
+
"react-dom": "^19.2.8",
|
|
76
|
+
"typescript": "~6.0.2",
|
|
77
|
+
"vite": "^8.3.0",
|
|
78
|
+
"vitest": "^5.0.0"
|
|
79
|
+
}
|
|
80
|
+
}
|