@kolbo/mcp 1.106.1 → 1.106.3
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/package.json +1 -1
- package/src/apps/theme.js +4 -5
- package/src/apps/widgets/generation.js +16 -15
package/package.json
CHANGED
package/src/apps/theme.js
CHANGED
|
@@ -126,10 +126,11 @@ body {
|
|
|
126
126
|
display: inline-flex; align-items: center; gap: 5px;
|
|
127
127
|
padding: 3px 8px; border-radius: 999px;
|
|
128
128
|
background: var(--surface-2); border: 0;
|
|
129
|
-
font-size:
|
|
129
|
+
font-size: 11.5px; font-weight: 500; color: var(--text-muted);
|
|
130
130
|
white-space: nowrap;
|
|
131
|
-
font
|
|
132
|
-
|
|
131
|
+
/* UI font, not a code font: tags are labels people read ("7 images",
|
|
132
|
+
"Seedance 2.5"), and monospace made the whole row look like a log line. */
|
|
133
|
+
font-variant-numeric: tabular-nums;
|
|
133
134
|
animation: k-chip-in 200ms var(--spring);
|
|
134
135
|
}
|
|
135
136
|
@keyframes k-chip-in { from { opacity: 0; transform: translateX(-6px); } to { opacity: 1; transform: none; } }
|
|
@@ -335,8 +336,6 @@ video::-webkit-media-controls-fullscreen-button { display: none !important; }
|
|
|
335
336
|
hover-only Download / Attach buttons were simply invisible. */
|
|
336
337
|
@media (hover: none) { .k-dl { opacity: 1; } }
|
|
337
338
|
.k-dl:hover { background: var(--brand); border-color: var(--brand); }
|
|
338
|
-
/* Attach-to-prompt sits immediately left of Download (30px button + 8px gap). */
|
|
339
|
-
.k-attach { right: 46px; }
|
|
340
339
|
.k-viewer { position: relative; }
|
|
341
340
|
|
|
342
341
|
/* Keep the whole completed card under the host's iframe height cap (~800px):
|
|
@@ -221,7 +221,13 @@ function boot(sc) {
|
|
|
221
221
|
// model_name / voice_name are the CLEAN catalog names, resolved server-side
|
|
222
222
|
// (src/tools/_shared.js on submit, get_generation_status on completion). The raw
|
|
223
223
|
// ids stay in sc.model / sc.voice for Recreate + model context — never for display.
|
|
224
|
-
|
|
224
|
+
// 'Generations' is the server's placeholder when a status check spans
|
|
225
|
+
// several generations and no single model is known (src/tools/generate.js).
|
|
226
|
+
// It is not a model: rendered as one it showed a "G Generations" brand chip.
|
|
227
|
+
function modelLabel(sc) {
|
|
228
|
+
var m = sc.model_name || sc.model;
|
|
229
|
+
return m && m !== 'Generations' ? m : '';
|
|
230
|
+
}
|
|
225
231
|
function voiceLabel(sc) { return sc.voice_name || sc.voice || (sc.settings || {}).voice; }
|
|
226
232
|
|
|
227
233
|
// @VisualDNA / #Moodboard mentions are the tag syntax the server resolves into
|
|
@@ -297,7 +303,10 @@ function renderChips(sc) {
|
|
|
297
303
|
var h = modelChipHTML(modelLabel(sc), sc.model_icon);
|
|
298
304
|
var s = sc.settings || {};
|
|
299
305
|
var kind = displayKind(sc);
|
|
300
|
-
|
|
306
|
+
// One chip says what and how many: "7 images", not "image" + "×7".
|
|
307
|
+
var many = sc.count > 1;
|
|
308
|
+
var noun = kind === '3d' ? '3D model' : kind === 'audio' ? 'track' : kind;
|
|
309
|
+
if (kind) h += chip(iconFor(kind) + ' ' + (many ? sc.count + ' ' + noun + 's' : (kind === '3d' ? '3D' : kind)));
|
|
301
310
|
// Shot count when we know it, otherwise just say multishot is on — the
|
|
302
311
|
// provider picks the count in that case, and showing nothing made an
|
|
303
312
|
// enabled toggle look like it had not applied.
|
|
@@ -332,7 +341,7 @@ function renderChips(sc) {
|
|
|
332
341
|
h += chip(face + ' ' + esc(voice));
|
|
333
342
|
}
|
|
334
343
|
if (s.mode) h += chip(esc(s.mode));
|
|
335
|
-
if (
|
|
344
|
+
if (many && !kind) h += chip(sc.count + ' items');
|
|
336
345
|
h += referenceHTML(sc);
|
|
337
346
|
el('chips').innerHTML = h;
|
|
338
347
|
}
|
|
@@ -1040,12 +1049,10 @@ function renderLinks(urls) {
|
|
|
1040
1049
|
// Small hover download button attached to a media cell (per-item downloads —
|
|
1041
1050
|
// batch grids and CD scenes have no single "current" url for the action row).
|
|
1042
1051
|
function dlBtnHTML(u) {
|
|
1043
|
-
//
|
|
1044
|
-
//
|
|
1045
|
-
// media
|
|
1046
|
-
return '<button class="k-dl
|
|
1047
|
-
+ ICONS.upload + '</button>'
|
|
1048
|
-
+ '<button class="k-dl" data-dl="' + esc(u) + '" title="Download" aria-label="Download">' + ICONS.download + '</button>';
|
|
1052
|
+
// Download only. The "attach to prompt" button that sat beside it was
|
|
1053
|
+
// removed: no host (claude.ai, ChatGPT, Claude Code, Kolbo Code) reliably
|
|
1054
|
+
// put the media into the composer, so it read as a dead upload button.
|
|
1055
|
+
return '<button class="k-dl" data-dl="' + esc(u) + '" title="Download" aria-label="Download">' + ICONS.download + '</button>';
|
|
1049
1056
|
}
|
|
1050
1057
|
function wireDlButtons(root) {
|
|
1051
1058
|
Array.prototype.forEach.call((root || document).querySelectorAll('.k-dl[data-dl]'), function (b) {
|
|
@@ -1054,12 +1061,6 @@ function wireDlButtons(root) {
|
|
|
1054
1061
|
window.kolbo.openLink(downloadUrl(b.getAttribute('data-dl')));
|
|
1055
1062
|
};
|
|
1056
1063
|
});
|
|
1057
|
-
Array.prototype.forEach.call((root || document).querySelectorAll('.k-attach[data-attach]'), function (b) {
|
|
1058
|
-
b.onclick = function (e) {
|
|
1059
|
-
e.stopPropagation();
|
|
1060
|
-
window.kolbo.attachMedia(b.getAttribute('data-attach'));
|
|
1061
|
-
};
|
|
1062
|
-
});
|
|
1063
1064
|
}
|
|
1064
1065
|
|
|
1065
1066
|
// CD scenes render as the SAME viewer+thumbnail carousel as image batches —
|