vgapp 1.5.7 → 1.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) 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 +1 -1
  5. package/app/modules/vgalert/js/vgalert.js +7 -7
  6. package/app/modules/vgalert/scss/_variables.scss +16 -16
  7. package/app/modules/vgcollapse/scss/_variables.scss +7 -7
  8. package/app/modules/vgcollapse/scss/vgcollapse.scss +5 -5
  9. package/app/modules/vgdropdown/scss/_variables.scss +14 -14
  10. package/app/modules/vgdropdown/scss/vgdropdown.scss +5 -5
  11. package/app/modules/vgfilepreview/js/i18n.js +56 -56
  12. package/app/modules/vgfilepreview/js/renderers/image-modal.js +145 -145
  13. package/app/modules/vgfilepreview/js/renderers/image.js +92 -92
  14. package/app/modules/vgfilepreview/js/renderers/index.js +19 -19
  15. package/app/modules/vgfilepreview/js/renderers/office-modal.js +168 -168
  16. package/app/modules/vgfilepreview/js/renderers/office.js +79 -79
  17. package/app/modules/vgfilepreview/js/renderers/pdf-modal.js +260 -260
  18. package/app/modules/vgfilepreview/js/renderers/pdf.js +76 -76
  19. package/app/modules/vgfilepreview/js/renderers/playlist.js +71 -71
  20. package/app/modules/vgfilepreview/js/renderers/text-modal.js +343 -343
  21. package/app/modules/vgfilepreview/js/renderers/text.js +83 -83
  22. package/app/modules/vgfilepreview/js/renderers/zip-modal.js +522 -522
  23. package/app/modules/vgfilepreview/js/renderers/zip.js +89 -89
  24. package/app/modules/vgfilepreview/readme.md +68 -68
  25. package/app/modules/vgfiles/js/base.js +198 -198
  26. package/app/modules/vgfiles/js/droppable.js +17 -17
  27. package/app/modules/vgfiles/js/render.js +153 -153
  28. package/app/modules/vgfiles/js/sortable.js +52 -52
  29. package/app/modules/vgfiles/js/vgfiles.js +43 -43
  30. package/app/modules/vgfiles/readme.md +123 -123
  31. package/app/modules/vgfiles/scss/_mixins.scss +13 -13
  32. package/app/modules/vgfiles/scss/_variables.scss +10 -10
  33. package/app/modules/vgfiles/scss/vgfiles.scss +28 -28
  34. package/app/modules/vgformsender/js/hideshowpass.js +22 -22
  35. package/app/modules/vgformsender/readme.md +1 -1
  36. package/app/modules/vgformsender/scss/_variables.scss +5 -5
  37. package/app/modules/vgformsender/scss/vgformsender.scss +42 -42
  38. package/app/modules/vglawcookie/js/vglawcookie.js +19 -19
  39. package/app/modules/vglawcookie/scss/_variables.scss +13 -13
  40. package/app/modules/vglawcookie/scss/vglawcookie.scss +5 -5
  41. package/app/modules/vgmodal/js/vgmodal.interaction.js +216 -216
  42. package/app/modules/vgmodal/js/vgmodal.js +9 -9
  43. package/app/modules/vgmodal/js/vgmodal.minimized.js +227 -227
  44. package/app/modules/vgmodal/scss/_variables.scss +17 -17
  45. package/app/modules/vgmodal/scss/vgmodal.scss +77 -77
  46. package/app/modules/vgnav/js/vgnav.js +62 -62
  47. package/app/modules/vgnav/scss/_breakpoints.scss +36 -36
  48. package/app/modules/vgnav/scss/_hamburger.scss +5 -5
  49. package/app/modules/vgnav/scss/_placement.scss +5 -5
  50. package/app/modules/vgnav/scss/_toggle.scss +5 -5
  51. package/app/modules/vgnav/scss/_variables.scss +26 -26
  52. package/app/modules/vgnav/scss/vgnav.scss +41 -41
  53. package/app/modules/vgnestable/README.md +39 -39
  54. package/app/modules/vgrangeslider/js/skins.js +8 -8
  55. package/app/modules/vgrangeslider/js/vgrangeslider.js +29 -29
  56. package/app/modules/vgrangeslider/scss/_variables.scss +55 -55
  57. package/app/modules/vgrangeslider/scss/vgrangeslider.scss +239 -239
  58. package/app/modules/vgrollup/js/vgrollup.js +15 -15
  59. package/app/modules/vgrollup/scss/_variables.scss +15 -15
  60. package/app/modules/vgrollup/scss/vgrollup.scss +6 -6
  61. package/app/modules/vgselect/js/handlers.js +6 -6
  62. package/app/modules/vgselect/js/vgselect.js +167 -123
  63. package/app/modules/vgselect/readme.md +11 -11
  64. package/app/modules/vgselect/scss/_variables.scss +51 -51
  65. package/app/modules/vgselect/scss/vgselect.scss +1 -1
  66. package/app/modules/vgsidebar/js/vgsidebar.js +21 -21
  67. package/app/modules/vgsidebar/scss/_variables.scss +10 -10
  68. package/app/modules/vgsidebar/scss/vgsidebar.scss +5 -5
  69. package/app/modules/vgspy/js/vgspy.js +43 -43
  70. package/app/modules/vgtable/js/_filters.js +10 -6
  71. package/app/modules/vgtable/js/_options.js +16 -16
  72. package/app/modules/vgtable/js/_pagination.js +118 -118
  73. package/app/modules/vgtable/js/_responsive.js +79 -79
  74. package/app/modules/vgtable/js/_sticky-header.js +349 -280
  75. package/app/modules/vgtable/js/vgtable.js +98 -98
  76. package/app/modules/vgtable/scss/_sorting.scss +6 -6
  77. package/app/modules/vgtable/scss/_sticky-header.scss +31 -31
  78. package/app/modules/vgtable/scss/_variables.scss +6 -4
  79. package/app/modules/vgtable/scss/vgtable.scss +8 -4
  80. package/app/modules/vgtabs/js/vgtabs.js +91 -91
  81. package/app/modules/vgtabs/scss/_variables.scss +23 -23
  82. package/app/modules/vgtabs/scss/vgtabs.scss +5 -5
  83. package/app/modules/vgtoast/js/vgtoast.js +4 -4
  84. package/app/modules/vgtoast/scss/_variables.scss +13 -13
  85. package/app/modules/vgtoast/scss/vgtoast.scss +5 -5
  86. package/app/modules/vgtooltip/js/vgtooltip.js +127 -127
  87. package/app/modules/vgtooltip/scss/_variables.scss +10 -10
  88. package/app/modules/vgtooltip/scss/vgtooltip.scss +5 -5
  89. package/app/utils/js/components/audio-metadata.js +240 -240
  90. package/app/utils/js/components/backdrop.js +116 -116
  91. package/app/utils/js/components/file-icon.js +7 -7
  92. package/app/utils/js/components/file-preview.js +304 -304
  93. package/app/utils/js/components/responsive.js +165 -165
  94. package/app/utils/js/components/sanitize.js +150 -150
  95. package/app/utils/js/components/video-metadata.js +140 -140
  96. package/app/utils/scss/_backdrop.scss +5 -5
  97. package/app/utils/scss/_theme-default.scss +12 -12
  98. package/app/utils/scss/_theme.scss +7 -7
  99. package/app/utils/scss/default.scss +9 -9
  100. package/app/utils/scss/functions.scss +21 -21
  101. package/app/utils/scss/index.scss +4 -4
  102. package/app/utils/scss/mixin.scss +16 -16
  103. package/app/utils/scss/variables.scss +147 -147
  104. package/build/vgapp.css +1 -1
  105. package/build/vgapp.css.map +1 -1
  106. package/build/vgapp.js +1 -1
  107. package/build/vgapp.js.map +1 -1
  108. package/index.js +7 -7
  109. package/package.json +1 -1
