vgapp 1.1.3 → 1.1.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 (54) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/README.md +48 -48
  3. package/agents.md +7 -0
  4. package/app/langs/en/buttons.json +17 -17
  5. package/app/langs/en/messages.json +36 -36
  6. package/app/langs/ru/buttons.json +17 -17
  7. package/app/langs/ru/messages.json +36 -36
  8. package/app/modules/vgfilepreview/js/i18n.js +56 -56
  9. package/app/modules/vgfilepreview/js/renderers/image-modal.js +145 -145
  10. package/app/modules/vgfilepreview/js/renderers/image.js +92 -92
  11. package/app/modules/vgfilepreview/js/renderers/index.js +19 -19
  12. package/app/modules/vgfilepreview/js/renderers/office-modal.js +168 -168
  13. package/app/modules/vgfilepreview/js/renderers/office.js +79 -79
  14. package/app/modules/vgfilepreview/js/renderers/pdf-modal.js +260 -260
  15. package/app/modules/vgfilepreview/js/renderers/pdf.js +76 -76
  16. package/app/modules/vgfilepreview/js/renderers/playlist.js +71 -71
  17. package/app/modules/vgfilepreview/js/renderers/text-modal.js +343 -343
  18. package/app/modules/vgfilepreview/js/renderers/text.js +83 -83
  19. package/app/modules/vgfilepreview/js/renderers/video-modal.js +272 -272
  20. package/app/modules/vgfilepreview/js/renderers/video.js +80 -80
  21. package/app/modules/vgfilepreview/js/renderers/zip-modal.js +522 -522
  22. package/app/modules/vgfilepreview/js/renderers/zip.js +89 -89
  23. package/app/modules/vgfilepreview/js/vgfilepreview.js +965 -530
  24. package/app/modules/vgfilepreview/readme.md +68 -68
  25. package/app/modules/vgfilepreview/scss/_variables.scss +113 -113
  26. package/app/modules/vgfilepreview/scss/vgfilepreview.scss +464 -460
  27. package/app/modules/vgfiles/js/base.js +463 -463
  28. package/app/modules/vgfiles/js/droppable.js +260 -260
  29. package/app/modules/vgfiles/js/render.js +153 -153
  30. package/app/modules/vgfiles/js/vgfiles.js +41 -41
  31. package/app/modules/vgfiles/readme.md +123 -123
  32. package/app/modules/vgfiles/scss/_variables.scss +18 -18
  33. package/app/modules/vgfiles/scss/vgfiles.scss +148 -148
  34. package/app/modules/vgformsender/js/vgformsender.js +13 -13
  35. package/app/modules/vgmodal/js/vgmodal.drag.js +332 -0
  36. package/app/modules/vgmodal/js/vgmodal.js +116 -14
  37. package/app/modules/vgmodal/js/vgmodal.resize.js +435 -0
  38. package/app/modules/vgnav/js/vgnav.js +135 -135
  39. package/app/modules/vgnav/readme.md +67 -67
  40. package/app/modules/vgnestable/README.md +307 -307
  41. package/app/modules/vgnestable/scss/_variables.scss +60 -60
  42. package/app/modules/vgnestable/scss/vgnestable.scss +163 -163
  43. package/app/modules/vgselect/js/vgselect.js +39 -39
  44. package/app/modules/vgselect/scss/vgselect.scss +22 -22
  45. package/app/modules/vgspy/readme.md +28 -28
  46. package/app/utils/js/components/audio-metadata.js +240 -240
  47. package/app/utils/js/components/file-icon.js +109 -109
  48. package/app/utils/js/components/file-preview.js +304 -304
  49. package/app/utils/js/components/sanitize.js +150 -150
  50. package/app/utils/js/components/video-metadata.js +140 -0
  51. package/build/vgapp.css +1 -1
  52. package/build/vgapp.css.map +1 -1
  53. package/index.scss +9 -9
  54. package/package.json +1 -1
