@flanksource/clicky-ui 0.3.16 → 0.3.17

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 (158) hide show
  1. package/dist/data/DataTable.cjs +30 -10
  2. package/dist/data/DataTable.cjs.map +1 -1
  3. package/dist/data/DataTable.d.ts +2 -0
  4. package/dist/data/DataTable.d.ts.map +1 -1
  5. package/dist/data/DataTable.js +30 -10
  6. package/dist/data/DataTable.js.map +1 -1
  7. package/dist/data/ServerTimingBadge.cjs +64 -0
  8. package/dist/data/ServerTimingBadge.cjs.map +1 -0
  9. package/dist/data/ServerTimingBadge.d.ts +9 -0
  10. package/dist/data/ServerTimingBadge.d.ts.map +1 -0
  11. package/dist/data/ServerTimingBadge.js +64 -0
  12. package/dist/data/ServerTimingBadge.js.map +1 -0
  13. package/dist/data/ai/ChatWindow.cjs +9 -1
  14. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  15. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  16. package/dist/data/ai/ChatWindow.js +9 -1
  17. package/dist/data/ai/ChatWindow.js.map +1 -1
  18. package/dist/data/ai/ChatWindow.thread-status.cjs +14 -0
  19. package/dist/data/ai/ChatWindow.thread-status.cjs.map +1 -0
  20. package/dist/data/ai/ChatWindow.thread-status.d.ts +5 -0
  21. package/dist/data/ai/ChatWindow.thread-status.d.ts.map +1 -0
  22. package/dist/data/ai/ChatWindow.thread-status.js +14 -0
  23. package/dist/data/ai/ChatWindow.thread-status.js.map +1 -0
  24. package/dist/data/ai/ChatWindow.thread.cjs +68 -0
  25. package/dist/data/ai/ChatWindow.thread.cjs.map +1 -0
  26. package/dist/data/ai/ChatWindow.thread.d.ts +16 -0
  27. package/dist/data/ai/ChatWindow.thread.d.ts.map +1 -0
  28. package/dist/data/ai/ChatWindow.thread.js +68 -0
  29. package/dist/data/ai/ChatWindow.thread.js.map +1 -0
  30. package/dist/data/ai/PromptRunEditor/index.cjs +100 -88
  31. package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
  32. package/dist/data/ai/PromptRunEditor/index.d.ts +5 -9
  33. package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
  34. package/dist/data/ai/PromptRunEditor/index.js +103 -91
  35. package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
  36. package/dist/data/ai/PromptRunEditor/model.cjs +47 -0
  37. package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -0
  38. package/dist/data/ai/PromptRunEditor/model.d.ts +17 -0
  39. package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -0
  40. package/dist/data/ai/PromptRunEditor/model.js +47 -0
  41. package/dist/data/ai/PromptRunEditor/model.js.map +1 -0
  42. package/dist/data/ai/RuntimeBar.cjs +104 -32
  43. package/dist/data/ai/RuntimeBar.cjs.map +1 -1
  44. package/dist/data/ai/RuntimeBar.d.ts +4 -11
  45. package/dist/data/ai/RuntimeBar.d.ts.map +1 -1
  46. package/dist/data/ai/RuntimeBar.js +107 -35
  47. package/dist/data/ai/RuntimeBar.js.map +1 -1
  48. package/dist/data/ai/RuntimeBar.model.cjs +14 -0
  49. package/dist/data/ai/RuntimeBar.model.cjs.map +1 -0
  50. package/dist/data/ai/RuntimeBar.model.d.ts +10 -0
  51. package/dist/data/ai/RuntimeBar.model.d.ts.map +1 -0
  52. package/dist/data/ai/RuntimeBar.model.js +14 -0
  53. package/dist/data/ai/RuntimeBar.model.js.map +1 -0
  54. package/dist/data/ai/RuntimeBarCombo.cjs +359 -0
  55. package/dist/data/ai/RuntimeBarCombo.cjs.map +1 -0
  56. package/dist/data/ai/RuntimeBarCombo.d.ts +22 -0
  57. package/dist/data/ai/RuntimeBarCombo.d.ts.map +1 -0
  58. package/dist/data/ai/RuntimeBarCombo.js +359 -0
  59. package/dist/data/ai/RuntimeBarCombo.js.map +1 -0
  60. package/dist/data/ai/SessionViewer.header.cjs +17 -9
  61. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  62. package/dist/data/ai/SessionViewer.header.d.ts.map +1 -1
  63. package/dist/data/ai/SessionViewer.header.js +17 -9
  64. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  65. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  66. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  67. package/dist/data/ai/SessionViewer.model.d.ts +4 -0
  68. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  69. package/dist/data/ai/SessionViewer.model.js +2 -0
  70. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  71. package/dist/data/ai/SessionViewer.unified.d.ts +1 -0
  72. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  73. package/dist/data/ai/SpecRuntimeEditor/fields.js +1 -1
  74. package/dist/data/ai/ThreadPicker.cjs.map +1 -1
  75. package/dist/data/ai/ThreadPicker.d.ts +2 -0
  76. package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
  77. package/dist/data/ai/ThreadPicker.js.map +1 -1
  78. package/dist/data/ai/index.d.ts +1 -0
  79. package/dist/data/ai/index.d.ts.map +1 -1
  80. package/dist/data/ai/model-capabilities.cjs +12 -1
  81. package/dist/data/ai/model-capabilities.cjs.map +1 -1
  82. package/dist/data/ai/model-capabilities.d.ts +2 -6
  83. package/dist/data/ai/model-capabilities.d.ts.map +1 -1
  84. package/dist/data/ai/model-capabilities.js +12 -1
  85. package/dist/data/ai/model-capabilities.js.map +1 -1
  86. package/dist/data/ai/runtime-mode.cjs +10 -1
  87. package/dist/data/ai/runtime-mode.cjs.map +1 -1
  88. package/dist/data/ai/runtime-mode.d.ts +1 -0
  89. package/dist/data/ai/runtime-mode.d.ts.map +1 -1
  90. package/dist/data/ai/runtime-mode.js +11 -2
  91. package/dist/data/ai/runtime-mode.js.map +1 -1
  92. package/dist/data/chat/Chat.cjs +90 -21
  93. package/dist/data/chat/Chat.cjs.map +1 -1
  94. package/dist/data/chat/Chat.d.ts +4 -1
  95. package/dist/data/chat/Chat.d.ts.map +1 -1
  96. package/dist/data/chat/Chat.js +90 -21
  97. package/dist/data/chat/Chat.js.map +1 -1
  98. package/dist/data/chat/ContextMeter.cjs +144 -73
  99. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  100. package/dist/data/chat/ContextMeter.d.ts +8 -3
  101. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  102. package/dist/data/chat/ContextMeter.js +144 -73
  103. package/dist/data/chat/ContextMeter.js.map +1 -1
  104. package/dist/data/chat/approval.cjs +21 -0
  105. package/dist/data/chat/approval.cjs.map +1 -0
  106. package/dist/data/chat/approval.d.ts +11 -0
  107. package/dist/data/chat/approval.d.ts.map +1 -0
  108. package/dist/data/chat/approval.js +21 -0
  109. package/dist/data/chat/approval.js.map +1 -0
  110. package/dist/data/chat/types.cjs.map +1 -1
  111. package/dist/data/chat/types.d.ts +12 -0
  112. package/dist/data/chat/types.d.ts.map +1 -1
  113. package/dist/data/chat/types.js.map +1 -1
  114. package/dist/data/server-timing.cjs +120 -0
  115. package/dist/data/server-timing.cjs.map +1 -0
  116. package/dist/data/server-timing.d.ts +11 -0
  117. package/dist/data/server-timing.d.ts.map +1 -0
  118. package/dist/data/server-timing.js +120 -0
  119. package/dist/data/server-timing.js.map +1 -0
  120. package/dist/data/version-info.cjs +3 -3
  121. package/dist/data/version-info.js +3 -3
  122. package/dist/data.cjs +7 -0
  123. package/dist/data.cjs.map +1 -1
  124. package/dist/data.d.ts +2 -0
  125. package/dist/data.d.ts.map +1 -1
  126. package/dist/data.js +7 -0
  127. package/dist/data.js.map +1 -1
  128. package/dist/index.cjs +7 -0
  129. package/dist/index.cjs.map +1 -1
  130. package/dist/index.js +7 -0
  131. package/dist/index.js.map +1 -1
  132. package/dist/layout/AppShell.cjs +1 -1
  133. package/dist/layout/AppShell.cjs.map +1 -1
  134. package/dist/layout/AppShell.js +1 -1
  135. package/dist/layout/AppShell.js.map +1 -1
  136. package/dist/overlay/HoverCard.cjs.map +1 -1
  137. package/dist/overlay/HoverCard.d.ts +2 -2
  138. package/dist/overlay/HoverCard.d.ts.map +1 -1
  139. package/dist/overlay/HoverCard.js.map +1 -1
  140. package/dist/rpc/OperationCatalog.cjs +28 -51
  141. package/dist/rpc/OperationCatalog.cjs.map +1 -1
  142. package/dist/rpc/OperationCatalog.d.ts +1 -6
  143. package/dist/rpc/OperationCatalog.d.ts.map +1 -1
  144. package/dist/rpc/OperationCatalog.js +29 -52
  145. package/dist/rpc/OperationCatalog.js.map +1 -1
  146. package/dist/rpc/OperationResultView.cjs +42 -0
  147. package/dist/rpc/OperationResultView.cjs.map +1 -1
  148. package/dist/rpc/OperationResultView.d.ts +2 -1
  149. package/dist/rpc/OperationResultView.d.ts.map +1 -1
  150. package/dist/rpc/OperationResultView.js +42 -0
  151. package/dist/rpc/OperationResultView.js.map +1 -1
  152. package/dist/styles.css +1 -1
  153. package/dist/tailwind-preset.cjs +4 -0
  154. package/dist/tailwind-preset.cjs.map +1 -1
  155. package/dist/tailwind-preset.d.ts.map +1 -1
  156. package/dist/tailwind-preset.js +4 -0
  157. package/dist/tailwind-preset.js.map +1 -1
  158. package/package.json +1 -1
