@theia/ai-core-ui 1.75.0-next.8 → 1.75.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/lib/browser/ai-configuration/ai-configuration-category-registry.d.ts +29 -0
- package/lib/browser/ai-configuration/ai-configuration-category-registry.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-category-registry.js +83 -0
- package/lib/browser/ai-configuration/ai-configuration-category-registry.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-category-registry.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/ai-configuration-category-registry.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-category-registry.spec.js +122 -0
- package/lib/browser/ai-configuration/ai-configuration-category-registry.spec.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-category.d.ts +204 -0
- package/lib/browser/ai-configuration/ai-configuration-category.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-category.js +86 -0
- package/lib/browser/ai-configuration/ai-configuration-category.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-selection-model.d.ts +15 -0
- package/lib/browser/ai-configuration/ai-configuration-selection-model.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-selection-model.js +44 -0
- package/lib/browser/ai-configuration/ai-configuration-selection-model.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-setting-commands.d.ts +48 -0
- package/lib/browser/ai-configuration/ai-configuration-setting-commands.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-setting-commands.js +98 -0
- package/lib/browser/ai-configuration/ai-configuration-setting-commands.js.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-setting-commands.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/ai-configuration-setting-commands.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/ai-configuration-setting-commands.spec.js +70 -0
- package/lib/browser/ai-configuration/ai-configuration-setting-commands.spec.js.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-components.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/components/ai-configuration-components.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-components.spec.js +596 -0
- package/lib/browser/ai-configuration/components/ai-configuration-components.spec.js.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-controls.d.ts +118 -0
- package/lib/browser/ai-configuration/components/ai-configuration-controls.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-controls.js +191 -0
- package/lib/browser/ai-configuration/components/ai-configuration-controls.js.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-item-row.d.ts +57 -0
- package/lib/browser/ai-configuration/components/ai-configuration-item-row.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-item-row.js +48 -0
- package/lib/browser/ai-configuration/components/ai-configuration-item-row.js.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-origin-badge.d.ts +49 -0
- package/lib/browser/ai-configuration/components/ai-configuration-origin-badge.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-origin-badge.js +79 -0
- package/lib/browser/ai-configuration/components/ai-configuration-origin-badge.js.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-primitives.d.ts +161 -0
- package/lib/browser/ai-configuration/components/ai-configuration-primitives.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-primitives.js +131 -0
- package/lib/browser/ai-configuration/components/ai-configuration-primitives.js.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-setting-row.d.ts +54 -0
- package/lib/browser/ai-configuration/components/ai-configuration-setting-row.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/ai-configuration-setting-row.js +77 -0
- package/lib/browser/ai-configuration/components/ai-configuration-setting-row.js.map +1 -0
- package/lib/browser/ai-configuration/components/ai-settings-row-service.d.ts +194 -0
- package/lib/browser/ai-configuration/components/ai-settings-row-service.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/ai-settings-row-service.js +352 -0
- package/lib/browser/ai-configuration/components/ai-settings-row-service.js.map +1 -0
- package/lib/browser/ai-configuration/components/ai-settings-row-service.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/components/ai-settings-row-service.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/ai-settings-row-service.spec.js +233 -0
- package/lib/browser/ai-configuration/components/ai-settings-row-service.spec.js.map +1 -0
- package/lib/browser/ai-configuration/components/ai-settings-row.d.ts +50 -0
- package/lib/browser/ai-configuration/components/ai-settings-row.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/ai-settings-row.js +85 -0
- package/lib/browser/ai-configuration/components/ai-settings-row.js.map +1 -0
- package/lib/browser/ai-configuration/components/collapsible-list.d.ts +65 -0
- package/lib/browser/ai-configuration/components/collapsible-list.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/collapsible-list.js +82 -0
- package/lib/browser/ai-configuration/components/collapsible-list.js.map +1 -0
- package/lib/browser/ai-configuration/components/prompt-customization-dialogs.d.ts +35 -0
- package/lib/browser/ai-configuration/components/prompt-customization-dialogs.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/prompt-customization-dialogs.js +83 -0
- package/lib/browser/ai-configuration/components/prompt-customization-dialogs.js.map +1 -0
- package/lib/browser/ai-configuration/components/variant-set-card.d.ts +25 -0
- package/lib/browser/ai-configuration/components/variant-set-card.d.ts.map +1 -0
- package/lib/browser/ai-configuration/components/variant-set-card.js +133 -0
- package/lib/browser/ai-configuration/components/variant-set-card.js.map +1 -0
- package/lib/browser/ai-configuration/renderers/collection-category-renderer.d.ts +44 -0
- package/lib/browser/ai-configuration/renderers/collection-category-renderer.d.ts.map +1 -0
- package/lib/browser/ai-configuration/renderers/collection-category-renderer.js +106 -0
- package/lib/browser/ai-configuration/renderers/collection-category-renderer.js.map +1 -0
- package/lib/browser/ai-configuration/renderers/collection-category-renderer.spec.d.ts +2 -0
- package/lib/browser/ai-configuration/renderers/collection-category-renderer.spec.d.ts.map +1 -0
- package/lib/browser/ai-configuration/renderers/collection-category-renderer.spec.js +120 -0
- package/lib/browser/ai-configuration/renderers/collection-category-renderer.spec.js.map +1 -0
- package/lib/browser/ai-configuration/renderers/single-page-category-renderer.d.ts +15 -0
- package/lib/browser/ai-configuration/renderers/single-page-category-renderer.d.ts.map +1 -0
- package/lib/browser/ai-configuration/renderers/single-page-category-renderer.js +20 -0
- package/lib/browser/ai-configuration/renderers/single-page-category-renderer.js.map +1 -0
- package/lib/browser/ai-core-ui-frontend-module.d.ts +1 -0
- package/lib/browser/ai-core-ui-frontend-module.d.ts.map +1 -1
- package/lib/browser/ai-core-ui-frontend-module.js +11 -0
- package/lib/browser/ai-core-ui-frontend-module.js.map +1 -1
- package/package.json +6 -5
- package/src/browser/ai-configuration/ai-configuration-category-registry.spec.ts +137 -0
- package/src/browser/ai-configuration/ai-configuration-category-registry.ts +79 -0
- package/src/browser/ai-configuration/ai-configuration-category.ts +246 -0
- package/src/browser/ai-configuration/ai-configuration-selection-model.ts +42 -0
- package/src/browser/ai-configuration/ai-configuration-setting-commands.spec.ts +82 -0
- package/src/browser/ai-configuration/ai-configuration-setting-commands.ts +104 -0
- package/src/browser/ai-configuration/components/ai-configuration-components.spec.ts +655 -0
- package/src/browser/ai-configuration/components/ai-configuration-controls.tsx +382 -0
- package/src/browser/ai-configuration/components/ai-configuration-item-row.tsx +127 -0
- package/src/browser/ai-configuration/components/ai-configuration-origin-badge.tsx +114 -0
- package/src/browser/ai-configuration/components/ai-configuration-primitives.tsx +359 -0
- package/src/browser/ai-configuration/components/ai-configuration-setting-row.tsx +154 -0
- package/src/browser/ai-configuration/components/ai-settings-row-service.spec.ts +275 -0
- package/src/browser/ai-configuration/components/ai-settings-row-service.ts +401 -0
- package/src/browser/ai-configuration/components/ai-settings-row.tsx +176 -0
- package/src/browser/ai-configuration/components/collapsible-list.tsx +205 -0
- package/src/browser/ai-configuration/components/prompt-customization-dialogs.ts +89 -0
- package/src/browser/ai-configuration/components/variant-set-card.tsx +200 -0
- package/src/browser/ai-configuration/renderers/collection-category-renderer.spec.ts +126 -0
- package/src/browser/ai-configuration/renderers/collection-category-renderer.tsx +164 -0
- package/src/browser/ai-configuration/renderers/single-page-category-renderer.tsx +41 -0
- package/src/browser/ai-core-ui-frontend-module.ts +14 -1
- package/src/browser/style/ai-configuration-components.css +1410 -0
- package/src/browser/style/index.css +17 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import * as React from '@theia/core/shared/react';
|
|
2
|
+
/** Accessible toggle switch backed by a real checkbox; `large` renders the hero-sized variant. */
|
|
3
|
+
export declare const AiToggleSwitch: React.FC<{
|
|
4
|
+
checked: boolean;
|
|
5
|
+
ariaLabel: string;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
large?: boolean;
|
|
8
|
+
onChange: (checked: boolean) => void;
|
|
9
|
+
}>;
|
|
10
|
+
/** Single-line text input committing on blur or Enter (so typing does not write a preference per keystroke). */
|
|
11
|
+
export declare const AiTextInput: React.FC<{
|
|
12
|
+
value: string;
|
|
13
|
+
ariaLabel: string;
|
|
14
|
+
placeholder?: string;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
monospace?: boolean;
|
|
17
|
+
/** Masks the value (`type=password`) and disables autocomplete/spellcheck; used for API keys and secrets. */
|
|
18
|
+
password?: boolean;
|
|
19
|
+
/** Marks the input as invalid (error border) and, with {@link errorMessage}, shows the message beneath it. */
|
|
20
|
+
invalid?: boolean;
|
|
21
|
+
/** Validation message shown under the input when {@link invalid} is set. */
|
|
22
|
+
errorMessage?: string;
|
|
23
|
+
onCommit: (value: string) => void;
|
|
24
|
+
}>;
|
|
25
|
+
/** Keeps a value inside the preference's `minimum`/`maximum`, either of which may be absent. */
|
|
26
|
+
export declare function clampNumber(value: number, min: number | undefined, max: number | undefined): number;
|
|
27
|
+
/** A `− value +` numeric stepper. Commits on blur/Enter (typing) and immediately on the buttons. */
|
|
28
|
+
export declare const AiNumberStepper: React.FC<{
|
|
29
|
+
value: number;
|
|
30
|
+
ariaLabel: string;
|
|
31
|
+
/**
|
|
32
|
+
* Whole numbers only, i.e. the preference is declared `integer`. A `number` preference keeps what the
|
|
33
|
+
* user typed: rounding it would turn a delay of `1.5` seconds into `2` on commit.
|
|
34
|
+
*/
|
|
35
|
+
integer?: boolean;
|
|
36
|
+
min?: number;
|
|
37
|
+
max?: number;
|
|
38
|
+
disabled?: boolean;
|
|
39
|
+
onCommit: (value: number) => void;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* A `string[]` editor mirroring the Settings UI array input: each value is a list row with a hover-revealed
|
|
43
|
+
* remove button, and a final "Add Value…" input (Enter or the + button appends). It reuses the Settings UI's
|
|
44
|
+
* DOM shape and class names (styled by our own `.ai-config-array` rules) so it looks identical, without
|
|
45
|
+
* depending on the preferences package's DI-bound renderer. Values commit immediately on add/remove.
|
|
46
|
+
*/
|
|
47
|
+
export declare const AiArrayInput: React.FC<{
|
|
48
|
+
values: string[];
|
|
49
|
+
ariaLabel: string;
|
|
50
|
+
addPlaceholder: string;
|
|
51
|
+
disabled?: boolean;
|
|
52
|
+
/** Returns why an entry is not acceptable, or `undefined` to accept it. Rejected entries are not added. */
|
|
53
|
+
validate?: (value: string) => string | undefined;
|
|
54
|
+
onChange: (values: string[]) => void;
|
|
55
|
+
}>;
|
|
56
|
+
/** A monospace path input plus a "Browse…" button that delegates folder selection to `onBrowse`. */
|
|
57
|
+
export declare const AiPathInput: React.FC<{
|
|
58
|
+
value: string;
|
|
59
|
+
placeholder: string;
|
|
60
|
+
browseLabel: string;
|
|
61
|
+
disabled?: boolean;
|
|
62
|
+
onCommit: (value: string) => void;
|
|
63
|
+
onBrowse: () => Promise<string | undefined>;
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* A button that hands editing off to the `settings.json` file. Used for preferences whose value is a
|
|
67
|
+
* complex object (or array of objects) that cannot be edited meaningfully through an inline control;
|
|
68
|
+
* clicking it opens `settings.json` focused on the preference, mirroring the Settings view's
|
|
69
|
+
* "Edit in settings.json" link.
|
|
70
|
+
*/
|
|
71
|
+
export declare const AiEditInSettingsButton: React.FC<{
|
|
72
|
+
label: string;
|
|
73
|
+
ariaLabel: string;
|
|
74
|
+
disabled?: boolean;
|
|
75
|
+
onClick: () => void;
|
|
76
|
+
}>;
|
|
77
|
+
/** A single option for {@link AiEnumSelect}. */
|
|
78
|
+
export interface AiEnumOption {
|
|
79
|
+
readonly value: string;
|
|
80
|
+
readonly label: string;
|
|
81
|
+
/** Optional native tooltip, e.g. to surface an option's secondary description. */
|
|
82
|
+
readonly title?: string;
|
|
83
|
+
readonly disabled?: boolean;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* A theme-styled select over a fixed set of options, backed by the shared {@link SelectComponent} so
|
|
87
|
+
* that each option can surface its own description (which native `<option>` cannot) and the control
|
|
88
|
+
* matches the Settings UI. Commits the selected value via `onCommit`.
|
|
89
|
+
*/
|
|
90
|
+
export declare const AiEnumSelect: React.FC<{
|
|
91
|
+
value: string | undefined;
|
|
92
|
+
options: AiEnumOption[];
|
|
93
|
+
ariaLabel: string;
|
|
94
|
+
className?: string;
|
|
95
|
+
disabled?: boolean;
|
|
96
|
+
invalid?: boolean;
|
|
97
|
+
onCommit: (value: string) => void;
|
|
98
|
+
}>;
|
|
99
|
+
/** A single non-"Limited" choice for {@link AiSessionLimitControl}, mapping a label to its magic value. */
|
|
100
|
+
export interface SessionLimitSpecialOption {
|
|
101
|
+
readonly value: number;
|
|
102
|
+
readonly label: string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* A plain numeric input for a session-limit preference. Any special sentinel values (e.g. -1 = unlimited,
|
|
106
|
+
* 0 = don't persist) can be entered directly, instead of being hidden behind a separate
|
|
107
|
+
* "Limited / Unlimited / …" dropdown; the preference description explains what they mean.
|
|
108
|
+
*/
|
|
109
|
+
export declare const AiSessionLimitControl: React.FC<{
|
|
110
|
+
value: number;
|
|
111
|
+
limitedMin: number;
|
|
112
|
+
limitedMax?: number;
|
|
113
|
+
specials: SessionLimitSpecialOption[];
|
|
114
|
+
ariaLabel: string;
|
|
115
|
+
disabled?: boolean;
|
|
116
|
+
onCommit: (value: number) => void;
|
|
117
|
+
}>;
|
|
118
|
+
//# sourceMappingURL=ai-configuration-controls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-configuration-controls.d.ts","sourceRoot":"","sources":["../../../../src/browser/ai-configuration/components/ai-configuration-controls.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AiSessionLimitControl = exports.AiEnumSelect = exports.AiEditInSettingsButton = exports.AiPathInput = exports.AiArrayInput = exports.AiNumberStepper = exports.AiTextInput = exports.AiToggleSwitch = void 0;
|
|
4
|
+
exports.clampNumber = clampNumber;
|
|
5
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
6
|
+
// *****************************************************************************
|
|
7
|
+
// Copyright (C) 2026 EclipseSource and others.
|
|
8
|
+
//
|
|
9
|
+
// This program and the accompanying materials are made available under the
|
|
10
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
11
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
12
|
+
//
|
|
13
|
+
// This Source Code may also be made available under the following Secondary
|
|
14
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
15
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
16
|
+
// with the GNU Classpath Exception which is available at
|
|
17
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
18
|
+
//
|
|
19
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
20
|
+
// *****************************************************************************
|
|
21
|
+
/**
|
|
22
|
+
* Presentational, DI-free form controls shared across the AI configuration pages so that a given
|
|
23
|
+
* logical control (a toggle, a text input, a select, a numeric stepper, a chip/tag editor) looks
|
|
24
|
+
* and behaves the same regardless of which category renders it. Owners pass in the current value
|
|
25
|
+
* and an `onChange`/`onCommit` callback; controls that edit free text commit on blur/Enter so that
|
|
26
|
+
* typing does not write a preference per keystroke.
|
|
27
|
+
*
|
|
28
|
+
* All classes are prefixed `ai-config-` and are styled in `ai-configuration-components.css`.
|
|
29
|
+
*/
|
|
30
|
+
const core_1 = require("@theia/core");
|
|
31
|
+
const browser_1 = require("@theia/core/lib/browser");
|
|
32
|
+
const select_component_1 = require("@theia/core/lib/browser/widgets/select-component");
|
|
33
|
+
const React = require("@theia/core/shared/react");
|
|
34
|
+
/** Accessible toggle switch backed by a real checkbox; `large` renders the hero-sized variant. */
|
|
35
|
+
const AiToggleSwitch = ({ checked, ariaLabel, disabled, large, onChange }) => ((0, jsx_runtime_1.jsxs)("label", { className: `ai-config-switch${large ? ' ai-config-switch-large' : ''}`, children: [(0, jsx_runtime_1.jsx)("input", { type: 'checkbox', checked: checked, disabled: disabled, "aria-label": ariaLabel, onChange: e => onChange(e.target.checked) }), (0, jsx_runtime_1.jsx)("span", { className: 'ai-config-switch-track', children: (0, jsx_runtime_1.jsx)("span", { className: 'ai-config-switch-thumb' }) })] }));
|
|
36
|
+
exports.AiToggleSwitch = AiToggleSwitch;
|
|
37
|
+
/** Single-line text input committing on blur or Enter (so typing does not write a preference per keystroke). */
|
|
38
|
+
const AiTextInput = ({ value, ariaLabel, placeholder, disabled, monospace, password, invalid, errorMessage, onCommit }) => {
|
|
39
|
+
const [draft, setDraft] = React.useState(value);
|
|
40
|
+
React.useEffect(() => setDraft(value), [value]);
|
|
41
|
+
const commitIfChanged = () => {
|
|
42
|
+
if (draft !== value) {
|
|
43
|
+
onCommit(draft);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
return (0, jsx_runtime_1.jsxs)("span", { className: 'ai-config-input-wrap', children: [(0, jsx_runtime_1.jsx)("input", { className: `theia-input ai-config-input${monospace ? ' ai-config-input-mono' : ''}${invalid ? ' error' : ''}`, type: password ? 'password' : 'text', value: draft, "aria-label": ariaLabel, placeholder: placeholder, disabled: disabled, autoComplete: password ? 'off' : undefined, spellCheck: false, onChange: e => setDraft(e.target.value), onBlur: commitIfChanged, onKeyDown: e => { if (e.key === 'Enter') {
|
|
47
|
+
commitIfChanged();
|
|
48
|
+
} } }), invalid && errorMessage && (0, jsx_runtime_1.jsx)("span", { className: 'ai-config-input-error', children: errorMessage })] });
|
|
49
|
+
};
|
|
50
|
+
exports.AiTextInput = AiTextInput;
|
|
51
|
+
/** Keeps a value inside the preference's `minimum`/`maximum`, either of which may be absent. */
|
|
52
|
+
function clampNumber(value, min, max) {
|
|
53
|
+
let result = value;
|
|
54
|
+
if (min !== undefined) {
|
|
55
|
+
result = Math.max(min, result);
|
|
56
|
+
}
|
|
57
|
+
if (max !== undefined) {
|
|
58
|
+
result = Math.min(max, result);
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
/** A `− value +` numeric stepper. Commits on blur/Enter (typing) and immediately on the buttons. */
|
|
63
|
+
const AiNumberStepper = ({ value, ariaLabel, integer, min, max, disabled, onCommit }) => {
|
|
64
|
+
const [draft, setDraft] = React.useState(String(value));
|
|
65
|
+
React.useEffect(() => setDraft(String(value)), [value]);
|
|
66
|
+
const commitDraft = () => {
|
|
67
|
+
const parsed = Number(draft);
|
|
68
|
+
const rounded = integer ? Math.round(parsed) : parsed;
|
|
69
|
+
const next = clampNumber(Number.isNaN(parsed) ? value : rounded, min, max);
|
|
70
|
+
setDraft(String(next));
|
|
71
|
+
if (next !== value) {
|
|
72
|
+
onCommit(next);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const step = (delta) => {
|
|
76
|
+
const next = clampNumber(value + delta, min, max);
|
|
77
|
+
if (next !== value) {
|
|
78
|
+
onCommit(next);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
return (0, jsx_runtime_1.jsx)("span", { className: 'ai-config-stepper-wrap', children: (0, jsx_runtime_1.jsxs)("span", { className: 'ai-config-stepper', children: [(0, jsx_runtime_1.jsx)("button", { type: 'button', className: 'ai-config-stepper-button', "aria-label": core_1.nls.localize('theia/ai/core/aiConfiguration/decrease', 'Decrease'), disabled: disabled || (min !== undefined && value <= min), onClick: () => step(-1), children: "\u2212" }), (0, jsx_runtime_1.jsx)("input", { className: 'ai-config-stepper-input', inputMode: 'numeric', "aria-label": ariaLabel, value: draft, disabled: disabled, onChange: e => setDraft(e.target.value), onBlur: commitDraft, onKeyDown: e => { if (e.key === 'Enter') {
|
|
82
|
+
commitDraft();
|
|
83
|
+
} } }), (0, jsx_runtime_1.jsx)("button", { type: 'button', className: 'ai-config-stepper-button', "aria-label": core_1.nls.localize('theia/ai/core/aiConfiguration/increase', 'Increase'), disabled: disabled || (max !== undefined && value >= max), onClick: () => step(1), children: "+" })] }) });
|
|
84
|
+
};
|
|
85
|
+
exports.AiNumberStepper = AiNumberStepper;
|
|
86
|
+
/**
|
|
87
|
+
* A `string[]` editor mirroring the Settings UI array input: each value is a list row with a hover-revealed
|
|
88
|
+
* remove button, and a final "Add Value…" input (Enter or the + button appends). It reuses the Settings UI's
|
|
89
|
+
* DOM shape and class names (styled by our own `.ai-config-array` rules) so it looks identical, without
|
|
90
|
+
* depending on the preferences package's DI-bound renderer. Values commit immediately on add/remove.
|
|
91
|
+
*/
|
|
92
|
+
const AiArrayInput = ({ values, ariaLabel, addPlaceholder, disabled, validate, onChange }) => {
|
|
93
|
+
const [draft, setDraft] = React.useState('');
|
|
94
|
+
const [error, setError] = React.useState(undefined);
|
|
95
|
+
const addItem = () => {
|
|
96
|
+
const entry = draft.trim();
|
|
97
|
+
if (!entry) {
|
|
98
|
+
setDraft('');
|
|
99
|
+
setError(undefined);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const rejection = validate?.(entry);
|
|
103
|
+
if (rejection) {
|
|
104
|
+
// Keep the text so the user can correct it rather than retype it.
|
|
105
|
+
setError(rejection);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
setError(undefined);
|
|
109
|
+
if (!values.includes(entry)) {
|
|
110
|
+
onChange([...values, entry]);
|
|
111
|
+
}
|
|
112
|
+
setDraft('');
|
|
113
|
+
};
|
|
114
|
+
const removeAt = (index) => onChange(values.filter((_, itemIndex) => itemIndex !== index));
|
|
115
|
+
return (0, jsx_runtime_1.jsxs)("ul", { className: 'preference-array ai-config-array', children: [values.map((value, index) => ((0, jsx_runtime_1.jsxs)("li", { className: 'preference-array-element', children: [(0, jsx_runtime_1.jsx)("span", { className: 'preference-array-element-val', children: value }), (0, jsx_runtime_1.jsx)("span", { className: 'preference-array-element-btn remove-btn', role: 'button', tabIndex: 0, title: core_1.nls.localizeByDefault('Remove'), onClick: () => { if (!disabled) {
|
|
116
|
+
removeAt(index);
|
|
117
|
+
} }, children: (0, jsx_runtime_1.jsx)("i", { className: (0, browser_1.codicon)('close') }) })] }, `${value}-${index}`))), (0, jsx_runtime_1.jsxs)("li", { className: 'ai-config-array-input-row', children: [(0, jsx_runtime_1.jsx)("input", { className: 'preference-array-input theia-input', type: 'text', "aria-label": ariaLabel, placeholder: addPlaceholder, spellCheck: false, value: draft, disabled: disabled, onChange: e => { setDraft(e.target.value); setError(undefined); }, onKeyDown: e => { if (e.key === 'Enter') {
|
|
118
|
+
e.preventDefault();
|
|
119
|
+
addItem();
|
|
120
|
+
} } }), (0, jsx_runtime_1.jsx)("span", { className: `preference-array-element-btn ${(0, browser_1.codicon)('add')}`, role: 'button', tabIndex: 0, title: core_1.nls.localizeByDefault('Add'), onClick: () => { if (!disabled) {
|
|
121
|
+
addItem();
|
|
122
|
+
} } })] }), error && (0, jsx_runtime_1.jsx)("li", { className: 'ai-config-array-error', children: (0, jsx_runtime_1.jsx)("span", { className: 'ai-config-input-error', children: error }) })] });
|
|
123
|
+
};
|
|
124
|
+
exports.AiArrayInput = AiArrayInput;
|
|
125
|
+
/** A monospace path input plus a "Browse…" button that delegates folder selection to `onBrowse`. */
|
|
126
|
+
const AiPathInput = ({ value, placeholder, browseLabel, disabled, onCommit, onBrowse }) => {
|
|
127
|
+
const [draft, setDraft] = React.useState(value);
|
|
128
|
+
React.useEffect(() => setDraft(value), [value]);
|
|
129
|
+
const commitDraft = () => {
|
|
130
|
+
if (draft !== value) {
|
|
131
|
+
onCommit(draft);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
const browse = () => {
|
|
135
|
+
onBrowse().then(picked => {
|
|
136
|
+
if (picked !== undefined) {
|
|
137
|
+
setDraft(picked);
|
|
138
|
+
onCommit(picked);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
return (0, jsx_runtime_1.jsxs)("div", { className: 'ai-config-path-row', children: [(0, jsx_runtime_1.jsx)("input", { className: 'theia-input ai-config-input ai-config-input-mono', type: 'text', value: draft, placeholder: placeholder, disabled: disabled, onChange: e => setDraft(e.target.value), onBlur: commitDraft, onKeyDown: e => { if (e.key === 'Enter') {
|
|
143
|
+
commitDraft();
|
|
144
|
+
} } }), (0, jsx_runtime_1.jsx)("button", { type: 'button', className: 'theia-button secondary', disabled: disabled, onClick: browse, children: browseLabel })] });
|
|
145
|
+
};
|
|
146
|
+
exports.AiPathInput = AiPathInput;
|
|
147
|
+
/**
|
|
148
|
+
* A button that hands editing off to the `settings.json` file. Used for preferences whose value is a
|
|
149
|
+
* complex object (or array of objects) that cannot be edited meaningfully through an inline control;
|
|
150
|
+
* clicking it opens `settings.json` focused on the preference, mirroring the Settings view's
|
|
151
|
+
* "Edit in settings.json" link.
|
|
152
|
+
*/
|
|
153
|
+
const AiEditInSettingsButton = ({ label, ariaLabel, disabled, onClick }) => ((0, jsx_runtime_1.jsxs)("button", { type: 'button', className: 'theia-button secondary ai-config-edit-in-settings', "aria-label": ariaLabel, disabled: disabled, onClick: onClick, children: [(0, jsx_runtime_1.jsx)("span", { className: (0, browser_1.codicon)('edit') }), label] }));
|
|
154
|
+
exports.AiEditInSettingsButton = AiEditInSettingsButton;
|
|
155
|
+
/**
|
|
156
|
+
* A theme-styled select over a fixed set of options, backed by the shared {@link SelectComponent} so
|
|
157
|
+
* that each option can surface its own description (which native `<option>` cannot) and the control
|
|
158
|
+
* matches the Settings UI. Commits the selected value via `onCommit`.
|
|
159
|
+
*/
|
|
160
|
+
const AiEnumSelect = ({ value, options, className, disabled, invalid, onCommit }) => {
|
|
161
|
+
// `title` becomes the per-option `description` shown by SelectComponent's dropdown.
|
|
162
|
+
const selectOptions = React.useMemo(() => options.map(option => ({
|
|
163
|
+
value: option.value,
|
|
164
|
+
label: option.label,
|
|
165
|
+
description: option.title,
|
|
166
|
+
disabled: option.disabled
|
|
167
|
+
})), [options]);
|
|
168
|
+
const handleChange = React.useCallback((option) => {
|
|
169
|
+
// SelectComponent has no whole-control `disabled`; guard the commit so a disabled select never writes.
|
|
170
|
+
if (!disabled && option.value !== undefined) {
|
|
171
|
+
onCommit(option.value);
|
|
172
|
+
}
|
|
173
|
+
}, [disabled, onCommit]);
|
|
174
|
+
const componentClassName = `ai-config-select${invalid ? ' error' : ''}${disabled ? ' disabled' : ''}${className ? ' ' + className : ''}`;
|
|
175
|
+
return (0, jsx_runtime_1.jsx)(select_component_1.SelectComponent, { options: selectOptions, defaultValue: value, onChange: handleChange, className: componentClassName });
|
|
176
|
+
};
|
|
177
|
+
exports.AiEnumSelect = AiEnumSelect;
|
|
178
|
+
/**
|
|
179
|
+
* A plain numeric input for a session-limit preference. Any special sentinel values (e.g. -1 = unlimited,
|
|
180
|
+
* 0 = don't persist) can be entered directly, instead of being hidden behind a separate
|
|
181
|
+
* "Limited / Unlimited / …" dropdown; the preference description explains what they mean.
|
|
182
|
+
*/
|
|
183
|
+
const AiSessionLimitControl = ({ value, limitedMin, limitedMax, specials, ariaLabel, disabled, onCommit }) => {
|
|
184
|
+
// Special sentinel values sit below the "limited" minimum, so the input has to allow entering them.
|
|
185
|
+
const min = specials.reduce((smallest, special) => Math.min(smallest, special.value), limitedMin);
|
|
186
|
+
return (0, jsx_runtime_1.jsx)(exports.AiNumberStepper, { value: value, ariaLabel: ariaLabel,
|
|
187
|
+
// A session limit is a count, so it stays a whole number even though the stepper allows fractions.
|
|
188
|
+
integer: true, min: min, max: limitedMax, disabled: disabled, onCommit: onCommit });
|
|
189
|
+
};
|
|
190
|
+
exports.AiSessionLimitControl = AiSessionLimitControl;
|
|
191
|
+
//# sourceMappingURL=ai-configuration-controls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-configuration-controls.js","sourceRoot":"","sources":["../../../../src/browser/ai-configuration/components/ai-configuration-controls.tsx"],"names":[],"mappings":";;;AA4FA,kCASC;;AArGD,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAEhF;;;;;;;;GAQG;AAEH,sCAAkC;AAClC,qDAAkD;AAClD,uFAAiG;AACjG,kDAAkD;AAElD,kGAAkG;AAC3F,MAAM,cAAc,GAMtB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACxD,mCAAO,SAAS,EAAE,mBAAmB,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,aACzE,kCACI,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,gBACN,SAAS,EACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAC3C,EACF,iCAAM,SAAS,EAAC,wBAAwB,YAAC,iCAAM,SAAS,EAAC,wBAAwB,GAAQ,GAAO,IAC5F,CACX,CAAC;AAjBW,QAAA,cAAc,kBAiBzB;AAEF,gHAAgH;AACzG,MAAM,WAAW,GAanB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE;IACvG,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,GAAS,EAAE;QAC/B,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YAClB,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC;IACF,OAAO,kCAAM,SAAS,EAAC,sBAAsB,aACzC,kCACI,SAAS,EAAE,8BAA8B,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAC7G,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EACpC,KAAK,EAAE,KAAK,gBACA,SAAS,EACrB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAC1C,UAAU,EAAE,KAAK,EACjB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACvC,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;oBAAC,eAAe,EAAE,CAAC;gBAAC,CAAC,CAAC,CAAC,GACnE,EACD,OAAO,IAAI,YAAY,IAAI,iCAAM,SAAS,EAAC,uBAAuB,YAAE,YAAY,GAAQ,IACtF,CAAC;AACZ,CAAC,CAAC;AArCW,QAAA,WAAW,eAqCtB;AAEF,gGAAgG;AAChG,SAAgB,WAAW,CAAC,KAAa,EAAE,GAAuB,EAAE,GAAuB;IACvF,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,oGAAoG;AAC7F,MAAM,eAAe,GAYvB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IACjE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,GAAS,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACtD,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3E,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACvB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACL,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,KAAa,EAAQ,EAAE;QACjC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAClD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACL,CAAC,CAAC;IACF,OAAO,iCAAM,SAAS,EAAC,wBAAwB,YAC3C,kCAAM,SAAS,EAAC,mBAAmB,aAC/B,mCACI,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0BAA0B,gBACxB,UAAG,CAAC,QAAQ,CAAC,wCAAwC,EAAE,UAAU,CAAC,EAC9E,QAAQ,EAAE,QAAQ,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,IAAI,GAAG,CAAC,EACzD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,uBAChB,EACX,kCACI,SAAS,EAAC,yBAAyB,EACnC,SAAS,EAAC,SAAS,gBACP,SAAS,EACrB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACvC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;wBAAC,WAAW,EAAE,CAAC;oBAAC,CAAC,CAAC,CAAC,GAC/D,EACF,mCACI,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0BAA0B,gBACxB,UAAG,CAAC,QAAQ,CAAC,wCAAwC,EAAE,UAAU,CAAC,EAC9E,QAAQ,EAAE,QAAQ,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,IAAI,GAAG,CAAC,EACzD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,kBACf,IACR,GACJ,CAAC;AACZ,CAAC,CAAC;AA1DW,QAAA,eAAe,mBA0D1B;AAEF;;;;;GAKG;AACI,MAAM,YAAY,GAQpB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IACzE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAqB,SAAS,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,GAAS,EAAE;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,QAAQ,CAAC,EAAE,CAAC,CAAC;YACb,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO;QACX,CAAC;QACD,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,SAAS,EAAE,CAAC;YACZ,kEAAkE;YAClE,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO;QACX,CAAC;QACD,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC;IACzG,OAAO,gCAAI,SAAS,EAAC,kCAAkC,aAClD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,gCAAI,SAAS,EAAC,0BAA0B,aACpC,iCAAM,SAAS,EAAC,8BAA8B,YAAE,KAAK,GAAQ,EAC7D,iCACI,SAAS,EAAC,yCAAyC,EACnD,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,UAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EACtC,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;4BAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAAC,CAAC,CAAC,CAAC,YAEtD,8BAAG,SAAS,EAAE,IAAA,iBAAO,EAAC,OAAO,CAAC,GAAM,GACjC,KAVmC,GAAG,KAAK,IAAI,KAAK,EAAE,CAW5D,CACR,CAAC,EACF,gCAAI,SAAS,EAAC,2BAA2B,aACrC,kCACI,SAAS,EAAC,oCAAoC,EAC9C,IAAI,EAAC,MAAM,gBACC,SAAS,EACrB,WAAW,EAAE,cAAc,EAC3B,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACjE,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;4BAAC,CAAC,CAAC,cAAc,EAAE,CAAC;4BAAC,OAAO,EAAE,CAAC;wBAAC,CAAC,CAAC,CAAC,GAC/E,EACF,iCACI,SAAS,EAAE,gCAAgC,IAAA,iBAAO,EAAC,KAAK,CAAC,EAAE,EAC3D,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,UAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,EACnC,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;4BAAC,OAAO,EAAE,CAAC;wBAAC,CAAC,CAAC,CAAC,GAC5C,IACP,EACJ,KAAK,IAAI,+BAAI,SAAS,EAAC,uBAAuB,YAAC,iCAAM,SAAS,EAAC,uBAAuB,YAAE,KAAK,GAAQ,GAAK,IAC1G,CAAC;AACV,CAAC,CAAC;AApEW,QAAA,YAAY,gBAoEvB;AAEF,oGAAoG;AAC7F,MAAM,WAAW,GAOnB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IACvE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,GAAS,EAAE;QAC3B,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YAClB,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,GAAS,EAAE;QACtB,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACrB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACvB,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACjB,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IACF,OAAO,iCAAK,SAAS,EAAC,oBAAoB,aACtC,kCACI,SAAS,EAAC,kDAAkD,EAC5D,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACvC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;oBAAC,WAAW,EAAE,CAAC;gBAAC,CAAC,CAAC,CAAC,GAC/D,EACF,mCAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,wBAAwB,EAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAG,WAAW,GAAU,IAClH,CAAC;AACX,CAAC,CAAC;AApCW,QAAA,WAAW,eAoCtB;AAEF;;;;;GAKG;AACI,MAAM,sBAAsB,GAK9B,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAC9C,oCACI,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mDAAmD,gBACjD,SAAS,EACrB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,aAEhB,iCAAM,SAAS,EAAE,IAAA,iBAAO,EAAC,MAAM,CAAC,GAAS,EACxC,KAAK,IACD,CACZ,CAAC;AAhBW,QAAA,sBAAsB,0BAgBjC;AAWF;;;;GAIG;AACI,MAAM,YAAY,GASpB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;IAChE,oFAAoF;IACpF,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAiB,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7E,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW,EAAE,MAAM,CAAC,KAAK;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC5B,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAChB,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAoB,EAAQ,EAAE;QAClE,uGAAuG;QACvG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzB,MAAM,kBAAkB,GAAG,mBAAmB,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACzI,OAAO,uBAAC,kCAAe,IACnB,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,KAAK,EACnB,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,kBAAkB,GAC/B,CAAC;AACP,CAAC,CAAC;AA9BW,QAAA,YAAY,gBA8BvB;AAQF;;;;GAIG;AACI,MAAM,qBAAqB,GAQ7B,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IAChF,oGAAoG;IACpG,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;IAClG,OAAO,uBAAC,uBAAe,IACnB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS;QACpB,mGAAmG;QACnG,OAAO,EAAE,IAAI,EACb,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GACpB,CAAC;AACP,CAAC,CAAC;AArBW,QAAA,qBAAqB,yBAqBhC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as React from '@theia/core/shared/react';
|
|
2
|
+
import { AiConfigurationItemStatus } from '../ai-configuration-category';
|
|
3
|
+
import { AiConfigurationOrigin } from './ai-configuration-origin-badge';
|
|
4
|
+
export interface AiConfigurationItemRowProps {
|
|
5
|
+
readonly label: string;
|
|
6
|
+
/**
|
|
7
|
+
* Anchors the row for deep links: rendered as `data-ai-config-row-id`, which is what a
|
|
8
|
+
* {@link AiConfigurationSelection.highlight} scrolls to and flashes.
|
|
9
|
+
*/
|
|
10
|
+
readonly rowId?: string;
|
|
11
|
+
/** Renders the label in the code/monospace font (e.g. for shell command patterns), like the Variables list. */
|
|
12
|
+
readonly monospaceLabel?: boolean;
|
|
13
|
+
/** `codicon(...)` class shown before the label. */
|
|
14
|
+
readonly iconClass?: string;
|
|
15
|
+
readonly description?: string;
|
|
16
|
+
/** Short badges shown after the label, for what the item *is*. Use {@link origins} for where it came from. */
|
|
17
|
+
readonly tags?: string[];
|
|
18
|
+
/** Where the item came from, shown after the tags as {@link AiConfigurationOriginBadge}s. */
|
|
19
|
+
readonly origins?: AiConfigurationOrigin[];
|
|
20
|
+
/** Status badge shown on the right (e.g. an alias' resolved model). */
|
|
21
|
+
readonly status?: AiConfigurationItemStatus;
|
|
22
|
+
/** `true` reveals the modified edge (left indicator bar), matching {@link AiConfigurationSettingRow}. */
|
|
23
|
+
readonly modified?: boolean;
|
|
24
|
+
/** Optional trailing content (extra stats, or an inline control such as a select) shown on the right. */
|
|
25
|
+
readonly trailing?: React.ReactNode;
|
|
26
|
+
/**
|
|
27
|
+
* Opens the row's gear context menu (e.g. "Reset Setting") anchored at the cog, which appears on hover in
|
|
28
|
+
* the row's left gutter (mirroring {@link AiConfigurationSettingRow}). Wired the same way as
|
|
29
|
+
* {@link AiConfigurationSettingRow.onOpenMenu} (typically to {@link AiSettingsRowService.openResetMenu}).
|
|
30
|
+
* Omit to hide the gear.
|
|
31
|
+
*/
|
|
32
|
+
readonly onOpenMenu?: (gear: HTMLElement) => void;
|
|
33
|
+
/**
|
|
34
|
+
* Invoked when the row is clicked or activated via keyboard; typically `ctx.navigate(...)`. When provided
|
|
35
|
+
* the whole row is a navigable control ending in a chevron. Omit it for rows that only host an inline
|
|
36
|
+
* control (e.g. the Tools page's per-tool confirmation select): the row is then not clickable and shows
|
|
37
|
+
* no chevron.
|
|
38
|
+
*/
|
|
39
|
+
readonly onSelect?: () => void;
|
|
40
|
+
/**
|
|
41
|
+
* Turns the label into a link that navigates somewhere related to the row without being the row's own
|
|
42
|
+
* detail, e.g. an agent capability pointing at the (globally shared) snippet it pulls in. Distinct from
|
|
43
|
+
* {@link onSelect}: the row itself stays non-navigable, so a row can keep hosting its own control.
|
|
44
|
+
*/
|
|
45
|
+
readonly onActivateLabel?: () => void;
|
|
46
|
+
/** Tooltip for an {@link onActivateLabel} label, explaining where the link goes. */
|
|
47
|
+
readonly labelTooltip?: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Overview row for a collection item: an icon, a label with an optional description, and a right-hand slot
|
|
51
|
+
* for a status badge / stats / an inline control. When {@link AiConfigurationItemRowProps.onSelect} is given
|
|
52
|
+
* the whole row is a single navigable control (click or Enter/Space) that opens the item's detail page,
|
|
53
|
+
* ending in a chevron; without it the row simply presents its trailing control. A flat, list-style
|
|
54
|
+
* alternative to a card grid, matching the Settings and extensions lists; every non-label slot is optional.
|
|
55
|
+
*/
|
|
56
|
+
export declare const AiConfigurationItemRow: React.FC<AiConfigurationItemRowProps>;
|
|
57
|
+
//# sourceMappingURL=ai-configuration-item-row.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-configuration-item-row.d.ts","sourceRoot":"","sources":["../../../../src/browser/ai-configuration/components/ai-configuration-item-row.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAA+B,MAAM,iCAAiC,CAAC;AAGrG,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,+GAA+G;IAC/G,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,mDAAmD;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,8GAA8G;IAC9G,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC3C,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,yBAAyB,CAAC;IAC5C,yGAAyG;IACzG,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,yGAAyG;IACzG,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAClD;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,oFAAoF;IACpF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAkDxE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AiConfigurationItemRow = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
5
|
+
// *****************************************************************************
|
|
6
|
+
// Copyright (C) 2026 EclipseSource and others.
|
|
7
|
+
//
|
|
8
|
+
// This program and the accompanying materials are made available under the
|
|
9
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
10
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
11
|
+
//
|
|
12
|
+
// This Source Code may also be made available under the following Secondary
|
|
13
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
14
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
15
|
+
// with the GNU Classpath Exception which is available at
|
|
16
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
17
|
+
//
|
|
18
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
19
|
+
// *****************************************************************************
|
|
20
|
+
const browser_1 = require("@theia/core/lib/browser");
|
|
21
|
+
const ai_configuration_primitives_1 = require("./ai-configuration-primitives");
|
|
22
|
+
const ai_configuration_origin_badge_1 = require("./ai-configuration-origin-badge");
|
|
23
|
+
const ai_configuration_setting_row_1 = require("./ai-configuration-setting-row");
|
|
24
|
+
/**
|
|
25
|
+
* Overview row for a collection item: an icon, a label with an optional description, and a right-hand slot
|
|
26
|
+
* for a status badge / stats / an inline control. When {@link AiConfigurationItemRowProps.onSelect} is given
|
|
27
|
+
* the whole row is a single navigable control (click or Enter/Space) that opens the item's detail page,
|
|
28
|
+
* ending in a chevron; without it the row simply presents its trailing control. A flat, list-style
|
|
29
|
+
* alternative to a card grid, matching the Settings and extensions lists; every non-label slot is optional.
|
|
30
|
+
*/
|
|
31
|
+
const AiConfigurationItemRow = ({ label, rowId, tags, origins, monospaceLabel, iconClass, description, status, modified, trailing, onOpenMenu, onSelect, onActivateLabel, labelTooltip }) => {
|
|
32
|
+
const navigable = onSelect !== undefined;
|
|
33
|
+
const onKeyDown = (event) => {
|
|
34
|
+
if (onSelect && (event.key === 'Enter' || event.key === ' ')) {
|
|
35
|
+
event.preventDefault();
|
|
36
|
+
onSelect();
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
return (0, jsx_runtime_1.jsxs)("div", { className: `ai-configuration-item-row${navigable ? ' navigable' : ''}${modified ? ' modified' : ''}`, "data-ai-config-row-id": rowId, role: navigable ? 'button' : undefined, tabIndex: navigable ? 0 : undefined, onClick: onSelect, onKeyDown: navigable ? onKeyDown : undefined, children: [onOpenMenu && (0, jsx_runtime_1.jsx)("div", { className: 'ai-configuration-item-row-actions', children: (0, jsx_runtime_1.jsx)(ai_configuration_setting_row_1.AiSettingGearButton, { onOpenMenu: onOpenMenu }) }), iconClass && (0, jsx_runtime_1.jsx)("span", { className: `ai-configuration-item-row-icon ${iconClass}` }), (0, jsx_runtime_1.jsxs)("div", { className: 'ai-configuration-item-row-text', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'ai-configuration-item-row-heading', children: [onActivateLabel
|
|
40
|
+
? (0, jsx_runtime_1.jsx)("button", { type: 'button', className: `ai-configuration-item-row-label link${monospaceLabel ? ' mono' : ''}`, title: labelTooltip, onClick: event => {
|
|
41
|
+
// A navigable row would otherwise also handle the click and open its own detail.
|
|
42
|
+
event.stopPropagation();
|
|
43
|
+
onActivateLabel();
|
|
44
|
+
}, children: label })
|
|
45
|
+
: (0, jsx_runtime_1.jsx)("span", { className: `ai-configuration-item-row-label${monospaceLabel ? ' mono' : ''}`, children: label }), tags && tags.length > 0 && (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-item-row-tags', children: tags.map(tag => (0, jsx_runtime_1.jsx)(ai_configuration_primitives_1.AiConfigurationKindBadge, { label: tag, variant: 'outline' }, tag)) }), (0, jsx_runtime_1.jsx)(ai_configuration_origin_badge_1.AiConfigurationOriginBadges, { origins: origins })] }), description && (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-item-row-description', children: description })] }), (0, jsx_runtime_1.jsxs)("div", { className: 'ai-configuration-item-row-trailing', children: [status && (0, jsx_runtime_1.jsx)(ai_configuration_primitives_1.AiConfigurationStatusBadge, { status: status }), trailing, navigable && (0, jsx_runtime_1.jsx)("span", { className: `ai-configuration-item-row-chevron ${(0, browser_1.codicon)('chevron-right')}`, "aria-hidden": true })] })] });
|
|
46
|
+
};
|
|
47
|
+
exports.AiConfigurationItemRow = AiConfigurationItemRow;
|
|
48
|
+
//# sourceMappingURL=ai-configuration-item-row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-configuration-item-row.js","sourceRoot":"","sources":["../../../../src/browser/ai-configuration/components/ai-configuration-item-row.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { InstalledAgentPluginInfo } from '@theia/ai-core/lib/browser/agent-plugin-ui-bridge';
|
|
2
|
+
import * as React from '@theia/core/shared/react';
|
|
3
|
+
/**
|
|
4
|
+
* Where a configuration entry came from, when that is not the user: an AI registry entry, or an Agent
|
|
5
|
+
* Plugin that contributed it. Built through {@link AiConfigurationOrigin.registry} or
|
|
6
|
+
* {@link AiConfigurationOrigin.agentPlugin} rather than by hand, so that the same origin reads the same
|
|
7
|
+
* on every page - an entry's provenance is surfaced in an overview list, on a detail header and in a
|
|
8
|
+
* collapsible row, and those diverged while each page phrased it for itself.
|
|
9
|
+
*/
|
|
10
|
+
export interface AiConfigurationOrigin {
|
|
11
|
+
/** Short, on one line next to the entry's name; the {@link tooltip} carries the detail. */
|
|
12
|
+
readonly label: string;
|
|
13
|
+
/** `codicon(...)` class shown before the label. */
|
|
14
|
+
readonly iconClass: string;
|
|
15
|
+
readonly tooltip: string;
|
|
16
|
+
/** Opens or reveals the origin. Omit for an origin with nothing to navigate to; the badge is then static. */
|
|
17
|
+
readonly activate?: () => void;
|
|
18
|
+
}
|
|
19
|
+
export declare namespace AiConfigurationOrigin {
|
|
20
|
+
/**
|
|
21
|
+
* An entry installed from, or linked to, an AI registry approval.
|
|
22
|
+
*
|
|
23
|
+
* @param open reveals the entry in the registry UI. Omit it where no registry UI is bound: the entry
|
|
24
|
+
* still came from the registry, which is worth stating, so the badge is shown - just not as a link.
|
|
25
|
+
*/
|
|
26
|
+
function registry(entryId: string, open?: () => void): AiConfigurationOrigin;
|
|
27
|
+
/**
|
|
28
|
+
* An entry contributed by an installed Agent Plugin. Takes the resolved plugin rather than its
|
|
29
|
+
* identifier: a bare identifier is not worth showing, so a caller that cannot resolve one renders no
|
|
30
|
+
* badge at all.
|
|
31
|
+
*/
|
|
32
|
+
function agentPlugin(plugin: InstalledAgentPluginInfo, reveal: () => void): AiConfigurationOrigin;
|
|
33
|
+
}
|
|
34
|
+
export interface AiConfigurationOriginBadgeProps {
|
|
35
|
+
readonly origin: AiConfigurationOrigin;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* One {@link AiConfigurationOrigin} as a pill next to an entry's name: a `<button>` when the origin can
|
|
39
|
+
* be opened, a plain `<span>` when it cannot, so that only what is actually navigable is focusable.
|
|
40
|
+
* The click never bubbles - these sit inside rows and headers that are themselves clickable, and
|
|
41
|
+
* following the badge must not also open the row.
|
|
42
|
+
*/
|
|
43
|
+
export declare const AiConfigurationOriginBadge: React.FC<AiConfigurationOriginBadgeProps>;
|
|
44
|
+
export interface AiConfigurationOriginBadgesProps {
|
|
45
|
+
readonly origins?: AiConfigurationOrigin[];
|
|
46
|
+
}
|
|
47
|
+
/** The origins of one entry, in the order given; nothing at all when it has none, which is the common case. */
|
|
48
|
+
export declare const AiConfigurationOriginBadges: React.FC<AiConfigurationOriginBadgesProps>;
|
|
49
|
+
//# sourceMappingURL=ai-configuration-origin-badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-configuration-origin-badge.d.ts","sourceRoot":"","sources":["../../../../src/browser/ai-configuration/components/ai-configuration-origin-badge.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IAClC,2FAA2F;IAC3F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,yBAAiB,qBAAqB,CAAC;IAEnC;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,IAAI,GAAG,qBAAqB,CASlF;IAED;;;;OAIG;IACH,SAAgB,WAAW,CAAC,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,qBAAqB,CASvG;CACJ;AAED,MAAM,WAAW,+BAA+B;IAC5C,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;CAC1C;AAED;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CAiBhF,CAAC;AAEF,MAAM,WAAW,gCAAgC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC9C;AAED,+GAA+G;AAC/G,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CAKhE,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AiConfigurationOriginBadges = exports.AiConfigurationOriginBadge = exports.AiConfigurationOrigin = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
5
|
+
// *****************************************************************************
|
|
6
|
+
// Copyright (C) 2026 EclipseSource and others.
|
|
7
|
+
//
|
|
8
|
+
// This program and the accompanying materials are made available under the
|
|
9
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
10
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
11
|
+
//
|
|
12
|
+
// This Source Code may also be made available under the following Secondary
|
|
13
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
14
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
15
|
+
// with the GNU Classpath Exception which is available at
|
|
16
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
17
|
+
//
|
|
18
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
19
|
+
// *****************************************************************************
|
|
20
|
+
const core_1 = require("@theia/core");
|
|
21
|
+
const browser_1 = require("@theia/core/lib/browser");
|
|
22
|
+
var AiConfigurationOrigin;
|
|
23
|
+
(function (AiConfigurationOrigin) {
|
|
24
|
+
/**
|
|
25
|
+
* An entry installed from, or linked to, an AI registry approval.
|
|
26
|
+
*
|
|
27
|
+
* @param open reveals the entry in the registry UI. Omit it where no registry UI is bound: the entry
|
|
28
|
+
* still came from the registry, which is worth stating, so the badge is shown - just not as a link.
|
|
29
|
+
*/
|
|
30
|
+
function registry(entryId, open) {
|
|
31
|
+
return {
|
|
32
|
+
label: core_1.nls.localize('theia/ai/core/aiConfiguration/origin/fromRegistry', 'From registry'),
|
|
33
|
+
iconClass: (0, browser_1.codicon)('link-external'),
|
|
34
|
+
tooltip: open
|
|
35
|
+
? core_1.nls.localize('theia/ai/core/aiConfiguration/origin/openInRegistry', 'Open in AI registry: {0}', entryId)
|
|
36
|
+
: core_1.nls.localize('theia/ai/core/aiConfiguration/origin/registryEntry', 'AI registry entry: {0}', entryId),
|
|
37
|
+
activate: open
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
AiConfigurationOrigin.registry = registry;
|
|
41
|
+
/**
|
|
42
|
+
* An entry contributed by an installed Agent Plugin. Takes the resolved plugin rather than its
|
|
43
|
+
* identifier: a bare identifier is not worth showing, so a caller that cannot resolve one renders no
|
|
44
|
+
* badge at all.
|
|
45
|
+
*/
|
|
46
|
+
function agentPlugin(plugin, reveal) {
|
|
47
|
+
return {
|
|
48
|
+
label: core_1.nls.localize('theia/ai/core/aiConfiguration/origin/viaAgentPlugin', 'via {0}', plugin.name),
|
|
49
|
+
// `package`, matching the Agent Plugin cards in the Extensions view; `extensions` is the icon
|
|
50
|
+
// that view's VS Code extension section owns.
|
|
51
|
+
iconClass: (0, browser_1.codicon)('package'),
|
|
52
|
+
tooltip: core_1.nls.localize('theia/ai/core/aiConfiguration/origin/openAgentPlugin', 'Open the Agent Plugin that provides this: {0}', plugin.name),
|
|
53
|
+
activate: reveal
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
AiConfigurationOrigin.agentPlugin = agentPlugin;
|
|
57
|
+
})(AiConfigurationOrigin || (exports.AiConfigurationOrigin = AiConfigurationOrigin = {}));
|
|
58
|
+
/**
|
|
59
|
+
* One {@link AiConfigurationOrigin} as a pill next to an entry's name: a `<button>` when the origin can
|
|
60
|
+
* be opened, a plain `<span>` when it cannot, so that only what is actually navigable is focusable.
|
|
61
|
+
* The click never bubbles - these sit inside rows and headers that are themselves clickable, and
|
|
62
|
+
* following the badge must not also open the row.
|
|
63
|
+
*/
|
|
64
|
+
const AiConfigurationOriginBadge = ({ origin }) => {
|
|
65
|
+
const content = (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { "aria-hidden": 'true', className: `ai-configuration-origin-badge-icon ${origin.iconClass}` }), (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-origin-badge-label', children: origin.label })] });
|
|
66
|
+
return origin.activate
|
|
67
|
+
? (0, jsx_runtime_1.jsx)("button", { type: 'button', className: 'ai-configuration-origin-badge activatable', title: origin.tooltip, "aria-label": origin.tooltip, onClick: event => {
|
|
68
|
+
event.stopPropagation();
|
|
69
|
+
origin.activate();
|
|
70
|
+
}, children: content })
|
|
71
|
+
: (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-origin-badge', title: origin.tooltip, children: content });
|
|
72
|
+
};
|
|
73
|
+
exports.AiConfigurationOriginBadge = AiConfigurationOriginBadge;
|
|
74
|
+
/** The origins of one entry, in the order given; nothing at all when it has none, which is the common case. */
|
|
75
|
+
const AiConfigurationOriginBadges = ({ origins }) => origins && origins.length > 0
|
|
76
|
+
? (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-origin-badges', children: origins.map(origin => (0, jsx_runtime_1.jsx)(exports.AiConfigurationOriginBadge, { origin: origin }, origin.label)) })
|
|
77
|
+
: undefined;
|
|
78
|
+
exports.AiConfigurationOriginBadges = AiConfigurationOriginBadges;
|
|
79
|
+
//# sourceMappingURL=ai-configuration-origin-badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-configuration-origin-badge.js","sourceRoot":"","sources":["../../../../src/browser/ai-configuration/components/ai-configuration-origin-badge.tsx"],"names":[],"mappings":";;;;AAAA,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAEhF,sCAAkC;AAClC,qDAAkD;AAqBlD,IAAiB,qBAAqB,CAkCrC;AAlCD,WAAiB,qBAAqB;IAElC;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,OAAe,EAAE,IAAiB;QACvD,OAAO;YACH,KAAK,EAAE,UAAG,CAAC,QAAQ,CAAC,mDAAmD,EAAE,eAAe,CAAC;YACzF,SAAS,EAAE,IAAA,iBAAO,EAAC,eAAe,CAAC;YACnC,OAAO,EAAE,IAAI;gBACT,CAAC,CAAC,UAAG,CAAC,QAAQ,CAAC,qDAAqD,EAAE,0BAA0B,EAAE,OAAO,CAAC;gBAC1G,CAAC,CAAC,UAAG,CAAC,QAAQ,CAAC,oDAAoD,EAAE,wBAAwB,EAAE,OAAO,CAAC;YAC3G,QAAQ,EAAE,IAAI;SACjB,CAAC;IACN,CAAC;IATe,8BAAQ,WASvB,CAAA;IAED;;;;OAIG;IACH,SAAgB,WAAW,CAAC,MAAgC,EAAE,MAAkB;QAC5E,OAAO;YACH,KAAK,EAAE,UAAG,CAAC,QAAQ,CAAC,qDAAqD,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC;YAClG,8FAA8F;YAC9F,8CAA8C;YAC9C,SAAS,EAAE,IAAA,iBAAO,EAAC,SAAS,CAAC;YAC7B,OAAO,EAAE,UAAG,CAAC,QAAQ,CAAC,sDAAsD,EAAE,+CAA+C,EAAE,MAAM,CAAC,IAAI,CAAC;YAC3I,QAAQ,EAAE,MAAM;SACnB,CAAC;IACN,CAAC;IATe,iCAAW,cAS1B,CAAA;AACL,CAAC,EAlCgB,qBAAqB,qCAArB,qBAAqB,QAkCrC;AAMD;;;;;GAKG;AACI,MAAM,0BAA0B,GAA8C,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IAChG,MAAM,OAAO,GAAG,6DACZ,gDAAkB,MAAM,EAAC,SAAS,EAAE,sCAAsC,MAAM,CAAC,SAAS,EAAE,GAAS,EACrG,iCAAM,SAAS,EAAC,qCAAqC,YAAE,MAAM,CAAC,KAAK,GAAQ,IAC5E,CAAC;IACJ,OAAO,MAAM,CAAC,QAAQ;QAClB,CAAC,CAAC,mCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,2CAA2C,EACrD,KAAK,EAAE,MAAM,CAAC,OAAO,gBACT,MAAM,CAAC,OAAO,EAC1B,OAAO,EAAE,KAAK,CAAC,EAAE;gBACb,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,MAAM,CAAC,QAAS,EAAE,CAAC;YACvB,CAAC,YACH,OAAO,GAAU;QACnB,CAAC,CAAC,iCAAM,SAAS,EAAC,+BAA+B,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,OAAO,GAAQ,CAAC;AAClG,CAAC,CAAC;AAjBW,QAAA,0BAA0B,8BAiBrC;AAMF,+GAA+G;AACxG,MAAM,2BAA2B,GAA+C,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACnG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;IACzB,CAAC,CAAC,iCAAM,SAAS,EAAC,gCAAgC,YAC7C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,uBAAC,kCAA0B,IAAoB,MAAM,EAAE,MAAM,IAA5B,MAAM,CAAC,KAAK,CAAoB,CAAC,GACtF;IACP,CAAC,CAAC,SAAS,CAAC;AALP,QAAA,2BAA2B,+BAKpB"}
|