@parallelworks/ui 0.50.0 → 0.52.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.
Files changed (240) hide show
  1. package/README.md +204 -18
  2. package/dist/ai/agent/toolStrings.d.ts +2 -0
  3. package/dist/ai/agent/toolStrings.js +20 -18
  4. package/dist/ai/ai.css +12 -0
  5. package/dist/ai/components/AllocationSelector.js +5 -1
  6. package/dist/ai/components/AttachmentManager.js +51 -42
  7. package/dist/ai/components/AttachmentUpload.d.ts +4 -2
  8. package/dist/ai/components/AttachmentUpload.js +9 -9
  9. package/dist/ai/components/BlockedGroupBanner.js +8 -14
  10. package/dist/ai/components/BranchNavigator.js +11 -12
  11. package/dist/ai/components/ChatEmptyState.js +12 -19
  12. package/dist/ai/components/ChatInput.d.ts +4 -3
  13. package/dist/ai/components/ChatInput.js +27 -13
  14. package/dist/ai/components/ChatMessage.js +45 -121
  15. package/dist/ai/components/ChatMessageList.d.ts +5 -2
  16. package/dist/ai/components/ChatMessageList.js +89 -51
  17. package/dist/ai/components/ChatSidebar.js +11 -7
  18. package/dist/ai/components/ChatThread.js +1 -13
  19. package/dist/ai/components/DragOverlay.js +3 -3
  20. package/dist/ai/components/MessageAttachments.d.ts +10 -0
  21. package/dist/ai/components/MessageAttachments.js +78 -0
  22. package/dist/ai/components/ModelSelector.js +4 -4
  23. package/dist/ai/components/PastedText.js +2 -2
  24. package/dist/ai/components/ProviderIssueBanner.js +19 -23
  25. package/dist/ai/components/ShareDialog.js +2 -2
  26. package/dist/ai/components/agent/ActivityLine.d.ts +0 -2
  27. package/dist/ai/components/agent/ActivityLine.js +8 -51
  28. package/dist/ai/components/agent/AgentMessageParts.js +117 -56
  29. package/dist/ai/core/ChatProvider.d.ts +16 -5
  30. package/dist/ai/core/ChatProvider.js +41 -8
  31. package/dist/ai/core/config.js +4 -3
  32. package/dist/ai/index.d.ts +1 -1
  33. package/dist/ai/index.js +3 -3
  34. package/dist/ai/strings.d.ts +29 -3
  35. package/dist/ai/strings.js +81 -26
  36. package/dist/ai/types.d.ts +4 -0
  37. package/dist/ai/ui/Notice.d.ts +2 -2
  38. package/dist/ai/ui/Notice.js +29 -62
  39. package/dist/ai/ui/sidebar.d.ts +5 -3
  40. package/dist/ai/ui/sidebar.js +21 -9
  41. package/dist/components/ActionMenu.d.ts +1 -0
  42. package/dist/components/ActionMenu.js +6 -1
  43. package/dist/components/AppLink.d.ts +26 -0
  44. package/dist/components/AppLink.js +51 -0
  45. package/dist/components/Avatar.d.ts +2 -1
  46. package/dist/components/Avatar.js +4 -2
  47. package/dist/components/Button.d.ts +15 -5
  48. package/dist/components/Button.js +47 -40
  49. package/dist/components/Callout.d.ts +31 -7
  50. package/dist/components/Callout.js +51 -24
  51. package/dist/components/Card.d.ts +11 -6
  52. package/dist/components/Card.js +14 -8
  53. package/dist/components/Checkbox.js +2 -1
  54. package/dist/components/ColorInput.js +5 -3
  55. package/dist/components/Combobox.js +49 -19
  56. package/dist/components/ConfirmModal.d.ts +19 -8
  57. package/dist/components/ConfirmModal.js +31 -53
  58. package/dist/components/CopyButton.d.ts +38 -0
  59. package/dist/components/CopyButton.js +68 -0
  60. package/dist/components/CreateModal.js +118 -111
  61. package/dist/components/DatePicker.js +12 -8
  62. package/dist/components/DescriptionList.d.ts +51 -17
  63. package/dist/components/DescriptionList.js +117 -31
  64. package/dist/components/Disclosure.js +1 -1
  65. package/dist/components/Drawer.js +10 -16
  66. package/dist/components/Field.d.ts +15 -5
  67. package/dist/components/Field.js +41 -9
  68. package/dist/components/IconButton.d.ts +14 -5
  69. package/dist/components/IconButton.js +25 -14
  70. package/dist/components/InfoTip.d.ts +4 -1
  71. package/dist/components/InfoTip.js +2 -1
  72. package/dist/components/Input.d.ts +14 -8
  73. package/dist/components/Input.js +46 -31
  74. package/dist/components/Loader.js +1 -1
  75. package/dist/components/MenuEntries.d.ts +43 -12
  76. package/dist/components/MenuEntries.js +34 -19
  77. package/dist/components/Meter.js +5 -4
  78. package/dist/components/Modal.d.ts +28 -4
  79. package/dist/components/Modal.js +37 -14
  80. package/dist/components/Overview.d.ts +20 -12
  81. package/dist/components/Overview.js +14 -9
  82. package/dist/components/PageHeader.d.ts +47 -65
  83. package/dist/components/PageHeader.js +275 -153
  84. package/dist/components/PageHeaderAction.d.ts +67 -0
  85. package/dist/components/PageHeaderAction.js +107 -0
  86. package/dist/components/Pagination.js +6 -16
  87. package/dist/components/Popover.js +3 -2
  88. package/dist/components/Provider.d.ts +79 -19
  89. package/dist/components/Provider.js +140 -130
  90. package/dist/components/Radio.js +2 -1
  91. package/dist/components/RefreshButton.js +7 -8
  92. package/dist/components/RequiredMark.js +1 -1
  93. package/dist/components/RunStatusIcon.js +2 -2
  94. package/dist/components/Section.js +1 -1
  95. package/dist/components/Select.d.ts +4 -9
  96. package/dist/components/Select.js +24 -11
  97. package/dist/components/SettingModeOption.d.ts +1 -1
  98. package/dist/components/SettingModeOption.js +7 -1
  99. package/dist/components/SettingsCard.d.ts +5 -3
  100. package/dist/components/SettingsCard.js +27 -20
  101. package/dist/components/Slider.js +1 -1
  102. package/dist/components/StatusBadge.js +2 -2
  103. package/dist/components/StatusIcons.js +2 -2
  104. package/dist/components/Switch.js +5 -4
  105. package/dist/components/Table.d.ts +30 -20
  106. package/dist/components/Table.js +50 -73
  107. package/dist/components/Tabs.d.ts +3 -7
  108. package/dist/components/Tabs.js +6 -10
  109. package/dist/components/ThemeEditor.js +24 -14
  110. package/dist/components/Toast.d.ts +11 -3
  111. package/dist/components/Toast.js +47 -22
  112. package/dist/components/buttonClasses.js +2 -2
  113. package/dist/components/comboboxItems.d.ts +4 -0
  114. package/dist/components/comboboxItems.js +6 -1
  115. package/dist/components/dismiss.d.ts +12 -0
  116. package/dist/components/dismiss.js +19 -0
  117. package/dist/components/fieldBox.d.ts +4 -0
  118. package/dist/components/fieldBox.js +7 -3
  119. package/dist/components/floating.d.ts +3 -3
  120. package/dist/components/floating.js +1 -1
  121. package/dist/components/markdownCodeBreaks.js +3 -4
  122. package/dist/components/pageHeaderStore.d.ts +41 -0
  123. package/dist/components/pageHeaderStore.js +67 -0
  124. package/dist/components/pathBreaks.d.ts +8 -0
  125. package/dist/components/pathBreaks.js +28 -0
  126. package/dist/components/segmented.js +1 -1
  127. package/dist/components/shortcutKey.d.ts +2 -1
  128. package/dist/components/shortcutKey.js +19 -2
  129. package/dist/components/splitter.js +1 -1
  130. package/dist/components/tone.d.ts +5 -2
  131. package/dist/components/tone.js +15 -6
  132. package/dist/components/useCssIsDark.js +40 -18
  133. package/dist/components/useTheme.js +9 -10
  134. package/dist/dev.d.ts +9 -0
  135. package/dist/dev.js +14 -0
  136. package/dist/editor/Editor.d.ts +3 -2
  137. package/dist/editor/Editor.js +11 -2
  138. package/dist/editor/EditorField.d.ts +2 -1
  139. package/dist/editor/EditorField.js +11 -29
  140. package/dist/editor/FormCodePanel.d.ts +7 -3
  141. package/dist/editor/FormCodePanel.js +14 -7
  142. package/dist/editor/Monaco.d.ts +14 -5
  143. package/dist/editor/Monaco.js +163 -112
  144. package/dist/editor/index.d.ts +5 -5
  145. package/dist/editor/index.js +3 -3
  146. package/dist/editor/themes.d.ts +8 -5
  147. package/dist/editor/themes.js +58 -30
  148. package/dist/editor/yaml.d.ts +6 -2
  149. package/dist/editor/yaml.js +11 -2
  150. package/dist/file-explorer/FileExplorer.js +143 -124
  151. package/dist/file-explorer/FileExplorerContext.js +1 -1
  152. package/dist/file-explorer/FilePreview/StreamedBadge.js +3 -1
  153. package/dist/file-explorer/FilePreview/Viewer.js +2 -2
  154. package/dist/file-explorer/FilePreview/index.js +4 -4
  155. package/dist/file-explorer/FileRow.js +1 -1
  156. package/dist/file-explorer/FileRowsWindow.js +34 -3
  157. package/dist/file-explorer/FileTable.js +3 -1
  158. package/dist/file-explorer/TreeView.js +37 -14
  159. package/dist/file-explorer/helpers.d.ts +2 -1
  160. package/dist/file-explorer/helpers.js +21 -20
  161. package/dist/file-explorer/toasts.js +27 -19
  162. package/dist/file-explorer/treeRows.d.ts +6 -0
  163. package/dist/file-explorer/treeRows.js +19 -1
  164. package/dist/file-explorer/useNearEnd.js +3 -6
  165. package/dist/form/Fields/CheckboxGroupField.js +12 -5
  166. package/dist/form/Fields/DurationField.js +1 -1
  167. package/dist/form/Fields/LabelField.js +1 -1
  168. package/dist/form/Fields/ObjectField.d.ts +1 -1
  169. package/dist/form/Fields/ObjectField.js +3 -2
  170. package/dist/form/Fields/StringField.js +16 -29
  171. package/dist/form/Fields/TextAreaField.js +3 -4
  172. package/dist/form/Form.js +3 -8
  173. package/dist/form/Wizard/WizardNavigation.js +1 -4
  174. package/dist/form/Wizard/WizardStepIndicator.js +1 -1
  175. package/dist/form/Wizard/utils.js +1 -1
  176. package/dist/form/fieldFrame.d.ts +1 -1
  177. package/dist/form/fieldFrame.js +2 -2
  178. package/dist/form/types/fieldComponentTypes.d.ts +2 -1
  179. package/dist/graph/AnnotationBanner.d.ts +1 -2
  180. package/dist/graph/AnnotationBanner.js +30 -32
  181. package/dist/graph/Connectors.js +4 -1
  182. package/dist/graph/DependencyGraph.js +2 -2
  183. package/dist/graph/GraphEditor.js +12 -10
  184. package/dist/graph/GraphEditorDialogs.js +2 -2
  185. package/dist/graph/GraphNode.js +7 -4
  186. package/dist/graph/InputDialog.js +1 -1
  187. package/dist/graph/InputsEditor.js +14 -11
  188. package/dist/graph/MatrixGroup.js +9 -3
  189. package/dist/graph/ProblemsButton.js +2 -2
  190. package/dist/graph/Reveal.js +18 -10
  191. package/dist/graph/ShortcutsButton.d.ts +11 -2
  192. package/dist/graph/ShortcutsButton.js +15 -4
  193. package/dist/graph/TreeView.js +35 -18
  194. package/dist/graph/WorkflowSettingsDialog.js +1 -1
  195. package/dist/graph/editorChrome.js +1 -1
  196. package/dist/graph/editorFields.js +1 -1
  197. package/dist/graph/editorRows.js +16 -10
  198. package/dist/graph/editorStrings.d.ts +7 -0
  199. package/dist/graph/editorStrings.js +8 -1
  200. package/dist/graph/fieldProblems.js +1 -1
  201. package/dist/graph/inputRefs.js +1 -1
  202. package/dist/graph/settingsViews.js +11 -18
  203. package/dist/graph/stepWith.js +2 -2
  204. package/dist/icons.d.ts +2 -0
  205. package/dist/icons.js +4 -2
  206. package/dist/index.d.ts +12 -12
  207. package/dist/index.js +16 -16
  208. package/dist/list/ActionToolbar.d.ts +44 -8
  209. package/dist/list/ActionToolbar.js +301 -102
  210. package/dist/list/ListPage.d.ts +15 -23
  211. package/dist/list/ListPage.js +46 -45
  212. package/dist/list/ListTable.d.ts +32 -7
  213. package/dist/list/ListTable.js +48 -12
  214. package/dist/list/ListViewControls.js +2 -2
  215. package/dist/list/UserHoverCard.js +7 -15
  216. package/dist/list/index.d.ts +2 -2
  217. package/dist/list/index.js +2 -2
  218. package/dist/list/listSearch.js +12 -10
  219. package/dist/list/listView.d.ts +10 -1
  220. package/dist/list/listView.js +15 -1
  221. package/dist/list/rowMenu.d.ts +2 -2
  222. package/dist/logviewer/LogViewer.d.ts +4 -2
  223. package/dist/logviewer/LogViewer.js +88 -70
  224. package/dist/logviewer/logviewer.css +3 -2
  225. package/dist/reducedMotion.d.ts +5 -0
  226. package/dist/reducedMotion.js +20 -0
  227. package/dist/safeUrl.d.ts +1 -1
  228. package/dist/safeUrl.js +4 -2
  229. package/dist/styles/theme.css +24 -10
  230. package/dist/styles.css +1 -1
  231. package/dist/theme/derive.d.ts +1 -1
  232. package/dist/theme/derive.js +46 -21
  233. package/dist/theme/fit.js +10 -4
  234. package/package.json +1 -1
  235. package/dist/components/Breadcrumbs.d.ts +0 -37
  236. package/dist/components/Breadcrumbs.js +0 -90
  237. package/dist/components/CopyToClipboard.d.ts +0 -17
  238. package/dist/components/CopyToClipboard.js +0 -66
  239. package/dist/components/Sort.d.ts +0 -9
  240. package/dist/components/Sort.js +0 -42
