vgapp 1.1.6 → 1.1.8

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/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
- # VEGAS-APP 1.1.6 (Апрель, 10, 2026)
2
- ## Новые фичи
1
+ # VEGAS-APP 1.1.7 (Апрель, 13, 2026)
2
+ ## Новые фичи
3
+ * В VGFilePreview добавлена поддержка атрибута `data-name` для явной установки отображаемого имени файла (в приоритете над `data-vg-filepreview-display-name`).
4
+
5
+ ## Изменения
6
+ * Обновлена версия пакета в `package.json`: `1.1.6` -> `1.1.7`.
7
+
8
+ ---
9
+
10
+ # VEGAS-APP 1.1.6 (Апрель, 10, 2026)
11
+ ## Новые фичи
3
12
  * **VGToast**: добавлены встроенные модули VGToastDrag и VGToastResize с поддержкой параметров drag/resize (enable, threshold, edgeSize, minWidth/minHeight, debug).
4
13
 
5
14
  ## Изменения
@@ -621,7 +621,7 @@ class VGFormSender extends BaseModule {
621
621
  response = data.response.view
622
622
  } else if (typeof response !== 'string') {
623
623
  if (status === 'danger') {
624
- response.title = lang_titles(this._params.lang, 'errors').title;
624
+ response.title = ('title' in response) ? response.title : lang_titles(this._params.lang, 'errors').title;
625
625
 
626
626
  if ('code' in data && data.code !== 200) {
627
627
  const messages = {
@@ -73,7 +73,7 @@ class VGRollup extends BaseModule {
73
73
  constructor(element, params = {}) {
74
74
  super(element, params);
75
75
 
76
- this._params = this._getParams(element, mergeDeepObject({
76
+ const defaultParams = {
77
77
  lang: document.documentElement.lang || 'ru',
78
78
  content: 'text',
79
79
  cnt: 0,
@@ -87,8 +87,8 @@ class VGRollup extends BaseModule {
87
87
  more: ' еще ',
88
88
  button: {
89
89
  enabled: true,
90
- more: "Показать",
91
- less: "Свернуть",
90
+ more: 'Показать',
91
+ less: 'Свернуть',
92
92
  classes: ''
93
93
  },
94
94
  callbacks: {
@@ -96,7 +96,17 @@ class VGRollup extends BaseModule {
96
96
  expand: () => {},
97
97
  collapse: () => {}
98
98
  }
99
- }, params));
99
+ };
100
+
101
+ let lang = Manipulator.get(element, 'data-lang') || ('lang' in params) ? params.lang : defaultParams.lang;
102
+
103
+ // Локализация текстов кнопок
104
+ defaultParams.button.more = lang_buttons(lang, NAME)['show'];
105
+ defaultParams.button.less = lang_buttons(lang, NAME)['less'];
106
+ defaultParams.more = lang_buttons(lang, NAME)['more'];
107
+
108
+
109
+ this._params = this._getParams(element, mergeDeepObject(defaultParams, params));
100
110
 
101
111
  /**
102
112
  * CSS-классы, используемые модулем.
@@ -141,11 +151,6 @@ class VGRollup extends BaseModule {
141
151
  */
142
152
  this.isOffset = false;
143
153
 
144
- // Локализация текстов кнопок
145
- this._params.button.more = lang_buttons(this._params.lang, NAME)['show'];
146
- this._params.button.less = lang_buttons(this._params.lang, NAME)['less'];
147
- this._params.more = lang_buttons(this._params.lang, NAME)['more'];
148
-
149
154
  this.build();
150
155
  }
151
156
 
@@ -1,4 +1,4 @@
1
- import BaseModule from "../../base-module";
1
+ import BaseModule from "../../base-module";
2
2
  import EventHandler from "../../../utils/js/dom/event";
3
3
  import {dismissTrigger} from "../../module-fn";
4
4
  import {execute, isDisabled, makeRandomString, mergeDeepObject} from "../../../utils/js/functions";
@@ -7,36 +7,45 @@ import VGToastDrag from "./vgtoast.drag";
7
7
  import VGToastResize from "./vgtoast.resize";
8
8
 
9
9
  /**
10
- * @constant {string} NAME - Имя модуля.
10
+ * @constant {string} NAME - Имя модуля.
11
11
  */
12
12
  const NAME = 'toast';
13
13
 
14
14
  /**
15
- * @constant {string} NAME_KEY - Пространство имён для событий.
15
+ * @constant {string} NAME_KEY - Пространство имён для событий.
16
16
  */
17
17
  const NAME_KEY = 'vg.toast';
18
18
 
19
19
  /**
20
- * @constant {string} SELECTOR_DATA_TOGGLE - Селектор для активации через data-атрибут.
20
+ * @constant {string} SELECTOR_DATA_TOGGLE - Селектор для активации через data-атрибут.
21
21
  */
22
22
  const SELECTOR_DATA_TOGGLE = '[data-vg-toggle="toast"]';
23
23
 
24
24
  /**
25
- * @constant {string} CLASS_NAME_OPEN - Класс, добавляемый к body при открытии любого тоста.
25
+ * @constant {string} CLASS_NAME_OPEN - Класс, добавляемый к body при открытии любого тоста.
26
26
  */
27
27
  const CLASS_NAME_OPEN = 'vg-toast-open';
28
28
 
29
29
  /**
30
- * @constant {string} CLASS_NAME_SHOW - Класс, показывающий, что тост видим.
30
+ * @constant {string} CLASS_NAME_SHOW - Класс, показывающий, что тост видим.
31
31
  */
32
32
  const CLASS_NAME_SHOW = 'show';
33
33
 
34
34
  /**
35
- * @constant {string} CLASS_NAME_SHOWN - Класс, добавляемый после завершения анимации появления.
35
+ * @constant {string} CLASS_NAME_SHOWN - Класс, добавляемый после завершения анимации появления.
36
36
  */
37
37
  const CLASS_NAME_SHOWN = 'shown';
38
+ const EFFECT_CLASS_PREFIX = 'vg-toast-effect-';
39
+ const EFFECT_PRESET_MAP = {
40
+ none: '',
41
+ fade: `${EFFECT_CLASS_PREFIX}fade`,
42
+ zoom: `${EFFECT_CLASS_PREFIX}zoom`,
43
+ blur: `${EFFECT_CLASS_PREFIX}blur`,
44
+ 'slide-up': `${EFFECT_CLASS_PREFIX}slide-up`,
45
+ 'slide-down': `${EFFECT_CLASS_PREFIX}slide-down`,
46
+ };
38
47
 
39
- // События
48
+ // События
40
49
  const EVENT_KEY_HIDE = `${NAME_KEY}.hide`;
41
50
  const EVENT_KEY_HIDDEN = `${NAME_KEY}.hidden`;
42
51
  const EVENT_KEY_SHOW = `${NAME_KEY}.show`;
@@ -51,33 +60,34 @@ const EVENT_KEY_POINTERCANCEL_INTERACTION = `pointercancel.interaction.${NAME_KE
51
60
 
52
61
  /**
53
62
  * @typedef {Object} ToastParams
54
- * @property {boolean} static - Сохранять ли тост в DOM после скрытия.
55
- * @property {string} placement - Расположение: 'top left', 'bottom center' и т.д.
56
- * @property {boolean} autohide - Автоматически скрывать.
57
- * @property {number} delay - Задержка перед авто-скрытием (мс).
58
- * @property {boolean} enableClickToast - Закрывать по клику на тост.
59
- * @property {boolean} enableButtonClose - Добавить кнопку закрытия.
60
- * @property {boolean} keyboard - Закрывать по Esc.
61
- * @property {string} theme - Тема: 'dark', 'light' и т.д.
62
- * @property {Object} stack - Настройки стека уведомлений.
63
- * @property {boolean} stack.enable - Разрешить стек.
64
- * @property {number} stack.max - Макс. количество тостов одновременно.
65
- * @property {Object} animation - Анимация.
66
- * @property {boolean} animation.enable - Включить анимацию.
67
- * @property {string} animation.in - Анимация входа (Animate.css).
68
- * @property {string} animation.out - Анимация выхода.
69
- * @property {number} animation.delay - Длительность анимации.
70
- * @property {Object} ajax - Настройки AJAX.
71
- * @property {string} ajax.route - URL для загрузки.
72
- * @property {string} ajax.target - Селектор контейнера.
73
- * @property {string} ajax.method - HTTP-метод.
74
- * @property {boolean} ajax.loader - Показывать лоадер.
75
- * @property {boolean} ajax.once - Загружать один раз.
76
- * @property {boolean} ajax.output - Выводить результат.
63
+ * @property {boolean} static - Сохранять ли тост в DOM после скрытия.
64
+ * @property {string} placement - Расположение: 'top left', 'bottom center' и т.д.
65
+ * @property {boolean} autohide - Автоматически скрывать.
66
+ * @property {number} delay - Задержка перед авто-скрытием (мс).
67
+ * @property {boolean} enableClickToast - Закрывать по клику на тост.
68
+ * @property {boolean} enableButtonClose - Добавить кнопку закрытия.
69
+ * @property {boolean} keyboard - Закрывать по Esc.
70
+ * @property {string} theme - Тема: 'dark', 'light' и т.д.
71
+ * @property {Object} stack - Настройки стека уведомлений.
72
+ * @property {boolean} stack.enable - Разрешить стек.
73
+ * @property {number} stack.max - Макс. количество тостов одновременно.
74
+ * @property {Object} animation - Анимация.
75
+ * @property {boolean} animation.enable - Включить анимацию.
76
+ * @property {string} animation.in - Анимация входа (Animate.css).
77
+ * @property {string} animation.out - Анимация выхода.
78
+ * @property {number} animation.delay - Длительность анимации.
79
+ * @property {string|string[]} animation.effect - Доп. визуальный эффект (preset или css-класс).
80
+ * @property {Object} ajax - Настройки AJAX.
81
+ * @property {string} ajax.route - URL для загрузки.
82
+ * @property {string} ajax.target - Селектор контейнера.
83
+ * @property {string} ajax.method - HTTP-метод.
84
+ * @property {boolean} ajax.loader - Показывать лоадер.
85
+ * @property {boolean} ajax.once - Загружать один раз.
86
+ * @property {boolean} ajax.output - Выводить результат.
77
87
  */
78
88
 
79
89
  /**
80
- * Параметры по умолчанию
90
+ * Параметры по умолчанию
81
91
  * @type {ToastParams}
82
92
  */
83
93
  const defaultParams = {
@@ -112,6 +122,7 @@ const defaultParams = {
112
122
  in: 'animate__backInUp',
113
123
  out: 'animate__backOutDown',
114
124
  delay: 300,
125
+ effect: 'none',
115
126
  },
116
127
  ajax: {
117
128
  route: '',
@@ -124,14 +135,14 @@ const defaultParams = {
124
135
  };
125
136
 
126
137
  /**
127
- * Класс VGToast — модуль уведомлений (тосты)
128
- * Поддерживает стек, анимации, авто-скрытие, AJAX-контент, горячие клавиши.
138
+ * Класс VGToast модуль уведомлений (тосты)
139
+ * Поддерживает стек, анимации, авто-скрытие, AJAX-контент, горячие клавиши.
129
140
  */
130
141
  class VGToast extends BaseModule {
131
142
  /**
132
- * Создаёт экземпляр VGToast
133
- * @param {Element} element - HTML-элемент тоста.
134
- * @param {Partial<ToastParams>} params - Пользовательские параметры.
143
+ * Создаёт экземпляр VGToast
144
+ * @param {Element} element - HTML-элемент тоста.
145
+ * @param {Partial<ToastParams>} params - Пользовательские параметры.
135
146
  */
136
147
  constructor(element, params = {}) {
137
148
  super(element, params);
@@ -160,6 +171,7 @@ class VGToast extends BaseModule {
160
171
  this._dragHandler.setOptions(this._interactionConfig.drag);
161
172
  this._resizeHandler.setOptions(this._interactionConfig.resize);
162
173
  this._animation(this._element, VGToast.NAME_KEY, this._params.animation);
174
+ this._applyAnimationEffects();
163
175
  this._dismissElement();
164
176
  this._addEventListeners();
165
177
 
@@ -168,7 +180,7 @@ class VGToast extends BaseModule {
168
180
  }
169
181
 
170
182
  /**
171
- * Имя модуля
183
+ * Имя модуля
172
184
  * @returns {string}
173
185
  */
174
186
  static get NAME() {
@@ -176,7 +188,7 @@ class VGToast extends BaseModule {
176
188
  }
177
189
 
178
190
  /**
179
- * Пространство имён событий
191
+ * Пространство имён событий
180
192
  * @returns {string}
181
193
  */
182
194
  static get NAME_KEY() {
@@ -184,10 +196,10 @@ class VGToast extends BaseModule {
184
196
  }
185
197
 
186
198
  /**
187
- * Глобальный метод для быстрого создания тоста
188
- * @param {string|Array<string>} text - Текст или [заголовок, тело].
189
- * @param {Partial<ToastParams>} [params] - Параметры.
190
- * @param {Function} [callback] - Вызывается после создания.
199
+ * Глобальный метод для быстрого создания тоста
200
+ * @param {string|Array<string>} text - Текст или [заголовок, тело].
201
+ * @param {Partial<ToastParams>} [params] - Параметры.
202
+ * @param {Function} [callback] - Вызывается после создания.
191
203
  * @returns {VGToast}
192
204
  */
193
205
  static run(text, params = {}, callback) {
@@ -195,10 +207,10 @@ class VGToast extends BaseModule {
195
207
  }
196
208
 
197
209
  /**
198
- * Создаёт и показывает новый тост
199
- * @param {string|Array<string>} text - Текст уведомления.
200
- * @param {Partial<ToastParams>} [params] - Параметры.
201
- * @param {Function} [callback] - Вызывается после появления.
210
+ * Создаёт и показывает новый тост
211
+ * @param {string|Array<string>} text - Текст уведомления.
212
+ * @param {Partial<ToastParams>} [params] - Параметры.
213
+ * @param {Function} [callback] - Вызывается после появления.
202
214
  * @returns {VGToast}
203
215
  */
204
216
  static build(text, params, callback) {
@@ -214,12 +226,12 @@ class VGToast extends BaseModule {
214
226
  target.classList.add('vg-toast');
215
227
  target.id = id;
216
228
 
217
- // Тема
229
+ // Тема
218
230
  if (params.theme) {
219
231
  target.classList.add(`vg-toast-${params.theme}`);
220
232
  }
221
233
 
222
- // Позиция
234
+ // Позиция
223
235
  if (params.placement) {
224
236
  params.placement.split(' ').forEach(cls => target.classList.add(cls));
225
237
  }
@@ -227,7 +239,7 @@ class VGToast extends BaseModule {
227
239
  const wrapper = document.createElement('div');
228
240
  wrapper.classList.add('vg-toast-wrapper');
229
241
 
230
- // Иконка (если задан тип)
242
+ // Иконка (если задан тип)
231
243
  if (params.type) {
232
244
  const icon = document.createElement('div');
233
245
  icon.classList.add('vg-toast-icon');
@@ -256,7 +268,7 @@ class VGToast extends BaseModule {
256
268
 
257
269
  wrapper.append(content);
258
270
 
259
- // Кнопка закрытия
271
+ // Кнопка закрытия
260
272
  if (params.enableButtonClose) {
261
273
  const button = document.createElement('div');
262
274
  button.classList.add('vg-toast-button');
@@ -270,6 +282,7 @@ class VGToast extends BaseModule {
270
282
  const instance = VGToast.getOrCreateInstance(target, params);
271
283
  if (params.animation) {
272
284
  instance._animation(target, VGToast.NAME_KEY, params.animation);
285
+ instance._applyAnimationEffects();
273
286
  }
274
287
 
275
288
  execute(callback, [instance]);
@@ -279,8 +292,8 @@ class VGToast extends BaseModule {
279
292
  }
280
293
 
281
294
  /**
282
- * Переключает состояние (показать/скрыть)
283
- * @param {Element} [relatedTarget] - Элемент, вызвавший тост.
295
+ * Переключает состояние (показать/скрыть)
296
+ * @param {Element} [relatedTarget] - Элемент, вызвавший тост.
284
297
  * @returns {VGToast}
285
298
  */
286
299
  toggle(relatedTarget) {
@@ -288,8 +301,8 @@ class VGToast extends BaseModule {
288
301
  }
289
302
 
290
303
  /**
291
- * Показывает тост
292
- * @param {Element} [relatedTarget] - Элемент, инициировавший показ.
304
+ * Показывает тост
305
+ * @param {Element} [relatedTarget] - Элемент, инициировавший показ.
293
306
  * @returns {void}
294
307
  */
295
308
  show(relatedTarget) {
@@ -324,7 +337,7 @@ class VGToast extends BaseModule {
324
337
  }
325
338
 
326
339
  /**
327
- * Скрывает тост
340
+ * Скрывает тост
328
341
  * @returns {void}
329
342
  */
330
343
  hide() {
@@ -359,7 +372,7 @@ class VGToast extends BaseModule {
359
372
  }
360
373
 
361
374
  /**
362
- * Удаляет тост из DOM и снимает обработчики
375
+ * Удаляет тост из DOM и снимает обработчики
363
376
  * @override
364
377
  */
365
378
  dispose() {
@@ -372,7 +385,7 @@ class VGToast extends BaseModule {
372
385
  }
373
386
 
374
387
  /**
375
- * Устанавливает таймер на скрытие
388
+ * Устанавливает таймер на скрытие
376
389
  * @private
377
390
  */
378
391
  _scheduleHide() {
@@ -383,7 +396,7 @@ class VGToast extends BaseModule {
383
396
  }
384
397
 
385
398
  /**
386
- * Проверяет, показан ли тост
399
+ * Проверяет, показан ли тост
387
400
  * @private
388
401
  * @returns {boolean}
389
402
  */
@@ -392,17 +405,17 @@ class VGToast extends BaseModule {
392
405
  }
393
406
 
394
407
  /**
395
- * Возвращает список активных тостов с вертикальными смещениями
396
- * Учитывает стек и максимальное количество
408
+ * Возвращает список активных тостов с вертикальными смещениями
409
+ * Учитывает стек и максимальное количество
397
410
  * @private
398
411
  * @returns {Array<{el: Element, top: number}>}
399
412
  */
400
413
  _enableStack() {
401
414
  const placement = this._params.placement;
402
415
  const isTop = placement.includes('top');
403
- const isBottom = !isTop; // по умолчанию снизу
416
+ const isBottom = !isTop; // по умолчанию снизу
404
417
 
405
- // Фильтруем тосты с таким же направлением (top или bottom)
418
+ // Фильтруем тосты с таким же направлением (top или bottom)
406
419
  const stackClass = isTop ? 'top' : 'bottom';
407
420
  const elmsShown = Selectors.findAll(`.vg-toast.show.${stackClass}`)
408
421
  .filter(el => {
@@ -411,20 +424,20 @@ class VGToast extends BaseModule {
411
424
  });
412
425
 
413
426
  if (!this._params.stack.enable) {
414
- // Скрываем другие тосты, если стек выключен
427
+ // Скрываем другие тосты, если стек выключен
415
428
  elmsShown
416
429
  .filter(el => el !== this._element)
417
430
  .forEach(el => VGToast.getInstance(el).hide());
418
431
  return [{ el: this._element, top: 0 }];
419
432
  }
420
433
 
421
- // Ограничиваем по max
434
+ // Ограничиваем по max
422
435
  if (elmsShown.length >= this._params.stack.max) {
423
436
  const excess = elmsShown.slice(0, elmsShown.length - this._params.stack.max + 1);
424
437
  excess.forEach(el => VGToast.getInstance(el).hide());
425
438
  }
426
439
 
427
- // Вычисляем смещение (по высоте)
440
+ // Вычисляем смещение (по высоте)
428
441
  const prevEls = elmsShown.filter(el => el !== this._element);
429
442
  const offset = prevEls.reduce((sum, el) => sum + el.clientHeight, 0);
430
443
 
@@ -437,7 +450,7 @@ class VGToast extends BaseModule {
437
450
  }
438
451
 
439
452
  /**
440
- * Устанавливает позицию тостов с учётом стека
453
+ * Устанавливает позицию тостов с учётом стека
441
454
  * @private
442
455
  */
443
456
  _setPlacement() {
@@ -465,17 +478,17 @@ class VGToast extends BaseModule {
465
478
  style.top = '';
466
479
  style.bottom = '';
467
480
  style.transform = '';
468
- style.translate = ''; // <-- важно: сбрасываем translate отдельно
481
+ style.translate = ''; // <-- важно: сбрасываем translate отдельно
469
482
 
470
483
  if (isCenter) {
471
484
  style.left = '50%';
472
- style.translate = '-50% 0'; // <-- вместо transform: translateX(-50%)
485
+ style.translate = '-50% 0'; // <-- вместо transform: translateX(-50%)
473
486
  } else if (isLeft) {
474
487
  style.left = '0';
475
488
  } else if (isRight) {
476
489
  style.right = '0';
477
490
  } else {
478
- // по умолчанию: центрирование
491
+ // по умолчанию: центрирование
479
492
  style.left = '50%';
480
493
  style.translate = '-50% 0';
481
494
  }
@@ -491,7 +504,7 @@ class VGToast extends BaseModule {
491
504
  }
492
505
 
493
506
  /**
494
- * Очищает таймер
507
+ * Очищает таймер
495
508
  * @private
496
509
  */
497
510
  _toggleInteractionHandlers() {
@@ -551,6 +564,37 @@ class VGToast extends BaseModule {
551
564
  return {...defaults};
552
565
  }
553
566
 
567
+ _applyAnimationEffects() {
568
+ const classList = this._element.classList;
569
+ const effectClasses = [...classList].filter(className => className.startsWith(EFFECT_CLASS_PREFIX));
570
+ effectClasses.forEach(className => classList.remove(className));
571
+
572
+ const nextClasses = this._resolveAnimationEffectClasses(this._params.animation?.effect);
573
+ nextClasses.forEach(className => classList.add(className));
574
+ }
575
+
576
+ _resolveAnimationEffectClasses(effectValue) {
577
+ const values = Array.isArray(effectValue) ? effectValue : [effectValue];
578
+ const normalized = values
579
+ .filter(Boolean)
580
+ .map(effect => this._resolveAnimationEffectClass(effect))
581
+ .filter(Boolean);
582
+
583
+ return Array.from(new Set(normalized));
584
+ }
585
+
586
+ _resolveAnimationEffectClass(effectValue) {
587
+ if (typeof effectValue !== 'string') return '';
588
+ const key = effectValue.trim().toLowerCase();
589
+ if (!key) return '';
590
+
591
+ if (Object.prototype.hasOwnProperty.call(EFFECT_PRESET_MAP, key)) {
592
+ return EFFECT_PRESET_MAP[key];
593
+ }
594
+
595
+ return effectValue.trim();
596
+ }
597
+
554
598
  _clearTimeout() {
555
599
  if (this._timeout) {
556
600
  clearTimeout(this._timeout);
@@ -559,11 +603,11 @@ class VGToast extends BaseModule {
559
603
  }
560
604
 
561
605
  /**
562
- * Назначает обработчики событий
606
+ * Назначает обработчики событий
563
607
  * @private
564
608
  */
565
609
  _addEventListeners() {
566
- // Закрытие по Esc
610
+ // Закрытие по Esc
567
611
  if (this._params.keyboard) {
568
612
  EventHandler.on(document, EVENT_KEY_KEYDOWN_DISMISS, event => {
569
613
  if (event.key === 'Escape' && this._isShown()) {
@@ -572,7 +616,7 @@ class VGToast extends BaseModule {
572
616
  });
573
617
  }
574
618
 
575
- // Закрытие по клику на тост
619
+ // Закрытие по клику на тост
576
620
  if (this._params.enableClickToast) {
577
621
  this._element.classList.add('vg-toast-pointer');
578
622
  EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, `#${this._element.id}`, () => {
@@ -595,11 +639,11 @@ class VGToast extends BaseModule {
595
639
  }
596
640
  }
597
641
 
598
- // Автоматическое закрытие по data-vg-dismiss
642
+ // Автоматическое закрытие по data-vg-dismiss
599
643
  dismissTrigger(VGToast);
600
644
 
601
645
  /**
602
- * Реализация Data API
646
+ * Реализация Data API
603
647
  */
604
648
  EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
605
649
  const target = Selectors.getElementFromSelector(this);
@@ -619,3 +663,4 @@ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, functi
619
663
 
620
664
  export default VGToast;
621
665
 
666
+
@@ -67,6 +67,7 @@ VGToast.run('Ошибка подключения', {
67
67
  | `animation.in` | `string` | `'animate__backInUp'` | Анимация появления |
68
68
  | `animation.out` | `string` | `'animate__backOutDown'` | Анимация исчезновения |
69
69
  | `animation.delay` | `number` | `300` | Длительность анимации (мс) |
70
+ | `animation.effect` | `string \| string[]` | `'none'` | Доп. CSS-эффект отображения: `none`, `fade`, `zoom`, `blur`, `slide-up`, `slide-down` или кастомный класс |
70
71
  | `ajax.route` | `string` | `''` | URL для загрузки |
71
72
  | `ajax.target` | `string` | `''` | Селектор контейнера (если используется) |
72
73
  | `ajax.method` | `string` | `'get'` | HTTP-метод |
@@ -90,6 +91,16 @@ VGToast.run('Появилось!', {
90
91
  ```
91
92
 
92
93
  ### 2. AJAX-уведомление
94
+ ### 2.1. Дополнительные эффекты отображения
95
+ ```js
96
+ VGToast.run('Сообщение', {
97
+ animation: {
98
+ in: 'animate__fadeIn',
99
+ out: 'animate__fadeOut',
100
+ effect: ['zoom', 'blur']
101
+ }
102
+ });
103
+ ```
93
104
 
94
105
  ```js
95
106
  VGToast.run('Загрузка...', {
@@ -142,4 +153,4 @@ MIT. Свободно использовать и модифицировать.
142
153
 
143
154
  📌 *Разработано в рамках фронтенд-системы VG Modules.*
144
155
  > 🚀 Автор: VEGAS STUDIO (vegas-dev.com)
145
- > 📍 Поддерживается в проектах VEGAS
156
+ > 📍 Поддерживается в проектах VEGAS
@@ -68,6 +68,47 @@
68
68
  cursor: pointer;
69
69
  }
70
70
 
71
+ &[class*='vg-toast-effect-'] {
72
+ .vg-toast-wrapper {
73
+ transition: opacity .25s ease, transform .25s ease, filter .25s ease;
74
+ will-change: opacity, transform, filter;
75
+ }
76
+ }
77
+
78
+ &.vg-toast-effect-fade {
79
+ &:not(.shown) .vg-toast-wrapper {
80
+ opacity: 0;
81
+ }
82
+ }
83
+
84
+ &.vg-toast-effect-zoom {
85
+ &:not(.shown) .vg-toast-wrapper {
86
+ opacity: 0;
87
+ transform: scale(.92);
88
+ }
89
+ }
90
+
91
+ &.vg-toast-effect-blur {
92
+ &:not(.shown) .vg-toast-wrapper {
93
+ opacity: 0;
94
+ filter: blur(6px);
95
+ }
96
+ }
97
+
98
+ &.vg-toast-effect-slide-up {
99
+ &:not(.shown) .vg-toast-wrapper {
100
+ opacity: 0;
101
+ transform: translateY(14px);
102
+ }
103
+ }
104
+
105
+ &.vg-toast-effect-slide-down {
106
+ &:not(.shown) .vg-toast-wrapper {
107
+ opacity: 0;
108
+ transform: translateY(-14px);
109
+ }
110
+ }
111
+
71
112
  &-button {
72
113
  width: auto;
73
114
  height: 100%;
@@ -95,4 +136,4 @@
95
136
  }
96
137
  }
97
138
  }
98
- }
139
+ }