@sequent-org/moodboard 1.2.10 → 1.2.12

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": "@sequent-org/moodboard",
3
- "version": "1.2.10",
3
+ "version": "1.2.12",
4
4
  "type": "module",
5
5
  "description": "Interactive moodboard",
6
6
  "main": "./src/index.js",
package/src/index.js CHANGED
@@ -1,6 +1,25 @@
1
1
  // Основной экспорт пакета - готовый MoodBoard с UI
2
2
  export { MoodBoard } from './moodboard/MoodBoard.js';
3
3
 
4
+ /**
5
+ * БЫСТРОЕ ИСПРАВЛЕНИЕ эмоджи для Vite/bundled версий
6
+ * Устанавливает правильный базовый путь к ассетам пакета
7
+ */
8
+ export function fixEmojiPaths(packageName = null) {
9
+ if (packageName) {
10
+ // Если указано имя пакета - используем его
11
+ window.MOODBOARD_BASE_PATH = `${window.location.origin}/node_modules/${packageName}/`;
12
+ console.log('🔧 Установлен базовый путь для эмоджи:', window.MOODBOARD_BASE_PATH);
13
+ } else {
14
+ // Автоопределение - используем стандартное имя пакета
15
+ const detectedPackage = '@sequent-org/moodboard';
16
+ window.MOODBOARD_BASE_PATH = `${window.location.origin}/node_modules/${detectedPackage}/`;
17
+ console.log('🔧 Автоопределен базовый путь для эмоджи:', window.MOODBOARD_BASE_PATH);
18
+ }
19
+
20
+ return window.MOODBOARD_BASE_PATH;
21
+ }
22
+
4
23
  /**
5
24
  * Диагностика конфликтов CSS для панелей
6
25
  * Находит что именно переопределяет ширину панелей
@@ -155,6 +174,14 @@ export { initMoodBoardNoBundler, quickInitMoodBoard, injectCriticalStyles, force
155
174
  export { StyleLoader } from './utils/styleLoader.js';
156
175
  export { EmojiLoaderNoBundler } from './utils/emojiLoaderNoBundler.js';
157
176
 
177
+ // Экспорт встроенных SVG эмоджи
178
+ export {
179
+ addInlineSvgEmoji,
180
+ bulkAddInlineSvgEmojis,
181
+ getAvailableInlineEmojis,
182
+ isInlineSvgEmoji
183
+ } from './utils/inlineSvgEmojis.js';
184
+
158
185
  /**
159
186
  * СУПЕР-АГРЕССИВНАЯ функция для исправления панелей в проектах с конфликтами CSS
160
187
  */
@@ -1,3 +1,6 @@
1
+ // Импортируем встроенные SVG эмоджи
2
+ import { getInlineEmojiUrl, isInlineSvgEmoji } from './inlineSvgEmojis.js';
3
+
1
4
  // Явные переопределения соответствия эмодзи → имя файла (без расширения)
2
5
  // Ключ и значение — в нижнем регистре, кодпоинты через дефис
