kingkont 0.7.67 → 0.7.69
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/renderer/board.js +17 -2
- package/renderer/generate.js +7 -0
- package/renderer/settings.js +4 -0
package/package.json
CHANGED
package/renderer/board.js
CHANGED
|
@@ -799,7 +799,18 @@ function _dpReadList() {
|
|
|
799
799
|
return out;
|
|
800
800
|
}
|
|
801
801
|
|
|
802
|
+
// Cleanup от предыдущего вызова openDefaultPromptsDialog, чтобы handler'ы
|
|
803
|
+
// не накапливались. Накопление было настоящим багом: если юзер закрывал
|
|
804
|
+
// dialog через Esc (а не «Отмена»), handler'ы оставались привязанными к
|
|
805
|
+
// старому item; в следующем открытии для ДРУГОЙ сцены клик Save срабатывал
|
|
806
|
+
// для обоих item'ов одновременно — дефолты сохранялись в обе сцены.
|
|
807
|
+
let _dpDialogCleanup = null;
|
|
808
|
+
|
|
802
809
|
async function openDefaultPromptsDialog(kind, item) {
|
|
810
|
+
// Снимаем handler'ы прошлого открытия (если осталось).
|
|
811
|
+
if (typeof _dpDialogCleanup === 'function') _dpDialogCleanup();
|
|
812
|
+
_dpDialogCleanup = null;
|
|
813
|
+
|
|
803
814
|
const isActive = state.currentBoard?.kind === kind && state.currentBoard.name === item.name;
|
|
804
815
|
let metaSettings;
|
|
805
816
|
if (isActive) {
|
|
@@ -823,8 +834,8 @@ async function openDefaultPromptsDialog(kind, item) {
|
|
|
823
834
|
document.getElementById('defaultPromptsModal').classList.remove('hidden');
|
|
824
835
|
setTimeout(() => list.querySelector('textarea')?.focus(), 30);
|
|
825
836
|
|
|
826
|
-
// Save / Cancel / Add —
|
|
827
|
-
//
|
|
837
|
+
// Save / Cancel / Add — handler'ы привязаны к ЭТОМУ конкретному item
|
|
838
|
+
// через замыкание. Cleanup гарантирует что прошлые handler'ы уже сняты.
|
|
828
839
|
const saveBtn = document.getElementById('dpSave');
|
|
829
840
|
const cancelBtn = document.getElementById('dpCancel');
|
|
830
841
|
const addBtn = document.getElementById('dpAdd');
|
|
@@ -833,6 +844,7 @@ async function openDefaultPromptsDialog(kind, item) {
|
|
|
833
844
|
saveBtn.removeEventListener('click', onSave);
|
|
834
845
|
cancelBtn.removeEventListener('click', onCancel);
|
|
835
846
|
addBtn.removeEventListener('click', onAdd);
|
|
847
|
+
_dpDialogCleanup = null;
|
|
836
848
|
};
|
|
837
849
|
const onAdd = () => {
|
|
838
850
|
list.appendChild(_dpRenderItem({ id: crypto.randomUUID(), text: '', kinds: ['image'], enabled: true }));
|
|
@@ -858,6 +870,9 @@ async function openDefaultPromptsDialog(kind, item) {
|
|
|
858
870
|
saveBtn.addEventListener('click', onSave);
|
|
859
871
|
cancelBtn.addEventListener('click', onCancel);
|
|
860
872
|
addBtn.addEventListener('click', onAdd);
|
|
873
|
+
// Сохраняем cleanup чтобы вызвать при закрытии через Esc или повторном
|
|
874
|
+
// openDefaultPromptsDialog (см. строку выше).
|
|
875
|
+
_dpDialogCleanup = cleanup;
|
|
861
876
|
}
|
|
862
877
|
|
|
863
878
|
// Переименовать board (папку): создать новую папку с тем же именем, перенести
|
package/renderer/generate.js
CHANGED
|
@@ -287,6 +287,13 @@ async function ensureApiKey(forKind) {
|
|
|
287
287
|
async function openGenModal(kind) {
|
|
288
288
|
if (!await ensureApiKey(kind)) return;
|
|
289
289
|
if (!state.currentBoard) return;
|
|
290
|
+
// Чистим стейт от прошлого regenerate'а (если юзер закрыл его modal через
|
|
291
|
+
// Esc, а не «Отмена» — глобальный Esc-handler не сбрасывает state).
|
|
292
|
+
// Без этого следующий submit принял бы текущую сессию за regenerate
|
|
293
|
+
// прошлой ноды и сгенерил бы туда вместо создания новой.
|
|
294
|
+
state.regenerateTarget = null;
|
|
295
|
+
state.pendingConnectionFrom = null;
|
|
296
|
+
state.sourceRef = null;
|
|
290
297
|
state.genKind = kind;
|
|
291
298
|
document.querySelectorAll('#genModal [data-kind]').forEach(b =>
|
|
292
299
|
b.classList.toggle('active', b.dataset.kind === kind));
|
package/renderer/settings.js
CHANGED
|
@@ -404,6 +404,10 @@ function closeAddMenuOnOutside(e) {
|
|
|
404
404
|
}
|
|
405
405
|
|
|
406
406
|
async function openGenerateForRef(fromNode, clientX, clientY, forceKind) {
|
|
407
|
+
// Чистим стейт от прошлого regenerate'а (см. комментарий в
|
|
408
|
+
// openGenModal — то же самое для anchor-drag flow).
|
|
409
|
+
state.regenerateTarget = null;
|
|
410
|
+
// pendingConnectionFrom выставится ниже, sourceRef — тоже.
|
|
407
411
|
// forceKind — если из anchor-drop меню юзер выбрал конкретный тип.
|
|
408
412
|
if (forceKind) {
|
|
409
413
|
if (!await ensureApiKey(forceKind)) return;
|