vgapp 1.4.2 → 1.4.4
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 +251 -162
- package/app/modules/vgalert/scss/_variables.scss +6 -4
- package/app/modules/vgalert/scss/vgalert.scss +7 -8
- package/app/modules/vgcollapse/scss/_variables.scss +7 -5
- package/app/modules/vgcollapse/scss/vgcollapse.scss +5 -6
- package/app/modules/vgdropdown/scss/_variables.scss +14 -12
- package/app/modules/vgdropdown/scss/vgdropdown.scss +5 -6
- package/app/modules/vgdynamictable/scss/_actions.scss +19 -16
- package/app/modules/vgdynamictable/scss/_pagination.scss +5 -2
- package/app/modules/vgdynamictable/scss/_skeleton.scss +5 -2
- package/app/modules/vgdynamictable/scss/_sortable.scss +4 -1
- package/app/modules/vgdynamictable/scss/_table.scss +4 -1
- package/app/modules/vgdynamictable/scss/_variables.scss +46 -38
- package/app/modules/vgdynamictable/scss/vgdynamictable.scss +14 -10
- package/app/modules/vgfilepreview/scss/_variables.scss +20 -18
- package/app/modules/vgfilepreview/scss/vgfilepreview.scss +4 -5
- package/app/modules/vgfiles/scss/_mixins.scss +9 -9
- package/app/modules/vgfiles/scss/_variables.scss +28 -26
- package/app/modules/vgfiles/scss/vgfiles.scss +13 -14
- package/app/modules/vgformsender/scss/_variables.scss +5 -3
- package/app/modules/vgformsender/scss/vgformsender.scss +8 -9
- package/app/modules/vglawcookie/scss/_variables.scss +13 -11
- package/app/modules/vglawcookie/scss/vglawcookie.scss +5 -6
- package/app/modules/vgmodal/scss/_variables.scss +17 -15
- package/app/modules/vgmodal/scss/vgmodal.scss +10 -11
- package/app/modules/vgnav/scss/_breakpoints.scss +36 -20
- package/app/modules/vgnav/scss/_hamburger.scss +5 -2
- package/app/modules/vgnav/scss/_placement.scss +5 -2
- package/app/modules/vgnav/scss/_toggle.scss +5 -2
- package/app/modules/vgnav/scss/_variables.scss +26 -23
- package/app/modules/vgnav/scss/vgnav.scss +20 -16
- package/app/modules/vgnestable/scss/_variables.scss +29 -27
- package/app/modules/vgnestable/scss/vgnestable.scss +4 -5
- package/app/modules/vgrangeslider/scss/_variables.scss +23 -21
- package/app/modules/vgrangeslider/scss/vgrangeslider.scss +4 -5
- package/app/modules/vgrollup/scss/_variables.scss +15 -8
- package/app/modules/vgrollup/scss/vgrollup.scss +6 -7
- package/app/modules/vgselect/scss/_variables.scss +50 -48
- package/app/modules/vgselect/scss/vgselect.scss +26 -27
- package/app/modules/vgsidebar/scss/_variables.scss +10 -8
- package/app/modules/vgsidebar/scss/vgsidebar.scss +5 -6
- package/app/modules/vgtabs/scss/_variables.scss +23 -20
- package/app/modules/vgtabs/scss/vgtabs.scss +5 -6
- package/app/modules/vgtoast/scss/_variables.scss +13 -11
- package/app/modules/vgtoast/scss/vgtoast.scss +5 -6
- package/app/modules/vgtooltip/scss/_variables.scss +10 -8
- package/app/modules/vgtooltip/scss/vgtooltip.scss +5 -6
- package/app/utils/scss/_backdrop.scss +19 -0
- package/app/utils/scss/_closable.scss +22 -0
- package/app/utils/scss/_collapsable.scss +13 -0
- package/app/utils/scss/_loaders.scss +22 -0
- package/app/utils/scss/_theme-default.scss +12 -0
- package/app/utils/scss/_theme.scss +7 -0
- package/app/utils/scss/_tokens.scss +170 -0
- package/app/utils/scss/default.scss +11 -78
- package/app/utils/scss/functions.scss +21 -39
- package/app/utils/scss/index.scss +4 -0
- package/app/utils/scss/mixin.scss +16 -13
- package/app/utils/scss/variables.scss +105 -77
- package/build/vgapp.css +2 -4492
- package/build/vgapp.css.map +1 -1
- package/build/vgapp.js +3 -32145
- package/index.scss +20 -23
- package/package.json +7 -1
- /package/app/utils/scss/{animation.scss → _animation.scss} +0 -0
- /package/app/utils/scss/{placement.scss → _placement.scss} +0 -0
package/README.md
CHANGED
|
@@ -1,181 +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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- `
|
|
22
|
-
- `
|
|
23
|
-
- `
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
## Подключение
|
|
39
|
-
|
|
40
|
-
### Laravel + Vite
|
|
41
|
-
`resources/js/app.js`
|
|
42
|
-
```js
|
|
43
|
-
import vgapp from 'vgapp';
|
|
44
|
-
import 'vgapp/build/vgapp.css';
|
|
45
|
-
|
|
46
|
-
vgapp.boot();
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
`vite.config.js`
|
|
50
|
-
```js
|
|
51
|
-
import { defineConfig } from 'vite';
|
|
52
|
-
import laravel from 'laravel-vite-plugin';
|
|
53
|
-
|
|
54
|
-
export default defineConfig({
|
|
55
|
-
plugins: [
|
|
56
|
-
laravel([
|
|
57
|
-
'resources/css/app.css',
|
|
58
|
-
'resources/js/app.js',
|
|
59
|
-
]),
|
|
60
|
-
],
|
|
61
|
-
});
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
В Blade:
|
|
65
|
-
```php
|
|
66
|
-
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### Vite
|
|
70
|
-
`src/main.js`
|
|
71
|
-
```js
|
|
72
|
-
import vgapp from 'vgapp';
|
|
73
|
-
import 'vgapp/build/vgapp.css';
|
|
74
|
-
|
|
75
|
-
vgapp.boot();
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### Webpack
|
|
79
|
-
`src/app.js`
|
|
80
|
-
```js
|
|
81
|
-
import vgapp from 'vgapp';
|
|
82
|
-
import 'vgapp/build/vgapp.css';
|
|
83
|
-
|
|
84
|
-
vgapp.boot();
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
Минимально в `webpack.config.js`:
|
|
88
|
-
```js
|
|
89
|
-
module.exports = {
|
|
90
|
-
entry: './src/app.js',
|
|
91
|
-
module: {
|
|
92
|
-
rules: [
|
|
93
|
-
{
|
|
94
|
-
test: /\.css$/i,
|
|
95
|
-
use: ['style-loader', 'css-loader'],
|
|
96
|
-
},
|
|
97
|
-
],
|
|
98
|
-
},
|
|
99
|
-
};
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### Частичный boot
|
|
103
|
-
Если не нужно поднимать весь реестр singleton-приложения:
|
|
104
|
-
```js
|
|
105
|
-
import { VGApp, VGModal, VGTooltip } from 'vgapp';
|
|
106
|
-
import 'vgapp/build/vgapp.css';
|
|
107
|
-
|
|
108
|
-
const app = new VGApp();
|
|
109
|
-
|
|
110
|
-
app
|
|
111
|
-
.register(VGModal.NAME, VGModal)
|
|
112
|
-
.register(VGTooltip.NAME, VGTooltip)
|
|
113
|
-
.boot();
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
## Что умеет
|
|
117
|
-
|
|
118
|
-
### Общие возможности
|
|
119
|
-
- Работает без jQuery, ориентирован на ES6+.
|
|
120
|
-
- Поддерживает инициализацию через JS и `data-*` атрибуты.
|
|
121
|
-
- События на DOM для интеграции и расширения поведения.
|
|
122
|
-
- AJAX‑интеграция в ключевых модулях.
|
|
123
|
-
- Локализация интерфейсных текстов.
|
|
124
|
-
- Расширяемая архитектура модулей и рендереров.
|
|
125
|
-
|
|
126
|
-
### Основные модули
|
|
127
|
-
- `VGAlert` — диалоги подтверждения и уведомления с поддержкой AJAX‑сценариев.
|
|
128
|
-
- `VGCollapse` — сворачиваемые секции и аккордеоны с анимацией.
|
|
129
|
-
- `VGDropdown` — выпадающие меню с гибким открытием и позиционированием.
|
|
130
|
-
- `VGDynamicTable` — интерактивные таблицы с сортировкой, фильтрацией, remote-режимом и состоянием.
|
|
131
|
-
- `VGFiles` — загрузка и управление файлами (dropzone, валидация, AJAX, сортировка).
|
|
132
|
-
- `VGFilePreview` — предпросмотр файлов разных типов и действия по файлу (preview/download).
|
|
133
|
-
- `VGFormSender` — отправка форм (AJAX/нативно), обработка состояний и ответов.
|
|
134
|
-
- `VGLawCookie` — баннер cookies с сохранением выбора пользователя.
|
|
135
|
-
- `VGLoadMore` — подгрузка контента кнопкой или при прокрутке.
|
|
136
|
-
- `VGModal` — базовый модуль модальных окон.
|
|
137
|
-
- `VGNav` — навигация и мобильное меню.
|
|
138
|
-
- `VGNestable` — drag‑and‑drop вложенных списков с обновлением структуры.
|
|
139
|
-
- `VGRangeSlider` — одиночные и диапазонные слайдеры со значениями, лимитами и синхронизацией полей.
|
|
140
|
-
- `VGRollup` — ограничение контента по высоте/элементам с кнопкой разворота.
|
|
141
|
-
- `VGSelect` — кастомный select с поиском, мультивыбором и i18n.
|
|
142
|
-
- `VGSidebar` — боковые панели с управлением открытием/закрытием.
|
|
143
|
-
- `VGSpy` — scroll‑spy для подсветки активных ссылок по секциям.
|
|
144
|
-
- `VGTabs` — вкладки с переключением контента и поддержкой URL/hash.
|
|
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.
|
|
145
38
|
- `VGToast` — всплывающие уведомления со стеком и автозакрытием.
|
|
146
39
|
- `VGTooltip` — tooltip/popover подсказки с Data API, автопозиционированием и закрытием по `Esc`/клику вне элемента.
|
|
147
40
|
|
|
148
|
-
|
|
41
|
+
## Install
|
|
42
|
+
```
|
|
43
|
+
npm i vgapp
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## API
|
|
47
|
+
```js
|
|
48
|
+
import vgapp from 'vgapp';
|
|
49
|
+
|
|
50
|
+
vgapp.boot();
|
|
51
|
+
```
|
|
149
52
|
|
|
150
|
-
|
|
53
|
+
- `vgapp` экспортируется как singleton app.
|
|
54
|
+
- `vgapp.register()` использует единый контракт: `register(name, Module)`.
|
|
55
|
+
- `vgapp.boot()` вызывает общий boot-контракт модуля.
|
|
56
|
+
- У модулей со своим `initAll()` boot использует его автоматически.
|
|
151
57
|
|
|
58
|
+
Для выборочного набора модулей создавайте отдельный экземпляр:
|
|
152
59
|
```js
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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();
|
|
156
68
|
```
|
|
157
69
|
|
|
158
|
-
|
|
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
|
+
```
|
|
159
80
|
|
|
81
|
+
`vite.config.js`
|
|
160
82
|
```js
|
|
161
|
-
|
|
162
|
-
|
|
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
|
+
],
|
|
163
93
|
});
|
|
164
94
|
```
|
|
165
95
|
|
|
166
|
-
|
|
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
|
+
```
|
|
167
133
|
|
|
168
|
-
|
|
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
|
+
```
|
|
169
157
|
|
|
170
158
|
```html
|
|
171
|
-
<
|
|
172
|
-
<select class="vg-select" data-search-enabled="true">...</select>
|
|
173
|
-
<select class="vg-select" data-search-remote="true" data-search-route="/api/search">...</select>
|
|
159
|
+
<html data-vg-theme="dark">
|
|
174
160
|
```
|
|
175
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
|
+
|
|
176
265
|
## Authors
|
|
177
|
-
|
|
178
|
-
[VEGAS STUDIO](https://vegas-dev.com) Russia
|
|
179
|
-
|
|
180
|
-
## License
|
|
181
|
-
Is published under the [MIT license](http://www.opensource.org/licenses/mit-license)
|
|
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,14 +1,16 @@
|
|
|
1
|
+
@use "../../../utils/scss" as vg;
|
|
2
|
+
|
|
1
3
|
$alert-map: (
|
|
2
4
|
overlay-z-index: 1,
|
|
3
5
|
overlay-backdrop-bg: rgba(0, 0, 0, 0),
|
|
4
|
-
overlay-backdrop-show-bg: rgba(0, 0, 0,
|
|
6
|
+
overlay-backdrop-show-bg: var(--vg-backdrop-subtle-color, rgba(0, 0, 0, .25)),
|
|
5
7
|
overlay-backdrop-transition: background-color .05s linear,
|
|
6
|
-
overlay-wrapper-bg: #
|
|
8
|
+
overlay-wrapper-bg: var(--vg-surface-bg, #{vg.$surface-bg}),
|
|
7
9
|
overlay-wrapper-width: 90%,
|
|
8
10
|
overlay-wrapper-top: 1rem,
|
|
9
11
|
overlay-wrapper-start: 50%,
|
|
10
12
|
overlay-wrapper-transform: translate(-50%, -1rem),
|
|
11
13
|
overlay-wrapper-show-transform: translate(-50%, 0),
|
|
12
14
|
overlay-wrapper-transition: transform .12s ease-out,
|
|
13
|
-
buttons-bg: #
|
|
14
|
-
);
|
|
15
|
+
buttons-bg: var(--vg-surface-muted-bg, #{vg.$surface-muted-bg}),
|
|
16
|
+
) !default;
|
|
@@ -6,10 +6,9 @@
|
|
|
6
6
|
*--------------------------------------------------------------------------
|
|
7
7
|
**/
|
|
8
8
|
|
|
9
|
-
@
|
|
10
|
-
@
|
|
11
|
-
@
|
|
12
|
-
@import "variables";
|
|
9
|
+
@forward "variables";
|
|
10
|
+
@use "../../../utils/scss" as vg;
|
|
11
|
+
@use "variables" as vars;
|
|
13
12
|
|
|
14
13
|
.vg-alert {
|
|
15
14
|
&-modal {
|
|
@@ -19,7 +18,7 @@
|
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
&-overlay {
|
|
22
|
-
@include mix-vars('alert',
|
|
21
|
+
@include vg.mix-vars('alert', vars.$alert-map);
|
|
23
22
|
width: 100%;
|
|
24
23
|
height: 100%;
|
|
25
24
|
position: absolute;
|
|
@@ -111,9 +110,9 @@
|
|
|
111
110
|
}
|
|
112
111
|
|
|
113
112
|
&-wrapper {
|
|
114
|
-
@include mix-vars('alert',
|
|
115
|
-
@include mix-alert-color-mode($class: vg-alert);
|
|
116
|
-
border-radius: var(--vg-border-radius);
|
|
113
|
+
@include vg.mix-vars('alert', vars.$alert-map);
|
|
114
|
+
@include vg.mix-alert-color-mode($class: vg-alert);
|
|
115
|
+
border-radius: var(--vg-border-radius, #{vg.$border-radius});
|
|
117
116
|
overflow: hidden;
|
|
118
117
|
|
|
119
118
|
.vg-alert-content {
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
@use "../../../utils/scss" as vg;
|
|
2
|
+
|
|
3
|
+
$collapse-accordion-map: (
|
|
4
|
+
border: vg.$border-width vg.$border-style var(--vg-border-color, #{vg.$border-color}),
|
|
5
|
+
border-radius: vg.$border-radius,
|
|
6
|
+
padding: 1rem
|
|
7
|
+
) !default;
|
|
@@ -6,14 +6,13 @@
|
|
|
6
6
|
*--------------------------------------------------------------------------
|
|
7
7
|
**/
|
|
8
8
|
|
|
9
|
-
@
|
|
10
|
-
@
|
|
11
|
-
@
|
|
12
|
-
@import "variables";
|
|
9
|
+
@forward "variables";
|
|
10
|
+
@use "../../../utils/scss" as vg;
|
|
11
|
+
@use "variables" as vars;
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
.vg-accordion {
|
|
16
|
-
@include mix-vars('accordion',
|
|
15
|
+
@include vg.mix-vars('accordion', vars.$collapse-accordion-map);
|
|
17
16
|
position: relative;
|
|
18
17
|
border: var(--vg-accordion-border);
|
|
19
18
|
border-radius: var(--vg-accordion-border-radius);
|
|
@@ -38,4 +37,4 @@
|
|
|
38
37
|
display: block;
|
|
39
38
|
padding: var(--vg-accordion-padding);
|
|
40
39
|
}
|
|
41
|
-
}
|
|
40
|
+
}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
border-
|
|
8
|
-
border-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
@use "../../../utils/scss" as vg;
|
|
2
|
+
|
|
3
|
+
$dropdown-map: (
|
|
4
|
+
bg-color: var(--vg-surface-bg, #{vg.$surface-bg}),
|
|
5
|
+
color: var(--vg-text-color, #{vg.$color}),
|
|
6
|
+
box-shadow: var(--vg-box-shadow, #{vg.$box-shadow}),
|
|
7
|
+
border-width: vg.$border-width,
|
|
8
|
+
border-style: vg.$border-style,
|
|
9
|
+
border-color: var(--vg-border-color, #{vg.$border-color}),
|
|
10
|
+
border-radius: vg.$border-radius,
|
|
11
|
+
z-index: vg.$dropdown-index,
|
|
12
|
+
transition: vg.$transition-base,
|
|
13
|
+
min-width: 225px
|
|
14
|
+
) !default;
|
|
@@ -6,14 +6,13 @@
|
|
|
6
6
|
*--------------------------------------------------------------------------
|
|
7
7
|
**/
|
|
8
8
|
|
|
9
|
-
@
|
|
10
|
-
@
|
|
11
|
-
@
|
|
12
|
-
@import "variables";
|
|
9
|
+
@forward "variables";
|
|
10
|
+
@use "../../../utils/scss" as vg;
|
|
11
|
+
@use "variables" as vars;
|
|
13
12
|
|
|
14
13
|
.vg-dropdown {
|
|
15
14
|
position: relative;
|
|
16
|
-
@include mix-vars('dropdown',
|
|
15
|
+
@include vg.mix-vars('dropdown', vars.$dropdown-map);
|
|
17
16
|
|
|
18
17
|
&-content {
|
|
19
18
|
z-index: var(--vg-dropdown-z-index);
|
|
@@ -78,4 +77,4 @@
|
|
|
78
77
|
border-radius: var(--vg-dropdown-border-radius);
|
|
79
78
|
box-shadow: var(--vg-dropdown-box-shadow);
|
|
80
79
|
}
|
|
81
|
-
}
|
|
80
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
@mixin actions() {
|
|
2
|
+
[data-table-state] {
|
|
2
3
|
text-align: center;
|
|
3
4
|
padding: 18px 14px;
|
|
4
5
|
vertical-align: middle;
|
|
@@ -66,12 +67,12 @@ tbody tr[data-row-dragging="1"] {
|
|
|
66
67
|
opacity: 0.55;
|
|
67
68
|
}
|
|
68
69
|
|
|
69
|
-
tbody tr[data-row-drag-over="before"] {
|
|
70
|
-
box-shadow: inset 0 2px 0
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
tbody tr[data-row-drag-over="after"] {
|
|
74
|
-
box-shadow: inset 0 -2px 0
|
|
70
|
+
tbody tr[data-row-drag-over="before"] {
|
|
71
|
+
box-shadow: inset 0 2px 0 var(--vg-dynamic-table-actions-drag-indicator);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
tbody tr[data-row-drag-over="after"] {
|
|
75
|
+
box-shadow: inset 0 -2px 0 var(--vg-dynamic-table-actions-drag-indicator);
|
|
75
76
|
}
|
|
76
77
|
|
|
77
78
|
.vgdt-row-reorder-cell {
|
|
@@ -103,19 +104,19 @@ tbody tr[data-row-drag-over="after"] {
|
|
|
103
104
|
gap: 6px;
|
|
104
105
|
}
|
|
105
106
|
|
|
106
|
-
.vgdt-row-action {
|
|
107
|
-
border: 1px solid
|
|
108
|
-
background: transparent;
|
|
109
|
-
color:
|
|
107
|
+
.vgdt-row-action {
|
|
108
|
+
border: 1px solid var(--vg-dynamic-table-actions-danger-color);
|
|
109
|
+
background: transparent;
|
|
110
|
+
color: var(--vg-dynamic-table-actions-danger-color);
|
|
110
111
|
border-radius: 8px;
|
|
111
112
|
padding: 5px 10px;
|
|
112
113
|
font-size: 12px;
|
|
113
114
|
cursor: pointer;
|
|
114
115
|
}
|
|
115
116
|
|
|
116
|
-
.vgdt-row-action:hover {
|
|
117
|
-
background:
|
|
118
|
-
color:
|
|
117
|
+
.vgdt-row-action:hover {
|
|
118
|
+
background: var(--vg-dynamic-table-actions-danger-color);
|
|
119
|
+
color: var(--vg-dynamic-table-actions-danger-contrast);
|
|
119
120
|
}
|
|
120
121
|
|
|
121
122
|
.vgdt-pan-hint {
|
|
@@ -184,10 +185,12 @@ tbody tr[data-row-drag-over="after"] {
|
|
|
184
185
|
}
|
|
185
186
|
}
|
|
186
187
|
|
|
187
|
-
@media (hover: none), (pointer: coarse), (any-pointer: coarse), (any-hover: none) {
|
|
188
|
+
@media (hover: none), (pointer: coarse), (any-pointer: coarse), (any-hover: none) {
|
|
188
189
|
.vgdt-pan-hint {
|
|
189
190
|
display: none !important;
|
|
190
191
|
}
|
|
191
|
-
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
}
|
|
192
195
|
|
|
193
196
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
@mixin pagination() {
|
|
2
|
+
&.table-pagination {
|
|
2
3
|
.vgdt-pagination {
|
|
3
4
|
padding: var(--vg-dynamic-table-pagination-padding-y) var(--vg-dynamic-table-pagination-padding-x);
|
|
4
5
|
border-top: 1px solid var(--vg-dynamic-table-pagination-border-color);
|
|
@@ -179,5 +180,7 @@
|
|
|
179
180
|
.vgdt-page--ellipsis:hover .vgdt-ellipsis-chevron {
|
|
180
181
|
display: inline;
|
|
181
182
|
}
|
|
182
|
-
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
}
|
|
183
186
|
|