@sequent-org/moodboard 1.2.72 → 1.2.73
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
|
@@ -175,7 +175,9 @@ export class FileObject {
|
|
|
175
175
|
|
|
176
176
|
// Иконка файла в верхней части
|
|
177
177
|
const iconSize = Math.min(48, w * 0.4);
|
|
178
|
-
|
|
178
|
+
// Центрируем фактическую ширину иконки (она рисуется как 80% от size)
|
|
179
|
+
const iconWidthDrawn = iconSize * 0.8;
|
|
180
|
+
const iconX = (w - iconWidthDrawn) / 2;
|
|
179
181
|
const iconY = 16;
|
|
180
182
|
|
|
181
183
|
// Определяем цвет иконки по расширению файла
|
|
@@ -236,21 +238,55 @@ export class FileObject {
|
|
|
236
238
|
|
|
237
239
|
_updateTextPosition() {
|
|
238
240
|
if (!this.fileNameText) return;
|
|
239
|
-
|
|
240
|
-
// Обновляем стиль текста
|
|
241
|
-
this.fileNameText.style.
|
|
241
|
+
|
|
242
|
+
// Обновляем стиль текста (ограничиваем по подложке и переносим слова)
|
|
243
|
+
this.fileNameText.style.wordWrap = true;
|
|
244
|
+
this.fileNameText.style.wordWrapWidth = Math.max(1, this.width - 16);
|
|
242
245
|
this.fileNameText.updateText();
|
|
243
|
-
|
|
244
|
-
//
|
|
246
|
+
|
|
247
|
+
// Параметры иконки и отступов
|
|
248
|
+
const iconSize = Math.min(48, this.width * 0.4);
|
|
249
|
+
const iconY = 16;
|
|
250
|
+
const gapName = 8; // расстояние между иконкой и названием (уменьшено в 2 раза)
|
|
251
|
+
const gapSize = 6; // расстояние между названием и размером
|
|
252
|
+
const bottomPad = 10; // нижний внутренний отступ подложки
|
|
253
|
+
|
|
254
|
+
// Позиционируем название файла непосредственно под иконкой и по центру
|
|
245
255
|
this.fileNameText.anchor.set(0.5, 0);
|
|
246
256
|
this.fileNameText.x = this.width / 2;
|
|
247
|
-
this.fileNameText.y =
|
|
248
|
-
|
|
249
|
-
// Позиционируем размер файла
|
|
257
|
+
this.fileNameText.y = iconY + iconSize + gapName;
|
|
258
|
+
|
|
259
|
+
// Позиционируем размер файла под названием
|
|
250
260
|
if (this.fileSizeText) {
|
|
251
261
|
this.fileSizeText.anchor.set(0.5, 0);
|
|
252
262
|
this.fileSizeText.x = this.width / 2;
|
|
253
|
-
this.fileSizeText.y = this.height
|
|
263
|
+
this.fileSizeText.y = this.fileNameText.y + this.fileNameText.height + gapSize;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Адаптивная высота подложки: не даём текстам выходить за пределы
|
|
267
|
+
const contentBottom = this.fileSizeText
|
|
268
|
+
? (this.fileSizeText.y + this.fileSizeText.height)
|
|
269
|
+
: (this.fileNameText.y + this.fileNameText.height);
|
|
270
|
+
const requiredHeight = Math.ceil(contentBottom + bottomPad);
|
|
271
|
+
if (requiredHeight > this.height) {
|
|
272
|
+
const previous = this.height;
|
|
273
|
+
this.height = requiredHeight;
|
|
274
|
+
// Перерисовываем фон и иконку под новую высоту
|
|
275
|
+
this._redraw();
|
|
276
|
+
// Повторно позиционируем тексты (одноразово)
|
|
277
|
+
if (this.height !== previous) {
|
|
278
|
+
// Предотвращаем возможную рекурсию: вторая установка не должна дальше менять высоту
|
|
279
|
+
this.fileNameText.style.wordWrapWidth = Math.max(1, this.width - 16);
|
|
280
|
+
this.fileNameText.updateText();
|
|
281
|
+
this.fileNameText.anchor.set(0.5, 0);
|
|
282
|
+
this.fileNameText.x = this.width / 2;
|
|
283
|
+
this.fileNameText.y = iconY + iconSize + gapName;
|
|
284
|
+
if (this.fileSizeText) {
|
|
285
|
+
this.fileSizeText.anchor.set(0.5, 0);
|
|
286
|
+
this.fileSizeText.x = this.width / 2;
|
|
287
|
+
this.fileSizeText.y = this.fileNameText.y + this.fileNameText.height + gapSize;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
254
290
|
}
|
|
255
291
|
}
|
|
256
292
|
|
|
@@ -592,28 +592,30 @@ export class PlacementTool extends BaseTool {
|
|
|
592
592
|
background.drawRect(0, 0, width, height);
|
|
593
593
|
background.endFill();
|
|
594
594
|
|
|
595
|
-
// Иконка-заглушка файла наверху
|
|
595
|
+
// Иконка-заглушка файла наверху (центрируем фактическую ширину)
|
|
596
596
|
const icon = new PIXI.Graphics();
|
|
597
597
|
const iconSize = Math.min(48, width * 0.4);
|
|
598
|
-
const
|
|
598
|
+
const iconWidthDrawn = iconSize * 0.8;
|
|
599
|
+
const iconX = (width - iconWidthDrawn) / 2;
|
|
599
600
|
const iconY = 16;
|
|
600
601
|
icon.beginFill(0x6B7280, 1);
|
|
601
|
-
icon.drawRect(iconX, iconY,
|
|
602
|
+
icon.drawRect(iconX, iconY, iconWidthDrawn, iconSize);
|
|
602
603
|
icon.endFill();
|
|
603
604
|
|
|
604
605
|
// Текст названия файла
|
|
605
606
|
const fileName = this.selectedFile.fileName || 'File';
|
|
606
|
-
const displayName = fileName
|
|
607
|
+
const displayName = fileName;
|
|
607
608
|
const nameText = new PIXI.Text(displayName, {
|
|
608
609
|
fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif',
|
|
609
610
|
fontSize: 12,
|
|
610
611
|
fill: 0x333333,
|
|
611
612
|
align: 'center',
|
|
612
613
|
wordWrap: true,
|
|
613
|
-
wordWrapWidth: width -
|
|
614
|
+
wordWrapWidth: Math.max(1, width - 16)
|
|
614
615
|
});
|
|
615
|
-
nameText.
|
|
616
|
-
nameText.
|
|
616
|
+
nameText.anchor.set(0.5, 0);
|
|
617
|
+
nameText.x = width / 2;
|
|
618
|
+
nameText.y = iconY + iconSize + 8;
|
|
617
619
|
|
|
618
620
|
// Добавляем в контейнер в правильном порядке
|
|
619
621
|
this.ghostContainer.addChild(shadow);
|