@parallelworks/ui 0.40.1 → 0.42.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.
- package/README.md +25 -0
- package/dist/ai/adapter/memoryStore.js +7 -0
- package/dist/ai/adapter/mock/mockAdapter.js +52 -17
- package/dist/ai/adapter/openai/createOpenAIStream.js +1 -1
- package/dist/ai/adapter/openai/index.d.ts +1 -1
- package/dist/ai/adapter/openai/sse.d.ts +8 -2
- package/dist/ai/adapter/openai/sse.js +40 -4
- package/dist/ai/adapter/openai/wire.d.ts +6 -0
- package/dist/ai/components/AllocationSelector.d.ts +3 -4
- package/dist/ai/components/AllocationSelector.js +37 -33
- package/dist/ai/components/AttachmentManager.js +7 -7
- package/dist/ai/components/AttachmentUpload.js +5 -5
- package/dist/ai/components/BranchNavigator.js +1 -1
- package/dist/ai/components/ChatEmptyState.js +2 -2
- package/dist/ai/components/ChatInput.js +10 -8
- package/dist/ai/components/ChatLayout.js +4 -5
- package/dist/ai/components/ChatMessage.js +12 -12
- package/dist/ai/components/ChatMessageList.js +9 -9
- package/dist/ai/components/ChatSidebar.js +8 -9
- package/dist/ai/components/ChatThread.js +4 -4
- package/dist/ai/components/ComposerChrome.d.ts +2 -2
- package/dist/ai/components/ComposerChrome.js +3 -6
- package/dist/ai/components/DragOverlay.js +2 -2
- package/dist/ai/components/ModelSelector.d.ts +5 -3
- package/dist/ai/components/ModelSelector.js +102 -339
- package/dist/ai/components/PastedText.js +11 -11
- package/dist/ai/components/ProviderIssueBanner.d.ts +2 -0
- package/dist/ai/components/ProviderIssueBanner.js +34 -16
- package/dist/ai/components/Reasoning.js +4 -4
- package/dist/ai/components/ShareDialog.js +43 -35
- package/dist/ai/components/SlashMenu.d.ts +12 -2
- package/dist/ai/components/SlashMenu.js +29 -13
- package/dist/ai/components/agent/ActivityLine.js +3 -3
- package/dist/ai/components/agent/AgentMessageParts.js +20 -20
- package/dist/ai/components/agent/PermissionPicker.js +13 -11
- package/dist/ai/components/conversationActions.d.ts +4 -6
- package/dist/ai/components/conversationActions.js +9 -13
- package/dist/ai/core/ChatProvider.js +4 -4
- package/dist/ai/core/config.js +1 -1
- package/dist/ai/core/parts.d.ts +5 -0
- package/dist/ai/core/parts.js +28 -1
- package/dist/ai/core/providerIssues.d.ts +7 -0
- package/dist/ai/core/providerIssues.js +9 -1
- package/dist/ai/core/useKeyboardShortcuts.d.ts +4 -0
- package/dist/ai/core/useKeyboardShortcuts.js +8 -2
- package/dist/ai/index.d.ts +0 -1
- package/dist/ai/index.js +1 -2
- package/dist/ai/strings.d.ts +19 -0
- package/dist/ai/strings.js +18 -1
- package/dist/ai/ui/Avatar.js +5 -5
- package/dist/ai/ui/ConversationSidebar.d.ts +0 -1
- package/dist/ai/ui/ConversationSidebar.js +6 -7
- package/dist/ai/ui/Markdown.js +3 -3
- package/dist/ai/ui/Notice.js +6 -6
- package/dist/ai/ui/chip.d.ts +4 -0
- package/dist/ai/ui/chip.js +8 -0
- package/dist/ai/ui/sidebar.d.ts +6 -5
- package/dist/ai/ui/sidebar.js +39 -43
- package/dist/components/ActionMenu.d.ts +13 -0
- package/dist/components/ActionMenu.js +30 -0
- package/dist/components/Avatar.js +6 -6
- package/dist/components/Breadcrumbs.js +1 -1
- package/dist/components/Button.js +10 -10
- package/dist/components/Callout.js +2 -2
- package/dist/components/Card.js +3 -3
- package/dist/components/Combobox.d.ts +66 -0
- package/dist/components/Combobox.js +393 -0
- package/dist/components/ConfirmModal.js +11 -11
- package/dist/components/ContextMenu.d.ts +23 -0
- package/dist/components/ContextMenu.js +89 -0
- package/dist/components/CopyToClipboard.js +2 -2
- package/dist/components/CreateModal.d.ts +17 -36
- package/dist/components/CreateModal.js +97 -259
- package/dist/components/DescriptionList.js +8 -8
- package/dist/components/Filter.js +2 -2
- package/dist/components/FilterPill.js +2 -2
- package/dist/components/HoverCard.d.ts +14 -0
- package/dist/components/HoverCard.js +33 -0
- package/dist/components/IconButton.d.ts +5 -5
- package/dist/components/IconButton.js +18 -22
- package/dist/components/InfoTip.d.ts +15 -0
- package/dist/components/InfoTip.js +60 -0
- package/dist/components/Input.js +5 -5
- package/dist/components/LetterBadge.js +2 -2
- package/dist/components/Loader.js +3 -3
- package/dist/components/Markdown.js +1 -1
- package/dist/components/MarkdownImpl.js +2 -2
- package/dist/components/Menu.d.ts +33 -0
- package/dist/components/Menu.js +86 -0
- package/dist/components/MenuEntries.d.ts +56 -0
- package/dist/components/MenuEntries.js +123 -0
- package/dist/components/Modal.d.ts +29 -0
- package/dist/components/Modal.js +47 -0
- package/dist/components/Overview.js +11 -10
- package/dist/components/PageHeader.d.ts +10 -16
- package/dist/components/PageHeader.js +69 -95
- package/dist/components/Pagination.js +5 -5
- package/dist/components/Provider.d.ts +5 -11
- package/dist/components/Provider.js +11 -14
- package/dist/components/Radio.d.ts +8 -0
- package/dist/components/Radio.js +16 -0
- package/dist/components/SectionHeader.js +2 -2
- package/dist/components/SegmentedControl.d.ts +6 -5
- package/dist/components/SegmentedControl.js +34 -30
- package/dist/components/Select.d.ts +27 -0
- package/dist/components/Select.js +78 -0
- package/dist/components/SettingModeOption.d.ts +5 -8
- package/dist/components/SettingModeOption.js +10 -12
- package/dist/components/SettingRow.js +4 -4
- package/dist/components/SettingsCard.js +4 -4
- package/dist/components/SettingsGroup.js +2 -2
- package/dist/components/Sort.js +1 -1
- package/dist/components/StatusBadge.js +7 -7
- package/dist/components/StatusIcons.js +4 -4
- package/dist/components/Switch.d.ts +22 -0
- package/dist/components/Switch.js +28 -0
- package/dist/components/Table.js +11 -11
- package/dist/components/Tooltip.d.ts +24 -20
- package/dist/components/Tooltip.js +58 -76
- package/dist/components/floating.d.ts +14 -0
- package/dist/components/floating.js +21 -0
- package/dist/components/search.d.ts +2 -0
- package/dist/components/search.js +14 -0
- package/dist/editor/Editor.js +1 -1
- package/dist/editor/EditorField.js +16 -21
- package/dist/editor/FormCodePanel.js +19 -19
- package/dist/editor/Monaco.js +3 -3
- package/dist/file-explorer/FileExplorer.js +77 -81
- package/dist/file-explorer/FileExplorerContext.js +2 -2
- package/dist/file-explorer/FilePreview/CodePreviewEditor.js +1 -1
- package/dist/file-explorer/FilePreview/Inline.js +1 -1
- package/dist/file-explorer/FilePreview/StreamedBadge.js +5 -6
- package/dist/file-explorer/FilePreview/Viewer.js +8 -8
- package/dist/file-explorer/FilePreview/index.d.ts +1 -1
- package/dist/file-explorer/FilePreview/index.js +49 -83
- package/dist/file-explorer/FileRow.d.ts +4 -3
- package/dist/file-explorer/FileRow.js +32 -38
- package/dist/file-explorer/FileRowsWindow.d.ts +3 -2
- package/dist/file-explorer/FileRowsWindow.js +4 -4
- package/dist/file-explorer/FileTable.d.ts +3 -2
- package/dist/file-explorer/FileTable.js +3 -3
- package/dist/file-explorer/LoadMoreRow.js +1 -1
- package/dist/file-explorer/TreeView.js +11 -16
- package/dist/file-explorer/helpers.js +11 -12
- package/dist/file-explorer/toasts.js +11 -11
- package/dist/form/FieldGroup.d.ts +11 -0
- package/dist/form/FieldGroup.js +36 -0
- package/dist/form/FieldWrapper.js +4 -4
- package/dist/form/Fields/BooleanField.js +23 -33
- package/dist/form/Fields/CheckboxGroupField.d.ts +1 -1
- package/dist/form/Fields/CheckboxGroupField.js +9 -13
- package/dist/form/Fields/ColorField.d.ts +1 -2
- package/dist/form/Fields/ColorField.js +6 -11
- package/dist/form/Fields/DropdownField.d.ts +3 -13
- package/dist/form/Fields/DropdownField.js +40 -27
- package/dist/form/Fields/DurationField.d.ts +1 -2
- package/dist/form/Fields/DurationField.js +25 -32
- package/dist/form/Fields/LabelField.js +2 -2
- package/dist/form/Fields/MultiDropdownField.d.ts +6 -12
- package/dist/form/Fields/MultiDropdownField.js +31 -22
- package/dist/form/Fields/NumberField.d.ts +1 -1
- package/dist/form/Fields/NumberField.js +65 -35
- package/dist/form/Fields/ObjectField.d.ts +1 -1
- package/dist/form/Fields/ObjectField.js +12 -43
- package/dist/form/Fields/RadioField.d.ts +1 -1
- package/dist/form/Fields/RadioField.js +30 -41
- package/dist/form/Fields/RangeField.d.ts +1 -2
- package/dist/form/Fields/RangeField.js +23 -16
- package/dist/form/Fields/StringField.d.ts +1 -2
- package/dist/form/Fields/StringField.js +58 -26
- package/dist/form/Fields/TextAreaField.js +12 -10
- package/dist/form/Form.d.ts +30 -48
- package/dist/form/Form.js +306 -412
- package/dist/form/FormLayout.js +9 -9
- package/dist/form/Wizard/WizardContainer.d.ts +1 -4
- package/dist/form/Wizard/WizardContainer.js +40 -56
- package/dist/form/Wizard/WizardNavigation.js +1 -1
- package/dist/form/Wizard/WizardStepContent.d.ts +1 -5
- package/dist/form/Wizard/WizardStepContent.js +11 -16
- package/dist/form/Wizard/WizardStepIndicator.js +6 -6
- package/dist/form/Wizard/types.d.ts +0 -14
- package/dist/form/fieldRegistry.d.ts +1 -1
- package/dist/form/fieldRegistry.js +6 -6
- package/dist/form/formEditing.js +1 -1
- package/dist/form/index.d.ts +5 -4
- package/dist/form/index.js +6 -7
- package/dist/form/types/fieldComponentTypes.d.ts +8 -10
- package/dist/form/useChoiceField.d.ts +20 -0
- package/dist/form/useChoiceField.js +49 -0
- package/dist/form/useFieldValue.d.ts +7 -0
- package/dist/form/useFieldValue.js +20 -0
- package/dist/form/useParsedOpts.d.ts +3 -1
- package/dist/form/useParsedOpts.js +12 -17
- package/dist/form/utils/dependentOptions.d.ts +8 -4
- package/dist/form/utils/dependentOptions.js +25 -17
- package/dist/form/utils/fieldItems.d.ts +10 -0
- package/dist/form/utils/fieldItems.js +11 -0
- package/dist/form/utils/fieldPath.d.ts +10 -0
- package/dist/form/utils/fieldPath.js +20 -0
- package/dist/form/utils/shareEqual.d.ts +6 -0
- package/dist/form/utils/shareEqual.js +38 -0
- package/dist/graph/AnnotationBanner.js +8 -8
- package/dist/graph/Collapse.d.ts +1 -0
- package/dist/graph/Collapse.js +6 -27
- package/dist/graph/Connectors.js +5 -5
- package/dist/graph/DependencyGraph.js +20 -19
- package/dist/graph/GraphEditor.js +30 -41
- package/dist/graph/GraphEditorDialogs.js +17 -17
- package/dist/graph/GraphNode.js +1 -1
- package/dist/graph/InputDialog.js +19 -22
- package/dist/graph/InputsEditor.js +58 -66
- package/dist/graph/JobSummary.js +42 -39
- package/dist/graph/MatrixGroup.js +1 -1
- package/dist/graph/ProblemsButton.js +18 -19
- package/dist/graph/Reveal.js +1 -1
- package/dist/graph/ShortcutsButton.js +15 -18
- package/dist/graph/SuggestionInput.d.ts +5 -10
- package/dist/graph/SuggestionInput.js +14 -18
- package/dist/graph/ToolbarPopover.d.ts +11 -6
- package/dist/graph/ToolbarPopover.js +35 -67
- package/dist/graph/TreeView.js +24 -37
- package/dist/graph/WorkflowSettingsDialog.js +4 -4
- package/dist/graph/editorChrome.js +13 -12
- package/dist/graph/editorFields.js +29 -29
- package/dist/graph/editorPrimitives.d.ts +1 -1
- package/dist/graph/editorPrimitives.js +10 -7
- package/dist/graph/editorRows.js +103 -97
- package/dist/graph/fieldProblems.js +2 -2
- package/dist/graph/graphEditorState.d.ts +4 -3
- package/dist/graph/inputRefs.js +9 -9
- package/dist/graph/settingsViews.js +6 -7
- package/dist/graph/stepWith.js +6 -6
- package/dist/index.d.ts +14 -15
- package/dist/index.js +15 -14
- package/dist/list/ActionToolbar.d.ts +6 -14
- package/dist/list/ActionToolbar.js +48 -96
- package/dist/list/ListPage.d.ts +6 -12
- package/dist/list/ListPage.js +46 -29
- package/dist/list/ListPager.js +4 -4
- package/dist/list/ListTable.js +5 -5
- package/dist/list/ListViewControls.d.ts +5 -4
- package/dist/list/ListViewControls.js +177 -267
- package/dist/list/UserHoverCard.d.ts +3 -17
- package/dist/list/UserHoverCard.js +21 -45
- package/dist/list/index.d.ts +3 -4
- package/dist/list/index.js +3 -4
- package/dist/list/listSearch.js +12 -11
- package/dist/list/rowMenu.d.ts +63 -0
- package/dist/list/rowMenu.js +134 -0
- package/dist/logviewer/LogViewer.js +26 -26
- package/dist/styles.css +1 -1
- package/package.json +7 -13
- package/dist/ai/ui/Dropdown.d.ts +0 -31
- package/dist/ai/ui/Dropdown.js +0 -110
- package/dist/components/AddMenu.d.ts +0 -18
- package/dist/components/AddMenu.js +0 -46
- package/dist/components/BareModal.d.ts +0 -17
- package/dist/components/BareModal.js +0 -77
- package/dist/components/CollapsiblePanel.d.ts +0 -27
- package/dist/components/CollapsiblePanel.js +0 -77
- package/dist/components/Dropdown.d.ts +0 -28
- package/dist/components/Dropdown.js +0 -355
- package/dist/components/Listbox.d.ts +0 -21
- package/dist/components/Listbox.js +0 -119
- package/dist/components/MultiSelect.d.ts +0 -22
- package/dist/components/MultiSelect.js +0 -168
- package/dist/components/SwitchToggle.d.ts +0 -15
- package/dist/components/SwitchToggle.js +0 -57
- package/dist/components/SwitchToggleSmall.d.ts +0 -6
- package/dist/components/SwitchToggleSmall.js +0 -14
- package/dist/components/Toggle.d.ts +0 -6
- package/dist/components/Toggle.js +0 -20
- package/dist/components/dropdownUtils.d.ts +0 -37
- package/dist/components/dropdownUtils.js +0 -99
- package/dist/form/SpecialTypes/DropdownWrapper.d.ts +0 -25
- package/dist/form/SpecialTypes/DropdownWrapper.js +0 -28
- package/dist/form/SpecialTypes/FormikCustomDropdown.d.ts +0 -51
- package/dist/form/SpecialTypes/FormikCustomDropdown.js +0 -119
- package/dist/form/SpecialTypes/FormikCustomInput.d.ts +0 -19
- package/dist/form/SpecialTypes/FormikCustomInput.js +0 -121
- package/dist/form/SpecialTypes/FormikMultiSelectDropdown.d.ts +0 -13
- package/dist/form/SpecialTypes/FormikMultiSelectDropdown.js +0 -31
- package/dist/form/SpecialTypes/FormikNumericInput.d.ts +0 -9
- package/dist/form/SpecialTypes/FormikNumericInput.js +0 -60
- package/dist/form/SpecialTypes/index.d.ts +0 -3
- package/dist/list/HoverCard.d.ts +0 -24
- package/dist/list/HoverCard.js +0 -73
- package/dist/list/RowContextMenu.d.ts +0 -127
- package/dist/list/RowContextMenu.js +0 -515
|
@@ -1,31 +1,11 @@
|
|
|
1
|
-
import { useLink, useNotify, useStrings } from "../components/Provider.js";
|
|
2
1
|
import { FiCopy } from "../icons/fi/FiCopy.js";
|
|
3
|
-
import "../components/Tooltip.js";
|
|
2
|
+
import { Tooltip } from "../components/Tooltip.js";
|
|
3
|
+
import { useLink, useNotify, useStrings } from "../components/Provider.js";
|
|
4
4
|
import { Avatar } from "../components/Avatar.js";
|
|
5
|
-
import {
|
|
6
|
-
import cx from "classnames";
|
|
5
|
+
import { clsx } from "clsx";
|
|
7
6
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
8
7
|
//#region src/list/UserHoverCard.tsx
|
|
9
|
-
|
|
10
|
-
function HoverCardTrigger({ className, children, card }) {
|
|
11
|
-
const { triggerRef, coords, scheduleOpen, scheduleClose, keepOpen } = useHoverCard();
|
|
12
|
-
return /* @__PURE__ */ jsxs("span", {
|
|
13
|
-
ref: triggerRef,
|
|
14
|
-
role: "none",
|
|
15
|
-
className,
|
|
16
|
-
onMouseEnter: scheduleOpen,
|
|
17
|
-
onMouseLeave: scheduleClose,
|
|
18
|
-
onFocus: scheduleOpen,
|
|
19
|
-
onBlur: scheduleClose,
|
|
20
|
-
children: [children, coords && card({
|
|
21
|
-
x: coords.x,
|
|
22
|
-
y: coords.y,
|
|
23
|
-
onKeepOpen: keepOpen,
|
|
24
|
-
onLeave: scheduleClose
|
|
25
|
-
})]
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
function UserHoverCard({ x, y, onKeepOpen, onLeave, username, name, avatarSrc, badge, href, linkComponent, loading = false, relayoutKey, children }) {
|
|
8
|
+
function UserHoverCard({ username, name, avatarSrc, badge, href, linkComponent, loading = false, children }) {
|
|
29
9
|
const strings = useStrings();
|
|
30
10
|
const notify = useNotify();
|
|
31
11
|
const SlotLink = useLink();
|
|
@@ -56,30 +36,26 @@ function UserHoverCard({ x, y, onKeepOpen, onLeave, username, name, avatarSrc, b
|
|
|
56
36
|
const t = strings.list;
|
|
57
37
|
const copyLabel = EMAIL.test(username) ? t.labelEmail : t.labelUsername;
|
|
58
38
|
const onCopy = () => navigator.clipboard?.writeText(username).then(() => notify.success(t.copied(copyLabel)), () => notify.error(t.couldntCopy(copyLabel)));
|
|
59
|
-
return /* @__PURE__ */ jsxs(
|
|
60
|
-
|
|
61
|
-
y,
|
|
62
|
-
widthClassName: "w-64",
|
|
63
|
-
relayoutKey,
|
|
64
|
-
onKeepOpen,
|
|
65
|
-
onLeave,
|
|
39
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
40
|
+
className: "w-64 p-3",
|
|
66
41
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
67
42
|
className: "group/copy flex items-end gap-1",
|
|
68
43
|
children: [href ? /* @__PURE__ */ jsx(Link, {
|
|
69
|
-
|
|
44
|
+
href,
|
|
70
45
|
className: "flex min-w-0 flex-1 items-start gap-3 transition-opacity hover:opacity-80",
|
|
71
46
|
children: header
|
|
72
47
|
}) : /* @__PURE__ */ jsx("div", {
|
|
73
48
|
className: "flex min-w-0 flex-1 items-start gap-3",
|
|
74
49
|
children: header
|
|
75
|
-
}), username && /* @__PURE__ */ jsx(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
50
|
+
}), username && /* @__PURE__ */ jsx(Tooltip, {
|
|
51
|
+
content: t.copy(copyLabel),
|
|
52
|
+
children: /* @__PURE__ */ jsx("button", {
|
|
53
|
+
type: "button",
|
|
54
|
+
"aria-label": t.copy(copyLabel),
|
|
55
|
+
onClick: onCopy,
|
|
56
|
+
className: clsx("shrink-0 cursor-pointer rounded p-0.5 text-(--theme-muted-text-color) opacity-0 transition hover:bg-(--theme-muted-panel-bg) hover:text-(--theme-app) [&>svg]:h-3.5 [&>svg]:w-3.5", "hover:opacity-100 group-has-[[data-copy-value]:hover]/copy:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--theme-link) pointer-coarse:opacity-100"),
|
|
57
|
+
children: /* @__PURE__ */ jsx(FiCopy, { "aria-hidden": "true" })
|
|
58
|
+
})
|
|
83
59
|
})]
|
|
84
60
|
}), loading ? /* @__PURE__ */ jsxs("div", {
|
|
85
61
|
role: "status",
|
|
@@ -112,10 +88,10 @@ var rowClasses = "flex gap-2 text-(--theme-muted-text-color)";
|
|
|
112
88
|
function HoverCardRow({ icon, children, title, align = "center", truncate = false, onClick }) {
|
|
113
89
|
const content = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
|
|
114
90
|
"aria-hidden": "true",
|
|
115
|
-
className:
|
|
91
|
+
className: clsx("flex shrink-0 items-center [&>svg]:h-3.5 [&>svg]:w-3.5", align === "start" && "mt-0.5"),
|
|
116
92
|
children: icon
|
|
117
93
|
}), /* @__PURE__ */ jsx("span", {
|
|
118
|
-
className:
|
|
94
|
+
className: clsx("min-w-0", truncate && "truncate"),
|
|
119
95
|
children
|
|
120
96
|
})] });
|
|
121
97
|
const alignClass = align === "start" ? "items-start" : "items-center";
|
|
@@ -123,14 +99,14 @@ function HoverCardRow({ icon, children, title, align = "center", truncate = fals
|
|
|
123
99
|
type: "button",
|
|
124
100
|
title,
|
|
125
101
|
onClick,
|
|
126
|
-
className:
|
|
102
|
+
className: clsx(rowClasses, alignClass, "-mx-1 max-w-full rounded px-1 py-0.5 text-left transition-colors hover:bg-(--theme-muted-panel-bg) hover:text-(--theme-app)"),
|
|
127
103
|
children: content
|
|
128
104
|
});
|
|
129
105
|
return /* @__PURE__ */ jsx("div", {
|
|
130
106
|
title,
|
|
131
|
-
className:
|
|
107
|
+
className: clsx(rowClasses, alignClass),
|
|
132
108
|
children: content
|
|
133
109
|
});
|
|
134
110
|
}
|
|
135
111
|
//#endregion
|
|
136
|
-
export { HoverCardRow,
|
|
112
|
+
export { HoverCardRow, UserHoverCard };
|
package/dist/list/index.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
export { ActionToolbar, stickyTabsClasses, stickyTabsUnderHeaderClasses, stickyToolbarClasses, type ToolbarAction, ToolbarButton, type ToolbarItem, } from './ActionToolbar.js';
|
|
2
|
-
export {
|
|
3
|
-
export { ListColumns, ListPage, type ListPageProps, ListRow, ListRowActionsProvider, type ListSection, type PinnedRowAction, useListNavigate, } from './ListPage.js';
|
|
2
|
+
export { ListColumns, ListPage, type ListPageProps, ListRow, ListRowActionsProvider, type ListSection, useListNavigate, } from './ListPage.js';
|
|
4
3
|
export { LIST_PAGE_SIZES, ListPager } from './ListPager.js';
|
|
5
4
|
export { actionsColumnWidth, GroupRow, ListActionsHeader, ListError, ListSkeleton, listTableFixedProps, listTableProps, NAME_MIN_WIDTH_PX, NameCell, RowSelectCheckbox, } from './ListTable.js';
|
|
6
5
|
export { AnchoredPopover, ListDisplayMenu, ListFilterMenu, listControlButtonClasses, } from './ListViewControls.js';
|
|
7
6
|
export { ListCount, type ListSearch, ListSearchControl, useListSearch, } from './listSearch.js';
|
|
8
7
|
export { type ActionDef, type ColumnDef, DEFAULT_ORDER, FAVORITE_ORDER, type FilterFacet, type ListView, type ListViewChrome, type ListViewConfig, type OrderByOption, useListView, } from './listView.js';
|
|
9
|
-
export { assembleRowMenu, type CopyFields, type CopySubmenu, MoreButton, type
|
|
8
|
+
export { assembleRowMenu, type CopyFields, type CopySubmenu, MoreButton, type RowAction, rowContextMenuProps, useCopySubmenu, useRowMenuActive, } from './rowMenu.js';
|
|
10
9
|
export { isTextEntryContext } from './textEntry.js';
|
|
11
|
-
export {
|
|
10
|
+
export { HoverCardRow, UserHoverCard, type UserHoverCardProps, } from './UserHoverCard.js';
|
package/dist/list/index.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { MoreButton, assembleRowMenu, rowContextMenuProps, toRowMenuItem, toolbarActionToRowAction, useCopySubmenu, useRowMenu, useRowMenuActive } from "./RowContextMenu.js";
|
|
2
1
|
import { ActionToolbar, ToolbarButton, stickyTabsClasses, stickyTabsUnderHeaderClasses, stickyToolbarClasses } from "./ActionToolbar.js";
|
|
3
|
-
import { HoverCardSurface, useHoverCard } from "./HoverCard.js";
|
|
4
2
|
import { GroupRow, ListActionsHeader, ListError, ListSkeleton, NAME_MIN_WIDTH_PX, NameCell, RowSelectCheckbox, actionsColumnWidth, listTableFixedProps, listTableProps } from "./ListTable.js";
|
|
3
|
+
import { MoreButton, assembleRowMenu, rowContextMenuProps, useCopySubmenu, useRowMenuActive } from "./rowMenu.js";
|
|
5
4
|
import { ListColumns, ListPage, ListRow, ListRowActionsProvider, useListNavigate } from "./ListPage.js";
|
|
6
5
|
import { isTextEntryContext } from "./textEntry.js";
|
|
7
6
|
import { AnchoredPopover, ListDisplayMenu, ListFilterMenu, listControlButtonClasses } from "./ListViewControls.js";
|
|
8
7
|
import { LIST_PAGE_SIZES, ListPager } from "./ListPager.js";
|
|
9
8
|
import { ListCount, ListSearchControl, useListSearch } from "./listSearch.js";
|
|
10
9
|
import { DEFAULT_ORDER, FAVORITE_ORDER, useListView } from "./listView.js";
|
|
11
|
-
import { HoverCardRow,
|
|
12
|
-
export { ActionToolbar, AnchoredPopover, DEFAULT_ORDER, FAVORITE_ORDER, GroupRow, HoverCardRow,
|
|
10
|
+
import { HoverCardRow, UserHoverCard } from "./UserHoverCard.js";
|
|
11
|
+
export { ActionToolbar, AnchoredPopover, DEFAULT_ORDER, FAVORITE_ORDER, GroupRow, HoverCardRow, LIST_PAGE_SIZES, ListActionsHeader, ListColumns, ListCount, ListDisplayMenu, ListError, ListFilterMenu, ListPage, ListPager, ListRow, ListRowActionsProvider, ListSearchControl, ListSkeleton, MoreButton, NAME_MIN_WIDTH_PX, NameCell, RowSelectCheckbox, ToolbarButton, UserHoverCard, actionsColumnWidth, assembleRowMenu, isTextEntryContext, listControlButtonClasses, listTableFixedProps, listTableProps, rowContextMenuProps, stickyTabsClasses, stickyTabsUnderHeaderClasses, stickyToolbarClasses, useCopySubmenu, useListNavigate, useListSearch, useListView, useRowMenuActive };
|
package/dist/list/listSearch.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { FaSearch } from "../icons/fa/FaSearch.js";
|
|
2
2
|
import { FiX } from "../icons/fi/FiX.js";
|
|
3
|
-
import {
|
|
3
|
+
import { Tooltip } from "../components/Tooltip.js";
|
|
4
4
|
import { isTextEntryContext } from "./textEntry.js";
|
|
5
5
|
import { listControlButtonClasses } from "./ListViewControls.js";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
7
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
7
8
|
import { useLocalStorage } from "usehooks-ts";
|
|
8
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
//#region src/list/listSearch.tsx
|
|
10
10
|
var NO_TERMS = [];
|
|
11
11
|
/** Pass `enabled: false` to suspend the global ⌘F/`/` hijack (e.g. when search isn't shown and browser Find should stay active). */
|
|
@@ -114,15 +114,16 @@ function ListSearchControl({ search, placeholder, label = "Search" }) {
|
|
|
114
114
|
})
|
|
115
115
|
]
|
|
116
116
|
});
|
|
117
|
-
return /* @__PURE__ */ jsx(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
"
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
117
|
+
return /* @__PURE__ */ jsx(Tooltip, {
|
|
118
|
+
content: label,
|
|
119
|
+
shortcut: "⌘+F",
|
|
120
|
+
children: /* @__PURE__ */ jsx("button", {
|
|
121
|
+
type: "button",
|
|
122
|
+
onClick: search.openSearch,
|
|
123
|
+
"aria-label": label,
|
|
124
|
+
className: listControlButtonClasses,
|
|
125
|
+
children: /* @__PURE__ */ jsx(FaSearch, { className: "w-3.5 h-3.5" })
|
|
126
|
+
})
|
|
126
127
|
});
|
|
127
128
|
}
|
|
128
129
|
function ListCount({ total, matches, filterActive, noun, nounPlural }) {
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { MouseEvent as ReactMouseEvent, ReactNode } from 'react';
|
|
2
|
+
import type { OpenMenu } from '../components/ContextMenu.js';
|
|
3
|
+
import type { MenuAction, MenuEntry, MenuSubmenu } from '../components/MenuEntries.js';
|
|
4
|
+
/** An action on a row, which its menu lists and its pinned buttons show, named by `key`. */
|
|
5
|
+
export interface RowAction extends MenuAction {
|
|
6
|
+
key: string;
|
|
7
|
+
}
|
|
8
|
+
/** Assembles a row's context menu in the shared order: leading link(s) → middle
|
|
9
|
+
* actions → extra items → Copy submenu → trailing (destructive) actions last. */
|
|
10
|
+
export declare function assembleRowMenu({ lead, actions, exclude, order, trailing, extra, copy, }: {
|
|
11
|
+
/** Pre-built leading link(s), e.g. "View details". */
|
|
12
|
+
lead?: MenuEntry[];
|
|
13
|
+
/** The row's full action list. */
|
|
14
|
+
actions: RowAction[];
|
|
15
|
+
/** Keys already rendered in `lead`/`extra`; dropped from the middle. */
|
|
16
|
+
exclude?: string[];
|
|
17
|
+
/** Explicit middle order; keys absent from `actions` are skipped, keys absent from `order` are dropped. */
|
|
18
|
+
order?: string[];
|
|
19
|
+
/** Keys rendered last, in this order (default `['delete']`). */
|
|
20
|
+
trailing?: string[];
|
|
21
|
+
/** Items inserted after the middle actions and before Copy, e.g. a marketplace link. */
|
|
22
|
+
extra?: MenuEntry[];
|
|
23
|
+
/** The Copy submenu from `useCopySubmenu()`. */
|
|
24
|
+
copy?: MenuSubmenu | undefined;
|
|
25
|
+
}): MenuEntry[];
|
|
26
|
+
/** The pointer leaves a row for its menu, dropping CSS :hover; wrap openMenu here
|
|
27
|
+
* for an `active` flag that keeps the row lit while its menu is open. */
|
|
28
|
+
export declare function useRowMenuActive(openMenu: OpenMenu): {
|
|
29
|
+
active: boolean;
|
|
30
|
+
openMenu: OpenMenu;
|
|
31
|
+
};
|
|
32
|
+
/** Opens the row's menu on a right-click. Pass a function to build a large
|
|
33
|
+
* list's menus only when one opens, not on every render. */
|
|
34
|
+
export declare function rowContextMenuProps(openMenu: OpenMenu, entries: MenuEntry[] | (() => MenuEntry[])): {
|
|
35
|
+
onContextMenu: (e: ReactMouseEvent) => void;
|
|
36
|
+
};
|
|
37
|
+
export interface CopyFields {
|
|
38
|
+
name?: string | null | undefined;
|
|
39
|
+
/** Overrides the "name" label (raw, pre-translated) for entities whose primary field isn't a name, e.g. "domain". */
|
|
40
|
+
nameLabel?: string;
|
|
41
|
+
email?: string | null | undefined;
|
|
42
|
+
username?: string | null | undefined;
|
|
43
|
+
uid?: string | number | null | undefined;
|
|
44
|
+
id?: string | null | undefined;
|
|
45
|
+
url?: string | null | undefined;
|
|
46
|
+
extra?: {
|
|
47
|
+
label: string;
|
|
48
|
+
value?: string | null | undefined;
|
|
49
|
+
icon?: ReactNode;
|
|
50
|
+
}[] | undefined;
|
|
51
|
+
}
|
|
52
|
+
export type CopySubmenu = (fields: CopyFields) => MenuSubmenu;
|
|
53
|
+
/** Returns a builder for the Copy submenu, labeled from the provider's strings. */
|
|
54
|
+
export declare function useCopySubmenu(): CopySubmenu;
|
|
55
|
+
/** Opens a row's menu under itself. Shows on the row's hover or focus, and
|
|
56
|
+
* stays while its menu is `open`, though the pointer has left the row. */
|
|
57
|
+
export declare function MoreButton({ onOpen, open, visible, className, }: {
|
|
58
|
+
onOpen: (button: HTMLElement) => void;
|
|
59
|
+
open?: boolean;
|
|
60
|
+
/** Shows at rest too. */
|
|
61
|
+
visible?: boolean;
|
|
62
|
+
className?: string | undefined;
|
|
63
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { BsThreeDots } from "../icons/bs/BsThreeDots.js";
|
|
2
|
+
import { FaKey } from "../icons/fa/FaKey.js";
|
|
3
|
+
import { FaLink } from "../icons/fa/FaLink.js";
|
|
4
|
+
import { FaUser } from "../icons/fa/FaUser.js";
|
|
5
|
+
import { FiCopy } from "../icons/fi/FiCopy.js";
|
|
6
|
+
import { HiOutlineClipboardCopy } from "../icons/hi/HiOutlineClipboardCopy.js";
|
|
7
|
+
import { LuIdCard } from "../icons/lu/LuIdCard.js";
|
|
8
|
+
import { LuMail } from "../icons/lu/LuMail.js";
|
|
9
|
+
import { useStrings } from "../components/Provider.js";
|
|
10
|
+
import { clsx } from "clsx";
|
|
11
|
+
import { jsx } from "react/jsx-runtime";
|
|
12
|
+
import { useCallback, useState } from "react";
|
|
13
|
+
//#region src/list/rowMenu.tsx
|
|
14
|
+
/** Assembles a row's context menu in the shared order: leading link(s) → middle
|
|
15
|
+
* actions → extra items → Copy submenu → trailing (destructive) actions last. */
|
|
16
|
+
function assembleRowMenu({ lead = [], actions, exclude, order, trailing = ["delete"], extra = [], copy }) {
|
|
17
|
+
const trailingSet = new Set(trailing);
|
|
18
|
+
const excludeSet = new Set(exclude);
|
|
19
|
+
let middle = actions.filter((a) => !trailingSet.has(a.key) && !excludeSet.has(a.key));
|
|
20
|
+
if (order) {
|
|
21
|
+
const byKey = new Map(middle.map((a) => [a.key, a]));
|
|
22
|
+
middle = order.map((key) => byKey.get(key)).filter((a) => a !== void 0);
|
|
23
|
+
}
|
|
24
|
+
const trailingItems = trailing.map((key) => actions.find((a) => a.key === key)).filter((a) => a !== void 0);
|
|
25
|
+
return [
|
|
26
|
+
...lead,
|
|
27
|
+
...middle,
|
|
28
|
+
...extra,
|
|
29
|
+
...copy ? [copy] : [],
|
|
30
|
+
...trailingItems
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
/** The pointer leaves a row for its menu, dropping CSS :hover; wrap openMenu here
|
|
34
|
+
* for an `active` flag that keeps the row lit while its menu is open. */
|
|
35
|
+
function useRowMenuActive(openMenu) {
|
|
36
|
+
const [active, setActive] = useState(false);
|
|
37
|
+
return {
|
|
38
|
+
active,
|
|
39
|
+
openMenu: useCallback((at, items, options) => {
|
|
40
|
+
setActive(true);
|
|
41
|
+
openMenu(at, items, {
|
|
42
|
+
...options,
|
|
43
|
+
onClose: () => {
|
|
44
|
+
setActive(false);
|
|
45
|
+
options?.onClose?.();
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}, [openMenu])
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Opens the row's menu on a right-click. Pass a function to build a large
|
|
52
|
+
* list's menus only when one opens, not on every render. */
|
|
53
|
+
function rowContextMenuProps(openMenu, entries) {
|
|
54
|
+
return { onContextMenu: (e) => {
|
|
55
|
+
const items = typeof entries === "function" ? entries() : entries;
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
if (items.length > 0) e.stopPropagation();
|
|
58
|
+
openMenu(e, items);
|
|
59
|
+
} };
|
|
60
|
+
}
|
|
61
|
+
/** Returns a builder for the Copy submenu, labeled from the provider's strings. */
|
|
62
|
+
function useCopySubmenu() {
|
|
63
|
+
const { list: t } = useStrings();
|
|
64
|
+
return useCallback(({ name, nameLabel, email, username, uid, id, url, extra }) => {
|
|
65
|
+
const fields = [
|
|
66
|
+
{
|
|
67
|
+
label: nameLabel ?? t.labelName,
|
|
68
|
+
value: name,
|
|
69
|
+
icon: /* @__PURE__ */ jsx(FiCopy, {})
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
label: t.labelEmail,
|
|
73
|
+
value: email,
|
|
74
|
+
icon: /* @__PURE__ */ jsx(LuMail, {})
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
label: t.labelUsername,
|
|
78
|
+
value: username,
|
|
79
|
+
icon: /* @__PURE__ */ jsx(FaUser, {})
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
label: t.labelUid,
|
|
83
|
+
value: uid === null || uid === void 0 ? null : String(uid),
|
|
84
|
+
icon: /* @__PURE__ */ jsx(FaKey, {})
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
label: t.labelId,
|
|
88
|
+
value: id,
|
|
89
|
+
icon: /* @__PURE__ */ jsx(LuIdCard, {})
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
label: t.labelUrl,
|
|
93
|
+
value: url,
|
|
94
|
+
icon: /* @__PURE__ */ jsx(FaLink, {})
|
|
95
|
+
},
|
|
96
|
+
...(extra ?? []).map((e) => ({
|
|
97
|
+
label: e.label,
|
|
98
|
+
value: e.value,
|
|
99
|
+
icon: e.icon ?? /* @__PURE__ */ jsx(FiCopy, {})
|
|
100
|
+
}))
|
|
101
|
+
];
|
|
102
|
+
return {
|
|
103
|
+
label: t.copyMenu,
|
|
104
|
+
icon: /* @__PURE__ */ jsx(HiOutlineClipboardCopy, {}),
|
|
105
|
+
items: fields.flatMap(({ label, value, icon }) => value ? [{
|
|
106
|
+
label: t.copy(label),
|
|
107
|
+
icon,
|
|
108
|
+
copy: {
|
|
109
|
+
text: value,
|
|
110
|
+
label
|
|
111
|
+
}
|
|
112
|
+
}] : [])
|
|
113
|
+
};
|
|
114
|
+
}, [t]);
|
|
115
|
+
}
|
|
116
|
+
/** Opens a row's menu under itself. Shows on the row's hover or focus, and
|
|
117
|
+
* stays while its menu is `open`, though the pointer has left the row. */
|
|
118
|
+
function MoreButton({ onOpen, open = false, visible = open, className }) {
|
|
119
|
+
const { list: t } = useStrings();
|
|
120
|
+
return /* @__PURE__ */ jsx("button", {
|
|
121
|
+
type: "button",
|
|
122
|
+
"aria-label": t.moreActions,
|
|
123
|
+
"aria-haspopup": "menu",
|
|
124
|
+
"aria-expanded": open,
|
|
125
|
+
onClick: (e) => {
|
|
126
|
+
e.stopPropagation();
|
|
127
|
+
onOpen(e.currentTarget);
|
|
128
|
+
},
|
|
129
|
+
className: clsx("rounded p-1 cursor-pointer text-(--theme-muted-text-color) transition-colors hover:bg-(--theme-muted-panel-bg) hover:text-(--theme-app) focus-visible:opacity-100", visible ? "opacity-100" : "opacity-0 group-hover:opacity-100", className),
|
|
130
|
+
children: /* @__PURE__ */ jsx(BsThreeDots, { className: "h-4 w-4" })
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
//#endregion
|
|
134
|
+
export { MoreButton, assembleRowMenu, rowContextMenuProps, useCopySubmenu, useRowMenuActive };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { useNotify, useOptionalWorkflowEngine, useStrings } from "../components/Provider.js";
|
|
2
1
|
import { FaArrowDown } from "../icons/fa/FaArrowDown.js";
|
|
3
2
|
import { FaArrowUp } from "../icons/fa/FaArrowUp.js";
|
|
4
3
|
import { FaCheck } from "../icons/fa/FaCheck.js";
|
|
@@ -10,21 +9,22 @@ import { FiClock } from "../icons/fi/FiClock.js";
|
|
|
10
9
|
import { FiCopy } from "../icons/fi/FiCopy.js";
|
|
11
10
|
import { FiX } from "../icons/fi/FiX.js";
|
|
12
11
|
import { LuChevronRight } from "../icons/lu/LuChevronRight.js";
|
|
13
|
-
import {
|
|
12
|
+
import { useNotify, useOptionalWorkflowEngine, useStrings } from "../components/Provider.js";
|
|
13
|
+
import { InfoTip } from "../components/InfoTip.js";
|
|
14
14
|
import { highlightSegments, parseAnsiSegments, plainSegments } from "./segments.js";
|
|
15
|
-
import
|
|
16
|
-
import { Fragment,
|
|
17
|
-
import { Fragment as Fragment$1,
|
|
15
|
+
import { clsx } from "clsx";
|
|
16
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
17
|
+
import { Fragment as Fragment$1, memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
18
18
|
import { DateTime } from "luxon";
|
|
19
19
|
//#region src/logviewer/LogViewer.tsx
|
|
20
20
|
function LogSegments({ segments }) {
|
|
21
21
|
return segments.map((segment, i) => segment.highlighted ? /* @__PURE__ */ jsx("mark", {
|
|
22
|
-
className:
|
|
22
|
+
className: clsx("search-highlight", segment.className),
|
|
23
23
|
children: segment.content
|
|
24
24
|
}, i) : segment.className ? /* @__PURE__ */ jsx("span", {
|
|
25
25
|
className: segment.className,
|
|
26
26
|
children: segment.content
|
|
27
|
-
}, i) : /* @__PURE__ */ jsx(Fragment, { children: segment.content }, i));
|
|
27
|
+
}, i) : /* @__PURE__ */ jsx(Fragment$1, { children: segment.content }, i));
|
|
28
28
|
}
|
|
29
29
|
var LogLine = memo(function LogLine({ index, segments, lineNumbers, isSelected, lineHeight, onLineClick, searchTerm, command, groupDepth = 0, isGroupCollapsed, onGroupToggle, annotationLabels }) {
|
|
30
30
|
const displaySegments = useMemo(() => highlightSegments(command?.message ? plainSegments(command.message) : segments, searchTerm), [
|
|
@@ -67,7 +67,7 @@ var LogLine = memo(function LogLine({ index, segments, lineNumbers, isSelected,
|
|
|
67
67
|
return /* @__PURE__ */ jsxs("div", {
|
|
68
68
|
"data-line-number": index + 1,
|
|
69
69
|
...groupToggleProps,
|
|
70
|
-
className:
|
|
70
|
+
className: clsx("flex items-start text-sm font-mono group", isSelected ? "bg-(--theme-link)/15" : "hover:bg-(--theme-hover)", "text-(--theme-app)", command?.type === "error" && "bg-red-500/10", command?.type === "warning" && "bg-yellow-500/10", command?.type === "notice" && "bg-blue-500/10", command?.type === "debug" && "opacity-60", command?.type === "group" && "bg-(--theme-hover) cursor-pointer"),
|
|
71
71
|
style: {
|
|
72
72
|
minHeight: `${lineHeight}px`,
|
|
73
73
|
lineHeight: `${lineHeight}px`,
|
|
@@ -79,10 +79,10 @@ var LogLine = memo(function LogLine({ index, segments, lineNumbers, isSelected,
|
|
|
79
79
|
e.stopPropagation();
|
|
80
80
|
onLineClick(index + 1, e);
|
|
81
81
|
},
|
|
82
|
-
className:
|
|
82
|
+
className: clsx("inline-flex items-center justify-end w-14 pr-3 shrink-0 cursor-pointer select-none", "hover:underline hover:text-(--theme-link) transition-colors", "text-(--theme-muted-text-color)", isSelected && "text-(--theme-link)"),
|
|
83
83
|
children: index + 1
|
|
84
84
|
}), /* @__PURE__ */ jsxs("pre", {
|
|
85
|
-
className:
|
|
85
|
+
className: clsx("grow text-left whitespace-pre m-0 py-0.5 pr-2 flex items-center", lineNumbers && "pl-2 border-l border-(--theme-border)", command?.type === "error" && "border-l-red-500 border-l-2", command?.type === "warning" && "border-l-yellow-500 border-l-2", command?.type === "notice" && "border-l-blue-500 border-l-2", command?.type === "group" && "font-bold"),
|
|
86
86
|
children: [
|
|
87
87
|
command?.type === "group" && /* @__PURE__ */ jsx("span", {
|
|
88
88
|
className: "mr-1 shrink-0 inline-flex items-center",
|
|
@@ -106,9 +106,9 @@ function validateTimeRange(from, to) {
|
|
|
106
106
|
}
|
|
107
107
|
var TopPaginationBanner = memo(function TopPaginationBanner({ endOfLog, loadingTop, onLoadOlder }) {
|
|
108
108
|
const { logviewer: t } = useStrings();
|
|
109
|
-
const baseCx =
|
|
109
|
+
const baseCx = clsx("flex items-center justify-center gap-2 h-7 text-xs font-mono select-none", "text-[var(--theme-muted-text-color)]", "border-b border-[var(--theme-border)]");
|
|
110
110
|
if (endOfLog) return /* @__PURE__ */ jsx("div", {
|
|
111
|
-
className:
|
|
111
|
+
className: clsx(baseCx, "opacity-70"),
|
|
112
112
|
children: t.beginningOfLog
|
|
113
113
|
});
|
|
114
114
|
if (loadingTop) return /* @__PURE__ */ jsxs("div", {
|
|
@@ -121,7 +121,7 @@ var TopPaginationBanner = memo(function TopPaginationBanner({ endOfLog, loadingT
|
|
|
121
121
|
return /* @__PURE__ */ jsx("button", {
|
|
122
122
|
type: "button",
|
|
123
123
|
onClick: onLoadOlder,
|
|
124
|
-
className:
|
|
124
|
+
className: clsx(baseCx, "w-full hover:text-[var(--theme-app)] hover:bg-[var(--theme-hover)] transition-colors"),
|
|
125
125
|
children: t.loadOlderEntries
|
|
126
126
|
});
|
|
127
127
|
});
|
|
@@ -516,7 +516,7 @@ function LogViewer({ log, height = "unset", width, roundedBottom = false, lineNu
|
|
|
516
516
|
const visibleLogs = inline ? parsedLog : parsedLog.slice(visibleStart, Math.min(parsedLog.length, visibleEnd));
|
|
517
517
|
return /* @__PURE__ */ jsxs("div", {
|
|
518
518
|
"data-testid": "logviewer-container",
|
|
519
|
-
className:
|
|
519
|
+
className: clsx("flex flex-col grow", roundedBottom && "rounded-lg"),
|
|
520
520
|
style: !fullscreen ? {
|
|
521
521
|
height,
|
|
522
522
|
width
|
|
@@ -530,14 +530,14 @@ function LogViewer({ log, height = "unset", width, roundedBottom = false, lineNu
|
|
|
530
530
|
},
|
|
531
531
|
children: [
|
|
532
532
|
/* @__PURE__ */ jsxs("div", {
|
|
533
|
-
className:
|
|
533
|
+
className: clsx("flex select-none items-center gap-x-2 p-2", inline ? "bg-[var(--theme-panel-bg)] border-b border-[var(--theme-border)]" : "theme-panel"),
|
|
534
534
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
535
|
-
className:
|
|
535
|
+
className: clsx("w-full flex flex-row gap-x-2 items-center", hideExpand && "justify-between"),
|
|
536
536
|
children: [
|
|
537
537
|
/* @__PURE__ */ jsxs("div", {
|
|
538
538
|
className: "flex gap-x-2 w-full",
|
|
539
539
|
children: [
|
|
540
|
-
!inline && /* @__PURE__ */ jsxs(Fragment
|
|
540
|
+
!inline && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("button", {
|
|
541
541
|
type: "button",
|
|
542
542
|
className: "btn btn-neutral",
|
|
543
543
|
onClick: () => {
|
|
@@ -583,7 +583,7 @@ function LogViewer({ log, height = "unset", width, roundedBottom = false, lineNu
|
|
|
583
583
|
additionalLeftBarComponents,
|
|
584
584
|
enableWorkflowCommands && /* @__PURE__ */ jsx("button", {
|
|
585
585
|
type: "button",
|
|
586
|
-
className:
|
|
586
|
+
className: clsx("btn btn-neutral", showDebug && "btn-active"),
|
|
587
587
|
onClick: () => setShowDebug((prev) => !prev),
|
|
588
588
|
children: /* @__PURE__ */ jsx("span", { children: showDebug ? t.hideDebug : t.showDebug })
|
|
589
589
|
}),
|
|
@@ -605,14 +605,14 @@ function LogViewer({ log, height = "unset", width, roundedBottom = false, lineNu
|
|
|
605
605
|
]
|
|
606
606
|
}), timeRangeOpen && /* @__PURE__ */ jsxs("div", {
|
|
607
607
|
ref: timeRangePopoverRef,
|
|
608
|
-
className:
|
|
608
|
+
className: clsx("absolute top-full left-0 mt-1 z-50 w-80 p-3 rounded-lg shadow-lg", "border border-[var(--theme-border)] bg-[var(--theme-panel-bg)]", "flex flex-col gap-y-3"),
|
|
609
609
|
children: [
|
|
610
610
|
/* @__PURE__ */ jsxs("div", {
|
|
611
611
|
className: "flex items-center gap-x-1.5",
|
|
612
612
|
children: [/* @__PURE__ */ jsx("span", {
|
|
613
613
|
className: "text-xs font-semibold text-[var(--theme-app)]",
|
|
614
614
|
children: t.filterByTimeRange
|
|
615
|
-
}), /* @__PURE__ */ jsx(
|
|
615
|
+
}), /* @__PURE__ */ jsx(InfoTip, { text: t.timeRangeHelp })]
|
|
616
616
|
}),
|
|
617
617
|
/* @__PURE__ */ jsxs("label", {
|
|
618
618
|
className: "flex flex-col gap-y-1",
|
|
@@ -678,13 +678,13 @@ function LogViewer({ log, height = "unset", width, roundedBottom = false, lineNu
|
|
|
678
678
|
}),
|
|
679
679
|
/* @__PURE__ */ jsxs("a", {
|
|
680
680
|
href: logUrl,
|
|
681
|
-
className:
|
|
681
|
+
className: clsx(!logUrl && "disabled", "btn btn-neutral"),
|
|
682
682
|
download: true,
|
|
683
683
|
children: [/* @__PURE__ */ jsx(FaCloudDownloadAlt, {}), /* @__PURE__ */ jsx("span", { children: t.download })]
|
|
684
684
|
}),
|
|
685
685
|
/* @__PURE__ */ jsxs("button", {
|
|
686
686
|
type: "button",
|
|
687
|
-
className:
|
|
687
|
+
className: clsx("btn btn-neutral", hideExpand && "hidden"),
|
|
688
688
|
onClick: () => setFullscreen((prev) => !prev),
|
|
689
689
|
children: [/* @__PURE__ */ jsx(ExpandButtonIcon, {}), /* @__PURE__ */ jsx("span", { children: expandButtonText })]
|
|
690
690
|
})
|
|
@@ -694,7 +694,7 @@ function LogViewer({ log, height = "unset", width, roundedBottom = false, lineNu
|
|
|
694
694
|
/* @__PURE__ */ jsxs("div", {
|
|
695
695
|
"data-testid": "logviewer",
|
|
696
696
|
role: "none",
|
|
697
|
-
className:
|
|
697
|
+
className: clsx(roundedBottom && "rounded-b-lg", "w-full overflow-x-auto", !inline && "h-full grow overflow-y-auto", !inline && "bg-(--theme-muted-panel-bg)", contentClassName),
|
|
698
698
|
style: inline ? void 0 : {
|
|
699
699
|
overflowY: "auto",
|
|
700
700
|
position: "relative",
|
|
@@ -732,19 +732,19 @@ function LogViewer({ log, height = "unset", width, roundedBottom = false, lineNu
|
|
|
732
732
|
highlightCopyPosition && highlightedText && /* @__PURE__ */ jsx("button", {
|
|
733
733
|
type: "button",
|
|
734
734
|
"data-highlight-copy-button": true,
|
|
735
|
-
className:
|
|
735
|
+
className: clsx("fixed z-[10000] flex items-center gap-1 px-2 py-1.5 text-xs font-medium", "rounded-md shadow-lg border cursor-pointer transition-colors duration-150", "bg-(--theme-panel-bg) border-(--theme-border) hover:bg-(--theme-hover) text-(--theme-app)"),
|
|
736
736
|
style: {
|
|
737
737
|
left: highlightCopyPosition.x,
|
|
738
738
|
top: highlightCopyPosition.y + 8,
|
|
739
739
|
transform: "translateX(-50%)"
|
|
740
740
|
},
|
|
741
741
|
onClick: copyHighlightedText,
|
|
742
|
-
children: copied ? /* @__PURE__ */ jsxs(Fragment
|
|
742
|
+
children: copied ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(FaCheck, { className: "text-green-500 w-3.5 h-3.5" }), /* @__PURE__ */ jsx("span", { children: tCommon.copied })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(FiCopy, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ jsx("span", { children: tCommon.copy })] })
|
|
743
743
|
}),
|
|
744
744
|
(additionalBottomLeftBarComponents || additionalBottomRightBarComponents) && /* @__PURE__ */ jsxs("div", {
|
|
745
745
|
className: "flex theme-panel select-none items-center gap-x-2 p-2",
|
|
746
746
|
children: [/* @__PURE__ */ jsx("div", {
|
|
747
|
-
className:
|
|
747
|
+
className: clsx("w-full flex flex-row gap-x-2 items-center", hideExpand && "justify-between"),
|
|
748
748
|
children: /* @__PURE__ */ jsx("div", {
|
|
749
749
|
className: "flex gap-x-2 w-full",
|
|
750
750
|
children: additionalBottomLeftBarComponents
|