@snabcentr/client-ui 4.9.2 → 4.11.0
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/esm2022/pages/frequently-asked-questions/sc-faq-query-params.mjs +5 -0
- package/esm2022/pages/frequently-asked-questions/sc-get-faq-group-query-params.mjs +14 -0
- package/esm2022/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.mjs +46 -17
- package/esm2022/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.mjs +29 -33
- package/esm2022/pages/index.mjs +4 -1
- package/esm2022/pages/news-list/sc-news-list.component.mjs +90 -0
- package/esm2022/pagination/index.mjs +2 -0
- package/esm2022/pagination/sc-pagination-links/sc-pagination-links.component.mjs +99 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/snabcentr-client-ui.mjs +253 -46
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/package.json +2 -2
- package/pages/frequently-asked-questions/sc-faq-query-params.d.ts +4 -0
- package/pages/frequently-asked-questions/sc-get-faq-group-query-params.d.ts +10 -0
- package/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.d.ts +23 -4
- package/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.d.ts +14 -16
- package/pages/index.d.ts +3 -0
- package/pages/news-list/sc-news-list.component.d.ts +57 -0
- package/pagination/index.d.ts +1 -0
- package/pagination/sc-pagination-links/sc-pagination-links.component.d.ts +60 -0
- package/public-api.d.ts +1 -0
- package/release_notes.tmp +8 -3
- package/styles/tailwind/tailwind.scss +4 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@snabcentr/client-ui",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.11.0",
|
|
4
4
|
"author": "Snabcentr Ltd.",
|
|
5
5
|
"repository": "https://gitlab.snabcentr.met/web/angular/snabcentr-client-ui-lib",
|
|
6
6
|
"license": "Commercial",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"@maskito/core": "^3.11.1",
|
|
16
16
|
"@ng-web-apis/intersection-observer": "^4.14.0",
|
|
17
17
|
"@ng-web-apis/common": "^4.14.0",
|
|
18
|
-
"@snabcentr/client-core": "^3.
|
|
18
|
+
"@snabcentr/client-core": "^3.17.0",
|
|
19
19
|
"@taiga-ui/addon-charts": "^4.66.0",
|
|
20
20
|
"@taiga-ui/addon-commerce": "^4.66.0",
|
|
21
21
|
"@taiga-ui/cdk": "^4.66.0",
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Params } from '@angular/router';
|
|
2
|
+
import { ScFaqGroup } from '@snabcentr/client-core';
|
|
3
|
+
/**
|
|
4
|
+
* Возвращает query-параметры ссылки на группу часто задаваемых вопросов.
|
|
5
|
+
*
|
|
6
|
+
* При смене группы пагинация сбрасывается на первую страницу.
|
|
7
|
+
*
|
|
8
|
+
* @param group Группа вопросов.
|
|
9
|
+
*/
|
|
10
|
+
export declare const scGetFaqGroupQueryParams: (group: ScFaqGroup) => Params;
|
|
@@ -1,12 +1,23 @@
|
|
|
1
|
-
import { InputSignal
|
|
1
|
+
import { InputSignal } from '@angular/core';
|
|
2
2
|
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { Params } from '@angular/router';
|
|
3
4
|
import { ScFaqGroup } from '@snabcentr/client-core';
|
|
4
5
|
import { Observable } from 'rxjs';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
/**
|
|
7
8
|
* Компонент выбора группы часто задаваемых вопросов.
|
|
9
|
+
*
|
|
10
|
+
* TODO: [TAIGA:5]: Заменить legacy tui-select и tuiItemsHandlersProvider на актуальные аналоги.
|
|
8
11
|
*/
|
|
9
12
|
export declare class ScFrequentlyAskedQuestionsGroupSelectorComponent {
|
|
13
|
+
/**
|
|
14
|
+
* Сервис маршрутизации.
|
|
15
|
+
*/
|
|
16
|
+
private readonly router;
|
|
17
|
+
/**
|
|
18
|
+
* Активный маршрут.
|
|
19
|
+
*/
|
|
20
|
+
private readonly route;
|
|
10
21
|
/**
|
|
11
22
|
* {@link Observable} списка группы часто задаваемых вопросов.
|
|
12
23
|
*/
|
|
@@ -16,13 +27,21 @@ export declare class ScFrequentlyAskedQuestionsGroupSelectorComponent {
|
|
|
16
27
|
*/
|
|
17
28
|
protected readonly groupControl: FormControl<ScFaqGroup | null>;
|
|
18
29
|
/**
|
|
19
|
-
* {@link
|
|
30
|
+
* {@link InputSignal} идентификатора выбранной группы.
|
|
20
31
|
*/
|
|
21
|
-
readonly
|
|
32
|
+
readonly selectedGroupId: InputSignal<number | null>;
|
|
22
33
|
/**
|
|
23
34
|
* Формат отображения. 'list' - в виде списка, 'select' в виде выпадающего списка.
|
|
24
35
|
*/
|
|
25
36
|
readonly viewMode: InputSignal<'list' | 'select'>;
|
|
37
|
+
/**
|
|
38
|
+
* Возвращает query-параметры ссылки на группу вопросов.
|
|
39
|
+
*/
|
|
40
|
+
protected readonly getGroupQueryParams: (group: ScFaqGroup) => Params;
|
|
41
|
+
/**
|
|
42
|
+
* Инициализирует экземпляр класса {@link ScFrequentlyAskedQuestionsGroupSelectorComponent}.
|
|
43
|
+
*/
|
|
44
|
+
constructor();
|
|
26
45
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScFrequentlyAskedQuestionsGroupSelectorComponent, never>;
|
|
27
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ScFrequentlyAskedQuestionsGroupSelectorComponent, "sc-frequently-asked-questions-group-selector", never, { "
|
|
46
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScFrequentlyAskedQuestionsGroupSelectorComponent, "sc-frequently-asked-questions-group-selector", never, { "selectedGroupId": { "alias": "selectedGroupId"; "required": false; "isSignal": true; }; "viewMode": { "alias": "viewMode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
28
47
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { OutputEmitterRef } from '@angular/core';
|
|
2
2
|
import { ScFaqItem, ScFrequentlyAskedQuestionsService } from '@snabcentr/client-core';
|
|
3
|
-
import { Observable
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
/**
|
|
6
6
|
* Компонент часто задаваемых вопросов с возможностью выбора группы вопросов.
|
|
@@ -27,9 +27,13 @@ export declare class ScFrequentlyAskedQuestionsWithGroupsComponent {
|
|
|
27
27
|
*/
|
|
28
28
|
private readonly router;
|
|
29
29
|
/**
|
|
30
|
-
*
|
|
30
|
+
* Активный маршрут.
|
|
31
31
|
*/
|
|
32
|
-
private readonly
|
|
32
|
+
private readonly route;
|
|
33
|
+
/**
|
|
34
|
+
* Признак, что приложение запущено на сервере.
|
|
35
|
+
*/
|
|
36
|
+
private readonly isServer;
|
|
33
37
|
/**
|
|
34
38
|
* Количество записей на странице пагинации.
|
|
35
39
|
*/
|
|
@@ -39,13 +43,15 @@ export declare class ScFrequentlyAskedQuestionsWithGroupsComponent {
|
|
|
39
43
|
*/
|
|
40
44
|
private readonly perPage$;
|
|
41
45
|
/**
|
|
42
|
-
* {@link
|
|
46
|
+
* {@link Observable} изменения номера страницы пагинации из query-параметров.
|
|
43
47
|
*/
|
|
44
48
|
private readonly page$;
|
|
45
49
|
/**
|
|
46
|
-
* {@link
|
|
50
|
+
* {@link Observable} изменения идентификатора выбранной группы.
|
|
51
|
+
*
|
|
52
|
+
* Идентификатор берётся из query-параметров, а если параметр не задан - используется первая группа списка.
|
|
47
53
|
*/
|
|
48
|
-
protected readonly groupId$:
|
|
54
|
+
protected readonly groupId$: Observable<number | null>;
|
|
49
55
|
/**
|
|
50
56
|
* Сигнал нажатия на кнопку "Задать вопрос".
|
|
51
57
|
*/
|
|
@@ -75,17 +81,9 @@ export declare class ScFrequentlyAskedQuestionsWithGroupsComponent {
|
|
|
75
81
|
*/
|
|
76
82
|
protected readonly viewMode$: Observable<'list' | 'select'>;
|
|
77
83
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* @param pageIndex Индекс страницы.
|
|
81
|
-
*/
|
|
82
|
-
protected paginationChange(pageIndex: number): void;
|
|
83
|
-
/**
|
|
84
|
-
* Устанавливает идентификатор группы.
|
|
85
|
-
*
|
|
86
|
-
* @param id Идентификатор группы.
|
|
84
|
+
* Наименование query-параметра номера страницы пагинации.
|
|
87
85
|
*/
|
|
88
|
-
protected
|
|
86
|
+
protected readonly pageQueryParam: string;
|
|
89
87
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScFrequentlyAskedQuestionsWithGroupsComponent, never>;
|
|
90
88
|
static ɵcmp: i0.ɵɵComponentDeclaration<ScFrequentlyAskedQuestionsWithGroupsComponent, "sc-frequently-asked-questions-with-groups", never, {}, { "clickSendQuestion": "clickSendQuestion"; }, never, never, true, never>;
|
|
91
89
|
}
|
package/pages/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
export * from './frequently-asked-questions/sc-faq-query-params';
|
|
1
2
|
export * from './frequently-asked-questions/sc-frequently-asked-questions.component';
|
|
3
|
+
export * from './frequently-asked-questions/sc-get-faq-group-query-params';
|
|
2
4
|
export * from './frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component';
|
|
3
5
|
export * from './frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component';
|
|
6
|
+
export * from './news-list/sc-news-list.component';
|
|
4
7
|
export * from './personal-data-processing-policy/sc-personal-data-processing-policy.component';
|
|
5
8
|
export * from './privacy-policy/sc-privacy-policy.component';
|
|
6
9
|
export * from './public-offer/sc-public-offer.component';
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { InputSignal, OutputRef } from '@angular/core';
|
|
2
|
+
import { ScINewsTile } from '@snabcentr/client-core';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Компонент списка новостей с пагинацией через query-параметр страницы.
|
|
7
|
+
*
|
|
8
|
+
* Ссылки пагинации корректно работают при SSR и позволяют поисковым роботам обходить страницы списка.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ScNewsListComponent {
|
|
11
|
+
/**
|
|
12
|
+
* Сервис для получения списка новостей.
|
|
13
|
+
*/
|
|
14
|
+
private readonly newsService;
|
|
15
|
+
/**
|
|
16
|
+
* Сервис маршрутизации.
|
|
17
|
+
*/
|
|
18
|
+
private readonly router;
|
|
19
|
+
/**
|
|
20
|
+
* {@link InputSignal} количества записей на странице пагинации.
|
|
21
|
+
*/
|
|
22
|
+
readonly perPage: InputSignal<number>;
|
|
23
|
+
/**
|
|
24
|
+
* {@link Observable} изменения номера страницы пагинации из query-параметров.
|
|
25
|
+
*/
|
|
26
|
+
protected readonly page$: Observable<number>;
|
|
27
|
+
/**
|
|
28
|
+
* {@link Observable} запроса данных списка новостей.
|
|
29
|
+
*/
|
|
30
|
+
protected readonly request$: Observable<import("@snabcentr/client-core").ScIPaginate<ScINewsTile> | null>;
|
|
31
|
+
/**
|
|
32
|
+
* {@link Observable} изменения количества страниц пагинации.
|
|
33
|
+
*/
|
|
34
|
+
protected readonly pagesLength$: Observable<number>;
|
|
35
|
+
/**
|
|
36
|
+
* {@link Observable} изменения номера страницы пагинации из данных пагинации запроса.
|
|
37
|
+
*/
|
|
38
|
+
protected readonly currentPage$: Observable<number>;
|
|
39
|
+
/**
|
|
40
|
+
* {@link Observable} изменения состояния загрузки данных.
|
|
41
|
+
*/
|
|
42
|
+
protected readonly loading$: Observable<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* {@link Observable} изменения списка новостей страницы пагинации.
|
|
45
|
+
*/
|
|
46
|
+
protected readonly data$: Observable<ScINewsTile[] | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Событие изменения списка новостей страницы пагинации.
|
|
49
|
+
*/
|
|
50
|
+
readonly dataChangeEvent: OutputRef<ScINewsTile[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Инициализирует экземпляр класса {@link ScNewsListComponent}.
|
|
53
|
+
*/
|
|
54
|
+
constructor();
|
|
55
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ScNewsListComponent, never>;
|
|
56
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScNewsListComponent, "sc-news-list", never, { "perPage": { "alias": "perPage"; "required": false; "isSignal": true; }; }, { "dataChangeEvent": "dataChangeEvent"; }, never, never, true, never>;
|
|
57
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sc-pagination-links/sc-pagination-links.component';
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { InputSignal, Signal } from '@angular/core';
|
|
2
|
+
import { Params } from '@angular/router';
|
|
3
|
+
import { TuiSpinIcons } from '@taiga-ui/core';
|
|
4
|
+
import { Observable } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* Компонент пагинации, в котором страницы являются ссылками с номером страницы в query-параметрах.
|
|
8
|
+
*
|
|
9
|
+
* Ссылки позволяют переходить между страницами при отключенном JavaScript и корректно работают при SSR.
|
|
10
|
+
* Внешний вид повторяет tui-pagination из @taiga-ui/kit.
|
|
11
|
+
*
|
|
12
|
+
* TODO: [TAIGA:5]: Проверить, появилась ли в tui-pagination поддержка ссылок, и заменить компонент на неё.
|
|
13
|
+
*/
|
|
14
|
+
export declare class ScPaginationLinksComponent {
|
|
15
|
+
/**
|
|
16
|
+
* Иконки стрелок переключения страниц.
|
|
17
|
+
*/
|
|
18
|
+
protected readonly icons: TuiSpinIcons;
|
|
19
|
+
/**
|
|
20
|
+
* {@link Observable} подписей стрелок переключения страниц.
|
|
21
|
+
*/
|
|
22
|
+
protected readonly texts$: Observable<readonly [previousPage: string, nextPage: string]>;
|
|
23
|
+
/**
|
|
24
|
+
* {@link InputSignal} общего количества страниц.
|
|
25
|
+
*/
|
|
26
|
+
readonly length: InputSignal<number>;
|
|
27
|
+
/**
|
|
28
|
+
* {@link InputSignal} номера текущей страницы, начиная с единицы.
|
|
29
|
+
*/
|
|
30
|
+
readonly index: InputSignal<number>;
|
|
31
|
+
/**
|
|
32
|
+
* {@link InputSignal} наименования query-параметра, в котором хранится номер страницы.
|
|
33
|
+
*/
|
|
34
|
+
readonly queryParam: InputSignal<string>;
|
|
35
|
+
/**
|
|
36
|
+
* {@link InputSignal} количества страниц, отображаемых по обе стороны от текущей.
|
|
37
|
+
*/
|
|
38
|
+
readonly activePadding: InputSignal<number>;
|
|
39
|
+
/**
|
|
40
|
+
* {@link InputSignal} количества страниц, отображаемых по краям.
|
|
41
|
+
*/
|
|
42
|
+
readonly sidePadding: InputSignal<number>;
|
|
43
|
+
/**
|
|
44
|
+
* {@link Signal} номеров отображаемых страниц, где `null` - разделитель пропущенных страниц.
|
|
45
|
+
*
|
|
46
|
+
* Состав страниц рассчитывается так же, как в tui-pagination: количество отображаемых элементов постоянно,
|
|
47
|
+
* а окно вокруг текущей страницы расширяется у краёв списка.
|
|
48
|
+
*/
|
|
49
|
+
protected readonly pages: Signal<Array<number | null>>;
|
|
50
|
+
/**
|
|
51
|
+
* Возвращает query-параметры ссылки на страницу.
|
|
52
|
+
*
|
|
53
|
+
* Для первой страницы параметр удаляется, чтобы её адрес совпадал с адресом страницы без пагинации.
|
|
54
|
+
*
|
|
55
|
+
* @param page Номер страницы.
|
|
56
|
+
*/
|
|
57
|
+
protected getPageQueryParams(page: number): Params;
|
|
58
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ScPaginationLinksComponent, never>;
|
|
59
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScPaginationLinksComponent, "sc-pagination-links", never, { "length": { "alias": "length"; "required": true; "isSignal": true; }; "index": { "alias": "index"; "required": true; "isSignal": true; }; "queryParam": { "alias": "queryParam"; "required": false; "isSignal": true; }; "activePadding": { "alias": "activePadding"; "required": false; "isSignal": true; }; "sidePadding": { "alias": "sidePadding"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
60
|
+
}
|
package/public-api.d.ts
CHANGED
package/release_notes.tmp
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
## 4.
|
|
1
|
+
## 4.11.0 (2026-08-17)
|
|
2
2
|
|
|
3
|
-
### added (
|
|
3
|
+
### added (2 changes)
|
|
4
4
|
|
|
5
|
-
- [#
|
|
5
|
+
- [#13633: Добавлен компонент списка новостей с пагинацией через query-параметр...](web_soft/libs/angular/snabcentr-client-ui-lib@c054e811f8c7129e0a0cc01615ff1a92f7384775) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!439))
|
|
6
|
+
- [#13015: Добавлены компоненты оформления заказа для объединения страниц корзины](web_soft/libs/angular/snabcentr-client-ui-lib@bf19e7becdae902d1ef9c31d25dc084fc5a6da6e) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!437))
|
|
7
|
+
|
|
8
|
+
### fixed (1 change)
|
|
9
|
+
|
|
10
|
+
- [#13577: Исправлена некорректная работа блока фильтров](web_soft/libs/angular/snabcentr-client-ui-lib@88472dffcb45df602d3d79a528b9a8d21997cd22) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!436))
|
|
6
11
|
|
|
@@ -1094,6 +1094,10 @@ video {
|
|
|
1094
1094
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
1095
1095
|
}
|
|
1096
1096
|
|
|
1097
|
+
.grid-cols-\[repeat\(auto-fill\2c minmax\(17rem\2c 1fr\)\)\] {
|
|
1098
|
+
grid-template-columns: repeat(auto-fill,minmax(17rem,1fr));
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1097
1101
|
.flex-col {
|
|
1098
1102
|
flex-direction: column;
|
|
1099
1103
|
}
|
|
@@ -1142,10 +1146,6 @@ video {
|
|
|
1142
1146
|
justify-content: space-between;
|
|
1143
1147
|
}
|
|
1144
1148
|
|
|
1145
|
-
.\!justify-items-center {
|
|
1146
|
-
justify-items: center !important;
|
|
1147
|
-
}
|
|
1148
|
-
|
|
1149
1149
|
.\!gap-1 {
|
|
1150
1150
|
gap: 0.25rem !important;
|
|
1151
1151
|
}
|