@kb-labs/workflow-entry 2.29.0 → 2.31.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/package.json +6 -6
- package/dist/widgets/117.js +0 -2
- package/dist/widgets/117.js.map +0 -1
- package/dist/widgets/297.js +0 -2
- package/dist/widgets/297.js.map +0 -1
- package/dist/widgets/338.js +0 -2
- package/dist/widgets/338.js.map +0 -1
- package/dist/widgets/370.js +0 -2
- package/dist/widgets/370.js.map +0 -1
- package/dist/widgets/451.js +0 -2
- package/dist/widgets/451.js.map +0 -1
- package/dist/widgets/50.js +0 -2
- package/dist/widgets/50.js.map +0 -1
- package/dist/widgets/586.js +0 -39
- package/dist/widgets/586.js.map +0 -1
- package/dist/widgets/59.js +0 -2
- package/dist/widgets/59.js.map +0 -1
- package/dist/widgets/607.js +0 -2
- package/dist/widgets/607.js.map +0 -1
- package/dist/widgets/626.js +0 -2
- package/dist/widgets/626.js.map +0 -1
- package/dist/widgets/669.js +0 -2
- package/dist/widgets/669.js.map +0 -1
- package/dist/widgets/678.js +0 -2
- package/dist/widgets/678.js.map +0 -1
- package/dist/widgets/716.js +0 -2
- package/dist/widgets/716.js.map +0 -1
- package/dist/widgets/781.js +0 -2
- package/dist/widgets/781.js.map +0 -1
- package/dist/widgets/842.js +0 -446
- package/dist/widgets/842.js.map +0 -1
- package/dist/widgets/968.js +0 -10
- package/dist/widgets/968.js.map +0 -1
- package/dist/widgets/997.js +0 -35
- package/dist/widgets/997.js.map +0 -1
- package/dist/widgets/@mf-types.d.ts +0 -3
- package/dist/widgets/@mf-types.zip +0 -0
- package/dist/widgets/__federation_expose_Crons.js +0 -2
- package/dist/widgets/__federation_expose_Crons.js.map +0 -1
- package/dist/widgets/__federation_expose_Dashboard.js +0 -2
- package/dist/widgets/__federation_expose_Dashboard.js.map +0 -1
- package/dist/widgets/__federation_expose_DefinitionDetail.js +0 -2
- package/dist/widgets/__federation_expose_DefinitionDetail.js.map +0 -1
- package/dist/widgets/__federation_expose_Definitions.js +0 -2
- package/dist/widgets/__federation_expose_Definitions.js.map +0 -1
- package/dist/widgets/__federation_expose_Jobs.js +0 -2
- package/dist/widgets/__federation_expose_Jobs.js.map +0 -1
- package/dist/widgets/__federation_expose_RunDetail.js +0 -110
- package/dist/widgets/__federation_expose_RunDetail.js.map +0 -1
- package/dist/widgets/__federation_expose_Runs.js +0 -2
- package/dist/widgets/__federation_expose_Runs.js.map +0 -1
- package/dist/widgets/mf-manifest.json +0 -456
- package/dist/widgets/mf-stats.json +0 -560
- package/dist/widgets/remoteEntry.js +0 -7
- package/dist/widgets/remoteEntry.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"__federation_expose_RunDetail.js","sources":["webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/artifacts.module.css","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/runtime/api.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://@kb-labs/workflow-entry/./src/studio/components/ApprovalModal.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/pipeline/StepDetailDrawer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/pipeline/PipelineView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/MarkdownViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/artifacts.module.css?4ce2","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/IssuesViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/TableViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/DiffViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/LogViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/LinkViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/ArtifactViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/dashboard/DashboardView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/pages/WorkflowRunDetail.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* ── Markdown editor ── */\n.eKkdFRPP08w0ipmt {\n width: 100%;\n min-height: 200px;\n font-family: monospace;\n font-size: 13px;\n padding: 12px;\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n background: var(--bg-primary);\n color: var(--text-primary);\n resize: vertical;\n box-sizing: border-box;\n}\n\n.xlFaIxn8H1U2vmZd {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n\n/* ── Issues ── */\n.EflSZ182vBIy0S2M {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.pie3p6utzf8rTfUu {\n padding: 8px 12px;\n background: var(--bg-secondary);\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n}\n\n.Al1WXNwqfC0ju3OY {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.qUayT4ACFY4Pv93l {\n font-size: 12px;\n color: var(--text-secondary);\n font-family: monospace;\n}\n\n.K5oooXXvNFAN7bDb {\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.tArqFztlCu4cPnh5 {\n font-size: 12px;\n color: var(--text-secondary);\n margin-top: 4px;\n font-style: italic;\n}\n\n/* ── Log ── */\n.xRIfIRB1FQYzXPeI {\n margin: 0;\n padding: 12px;\n border-radius: 6px;\n font-size: 13px;\n line-height: 1.6;\n overflow: auto;\n background: #0d1117;\n color: #c9d1d9;\n font-family: monospace;\n max-height: 400px;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* ── Link ── */\n.Fdjb7OQrUoEC9TE7 {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n background: var(--bg-secondary);\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n font-size: 13px;\n color: var(--link);\n text-decoration: none;\n font-weight: 500;\n transition: background 0.15s;\n}\n\n.Fdjb7OQrUoEC9TE7:hover {\n background: var(--bg-tertiary, var(--bg-secondary));\n border-color: var(--link);\n}\n\n.MPGw8m2NoAVGUlis {\n font-size: 11px;\n opacity: 0.6;\n}\n\n/* ── Empty state ── */\n.CQMnm5XuOUksgiz3 {\n color: var(--text-tertiary);\n font-size: 13px;\n padding: 12px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/studio/components/artifacts/artifacts.module.css\"],\"names\":[],\"mappings\":\"AAAA,0BAA0B;AAC1B;EACE,WAAW;EACX,iBAAiB;EACjB,sBAAsB;EACtB,eAAe;EACf,aAAa;EACb,uCAAuC;EACvC,kBAAkB;EAClB,6BAA6B;EAC7B,0BAA0B;EAC1B,gBAAgB;EAChB,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,eAAe;AACjB;;AAEA,iBAAiB;AACjB;EACE,aAAa;EACb,sBAAsB;EACtB,QAAQ;AACV;;AAEA;EACE,iBAAiB;EACjB,+BAA+B;EAC/B,uCAAuC;EACvC,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,kBAAkB;AACpB;;AAEA;EACE,eAAe;EACf,4BAA4B;EAC5B,sBAAsB;AACxB;;AAEA;EACE,eAAe;EACf,0BAA0B;AAC5B;;AAEA;EACE,eAAe;EACf,4BAA4B;EAC5B,eAAe;EACf,kBAAkB;AACpB;;AAEA,cAAc;AACd;EACE,SAAS;EACT,aAAa;EACb,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,mBAAmB;EACnB,cAAc;EACd,sBAAsB;EACtB,iBAAiB;EACjB,qBAAqB;EACrB,sBAAsB;AACxB;;AAEA,eAAe;AACf;EACE,oBAAoB;EACpB,mBAAmB;EACnB,QAAQ;EACR,iBAAiB;EACjB,+BAA+B;EAC/B,uCAAuC;EACvC,kBAAkB;EAClB,eAAe;EACf,kBAAkB;EAClB,qBAAqB;EACrB,gBAAgB;EAChB,4BAA4B;AAC9B;;AAEA;EACE,mDAAmD;EACnD,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,YAAY;AACd;;AAEA,sBAAsB;AACtB;EACE,2BAA2B;EAC3B,eAAe;EACf,aAAa;AACf\",\"sourcesContent\":[\"/* ── Markdown editor ── */\\n.textarea {\\n width: 100%;\\n min-height: 200px;\\n font-family: monospace;\\n font-size: 13px;\\n padding: 12px;\\n border: 1px solid var(--border-primary);\\n border-radius: 6px;\\n background: var(--bg-primary);\\n color: var(--text-primary);\\n resize: vertical;\\n box-sizing: border-box;\\n}\\n\\n.editActions {\\n display: flex;\\n gap: 8px;\\n margin-top: 8px;\\n}\\n\\n/* ── Issues ── */\\n.issueList {\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n}\\n\\n.issueItem {\\n padding: 8px 12px;\\n background: var(--bg-secondary);\\n border: 1px solid var(--border-primary);\\n border-radius: 6px;\\n}\\n\\n.issueHeader {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n margin-bottom: 4px;\\n}\\n\\n.issueFile {\\n font-size: 12px;\\n color: var(--text-secondary);\\n font-family: monospace;\\n}\\n\\n.issueMessage {\\n font-size: 13px;\\n color: var(--text-primary);\\n}\\n\\n.issueFix {\\n font-size: 12px;\\n color: var(--text-secondary);\\n margin-top: 4px;\\n font-style: italic;\\n}\\n\\n/* ── Log ── */\\n.logPre {\\n margin: 0;\\n padding: 12px;\\n border-radius: 6px;\\n font-size: 13px;\\n line-height: 1.6;\\n overflow: auto;\\n background: #0d1117;\\n color: #c9d1d9;\\n font-family: monospace;\\n max-height: 400px;\\n white-space: pre-wrap;\\n word-break: break-word;\\n}\\n\\n/* ── Link ── */\\n.link {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 5px 12px;\\n background: var(--bg-secondary);\\n border: 1px solid var(--border-primary);\\n border-radius: 6px;\\n font-size: 13px;\\n color: var(--link);\\n text-decoration: none;\\n font-weight: 500;\\n transition: background 0.15s;\\n}\\n\\n.link:hover {\\n background: var(--bg-tertiary, var(--bg-secondary));\\n border-color: var(--link);\\n}\\n\\n.linkArrow {\\n font-size: 11px;\\n opacity: 0.6;\\n}\\n\\n/* ── Empty state ── */\\n.empty {\\n color: var(--text-tertiary);\\n font-size: 13px;\\n padding: 12px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport var textarea = `eKkdFRPP08w0ipmt`;\nexport var editActions = `xlFaIxn8H1U2vmZd`;\nexport var issueList = `EflSZ182vBIy0S2M`;\nexport var issueItem = `pie3p6utzf8rTfUu`;\nexport var issueHeader = `Al1WXNwqfC0ju3OY`;\nexport var issueFile = `qUayT4ACFY4Pv93l`;\nexport var issueMessage = `K5oooXXvNFAN7bDb`;\nexport var issueFix = `tArqFztlCu4cPnh5`;\nexport var logPre = `xRIfIRB1FQYzXPeI`;\nexport var link = `Fdjb7OQrUoEC9TE7`;\nexport var linkArrow = `MPGw8m2NoAVGUlis`;\nexport var empty = `CQMnm5XuOUksgiz3`;\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","import { useState } from 'react'\nimport {\n UIModal,\n UIButton,\n UIAlert,\n UITypographyText,\n UITypographyParagraph,\n UITitle,\n UIInputTextArea,\n} from '@kb-labs/sdk/studio'\nimport type { StepRun } from '@kb-labs/workflow-contracts'\n\nconst Text = UITypographyText\nconst Paragraph = UITypographyParagraph\nconst Title = UITitle\nconst TextArea = UIInputTextArea\n\ninterface ApprovalModalProps {\n step: StepRun | null\n runId: string\n open: boolean\n onClose: () => void\n onResolve: (action: 'approve' | 'reject', comment?: string) => Promise<void>\n isLoading?: boolean\n error?: Error | null\n}\n\nexport function ApprovalModal({\n step,\n runId: _runId,\n open,\n onClose,\n onResolve,\n isLoading,\n error,\n}: ApprovalModalProps) {\n const [comment, setComment] = useState('')\n const [pendingAction, setPendingAction] = useState<'approve' | 'reject' | null>(null)\n\n const context = (step?.spec?.with ?? {}) as Record<string, unknown>\n const title = typeof context.title === 'string' ? context.title : step?.name ?? 'Approval Required'\n const instructions = typeof context.instructions === 'string' ? context.instructions : null\n const contextData = typeof context.context === 'object' && context.context !== null\n ? context.context as Record<string, unknown>\n : null\n\n const handleResolve = async (action: 'approve' | 'reject') => {\n setPendingAction(action)\n try {\n await onResolve(action, comment.trim() || undefined)\n setComment('')\n setPendingAction(null)\n } catch {\n setPendingAction(null)\n }\n }\n\n return (\n <UIModal\n open={open}\n title={title}\n width=\"large\"\n maskClosable={false}\n onCancel={onClose}\n footer={null}\n >\n {instructions && (\n <Paragraph style={{ marginBottom: 16 }}>\n <Text type=\"secondary\">{instructions}</Text>\n </Paragraph>\n )}\n\n {contextData && Object.keys(contextData).length > 0 && (\n <div style={{ marginBottom: 16 }}>\n <Title level={5} style={{ marginBottom: 8 }}>Context</Title>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>\n {Object.entries(contextData).map(([key, value]) => (\n <div key={key} style={{ display: 'flex', gap: 8 }}>\n <Text strong style={{ minWidth: 100, textTransform: 'capitalize' }}>\n {key.replace(/([A-Z])/g, ' $1').trim()}:\n </Text>\n <Text>{String(value ?? '—')}</Text>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {error && (\n <UIAlert\n variant=\"error\"\n message={error.message}\n style={{ marginBottom: 16 }}\n showIcon\n />\n )}\n\n <div style={{ marginBottom: 16 }}>\n <Title level={5} style={{ marginBottom: 8 }}>Comment (optional)</Title>\n <TextArea\n rows={3}\n placeholder=\"Add a comment for the record...\"\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n disabled={isLoading}\n />\n </div>\n\n <div style={{ display: 'flex', gap: 8, justifyContent: 'flex-end' }}>\n <UIButton\n onClick={onClose}\n disabled={isLoading}\n >\n Cancel\n </UIButton>\n <UIButton\n danger\n onClick={() => void handleResolve('reject')}\n loading={isLoading && pendingAction === 'reject'}\n disabled={isLoading && pendingAction !== 'reject'}\n >\n Reject\n </UIButton>\n <UIButton\n variant=\"primary\"\n onClick={() => void handleResolve('approve')}\n loading={isLoading && pendingAction === 'approve'}\n disabled={isLoading && pendingAction !== 'approve'}\n >\n Approve\n </UIButton>\n </div>\n </UIModal>\n )\n}\n","/**\n * Drawer that shows step details when a node is clicked in PipelineView.\n * Reuses the existing StepPanel logic inline to avoid circular imports.\n */\n\nimport { useMemo, useRef, useEffect } from 'react'\nimport { UIDrawer, UIButton, UITabs, UIJsonViewer, UITypographyText } from '@kb-labs/sdk/studio'\nimport type { UITabItem } from '@kb-labs/sdk/studio'\nimport type { StepRun } from '@kb-labs/workflow-contracts'\nimport type { WorkflowLogEvent } from '@kb-labs/workflow-contracts/rest-api'\n\nconst Text = UITypographyText\n\nconst STATUS_LABEL: Record<string, string> = {\n queued: 'Queued',\n running: 'Running...',\n success: 'Completed',\n failed: 'Failed',\n cancelled: 'Cancelled',\n skipped: 'Skipped',\n waiting_approval: 'Waiting for your decision',\n}\n\nconst STATUS_COLOR: Record<string, string> = {\n queued: 'var(--text-tertiary)',\n running: 'var(--warning)',\n success: 'var(--success)',\n failed: 'var(--error)',\n cancelled: 'var(--text-tertiary)',\n skipped: 'var(--text-tertiary)',\n waiting_approval: 'var(--info)',\n}\n\nfunction formatDuration(ms?: number): string | null {\n if (!ms) {return null}\n if (ms < 1000) {return `${ms}ms`}\n const s = ms / 1000\n if (s < 60) {return `${s.toFixed(1)}s`}\n return `${Math.floor(s / 60)}m ${Math.floor(s % 60)}s`\n}\n\ninterface LogLine { time: string; text: string; stream?: 'stdout' | 'stderr' }\n\n// Strip ANSI escape codes from text\n \nconst ANSI_RE = /\\x1b\\[[0-9;]*[A-Za-z]|\\x1b\\].*?\\x07/g\nfunction stripAnsi(s: string): string { return s.replace(ANSI_RE, '') }\n\nfunction extractLogLines(ev: WorkflowLogEvent): LogLine[] {\n const time = ev.timestamp ? new Date(ev.timestamp).toLocaleTimeString('en-US', { hour12: false }) : ''\n const p = ev.payload as Record<string, unknown> | undefined\n if (!p) {return []}\n\n // Live log.appended events (real-time streaming)\n if (ev.type === 'log.appended') {\n const msg = typeof p.message === 'string' ? stripAnsi(p.message) : ''\n if (!msg) {return []}\n const stream = (p.stream as 'stdout' | 'stderr') ?? 'stdout'\n return [{ time, text: msg, stream }]\n }\n\n const stdout = (p.outputs as Record<string, unknown> | undefined)?.stdout ?? p.stdout\n if (typeof stdout === 'string' && stdout.trim()) {\n return stripAnsi(stdout).trim().split('\\n').map(text => ({ time, text, stream: 'stdout' as const }))\n }\n const stderr = (p.outputs as Record<string, unknown> | undefined)?.stderr ?? p.stderr\n if (typeof stderr === 'string' && stderr.trim()) {\n return stripAnsi(stderr).trim().split('\\n').map(text => ({ time, text, stream: 'stderr' as const }))\n }\n if (typeof p.error === 'string') {return [{ time, text: p.error, stream: 'stderr' }]}\n if (typeof p.message === 'string') {return [{ time, text: p.message }]}\n if (typeof p.line === 'string') {return [{ time, text: p.line }]}\n if (typeof p.text === 'string') {return [{ time, text: p.text }]}\n return []\n}\n\nconst LOG_SKIP_KEYS = new Set(['stdout', 'stderr', 'exitCode', 'ok'])\n\ninterface StepDetailDrawerProps {\n step: StepRun | null\n events: WorkflowLogEvent[]\n open: boolean\n onClose: () => void\n onApprove?: () => void\n}\n\nexport function StepDetailDrawer({ step, events, open, onClose, onApprove }: StepDetailDrawerProps) {\n const sseLines = useMemo(() => events.flatMap(extractLogLines), [events])\n const logRef = useRef<HTMLPreElement>(null)\n\n // Auto-scroll to bottom when new lines arrive\n useEffect(() => {\n const el = logRef.current\n if (!el) {return}\n const isNearBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 80\n if (isNearBottom) {\n el.scrollTop = el.scrollHeight\n }\n }, [sseLines.length])\n\n const pollingLines = useMemo<LogLine[]>(() => {\n if (!step?.outputs || sseLines.length > 0) {return []}\n const lines: LogLine[] = []\n const { stdout, stderr } = step.outputs as { stdout?: unknown; stderr?: unknown }\n if (typeof stdout === 'string' && stdout.trim()) {\n stdout.trim().split('\\n').forEach(text => lines.push({ time: '', text }))\n }\n if (typeof stderr === 'string' && stderr.trim()) {\n stderr.trim().split('\\n').forEach(text => lines.push({ time: '', text }))\n }\n if (lines.length === 0) {\n const keys = Object.keys(step.outputs).filter(k => !LOG_SKIP_KEYS.has(k))\n if (keys.length > 0) {lines.push({ time: '', text: `Output: { ${keys.join(', ')} }` })}\n }\n return lines\n }, [step?.outputs, sseLines.length])\n\n const lines = sseLines.length > 0 ? sseLines : pollingLines\n\n const dataOutputs = useMemo(() => {\n if (!step?.outputs) {return null}\n const filtered: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(step.outputs)) {\n if (!LOG_SKIP_KEYS.has(k)) {filtered[k] = v}\n }\n return Object.keys(filtered).length > 0 ? filtered : null\n }, [step?.outputs])\n\n const hasInputs = step?.spec?.with != null && Object.keys(step.spec.with).length > 0\n const hasError = step?.error != null\n const hasData = dataOutputs !== null\n\n const logContent = (\n <div style={{ fontFamily: 'monospace', fontSize: 12 }}>\n {lines.length > 0 ? (\n <pre ref={logRef} style={{\n margin: 0,\n padding: '8px 12px',\n background: '#0d1117',\n color: '#c9d1d9',\n borderRadius: 4,\n overflow: 'auto',\n maxHeight: 500,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n lineHeight: 1.6,\n }}>\n {lines.map((l, i) => (\n <span key={i}>\n {l.time && <span style={{ color: 'var(--text-tertiary)', userSelect: 'none', marginRight: 12 }}>{l.time}</span>}\n <span style={l.stream === 'stderr' ? { color: '#f85149' } : undefined}>{l.text}</span>{'\\n'}\n </span>\n ))}\n </pre>\n ) : (\n <Text type=\"secondary\" style={{ fontSize: 12 }}>\n {step?.status === 'running' ? 'Waiting for output...' :\n step?.status === 'queued' ? 'Not started yet' :\n step?.status === 'waiting_approval' ? 'Waiting for approval' :\n 'No output'}\n </Text>\n )}\n </div>\n )\n\n const tabItems: UITabItem[] = [\n { key: 'log', label: 'Log', children: logContent },\n ]\n if (hasData) {tabItems.push({ key: 'data', label: 'Data', children: <UIJsonViewer data={dataOutputs} /> })}\n if (hasInputs) {tabItems.push({ key: 'inputs', label: 'Inputs', children: <UIJsonViewer data={step!.spec!.with} /> })}\n if (hasError) {tabItems.push({ key: 'error', label: 'Error', children: <UIJsonViewer data={step!.error} /> })}\n\n const statusColor = STATUS_COLOR[step?.status ?? 'queued']\n const duration = formatDuration(step?.durationMs)\n\n return (\n <UIDrawer\n open={open}\n onClose={onClose}\n title={\n <div style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <span style={{ fontSize: 14, fontWeight: 600 }}>{step?.name ?? ''}</span>\n <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>\n <span style={{ fontSize: 12, color: statusColor, fontWeight: 600 }}>\n {STATUS_LABEL[step?.status ?? 'queued']}\n </span>\n {duration && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>\n {duration}\n </span>\n )}\n </div>\n </div>\n }\n placement=\"right\"\n width={520}\n footer={\n step?.status === 'waiting_approval' && onApprove ? (\n <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n <UIButton variant=\"primary\" onClick={onApprove}>\n Review & Decide\n </UIButton>\n </div>\n ) : null\n }\n >\n {step && (\n tabItems.length > 1\n ? <UITabs items={tabItems} size=\"small\" defaultActiveKey=\"log\" />\n : logContent\n )}\n </UIDrawer>\n )\n}\n","/**\n * Pipeline visualization.\n * Steps are rows, not cards — clean and scannable.\n * Gate rework: shows decision reason + feedback inline below gate row.\n */\n\nimport { useState, useRef, useEffect } from 'react'\nimport type { WorkflowRun, StepRun } from '@kb-labs/workflow-contracts'\nimport type { WorkflowLogEvent } from '@kb-labs/workflow-contracts/rest-api'\nimport { usePipelineModel } from '../../hooks/use-pipeline-graph'\nimport type { PipelineStep } from '../../hooks/use-pipeline-graph'\nimport { StepDetailDrawer } from './StepDetailDrawer'\n\n// ─── CSS ──────────────────────────────────────────────────────────────────────\n\nconst ANIM_CSS = `\n@keyframes kb-spin { 0% { transform: rotate(0deg) } 100% { transform: rotate(360deg) } }\n@keyframes kb-shimmer { 0% { left: -60% } 100% { left: 120% } }\n`\nlet injected = false\nfunction injectCss() {\n if (injected || typeof document === 'undefined') {return}\n injected = true\n const s = document.createElement('style')\n s.textContent = ANIM_CSS\n document.head.appendChild(s)\n}\n\n// ─── Status ───────────────────────────────────────────────────────────────────\n\nconst S_COLOR: Record<string, string> = {\n queued: 'var(--text-tertiary)',\n running: 'var(--warning)',\n success: 'var(--success)',\n failed: 'var(--error)',\n cancelled: 'var(--text-tertiary)',\n skipped: 'var(--text-tertiary)',\n waiting_approval: 'var(--info)',\n}\n\nconst S_LABEL: Record<string, string> = {\n queued: 'Queued',\n running: 'Running',\n success: 'Done',\n failed: 'Failed',\n cancelled: 'Cancelled',\n skipped: 'Skipped',\n waiting_approval: 'Review',\n}\n\nfunction StatusDot({ status }: { status: string }) {\n injectCss()\n const color = S_COLOR[status] ?? 'var(--text-tertiary)'\n if (status === 'running') {\n return <span style={{\n display: 'inline-block', width: 8, height: 8, flexShrink: 0,\n border: `2px solid ${color}`, borderTopColor: 'transparent',\n borderRadius: '50%', animation: 'kb-spin 0.8s linear infinite',\n }} />\n }\n const filled = status === 'success' || status === 'failed' || status === 'waiting_approval'\n return <span style={{\n display: 'inline-block', width: 8, height: 8, flexShrink: 0,\n borderRadius: '50%',\n background: filled ? color : 'transparent',\n border: `2px solid ${color}`,\n }} />\n}\n\nfunction formatDuration(ms?: number) {\n if (!ms) {return null}\n if (ms < 1000) {return `${ms}ms`}\n const s = ms / 1000\n if (s < 60) {return `${s.toFixed(1)}s`}\n return `${Math.floor(s / 60)}m ${Math.floor(s % 60)}s`\n}\n\n// ─── Phase colors ─────────────────────────────────────────────────────────────\n\nconst PHASE_COLOR: Record<string, string> = {\n Planning: 'var(--info)',\n Implementation: 'var(--success)',\n Quality: 'var(--warning)',\n Delivery: 'var(--link)',\n}\n\n// ─── Gate decision banner ─────────────────────────────────────────────────────\n\ninterface GateOutputs {\n decisionValue?: unknown\n action?: 'continue' | 'fail' | 'restart'\n restartFrom?: string\n iteration?: number\n maxIterations?: number\n maxIterationsReached?: boolean\n}\n\nfunction GateDecisionBanner({ stepRun, targetStepName }: { stepRun: StepRun; targetStepName?: string }) {\n const outputs = stepRun.outputs as GateOutputs | undefined\n const error = stepRun.error as Record<string, unknown> | undefined | null\n\n // Show banner if: outputs have non-continue action, OR step failed (even without outputs)\n const action = outputs?.action ?? (stepRun.status === 'failed' ? 'fail' : undefined)\n const decision = outputs?.decisionValue\n const iteration = outputs?.iteration\n\n if (!action || action === 'continue') {return null}\n\n const isRestart = action === 'restart'\n\n const color = isRestart ? 'var(--warning)' : 'var(--error)'\n const bgColor = isRestart\n ? 'color-mix(in srgb, var(--warning) 6%, var(--bg-secondary))'\n : 'color-mix(in srgb, var(--error) 6%, var(--bg-secondary))'\n\n const errorMsg = typeof error?.message === 'string' ? error.message : null\n const maxIterReached = outputs?.maxIterationsReached\n ?? (errorMsg?.toLowerCase().includes('max iteration') ?? false)\n\n return (\n <div style={{\n margin: '2px 0 4px 18px',\n padding: '8px 12px',\n background: bgColor,\n border: `1px solid color-mix(in srgb, ${color} 25%, transparent)`,\n borderRadius: 5,\n fontSize: 12,\n lineHeight: 1.6,\n }}>\n {/* Header line */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, marginBottom: 4 }}>\n <span style={{ color, fontWeight: 600 }}>\n {isRestart ? '↩ Returned for rework' : '✗ Gate failed'}\n </span>\n {iteration !== undefined && (\n <span style={{\n color: 'var(--text-tertiary)',\n background: 'var(--bg-tertiary)',\n padding: '0 5px', borderRadius: 4, fontSize: 11,\n }}>\n iteration {iteration + 1}\n </span>\n )}\n </div>\n\n {/* Decision value */}\n {decision !== undefined && decision !== null && (\n <div style={{ color: 'var(--text-secondary)' }}>\n <span style={{ color: 'var(--text-tertiary)' }}>Decision: </span>\n <code style={{\n fontSize: 11,\n background: 'var(--bg-tertiary)',\n padding: '0 4px', borderRadius: 3,\n color: color,\n fontFamily: 'monospace',\n }}>\n {String(decision)}\n </code>\n </div>\n )}\n\n {/* Restart target */}\n {isRestart && targetStepName && (\n <div style={{ color: 'var(--text-secondary)', marginTop: 2 }}>\n <span style={{ color: 'var(--text-tertiary)' }}>Restarting from: </span>\n <span style={{ fontWeight: 500 }}>{targetStepName}</span>\n </div>\n )}\n\n {/* Max iterations reached */}\n {maxIterReached && (\n <div style={{ color: 'var(--error)', marginTop: 2 }}>\n Max iterations reached — pipeline stopped\n </div>\n )}\n\n {/* Error message (if not max iter) */}\n {errorMsg && !maxIterReached && (\n <div style={{ color: 'var(--text-secondary)', marginTop: 2, fontStyle: 'italic' }}>\n {errorMsg}\n </div>\n )}\n </div>\n )\n}\n\n// ─── StepRow ─────────────────────────────────────────────────────────────────\n\ninterface StepRowProps {\n step: PipelineStep\n isReworkGate: boolean\n isReworkTarget: boolean\n reworkActive: boolean\n targetStepName?: string\n onClick: () => void\n rowRef?: (el: HTMLDivElement | null) => void\n}\n\nfunction StepRow({ step, isReworkGate, isReworkTarget, reworkActive, targetStepName, onClick, rowRef }: StepRowProps) {\n const { stepRun, stepType, iteration } = step\n const status = stepRun.status\n const isWaiting = status === 'waiting_approval'\n const isFailed = status === 'failed'\n const isRunning = status === 'running'\n const isQueued = status === 'queued'\n const isApproval = stepType === 'approval'\n const isGate = stepType === 'gate'\n\n // Gate outputs for restart detection\n const gateOutputs = isGate ? stepRun.outputs as GateOutputs | undefined : undefined\n const gateAction = gateOutputs?.action\n const showBanner = isGate && (gateAction === 'restart' || gateAction === 'fail' || isFailed)\n\n const highlight = isWaiting\n ? { bg: 'color-mix(in srgb, var(--info) 5%, var(--bg-secondary))', border: 'var(--info)' }\n : isFailed\n ? { bg: 'color-mix(in srgb, var(--error) 5%, var(--bg-secondary))', border: 'var(--error)' }\n : isReworkTarget && reworkActive\n ? { bg: 'color-mix(in srgb, var(--warning) 5%, var(--bg-secondary))', border: 'var(--warning)' }\n : null\n\n return (\n <>\n <div\n ref={rowRef}\n onClick={onClick}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n padding: highlight ? '10px 14px' : '7px 14px',\n marginLeft: isApproval ? 28 : 0,\n borderRadius: 6,\n background: highlight?.bg ?? 'transparent',\n border: highlight ? `1px solid ${highlight.border}` : '1px solid transparent',\n cursor: 'pointer',\n position: 'relative',\n overflow: 'hidden',\n transition: 'background 0.1s',\n }}\n onMouseEnter={e => {\n if (!highlight) {(e.currentTarget as HTMLDivElement).style.background = 'var(--bg-hover)'}\n }}\n onMouseLeave={e => {\n if (!highlight) {(e.currentTarget as HTMLDivElement).style.background = 'transparent'}\n }}\n >\n {isRunning && (\n <div style={{\n position: 'absolute', top: 0, left: 0, height: 2, width: '45%',\n background: 'linear-gradient(90deg, transparent, var(--warning), transparent)',\n animation: 'kb-shimmer 1.4s ease-in-out infinite',\n }} />\n )}\n\n <StatusDot status={status} />\n\n <span style={{\n flex: 1,\n fontSize: 14,\n color: isQueued ? 'var(--text-tertiary)' : 'var(--text-primary)',\n fontWeight: isWaiting || isFailed ? 500 : 400,\n fontStyle: isGate ? 'italic' : 'normal',\n }}>\n {isApproval && <span style={{ color: 'var(--info)', marginRight: 5, fontStyle: 'normal', fontSize: 12 }}>⏸</span>}\n {stepRun.name}\n </span>\n\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexShrink: 0 }}>\n {isReworkGate && iteration && (\n <span style={{\n fontSize: 11, fontWeight: 600, color: 'var(--warning)',\n background: 'color-mix(in srgb, var(--warning) 12%, transparent)',\n padding: '1px 7px', borderRadius: 8,\n }}>\n ↩ {iteration.current}/{iteration.max}\n </span>\n )}\n {formatDuration(stepRun.durationMs) && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>\n {formatDuration(stepRun.durationMs)}\n </span>\n )}\n {isWaiting ? (\n <span style={{\n fontSize: 12, fontWeight: 600, color: 'var(--info)',\n background: 'color-mix(in srgb, var(--info) 12%, transparent)',\n padding: '2px 9px', borderRadius: 8,\n }}>\n Review\n </span>\n ) : (\n <span style={{\n fontSize: 12,\n color: S_COLOR[status] ?? 'var(--text-tertiary)',\n minWidth: 44, textAlign: 'right',\n }}>\n {S_LABEL[status] ?? status}\n </span>\n )}\n </div>\n </div>\n\n {/* Gate decision inline — shows why it restarted and where */}\n {showBanner && (\n <GateDecisionBanner stepRun={stepRun} targetStepName={targetStepName} />\n )}\n </>\n )\n}\n\n// ─── ReworkBracket ────────────────────────────────────────────────────────────\n\nfunction ReworkBracket({\n gateEl, targetEl, containerEl, isActive,\n}: {\n gateEl: HTMLDivElement | null\n targetEl: HTMLDivElement | null\n containerEl: HTMLDivElement | null\n isActive: boolean\n}) {\n const [pos, setPos] = useState<{ top: number; height: number } | null>(null)\n useEffect(() => {\n if (!gateEl || !targetEl || !containerEl) {return}\n const measure = () => {\n const cr = containerEl.getBoundingClientRect()\n const gr = gateEl.getBoundingClientRect()\n const tr = targetEl.getBoundingClientRect()\n setPos({\n top: tr.top - cr.top + tr.height / 2,\n height: Math.max(0, gr.top - cr.top + gr.height / 2 - (tr.top - cr.top + tr.height / 2)),\n })\n }\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(containerEl)\n ro.observe(gateEl)\n ro.observe(targetEl)\n return () => ro.disconnect()\n }, [gateEl, targetEl, containerEl])\n if (!pos || pos.height < 8) {return null}\n const color = isActive ? 'var(--warning)' : 'var(--border-primary)'\n return (\n <div style={{ position: 'absolute', left: 0, top: pos.top, width: 8, height: pos.height, pointerEvents: 'none' }}>\n <svg width={8} height={pos.height} overflow=\"visible\">\n <line x1={5} y1={0} x2={5} y2={pos.height}\n stroke={color} strokeWidth={isActive ? 2 : 1.5}\n strokeDasharray={isActive ? undefined : '3 3'} />\n <polygon points=\"2,6 5,0 8,6\" fill={color} />\n </svg>\n </div>\n )\n}\n\n// ─── PipelineView ─────────────────────────────────────────────────────────────\n\ninterface PipelineViewProps {\n run: WorkflowRun\n events: WorkflowLogEvent[]\n onApprove?: (step: StepRun) => void\n}\n\nexport function PipelineView({ run, events, onApprove }: PipelineViewProps) {\n const model = usePipelineModel(run)\n const [selected, setSelected] = useState<StepRun | null>(null)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const rowRefs = useRef<Map<string, HTMLDivElement>>(new Map())\n\n const setRef = (id: string) => (el: HTMLDivElement | null) => {\n if (el) {rowRefs.current.set(id, el)}\n else {rowRefs.current.delete(id)}\n }\n\n if (!model.steps.length) {\n return <div style={{ padding: '24px 0', color: 'var(--text-tertiary)', fontSize: 14 }}>No execution data yet.</div>\n }\n\n const { reworkLoop } = model\n const gateStep = reworkLoop ? model.steps[reworkLoop.gateIndex] : null\n const targetStep = reworkLoop ? model.steps[reworkLoop.targetIndex] : null\n const stepEvents = events.filter(e => e.stepId === selected?.id)\n\n return (\n <div ref={containerRef} style={{ position: 'relative', paddingLeft: 10 }}>\n {reworkLoop && gateStep && targetStep && (\n <ReworkBracket\n gateEl={rowRefs.current.get(gateStep.stepRun.id) ?? null}\n targetEl={rowRefs.current.get(targetStep.stepRun.id) ?? null}\n containerEl={containerRef.current}\n isActive={reworkLoop.isActive}\n />\n )}\n\n {model.phases.map((phase, pi) => {\n const color = PHASE_COLOR[phase.label] ?? 'var(--text-tertiary)'\n const doneCount = phase.steps.filter(s => s.stepRun.status === 'success').length\n const isLast = pi === model.phases.length - 1\n\n return (\n <div key={phase.label} style={{ marginBottom: isLast ? 0 : 20 }}>\n {/* Phase label */}\n <div style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '0 4px', marginBottom: 4,\n }}>\n <div style={{ width: 3, height: 12, background: color, borderRadius: 2, flexShrink: 0 }} />\n <span style={{\n fontSize: 11, fontWeight: 700,\n textTransform: 'uppercase', letterSpacing: '0.09em',\n color,\n }}>\n {phase.label}\n </span>\n <span style={{ fontSize: 11, color: 'var(--text-tertiary)', marginLeft: 4 }}>\n {doneCount}/{phase.steps.length}\n </span>\n </div>\n\n {/* Steps */}\n <div style={{\n borderLeft: `2px solid color-mix(in srgb, ${color} 25%, var(--border-primary))`,\n marginLeft: 5,\n paddingLeft: 12,\n paddingTop: 2,\n paddingBottom: 2,\n }}>\n {phase.steps.map(step => {\n const flatIdx = model.steps.indexOf(step)\n const isGateWithLoop = reworkLoop?.gateIndex === flatIdx\n return (\n <StepRow\n key={step.stepRun.id}\n step={step}\n isReworkGate={isGateWithLoop ?? false}\n isReworkTarget={reworkLoop?.targetIndex === flatIdx}\n reworkActive={reworkLoop?.isActive ?? false}\n targetStepName={isGateWithLoop ? targetStep?.stepRun.name : undefined}\n onClick={() => setSelected(step.stepRun)}\n rowRef={setRef(step.stepRun.id)}\n />\n )\n })}\n </div>\n </div>\n )\n })}\n\n <StepDetailDrawer\n step={selected}\n events={stepEvents}\n open={selected !== null}\n onClose={() => setSelected(null)}\n onApprove={\n selected?.status === 'waiting_approval' && onApprove\n ? () => { onApprove(selected); setSelected(null) }\n : undefined\n }\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { UIButton } from '@kb-labs/sdk/studio'\n\ninterface Props {\n data: unknown\n editable?: boolean\n onEdit?: (v: unknown) => void\n}\n\n// ── Styles ───────────────────────────────────────────────────────────────────\n\nconst S = {\n pre: 'background:#f6f8fa;border:1px solid #d0d7de;border-radius:6px;padding:12px;overflow:auto;font-size:12px;line-height:1.5;font-family:monospace;margin:8px 0',\n code: 'background:#f0f0f0;border-radius:3px;padding:1px 4px;font-size:0.9em;font-family:monospace',\n link: 'color:var(--link)',\n h1: 'margin:0 0 12px;font-size:17px;font-weight:700;scroll-margin-top:64px',\n h2: 'margin:16px 0 8px;font-size:15px;font-weight:700;scroll-margin-top:64px',\n h3: 'margin:14px 0 6px;font-size:14px;font-weight:600;scroll-margin-top:64px',\n h4: 'margin:12px 0 4px;font-size:13px;font-weight:600;scroll-margin-top:64px',\n ul: 'margin:6px 0;padding-left:20px',\n ol: 'margin:6px 0;padding-left:20px',\n li: 'margin:2px 0',\n hr: 'border:none;border-top:1px solid var(--border-primary);margin:12px 0',\n p: 'margin:6px 0;line-height:1.6',\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction escapeHtml(s: string): string {\n return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')\n}\n\nfunction slugify(text: string): string {\n return text.toLowerCase().replace(/[^\\w\\s-]/g, '').trim().replace(/\\s+/g, '-')\n}\n\nfunction anchorLink(id: string, text: string): string {\n return `<a href=\"#${id}\" onclick=\"event.preventDefault();document.getElementById('${id}')?.scrollIntoView({behavior:'smooth'})\" style=\"${S.link};cursor:pointer\">${text}</a>`\n}\n\nfunction externalLink(url: string, text: string): string {\n return `<a href=\"${url}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"${S.link}\">${text}</a>`\n}\n\nfunction heading(level: 1 | 2 | 3 | 4, text: string): string {\n const id = slugify(text)\n const style = S[`h${level}`]\n return `<h${level} id=\"${id}\" style=\"${style}\">${text}</h${level}>`\n}\n\nfunction listItems(block: string, ordered: boolean): string {\n const itemRe = ordered ? /^[ \\t]*\\d+\\. / : /^[ \\t]*[-*+] /\n const items = block.trim().split('\\n')\n .map(line => `<li style=\"${S.li}\">${line.replace(itemRe, '')}</li>`)\n .join('')\n const tag = ordered ? 'ol' : 'ul'\n return `<${tag} style=\"${S[tag]}\">${items}</${tag}>`\n}\n\n// ── Converter ─────────────────────────────────────────────────────────────────\n\nfunction mdToHtml(md: string): string {\n // 1. Stash fenced code blocks (preserve verbatim, skip further processing)\n const codeBlocks: string[] = []\n let html = md.replace(/```[\\w]*\\n?([\\s\\S]*?)```/g, (_, code) => {\n const idx = codeBlocks.length\n codeBlocks.push(`<pre style=\"${S.pre}\">${escapeHtml(code.replace(/\\n$/, ''))}</pre>`)\n return `\\x00CODE${idx}\\x00`\n })\n\n // 2. Escape remaining HTML\n html = escapeHtml(html)\n\n // 3. Inline code\n html = html.replace(/`([^`]+)`/g, (_, c) => `<code style=\"${S.code}\">${c}</code>`)\n\n // 4. Links (decode & back in href, then route anchor vs external)\n html = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_, text, rawHref) => {\n const url = rawHref.replace(/&/g, '&')\n return url.startsWith('#') ? anchorLink(url.slice(1), text) : externalLink(url, text)\n })\n\n // 5. Headings (h4 first to avoid partial matches)\n html = html.replace(/^#### (.+)$/gm, (_, t) => heading(4, t))\n html = html.replace(/^### (.+)$/gm, (_, t) => heading(3, t))\n html = html.replace(/^## (.+)$/gm, (_, t) => heading(2, t))\n html = html.replace(/^# (.+)$/gm, (_, t) => heading(1, t))\n\n // 6. Emphasis\n html = html.replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, '<strong><em>$1</em></strong>')\n html = html.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n html = html.replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n\n // 7. Lists\n html = html.replace(/((?:^[ \\t]*[-*+] .+\\n?)+)/gm, block => listItems(block, false))\n html = html.replace(/((?:^[ \\t]*\\d+\\. .+\\n?)+)/gm, block => listItems(block, true))\n\n // 8. Horizontal rule\n html = html.replace(/^---$/gm, `<hr style=\"${S.hr}\"/>`)\n\n // 9. Paragraphs (skip blocks that are already block-level HTML or code placeholders)\n html = html.replace(/\\n{2,}/g, '\\n\\n')\n html = html.split('\\n\\n').map(block => {\n const trimmed = block.trim()\n if (!trimmed) {return ''}\n if (/^(\\x00CODE\\d+\\x00|<(h[1-6]|ul|ol|pre|hr|blockquote))/.test(trimmed)) {return trimmed}\n return `<p style=\"${S.p}\">${trimmed.replace(/\\n/g, '<br/>')}</p>`\n }).join('\\n')\n\n // 10. Restore code blocks\n html = html.replace(/\\x00CODE(\\d+)\\x00/g, (_, i) => codeBlocks[Number(i)] ?? '')\n\n return html\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\nexport function MarkdownViewer({ data, editable, onEdit }: Props) {\n const text = typeof data === 'string' ? data : data == null ? '' : JSON.stringify(data, null, 2)\n const [editing, setEditing] = useState(false)\n const [editValue, setEditValue] = useState(text)\n\n if (editing && editable) {\n return (\n <div>\n <textarea\n value={editValue}\n onChange={e => setEditValue(e.target.value)}\n style={{\n width: '100%', minHeight: 200, fontFamily: 'monospace', fontSize: 13,\n padding: 12, border: '1px solid var(--border-primary)', borderRadius: 6,\n background: 'var(--bg-primary)', color: 'var(--text-primary)',\n resize: 'vertical', boxSizing: 'border-box',\n }}\n />\n <div style={{ display: 'flex', gap: 8, marginTop: 8 }}>\n <UIButton size=\"small\" variant=\"primary\" onClick={() => { onEdit?.(editValue); setEditing(false) }}>Save</UIButton>\n <UIButton size=\"small\" variant=\"default\" onClick={() => { setEditValue(text); setEditing(false) }}>Cancel</UIButton>\n </div>\n </div>\n )\n }\n\n return (\n <div style={{ position: 'relative' }}>\n {editable && (\n <UIButton size=\"small\" variant=\"text\" style={{ float: 'right' }} onClick={() => setEditing(true)}>\n Edit\n </UIButton>\n )}\n <div\n style={{ fontSize: 13, lineHeight: 1.6, color: 'var(--text-primary)' }}\n dangerouslySetInnerHTML={{ __html: mdToHtml(text) }}\n />\n </div>\n )\n}\n","\n import API from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./artifacts.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./artifacts.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { UITag } from '@kb-labs/sdk/studio'\nimport styles from './artifacts.module.css'\n\ninterface Issue {\n file?: string\n line?: number\n severity?: string\n message?: string\n problem?: string\n fix?: string\n}\n\nconst SEVERITY_COLOR: Record<string, string> = {\n blocker: 'error',\n high: 'error',\n medium: 'warning',\n low: 'default',\n info: 'processing',\n}\n\nexport function IssuesViewer({ data }: { data: unknown }) {\n const issues = Array.isArray(data) ? (data as Issue[]) : []\n\n if (!issues.length) {\n return <div className={styles.empty}>No issues found.</div>\n }\n\n return (\n <div className={styles.issueList}>\n {issues.map((issue, i) => {\n const severity = issue.severity ?? 'info'\n const color = SEVERITY_COLOR[severity] ?? 'default'\n return (\n <div key={i} className={styles.issueItem}>\n <div className={styles.issueHeader}>\n <UITag color={color}>{severity}</UITag>\n {issue.file && (\n <span className={styles.issueFile}>\n {issue.file}{issue.line ? `:${issue.line}` : ''}\n </span>\n )}\n </div>\n <div className={styles.issueMessage}>\n {issue.message ?? issue.problem ?? JSON.stringify(issue)}\n </div>\n {issue.fix && (\n <div className={styles.issueFix}>Fix: {issue.fix}</div>\n )}\n </div>\n )\n })}\n </div>\n )\n}\n","import { UITable } from '@kb-labs/sdk/studio'\nimport styles from './artifacts.module.css'\n\nexport function TableViewer({ data }: { data: unknown }) {\n const rows = Array.isArray(data) ? data as Record<string, unknown>[] : []\n\n if (!rows.length) {\n return <div className={styles.empty}>No data.</div>\n }\n\n const columns = Object.keys(rows[0] ?? {}).map(key => ({\n key,\n dataIndex: key,\n title: key,\n }))\n\n return <UITable columns={columns} dataSource={rows} size=\"small\" pagination={false} />\n}\n","import { UIDiffViewer } from '@kb-labs/sdk/studio'\n\nexport function DiffViewer({ data }: { data: unknown }) {\n const text = typeof data === 'string' ? data : data == null ? '' : (JSON.stringify(data, null, 2) ?? '')\n if (!text) {return null}\n return <UIDiffViewer diff={text} maxHeight={500} />\n}\n","import styles from './artifacts.module.css'\n\nexport function LogViewer({ data }: { data: unknown }) {\n const text = typeof data === 'string' ? data : data == null ? '' : (JSON.stringify(data, null, 2) ?? '')\n if (!text) {return null}\n return <pre className={styles.logPre}>{text}</pre>\n}\n","export function LinkViewer({ data, label }: { data: unknown; label?: string }) {\n const url = typeof data === 'string' ? data : null\n\n if (!url) {\n return (\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13, padding: 12 }}>—</span>\n )\n }\n\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '5px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n fontSize: 13,\n color: 'var(--link)',\n textDecoration: 'none',\n fontWeight: 500,\n }}\n >\n {label ?? url}\n <span style={{ fontSize: 11, opacity: 0.6 }}>↗</span>\n </a>\n )\n}\n","/**\n * Polymorphic artifact viewer.\n * Routes to the appropriate sub-component based on artifact type.\n * Wrapped in an ErrorBoundary so a broken artifact never crashes the page.\n */\n\nimport { Component } from 'react'\nimport type { ReactNode } from 'react'\nimport { UIJsonViewer } from '@kb-labs/sdk/studio'\nimport { MarkdownViewer } from './MarkdownViewer'\nimport { IssuesViewer } from './IssuesViewer'\nimport { TableViewer } from './TableViewer'\nimport { DiffViewer } from './DiffViewer'\nimport { LogViewer } from './LogViewer'\nimport { LinkViewer } from './LinkViewer'\n\nexport interface ArtifactViewerProps {\n type: 'markdown' | 'issues' | 'table' | 'diff' | 'log' | 'json' | 'link'\n data: unknown\n label?: string\n editable?: boolean\n onEdit?: (newValue: unknown) => void\n}\n\nclass ArtifactErrorBoundary extends Component<{ children: ReactNode; label?: string }, { error: Error | null }> {\n override state = { error: null as Error | null };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static getDerivedStateFromError(error: Error): any { return { error }; }\n override render() {\n if (this.state.error) {\n return (\n <span style={{ color: 'var(--text-tertiary)', fontSize: 12, fontStyle: 'italic' }}>\n {this.props.label ?? 'Artifact'}: render error\n </span>\n )\n }\n return this.props.children\n }\n}\n\nfunction ArtifactViewerInner({ type, data, label, editable, onEdit }: ArtifactViewerProps) {\n if (data == null) {return null}\n if (type === 'link') {return <LinkViewer data={data} label={label} />}\n if (type === 'markdown') {return <MarkdownViewer data={data} editable={editable} onEdit={onEdit} />}\n if (type === 'issues') {return <IssuesViewer data={data} />}\n if (type === 'table') {return <TableViewer data={data} />}\n if (type === 'diff') {return <DiffViewer data={data} />}\n if (type === 'log') {return <LogViewer data={data} />}\n if (type === 'json') {return <UIJsonViewer data={data} />}\n return null\n}\n\nexport function ArtifactViewer(props: ArtifactViewerProps) {\n return (\n <ArtifactErrorBoundary label={props.label}>\n <ArtifactViewerInner {...props} />\n </ArtifactErrorBoundary>\n )\n}\n","/**\n * Dashboard view for a single workflow run.\n * Shows: PhaseProgressBar → Hero block (current step) → Completed steps → Future steps\n */\n\nimport * as React from 'react';\nimport {\n UITypographyText,\n UISpace,\n UIIcon,\n UITag,\n} from '@kb-labs/sdk/studio';\nimport type { WorkflowRun, StepRun, StepArtifact } from '@kb-labs/workflow-contracts';\nimport { PhaseProgressBar, type PhaseStatus } from '../shared/PhaseProgressBar';\nimport { usePipelineModel } from '../../hooks/use-pipeline-graph';\nimport { StatusDot } from '../pipeline/shared';\nimport { ArtifactViewer } from '../artifacts/ArtifactViewer';\n\n// Runtime fields not yet in the schema — accessed via type assertion\ninterface StepRunRuntime extends StepRun {\n progress?: number;\n progressMessage?: string;\n}\n\nfunction getPhaseStatuses(run: WorkflowRun): PhaseStatus[] {\n const model = usePipelineModel(run);\n return model.phases.map((phase) => {\n const allDone = phase.steps.every((s) => s.stepRun.status === 'success');\n const anyActive = phase.steps.some(\n (s) => s.stepRun.status === 'running' || s.stepRun.status === 'waiting_approval',\n );\n return {\n label: phase.label,\n status: allDone ? 'done' : anyActive ? 'active' : 'pending',\n };\n });\n}\n\nfunction flatSteps(run: WorkflowRun): StepRun[] {\n return run.jobs.flatMap((j) => j.steps);\n}\n\nfunction formatDurationMs(ms: number): string {\n if (ms < 1000) { return `${ms}ms`; }\n const s = ms / 1000;\n if (s < 60) { return `${s.toFixed(1)}s`; }\n const m = Math.floor(s / 60);\n const rem = Math.floor(s % 60);\n return `${m}m ${rem}s`;\n}\n\ninterface HeroBlockProps {\n step: StepRun;\n onApprove?: () => void;\n}\n\nfunction HeroBlock({ step, onApprove }: HeroBlockProps) {\n const rt = step as StepRunRuntime;\n const isWaiting = step.status === 'waiting_approval';\n const isRunning = step.status === 'running';\n // artifacts is Record<name, StepArtifact> in contracts\n const artifactsMap = (step.spec?.artifacts) as Record<string, StepArtifact> | undefined;\n const artifacts = artifactsMap ? Object.values(artifactsMap) : [];\n\n return (\n <div style={{\n padding: '20px 24px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 10,\n marginBottom: 'var(--spacing-section)',\n }}>\n {/* Header */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, marginBottom: 10 }}>\n <StatusDot status={step.status} />\n <UITypographyText style={{ fontSize: 15, fontWeight: 600, color: 'var(--text-primary)' }}>\n {step.spec?.summary ?? step.name}\n </UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ marginLeft: 'auto' }}>\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n\n {/* Progress message */}\n {rt.progressMessage && (\n <UITypographyText className=\"typo-description text-secondary\" style={{ marginBottom: 10, display: 'block' }}>\n {rt.progressMessage}\n </UITypographyText>\n )}\n\n {/* Progress bar */}\n {rt.progress != null && (\n <div style={{ marginBottom: 12 }}>\n <div style={{\n height: 6,\n background: 'var(--border-primary)',\n borderRadius: 3,\n overflow: 'hidden',\n }}>\n <div style={{\n height: '100%',\n width: `${rt.progress}%`,\n background: isWaiting ? 'var(--warning)' : 'var(--link)',\n borderRadius: 3,\n transition: 'width 0.3s ease',\n }} />\n </div>\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ marginTop: 4, display: 'block' }}>\n {rt.progress}%\n </UITypographyText>\n </div>\n )}\n\n {/* Artifacts */}\n {artifacts.length > 0 && step.outputs && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n {artifacts.map((artifact, i) => {\n // Resolve dot-path from outputs\n const data = artifact.source.split('.').reduce<unknown>(\n (acc, key) => (acc && typeof acc === 'object' ? (acc as Record<string, unknown>)[key] : undefined),\n step,\n );\n return (\n <div key={i}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 6 }}>\n {artifact.label}\n </UITypographyText>\n <ArtifactViewer type={artifact.type} data={data} label={artifact.label} />\n </div>\n );\n })}\n </div>\n )}\n\n {/* Approval CTA */}\n {isWaiting && onApprove && (\n <div style={{ marginTop: 14 }}>\n <button\n onClick={onApprove}\n style={{\n padding: '6px 16px',\n background: 'var(--link)',\n color: 'var(--text-inverse)',\n border: 'none',\n borderRadius: 6,\n fontWeight: 600,\n cursor: 'pointer',\n fontSize: 13,\n }}\n >\n Review & Decide\n </button>\n </div>\n )}\n\n {/* Running indicator */}\n {isRunning && !rt.progressMessage && (\n <UISpace className=\"gap-tight\" style={{ marginTop: 6 }}>\n <UIIcon name=\"LoadingOutlined\" spin style={{ color: 'var(--link)', fontSize: 13 }} />\n <UITypographyText className=\"typo-caption text-secondary\">Running...</UITypographyText>\n </UISpace>\n )}\n </div>\n );\n}\n\ninterface DashboardViewProps {\n run: WorkflowRun;\n onApprove?: (step: StepRun) => void;\n}\n\nconst TERMINAL = ['success', 'failed', 'cancelled', 'skipped'];\n\nfunction StatCard({ label, value, color }: { label: string; value: string; color?: string }) {\n return (\n <div style={{\n flex: 1,\n padding: '16px 20px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n minWidth: 0,\n }}>\n <div style={{ fontSize: 22, fontWeight: 700, color: color ?? 'var(--text-primary)', lineHeight: 1.2 }}>\n {value}\n </div>\n <div style={{ fontSize: 12, color: 'var(--text-tertiary)', marginTop: 4 }}>\n {label}\n </div>\n </div>\n );\n}\n\nexport function DashboardView({ run, onApprove }: DashboardViewProps) {\n const model = usePipelineModel(run);\n const phases = model.phases.map((phase) => {\n const allDone = phase.steps.every((s) => s.stepRun.status === 'success');\n const anyActive = phase.steps.some(\n (s) => s.stepRun.status === 'running' || s.stepRun.status === 'waiting_approval',\n );\n return { label: phase.label, status: allDone ? 'done' : anyActive ? 'active' : 'pending' } as PhaseStatus;\n });\n\n const allSteps = flatSteps(run);\n const isTerminal = TERMINAL.includes(run.status);\n\n const currentStep = !isTerminal\n ? allSteps.find((s) => s.status === 'running' || s.status === 'waiting_approval')\n : null;\n const completedSteps = allSteps.filter((s) => s.status === 'success');\n const failedSteps = allSteps.filter((s) => s.status === 'failed');\n const futureSteps = allSteps.filter((s) => s.status === 'queued' || (s.status as string) === 'pending');\n\n // Total duration\n const totalMs = run.startedAt && run.finishedAt\n ? new Date(run.finishedAt).getTime() - new Date(run.startedAt).getTime()\n : null;\n\n // Steps grouped by phase for terminal view\n const stepsByPhase = model.phases.map((phase) => ({\n label: phase.label,\n steps: phase.steps.map((s) => s.stepRun),\n }));\n const ungroupedSteps = model.phases.length === 0 ? allSteps : [];\n\n // Summary artifacts — any completed/failed step with showInSummary: true artifacts\n // Shown both during active runs (for completed steps) and after terminal\n const summaryArtifacts: { step: StepRun; artifact: StepArtifact; data: unknown }[] = [];\n for (const step of allSteps) {\n if (step.status !== 'success' && step.status !== 'failed') {continue;}\n const artifactsMap = (step.spec?.artifacts) as Record<string, StepArtifact> | undefined;\n if (!artifactsMap) {continue;}\n for (const artifact of Object.values(artifactsMap)) {\n if (!artifact.showInSummary) {continue;}\n const data = artifact.source.split('.').reduce<unknown>(\n (acc, key) => (acc && typeof acc === 'object' ? (acc as Record<string, unknown>)[key] : undefined),\n step,\n );\n summaryArtifacts.push({ step, artifact, data });\n }\n }\n\n return (\n <div>\n {/* Phase bar */}\n {phases.length > 0 && (\n <div style={{\n padding: '12px 16px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n marginBottom: 16,\n }}>\n <PhaseProgressBar phases={phases} />\n </div>\n )}\n\n {/* ── ACTIVE RUN: hero block ── */}\n {currentStep && (\n <HeroBlock\n step={currentStep}\n onApprove={onApprove ? () => onApprove(currentStep) : undefined}\n />\n )}\n\n {/* ── Summary artifacts (showInSummary: true) — shown as steps complete ── */}\n {summaryArtifacts.length > 0 && (() => {\n const links = summaryArtifacts.filter(a => a.artifact.type === 'link');\n const rich = summaryArtifacts.filter(a => a.artifact.type !== 'link');\n return (\n <div style={{ marginBottom: 16, display: 'flex', flexDirection: 'column', gap: 12 }}>\n {/* link artifacts — inline row */}\n {links.length > 0 && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n {links.map(({ artifact, data }, i) => (\n <ArtifactViewer key={i} type=\"link\" data={data} label={artifact.label} />\n ))}\n </div>\n )}\n {/* rich artifacts — full-width blocks */}\n {rich.length > 0 && (\n <div style={{\n padding: '16px 20px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 10,\n display: 'flex', flexDirection: 'column', gap: 16,\n }}>\n {rich.map(({ artifact, data }, i) => (\n <div key={i}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 6 }}>\n {artifact.label}\n </UITypographyText>\n <ArtifactViewer type={artifact.type} data={data} label={artifact.label} />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n })()}\n\n {/* ── TERMINAL RUN: summary stats ── */}\n {isTerminal && (\n <div style={{ display: 'flex', gap: 12, marginBottom: 20, flexWrap: 'wrap' }}>\n <StatCard label=\"Total steps\" value={String(allSteps.length)} />\n <StatCard label=\"Completed\" value={String(completedSteps.length)} color=\"var(--success)\" />\n {failedSteps.length > 0 && (\n <StatCard label=\"Failed\" value={String(failedSteps.length)} color=\"var(--error)\" />\n )}\n {totalMs != null && (\n <StatCard label=\"Duration\" value={formatDurationMs(totalMs)} />\n )}\n </div>\n )}\n\n {/* ── TERMINAL RUN: steps by phase ── */}\n {isTerminal && stepsByPhase.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 20 }}>\n {stepsByPhase.map((phase) => (\n <div key={phase.label}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 8 }}>\n {phase.label}\n </UITypographyText>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {phase.steps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n }}>\n <UIIcon\n name={step.status === 'success' ? 'CheckCircleOutlined' : step.status === 'failed' ? 'CloseCircleOutlined' : 'MinusCircleOutlined'}\n style={{ fontSize: 13, color: step.status === 'success' ? 'var(--success)' : step.status === 'failed' ? 'var(--error)' : 'var(--text-tertiary)', flexShrink: 0 }}\n />\n <UITypographyText className=\"typo-body\" style={{ flex: 1, minWidth: 0 }}>\n {step.spec?.summary ?? step.name}\n </UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ flexShrink: 0 }}>\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* ── TERMINAL RUN: no phases — flat list ── */}\n {isTerminal && ungroupedSteps.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {ungroupedSteps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n }}>\n <UIIcon\n name={step.status === 'success' ? 'CheckCircleOutlined' : step.status === 'failed' ? 'CloseCircleOutlined' : 'MinusCircleOutlined'}\n style={{ fontSize: 13, color: step.status === 'success' ? 'var(--success)' : step.status === 'failed' ? 'var(--error)' : 'var(--text-tertiary)', flexShrink: 0 }}\n />\n <UITypographyText className=\"typo-body\" style={{ flex: 1 }}>\n {step.spec?.summary ?? step.name}\n </UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\">\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n ))}\n </div>\n )}\n\n {/* ── ACTIVE RUN: completed + upcoming ── */}\n {!isTerminal && completedSteps.length > 0 && (\n <div style={{ marginBottom: 16 }}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 8 }}>\n Completed ({completedSteps.length})\n </UITypographyText>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {completedSteps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n }}>\n <UIIcon name=\"CheckCircleOutlined\" style={{ color: 'var(--success)', fontSize: 13 }} />\n <UITypographyText className=\"typo-body\">{step.spec?.summary ?? step.name}</UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ marginLeft: 'auto' }}>\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {!isTerminal && futureSteps.length > 0 && (\n <div>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 8 }}>\n Upcoming ({futureSteps.length})\n </UITypographyText>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {futureSteps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n border: '1px dashed var(--border-primary)',\n borderRadius: 6,\n opacity: 0.5,\n }}>\n <UIIcon name=\"ClockCircleOutlined\" style={{ color: 'var(--text-tertiary)', fontSize: 13 }} />\n <UITypographyText className=\"typo-body text-secondary\">{step.spec?.summary ?? step.name}</UITypographyText>\n {step.spec?.phase && (\n <UITag style={{ marginLeft: 'auto', opacity: 0.7 }}>{step.spec.phase}</UITag>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {allSteps.length === 0 && (\n <div style={{ textAlign: 'center', padding: '40px 0' }}>\n <UITypographyText className=\"typo-description text-secondary\">No execution data</UITypographyText>\n </div>\n )}\n </div>\n );\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/pages/workflow-run-page\n * Workflow run detail page with live SSE logs, jobs/steps accordion, and approval modal\n */\n\nimport { UIPage, UIPageHeader, UIPageSection } from '@kb-labs/sdk/studio'\nimport { useMemo, useState, useEffect, useRef } from 'react'\nimport { useParams, Link } from 'react-router-dom'\nimport {\n UIButton, UITypographyText,\n UITitle, UIAlert, UIList, UIListItem, UIAccordion, UITabs, UIJsonViewer,\n} from '@kb-labs/sdk/studio'\nimport type { UIAccordionItem, UITabItem } from '@kb-labs/sdk/studio'\nimport { useData, useMutateData, useSSE } from '@kb-labs/sdk/studio'\nimport type { WorkflowRun, StepRun } from '@kb-labs/workflow-contracts'\nimport type { WorkflowLogEvent } from '@kb-labs/workflow-contracts/rest-api'\nimport { WorkflowStatusBadge } from '../components/shared/WorkflowStatusBadge'\nimport { ApprovalModal } from '../components/ApprovalModal'\nimport { PipelineView } from '../components/pipeline/PipelineView'\nimport { DashboardView } from '../components/dashboard/DashboardView'\nimport { ViewModeSelector } from '../components/shared/ViewModeSelector'\n\nconst Text = UITypographyText\nconst Title = UITitle\n\n// --- GitHub Actions style execution log ---\n\nconst STATUS_ICON: Record<string, string> = {\n 'queued': '\\u25CB',\n 'running': '\\u25C9',\n 'success': '\\u2713',\n 'failed': '\\u2717',\n 'cancelled': '\\u2298',\n 'skipped': '\\u2014',\n 'waiting_approval': '\\u23F8',\n}\n\nconst STATUS_COLOR: Record<string, string> = {\n 'queued': '#8b949e',\n 'running': '#d29922',\n 'success': '#3fb950',\n 'failed': '#f85149',\n 'cancelled': '#8b949e',\n 'skipped': '#8b949e',\n 'waiting_approval': '#d29922',\n}\n\nfunction eventTypeToStatus(type: string): string {\n if (type.endsWith('.started')) {return 'running'}\n if (type.endsWith('.succeeded') || type.endsWith('.finished')) {return 'success'}\n if (type.endsWith('.failed')) {return 'failed'}\n if (type.endsWith('.cancelled')) {return 'cancelled'}\n if (type.endsWith('.skipped')) {return 'skipped'}\n if (type.endsWith('.waitingApproval')) {return 'waiting_approval'}\n if (type.endsWith('.queued')) {return 'queued'}\n return 'running'\n}\n\nfunction formatDurationMs(ms: number): string {\n if (ms < 1000) {return `${ms}ms`}\n const s = ms / 1000\n if (s < 60) {return `${s.toFixed(1)}s`}\n const m = Math.floor(s / 60)\n const rem = Math.floor(s % 60)\n return `${m}m ${rem}s`\n}\n\nfunction formatTime(ts?: string): string {\n if (!ts) {return ''}\n try {\n return new Date(ts).toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' })\n } catch { return '' }\n}\n\ninterface LogLine {\n time: string\n text: string\n stream?: 'stdout' | 'stderr'\n}\n\n// Strip ANSI escape codes from text\n \nconst ANSI_RE = /\\x1b\\[[0-9;]*[A-Za-z]|\\x1b\\].*?\\x07/g\nfunction stripAnsi(s: string): string { return s.replace(ANSI_RE, '') }\n\nfunction extractLogLines(ev: WorkflowLogEvent): LogLine[] {\n const time = formatTime(ev.timestamp)\n const payload = ev.payload as Record<string, unknown> | undefined\n if (!payload) {return []}\n\n // Live log.appended events (real-time streaming)\n if (ev.type === 'log.appended') {\n const msg = typeof payload.message === 'string' ? stripAnsi(payload.message) : ''\n if (!msg) {return []}\n const stream = (payload.stream as 'stdout' | 'stderr') ?? 'stdout'\n return [{ time, text: msg, stream }]\n }\n\n if (payload.outputs && typeof payload.outputs === 'object') {\n const outputs = payload.outputs as Record<string, unknown>\n if (typeof outputs.stdout === 'string' && outputs.stdout.trim()) {\n return stripAnsi(outputs.stdout).trim().split('\\n').map(line => ({ time, text: line, stream: 'stdout' as const }))\n }\n }\n if (typeof payload.stdout === 'string' && payload.stdout.trim()) {\n return stripAnsi(payload.stdout).trim().split('\\n').map(line => ({ time, text: line, stream: 'stdout' as const }))\n }\n if (typeof payload.error === 'string') {\n return [{ time, text: payload.error, stream: 'stderr' }]\n }\n if (typeof payload.message === 'string') {\n return [{ time, text: payload.message }]\n }\n if (typeof payload.line === 'string') {\n return [{ time, text: payload.line }]\n }\n if (typeof payload.text === 'string') {\n return [{ time, text: payload.text }]\n }\n const keys = Object.keys(payload).filter(k => !['status', 'jobName', 'durationMs', 'attempt'].includes(k))\n if (keys.length === 0) {return []}\n return [{ time, text: JSON.stringify(payload, null, 2) }]\n}\n\ninterface StepLogGroup {\n stepId: string\n stepName: string\n status: string\n command?: string\n events: WorkflowLogEvent[]\n outputs?: Record<string, unknown>\n error?: Record<string, unknown> | null\n spec?: { name: string; uses?: string; with?: Record<string, unknown> }\n startedAt?: string\n finishedAt?: string\n durationMs?: number\n}\n\ninterface JobLogGroup {\n jobId: string\n jobName: string\n status: string\n steps: StepLogGroup[]\n events: WorkflowLogEvent[]\n startedAt?: string\n finishedAt?: string\n durationMs?: number\n error?: Record<string, unknown> | null\n}\n\nfunction buildLogGroups(events: WorkflowLogEvent[], run: WorkflowRun): JobLogGroup[] {\n const jobMap = new Map<string, JobLogGroup>()\n\n for (const job of run.jobs) {\n const stepGroups: StepLogGroup[] = job.steps.map(s => ({\n stepId: s.id,\n stepName: s.name,\n status: s.status,\n command: (s as any).command,\n events: [],\n outputs: s.outputs ?? undefined,\n error: s.error,\n spec: s.spec,\n startedAt: s.startedAt,\n finishedAt: s.finishedAt,\n durationMs: s.durationMs,\n }))\n jobMap.set(job.id, {\n jobId: job.id,\n jobName: job.jobName,\n status: job.status,\n steps: stepGroups,\n events: [],\n startedAt: job.startedAt,\n finishedAt: job.finishedAt,\n durationMs: job.durationMs,\n error: job.error,\n })\n }\n\n for (const ev of events) {\n if (!ev.jobId) {continue}\n let group = jobMap.get(ev.jobId)\n if (!group) {\n group = {\n jobId: ev.jobId,\n jobName: ev.jobId,\n status: eventTypeToStatus(ev.type),\n steps: [],\n events: [],\n }\n jobMap.set(ev.jobId, group)\n }\n\n if (ev.type.startsWith('job.')) {\n group.status = eventTypeToStatus(ev.type)\n if (ev.payload?.jobName) {group.jobName = String(ev.payload.jobName)}\n if (ev.payload?.durationMs) {group.durationMs = Number(ev.payload.durationMs)}\n }\n\n if (ev.stepId) {\n let step = group.steps.find(s => s.stepId === ev.stepId)\n if (!step) {\n step = { stepId: ev.stepId, stepName: ev.stepId, status: 'queued', events: [] }\n group.steps.push(step)\n }\n step.events.push(ev)\n if (ev.type.startsWith('step.')) {\n step.status = eventTypeToStatus(ev.type)\n }\n } else {\n group.events.push(ev)\n }\n }\n\n return Array.from(jobMap.values())\n}\n\nconst LOG_OUTPUT_KEYS = new Set(['stdout', 'stderr', 'exitCode', 'ok'])\n\nfunction StepPanel({ step, onApprove }: { step: StepLogGroup; onApprove?: () => void }) {\n const sseLines: LogLine[] = step.events.flatMap(extractLogLines)\n const logRef = useRef<HTMLPreElement>(null)\n\n // Auto-scroll to bottom when new lines arrive\n useEffect(() => {\n const el = logRef.current\n if (!el) {return}\n const isNearBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 80\n if (isNearBottom) {\n el.scrollTop = el.scrollHeight\n }\n }, [sseLines.length])\n\n const pollingLines: LogLine[] = useMemo(() => {\n if (sseLines.length > 0) {return []}\n const lines: LogLine[] = []\n if (step.outputs) {\n const stdout = step.outputs.stdout\n const stderr = step.outputs.stderr\n if (typeof stdout === 'string' && stdout.trim()) {\n for (const line of stdout.trim().split('\\n')) {\n lines.push({ time: '', text: line })\n }\n }\n if (typeof stderr === 'string' && stderr.trim()) {\n for (const line of stderr.trim().split('\\n')) {\n lines.push({ time: '', text: line })\n }\n }\n // If no stdout/stderr but has structured data — show compact summary\n if (lines.length === 0) {\n const dataKeys = Object.keys(step.outputs).filter(k => !LOG_OUTPUT_KEYS.has(k))\n if (dataKeys.length > 0) {\n lines.push({ time: '', text: `Completed with output: { ${dataKeys.join(', ')} }` })\n }\n }\n }\n if (step.error) {\n const msg = (step.error as Record<string, unknown>).message\n if (typeof msg === 'string') {\n lines.push({ time: '', text: msg })\n }\n }\n return lines\n }, [step.outputs, step.error, sseLines.length])\n\n const lines = sseLines.length > 0 ? sseLines : pollingLines\n const isWaiting = step.status === 'waiting_approval'\n\n const dataOutputs = useMemo(() => {\n if (!step.outputs) {return null}\n const filtered: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(step.outputs)) {\n if (!LOG_OUTPUT_KEYS.has(k)) {filtered[k] = v}\n }\n return Object.keys(filtered).length > 0 ? filtered : null\n }, [step.outputs])\n\n const hasData = dataOutputs !== null\n const hasInputs = step.spec?.with != null && Object.keys(step.spec.with).length > 0\n const hasError = step.error != null\n const hasTabs = hasData || hasInputs || hasError\n\n const logContent = (\n <div style={{ fontFamily: 'monospace', fontSize: 13 }}>\n {step.command && (\n <div style={{ padding: '4px 12px', color: '#8b949e', fontSize: 12 }}>\n $ {step.command}\n </div>\n )}\n {lines.length > 0 ? (\n <pre ref={logRef} style={{\n margin: 0,\n padding: '8px 12px',\n background: '#0d1117',\n color: '#c9d1d9',\n borderRadius: 4,\n overflow: 'auto',\n maxHeight: 400,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n lineHeight: 1.6,\n }}>\n {lines.map((l, i) => (\n <span key={i}>\n {l.time && <span style={{ color: '#484f58', userSelect: 'none', marginRight: 12 }}>{l.time}</span>}\n <span style={l.stream === 'stderr' ? { color: '#f85149' } : undefined}>{l.text}</span>\n {'\\n'}\n </span>\n ))}\n </pre>\n ) : (\n <Text type=\"secondary\" style={{ fontSize: 12, padding: '4px 12px', display: 'block' }}>\n {step.status === 'running' ? 'Waiting for output...' :\n step.status === 'queued' ? 'Queued' :\n isWaiting ? 'Waiting for approval' :\n 'No output'}\n </Text>\n )}\n {isWaiting && onApprove && (\n <div style={{ padding: '8px 12px' }}>\n <UIButton size=\"small\" variant=\"primary\" onClick={onApprove}>\n Review & Decide\n </UIButton>\n </div>\n )}\n </div>\n )\n\n if (!hasTabs) {return logContent}\n\n const tabItems: UITabItem[] = [\n { key: 'log', label: 'Log', children: logContent },\n ]\n if (hasData) {\n tabItems.push({ key: 'data', label: 'Data', children: <UIJsonViewer data={dataOutputs} /> })\n }\n if (hasInputs) {\n tabItems.push({ key: 'inputs', label: 'Inputs', children: <UIJsonViewer data={step.spec!.with} /> })\n }\n if (hasError) {\n tabItems.push({ key: 'error', label: 'Error', children: <UIJsonViewer data={step.error} /> })\n }\n\n return <UITabs items={tabItems} size=\"small\" defaultActiveKey=\"log\" />\n}\n\ninterface JobStepLogProps {\n events: WorkflowLogEvent[]\n run: WorkflowRun\n onApprove?: (step: StepRun) => void\n}\n\nfunction JobStepLog({ events, run, onApprove }: JobStepLogProps) {\n const groups = useMemo(() => buildLogGroups(events, run), [events, run])\n\n const stepRunMap = useMemo(() => {\n const map = new Map<string, StepRun>()\n for (const job of run.jobs) {\n for (const step of job.steps) {\n map.set(step.id, step)\n }\n }\n return map\n }, [run])\n\n if (groups.length === 0) {\n return <Text type=\"secondary\">No execution data yet.</Text>\n }\n\n const activeJobKeys = groups\n .filter(g => g.status === 'running' || g.status === 'failed' || g.status === 'waiting_approval')\n .map(g => g.jobId)\n const defaultJobKeys = activeJobKeys.length > 0 ? activeJobKeys : groups.map(g => g.jobId)\n\n const jobItems: UIAccordionItem[] = groups.map(group => {\n const icon = STATUS_ICON[group.status] ?? '?'\n const color = STATUS_COLOR[group.status] ?? '#8b949e'\n const duration = group.durationMs ? formatDurationMs(group.durationMs) : null\n\n const activeStepKeys = group.steps\n .filter(s => s.status === 'running' || s.status === 'failed' || s.status === 'waiting_approval')\n .map(s => s.stepId)\n const defaultStepKeys = activeStepKeys.length > 0\n ? activeStepKeys\n : group.steps.filter(s => s.status !== 'queued').map(s => s.stepId)\n\n const stepItems: UIAccordionItem[] = group.steps.map(step => {\n const sIcon = STATUS_ICON[step.status] ?? '?'\n const sColor = STATUS_COLOR[step.status] ?? '#8b949e'\n const sDuration = step.durationMs ? formatDurationMs(step.durationMs) : null\n return {\n key: step.stepId,\n label: step.stepName,\n extra: (\n <span style={{ display: 'flex', alignItems: 'center', gap: 8, fontSize: 12 }}>\n {sDuration && <span style={{ color: '#8b949e' }}>{sDuration}</span>}\n <span style={{ color: sColor, fontWeight: 600, fontSize: 14 }}>{sIcon}</span>\n </span>\n ),\n children: (\n <StepPanel\n step={step}\n onApprove={\n step.status === 'waiting_approval' && onApprove\n ? () => {\n const sr = stepRunMap.get(step.stepId)\n if (sr) {onApprove(sr)}\n }\n : undefined\n }\n />\n ),\n }\n })\n\n return {\n key: group.jobId,\n label: group.jobName,\n extra: (\n <span style={{ display: 'flex', alignItems: 'center', gap: 8, fontSize: 12 }}>\n {duration && <span style={{ color: '#8b949e' }}>{duration}</span>}\n <span style={{ color, fontWeight: 600, fontSize: 14 }}>{icon}</span>\n </span>\n ),\n children: (\n <>\n {group.error && group.status === 'failed' && (\n <UIAlert\n variant=\"error\"\n message=\"Job failed\"\n description={\n typeof group.error.message === 'string'\n ? group.error.message\n : JSON.stringify(group.error, null, 2)\n }\n showIcon\n style={{ marginBottom: 8 }}\n />\n )}\n {stepItems.length > 0 ? (\n <UIAccordion\n items={stepItems}\n defaultActiveKey={defaultStepKeys}\n size=\"small\"\n ghost\n style={{ background: 'transparent' }}\n />\n ) : (\n <Text type=\"secondary\" style={{ fontSize: 12 }}>No steps.</Text>\n )}\n </>\n ),\n }\n })\n\n return (\n <UIAccordion\n items={jobItems}\n defaultActiveKey={defaultJobKeys}\n size=\"small\"\n style={{ background: 'var(--bg-secondary, #f6f8fa)' }}\n />\n )\n}\n\nexport default function WorkflowRunDetail() {\n const params = useParams<{ runId: string }>()\n const runId = params.runId ?? null\n const { data: runData, isLoading, error, refetch } = useData<{ run: WorkflowRun }>(\n runId ? `/exec/api/v1/runs/${runId}` : '/exec/api/v1/runs/__none__',\n { enabled: !!runId, pollingMs: 3000 },\n )\n const run = runData?.run ?? (runData as unknown as WorkflowRun | undefined)\n const cancelMutation = useMutateData<void, void>(`/exec/api/v1/runs/${runId ?? '__none__'}/cancel`)\n const resolveApproval = useMutateData<\n { runId: string; jobId: string; stepId: string; action: string; comment?: string },\n unknown\n >(`/exec/api/v1/runs/${runId ?? '__none__'}/approvals/resolve`)\n const isRunActive = run != null && !['success', 'failed', 'cancelled', 'skipped'].includes(run.status)\n\n const { events, error: logError, isConnected } = useSSE<WorkflowLogEvent>(\n isRunActive && runId ? `/exec/api/v1/runs/${runId}/events` : null,\n { params: { follow: 1 }, reconnect: true },\n )\n\n const [approvalStep, setApprovalStep] = useState<StepRun | null>(null)\n const [viewMode, setViewMode] = useState<'dashboard' | 'pipeline' | 'engineering'>('dashboard')\n\n const VIEW_MODES = {\n dashboard: { label: 'Dashboard' },\n pipeline: { label: 'Pipeline' },\n engineering: { label: 'Engineering' },\n } as const\n\n useEffect(() => {\n if (logError && isRunActive) {\n void refetch()\n }\n }, [logError, isRunActive, refetch])\n\n const isTerminal = run != null && !isRunActive\n\n const hasPendingApprovals = run?.jobs.some(j =>\n j.steps.some(s => (s.status as string) === 'waiting_approval')\n )\n\n const handleApprovalResolve = async (action: 'approve' | 'reject', comment?: string) => {\n if (!approvalStep || !runId) {return}\n const job = run?.jobs.find(j => j.steps.some(s => s.id === approvalStep.id))\n if (!job) {return}\n await resolveApproval.mutateAsync({\n runId,\n jobId: job.id,\n stepId: approvalStep.id,\n action,\n comment,\n })\n setApprovalStep(null)\n void refetch()\n }\n\n const shortRunId = runId ? `${runId.slice(0, 12)}...` : ''\n\n return (\n <UIPage>\n <UIPageHeader\n title={run?.name ?? `Workflow Run ${shortRunId}`}\n description={run ? `Run ${shortRunId}` : 'Detailed status of the workflow execution'}\n breadcrumbs={[\n { title: 'Home', href: '/' },\n { title: 'Workflows', href: '/workflows' },\n { title: 'Runs', href: '/p/workflows/runs' },\n { title: shortRunId },\n ]}\n actions={\n <div style={{ display: 'flex', gap: 8 }}>\n <UIButton onClick={() => refetch()} disabled={isLoading}>\n Refresh\n </UIButton>\n {run && !isTerminal && (\n <UIButton\n danger\n loading={cancelMutation.isLoading}\n onClick={() => runId && cancelMutation.mutate()}\n >\n Cancel Run\n </UIButton>\n )}\n </div>\n }\n />\n\n {error && <UIAlert variant=\"error\" message=\"Failed to load workflow run\" description={String(error)} closable />}\n\n {hasPendingApprovals && (\n <UIAlert\n variant=\"warning\"\n message=\"Waiting for your approval\"\n description=\"One or more steps require your decision. Expand the step below to review.\"\n showIcon\n style={{ marginBottom: 16 }}\n />\n )}\n\n {isLoading && <UIPageSection><Text>Loading workflow run...</Text></UIPageSection>}\n {!isLoading && !run && !error && <UIPageSection><Text>Workflow run not found.</Text></UIPageSection>}\n {run && (\n <UIPageSection>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n padding: '12px 16px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n flexWrap: 'wrap',\n }}>\n <WorkflowStatusBadge status={run.status} />\n <Link\n to={`/p/workflows/definitions/${encodeURIComponent(run.name)}`}\n style={{ color: 'var(--link)', fontWeight: 500, fontSize: 14 }}\n >\n {run.name}\n </Link>\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13 }}>\n v{run.version}\n </span>\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13 }}>\n by {run.trigger.actor ?? 'unknown'}\n </span>\n {run.startedAt && (\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13, marginLeft: 'auto' }}>\n {new Date(run.startedAt).toLocaleString()}\n </span>\n )}\n {run.result?.summary && (\n <span style={{\n fontSize: 13,\n color: 'var(--text-secondary)',\n borderTop: '1px solid var(--border-primary)',\n paddingTop: 8,\n width: '100%',\n }}>\n {run.result.summary}\n </span>\n )}\n </div>\n </UIPageSection>\n )}\n\n {run && (\n <UIPageSection>\n {/* View toggle */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 16 }}>\n <Title level={4} style={{ margin: 0 }}>Execution</Title>\n <ViewModeSelector views={VIEW_MODES} current={viewMode} onChange={setViewMode} />\n </div>\n\n {isRunActive && !isConnected && !logError && <UIAlert variant=\"info\" message=\"Connecting to event stream...\" showIcon style={{ marginBottom: 12 }} />}\n {isRunActive && logError && <UIAlert variant=\"error\" message=\"Event stream error\" description={logError.message} style={{ marginBottom: 12 }} />}\n\n {viewMode === 'dashboard' && (\n <DashboardView\n run={run}\n onApprove={(step) => setApprovalStep(step)}\n />\n )}\n {viewMode === 'pipeline' && (\n <PipelineView\n run={run}\n events={events}\n onApprove={(step) => setApprovalStep(step)}\n />\n )}\n {viewMode === 'engineering' && (\n <JobStepLog\n events={events}\n run={run}\n onApprove={(step) => setApprovalStep(step)}\n />\n )}\n </UIPageSection>\n )}\n\n {run?.result && (\n <UIPageSection>\n <Title level={4}>Result Metrics</Title>\n {run.result.metrics ? (\n <UIList\n bordered\n size=\"small\"\n dataSource={Object.entries(run.result.metrics).map(([key, value]) => ({\n key,\n value,\n }))}\n renderItem={({ key, value }) => (\n <UIListItem>\n <Text strong>{key}</Text>\n <span style={{ marginLeft: 8 }}>{String(value ?? '-')}</span>\n </UIListItem>\n )}\n />\n ) : (\n <Text type=\"secondary\">No metrics recorded.</Text>\n )}\n {run.result.error && (\n <UIAlert\n style={{ marginTop: 16 }}\n variant=\"error\"\n message={run.result.error.message}\n description={\n run.result.error.details ? JSON.stringify(run.result.error.details, null, 2) : undefined\n }\n showIcon\n />\n )}\n </UIPageSection>\n )}\n\n <ApprovalModal\n open={approvalStep !== null}\n step={approvalStep}\n runId={runId ?? ''}\n onClose={() => setApprovalStep(null)}\n onResolve={handleApprovalResolve}\n isLoading={resolveApproval.isLoading}\n error={resolveApproval.error instanceof Error ? resolveApproval.error : null}\n />\n </UIPage>\n )\n}\n"],"names":["n","btoa","unescape","encodeURIComponent","JSON","r","i","document","window","e","Error","Text","UITypographyText","Paragraph","UITypographyParagraph","Title","UITitle","TextArea","UIInputTextArea","ApprovalModal","param","_step_spec","step","open","onClose","onResolve","isLoading","error","_useState","comment","setComment","_useState1","pendingAction","setPendingAction","context","title","instructions","contextData","_type_of","handleResolve","action","undefined","UIModal","Object","key","value","String","UIAlert","onChange","UIButton","onClick","STATUS_LABEL","STATUS_COLOR","ANSI_RE","stripAnsi","s","extractLogLines","ev","time","Date","p","_p_outputs","_p_outputs1","_p_stream","msg","stream","stdout","text","stderr","LOG_SKIP_KEYS","Set","StepDetailDrawer","events","onApprove","sseLines","useMemo","logRef","useRef","useEffect","el","pollingLines","lines","_step_outputs","keys","k","dataOutputs","filtered","_iteratorError","v","hasInputs","hasError","hasData","logContent","l","tabItems","UIJsonViewer","statusColor","duration","formatDuration","ms","Math","UIDrawer","UITabs","injected","S_COLOR","S_LABEL","StatusDot","_S_COLOR_status","status","color","filled","PHASE_COLOR","GateDecisionBanner","stepRun","targetStepName","outputs","decision","iteration","isRestart","errorMsg","maxIterReached","StepRow","_S_LABEL_status","isReworkGate","isReworkTarget","reworkActive","rowRef","stepType","isWaiting","isFailed","isRunning","isQueued","isApproval","isGate","gateOutputs","gateAction","highlight","onMouseEnter","onMouseLeave","showBanner","ReworkBracket","gateEl","targetEl","containerEl","isActive","pos","setPos","measure","cr","gr","tr","ro","ResizeObserver","PipelineView","_rowRefs_current_get","_rowRefs_current_get1","run","model","usePipelineModel","selected","setSelected","containerRef","rowRefs","Map","reworkLoop","gateStep","targetStep","stepEvents","phase","pi","_PHASE_COLOR_phase_label","doneCount","isLast","id","flatIdx","isGateWithLoop","S","escapeHtml","heading","level","style","listItems","block","ordered","itemRe","items","line","tag","MarkdownViewer","codeBlocks","html","data","editable","onEdit","editing","setEditing","editValue","setEditValue","md","_","code","idx","c","rawHref","url","t","trimmed","_codeBlocks_Number","Number","SEVERITY_COLOR","IssuesViewer","issues","Array","styles","issue","_issue_severity","_SEVERITY_COLOR_severity","_ref","severity","UITag","TableViewer","_rows_","rows","columns","UITable","DiffViewer","_JSON_stringify","UIDiffViewer","LogViewer","LinkViewer","label","ArtifactErrorBoundary","render","_this_props_label","getDerivedStateFromError","Component","ArtifactViewerInner","type","ArtifactViewer","props","formatDurationMs","m","rem","HeroBlock","_step_spec1","artifactsMap","artifacts","rt","artifact","acc","UISpace","UIIcon","TERMINAL","StatCard","DashboardView","links","rich","phases","allDone","anyActive","allSteps","j","isTerminal","currentStep","completedSteps","failedSteps","futureSteps","totalMs","stepsByPhase","ungroupedSteps","summaryArtifacts","_iteratorError1","PhaseProgressBar","a","STATUS_ICON","eventTypeToStatus","formatTime","ts","payload","_payload_stream","LOG_OUTPUT_KEYS","StepPanel","line1","dataKeys","JobStepLog","groups","buildLogGroups","jobMap","job","stepGroups","_s_outputs","_ev_payload","_ev_payload1","group","stepRunMap","map","activeJobKeys","g","defaultJobKeys","jobItems","_STATUS_ICON_group_status","_STATUS_COLOR_group_status","icon","activeStepKeys","defaultStepKeys","stepItems","_STATUS_ICON_step_status","_STATUS_COLOR_step_status","sIcon","sColor","sDuration","sr","UIAccordion","WorkflowRunDetail","_params_runId","_run_trigger_actor","_run_result","runId","useParams","_useData","runData","refetch","cancelMutation","useMutateData","resolveApproval","isRunActive","_useSSE","logError","isConnected","approvalStep","setApprovalStep","viewMode","setViewMode","hasPendingApprovals","shortRunId","UIPage","UIPageHeader","UIPageSection","WorkflowStatusBadge","Link","ViewModeSelector","UIList","renderItem","UIListItem","_instanceof"],"mappings":"mLAGI,EAA0B,A,SAA4B,KAE1D,EAAwB,IAAI,CAAC,CAAC,EAAO,EAAE,CAAE,CAAC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAE,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,mEAAmE,CAAC,MAAQ,EAAE,CAAC,SAAW,88BAA88B,eAAiB,CAAC,g5DAAg5D,CAAC,WAAa,EAAE,EAAE,EAc1/F,MAAe,C,UCzHf,EAAO,OAAO,CAAG,SAAU,CAAsB,EAC/C,IAAI,EAAO,EAAE,CA4Eb,OAzEA,EAAK,QAAQ,CAAG,WACd,OAAO,IAAI,CAAC,GAAG,CAAC,SAAU,CAAI,EAC5B,IAAI,EAAU,GACVA,EAAY,AAAmB,SAAZ,CAAI,CAAC,EAAE,CAoB9B,OAnBI,CAAI,CAAC,EAAE,EACT,IAAW,cAAc,MAAM,CAAC,CAAI,CAAC,EAAE,CAAE,MAAK,EAE5C,CAAI,CAAC,EAAE,EACT,IAAW,UAAU,MAAM,CAAC,CAAI,CAAC,EAAE,CAAE,KAAI,EAEvCA,GACF,IAAW,SAAS,MAAM,CAAC,CAAI,CAAC,EAAE,CAAC,MAAM,CAAG,EAAI,IAAI,MAAM,CAAC,CAAI,CAAC,EAAE,EAAI,GAAI,KAAI,EAEhF,GAAW,EAAuB,GAC9BA,GACF,IAAW,GAAE,EAEX,CAAI,CAAC,EAAE,EACT,IAAW,GAAE,EAEX,CAAI,CAAC,EAAE,EACT,IAAW,GAAE,EAER,CACT,GAAG,IAAI,CAAC,GACV,EAGA,EAAK,CAAC,CAAG,SAAW,CAAO,CAAE,CAAK,CAAE,CAAM,CAAE,CAAQ,CAAE,CAAK,EACrD,AAAmB,UAAnB,OAAO,GACT,GAAU,CAAC,CAAC,KAAM,EAAS,OAAU,CAAC,AAAD,EAEvC,IAAI,EAAyB,CAAC,EAC9B,GAAI,EACF,IAAK,IAAI,EAAI,EAAG,EAAI,IAAI,CAAC,MAAM,CAAE,IAAK,CACpC,IAAI,EAAK,IAAI,CAAC,EAAE,CAAC,EAAE,AACf,AAAM,OAAN,GACF,EAAsB,CAAC,EAAG,CAAG,EAAG,CAEpC,CAEF,IAAK,IAAI,EAAK,EAAG,EAAK,EAAQ,MAAM,CAAE,IAAM,CAC1C,IAAI,EAAO,EAAE,CAAC,MAAM,CAAC,CAAO,CAAC,EAAG,EAC5B,GAAU,CAAsB,CAAC,CAAI,CAAC,EAAE,CAAC,GAGxB,SAAV,IACc,SAAZ,CAAI,CAAC,EAAE,EAGhB,EAAI,CAAC,EAAE,CAAG,SAAS,MAAM,CAAC,CAAI,CAAC,EAAE,CAAC,MAAM,CAAG,EAAI,IAAI,MAAM,CAAC,CAAI,CAAC,EAAE,EAAI,GAAI,MAAM,MAAM,CAAC,CAAI,CAAC,EAAE,CAAE,IAAG,EAFlG,CAAI,CAAC,EAAE,CAAG,GAMV,IACG,CAAI,CAAC,EAAE,EAGV,EAAI,CAAC,EAAE,CAAG,UAAU,MAAM,CAAC,CAAI,CAAC,EAAE,CAAE,MAAM,MAAM,CAAC,CAAI,CAAC,EAAE,CAAE,IAAG,EAF7D,CAAI,CAAC,EAAE,CAAG,GAMV,IACG,CAAI,CAAC,EAAE,EAGV,CAAI,CAAC,EAAE,CAAG,cAAc,MAAM,CAAC,CAAI,CAAC,EAAE,CAAE,OAAO,MAAM,CAAC,CAAI,CAAC,EAAE,CAAE,KAC/D,CAAI,CAAC,EAAE,CAAG,GAHV,CAAI,CAAC,EAAE,CAAG,GAAG,MAAM,CAAC,IAMxB,EAAK,IAAI,CAAC,GACZ,CACF,EACO,CACT,C,UClFA,EAAO,OAAO,CAAG,SAAU,CAAI,EAC7B,IAAI,EAAU,CAAI,CAAC,EAAE,CACjB,EAAa,CAAI,CAAC,EAAE,CACxB,GAAI,CAAC,EACH,OAAO,EAET,GAAI,AAAgB,YAAhB,OAAOC,KAAqB,CAC9B,IAAI,EAASA,KAAKC,SAASC,mBAAmBC,KAAK,SAAS,CAAC,MAG7D,MAAO,CAAC,EAAQ,CAAC,MAAM,CAAC,CADJ,OAAO,MAAM,CADtB,+DAA+D,MAAM,CAAC,GACzC,OACD,EAAE,IAAI,CAAC,KAChD,CACA,MAAO,CAAC,EAAQ,CAAC,IAAI,CAAC,KACxB,C,UCbA,IAAI,EAAc,EAAE,CACpB,SAAS,EAAqB,CAAU,EAEtC,IAAK,IADDC,EAAS,GACJ,EAAI,EAAG,EAAI,EAAY,MAAM,CAAE,IACtC,GAAI,CAAW,CAAC,EAAE,CAAC,UAAU,GAAK,EAAY,CAC5CA,EAAS,EACT,KACF,CAEF,OAAOA,CACT,CACA,SAAS,EAAa,CAAI,CAAE,CAAO,EAGjC,IAAK,IAFD,EAAa,CAAC,EACdC,EAAc,EAAE,CACX,EAAI,EAAG,EAAI,EAAK,MAAM,CAAE,IAAK,CACpC,IAAI,EAAO,CAAI,CAAC,EAAE,CACd,EAAK,EAAQ,IAAI,CAAG,CAAI,CAAC,EAAE,CAAG,EAAQ,IAAI,CAAG,CAAI,CAAC,EAAE,CACpD,EAAQ,CAAU,CAAC,EAAG,EAAI,EAC1B,EAAa,GAAG,MAAM,CAAC,EAAI,KAAK,MAAM,CAAC,EAC3C,EAAU,CAAC,EAAG,CAAG,EAAQ,EACzB,IAAI,EAAoB,EAAqB,GACzC,EAAM,CACR,IAAK,CAAI,CAAC,EAAE,CACZ,MAAO,CAAI,CAAC,EAAE,CACd,UAAW,CAAI,CAAC,EAAE,CAClB,SAAU,CAAI,CAAC,EAAE,CACjB,MAAO,CAAI,CAAC,EAAE,AAChB,EACA,GAAI,AAAsB,KAAtB,EACF,CAAW,CAAC,EAAkB,CAAC,UAAU,GACzC,CAAW,CAAC,EAAkB,CAAC,OAAO,CAAC,OAClC,CACL,IAAI,EAAU,AAYpB,SAAyB,CAAG,CAAE,CAAO,EACnC,IAAI,EAAM,EAAQ,MAAM,CAAC,UACzB,EAAI,MAAM,CAAC,GACG,SAAiB,CAAM,EAC/B,EACE,GAAO,GAAG,GAAK,EAAI,GAAG,EAAI,EAAO,KAAK,GAAK,EAAI,KAAK,EAAI,EAAO,SAAS,GAAK,EAAI,SAAS,EAAI,EAAO,QAAQ,GAAK,EAAI,QAAQ,EAAI,EAAO,KAAK,GAAK,EAAI,KAAK,AAAD,GAG/J,EAAI,MAAM,CAAC,EAAM,GAEjB,EAAI,MAAM,EAEd,CAEF,EA1BoC,EAAK,EACnC,GAAQ,OAAO,CAAG,EAClB,EAAY,MAAM,CAAC,EAAG,EAAG,CACvB,WAAY,EACZ,QAAS,EACT,WAAY,CACd,EACF,CACAA,EAAY,IAAI,CAAC,EACnB,CACA,OAAOA,CACT,CAgBA,EAAO,OAAO,CAAG,SAAU,CAAI,CAAE,CAAO,EAGtC,IAAI,EAAkB,EADtB,EAAO,GAAQ,EAAE,CADjB,EAAU,GAAW,CAAC,GAGtB,OAAO,SAAgB,CAAO,EAC5B,EAAU,GAAW,EAAE,CACvB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAgB,MAAM,CAAE,IAAK,CAE/C,IAAI,EAAQ,EADK,CAAe,CAAC,EAAE,CAEnC,EAAW,CAAC,EAAM,CAAC,UAAU,EAC/B,CAEA,IAAK,IADD,EAAqB,EAAa,EAAS,GACtC,EAAK,EAAG,EAAK,EAAgB,MAAM,CAAE,IAAM,CAElD,IAAI,EAAS,EADK,CAAe,CAAC,EAAG,CAEE,KAAnC,CAAW,CAAC,EAAO,CAAC,UAAU,GAChC,CAAW,CAAC,EAAO,CAAC,OAAO,GAC3B,EAAY,MAAM,CAAC,EAAQ,GAE/B,CACA,EAAkB,CACpB,CACF,C,UCjFA,IAAI,EAAO,CAAC,CA+BZ,GAAO,OAAO,CAPd,SAA0B,CAAM,CAAE,CAAK,EACrC,IAAI,EAAS,AAtBf,SAAmB,CAAM,EACvB,GAAI,AAAwB,SAAjB,CAAI,CAAC,EAAO,CAAkB,CACvC,IAAI,EAAcC,SAAS,aAAa,CAAC,GAGzC,GAAIC,OAAO,iBAAiB,EAAI,aAAuBA,OAAO,iBAAiB,CAC7E,GAAI,CAGF,EAAc,EAAY,eAAe,CAAC,IAAI,AAChD,CAAE,MAAOC,EAAG,CAEV,EAAc,IAChB,CAEF,CAAI,CAAC,EAAO,CAAG,CACjB,CACA,OAAO,CAAI,CAAC,EAAO,AACrB,EAIyB,GACvB,GAAI,CAAC,EACH,MAAM,AAAIC,MAAM,2GAElB,EAAO,WAAW,CAAC,EACrB,C,UCvBA,EAAO,OAAO,CANd,SAA4B,CAAO,EACjC,IAAI,EAAUH,SAAS,aAAa,CAAC,SAGrC,OAFA,EAAQ,aAAa,CAAC,EAAS,EAAQ,UAAU,EACjD,EAAQ,MAAM,CAAC,EAAS,EAAQ,OAAO,EAChC,CACT,C,cCCA,EAAO,OAAO,CANd,SAAwC,CAAY,EAClD,IAAI,EAAmD,IAAiB,AACpE,IACF,EAAa,YAAY,CAAC,QAAS,EAEvC,C,UCoDA,EAAO,OAAO,CAjBd,SAAgB,CAAO,EACrB,GAAI,AAAoB,IAApB,OAAOA,SACT,MAAO,CACL,OAAQ,WAAmB,EAC3B,OAAQ,WAAmB,CAC7B,EAEF,IAAI,EAAe,EAAQ,kBAAkB,CAAC,GAC9C,MAAO,CACL,OAAQ,SAAgB,CAAG,MAhDzB,EAOA,EAcA,EArBA,EAAM,GACN,AAgD6B,EAhDzB,QAAQ,EACd,IAAO,cAAc,MAAM,CAAC,AA+CG,EA/CC,QAAQ,CAAE,MAAK,EAE7C,AA6C6B,EA7CzB,KAAK,EACX,IAAO,UAAU,MAAM,CAAC,AA4CO,EA5CH,KAAK,CAAE,KAAI,EAGrC,CADA,EAAY,AAAqB,SAAd,AA0CU,EA1CN,KAAK,GAE9B,IAAO,SAAS,MAAM,CAAC,AAwCQ,EAxCJ,KAAK,CAAC,MAAM,CAAG,EAAI,IAAI,MAAM,CAAC,AAwC1B,EAxC8B,KAAK,EAAI,GAAI,KAAI,EAEhF,GAAO,AAsC0B,EAtCtB,GAAG,CACV,GACF,IAAO,GAAE,EAEP,AAkC6B,EAlCzB,KAAK,EACX,IAAO,GAAE,EAEP,AA+B6B,EA/BzB,QAAQ,EACd,IAAO,GAAE,EAGP,CADA,EAAY,AA4BiB,EA5Bb,SAAS,GACZ,AAAgB,IAAhB,OAAON,MACtB,IAAO,uDAAuD,MAAM,CAACA,KAAKC,SAASC,mBAAmBC,KAAK,SAAS,CAAC,MAAe,MAAK,EAK3I,AAqBwB,EArBhB,iBAAiB,CAAC,EAqBhB,EArBmC,AAqBrB,EArB6B,OAAO,CAsB1D,EACA,OAAQ,eArBgB,CAE1B,AAAgC,QAA5B,CAFsB,EAsBH,GApBN,UAAU,EAG3B,EAAa,UAAU,CAAC,WAAW,CAAC,EAkBlC,CACF,CACF,C,UC9CA,EAAO,OAAO,CAVd,SAA2B,CAAG,CAAE,CAAY,EAC1C,GAAI,EAAa,UAAU,CACzB,EAAa,UAAU,CAAC,OAAO,CAAG,MAC7B,CACL,KAAO,EAAa,UAAU,EAC5B,EAAa,WAAW,CAAC,EAAa,UAAU,EAElD,EAAa,WAAW,CAACG,SAAS,cAAc,CAAC,GACnD,CACF,C,spCCAA,IAAMI,EAAOC,EAAAA,gBAAgBA,CACvBC,EAAYC,EAAAA,qBAAqBA,CACjCC,EAAQC,EAAAA,OAAOA,CACfC,EAAWC,EAAAA,eAAeA,CAYzB,SAASC,EAAcC,CAQT,E,UAIFC,EAXjBC,EAD4BF,EAC5BE,IAAI,CAEJC,GAH4BH,EAE5B,KAAK,CAFuBA,EAG5BG,IAAI,EACJC,EAJ4BJ,EAI5BI,OAAO,CACPC,EAL4BL,EAK5BK,SAAS,CACTC,EAN4BN,EAM5BM,SAAS,CACTC,EAP4BP,EAO5BO,KAAK,CAEyBC,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAS,OAAhCC,EAAuBD,CAAAA,CAAAA,EAAAA,CAAdE,EAAcF,CAAAA,CAAAA,EAAAA,CACYG,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAsC,SAAzEC,EAAmCD,CAAAA,CAAAA,EAAAA,CAApBE,EAAoBF,CAAAA,CAAAA,EAAAA,CAEpCG,EAAU,MAAC,SAAAb,GAAAA,MAAAA,CAAAA,EAAAA,EAAM,IAAI,AAAD,EAATA,KAAAA,EAAAA,EAAY,IAAI,AAAD,EAAC,EAAI,CAAC,EAChCc,EAAQ,AAAyB,UAAzB,OAAOD,EAAQ,KAAK,CAAgBA,EAAQ,KAAK,CAAG,MAAH,GAAGZ,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,IAAI,AAAD,EAAC,EAAI,oBAC1Ec,EAAe,AAAgC,UAAhC,OAAOF,EAAQ,YAAY,CAAgBA,EAAQ,YAAY,CAAG,KACjFG,EAAcC,AAA2B,U,IAApBJ,EAAQ,OAAO,G,8DAAiBA,AAAoB,OAApBA,EAAQ,OAAO,CACtEA,EAAQ,OAAO,CACf,KAEEK,EAAgB,SAAOC,CAAM,M,4vCACjCP,EAAiBO,G,iBAEf,O,sBAAA,C,EAAMf,EAAUe,EAAQX,EAAQ,IAAI,IAAMY,Q,eAA1C,SACAX,EAAW,IACXG,EAAiB,M,6BAEjBA,EAAiB,M,yBAErB,E,gLAEA,MACE,WAACS,EAAAA,OAAOA,CAAAA,CACN,KAAMnB,EACN,MAAOY,EACP,MAAM,QACN,aAAc,GACd,SAAUX,EACV,OAAQ,K,UAEPY,GACC,UAACvB,EAAAA,CAAU,MAAO,CAAE,aAAc,EAAG,E,SACnC,UAACF,EAAAA,CAAK,KAAK,Y,SAAayB,C,KAI3BC,GAAeM,OAAO,IAAI,CAACN,GAAa,MAAM,CAAG,GAChD,WAAC,OAAI,MAAO,CAAE,aAAc,EAAG,E,UAC7B,UAACtB,EAAAA,CAAM,MAAO,EAAG,MAAO,CAAE,aAAc,CAAE,E,SAAG,S,GAC7C,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,E,SAC5D4B,OAAO,OAAO,CAACN,GAAa,GAAG,CAAC,Y,aAAEO,EAAAA,CAAAA,CAAAA,EAAAA,CAAKC,EAAAA,CAAAA,CAAAA,EAAAA,C,MACtC,WAAC,OAAc,MAAO,CAAE,QAAS,OAAQ,IAAK,CAAE,E,UAC9C,WAAClC,EAAAA,CAAK,OAAM,GAAC,MAAO,CAAE,SAAU,IAAK,cAAe,YAAa,E,UAC9DiC,EAAI,OAAO,CAAC,WAAY,OAAO,IAAI,GAAG,I,GAEzC,UAACjC,EAAAA,C,SAAMmC,OAAOD,MAAAA,EAAAA,EAAS,I,KAJfD,E,QAWjBjB,GACC,UAACoB,EAAAA,OAAOA,CAAAA,CACN,QAAQ,QACR,QAASpB,EAAM,OAAO,CACtB,MAAO,CAAE,aAAc,EAAG,EAC1B,SAAQ,E,GAIZ,WAAC,OAAI,MAAO,CAAE,aAAc,EAAG,E,UAC7B,UAACZ,EAAAA,CAAM,MAAO,EAAG,MAAO,CAAE,aAAc,CAAE,E,SAAG,oB,GAC7C,UAACE,EAAAA,CACC,KAAM,EACN,YAAY,kCACZ,MAAOY,EACPmB,SAAU,SAACvC,CAAC,E,OAAKqB,EAAWrB,EAAE,MAAM,CAAC,KAAK,C,EAC1C,SAAUiB,C,MAId,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,EAAG,eAAgB,UAAW,E,UAChE,UAACuB,EAAAA,QAAQA,CAAAA,CACP,QAASzB,EACT,SAAUE,E,SACX,Q,GAGD,UAACuB,EAAAA,QAAQA,CAAAA,CACP,OAAM,GACNC,QAAS,WAAWX,EAAc,S,EAClC,QAASb,GAAaM,AAAkB,WAAlBA,EACtB,SAAUN,GAAaM,AAAkB,WAAlBA,E,SACxB,Q,GAGD,UAACiB,EAAAA,QAAQA,CAAAA,CACP,QAAQ,UACRC,QAAS,WAAWX,EAAc,U,EAClC,QAASb,GAAaM,AAAkB,YAAlBA,EACtB,SAAUN,GAAaM,AAAkB,YAAlBA,E,SACxB,S,QAMT,C,oHC3HA,IAAMrB,EAAOC,EAAAA,gBAAgBA,CAEvBuC,EAAuC,CAC3C,OAAkB,SAClB,QAAkB,aAClB,QAAkB,YAClB,OAAkB,SAClB,UAAkB,YAClB,QAAkB,UAClB,iBAAkB,2BACpB,EAEMC,EAAuC,CAC3C,OAAkB,uBAClB,QAAkB,iBAClB,QAAkB,iBAClB,OAAkB,eAClB,UAAkB,uBAClB,QAAkB,uBAClB,iBAAkB,aACpB,EAcMC,EAAU,uCAChB,SAASC,EAAUC,CAAS,EAAY,OAAOA,EAAE,OAAO,CAACF,EAAS,GAAI,CAEtE,SAASG,EAAgBC,CAAoB,EAC3C,IAAMC,EAAOD,EAAG,SAAS,CAAG,IAAIE,KAAKF,EAAG,SAAS,EAAE,kBAAkB,CAAC,QAAS,CAAE,OAAQ,EAAM,GAAK,GAC9FG,EAAIH,EAAG,OAAO,CACpB,GAAI,CAACG,EAAI,MAAO,EAAE,CAGlB,GAAIH,AAAY,iBAAZA,EAAG,IAAI,CAAqB,CAC9B,I,IAMcI,EAIAC,EAREC,EAFVC,EAAM,AAAqB,UAArB,OAAOJ,EAAE,OAAO,CAAgBN,EAAUM,EAAE,OAAO,EAAI,UACnE,AAAKI,EAEE,CAAC,CAAEN,KAAAA,EAAM,KAAMM,EAAKC,OADZ,MAACF,CAAAA,EAAAA,EAAE,MAAM,AAAD,EAAPA,EAAoC,QAClB,EAAE,CAFlB,EAAE,AAGtB,CAEA,IAAMG,EAAS,MAAC,GAAVA,MAAUL,CAAAA,EAAAA,EAAE,OAAO,AAAD,EAARA,KAAAA,EAAAA,EAAmD,MAAM,AAAD,EAAC,EAAID,EAAE,MAAM,CACrF,GAAI,AAAkB,UAAlB,OAAOM,GAAuBA,EAAO,IAAI,GAC3C,OAAOZ,EAAUY,GAAQ,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAACC,SAAAA,CAAI,E,MAAK,CAAET,KAAAA,EAAMS,KAAAA,EAAM,OAAQ,QAAkB,C,GAEnG,IAAMC,EAAS,MAAC,GAAVA,MAAUN,CAAAA,EAAAA,EAAE,OAAO,AAAD,EAARA,KAAAA,EAAAA,EAAmD,MAAM,AAAD,EAAC,EAAIF,EAAE,MAAM,OACrF,AAAI,AAAkB,UAAlB,OAAOQ,GAAuBA,EAAO,IAAI,GACpCd,EAAUc,GAAQ,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAACD,SAAAA,CAAI,E,MAAK,CAAET,KAAAA,EAAMS,KAAAA,EAAM,OAAQ,QAAkB,C,GAE/F,AAAmB,UAAnB,OAAOP,EAAE,KAAK,CAAuB,CAAC,CAAEF,KAAAA,EAAM,KAAME,EAAE,KAAK,CAAE,OAAQ,QAAS,EAAE,CAChF,AAAqB,UAArB,OAAOA,EAAE,OAAO,CAAuB,CAAC,CAAEF,KAAAA,EAAM,KAAME,EAAE,OAAO,AAAC,EAAE,CAClE,AAAkB,UAAlB,OAAOA,EAAE,IAAI,CAAuB,CAAC,CAAEF,KAAAA,EAAM,KAAME,EAAE,IAAI,AAAC,EAAE,CAC5D,AAAkB,UAAlB,OAAOA,EAAE,IAAI,CAAuB,CAAC,CAAEF,KAAAA,EAAM,KAAME,EAAE,IAAI,AAAC,EAAE,CACzD,EAAE,AACX,CAEA,IAAMS,EAAgB,IAAIC,IAAI,CAAC,SAAU,SAAU,WAAY,KAAK,EAU7D,SAASC,EAAiBnD,CAAiE,E,UA0C9EC,EA1CeC,EAAFF,EAAEE,IAAI,CAAEkD,EAARpD,EAAQoD,MAAM,CAAEjD,EAAhBH,EAAgBG,IAAI,CAAEC,EAAtBJ,EAAsBI,OAAO,CAAEiD,EAA/BrD,EAA+BqD,SAAS,CACjEC,EAAWC,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EAAQ,W,OAAMH,EAAO,OAAO,CAAChB,E,EAAkB,CAACgB,EAAO,EAClEI,EAASC,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAuB,MAGtCC,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,WACR,IAAMC,EAAKH,EAAO,OAAO,CACpBG,GACgBA,EAAG,YAAY,CAAGA,EAAG,SAAS,CAAGA,EAAG,YAAY,CAAG,IAEtEA,CAAAA,EAAG,SAAS,CAAGA,EAAG,YAAY,AAAD,CAEjC,EAAG,CAACL,EAAS,MAAM,CAAC,EAEpB,IAAMM,EAAeL,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EAAmB,WACtC,GAAI,CAACrD,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,OAAO,AAAD,GAAKoD,EAAS,MAAM,CAAG,EAAI,MAAO,EAAE,CACrD,IAAMO,EAAmB,EAAE,CACAC,EAAAA,EAAK,OAAO,CAA/BhB,EAAmBgB,EAAnBhB,MAAM,CAAEE,EAAWc,EAAXd,MAAM,CAOtB,GANI,AAAkB,UAAlB,OAAOF,GAAuBA,EAAO,IAAI,IAC3CA,EAAO,IAAI,GAAG,KAAK,CAAC,MAAM,OAAO,CAACC,SAAAA,CAAI,E,OAAIc,EAAM,IAAI,CAAC,CAAE,KAAM,GAAId,KAAAA,CAAK,E,GAEpE,AAAkB,UAAlB,OAAOC,GAAuBA,EAAO,IAAI,IAC3CA,EAAO,IAAI,GAAG,KAAK,CAAC,MAAM,OAAO,CAACD,SAAAA,CAAI,E,OAAIc,EAAM,IAAI,CAAC,CAAE,KAAM,GAAId,KAAAA,CAAK,E,GAEpEc,AAAiB,IAAjBA,EAAM,MAAM,CAAQ,CACtB,IAAME,EAAOxC,OAAO,IAAI,CAACrB,EAAK,OAAO,EAAE,MAAM,CAAC8D,SAAAA,CAAC,E,MAAI,CAACf,EAAc,GAAG,CAACe,E,EAClED,CAAAA,EAAK,MAAM,CAAG,GAAIF,EAAM,IAAI,CAAC,CAAE,KAAM,GAAI,KAAO,aAA4B,OAAhBE,EAAK,IAAI,CAAC,MAAM,KAAI,EACtF,CACA,OAAOF,CACT,EAAG,CAAC3D,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,OAAO,CAAEoD,EAAS,MAAM,CAAC,EAE7BO,EAAQP,EAAS,MAAM,CAAG,EAAIA,EAAWM,EAEzCK,EAAcV,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EAAQ,WAC1B,GAAI,CAACrD,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,OAAO,AAAD,EAAI,OAAO,KAC5B,IAAMgE,EAAoC,CAAC,EACtCC,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAgB5C,OAAO,OAAO,CAACrB,EAAK,OAAO,CAAC,CAAD,mBAA3CiE,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAA8C,CAA9CA,I,EAAAA,G,EAAAA,EAAAA,KAAAA,C,oOAAAA,I,qKAAAA,G,uOAAAA,G,mLAAOH,EAAAA,CAAAA,CAAAA,EAAAA,CAAGI,EAAAA,CAAAA,CAAAA,EAAAA,AACT,CAACnB,EAAc,GAAG,CAACe,IAAKE,CAAAA,CAAQ,CAACF,EAAE,CAAGI,CAAAA,CAC5C,C,UAFKD,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAGL,OAAO5C,OAAO,IAAI,CAAC2C,GAAU,MAAM,CAAG,EAAIA,EAAW,IACvD,EAAG,CAAChE,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,OAAO,CAAC,EAEZmE,EAAYpE,OAAAA,GAAAA,MAAAA,CAAAA,EAAAA,EAAM,IAAI,AAAD,EAATA,KAAAA,EAAAA,EAAY,IAAI,GAAI,MAAQsB,OAAO,IAAI,CAACrB,EAAK,IAAI,CAAC,IAAI,EAAE,MAAM,CAAG,EAC7EoE,EAAWpE,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,KAAK,AAAD,GAAK,KAC1BqE,EAAUN,AAAgB,OAAhBA,EAEVO,EACJ,UAAC,OAAI,MAAO,CAAE,WAAY,YAAa,SAAU,EAAG,E,SACjDX,EAAM,MAAM,CAAG,EACd,UAAC,OAAI,IAAKL,EAAQ,MAAO,CACvB,OAAQ,EACR,QAAS,WACT,WAAY,UACZ,MAAO,UACP,aAAc,EACd,SAAU,OACV,UAAW,IACX,WAAY,WACZ,UAAW,aACX,WAAY,GACd,E,SACGK,EAAM,GAAG,CAAC,SAACY,CAAC,CAAEvF,CAAC,E,MACd,WAAC,Q,UACEuF,EAAE,IAAI,EAAI,UAAC,QAAK,MAAO,CAAE,MAAO,uBAAwB,WAAY,OAAQ,YAAa,EAAG,E,SAAIA,EAAE,IAAI,A,GACvG,UAAC,QAAK,MAAOA,AAAa,WAAbA,EAAE,MAAM,CAAgB,CAAE,MAAO,SAAU,EAAIpD,O,SAAYoD,EAAE,IAAI,A,GAAS,K,EAF9EvF,E,KAOf,UAACK,EAAIA,CAAC,KAAK,YAAY,MAAO,CAAE,SAAU,EAAG,E,SAC1CW,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,MAAM,AAAD,IAAM,UAAY,wBAC7BA,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,MAAM,AAAD,IAAM,SAAW,kBAC5BA,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,MAAM,AAAD,IAAM,mBAAqB,uBACtC,W,KAMHwE,EAAwB,CAC5B,CAAE,IAAK,MAAO,MAAO,MAAO,SAAUF,CAAW,EAClD,AACGD,CAAAA,GAAUG,EAAS,IAAI,CAAC,CAAE,IAAK,OAAQ,MAAO,OAAQ,SAAU,UAACC,EAAAA,YAAYA,CAAAA,CAAC,KAAMV,C,EAAgB,GACpGI,GAAYK,EAAS,IAAI,CAAC,CAAE,IAAK,SAAU,MAAO,SAAU,SAAU,UAACC,EAAAA,YAAYA,CAAAA,CAAC,KAAMzE,EAAM,IAAI,CAAE,IAAI,A,EAAK,GAC/GoE,GAAWI,EAAS,IAAI,CAAC,CAAE,IAAK,QAAS,MAAO,QAAS,SAAU,UAACC,EAAAA,YAAYA,CAAAA,CAAC,KAAMzE,EAAM,KAAK,A,EAAK,GAE3G,IAAM0E,EAAc5C,CAAY,CAAC,MAAD,GAAC9B,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,MAAM,AAAD,EAAC,EAAI,SAAS,CACpD2E,EAAWC,AA5InB,SAAwBC,CAAW,EACjC,GAAI,CAACA,EAAK,OAAO,KACjB,GAAIA,EAAK,IAAO,MAAQ,GAAK,OAAHA,EAAG,MAC7B,IAAM5C,EAAI4C,EAAK,WACf,AAAI5C,EAAI,GAAa,GAAe,OAAbA,EAAE,OAAO,CAAC,GAAG,KAC5B,GAAyB6C,MAAAA,CAAvBA,KAAK,KAAK,CAAC7C,EAAI,IAAI,MAAuB,OAAnB6C,KAAK,KAAK,CAAC7C,EAAI,IAAI,IACtD,EAsIkCjC,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,UAAU,EAEhD,MACE,UAAC+E,EAAAA,QAAQA,CAAAA,CACP,KAAM9E,EACN,QAASC,EACT,MACE,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,E,UAC7D,UAAC,QAAK,MAAO,CAAE,SAAU,GAAI,WAAY,GAAI,E,kBAAIF,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,IAAI,AAAD,EAAC,EAAI,E,GAC/D,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,GAAI,WAAY,QAAS,E,UAC3D,UAAC,QAAK,MAAO,CAAE,SAAU,GAAI,MAAO0E,EAAa,WAAY,GAAI,E,SAC9D7C,CAAY,CAAC,MAAD,GAAC7B,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,MAAM,AAAD,EAAC,EAAI,SAAS,A,GAExC2E,GACC,UAAC,QAAK,MAAO,CAAE,SAAU,GAAI,MAAO,sBAAuB,E,SACxDA,C,SAMX,UAAU,QACV,MAAO,IACP,OACE3E,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,MAAM,AAAD,IAAM,oBAAsBmD,EACrC,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,eAAgB,UAAW,E,SACxD,UAACxB,EAAAA,QAAQA,CAAAA,CAAC,QAAQ,UAAU,QAASwB,E,SAAW,iB,KAIhD,K,SAGLnD,GACCwE,CAAAA,EAAS,MAAM,CAAG,EACd,UAACQ,EAAAA,MAAMA,CAAAA,CAAC,MAAOR,EAAU,KAAK,QAAQ,iBAAiB,K,GACvDF,CAAS,C,EAIrB,C,q7BClMA,IAAIW,EAAW,GAWTC,EAAkC,CACtC,OAAkB,uBAClB,QAAkB,iBAClB,QAAkB,iBAClB,OAAkB,eAClB,UAAkB,uBAClB,QAAkB,uBAClB,iBAAkB,aACpB,EAEMC,EAAkC,CACtC,OAAkB,SAClB,QAAkB,UAClB,QAAkB,OAClB,OAAkB,SAClB,UAAkB,YAClB,QAAkB,UAClB,iBAAkB,QACpB,EAEA,SAASC,EAAUtF,CAA8B,E,IAEjCuF,EAFKC,EAAFxF,EAAEwF,MAAM,CA7BzB,GAAIL,CAAAA,GAAY,AAAoB,IAApB,OAAOhG,UACvBgG,EAAW,GACX,IAAMhD,EAAIhD,SAAS,aAAa,CAAC,QACjCgD,CAAAA,EAAE,WAAW,CATE,mKAUfhD,SAAS,IAAI,CAAC,WAAW,CAACgD,GA2B1B,IAAMsD,EAAQ,MAAAF,CAAAA,EAAAA,CAAO,CAACC,EAAO,AAAD,EAAdD,EAAmB,6BACjC,AAAIC,AAAW,YAAXA,EACK,UAAC,QAAK,MAAO,CAClB,QAAS,eAAgB,MAAO,EAAG,OAAQ,EAAG,WAAY,EAC1D,OAAS,aAAkB,OAANC,GAAS,eAAgB,cAC9C,aAAc,MAAO,UAAW,8BAClC,C,GAGK,UAAC,QAAK,MAAO,CAClB,QAAS,eAAgB,MAAO,EAAG,OAAQ,EAAG,WAAY,EAC1D,aAAc,MACd,WAAYC,AAJCF,AAAW,YAAXA,GAAwBA,AAAW,WAAXA,GAAuBA,AAAW,qBAAXA,EAIvCC,EAAQ,cAC7B,OAAS,aAAkB,OAANA,EACvB,C,EACF,CAEA,SAASX,EAAeC,CAAW,EACjC,GAAI,CAACA,EAAK,OAAO,KACjB,GAAIA,EAAK,IAAO,MAAQ,GAAK,OAAHA,EAAG,MAC7B,IAAM5C,EAAI4C,EAAK,WACf,AAAI5C,EAAI,GAAa,GAAe,OAAbA,EAAE,OAAO,CAAC,GAAG,KAC5B,GAAyB6C,MAAAA,CAAvBA,KAAK,KAAK,CAAC7C,EAAI,IAAI,MAAuB,OAAnB6C,KAAK,KAAK,CAAC7C,EAAI,IAAI,IACtD,CAIA,IAAMwD,EAAsC,CAC1C,SAAgB,cAChB,eAAgB,iBAChB,QAAgB,iBAChB,SAAgB,aAClB,EAaA,SAASC,EAAmB5F,CAA0E,E,UAAxE6F,EAAF7F,EAAE6F,OAAO,CAAEC,EAAX9F,EAAW8F,cAAc,CAC7CC,EAAUF,EAAQ,OAAO,CACzBtF,EAAUsF,EAAQ,KAAK,CAGvBzE,EAAAA,MAAAA,CAAAA,EAAY2E,MAAAA,EAAAA,KAAAA,EAAAA,EAAS,MAAM,AAAD,EAAC,EAAKF,AAAmB,WAAnBA,EAAQ,MAAM,CAAgB,OAASxE,OACvE2E,EAAYD,MAAAA,EAAAA,KAAAA,EAAAA,EAAS,aAAa,CAClCE,EAAYF,MAAAA,EAAAA,KAAAA,EAAAA,EAAS,SAAS,CAEpC,GAAI,CAAC3E,GAAUA,AAAW,aAAXA,EAAwB,OAAO,KAE9C,IAAM8E,EAAY9E,AAAW,YAAXA,EAEZqE,EAAUS,EAAY,iBAAmB,eAKzCC,EAAW,AAA0B,UAA1B,MAAO5F,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAO,OAAO,AAAD,EAAiBA,EAAM,OAAO,CAAG,KAChE6F,EAAiB,MAAjBA,CAAAA,EAAiBL,MAAAA,EAAAA,KAAAA,EAAAA,EAAS,oBAAoB,AAAD,EAAC,WAC9CI,MAAAA,EAAAA,KAAAA,EAAAA,EAAU,WAAW,GAAG,QAAQ,CAAC,gBAAe,GAAf,EAEvC,MACE,WAAC,OAAI,MAAO,CACV,OAAQ,iBACR,QAAS,WACT,WAZYD,EACZ,6DACA,2DAWA,OAAS,gCAAqC,OAANT,EAAM,sBAC9C,aAAc,EACd,SAAU,GACV,WAAY,GACd,E,UAEE,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,aAAc,CAAE,E,UAC3E,UAAC,QAAK,MAAO,CAAEA,MAAAA,EAAO,WAAY,GAAI,E,SACnCS,EAAY,wBAA0B,e,GAExCD,AAAc5E,SAAd4E,GACC,WAAC,QAAK,MAAO,CACX,MAAO,uBACP,WAAY,qBACZ,QAAS,QAAS,aAAc,EAAG,SAAU,EAC/C,E,UAAG,aACUA,EAAY,E,MAM5BD,MAAAA,GACC,WAAC,OAAI,MAAO,CAAE,MAAO,uBAAwB,E,UAC3C,UAAC,QAAK,MAAO,CAAE,MAAO,sBAAuB,E,SAAG,Y,GAChD,UAAC,QAAK,MAAO,CACX,SAAU,GACV,WAAY,qBACZ,QAAS,QAAS,aAAc,EAChC,MAAOP,EACP,WAAY,WACd,E,SACG/D,OAAOsE,E,MAMbE,GAAaJ,GACZ,WAAC,OAAI,MAAO,CAAE,MAAO,wBAAyB,UAAW,CAAE,E,UACzD,UAAC,QAAK,MAAO,CAAE,MAAO,sBAAuB,E,SAAG,mB,GAChD,UAAC,QAAK,MAAO,CAAE,WAAY,GAAI,E,SAAIA,C,MAKtCM,GACC,UAAC,OAAI,MAAO,CAAE,MAAO,eAAgB,UAAW,CAAE,E,SAAG,2C,GAMtDD,GAAY,CAACC,GACZ,UAAC,OAAI,MAAO,CAAE,MAAO,wBAAyB,UAAW,EAAG,UAAW,QAAS,E,SAC7ED,C,KAKX,CAcA,SAASE,EAAQrG,CAAmG,E,MAgG/FuF,EAGNe,EAnGIpG,EAAFF,EAAEE,IAAI,CAAEqG,EAARvG,EAAQuG,YAAY,CAAEC,EAAtBxG,EAAsBwG,cAAc,CAAEC,EAAtCzG,EAAsCyG,YAAY,CAAEX,EAApD9F,EAAoD8F,cAAc,CAAEhE,EAApE9B,EAAoE8B,OAAO,CAAE4E,EAA7E1G,EAA6E0G,MAAM,CAC1Fb,EAAiC3F,EAAjC2F,OAAO,CAAEc,EAAwBzG,EAAxByG,QAAQ,CAAEV,EAAc/F,EAAd+F,SAAS,CAC9BT,EAAYK,EAAQ,MAAM,CAC1Be,EAAYpB,AAAW,qBAAXA,EACZqB,EAAYrB,AAAW,WAAXA,EACZsB,EAAYtB,AAAW,YAAXA,EACZuB,EAAYvB,AAAW,WAAXA,EACZwB,EAAaL,AAAa,aAAbA,EACbM,EAAaN,AAAa,SAAbA,EAGbO,EAAcD,EAASpB,EAAQ,OAAO,CAA8BxE,OACpE8F,EAAcD,MAAAA,EAAAA,KAAAA,EAAAA,EAAa,MAAM,CAGjCE,EAAYR,EACd,CAAE,GAAI,0DAA8D,OAAQ,aAAc,EAC1FC,EACA,CAAE,GAAI,2DAA8D,OAAQ,cAAe,EAC3FL,GAAkBC,EAClB,CAAE,GAAI,6DAA8D,OAAQ,gBAAiB,EAC7F,KAEJ,MACE,uB,UACE,WAAC,OACC,IAAKC,EACL,QAAS5E,EACT,MAAO,CACL,QAAS,OACT,WAAY,SACZ,IAAK,GACL,QAASsF,EAAY,YAAc,WACnC,WAAYJ,AAAa,KAAbA,EACZ,aAAc,EACd,WAAY,MAAF,GAAEI,MAAAA,EAAAA,KAAAA,EAAAA,EAAW,EAAE,AAAD,EAAC,EAAI,cAC7B,OAAQA,EAAa,aAA6B,OAAjBA,EAAU,MAAM,EAAK,wBACtD,OAAQ,UACR,SAAU,WACV,SAAU,SACV,WAAY,iBACd,EACAC,aAAchI,SAAAA,CAAC,EACT,AAAC+H,GAAa/H,CAAAA,EAAE,aAAa,CAAoB,KAAK,CAAC,UAAU,CAAG,iBAAgB,CAC1F,EACAiI,aAAcjI,SAAAA,CAAC,EACT,AAAC+H,GAAa/H,CAAAA,EAAE,aAAa,CAAoB,KAAK,CAAC,UAAU,CAAG,aAAY,CACtF,E,UAECyH,GACC,UAAC,OAAI,MAAO,CACV,SAAU,WAAY,IAAK,EAAG,KAAM,EAAG,OAAQ,EAAG,MAAO,MACzD,WAAY,mEACZ,UAAW,sCACb,C,GAGF,UAACxB,EAAAA,CAAU,OAAQE,C,GAEnB,WAAC,QAAK,MAAO,CACX,KAAM,EACN,SAAU,GACV,MAAOuB,EAAW,uBAAyB,sBAC3C,WAAYH,GAAaC,EAAW,IAAM,IAC1C,UAAWI,EAAS,SAAW,QACjC,E,UACGD,GAAc,UAAC,QAAK,MAAO,CAAE,MAAO,cAAe,YAAa,EAAG,UAAW,SAAU,SAAU,EAAG,E,SAAG,G,GACxGnB,EAAQ,IAAI,C,GAGf,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAAI,WAAY,CAAE,E,UACzEU,GAAgBN,GACf,WAAC,QAAK,MAAO,CACX,SAAU,GAAI,WAAY,IAAK,MAAO,iBACtC,WAAY,sDACZ,QAAS,UAAW,aAAc,CACpC,E,UAAG,KACEA,EAAU,OAAO,CAAC,IAAEA,EAAU,GAAG,C,GAGvCnB,EAAee,EAAQ,UAAU,GAChC,UAAC,QAAK,MAAO,CAAE,SAAU,GAAI,MAAO,sBAAuB,E,SACxDf,EAAee,EAAQ,UAAU,C,GAGrCe,EACC,UAAC,QAAK,MAAO,CACX,SAAU,GAAI,WAAY,IAAK,MAAO,cACtC,WAAY,mDACZ,QAAS,UAAW,aAAc,CACpC,E,SAAG,Q,GAIH,UAAC,QAAK,MAAO,CACX,SAAU,GACV,MAAO,MAAArB,CAAAA,EAAAA,CAAO,CAACC,EAAO,AAAD,EAAdD,EAAmB,uBAC1B,SAAU,GAAI,UAAW,OAC3B,E,eACGe,CAAAA,EAAAA,CAAO,CAACd,EAAO,AAAD,EAAdc,EAAmBd,C,SAO3B+B,AA7FeN,GAAWE,CAAAA,AAAe,YAAfA,GAA4BA,AAAe,SAAfA,GAAyBN,CAAO,GA8FrF,UAACjB,EAAAA,CAAmB,QAASC,EAAS,eAAgBC,C,KAI9D,CAIA,SAAS0B,EAAcxH,CAOtB,E,IANCyH,EADqBzH,EACrByH,MAAM,CAAEC,EADa1H,EACb0H,QAAQ,CAAEC,EADG3H,EACH2H,WAAW,CAAEC,EADV5H,EACU4H,QAAQ,CAOjBpH,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAiD,SAAhEqH,EAAerH,CAAAA,CAAAA,EAAAA,CAAVsH,EAAUtH,CAAAA,CAAAA,EAAAA,CAmBtB,GAlBAkD,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,WACR,GAAI,AAAC+D,GAAWC,GAAaC,GAC7B,IAAMI,EAAU,WACd,IAAMC,EAAKL,EAAY,qBAAqB,GACtCM,EAAKR,EAAO,qBAAqB,GACjCS,EAAKR,EAAS,qBAAqB,GACzCI,EAAO,CACL,IAAKI,EAAG,GAAG,CAAGF,EAAG,GAAG,CAAGE,EAAG,MAAM,CAAG,EACnC,OAAQlD,KAAK,GAAG,CAAC,EAAGiD,EAAG,GAAG,CAAGD,EAAG,GAAG,CAAGC,EAAG,MAAM,CAAG,EAAKC,CAAAA,EAAG,GAAG,CAAGF,EAAG,GAAG,CAAGE,EAAG,MAAM,CAAG,GACvF,EACF,EACAH,IACA,IAAMI,EAAK,IAAIC,eAAeL,GAI9B,OAHAI,EAAG,OAAO,CAACR,GACXQ,EAAG,OAAO,CAACV,GACXU,EAAG,OAAO,CAACT,GACJ,W,OAAMS,EAAG,UAAU,E,EAC5B,EAAG,CAACV,EAAQC,EAAUC,EAAY,EAC9B,CAACE,GAAOA,EAAI,MAAM,CAAG,EAAI,OAAO,KACpC,IAAMpC,EAAQmC,EAAW,iBAAmB,wBAC5C,MACE,UAAC,OAAI,MAAO,CAAE,SAAU,WAAY,KAAM,EAAG,IAAKC,EAAI,GAAG,CAAE,MAAO,EAAG,OAAQA,EAAI,MAAM,CAAE,cAAe,MAAO,E,SAC7G,WAAC,OAAI,MAAO,EAAG,OAAQA,EAAI,MAAM,CAAE,SAAS,U,UAC1C,UAAC,QAAK,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAIA,EAAI,MAAM,CACvC,OAAQpC,EAAO,YAAamC,EAAW,EAAI,IAC3C,gBAAiBA,EAAWvG,OAAY,K,GAC1C,UAAC,WAAQ,OAAO,cAAc,KAAMoE,C,OAI5C,CAUO,SAAS4C,EAAarI,CAA6C,E,IAwBxDsI,EACEC,EAzBWC,EAAFxI,EAAEwI,GAAG,CAAEpF,EAAPpD,EAAOoD,MAAM,CAAEC,EAAfrD,EAAeqD,SAAS,CAC7CoF,EAAQC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAiBF,GACChI,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAyB,SAAlDmI,EAAyBnI,CAAAA,CAAAA,EAAAA,CAAfoI,EAAepI,CAAAA,CAAAA,EAAAA,CAC1BqI,EAAepF,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAA8B,MAC7CqF,EAAUrF,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAoC,IAAIsF,KAOxD,GAAI,CAACN,EAAM,KAAK,CAAC,MAAM,CACrB,MAAO,UAAC,OAAI,MAAO,CAAE,QAAS,SAAU,MAAO,uBAAwB,SAAU,EAAG,E,SAAG,wB,GAGzF,IAAQO,EAAeP,EAAfO,UAAU,CACZC,EAAaD,EAAaP,EAAM,KAAK,CAACO,EAAW,SAAS,CAAC,CAAK,KAChEE,EAAaF,EAAaP,EAAM,KAAK,CAACO,EAAW,WAAW,CAAC,CAAG,KAChEG,EAAa/F,EAAO,MAAM,CAAC/D,SAAAA,CAAC,E,OAAIA,EAAE,MAAM,GAAKsJ,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAU,EAAE,AAAD,C,GAE9D,MACE,WAAC,OAAI,IAAKE,EAAc,MAAO,CAAE,SAAU,WAAY,YAAa,EAAG,E,UACpEG,GAAcC,GAAYC,GACzB,UAAC1B,EAAAA,CACC,OAAM,MAAEc,CAAAA,EAAAA,EAAQ,OAAO,CAAC,GAAG,CAACW,EAAS,OAAO,CAAC,EAAE,GAAvCX,EAA4C,KACpD,SAAQ,MAAEC,CAAAA,EAAAA,EAAQ,OAAO,CAAC,GAAG,CAACW,EAAW,OAAO,CAAC,EAAE,GAAzCX,EAA8C,KACxD,YAAaM,EAAa,OAAO,CACjC,SAAUG,EAAW,QAAQ,A,GAIhCP,EAAM,MAAM,CAAC,GAAG,CAAC,SAACW,CAAK,CAAEC,CAAE,EAC1B,IAAkBC,EAAZ7D,EAAAA,MAAY6D,CAAAA,EAAAA,CAAW,CAACF,EAAM,KAAK,CAAC,AAAD,EAAvBE,EAA4B,uBACxCC,EAAYH,EAAM,KAAK,CAAC,MAAM,CAACjH,SAAAA,CAAC,E,MAAIA,AAAqB,YAArBA,EAAE,OAAO,CAAC,MAAM,A,GAAgB,MAAM,CAC1EqH,EAAYH,IAAOZ,EAAM,MAAM,CAAC,MAAM,CAAG,EAE/C,MACE,WAAC,OAAsB,MAAO,CAAE,aAAce,AAAa,IAAbA,CAAgB,E,UAE5D,WAAC,OAAI,MAAO,CACV,QAAS,OAAQ,WAAY,SAAU,IAAK,EAC5C,QAAS,QAAS,aAAc,CAClC,E,UACE,UAAC,OAAI,MAAO,CAAE,MAAO,EAAG,OAAQ,GAAI,WAAY/D,EAAO,aAAc,EAAG,WAAY,CAAE,C,GACtF,UAAC,QAAK,MAAO,CACX,SAAU,GAAI,WAAY,IAC1B,cAAe,YAAa,cAAe,SAC3CA,MAAAA,CACF,E,SACG2D,EAAM,KAAK,A,GAEd,WAAC,QAAK,MAAO,CAAE,SAAU,GAAI,MAAO,uBAAwB,WAAY,CAAE,E,UACvEG,EAAU,IAAEH,EAAM,KAAK,CAAC,MAAM,C,MAKnC,UAAC,OAAI,MAAO,CACV,WAAa,gCAAqC,OAAN3D,EAAM,gCAClD,WAAY,EACZ,YAAa,GACb,WAAY,EACZ,cAAe,CACjB,E,SACG2D,EAAM,KAAK,CAAC,GAAG,CAAClJ,SAAAA,CAAI,EACnB,IA3DEuJ,E,EA2DIC,EAAUjB,EAAM,KAAK,CAAC,OAAO,CAACvI,GAC9ByJ,EAAiBX,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAY,SAAS,AAAD,IAAMU,EACjD,MACE,UAACrD,EAAAA,CAEC,KAAMnG,EACN,aAAcyJ,MAAAA,GAAAA,EACd,eAAgBX,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAY,WAAW,AAAD,IAAMU,EAC5C,aAAY,SAAEV,MAAAA,EAAAA,KAAAA,EAAAA,EAAY,QAAQ,AAAD,GAAC,EAClC,eAAgBW,EAAiBT,MAAAA,EAAAA,KAAAA,EAAAA,EAAY,OAAO,CAAC,IAAI,CAAG7H,OAC5DS,QAAS,W,OAAM8G,EAAY1I,EAAK,OAAO,C,EACvC,MAAM,EAtERuJ,EAsEiBvJ,EAAK,OAAO,CAAC,EAAE,CAtEjB,SAACyD,CAAE,EAC5BA,EAAKmF,EAAQ,OAAO,CAAC,GAAG,CAACW,EAAI9F,GAC3BmF,EAAQ,OAAO,CAAC,MAAM,CAACW,EAC/B,E,EA4DuBvJ,EAAK,OAAO,CAAC,EAAE,CAU1B,E,KA1CMkJ,EAAM,KAAK,CA8CzB,GAEA,UAACjG,EAAgBA,CACf,KAAMwF,EACN,OAAQQ,EACR,KAAMR,AAAa,OAAbA,EACNvI,QAAS,W,OAAMwI,EAAY,K,EAC3B,UACED,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAU,MAAM,AAAD,IAAM,oBAAsBtF,EACvC,WAAQA,EAAUsF,GAAWC,EAAY,KAAM,EAC/CvH,M,KAKd,C,68BCjcA,IAAMuI,EAAI,CACR,IAAS,6JACT,KAAS,6FACT,KAAS,oBACT,GAAS,wEACT,GAAS,0EACT,GAAS,0EACT,GAAS,0EACT,GAAS,iCACT,GAAS,iCACT,GAAS,eACT,GAAS,uEACT,EAAS,8BACX,EAIA,SAASC,EAAW1H,CAAS,EAC3B,OAAOA,EAAE,OAAO,CAAC,KAAM,SAAS,OAAO,CAAC,KAAM,QAAQ,OAAO,CAAC,KAAM,OACtE,CAcA,SAAS2H,EAAQC,CAAoB,CAAEhH,CAAY,EACjD,IAAM0G,EAZC1G,AAYYA,EAZP,WAAW,GAAG,OAAO,CAAC,YAAa,IAAI,IAAI,GAAG,OAAO,CAAC,OAAQ,KAapEiH,EAAQJ,CAAC,CAAE,IAAS,OAANG,GAAQ,CAC5B,MAAQ,KAAiBN,MAAAA,CAAbM,EAAM,SAAqBC,MAAAA,CAAdP,EAAG,aAAqB1G,MAAAA,CAAViH,EAAM,MAAcD,MAAAA,CAAVhH,EAAK,OAAW,OAANgH,EAAM,IACnE,CAEA,SAASE,EAAUC,CAAa,CAAEC,CAAgB,EAChD,IAAMC,EAASD,EAAU,gBAAkB,gBACrCE,EAAQH,EAAM,IAAI,GAAG,KAAK,CAAC,MAC9B,GAAG,CAACI,SAAAA,CAAI,E,MAAK,cAAsBA,MAAAA,CAATV,EAAE,EAAE,CAAC,MAA6B,OAAzBU,EAAK,OAAO,CAACF,EAAQ,IAAI,Q,GAC5D,IAAI,CAAC,IACFG,EAAMJ,EAAU,KAAO,KAC7B,MAAQ,IAAiBP,MAAAA,CAAdW,EAAI,YAAqBF,MAAAA,CAAXT,CAAC,CAACW,EAAI,CAAC,MAAcA,MAAAA,CAAVF,EAAM,MAAQ,OAAJE,EAAI,IACpD,CA4DO,SAASC,EAAexK,CAAiC,E,IAtDxDyK,EACFC,EAqD2BC,EAAF3K,EAAE2K,IAAI,CAAEC,EAAR5K,EAAQ4K,QAAQ,CAAEC,EAAlB7K,EAAkB6K,MAAM,CAC/C9H,EAAO,AAAgB,UAAhB,OAAO4H,EAAoBA,EAAOA,AAAQ,MAARA,EAAe,GAAK3L,KAAK,SAAS,CAAC2L,EAAM,KAAM,GAChEnK,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAS,OAAhCsK,EAAuBtK,CAAAA,CAAAA,EAAAA,CAAduK,EAAcvK,CAAAA,CAAAA,EAAAA,CACIG,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAASoC,GAAAA,GAApCiI,EAA2BrK,CAAAA,CAAAA,EAAAA,CAAhBsK,EAAgBtK,CAAAA,CAAAA,EAAAA,QAElC,AAAImK,GAAWF,EAEX,WAAC,O,UACC,UAAC,YACC,MAAOI,EACPpJ,SAAUvC,SAAAA,CAAC,E,OAAI4L,EAAa5L,EAAE,MAAM,CAAC,KAAK,C,EAC1C,MAAO,CACL,MAAO,OAAQ,UAAW,IAAK,WAAY,YAAa,SAAU,GAClE,QAAS,GAAI,OAAQ,kCAAmC,aAAc,EACtE,WAAY,oBAAqB,MAAO,sBACxC,OAAQ,WAAY,UAAW,YACjC,C,GAEF,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,EAAG,UAAW,CAAE,E,UAClD,UAACwC,EAAAA,QAAQA,CAAAA,CAAC,KAAK,QAAQ,QAAQ,UAAUC,QAAS,WAAQ+I,MAAAA,GAAAA,EAASG,GAAYD,EAAW,GAAO,E,SAAG,M,GACpG,UAAClJ,EAAAA,QAAQA,CAAAA,CAAC,KAAK,QAAQ,QAAQ,UAAUC,QAAS,WAAQmJ,EAAalI,GAAOgI,EAAW,GAAO,E,SAAG,Q,SAOzG,WAAC,OAAI,MAAO,CAAE,SAAU,UAAW,E,UAChCH,GACC,UAAC/I,EAAAA,QAAQA,CAAAA,CAAC,KAAK,QAAQ,QAAQ,OAAO,MAAO,CAAE,MAAO,OAAQ,EAAGC,QAAS,W,OAAMiJ,EAAW,G,WAAO,M,GAIpG,UAAC,OACC,MAAO,CAAE,SAAU,GAAI,WAAY,IAAK,MAAO,qBAAsB,EACrE,wBAAyB,CAAE,MAAM,EAzFjCN,EAAuB,EAAE,CAC3BC,EAAOQ,AAwFuCnI,EAxFpC,OAAO,CAAC,4BAA6B,SAACoI,CAAC,CAAEC,CAAI,EACzD,IAAMC,EAAMZ,EAAW,MAAM,CAE7B,OADAA,EAAW,IAAI,CAAE,eAAwBZ,MAAAA,CAAVD,EAAE,GAAG,CAAC,MAAwC,OAApCC,EAAWuB,EAAK,OAAO,CAAC,MAAO,KAAK,WACrE,SAAc,OAAJC,EAAI,KACxB,GA0CAX,EAAOA,AARPA,CAAAA,EAAOA,AADPA,CAAAA,EAAOA,AAHPA,CAAAA,EAAOA,AAHPA,CAAAA,EAAOA,AADPA,CAAAA,EAAOA,AAHPA,CAAAA,EAAOA,AADPA,CAAAA,EAAOA,AADPA,CAAAA,EAAOA,AAHPA,CAAAA,EAAOA,AADPA,CAAAA,EAAOA,AADPA,CAAAA,EAAOA,AADPA,CAAAA,EAAOA,AANPA,CAAAA,EAAOA,AAHPA,CAAAA,EAAOA,AAHPA,CAAAA,EAAOb,EAAWa,EAAI,EAGV,OAAO,CAAC,aAAc,SAACS,CAAC,CAAEG,CAAC,E,MAAM,gBAA0BA,MAAAA,CAAX1B,EAAE,IAAI,CAAC,MAAM,OAAF0B,EAAE,U,IAG7D,OAAO,CAAC,2BAA4B,SAACH,CAAC,CAAEpI,CAAI,CAAEwI,CAAO,EAC/D,IA1CgB9B,EA0CV+B,EAAMD,EAAQ,OAAO,CAAC,SAAU,KACtC,OAAOC,EAAI,UAAU,CAAC,MA3CN/B,EA2CwB+B,EAAI,KAAK,CAAC,GA1C5C,aAA4E/B,MAAAA,CAAhEA,EAAG,gEAAkHG,MAAAA,CAArDH,EAAG,sDAA4E1G,MAAAA,CAA1B6G,EAAE,IAAI,CAAC,qBAAwB,OA0ChH7G,EA1CgH,SAIhK,YAAoE6G,MAAAA,CAsCC4B,EAtCtD,uDAAgEzI,MAAAA,CAAX6G,EAAE,IAAI,CAAC,MAAS,OAsCV7G,EAtCU,OAuC5F,EAAC,EAGW,OAAO,CAAC,gBAAiB,SAACoI,CAAC,CAAEM,CAAC,E,OAAK3B,EAAQ,EAAG2B,E,IAC9C,OAAO,CAAC,eAAiB,SAACN,CAAC,CAAEM,CAAC,E,OAAK3B,EAAQ,EAAG2B,E,IAC9C,OAAO,CAAC,cAAiB,SAACN,CAAC,CAAEM,CAAC,E,OAAK3B,EAAQ,EAAG2B,E,IAC9C,OAAO,CAAC,aAAiB,SAACN,CAAC,CAAEM,CAAC,E,OAAK3B,EAAQ,EAAG2B,E,IAG9C,OAAO,CAAC,qBAAsB,+BAA8B,EAC5D,OAAO,CAAC,iBAAsB,sBAAqB,EACnD,OAAO,CAAC,aAAsB,cAAa,EAG3C,OAAO,CAAC,8BAA+BvB,SAAAA,CAAK,E,OAAID,EAAUC,EAAO,G,IACjE,OAAO,CAAC,8BAAgCA,SAAAA,CAAK,E,OAAID,EAAUC,EAAO,G,IAGlE,OAAO,CAAC,UAAY,cAAkB,OAALN,EAAE,EAAE,CAAC,SAGtC,OAAO,CAAC,UAAW,OAAM,EACzB,KAAK,CAAC,QAAQ,GAAG,CAACM,SAAAA,CAAK,EACjC,IAAMwB,EAAUxB,EAAM,IAAI,UAC1B,AAAKwB,EACD,uDAAuD,IAAI,CAACA,GAAkBA,EAC1E,aAAoBA,MAAAA,CAAR9B,EAAE,CAAC,CAAC,MAAoC,OAAhC8B,EAAQ,OAAO,CAAC,MAAO,SAAS,QAFtC,EAGxB,GAAG,IAAI,CAAC,KAAI,EAGA,OAAO,CAAC,qBAAsB,SAACP,CAAC,CAAEjM,CAAC,E,IAAKyM,E,aAAAA,CAAAA,EAAAA,CAAU,CAACC,OAAO1M,GAAG,AAAD,EAApByM,EAAyB,E,GA0CrB,C,KAI1D,C,0ICjJI,GAAU,CAAC,CAEf,IAAQ,iBAAiB,CAAG,KAC5B,GAAQ,aAAa,CAAG,KACxB,GAAQ,MAAM,CAAG,QAAa,CAAC,KAAM,QACrC,GAAQ,MAAM,CAAG,IACjB,GAAQ,kBAAkB,CAAG,KAEhB,IAAI,KAAO,CAAE,IAKnB,OAAe,KAAO,EAAI,YAAc,CAAG,YAAc,CAAG,OCZnE,IAAME,GAAyC,CAC7C,QAAS,QACT,KAAM,QACN,OAAQ,UACR,IAAK,UACL,KAAM,YACR,EAEO,SAASC,GAAa9L,CAA2B,E,IAAzB2K,EAAF3K,EAAE2K,IAAI,CAC3BoB,EAASC,MAAM,OAAO,CAACrB,GAASA,EAAmB,EAAE,QAE3D,AAAKoB,EAAO,MAAM,CAKhB,UAAC,OAAI,UAAWE,GAAAA,SAAgB,C,SAC7BF,EAAO,GAAG,CAAC,SAACG,CAAK,CAAEhN,CAAC,EACnB,IAAiBiN,EACHC,EAYPC,EAAAA,EAbDC,EAAW,MAAAH,CAAAA,EAAAA,EAAM,QAAQ,AAAD,EAAbA,EAAkB,OAC7B1G,EAAQ,MAAA2G,CAAAA,EAAAA,EAAc,CAACE,EAAS,AAAD,EAAvBF,EAA4B,UAC1C,MACE,WAAC,OAAY,UAAWH,GAAAA,SAAgB,C,UACtC,WAAC,OAAI,UAAWA,GAAAA,WAAkB,C,UAChC,UAACM,EAAAA,KAAKA,CAAAA,CAAC,MAAO9G,E,SAAQ6G,C,GACrBJ,EAAM,IAAI,EACT,WAAC,QAAK,UAAWD,GAAAA,SAAgB,C,UAC9BC,EAAM,IAAI,CAAEA,EAAM,IAAI,CAAI,IAAc,OAAXA,EAAM,IAAI,EAAK,G,MAInD,UAAC,OAAI,UAAWD,GAAAA,YAAmB,C,eAChCI,CAAAA,EAAAA,MAAAA,CAAAA,EAAAA,EAAM,OAAO,AAAD,EAAZA,EAAiBH,EAAM,OAAO,AAAD,EAA7BG,EAAkCrN,KAAK,SAAS,CAACkN,E,GAEnDA,EAAM,GAAG,EACR,WAAC,OAAI,UAAWD,GAAAA,QAAe,C,UAAE,QAAMC,EAAM,GAAG,C,KAb1ChN,EAiBd,E,GA1BK,UAAC,OAAI,UAAW+M,GAAAA,KAAY,C,SAAE,kB,EA6BzC,CClDO,SAASO,GAAYxM,CAA2B,E,IAOzByM,EAPA9B,EAAF3K,EAAE2K,IAAI,CAC1B+B,EAAOV,MAAM,OAAO,CAACrB,GAAQA,EAAoC,EAAE,CAEzE,GAAI,CAAC+B,EAAK,MAAM,CACd,MAAO,UAAC,OAAI,UAAWT,GAAAA,KAAY,C,SAAE,U,GAGvC,IAAMU,EAAUpL,OAAO,IAAI,CAAC,MAAAkL,CAAAA,EAAAA,CAAI,CAAC,EAAE,AAAD,EAANA,EAAW,CAAC,GAAG,GAAG,CAACjL,SAAAA,CAAG,E,MAAK,CACrDA,IAAAA,EACA,UAAWA,EACX,MAAOA,CACT,C,GAEA,MAAO,UAACoL,EAAAA,OAAOA,CAAAA,CAAC,QAASD,EAAS,WAAYD,EAAM,KAAK,QAAQ,WAAY,E,EAC/E,CCfO,SAASG,GAAW7M,CAA2B,E,IACgB8M,EADzCnC,EAAF3K,EAAE2K,IAAI,CACzB5H,EAAO,AAAgB,UAAhB,OAAO4H,EAAoBA,EAAOA,AAAQ,MAARA,EAAe,GAAK,MAACmC,CAAAA,EAAAA,KAAK,SAAS,CAACnC,EAAM,KAAM,EAAC,EAA5BmC,EAAiC,UACrG,AAAK/J,EACE,UAACgK,EAAAA,YAAYA,CAAAA,CAAC,KAAMhK,EAAM,UAAW,G,GADzB,IAErB,CCJO,SAASiK,GAAUhN,CAA2B,E,IACiB8M,EAD1CnC,EAAF3K,EAAE2K,IAAI,CACxB5H,EAAO,AAAgB,UAAhB,OAAO4H,EAAoBA,EAAOA,AAAQ,MAARA,EAAe,GAAK,MAACmC,CAAAA,EAAAA,KAAK,SAAS,CAACnC,EAAM,KAAM,EAAC,EAA5BmC,EAAiC,UACrG,AAAK/J,EACE,UAAC,OAAI,UAAWkJ,GAAAA,MAAa,C,SAAGlJ,C,GADpB,IAErB,CCNO,SAASkK,GAAWjN,CAAkD,E,IAAhD2K,EAAF3K,EAAE2K,IAAI,CAAEuC,EAARlN,EAAQkN,KAAK,CAChC1B,EAAM,AAAgB,UAAhB,OAAOb,EAAoBA,EAAO,YAE9C,AAAKa,EAOH,WAAC,KACC,KAAMA,EACN,OAAO,SACP,IAAI,sBACJ,MAAO,CACL,QAAS,cACT,WAAY,SACZ,IAAK,EACL,QAAS,WACT,WAAY,sBACZ,OAAQ,kCACR,aAAc,EACd,SAAU,GACV,MAAO,cACP,eAAgB,OAChB,WAAY,GACd,E,UAEC0B,MAAAA,EAAAA,EAAS1B,EACV,UAAC,QAAK,MAAO,CAAE,SAAU,GAAI,QAAS,EAAI,E,SAAG,G,MAxB7C,UAAC,QAAK,MAAO,CAAE,MAAO,uBAAwB,SAAU,GAAI,QAAS,EAAG,E,SAAG,G,EA2BjF,C,kpBCRA,IAAM2B,GAAN,gB,0BAAMA,G,OAAAA,E,+EAAAA,Q,2BAAAA,C,gEAAAA,E,EAAAA,U,QACJ,G,sPADF,K,kCAAA,M,qBAAA,K,IACW,QAAQ,CAAE,MAAO,IAAqB,G,SAD3CA,E,wBAAAA,G,AAAAA,E,8BAAAA,E,+BAAAA,G,GAAAA,EAAAA,G,EAAAA,C,CAIKC,IAAAA,S,MAAT,WACE,GAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAE,C,IAGfC,EAFL,MACE,WAAC,QAAK,MAAO,CAAE,MAAO,uBAAwB,SAAU,GAAI,UAAW,QAAS,E,gBAC7EA,CAAAA,EAAAA,IAAI,CAAC,KAAK,CAAC,KAAK,AAAD,EAAfA,EAAoB,WAAW,iB,EAGtC,CACA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,AAC5B,C,OAVOC,IAAAA,2B,MAAP,SAAgC/M,CAAY,EAAS,MAAO,CAAEA,MAAAA,CAAM,CAAG,C,SAHnE4M,E,mBAAAA,E,GAAAA,C,EAA8BI,EAAAA,SAASA,EAgB7C,SAASC,GAAoBxN,CAA4D,E,IAA1DyN,EAAFzN,EAAEyN,IAAI,CAAE9C,EAAR3K,EAAQ2K,IAAI,CAAEuC,EAAdlN,EAAckN,KAAK,CAAEtC,EAArB5K,EAAqB4K,QAAQ,CAAEC,EAA/B7K,EAA+B6K,MAAM,QAChE,AAAIF,AAAQ,MAARA,EAAsB,KACtB8C,AAAS,SAATA,EAAyB,UAACR,GAAUA,CAAC,KAAMtC,EAAM,MAAOuC,C,GACxDO,AAAS,aAATA,EAA6B,UAACjD,EAAcA,CAAC,KAAMG,EAAM,SAAUC,EAAU,OAAQC,C,GACrF4C,AAAS,WAATA,EAA2B,UAAC3B,GAAYA,CAAC,KAAMnB,C,GAC/C8C,AAAS,UAATA,EAA0B,UAACjB,GAAWA,CAAC,KAAM7B,C,GAC7C8C,AAAS,SAATA,EAAyB,UAACZ,GAAUA,CAAC,KAAMlC,C,GAC3C8C,AAAS,QAATA,EAAwB,UAACT,GAASA,CAAC,KAAMrC,C,GACzC8C,AAAS,SAATA,EAAyB,UAAC9I,EAAAA,YAAYA,CAAAA,CAAC,KAAMgG,C,GAC1C,IACT,CAEO,SAAS+C,GAAeC,CAA0B,EACvD,MACE,UAACR,GAAqBA,CAAC,MAAOQ,EAAM,KAAK,C,SACvC,UAACH,GAAAA,A,oUAAAA,CAAAA,EAAwBG,G,EAG/B,C,qFChBA,SAASC,GAAiB7I,CAAU,EAClC,GAAIA,EAAK,IAAQ,MAAQ,GAAK,OAAHA,EAAG,MAC9B,IAAM5C,EAAI4C,EAAK,IACf,GAAI5C,EAAI,GAAM,MAAQ,GAAe,OAAbA,EAAE,OAAO,CAAC,GAAG,KACrC,IAAM0L,EAAI7I,KAAK,KAAK,CAAC7C,EAAI,IACnB2L,EAAM9I,KAAK,KAAK,CAAC7C,EAAI,IAC3B,MAAQ,GAAQ2L,MAAAA,CAAND,EAAE,MAAQ,OAAJC,EAAI,IACtB,CAOA,SAASC,GAAU/N,CAAmC,E,MAK9BC,EAeb+N,EApBU9N,EAAFF,EAAEE,IAAI,CAAEmD,EAARrD,EAAQqD,SAAS,CAE5BuD,EAAY1G,AAAgB,qBAAhBA,EAAK,MAAM,CACvB4G,EAAY5G,AAAgB,YAAhBA,EAAK,MAAM,CAEvB+N,EAAe,MAAChO,CAAAA,EAAAA,EAAK,IAAI,AAAD,EAARA,KAAAA,EAAAA,EAAW,SAAS,CACpCiO,EAAYD,EAAe1M,OAAO,MAAM,CAAC0M,GAAgB,EAAE,CAEjE,MACE,WAAC,OAAI,MAAO,CACV,QAAS,YACT,WAAY,sBACZ,OAAQ,kCACR,aAAc,GACd,aAAc,wBAChB,E,UAEE,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,GAAI,aAAc,EAAG,E,UAC7E,UAAC3I,EAAAA,EAASA,CAAAA,CAAC,OAAQpF,EAAK,MAAM,A,GAC9B,UAACV,EAAAA,gBAAgBA,CAAAA,CAAC,MAAO,CAAE,SAAU,GAAI,WAAY,IAAK,MAAO,qBAAsB,E,wBACpFwO,CAAAA,EAAAA,EAAK,IAAI,AAAD,EAARA,KAAAA,EAAAA,EAAW,OAAO,AAAD,EAAC,EAAI9N,EAAK,IAAI,A,GAEjCA,EAAK,UAAU,EACd,UAACV,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,6BAA6B,MAAO,CAAE,WAAY,MAAO,E,SAClFoO,GAAiB1N,EAAK,UAAU,C,MAMtCiO,AA7BMjO,EA6BH,eAAe,EACjB,UAACV,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,kCAAkC,MAAO,CAAE,aAAc,GAAI,QAAS,OAAQ,E,SACvG2O,AA/BEjO,EA+BC,eAAe,A,GAKtBiO,AAAe,MAAfA,AApCMjO,EAoCH,QAAQ,EACV,WAAC,OAAI,MAAO,CAAE,aAAc,EAAG,E,UAC7B,UAAC,OAAI,MAAO,CACV,OAAQ,EACR,WAAY,wBACZ,aAAc,EACd,SAAU,QACZ,E,SACE,UAAC,OAAI,MAAO,CACV,OAAQ,OACR,MAAQ,GAAc,OAAZiO,AA9CXjO,EA8Cc,QAAQ,CAAC,KACtB,WAAY0G,EAAY,iBAAmB,cAC3C,aAAc,EACd,WAAY,iBACd,C,KAEF,WAACpH,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,6BAA6B,MAAO,CAAE,UAAW,EAAG,QAAS,OAAQ,E,UAC9F2O,AArDAjO,EAqDG,QAAQ,CAAC,I,MAMlBgO,EAAU,MAAM,CAAG,GAAKhO,EAAK,OAAO,EACnC,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,E,SAC7DgO,EAAU,GAAG,CAAC,SAACE,CAAQ,CAAElP,CAAC,EAEzB,IAAMyL,EAAOyD,EAAS,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAC5C,SAACC,CAAG,CAAE7M,CAAG,E,OAAM6M,GAAOnN,AAAAA,CAAe,SAARmN,EAAAA,YAAPnN,GAAOmN,EAAG,IAAK,SAAYA,CAA+B,CAAC7M,EAAI,CAAGH,M,EACxFnB,GAEF,MACE,WAAC,O,UACC,UAACV,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,4BAA4B,MAAO,CAAE,QAAS,QAAS,aAAc,CAAE,E,SAChG4O,EAAS,KAAK,A,GAEjB,UAACV,GAAcA,CAAC,KAAMU,EAAS,IAAI,CAAE,KAAMzD,EAAM,MAAOyD,EAAS,KAAK,A,KAJ9DlP,EAOd,E,GAKH0H,GAAavD,GACZ,UAAC,OAAI,MAAO,CAAE,UAAW,EAAG,E,SAC1B,UAAC,UACC,QAASA,EACT,MAAO,CACL,QAAS,WACT,WAAY,cACZ,MAAO,sBACP,OAAQ,OACR,aAAc,EACd,WAAY,IACZ,OAAQ,UACR,SAAU,EACZ,E,SACD,iB,KAOJyD,GAAa,CAACqH,AArGRjO,EAqGW,eAAe,EAC/B,WAACoO,EAAAA,OAAOA,CAAAA,CAAC,UAAU,YAAY,MAAO,CAAE,UAAW,CAAE,E,UACnD,UAACC,EAAAA,MAAMA,CAAAA,CAAC,KAAK,kBAAkB,KAAI,GAAC,MAAO,CAAE,MAAO,cAAe,SAAU,EAAG,C,GAChF,UAAC/O,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,8B,SAA8B,Y,QAKpE,CAOA,IAAMgP,GAAW,CAAC,UAAW,SAAU,YAAa,UAAU,CAE9D,SAASC,GAASzO,CAAyE,E,IAAvEkN,EAAFlN,EAAEkN,KAAK,CAAEzL,EAATzB,EAASyB,KAAK,CAAEgE,EAAhBzF,EAAgByF,KAAK,CACrC,MACE,WAAC,OAAI,MAAO,CACV,KAAM,EACN,QAAS,YACT,WAAY,sBACZ,OAAQ,kCACR,aAAc,EACd,SAAU,CACZ,E,UACE,UAAC,OAAI,MAAO,CAAE,SAAU,GAAI,WAAY,IAAK,MAAOA,MAAAA,EAAAA,EAAS,sBAAuB,WAAY,GAAI,E,SACjGhE,C,GAEH,UAAC,OAAI,MAAO,CAAE,SAAU,GAAI,MAAO,uBAAwB,UAAW,CAAE,E,SACrEyL,C,KAIT,CAEO,SAASwB,GAAc1O,CAAsC,E,IA0EtD2O,EACAC,EA3EkBpG,EAAFxI,EAAEwI,GAAG,CAAEnF,EAAPrD,EAAOqD,SAAS,CACtCoF,EAAQC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAiBF,GACzBqG,EAASpG,EAAM,MAAM,CAAC,GAAG,CAAC,SAACW,CAAK,EACpC,IAAM0F,EAAU1F,EAAM,KAAK,CAAC,KAAK,CAAC,SAACjH,CAAC,E,MAAKA,AAAqB,YAArBA,EAAE,OAAO,CAAC,MAAM,A,GACnD4M,EAAY3F,EAAM,KAAK,CAAC,IAAI,CAChC,SAACjH,CAAC,E,MAAKA,AAAqB,YAArBA,EAAE,OAAO,CAAC,MAAM,EAAkBA,AAAqB,qBAArBA,EAAE,OAAO,CAAC,MAAM,A,GAE3D,MAAO,CAAE,MAAOiH,EAAM,KAAK,CAAE,OAAQ0F,EAAU,OAASC,EAAY,SAAW,SAAU,CAC3F,GAEMC,EAtKCxG,AAsKoBA,EAtKhB,IAAI,CAAC,OAAO,CAAC,SAACyG,CAAC,E,OAAKA,EAAE,KAAK,A,GAuKhCC,EAAaV,GAAS,QAAQ,CAAChG,EAAI,MAAM,EAEzC2G,EAAc,AAACD,EAEjB,KADAF,EAAS,IAAI,CAAC,SAAC7M,CAAC,E,MAAKA,AAAa,YAAbA,EAAE,MAAM,EAAkBA,AAAa,qBAAbA,EAAE,MAAM,A,GAErDiN,EAAiBJ,EAAS,MAAM,CAAC,SAAC7M,CAAC,E,MAAKA,AAAa,YAAbA,EAAE,MAAM,A,GAChDkN,EAAcL,EAAS,MAAM,CAAC,SAAC7M,CAAC,E,MAAKA,AAAa,WAAbA,EAAE,MAAM,A,GAC7CmN,EAAcN,EAAS,MAAM,CAAC,SAAC7M,CAAC,E,MAAKA,AAAa,WAAbA,EAAE,MAAM,EAAkBA,AAAwB,YAAxBA,EAAE,MAAM,A,GAGvEoN,EAAU/G,EAAI,SAAS,EAAIA,EAAI,UAAU,CAC3C,IAAIjG,KAAKiG,EAAI,UAAU,EAAE,OAAO,GAAK,IAAIjG,KAAKiG,EAAI,SAAS,EAAE,OAAO,GACpE,KAGEgH,EAAe/G,EAAM,MAAM,CAAC,GAAG,CAAC,SAACW,CAAK,E,MAAM,CAChD,MAAOA,EAAM,KAAK,CAClB,MAAOA,EAAM,KAAK,CAAC,GAAG,CAAC,SAACjH,CAAC,E,OAAKA,EAAE,OAAO,A,EACzC,C,GACMsN,EAAiBhH,AAAwB,IAAxBA,EAAM,MAAM,CAAC,MAAM,CAASuG,EAAW,EAAE,CAI1DU,EAA+E,EAAE,CAClFvL,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAc6K,CAAQ,CAARA,OAAAA,QAAAA,CAAAA,GAAd7K,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAAwB,CAAxBA,IAAMjE,EAANiE,EAAAA,KAAAA,CACH,GAAIjE,AAAgB,YAAhBA,EAAK,MAAM,EAAkBA,AAAgB,WAAhBA,EAAK,MAAM,EAC5C,IAAM+N,EAAe,MAAChO,CAAAA,EAAAA,EAAK,IAAI,AAAD,EAARA,KAAAA,EAAAA,EAAW,SAAS,CAC1C,GAAKgO,G,IACA0B,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAFsB1P,EAEjB0P,EAAAA,EAAkBpO,OAAO,MAAM,CAAC0M,EAAa,CAAbA,OAAAA,QAAAA,CAAAA,GAAhC0B,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAA+C,CAA/CA,IAAMvB,EAANuB,EAAAA,KAAAA,CACH,GAAKvB,EAAS,aAAa,EAC3B,IAAMzD,EAAOyD,EAAS,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAC5C,SAACC,CAAG,CAAE7M,CAAG,E,OAAM6M,GAAOnN,AAAAA,CAAe,SAARmN,EAAAA,YAAPnN,GAAOmN,EAAG,IAAK,SAAYA,CAA+B,CAAC7M,EAAI,CAAGH,M,EACxFnB,GAEFwP,EAAiB,IAAI,CAAC,CAAExP,KAAAA,EAAMkO,SAAAA,EAAUzD,KAAAA,CAAK,GAC/C,C,UAPKgF,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,IAQP,C,UAZKxL,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAcL,MACE,WAAC,O,UAEE0K,EAAO,MAAM,CAAG,GACf,UAAC,OAAI,MAAO,CACV,QAAS,YACT,WAAY,sBACZ,OAAQ,kCACR,aAAc,EACd,aAAc,EAChB,E,SACE,UAACe,EAAAA,CAAgBA,CAAAA,CAAC,OAAQf,C,KAK7BM,GACC,UAACpB,GAAAA,CACC,KAAMoB,EACN,UAAW9L,EAAY,W,OAAMA,EAAU8L,E,EAAe9N,M,GAKzDqO,EAAiB,MAAM,CAAG,IACnBf,EAAQe,EAAiB,MAAM,CAACG,SAAAA,CAAC,E,MAAIA,AAAoB,SAApBA,EAAE,QAAQ,CAAC,IAAI,A,GACpDjB,EAAOc,EAAiB,MAAM,CAACG,SAAAA,CAAC,E,MAAIA,AAAoB,SAApBA,EAAE,QAAQ,CAAC,IAAI,A,GAEvD,WAAC,OAAI,MAAO,CAAE,aAAc,GAAI,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,E,UAE/ElB,EAAM,MAAM,CAAG,GACd,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,SAAU,OAAQ,IAAK,CAAE,E,SACrDA,EAAM,GAAG,CAAC,WAAqBzP,CAAC,E,IAAnBkP,EAAAA,EAAAA,QAAQ,CAAEzD,EAAAA,EAAAA,IAAI,C,MAC1B,UAAC+C,GAAcA,CAAS,KAAK,OAAO,KAAM/C,EAAM,MAAOyD,EAAS,KAAK,A,EAAhDlP,E,KAK1B0P,EAAK,MAAM,CAAG,GACb,UAAC,OAAI,MAAO,CACV,QAAS,YACT,WAAY,sBACZ,OAAQ,kCACR,aAAc,GACd,QAAS,OAAQ,cAAe,SAAU,IAAK,EACjD,E,SACGA,EAAK,GAAG,CAAC,WAAqB1P,CAAC,E,IAAnBkP,EAAAA,EAAAA,QAAQ,CAAEzD,EAAAA,EAAAA,IAAI,C,MACzB,WAAC,O,UACC,UAACnL,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,4BAA4B,MAAO,CAAE,QAAS,QAAS,aAAc,CAAE,E,SAChG4O,EAAS,KAAK,A,GAEjB,UAACV,GAAcA,CAAC,KAAMU,EAAS,IAAI,CAAE,KAAMzD,EAAM,MAAOyD,EAAS,KAAK,A,KAJ9DlP,E,SAcrBgQ,GACC,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,GAAI,aAAc,GAAI,SAAU,MAAO,E,UACzE,UAACT,GAAAA,CAAS,MAAM,cAAc,MAAO/M,OAAOsN,EAAS,MAAM,C,GAC3D,UAACP,GAAAA,CAAS,MAAM,YAAY,MAAO/M,OAAO0N,EAAe,MAAM,EAAG,MAAM,gB,GACvEC,EAAY,MAAM,CAAG,GACpB,UAACZ,GAAAA,CAAS,MAAM,SAAS,MAAO/M,OAAO2N,EAAY,MAAM,EAAG,MAAM,c,GAEnEE,AAAW,MAAXA,GACC,UAACd,GAAAA,CAAS,MAAM,WAAW,MAAOb,GAAiB2B,E,MAMxDL,GAAcM,EAAa,MAAM,CAAG,GACnC,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,E,SAC7DA,EAAa,GAAG,CAAC,SAACpG,CAAK,E,MACtB,WAAC,O,UACC,UAAC5J,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,4BAA4B,MAAO,CAAE,QAAS,QAAS,aAAc,CAAE,E,SAChG4J,EAAM,KAAK,A,GAEd,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,E,SAC5DA,EAAM,KAAK,CAAC,GAAG,CAAC,SAAClJ,CAAI,M,EAafD,E,MAZL,WAAC,OAAkB,MAAO,CACxB,QAAS,OAAQ,WAAY,SAAU,IAAK,EAC5C,QAAS,WACT,WAAY,sBACZ,OAAQ,kCACR,aAAc,CAChB,E,UACE,UAACsO,EAAAA,MAAMA,CAAAA,CACL,KAAMrO,AAAgB,YAAhBA,EAAK,MAAM,CAAiB,sBAAwBA,AAAgB,WAAhBA,EAAK,MAAM,CAAgB,sBAAwB,sBAC7G,MAAO,CAAE,SAAU,GAAI,MAAOA,AAAgB,YAAhBA,EAAK,MAAM,CAAiB,iBAAmBA,AAAgB,WAAhBA,EAAK,MAAM,CAAgB,eAAiB,uBAAwB,WAAY,CAAE,C,GAEjK,UAACV,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,YAAY,MAAO,CAAE,KAAM,EAAG,SAAU,CAAE,E,wBACnES,CAAAA,EAAAA,EAAK,IAAI,AAAD,EAARA,KAAAA,EAAAA,EAAW,OAAO,AAAD,EAAC,EAAIC,EAAK,IAAI,A,GAEjCA,EAAK,UAAU,EACd,UAACV,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,6BAA6B,MAAO,CAAE,WAAY,CAAE,E,SAC7EoO,GAAiB1N,EAAK,UAAU,C,KAhB7BA,EAAK,EAAE,C,OANbkJ,EAAM,KAAK,C,KAkC1B8F,GAAcO,EAAe,MAAM,CAAG,GACrC,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,E,SAC5DA,EAAe,GAAG,CAAC,SAACvP,CAAI,M,EAalBD,E,MAZL,WAAC,OAAkB,MAAO,CACxB,QAAS,OAAQ,WAAY,SAAU,IAAK,EAC5C,QAAS,WACT,WAAY,sBACZ,OAAQ,kCACR,aAAc,CAChB,E,UACE,UAACsO,EAAAA,MAAMA,CAAAA,CACL,KAAMrO,AAAgB,YAAhBA,EAAK,MAAM,CAAiB,sBAAwBA,AAAgB,WAAhBA,EAAK,MAAM,CAAgB,sBAAwB,sBAC7G,MAAO,CAAE,SAAU,GAAI,MAAOA,AAAgB,YAAhBA,EAAK,MAAM,CAAiB,iBAAmBA,AAAgB,WAAhBA,EAAK,MAAM,CAAgB,eAAiB,uBAAwB,WAAY,CAAE,C,GAEjK,UAACV,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,YAAY,MAAO,CAAE,KAAM,CAAE,E,wBACtDS,CAAAA,EAAAA,EAAK,IAAI,AAAD,EAARA,KAAAA,EAAAA,EAAW,OAAO,AAAD,EAAC,EAAIC,EAAK,IAAI,A,GAEjCA,EAAK,UAAU,EACd,UAACV,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,6B,SACzBoO,GAAiB1N,EAAK,UAAU,C,KAhB7BA,EAAK,EAAE,C,KAyBtB,CAACgP,GAAcE,EAAe,MAAM,CAAG,GACtC,WAAC,OAAI,MAAO,CAAE,aAAc,EAAG,E,UAC7B,WAAC5P,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,4BAA4B,MAAO,CAAE,QAAS,QAAS,aAAc,CAAE,E,UAAG,cACxF4P,EAAe,MAAM,CAAC,I,GAEpC,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,E,SAC5DA,EAAe,GAAG,CAAC,SAAClP,CAAI,M,EASoBD,E,MAR3C,WAAC,OAAkB,MAAO,CACxB,QAAS,OAAQ,WAAY,SAAU,IAAK,EAC5C,QAAS,WACT,WAAY,sBACZ,OAAQ,kCACR,aAAc,CAChB,E,UACE,UAACsO,EAAAA,MAAMA,CAAAA,CAAC,KAAK,sBAAsB,MAAO,CAAE,MAAO,iBAAkB,SAAU,EAAG,C,GAClF,UAAC/O,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,Y,wBAAaS,CAAAA,EAAAA,EAAK,IAAI,AAAD,EAARA,KAAAA,EAAAA,EAAW,OAAO,AAAD,EAAC,EAAIC,EAAK,IAAI,A,GACvEA,EAAK,UAAU,EACd,UAACV,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,6BAA6B,MAAO,CAAE,WAAY,MAAO,E,SAClFoO,GAAiB1N,EAAK,UAAU,C,KAX7BA,EAAK,EAAE,C,QAoBxB,CAACgP,GAAcI,EAAY,MAAM,CAAG,GACnC,WAAC,O,UACC,WAAC9P,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,4BAA4B,MAAO,CAAE,QAAS,QAAS,aAAc,CAAE,E,UAAG,aACzF8P,EAAY,MAAM,CAAC,I,GAEhC,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,E,SAC5DA,EAAY,GAAG,CAAC,SAACpP,CAAI,M,EASsCD,EACvD+N,E,MATH,WAAC,OAAkB,MAAO,CACxB,QAAS,OAAQ,WAAY,SAAU,IAAK,EAC5C,QAAS,WACT,OAAQ,mCACR,aAAc,EACd,QAAS,EACX,E,UACE,UAACO,EAAAA,MAAMA,CAAAA,CAAC,KAAK,sBAAsB,MAAO,CAAE,MAAO,uBAAwB,SAAU,EAAG,C,GACxF,UAAC/O,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,2B,wBAA4BS,CAAAA,EAAAA,EAAK,IAAI,AAAD,EAARA,KAAAA,EAAAA,EAAW,OAAO,AAAD,EAAC,EAAIC,EAAK,IAAI,A,GACtF8N,AAAAA,OAAAA,CAAAA,EAAAA,EAAK,IAAI,AAAD,EAARA,KAAAA,EAAAA,EAAW,KAAK,AAAD,GACd,UAACzB,EAAAA,KAAKA,CAAAA,CAAC,MAAO,CAAE,WAAY,OAAQ,QAAS,EAAI,E,SAAIrM,EAAK,IAAI,CAAC,KAAK,A,KAV9DA,EAAK,EAAE,C,QAkBxB8O,AAAoB,IAApBA,EAAS,MAAM,EACd,UAAC,OAAI,MAAO,CAAE,UAAW,SAAU,QAAS,QAAS,E,SACnD,UAACxP,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,kC,SAAkC,mB,OAKxE,C,6jCCraA,IAAMD,GAAOC,EAAAA,gBAAgBA,CACvBG,GAAQC,EAAAA,OAAOA,CAIfkQ,GAAsC,CAC1C,OAAU,IACV,QAAW,IACX,QAAW,IACX,OAAU,IACV,UAAa,IACb,QAAW,IACX,iBAAoB,GACtB,EAEM9N,GAAuC,CAC3C,OAAU,UACV,QAAW,UACX,QAAW,UACX,OAAU,UACV,UAAa,UACb,QAAW,UACX,iBAAoB,SACtB,EAEA,SAAS+N,GAAkBtC,CAAY,SACrC,AAAIA,EAAK,QAAQ,CAAC,YAAqB,UACnCA,EAAK,QAAQ,CAAC,eAAiBA,EAAK,QAAQ,CAAC,aAAsB,UACnEA,EAAK,QAAQ,CAAC,WAAoB,SAClCA,EAAK,QAAQ,CAAC,cAAuB,YACrCA,EAAK,QAAQ,CAAC,YAAqB,UACnCA,EAAK,QAAQ,CAAC,oBAA6B,mBAC3CA,EAAK,QAAQ,CAAC,WAAoB,SAC/B,SACT,CAEA,SAASG,GAAiB7I,CAAU,EAClC,GAAIA,EAAK,IAAO,MAAQ,GAAK,OAAHA,EAAG,MAC7B,IAAM5C,EAAI4C,EAAK,IACf,GAAI5C,EAAI,GAAK,MAAQ,GAAe,OAAbA,EAAE,OAAO,CAAC,GAAG,KACpC,IAAM0L,EAAI7I,KAAK,KAAK,CAAC7C,EAAI,IACnB2L,EAAM9I,KAAK,KAAK,CAAC7C,EAAI,IAC3B,MAAQ,GAAQ2L,MAAAA,CAAND,EAAE,MAAQ,OAAJC,EAAI,IACtB,CAiBA,IAAM7L,GAAU,uCAChB,SAASC,GAAUC,CAAS,EAAY,OAAOA,EAAE,OAAO,CAACF,GAAS,GAAI,CAEtE,SAASG,GAAgBC,CAAoB,EAC3C,I,EAAMC,EAAO0N,AAnBf,SAAoBC,CAAW,EAC7B,GAAI,CAACA,EAAK,MAAO,GACjB,GAAI,CACF,OAAO,IAAI1N,KAAK0N,GAAI,kBAAkB,CAAC,QAAS,CAAE,OAAQ,GAAO,KAAM,UAAW,OAAQ,UAAW,OAAQ,SAAU,EACzH,CAAE,QAAM,CAAE,MAAO,EAAG,CACtB,EAc0B5N,EAAG,SAAS,EAC9B6N,EAAU7N,EAAG,OAAO,CAC1B,GAAI,CAAC6N,EAAU,MAAO,EAAE,CAGxB,GAAI7N,AAAY,iBAAZA,EAAG,IAAI,CAAqB,CAC9B,IAEgB8N,EAFVvN,EAAM,AAA2B,UAA3B,OAAOsN,EAAQ,OAAO,CAAgBhO,GAAUgO,EAAQ,OAAO,EAAI,UAC/E,AAAKtN,EAEE,CAAC,CAAEN,KAAAA,EAAM,KAAMM,EAAKC,OADZ,MAACsN,CAAAA,EAAAA,EAAQ,MAAM,AAAD,EAAbA,EAA0C,QACxB,EAAE,CAFlB,EAAE,AAGtB,CAEA,GAAID,EAAQ,OAAO,EAAIhP,AAA2B,U,IAApBgP,EAAQ,OAAO,G,6DAAe,CAC1D,IAAMnK,EAAUmK,EAAQ,OAAO,CAC/B,GAAI,AAA0B,UAA1B,OAAOnK,EAAQ,MAAM,EAAiBA,EAAQ,MAAM,CAAC,IAAI,GAC3D,OAAO7D,GAAU6D,EAAQ,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAACuE,SAAAA,CAAI,E,MAAK,CAAEhI,KAAAA,EAAM,KAAMgI,EAAM,OAAQ,QAAkB,C,EAEnH,OACA,AAAI,AAA0B,UAA1B,OAAO4F,EAAQ,MAAM,EAAiBA,EAAQ,MAAM,CAAC,IAAI,GACpDhO,GAAUgO,EAAQ,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC5F,SAAAA,CAAI,E,MAAK,CAAEhI,KAAAA,EAAM,KAAMgI,EAAM,OAAQ,QAAkB,C,GAE7G,AAAyB,UAAzB,OAAO4F,EAAQ,KAAK,CACf,CAAC,CAAE5N,KAAAA,EAAM,KAAM4N,EAAQ,KAAK,CAAE,OAAQ,QAAS,EAAE,CAEtD,AAA2B,UAA3B,OAAOA,EAAQ,OAAO,CACjB,CAAC,CAAE5N,KAAAA,EAAM,KAAM4N,EAAQ,OAAO,AAAC,EAAE,CAEtC,AAAwB,UAAxB,OAAOA,EAAQ,IAAI,CACd,CAAC,CAAE5N,KAAAA,EAAM,KAAM4N,EAAQ,IAAI,AAAC,EAAE,CAEnC,AAAwB,UAAxB,OAAOA,EAAQ,IAAI,CACd,CAAC,CAAE5N,KAAAA,EAAM,KAAM4N,EAAQ,IAAI,AAAC,EAAE,CAGnCnM,AAAgB,IAAhBA,AADSxC,OAAO,IAAI,CAAC2O,GAAS,MAAM,CAAClM,SAAAA,CAAC,E,MAAI,CAAC,CAAC,SAAU,UAAW,aAAc,UAAU,CAAC,QAAQ,CAACA,E,GAC9F,MAAM,CAAgB,EAAE,CAC1B,CAAC,CAAE1B,KAAAA,EAAM,KAAMtD,KAAK,SAAS,CAACkR,EAAS,KAAM,EAAG,EAAE,AAC3D,CAgGA,IAAME,GAAkB,IAAIlN,IAAI,CAAC,SAAU,SAAU,WAAY,KAAK,EAEtE,SAASmN,GAAUrQ,CAAmE,E,IA4DlEC,EA5DCC,EAAFF,EAAEE,IAAI,CAAEmD,EAARrD,EAAQqD,SAAS,CAC5BC,EAAsBpD,EAAK,MAAM,CAAC,OAAO,CAACkC,IAC1CoB,EAASC,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAuB,MAGtCC,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,WACR,IAAMC,EAAKH,EAAO,OAAO,CACpBG,GACgBA,EAAG,YAAY,CAAGA,EAAG,SAAS,CAAGA,EAAG,YAAY,CAAG,IAEtEA,CAAAA,EAAG,SAAS,CAAGA,EAAG,YAAY,AAAD,CAEjC,EAAG,CAACL,EAAS,MAAM,CAAC,EAEpB,IAAMM,EAA0BL,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EAAQ,WACtC,GAAID,EAAS,MAAM,CAAG,EAAI,MAAO,EAAE,CACnC,IAAMO,EAAmB,EAAE,CAC3B,GAAI3D,EAAK,OAAO,CAAE,CAChB,IAAM4C,EAAS5C,EAAK,OAAO,CAAC,MAAM,CAC5B8C,EAAS9C,EAAK,OAAO,CAAC,MAAM,CAClC,GAAI,AAAkB,UAAlB,OAAO4C,GAAuBA,EAAO,IAAI,GAAI,C,IAC1CqB,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAcrB,EAAO,IAAI,GAAG,KAAK,CAAC,KAAK,CAAL,mBAAlCqB,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAAyC,CAAzCA,IAAMmG,EAANnG,EAAAA,KAAAA,CACHN,EAAM,IAAI,CAAC,CAAE,KAAM,GAAI,KAAMyG,CAAK,EACpC,C,UAFKnG,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAGP,CACA,GAAI,AAAkB,UAAlB,OAAOnB,GAAuBA,EAAO,IAAI,GAAI,C,IAC1C2M,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAc3M,EAAO,IAAI,GAAG,KAAK,CAAC,KAAK,CAAL,mBAAlC2M,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAAyC,CAAzCA,IAAMW,EAANX,EAAAA,KAAAA,CACH9L,EAAM,IAAI,CAAC,CAAE,KAAM,GAAI,KAAMyM,CAAK,EACpC,C,UAFKX,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAGP,CAEA,GAAI9L,AAAiB,IAAjBA,EAAM,MAAM,CAAQ,CACtB,IAAM0M,EAAWhP,OAAO,IAAI,CAACrB,EAAK,OAAO,EAAE,MAAM,CAAC8D,SAAAA,CAAC,E,MAAI,CAACoM,GAAgB,GAAG,CAACpM,E,EACxEuM,CAAAA,EAAS,MAAM,CAAG,GACpB1M,EAAM,IAAI,CAAC,CAAE,KAAM,GAAI,KAAO,4BAA+C,OAApB0M,EAAS,IAAI,CAAC,MAAM,KAAI,EAErF,CACF,CACA,GAAIrQ,EAAK,KAAK,CAAE,CACd,IAAM0C,EAAO1C,EAAK,KAAK,CAA6B,OAAO,AACvD,AAAe,WAAf,OAAO0C,GACTiB,EAAM,IAAI,CAAC,CAAE,KAAM,GAAI,KAAMjB,CAAI,EAErC,CACA,OAAOiB,CACT,EAAG,CAAC3D,EAAK,OAAO,CAAEA,EAAK,KAAK,CAAEoD,EAAS,MAAM,CAAC,EAExCO,EAAQP,EAAS,MAAM,CAAG,EAAIA,EAAWM,EACzCgD,EAAY1G,AAAgB,qBAAhBA,EAAK,MAAM,CAEvB+D,EAAcV,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EAAQ,WAC1B,GAAI,CAACrD,EAAK,OAAO,CAAG,OAAO,KAC3B,IAAMgE,EAAoC,CAAC,EACtCC,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAgB5C,OAAO,OAAO,CAACrB,EAAK,OAAO,CAAC,CAAD,mBAA3CiE,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAA8C,CAA9CA,IAAAA,EAAAA,GAAAA,EAAAA,KAAAA,CAAAA,GAAOH,EAAAA,CAAAA,CAAAA,EAAAA,CAAGI,EAAAA,CAAAA,CAAAA,EAAAA,AACT,CAACgM,GAAgB,GAAG,CAACpM,IAAKE,CAAAA,CAAQ,CAACF,EAAE,CAAGI,CAAAA,CAC9C,C,UAFKD,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAGL,OAAO5C,OAAO,IAAI,CAAC2C,GAAU,MAAM,CAAG,EAAIA,EAAW,IACvD,EAAG,CAAChE,EAAK,OAAO,CAAC,EAEXqE,EAAUN,AAAgB,OAAhBA,EACVI,EAAYpE,AAAAA,OAAAA,CAAAA,EAAAA,EAAK,IAAI,AAAD,EAARA,KAAAA,EAAAA,EAAW,IAAI,AAAD,GAAK,MAAQsB,OAAO,IAAI,CAACrB,EAAK,IAAI,CAAC,IAAI,EAAE,MAAM,CAAG,EAC5EoE,EAAWpE,AAAc,MAAdA,EAAK,KAAK,CAGrBsE,EACJ,WAAC,OAAI,MAAO,CAAE,WAAY,YAAa,SAAU,EAAG,E,UACjDtE,EAAK,OAAO,EACX,WAAC,OAAI,MAAO,CAAE,QAAS,WAAY,MAAO,UAAW,SAAU,EAAG,E,UAAG,KAChEA,EAAK,OAAO,C,GAGlB2D,EAAM,MAAM,CAAG,EACd,UAAC,OAAI,IAAKL,EAAQ,MAAO,CACvB,OAAQ,EACR,QAAS,WACT,WAAY,UACZ,MAAO,UACP,aAAc,EACd,SAAU,OACV,UAAW,IACX,WAAY,WACZ,UAAW,aACX,WAAY,GACd,E,SACGK,EAAM,GAAG,CAAC,SAACY,CAAC,CAAEvF,CAAC,E,MACd,WAAC,Q,UACEuF,EAAE,IAAI,EAAI,UAAC,QAAK,MAAO,CAAE,MAAO,UAAW,WAAY,OAAQ,YAAa,EAAG,E,SAAIA,EAAE,IAAI,A,GAC1F,UAAC,QAAK,MAAOA,AAAa,WAAbA,EAAE,MAAM,CAAgB,CAAE,MAAO,SAAU,EAAIpD,O,SAAYoD,EAAE,IAAI,A,GAC7E,K,EAHQvF,E,KAQf,UAACK,GAAIA,CAAC,KAAK,YAAY,MAAO,CAAE,SAAU,GAAI,QAAS,WAAY,QAAS,OAAQ,E,SACjFW,AAAgB,YAAhBA,EAAK,MAAM,CAAiB,wBAC5BA,AAAgB,WAAhBA,EAAK,MAAM,CAAgB,SAC3B0G,EAAY,uBACZ,W,GAGJA,GAAavD,GACZ,UAAC,OAAI,MAAO,CAAE,QAAS,UAAW,E,SAChC,UAACxB,EAAAA,QAAQA,CAAAA,CAAC,KAAK,QAAQ,QAAQ,UAAU,QAASwB,E,SAAW,iB,QAQrE,GAAI,CAhDYkB,CAAAA,GAAWF,GAAaC,CAAO,EAgDhC,OAAOE,EAEtB,IAAME,EAAwB,CAC5B,CAAE,IAAK,MAAO,MAAO,MAAO,SAAUF,CAAW,EAClD,CAWD,OAVID,GACFG,EAAS,IAAI,CAAC,CAAE,IAAK,OAAQ,MAAO,OAAQ,SAAU,UAACC,EAAAA,YAAYA,CAAAA,CAAC,KAAMV,C,EAAgB,GAExFI,GACFK,EAAS,IAAI,CAAC,CAAE,IAAK,SAAU,MAAO,SAAU,SAAU,UAACC,EAAAA,YAAYA,CAAAA,CAAC,KAAMzE,EAAK,IAAI,CAAE,IAAI,A,EAAK,GAEhGoE,GACFI,EAAS,IAAI,CAAC,CAAE,IAAK,QAAS,MAAO,QAAS,SAAU,UAACC,EAAAA,YAAYA,CAAAA,CAAC,KAAMzE,EAAK,KAAK,A,EAAK,GAGtF,UAACgF,EAAAA,MAAMA,CAAAA,CAAC,MAAOR,EAAU,KAAK,QAAQ,iBAAiB,K,EAChE,CAQA,SAAS8L,GAAWxQ,CAA2C,E,IAAzCoD,EAAFpD,EAAEoD,MAAM,CAAEoF,EAAVxI,EAAUwI,GAAG,CAAEnF,EAAfrD,EAAeqD,SAAS,CACpCoN,EAASlN,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EAAQ,W,OAAMmN,AA7M/B,SAAwBtN,CAA0B,CAAEoF,CAAgB,EAClE,IAAMmI,EAAS,IAAI5H,IAEd5E,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAaqE,EAAI,IAAI,oBAArBrE,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAAuB,CAAvBA,IAAMyM,EAANzM,EAAAA,KAAAA,CACG0M,EAA6BD,EAAI,KAAK,CAAC,GAAG,CAACzO,SAAAA,CAAC,E,IAMvC2O,E,MAN4C,CACrD,OAAQ3O,EAAE,EAAE,CACZ,SAAUA,EAAE,IAAI,CAChB,OAAQA,EAAE,MAAM,CAChB,QAAUA,EAAU,OAAO,CAC3B,OAAQ,EAAE,CACV,QAAS,MAAA2O,CAAAA,EAAAA,EAAE,OAAO,AAAD,EAARA,EAAazP,OACtB,MAAOc,EAAE,KAAK,CACd,KAAMA,EAAE,IAAI,CACZ,UAAWA,EAAE,SAAS,CACtB,WAAYA,EAAE,UAAU,CACxB,WAAYA,EAAE,UAAU,AAC1B,C,GACAwO,EAAO,GAAG,CAACC,EAAI,EAAE,CAAE,CACjB,MAAOA,EAAI,EAAE,CACb,QAASA,EAAI,OAAO,CACpB,OAAQA,EAAI,MAAM,CAClB,MAAOC,EACP,OAAQ,EAAE,CACV,UAAWD,EAAI,SAAS,CACxB,WAAYA,EAAI,UAAU,CAC1B,WAAYA,EAAI,UAAU,CAC1B,MAAOA,EAAI,KAAK,AAClB,EACF,C,UAzBKzM,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,MA2BAwL,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAYvM,CAAM,CAANA,OAAAA,QAAAA,CAAAA,GAAZuM,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,IAAAA,A,WAAAA,IAgBGoB,EACAC,EAjBG3O,EAANsN,EAAAA,KAAAA,CACH,GAAKtN,EAAG,KAAK,EACb,IAAI4O,EAAQN,EAAO,GAAG,CAACtO,EAAG,KAAK,EAkB/B,GAjBK4O,IACHA,EAAQ,CACN,MAAO5O,EAAG,KAAK,CACf,QAASA,EAAG,KAAK,CACjB,OAAQ0N,GAAkB1N,EAAG,IAAI,EACjC,MAAO,EAAE,CACT,OAAQ,EAAE,AACZ,EACAsO,EAAO,GAAG,CAACtO,EAAG,KAAK,CAAE4O,IAGnB5O,EAAG,IAAI,CAAC,UAAU,CAAC,UACrB4O,EAAM,MAAM,CAAGlB,GAAkB1N,EAAG,IAAI,EACpC,OAAA0O,CAAAA,EAAAA,EAAG,OAAO,AAAD,EAATA,KAAAA,EAAAA,EAAY,OAAO,AAAD,GAAIE,CAAAA,EAAM,OAAO,CAAGvP,OAAOW,EAAG,OAAO,CAAC,OAAO,GAC/D,OAAA2O,CAAAA,EAAAA,EAAG,OAAO,AAAD,EAATA,KAAAA,EAAAA,EAAY,UAAU,AAAD,GAAIC,CAAAA,EAAM,UAAU,CAAGrF,OAAOvJ,EAAG,OAAO,CAAC,UAAU,IAG1EA,EAAG,MAAM,CAAE,CACb,IAAInC,EAAO+Q,EAAM,KAAK,CAAC,IAAI,CAAC9O,SAAAA,CAAC,E,OAAIA,EAAE,MAAM,GAAKE,EAAG,MAAM,A,GAClDnC,IACHA,EAAO,CAAE,OAAQmC,EAAG,MAAM,CAAE,SAAUA,EAAG,MAAM,CAAE,OAAQ,SAAU,OAAQ,EAAE,AAAC,EAC9E4O,EAAM,KAAK,CAAC,IAAI,CAAC/Q,IAEnBA,EAAK,MAAM,CAAC,IAAI,CAACmC,GACbA,EAAG,IAAI,CAAC,UAAU,CAAC,UACrBnC,CAAAA,EAAK,MAAM,CAAG6P,GAAkB1N,EAAG,IAAI,EAE3C,MACE4O,EAAM,MAAM,CAAC,IAAI,CAAC5O,GAEtB,G,UAjCKsN,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAmCL,OAAO3D,MAAM,IAAI,CAAC2E,EAAO,MAAM,GACjC,EA2I8CvN,EAAQoF,E,EAAM,CAACpF,EAAQoF,EAAI,EAEjE0I,EAAa3N,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EAAQ,WACzB,IAAM4N,EAAM,IAAIpI,IACX5E,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAaqE,EAAI,IAAI,oBAArBrE,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAAuB,CAAvBA,IAAMyM,EAANzM,EAAAA,KAAAA,CACEwL,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAciB,EAAI,KAAK,oBAAvBjB,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAAyB,CAAzBA,IAAMzP,EAANyP,EAAAA,KAAAA,CACHwB,EAAI,GAAG,CAACjR,EAAK,EAAE,CAAEA,EACnB,C,UAFKyP,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAGP,C,UAJKxL,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAKL,OAAOgN,CACT,EAAG,CAAC3I,EAAI,EAER,GAAIiI,AAAkB,IAAlBA,EAAO,MAAM,CACf,MAAO,UAAClR,GAAIA,CAAC,KAAK,Y,SAAY,wB,GAGhC,IAAM6R,EAAgBX,EACnB,MAAM,CAACY,SAAAA,CAAC,E,MAAIA,AAAa,YAAbA,EAAE,MAAM,EAAkBA,AAAa,WAAbA,EAAE,MAAM,EAAiBA,AAAa,qBAAbA,EAAE,MAAM,A,GACvE,GAAG,CAACA,SAAAA,CAAC,E,OAAIA,EAAE,KAAK,A,GACbC,EAAiBF,EAAc,MAAM,CAAG,EAAIA,EAAgBX,EAAO,GAAG,CAACY,SAAAA,CAAC,E,OAAIA,EAAE,KAAK,A,GAEnFE,EAA8Bd,EAAO,GAAG,CAACQ,SAAAA,CAAK,EAClD,IAAaO,EACCC,EADRC,EAAO,MAAAF,CAAAA,EAAAA,EAAW,CAACP,EAAM,MAAM,CAAC,AAAD,EAAxBO,EAA6B,IACpC/L,EAAQ,MAAAgM,CAAAA,EAAAA,EAAY,CAACR,EAAM,MAAM,CAAC,AAAD,EAAzBQ,EAA8B,UACtC5M,EAAWoM,EAAM,UAAU,CAAGrD,GAAiBqD,EAAM,UAAU,EAAI,KAEnEU,EAAiBV,EAAM,KAAK,CAC/B,MAAM,CAAC9O,SAAAA,CAAC,E,MAAIA,AAAa,YAAbA,EAAE,MAAM,EAAkBA,AAAa,WAAbA,EAAE,MAAM,EAAiBA,AAAa,qBAAbA,EAAE,MAAM,A,GACvE,GAAG,CAACA,SAAAA,CAAC,E,OAAIA,EAAE,MAAM,A,GACdyP,EAAkBD,EAAe,MAAM,CAAG,EAC5CA,EACAV,EAAM,KAAK,CAAC,MAAM,CAAC9O,SAAAA,CAAC,E,MAAIA,AAAa,WAAbA,EAAE,MAAM,A,GAAe,GAAG,CAACA,SAAAA,CAAC,E,OAAIA,EAAE,MAAM,A,GAE9D0P,EAA+BZ,EAAM,KAAK,CAAC,GAAG,CAAC/Q,SAAAA,CAAI,EACvD,IAAc4R,EACCC,EADTC,EAAQ,MAAAF,CAAAA,EAAAA,EAAW,CAAC5R,EAAK,MAAM,CAAC,AAAD,EAAvB4R,EAA4B,IACpCG,EAAS,MAAAF,CAAAA,EAAAA,EAAY,CAAC7R,EAAK,MAAM,CAAC,AAAD,EAAxB6R,EAA6B,UACtCG,EAAYhS,EAAK,UAAU,CAAG0N,GAAiB1N,EAAK,UAAU,EAAI,KACxE,MAAO,CACL,IAAKA,EAAK,MAAM,CAChB,MAAOA,EAAK,QAAQ,CACpB,MACE,WAAC,QAAK,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,SAAU,EAAG,E,UACxEgS,GAAa,UAAC,QAAK,MAAO,CAAE,MAAO,SAAU,E,SAAIA,C,GAClD,UAAC,QAAK,MAAO,CAAE,MAAOD,EAAQ,WAAY,IAAK,SAAU,EAAG,E,SAAID,C,MAGpE,SACE,UAAC3B,GAAAA,CACC,KAAMnQ,EACN,UACEA,AAAgB,qBAAhBA,EAAK,MAAM,EAA2BmD,EAClC,WACE,IAAM8O,EAAKjB,EAAW,GAAG,CAAChR,EAAK,MAAM,CACjCiS,CAAAA,GAAK9O,EAAU8O,EACrB,EACA9Q,M,EAIZ,CACF,GAEA,MAAO,CACL,IAAK4P,EAAM,KAAK,CAChB,MAAOA,EAAM,OAAO,CACpB,MACE,WAAC,QAAK,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,SAAU,EAAG,E,UACxEpM,GAAY,UAAC,QAAK,MAAO,CAAE,MAAO,SAAU,E,SAAIA,C,GACjD,UAAC,QAAK,MAAO,CAAEY,MAAAA,EAAO,WAAY,IAAK,SAAU,EAAG,E,SAAIiM,C,MAG5D,SACE,uB,UACGT,EAAM,KAAK,EAAIA,AAAiB,WAAjBA,EAAM,MAAM,EAC1B,UAACtP,EAAAA,OAAOA,CAAAA,CACN,QAAQ,QACR,QAAQ,aACR,YACE,AAA+B,UAA/B,OAAOsP,EAAM,KAAK,CAAC,OAAO,CACtBA,EAAM,KAAK,CAAC,OAAO,CACnBjS,KAAK,SAAS,CAACiS,EAAM,KAAK,CAAE,KAAM,GAExC,SAAQ,GACR,MAAO,CAAE,aAAc,CAAE,C,GAG5BY,EAAU,MAAM,CAAG,EAClB,UAACO,EAAAA,WAAWA,CAAAA,CACV,MAAOP,EACP,iBAAkBD,EAClB,KAAK,QACL,MAAK,GACL,MAAO,CAAE,WAAY,aAAc,C,GAGrC,UAACrS,GAAIA,CAAC,KAAK,YAAY,MAAO,CAAE,SAAU,EAAG,E,SAAG,W,KAIxD,CACF,GAEA,MACE,UAAC6S,EAAAA,WAAWA,CAAAA,CACV,MAAOb,EACP,iBAAkBD,EAClB,KAAK,QACL,MAAO,CAAE,WAAY,8BAA+B,C,EAG1D,CAEe,SAASe,KAEtB,IAAcC,EAAAA,EAAAA,EA0HEC,EAOLC,E,IAjILC,EAAQ,MAAAH,CAAAA,EAAAA,AADCI,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,IACM,KAAK,AAAD,EAAXJ,EAAgB,KACuBK,EAAAA,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EACnDF,EAAS,qBAA0B,OAANA,GAAU,6BACvC,CAAE,QAAS,CAAC,CAACA,EAAO,UAAW,GAAK,GAFxBG,EAAuCD,EAA7C,IAAI,CAAWrS,EAA8BqS,EAA9BrS,SAAS,CAAEC,EAAmBoS,EAAnBpS,KAAK,CAAEsS,EAAYF,EAAZE,OAAO,CAI1CrK,EAAM,MAANA,CAAAA,EAAMoK,MAAAA,EAAAA,KAAAA,EAAAA,EAAS,GAAG,AAAD,EAAC,EAAKA,EACvBE,EAAiBC,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EAA2B,qBAAwC,OAApBN,MAAAA,EAAAA,EAAS,WAAW,YACpFO,EAAkBD,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EAGrB,qBAAwC,OAApBN,MAAAA,EAAAA,EAAS,WAAW,uBACrCQ,EAAczK,AAAO,MAAPA,GAAe,CAAC,CAAC,UAAW,SAAU,YAAa,UAAU,CAAC,QAAQ,CAACA,EAAI,MAAM,EAEpD0K,EAAAA,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAC/CD,GAAeR,EAAS,qBAA0B,OAANA,EAAM,WAAW,KAC7D,CAAE,OAAQ,CAAE,OAAQ,CAAE,EAAG,UAAW,EAAK,GAFnCrP,EAAyC8P,EAAzC9P,MAAM,CAAS+P,EAA0BD,EAAjC,KAAK,CAAYE,EAAgBF,EAAhBE,WAAW,CAKJ5S,EAAAA,GAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAyB,SAA1D6S,EAAiC7S,CAAAA,CAAAA,EAAAA,CAAnB8S,EAAmB9S,CAAAA,CAAAA,EAAAA,CACRG,EAAAA,GAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAmD,gBAA5E4S,EAAyB5S,CAAAA,CAAAA,EAAAA,CAAf6S,EAAe7S,CAAAA,CAAAA,EAAAA,CAQhC+C,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,WACJyP,GAAYF,GACTJ,GAET,EAAG,CAACM,EAAUF,EAAaJ,EAAQ,EAEnC,IAAM3D,EAAa1G,AAAO,MAAPA,GAAe,CAACyK,EAE7BQ,EAAsBjL,MAAAA,EAAAA,KAAAA,EAAAA,EAAK,IAAI,CAAC,IAAI,CAACyG,SAAAA,CAAC,E,OAC1CA,EAAE,KAAK,CAAC,IAAI,CAAC9M,SAAAA,CAAC,E,MAAKA,AAAwB,qBAAxBA,EAAE,MAAM,A,KAkBvBuR,EAAajB,EAAS,GAAqB,OAAnBA,EAAM,KAAK,CAAC,EAAG,IAAI,OAAO,GAExD,MACE,WAACkB,EAAAA,MAAMA,CAAAA,C,UACL,UAACC,EAAAA,YAAYA,CAAAA,CACX,MAAK,SAAEpL,MAAAA,EAAAA,KAAAA,EAAAA,EAAK,IAAI,AAAD,EAAC,EAAK,gBAA0B,OAAXkL,GACpC,YAAalL,EAAO,OAAiB,OAAXkL,GAAe,4CACzC,YAAa,CACX,CAAE,MAAO,OAAQ,KAAM,GAAI,EAC3B,CAAE,MAAO,YAAa,KAAM,YAAa,EACzC,CAAE,MAAO,OAAQ,KAAM,mBAAoB,EAC3C,CAAE,MAAOA,CAAW,EACrB,CACD,QACE,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,CAAE,E,UACpC,UAAC7R,EAAAA,QAAQA,CAAAA,CAACC,QAAS,W,OAAM+Q,G,EAAW,SAAUvS,E,SAAW,S,GAGxDkI,GAAO,CAAC0G,GACP,UAACrN,EAAAA,QAAQA,CAAAA,CACP,OAAM,GACN,QAASiR,EAAe,SAAS,CACjChR,QAAS,W,OAAM2Q,GAASK,EAAe,MAAM,E,WAC9C,Y,QAQRvS,GAAS,UAACoB,EAAAA,OAAOA,CAAAA,CAAC,QAAQ,QAAQ,QAAQ,8BAA8B,YAAaD,OAAOnB,GAAQ,SAAQ,E,GAE5GkT,GACC,UAAC9R,EAAAA,OAAOA,CAAAA,CACN,QAAQ,UACR,QAAQ,4BACR,YAAY,4EACZ,SAAQ,GACR,MAAO,CAAE,aAAc,EAAG,C,GAI7BrB,GAAa,UAACuT,EAAAA,aAAaA,CAAAA,C,SAAC,UAACtU,GAAIA,C,SAAC,yB,KAClC,CAACe,GAAa,CAACkI,GAAO,CAACjI,GAAS,UAACsT,EAAAA,aAAaA,CAAAA,C,SAAC,UAACtU,GAAIA,C,SAAC,yB,KACrDiJ,GACC,UAACqL,EAAAA,aAAaA,CAAAA,C,SACZ,WAAC,OAAI,MAAO,CACV,QAAS,OACT,WAAY,SACZ,IAAK,GACL,QAAS,YACT,WAAY,sBACZ,OAAQ,kCACR,aAAc,EACd,SAAU,MACZ,E,UACE,UAACC,EAAAA,CAAmBA,CAAAA,CAAC,OAAQtL,EAAI,MAAM,A,GACvC,UAACuL,EAAAA,IAAIA,CAAAA,CACH,GAAK,4BAAwD,OAA7BhV,mBAAmByJ,EAAI,IAAI,GAC3D,MAAO,CAAE,MAAO,cAAe,WAAY,IAAK,SAAU,EAAG,E,SAE5DA,EAAI,IAAI,A,GAEX,WAAC,QAAK,MAAO,CAAE,MAAO,uBAAwB,SAAU,EAAG,E,UAAG,IAC1DA,EAAI,OAAO,C,GAEf,WAAC,QAAK,MAAO,CAAE,MAAO,uBAAwB,SAAU,EAAG,E,UAAG,M,MACxD+J,CAAAA,EAAAA,EAAI,OAAO,CAAC,KAAK,AAAD,EAAhBA,EAAqB,U,GAE1B/J,EAAI,SAAS,EACZ,UAAC,QAAK,MAAO,CAAE,MAAO,uBAAwB,SAAU,GAAI,WAAY,MAAO,E,SAC5E,IAAIjG,KAAKiG,EAAI,SAAS,EAAE,cAAc,E,GAG1CgK,AAAAA,OAAAA,CAAAA,EAAAA,EAAI,MAAM,AAAD,EAATA,KAAAA,EAAAA,EAAY,OAAO,AAAD,GACjB,UAAC,QAAK,MAAO,CACX,SAAU,GACV,MAAO,wBACP,UAAW,kCACX,WAAY,EACZ,MAAO,MACT,E,SACGhK,EAAI,MAAM,CAAC,OAAO,A,QAO5BA,GACC,WAACqL,EAAAA,aAAaA,CAAAA,C,UAEZ,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,eAAgB,gBAAiB,aAAc,EAAG,E,UACrG,UAAClU,GAAKA,CAAC,MAAO,EAAG,MAAO,CAAE,OAAQ,CAAE,E,SAAG,W,GACvC,UAACqU,GAAAA,CAAgBA,CAAAA,CAAC,MAhIT,CACjB,UAAa,CAAE,MAAO,WAAY,EAClC,SAAa,CAAE,MAAO,UAAW,EACjC,YAAa,CAAE,MAAO,aAAc,CACtC,EA4H+C,QAAST,EAAU,SAAUC,C,MAGnEP,GAAe,CAACG,GAAe,CAACD,GAAY,UAACxR,EAAAA,OAAOA,CAAAA,CAAC,QAAQ,OAAO,QAAQ,gCAAgC,SAAQ,GAAC,MAAO,CAAE,aAAc,EAAG,C,GAC/IsR,GAAeE,GAAY,UAACxR,EAAAA,OAAOA,CAAAA,CAAC,QAAQ,QAAQ,QAAQ,qBAAqB,YAAawR,EAAS,OAAO,CAAE,MAAO,CAAE,aAAc,EAAG,C,GAE1II,AAAa,cAAbA,GACC,UAAC7E,GAAaA,CACZ,IAAKlG,EACLnF,UAAW,SAACnD,CAAI,E,OAAKoT,EAAgBpT,E,IAGxCqT,AAAa,aAAbA,GACC,UAAClL,EAAYA,CACX,IAAKG,EACL,OAAQpF,EACRC,UAAW,SAACnD,CAAI,E,OAAKoT,EAAgBpT,E,IAGxCqT,AAAa,gBAAbA,GACC,UAAC/C,GAAAA,CACC,OAAQpN,EACR,IAAKoF,EACLnF,UAAW,SAACnD,CAAI,E,OAAKoT,EAAgBpT,E,OAM5CsI,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAK,MAAM,AAAD,GACT,WAACqL,EAAAA,aAAaA,CAAAA,C,UACZ,UAAClU,GAAKA,CAAC,MAAO,E,SAAG,gB,GAChB6I,EAAI,MAAM,CAAC,OAAO,CACjB,UAACyL,EAAAA,MAAMA,CAAAA,CACL,SAAQ,GACR,KAAK,QACL,WAAY1S,OAAO,OAAO,CAACiH,EAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,Y,oBAAmB,CACpEhH,IADmDA,CAAAA,CAAAA,EAAAA,CAEnDC,MAFwDA,CAAAA,CAAAA,EAAAA,AAG1D,C,GACAyS,WAAY,SAAZA,CAAAA,E,IAAe1S,EAAAA,EAAAA,GAAG,CAAEC,EAAAA,EAAAA,KAAK,C,MACvB,WAAC0S,EAAAA,UAAUA,CAAAA,C,UACT,UAAC5U,GAAIA,CAAC,OAAM,G,SAAEiC,C,GACd,UAAC,QAAK,MAAO,CAAE,WAAY,CAAE,E,SAAIE,OAAOD,MAAAA,EAAAA,EAAS,I,SAKvD,UAAClC,GAAIA,CAAC,KAAK,Y,SAAY,sB,GAExBiJ,EAAI,MAAM,CAAC,KAAK,EACf,UAAC7G,EAAAA,OAAOA,CAAAA,CACN,MAAO,CAAE,UAAW,EAAG,EACvB,QAAQ,QACR,QAAS6G,EAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CACjC,YACEA,EAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAGxJ,KAAK,SAAS,CAACwJ,EAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAE,KAAM,GAAKnH,OAEjF,SAAQ,E,MAMhB,UAACtB,EAAaA,CACZ,KAAMsT,AAAiB,OAAjBA,EACN,KAAMA,EACN,MAAOZ,MAAAA,EAAAA,EAAS,GAChBrS,QAAS,W,OAAMkT,EAAgB,K,EAC/B,UAnLwB,SAAOlS,CAAM,CAAwBX,CAAO,M,0BAElEmQ,E,suCADN,GAAI,CAACyC,GAAgB,CAACZ,GAElB,CADE7B,CAAAA,EAAMpI,MAAAA,EAAAA,KAAAA,EAAAA,EAAK,IAAI,CAAC,IAAI,CAACyG,SAAAA,CAAC,E,OAAIA,EAAE,KAAK,CAAC,IAAI,CAAC9M,SAAAA,CAAC,E,OAAIA,EAAE,EAAE,GAAKkR,EAAa,EAAE,A,MAD5C,O,GAG9B,O,EAAML,EAAgB,WAAW,CAAC,CAChCP,MAAAA,EACA,MAAO7B,EAAI,EAAE,CACb,OAAQyC,EAAa,EAAE,CACvBjS,OAAAA,EACAX,QAAAA,CACF,G,eANA,SAOA6S,EAAgB,MACXT,I,MACP,E,kLAuKM,UAAWG,EAAgB,SAAS,CACpC,MAA4BoB,C,EAArBpB,EAAgB,KAAKoB,C,SAAY9U,Q,oFAAQ0T,EAAgB,KAAK,CAAG,I,KAIhF,C"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_kb_labs_workflow_entry=self.webpackChunk_kb_labs_workflow_entry||[]).push([["67"],{9725(e,t,r){r.r(t),r.d(t,{default:()=>I});var n=r(8048),a=r(5259),l=r(4391),o=r(1349),i=r(2383),s=r(4461),u=r(5688),c=r(9747),d=r(7205),p={failed:{color:"error",label:"Failed"},waiting_approval:{color:"warning",label:"Approval"},running:{color:"processing",label:"Running"},queued:{color:"default",label:"Queued"},success:{color:"success",label:"Done"},cancelled:{color:"default",label:"Cancelled"}};function y(e){var t,r,a,l,i,s,y,f,g,h,v=e.run,x=e.onClick,m=(0,d.F)(v).phases.map(function(e){var t=e.steps.every(function(e){return"success"===e.stepRun.status}),r=e.steps.some(function(e){return"running"===e.stepRun.status||"waiting_approval"===e.stepRun.status});return{label:e.label,status:t?"done":r?"active":"pending"}}),b=function(e){var t=!0,r=!1,n=void 0;try{for(var a,l=e.jobs[Symbol.iterator]();!(t=(a=l.next()).done);t=!0){var o=a.value,i=!0,s=!1,u=void 0;try{for(var c,d=o.steps[Symbol.iterator]();!(i=(c=d.next()).done);i=!0){var p,y=c.value;if("running"===y.status||"waiting_approval"===y.status)return{name:y.name,summary:null==(p=y.spec)?void 0:p.summary,status:y.status}}}catch(e){s=!0,u=e}finally{try{i||null==d.return||d.return()}finally{if(s)throw u}}}}catch(e){r=!0,n=e}finally{try{t||null==l.return||l.return()}finally{if(r)throw n}}return null}(v),j=(null==(t=v.trigger.payload)?void 0:t.task)&&"string"==typeof t.task?t.task:"",w=null!=(r=null!=(a=null!=(l=v.startedAt)?l:null==(f=v.jobs[0])?void 0:f.startedAt)?a:v.queuedAt)?r:null,k=null!=(i=null!=(s=v.finishedAt)?s:null==(g=v.jobs[0])?void 0:g.finishedAt)?i:null,T=w?(0,u.a3)((k?new Date(k).getTime():Date.now())-new Date(w).getTime()):null,I=p[v.status],S=w?function(e){var t=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(t<1)return"just now";if(t<60)return"".concat(t,"m ago");var r=Math.floor(t/60);return r<24?"".concat(r,"h ago"):"".concat(Math.floor(r/24),"d ago")}(w):null;return(0,n.jsxs)("div",{onClick:x,style:{padding:"12px 16px",background:"var(--bg-primary)",border:"1px solid var(--border-primary)",borderRadius:8,cursor:"pointer",transition:"border-color 0.15s"},onMouseEnter:function(e){return e.currentTarget.style.borderColor="var(--link)"},onMouseLeave:function(e){return e.currentTarget.style.borderColor="var(--border-primary)"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:6},children:[(0,n.jsx)("span",{style:{fontSize:14,fontWeight:500,color:"var(--text-primary)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:v.name}),I&&(0,n.jsx)(o.UITag,{color:I.color,style:{marginLeft:8,flexShrink:0},children:I.label})]}),(0,n.jsxs)("div",{style:{display:"flex",gap:12,marginBottom:j||m.length>0||b?8:0},children:[S&&(0,n.jsx)("span",{style:{fontSize:12,color:"var(--text-tertiary)"},children:S}),T&&(0,n.jsx)("span",{style:{fontSize:12,color:"var(--text-tertiary)"},children:T}),(0,n.jsxs)("span",{style:{fontSize:12,color:"var(--text-tertiary)",fontFamily:"monospace"},children:["#",v.id.slice(-6)]})]}),j&&(0,n.jsx)("div",{style:{fontSize:12,color:"var(--text-secondary)",marginBottom:8,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:j}),m.length>0&&(0,n.jsx)("div",{style:{marginBottom:8},children:(0,n.jsx)(c.g,{phases:m,compact:!0})}),b&&(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6},children:[(0,n.jsx)(u.md,{status:b.status}),(0,n.jsx)("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:null!=(y=b.summary)?y:b.name})]}),"failed"===v.status&&(null==(h=v.result)?void 0:h.error)&&(0,n.jsx)("div",{style:{fontSize:12,color:"var(--error)",marginTop:6,padding:"4px 8px",background:"color-mix(in srgb, var(--error) 6%, transparent)",borderRadius:4,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:v.result.error.message})]})}var f=[{key:"attention",label:"Needs Attention",statuses:["waiting_approval"],color:"var(--warning)"},{key:"running",label:"Running",statuses:["running","queued"],color:"var(--info)"},{key:"completed",label:"Completed",statuses:["success"],color:"var(--success)"},{key:"failed",label:"Failed",statuses:["failed"],color:"var(--error)"},{key:"other",label:"Other",statuses:["cancelled","skipped","pending"],color:"var(--text-tertiary)"}];function g(e){var t=e.runs,r=e.onRunClick,l=a.useMemo(function(){var e={},r=!0,n=!1,a=void 0;try{for(var l,o=f[Symbol.iterator]();!(r=(l=o.next()).done);r=!0)!function(){var r=l.value;e[r.key]=t.filter(function(e){return r.statuses.includes(e.status)})}()}catch(e){n=!0,a=e}finally{try{r||null==o.return||o.return()}finally{if(n)throw a}}return e},[t]),i=f.filter(function(e){var t,r;return(null!=(t=null==(r=l[e.key])?void 0:r.length)?t:0)>0});return 0===t.length?(0,n.jsx)("div",{style:{textAlign:"center",padding:"48px 0",color:"var(--text-secondary)"},children:(0,n.jsx)(o.UITypographyText,{className:"typo-description text-secondary",children:"No runs found"})}):(0,n.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:32},children:i.map(function(e){return(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:12},children:[(0,n.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:e.color,display:"inline-block"}}),(0,n.jsx)(o.UITypographyText,{className:"typo-label",style:{color:"var(--text-secondary)"},children:e.label}),(0,n.jsxs)(o.UITypographyText,{className:"typo-caption text-tertiary",children:["(",l[e.key].length,")"]})]}),(0,n.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(320px, 1fr))",gap:12},children:l[e.key].map(function(e){return(0,n.jsx)(y,{run:e,onClick:function(){return r(e.id)}},e.id)})})]},e.key)})})}var h=[{status:"queued",label:"Queued",color:"var(--text-tertiary)"},{status:"running",label:"Running",color:"var(--info)"},{status:"waiting_approval",label:"Waiting Approval",color:"var(--warning)"},{status:"success",label:"Success",color:"var(--success)"},{status:"failed",label:"Failed",color:"var(--error)"},{status:"cancelled",label:"Cancelled",color:"var(--text-tertiary)"}];function v(e){var t=e.runs,r=e.onRunClick,a=Object.fromEntries(h.map(function(e){return[e.status,t.filter(function(t){return t.status===e.status})]})),l=h.filter(function(e){var t,r;return(null!=(t=null==(r=a[e.status])?void 0:r.length)?t:0)>0});return 0===l.length?(0,n.jsx)("div",{style:{textAlign:"center",padding:"48px 0"},children:(0,n.jsx)(o.UITypographyText,{className:"typo-description text-secondary",children:"No runs found"})}):(0,n.jsx)("div",{style:{display:"flex",gap:16,overflowX:"auto",paddingBottom:8},children:l.map(function(e){return(0,n.jsxs)("div",{style:{minWidth:280,maxWidth:320,flexShrink:0},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:10,padding:"0 4px"},children:[(0,n.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:e.color,display:"inline-block"}}),(0,n.jsx)(o.UITypographyText,{className:"typo-label",style:{color:"var(--text-secondary)"},children:e.label}),(0,n.jsx)(o.UITypographyText,{className:"typo-caption text-tertiary",children:a[e.status].length})]}),(0,n.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:a[e.status].map(function(e){return(0,n.jsx)(y,{run:e,onClick:function(){return r(e.id)}},e.id)})})]},e.status)})})}var x=r(8292);function m(e){var t=e.runs,r=e.loading,l=e.onRunClick,i=(0,a.useMemo)(function(){return[{title:"Run ID",dataIndex:"id",key:"id",width:180,render:function(e){return(0,n.jsxs)(o.UITypographyText,{className:"typo-caption",code:!0,ellipsis:{tooltip:e},children:[e.slice(0,16),"..."]})}},{title:"Workflow",dataIndex:"name",key:"name",width:220,render:function(e,t){return(0,n.jsxs)(o.UITypographyText,{className:"typo-body",strong:!0,children:[t.name,"@",t.version]})}},{title:"Status",dataIndex:"status",key:"status",width:140,render:function(e){return(0,n.jsx)(x.d,{status:e})}},{title:"Triggered By",key:"actor",width:140,render:function(e,t){var r;return(0,n.jsx)(o.UITypographyText,{className:"typo-caption text-secondary",children:null!=(r=t.trigger.actor)?r:"unknown"})}},{title:"Started At",dataIndex:"startedAt",key:"startedAt",width:180,render:function(e){return(0,n.jsx)(o.UITypographyText,{className:"typo-caption",children:e?new Date(e).toLocaleString():"-"})}},{title:"Duration",key:"duration",width:100,render:function(e,t){return(0,n.jsx)(o.UITypographyText,{className:"typo-caption",children:function(e){if(!e.startedAt)return"-";var t=new Date(e.startedAt).getTime(),r=Math.floor(((e.finishedAt?new Date(e.finishedAt).getTime():Date.now())-t)/1e3);if(r<60)return"".concat(r,"s");var n=Math.floor(r/60);if(n<60)return"".concat(n,"m ").concat(r%60,"s");var a=Math.floor(n/60);return"".concat(a,"h ").concat(n%60,"m")}(t)})}}]},[]);return(0,n.jsx)(o.UITable,{rowKey:"id",columns:i,dataSource:t,loading:r,scroll:{x:960},pagination:{pageSize:20},onRow:function(e){return{style:{cursor:"pointer"},onClick:function(){return l(e.id)}}}})}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function w(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function k(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return b(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var T={triage:{label:"Triage"},board:{label:"Board"},table:{label:"Table"}};function I(){var e,t=(0,l.useNavigate)(),r=k((0,a.useState)("triage"),2),u=r[0],c=r[1],d=k((0,a.useState)({limit:50}),2),p=d[0],y=d[1],f=(0,i.useData)("/exec/api/v1/runs",{params:j({limit:p.limit},p.status?{status:p.status}:{}),pollingMs:"table"!==u?5e3:void 0}),h=f.data,x=f.isLoading,b=f.refetch,I=null!=(e=null==h?void 0:h.runs)?e:[];return(0,n.jsxs)(o.UIPage,{width:"full",children:[(0,n.jsx)(o.UIPageHeader,{title:"Workflow Runs",description:"All workflow executions",breadcrumbs:[{title:"Home",href:"/"},{title:"Workflows",href:"/workflows"},{title:"Runs"}],actions:(0,n.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,n.jsx)(s.k,{views:T,current:u,onChange:c}),(0,n.jsx)(o.UIButton,{icon:(0,n.jsx)(o.UIIcon,{name:"ReloadOutlined",spin:x}),onClick:function(){return b()}})]})}),(0,n.jsx)(o.UICard,{style:{marginBottom:"var(--spacing-section)"},children:(0,n.jsxs)(o.UIRow,{gutter:16,children:[(0,n.jsxs)(o.UICol,{span:8,children:[(0,n.jsx)(o.UITypographyText,{className:"typo-label",children:"Filter by Status"}),(0,n.jsx)(o.UISelect,{style:{width:"100%",marginTop:8},placeholder:"All statuses",allowClear:!0,value:p.status,onChange:function(e){return y(w(j({},p),{status:e}))},options:[{label:"Running",value:"running"},{label:"Success",value:"success"},{label:"Failed",value:"failed"},{label:"Cancelled",value:"cancelled"},{label:"Queued",value:"queued"}]})]}),(0,n.jsxs)(o.UICol,{span:8,children:[(0,n.jsx)(o.UITypographyText,{className:"typo-label",children:"Limit"}),(0,n.jsx)(o.UISelect,{style:{width:"100%",marginTop:8},value:p.limit,onChange:function(e){return y(w(j({},p),{limit:e}))},options:[{label:"25",value:25},{label:"50",value:50},{label:"100",value:100},{label:"200",value:200}]})]})]})}),"triage"===u&&(0,n.jsx)(g,{runs:I,onRunClick:function(e){return t("/p/workflows/runs/".concat(e))}}),"board"===u&&(0,n.jsx)(v,{runs:I,onRunClick:function(e){return t("/p/workflows/runs/".concat(e))}}),"table"===u&&(0,n.jsx)(o.UICard,{children:(0,n.jsx)(m,{runs:I,loading:x,onRunClick:function(e){return t("/p/workflows/runs/".concat(e))}})})]})}}}]);
|
|
2
|
-
//# sourceMappingURL=__federation_expose_Runs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"__federation_expose_Runs.js","sources":["webpack://@kb-labs/workflow-entry/./src/studio/components/triage/RunCard.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/triage/TriageView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/board/BoardView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/table/TableView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/pages/WorkflowsRuns.tsx"],"sourcesContent":["/**\n * Compact run card for triage/board views.\n * Shows workflow name, task, current status, phase progress, and duration.\n */\n\nimport * as React from 'react';\nimport { UITag } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { StatusDot, formatDuration } from '../pipeline/shared';\nimport { PhaseProgressBar } from '../shared/PhaseProgressBar';\nimport { usePipelineModel } from '../../hooks/use-pipeline-graph';\nimport type { PhaseStatus } from '../shared/PhaseProgressBar';\n\nfunction timeAgo(iso: string): string {\n const diffMs = Date.now() - new Date(iso).getTime();\n const m = Math.floor(diffMs / 60_000);\n if (m < 1) { return 'just now'; }\n if (m < 60) { return `${m}m ago`; }\n const h = Math.floor(m / 60);\n if (h < 24) { return `${h}h ago`; }\n return `${Math.floor(h / 24)}d ago`;\n}\n\nconst STATUS_TAG: Record<string, { color: string; label: string }> = {\n failed: { color: 'error', label: 'Failed' },\n waiting_approval: { color: 'warning', label: 'Approval' },\n running: { color: 'processing', label: 'Running' },\n queued: { color: 'default', label: 'Queued' },\n success: { color: 'success', label: 'Done' },\n cancelled: { color: 'default', label: 'Cancelled' },\n};\n\nfunction getCurrentStepInfo(run: WorkflowRun): { name: string; summary?: string; status: string } | null {\n for (const job of run.jobs) {\n for (const step of job.steps) {\n if (step.status === 'running' || step.status === 'waiting_approval') {\n return {\n name: step.name,\n summary: step.spec?.summary,\n status: step.status,\n };\n }\n }\n }\n return null;\n}\n\nfunction getTaskDescription(run: WorkflowRun): string {\n const payload = run.trigger.payload;\n if (payload?.task && typeof payload.task === 'string') { return payload.task; }\n return '';\n}\n\ninterface RunCardProps {\n run: WorkflowRun;\n onClick: () => void;\n}\n\nexport function RunCard({ run, onClick }: RunCardProps) {\n const model = usePipelineModel(run);\n const phases: PhaseStatus[] = model.phases.map((phase) => {\n const allDone = phase.steps.every((s) => s.stepRun.status === 'success');\n const anyActive = phase.steps.some(\n (s) => s.stepRun.status === 'running' || s.stepRun.status === 'waiting_approval',\n );\n return {\n label: phase.label,\n status: allDone ? 'done' as const : anyActive ? 'active' as const : 'pending' as const,\n };\n });\n\n const currentStep = getCurrentStepInfo(run);\n const task = getTaskDescription(run);\n const startedAt = run.startedAt ?? run.jobs[0]?.startedAt ?? run.queuedAt ?? null;\n const finishedAt = run.finishedAt ?? run.jobs[0]?.finishedAt ?? null;\n\n const duration = startedAt\n ? formatDuration(\n (finishedAt ? new Date(finishedAt).getTime() : Date.now()) -\n new Date(startedAt).getTime(),\n )\n : null;\n\n const statusTag = STATUS_TAG[run.status];\n const startedAgo = startedAt ? timeAgo(startedAt) : null;\n\n return (\n <div\n onClick={onClick}\n style={{\n padding: '12px 16px',\n background: 'var(--bg-primary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n cursor: 'pointer',\n transition: 'border-color 0.15s',\n }}\n onMouseEnter={(e: React.MouseEvent<HTMLDivElement>) => (e.currentTarget.style.borderColor = 'var(--link)')}\n onMouseLeave={(e: React.MouseEvent<HTMLDivElement>) => (e.currentTarget.style.borderColor = 'var(--border-primary)')}\n >\n {/* Header: name + status tag */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 6 }}>\n <span style={{ fontSize: 14, fontWeight: 500, color: 'var(--text-primary)', flex: 1, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {run.name}\n </span>\n {statusTag && (\n <UITag color={statusTag.color} style={{ marginLeft: 8, flexShrink: 0 }}>{statusTag.label}</UITag>\n )}\n </div>\n\n {/* Meta: time ago + duration */}\n <div style={{ display: 'flex', gap: 12, marginBottom: task || phases.length > 0 || currentStep ? 8 : 0 }}>\n {startedAgo && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>{startedAgo}</span>\n )}\n {duration && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>{duration}</span>\n )}\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)', fontFamily: 'monospace' }}>\n #{run.id.slice(-6)}\n </span>\n </div>\n\n {/* Task description */}\n {task && (\n <div style={{ fontSize: 12, color: 'var(--text-secondary)', marginBottom: 8, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {task}\n </div>\n )}\n\n {/* Phase progress */}\n {phases.length > 0 && (\n <div style={{ marginBottom: 8 }}>\n <PhaseProgressBar phases={phases} compact />\n </div>\n )}\n\n {/* Current step */}\n {currentStep && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <StatusDot status={currentStep.status} />\n <span style={{ fontSize: 12, color: 'var(--text-secondary)' }}>\n {currentStep.summary ?? currentStep.name}\n </span>\n </div>\n )}\n\n {/* Error summary for failed runs */}\n {run.status === 'failed' && run.result?.error && (\n <div style={{\n fontSize: 12, color: 'var(--error)', marginTop: 6,\n padding: '4px 8px', background: 'color-mix(in srgb, var(--error) 6%, transparent)',\n borderRadius: 4,\n overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',\n }}>\n {run.result.error.message}\n </div>\n )}\n </div>\n );\n}\n","/**\n * Triage view for workflow runs.\n * Groups runs into: Needs Attention → Running → Completed → Failed\n */\n\nimport * as React from 'react';\nimport { UITypographyText } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { RunCard } from './RunCard';\n\nconst GROUPS: { key: string; label: string; statuses: string[]; color: string }[] = [\n {\n key: 'attention',\n label: 'Needs Attention',\n statuses: ['waiting_approval'],\n color: 'var(--warning)',\n },\n {\n key: 'running',\n label: 'Running',\n statuses: ['running', 'queued'],\n color: 'var(--info)',\n },\n {\n key: 'completed',\n label: 'Completed',\n statuses: ['success'],\n color: 'var(--success)',\n },\n {\n key: 'failed',\n label: 'Failed',\n statuses: ['failed'],\n color: 'var(--error)',\n },\n {\n key: 'other',\n label: 'Other',\n statuses: ['cancelled', 'skipped', 'pending'],\n color: 'var(--text-tertiary)',\n },\n];\n\ninterface TriageViewProps {\n runs: WorkflowRun[];\n onRunClick: (runId: string) => void;\n}\n\nexport function TriageView({ runs, onRunClick }: TriageViewProps) {\n const grouped = React.useMemo(() => {\n const result: Record<string, WorkflowRun[]> = {};\n for (const group of GROUPS) {\n result[group.key] = runs.filter((r) => (group.statuses as string[]).includes(r.status));\n }\n return result;\n }, [runs]);\n\n const nonEmptyGroups = GROUPS.filter((g) => (grouped[g.key]?.length ?? 0) > 0);\n\n if (runs.length === 0) {\n return (\n <div style={{ textAlign: 'center', padding: '48px 0', color: 'var(--text-secondary)' }}>\n <UITypographyText className=\"typo-description text-secondary\">No runs found</UITypographyText>\n </div>\n );\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n {nonEmptyGroups.map((group) => (\n <div key={group.key}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: 12 }}>\n <span style={{ width: 8, height: 8, borderRadius: '50%', background: group.color, display: 'inline-block' }} />\n <UITypographyText className=\"typo-label\" style={{ color: 'var(--text-secondary)' }}>\n {group.label}\n </UITypographyText>\n <UITypographyText className=\"typo-caption text-tertiary\">\n ({grouped[group.key]!.length})\n </UITypographyText>\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(320px, 1fr))', gap: 12 }}>\n {grouped[group.key]!.map((run) => (\n <RunCard key={run.id} run={run} onClick={() => onRunClick(run.id)} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","/**\n * Board (kanban) view for workflow runs.\n * Columns: Queued → Running → Waiting Approval → Success → Failed → Cancelled\n */\n\nimport { UITypographyText } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { RunCard } from '../triage/RunCard';\n\nconst COLUMNS: { status: WorkflowRun['status'] | 'waiting_approval'; label: string; color: string }[] = [\n { status: 'queued', label: 'Queued', color: 'var(--text-tertiary)' },\n { status: 'running', label: 'Running', color: 'var(--info)' },\n { status: 'waiting_approval', label: 'Waiting Approval', color: 'var(--warning)' },\n { status: 'success', label: 'Success', color: 'var(--success)' },\n { status: 'failed', label: 'Failed', color: 'var(--error)' },\n { status: 'cancelled', label: 'Cancelled', color: 'var(--text-tertiary)' },\n];\n\ninterface BoardViewProps {\n runs: WorkflowRun[];\n onRunClick: (runId: string) => void;\n}\n\nexport function BoardView({ runs, onRunClick }: BoardViewProps) {\n const byStatus = Object.fromEntries(\n COLUMNS.map((col) => [col.status, runs.filter((r) => r.status === col.status)]),\n );\n\n const activeCols = COLUMNS.filter((col) => (byStatus[col.status]?.length ?? 0) > 0);\n\n if (activeCols.length === 0) {\n return (\n <div style={{ textAlign: 'center', padding: '48px 0' }}>\n <UITypographyText className=\"typo-description text-secondary\">No runs found</UITypographyText>\n </div>\n );\n }\n\n return (\n <div style={{ display: 'flex', gap: 16, overflowX: 'auto', paddingBottom: 8 }}>\n {activeCols.map((col) => (\n <div\n key={col.status}\n style={{ minWidth: 280, maxWidth: 320, flexShrink: 0 }}\n >\n {/* Column header */}\n <div style={{\n display: 'flex', alignItems: 'center', gap: 6,\n marginBottom: 10, padding: '0 4px',\n }}>\n <span style={{ width: 8, height: 8, borderRadius: '50%', background: col.color, display: 'inline-block' }} />\n <UITypographyText className=\"typo-label\" style={{ color: 'var(--text-secondary)' }}>\n {col.label}\n </UITypographyText>\n <UITypographyText className=\"typo-caption text-tertiary\">\n {byStatus[col.status]!.length}\n </UITypographyText>\n </div>\n\n {/* Cards */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {byStatus[col.status]!.map((run) => (\n <RunCard key={run.id} run={run} onClick={() => onRunClick(run.id)} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","/**\n * Table view for workflow runs — sortable, filterable list.\n * Extracted from WorkflowsRuns.tsx to be used as one of the view modes.\n */\n\nimport { useMemo } from 'react';\nimport {\n UITable,\n UITypographyText,\n} from '@kb-labs/sdk/studio';\nimport type { UITableColumn } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { WorkflowStatusBadge } from '../shared/WorkflowStatusBadge';\n\nfunction formatDate(dateStr?: string) {\n if (!dateStr) { return '-'; }\n return new Date(dateStr).toLocaleString();\n}\n\nfunction formatDuration(run: WorkflowRun) {\n if (!run.startedAt) { return '-'; }\n const start = new Date(run.startedAt).getTime();\n const end = run.finishedAt ? new Date(run.finishedAt).getTime() : Date.now();\n const ms = end - start;\n const seconds = Math.floor(ms / 1000);\n if (seconds < 60) { return `${seconds}s`; }\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) { return `${minutes}m ${seconds % 60}s`; }\n const hours = Math.floor(minutes / 60);\n return `${hours}h ${minutes % 60}m`;\n}\n\ninterface TableViewProps {\n runs: WorkflowRun[];\n loading: boolean;\n onRunClick: (runId: string) => void;\n}\n\nexport function TableView({ runs, loading, onRunClick }: TableViewProps) {\n const columns = useMemo<UITableColumn<WorkflowRun>[]>(\n () => [\n {\n title: 'Run ID',\n dataIndex: 'id',\n key: 'id',\n width: 180,\n render: (value: string) => (\n <UITypographyText className=\"typo-caption\" code ellipsis={{ tooltip: value }}>\n {value.slice(0, 16)}...\n </UITypographyText>\n ),\n },\n {\n title: 'Workflow',\n dataIndex: 'name',\n key: 'name',\n width: 220,\n render: (_value: unknown, record: WorkflowRun) => (\n <UITypographyText className=\"typo-body\" strong>\n {record.name}@{record.version}\n </UITypographyText>\n ),\n },\n {\n title: 'Status',\n dataIndex: 'status',\n key: 'status',\n width: 140,\n render: (status: WorkflowRun['status']) => <WorkflowStatusBadge status={status} />,\n },\n {\n title: 'Triggered By',\n key: 'actor',\n width: 140,\n render: (_value: unknown, record: WorkflowRun) => (\n <UITypographyText className=\"typo-caption text-secondary\">\n {record.trigger.actor ?? 'unknown'}\n </UITypographyText>\n ),\n },\n {\n title: 'Started At',\n dataIndex: 'startedAt',\n key: 'startedAt',\n width: 180,\n render: (val: string) => (\n <UITypographyText className=\"typo-caption\">{formatDate(val)}</UITypographyText>\n ),\n },\n {\n title: 'Duration',\n key: 'duration',\n width: 100,\n render: (_value: unknown, record: WorkflowRun) => (\n <UITypographyText className=\"typo-caption\">{formatDuration(record)}</UITypographyText>\n ),\n },\n ],\n [],\n );\n\n return (\n <UITable\n rowKey=\"id\"\n columns={columns}\n dataSource={runs}\n loading={loading}\n scroll={{ x: 960 }}\n pagination={{ pageSize: 20 }}\n onRow={(record) => ({\n style: { cursor: 'pointer' },\n onClick: () => onRunClick(record.id),\n })}\n />\n );\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/pages/workflows-runs-page\n * All workflow runs list — Triage / Board / Table views\n */\n\nimport { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n UIButton,\n UISelect,\n UIRow,\n UICol,\n UIIcon,\n UITypographyText,\n} from '@kb-labs/sdk/studio';\nimport { useData } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { UIPage, UIPageHeader, UICard } from '@kb-labs/sdk/studio';\nimport { ViewModeSelector } from '../components/shared/ViewModeSelector';\nimport { TriageView } from '../components/triage/TriageView';\nimport { BoardView } from '../components/board/BoardView';\nimport { TableView } from '../components/table/TableView';\n\ntype ViewMode = 'triage' | 'board' | 'table';\n\nconst VIEWS = {\n triage: { label: 'Triage' },\n board: { label: 'Board' },\n table: { label: 'Table' },\n};\n\nexport default function WorkflowsRuns() {\n const navigate = useNavigate();\n const [viewMode, setViewMode] = useState<ViewMode>('triage');\n const [filters, setFilters] = useState<{ limit: number; status?: string }>({ limit: 50 });\n\n const { data, isLoading, refetch } = useData<{ runs: WorkflowRun[]; total: number }>('/exec/api/v1/runs', {\n params: { limit: filters.limit, ...(filters.status ? { status: filters.status } : {}) },\n pollingMs: viewMode !== 'table' ? 5000 : undefined,\n });\n\n const runs = data?.runs ?? [];\n\n return (\n <UIPage width=\"full\">\n <UIPageHeader\n title=\"Workflow Runs\"\n description=\"All workflow executions\"\n breadcrumbs={[\n { title: 'Home', href: '/' },\n { title: 'Workflows', href: '/workflows' },\n { title: 'Runs' },\n ]}\n actions={\n <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>\n <ViewModeSelector views={VIEWS} current={viewMode} onChange={setViewMode} />\n <UIButton\n icon={<UIIcon name=\"ReloadOutlined\" spin={isLoading} />}\n onClick={() => refetch()}\n />\n </div>\n }\n />\n\n {/* Filters */}\n <UICard style={{ marginBottom: 'var(--spacing-section)' }}>\n <UIRow gutter={16}>\n <UICol span={8}>\n <UITypographyText className=\"typo-label\">Filter by Status</UITypographyText>\n <UISelect\n style={{ width: '100%', marginTop: 8 }}\n placeholder=\"All statuses\"\n allowClear\n value={filters.status}\n onChange={(status) => setFilters({ ...filters, status: status as string | undefined })}\n options={[\n { label: 'Running', value: 'running' },\n { label: 'Success', value: 'success' },\n { label: 'Failed', value: 'failed' },\n { label: 'Cancelled', value: 'cancelled' },\n { label: 'Queued', value: 'queued' },\n ]}\n />\n </UICol>\n <UICol span={8}>\n <UITypographyText className=\"typo-label\">Limit</UITypographyText>\n <UISelect\n style={{ width: '100%', marginTop: 8 }}\n value={filters.limit}\n onChange={(limit) => setFilters({ ...filters, limit: limit as number })}\n options={[\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n { label: '200', value: 200 },\n ]}\n />\n </UICol>\n </UIRow>\n </UICard>\n\n {/* View */}\n {viewMode === 'triage' && (\n <TriageView runs={runs} onRunClick={(id) => navigate(`/p/workflows/runs/${id}`)} />\n )}\n {viewMode === 'board' && (\n <BoardView runs={runs} onRunClick={(id) => navigate(`/p/workflows/runs/${id}`)} />\n )}\n {viewMode === 'table' && (\n <UICard>\n <TableView runs={runs} loading={isLoading} onRunClick={(id) => navigate(`/p/workflows/runs/${id}`)} />\n </UICard>\n )}\n </UIPage>\n );\n}\n"],"names":["STATUS_TAG","RunCard","param","payload","_ref","_ref2","_currentStep_summary","_run_jobs_","_run_jobs_1","_run_result","run","onClick","phases","model","usePipelineModel","phase","allDone","s","anyActive","currentStep","getCurrentStepInfo","_iteratorError","job","_iteratorError1","_step_spec","step","task","startedAt","finishedAt","duration","formatDuration","Date","statusTag","startedAgo","timeAgo","iso","m","Math","diffMs","h","onMouseEnter","e","onMouseLeave","UITag","PhaseProgressBar","StatusDot","GROUPS","TriageView","runs","onRunClick","grouped","React","result","group","r","nonEmptyGroups","g","_grouped_g_key","UITypographyText","COLUMNS","BoardView","byStatus","Object","col","activeCols","_byStatus_col_status","TableView","loading","columns","useMemo","render","value","_value","record","status","WorkflowStatusBadge","_record_trigger_actor","val","start","seconds","ms","end","minutes","hours","UITable","onRow","VIEWS","WorkflowsRuns","navigate","useNavigate","_useState","viewMode","setViewMode","_useState1","filters","setFilters","_useData","undefined","data","isLoading","refetch","UIPage","UIPageHeader","ViewModeSelector","UIButton","UIIcon","UICard","UIRow","UICol","UISelect","onChange","limit","id"],"mappings":"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"}
|