vgapp 1.2.5 → 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.
Files changed (42) hide show
  1. package/CHANGELOG.md +58 -35
  2. package/agents.md +2 -2
  3. package/app/modules/base-module.js +87 -10
  4. package/app/modules/vgalert/js/vgalert.js +3 -3
  5. package/app/modules/vgdynamictable/index.js +5 -0
  6. package/app/modules/vgdynamictable/js/editable.js +438 -0
  7. package/app/modules/vgdynamictable/js/expandable.js +248 -0
  8. package/app/modules/vgdynamictable/js/filters.js +450 -0
  9. package/app/modules/vgdynamictable/js/fixed.js +566 -0
  10. package/app/modules/vgdynamictable/js/options.js +646 -0
  11. package/app/modules/vgdynamictable/js/pagination.js +623 -0
  12. package/app/modules/vgdynamictable/js/search.js +82 -0
  13. package/app/modules/vgdynamictable/js/skeleton.js +136 -0
  14. package/app/modules/vgdynamictable/js/sortable.js +442 -0
  15. package/app/modules/vgdynamictable/js/summary-footer.js +284 -0
  16. package/app/modules/vgdynamictable/js/table-remote.js +821 -0
  17. package/app/modules/vgdynamictable/js/table-state.js +243 -0
  18. package/app/modules/vgdynamictable/js/table-url-state.js +444 -0
  19. package/app/modules/vgdynamictable/js/utils/common.js +48 -0
  20. package/app/modules/vgdynamictable/js/vgdynamictable.js +3829 -0
  21. package/app/modules/vgdynamictable/js/viewport.js +322 -0
  22. package/app/modules/vgdynamictable/readme.md +251 -0
  23. package/app/modules/vgdynamictable/scss/_actions.scss +193 -0
  24. package/app/modules/vgdynamictable/scss/_pagination.scss +183 -0
  25. package/app/modules/vgdynamictable/scss/_skeleton.scss +60 -0
  26. package/app/modules/vgdynamictable/scss/_sortable.scss +63 -0
  27. package/app/modules/vgdynamictable/scss/_table.scss +157 -0
  28. package/app/modules/vgdynamictable/scss/_variables.scss +130 -0
  29. package/app/modules/vgdynamictable/scss/vgdynamictable.scss +267 -0
  30. package/app/modules/vgrangeslider/index.js +3 -0
  31. package/app/modules/vgrangeslider/js/skins.js +222 -0
  32. package/app/modules/vgrangeslider/js/vgrangeslider.js +704 -0
  33. package/app/modules/vgrangeslider/readme.md +523 -0
  34. package/app/modules/vgrangeslider/scss/_variables.scss +53 -0
  35. package/app/modules/vgrangeslider/scss/vgrangeslider.scss +240 -0
  36. package/app/utils/js/components/ajax.js +116 -7
  37. package/build/vgapp.css +2 -3246
  38. package/build/vgapp.css.map +1 -1
  39. package/build/vgapp.js +2 -30
  40. package/index.js +2 -0
  41. package/index.scss +6 -0
  42. package/package.json +1 -1
