kingkont 0.20.8 → 0.20.9

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/index.html CHANGED
@@ -7,6 +7,15 @@
7
7
  <link rel="stylesheet" href="renderer/styles.css">
8
8
  </head>
9
9
  <body>
10
+ <script>
11
+ // Electron: preload.js выставляет window.cloudFs. Если есть — юзер
12
+ // работает локально и всегда в edit-mode (нет share-preview как в web).
13
+ // Без этой строки в Electron .kk-edit-only элементы остаются скрытыми
14
+ // до тех пор пока openFilm/renderTemplateOverlay добавят body.edit-mode —
15
+ // юзер видит «голый» UI без панелей секунду. На web window.cloudFs
16
+ // undefined → noop, режим определяет web-shim.js по URL.
17
+ if (window.cloudFs) document.body.classList.add('edit-mode');
18
+ </script>
10
19
 
11
20
  <aside class="sidebar">
12
21
  <div class="sidebar-header">
@@ -28,20 +37,20 @@
28
37
  (cloud или папочный). Облачный — обновляет существующую запись;
29
38
  папочный — открывает диалог «куда сохранить» (новый/обновить
30
39
  существующий, см. saveCurrentProjectAsCloud). -->
31
- <button id="saveProjectCloud" title="Загрузить весь проект на сервер" style="display:none; margin-top:6px;">☁ Сохранить на сервер</button>
40
+ <button id="saveProjectCloud" class="kk-edit-only" title="Загрузить весь проект на сервер" style="display:none; margin-top:6px;">☁ Сохранить на сервер</button>
32
41
  <div id="rootInfo" style="font-size: 12px; color: #aaa; word-break: break-all;"></div>
33
42
  </div>
34
43
 
35
- <div class="sidebar-search-row">
44
+ <div class="sidebar-search-row kk-edit-only">
36
45
  <input id="sidebarSearch" type="text" placeholder="Поиск…" autocomplete="off">
37
46
  </div>
38
47
 
39
- <div class="sidebar-section">
48
+ <div class="sidebar-section kk-edit-only">
40
49
  <h3>Персонажи <button id="newCharacter" disabled title="Создать персонажа">+</button></h3>
41
50
  <div class="sidebar-list" id="characterList"></div>
42
51
  </div>
43
52
 
44
- <div class="sidebar-section">
53
+ <div class="sidebar-section kk-edit-only">
45
54
  <h3>Общее <button id="newLocation" disabled title="Создать общую доску">+</button></h3>
46
55
  <div class="sidebar-list" id="locationList"></div>
47
56
  </div>
@@ -49,7 +58,7 @@
49
58
  <div class="sidebar-section flex">
50
59
  <h3>
51
60
  <span>Сцены</span>
52
- <span style="display:flex; gap:4px;">
61
+ <span style="display:flex; gap:4px;" class="kk-edit-only">
53
62
  <button id="newEpisode" disabled title="Создать сцену">+</button>
54
63
  <!-- Кнопка 🎨 «Шаблоны» убрана из sidebar'а внутри проекта:
