@ms-cloudpack/overlay 0.17.4 → 0.17.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-esm/lib/index.js +54 -42
- package/dist/browser-esm/lib/index.js.map +2 -2
- package/dist/browser-esm/ori-input.json +2 -10
- package/dist/browser-esm/ori-output.json +33 -23
- package/dist/browser-esm/result.json +1 -1
- package/lib/components/ErrorDialog/useErrorEvents.d.ts.map +1 -1
- package/lib/components/ErrorDialog/useErrorEvents.js +12 -0
- package/lib/components/ErrorDialog/useErrorEvents.js.map +1 -1
- package/package.json +3 -3
- package/dist/ori/logs/2goaJ5b7sH9RG12yeLLjIQCmlU1-logger.log +0 -0
|
@@ -221,7 +221,7 @@ var metric = "uHuWYf-StatusBadgemodule--metric";
|
|
|
221
221
|
var success = "uHuWYf-StatusBadgemodule--success";
|
|
222
222
|
var value = "uHuWYf-StatusBadgemodule--value";
|
|
223
223
|
var warning = "uHuWYf-StatusBadgemodule--warning";
|
|
224
|
-
var
|
|
224
|
+
var StatusBadge_default = { badge, building, button, chevron, collapsed, contentSurface, error, fixedOverlay, grip, gripArea, inline, metric, success, value, warning };
|
|
225
225
|
|
|
226
226
|
// packages/overlay/src/components/StatusBadge/StatusBadge.tsx
|
|
227
227
|
import { default as cx } from "classnames";
|
|
@@ -276,7 +276,7 @@ function StatusBadge({ inline: inline2, onExpand, pageLoadTime }) {
|
|
|
276
276
|
if (!shouldRender) {
|
|
277
277
|
return null;
|
|
278
278
|
}
|
|
279
|
-
const metric2 = pageLoadTime ? /* @__PURE__ */ React2.createElement("span", { className:
|
|
279
|
+
const metric2 = pageLoadTime ? /* @__PURE__ */ React2.createElement("span", { className: StatusBadge_default.metric, title: "Page Load Time" }, "in ", pageLoadTime.toFixed(2), " ms") : null;
|
|
280
280
|
const leftChevron = "\xAB";
|
|
281
281
|
const rightChevron = "\xBB";
|
|
282
282
|
const badge2 = /* @__PURE__ */ React2.createElement(
|
|
@@ -286,12 +286,12 @@ function StatusBadge({ inline: inline2, onExpand, pageLoadTime }) {
|
|
|
286
286
|
ref: rootElementRef,
|
|
287
287
|
className: `${getStatusClassName(status, !!inline2)} ${getCollapsedClassName(isCollapsed)}`
|
|
288
288
|
},
|
|
289
|
-
!inline2 && /* @__PURE__ */ React2.createElement("div", { ref: dragElementRef, className:
|
|
290
|
-
/* @__PURE__ */ React2.createElement("button", { className:
|
|
289
|
+
!inline2 && /* @__PURE__ */ React2.createElement("div", { ref: dragElementRef, className: StatusBadge_default.gripArea }, /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_default.grip }), /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_default.grip })),
|
|
290
|
+
/* @__PURE__ */ React2.createElement("button", { className: StatusBadge_default.button, onClick: onExpand, "aria-label": "Expand overlay" }, /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_default.value }, getStatusString(status))),
|
|
291
291
|
/* @__PURE__ */ React2.createElement("div", null, getStatsString(status), metric2),
|
|
292
|
-
/* @__PURE__ */ React2.createElement("button", { className: `${
|
|
292
|
+
/* @__PURE__ */ React2.createElement("button", { className: `${StatusBadge_default.button} ${StatusBadge_default.chevron}`, onClick: toggleBadgeVisibility }, isCollapsed ? leftChevron : rightChevron)
|
|
293
293
|
);
|
|
294
|
-
return inline2 ? badge2 : /* @__PURE__ */ React2.createElement("div", { className:
|
|
294
|
+
return inline2 ? badge2 : /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_default.fixedOverlay }, /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_default.contentSurface }, badge2));
|
|
295
295
|
}
|
|
296
296
|
function getStatusString(status) {
|
|
297
297
|
if (status.status === "pending") {
|
|
@@ -303,17 +303,17 @@ function getStatusString(status) {
|
|
|
303
303
|
return status.totalErrors === 0 ? "Success" : "Errors";
|
|
304
304
|
}
|
|
305
305
|
function getStatusClassName({ status, totalTasks, totalErrors, totalWarnings }, inline2) {
|
|
306
|
-
return cx(
|
|
307
|
-
[
|
|
308
|
-
[
|
|
309
|
-
[
|
|
310
|
-
[
|
|
311
|
-
[
|
|
306
|
+
return cx(StatusBadge_default.badge, {
|
|
307
|
+
[StatusBadge_default.inline]: inline2,
|
|
308
|
+
[StatusBadge_default.building]: status === "pending",
|
|
309
|
+
[StatusBadge_default.success]: status === "idle" && totalTasks > 0 && totalErrors === 0 && totalWarnings === 0,
|
|
310
|
+
[StatusBadge_default.error]: status === "idle" && totalErrors > 0,
|
|
311
|
+
[StatusBadge_default.warning]: status === "idle" && totalErrors === 0 && totalWarnings > 0
|
|
312
312
|
});
|
|
313
313
|
}
|
|
314
314
|
function getCollapsedClassName(isCollapsed) {
|
|
315
|
-
return cx(
|
|
316
|
-
[
|
|
315
|
+
return cx(StatusBadge_default.badge, {
|
|
316
|
+
[StatusBadge_default.collapsed]: isCollapsed
|
|
317
317
|
});
|
|
318
318
|
}
|
|
319
319
|
function getStatsString({ totalTasks, remainingTasks, totalErrors, totalWarnings }) {
|
|
@@ -415,7 +415,7 @@ var root = "FSsdmcQ-TaskResultItemmodule--root";
|
|
|
415
415
|
var statusBar = "FSsdmcQ-TaskResultItemmodule--statusBar";
|
|
416
416
|
var text = "FSsdmcQ-TaskResultItemmodule--text";
|
|
417
417
|
var titleArea = "FSsdmcQ-TaskResultItemmodule--titleArea";
|
|
418
|
-
var
|
|
418
|
+
var TaskResultItem_default = { actionArea, content, file, root, statusBar, text, titleArea };
|
|
419
419
|
|
|
420
420
|
// packages/overlay/src/components/StatusDialog/TaskResultItem.tsx
|
|
421
421
|
function TaskResultItem({ item, projectPath, index }) {
|
|
@@ -432,7 +432,7 @@ function TaskResultItem({ item, projectPath, index }) {
|
|
|
432
432
|
}
|
|
433
433
|
};
|
|
434
434
|
const location = [item.location?.file || "(path unavailable)", item.location?.line, item.location?.column].filter(Boolean).join(":");
|
|
435
|
-
return /* @__PURE__ */ React3.createElement("div", { className:
|
|
435
|
+
return /* @__PURE__ */ React3.createElement("div", { className: TaskResultItem_default.root }, /* @__PURE__ */ React3.createElement("div", { className: TaskResultItem_default.statusBar }), /* @__PURE__ */ React3.createElement("div", { className: TaskResultItem_default.content }, /* @__PURE__ */ React3.createElement("div", { className: TaskResultItem_default.titleArea }, /* @__PURE__ */ React3.createElement("button", { onClick: openSource, className: TaskResultItem_default.file }, index, ". ", location)), /* @__PURE__ */ React3.createElement("div", { className: TaskResultItem_default.text }, "[", item.source, "] ", item.text), /* @__PURE__ */ React3.createElement("pre", { className: TaskResultItem_default.text }, JSON.stringify(item, null, 2))));
|
|
436
436
|
}
|
|
437
437
|
|
|
438
438
|
// packages/overlay/src/components/StatusDialog/TaskStatus.module.css
|
|
@@ -591,7 +591,7 @@ var success2 = "WGSBzu-TaskStatusmodule--success";
|
|
|
591
591
|
var title = "WGSBzu-TaskStatusmodule--title";
|
|
592
592
|
var value2 = "WGSBzu-TaskStatusmodule--value";
|
|
593
593
|
var warning2 = "WGSBzu-TaskStatusmodule--warning";
|
|
594
|
-
var
|
|
594
|
+
var TaskStatus_default = { collapsed: collapsed2, commands, content: content2, error: error2, expandButton, expandIcon, farArea, header, linkButton, name, resultItems, root: root2, subTitle, success: success2, title, value: value2, warning: warning2 };
|
|
595
595
|
|
|
596
596
|
// packages/overlay/src/components/StatusDialog/TaskStatus.tsx
|
|
597
597
|
import { default as cx2 } from "classnames";
|
|
@@ -687,12 +687,12 @@ s4.appendChild(document.createTextNode(compiledModule4));
|
|
|
687
687
|
document.head.appendChild(s4);
|
|
688
688
|
var primaryButton = "RpmxvThK-Buttonmodule--primaryButton";
|
|
689
689
|
var standardButton = "RpmxvThK-Buttonmodule--standardButton";
|
|
690
|
-
var
|
|
690
|
+
var Button_default = { primaryButton, standardButton };
|
|
691
691
|
|
|
692
692
|
// packages/overlay/src/components/Button/Button.tsx
|
|
693
693
|
function Button(props) {
|
|
694
694
|
const { primary, ...other } = props;
|
|
695
|
-
const className = primary ?
|
|
695
|
+
const className = primary ? Button_default.primaryButton : Button_default.standardButton;
|
|
696
696
|
return /* @__PURE__ */ React4.createElement("button", { ...other, className, type: "button" });
|
|
697
697
|
}
|
|
698
698
|
|
|
@@ -735,29 +735,29 @@ function TaskStatus({ task }) {
|
|
|
735
735
|
}
|
|
736
736
|
void cloudpack.restartTask.mutate({ id: task.id, inputPath });
|
|
737
737
|
};
|
|
738
|
-
return /* @__PURE__ */ React5.createElement("div", { className:
|
|
738
|
+
return /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.root }, /* @__PURE__ */ React5.createElement("div", { className: getHeaderClassName(task) }, /* @__PURE__ */ React5.createElement(
|
|
739
739
|
"button",
|
|
740
740
|
{
|
|
741
|
-
className:
|
|
741
|
+
className: TaskStatus_default.expandButton,
|
|
742
742
|
onClick: () => setIsOpen(!showContent),
|
|
743
743
|
"aria-label": showContent ? `Minimize ${name2}` : `Expand ${name2}`
|
|
744
744
|
},
|
|
745
745
|
/* @__PURE__ */ React5.createElement(
|
|
746
746
|
"img",
|
|
747
747
|
{
|
|
748
|
-
className: cx2(
|
|
748
|
+
className: cx2(TaskStatus_default.expandIcon, !showContent && TaskStatus_default.collapsed),
|
|
749
749
|
src: chevrondown_20_inline_default,
|
|
750
750
|
alt: "Chevron down icon"
|
|
751
751
|
}
|
|
752
752
|
)
|
|
753
|
-
), errors?.length === 0 && warnings?.length === 0 && /* @__PURE__ */ React5.createElement("img", { className:
|
|
753
|
+
), errors?.length === 0 && warnings?.length === 0 && /* @__PURE__ */ React5.createElement("img", { className: TaskStatus_default.errorIcon, src: success_24_inline_default, alt: "Success icon" }), errors?.length > 0 && /* @__PURE__ */ React5.createElement("img", { className: TaskStatus_default.errorIcon, src: error_24_inline_default, alt: "Error icon" }), /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.title }, name2), /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.farArea }, getCompletion(task))), showContent && (inputPath ? /* @__PURE__ */ React5.createElement(React5.Fragment, null, /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.commands }, /* @__PURE__ */ React5.createElement(Button, { onClick: restartTask }, "Restart task")), /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.content }, /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.title }, "Details"), /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.nameValueArea }, /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.name }, "Input path"), /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.value }, /* @__PURE__ */ React5.createElement("button", { className: TaskStatus_default.linkButton, onClick: () => open(inputPath) }, task.inputPath), /* @__PURE__ */ React5.createElement("button", { className: TaskStatus_default.linkButton, onClick: openPackage }, "(Package.json)"))), outputPath && /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.nameValueArea }, /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.name }, "Output path"), /* @__PURE__ */ React5.createElement("button", { className: TaskStatus_default.linkButton, onClick: () => open(outputPath) }, outputPath)), errors?.length > 0 && /* @__PURE__ */ React5.createElement(React5.Fragment, null, /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.title }, "Errors"), /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.resultItems }, errors.map((error3, index) => /* @__PURE__ */ React5.createElement(TaskResultItem, { key: index, item: error3, projectPath: inputPath, index: index + 1 })))), warnings?.length > 0 && /* @__PURE__ */ React5.createElement(React5.Fragment, null, /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.title }, "Warnings"), /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.resultItems }, warnings.map((warning3, index) => /* @__PURE__ */ React5.createElement(TaskResultItem, { key: index, item: warning3, projectPath: inputPath, index: index + 1 })))))) : /* @__PURE__ */ React5.createElement("div", { className: TaskStatus_default.content }, "No input path found for task. This is a Cloudpack bug. Please report it.")));
|
|
754
754
|
}
|
|
755
755
|
function getHeaderClassName(task) {
|
|
756
756
|
const { errors = [], warnings = [] } = task;
|
|
757
|
-
return cx2(
|
|
758
|
-
[
|
|
759
|
-
[
|
|
760
|
-
[
|
|
757
|
+
return cx2(TaskStatus_default.header, {
|
|
758
|
+
[TaskStatus_default.success]: errors?.length === 0 && warnings?.length === 0,
|
|
759
|
+
[TaskStatus_default.warning]: errors?.length === 0 && warnings?.length > 0,
|
|
760
|
+
[TaskStatus_default.error]: errors?.length > 0
|
|
761
761
|
});
|
|
762
762
|
}
|
|
763
763
|
|
|
@@ -797,7 +797,7 @@ s5.setAttribute("data-sourceFile", "packages/overlay/src/components/StatusDialog
|
|
|
797
797
|
s5.appendChild(document.createTextNode(compiledModule5));
|
|
798
798
|
document.head.appendChild(s5);
|
|
799
799
|
var root3 = "ZnVPBoZ-TaskListmodule--root";
|
|
800
|
-
var
|
|
800
|
+
var TaskList_default = { root: root3 };
|
|
801
801
|
|
|
802
802
|
// packages/overlay/src/components/StatusDialog/TaskList.tsx
|
|
803
803
|
function TaskList({ searchFilter, issuesOnly }) {
|
|
@@ -811,7 +811,7 @@ function TaskList({ searchFilter, issuesOnly }) {
|
|
|
811
811
|
if (issuesOnly) {
|
|
812
812
|
filteredTasks = filteredTasks.filter(({ errors, warnings }) => errors?.length || warnings?.length);
|
|
813
813
|
}
|
|
814
|
-
return /* @__PURE__ */ React6.createElement("div", { className:
|
|
814
|
+
return /* @__PURE__ */ React6.createElement("div", { className: TaskList_default.root }, filteredTasks.map((task) => /* @__PURE__ */ React6.createElement(TaskStatus, { key: task.name, task })));
|
|
815
815
|
}
|
|
816
816
|
function sortTasks(a, b) {
|
|
817
817
|
const aStatus = a.status === "pending" ? 1 : 0;
|
|
@@ -936,7 +936,7 @@ var dialog = "XZLLsVjN-Dialogmodule--dialog";
|
|
|
936
936
|
var overlay = "XZLLsVjN-Dialogmodule--overlay";
|
|
937
937
|
var title2 = "XZLLsVjN-Dialogmodule--title";
|
|
938
938
|
var titleArea2 = "XZLLsVjN-Dialogmodule--titleArea";
|
|
939
|
-
var
|
|
939
|
+
var Dialog_default = { closeButton, commands: commands2, dialog, overlay, title: title2, titleArea: titleArea2 };
|
|
940
940
|
|
|
941
941
|
// packages/overlay/src/images/dismiss-16-filled.inline.svg
|
|
942
942
|
var dismiss_16_filled_inline_default = 'data:image/svg+xml,<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<path d="M2.39705 2.55379L2.46967 2.46967C2.73594 2.2034 3.1526 2.1792 3.44621 2.39705L3.53033 2.46967L8 6.939L12.4697 2.46967C12.7626 2.17678 13.2374 2.17678 13.5303 2.46967C13.8232 2.76256 13.8232 3.23744 13.5303 3.53033L9.061 8L13.5303 12.4697C13.7966 12.7359 13.8208 13.1526 13.6029 13.4462L13.5303 13.5303C13.2641 13.7966 12.8474 13.8208 12.5538 13.6029L12.4697 13.5303L8 9.061L3.53033 13.5303C3.23744 13.8232 2.76256 13.8232 2.46967 13.5303C2.17678 13.2374 2.17678 12.7626 2.46967 12.4697L6.939 8L2.46967 3.53033C2.2034 3.26406 2.1792 2.8474 2.39705 2.55379L2.46967 2.46967L2.39705 2.55379Z" fill="%23212121"/>%0A</svg>%0A';
|
|
@@ -952,15 +952,15 @@ function Dialog({ title: title3, id, style, draggable, onClose, commands: comman
|
|
|
952
952
|
containerElementRef: draggableRef,
|
|
953
953
|
dragElementRef: draggableTargetRef
|
|
954
954
|
});
|
|
955
|
-
return /* @__PURE__ */ React7.createElement("div", { id, className:
|
|
955
|
+
return /* @__PURE__ */ React7.createElement("div", { id, className: Dialog_default.overlay }, /* @__PURE__ */ React7.createElement("div", { ref: draggableRef, className: Dialog_default.dialog, style: { borderTopColor: colorAccent } }, /* @__PURE__ */ React7.createElement("div", { className: Dialog_default.titleArea }, /* @__PURE__ */ React7.createElement(
|
|
956
956
|
"div",
|
|
957
957
|
{
|
|
958
958
|
ref: draggableTargetRef,
|
|
959
|
-
className:
|
|
959
|
+
className: Dialog_default.title,
|
|
960
960
|
style: { color: colorAccent, cursor: cursorDraggable }
|
|
961
961
|
},
|
|
962
962
|
title3
|
|
963
|
-
), onClose && /* @__PURE__ */ React7.createElement("button", { className:
|
|
963
|
+
), onClose && /* @__PURE__ */ React7.createElement("button", { className: Dialog_default.closeButton, onClick: onClose, "aria-label": "Minimize overlay" }, /* @__PURE__ */ React7.createElement("img", { src: dismiss_16_filled_inline_default, alt: "" }))), commands3 && /* @__PURE__ */ React7.createElement("div", { className: Dialog_default.commands }, ...commands3), children));
|
|
964
964
|
}
|
|
965
965
|
|
|
966
966
|
// packages/overlay/src/components/StatusDialog/Searchbox.tsx
|
|
@@ -992,11 +992,11 @@ s7.setAttribute("data-sourceFile", "packages/overlay/src/components/StatusDialog
|
|
|
992
992
|
s7.appendChild(document.createTextNode(compiledModule7));
|
|
993
993
|
document.head.appendChild(s7);
|
|
994
994
|
var searchbox = "aJeqJtva-Searchboxmodule--searchbox";
|
|
995
|
-
var
|
|
995
|
+
var Searchbox_default = { searchbox };
|
|
996
996
|
|
|
997
997
|
// packages/overlay/src/components/StatusDialog/Searchbox.tsx
|
|
998
998
|
function Searchbox({ value: value3, onChange }) {
|
|
999
|
-
return /* @__PURE__ */ React8.createElement(React8.Fragment, null, typeof value3 === "string" && /* @__PURE__ */ React8.createElement("input", { type: "text", placeholder: "Search", className:
|
|
999
|
+
return /* @__PURE__ */ React8.createElement(React8.Fragment, null, typeof value3 === "string" && /* @__PURE__ */ React8.createElement("input", { type: "text", placeholder: "Search", className: Searchbox_default.searchbox, onChange, value: value3 }));
|
|
1000
1000
|
}
|
|
1001
1001
|
|
|
1002
1002
|
// packages/overlay/src/components/StatusDialog/StatusDialog.tsx
|
|
@@ -1045,22 +1045,22 @@ function PathError(props) {
|
|
|
1045
1045
|
const addOverride = () => {
|
|
1046
1046
|
void cloudpack.addPackageOverride.mutate({ packageName, importPath, issuerUrl });
|
|
1047
1047
|
};
|
|
1048
|
-
return /* @__PURE__ */ React10.createElement("div", { className:
|
|
1048
|
+
return /* @__PURE__ */ React10.createElement("div", { className: TaskStatus_default.root }, /* @__PURE__ */ React10.createElement("div", { className: cx3(TaskStatus_default.header, TaskStatus_default.error) }, /* @__PURE__ */ React10.createElement(
|
|
1049
1049
|
"button",
|
|
1050
1050
|
{
|
|
1051
|
-
className:
|
|
1051
|
+
className: TaskStatus_default.expandButton,
|
|
1052
1052
|
onClick: () => setshowContent(!showContent),
|
|
1053
1053
|
"aria-label": showContent ? `Minimize ${packageName}/${importPath}` : `Expand ${packageName}/${importPath}`
|
|
1054
1054
|
},
|
|
1055
1055
|
/* @__PURE__ */ React10.createElement(
|
|
1056
1056
|
"img",
|
|
1057
1057
|
{
|
|
1058
|
-
className: cx3(
|
|
1058
|
+
className: cx3(TaskStatus_default.expandIcon, !showContent && TaskStatus_default.collapsed),
|
|
1059
1059
|
src: chevrondown_20_inline_default,
|
|
1060
1060
|
alt: "Chevron down icon"
|
|
1061
1061
|
}
|
|
1062
1062
|
)
|
|
1063
|
-
), /* @__PURE__ */ React10.createElement("img", { className:
|
|
1063
|
+
), /* @__PURE__ */ React10.createElement("img", { className: TaskStatus_default.errorIcon, src: error_24_inline_default, alt: "Error icon" }), /* @__PURE__ */ React10.createElement("div", { className: TaskStatus_default.title }, `${packageName}/${importPath}`)), showContent && /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement("div", { className: TaskStatus_default.commands }, fixable && /* @__PURE__ */ React10.createElement(Button, { onClick: addOverride }, "Add override"), /* @__PURE__ */ React10.createElement(Button, { onClick: editConfig }, "Edit config file")), /* @__PURE__ */ React10.createElement("div", { className: TaskStatus_default.content }, /* @__PURE__ */ React10.createElement("div", { className: TaskStatus_default.title }, "Details"), /* @__PURE__ */ React10.createElement("div", { className: TaskStatus_default.nameValueArea }, /* @__PURE__ */ React10.createElement("div", { className: TaskStatus_default.name }, "Problem"), /* @__PURE__ */ React10.createElement("div", { className: TaskStatus_default.value }, importPath === "." ? `An unrecognized package "${packageName}" was imported.` : `Path "${importPath}" was imported from package "${packageName}" but was not recognized as an exported path.`)), /* @__PURE__ */ React10.createElement("div", { className: TaskStatus_default.nameValueArea }, /* @__PURE__ */ React10.createElement("div", { className: TaskStatus_default.name }, "Solution"), /* @__PURE__ */ React10.createElement("div", { className: TaskStatus_default.value }, fixable ? `Remove the path from the import in your source. (Import from "${packageName}" rather than "${packageName}/${importPath}")` : importPath === "." ? `Make sure the package name is valid.` : `Import not found on package. Make sure the import path is valid.`)))));
|
|
1064
1064
|
}
|
|
1065
1065
|
|
|
1066
1066
|
// packages/overlay/src/components/ErrorDialog/ErrorDialog.tsx
|
|
@@ -1079,13 +1079,14 @@ function ErrorDialog({ unsupported }) {
|
|
|
1079
1079
|
/* @__PURE__ */ React11.createElement(Button, { primary: true, onClick: reload, key: "1" }, "Restart all tasks")
|
|
1080
1080
|
]
|
|
1081
1081
|
},
|
|
1082
|
-
/* @__PURE__ */ React11.createElement("div", { className:
|
|
1082
|
+
/* @__PURE__ */ React11.createElement("div", { className: TaskList_default.root }, unsupported.map((data, index) => /* @__PURE__ */ React11.createElement(PathError, { ...data, key: index })))
|
|
1083
1083
|
);
|
|
1084
1084
|
}
|
|
1085
1085
|
|
|
1086
1086
|
// packages/overlay/src/components/ErrorDialog/useErrorEvents.ts
|
|
1087
1087
|
import { useEffect as useEffect4, useState as useState5 } from "react";
|
|
1088
1088
|
import { parseImportString } from "@ms-cloudpack/path-string-parsing";
|
|
1089
|
+
import { errorEntrySource } from "@ms-cloudpack/api-server/browser";
|
|
1089
1090
|
var reasonIsRecord = (event) => {
|
|
1090
1091
|
return typeof event.reason === "object" && !Array.isArray(event.reason) && event.reason !== null;
|
|
1091
1092
|
};
|
|
@@ -1113,6 +1114,14 @@ var useErrorEvents = () => {
|
|
|
1113
1114
|
});
|
|
1114
1115
|
}
|
|
1115
1116
|
};
|
|
1117
|
+
const subscription = cloudpack.onDataChanged.subscribe(errorEntrySource, {
|
|
1118
|
+
onData: (data) => {
|
|
1119
|
+
if (data) {
|
|
1120
|
+
console.error(data);
|
|
1121
|
+
handleUnsupportedError(data);
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
});
|
|
1116
1125
|
const pageErrors = window.__pageErrors;
|
|
1117
1126
|
pageErrors.unregister();
|
|
1118
1127
|
window.addEventListener("error", (event) => {
|
|
@@ -1127,6 +1136,9 @@ var useErrorEvents = () => {
|
|
|
1127
1136
|
for (const error3 of pageErrors.uncaughtRejections) {
|
|
1128
1137
|
hasMessage(error3) && handleUnsupportedError(error3.reason.message);
|
|
1129
1138
|
}
|
|
1139
|
+
return () => {
|
|
1140
|
+
subscription.unsubscribe();
|
|
1141
|
+
};
|
|
1130
1142
|
}, [cloudpack]);
|
|
1131
1143
|
return errorEvents;
|
|
1132
1144
|
};
|
|
@@ -1194,11 +1206,11 @@ s8.setAttribute("data-sourceFile", "packages/overlay/src/components/ThemeProvide
|
|
|
1194
1206
|
s8.appendChild(document.createTextNode(compiledModule8));
|
|
1195
1207
|
document.head.appendChild(s8);
|
|
1196
1208
|
var root4 = "ASWLkl-ThemeProvidermodule--root";
|
|
1197
|
-
var
|
|
1209
|
+
var ThemeProvider_default = { root: root4 };
|
|
1198
1210
|
|
|
1199
1211
|
// packages/overlay/src/components/ThemeProvider/ThemeProvider.tsx
|
|
1200
1212
|
function ThemeProvider({ children }) {
|
|
1201
|
-
return /* @__PURE__ */ React14.createElement("div", { className:
|
|
1213
|
+
return /* @__PURE__ */ React14.createElement("div", { className: ThemeProvider_default.root }, children);
|
|
1202
1214
|
}
|
|
1203
1215
|
|
|
1204
1216
|
// packages/overlay/src/index.tsx
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/index.tsx", "../../../src/components/CloudpackProvider/CloudpackProvider.tsx", "../../../src/components/StatusOverlay/StatusOverlay.tsx", "../../../src/components/StatusBadge/StatusBadge.tsx", "../../../src/hooks/useDraggable.ts", "../../../src/components/StatusBadge/StatusBadge.module.css", "../../../src/components/CloudpackProvider/useStatus.ts", "../../../src/components/StatusDialog/StatusDialog.tsx", "../../../src/components/StatusDialog/TaskList.tsx", "../../../src/components/StatusDialog/TaskStatus.tsx", "../../../src/components/StatusDialog/TaskResultItem.tsx", "../../../src/components/StatusDialog/TaskResultItem.module.css", "../../../src/components/StatusDialog/TaskStatus.module.css", "../../../src/components/Button/Button.tsx", "../../../src/components/Button/Button.module.css", "../../../src/components/CloudpackProvider/useStatusDetails.ts", "../../../src/components/StatusDialog/TaskList.module.css", "../../../src/components/Dialog/Dialog.tsx", "../../../src/components/Dialog/Dialog.module.css", "../../../src/components/StatusDialog/Searchbox.tsx", "../../../src/components/StatusDialog/Searchbox.module.css", "../../../src/components/ErrorDialog/ErrorDialog.tsx", "../../../src/components/ErrorDialog/PathError.tsx", "../../../src/components/ErrorDialog/useErrorEvents.ts", "../../../src/hooks/usePageLoadTimeReporter.ts", "../../../src/components/ThemeProvider/ThemeProvider.tsx", "../../../src/components/ThemeProvider/ThemeProvider.module.css", "../../../src/components/CloudpackProvider/getCookies.ts"],
|
|
4
|
-
"sourcesContent": ["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { CloudpackProvider } from './components/CloudpackProvider/CloudpackProvider.js';\nimport { StatusOverlay } from './components/StatusOverlay/StatusOverlay.js';\nimport { ThemeProvider } from './components/ThemeProvider/ThemeProvider.js';\nimport { cookieNames, elementIds } from './constants.js';\nimport { createCloudpackClient, reloadCountSource } from '@ms-cloudpack/api-server/browser';\nimport { getCookies } from './components/CloudpackProvider/getCookies.js';\n\nasync function start() {\n const cookies = getCookies();\n const sessionId = cookies[cookieNames.sessionId];\n const apiUrl = cookies[cookieNames.apiUrl];\n const currentSequence = cookies[cookieNames.sessionSequence];\n\n const client = await createCloudpackClient({ url: apiUrl });\n\n if (sessionId === (await client.getSessionId.query())) {\n console.log('[Cloudpack] socket opened');\n }\n\n client.onDataChanged.subscribe(reloadCountSource, {\n onData: (data) => {\n if (Number(data) > Number(currentSequence)) {\n window.location.reload();\n }\n },\n });\n\n const rootDiv = document.createElement('div');\n rootDiv.id = elementIds.root;\n\n ReactDOM.render(\n <ThemeProvider>\n <CloudpackProvider client={client}>\n <StatusOverlay />\n </CloudpackProvider>\n </ThemeProvider>,\n rootDiv,\n );\n\n document.body.appendChild(rootDiv);\n}\n\nvoid start();\n", "import React, { createContext, useContext } from 'react';\nimport { type CloudpackClient } from '@ms-cloudpack/api-server/browser';\n\nexport const CloudpackContext = createContext<CloudpackClient>(null as unknown as CloudpackClient);\n\nexport function CloudpackProvider({ client, children }: { client: CloudpackClient; children: React.ReactNode }) {\n return <CloudpackContext.Provider value={client}>{children}</CloudpackContext.Provider>;\n}\n\nexport const useCloudpack = () => useContext(CloudpackContext);\n", "import React, { useCallback, useState, useRef } from 'react';\nimport { StatusBadge } from '../StatusBadge/StatusBadge.js';\nimport { StatusDialog } from '../StatusDialog/StatusDialog.js';\nimport { useStatus, type CloudpackStatus } from '../CloudpackProvider/useStatus.js';\nimport { ErrorDialog } from '../ErrorDialog/ErrorDialog.js';\nimport { useErrorEvents } from '../ErrorDialog/useErrorEvents.js';\nimport { usePageLoadTimeReporter } from '../../hooks/usePageLoadTimeReporter.js';\n\nexport function StatusOverlay() {\n const pageLoadTime = usePageLoadTimeReporter();\n const [isExpanded, setIsExpanded] = useState<boolean>(false);\n const status = useStatus();\n const prevStatus = useRef<CloudpackStatus | undefined>();\n const { unsupported } = useErrorEvents();\n\n // If we haven't set a specific state and we become idle,\n // pop open the details if there are errors.\n React.useEffect(() => {\n if (\n !isExpanded &&\n prevStatus.current?.status !== 'idle' &&\n status.status === 'idle' &&\n (prevStatus.current?.totalErrors || 0) !== (status.totalErrors || 0)\n ) {\n setIsExpanded(true);\n }\n prevStatus.current = status;\n }, [status, isExpanded]);\n\n const toggleMinimized = useCallback(() => {\n console.log(`Toggling minimized state to ${!isExpanded}`);\n setIsExpanded(!isExpanded);\n }, [isExpanded]);\n\n return unsupported.length ? (\n <ErrorDialog unsupported={unsupported} />\n ) : isExpanded ? (\n <StatusDialog onClose={toggleMinimized} />\n ) : (\n <StatusBadge onExpand={toggleMinimized} pageLoadTime={pageLoadTime} />\n );\n}\n", "import React, { useCallback, useRef, useState } from 'react';\nimport { useDraggable } from '../../hooks/useDraggable.js';\nimport styles from './StatusBadge.module.css';\nimport { default as cx } from 'classnames';\nimport { useStatus, type CloudpackStatus } from '../CloudpackProvider/useStatus.js';\nimport { elementIds } from '../../constants.js';\n\nexport interface StatusBadgeProps {\n inline?: boolean;\n onExpand?: () => void;\n onToggle?: () => void;\n pageLoadTime?: number;\n}\n\nexport function StatusBadge({ inline, onExpand, pageLoadTime }: StatusBadgeProps) {\n const badgeStatusKey = 'cloudpack.badgeStatus';\n\n const rootElementRef = useRef<HTMLDivElement>(null);\n const dragElementRef = useRef<HTMLDivElement>(null);\n const status = useStatus();\n const [isCollapsed, setIsCollapsed] = useState<boolean>(!!localStorage.getItem(badgeStatusKey));\n\n const shouldRender = status.status !== 'unknown';\n\n const toggleBadgeVisibility = useCallback(() => {\n const newCollapsedState = !isCollapsed;\n console.log('Status badge collapsed state:', newCollapsedState);\n setIsCollapsed(newCollapsedState);\n localStorage.setItem(badgeStatusKey, newCollapsedState ? 'collapsed' : '');\n }, [isCollapsed]);\n\n useDraggable({\n // If we're not yet able to render, don't enable dragging yet.\n // Otherwise the event handlers won't be attached when the component renders.\n enabled: shouldRender && !inline,\n containerElementRef: rootElementRef,\n dragElementRef,\n });\n\n if (!shouldRender) {\n return null;\n }\n\n const metric = pageLoadTime ? (\n <span className={styles.metric} title=\"Page Load Time\">\n in {pageLoadTime.toFixed(2)} ms\n </span>\n ) : null;\n\n const leftChevron = '\\u00AB';\n const rightChevron = '\\u00BB';\n const badge = (\n <div\n id={elementIds.statusBadgeRoot}\n ref={rootElementRef}\n className={`${getStatusClassName(status, !!inline)} ${getCollapsedClassName(isCollapsed)}`}\n >\n {!inline && (\n <div ref={dragElementRef} className={styles.gripArea}>\n <div className={styles.grip} />\n <div className={styles.grip} />\n </div>\n )}\n <button className={styles.button} onClick={onExpand} aria-label=\"Expand overlay\">\n <div className={styles.value}>{getStatusString(status)}</div>\n </button>\n <div>\n {getStatsString(status)}\n {metric}\n </div>\n <button className={`${styles.button} ${styles.chevron}`} onClick={toggleBadgeVisibility}>\n {isCollapsed ? leftChevron : rightChevron}\n </button>\n </div>\n );\n\n return inline ? (\n badge\n ) : (\n <div className={styles.fixedOverlay}>\n <div className={styles.contentSurface}>{badge}</div>\n </div>\n );\n}\n\nfunction getStatusString(status: CloudpackStatus) {\n if (status.status === 'pending') {\n return 'Running';\n }\n\n if (status.totalTasks === 0) {\n return 'Idle';\n }\n\n return status.totalErrors === 0 ? 'Success' : 'Errors';\n}\n\nfunction getStatusClassName({ status, totalTasks, totalErrors, totalWarnings }: CloudpackStatus, inline: boolean) {\n return cx(styles.badge, {\n [styles.inline]: inline,\n [styles.building]: status === 'pending',\n [styles.success]: status === 'idle' && totalTasks > 0 && totalErrors === 0 && totalWarnings === 0,\n [styles.error]: status === 'idle' && totalErrors > 0,\n [styles.warning]: status === 'idle' && totalErrors === 0 && totalWarnings > 0,\n });\n}\n\nfunction getCollapsedClassName(isCollapsed: boolean) {\n return cx(styles.badge, {\n [styles.collapsed]: isCollapsed,\n });\n}\n\nfunction getStatsString({ totalTasks, remainingTasks, totalErrors, totalWarnings }: CloudpackStatus) {\n if (totalTasks === 0) {\n return '';\n }\n\n return [\n remainingTasks > 0 && `${remainingTasks} of ${totalTasks} tasks pending`,\n remainingTasks === 0 && `${totalTasks} tasks completed`,\n totalErrors === 1 && `${totalErrors} error`,\n totalErrors > 1 && `${totalErrors} errors`,\n totalWarnings === 1 && `${totalWarnings} warning`,\n totalWarnings > 1 && `${totalWarnings} warnings`,\n ]\n .filter(Boolean)\n .join(', ');\n}\n", "import { type RefObject, useEffect, useState } from 'react';\n\n/**\n * Make an element draggable. Note that changing `enabled` or passing different ref objects\n * will trigger reconfiguring the event handlers, but changing `.current` will not.\n * @returns Whether the element is currently being dragged\n */\nexport function useDraggable(options: {\n /** Whether to enable dragging */\n enabled: boolean;\n /** Element that should be draggable */\n containerElementRef: RefObject<HTMLElement>;\n /** The drag handle element */\n dragElementRef: RefObject<HTMLElement>;\n}) {\n const { enabled, containerElementRef, dragElementRef } = options;\n\n const [isDragging, setIsDragging] = useState(false);\n\n useEffect(() => {\n const moveTarget = containerElementRef?.current;\n const dragTarget = dragElementRef?.current;\n\n if (!enabled || !moveTarget || !dragTarget) {\n return;\n }\n\n let originalX = 0;\n let originalY = 0;\n let offset = { x: 0, y: 0 };\n\n const onPointerMove = (event: PointerEvent) => {\n moveTarget.style.transform = `translate(${offset.x + event.clientX - originalX}px, ${\n offset.y + event.clientY - originalY\n }px)`;\n };\n\n const onPointerUp = (event: PointerEvent) => {\n setIsDragging(false);\n offset = {\n x: offset.x + event.clientX - originalX,\n y: offset.y + event.clientY - originalY,\n };\n\n dragTarget.releasePointerCapture(event.pointerId);\n dragTarget.removeEventListener('pointerup', onPointerUp);\n dragTarget.removeEventListener('pointermove', onPointerMove);\n\n event.preventDefault();\n };\n\n const onPointerDown = (event: PointerEvent) => {\n setIsDragging(true);\n originalX = event.clientX;\n originalY = event.clientY;\n dragTarget.setPointerCapture(event.pointerId);\n dragTarget.addEventListener('pointerup', onPointerUp);\n dragTarget.addEventListener('pointermove', onPointerMove);\n event.preventDefault();\n };\n\n dragTarget.addEventListener('pointerdown', onPointerDown);\n\n return () => {\n dragTarget.removeEventListener('pointerdown', onPointerDown);\n dragTarget.removeEventListener('pointermove', onPointerMove);\n dragTarget.removeEventListener('pointerup', onPointerUp);\n };\n }, [enabled, containerElementRef, dragElementRef]);\n\n return {\n isDragging,\n };\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/StatusBadge/StatusBadge.module.css\n\n\nlet compiledModule = `.uHuWYf-StatusBadgemodule--fixedOverlay {\\n position: fixed;\\n pointer-events: none;\\n background: transparent;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n z-index: 99999;\\n overflow: hidden;\\n}\\n\\n.uHuWYf-StatusBadgemodule--gripArea {\\n display: flex;\\n flex-direction: row;\\n gap: 2px;\\n height: 100%;\\n width: 12px;\\n cursor: move;\\n margin-right: -4px;\\n}\\n\\n.uHuWYf-StatusBadgemodule--grip {\\n width: 2px;\\n height: 100%;\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.uHuWYf-StatusBadgemodule--contentSurface {\\n pointer-events: auto;\\n display: contents;\\n}\\n\\n.uHuWYf-StatusBadgemodule--badge {\\n position: absolute;\\n bottom: 4px;\\n right: 4px;\\n font-size: 12px;\\n display: inline-flex;\\n gap: 8px;\\n background: #dddddd;\\n box-shadow: 0 0 12px -6px rgba(0, 0, 0, 0.75);\\n border: 1px solid #999999;\\n border-radius: 4px;\\n height: 28px;\\n flex-shrink: 0;\\n justify-content: center;\\n align-items: center;\\n box-sizing: border-box;\\n padding: 3px;\\n padding-right: 8px;\\n\\n transition: background-color 0.2s ease-in-out;\\n}\\n\\n.uHuWYf-StatusBadgemodule--inline {\\n flex-shrink: 0;\\n position: relative;\\n bottom: auto;\\n right: auto;\\n top: auto;\\n left: auto;\\n box-shadow: none;\\n padding-left: 8px;\\n}\\n\\n.uHuWYf-StatusBadgemodule--building {\\n background: #bbb;\\n color: #000;\\n}\\n\\n.uHuWYf-StatusBadgemodule--success {\\n background: #7ad17a;\\n color: #000;\\n}\\n\\n.uHuWYf-StatusBadgemodule--warning {\\n background: #e4e68b;\\n color: #000;\\n}\\n\\n.uHuWYf-StatusBadgemodule--error {\\n background: #ffb9b9;\\n color: #000;\\n}\\n\\n.uHuWYf-StatusBadgemodule--button {\\n cursor: pointer;\\n background: inherit;\\n border: none;\\n border-radius: 3px;\\n display: flex;\\n align-self: stretch;\\n align-items: center;\\n justify-content: center;\\n box-sizing: border-box;\\n padding: 0;\\n margin: 0;\\n font-weight: inherit;\\n font-size: inherit;\\n font-family: inherit;\\n}\\n\\n.uHuWYf-StatusBadgemodule--button:hover {\\n filter: invert(0.1);\\n}\\n\\n.uHuWYf-StatusBadgemodule--value {\\n font-weight: 600;\\n background: rgba(255, 255, 255, 0.4);\\n box-shadow: 2px 2px 3px -1px rgba(0, 0, 0, 0.15) inset;\\n padding: 2px 8px;\\n border-radius: 3px;\\n}\\n\\n.uHuWYf-StatusBadgemodule--metric {\\n margin-left: 2px;\\n}\\n\\n.uHuWYf-StatusBadgemodule--collapsed {\\n overflow: hidden;\\n padding: 0;\\n}\\n.uHuWYf-StatusBadgemodule--collapsed *:not(.uHuWYf-StatusBadgemodule--chevron) {\\n display: none;\\n}\\n\\n.uHuWYf-StatusBadgemodule--chevron {\\n padding: 0 3px;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/StatusBadge/StatusBadge.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const badge = 'uHuWYf-StatusBadgemodule--badge';\nexport const building = 'uHuWYf-StatusBadgemodule--building';\nexport const button = 'uHuWYf-StatusBadgemodule--button';\nexport const chevron = 'uHuWYf-StatusBadgemodule--chevron';\nexport const collapsed = 'uHuWYf-StatusBadgemodule--collapsed';\nexport const contentSurface = 'uHuWYf-StatusBadgemodule--contentSurface';\nexport const error = 'uHuWYf-StatusBadgemodule--error';\nexport const fixedOverlay = 'uHuWYf-StatusBadgemodule--fixedOverlay';\nexport const grip = 'uHuWYf-StatusBadgemodule--grip';\nexport const gripArea = 'uHuWYf-StatusBadgemodule--gripArea';\nexport const inline = 'uHuWYf-StatusBadgemodule--inline';\nexport const metric = 'uHuWYf-StatusBadgemodule--metric';\nexport const success = 'uHuWYf-StatusBadgemodule--success';\nexport const value = 'uHuWYf-StatusBadgemodule--value';\nexport const warning = 'uHuWYf-StatusBadgemodule--warning';\nexport default {badge, building, button, chevron, collapsed, contentSurface, error, fixedOverlay, grip, gripArea, inline, metric, success, value, warning}\n", "import { useEffect, useState } from 'react';\nimport { useCloudpack } from './CloudpackProvider.js';\nimport { taskStatsSource, type TaskStats } from '@ms-cloudpack/api-server/browser';\n\nexport type CloudpackStatus = TaskStats;\n\nconst defaultStatus: CloudpackStatus = {\n status: 'unknown',\n remainingTasks: 0,\n totalTasks: 0,\n totalErrors: 0,\n totalWarnings: 0,\n};\n\nexport const useStatus = () => {\n const cloudpack = useCloudpack();\n const [status, setStatus] = useState<CloudpackStatus>(defaultStatus);\n\n useEffect(() => {\n const subscription = cloudpack?.onDataChanged.subscribe(taskStatsSource, {\n onData: (data) => {\n setStatus(data as CloudpackStatus);\n },\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [cloudpack]);\n\n return status;\n};\n", "import React, { useCallback } from 'react';\nimport { TaskList } from './TaskList.js';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { Button } from '../Button/Button.js';\nimport { Dialog } from '../Dialog/Dialog.js';\nimport { Searchbox } from './Searchbox.js';\nimport { elementIds } from '../../constants.js';\n\nexport interface StatusDialogProps {\n onClose: () => void;\n}\n\nexport function StatusDialog({ onClose }: StatusDialogProps) {\n const cloudpack = useCloudpack();\n const [searchFilter, setSearchFilter] = React.useState('');\n const [issuesOnly, setIssuesOnly] = React.useState(false);\n\n const handleSearchChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n setSearchFilter(event.target.value);\n }, []);\n\n const restartAllTasks = () => {\n void cloudpack.restartAllTasks.mutate();\n };\n\n const toggleIssuesOnly = () => setIssuesOnly((value) => !value);\n\n return (\n <Dialog\n title=\"Task results\"\n id={elementIds.statusDialogRoot}\n draggable\n onClose={onClose}\n commands={[\n <Button primary onClick={restartAllTasks} key=\"restart\">\n Restart all tasks\n </Button>,\n <Button onClick={toggleIssuesOnly} key=\"issues\">\n {issuesOnly ? 'Show all tasks' : 'Show tasks with issues'}\n </Button>,\n ]}\n >\n <Searchbox value={searchFilter} onChange={handleSearchChange} />\n <TaskList searchFilter={searchFilter} issuesOnly={issuesOnly} />\n </Dialog>\n );\n}\n", "import React from 'react';\nimport { TaskStatus } from './TaskStatus.js';\nimport { useStatusDetails } from '../CloudpackProvider/useStatusDetails.js';\nimport styles from './TaskList.module.css';\nimport type { TaskDescription } from '@ms-cloudpack/api-server/browser';\n\nexport interface TaskListProps {\n searchFilter?: string;\n issuesOnly?: boolean;\n}\n\nexport function TaskList({ searchFilter, issuesOnly }: TaskListProps) {\n const details = useStatusDetails();\n const tasks = (details.tasks || []).sort(sortTasks);\n\n let filteredTasks = tasks;\n if (searchFilter) {\n searchFilter = searchFilter.toLowerCase();\n filteredTasks = filteredTasks.filter(({ name }) => searchFilter && name?.toLowerCase().includes(searchFilter));\n }\n if (issuesOnly) {\n filteredTasks = filteredTasks.filter(({ errors, warnings }) => errors?.length || warnings?.length);\n }\n\n return (\n <div className={styles.root}>\n {filteredTasks.map((task) => (\n <TaskStatus key={task.name} task={task} />\n ))}\n </div>\n );\n}\n\n/**\n * Really the server should be sorting. Get stuff out of the browser.\n */\nfunction sortTasks(a: TaskDescription, b: TaskDescription) {\n const aStatus = a.status === 'pending' ? 1 : 0;\n const bStatus = b.status === 'pending' ? 1 : 0;\n\n if (aStatus !== bStatus) {\n return aStatus > bStatus ? -1 : 1;\n }\n\n const aErrors = a.errors?.length || 0;\n const bErrors = b.errors?.length || 0;\n\n if (aErrors !== bErrors) {\n return aErrors > bErrors ? -1 : 1;\n }\n\n if (a.name === undefined && b.name === undefined) {\n return a.id < b.id ? -1 : 1;\n } else if (a.name === undefined) {\n return 1;\n } else if (b.name === undefined) {\n return -1;\n }\n\n return a.name < b.name ? -1 : 1;\n}\n", "import React from 'react';\nimport type { TaskDescription } from '@ms-cloudpack/api-server/browser';\nimport { TaskResultItem } from './TaskResultItem.js';\nimport styles from './TaskStatus.module.css';\nimport { default as cx } from 'classnames';\nimport ErrorIcon from '../../images/error-24.inline.svg';\nimport SuccessIcon from '../../images/success-24.inline.svg';\nimport ChevronDownIcon from '../../images/chevrondown-20.inline.svg';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { Button } from '../Button/Button.js';\n\nexport interface TaskStatusProps {\n task: TaskDescription;\n}\n\nfunction getCompletion(task: TaskDescription) {\n if (task.status === 'pending') {\n return 'Running';\n }\n return [\n `Completed in ${task.durationMilliseconds}ms`,\n task.errors?.length && `${task.errors.length} error${task.errors.length > 1 ? 's' : ''}`,\n task.warnings?.length && `${task.warnings.length} warning${task.warnings.length > 1 ? 's' : ''}`,\n ]\n .filter(Boolean)\n .join(', ');\n}\n\nexport function TaskStatus({ task }: TaskStatusProps) {\n const [isOpen, setIsOpen] = React.useState<boolean | undefined>(undefined);\n const { name, warnings = [], errors = [] } = task;\n const cloudpack = useCloudpack();\n const showContent = isOpen === true || (isOpen === undefined && errors?.length > 0);\n\n const { inputPath, outputPath } = task;\n\n const open = (rootPath: string) => {\n void cloudpack.openFilePath.mutate({\n rootPath,\n });\n };\n\n const openPackage = () => {\n if (!inputPath) {\n console.error('No input path for task', task);\n return;\n }\n void cloudpack.openCodeEditor.mutate({\n rootPath: inputPath,\n relativePath: 'package.json',\n });\n };\n\n const restartTask = () => {\n if (!inputPath) {\n console.error('No input path for task', task);\n return;\n }\n void cloudpack.restartTask.mutate({ id: task.id, inputPath });\n };\n\n return (\n <div className={styles.root}>\n <div className={getHeaderClassName(task)}>\n <button\n className={styles.expandButton}\n onClick={() => setIsOpen(!showContent)}\n aria-label={showContent ? `Minimize ${name}` : `Expand ${name}`}\n >\n <img\n className={cx(styles.expandIcon, !showContent && styles.collapsed)}\n src={ChevronDownIcon}\n alt=\"Chevron down icon\"\n />\n </button>\n {errors?.length === 0 && warnings?.length === 0 && (\n <img className={styles.errorIcon} src={SuccessIcon} alt=\"Success icon\" />\n )}\n {errors?.length > 0 && <img className={styles.errorIcon} src={ErrorIcon} alt=\"Error icon\" />}\n <div className={styles.title}>{name}</div>\n <div className={styles.farArea}>{getCompletion(task)}</div>\n </div>\n {showContent &&\n (inputPath ? (\n <>\n <div className={styles.commands}>\n <Button onClick={restartTask}>Restart task</Button>\n </div>\n <div className={styles.content}>\n <div className={styles.title}>Details</div>\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Input path</div>\n <div className={styles.value}>\n <button className={styles.linkButton} onClick={() => open(inputPath)}>\n {task.inputPath}\n </button>\n\n <button className={styles.linkButton} onClick={openPackage}>\n (Package.json)\n </button>\n </div>\n </div>\n {outputPath && (\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Output path</div>\n <button className={styles.linkButton} onClick={() => open(outputPath)}>\n {outputPath}\n </button>\n </div>\n )}\n {errors?.length > 0 && (\n <>\n <div className={styles.title}>Errors</div>\n <div className={styles.resultItems}>\n {errors.map((error, index) => (\n <TaskResultItem key={index} item={error} projectPath={inputPath} index={index + 1} />\n ))}\n </div>\n </>\n )}\n {warnings?.length > 0 && (\n <>\n <div className={styles.title}>Warnings</div>\n <div className={styles.resultItems}>\n {warnings.map((warning, index) => (\n <TaskResultItem key={index} item={warning} projectPath={inputPath} index={index + 1} />\n ))}\n </div>\n </>\n )}\n </div>\n </>\n ) : (\n <div className={styles.content}>No input path found for task. This is a Cloudpack bug. Please report it.</div>\n ))}\n </div>\n );\n}\n\nfunction getHeaderClassName(task: TaskDescription) {\n const { errors = [], warnings = [] } = task;\n return cx(styles.header, {\n [styles.success]: errors?.length === 0 && warnings?.length === 0,\n [styles.warning]: errors?.length === 0 && warnings?.length > 0,\n [styles.error]: errors?.length > 0,\n });\n}\n", "import type { BundleMessage } from '@ms-cloudpack/common-types';\nimport React from 'react';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport styles from './TaskResultItem.module.css';\n\nexport interface TaskResultItemProps {\n item: BundleMessage;\n projectPath: string;\n index: number;\n}\n\nexport function TaskResultItem({ item, projectPath, index }: TaskResultItemProps) {\n const cloudpack = useCloudpack();\n\n const openSource = (ev: React.MouseEvent) => {\n if (item.location) {\n void cloudpack.openCodeEditor.mutate({\n rootPath: projectPath,\n relativePath: item.location?.file,\n line: item.location?.line,\n column: item.location?.column,\n });\n ev.preventDefault();\n }\n };\n\n const location = [item.location?.file || '(path unavailable)', item.location?.line, item.location?.column]\n .filter(Boolean)\n .join(':');\n\n return (\n <div className={styles.root}>\n <div className={styles.statusBar}></div>\n <div className={styles.content}>\n <div className={styles.titleArea}>\n <button onClick={openSource} className={styles.file}>\n {index}. {location}\n </button>\n </div>\n <div className={styles.text}>\n [{item.source}] {item.text}\n </div>\n <pre className={styles.text}>{JSON.stringify(item, null, 2)}</pre>\n </div>\n </div>\n );\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/StatusDialog/TaskResultItem.module.css\n\n\nlet compiledModule = `.FSsdmcQ-TaskResultItemmodule--root {\\n display: flex;\\n background: #f5f5f5;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--statusBar {\\n flex-shrink: 0;\\n border-radius: 4px;\\n width: 4px;\\n background: #aa0000;\\n box-shadow: 2px 0 4px 0 rgb(220 0 0 / 20%);\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--content {\\n padding: 8px;\\n display: flex;\\n flex-grow: 1;\\n overflow: hidden;\\n flex-direction: column;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--titleArea {\\n display: flex;\\n align-items: center;\\n flex-direction: row;\\n gap: 4px;\\n padding: 4px 0;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--file {\\n display: inline-flex;\\n margin: 0;\\n padding: 0;\\n border: none;\\n background: inherit;\\n font-family: inherit;\\n flex-grow: 1;\\n font-weight: 500;\\n font-size: 14px;\\n flex-shrink: 0;\\n text-decoration: none;\\n color: #000;\\n cursor: pointer;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--file:hover {\\n text-decoration: underline;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--actionArea {\\n display: flex;\\n flex-direction: row;\\n gap: 8px;\\n flex-shrink: 0;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--text {\\n word-wrap: break-word;\\n color: #333;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/StatusDialog/TaskResultItem.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const actionArea = 'FSsdmcQ-TaskResultItemmodule--actionArea';\nexport const content = 'FSsdmcQ-TaskResultItemmodule--content';\nexport const file = 'FSsdmcQ-TaskResultItemmodule--file';\nexport const root = 'FSsdmcQ-TaskResultItemmodule--root';\nexport const statusBar = 'FSsdmcQ-TaskResultItemmodule--statusBar';\nexport const text = 'FSsdmcQ-TaskResultItemmodule--text';\nexport const titleArea = 'FSsdmcQ-TaskResultItemmodule--titleArea';\nexport default {actionArea, content, file, root, statusBar, text, titleArea}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/StatusDialog/TaskStatus.module.css\n\n\nlet compiledModule = `.WGSBzu-TaskStatusmodule--root {\\n border: 1px solid #ccc;\\n border-radius: 3px;\\n box-shadow: 0 0 12px -6px rgba(0, 0, 0, 0.25);\\n}\\n\\n.WGSBzu-TaskStatusmodule--header {\\n display: flex;\\n gap: 8px;\\n padding: 8px 16px;\\n background: #f0f0f0;\\n align-items: center;\\n line-height: 1;\\n}\\n\\n.WGSBzu-TaskStatusmodule--commands {\\n display: flex;\\n flex-direction: row;\\n gap: 8px;\\n align-items: center;\\n flex-shrink: 0;\\n height: 40px;\\n padding: 0 16px;\\n}\\n\\n.WGSBzu-TaskStatusmodule--expandButton {\\n background: transparent;\\n border: none;\\n border-radius: 4px;\\n width: 32px;\\n height: 32px;\\n}\\n.WGSBzu-TaskStatusmodule--expandButton:hover {\\n background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.WGSBzu-TaskStatusmodule--expandButton:active {\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.WGSBzu-TaskStatusmodule--expandIcon {\\n transition: transform 0.1s ease-in-out;\\n}\\n\\n.WGSBzu-TaskStatusmodule--collapsed {\\n transform: rotate(-90deg);\\n}\\n\\n.WGSBzu-TaskStatusmodule--farArea {\\n line-height: 1;\\n font-size: 13px;\\n text-align: end;\\n display: flex;\\n align-items: baseline;\\n flex-direction: row;\\n gap: 8px;\\n display: flex;\\n flex-grow: 1;\\n justify-content: end;\\n flex-direction: row;\\n}\\n\\n.WGSBzu-TaskStatusmodule--title {\\n font-size: 16px;\\n font-weight: 500;\\n color: #333;\\n}\\n\\n.WGSBzu-TaskStatusmodule--subTitle {\\n font-size: 13px;\\n}\\n\\n.WGSBzu-TaskStatusmodule--content {\\n border-top: 1px solid #ccc;\\n background: #fafafa;\\n padding: 8px 16px;\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n}\\n\\n.WGSBzu-TaskStatusmodule--resultItems {\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n}\\n\\n.WGSBzu-TaskStatusmodule--error {\\n background: #ffe9e9;\\n}\\n\\n.WGSBzu-TaskStatusmodule--success {\\n background: #e9f9e9;\\n}\\n\\n.WGSBzu-TaskStatusmodule--warning {\\n background: #fff9e9;\\n}\\n\\n.WGSBzu-TaskStatusmodule--name {\\n font-size: 12px;\\n font-weight: 600;\\n text-transform: uppercase;\\n}\\n\\n.WGSBzu-TaskStatusmodule--value {\\n display: flex;\\n flex-direction: column;\\n font-size: 14px;\\n color: #333;\\n}\\n\\n.WGSBzu-TaskStatusmodule--linkButton {\\n display: inline-flex;\\n align-items: flex-start;\\n text-align: start;\\n margin: 0;\\n padding: 0;\\n border: none;\\n background: inherit;\\n font-family: inherit;\\n flex-grow: 1;\\n\\n font-size: 14px;\\n flex-shrink: 0;\\n text-decoration: none;\\n color: #000;\\n cursor: pointer;\\n}\\n\\n.WGSBzu-TaskStatusmodule--linkButton:hover {\\n text-decoration: underline;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/StatusDialog/TaskStatus.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const collapsed = 'WGSBzu-TaskStatusmodule--collapsed';\nexport const commands = 'WGSBzu-TaskStatusmodule--commands';\nexport const content = 'WGSBzu-TaskStatusmodule--content';\nexport const error = 'WGSBzu-TaskStatusmodule--error';\nexport const expandButton = 'WGSBzu-TaskStatusmodule--expandButton';\nexport const expandIcon = 'WGSBzu-TaskStatusmodule--expandIcon';\nexport const farArea = 'WGSBzu-TaskStatusmodule--farArea';\nexport const header = 'WGSBzu-TaskStatusmodule--header';\nexport const linkButton = 'WGSBzu-TaskStatusmodule--linkButton';\nexport const name = 'WGSBzu-TaskStatusmodule--name';\nexport const resultItems = 'WGSBzu-TaskStatusmodule--resultItems';\nexport const root = 'WGSBzu-TaskStatusmodule--root';\nexport const subTitle = 'WGSBzu-TaskStatusmodule--subTitle';\nexport const success = 'WGSBzu-TaskStatusmodule--success';\nexport const title = 'WGSBzu-TaskStatusmodule--title';\nexport const value = 'WGSBzu-TaskStatusmodule--value';\nexport const warning = 'WGSBzu-TaskStatusmodule--warning';\nexport default {collapsed, commands, content, error, expandButton, expandIcon, farArea, header, linkButton, name, resultItems, root, subTitle, success, title, value, warning}\n", "import React from 'react';\nimport styles from './Button.module.css';\n\nexport function Button(props: React.ButtonHTMLAttributes<HTMLButtonElement> & { primary?: boolean }) {\n const { primary, ...other } = props;\n const className = primary ? styles.primaryButton : styles.standardButton;\n return <button {...other} className={className} type={'button'} />;\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/Button/Button.module.css\n\n\nlet compiledModule = `.RpmxvThK-Buttonmodule--standardButton {\\n outline: transparent;\\n position: relative;\\n font-family: inherit;\\n font-size: 14px;\\n font-weight: 600;\\n box-sizing: border-box;\\n border: 1px solid rgb(138, 136, 134);\\n display: inline-block;\\n text-decoration: none;\\n text-align: center;\\n cursor: pointer;\\n padding: 0px 16px;\\n border-radius: 2px;\\n min-width: 80px;\\n height: 32px;\\n background-color: rgb(255, 255, 255);\\n color: rgb(50, 49, 48);\\n user-select: none;\\n}\\n\\n.RpmxvThK-Buttonmodule--standardButton:active {\\n background-color: rgb(237, 235, 233);\\n color: rgb(32, 31, 30);\\n}\\n\\n.RpmxvThK-Buttonmodule--standardButton:hover {\\n background-color: rgb(243, 242, 241);\\n color: rgb(32, 31, 30);\\n}\\n\\n.RpmxvThK-Buttonmodule--standardButton:focus {\\n border: 3px solid rgb(0, 0, 0);\\n}\\n\\n.RpmxvThK-Buttonmodule--primaryButton {\\n outline: transparent;\\n position: relative;\\n font-family: inherit;\\n font-size: 14px;\\n font-weight: 600;\\n box-sizing: border-box;\\n border: 1px solid rgb(0, 120, 212);\\n display: inline-block;\\n text-decoration: none;\\n text-align: center;\\n cursor: pointer;\\n padding: 0px 16px;\\n border-radius: 2px;\\n min-width: 80px;\\n height: 32px;\\n background-color: rgb(0, 120, 212);\\n color: rgb(255, 255, 255);\\n user-select: none;\\n}\\n\\n.RpmxvThK-Buttonmodule--primaryButton:active {\\n background-color: rgb(0, 90, 158);\\n border: 1px solid rgb(0, 90, 158);\\n color: rgb(255, 255, 255);\\n}\\n\\n.RpmxvThK-Buttonmodule--primaryButton:hover {\\n background-color: rgb(16, 110, 190);\\n border: 1px solid rgb(16, 110, 190);\\n color: rgb(255, 255, 255);\\n}\\n\\n.RpmxvThK-Buttonmodule--primaryButton:focus {\\n border: 3px solid rgb(0, 0, 0);\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/Button/Button.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const primaryButton = 'RpmxvThK-Buttonmodule--primaryButton';\nexport const standardButton = 'RpmxvThK-Buttonmodule--standardButton';\nexport default {primaryButton, standardButton}\n", "import { useEffect, useState } from 'react';\nimport { useCloudpack } from './CloudpackProvider.js';\nimport { taskListSource, type TaskList } from '@ms-cloudpack/api-server/browser';\n\nexport const useStatusDetails = () => {\n const cloudpack = useCloudpack();\n const [details, setDetails] = useState<TaskList>({ tasks: [] });\n\n useEffect(() => {\n const subscription = cloudpack?.onDataChanged.subscribe(taskListSource, {\n onData: (data) => {\n setDetails(data as TaskList);\n },\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [cloudpack]);\n\n return details;\n};\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/StatusDialog/TaskList.module.css\n\n\nlet compiledModule = `.ZnVPBoZ-TaskListmodule--root {\\n flex-grow: 1;\\n overflow: auto;\\n border-top: 1px solid #ccc;\\n box-sizing: border-box;\\n padding: 20px;\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/StatusDialog/TaskList.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const root = 'ZnVPBoZ-TaskListmodule--root';\nexport default {root}\n", "import { default as React, useRef } from 'react';\nimport styles from './Dialog.module.css';\nimport { useDraggable } from '../../hooks/useDraggable.js';\nimport CloseIcon from '../../images/dismiss-16-filled.inline.svg';\n\nexport interface DialogProps {\n title: string;\n id: string;\n style?: 'default' | 'error';\n draggable?: boolean;\n onClose?: () => void;\n commands?: React.ReactNode[];\n children: React.ReactNode;\n}\n\nexport function Dialog({ title, id, style, draggable, onClose, commands, children }: DialogProps) {\n const draggableRef = useRef<HTMLDivElement>(null);\n const draggableTargetRef = useRef<HTMLDivElement>(null);\n const colorAccent = style === 'error' ? 'rgb(164, 38, 44)' : undefined;\n const cursorDraggable = draggable ? 'move' : undefined;\n\n useDraggable({\n enabled: !!draggable,\n containerElementRef: draggableRef,\n dragElementRef: draggableTargetRef,\n });\n\n return (\n <div id={id} className={styles.overlay}>\n <div ref={draggableRef} className={styles.dialog} style={{ borderTopColor: colorAccent }}>\n <div className={styles.titleArea}>\n <div\n ref={draggableTargetRef}\n className={styles.title}\n style={{ color: colorAccent, cursor: cursorDraggable }}\n >\n {title}\n </div>\n {onClose && (\n <button className={styles.closeButton} onClick={onClose} aria-label=\"Minimize overlay\">\n {/* a close icon is common/universal enough that it doesn't need alt text */}\n <img src={CloseIcon} alt=\"\" />\n </button>\n )}\n </div>\n {commands && <div className={styles.commands}>{...commands}</div>}\n {children}\n </div>\n </div>\n );\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/Dialog/Dialog.module.css\n\n\nlet compiledModule = `.XZLLsVjN-Dialogmodule--overlay {\\n background: rgba(0, 0, 0, 0.1);\\n border: 1px solid black;\\n position: fixed;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n z-index: 999;\\n}\\n\\n@keyframes fade-in {\\n 0% {\\n opacity: 0;\\n }\\n 100% {\\n opacity: 1;\\n }\\n}\\n\\n.XZLLsVjN-Dialogmodule--commands {\\n display: flex;\\n flex-direction: row;\\n gap: 8px;\\n align-items: center;\\n flex-shrink: 0;\\n height: 40px;\\n padding: 0 20px;\\n}\\n\\n.XZLLsVjN-Dialogmodule--dialog {\\n animation: fade-in 0.1s ease-in-out;\\n width: 80vw;\\n align-self: stretch;\\n margin: 20px 0;\\n background: white;\\n color: #000;\\n box-sizing: border-box;\\n display: flex;\\n flex-direction: column;\\n border-top: 4px solid rgb(0, 120, 212);\\n border-radius: 3px;\\n box-shadow:\\n rgb(0 0 0 / 22%) 0px 25.6px 57.6px 0px,\\n rgb(0 0 0 / 18%) 0px 4.8px 14.4px 0px;\\n position: relative;\\n outline: transparent solid 3px;\\n}\\n\\n.XZLLsVjN-Dialogmodule--titleArea {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n padding: 8px 8px 8px 20px;\\n gap: 8px;\\n}\\n\\n.XZLLsVjN-Dialogmodule--closeButton {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 32px;\\n height: 32px;\\n margin: 0;\\n padding: 0;\\n background: transparent;\\n border: none;\\n border-radius: 4px;\\n}\\n\\n.XZLLsVjN-Dialogmodule--closeButton:hover {\\n background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.XZLLsVjN-Dialogmodule--closeButton:active {\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.XZLLsVjN-Dialogmodule--title {\\n flex-grow: 1;\\n font-size: 20px;\\n font-weight: 600;\\n color: rgb(0, 120, 212);\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/Dialog/Dialog.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const closeButton = 'XZLLsVjN-Dialogmodule--closeButton';\nexport const commands = 'XZLLsVjN-Dialogmodule--commands';\nexport const dialog = 'XZLLsVjN-Dialogmodule--dialog';\nexport const overlay = 'XZLLsVjN-Dialogmodule--overlay';\nexport const title = 'XZLLsVjN-Dialogmodule--title';\nexport const titleArea = 'XZLLsVjN-Dialogmodule--titleArea';\nexport default {closeButton, commands, dialog, overlay, title, titleArea}\n", "import React from 'react';\nimport styles from './Searchbox.module.css';\n\nexport interface SearchboxProps {\n value: string;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport function Searchbox({ value, onChange }: SearchboxProps) {\n return (\n <>\n {typeof value === 'string' && (\n <input type=\"text\" placeholder=\"Search\" className={styles.searchbox} onChange={onChange} value={value} />\n )}\n </>\n );\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/StatusDialog/Searchbox.module.css\n\n\nlet compiledModule = `.aJeqJtva-Searchboxmodule--searchbox {\\n position: absolute;\\n font-size: 14px;\\n font-weight: 400;\\n box-shadow: none;\\n padding: 0px 4px;\\n box-sizing: border-box;\\n color: rgb(50, 49, 48);\\n background-color: rgb(255, 255, 255);\\n display: flex;\\n flex-flow: row nowrap;\\n align-items: stretch;\\n border-radius: 2px;\\n border: 1px solid rgb(96, 94, 92);\\n height: 32px;\\n min-width: 160px;\\n top: 52px;\\n right: 20px;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/StatusDialog/Searchbox.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const searchbox = 'aJeqJtva-Searchboxmodule--searchbox';\nexport default {searchbox}\n", "import { default as React } from 'react';\nimport { Button } from '../Button/Button.js';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { PathError } from './PathError.js';\nimport styles from '../StatusDialog/TaskList.module.css';\nimport type { UnsupportedErrorEvent } from './useErrorEvents.js';\nimport { Dialog } from '../Dialog/Dialog.js';\nimport { elementIds } from '../../constants.js';\n\nexport interface ErrorDialogProps {\n unsupported: UnsupportedErrorEvent[];\n}\n\nexport function ErrorDialog({ unsupported }: ErrorDialogProps) {\n const cloudpack = useCloudpack();\n\n const reload = () => {\n void cloudpack.restartAllTasks.mutate();\n };\n\n return (\n <Dialog\n title=\"Found unsupported paths in your project\"\n id={elementIds.errorDialogRoot}\n style=\"error\"\n commands={[\n <Button primary onClick={reload} key=\"1\">\n Restart all tasks\n </Button>,\n ]}\n >\n <div className={styles.root}>\n {unsupported.map((data, index) => (\n <PathError {...data} key={index} />\n ))}\n </div>\n </Dialog>\n );\n}\n", "import React from 'react';\nimport styles from '../StatusDialog/TaskStatus.module.css';\nimport ErrorIcon from '../../images/error-24.inline.svg';\nimport { default as cx } from 'classnames';\nimport ChevronDownIcon from '../../images/chevrondown-20.inline.svg';\nimport type { UnsupportedErrorEvent } from './useErrorEvents.js';\nimport { Button } from '../Button/Button.js';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\n\nexport function PathError(props: UnsupportedErrorEvent) {\n const [showContent, setshowContent] = React.useState<boolean>(false);\n const { packageName, importPath, issuerUrl, fixable } = props;\n const cloudpack = useCloudpack();\n\n const editConfig = () => {\n void cloudpack.openConfigEditor.mutate();\n };\n\n const addOverride = () => {\n void cloudpack.addPackageOverride.mutate({ packageName, importPath, issuerUrl });\n };\n\n return (\n <div className={styles.root}>\n <div className={cx(styles.header, styles.error)}>\n <button\n className={styles.expandButton}\n onClick={() => setshowContent(!showContent)}\n aria-label={showContent ? `Minimize ${packageName}/${importPath}` : `Expand ${packageName}/${importPath}`}\n >\n <img\n className={cx(styles.expandIcon, !showContent && styles.collapsed)}\n src={ChevronDownIcon}\n alt=\"Chevron down icon\"\n />\n </button>\n <img className={styles.errorIcon} src={ErrorIcon} alt=\"Error icon\" />\n <div className={styles.title}>{`${packageName}/${importPath}`}</div>\n </div>\n {showContent && (\n <>\n <div className={styles.commands}>\n {fixable && <Button onClick={addOverride}>Add override</Button>}\n <Button onClick={editConfig}>Edit config file</Button>\n </div>\n <div className={styles.content}>\n <div className={styles.title}>Details</div>\n\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Problem</div>\n <div className={styles.value}>\n {importPath === '.'\n ? `An unrecognized package \"${packageName}\" was imported.`\n : `Path \"${importPath}\" was imported from package \"${packageName}\" but was not recognized as an exported path.`}\n </div>\n </div>\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Solution</div>\n <div className={styles.value}>\n {fixable\n ? `Remove the path from the import in your source. (Import from \"${packageName}\" rather than \"${packageName}/${importPath}\")`\n : importPath === '.'\n ? `Make sure the package name is valid.`\n : `Import not found on package. Make sure the import path is valid.`}\n </div>\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n", "import { useEffect, useState } from 'react';\nimport { parseImportString } from '@ms-cloudpack/path-string-parsing';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\n\ndeclare global {\n interface Window {\n __pageErrors: {\n uncaughtErrors: ErrorEvent[];\n uncaughtRejections: PromiseRejectionEvent[];\n unregister: () => void;\n };\n }\n}\n\n// Interface with reason as a record.\ninterface ReasonRecord extends PromiseRejectionEvent {\n readonly reason: Record<string, unknown>;\n}\n\n// Interface with message as a string.\ninterface ReasonString extends ReasonRecord {\n readonly reason: { message: string };\n}\n\n// Verify the reason is a record.\nconst reasonIsRecord = (event: PromiseRejectionEvent): event is ReasonRecord => {\n return typeof event.reason === 'object' && !Array.isArray(event.reason) && event.reason !== null;\n};\n\n// Verify the reason has a message which is a string.\nconst hasMessage = (event: PromiseRejectionEvent): event is ReasonString => {\n return reasonIsRecord(event) && typeof event.reason.message === 'string';\n};\n\nexport type UnsupportedErrorEvent = { packageName: string; importPath: string; issuerUrl?: string; fixable?: boolean };\n\nexport const useErrorEvents = () => {\n const [errorEvents, setErrorEvents] = useState<{ unsupported: UnsupportedErrorEvent[] }>({ unsupported: [] });\n const cloudpack = useCloudpack();\n\n useEffect(() => {\n const handleUnsupportedError = (message: string, issuerUrl?: string): void => {\n const errorRegex = /[Mm]odule specifier,? ['\"](.*?)['\"]/;\n const match = message.match(errorRegex);\n\n if (match) {\n const importString = parseImportString(match[1]);\n const { packageName } = importString;\n const importPath = importString.importPath.replace(/^\\.\\//, '');\n\n (async () => {\n const { fixable } = await cloudpack.validatePackageOverride.query({ packageName, importPath, issuerUrl });\n setErrorEvents((prev) => ({\n ...prev,\n unsupported: [...prev.unsupported, { packageName, importPath, issuerUrl: issuerUrl, fixable }],\n }));\n })().catch(() => {\n // no-op\n });\n }\n };\n\n const pageErrors = window.__pageErrors;\n\n pageErrors.unregister();\n\n // Append unsupported paths to the list.\n window.addEventListener('error', (event: ErrorEvent) => {\n handleUnsupportedError(event.message, event.filename);\n });\n\n // Handle errors caught before rendering.\n for (const error of pageErrors.uncaughtErrors) {\n handleUnsupportedError(error.message, error.filename);\n }\n\n // Append unsupported paths to the list.\n window.addEventListener('unhandledrejection', (event: PromiseRejectionEvent) => {\n hasMessage(event) && handleUnsupportedError(event.reason.message);\n });\n\n // Handle rejections caught before rendering.\n for (const error of pageErrors.uncaughtRejections) {\n hasMessage(error) && handleUnsupportedError(error.reason.message);\n }\n }, [cloudpack]);\n\n return errorEvents;\n};\n", "import React from 'react';\nimport { useCloudpack } from '../components/CloudpackProvider/CloudpackProvider.js';\n\nexport function usePageLoadTimeReporter() {\n const [pageLoadTime, setPageLoadTime] = React.useState<number>();\n const cloudpack = useCloudpack();\n\n React.useEffect(() => {\n async function reportPageLoadTime() {\n const { getPageLoadTime, getBrowserCacheRatio } = window.__cloudpack;\n\n const newPageLoadTime = await getPageLoadTime();\n setPageLoadTime(newPageLoadTime);\n await cloudpack.reportMetric.mutate({ metric: 'PAGE_LOAD_TIME', value: newPageLoadTime });\n\n // Page is loaded, the browser cache ratio can be reported\n await cloudpack.reportMetric.mutate({ metric: 'BROWSER_CACHE_RATIO', value: getBrowserCacheRatio() });\n }\n\n void reportPageLoadTime();\n }, [cloudpack]);\n\n return pageLoadTime;\n}\n", "import React from 'react';\nimport styles from './ThemeProvider.module.css';\n\nexport function ThemeProvider({ children }: React.ComponentProps<'div'>) {\n return <div className={styles.root}>{children}</div>;\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/ThemeProvider/ThemeProvider.module.css\n\n\nlet compiledModule = `.ASWLkl-ThemeProvidermodule--root {\\n font-family:\\n Inter,\\n -apple-system,\\n BlinkMacSystemFont,\\n 'Segoe UI',\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n 'Fira Sans',\\n 'Droid Sans',\\n 'Helvetica Neue',\\n sans-serif;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/ThemeProvider/ThemeProvider.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const root = 'ASWLkl-ThemeProvidermodule--root';\nexport default {root}\n", "/**\n * Gets the cookies dictionary from the browser.\n */\nexport function getCookies(): Record<string, string> {\n return document.cookie\n .split(';')\n .map((s) => s.split('='))\n .reduce<Record<string, string>>((current, nextValue) => {\n const name = nextValue[0]?.trim();\n const value = decodeURIComponent(nextValue[1]?.trim());\n\n if (name && value) {\n current[name] = value;\n }\n\n return current;\n }, {});\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { CloudpackProvider } from './components/CloudpackProvider/CloudpackProvider.js';\nimport { StatusOverlay } from './components/StatusOverlay/StatusOverlay.js';\nimport { ThemeProvider } from './components/ThemeProvider/ThemeProvider.js';\nimport { cookieNames, elementIds } from './constants.js';\nimport { createCloudpackClient, reloadCountSource } from '@ms-cloudpack/api-server/browser';\nimport { getCookies } from './components/CloudpackProvider/getCookies.js';\n\nasync function start() {\n const cookies = getCookies();\n const sessionId = cookies[cookieNames.sessionId];\n const apiUrl = cookies[cookieNames.apiUrl];\n const currentSequence = cookies[cookieNames.sessionSequence];\n\n const client = await createCloudpackClient({ url: apiUrl });\n\n if (sessionId === (await client.getSessionId.query())) {\n console.log('[Cloudpack] socket opened');\n }\n\n client.onDataChanged.subscribe(reloadCountSource, {\n onData: (data) => {\n if (Number(data) > Number(currentSequence)) {\n window.location.reload();\n }\n },\n });\n\n const rootDiv = document.createElement('div');\n rootDiv.id = elementIds.root;\n\n ReactDOM.render(\n <ThemeProvider>\n <CloudpackProvider client={client}>\n <StatusOverlay />\n </CloudpackProvider>\n </ThemeProvider>,\n rootDiv,\n );\n\n document.body.appendChild(rootDiv);\n}\n\nvoid start();\n", "import React, { createContext, useContext } from 'react';\nimport { type CloudpackClient } from '@ms-cloudpack/api-server/browser';\n\nexport const CloudpackContext = createContext<CloudpackClient>(null as unknown as CloudpackClient);\n\nexport function CloudpackProvider({ client, children }: { client: CloudpackClient; children: React.ReactNode }) {\n return <CloudpackContext.Provider value={client}>{children}</CloudpackContext.Provider>;\n}\n\nexport const useCloudpack = () => useContext(CloudpackContext);\n", "import React, { useCallback, useState, useRef } from 'react';\nimport { StatusBadge } from '../StatusBadge/StatusBadge.js';\nimport { StatusDialog } from '../StatusDialog/StatusDialog.js';\nimport { useStatus, type CloudpackStatus } from '../CloudpackProvider/useStatus.js';\nimport { ErrorDialog } from '../ErrorDialog/ErrorDialog.js';\nimport { useErrorEvents } from '../ErrorDialog/useErrorEvents.js';\nimport { usePageLoadTimeReporter } from '../../hooks/usePageLoadTimeReporter.js';\n\nexport function StatusOverlay() {\n const pageLoadTime = usePageLoadTimeReporter();\n const [isExpanded, setIsExpanded] = useState<boolean>(false);\n const status = useStatus();\n const prevStatus = useRef<CloudpackStatus | undefined>();\n const { unsupported } = useErrorEvents();\n\n // If we haven't set a specific state and we become idle,\n // pop open the details if there are errors.\n React.useEffect(() => {\n if (\n !isExpanded &&\n prevStatus.current?.status !== 'idle' &&\n status.status === 'idle' &&\n (prevStatus.current?.totalErrors || 0) !== (status.totalErrors || 0)\n ) {\n setIsExpanded(true);\n }\n prevStatus.current = status;\n }, [status, isExpanded]);\n\n const toggleMinimized = useCallback(() => {\n console.log(`Toggling minimized state to ${!isExpanded}`);\n setIsExpanded(!isExpanded);\n }, [isExpanded]);\n\n return unsupported.length ? (\n <ErrorDialog unsupported={unsupported} />\n ) : isExpanded ? (\n <StatusDialog onClose={toggleMinimized} />\n ) : (\n <StatusBadge onExpand={toggleMinimized} pageLoadTime={pageLoadTime} />\n );\n}\n", "import React, { useCallback, useRef, useState } from 'react';\nimport { useDraggable } from '../../hooks/useDraggable.js';\nimport styles from './StatusBadge.module.css';\nimport { default as cx } from 'classnames';\nimport { useStatus, type CloudpackStatus } from '../CloudpackProvider/useStatus.js';\nimport { elementIds } from '../../constants.js';\n\nexport interface StatusBadgeProps {\n inline?: boolean;\n onExpand?: () => void;\n onToggle?: () => void;\n pageLoadTime?: number;\n}\n\nexport function StatusBadge({ inline, onExpand, pageLoadTime }: StatusBadgeProps) {\n const badgeStatusKey = 'cloudpack.badgeStatus';\n\n const rootElementRef = useRef<HTMLDivElement>(null);\n const dragElementRef = useRef<HTMLDivElement>(null);\n const status = useStatus();\n const [isCollapsed, setIsCollapsed] = useState<boolean>(!!localStorage.getItem(badgeStatusKey));\n\n const shouldRender = status.status !== 'unknown';\n\n const toggleBadgeVisibility = useCallback(() => {\n const newCollapsedState = !isCollapsed;\n console.log('Status badge collapsed state:', newCollapsedState);\n setIsCollapsed(newCollapsedState);\n localStorage.setItem(badgeStatusKey, newCollapsedState ? 'collapsed' : '');\n }, [isCollapsed]);\n\n useDraggable({\n // If we're not yet able to render, don't enable dragging yet.\n // Otherwise the event handlers won't be attached when the component renders.\n enabled: shouldRender && !inline,\n containerElementRef: rootElementRef,\n dragElementRef,\n });\n\n if (!shouldRender) {\n return null;\n }\n\n const metric = pageLoadTime ? (\n <span className={styles.metric} title=\"Page Load Time\">\n in {pageLoadTime.toFixed(2)} ms\n </span>\n ) : null;\n\n const leftChevron = '\\u00AB';\n const rightChevron = '\\u00BB';\n const badge = (\n <div\n id={elementIds.statusBadgeRoot}\n ref={rootElementRef}\n className={`${getStatusClassName(status, !!inline)} ${getCollapsedClassName(isCollapsed)}`}\n >\n {!inline && (\n <div ref={dragElementRef} className={styles.gripArea}>\n <div className={styles.grip} />\n <div className={styles.grip} />\n </div>\n )}\n <button className={styles.button} onClick={onExpand} aria-label=\"Expand overlay\">\n <div className={styles.value}>{getStatusString(status)}</div>\n </button>\n <div>\n {getStatsString(status)}\n {metric}\n </div>\n <button className={`${styles.button} ${styles.chevron}`} onClick={toggleBadgeVisibility}>\n {isCollapsed ? leftChevron : rightChevron}\n </button>\n </div>\n );\n\n return inline ? (\n badge\n ) : (\n <div className={styles.fixedOverlay}>\n <div className={styles.contentSurface}>{badge}</div>\n </div>\n );\n}\n\nfunction getStatusString(status: CloudpackStatus) {\n if (status.status === 'pending') {\n return 'Running';\n }\n\n if (status.totalTasks === 0) {\n return 'Idle';\n }\n\n return status.totalErrors === 0 ? 'Success' : 'Errors';\n}\n\nfunction getStatusClassName({ status, totalTasks, totalErrors, totalWarnings }: CloudpackStatus, inline: boolean) {\n return cx(styles.badge, {\n [styles.inline]: inline,\n [styles.building]: status === 'pending',\n [styles.success]: status === 'idle' && totalTasks > 0 && totalErrors === 0 && totalWarnings === 0,\n [styles.error]: status === 'idle' && totalErrors > 0,\n [styles.warning]: status === 'idle' && totalErrors === 0 && totalWarnings > 0,\n });\n}\n\nfunction getCollapsedClassName(isCollapsed: boolean) {\n return cx(styles.badge, {\n [styles.collapsed]: isCollapsed,\n });\n}\n\nfunction getStatsString({ totalTasks, remainingTasks, totalErrors, totalWarnings }: CloudpackStatus) {\n if (totalTasks === 0) {\n return '';\n }\n\n return [\n remainingTasks > 0 && `${remainingTasks} of ${totalTasks} tasks pending`,\n remainingTasks === 0 && `${totalTasks} tasks completed`,\n totalErrors === 1 && `${totalErrors} error`,\n totalErrors > 1 && `${totalErrors} errors`,\n totalWarnings === 1 && `${totalWarnings} warning`,\n totalWarnings > 1 && `${totalWarnings} warnings`,\n ]\n .filter(Boolean)\n .join(', ');\n}\n", "import { type RefObject, useEffect, useState } from 'react';\n\n/**\n * Make an element draggable. Note that changing `enabled` or passing different ref objects\n * will trigger reconfiguring the event handlers, but changing `.current` will not.\n * @returns Whether the element is currently being dragged\n */\nexport function useDraggable(options: {\n /** Whether to enable dragging */\n enabled: boolean;\n /** Element that should be draggable */\n containerElementRef: RefObject<HTMLElement>;\n /** The drag handle element */\n dragElementRef: RefObject<HTMLElement>;\n}) {\n const { enabled, containerElementRef, dragElementRef } = options;\n\n const [isDragging, setIsDragging] = useState(false);\n\n useEffect(() => {\n const moveTarget = containerElementRef?.current;\n const dragTarget = dragElementRef?.current;\n\n if (!enabled || !moveTarget || !dragTarget) {\n return;\n }\n\n let originalX = 0;\n let originalY = 0;\n let offset = { x: 0, y: 0 };\n\n const onPointerMove = (event: PointerEvent) => {\n moveTarget.style.transform = `translate(${offset.x + event.clientX - originalX}px, ${\n offset.y + event.clientY - originalY\n }px)`;\n };\n\n const onPointerUp = (event: PointerEvent) => {\n setIsDragging(false);\n offset = {\n x: offset.x + event.clientX - originalX,\n y: offset.y + event.clientY - originalY,\n };\n\n dragTarget.releasePointerCapture(event.pointerId);\n dragTarget.removeEventListener('pointerup', onPointerUp);\n dragTarget.removeEventListener('pointermove', onPointerMove);\n\n event.preventDefault();\n };\n\n const onPointerDown = (event: PointerEvent) => {\n setIsDragging(true);\n originalX = event.clientX;\n originalY = event.clientY;\n dragTarget.setPointerCapture(event.pointerId);\n dragTarget.addEventListener('pointerup', onPointerUp);\n dragTarget.addEventListener('pointermove', onPointerMove);\n event.preventDefault();\n };\n\n dragTarget.addEventListener('pointerdown', onPointerDown);\n\n return () => {\n dragTarget.removeEventListener('pointerdown', onPointerDown);\n dragTarget.removeEventListener('pointermove', onPointerMove);\n dragTarget.removeEventListener('pointerup', onPointerUp);\n };\n }, [enabled, containerElementRef, dragElementRef]);\n\n return {\n isDragging,\n };\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/StatusBadge/StatusBadge.module.css\n\n\nlet compiledModule = `.uHuWYf-StatusBadgemodule--fixedOverlay {\\n position: fixed;\\n pointer-events: none;\\n background: transparent;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n z-index: 99999;\\n overflow: hidden;\\n}\\n\\n.uHuWYf-StatusBadgemodule--gripArea {\\n display: flex;\\n flex-direction: row;\\n gap: 2px;\\n height: 100%;\\n width: 12px;\\n cursor: move;\\n margin-right: -4px;\\n}\\n\\n.uHuWYf-StatusBadgemodule--grip {\\n width: 2px;\\n height: 100%;\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.uHuWYf-StatusBadgemodule--contentSurface {\\n pointer-events: auto;\\n display: contents;\\n}\\n\\n.uHuWYf-StatusBadgemodule--badge {\\n position: absolute;\\n bottom: 4px;\\n right: 4px;\\n font-size: 12px;\\n display: inline-flex;\\n gap: 8px;\\n background: #dddddd;\\n box-shadow: 0 0 12px -6px rgba(0, 0, 0, 0.75);\\n border: 1px solid #999999;\\n border-radius: 4px;\\n height: 28px;\\n flex-shrink: 0;\\n justify-content: center;\\n align-items: center;\\n box-sizing: border-box;\\n padding: 3px;\\n padding-right: 8px;\\n\\n transition: background-color 0.2s ease-in-out;\\n}\\n\\n.uHuWYf-StatusBadgemodule--inline {\\n flex-shrink: 0;\\n position: relative;\\n bottom: auto;\\n right: auto;\\n top: auto;\\n left: auto;\\n box-shadow: none;\\n padding-left: 8px;\\n}\\n\\n.uHuWYf-StatusBadgemodule--building {\\n background: #bbb;\\n color: #000;\\n}\\n\\n.uHuWYf-StatusBadgemodule--success {\\n background: #7ad17a;\\n color: #000;\\n}\\n\\n.uHuWYf-StatusBadgemodule--warning {\\n background: #e4e68b;\\n color: #000;\\n}\\n\\n.uHuWYf-StatusBadgemodule--error {\\n background: #ffb9b9;\\n color: #000;\\n}\\n\\n.uHuWYf-StatusBadgemodule--button {\\n cursor: pointer;\\n background: inherit;\\n border: none;\\n border-radius: 3px;\\n display: flex;\\n align-self: stretch;\\n align-items: center;\\n justify-content: center;\\n box-sizing: border-box;\\n padding: 0;\\n margin: 0;\\n font-weight: inherit;\\n font-size: inherit;\\n font-family: inherit;\\n}\\n\\n.uHuWYf-StatusBadgemodule--button:hover {\\n filter: invert(0.1);\\n}\\n\\n.uHuWYf-StatusBadgemodule--value {\\n font-weight: 600;\\n background: rgba(255, 255, 255, 0.4);\\n box-shadow: 2px 2px 3px -1px rgba(0, 0, 0, 0.15) inset;\\n padding: 2px 8px;\\n border-radius: 3px;\\n}\\n\\n.uHuWYf-StatusBadgemodule--metric {\\n margin-left: 2px;\\n}\\n\\n.uHuWYf-StatusBadgemodule--collapsed {\\n overflow: hidden;\\n padding: 0;\\n}\\n.uHuWYf-StatusBadgemodule--collapsed *:not(.uHuWYf-StatusBadgemodule--chevron) {\\n display: none;\\n}\\n\\n.uHuWYf-StatusBadgemodule--chevron {\\n padding: 0 3px;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/StatusBadge/StatusBadge.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const badge = 'uHuWYf-StatusBadgemodule--badge';\nexport const building = 'uHuWYf-StatusBadgemodule--building';\nexport const button = 'uHuWYf-StatusBadgemodule--button';\nexport const chevron = 'uHuWYf-StatusBadgemodule--chevron';\nexport const collapsed = 'uHuWYf-StatusBadgemodule--collapsed';\nexport const contentSurface = 'uHuWYf-StatusBadgemodule--contentSurface';\nexport const error = 'uHuWYf-StatusBadgemodule--error';\nexport const fixedOverlay = 'uHuWYf-StatusBadgemodule--fixedOverlay';\nexport const grip = 'uHuWYf-StatusBadgemodule--grip';\nexport const gripArea = 'uHuWYf-StatusBadgemodule--gripArea';\nexport const inline = 'uHuWYf-StatusBadgemodule--inline';\nexport const metric = 'uHuWYf-StatusBadgemodule--metric';\nexport const success = 'uHuWYf-StatusBadgemodule--success';\nexport const value = 'uHuWYf-StatusBadgemodule--value';\nexport const warning = 'uHuWYf-StatusBadgemodule--warning';\nexport default {badge, building, button, chevron, collapsed, contentSurface, error, fixedOverlay, grip, gripArea, inline, metric, success, value, warning}\n", "import { useEffect, useState } from 'react';\nimport { useCloudpack } from './CloudpackProvider.js';\nimport { taskStatsSource, type TaskStats } from '@ms-cloudpack/api-server/browser';\n\nexport type CloudpackStatus = TaskStats;\n\nconst defaultStatus: CloudpackStatus = {\n status: 'unknown',\n remainingTasks: 0,\n totalTasks: 0,\n totalErrors: 0,\n totalWarnings: 0,\n};\n\nexport const useStatus = () => {\n const cloudpack = useCloudpack();\n const [status, setStatus] = useState<CloudpackStatus>(defaultStatus);\n\n useEffect(() => {\n const subscription = cloudpack?.onDataChanged.subscribe(taskStatsSource, {\n onData: (data) => {\n setStatus(data as CloudpackStatus);\n },\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [cloudpack]);\n\n return status;\n};\n", "import React, { useCallback } from 'react';\nimport { TaskList } from './TaskList.js';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { Button } from '../Button/Button.js';\nimport { Dialog } from '../Dialog/Dialog.js';\nimport { Searchbox } from './Searchbox.js';\nimport { elementIds } from '../../constants.js';\n\nexport interface StatusDialogProps {\n onClose: () => void;\n}\n\nexport function StatusDialog({ onClose }: StatusDialogProps) {\n const cloudpack = useCloudpack();\n const [searchFilter, setSearchFilter] = React.useState('');\n const [issuesOnly, setIssuesOnly] = React.useState(false);\n\n const handleSearchChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n setSearchFilter(event.target.value);\n }, []);\n\n const restartAllTasks = () => {\n void cloudpack.restartAllTasks.mutate();\n };\n\n const toggleIssuesOnly = () => setIssuesOnly((value) => !value);\n\n return (\n <Dialog\n title=\"Task results\"\n id={elementIds.statusDialogRoot}\n draggable\n onClose={onClose}\n commands={[\n <Button primary onClick={restartAllTasks} key=\"restart\">\n Restart all tasks\n </Button>,\n <Button onClick={toggleIssuesOnly} key=\"issues\">\n {issuesOnly ? 'Show all tasks' : 'Show tasks with issues'}\n </Button>,\n ]}\n >\n <Searchbox value={searchFilter} onChange={handleSearchChange} />\n <TaskList searchFilter={searchFilter} issuesOnly={issuesOnly} />\n </Dialog>\n );\n}\n", "import React from 'react';\nimport { TaskStatus } from './TaskStatus.js';\nimport { useStatusDetails } from '../CloudpackProvider/useStatusDetails.js';\nimport styles from './TaskList.module.css';\nimport type { TaskDescription } from '@ms-cloudpack/api-server/browser';\n\nexport interface TaskListProps {\n searchFilter?: string;\n issuesOnly?: boolean;\n}\n\nexport function TaskList({ searchFilter, issuesOnly }: TaskListProps) {\n const details = useStatusDetails();\n const tasks = (details.tasks || []).sort(sortTasks);\n\n let filteredTasks = tasks;\n if (searchFilter) {\n searchFilter = searchFilter.toLowerCase();\n filteredTasks = filteredTasks.filter(({ name }) => searchFilter && name?.toLowerCase().includes(searchFilter));\n }\n if (issuesOnly) {\n filteredTasks = filteredTasks.filter(({ errors, warnings }) => errors?.length || warnings?.length);\n }\n\n return (\n <div className={styles.root}>\n {filteredTasks.map((task) => (\n <TaskStatus key={task.name} task={task} />\n ))}\n </div>\n );\n}\n\n/**\n * Really the server should be sorting. Get stuff out of the browser.\n */\nfunction sortTasks(a: TaskDescription, b: TaskDescription) {\n const aStatus = a.status === 'pending' ? 1 : 0;\n const bStatus = b.status === 'pending' ? 1 : 0;\n\n if (aStatus !== bStatus) {\n return aStatus > bStatus ? -1 : 1;\n }\n\n const aErrors = a.errors?.length || 0;\n const bErrors = b.errors?.length || 0;\n\n if (aErrors !== bErrors) {\n return aErrors > bErrors ? -1 : 1;\n }\n\n if (a.name === undefined && b.name === undefined) {\n return a.id < b.id ? -1 : 1;\n } else if (a.name === undefined) {\n return 1;\n } else if (b.name === undefined) {\n return -1;\n }\n\n return a.name < b.name ? -1 : 1;\n}\n", "import React from 'react';\nimport type { TaskDescription } from '@ms-cloudpack/api-server/browser';\nimport { TaskResultItem } from './TaskResultItem.js';\nimport styles from './TaskStatus.module.css';\nimport { default as cx } from 'classnames';\nimport ErrorIcon from '../../images/error-24.inline.svg';\nimport SuccessIcon from '../../images/success-24.inline.svg';\nimport ChevronDownIcon from '../../images/chevrondown-20.inline.svg';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { Button } from '../Button/Button.js';\n\nexport interface TaskStatusProps {\n task: TaskDescription;\n}\n\nfunction getCompletion(task: TaskDescription) {\n if (task.status === 'pending') {\n return 'Running';\n }\n return [\n `Completed in ${task.durationMilliseconds}ms`,\n task.errors?.length && `${task.errors.length} error${task.errors.length > 1 ? 's' : ''}`,\n task.warnings?.length && `${task.warnings.length} warning${task.warnings.length > 1 ? 's' : ''}`,\n ]\n .filter(Boolean)\n .join(', ');\n}\n\nexport function TaskStatus({ task }: TaskStatusProps) {\n const [isOpen, setIsOpen] = React.useState<boolean | undefined>(undefined);\n const { name, warnings = [], errors = [] } = task;\n const cloudpack = useCloudpack();\n const showContent = isOpen === true || (isOpen === undefined && errors?.length > 0);\n\n const { inputPath, outputPath } = task;\n\n const open = (rootPath: string) => {\n void cloudpack.openFilePath.mutate({\n rootPath,\n });\n };\n\n const openPackage = () => {\n if (!inputPath) {\n console.error('No input path for task', task);\n return;\n }\n void cloudpack.openCodeEditor.mutate({\n rootPath: inputPath,\n relativePath: 'package.json',\n });\n };\n\n const restartTask = () => {\n if (!inputPath) {\n console.error('No input path for task', task);\n return;\n }\n void cloudpack.restartTask.mutate({ id: task.id, inputPath });\n };\n\n return (\n <div className={styles.root}>\n <div className={getHeaderClassName(task)}>\n <button\n className={styles.expandButton}\n onClick={() => setIsOpen(!showContent)}\n aria-label={showContent ? `Minimize ${name}` : `Expand ${name}`}\n >\n <img\n className={cx(styles.expandIcon, !showContent && styles.collapsed)}\n src={ChevronDownIcon}\n alt=\"Chevron down icon\"\n />\n </button>\n {errors?.length === 0 && warnings?.length === 0 && (\n <img className={styles.errorIcon} src={SuccessIcon} alt=\"Success icon\" />\n )}\n {errors?.length > 0 && <img className={styles.errorIcon} src={ErrorIcon} alt=\"Error icon\" />}\n <div className={styles.title}>{name}</div>\n <div className={styles.farArea}>{getCompletion(task)}</div>\n </div>\n {showContent &&\n (inputPath ? (\n <>\n <div className={styles.commands}>\n <Button onClick={restartTask}>Restart task</Button>\n </div>\n <div className={styles.content}>\n <div className={styles.title}>Details</div>\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Input path</div>\n <div className={styles.value}>\n <button className={styles.linkButton} onClick={() => open(inputPath)}>\n {task.inputPath}\n </button>\n\n <button className={styles.linkButton} onClick={openPackage}>\n (Package.json)\n </button>\n </div>\n </div>\n {outputPath && (\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Output path</div>\n <button className={styles.linkButton} onClick={() => open(outputPath)}>\n {outputPath}\n </button>\n </div>\n )}\n {errors?.length > 0 && (\n <>\n <div className={styles.title}>Errors</div>\n <div className={styles.resultItems}>\n {errors.map((error, index) => (\n <TaskResultItem key={index} item={error} projectPath={inputPath} index={index + 1} />\n ))}\n </div>\n </>\n )}\n {warnings?.length > 0 && (\n <>\n <div className={styles.title}>Warnings</div>\n <div className={styles.resultItems}>\n {warnings.map((warning, index) => (\n <TaskResultItem key={index} item={warning} projectPath={inputPath} index={index + 1} />\n ))}\n </div>\n </>\n )}\n </div>\n </>\n ) : (\n <div className={styles.content}>No input path found for task. This is a Cloudpack bug. Please report it.</div>\n ))}\n </div>\n );\n}\n\nfunction getHeaderClassName(task: TaskDescription) {\n const { errors = [], warnings = [] } = task;\n return cx(styles.header, {\n [styles.success]: errors?.length === 0 && warnings?.length === 0,\n [styles.warning]: errors?.length === 0 && warnings?.length > 0,\n [styles.error]: errors?.length > 0,\n });\n}\n", "import type { BundleMessage } from '@ms-cloudpack/common-types';\nimport React from 'react';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport styles from './TaskResultItem.module.css';\n\nexport interface TaskResultItemProps {\n item: BundleMessage;\n projectPath: string;\n index: number;\n}\n\nexport function TaskResultItem({ item, projectPath, index }: TaskResultItemProps) {\n const cloudpack = useCloudpack();\n\n const openSource = (ev: React.MouseEvent) => {\n if (item.location) {\n void cloudpack.openCodeEditor.mutate({\n rootPath: projectPath,\n relativePath: item.location?.file,\n line: item.location?.line,\n column: item.location?.column,\n });\n ev.preventDefault();\n }\n };\n\n const location = [item.location?.file || '(path unavailable)', item.location?.line, item.location?.column]\n .filter(Boolean)\n .join(':');\n\n return (\n <div className={styles.root}>\n <div className={styles.statusBar}></div>\n <div className={styles.content}>\n <div className={styles.titleArea}>\n <button onClick={openSource} className={styles.file}>\n {index}. {location}\n </button>\n </div>\n <div className={styles.text}>\n [{item.source}] {item.text}\n </div>\n <pre className={styles.text}>{JSON.stringify(item, null, 2)}</pre>\n </div>\n </div>\n );\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/StatusDialog/TaskResultItem.module.css\n\n\nlet compiledModule = `.FSsdmcQ-TaskResultItemmodule--root {\\n display: flex;\\n background: #f5f5f5;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--statusBar {\\n flex-shrink: 0;\\n border-radius: 4px;\\n width: 4px;\\n background: #aa0000;\\n box-shadow: 2px 0 4px 0 rgb(220 0 0 / 20%);\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--content {\\n padding: 8px;\\n display: flex;\\n flex-grow: 1;\\n overflow: hidden;\\n flex-direction: column;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--titleArea {\\n display: flex;\\n align-items: center;\\n flex-direction: row;\\n gap: 4px;\\n padding: 4px 0;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--file {\\n display: inline-flex;\\n margin: 0;\\n padding: 0;\\n border: none;\\n background: inherit;\\n font-family: inherit;\\n flex-grow: 1;\\n font-weight: 500;\\n font-size: 14px;\\n flex-shrink: 0;\\n text-decoration: none;\\n color: #000;\\n cursor: pointer;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--file:hover {\\n text-decoration: underline;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--actionArea {\\n display: flex;\\n flex-direction: row;\\n gap: 8px;\\n flex-shrink: 0;\\n}\\n\\n.FSsdmcQ-TaskResultItemmodule--text {\\n word-wrap: break-word;\\n color: #333;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/StatusDialog/TaskResultItem.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const actionArea = 'FSsdmcQ-TaskResultItemmodule--actionArea';\nexport const content = 'FSsdmcQ-TaskResultItemmodule--content';\nexport const file = 'FSsdmcQ-TaskResultItemmodule--file';\nexport const root = 'FSsdmcQ-TaskResultItemmodule--root';\nexport const statusBar = 'FSsdmcQ-TaskResultItemmodule--statusBar';\nexport const text = 'FSsdmcQ-TaskResultItemmodule--text';\nexport const titleArea = 'FSsdmcQ-TaskResultItemmodule--titleArea';\nexport default {actionArea, content, file, root, statusBar, text, titleArea}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/StatusDialog/TaskStatus.module.css\n\n\nlet compiledModule = `.WGSBzu-TaskStatusmodule--root {\\n border: 1px solid #ccc;\\n border-radius: 3px;\\n box-shadow: 0 0 12px -6px rgba(0, 0, 0, 0.25);\\n}\\n\\n.WGSBzu-TaskStatusmodule--header {\\n display: flex;\\n gap: 8px;\\n padding: 8px 16px;\\n background: #f0f0f0;\\n align-items: center;\\n line-height: 1;\\n}\\n\\n.WGSBzu-TaskStatusmodule--commands {\\n display: flex;\\n flex-direction: row;\\n gap: 8px;\\n align-items: center;\\n flex-shrink: 0;\\n height: 40px;\\n padding: 0 16px;\\n}\\n\\n.WGSBzu-TaskStatusmodule--expandButton {\\n background: transparent;\\n border: none;\\n border-radius: 4px;\\n width: 32px;\\n height: 32px;\\n}\\n.WGSBzu-TaskStatusmodule--expandButton:hover {\\n background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.WGSBzu-TaskStatusmodule--expandButton:active {\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.WGSBzu-TaskStatusmodule--expandIcon {\\n transition: transform 0.1s ease-in-out;\\n}\\n\\n.WGSBzu-TaskStatusmodule--collapsed {\\n transform: rotate(-90deg);\\n}\\n\\n.WGSBzu-TaskStatusmodule--farArea {\\n line-height: 1;\\n font-size: 13px;\\n text-align: end;\\n display: flex;\\n align-items: baseline;\\n flex-direction: row;\\n gap: 8px;\\n display: flex;\\n flex-grow: 1;\\n justify-content: end;\\n flex-direction: row;\\n}\\n\\n.WGSBzu-TaskStatusmodule--title {\\n font-size: 16px;\\n font-weight: 500;\\n color: #333;\\n}\\n\\n.WGSBzu-TaskStatusmodule--subTitle {\\n font-size: 13px;\\n}\\n\\n.WGSBzu-TaskStatusmodule--content {\\n border-top: 1px solid #ccc;\\n background: #fafafa;\\n padding: 8px 16px;\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n}\\n\\n.WGSBzu-TaskStatusmodule--resultItems {\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n}\\n\\n.WGSBzu-TaskStatusmodule--error {\\n background: #ffe9e9;\\n}\\n\\n.WGSBzu-TaskStatusmodule--success {\\n background: #e9f9e9;\\n}\\n\\n.WGSBzu-TaskStatusmodule--warning {\\n background: #fff9e9;\\n}\\n\\n.WGSBzu-TaskStatusmodule--name {\\n font-size: 12px;\\n font-weight: 600;\\n text-transform: uppercase;\\n}\\n\\n.WGSBzu-TaskStatusmodule--value {\\n display: flex;\\n flex-direction: column;\\n font-size: 14px;\\n color: #333;\\n}\\n\\n.WGSBzu-TaskStatusmodule--linkButton {\\n display: inline-flex;\\n align-items: flex-start;\\n text-align: start;\\n margin: 0;\\n padding: 0;\\n border: none;\\n background: inherit;\\n font-family: inherit;\\n flex-grow: 1;\\n\\n font-size: 14px;\\n flex-shrink: 0;\\n text-decoration: none;\\n color: #000;\\n cursor: pointer;\\n}\\n\\n.WGSBzu-TaskStatusmodule--linkButton:hover {\\n text-decoration: underline;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/StatusDialog/TaskStatus.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const collapsed = 'WGSBzu-TaskStatusmodule--collapsed';\nexport const commands = 'WGSBzu-TaskStatusmodule--commands';\nexport const content = 'WGSBzu-TaskStatusmodule--content';\nexport const error = 'WGSBzu-TaskStatusmodule--error';\nexport const expandButton = 'WGSBzu-TaskStatusmodule--expandButton';\nexport const expandIcon = 'WGSBzu-TaskStatusmodule--expandIcon';\nexport const farArea = 'WGSBzu-TaskStatusmodule--farArea';\nexport const header = 'WGSBzu-TaskStatusmodule--header';\nexport const linkButton = 'WGSBzu-TaskStatusmodule--linkButton';\nexport const name = 'WGSBzu-TaskStatusmodule--name';\nexport const resultItems = 'WGSBzu-TaskStatusmodule--resultItems';\nexport const root = 'WGSBzu-TaskStatusmodule--root';\nexport const subTitle = 'WGSBzu-TaskStatusmodule--subTitle';\nexport const success = 'WGSBzu-TaskStatusmodule--success';\nexport const title = 'WGSBzu-TaskStatusmodule--title';\nexport const value = 'WGSBzu-TaskStatusmodule--value';\nexport const warning = 'WGSBzu-TaskStatusmodule--warning';\nexport default {collapsed, commands, content, error, expandButton, expandIcon, farArea, header, linkButton, name, resultItems, root, subTitle, success, title, value, warning}\n", "import React from 'react';\nimport styles from './Button.module.css';\n\nexport function Button(props: React.ButtonHTMLAttributes<HTMLButtonElement> & { primary?: boolean }) {\n const { primary, ...other } = props;\n const className = primary ? styles.primaryButton : styles.standardButton;\n return <button {...other} className={className} type={'button'} />;\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/Button/Button.module.css\n\n\nlet compiledModule = `.RpmxvThK-Buttonmodule--standardButton {\\n outline: transparent;\\n position: relative;\\n font-family: inherit;\\n font-size: 14px;\\n font-weight: 600;\\n box-sizing: border-box;\\n border: 1px solid rgb(138, 136, 134);\\n display: inline-block;\\n text-decoration: none;\\n text-align: center;\\n cursor: pointer;\\n padding: 0px 16px;\\n border-radius: 2px;\\n min-width: 80px;\\n height: 32px;\\n background-color: rgb(255, 255, 255);\\n color: rgb(50, 49, 48);\\n user-select: none;\\n}\\n\\n.RpmxvThK-Buttonmodule--standardButton:active {\\n background-color: rgb(237, 235, 233);\\n color: rgb(32, 31, 30);\\n}\\n\\n.RpmxvThK-Buttonmodule--standardButton:hover {\\n background-color: rgb(243, 242, 241);\\n color: rgb(32, 31, 30);\\n}\\n\\n.RpmxvThK-Buttonmodule--standardButton:focus {\\n border: 3px solid rgb(0, 0, 0);\\n}\\n\\n.RpmxvThK-Buttonmodule--primaryButton {\\n outline: transparent;\\n position: relative;\\n font-family: inherit;\\n font-size: 14px;\\n font-weight: 600;\\n box-sizing: border-box;\\n border: 1px solid rgb(0, 120, 212);\\n display: inline-block;\\n text-decoration: none;\\n text-align: center;\\n cursor: pointer;\\n padding: 0px 16px;\\n border-radius: 2px;\\n min-width: 80px;\\n height: 32px;\\n background-color: rgb(0, 120, 212);\\n color: rgb(255, 255, 255);\\n user-select: none;\\n}\\n\\n.RpmxvThK-Buttonmodule--primaryButton:active {\\n background-color: rgb(0, 90, 158);\\n border: 1px solid rgb(0, 90, 158);\\n color: rgb(255, 255, 255);\\n}\\n\\n.RpmxvThK-Buttonmodule--primaryButton:hover {\\n background-color: rgb(16, 110, 190);\\n border: 1px solid rgb(16, 110, 190);\\n color: rgb(255, 255, 255);\\n}\\n\\n.RpmxvThK-Buttonmodule--primaryButton:focus {\\n border: 3px solid rgb(0, 0, 0);\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/Button/Button.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const primaryButton = 'RpmxvThK-Buttonmodule--primaryButton';\nexport const standardButton = 'RpmxvThK-Buttonmodule--standardButton';\nexport default {primaryButton, standardButton}\n", "import { useEffect, useState } from 'react';\nimport { useCloudpack } from './CloudpackProvider.js';\nimport { taskListSource, type TaskList } from '@ms-cloudpack/api-server/browser';\n\nexport const useStatusDetails = () => {\n const cloudpack = useCloudpack();\n const [details, setDetails] = useState<TaskList>({ tasks: [] });\n\n useEffect(() => {\n const subscription = cloudpack?.onDataChanged.subscribe(taskListSource, {\n onData: (data) => {\n setDetails(data as TaskList);\n },\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [cloudpack]);\n\n return details;\n};\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/StatusDialog/TaskList.module.css\n\n\nlet compiledModule = `.ZnVPBoZ-TaskListmodule--root {\\n flex-grow: 1;\\n overflow: auto;\\n border-top: 1px solid #ccc;\\n box-sizing: border-box;\\n padding: 20px;\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/StatusDialog/TaskList.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const root = 'ZnVPBoZ-TaskListmodule--root';\nexport default {root}\n", "import { default as React, useRef } from 'react';\nimport styles from './Dialog.module.css';\nimport { useDraggable } from '../../hooks/useDraggable.js';\nimport CloseIcon from '../../images/dismiss-16-filled.inline.svg';\n\nexport interface DialogProps {\n title: string;\n id: string;\n style?: 'default' | 'error';\n draggable?: boolean;\n onClose?: () => void;\n commands?: React.ReactNode[];\n children: React.ReactNode;\n}\n\nexport function Dialog({ title, id, style, draggable, onClose, commands, children }: DialogProps) {\n const draggableRef = useRef<HTMLDivElement>(null);\n const draggableTargetRef = useRef<HTMLDivElement>(null);\n const colorAccent = style === 'error' ? 'rgb(164, 38, 44)' : undefined;\n const cursorDraggable = draggable ? 'move' : undefined;\n\n useDraggable({\n enabled: !!draggable,\n containerElementRef: draggableRef,\n dragElementRef: draggableTargetRef,\n });\n\n return (\n <div id={id} className={styles.overlay}>\n <div ref={draggableRef} className={styles.dialog} style={{ borderTopColor: colorAccent }}>\n <div className={styles.titleArea}>\n <div\n ref={draggableTargetRef}\n className={styles.title}\n style={{ color: colorAccent, cursor: cursorDraggable }}\n >\n {title}\n </div>\n {onClose && (\n <button className={styles.closeButton} onClick={onClose} aria-label=\"Minimize overlay\">\n {/* a close icon is common/universal enough that it doesn't need alt text */}\n <img src={CloseIcon} alt=\"\" />\n </button>\n )}\n </div>\n {commands && <div className={styles.commands}>{...commands}</div>}\n {children}\n </div>\n </div>\n );\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/Dialog/Dialog.module.css\n\n\nlet compiledModule = `.XZLLsVjN-Dialogmodule--overlay {\\n background: rgba(0, 0, 0, 0.1);\\n border: 1px solid black;\\n position: fixed;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n z-index: 999;\\n}\\n\\n@keyframes fade-in {\\n 0% {\\n opacity: 0;\\n }\\n 100% {\\n opacity: 1;\\n }\\n}\\n\\n.XZLLsVjN-Dialogmodule--commands {\\n display: flex;\\n flex-direction: row;\\n gap: 8px;\\n align-items: center;\\n flex-shrink: 0;\\n height: 40px;\\n padding: 0 20px;\\n}\\n\\n.XZLLsVjN-Dialogmodule--dialog {\\n animation: fade-in 0.1s ease-in-out;\\n width: 80vw;\\n align-self: stretch;\\n margin: 20px 0;\\n background: white;\\n color: #000;\\n box-sizing: border-box;\\n display: flex;\\n flex-direction: column;\\n border-top: 4px solid rgb(0, 120, 212);\\n border-radius: 3px;\\n box-shadow:\\n rgb(0 0 0 / 22%) 0px 25.6px 57.6px 0px,\\n rgb(0 0 0 / 18%) 0px 4.8px 14.4px 0px;\\n position: relative;\\n outline: transparent solid 3px;\\n}\\n\\n.XZLLsVjN-Dialogmodule--titleArea {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n padding: 8px 8px 8px 20px;\\n gap: 8px;\\n}\\n\\n.XZLLsVjN-Dialogmodule--closeButton {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 32px;\\n height: 32px;\\n margin: 0;\\n padding: 0;\\n background: transparent;\\n border: none;\\n border-radius: 4px;\\n}\\n\\n.XZLLsVjN-Dialogmodule--closeButton:hover {\\n background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.XZLLsVjN-Dialogmodule--closeButton:active {\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.XZLLsVjN-Dialogmodule--title {\\n flex-grow: 1;\\n font-size: 20px;\\n font-weight: 600;\\n color: rgb(0, 120, 212);\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/Dialog/Dialog.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const closeButton = 'XZLLsVjN-Dialogmodule--closeButton';\nexport const commands = 'XZLLsVjN-Dialogmodule--commands';\nexport const dialog = 'XZLLsVjN-Dialogmodule--dialog';\nexport const overlay = 'XZLLsVjN-Dialogmodule--overlay';\nexport const title = 'XZLLsVjN-Dialogmodule--title';\nexport const titleArea = 'XZLLsVjN-Dialogmodule--titleArea';\nexport default {closeButton, commands, dialog, overlay, title, titleArea}\n", "import React from 'react';\nimport styles from './Searchbox.module.css';\n\nexport interface SearchboxProps {\n value: string;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport function Searchbox({ value, onChange }: SearchboxProps) {\n return (\n <>\n {typeof value === 'string' && (\n <input type=\"text\" placeholder=\"Search\" className={styles.searchbox} onChange={onChange} value={value} />\n )}\n </>\n );\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/StatusDialog/Searchbox.module.css\n\n\nlet compiledModule = `.aJeqJtva-Searchboxmodule--searchbox {\\n position: absolute;\\n font-size: 14px;\\n font-weight: 400;\\n box-shadow: none;\\n padding: 0px 4px;\\n box-sizing: border-box;\\n color: rgb(50, 49, 48);\\n background-color: rgb(255, 255, 255);\\n display: flex;\\n flex-flow: row nowrap;\\n align-items: stretch;\\n border-radius: 2px;\\n border: 1px solid rgb(96, 94, 92);\\n height: 32px;\\n min-width: 160px;\\n top: 52px;\\n right: 20px;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/StatusDialog/Searchbox.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const searchbox = 'aJeqJtva-Searchboxmodule--searchbox';\nexport default {searchbox}\n", "import { default as React } from 'react';\nimport { Button } from '../Button/Button.js';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { PathError } from './PathError.js';\nimport styles from '../StatusDialog/TaskList.module.css';\nimport type { UnsupportedErrorEvent } from './useErrorEvents.js';\nimport { Dialog } from '../Dialog/Dialog.js';\nimport { elementIds } from '../../constants.js';\n\nexport interface ErrorDialogProps {\n unsupported: UnsupportedErrorEvent[];\n}\n\nexport function ErrorDialog({ unsupported }: ErrorDialogProps) {\n const cloudpack = useCloudpack();\n\n const reload = () => {\n void cloudpack.restartAllTasks.mutate();\n };\n\n return (\n <Dialog\n title=\"Found unsupported paths in your project\"\n id={elementIds.errorDialogRoot}\n style=\"error\"\n commands={[\n <Button primary onClick={reload} key=\"1\">\n Restart all tasks\n </Button>,\n ]}\n >\n <div className={styles.root}>\n {unsupported.map((data, index) => (\n <PathError {...data} key={index} />\n ))}\n </div>\n </Dialog>\n );\n}\n", "import React from 'react';\nimport styles from '../StatusDialog/TaskStatus.module.css';\nimport ErrorIcon from '../../images/error-24.inline.svg';\nimport { default as cx } from 'classnames';\nimport ChevronDownIcon from '../../images/chevrondown-20.inline.svg';\nimport type { UnsupportedErrorEvent } from './useErrorEvents.js';\nimport { Button } from '../Button/Button.js';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\n\nexport function PathError(props: UnsupportedErrorEvent) {\n const [showContent, setshowContent] = React.useState<boolean>(false);\n const { packageName, importPath, issuerUrl, fixable } = props;\n const cloudpack = useCloudpack();\n\n const editConfig = () => {\n void cloudpack.openConfigEditor.mutate();\n };\n\n const addOverride = () => {\n void cloudpack.addPackageOverride.mutate({ packageName, importPath, issuerUrl });\n };\n\n return (\n <div className={styles.root}>\n <div className={cx(styles.header, styles.error)}>\n <button\n className={styles.expandButton}\n onClick={() => setshowContent(!showContent)}\n aria-label={showContent ? `Minimize ${packageName}/${importPath}` : `Expand ${packageName}/${importPath}`}\n >\n <img\n className={cx(styles.expandIcon, !showContent && styles.collapsed)}\n src={ChevronDownIcon}\n alt=\"Chevron down icon\"\n />\n </button>\n <img className={styles.errorIcon} src={ErrorIcon} alt=\"Error icon\" />\n <div className={styles.title}>{`${packageName}/${importPath}`}</div>\n </div>\n {showContent && (\n <>\n <div className={styles.commands}>\n {fixable && <Button onClick={addOverride}>Add override</Button>}\n <Button onClick={editConfig}>Edit config file</Button>\n </div>\n <div className={styles.content}>\n <div className={styles.title}>Details</div>\n\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Problem</div>\n <div className={styles.value}>\n {importPath === '.'\n ? `An unrecognized package \"${packageName}\" was imported.`\n : `Path \"${importPath}\" was imported from package \"${packageName}\" but was not recognized as an exported path.`}\n </div>\n </div>\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Solution</div>\n <div className={styles.value}>\n {fixable\n ? `Remove the path from the import in your source. (Import from \"${packageName}\" rather than \"${packageName}/${importPath}\")`\n : importPath === '.'\n ? `Make sure the package name is valid.`\n : `Import not found on package. Make sure the import path is valid.`}\n </div>\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n", "import { useEffect, useState } from 'react';\nimport { parseImportString } from '@ms-cloudpack/path-string-parsing';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { errorEntrySource, type ErrorEntry } from '@ms-cloudpack/api-server/browser';\n\ndeclare global {\n interface Window {\n __pageErrors: {\n uncaughtErrors: ErrorEvent[];\n uncaughtRejections: PromiseRejectionEvent[];\n unregister: () => void;\n };\n }\n}\n\n// Interface with reason as a record.\ninterface ReasonRecord extends PromiseRejectionEvent {\n readonly reason: Record<string, unknown>;\n}\n\n// Interface with message as a string.\ninterface ReasonString extends ReasonRecord {\n readonly reason: { message: string };\n}\n\n// Verify the reason is a record.\nconst reasonIsRecord = (event: PromiseRejectionEvent): event is ReasonRecord => {\n return typeof event.reason === 'object' && !Array.isArray(event.reason) && event.reason !== null;\n};\n\n// Verify the reason has a message which is a string.\nconst hasMessage = (event: PromiseRejectionEvent): event is ReasonString => {\n return reasonIsRecord(event) && typeof event.reason.message === 'string';\n};\n\nexport type UnsupportedErrorEvent = { packageName: string; importPath: string; issuerUrl?: string; fixable?: boolean };\n\nexport const useErrorEvents = () => {\n const [errorEvents, setErrorEvents] = useState<{ unsupported: UnsupportedErrorEvent[] }>({ unsupported: [] });\n const cloudpack = useCloudpack();\n\n useEffect(() => {\n const handleUnsupportedError = (message: string, issuerUrl?: string): void => {\n const errorRegex = /[Mm]odule specifier,? ['\"](.*?)['\"]/;\n const match = message.match(errorRegex);\n\n if (match) {\n const importString = parseImportString(match[1]);\n const { packageName } = importString;\n const importPath = importString.importPath.replace(/^\\.\\//, '');\n\n (async () => {\n const { fixable } = await cloudpack.validatePackageOverride.query({ packageName, importPath, issuerUrl });\n setErrorEvents((prev) => ({\n ...prev,\n unsupported: [...prev.unsupported, { packageName, importPath, issuerUrl: issuerUrl, fixable }],\n }));\n })().catch(() => {\n // no-op\n });\n }\n };\n\n const subscription = cloudpack.onDataChanged.subscribe(errorEntrySource, {\n onData: (data) => {\n if (data) {\n console.error(data);\n handleUnsupportedError(data as ErrorEntry);\n }\n },\n });\n\n const pageErrors = window.__pageErrors;\n\n pageErrors.unregister();\n\n // Append unsupported paths to the list.\n window.addEventListener('error', (event: ErrorEvent) => {\n handleUnsupportedError(event.message, event.filename);\n });\n\n // Handle errors caught before rendering.\n for (const error of pageErrors.uncaughtErrors) {\n handleUnsupportedError(error.message, error.filename);\n }\n\n // Append unsupported paths to the list.\n window.addEventListener('unhandledrejection', (event: PromiseRejectionEvent) => {\n hasMessage(event) && handleUnsupportedError(event.reason.message);\n });\n\n // Handle rejections caught before rendering.\n for (const error of pageErrors.uncaughtRejections) {\n hasMessage(error) && handleUnsupportedError(error.reason.message);\n }\n\n return () => {\n subscription.unsubscribe();\n };\n }, [cloudpack]);\n\n return errorEvents;\n};\n", "import React from 'react';\nimport { useCloudpack } from '../components/CloudpackProvider/CloudpackProvider.js';\n\nexport function usePageLoadTimeReporter() {\n const [pageLoadTime, setPageLoadTime] = React.useState<number>();\n const cloudpack = useCloudpack();\n\n React.useEffect(() => {\n async function reportPageLoadTime() {\n const { getPageLoadTime, getBrowserCacheRatio } = window.__cloudpack;\n\n const newPageLoadTime = await getPageLoadTime();\n setPageLoadTime(newPageLoadTime);\n await cloudpack.reportMetric.mutate({ metric: 'PAGE_LOAD_TIME', value: newPageLoadTime });\n\n // Page is loaded, the browser cache ratio can be reported\n await cloudpack.reportMetric.mutate({ metric: 'BROWSER_CACHE_RATIO', value: getBrowserCacheRatio() });\n }\n\n void reportPageLoadTime();\n }, [cloudpack]);\n\n return pageLoadTime;\n}\n", "import React from 'react';\nimport styles from './ThemeProvider.module.css';\n\nexport function ThemeProvider({ children }: React.ComponentProps<'div'>) {\n return <div className={styles.root}>{children}</div>;\n}\n", "// THIS FILE IS AUTO GENERATED FROM packages/overlay/src/components/ThemeProvider/ThemeProvider.module.css\n\n\nlet compiledModule = `.ASWLkl-ThemeProvidermodule--root {\\n font-family:\\n Inter,\\n -apple-system,\\n BlinkMacSystemFont,\\n 'Segoe UI',\\n Roboto,\\n Oxygen,\\n Ubuntu,\\n Cantarell,\\n 'Fira Sans',\\n 'Droid Sans',\\n 'Helvetica Neue',\\n sans-serif;\\n}\\n`;\nconst s = document.createElement('style');\ns.setAttribute('data-sourceFile', 'packages/overlay/src/components/ThemeProvider/ThemeProvider.module.css');\ns.appendChild(document.createTextNode(compiledModule));\ndocument.head.appendChild(s)\nexport const root = 'ASWLkl-ThemeProvidermodule--root';\nexport default {root}\n", "/**\n * Gets the cookies dictionary from the browser.\n */\nexport function getCookies(): Record<string, string> {\n return document.cookie\n .split(';')\n .map((s) => s.split('='))\n .reduce<Record<string, string>>((current, nextValue) => {\n const name = nextValue[0]?.trim();\n const value = decodeURIComponent(nextValue[1]?.trim());\n\n if (name && value) {\n current[name] = value;\n }\n\n return current;\n }, {});\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["React", "React", "useCallback", "useState", "useRef", "React", "useState", "useEffect", "useState", "useState", "useEffect", "inline", "useState", "metric", "React", "badge", "React", "useCallback", "React", "React", "React", "compiledModule", "s", "React", "compiledModule", "s", "collapsed", "content", "error", "root", "success", "value", "warning", "cx", "React", "compiledModule", "s", "React", "React", "name", "cx", "error", "warning", "useEffect", "useState", "useState", "useEffect", "compiledModule", "s", "root", "name", "React", "React", "useRef", "compiledModule", "s", "commands", "title", "titleArea", "title", "commands", "useRef", "React", "React", "compiledModule", "s", "value", "React", "React", "useCallback", "value", "React", "React", "cx", "React", "cx", "React", "useEffect", "useState", "useState", "useEffect", "error", "React", "React", "useState", "useRef", "React", "useCallback", "React", "compiledModule", "s", "root", "React", "s", "name", "value", "React"]
|
|
7
7
|
}
|
|
@@ -37,19 +37,11 @@
|
|
|
37
37
|
"plugins": [
|
|
38
38
|
{
|
|
39
39
|
"plugin": "css-modules",
|
|
40
|
-
"
|
|
41
|
-
"prefixClasses": false
|
|
42
|
-
}
|
|
40
|
+
"prefixClasses": false
|
|
43
41
|
},
|
|
44
42
|
{
|
|
45
43
|
"plugin": "sass",
|
|
46
|
-
"
|
|
47
|
-
"prefixClasses": false
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"plugin": "dynamic-imports",
|
|
52
|
-
"filter": ".dynamic.(js|mjs|ts|tsx)$"
|
|
44
|
+
"prefixClasses": false
|
|
53
45
|
}
|
|
54
46
|
],
|
|
55
47
|
"resolveExtensions": [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "builder:notify",
|
|
3
|
-
"buildId": "
|
|
3
|
+
"buildId": "build_0bc37dda-4b2e-498f-be5d-2b10350bb061",
|
|
4
4
|
"buildStatus": "complete",
|
|
5
5
|
"internalError": null,
|
|
6
6
|
"warnings": [],
|
|
@@ -457,7 +457,7 @@
|
|
|
457
457
|
"format": "esm"
|
|
458
458
|
},
|
|
459
459
|
"packages/overlay/src/components/ErrorDialog/useErrorEvents.ts": {
|
|
460
|
-
"bytes":
|
|
460
|
+
"bytes": 3446,
|
|
461
461
|
"imports": [
|
|
462
462
|
{
|
|
463
463
|
"path": "react",
|
|
@@ -473,6 +473,11 @@
|
|
|
473
473
|
"path": "packages/overlay/src/components/CloudpackProvider/CloudpackProvider.tsx",
|
|
474
474
|
"kind": "import-statement",
|
|
475
475
|
"original": "../CloudpackProvider/CloudpackProvider.js"
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"path": "@ms-cloudpack/api-server/browser",
|
|
479
|
+
"kind": "import-statement",
|
|
480
|
+
"external": true
|
|
476
481
|
}
|
|
477
482
|
],
|
|
478
483
|
"format": "esm"
|
|
@@ -633,7 +638,7 @@
|
|
|
633
638
|
"imports": [],
|
|
634
639
|
"exports": [],
|
|
635
640
|
"inputs": {},
|
|
636
|
-
"bytes":
|
|
641
|
+
"bytes": 76811
|
|
637
642
|
},
|
|
638
643
|
"packages/overlay/dist/browser-esm/lib/index.js": {
|
|
639
644
|
"imports": [
|
|
@@ -761,6 +766,11 @@
|
|
|
761
766
|
"kind": "import-statement",
|
|
762
767
|
"external": true
|
|
763
768
|
},
|
|
769
|
+
{
|
|
770
|
+
"path": "@ms-cloudpack/api-server/browser",
|
|
771
|
+
"kind": "import-statement",
|
|
772
|
+
"external": true
|
|
773
|
+
},
|
|
764
774
|
{
|
|
765
775
|
"path": "react",
|
|
766
776
|
"kind": "import-statement",
|
|
@@ -790,13 +800,13 @@
|
|
|
790
800
|
"bytesInOutput": 1087
|
|
791
801
|
},
|
|
792
802
|
"packages/overlay/src/components/StatusBadge/StatusBadge.tsx": {
|
|
793
|
-
"bytesInOutput":
|
|
803
|
+
"bytesInOutput": 4088
|
|
794
804
|
},
|
|
795
805
|
"packages/overlay/src/hooks/useDraggable.ts": {
|
|
796
806
|
"bytesInOutput": 1789
|
|
797
807
|
},
|
|
798
808
|
"packages/overlay/src/components/StatusBadge/StatusBadge.module.css": {
|
|
799
|
-
"bytesInOutput":
|
|
809
|
+
"bytesInOutput": 3594
|
|
800
810
|
},
|
|
801
811
|
"packages/overlay/src/components/CloudpackProvider/useStatus.ts": {
|
|
802
812
|
"bytesInOutput": 643
|
|
@@ -805,19 +815,19 @@
|
|
|
805
815
|
"bytesInOutput": 1239
|
|
806
816
|
},
|
|
807
817
|
"packages/overlay/src/components/StatusDialog/TaskList.tsx": {
|
|
808
|
-
"bytesInOutput":
|
|
818
|
+
"bytesInOutput": 1296
|
|
809
819
|
},
|
|
810
820
|
"packages/overlay/src/components/StatusDialog/TaskStatus.tsx": {
|
|
811
|
-
"bytesInOutput":
|
|
821
|
+
"bytesInOutput": 5267
|
|
812
822
|
},
|
|
813
823
|
"packages/overlay/src/components/StatusDialog/TaskResultItem.tsx": {
|
|
814
|
-
"bytesInOutput":
|
|
824
|
+
"bytesInOutput": 1312
|
|
815
825
|
},
|
|
816
826
|
"packages/overlay/src/components/StatusDialog/TaskResultItem.module.css": {
|
|
817
|
-
"bytesInOutput":
|
|
827
|
+
"bytesInOutput": 1831
|
|
818
828
|
},
|
|
819
829
|
"packages/overlay/src/components/StatusDialog/TaskStatus.module.css": {
|
|
820
|
-
"bytesInOutput":
|
|
830
|
+
"bytesInOutput": 3764
|
|
821
831
|
},
|
|
822
832
|
"packages/overlay/src/images/error-24.inline.svg": {
|
|
823
833
|
"bytesInOutput": 1085
|
|
@@ -829,55 +839,55 @@
|
|
|
829
839
|
"bytesInOutput": 517
|
|
830
840
|
},
|
|
831
841
|
"packages/overlay/src/components/Button/Button.tsx": {
|
|
832
|
-
"bytesInOutput":
|
|
842
|
+
"bytesInOutput": 284
|
|
833
843
|
},
|
|
834
844
|
"packages/overlay/src/components/Button/Button.module.css": {
|
|
835
|
-
"bytesInOutput":
|
|
845
|
+
"bytesInOutput": 2087
|
|
836
846
|
},
|
|
837
847
|
"packages/overlay/src/components/CloudpackProvider/useStatusDetails.ts": {
|
|
838
848
|
"bytesInOutput": 531
|
|
839
849
|
},
|
|
840
850
|
"packages/overlay/src/components/StatusDialog/TaskList.module.css": {
|
|
841
|
-
"bytesInOutput":
|
|
851
|
+
"bytesInOutput": 541
|
|
842
852
|
},
|
|
843
853
|
"packages/overlay/src/components/Dialog/Dialog.tsx": {
|
|
844
|
-
"bytesInOutput":
|
|
854
|
+
"bytesInOutput": 1405
|
|
845
855
|
},
|
|
846
856
|
"packages/overlay/src/components/Dialog/Dialog.module.css": {
|
|
847
|
-
"bytesInOutput":
|
|
857
|
+
"bytesInOutput": 2268
|
|
848
858
|
},
|
|
849
859
|
"packages/overlay/src/images/dismiss-16-filled.inline.svg": {
|
|
850
860
|
"bytesInOutput": 788
|
|
851
861
|
},
|
|
852
862
|
"packages/overlay/src/components/StatusDialog/Searchbox.tsx": {
|
|
853
|
-
"bytesInOutput":
|
|
863
|
+
"bytesInOutput": 333
|
|
854
864
|
},
|
|
855
865
|
"packages/overlay/src/components/StatusDialog/Searchbox.module.css": {
|
|
856
|
-
"bytesInOutput":
|
|
866
|
+
"bytesInOutput": 779
|
|
857
867
|
},
|
|
858
868
|
"packages/overlay/src/components/ErrorDialog/ErrorDialog.tsx": {
|
|
859
|
-
"bytesInOutput":
|
|
869
|
+
"bytesInOutput": 734
|
|
860
870
|
},
|
|
861
871
|
"packages/overlay/src/components/ErrorDialog/PathError.tsx": {
|
|
862
|
-
"bytesInOutput":
|
|
872
|
+
"bytesInOutput": 3049
|
|
863
873
|
},
|
|
864
874
|
"packages/overlay/src/components/ErrorDialog/useErrorEvents.ts": {
|
|
865
|
-
"bytesInOutput":
|
|
875
|
+
"bytesInOutput": 2272
|
|
866
876
|
},
|
|
867
877
|
"packages/overlay/src/hooks/usePageLoadTimeReporter.ts": {
|
|
868
878
|
"bytesInOutput": 692
|
|
869
879
|
},
|
|
870
880
|
"packages/overlay/src/components/ThemeProvider/ThemeProvider.tsx": {
|
|
871
|
-
"bytesInOutput":
|
|
881
|
+
"bytesInOutput": 178
|
|
872
882
|
},
|
|
873
883
|
"packages/overlay/src/components/ThemeProvider/ThemeProvider.module.css": {
|
|
874
|
-
"bytesInOutput":
|
|
884
|
+
"bytesInOutput": 607
|
|
875
885
|
},
|
|
876
886
|
"packages/overlay/src/components/CloudpackProvider/getCookies.ts": {
|
|
877
887
|
"bytesInOutput": 317
|
|
878
888
|
}
|
|
879
889
|
},
|
|
880
|
-
"bytes":
|
|
890
|
+
"bytes": 49439
|
|
881
891
|
},
|
|
882
892
|
"packages/overlay/dist/browser-esm/chunks/js/chunk-PDWQRLCD.js.map": {
|
|
883
893
|
"imports": [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useErrorEvents.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorDialog/useErrorEvents.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useErrorEvents.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorDialog/useErrorEvents.ts"],"names":[],"mappings":"AAKA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,YAAY,EAAE;YACZ,cAAc,EAAE,UAAU,EAAE,CAAC;YAC7B,kBAAkB,EAAE,qBAAqB,EAAE,CAAC;YAC5C,UAAU,EAAE,MAAM,IAAI,CAAC;SACxB,CAAC;KACH;CACF;AAsBD,MAAM,MAAM,qBAAqB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvH,eAAO,MAAM,cAAc;iBACqC,qBAAqB,EAAE;CAgEtF,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
2
|
import { parseImportString } from '@ms-cloudpack/path-string-parsing';
|
|
3
3
|
import { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';
|
|
4
|
+
import { errorEntrySource } from '@ms-cloudpack/api-server/browser';
|
|
4
5
|
// Verify the reason is a record.
|
|
5
6
|
const reasonIsRecord = (event) => {
|
|
6
7
|
return typeof event.reason === 'object' && !Array.isArray(event.reason) && event.reason !== null;
|
|
@@ -31,6 +32,14 @@ export const useErrorEvents = () => {
|
|
|
31
32
|
});
|
|
32
33
|
}
|
|
33
34
|
};
|
|
35
|
+
const subscription = cloudpack.onDataChanged.subscribe(errorEntrySource, {
|
|
36
|
+
onData: (data) => {
|
|
37
|
+
if (data) {
|
|
38
|
+
console.error(data);
|
|
39
|
+
handleUnsupportedError(data);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
});
|
|
34
43
|
const pageErrors = window.__pageErrors;
|
|
35
44
|
pageErrors.unregister();
|
|
36
45
|
// Append unsupported paths to the list.
|
|
@@ -49,6 +58,9 @@ export const useErrorEvents = () => {
|
|
|
49
58
|
for (const error of pageErrors.uncaughtRejections) {
|
|
50
59
|
hasMessage(error) && handleUnsupportedError(error.reason.message);
|
|
51
60
|
}
|
|
61
|
+
return () => {
|
|
62
|
+
subscription.unsubscribe();
|
|
63
|
+
};
|
|
52
64
|
}, [cloudpack]);
|
|
53
65
|
return errorEvents;
|
|
54
66
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useErrorEvents.js","sourceRoot":"","sources":["../../../src/components/ErrorDialog/useErrorEvents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"useErrorEvents.js","sourceRoot":"","sources":["../../../src/components/ErrorDialog/useErrorEvents.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\nimport { parseImportString } from '@ms-cloudpack/path-string-parsing';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport { errorEntrySource, type ErrorEntry } from '@ms-cloudpack/api-server/browser';\n\ndeclare global {\n interface Window {\n __pageErrors: {\n uncaughtErrors: ErrorEvent[];\n uncaughtRejections: PromiseRejectionEvent[];\n unregister: () => void;\n };\n }\n}\n\n// Interface with reason as a record.\ninterface ReasonRecord extends PromiseRejectionEvent {\n readonly reason: Record<string, unknown>;\n}\n\n// Interface with message as a string.\ninterface ReasonString extends ReasonRecord {\n readonly reason: { message: string };\n}\n\n// Verify the reason is a record.\nconst reasonIsRecord = (event: PromiseRejectionEvent): event is ReasonRecord => {\n return typeof event.reason === 'object' && !Array.isArray(event.reason) && event.reason !== null;\n};\n\n// Verify the reason has a message which is a string.\nconst hasMessage = (event: PromiseRejectionEvent): event is ReasonString => {\n return reasonIsRecord(event) && typeof event.reason.message === 'string';\n};\n\nexport type UnsupportedErrorEvent = { packageName: string; importPath: string; issuerUrl?: string; fixable?: boolean };\n\nexport const useErrorEvents = () => {\n const [errorEvents, setErrorEvents] = useState<{ unsupported: UnsupportedErrorEvent[] }>({ unsupported: [] });\n const cloudpack = useCloudpack();\n\n useEffect(() => {\n const handleUnsupportedError = (message: string, issuerUrl?: string): void => {\n const errorRegex = /[Mm]odule specifier,? ['\"](.*?)['\"]/;\n const match = message.match(errorRegex);\n\n if (match) {\n const importString = parseImportString(match[1]);\n const { packageName } = importString;\n const importPath = importString.importPath.replace(/^\\.\\//, '');\n\n (async () => {\n const { fixable } = await cloudpack.validatePackageOverride.query({ packageName, importPath, issuerUrl });\n setErrorEvents((prev) => ({\n ...prev,\n unsupported: [...prev.unsupported, { packageName, importPath, issuerUrl: issuerUrl, fixable }],\n }));\n })().catch(() => {\n // no-op\n });\n }\n };\n\n const subscription = cloudpack.onDataChanged.subscribe(errorEntrySource, {\n onData: (data) => {\n if (data) {\n console.error(data);\n handleUnsupportedError(data as ErrorEntry);\n }\n },\n });\n\n const pageErrors = window.__pageErrors;\n\n pageErrors.unregister();\n\n // Append unsupported paths to the list.\n window.addEventListener('error', (event: ErrorEvent) => {\n handleUnsupportedError(event.message, event.filename);\n });\n\n // Handle errors caught before rendering.\n for (const error of pageErrors.uncaughtErrors) {\n handleUnsupportedError(error.message, error.filename);\n }\n\n // Append unsupported paths to the list.\n window.addEventListener('unhandledrejection', (event: PromiseRejectionEvent) => {\n hasMessage(event) && handleUnsupportedError(event.reason.message);\n });\n\n // Handle rejections caught before rendering.\n for (const error of pageErrors.uncaughtRejections) {\n hasMessage(error) && handleUnsupportedError(error.reason.message);\n }\n\n return () => {\n subscription.unsubscribe();\n };\n }, [cloudpack]);\n\n return errorEvents;\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ms-cloudpack/overlay",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.6",
|
|
4
4
|
"description": "The Cloudpack overlay ux.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -28,14 +28,14 @@
|
|
|
28
28
|
"lint": "cloudpack-scripts lint"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@ms-cloudpack/api-server": "^0.44.
|
|
31
|
+
"@ms-cloudpack/api-server": "^0.44.6",
|
|
32
32
|
"@ms-cloudpack/path-string-parsing": "^1.2.2",
|
|
33
33
|
"classnames": "^2.0.0",
|
|
34
34
|
"react": "^17.0.0 || ^18.0.0",
|
|
35
35
|
"react-dom": "^17.0.0 || ^18.0.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@ms-cloudpack/common-types": "^0.5.
|
|
38
|
+
"@ms-cloudpack/common-types": "^0.5.4",
|
|
39
39
|
"@ms-cloudpack/eslint-plugin-internal": "^0.0.1",
|
|
40
40
|
"@ms-cloudpack/scripts": "^0.0.1",
|
|
41
41
|
"@types/react": "^17.0.58",
|
|
File without changes
|