@@ -0,0 +1,646 @@
1
+ const DEFAULT_OPTIONS = {
2
+ // Режим темы таблицы.
3
+ // data-атрибуты: data-theme
4
+ theme: 'auto', // auto | light | dark
5
+
6
+ // Ключ локали для выбора словаря i18n.
7
+ // data-атрибуты: data-locale
8
+ locale: 'ru',
9
+
10
+ // Локализованные словари интерфейса.
11
+ // data-атрибуты: нет прямого (обычно задается из JS)
12
+ i18n: {
13
+ ru: {
14
+ pagination: {
15
+ // Подпись блока per-page.
16
+ // data-атрибуты: data-pagination-per-page-label
17
+ perPageLabel: 'Строк на странице',
18
+ // Суффикс варианта per-page.
19
+ // data-атрибуты: data-pagination-per-page-option-suffix
20
+ perPageOptionSuffix: 'на страницу',
21
+ // Текст кнопки "назад".
22
+ // data-атрибуты: data-pagination-prev-label
23
+ prevLabel: 'Назад',
24
+ // Текст кнопки "вперед".
25
+ // data-атрибуты: data-pagination-next-label
26
+ nextLabel: 'Вперед',
27
+ // Текст кнопки быстрого перехода.
28
+ // data-атрибуты: data-pagination-quick-jump-button-label
29
+ quickJumpButtonLabel: 'Перейти',
30
+ },
31
+ table: {
32
+ // Текст состояния загрузки.
33
+ // data-атрибуты: data-table-loading-label
34
+ loading: 'Загрузка данных...',
35
+ // Текст пустого состояния.
36
+ // data-атрибуты: data-table-empty-label
37
+ empty: 'Нет данных.',
38
+ // Текст состояния ошибки.
39
+ // data-атрибуты: data-table-error-label
40
+ error: 'Не удалось загрузить данные.',
41
+ // Текст кнопки повторного запроса при ошибке.
42
+ // data-атрибуты: data-table-retry-label
43
+ retry: 'Повторить',
44
+ // Подсказка для горизонтальной прокрутки таблицы.
45
+ // data-атрибуты: data-table-shift-drag-hint
46
+ shiftDragHint: 'Зажмите Shift и тяните мышью для прокрутки таблицы.',
47
+ },
48
+ sortable: {
49
+ // Подсказка сортировки по возрастанию.
50
+ // data-атрибуты: data-sort-asc-label
51
+ ascLabel: 'Сортировка по возрастанию',
52
+ // Подсказка сортировки по убыванию.
53
+ // data-атрибуты: data-sort-desc-label
54
+ descLabel: 'Сортировка по убыванию',
55
+ },
56
+ summary: {
57
+ // Подпись общего количества.
58
+ // data-атрибуты: data-summary-found-label
59
+ foundLabel: 'Найдено',
60
+ // Подпись активного поиска.
61
+ // data-атрибуты: data-summary-search-label
62
+ searchLabel: 'Поиск',
63
+ // Подпись видимых строк.
64
+ // data-атрибуты: data-summary-visible-rows-label
65
+ visibleRowsLabel: 'Строк на странице',
66
+ // Подпись суммы цен.
67
+ // data-атрибуты: data-summary-page-price-sum-label
68
+ pagePriceSumLabel: 'Сумма цен',
69
+ // Подпись суммарного остатка.
70
+ // data-атрибуты: data-summary-page-stock-sum-label
71
+ pageStockSumLabel: 'Суммарный остаток',
72
+ // Подпись среднего рейтинга.
73
+ // data-атрибуты: data-summary-page-avg-rating-label
74
+ pageAvgRatingLabel: 'Средний рейтинг',
75
+ },
76
+ },
77
+ en: {
78
+ pagination: {
79
+ perPageLabel: 'Rows per page',
80
+ perPageOptionSuffix: 'page',
81
+ prevLabel: 'Prev',
82
+ nextLabel: 'Next',
83
+ quickJumpButtonLabel: 'Go',
84
+ },
85
+ table: {
86
+ loading: 'Loading data...',
87
+ empty: 'No data available.',
88
+ error: 'Failed to load data.',
89
+ retry: 'Retry',
90
+ shiftDragHint: 'Hold Shift and drag to scroll the table.',
91
+ },
92
+ sortable: {
93
+ ascLabel: 'Sort ascending',
94
+ descLabel: 'Sort descending',
95
+ },
96
+ summary: {
97
+ foundLabel: 'Found',
98
+ searchLabel: 'Search',
99
+ visibleRowsLabel: 'Rows on page',
100
+ pagePriceSumLabel: 'Price sum',
101
+ pageStockSumLabel: 'Total stock',
102
+ pageAvgRatingLabel: 'Average rating',
103
+ },
104
+ },
105
+ },
106
+
107
+ // Локальный источник строк (без remote API).
108
+ // data-атрибуты: нет прямого
109
+ data: [],
110
+
111
+ fixed: {
112
+ // data-attributes: data-fixed-columns
113
+ columns: '',
114
+ },
115
+
116
+ views: {
117
+ storage: {
118
+ // data-attributes: data-views-storage-key
119
+ key: '',
120
+ },
121
+ },
122
+
123
+ request: {
124
+ // URL endpoint для remote-запросов.
125
+ // data-атрибуты: data-request-route
126
+ route: '',
127
+ // HTTP-метод запроса.
128
+ // data-атрибуты: data-request-method
129
+ method: 'GET',
130
+ // Режим credentials для fetch.
131
+ // data-атрибуты: data-request-credentials
132
+ credentials: 'same-origin',
133
+ // Базовые HTTP-заголовки.
134
+ // data-атрибуты: нет прямого
135
+ headers: { 'Accept': 'application/json' },
136
+ // Базовые query-параметры для каждого запроса.
137
+ // data-атрибуты: data-request-params (json)
138
+ params: {},
139
+ // Маппинг внутренних параметров в backend-имена (например, q -> search).
140
+ // data-атрибуты: data-request-parammap
141
+ parammap: {},
142
+ // Режим чтения ответа: data | view | auto.
143
+ // data-атрибуты: data-request-responsemode
144
+ responsemode: 'data',
145
+ // Dot-path до массива строк в JSON.
146
+ // data-атрибуты: data-request-datapath
147
+ datapath: 'data',
148
+ // Dot-path до meta в JSON.
149
+ // data-атрибуты: data-request-metapath
150
+ metapath: 'meta',
151
+ // Dot-path до server-rendered HTML строк.
152
+ // data-атрибуты: data-request-viewpath
153
+ viewpath: 'view.tbody',
154
+ // Имя параметра для запроса server-rendered view.
155
+ // data-атрибуты: data-request-viewparam
156
+ viewparam: 'view',
157
+ // Значение параметра для server-rendered view.
158
+ // data-атрибуты: data-request-viewvalue
159
+ viewvalue: 'rows',
160
+ // Имя параметра списка полей для view-режима.
161
+ // data-атрибуты: data-request-fieldsparam
162
+ fieldsparam: 'fields',
163
+ cache: {
164
+ // data-attributes: data-request-cache-enable
165
+ enable: true,
166
+ // data-attributes: data-request-cache-ttl
167
+ ttl: 30000,
168
+ // data-attributes: data-request-cache-max
169
+ max: 30,
170
+ },
171
+ export: {
172
+ // data-attributes: data-request-export-route
173
+ route: '',
174
+ },
175
+ },
176
+
177
+ pagination: {
178
+ // Canonical key for enable flag.
179
+ // data-attributes: data-pagination-enable
180
+ enable: false,
181
+ // Начальная страница.
182
+ // data-атрибуты: data-pagination-page
183
+ page: 1,
184
+ // Начальный per-page.
185
+ // data-атрибуты: data-pagination-perPage | data-pagination-per-page
186
+ perPage: 10,
187
+ // Canonical key for page size.
188
+ // data-attributes: data-pagination-per
189
+ per: 10,
190
+ // Максимально допустимый per-page.
191
+ // data-атрибуты: data-pagination-maxPerPage | data-pagination-max-per-page
192
+ maxPerPage: 100,
193
+ // Canonical key for max page size.
194
+ // data-attributes: data-pagination-max
195
+ max: 100,
196
+ // Сохранять страницу в localStorage.
197
+ // data-атрибуты: data-pagination-persist-page
198
+ persistPage: true,
199
+ // Сохранять per-page в localStorage.
200
+ // data-атрибуты: data-pagination-persist-per-page
201
+ persistPerPage: true,
202
+ persist: {
203
+ // data-attributes: data-pagination-persist-page
204
+ page: true,
205
+ // data-attributes: data-pagination-persist-per
206
+ per: true,
207
+ },
208
+ // Ключ storage для per-page.
209
+ // data-атрибуты: data-pagination-storage-key
210
+ storageKey: '',
211
+ // Ключ storage для page.
212
+ // data-атрибуты: data-pagination-page-storage-key
213
+ pageStorageKey: '',
214
+ storage: {
215
+ // data-attributes: data-pagination-storage-key
216
+ key: '',
217
+ },
218
+ pageStorage: {
219
+ storage: {
220
+ // data-attributes: data-pagination-page-storage-key
221
+ key: '',
222
+ },
223
+ },
224
+ // Фиксированное число страниц (опционально).
225
+ // data-атрибуты: data-pagination-totalPages | data-pagination-total-pages
226
+ totalPages: null,
227
+ // Позиция пагинатора.
228
+ // data-атрибуты: data-pagination-position
229
+ position: 'bottom', // top | bottom | both
230
+ // Выравнивание пагинатора.
231
+ // data-атрибуты: data-pagination-align
232
+ align: 'left', // left | center | right | between
233
+ // Режим рендера контролов.
234
+ // data-атрибуты: data-pagination-renderMode | data-pagination-render-mode
235
+ renderMode: 'auto', // auto | class | markup
236
+ // Использовать многоточия.
237
+ // data-атрибуты: data-pagination-ellipsis
238
+ ellipsis: true,
239
+ // Порог появления многоточий.
240
+ // data-атрибуты: data-pagination-ellipsisAfter | data-pagination-ellipsis-after
241
+ ellipsisAfter: 5,
242
+ // Максимум видимых кнопок страниц.
243
+ // data-атрибуты: data-pagination-maxVisiblePages | data-pagination-max-visible-pages
244
+ maxVisiblePages: 5,
245
+ // Показывать контрол per-page.
246
+ // data-атрибуты: data-pagination-showPerPage | data-pagination-show-per-page
247
+ showPerPage: true,
248
+ // Показывать подпись рядом с per-page.
249
+ // data-атрибуты: data-pagination-showPerPageLabel | data-pagination-show-per-page-label
250
+ showPerPageLabel: false,
251
+ // Прокручивать к началу таблицы при смене страницы.
252
+ // data-атрибуты: data-pagination-scrollToTop | data-pagination-scroll-to-top
253
+ scrollToTop: true,
254
+ // Прокручивать страницу к началу окна браузера при смене страницы.
255
+ // data-атрибуты: data-pagination-scrollToWindowTop | data-pagination-scroll-to-window-top
256
+ scrollToWindowTop: false,
257
+ // Режим быстрого перехода.
258
+ // data-атрибуты: data-pagination-quickJump | data-pagination-quick-jump
259
+ quickJump: false, // auto | true | false
260
+ // Подпись кнопки быстрого перехода.
261
+ // data-атрибуты: data-pagination-quickJumpButtonLabel | data-pagination-quick-jump-button-label
262
+ quickJumpButtonLabel: 'Перейти',
263
+ // Доступные варианты per-page.
264
+ // data-атрибуты: data-pagination-perPageOptions | data-pagination-per-page-options
265
+ perPageOptions: [10, 25, 50, 100],
266
+ // Колбек смены страницы.
267
+ // data-атрибуты: нет прямого
268
+ onChange: null,
269
+ // Колбек смены per-page.
270
+ // data-атрибуты: нет прямого
271
+ onPerPageChange: null,
272
+ },
273
+
274
+ sortable: {
275
+ // Canonical key for enable flag.
276
+ // data-attributes: data-sortable-enable
277
+ enable: true,
278
+ // Начальное поле сортировки.
279
+ // data-атрибуты: data-sort
280
+ initialField: '',
281
+ // Начальное направление сортировки.
282
+ // data-атрибуты: data-dir
283
+ initialDir: 'asc',
284
+ // Включить мультисортировку.
285
+ // data-атрибуты: data-sort-multi | data-sortmulti
286
+ multi: false,
287
+ // Мультисортировка только с Shift.
288
+ // data-атрибуты: data-sort-multi-with-shift | data-sortmultiWithShift
289
+ multiWithShift: true,
290
+ // Белый список сортируемых полей.
291
+ // data-атрибуты: data-sort-fields
292
+ fields: [],
293
+ // Скрывать стрелки у несортированных колонок.
294
+ // data-атрибуты: data-sort-hide-unsorted-arrows
295
+ hideUnsortedArrows: true,
296
+ // Пользовательская проверка сортируемости колонки.
297
+ // data-атрибуты: нет прямого
298
+ isColumnSortable: () => true,
299
+ },
300
+
301
+ columnReorder: {
302
+ // Canonical key for enable flag.
303
+ // data-attributes: data-column-reorder-enable
304
+ enable: false,
305
+ // Сохранять порядок колонок.
306
+ // data-атрибуты: data-column-reorder-persist
307
+ persist: false,
308
+ // Ключ storage для порядка колонок.
309
+ // data-атрибуты: data-column-reorder-storage-key
310
+ storageKey: '',
311
+ },
312
+
313
+ columnResize: {
314
+ // Canonical key for enable flag.
315
+ // data-attributes: data-column-resize-enable
316
+ enable: false,
317
+ // Минимальная ширина колонки.
318
+ // data-атрибуты: data-column-resize-min-width
319
+ minWidth: 80,
320
+ // Максимальная ширина колонки.
321
+ // data-атрибуты: data-column-resize-max-width
322
+ maxWidth: 600,
323
+ },
324
+
325
+ virtual: {
326
+ // Canonical key for enable flag.
327
+ // data-attributes: data-virtual-enable
328
+ enable: false,
329
+ // Ожидаемая высота строки (px).
330
+ // data-атрибуты: data-virtual-row-height
331
+ rowHeight: 44,
332
+ // Запас строк вне viewport.
333
+ // data-атрибуты: data-virtual-overscan
334
+ overscan: 8,
335
+ // Порог числа строк для активации виртуализации.
336
+ // data-атрибуты: data-virtual-threshold
337
+ threshold: 500,
338
+ },
339
+
340
+ expandable: {
341
+ // Enable tree-like expandable rows.
342
+ // data-attributes: data-expandable-enable
343
+ enable: false,
344
+ // Attribute name with unique row id.
345
+ // data-attributes: data-expandable-id-attr
346
+ idAttr: 'data-expand-id',
347
+ // Attribute name with parent row id.
348
+ // data-attributes: data-expandable-parent-attr
349
+ parentAttr: 'data-expand-parent-id',
350
+ // Selector for toggle control inside row.
351
+ // data-attributes: data-expandable-toggle-selector
352
+ toggleSelector: '[data-expand-toggle]',
353
+ // Collapse groups by default.
354
+ // data-attributes: data-expandable-collapsed
355
+ collapsed: true,
356
+ },
357
+
358
+ loading: {
359
+ // Canonical key for minimum loading delay.
360
+ // data-attributes: data-loading-min-delay
361
+ minDelay: 500,
362
+ // Количество skeleton-строк.
363
+ // data-атрибуты: data-loading-skeleton | data-loading-skeleton-rows
364
+ skeleton: 10,
365
+ },
366
+
367
+ summary: {
368
+ // Canonical key for enable flag.
369
+ // data-attributes: data-summary-enable
370
+ enable: false,
371
+ },
372
+
373
+ footer: {
374
+ // Canonical key for enable flag.
375
+ // data-attributes: data-footer-enable
376
+ enable: false,
377
+ },
378
+
379
+ state: {
380
+ // SVG/URL для иллюстрации error-state.
381
+ // data-атрибуты: data-state-error-illustration
382
+ errorIllustration: '<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="36" stroke="currentColor" stroke-opacity="0.32" stroke-width="4"/><path d="M50 30V56" stroke="currentColor" stroke-opacity="0.7" stroke-width="6" stroke-linecap="round"/><circle cx="50" cy="68" r="4" fill="currentColor" fill-opacity="0.7"/></svg>',
383
+ // SVG/URL для иллюстрации empty-state.
384
+ // data-атрибуты: data-state-empty-illustration
385
+ emptyIllustration: '<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="18" y="24" width="64" height="52" rx="8" stroke="currentColor" stroke-opacity="0.32" stroke-width="4"/><path d="M30 40H70M30 50H62M30 60H54" stroke="currentColor" stroke-opacity="0.55" stroke-width="4" stroke-linecap="round"/><circle cx="72" cy="68" r="10" stroke="currentColor" stroke-opacity="0.6" stroke-width="4"/><path d="M79 75L86 82" stroke="currentColor" stroke-opacity="0.6" stroke-width="4" stroke-linecap="round"/></svg>',
386
+ },
387
+
388
+ panHint: {
389
+ // Canonical key for dismiss days.
390
+ // data-attributes: data-pan-hint-dismiss
391
+ dismiss: 60,
392
+ // Сколько дней скрывать подсказку "Shift + drag" после закрытия.
393
+ // data-атрибуты: data-pan-hint-dismiss-days
394
+ dismissDays: 60,
395
+ },
396
+
397
+ stickyHeader: {
398
+ // Canonical key for enable flag.
399
+ // data-attributes: data-sticky-header-enable
400
+ enable: false,
401
+ // Отступ сверху для sticky-header (px).
402
+ // data-атрибуты: data-sticky-header-top-offset | data-stickyHeader-top
403
+ top: 0,
404
+ // Максимальная высота viewport таблицы.
405
+ // data-атрибуты: data-sticky-header-max-height | data-stickyHeader-max
406
+ max: 0,
407
+ },
408
+
409
+ search: {
410
+ // Canonical key for enable flag.
411
+ // data-attributes: data-search-enable
412
+ enable: false,
413
+ // Debounce поиска.
414
+ // data-атрибуты: data-search-debounce | data-search-debounce-ms
415
+ debounce: 300,
416
+ // Имя query-параметра поиска.
417
+ // data-атрибуты: data-search-param
418
+ param: 'q',
419
+ // CSS-селектор input поиска.
420
+ // data-атрибуты: data-search-input | data-search-input-selector
421
+ input: '',
422
+ },
423
+
424
+ filters: {
425
+ // Canonical key for enable flag.
426
+ // data-attributes: data-filters-enable
427
+ enable: false,
428
+ // CSS-селектор формы фильтров.
429
+ // data-атрибуты: data-filters-form | data-filters-form-selector
430
+ form: '',
431
+ // Debounce фильтров.
432
+ // data-атрибуты: data-filters-debounce | data-filters-debounce-ms
433
+ debounce: 300,
434
+ // Режим применения фильтров.
435
+ // data-атрибуты: data-filters-apply | data-filters-apply-mode
436
+ apply: 'auto', // auto | manual
437
+ // Селекторы кнопок применения/сброса.
438
+ // data-attributes: data-filters-button-apply | data-filters-button-reset
439
+ button: {
440
+ apply: '[data-filter-apply]',
441
+ reset: '[data-filter-reset]',
442
+ },
443
+ // Отдельный route для фильтрации (опционально).
444
+ // data-атрибуты: data-filters-route
445
+ route: '',
446
+ // Атрибут ключа фильтра (канонический field id).
447
+ // data-атрибуты: data-filters-field-attr
448
+ fieldAttr: 'data-filter-field',
449
+ // Атрибут части фильтра (value|operator).
450
+ // data-атрибуты: data-filters-part-attr
451
+ partAttr: 'data-filter-part',
452
+ // Атрибут типа сравнения (eq|contains|gt|...).
453
+ // data-атрибуты: data-filters-type-attr
454
+ typeAttr: 'data-filter-type',
455
+ // Атрибут значения по умолчанию для фильтра.
456
+ // data-атрибуты: data-filters-value-attr
457
+ valueAttr: 'data-filter-value',
458
+ // Атрибут оператора по умолчанию для фильтра.
459
+ // data-атрибуты: data-filters-operator-attr
460
+ operatorAttr: 'data-filter-operator',
461
+ // Оператор по умолчанию.
462
+ // data-атрибуты: data-filters-default-operator
463
+ defaultOperator: 'eq',
464
+ // Сбрасывать страницу при изменении фильтров.
465
+ // data-атрибуты: data-filters-reset-page-on-change
466
+ resetPageOnChange: true,
467
+ // Пропускать пустые значения фильтров.
468
+ // data-атрибуты: data-filters-skip-empty
469
+ skipEmpty: true,
470
+ // Trim текстовых значений.
471
+ // data-атрибуты: data-filters-trim-values
472
+ trimValues: true,
473
+ // Всегда эмитить полный контекст sent/received для callbacks/events.
474
+ // data-атрибуты: data-filters-emit-full-context
475
+ emitFullContext: true,
476
+ // URL-state для фильтров.
477
+ urlState: {
478
+ // data-атрибуты: data-filters-urlstate-enable
479
+ enable: false,
480
+ // data-атрибуты: data-filters-urlstate-read-on-init
481
+ readOnInit: true,
482
+ // data-атрибуты: data-filters-urlstate-write-on-change
483
+ writeOnChange: true,
484
+ // data-атрибуты: data-filters-urlstate-history-mode
485
+ historyMode: 'replace', // replace | push
486
+ // data-атрибуты: data-filters-urlstate-prefix
487
+ paramPrefix: 'f.',
488
+ // data-атрибуты: data-filters-urlstate-page-key
489
+ pageKey: 'page',
490
+ // data-атрибуты: data-filters-urlstate-per-page-key
491
+ perPageKey: 'perPage',
492
+ // data-атрибуты: data-filters-urlstate-sort-key
493
+ sortKey: 'sort',
494
+ },
495
+ // Конфигурация транспортного payload.
496
+ transport: {
497
+ // data-атрибуты: data-filters-payload-key
498
+ payloadKey: 'filters',
499
+ // data-атрибуты: data-filters-include-meta
500
+ includeMeta: true,
501
+ // data-атрибуты: data-filters-include-urlstate
502
+ includeUrlState: true,
503
+ },
504
+ // Конфигурация response mapping.
505
+ response: {
506
+ // data-атрибуты: data-filters-response-rows-path
507
+ rowsPath: 'data.rows',
508
+ // data-атрибуты: data-filters-response-total-path
509
+ totalPath: 'data.total',
510
+ // data-атрибуты: data-filters-response-meta-path
511
+ metaPath: 'meta',
512
+ // data-атрибуты: data-filters-response-applied-filters-path
513
+ appliedFiltersPath: 'meta.appliedFilters',
514
+ },
515
+ },
516
+
517
+ urlState: {
518
+ // Canonical key for enable flag.
519
+ // data-attributes: data-url-state-enable
520
+ enable: false,
521
+ // Режим history обновлений.
522
+ // data-атрибуты: data-url-state-mode | data-url-state-mode
523
+ mode: 'replace', // replace | push
524
+ include: {
525
+ // data-attributes: data-urlstate-include-pagination
526
+ pagination: false,
527
+ // data-attributes: data-urlstate-include-sort
528
+ sort: false,
529
+ },
530
+ listen: {
531
+ // data-attributes: data-url-state-listen-popstate
532
+ popstate: false,
533
+ },
534
+ },
535
+
536
+ editable: {
537
+ // Enable editable mode.
538
+ // data-attributes: data-editable-enable
539
+ enable: false,
540
+ // Enable drag-and-drop row reorder.
541
+ // data-attributes: data-row-reorder-enable
542
+ rowReorder: true,
543
+ // Row reorder drag mode.
544
+ // data-attributes: data-row-reorder-mode
545
+ rowReorderMode: 'row', // row | handle
546
+ // CSS selector for explicit drag handle inside row.
547
+ // data-attributes: data-row-reorder-handle-selector
548
+ rowReorderHandleSelector: '[data-row-reorder-handle]',
549
+ },
550
+
551
+ callbacks: {
552
+ // Событие инициализации.
553
+ onInit: null,
554
+ // Начало remote-загрузки.
555
+ onBeforeLoad: null,
556
+ // Успешная загрузка данных.
557
+ onDataLoaded: null,
558
+ // Ошибка загрузки.
559
+ onError: null,
560
+ // Успех HTTP-запроса (расширенный контекст sent/received).
561
+ onRequestSuccess: null,
562
+ // Ошибка HTTP-запроса (расширенный контекст sent/error).
563
+ onRequestError: null,
564
+ // Пришел устаревший ответ и был отброшен.
565
+ onStaleResponse: null,
566
+ // Синхронизация urlState: чтение.
567
+ onUrlStateRead: null,
568
+ // Синхронизация urlState: запись.
569
+ onUrlStateWrite: null,
570
+ // Ошибка чтения/записи urlState.
571
+ onUrlStateError: null,
572
+ // Пустой результат после загрузки.
573
+ onEmptyResult: null,
574
+ // Завершение рендера после ответа сервера.
575
+ onAfterRender: null,
576
+ // Синхронизация финального состояния таблицы.
577
+ onStateSync: null,
578
+ // Изменение сортировки.
579
+ onSortChange: null,
580
+ // Изменение страницы.
581
+ onPageChange: null,
582
+ // Изменение per-page.
583
+ onPerPageChange: null,
584
+ // Изменение поискового запроса.
585
+ onSearch: null,
586
+ // Изменение фильтров.
587
+ onFiltersChange: null,
588
+ // Сброс фильтров/поиска.
589
+ onReset: null,
590
+ // Изменение чекбокса строки в editable-режиме.
591
+ onRowCheck: null,
592
+ // Изменение чекбокса "выбрать все" в editable-режиме.
593
+ onCheckAll: null,
594
+ // Ручная перестановка строк в editable-режиме.
595
+ onRowReorder: null,
596
+ // Запуск экспорта.
597
+ onExport: null,
598
+ // Операции сохраненных видов.
599
+ onViewChange: null,
600
+ // Раскрытие строки в tree-data.
601
+ onRowExpand: null,
602
+ // Коллапс строки в tree-data.
603
+ onRowCollapse: null,
604
+ // Переключение состояния строки в tree-data.
605
+ onRowToggle: null,
606
+ // Перестановка колонок.
607
+ onColumnReorder: null,
608
+ // Изменение ширины колонки.
609
+ onColumnResize: null,
610
+ onColumnFixed: null,
611
+ },
612
+
613
+ events: {
614
+ // Включить dispatch CustomEvent-событий.
615
+ // data-атрибуты: data-events-enabled
616
+ enable: true,
617
+ // Префикс событий (например, vgdt:dataloaded).
618
+ // data-атрибуты: data-events-prefix
619
+ prefix: 'vgdt',
620
+ // Распространять события вверх по DOM (bubbles).
621
+ // data-атрибуты: data-events-bubbles
622
+ bubbles: true,
623
+ },
624
+
625
+ persistence: {
626
+ // Глобальный toggle persistence.
627
+ // data-атрибуты: data-persistence-enabled
628
+ enable: false,
629
+ // Общий ключ storage для persistence.
630
+ // data-атрибуты: data-persistence-storage-key
631
+ storageKey: '',
632
+ // Сохранять тему.
633
+ // data-атрибуты: data-persistence-theme
634
+ theme: false,
635
+ // Сохранять локаль.
636
+ // data-атрибуты: data-persistence-locale
637
+ locale: false,
638
+ // Сохранять режим применения фильтров.
639
+ // data-атрибуты: data-persistence-filters-apply-mode
640
+ filtersApply: false,
641
+ },
642
+ };
643
+
644
+ export default DEFAULT_OPTIONS;
645
+
646
+