vgapp 1.3.4 → 1.3.6

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 (88) hide show
  1. package/app/langs/en/buttons.json +17 -17
  2. package/app/langs/en/messages.json +36 -36
  3. package/app/langs/ru/buttons.json +17 -17
  4. package/app/langs/ru/messages.json +36 -36
  5. package/app/modules/base-module.js +111 -111
  6. package/app/modules/vgalert/js/vgalert.js +52 -52
  7. package/app/modules/vgalert/readme.md +105 -105
  8. package/app/modules/vgdynamictable/index.js +5 -5
  9. package/app/modules/vgdynamictable/js/editable.js +19 -19
  10. package/app/modules/vgdynamictable/js/filters.js +21 -21
  11. package/app/modules/vgdynamictable/js/fixed.js +179 -179
  12. package/app/modules/vgdynamictable/js/pagination.js +1 -1
  13. package/app/modules/vgdynamictable/js/search.js +12 -12
  14. package/app/modules/vgdynamictable/js/sortable.js +71 -71
  15. package/app/modules/vgdynamictable/js/summary-footer.js +28 -28
  16. package/app/modules/vgdynamictable/js/table-remote.js +79 -79
  17. package/app/modules/vgdynamictable/js/table-url-state.js +31 -31
  18. package/app/modules/vgdynamictable/js/utils/common.js +48 -48
  19. package/app/modules/vgdynamictable/js/vgdynamictable.js +268 -268
  20. package/app/modules/vgdynamictable/readme.md +250 -250
  21. package/app/modules/vgdynamictable/scss/_skeleton.scss +6 -6
  22. package/app/modules/vgdynamictable/scss/_sortable.scss +24 -24
  23. package/app/modules/vgdynamictable/scss/_table.scss +4 -4
  24. package/app/modules/vgdynamictable/scss/_variables.scss +79 -79
  25. package/app/modules/vgdynamictable/scss/vgdynamictable.scss +27 -27
  26. package/app/modules/vgfilepreview/js/i18n.js +56 -56
  27. package/app/modules/vgfilepreview/js/renderers/image-modal.js +145 -145
  28. package/app/modules/vgfilepreview/js/renderers/image.js +92 -92
  29. package/app/modules/vgfilepreview/js/renderers/index.js +19 -19
  30. package/app/modules/vgfilepreview/js/renderers/office-modal.js +168 -168
  31. package/app/modules/vgfilepreview/js/renderers/office.js +79 -79
  32. package/app/modules/vgfilepreview/js/renderers/pdf-modal.js +260 -260
  33. package/app/modules/vgfilepreview/js/renderers/pdf.js +76 -76
  34. package/app/modules/vgfilepreview/js/renderers/playlist.js +71 -71
  35. package/app/modules/vgfilepreview/js/renderers/text-modal.js +343 -343
  36. package/app/modules/vgfilepreview/js/renderers/text.js +83 -83
  37. package/app/modules/vgfilepreview/js/renderers/video-modal.js +272 -272
  38. package/app/modules/vgfilepreview/js/renderers/video.js +80 -80
  39. package/app/modules/vgfilepreview/js/renderers/zip-modal.js +522 -522
  40. package/app/modules/vgfilepreview/js/renderers/zip.js +89 -89
  41. package/app/modules/vgfilepreview/js/vgfilepreview.js +7 -7
  42. package/app/modules/vgfilepreview/readme.md +68 -68
  43. package/app/modules/vgfilepreview/scss/_variables.scss +113 -113
  44. package/app/modules/vgfilepreview/scss/vgfilepreview.scss +464 -464
  45. package/app/modules/vgfiles/js/base.js +26 -26
  46. package/app/modules/vgfiles/js/droppable.js +260 -260
  47. package/app/modules/vgfiles/js/render.js +153 -153
  48. package/app/modules/vgfiles/js/vgfiles.js +104 -104
  49. package/app/modules/vgfiles/readme.md +123 -123
  50. package/app/modules/vgfiles/scss/_variables.scss +18 -18
  51. package/app/modules/vgfiles/scss/vgfiles.scss +148 -148
  52. package/app/modules/vgformsender/js/hideshowpass.js +16 -16
  53. package/app/modules/vgformsender/scss/vgformsender.scss +34 -34
  54. package/app/modules/vgmodal/js/vgmodal.drag.js +332 -332
  55. package/app/modules/vgmodal/js/vgmodal.js +188 -188
  56. package/app/modules/vgmodal/js/vgmodal.resize.js +27 -27
  57. package/app/modules/vgmodal/scss/vgmodal.scss +14 -14
  58. package/app/modules/vgnav/js/vgnav.js +135 -135
  59. package/app/modules/vgnav/readme.md +67 -67
  60. package/app/modules/vgnestable/README.md +307 -307
  61. package/app/modules/vgnestable/scss/_variables.scss +60 -60
  62. package/app/modules/vgnestable/scss/vgnestable.scss +163 -163
  63. package/app/modules/vgrangeslider/js/skins.js +222 -222
  64. package/app/modules/vgrangeslider/js/vgrangeslider.js +704 -704
  65. package/app/modules/vgrangeslider/readme.md +523 -523
  66. package/app/modules/vgrangeslider/scss/_variables.scss +53 -53
  67. package/app/modules/vgrangeslider/scss/vgrangeslider.scss +240 -240
  68. package/app/modules/vgselect/js/vgselect.js +39 -39
  69. package/app/modules/vgselect/scss/vgselect.scss +22 -22
  70. package/app/modules/vgspy/readme.md +28 -28
  71. package/app/modules/vgtoast/readme.md +18 -18
  72. package/app/modules/vgtoast/scss/vgtoast.scss +48 -48
  73. package/app/modules/vgtooltip/js/vgtooltip.js +89 -89
  74. package/app/modules/vgtooltip/readme.md +181 -181
  75. package/app/utils/js/components/ajax.js +117 -117
  76. package/app/utils/js/components/audio-metadata.js +240 -240
  77. package/app/utils/js/components/backdrop.js +17 -17
  78. package/app/utils/js/components/file-icon.js +109 -109
  79. package/app/utils/js/components/file-preview.js +304 -304
  80. package/app/utils/js/components/sanitize.js +150 -150
  81. package/app/utils/js/components/video-metadata.js +140 -140
  82. package/app/vgapp.js +46 -46
  83. package/build/vgapp.css +1 -1
  84. package/build/vgapp.css.map +1 -1
  85. package/build/vgapp.js +1 -1
  86. package/build/vgapp.js.map +1 -1
  87. package/index.js +14 -14
  88. package/package.json +3 -1
