vgapp 1.4.5 → 1.4.6

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 (123) hide show
  1. package/README.md +270 -270
  2. package/app/langs/en/buttons.json +17 -17
  3. package/app/langs/en/messages.json +36 -36
  4. package/app/langs/ru/buttons.json +17 -17
  5. package/app/langs/ru/messages.json +36 -36
  6. package/app/modules/vgalert/js/vgalert.js +266 -266
  7. package/app/modules/vgalert/scss/_variables.scss +16 -16
  8. package/app/modules/vgalert/scss/vgalert.scss +107 -107
  9. package/app/modules/vgcollapse/scss/_variables.scss +7 -7
  10. package/app/modules/vgcollapse/scss/vgcollapse.scss +5 -5
  11. package/app/modules/vgdropdown/scss/_variables.scss +14 -14
  12. package/app/modules/vgdropdown/scss/vgdropdown.scss +5 -5
  13. package/app/modules/vgdynamictable/index.js +4 -4
  14. package/app/modules/vgdynamictable/js/filters.js +21 -21
  15. package/app/modules/vgdynamictable/js/fixed.js +179 -179
  16. package/app/modules/vgdynamictable/js/options.js +3 -3
  17. package/app/modules/vgdynamictable/js/pagination.js +1 -1
  18. package/app/modules/vgdynamictable/js/search.js +12 -12
  19. package/app/modules/vgdynamictable/js/skeleton.js +27 -19
  20. package/app/modules/vgdynamictable/js/sortable.js +71 -71
  21. package/app/modules/vgdynamictable/js/summary-footer.js +28 -28
  22. package/app/modules/vgdynamictable/js/table-url-state.js +31 -31
  23. package/app/modules/vgdynamictable/js/utils/common.js +48 -48
  24. package/app/modules/vgdynamictable/js/vgdynamictable.js +79 -79
  25. package/app/modules/vgdynamictable/scss/_actions.scss +19 -19
  26. package/app/modules/vgdynamictable/scss/_pagination.scss +5 -5
  27. package/app/modules/vgdynamictable/scss/_skeleton.scss +11 -11
  28. package/app/modules/vgdynamictable/scss/_sortable.scss +28 -28
  29. package/app/modules/vgdynamictable/scss/_table.scss +7 -30
  30. package/app/modules/vgdynamictable/scss/_variables.scss +46 -46
  31. package/app/modules/vgdynamictable/scss/vgdynamictable.scss +28 -36
  32. package/app/modules/vgfilepreview/js/i18n.js +56 -56
  33. package/app/modules/vgfilepreview/js/renderers/image-modal.js +145 -145
  34. package/app/modules/vgfilepreview/js/renderers/image.js +92 -92
  35. package/app/modules/vgfilepreview/js/renderers/index.js +19 -19
  36. package/app/modules/vgfilepreview/js/renderers/office-modal.js +168 -168
  37. package/app/modules/vgfilepreview/js/renderers/office.js +79 -79
  38. package/app/modules/vgfilepreview/js/renderers/pdf-modal.js +260 -260
  39. package/app/modules/vgfilepreview/js/renderers/pdf.js +76 -76
  40. package/app/modules/vgfilepreview/js/renderers/playlist.js +71 -71
  41. package/app/modules/vgfilepreview/js/renderers/text-modal.js +343 -343
  42. package/app/modules/vgfilepreview/js/renderers/text.js +83 -83
  43. package/app/modules/vgfilepreview/js/renderers/video-modal.js +272 -272
  44. package/app/modules/vgfilepreview/js/renderers/video.js +80 -80
  45. package/app/modules/vgfilepreview/js/renderers/zip-modal.js +522 -522
  46. package/app/modules/vgfilepreview/js/renderers/zip.js +89 -89
  47. package/app/modules/vgfilepreview/js/vgfilepreview.js +7 -7
  48. package/app/modules/vgfilepreview/readme.md +68 -68
  49. package/app/modules/vgfilepreview/scss/_variables.scss +115 -115
  50. package/app/modules/vgfilepreview/scss/vgfilepreview.scss +463 -463
  51. package/app/modules/vgfiles/js/droppable.js +20 -9
  52. package/app/modules/vgfiles/js/render.js +153 -153
  53. package/app/modules/vgfiles/js/vgfiles.js +104 -104
  54. package/app/modules/vgfiles/readme.md +123 -123
  55. package/app/modules/vgfiles/scss/_mixins.scss +9 -9
  56. package/app/modules/vgfiles/scss/_variables.scss +41 -41
  57. package/app/modules/vgfiles/scss/vgfiles.scss +161 -161
  58. package/app/modules/vgformsender/js/hideshowpass.js +22 -22
  59. package/app/modules/vgformsender/js/vgformsender.js +7 -7
  60. package/app/modules/vgformsender/readme.md +1 -1
  61. package/app/modules/vgformsender/scss/_variables.scss +5 -5
  62. package/app/modules/vgformsender/scss/vgformsender.scss +42 -42
  63. package/app/modules/vglawcookie/js/vglawcookie.js +19 -19
  64. package/app/modules/vglawcookie/scss/_variables.scss +13 -13
  65. package/app/modules/vglawcookie/scss/vglawcookie.scss +5 -5
  66. package/app/modules/vgmodal/js/vgmodal.interaction.js +216 -216
  67. package/app/modules/vgmodal/js/vgmodal.js +355 -355
  68. package/app/modules/vgmodal/js/vgmodal.minimized.js +227 -227
  69. package/app/modules/vgmodal/scss/_variables.scss +17 -17
  70. package/app/modules/vgmodal/scss/vgmodal.scss +77 -77
  71. package/app/modules/vgnav/js/vgnav.js +180 -180
  72. package/app/modules/vgnav/scss/_breakpoints.scss +36 -36
  73. package/app/modules/vgnav/scss/_hamburger.scss +5 -5
  74. package/app/modules/vgnav/scss/_placement.scss +5 -5
  75. package/app/modules/vgnav/scss/_toggle.scss +5 -5
  76. package/app/modules/vgnav/scss/_variables.scss +26 -26
  77. package/app/modules/vgnav/scss/vgnav.scss +41 -41
  78. package/app/modules/vgnestable/README.md +39 -39
  79. package/app/modules/vgnestable/js/vgnestable.js +358 -358
  80. package/app/modules/vgnestable/scss/_variables.scss +35 -35
  81. package/app/modules/vgnestable/scss/vgnestable.scss +55 -55
  82. package/app/modules/vgrangeslider/js/skins.js +222 -222
  83. package/app/modules/vgrangeslider/js/vgrangeslider.js +704 -704
  84. package/app/modules/vgrangeslider/scss/_variables.scss +55 -55
  85. package/app/modules/vgrangeslider/scss/vgrangeslider.scss +239 -239
  86. package/app/modules/vgrollup/scss/_variables.scss +15 -15
  87. package/app/modules/vgrollup/scss/vgrollup.scss +6 -6
  88. package/app/modules/vgselect/js/vgselect.js +129 -129
  89. package/app/modules/vgselect/readme.md +11 -11
  90. package/app/modules/vgselect/scss/_variables.scss +50 -50
  91. package/app/modules/vgselect/scss/vgselect.scss +48 -48
  92. package/app/modules/vgsidebar/js/vgsidebar.js +79 -79
  93. package/app/modules/vgsidebar/scss/_variables.scss +10 -10
  94. package/app/modules/vgsidebar/scss/vgsidebar.scss +5 -5
  95. package/app/modules/vgtabs/scss/_variables.scss +23 -23
  96. package/app/modules/vgtabs/scss/vgtabs.scss +5 -5
  97. package/app/modules/vgtoast/scss/_variables.scss +13 -13
  98. package/app/modules/vgtoast/scss/vgtoast.scss +5 -5
  99. package/app/modules/vgtooltip/js/vgtooltip.js +107 -51
  100. package/app/modules/vgtooltip/scss/_variables.scss +10 -10
  101. package/app/modules/vgtooltip/scss/vgtooltip.scss +5 -5
  102. package/app/utils/js/components/audio-metadata.js +240 -240
  103. package/app/utils/js/components/backdrop.js +116 -116
  104. package/app/utils/js/components/file-icon.js +109 -109
  105. package/app/utils/js/components/file-preview.js +304 -304
  106. package/app/utils/js/components/sanitize.js +150 -150
  107. package/app/utils/js/components/video-metadata.js +140 -140
  108. package/app/utils/scss/_backdrop.scss +5 -5
  109. package/app/utils/scss/_theme-default.scss +12 -12
  110. package/app/utils/scss/_theme.scss +7 -7
  111. package/app/utils/scss/_tokens.scss +170 -170
  112. package/app/utils/scss/default.scss +9 -9
  113. package/app/utils/scss/functions.scss +21 -21
  114. package/app/utils/scss/index.scss +4 -4
  115. package/app/utils/scss/mixin.scss +16 -16
  116. package/app/utils/scss/variables.scss +105 -105
  117. package/app/vgapp.js +295 -295
  118. package/build/vgapp.css +1 -1
  119. package/build/vgapp.css.map +1 -1
  120. package/build/vgapp.js +1 -1
  121. package/build/vgapp.js.map +1 -1
  122. package/index.scss +20 -20
  123. 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
- [![npm](https://img.shields.io/npm/v/vgapp.svg?style=flat-square&maxAge=600)](https://www.npmjs.com/package/vgapp) [![npm](https://img.shields.io/npm/l/vgapp.svg?style=flat-square)]()
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
+ [![npm](https://img.shields.io/npm/v/vgapp.svg?style=flat-square&maxAge=600)](https://www.npmjs.com/package/vgapp) [![npm](https://img.shields.io/npm/l/vgapp.svg?style=flat-square)]()
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
+ }