vgapp 1.2.1 → 1.2.3
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.
- package/CHANGELOG.md +14 -1
- package/README.md +48 -48
- package/app/langs/en/buttons.json +17 -17
- package/app/langs/en/messages.json +36 -36
- package/app/langs/ru/buttons.json +17 -17
- package/app/langs/ru/messages.json +36 -36
- package/app/modules/vgfilepreview/js/i18n.js +56 -56
- package/app/modules/vgfilepreview/js/renderers/image-modal.js +145 -145
- package/app/modules/vgfilepreview/js/renderers/image.js +92 -92
- package/app/modules/vgfilepreview/js/renderers/index.js +19 -19
- package/app/modules/vgfilepreview/js/renderers/office-modal.js +168 -168
- package/app/modules/vgfilepreview/js/renderers/office.js +79 -79
- package/app/modules/vgfilepreview/js/renderers/pdf-modal.js +260 -260
- package/app/modules/vgfilepreview/js/renderers/pdf.js +76 -76
- package/app/modules/vgfilepreview/js/renderers/playlist.js +71 -71
- package/app/modules/vgfilepreview/js/renderers/text-modal.js +343 -343
- package/app/modules/vgfilepreview/js/renderers/text.js +83 -83
- package/app/modules/vgfilepreview/js/renderers/video-modal.js +272 -272
- package/app/modules/vgfilepreview/js/renderers/video.js +80 -80
- package/app/modules/vgfilepreview/js/renderers/zip-modal.js +522 -522
- package/app/modules/vgfilepreview/js/renderers/zip.js +89 -89
- package/app/modules/vgfilepreview/js/vgfilepreview.js +7 -7
- package/app/modules/vgfilepreview/readme.md +68 -68
- package/app/modules/vgfilepreview/scss/_variables.scss +113 -113
- package/app/modules/vgfilepreview/scss/vgfilepreview.scss +464 -464
- package/app/modules/vgfiles/js/base.js +26 -26
- package/app/modules/vgfiles/js/droppable.js +260 -260
- package/app/modules/vgfiles/js/render.js +153 -153
- package/app/modules/vgfiles/js/vgfiles.js +79 -45
- package/app/modules/vgfiles/readme.md +123 -123
- package/app/modules/vgfiles/scss/_variables.scss +18 -18
- package/app/modules/vgfiles/scss/vgfiles.scss +148 -148
- package/app/modules/vgformsender/js/hideshowpass.js +7 -2
- package/app/modules/vgformsender/js/vgformsender.js +90 -31
- package/app/modules/vgformsender/scss/vgformsender.scss +25 -1
- package/app/modules/vgmodal/js/vgmodal.drag.js +332 -332
- package/app/modules/vgmodal/js/vgmodal.js +1 -1
- package/app/modules/vgmodal/js/vgmodal.resize.js +435 -435
- package/app/modules/vgnav/js/vgnav.js +135 -135
- package/app/modules/vgnav/readme.md +67 -67
- package/app/modules/vgnestable/README.md +307 -307
- package/app/modules/vgnestable/scss/_variables.scss +60 -60
- package/app/modules/vgnestable/scss/vgnestable.scss +163 -163
- package/app/modules/vgselect/js/vgselect.js +39 -39
- package/app/modules/vgselect/scss/vgselect.scss +22 -22
- package/app/modules/vgspy/readme.md +28 -28
- package/app/modules/vgtoast/js/vgtoast.js +166 -135
- package/app/modules/vgtoast/readme.md +18 -18
- package/app/modules/vgtoast/scss/vgtoast.scss +48 -48
- package/app/utils/js/components/audio-metadata.js +240 -240
- package/app/utils/js/components/file-icon.js +109 -109
- package/app/utils/js/components/file-preview.js +304 -304
- package/app/utils/js/components/sanitize.js +150 -150
- package/app/utils/js/components/video-metadata.js +140 -140
- package/build/vgapp.css +1 -1
- package/build/vgapp.css.map +1 -1
- package/build/vgapp.js.map +1 -1
- package/index.scss +9 -9
- 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
|
+
|
|
@@ -70,27 +70,27 @@ $files-map: (
|
|
|
70
70
|
info-radius: 4px,
|
|
71
71
|
info-list-max-height: 360px,
|
|
72
72
|
|
|
73
|
-
info-gap: 8px,
|
|
74
|
-
info-padding: 8px,
|
|
75
|
-
info-border-bottom-color: var(--vg-secondary-bg),
|
|
76
|
-
info-hover-bg: rgba(var(--vg-secondary-bg-rgb), .4),
|
|
77
|
-
info-audio-progress-track: rgba(var(--vg-secondary-bg-rgb), .3),
|
|
78
|
-
info-audio-progress-fill: #000,
|
|
79
|
-
info-audio-progress-opacity: .33,
|
|
80
|
-
info-audio-row-min-height: 64px,
|
|
81
|
-
info-audio-image-size: 48px,
|
|
82
|
-
|
|
83
|
-
info-image-radius: 4px,
|
|
73
|
+
info-gap: 8px,
|
|
74
|
+
info-padding: 8px,
|
|
75
|
+
info-border-bottom-color: var(--vg-secondary-bg),
|
|
76
|
+
info-hover-bg: rgba(var(--vg-secondary-bg-rgb), .4),
|
|
77
|
+
info-audio-progress-track: rgba(var(--vg-secondary-bg-rgb), .3),
|
|
78
|
+
info-audio-progress-fill: #000,
|
|
79
|
+
info-audio-progress-opacity: .33,
|
|
80
|
+
info-audio-row-min-height: 64px,
|
|
81
|
+
info-audio-image-size: 48px,
|
|
82
|
+
|
|
83
|
+
info-image-radius: 4px,
|
|
84
84
|
info-iteration-font-size: 16px,
|
|
85
85
|
info-name-font-size: 16px,
|
|
86
86
|
info-size-font-size: 14px,
|
|
87
87
|
|
|
88
|
-
info-remove-icon-size: 16px,
|
|
89
|
-
info-row-remove-size: 22px,
|
|
90
|
-
info-row-remove-icon-size: 10px,
|
|
91
|
-
info-failing-actions-gap: 6px,
|
|
92
|
-
info-failing-actions-margin-start: 8px,
|
|
93
|
-
drop-failing-actions-gap: 6px,
|
|
88
|
+
info-remove-icon-size: 16px,
|
|
89
|
+
info-row-remove-size: 22px,
|
|
90
|
+
info-row-remove-icon-size: 10px,
|
|
91
|
+
info-failing-actions-gap: 6px,
|
|
92
|
+
info-failing-actions-margin-start: 8px,
|
|
93
|
+
drop-failing-actions-gap: 6px,
|
|
94
94
|
|
|
95
95
|
// legacy (оставлено для совместимости со старым API темы)
|
|
96
96
|
info-mb: 10px,
|
|
@@ -112,4 +112,4 @@ $files-map: (
|
|
|
112
112
|
info-list-span-me: 6px,
|
|
113
113
|
info-list-button-fs: 12px,
|
|
114
114
|
info-list-button-color: #999999,
|
|
115
|
-
);
|
|
115
|
+
);
|
|
@@ -261,15 +261,15 @@
|
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
263
|
|
|
264
|
-
.file {
|
|
265
|
-
--vg-button-color: var(--vg-secondary);
|
|
266
|
-
display: flex;
|
|
267
|
-
align-items: center;
|
|
268
|
-
gap: var(--vg-files-info-gap);
|
|
269
|
-
padding: var(--vg-files-info-padding);
|
|
270
|
-
border-bottom: 1px solid var(--vg-files-info-border-bottom-color);
|
|
271
|
-
transition: all .2s ease-in-out;
|
|
272
|
-
position: relative;
|
|
264
|
+
.file {
|
|
265
|
+
--vg-button-color: var(--vg-secondary);
|
|
266
|
+
display: flex;
|
|
267
|
+
align-items: center;
|
|
268
|
+
gap: var(--vg-files-info-gap);
|
|
269
|
+
padding: var(--vg-files-info-padding);
|
|
270
|
+
border-bottom: 1px solid var(--vg-files-info-border-bottom-color);
|
|
271
|
+
transition: all .2s ease-in-out;
|
|
272
|
+
position: relative;
|
|
273
273
|
|
|
274
274
|
@include vgfiles-sortable();
|
|
275
275
|
@include vgfiles-state();
|
|
@@ -278,45 +278,45 @@
|
|
|
278
278
|
border-bottom: none;
|
|
279
279
|
}
|
|
280
280
|
|
|
281
|
-
&:hover {
|
|
282
|
-
background-color: var(--vg-files-info-hover-bg);
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
&[data-vg-filepreview-renderer="audio"] {
|
|
286
|
-
--vg-filepreview-audio-inline-progress: 0%;
|
|
287
|
-
position: relative;
|
|
288
|
-
overflow: hidden;
|
|
289
|
-
isolation: isolate;
|
|
290
|
-
min-height: var(--vg-files-info-audio-row-min-height);
|
|
291
|
-
background-color: var(--vg-files-info-audio-progress-track);
|
|
292
|
-
|
|
293
|
-
&::before {
|
|
294
|
-
content: '';
|
|
295
|
-
position: absolute;
|
|
296
|
-
inset: 0 auto 0 0;
|
|
297
|
-
width: var(--vg-filepreview-audio-inline-progress);
|
|
298
|
-
background: var(--vg-files-info-audio-progress-fill);
|
|
299
|
-
opacity: var(--vg-files-info-audio-progress-opacity);
|
|
300
|
-
pointer-events: none;
|
|
301
|
-
z-index: 0;
|
|
302
|
-
transition: width .12s linear;
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
> * {
|
|
306
|
-
position: relative;
|
|
307
|
-
z-index: 1;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
.file-image {
|
|
311
|
-
flex: 0 0 var(--vg-files-info-audio-image-size);
|
|
312
|
-
width: var(--vg-files-info-audio-image-size);
|
|
313
|
-
height: var(--vg-files-info-audio-image-size);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
> * {
|
|
318
|
-
transition: all .2s ease-in-out;
|
|
319
|
-
}
|
|
281
|
+
&:hover {
|
|
282
|
+
background-color: var(--vg-files-info-hover-bg);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
&[data-vg-filepreview-renderer="audio"] {
|
|
286
|
+
--vg-filepreview-audio-inline-progress: 0%;
|
|
287
|
+
position: relative;
|
|
288
|
+
overflow: hidden;
|
|
289
|
+
isolation: isolate;
|
|
290
|
+
min-height: var(--vg-files-info-audio-row-min-height);
|
|
291
|
+
background-color: var(--vg-files-info-audio-progress-track);
|
|
292
|
+
|
|
293
|
+
&::before {
|
|
294
|
+
content: '';
|
|
295
|
+
position: absolute;
|
|
296
|
+
inset: 0 auto 0 0;
|
|
297
|
+
width: var(--vg-filepreview-audio-inline-progress);
|
|
298
|
+
background: var(--vg-files-info-audio-progress-fill);
|
|
299
|
+
opacity: var(--vg-files-info-audio-progress-opacity);
|
|
300
|
+
pointer-events: none;
|
|
301
|
+
z-index: 0;
|
|
302
|
+
transition: width .12s linear;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
> * {
|
|
306
|
+
position: relative;
|
|
307
|
+
z-index: 1;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.file-image {
|
|
311
|
+
flex: 0 0 var(--vg-files-info-audio-image-size);
|
|
312
|
+
width: var(--vg-files-info-audio-image-size);
|
|
313
|
+
height: var(--vg-files-info-audio-image-size);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
> * {
|
|
318
|
+
transition: all .2s ease-in-out;
|
|
319
|
+
}
|
|
320
320
|
|
|
321
321
|
&-image {
|
|
322
322
|
flex: 0 0 var(--vg-files-image-width);
|
|
@@ -362,63 +362,63 @@
|
|
|
362
362
|
display: none;
|
|
363
363
|
}
|
|
364
364
|
|
|
365
|
-
.name {
|
|
366
|
-
display: block;
|
|
367
|
-
overflow: hidden;
|
|
368
|
-
text-overflow: ellipsis;
|
|
369
|
-
white-space: nowrap;
|
|
370
|
-
font-size: var(--vg-files-info-name-font-size);
|
|
371
|
-
|
|
372
|
-
&.vg-filepreview-audio-inline {
|
|
373
|
-
display: inline-flex;
|
|
374
|
-
gap: var(--vg-filepreview-audio-inline-gap);
|
|
375
|
-
align-items: center;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
&.is-preview-action {
|
|
379
|
-
cursor: pointer;
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
.size {
|
|
384
|
-
color: var(--vg-secondary);
|
|
385
|
-
font-size: var(--vg-files-info-size-font-size);
|
|
386
|
-
white-space: nowrap;
|
|
387
|
-
margin-left: auto;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
.download {
|
|
391
|
-
margin-left: 8px;
|
|
392
|
-
|
|
393
|
-
.vg-filepreview-download-trigger {
|
|
394
|
-
padding: 0;
|
|
395
|
-
background: transparent;
|
|
396
|
-
color: var(--vg-secondary);
|
|
397
|
-
border-radius: 0;
|
|
398
|
-
font-size: var(--vg-files-info-size-font-size);
|
|
399
|
-
font-weight: 500;
|
|
400
|
-
gap: 4px;
|
|
401
|
-
|
|
402
|
-
&:hover {
|
|
403
|
-
color: var(--vg-body-color);
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
&__icon svg {
|
|
407
|
-
width: 14px;
|
|
408
|
-
height: 14px;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
&__text {
|
|
412
|
-
display: none;
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
&-remove {
|
|
419
|
-
flex: 0 0 var(--vg-files-remove-width);
|
|
420
|
-
width: var(--vg-files-remove-width);
|
|
421
|
-
margin-left: auto;
|
|
365
|
+
.name {
|
|
366
|
+
display: block;
|
|
367
|
+
overflow: hidden;
|
|
368
|
+
text-overflow: ellipsis;
|
|
369
|
+
white-space: nowrap;
|
|
370
|
+
font-size: var(--vg-files-info-name-font-size);
|
|
371
|
+
|
|
372
|
+
&.vg-filepreview-audio-inline {
|
|
373
|
+
display: inline-flex;
|
|
374
|
+
gap: var(--vg-filepreview-audio-inline-gap);
|
|
375
|
+
align-items: center;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
&.is-preview-action {
|
|
379
|
+
cursor: pointer;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.size {
|
|
384
|
+
color: var(--vg-secondary);
|
|
385
|
+
font-size: var(--vg-files-info-size-font-size);
|
|
386
|
+
white-space: nowrap;
|
|
387
|
+
margin-left: auto;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.download {
|
|
391
|
+
margin-left: 8px;
|
|
392
|
+
|
|
393
|
+
.vg-filepreview-download-trigger {
|
|
394
|
+
padding: 0;
|
|
395
|
+
background: transparent;
|
|
396
|
+
color: var(--vg-secondary);
|
|
397
|
+
border-radius: 0;
|
|
398
|
+
font-size: var(--vg-files-info-size-font-size);
|
|
399
|
+
font-weight: 500;
|
|
400
|
+
gap: 4px;
|
|
401
|
+
|
|
402
|
+
&:hover {
|
|
403
|
+
color: var(--vg-body-color);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
&__icon svg {
|
|
407
|
+
width: 14px;
|
|
408
|
+
height: 14px;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
&__text {
|
|
412
|
+
display: none;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
&-remove {
|
|
419
|
+
flex: 0 0 var(--vg-files-remove-width);
|
|
420
|
+
width: var(--vg-files-remove-width);
|
|
421
|
+
margin-left: auto;
|
|
422
422
|
|
|
423
423
|
button {
|
|
424
424
|
width: var(--vg-files-remove-width);
|
|
@@ -451,21 +451,21 @@
|
|
|
451
451
|
fill: var(--vg-button-color);
|
|
452
452
|
}
|
|
453
453
|
}
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
&.failing {
|
|
459
|
-
.file-remove {
|
|
460
|
-
flex: 0 0 auto;
|
|
461
|
-
width: auto;
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
&:not(.with-image) {
|
|
466
|
-
.file-info {
|
|
467
|
-
.iteration {
|
|
468
|
-
display: block;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
&.failing {
|
|
459
|
+
.file-remove {
|
|
460
|
+
flex: 0 0 auto;
|
|
461
|
+
width: auto;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
&:not(.with-image) {
|
|
466
|
+
.file-info {
|
|
467
|
+
.iteration {
|
|
468
|
+
display: block;
|
|
469
469
|
}
|
|
470
470
|
}
|
|
471
471
|
}
|
|
@@ -512,26 +512,26 @@
|
|
|
512
512
|
}
|
|
513
513
|
}
|
|
514
514
|
}
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
.file-failing-actions {
|
|
521
|
-
display: inline-flex;
|
|
522
|
-
align-items: center;
|
|
523
|
-
gap: var(--vg-files-info-failing-actions-gap);
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
&-info--list {
|
|
527
|
-
.file.failing {
|
|
528
|
-
.file-remove {
|
|
529
|
-
margin-left: var(--vg-files-info-failing-actions-margin-start);
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
&-drop {
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
.file-failing-actions {
|
|
521
|
+
display: inline-flex;
|
|
522
|
+
align-items: center;
|
|
523
|
+
gap: var(--vg-files-info-failing-actions-gap);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
&-info--list {
|
|
527
|
+
.file.failing {
|
|
528
|
+
.file-remove {
|
|
529
|
+
margin-left: var(--vg-files-info-failing-actions-margin-start);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
&-drop {
|
|
535
535
|
background-color: var(--vg-files-drop-bg);
|
|
536
536
|
border: var(--vg-files-drop-border-width) var(--vg-files-drop-border-style) var(--vg-files-drop-border-color);
|
|
537
537
|
cursor: pointer;
|
|
@@ -711,14 +711,14 @@
|
|
|
711
711
|
flex-direction: column;
|
|
712
712
|
gap: 8px;
|
|
713
713
|
|
|
714
|
-
.file-remove {
|
|
715
|
-
.file-failing-actions {
|
|
716
|
-
gap: var(--vg-files-drop-failing-actions-gap);
|
|
717
|
-
}
|
|
718
|
-
|
|
719
|
-
button {
|
|
720
|
-
background: var(--vg-body-bg);
|
|
721
|
-
color: var(--vg-body-color);
|
|
714
|
+
.file-remove {
|
|
715
|
+
.file-failing-actions {
|
|
716
|
+
gap: var(--vg-files-drop-failing-actions-gap);
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
button {
|
|
720
|
+
background: var(--vg-body-bg);
|
|
721
|
+
color: var(--vg-body-color);
|
|
722
722
|
border: none;
|
|
723
723
|
cursor: pointer;
|
|
724
724
|
outline: none;
|
|
@@ -20,7 +20,9 @@ class VGHideShowPass extends BaseModule{
|
|
|
20
20
|
constructor(el, params = {}) {
|
|
21
21
|
super(el, params);
|
|
22
22
|
|
|
23
|
-
this._params = this._getParams(el, mergeDeepObject({
|
|
23
|
+
this._params = this._getParams(el, mergeDeepObject({
|
|
24
|
+
parentClass: 'vg-form-sender--content-pass'
|
|
25
|
+
}, params));
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
static get NAME() {
|
|
@@ -63,6 +65,9 @@ class VGHideShowPass extends BaseModule{
|
|
|
63
65
|
build(isShow = false) {
|
|
64
66
|
let classes = this._params.classes.join(' '), elm = '';
|
|
65
67
|
const HTML = Html('string');
|
|
68
|
+
if (this._element.parentElement && this._params.parentClass) {
|
|
69
|
+
this._element.parentElement.classList.add(this._params.parentClass);
|
|
70
|
+
}
|
|
66
71
|
|
|
67
72
|
if (!isShow) {
|
|
68
73
|
elm = HTML.component('eye', {class: classes});
|
|
@@ -95,4 +100,4 @@ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, functi
|
|
|
95
100
|
instance.toggle(this);
|
|
96
101
|
});
|
|
97
102
|
|
|
98
|
-
export default VGHideShowPass
|
|
103
|
+
export default VGHideShowPass
|