@ms-cloudpack/overlay 0.16.56 → 0.16.58

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.
@@ -175,10 +175,10 @@ function CloudpackProvider({ children }) {
175
175
  var useCloudpack = () => useContext(CloudpackContext);
176
176
 
177
177
  // packages/overlay/src/components/StatusOverlay/StatusOverlay.tsx
178
- import React13, { useCallback as useCallback2, useState as useState6, useRef as useRef3 } from "react";
178
+ import React13, { useCallback as useCallback3, useState as useState7, useRef as useRef3 } from "react";
179
179
 
180
180
  // packages/overlay/src/components/StatusBadge/StatusBadge.tsx
181
- import React2, { useRef } from "react";
181
+ import React2, { useCallback, useRef, useState as useState4 } from "react";
182
182
 
183
183
  // packages/overlay/src/hooks/useDraggable.ts
184
184
  import { useEffect, useState as useState2 } from "react";
@@ -348,6 +348,18 @@ var compiledModule = `.uHuWYf-StatusBadgemodule--fixedOverlay {
348
348
  .uHuWYf-StatusBadgemodule--metric {
349
349
  margin-left: 2px;
350
350
  }
351
+
352
+ .uHuWYf-StatusBadgemodule--collapsed {
353
+ overflow: hidden;
354
+ padding: 0;
355
+ }
356
+ .uHuWYf-StatusBadgemodule--collapsed *:not(.uHuWYf-StatusBadgemodule--chevron) {
357
+ display: none;
358
+ }
359
+
360
+ .uHuWYf-StatusBadgemodule--chevron {
361
+ padding: 0 3px;
362
+ }
351
363
  `;
352
364
  var s = document.createElement("style");
353
365
  s.setAttribute("data-sourceFile", "packages/overlay/src/components/StatusBadge/StatusBadge.module.css");
@@ -356,6 +368,8 @@ document.head.appendChild(s);
356
368
  var badge = "uHuWYf-StatusBadgemodule--badge";
357
369
  var building = "uHuWYf-StatusBadgemodule--building";
358
370
  var button = "uHuWYf-StatusBadgemodule--button";
371
+ var chevron = "uHuWYf-StatusBadgemodule--chevron";
372
+ var collapsed = "uHuWYf-StatusBadgemodule--collapsed";
359
373
  var contentSurface = "uHuWYf-StatusBadgemodule--contentSurface";
360
374
  var error = "uHuWYf-StatusBadgemodule--error";
361
375
  var fixedOverlay = "uHuWYf-StatusBadgemodule--fixedOverlay";
@@ -366,7 +380,7 @@ var metric = "uHuWYf-StatusBadgemodule--metric";
366
380
  var success = "uHuWYf-StatusBadgemodule--success";
367
381
  var value = "uHuWYf-StatusBadgemodule--value";
368
382
  var warning = "uHuWYf-StatusBadgemodule--warning";
369
- var StatusBadge_module_default = { badge, building, button, contentSurface, error, fixedOverlay, grip, gripArea, inline, metric, success, value, warning };
383
+ var StatusBadge_module_default = { badge, building, button, chevron, collapsed, contentSurface, error, fixedOverlay, grip, gripArea, inline, metric, success, value, warning };
370
384
 
371
385
  // packages/overlay/src/components/StatusBadge/StatusBadge.tsx
372
386
  import { default as cx } from "classnames";
@@ -393,7 +407,12 @@ function StatusBadge({ inline: inline2, onExpand, pageLoadTime }) {
393
407
  const rootElementRef = useRef(null);
394
408
  const dragElementRef = useRef(null);
395
409
  const status = useStatus();
410
+ const [isCollapsed, setIsCollapsed] = useState4(false);
396
411
  const shouldRender = status.status !== "unknown";
412
+ const toggleBadgeVisibility = useCallback(() => {
413
+ console.log(`Toggling collapsed state to ${!isCollapsed}`);
414
+ setIsCollapsed(!isCollapsed);
415
+ }, [isCollapsed]);
397
416
  useDraggable({
398
417
  // If we're not yet able to render, don't enable dragging yet.
399
418
  // Otherwise the event handlers won't be attached when the component renders.
@@ -405,7 +424,20 @@ function StatusBadge({ inline: inline2, onExpand, pageLoadTime }) {
405
424
  return null;
406
425
  }
407
426
  const metric2 = pageLoadTime ? /* @__PURE__ */ React2.createElement("span", { className: StatusBadge_module_default.metric, title: "Page Load Time" }, "in ", pageLoadTime.toFixed(2), " ms") : null;
408
- const badge2 = /* @__PURE__ */ React2.createElement("div", { id: elementIds.statusBadgeRoot, ref: rootElementRef, className: getStatusClassName(status, !!inline2) }, !inline2 && /* @__PURE__ */ React2.createElement("div", { ref: dragElementRef, className: StatusBadge_module_default.gripArea }, /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_module_default.grip }), /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_module_default.grip })), /* @__PURE__ */ React2.createElement("button", { className: StatusBadge_module_default.button, onClick: onExpand, "aria-label": "Expand overlay" }, /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_module_default.value }, getStatusString(status))), /* @__PURE__ */ React2.createElement("div", null, getStatsString(status), metric2));
427
+ const leftChevron = "\xAB";
428
+ const rightChevron = "\xBB";
429
+ const badge2 = /* @__PURE__ */ React2.createElement(
430
+ "div",
431
+ {
432
+ id: elementIds.statusBadgeRoot,
433
+ ref: rootElementRef,
434
+ className: `${getStatusClassName(status, !!inline2)} ${getCollapsedClassName(isCollapsed)}`
435
+ },
436
+ !inline2 && /* @__PURE__ */ React2.createElement("div", { ref: dragElementRef, className: StatusBadge_module_default.gripArea }, /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_module_default.grip }), /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_module_default.grip })),
437
+ /* @__PURE__ */ React2.createElement("button", { className: StatusBadge_module_default.button, onClick: onExpand, "aria-label": "Expand overlay" }, /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_module_default.value }, getStatusString(status))),
438
+ /* @__PURE__ */ React2.createElement("div", null, getStatsString(status), metric2),
439
+ /* @__PURE__ */ React2.createElement("button", { className: `${StatusBadge_module_default.button} ${StatusBadge_module_default.chevron}`, onClick: toggleBadgeVisibility }, isCollapsed ? leftChevron : rightChevron)
440
+ );
409
441
  return inline2 ? badge2 : /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_module_default.fixedOverlay }, /* @__PURE__ */ React2.createElement("div", { className: StatusBadge_module_default.contentSurface }, badge2));
