@ms-cloudpack/overlay 0.13.12 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -126,12 +126,10 @@ function createCloudpackClient() {
126
126
  }
127
127
  }
128
128
  function subscribe(path, callback) {
129
- const sessionPath = [sessionId, ...path];
130
- return bus.subscribe(sessionPath, callback);
129
+ return bus.subscribe(path, callback);
131
130
  }
132
131
  function getValue(path) {
133
- const sessionPath = [sessionId, ...path];
134
- return bus.getData(sessionPath);
132
+ return bus.getData(path);
135
133
  }
136
134
  function openSource(options) {
137
135
  sendMessage({ type: "openSource", data: options });
@@ -380,6 +378,7 @@ import { default as cx } from "classnames";
380
378
 
381
379
  // packages/overlay/src/components/CloudpackProvider/useStatus.ts
382
380
  import { useEffect as useEffect2, useState as useState3 } from "react";
381
+ import { taskStatsSource } from "@ms-cloudpack/api-server/client";
383
382
  var defaultStatus = {
384
383
  status: "unknown",
385
384
  remainingTasks: 0,
@@ -389,10 +388,8 @@ var defaultStatus = {
389
388
  };
390
389
  var useStatus = () => {
391
390
  const service = useCloudpack();
392
- const [status, setStatus] = useState3(
393
- () => service?.getValue(["status"]) || defaultStatus
394
- );
395
- useEffect2(() => service?.subscribe(["status"], setStatus), [service]);
391
+ const [status, setStatus] = useState3(() => service?.getValue(taskStatsSource) || defaultStatus);
392
+ useEffect2(() => service?.subscribe(taskStatsSource, setStatus), [service]);
396
393
  return status;
397
394
  };
398
395
 
@@ -872,10 +869,11 @@ function getHeaderClassName(task) {
872
869
 
873
870
  // packages/overlay/src/components/CloudpackProvider/useStatusDetails.ts
874
871
  import { useEffect as useEffect3, useState as useState4 } from "react";
872
+ import { taskListSource } from "@ms-cloudpack/api-server/client";
875
873
  var useStatusDetails = () => {
876
874
  const service = useCloudpack();
877
875
  const [details, setDetails] = useState4({ tasks: [] });
878
- useEffect3(() => service?.subscribe(["status-details"], setDetails), [service]);
876
+ useEffect3(() => service?.subscribe(taskListSource, setDetails), [service]);
879
877
  return details;
880
878
  };
881
879
 
@@ -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';\n\n/**\n * The id attached to the root element of the overlay div.\n */\nexport const overlayRootDivId = 'cloudpack-overlay-root';\n\nconst rootDiv = document.createElement('div');\nrootDiv.id = overlayRootDivId;\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 } from '@ms-cloudpack/data-bus';\n\nexport interface CloudpackClient {\n dispose: () => void;\n getValue(path: string[]): any;\n subscribe: (path: string[], callback: (newValue: any, oldValue: any) => void) => () => void;\n\n openSource: (options: { rootPath: string; relativePath: string; line: number; column: number }) => void;\n open: (options: { rootPath: string; relativePath?: string }) => void;\n editConfig: () => void;\n addOverride: (options: { packageName: string; importPath: string; filename?: string }) => void;\n validateOverride: (options: {\n packageName: string;\n importPath: string;\n filename?: string;\n }) => Promise<{ fixable: boolean }>;\n restartAllTasks: () => void;\n restartTask: (options: { id: string; inputPath: string }) => void;\n reportMetric: (options: { metric: string; value: number }) => 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['cloudpack-session-id'];\n const apiUrl = cookies['cloudpack-api-url'];\n const currentSequence = cookies['cloudpack-session-sequence'];\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 * Closes the websocket connection.\n */\n function dispose() {\n if (socket) {\n socket.close();\n socket = undefined;\n }\n }\n\n /**\n * Sends a message to the websocket.\n */\n function sendMessage({ type, requestId, data }: { type: string; requestId?: string; data: Record<string, unknown> }) {\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({ type, data }: { type: string; data: Record<string, unknown> }) {\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: (data) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n resolve(data);\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 /**\n * Creates a subscription to the given path.\n */\n function subscribe(path: string[], callback: (newValue: any, oldValue: any) => void) {\n const sessionPath = [sessionId, ...path];\n\n return bus.subscribe(sessionPath, callback);\n }\n\n function getValue(path: string[]): any {\n const sessionPath = [sessionId, ...path];\n\n return bus.getData(sessionPath);\n }\n\n function openSource(options: { rootPath: string; relativePath: string; line: number; column: number }) {\n sendMessage({ type: 'openSource', data: options });\n }\n\n function open(options: { rootPath: string; relativePath?: string }) {\n sendMessage({ type: 'open', data: options });\n }\n\n function editConfig() {\n sendMessage({ type: 'editConfig', data: {} });\n }\n\n function addOverride(options: { packageName: string; importPath: string; filename?: string }) {\n sendMessage({ type: 'addOverride', data: options });\n }\n\n function validateOverride(options: { packageName: string; importPath: string; filename?: string }) {\n return sendRequest({ type: 'validateOverride', data: options }) as Promise<{ fixable: boolean }>;\n }\n\n function restartAllTasks() {\n sendMessage({ type: 'restartAllTasks', data: {} });\n }\n\n function restartTask(options: { id: string; inputPath: string }) {\n sendMessage({ type: 'restartTask', data: options });\n }\n\n function reportMetric(options: { metric: string; value: number }) {\n sendMessage({ type: 'reportMetric', data: options });\n }\n\n // Start the connection.\n openConnection();\n\n // Return the public API.\n return {\n dispose,\n getValue,\n open,\n openSource,\n subscribe,\n editConfig,\n addOverride,\n restartTask,\n restartAllTasks,\n validateOverride,\n reportMetric,\n };\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';\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 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 = `.uHuWYfdxg-StatusBadgemodulecssfixedOverlay {\\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.uHuWYfdxg-StatusBadgemodulecssgripArea {\\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.uHuWYfdxg-StatusBadgemodulecssgrip {\\n width: 2px;\\n height: 100%;\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecsscontentSurface {\\n pointer-events: auto;\\n display: contents;\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecssbadge {\\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.uHuWYfdxg-StatusBadgemodulecssinline {\\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.uHuWYfdxg-StatusBadgemodulecssbuilding {\\n background: #bbb;\\n color: #000;\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecsssuccess {\\n background: #7ad17a;\\n color: #000;\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecsswarning {\\n background: #e4e68b;\\n color: #000;\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecsserror {\\n background: #ffb9b9;\\n color: #000;\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecssbutton {\\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.uHuWYfdxg-StatusBadgemodulecssbutton:hover {\\n filter: invert(0.1);\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecssvalue {\\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.uHuWYfdxg-StatusBadgemodulecssmetric {\\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 = 'uHuWYfdxg-StatusBadgemodulecssbadge';\nexport const building = 'uHuWYfdxg-StatusBadgemodulecssbuilding';\nexport const button = 'uHuWYfdxg-StatusBadgemodulecssbutton';\nexport const contentSurface = 'uHuWYfdxg-StatusBadgemodulecsscontentSurface';\nexport const error = 'uHuWYfdxg-StatusBadgemodulecsserror';\nexport const fixedOverlay = 'uHuWYfdxg-StatusBadgemodulecssfixedOverlay';\nexport const grip = 'uHuWYfdxg-StatusBadgemodulecssgrip';\nexport const gripArea = 'uHuWYfdxg-StatusBadgemodulecssgripArea';\nexport const inline = 'uHuWYfdxg-StatusBadgemodulecssinline';\nexport const metric = 'uHuWYfdxg-StatusBadgemodulecssmetric';\nexport const success = 'uHuWYfdxg-StatusBadgemodulecsssuccess';\nexport const value = 'uHuWYfdxg-StatusBadgemodulecssvalue';\nexport const warning = 'uHuWYfdxg-StatusBadgemodulecsswarning';\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';\n\nexport type CloudpackStatusType = 'unknown' | 'idle' | 'building' | 'success' | 'warning' | 'error' | 'cancelled';\n\n// TODO: fix dupe typings\nexport interface CloudpackStatus {\n status: 'idle' | 'pending' | 'unknown';\n\n remainingTasks: number;\n totalTasks: number;\n\n totalErrors: number;\n totalWarnings: number;\n}\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>(\n () => (service?.getValue(['status']) as CloudpackStatus) || defaultStatus,\n );\n\n useEffect(() => service?.subscribe(['status'], 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';\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\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 return (\n <Dialog\n title=\"Task results\"\n draggable\n onClose={onClose}\n commands={[\n <Button primary onClick={restartAllTasks} key=\"1\">\n Restart all tasks\n </Button>,\n ]}\n >\n <Searchbox value={searchFilter} onChange={handleSearchChange} />\n <TaskList searchFilter={searchFilter} />\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 function TaskList({ searchFilter }: { searchFilter?: string }) {\n const details = useStatusDetails();\n const tasks = (details.tasks || []).sort(sortTasks);\n searchFilter = searchFilter?.toLowerCase();\n\n return (\n <div className={styles.root}>\n {tasks\n .filter(({ name }) => !searchFilter || name.toLowerCase().includes(searchFilter))\n .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 = `.FSsdmcQZfc-TaskResultItemmodulecssroot {\\n display: flex;\\n background: #f5f5f5;\\n}\\n\\n.FSsdmcQZfc-TaskResultItemmodulecssstatusBar {\\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.FSsdmcQZfc-TaskResultItemmodulecsscontent {\\n padding: 8px;\\n display: flex;\\n flex-grow: 1;\\n overflow: hidden;\\n flex-direction: column;\\n}\\n\\n.FSsdmcQZfc-TaskResultItemmodulecsstitleArea {\\n display: flex;\\n align-items: center;\\n flex-direction: row;\\n gap: 4px;\\n padding: 4px 0;\\n}\\n\\n.FSsdmcQZfc-TaskResultItemmodulecssfile {\\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.FSsdmcQZfc-TaskResultItemmodulecssfile:hover {\\n text-decoration: underline;\\n}\\n\\n.FSsdmcQZfc-TaskResultItemmodulecssactionArea {\\n display: flex;\\n flex-direction: row;\\n gap: 8px;\\n flex-shrink: 0;\\n}\\n\\n.FSsdmcQZfc-TaskResultItemmodulecsstext {\\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 = 'FSsdmcQZfc-TaskResultItemmodulecssactionArea';\nexport const content = 'FSsdmcQZfc-TaskResultItemmodulecsscontent';\nexport const file = 'FSsdmcQZfc-TaskResultItemmodulecssfile';\nexport const root = 'FSsdmcQZfc-TaskResultItemmodulecssroot';\nexport const statusBar = 'FSsdmcQZfc-TaskResultItemmodulecssstatusBar';\nexport const text = 'FSsdmcQZfc-TaskResultItemmodulecsstext';\nexport const titleArea = 'FSsdmcQZfc-TaskResultItemmodulecsstitleArea';\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 = `.WGSBzuMGA-TaskStatusmodulecssroot {\\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.WGSBzuMGA-TaskStatusmodulecssheader {\\n display: flex;\\n gap: 8px;\\n padding: 8px 16px;\\n background: #f0f0f0;\\n align-items: center;\\n line-height: 1;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsscommands {\\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.WGSBzuMGA-TaskStatusmodulecssexpandButton {\\n background: transparent;\\n border: none;\\n border-radius: 4px;\\n width: 32px;\\n height: 32px;\\n}\\n.WGSBzuMGA-TaskStatusmodulecssexpandButton:hover {\\n background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecssexpandButton:active {\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecssexpandIcon {\\n transition: transform 0.1s ease-in-out;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsscollapsed {\\n transform: rotate(-90deg);\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecssfarArea {\\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.WGSBzuMGA-TaskStatusmodulecsstitle {\\n font-size: 16px;\\n font-weight: 500;\\n color: #333;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsssubTitle {\\n font-size: 13px;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsscontent {\\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.WGSBzuMGA-TaskStatusmodulecssresultItems {\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsserror {\\n background: #ffe9e9;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsssuccess {\\n background: #e9f9e9;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsswarning {\\n background: #fff9e9;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecssname {\\n font-size: 12px;\\n font-weight: 600;\\n text-transform: uppercase;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecssvalue {\\n display: flex;\\n flex-direction: column;\\n font-size: 14px;\\n color: #333;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsslinkButton {\\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.WGSBzuMGA-TaskStatusmodulecsslinkButton: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 = 'WGSBzuMGA-TaskStatusmodulecsscollapsed';\nexport const commands = 'WGSBzuMGA-TaskStatusmodulecsscommands';\nexport const content = 'WGSBzuMGA-TaskStatusmodulecsscontent';\nexport const error = 'WGSBzuMGA-TaskStatusmodulecsserror';\nexport const expandButton = 'WGSBzuMGA-TaskStatusmodulecssexpandButton';\nexport const expandIcon = 'WGSBzuMGA-TaskStatusmodulecssexpandIcon';\nexport const farArea = 'WGSBzuMGA-TaskStatusmodulecssfarArea';\nexport const header = 'WGSBzuMGA-TaskStatusmodulecssheader';\nexport const linkButton = 'WGSBzuMGA-TaskStatusmodulecsslinkButton';\nexport const name = 'WGSBzuMGA-TaskStatusmodulecssname';\nexport const resultItems = 'WGSBzuMGA-TaskStatusmodulecssresultItems';\nexport const root = 'WGSBzuMGA-TaskStatusmodulecssroot';\nexport const subTitle = 'WGSBzuMGA-TaskStatusmodulecsssubTitle';\nexport const success = 'WGSBzuMGA-TaskStatusmodulecsssuccess';\nexport const title = 'WGSBzuMGA-TaskStatusmodulecsstitle';\nexport const value = 'WGSBzuMGA-TaskStatusmodulecssvalue';\nexport const warning = 'WGSBzuMGA-TaskStatusmodulecsswarning';\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 = `.RpmxvThKZI-ButtonmodulecssstandardButton {\\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.RpmxvThKZI-ButtonmodulecssstandardButton:active {\\n background-color: rgb(237, 235, 233);\\n color: rgb(32, 31, 30);\\n}\\n\\n.RpmxvThKZI-ButtonmodulecssstandardButton:hover {\\n background-color: rgb(243, 242, 241);\\n color: rgb(32, 31, 30);\\n}\\n\\n.RpmxvThKZI-ButtonmodulecssstandardButton:focus {\\n border: 3px solid rgb(0, 0, 0);\\n}\\n\\n.RpmxvThKZI-ButtonmodulecssprimaryButton {\\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.RpmxvThKZI-ButtonmodulecssprimaryButton: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.RpmxvThKZI-ButtonmodulecssprimaryButton: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.RpmxvThKZI-ButtonmodulecssprimaryButton: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 = 'RpmxvThKZI-ButtonmodulecssprimaryButton';\nexport const standardButton = 'RpmxvThKZI-ButtonmodulecssstandardButton';\nexport default {primaryButton, standardButton}\n", "import { useEffect, useState } from 'react';\nimport { useCloudpack } from './CloudpackProvider.js';\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(['status-details'], 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 = `.ZnVPBoZiOc-TaskListmodulecssroot {\\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 = 'ZnVPBoZiOc-TaskListmodulecssroot';\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 style?: 'default' | 'error';\n draggable?: boolean;\n onClose?: () => void;\n commands?: React.ReactNode[];\n children: React.ReactNode;\n}\n\nexport function Dialog({ title, 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 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 = `.XZLLsVjNatw-Dialogmodulecssoverlay {\\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.XZLLsVjNatw-Dialogmodulecsscommands {\\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.XZLLsVjNatw-Dialogmodulecssdialog {\\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.XZLLsVjNatw-DialogmodulecsstitleArea {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n padding: 8px 8px 8px 20px;\\n gap: 8px;\\n}\\n\\n.XZLLsVjNatw-DialogmodulecsscloseButton {\\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.XZLLsVjNatw-DialogmodulecsscloseButton:hover {\\n background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.XZLLsVjNatw-DialogmodulecsscloseButton:active {\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.XZLLsVjNatw-Dialogmodulecsstitle {\\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 = 'XZLLsVjNatw-DialogmodulecsscloseButton';\nexport const commands = 'XZLLsVjNatw-Dialogmodulecsscommands';\nexport const dialog = 'XZLLsVjNatw-Dialogmodulecssdialog';\nexport const overlay = 'XZLLsVjNatw-Dialogmodulecssoverlay';\nexport const title = 'XZLLsVjNatw-Dialogmodulecsstitle';\nexport const titleArea = 'XZLLsVjNatw-DialogmodulecsstitleArea';\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 = `.aJeqJtvaag-Searchboxmodulecsssearchbox {\\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 = 'aJeqJtvaag-Searchboxmodulecsssearchbox';\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';\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 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, filename, fixable } = props;\n const cloudpack = useCloudpack();\n\n const editConfig = () => {\n cloudpack.editConfig();\n };\n\n const addOverride = () => {\n cloudpack.addOverride({ packageName, importPath, filename });\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 {`A deep import package name: \"${packageName}\" was imported, but was unrecognized as an exported entry path: \"${importPath}\".`}\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 : `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; filename?: 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, filename?: 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 let { importPath = '' } = importString;\n\n if (importPath.startsWith('/')) {\n importPath = importPath.slice(1);\n } else if (importPath.startsWith('./')) {\n importPath = importPath.slice(2);\n }\n\n (async () => {\n const { fixable } = await cloudpack.validateOverride({ packageName, importPath, filename });\n setErrorEvents((prev) => ({\n ...prev,\n unsupported: [...prev.unsupported, { packageName, importPath, filename, 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\ndeclare global {\n interface Window {\n __cloudpack: {\n getPageLoadTime: () => Promise<number>;\n };\n }\n}\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 } = window.__cloudpack;\n const pageLoadTime = await getPageLoadTime();\n setPageLoadTime(pageLoadTime);\n cloudpack.reportMetric({ metric: 'PAGE_LOAD_TIME', value: pageLoadTime });\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 = `.ASWLklJWA-ThemeProvidermodulecssroot {\\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 = 'ASWLklJWA-ThemeProvidermodulecssroot';\nexport default {root}\n"],
5
- "mappings": ";AAAA,OAAOA,aAAW;AAClB,OAAO,cAAc;;;ACDrB,OAAO,SAAS,eAAe,UAAU,kBAAkB;;;ACGpD,SAAS,aAAqC;AACnD,SAAO,SAAS,OACb,MAAM,GAAG,EACT,IAAI,CAACC,OAAMA,GAAE,MAAM,GAAG,CAAC,EACvB,OAA+B,CAAC,SAAS,cAAc;AACtD,UAAMC,QAAO,UAAU,IAAI,KAAK;AAChC,UAAMC,SAAQ,mBAAmB,UAAU,IAAI,KAAK,CAAC;AAErD,QAAID,SAAQC,QAAO;AACjB,cAAQD,SAAQC;AAAA,IAClB;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACT;;;ACfA,SAAS,qBAAqB;AAqBvB,SAAS,wBAAyC;AACvD,QAAM,UAAU,WAAW;AAC3B,QAAM,MAAM,cAAc;AAC1B,MAAI,aAAa;AACjB,QAAM,SAAiC,CAAC;AAExC,MAAI,YAAY;AAAA,IACd,MAAM,CAAC;AAAA,IACP,YAAY,CAAC,EAAE,KAAK,MAAM;AACxB,YAAM,KAAK;AACX,aAAO,KAAK,KAAK,GAAG,KAAK;AACzB,kBAAY,EAAE,MAAM,aAAa,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,IACvD;AAAA,IAEA,cAAc,CAAC,EAAE,KAAK,MAAM;AAC1B,YAAM,aAAa,KAAK,KAAK,GAAG;AAChC,YAAM,KAAK,OAAO;AAClB,aAAO,OAAO;AACd,kBAAY,EAAE,MAAM,eAAe,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,IACzD;AAAA,EACF,CAAC;AAED,QAAM,mBAA6B,CAAC;AACpC,QAAM,YAAY,QAAQ;AAC1B,QAAM,SAAS,QAAQ;AACvB,QAAM,kBAAkB,QAAQ;AAChC,MAAI;AACJ,MAAI,UAAU;AAKd,WAAS,iBAAiB;AACxB,QAAI,UAAU,WAAW;AACvB,YAAM,YAAY,IAAI,UAAU,MAAM;AAEtC,gBAAU,SAAS,MAAM;AACvB,gBAAQ,IAAI,eAAe;AAC3B,iBAAS;AACT,eAAO,YAAY;AACnB,eAAO,UAAU,MAAM;AACrB,mBAAS;AAAA,QACX;AAGA,mBAAW,WAAW,kBAAkB;AACtC,iBAAO,KAAK,OAAO;AAAA,QACrB;AACA,yBAAiB,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAKA,WAAS,UAAU;AACjB,QAAI,QAAQ;AACV,aAAO,MAAM;AACb,eAAS;AAAA,IACX;AAAA,EACF;AAKA,WAAS,YAAY,EAAE,MAAM,WAAW,KAAK,GAAwE;AACnH,UAAM,UAAU,KAAK,UAAU,EAAE,MAAM,WAAW,KAAK,CAAC;AACxD,QAAI,QAAQ;AACV,aAAO,KAAK,OAAO;AAAA,IACrB,OAAO;AACL,uBAAiB,KAAK,OAAO;AAAA,IAC/B;AAAA,EACF;AAEA,QAAM,iBAMF,CAAC;AAKL,WAAS,YAAY,EAAE,MAAM,KAAK,GAAoD;AACpF,UAAM,YAAY,GAAG;AACrB,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,YAAY,WAAW,MAAM;AACjC,YAAI,eAAe,YAAY;AAC7B,iBAAO,IAAI,MAAM,oBAAoB,CAAC;AAAA,QACxC;AAAA,MACF,GAAG,GAAK;AAER,qBAAe,aAAa;AAAA,QAC1B,SAAS,CAACC,UAAS;AACjB,iBAAO,eAAe;AACtB,uBAAa,SAAS;AACtB,kBAAQA,KAAI;AAAA,QACd;AAAA,QACA,QAAQ,CAACC,WAAU;AACjB,iBAAO,eAAe;AACtB,uBAAa,SAAS;AACtB,iBAAOA,MAAK;AAAA,QACd;AAAA,MACF;AAEA,kBAAY,EAAE,MAAM,WAAW,KAAK,CAAC;AAAA,IACvC,CAAC;AAAA,EACH;AAKA,WAAS,kBAAkB,SAA2B;AACpD,UAAM,WAAW,KAAK,MAAM,QAAQ,IAAI;AACxC,UAAM,YAAY,SAAS;AAE3B,QAAI,cAAc,QAAW;AAC3B,qBAAe,WAAW,QAAQ,SAAS,IAAI;AAC/C;AAAA,IACF;AAEA,YAAQ,SAAS,MAAM;AAAA,MACrB,KAAK,UAAU;AACb,cAAM,EAAE,MAAM,KAAK,IAAI;AAEvB,YAAI,QAAQ,MAAkB,IAAI;AAClC;AAAA,MACF;AAAA,MAEA,KAAK,UAAU;AACb,eAAO,SAAS,OAAO;AACvB;AAAA,MACF;AAAA,MAEA,KAAK,YAAY;AACf,cAAM,EAAE,SAAS,IAAI;AACrB,YAAI,OAAO,QAAQ,IAAI,OAAO,eAAe,GAAG;AAC9C,iBAAO,SAAS,OAAO;AAAA,QACzB;AACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAKA,WAAS,UAAU,MAAgB,UAAkD;AACnF,UAAM,cAAc,CAAC,WAAW,GAAG,IAAI;AAEvC,WAAO,IAAI,UAAU,aAAa,QAAQ;AAAA,EAC5C;AAEA,WAAS,SAAS,MAAqB;AACrC,UAAM,cAAc,CAAC,WAAW,GAAG,IAAI;AAEvC,WAAO,IAAI,QAAQ,WAAW;AAAA,EAChC;AAEA,WAAS,WAAW,SAAmF;AACrG,gBAAY,EAAE,MAAM,cAAc,MAAM,QAAQ,CAAC;AAAA,EACnD;AAEA,WAAS,KAAK,SAAsD;AAClE,gBAAY,EAAE,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,EAC7C;AAEA,WAAS,aAAa;AACpB,gBAAY,EAAE,MAAM,cAAc,MAAM,CAAC,EAAE,CAAC;AAAA,EAC9C;AAEA,WAAS,YAAY,SAAyE;AAC5F,gBAAY,EAAE,MAAM,eAAe,MAAM,QAAQ,CAAC;AAAA,EACpD;AAEA,WAAS,iBAAiB,SAAyE;AACjG,WAAO,YAAY,EAAE,MAAM,oBAAoB,MAAM,QAAQ,CAAC;AAAA,EAChE;AAEA,WAAS,kBAAkB;AACzB,gBAAY,EAAE,MAAM,mBAAmB,MAAM,CAAC,EAAE,CAAC;AAAA,EACnD;AAEA,WAAS,YAAY,SAA4C;AAC/D,gBAAY,EAAE,MAAM,eAAe,MAAM,QAAQ,CAAC;AAAA,EACpD;AAEA,WAAS,aAAa,SAA4C;AAChE,gBAAY,EAAE,MAAM,gBAAgB,MAAM,QAAQ,CAAC;AAAA,EACrD;AAGA,iBAAe;AAGf,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AFvOO,IAAM,mBAAmB,cAA+B,IAAkC;AAE1F,SAAS,kBAAkB,EAAE,SAAS,GAAkC;AAC7E,QAAM,CAAC,MAAM,IAAI,SAAS,qBAAqB;AAE/C,SAAO,oCAAC,iBAAiB,UAAjB,EAA0B,OAAO,UAAS,QAAS;AAC7D;AAEO,IAAM,eAAe,MAAM,WAAW,gBAAgB;;;AGX7D,OAAOC,WAAS,eAAAC,cAAa,YAAAC,WAAU,UAAAC,eAAc;;;ACArD,OAAOC,UAAS,cAAc;;;ACA9B,SAAyB,WAAW,YAAAC,iBAAgB;AAO7C,SAAS,aAAa,SAO1B;AACD,QAAM,EAAE,SAAS,qBAAqB,eAAe,IAAI;AAEzD,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AAElD,YAAU,MAAM;AACd,UAAM,aAAa,qBAAqB;AACxC,UAAM,aAAa,gBAAgB;AAEnC,QAAI,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY;AAC1C;AAAA,IACF;AAEA,QAAI,YAAY;AAChB,QAAI,YAAY;AAChB,QAAI,SAAS,EAAE,GAAG,GAAG,GAAG,EAAE;AAE1B,UAAM,gBAAgB,CAAC,UAAwB;AAC7C,iBAAW,MAAM,YAAY,aAAa,OAAO,IAAI,MAAM,UAAU,gBACnE,OAAO,IAAI,MAAM,UAAU;AAAA,IAE/B;AAEA,UAAM,cAAc,CAAC,UAAwB;AAC3C,oBAAc,KAAK;AACnB,eAAS;AAAA,QACP,GAAG,OAAO,IAAI,MAAM,UAAU;AAAA,QAC9B,GAAG,OAAO,IAAI,MAAM,UAAU;AAAA,MAChC;AAEA,iBAAW,sBAAsB,MAAM,SAAS;AAChD,iBAAW,oBAAoB,aAAa,WAAW;AACvD,iBAAW,oBAAoB,eAAe,aAAa;AAE3D,YAAM,eAAe;AAAA,IACvB;AAEA,UAAM,gBAAgB,CAAC,UAAwB;AAC7C,oBAAc,IAAI;AAClB,kBAAY,MAAM;AAClB,kBAAY,MAAM;AAClB,iBAAW,kBAAkB,MAAM,SAAS;AAC5C,iBAAW,iBAAiB,aAAa,WAAW;AACpD,iBAAW,iBAAiB,eAAe,aAAa;AACxD,YAAM,eAAe;AAAA,IACvB;AAEA,eAAW,iBAAiB,eAAe,aAAa;AAExD,WAAO,MAAM;AACX,iBAAW,oBAAoB,eAAe,aAAa;AAC3D,iBAAW,oBAAoB,eAAe,aAAa;AAC3D,iBAAW,oBAAoB,aAAa,WAAW;AAAA,IACzD;AAAA,EACF,GAAG,CAAC,SAAS,qBAAqB,cAAc,CAAC;AAEjD,SAAO;AAAA,IACL;AAAA,EACF;AACF;;;ACtEA,IAAI,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACrB,IAAM,IAAI,SAAS,cAAc,OAAO;AACxC,EAAE,aAAa,mBAAmB,oEAAoE;AACtG,EAAE,YAAY,SAAS,eAAe,cAAc,CAAC;AACrD,SAAS,KAAK,YAAY,CAAC;AACpB,IAAM,QAAQ;AACd,IAAM,WAAW;AACjB,IAAM,SAAS;AACf,IAAM,iBAAiB;AACvB,IAAM,QAAQ;AACd,IAAM,eAAe;AACrB,IAAM,OAAO;AACb,IAAM,WAAW;AACjB,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,UAAU;AAChB,IAAM,QAAQ;AACd,IAAM,UAAU;AACvB,IAAO,6BAAQ,EAAC,OAAO,UAAU,QAAQ,gBAAgB,OAAO,cAAc,MAAM,UAAU,QAAQ,QAAQ,SAAS,OAAO,QAAO;;;AFlBrI,SAAS,WAAW,UAAU;;;AGH9B,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AAgBpC,IAAM,gBAAiC;AAAA,EACrC,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,eAAe;AACjB;AAEO,IAAM,YAAY,MAAM;AAC7B,QAAM,UAAU,aAAa;AAC7B,QAAM,CAAC,QAAQ,SAAS,IAAIC;AAAA,IAC1B,MAAO,SAAS,SAAS,CAAC,QAAQ,CAAC,KAAyB;AAAA,EAC9D;AAEA,EAAAC,WAAU,MAAM,SAAS,UAAU,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,OAAO,CAAC;AAEpE,SAAO;AACT;;;AHrBO,SAAS,YAAY,EAAE,QAAAC,SAAQ,UAAU,aAAa,GAAqB;AAChF,QAAM,iBAAiB,OAAuB,IAAI;AAClD,QAAM,iBAAiB,OAAuB,IAAI;AAClD,QAAM,SAAS,UAAU;AAEzB,QAAM,eAAe,OAAO,WAAW;AAEvC,eAAa;AAAA,IAGX,SAAS,gBAAgB,CAACA;AAAA,IAC1B,qBAAqB;AAAA,IACrB;AAAA,EACF,CAAC;AAED,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,QAAMC,UAAS,eACb,gBAAAC,OAAA,cAAC,UAAK,WAAW,2BAAO,QAAQ,OAAM,oBAAiB,OACjD,aAAa,QAAQ,CAAC,GAAE,KAC9B,IACE;AAEJ,QAAMC,SACJ,gBAAAD,OAAA,cAAC,SAAI,KAAK,gBAAgB,WAAW,mBAAmB,QAAQ,CAAC,CAACF,OAAM,KACrE,CAACA,WACA,gBAAAE,OAAA,cAAC,SAAI,KAAK,gBAAgB,WAAW,2BAAO,YAC1C,gBAAAA,OAAA,cAAC,SAAI,WAAW,2BAAO,MAAM,GAC7B,gBAAAA,OAAA,cAAC,SAAI,WAAW,2BAAO,MAAM,CAC/B,GAEF,gBAAAA,OAAA,cAAC,YAAO,WAAW,2BAAO,QAAQ,SAAS,UAAU,cAAW,oBAC9D,gBAAAA,OAAA,cAAC,SAAI,WAAW,2BAAO,SAAQ,gBAAgB,MAAM,CAAE,CACzD,GACA,gBAAAA,OAAA,cAAC,aACE,eAAe,MAAM,GACrBD,OACH,CACF;AAGF,SAAOD,UACLG,SAEA,gBAAAD,OAAA,cAAC,SAAI,WAAW,2BAAO,gBACrB,gBAAAA,OAAA,cAAC,SAAI,WAAW,2BAAO,kBAAiBC,MAAM,CAChD;AAEJ;AAEA,SAAS,gBAAgB,QAAyB;AAChD,MAAI,OAAO,WAAW,WAAW;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,eAAe,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,gBAAgB,IAAI,YAAY;AAChD;AAEA,SAAS,mBAAmB,EAAE,QAAQ,YAAY,aAAa,cAAc,GAAoBH,SAAiB;AAChH,SAAO,GAAG,2BAAO,OAAO;AAAA,IACtB,CAAC,2BAAO,SAASA;AAAA,IACjB,CAAC,2BAAO,WAAW,WAAW;AAAA,IAC9B,CAAC,2BAAO,UAAU,WAAW,UAAU,aAAa,KAAK,gBAAgB,KAAK,kBAAkB;AAAA,IAChG,CAAC,2BAAO,QAAQ,WAAW,UAAU,cAAc;AAAA,IACnD,CAAC,2BAAO,UAAU,WAAW,UAAU,gBAAgB,KAAK,gBAAgB;AAAA,EAC9E,CAAC;AACH;AAEA,SAAS,eAAe,EAAE,YAAY,gBAAgB,aAAa,cAAc,GAAoB;AACnG,MAAI,eAAe,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,iBAAiB,KAAK,GAAG,qBAAqB;AAAA,IAC9C,mBAAmB,KAAK,GAAG;AAAA,IAC3B,gBAAgB,KAAK,GAAG;AAAA,IACxB,cAAc,KAAK,GAAG;AAAA,IACtB,kBAAkB,KAAK,GAAG;AAAA,IAC1B,gBAAgB,KAAK,GAAG;AAAA,EAC1B,EACG,OAAO,OAAO,EACd,KAAK,IAAI;AACd;;;AIrGA,OAAOI,UAAS,mBAAmB;;;ACAnC,OAAOC,YAAW;;;ACAlB,OAAOC,YAAW;;;ACAlB,OAAOC,YAAW;;;ACGlB,IAAIC,kBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACrB,IAAMC,KAAI,SAAS,cAAc,OAAO;AACxCA,GAAE,aAAa,mBAAmB,wEAAwE;AAC1GA,GAAE,YAAY,SAAS,eAAeD,eAAc,CAAC;AACrD,SAAS,KAAK,YAAYC,EAAC;AACpB,IAAM,aAAa;AACnB,IAAM,UAAU;AAChB,IAAM,OAAO;AACb,IAAM,OAAO;AACb,IAAM,YAAY;AAClB,IAAM,OAAO;AACb,IAAM,YAAY;AACzB,IAAO,gCAAQ,EAAC,YAAY,SAAS,MAAM,MAAM,WAAW,MAAM,UAAS;;;ADJpE,SAAS,eAAe,EAAE,MAAM,aAAa,MAAM,GAAwB;AAChF,QAAM,UAAU,aAAa;AAE7B,QAAM,aAAa,CAAC,OAAyB;AAC3C,QAAI,KAAK,UAAU;AACjB,cAAQ,WAAW;AAAA,QACjB,UAAU;AAAA,QACV,cAAc,KAAK,UAAU;AAAA,QAC7B,MAAM,KAAK,UAAU;AAAA,QACrB,QAAQ,KAAK,UAAU;AAAA,MACzB,CAAC;AACD,SAAG,eAAe;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,WAAW,KAAK,UAAU,QAAQ;AACxC,QAAM,WAAW,CAAC,IAAI,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1F,SACE,gBAAAC,OAAA,cAAC,SAAI,WAAW,8BAAO,QACrB,gBAAAA,OAAA,cAAC,SAAI,WAAW,8BAAO,WAAW,GAClC,gBAAAA,OAAA,cAAC,SAAI,WAAW,8BAAO,WACrB,gBAAAA,OAAA,cAAC,SAAI,WAAW,8BAAO,aACrB,gBAAAA,OAAA,cAAC,YAAO,SAAS,YAAY,WAAW,8BAAO,QAC5C,OAAM,MAAG,UACT,YAAY,KAAK,aAAY,GAChC,CACF,GACA,gBAAAA,OAAA,cAAC,SAAI,WAAW,8BAAO,QAAO,KAAK,IAAK,GACxC,gBAAAA,OAAA,cAAC,SAAI,WAAW,8BAAO,QAAO,KAAK,UAAU,MAAM,MAAM,CAAC,CAAE,CAC9D,CACF;AAEJ;;;AEzCA,IAAIC,kBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACrB,IAAMC,KAAI,SAAS,cAAc,OAAO;AACxCA,GAAE,aAAa,mBAAmB,oEAAoE;AACtGA,GAAE,YAAY,SAAS,eAAeD,eAAc,CAAC;AACrD,SAAS,KAAK,YAAYC,EAAC;AACpB,IAAM,YAAY;AAClB,IAAM,WAAW;AACjB,IAAMC,WAAU;AAChB,IAAMC,SAAQ;AACd,IAAM,eAAe;AACrB,IAAM,aAAa;AACnB,IAAM,UAAU;AAChB,IAAM,SAAS;AACf,IAAM,aAAa;AACnB,IAAM,OAAO;AACb,IAAM,cAAc;AACpB,IAAMC,QAAO;AACb,IAAM,WAAW;AACjB,IAAMC,WAAU;AAChB,IAAM,QAAQ;AACd,IAAMC,SAAQ;AACd,IAAMC,WAAU;AACvB,IAAO,4BAAQ,EAAC,WAAW,UAAU,SAAAL,UAAS,OAAAC,QAAO,cAAc,YAAY,SAAS,QAAQ,YAAY,MAAM,aAAa,MAAAC,OAAM,UAAU,SAAAC,UAAS,OAAO,OAAAC,QAAO,SAAAC,SAAO;;;AHrB7K,SAAS,WAAWC,WAAU;;;;;;;;;;;;AIJ9B,OAAOC,YAAW;;;ACGlB,IAAIC,kBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACrB,IAAMC,KAAI,SAAS,cAAc,OAAO;AACxCA,GAAE,aAAa,mBAAmB,0DAA0D;AAC5FA,GAAE,YAAY,SAAS,eAAeD,eAAc,CAAC;AACrD,SAAS,KAAK,YAAYC,EAAC;AACpB,IAAM,gBAAgB;AACtB,IAAM,iBAAiB;AAC9B,IAAO,wBAAQ,EAAC,eAAe,eAAc;;;ADPtC,SAAS,OAAO,OAA8E;AACnG,QAAM,EAAE,YAAY,MAAM,IAAI;AAC9B,QAAM,YAAY,UAAU,sBAAO,gBAAgB,sBAAO;AAC1D,SAAO,gBAAAC,OAAA,cAAC,YAAQ,GAAG,OAAO,WAAsB,MAAM,UAAU;AAClE;;;AJOA,SAAS,cAAc,MAA2B;AAChD,MAAI,KAAK,WAAW,WAAW;AAC7B,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,gBAAgB,KAAK;AAAA,IACrB,KAAK,QAAQ,UAAU,GAAG,KAAK,OAAO,eAAe,KAAK,OAAO,SAAS,IAAI,MAAM;AAAA,IACpF,KAAK,UAAU,UAAU,GAAG,KAAK,SAAS,iBAAiB,KAAK,SAAS,SAAS,IAAI,MAAM;AAAA,EAC9F,EACG,OAAO,OAAO,EACd,KAAK,IAAI;AACd;AAEO,SAAS,WAAW,EAAE,KAAK,GAAoB;AACpD,QAAM,CAAC,QAAQ,SAAS,IAAIC,OAAM,SAA8B,MAAS;AACzE,QAAM,EAAE,MAAAC,OAAM,UAAU,OAAO,IAAI;AACnC,QAAM,YAAY,aAAa;AAC/B,QAAM,cAAc,WAAW,QAAS,WAAW,UAAa,KAAK,QAAQ,SAAS;AAEtF,QAAM,OAAO,CAAC,aAAqB;AACjC,cAAU,KAAK;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,MAAM;AACxB,cAAU,WAAW;AAAA,MACnB,UAAU,KAAK;AAAA,MACf,cAAc;AAAA,MACd,MAAM;AAAA,MACN,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,MAAM;AACxB,cAAU,YAAY,EAAE,IAAI,KAAK,IAAI,WAAW,KAAK,UAAU,CAAC;AAAA,EAClE;AAEA,SACE,gBAAAD,OAAA,cAAC,SAAI,WAAW,0BAAO,QACrB,gBAAAA,OAAA,cAAC,SAAI,WAAW,mBAAmB,IAAI,KACrC,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,0BAAO;AAAA,MAClB,SAAS,MAAM,UAAU,CAAC,WAAW;AAAA,MACrC,cAAY,cAAc,YAAYC,UAAS,UAAUA;AAAA;AAAA,IAEzD,gBAAAD,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAWE,IAAG,0BAAO,YAAY,CAAC,eAAe,0BAAO,SAAS;AAAA,QACjE,KAAK;AAAA,QACL,KAAI;AAAA;AAAA,IACN;AAAA,EACF,GACC,QAAQ,WAAW,KAAK,UAAU,WAAW,KAC5C,gBAAAF,OAAA,cAAC,SAAI,WAAW,0BAAO,WAAW,KAAK,2BAAa,KAAI,gBAAe,GAExE,QAAQ,SAAS,KAAK,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,WAAW,KAAK,yBAAW,KAAI,cAAa,GAC1F,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,SAAQC,KAAK,GACpC,gBAAAD,OAAA,cAAC,SAAI,WAAW,0BAAO,WAAU,cAAc,IAAI,CAAE,CACvD,GACC,eACC,gBAAAA,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,YACrB,gBAAAA,OAAA,cAAC,UAAO,SAAS,eAAa,cAAY,CAC5C,GACA,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,WACrB,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,SAAO,SAAO,GACrC,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,iBACrB,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,QAAM,YAAU,GACvC,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,SACrB,gBAAAA,OAAA,cAAC,YAAO,WAAW,0BAAO,YAAY,SAAS,MAAM,KAAK,KAAK,SAAS,KACrE,KAAK,SACR,GAEA,gBAAAA,OAAA,cAAC,YAAO,WAAW,0BAAO,YAAY,SAAS,eAAa,gBAE5D,CACF,CACF,GACA,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,iBACrB,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,QAAM,aAAW,GACxC,gBAAAA,OAAA,cAAC,YAAO,WAAW,0BAAO,YAAY,SAAS,MAAM,KAAK,KAAK,UAAU,KACtE,KAAK,UACR,CACF,GACC,QAAQ,SAAS,KAChB,gBAAAA,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,SAAO,QAAM,GACpC,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,eACpB,OAAO,IAAI,CAACG,QAAO,UAClB,gBAAAH,OAAA,cAAC,kBAAe,KAAK,OAAO,MAAMG,QAAO,aAAa,KAAK,WAAW,OAAO,QAAQ,GAAG,CACzF,CACH,CACF,GAED,UAAU,SAAS,KAClB,gBAAAH,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,SAAO,UAAQ,GACtC,gBAAAA,OAAA,cAAC,SAAI,WAAW,0BAAO,eACpB,SAAS,IAAI,CAACI,UAAS,UACtB,gBAAAJ,OAAA,cAAC,kBAAe,KAAK,OAAO,MAAMI,UAAS,aAAa,KAAK,WAAW,OAAO,QAAQ,GAAG,CAC3F,CACH,CACF,CAEJ,CACF,CAEJ;AAEJ;AAEA,SAAS,mBAAmB,MAA2B;AACrD,SAAOF,IAAG,0BAAO,QAAQ;AAAA,IACvB,CAAC,0BAAO,UAAU,KAAK,QAAQ,WAAW,KAAK,KAAK,UAAU,WAAW;AAAA,IACzE,CAAC,0BAAO,UAAU,KAAK,QAAQ,WAAW,KAAK,KAAK,UAAU,SAAS;AAAA,IACvE,CAAC,0BAAO,QAAQ,KAAK,QAAQ,SAAS;AAAA,EACxC,CAAC;AACH;;;AMnIA,SAAS,aAAAG,YAAW,YAAAC,iBAAgB;AA6B7B,IAAM,mBAAmB,MAAM;AACpC,QAAM,UAAU,aAAa;AAC7B,QAAM,CAAC,SAAS,UAAU,IAAIC,UAAqC,EAAE,OAAO,CAAC,EAAE,CAAC;AAEhF,EAAAC,WAAU,MAAM,SAAS,UAAU,CAAC,gBAAgB,GAAG,UAAU,GAAG,CAAC,OAAO,CAAC;AAE7E,SAAO;AACT;;;ACjCA,IAAIC,kBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACrB,IAAMC,KAAI,SAAS,cAAc,OAAO;AACxCA,GAAE,aAAa,mBAAmB,kEAAkE;AACpGA,GAAE,YAAY,SAAS,eAAeD,eAAc,CAAC;AACrD,SAAS,KAAK,YAAYC,EAAC;AACpB,IAAMC,QAAO;AACpB,IAAO,0BAAQ,EAAC,MAAAA,MAAI;;;ARJb,SAAS,SAAS,EAAE,aAAa,GAA8B;AACpE,QAAM,UAAU,iBAAiB;AACjC,QAAM,SAAS,QAAQ,SAAS,CAAC,GAAG,KAAK,SAAS;AAClD,iBAAe,cAAc,YAAY;AAEzC,SACE,gBAAAC,OAAA,cAAC,SAAI,WAAW,wBAAO,QACpB,MACE,OAAO,CAAC,EAAE,MAAAC,MAAK,MAAM,CAAC,gBAAgBA,MAAK,YAAY,EAAE,SAAS,YAAY,CAAC,EAC/E,IAAI,CAAC,SACJ,gBAAAD,OAAA,cAAC,cAAW,KAAK,KAAK,MAAM,MAAY,CACzC,CACL;AAEJ;AAKA,SAAS,UAAU,GAAwB,GAAwB;AACjE,QAAM,UAAU,EAAE,WAAW,YAAY,IAAI;AAC7C,QAAM,UAAU,EAAE,WAAW,YAAY,IAAI;AAE7C,MAAI,YAAY,SAAS;AACvB,WAAO,UAAU,UAAU,KAAK;AAAA,EAClC;AAEA,QAAM,UAAU,EAAE,QAAQ,UAAU;AACpC,QAAM,UAAU,EAAE,QAAQ,UAAU;AAEpC,MAAI,YAAY,SAAS;AACvB,WAAO,UAAU,UAAU,KAAK;AAAA,EAClC;AAEA,SAAO,EAAE,OAAO,EAAE,OAAO,KAAK;AAChC;;;ASxCA,SAAS,WAAWE,QAAO,UAAAC,eAAc;;;ACGzC,IAAIC,kBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACrB,IAAMC,KAAI,SAAS,cAAc,OAAO;AACxCA,GAAE,aAAa,mBAAmB,0DAA0D;AAC5FA,GAAE,YAAY,SAAS,eAAeD,eAAc,CAAC;AACrD,SAAS,KAAK,YAAYC,EAAC;AACpB,IAAM,cAAc;AACpB,IAAMC,YAAW;AACjB,IAAM,SAAS;AACf,IAAM,UAAU;AAChB,IAAMC,SAAQ;AACd,IAAMC,aAAY;AACzB,IAAO,wBAAQ,EAAC,aAAa,UAAAF,WAAU,QAAQ,SAAS,OAAAC,QAAO,WAAAC,WAAS;;;;;;ADAjE,SAAS,OAAO,EAAE,OAAAC,QAAO,OAAO,WAAW,SAAS,UAAAC,WAAU,SAAS,GAAgB;AAC5F,QAAM,eAAeC,QAAuB,IAAI;AAChD,QAAM,qBAAqBA,QAAuB,IAAI;AACtD,QAAM,cAAc,UAAU,UAAU,qBAAqB;AAC7D,QAAM,kBAAkB,YAAY,SAAS;AAE7C,eAAa;AAAA,IACX,SAAS,CAAC,CAAC;AAAA,IACX,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,EAClB,CAAC;AAED,SACE,gBAAAC,OAAA,cAAC,SAAI,WAAW,sBAAO,WACrB,gBAAAA,OAAA,cAAC,SAAI,KAAK,cAAc,WAAW,sBAAO,QAAQ,OAAO,EAAE,gBAAgB,YAAY,KACrF,gBAAAA,OAAA,cAAC,SAAI,WAAW,sBAAO,aACrB,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW,sBAAO;AAAA,MAClB,OAAO,EAAE,OAAO,aAAa,QAAQ,gBAAgB;AAAA;AAAA,IAEpDH;AAAA,EACH,GACC,WACC,gBAAAG,OAAA,cAAC,YAAO,WAAW,sBAAO,aAAa,SAAS,SAAS,cAAW,sBAElE,gBAAAA,OAAA,cAAC,SAAI,KAAK,kCAAW,KAAI,IAAG,CAC9B,CAEJ,GACCF,aAAY,gBAAAE,OAAA,cAAC,SAAI,WAAW,sBAAO,YAAW,GAAGF,SAAS,GAC1D,QACH,CACF;AAEJ;;;AEjDA,OAAOG,YAAW;;;ACGlB,IAAIC,kBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACrB,IAAMC,KAAI,SAAS,cAAc,OAAO;AACxCA,GAAE,aAAa,mBAAmB,mEAAmE;AACrGA,GAAE,YAAY,SAAS,eAAeD,eAAc,CAAC;AACrD,SAAS,KAAK,YAAYC,EAAC;AACpB,IAAM,YAAY;AACzB,IAAO,2BAAQ,EAAC,UAAS;;;ADDlB,SAAS,UAAU,EAAE,OAAAC,QAAO,SAAS,GAAmB;AAC7D,SACE,gBAAAC,OAAA,cAAAA,OAAA,gBACG,OAAOD,WAAU,YAChB,gBAAAC,OAAA,cAAC,WAAM,MAAK,QAAO,aAAY,UAAS,WAAW,yBAAO,WAAW,UAAoB,OAAOD,QAAO,CAE3G;AAEJ;;;AZLO,SAAS,aAAa,EAAE,QAAQ,GAAsB;AAC3D,QAAM,YAAY,aAAa;AAC/B,QAAM,CAAC,cAAc,eAAe,IAAIE,OAAM,SAAS,EAAE;AAEzD,QAAM,qBAAqB,YAAY,CAAC,UAA+C;AACrF,UAAM,eAAe;AACrB,oBAAgB,MAAM,OAAO,KAAK;AAAA,EACpC,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAkB,MAAM;AAC5B,cAAU,gBAAgB;AAAA,EAC5B;AAEA,SACE,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,WAAS;AAAA,MACT;AAAA,MACA,UAAU;AAAA,QACR,gBAAAA,OAAA,cAAC,UAAO,SAAO,MAAC,SAAS,iBAAiB,KAAI,OAAI,mBAElD;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAA,OAAA,cAAC,aAAU,OAAO,cAAc,UAAU,oBAAoB;AAAA,IAC9D,gBAAAA,OAAA,cAAC,YAAS,cAA4B;AAAA,EACxC;AAEJ;;;AcvCA,SAAS,WAAWC,eAAa;;;ACAjC,OAAOC,aAAW;AAGlB,SAAS,WAAWC,WAAU;AAMvB,SAAS,UAAU,OAA8B;AACtD,QAAM,CAAC,aAAa,cAAc,IAAIC,QAAM,SAAkB,KAAK;AACnE,QAAM,EAAE,aAAa,YAAY,UAAU,QAAQ,IAAI;AACvD,QAAM,YAAY,aAAa;AAE/B,QAAM,aAAa,MAAM;AACvB,cAAU,WAAW;AAAA,EACvB;AAEA,QAAM,cAAc,MAAM;AACxB,cAAU,YAAY,EAAE,aAAa,YAAY,SAAS,CAAC;AAAA,EAC7D;AAEA,SACE,gBAAAA,QAAA,cAAC,SAAI,WAAW,0BAAO,QACrB,gBAAAA,QAAA,cAAC,SAAI,WAAWC,IAAG,0BAAO,QAAQ,0BAAO,KAAK,KAC5C,gBAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,0BAAO;AAAA,MAClB,SAAS,MAAM,eAAe,CAAC,WAAW;AAAA,MAC1C,cAAY,cAAc,YAAY,eAAe,eAAe,UAAU,eAAe;AAAA;AAAA,IAE7F,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAWC,IAAG,0BAAO,YAAY,CAAC,eAAe,0BAAO,SAAS;AAAA,QACjE,KAAK;AAAA,QACL,KAAI;AAAA;AAAA,IACN;AAAA,EACF,GACA,gBAAAD,QAAA,cAAC,SAAI,WAAW,0BAAO,WAAW,KAAK,yBAAW,KAAI,cAAa,GACnE,gBAAAA,QAAA,cAAC,SAAI,WAAW,0BAAO,SAAQ,GAAG,eAAe,YAAa,CAChE,GACC,eACC,gBAAAA,QAAA,cAAAA,QAAA,gBACE,gBAAAA,QAAA,cAAC,SAAI,WAAW,0BAAO,YACpB,WAAW,gBAAAA,QAAA,cAAC,UAAO,SAAS,eAAa,cAAY,GACtD,gBAAAA,QAAA,cAAC,UAAO,SAAS,cAAY,kBAAgB,CAC/C,GACA,gBAAAA,QAAA,cAAC,SAAI,WAAW,0BAAO,WACrB,gBAAAA,QAAA,cAAC,SAAI,WAAW,0BAAO,SAAO,SAAO,GAErC,gBAAAA,QAAA,cAAC,SAAI,WAAW,0BAAO,iBACrB,gBAAAA,QAAA,cAAC,SAAI,WAAW,0BAAO,QAAM,SAAO,GACpC,gBAAAA,QAAA,cAAC,SAAI,WAAW,0BAAO,SACpB,gCAAgC,+EAA+E,cAClH,CACF,GACA,gBAAAA,QAAA,cAAC,SAAI,WAAW,0BAAO,iBACrB,gBAAAA,QAAA,cAAC,SAAI,WAAW,0BAAO,QAAM,UAAQ,GACrC,gBAAAA,QAAA,cAAC,SAAI,WAAW,0BAAO,SACpB,UACG,iEAAiE,6BAA6B,eAAe,iBAC7G,kEACN,CACF,CACF,CACF,CAEJ;AAEJ;;;ADvDO,SAAS,YAAY,EAAE,YAAY,GAAqB;AAC7D,QAAM,YAAY,aAAa;AAE/B,QAAM,SAAS,MAAM;AACnB,cAAU,gBAAgB;AAAA,EAC5B;AAEA,SACE,gBAAAE,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,UAAU;AAAA,QACR,gBAAAA,QAAA,cAAC,UAAO,SAAO,MAAC,SAAS,QAAQ,KAAI,OAAI,mBAEzC;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAA,QAAA,cAAC,SAAI,WAAW,wBAAO,QACpB,YAAY,IAAI,CAAC,MAAM,UACtB,gBAAAA,QAAA,cAAC,aAAW,GAAG,MAAM,KAAK,OAAO,CAClC,CACH;AAAA,EACF;AAEJ;;;AEpCA,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AACpC,SAAS,yBAAyB;AAwBlC,IAAM,iBAAiB,CAAC,UAAwD;AAC9E,SAAO,OAAO,MAAM,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,MAAM,KAAK,MAAM,WAAW;AAC9F;AAGA,IAAM,aAAa,CAAC,UAAwD;AAC1E,SAAO,eAAe,KAAK,KAAK,OAAO,MAAM,OAAO,YAAY;AAClE;AAIO,IAAM,iBAAiB,MAAM;AAClC,QAAM,CAAC,aAAa,cAAc,IAAIC,UAAmD,EAAE,aAAa,CAAC,EAAE,CAAC;AAC5G,QAAM,YAAY,aAAa;AAE/B,EAAAC,WAAU,MAAM;AACd,UAAM,yBAAyB,CAAC,SAAiB,aAA4B;AAC3E,YAAM,aAAa;AACnB,YAAM,QAAQ,QAAQ,MAAM,UAAU;AAEtC,UAAI,OAAO;AACT,cAAM,eAAe,kBAAkB,MAAM,EAAE;AAC/C,cAAM,EAAE,cAAc,GAAG,IAAI;AAC7B,YAAI,EAAE,aAAa,GAAG,IAAI;AAE1B,YAAI,WAAW,WAAW,GAAG,GAAG;AAC9B,uBAAa,WAAW,MAAM,CAAC;AAAA,QACjC,WAAW,WAAW,WAAW,IAAI,GAAG;AACtC,uBAAa,WAAW,MAAM,CAAC;AAAA,QACjC;AAEA,SAAC,YAAY;AACX,gBAAM,EAAE,QAAQ,IAAI,MAAM,UAAU,iBAAiB,EAAE,aAAa,YAAY,SAAS,CAAC;AAC1F,yBAAe,CAAC,UAAU;AAAA,YACxB,GAAG;AAAA,YACH,aAAa,CAAC,GAAG,KAAK,aAAa,EAAE,aAAa,YAAY,UAAU,QAAQ,CAAC;AAAA,UACnF,EAAE;AAAA,QACJ,GAAG,EAAE,MAAM,MAAM;AAAA,QAEjB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,aAAa,OAAO;AAE1B,eAAW,WAAW;AAGtB,WAAO,iBAAiB,SAAS,CAAC,UAAsB;AACtD,6BAAuB,MAAM,SAAS,MAAM,QAAQ;AAAA,IACtD,CAAC;AAGD,eAAWC,UAAS,WAAW,gBAAgB;AAC7C,6BAAuBA,OAAM,SAASA,OAAM,QAAQ;AAAA,IACtD;AAGA,WAAO,iBAAiB,sBAAsB,CAAC,UAAiC;AAC9E,iBAAW,KAAK,KAAK,uBAAuB,MAAM,OAAO,OAAO;AAAA,IAClE,CAAC;AAGD,eAAWA,UAAS,WAAW,oBAAoB;AACjD,iBAAWA,MAAK,KAAK,uBAAuBA,OAAM,OAAO,OAAO;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,SAAO;AACT;;;AC9FA,OAAOC,aAAW;AAWX,SAAS,0BAA0B;AACxC,QAAM,CAAC,cAAc,eAAe,IAAIC,QAAM,SAAiB;AAC/D,QAAM,YAAY,aAAa;AAE/B,EAAAA,QAAM,UAAU,MAAM;AACpB,mBAAe,qBAAqB;AAClC,YAAM,EAAE,gBAAgB,IAAI,OAAO;AACnC,YAAMC,gBAAe,MAAM,gBAAgB;AAC3C,sBAAgBA,aAAY;AAC5B,gBAAU,aAAa,EAAE,QAAQ,kBAAkB,OAAOA,cAAa,CAAC;AAAA,IAC1E;AAEA,SAAK,mBAAmB;AAAA,EAC1B,GAAG,CAAC,SAAS,CAAC;AAEd,SAAO;AACT;;;AtBnBO,SAAS,gBAAgB;AAC9B,QAAM,eAAe,wBAAwB;AAC7C,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAkB,KAAK;AAC3D,QAAM,SAAS,UAAU;AACzB,QAAM,aAAaC,QAAoC;AACvD,QAAM,EAAE,YAAY,IAAI,eAAe;AAIvC,EAAAC,QAAM,UAAU,MAAM;AACpB,QACE,CAAC,cACD,WAAW,SAAS,WAAW,UAC/B,OAAO,WAAW,WACjB,WAAW,SAAS,eAAe,QAAQ,OAAO,eAAe,IAClE;AACA,oBAAc,IAAI;AAAA,IACpB;AACA,eAAW,UAAU;AAAA,EACvB,GAAG,CAAC,QAAQ,UAAU,CAAC;AAEvB,QAAM,kBAAkBC,aAAY,MAAM;AACxC,YAAQ,IAAI,+BAA+B,CAAC,YAAY;AACxD,kBAAc,CAAC,UAAU;AAAA,EAC3B,GAAG,CAAC,UAAU,CAAC;AAEf,SAAO,YAAY,SACjB,gBAAAD,QAAA,cAAC,eAAY,aAA0B,IACrC,aACF,gBAAAA,QAAA,cAAC,gBAAa,SAAS,iBAAiB,IAExC,gBAAAA,QAAA,cAAC,eAAY,UAAU,iBAAiB,cAA4B;AAExE;;;AuBzCA,OAAOE,aAAW;;;ACGlB,IAAIC,kBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACrB,IAAMC,KAAI,SAAS,cAAc,OAAO;AACxCA,GAAE,aAAa,mBAAmB,wEAAwE;AAC1GA,GAAE,YAAY,SAAS,eAAeD,eAAc,CAAC;AACrD,SAAS,KAAK,YAAYC,EAAC;AACpB,IAAMC,QAAO;AACpB,IAAO,+BAAQ,EAAC,MAAAA,MAAI;;;ADNb,SAAS,cAAc,EAAE,SAAS,GAAgC;AACvE,SAAO,gBAAAC,QAAA,cAAC,SAAI,WAAW,6BAAO,QAAO,QAAS;AAChD;;;A3BIO,IAAM,mBAAmB;AAEhC,IAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,QAAQ,KAAK;AAEb,SAAS;AAAA,EACP,gBAAAC,QAAA,cAAC,qBACC,gBAAAA,QAAA,cAAC,yBACC,gBAAAA,QAAA,cAAC,mBAAc,CACjB,CACF;AAAA,EACA;AACF;AAEA,SAAS,KAAK,YAAY,OAAO;",
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';\n\n/**\n * The id attached to the root element of the overlay div.\n */\nexport const overlayRootDivId = 'cloudpack-overlay-root';\n\nconst rootDiv = document.createElement('div');\nrootDiv.id = overlayRootDivId;\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 { z } from 'zod';\nexport interface CloudpackClient {\n dispose(): void;\n getValue<TZodData extends z.ZodType>(path: DataBusPath<TZodData>): z.infer<TZodData>;\n subscribe<TZodData extends z.ZodType>(\n path: DataBusPath<TZodData>,\n callback: (newValue: any, oldValue: any) => void,\n ): () => void;\n\n openSource(options: { rootPath: string; relativePath: string; line: number; column: number }): void;\n open(options: { rootPath: string; relativePath?: string }): void;\n editConfig(): void;\n addOverride(options: { packageName: string; importPath: string; filename?: string }): void;\n validateOverride(options: {\n packageName: string;\n importPath: string;\n filename?: string;\n }): Promise<{ fixable: boolean }>;\n restartAllTasks(): void;\n restartTask(options: { id: string; inputPath: string }): void;\n reportMetric(options: { metric: string; value: number }): 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['cloudpack-session-id'];\n const apiUrl = cookies['cloudpack-api-url'];\n const currentSequence = cookies['cloudpack-session-sequence'];\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 * Closes the websocket connection.\n */\n function dispose() {\n if (socket) {\n socket.close();\n socket = undefined;\n }\n }\n\n /**\n * Sends a message to the websocket.\n */\n function sendMessage({ type, requestId, data }: { type: string; requestId?: string; data: Record<string, unknown> }) {\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({ type, data }: { type: string; data: Record<string, unknown> }) {\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: (data) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n resolve(data);\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 /**\n * Creates a subscription to the given path.\n */\n function subscribe<TZodData extends z.ZodType>(\n path: DataBusPath<TZodData>,\n callback: (newValue: z.infer<TZodData>, oldValue: z.infer<TZodData>) => void,\n ) {\n return bus.subscribe(path, callback);\n }\n\n function getValue<TZodData extends z.ZodType>(path: DataBusPath<TZodData>) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return bus.getData(path);\n }\n\n function openSource(options: { rootPath: string; relativePath: string; line: number; column: number }) {\n sendMessage({ type: 'openSource', data: options });\n }\n\n function open(options: { rootPath: string; relativePath?: string }) {\n sendMessage({ type: 'open', data: options });\n }\n\n function editConfig() {\n sendMessage({ type: 'editConfig', data: {} });\n }\n\n function addOverride(options: { packageName: string; importPath: string; filename?: string }) {\n sendMessage({ type: 'addOverride', data: options });\n }\n\n function validateOverride(options: { packageName: string; importPath: string; filename?: string }) {\n return sendRequest({ type: 'validateOverride', data: options }) as Promise<{ fixable: boolean }>;\n }\n\n function restartAllTasks() {\n sendMessage({ type: 'restartAllTasks', data: {} });\n }\n\n function restartTask(options: { id: string; inputPath: string }) {\n sendMessage({ type: 'restartTask', data: options });\n }\n\n function reportMetric(options: { metric: string; value: number }) {\n sendMessage({ type: 'reportMetric', data: options });\n }\n\n // Start the connection.\n openConnection();\n\n // Return the public API.\n return {\n dispose,\n getValue,\n open,\n openSource,\n subscribe,\n editConfig,\n addOverride,\n restartTask,\n restartAllTasks,\n validateOverride,\n reportMetric,\n };\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';\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 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 = `.uHuWYfdxg-StatusBadgemodulecssfixedOverlay {\\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.uHuWYfdxg-StatusBadgemodulecssgripArea {\\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.uHuWYfdxg-StatusBadgemodulecssgrip {\\n width: 2px;\\n height: 100%;\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecsscontentSurface {\\n pointer-events: auto;\\n display: contents;\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecssbadge {\\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.uHuWYfdxg-StatusBadgemodulecssinline {\\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.uHuWYfdxg-StatusBadgemodulecssbuilding {\\n background: #bbb;\\n color: #000;\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecsssuccess {\\n background: #7ad17a;\\n color: #000;\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecsswarning {\\n background: #e4e68b;\\n color: #000;\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecsserror {\\n background: #ffb9b9;\\n color: #000;\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecssbutton {\\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.uHuWYfdxg-StatusBadgemodulecssbutton:hover {\\n filter: invert(0.1);\\n}\\n\\n.uHuWYfdxg-StatusBadgemodulecssvalue {\\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.uHuWYfdxg-StatusBadgemodulecssmetric {\\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 = 'uHuWYfdxg-StatusBadgemodulecssbadge';\nexport const building = 'uHuWYfdxg-StatusBadgemodulecssbuilding';\nexport const button = 'uHuWYfdxg-StatusBadgemodulecssbutton';\nexport const contentSurface = 'uHuWYfdxg-StatusBadgemodulecsscontentSurface';\nexport const error = 'uHuWYfdxg-StatusBadgemodulecsserror';\nexport const fixedOverlay = 'uHuWYfdxg-StatusBadgemodulecssfixedOverlay';\nexport const grip = 'uHuWYfdxg-StatusBadgemodulecssgrip';\nexport const gripArea = 'uHuWYfdxg-StatusBadgemodulecssgripArea';\nexport const inline = 'uHuWYfdxg-StatusBadgemodulecssinline';\nexport const metric = 'uHuWYfdxg-StatusBadgemodulecssmetric';\nexport const success = 'uHuWYfdxg-StatusBadgemodulecsssuccess';\nexport const value = 'uHuWYfdxg-StatusBadgemodulecssvalue';\nexport const warning = 'uHuWYfdxg-StatusBadgemodulecsswarning';\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 { z } from 'zod';\n\nexport type CloudpackStatusType = 'unknown' | 'idle' | 'building' | 'success' | 'warning' | 'error' | 'cancelled';\nexport type CloudpackStatus = z.infer<(typeof taskStatsSource)['type']>;\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';\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\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 return (\n <Dialog\n title=\"Task results\"\n draggable\n onClose={onClose}\n commands={[\n <Button primary onClick={restartAllTasks} key=\"1\">\n Restart all tasks\n </Button>,\n ]}\n >\n <Searchbox value={searchFilter} onChange={handleSearchChange} />\n <TaskList searchFilter={searchFilter} />\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 function TaskList({ searchFilter }: { searchFilter?: string }) {\n const details = useStatusDetails();\n const tasks = (details.tasks || []).sort(sortTasks);\n searchFilter = searchFilter?.toLowerCase();\n\n return (\n <div className={styles.root}>\n {tasks\n .filter(({ name }) => !searchFilter || name.toLowerCase().includes(searchFilter))\n .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 = `.FSsdmcQZfc-TaskResultItemmodulecssroot {\\n display: flex;\\n background: #f5f5f5;\\n}\\n\\n.FSsdmcQZfc-TaskResultItemmodulecssstatusBar {\\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.FSsdmcQZfc-TaskResultItemmodulecsscontent {\\n padding: 8px;\\n display: flex;\\n flex-grow: 1;\\n overflow: hidden;\\n flex-direction: column;\\n}\\n\\n.FSsdmcQZfc-TaskResultItemmodulecsstitleArea {\\n display: flex;\\n align-items: center;\\n flex-direction: row;\\n gap: 4px;\\n padding: 4px 0;\\n}\\n\\n.FSsdmcQZfc-TaskResultItemmodulecssfile {\\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.FSsdmcQZfc-TaskResultItemmodulecssfile:hover {\\n text-decoration: underline;\\n}\\n\\n.FSsdmcQZfc-TaskResultItemmodulecssactionArea {\\n display: flex;\\n flex-direction: row;\\n gap: 8px;\\n flex-shrink: 0;\\n}\\n\\n.FSsdmcQZfc-TaskResultItemmodulecsstext {\\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 = 'FSsdmcQZfc-TaskResultItemmodulecssactionArea';\nexport const content = 'FSsdmcQZfc-TaskResultItemmodulecsscontent';\nexport const file = 'FSsdmcQZfc-TaskResultItemmodulecssfile';\nexport const root = 'FSsdmcQZfc-TaskResultItemmodulecssroot';\nexport const statusBar = 'FSsdmcQZfc-TaskResultItemmodulecssstatusBar';\nexport const text = 'FSsdmcQZfc-TaskResultItemmodulecsstext';\nexport const titleArea = 'FSsdmcQZfc-TaskResultItemmodulecsstitleArea';\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 = `.WGSBzuMGA-TaskStatusmodulecssroot {\\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.WGSBzuMGA-TaskStatusmodulecssheader {\\n display: flex;\\n gap: 8px;\\n padding: 8px 16px;\\n background: #f0f0f0;\\n align-items: center;\\n line-height: 1;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsscommands {\\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.WGSBzuMGA-TaskStatusmodulecssexpandButton {\\n background: transparent;\\n border: none;\\n border-radius: 4px;\\n width: 32px;\\n height: 32px;\\n}\\n.WGSBzuMGA-TaskStatusmodulecssexpandButton:hover {\\n background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecssexpandButton:active {\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecssexpandIcon {\\n transition: transform 0.1s ease-in-out;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsscollapsed {\\n transform: rotate(-90deg);\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecssfarArea {\\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.WGSBzuMGA-TaskStatusmodulecsstitle {\\n font-size: 16px;\\n font-weight: 500;\\n color: #333;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsssubTitle {\\n font-size: 13px;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsscontent {\\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.WGSBzuMGA-TaskStatusmodulecssresultItems {\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsserror {\\n background: #ffe9e9;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsssuccess {\\n background: #e9f9e9;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsswarning {\\n background: #fff9e9;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecssname {\\n font-size: 12px;\\n font-weight: 600;\\n text-transform: uppercase;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecssvalue {\\n display: flex;\\n flex-direction: column;\\n font-size: 14px;\\n color: #333;\\n}\\n\\n.WGSBzuMGA-TaskStatusmodulecsslinkButton {\\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.WGSBzuMGA-TaskStatusmodulecsslinkButton: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 = 'WGSBzuMGA-TaskStatusmodulecsscollapsed';\nexport const commands = 'WGSBzuMGA-TaskStatusmodulecsscommands';\nexport const content = 'WGSBzuMGA-TaskStatusmodulecsscontent';\nexport const error = 'WGSBzuMGA-TaskStatusmodulecsserror';\nexport const expandButton = 'WGSBzuMGA-TaskStatusmodulecssexpandButton';\nexport const expandIcon = 'WGSBzuMGA-TaskStatusmodulecssexpandIcon';\nexport const farArea = 'WGSBzuMGA-TaskStatusmodulecssfarArea';\nexport const header = 'WGSBzuMGA-TaskStatusmodulecssheader';\nexport const linkButton = 'WGSBzuMGA-TaskStatusmodulecsslinkButton';\nexport const name = 'WGSBzuMGA-TaskStatusmodulecssname';\nexport const resultItems = 'WGSBzuMGA-TaskStatusmodulecssresultItems';\nexport const root = 'WGSBzuMGA-TaskStatusmodulecssroot';\nexport const subTitle = 'WGSBzuMGA-TaskStatusmodulecsssubTitle';\nexport const success = 'WGSBzuMGA-TaskStatusmodulecsssuccess';\nexport const title = 'WGSBzuMGA-TaskStatusmodulecsstitle';\nexport const value = 'WGSBzuMGA-TaskStatusmodulecssvalue';\nexport const warning = 'WGSBzuMGA-TaskStatusmodulecsswarning';\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 = `.RpmxvThKZI-ButtonmodulecssstandardButton {\\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.RpmxvThKZI-ButtonmodulecssstandardButton:active {\\n background-color: rgb(237, 235, 233);\\n color: rgb(32, 31, 30);\\n}\\n\\n.RpmxvThKZI-ButtonmodulecssstandardButton:hover {\\n background-color: rgb(243, 242, 241);\\n color: rgb(32, 31, 30);\\n}\\n\\n.RpmxvThKZI-ButtonmodulecssstandardButton:focus {\\n border: 3px solid rgb(0, 0, 0);\\n}\\n\\n.RpmxvThKZI-ButtonmodulecssprimaryButton {\\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.RpmxvThKZI-ButtonmodulecssprimaryButton: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.RpmxvThKZI-ButtonmodulecssprimaryButton: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.RpmxvThKZI-ButtonmodulecssprimaryButton: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 = 'RpmxvThKZI-ButtonmodulecssprimaryButton';\nexport const standardButton = 'RpmxvThKZI-ButtonmodulecssstandardButton';\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 = `.ZnVPBoZiOc-TaskListmodulecssroot {\\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 = 'ZnVPBoZiOc-TaskListmodulecssroot';\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 style?: 'default' | 'error';\n draggable?: boolean;\n onClose?: () => void;\n commands?: React.ReactNode[];\n children: React.ReactNode;\n}\n\nexport function Dialog({ title, 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 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 = `.XZLLsVjNatw-Dialogmodulecssoverlay {\\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.XZLLsVjNatw-Dialogmodulecsscommands {\\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.XZLLsVjNatw-Dialogmodulecssdialog {\\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.XZLLsVjNatw-DialogmodulecsstitleArea {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n padding: 8px 8px 8px 20px;\\n gap: 8px;\\n}\\n\\n.XZLLsVjNatw-DialogmodulecsscloseButton {\\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.XZLLsVjNatw-DialogmodulecsscloseButton:hover {\\n background: rgba(0, 0, 0, 0.1);\\n}\\n\\n.XZLLsVjNatw-DialogmodulecsscloseButton:active {\\n background: rgba(0, 0, 0, 0.2);\\n}\\n\\n.XZLLsVjNatw-Dialogmodulecsstitle {\\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 = 'XZLLsVjNatw-DialogmodulecsscloseButton';\nexport const commands = 'XZLLsVjNatw-Dialogmodulecsscommands';\nexport const dialog = 'XZLLsVjNatw-Dialogmodulecssdialog';\nexport const overlay = 'XZLLsVjNatw-Dialogmodulecssoverlay';\nexport const title = 'XZLLsVjNatw-Dialogmodulecsstitle';\nexport const titleArea = 'XZLLsVjNatw-DialogmodulecsstitleArea';\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 = `.aJeqJtvaag-Searchboxmodulecsssearchbox {\\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 = 'aJeqJtvaag-Searchboxmodulecsssearchbox';\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';\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 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, filename, fixable } = props;\n const cloudpack = useCloudpack();\n\n const editConfig = () => {\n cloudpack.editConfig();\n };\n\n const addOverride = () => {\n cloudpack.addOverride({ packageName, importPath, filename });\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 {`A deep import package name: \"${packageName}\" was imported, but was unrecognized as an exported entry path: \"${importPath}\".`}\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 : `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; filename?: 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, filename?: 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 let { importPath = '' } = importString;\n\n if (importPath.startsWith('/')) {\n importPath = importPath.slice(1);\n } else if (importPath.startsWith('./')) {\n importPath = importPath.slice(2);\n }\n\n (async () => {\n const { fixable } = await cloudpack.validateOverride({ packageName, importPath, filename });\n setErrorEvents((prev) => ({\n ...prev,\n unsupported: [...prev.unsupported, { packageName, importPath, filename, 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\ndeclare global {\n interface Window {\n __cloudpack: {\n getPageLoadTime: () => Promise<number>;\n };\n }\n}\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 } = window.__cloudpack;\n const pageLoadTime = await getPageLoadTime();\n setPageLoadTime(pageLoadTime);\n cloudpack.reportMetric({ metric: 'PAGE_LOAD_TIME', value: pageLoadTime });\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 = `.ASWLklJWA-ThemeProvidermodulecssroot {\\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 = 'ASWLklJWA-ThemeProvidermodulecssroot';\nexport default {root}\n"],
5
+ "mappings": "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",
6
6
  "names": ["React", "s", "name", "value", "data", "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", "React", "name", "React", "useRef", "compiledModule", "s", "commands", "title", "titleArea", "title", "commands", "useRef", "React", "React", "compiledModule", "s", "value", "React", "React", "React", "React", "cx", "React", "cx", "React", "useEffect", "useState", "useState", "useEffect", "error", "React", "React", "pageLoadTime", "useState", "useRef", "React", "useCallback", "React", "compiledModule", "s", "root", "React", "React"]
7
7
  }
@@ -143,11 +143,13 @@
143
143
  "node:vm",
144
144
  "node:worker_threads",
145
145
  "node:zlib",
146
+ "@ms-cloudpack/api-server",
146
147
  "@ms-cloudpack/data-bus",
147
148
  "@ms-cloudpack/path-string-parsing",
148
149
  "react",
149
150
  "react-dom",
150
151
  "classnames",
152
+ "zod",
151
153
  "@ms-cloudpack/eslint-plugin",
152
154
  "@ms-cloudpack/eslint-plugin-internal",
153
155
  "@ms-cloudpack/scripts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "builder:notify",
3
- "buildId": "build_879f28b8-d59b-4765-9b0e-a7b16af6e9a6",
3
+ "buildId": "build_459031c9-171f-4e7f-a953-9f0e5f404314",
4
4
  "buildStatus": "complete",
5
5
  "internalError": null,
6
6
  "warnings": [],
@@ -17,7 +17,7 @@
17
17
  "imports": []
18
18
  },
19
19
  "packages/overlay/src/components/CloudpackProvider/createCloudpackClient.ts": {
20
- "bytes": 6514,
20
+ "bytes": 6708,
21
21
  "imports": [
22
22
  {
23
23
  "path": "packages/overlay/src/components/CloudpackProvider/getCookies.ts",
@@ -59,7 +59,7 @@
59
59
  "imports": []
60
60
  },
61
61
  "packages/overlay/src/components/CloudpackProvider/useStatus.ts": {
62
- "bytes": 866,
62
+ "bytes": 812,
63
63
  "imports": [
64
64
  {
65
65
  "path": "react",
@@ -69,6 +69,11 @@
69
69
  {
70
70
  "path": "packages/overlay/src/components/CloudpackProvider/CloudpackProvider.tsx",
71
71
  "kind": "import-statement"
72
+ },
73
+ {
74
+ "path": "@ms-cloudpack/api-server/client",
75
+ "kind": "import-statement",
76
+ "external": true
72
77
  }
73
78
  ]
74
79
  },
@@ -199,7 +204,7 @@
199
204
  ]
200
205
  },
201
206
  "packages/overlay/src/components/CloudpackProvider/useStatusDetails.ts": {
202
- "bytes": 858,
207
+ "bytes": 920,
203
208
  "imports": [
204
209
  {
205
210
  "path": "react",
@@ -209,6 +214,11 @@
209
214
  {
210
215
  "path": "packages/overlay/src/components/CloudpackProvider/CloudpackProvider.tsx",
211
216
  "kind": "import-statement"
217
+ },
218
+ {
219
+ "path": "@ms-cloudpack/api-server/client",
220
+ "kind": "import-statement",
221
+ "external": true
212
222
  }
213
223
  ]
214
224
  },
@@ -499,7 +509,7 @@
499
509
  "imports": [],
500
510
  "exports": [],
501
511
  "inputs": {},
502
- "bytes": 80478
512
+ "bytes": 80595
503
513
  },
504
514
  "packages/overlay/dist/browser-esm/lib/index.js": {
505
515
  "imports": [
@@ -548,6 +558,11 @@
548
558
  "kind": "import-statement",
549
559
  "external": true
550
560
  },
561
+ {
562
+ "path": "@ms-cloudpack/api-server/client",
563
+ "kind": "import-statement",
564
+ "external": true
565
+ },
551
566
  {
552
567
  "path": "react",
553
568
  "kind": "import-statement",
@@ -583,6 +598,11 @@
583
598
  "kind": "import-statement",
584
599
  "external": true
585
600
  },
601
+ {
602
+ "path": "@ms-cloudpack/api-server/client",
603
+ "kind": "import-statement",
604
+ "external": true
605
+ },
586
606
  {
587
607
  "path": "react",
588
608
  "kind": "import-statement",
@@ -644,7 +664,7 @@
644
664
  "bytesInOutput": 317
645
665
  },
646
666
  "packages/overlay/src/components/CloudpackProvider/createCloudpackClient.ts": {
647
- "bytesInOutput": 4227
667
+ "bytesInOutput": 4121
648
668
  },
649
669
  "packages/overlay/src/components/StatusOverlay/StatusOverlay.tsx": {
650
670
  "bytesInOutput": 1087
@@ -659,7 +679,7 @@
659
679
  "bytesInOutput": 3349
660
680
  },
661
681
  "packages/overlay/src/components/CloudpackProvider/useStatus.ts": {
662
- "bytesInOutput": 448
682
+ "bytesInOutput": 517
663
683
  },
664
684
  "packages/overlay/src/components/StatusDialog/StatusDialog.tsx": {
665
685
  "bytesInOutput": 864
@@ -695,7 +715,7 @@
695
715
  "bytesInOutput": 2124
696
716
  },
697
717
  "packages/overlay/src/components/CloudpackProvider/useStatusDetails.ts": {
698
- "bytesInOutput": 299
718
+ "bytesInOutput": 361
699
719
  },
700
720
  "packages/overlay/src/components/StatusDialog/TaskList.module.css": {
701
721
  "bytesInOutput": 556
@@ -734,7 +754,7 @@
734
754
  "bytesInOutput": 622
735
755
  }
736
756
  },
737
- "bytes": 50435
757
+ "bytes": 50460
738
758
  }
739
759
  }
740
760
  }
@@ -1,39 +1,41 @@
1
+ import { type DataBusPath } from '@ms-cloudpack/data-bus';
2
+ import type { z } from 'zod';
1
3
  export interface CloudpackClient {
2
- dispose: () => void;
3
- getValue(path: string[]): any;
4
- subscribe: (path: string[], callback: (newValue: any, oldValue: any) => void) => () => void;
5
- openSource: (options: {
4
+ dispose(): void;
5
+ getValue<TZodData extends z.ZodType>(path: DataBusPath<TZodData>): z.infer<TZodData>;
6
+ subscribe<TZodData extends z.ZodType>(path: DataBusPath<TZodData>, callback: (newValue: any, oldValue: any) => void): () => void;
7
+ openSource(options: {
6
8
  rootPath: string;
7
9
  relativePath: string;
8
10
  line: number;
9
11
  column: number;
10
- }) => void;
11
- open: (options: {
12
+ }): void;
13
+ open(options: {
12
14
  rootPath: string;
13
15
  relativePath?: string;
14
- }) => void;
15
- editConfig: () => void;
16
- addOverride: (options: {
16
+ }): void;
17
+ editConfig(): void;
18
+ addOverride(options: {
17
19
  packageName: string;
18
20
  importPath: string;
19
21
  filename?: string;
20
- }) => void;
21
- validateOverride: (options: {
22
+ }): void;
23
+ validateOverride(options: {
22
24
  packageName: string;
23
25
  importPath: string;
24
26
  filename?: string;
25
- }) => Promise<{
27
+ }): Promise<{
26
28
  fixable: boolean;
27
29
  }>;
28
- restartAllTasks: () => void;
29
- restartTask: (options: {
30
+ restartAllTasks(): void;
31
+ restartTask(options: {
30
32
  id: string;
31
33
  inputPath: string;
32
- }) => void;
33
- reportMetric: (options: {
34
+ }): void;
35
+ reportMetric(options: {
34
36
  metric: string;
35
37
  value: number;
36
- }) => void;
38
+ }): void;
37
39
  }
38
40
  export declare function createCloudpackClient(): CloudpackClient;
39
41
  //# sourceMappingURL=createCloudpackClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createCloudpackClient.d.ts","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/createCloudpackClient.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAC9B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAE5F,UAAU,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxG,IAAI,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACrE,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,CAAC,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/F,gBAAgB,EAAE,CAAC,OAAO,EAAE;QAC1B,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACpC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,CAAC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAClE,YAAY,EAAE,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACpE;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAmNvD"}
1
+ {"version":3,"file":"createCloudpackClient.d.ts","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/createCloudpackClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,QAAQ,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrF,SAAS,CAAC,QAAQ,SAAS,CAAC,CAAC,OAAO,EAClC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,GAC/C,MAAM,IAAI,CAAC;IAEd,UAAU,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACpG,IAAI,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACjE,UAAU,IAAI,IAAI,CAAC;IACnB,WAAW,CAAC,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3F,gBAAgB,CAAC,OAAO,EAAE;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAClC,eAAe,IAAI,IAAI,CAAC;IACxB,WAAW,CAAC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9D,YAAY,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAChE;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAmNvD"}
@@ -128,12 +128,11 @@ export function createCloudpackClient() {
128
128
  * Creates a subscription to the given path.
129
129
  */
130
130
  function subscribe(path, callback) {
131
- const sessionPath = [sessionId, ...path];
132
- return bus.subscribe(sessionPath, callback);
131
+ return bus.subscribe(path, callback);
133
132
  }
134
133
  function getValue(path) {
135
- const sessionPath = [sessionId, ...path];
136
- return bus.getData(sessionPath);
134
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
135
+ return bus.getData(path);
137
136
  }
138
137
  function openSource(options) {
139
138
  sendMessage({ type: 'openSource', data: options });
@@ -1 +1 @@
1
- {"version":3,"file":"createCloudpackClient.js","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/createCloudpackClient.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAqBvD,MAAM,UAAU,qBAAqB;IACnC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,GAAG,CAAC,WAAW,CAAC;QACd,IAAI,EAAE,EAAE;QACR,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YACvB,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAC5B,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1B,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAC9D,IAAI,MAA6B,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB;;OAEG;IACH,SAAS,cAAc;QACrB,IAAI,MAAM,IAAI,SAAS,EAAE;YACvB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;YAExC,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE;gBACtB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC7B,MAAM,GAAG,SAAS,CAAC;gBACnB,MAAM,CAAC,SAAS,GAAG,iBAAiB,CAAC;gBACrC,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;oBACpB,MAAM,GAAG,SAAS,CAAC;gBACrB,CAAC,CAAC;gBAEF,wCAAwC;gBACxC,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE;oBACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACtB;gBACD,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9B,CAAC,CAAC;SACH;IACH,CAAC;IAED;;OAEG;IACH,SAAS,OAAO;QACd,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,SAAS,CAAC;SACpB;IACH,CAAC;IAED;;OAEG;IACH,SAAS,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAuE;QACjH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACtB;aAAM;YACL,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAChC;IACH,CAAC;IAED,MAAM,cAAc,GAMhB,EAAE,CAAC;IAEP;;OAEG;IACH,SAAS,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAmD;QAClF,MAAM,SAAS,GAAG,GAAG,OAAO,EAAE,EAAE,CAAC;QACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE;oBAC7B,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;iBACzC;YACH,CAAC,EAAE,KAAK,CAAC,CAAC;YAEV,cAAc,CAAC,SAAS,CAAC,GAAG;gBAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;oBAChB,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;oBACjC,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;gBACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChB,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;oBACjC,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;aACF,CAAC;YAEF,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,iBAAiB,CAAC,OAAyB;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAA4B,CAAC;QACrE,MAAM,SAAS,GAAG,QAAQ,CAAC,SAA+B,CAAC;QAE3D,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjD,OAAO;SACR;QAED,QAAQ,QAAQ,CAAC,IAAI,EAAE;YACrB,KAAK,QAAQ,CAAC,CAAC;gBACb,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;gBAEhC,GAAG,CAAC,OAAO,CAAC,IAAgB,EAAE,IAAI,CAAC,CAAC;gBACpC,MAAM;aACP;YAED,KAAK,QAAQ,CAAC,CAAC;gBACb,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACzB,MAAM;aACP;YAED,KAAK,UAAU,CAAC,CAAC;gBACf,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;gBAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;iBAC1B;gBACD,MAAM;aACP;SACF;IACH,CAAC;IAED;;OAEG;IACH,SAAS,SAAS,CAAC,IAAc,EAAE,QAAgD;QACjF,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QAEzC,OAAO,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,QAAQ,CAAC,IAAc;QAC9B,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QAEzC,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,UAAU,CAAC,OAAiF;QACnG,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,IAAI,CAAC,OAAoD;QAChE,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS,UAAU;QACjB,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,SAAS,WAAW,CAAC,OAAuE;QAC1F,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,SAAS,gBAAgB,CAAC,OAAuE;QAC/F,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAkC,CAAC;IACnG,CAAC;IAED,SAAS,eAAe;QACtB,WAAW,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,WAAW,CAAC,OAA0C;QAC7D,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,SAAS,YAAY,CAAC,OAA0C;QAC9D,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,wBAAwB;IACxB,cAAc,EAAE,CAAC;IAEjB,yBAAyB;IACzB,OAAO;QACL,OAAO;QACP,QAAQ;QACR,IAAI;QACJ,UAAU;QACV,SAAS;QACT,UAAU;QACV,WAAW;QACX,WAAW;QACX,eAAe;QACf,gBAAgB;QAChB,YAAY;KACb,CAAC;AACJ,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getCookies } from './getCookies.js';\nimport { createDataBus } from '@ms-cloudpack/data-bus';\n\nexport interface CloudpackClient {\n dispose: () => void;\n getValue(path: string[]): any;\n subscribe: (path: string[], callback: (newValue: any, oldValue: any) => void) => () => void;\n\n openSource: (options: { rootPath: string; relativePath: string; line: number; column: number }) => void;\n open: (options: { rootPath: string; relativePath?: string }) => void;\n editConfig: () => void;\n addOverride: (options: { packageName: string; importPath: string; filename?: string }) => void;\n validateOverride: (options: {\n packageName: string;\n importPath: string;\n filename?: string;\n }) => Promise<{ fixable: boolean }>;\n restartAllTasks: () => void;\n restartTask: (options: { id: string; inputPath: string }) => void;\n reportMetric: (options: { metric: string; value: number }) => 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['cloudpack-session-id'];\n const apiUrl = cookies['cloudpack-api-url'];\n const currentSequence = cookies['cloudpack-session-sequence'];\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 * Closes the websocket connection.\n */\n function dispose() {\n if (socket) {\n socket.close();\n socket = undefined;\n }\n }\n\n /**\n * Sends a message to the websocket.\n */\n function sendMessage({ type, requestId, data }: { type: string; requestId?: string; data: Record<string, unknown> }) {\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({ type, data }: { type: string; data: Record<string, unknown> }) {\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: (data) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n resolve(data);\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 /**\n * Creates a subscription to the given path.\n */\n function subscribe(path: string[], callback: (newValue: any, oldValue: any) => void) {\n const sessionPath = [sessionId, ...path];\n\n return bus.subscribe(sessionPath, callback);\n }\n\n function getValue(path: string[]): any {\n const sessionPath = [sessionId, ...path];\n\n return bus.getData(sessionPath);\n }\n\n function openSource(options: { rootPath: string; relativePath: string; line: number; column: number }) {\n sendMessage({ type: 'openSource', data: options });\n }\n\n function open(options: { rootPath: string; relativePath?: string }) {\n sendMessage({ type: 'open', data: options });\n }\n\n function editConfig() {\n sendMessage({ type: 'editConfig', data: {} });\n }\n\n function addOverride(options: { packageName: string; importPath: string; filename?: string }) {\n sendMessage({ type: 'addOverride', data: options });\n }\n\n function validateOverride(options: { packageName: string; importPath: string; filename?: string }) {\n return sendRequest({ type: 'validateOverride', data: options }) as Promise<{ fixable: boolean }>;\n }\n\n function restartAllTasks() {\n sendMessage({ type: 'restartAllTasks', data: {} });\n }\n\n function restartTask(options: { id: string; inputPath: string }) {\n sendMessage({ type: 'restartTask', data: options });\n }\n\n function reportMetric(options: { metric: string; value: number }) {\n sendMessage({ type: 'reportMetric', data: options });\n }\n\n // Start the connection.\n openConnection();\n\n // Return the public API.\n return {\n dispose,\n getValue,\n open,\n openSource,\n subscribe,\n editConfig,\n addOverride,\n restartTask,\n restartAllTasks,\n validateOverride,\n reportMetric,\n };\n}\n"]}
1
+ {"version":3,"file":"createCloudpackClient.js","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/createCloudpackClient.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getCookies } from './getCookies.js';\nimport { createDataBus, type DataBusPath } from '@ms-cloudpack/data-bus';\nimport type { z } from 'zod';\nexport interface CloudpackClient {\n dispose(): void;\n getValue<TZodData extends z.ZodType>(path: DataBusPath<TZodData>): z.infer<TZodData>;\n subscribe<TZodData extends z.ZodType>(\n path: DataBusPath<TZodData>,\n callback: (newValue: any, oldValue: any) => void,\n ): () => void;\n\n openSource(options: { rootPath: string; relativePath: string; line: number; column: number }): void;\n open(options: { rootPath: string; relativePath?: string }): void;\n editConfig(): void;\n addOverride(options: { packageName: string; importPath: string; filename?: string }): void;\n validateOverride(options: {\n packageName: string;\n importPath: string;\n filename?: string;\n }): Promise<{ fixable: boolean }>;\n restartAllTasks(): void;\n restartTask(options: { id: string; inputPath: string }): void;\n reportMetric(options: { metric: string; value: number }): 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['cloudpack-session-id'];\n const apiUrl = cookies['cloudpack-api-url'];\n const currentSequence = cookies['cloudpack-session-sequence'];\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 * Closes the websocket connection.\n */\n function dispose() {\n if (socket) {\n socket.close();\n socket = undefined;\n }\n }\n\n /**\n * Sends a message to the websocket.\n */\n function sendMessage({ type, requestId, data }: { type: string; requestId?: string; data: Record<string, unknown> }) {\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({ type, data }: { type: string; data: Record<string, unknown> }) {\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: (data) => {\n delete activeRequests[requestId];\n clearTimeout(timeoutId);\n resolve(data);\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 /**\n * Creates a subscription to the given path.\n */\n function subscribe<TZodData extends z.ZodType>(\n path: DataBusPath<TZodData>,\n callback: (newValue: z.infer<TZodData>, oldValue: z.infer<TZodData>) => void,\n ) {\n return bus.subscribe(path, callback);\n }\n\n function getValue<TZodData extends z.ZodType>(path: DataBusPath<TZodData>) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return bus.getData(path);\n }\n\n function openSource(options: { rootPath: string; relativePath: string; line: number; column: number }) {\n sendMessage({ type: 'openSource', data: options });\n }\n\n function open(options: { rootPath: string; relativePath?: string }) {\n sendMessage({ type: 'open', data: options });\n }\n\n function editConfig() {\n sendMessage({ type: 'editConfig', data: {} });\n }\n\n function addOverride(options: { packageName: string; importPath: string; filename?: string }) {\n sendMessage({ type: 'addOverride', data: options });\n }\n\n function validateOverride(options: { packageName: string; importPath: string; filename?: string }) {\n return sendRequest({ type: 'validateOverride', data: options }) as Promise<{ fixable: boolean }>;\n }\n\n function restartAllTasks() {\n sendMessage({ type: 'restartAllTasks', data: {} });\n }\n\n function restartTask(options: { id: string; inputPath: string }) {\n sendMessage({ type: 'restartTask', data: options });\n }\n\n function reportMetric(options: { metric: string; value: number }) {\n sendMessage({ type: 'reportMetric', data: options });\n }\n\n // Start the connection.\n openConnection();\n\n // Return the public API.\n return {\n dispose,\n getValue,\n open,\n openSource,\n subscribe,\n editConfig,\n addOverride,\n restartTask,\n restartAllTasks,\n validateOverride,\n reportMetric,\n };\n}\n"]}
@@ -1,10 +1,12 @@
1
+ import { taskStatsSource } from '@ms-cloudpack/api-server/client';
2
+ import type { z } from 'zod';
1
3
  export type CloudpackStatusType = 'unknown' | 'idle' | 'building' | 'success' | 'warning' | 'error' | 'cancelled';
2
- export interface CloudpackStatus {
3
- status: 'idle' | 'pending' | 'unknown';
4
+ export type CloudpackStatus = z.infer<(typeof taskStatsSource)['type']>;
5
+ export declare const useStatus: () => {
6
+ status: "unknown" | "idle" | "pending";
4
7
  remainingTasks: number;
5
8
  totalTasks: number;
6
9
  totalErrors: number;
7
10
  totalWarnings: number;
8
- }
9
- export declare const useStatus: () => CloudpackStatus;
11
+ };
10
12
  //# sourceMappingURL=useStatus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useStatus.d.ts","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/useStatus.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;AAGlH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAEvC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IAEnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAUD,eAAO,MAAM,SAAS,uBASrB,CAAC"}
1
+ {"version":3,"file":"useStatus.d.ts","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/useStatus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;AAClH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAUxE,eAAO,MAAM,SAAS;;;;;;CAOrB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { useEffect, useState } from 'react';
2
2
  import { useCloudpack } from './CloudpackProvider.js';
3
+ import { taskStatsSource } from '@ms-cloudpack/api-server/client';
3
4
  const defaultStatus = {
4
5
  status: 'unknown',
5
6
  remainingTasks: 0,
@@ -9,8 +10,8 @@ const defaultStatus = {
9
10
  };
10
11
  export const useStatus = () => {
11
12
  const service = useCloudpack();
12
- const [status, setStatus] = useState(() => service?.getValue(['status']) || defaultStatus);
13
- useEffect(() => service?.subscribe(['status'], setStatus), [service]);
13
+ const [status, setStatus] = useState(() => service?.getValue(taskStatsSource) || defaultStatus);
14
+ useEffect(() => service?.subscribe(taskStatsSource, setStatus), [service]);
14
15
  return status;
15
16
  };
16
17
  //# sourceMappingURL=useStatus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useStatus.js","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/useStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAetD,MAAM,aAAa,GAAoB;IACrC,MAAM,EAAE,SAAS;IACjB,cAAc,EAAE,CAAC;IACjB,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;IACd,aAAa,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAClC,GAAG,EAAE,CAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAqB,IAAI,aAAa,CAC1E,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\nimport { useCloudpack } from './CloudpackProvider.js';\n\nexport type CloudpackStatusType = 'unknown' | 'idle' | 'building' | 'success' | 'warning' | 'error' | 'cancelled';\n\n// TODO: fix dupe typings\nexport interface CloudpackStatus {\n status: 'idle' | 'pending' | 'unknown';\n\n remainingTasks: number;\n totalTasks: number;\n\n totalErrors: number;\n totalWarnings: number;\n}\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>(\n () => (service?.getValue(['status']) as CloudpackStatus) || defaultStatus,\n );\n\n useEffect(() => service?.subscribe(['status'], setStatus), [service]);\n\n return status;\n};\n"]}
1
+ {"version":3,"file":"useStatus.js","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/useStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAMlE,MAAM,aAAa,GAAoB;IACrC,MAAM,EAAE,SAAS;IACjB,cAAc,EAAE,CAAC;IACjB,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;IACd,aAAa,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE;IAC5B,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,IAAI,aAAa,CAAC,CAAC;IAEjH,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3E,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\nimport { useCloudpack } from './CloudpackProvider.js';\nimport { taskStatsSource } from '@ms-cloudpack/api-server/client';\nimport type { z } from 'zod';\n\nexport type CloudpackStatusType = 'unknown' | 'idle' | 'building' | 'success' | 'warning' | 'error' | 'cancelled';\nexport type CloudpackStatus = z.infer<(typeof taskStatsSource)['type']>;\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useStatusDetails.d.ts","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/useStatusDetails.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,UAAU,0BAA0B;IAClC,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,gBAAgB,kCAO5B,CAAC"}
1
+ {"version":3,"file":"useStatusDetails.d.ts","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/useStatusDetails.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAC/B,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,UAAU,0BAA0B;IAClC,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,gBAAgB,kCAO5B,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { useEffect, useState } from 'react';
2
2
  import { useCloudpack } from './CloudpackProvider.js';
3
+ import { taskListSource } from '@ms-cloudpack/api-server/client';
3
4
  export const useStatusDetails = () => {
4
5
  const service = useCloudpack();
5
6
  const [details, setDetails] = useState({ tasks: [] });
6
- useEffect(() => service?.subscribe(['status-details'], setDetails), [service]);
7
+ useEffect(() => service?.subscribe(taskListSource, setDetails), [service]);
7
8
  return details;
8
9
  };
9
10
  //# sourceMappingURL=useStatusDetails.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useStatusDetails.js","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/useStatusDetails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AA4BtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAA6B,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAElF,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE/E,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\nimport { useCloudpack } from './CloudpackProvider.js';\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(['status-details'], setDetails), [service]);\n\n return details;\n};\n"]}
1
+ {"version":3,"file":"useStatusDetails.js","sourceRoot":"","sources":["../../../src/components/CloudpackProvider/useStatusDetails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AA4BjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAA6B,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAElF,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3E,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["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"]}
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.36.1"
8
+ "packageVersion": "7.36.3"
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.13.12",
3
+ "version": "0.14.0",
4
4
  "description": "The Cloudpack overlay ux.",
5
5
  "license": "MIT",
6
6
  "types": "./lib/index.d.ts",
@@ -21,11 +21,13 @@
21
21
  "lint": "cloudpack-scripts lint"
22
22
  },
23
23
  "dependencies": {
24
- "@ms-cloudpack/data-bus": "^0.3.1",
24
+ "@ms-cloudpack/api-server": "^0.11.0",
25
+ "@ms-cloudpack/data-bus": "^0.4.0",
25
26
  "@ms-cloudpack/path-string-parsing": "^1.0.3",
26
27
  "react": "^17.0.0 || ^18.0.0",
27
28
  "react-dom": "^17.0.0 || ^18.0.0",
28
- "classnames": "^2.3.1"
29
+ "classnames": "^2.3.1",
30
+ "zod": "^3.21.4"
29
31
  },
30
32
  "devDependencies": {
31
33
  "@ms-cloudpack/eslint-plugin": "*",