@@ -1,60 +1,60 @@
1
- $nestable-map: (
2
- list-transition: "background-color .15s ease, outline-color .15s ease",
3
- list-drop-target-bg: rgba(13, 110, 253, .06),
4
- list-drop-target-outline: 1px dashed rgba(13, 110, 253, .45),
5
- list-drop-target-outline-offset: 2px,
6
- list-drop-denied-bg: rgba(220, 53, 69, .06),
7
- list-drop-denied-outline: 1px dashed rgba(220, 53, 69, .5),
8
- list-drop-denied-outline-offset: 2px,
9
- list-nested-margin-top: .35rem,
10
- list-nested-padding-left: 1.25rem,
11
- list-nested-border-left: 1px dashed rgba(0, 0, 0, .12),
12
-
13
- item-margin: .35rem 0,
14
- item-transition: opacity .15s ease,
15
- item-dragging-opacity: .85,
16
- item-ghost-opacity: .3,
17
-
18
- inner-gap: .5rem,
19
- inner-min-height: 40px,
20
- inner-padding: .45rem .65rem,
21
- inner-border: 1px solid rgba(0, 0, 0, .12),
22
- inner-bg: #fff,
23
- inner-border-radius: .45rem,
24
-
25
- handle-size: 1.85rem,
26
- handle-border: 1px solid rgba(0, 0, 0, .12),
27
- handle-bg: rgba(0, 0, 0, .03),
28
- handle-border-radius: .35rem,
29
- handle-cursor: grab,
30
- handle-active-cursor: grabbing,
31
-
32
- toggle-size: 1.85rem,
33
- toggle-border: 1px solid rgba(0, 0, 0, .12),
34
- toggle-bg: rgba(0, 0, 0, .03),
35
- toggle-border-radius: .35rem,
36
- toggle-color: rgba(0, 0, 0, .65),
37
- toggle-font-weight: 700,
38
- toggle-line-height: 1,
39
- toggle-hover-bg: rgba(0, 0, 0, .07),
40
- toggle-svg-size: 16px,
41
- toggle-svg-transition: transform .2s ease,
42
- toggle-svg-closed-transform: rotate(0deg),
43
- toggle-svg-open-transform: rotate(180deg),
44
-
45
- handle-icon-min-width: .9rem,
46
- handle-icon-color: rgba(0, 0, 0, .45),
47
- handle-icon-font-weight: 700,
48
- handle-icon-line-height: 1,
49
- handle-icon-letter-spacing: .06em,
50
-
51
- placeholder-border: 1px dashed rgba(13, 110, 253, .7),
52
- placeholder-bg: rgba(13, 110, 253, .08),
53
- placeholder-border-radius: .45rem,
54
- placeholder-margin: .35rem 0,
55
- placeholder-min-height: 40px,
56
-
57
- drag-element-opacity: .92,
58
- drag-element-transform: rotate(.5deg),
59
- drag-element-shadow: 0 8px 22px rgba(0, 0, 0, .18)
60
- );
1
+ $nestable-map: (
2
+ list-transition: "background-color .15s ease, outline-color .15s ease",
3
+ list-drop-target-bg: rgba(13, 110, 253, .06),
4
+ list-drop-target-outline: 1px dashed rgba(13, 110, 253, .45),
5
+ list-drop-target-outline-offset: 2px,
6
+ list-drop-denied-bg: rgba(220, 53, 69, .06),
7
+ list-drop-denied-outline: 1px dashed rgba(220, 53, 69, .5),
8
+ list-drop-denied-outline-offset: 2px,
9
+ list-nested-margin-top: .35rem,
10
+ list-nested-padding-left: 1.25rem,
11
+ list-nested-border-left: 1px dashed rgba(0, 0, 0, .12),
12
+
13
+ item-margin: .35rem 0,
14
+ item-transition: opacity .15s ease,
15
+ item-dragging-opacity: .85,
16
+ item-ghost-opacity: .3,
17
+
18
+ inner-gap: .5rem,
19
+ inner-min-height: 40px,
20
+ inner-padding: .45rem .65rem,
21
+ inner-border: 1px solid rgba(0, 0, 0, .12),
22
+ inner-bg: #fff,
23
+ inner-border-radius: .45rem,
24
+
25
+ handle-size: 1.85rem,
26
+ handle-border: 1px solid rgba(0, 0, 0, .12),
27
+ handle-bg: rgba(0, 0, 0, .03),
28
+ handle-border-radius: .35rem,
29
+ handle-cursor: grab,
30
+ handle-active-cursor: grabbing,
31
+
32
+ toggle-size: 1.85rem,
33
+ toggle-border: 1px solid rgba(0, 0, 0, .12),
34
+ toggle-bg: rgba(0, 0, 0, .03),
35
+ toggle-border-radius: .35rem,
36
+ toggle-color: rgba(0, 0, 0, .65),
37
+ toggle-font-weight: 700,
38
+ toggle-line-height: 1,
39
+ toggle-hover-bg: rgba(0, 0, 0, .07),
40
+ toggle-svg-size: 16px,
41
+ toggle-svg-transition: transform .2s ease,
42
+ toggle-svg-closed-transform: rotate(0deg),
43
+ toggle-svg-open-transform: rotate(180deg),
44
+
45
+ handle-icon-min-width: .9rem,
46
+ handle-icon-color: rgba(0, 0, 0, .45),
47
+ handle-icon-font-weight: 700,
48
+ handle-icon-line-height: 1,
49
+ handle-icon-letter-spacing: .06em,
50
+
51
+ placeholder-border: 1px dashed rgba(13, 110, 253, .7),
52
+ placeholder-bg: rgba(13, 110, 253, .08),
53
+ placeholder-border-radius: .45rem,
54
+ placeholder-margin: .35rem 0,
55
+ placeholder-min-height: 40px,
56
+
57
+ drag-element-opacity: .92,
58
+ drag-element-transform: rotate(.5deg),
59
+ drag-element-shadow: 0 8px 22px rgba(0, 0, 0, .18)
60
+ );
@@ -1,163 +1,163 @@
1
- /**
2
- *--------------------------------------------------------------------------
3
- * Module: VGNestable
4
- * Author: Vegas DEV
5
- * License: see 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-nestable {
15
- @include mix-vars('nestable', $nestable-map);
16
-
17
- &-list {
18
- list-style: none;
19
- margin: 0;
20
- padding: 0;
21
- transition: var(--vg-nestable-list-transition);
22
-
23
- &.is-drop-target {
24
- background: var(--vg-nestable-list-drop-target-bg);
25
- outline: var(--vg-nestable-list-drop-target-outline);
26
- outline-offset: var(--vg-nestable-list-drop-target-outline-offset);
27
- }
28
-
29
- &.is-drop-denied {
30
- background: var(--vg-nestable-list-drop-denied-bg);
31
- outline: var(--vg-nestable-list-drop-denied-outline);
32
- outline-offset: var(--vg-nestable-list-drop-denied-outline-offset);
33
- }
34
-
35
- .vg-nestable-list {
36
- margin-top: var(--vg-nestable-list-nested-margin-top);
37
- padding-left: var(--vg-nestable-list-nested-padding-left);
38
- border-left: var(--vg-nestable-list-nested-border-left);
39
- }
40
- }
41
-
42
- &-item {
43
- margin: var(--vg-nestable-item-margin);
44
- position: relative;
45
- transition: var(--vg-nestable-item-transition);
46
-
47
- &.is-dragging {
48
- opacity: var(--vg-nestable-item-dragging-opacity);
49
- }
50
-
51
- &.is-drag-ghost {
52
- opacity: var(--vg-nestable-item-ghost-opacity);
53
- }
54
- }
55
-
56
- &-inner {
57
- display: flex;
58
- align-items: center;
59
- gap: var(--vg-nestable-inner-gap);
60
- min-height: var(--vg-nestable-inner-min-height);
61
- padding: var(--vg-nestable-inner-padding);
62
- border: var(--vg-nestable-inner-border);
63
- background: var(--vg-nestable-inner-bg);
64
- border-radius: var(--vg-nestable-inner-border-radius);
65
- }
66
-
67
- &-handle {
68
- flex: 0 0 auto;
69
- display: inline-flex;
70
- align-items: center;
71
- justify-content: center;
72
- width: var(--vg-nestable-handle-size);
73
- min-height: var(--vg-nestable-handle-size);
74
- padding: 0;
75
- border: var(--vg-nestable-handle-border);
76
- background: var(--vg-nestable-handle-bg);
77
- border-radius: var(--vg-nestable-handle-border-radius);
78
- cursor: var(--vg-nestable-handle-cursor);
79
- user-select: none;
80
-
81
- &:active {
82
- cursor: var(--vg-nestable-handle-active-cursor);
83
- }
84
- }
85
-
86
- &-collapse-toggle {
87
- flex: 0 0 auto;
88
- display: inline-flex;
89
- align-items: center;
90
- justify-content: center;
91
- width: var(--vg-nestable-toggle-size);
92
- min-height: var(--vg-nestable-toggle-size);
93
- padding: 0;
94
- border: var(--vg-nestable-toggle-border);
95
- background: var(--vg-nestable-toggle-bg);
96
- border-radius: var(--vg-nestable-toggle-border-radius);
97
- cursor: pointer;
98
- color: var(--vg-nestable-toggle-color);
99
- font-weight: var(--vg-nestable-toggle-font-weight);
100
- line-height: var(--vg-nestable-toggle-line-height);
101
-
102
- &:hover {
103
- background: var(--vg-nestable-toggle-hover-bg);
104
- }
105
-
106
- svg {
107
- width: var(--vg-nestable-toggle-svg-size);
108
- height: var(--vg-nestable-toggle-svg-size);
109
- transition: var(--vg-nestable-toggle-svg-transition);
110
- transform: var(--vg-nestable-toggle-svg-closed-transform);
111
-
112
- path {
113
- fill: currentColor;
114
- }
115
- }
116
-
117
- &[aria-expanded="true"] {
118
- svg {
119
- transform: var(--vg-nestable-toggle-svg-open-transform);
120
- }
121
- }
122
- }
123
-
124
- &-handle-icon {
125
- flex: 0 0 auto;
126
- display: inline-flex;
127
- align-items: center;
128
- justify-content: center;
129
- min-width: var(--vg-nestable-handle-icon-min-width);
130
- color: var(--vg-nestable-handle-icon-color);
131
- font-weight: var(--vg-nestable-handle-icon-font-weight);
132
- line-height: var(--vg-nestable-handle-icon-line-height);
133
- letter-spacing: var(--vg-nestable-handle-icon-letter-spacing);
134
- }
135
-
136
- &-content {
137
- flex: 1 1 auto;
138
- min-width: 0;
139
- }
140
-
141
- &-placeholder {
142
- list-style: none;
143
- border: var(--vg-nestable-placeholder-border);
144
- background: var(--vg-nestable-placeholder-bg);
145
- border-radius: var(--vg-nestable-placeholder-border-radius);
146
- margin: var(--vg-nestable-placeholder-margin);
147
- min-height: var(--vg-nestable-placeholder-min-height);
148
- }
149
-
150
- &-placeholder-hidden {
151
- border: 0;
152
- background: transparent;
153
- margin: 0;
154
- min-height: 0;
155
- height: 0 !important;
156
- }
157
-
158
- &-drag-element {
159
- opacity: var(--vg-nestable-drag-element-opacity);
160
- transform: var(--vg-nestable-drag-element-transform);
161
- box-shadow: var(--vg-nestable-drag-element-shadow);
162
- }
163
- }
1
+ /**
2
+ *--------------------------------------------------------------------------
3
+ * Module: VGNestable
4
+ * Author: Vegas DEV
5
+ * License: see 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-nestable {
15
+ @include mix-vars('nestable', $nestable-map);
16
+
17
+ &-list {
18
+ list-style: none;
19
+ margin: 0;
20
+ padding: 0;
21
+ transition: var(--vg-nestable-list-transition);
22
+
23
+ &.is-drop-target {
24
+ background: var(--vg-nestable-list-drop-target-bg);
25
+ outline: var(--vg-nestable-list-drop-target-outline);
26
+ outline-offset: var(--vg-nestable-list-drop-target-outline-offset);
27
+ }
28
+
29
+ &.is-drop-denied {
30
+ background: var(--vg-nestable-list-drop-denied-bg);
31
+ outline: var(--vg-nestable-list-drop-denied-outline);
32
+ outline-offset: var(--vg-nestable-list-drop-denied-outline-offset);
33
+ }
34
+
35
+ .vg-nestable-list {
36
+ margin-top: var(--vg-nestable-list-nested-margin-top);
37
+ padding-left: var(--vg-nestable-list-nested-padding-left);
38
+ border-left: var(--vg-nestable-list-nested-border-left);
39
+ }
40
+ }
41
+
42
+ &-item {
43
+ margin: var(--vg-nestable-item-margin);
44
+ position: relative;
45
+ transition: var(--vg-nestable-item-transition);
46
+
47
+ &.is-dragging {
48
+ opacity: var(--vg-nestable-item-dragging-opacity);
49
+ }
50
+
51
+ &.is-drag-ghost {
52
+ opacity: var(--vg-nestable-item-ghost-opacity);
53
+ }
54
+ }
55
+
56
+ &-inner {
57
+ display: flex;
58
+ align-items: center;
59
+ gap: var(--vg-nestable-inner-gap);
60
+ min-height: var(--vg-nestable-inner-min-height);
61
+ padding: var(--vg-nestable-inner-padding);
62
+ border: var(--vg-nestable-inner-border);
63
+ background: var(--vg-nestable-inner-bg);
64
+ border-radius: var(--vg-nestable-inner-border-radius);
65
+ }
66
+
67
+ &-handle {
68
+ flex: 0 0 auto;
69
+ display: inline-flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ width: var(--vg-nestable-handle-size);
73
+ min-height: var(--vg-nestable-handle-size);
74
+ padding: 0;
75
+ border: var(--vg-nestable-handle-border);
76
+ background: var(--vg-nestable-handle-bg);
77
+ border-radius: var(--vg-nestable-handle-border-radius);
78
+ cursor: var(--vg-nestable-handle-cursor);
79
+ user-select: none;
80
+
81
+ &:active {
82
+ cursor: var(--vg-nestable-handle-active-cursor);
83
+ }
84
+ }
85
+
86
+ &-collapse-toggle {
87
+ flex: 0 0 auto;
88
+ display: inline-flex;
89
+ align-items: center;
90
+ justify-content: center;
91
+ width: var(--vg-nestable-toggle-size);
92
+ min-height: var(--vg-nestable-toggle-size);
93
+ padding: 0;
94
+ border: var(--vg-nestable-toggle-border);
95
+ background: var(--vg-nestable-toggle-bg);
96
+ border-radius: var(--vg-nestable-toggle-border-radius);
97
+ cursor: pointer;
98
+ color: var(--vg-nestable-toggle-color);
99
+ font-weight: var(--vg-nestable-toggle-font-weight);
100
+ line-height: var(--vg-nestable-toggle-line-height);
101
+
102
+ &:hover {
103
+ background: var(--vg-nestable-toggle-hover-bg);
104
+ }
105
+
106
+ svg {
107
+ width: var(--vg-nestable-toggle-svg-size);
108
+ height: var(--vg-nestable-toggle-svg-size);
109
+ transition: var(--vg-nestable-toggle-svg-transition);
110
+ transform: var(--vg-nestable-toggle-svg-closed-transform);
111
+
112
+ path {
113
+ fill: currentColor;
114
+ }
115
+ }
116
+
117
+ &[aria-expanded="true"] {
118
+ svg {
119
+ transform: var(--vg-nestable-toggle-svg-open-transform);
120
+ }
121
+ }
122
+ }
123
+
124
+ &-handle-icon {
125
+ flex: 0 0 auto;
126
+ display: inline-flex;
127
+ align-items: center;
128
+ justify-content: center;
129
+ min-width: var(--vg-nestable-handle-icon-min-width);
130
+ color: var(--vg-nestable-handle-icon-color);
131
+ font-weight: var(--vg-nestable-handle-icon-font-weight);
132
+ line-height: var(--vg-nestable-handle-icon-line-height);
133
+ letter-spacing: var(--vg-nestable-handle-icon-letter-spacing);
134
+ }
135
+
136
+ &-content {
137
+ flex: 1 1 auto;
138
+ min-width: 0;
139
+ }
140
+
141
+ &-placeholder {
142
+ list-style: none;
143
+ border: var(--vg-nestable-placeholder-border);
144
+ background: var(--vg-nestable-placeholder-bg);
145
+ border-radius: var(--vg-nestable-placeholder-border-radius);
146
+ margin: var(--vg-nestable-placeholder-margin);
147
+ min-height: var(--vg-nestable-placeholder-min-height);
148
+ }
149
+
150
+ &-placeholder-hidden {
151
+ border: 0;
152
+ background: transparent;
153
+ margin: 0;
154
+ min-height: 0;
155
+ height: 0 !important;
156
+ }
157
+
158
+ &-drag-element {
159
+ opacity: var(--vg-nestable-drag-element-opacity);
160
+ transform: var(--vg-nestable-drag-element-transform);
161
+ box-shadow: var(--vg-nestable-drag-element-shadow);
162
+ }
163
+ }
@@ -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
+ }