vgapp 1.4.4 → 1.4.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 (123) hide show
  1. package/README.md +270 -270
  2. package/app/langs/en/buttons.json +17 -17
  3. package/app/langs/en/messages.json +36 -36
  4. package/app/langs/ru/buttons.json +17 -17
  5. package/app/langs/ru/messages.json +36 -36
  6. package/app/modules/vgalert/js/vgalert.js +266 -266
  7. package/app/modules/vgalert/scss/_variables.scss +16 -16
  8. package/app/modules/vgalert/scss/vgalert.scss +107 -107
  9. package/app/modules/vgcollapse/scss/_variables.scss +7 -7
  10. package/app/modules/vgcollapse/scss/vgcollapse.scss +5 -5
  11. package/app/modules/vgdropdown/scss/_variables.scss +14 -14
  12. package/app/modules/vgdropdown/scss/vgdropdown.scss +5 -5
  13. package/app/modules/vgdynamictable/index.js +4 -4
  14. package/app/modules/vgdynamictable/js/filters.js +21 -21
  15. package/app/modules/vgdynamictable/js/fixed.js +179 -179
  16. package/app/modules/vgdynamictable/js/options.js +3 -3
  17. package/app/modules/vgdynamictable/js/pagination.js +1 -1
  18. package/app/modules/vgdynamictable/js/search.js +12 -12
  19. package/app/modules/vgdynamictable/js/skeleton.js +27 -19
  20. package/app/modules/vgdynamictable/js/sortable.js +71 -71
  21. package/app/modules/vgdynamictable/js/summary-footer.js +28 -28
  22. package/app/modules/vgdynamictable/js/table-url-state.js +31 -31
  23. package/app/modules/vgdynamictable/js/utils/common.js +48 -48
  24. package/app/modules/vgdynamictable/js/vgdynamictable.js +79 -79
  25. package/app/modules/vgdynamictable/scss/_actions.scss +19 -19
  26. package/app/modules/vgdynamictable/scss/_pagination.scss +5 -5
  27. package/app/modules/vgdynamictable/scss/_skeleton.scss +11 -11
  28. package/app/modules/vgdynamictable/scss/_sortable.scss +28 -28
  29. package/app/modules/vgdynamictable/scss/_table.scss +7 -30
  30. package/app/modules/vgdynamictable/scss/_variables.scss +46 -46
  31. package/app/modules/vgdynamictable/scss/vgdynamictable.scss +28 -36
  32. package/app/modules/vgfilepreview/js/i18n.js +56 -56
  33. package/app/modules/vgfilepreview/js/renderers/image-modal.js +145 -145
  34. package/app/modules/vgfilepreview/js/renderers/image.js +92 -92
  35. package/app/modules/vgfilepreview/js/renderers/index.js +19 -19
  36. package/app/modules/vgfilepreview/js/renderers/office-modal.js +168 -168
  37. package/app/modules/vgfilepreview/js/renderers/office.js +79 -79
  38. package/app/modules/vgfilepreview/js/renderers/pdf-modal.js +260 -260
  39. package/app/modules/vgfilepreview/js/renderers/pdf.js +76 -76
  40. package/app/modules/vgfilepreview/js/renderers/playlist.js +71 -71
  41. package/app/modules/vgfilepreview/js/renderers/text-modal.js +343 -343
  42. package/app/modules/vgfilepreview/js/renderers/text.js +83 -83
  43. package/app/modules/vgfilepreview/js/renderers/video-modal.js +272 -272
  44. package/app/modules/vgfilepreview/js/renderers/video.js +80 -80
  45. package/app/modules/vgfilepreview/js/renderers/zip-modal.js +522 -522
  46. package/app/modules/vgfilepreview/js/renderers/zip.js +89 -89
  47. package/app/modules/vgfilepreview/js/vgfilepreview.js +7 -7
  48. package/app/modules/vgfilepreview/readme.md +68 -68
  49. package/app/modules/vgfilepreview/scss/_variables.scss +115 -115
  50. package/app/modules/vgfilepreview/scss/vgfilepreview.scss +463 -463
  51. package/app/modules/vgfiles/js/droppable.js +20 -9
  52. package/app/modules/vgfiles/js/render.js +153 -153
  53. package/app/modules/vgfiles/js/vgfiles.js +104 -104
  54. package/app/modules/vgfiles/readme.md +123 -123
  55. package/app/modules/vgfiles/scss/_mixins.scss +9 -9
  56. package/app/modules/vgfiles/scss/_variables.scss +41 -41
  57. package/app/modules/vgfiles/scss/vgfiles.scss +161 -161
  58. package/app/modules/vgformsender/js/hideshowpass.js +21 -16
  59. package/app/modules/vgformsender/js/vgformsender.js +4 -6
  60. package/app/modules/vgformsender/readme.md +1 -1
  61. package/app/modules/vgformsender/scss/_variables.scss +5 -5
  62. package/app/modules/vgformsender/scss/vgformsender.scss +42 -42
  63. package/app/modules/vglawcookie/js/vglawcookie.js +11 -8
  64. package/app/modules/vglawcookie/scss/_variables.scss +13 -13
  65. package/app/modules/vglawcookie/scss/vglawcookie.scss +5 -5
  66. package/app/modules/vgmodal/js/vgmodal.interaction.js +216 -216
  67. package/app/modules/vgmodal/js/vgmodal.js +355 -355
  68. package/app/modules/vgmodal/js/vgmodal.minimized.js +227 -227
  69. package/app/modules/vgmodal/scss/_variables.scss +17 -17
  70. package/app/modules/vgmodal/scss/vgmodal.scss +77 -77
  71. package/app/modules/vgnav/js/vgnav.js +180 -180
  72. package/app/modules/vgnav/scss/_breakpoints.scss +36 -36
  73. package/app/modules/vgnav/scss/_hamburger.scss +5 -5
  74. package/app/modules/vgnav/scss/_placement.scss +5 -5
  75. package/app/modules/vgnav/scss/_toggle.scss +5 -5
  76. package/app/modules/vgnav/scss/_variables.scss +26 -26
  77. package/app/modules/vgnav/scss/vgnav.scss +41 -41
  78. package/app/modules/vgnestable/README.md +39 -39
  79. package/app/modules/vgnestable/js/vgnestable.js +358 -358
  80. package/app/modules/vgnestable/scss/_variables.scss +35 -35
  81. package/app/modules/vgnestable/scss/vgnestable.scss +55 -55
  82. package/app/modules/vgrangeslider/js/skins.js +222 -222
  83. package/app/modules/vgrangeslider/js/vgrangeslider.js +704 -704
  84. package/app/modules/vgrangeslider/scss/_variables.scss +55 -55
  85. package/app/modules/vgrangeslider/scss/vgrangeslider.scss +239 -239
  86. package/app/modules/vgrollup/scss/_variables.scss +15 -15
  87. package/app/modules/vgrollup/scss/vgrollup.scss +6 -6
  88. package/app/modules/vgselect/js/vgselect.js +129 -129
  89. package/app/modules/vgselect/readme.md +11 -11
  90. package/app/modules/vgselect/scss/_variables.scss +50 -50
  91. package/app/modules/vgselect/scss/vgselect.scss +48 -48
  92. package/app/modules/vgsidebar/js/vgsidebar.js +79 -79
  93. package/app/modules/vgsidebar/scss/_variables.scss +10 -10
  94. package/app/modules/vgsidebar/scss/vgsidebar.scss +5 -5
  95. package/app/modules/vgtabs/scss/_variables.scss +23 -23
  96. package/app/modules/vgtabs/scss/vgtabs.scss +5 -5
  97. package/app/modules/vgtoast/scss/_variables.scss +13 -13
  98. package/app/modules/vgtoast/scss/vgtoast.scss +5 -5
  99. package/app/modules/vgtooltip/js/vgtooltip.js +107 -51
  100. package/app/modules/vgtooltip/scss/_variables.scss +10 -10
  101. package/app/modules/vgtooltip/scss/vgtooltip.scss +5 -5
  102. package/app/utils/js/components/audio-metadata.js +240 -240
  103. package/app/utils/js/components/backdrop.js +116 -116
  104. package/app/utils/js/components/file-icon.js +109 -109
  105. package/app/utils/js/components/file-preview.js +304 -304
  106. package/app/utils/js/components/sanitize.js +150 -150
  107. package/app/utils/js/components/video-metadata.js +140 -140
  108. package/app/utils/scss/_backdrop.scss +5 -5
  109. package/app/utils/scss/_theme-default.scss +12 -12
  110. package/app/utils/scss/_theme.scss +7 -7
  111. package/app/utils/scss/_tokens.scss +170 -170
  112. package/app/utils/scss/default.scss +9 -9
  113. package/app/utils/scss/functions.scss +21 -21
  114. package/app/utils/scss/index.scss +4 -4
  115. package/app/utils/scss/mixin.scss +16 -16
  116. package/app/utils/scss/variables.scss +105 -105
  117. package/app/vgapp.js +295 -295
  118. package/build/vgapp.css +1 -1
  119. package/build/vgapp.css.map +1 -1
  120. package/build/vgapp.js +1 -1
  121. package/build/vgapp.js.map +1 -1
  122. package/index.scss +20 -20
  123. package/package.json +4 -2
