@parallelworks/ui 0.11.0 → 0.12.1

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.
@@ -3,7 +3,7 @@ import { c as useStrings, i as useNotify } from "./Provider-CfFV-vc5.js";
3
3
  import { n as TOOLTIP_ID } from "./Tooltip-WgbiC_nd.js";
4
4
  import { i as filterOption, l as toggleSetMember } from "./StatusBadge-P6C2tv7Z.js";
5
5
  import { n as modalPanelClasses, t as BareModal } from "./BareModal-DBa84JZO.js";
6
- import { S as AddMenu } from "./PageHeader-gNiEcD23.js";
6
+ import { S as AddMenu } from "./PageHeader-dyoL44ue.js";
7
7
  import cx from "classnames";
8
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
9
  import { Suspense, lazy, useCallback, useEffect, useRef, useState } from "react";
@@ -127,6 +127,9 @@ function ConfirmModal({ open, onClose, title, description, children, confirmLabe
127
127
  await onConfirm();
128
128
  if (closeOnConfirm) onCloseRef.current();
129
129
  else firedRef.current = false;
130
+ } catch (error) {
131
+ firedRef.current = false;
132
+ throw error;
130
133
  } finally {
131
134
  setPending(false);
132
135
  }
@@ -578,12 +581,13 @@ function CreateModalSelectPanel({ open, options, label, value, collapsedLabel, o
578
581
  * icons and group headers (e.g. Clusters vs Kubernetes). */
579
582
  function CreateModalSelect({ label, icon, value, options, onChange, disabled = false, disabledHint, tooltip, collapsedLabel }) {
580
583
  const selected = options.find((o) => o.value === value);
584
+ const selectedLabel = selected?.label ?? (value || void 0);
581
585
  const pillContent = /* @__PURE__ */ jsxs(Fragment, { children: [
582
586
  selected?.icon ?? icon,
583
- selected ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
587
+ selectedLabel ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
584
588
  className: "font-normal text-(--theme-muted-text-color)",
585
589
  children: label
586
- }), selected.label] }) : label,
590
+ }), selectedLabel] }) : label,
587
591
  /* @__PURE__ */ jsx(ChevronDownIcon, { className: "w-3 h-3 opacity-60" })
588
592
  ] });
