vgapp 0.2.3 → 0.2.5

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.
Files changed (34) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/app/modules/vgalert/js/vgalert.js +135 -0
  3. package/app/modules/vgalert/scss/_variables.scss +32 -0
  4. package/app/modules/vgalert/scss/vgalert.css +83 -0
  5. package/app/modules/vgalert/scss/vgalert.css.map +1 -0
  6. package/app/modules/vgalert/scss/vgalert.scss +79 -0
  7. package/app/modules/vgdropdown/js/vgdropdown.js +2 -1
  8. package/app/modules/vgmodal/js/vgmodal.js +32 -4
  9. package/app/modules/vgrollup/js/vgrollup.js +207 -16
  10. package/app/modules/vgrollup/scss/vgrollup.css +3 -0
  11. package/app/modules/vgrollup/scss/vgrollup.css.map +1 -1
  12. package/app/modules/vgrollup/scss/vgrollup.scss +6 -0
  13. package/app/modules/vgsidebar/js/vgsidebar.js +32 -2
  14. package/app/modules/vgtoast/js/vgtoast.js +378 -0
  15. package/app/modules/vgtoast/scss/_variables.scss +26 -0
  16. package/app/modules/vgtoast/scss/vgtoast.css +133 -0
  17. package/app/modules/vgtoast/scss/vgtoast.css.map +1 -0
  18. package/app/modules/vgtoast/scss/vgtoast.scss +125 -0
  19. package/app/utils/js/dom/event.js +1 -0
  20. package/app/utils/scss/default.css +0 -77
  21. package/app/utils/scss/default.css.map +1 -1
  22. package/app/utils/scss/default.scss +0 -70
  23. package/app/utils/scss/functions.scss +19 -0
  24. package/app/utils/scss/variables.scss +58 -35
  25. package/build/vgapp.css +13 -4946
  26. package/build/vgapp.css.map +1 -1
  27. package/build/vgapp.js +3 -4277
  28. package/build/vgapp.js.map +1 -1
  29. package/index.js +9 -1
  30. package/package.json +1 -1
  31. package/app/modules/vgnotify/js/vgnotify.js +0 -0
  32. package/app/modules/vgnotify/scss/vgnotify.css +0 -3
  33. package/app/modules/vgnotify/scss/vgnotify.css.map +0 -1
  34. package/app/modules/vgnotify/scss/vgnotify.scss +0 -0