@@ -68,17 +68,17 @@ class VGSelect extends BaseModule {
68
68
  constructor(element, params = {}) {
69
69
  super(element, params);
70
70
 
71
- this._params = this._getParams(element, mergeDeepObject({
72
- lang: document.documentElement.lang || 'ru',
73
- autosearch: true,
71
+ this._params = this._getParams(element, mergeDeepObject({
72
+ lang: document.documentElement.lang || 'ru',
73
+ autosearch: true,
74
74
  // Dropdown placement behavior:
75
75
  // - none: default CSS positioning (no JS)
76
76
  // - auto: choose top/bottom based on available space in overflow ancestor/viewport
77
77
  // - top: force open upwards
78
78
  // - bottom: force open downwards
79
79
  position: 'none',
80
- search: {
81
- enabled: false,
80
+ search: {
81
+ enabled: false,
82
82
  route: '',
83
83
  remote: false,
84
84
  delay: 300,
@@ -103,10 +103,10 @@ class VGSelect extends BaseModule {
103
103
  onLoadNext: null,
104
104
  }, params));
105
105
 
106
- this._observer = null;
107
- this._observerTimeout = null;
108
- this._visibilityTransitionId = 0;
109
- this._drop = Selectors.find(SELECTOR_DROPDOWN, this._element);
106
+ this._observer = null;
107
+ this._observerTimeout = null;
108
+ this._visibilityTransitionId = 0;
109
+ this._drop = Selectors.find(SELECTOR_DROPDOWN, this._element);
110
110
  this._searchTerm = '';
111
111
  this._currentPage = 1;
112
112
  this._totalPages = null;
@@ -122,9 +122,9 @@ class VGSelect extends BaseModule {
122
122
  this._positioningScrollParent = null;
123
123
  this._boundUpdateDropdownPlacement = () => this._updateDropdownPlacement();
124
124
 
125
- this._initObserver();
126
- this._syncSearch();
127
- this._initLoadMoreButton();
125
+ this._initObserver();
126
+ this._syncSearch();
127
+ this._initLoadMoreButton();
128
128
 
129
129
  this._triggerEvent(EVENT_KEY_INIT);
130
130
  this._callCallback('onInit');
@@ -278,39 +278,39 @@ class VGSelect extends BaseModule {
278
278
  return new Set([...DATA_ATTR_COPY_EXCLUDE_DEFAULT, ...customExcluded]);
279
279
  }
280
280
 
281
- static _normalizeDataAttrKey(value) {
281
+ static _normalizeDataAttrKey(value) {
282
282
  return String(value || '')
283
283
  .trim()
284
284
  .replace(/^data-/, '')
285
285
  .toLowerCase();
286
- }
287
-
288
- /**
289
- * Определяет, нужно ли показывать поиск.
290
- * search.enabled и search.remote включают его при любом количестве опций.
291
- * autosearch: true использует порог 7, число задаёт собственный порог.
292
- * @param {HTMLSelectElement} selector
293
- * @param {Object} params
294
- * @returns {boolean}
295
- * @private
296
- */
297
- static _isSearchEnabled(selector, params = {}) {
298
- if (params.search?.enabled === true || params.search?.remote === true) return true;
299
-
300
- const autosearch = params.autosearch;
301
- if (autosearch === false) return false;
302
-
303
- const numericThreshold = Number(autosearch);
304
- const threshold = autosearch !== true && Number.isFinite(numericThreshold) && numericThreshold >= 0
305
- ? numericThreshold
306
- : 7;
307
- const optionCount = Array.from(selector?.options || []).filter(option => {
308
- if (option.hidden) return false;
309
- return option.value !== '' || option.textContent.trim() !== '';
310
- }).length;
311
-
312
- return optionCount > threshold;
313
- }
286
+ }
287
+
288
+ /**
289
+ * Определяет, нужно ли показывать поиск.
290
+ * search.enabled и search.remote включают его при любом количестве опций.
291
+ * autosearch: true использует порог 7, число задаёт собственный порог.
292
+ * @param {HTMLSelectElement} selector
293
+ * @param {Object} params
294
+ * @returns {boolean}
295
+ * @private
296
+ */
297
+ static _isSearchEnabled(selector, params = {}) {
298
+ if (params.search?.enabled === true || params.search?.remote === true) return true;
299
+
300
+ const autosearch = params.autosearch;
301
+ if (autosearch === false) return false;
302
+
303
+ const numericThreshold = Number(autosearch);
304
+ const threshold = autosearch !== true && Number.isFinite(numericThreshold) && numericThreshold >= 0
305
+ ? numericThreshold
306
+ : 7;
307
+ const optionCount = Array.from(selector?.options || []).filter(option => {
308
+ if (option.hidden) return false;
309
+ return option.value !== '' || option.textContent.trim() !== '';
310
+ }).length;
311
+
312
+ return optionCount > threshold;
313
+ }
314
314
 
315
315
  /**
316
316
  * Проверяет, является ли значение "пустым" (соответствует placeholder)
@@ -426,57 +426,57 @@ class VGSelect extends BaseModule {
426
426
  selector.insertAdjacentElement('afterend', container);
427
427
  selector.dataset.inited = 'true';
428
428
 
429
- this.getOrCreateInstance(container, params);
430
- this.updateUI(selector);
431
-
432
- return container;
433
- }
434
-
435
- /**
436
- * Добавляет или убирает поле поиска согласно search.enabled/autosearch.
437
- * @private
438
- */
439
- _syncSearch() {
440
- const selector = this._element.previousElementSibling;
441
- if (!selector || selector.tagName !== 'SELECT' || !this._drop) return;
442
-
443
- const enabled = VGSelect._isSearchEnabled(selector, this._params);
444
- const currentSearch = this._drop.querySelector(`.${CLASS_NAME_SEARCH}`);
445
- if (!enabled) {
446
- currentSearch?.remove();
447
- return;
448
- }
449
- if (currentSearch) return;
450
-
451
- const search = document.createElement('div');
452
- search.classList.add(CLASS_NAME_SEARCH);
453
- const searchInput = document.createElement('input');
454
- searchInput.name = 'vg-select-search';
455
- searchInput.type = 'text';
456
- searchInput.placeholder = lang_titles(this._params.lang, NAME)['search'];
457
- searchInput.autocomplete = 'off';
458
- searchInput.setAttribute('role', 'searchbox');
459
- search.appendChild(searchInput);
460
- this._drop.insertBefore(search, this._drop.firstChild);
461
-
462
- let searchTimeout;
463
- searchInput.addEventListener('input', (e) => {
464
- const term = e.target.value.trim();
465
- const params = this._params;
466
-
467
- this._callCallback('onSearch', { term });
468
- if (params.search.remote && params.search.route) {
469
- if (term.length < (params.search.minterm || 1)) return;
470
-
471
- clearTimeout(searchTimeout);
472
- searchTimeout = setTimeout(() => {
473
- this._fetchRemoteData(term);
474
- }, params.search.delay || 300);
475
- } else {
476
- this._filterLocalOptions(term);
477
- }
478
- });
479
- }
429
+ this.getOrCreateInstance(container, params);
430
+ this.updateUI(selector);
431
+
432
+ return container;
433
+ }
434
+
435
+ /**
436
+ * Добавляет или убирает поле поиска согласно search.enabled/autosearch.
437
+ * @private
438
+ */
439
+ _syncSearch() {
440
+ const selector = this._element.previousElementSibling;
441
+ if (!selector || selector.tagName !== 'SELECT' || !this._drop) return;
442
+
443
+ const enabled = VGSelect._isSearchEnabled(selector, this._params);
444
+ const currentSearch = this._drop.querySelector(`.${CLASS_NAME_SEARCH}`);
445
+ if (!enabled) {
446
+ currentSearch?.remove();
447
+ return;
448
+ }
449
+ if (currentSearch) return;
450
+
451
+ const search = document.createElement('div');
452
+ search.classList.add(CLASS_NAME_SEARCH);
453
+ const searchInput = document.createElement('input');
454
+ searchInput.name = 'vg-select-search';
455
+ searchInput.type = 'text';
456
+ searchInput.placeholder = lang_titles(this._params.lang, NAME)['search'];
457
+ searchInput.autocomplete = 'off';
458
+ searchInput.setAttribute('role', 'searchbox');
459
+ search.appendChild(searchInput);
460
+ this._drop.insertBefore(search, this._drop.firstChild);
461
+
462
+ let searchTimeout;
463
+ searchInput.addEventListener('input', (e) => {
464
+ const term = e.target.value.trim();
465
+ const params = this._params;
466
+
467
+ this._callCallback('onSearch', { term });
468
+ if (params.search.remote && params.search.route) {
469
+ if (term.length < (params.search.minterm || 1)) return;
470
+
471
+ clearTimeout(searchTimeout);
472
+ searchTimeout = setTimeout(() => {
473
+ this._fetchRemoteData(term);
474
+ }, params.search.delay || 300);
475
+ } else {
476
+ this._filterLocalOptions(term);
477
+ }
478
+ });
479
+ }
480
480
 
481
481
  /**
482
482
  * Переключает открытие/закрытие выпадающего списка
@@ -493,16 +493,16 @@ class VGSelect extends BaseModule {
493
493
  show(relatedTarget) {
494
494
  if (isDisabled(this._element)) return;
495
495
 
496
- const e = EventHandler.trigger(this._element, EVENT_KEY_SHOW, { relatedTarget });
497
- if (e.defaultPrevented) return;
498
-
499
- const transitionId = ++this._visibilityTransitionId;
500
- this._element.classList.add(CLASS_NAME_SHOW);
501
- // active задаёт видимое состояние dropdown (opacity/height). Оно не должно
502
- // зависеть от таймера: под нагрузкой отложенный callback оставлял уже
503
- // открытый dropdown прозрачным и с height: 0.
504
- this._element.classList.add(CLASS_NAME_ACTIVE);
505
- if (this._getPositionMode() !== 'none') {
496
+ const e = EventHandler.trigger(this._element, EVENT_KEY_SHOW, { relatedTarget });
497
+ if (e.defaultPrevented) return;
498
+
499
+ const transitionId = ++this._visibilityTransitionId;
500
+ this._element.classList.add(CLASS_NAME_SHOW);
501
+ // active задаёт видимое состояние dropdown (opacity/height). Оно не должно
502
+ // зависеть от таймера: под нагрузкой отложенный callback оставлял уже
503
+ // открытый dropdown прозрачным и с height: 0.
504
+ this._element.classList.add(CLASS_NAME_ACTIVE);
505
+ if (this._getPositionMode() !== 'none') {
506
506
  this._setupDropdownPlacement();
507
507
  } else {
508
508
  // Ensure no leftovers if the instance had JS positioning before.
@@ -516,12 +516,12 @@ class VGSelect extends BaseModule {
516
516
  const toggle = this._element.querySelector(SELECTOR_DATA_TOGGLE);
517
517
  toggle.setAttribute('aria-expanded', 'true');
518
518
 
519
- const searchInput = this._element.querySelector(SELECTOR_SEARCH_INPUT);
520
- if (searchInput) searchInput.focus();
521
-
522
- return this._queueCallback(() => {
523
- if (transitionId !== this._visibilityTransitionId || !this._isShown()) return;
524
- this._updateDropdownPlacement();
519
+ const searchInput = this._element.querySelector(SELECTOR_SEARCH_INPUT);
520
+ if (searchInput) searchInput.focus();
521
+
522
+ return this._queueCallback(() => {
523
+ if (transitionId !== this._visibilityTransitionId || !this._isShown()) return;
524
+ this._updateDropdownPlacement();
525
525
  EventHandler.trigger(this._element, EVENT_KEY_SHOWN, { relatedTarget });
526
526
  this._triggerEvent(EVENT_KEY_OPEN);
527
527
  this._callCallback('onShow');
@@ -542,18 +542,18 @@ class VGSelect extends BaseModule {
542
542
  * @private
543
543
  */
544
544
  _completeHide(relatedTarget = {}) {
545
- const e = EventHandler.trigger(this._element, EVENT_KEY_HIDE, relatedTarget);
546
- if (e.defaultPrevented) return;
547
-
548
- const transitionId = ++this._visibilityTransitionId;
549
- this._teardownDropdownPlacement();
545
+ const e = EventHandler.trigger(this._element, EVENT_KEY_HIDE, relatedTarget);
546
+ if (e.defaultPrevented) return;
547
+
548
+ const transitionId = ++this._visibilityTransitionId;
549
+ this._teardownDropdownPlacement();
550
550
 
551
551
  this._element.classList.remove(CLASS_NAME_ACTIVE);
552
552
  this._element.querySelector(SELECTOR_DATA_TOGGLE).setAttribute('aria-expanded', 'false');
553
-
554
- this._queueCallback(() => {
555
- if (transitionId !== this._visibilityTransitionId) return;
556
- this._element.classList.remove(CLASS_NAME_SHOW);
553
+
554
+ this._queueCallback(() => {
555
+ if (transitionId !== this._visibilityTransitionId) return;
556
+ this._element.classList.remove(CLASS_NAME_SHOW);
557
557
  EventHandler.trigger(this._element, EVENT_KEY_HIDDEN, relatedTarget);
558
558
  this._triggerEvent(EVENT_KEY_CLOSE);
559
559
  this._callCallback('onHide');
@@ -637,18 +637,18 @@ class VGSelect extends BaseModule {
637
637
  this._element.classList.remove('disabled');
638
638
  }
639
639
 
640
- const drop = this._element.querySelector(SELECTOR_DROPDOWN);
641
- VGSelect.buildListOptions(select, drop, this._params);
642
- this._syncSearch();
643
- VGSelect.updateUI(select);
640
+ const drop = this._element.querySelector(SELECTOR_DROPDOWN);
641
+ VGSelect.buildListOptions(select, drop, this._params);
642
+ this._syncSearch();
643
+ VGSelect.updateUI(select);
644
644
  }
645
645
 
646
646
  /**
647
647
  * Освобождает ресурсы (отключает observer, очищает таймеры)
648
648
  */
649
- dispose() {
650
- this._visibilityTransitionId++;
651
- if (this._observer) {
649
+ dispose() {
650
+ this._visibilityTransitionId++;
651
+ if (this._observer) {
652
652
  this._observer.disconnect();
653
653
  this._observer = null;
654
654
  }
@@ -1279,11 +1279,11 @@ class VGSelect extends BaseModule {
1279
1279
  });
1280
1280
  }
1281
1281
 
1282
- if (isRebuild) {
1283
- const drop = container.querySelector(`.${CLASS_NAME_DROPDOWN}`);
1284
- VGSelect.buildListOptions(select, drop, instance?._params || {});
1285
- instance?._syncSearch();
1286
- instance?._triggerEvent(EVENT_KEY_REBUILD);
1282
+ if (isRebuild) {
1283
+ const drop = container.querySelector(`.${CLASS_NAME_DROPDOWN}`);
1284
+ VGSelect.buildListOptions(select, drop, instance?._params || {});
1285
+ instance?._syncSearch();
1286
+ instance?._triggerEvent(EVENT_KEY_REBUILD);
1287
1287
  } else {
1288
1288
  this.updateUI(select);
1289
1289
  }
@@ -38,11 +38,11 @@
38
38
  ```js
39
39
  js import VGSelect from './app/modules/vgselect/js/vgselect';
40
40
  // Инициализация
41
- VGSelect.init(document.getElementById('mySelect'), {
42
- lang: 'ru',
43
- placeholder: 'Выберите значение',
44
- autosearch: true,
45
- search: {
41
+ VGSelect.init(document.getElementById('mySelect'), {
42
+ lang: 'ru',
43
+ placeholder: 'Выберите значение',
44
+ autosearch: true,
45
+ search: {
46
46
  enabled: true,
47
47
  remote: true,
48
48
  route: '/api/search',
@@ -62,11 +62,11 @@ VGSelect.init(document.getElementById('mySelect'), {
62
62
 
63
63
  | Параметр | Тип | Описание |
64
64
  |--------|-----|---------|
65
- | `lang` | `string` | Язык интерфейса (поддерживается i18n). По умолчанию: `ru` |
66
- | `placeholder` | `string` | Текст плейсхолдера |
67
- | `autosearch` | `boolean \| number` | Автоматически включить поиск, если опций больше порога. `true` — порог 7 (по умолчанию), число — собственный порог, `false` — отключить автоматику |
68
- | `search.enabled` | `boolean` | Включить поле поиска вручную при любом количестве опций |
69
- | `search.remote` | `boolean` | Поиск через AJAX; при `true` поле поиска включается независимо от количества локальных опций |
65
+ | `lang` | `string` | Язык интерфейса (поддерживается i18n). По умолчанию: `ru` |
66
+ | `placeholder` | `string` | Текст плейсхолдера |
67
+ | `autosearch` | `boolean \| number` | Автоматически включить поиск, если опций больше порога. `true` — порог 7 (по умолчанию), число — собственный порог, `false` — отключить автоматику |
68
+ | `search.enabled` | `boolean` | Включить поле поиска вручную при любом количестве опций |
69
+ | `search.remote` | `boolean` | Поиск через AJAX; при `true` поле поиска включается независимо от количества локальных опций |
70
70
  | `search.route` | `string` | URL для удалённого поиска |
71
71
  | `search.delay` | `number` | Задержка перед запросом (мс) |
72
72
  | `search.minTerm` | `number` | Минимальная длина запроса |
@@ -179,4 +179,4 @@ MIT. Свободно использовать и модифицировать.
179
179
 
180
180
  📌 *Разработано в рамках фронтенд-системы VG Modules.*
181
181
  > 🚀 Автор: VEGAS STUDIO (vegas-dev.com)
182
- > 📍 Поддерживается в проектах VEGAS
182
+ > 📍 Поддерживается в проектах VEGAS
@@ -1,11 +1,11 @@
1
- @use "../../../utils/scss" as vg;
2
-
3
- $select-current-map: (
4
- background-color: var(--vg-control-bg, #ffffff),
5
- color: var(--vg-text-color, #{vg.$color}),
6
- border-width: vg.$border-width,
7
- border-style: vg.$border-style,
8
- border-color: var(--vg-control-border-color, #dddddd),
1
+ @use "../../../utils/scss" as vg;
2
+
3
+ $select-current-map: (
4
+ background-color: var(--vg-control-bg, #ffffff),
5
+ color: var(--vg-text-color, #{vg.$color}),
6
+ border-width: vg.$border-width,
7
+ border-style: vg.$border-style,
8
+ border-color: var(--vg-control-border-color, #dddddd),
9
9
  border-radius: 5px,
10
10
  padding-left: 16px,
11
11
  padding-right: 40px,
@@ -16,69 +16,69 @@ $select-current-map: (
16
16
  z-index: 10,
17
17
  ) !default;
18
18
 
19
- $select-placeholder-map: (
20
- placehoder-color: var(--vg-text-placeholder-color, rgba(0, 0, 0, .32)),
21
- placehoder-font-size: 16px,
22
- ) !default;
19
+ $select-placeholder-map: (
20
+ placehoder-color: var(--vg-text-placeholder-color, rgba(0, 0, 0, .32)),
21
+ placehoder-font-size: 16px,
22
+ ) !default;
23
23
 
24
24
  $select-current-svg: '<svg aria-hidden="true" focusable="false" data-prefix="fa-light" data-icon="chevron-down" class="svg-inline--fa fa-chevron-down fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M4 181C7 178 12 176 16 176C20 176 24 177 27 180L224 362L421 180C428 174 438 175 444 181C450 188 449 198 443 204L235 396C229 401 219 401 213 396L5 204C-1 198 -2 188 4 181Z" fill="gray"/></svg>' !default;
25
25
 
26
- $select-dropdown-map: (
27
- background-color: var(--vg-control-bg, #ffffff),
28
- color: var(--vg-text-color, #{vg.$color}),
29
- border-width: vg.$border-width,
30
- border-style: vg.$border-style,
31
- border-color: var(--vg-control-border-color, #dddddd),
32
- border-radius: vg.$border-radius,
33
- box-shadow: 0 7px 12px 1px var(--vg-shadow-soft-color, rgba(68, 68, 68, .11)),
26
+ $select-dropdown-map: (
27
+ background-color: var(--vg-control-bg, #ffffff),
28
+ color: var(--vg-text-color, #{vg.$color}),
29
+ border-width: vg.$border-width,
30
+ border-style: vg.$border-style,
31
+ border-color: var(--vg-control-border-color, #dddddd),
32
+ border-radius: vg.$border-radius,
33
+ box-shadow: 0 7px 12px 1px var(--vg-shadow-soft-color, rgba(68, 68, 68, .11)),
34
34
  z-index: 15,
35
35
  ) !default;
36
36
 
37
- $select-list-map: (
38
- background-color: transparent,
39
- color: var(--vg-text-color, #{vg.$color}),
37
+ $select-list-map: (
38
+ background-color: transparent,
39
+ color: var(--vg-text-color, #{vg.$color}),
40
40
  padding-left: 8px,
41
41
  padding-right: 8px,
42
42
  padding-top: 8px,
43
43
  padding-bottom: 8px,
44
- border-bottom-width: vg.$border-width,
45
- border-bottom-style: vg.$border-style,
46
- border-bottom-color: var(--vg-border-disabled-color, #f5f5f5),
44
+ border-bottom-width: vg.$border-width,
45
+ border-bottom-style: vg.$border-style,
46
+ border-bottom-color: var(--vg-border-disabled-color, #f5f5f5),
47
47
  ) !default;
48
48
 
49
- $select-optgroup-map: (
50
- background-color: transparent,
51
- color: var(--vg-text-color, #{vg.$color}),
49
+ $select-optgroup-map: (
50
+ background-color: transparent,
51
+ color: var(--vg-text-color, #{vg.$color}),
52
52
  padding-left: 8px,
53
53
  padding-right: 8px,
54
54
  padding-top: 8px,
55
55
  padding-bottom: 8px,
56
- border-bottom-width: vg.$border-width,
57
- border-bottom-style: vg.$border-style,
58
- border-bottom-color: var(--vg-border-strong-color, #838383),
56
+ border-bottom-width: vg.$border-width,
57
+ border-bottom-style: vg.$border-style,
58
+ border-bottom-color: var(--vg-border-strong-color, #838383),
59
59
  font-weight: 500,
60
60
  ) !default;
61
61
 
62
62
  $select-list-max-height: 286px !default;
63
63
  $select-list-scrollbar-width: 6px !default;
64
- $select-list-scrollbar-bg: var(--vg-surface-muted-bg, #f5f5f5) !default;
65
- $select-list-scrollbar-thumb: var(--vg-text-muted-color, #999999) !default;
64
+ $select-list-scrollbar-bg: var(--vg-surface-muted-bg, #f5f5f5) !default;
65
+ $select-list-scrollbar-thumb: var(--vg-text-muted-color, #999999) !default;
66
66
 
67
- $select-list-hover-map: (
68
- background-color: var(--vg-surface-hover-bg, #f7f7f7),
69
- color: var(--vg-text-color, #{vg.$color}),
70
- border-bottom-color: var(--vg-border-disabled-color, #f5f5f5),
67
+ $select-list-hover-map: (
68
+ background-color: var(--vg-surface-hover-bg, #f7f7f7),
69
+ color: var(--vg-text-color, #{vg.$color}),
70
+ border-bottom-color: var(--vg-border-disabled-color, #f5f5f5),
71
71
  ) !default;
72
72
 
73
- $select-optgroup-hover-map: (
74
- background-color: var(--vg-surface-hover-bg, #f7f7f7),
75
- color: var(--vg-text-color, #{vg.$color}),
76
- border-bottom-color: var(--vg-border-disabled-color, #f5f5f5),
73
+ $select-optgroup-hover-map: (
74
+ background-color: var(--vg-surface-hover-bg, #f7f7f7),
75
+ color: var(--vg-text-color, #{vg.$color}),
76
+ border-bottom-color: var(--vg-border-disabled-color, #f5f5f5),
77
77
  ) !default;
78
78
 
79
- $select-search-map: (
80
- background-color: var(--vg-control-muted-bg, #f2f2f2),
81
- color: var(--vg-text-color, #{vg.$color})
79
+ $select-search-map: (
80
+ background-color: var(--vg-control-muted-bg, #f2f2f2),
81
+ color: var(--vg-text-color, #{vg.$color})
82
82
  ) !default;
83
83
 
84
84
  $select-tags-map: (
@@ -88,15 +88,15 @@ $select-tags-map: (
88
88
  padding: 2px 0
89
89
  ) !default;
90
90
 
91
- $select-tag-map: (
92
- gap: 4px,
93
- background: var(--vg-primary-color, #0d6efd),
94
- color: var(--vg-primary-contrast-color, #ffffff),
91
+ $select-tag-map: (
92
+ gap: 4px,
93
+ background: var(--vg-primary-color, #0d6efd),
94
+ color: var(--vg-primary-contrast-color, #ffffff),
95
95
  padding: 2px 6px,
96
96
  border-radius: 4px,
97
97
  font-size: 14px,
98
98
  remove-width: 12px,
99
99
  remove-height: 12px,
100
- remove-stroke: var(--vg-primary-contrast-color, #ffffff),
100
+ remove-stroke: var(--vg-primary-contrast-color, #ffffff),
101
101
  remove-stroke-width: 2
102
102
  ) !default;