410
442
  }
411
443
  function getStatusString(status) {
@@ -426,6 +458,11 @@ function getStatusClassName({ status, totalTasks, totalErrors, totalWarnings },
426
458
  [StatusBadge_module_default.warning]: status === "idle" && totalErrors === 0 && totalWarnings > 0
427
459
  });
428
460
  }
461
+ function getCollapsedClassName(isCollapsed) {
462
+ return cx(StatusBadge_module_default.badge, {
463
+ [StatusBadge_module_default.collapsed]: isCollapsed
464
+ });
465
+ }
429
466
  function getStatsString({ totalTasks, remainingTasks, totalErrors, totalWarnings }) {
430
467
  if (totalTasks === 0) {
431
468
  return "";
@@ -441,7 +478,7 @@ function getStatsString({ totalTasks, remainingTasks, totalErrors, totalWarnings
441
478
  }
442
479
 
443
480
  // packages/overlay/src/components/StatusDialog/StatusDialog.tsx
444
- import React9, { useCallback } from "react";
481
+ import React9, { useCallback as useCallback2 } from "react";
445
482
 
446
483
  // packages/overlay/src/components/StatusDialog/TaskList.tsx
447
484
  import React6 from "react";
@@ -685,7 +722,7 @@ var s3 = document.createElement("style");
685
722
  s3.setAttribute("data-sourceFile", "packages/overlay/src/components/StatusDialog/TaskStatus.module.css");
686
723
  s3.appendChild(document.createTextNode(compiledModule3));
687
724
  document.head.appendChild(s3);
688
- var collapsed = "WGSBzu-TaskStatusmodule--collapsed";
725
+ var collapsed2 = "WGSBzu-TaskStatusmodule--collapsed";
689
726
  var commands = "WGSBzu-TaskStatusmodule--commands";
690
727
  var content2 = "WGSBzu-TaskStatusmodule--content";
691
728
  var error2 = "WGSBzu-TaskStatusmodule--error";
@@ -702,7 +739,7 @@ var success2 = "WGSBzu-TaskStatusmodule--success";
702
739
  var title = "WGSBzu-TaskStatusmodule--title";
703
740
  var value2 = "WGSBzu-TaskStatusmodule--value";
704
741
  var warning2 = "WGSBzu-TaskStatusmodule--warning";
705
- var TaskStatus_module_default = { collapsed, commands, content: content2, error: error2, expandButton, expandIcon, farArea, header, linkButton, name, resultItems, root: root2, subTitle, success: success2, title, value: value2, warning: warning2 };
742
+ var TaskStatus_module_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 };
706
743
 
707
744
  // packages/overlay/src/components/StatusDialog/TaskStatus.tsx
708
745
  import { default as cx2 } from "classnames";
@@ -865,11 +902,11 @@ function getHeaderClassName(task) {
865
902
  }
866
903
 
867
904
  // packages/overlay/src/components/CloudpackProvider/useStatusDetails.ts
868
- import { useEffect as useEffect3, useState as useState4 } from "react";
905
+ import { useEffect as useEffect3, useState as useState5 } from "react";
869
906
  import { taskListSource } from "@ms-cloudpack/api-server/client";
870
907
  var useStatusDetails = () => {
871
908
  const service = useCloudpack();
872
- const [details, setDetails] = useState4({ tasks: [] });
909
+ const [details, setDetails] = useState5({ tasks: [] });
873
910
  useEffect3(() => service?.subscribe(taskListSource, setDetails), [service]);
874
911
  return details;
875
912
  };
@@ -1091,7 +1128,7 @@ function StatusDialog({ onClose }) {
1091
1128
  const cloudpack = useCloudpack();
1092
1129
  const [searchFilter, setSearchFilter] = React9.useState("");
1093
1130
  const [issuesOnly, setIssuesOnly] = React9.useState(false);
1094
- const handleSearchChange = useCallback((event) => {
1131
+ const handleSearchChange = useCallback2((event) => {
1095
1132
  event.preventDefault();
1096
1133
  setSearchFilter(event.target.value);
1097
1134
  }, []);
@@ -1171,7 +1208,7 @@ function ErrorDialog({ unsupported }) {
1171
1208
  }
1172
1209
 
1173
1210
  // packages/overlay/src/components/ErrorDialog/useErrorEvents.ts
1174
- import { useEffect as useEffect4, useState as useState5 } from "react";
1211
+ import { useEffect as useEffect4, useState as useState6 } from "react";
1175
1212
  import { parseImportString } from "@ms-cloudpack/path-string-parsing";
1176
1213
  var reasonIsRecord = (event) => {
1177
1214
  return typeof event.reason === "object" && !Array.isArray(event.reason) && event.reason !== null;
@@ -1180,7 +1217,7 @@ var hasMessage = (event) => {
1180
1217
  return reasonIsRecord(event) && typeof event.reason.message === "string";
1181
1218
  };
1182
1219
  var useErrorEvents = () => {
1183
- const [errorEvents, setErrorEvents] = useState5({ unsupported: [] });
1220
+ const [errorEvents, setErrorEvents] = useState6({ unsupported: [] });
1184
1221
  const cloudpack = useCloudpack();
1185
1222
  useEffect4(() => {
1186
1223
  const handleUnsupportedError = (message, issuerUrl) => {
@@ -1239,7 +1276,7 @@ function usePageLoadTimeReporter() {
1239
1276
  // packages/overlay/src/components/StatusOverlay/StatusOverlay.tsx
1240
1277
  function StatusOverlay() {
1241
1278
  const pageLoadTime = usePageLoadTimeReporter();
1242
- const [isExpanded, setIsExpanded] = useState6(false);
1279
+ const [isExpanded, setIsExpanded] = useState7(false);
1243
1280
  const status = useStatus();
1244
1281
  const prevStatus = useRef3();
1245
1282
  const { unsupported } = useErrorEvents();
@@ -1249,7 +1286,7 @@ function StatusOverlay() {
1249
1286
  }
1250
1287
  prevStatus.current = status;
1251
1288
  }, [status, isExpanded]);
1252
- const toggleMinimized = useCallback2(() => {
1289
+ const toggleMinimized = useCallback3(() => {
1253
1290
  console.log(`Toggling minimized state to ${!isExpanded}`);
1254
1291
  setIsExpanded(!isExpanded);
1255
1292
  }, [isExpanded]);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/index.tsx", "../../../src/components/CloudpackProvider/CloudpackProvider.tsx", "../../../src/components/CloudpackProvider/getCookies.ts", "../../../src/components/CloudpackProvider/createCloudpackClient.ts", "../../../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"],
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 { elementIds } from './constants.js';\n\nconst rootDiv = document.createElement('div');\nrootDiv.id = elementIds.root;\n\nReactDOM.render(\n <ThemeProvider>\n <CloudpackProvider>\n <StatusOverlay />\n </CloudpackProvider>\n </ThemeProvider>,\n rootDiv,\n);\n\ndocument.body.appendChild(rootDiv);\n", "import React, { createContext, useState, useContext } from 'react';\nimport { createCloudpackClient, type CloudpackClient } from './createCloudpackClient.js';\n\nexport const CloudpackContext = createContext<CloudpackClient>(null as unknown as CloudpackClient);\n\nexport function CloudpackProvider({ children }: { children: React.ReactNode }) {\n const [client] = useState(createCloudpackClient);\n\n return <CloudpackContext.Provider value={client}>{children}</CloudpackContext.Provider>;\n}\n\nexport const useCloudpack = () => useContext(CloudpackContext);\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", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getCookies } from './getCookies.js';\nimport { createDataBus, type DataBusPath } from '@ms-cloudpack/data-bus';\nimport type {\n AddPackageOverrideInput,\n OpenCodeEditorInput,\n OpenFilePathInput,\n ReportMetricInput,\n ValidatePackageOverrideInput,\n ValidatePackageOverrideOutput,\n} from '@ms-cloudpack/api-server';\nimport type { z } from 'zod';\nimport { cookieNames } from '../../constants.js';\n\nexport interface CloudpackClient {\n /**\n * Closes the websocket connection.\n */\n dispose(): void;\n getValue<TZodData extends z.ZodType>(path: DataBusPath<TZodData>): z.infer<TZodData>;\n /**\n * Creates a subscription to the given path.\n */\n subscribe<TZodData extends z.ZodType>(\n path: DataBusPath<TZodData>,\n callback: (newValue: any, oldValue: any) => void,\n ): () => void;\n\n openSource(options: OpenCodeEditorInput): void;\n open(options: OpenFilePathInput): void;\n editConfig(): void;\n addOverride(options: AddPackageOverrideInput): void;\n validateOverride(options: ValidatePackageOverrideInput): Promise<ValidatePackageOverrideOutput>;\n restartAllTasks(): void;\n restartTask(options: { id: string; inputPath: string }): void;\n reportMetric(options: ReportMetricInput): void;\n}\n\nexport function createCloudpackClient(): CloudpackClient {\n const cookies = getCookies();\n const bus = createDataBus();\n let subCounter = 0;\n const subIds: Record<string, number> = {};\n\n bus.addProvider({\n path: [],\n onActivate: ({ path }) => {\n const id = subCounter++;\n subIds[path.join('/')] = id;\n sendMessage({ type: 'subscribe', data: { path, id } });\n },\n\n onDeactivate: ({ path }) => {\n const pathString = path.join('/');\n const id = subIds[pathString];\n delete subIds[pathString];\n sendMessage({ type: 'unsubscribe', data: { path, id } });\n },\n });\n\n const enqueuedMessages: string[] = [];\n const sessionId = cookies[cookieNames.sessionId];\n const apiUrl = cookies[cookieNames.apiUrl];\n const currentSequence = cookies[cookieNames.sessionSequence];\n let socket: WebSocket | undefined;\n let idCount = 0;\n\n /**\n * Attempts to open the websocket connection.\n */\n function openConnection() {\n if (apiUrl && sessionId) {\n const newSocket = new WebSocket(apiUrl);\n\n newSocket.onopen = () => {\n console.log('socket opened');\n socket = newSocket;\n socket.onmessage = onMessageReceived;\n socket.onclose = () => {\n socket = undefined;\n };\n\n // Initialize any pending subscriptions.\n for (const message of enqueuedMessages) {\n socket.send(message);\n }\n enqueuedMessages.length = 0;\n };\n }\n }\n\n /**\n * Sends a message to the websocket.\n */\n function sendMessage(options: { type: string; requestId?: string; data: unknown }) {\n const { type, requestId, data } = options;\n const message = JSON.stringify({ type, requestId, data });\n if (socket) {\n socket.send(message);\n } else {\n enqueuedMessages.push(message);\n }\n }\n\n const activeRequests: Record<\n string,\n {\n resolve: (value: any) => void;\n reject: (reason: any) => void;\n }\n > = {};\n\n /**\n * Sends a request to the websocket and returns a promise that resolves when the response is received.\n */\n function sendRequest(options: { type: string; data: unknown }) {\n const { type, data } = options;\n const requestId = `${idCount++}`;\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n if (activeRequests[requestId]) {\n reject(new Error('Request timed out.'));\n }\n }, 10000);\n\n activeRequests[requestId] = {\n resolve: (resultData) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n resolve(resultData);\n },\n reject: (error) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n reject(error);\n },\n };\n\n sendMessage({ type, requestId, data });\n });\n }\n\n /**\n * Receives a message from the websocket and calls the appropriate callback.\n */\n function onMessageReceived(message: { data: string }) {\n const response = JSON.parse(message.data) as Record<string, unknown>;\n const requestId = response.requestId as string | undefined;\n\n if (requestId !== undefined) {\n activeRequests[requestId].resolve(response.data);\n return;\n }\n\n switch (response.type) {\n case 'notify': {\n const { path, data } = response;\n\n bus.publish(path as string[], data);\n break;\n }\n\n case 'reload': {\n window.location.reload();\n break;\n }\n\n case 'sequence': {\n const { sequence } = response;\n if (Number(sequence) > Number(currentSequence)) {\n window.location.reload();\n }\n break;\n }\n }\n }\n\n // Start the connection.\n openConnection();\n\n // Return the public API.\n const client: CloudpackClient = {\n dispose: () => {\n socket?.close();\n socket = undefined;\n },\n getValue: (path) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return bus.getData(path);\n },\n open: (options) => {\n sendMessage({ type: 'open', data: options });\n },\n openSource: (options) => {\n sendMessage({ type: 'openSource', data: options });\n },\n subscribe: (path, callback) => {\n return bus.subscribe(path, callback);\n },\n editConfig: () => {\n sendMessage({ type: 'editConfig', data: {} });\n },\n addOverride: (options) => {\n sendMessage({ type: 'addOverride', data: options });\n },\n restartTask: (options) => {\n sendMessage({ type: 'restartTask', data: options });\n },\n restartAllTasks: () => {\n sendMessage({ type: 'restartAllTasks', data: {} });\n },\n validateOverride: (options) => {\n return sendRequest({ type: 'validateOverride', data: options }) as Promise<{ fixable: boolean }>;\n },\n reportMetric: (options) => {\n sendMessage({ type: 'reportMetric', data: options });\n },\n };\n\n return client;\n}\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, { useRef } 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 pageLoadTime?: number;\n}\n\nexport function StatusBadge({ inline, onExpand, pageLoadTime }: StatusBadgeProps) {\n const rootElementRef = useRef<HTMLDivElement>(null);\n const dragElementRef = useRef<HTMLDivElement>(null);\n const status = useStatus();\n\n const shouldRender = status.status !== 'unknown';\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 badge = (\n <div id={elementIds.statusBadgeRoot} ref={rootElementRef} className={getStatusClassName(status, !!inline)}>\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 </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 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`;\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 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, contentSurface, error, fixedOverlay, grip, gripArea, inline, metric, success, value, warning}\n", "import { useEffect, useState } from 'react';\nimport { useCloudpack } from './CloudpackProvider.js';\nimport { taskStatsSource } from '@ms-cloudpack/api-server/client';\nimport type { TaskStats } from '@ms-cloudpack/api-server';\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 service = useCloudpack();\n const [status, setStatus] = useState<CloudpackStatus>(() => service?.getValue(taskStatsSource) || defaultStatus);\n\n useEffect(() => service?.subscribe(taskStatsSource, setStatus), [service]);\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 cloudpack.restartAllTasks();\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 { type TaskDescriptionType, useStatusDetails } from '../CloudpackProvider/useStatusDetails.js';\nimport styles from './TaskList.module.css';\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: TaskDescriptionType, b: TaskDescriptionType) {\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 return a.name < b.name ? -1 : 1;\n}\n", "import React from 'react';\nimport type { TaskDescriptionType } from '../CloudpackProvider/useStatusDetails.js';\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';\nexport interface TaskStatusProps {\n task: TaskDescriptionType;\n}\n\nfunction getCompletion(task: TaskDescriptionType) {\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 && task.errors?.length > 0);\n\n const open = (rootPath: string) => {\n cloudpack.open({\n rootPath,\n });\n };\n\n const openPackage = () => {\n cloudpack.openSource({\n rootPath: task.inputPath,\n relativePath: 'package.json',\n line: 0,\n column: 0,\n });\n };\n\n const restartTask = () => {\n cloudpack.restartTask({ id: task.id, inputPath: task.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 <>\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(task.inputPath)}>\n {task.inputPath}\n </button>\n\n <button className={styles.linkButton} onClick={openPackage}>\n (Package.json)\n </button>\n </div>\n </div>\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Output path</div>\n <button className={styles.linkButton} onClick={() => open(task.outputPath)}>\n {task.outputPath}\n </button>\n </div>\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={task.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={task.inputPath} index={index + 1} />\n ))}\n </div>\n </>\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n\nfunction getHeaderClassName(task: TaskDescriptionType) {\n return cx(styles.header, {\n [styles.success]: task.errors?.length === 0 && task.warnings?.length === 0,\n [styles.warning]: task.errors?.length === 0 && task.warnings?.length > 0,\n [styles.error]: task.errors?.length > 0,\n });\n}\n", "import React from 'react';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport type { TaskResultItemType } from '../CloudpackProvider/useStatusDetails.js';\nimport styles from './TaskResultItem.module.css';\n\nexport interface TaskResultItemProps {\n item: TaskResultItemType;\n projectPath: string;\n index: number;\n}\n\nexport function TaskResultItem({ item, projectPath, index }: TaskResultItemProps) {\n const service = useCloudpack();\n\n const openSource = (ev: React.MouseEvent) => {\n if (item.location) {\n service.openSource({\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 filename = item.location?.file || '(path unavailable)';\n const location = ['', item.location?.line, item.location?.column].filter(Boolean).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}. {filename}\n {location && ` (${location})`}:\n </button>\n </div>\n <div className={styles.text}>{item.text}</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 } from '@ms-cloudpack/api-server/client';\n\nexport interface TaskResultItemType {\n text: string;\n pluginName: string;\n stack: string;\n location?: {\n file: string;\n line: number;\n column: number;\n };\n}\n\nexport interface TaskDescriptionType {\n id: string;\n name: string;\n inputPath: string;\n outputPath: string;\n status: 'pending' | 'complete';\n errors: TaskResultItemType[];\n warnings: TaskResultItemType[];\n durationMilliseconds: number;\n}\n\ninterface CloudpackStatusDetailsType {\n tasks: TaskDescriptionType[];\n}\n\nexport const useStatusDetails = () => {\n const service = useCloudpack();\n const [details, setDetails] = useState<CloudpackStatusDetailsType>({ tasks: [] });\n\n useEffect(() => service?.subscribe(taskListSource, setDetails), [service]);\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 cloudpack.restartAllTasks();\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 cloudpack.editConfig();\n };\n\n const addOverride = () => {\n cloudpack.addOverride({ 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.validateOverride({ 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 cloudpack.reportMetric({ metric: 'PAGE_LOAD_TIME', value: newPageLoadTime });\n\n // Page is loaded, the browser cache ratio can be reported\n cloudpack.reportMetric({ 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"],
5
- "mappings": "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",
6
- "names": ["React", "s", "name", "value", "error", "React", "useCallback", "useState", "useRef", "React", "useState", "useEffect", "useState", "useState", "useEffect", "inline", "metric", "React", "badge", "React", "React", "React", "React", "compiledModule", "s", "React", "compiledModule", "s", "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", "value", "React", "React", "cx", "React", "cx", "React", "useEffect", "useState", "useState", "useEffect", "error", "React", "React", "useState", "useRef", "React", "useCallback", "React", "compiledModule", "s", "root", "React", "React"]
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 { elementIds } from './constants.js';\n\nconst rootDiv = document.createElement('div');\nrootDiv.id = elementIds.root;\n\nReactDOM.render(\n <ThemeProvider>\n <CloudpackProvider>\n <StatusOverlay />\n </CloudpackProvider>\n </ThemeProvider>,\n rootDiv,\n);\n\ndocument.body.appendChild(rootDiv);\n", "import React, { createContext, useState, useContext } from 'react';\nimport { createCloudpackClient, type CloudpackClient } from './createCloudpackClient.js';\n\nexport const CloudpackContext = createContext<CloudpackClient>(null as unknown as CloudpackClient);\n\nexport function CloudpackProvider({ children }: { children: React.ReactNode }) {\n const [client] = useState(createCloudpackClient);\n\n return <CloudpackContext.Provider value={client}>{children}</CloudpackContext.Provider>;\n}\n\nexport const useCloudpack = () => useContext(CloudpackContext);\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", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getCookies } from './getCookies.js';\nimport { createDataBus, type DataBusPath } from '@ms-cloudpack/data-bus';\nimport type {\n AddPackageOverrideInput,\n OpenCodeEditorInput,\n OpenFilePathInput,\n ReportMetricInput,\n ValidatePackageOverrideInput,\n ValidatePackageOverrideOutput,\n} from '@ms-cloudpack/api-server';\nimport type { z } from 'zod';\nimport { cookieNames } from '../../constants.js';\n\nexport interface CloudpackClient {\n /**\n * Closes the websocket connection.\n */\n dispose(): void;\n getValue<TZodData extends z.ZodType>(path: DataBusPath<TZodData>): z.infer<TZodData>;\n /**\n * Creates a subscription to the given path.\n */\n subscribe<TZodData extends z.ZodType>(\n path: DataBusPath<TZodData>,\n callback: (newValue: any, oldValue: any) => void,\n ): () => void;\n\n openSource(options: OpenCodeEditorInput): void;\n open(options: OpenFilePathInput): void;\n editConfig(): void;\n addOverride(options: AddPackageOverrideInput): void;\n validateOverride(options: ValidatePackageOverrideInput): Promise<ValidatePackageOverrideOutput>;\n restartAllTasks(): void;\n restartTask(options: { id: string; inputPath: string }): void;\n reportMetric(options: ReportMetricInput): void;\n}\n\nexport function createCloudpackClient(): CloudpackClient {\n const cookies = getCookies();\n const bus = createDataBus();\n let subCounter = 0;\n const subIds: Record<string, number> = {};\n\n bus.addProvider({\n path: [],\n onActivate: ({ path }) => {\n const id = subCounter++;\n subIds[path.join('/')] = id;\n sendMessage({ type: 'subscribe', data: { path, id } });\n },\n\n onDeactivate: ({ path }) => {\n const pathString = path.join('/');\n const id = subIds[pathString];\n delete subIds[pathString];\n sendMessage({ type: 'unsubscribe', data: { path, id } });\n },\n });\n\n const enqueuedMessages: string[] = [];\n const sessionId = cookies[cookieNames.sessionId];\n const apiUrl = cookies[cookieNames.apiUrl];\n const currentSequence = cookies[cookieNames.sessionSequence];\n let socket: WebSocket | undefined;\n let idCount = 0;\n\n /**\n * Attempts to open the websocket connection.\n */\n function openConnection() {\n if (apiUrl && sessionId) {\n const newSocket = new WebSocket(apiUrl);\n\n newSocket.onopen = () => {\n console.log('socket opened');\n socket = newSocket;\n socket.onmessage = onMessageReceived;\n socket.onclose = () => {\n socket = undefined;\n };\n\n // Initialize any pending subscriptions.\n for (const message of enqueuedMessages) {\n socket.send(message);\n }\n enqueuedMessages.length = 0;\n };\n }\n }\n\n /**\n * Sends a message to the websocket.\n */\n function sendMessage(options: { type: string; requestId?: string; data: unknown }) {\n const { type, requestId, data } = options;\n const message = JSON.stringify({ type, requestId, data });\n if (socket) {\n socket.send(message);\n } else {\n enqueuedMessages.push(message);\n }\n }\n\n const activeRequests: Record<\n string,\n {\n resolve: (value: any) => void;\n reject: (reason: any) => void;\n }\n > = {};\n\n /**\n * Sends a request to the websocket and returns a promise that resolves when the response is received.\n */\n function sendRequest(options: { type: string; data: unknown }) {\n const { type, data } = options;\n const requestId = `${idCount++}`;\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n if (activeRequests[requestId]) {\n reject(new Error('Request timed out.'));\n }\n }, 10000);\n\n activeRequests[requestId] = {\n resolve: (resultData) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n resolve(resultData);\n },\n reject: (error) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n reject(error);\n },\n };\n\n sendMessage({ type, requestId, data });\n });\n }\n\n /**\n * Receives a message from the websocket and calls the appropriate callback.\n */\n function onMessageReceived(message: { data: string }) {\n const response = JSON.parse(message.data) as Record<string, unknown>;\n const requestId = response.requestId as string | undefined;\n\n if (requestId !== undefined) {\n activeRequests[requestId].resolve(response.data);\n return;\n }\n\n switch (response.type) {\n case 'notify': {\n const { path, data } = response;\n\n bus.publish(path as string[], data);\n break;\n }\n\n case 'reload': {\n window.location.reload();\n break;\n }\n\n case 'sequence': {\n const { sequence } = response;\n if (Number(sequence) > Number(currentSequence)) {\n window.location.reload();\n }\n break;\n }\n }\n }\n\n // Start the connection.\n openConnection();\n\n // Return the public API.\n const client: CloudpackClient = {\n dispose: () => {\n socket?.close();\n socket = undefined;\n },\n getValue: (path) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return bus.getData(path);\n },\n open: (options) => {\n sendMessage({ type: 'open', data: options });\n },\n openSource: (options) => {\n sendMessage({ type: 'openSource', data: options });\n },\n subscribe: (path, callback) => {\n return bus.subscribe(path, callback);\n },\n editConfig: () => {\n sendMessage({ type: 'editConfig', data: {} });\n },\n addOverride: (options) => {\n sendMessage({ type: 'addOverride', data: options });\n },\n restartTask: (options) => {\n sendMessage({ type: 'restartTask', data: options });\n },\n restartAllTasks: () => {\n sendMessage({ type: 'restartAllTasks', data: {} });\n },\n validateOverride: (options) => {\n return sendRequest({ type: 'validateOverride', data: options }) as Promise<{ fixable: boolean }>;\n },\n reportMetric: (options) => {\n sendMessage({ type: 'reportMetric', data: options });\n },\n };\n\n return client;\n}\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 rootElementRef = useRef<HTMLDivElement>(null);\n const dragElementRef = useRef<HTMLDivElement>(null);\n const status = useStatus();\n const [isCollapsed, setIsCollapsed] = useState<boolean>(false);\n\n const shouldRender = status.status !== 'unknown';\n\n const toggleBadgeVisibility = useCallback(() => {\n console.log(`Toggling collapsed state to ${!isCollapsed}`);\n setIsCollapsed(!isCollapsed);\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 } from '@ms-cloudpack/api-server/client';\nimport type { TaskStats } from '@ms-cloudpack/api-server';\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 service = useCloudpack();\n const [status, setStatus] = useState<CloudpackStatus>(() => service?.getValue(taskStatsSource) || defaultStatus);\n\n useEffect(() => service?.subscribe(taskStatsSource, setStatus), [service]);\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 cloudpack.restartAllTasks();\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 { type TaskDescriptionType, useStatusDetails } from '../CloudpackProvider/useStatusDetails.js';\nimport styles from './TaskList.module.css';\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: TaskDescriptionType, b: TaskDescriptionType) {\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 return a.name < b.name ? -1 : 1;\n}\n", "import React from 'react';\nimport type { TaskDescriptionType } from '../CloudpackProvider/useStatusDetails.js';\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';\nexport interface TaskStatusProps {\n task: TaskDescriptionType;\n}\n\nfunction getCompletion(task: TaskDescriptionType) {\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 && task.errors?.length > 0);\n\n const open = (rootPath: string) => {\n cloudpack.open({\n rootPath,\n });\n };\n\n const openPackage = () => {\n cloudpack.openSource({\n rootPath: task.inputPath,\n relativePath: 'package.json',\n line: 0,\n column: 0,\n });\n };\n\n const restartTask = () => {\n cloudpack.restartTask({ id: task.id, inputPath: task.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 <>\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(task.inputPath)}>\n {task.inputPath}\n </button>\n\n <button className={styles.linkButton} onClick={openPackage}>\n (Package.json)\n </button>\n </div>\n </div>\n <div className={styles.nameValueArea}>\n <div className={styles.name}>Output path</div>\n <button className={styles.linkButton} onClick={() => open(task.outputPath)}>\n {task.outputPath}\n </button>\n </div>\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={task.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={task.inputPath} index={index + 1} />\n ))}\n </div>\n </>\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n\nfunction getHeaderClassName(task: TaskDescriptionType) {\n return cx(styles.header, {\n [styles.success]: task.errors?.length === 0 && task.warnings?.length === 0,\n [styles.warning]: task.errors?.length === 0 && task.warnings?.length > 0,\n [styles.error]: task.errors?.length > 0,\n });\n}\n", "import React from 'react';\nimport { useCloudpack } from '../CloudpackProvider/CloudpackProvider.js';\nimport type { TaskResultItemType } from '../CloudpackProvider/useStatusDetails.js';\nimport styles from './TaskResultItem.module.css';\n\nexport interface TaskResultItemProps {\n item: TaskResultItemType;\n projectPath: string;\n index: number;\n}\n\nexport function TaskResultItem({ item, projectPath, index }: TaskResultItemProps) {\n const service = useCloudpack();\n\n const openSource = (ev: React.MouseEvent) => {\n if (item.location) {\n service.openSource({\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 filename = item.location?.file || '(path unavailable)';\n const location = ['', item.location?.line, item.location?.column].filter(Boolean).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}. {filename}\n {location && ` (${location})`}:\n </button>\n </div>\n <div className={styles.text}>{item.text}</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 } from '@ms-cloudpack/api-server/client';\n\nexport interface TaskResultItemType {\n text: string;\n pluginName: string;\n stack: string;\n location?: {\n file: string;\n line: number;\n column: number;\n };\n}\n\nexport interface TaskDescriptionType {\n id: string;\n name: string;\n inputPath: string;\n outputPath: string;\n status: 'pending' | 'complete';\n errors: TaskResultItemType[];\n warnings: TaskResultItemType[];\n durationMilliseconds: number;\n}\n\ninterface CloudpackStatusDetailsType {\n tasks: TaskDescriptionType[];\n}\n\nexport const useStatusDetails = () => {\n const service = useCloudpack();\n const [details, setDetails] = useState<CloudpackStatusDetailsType>({ tasks: [] });\n\n useEffect(() => service?.subscribe(taskListSource, setDetails), [service]);\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 cloudpack.restartAllTasks();\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 cloudpack.editConfig();\n };\n\n const addOverride = () => {\n cloudpack.addOverride({ 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.validateOverride({ 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 cloudpack.reportMetric({ metric: 'PAGE_LOAD_TIME', value: newPageLoadTime });\n\n // Page is loaded, the browser cache ratio can be reported\n cloudpack.reportMetric({ 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"],
5
+ "mappings": "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",
6
+ "names": ["React", "s", "name", "value", "error", "React", "useCallback", "useState", "useRef", "React", "useState", "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", "React"]
7
7
  }
@@ -1,28 +1,28 @@
1
1
  {
2
2
  "type": "builder:notify",
3
- "buildId": "build_a08dae63-0a27-4321-ae76-8487c642ed06",
3
+ "buildId": "build_e9bd3e64-e7d5-431a-888c-1d69d854a8e3",
4
4
  "buildStatus": "complete",
5
5
  "internalError": null,
6
6
  "warnings": [],
7
7
  "errors": [],
8
8
  "outputFilePaths": [
9
- "/home/runner/work/cloudpack/cloudpack/packages/overlay/dist/browser-esm/lib/constants.js.map",
10
- "/home/runner/work/cloudpack/cloudpack/packages/overlay/dist/browser-esm/lib/constants.js",
11
9
  "/home/runner/work/cloudpack/cloudpack/packages/overlay/dist/browser-esm/lib/index.js.map",
12
10
  "/home/runner/work/cloudpack/cloudpack/packages/overlay/dist/browser-esm/lib/index.js",
11
+ "/home/runner/work/cloudpack/cloudpack/packages/overlay/dist/browser-esm/lib/constants.js.map",
12
+ "/home/runner/work/cloudpack/cloudpack/packages/overlay/dist/browser-esm/lib/constants.js",
13
13
  "/home/runner/work/cloudpack/cloudpack/packages/overlay/dist/browser-esm/chunks/js/chunk-PDWQRLCD.js.map",
14
14
  "/home/runner/work/cloudpack/cloudpack/packages/overlay/dist/browser-esm/chunks/js/chunk-PDWQRLCD.js"
15
15
  ],
16
16
  "outputFiles": null,
17
17
  "metafile": {
18
18
  "inputs": {
19
- "packages/overlay/src/constants.ts": {
20
- "bytes": 803,
19
+ "packages/overlay/src/components/CloudpackProvider/getCookies.ts": {
20
+ "bytes": 452,
21
21
  "imports": [],
22
22
  "format": "esm"
23
23
  },
24
- "packages/overlay/src/components/CloudpackProvider/getCookies.ts": {
25
- "bytes": 452,
24
+ "packages/overlay/src/constants.ts": {
25
+ "bytes": 803,
26
26
  "imports": [],
27
27
  "format": "esm"
28
28
  },
@@ -75,7 +75,7 @@
75
75
  "format": "esm"
76
76
  },
77
77
  "packages/overlay/src/components/StatusBadge/StatusBadge.module.css": {
78
- "bytes": 3561,
78
+ "bytes": 3951,
79
79
  "imports": [],
80
80
  "format": "esm"
81
81
  },
@@ -101,7 +101,7 @@
101
101
  "format": "esm"
102
102
  },
103
103
  "packages/overlay/src/components/StatusBadge/StatusBadge.tsx": {
104
- "bytes": 3185,
104
+ "bytes": 3894,
105
105
  "imports": [
106
106
  {
107
107
  "path": "react",
@@ -619,32 +619,11 @@
619
619
  }
620
620
  },
621
621
  "outputs": {
622
- "packages/overlay/dist/browser-esm/lib/constants.js.map": {
623
- "imports": [],
624
- "exports": [],
625
- "inputs": {},
626
- "bytes": 93
627
- },
628
- "packages/overlay/dist/browser-esm/lib/constants.js": {
629
- "imports": [
630
- {
631
- "path": "packages/overlay/dist/browser-esm/chunks/js/chunk-PDWQRLCD.js",
632
- "kind": "import-statement"
633
- }
634
- ],
635
- "exports": [
636
- "cookieNames",
637
- "elementIds"
638
- ],
639
- "entryPoint": "packages/overlay/src/constants.ts",
640
- "inputs": {},
641
- "bytes": 156
642
- },
643
622
  "packages/overlay/dist/browser-esm/lib/index.js.map": {
644
623
  "imports": [],
645
624
  "exports": [],
646
625
  "inputs": {},
647
- "bytes": 81059
626
+ "bytes": 82874
648
627
  },
649
628
  "packages/overlay/dist/browser-esm/lib/index.js": {
650
629
  "imports": [
@@ -807,19 +786,19 @@
807
786
  "bytesInOutput": 1087
808
787
  },
809
788
  "packages/overlay/src/components/StatusBadge/StatusBadge.tsx": {
810
- "bytesInOutput": 3205
789
+ "bytesInOutput": 3997
811
790
  },
812
791
  "packages/overlay/src/hooks/useDraggable.ts": {
813
792
  "bytesInOutput": 1803
814
793
  },
815
794
  "packages/overlay/src/components/StatusBadge/StatusBadge.module.css": {
816
- "bytesInOutput": 3241
795
+ "bytesInOutput": 3601
817
796
  },
818
797
  "packages/overlay/src/components/CloudpackProvider/useStatus.ts": {
819
798
  "bytesInOutput": 517
820
799
  },
821
800
  "packages/overlay/src/components/StatusDialog/StatusDialog.tsx": {
822
- "bytesInOutput": 1210
801
+ "bytesInOutput": 1227
823
802
  },
824
803
  "packages/overlay/src/components/StatusDialog/TaskList.tsx": {
825
804
  "bytesInOutput": 1120
@@ -834,7 +813,7 @@
834
813
  "bytesInOutput": 1838
835
814
  },
836
815
  "packages/overlay/src/components/StatusDialog/TaskStatus.module.css": {
837
- "bytesInOutput": 3758
816
+ "bytesInOutput": 3771
838
817
  },
839
818
  "packages/overlay/src/images/error-24.inline.svg": {
840
819
  "bytesInOutput": 1085
@@ -891,7 +870,28 @@
891
870
  "bytesInOutput": 614
892
871
  }
893
872
  },
894
- "bytes": 50849
873
+ "bytes": 52031
874
+ },
875
+ "packages/overlay/dist/browser-esm/lib/constants.js.map": {
876
+ "imports": [],
877
+ "exports": [],
878
+ "inputs": {},
879
+ "bytes": 93
880
+ },
881
+ "packages/overlay/dist/browser-esm/lib/constants.js": {
882
+ "imports": [
883
+ {
884
+ "path": "packages/overlay/dist/browser-esm/chunks/js/chunk-PDWQRLCD.js",
885
+ "kind": "import-statement"
886
+ }
887
+ ],
888
+ "exports": [
889
+ "cookieNames",
890
+ "elementIds"
891
+ ],
892
+ "entryPoint": "packages/overlay/src/constants.ts",
893
+ "inputs": {},
894
+ "bytes": 156
895
895
  },
896
896
  "packages/overlay/dist/browser-esm/chunks/js/chunk-PDWQRLCD.js.map": {
897
897
  "imports": [],
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  export interface StatusBadgeProps {
3
3
  inline?: boolean;
4
4
  onExpand?: () => void;
5
+ onToggle?: () => void;
5
6
  pageLoadTime?: number;
6
7
  }
7
8
  export declare function StatusBadge({ inline, onExpand, pageLoadTime }: StatusBadgeProps): React.JSX.Element | null;
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../../src/components/StatusBadge/StatusBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAOtC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,gBAAgB,4BAkD/E"}
1
+ {"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../../src/components/StatusBadge/StatusBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAO7D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,gBAAgB,4BAiE/E"}
@@ -1,4 +1,4 @@
1
- import React, { useRef } from 'react';
1
+ import React, { useCallback, useRef, useState } from 'react';
2
2
  import { useDraggable } from '../../hooks/useDraggable.js';
3
3
  import styles from './StatusBadge.module.css';
4
4
  import { default as cx } from 'classnames';
@@ -8,7 +8,12 @@ export function StatusBadge({ inline, onExpand, pageLoadTime }) {
8
8
  const rootElementRef = useRef(null);
9
9
  const dragElementRef = useRef(null);
10
10
  const status = useStatus();
11
+ const [isCollapsed, setIsCollapsed] = useState(false);
11
12
  const shouldRender = status.status !== 'unknown';
13
+ const toggleBadgeVisibility = useCallback(() => {
14
+ console.log(`Toggling collapsed state to ${!isCollapsed}`);
15
+ setIsCollapsed(!isCollapsed);
16
+ }, [isCollapsed]);
12
17
  useDraggable({
13
18
  // If we're not yet able to render, don't enable dragging yet.
14
19
  // Otherwise the event handlers won't be attached when the component renders.
@@ -23,7 +28,9 @@ export function StatusBadge({ inline, onExpand, pageLoadTime }) {
23
28
  "in ",
24
29
  pageLoadTime.toFixed(2),
25
30
  " ms")) : null;
26
- const badge = (React.createElement("div", { id: elementIds.statusBadgeRoot, ref: rootElementRef, className: getStatusClassName(status, !!inline) },
31
+ const leftChevron = '\u00AB';
32
+ const rightChevron = '\u00BB';
33
+ const badge = (React.createElement("div", { id: elementIds.statusBadgeRoot, ref: rootElementRef, className: `${getStatusClassName(status, !!inline)} ${getCollapsedClassName(isCollapsed)}` },
27
34
  !inline && (React.createElement("div", { ref: dragElementRef, className: styles.gripArea },
28
35
  React.createElement("div", { className: styles.grip }),
29
36
  React.createElement("div", { className: styles.grip }))),
@@ -31,7 +38,8 @@ export function StatusBadge({ inline, onExpand, pageLoadTime }) {
31
38
  React.createElement("div", { className: styles.value }, getStatusString(status))),
32
39
  React.createElement("div", null,
33
40
  getStatsString(status),
34
- metric)));
41
+ metric),
42
+ React.createElement("button", { className: `${styles.button} ${styles.chevron}`, onClick: toggleBadgeVisibility }, isCollapsed ? leftChevron : rightChevron)));
35
43
  return inline ? (badge) : (React.createElement("div", { className: styles.fixedOverlay },
36
44
  React.createElement("div", { className: styles.contentSurface }, badge)));
37
45
  }
@@ -53,6 +61,11 @@ function getStatusClassName({ status, totalTasks, totalErrors, totalWarnings },
53
61
  [styles.warning]: status === 'idle' && totalErrors === 0 && totalWarnings > 0,
54
62
  });
55
63
  }
64
+ function getCollapsedClassName(isCollapsed) {
65
+ return cx(styles.badge, {
66
+ [styles.collapsed]: isCollapsed,
67
+ });
68
+ }
56
69
  function getStatsString({ totalTasks, remainingTasks, totalErrors, totalWarnings }) {
57
70
  if (totalTasks === 0) {
58
71
  return '';
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../../src/components/StatusBadge/StatusBadge.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useRef } 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 pageLoadTime?: number;\n}\n\nexport function StatusBadge({ inline, onExpand, pageLoadTime }: StatusBadgeProps) {\n const rootElementRef = useRef<HTMLDivElement>(null);\n const dragElementRef = useRef<HTMLDivElement>(null);\n const status = useStatus();\n\n const shouldRender = status.status !== 'unknown';\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 badge = (\n <div id={elementIds.statusBadgeRoot} ref={rootElementRef} className={getStatusClassName(status, !!inline)}>\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 </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 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"]}
1
+ {"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../../src/components/StatusBadge/StatusBadge.tsx"],"names":[],"mappings":"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","sourcesContent":["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 rootElementRef = useRef<HTMLDivElement>(null);\n const dragElementRef = useRef<HTMLDivElement>(null);\n const status = useStatus();\n const [isCollapsed, setIsCollapsed] = useState<boolean>(false);\n\n const shouldRender = status.status !== 'unknown';\n\n const toggleBadgeVisibility = useCallback(() => {\n console.log(`Toggling collapsed state to ${!isCollapsed}`);\n setIsCollapsed(!isCollapsed);\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"]}
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.39.0"
8
+ "packageVersion": "7.39.4"
9
9
  }
10
10
  ]
11
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/overlay",
3
- "version": "0.16.56",
3
+ "version": "0.16.58",
4
4
  "description": "The Cloudpack overlay ux.",
5
5
  "license": "MIT",
6
6
  "types": "./lib/index.d.ts",
@@ -28,7 +28,7 @@
28
28
  "lint": "cloudpack-scripts lint"
29
29
  },
30
30
  "dependencies": {
31
- "@ms-cloudpack/api-server": "^0.29.14",
31
+ "@ms-cloudpack/api-server": "^0.29.16",
32
32
  "@ms-cloudpack/data-bus": "^0.4.2",
33
33
  "@ms-cloudpack/path-string-parsing": "^1.1.3",
34
34
  "react": "^17.0.0 || ^18.0.0",