589
593
  if (disabled) return /* @__PURE__ */ jsx("button", {
@@ -599,7 +603,7 @@ function CreateModalSelect({ label, icon, value, options, onChange, disabled = f
599
603
  });
600
604
  return /* @__PURE__ */ jsx(Menu, { children: ({ open }) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(MenuButton, {
601
605
  "aria-label": label,
602
- className: cx("inline-flex h-7 rounded-md border border-(--theme-border) text-xs font-medium transition-colors hover:bg-(--theme-muted-panel-bg)", selected ? "text-(--theme-app)" : "text-(--theme-muted-text-color)"),
606
+ className: cx("inline-flex h-7 rounded-md border border-(--theme-border) text-xs font-medium transition-colors hover:bg-(--theme-muted-panel-bg)", selectedLabel ? "text-(--theme-app)" : "text-(--theme-muted-text-color)"),
603
607
  children: /* @__PURE__ */ jsx(PillTooltip, {
604
608
  content: tooltip,
605
609
  className: "px-2",
@@ -522,7 +522,7 @@ function BreadcrumbsActionButton({ icon: Icon, label, ariaLabel, to, onClick, di
522
522
  function PageHeader({ breadcrumbs, title, titleAction, actions, toolbar, className, sticky = true, stickyTopClassName = "top-0" }) {
523
523
  const { setHidden } = useBreadcrumb();
524
524
  const Link = useLink();
525
- const { breadcrumbPin } = useSlots();
525
+ const { breadcrumbPin, navToggle } = useSlots();
526
526
  useLayoutEffect(() => {
527
527
  setHidden(true);
528
528
  return () => setHidden(false);
@@ -559,11 +559,17 @@ function PageHeader({ breadcrumbs, title, titleAction, actions, toolbar, classNa
559
559
  className: "flex items-center gap-1.5 shrink-0",
560
560
  children: actions
561
561
  });
562
+ const toggle = navToggle?.();
563
+ const hasLeading = !!crumbRow || !!toggle;
564
+ const leading = hasLeading ? /* @__PURE__ */ jsxs("div", {
565
+ className: "flex items-center gap-2 min-w-0",
566
+ children: [toggle, crumbRow]
567
+ }) : /* @__PURE__ */ jsx("div", {});
562
568
  return /* @__PURE__ */ jsxs("div", {
563
569
  className: cx(sticky && cx("sticky z-20", stickyTopClassName), "w-full bg-(--theme-app-bg)", className),
564
570
  children: [/* @__PURE__ */ jsxs("div", {
565
- className: cx("flex items-center justify-between gap-6 px-4 h-11", crumbRow && "border-b border-(--theme-border)"),
566
- children: [crumbRow || /* @__PURE__ */ jsx("div", {}), actionCluster]
571
+ className: cx("flex items-center justify-between gap-6 px-4 h-11", hasLeading && "border-b border-(--theme-border)"),
572
+ children: [leading, actionCluster]
567
573
  }), toolbar && /* @__PURE__ */ jsx("div", {
568
574
  className: "px-4",
569
575
  children: toolbar
@@ -1,7 +1,7 @@
1
1
  import { CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, DisplayIcon, ErrorIcon, FilterIcon, MenuIcon, SearchIcon, XIcon } from "../icons.js";
2
2
  import { c as useStrings, n as useLink, r as useNavigation } from "./Provider-CfFV-vc5.js";
3
3
  import { n as TOOLTIP_ID, r as TooltipInfo } from "./Tooltip-WgbiC_nd.js";
4
- import { c as PageHeader, f as rowContextMenuProps, g as useRowMenuActive, l as MoreButton } from "./PageHeader-gNiEcD23.js";
4
+ import { c as PageHeader, f as rowContextMenuProps, g as useRowMenuActive, l as MoreButton } from "./PageHeader-dyoL44ue.js";
5
5
  import { n as Table } from "./Table-ByziK93x.js";
6
6
  import cx from "classnames";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -368,10 +368,13 @@ function ListRowActionsProvider({ view, children }) {
368
368
  children
369
369
  });
370
370
  }
371
- function ListPage({ section = "main", shellPadded, breadcrumbs, title, titleAction, actions, toolbar, view, children }) {
371
+ function ListPage({ section = "main", shellPadded, embedded = false, breadcrumbs, title, titleAction, actions, toolbar, view, children }) {
372
372
  return /* @__PURE__ */ jsxs("div", {
373
373
  className: cx("flex h-full min-h-0 flex-col", (shellPadded ?? SECTION_SHELL_PADDED[section]) && "-m-4"),
374
- children: [/* @__PURE__ */ jsx(PageHeader, {
374
+ children: [embedded ? toolbar && /* @__PURE__ */ jsx("div", {
375
+ className: "px-4 py-1.5",
376
+ children: toolbar
377
+ }) : /* @__PURE__ */ jsx(PageHeader, {
375
378
  stickyTopClassName: SECTION_STICKY_TOP[section],
376
379
  breadcrumbs,
377
380
  title,
@@ -465,6 +465,9 @@ export interface UISlots {
465
465
  breadcrumbPin?: (args: {
466
466
  crumbs: readonly PageHeaderCrumb[];
467
467
  }) => ReactNode;
468
+ /** Control rendered at the start of the page header row, before the crumb
469
+ * trail — the host's app-nav toggle. Absent hides it. */
470
+ navToggle?: () => ReactNode;
468
471
  }
469
472
  export interface UIProviderValue {
470
473
  notify: UINotify;
@@ -7,4 +7,4 @@ export { LIST_PAGE_SIZE } from './lib/paging.js';
7
7
  export type { TreeNode, TStorage, TStorageObject } from './lib/types.js';
8
8
  export { CorsError } from './lib/errors.js';
9
9
  export { chunk, mapWithConcurrency, paginate } from './lib/batch.js';
10
- export { collectObjectKeysToDelete, getObjectKeyFromNode, isClientValid, removeLeadingAndTrailingSlashes, } from './lib/utils.js';
10
+ export { attachmentDisposition, collectObjectKeysToDelete, getObjectKeyFromNode, isClientValid, removeLeadingAndTrailingSlashes, } from './lib/utils.js';
@@ -1,12 +1,12 @@
1
1
  import { AccessIcon, AlertIcon, AngleDownIcon, AngleRightIcon, AngleUpIcon, ChevronLeftIcon, ChevronRightIcon, ClipboardIcon, CloseIcon, CloudUploadIcon, CollapseIcon, CustomizeIcon, DiskIcon, DocumentIcon, DownloadFileIcon, ExpandIcon, ExpandVerticalIcon, EyeIcon, FileIcon, FileTextIcon, FolderIcon, FolderOpenIcon, ImageIcon, LinkIcon, LockIcon, MinimizeIcon, MusicIcon, PdfIcon, RefreshIcon, ShareIcon, SpreadsheetIcon, SuccessIcon, TrashIcon, UploadIcon, UserIcon, VideoIcon, ZipIcon, ZoomInIcon, ZoomOutIcon } from "../icons.js";
2
- import { c as ConfirmModal, f as Markdown, h as Callout, m as CopyToClipboard, n as CreateModal, p as CopyCodeBlock } from "../chunks/CreateModal-BnK7mT0s.js";
2
+ import { c as ConfirmModal, f as Markdown, h as Callout, m as CopyToClipboard, n as CreateModal, p as CopyCodeBlock } from "../chunks/CreateModal-DLCC8t_x.js";
3
3
  import { a as useProvisionCorsRules, c as useStrings, i as useNotify, s as useSlots } from "../chunks/Provider-CfFV-vc5.js";
4
4
  import { n as TOOLTIP_ID, r as TooltipInfo } from "../chunks/Tooltip-WgbiC_nd.js";
5
5
  import { t as StatusBadge } from "../chunks/StatusBadge-P6C2tv7Z.js";
6
6
  import { t as Loader } from "../chunks/Loader-BXoXTZGc.js";
7
- import { d as copySubmenu, g as useRowMenuActive, h as useRowMenu, l as MoreButton, u as assembleRowMenu } from "../chunks/PageHeader-gNiEcD23.js";
7
+ import { d as copySubmenu, g as useRowMenuActive, h as useRowMenu, l as MoreButton, u as assembleRowMenu } from "../chunks/PageHeader-dyoL44ue.js";
8
8
  import { n as Table } from "../chunks/Table-ByziK93x.js";
9
- import { C as ListSkeleton, E as RowSelectCheckbox, O as listTableFixedProps, k as listTableProps, x as ListActionsHeader } from "../chunks/list-v1mrhiNw.js";
9
+ import { C as ListSkeleton, E as RowSelectCheckbox, O as listTableFixedProps, k as listTableProps, x as ListActionsHeader } from "../chunks/list-CWVR3dfZ.js";
10
10
  import cx from "classnames";
11
11
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
12
12
  import { Suspense, createContext, lazy, memo, use, useCallback, useEffect, useEffectEvent, useId, useLayoutEffect, useMemo, useRef, useState, useTransition } from "react";
@@ -239,6 +239,9 @@ function calculateUploadNodesTotalSize(uploadNodes) {
239
239
  function getObjectKeyFromNode(node) {
240
240
  return node.relativePath || node.path.split("/").filter(Boolean).slice(1).join("/");
241
241
  }
242
+ function attachmentDisposition(filename) {
243
+ return `attachment; filename="${filename.replace(/[^\x20-\x7e]|["\\]/g, "_")}"; filename*=UTF-8''${encodeURIComponent(filename).replace(/['()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`)}`;
244
+ }
242
245
  function getDirectoryPrefixFromNode(node) {
243
246
  const key = getObjectKeyFromNode(node);
244
247
  if (!key) throw new Error(`Cannot resolve an object prefix for ${node.path}`);
@@ -4383,7 +4386,10 @@ function FileExplorer({ storages, onRefresh, showUserHierarchy = false, groups =
4383
4386
  notify.error(t.messages.storageUnavailable);
4384
4387
  return;
4385
4388
  }
4386
- const { provider, client } = await getProviderAndClient(storage);
4389
+ const { provider, client } = await getProviderAndClient(storage).catch(() => ({
4390
+ provider: null,
4391
+ client: null
4392
+ }));
4387
4393
  if (!provider || !client) {
4388
4394
  const message = t.messages.connectFailed;
4389
4395
  updateConnectionIssuesMessage((prev) => new Map(prev).set(storage.id, message));
@@ -4638,7 +4644,7 @@ function FileExplorer({ storages, onRefresh, showUserHierarchy = false, groups =
4638
4644
  return;
4639
4645
  }
4640
4646
  for (const [index, node] of filesToDownload.entries()) {
4641
- const input = provider.getFileInput(node.storageName ?? "", node);
4647
+ const input = provider.getFileInput(node.storageName ?? "", node, void 0, node.name);
4642
4648
  const [presignedUrl, error] = await client.getFile(input);
4643
4649
  if (error || !presignedUrl) {
4644
4650
  notify.error(error?.message ?? t.messages.downloadLinkFailed);
@@ -4676,12 +4682,12 @@ function FileExplorer({ storages, onRefresh, showUserHierarchy = false, groups =
4676
4682
  document.body.removeChild(a);
4677
4683
  }, 300);
4678
4684
  };
4679
- const getPresignedUrl = async (node) => {
4685
+ const getPresignedUrl = async (node, downloadFilename) => {
4680
4686
  const factory = await getStorageProviderAndClient(node.storageId);
4681
4687
  if (!factory) return [null, /* @__PURE__ */ new Error("Failed to connect to storage provider.")];
4682
4688
  const { provider, client } = factory;
4683
4689
  if (!provider?.getFileInput) return [null, /* @__PURE__ */ new Error("Preview is not supported for this storage.")];
4684
- const input = provider.getFileInput(node.storageName ?? "", node, PREVIEW_URL_EXPIRES_IN);
4690
+ const input = provider.getFileInput(node.storageName ?? "", node, PREVIEW_URL_EXPIRES_IN, downloadFilename);
4685
4691
  return client.getFile(input);
4686
4692
  };
4687
4693
  const previewSiblings = useMemo(() => previewNode ? getNodeChildren(parentToChildrenMap, getParentPath(previewNode.path)).filter((n) => n.type === "file") : [], [previewNode, parentToChildrenMap]);
@@ -4720,7 +4726,7 @@ function FileExplorer({ storages, onRefresh, showUserHierarchy = false, groups =
4720
4726
  }
4721
4727
  };
4722
4728
  const downloadNode = async (node) => {
4723
- const [presignedUrl, error] = await getPresignedUrl(node);
4729
+ const [presignedUrl, error] = await getPresignedUrl(node, node.name);
4724
4730
  if (error || !presignedUrl) {
4725
4731
  notify.error(error?.message ?? t.messages.downloadLinkFailed);
4726
4732
  return;
@@ -4973,7 +4979,10 @@ function FileExplorer({ storages, onRefresh, showUserHierarchy = false, groups =
4973
4979
  return;
4974
4980
  }
4975
4981
  const factory = await getStorageProviderAndClient(targetNode.storageId);
4976
- if (!factory) return;
4982
+ if (!factory) {
4983
+ notify.error(t.messages.connectFailed);
4984
+ return;
4985
+ }
4977
4986
  const { storage, provider, client } = factory;
4978
4987
  const storageName = storage.bucketName || storage.name;
4979
4988
  const cleanTargetPath = targetNode.root ? "" : removeLeadingAndTrailingSlashes(targetNode.relativePath || "");
@@ -5635,4 +5644,4 @@ async function mapWithConcurrency(items, limit, worker) {
5635
5644
  return results;
5636
5645
  }
5637
5646
  //#endregion
5638
- export { CorsError, FileExplorer, FileExplorerProvider, LIST_PAGE_SIZE, NoDataAvailablePreview, SkeletonPreview, chunk, collectObjectKeysToDelete, getObjectKeyFromNode, isClientValid, mapWithConcurrency, paginate, removeLeadingAndTrailingSlashes, useFileExplorer };
5647
+ export { CorsError, FileExplorer, FileExplorerProvider, LIST_PAGE_SIZE, NoDataAvailablePreview, SkeletonPreview, attachmentDisposition, chunk, collectObjectKeysToDelete, getObjectKeyFromNode, isClientValid, mapWithConcurrency, paginate, removeLeadingAndTrailingSlashes, useFileExplorer };
@@ -26,7 +26,9 @@ export interface IFileExplorerProvider {
26
26
  * the same bivariance reason as the two above. */
27
27
  nextPageCursor?(data: unknown): string | undefined;
28
28
  listDirectoryInput?: ((storage: TStorage, dir_path?: string, page?: TListPageRequest) => unknown) | null;
29
- getFileInput?: ((storageName: string, node: TreeNode, presignedUrlExpiresIn?: number) => unknown) | null;
29
+ /** `downloadFilename` asks for a URL that saves under that name. Omit it for a
30
+ * link the user keeps, or for a read the app parses itself. */
31
+ getFileInput?: ((storageName: string, node: TreeNode, presignedUrlExpiresIn?: number, downloadFilename?: string) => unknown) | null;
30
32
  deleteFilesInput?: ((storageName: string, nodes: TreeNode[]) => unknown) | null;
31
33
  uploadFileInput?: ((storageName: string, objectPath: string, file: File | Blob) => unknown) | null;
32
34
  }
@@ -20,6 +20,7 @@ export declare function getUploadNodesFromDataTransferItems(items: DataTransferI
20
20
  }>;
21
21
  export declare function calculateUploadNodesTotalSize(uploadNodes: UploadNode[]): number;
22
22
  export declare function getObjectKeyFromNode(node: TreeNode): string;
23
+ export declare function attachmentDisposition(filename: string): string;
23
24
  export declare function getDirectoryPrefixFromNode(node: TreeNode): string;
24
25
  export declare function pruneNodesInsideSelectedDirectories(nodes: TreeNode[]): TreeNode[];
25
26
  export declare function collectObjectKeysToDelete(nodes: TreeNode[], listKeysUnderPrefix: (prefix: string) => Promise<string[]>): Promise<string[]>;
package/dist/icons.d.ts CHANGED
@@ -6,7 +6,7 @@ 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, BiExpandVertical as ExpandVerticalIcon, BiBuildings as OrganizationIcon, BiPause as PauseIcon, BiSolidCheckShield as ShieldIcon, BiPlay as StartIcon, BiStop as StopIcon, BiSolidTrashAlt as TrashIcon, } from 'react-icons/bi';
8
8
  export { BsStar as PinIcon, BsStarFill as PinFilledIcon, BsGrid as GridIcon, BsBucket as BucketIcon, BsArrowsCollapse as CollapseIcon, BsThreeDotsVertical as MenuIcon, BsThreeDots as MoreIcon, BsSearch as SearchOutlineIcon, BsTerminalFill as UserWorkspaceFillIcon, BsTerminal as UserWorkspaceIcon, BsFileEarmarkZip as ZipIcon, BsMusicNoteBeamed as MusicIcon, } from 'react-icons/bs';
9
- export { FaAmazon as AmazonIcon, FaCentos as CentOSIcon, FaChrome as ChromeIcon, FaCog as CogIcon, FaEdge as EdgeIcon, FaFirefoxBrowser as FirefoxIcon, FaOpera as OperaIcon, FaSafari as SafariIcon, FaExclamationTriangle as WarningTriangleIcon, FaFile as FileSolidIcon, FaFilePdf as PdfSolidIcon, FaFolder as FolderSolidIcon, FaGithub as GitHubIcon, FaImage as ImageSolidIcon, FaLinux as LinuxIcon, FaPaperclip as AttachmentIcon, FaRedhat as RedHatIcon, FaRobot as RobotIcon, FaShieldAlt as ShieldAltIcon, FaStop as StopSolidIcon, FaSuse as SuseIcon, FaUbuntu as UbuntuIcon, FaUsers as AccessIcon, FaPlus as AddIcon, 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, FaChartLine as ChartIcon, FaComments as ChatIcon, FaCheck as CheckIcon, FaChevronDown as ChevronDownIcon, FaChevronUp as ChevronUpIcon, FaCloud as CloudIcon, FaDollarSign as CostDashboardIcon, FaDocker as DockerIcon, FaCloudDownloadAlt as DownloadIcon, FaEdit as EditIcon, FaRunning as ExecuteWorkflow, FaExpand as ExpandIcon, FaFilter as FilterIcon, FaFlask as FlaskIcon, FaRegFolder as FolderIcon, FaCogs as GearsIcon, FaGlobe as GlobeIcon, FaEye as HiddenFalseIcon, FaEyeSlash as HiddenTrueIcon, FaRegFileImage as ImageIcon, FaKey as KeyIcon, FaLink as LinkIcon, FaLock as LockIcon, FaGlobeAmericas as MarketplaceIcon, FaRegCircle as NotRunningIcon, FaOpenid as OIDCIcon, FaRocket as PartnerIcon, FaKey as PasswordIcon, FaChartPie as PieChartIcon, FaPowerOff as PowerIcon, FaPrint as PrintIcon, FaGlobeAmericas as PublishIcon, FaQrcode as QRCodeIcon, FaLayerGroup as ResourceGroupIcon, FaUndoAlt as RetryIcon, FaSave as SaveIcon, FaList as SchedulerIcon, FaSearch as SearchIcon, FaUsers as SharingIcon, FaCompress as ShrinkIcon, FaDesktop as SnapshotIcon, FaSlack as SlackIcon, FaTerminal as TerminalIcon, FaTimes as TimesIcon, FaQuestionCircle as UserGuideIcon, FaStar as FeaturedIcon, FaUser as UserIcon, FaUsers as UsersIcon, FaWindows as WindowsIcon, } from 'react-icons/fa';
9
+ export { FaAmazon as AmazonIcon, FaCentos as CentOSIcon, FaChrome as ChromeIcon, FaCog as CogIcon, FaEdge as EdgeIcon, FaFirefoxBrowser as FirefoxIcon, FaOpera as OperaIcon, FaSafari as SafariIcon, FaExclamationTriangle as WarningTriangleIcon, FaFile as FileSolidIcon, FaFilePdf as PdfSolidIcon, FaFolder as FolderSolidIcon, FaGithub as GitHubIcon, FaGitlab as GitLabIcon, FaImage as ImageSolidIcon, FaLinux as LinuxIcon, FaPaperclip as AttachmentIcon, FaRedhat as RedHatIcon, FaRobot as RobotIcon, FaShieldAlt as ShieldAltIcon, FaStop as StopSolidIcon, FaSuse as SuseIcon, FaUbuntu as UbuntuIcon, FaUsers as AccessIcon, FaPlus as AddIcon, 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, FaChartLine as ChartIcon, FaComments as ChatIcon, FaCheck as CheckIcon, FaChevronDown as ChevronDownIcon, FaChevronUp as ChevronUpIcon, FaCloud as CloudIcon, FaDollarSign as CostDashboardIcon, FaDocker as DockerIcon, FaCloudDownloadAlt as DownloadIcon, FaEdit as EditIcon, FaRunning as ExecuteWorkflow, FaExpand as ExpandIcon, FaFilter as FilterIcon, FaFlask as FlaskIcon, FaRegFolder as FolderIcon, FaCogs as GearsIcon, FaGlobe as GlobeIcon, FaEye as HiddenFalseIcon, FaEyeSlash as HiddenTrueIcon, FaRegFileImage as ImageIcon, FaKey as KeyIcon, FaLink as LinkIcon, FaLock as LockIcon, FaGlobeAmericas as MarketplaceIcon, FaRegCircle as NotRunningIcon, FaOpenid as OIDCIcon, FaRocket as PartnerIcon, FaKey as PasswordIcon, FaChartPie as PieChartIcon, FaPowerOff as PowerIcon, FaPrint as PrintIcon, FaGlobeAmericas as PublishIcon, FaQrcode as QRCodeIcon, FaLayerGroup as ResourceGroupIcon, FaUndoAlt as RetryIcon, FaSave as SaveIcon, FaList as SchedulerIcon, FaSearch as SearchIcon, FaUsers as SharingIcon, FaCompress as ShrinkIcon, FaDesktop as SnapshotIcon, FaSlack as SlackIcon, FaTerminal as TerminalIcon, FaTimes as TimesIcon, FaQuestionCircle as UserGuideIcon, FaStar as FeaturedIcon, FaUser as UserIcon, FaUsers as UsersIcon, FaWindows as WindowsIcon, } from 'react-icons/fa';
10
10
  export { FaApple as AppleIcon, FaArrowsRotate as RefreshArrowsIcon, FaDebian as DebianIcon, FaWandMagicSparkles as CustomizeIcon, FaFilterCircleXmark as FilterClearIcon, FaRegFolderOpen as FolderOpenIcon, FaLocationDot as IpAddressIcon, FaUpRightFromSquare as NewWindowIcon, FaInbox as NotificationInboxIcon, FaRegFilePdf as PdfIcon, } from 'react-icons/fa6';
11
11
  export { FiAlertCircle as AlertCircleIcon, FiActivity as HealthMonitoringIcon, FiChevronDown as ChevronDownStrokeIcon, FiClock as ClockIcon, FiHardDrive as DiskIcon, FiDownload as DownloadFileIcon, FiFile as FileIcon, FiFileText as FileTextIcon, FiRotateCcw as HistoryIcon, FiUpload as UploadIcon, FiZap as ZapIcon, } from 'react-icons/fi';
12
12
  export { GiSpy as ImpersonateIcon } from 'react-icons/gi';
package/dist/icons.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import cx from "classnames";
2
2
  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";
3
3
  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, BsTerminal as UserWorkspaceIcon, BsTerminalFill as UserWorkspaceFillIcon, BsThreeDots as MoreIcon, BsThreeDotsVertical as MenuIcon, BsZoomIn as ChartZoomIcon } from "react-icons/bs";
4
- 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, 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, 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 { 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, 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";
5
5
  import { jsx } from "react/jsx-runtime";
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 } from "react-icons/fa6";
@@ -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, 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, LinuxIcon, LoaderIcon, LockIcon, MFA, MailIcon, MarketplaceIcon, 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, 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, ZapIcon, ZipIcon, ZoomInIcon, ZoomOutIcon };
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, LinuxIcon, LoaderIcon, LockIcon, MFA, MailIcon, MarketplaceIcon, 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, 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, ZapIcon, ZipIcon, ZoomInIcon, ZoomOutIcon };
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import { DEFAULT_PRESET, THEME_PRESETS, THEME_TOKENS, applyTheme, contrastRatio, deriveTheme, isDarkColor } from "./theme/index.js";
2
2
  import { AlertIcon, AngleRightIcon, EyeIcon, EyeOffIcon, FilterIcon, LoaderIcon, SortDownIcon, SortUnsortedIcon, SortUpIcon } from "./icons.js";
3
- import { a as CreateModalSelect, c as ConfirmModal, d as primaryButtonClasses, f as Markdown, h as Callout, i as CreateModalField, l as dangerButtonClasses, m as CopyToClipboard, n as CreateModal, o as CreateModalSwitch, p as CopyCodeBlock, r as CreateModalAutocompleteField, s as CreateModalTextarea, t as CREATE_MODAL_SELECT_FILTER_THRESHOLD, u as ghostButtonClasses } from "./chunks/CreateModal-BnK7mT0s.js";
3
+ import { a as CreateModalSelect, c as ConfirmModal, d as primaryButtonClasses, f as Markdown, h as Callout, i as CreateModalField, l as dangerButtonClasses, m as CopyToClipboard, n as CreateModal, o as CreateModalSwitch, p as CopyCodeBlock, r as CreateModalAutocompleteField, s as CreateModalTextarea, t as CREATE_MODAL_SELECT_FILTER_THRESHOLD, u as ghostButtonClasses } from "./chunks/CreateModal-DLCC8t_x.js";
4
4
  import { a as useProvisionCorsRules, c as useStrings, i as useNotify, l as useWorkflowJsonResolver, n as useLink, o as useRunFile, r as useNavigation, s as useSlots, t as UIProvider } from "./chunks/Provider-CfFV-vc5.js";
5
5
  import { i as formatTooltipContent, n as TOOLTIP_ID, r as TooltipInfo, t as GlobalTooltip } from "./chunks/Tooltip-WgbiC_nd.js";
6
6
  import { c as isOption, i as filterOption, l as toggleSetMember, n as StatusDot, o as flattenOptions, r as DropdownCaret, s as isCategory, t as StatusBadge } from "./chunks/StatusBadge-P6C2tv7Z.js";
7
7
  import { a as UncontrolledCollapsiblePanel, c as Dropdown, i as MaybeCollapsible, n as SectionHeader, o as MultiSelectDropdown, r as ControlledCollapsiblePanel, s as CustomListbox, t as SwitchToggle } from "./chunks/SwitchToggle-DcPCXkqL.js";
8
8
  import { t as Loader } from "./chunks/Loader-BXoXTZGc.js";
9
9
  import { n as modalPanelClasses, t as BareModal } from "./chunks/BareModal-DBa84JZO.js";
10
- import { S as AddMenu, _ as BreadcrumbProvider, a as HeaderAddButton, b as useHideBreadcrumbs, c as PageHeader, i as HeaderActionMenu, n as BreadcrumbsRightAction, o as HeaderEditButton, r as BreadcrumbsTitleAction, s as HeaderRowMenu, t as BreadcrumbsActionButton, v as useBreadcrumb, x as useSetBreadcrumbs, y as useClearBreadcrumbs } from "./chunks/PageHeader-gNiEcD23.js";
10
+ import { S as AddMenu, _ as BreadcrumbProvider, a as HeaderAddButton, b as useHideBreadcrumbs, c as PageHeader, i as HeaderActionMenu, n as BreadcrumbsRightAction, o as HeaderEditButton, r as BreadcrumbsTitleAction, s as HeaderRowMenu, t as BreadcrumbsActionButton, v as useBreadcrumb, x as useSetBreadcrumbs, y as useClearBreadcrumbs } from "./chunks/PageHeader-dyoL44ue.js";
11
11
  import { t as useCssIsDark } from "./chunks/useCssIsDark-DHr05dG2.js";
12
12
  import { t as Indicator } from "./chunks/Indicator-hBSIxOPK.js";
13
13
  import { t as SwitchToggleSmall } from "./chunks/SwitchToggleSmall-FcsaYSTs.js";
@@ -18,6 +18,10 @@ export interface ListPageProps {
18
18
  section?: ListSection;
19
19
  /** Force edge-to-edge negative margin for a main-shell page nested under a padded route layout. */
20
20
  shellPadded?: boolean;
21
+ /** Rendered inside a route layout that already owns the page header (e.g. a
22
+ * detail page's tab body). Skips this page's own header so the global
23
+ * breadcrumb strip stays visible, keeping only the toolbar. */
24
+ embedded?: boolean;
21
25
  breadcrumbs?: PageHeaderBreadcrumb[] | undefined;
22
26
  title?: ReactNode;
23
27
  titleAction?: ReactNode;
@@ -27,7 +31,7 @@ export interface ListPageProps {
27
31
  view?: ListViewChrome | undefined;
28
32
  children: ReactNode;
29
33
  }
30
- export declare function ListPage({ section, shellPadded, breadcrumbs, title, titleAction, actions, toolbar, view, children, }: ListPageProps): import("react").JSX.Element;
34
+ export declare function ListPage({ section, shellPadded, embedded, breadcrumbs, title, titleAction, actions, toolbar, view, children, }: ListPageProps): import("react").JSX.Element;
31
35
  export interface PinnedRowAction {
32
36
  key: string;
33
37
  label: string;
@@ -1,3 +1,3 @@
1
- import { d as copySubmenu, f as rowContextMenuProps, g as useRowMenuActive, h as useRowMenu, l as MoreButton, m as toolbarActionToRowAction, p as toRowMenuItem, u as assembleRowMenu } from "../chunks/PageHeader-gNiEcD23.js";
2
- import { A as ActionToolbar, C as ListSkeleton, D as actionsColumnWidth, E as RowSelectCheckbox, M as stickyTabsClasses, N as stickyTabsUnderHeaderClasses, O as listTableFixedProps, P as stickyToolbarClasses, S as ListError, T as NameCell, _ as ListRow, a as ListCount, b as GroupRow, c as ListDisplayMenu, d as isTextEntryContext, f as DEFAULT_ORDER, g as ListPage, h as ListColumns, i as ListPager, j as ToolbarButton, k as listTableProps, l as ListFilterMenu, m as useListView, n as useHoverCard, o as ListSearchControl, p as FAVORITE_ORDER, r as LIST_PAGE_SIZES, s as useListSearch, t as HoverCardSurface, u as listControlButtonClasses, v as ListRowActionsProvider, w as NAME_MIN_WIDTH_PX, x as ListActionsHeader, y as useListNavigate } from "../chunks/list-v1mrhiNw.js";
1
+ import { d as copySubmenu, f as rowContextMenuProps, g as useRowMenuActive, h as useRowMenu, l as MoreButton, m as toolbarActionToRowAction, p as toRowMenuItem, u as assembleRowMenu } from "../chunks/PageHeader-dyoL44ue.js";
2
+ import { A as ActionToolbar, C as ListSkeleton, D as actionsColumnWidth, E as RowSelectCheckbox, M as stickyTabsClasses, N as stickyTabsUnderHeaderClasses, O as listTableFixedProps, P as stickyToolbarClasses, S as ListError, T as NameCell, _ as ListRow, a as ListCount, b as GroupRow, c as ListDisplayMenu, d as isTextEntryContext, f as DEFAULT_ORDER, g as ListPage, h as ListColumns, i as ListPager, j as ToolbarButton, k as listTableProps, l as ListFilterMenu, m as useListView, n as useHoverCard, o as ListSearchControl, p as FAVORITE_ORDER, r as LIST_PAGE_SIZES, s as useListSearch, t as HoverCardSurface, u as listControlButtonClasses, v as ListRowActionsProvider, w as NAME_MIN_WIDTH_PX, x as ListActionsHeader, y as useListNavigate } from "../chunks/list-CWVR3dfZ.js";
3
3
  export { ActionToolbar, DEFAULT_ORDER, FAVORITE_ORDER, GroupRow, HoverCardSurface, LIST_PAGE_SIZES, ListActionsHeader, ListColumns, ListCount, ListDisplayMenu, ListError, ListFilterMenu, ListPage, ListPager, ListRow, ListRowActionsProvider, ListSearchControl, ListSkeleton, MoreButton, NAME_MIN_WIDTH_PX, NameCell, RowSelectCheckbox, ToolbarButton, actionsColumnWidth, assembleRowMenu, copySubmenu, isTextEntryContext, listControlButtonClasses, listTableFixedProps, listTableProps, rowContextMenuProps, stickyTabsClasses, stickyTabsUnderHeaderClasses, stickyToolbarClasses, toRowMenuItem, toolbarActionToRowAction, useHoverCard, useListNavigate, useListSearch, useListView, useRowMenu, useRowMenuActive };
@@ -1882,6 +1882,14 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
1882
1882
  requestAnimationFrame(invalidateConnectors);
1883
1883
  }, [invalidateConnectors]);
1884
1884
  const { data: sublogs, isLoading: sublogsLoading, error: sublogsError } = useRunFile(runSlug, sublogOpen || null, preview ? void 0 : { refreshInterval: 2e3 });
1885
+ useEffect(() => {
1886
+ if (sublogOpen.endsWith("/script-unstable-redacted.sh") && !sublogsLoading && (sublogsError || !sublogs)) setSublogOpen(sublogOpen.replace(/script-unstable-redacted\.sh$/, "script-unstable.sh"));
1887
+ }, [
1888
+ sublogOpen,
1889
+ sublogs,
1890
+ sublogsError,
1891
+ sublogsLoading
1892
+ ]);
1885
1893
  const jobAndStep = sublogOpen.split("/").slice(-3, -1);
1886
1894
  if (jobAndStep.length > 1) jobAndStep[1] = jobAndStep[1].split("_")[1];
1887
1895
  const logName = jobAndStep.length > 1 ? "Job: " + (jobAndStep[0][0].toUpperCase() + jobAndStep[0].slice(1)).replace(/_/g, " ") + " \nStep: " + (jobs[jobAndStep[0]]?.steps[jobAndStep[1]]?.name || "Step " + jobAndStep[1]) : "";
@@ -2058,7 +2066,7 @@ function DependencyGraph({ run, preview = false, initialScale = 1, removeBorder,
2058
2066
  if (sublogIsSubworkflow) {
2059
2067
  openInNewGraph(pathAppend, jobAndStep[0], parseInt(jobAndStep[1], 10));
2060
2068
  setSublogOpen("");
2061
- } else setSublogOpen(sublogOpen.split("/").slice(-1)[0] === "logs.out" ? [...sublogOpen.split("/").slice(0, -1), "script-unstable.sh"].join("/") : [...sublogOpen.split("/").slice(0, -1), "logs.out"].join("/"));
2069
+ } else setSublogOpen(sublogOpen.split("/").slice(-1)[0] === "logs.out" ? [...sublogOpen.split("/").slice(0, -1), "script-unstable-redacted.sh"].join("/") : [...sublogOpen.split("/").slice(0, -1), "logs.out"].join("/"));
2062
2070
  },
2063
2071
  children: /* @__PURE__ */ jsx("span", { children: sublogIsSubworkflow ? "Open Subworkflow" : sublogOpen.split("/").slice(-1)[0] === "logs.out" ? "Show Script" : "Show Logs" })
2064
2072
  }) : void 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parallelworks/ui",
3
- "version": "0.11.0",
3
+ "version": "0.12.1",
4
4
  "description": "Shared UI foundation for Parallel Works packages: theme contract, icons, and core primitives",
5
5
  "license": "MIT",
6
6
  "author": "Parallel Works <support@parallelworks.com>",
@@ -83,7 +83,7 @@
83
83
  "react-zoom-pan-pinch": "^4.0.3",
84
84
  "streamdown": "^2.5.0",
85
85
  "usehooks-ts": "^3.1.1",
86
- "@parallelworks/workflow-parser": "^0.1.0"
86
+ "@parallelworks/workflow-parser": "^0.2.0"
87
87
  },
88
88
  "devDependencies": {
89
89
  "@arethetypeswrong/cli": "^0.18.5",