kingkont 0.7.68 → 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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/renderer/board.js +17 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kingkont",
3
- "version": "0.7.68",
3
+ "version": "0.7.69",
4
4
  "description": "KingKont · Chatium — нод-редактор сцен с AI-генерацией (картинки/видео/голос/SFX/музыка/текст)",
5
5
  "main": "main.js",
6
6
  "bin": {
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 — навешиваем фрешевые handler'ы removeEventListener
827
- // на close, чтобы при следующем openDefaultPromptsDialog не накапливались).
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 (папку): создать новую папку с тем же именем, перенести