@@ -0,0 +1,359 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const button = require("../../components/button.cjs");
5
+ const SegmentedControl = require("../../components/SegmentedControl.cjs");
6
+ const utils = require("../../lib/utils.cjs");
7
+ const DropdownMenu = require("../../overlay/DropdownMenu.cjs");
8
+ const Icon = require("../Icon.cjs");
9
+ const effortIcons = require("../chat/effort-icons.cjs");
10
+ const providerIcons = require("../chat/provider-icons.cjs");
11
+ const RuntimeBar_model = require("./RuntimeBar.model.cjs");
12
+ const runtimeMode = require("./runtime-mode.cjs");
13
+ const UiChevronDown = require("../../icons/components/UiChevronDown.cjs");
14
+ const UiCheck = require("../../icons/components/UiCheck.cjs");
15
+ function RuntimeBarCombo({
16
+ value,
17
+ families,
18
+ family,
19
+ mode,
20
+ selectedMode,
21
+ models,
22
+ selectedModel,
23
+ supportedEfforts,
24
+ ariaLabel,
25
+ className,
26
+ onFamilyChange,
27
+ onModeChange,
28
+ onModelSelect,
29
+ onModelClear,
30
+ onEffortChange
31
+ }) {
32
+ const brand = RuntimeBar_model.runtimeFamilyBrand(family);
33
+ const modelLabel = (selectedModel == null ? void 0 : selectedModel.label) ?? value.model ?? "Prompt default";
34
+ const effortLabel = value.effort ? effortIcons.effortLevelLabel(value.effort) : "None";
35
+ const effortIcon = value.effort ? effortIcons.effortLevelIcon(value.effort) : void 0;
36
+ const summary = `${ariaLabel}: ${family.label}, ${mode.label}, ${modelLabel}, effort ${effortLabel}`;
37
+ return /* @__PURE__ */ jsxRuntime.jsx(
38
+ DropdownMenu.DropdownMenu,
39
+ {
40
+ align: "left",
41
+ menuLabel: `${ariaLabel} controls`,
42
+ ...className ? { className } : {},
43
+ menuClassName: "max-h-[70vh] w-80 max-w-[calc(100vw-24px)] overflow-y-auto",
44
+ trigger: /* @__PURE__ */ jsxRuntime.jsxs(
45
+ button.Button,
46
+ {
47
+ type: "button",
48
+ variant: "outline",
49
+ size: "sm",
50
+ title: summary,
51
+ "aria-label": summary,
52
+ className: "max-w-full gap-1.5 px-density-2",
53
+ children: [
54
+ brand.icon && /* @__PURE__ */ jsxRuntime.jsx(
55
+ Icon.Icon,
56
+ {
57
+ icon: brand.icon,
58
+ className: utils.cn("size-4 shrink-0", brand.color)
59
+ }
60
+ ),
61
+ mode.icon && /* @__PURE__ */ jsxRuntime.jsx(
62
+ Icon.Icon,
63
+ {
64
+ icon: mode.icon,
65
+ className: "size-4 shrink-0 text-muted-foreground"
66
+ }
67
+ ),
68
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate text-xs font-semibold text-foreground", children: modelLabel }),
69
+ effortIcon && /* @__PURE__ */ jsxRuntime.jsx(
70
+ Icon.Icon,
71
+ {
72
+ icon: effortIcon,
73
+ className: utils.cn(
74
+ "size-4 shrink-0",
75
+ value.effort ? effortIcons.effortLevelColor(value.effort) : void 0
76
+ )
77
+ }
78
+ ),
79
+ /* @__PURE__ */ jsxRuntime.jsx(
80
+ Icon.Icon,
81
+ {
82
+ icon: UiChevronDown.UiChevronDown,
83
+ className: "size-3 shrink-0 text-muted-foreground/70"
84
+ }
85
+ )
86
+ ]
87
+ }
88
+ ),
89
+ children: () => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-1 text-xs", children: [
90
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2 border-b border-border px-2 pb-3 pt-2", children: [
91
+ /* @__PURE__ */ jsxRuntime.jsx(
92
+ FamilySegments,
93
+ {
94
+ families,
95
+ value: family.id,
96
+ onChange: onFamilyChange
97
+ }
98
+ ),
99
+ /* @__PURE__ */ jsxRuntime.jsx(
100
+ ModeSegments,
101
+ {
102
+ families,
103
+ family,
104
+ value: selectedMode,
105
+ onChange: onModeChange
106
+ }
107
+ ),
108
+ /* @__PURE__ */ jsxRuntime.jsx(
109
+ EffortSlider,
110
+ {
111
+ value: value.effort,
112
+ efforts: supportedEfforts,
113
+ onChange: onEffortChange
114
+ }
115
+ )
116
+ ] }),
117
+ /* @__PURE__ */ jsxRuntime.jsx(
118
+ ModelChoices,
119
+ {
120
+ models,
121
+ familyBrand: brand,
122
+ selectedId: (selectedModel == null ? void 0 : selectedModel.id) ?? value.model,
123
+ onSelect: onModelSelect,
124
+ onClear: onModelClear
125
+ }
126
+ )
127
+ ] })
128
+ }
129
+ );
130
+ }
131
+ function FamilySegments({
132
+ families,
133
+ value,
134
+ onChange
135
+ }) {
136
+ return /* @__PURE__ */ jsxRuntime.jsx(
137
+ SegmentedControl.SegmentedControl,
138
+ {
139
+ "aria-label": "Family",
140
+ size: "sm",
141
+ wrap: true,
142
+ value,
143
+ onChange,
144
+ className: "w-full",
145
+ options: families.map((family) => {
146
+ const brand = RuntimeBar_model.runtimeFamilyBrand(family);
147
+ return {
148
+ id: family.id,
149
+ label: family.label,
150
+ ...brand.icon ? { icon: brand.icon } : {}
151
+ };
152
+ })
153
+ }
154
+ );
155
+ }
156
+ function ModeSegments({
157
+ families,
158
+ family,
159
+ value,
160
+ onChange
161
+ }) {
162
+ return /* @__PURE__ */ jsxRuntime.jsx(
163
+ SegmentedControl.SegmentedControl,
164
+ {
165
+ "aria-label": "Runtime mode",
166
+ size: "sm",
167
+ value,
168
+ onChange,
169
+ className: "w-full",
170
+ options: runtimeMode.runtimeModeOptions(families).map((mode) => {
171
+ const supported = family.modes.find((entry) => entry.id === mode.id);
172
+ return {
173
+ id: mode.id,
174
+ label: (supported == null ? void 0 : supported.label) ?? mode.label,
175
+ title: (supported == null ? void 0 : supported.title) ?? runtimeMode.unsupportedModeTitle(family),
176
+ disabled: !supported,
177
+ ...mode.icon ? { icon: mode.icon } : {}
178
+ };
179
+ })
180
+ }
181
+ );
182
+ }
183
+ function ModelChoices({
184
+ models,
185
+ familyBrand,
186
+ selectedId,
187
+ onSelect,
188
+ onClear
189
+ }) {
190
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-0.5 py-1", children: [
191
+ /* @__PURE__ */ jsxRuntime.jsx(
192
+ ModelChoice,
193
+ {
194
+ label: "Prompt default",
195
+ selected: !selectedId,
196
+ onClick: onClear
197
+ }
198
+ ),
199
+ models.map((model) => {
200
+ const icon = providerIcons.providerIcon(model.provider) ?? familyBrand.icon;
201
+ return /* @__PURE__ */ jsxRuntime.jsx(
202
+ ModelChoice,
203
+ {
204
+ label: model.label,
205
+ title: model.id,
206
+ selected: model.id === selectedId,
207
+ disabled: model.configured === false,
208
+ ...icon ? {
209
+ icon,
210
+ iconColor: providerIcons.providerIconColor(model.provider) ?? familyBrand.color
211
+ } : {},
212
+ onClick: () => onSelect(model)
213
+ },
214
+ model.id
215
+ );
216
+ })
217
+ ] });
218
+ }
219
+ function ModelChoice({
220
+ label,
221
+ title,
222
+ selected,
223
+ disabled = false,
224
+ icon,
225
+ iconColor,
226
+ onClick
227
+ }) {
228
+ return /* @__PURE__ */ jsxRuntime.jsxs(
229
+ button.Button,
230
+ {
231
+ variant: "ghost",
232
+ type: "button",
233
+ disabled,
234
+ onClick,
235
+ "aria-label": label,
236
+ ...title ? { title } : {},
237
+ className: "group flex h-8 w-full items-center justify-start gap-2 rounded-md px-2 text-left hover:bg-muted",
238
+ children: [
239
+ icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex size-6 shrink-0 items-center justify-center rounded-md bg-muted/70 ring-1 ring-border/60 group-hover:bg-background", children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon, className: utils.cn("size-3.5", iconColor) }) }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-6 shrink-0" }),
240
+ /* @__PURE__ */ jsxRuntime.jsx(
241
+ "span",
242
+ {
243
+ className: utils.cn(
244
+ "min-w-0 flex-1 truncate text-sm",
245
+ selected && "font-semibold"
246
+ ),
247
+ children: label
248
+ }
249
+ ),
250
+ /* @__PURE__ */ jsxRuntime.jsx(
251
+ Icon.Icon,
252
+ {
253
+ icon: UiCheck.UiCheck,
254
+ className: utils.cn(
255
+ "size-3.5 shrink-0 text-primary",
256
+ !selected && "invisible"
257
+ )
258
+ }
259
+ )
260
+ ]
261
+ }
262
+ );
263
+ }
264
+ function EffortSlider({
265
+ value,
266
+ efforts,
267
+ onChange
268
+ }) {
269
+ const supported = [
270
+ ...new Set(efforts.map((effort) => effort.trim()).filter(Boolean))
271
+ ];
272
+ if (supported.length === 0) {
273
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-8 items-center justify-center text-[11px] text-muted-foreground", children: "Fixed effort for this model" });
274
+ }
275
+ const options = ["", ...supported];
276
+ const current = (value == null ? void 0 : value.trim()) ?? "";
277
+ const currentIndex = options.indexOf(current);
278
+ const sliderIndex = currentIndex >= 0 ? currentIndex : 0;
279
+ const label = currentIndex >= 0 ? current ? effortIcons.effortLevelLabel(current) : "None" : `${effortIcons.effortLevelLabel(current)} unsupported`;
280
+ const percent = sliderIndex / (options.length - 1) * 100;
281
+ const firstIcon = effortIcons.effortLevelIcon(supported[0]);
282
+ const lastIcon = effortIcons.effortLevelIcon(supported[supported.length - 1]);
283
+ const selectedIcon = current ? effortIcons.effortLevelIcon(current) : void 0;
284
+ return /* @__PURE__ */ jsxRuntime.jsxs(
285
+ "div",
286
+ {
287
+ className: "grid grid-cols-[auto_minmax(0,1fr)_auto] items-start gap-1.5",
288
+ "aria-label": "Model effort",
289
+ children: [
290
+ firstIcon ? /* @__PURE__ */ jsxRuntime.jsx(
291
+ Icon.Icon,
292
+ {
293
+ icon: firstIcon,
294
+ className: utils.cn("mt-3 size-3.5", effortIcons.effortLevelColor(supported[0]))
295
+ }
296
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-3.5" }),
297
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative h-11 pt-1", children: [
298
+ /* @__PURE__ */ jsxRuntime.jsx(
299
+ "input",
300
+ {
301
+ type: "range",
302
+ min: 0,
303
+ max: options.length - 1,
304
+ step: 1,
305
+ value: sliderIndex,
306
+ "aria-label": "Reasoning effort",
307
+ "aria-valuetext": label,
308
+ "aria-invalid": currentIndex < 0,
309
+ onChange: (event) => {
310
+ const next = options[Number(event.target.value)];
311
+ if (next === void 0) {
312
+ throw new Error(
313
+ `Invalid reasoning effort index: ${event.target.value}`
314
+ );
315
+ }
316
+ onChange(next);
317
+ },
318
+ className: "h-1 w-full cursor-pointer appearance-none rounded-full bg-muted accent-foreground [&::-moz-range-thumb]:size-3 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-background [&::-moz-range-thumb]:bg-foreground [&::-webkit-slider-thumb]:size-3 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-background [&::-webkit-slider-thumb]:bg-foreground [&::-webkit-slider-thumb]:shadow-sm"
319
+ }
320
+ ),
321
+ /* @__PURE__ */ jsxRuntime.jsx(
322
+ "span",
323
+ {
324
+ "aria-hidden": "true",
325
+ className: "pointer-events-none absolute top-7 -translate-x-1/2",
326
+ style: { left: `${percent}%` },
327
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
328
+ "span",
329
+ {
330
+ className: utils.cn(
331
+ "inline-flex h-5 shrink-0 items-center gap-1 rounded-full border px-1.5 text-[10px] font-semibold leading-none",
332
+ currentIndex < 0 ? "border-destructive/25 bg-destructive/10 text-destructive" : current ? utils.cn("border-current/25 bg-muted", effortIcons.effortLevelColor(current)) : "border-border bg-muted text-muted-foreground"
333
+ ),
334
+ title: `Effort: ${label}`,
335
+ children: [
336
+ selectedIcon && /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { icon: selectedIcon, className: "size-3" }),
337
+ label
338
+ ]
339
+ }
340
+ )
341
+ }
342
+ )
343
+ ] }),
344
+ lastIcon ? /* @__PURE__ */ jsxRuntime.jsx(
345
+ Icon.Icon,
346
+ {
347
+ icon: lastIcon,
348
+ className: utils.cn(
349
+ "mt-3 size-3.5",
350
+ effortIcons.effortLevelColor(supported[supported.length - 1])
351
+ )
352
+ }
353
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-3.5" })
354
+ ]
355
+ }
356
+ );
357
+ }
358
+ exports.RuntimeBarCombo = RuntimeBarCombo;
359
+ //# sourceMappingURL=RuntimeBarCombo.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeBarCombo.cjs","sources":["../../../src/data/ai/RuntimeBarCombo.tsx"],"sourcesContent":["import { Button } from \"../../components/button\";\nimport { SegmentedControl } from \"../../components/SegmentedControl\";\nimport { UiCheck, UiChevronDown } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon } from \"../Icon\";\nimport {\n effortLevelColor,\n effortLevelIcon,\n effortLevelLabel,\n} from \"../chat/effort-icons\";\nimport { providerIcon, providerIconColor } from \"../chat/provider-icons\";\nimport type { ChatModel } from \"../chat/types\";\nimport type { AISpecRuntimeValue } from \"./SpecRuntimeEditor.model\";\nimport { runtimeFamilyBrand } from \"./RuntimeBar.model\";\nimport {\n runtimeModeOptions,\n unsupportedModeTitle,\n type SpecRuntimeFamily,\n type SpecRuntimeModeOption,\n} from \"./runtime-mode\";\n\nexport type RuntimeBarComboProps = {\n value: AISpecRuntimeValue;\n families: SpecRuntimeFamily[];\n family: SpecRuntimeFamily;\n mode: SpecRuntimeModeOption;\n selectedMode: string;\n models: ChatModel[];\n selectedModel: ChatModel | undefined;\n supportedEfforts: string[];\n ariaLabel: string;\n className?: string | undefined;\n onFamilyChange: (familyId: string) => void;\n onModeChange: (modeId: string) => void;\n onModelSelect: (model: ChatModel) => void;\n onModelClear: () => void;\n onEffortChange: (effort: string) => void;\n};\n\nexport function RuntimeBarCombo({\n value,\n families,\n family,\n mode,\n selectedMode,\n models,\n selectedModel,\n supportedEfforts,\n ariaLabel,\n className,\n onFamilyChange,\n onModeChange,\n onModelSelect,\n onModelClear,\n onEffortChange,\n}: RuntimeBarComboProps) {\n const brand = runtimeFamilyBrand(family);\n const modelLabel = selectedModel?.label ?? value.model ?? \"Prompt default\";\n const effortLabel = value.effort ? effortLevelLabel(value.effort) : \"None\";\n const effortIcon = value.effort ? effortLevelIcon(value.effort) : undefined;\n const summary = `${ariaLabel}: ${family.label}, ${mode.label}, ${modelLabel}, effort ${effortLabel}`;\n\n return (\n <DropdownMenu\n align=\"left\"\n menuLabel={`${ariaLabel} controls`}\n {...(className ? { className } : {})}\n menuClassName=\"max-h-[70vh] w-80 max-w-[calc(100vw-24px)] overflow-y-auto\"\n trigger={\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n title={summary}\n aria-label={summary}\n className=\"max-w-full gap-1.5 px-density-2\"\n >\n {brand.icon && (\n <Icon\n icon={brand.icon}\n className={cn(\"size-4 shrink-0\", brand.color)}\n />\n )}\n {mode.icon && (\n <Icon\n icon={mode.icon}\n className=\"size-4 shrink-0 text-muted-foreground\"\n />\n )}\n <span className=\"min-w-0 truncate text-xs font-semibold text-foreground\">\n {modelLabel}\n </span>\n {effortIcon && (\n <Icon\n icon={effortIcon}\n className={cn(\n \"size-4 shrink-0\",\n value.effort ? effortLevelColor(value.effort) : undefined,\n )}\n />\n )}\n <Icon\n icon={UiChevronDown}\n className=\"size-3 shrink-0 text-muted-foreground/70\"\n />\n </Button>\n }\n >\n {() => (\n <div className=\"p-1 text-xs\">\n <div className=\"space-y-2 border-b border-border px-2 pb-3 pt-2\">\n <FamilySegments\n families={families}\n value={family.id}\n onChange={onFamilyChange}\n />\n <ModeSegments\n families={families}\n family={family}\n value={selectedMode}\n onChange={onModeChange}\n />\n <EffortSlider\n value={value.effort}\n efforts={supportedEfforts}\n onChange={onEffortChange}\n />\n </div>\n <ModelChoices\n models={models}\n familyBrand={brand}\n selectedId={selectedModel?.id ?? value.model}\n onSelect={onModelSelect}\n onClear={onModelClear}\n />\n </div>\n )}\n </DropdownMenu>\n );\n}\n\nfunction FamilySegments({\n families,\n value,\n onChange,\n}: {\n families: SpecRuntimeFamily[];\n value: string;\n onChange: (familyId: string) => void;\n}) {\n return (\n <SegmentedControl\n aria-label=\"Family\"\n size=\"sm\"\n wrap\n value={value}\n onChange={onChange}\n className=\"w-full\"\n options={families.map((family) => {\n const brand = runtimeFamilyBrand(family);\n return {\n id: family.id,\n label: family.label,\n ...(brand.icon ? { icon: brand.icon } : {}),\n };\n })}\n />\n );\n}\n\nfunction ModeSegments({\n families,\n family,\n value,\n onChange,\n}: {\n families: SpecRuntimeFamily[];\n family: SpecRuntimeFamily;\n value: string;\n onChange: (modeId: string) => void;\n}) {\n return (\n <SegmentedControl\n aria-label=\"Runtime mode\"\n size=\"sm\"\n value={value}\n onChange={onChange}\n className=\"w-full\"\n options={runtimeModeOptions(families).map((mode) => {\n const supported = family.modes.find((entry) => entry.id === mode.id);\n return {\n id: mode.id,\n label: supported?.label ?? mode.label,\n title: supported?.title ?? unsupportedModeTitle(family),\n disabled: !supported,\n ...(mode.icon ? { icon: mode.icon } : {}),\n };\n })}\n />\n );\n}\n\nfunction ModelChoices({\n models,\n familyBrand,\n selectedId,\n onSelect,\n onClear,\n}: {\n models: ChatModel[];\n familyBrand: ReturnType<typeof runtimeFamilyBrand>;\n selectedId?: string | undefined;\n onSelect: (model: ChatModel) => void;\n onClear: () => void;\n}) {\n return (\n <div className=\"space-y-0.5 py-1\">\n <ModelChoice\n label=\"Prompt default\"\n selected={!selectedId}\n onClick={onClear}\n />\n {models.map((model) => {\n const icon = providerIcon(model.provider) ?? familyBrand.icon;\n return (\n <ModelChoice\n key={model.id}\n label={model.label}\n title={model.id}\n selected={model.id === selectedId}\n disabled={model.configured === false}\n {...(icon\n ? {\n icon,\n iconColor:\n providerIconColor(model.provider) ?? familyBrand.color,\n }\n : {})}\n onClick={() => onSelect(model)}\n />\n );\n })}\n </div>\n );\n}\n\nfunction ModelChoice({\n label,\n title,\n selected,\n disabled = false,\n icon,\n iconColor,\n onClick,\n}: {\n label: string;\n title?: string | undefined;\n selected: boolean;\n disabled?: boolean | undefined;\n icon?: NonNullable<ReturnType<typeof providerIcon>>;\n iconColor?: string | undefined;\n onClick: () => void;\n}) {\n return (\n <Button\n variant=\"ghost\"\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n aria-label={label}\n {...(title ? { title } : {})}\n className=\"group flex h-8 w-full items-center justify-start gap-2 rounded-md px-2 text-left hover:bg-muted\"\n >\n {icon ? (\n <span className=\"inline-flex size-6 shrink-0 items-center justify-center rounded-md bg-muted/70 ring-1 ring-border/60 group-hover:bg-background\">\n <Icon icon={icon} className={cn(\"size-3.5\", iconColor)} />\n </span>\n ) : (\n <span className=\"size-6 shrink-0\" />\n )}\n <span\n className={cn(\n \"min-w-0 flex-1 truncate text-sm\",\n selected && \"font-semibold\",\n )}\n >\n {label}\n </span>\n <Icon\n icon={UiCheck}\n className={cn(\n \"size-3.5 shrink-0 text-primary\",\n !selected && \"invisible\",\n )}\n />\n </Button>\n );\n}\n\nfunction EffortSlider({\n value,\n efforts,\n onChange,\n}: {\n value?: string | undefined;\n efforts: string[];\n onChange: (effort: string) => void;\n}) {\n const supported = [\n ...new Set(efforts.map((effort) => effort.trim()).filter(Boolean)),\n ];\n if (supported.length === 0) {\n return (\n <div className=\"flex h-8 items-center justify-center text-[11px] text-muted-foreground\">\n Fixed effort for this model\n </div>\n );\n }\n\n const options = [\"\", ...supported];\n const current = value?.trim() ?? \"\";\n const currentIndex = options.indexOf(current);\n const sliderIndex = currentIndex >= 0 ? currentIndex : 0;\n const label =\n currentIndex >= 0\n ? current\n ? effortLevelLabel(current)\n : \"None\"\n : `${effortLevelLabel(current)} unsupported`;\n const percent = (sliderIndex / (options.length - 1)) * 100;\n const firstIcon = effortLevelIcon(supported[0]!);\n const lastIcon = effortLevelIcon(supported[supported.length - 1]!);\n const selectedIcon = current ? effortLevelIcon(current) : undefined;\n\n return (\n <div\n className=\"grid grid-cols-[auto_minmax(0,1fr)_auto] items-start gap-1.5\"\n aria-label=\"Model effort\"\n >\n {firstIcon ? (\n <Icon\n icon={firstIcon}\n className={cn(\"mt-3 size-3.5\", effortLevelColor(supported[0]!))}\n />\n ) : (\n <span className=\"size-3.5\" />\n )}\n <div className=\"relative h-11 pt-1\">\n <input\n type=\"range\"\n min={0}\n max={options.length - 1}\n step={1}\n value={sliderIndex}\n aria-label=\"Reasoning effort\"\n aria-valuetext={label}\n aria-invalid={currentIndex < 0}\n onChange={(event) => {\n const next = options[Number(event.target.value)];\n if (next === undefined) {\n throw new Error(\n `Invalid reasoning effort index: ${event.target.value}`,\n );\n }\n onChange(next);\n }}\n className=\"h-1 w-full cursor-pointer appearance-none rounded-full bg-muted accent-foreground [&::-moz-range-thumb]:size-3 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-background [&::-moz-range-thumb]:bg-foreground [&::-webkit-slider-thumb]:size-3 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-background [&::-webkit-slider-thumb]:bg-foreground [&::-webkit-slider-thumb]:shadow-sm\"\n />\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute top-7 -translate-x-1/2\"\n style={{ left: `${percent}%` }}\n >\n <span\n className={cn(\n \"inline-flex h-5 shrink-0 items-center gap-1 rounded-full border px-1.5 text-[10px] font-semibold leading-none\",\n currentIndex < 0\n ? \"border-destructive/25 bg-destructive/10 text-destructive\"\n : current\n ? cn(\"border-current/25 bg-muted\", effortLevelColor(current))\n : \"border-border bg-muted text-muted-foreground\",\n )}\n title={`Effort: ${label}`}\n >\n {selectedIcon && <Icon icon={selectedIcon} className=\"size-3\" />}\n {label}\n </span>\n </span>\n </div>\n {lastIcon ? (\n <Icon\n icon={lastIcon}\n className={cn(\n \"mt-3 size-3.5\",\n effortLevelColor(supported[supported.length - 1]!),\n )}\n />\n ) : (\n <span className=\"size-3.5\" />\n )}\n </div>\n );\n}\n"],"names":["runtimeFamilyBrand","effortLevelLabel","effortLevelIcon","jsx","DropdownMenu","jsxs","Button","Icon","cn","effortLevelColor","UiChevronDown","SegmentedControl","runtimeModeOptions","unsupportedModeTitle","providerIcon","providerIconColor","UiCheck"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { ChatModel } from '../chat/types';
2
+ import { AISpecRuntimeValue } from './SpecRuntimeEditor.model';
3
+ import { SpecRuntimeFamily, SpecRuntimeModeOption } from './runtime-mode';
4
+ export type RuntimeBarComboProps = {
5
+ value: AISpecRuntimeValue;
6
+ families: SpecRuntimeFamily[];
7
+ family: SpecRuntimeFamily;
8
+ mode: SpecRuntimeModeOption;
9
+ selectedMode: string;
10
+ models: ChatModel[];
11
+ selectedModel: ChatModel | undefined;
12
+ supportedEfforts: string[];
13
+ ariaLabel: string;
14
+ className?: string | undefined;
15
+ onFamilyChange: (familyId: string) => void;
16
+ onModeChange: (modeId: string) => void;
17
+ onModelSelect: (model: ChatModel) => void;
18
+ onModelClear: () => void;
19
+ onEffortChange: (effort: string) => void;
20
+ };
21
+ export declare function RuntimeBarCombo({ value, families, family, mode, selectedMode, models, selectedModel, supportedEfforts, ariaLabel, className, onFamilyChange, onModeChange, onModelSelect, onModelClear, onEffortChange, }: RuntimeBarComboProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=RuntimeBarCombo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeBarCombo.d.ts","sourceRoot":"","sources":["../../../src/data/ai/RuntimeBarCombo.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;IACrC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC1C,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,cAAc,GACf,EAAE,oBAAoB,2CAoFtB"}