@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,161 @@
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
+ /**
5
+ * Presentational, DI-free display primitives shared across the AI configuration pages: badges, the
6
+ * titled section container, the empty-state placeholder, the "Add …" action, the markdown description
7
+ * host, the in-list filter input and the item detail header. Grouped here (rather than one file per
8
+ * component) so that the small, stateless building blocks live together. Controls that edit a
9
+ * preference value live in `ai-configuration-controls.tsx`, and larger composites (item rows, setting
10
+ * rows and cards) keep their own files.
11
+ *
12
+ * All classes are prefixed `ai-configuration-` and are styled in `ai-configuration-components.css`.
13
+ */
14
+ export interface AiConfigurationStatusBadgeProps {
15
+ readonly status: AiConfigurationItemStatus;
16
+ }
17
+ /**
18
+ * Labeled status affordance: a colored dot paired with its text label, so the
19
+ * state is legible at a glance rather than encoded in color alone. The full
20
+ * detail (if any) stays on hover.
21
+ */
22
+ export declare const AiConfigurationStatusBadge: React.FC<AiConfigurationStatusBadgeProps>;
23
+ /**
24
+ * Visual weight of a {@link AiConfigurationKindBadge}. `info` for the primary kind of a page
25
+ * (e.g. "Slash Command"), `outline` for secondary/scope labels (e.g. "Built-in", "User"),
26
+ * `default` for neutral tags.
27
+ */
28
+ export type AiConfigurationKindBadgeVariant = 'default' | 'info' | 'outline';
29
+ export interface AiConfigurationKindBadgeProps {
30
+ readonly label: string;
31
+ readonly variant?: AiConfigurationKindBadgeVariant;
32
+ /** `codicon(...)` class shown before the label. */
33
+ readonly iconClass?: string;
34
+ /** Hover text; defaults to {@link label}. */
35
+ readonly title?: string;
36
+ }
37
+ /**
38
+ * A small labeled pill classifying an item or a customization scope: "Variant Set", "Fragment",
39
+ * "Slash Command", "Skill", "Built-in", "User", "Workspace". Complements the color-coded
40
+ * {@link AiConfigurationStatusBadge} used for on/off/warn/error state.
41
+ */
42
+ export declare const AiConfigurationKindBadge: React.FC<AiConfigurationKindBadgeProps>;
43
+ export interface AiConfigurationSectionProps {
44
+ /** Group title. Omit for an untitled group of rows. */
45
+ readonly title?: string;
46
+ /** Optional short subtitle shown next to the title. */
47
+ readonly subtitle?: string;
48
+ /**
49
+ * Number of entries in the section, shown next to the title. Lets a long list state its size without
50
+ * being scrolled, which is the point of folding it in the first place.
51
+ */
52
+ readonly count?: number;
53
+ /**
54
+ * Lets the user fold the section away by clicking its title line. Sections start expanded: these pages
55
+ * exist to be browsed, so nothing is hidden until the user chooses to hide it.
56
+ */
57
+ readonly collapsible?: boolean;
58
+ /**
59
+ * Keeps the content visible regardless of the user's fold state, e.g. while a filter is active — a match
60
+ * inside a folded section would otherwise be silently unreachable.
61
+ */
62
+ readonly forceExpanded?: boolean;
63
+ /** Optional actions shown on the title line, aligned to the right (e.g. a toolbar of "copy all" buttons). */
64
+ readonly actions?: React.ReactNode;
65
+ readonly children: React.ReactNode;
66
+ readonly className?: string;
67
+ }
68
+ /**
69
+ * A titled group of settings rows in a detail page. Generalizes the earlier
70
+ * `ConfigurationSection` and adds an optional subtitle and a right-aligned actions slot on the title line,
71
+ * plus an optional entry count and folding for the sections that hold long lists.
72
+ */
73
+ export declare const AiConfigurationSection: React.FC<AiConfigurationSectionProps>;
74
+ export interface AiConfigurationCalloutProps {
75
+ /** What the action does and what it affects; the action is only safe to press once this is read. */
76
+ readonly message: string;
77
+ /** The single action the callout offers, e.g. a "Reset All" button. */
78
+ readonly action: React.ReactNode;
79
+ }
80
+ /**
81
+ * A page-level offer: one line of explanation next to one action ("allow the default tools", "reset every
82
+ * customization"). Rendered as a box above the page content rather than a bare button on the filter line,
83
+ * so the consequence is stated where the action is.
84
+ */
85
+ export declare const AiConfigurationCallout: React.FC<AiConfigurationCalloutProps>;
86
+ export interface AiConfigurationValueRowProps {
87
+ /** Omit when the surrounding section already names the value (e.g. a "Location" section). */
88
+ readonly label?: string;
89
+ /** The value as shown and copied; rendered in the code font since these are ids, paths and patterns. */
90
+ readonly value: string;
91
+ /** Omit to render the value without a copy affordance. */
92
+ readonly onCopy?: (value: string) => void;
93
+ }
94
+ /**
95
+ * A read-only value with its label — an id, a file path, a frontmatter entry — and an optional copy button.
96
+ * These values exist to be used elsewhere (pasted into a prompt, a terminal, a settings file), so copying
97
+ * them should not require selecting the text by hand.
98
+ */
99
+ export declare const AiConfigurationValueRow: React.FC<AiConfigurationValueRowProps>;
100
+ export interface AiConfigurationEmptyStateProps {
101
+ readonly message: string;
102
+ /** `codicon(...)` class shown above the message. */
103
+ readonly iconClass?: string;
104
+ /** Optional call-to-action rendered under the message (e.g. an add button). */
105
+ readonly action?: React.ReactNode;
106
+ readonly className?: string;
107
+ }
108
+ /** Placeholder shown when a collection has no items or a filter matches nothing. */
109
+ export declare const AiConfigurationEmptyState: React.FC<AiConfigurationEmptyStateProps>;
110
+ export interface AiConfigurationAddActionProps {
111
+ readonly label: string;
112
+ /** `codicon(...)` class; defaults to the `add` icon. */
113
+ readonly iconClass?: string;
114
+ readonly disabled?: boolean;
115
+ readonly onClick: () => void;
116
+ }
117
+ /** "Add …" button used on collection overviews and in empty states. */
118
+ export declare const AiConfigurationAddAction: React.FC<AiConfigurationAddActionProps>;
119
+ export interface AiMarkdownDescriptionProps {
120
+ /** Renders (trusted, already-localized) markdown into an element, e.g. via the core `MarkdownRenderer`. */
121
+ readonly renderMarkdown: (markdown: string) => HTMLElement;
122
+ readonly markdown: string;
123
+ /** Wrapper class; defaults to the shared settings-row description styling. */
124
+ readonly className?: string;
125
+ }
126
+ /**
127
+ * Renders a (trusted, already-localized) markdown description via the provided renderer into a
128
+ * managed element. Shared by every AI configuration page so descriptions render consistently.
129
+ */
130
+ export declare const AiMarkdownDescription: React.FC<AiMarkdownDescriptionProps>;
131
+ export interface AiConfigurationFilterInputProps {
132
+ readonly value: string;
133
+ readonly onChange: (value: string) => void;
134
+ readonly placeholder?: string;
135
+ }
136
+ /**
137
+ * In-list filter input: a controlled text field (the owning widget holds the value) with a leading filter
138
+ * icon, a trailing clear button, and Escape-to-clear — mirroring the view's search input.
139
+ */
140
+ export declare const AiConfigurationFilterInput: React.FC<AiConfigurationFilterInputProps>;
141
+ export interface AiConfigurationItemDetailHeaderProps {
142
+ readonly title: string;
143
+ /** `codicon(...)` class shown before the title. */
144
+ readonly iconClass?: string;
145
+ /** Secondary line under the title (e.g. an id or provider). */
146
+ readonly subtitle?: string;
147
+ /** Status badge shown next to the title. */
148
+ readonly status?: AiConfigurationItemStatus;
149
+ /**
150
+ * Where the item came from, shown right after the title - the same badges the overview list shows,
151
+ * so provenance does not get a second look on the detail page.
152
+ */
153
+ readonly origins?: AiConfigurationOrigin[];
154
+ /** Optional inline content shown after the title and the origin badges. */
155
+ readonly titleSuffix?: React.ReactNode;
156
+ /** Trailing slot for header actions and toggles (buttons, switches). */
157
+ readonly actions?: React.ReactNode;
158
+ }
159
+ /** Header of a collection item's detail page: icon, title, subtitle, status badge and an actions slot. */
160
+ export declare const AiConfigurationItemDetailHeader: React.FC<AiConfigurationItemDetailHeaderProps>;
161
+ //# sourceMappingURL=ai-configuration-primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-configuration-primitives.d.ts","sourceRoot":"","sources":["../../../../src/browser/ai-configuration/components/ai-configuration-primitives.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AiConfigurationItemDetailHeader = exports.AiConfigurationFilterInput = exports.AiMarkdownDescription = exports.AiConfigurationAddAction = exports.AiConfigurationEmptyState = exports.AiConfigurationValueRow = exports.AiConfigurationCallout = exports.AiConfigurationSection = exports.AiConfigurationKindBadge = exports.AiConfigurationStatusBadge = 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
+ const React = require("@theia/core/shared/react");
23
+ const ai_configuration_origin_badge_1 = require("./ai-configuration-origin-badge");
24
+ /**
25
+ * Labeled status affordance: a colored dot paired with its text label, so the
26
+ * state is legible at a glance rather than encoded in color alone. The full
27
+ * detail (if any) stays on hover.
28
+ */
29
+ const AiConfigurationStatusBadge = ({ status }) => ((0, jsx_runtime_1.jsxs)("span", { className: 'ai-configuration-status-badge', title: status.tooltip ?? status.label, children: [(0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-status-badge-label', children: status.label }), (0, jsx_runtime_1.jsx)("span", { className: `ai-configuration-status ai-configuration-status-${status.kind}`, "aria-hidden": true })] }));
30
+ exports.AiConfigurationStatusBadge = AiConfigurationStatusBadge;
31
+ /**
32
+ * A small labeled pill classifying an item or a customization scope: "Variant Set", "Fragment",
33
+ * "Slash Command", "Skill", "Built-in", "User", "Workspace". Complements the color-coded
34
+ * {@link AiConfigurationStatusBadge} used for on/off/warn/error state.
35
+ */
36
+ const AiConfigurationKindBadge = ({ label, variant = 'default', iconClass, title }) => ((0, jsx_runtime_1.jsxs)("span", { className: `ai-configuration-kind-badge ai-configuration-kind-badge-${variant}`, title: title ?? label, children: [iconClass && (0, jsx_runtime_1.jsx)("span", { className: `ai-configuration-kind-badge-icon ${iconClass}`, "aria-hidden": true }), (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-kind-badge-label', children: label })] }));
37
+ exports.AiConfigurationKindBadge = AiConfigurationKindBadge;
38
+ /**
39
+ * A titled group of settings rows in a detail page. Generalizes the earlier
40
+ * `ConfigurationSection` and adds an optional subtitle and a right-aligned actions slot on the title line,
41
+ * plus an optional entry count and folding for the sections that hold long lists.
42
+ */
43
+ const AiConfigurationSection = ({ title, subtitle, count, collapsible, forceExpanded, actions, children, className }) => {
44
+ const [expanded, setExpanded] = React.useState(true);
45
+ const toggle = React.useCallback(() => setExpanded(previous => !previous), []);
46
+ const onKeyDown = React.useCallback((event) => {
47
+ // Only the title line itself toggles; keystrokes in the actions slot must not fold the section.
48
+ if (event.target === event.currentTarget && (event.key === 'Enter' || event.key === ' ')) {
49
+ event.preventDefault();
50
+ toggle();
51
+ }
52
+ }, [toggle]);
53
+ const foldable = collapsible === true && title !== undefined;
54
+ const showContent = !foldable || forceExpanded === true || expanded;
55
+ return (0, jsx_runtime_1.jsxs)("div", { className: `ai-configuration-section ${className ?? ''}`, children: [(title !== undefined || actions) && (0, jsx_runtime_1.jsxs)("div", { className: `ai-configuration-section-title${foldable ? ' foldable' : ''}`, role: foldable ? 'button' : undefined, tabIndex: foldable ? 0 : undefined, "aria-expanded": foldable ? showContent : undefined, onClick: foldable ? toggle : undefined, onKeyDown: foldable ? onKeyDown : undefined, children: [foldable && (0, jsx_runtime_1.jsx)("span", { "aria-hidden": 'true', className: `ai-configuration-section-chevron ${(0, browser_1.codicon)(showContent ? 'chevron-down' : 'chevron-right')}` }), title !== undefined && (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-section-title-text', children: title }), count !== undefined && (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-section-count', children: count }), subtitle !== undefined && (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-section-subtitle', children: subtitle }), actions && (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-section-title-actions', children: actions })] }), showContent && (0, jsx_runtime_1.jsx)("div", { className: 'ai-configuration-section-content', children: children })] });
56
+ };
57
+ exports.AiConfigurationSection = AiConfigurationSection;
58
+ /**
59
+ * A page-level offer: one line of explanation next to one action ("allow the default tools", "reset every
60
+ * customization"). Rendered as a box above the page content rather than a bare button on the filter line,
61
+ * so the consequence is stated where the action is.
62
+ */
63
+ const AiConfigurationCallout = ({ message, action }) => (0, jsx_runtime_1.jsxs)("div", { className: 'ai-configuration-callout', children: [(0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-callout-text', children: message }), action] });
64
+ exports.AiConfigurationCallout = AiConfigurationCallout;
65
+ /**
66
+ * A read-only value with its label — an id, a file path, a frontmatter entry — and an optional copy button.
67
+ * These values exist to be used elsewhere (pasted into a prompt, a terminal, a settings file), so copying
68
+ * them should not require selecting the text by hand.
69
+ */
70
+ const AiConfigurationValueRow = ({ label, value, onCopy }) => {
71
+ const [copied, setCopied] = React.useState(false);
72
+ const timeout = React.useRef(undefined);
73
+ React.useEffect(() => () => {
74
+ if (timeout.current !== undefined) {
75
+ clearTimeout(timeout.current);
76
+ }
77
+ }, []);
78
+ const copyLabel = core_1.nls.localizeByDefault('Copy');
79
+ return (0, jsx_runtime_1.jsxs)("div", { className: 'ai-configuration-value-row', children: [label !== undefined && (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-value-row-label', children: label }), (0, jsx_runtime_1.jsxs)("span", { className: 'ai-configuration-value-row-field', children: [(0, jsx_runtime_1.jsx)("code", { className: 'ai-configuration-value-row-value', children: value }), onCopy && (0, jsx_runtime_1.jsx)("button", { type: 'button', className: 'ai-configuration-value-row-copy', title: copyLabel, "aria-label": copyLabel, onClick: () => {
80
+ onCopy(value);
81
+ setCopied(true);
82
+ if (timeout.current !== undefined) {
83
+ clearTimeout(timeout.current);
84
+ }
85
+ timeout.current = setTimeout(() => setCopied(false), 1500);
86
+ }, children: (0, jsx_runtime_1.jsx)("span", { "aria-hidden": 'true', className: (0, browser_1.codicon)(copied ? 'check' : 'copy') }) })] }), (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-visually-hidden', "aria-live": 'polite', children: copied ? core_1.nls.localizeByDefault('Copied') : '' })] });
87
+ };
88
+ exports.AiConfigurationValueRow = AiConfigurationValueRow;
89
+ /** Placeholder shown when a collection has no items or a filter matches nothing. */
90
+ const AiConfigurationEmptyState = ({ message, iconClass, action, className }) => ((0, jsx_runtime_1.jsxs)("div", { className: `ai-configuration-empty-state ${className ?? ''}`, children: [iconClass && (0, jsx_runtime_1.jsx)("span", { className: `ai-configuration-empty-state-icon ${iconClass}` }), (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-empty-state-message', children: message }), action !== undefined && (0, jsx_runtime_1.jsx)("div", { className: 'ai-configuration-empty-state-action', children: action })] }));
91
+ exports.AiConfigurationEmptyState = AiConfigurationEmptyState;
92
+ /** "Add …" button used on collection overviews and in empty states. */
93
+ const AiConfigurationAddAction = ({ label, iconClass, disabled, onClick }) => ((0, jsx_runtime_1.jsxs)("button", { className: 'theia-button ai-configuration-add-action', disabled: disabled, onClick: onClick, children: [(0, jsx_runtime_1.jsx)("span", { className: iconClass ?? (0, browser_1.codicon)('add') }), (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-add-action-label', children: label })] }));
94
+ exports.AiConfigurationAddAction = AiConfigurationAddAction;
95
+ /**
96
+ * Renders a (trusted, already-localized) markdown description via the provided renderer into a
97
+ * managed element. Shared by every AI configuration page so descriptions render consistently.
98
+ */
99
+ const AiMarkdownDescription = ({ renderMarkdown, markdown, className }) => {
100
+ // eslint-disable-next-line no-null/no-null
101
+ const host = React.useRef(null);
102
+ React.useEffect(() => {
103
+ const node = host.current;
104
+ if (!node) {
105
+ return;
106
+ }
107
+ node.replaceChildren(renderMarkdown(markdown));
108
+ return () => node.replaceChildren();
109
+ }, [renderMarkdown, markdown]);
110
+ return (0, jsx_runtime_1.jsx)("div", { className: className ?? 'ai-settings-row-description', ref: host });
111
+ };
112
+ exports.AiMarkdownDescription = AiMarkdownDescription;
113
+ /**
114
+ * In-list filter input: a controlled text field (the owning widget holds the value) with a leading filter
115
+ * icon, a trailing clear button, and Escape-to-clear — mirroring the view's search input.
116
+ */
117
+ const AiConfigurationFilterInput = ({ value, onChange, placeholder }) => {
118
+ const onKeyDown = React.useCallback((event) => {
119
+ if (event.key === 'Escape' && value.length > 0) {
120
+ event.preventDefault();
121
+ onChange('');
122
+ }
123
+ }, [value, onChange]);
124
+ const clearLabel = core_1.nls.localizeByDefault('Clear');
125
+ return (0, jsx_runtime_1.jsxs)("div", { className: 'ai-configuration-filter-input', children: [(0, jsx_runtime_1.jsx)("span", { className: `ai-configuration-filter-input-icon ${(0, browser_1.codicon)('filter')}` }), (0, jsx_runtime_1.jsx)("input", { className: 'theia-input', type: 'text', spellCheck: false, value: value, placeholder: placeholder ?? core_1.nls.localizeByDefault('Filter'), onChange: e => onChange(e.target.value), onKeyDown: onKeyDown }), value.length > 0 && (0, jsx_runtime_1.jsx)("button", { type: 'button', className: `ai-configuration-filter-input-clear ${(0, browser_1.codicon)('close')}`, title: clearLabel, "aria-label": clearLabel, onClick: () => onChange('') })] });
126
+ };
127
+ exports.AiConfigurationFilterInput = AiConfigurationFilterInput;
128
+ /** Header of a collection item's detail page: icon, title, subtitle, status badge and an actions slot. */
129
+ const AiConfigurationItemDetailHeader = ({ title, iconClass, subtitle, status, origins, titleSuffix, actions }) => ((0, jsx_runtime_1.jsxs)("div", { className: 'ai-configuration-item-detail-header', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'ai-configuration-item-detail-header-heading', children: [iconClass && (0, jsx_runtime_1.jsx)("span", { className: `ai-configuration-item-detail-header-icon ${iconClass}` }), (0, jsx_runtime_1.jsxs)("div", { className: 'ai-configuration-item-detail-header-titles', children: [(0, jsx_runtime_1.jsxs)("span", { className: 'ai-configuration-item-detail-header-title-row', children: [(0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-item-detail-header-title', children: title }), (0, jsx_runtime_1.jsx)(ai_configuration_origin_badge_1.AiConfigurationOriginBadges, { origins: origins }), titleSuffix] }), subtitle !== undefined && (0, jsx_runtime_1.jsx)("span", { className: 'ai-configuration-item-detail-header-subtitle', children: subtitle })] })] }), (status || actions !== undefined) && (0, jsx_runtime_1.jsxs)("div", { className: 'ai-configuration-item-detail-header-actions', children: [status && (0, jsx_runtime_1.jsx)(exports.AiConfigurationStatusBadge, { status: status }), actions] })] }));
130
+ exports.AiConfigurationItemDetailHeader = AiConfigurationItemDetailHeader;
131
+ //# sourceMappingURL=ai-configuration-primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-configuration-primitives.js","sourceRoot":"","sources":["../../../../src/browser/ai-configuration/components/ai-configuration-primitives.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import * as React from '@theia/core/shared/react';
2
+ export interface AiConfigurationSettingRowProps {
3
+ /**
4
+ * Preference id; used as the deep-link anchor and by the gear menu's copy/reset commands. Omitted for
5
+ * rows backed by non-preference data (e.g. per-agent settings).
6
+ */
7
+ readonly preferenceId?: string;
8
+ /** Human-readable setting title. */
9
+ readonly title: string;
10
+ /**
11
+ * Optional already-localized description rendered under the title. A string is rendered as markdown when
12
+ * {@link renderMarkdown} is given (else as plain text); a React node (e.g. text with a link) is rendered as-is.
13
+ */
14
+ readonly description?: React.ReactNode;
15
+ /** Bound markdown renderer (stable identity for the description's effect). Omit to render the description as plain text. */
16
+ readonly renderMarkdown?: (markdown: string) => HTMLElement;
17
+ /** `true` when the value is overridden in the current scope; reveals the modified edge. */
18
+ readonly modified: boolean;
19
+ /** Schema tags shown as badges next to the title (e.g. `experimental`, `preview`), mirroring the Settings UI. */
20
+ readonly tags?: string[];
21
+ /**
22
+ * Opens this view's setting context menu (Reset Setting / Copy Setting ID / Copy Setting as JSON)
23
+ * anchored at the gear element. When omitted the gear is hidden. The owner wires this to
24
+ * {@link AiSettingsRowService.openSettingContextMenu}.
25
+ */
26
+ readonly onOpenMenu?: (gear: HTMLElement) => void;
27
+ /** Inline control shown on the right of the row. */
28
+ readonly control?: React.ReactNode;
29
+ /** Full-width control shown below the row (e.g. a chip editor or a path input). */
30
+ readonly below?: React.ReactNode;
31
+ /**
32
+ * Extra action(s) (e.g. a "Reset All" button) shown top-right, aligned with the title. Rendered next to
33
+ * an inline {@link control} or on its own when the control is {@link below}, so a normal setting row can
34
+ * carry page-level actions.
35
+ */
36
+ readonly actions?: React.ReactNode;
37
+ }
38
+ /**
39
+ * Presentational per-setting row shared across every AI configuration page: title, the schema
40
+ * description, a control (inline via {@link AiConfigurationSettingRowProps.control} or full-width via
41
+ * {@link AiConfigurationSettingRowProps.below}), a modified edge when overridden in the current scope,
42
+ * and a gear menu (mirroring the Settings UI) offering "Copy Setting ID" and "Reset Setting". It is
43
+ * DI-free; owners supply the values, a bound markdown renderer and the callbacks.
44
+ */
45
+ export declare const AiConfigurationSettingRow: React.FC<AiConfigurationSettingRowProps>;
46
+ /**
47
+ * The bare cog button that opens a row's context menu, shared by {@link AiConfigurationSettingRow} and the
48
+ * list {@link AiConfigurationItemRow} so both surface the identical gear affordance. It renders no wrapper,
49
+ * so each host places it (the setting row in its left gutter, the item row in its trailing cluster).
50
+ */
51
+ export declare const AiSettingGearButton: React.FC<{
52
+ onOpenMenu: (gear: HTMLElement) => void;
53
+ }>;
54
+ //# sourceMappingURL=ai-configuration-setting-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-configuration-setting-row.d.ts","sourceRoot":"","sources":["../../../../src/browser/ai-configuration/components/ai-configuration-setting-row.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAGlD,MAAM,WAAW,8BAA8B;IAC3C;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvC,4HAA4H;IAC5H,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,WAAW,CAAC;IAC5D,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,iHAAiH;IACjH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAClD,oDAAoD;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACtC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,8BAA8B,CA4B9E,CAAC;AAwCF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC;IACvC,UAAU,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C,CAaA,CAAC"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AiSettingGearButton = exports.AiConfigurationSettingRow = 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
+ const React = require("@theia/core/shared/react");
23
+ const ai_configuration_primitives_1 = require("./ai-configuration-primitives");
24
+ /**
25
+ * Presentational per-setting row shared across every AI configuration page: title, the schema
26
+ * description, a control (inline via {@link AiConfigurationSettingRowProps.control} or full-width via
27
+ * {@link AiConfigurationSettingRowProps.below}), a modified edge when overridden in the current scope,
28
+ * and a gear menu (mirroring the Settings UI) offering "Copy Setting ID" and "Reset Setting". It is
29
+ * DI-free; owners supply the values, a bound markdown renderer and the callbacks.
30
+ */
31
+ const AiConfigurationSettingRow = ({ preferenceId, title, description, renderMarkdown, modified, tags, onOpenMenu, control, below, actions }) => ((0, jsx_runtime_1.jsxs)("div", { className: `ai-settings-row${modified ? ' modified' : ''}`, "data-ai-config-row-id": preferenceId, children: [(0, jsx_runtime_1.jsx)(AiSettingRowGear, { onOpenMenu: onOpenMenu }), (0, jsx_runtime_1.jsxs)("div", { className: 'ai-settings-row-top', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'ai-settings-row-main', children: [(0, jsx_runtime_1.jsxs)("div", { className: 'ai-settings-row-title', children: [title, tags && tags.length > 0 && (0, jsx_runtime_1.jsx)("span", { className: 'ai-settings-row-tags', children: tags.map(tag => ((0, jsx_runtime_1.jsx)("span", { className: 'ai-settings-row-tag', title: tagTooltip(tag), children: tagLabel(tag) }, tag))) })] }), description !== undefined && (typeof description === 'string' && renderMarkdown
32
+ ? (0, jsx_runtime_1.jsx)(ai_configuration_primitives_1.AiMarkdownDescription, { renderMarkdown: renderMarkdown, markdown: description })
33
+ : (0, jsx_runtime_1.jsx)("div", { className: 'ai-settings-row-description', children: description }))] }), (0, jsx_runtime_1.jsxs)("div", { className: 'ai-settings-row-control', children: [control, actions] })] }), below && (0, jsx_runtime_1.jsx)("div", { className: 'ai-settings-row-below', children: below })] }));
34
+ exports.AiConfigurationSettingRow = AiConfigurationSettingRow;
35
+ /** Badge text for a preference tag, matching the Settings UI (experimental/preview localized; else the raw tag). */
36
+ function tagLabel(tag) {
37
+ return tag === 'experimental' ? core_1.nls.localizeByDefault('Experimental')
38
+ : tag === 'preview' ? core_1.nls.localizeByDefault('Preview')
39
+ : tag;
40
+ }
41
+ /** Hover text for a preference tag badge, matching the Settings UI. */
42
+ function tagTooltip(tag) {
43
+ if (tag === 'experimental') {
44
+ return core_1.nls.localizeByDefault('Experimental setting: this setting controls a new feature that is actively being developed and may be unstable. It is subject to change or removal.');
45
+ }
46
+ if (tag === 'preview') {
47
+ return core_1.nls.localizeByDefault('Preview setting: this setting controls a new feature that is still under refinement yet ready to use. Feedback is welcome.');
48
+ }
49
+ return tag;
50
+ }
51
+ /**
52
+ * Gear affordance in the row's left gutter, matching the Settings UI: a cog button (outside the content,
53
+ * so it never shifts the title) that opens the preference context menu via
54
+ * {@link AiConfigurationSettingRowProps.onOpenMenu}. That opener renders a real Theia context menu
55
+ * (`AI_CONFIGURATION_SETTING_CONTEXT_MENU`), so no popover is implemented here. Hidden when no opener
56
+ * is given.
57
+ */
58
+ const AiSettingRowGear = ({ onOpenMenu }) => {
59
+ if (!onOpenMenu) {
60
+ return undefined;
61
+ }
62
+ return (0, jsx_runtime_1.jsx)("div", { className: 'ai-settings-row-actions', children: (0, jsx_runtime_1.jsx)(exports.AiSettingGearButton, { onOpenMenu: onOpenMenu }) });
63
+ };
64
+ /**
65
+ * The bare cog button that opens a row's context menu, shared by {@link AiConfigurationSettingRow} and the
66
+ * list {@link AiConfigurationItemRow} so both surface the identical gear affordance. It renders no wrapper,
67
+ * so each host places it (the setting row in its left gutter, the item row in its trailing cluster).
68
+ */
69
+ const AiSettingGearButton = ({ onOpenMenu }) => {
70
+ const open = React.useCallback((event) => {
71
+ onOpenMenu(event.currentTarget);
72
+ }, [onOpenMenu]);
73
+ const label = core_1.nls.localizeByDefault('More Actions...');
74
+ return (0, jsx_runtime_1.jsx)("button", { type: 'button', className: `ai-settings-row-gear ${(0, browser_1.codicon)('settings-gear')}`, title: label, "aria-label": label, "aria-haspopup": 'menu', onClick: open });
75
+ };
76
+ exports.AiSettingGearButton = AiSettingGearButton;
77
+ //# sourceMappingURL=ai-configuration-setting-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-configuration-setting-row.js","sourceRoot":"","sources":["../../../../src/browser/ai-configuration/components/ai-configuration-setting-row.tsx"],"names":[],"mappings":"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"}