vgapp 1.2.4 → 1.2.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.
- package/CHANGELOG.md +66 -7
- package/README.md +2 -1
- package/agents.md +2 -2
- package/app/modules/base-module.js +87 -10
- package/app/modules/vgalert/js/vgalert.js +133 -202
- package/app/modules/vgalert/readme.md +105 -46
- package/app/modules/vgalert/scss/vgalert.scss +18 -0
- package/app/modules/vgdynamictable/index.js +5 -0
- package/app/modules/vgdynamictable/js/editable.js +438 -0
- package/app/modules/vgdynamictable/js/expandable.js +248 -0
- package/app/modules/vgdynamictable/js/filters.js +450 -0
- package/app/modules/vgdynamictable/js/fixed.js +566 -0
- package/app/modules/vgdynamictable/js/options.js +646 -0
- package/app/modules/vgdynamictable/js/pagination.js +623 -0
- package/app/modules/vgdynamictable/js/search.js +82 -0
- package/app/modules/vgdynamictable/js/skeleton.js +136 -0
- package/app/modules/vgdynamictable/js/sortable.js +442 -0
- package/app/modules/vgdynamictable/js/summary-footer.js +284 -0
- package/app/modules/vgdynamictable/js/table-remote.js +821 -0
- package/app/modules/vgdynamictable/js/table-state.js +243 -0
- package/app/modules/vgdynamictable/js/table-url-state.js +444 -0
- package/app/modules/vgdynamictable/js/utils/common.js +48 -0
- package/app/modules/vgdynamictable/js/vgdynamictable.js +3829 -0
- package/app/modules/vgdynamictable/js/viewport.js +322 -0
- package/app/modules/vgdynamictable/readme.md +251 -0
- package/app/modules/vgdynamictable/scss/_actions.scss +193 -0
- package/app/modules/vgdynamictable/scss/_pagination.scss +183 -0
- package/app/modules/vgdynamictable/scss/_skeleton.scss +60 -0
- package/app/modules/vgdynamictable/scss/_sortable.scss +63 -0
- package/app/modules/vgdynamictable/scss/_table.scss +157 -0
- package/app/modules/vgdynamictable/scss/_variables.scss +130 -0
- package/app/modules/vgdynamictable/scss/vgdynamictable.scss +267 -0
- package/app/modules/vgrangeslider/index.js +3 -0
- package/app/modules/vgrangeslider/js/skins.js +222 -0
- package/app/modules/vgrangeslider/js/vgrangeslider.js +704 -0
- package/app/modules/vgrangeslider/readme.md +523 -0
- package/app/modules/vgrangeslider/scss/_variables.scss +53 -0
- package/app/modules/vgrangeslider/scss/vgrangeslider.scss +240 -0
- package/app/modules/vgtoast/js/vgtoast.js +111 -111
- package/app/modules/vgtooltip/index.js +3 -0
- package/app/modules/vgtooltip/js/vgtooltip.js +493 -0
- package/app/modules/vgtooltip/readme.md +181 -0
- package/app/modules/vgtooltip/scss/_variables.scss +15 -0
- package/app/modules/vgtooltip/scss/vgtooltip.scss +64 -0
- package/app/utils/js/components/ajax.js +116 -7
- package/app/utils/js/components/placement.js +112 -41
- package/build/vgapp.css +1 -1
- package/build/vgapp.css.map +1 -1
- package/index.js +20 -17
- package/index.scss +9 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,73 @@
|
|
|
1
|
-
|
|
1
|
+
# VEGAS-APP 1.2.6 (Июнь, 29, 2026)
|
|
2
|
+
## Новые фичи
|
|
3
|
+
* В `BaseModule` добавлены универсальные route/fetch helpers: `requestRoute()` и `buildRouteUrl()` с нормализацией `headers`, `credentials`, query-параметров, JSON/FormData body и единым форматом ошибок ответа.
|
|
4
|
+
* В `VGDynamicTable` remote-режим переведён на декларативную request-конфигурацию: добавлена поддержка `data-request-method`, `data-request-credentials`, `data-request-params` и построения export URL через общую route-конфигурацию.
|
|
5
|
+
|
|
6
|
+
## Изменения
|
|
7
|
+
* В `VGDynamicTable` удалён отдельный request helper `app/modules/vgdynamictable/js/request.js`, а remote-загрузка и export унифицированы через новый transport в `BaseModule`.
|
|
8
|
+
* В `VGDynamicTable` доработана виртуализация: добавлены верхний и нижний spacer-rows, динамическое измерение высоты строк, корректный teardown scroll-binding и исключение spacer-строк из обычного row-цикла.
|
|
9
|
+
* В `VGDynamicTable` упрощена тема таблицы: базовые light-токены перенесены в основной набор переменных, удалены отдельные `theme-light/theme-dark/theme-auto` ветки, для virtual spacer-строк добавлены нейтральные стили.
|
|
10
|
+
* Добавлена документация для `VGDynamicTable`, а документация `VGRangeSlider` оформлена как полноценный README с API, Data API, событиями, skin-режимами и примерами интеграции.
|
|
11
|
+
* Обновлена версия пакета в `package.json`: `1.2.5` -> `1.2.6`.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# VEGAS-APP 1.2.5 (Июнь, 25, 2026)
|
|
16
|
+
## Новые фичи
|
|
17
|
+
* Добавлен новый модуль `VGTooltip` с режимами `tooltip` и `popover`, Data API, автопозиционированием, fallback placement, закрытием по `Esc` и клику вне элемента.
|
|
18
|
+
* В `VGAlert` добавлен режим рендера `render.type = 'overlay'` для встраивания alert поверх текущей `.vg-modal` или `.vg-sidebar`.
|
|
19
|
+
* Добавлен новый модуль `VGRangeSlider` с single/range режимами, Data API, tooltip, label, hidden-input синхронизацией, внешними output-target, методами `getValue()/setValue()/enable()/disable()` и событиями `vg.rangeslider.*`.
|
|
20
|
+
* В `VGRangeSlider` добавана система скинов: `ruler` со шкалой и делениями, а также `status` с цветовыми состояниями на базе utility-переменных `$success`, `$warning`, `$danger`.
|
|
21
|
+
* Добавлен и экспортирован `VGDynamicTable`: основной модуль таблицы с local/remote режимами, callback/event API, сортировкой, фильтрами, поиском, пагинацией, sticky header, clone-sticky header, summary/footer, row actions и persistent state.
|
|
22
|
+
|
|
23
|
+
## Изменения
|
|
24
|
+
* В `VGAlert` рендер modal/overlay унифицирован: контейнер и экземпляр рендера создаются один раз, удалены отладочные `console.log`, закрытие вынесено в общий helper.
|
|
25
|
+
* В `VGAlert` отмена confirm теперь корректно отклоняет `Promise`, а обработчик `vg.modal.hide` подписывается только для modal-режима и срабатывает один раз.
|
|
26
|
+
* В `VGTooltip` глобальные обработчики `Esc` и клика вне элемента переведены на работу со всеми открытыми экземплярами, а сброс placement-классов вынесен в общий список.
|
|
27
|
+
* В `VGRangeSlider` исправлены ошибки инициализации и синхронизации: вставка DOM для `input[type="range"]`, работа с вложенными data-параметрами (`output.*`, `name.*`, `input.*`, `label.words`, `status.*`), форматирование пустого prefix/suffix и merged tooltip в range-режиме.
|
|
28
|
+
* В `VGRangeSlider` доработаны стили и геометрия: размеры вынесены в переменные, позиционирование fill/tooltip/шкалы переведено на pixel-based расчёт с учётом ширины thumb, настроены z-index слои, связана геометрия `ruler`, скрыты обычные labels для `ruler`-скина и добавлено dim-active поведение для делений.
|
|
29
|
+
* В `VGRangeSlider` `status`-skin расширен поддержкой `status.by = from|to|avg`, `labelWords` и пробросом статуса (`tone`, `label`, `percent`, `sourceValue`) в события и callback detail.
|
|
30
|
+
* В `VGDynamicTable` подключён публичный export через `index.js`, `Editable` переведён на получение инстанса таблицы через `Data.get(...)`, а инициализация переведена на `EventHandler.on(...)`.
|
|
31
|
+
* В `VGDynamicTable` доработаны sticky-сценарии и таблица-обёртка: стили sticky header вынесены на уровень модуля, добавлен clone sticky header с синхронизацией scroll/select-all/drag-sort interactions, скорректированы fixed-column, striped и hover состояния.
|
|
32
|
+
* В `VGDynamicTable` обновлены pagination и интеграции: локальный импорт `VGDropdown`, scroll-to-top при пагинации, summary node, persistent/view state, remote/local action callbacks и события `vgdt:*`.
|
|
33
|
+
* Обновлена документация `VGAlert` и `VGTooltip`, из директории `app/modules/vgalert/js/old/` удалены устаревшие файлы.
|
|
34
|
+
* Обновлена версия пакета в `package.json`: `1.2.4` -> `1.2.5`.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
# VEGAS-APP 1.2.4 (Июнь, 19, 2026)
|
|
39
|
+
## Новые фичи
|
|
40
|
+
* В `VGModal` добавлены параметры `persistent` и `state` для opt-in persistent-модалок и сохранения состояния drag/resize через `localStorage`.
|
|
41
|
+
|
|
42
|
+
## Изменения
|
|
43
|
+
* В `VGModal` persistent-модалки исключены из селектора обычных открытых окон и больше не закрываются автоматически при открытии следующей модалки.
|
|
44
|
+
* В `VGModal` сохранение и восстановление inline-состояния диалога и контента встроено в цикл `show/hide`, включая поддержку пользовательского `state.key`.
|
|
45
|
+
* В `VGModal` при `backdrop: true` клик по backdrop закрывает активную модалку через экземпляр текущего окна, а логика закрытия вынесена из общего `Backdrop`.
|
|
46
|
+
* В `VGModal` при `backdrop: false` модалка больше не блокирует страницу: добавлен `pointer-events: none` на контейнер и отдельная ветка корректного cleanup без backdrop.
|
|
47
|
+
* Обновлена версия пакета в `package.json`: `1.2.3` -> `1.2.4`.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
# VEGAS-APP 1.2.3 (Июнь, 16, 2026)
|
|
52
|
+
## Изменения
|
|
53
|
+
* В `VGToast` исправлен lifecycle `show/hide/dispose`: добавлены защита от повторного hide, очистка отложенного скрытия и проверки актуального элемента в async callback.
|
|
54
|
+
* В `VGToast` `shown/hidden` больше не срабатывают по уже удалённому экземпляру, а `_isShown()` стал null-safe.
|
|
55
|
+
* В `VGFormSender` параметр `alert.toast.closeModalsBeforeToast` по умолчанию переключён в `true`, чтобы перед показом toast закрывались открытые модалки.
|
|
56
|
+
* В событие `vg.modal.loaded` добавлен `relatedTarget`, чтобы обработчики загрузки получали элемент-источник открытия модалки.
|
|
57
|
+
* Обновлена версия пакета в `package.json`: `1.2.2` -> `1.2.3`.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
# VEGAS-APP 1.2.2 (Июнь, 16, 2026)
|
|
2
61
|
## Новые фичи
|
|
3
62
|
* В VGFiles добавлена настройка кнопок подтверждения удаления через `removes.buttons`, `removes.single.buttons` и `removes.all.buttons`.
|
|
4
63
|
* В VGFormSender добавлены опции `alert.modal.closeModalsBeforeModal` и `alert.toast.closeModalsBeforeToast` для управления закрытием открытых модалок перед показом alert-modal или toast.
|
|
5
64
|
|
|
6
|
-
## Изменения
|
|
7
|
-
* В VGFormSender при `alert.modal.closeModalsBeforeModal = false` новая alert-modal открывается поверх существующей модалки, получает класс `vg-modal-stacked` и повышенный `z-index`.
|
|
8
|
-
* В VGFormSender закрытие открытых Bootstrap/VGModal модалок вынесено в общий helper.
|
|
9
|
-
* В VGFormSender служебный параметр `closeModalsBeforeToast` не передается в настройки VGToast.
|
|
10
|
-
* В VGModal persistent-модалка помечается отдельным признаком и не влияет на расчёт открытых модалок, а клик по backdrop закрывает именно активную модалку.
|
|
11
|
-
* Обновлена версия пакета в `package.json`: `1.2.1` -> `1.2.2`.
|
|
65
|
+
## Изменения
|
|
66
|
+
* В VGFormSender при `alert.modal.closeModalsBeforeModal = false` новая alert-modal открывается поверх существующей модалки, получает класс `vg-modal-stacked` и повышенный `z-index`.
|
|
67
|
+
* В VGFormSender закрытие открытых Bootstrap/VGModal модалок вынесено в общий helper.
|
|
68
|
+
* В VGFormSender служебный параметр `closeModalsBeforeToast` не передается в настройки VGToast.
|
|
69
|
+
* В VGModal persistent-модалка помечается отдельным признаком и не влияет на расчёт открытых модалок, а клик по backdrop закрывает именно активную модалку.
|
|
70
|
+
* Обновлена версия пакета в `package.json`: `1.2.1` -> `1.2.2`.
|
|
12
71
|
|
|
13
72
|
---
|
|
14
73
|
|
package/README.md
CHANGED
|
@@ -38,7 +38,8 @@ npm i vgapp
|
|
|
38
38
|
- `VGSidebar` — боковые панели с управлением открытием/закрытием.
|
|
39
39
|
- `VGSpy` — scroll‑spy для подсветки активных ссылок по секциям.
|
|
40
40
|
- `VGTabs` — вкладки с переключением контента и поддержкой URL/hash.
|
|
41
|
-
- `VGToast` — всплывающие уведомления со стеком и автозакрытием.
|
|
41
|
+
- `VGToast` — всплывающие уведомления со стеком и автозакрытием.
|
|
42
|
+
- `VGTooltip` — tooltip/popover подсказки с Data API, автопозиционированием и закрытием по `Esc`/клику вне элемента.
|
|
42
43
|
|
|
43
44
|
## Authors
|
|
44
45
|
|
package/agents.md
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
### Свод правил:
|
|
8
8
|
1. Правила по changelog для проекта vegas-app:
|
|
9
|
-
- Правило: при команде "записать в changelog" или "дополни changelog" записываем вкратце изменения в файл `CHANGELOG.md`, которые были сделаны с прошлой версии. Записываем так: Версия (смотри `package.json`), дата и построчно что было внесено, нужно как-то выделить новые фичи.
|
|
9
|
+
- Правило: при команде "записать в changelog" или "дополни changelog" записываем вкратце изменения в файл `D:\OSPanel\home\projects\vegas-app\CHANGELOG.md`, которые были сделаны с прошлой версии. Записываем так: Версия (смотри `package.json`), дата и построчно что было внесено, нужно как-то выделить новые фичи.
|
|
10
10
|
- Смотрим только проект и репозиторий vegas-app, а не связанные.
|
|
11
11
|
- Если версия в `package.json` не изменилась, нужно проверить, есть ли эта версия в `CHANGELOG.md`.
|
|
12
12
|
- Если запись версии уже есть, дописывать изменения в существующую запись (как дополнение), а не создавать новый блок той же версии.
|
|
13
13
|
- Если записи версии нет, создавать новый блок с версией из `package.json`, датой и списком изменений, запись добавляется сверху.
|
|
14
|
-
2. Все файлы должны иметь кодировку UTF-8.
|
|
14
|
+
2. Все файлы должны иметь кодировку UTF-8.
|
|
@@ -15,8 +15,8 @@ import Animation from "../utils/js/components/animation";
|
|
|
15
15
|
import Ajax from "../utils/js/components/ajax";
|
|
16
16
|
import Html from "../utils/js/components/templater";
|
|
17
17
|
|
|
18
|
-
class BaseModule {
|
|
19
|
-
constructor(element) {
|
|
18
|
+
class BaseModule {
|
|
19
|
+
constructor(element) {
|
|
20
20
|
if (!element) return
|
|
21
21
|
|
|
22
22
|
this._element = Selectors.find(element);
|
|
@@ -54,9 +54,13 @@ class BaseModule {
|
|
|
54
54
|
* - timeout = задержка перед отправкой, по умолчанию 0
|
|
55
55
|
* @param callback
|
|
56
56
|
*/
|
|
57
|
-
_route(callback) {
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
_route(callback) {
|
|
58
|
+
if (typeof callback !== 'function') {
|
|
59
|
+
return this._requestRoute(callback);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
let $content = null,
|
|
63
|
+
timeout = this._params.ajax.timeout || 0;
|
|
60
64
|
|
|
61
65
|
if (this._isLoaded) return;
|
|
62
66
|
|
|
@@ -133,10 +137,83 @@ class BaseModule {
|
|
|
133
137
|
if (this._params.ajax.method.toLowerCase() === 'delete') {
|
|
134
138
|
ajax.delete(this._params.ajax.route, ajaxData);
|
|
135
139
|
}
|
|
136
|
-
}, timeout);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
+
}, timeout);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
_requestRoute(options = {}) {
|
|
144
|
+
const config = this._normalizeRouteRequestOptions(options);
|
|
145
|
+
return Ajax.requestRoute(config);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
_buildRouteUrl(params = {}, endpoint = '', options = {}) {
|
|
149
|
+
const config = this._normalizeRouteRequestOptions(Object.assign({}, options, {
|
|
150
|
+
params,
|
|
151
|
+
route: endpoint || options.route || '',
|
|
152
|
+
}));
|
|
153
|
+
return Ajax.buildRouteUrl(config.route, {
|
|
154
|
+
params: config.params,
|
|
155
|
+
baseParams: config.baseParams,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
_normalizeRouteRequestOptions(options = {}) {
|
|
160
|
+
const requestOptions = this._params && isObject(this._params.request)
|
|
161
|
+
? this._params.request
|
|
162
|
+
: {};
|
|
163
|
+
const ajaxOptions = this._params && isObject(this._params.ajax)
|
|
164
|
+
? this._params.ajax
|
|
165
|
+
: {};
|
|
166
|
+
const source = isObject(options) ? options : {};
|
|
167
|
+
const route = String(
|
|
168
|
+
source.route
|
|
169
|
+
|| source.endpoint
|
|
170
|
+
|| requestOptions.route
|
|
171
|
+
|| ajaxOptions.route
|
|
172
|
+
|| ''
|
|
173
|
+
).trim();
|
|
174
|
+
const method = String(
|
|
175
|
+
source.method
|
|
176
|
+
|| requestOptions.method
|
|
177
|
+
|| ajaxOptions.method
|
|
178
|
+
|| 'GET'
|
|
179
|
+
).toUpperCase().trim() || 'GET';
|
|
180
|
+
const credentials = String(
|
|
181
|
+
source.credentials
|
|
182
|
+
|| requestOptions.credentials
|
|
183
|
+
|| 'same-origin'
|
|
184
|
+
).trim() || 'same-origin';
|
|
185
|
+
const headers = mergeDeepObject(
|
|
186
|
+
{
|
|
187
|
+
'Accept': 'application/json',
|
|
188
|
+
'X-Requested-With': 'XMLHttpRequest',
|
|
189
|
+
},
|
|
190
|
+
isObject(requestOptions.headers) ? requestOptions.headers : {},
|
|
191
|
+
isObject(source.headers) ? source.headers : {}
|
|
192
|
+
);
|
|
193
|
+
const baseParams = mergeDeepObject(
|
|
194
|
+
{},
|
|
195
|
+
isObject(requestOptions.params) ? requestOptions.params : {},
|
|
196
|
+
isObject(source.baseParams) ? source.baseParams : {},
|
|
197
|
+
isObject(source.paramsBase) ? source.paramsBase : {}
|
|
198
|
+
);
|
|
199
|
+
const params = isObject(source.params) ? source.params : {};
|
|
200
|
+
const body = source.body !== undefined
|
|
201
|
+
? source.body
|
|
202
|
+
: (source.data !== undefined ? source.data : null);
|
|
203
|
+
return {
|
|
204
|
+
route,
|
|
205
|
+
method,
|
|
206
|
+
credentials,
|
|
207
|
+
headers,
|
|
208
|
+
baseParams,
|
|
209
|
+
params,
|
|
210
|
+
body,
|
|
211
|
+
signal: source.signal || null,
|
|
212
|
+
responseType: String(source.responseType || source.parse || 'auto').toLowerCase().trim() || 'auto',
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
_dismissElement() {
|
|
140
217
|
let cross = getSVG('cross'),
|
|
141
218
|
button = this._element.querySelector('.vg-btn-close');
|
|
142
219
|
|
|
@@ -171,4 +248,4 @@ class BaseModule {
|
|
|
171
248
|
}
|
|
172
249
|
}
|
|
173
250
|
|
|
174
|
-
export default BaseModule;
|
|
251
|
+
export default BaseModule;
|