kingkont 0.7.87 → 0.7.88

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kingkont",
3
- "version": "0.7.87",
3
+ "version": "0.7.88",
4
4
  "description": "KingKont · Chatium — нод-редактор сцен с AI-генерацией (картинки/видео/голос/SFX/музыка/текст)",
5
5
  "main": "main.js",
6
6
  "bin": {
@@ -727,6 +727,12 @@ function attachDrag(el, node) {
727
727
  // Edit-режим label — не таскаем (контекст редактирования текста).
728
728
  if (e.currentTarget?.classList?.contains('label-text') && e.currentTarget.isContentEditable) return;
729
729
  if (e.target.closest('.delete')) return;
730
+ // Источник mousedown'а: header или label-text. Для label-text НЕ
731
+ // вызываем preventDefault и canvas.appendChild на mousedown — они
732
+ // ломают браузерный счётчик кликов и dblclick на label не срабатывает.
733
+ // Z-promote и preventDefault выполнятся ниже, в onMove, когда drag
734
+ // реально начнётся (перешёл порог 4px).
735
+ const sourceIsLabelText = e.currentTarget?.classList?.contains('label-text');
730
736
  // Multi-select c модификаторами — без drag
731
737
  if (e.metaKey || e.ctrlKey || e.shiftKey) {
732
738
  e.preventDefault();
@@ -741,16 +747,18 @@ function attachDrag(el, node) {
741
747
  state.selectedNodeIds.add(node.id);
742
748
  renderSelection();
743
749
  }
744
- e.preventDefault();
750
+ if (!sourceIsLabelText) e.preventDefault();
745
751
  const startX = e.clientX, startY = e.clientY;
746
752
  const origX = node.x, origY = node.y;
747
753
  el.classList.add('selected');
748
- canvas.appendChild(el);
749
754
  const arr = state.currentBoard.metadata.nodes;
750
- const idx = arr.indexOf(node);
751
- if (idx >= 0 && idx < arr.length - 1) {
752
- arr.splice(idx, 1);
753
- arr.push(node);
755
+ if (!sourceIsLabelText) {
756
+ canvas.appendChild(el);
757
+ const idx = arr.indexOf(node);
758
+ if (idx >= 0 && idx < arr.length - 1) {
759
+ arr.splice(idx, 1);
760
+ arr.push(node);
761
+ }
754
762
  }
755
763
 
756
764
  // Multi-drag: если выделено несколько нод и кликнули по одной из них —
@@ -780,6 +788,18 @@ function attachDrag(el, node) {
780
788
  const onMove = ev => {
781
789
  const dx = ev.clientX - startX, dy = ev.clientY - startY;
782
790
  if (!dragInitialized && Math.hypot(dx, dy) < 4) return;
791
+ // Первый раз перешли порог — для label-text z-promote отложен сюда,
792
+ // чтобы не ломать dblclick. Также гасим случайно стартовавший
793
+ // text-selection в read-режиме.
794
+ if (!dragInitialized && sourceIsLabelText) {
795
+ canvas.appendChild(el);
796
+ const idx = arr.indexOf(node);
797
+ if (idx >= 0 && idx < arr.length - 1) {
798
+ arr.splice(idx, 1);
799
+ arr.push(node);
800
+ }
801
+ try { window.getSelection()?.removeAllRanges(); } catch {}
802
+ }
783
803
  dragInitialized = true;
784
804
  // Проверяем — курсор над таймлайном?
785
805
  const tlTrackEl = document.elementsFromPoint(ev.clientX, ev.clientY)
@@ -526,6 +526,17 @@
526
526
  природу» ноды, в read-mode сигнал что dblclick → редактировать. */
527
527
  .node.label-node .label-text { cursor: text; }
528
528
  .node.label-node:hover .label-text:not([contenteditable]) { cursor: pointer; }
529
+ /* В read-режиме блокируем text-selection — чтобы single-click не выделял
530
+ слово, и mousedown без preventDefault (для работы dblclick) не давал
531
+ браузеру стартовать selection-drag. В edit-режиме выделение разрешено. */
532
+ .node.label-node .label-text:not([contenteditable]) {
533
+ user-select: none;
534
+ -webkit-user-select: none;
535
+ }
536
+ .node.label-node .label-text[contenteditable] {
537
+ user-select: text;
538
+ -webkit-user-select: text;
539
+ }
529
540
  /* === Label-шрифты ===
530
541
  Все варианты — bundled woff2 (см. assets/fonts/), кириллица поддержана. */
531
542
  .node.label-node .label-text[data-font="pencil"] {