@@ -1,3 +1,4 @@
1
+ import { useReducedMotion } from "../reducedMotion.js";
1
2
  import { jsx } from "react/jsx-runtime";
2
3
  import { useLayoutEffect, useRef, useState } from "react";
3
4
  //#region src/graph/Reveal.tsx
@@ -11,12 +12,26 @@ function Reveal({ open, children, growWidth = false, onSettled }) {
11
12
  const [clipped, setClipped] = useState(!open);
12
13
  const [toggling, setToggling] = useState(false);
13
14
  const [renderChildren, setRenderChildren] = useState(open);
15
+ const still = useReducedMotion();
14
16
  if (open && !renderChildren) setRenderChildren(true);
15
17
  if (prevOpen !== open) {
16
18
  setPrevOpen(open);
17
19
  setToggling(true);
18
20
  setClipped(true);
19
21
  }
22
+ const settle = () => {
23
+ setToggling(false);
24
+ setClipped(!open);
25
+ if (!open) setRenderChildren(false);
26
+ onSettled?.();
27
+ };
28
+ useLayoutEffect(() => {
29
+ if (still && toggling) settle();
30
+ }, [
31
+ still,
32
+ toggling,
33
+ open
34
+ ]);
20
35
  useLayoutEffect(() => {
21
36
  if (!growWidth || !renderChildren) return;
22
37
  const el = contentRef.current;
@@ -32,18 +47,11 @@ function Reveal({ open, children, growWidth = false, onSettled }) {
32
47
  style: {
33
48
  gridTemplateRows: open ? "1fr" : "0fr",
34
49
  overflow: clipped ? "hidden" : "visible",
35
- ...growWidth ? {
36
- width: open ? width : 0,
37
- transition: toggling ? FULL_TRANSITION : ROWS_TRANSITION
38
- } : { transition: ROWS_TRANSITION }
50
+ ...growWidth ? { width: open ? width : 0 } : {},
51
+ transition: still ? "none" : growWidth && toggling ? FULL_TRANSITION : ROWS_TRANSITION
39
52
  },
40
53
  onTransitionEnd: (e) => {
41
- if (e.target === e.currentTarget && e.propertyName === "grid-template-rows") {
42
- setToggling(false);
43
- setClipped(!open);
44
- if (!open) setRenderChildren(false);
45
- onSettled?.();
46
- }
54
+ if (e.target === e.currentTarget && e.propertyName === "grid-template-rows") settle();
47
55
  },
48
56
  children: /* @__PURE__ */ jsx("div", {
49
57
  ref: contentRef,
@@ -7,8 +7,17 @@ export interface ShortcutGroup {
7
7
  title: string;
8
8
  shortcuts: Shortcut[];
9
9
  }
10
- export declare const MOD_KEY: string;
11
- export declare const ALT_KEY: string;
10
+ /** Whether the keyboard is an Apple one, whose Command key does what Control does elsewhere. */
11
+ export declare const IS_MAC: boolean;
12
+ /** Copy, paste and undo take Command on a Mac and Control elsewhere, as the handlers do. A Mac
13
+ * shows its symbols; elsewhere the keys go by the names their keycaps carry in the strings. */
14
+ export declare function modifierKeys(key: {
15
+ ctrl: string;
16
+ alt: string;
17
+ }): {
18
+ mod: string;
19
+ alt: string;
20
+ };
12
21
  /** A toolbar button that opens the list of gestures and keys a pane takes. */
13
22
  export declare function ShortcutsButton({ groups }: {
14
23
  groups: ShortcutGroup[];
@@ -1,13 +1,24 @@
1
1
  import { KeyboardIcon } from "../icons.js";
2
- import { Popover } from "../components/Popover.js";
3
2
  import { IconButton } from "../components/IconButton.js";
3
+ import { Popover } from "../components/Popover.js";
4
4
  import { useGraphEditorStrings } from "./editorStrings.js";
5
5
  import { toolbarPanel } from "./toolbarPanel.js";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { Fragment as Fragment$1 } from "react";
8
8
  //#region src/graph/ShortcutsButton.tsx
9
- var MOD_KEY = typeof navigator !== "undefined" && /Mac|iPhone|iPad/.test(navigator.platform) ? "⌘" : "Ctrl";
10
- var ALT_KEY = typeof navigator !== "undefined" && /Mac|iPhone|iPad/.test(navigator.platform) ? "⌥" : "Alt";
9
+ /** Whether the keyboard is an Apple one, whose Command key does what Control does elsewhere. */
10
+ var IS_MAC = typeof navigator !== "undefined" && /Mac|iPhone|iPad/.test(navigator.platform);
11
+ /** Copy, paste and undo take Command on a Mac and Control elsewhere, as the handlers do. A Mac
12
+ * shows its symbols; elsewhere the keys go by the names their keycaps carry in the strings. */
13
+ function modifierKeys(key) {
14
+ return IS_MAC ? {
15
+ mod: "⌘",
16
+ alt: "⌥"
17
+ } : {
18
+ mod: key.ctrl,
19
+ alt: key.alt
20
+ };
21
+ }
11
22
  /** A toolbar button that opens the list of gestures and keys a pane takes. */
12
23
  function ShortcutsButton({ groups }) {
13
24
  const t = useGraphEditorStrings();
@@ -45,4 +56,4 @@ function ShortcutsButton({ groups }) {
45
56
  });
46
57
  }
47
58
  //#endregion
48
- export { ALT_KEY, MOD_KEY, ShortcutsButton };
59
+ export { IS_MAC, ShortcutsButton, modifierKeys };
@@ -1,8 +1,9 @@
1
1
  import { cx } from "../cx.js";
2
2
  import { ChevronRightIcon } from "../icons.js";
3
- import { EmptyState } from "../components/EmptyState.js";
4
3
  import { Loader } from "../components/Loader.js";
5
4
  import { useRunFile, useSlots, useStrings, useWorkflowEngine } from "../components/Provider.js";
5
+ import { EmptyState } from "../components/EmptyState.js";
6
+ import { Button } from "../components/Button.js";
6
7
  import { DisclosurePanel } from "../components/Disclosure.js";
7
8
  import { Elapsed } from "../components/relativeTime.js";
8
9
  import { RunStatusIcon } from "../components/RunStatusIcon.js";
@@ -13,13 +14,14 @@ import { useCallback, useId, useMemo, useState } from "react";
13
14
  //#region src/graph/TreeView.tsx
14
15
  function Chevron({ open, hidden = false }) {
15
16
  return /* @__PURE__ */ jsx("div", {
16
- className: cx("flex-shrink-0 transition-transform duration-150", open && "rotate-90", hidden ? "invisible" : "text-[var(--theme-muted-text-color)]"),
17
+ className: cx("flex-shrink-0 transition-transform duration-150 motion-reduce:transition-none", open && "rotate-90", hidden ? "invisible" : "text-[var(--theme-muted-text-color)]"),
17
18
  children: /* @__PURE__ */ jsx(ChevronRightIcon, { className: cx("w-4 h-4", open && "text-[var(--theme-accent)]") })
18
19
  });
19
20
  }
20
- function StepLogs({ slug, prefix, jobName, stepIndex }) {
21
- const logPath = useWorkflowEngine().stepLogPath(prefix, jobName, stepIndex);
22
- const { data: logs, isLoading, error } = useRunFile(slug, logPath, { refreshInterval: 2e3 });
21
+ function StepLogs({ slug, prefix, jobName, stepIndex, status }) {
22
+ const engine = useWorkflowEngine();
23
+ const logPath = engine.stepLogPath(prefix, jobName, stepIndex);
24
+ const { data: logs, isLoading, error } = useRunFile(slug, logPath, { refreshInterval: engine.isRunActive(status) ? 2e3 : 0 });
23
25
  const { dag: t } = useStrings();
24
26
  if (isLoading && !logs) return /* @__PURE__ */ jsx("div", {
25
27
  className: "px-5 py-4",
@@ -50,13 +52,15 @@ function JobRow({ jobName, job, isExpanded, onToggle, prefix, state }) {
50
52
  const dependencies = Array.isArray(job.needs) ? job.needs : [];
51
53
  const panelId = useId();
52
54
  const { dag: t } = useStrings();
55
+ const skipped = job.status === "skipped" || job.status === "skipped-failed";
53
56
  return /* @__PURE__ */ jsxs("div", {
54
57
  className: "border-b border-[var(--theme-border)] last:border-b-0",
55
58
  children: [/* @__PURE__ */ jsxs("button", {
56
59
  type: "button",
57
- "aria-expanded": isExpanded,
60
+ "aria-expanded": skipped ? void 0 : isExpanded,
58
61
  "aria-controls": hasSteps ? panelId : void 0,
59
- className: cx("flex items-center gap-3 px-5 py-3 transition-colors w-full text-left", job.status === "skipped" || job.status === "skipped-failed" ? "cursor-default" : "cursor-pointer", isExpanded && "bg-[var(--theme-panel-bg)]"),
62
+ "aria-disabled": skipped || void 0,
63
+ className: cx("flex items-center gap-3 px-5 py-3 transition-colors w-full text-left", skipped ? "cursor-default" : "cursor-pointer", isExpanded && "bg-[var(--theme-panel-bg)]"),
60
64
  onClick: onToggle,
61
65
  children: [
62
66
  /* @__PURE__ */ jsx(Chevron, {
@@ -114,6 +118,7 @@ function StepRow({ step, index, isExpanded, onToggle, prefix, jobName, state })
114
118
  const label = engine.stepLabel(step, index);
115
119
  const subworkflow = step.subworkflow;
116
120
  const panelId = useId();
121
+ const subworkflowPanelId = useId();
117
122
  const { dag: t } = useStrings();
118
123
  const subworkflowJobs = subworkflow?.jobs ?? {};
119
124
  const subworkflowJobNames = Object.keys(subworkflowJobs).filter((name) => subworkflowJobs[name]?.if !== false);
@@ -122,7 +127,7 @@ function StepRow({ step, index, isExpanded, onToggle, prefix, jobName, state })
122
127
  /* @__PURE__ */ jsxs("button", {
123
128
  type: "button",
124
129
  "aria-expanded": isExpanded,
125
- "aria-controls": panelId,
130
+ "aria-controls": subworkflow ? subworkflowPanelId : panelId,
126
131
  className: cx("flex items-center gap-3 px-5 py-2.5 cursor-pointer transition-colors w-full text-left", isExpanded ? "" : "hover:bg-[var(--theme-hover)]"),
127
132
  onClick: onToggle,
128
133
  children: [
@@ -154,12 +159,13 @@ function StepRow({ step, index, isExpanded, onToggle, prefix, jobName, state })
154
159
  slug: state.slug,
155
160
  prefix,
156
161
  jobName,
157
- stepIndex: index
162
+ stepIndex: index,
163
+ status: step.status
158
164
  })
159
165
  }),
160
166
  /* @__PURE__ */ jsx(DisclosurePanel, {
161
167
  open: isExpanded && !!subworkflow && subworkflowJobNames.length > 0,
162
- id: panelId,
168
+ id: subworkflowPanelId,
163
169
  children: /* @__PURE__ */ jsx("div", {
164
170
  className: "ml-[38px] border-l-2 border-[var(--theme-border)]",
165
171
  children: subworkflowJobNames.map((subJobName) => {
@@ -181,6 +187,7 @@ function StepRow({ step, index, isExpanded, onToggle, prefix, jobName, state })
181
187
  }
182
188
  function TreeView({ jobs, slug, expandedJobs, setExpandedJobs }) {
183
189
  const engine = useWorkflowEngine();
190
+ const matrixPanelId = useId();
184
191
  const { common, dag } = useStrings();
185
192
  const visibleJobNames = useMemo(() => {
186
193
  return Object.keys(jobs).filter((jobName) => jobs[jobName]?.if !== false);
@@ -208,23 +215,33 @@ function TreeView({ jobs, slug, expandedJobs, setExpandedJobs }) {
208
215
  expandedSteps,
209
216
  onStepToggle: (stepKey) => setExpandedSteps((prev) => toggled(prev, stepKey))
210
217
  };
218
+ const expandable = useMemo(() => {
219
+ const keys = [];
220
+ for (const jobName of visibleJobNames) {
221
+ const job = jobs[jobName];
222
+ if (job?.status === "skipped" || job?.status === "skipped-failed") continue;
223
+ keys.push(jobName);
224
+ const origin = job?._matrix?.originaljob;
225
+ if (origin) keys.push(`matrix:${origin}`);
226
+ }
227
+ return [...new Set(keys)];
228
+ }, [visibleJobNames, jobs]);
211
229
  const expandAll = useCallback(() => {
212
- setExpandedJobs(new Set(visibleJobNames));
213
- }, [visibleJobNames, setExpandedJobs]);
230
+ setExpandedJobs(new Set(expandable));
231
+ }, [expandable, setExpandedJobs]);
214
232
  const collapseAll = useCallback(() => {
215
233
  setExpandedJobs(/* @__PURE__ */ new Set());
216
234
  setExpandedSteps(/* @__PURE__ */ new Set());
217
235
  setExpandedSubworkflowJobs(/* @__PURE__ */ new Set());
218
236
  }, [setExpandedJobs]);
219
- const allExpanded = expandedJobs.size === visibleJobNames.length;
237
+ const allExpanded = expandable.length > 0 && expandable.every((key) => expandedJobs.has(key));
220
238
  return /* @__PURE__ */ jsxs("div", {
221
239
  className: "flex flex-col",
222
240
  children: [/* @__PURE__ */ jsx("div", {
223
241
  className: "flex justify-end px-4 py-2 border-b border-[var(--theme-border)]",
224
- children: /* @__PURE__ */ jsx("button", {
225
- type: "button",
242
+ children: /* @__PURE__ */ jsx(Button, {
243
+ size: "sm",
226
244
  onClick: allExpanded ? collapseAll : expandAll,
227
- className: "text-xs font-mono text-[var(--theme-muted-text-color)] hover:text-[var(--theme-app)] transition-colors px-3 py-1.5 border border-[var(--theme-border)] rounded",
228
245
  children: allExpanded ? common.collapseAll : common.expandAll
229
246
  })
230
247
  }), /* @__PURE__ */ jsx("div", { children: (() => {
@@ -262,7 +279,7 @@ function TreeView({ jobs, slug, expandedJobs, setExpandedJobs }) {
262
279
  children: [/* @__PURE__ */ jsxs("button", {
263
280
  type: "button",
264
281
  "aria-expanded": isGroupExpanded,
265
- "aria-controls": `matrix-panel-${matrixOrigin}`,
282
+ "aria-controls": `${matrixPanelId}-${matrixOrigin}`,
266
283
  className: "flex items-center gap-3 px-5 py-3 cursor-pointer transition-colors w-full text-left",
267
284
  onClick: () => toggleJob(`matrix:${matrixOrigin}`),
268
285
  children: [
@@ -280,7 +297,7 @@ function TreeView({ jobs, slug, expandedJobs, setExpandedJobs }) {
280
297
  ]
281
298
  }), /* @__PURE__ */ jsx(DisclosurePanel, {
282
299
  open: isGroupExpanded,
283
- id: `matrix-panel-${matrixOrigin}`,
300
+ id: `${matrixPanelId}-${matrixOrigin}`,
284
301
  children: /* @__PURE__ */ jsx("div", {
285
302
  className: "pl-4",
286
303
  children: group.members.map((memberName) => {
@@ -1,8 +1,8 @@
1
1
  import { RemoveIcon } from "../icons.js";
2
2
  import { useWorkflowEditing } from "../components/Provider.js";
3
+ import { IconButton } from "../components/IconButton.js";
3
4
  import { ErrorText } from "../components/Field.js";
4
5
  import { Input } from "../components/Input.js";
5
- import { IconButton } from "../components/IconButton.js";
6
6
  import { useGraphEditorStrings, useInputsEditorStrings } from "./editorStrings.js";
7
7
  import { asRecord } from "./records.js";
8
8
  import { SETTINGS_YAML_PATH } from "../editor/settingsYaml.js";
@@ -10,7 +10,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
10
  /** What a drag carries, beside the pointer at `at` in its layer's coordinates. */
11
11
  function DragLabel({ at, text, refused = false }) {
12
12
  return /* @__PURE__ */ jsx("div", {
13
- className: cx("pointer-events-none absolute z-30 rounded-md border bg-(--theme-panel-bg) px-2 py-1 text-xs shadow", refused ? "border-(--theme-error) text-(--theme-error)" : "theme-border"),
13
+ className: cx("pointer-events-none absolute z-30 rounded-md border bg-(--theme-panel-bg) px-2 py-1 text-xs shadow", refused ? "border-(--theme-error) text-(--theme-error-text)" : "theme-border"),
14
14
  style: {
15
15
  left: at.x + 12,
16
16
  top: at.y + 12
@@ -2,12 +2,12 @@ import { AddIcon, ExpressionIcon, RemoveIcon } from "../icons.js";
2
2
  import { withPositionKeys } from "../components/keys.js";
3
3
  import { Tooltip } from "../components/Tooltip.js";
4
4
  import { Button } from "../components/Button.js";
5
+ import { IconButton } from "../components/IconButton.js";
5
6
  import { Checkbox } from "../components/Checkbox.js";
6
7
  import { ErrorText, Field } from "../components/Field.js";
7
8
  import { Input, Textarea } from "../components/Input.js";
8
9
  import { Modal, ModalTitle } from "../components/Modal.js";
9
10
  import { Switch } from "../components/Switch.js";
10
- import { IconButton } from "../components/IconButton.js";
11
11
  import { Section } from "../components/Section.js";
12
12
  import { SegmentedControl } from "../components/SegmentedControl.js";
13
13
  import { useGraphEditorStrings } from "./editorStrings.js";
@@ -4,7 +4,7 @@ import { Tooltip } from "../components/Tooltip.js";
4
4
  import { MarqueeBox, place } from "./editorPrimitives.js";
5
5
  import { EDITOR_HANDLE_CLASS, NO_SELECTION, labelsOf, problemsIn, sameEdge, sameStep, selectionBounds, useGraphEditor, useSelectedEdges, useUi } from "./graphEditorState.js";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
- import { useEffect, useRef } from "react";
7
+ import { useEffect, useMemo, useRef } from "react";
8
8
  //#region src/graph/editorRows.tsx
9
9
  /** Drop indicators, the connection line and the selection, drawn in the graph's own coordinates. */
10
10
  function GraphEditorCanvas() {
@@ -141,18 +141,24 @@ function BoxGrip({ jobs }) {
141
141
  }
142
142
  var onBadge = (target) => target instanceof Element && !!target.closest("[data-problem-badge]");
143
143
  /** A step's problems, or a job's with its steps', listed on hover; a click shows the first one's line. */
144
+ var NO_PROBLEMS = [];
144
145
  function ProblemBadge({ api, job, step }) {
145
146
  const t = api.t;
146
- const mine = (problems) => step === void 0 ? problems.filter((problem) => problem.job === job) : problemsIn(problems, job, step);
147
- const messages = useUi(api, (state) => mine(state.problems).map((problem) => problem.message).join("\n"), "");
148
- const line = useUi(api, (state) => mine(state.problems)[0]?.line ?? 0, 0);
147
+ const problems = useUi(api, (state) => state.problems, NO_PROBLEMS);
148
+ const mine = useMemo(() => step === void 0 ? problems.filter((problem) => problem.job === job) : problemsIn(problems, job, step), [
149
+ problems,
150
+ job,
151
+ step
152
+ ]);
153
+ const messages = mine.map((problem) => problem.message).join("\n");
154
+ const line = mine[0]?.line ?? 0;
149
155
  if (!messages) return null;
150
156
  return /* @__PURE__ */ jsx(Tooltip, {
151
157
  content: messages,
152
158
  children: /* @__PURE__ */ jsx("button", {
153
159
  type: "button",
154
160
  "data-problem-badge": "",
155
- "aria-label": t.problemCount(messages.split("\n").length),
161
+ "aria-label": t.problemCount(mine.length),
156
162
  className: "cursor-pointer rounded p-0.5 text-(--theme-error) hover:bg-(--theme-muted-panel-bg)",
157
163
  onPointerDown: (e) => e.stopPropagation(),
158
164
  onClick: (e) => {
@@ -253,12 +259,12 @@ function EditableJobRow({ job, label, badge = true, children }) {
253
259
  /** One connector circle: dragging it connects `jobs`, dropping on it connects to them. */
254
260
  function PortCircle({ side, at, draw, jobs, port, hint, zIndex }) {
255
261
  const api = useGraphEditor();
256
- const drag = useUi(api, (state) => state.drag, null);
262
+ const anyDrag = useUi(api, (state) => state.drag !== null, false);
263
+ const dragging = useUi(api, ({ drag }) => drag?.payload.kind === "connect" && drag.payload.port === port && drag.payload.side === side, false);
257
264
  if (!api) return null;
258
- const dragging = drag?.payload.kind === "connect" && drag.payload.port === port && drag.payload.side === side;
259
265
  return /* @__PURE__ */ jsx(Tooltip, {
260
266
  content: hint,
261
- disabled: Boolean(drag),
267
+ disabled: anyDrag,
262
268
  children: /* @__PURE__ */ jsxs("span", {
263
269
  role: "none",
264
270
  "data-dag-port": side,
@@ -417,13 +423,13 @@ function EdgeHitPath({ d, edge }) {
417
423
  /** A selected connector's two ends; dragging one onto another job or node moves that end there. */
418
424
  function EdgeEnds({ edge, start, end, zIndex }) {
419
425
  const api = useGraphEditor();
420
- const drag = useUi(api, (state) => state.drag, null);
426
+ const anyDrag = useUi(api, (state) => state.drag !== null, false);
421
427
  if (!api) return null;
422
428
  const t = api.t;
423
429
  const inUse = api.edgeInUse(edge);
424
430
  const handle = (side, at, fixed) => /* @__PURE__ */ jsx(Tooltip, {
425
431
  content: inUse ? t.dependencyInUse : t.moveDependencyEnd,
426
- disabled: Boolean(drag),
432
+ disabled: anyDrag,
427
433
  children: /* @__PURE__ */ jsx("span", {
428
434
  role: "none",
429
435
  "data-dag-edge-end": side,
@@ -51,6 +51,11 @@ export declare const GRAPH_EDITOR_STRINGS: {
51
51
  shift: string;
52
52
  enter: string;
53
53
  delete: string;
54
+ tab: string;
55
+ escape: string;
56
+ /** Control and Alt off a Mac; a Mac shows ⌘ and ⌥. */
57
+ ctrl: string;
58
+ alt: string;
54
59
  };
55
60
  shortcutDoes: {
56
61
  select: string;
@@ -396,6 +401,8 @@ export declare const INPUTS_EDITOR_STRINGS: {
396
401
  addPage: string;
397
402
  page: string;
398
403
  pageNumber: string;
404
+ /** After the page number field: how many pages there are. */
405
+ pageTotal: (count: number) => string;
399
406
  /** The title of a wizard's `count`th page when the editor adds it. */
400
407
  stepTitle: (count: number) => string;
401
408
  /** The submit button label of a form the editor splits into pages. */
@@ -51,7 +51,12 @@ var GRAPH_EDITOR_STRINGS = {
51
51
  scroll: "Scroll",
52
52
  shift: "Shift",
53
53
  enter: "Enter",
54
- delete: "Delete"
54
+ delete: "Delete",
55
+ tab: "Tab",
56
+ escape: "Esc",
57
+ /** Control and Alt off a Mac; a Mac shows ⌘ and ⌥. */
58
+ ctrl: "Ctrl",
59
+ alt: "Alt"
55
60
  },
56
61
  shortcutDoes: {
57
62
  select: "Add a job, step or dependency to the selection, one kind at a time",
@@ -391,6 +396,8 @@ var INPUTS_EDITOR_STRINGS = {
391
396
  addPage: "Add a page after the last",
392
397
  page: "Page",
393
398
  pageNumber: "Page shown",
399
+ /** After the page number field: how many pages there are. */
400
+ pageTotal: (count) => `/ ${count}`,
394
401
  /** The title of a wizard's `count`th page when the editor adds it. */
395
402
  stepTitle: (count) => `Step ${count}`,
396
403
  /** The submit button label of a form the editor splits into pages. */
@@ -92,7 +92,7 @@ function ProblemList({ problems }) {
92
92
  if (problems.length === 0) return null;
93
93
  const fieldOf = (problem) => [...fields ?? []].filter(([key]) => within(problem, key)).sort(([a], [b]) => b.length - a.length)[0]?.[1];
94
94
  return /* @__PURE__ */ jsx("ul", {
95
- className: "flex flex-col gap-1 text-sm text-(--theme-error)",
95
+ className: "flex flex-col gap-1 text-sm text-(--theme-error-text)",
96
96
  children: keyedByContent(problems, (problem) => `${problem.at.join(".")}:${problem.message}`).map(({ key, item: problem }) => {
97
97
  const field = fieldOf(problem);
98
98
  return /* @__PURE__ */ jsxs("li", {
@@ -1,9 +1,9 @@
1
1
  import { AddIcon } from "../icons.js";
2
2
  import { useStrings } from "../components/Provider.js";
3
3
  import { ActionMenu } from "../components/ActionMenu.js";
4
+ import { IconButton } from "../components/IconButton.js";
4
5
  import { Textarea } from "../components/Input.js";
5
6
  import { Switch } from "../components/Switch.js";
6
- import { IconButton } from "../components/IconButton.js";
7
7
  import { Select } from "../components/Select.js";
8
8
  import { useGraphEditorStrings, useInputsEditorStrings } from "./editorStrings.js";
9
9
  import { asRecord } from "./records.js";
@@ -1,13 +1,11 @@
1
- import { Loader } from "../components/Loader.js";
2
1
  import { Tooltip } from "../components/Tooltip.js";
3
2
  import { ErrorText } from "../components/Field.js";
4
3
  import { useGraphEditorStrings } from "./editorStrings.js";
5
4
  import { ProblemList } from "./fieldProblems.js";
6
5
  import { ChoiceButtons } from "./editorFields.js";
6
+ import { Editor } from "../editor/Editor.js";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
- import { Suspense, lazy } from "react";
9
8
  //#region src/graph/settingsViews.tsx
10
- var MonacoEditor = lazy(() => import("../editor/Monaco.js"));
11
9
  function yamlProblem(yaml, t, editing) {
12
10
  const problem = editing.settingsYamlProblem(yaml);
13
11
  return !problem ? void 0 : problem.kind === "syntax" ? t.yamlSyntax(problem.message) : t.yamlNotMap;
@@ -38,21 +36,16 @@ function YamlPane({ path, value, onChange, problem, scoped, nested }) {
38
36
  return /* @__PURE__ */ jsxs("div", {
39
37
  className: "flex flex-col gap-1.5",
40
38
  children: [
41
- /* @__PURE__ */ jsx("div", {
42
- className: "h-[50vh] overflow-hidden rounded-md border theme-border",
43
- children: /* @__PURE__ */ jsx(Suspense, {
44
- fallback: /* @__PURE__ */ jsx(Loader, {}),
45
- children: /* @__PURE__ */ jsx(MonacoEditor, {
46
- path,
47
- language: "yaml",
48
- value,
49
- height: "100%",
50
- scrollBeyondLastLine: false,
51
- onChange,
52
- markers: scoped.markers,
53
- ...nested ? { nested } : {}
54
- })
55
- })
39
+ /* @__PURE__ */ jsx(Editor, {
40
+ path,
41
+ language: "yaml",
42
+ value,
43
+ height: "50vh",
44
+ className: "overflow-hidden rounded-md",
45
+ scrollBeyondLastLine: false,
46
+ onChange,
47
+ markers: scoped.markers,
48
+ ...nested ? { nested } : {}
56
49
  }),
57
50
  /* @__PURE__ */ jsx(ErrorText, { children: problem }),
58
51
  /* @__PURE__ */ jsx(ProblemList, { problems: scoped.problems })
@@ -1,8 +1,8 @@
1
1
  import { RemoveIcon } from "../icons.js";
2
2
  import { useRepoSuggestions, useWorkflowActions, useWorkflowEditing, useWorkflowJsonResolver } from "../components/Provider.js";
3
+ import { IconButton } from "../components/IconButton.js";
3
4
  import { ErrorText } from "../components/Field.js";
4
5
  import { Input, Textarea } from "../components/Input.js";
5
- import { IconButton } from "../components/IconButton.js";
6
6
  import { useGraphEditorStrings, useInputsEditorStrings } from "./editorStrings.js";
7
7
  import { asRecord } from "./records.js";
8
8
  import { loadUsesInputs, splitAtRef } from "./usesInputs.js";
@@ -515,7 +515,7 @@ function ExtraKey({ name, uses, draft, original, onChange }) {
515
515
  children: name
516
516
  }),
517
517
  /* @__PURE__ */ jsx("span", {
518
- className: "text-xs text-(--theme-error)",
518
+ className: "text-xs text-(--theme-error-text)",
519
519
  children: t.notActionInput
520
520
  }),
521
521
  /* @__PURE__ */ jsx(IconButton, {
package/dist/icons.d.ts CHANGED
@@ -128,6 +128,7 @@ export declare const KeyIcon: IconType;
128
128
  export declare const KubernetesNamespaceIcon: IconType;
129
129
  export declare const LanguageIcon: IconType;
130
130
  export declare const LegalIcon: IconType;
131
+ export declare const LibraryIcon: IconType;
131
132
  export declare const LicenseIcon: IconType;
132
133
  export declare const LinkIcon: IconType;
133
134
  export declare const ListViewIcon: IconType;
@@ -173,6 +174,7 @@ export declare const PowerIcon: IconType;
173
174
  export declare const PowershellIcon: IconType;
174
175
  export declare const PreviewIcon: IconType;
175
176
  export declare const PrintIcon: IconType;
177
+ export declare const ProjectIcon: IconType;
176
178
  export declare const PublishIcon: IconType;
177
179
  export declare const PullRequestIcon: IconType;
178
180
  export declare const QRCodeIcon: IconType;
package/dist/icons.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ErrorCheckmark, SuccessCheckmark } from "./components/StatusIcons.js";
2
- import { Activity, Archive, ArrowDown, ArrowDownWideNarrow, ArrowLeft, ArrowLeftRight, ArrowRight, ArrowUp, ArrowUpDown, ArrowUpNarrowWide, AtSign, BadgeCheck, Ban, BanknoteX, Bell, BellOff, BellRing, BookUser, Bot, Boxes, Braces, Brain, BrainCircuit, Briefcase, Building2, Calendar, CalendarClock, CalendarSync, CalendarX, Camera, ChartLine, ChartPie, Check, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, ChevronsDown, ChevronsDownUp, ChevronsUp, ChevronsUpDown, Circle, CircleAlert, CircleCheck, CircleDollarSign, CircleDot, CircleHelp, CircleMinus, CirclePlay, CircleSlash, CircleX, ClipboardCheck, ClipboardPen, Clock, Cloud, CloudCog, CloudOff, Code, CodeXml, Cog, Columns3, Copy, CopyPlus, CornerUpRight, Cpu, CreditCard, Database, DatabaseSearch, DatabaseZap, Disc3, DollarSign, Download, Earth, Ellipsis, EthernetPort, ExternalLink, Eye, EyeOff, File, FileArchive, FileCode, FileImage, FileJson, FileKey, FilePenLine, FileText, FileType, Files, Fingerprint, Flag, FlaskConical, Folder, FolderOpen, FolderPlus, FolderTree, Folders, Funnel, FunnelX, Gauge, GitCommitHorizontal, GitFork, GitPullRequest, Globe, GraduationCap, Grid3x3, GripHorizontal, Group, Handshake, HardDrive, HatGlasses, Headset, Heart, HeartOff, History, Hourglass, House, IdCard, Inbox, Info, Key, KeyRound, Keyboard, Landmark, Languages, Layers, LayoutGrid, Link, List, ListOrdered, ListTodo, ListVideo, LoaderCircle, Lock, LogIn, LogOut, Logs, Mail, MailCheck, MailX, MapPin, MapPinned, Maximize, Megaphone, MemoryStick, Menu, MessageSquare, MessageSquareWarning, MessagesSquare, Minimize, Minimize2, Minus, Monitor, MonitorDown, MonitorPlay, MonitorSmartphone, Moon, Music, Network, NotebookText, PaintBucket, PanelLeft, PanelLeftClose, PanelLeftOpen, Paperclip, PartyPopper, Pause, PcCase, Pencil, PencilLine, Phone, Pin, Play, PlugZap, Plus, Power, Printer, QrCode, Redo2, RefreshCw, Rocket, RotateCcw, RotateCcwSquare, Route, Save, Scale, ScanEye, Search, Send, Server, Settings, Settings2, Share2, Sheet, Shield, ShieldOff, ShieldUser, Smartphone, Sparkles, Square, SquareChevronRight, SquareCode, SquareDashed, SquarePen, SquareSplitHorizontal, SquareTerminal, Star, Store, Sun, Tag, Terminal, TextCursorInput, Trash2, TriangleAlert, Undo2, UndoDot, Unlink, Unplug, Upload, User, UserCheck, UserLock, UserMinus, UserPlus, UserX, Users, Video, Wallet, WandSparkles, Waypoints, Webhook, Wrench, X, Zap, ZoomIn, ZoomOut } from "lucide-react";
2
+ import { Activity, Archive, ArrowDown, ArrowDownWideNarrow, ArrowLeft, ArrowLeftRight, ArrowRight, ArrowUp, ArrowUpDown, ArrowUpNarrowWide, AtSign, BadgeCheck, Ban, BanknoteX, Bell, BellOff, BellRing, BookUser, Bot, Boxes, Braces, Brain, BrainCircuit, Briefcase, Building2, Calendar, CalendarClock, CalendarSync, CalendarX, Camera, ChartLine, ChartPie, Check, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, ChevronsDown, ChevronsDownUp, ChevronsUp, ChevronsUpDown, Circle, CircleAlert, CircleCheck, CircleDollarSign, CircleDot, CircleHelp, CircleMinus, CirclePlay, CircleSlash, CircleX, ClipboardCheck, ClipboardPen, Clock, Cloud, CloudCog, CloudOff, Code, CodeXml, Cog, Columns3, Copy, CopyPlus, CornerUpRight, Cpu, CreditCard, Database, DatabaseSearch, DatabaseZap, Disc3, DollarSign, Download, Earth, Ellipsis, EthernetPort, ExternalLink, Eye, EyeOff, File, FileArchive, FileCode, FileImage, FileJson, FileKey, FilePenLine, FileText, FileType, Files, Fingerprint, Flag, FlaskConical, Folder, FolderKanban, FolderOpen, FolderPlus, FolderTree, Folders, Funnel, FunnelX, Gauge, GitCommitHorizontal, GitFork, GitPullRequest, Globe, GraduationCap, Grid3x3, GripHorizontal, Group, Handshake, HardDrive, HatGlasses, Headset, Heart, HeartOff, History, Hourglass, House, IdCard, Inbox, Info, Key, KeyRound, Keyboard, Landmark, Languages, Layers, LayoutGrid, LibraryBig, Link, List, ListOrdered, ListTodo, ListVideo, LoaderCircle, Lock, LogIn, LogOut, Logs, Mail, MailCheck, MailX, MapPin, MapPinned, Maximize, Megaphone, MemoryStick, Menu, MessageSquare, MessageSquareWarning, MessagesSquare, Minimize, Minimize2, Minus, Monitor, MonitorDown, MonitorPlay, MonitorSmartphone, Moon, Music, Network, NotebookText, PaintBucket, PanelLeft, PanelLeftClose, PanelLeftOpen, Paperclip, PartyPopper, Pause, PcCase, Pencil, PencilLine, Phone, Pin, Play, PlugZap, Plus, Power, Printer, QrCode, Redo2, RefreshCw, Rocket, RotateCcw, RotateCcwSquare, Route, Save, Scale, ScanEye, Search, Send, Server, Settings, Settings2, Share2, Sheet, Shield, ShieldOff, ShieldUser, Smartphone, Sparkles, Square, SquareChevronRight, SquareCode, SquareDashed, SquarePen, SquareSplitHorizontal, SquareTerminal, Star, Store, Sun, Tag, Terminal, TextCursorInput, Trash2, TriangleAlert, Undo2, UndoDot, Unlink, Unplug, Upload, User, UserCheck, UserLock, UserMinus, UserPlus, UserX, Users, Video, Wallet, WandSparkles, Waypoints, Webhook, Wrench, X, Zap, ZoomIn, ZoomOut } from "lucide-react";
3
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region src/icons.tsx
5
5
  var STROKE_WIDTH = 2;
@@ -142,6 +142,7 @@ var KeyIcon = /* @__PURE__ */ icon(Key);
142
142
  var KubernetesNamespaceIcon = /* @__PURE__ */ icon(SquareDashed);
143
143
  var LanguageIcon = /* @__PURE__ */ icon(Languages);
144
144
  var LegalIcon = /* @__PURE__ */ icon(Scale);
145
+ var LibraryIcon = /* @__PURE__ */ icon(LibraryBig);
145
146
  var LicenseIcon = /* @__PURE__ */ icon(BadgeCheck);
146
147
  var LinkIcon = /* @__PURE__ */ icon(Link);
147
148
  var ListViewIcon = /* @__PURE__ */ icon(List);
@@ -187,6 +188,7 @@ var PowerIcon = /* @__PURE__ */ icon(Power);
187
188
  var PowershellIcon = /* @__PURE__ */ icon(SquareChevronRight);
188
189
  var PreviewIcon = /* @__PURE__ */ icon(ScanEye);
189
190
  var PrintIcon = /* @__PURE__ */ icon(Printer);
191
+ var ProjectIcon = /* @__PURE__ */ icon(FolderKanban);
190
192
  var PublishIcon = /* @__PURE__ */ icon(Rocket);
191
193
  var PullRequestIcon = /* @__PURE__ */ icon(GitPullRequest);
192
194
  var QRCodeIcon = /* @__PURE__ */ icon(QrCode);
@@ -262,4 +264,4 @@ var ZipIcon = /* @__PURE__ */ icon(FileArchive);
262
264
  var ZoomInIcon = /* @__PURE__ */ icon(ZoomIn);
263
265
  var ZoomOutIcon = /* @__PURE__ */ icon(ZoomOut);
264
266
  //#endregion
265
- export { APIIcon, AccessIcon, AddIcon, AddProjectIcon, AddUserIcon, AgentIcon, AllocationIcon, ArchiveIcon, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpIcon, AttachmentIcon, AuthenticationIcon, BillingIcon, BriefcaseIcon, BucketIcon, BuildWorkflowIcon, CalendarIcon, CancelIcon, CelebrateIcon, CertificateIcon, ChangesRequestedIcon, ChartIcon, ChatIcon, CheckIcon, ChevronDoubleDownIcon, ChevronDoubleUpIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClipboardCheckIcon, ClockIcon, CloseIcon, CloudIcon, ClusterIcon, CodeIcon, CollapseIcon, ColumnsIcon, CommentIcon, CommitIcon, ComputeIcon, ConnectIcon, ContractIcon, CopyIcon, CustomizeIcon, DesktopIcon, DestroyIcon, DeviceIcon, DirectoryIcon, DisableCostIcon, DisableUserIcon, DisconnectIcon, DiskIcon, DisplayIcon, DownloadIcon, DragHandleIcon, DuplicateIcon, EditIcon, EditorIcon, EducationIcon, EnableCostIcon, EnableUserIcon, EndpointIcon, ErrorCheckmark, ErrorIcon, EventsIcon, ExpandIcon, ExpandVerticalIcon, ExpiredIcon, ExpiringIcon, ExpressionIcon, ExternalLinkIcon, EyeIcon, EyeOffIcon, FailIcon, FavoriteIcon, FavoriteOutlineIcon, FeaturedIcon, FileIcon, FileTextIcon, FilesIcon, FilesystemIcon, FilterClearIcon, FilterIcon, FlaggedIcon, FlaskIcon, FolderIcon, FolderOpenIcon, FolderTreeIcon, ForbiddenIcon, ForkIcon, GearsIcon, GlobeIcon, GovernmentIcon, GraphIcon, GridIcon, HealthMonitoringIcon, HelpIcon, HistoryIcon, HomeIcon, IdCardIcon, ImageIcon, ImpersonateIcon, InboxIcon, IndexIcon, InfoIcon, InfrastructureLayersIcon, InputFormIcon, InstallIcon, InstanceIcon, InstanceTypeIcon, IpAddressIcon, IssueIcon, JobIcon, JsonIcon, KeyIcon, KeyboardIcon, KubernetesNamespaceIcon, LanguageIcon, LegalIcon, LicenseIcon, LinkIcon, ListViewIcon, LockIcon, MFAIcon, MachineImageIcon, MailFailedIcon, MailIcon, MailVerifiedIcon, MapPinIcon, MarketplaceIcon, MatrixIcon, MegaphoneIcon, MigrationIcon, MinimizeIcon, MinusIcon, MlIcon, MoneyIcon, MoonIcon, MoreIcon, MusicIcon, MuteIcon, NavigationIcon, NetworkInterfaceIcon, NewChatIcon, NodeIcon, NotRunningIcon, NotebookIcon, NotificationIcon, OnboardingIcon, OpenInNewGraphIcon, OrganizationIcon, PartnerIcon, PasswordIcon, PauseIcon, PdfIcon, PendingIcon, PhoneIcon, PieChartIcon, PinFilledIcon, PinIcon, PowerIcon, PowershellIcon, PreviewIcon, PrintIcon, PublishIcon, PullRequestIcon, QRCodeIcon, QueueIcon, QuotaIcon, RedoIcon, RefreshIcon, RemoveIcon, RemoveUserIcon, RenameIcon, RenewIcon, ResetLayoutIcon, ResourceGroupIcon, ResourceIcon, RetryIcon, RoleIcon, RollbackIcon, RunWorkflowIcon, RunningIcon, RunsIcon, SaveIcon, SchedulerIcon, ScriptIcon, SearchIcon, SendIcon, ServiceIcon, SessionIcon, SettingsIcon, ShareIcon, ShieldIcon, ShieldOffIcon, ShrinkIcon, SidebarCloseIcon, SidebarIcon, SidebarOpenIcon, SignInIcon, SignOutIcon, SkipIcon, SnapshotIcon, SortDownIcon, SortUnsortedIcon, SortUpIcon, SparklesIcon, SplitIcon, SpreadsheetIcon, StartIcon, StopIcon, StorageIcon, SubdomainIcon, SuccessCheckmark, SuccessIcon, SunIcon, SupportIcon, SwapIcon, TagIcon, TerminalIcon, ThinkingIcon, TodoIcon, TrashIcon, TunnelIcon, UndoIcon, UnfavoriteIcon, UnlinkIcon, UnmuteIcon, UploadIcon, UserIcon, UserWorkspaceIcon, UsersIcon, VideoIcon, WarningIcon, WebhookIcon, ZapIcon, ZipIcon, ZoomInIcon, ZoomOutIcon };
267
+ export { APIIcon, AccessIcon, AddIcon, AddProjectIcon, AddUserIcon, AgentIcon, AllocationIcon, ArchiveIcon, ArrowDownIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpIcon, AttachmentIcon, AuthenticationIcon, BillingIcon, BriefcaseIcon, BucketIcon, BuildWorkflowIcon, CalendarIcon, CancelIcon, CelebrateIcon, CertificateIcon, ChangesRequestedIcon, ChartIcon, ChatIcon, CheckIcon, ChevronDoubleDownIcon, ChevronDoubleUpIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ClipboardCheckIcon, ClockIcon, CloseIcon, CloudIcon, ClusterIcon, CodeIcon, CollapseIcon, ColumnsIcon, CommentIcon, CommitIcon, ComputeIcon, ConnectIcon, ContractIcon, CopyIcon, CustomizeIcon, DesktopIcon, DestroyIcon, DeviceIcon, DirectoryIcon, DisableCostIcon, DisableUserIcon, DisconnectIcon, DiskIcon, DisplayIcon, DownloadIcon, DragHandleIcon, DuplicateIcon, EditIcon, EditorIcon, EducationIcon, EnableCostIcon, EnableUserIcon, EndpointIcon, ErrorCheckmark, ErrorIcon, EventsIcon, ExpandIcon, ExpandVerticalIcon, ExpiredIcon, ExpiringIcon, ExpressionIcon, ExternalLinkIcon, EyeIcon, EyeOffIcon, FailIcon, FavoriteIcon, FavoriteOutlineIcon, FeaturedIcon, FileIcon, FileTextIcon, FilesIcon, FilesystemIcon, FilterClearIcon, FilterIcon, FlaggedIcon, FlaskIcon, FolderIcon, FolderOpenIcon, FolderTreeIcon, ForbiddenIcon, ForkIcon, GearsIcon, GlobeIcon, GovernmentIcon, GraphIcon, GridIcon, HealthMonitoringIcon, HelpIcon, HistoryIcon, HomeIcon, IdCardIcon, ImageIcon, ImpersonateIcon, InboxIcon, IndexIcon, InfoIcon, InfrastructureLayersIcon, InputFormIcon, InstallIcon, InstanceIcon, InstanceTypeIcon, IpAddressIcon, IssueIcon, JobIcon, JsonIcon, KeyIcon, KeyboardIcon, KubernetesNamespaceIcon, LanguageIcon, LegalIcon, LibraryIcon, LicenseIcon, LinkIcon, ListViewIcon, LockIcon, MFAIcon, MachineImageIcon, MailFailedIcon, MailIcon, MailVerifiedIcon, MapPinIcon, MarketplaceIcon, MatrixIcon, MegaphoneIcon, MigrationIcon, MinimizeIcon, MinusIcon, MlIcon, MoneyIcon, MoonIcon, MoreIcon, MusicIcon, MuteIcon, NavigationIcon, NetworkInterfaceIcon, NewChatIcon, NodeIcon, NotRunningIcon, NotebookIcon, NotificationIcon, OnboardingIcon, OpenInNewGraphIcon, OrganizationIcon, PartnerIcon, PasswordIcon, PauseIcon, PdfIcon, PendingIcon, PhoneIcon, PieChartIcon, PinFilledIcon, PinIcon, PowerIcon, PowershellIcon, PreviewIcon, PrintIcon, ProjectIcon, PublishIcon, PullRequestIcon, QRCodeIcon, QueueIcon, QuotaIcon, RedoIcon, RefreshIcon, RemoveIcon, RemoveUserIcon, RenameIcon, RenewIcon, ResetLayoutIcon, ResourceGroupIcon, ResourceIcon, RetryIcon, RoleIcon, RollbackIcon, RunWorkflowIcon, RunningIcon, RunsIcon, SaveIcon, SchedulerIcon, ScriptIcon, SearchIcon, SendIcon, ServiceIcon, SessionIcon, SettingsIcon, ShareIcon, ShieldIcon, ShieldOffIcon, ShrinkIcon, SidebarCloseIcon, SidebarIcon, SidebarOpenIcon, SignInIcon, SignOutIcon, SkipIcon, SnapshotIcon, SortDownIcon, SortUnsortedIcon, SortUpIcon, SparklesIcon, SplitIcon, SpreadsheetIcon, StartIcon, StopIcon, StorageIcon, SubdomainIcon, SuccessCheckmark, SuccessIcon, SunIcon, SupportIcon, SwapIcon, TagIcon, TerminalIcon, ThinkingIcon, TodoIcon, TrashIcon, TunnelIcon, UndoIcon, UnfavoriteIcon, UnlinkIcon, UnmuteIcon, UploadIcon, UserIcon, UserWorkspaceIcon, UsersIcon, VideoIcon, WarningIcon, WebhookIcon, ZapIcon, ZipIcon, ZoomInIcon, ZoomOutIcon };
package/dist/index.d.ts CHANGED
@@ -1,19 +1,19 @@
1
1
  export { ActionMenu } from './components/ActionMenu.js';
2
+ export { AppLink, type AppLinkProps, isPlainClick, type LinkTarget, } from './components/AppLink.js';
2
3
  export { Avatar, type AvatarProps, type AvatarSize, type AvatarStatus, avatarInitials, } from './components/Avatar.js';
3
- export { BreadcrumbProvider, type IBreadcrumbItem, useBreadcrumb, useClearBreadcrumbs, useHideBreadcrumbs, useSetBreadcrumbs, useSetDefaultBreadcrumbs, } from './components/Breadcrumbs.js';
4
4
  export { Button, type ButtonProps, MethodButton } from './components/Button.js';
5
5
  export { type ButtonSize, type ButtonStyle, type ButtonVariant, buttonClasses, } from './components/buttonClasses.js';
6
- export { default as Callout } from './components/Callout.js';
7
- export { Card, CardHeader, type CardProps } from './components/Card.js';
6
+ export { Callout, type CalloutProps, type CalloutTone } from './components/Callout.js';
7
+ export { Card, CardHeader, type CardHeaderProps, type CardProps } from './components/Card.js';
8
8
  export { Checkbox, CheckboxGroup, type CheckboxProps } from './components/Checkbox.js';
9
9
  export { ColorInput, type ColorInputProps } from './components/ColorInput.js';
10
10
  export { Autocomplete, type AutocompleteProps, Combobox, type ComboboxGroup, type ComboboxItem, type ComboboxItems, type ComboboxProps, } from './components/Combobox.js';
11
- export { ConfirmModal } from './components/ConfirmModal.js';
11
+ export { ConfirmModal, type ConfirmModalProps } from './components/ConfirmModal.js';
12
12
  export { type OpenMenu, type OpenMenuOptions, useContextMenu, } from './components/ContextMenu.js';
13
- export { CopyCodeBlock, default as CopyToClipboard } from './components/CopyToClipboard.js';
13
+ export { CopyButton, type CopyButtonProps, CopyCodeBlock, type CopyCodeBlockProps, } from './components/CopyButton.js';
14
14
  export { CreateModal, CreateModalSelect, CreateModalSwitch, } from './components/CreateModal.js';
15
15
  export { DatePicker, type DatePickerProps } from './components/DatePicker.js';
16
- export { DescriptionListItem, default as DescriptionList } from './components/DescriptionList.js';
16
+ export { DescriptionListGroup, DescriptionListItem, type DescriptionListItemProps, type DescriptionListProps, type DescriptionListVariant, default as DescriptionList, } from './components/DescriptionList.js';
17
17
  export { Disclosure, DisclosurePanel, type DisclosureProps } from './components/Disclosure.js';
18
18
  export { Drawer, type DrawerProps } from './components/Drawer.js';
19
19
  export { EmptyState, type EmptyStateProps } from './components/EmptyState.js';
@@ -32,14 +32,15 @@ export { default as Markdown } from './components/Markdown.js';
32
32
  export { MenuCheckboxItem, MenuGroupLabel, MenuItem, MenuLinkItem, MenuPopup, type MenuPopupProps, MenuRadioItem, MenuSeparator, MenuSubmenuTrigger, } from './components/Menu.js';
33
33
  export { type MenuAction, type MenuDivider, MenuEntries, type MenuEntry, MenuFilter, type MenuSearch, type MenuSubmenu, menuDivider, } from './components/MenuEntries.js';
34
34
  export { type BarSize, type BarTone, levelTone, Meter, ProgressBar, } from './components/Meter.js';
35
- export { Modal, ModalDescription, type ModalProps, ModalTitle, modalPanelClassName, } from './components/Modal.js';
35
+ export { Modal, ModalDescription, type ModalProps, type ModalSize, ModalTitle, modalPanelClassName, } from './components/Modal.js';
36
36
  export { NumberInput, type NumberInputProps } from './components/NumberInput.js';
37
37
  export { OneTimeCodeInput, type OneTimeCodeInputProps } from './components/OneTimeCodeInput.js';
38
- export { Overview } from './components/Overview.js';
39
- export { BreadcrumbsActionButton, BreadcrumbsRightAction, BreadcrumbsTitleAction, HeaderActionMenu, HeaderAddButton, HeaderEditButton, PageHeader, type PageHeaderBreadcrumb, type PageHeaderCrumb, } from './components/PageHeader.js';
38
+ export { Overview, type OverviewProps } from './components/Overview.js';
39
+ export { type Breadcrumb, PageHeader, PageHeaderBar, type PageHeaderBarProps, type PageHeaderProps, PageHeaderProvider, } from './components/PageHeader.js';
40
+ export { PageHeaderAction, type PageHeaderActionProps, PageHeaderAddButton, type PageHeaderAddButtonProps, PageHeaderMenu, } from './components/PageHeaderAction.js';
40
41
  export { PAGE_SIZES, Pagination, type PaginationProps } from './components/Pagination.js';
41
42
  export { Popover, PopoverClose, type PopoverProps, useClosePopover, } from './components/Popover.js';
42
- export { type PersistedStateHook, type RunFileResult, type UIData, type UILinkComponent, type UINavigation, UIProvider, type UISlots, type UIStrings, useNavigation, useOptionalWorkflowEngine, usePersistedState, useProvisionCorsRules, useRunFile, useSlots, useStrings, useWorkflowActions, useWorkflowEditing, useWorkflowEngine, useWorkflowEngineLoader, type WorkflowEngineSource, type WorkflowJsonRef, } from './components/Provider.js';
43
+ export { type PersistedStateHook, type RunFileResult, type UIData, type UILinkComponent, type UINavigation, UIProvider, type UIProviderProps, type UISlots, type UIStringOverrides, type UIStrings, useNavigation, useOptionalWorkflowEngine, usePersistedState, useProvisionCorsRules, useRunFile, useSlots, useStrings, useWorkflowActions, useWorkflowEditing, useWorkflowEngine, useWorkflowEngineLoader, type WorkflowEngineSource, type WorkflowJsonRef, } from './components/Provider.js';
43
44
  export { Radio, RadioGroup, type RadioProps } from './components/Radio.js';
44
45
  export { RefreshButton, type RefreshButtonProps } from './components/RefreshButton.js';
45
46
  export { RequiredMark } from './components/RequiredMark.js';
@@ -53,11 +54,10 @@ export { SettingModeOption } from './components/SettingModeOption.js';
53
54
  export { SettingRow, SettingsCard, type SettingsCardProps, SettingsHeading, } from './components/SettingsCard.js';
54
55
  export { LoadingRegion, Skeleton, type SkeletonProps } from './components/Skeleton.js';
55
56
  export { Slider, type SliderProps } from './components/Slider.js';
56
- export { default as Sort, type TDirection } from './components/Sort.js';
57
57
  export { type BadgeVariant, StatusBadge, StatusDot, statusTextClass, } from './components/StatusBadge.js';
58
58
  export { Switch, type SwitchProps } from './components/Switch.js';
59
59
  export { isTextEntryContext, useShortcutKey } from './components/shortcutKey.js';
60
- export { CompactTable, Table } from './components/Table.js';
60
+ export { type SortDirection, Table, type TableDensity } from './components/Table.js';
61
61
  export { type TabItem, TabPanel, Tabs, type TabsProps } from './components/Tabs.js';
62
62
  export { ThemeEditor, type ThemeEditorProps, ThemePreview } from './components/ThemeEditor.js';
63
63
  export { type ToastAction, type Toaster, type ToastOptions, type ToastTone, type ToastUpdate, toast, } from './components/Toast.js';