@@ -1,123 +1,123 @@
1
- # VGFiles
2
-
3
- `VGFiles` — модуль загрузки и управления файлами с поддержкой локального режима и AJAX.
4
-
5
- ## Новые фичи
6
-
7
- - Поддержка `replace` для single-mode (`limits.count = 1`): новый файл заменяет предыдущий без накопления.
8
- - Переименование входящих файлов через `rename: true | (file, index) => string`.
9
- - `smartdrop`: глобальная подсветка dropzone, если на экране только одна видимая зона дропа.
10
- - Расширенный lifecycle для внешних файлов из `data-file`: парсинг `customData`, `src/image`, бинарных метаданных.
11
- - Интеграция с `VGFilePreview` в info-списке (`ui.nameOnly: true`) для inline-аудио, скачивания и предпросмотра по клику.
12
- - Авто-обогащение аудиофайлов метаданными (title/cover) через `extractAudioMetadata`.
13
- - Гибкие confirm-хуки для удаления (`removes.single.confirm`, `removes.all.confirm`) с контрактом `accepted/data`.
14
- - Повторная загрузка упавших файлов через `data-vg-reload="file"` и кнопки retry.
15
- - Проброс `customData` файла в `data-*` атрибуты элементов списка.
16
-
17
- ## Базовые возможности
18
-
19
- - Выбор файлов через `<input type="file">` и drag&drop.
20
- - Лимиты: количество, размер файла, общий размер, MIME-типы.
21
- - Режимы загрузки: `sequential` и `parallel`.
22
- - Автоматическая/ручная инициализация.
23
- - Сортировка загруженных файлов с сохранением порядка на сервере.
24
- - Удаление одного файла и очистка всего списка.
25
-
26
- ## Инициализация
27
-
28
- ```js
29
- const files = new VGFiles(document.querySelector('.vg-files'), {
30
- ajax: true,
31
- smartdrop: true,
32
- rename: true,
33
- replace: true,
34
- uploads: {
35
- route: '/api/upload',
36
- mode: 'sequential'
37
- },
38
- limits: {
39
- count: 10,
40
- sizes: 5,
41
- total: 50
42
- }
43
- });
44
- ```
45
-
46
- ## Ключевые параметры
47
-
48
- - `allowed` — разрешить drag-drop режим и особенности drop-зоны.
49
- - `ajax` — включить серверную загрузку.
50
- - `replace` (`default: true`) — замена файла в single-mode.
51
- - `rename` (`default: false`) — переименование файлов до добавления в список.
52
- - `smartdrop` (`default: false`) — глобальная логика подсказки drop-зоны.
53
- - `prepend` (`default: true`) — добавление новых файлов в начало.
54
- - `uploads.mode` — `'sequential' | 'parallel'`.
55
- - `uploads.maxParallel`, `uploads.maxConcurrent`, `uploads.retryAttempts`, `uploads.retryDelay`.
56
- - `removes.single.confirm`, `removes.all.confirm` — кастомные confirm-обработчики.
57
- - `sortable.enabled`, `sortable.route`, `sortable.handle`, `sortable.lists`.
58
-
59
- ## Внешние (уже загруженные) файлы
60
-
61
- Модуль может стартовать с предзаполненным списком через `data-file` в `<li>`.
62
-
63
- Поддерживаемые поля объекта:
64
-
65
- - `id`, `name`, `size`, `type`, `src` (обязательный набор для валидного внешнего файла)
66
- - `image` (опционально)
67
- - `lastModified` / `last-modified` (опционально)
68
- - любые дополнительные поля -> попадают в `customData`
69
-
70
- `customData` дальше пробрасывается в `data-*` атрибуты элементов файла и может использоваться в шаблонах/интеграциях.
71
-
72
- ## AJAX-события и callbacks
73
-
74
- DOM-события:
75
-
76
- - `vg.files.change`
77
- - `vg.files.upload.start`
78
- - `vg.files.upload.progress`
79
- - `vg.files.upload.complete`
80
- - `vg.files.upload.error`
81
- - `vg.files.upload.allComplete`
82
- - `vg.files.remove`
83
- - `vg.files.reload`
84
-
85
- Callbacks (`params.callbacks`):
86
-
87
- - `onInit`
88
- - `onChange` (`{ files, input, inputFiles }`)
89
- - `onUploadStart`
90
- - `onUploadProgress`
91
- - `onUploadComplete`
92
- - `onUploadError`
93
- - `onUploadAllComplete`
94
- - `onRemoveFile`
95
- - `onClear`
96
- - `onReload`
97
-
98
- ## Удаление с кастомным confirm
99
-
100
- Если передан `removes.single.confirm` или `removes.all.confirm`, модуль вызывает вашу функцию вместо стандартного `VGAlert`.
101
-
102
- Контракт результата:
103
-
104
- - `true` или `{ accepted: true }` — подтвердить.
105
- - `false` или `{ accepted: false }` — отменить.
106
- - `{ accepted: true, data }` — подтвердить и использовать готовый ответ удаления (без дополнительного AJAX-запроса).
107
-
108
- ## Статусы файлов
109
-
110
- - `pending` — ожидает загрузки.
111
- - `loading` — идет загрузка.
112
- - `completed` — успешно загружен.
113
- - `failing` — ошибка загрузки (доступен reload).
114
-
115
- ## Методы API
116
-
117
- - `upload(file)`
118
- - `uploadAll(files)`
119
- - `reload(button)`
120
- - `removeFile(button)`
121
- - `clear(resetInput, uiOnly)`
122
- - `dispose()`
123
-
1
+ # VGFiles
2
+
3
+ `VGFiles` — модуль загрузки и управления файлами с поддержкой локального режима и AJAX.
4
+
5
+ ## Новые фичи
6
+
7
+ - Поддержка `replace` для single-mode (`limits.count = 1`): новый файл заменяет предыдущий без накопления.
8
+ - Переименование входящих файлов через `rename: true | (file, index) => string`.
9
+ - `smartdrop`: глобальная подсветка dropzone, если на экране только одна видимая зона дропа.
10
+ - Расширенный lifecycle для внешних файлов из `data-file`: парсинг `customData`, `src/image`, бинарных метаданных.
11
+ - Интеграция с `VGFilePreview` в info-списке (`ui.nameOnly: true`) для inline-аудио, скачивания и предпросмотра по клику.
12
+ - Авто-обогащение аудиофайлов метаданными (title/cover) через `extractAudioMetadata`.
13
+ - Гибкие confirm-хуки для удаления (`removes.single.confirm`, `removes.all.confirm`) с контрактом `accepted/data`.
14
+ - Повторная загрузка упавших файлов через `data-vg-reload="file"` и кнопки retry.
15
+ - Проброс `customData` файла в `data-*` атрибуты элементов списка.
16
+
17
+ ## Базовые возможности
18
+
19
+ - Выбор файлов через `<input type="file">` и drag&drop.
20
+ - Лимиты: количество, размер файла, общий размер, MIME-типы.
21
+ - Режимы загрузки: `sequential` и `parallel`.
22
+ - Автоматическая/ручная инициализация.
23
+ - Сортировка загруженных файлов с сохранением порядка на сервере.
24
+ - Удаление одного файла и очистка всего списка.
25
+
26
+ ## Инициализация
27
+
28
+ ```js
29
+ const files = new VGFiles(document.querySelector('.vg-files'), {
30
+ ajax: true,
31
+ smartdrop: true,
32
+ rename: true,
33
+ replace: true,
34
+ uploads: {
35
+ route: '/api/upload',
36
+ mode: 'sequential'
37
+ },
38
+ limits: {
39
+ count: 10,
40
+ sizes: 5,
41
+ total: 50
42
+ }
43
+ });
44
+ ```
45
+
46
+ ## Ключевые параметры
47
+
48
+ - `allowed` — разрешить drag-drop режим и особенности drop-зоны.
49
+ - `ajax` — включить серверную загрузку.
50
+ - `replace` (`default: true`) — замена файла в single-mode.
51
+ - `rename` (`default: false`) — переименование файлов до добавления в список.
52
+ - `smartdrop` (`default: false`) — глобальная логика подсказки drop-зоны.
53
+ - `prepend` (`default: true`) — добавление новых файлов в начало.
54
+ - `uploads.mode` — `'sequential' | 'parallel'`.
55
+ - `uploads.maxParallel`, `uploads.maxConcurrent`, `uploads.retryAttempts`, `uploads.retryDelay`.
56
+ - `removes.single.confirm`, `removes.all.confirm` — кастомные confirm-обработчики.
57
+ - `sortable.enabled`, `sortable.route`, `sortable.handle`, `sortable.lists`.
58
+
59
+ ## Внешние (уже загруженные) файлы
60
+
61
+ Модуль может стартовать с предзаполненным списком через `data-file` в `<li>`.
62
+
63
+ Поддерживаемые поля объекта:
64
+
65
+ - `id`, `name`, `size`, `type`, `src` (обязательный набор для валидного внешнего файла)
66
+ - `image` (опционально)
67
+ - `lastModified` / `last-modified` (опционально)
68
+ - любые дополнительные поля -> попадают в `customData`
69
+
70
+ `customData` дальше пробрасывается в `data-*` атрибуты элементов файла и может использоваться в шаблонах/интеграциях.
71
+
72
+ ## AJAX-события и callbacks
73
+
74
+ DOM-события:
75
+
76
+ - `vg.files.change`
77
+ - `vg.files.upload.start`
78
+ - `vg.files.upload.progress`
79
+ - `vg.files.upload.complete`
80
+ - `vg.files.upload.error`
81
+ - `vg.files.upload.allComplete`
82
+ - `vg.files.remove`
83
+ - `vg.files.reload`
84
+
85
+ Callbacks (`params.callbacks`):
86
+
87
+ - `onInit`
88
+ - `onChange` (`{ files, input, inputFiles }`)
89
+ - `onUploadStart`
90
+ - `onUploadProgress`
91
+ - `onUploadComplete`
92
+ - `onUploadError`
93
+ - `onUploadAllComplete`
94
+ - `onRemoveFile`
95
+ - `onClear`
96
+ - `onReload`
97
+
98
+ ## Удаление с кастомным confirm
99
+
100
+ Если передан `removes.single.confirm` или `removes.all.confirm`, модуль вызывает вашу функцию вместо стандартного `VGAlert`.
101
+
102
+ Контракт результата:
103
+
104
+ - `true` или `{ accepted: true }` — подтвердить.
105
+ - `false` или `{ accepted: false }` — отменить.
106
+ - `{ accepted: true, data }` — подтвердить и использовать готовый ответ удаления (без дополнительного AJAX-запроса).
107
+
108
+ ## Статусы файлов
109
+
110
+ - `pending` — ожидает загрузки.
111
+ - `loading` — идет загрузка.
112
+ - `completed` — успешно загружен.
113
+ - `failing` — ошибка загрузки (доступен reload).
114
+
115
+ ## Методы API
116
+
117
+ - `upload(file)`
118
+ - `uploadAll(files)`
119
+ - `reload(button)`
120
+ - `removeFile(button)`
121
+ - `clear(resetInput, uiOnly)`
122
+ - `dispose()`
123
+
@@ -23,19 +23,19 @@
23
23
  }