@@ -52,7 +52,7 @@ const SELECTOR_DROPDOWN = `.${CLASS_NAME_DROPDOWN}`;
52
52
  const SELECTOR_SEARCH_INPUT = `.${CLASS_NAME_SEARCH} input`;
53
53
  const SELECTOR_LIST = `.${CLASS_NAME_LIST}`;
54
54
  const SELECTOR_LOAD_MORE_BTN = `.${CLASS_NAME_LOAD_MORE}`;
55
- const DATA_ATTR_COPY_EXCLUDE_DEFAULT = ['inited', 'updating', 'exclude'];
55
+ const DATA_ATTR_COPY_EXCLUDE_DEFAULT = ['inited', 'updating', 'exclude'];
56
56
 
57
57
  /**
58
58
  * Класс VGSelect
@@ -90,7 +90,7 @@ class VGSelect extends BaseModule {
90
90
  },
91
91
  close: true,
92
92
  tree: false,
93
- exclude: 'data-filter-param',
93
+ exclude: 'data-filter-param',
94
94
  placeholder: '',
95
95
  onInit: null,
96
96
  onShow: null,
@@ -275,12 +275,12 @@ class VGSelect extends BaseModule {
275
275
  return new Set([...DATA_ATTR_COPY_EXCLUDE_DEFAULT, ...customExcluded]);
276
276
  }
277
277
 
278
- static _normalizeDataAttrKey(value) {
279
- return String(value || '')
280
- .trim()
281
- .replace(/^data-/, '')
282
- .toLowerCase();
283
- }
278
+ static _normalizeDataAttrKey(value) {
279
+ return String(value || '')
280
+ .trim()
281
+ .replace(/^data-/, '')
282
+ .toLowerCase();
283
+ }
284
284
 
285
285
  /**
286
286
  * Проверяет, является ли значение "пустым" (соответствует placeholder)
@@ -788,28 +788,28 @@ class VGSelect extends BaseModule {
788
788
  * @param {string} value - Значение для выбора
789
789
  * @param {Object} [data] - Дополнительные данные
790
790
  */
