vgapp 1.4.5 → 1.4.7
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/README.md +270 -270
- 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/vgalert/js/vgalert.js +266 -266
- package/app/modules/vgalert/scss/_variables.scss +16 -16
- package/app/modules/vgalert/scss/vgalert.scss +107 -107
- package/app/modules/vgcollapse/scss/_variables.scss +7 -7
- package/app/modules/vgcollapse/scss/vgcollapse.scss +5 -5
- package/app/modules/vgdropdown/scss/_variables.scss +14 -14
- package/app/modules/vgdropdown/scss/vgdropdown.scss +5 -5
- package/app/modules/vgdynamictable/index.js +4 -4
- package/app/modules/vgdynamictable/js/filters.js +21 -21
- package/app/modules/vgdynamictable/js/fixed.js +179 -179
- package/app/modules/vgdynamictable/js/options.js +3 -3
- package/app/modules/vgdynamictable/js/pagination.js +1 -1
- package/app/modules/vgdynamictable/js/search.js +12 -12
- package/app/modules/vgdynamictable/js/skeleton.js +27 -19
- package/app/modules/vgdynamictable/js/sortable.js +71 -71
- package/app/modules/vgdynamictable/js/summary-footer.js +28 -28
- package/app/modules/vgdynamictable/js/table-url-state.js +31 -31
- package/app/modules/vgdynamictable/js/utils/common.js +48 -48
- package/app/modules/vgdynamictable/js/vgdynamictable.js +79 -79
- package/app/modules/vgdynamictable/scss/_actions.scss +19 -19
- package/app/modules/vgdynamictable/scss/_pagination.scss +5 -5
- package/app/modules/vgdynamictable/scss/_skeleton.scss +11 -11
- package/app/modules/vgdynamictable/scss/_sortable.scss +28 -28
- package/app/modules/vgdynamictable/scss/_table.scss +7 -30
- package/app/modules/vgdynamictable/scss/_variables.scss +46 -46
- package/app/modules/vgdynamictable/scss/vgdynamictable.scss +27 -37
- 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 +115 -115
- package/app/modules/vgfilepreview/scss/vgfilepreview.scss +463 -463
- package/app/modules/vgfiles/js/droppable.js +20 -9
- package/app/modules/vgfiles/js/render.js +153 -153
- package/app/modules/vgfiles/js/vgfiles.js +104 -104
- package/app/modules/vgfiles/readme.md +123 -123
- package/app/modules/vgfiles/scss/_mixins.scss +9 -9
- package/app/modules/vgfiles/scss/_variables.scss +41 -41
- package/app/modules/vgfiles/scss/vgfiles.scss +161 -161
- package/app/modules/vgformsender/js/hideshowpass.js +22 -22
- package/app/modules/vgformsender/js/vgformsender.js +7 -7
- package/app/modules/vgformsender/readme.md +1 -1
- package/app/modules/vgformsender/scss/_variables.scss +5 -5
- package/app/modules/vgformsender/scss/vgformsender.scss +42 -42
- package/app/modules/vglawcookie/js/vglawcookie.js +19 -19
- package/app/modules/vglawcookie/scss/_variables.scss +13 -13
- package/app/modules/vglawcookie/scss/vglawcookie.scss +5 -5
- package/app/modules/vgmodal/js/vgmodal.interaction.js +216 -216
- package/app/modules/vgmodal/js/vgmodal.js +355 -355
- package/app/modules/vgmodal/js/vgmodal.minimized.js +227 -227
- package/app/modules/vgmodal/scss/_variables.scss +17 -17
- package/app/modules/vgmodal/scss/vgmodal.scss +77 -77
- package/app/modules/vgnav/js/vgnav.js +180 -180
- package/app/modules/vgnav/scss/_breakpoints.scss +36 -36
- package/app/modules/vgnav/scss/_hamburger.scss +5 -5
- package/app/modules/vgnav/scss/_placement.scss +5 -5
- package/app/modules/vgnav/scss/_toggle.scss +5 -5
- package/app/modules/vgnav/scss/_variables.scss +26 -26
- package/app/modules/vgnav/scss/vgnav.scss +41 -41
- package/app/modules/vgnestable/README.md +39 -39
- package/app/modules/vgnestable/js/vgnestable.js +358 -358
- package/app/modules/vgnestable/scss/_variables.scss +35 -35
- package/app/modules/vgnestable/scss/vgnestable.scss +55 -55
- package/app/modules/vgrangeslider/js/skins.js +222 -222
- package/app/modules/vgrangeslider/js/vgrangeslider.js +704 -704
- package/app/modules/vgrangeslider/scss/_variables.scss +55 -55
- package/app/modules/vgrangeslider/scss/vgrangeslider.scss +239 -239
- package/app/modules/vgrollup/scss/_variables.scss +15 -15
- package/app/modules/vgrollup/scss/vgrollup.scss +6 -6
- package/app/modules/vgselect/js/vgselect.js +129 -129
- package/app/modules/vgselect/readme.md +11 -11
- package/app/modules/vgselect/scss/_variables.scss +50 -50
- package/app/modules/vgselect/scss/vgselect.scss +48 -48
- package/app/modules/vgsidebar/js/vgsidebar.js +79 -79
- package/app/modules/vgsidebar/scss/_variables.scss +10 -10
- package/app/modules/vgsidebar/scss/vgsidebar.scss +5 -5
- package/app/modules/vgtabs/scss/_variables.scss +23 -23
- package/app/modules/vgtabs/scss/vgtabs.scss +5 -5
- package/app/modules/vgtoast/scss/_variables.scss +13 -13
- package/app/modules/vgtoast/scss/vgtoast.scss +5 -5
- package/app/modules/vgtooltip/js/vgtooltip.js +108 -51
- package/app/modules/vgtooltip/scss/_variables.scss +10 -10
- package/app/modules/vgtooltip/scss/vgtooltip.scss +5 -5
- package/app/utils/js/components/audio-metadata.js +240 -240
- package/app/utils/js/components/backdrop.js +116 -116
- 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/app/utils/scss/_backdrop.scss +5 -5
- package/app/utils/scss/_theme-default.scss +12 -12
- package/app/utils/scss/_theme.scss +7 -7
- package/app/utils/scss/_tokens.scss +170 -170
- package/app/utils/scss/default.scss +9 -9
- package/app/utils/scss/functions.scss +21 -21
- package/app/utils/scss/index.scss +4 -4
- package/app/utils/scss/mixin.scss +16 -16
- package/app/utils/scss/variables.scss +105 -105
- package/app/vgapp.js +295 -295
- package/build/vgapp.css +1 -1
- package/build/vgapp.css.map +1 -1
- package/build/vgapp.js +1 -1
- package/build/vgapp.js.map +1 -1
- package/index.scss +20 -20
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -1,270 +1,270 @@
|
|
|
1
|
-
# VEGAS APP (VGApp)
|
|
2
|
-
[FUNC.TRUE?!](http://func-true.ru)
|
|
3
|
-
|
|
4
|
-
VGApp — набор фронтенд‑модулей (UI‑компонентов и утилит) на чистом JavaScript от Vegas Studio.
|
|
5
|
-
Проект объединяет типовые элементы интерфейса и сценарии (модалки, табы, формы, загрузка файлов и т.д.) с едиными подходами к инициализации, data‑API, событиям и локализации.
|
|
6
|
-
|
|
7
|
-
[](https://www.npmjs.com/package/vgapp) []()
|
|
8
|
-
|
|
9
|
-
## Что умеет
|
|
10
|
-
|
|
11
|
-
### Общие возможности
|
|
12
|
-
- Работает без jQuery, ориентирован на ES6+.
|
|
13
|
-
- Поддерживает инициализацию через JS и `data-*` атрибуты.
|
|
14
|
-
- События на DOM для интеграции и расширения поведения.
|
|
15
|
-
- AJAX‑интеграция в ключевых модулях.
|
|
16
|
-
- Локализация интерфейсных текстов.
|
|
17
|
-
- Расширяемая архитектура модулей и рендереров.
|
|
18
|
-
|
|
19
|
-
### Основные модули
|
|
20
|
-
- `VGAlert` — диалоги подтверждения и уведомления с поддержкой AJAX‑сценариев.
|
|
21
|
-
- `VGCollapse` — сворачиваемые секции и аккордеоны с анимацией.
|
|
22
|
-
- `VGDropdown` — выпадающие меню с гибким открытием и позиционированием.
|
|
23
|
-
- `VGDynamicTable` — интерактивные таблицы с сортировкой, фильтрацией, remote-режимом и состоянием.
|
|
24
|
-
- `VGFiles` — загрузка и управление файлами (dropzone, валидация, AJAX, сортировка).
|
|
25
|
-
- `VGFilePreview` — предпросмотр файлов разных типов и действия по файлу (preview/download).
|
|
26
|
-
- `VGFormSender` — отправка форм (AJAX/нативно), обработка состояний и ответов.
|
|
27
|
-
- `VGLawCookie` — баннер cookies с сохранением выбора пользователя.
|
|
28
|
-
- `VGLoadMore` — подгрузка контента кнопкой или при прокрутке.
|
|
29
|
-
- `VGModal` — базовый модуль модальных окон.
|
|
30
|
-
- `VGNav` — навигация и мобильное меню.
|
|
31
|
-
- `VGNestable` — drag‑and‑drop вложенных списков с обновлением структуры.
|
|
32
|
-
- `VGRangeSlider` — одиночные и диапазонные слайдеры со значениями, лимитами и синхронизацией полей.
|
|
33
|
-
- `VGRollup` — ограничение контента по высоте/элементам с кнопкой разворота.
|
|
34
|
-
- `VGSelect` — кастомный select с поиском, мультивыбором и i18n.
|
|
35
|
-
- `VGSidebar` — боковые панели с управлением открытием/закрытием.
|
|
36
|
-
- `VGSpy` — scroll‑spy для подсветки активных ссылок по секциям.
|
|
37
|
-
- `VGTabs` — вкладки с переключением контента и поддержкой URL/hash.
|
|
38
|
-
- `VGToast` — всплывающие уведомления со стеком и автозакрытием.
|
|
39
|
-
- `VGTooltip` — tooltip/popover подсказки с Data API, автопозиционированием и закрытием по `Esc`/клику вне элемента.
|
|
40
|
-
|
|
41
|
-
## Install
|
|
42
|
-
```
|
|
43
|
-
npm i vgapp
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## API
|
|
47
|
-
```js
|
|
48
|
-
import vgapp from 'vgapp';
|
|
49
|
-
|
|
50
|
-
vgapp.boot();
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
- `vgapp` экспортируется как singleton app.
|
|
54
|
-
- `vgapp.register()` использует единый контракт: `register(name, Module)`.
|
|
55
|
-
- `vgapp.boot()` вызывает общий boot-контракт модуля.
|
|
56
|
-
- У модулей со своим `initAll()` boot использует его автоматически.
|
|
57
|
-
|
|
58
|
-
Для выборочного набора модулей создавайте отдельный экземпляр:
|
|
59
|
-
```js
|
|
60
|
-
import { VGApp, VGModal, VGTooltip } from 'vgapp';
|
|
61
|
-
|
|
62
|
-
const app = new VGApp();
|
|
63
|
-
|
|
64
|
-
app
|
|
65
|
-
.register(VGModal.NAME, VGModal)
|
|
66
|
-
.register(VGTooltip.NAME, VGTooltip)
|
|
67
|
-
.boot();
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Подключение
|
|
71
|
-
|
|
72
|
-
### Laravel + Vite
|
|
73
|
-
`resources/js/app.js`
|
|
74
|
-
```js
|
|
75
|
-
import vgapp from 'vgapp';
|
|
76
|
-
import 'vgapp/build/vgapp.css';
|
|
77
|
-
|
|
78
|
-
vgapp.boot();
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
`vite.config.js`
|
|
82
|
-
```js
|
|
83
|
-
import { defineConfig } from 'vite';
|
|
84
|
-
import laravel from 'laravel-vite-plugin';
|
|
85
|
-
|
|
86
|
-
export default defineConfig({
|
|
87
|
-
plugins: [
|
|
88
|
-
laravel([
|
|
89
|
-
'resources/css/app.css',
|
|
90
|
-
'resources/js/app.js',
|
|
91
|
-
]),
|
|
92
|
-
],
|
|
93
|
-
});
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
В Blade:
|
|
97
|
-
```php
|
|
98
|
-
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Vite
|
|
102
|
-
`src/main.js`
|
|
103
|
-
```js
|
|
104
|
-
import vgapp from 'vgapp';
|
|
105
|
-
import 'vgapp/build/vgapp.css';
|
|
106
|
-
|
|
107
|
-
vgapp.boot();
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Webpack
|
|
111
|
-
`src/app.js`
|
|
112
|
-
```js
|
|
113
|
-
import vgapp from 'vgapp';
|
|
114
|
-
import 'vgapp/build/vgapp.css';
|
|
115
|
-
|
|
116
|
-
vgapp.boot();
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
Минимально в `webpack.config.js`:
|
|
120
|
-
```js
|
|
121
|
-
module.exports = {
|
|
122
|
-
entry: './src/app.js',
|
|
123
|
-
module: {
|
|
124
|
-
rules: [
|
|
125
|
-
{
|
|
126
|
-
test: /\.css$/i,
|
|
127
|
-
use: ['style-loader', 'css-loader'],
|
|
128
|
-
},
|
|
129
|
-
],
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### Частичный boot
|
|
135
|
-
Если не нужно поднимать весь реестр singleton-приложения:
|
|
136
|
-
```js
|
|
137
|
-
import { VGApp, VGModal, VGTooltip } from 'vgapp';
|
|
138
|
-
import 'vgapp/build/vgapp.css';
|
|
139
|
-
|
|
140
|
-
const app = new VGApp();
|
|
141
|
-
|
|
142
|
-
app
|
|
143
|
-
.register(VGModal.NAME, VGModal)
|
|
144
|
-
.register(VGTooltip.NAME, VGTooltip)
|
|
145
|
-
.boot();
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
## Темы и SCSS-токены
|
|
149
|
-
|
|
150
|
-
VGApp использует семантические CSS-переменные с префиксом `--vg-`. Значения переменных формируются из SCSS-карт `$theme-light` и `$theme-dark`, расположенных в `app/utils/scss/_tokens.scss`.
|
|
151
|
-
|
|
152
|
-
Светлая тема используется по умолчанию. Явно выбрать тему можно атрибутом `data-vg-theme` на `<html>`:
|
|
153
|
-
|
|
154
|
-
```html
|
|
155
|
-
<html data-vg-theme="light">
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
```html
|
|
159
|
-
<html data-vg-theme="dark">
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
Атрибут также можно установить на отдельный контейнер, чтобы изменить тему только внутри него:
|
|
163
|
-
|
|
164
|
-
```html
|
|
165
|
-
<section data-vg-theme="dark">
|
|
166
|
-
<!-- Компоненты внутри секции используют тёмную тему -->
|
|
167
|
-
</section>
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
Тему можно переключать во время работы приложения:
|
|
171
|
-
|
|
172
|
-
```js
|
|
173
|
-
document.documentElement.dataset.vgTheme = 'dark';
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
`data-vg-theme` — стандартный адаптер готового `vgapp.css`, а не обязательный механизм темы сайта. При сборке из SCSS карты и генератор можно подключить к селекторам основного проекта:
|
|
177
|
-
|
|
178
|
-
```scss
|
|
179
|
-
@use "vgapp/theme" as vg-theme;
|
|
180
|
-
|
|
181
|
-
[data-bs-theme="light"] {
|
|
182
|
-
@include vg-theme.theme-variables(vg-theme.$theme-light);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
[data-bs-theme="dark"] {
|
|
186
|
-
@include vg-theme.theme-variables(vg-theme.$theme-dark);
|
|
187
|
-
}
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
Таким же способом можно использовать `data-ox-theme`, класс `.dark` или любой другой селектор. VGApp генерирует только переменные с префиксом `--vg-` и не меняет глобальный `color-scheme` проекта.
|
|
191
|
-
|
|
192
|
-
### Структура карт
|
|
193
|
-
|
|
194
|
-
Карты содержат не названия конкретных компонентов, а общие семантические роли:
|
|
195
|
-
|
|
196
|
-
- фон страницы и поверхности компонентов;
|
|
197
|
-
- обычный, акцентный, вторичный, disabled и контрастный текст;
|
|
198
|
-
- обычные, усиленные и disabled-границы;
|
|
199
|
-
- primary-цвет и его состояния;
|
|
200
|
-
- тени и backdrop;
|
|
201
|
-
- цвета состояний `success`, `warning`, `danger` и `info`.
|
|
202
|
-
|
|
203
|
-
У `$theme-light` и `$theme-dark` должен быть одинаковый набор ключей. Значения этих ключей для каждой темы могут отличаться.
|
|
204
|
-
|
|
205
|
-
### Добавление нового токена
|
|
206
|
-
|
|
207
|
-
Например, чтобы добавить secondary-цвет и цвет focus-ring, нужно расширить обе карты:
|
|
208
|
-
|
|
209
|
-
```scss
|
|
210
|
-
$theme-light: (
|
|
211
|
-
// Существующие токены...
|
|
212
|
-
secondary-color: #6b7280,
|
|
213
|
-
secondary-hover-color: #4b5563,
|
|
214
|
-
focus-ring-color: rgba(0, 101, 255, .35),
|
|
215
|
-
);
|
|
216
|
-
|
|
217
|
-
$theme-dark: (
|
|
218
|
-
// Существующие токены...
|
|
219
|
-
secondary-color: #a7a7a7,
|
|
220
|
-
secondary-hover-color: #d1d1d1,
|
|
221
|
-
focus-ring-color: rgba(110, 168, 254, .45),
|
|
222
|
-
);
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
Генератор темы автоматически создаст CSS-переменные:
|
|
226
|
-
|
|
227
|
-
```css
|
|
228
|
-
--vg-secondary-color: ...;
|
|
229
|
-
--vg-secondary-hover-color: ...;
|
|
230
|
-
--vg-focus-ring-color: ...;
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
После этого токены можно использовать в компонентах:
|
|
234
|
-
|
|
235
|
-
```scss
|
|
236
|
-
.vg-control {
|
|
237
|
-
color: var(--vg-secondary-color);
|
|
238
|
-
|
|
239
|
-
&:hover {
|
|
240
|
-
color: var(--vg-secondary-hover-color);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
&:focus-visible {
|
|
244
|
-
box-shadow: 0 0 0 3px var(--vg-focus-ring-color);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
При миграции существующего значения следует указывать fallback светлой темы. Благодаря этому отдельный SCSS-вход компонента продолжит работать, даже если базовый файл темы не был подключён:
|
|
250
|
-
|
|
251
|
-
```scss
|
|
252
|
-
border-color: var(--vg-border-color, rgba(0, 0, 0, .2));
|
|
253
|
-
background: var(--vg-surface-bg, #ffffff);
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
### Правила именования
|
|
257
|
-
|
|
258
|
-
- Токен должен описывать назначение, например `surface-hover-bg`, а не конкретное значение вроде `gray-100`.
|
|
259
|
-
- Общие токены не должны содержать название компонента. Настройки конкретного компонента остаются в его собственной SCSS-карте.
|
|
260
|
-
- Новый ключ необходимо добавлять одновременно в `$theme-light` и `$theme-dark`.
|
|
261
|
-
- Компоненты должны использовать `var(--vg-...)`, чтобы тема могла переключаться без повторной сборки CSS.
|
|
262
|
-
|
|
263
|
-
CSS-переменные темы генерируются в `app/utils/scss/_theme.scss` и подключаются через базовый `default.scss` и полную SCSS-сборку. Все SCSS-компоненты VGApp переведены на модульную систему Sass, семантические токены и публичные настраиваемые карты.
|
|
264
|
-
|
|
265
|
-
## Authors
|
|
266
|
-
|
|
267
|
-
[VEGAS STUDIO](https://vegas-dev.com) Russia
|
|
268
|
-
|
|
269
|
-
## License
|
|
270
|
-
Is published under the [MIT license](http://www.opensource.org/licenses/mit-license)
|
|
1
|
+
# VEGAS APP (VGApp)
|
|
2
|
+
[FUNC.TRUE?!](http://func-true.ru)
|
|
3
|
+
|
|
4
|
+
VGApp — набор фронтенд‑модулей (UI‑компонентов и утилит) на чистом JavaScript от Vegas Studio.
|
|
5
|
+
Проект объединяет типовые элементы интерфейса и сценарии (модалки, табы, формы, загрузка файлов и т.д.) с едиными подходами к инициализации, data‑API, событиям и локализации.
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/vgapp) []()
|
|
8
|
+
|
|
9
|
+
## Что умеет
|
|
10
|
+
|
|
11
|
+
### Общие возможности
|
|
12
|
+
- Работает без jQuery, ориентирован на ES6+.
|
|
13
|
+
- Поддерживает инициализацию через JS и `data-*` атрибуты.
|
|
14
|
+
- События на DOM для интеграции и расширения поведения.
|
|
15
|
+
- AJAX‑интеграция в ключевых модулях.
|
|
16
|
+
- Локализация интерфейсных текстов.
|
|
17
|
+
- Расширяемая архитектура модулей и рендереров.
|
|
18
|
+
|
|
19
|
+
### Основные модули
|
|
20
|
+
- `VGAlert` — диалоги подтверждения и уведомления с поддержкой AJAX‑сценариев.
|
|
21
|
+
- `VGCollapse` — сворачиваемые секции и аккордеоны с анимацией.
|
|
22
|
+
- `VGDropdown` — выпадающие меню с гибким открытием и позиционированием.
|
|
23
|
+
- `VGDynamicTable` — интерактивные таблицы с сортировкой, фильтрацией, remote-режимом и состоянием.
|
|
24
|
+
- `VGFiles` — загрузка и управление файлами (dropzone, валидация, AJAX, сортировка).
|
|
25
|
+
- `VGFilePreview` — предпросмотр файлов разных типов и действия по файлу (preview/download).
|
|
26
|
+
- `VGFormSender` — отправка форм (AJAX/нативно), обработка состояний и ответов.
|
|
27
|
+
- `VGLawCookie` — баннер cookies с сохранением выбора пользователя.
|
|
28
|
+
- `VGLoadMore` — подгрузка контента кнопкой или при прокрутке.
|
|
29
|
+
- `VGModal` — базовый модуль модальных окон.
|
|
30
|
+
- `VGNav` — навигация и мобильное меню.
|
|
31
|
+
- `VGNestable` — drag‑and‑drop вложенных списков с обновлением структуры.
|
|
32
|
+
- `VGRangeSlider` — одиночные и диапазонные слайдеры со значениями, лимитами и синхронизацией полей.
|
|
33
|
+
- `VGRollup` — ограничение контента по высоте/элементам с кнопкой разворота.
|
|
34
|
+
- `VGSelect` — кастомный select с поиском, мультивыбором и i18n.
|
|
35
|
+
- `VGSidebar` — боковые панели с управлением открытием/закрытием.
|
|
36
|
+
- `VGSpy` — scroll‑spy для подсветки активных ссылок по секциям.
|
|
37
|
+
- `VGTabs` — вкладки с переключением контента и поддержкой URL/hash.
|
|
38
|
+
- `VGToast` — всплывающие уведомления со стеком и автозакрытием.
|
|
39
|
+
- `VGTooltip` — tooltip/popover подсказки с Data API, автопозиционированием и закрытием по `Esc`/клику вне элемента.
|
|
40
|
+
|
|
41
|
+
## Install
|
|
42
|
+
```
|
|
43
|
+
npm i vgapp
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## API
|
|
47
|
+
```js
|
|
48
|
+
import vgapp from 'vgapp';
|
|
49
|
+
|
|
50
|
+
vgapp.boot();
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
- `vgapp` экспортируется как singleton app.
|
|
54
|
+
- `vgapp.register()` использует единый контракт: `register(name, Module)`.
|
|
55
|
+
- `vgapp.boot()` вызывает общий boot-контракт модуля.
|
|
56
|
+
- У модулей со своим `initAll()` boot использует его автоматически.
|
|
57
|
+
|
|
58
|
+
Для выборочного набора модулей создавайте отдельный экземпляр:
|
|
59
|
+
```js
|
|
60
|
+
import { VGApp, VGModal, VGTooltip } from 'vgapp';
|
|
61
|
+
|
|
62
|
+
const app = new VGApp();
|
|
63
|
+
|
|
64
|
+
app
|
|
65
|
+
.register(VGModal.NAME, VGModal)
|
|
66
|
+
.register(VGTooltip.NAME, VGTooltip)
|
|
67
|
+
.boot();
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Подключение
|
|
71
|
+
|
|
72
|
+
### Laravel + Vite
|
|
73
|
+
`resources/js/app.js`
|
|
74
|
+
```js
|
|
75
|
+
import vgapp from 'vgapp';
|
|
76
|
+
import 'vgapp/build/vgapp.css';
|
|
77
|
+
|
|
78
|
+
vgapp.boot();
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`vite.config.js`
|
|
82
|
+
```js
|
|
83
|
+
import { defineConfig } from 'vite';
|
|
84
|
+
import laravel from 'laravel-vite-plugin';
|
|
85
|
+
|
|
86
|
+
export default defineConfig({
|
|
87
|
+
plugins: [
|
|
88
|
+
laravel([
|
|
89
|
+
'resources/css/app.css',
|
|
90
|
+
'resources/js/app.js',
|
|
91
|
+
]),
|
|
92
|
+
],
|
|
93
|
+
});
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
В Blade:
|
|
97
|
+
```php
|
|
98
|
+
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Vite
|
|
102
|
+
`src/main.js`
|
|
103
|
+
```js
|
|
104
|
+
import vgapp from 'vgapp';
|
|
105
|
+
import 'vgapp/build/vgapp.css';
|
|
106
|
+
|
|
107
|
+
vgapp.boot();
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Webpack
|
|
111
|
+
`src/app.js`
|
|
112
|
+
```js
|
|
113
|
+
import vgapp from 'vgapp';
|
|
114
|
+
import 'vgapp/build/vgapp.css';
|
|
115
|
+
|
|
116
|
+
vgapp.boot();
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Минимально в `webpack.config.js`:
|
|
120
|
+
```js
|
|
121
|
+
module.exports = {
|
|
122
|
+
entry: './src/app.js',
|
|
123
|
+
module: {
|
|
124
|
+
rules: [
|
|
125
|
+
{
|
|
126
|
+
test: /\.css$/i,
|
|
127
|
+
use: ['style-loader', 'css-loader'],
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Частичный boot
|
|
135
|
+
Если не нужно поднимать весь реестр singleton-приложения:
|
|
136
|
+
```js
|
|
137
|
+
import { VGApp, VGModal, VGTooltip } from 'vgapp';
|
|
138
|
+
import 'vgapp/build/vgapp.css';
|
|
139
|
+
|
|
140
|
+
const app = new VGApp();
|
|
141
|
+
|
|
142
|
+
app
|
|
143
|
+
.register(VGModal.NAME, VGModal)
|
|
144
|
+
.register(VGTooltip.NAME, VGTooltip)
|
|
145
|
+
.boot();
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Темы и SCSS-токены
|
|
149
|
+
|
|
150
|
+
VGApp использует семантические CSS-переменные с префиксом `--vg-`. Значения переменных формируются из SCSS-карт `$theme-light` и `$theme-dark`, расположенных в `app/utils/scss/_tokens.scss`.
|
|
151
|
+
|
|
152
|
+
Светлая тема используется по умолчанию. Явно выбрать тему можно атрибутом `data-vg-theme` на `<html>`:
|
|
153
|
+
|
|
154
|
+
```html
|
|
155
|
+
<html data-vg-theme="light">
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
```html
|
|
159
|
+
<html data-vg-theme="dark">
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Атрибут также можно установить на отдельный контейнер, чтобы изменить тему только внутри него:
|
|
163
|
+
|
|
164
|
+
```html
|
|
165
|
+
<section data-vg-theme="dark">
|
|
166
|
+
<!-- Компоненты внутри секции используют тёмную тему -->
|
|
167
|
+
</section>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Тему можно переключать во время работы приложения:
|
|
171
|
+
|
|
172
|
+
```js
|
|
173
|
+
document.documentElement.dataset.vgTheme = 'dark';
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
`data-vg-theme` — стандартный адаптер готового `vgapp.css`, а не обязательный механизм темы сайта. При сборке из SCSS карты и генератор можно подключить к селекторам основного проекта:
|
|
177
|
+
|
|
178
|
+
```scss
|
|
179
|
+
@use "vgapp/theme" as vg-theme;
|
|
180
|
+
|
|
181
|
+
[data-bs-theme="light"] {
|
|
182
|
+
@include vg-theme.theme-variables(vg-theme.$theme-light);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
[data-bs-theme="dark"] {
|
|
186
|
+
@include vg-theme.theme-variables(vg-theme.$theme-dark);
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Таким же способом можно использовать `data-ox-theme`, класс `.dark` или любой другой селектор. VGApp генерирует только переменные с префиксом `--vg-` и не меняет глобальный `color-scheme` проекта.
|
|
191
|
+
|
|
192
|
+
### Структура карт
|
|
193
|
+
|
|
194
|
+
Карты содержат не названия конкретных компонентов, а общие семантические роли:
|
|
195
|
+
|
|
196
|
+
- фон страницы и поверхности компонентов;
|
|
197
|
+
- обычный, акцентный, вторичный, disabled и контрастный текст;
|
|
198
|
+
- обычные, усиленные и disabled-границы;
|
|
199
|
+
- primary-цвет и его состояния;
|
|
200
|
+
- тени и backdrop;
|
|
201
|
+
- цвета состояний `success`, `warning`, `danger` и `info`.
|
|
202
|
+
|
|
203
|
+
У `$theme-light` и `$theme-dark` должен быть одинаковый набор ключей. Значения этих ключей для каждой темы могут отличаться.
|
|
204
|
+
|
|
205
|
+
### Добавление нового токена
|
|
206
|
+
|
|
207
|
+
Например, чтобы добавить secondary-цвет и цвет focus-ring, нужно расширить обе карты:
|
|
208
|
+
|
|
209
|
+
```scss
|
|
210
|
+
$theme-light: (
|
|
211
|
+
// Существующие токены...
|
|
212
|
+
secondary-color: #6b7280,
|
|
213
|
+
secondary-hover-color: #4b5563,
|
|
214
|
+
focus-ring-color: rgba(0, 101, 255, .35),
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
$theme-dark: (
|
|
218
|
+
// Существующие токены...
|
|
219
|
+
secondary-color: #a7a7a7,
|
|
220
|
+
secondary-hover-color: #d1d1d1,
|
|
221
|
+
focus-ring-color: rgba(110, 168, 254, .45),
|
|
222
|
+
);
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Генератор темы автоматически создаст CSS-переменные:
|
|
226
|
+
|
|
227
|
+
```css
|
|
228
|
+
--vg-secondary-color: ...;
|
|
229
|
+
--vg-secondary-hover-color: ...;
|
|
230
|
+
--vg-focus-ring-color: ...;
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
После этого токены можно использовать в компонентах:
|
|
234
|
+
|
|
235
|
+
```scss
|
|
236
|
+
.vg-control {
|
|
237
|
+
color: var(--vg-secondary-color);
|
|
238
|
+
|
|
239
|
+
&:hover {
|
|
240
|
+
color: var(--vg-secondary-hover-color);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
&:focus-visible {
|
|
244
|
+
box-shadow: 0 0 0 3px var(--vg-focus-ring-color);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
При миграции существующего значения следует указывать fallback светлой темы. Благодаря этому отдельный SCSS-вход компонента продолжит работать, даже если базовый файл темы не был подключён:
|
|
250
|
+
|
|
251
|
+
```scss
|
|
252
|
+
border-color: var(--vg-border-color, rgba(0, 0, 0, .2));
|
|
253
|
+
background: var(--vg-surface-bg, #ffffff);
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### Правила именования
|
|
257
|
+
|
|
258
|
+
- Токен должен описывать назначение, например `surface-hover-bg`, а не конкретное значение вроде `gray-100`.
|
|
259
|
+
- Общие токены не должны содержать название компонента. Настройки конкретного компонента остаются в его собственной SCSS-карте.
|
|
260
|
+
- Новый ключ необходимо добавлять одновременно в `$theme-light` и `$theme-dark`.
|
|
261
|
+
- Компоненты должны использовать `var(--vg-...)`, чтобы тема могла переключаться без повторной сборки CSS.
|
|
262
|
+
|
|
263
|
+
CSS-переменные темы генерируются в `app/utils/scss/_theme.scss` и подключаются через базовый `default.scss` и полную SCSS-сборку. Все SCSS-компоненты VGApp переведены на модульную систему Sass, семантические токены и публичные настраиваемые карты.
|
|
264
|
+
|
|
265
|
+
## Authors
|
|
266
|
+
|
|
267
|
+
[VEGAS STUDIO](https://vegas-dev.com) Russia
|
|
268
|
+
|
|
269
|
+
## License
|
|
270
|
+
Is published under the [MIT license](http://www.opensource.org/licenses/mit-license)
|
|
@@ -7,22 +7,22 @@
|
|
|
7
7
|
"agree": "Yeah, I agree",
|
|
8
8
|
"cancel": "Cancel"
|
|
9
9
|
},
|
|
10
|
-
"filepreview": {
|
|
11
|
-
"open_audio": "Open player",
|
|
12
|
-
"open_image": "Open image",
|
|
13
|
-
"open_text": "Open text",
|
|
14
|
-
"open_video": "Open video",
|
|
15
|
-
"open_archive": "Open archive",
|
|
16
|
-
"open_pdf": "Open PDF",
|
|
17
|
-
"open_office": "Open document",
|
|
18
|
-
"download": "Download",
|
|
19
|
-
"preview": "Preview",
|
|
20
|
-
"prev": "Prev",
|
|
21
|
-
"next": "Next",
|
|
22
|
-
"zoom_in": "Zoom +",
|
|
23
|
-
"zoom_out": "Zoom -"
|
|
24
|
-
},
|
|
25
|
-
"loadmore": {
|
|
10
|
+
"filepreview": {
|
|
11
|
+
"open_audio": "Open player",
|
|
12
|
+
"open_image": "Open image",
|
|
13
|
+
"open_text": "Open text",
|
|
14
|
+
"open_video": "Open video",
|
|
15
|
+
"open_archive": "Open archive",
|
|
16
|
+
"open_pdf": "Open PDF",
|
|
17
|
+
"open_office": "Open document",
|
|
18
|
+
"download": "Download",
|
|
19
|
+
"preview": "Preview",
|
|
20
|
+
"prev": "Prev",
|
|
21
|
+
"next": "Next",
|
|
22
|
+
"zoom_in": "Zoom +",
|
|
23
|
+
"zoom_out": "Zoom -"
|
|
24
|
+
},
|
|
25
|
+
"loadmore": {
|
|
26
26
|
"send": "Uploading...",
|
|
27
27
|
"show": "I'm showing you...",
|
|
28
28
|
"text-ajax": "Upload more",
|
|
@@ -36,4 +36,4 @@
|
|
|
36
36
|
"select": {
|
|
37
37
|
"load-more": "Upload more"
|
|
38
38
|
}
|
|
39
|
-
}
|
|
39
|
+
}
|