3
6
  const EMOJI_OVERRIDES = new Map([
@@ -124,6 +127,24 @@ export function buildLocalPaths(emoji) {
124
127
  }
125
128
  }
126
129
 
130
+ /**
131
+ * ПРИОРИТЕТНЫЙ РЕЗОЛВЕР: Сначала встроенные SVG, потом файлы
132
+ * @param {string} emoji - эмоджи символ
133
+ * @returns {string|null} Data URL для встроенного SVG или null
134
+ */
135
+ export function resolveInlineEmojiFirst(emoji) {
136
+ // Приоритет 1: Встроенные SVG эмоджи (мгновенная загрузка, нет проблем с путями)
137
+ if (isInlineSvgEmoji(emoji)) {
138
+ const dataUrl = getInlineEmojiUrl(emoji);
139
+ if (dataUrl) {
140
+ console.log('✅ Используем встроенный SVG эмоджи:', emoji);
141
+ return dataUrl;
142
+ }
143
+ }
144
+
145
+ return null; // Эмоджи не найден во встроенных
146
+ }
147
+
127
148
  /**
128
149
  * Возвращает абсолютный URL для эмоджи с учетом базового пути
129
150
  * @param {string} emoji - эмоджи символ
@@ -131,6 +152,9 @@ export function buildLocalPaths(emoji) {
131
152
  * @returns {string|null} абсолютный URL или null
132
153
  */
133
154
  export function resolveEmojiAbsoluteUrl(emoji, basePath = null) {
155
+ // ПРИОРИТЕТ 1: Проверяем встроенные SVG эмоджи
156
+ const inlineUrl = resolveInlineEmojiFirst(emoji);
157
+ if (inlineUrl) return inlineUrl;
134
158
  try {
135
159
  const base = emojiFilenameBase(emoji);
136
160
  if (!base) return null;
@@ -148,7 +172,30 @@ export function resolveEmojiAbsoluteUrl(emoji, basePath = null) {
148
172
  const globalPath = window.MOODBOARD_BASE_PATH.endsWith('/') ? window.MOODBOARD_BASE_PATH : window.MOODBOARD_BASE_PATH + '/';
149
173
  resolvedBasePath = `${globalPath}src/assets/emodji/`;
150
174
  } else {
151
- resolvedBasePath = '/src/assets/emodji/';
175
+ // УНИВЕРСАЛЬНОЕ РЕШЕНИЕ: Пытаемся найти правильный путь к пакету
176
+ const currentUrl = window.location.origin;
177
+
178
+ // Определяем имя пакета из package.json или по скрипту
179
+ let packagePath = null;
180
+
181
+ // Метод 1: Ищем в node_modules по известным именам пакетов
182
+ const possiblePackageNames = [
183
+ '@sequent-org/moodboard',
184
+ 'moodboard-futurello',
185
+ 'moodboard'
186
+ ];
187
+
188
+ // Используем правильное имя пакета по умолчанию
189
+ packagePath = `${currentUrl}/node_modules/@sequent-org/moodboard/src/assets/emodji/`;
190
+
191
+ // Fallback на другие возможные имена если основной не работает
192
+ // (для форков или других версий пакета)
193
+ // const alternativeNames = ['moodboard-futurello', 'moodboard'];
194
+ // можно добавить логику проверки доступности
195
+
196
+ resolvedBasePath = packagePath || `${currentUrl}/src/assets/emodji/`;
197
+
198
+ console.log('🔧 Fallback путь к эмоджи:', resolvedBasePath);
152
199
  }
153
200
  }
154
201
  }
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Встроенная коллекция SVG эмоджи
3
+ * SVG код встроен прямо в JavaScript для избежания проблем с загрузкой файлов
4
+ */
5
+
6
+ // Встроенные SVG эмоджи как строки
7
+ export const INLINE_SVG_EMOJIS = {
8
+ // Смайлики
9
+ '😀': `<svg viewBox="0 0 36 36" xmlns="http://www.w3.org/2000/svg">
10
+ <circle fill="#FFCC4D" cx="18" cy="18" r="18"/>
11
+ <path fill="#664500" d="M10.515 23.621C10.56 23.8 11.683 28 18 28c6.318 0 7.44-4.2 7.485-4.379.055-.222-.025-.447-.204-.571-.18-.124-.403-.115-.571.024C24.629 23.145 22.112 25 18 25s-6.63-1.855-6.71-1.926c-.168-.139-.39-.148-.571-.024-.179.124-.259.349-.204.571z"/>
12
+ <ellipse fill="#664500" cx="12" cy="13.5" rx="2.5" ry="3.5"/>
13
+ <ellipse fill="#664500" cx="24" cy="13.5" rx="2.5" ry="3.5"/>
14
+ </svg>`,
15
+
16
+ '😊': `<svg viewBox="0 0 36 36" xmlns="http://www.w3.org/2000/svg">
17
+ <circle fill="#FFCC4D" cx="18" cy="18" r="18"/>
18
+ <path fill="#664500" d="M10.515 23.621C10.56 23.8 11.683 28 18 28c6.318 0 7.44-4.2 7.485-4.379.055-.222-.025-.447-.204-.571-.18-.124-.403-.115-.571.024C24.629 23.145 22.112 25 18 25s-6.63-1.855-6.71-1.926c-.168-.139-.39-.148-.571-.024-.179.124-.259.349-.204.571z"/>
19
+ <ellipse fill="#664500" cx="12" cy="13.5" rx="2.5" ry="3.5"/>
20
+ <ellipse fill="#664500" cx="24" cy="13.5" rx="2.5" ry="3.5"/>
21
+ <circle fill="#F4900C" cx="18" cy="13" r="2"/>
22
+ </svg>`,
23
+
24
+ '🤔': `<svg viewBox="0 0 36 36" xmlns="http://www.w3.org/2000/svg">
25
+ <circle fill="#FFCC4D" cx="18" cy="18" r="18"/>
26
+ <path fill="#664500" d="M8 19.5c0 1.381 1.119 2.5 2.5 2.5s2.5-1.119 2.5-2.5S11.881 17 10.5 17 8 18.119 8 19.5z"/>
27
+ <ellipse fill="#664500" cx="25" cy="19.5" rx="2.5" ry="1.5"/>
28
+ <path fill="#664500" d="M22.313 12.062c-.511-.478-1.321-.444-1.799.069-.479.512-.444 1.321.068 1.8.718.671 1.359 1.284 1.359 2.069 0 .552.447 1 1 1s1-.448 1-1c0-1.429-.932-2.427-1.628-3.938z"/>
29
+ </svg>`,
30
+
31
+ '👍': `<svg viewBox="0 0 36 36" xmlns="http://www.w3.org/2000/svg">
32
+ <path fill="#EF9645" d="M4.861 9.147c-.629-.628-.63-1.657-.001-2.286l.244-.244c.628-.628 1.656-.63 2.285-.001l1.903 1.902c.628.629.629 1.657.001 2.286l-.244.244c-.628.628-1.656.63-2.285.001L4.861 9.147z"/>
33
+ <path fill="#FFDC5D" d="M3.968 21.892c-.628.629-1.657.628-2.285 0l-.244-.244c-.628-.628-.629-1.656-.001-2.285l1.902-1.903c.629-.628 1.657-.629 2.286-.001l.244.244c.628.628.629 1.656.001 2.285l-1.903 1.904z"/>
34
+ <path fill="#FFAC33" d="M7 11c0 5.522-4.478 10-10 10s-10-4.478-10-10 4.478-10 10-10 10 4.478 10 10z"/>
35
+ </svg>`,
36
+
37
+ '❤️': `<svg viewBox="0 0 36 36" xmlns="http://www.w3.org/2000/svg">
38
+ <path fill="#DD2E44" d="M35.885 11.833c0-5.45-4.418-9.868-9.867-9.868-3.308 0-6.227 1.633-8.018 4.129-1.791-2.496-4.71-4.129-8.017-4.129-5.45 0-9.868 4.417-9.868 9.868 0 .772.098 1.52.266 2.241C1.751 22.587 11.216 31.568 18 34.034c6.784-2.466 16.249-11.447 17.619-19.96.168-.721.266-1.469.266-2.241z"/>
39
+ </svg>`
40
+ };
41
+
42
+ /**
43
+ * Конвертирует SVG строку в Data URL для использования с PIXI.Texture
44
+ * @param {string} svgString - SVG код
45
+ * @returns {string} Data URL
46
+ */
47
+ export function svgToDataUrl(svgString) {
48
+ // Очищаем SVG от лишних пробелов и переносов
49
+ const cleanSvg = svgString.replace(/\s+/g, ' ').trim();
50
+
51
+ // Кодируем в base64 или используем URL encoding
52
+ const encoded = encodeURIComponent(cleanSvg);
53
+
54
+ return `data:image/svg+xml,${encoded}`;
55
+ }
56
+
57
+ /**
58
+ * Получает Data URL для эмоджи по символу
59
+ * @param {string} emoji - символ эмоджи
60
+ * @returns {string|null} Data URL или null если эмоджи не найден
61
+ */
62
+ export function getInlineEmojiUrl(emoji) {
63
+ const svgCode = INLINE_SVG_EMOJIS[emoji];
64
+ if (!svgCode) return null;
65
+
66
+ return svgToDataUrl(svgCode);
67
+ }
68
+
69
+ /**
70
+ * Получает список всех доступных встроенных эмоджи
71
+ * @returns {string[]} массив символов эмоджи
72
+ */
73
+ export function getAvailableInlineEmojis() {
74
+ return Object.keys(INLINE_SVG_EMOJIS);
75
+ }
76
+
77
+ /**
78
+ * Проверяет, поддерживается ли эмоджи как встроенный SVG
79
+ * @param {string} emoji - символ эмоджи
80
+ * @returns {boolean}
81
+ */
82
+ export function isInlineSvgEmoji(emoji) {
83
+ return emoji in INLINE_SVG_EMOJIS;
84
+ }
85
+
86
+ /**
87
+ * Добавляет новый SVG эмоджи в коллекцию
88
+ * @param {string} emoji - символ эмоджи
89
+ * @param {string} svgCode - SVG код
90
+ * @returns {boolean} успех операции
91
+ */
92
+ export function addInlineSvgEmoji(emoji, svgCode) {
93
+ try {
94
+ if (!emoji || !svgCode) return false;
95
+ INLINE_SVG_EMOJIS[emoji] = svgCode;
96
+ console.log('✅ Добавлен встроенный SVG эмоджи:', emoji);
97
+ return true;
98
+ } catch (error) {
99
+ console.error('❌ Ошибка добавления SVG эмоджи:', error);
100
+ return false;
101
+ }
102
+ }
103
+
104
+ /**
105
+ * МАССОВОЕ ДОБАВЛЕНИЕ эмоджи из вашего проекта
106
+ * @param {Object} emojiMap - объект {emoji: svgCode, ...}
107
+ * @returns {number} количество добавленных эмоджи
108
+ */
109
+ export function bulkAddInlineSvgEmojis(emojiMap) {
110
+ let added = 0;
111
+ try {
112
+ for (const [emoji, svgCode] of Object.entries(emojiMap)) {
113
+ if (addInlineSvgEmoji(emoji, svgCode)) {
114
+ added++;
115
+ }
116
+ }
117
+ console.log(`✅ Массово добавлено ${added} встроенных SVG эмоджи`);
118
+ return added;
119
+ } catch (error) {
120
+ console.error('❌ Ошибка массового добавления эмоджи:', error);
121
+ return added;
122
+ }
123
+ }