@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.
Files changed (113) hide show
  1. package/lib/browser/ai-configuration/ai-configuration-category-registry.d.ts +29 -0
  2. package/lib/browser/ai-configuration/ai-configuration-category-registry.d.ts.map +1 -0
  3. package/lib/browser/ai-configuration/ai-configuration-category-registry.js +83 -0
  4. package/lib/browser/ai-configuration/ai-configuration-category-registry.js.map +1 -0
  5. package/lib/browser/ai-configuration/ai-configuration-category-registry.spec.d.ts +2 -0
  6. package/lib/browser/ai-configuration/ai-configuration-category-registry.spec.d.ts.map +1 -0
  7. package/lib/browser/ai-configuration/ai-configuration-category-registry.spec.js +122 -0
  8. package/lib/browser/ai-configuration/ai-configuration-category-registry.spec.js.map +1 -0
  9. package/lib/browser/ai-configuration/ai-configuration-category.d.ts +204 -0
  10. package/lib/browser/ai-configuration/ai-configuration-category.d.ts.map +1 -0
  11. package/lib/browser/ai-configuration/ai-configuration-category.js +86 -0
  12. package/lib/browser/ai-configuration/ai-configuration-category.js.map +1 -0
  13. package/lib/browser/ai-configuration/ai-configuration-selection-model.d.ts +15 -0
  14. package/lib/browser/ai-configuration/ai-configuration-selection-model.d.ts.map +1 -0
  15. package/lib/browser/ai-configuration/ai-configuration-selection-model.js +44 -0
  16. package/lib/browser/ai-configuration/ai-configuration-selection-model.js.map +1 -0
  17. package/lib/browser/ai-configuration/ai-configuration-setting-commands.d.ts +48 -0
  18. package/lib/browser/ai-configuration/ai-configuration-setting-commands.d.ts.map +1 -0
  19. package/lib/browser/ai-configuration/ai-configuration-setting-commands.js +98 -0
  20. package/lib/browser/ai-configuration/ai-configuration-setting-commands.js.map +1 -0
  21. package/lib/browser/ai-configuration/ai-configuration-setting-commands.spec.d.ts +2 -0
  22. package/lib/browser/ai-configuration/ai-configuration-setting-commands.spec.d.ts.map +1 -0
  23. package/lib/browser/ai-configuration/ai-configuration-setting-commands.spec.js +70 -0
  24. package/lib/browser/ai-configuration/ai-configuration-setting-commands.spec.js.map +1 -0
  25. package/lib/browser/ai-configuration/components/ai-configuration-components.spec.d.ts +2 -0
  26. package/lib/browser/ai-configuration/components/ai-configuration-components.spec.d.ts.map +1 -0
  27. package/lib/browser/ai-configuration/components/ai-configuration-components.spec.js +596 -0
  28. package/lib/browser/ai-configuration/components/ai-configuration-components.spec.js.map +1 -0
  29. package/lib/browser/ai-configuration/components/ai-configuration-controls.d.ts +118 -0
  30. package/lib/browser/ai-configuration/components/ai-configuration-controls.d.ts.map +1 -0
  31. package/lib/browser/ai-configuration/components/ai-configuration-controls.js +191 -0
  32. package/lib/browser/ai-configuration/components/ai-configuration-controls.js.map +1 -0
  33. package/lib/browser/ai-configuration/components/ai-configuration-item-row.d.ts +57 -0
  34. package/lib/browser/ai-configuration/components/ai-configuration-item-row.d.ts.map +1 -0
  35. package/lib/browser/ai-configuration/components/ai-configuration-item-row.js +48 -0
  36. package/lib/browser/ai-configuration/components/ai-configuration-item-row.js.map +1 -0
  37. package/lib/browser/ai-configuration/components/ai-configuration-origin-badge.d.ts +49 -0
  38. package/lib/browser/ai-configuration/components/ai-configuration-origin-badge.d.ts.map +1 -0
  39. package/lib/browser/ai-configuration/components/ai-configuration-origin-badge.js +79 -0
  40. package/lib/browser/ai-configuration/components/ai-configuration-origin-badge.js.map +1 -0
  41. package/lib/browser/ai-configuration/components/ai-configuration-primitives.d.ts +161 -0
  42. package/lib/browser/ai-configuration/components/ai-configuration-primitives.d.ts.map +1 -0
  43. package/lib/browser/ai-configuration/components/ai-configuration-primitives.js +131 -0
  44. package/lib/browser/ai-configuration/components/ai-configuration-primitives.js.map +1 -0
  45. package/lib/browser/ai-configuration/components/ai-configuration-setting-row.d.ts +54 -0
  46. package/lib/browser/ai-configuration/components/ai-configuration-setting-row.d.ts.map +1 -0
  47. package/lib/browser/ai-configuration/components/ai-configuration-setting-row.js +77 -0
  48. package/lib/browser/ai-configuration/components/ai-configuration-setting-row.js.map +1 -0
  49. package/lib/browser/ai-configuration/components/ai-settings-row-service.d.ts +194 -0
  50. package/lib/browser/ai-configuration/components/ai-settings-row-service.d.ts.map +1 -0
  51. package/lib/browser/ai-configuration/components/ai-settings-row-service.js +352 -0
  52. package/lib/browser/ai-configuration/components/ai-settings-row-service.js.map +1 -0
  53. package/lib/browser/ai-configuration/components/ai-settings-row-service.spec.d.ts +2 -0
  54. package/lib/browser/ai-configuration/components/ai-settings-row-service.spec.d.ts.map +1 -0
  55. package/lib/browser/ai-configuration/components/ai-settings-row-service.spec.js +233 -0
  56. package/lib/browser/ai-configuration/components/ai-settings-row-service.spec.js.map +1 -0
  57. package/lib/browser/ai-configuration/components/ai-settings-row.d.ts +50 -0
  58. package/lib/browser/ai-configuration/components/ai-settings-row.d.ts.map +1 -0
  59. package/lib/browser/ai-configuration/components/ai-settings-row.js +85 -0
  60. package/lib/browser/ai-configuration/components/ai-settings-row.js.map +1 -0
  61. package/lib/browser/ai-configuration/components/collapsible-list.d.ts +65 -0
  62. package/lib/browser/ai-configuration/components/collapsible-list.d.ts.map +1 -0
  63. package/lib/browser/ai-configuration/components/collapsible-list.js +82 -0
  64. package/lib/browser/ai-configuration/components/collapsible-list.js.map +1 -0
  65. package/lib/browser/ai-configuration/components/prompt-customization-dialogs.d.ts +35 -0
  66. package/lib/browser/ai-configuration/components/prompt-customization-dialogs.d.ts.map +1 -0
  67. package/lib/browser/ai-configuration/components/prompt-customization-dialogs.js +83 -0
  68. package/lib/browser/ai-configuration/components/prompt-customization-dialogs.js.map +1 -0
  69. package/lib/browser/ai-configuration/components/variant-set-card.d.ts +25 -0
  70. package/lib/browser/ai-configuration/components/variant-set-card.d.ts.map +1 -0
  71. package/lib/browser/ai-configuration/components/variant-set-card.js +133 -0
  72. package/lib/browser/ai-configuration/components/variant-set-card.js.map +1 -0
  73. package/lib/browser/ai-configuration/renderers/collection-category-renderer.d.ts +44 -0
  74. package/lib/browser/ai-configuration/renderers/collection-category-renderer.d.ts.map +1 -0
  75. package/lib/browser/ai-configuration/renderers/collection-category-renderer.js +106 -0
  76. package/lib/browser/ai-configuration/renderers/collection-category-renderer.js.map +1 -0
  77. package/lib/browser/ai-configuration/renderers/collection-category-renderer.spec.d.ts +2 -0
  78. package/lib/browser/ai-configuration/renderers/collection-category-renderer.spec.d.ts.map +1 -0
  79. package/lib/browser/ai-configuration/renderers/collection-category-renderer.spec.js +120 -0
  80. package/lib/browser/ai-configuration/renderers/collection-category-renderer.spec.js.map +1 -0
  81. package/lib/browser/ai-configuration/renderers/single-page-category-renderer.d.ts +15 -0
  82. package/lib/browser/ai-configuration/renderers/single-page-category-renderer.d.ts.map +1 -0
  83. package/lib/browser/ai-configuration/renderers/single-page-category-renderer.js +20 -0
  84. package/lib/browser/ai-configuration/renderers/single-page-category-renderer.js.map +1 -0
  85. package/lib/browser/ai-core-ui-frontend-module.d.ts +1 -0
  86. package/lib/browser/ai-core-ui-frontend-module.d.ts.map +1 -1
  87. package/lib/browser/ai-core-ui-frontend-module.js +11 -0
  88. package/lib/browser/ai-core-ui-frontend-module.js.map +1 -1
  89. package/package.json +6 -5
  90. package/src/browser/ai-configuration/ai-configuration-category-registry.spec.ts +137 -0
  91. package/src/browser/ai-configuration/ai-configuration-category-registry.ts +79 -0
  92. package/src/browser/ai-configuration/ai-configuration-category.ts +246 -0
  93. package/src/browser/ai-configuration/ai-configuration-selection-model.ts +42 -0
  94. package/src/browser/ai-configuration/ai-configuration-setting-commands.spec.ts +82 -0
  95. package/src/browser/ai-configuration/ai-configuration-setting-commands.ts +104 -0
  96. package/src/browser/ai-configuration/components/ai-configuration-components.spec.ts +655 -0
  97. package/src/browser/ai-configuration/components/ai-configuration-controls.tsx +382 -0
  98. package/src/browser/ai-configuration/components/ai-configuration-item-row.tsx +127 -0
  99. package/src/browser/ai-configuration/components/ai-configuration-origin-badge.tsx +114 -0
  100. package/src/browser/ai-configuration/components/ai-configuration-primitives.tsx +359 -0
  101. package/src/browser/ai-configuration/components/ai-configuration-setting-row.tsx +154 -0
  102. package/src/browser/ai-configuration/components/ai-settings-row-service.spec.ts +275 -0
  103. package/src/browser/ai-configuration/components/ai-settings-row-service.ts +401 -0
  104. package/src/browser/ai-configuration/components/ai-settings-row.tsx +176 -0
  105. package/src/browser/ai-configuration/components/collapsible-list.tsx +205 -0
  106. package/src/browser/ai-configuration/components/prompt-customization-dialogs.ts +89 -0
  107. package/src/browser/ai-configuration/components/variant-set-card.tsx +200 -0
  108. package/src/browser/ai-configuration/renderers/collection-category-renderer.spec.ts +126 -0
  109. package/src/browser/ai-configuration/renderers/collection-category-renderer.tsx +164 -0
  110. package/src/browser/ai-configuration/renderers/single-page-category-renderer.tsx +41 -0
  111. package/src/browser/ai-core-ui-frontend-module.ts +14 -1
  112. package/src/browser/style/ai-configuration-components.css +1410 -0
  113. 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":"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"}
@@ -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"}