@toolr/ui-design 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-rules.json +91 -0
- package/ai-manifest.json +190 -0
- package/components/content/info-panel-primitives.tsx +14 -14
- package/components/lib/ai-tools.tsx +1 -1
- package/components/sections/ai-tools-paths/tools-paths-panel.tsx +7 -7
- package/components/sections/captured-issues/captured-issues-panel.tsx +11 -11
- package/components/sections/golden-snapshots/file-diff-viewer.tsx +13 -13
- package/components/sections/golden-snapshots/golden-sync-panel.tsx +5 -5
- package/components/sections/golden-snapshots/snapshot-manager.tsx +11 -11
- package/components/sections/golden-snapshots/status-overview.tsx +20 -20
- package/components/sections/golden-snapshots/version-manager.tsx +8 -8
- package/components/sections/prompt-editor/file-type-tabbed-prompt-editor.tsx +4 -4
- package/components/sections/prompt-editor/simulator-prompt-editor.tsx +5 -5
- package/components/sections/prompt-editor/tabbed-prompt-editor.tsx +10 -10
- package/components/sections/report-bug/report-bug-form.tsx +14 -14
- package/components/sections/report-bug/screenshot-uploader.tsx +6 -6
- package/components/sections/snapshot-browser/snapshot-browser-panel.tsx +3 -3
- package/components/sections/snapshot-browser/snapshot-tree.tsx +8 -8
- package/components/sections/snippets-editor/snippets-editor.tsx +81 -22
- package/components/settings/SettingsHeader.tsx +1 -1
- package/components/settings/SettingsTreeNav.tsx +22 -4
- package/components/ui/action-dialog.tsx +5 -5
- package/components/ui/badge.tsx +4 -4
- package/components/ui/bottom-panel-header.tsx +4 -4
- package/components/ui/breadcrumb.tsx +2 -2
- package/components/ui/collapsible-section.tsx +1 -1
- package/components/ui/cookie-consent.tsx +5 -5
- package/components/ui/detail-section.tsx +3 -3
- package/components/ui/editor-placeholder-card.tsx +7 -7
- package/components/ui/editor-toolbar.tsx +12 -0
- package/components/ui/execution-details-panel.tsx +6 -6
- package/components/ui/extension-list-card.tsx +3 -3
- package/components/ui/file-structure-section.tsx +17 -17
- package/components/ui/file-tree.tsx +3 -1
- package/components/ui/files-panel.tsx +27 -9
- package/components/ui/filter-dropdown.tsx +5 -5
- package/components/ui/form-actions.tsx +1 -1
- package/components/ui/frontmatter-form-header.tsx +4 -4
- package/components/ui/icon-button.tsx +1 -1
- package/components/ui/input.tsx +7 -7
- package/components/ui/label.tsx +4 -4
- package/components/ui/layout-tab-bar.tsx +4 -4
- package/components/ui/modal.tsx +2 -2
- package/components/ui/nav-card.tsx +18 -11
- package/components/ui/navigation-bar.tsx +5 -5
- package/components/ui/number-input.tsx +4 -4
- package/components/ui/registry-browser.tsx +6 -6
- package/components/ui/registry-card.tsx +13 -13
- package/components/ui/registry-detail.tsx +6 -6
- package/components/ui/segmented-toggle.tsx +4 -4
- package/components/ui/select.tsx +5 -5
- package/components/ui/selection-grid.tsx +4 -4
- package/components/ui/setting-row.tsx +1 -1
- package/components/ui/settings-card.tsx +3 -3
- package/components/ui/settings-info-box.tsx +1 -1
- package/components/ui/settings-section-title.tsx +1 -1
- package/components/ui/snapshot-card.tsx +7 -7
- package/components/ui/snippets-panel.tsx +10 -10
- package/components/ui/sort-dropdown.tsx +2 -2
- package/components/ui/status-card.tsx +4 -4
- package/components/ui/tab-bar.tsx +2 -2
- package/components/ui/tooltip.tsx +3 -3
- package/dist/content.js +14 -14
- package/dist/index.d.ts +24 -7
- package/dist/index.js +440 -346
- package/dist/tokens/primitives.css +9 -2
- package/dist/tokens/semantic.css +1 -1
- package/package.json +13 -3
- package/tokens/primitives.css +9 -2
- package/tokens/semantic.css +1 -1
|
@@ -63,19 +63,19 @@ export function SnippetsPanel({
|
|
|
63
63
|
return (
|
|
64
64
|
<div className={cn('flex flex-col bg-neutral-800 rounded-lg overflow-hidden', className)}>
|
|
65
65
|
<div className="flex items-center justify-between px-3 py-2 border-b border-neutral-700">
|
|
66
|
-
<span className="text-
|
|
67
|
-
<span className="text-
|
|
66
|
+
<span className="text-xs font-semibold uppercase tracking-wider text-neutral-500">Snippets</span>
|
|
67
|
+
<span className="text-xs text-neutral-500">{snippets.length} snippets</span>
|
|
68
68
|
</div>
|
|
69
69
|
{showSearch && (
|
|
70
70
|
<div className="px-2 py-2 border-b border-neutral-700">
|
|
71
|
-
<div className="flex items-center gap-1.5 px-2 py-1 bg-[var(--background)] border border-neutral-700 rounded text-
|
|
71
|
+
<div className="flex items-center gap-1.5 px-2 py-1 bg-[var(--background)] border border-neutral-700 rounded text-sm">
|
|
72
72
|
<Search className="w-3 h-3 text-neutral-500 shrink-0" />
|
|
73
73
|
<input
|
|
74
74
|
type="text"
|
|
75
75
|
placeholder="Search snippets..."
|
|
76
76
|
value={searchQuery}
|
|
77
77
|
onChange={(e) => setSearchQuery(e.target.value)}
|
|
78
|
-
className="flex-1 bg-transparent text-neutral-200 placeholder-neutral-500 outline-none text-
|
|
78
|
+
className="flex-1 bg-transparent text-neutral-200 placeholder-neutral-500 outline-none text-sm"
|
|
79
79
|
/>
|
|
80
80
|
</div>
|
|
81
81
|
</div>
|
|
@@ -90,7 +90,7 @@ export function SnippetsPanel({
|
|
|
90
90
|
/>
|
|
91
91
|
))}
|
|
92
92
|
{filteredSnippets.length === 0 && (
|
|
93
|
-
<p className="text-
|
|
93
|
+
<p className="text-xs text-neutral-500 text-center py-4">No snippets found</p>
|
|
94
94
|
)}
|
|
95
95
|
</div>
|
|
96
96
|
</div>
|
|
@@ -110,10 +110,10 @@ function SnippetCard({ snippet, onInsert, onCopy }: SnippetCardProps) {
|
|
|
110
110
|
<div className="rounded-md border border-neutral-700 bg-neutral-900 hover:border-neutral-600 transition-colors">
|
|
111
111
|
<div className="flex items-center justify-between gap-2 px-2.5 py-1.5">
|
|
112
112
|
<div className="flex items-center gap-2 min-w-0">
|
|
113
|
-
<span className="text-
|
|
113
|
+
<span className="text-sm font-medium text-neutral-200 truncate">{snippet.label}</span>
|
|
114
114
|
{snippet.language && (
|
|
115
115
|
<span
|
|
116
|
-
className="px-1.5 py-0.5 text-
|
|
116
|
+
className="px-1.5 py-0.5 text-xs font-medium rounded shrink-0"
|
|
117
117
|
style={{ color: langColor, backgroundColor: `${langColor}20` }}
|
|
118
118
|
>
|
|
119
119
|
{snippet.language}
|
|
@@ -140,17 +140,17 @@ function SnippetCard({ snippet, onInsert, onCopy }: SnippetCardProps) {
|
|
|
140
140
|
</div>
|
|
141
141
|
</div>
|
|
142
142
|
{snippet.description && (
|
|
143
|
-
<p className="px-2.5 pb-1.5 text-
|
|
143
|
+
<p className="px-2.5 pb-1.5 text-xs text-neutral-400 leading-relaxed">{snippet.description}</p>
|
|
144
144
|
)}
|
|
145
145
|
<div className="mx-2.5 mb-2 rounded bg-[var(--background)] border border-neutral-700 overflow-hidden">
|
|
146
|
-
<pre className="p-2 text-
|
|
146
|
+
<pre className="p-2 text-xs text-neutral-400 leading-relaxed overflow-x-auto max-h-24">
|
|
147
147
|
<code>{snippet.code}</code>
|
|
148
148
|
</pre>
|
|
149
149
|
</div>
|
|
150
150
|
{snippet.tags && snippet.tags.length > 0 && (
|
|
151
151
|
<div className="flex flex-wrap gap-1 px-2.5 pb-2">
|
|
152
152
|
{snippet.tags.map((tag) => (
|
|
153
|
-
<span key={tag} className="px-1.5 py-0.5 text-
|
|
153
|
+
<span key={tag} className="px-1.5 py-0.5 text-xs rounded bg-neutral-700 text-neutral-500">
|
|
154
154
|
{tag}
|
|
155
155
|
</span>
|
|
156
156
|
))}
|
|
@@ -74,7 +74,7 @@ export function SortDropdown({
|
|
|
74
74
|
<div className="relative flex items-center" ref={ref} onKeyDown={handleKeyDown}>
|
|
75
75
|
<button
|
|
76
76
|
onClick={() => setIsOpen(!isOpen)}
|
|
77
|
-
className={`flex items-center gap-1.5 h-7 px-2 rounded-md border ${v.bg} text-
|
|
77
|
+
className={`flex items-center gap-1.5 h-7 px-2 rounded-md border ${v.bg} text-sm transition-colors cursor-pointer ${FORM_COLORS[color].border} text-neutral-200 ${FORM_COLORS[color].hover}`}
|
|
78
78
|
>
|
|
79
79
|
<span
|
|
80
80
|
className={`${FORM_COLORS[color].accent} hover:brightness-125 transition-colors`}
|
|
@@ -94,7 +94,7 @@ export function SortDropdown({
|
|
|
94
94
|
key={f.value}
|
|
95
95
|
onClick={() => { onFieldChange(f.value); setIsOpen(false) }}
|
|
96
96
|
onPointerEnter={() => setHighlightIdx(idx)}
|
|
97
|
-
className={`w-full flex items-center gap-2 px-3 py-1.5 text-
|
|
97
|
+
className={`w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left transition-colors cursor-pointer ${
|
|
98
98
|
idx === highlightIdx ? `${FORM_COLORS[color].selectedBg} text-neutral-200` : field === f.value ? `${FORM_COLORS[color].selectedBg} text-neutral-200` : `text-neutral-400 ${v.hoverBg}`
|
|
99
99
|
}`}
|
|
100
100
|
>
|
|
@@ -63,15 +63,15 @@ export function StatusCard({
|
|
|
63
63
|
{Icon && (
|
|
64
64
|
<Icon className="w-4 h-4 shrink-0" style={{ color: iconColor }} />
|
|
65
65
|
)}
|
|
66
|
-
<h3 className="text-
|
|
66
|
+
<h3 className="text-md font-medium text-neutral-200">{title}</h3>
|
|
67
67
|
</div>
|
|
68
68
|
|
|
69
69
|
<div className="divide-y divide-neutral-700/60">
|
|
70
70
|
{items.map((item) => (
|
|
71
71
|
<div key={item.label} className="flex items-center justify-between px-4 py-2.5">
|
|
72
|
-
<span className="text-
|
|
72
|
+
<span className="text-sm text-neutral-400">{item.label}</span>
|
|
73
73
|
<div className="flex items-center gap-2">
|
|
74
|
-
<span className={cn('text-
|
|
74
|
+
<span className={cn('text-sm font-medium', statusValueColor[item.status])}>
|
|
75
75
|
{item.value}
|
|
76
76
|
</span>
|
|
77
77
|
<span className={cn('w-2 h-2 rounded-full shrink-0', statusDotColor[item.status])} />
|
|
@@ -85,7 +85,7 @@ export function StatusCard({
|
|
|
85
85
|
<button
|
|
86
86
|
type="button"
|
|
87
87
|
onClick={action.onClick}
|
|
88
|
-
className="text-
|
|
88
|
+
className="text-sm text-blue-400 hover:text-blue-300 transition-colors cursor-pointer"
|
|
89
89
|
>
|
|
90
90
|
{action.label}
|
|
91
91
|
</button>
|
|
@@ -55,8 +55,8 @@ export interface TabBarProps {
|
|
|
55
55
|
|
|
56
56
|
const sizeConfig = {
|
|
57
57
|
xss: { text: 'text-xss', icon: 'w-2.5 h-2.5', px: 'px-1.5', py: 'py-1', close: 'w-2.5 h-2.5', badgeSize: 'xss' as const, gap: 'gap-1' },
|
|
58
|
-
xs: { text: 'text-
|
|
59
|
-
sm: { text: 'text-
|
|
58
|
+
xs: { text: 'text-sm', icon: 'w-3 h-3', px: 'px-2', py: 'py-1', close: 'w-3 h-3', badgeSize: 'xs' as const, gap: 'gap-1' },
|
|
59
|
+
sm: { text: 'text-md', icon: 'w-3.5 h-3.5', px: 'px-3', py: 'py-1.5', close: 'w-3 h-3', badgeSize: 'sm' as const, gap: 'gap-1.5' },
|
|
60
60
|
md: { text: 'text-base', icon: 'w-4 h-4', px: 'px-4', py: 'py-2', close: 'w-3.5 h-3.5', badgeSize: 'md' as const, gap: 'gap-2' },
|
|
61
61
|
lg: { text: 'text-lg', icon: 'w-5 h-5', px: 'px-5', py: 'py-2.5', close: 'w-4 h-4', badgeSize: 'lg' as const, gap: 'gap-2' },
|
|
62
62
|
}
|
|
@@ -271,9 +271,9 @@ export function Tooltip({
|
|
|
271
271
|
onMouseEnter={interactive && trigger !== 'click' ? show : undefined}
|
|
272
272
|
onMouseLeave={interactive && trigger !== 'click' ? hide : undefined}
|
|
273
273
|
>
|
|
274
|
-
{content.title && <p className="text-
|
|
275
|
-
<div className={`text-
|
|
276
|
-
{content.extra && <p className="text-
|
|
274
|
+
{content.title && <p className="text-md text-neutral-200 font-medium">{content.title}</p>}
|
|
275
|
+
<div className={`text-sm text-neutral-400 ${content.title ? 'mt-0.5' : ''}`}>{content.description}</div>
|
|
276
|
+
{content.extra && <p className="text-sm text-orange-400/70 mt-0.5">{content.extra}</p>}
|
|
277
277
|
<div className={arrowClasses} />
|
|
278
278
|
</div>
|
|
279
279
|
)
|
package/dist/content.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// components/content/info-panel-primitives.tsx
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
function P({ children }) {
|
|
4
|
-
return /* @__PURE__ */ jsx("p", { className: "text-
|
|
4
|
+
return /* @__PURE__ */ jsx("p", { className: "text-md text-neutral-400 leading-relaxed mb-5", children });
|
|
5
5
|
}
|
|
6
6
|
function SectionHeader({ color, children }) {
|
|
7
7
|
const textColor = color ? `text-${color}-500/70` : "text-neutral-500";
|
|
8
|
-
return /* @__PURE__ */ jsx("p", { className: `${textColor} text-
|
|
8
|
+
return /* @__PURE__ */ jsx("p", { className: `${textColor} text-sm uppercase font-semibold pb-0.5 border-b border-neutral-700/50 mb-2.5`, style: { letterSpacing: "0.8px" }, children });
|
|
9
9
|
}
|
|
10
10
|
function DL({ children }) {
|
|
11
11
|
return /* @__PURE__ */ jsx("div", { className: "mb-5", children: /* @__PURE__ */ jsx("div", { className: "grid grid-cols-[auto_1fr] gap-x-4", children }) });
|
|
@@ -13,12 +13,12 @@ function DL({ children }) {
|
|
|
13
13
|
function DLRow({ term, children, even }) {
|
|
14
14
|
const bg = even ? "bg-white/[0.015]" : "";
|
|
15
15
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
16
|
-
/* @__PURE__ */ jsx("div", { className: `py-2 border-b border-neutral-800/60 ${bg} font-semibold text-
|
|
17
|
-
/* @__PURE__ */ jsx("div", { className: `py-2 border-b border-neutral-800/60 ${bg} text-
|
|
16
|
+
/* @__PURE__ */ jsx("div", { className: `py-2 border-b border-neutral-800/60 ${bg} font-semibold text-md whitespace-nowrap`, children: term }),
|
|
17
|
+
/* @__PURE__ */ jsx("div", { className: `py-2 border-b border-neutral-800/60 ${bg} text-md text-neutral-400`, children })
|
|
18
18
|
] });
|
|
19
19
|
}
|
|
20
20
|
function UL({ children }) {
|
|
21
|
-
return /* @__PURE__ */ jsx("ul", { className: "text-
|
|
21
|
+
return /* @__PURE__ */ jsx("ul", { className: "text-md text-neutral-400 space-y-2 mb-5", children });
|
|
22
22
|
}
|
|
23
23
|
function LI({ color, children }) {
|
|
24
24
|
return /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2", children: [
|
|
@@ -30,7 +30,7 @@ function OL({ children }) {
|
|
|
30
30
|
return /* @__PURE__ */ jsx("div", { className: "space-y-2 mb-5", children });
|
|
31
31
|
}
|
|
32
32
|
function OLI({ n, color, children }) {
|
|
33
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2.5 text-
|
|
33
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2.5 text-md", children: [
|
|
34
34
|
/* @__PURE__ */ jsxs("span", { className: `text-${color}-400 shrink-0 w-4 text-right font-bold`, children: [
|
|
35
35
|
n,
|
|
36
36
|
"."
|
|
@@ -61,17 +61,17 @@ function getCalloutColors(color) {
|
|
|
61
61
|
}
|
|
62
62
|
function Callout({ color, children }) {
|
|
63
63
|
const c = CALLOUT_COLORS[color] ?? CALLOUT_COLORS.blue;
|
|
64
|
-
return /* @__PURE__ */ jsx("div", { className: `border-l-4 ${c.borderL} border-y ${c.borderY} ${c.bg} px-3 py-2.5 rounded-r mb-5 text-
|
|
64
|
+
return /* @__PURE__ */ jsx("div", { className: `border-l-4 ${c.borderL} border-y ${c.borderY} ${c.bg} px-3 py-2.5 rounded-r mb-5 text-md text-neutral-400`, children });
|
|
65
65
|
}
|
|
66
66
|
function CalloutCode({ color, children }) {
|
|
67
67
|
const c = CALLOUT_COLORS[color] ?? CALLOUT_COLORS.blue;
|
|
68
|
-
return /* @__PURE__ */ jsx("code", { className: `block bg-neutral-800/80 px-2 py-1 rounded mt-1.5 text-
|
|
68
|
+
return /* @__PURE__ */ jsx("code", { className: `block bg-neutral-800/80 px-2 py-1 rounded mt-1.5 text-md ${c.codeText}`, children });
|
|
69
69
|
}
|
|
70
70
|
function CalloutDim({ children }) {
|
|
71
71
|
return /* @__PURE__ */ jsx("p", { className: "text-neutral-500 mt-1.5", children });
|
|
72
72
|
}
|
|
73
73
|
function CodeBlock({ children }) {
|
|
74
|
-
return /* @__PURE__ */ jsx("div", { className: "bg-neutral-900/60 rounded-md p-3 font-mono text-
|
|
74
|
+
return /* @__PURE__ */ jsx("div", { className: "bg-neutral-900/60 rounded-md p-3 font-mono text-sm text-neutral-400 mb-5 whitespace-pre overflow-x-auto leading-normal", children });
|
|
75
75
|
}
|
|
76
76
|
function CK({ color, children }) {
|
|
77
77
|
const textColor = color ? `text-${color}-400` : "";
|
|
@@ -98,13 +98,13 @@ function LocationItem({
|
|
|
98
98
|
className: `w-2 h-2 rounded-full bg-${color}-500/50 border border-${color}-500 shrink-0`
|
|
99
99
|
}
|
|
100
100
|
),
|
|
101
|
-
/* @__PURE__ */ jsx("span", { className: `text-${color}-400 text-
|
|
101
|
+
/* @__PURE__ */ jsx("span", { className: `text-${color}-400 text-md font-semibold`, children: label })
|
|
102
102
|
] }),
|
|
103
|
-
/* @__PURE__ */ jsx("div", { className: `py-2 border-b border-neutral-800/60 ${bg} text-
|
|
103
|
+
/* @__PURE__ */ jsx("div", { className: `py-2 border-b border-neutral-800/60 ${bg} text-md text-neutral-400`, children })
|
|
104
104
|
] });
|
|
105
105
|
}
|
|
106
106
|
function TitledLI({ color, title, children }) {
|
|
107
|
-
return /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-
|
|
107
|
+
return /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-md text-neutral-400", children: [
|
|
108
108
|
/* @__PURE__ */ jsx("span", { className: `text-${color}-400 shrink-0`, style: { marginTop: "3px", fontSize: "18px", lineHeight: "14px" }, children: "\u2022" }),
|
|
109
109
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
110
110
|
/* @__PURE__ */ jsx("span", { className: `text-${color}-300 font-semibold`, children: title }),
|
|
@@ -115,7 +115,7 @@ function TitledLI({ color, title, children }) {
|
|
|
115
115
|
] });
|
|
116
116
|
}
|
|
117
117
|
function CalloutDialog({ color, lines }) {
|
|
118
|
-
return /* @__PURE__ */ jsx("div", { className: "bg-neutral-800/80 rounded px-2 py-1 mt-1.5 flex flex-col gap-0.5 text-
|
|
118
|
+
return /* @__PURE__ */ jsx("div", { className: "bg-neutral-800/80 rounded px-2 py-1 mt-1.5 flex flex-col gap-0.5 text-md", children: lines.map((line, idx) => /* @__PURE__ */ jsxs("div", { children: [
|
|
119
119
|
/* @__PURE__ */ jsxs("span", { className: `text-${color}-300 font-semibold mr-1`, children: [
|
|
120
120
|
line.speaker,
|
|
121
121
|
":"
|
|
@@ -131,7 +131,7 @@ function StatusBadge({ value, badgeColor, label, children, even }) {
|
|
|
131
131
|
DLRow,
|
|
132
132
|
{
|
|
133
133
|
term: /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
|
|
134
|
-
/* @__PURE__ */ jsx("span", { className: `inline-flex items-center justify-center w-5 h-5 rounded-full bg-${badgeColor}-500/20 text-${badgeColor}-400 text-
|
|
134
|
+
/* @__PURE__ */ jsx("span", { className: `inline-flex items-center justify-center w-5 h-5 rounded-full bg-${badgeColor}-500/20 text-${badgeColor}-400 text-xs font-bold shrink-0`, children: value }),
|
|
135
135
|
/* @__PURE__ */ jsx("span", { className: `text-${badgeColor}-400 font-semibold`, children: label })
|
|
136
136
|
] }),
|
|
137
137
|
even,
|
package/dist/index.d.ts
CHANGED
|
@@ -731,6 +731,10 @@ declare function collectDirPaths(nodes: FileTreeNode[], rootName?: string, prefi
|
|
|
731
731
|
declare function FileTree({ nodes, rootName, selectedPath, onSelectFile, prefix, expandedPaths, onTogglePath, accentColor }: FileTreeProps): react_jsx_runtime.JSX.Element;
|
|
732
732
|
|
|
733
733
|
interface EditorToolbarProps {
|
|
734
|
+
/** Optional title displayed in the toolbar */
|
|
735
|
+
title?: string;
|
|
736
|
+
/** Optional description displayed below the title */
|
|
737
|
+
description?: string;
|
|
734
738
|
/** Whether content has unsaved changes */
|
|
735
739
|
isDirty: boolean;
|
|
736
740
|
/** Whether save operation is in progress */
|
|
@@ -755,7 +759,7 @@ interface EditorToolbarProps {
|
|
|
755
759
|
/** Optional: Additional action buttons on the right side (before save) */
|
|
756
760
|
rightActions?: ActionItem[];
|
|
757
761
|
}
|
|
758
|
-
declare function EditorToolbar({ isDirty, isSaving, onSave, canReset, onReset, resetTooltip, isReadOnly, hasError, leftActions, rightActions, }: EditorToolbarProps): react_jsx_runtime.JSX.Element | null;
|
|
762
|
+
declare function EditorToolbar({ title, description, isDirty, isSaving, onSave, canReset, onReset, resetTooltip, isReadOnly, hasError, leftActions, rightActions, }: EditorToolbarProps): react_jsx_runtime.JSX.Element | null;
|
|
759
763
|
|
|
760
764
|
/** Status banner configuration for outdated/info messages */
|
|
761
765
|
interface StatusBanner {
|
|
@@ -2216,8 +2220,9 @@ interface SnippetsEditorProps {
|
|
|
2216
2220
|
/** Section description, e.g. "Define snippets to reuse in skills prompts..." */
|
|
2217
2221
|
description?: string;
|
|
2218
2222
|
className?: string;
|
|
2223
|
+
accentColor?: string;
|
|
2219
2224
|
}
|
|
2220
|
-
declare function SnippetsEditor({ api, snippets, title, description, className, }: SnippetsEditorProps): react_jsx_runtime.JSX.Element;
|
|
2225
|
+
declare function SnippetsEditor({ api, snippets, title, description, className, accentColor, }: SnippetsEditorProps): react_jsx_runtime.JSX.Element;
|
|
2221
2226
|
|
|
2222
2227
|
/**
|
|
2223
2228
|
* useSnippetsEditor — Form state and CRUD hook for the snippets editor
|
|
@@ -2482,8 +2487,9 @@ interface FilesPanelProps {
|
|
|
2482
2487
|
onAction?: (action: string, path: string) => void;
|
|
2483
2488
|
showSearch?: boolean;
|
|
2484
2489
|
className?: string;
|
|
2490
|
+
accentColor?: string;
|
|
2485
2491
|
}
|
|
2486
|
-
declare function FilesPanel({ files, selectedPath, onSelect, onAction, showSearch, className, }: FilesPanelProps): react_jsx_runtime.JSX.Element;
|
|
2492
|
+
declare function FilesPanel({ files, selectedPath, onSelect, onAction, showSearch, className, accentColor, }: FilesPanelProps): react_jsx_runtime.JSX.Element;
|
|
2487
2493
|
|
|
2488
2494
|
/** Searchable panel for browsing, copying, and inserting code snippets. */
|
|
2489
2495
|
interface Snippet {
|
|
@@ -2587,14 +2593,24 @@ interface NavCardProps {
|
|
|
2587
2593
|
title: string;
|
|
2588
2594
|
description?: string;
|
|
2589
2595
|
icon?: IconName;
|
|
2596
|
+
/** Custom icon component. Takes precedence over icon name. */
|
|
2597
|
+
IconComponent?: React.ComponentType<{
|
|
2598
|
+
className?: string;
|
|
2599
|
+
}>;
|
|
2590
2600
|
iconColor?: string;
|
|
2591
|
-
|
|
2592
|
-
|
|
2601
|
+
label?: {
|
|
2602
|
+
text: string;
|
|
2603
|
+
color: LabelColor;
|
|
2604
|
+
tooltip: {
|
|
2605
|
+
description: string;
|
|
2606
|
+
};
|
|
2607
|
+
};
|
|
2608
|
+
stats?: string;
|
|
2593
2609
|
onClick?: () => void;
|
|
2594
2610
|
disabled?: boolean;
|
|
2595
2611
|
className?: string;
|
|
2596
2612
|
}
|
|
2597
|
-
declare function NavCard({ title, description, icon, iconColor,
|
|
2613
|
+
declare function NavCard({ title, description, icon, IconComponent, iconColor, label, stats, onClick, disabled, className, }: NavCardProps): react_jsx_runtime.JSX.Element;
|
|
2598
2614
|
|
|
2599
2615
|
interface ExtensionListCardProps {
|
|
2600
2616
|
/** Lucide icon component */
|
|
@@ -2810,8 +2826,9 @@ interface SettingsTreeNavProps {
|
|
|
2810
2826
|
tree: SettingsTreeNode[];
|
|
2811
2827
|
selectedPath: string;
|
|
2812
2828
|
onSelectPath: (path: string) => void;
|
|
2829
|
+
accentColor?: string;
|
|
2813
2830
|
}
|
|
2814
|
-
declare function SettingsTreeNav({ tree, selectedPath, onSelectPath }: SettingsTreeNavProps): react_jsx_runtime.JSX.Element;
|
|
2831
|
+
declare function SettingsTreeNav({ tree, selectedPath, onSelectPath, accentColor }: SettingsTreeNavProps): react_jsx_runtime.JSX.Element;
|
|
2815
2832
|
|
|
2816
2833
|
interface SettingsHeaderProps {
|
|
2817
2834
|
description: string;
|