@flanksource/clicky-ui 0.3.18 → 0.3.19
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/dist/components/ComboboxMenu.cjs +5 -1
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +5 -1
- package/dist/components/ComboboxMenu.js.map +1 -1
- package/dist/components/EndpointSelector.model.cjs +96 -0
- package/dist/components/EndpointSelector.model.cjs.map +1 -0
- package/dist/components/EndpointSelector.model.d.ts +2 -0
- package/dist/components/EndpointSelector.model.d.ts.map +1 -1
- package/dist/components/EndpointSelector.model.js +96 -0
- package/dist/components/EndpointSelector.model.js.map +1 -0
- package/dist/components/FilterBar.cjs +52 -2
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +20 -2
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +52 -2
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/JSONPathField.cjs +87 -66
- package/dist/components/JSONPathField.cjs.map +1 -1
- package/dist/components/JSONPathField.d.ts +26 -9
- package/dist/components/JSONPathField.d.ts.map +1 -1
- package/dist/components/JSONPathField.js +88 -67
- package/dist/components/JSONPathField.js.map +1 -1
- package/dist/components/JSONPathPlayground.cjs +225 -0
- package/dist/components/JSONPathPlayground.cjs.map +1 -0
- package/dist/components/JSONPathPlayground.d.ts +59 -0
- package/dist/components/JSONPathPlayground.d.ts.map +1 -0
- package/dist/components/JSONPathPlayground.js +225 -0
- package/dist/components/JSONPathPlayground.js.map +1 -0
- package/dist/components/OnePasswordSelector.cjs +178 -0
- package/dist/components/OnePasswordSelector.cjs.map +1 -0
- package/dist/components/OnePasswordSelector.d.ts +8 -0
- package/dist/components/OnePasswordSelector.d.ts.map +1 -0
- package/dist/components/OnePasswordSelector.js +178 -0
- package/dist/components/OnePasswordSelector.js.map +1 -0
- package/dist/components/OnePasswordSelector.model.cjs +31 -0
- package/dist/components/OnePasswordSelector.model.cjs.map +1 -0
- package/dist/components/OnePasswordSelector.model.d.ts +27 -0
- package/dist/components/OnePasswordSelector.model.d.ts.map +1 -0
- package/dist/components/OnePasswordSelector.model.js +31 -0
- package/dist/components/OnePasswordSelector.model.js.map +1 -0
- package/dist/components/SecretFormField.cjs +142 -0
- package/dist/components/SecretFormField.cjs.map +1 -0
- package/dist/components/SecretFormField.d.ts +9 -0
- package/dist/components/SecretFormField.d.ts.map +1 -0
- package/dist/components/SecretFormField.js +142 -0
- package/dist/components/SecretFormField.js.map +1 -0
- package/dist/components/SecretKeySelector.cjs +20 -14
- package/dist/components/SecretKeySelector.cjs.map +1 -1
- package/dist/components/SecretKeySelector.d.ts +4 -1
- package/dist/components/SecretKeySelector.d.ts.map +1 -1
- package/dist/components/SecretKeySelector.js +20 -14
- package/dist/components/SecretKeySelector.js.map +1 -1
- package/dist/components/TreePickerField.cjs +55 -29
- package/dist/components/TreePickerField.cjs.map +1 -1
- package/dist/components/TreePickerField.d.ts +10 -1
- package/dist/components/TreePickerField.d.ts.map +1 -1
- package/dist/components/TreePickerField.js +56 -30
- package/dist/components/TreePickerField.js.map +1 -1
- package/dist/components/combobox-types.d.ts +9 -0
- package/dist/components/combobox-types.d.ts.map +1 -1
- package/dist/components/filter-bar-utils.cjs +7 -0
- package/dist/components/filter-bar-utils.cjs.map +1 -1
- package/dist/components/filter-bar-utils.d.ts.map +1 -1
- package/dist/components/filter-bar-utils.js +7 -0
- package/dist/components/filter-bar-utils.js.map +1 -1
- package/dist/components/jotai-bindings-core.cjs.map +1 -1
- package/dist/components/jotai-bindings-core.d.ts +4 -1
- package/dist/components/jotai-bindings-core.d.ts.map +1 -1
- package/dist/components/jotai-bindings-core.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +2 -1
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +2 -1
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-types.d.ts +9 -0
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/jsonPathTree.cjs +189 -0
- package/dist/components/jsonPathTree.cjs.map +1 -0
- package/dist/components/jsonPathTree.d.ts +92 -0
- package/dist/components/jsonPathTree.d.ts.map +1 -0
- package/dist/components/jsonPathTree.js +189 -0
- package/dist/components/jsonPathTree.js.map +1 -0
- package/dist/components/secret-form-extension.cjs +30 -0
- package/dist/components/secret-form-extension.cjs.map +1 -0
- package/dist/components/secret-form-extension.d.ts +23 -0
- package/dist/components/secret-form-extension.d.ts.map +1 -0
- package/dist/components/secret-form-extension.js +30 -0
- package/dist/components/secret-form-extension.js.map +1 -0
- package/dist/components.cjs +16 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +6 -0
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +16 -0
- package/dist/components.js.map +1 -1
- package/dist/data/TaskExecDetails.cjs +40 -0
- package/dist/data/TaskExecDetails.cjs.map +1 -0
- package/dist/data/TaskExecDetails.d.ts +5 -0
- package/dist/data/TaskExecDetails.d.ts.map +1 -0
- package/dist/data/TaskExecDetails.js +40 -0
- package/dist/data/TaskExecDetails.js.map +1 -0
- package/dist/data/TaskProgress.cjs +9 -3
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +9 -3
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +12 -1
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/TreeNode.cjs +3 -0
- package/dist/data/TreeNode.cjs.map +1 -1
- package/dist/data/TreeNode.d.ts.map +1 -1
- package/dist/data/TreeNode.js +3 -0
- package/dist/data/TreeNode.js.map +1 -1
- package/dist/data/data-table-filter-values.cjs +20 -0
- package/dist/data/data-table-filter-values.cjs.map +1 -1
- package/dist/data/data-table-filter-values.d.ts +16 -0
- package/dist/data/data-table-filter-values.d.ts.map +1 -1
- package/dist/data/data-table-filter-values.js +20 -0
- package/dist/data/data-table-filter-values.js.map +1 -1
- package/dist/data/data-table-server-filters.cjs +23 -29
- package/dist/data/data-table-server-filters.cjs.map +1 -1
- package/dist/data/data-table-server-filters.d.ts.map +1 -1
- package/dist/data/data-table-server-filters.js +21 -27
- package/dist/data/data-table-server-filters.js.map +1 -1
- package/dist/data/query-browser/QueryBrowser.cjs +129 -157
- package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.d.ts +1 -71
- package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.editor.cjs +88 -0
- package/dist/data/query-browser/QueryBrowser.editor.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowser.editor.d.ts +12 -0
- package/dist/data/query-browser/QueryBrowser.editor.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowser.editor.js +88 -0
- package/dist/data/query-browser/QueryBrowser.editor.js.map +1 -0
- package/dist/data/query-browser/QueryBrowser.js +130 -158
- package/dist/data/query-browser/QueryBrowser.js.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.cjs +11 -0
- package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowser.types.d.ts +92 -0
- package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowser.types.js +11 -0
- package/dist/data/query-browser/QueryBrowser.types.js.map +1 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.cjs +56 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.d.ts +5 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.js +56 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.js.map +1 -0
- package/dist/data/query-browser/QueryBrowserResults.cjs +80 -0
- package/dist/data/query-browser/QueryBrowserResults.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowserResults.d.ts +16 -0
- package/dist/data/query-browser/QueryBrowserResults.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowserResults.js +80 -0
- package/dist/data/query-browser/QueryBrowserResults.js.map +1 -0
- package/dist/data/query-browser/index.d.ts +2 -1
- package/dist/data/query-browser/index.d.ts.map +1 -1
- package/dist/data/task-exec-details.cjs +9 -0
- package/dist/data/task-exec-details.cjs.map +1 -0
- package/dist/data/task-exec-details.d.ts +3 -0
- package/dist/data/task-exec-details.d.ts.map +1 -0
- package/dist/data/task-exec-details.js +9 -0
- package/dist/data/task-exec-details.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +2 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +1 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +2 -0
- package/dist/data.js.map +1 -1
- package/dist/index.cjs +18 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/dist/rpc/FilterForm.cjs +20 -0
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.js +20 -0
- package/dist/rpc/FilterForm.js.map +1 -1
- package/dist/rpc/formMetadata.cjs +34 -0
- package/dist/rpc/formMetadata.cjs.map +1 -1
- package/dist/rpc/formMetadata.d.ts.map +1 -1
- package/dist/rpc/formMetadata.js +35 -1
- package/dist/rpc/formMetadata.js.map +1 -1
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +9 -1
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createElement } from "react";
|
|
2
|
+
import { SecretFormField } from "./SecretFormField.js";
|
|
3
|
+
function createSecretFormExtensions(options) {
|
|
4
|
+
const post = (field, nodes, context) => {
|
|
5
|
+
const component = field.schema["x-clicky-component"];
|
|
6
|
+
if (component !== "k8s-secret-selector" && component !== "k8s-url-selector") {
|
|
7
|
+
return nodes;
|
|
8
|
+
}
|
|
9
|
+
return {
|
|
10
|
+
label: nodes.label,
|
|
11
|
+
value: createElement(SecretFormField, {
|
|
12
|
+
...options,
|
|
13
|
+
field,
|
|
14
|
+
namespace: namespaceFor(options, context),
|
|
15
|
+
allowWorkload: component === "k8s-url-selector"
|
|
16
|
+
})
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
return { post: [post] };
|
|
20
|
+
}
|
|
21
|
+
function namespaceFor(options, context) {
|
|
22
|
+
var _a;
|
|
23
|
+
if (options.getNamespace) return options.getNamespace(context == null ? void 0 : context.rootValue);
|
|
24
|
+
const namespace = (_a = context == null ? void 0 : context.rootValue) == null ? void 0 : _a.namespace;
|
|
25
|
+
return typeof namespace === "string" ? namespace : "";
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
createSecretFormExtensions
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=secret-form-extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-form-extension.js","sources":["../../src/components/secret-form-extension.ts"],"sourcesContent":["import { createElement } from \"react\";\nimport { SecretFormField } from \"./SecretFormField\";\nimport type {\n PostExtension,\n PostExtensionContext,\n} from \"./json-schema-form-types\";\nimport type { OnePasswordLoaders } from \"./OnePasswordSelector.model\";\nimport type {\n KeyPreview,\n SecretKind,\n SecretResource,\n SecretValueSource,\n} from \"./SecretKeySelector\";\nimport type {\n WorkloadKind,\n WorkloadResource,\n} from \"./workload-picker-utils\";\n\nexport type SecretFormLoaders = {\n loadResources: (\n kind: SecretKind,\n namespace: string,\n ) => Promise<SecretResource[]>;\n loadKeyPreview: (\n kind: SecretKind,\n name: string,\n namespace: string,\n ) => Promise<KeyPreview[]>;\n loadServiceAccounts: (namespace: string) => Promise<SecretResource[]>;\n loadOnePasswordVaults: OnePasswordLoaders[\"loadVaults\"];\n loadOnePasswordItems: OnePasswordLoaders[\"loadItems\"];\n loadOnePasswordFields: OnePasswordLoaders[\"loadFields\"];\n loadWorkloads: (\n namespace: string,\n kinds: WorkloadKind[],\n ) => Promise<Record<WorkloadKind, WorkloadResource[]>>;\n};\n\nexport type SecretFormExtensionOptions = {\n loaders: SecretFormLoaders;\n secretSources?: SecretValueSource[];\n urlSources?: SecretValueSource[];\n getNamespace?: (rootValue: Record<string, unknown> | undefined) => string;\n};\n\nexport function createSecretFormExtensions(\n options: SecretFormExtensionOptions,\n): { post: PostExtension[] } {\n const post: PostExtension = (field, nodes, context) => {\n const component = field.schema[\"x-clicky-component\"];\n if (\n component !== \"k8s-secret-selector\" &&\n component !== \"k8s-url-selector\"\n ) {\n return nodes;\n }\n return {\n label: nodes.label,\n value: createElement(SecretFormField, {\n ...options,\n field,\n namespace: namespaceFor(options, context),\n allowWorkload: component === \"k8s-url-selector\",\n }),\n };\n };\n return { post: [post] };\n}\n\nfunction namespaceFor(\n options: SecretFormExtensionOptions,\n context: PostExtensionContext | undefined,\n): string {\n if (options.getNamespace) return options.getNamespace(context?.rootValue);\n const namespace = context?.rootValue?.namespace;\n return typeof namespace === \"string\" ? namespace : \"\";\n}\n"],"names":[],"mappings":";;AA6CO,SAAS,2BACd,SAC2B;AAC3B,QAAM,OAAsB,CAAC,OAAO,OAAO,YAAY;AACrD,UAAM,YAAY,MAAM,OAAO,oBAAoB;AACnD,QACE,cAAc,yBACd,cAAc,oBACd;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,OAAO,MAAM;AAAA,MACb,OAAO,cAAc,iBAAiB;AAAA,QACpC,GAAG;AAAA,QACH;AAAA,QACA,WAAW,aAAa,SAAS,OAAO;AAAA,QACxC,eAAe,cAAc;AAAA,MAAA,CAC9B;AAAA,IAAA;AAAA,EAEL;AACA,SAAO,EAAE,MAAM,CAAC,IAAI,EAAA;AACtB;AAEA,SAAS,aACP,SACA,SACQ;;AACR,MAAI,QAAQ,aAAc,QAAO,QAAQ,aAAa,mCAAS,SAAS;AACxE,QAAM,aAAY,wCAAS,cAAT,mBAAoB;AACtC,SAAO,OAAO,cAAc,WAAW,YAAY;AACrD;"}
|
package/dist/components.cjs
CHANGED
|
@@ -8,6 +8,8 @@ const IconButton = require("./components/IconButton.cjs");
|
|
|
8
8
|
const SplitButton = require("./components/SplitButton.cjs");
|
|
9
9
|
const InputField = require("./components/InputField.cjs");
|
|
10
10
|
const JSONPathField = require("./components/JSONPathField.cjs");
|
|
11
|
+
const JSONPathPlayground = require("./components/JSONPathPlayground.cjs");
|
|
12
|
+
const jsonPathTree = require("./components/jsonPathTree.cjs");
|
|
11
13
|
const SegmentedControl = require("./components/SegmentedControl.cjs");
|
|
12
14
|
const TriStateToggle = require("./components/TriStateToggle.cjs");
|
|
13
15
|
const triState = require("./components/tri-state.cjs");
|
|
@@ -30,11 +32,15 @@ const useForm = require("./components/use-form.cjs");
|
|
|
30
32
|
const TreePickerField = require("./components/TreePickerField.cjs");
|
|
31
33
|
const WorkloadPicker = require("./components/WorkloadPicker.cjs");
|
|
32
34
|
const EndpointSelector = require("./components/EndpointSelector.cjs");
|
|
35
|
+
const EndpointSelector_model = require("./components/EndpointSelector.model.cjs");
|
|
33
36
|
const endpointPort = require("./components/endpoint-port.cjs");
|
|
34
37
|
const NamespacePicker = require("./components/NamespacePicker.cjs");
|
|
35
38
|
const workloadPickerUtils = require("./components/workload-picker-utils.cjs");
|
|
36
39
|
const SecretKeySelector = require("./components/SecretKeySelector.cjs");
|
|
37
40
|
const SecretKeySelector_model = require("./components/SecretKeySelector.model.cjs");
|
|
41
|
+
const OnePasswordSelector = require("./components/OnePasswordSelector.cjs");
|
|
42
|
+
const OnePasswordSelector_model = require("./components/OnePasswordSelector.model.cjs");
|
|
43
|
+
const secretFormExtension = require("./components/secret-form-extension.cjs");
|
|
38
44
|
const themeSwitcher = require("./components/theme-switcher.cjs");
|
|
39
45
|
const densitySwitcher = require("./components/density-switcher.cjs");
|
|
40
46
|
const iconMenuPicker = require("./components/icon-menu-picker.cjs");
|
|
@@ -81,6 +87,10 @@ exports.IconButton = IconButton.IconButton;
|
|
|
81
87
|
exports.SplitButton = SplitButton.SplitButton;
|
|
82
88
|
exports.InputField = InputField.InputField;
|
|
83
89
|
exports.JSONPathField = JSONPathField.JSONPathField;
|
|
90
|
+
exports.JSONPathPlayground = JSONPathPlayground.JSONPathPlayground;
|
|
91
|
+
exports.buildJSONPathNode = jsonPathTree.buildJSONPathNode;
|
|
92
|
+
exports.createLazyJSONPathTree = jsonPathTree.createLazyJSONPathTree;
|
|
93
|
+
exports.literalSegments = jsonPathTree.literalSegments;
|
|
84
94
|
exports.SegmentedControl = SegmentedControl.SegmentedControl;
|
|
85
95
|
exports.TriStateToggle = TriStateToggle.TriStateToggle;
|
|
86
96
|
exports.nextTriState = triState.nextTriState;
|
|
@@ -103,6 +113,8 @@ exports.useForm = useForm.useForm;
|
|
|
103
113
|
exports.TreePickerField = TreePickerField.TreePickerField;
|
|
104
114
|
exports.WorkloadPicker = WorkloadPicker.WorkloadPicker;
|
|
105
115
|
exports.EndpointSelector = EndpointSelector.EndpointSelector;
|
|
116
|
+
exports.parseEndpointValue = EndpointSelector_model.parseEndpointValue;
|
|
117
|
+
exports.serializeEndpointValue = EndpointSelector_model.serializeEndpointValue;
|
|
106
118
|
exports.DEFAULT_PREFERRED_ENDPOINT_PORTS = endpointPort.DEFAULT_PREFERRED_ENDPOINT_PORTS;
|
|
107
119
|
exports.preferredEndpointPort = endpointPort.preferredEndpointPort;
|
|
108
120
|
exports.NamespacePicker = NamespacePicker.NamespacePicker;
|
|
@@ -113,6 +125,10 @@ exports.workloadKey = workloadPickerUtils.workloadKey;
|
|
|
113
125
|
exports.SecretKeySelector = SecretKeySelector.SecretKeySelector;
|
|
114
126
|
exports.parseSecretRef = SecretKeySelector_model.parseSecretRef;
|
|
115
127
|
exports.serializeSecretRef = SecretKeySelector_model.serializeSecretRef;
|
|
128
|
+
exports.OnePasswordSelector = OnePasswordSelector.OnePasswordSelector;
|
|
129
|
+
exports.buildOnePasswordReference = OnePasswordSelector_model.buildOnePasswordReference;
|
|
130
|
+
exports.parseOnePasswordReference = OnePasswordSelector_model.parseOnePasswordReference;
|
|
131
|
+
exports.createSecretFormExtensions = secretFormExtension.createSecretFormExtensions;
|
|
116
132
|
exports.ThemeSwitcher = themeSwitcher.ThemeSwitcher;
|
|
117
133
|
exports.DensitySwitcher = densitySwitcher.DensitySwitcher;
|
|
118
134
|
exports.IconMenuPicker = iconMenuPicker.IconMenuPicker;
|
package/dist/components.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/components.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export { IconButton, type IconButtonProps } from './components/IconButton';
|
|
|
6
6
|
export { SplitButton, type SplitButtonProps } from './components/SplitButton';
|
|
7
7
|
export { InputField, type InputFieldProps } from './components/InputField';
|
|
8
8
|
export { JSONPathField, type JSONPathFieldProps, type JSONPathNode, } from './components/JSONPathField';
|
|
9
|
+
export { JSONPathPlayground, type JSONPathPlaygroundProps, type JSONPathEvalRequest, type JSONPathEvalResult, } from './components/JSONPathPlayground';
|
|
10
|
+
export { buildJSONPathNode, createLazyJSONPathTree, literalSegments, type LazyJSONPathTree, type LazyJSONPathTreeOptions, } from './components/jsonPathTree';
|
|
9
11
|
export { SegmentedControl, type SegmentedControlProps, type SegmentedOption, type SegmentedSize, } from './components/SegmentedControl';
|
|
10
12
|
export { TriStateToggle, type TriStateLabels, type TriStateToggleProps, } from './components/TriStateToggle';
|
|
11
13
|
export { nextTriState, type TriState } from './components/tri-state';
|
|
@@ -28,12 +30,16 @@ export { useForm, type UseFormOptions, type UseFormResult, type FieldErrors, } f
|
|
|
28
30
|
export { TreePickerField, type TreePickerFieldProps, type TreePickerTriggerProps, } from './components/TreePickerField';
|
|
29
31
|
export { WorkloadPicker, type WorkloadPickerProps, } from './components/WorkloadPicker';
|
|
30
32
|
export { EndpointSelector } from './components/EndpointSelector';
|
|
33
|
+
export { parseEndpointValue, serializeEndpointValue, } from './components/EndpointSelector.model';
|
|
31
34
|
export { DEFAULT_PREFERRED_ENDPOINT_PORTS, preferredEndpointPort, } from './components/endpoint-port';
|
|
32
35
|
export type { EndpointMode, EndpointResources, EndpointSelectorDefaults, EndpointSelectorProps, EndpointSelectorValue, EndpointTarget, EndpointUrlSelectorProps, EndpointWorkloadValue, EndpointWorkloadMode, } from './components/EndpointSelector.model';
|
|
33
36
|
export { NamespacePicker, type NamespacePickerProps, } from './components/NamespacePicker';
|
|
34
37
|
export { workloadKey, parseWorkloadKey, kindForValue, loadedWorkloads, type WorkloadKind, type WorkloadResource, type WorkloadPort, type ParsedWorkloadKey, } from './components/workload-picker-utils';
|
|
35
38
|
export { SecretKeySelector, type SecretKeySelectorProps, type SecretKind, type SecretValueSource, type SecretKeyValue, type SecretResource, type KeyPreview, } from './components/SecretKeySelector';
|
|
36
39
|
export { serializeSecretRef, parseSecretRef, } from './components/SecretKeySelector.model';
|
|
40
|
+
export { OnePasswordSelector, type OnePasswordSelectorProps, } from './components/OnePasswordSelector';
|
|
41
|
+
export { buildOnePasswordReference, parseOnePasswordReference, type OnePasswordField, type OnePasswordItem, type OnePasswordLoaders, type OnePasswordSelection, type OnePasswordVault, } from './components/OnePasswordSelector.model';
|
|
42
|
+
export { createSecretFormExtensions, type SecretFormExtensionOptions, type SecretFormLoaders, } from './components/secret-form-extension';
|
|
37
43
|
export { ThemeSwitcher, type ThemeSwitcherProps, } from './components/theme-switcher';
|
|
38
44
|
export { DensitySwitcher, type DensitySwitcherProps, } from './components/density-switcher';
|
|
39
45
|
export { IconMenuPicker, type IconMenuPickerProps, type IconMenuOption, } from './components/icon-menu-picker';
|
package/dist/components.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"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"}
|
package/dist/components.js
CHANGED
|
@@ -6,6 +6,8 @@ import { IconButton } from "./components/IconButton.js";
|
|
|
6
6
|
import { SplitButton } from "./components/SplitButton.js";
|
|
7
7
|
import { InputField } from "./components/InputField.js";
|
|
8
8
|
import { JSONPathField } from "./components/JSONPathField.js";
|
|
9
|
+
import { JSONPathPlayground } from "./components/JSONPathPlayground.js";
|
|
10
|
+
import { buildJSONPathNode, createLazyJSONPathTree, literalSegments } from "./components/jsonPathTree.js";
|
|
9
11
|
import { SegmentedControl } from "./components/SegmentedControl.js";
|
|
10
12
|
import { TriStateToggle } from "./components/TriStateToggle.js";
|
|
11
13
|
import { nextTriState } from "./components/tri-state.js";
|
|
@@ -28,11 +30,15 @@ import { useForm } from "./components/use-form.js";
|
|
|
28
30
|
import { TreePickerField } from "./components/TreePickerField.js";
|
|
29
31
|
import { WorkloadPicker } from "./components/WorkloadPicker.js";
|
|
30
32
|
import { EndpointSelector } from "./components/EndpointSelector.js";
|
|
33
|
+
import { parseEndpointValue, serializeEndpointValue } from "./components/EndpointSelector.model.js";
|
|
31
34
|
import { DEFAULT_PREFERRED_ENDPOINT_PORTS, preferredEndpointPort } from "./components/endpoint-port.js";
|
|
32
35
|
import { NamespacePicker } from "./components/NamespacePicker.js";
|
|
33
36
|
import { kindForValue, loadedWorkloads, parseWorkloadKey, workloadKey } from "./components/workload-picker-utils.js";
|
|
34
37
|
import { SecretKeySelector } from "./components/SecretKeySelector.js";
|
|
35
38
|
import { parseSecretRef, serializeSecretRef } from "./components/SecretKeySelector.model.js";
|
|
39
|
+
import { OnePasswordSelector } from "./components/OnePasswordSelector.js";
|
|
40
|
+
import { buildOnePasswordReference, parseOnePasswordReference } from "./components/OnePasswordSelector.model.js";
|
|
41
|
+
import { createSecretFormExtensions } from "./components/secret-form-extension.js";
|
|
36
42
|
import { ThemeSwitcher } from "./components/theme-switcher.js";
|
|
37
43
|
import { DensitySwitcher } from "./components/density-switcher.js";
|
|
38
44
|
import { IconMenuPicker } from "./components/icon-menu-picker.js";
|
|
@@ -100,6 +106,7 @@ export {
|
|
|
100
106
|
IconMenuPicker,
|
|
101
107
|
InputField,
|
|
102
108
|
JSONPathField,
|
|
109
|
+
JSONPathPlayground,
|
|
103
110
|
JsonSchemaForm,
|
|
104
111
|
ListMenu,
|
|
105
112
|
ListMenuActionBar,
|
|
@@ -112,6 +119,7 @@ export {
|
|
|
112
119
|
Modal,
|
|
113
120
|
MultiSelect,
|
|
114
121
|
NamespacePicker,
|
|
122
|
+
OnePasswordSelector,
|
|
115
123
|
Panel,
|
|
116
124
|
RangeSlider,
|
|
117
125
|
SearchInput,
|
|
@@ -135,16 +143,23 @@ export {
|
|
|
135
143
|
Workspace,
|
|
136
144
|
applyFilterExtensions,
|
|
137
145
|
applyPostExtensions,
|
|
146
|
+
buildJSONPathNode,
|
|
147
|
+
buildOnePasswordReference,
|
|
138
148
|
buttonVariants,
|
|
149
|
+
createLazyJSONPathTree,
|
|
150
|
+
createSecretFormExtensions,
|
|
139
151
|
effectiveProperties,
|
|
140
152
|
isOpenStringMap,
|
|
141
153
|
isTourFinished,
|
|
142
154
|
kindForValue,
|
|
155
|
+
literalSegments,
|
|
143
156
|
loadedWorkloads,
|
|
144
157
|
localStorageTourStorage,
|
|
145
158
|
matchesIf,
|
|
146
159
|
memoryTourStorage,
|
|
147
160
|
nextTriState,
|
|
161
|
+
parseEndpointValue,
|
|
162
|
+
parseOnePasswordReference,
|
|
148
163
|
parseSecretRef,
|
|
149
164
|
parseWorkloadKey,
|
|
150
165
|
preferredEndpointPort,
|
|
@@ -152,6 +167,7 @@ export {
|
|
|
152
167
|
rehydrateRefs,
|
|
153
168
|
resolveControl,
|
|
154
169
|
resolveLookupScope,
|
|
170
|
+
serializeEndpointValue,
|
|
155
171
|
serializeSecretRef,
|
|
156
172
|
templateValuePre,
|
|
157
173
|
useEscapeLayer,
|
package/dist/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const JsonView = require("./JsonView.cjs");
|
|
5
|
+
const EXEC_KEYS = /* @__PURE__ */ new Set(["command", "args", "pid", "status", "exitCode", "started", "duration"]);
|
|
6
|
+
function formatExecDuration(nanoseconds) {
|
|
7
|
+
const milliseconds = nanoseconds / 1e6;
|
|
8
|
+
if (milliseconds < 1e3) return `${Number(milliseconds.toFixed(1))}ms`;
|
|
9
|
+
const seconds = milliseconds / 1e3;
|
|
10
|
+
if (seconds < 60) return `${Number(seconds.toFixed(1))}s`;
|
|
11
|
+
const minutes = Math.floor(seconds / 60);
|
|
12
|
+
return `${minutes}m ${Number((seconds % 60).toFixed(1))}s`;
|
|
13
|
+
}
|
|
14
|
+
function TaskExecDetailsView({ details }) {
|
|
15
|
+
const argv = [details.command, ...details.args ?? []];
|
|
16
|
+
const extra = Object.fromEntries(Object.entries(details).filter(([key]) => !EXEC_KEYS.has(key)));
|
|
17
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { "aria-label": "Execution details", className: "mb-3 space-y-2 rounded-md border bg-muted/20 p-3", children: [
|
|
18
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] font-semibold uppercase tracking-wide text-muted-foreground", children: "Command and arguments" }),
|
|
19
|
+
/* @__PURE__ */ jsxRuntime.jsx("code", { className: "block overflow-x-auto whitespace-pre rounded border bg-background p-2 text-xs", children: JSON.stringify(argv) }),
|
|
20
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground", children: [
|
|
21
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: details.status }),
|
|
22
|
+
details.pid !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono text-foreground", children: [
|
|
23
|
+
"pid ",
|
|
24
|
+
details.pid
|
|
25
|
+
] }),
|
|
26
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono text-foreground", children: [
|
|
27
|
+
"exit ",
|
|
28
|
+
details.exitCode
|
|
29
|
+
] }),
|
|
30
|
+
details.duration !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatExecDuration(details.duration) }),
|
|
31
|
+
details.started && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
32
|
+
"started ",
|
|
33
|
+
details.started
|
|
34
|
+
] })
|
|
35
|
+
] }),
|
|
36
|
+
Object.keys(extra).length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded border bg-background p-2", children: /* @__PURE__ */ jsxRuntime.jsx(JsonView.JsonView, { data: extra, defaultOpenDepth: 3 }) })
|
|
37
|
+
] });
|
|
38
|
+
}
|
|
39
|
+
exports.TaskExecDetailsView = TaskExecDetailsView;
|
|
40
|
+
//# sourceMappingURL=TaskExecDetails.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskExecDetails.cjs","sources":["../../src/data/TaskExecDetails.tsx"],"sourcesContent":["import { JsonView } from \"./JsonView\";\nimport type { TaskExecDetails } from \"./TaskSnapshot\";\n\nconst EXEC_KEYS = new Set([\"command\", \"args\", \"pid\", \"status\", \"exitCode\", \"started\", \"duration\"]);\n\nfunction formatExecDuration(nanoseconds: number): string {\n const milliseconds = nanoseconds / 1_000_000;\n if (milliseconds < 1000) return `${Number(milliseconds.toFixed(1))}ms`;\n const seconds = milliseconds / 1000;\n if (seconds < 60) return `${Number(seconds.toFixed(1))}s`;\n const minutes = Math.floor(seconds / 60);\n return `${minutes}m ${Number((seconds % 60).toFixed(1))}s`;\n}\n\nexport function TaskExecDetailsView({ details }: { details: TaskExecDetails }) {\n const argv = [details.command, ...(details.args ?? [])];\n const extra = Object.fromEntries(Object.entries(details).filter(([key]) => !EXEC_KEYS.has(key)));\n\n return (\n <section aria-label=\"Execution details\" className=\"mb-3 space-y-2 rounded-md border bg-muted/20 p-3\">\n <div className=\"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Command and arguments\n </div>\n <code className=\"block overflow-x-auto whitespace-pre rounded border bg-background p-2 text-xs\">\n {JSON.stringify(argv)}\n </code>\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground\">\n <span>{details.status}</span>\n {details.pid !== undefined && <span className=\"font-mono text-foreground\">pid {details.pid}</span>}\n <span className=\"font-mono text-foreground\">exit {details.exitCode}</span>\n {details.duration !== undefined && <span>{formatExecDuration(details.duration)}</span>}\n {details.started && <span>started {details.started}</span>}\n </div>\n {Object.keys(extra).length > 0 && (\n <div className=\"rounded border bg-background p-2\">\n <JsonView data={extra} defaultOpenDepth={3} />\n </div>\n )}\n </section>\n );\n}\n"],"names":["jsxs","jsx","JsonView"],"mappings":";;;;AAGA,MAAM,YAAY,oBAAI,IAAI,CAAC,WAAW,QAAQ,OAAO,UAAU,YAAY,WAAW,UAAU,CAAC;AAEjG,SAAS,mBAAmB,aAA6B;AACvD,QAAM,eAAe,cAAc;AACnC,MAAI,eAAe,IAAM,QAAO,GAAG,OAAO,aAAa,QAAQ,CAAC,CAAC,CAAC;AAClE,QAAM,UAAU,eAAe;AAC/B,MAAI,UAAU,GAAI,QAAO,GAAG,OAAO,QAAQ,QAAQ,CAAC,CAAC,CAAC;AACtD,QAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,SAAO,GAAG,OAAO,KAAK,QAAQ,UAAU,IAAI,QAAQ,CAAC,CAAC,CAAC;AACzD;AAEO,SAAS,oBAAoB,EAAE,WAAyC;AAC7E,QAAM,OAAO,CAAC,QAAQ,SAAS,GAAI,QAAQ,QAAQ,EAAG;AACtD,QAAM,QAAQ,OAAO,YAAY,OAAO,QAAQ,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;AAE/F,SACEA,2BAAAA,KAAC,WAAA,EAAQ,cAAW,qBAAoB,WAAU,oDAChD,UAAA;AAAA,IAAAC,2BAAAA,IAAC,OAAA,EAAI,WAAU,2EAA0E,UAAA,yBAEzF;AAAA,mCACC,QAAA,EAAK,WAAU,iFACb,UAAA,KAAK,UAAU,IAAI,GACtB;AAAA,IACAD,2BAAAA,KAAC,OAAA,EAAI,WAAU,6EACb,UAAA;AAAA,MAAAC,2BAAAA,IAAC,QAAA,EAAM,kBAAQ,OAAA,CAAO;AAAA,MACrB,QAAQ,QAAQ,UAAaD,2BAAAA,KAAC,QAAA,EAAK,WAAU,6BAA4B,UAAA;AAAA,QAAA;AAAA,QAAK,QAAQ;AAAA,MAAA,GAAI;AAAA,MAC3FA,2BAAAA,KAAC,QAAA,EAAK,WAAU,6BAA4B,UAAA;AAAA,QAAA;AAAA,QAAM,QAAQ;AAAA,MAAA,GAAS;AAAA,MAClE,QAAQ,aAAa,UAAaC,2BAAAA,IAAC,UAAM,UAAA,mBAAmB,QAAQ,QAAQ,GAAE;AAAA,MAC9E,QAAQ,WAAWD,2BAAAA,KAAC,QAAA,EAAK,UAAA;AAAA,QAAA;AAAA,QAAS,QAAQ;AAAA,MAAA,EAAA,CAAQ;AAAA,IAAA,GACrD;AAAA,IACC,OAAO,KAAK,KAAK,EAAE,SAAS,KAC3BC,2BAAAA,IAAC,OAAA,EAAI,WAAU,oCACb,yCAACC,SAAAA,UAAA,EAAS,MAAM,OAAO,kBAAkB,GAAG,EAAA,CAC9C;AAAA,EAAA,GAEJ;AAEJ;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskExecDetails.d.ts","sourceRoot":"","sources":["../../src/data/TaskExecDetails.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAatD,wBAAgB,mBAAmB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,2CA0B5E"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { JsonView } from "./JsonView.js";
|
|
3
|
+
const EXEC_KEYS = /* @__PURE__ */ new Set(["command", "args", "pid", "status", "exitCode", "started", "duration"]);
|
|
4
|
+
function formatExecDuration(nanoseconds) {
|
|
5
|
+
const milliseconds = nanoseconds / 1e6;
|
|
6
|
+
if (milliseconds < 1e3) return `${Number(milliseconds.toFixed(1))}ms`;
|
|
7
|
+
const seconds = milliseconds / 1e3;
|
|
8
|
+
if (seconds < 60) return `${Number(seconds.toFixed(1))}s`;
|
|
9
|
+
const minutes = Math.floor(seconds / 60);
|
|
10
|
+
return `${minutes}m ${Number((seconds % 60).toFixed(1))}s`;
|
|
11
|
+
}
|
|
12
|
+
function TaskExecDetailsView({ details }) {
|
|
13
|
+
const argv = [details.command, ...details.args ?? []];
|
|
14
|
+
const extra = Object.fromEntries(Object.entries(details).filter(([key]) => !EXEC_KEYS.has(key)));
|
|
15
|
+
return /* @__PURE__ */ jsxs("section", { "aria-label": "Execution details", className: "mb-3 space-y-2 rounded-md border bg-muted/20 p-3", children: [
|
|
16
|
+
/* @__PURE__ */ jsx("div", { className: "text-[11px] font-semibold uppercase tracking-wide text-muted-foreground", children: "Command and arguments" }),
|
|
17
|
+
/* @__PURE__ */ jsx("code", { className: "block overflow-x-auto whitespace-pre rounded border bg-background p-2 text-xs", children: JSON.stringify(argv) }),
|
|
18
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground", children: [
|
|
19
|
+
/* @__PURE__ */ jsx("span", { children: details.status }),
|
|
20
|
+
details.pid !== void 0 && /* @__PURE__ */ jsxs("span", { className: "font-mono text-foreground", children: [
|
|
21
|
+
"pid ",
|
|
22
|
+
details.pid
|
|
23
|
+
] }),
|
|
24
|
+
/* @__PURE__ */ jsxs("span", { className: "font-mono text-foreground", children: [
|
|
25
|
+
"exit ",
|
|
26
|
+
details.exitCode
|
|
27
|
+
] }),
|
|
28
|
+
details.duration !== void 0 && /* @__PURE__ */ jsx("span", { children: formatExecDuration(details.duration) }),
|
|
29
|
+
details.started && /* @__PURE__ */ jsxs("span", { children: [
|
|
30
|
+
"started ",
|
|
31
|
+
details.started
|
|
32
|
+
] })
|
|
33
|
+
] }),
|
|
34
|
+
Object.keys(extra).length > 0 && /* @__PURE__ */ jsx("div", { className: "rounded border bg-background p-2", children: /* @__PURE__ */ jsx(JsonView, { data: extra, defaultOpenDepth: 3 }) })
|
|
35
|
+
] });
|
|
36
|
+
}
|
|
37
|
+
export {
|
|
38
|
+
TaskExecDetailsView
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=TaskExecDetails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskExecDetails.js","sources":["../../src/data/TaskExecDetails.tsx"],"sourcesContent":["import { JsonView } from \"./JsonView\";\nimport type { TaskExecDetails } from \"./TaskSnapshot\";\n\nconst EXEC_KEYS = new Set([\"command\", \"args\", \"pid\", \"status\", \"exitCode\", \"started\", \"duration\"]);\n\nfunction formatExecDuration(nanoseconds: number): string {\n const milliseconds = nanoseconds / 1_000_000;\n if (milliseconds < 1000) return `${Number(milliseconds.toFixed(1))}ms`;\n const seconds = milliseconds / 1000;\n if (seconds < 60) return `${Number(seconds.toFixed(1))}s`;\n const minutes = Math.floor(seconds / 60);\n return `${minutes}m ${Number((seconds % 60).toFixed(1))}s`;\n}\n\nexport function TaskExecDetailsView({ details }: { details: TaskExecDetails }) {\n const argv = [details.command, ...(details.args ?? [])];\n const extra = Object.fromEntries(Object.entries(details).filter(([key]) => !EXEC_KEYS.has(key)));\n\n return (\n <section aria-label=\"Execution details\" className=\"mb-3 space-y-2 rounded-md border bg-muted/20 p-3\">\n <div className=\"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Command and arguments\n </div>\n <code className=\"block overflow-x-auto whitespace-pre rounded border bg-background p-2 text-xs\">\n {JSON.stringify(argv)}\n </code>\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground\">\n <span>{details.status}</span>\n {details.pid !== undefined && <span className=\"font-mono text-foreground\">pid {details.pid}</span>}\n <span className=\"font-mono text-foreground\">exit {details.exitCode}</span>\n {details.duration !== undefined && <span>{formatExecDuration(details.duration)}</span>}\n {details.started && <span>started {details.started}</span>}\n </div>\n {Object.keys(extra).length > 0 && (\n <div className=\"rounded border bg-background p-2\">\n <JsonView data={extra} defaultOpenDepth={3} />\n </div>\n )}\n </section>\n );\n}\n"],"names":[],"mappings":";;AAGA,MAAM,YAAY,oBAAI,IAAI,CAAC,WAAW,QAAQ,OAAO,UAAU,YAAY,WAAW,UAAU,CAAC;AAEjG,SAAS,mBAAmB,aAA6B;AACvD,QAAM,eAAe,cAAc;AACnC,MAAI,eAAe,IAAM,QAAO,GAAG,OAAO,aAAa,QAAQ,CAAC,CAAC,CAAC;AAClE,QAAM,UAAU,eAAe;AAC/B,MAAI,UAAU,GAAI,QAAO,GAAG,OAAO,QAAQ,QAAQ,CAAC,CAAC,CAAC;AACtD,QAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,SAAO,GAAG,OAAO,KAAK,QAAQ,UAAU,IAAI,QAAQ,CAAC,CAAC,CAAC;AACzD;AAEO,SAAS,oBAAoB,EAAE,WAAyC;AAC7E,QAAM,OAAO,CAAC,QAAQ,SAAS,GAAI,QAAQ,QAAQ,EAAG;AACtD,QAAM,QAAQ,OAAO,YAAY,OAAO,QAAQ,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;AAE/F,SACE,qBAAC,WAAA,EAAQ,cAAW,qBAAoB,WAAU,oDAChD,UAAA;AAAA,IAAA,oBAAC,OAAA,EAAI,WAAU,2EAA0E,UAAA,yBAEzF;AAAA,wBACC,QAAA,EAAK,WAAU,iFACb,UAAA,KAAK,UAAU,IAAI,GACtB;AAAA,IACA,qBAAC,OAAA,EAAI,WAAU,6EACb,UAAA;AAAA,MAAA,oBAAC,QAAA,EAAM,kBAAQ,OAAA,CAAO;AAAA,MACrB,QAAQ,QAAQ,UAAa,qBAAC,QAAA,EAAK,WAAU,6BAA4B,UAAA;AAAA,QAAA;AAAA,QAAK,QAAQ;AAAA,MAAA,GAAI;AAAA,MAC3F,qBAAC,QAAA,EAAK,WAAU,6BAA4B,UAAA;AAAA,QAAA;AAAA,QAAM,QAAQ;AAAA,MAAA,GAAS;AAAA,MAClE,QAAQ,aAAa,UAAa,oBAAC,UAAM,UAAA,mBAAmB,QAAQ,QAAQ,GAAE;AAAA,MAC9E,QAAQ,WAAW,qBAAC,QAAA,EAAK,UAAA;AAAA,QAAA;AAAA,QAAS,QAAQ;AAAA,MAAA,EAAA,CAAQ;AAAA,IAAA,GACrD;AAAA,IACC,OAAO,KAAK,KAAK,EAAE,SAAS,KAC3B,oBAAC,OAAA,EAAI,WAAU,oCACb,8BAAC,UAAA,EAAS,MAAM,OAAO,kBAAkB,GAAG,EAAA,CAC9C;AAAA,EAAA,GAEJ;AAEJ;"}
|
|
@@ -8,6 +8,8 @@ const AnsiHtml = require("./AnsiHtml.cjs");
|
|
|
8
8
|
const Icon = require("./Icon.cjs");
|
|
9
9
|
const ProgressBar = require("./ProgressBar.cjs");
|
|
10
10
|
const TaskProcessDetails = require("./TaskProcessDetails.cjs");
|
|
11
|
+
const TaskExecDetails = require("./TaskExecDetails.cjs");
|
|
12
|
+
const taskExecDetails = require("./task-exec-details.cjs");
|
|
11
13
|
const taskProcessDetails = require("./task-process-details.cjs");
|
|
12
14
|
const taskStatus = require("./task-status.cjs");
|
|
13
15
|
const UiRestart = require("../icons/components/UiRestart.cjs");
|
|
@@ -113,6 +115,7 @@ function TaskGroupCard({
|
|
|
113
115
|
...metricsBaseUrl ? { metricsBaseUrl } : {}
|
|
114
116
|
}
|
|
115
117
|
),
|
|
118
|
+
!taskProcessDetails.isTaskProcessDetails(g.details) && taskExecDetails.isTaskExecDetails(g.details) && /* @__PURE__ */ jsxRuntime.jsx(TaskExecDetails.TaskExecDetailsView, { details: g.details }),
|
|
116
119
|
hiddenCompleted > 0 || hiddenPending > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
117
120
|
"button",
|
|
118
121
|
{
|
|
@@ -142,6 +145,8 @@ function TaskRow({
|
|
|
142
145
|
const logs = t.logs ?? [];
|
|
143
146
|
const hasLogs = logs.length > 0;
|
|
144
147
|
const hasOutput = !!t.stdout || !!t.stderr;
|
|
148
|
+
const execDetails = taskExecDetails.isTaskExecDetails(t.details) ? t.details : void 0;
|
|
149
|
+
const expandable = hasLogs || hasOutput || execDetails !== void 0;
|
|
145
150
|
const latestWarn = t.error ? void 0 : logs.filter((l) => l.level === "warn").at(-1);
|
|
146
151
|
const done = t.progress ?? 0;
|
|
147
152
|
const hasProgress = typeof t.maxValue === "number" && t.maxValue > 0 && done > 0;
|
|
@@ -151,9 +156,9 @@ function TaskRow({
|
|
|
151
156
|
{
|
|
152
157
|
className: utils.cn(
|
|
153
158
|
"flex items-start gap-3 border-b py-2 last:border-0",
|
|
154
|
-
|
|
159
|
+
expandable && "-mx-1 cursor-pointer rounded px-1 hover:bg-muted/50"
|
|
155
160
|
),
|
|
156
|
-
onClick:
|
|
161
|
+
onClick: expandable ? () => setExpanded((v) => !v) : void 0,
|
|
157
162
|
children: [
|
|
158
163
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
159
164
|
Icon.Icon,
|
|
@@ -168,7 +173,7 @@ function TaskRow({
|
|
|
168
173
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: t.name }),
|
|
169
174
|
t.error && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs font-normal text-red-500", children: t.error }),
|
|
170
175
|
latestWarn && /* @__PURE__ */ jsxRuntime.jsx("span", { className: utils.cn("truncate text-xs font-normal", taskStatus.logLevelColor("warn")), children: latestWarn.message }),
|
|
171
|
-
|
|
176
|
+
expandable && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex shrink-0 items-center rounded-full bg-muted px-1.5 text-[10px] font-medium text-muted-foreground", children: logs.length + (t.stdout ? 1 : 0) + (t.stderr ? 1 : 0) + (execDetails ? 1 : 0) })
|
|
172
177
|
] }),
|
|
173
178
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
174
179
|
t.duration && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: t.duration }),
|
|
@@ -202,6 +207,7 @@ function TaskRow({
|
|
|
202
207
|
height: "h-1"
|
|
203
208
|
}
|
|
204
209
|
) }),
|
|
210
|
+
expanded && execDetails && /* @__PURE__ */ jsxRuntime.jsx(TaskExecDetails.TaskExecDetailsView, { details: execDetails }),
|
|
205
211
|
expanded && hasLogs && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 ml-1 max-h-48 space-y-0.5 overflow-y-auto border-l-2 pl-2", children: logs.map((l, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils.cn("text-xs", taskStatus.logLevelColor(l.level)), children: [
|
|
206
212
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "mr-1 font-mono text-muted-foreground", children: l.level.substring(0, 3) }),
|
|
207
213
|
l.message
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskProgress.cjs","sources":["../../src/data/TaskProgress.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { UiPlay, UiRestart, UiStop } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { AnsiHtml } from \"./AnsiHtml\";\nimport { Icon } from \"./Icon\";\nimport { ProgressBar } from \"./ProgressBar\";\nimport { TaskProcessDetailsView } from \"./TaskProcessDetails\";\nimport type { LogEntry, TaskControlAction, TaskSnapshot } from \"./TaskSnapshot\";\nimport { isTaskProcessDetails } from \"./task-process-details\";\nimport {\n bucketTasks,\n logLevelColor,\n taskSegments,\n taskStatusBg,\n taskStatusColor,\n taskStatusIcon,\n} from \"./task-status\";\n\n// TaskProgress renders one or more clicky task runs (groups) and their child\n// tasks: a segmented progress bar per group plus collapsible per-task rows with\n// status icon, duration, error, and expandable logs. Presentational only —\n// callers feed it snapshots from useTaskRun (SSE) or any other source.\n\nconst MAX_COMPLETED = 5;\nconst MAX_PENDING = 3;\n\nexport interface TaskProgressProps {\n snapshots: TaskSnapshot[];\n title?: string;\n /** Tighter spacing for embedding in a panel. */\n compact?: boolean;\n className?: string;\n onControl?: (action: TaskControlAction, group: TaskSnapshot) => void | Promise<void>;\n onTaskControl?: (\n action: TaskControlAction,\n task: TaskSnapshot,\n group: TaskSnapshot,\n ) => void | Promise<void>;\n metricsBaseUrl?: string;\n}\n\nexport function TaskProgress({\n snapshots,\n title,\n compact,\n className,\n onControl,\n onTaskControl,\n metricsBaseUrl,\n}: TaskProgressProps) {\n const groups = snapshots.filter((s) => s.type === \"group\");\n const tasks = snapshots.filter((s) => s.type === \"task\");\n\n if (groups.length === 0) {\n return (\n <div className={cn(\"text-sm text-muted-foreground\", className)}>\n {title ? `${title}: ` : \"\"}No tasks yet.\n </div>\n );\n }\n\n return (\n <div className={cn(compact ? \"space-y-2\" : \"space-y-3\", className)}>\n {title && <h2 className=\"text-sm font-semibold\">{title}</h2>}\n {groups.map((g) => (\n <TaskGroupCard\n key={g.groupId || g.id}\n group={g}\n tasks={tasks.filter((t) => t.groupId === g.groupId || t.group === g.id)}\n compact={compact}\n {...(onControl ? { onControl } : {})}\n {...(onTaskControl ? { onTaskControl } : {})}\n {...(metricsBaseUrl ? { metricsBaseUrl } : {})}\n />\n ))}\n </div>\n );\n}\n\nfunction isFailedOrWarn(t: TaskSnapshot): boolean {\n return t.status === \"failed\" || t.status === \"FAIL\" || t.status === \"ERR\" || t.status === \"warning\";\n}\n\nfunction TaskGroupCard({\n group: g,\n tasks,\n compact,\n onControl,\n onTaskControl,\n metricsBaseUrl,\n}: {\n group: TaskSnapshot;\n tasks: TaskSnapshot[];\n compact: boolean | undefined;\n onControl?: (action: TaskControlAction, group: TaskSnapshot) => void | Promise<void>;\n onTaskControl?: (\n action: TaskControlAction,\n task: TaskSnapshot,\n group: TaskSnapshot,\n ) => void | Promise<void>;\n metricsBaseUrl?: string;\n}) {\n const [showAll, setShowAll] = useState(false);\n const total = g.total ?? tasks.length;\n const counts = bucketTasks(tasks);\n const done = counts.ok + counts.warn + counts.fail;\n const progress = total > 0 ? `${done}/${total}` : \"\";\n\n const running = tasks.filter((t) => t.status === \"running\");\n const pending = tasks.filter((t) => t.status === \"pending\");\n const completed = tasks.filter((t) => t.status !== \"running\" && t.status !== \"pending\");\n const alwaysShow = completed.filter(isFailedOrWarn);\n const collapsible = completed.filter((t) => !isFailedOrWarn(t));\n\n const hiddenCompleted = collapsible.length - MAX_COMPLETED;\n const collapseCompleted = !showAll && hiddenCompleted > 0;\n const visibleSuccess = collapseCompleted ? collapsible.slice(-MAX_COMPLETED) : collapsible;\n\n const hiddenPending = pending.length - MAX_PENDING;\n const collapsePending = !showAll && hiddenPending > 0;\n const visiblePending = collapsePending ? pending.slice(0, MAX_PENDING) : pending;\n\n const isTerminal = g.status !== \"running\" && g.status !== \"pending\";\n\n return (\n <div className={cn(\"rounded-lg border bg-card\", compact ? \"p-3\" : \"p-4\")}>\n <div className=\"mb-3 flex items-center justify-between gap-3\">\n <h3 className=\"flex items-center gap-1.5 text-sm font-semibold\">\n <Icon\n icon={taskStatusIcon(g.status)}\n className={cn(taskStatusColor(g.status), g.status === \"running\" && \"animate-spin\")}\n />\n <span>{g.name}</span>\n {progress && <span className=\"text-xs text-muted-foreground\">{progress}</span>}\n {g.kind && (\n <span className=\"rounded-full bg-muted px-1.5 py-0 text-[10px] text-muted-foreground\">\n {g.kind}\n </span>\n )}\n </h3>\n <div className=\"flex shrink-0 items-center gap-1\">\n {isTerminal && (\n <span\n className={cn(\n \"rounded-full px-2 py-0.5 text-xs\",\n taskStatusColor(g.status),\n taskStatusBg(g.status),\n )}\n >\n {g.status}\n </span>\n )}\n {onControl && <TaskControls target={g} onControl={onControl} />}\n </div>\n </div>\n\n {total > 0 && (\n <div className=\"mb-3\">\n <ProgressBar segments={taskSegments(counts)} total={total} height=\"h-1.5\" />\n </div>\n )}\n\n {isTaskProcessDetails(g.details) && (\n <TaskProcessDetailsView\n details={g.details}\n {...(metricsBaseUrl ? { metricsBaseUrl } : {})}\n />\n )}\n\n {hiddenCompleted > 0 || hiddenPending > 0 ? (\n <button\n type=\"button\"\n className=\"border-b py-1.5 text-xs text-muted-foreground hover:text-foreground\"\n onClick={() => setShowAll((v) => !v)}\n >\n {showAll\n ? \"▲ collapse\"\n : `... ${(collapseCompleted ? hiddenCompleted : 0) + (collapsePending ? hiddenPending : 0)} more tasks`}\n </button>\n ) : null}\n\n {[...visibleSuccess, ...alwaysShow, ...running, ...visiblePending].map((t) => (\n <TaskRow\n key={t.id}\n task={t}\n group={g}\n {...(onTaskControl ? { onTaskControl } : {})}\n />\n ))}\n </div>\n );\n}\n\nfunction TaskRow({\n task: t,\n group,\n onTaskControl,\n}: {\n task: TaskSnapshot;\n group: TaskSnapshot;\n onTaskControl?: (\n action: TaskControlAction,\n task: TaskSnapshot,\n group: TaskSnapshot,\n ) => void | Promise<void>;\n}) {\n const [expanded, setExpanded] = useState(false);\n const logs: LogEntry[] = t.logs ?? [];\n const hasLogs = logs.length > 0;\n const hasOutput = !!t.stdout || !!t.stderr;\n // Promote the latest warning message inline so a `warning` row shows its\n // reason without expanding. Suppressed when an error is already shown.\n const latestWarn = t.error ? undefined : logs.filter((l) => l.level === \"warn\").at(-1);\n // Bounded per-task progress (e.g. records emitted in a phase): render an x/y\n // count, a percentage, and a thin bar while the task runs.\n const done = t.progress ?? 0;\n // Only surface bounded progress once work has actually started — an untouched\n // task should not render a \"0/100 · 0%\" placeholder.\n const hasProgress = typeof t.maxValue === \"number\" && t.maxValue > 0 && done > 0;\n const pct = hasProgress ? Math.round((done / (t.maxValue as number)) * 100) : 0;\n\n return (\n <div\n className={cn(\n \"flex items-start gap-3 border-b py-2 last:border-0\",\n (hasLogs || hasOutput) && \"-mx-1 cursor-pointer rounded px-1 hover:bg-muted/50\",\n )}\n onClick={hasLogs || hasOutput ? () => setExpanded((v) => !v) : undefined}\n >\n <Icon\n icon={taskStatusIcon(t.status)}\n className={cn(taskStatusColor(t.status), \"mt-0.5 text-lg\", t.status === \"running\" && \"animate-spin\")}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"flex min-w-0 items-center gap-1.5 text-sm font-medium\">\n <span className=\"truncate\">{t.name}</span>\n {t.error && <span className=\"truncate text-xs font-normal text-red-500\">{t.error}</span>}\n {latestWarn && (\n <span className={cn(\"truncate text-xs font-normal\", logLevelColor(\"warn\"))}>\n {latestWarn.message}\n </span>\n )}\n {(hasLogs || hasOutput) && (\n <span className=\"inline-flex shrink-0 items-center rounded-full bg-muted px-1.5 text-[10px] font-medium text-muted-foreground\">\n {logs.length + (t.stdout ? 1 : 0) + (t.stderr ? 1 : 0)}\n </span>\n )}\n </span>\n <div className=\"flex shrink-0 items-center gap-1\">\n {t.duration && <span className=\"text-xs text-muted-foreground\">{t.duration}</span>}\n {onTaskControl && (\n <TaskControls\n target={t}\n labelSuffix={t.name}\n stopPropagation\n onControl={(action) => onTaskControl(action, t, group)}\n />\n )}\n </div>\n </div>\n {(t.description || hasProgress) && (\n <div className=\"mt-0.5 flex items-center gap-2\">\n {t.description && (\n <span className=\"min-w-0 flex-1 truncate text-xs text-muted-foreground\">{t.description}</span>\n )}\n {hasProgress && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {done}/{t.maxValue} · {pct}%\n </span>\n )}\n </div>\n )}\n {hasProgress && t.status === \"running\" && (\n <div className=\"mt-1\">\n <ProgressBar\n segments={[{ count: done, color: \"bg-blue-500\", label: \"done\" }]}\n total={t.maxValue as number}\n height=\"h-1\"\n />\n </div>\n )}\n {expanded && hasLogs && (\n <div className=\"mt-1 ml-1 max-h-48 space-y-0.5 overflow-y-auto border-l-2 pl-2\">\n {logs.map((l, i) => (\n <div key={i} className={cn(\"text-xs\", logLevelColor(l.level))}>\n <span className=\"mr-1 font-mono text-muted-foreground\">{l.level.substring(0, 3)}</span>\n {l.message}\n </div>\n ))}\n </div>\n )}\n {expanded && hasOutput && (\n <div className=\"mt-2 space-y-2\">\n {t.stdout && <TaskStream label=\"stdout\" text={t.stdout} {...(t.stdoutTruncated ? { truncated: true } : {})} />}\n {t.stderr && <TaskStream label=\"stderr\" text={t.stderr} {...(t.stderrTruncated ? { truncated: true } : {})} error />}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction TaskStream({\n label,\n text,\n truncated,\n error,\n}: {\n label: string;\n text: string;\n truncated?: boolean;\n error?: boolean;\n}) {\n return (\n <div className=\"overflow-hidden rounded border bg-black\">\n <div className=\"flex items-center justify-between border-b border-white/10 px-2 py-1 text-[10px] text-gray-400\">\n <span>{label}</span>\n {truncated && <span>showing latest 1 MiB</span>}\n </div>\n <AnsiHtml\n text={text}\n className={cn(\"max-h-64 overflow-auto whitespace-pre-wrap p-2 text-xs text-gray-100\", error && \"text-red-300\")}\n />\n </div>\n );\n}\n\nfunction TaskControls({\n target,\n onControl,\n labelSuffix,\n stopPropagation,\n}: {\n target: TaskSnapshot;\n onControl: (action: TaskControlAction, target: TaskSnapshot) => void | Promise<void>;\n labelSuffix?: string;\n stopPropagation?: boolean;\n}) {\n const [busy, setBusy] = useState<TaskControlAction | null>(null);\n const [error, setError] = useState(\"\");\n const icons = { start: UiPlay, stop: UiStop, restart: UiRestart };\n const invoke = async (action: TaskControlAction) => {\n setBusy(action);\n setError(\"\");\n try {\n await onControl(action, target);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : `Failed to ${action} task`);\n } finally {\n setBusy(null);\n }\n };\n return (\n <>\n {(target.controls ?? []).map((action) => {\n const ControlIcon = icons[action];\n const actionLabel = action[0]?.toUpperCase() + action.slice(1);\n const label = labelSuffix ? `${actionLabel} ${labelSuffix}` : actionLabel;\n return (\n <Button\n key={action}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label={label}\n title={label}\n disabled={busy !== null}\n onClick={(event) => {\n if (stopPropagation) event.stopPropagation();\n void invoke(action);\n }}\n >\n <ControlIcon />\n </Button>\n );\n })}\n {error && <span role=\"alert\" className=\"text-xs text-red-600\">{error}</span>}\n </>\n );\n}\n"],"names":["cn","jsxs","jsx","useState","bucketTasks","Icon","taskStatusIcon","taskStatusColor","taskStatusBg","ProgressBar","taskSegments","isTaskProcessDetails","TaskProcessDetailsView","logLevelColor","AnsiHtml","UiPlay","UiStop","UiRestart","Fragment","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TaskProgress.cjs","sources":["../../src/data/TaskProgress.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Button } from \"../components/button\";\nimport { UiPlay, UiRestart, UiStop } from \"../icons\";\nimport { cn } from \"../lib/utils\";\nimport { AnsiHtml } from \"./AnsiHtml\";\nimport { Icon } from \"./Icon\";\nimport { ProgressBar } from \"./ProgressBar\";\nimport { TaskProcessDetailsView } from \"./TaskProcessDetails\";\nimport { TaskExecDetailsView } from \"./TaskExecDetails\";\nimport type { LogEntry, TaskControlAction, TaskSnapshot } from \"./TaskSnapshot\";\nimport { isTaskExecDetails } from \"./task-exec-details\";\nimport { isTaskProcessDetails } from \"./task-process-details\";\nimport {\n bucketTasks,\n logLevelColor,\n taskSegments,\n taskStatusBg,\n taskStatusColor,\n taskStatusIcon,\n} from \"./task-status\";\n\n// TaskProgress renders one or more clicky task runs (groups) and their child\n// tasks: a segmented progress bar per group plus collapsible per-task rows with\n// status icon, duration, error, and expandable logs. Presentational only —\n// callers feed it snapshots from useTaskRun (SSE) or any other source.\n\nconst MAX_COMPLETED = 5;\nconst MAX_PENDING = 3;\n\nexport interface TaskProgressProps {\n snapshots: TaskSnapshot[];\n title?: string;\n /** Tighter spacing for embedding in a panel. */\n compact?: boolean;\n className?: string;\n onControl?: (action: TaskControlAction, group: TaskSnapshot) => void | Promise<void>;\n onTaskControl?: (\n action: TaskControlAction,\n task: TaskSnapshot,\n group: TaskSnapshot,\n ) => void | Promise<void>;\n metricsBaseUrl?: string;\n}\n\nexport function TaskProgress({\n snapshots,\n title,\n compact,\n className,\n onControl,\n onTaskControl,\n metricsBaseUrl,\n}: TaskProgressProps) {\n const groups = snapshots.filter((s) => s.type === \"group\");\n const tasks = snapshots.filter((s) => s.type === \"task\");\n\n if (groups.length === 0) {\n return (\n <div className={cn(\"text-sm text-muted-foreground\", className)}>\n {title ? `${title}: ` : \"\"}No tasks yet.\n </div>\n );\n }\n\n return (\n <div className={cn(compact ? \"space-y-2\" : \"space-y-3\", className)}>\n {title && <h2 className=\"text-sm font-semibold\">{title}</h2>}\n {groups.map((g) => (\n <TaskGroupCard\n key={g.groupId || g.id}\n group={g}\n tasks={tasks.filter((t) => t.groupId === g.groupId || t.group === g.id)}\n compact={compact}\n {...(onControl ? { onControl } : {})}\n {...(onTaskControl ? { onTaskControl } : {})}\n {...(metricsBaseUrl ? { metricsBaseUrl } : {})}\n />\n ))}\n </div>\n );\n}\n\nfunction isFailedOrWarn(t: TaskSnapshot): boolean {\n return t.status === \"failed\" || t.status === \"FAIL\" || t.status === \"ERR\" || t.status === \"warning\";\n}\n\nfunction TaskGroupCard({\n group: g,\n tasks,\n compact,\n onControl,\n onTaskControl,\n metricsBaseUrl,\n}: {\n group: TaskSnapshot;\n tasks: TaskSnapshot[];\n compact: boolean | undefined;\n onControl?: (action: TaskControlAction, group: TaskSnapshot) => void | Promise<void>;\n onTaskControl?: (\n action: TaskControlAction,\n task: TaskSnapshot,\n group: TaskSnapshot,\n ) => void | Promise<void>;\n metricsBaseUrl?: string;\n}) {\n const [showAll, setShowAll] = useState(false);\n const total = g.total ?? tasks.length;\n const counts = bucketTasks(tasks);\n const done = counts.ok + counts.warn + counts.fail;\n const progress = total > 0 ? `${done}/${total}` : \"\";\n\n const running = tasks.filter((t) => t.status === \"running\");\n const pending = tasks.filter((t) => t.status === \"pending\");\n const completed = tasks.filter((t) => t.status !== \"running\" && t.status !== \"pending\");\n const alwaysShow = completed.filter(isFailedOrWarn);\n const collapsible = completed.filter((t) => !isFailedOrWarn(t));\n\n const hiddenCompleted = collapsible.length - MAX_COMPLETED;\n const collapseCompleted = !showAll && hiddenCompleted > 0;\n const visibleSuccess = collapseCompleted ? collapsible.slice(-MAX_COMPLETED) : collapsible;\n\n const hiddenPending = pending.length - MAX_PENDING;\n const collapsePending = !showAll && hiddenPending > 0;\n const visiblePending = collapsePending ? pending.slice(0, MAX_PENDING) : pending;\n\n const isTerminal = g.status !== \"running\" && g.status !== \"pending\";\n\n return (\n <div className={cn(\"rounded-lg border bg-card\", compact ? \"p-3\" : \"p-4\")}>\n <div className=\"mb-3 flex items-center justify-between gap-3\">\n <h3 className=\"flex items-center gap-1.5 text-sm font-semibold\">\n <Icon\n icon={taskStatusIcon(g.status)}\n className={cn(taskStatusColor(g.status), g.status === \"running\" && \"animate-spin\")}\n />\n <span>{g.name}</span>\n {progress && <span className=\"text-xs text-muted-foreground\">{progress}</span>}\n {g.kind && (\n <span className=\"rounded-full bg-muted px-1.5 py-0 text-[10px] text-muted-foreground\">\n {g.kind}\n </span>\n )}\n </h3>\n <div className=\"flex shrink-0 items-center gap-1\">\n {isTerminal && (\n <span\n className={cn(\n \"rounded-full px-2 py-0.5 text-xs\",\n taskStatusColor(g.status),\n taskStatusBg(g.status),\n )}\n >\n {g.status}\n </span>\n )}\n {onControl && <TaskControls target={g} onControl={onControl} />}\n </div>\n </div>\n\n {total > 0 && (\n <div className=\"mb-3\">\n <ProgressBar segments={taskSegments(counts)} total={total} height=\"h-1.5\" />\n </div>\n )}\n\n {isTaskProcessDetails(g.details) && (\n <TaskProcessDetailsView\n details={g.details}\n {...(metricsBaseUrl ? { metricsBaseUrl } : {})}\n />\n )}\n\n {!isTaskProcessDetails(g.details) && isTaskExecDetails(g.details) && (\n <TaskExecDetailsView details={g.details} />\n )}\n\n {hiddenCompleted > 0 || hiddenPending > 0 ? (\n <button\n type=\"button\"\n className=\"border-b py-1.5 text-xs text-muted-foreground hover:text-foreground\"\n onClick={() => setShowAll((v) => !v)}\n >\n {showAll\n ? \"▲ collapse\"\n : `... ${(collapseCompleted ? hiddenCompleted : 0) + (collapsePending ? hiddenPending : 0)} more tasks`}\n </button>\n ) : null}\n\n {[...visibleSuccess, ...alwaysShow, ...running, ...visiblePending].map((t) => (\n <TaskRow\n key={t.id}\n task={t}\n group={g}\n {...(onTaskControl ? { onTaskControl } : {})}\n />\n ))}\n </div>\n );\n}\n\nfunction TaskRow({\n task: t,\n group,\n onTaskControl,\n}: {\n task: TaskSnapshot;\n group: TaskSnapshot;\n onTaskControl?: (\n action: TaskControlAction,\n task: TaskSnapshot,\n group: TaskSnapshot,\n ) => void | Promise<void>;\n}) {\n const [expanded, setExpanded] = useState(false);\n const logs: LogEntry[] = t.logs ?? [];\n const hasLogs = logs.length > 0;\n const hasOutput = !!t.stdout || !!t.stderr;\n const execDetails = isTaskExecDetails(t.details) ? t.details : undefined;\n const expandable = hasLogs || hasOutput || execDetails !== undefined;\n // Promote the latest warning message inline so a `warning` row shows its\n // reason without expanding. Suppressed when an error is already shown.\n const latestWarn = t.error ? undefined : logs.filter((l) => l.level === \"warn\").at(-1);\n // Bounded per-task progress (e.g. records emitted in a phase): render an x/y\n // count, a percentage, and a thin bar while the task runs.\n const done = t.progress ?? 0;\n // Only surface bounded progress once work has actually started — an untouched\n // task should not render a \"0/100 · 0%\" placeholder.\n const hasProgress = typeof t.maxValue === \"number\" && t.maxValue > 0 && done > 0;\n const pct = hasProgress ? Math.round((done / (t.maxValue as number)) * 100) : 0;\n\n return (\n <div\n className={cn(\n \"flex items-start gap-3 border-b py-2 last:border-0\",\n expandable && \"-mx-1 cursor-pointer rounded px-1 hover:bg-muted/50\",\n )}\n onClick={expandable ? () => setExpanded((v) => !v) : undefined}\n >\n <Icon\n icon={taskStatusIcon(t.status)}\n className={cn(taskStatusColor(t.status), \"mt-0.5 text-lg\", t.status === \"running\" && \"animate-spin\")}\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"flex min-w-0 items-center gap-1.5 text-sm font-medium\">\n <span className=\"truncate\">{t.name}</span>\n {t.error && <span className=\"truncate text-xs font-normal text-red-500\">{t.error}</span>}\n {latestWarn && (\n <span className={cn(\"truncate text-xs font-normal\", logLevelColor(\"warn\"))}>\n {latestWarn.message}\n </span>\n )}\n {expandable && (\n <span className=\"inline-flex shrink-0 items-center rounded-full bg-muted px-1.5 text-[10px] font-medium text-muted-foreground\">\n {logs.length + (t.stdout ? 1 : 0) + (t.stderr ? 1 : 0) + (execDetails ? 1 : 0)}\n </span>\n )}\n </span>\n <div className=\"flex shrink-0 items-center gap-1\">\n {t.duration && <span className=\"text-xs text-muted-foreground\">{t.duration}</span>}\n {onTaskControl && (\n <TaskControls\n target={t}\n labelSuffix={t.name}\n stopPropagation\n onControl={(action) => onTaskControl(action, t, group)}\n />\n )}\n </div>\n </div>\n {(t.description || hasProgress) && (\n <div className=\"mt-0.5 flex items-center gap-2\">\n {t.description && (\n <span className=\"min-w-0 flex-1 truncate text-xs text-muted-foreground\">{t.description}</span>\n )}\n {hasProgress && (\n <span className=\"shrink-0 text-xs tabular-nums text-muted-foreground\">\n {done}/{t.maxValue} · {pct}%\n </span>\n )}\n </div>\n )}\n {hasProgress && t.status === \"running\" && (\n <div className=\"mt-1\">\n <ProgressBar\n segments={[{ count: done, color: \"bg-blue-500\", label: \"done\" }]}\n total={t.maxValue as number}\n height=\"h-1\"\n />\n </div>\n )}\n {expanded && execDetails && <TaskExecDetailsView details={execDetails} />}\n {expanded && hasLogs && (\n <div className=\"mt-1 ml-1 max-h-48 space-y-0.5 overflow-y-auto border-l-2 pl-2\">\n {logs.map((l, i) => (\n <div key={i} className={cn(\"text-xs\", logLevelColor(l.level))}>\n <span className=\"mr-1 font-mono text-muted-foreground\">{l.level.substring(0, 3)}</span>\n {l.message}\n </div>\n ))}\n </div>\n )}\n {expanded && hasOutput && (\n <div className=\"mt-2 space-y-2\">\n {t.stdout && <TaskStream label=\"stdout\" text={t.stdout} {...(t.stdoutTruncated ? { truncated: true } : {})} />}\n {t.stderr && <TaskStream label=\"stderr\" text={t.stderr} {...(t.stderrTruncated ? { truncated: true } : {})} error />}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction TaskStream({\n label,\n text,\n truncated,\n error,\n}: {\n label: string;\n text: string;\n truncated?: boolean;\n error?: boolean;\n}) {\n return (\n <div className=\"overflow-hidden rounded border bg-black\">\n <div className=\"flex items-center justify-between border-b border-white/10 px-2 py-1 text-[10px] text-gray-400\">\n <span>{label}</span>\n {truncated && <span>showing latest 1 MiB</span>}\n </div>\n <AnsiHtml\n text={text}\n className={cn(\"max-h-64 overflow-auto whitespace-pre-wrap p-2 text-xs text-gray-100\", error && \"text-red-300\")}\n />\n </div>\n );\n}\n\nfunction TaskControls({\n target,\n onControl,\n labelSuffix,\n stopPropagation,\n}: {\n target: TaskSnapshot;\n onControl: (action: TaskControlAction, target: TaskSnapshot) => void | Promise<void>;\n labelSuffix?: string;\n stopPropagation?: boolean;\n}) {\n const [busy, setBusy] = useState<TaskControlAction | null>(null);\n const [error, setError] = useState(\"\");\n const icons = { start: UiPlay, stop: UiStop, restart: UiRestart };\n const invoke = async (action: TaskControlAction) => {\n setBusy(action);\n setError(\"\");\n try {\n await onControl(action, target);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : `Failed to ${action} task`);\n } finally {\n setBusy(null);\n }\n };\n return (\n <>\n {(target.controls ?? []).map((action) => {\n const ControlIcon = icons[action];\n const actionLabel = action[0]?.toUpperCase() + action.slice(1);\n const label = labelSuffix ? `${actionLabel} ${labelSuffix}` : actionLabel;\n return (\n <Button\n key={action}\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label={label}\n title={label}\n disabled={busy !== null}\n onClick={(event) => {\n if (stopPropagation) event.stopPropagation();\n void invoke(action);\n }}\n >\n <ControlIcon />\n </Button>\n );\n })}\n {error && <span role=\"alert\" className=\"text-xs text-red-600\">{error}</span>}\n </>\n );\n}\n"],"names":["cn","jsxs","jsx","useState","bucketTasks","Icon","taskStatusIcon","taskStatusColor","taskStatusBg","ProgressBar","taskSegments","isTaskProcessDetails","TaskProcessDetailsView","isTaskExecDetails","TaskExecDetailsView","logLevelColor","AnsiHtml","UiPlay","UiStop","UiRestart","Fragment","Button"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskProgress.d.ts","sourceRoot":"","sources":["../../src/data/TaskProgress.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TaskProgress.d.ts","sourceRoot":"","sources":["../../src/data/TaskProgress.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAY,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAoBhF,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,aAAa,CAAC,EAAE,CACd,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,YAAY,KAChB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,GACf,EAAE,iBAAiB,2CA4BnB"}
|
|
@@ -6,6 +6,8 @@ import { AnsiHtml } from "./AnsiHtml.js";
|
|
|
6
6
|
import { Icon } from "./Icon.js";
|
|
7
7
|
import { ProgressBar } from "./ProgressBar.js";
|
|
8
8
|
import { TaskProcessDetailsView } from "./TaskProcessDetails.js";
|
|
9
|
+
import { TaskExecDetailsView } from "./TaskExecDetails.js";
|
|
10
|
+
import { isTaskExecDetails } from "./task-exec-details.js";
|
|
9
11
|
import { isTaskProcessDetails } from "./task-process-details.js";
|
|
10
12
|
import { bucketTasks, taskStatusColor, taskStatusIcon, taskStatusBg, taskSegments, logLevelColor } from "./task-status.js";
|
|
11
13
|
import { UiRestart } from "../icons/components/UiRestart.js";
|
|
@@ -111,6 +113,7 @@ function TaskGroupCard({
|
|
|
111
113
|
...metricsBaseUrl ? { metricsBaseUrl } : {}
|
|
112
114
|
}
|
|
113
115
|
),
|
|
116
|
+
!isTaskProcessDetails(g.details) && isTaskExecDetails(g.details) && /* @__PURE__ */ jsx(TaskExecDetailsView, { details: g.details }),
|
|
114
117
|
hiddenCompleted > 0 || hiddenPending > 0 ? /* @__PURE__ */ jsx(
|
|
115
118
|
"button",
|
|
116
119
|
{
|
|
@@ -140,6 +143,8 @@ function TaskRow({
|
|
|
140
143
|
const logs = t.logs ?? [];
|
|
141
144
|
const hasLogs = logs.length > 0;
|
|
142
145
|
const hasOutput = !!t.stdout || !!t.stderr;
|
|
146
|
+
const execDetails = isTaskExecDetails(t.details) ? t.details : void 0;
|
|
147
|
+
const expandable = hasLogs || hasOutput || execDetails !== void 0;
|
|
143
148
|
const latestWarn = t.error ? void 0 : logs.filter((l) => l.level === "warn").at(-1);
|
|
144
149
|
const done = t.progress ?? 0;
|
|
145
150
|
const hasProgress = typeof t.maxValue === "number" && t.maxValue > 0 && done > 0;
|
|
@@ -149,9 +154,9 @@ function TaskRow({
|
|
|
149
154
|
{
|
|
150
155
|
className: cn(
|
|
151
156
|
"flex items-start gap-3 border-b py-2 last:border-0",
|
|
152
|
-
|
|
157
|
+
expandable && "-mx-1 cursor-pointer rounded px-1 hover:bg-muted/50"
|
|
153
158
|
),
|
|
154
|
-
onClick:
|
|
159
|
+
onClick: expandable ? () => setExpanded((v) => !v) : void 0,
|
|
155
160
|
children: [
|
|
156
161
|
/* @__PURE__ */ jsx(
|
|
157
162
|
Icon,
|
|
@@ -166,7 +171,7 @@ function TaskRow({
|
|
|
166
171
|
/* @__PURE__ */ jsx("span", { className: "truncate", children: t.name }),
|
|
167
172
|
t.error && /* @__PURE__ */ jsx("span", { className: "truncate text-xs font-normal text-red-500", children: t.error }),
|
|
168
173
|
latestWarn && /* @__PURE__ */ jsx("span", { className: cn("truncate text-xs font-normal", logLevelColor("warn")), children: latestWarn.message }),
|
|
169
|
-
|
|
174
|
+
expandable && /* @__PURE__ */ jsx("span", { className: "inline-flex shrink-0 items-center rounded-full bg-muted px-1.5 text-[10px] font-medium text-muted-foreground", children: logs.length + (t.stdout ? 1 : 0) + (t.stderr ? 1 : 0) + (execDetails ? 1 : 0) })
|
|
170
175
|
] }),
|
|
171
176
|
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
172
177
|
t.duration && /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: t.duration }),
|
|
@@ -200,6 +205,7 @@ function TaskRow({
|
|
|
200
205
|
height: "h-1"
|
|
201
206
|
}
|
|
202
207
|
) }),
|
|
208
|
+
expanded && execDetails && /* @__PURE__ */ jsx(TaskExecDetailsView, { details: execDetails }),
|
|
203
209
|
expanded && hasLogs && /* @__PURE__ */ jsx("div", { className: "mt-1 ml-1 max-h-48 space-y-0.5 overflow-y-auto border-l-2 pl-2", children: logs.map((l, i) => /* @__PURE__ */ jsxs("div", { className: cn("text-xs", logLevelColor(l.level)), children: [
|
|
204
210
|
/* @__PURE__ */ jsx("span", { className: "mr-1 font-mono text-muted-foreground", children: l.level.substring(0, 3) }),
|
|
205
211
|
l.message
|