55
64
  scene-templates в текущей модели не используются (см. упрощение
@@ -61,7 +70,7 @@
61
70
  </h3>
62
71
  <div class="sidebar-list" id="episodeList"></div>
63
72
  </div>
64
- <div class="sidebar-footer">
73
+ <div class="sidebar-footer kk-edit-only">
65
74
  <div id="balancesAll" style="display:flex; flex-direction:column; gap:4px;"></div>
66
75
  <!-- jobsInfo + hint убраны (юзер: «убери инфу 'в фоне' и 'перетаскивай
67
76
  файлы на холст'»). Отступ сохранён через min-height в CSS — UI
@@ -117,13 +126,23 @@
117
126
 
118
127
  <main class="main">
119
128
  <div class="toolbar">
120
- <button id="addText" disabled title="Создать пустую текстовую ноду">✏️ Написать</button>
121
- <button id="genText" disabled title="Сгенерировать текст">📝 Текст</button>
122
- <button id="genAudio" disabled title="Сгенерировать голос">🎙 Голос</button>
123
- <button id="genImage" disabled title="Сгенерировать картинку">🖼 Картинка</button>
124
- <button id="genVideo" disabled title="Сгенерировать видео">🎬 Видео</button>
125
- <button id="genSfx" disabled title="Сгенерировать звуковой эффект (ElevenLabs)">💥 SFX</button>
126
- <button id="genMusic" disabled title="Сгенерировать музыку (ElevenLabs)">🎵 Музыка</button>
129
+ <button id="addText" class="kk-edit-only" disabled title="Создать пустую текстовую ноду">✏️ Написать</button>
130
+ <button id="genText" class="kk-edit-only" disabled title="Сгенерировать текст">📝 Текст</button>
131
+ <button id="genAudio" class="kk-edit-only" disabled title="Сгенерировать голос">🎙 Голос</button>
132
+ <button id="genImage" class="kk-edit-only" disabled title="Сгенерировать картинку">🖼 Картинка</button>
133
+ <button id="genVideo" class="kk-edit-only" disabled title="Сгенерировать видео">🎬 Видео</button>
134
+ <button id="genSfx" class="kk-edit-only" disabled title="Сгенерировать звуковой эффект (ElevenLabs)">💥 SFX</button>
135
+ <button id="genMusic" class="kk-edit-only" disabled title="Сгенерировать музыку (ElevenLabs)">🎵 Музыка</button>
136
+ <span class="toolbar-sep kk-edit-only"></span>
137
+ <button data-draw-tool="pencil" class="kk-edit-only" title="Карандаш — тонкая стрелка (Esc выход, удаление через Backspace или ×)">✏</button>
138
+ <button data-draw-tool="lead" class="kk-edit-only" title="Грифель — средняя стрелка">𓇼</button>
139
+ <button data-draw-tool="paint" class="kk-edit-only" title="Краска — толстая стрелка">🖌</button>
140
+ <!-- View-only banner: in-place в toolbar'е (вместо edit-кнопок).
141
+ Видна только в body.view-only-mode (см. styles.css .kk-view-only-banner). -->
142
+ <div id="viewOnlyBanner" class="kk-view-only-banner">
143
+ <span class="kk-vo-label">👁 <b>Только просмотр</b></span>
144
+ <button id="viewOnlyCloneBtn" class="primary">📋 Скопировать себе</button>
145
+ </div>
127
146
  <span class="spacer"></span>
128
147
  <div class="zoom-ctl">
129
148
  <button id="zoomOut" title="Уменьшить (Cmd −)">−</button>
@@ -131,8 +150,8 @@
131
150
  <button id="zoomIn" title="Увеличить (Cmd +)">+</button>
132
151
  </div>
133
152
  <button id="charSettingsBtn" style="display:none;" title="Настройки персонажа">⚙</button>
134
- <button id="timelineBtn" title="Показать/скрыть таймлайн">🎬 Таймлайн</button>
135
- <button id="chatBtn" title="Открыть/скрыть чат с KingKont (⌘J / Ctrl+J)" onclick="window.kingChat?.toggle?.()">💬 Чат <span style="opacity:0.6; font-size:10px;">⌘J</span></button>
153
+ <button id="timelineBtn" class="kk-edit-only" title="Показать/скрыть таймлайн">🎬 Таймлайн</button>
154
+ <button id="chatBtn" class="kk-edit-only" title="Открыть/скрыть чат с KingKont (⌘J / Ctrl+J)" onclick="window.kingChat?.toggle?.()">💬 Чат <span style="opacity:0.6; font-size:10px;">⌘J</span></button>
136
155
  <!-- скрытые, но используемые элементы (logic ссылается по id) -->
137
156
  <span id="hint" class="path" style="display:none;"></span>
138
157
  <span id="boardBadge" class="badge" style="display:none;"></span>
@@ -620,6 +639,9 @@
620
639
  <script src="renderer/chat.js"></script>
621
640
  <!-- notifyPanel.js — окно событий (генерации, чат-ответы, ошибки). 🔔 в углу. -->
622
641
  <script src="renderer/notifyPanel.js"></script>
642
+ <!-- drawings.js — freehand-стрелки на доске (карандаш/грифель/краска).
643
+ После board.js — использует state.currentBoard и хук в renderConnections. -->
644
+ <script src="renderer/drawings.js"></script>
623
645
 
624
646
  </body>
625
647
  </html>
package/lib/providers.js CHANGED
@@ -1092,8 +1092,12 @@ async function deleteTemplate(id, s) {
1092
1092
 
1093
1093
  async function listProjects(s) {
1094
1094
  const headers = chatiumAuthHeaders(s);
1095
- logCall('GET ', 'Chatium', chatiumBase(s) + CHATIUM_PATHS.projects);
1096
- const r = await fetch(chatiumBase(s) + CHATIUM_PATHS.projects, { headers });
1095
+ // /proj_list — новый endpoint, отдаёт isPublic / shared / permission /
1096
+ // canModify / firstImageUrl. Старый /projects~list закеширован под
1097
+ // owner-only без этих полей; см. spaces/server/api/proj_list.ts.
1098
+ const url = chatiumBase(s) + '/app/spaces/server/api/proj_list';
1099
+ logCall('GET ', 'Chatium', url);
1100
+ const r = await fetch(url, { headers });
1097
1101
  const text = await r.text();
1098
1102
  let d; try { d = JSON.parse(text); } catch { d = { raw: text }; }
1099
1103
  if (!r.ok) throw new Error(d?.error || d?.reason || `HTTP ${r.status}`);
@@ -1102,7 +1106,8 @@ async function listProjects(s) {
1102
1106
 
1103
1107
  async function getProject(id, s) {
1104
1108
  const headers = chatiumAuthHeaders(s);
1105
- const url = `${chatiumBase(s)}${CHATIUM_PATHS.projects}~get?id=${encodeURIComponent(id)}`;
1109
+ // /proj_get расширенный endpoint с isPublic + permission + share-grants.
1110
+ const url = `${chatiumBase(s)}/app/spaces/server/api/proj_get?id=${encodeURIComponent(id)}`;
1106
1111
  logCall('GET ', 'Chatium', url);
1107
1112
  const r = await fetch(url, { headers });
1108
1113
  const text = await r.text();
package/main.js CHANGED
@@ -953,10 +953,9 @@ function buildMenu() {
953
953
  { role: 'reload' },
954
954
  { role: 'toggleDevTools' },
955
955
  { type: 'separator' },
956
- { role: 'resetZoom' },
957
- { role: 'zoomIn' },
958
- { role: 'zoomOut' },
959
- { type: 'separator' },
956
+ // Zoom-роли (Cmd+0 / Cmd+= / Cmd+-) сознательно убраны: с zoom'ом
957
+ // ломалась раскладка холста и юзер случайно его триггерил при
958
+ // обычной правке. Если когда-то понадобится — `{ role: 'zoomIn' }`.
960
959
  { role: 'togglefullscreen' },
961
960
  ],
962
961
  },
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kingkont",
3
- "version": "0.20.8",
4
- "description": "KingKont · Chatium нод-редактор сцен с AI-генерацией (картинки/видео/голос/SFX/музыка/текст)",
3
+ "version": "0.20.9",
4
+ "description": "KingKont \u00b7 Chatium \u2014 \u043d\u043e\u0434-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u0446\u0435\u043d \u0441 AI-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 (\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438/\u0432\u0438\u0434\u0435\u043e/\u0433\u043e\u043b\u043e\u0441/SFX/\u043c\u0443\u0437\u044b\u043a\u0430/\u0442\u0435\u043a\u0441\u0442)",
5
5
  "main": "main.js",
6
6
  "bin": {
7
7
  "kingkont": "bin/kingkont.js"
@@ -89,4 +89,4 @@
89
89
  "icon": "assets/logo-1024.png"
90
90
  }
91
91
  }
92
- }
92
+ }