791
- static changeSelector(select, value, data = {}) {
792
- const container = select.nextElementSibling;
793
- const instance = container ? VGSelect.getInstance(container) : null;
794
-
795
- select.setAttribute('data-updating', 'true');
796
- try {
797
- const opt = select.querySelector(`option[value="${CSS.escape(normalizeData(value))}"]`);
791
+ static changeSelector(select, value, data = {}) {
792
+ const container = select.nextElementSibling;
793
+ const instance = container ? VGSelect.getInstance(container) : null;
794
+
795
+ select.setAttribute('data-updating', 'true');
796
+ try {
797
+ const opt = select.querySelector(`option[value="${CSS.escape(normalizeData(value))}"]`);
798
798
  if (!opt) {
799
799
  instance?._triggerEvent(EVENT_KEY_ERROR, { error: 'Option not found', value });
800
800
  return;
801
801
  }
802
802
 
803
- const wasSelected = opt.selected;
804
- const selectedText = opt.textContent.trim();
805
-
806
- if (select.multiple) {
807
- opt.selected = data?.selected === false ? false : true;
808
- } else {
809
- [...select.options].forEach(o => o.selected = false);
810
- opt.selected = true;
811
- select.value = opt.value;
812
- }
803
+ const wasSelected = opt.selected;
804
+ const selectedText = opt.textContent.trim();
805
+
806
+ if (select.multiple) {
807
+ opt.selected = data?.selected === false ? false : true;
808
+ } else {
809
+ [...select.options].forEach(o => o.selected = false);
810
+ opt.selected = true;
811
+ select.value = opt.value;
812
+ }
813
813
 
814
814
  this.updateUI(select);
815
815
 
@@ -832,9 +832,9 @@ class VGSelect extends BaseModule {
832
832
  * @param {number} index
833
833
  * @param {Object} [data]
834
834
  */
835
- static changeSelectorByIndex(select, index, data = {}) {
836
- const container = select.nextElementSibling;
837
- const instance = container ? VGSelect.getInstance(container) : null;
835
+ static changeSelectorByIndex(select, index, data = {}) {
836
+ const container = select.nextElementSibling;
837
+ const instance = container ? VGSelect.getInstance(container) : null;
838
838
 
839
839
  select.setAttribute('data-updating', 'true');
840
840
  try {
@@ -844,17 +844,17 @@ class VGSelect extends BaseModule {
844
844
  return;
845
845
  }
846
846
 
847
- const wasSelected = opt.selected;
848
- const selectedText = opt.textContent.trim();
849
- const value = opt.value;
850
-
851
- if (select.multiple) {
852
- opt.selected = data?.selected === false ? false : true;
853
- } else {
854
- [...select.options].forEach(o => o.selected = false);
855
- opt.selected = true;
856
- select.value = opt.value;
857
- }
847
+ const wasSelected = opt.selected;
848
+ const selectedText = opt.textContent.trim();
849
+ const value = opt.value;
850
+
851
+ if (select.multiple) {
852
+ opt.selected = data?.selected === false ? false : true;
853
+ } else {
854
+ [...select.options].forEach(o => o.selected = false);
855
+ opt.selected = true;
856
+ select.value = opt.value;
857
+ }
858
858
 
859
859
  this.updateUI(select);
860
860
 
@@ -25,7 +25,7 @@ select {
25
25
  }
26
26
  }
27
27
 
28
- .vg-select {
28
+ .vg-select {
29
29
  @include mix-vars('select-current', $select-current-map);
30
30
  @include mix-vars('select-current', $select-placeholder-map);
31
31
  @include mix-vars('select-dropdown', $select-dropdown-map);
@@ -117,7 +117,7 @@ select {
117
117
  }
118
118
  }
119
119
 
120
- &-dropdown {
120
+ &-dropdown {
121
121
  @each $key, $value in $select-dropdown-map {
122
122
  #{$key}: var(--vg-select-dropdown-#{$key})
123
123
  }
@@ -135,25 +135,25 @@ select {
135
135
  transform: scale(0.75) translateY(-11px);
136
136
  transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out;
137
137
  z-index: var(--vg-select-dropdown-z-index);
138
- margin-top: .25rem;
139
- }
140
-
141
- &.drop-up {
142
- .vg-select-dropdown {
143
- top: auto;
144
- bottom: 100%;
145
- margin-top: 0;
146
- margin-bottom: .25rem;
147
- transform-origin: 50% 100%;
148
- transform: scale(0.75) translateY(11px);
149
- }
150
- }
151
-
152
- &-list {
153
- margin: 0;
154
- padding: 0;
155
- list-style: none;
156
- display: flex;
138
+ margin-top: .25rem;
139
+ }
140
+
141
+ &.drop-up {
142
+ .vg-select-dropdown {
143
+ top: auto;
144
+ bottom: 100%;
145
+ margin-top: 0;
146
+ margin-bottom: .25rem;
147
+ transform-origin: 50% 100%;
148
+ transform: scale(0.75) translateY(11px);
149
+ }
150
+ }
151
+
152
+ &-list {
153
+ margin: 0;
154
+ padding: 0;
155
+ list-style: none;
156
+ display: flex;
157
157
  flex-direction: column;
158
158
  max-height: var(--vg-select-list-max-height);
159
159
  overflow-y: auto;
@@ -281,4 +281,4 @@ select {
281
281
  opacity: .75;
282
282
  }
283
283
  }
284
- }
284
+ }
@@ -47,10 +47,10 @@
47
47
  |--------|------|-------------|----------|
48
48
  | `offset` | `number` | `null` | *(устарело)* Смещение активации (в пикселях). Используйте `rootMargin` вместо этого. |
49
49
  | `rootMargin` | `string` | `'0px 0px -25%'` | Отступы для `IntersectionObserver`. Управляет, насколько "внутрь" должна зайти секция, чтобы стать активной. |
50
- | `smoothScroll` | `boolean` | `true` | Включить плавную прокрутку при клике на якорные ссылки. |
51
- | `target` | `HTMLElement \| string` | элемент с `data-vg-toggle="spy"` | Контейнер, внутри которого происходит прокрутка. Если не указан — используется `window`. |
52
- | `scrollbar` | `Object \| null` | `null` | Инстанс `smooth-scrollbar` или Scrollbar API (если `smooth-scrollbar` импортирован как модуль и не лежит в `window.Scrollbar`). |
53
- | `threshold` | `number[] \| string` | `[0.1, 0.5, 1]` | Пороги видимости (от 0 до 1), при которых срабатывает активация. Можно передать строку: `'0.1, 0.5, 1'`. |
50
+ | `smoothScroll` | `boolean` | `true` | Включить плавную прокрутку при клике на якорные ссылки. |
51
+ | `target` | `HTMLElement \| string` | элемент с `data-vg-toggle="spy"` | Контейнер, внутри которого происходит прокрутка. Если не указан — используется `window`. |
52
+ | `scrollbar` | `Object \| null` | `null` | Инстанс `smooth-scrollbar` или Scrollbar API (если `smooth-scrollbar` импортирован как модуль и не лежит в `window.Scrollbar`). |
53
+ | `threshold` | `number[] \| string` | `[0.1, 0.5, 1]` | Пороги видимости (от 0 до 1), при которых срабатывает активация. Можно передать строку: `'0.1, 0.5, 1'`. |
54
54
 
55
55
  ---
56
56
 
@@ -86,29 +86,29 @@
86
86
 
87
87
  ---
88
88
 
89
- ## 📚 Заметки
90
-
91
- - Убедитесь, что все целевые секции имеют `id`, соответствующий `href` ссылки.
92
- - Секции должны быть видимы (`display: block`, `visibility: visible`).
93
- - Работает с динамически добавленным контентом, но требует вызова `refresh()` после вставки.
94
- - Если прокрутка виртуальная (например, `smooth-scrollbar`), передайте `target` как контейнер, на который был инициализирован `smooth-scrollbar`, и при модульном импорте также передайте `scrollbar`.
95
-
96
- Пример (модульный импорт `smooth-scrollbar`):
97
-
98
- ```js
99
- import Scrollbar from 'smooth-scrollbar';
100
- import VGSpy from './app/modules/vgspy';
101
-
102
- const scrollRoot = document.querySelector('.my-scroll-root');
103
- Scrollbar.init(scrollRoot);
104
-
105
- VGSpy.getOrCreateInstance(document.querySelector('[data-vg-toggle="spy"]'), {
106
- target: scrollRoot,
107
- scrollbar: Scrollbar,
108
- });
109
- ```
110
-
111
- ---
89
+ ## 📚 Заметки
90
+
91
+ - Убедитесь, что все целевые секции имеют `id`, соответствующий `href` ссылки.
92
+ - Секции должны быть видимы (`display: block`, `visibility: visible`).
93
+ - Работает с динамически добавленным контентом, но требует вызова `refresh()` после вставки.
94
+ - Если прокрутка виртуальная (например, `smooth-scrollbar`), передайте `target` как контейнер, на который был инициализирован `smooth-scrollbar`, и при модульном импорте также передайте `scrollbar`.
95
+
96
+ Пример (модульный импорт `smooth-scrollbar`):
97
+
98
+ ```js
99
+ import Scrollbar from 'smooth-scrollbar';
100
+ import VGSpy from './app/modules/vgspy';
101
+
102
+ const scrollRoot = document.querySelector('.my-scroll-root');
103
+ Scrollbar.init(scrollRoot);
104
+
105
+ VGSpy.getOrCreateInstance(document.querySelector('[data-vg-toggle="spy"]'), {
106
+ target: scrollRoot,
107
+ scrollbar: Scrollbar,
108
+ });
109
+ ```
110
+
111
+ ---
112
112
 
113
113
 
114
114
  ## 📝 Лицензия
@@ -119,4 +119,4 @@ MIT. Свободно использовать и модифицировать.
119
119
 
120
120
  📌 *Разработано в рамках фронтенд-системы VG Modules.*
121
121
  > 🚀 Автор: VEGAS STUDIO (vegas-dev.com)
122
- > 📍 Поддерживается в проектах VEGAS
122
+ > 📍 Поддерживается в проектах VEGAS
@@ -66,9 +66,9 @@ VGToast.run('Ошибка подключения', {
66
66
  | `animation.enable` | `boolean` | `true` | Включить анимации |
67
67
  | `animation.in` | `string` | `'animate__backInUp'` | Анимация появления |
68
68
  | `animation.out` | `string` | `'animate__backOutDown'` | Анимация исчезновения |
69
- | `animation.delay` | `number` | `300` | Длительность анимации (мс) |
70
- | `animation.effect` | `string \| string[]` | `'none'` | Доп. CSS-эффект отображения: `none`, `fade`, `zoom`, `blur`, `slide-up`, `slide-down` или кастомный класс |
71
- | `ajax.route` | `string` | `''` | URL для загрузки |
69
+ | `animation.delay` | `number` | `300` | Длительность анимации (мс) |
70
+ | `animation.effect` | `string \| string[]` | `'none'` | Доп. CSS-эффект отображения: `none`, `fade`, `zoom`, `blur`, `slide-up`, `slide-down` или кастомный класс |
71
+ | `ajax.route` | `string` | `''` | URL для загрузки |
72
72
  | `ajax.target` | `string` | `''` | Селектор контейнера (если используется) |
73
73
  | `ajax.method` | `string` | `'get'` | HTTP-метод |
74
74
  | `ajax.loader` | `boolean` | `false` | Показывать лоадер |
@@ -90,20 +90,20 @@ VGToast.run('Появилось!', {
90
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
- ```
104
-
105
- ```js
106
- VGToast.run('Загрузка...', {
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
+ ```
104
+
105
+ ```js
106
+ VGToast.run('Загрузка...', {
107
107
  ajax: {
108
108
  route: '/api/notify',
109
109
  method: 'post',
@@ -153,4 +153,4 @@ MIT. Свободно использовать и модифицировать.
153
153
 
154
154
  📌 *Разработано в рамках фронтенд-системы VG Modules.*
155
155
  > 🚀 Автор: VEGAS STUDIO (vegas-dev.com)
156
- > 📍 Поддерживается в проектах VEGAS
156
+ > 📍 Поддерживается в проектах VEGAS
@@ -11,7 +11,7 @@
11
11
  @import "../../../utils/scss/variables";
12
12
  @import "variables";
13
13
 
14
- .vg-toast {
14
+ .vg-toast {
15
15
  @include mix-vars('toast', $toast-map);
16
16
  @include mix-alert-color-mode($class: vg-toast);
17
17
  position: fixed;
@@ -64,52 +64,52 @@
64
64
  font-weight: var(--vg-toast-body-font-weight);
65
65
  }
66
66
 
67
- &-pointer {
68
- cursor: pointer;
69
- }
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
-
112
- &-button {
67
+ &-pointer {
68
+ cursor: pointer;
69
+ }
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
+
112
+ &-button {
113
113
  width: auto;
114
114
  height: 100%;
115
115
  display: flex;
@@ -136,4 +136,4 @@
136
136
  }
137
137
  }
138
138
  }
139
- }
139
+ }
@@ -7,14 +7,14 @@ import Placement from "../../../utils/js/components/placement";
7
7
  const NAME = 'tooltip';
8
8
  const NAME_KEY = 'vg.tooltip';
9
9
 
10
- const SELECTOR_DATA_TOGGLE = '[data-vg-toggle="tooltip"]';
11
- const SELECTOR_DATA_TOGGLE_POPOVER = '[data-vg-toggle="popover"]';
12
-
13
- const CLASS_NAME_OPEN = 'vg-tooltip-open';
14
- const CLASS_NAME_SHOW = 'show';
15
- const CLASS_NAME_SHOWN = 'shown';
16
-
17
- const SELECTOR_OPEN_TRIGGER = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}, ${SELECTOR_DATA_TOGGLE_POPOVER}.${CLASS_NAME_SHOW}`;
10
+ const SELECTOR_DATA_TOGGLE = '[data-vg-toggle="tooltip"]';
11
+ const SELECTOR_DATA_TOGGLE_POPOVER = '[data-vg-toggle="popover"]';
12
+
13
+ const CLASS_NAME_OPEN = 'vg-tooltip-open';
14
+ const CLASS_NAME_SHOW = 'show';
15
+ const CLASS_NAME_SHOWN = 'shown';
16
+
17
+ const SELECTOR_OPEN_TRIGGER = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}, ${SELECTOR_DATA_TOGGLE_POPOVER}.${CLASS_NAME_SHOW}`;
18
18
 
19
19
  const EVENT_KEY_HIDE = `${NAME_KEY}.hide`;
20
20
  const EVENT_KEY_HIDDEN = `${NAME_KEY}.hidden`;
@@ -24,23 +24,23 @@ const EVENT_KEY_SHOWN = `${NAME_KEY}.shown`;
24
24
  const EVENT_KEY_CLICK_DATA_API = `click.${NAME_KEY}.data.api`;
25
25
  const EVENT_KEY_MOUSEENTER = `mouseenter.${NAME_KEY}`;
26
26
  const EVENT_KEY_MOUSELEAVE = `mouseleave.${NAME_KEY}`;
27
- const EVENT_KEY_CLICK_DISMISS = `click.dismiss.${NAME_KEY}`;
28
- const EVENT_KEY_KEYDOWN = `keydown.dismiss.${NAME_KEY}`;
29
-
30
- const PLACEMENT_CLASSES = [
31
- 'top',
32
- 'top-start',
33
- 'top-end',
34
- 'bottom',
35
- 'bottom-start',
36
- 'bottom-end',
37
- 'left',
38
- 'left-start',
39
- 'left-end',
40
- 'right',
41
- 'right-start',
42
- 'right-end'
43
- ];
27
+ const EVENT_KEY_CLICK_DISMISS = `click.dismiss.${NAME_KEY}`;
28
+ const EVENT_KEY_KEYDOWN = `keydown.dismiss.${NAME_KEY}`;
29
+
30
+ const PLACEMENT_CLASSES = [
31
+ 'top',
32
+ 'top-start',
33
+ 'top-end',
34
+ 'bottom',
35
+ 'bottom-start',
36
+ 'bottom-end',
37
+ 'left',
38
+ 'left-start',
39
+ 'left-end',
40
+ 'right',
41
+ 'right-start',
42
+ 'right-end'
43
+ ];
44
44
 
45
45
  const defaultParams = {
46
46
  title: '',
@@ -86,14 +86,14 @@ class VGTooltip extends BaseModule {
86
86
  this._showTimeout = null;
87
87
  this._hideTimeout = null;
88
88
 
89
- this._fixTitle();
89
+ this._fixTitle();
90
90
 
91
- this._handleUpdate = () => {
92
- if (this._isShown()) {
93
- this._setPlacement();
94
- }
95
- };
96
- }
91
+ this._handleUpdate = () => {
92
+ if (this._isShown()) {
93
+ this._setPlacement();
94
+ }
95
+ };
96
+ }
97
97
 
98
98
  static get NAME() {
99
99
  return NAME;
@@ -370,17 +370,17 @@ class VGTooltip extends BaseModule {
370
370
  }
371
371
  }
372
372
 
373
- _syncPlacementClass() {
374
- if (!this._tooltip) return;
375
-
376
- const placement = this._tooltip.getAttribute('data-vg-placement');
377
-
378
- this._tooltip.classList.remove(...PLACEMENT_CLASSES);
379
-
380
- if (placement) {
381
- this._tooltip.classList.add(placement);
382
- }
383
- }
373
+ _syncPlacementClass() {
374
+ if (!this._tooltip) return;
375
+
376
+ const placement = this._tooltip.getAttribute('data-vg-placement');
377
+
378
+ this._tooltip.classList.remove(...PLACEMENT_CLASSES);
379
+
380
+ if (placement) {
381
+ this._tooltip.classList.add(placement);
382
+ }
383
+ }
384
384
 
385
385
  _hideOpenedTooltips() {
386
386
  Selectors.findAll('.vg-tooltip.show').forEach(tooltip => {
@@ -404,54 +404,54 @@ class VGTooltip extends BaseModule {
404
404
  window.removeEventListener('scroll', this._handleUpdate, true);
405
405
  }
406
406
 
407
- _clearTimeouts() {
408
- if (this._showTimeout) {
409
- clearTimeout(this._showTimeout);
410
- this._showTimeout = null;
407
+ _clearTimeouts() {
408
+ if (this._showTimeout) {
409
+ clearTimeout(this._showTimeout);
410
+ this._showTimeout = null;
411
411
  }
412
412
 
413
413
  if (this._hideTimeout) {
414
- clearTimeout(this._hideTimeout);
415
- this._hideTimeout = null;
416
- }
417
- }
418
- }
419
-
420
- const getShownInstances = () => {
421
- return Selectors.findAll(SELECTOR_OPEN_TRIGGER)
422
- .map(element => VGTooltip.getInstance(element))
423
- .filter(Boolean);
424
- };
425
-
426
- EventHandler.on(document, EVENT_KEY_KEYDOWN, event => {
427
- if (event.key !== 'Escape') return;
428
-
429
- getShownInstances().forEach(instance => {
430
- if (!instance._params.keyboard || !instance._isShown()) return;
431
-
432
- instance.hide();
433
- });
434
- });
435
-
436
- EventHandler.on(document, EVENT_KEY_CLICK_DISMISS, event => {
437
- getShownInstances().forEach(instance => {
438
- if (!instance._params.closeOnOutsideClick) return;
439
- if (!instance._params.trigger.includes('click') && !instance._params.popover) return;
440
- if (!instance._isShown()) return;
441
-
442
- if (
443
- instance._tooltip?.contains(event.target) ||
444
- instance._element.contains(event.target)
445
- ) {
446
- return;
447
- }
448
-
449
- instance.hide();
450
- });
451
- });
452
-
453
- EventHandler.on(document, EVENT_KEY_MOUSEENTER, SELECTOR_DATA_TOGGLE, function () {
454
- const instance = VGTooltip.getOrCreateInstance(this);
414
+ clearTimeout(this._hideTimeout);
415
+ this._hideTimeout = null;
416
+ }
417
+ }
418
+ }
419
+
420
+ const getShownInstances = () => {
421
+ return Selectors.findAll(SELECTOR_OPEN_TRIGGER)
422
+ .map(element => VGTooltip.getInstance(element))
423
+ .filter(Boolean);
424
+ };
425
+
426
+ EventHandler.on(document, EVENT_KEY_KEYDOWN, event => {
427
+ if (event.key !== 'Escape') return;
428
+
429
+ getShownInstances().forEach(instance => {
430
+ if (!instance._params.keyboard || !instance._isShown()) return;
431
+
432
+ instance.hide();
433
+ });
434
+ });
435
+
436
+ EventHandler.on(document, EVENT_KEY_CLICK_DISMISS, event => {
437
+ getShownInstances().forEach(instance => {
438
+ if (!instance._params.closeOnOutsideClick) return;
439
+ if (!instance._params.trigger.includes('click') && !instance._params.popover) return;
440
+ if (!instance._isShown()) return;
441
+
442
+ if (
443
+ instance._tooltip?.contains(event.target) ||
444
+ instance._element.contains(event.target)
445
+ ) {
446
+ return;
447
+ }
448
+
449
+ instance.hide();
450
+ });
451
+ });
452
+
453
+ EventHandler.on(document, EVENT_KEY_MOUSEENTER, SELECTOR_DATA_TOGGLE, function () {
454
+ const instance = VGTooltip.getOrCreateInstance(this);
455
455
 
456
456
  if (instance._params.trigger.includes('hover')) {
457
457
  instance.show(this);
@@ -490,4 +490,4 @@ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_POPOVER
490
490
  instance.toggle(this);
491
491
  });
492
492
 
493
- export default VGTooltip;
493
+ export default VGTooltip;