24
24
  }
25
25
 
26
- @mixin vgfiles-state() {
27
- &.hide-custom-buttons-on-upload-state {
28
- &.pending,
29
- &.loading,
30
- &.failing {
31
- .file-actions,
32
- .file-custom > :not(.file-remove):not(.file-info) {
33
- display: none;
34
- }
35
- }
36
- }
37
-
38
- &.pending {
26
+ @mixin vgfiles-state() {
27
+ &.hide-custom-buttons-on-upload-state {
28
+ &.pending,
29
+ &.loading,
30
+ &.failing {
31
+ .file-actions,
32
+ .file-custom > :not(.file-remove):not(.file-info) {
33
+ display: none;
34
+ }
35
+ }
36
+ }
37
+
38
+ &.pending {
39
39
  > * {
40
40
  opacity: .32;
41
41
  pointer-events: none;
@@ -9,16 +9,16 @@ $files-map: (
9
9
  label-padding: 8px 24px,
10
10
  label-padding-icon: 8px 16px,
11
11
 
12
- // errors
13
- errors-padding-y: 10px,
14
- errors-padding-x: 12px,
15
- errors-font-size: 16px,
16
- errors-gap: 4px,
17
- errors-margin-bottom: 8px,
18
- errors-bg: var(--vg-danger-subtle-bg, rgba(255, 42, 44, .06)),
19
- errors-border-color: var(--vg-danger-color, var(--vg-danger, #ff2a2c)),
20
- errors-border-width: 3px,
21
- errors-border-radius: 6px,
12
+ // errors
13
+ errors-padding-y: 10px,
14
+ errors-padding-x: 12px,
15
+ errors-font-size: 16px,
16
+ errors-gap: 4px,
17
+ errors-margin-bottom: 8px,
18
+ errors-bg: var(--vg-danger-subtle-bg, rgba(255, 42, 44, .06)),
19
+ errors-border-color: var(--vg-danger-color, var(--vg-danger, #ff2a2c)),
20
+ errors-border-width: 3px,
21
+ errors-border-radius: 6px,
22
22
 
23
23
  // drop zone
24
24
  drop-bg: var(--vg-secondary-bg, #{vg.$surface-muted-bg}),
@@ -61,18 +61,18 @@
61
61
  }
62
62
  }
63
63
 
64
- &-errors {
65
- display: grid;
66
- gap: var(--vg-files-errors-gap);
67
- padding: var(--vg-files-errors-padding-y) var(--vg-files-errors-padding-x);
68
- margin-bottom: var(--vg-files-errors-margin-bottom);
69
- border-left: var(--vg-files-errors-border-width) solid var(--vg-files-errors-border-color);
70
- border-radius: var(--vg-files-errors-border-radius);
71
- background: var(--vg-files-errors-bg);
72
-
73
- span {
74
- font-size: var(--vg-files-errors-font-size);
75
- color: var(--vg-danger-color, var(--vg-danger, #ff2a2c));
64
+ &-errors {
65
+ display: grid;
66
+ gap: var(--vg-files-errors-gap);
67
+ padding: var(--vg-files-errors-padding-y) var(--vg-files-errors-padding-x);
68
+ margin-bottom: var(--vg-files-errors-margin-bottom);
69
+ border-left: var(--vg-files-errors-border-width) solid var(--vg-files-errors-border-color);
70
+ border-radius: var(--vg-files-errors-border-radius);
71
+ background: var(--vg-files-errors-bg);
72
+
73
+ span {
74
+ font-size: var(--vg-files-errors-font-size);
75
+ color: var(--vg-danger-color, var(--vg-danger, #ff2a2c));
76
76
  display: block;
77
77
  overflow: hidden;
78
78
  text-overflow: ellipsis;
@@ -523,18 +523,18 @@
523
523
  }
524
524
  }
525
525
 
526
- .file-failing-actions {
526
+ .file-failing-actions {
527
527
  display: inline-flex;
528
528
  align-items: center;
529
529
  gap: var(--vg-files-info-failing-actions-gap);
530
- }
531
-
532
- &-info--list {
533
- .file.validation-error {
534
- box-shadow: inset 0 0 0 2px var(--vg-danger-color, var(--vg-danger, #ff2a2c));
535
- }
536
-
537
- .file.failing {
530
+ }
531
+
532
+ &-info--list {
533
+ .file.validation-error {
534
+ box-shadow: inset 0 0 0 2px var(--vg-danger-color, var(--vg-danger, #ff2a2c));
535
+ }
536
+
537
+ .file.failing {
538
538
  .file-remove {
539
539
  margin-left: var(--vg-files-info-failing-actions-margin-start);
540
540
  }
@@ -644,7 +644,7 @@
644
644
  }
645
645
  }
646
646
 
647
- &--list {
647
+ &--list {
648
648
  display: flex;
649
649
  align-items: center;
650
650
  gap: var(--vg-files-drop-list-gap);
@@ -656,7 +656,7 @@
656
656
  border-radius: var(--vg-files-drop-radius);
657
657
  overflow: hidden;
658
658
 
659
- .file {
659
+ .file {
660
660
  --vg-button-color: var(--vg-text-color, var(--vg-body-color, #000000));
661
661
  border-radius: var(--vg-files-drop-file-radius);
662
662
  position: relative;
@@ -665,11 +665,11 @@
665
665
  height: var(--vg-files-drop-file-height);
666
666
 
667
667
  @include files.vgfiles-sortable();
668
- @include files.vgfiles-state();
669
-
670
- &.validation-error {
671
- box-shadow: inset 0 0 0 2px var(--vg-danger-color, var(--vg-danger, #ff2a2c));
672
- }
668
+ @include files.vgfiles-state();
669
+
670
+ &.validation-error {
671
+ box-shadow: inset 0 0 0 2px var(--vg-danger-color, var(--vg-danger, #ff2a2c));
672
+ }
673
673
 
674
674
  .file-image {
675
675
  width: 100%;
@@ -12,18 +12,18 @@ const NAME = 'hideshowpass';
12
12
  const NAME_KEY = 'vg.hideshowpass';
13
13
  const SELECTOR_DATA_TOGGLE= '[data-vg-toggle="pass"]';
14
14
 
15
- const CLASS_NAME_SHOW = 'show';
16
- const CLASS_NAME_FOCUS_OFFSET = 'vg-form-sender--content-pass-focus-offset';
15
+ const CLASS_NAME_SHOW = 'show';
16
+ const CLASS_NAME_FOCUS_OFFSET = 'vg-form-sender--content-pass-focus-offset';
17
17
 
18
18
  const EVENT_KEY_CLICK_DATA_API = `click.${NAME_KEY}.data.api`;
19
19
 
20
20
  class VGHideShowPass extends BaseModule{
21
- constructor(el, params = {}) {
22
- super(el, params);
23
-
24
- this._params = this._getParams(el, mergeDeepObject({
25
- parentClass: 'vg-form-sender--content-pass'
26
- }, params));
21
+ constructor(el, params = {}) {
22
+ super(el, params);
23
+
24
+ this._params = this._getParams(el, mergeDeepObject({
25
+ parentClass: 'vg-form-sender--content-pass'
26
+ }, params));
27
27
  }
28
28
 
29
29
  static get NAME() {
@@ -63,19 +63,19 @@ class VGHideShowPass extends BaseModule{
63
63
  instance.build(false);
64
64
  }
65
65
 
66
- build(isShow = false) {
67
- let classes = this._params.classes.join(' '), elm = '';
68
- const HTML = Html('string');
69
- if (this._element.parentElement && this._params.parentClass) {
70
- this._element.parentElement.classList.add(this._params.parentClass);
71
- this._element.parentElement.classList.toggle(
72
- CLASS_NAME_FOCUS_OFFSET,
73
- this._params.focus === true
74
- );
75
- }
76
-
77
- if (!isShow) {
78
- elm = HTML.component('eye', {class: classes});
66
+ build(isShow = false) {
67
+ let classes = this._params.classes.join(' '), elm = '';
68
+ const HTML = Html('string');
69
+ if (this._element.parentElement && this._params.parentClass) {
70
+ this._element.parentElement.classList.add(this._params.parentClass);
71
+ this._element.parentElement.classList.toggle(
72
+ CLASS_NAME_FOCUS_OFFSET,
73
+ this._params.focus === true
74
+ );
75
+ }
76
+
77
+ if (!isShow) {
78
+ elm = HTML.component('eye', {class: classes});
79
79
  } else {
80
80
  elm = HTML.component('eye', {class: classes, type: 'hide'});
81
81
  }
@@ -105,4 +105,4 @@ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, functi
105
105
  instance.toggle(this);
106
106
  });
107
107
 
108
- export default VGHideShowPass
108
+ export default VGHideShowPass
@@ -78,7 +78,7 @@ VGFormSender.init(document.getElementById('contactForm'), {
78
78
  | `response.enabled` | `boolean` | `false` | Нативная обработка ответа (без AJAX) |
79
79
  | `submit` | `boolean` | `false` | Отправлять нативно (без AJAX) |
80
80
  | `fields` | `Array` | `[]` | Доп. данные для отправки |
81
- | `pass.focus` | `boolean` | `false` | Увеличивать правый отступ поля и сдвигать иконку глаза при фокусе |
81
+ | `pass.focus` | `boolean` | `false` | Увеличивать правый отступ поля и сдвигать иконку глаза при фокусе |
82
82
  | `alert.enabled` | `boolean` | `true` | Показывать уведомления |
83
83
  | `alert.type` | `'modal' \| 'collapse'` | `'modal'` | Тип уведомления |
84
84
  | `alert.errors` | `boolean` | `true` | Показывать детали ошибок |
@@ -1,5 +1,5 @@
1
- @use "../../../utils/scss" as vg;
2
-
3
- $form-sender-map: (
4
- 'eye-color': var(--vg-text-color, #{vg.$color})
5
- ) !default;
1
+ @use "../../../utils/scss" as vg;
2
+
3
+ $form-sender-map: (
4
+ 'eye-color': var(--vg-text-color, #{vg.$color})
5
+ ) !default;
@@ -6,12 +6,12 @@
6
6
  *--------------------------------------------------------------------------
7
7
  **/
8
8
 
9
- @forward "variables";
10
- @use "../../../utils/scss" as vg;
11
- @use "variables" as vars;
9
+ @forward "variables";
10
+ @use "../../../utils/scss" as vg;
11
+ @use "variables" as vars;
12
12
 
13
13
  .vg-form-sender {
14
- @include vg.mix-vars('form-sender', vars.$form-sender-map);
14
+ @include vg.mix-vars('form-sender', vars.$form-sender-map);
15
15
 
16
16
  &-modal {
17
17
  .vg-modal-content {
@@ -19,21 +19,21 @@
19
19
  }
20
20
  }
21
21
 
22
- &--content {
23
- position: relative;
24
-
25
- &-pass-focus-offset {
26
- &:focus-within {
27
- input {
28
- padding-right: 5rem;
29
- }
30
-
31
- .vg-form-sender--hide-show-pass {
32
- right: 44px;
33
- }
34
- }
35
- }
36
- }
22
+ &--content {
23
+ position: relative;
24
+
25
+ &-pass-focus-offset {
26
+ &:focus-within {
27
+ input {
28
+ padding-right: 5rem;
29
+ }
30
+
31
+ .vg-form-sender--hide-show-pass {
32
+ right: 44px;
33
+ }
34
+ }
35
+ }
36
+ }
37
37
 
38
38
  &--hide-show-pass {
39
39
  position: absolute;
@@ -42,7 +42,7 @@
42
42
  width: 22px;
43
43
  height: 22px;
44
44
  cursor: pointer;
45
- transition: vg.$transition-base;
45
+ transition: vg.$transition-base;
46
46
 
47
47
  svg {
48
48
  path {
@@ -51,35 +51,35 @@
51
51
  }
52
52
  }
53
53
 
54
- &.was-validated {
55
- .vg-form-sender--hide-show-pass {
56
- right: 34px;
57
- }
58
-
59
- .vg-form-sender--content-pass-focus-offset {
60
- &:focus-within {
61
- input {
62
- padding-right: 6.25rem;
63
- }
64
-
65
- .vg-form-sender--hide-show-pass {
66
- right: 64px;
67
- }
68
- }
69
- }
70
- }
71
- }
54
+ &.was-validated {
55
+ .vg-form-sender--hide-show-pass {
56
+ right: 34px;
57
+ }
58
+
59
+ .vg-form-sender--content-pass-focus-offset {
60
+ &:focus-within {
61
+ input {
62
+ padding-right: 6.25rem;
63
+ }
64
+
65
+ .vg-form-sender--hide-show-pass {
66
+ right: 64px;
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
72
 
73
73
  .vg-form-sender-alert {
74
- @include vg.mix-alert-color-mode($class: vg-form-sender-alert);
74
+ @include vg.mix-alert-color-mode($class: vg-form-sender-alert);
75
75
  background-color: var(--vg-form-sender-alert-background-color);
76
76
  border: 1px solid var(--vg-form-sender-alert-border-color) ;
77
- border-radius: var(--vg-border-radius, #{vg.$border-radius});
77
+ border-radius: var(--vg-border-radius, #{vg.$border-radius});
78
78
 
79
79
  .vg-btn-close {
80
80
  svg {
81
81
  path {
82
- fill: var(--vg-form-sender-alert-close);
82
+ fill: var(--vg-form-sender-alert-close);
83
83
  }
84
84
  }
85
85
  }
@@ -125,4 +125,4 @@
125
125
  .vg-form-sender-alert-content--text {
126
126
  font-size: 1.25rem;
127
127
  color: var(--vg-form-sender-alert-color);
128
- }
128
+ }
@@ -146,15 +146,15 @@ class VGLawCookie extends BaseModule {
146
146
  }
147
147
 
148
148
  /**
149
- * Сбрасывает согласие, не затрагивая остальные данные хранилища
150
- */
151
- static reset() {
152
- const { name } = VGLawCookie.getDefaultParams().cookie;
153
-
154
- Cookies.remove(name);
155
- localStorage.removeItem(name);
156
- location.reload();
157
- }
149
+ * Сбрасывает согласие, не затрагивая остальные данные хранилища
150
+ */
151
+ static reset() {
152
+ const { name } = VGLawCookie.getDefaultParams().cookie;
153
+
154
+ Cookies.remove(name);
155
+ localStorage.removeItem(name);
156
+ location.reload();
157
+ }
158
158
 
159
159
  /**
160
160
  * Возвращает дефолтные параметры (для доступа без инстанса)
@@ -165,13 +165,13 @@ class VGLawCookie extends BaseModule {
165
165
  }, {});
166
166
  }
167
167
 
168
- dispose() {
169
- const { name } = this._params.cookie;
170
-
171
- Cookies.remove(name);
172
- localStorage.removeItem(name);
173
- super.dispose();
174
- }
168
+ dispose() {
169
+ const { name } = this._params.cookie;
170
+
171
+ Cookies.remove(name);
172
+ localStorage.removeItem(name);
173
+ super.dispose();
174
+ }
175
175
 
176
176
  /**
177
177
  * Инициализация модуля
@@ -216,7 +216,7 @@ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CLEAR,
216
216
 
217
217
  const instance = VGLawCookie.getOrCreateInstance(element);
218
218
  instance.dispose();
219
- VGLawCookie.reset(); // Сброс согласия
220
- });
219
+ VGLawCookie.reset(); // Сброс согласия
220
+ });
221
221
 
222
- export default VGLawCookie;
222
+ export default VGLawCookie;