@parallelworks/ui 0.19.1 → 0.20.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.
@@ -1,9 +1,10 @@
1
+ import { safeUrl } from "../safeUrl.js";
1
2
  import { createContext, use, useCallback, useContext, useEffect, useMemo } from "react";
2
3
  import { useLocalStorage } from "usehooks-ts";
3
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
4
5
  //#region src/components/Provider.tsx
5
6
  var DefaultLink = ({ to, onClick, className, children, ...rest }) => /* @__PURE__ */ jsx("a", {
6
- href: to,
7
+ href: safeUrl(to),
7
8
  onClick,
8
9
  className,
9
10
  ...rest,
@@ -399,11 +400,18 @@ var DEFAULTS = {
399
400
  }
400
401
  },
401
402
  navigation: {
402
- goTo: (to) => window.location.assign(to),
403
+ goTo: (to) => {
404
+ const url = safeUrl(to);
405
+ if (url) window.location.assign(url);
406
+ },
403
407
  openStepSource: (_uses, sourceUrl) => {
404
- if (sourceUrl) window.open(sourceUrl, "_blank");
408
+ const url = safeUrl(sourceUrl);
409
+ if (url) window.open(url, "_blank");
405
410
  },
406
- openExternal: (href) => window.open(href, "_blank")
411
+ openExternal: (href) => {
412
+ const url = safeUrl(href);
413
+ if (url) window.open(url, "_blank");
414
+ }
407
415
  },
408
416
  data: {
409
417
  useRunFile: defaultUseRunFile,
@@ -1,36 +1,13 @@
1
1
  import { useCssIsDark } from "../components/useCssIsDark.js";
2
2
  import { defineEditorThemes, getThemeName } from "./themes.js";
3
3
  import { setupMonacoWorkers } from "./workers.js";
4
- import { onYamlSchemas } from "./yaml.js";
4
+ import { ensureYamlLanguage } from "./yamlLanguage.js";
5
5
  import cx from "classnames";
6
6
  import { useEffect, useLayoutEffect, useRef } from "react";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  import * as monaco from "monaco-editor";
9
- import { configureMonacoYaml } from "monaco-yaml";
10
9
  //#region src/editor/Monaco.tsx
11
10
  setupMonacoWorkers();
12
- var monacoWithWorkerBridge = {
13
- ...monaco,
14
- editor: {
15
- ...monaco.editor,
16
- createWebWorker: (opts) => "worker" in opts ? monaco.editor.createWebWorker(opts) : monaco.createWebWorker(opts)
17
- }
18
- };
19
- var monacoYamlConfigured = false;
20
- function ensureMonacoYamlConfigured() {
21
- if (monacoYamlConfigured) return;
22
- monacoYamlConfigured = true;
23
- const options = (schemas) => ({
24
- enableSchemaRequest: true,
25
- completion: true,
26
- validate: true,
27
- hover: true,
28
- format: { enable: true },
29
- schemas
30
- });
31
- const monacoYaml = configureMonacoYaml(monacoWithWorkerBridge, options([]));
32
- onYamlSchemas((schemas) => monacoYaml.update(options(schemas)));
33
- }
34
11
  function editorText(value) {
35
12
  return value.replace(/\r/g, "");
36
13
  }
@@ -102,7 +79,7 @@ function MonacoEditor({ className, disabled, onChange = noop, onValidate = noop,
102
79
  model.onDidChangeDecorations(() => {
103
80
  onValidate(monaco.editor.getModelMarkers({ resource: model.uri }));
104
81
  });
105
- ensureMonacoYamlConfigured();
82
+ ensureYamlLanguage();
106
83
  monacoRef.current = editor;
107
84
  }
108
85
  }
@@ -4,3 +4,8 @@
4
4
  * calls this on first load only when nothing is configured.
5
5
  */
6
6
  export declare function setupMonacoWorkers(): void;
7
+ /**
8
+ * Starts the YAML language server. It is not a Monaco worker, so a host's own
9
+ * MonacoEnvironment never has to provide it.
10
+ */
11
+ export declare function createYamlWorker(): Worker;
@@ -2,17 +2,12 @@
2
2
  var monacoEnvironment = { getWorker(_moduleId, label) {
3
3
  if (label === "json") return new Worker(new URL(
4
4
  /* @vite-ignore */
5
- "/assets/json.worker-D8bJ92nw.js",
6
- "" + import.meta.url
7
- ), { type: "module" });
8
- if (label === "yaml") return new Worker(new URL(
9
- /* @vite-ignore */
10
- "/assets/yaml.worker-C4gyGAko.js",
5
+ new URL("../assets/json.worker-Dqgjpq9F.js", import.meta.url).href,
11
6
  "" + import.meta.url
12
7
  ), { type: "module" });
13
8
  return new Worker(new URL(
14
9
  /* @vite-ignore */
15
- "/assets/editor.worker-BmHUIVG4.js",
10
+ new URL("../assets/editor.worker-DfmPPyOL.js", import.meta.url).href,
16
11
  "" + import.meta.url
17
12
  ), { type: "module" });
18
13
  } };
@@ -25,5 +20,16 @@ function setupMonacoWorkers() {
25
20
  if (window.MonacoEnvironment) return;
26
21
  window.MonacoEnvironment = monacoEnvironment;
27
22
  }
23
+ /**
24
+ * Starts the YAML language server. It is not a Monaco worker, so a host's own
25
+ * MonacoEnvironment never has to provide it.
26
+ */
27
+ function createYamlWorker() {
28
+ return new Worker(new URL(
29
+ /* @vite-ignore */
30
+ new URL("../assets/yaml.worker-DLx0whrM.js", import.meta.url).href,
31
+ "" + import.meta.url
32
+ ), { type: "module" });
33
+ }
28
34
  //#endregion
29
- export { setupMonacoWorkers };
35
+ export { createYamlWorker, setupMonacoWorkers };
@@ -1,4 +1,12 @@
1
- import type { SchemasSettings } from 'monaco-yaml';
1
+ /** A JSON schema for the YAML models whose URI matches one of `fileMatch`. */
2
+ export interface SchemasSettings {
3
+ /** Identifies the schema; fetched from here when `schema` is not given. */
4
+ uri: string;
5
+ /** Globs matched against model URIs, such as `**\/workflow.yaml`. */
6
+ fileMatch?: string[];
7
+ /** The schema itself, used instead of fetching `uri`. */
8
+ schema?: object;
9
+ }
2
10
  /** Adds JSON schemas that validate and complete YAML models whose URI matches. */
3
11
  export declare function configureEditorYaml(added: SchemasSettings[]): void;
4
12
  /** Lets the loaded editor pick up schemas added before or after it loads. */
@@ -0,0 +1 @@
1
+ import 'yaml-language-server/lib/esm/webworker/yamlServerMain';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Starts the YAML language server and connects every yaml model to it. Runs
3
+ * once per page and is never torn down: a per-editor lifecycle let navigation
4
+ * stop the service, killing suggestions until reload.
5
+ */
6
+ export declare function ensureYamlLanguage(): void;
@@ -0,0 +1,312 @@
1
+ import { createYamlWorker } from "./workers.js";
2
+ import { onYamlSchemas } from "./yaml.js";
3
+ import * as monaco from "monaco-editor";
4
+ //#region src/editor/yamlLanguage.ts
5
+ var LANGUAGE_ID = "yaml";
6
+ var MARKER_OWNER = "yaml";
7
+ var YAML_SETTINGS = {
8
+ validate: true,
9
+ hover: true,
10
+ completion: true,
11
+ format: { enable: true },
12
+ schemaStore: { enable: false }
13
+ };
14
+ /** JSON-RPC over postMessage, the transport the server's web worker build expects. */
15
+ var WorkerConnection = class {
16
+ worker;
17
+ onRequest;
18
+ nextId = 0;
19
+ pending = /* @__PURE__ */ new Map();
20
+ notificationHandlers = /* @__PURE__ */ new Map();
21
+ constructor(worker, onRequest) {
22
+ this.worker = worker;
23
+ this.onRequest = onRequest;
24
+ worker.addEventListener("message", (event) => this.receive(event.data));
25
+ }
26
+ request(method, params, token) {
27
+ const id = this.nextId++;
28
+ const result = new Promise((resolve, reject) => {
29
+ this.pending.set(id, {
30
+ resolve,
31
+ reject
32
+ });
33
+ });
34
+ this.send({
35
+ jsonrpc: "2.0",
36
+ id,
37
+ method,
38
+ params
39
+ });
40
+ token?.onCancellationRequested(() => this.notify("$/cancelRequest", { id }));
41
+ return result;
42
+ }
43
+ notify(method, params) {
44
+ this.send({
45
+ jsonrpc: "2.0",
46
+ method,
47
+ params
48
+ });
49
+ }
50
+ onNotification(method, handler) {
51
+ this.notificationHandlers.set(method, handler);
52
+ }
53
+ send(message) {
54
+ this.worker.postMessage(message);
55
+ }
56
+ receive(message) {
57
+ if (message.method === void 0) {
58
+ const waiter = typeof message.id === "number" ? this.pending.get(message.id) : void 0;
59
+ if (!waiter || typeof message.id !== "number") return;
60
+ this.pending.delete(message.id);
61
+ if (message.error) waiter.reject(new Error(message.error.message));
62
+ else waiter.resolve(message.result);
63
+ return;
64
+ }
65
+ if (message.id === void 0) {
66
+ this.notificationHandlers.get(message.method)?.(message.params);
67
+ return;
68
+ }
69
+ Promise.resolve().then(() => this.onRequest(message.method ?? "", message.params)).then((result) => this.send({
70
+ jsonrpc: "2.0",
71
+ id: message.id ?? null,
72
+ result: result ?? null
73
+ }), (error) => this.send({
74
+ jsonrpc: "2.0",
75
+ id: message.id ?? null,
76
+ error: {
77
+ code: -32603,
78
+ message: String(error)
79
+ }
80
+ }));
81
+ }
82
+ };
83
+ function toRange(range) {
84
+ return {
85
+ startLineNumber: range.start.line + 1,
86
+ startColumn: range.start.character + 1,
87
+ endLineNumber: range.end.line + 1,
88
+ endColumn: range.end.character + 1
89
+ };
90
+ }
91
+ function toPosition(position) {
92
+ return {
93
+ line: position.lineNumber - 1,
94
+ character: position.column - 1
95
+ };
96
+ }
97
+ function toMarkdown(content) {
98
+ if (typeof content === "string") return { value: content };
99
+ if ("kind" in content) return { value: content.value };
100
+ return { value: `\`\`\`${content.language}\n${content.value}\n\`\`\`` };
101
+ }
102
+ var SEVERITY = {
103
+ 1: monaco.MarkerSeverity.Error,
104
+ 2: monaco.MarkerSeverity.Warning,
105
+ 3: monaco.MarkerSeverity.Info,
106
+ 4: monaco.MarkerSeverity.Hint
107
+ };
108
+ function toMarker(diagnostic) {
109
+ return {
110
+ ...toRange(diagnostic.range),
111
+ severity: SEVERITY[diagnostic.severity ?? 1] ?? monaco.MarkerSeverity.Error,
112
+ message: diagnostic.message,
113
+ ...diagnostic.code === void 0 ? {} : { code: String(diagnostic.code) },
114
+ ...diagnostic.source === void 0 ? {} : { source: diagnostic.source }
115
+ };
116
+ }
117
+ var KIND = monaco.languages.CompletionItemKind;
118
+ var COMPLETION_KIND = {
119
+ 1: KIND.Text,
120
+ 2: KIND.Method,
121
+ 3: KIND.Function,
122
+ 4: KIND.Constructor,
123
+ 5: KIND.Field,
124
+ 6: KIND.Variable,
125
+ 7: KIND.Class,
126
+ 8: KIND.Interface,
127
+ 9: KIND.Module,
128
+ 10: KIND.Property,
129
+ 11: KIND.Unit,
130
+ 12: KIND.Value,
131
+ 13: KIND.Enum,
132
+ 14: KIND.Keyword,
133
+ 15: KIND.Snippet,
134
+ 16: KIND.Color,
135
+ 17: KIND.File,
136
+ 18: KIND.Reference,
137
+ 19: KIND.Folder,
138
+ 20: KIND.EnumMember,
139
+ 21: KIND.Constant,
140
+ 22: KIND.Struct,
141
+ 23: KIND.Event,
142
+ 24: KIND.Operator,
143
+ 25: KIND.TypeParameter
144
+ };
145
+ function toCompletion(item, defaultRange) {
146
+ const edit = item.textEdit;
147
+ let range = defaultRange;
148
+ if (edit && "range" in edit) range = toRange(edit.range);
149
+ else if (edit) range = {
150
+ insert: toRange(edit.insert),
151
+ replace: toRange(edit.replace)
152
+ };
153
+ return {
154
+ label: item.label,
155
+ kind: COMPLETION_KIND[item.kind ?? 1] ?? KIND.Text,
156
+ insertText: edit?.newText ?? item.insertText ?? item.label,
157
+ range,
158
+ ...item.insertTextFormat === 2 ? { insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet } : {},
159
+ ...item.detail === void 0 ? {} : { detail: item.detail },
160
+ ...item.documentation === void 0 ? {} : { documentation: toMarkdown(item.documentation) },
161
+ ...item.sortText === void 0 ? {} : { sortText: item.sortText },
162
+ ...item.filterText === void 0 ? {} : { filterText: item.filterText },
163
+ ...item.commitCharacters === void 0 ? {} : { commitCharacters: item.commitCharacters },
164
+ ...item.additionalTextEdits === void 0 ? {} : { additionalTextEdits: item.additionalTextEdits.map((e) => ({
165
+ range: toRange(e.range),
166
+ text: e.newText
167
+ })) },
168
+ ...item.command === void 0 ? {} : { command: {
169
+ id: item.command.command,
170
+ title: item.command.title,
171
+ ...item.command.arguments === void 0 ? {} : { arguments: item.command.arguments }
172
+ } }
173
+ };
174
+ }
175
+ function toEdits(edits) {
176
+ return (edits ?? []).map((edit) => ({
177
+ range: toRange(edit.range),
178
+ text: edit.newText
179
+ }));
180
+ }
181
+ function answerServer(method, params) {
182
+ if (method === "workspace/configuration") {
183
+ const { items } = params;
184
+ return items.map((item) => item.section === "yaml" ? YAML_SETTINGS : null);
185
+ }
186
+ return null;
187
+ }
188
+ function startYamlLanguage() {
189
+ const worker = createYamlWorker();
190
+ worker.postMessage({});
191
+ const connection = new WorkerConnection(worker, answerServer);
192
+ const open = /* @__PURE__ */ new Map();
193
+ const ready = connection.request("initialize", {
194
+ processId: null,
195
+ rootUri: null,
196
+ capabilities: {
197
+ workspace: { configuration: true },
198
+ textDocument: {
199
+ synchronization: {},
200
+ completion: { completionItem: {
201
+ snippetSupport: true,
202
+ insertReplaceSupport: true,
203
+ documentationFormat: ["markdown", "plaintext"]
204
+ } },
205
+ hover: { contentFormat: ["markdown", "plaintext"] },
206
+ publishDiagnostics: {}
207
+ }
208
+ }
209
+ }).then(() => {
210
+ connection.notify("initialized", {});
211
+ connection.notify("workspace/didChangeConfiguration", { settings: null });
212
+ });
213
+ onYamlSchemas((schemas) => {
214
+ ready.then(() => connection.notify("json/schemaAssociations", [schemas]));
215
+ });
216
+ connection.onNotification("textDocument/publishDiagnostics", (params) => {
217
+ const { uri, diagnostics } = params;
218
+ const model = open.get(uri);
219
+ if (model && !model.isDisposed()) monaco.editor.setModelMarkers(model, MARKER_OWNER, diagnostics.map(toMarker));
220
+ });
221
+ function close(uri, model) {
222
+ open.delete(uri);
223
+ ready.then(() => connection.notify("textDocument/didClose", { textDocument: { uri } }));
224
+ if (!model.isDisposed()) monaco.editor.setModelMarkers(model, MARKER_OWNER, []);
225
+ }
226
+ function track(model) {
227
+ const uri = model.uri.toString();
228
+ const sync = () => {
229
+ const isYaml = model.getLanguageId() === LANGUAGE_ID;
230
+ if (isYaml && !open.has(uri)) {
231
+ open.set(uri, model);
232
+ const textDocument = {
233
+ uri,
234
+ languageId: LANGUAGE_ID,
235
+ version: model.getVersionId(),
236
+ text: model.getValue()
237
+ };
238
+ ready.then(() => connection.notify("textDocument/didOpen", { textDocument }));
239
+ } else if (!isYaml && open.has(uri)) close(uri, model);
240
+ };
241
+ model.onDidChangeLanguage(sync);
242
+ model.onDidChangeContent(() => {
243
+ if (!open.has(uri)) return;
244
+ const params = {
245
+ textDocument: {
246
+ uri,
247
+ version: model.getVersionId()
248
+ },
249
+ contentChanges: [{ text: model.getValue() }]
250
+ };
251
+ ready.then(() => connection.notify("textDocument/didChange", params));
252
+ });
253
+ model.onWillDispose(() => {
254
+ if (open.get(uri) === model) close(uri, model);
255
+ });
256
+ sync();
257
+ }
258
+ for (const model of monaco.editor.getModels()) track(model);
259
+ monaco.editor.onDidCreateModel(track);
260
+ async function request(method, model, params, token) {
261
+ await ready;
262
+ return connection.request(method, {
263
+ textDocument: { uri: model.uri.toString() },
264
+ ...params
265
+ }, token);
266
+ }
267
+ monaco.languages.registerCompletionItemProvider(LANGUAGE_ID, {
268
+ triggerCharacters: [" ", ":"],
269
+ async provideCompletionItems(model, position, _context, token) {
270
+ const result = await request("textDocument/completion", model, { position: toPosition(position) }, token);
271
+ const word = model.getWordUntilPosition(position);
272
+ const defaultRange = {
273
+ startLineNumber: position.lineNumber,
274
+ startColumn: word.startColumn,
275
+ endLineNumber: position.lineNumber,
276
+ endColumn: word.endColumn
277
+ };
278
+ const items = Array.isArray(result) ? result : result?.items ?? [];
279
+ return {
280
+ incomplete: !Array.isArray(result) && Boolean(result?.isIncomplete),
281
+ suggestions: items.map((item) => toCompletion(item, defaultRange))
282
+ };
283
+ }
284
+ });
285
+ monaco.languages.registerHoverProvider(LANGUAGE_ID, { async provideHover(model, position, token) {
286
+ const hover = await request("textDocument/hover", model, { position: toPosition(position) }, token);
287
+ if (!hover) return null;
288
+ return {
289
+ contents: (Array.isArray(hover.contents) ? hover.contents : [hover.contents]).map(toMarkdown),
290
+ ...hover.range === void 0 ? {} : { range: toRange(hover.range) }
291
+ };
292
+ } });
293
+ monaco.languages.registerDocumentFormattingEditProvider(LANGUAGE_ID, { async provideDocumentFormattingEdits(model, options, token) {
294
+ return toEdits(await request("textDocument/formatting", model, { options: {
295
+ tabSize: options.tabSize,
296
+ insertSpaces: options.insertSpaces
297
+ } }, token));
298
+ } });
299
+ }
300
+ var started = false;
301
+ /**
302
+ * Starts the YAML language server and connects every yaml model to it. Runs
303
+ * once per page and is never torn down: a per-editor lifecycle let navigation
304
+ * stop the service, killing suggestions until reload.
305
+ */
306
+ function ensureYamlLanguage() {
307
+ if (started) return;
308
+ started = true;
309
+ startYamlLanguage();
310
+ }
311
+ //#endregion
312
+ export { ensureYamlLanguage };
@@ -1,3 +1,4 @@
1
+ import { safeUrl } from "../safeUrl.js";
1
2
  import { useNotify, useSlots, useStrings } from "../components/Provider.js";
2
3
  import { AccessIcon, AlertIcon, AngleDownIcon, ChevronRightIcon, ClipboardIcon, CollapseIcon, DownloadFileIcon, EyeIcon, FileIcon, FileTextIcon, FolderIcon, LinkIcon, RefreshIcon, ShareIcon, TrashIcon, UploadIcon } from "../icons.js";
3
4
  import { keyedByContent } from "../components/keys.js";
@@ -473,8 +474,10 @@ function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHie
473
474
  notify.info(t.messages.fileLinkCopied);
474
475
  };
475
476
  const triggerBrowserDownload = (url, filename) => {
477
+ const href = safeUrl(url);
478
+ if (!href) return;
476
479
  const a = document.createElement("a");
477
- a.href = url;
480
+ a.href = href;
478
481
  a.download = filename;
479
482
  document.body.appendChild(a);
480
483
  a.click();
package/dist/icons.d.ts CHANGED
@@ -5,12 +5,12 @@ import { FaInfoCircle as InfoIcon } from 'react-icons/fa';
5
5
  export type { IconType } from 'react-icons';
6
6
  export { AiOutlineRollback as RollbackIcon } from 'react-icons/ai';
7
7
  export { BiBell as UnmuteIcon, BiBellOff as MuteIcon, BiBuildings as OrganizationIcon, BiExpandVertical as ExpandVerticalIcon, BiPause as PauseIcon, BiPlay as StartIcon, BiSolidCheckShield as ShieldIcon, BiSolidTrashAlt as TrashIcon, BiStop as StopIcon, } from 'react-icons/bi';
8
- export { BsArrowsCollapse as CollapseIcon, BsBucket as BucketIcon, BsFileEarmarkZip as ZipIcon, BsGrid as GridIcon, BsMusicNoteBeamed as MusicIcon, BsSearch as SearchOutlineIcon, BsStar as PinIcon, BsStarFill as PinFilledIcon, BsStopCircle as StopCircleIcon, BsTerminal as UserWorkspaceIcon, BsTerminalFill as UserWorkspaceFillIcon, BsThreeDots as MoreIcon, BsThreeDotsVertical as MenuIcon, } from 'react-icons/bs';
9
- export { FaAmazon as AmazonIcon, FaAngleDown as AngleDownIcon, FaAngleLeft as AngleLeftIcon, FaAngleRight as AngleRightIcon, FaAngleUp as AngleUpIcon, FaArrowDown as ArrowDownIcon, FaArrowLeft as ArrowLeftIcon, FaArrowRight as ArrowRightIcon, FaArrowUp as ArrowUpIcon, FaCaretDown as CaretDownIcon, FaCentos as CentOSIcon, FaChartLine as ChartIcon, FaChartPie as PieChartIcon, FaCheck as CheckIcon, FaChevronDown as ChevronDownIcon, FaChevronUp as ChevronUpIcon, FaChrome as ChromeIcon, FaCloud as CloudIcon, FaCloudDownloadAlt as DownloadIcon, FaCog as CogIcon, FaCogs as GearsIcon, FaComments as ChatIcon, FaCompress as ShrinkIcon, FaDesktop as SnapshotIcon, FaDocker as DockerIcon, FaDollarSign as CostDashboardIcon, FaEdge as EdgeIcon, FaEdit as EditIcon, FaExclamationTriangle as WarningTriangleIcon, FaExpand as ExpandIcon, FaEye as HiddenFalseIcon, FaEyeSlash as HiddenTrueIcon, FaFile as FileSolidIcon, FaFilePdf as PdfSolidIcon, FaFilter as FilterIcon, FaFirefoxBrowser as FirefoxIcon, FaFlask as FlaskIcon, FaFolder as FolderSolidIcon, FaGithub as GitHubIcon, FaGitlab as GitLabIcon, FaGlobe as GlobeIcon, FaGlobeAmericas as MarketplaceIcon, FaGlobeAmericas as PublishIcon, FaImage as ImageSolidIcon, FaKey as KeyIcon, FaKey as PasswordIcon, FaLayerGroup as ResourceGroupIcon, FaLink as LinkIcon, FaLinkedin as LinkedInIcon, FaLinux as LinuxIcon, FaList as SchedulerIcon, FaLock as LockIcon, FaOpenid as OIDCIcon, FaOpera as OperaIcon, FaPaperclip as AttachmentIcon, FaPlus as AddIcon, FaPowerOff as PowerIcon, FaPrint as PrintIcon, FaQrcode as QRCodeIcon, FaQuestionCircle as UserGuideIcon, FaRedhat as RedHatIcon, FaRegCircle as NotRunningIcon, FaRegFileImage as ImageIcon, FaRegFolder as FolderIcon, FaRobot as RobotIcon, FaRocket as PartnerIcon, FaRunning as ExecuteWorkflow, FaSafari as SafariIcon, FaSave as SaveIcon, FaSearch as SearchIcon, FaShieldAlt as ShieldAltIcon, FaSlack as SlackIcon, FaStar as FeaturedIcon, FaStop as StopSolidIcon, FaSuse as SuseIcon, FaTerminal as TerminalIcon, FaTimes as TimesIcon, FaUbuntu as UbuntuIcon, FaUndoAlt as RetryIcon, FaUser as UserIcon, FaUsers as AccessIcon, FaUsers as SharingIcon, FaUsers as UsersIcon, FaWindows as WindowsIcon, } from 'react-icons/fa';
8
+ export { BsArrowsCollapse as CollapseIcon, BsBank2 as GovernmentIcon, BsBriefcase as BriefcaseIcon, BsBucket as BucketIcon, BsCalendarX as CalendarOffIcon, BsChatLeft as CommentIcon, BsChevronDoubleDown as ChevronDoubleDownIcon, BsChevronDoubleUp as ChevronDoubleUpIcon, BsClipboardCheck as ClipboardCheckIcon, BsDash as MinusIcon, BsFileEarmarkZip as ZipIcon, BsFiles as FilesIcon, BsGeoAlt as MapPinIcon, BsGrid as GridIcon, BsLayoutThreeColumns as ColumnsIcon, BsListUl as ListViewIcon, BsMortarboard as EducationIcon, BsMusicNoteBeamed as MusicIcon, BsPersonPlus as AddUserIcon, BsSearch as SearchOutlineIcon, BsSend as SendIcon, BsShieldSlash as ShieldOffIcon, BsStar as PinIcon, BsStarFill as PinFilledIcon, BsStopCircle as StopCircleIcon, BsTag as TagIcon, BsTelephone as PhoneIcon, BsTerminal as UserWorkspaceIcon, BsTerminalFill as UserWorkspaceFillIcon, BsThreeDots as MoreIcon, BsThreeDotsVertical as MenuIcon, } from 'react-icons/bs';
9
+ export { FaAmazon as AmazonIcon, FaAngleDown as AngleDownIcon, FaAngleLeft as AngleLeftIcon, FaAngleRight as AngleRightIcon, FaAngleUp as AngleUpIcon, FaArrowDown as ArrowDownIcon, FaArrowLeft as ArrowLeftIcon, FaArrowRight as ArrowRightIcon, FaArrowUp as ArrowUpIcon, FaBalanceScale as LegalIcon, FaCaretDown as CaretDownIcon, FaCentos as CentOSIcon, FaChartLine as ChartIcon, FaChartPie as PieChartIcon, FaCheck as CheckIcon, FaChevronDown as ChevronDownIcon, FaChevronUp as ChevronUpIcon, FaChrome as ChromeIcon, FaCloud as CloudIcon, FaCloudDownloadAlt as DownloadIcon, FaCog as CogIcon, FaCogs as GearsIcon, FaComments as ChatIcon, FaCompress as ShrinkIcon, FaDesktop as SnapshotIcon, FaDocker as DockerIcon, FaDollarSign as CostDashboardIcon, FaEdge as EdgeIcon, FaEdit as EditIcon, FaExclamationTriangle as WarningTriangleIcon, FaExpand as ExpandIcon, FaEye as HiddenFalseIcon, FaEyeSlash as HiddenTrueIcon, FaFile as FileSolidIcon, FaFilePdf as PdfSolidIcon, FaFilter as FilterIcon, FaFirefoxBrowser as FirefoxIcon, FaFlask as FlaskIcon, FaFolder as FolderSolidIcon, FaGithub as GitHubIcon, FaGitlab as GitLabIcon, FaGlobe as GlobeIcon, FaGlobeAmericas as MarketplaceIcon, FaGlobeAmericas as PublishIcon, FaImage as ImageSolidIcon, FaKey as KeyIcon, FaKey as PasswordIcon, FaLayerGroup as ResourceGroupIcon, FaLink as LinkIcon, FaLinkedin as LinkedInIcon, FaLinux as LinuxIcon, FaList as SchedulerIcon, FaLock as LockIcon, FaOpenid as OIDCIcon, FaOpera as OperaIcon, FaPaperclip as AttachmentIcon, FaPlus as AddIcon, FaPowerOff as PowerIcon, FaPrint as PrintIcon, FaQrcode as QRCodeIcon, FaQuestionCircle as UserGuideIcon, FaRedhat as RedHatIcon, FaRegCircle as NotRunningIcon, FaRegFileImage as ImageIcon, FaRegFolder as FolderIcon, FaRobot as RobotIcon, FaRocket as PartnerIcon, FaRunning as ExecuteWorkflow, FaSafari as SafariIcon, FaSave as SaveIcon, FaSearch as SearchIcon, FaShieldAlt as ShieldAltIcon, FaSlack as SlackIcon, FaStar as FeaturedIcon, FaStop as StopSolidIcon, FaSuse as SuseIcon, FaTerminal as TerminalIcon, FaTimes as TimesIcon, FaUbuntu as UbuntuIcon, FaUndoAlt as RetryIcon, FaUnlink as UnlinkIcon, FaUser as UserIcon, FaUsers as AccessIcon, FaUsers as SharingIcon, FaUsers as UsersIcon, FaWindows as WindowsIcon, } from 'react-icons/fa';
10
10
  export { FaApple as AppleIcon, FaArrowsRotate as RefreshArrowsIcon, FaDebian as DebianIcon, FaFilterCircleXmark as FilterClearIcon, FaInbox as NotificationInboxIcon, FaLocationDot as IpAddressIcon, FaRegFilePdf as PdfIcon, FaRegFolderOpen as FolderOpenIcon, FaUpRightFromSquare as NewWindowIcon, FaWandMagicSparkles as CustomizeIcon, FaXTwitter as XTwitterIcon, } from 'react-icons/fa6';
11
11
  export { FiActivity as HealthMonitoringIcon, FiAlertCircle as AlertCircleIcon, FiChevronDown as ChevronDownStrokeIcon, FiClock as ClockIcon, FiDownload as DownloadFileIcon, FiFile as FileIcon, FiFileText as FileTextIcon, FiHardDrive as DiskIcon, FiRotateCcw as HistoryIcon, FiUpload as UploadIcon, FiZap as ZapIcon, } from 'react-icons/fi';
12
12
  export { GiSpy as ImpersonateIcon } from 'react-icons/gi';
13
- export { GoPlus as PlusOutlineIcon, GoRepoForked as ForkIcon, GoSignOut as SignOutIcon, GoSkip as ForbiddenIcon, GoVideo as VideoIcon, } from 'react-icons/go';
13
+ export { GoGitCommit as CommitIcon, GoGitPullRequest as PullRequestIcon, GoIssueOpened as IssueIcon, GoPlus as PlusOutlineIcon, GoRepoForked as ForkIcon, GoSignOut as SignOutIcon, GoSkip as ForbiddenIcon, GoVideo as VideoIcon, } from 'react-icons/go';
14
14
  export { GrCloudComputer as ComputeIcon, GrInbox as InboxIcon, GrServerCluster as ClusterIcon, GrStorage as StorageIcon, GrTasks as MonitorIcon, } from 'react-icons/gr';
15
15
  export { HiCog as GearIcon, HiDuplicate as DuplicateIcon, HiOutlineArchive as ArchiveIcon, HiOutlineClipboardCopy as ClipboardIcon, HiOutlineHome as HomeIcon, HiQuestionMarkCircle as TooltipIcon, HiServer as ServerIcon, } from 'react-icons/hi';
16
16
  import { HiMiniCheckCircle as SuccessIcon } from 'react-icons/hi2';
@@ -19,7 +19,7 @@ export { HiMiniLanguage as LanguageIcon, HiMiniMinusCircle as SkipIcon, HiMiniXC
19
19
  export { ImSpinner5 as RunningIcon } from 'react-icons/im';
20
20
  export { IoIosNotifications as NotificationFillIcon, IoMdBuild as BuildWorkflowIcon, IoMdClose as CloseIcon, } from 'react-icons/io';
21
21
  export { IoCloudUploadOutline as CloudUploadIcon, IoDocumentTextOutline as DocumentIcon, IoFileTrayFullOutline as FilesystemIcon, IoHeart as FavoriteIcon, IoHeartDislike as UnfavoriteIcon, IoHeartOutline as FavoriteOutlineIcon, IoInformationCircleOutline as InfoCircleIcon, IoSettingsOutline as SettingsIcon, IoWarningOutline as WarningIcon, } from 'react-icons/io5';
22
- export { LuArrowRight as ArrowRightStrokeIcon, LuBadgeCheck as LicenseIcon, LuBrainCircuit as MlIcon, LuCalendar as CalendarIcon, LuCheck as CheckStrokeIcon, LuChevronLeft as ChevronLeftIcon, LuChevronRight as ChevronRightIcon, LuExternalLink as ExternalLink, LuEye as EyeIcon, LuEyeOff as EyeOffIcon, LuFolderTree as FolderTreeIcon, LuIdCard as IdCardIcon, LuLogs as EventsIcon, LuMail as MailIcon, LuMegaphone as MegaphoneIcon, LuMoon as MoonIcon, LuSettings2 as DisplayIcon, LuSheet as SpreadsheetIcon, LuShield as ShieldOutlineIcon, LuSun as SunIcon, LuX as XStrokeIcon, LuZoomIn as ZoomInIcon, LuZoomOut as ZoomOutIcon, } from 'react-icons/lu';
22
+ export { LuArrowRight as ArrowRightStrokeIcon, LuBadgeCheck as LicenseIcon, LuBrainCircuit as MlIcon, LuCalendar as CalendarIcon, LuCheck as CheckStrokeIcon, LuChevronLeft as ChevronLeftIcon, LuChevronRight as ChevronRightIcon, LuExternalLink as ExternalLink, LuEye as EyeIcon, LuEyeOff as EyeOffIcon, LuFolderTree as FolderTreeIcon, LuIdCard as IdCardIcon, LuLogs as EventsIcon, LuMail as MailIcon, LuMegaphone as MegaphoneIcon, LuMoon as MoonIcon, LuPartyPopper as CelebrateIcon, LuSettings2 as DisplayIcon, LuSheet as SpreadsheetIcon, LuShield as ShieldOutlineIcon, LuSun as SunIcon, LuX as XStrokeIcon, LuZoomIn as ZoomInIcon, LuZoomOut as ZoomOutIcon, } from 'react-icons/lu';
23
23
  export { MdClear as ClearIcon, MdDragHandle as DragHandleIcon, MdInstallDesktop as InstallIcon, MdOutlineAttachMoney as EnableCostIcon, MdOutlineMoneyOff as DisableCostIcon, MdPieChart as QuotaIcon, MdRefresh as RefreshIcon, MdReplay as ReplayIcon, MdSmartphone as MFA, } from 'react-icons/md';
24
24
  export { PiArrowBendUpRightBold as OpenInNewGraphIcon, PiPlugsConnectedFill as ConnectIcon, PiRectangleDashed as KubernetesNamespaceIcon, PiShareBold as ShareIcon, } from 'react-icons/pi';
25
25
  export { SiAnthropic as AnthropicIcon, SiHelm as HelmIcon, SiKubernetes as KubernetesIcon, SiOpenai as OpenAIIcon, } from 'react-icons/si';
package/dist/icons.js CHANGED
@@ -1,20 +1,20 @@
1
1
  import cx from "classnames";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { BiBell as UnmuteIcon, BiBellOff as MuteIcon, BiBuildings as OrganizationIcon, BiError as ErrorIcon, BiExpandVertical as ExpandVerticalIcon, BiPause as PauseIcon, BiPlay as StartIcon, BiSolidCheckShield as ShieldIcon, BiSolidTrashAlt as TrashIcon, BiStop as StopIcon } from "react-icons/bi";
4
- import { BsArrowsCollapse as CollapseIcon, BsBucket as BucketIcon, BsCurrencyDollar as MoneyIcon, BsFileEarmarkZip as ZipIcon, BsGrid as GridIcon, BsLayers as InfrastructureLayersIcon, BsMusicNoteBeamed as MusicIcon, BsSearch as SearchOutlineIcon, BsStar as PinIcon, BsStarFill as PinFilledIcon, BsStopCircle as StopCircleIcon, BsTerminal as UserWorkspaceIcon, BsTerminalFill as UserWorkspaceFillIcon, BsThreeDots as MoreIcon, BsThreeDotsVertical as MenuIcon, BsZoomIn as ChartZoomIcon } from "react-icons/bs";
5
- import { FaAmazon as AmazonIcon, FaAngleDown as AngleDownIcon, FaAngleLeft as AngleLeftIcon, FaAngleRight as AngleRightIcon, FaAngleUp as AngleUpIcon, FaArrowDown as ArrowDownIcon, FaArrowLeft as ArrowLeftIcon, FaArrowRight as ArrowRightIcon, FaArrowUp as ArrowUpIcon, FaCaretDown as CaretDownIcon, FaCentos as CentOSIcon, FaChartLine as ChartIcon, FaChartPie as PieChartIcon, FaCheck as CheckIcon, FaChevronDown as ChevronDownIcon, FaChevronUp as ChevronUpIcon, FaChrome as ChromeIcon, FaCircleNotch, FaCloud as CloudIcon, FaCloudDownloadAlt as DownloadIcon, FaCog as CogIcon, FaCogs as GearsIcon, FaComments as ChatIcon, FaCompress as ShrinkIcon, FaDesktop as SnapshotIcon, FaDocker as DockerIcon, FaDollarSign as CostDashboardIcon, FaEdge as EdgeIcon, FaEdit as EditIcon, FaExclamationTriangle as WarningTriangleIcon, FaExpand as ExpandIcon, FaEye as HiddenFalseIcon, FaEyeSlash as HiddenTrueIcon, FaFile as FileSolidIcon, FaFilePdf as PdfSolidIcon, FaFilter as FilterIcon, FaFirefoxBrowser as FirefoxIcon, FaFlask as FlaskIcon, FaFolder as FolderSolidIcon, FaGithub as GitHubIcon, FaGitlab as GitLabIcon, FaGlobe as GlobeIcon, FaGlobeAmericas as MarketplaceIcon, FaGlobeAmericas as PublishIcon, FaImage as ImageSolidIcon, FaInfoCircle as InfoIcon, FaKey as KeyIcon, FaKey as PasswordIcon, FaLayerGroup as ResourceGroupIcon, FaLink as LinkIcon, FaLinkedin as LinkedInIcon, FaLinux as LinuxIcon, FaList as SchedulerIcon, FaLock as LockIcon, FaOpenid as OIDCIcon, FaOpera as OperaIcon, FaPaperclip as AttachmentIcon, FaPlus as AddIcon, FaPowerOff as PowerIcon, FaPrint as PrintIcon, FaQrcode as QRCodeIcon, FaQuestionCircle as UserGuideIcon, FaRedhat as RedHatIcon, FaRegCircle as NotRunningIcon, FaRegFileImage as ImageIcon, FaRegFolder as FolderIcon, FaRobot as RobotIcon, FaRocket as PartnerIcon, FaRunning as ExecuteWorkflow, FaSafari as SafariIcon, FaSave as SaveIcon, FaSearch as SearchIcon, FaShieldAlt as ShieldAltIcon, FaSlack as SlackIcon, FaStar as FeaturedIcon, FaStop as StopSolidIcon, FaSuse as SuseIcon, FaTerminal as TerminalIcon, FaTimes as TimesIcon, FaUbuntu as UbuntuIcon, FaUndoAlt as RetryIcon, FaUser as UserIcon, FaUsers as AccessIcon, FaUsers as SharingIcon, FaUsers as UsersIcon, FaWindows as WindowsIcon } from "react-icons/fa";
4
+ import { BsArrowsCollapse as CollapseIcon, BsBank2 as GovernmentIcon, BsBriefcase as BriefcaseIcon, BsBucket as BucketIcon, BsCalendarX as CalendarOffIcon, BsChatLeft as CommentIcon, BsChevronDoubleDown as ChevronDoubleDownIcon, BsChevronDoubleUp as ChevronDoubleUpIcon, BsClipboardCheck as ClipboardCheckIcon, BsCurrencyDollar as MoneyIcon, BsDash as MinusIcon, BsFileEarmarkZip as ZipIcon, BsFiles as FilesIcon, BsGeoAlt as MapPinIcon, BsGrid as GridIcon, BsLayers as InfrastructureLayersIcon, BsLayoutThreeColumns as ColumnsIcon, BsListUl as ListViewIcon, BsMortarboard as EducationIcon, BsMusicNoteBeamed as MusicIcon, BsPersonPlus as AddUserIcon, BsSearch as SearchOutlineIcon, BsSend as SendIcon, BsShieldSlash as ShieldOffIcon, BsStar as PinIcon, BsStarFill as PinFilledIcon, BsStopCircle as StopCircleIcon, BsTag as TagIcon, BsTelephone as PhoneIcon, BsTerminal as UserWorkspaceIcon, BsTerminalFill as UserWorkspaceFillIcon, BsThreeDots as MoreIcon, BsThreeDotsVertical as MenuIcon, BsZoomIn as ChartZoomIcon } from "react-icons/bs";
5
+ import { FaAmazon as AmazonIcon, FaAngleDown as AngleDownIcon, FaAngleLeft as AngleLeftIcon, FaAngleRight as AngleRightIcon, FaAngleUp as AngleUpIcon, FaArrowDown as ArrowDownIcon, FaArrowLeft as ArrowLeftIcon, FaArrowRight as ArrowRightIcon, FaArrowUp as ArrowUpIcon, FaBalanceScale as LegalIcon, FaCaretDown as CaretDownIcon, FaCentos as CentOSIcon, FaChartLine as ChartIcon, FaChartPie as PieChartIcon, FaCheck as CheckIcon, FaChevronDown as ChevronDownIcon, FaChevronUp as ChevronUpIcon, FaChrome as ChromeIcon, FaCircleNotch, FaCloud as CloudIcon, FaCloudDownloadAlt as DownloadIcon, FaCog as CogIcon, FaCogs as GearsIcon, FaComments as ChatIcon, FaCompress as ShrinkIcon, FaDesktop as SnapshotIcon, FaDocker as DockerIcon, FaDollarSign as CostDashboardIcon, FaEdge as EdgeIcon, FaEdit as EditIcon, FaExclamationTriangle as WarningTriangleIcon, FaExpand as ExpandIcon, FaEye as HiddenFalseIcon, FaEyeSlash as HiddenTrueIcon, FaFile as FileSolidIcon, FaFilePdf as PdfSolidIcon, FaFilter as FilterIcon, FaFirefoxBrowser as FirefoxIcon, FaFlask as FlaskIcon, FaFolder as FolderSolidIcon, FaGithub as GitHubIcon, FaGitlab as GitLabIcon, FaGlobe as GlobeIcon, FaGlobeAmericas as MarketplaceIcon, FaGlobeAmericas as PublishIcon, FaImage as ImageSolidIcon, FaInfoCircle as InfoIcon, FaKey as KeyIcon, FaKey as PasswordIcon, FaLayerGroup as ResourceGroupIcon, FaLink as LinkIcon, FaLinkedin as LinkedInIcon, FaLinux as LinuxIcon, FaList as SchedulerIcon, FaLock as LockIcon, FaOpenid as OIDCIcon, FaOpera as OperaIcon, FaPaperclip as AttachmentIcon, FaPlus as AddIcon, FaPowerOff as PowerIcon, FaPrint as PrintIcon, FaQrcode as QRCodeIcon, FaQuestionCircle as UserGuideIcon, FaRedhat as RedHatIcon, FaRegCircle as NotRunningIcon, FaRegFileImage as ImageIcon, FaRegFolder as FolderIcon, FaRobot as RobotIcon, FaRocket as PartnerIcon, FaRunning as ExecuteWorkflow, FaSafari as SafariIcon, FaSave as SaveIcon, FaSearch as SearchIcon, FaShieldAlt as ShieldAltIcon, FaSlack as SlackIcon, FaStar as FeaturedIcon, FaStop as StopSolidIcon, FaSuse as SuseIcon, FaTerminal as TerminalIcon, FaTimes as TimesIcon, FaUbuntu as UbuntuIcon, FaUndoAlt as RetryIcon, FaUnlink as UnlinkIcon, FaUser as UserIcon, FaUsers as AccessIcon, FaUsers as SharingIcon, FaUsers as UsersIcon, FaWindows as WindowsIcon } from "react-icons/fa";
6
6
  import { AiOutlineRollback as RollbackIcon } from "react-icons/ai";
7
7
  import { FaApple as AppleIcon, FaArrowsRotate as RefreshArrowsIcon, FaDebian as DebianIcon, FaFilterCircleXmark as FilterClearIcon, FaInbox as NotificationInboxIcon, FaLocationDot as IpAddressIcon, FaRegFilePdf as PdfIcon, FaRegFolderOpen as FolderOpenIcon, FaUpRightFromSquare as NewWindowIcon, FaWandMagicSparkles as CustomizeIcon, FaXTwitter as XTwitterIcon } from "react-icons/fa6";
8
8
  import { FiActivity as HealthMonitoringIcon, FiAlertCircle as AlertCircleIcon, FiChevronDown as ChevronDownStrokeIcon, FiClock as ClockIcon, FiCopy as CopyIcon, FiDownload as DownloadFileIcon, FiFile as FileIcon, FiFileText as FileTextIcon, FiHardDrive as DiskIcon, FiRotateCcw as HistoryIcon, FiUpload as UploadIcon, FiX as XIcon, FiZap as ZapIcon } from "react-icons/fi";
9
9
  import { GiSpy as ImpersonateIcon } from "react-icons/gi";
10
- import { GoPlus as PlusOutlineIcon, GoRepoForked as ForkIcon, GoSignOut as SignOutIcon, GoSkip as ForbiddenIcon, GoVideo as VideoIcon } from "react-icons/go";
10
+ import { GoGitCommit as CommitIcon, GoGitPullRequest as PullRequestIcon, GoIssueOpened as IssueIcon, GoPlus as PlusOutlineIcon, GoRepoForked as ForkIcon, GoSignOut as SignOutIcon, GoSkip as ForbiddenIcon, GoVideo as VideoIcon } from "react-icons/go";
11
11
  import { GrCloudComputer as ComputeIcon, GrInbox as InboxIcon, GrServerCluster as ClusterIcon, GrStorage as StorageIcon, GrTasks as MonitorIcon } from "react-icons/gr";
12
12
  import { HiCog as GearIcon, HiDuplicate as DuplicateIcon, HiOutlineArchive as ArchiveIcon, HiOutlineClipboardCopy as ClipboardIcon, HiOutlineHome as HomeIcon, HiQuestionMarkCircle as TooltipIcon, HiServer as ServerIcon } from "react-icons/hi";
13
13
  import { HiMiniCheckCircle as SuccessIcon, HiMiniLanguage as LanguageIcon, HiMiniMinusCircle as SkipIcon, HiMiniXCircle as FailIcon, HiSparkles as SparklesIcon } from "react-icons/hi2";
14
14
  import { ImSpinner5 as RunningIcon } from "react-icons/im";
15
15
  import { IoIosNotifications as NotificationFillIcon, IoMdBuild as BuildWorkflowIcon, IoMdClose as CloseIcon } from "react-icons/io";
16
16
  import { IoCloudUploadOutline as CloudUploadIcon, IoDocumentTextOutline as DocumentIcon, IoFileTrayFullOutline as FilesystemIcon, IoHeart as FavoriteIcon, IoHeartDislike as UnfavoriteIcon, IoHeartOutline as FavoriteOutlineIcon, IoInformationCircleOutline as InfoCircleIcon, IoSettingsOutline as SettingsIcon, IoWarningOutline as WarningIcon } from "react-icons/io5";
17
- import { LuArrowRight as ArrowRightStrokeIcon, LuBadgeCheck as LicenseIcon, LuBrainCircuit as MlIcon, LuCalendar as CalendarIcon, LuCheck as CheckStrokeIcon, LuChevronLeft as ChevronLeftIcon, LuChevronRight as ChevronRightIcon, LuExternalLink as ExternalLink, LuEye as EyeIcon, LuEyeOff as EyeOffIcon, LuFolderTree as FolderTreeIcon, LuIdCard as IdCardIcon, LuLogs as EventsIcon, LuMail as MailIcon, LuMegaphone as MegaphoneIcon, LuMoon as MoonIcon, LuSettings2 as DisplayIcon, LuSheet as SpreadsheetIcon, LuShield as ShieldOutlineIcon, LuSun as SunIcon, LuX as XStrokeIcon, LuZoomIn as ZoomInIcon, LuZoomOut as ZoomOutIcon } from "react-icons/lu";
17
+ import { LuArrowRight as ArrowRightStrokeIcon, LuBadgeCheck as LicenseIcon, LuBrainCircuit as MlIcon, LuCalendar as CalendarIcon, LuCheck as CheckStrokeIcon, LuChevronLeft as ChevronLeftIcon, LuChevronRight as ChevronRightIcon, LuExternalLink as ExternalLink, LuEye as EyeIcon, LuEyeOff as EyeOffIcon, LuFolderTree as FolderTreeIcon, LuIdCard as IdCardIcon, LuLogs as EventsIcon, LuMail as MailIcon, LuMegaphone as MegaphoneIcon, LuMoon as MoonIcon, LuPartyPopper as CelebrateIcon, LuSettings2 as DisplayIcon, LuSheet as SpreadsheetIcon, LuShield as ShieldOutlineIcon, LuSun as SunIcon, LuX as XStrokeIcon, LuZoomIn as ZoomInIcon, LuZoomOut as ZoomOutIcon } from "react-icons/lu";
18
18
  import { MdClear as ClearIcon, MdDragHandle as DragHandleIcon, MdInstallDesktop as InstallIcon, MdOutlineAttachMoney as EnableCostIcon, MdOutlineMoneyOff as DisableCostIcon, MdPieChart as QuotaIcon, MdRefresh as RefreshIcon, MdReplay as ReplayIcon, MdSmartphone as MFA } from "react-icons/md";
19
19
  import { PiArrowBendUpRightBold as OpenInNewGraphIcon, PiPlugsConnectedFill as ConnectIcon, PiRectangleDashed as KubernetesNamespaceIcon, PiShareBold as ShareIcon } from "react-icons/pi";
20
20
  import { SiAnthropic as AnthropicIcon, SiHelm as HelmIcon, SiKubernetes as KubernetesIcon, SiOpenai as OpenAIIcon } from "react-icons/si";
@@ -35,4 +35,4 @@ function LoaderIcon({ className, ...props }) {
35
35
  });
36
36
  }
37
37
  //#endregion
38
- export { APIIcon, AccessIcon, AddIcon, AlertCircleIcon, AlertFillIcon, AlertIcon, AmazonIcon, AngleDownIcon, AngleLeftIcon, AngleRightIcon, AngleUpIcon, AnthropicIcon, AppleIcon, ArchiveIcon, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightStrokeIcon, ArrowUpIcon, AttachmentIcon, BucketIcon, BuildWorkflowIcon, CalendarIcon, CancelIcon, CaretDownIcon, CentOSIcon, ChartIcon, ChartZoomIcon, ChatIcon, CheckIcon, CheckMarkIcon, CheckStrokeIcon, ChevronDownIcon, ChevronDownStrokeIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChromeIcon, ClearIcon, ClipboardIcon, ClockIcon, CloseIcon, CloudIcon, CloudUploadIcon, ClusterIcon, CogIcon, CollapseIcon, ComputeIcon, ConnectIcon, CopyIcon, CostDashboardIcon, CustomizeIcon, DebianIcon, DisableCostIcon, DisableUserIcon, DiskIcon, DisplayIcon, DockerIcon, DocumentIcon, DownloadFileIcon, DownloadIcon, DragHandleIcon, DuplicateIcon, EdgeIcon, EditIcon, EditorIcon, EnableCostIcon, EnableUserIcon, EndpointIcon, ErrorCheckmark, ErrorIcon, EventsIcon, ExecuteWorkflow, ExpandIcon, ExpandVerticalIcon, ExternalLink, EyeIcon, EyeOffIcon, FailIcon, FavoriteIcon, FavoriteOutlineIcon, FeaturedIcon, FileIcon, FileSolidIcon, FileTextIcon, FilesystemIcon, FilterClearIcon, FilterIcon, FirefoxIcon, FlaskIcon, FolderIcon, FolderOpenIcon, FolderSolidIcon, FolderTreeIcon, ForbiddenIcon, ForkIcon, GearIcon, GearsIcon, GitHubIcon, GitLabIcon, GlobeIcon, GridIcon, HealthMonitoringIcon, HelmIcon, HiddenFalseIcon, HiddenTrueIcon, HistoryIcon, HomeIcon, IdCardIcon, ImageIcon, ImageSolidIcon, ImpersonateIcon, InboxIcon, InfoCircleIcon, InfoIcon, InfrastructureLayersIcon, InstallIcon, IpAddressIcon, JsonIcon, KeyIcon, KubernetesIcon, KubernetesNamespaceIcon, LanguageIcon, LicenseIcon, LinkIcon, LinkedInIcon, LinuxIcon, LoaderIcon, LockIcon, MFA, MailIcon, MarketplaceIcon, MegaphoneIcon, MenuIcon, MinimizeIcon, MlIcon, MoneyIcon, MonitorIcon, MoonIcon, MoreIcon, MusicIcon, MuteIcon, NewChatIcon, NewWindowIcon, NotRunningIcon, NotificationFillIcon, NotificationInboxIcon, OIDCIcon, OpenAIIcon, OpenInNewGraphIcon, OperaIcon, OrganizationIcon, PartnerIcon, PasswordIcon, PauseIcon, PdfIcon, PdfSolidIcon, PieChartIcon, PinFilledIcon, PinIcon, PlusOutlineIcon, PowerIcon, PowershellIcon, PrintIcon, PublishIcon, QRCodeIcon, QuotaIcon, RedHatIcon, RefreshArrowsIcon, RefreshIcon, ReplayIcon, ResourceGroupIcon, RetryIcon, RobotIcon, RollbackIcon, RunWorkflowIcon, RunningIcon, SafariIcon, SaveIcon, SchedulerIcon, SearchIcon, SearchOutlineIcon, ServerIcon, SettingsIcon, ShareIcon, SharingIcon, ShieldAltIcon, ShieldIcon, ShieldOutlineIcon, ShrinkIcon, SidebarCloseIcon, SidebarIcon, SidebarOpenIcon, SignOutIcon, SkipIcon, SlackIcon, SnapshotIcon, SortDownIcon, SortUnsortedIcon, SortUpIcon, SparklesIcon, SplitIcon, SpreadsheetIcon, StartIcon, StopCircleIcon, StopIcon, StopSolidIcon, StorageIcon, SubdomainIcon, SuccessCheckmark, SuccessIcon, SunIcon, SuseIcon, TerminalIcon, ThinkingIcon, TimesIcon, TooltipIcon, TrashIcon, TunnelIcon, UbuntuIcon, UnfavoriteIcon, UnmuteIcon, UploadIcon, UserGuideIcon, UserIcon, UserWorkspaceFillIcon, UserWorkspaceIcon, UsersIcon, VideoIcon, WarningIcon, WarningTriangleIcon, WindowsIcon, XIcon, XStrokeIcon, XTwitterIcon, ZapIcon, ZipIcon, ZoomInIcon, ZoomOutIcon };
38
+ export { APIIcon, AccessIcon, AddIcon, AddUserIcon, AlertCircleIcon, AlertFillIcon, AlertIcon, AmazonIcon, AngleDownIcon, AngleLeftIcon, AngleRightIcon, AngleUpIcon, AnthropicIcon, AppleIcon, ArchiveIcon, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowRightStrokeIcon, ArrowUpIcon, AttachmentIcon, BriefcaseIcon, BucketIcon, BuildWorkflowIcon, CalendarIcon, CalendarOffIcon, CancelIcon, CaretDownIcon, CelebrateIcon, CentOSIcon, ChartIcon, ChartZoomIcon, ChatIcon, CheckIcon, CheckMarkIcon, CheckStrokeIcon, ChevronDoubleDownIcon, ChevronDoubleUpIcon, ChevronDownIcon, ChevronDownStrokeIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChromeIcon, ClearIcon, ClipboardCheckIcon, ClipboardIcon, ClockIcon, CloseIcon, CloudIcon, CloudUploadIcon, ClusterIcon, CogIcon, CollapseIcon, ColumnsIcon, CommentIcon, CommitIcon, ComputeIcon, ConnectIcon, CopyIcon, CostDashboardIcon, CustomizeIcon, DebianIcon, DisableCostIcon, DisableUserIcon, DiskIcon, DisplayIcon, DockerIcon, DocumentIcon, DownloadFileIcon, DownloadIcon, DragHandleIcon, DuplicateIcon, EdgeIcon, EditIcon, EditorIcon, EducationIcon, EnableCostIcon, EnableUserIcon, EndpointIcon, ErrorCheckmark, ErrorIcon, EventsIcon, ExecuteWorkflow, ExpandIcon, ExpandVerticalIcon, ExternalLink, EyeIcon, EyeOffIcon, FailIcon, FavoriteIcon, FavoriteOutlineIcon, FeaturedIcon, FileIcon, FileSolidIcon, FileTextIcon, FilesIcon, FilesystemIcon, FilterClearIcon, FilterIcon, FirefoxIcon, FlaskIcon, FolderIcon, FolderOpenIcon, FolderSolidIcon, FolderTreeIcon, ForbiddenIcon, ForkIcon, GearIcon, GearsIcon, GitHubIcon, GitLabIcon, GlobeIcon, GovernmentIcon, GridIcon, HealthMonitoringIcon, HelmIcon, HiddenFalseIcon, HiddenTrueIcon, HistoryIcon, HomeIcon, IdCardIcon, ImageIcon, ImageSolidIcon, ImpersonateIcon, InboxIcon, InfoCircleIcon, InfoIcon, InfrastructureLayersIcon, InstallIcon, IpAddressIcon, IssueIcon, JsonIcon, KeyIcon, KubernetesIcon, KubernetesNamespaceIcon, LanguageIcon, LegalIcon, LicenseIcon, LinkIcon, LinkedInIcon, LinuxIcon, ListViewIcon, LoaderIcon, LockIcon, MFA, MailIcon, MapPinIcon, MarketplaceIcon, MegaphoneIcon, MenuIcon, MinimizeIcon, MinusIcon, MlIcon, MoneyIcon, MonitorIcon, MoonIcon, MoreIcon, MusicIcon, MuteIcon, NewChatIcon, NewWindowIcon, NotRunningIcon, NotificationFillIcon, NotificationInboxIcon, OIDCIcon, OpenAIIcon, OpenInNewGraphIcon, OperaIcon, OrganizationIcon, PartnerIcon, PasswordIcon, PauseIcon, PdfIcon, PdfSolidIcon, PhoneIcon, PieChartIcon, PinFilledIcon, PinIcon, PlusOutlineIcon, PowerIcon, PowershellIcon, PrintIcon, PublishIcon, PullRequestIcon, QRCodeIcon, QuotaIcon, RedHatIcon, RefreshArrowsIcon, RefreshIcon, ReplayIcon, ResourceGroupIcon, RetryIcon, RobotIcon, RollbackIcon, RunWorkflowIcon, RunningIcon, SafariIcon, SaveIcon, SchedulerIcon, SearchIcon, SearchOutlineIcon, SendIcon, ServerIcon, SettingsIcon, ShareIcon, SharingIcon, ShieldAltIcon, ShieldIcon, ShieldOffIcon, ShieldOutlineIcon, ShrinkIcon, SidebarCloseIcon, SidebarIcon, SidebarOpenIcon, SignOutIcon, SkipIcon, SlackIcon, SnapshotIcon, SortDownIcon, SortUnsortedIcon, SortUpIcon, SparklesIcon, SplitIcon, SpreadsheetIcon, StartIcon, StopCircleIcon, StopIcon, StopSolidIcon, StorageIcon, SubdomainIcon, SuccessCheckmark, SuccessIcon, SunIcon, SuseIcon, TagIcon, TerminalIcon, ThinkingIcon, TimesIcon, TooltipIcon, TrashIcon, TunnelIcon, UbuntuIcon, UnfavoriteIcon, UnlinkIcon, UnmuteIcon, UploadIcon, UserGuideIcon, UserIcon, UserWorkspaceFillIcon, UserWorkspaceIcon, UsersIcon, VideoIcon, WarningIcon, WarningTriangleIcon, WindowsIcon, XIcon, XStrokeIcon, XTwitterIcon, ZapIcon, ZipIcon, ZoomInIcon, ZoomOutIcon };
@@ -1,3 +1,4 @@
1
+ import { safeUrl } from "../safeUrl.js";
1
2
  import { useLink, useNotify, useStrings } from "../components/Provider.js";
2
3
  import { CheckIcon, ChevronRightIcon, ClipboardIcon, CopyIcon, IdCardIcon, KeyIcon, LinkIcon, MailIcon, MoreIcon, UserIcon } from "../icons.js";
3
4
  import { keyedByContent } from "../components/keys.js";
@@ -237,7 +238,7 @@ function MenuRow({ item, onClose, side }) {
237
238
  if (item.kind === "link") {
238
239
  const className = cx(MENU_ITEM_CLASSES, item.destructive ? "text-red-500" : "text-(--theme-app)");
239
240
  if (item.reloadDocument) return /* @__PURE__ */ jsxs("a", {
240
- href: item.to,
241
+ href: safeUrl(item.to),
241
242
  onClick: onClose,
242
243
  className,
243
244
  children: [item.icon, item.label]
@@ -34,11 +34,11 @@ function UserHoverCard({ x, y, onKeepOpen, onLeave, username, name, avatarSrc, b
34
34
  size: "lg",
35
35
  className: "shrink-0"
36
36
  }), /* @__PURE__ */ jsxs("div", {
37
- className: "min-w-0",
37
+ className: "min-w-0 flex-1",
38
38
  children: [/* @__PURE__ */ jsxs("div", {
39
- className: "flex items-center gap-1.5",
39
+ className: "flex flex-wrap items-center gap-x-1.5 gap-y-0.5",
40
40
  children: [/* @__PURE__ */ jsx("span", {
41
- className: "truncate text-sm font-semibold text-(--theme-app)",
41
+ className: "min-w-0 text-sm font-semibold leading-5 wrap-anywhere text-(--theme-app)",
42
42
  children: displayName
43
43
  }), badge && /* @__PURE__ */ jsx("span", {
44
44
  className: "shrink-0 rounded-full bg-(--theme-muted-panel-bg) px-1.5 py-0.5 text-[10px] font-medium leading-none text-(--theme-muted-text-color)",
@@ -58,10 +58,10 @@ function UserHoverCard({ x, y, onKeepOpen, onLeave, username, name, avatarSrc, b
58
58
  onLeave,
59
59
  children: [href ? /* @__PURE__ */ jsx(Link, {
60
60
  to: href,
61
- className: "flex items-center gap-3 transition-opacity hover:opacity-80",
61
+ className: "flex items-start gap-3 transition-opacity hover:opacity-80",
62
62
  children: header
63
63
  }) : /* @__PURE__ */ jsx("div", {
64
- className: "flex items-center gap-3",
64
+ className: "flex items-start gap-3",
65
65
  children: header
66
66
  }), loading ? /* @__PURE__ */ jsxs("div", {
67
67
  role: "status",
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Returns url when following it cannot run script in the app's origin: a
3
+ * relative path or an http, https or blob URL. Hosts and servers supply these
4
+ * URLs, so a javascript: URL from either would otherwise run when clicked.
5
+ */
6
+ export declare function safeUrl(url: string | null | undefined): string | undefined;