@@ -0,0 +1,378 @@
1
+ import BaseModule from "../../base-module";
2
+ import EventHandler from "../../../utils/js/dom/event";
3
+ import {dismissTrigger} from "../../module-fn";
4
+ import {execute, isDisabled, makeRandomString, mergeDeepObject} from "../../../utils/js/functions";
5
+ import Selectors from "../../../utils/js/dom/selectors";
6
+
7
+ /**
8
+ * Constants
9
+ */
10
+ const NAME = 'toast';
11
+ const NAME_KEY = 'vg.toast';
12
+ const SELECTOR_DATA_TOGGLE= '[data-vg-toggle="toast"]';
13
+
14
+ const CLASS_NAME_OPEN = 'vg-toast-open';
15
+ const CLASS_NAME_SHOW = 'show';
16
+
17
+ const EVENT_KEY_HIDE = `${NAME_KEY}.hide`;
18
+ const EVENT_KEY_HIDDEN = `${NAME_KEY}.hidden`;
19
+ const EVENT_KEY_SHOW = `${NAME_KEY}.show`;
20
+ const EVENT_KEY_SHOWN = `${NAME_KEY}.shown`;
21
+ const EVENT_KEY_LOADED = `${NAME_KEY}.loaded`;
22
+
23
+ const EVENT_KEY_KEYDOWN_DISMISS = `keydown.dismiss.${NAME_KEY}`;
24
+ const EVENT_KEY_HIDE_PREVENTED = `hidePrevented.${NAME_KEY}`;
25
+ const EVENT_KEY_CLICK_DATA_API = `click.${NAME_KEY}.data.api`;
26
+
27
+ class VGToast extends BaseModule {
28
+ constructor(element, params = {}) {
29
+ super(element, params);
30
+
31
+ this._params = this._getParams(element, mergeDeepObject({
32
+ static: true,
33
+ placement: 'bottom center',
34
+ autohide: false,
35
+ delay: 3000,
36
+ enableClickToast: true,
37
+ enableButtonClose: true,
38
+ keyboard: true,
39
+ theme: 'dark',
40
+ stack: {
41
+ enable: true,
42
+ max: 5
43
+ },
44
+ animation: {
45
+ enable: true,
46
+ in: 'animate__fadeIn',
47
+ out: 'animate__fadeOut',
48
+ delay: 400,
49
+ },
50
+ ajax: {
51
+ route: '',
52
+ target: '',
53
+ method: 'get',
54
+ loader: false,
55
+ }
56
+ }, params));
57
+
58
+ this._params.animation.delay = !this._params.animation.enable ? 0 : this._params.animation.delay;
59
+ this._animation(this._element, VGToast.NAME_KEY, this._params.animation);
60
+ this._dismissElement();
61
+ this._addEventListeners();
62
+
63
+ this._timeout = null;
64
+ }
65
+
66
+ static get NAME() {
67
+ return NAME;
68
+ }
69
+
70
+ static get NAME_KEY() {
71
+ return NAME_KEY
72
+ }
73
+
74
+ static run(text, params = {}, callback) {
75
+ return VGToast.build(text, params, callback);
76
+ }
77
+
78
+ static build(text, params, callback) {
79
+ params = mergeDeepObject({
80
+ placement: 'bottom center',
81
+ static: false,
82
+ theme: 'dark',
83
+ stack: {
84
+ enable: false
85
+ }
86
+ }, params);
87
+
88
+ let target = document.createElement('div');
89
+ target.classList.add('vg-toast');
90
+ target.id = 'vg-toast-' + makeRandomString();
91
+
92
+ if ('theme' in params) {
93
+ target.classList.add('vg-toast-' + params.theme);
94
+ }
95
+
96
+ if ('placement' in params) {
97
+ params.placement.split(' ').forEach(val => target.classList.add(val));
98
+ }
99
+
100
+ let wrapper = document.createElement('div');
101
+ wrapper.classList.add('vg-toast-wrapper');
102
+
103
+ if ('type' in params) {
104
+ let icon = document.createElement('div');
105
+ icon.classList.add('vg-toast-icon');
106
+
107
+ wrapper.append(icon);
108
+ }
109
+
110
+ let content = document.createElement('div');
111
+ content.classList.add('vg-toast-content');
112
+
113
+ let body = document.createElement('div');
114
+ body.classList.add('vg-toast-body');
115
+
116
+ if (typeof text === 'string') {
117
+ body.innerHTML = text;
118
+ content.append(body);
119
+ } else if (Array.isArray(text)) {
120
+ if (text.length > 1) {
121
+ let header = document.createElement('div');
122
+ header.classList.add('vg-toast-header');
123
+ header.innerHTML = text[0];
124
+ content.append(header);
125
+
126
+ body.innerHTML = text[1];
127
+ content.append(body);
128
+ } else {
129
+ body.innerHTML = text[0];
130
+ content.append(body);
131
+ }
132
+ }
133
+
134
+ wrapper.append(content);
135
+
136
+ if ('enableButtonClose' in params && params.enableButtonClose) {
137
+ let button = document.createElement('div');
138
+ button.classList.add('vg-toast-button');
139
+ button.innerHTML = '<button class="vg-btn-close" data-vg-dismiss="toast"></button>';
140
+ wrapper.append(button);
141
+ }
142
+
143
+ target.append(wrapper);
144
+ document.body.append(target);
145
+
146
+ let instance = VGToast.getOrCreateInstance(target, params);
147
+ execute(callback, [instance]);
148
+ instance.show();
149
+ }
150
+
151
+ toggle(relatedTarget) {
152
+ return !this._isShown() ? this.show(relatedTarget) : this.hide();
153
+ }
154
+
155
+ show(relatedTarget) {
156
+ if (isDisabled(this._element)) return;
157
+
158
+ this._clearTimeout();
159
+
160
+ this._params = this._getParams(relatedTarget || {}, this._params);
161
+ this._route(function (status, data) {
162
+ EventHandler.trigger(this._element, EVENT_KEY_LOADED, {stats: status, data: data});
163
+ });
164
+
165
+ const showEvent = EventHandler.trigger(this._element, EVENT_KEY_SHOW, { relatedTarget })
166
+ if (showEvent.defaultPrevented) return;
167
+
168
+ this._element.classList.add(CLASS_NAME_SHOW);
169
+ document.body.classList.add(CLASS_NAME_OPEN);
170
+
171
+ this._setPlacement();
172
+
173
+ const completeCallBack = () => {
174
+ this._element.classList.add(CLASS_NAME_SHOW);
175
+ EventHandler.trigger(this._element, EVENT_KEY_SHOWN, { relatedTarget });
176
+ this._scheduleHide();
177
+ }
178
+ this._queueCallback(completeCallBack, this._element, true, 0);
179
+ }
180
+
181
+ hide() {
182
+ if (isDisabled(this._element)) return;
183
+
184
+ const hideEvent = EventHandler.trigger(this._element, EVENT_KEY_HIDE);
185
+ if (hideEvent.defaultPrevented) return;
186
+
187
+ setTimeout(() => {
188
+ this._element?.classList.remove(CLASS_NAME_SHOW);
189
+
190
+ const completeCallback = () => {
191
+ document.body.classList.remove(CLASS_NAME_OPEN);
192
+ EventHandler.trigger(this._element, EVENT_KEY_HIDDEN);
193
+
194
+ if (this._params.stack.enable) {
195
+ this._setPlacement();
196
+ }
197
+
198
+ if (!this._params.static) {
199
+ this.dispose();
200
+ }
201
+ }
202
+ this._queueCallback(completeCallback, this._element, false, this._params.animation.delay);
203
+ }, this._params.animation.delay);
204
+ }
205
+
206
+ dispose() {
207
+ this._clearTimeout();
208
+ if (this._isShown()) {
209
+ this._element.classList.remove(CLASS_NAME_SHOW);
210
+ }
211
+
212
+ if (!this._params.static) {
213
+ this._element.remove();
214
+ }
215
+
216
+ super.dispose();
217
+ }
218
+
219
+ _scheduleHide() {
220
+ if (!this._params.autohide) {
221
+ return;
222
+ }
223
+
224
+ this._timeout = setTimeout(() => {
225
+ this.hide();
226
+ }, this._params.delay);
227
+ }
228
+
229
+ _isShown() {
230
+ return this._element.classList.contains(CLASS_NAME_SHOW);
231
+ }
232
+
233
+ _setPlacement() {
234
+ let elms = this._enableStack();
235
+
236
+ if (this._params.stack.enable) {
237
+ if (elms.length > this._params.stack.max) {
238
+ let elm = elms.shift();
239
+ VGToast.getInstance(elm.el).hide();
240
+ }
241
+ }
242
+
243
+ elms.forEach(elm => {
244
+ let isPlacementClassTop = elm.el.classList.contains('top'),
245
+ isPlacementClassBottom = elm.el.classList.contains('bottom'),
246
+ isPlacementClassLeft = elm.el.classList.contains('left'),
247
+ isPlacementClassRight = elm.el.classList.contains('right'),
248
+ isPlacementClassCenter = elm.el.classList.contains('center');
249
+
250
+ if (!isPlacementClassTop &&
251
+ !isPlacementClassBottom &&
252
+ !isPlacementClassCenter &&
253
+ !isPlacementClassRight &&
254
+ !isPlacementClassLeft
255
+ ) {
256
+ isPlacementClassBottom = true;
257
+ isPlacementClassCenter = true;
258
+ }
259
+
260
+ if (isPlacementClassCenter) {
261
+ if (isPlacementClassLeft) {
262
+ elm.el.style.left = 0;
263
+ elm.el.style.bottom = 'calc(50% - ('+ elm.top +'px))';
264
+ } else if (isPlacementClassRight) {
265
+ elm.el.style.right = 0;
266
+ elm.el.style.bottom = 'calc(50% - ('+ elm.top +'px))';
267
+ } else if (isPlacementClassBottom) {
268
+ elm.el.style.left = 'calc(50% - ('+ elm.el.clientWidth +'px) / 2)';
269
+ elm.el.style.bottom = elm.top + 'px';
270
+ } else if (isPlacementClassTop) {
271
+ elm.el.style.left = 'calc(50% - ('+ elm.el.clientWidth +'px) / 2)';
272
+ elm.el.style.top = elm.top + 'px';
273
+ } else {
274
+ elm.el.style.left = 'calc(50% - ('+ elm.el.clientHeight +'px) / 2)';
275
+ elm.el.style.bottom = 'calc(50% - '+ elm.top +'px)';
276
+ }
277
+ } else {
278
+ if (isPlacementClassLeft) elm.el.style.left = 0;
279
+ if (isPlacementClassBottom) elm.el.style.bottom = elm.top + 'px';
280
+ if (isPlacementClassTop) elm.el.style.top = elm.top + 'px';
281
+ if (isPlacementClassRight) elm.el.style.right = 0;
282
+ }
283
+ });
284
+ }
285
+
286
+ _enableStack() {
287
+ let elmsShown = [... Selectors.findAll('.vg-toast.show')], top = 0;
288
+
289
+ if (!this._params.stack.enable) {
290
+ elmsShown.forEach(el => {
291
+ if (el !== this._element) {
292
+ VGToast.getInstance(el).hide()
293
+ }
294
+ })
295
+
296
+ return [{
297
+ el: this._element,
298
+ top: 0,
299
+ }];
300
+ }
301
+
302
+ elmsShown = elmsShown.map(el => {
303
+ return {
304
+ el: el,
305
+ top: el.clientHeight
306
+ }
307
+ });
308
+
309
+ return elmsShown.map(function (value, index) {
310
+ if (index === 0) {
311
+ return {
312
+ el: value.el,
313
+ top: 0
314
+ }
315
+ } else {
316
+ top += value.top
317
+
318
+ return {
319
+ el: value.el,
320
+ top: top
321
+ }
322
+ }
323
+ });
324
+ }
325
+
326
+ _clearTimeout() {
327
+ clearTimeout(this._timeout);
328
+ this._timeout = null;
329
+ }
330
+
331
+ _addEventListeners() {
332
+ EventHandler.on(document, EVENT_KEY_KEYDOWN_DISMISS, event => {
333
+ if (event.key !== 'Escape') return;
334
+
335
+ if (this._params.keyboard) {
336
+ this.hide();
337
+ return;
338
+ }
339
+
340
+ EventHandler.trigger(this._element, EVENT_KEY_HIDE_PREVENTED)
341
+ });
342
+
343
+ if (this._params.enableClickToast) {
344
+ this._element.classList.add('vg-toast-pointer');
345
+
346
+ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, '#' + this._element.id, () => {
347
+ this.hide();
348
+ })
349
+ }
350
+ }
351
+ }
352
+
353
+ dismissTrigger(VGToast);
354
+
355
+ /**
356
+ * Data API implementation
357
+ */
358
+ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
359
+ const target = Selectors.getElementFromSelector(this);
360
+
361
+ if (['A', 'AREA'].includes(this.tagName)) {
362
+ event.preventDefault()
363
+ }
364
+
365
+ if (isDisabled(this)) {
366
+ return
367
+ }
368
+
369
+ this.setAttribute('aria-expanded', true);
370
+ EventHandler.one(target, EVENT_KEY_HIDDEN, () => {
371
+ this.setAttribute('aria-expanded', false);
372
+ });
373
+
374
+ const data = VGToast.getOrCreateInstance(target);
375
+ data.toggle(this);
376
+ });
377
+
378
+ export default VGToast;
@@ -0,0 +1,26 @@
1
+ $toast-map: (
2
+ indent: 1rem,
3
+ height: auto,
4
+ width: auto,
5
+ z-index: $toast-index,
6
+ transition: all .3s ease-in-out,
7
+ padding: 8px 22px,
8
+ font-size: 1.125rem,
9
+ background-color: $bg-color,
10
+ color: $color,
11
+ border-width: $border-width,
12
+ border-color: transparent,
13
+ border-style: $border-style,
14
+ border-radius: 20px,
15
+ box-shadow: $box-shadow,
16
+ header-font-weight: 500,
17
+ header-font-size: .975rem,
18
+ body-font-size: 1rem,
19
+ body-font-weight: 400,
20
+ );
21
+
22
+ $toast-danger-map: $danger-map;
23
+ $toast-success-map: $success-map;
24
+ $toast-warning-map: $warning-map;
25
+ $toast-info-map: $info-map;
26
+ $toast-dark-map: $dark-map;
@@ -0,0 +1,133 @@
1
+ @charset "UTF-8";
2
+ /**
3
+ *--------------------------------------------------------------------------
4
+ * Модуль: VGToast
5
+ * Автор: Vegas DEV
6
+ * Лицензия: смотри LICENSE
7
+ *--------------------------------------------------------------------------
8
+ **/
9
+ .vg-toast {
10
+ --vg-toast-indent: 1rem ;
11
+ --vg-toast-height: auto ;
12
+ --vg-toast-width: auto ;
13
+ --vg-toast-z-index: 1050 ;
14
+ --vg-toast-transition: all 0.3s ease-in-out ;
15
+ --vg-toast-padding: 8px 22px ;
16
+ --vg-toast-font-size: 1.125rem ;
17
+ --vg-toast-background-color: #fff ;
18
+ --vg-toast-color: #000000 ;
19
+ --vg-toast-border-width: 1px ;
20
+ --vg-toast-border-color: transparent ;
21
+ --vg-toast-border-style: solid ;
22
+ --vg-toast-border-radius: 20px ;
23
+ --vg-toast-box-shadow: 0 8px 14px 5px rgba(0, 0, 0, 0.2) ;
24
+ --vg-toast-header-font-weight: 500 ;
25
+ --vg-toast-header-font-size: 0.975rem ;
26
+ --vg-toast-body-font-size: 1rem ;
27
+ --vg-toast-body-font-weight: 400 ;
28
+ --vg-toast-danger-color: #58151c ;
29
+ --vg-toast-danger-border-color: #f1aeb5 ;
30
+ --vg-toast-danger-background-color: #f8d7da ;
31
+ --vg-toast-success-color: #0a3622 ;
32
+ --vg-toast-success-border-color: #a3cfbb ;
33
+ --vg-toast-success-background-color: #d1e7dd ;
34
+ --vg-toast-warning-color: #664d03 ;
35
+ --vg-toast-warning-border-color: #ffe69c ;
36
+ --vg-toast-warning-background-color: #fff3cd ;
37
+ --vg-toast-info-color: #055160 ;
38
+ --vg-toast-info-border-color: #9eeaf9 ;
39
+ --vg-toast-info-background-color: #cff4fc ;
40
+ --vg-toast-dark-color: #a7a7a7 ;
41
+ --vg-toast-dark-border-color: #0e0e0e ;
42
+ --vg-toast-dark-background-color: #070707 ;
43
+ position: fixed;
44
+ width: var(--vg-toast-width);
45
+ height: var(--vg-toast-height);
46
+ z-index: var(--vg-toast-z-index);
47
+ padding: var(--vg-toast-indent);
48
+ transition: var(--vg-toast-transition);
49
+ }
50
+ .vg-toast.bottom {
51
+ padding-top: 0;
52
+ }
53
+ .vg-toast.top {
54
+ padding-bottom: 0;
55
+ }
56
+ .vg-toast-danger {
57
+ --vg-toast-color: var(--vg-toast-danger-color);
58
+ --vg-toast-background-color: var(--vg-toast-danger-background-color);
59
+ --vg-toast-border-color: var(--vg-toast-danger-border-color);
60
+ }
61
+ .vg-toast-success {
62
+ --vg-toast-color: var(--vg-toast-success-color);
63
+ --vg-toast-background-color: var(--vg-toast-success-background-color);
64
+ --vg-toast-border-color: var(--vg-toast-success-border-color);
65
+ }
66
+ .vg-toast-warning {
67
+ --vg-toast-color: var(--vg-toast-warning-color);
68
+ --vg-toast-background-color: var(--vg-toast-warning-background-color);
69
+ --vg-toast-border-color: var(--vg-toast-warning-border-color);
70
+ }
71
+ .vg-toast-info {
72
+ --vg-toast-color: var(--vg-toast-info-color);
73
+ --vg-toast-background-color: var(--vg-toast-info-background-color);
74
+ --vg-toast-border-color: var(--vg-toast-info-border-color);
75
+ }
76
+ .vg-toast-dark {
77
+ --vg-toast-color: var(--vg-toast-dark-color);
78
+ --vg-toast-background-color: var(--vg-toast-dark-background-color);
79
+ --vg-toast-border-color: var(--vg-toast-dark-border-color);
80
+ }
81
+ .vg-toast:not(.show) {
82
+ display: none;
83
+ }
84
+ .vg-toast-wrapper {
85
+ background-color: var(--vg-toast-background-color);
86
+ padding: var(--vg-toast-padding);
87
+ color: var(--vg-toast-color);
88
+ border-width: var(--vg-toast-border-width);
89
+ border-style: var(--vg-toast-border-style);
90
+ border-color: var(--vg-toast-border-color);
91
+ border-radius: var(--vg-toast-border-radius);
92
+ box-shadow: var(--vg-toast-box-shadow);
93
+ display: flex;
94
+ align-items: center;
95
+ gap: 8px;
96
+ }
97
+ .vg-toast-header {
98
+ font-size: var(--vg-toast-header-font-size);
99
+ font-weight: var(--vg-toast-header-font-weight);
100
+ }
101
+ .vg-toast-body {
102
+ font-size: var(--vg-toast-body-font-size);
103
+ font-weight: var(--vg-toast-body-font-weight);
104
+ }
105
+ .vg-toast-pointer {
106
+ cursor: pointer;
107
+ }
108
+ .vg-toast-button {
109
+ width: auto;
110
+ height: 100%;
111
+ display: flex;
112
+ align-items: center;
113
+ }
114
+ .vg-toast-button .vg-btn-close {
115
+ position: relative;
116
+ left: unset;
117
+ top: unset;
118
+ right: unset;
119
+ bottom: unset;
120
+ height: 100%;
121
+ display: flex;
122
+ align-items: center;
123
+ padding: 0;
124
+ }
125
+ .vg-toast-button .vg-btn-close svg {
126
+ width: 14px;
127
+ height: 14px;
128
+ }
129
+ .vg-toast-button .vg-btn-close svg polygon {
130
+ fill: var(--vg-toast-color);
131
+ }
132
+
133
+ /*# sourceMappingURL=vgtoast.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["vgtoast.scss","../../../utils/scss/mixin.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;ECNG;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EDaF;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;;AAGD;EACC;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;EACA;EACA;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAGD;EACC;;AAGD;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;;AAEA;EACC","file":"vgtoast.css"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ *--------------------------------------------------------------------------
3
+ * Модуль: VGToast
4
+ * Автор: Vegas DEV
5
+ * Лицензия: смотри LICENSE
6
+ *--------------------------------------------------------------------------
7
+ **/
8
+
9
+ @import "../../../utils/scss/functions";
10
+ @import "../../../utils/scss/mixin";
11
+ @import "../../../utils/scss/variables";
12
+ @import "variables";
13
+
14
+ .vg-toast {
15
+ @include mix-vars('toast', $toast-map);
16
+ @include mix-vars('toast-danger', $toast-danger-map);
17
+ @include mix-vars('toast-success', $toast-success-map);
18
+ @include mix-vars('toast-warning', $toast-warning-map);
19
+ @include mix-vars('toast-info', $toast-info-map);
20
+ @include mix-vars('toast-dark', $toast-dark-map);
21
+ position: fixed;
22
+ width: var(--vg-toast-width);
23
+ height: var(--vg-toast-height);
24
+ z-index: var(--vg-toast-z-index);
25
+ padding: var(--vg-toast-indent);
26
+ transition: var(--vg-toast-transition);
27
+
28
+ &.bottom {
29
+ padding-top: 0;
30
+ }
31
+
32
+ &.top {
33
+ padding-bottom: 0;
34
+ }
35
+
36
+ &-danger {
37
+ --vg-toast-color: var(--vg-toast-danger-color);
38
+ --vg-toast-background-color: var(--vg-toast-danger-background-color);
39
+ --vg-toast-border-color: var(--vg-toast-danger-border-color);
40
+ }
41
+
42
+ &-success {
43
+ --vg-toast-color: var(--vg-toast-success-color);
44
+ --vg-toast-background-color: var(--vg-toast-success-background-color);
45
+ --vg-toast-border-color: var(--vg-toast-success-border-color);
46
+ }
47
+
48
+ &-warning {
49
+ --vg-toast-color: var(--vg-toast-warning-color);
50
+ --vg-toast-background-color: var(--vg-toast-warning-background-color);
51
+ --vg-toast-border-color: var(--vg-toast-warning-border-color);
52
+ }
53
+
54
+ &-info {
55
+ --vg-toast-color: var(--vg-toast-info-color);
56
+ --vg-toast-background-color: var(--vg-toast-info-background-color);
57
+ --vg-toast-border-color: var(--vg-toast-info-border-color);
58
+ }
59
+
60
+ &-dark {
61
+ --vg-toast-color: var(--vg-toast-dark-color);
62
+ --vg-toast-background-color: var(--vg-toast-dark-background-color);
63
+ --vg-toast-border-color: var(--vg-toast-dark-border-color);
64
+ }
65
+
66
+ &:not(.show) {
67
+ display: none;
68
+ }
69
+
70
+ &-wrapper {
71
+ background-color: var(--vg-toast-background-color);
72
+ padding: var(--vg-toast-padding);
73
+ color: var(--vg-toast-color);
74
+ border-width: var(--vg-toast-border-width);
75
+ border-style: var(--vg-toast-border-style);
76
+ border-color: var(--vg-toast-border-color);
77
+ border-radius: var(--vg-toast-border-radius);
78
+ box-shadow: var(--vg-toast-box-shadow);
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 8px;
82
+ }
83
+
84
+ &-header {
85
+ font-size: var(--vg-toast-header-font-size);
86
+ font-weight: var(--vg-toast-header-font-weight);
87
+ }
88
+
89
+ &-body {
90
+ font-size: var(--vg-toast-body-font-size);
91
+ font-weight: var(--vg-toast-body-font-weight);
92
+ }
93
+
94
+ &-pointer {
95
+ cursor: pointer;
96
+ }
97
+
98
+ &-button {
99
+ width: auto;
100
+ height: 100%;
101
+ display: flex;
102
+ align-items: center;
103
+
104
+ .vg-btn-close {
105
+ position: relative;
106
+ left: unset;
107
+ top: unset;
108
+ right: unset;
109
+ bottom: unset;
110
+ height: 100%;
111
+ display: flex;
112
+ align-items: center;
113
+ padding: 0;
114
+
115
+ svg {
116
+ width: 14px;
117
+ height: 14px;
118
+
119
+ polygon {
120
+ fill: var(--vg-toast-color);
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
@@ -47,6 +47,7 @@ const nativeEvents = new Set([
47
47
  'pointerup',
48
48
  'pointerleave',
49
49
  'pointercancel',
50
+ 'popstate',
50
51
  'gesturestart',
51
52
  'gesturechange',
52
53
  'gestureend',