@snabcentr/client-ui 3.52.1 → 3.52.3

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.
@@ -0,0 +1,47 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Контейнер сворачивания для длинного списка вариантов фильтра.
5
+ *
6
+ * Когда число элементов превышает порог: свёрнут — fade с обрезкой, развёрнут — scrollbar.
7
+ * Иначе рендерит контент без обёртки и кнопки переключения.
8
+ *
9
+ * Контент проецируется как `<ng-template>` — это сохраняет инжектор `ControlContainer`
10
+ * родителя для `formControlName`/`formGroupName` внутри проецируемого фрагмента.
11
+ */
12
+ export declare class ScCatalogFilterCollapsibleComponent {
13
+ /**
14
+ * Порог числа вариантов, после которого включается сворачивание с {@link TuiFade}.
15
+ */
16
+ private static readonly COLLAPSE_THRESHOLD;
17
+ /**
18
+ * Число элементов содержимого, по которому решается необходимость сворачивания.
19
+ */
20
+ readonly itemsCount: import("@angular/core").InputSignal<number>;
21
+ /**
22
+ * Показывать ли кнопку сброса значений группы.
23
+ */
24
+ readonly showReset: import("@angular/core").InputSignal<boolean>;
25
+ /**
26
+ * Событие нажатия на кнопку сброса группы.
27
+ */
28
+ readonly resetGroup: import("@angular/core").OutputEmitterRef<void>;
29
+ /**
30
+ * Проецируемое содержимое (объявляется в шаблоне родителя как `<ng-template>`).
31
+ */
32
+ protected readonly contentTpl: import("@angular/core").Signal<TemplateRef<any>>;
33
+ /**
34
+ * Развёрнут ли список.
35
+ */
36
+ protected readonly isExpanded: import("@angular/core").WritableSignal<boolean>;
37
+ /**
38
+ * Нужно ли сворачивание для текущего числа элементов.
39
+ */
40
+ protected readonly isCollapsible: import("@angular/core").Signal<boolean>;
41
+ /**
42
+ * Переключает развёрнутость списка.
43
+ */
44
+ protected toggle(): void;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScCatalogFilterCollapsibleComponent, never>;
46
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScCatalogFilterCollapsibleComponent, "sc-catalog-filter-collapsible", never, { "itemsCount": { "alias": "itemsCount"; "required": true; "isSignal": true; }; "showReset": { "alias": "showReset"; "required": false; "isSignal": true; }; }, { "resetGroup": "resetGroup"; }, ["contentTpl"], never, true, never>;
47
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './tokens/sc-catalog-products-filters';
2
2
  export * from './tokens/sc-catalog-show-products-recursively';
3
+ export * from './collapsible/sc-catalog-filter-collapsible.component';
3
4
  export * from './sc-catalog-filters.component';
@@ -6,9 +6,9 @@ import * as i0 from "@angular/core";
6
6
  */
7
7
  export declare class ScCatalogFiltersComponent {
8
8
  /**
9
- * Состояние открытия accordion.
9
+ * Подписки синхронизации контролов формы (range slider, single-select checkbox).
10
10
  */
11
- readonly isOpenAccordion: import("@angular/core").InputSignal<boolean>;
11
+ private formSyncs;
12
12
  /**
13
13
  * Сервис для работы с фильтрами каталога.
14
14
  */
@@ -26,13 +26,39 @@ export declare class ScCatalogFiltersComponent {
26
26
  */
27
27
  private readonly isRecursively;
28
28
  /**
29
- * {@link Observable} фильтров категории.
29
+ * Показывать ли кнопку «Показать результаты».
30
+ */
31
+ readonly showResultsButton: import("@angular/core").InputSignal<boolean>;
32
+ /**
33
+ * Событие нажатия на кнопку сброса всех фильтров.
34
+ */
35
+ readonly resetFilters: import("@angular/core").OutputEmitterRef<void>;
36
+ /**
37
+ * Событие нажатия на кнопку показа результатов.
30
38
  */
31
- protected readonly filters: import("@angular/core").Signal<ScCatalogFilter[] | undefined>;
39
+ readonly showResults: import("@angular/core").OutputEmitterRef<void>;
32
40
  /**
33
41
  * FormGroup для фильтров.
34
42
  */
35
- readonly form: FormGroup<Record<string, FormControl<string | null> | FormControl<boolean> | FormGroup<Record<string, FormControl<boolean>>> | FormControl<[number, number]>>>;
43
+ readonly form: FormGroup<Record<string, FormControl<boolean> | FormGroup<Record<string, FormControl<boolean>>> | FormGroup<{
44
+ from: FormControl<number>;
45
+ to: FormControl<number>;
46
+ slider: FormControl<[number, number]>;
47
+ }>>>;
48
+ /**
49
+ * {@link Observable} фильтров категории.
50
+ */
51
+ protected readonly filters: import("@angular/core").Signal<(ScRangeFilter | ScToggleFilter | {
52
+ values: {
53
+ id: string;
54
+ label: string;
55
+ }[];
56
+ type: "checkbox";
57
+ isMultiple: boolean;
58
+ selectedValues?: string[];
59
+ id: string;
60
+ label: string;
61
+ })[] | undefined>;
36
62
  /**
37
63
  * Инициализирует экземпляр класса {@link ScCatalogFiltersComponent}.
38
64
  */
@@ -49,22 +75,42 @@ export declare class ScCatalogFiltersComponent {
49
75
  * @param value Значения формы.
50
76
  * @returns Объект фильтров свойств.
51
77
  */
52
- protected buildPropertyFilters(value: Partial<Record<string, boolean | string | Record<string, boolean> | [number, number]>> | Record<string, unknown>): ScPropertyFilters;
78
+ protected buildPropertyFilters(value: Record<string, unknown>): ScPropertyFilters;
53
79
  /**
54
- * Создает контрол формы для фильтра типа checkbox.
80
+ * Создаёт FormGroup для checkbox: на каждый {@code value.id} — булевый контрол.
55
81
  *
56
- * Если `isMultiple === false` возвращает {@link FormControl} строкового идентификатора (логика radio),
57
- * иначе {@link FormGroup} независимых булевых контролов по идентификаторам значений.
82
+ * Единый формат и для одного, и для множества значений: шаблон рендерит их одинаково.
83
+ * Различие в API-выводе для одиночного значения (boolean вместо массива) обрабатывается в {@link processCheckboxFilter}.
58
84
  *
59
85
  * @param checkboxFilter Фильтр типа checkbox.
60
86
  */
61
- protected createCheckboxFormControl(checkboxFilter: ScICheckboxFilter): FormGroup<Record<string, FormControl<boolean>>> | FormControl<string | null>;
87
+ protected createCheckboxFormControl(checkboxFilter: ScICheckboxFilter): FormGroup<Record<string, FormControl<boolean>>>;
62
88
  /**
63
- * Создает FormControl для range.
89
+ * Создаёт {@link FormGroup} для range: {@code from}, {@code to}, {@code slider} (кортеж для {@link TuiRange}).
64
90
  *
65
91
  * @param rangeFilter Фильтр типа range.
66
92
  */
67
- protected createRangeFormControl(rangeFilter: ScRangeFilter): FormControl<[number, number]>;
93
+ protected createRangeFormControl(rangeFilter: ScRangeFilter): FormGroup<{
94
+ from: FormControl<number>;
95
+ to: FormControl<number>;
96
+ slider: FormControl<[number, number]>;
97
+ }>;
98
+ /**
99
+ * Реализует single-select поведение для FormGroup с булевыми контролами:
100
+ * при появлении нового true остальные контролы группы сбрасываются в false.
101
+ *
102
+ * Сохраняет последнее «стабильное» состояние и сравнивает следующее значение с ним —
103
+ * новый true (отсутствовал в prev) считается выбранным, остальные сбрасываются через setValue.
104
+ *
105
+ * @param group FormGroup checkbox-фильтра (id → boolean).
106
+ */
107
+ private syncSingleSelectCheckbox;
108
+ /**
109
+ * Связывает поля «от»/«до» с контролом слайдера.
110
+ *
111
+ * @param group FormGroup range-фильтра.
112
+ */
113
+ private syncRangeFromToAndSlider;
68
114
  /**
69
115
  * Создает FormControl для toggle.
70
116
  *
@@ -72,11 +118,11 @@ export declare class ScCatalogFiltersComponent {
72
118
  */
73
119
  protected createToggleFormControl(toggleFilter: ScToggleFilter): FormControl<boolean>;
74
120
  /**
75
- * Обрабатывает checkbox фильтр.
121
+ * Обрабатывает checkbox: FormGroup → string[] выбранных id; для единственного значения — boolean (как toggle).
76
122
  *
77
123
  * @param result Объект результата для заполнения.
78
- * @param filterId Идентификатор фильтра.
79
- * @param controlValue Значение контрола формы.
124
+ * @param checkboxFilter Метафильтр checkbox.
125
+ * @param controlValue Значение контрола формы (запись id → boolean).
80
126
  */
81
127
  private processCheckboxFilter;
82
128
  /**
@@ -84,9 +130,9 @@ export declare class ScCatalogFiltersComponent {
84
130
  *
85
131
  * @param result Объект результата для заполнения.
86
132
  * @param filterId Идентификатор фильтра.
87
- * @param controlValue Значение контрола формы.
88
- * @param controlValue.0 Начальное значение диапазона.
89
- * @param controlValue.1 Конечное значение диапазона.
133
+ * @param range Значение контрола формы (объект с границами).
134
+ * @param range.from Начальное значение диапазона.
135
+ * @param range.to Конечное значение диапазона.
90
136
  */
91
137
  private processRangeFilter;
92
138
  /**
@@ -97,6 +143,38 @@ export declare class ScCatalogFiltersComponent {
97
143
  * @param controlValue Значение контрола формы.
98
144
  */
99
145
  private processToggleFilter;
146
+ /**
147
+ * Сбрасывает поле «от» диапазона к минимальному значению фильтра.
148
+ *
149
+ * @param filterId Идентификатор фильтра.
150
+ * @param min Минимальное значение диапазона.
151
+ */
152
+ protected resetRangeFrom(filterId: string, min: string | number): void;
153
+ /**
154
+ * Сбрасывает поле «до» диапазона к максимальному значению фильтра.
155
+ *
156
+ * @param filterId Идентификатор фильтра.
157
+ * @param max Максимальное значение диапазона.
158
+ */
159
+ protected resetRangeTo(filterId: string, max: string | number): void;
160
+ /**
161
+ * Сбрасывает все чекбоксы группы в `false`.
162
+ *
163
+ * @param filterId Идентификатор фильтра (ключ FormGroup в форме).
164
+ */
165
+ protected resetCheckboxGroup(filterId: string): void;
166
+ /**
167
+ * Сбрасывает все фильтры и оповещает родителя о нажатии кнопки сброса.
168
+ */
169
+ protected onResetFiltersClick(): void;
170
+ /**
171
+ * Оповещает родителя о нажатии кнопки показа результатов.
172
+ */
173
+ protected onShowResultsClick(): void;
174
+ /**
175
+ * Сбрасывает все фильтры к исходным значениям.
176
+ */
177
+ private resetAllFilters;
100
178
  static ɵfac: i0.ɵɵFactoryDeclaration<ScCatalogFiltersComponent, never>;
101
- static ɵcmp: i0.ɵɵComponentDeclaration<ScCatalogFiltersComponent, "sc-catalog-filters", never, { "isOpenAccordion": { "alias": "isOpenAccordion"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
179
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScCatalogFiltersComponent, "sc-catalog-filters", never, { "showResultsButton": { "alias": "showResultsButton"; "required": false; "isSignal": true; }; }, { "resetFilters": "resetFilters"; "showResults": "showResults"; }, never, never, true, never>;
102
180
  }
@@ -0,0 +1,59 @@
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, computed, contentChild, input, output, signal, TemplateRef } from '@angular/core';
3
+ import { TuiLink, TuiScrollbar } from '@taiga-ui/core';
4
+ import { TuiFade } from '@taiga-ui/kit';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Контейнер сворачивания для длинного списка вариантов фильтра.
8
+ *
9
+ * Когда число элементов превышает порог: свёрнут — fade с обрезкой, развёрнут — scrollbar.
10
+ * Иначе рендерит контент без обёртки и кнопки переключения.
11
+ *
12
+ * Контент проецируется как `<ng-template>` — это сохраняет инжектор `ControlContainer`
13
+ * родителя для `formControlName`/`formGroupName` внутри проецируемого фрагмента.
14
+ */
15
+ export class ScCatalogFilterCollapsibleComponent {
16
+ constructor() {
17
+ /**
18
+ * Число элементов содержимого, по которому решается необходимость сворачивания.
19
+ */
20
+ this.itemsCount = input.required();
21
+ /**
22
+ * Показывать ли кнопку сброса значений группы.
23
+ */
24
+ this.showReset = input(false);
25
+ /**
26
+ * Событие нажатия на кнопку сброса группы.
27
+ */
28
+ this.resetGroup = output();
29
+ /**
30
+ * Проецируемое содержимое (объявляется в шаблоне родителя как `<ng-template>`).
31
+ */
32
+ this.contentTpl = contentChild.required(TemplateRef);
33
+ /**
34
+ * Развёрнут ли список.
35
+ */
36
+ this.isExpanded = signal(false);
37
+ /**
38
+ * Нужно ли сворачивание для текущего числа элементов.
39
+ */
40
+ this.isCollapsible = computed(() => this.itemsCount() > ScCatalogFilterCollapsibleComponent.COLLAPSE_THRESHOLD);
41
+ }
42
+ /**
43
+ * Порог числа вариантов, после которого включается сворачивание с {@link TuiFade}.
44
+ */
45
+ static { this.COLLAPSE_THRESHOLD = 5; }
46
+ /**
47
+ * Переключает развёрнутость списка.
48
+ */
49
+ toggle() {
50
+ this.isExpanded.update((value) => !value);
51
+ }
52
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogFilterCollapsibleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
53
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScCatalogFilterCollapsibleComponent, isStandalone: true, selector: "sc-catalog-filter-collapsible", inputs: { itemsCount: { classPropertyName: "itemsCount", publicName: "itemsCount", isSignal: true, isRequired: true, transformFunction: null }, showReset: { classPropertyName: "showReset", publicName: "showReset", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { resetGroup: "resetGroup" }, queries: [{ propertyName: "contentTpl", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"flex flex-col gap-2\">\n @if (isCollapsible()) {\n @if (isExpanded()) {\n <tui-scrollbar [style.max-block-size]=\"'11rem'\">\n <ng-container *ngTemplateOutlet=\"contentTpl()\" />\n </tui-scrollbar>\n } @else {\n <div\n class=\"filter-group-fade\"\n tuiFade=\"vertical\"\n tuiFadeHeight=\"0.25rem\"\n tuiFadeOffset=\"0.25rem\"\n >\n <ng-container *ngTemplateOutlet=\"contentTpl()\" />\n </div>\n }\n\n <div class=\"flex items-center justify-between\">\n <button\n tuiLink\n type=\"button\"\n class=\"text-start !text-body-s\"\n [style.text-decoration-line]=\"'underline'\"\n (click)=\"toggle()\"\n >\n @if (isExpanded()) {\n \u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C\n } @else {\n \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0435\u0449\u0451\n }\n </button>\n @if (showReset()) {\n <button\n tuiLink\n appearance=\"\"\n [style.color]=\"'var(--tui-status-negative)'\"\n [style.text-decoration-line]=\"'underline'\"\n type=\"button\"\n class=\"!text-body-s\"\n (click)=\"resetGroup.emit()\"\n >\n \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C\n </button>\n }\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"contentTpl()\" />\n @if (showReset()) {\n <button\n tuiLink\n type=\"button\"\n class=\"text-start !text-body-s\"\n (click)=\"resetGroup.emit()\"\n >\n \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C\n </button>\n }\n }\n</div>\n", styles: [".filter-group-fade{box-sizing:border-box;max-block-size:9rem;overflow:hidden!important;transition:none!important}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: TuiFade, selector: "[tuiFade]", inputs: ["tuiFadeHeight", "tuiFadeSize", "tuiFadeOffset", "tuiFade"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar", inputs: ["hidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
54
+ }
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogFilterCollapsibleComponent, decorators: [{
56
+ type: Component,
57
+ args: [{ standalone: true, selector: 'sc-catalog-filter-collapsible', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgTemplateOutlet, TuiFade, TuiLink, TuiScrollbar], template: "<div class=\"flex flex-col gap-2\">\n @if (isCollapsible()) {\n @if (isExpanded()) {\n <tui-scrollbar [style.max-block-size]=\"'11rem'\">\n <ng-container *ngTemplateOutlet=\"contentTpl()\" />\n </tui-scrollbar>\n } @else {\n <div\n class=\"filter-group-fade\"\n tuiFade=\"vertical\"\n tuiFadeHeight=\"0.25rem\"\n tuiFadeOffset=\"0.25rem\"\n >\n <ng-container *ngTemplateOutlet=\"contentTpl()\" />\n </div>\n }\n\n <div class=\"flex items-center justify-between\">\n <button\n tuiLink\n type=\"button\"\n class=\"text-start !text-body-s\"\n [style.text-decoration-line]=\"'underline'\"\n (click)=\"toggle()\"\n >\n @if (isExpanded()) {\n \u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C\n } @else {\n \u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u0435\u0449\u0451\n }\n </button>\n @if (showReset()) {\n <button\n tuiLink\n appearance=\"\"\n [style.color]=\"'var(--tui-status-negative)'\"\n [style.text-decoration-line]=\"'underline'\"\n type=\"button\"\n class=\"!text-body-s\"\n (click)=\"resetGroup.emit()\"\n >\n \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C\n </button>\n }\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"contentTpl()\" />\n @if (showReset()) {\n <button\n tuiLink\n type=\"button\"\n class=\"text-start !text-body-s\"\n (click)=\"resetGroup.emit()\"\n >\n \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C\n </button>\n }\n }\n</div>\n", styles: [".filter-group-fade{box-sizing:border-box;max-block-size:9rem;overflow:hidden!important;transition:none!important}\n"] }]
58
+ }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1maWx0ZXItY29sbGFwc2libGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvY2F0YWxvZy1maWx0ZXJzL2NvbGxhcHNpYmxlL3NjLWNhdGFsb2ctZmlsdGVyLWNvbGxhcHNpYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXRhbG9nL2NhdGFsb2ctZmlsdGVycy9jb2xsYXBzaWJsZS9zYy1jYXRhbG9nLWZpbHRlci1jb2xsYXBzaWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ILE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFeEM7Ozs7Ozs7O0dBUUc7QUFTSCxNQUFNLE9BQU8sbUNBQW1DO0lBUmhEO1FBY0k7O1dBRUc7UUFDYSxlQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBRXREOztXQUVHO1FBQ2EsY0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6Qzs7V0FFRztRQUNhLGVBQVUsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUV0Qzs7V0FFRztRQUNnQixlQUFVLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuRTs7V0FFRztRQUNnQixlQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlDOztXQUVHO1FBQ2dCLGtCQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxtQ0FBbUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBUWpJO0lBekNHOztPQUVHO2FBQ3FCLHVCQUFrQixHQUFHLENBQUMsQUFBSixDQUFLO0lBZ0MvQzs7T0FFRztJQUNPLE1BQU07UUFDWixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDOytHQXpDUSxtQ0FBbUM7bUdBQW5DLG1DQUFtQyw4YkF3QlUsV0FBVyxnRUM5Q3JFLHVqRUEyREEsNktEdkNjLGdCQUFnQixvSkFBRSxPQUFPLDRIQUFFLE9BQU8sNEZBQUUsWUFBWTs7NEZBRWpELG1DQUFtQztrQkFSL0MsU0FBUztpQ0FDTSxJQUFJLFlBQ04sK0JBQStCLG1CQUd4Qix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBjb250ZW50Q2hpbGQsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFR1aUxpbmssIFR1aVNjcm9sbGJhciB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aUZhZGUgfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcblxuLyoqXG4gKiDQmtC+0L3RgtC10LnQvdC10YAg0YHQstC+0YDQsNGH0LjQstCw0L3QuNGPINC00LvRjyDQtNC70LjQvdC90L7Qs9C+INGB0L/QuNGB0LrQsCDQstCw0YDQuNCw0L3RgtC+0LIg0YTQuNC70YzRgtGA0LAuXG4gKlxuICog0JrQvtCz0LTQsCDRh9C40YHQu9C+INGN0LvQtdC80LXQvdGC0L7QsiDQv9GA0LXQstGL0YjQsNC10YIg0L/QvtGA0L7Qszog0YHQstGR0YDQvdGD0YIg4oCUIGZhZGUg0YEg0L7QsdGA0LXQt9C60L7QuSwg0YDQsNC30LLRkdGA0L3Rg9GCIOKAlCBzY3JvbGxiYXIuXG4gKiDQmNC90LDRh9C1INGA0LXQvdC00LXRgNC40YIg0LrQvtC90YLQtdC90YIg0LHQtdC3INC+0LHRkdGA0YLQutC4INC4INC60L3QvtC/0LrQuCDQv9C10YDQtdC60LvRjtGH0LXQvdC40Y8uXG4gKlxuICog0JrQvtC90YLQtdC90YIg0L/RgNC+0LXRhtC40YDRg9C10YLRgdGPINC60LDQuiBgPG5nLXRlbXBsYXRlPmAg4oCUINGN0YLQviDRgdC+0YXRgNCw0L3Rj9C10YIg0LjQvdC20LXQutGC0L7RgCBgQ29udHJvbENvbnRhaW5lcmBcbiAqINGA0L7QtNC40YLQtdC70Y8g0LTQu9GPIGBmb3JtQ29udHJvbE5hbWVgL2Bmb3JtR3JvdXBOYW1lYCDQstC90YPRgtGA0Lgg0L/RgNC+0LXRhtC40YDRg9C10LzQvtCz0L4g0YTRgNCw0LPQvNC10L3RgtCwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2MtY2F0YWxvZy1maWx0ZXItY29sbGFwc2libGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1jYXRhbG9nLWZpbHRlci1jb2xsYXBzaWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3NjLWNhdGFsb2ctZmlsdGVyLWNvbGxhcHNpYmxlLmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgVHVpRmFkZSwgVHVpTGluaywgVHVpU2Nyb2xsYmFyXSxcbn0pXG5leHBvcnQgY2xhc3MgU2NDYXRhbG9nRmlsdGVyQ29sbGFwc2libGVDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCf0L7RgNC+0LMg0YfQuNGB0LvQsCDQstCw0YDQuNCw0L3RgtC+0LIsINC/0L7RgdC70LUg0LrQvtGC0L7RgNC+0LPQviDQstC60LvRjtGH0LDQtdGC0YHRjyDRgdCy0L7RgNCw0YfQuNCy0LDQvdC40LUg0YEge0BsaW5rIFR1aUZhZGV9LlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENPTExBUFNFX1RIUkVTSE9MRCA9IDU7XG5cbiAgICAvKipcbiAgICAgKiDQp9C40YHQu9C+INGN0LvQtdC80LXQvdGC0L7QsiDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+LCDQv9C+INC60L7RgtC+0YDQvtC80YMg0YDQtdGI0LDQtdGC0YHRjyDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLRjCDRgdCy0L7RgNCw0YfQuNCy0LDQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGl0ZW1zQ291bnQgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LrQsNC30YvQstCw0YLRjCDQu9C4INC60L3QvtC/0LrRgyDRgdCx0YDQvtGB0LAg0LfQvdCw0YfQtdC90LjQuSDQs9GA0YPQv9C/0YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNob3dSZXNldCA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0L7QsdGL0YLQuNC1INC90LDQttCw0YLQuNGPINC90LAg0LrQvdC+0L/QutGDINGB0LHRgNC+0YHQsCDQs9GA0YPQv9C/0YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHJlc2V0R3JvdXAgPSBvdXRwdXQoKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQvtC10YbQuNGA0YPQtdC80L7QtSDRgdC+0LTQtdGA0LbQuNC80L7QtSAo0L7QsdGK0Y/QstC70Y/QtdGC0YHRjyDQsiDRiNCw0LHQu9C+0L3QtSDRgNC+0LTQuNGC0LXQu9GPINC60LDQuiBgPG5nLXRlbXBsYXRlPmApLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjb250ZW50VHBsID0gY29udGVudENoaWxkLnJlcXVpcmVkKFRlbXBsYXRlUmVmKTtcblxuICAgIC8qKlxuICAgICAqINCg0LDQt9Cy0ZHRgNC90YPRgiDQu9C4INGB0L/QuNGB0L7Qui5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNFeHBhbmRlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDQndGD0LbQvdC+INC70Lgg0YHQstC+0YDQsNGH0LjQstCw0L3QuNC1INC00LvRjyDRgtC10LrRg9GJ0LXQs9C+INGH0LjRgdC70LAg0Y3Qu9C10LzQtdC90YLQvtCyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0NvbGxhcHNpYmxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pdGVtc0NvdW50KCkgPiBTY0NhdGFsb2dGaWx0ZXJDb2xsYXBzaWJsZUNvbXBvbmVudC5DT0xMQVBTRV9USFJFU0hPTEQpO1xuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXQutC70Y7Rh9Cw0LXRgiDRgNCw0LfQstGR0YDQvdGD0YLQvtGB0YLRjCDRgdC/0LjRgdC60LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkLnVwZGF0ZSgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICBAaWYgKGlzQ29sbGFwc2libGUoKSkge1xuICAgICAgICBAaWYgKGlzRXhwYW5kZWQoKSkge1xuICAgICAgICAgICAgPHR1aS1zY3JvbGxiYXIgW3N0eWxlLm1heC1ibG9jay1zaXplXT1cIicxMXJlbSdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFRwbCgpXCIgLz5cbiAgICAgICAgICAgIDwvdHVpLXNjcm9sbGJhcj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItZ3JvdXAtZmFkZVwiXG4gICAgICAgICAgICAgICAgdHVpRmFkZT1cInZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgICB0dWlGYWRlSGVpZ2h0PVwiMC4yNXJlbVwiXG4gICAgICAgICAgICAgICAgdHVpRmFkZU9mZnNldD1cIjAuMjVyZW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50VHBsKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zdGFydCAhdGV4dC1ib2R5LXNcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWRlY29yYXRpb24tbGluZV09XCIndW5kZXJsaW5lJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKGlzRXhwYW5kZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICDQodCy0LXRgNC90YPRgtGMXG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgINCf0L7QutCw0LfQsNGC0Ywg0LXRidGRXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICBAaWYgKHNob3dSZXNldCgpKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLXR1aS1zdGF0dXMtbmVnYXRpdmUpJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWRlY29yYXRpb24tbGluZV09XCIndW5kZXJsaW5lJ1wiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiF0ZXh0LWJvZHktc1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldEdyb3VwLmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDQodCx0YDQvtGB0LjRgtGMXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFRwbCgpXCIgLz5cbiAgICAgICAgQGlmIChzaG93UmVzZXQoKSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc3RhcnQgIXRleHQtYm9keS1zXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRHcm91cC5lbWl0KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCh0LHRgNC+0YHQuNGC0YxcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgfVxuPC9kaXY+XG4iXX0=
@@ -1,4 +1,5 @@
1
1
  export * from './tokens/sc-catalog-products-filters';
2
2
  export * from './tokens/sc-catalog-show-products-recursively';
3
+ export * from './collapsible/sc-catalog-filter-collapsible.component';
3
4
  export * from './sc-catalog-filters.component';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2F0YWxvZy9jYXRhbG9nLWZpbHRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Rva2Vucy9zYy1jYXRhbG9nLXByb2R1Y3RzLWZpbHRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi90b2tlbnMvc2MtY2F0YWxvZy1zaG93LXByb2R1Y3RzLXJlY3Vyc2l2ZWx5JztcbmV4cG9ydCAqIGZyb20gJy4vc2MtY2F0YWxvZy1maWx0ZXJzLmNvbXBvbmVudCc7XG4iXX0=
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvY2F0YWxvZy9jYXRhbG9nLWZpbHRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYyxnQ0FBZ0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdG9rZW5zL3NjLWNhdGFsb2ctcHJvZHVjdHMtZmlsdGVycyc7XG5leHBvcnQgKiBmcm9tICcuL3Rva2Vucy9zYy1jYXRhbG9nLXNob3ctcHJvZHVjdHMtcmVjdXJzaXZlbHknO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xsYXBzaWJsZS9zYy1jYXRhbG9nLWZpbHRlci1jb2xsYXBzaWJsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1jYXRhbG9nLWZpbHRlcnMuY29tcG9uZW50JztcbiJdfQ==