@gravity-ui/page-constructor 1.20.5 → 1.21.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.
Files changed (72) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/build/cjs/blocks/CardLayout/CardLayout.d.ts +3 -5
  3. package/build/cjs/blocks/CardLayout/CardLayout.js +2 -6
  4. package/build/cjs/blocks/FilterBlock/FilterBlock.css +50 -0
  5. package/build/cjs/blocks/FilterBlock/FilterBlock.d.ts +4 -0
  6. package/build/cjs/blocks/FilterBlock/FilterBlock.js +48 -0
  7. package/build/cjs/blocks/FilterBlock/i18n/en.json +3 -0
  8. package/build/cjs/blocks/FilterBlock/i18n/index.d.ts +2 -0
  9. package/build/cjs/blocks/FilterBlock/i18n/index.js +8 -0
  10. package/build/cjs/blocks/FilterBlock/i18n/ru.json +3 -0
  11. package/build/cjs/blocks/FilterBlock/schema.d.ts +229 -0
  12. package/build/cjs/blocks/FilterBlock/schema.js +41 -0
  13. package/build/cjs/blocks/Tabs/Tabs.css +27 -18
  14. package/build/cjs/blocks/index.d.ts +1 -0
  15. package/build/cjs/blocks/index.js +3 -1
  16. package/build/cjs/components/Button/Button.css +4 -0
  17. package/build/cjs/components/ButtonTabs/ButtonTabs.css +16 -3
  18. package/build/cjs/components/ButtonTabs/ButtonTabs.d.ts +7 -4
  19. package/build/cjs/components/ButtonTabs/ButtonTabs.js +2 -6
  20. package/build/cjs/constructor-items.d.ts +2 -1
  21. package/build/cjs/constructor-items.js +1 -0
  22. package/build/cjs/containers/PageConstructor/PageConstructor.css +8 -0
  23. package/build/cjs/containers/PageConstructor/PageConstructor.js +13 -14
  24. package/build/cjs/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.d.ts +3 -5
  25. package/build/cjs/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.js +3 -3
  26. package/build/cjs/containers/PageConstructor/components/ConstructorBlocks/ConstructorBlocks.d.ts +3 -3
  27. package/build/cjs/containers/PageConstructor/components/ConstructorBlocks/ConstructorBlocks.js +4 -4
  28. package/build/cjs/context/innerContext/InnerContext.d.ts +4 -1
  29. package/build/cjs/context/innerContext/InnerContext.js +2 -0
  30. package/build/cjs/models/constructor-items/blocks.d.ts +26 -3
  31. package/build/cjs/models/constructor-items/blocks.js +1 -0
  32. package/build/cjs/utils/blocks.d.ts +1 -0
  33. package/build/cjs/utils/blocks.js +6 -1
  34. package/build/esm/blocks/CardLayout/CardLayout.d.ts +3 -5
  35. package/build/esm/blocks/CardLayout/CardLayout.js +3 -7
  36. package/build/esm/blocks/FilterBlock/FilterBlock.css +50 -0
  37. package/build/esm/blocks/FilterBlock/FilterBlock.d.ts +5 -0
  38. package/build/esm/blocks/FilterBlock/FilterBlock.js +46 -0
  39. package/build/esm/blocks/FilterBlock/i18n/en.json +3 -0
  40. package/build/esm/blocks/FilterBlock/i18n/index.d.ts +2 -0
  41. package/build/esm/blocks/FilterBlock/i18n/index.js +5 -0
  42. package/build/esm/blocks/FilterBlock/i18n/ru.json +3 -0
  43. package/build/esm/blocks/FilterBlock/schema.d.ts +229 -0
  44. package/build/esm/blocks/FilterBlock/schema.js +38 -0
  45. package/build/esm/blocks/Tabs/Tabs.css +27 -18
  46. package/build/esm/blocks/index.d.ts +1 -0
  47. package/build/esm/blocks/index.js +1 -0
  48. package/build/esm/components/Button/Button.css +4 -0
  49. package/build/esm/components/ButtonTabs/ButtonTabs.css +16 -3
  50. package/build/esm/components/ButtonTabs/ButtonTabs.d.ts +7 -4
  51. package/build/esm/components/ButtonTabs/ButtonTabs.js +2 -6
  52. package/build/esm/constructor-items.d.ts +2 -1
  53. package/build/esm/constructor-items.js +2 -1
  54. package/build/esm/containers/PageConstructor/PageConstructor.css +8 -0
  55. package/build/esm/containers/PageConstructor/PageConstructor.js +15 -16
  56. package/build/esm/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.d.ts +3 -5
  57. package/build/esm/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.js +3 -3
  58. package/build/esm/containers/PageConstructor/components/ConstructorBlocks/ConstructorBlocks.d.ts +3 -3
  59. package/build/esm/containers/PageConstructor/components/ConstructorBlocks/ConstructorBlocks.js +4 -4
  60. package/build/esm/context/innerContext/InnerContext.d.ts +4 -1
  61. package/build/esm/context/innerContext/InnerContext.js +2 -0
  62. package/build/esm/models/constructor-items/blocks.d.ts +26 -3
  63. package/build/esm/models/constructor-items/blocks.js +1 -0
  64. package/build/esm/utils/blocks.d.ts +1 -0
  65. package/build/esm/utils/blocks.js +4 -0
  66. package/package.json +1 -1
  67. package/server/models/constructor-items/blocks.d.ts +26 -3
  68. package/server/models/constructor-items/blocks.js +1 -0
  69. package/server/utils/blocks.d.ts +1 -0
  70. package/server/utils/blocks.js +6 -1
  71. package/styles/mixins.scss +62 -5
  72. package/styles/root.scss +10 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.21.0](https://github.com/gravity-ui/page-constructor/compare/v1.20.5...v1.21.0) (2023-03-06)
4
+
5
+
6
+ ### Features
7
+
8
+ * **FilterBlock:** add block that filters its subblocks ([#180](https://github.com/gravity-ui/page-constructor/issues/180)) ([4b6852c](https://github.com/gravity-ui/page-constructor/commit/4b6852c5d1c55e4d1e2cc027c4229b9cc7500e8f))
9
+
3
10
  ## [1.20.5](https://github.com/gravity-ui/page-constructor/compare/v1.20.4...v1.20.5) (2023-03-03)
4
11
 
5
12
 
@@ -1,7 +1,5 @@
1
1
  import React from 'react';
2
- import { CardLayoutBlockProps as CardLayoutBlockParams } from '../../models';
3
- export interface CardLayoutBlockProps extends Omit<CardLayoutBlockParams, 'children'> {
4
- children?: React.ReactNode;
5
- }
6
- declare const CardLayout: ({ title, description, animated, colSizes, children, }: CardLayoutBlockProps) => JSX.Element;
2
+ import { CardLayoutBlockProps as CardLayoutBlockParams, WithChildren } from '../../models';
3
+ export type CardLayoutBlockProps = WithChildren<Omit<CardLayoutBlockParams, 'children'>>;
4
+ declare const CardLayout: React.FC<CardLayoutBlockProps>;
7
5
  export default CardLayout;
@@ -5,17 +5,13 @@ const react_1 = tslib_1.__importDefault(require("react"));
5
5
  const utils_1 = require("../../utils");
6
6
  const grid_1 = require("../../grid");
7
7
  const components_1 = require("../../components");
8
- const b = (0, utils_1.block)('card-layout-block');
9
8
  const DEFAULT_SIZES = {
10
9
  all: 12,
11
10
  sm: 6,
12
11
  md: 4,
13
12
  };
13
+ const b = (0, utils_1.block)('card-layout-block');
14
14
  const CardLayout = ({ title, description, animated, colSizes = DEFAULT_SIZES, children, }) => (react_1.default.createElement(components_1.AnimateBlock, { className: b(), animate: animated },
15
15
  react_1.default.createElement(components_1.BlockHeader, { title: title, description: description }),
16
- react_1.default.createElement("div", null,
17
- react_1.default.createElement(grid_1.Row, null, children &&
18
- react_1.default.Children.map(children, (child, i) => {
19
- return (react_1.default.createElement(grid_1.Col, { sizes: colSizes, key: i, className: b('item') }, child));
20
- })))));
16
+ react_1.default.createElement(grid_1.Row, null, react_1.default.Children.map(children, (child, index) => (react_1.default.createElement(grid_1.Col, { key: index, sizes: colSizes, className: b('item') }, child))))));
21
17
  exports.default = CardLayout;
@@ -0,0 +1,50 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-filter-block {
4
+ --pc-first-block-indent: 0;
5
+ --pc-first-block-mobile-indent: 0;
6
+ }
7
+ .pc-filter-block__title {
8
+ margin-bottom: 24px;
9
+ }
10
+ .pc-filter-block__title_centered {
11
+ text-align: center;
12
+ }
13
+ .pc-filter-block__title_centered > * {
14
+ margin: 0 auto;
15
+ }
16
+ .pc-filter-block__tabs {
17
+ margin-bottom: 0;
18
+ display: flex;
19
+ flex-wrap: nowrap;
20
+ justify-content: flex-start;
21
+ overflow: auto;
22
+ }
23
+ .pc-filter-block__tabs_centered {
24
+ display: flex;
25
+ justify-content: center;
26
+ flex-wrap: wrap;
27
+ }
28
+ @media (max-width: 769px) {
29
+ .pc-filter-block__tabs {
30
+ display: flex;
31
+ flex-wrap: nowrap;
32
+ justify-content: flex-start;
33
+ overflow: auto;
34
+ margin-left: -48px;
35
+ margin-right: -48px;
36
+ padding-left: 48px;
37
+ padding-right: 40px;
38
+ }
39
+ }
40
+ @media (max-width: 577px) {
41
+ .pc-filter-block__tabs {
42
+ margin-left: -24px;
43
+ margin-right: -24px;
44
+ padding-left: 24px;
45
+ padding-right: 16px;
46
+ }
47
+ }
48
+ .row .pc-filter-block__block-container.row {
49
+ margin: 0px;
50
+ }
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { FilterBlockProps } from '../../models';
3
+ declare const FilterBlock: React.FC<FilterBlockProps>;
4
+ export default FilterBlock;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importStar(require("react"));
5
+ const i18n_1 = tslib_1.__importDefault(require("./i18n"));
6
+ const utils_1 = require("../../utils");
7
+ const models_1 = require("../../models");
8
+ const grid_1 = require("../../grid");
9
+ const components_1 = require("../../components");
10
+ const ButtonTabs_1 = tslib_1.__importDefault(require("../../components/ButtonTabs/ButtonTabs"));
11
+ const ConstructorBlocks_1 = require("../../containers/PageConstructor/components/ConstructorBlocks");
12
+ const b = (0, utils_1.block)('filter-block');
13
+ const FilterBlock = ({ title, description, tags, tagButtonSize, allTag, items, colSizes, centered, animated, }) => {
14
+ const tabButtons = (0, react_1.useMemo)(() => {
15
+ const allButton = allTag
16
+ ? { id: null, title: typeof allTag === 'boolean' ? (0, i18n_1.default)('label-all-tag') : allTag }
17
+ : undefined;
18
+ const otherButtons = tags && tags.map((tag) => ({ id: tag.id, title: tag.label }));
19
+ return [...(allButton ? [allButton] : []), ...(otherButtons ? otherButtons : [])];
20
+ }, [allTag, tags]);
21
+ const [selectedTag, setSelectedTag] = (0, react_1.useState)(tabButtons.length ? tabButtons[0].id : null);
22
+ const actualTag = (0, react_1.useMemo)(() => {
23
+ return tabButtons.length && !tabButtons.find((tab) => tab.id === selectedTag)
24
+ ? tabButtons[0].id
25
+ : selectedTag;
26
+ }, [tabButtons, selectedTag]);
27
+ const container = (0, react_1.useMemo)(() => {
28
+ const itemsToShow = actualTag
29
+ ? items.filter((item) => item.tags.includes(actualTag))
30
+ : items;
31
+ return [
32
+ {
33
+ type: models_1.BlockType.CardLayoutBlock,
34
+ title: '',
35
+ colSizes: colSizes,
36
+ children: itemsToShow.map((item) => item.card),
37
+ },
38
+ ];
39
+ }, [actualTag, items, colSizes]);
40
+ return (react_1.default.createElement(components_1.AnimateBlock, { className: b(), animate: animated },
41
+ title && (react_1.default.createElement(components_1.BlockHeader, { className: b('title', { centered: centered }), title: title, description: description })),
42
+ tabButtons.length && (react_1.default.createElement(grid_1.Row, null,
43
+ react_1.default.createElement(grid_1.Col, null,
44
+ react_1.default.createElement(ButtonTabs_1.default, { className: b('tabs', { centered: centered }), items: tabButtons, activeTab: selectedTag, onSelectTab: setSelectedTag, tabSize: tagButtonSize })))),
45
+ react_1.default.createElement(grid_1.Row, { className: b('block-container') },
46
+ react_1.default.createElement(ConstructorBlocks_1.ConstructorBlocks, { items: container }))));
47
+ };
48
+ exports.default = FilterBlock;
@@ -0,0 +1,3 @@
1
+ {
2
+ "label-all-tag": "All"
3
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: (key: string, params?: import("@gravity-ui/i18n").Params | undefined) => string;
2
+ export default _default;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const registerKeyset_1 = require("../../../utils/registerKeyset");
5
+ const en_json_1 = tslib_1.__importDefault(require("./en.json"));
6
+ const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
7
+ const COMPONENT = 'FilterBlock';
8
+ exports.default = (0, registerKeyset_1.registerKeyset)({ en: en_json_1.default, ru: ru_json_1.default }, COMPONENT);
@@ -0,0 +1,3 @@
1
+ {
2
+ "label-all-tag": "Все"
3
+ }
@@ -0,0 +1,229 @@
1
+ export declare const FilterTagProps: {
2
+ additionalProperties: boolean;
3
+ required: string[];
4
+ properties: {
5
+ id: {
6
+ type: string;
7
+ };
8
+ label: {
9
+ type: string;
10
+ };
11
+ };
12
+ };
13
+ export declare const FilterItemProps: {
14
+ additionalProperties: boolean;
15
+ required: string[];
16
+ properties: {
17
+ tags: {
18
+ type: string;
19
+ items: {
20
+ type: string;
21
+ };
22
+ };
23
+ card: {
24
+ $ref: string;
25
+ };
26
+ };
27
+ };
28
+ export declare const FilterProps: {
29
+ additionalProperties: boolean;
30
+ required: string[];
31
+ properties: {
32
+ allTag: {
33
+ oneOf: {
34
+ type: string;
35
+ }[];
36
+ };
37
+ colSizes: {
38
+ type: string;
39
+ additionalProperties: boolean;
40
+ properties: {};
41
+ };
42
+ tags: {
43
+ type: string;
44
+ items: {
45
+ type: string;
46
+ properties: {
47
+ when: {
48
+ type: string;
49
+ };
50
+ };
51
+ };
52
+ };
53
+ items: {
54
+ type: string;
55
+ items: {
56
+ type: string;
57
+ properties: {
58
+ when: {
59
+ type: string;
60
+ };
61
+ };
62
+ };
63
+ };
64
+ tagButtonSize: {
65
+ type: string;
66
+ enum: string[];
67
+ };
68
+ title: {
69
+ oneOf: ({
70
+ type: string;
71
+ additionalProperties: boolean;
72
+ required: string[];
73
+ properties: {
74
+ text: {
75
+ type: string;
76
+ contentType: string;
77
+ };
78
+ textSize: {
79
+ type: string;
80
+ enum: string[];
81
+ };
82
+ url: {
83
+ type: string;
84
+ };
85
+ resetMargin: {
86
+ type: string;
87
+ };
88
+ };
89
+ } | {
90
+ type: string;
91
+ })[];
92
+ };
93
+ description: {
94
+ type: string;
95
+ contentType: string;
96
+ };
97
+ animated: {
98
+ type: string;
99
+ };
100
+ anchor: {
101
+ type: string;
102
+ additionalProperties: boolean;
103
+ required: string[];
104
+ properties: {
105
+ text: {
106
+ type: string;
107
+ contentType: string;
108
+ };
109
+ url: {
110
+ type: string;
111
+ };
112
+ };
113
+ };
114
+ visible: {
115
+ type: string;
116
+ enum: string[];
117
+ };
118
+ resetPaddings: {
119
+ type: string;
120
+ };
121
+ context: {
122
+ type: string;
123
+ };
124
+ type: {};
125
+ when: {};
126
+ };
127
+ };
128
+ export declare const FilterBlock: {
129
+ 'filterable-block': {
130
+ additionalProperties: boolean;
131
+ required: string[];
132
+ properties: {
133
+ allTag: {
134
+ oneOf: {
135
+ type: string;
136
+ }[];
137
+ };
138
+ colSizes: {
139
+ type: string;
140
+ additionalProperties: boolean;
141
+ properties: {};
142
+ };
143
+ tags: {
144
+ type: string;
145
+ items: {
146
+ type: string;
147
+ properties: {
148
+ when: {
149
+ type: string;
150
+ };
151
+ };
152
+ };
153
+ };
154
+ items: {
155
+ type: string;
156
+ items: {
157
+ type: string;
158
+ properties: {
159
+ when: {
160
+ type: string;
161
+ };
162
+ };
163
+ };
164
+ };
165
+ tagButtonSize: {
166
+ type: string;
167
+ enum: string[];
168
+ };
169
+ title: {
170
+ oneOf: ({
171
+ type: string;
172
+ additionalProperties: boolean;
173
+ required: string[];
174
+ properties: {
175
+ text: {
176
+ type: string;
177
+ contentType: string;
178
+ };
179
+ textSize: {
180
+ type: string;
181
+ enum: string[];
182
+ };
183
+ url: {
184
+ type: string;
185
+ };
186
+ resetMargin: {
187
+ type: string;
188
+ };
189
+ };
190
+ } | {
191
+ type: string;
192
+ })[];
193
+ };
194
+ description: {
195
+ type: string;
196
+ contentType: string;
197
+ };
198
+ animated: {
199
+ type: string;
200
+ };
201
+ anchor: {
202
+ type: string;
203
+ additionalProperties: boolean;
204
+ required: string[];
205
+ properties: {
206
+ text: {
207
+ type: string;
208
+ contentType: string;
209
+ };
210
+ url: {
211
+ type: string;
212
+ };
213
+ };
214
+ };
215
+ visible: {
216
+ type: string;
217
+ enum: string[];
218
+ };
219
+ resetPaddings: {
220
+ type: string;
221
+ };
222
+ context: {
223
+ type: string;
224
+ };
225
+ type: {};
226
+ when: {};
227
+ };
228
+ };
229
+ };
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FilterBlock = exports.FilterProps = exports.FilterItemProps = exports.FilterTagProps = void 0;
4
+ const common_1 = require("../../schema/validators/common");
5
+ const utils_1 = require("../../schema/validators/utils");
6
+ exports.FilterTagProps = {
7
+ additionalProperties: false,
8
+ required: ['id', 'label'],
9
+ properties: {
10
+ id: {
11
+ type: 'string',
12
+ },
13
+ label: {
14
+ type: 'string',
15
+ },
16
+ },
17
+ };
18
+ exports.FilterItemProps = {
19
+ additionalProperties: false,
20
+ required: ['tags', 'card'],
21
+ properties: {
22
+ tags: {
23
+ type: 'array',
24
+ items: {
25
+ type: 'string',
26
+ },
27
+ },
28
+ card: { $ref: 'self#/definitions/card' },
29
+ },
30
+ };
31
+ exports.FilterProps = {
32
+ additionalProperties: false,
33
+ required: ['filterTags', 'block'],
34
+ properties: Object.assign(Object.assign(Object.assign(Object.assign({}, common_1.BlockBaseProps), common_1.AnimatableProps), common_1.BlockHeaderProps), { allTag: { oneOf: [{ type: 'boolean' }, { type: 'string' }] }, colSizes: common_1.containerSizesObject, tags: (0, utils_1.filteredArray)(exports.FilterTagProps), items: (0, utils_1.filteredArray)(exports.FilterItemProps), tagButtonSize: {
35
+ type: 'string',
36
+ enum: ['s', 'm', 'l', 'xl'],
37
+ } }),
38
+ };
39
+ exports.FilterBlock = {
40
+ 'filterable-block': exports.FilterProps,
41
+ };
@@ -13,11 +13,38 @@ unpredictable css rules order in build */
13
13
  .pc-tabs-block__block-title_centered > * {
14
14
  margin: 0 auto;
15
15
  }
16
+ .pc-tabs-block__tabs {
17
+ margin-bottom: 20px;
18
+ display: flex;
19
+ flex-wrap: nowrap;
20
+ justify-content: flex-start;
21
+ overflow: auto;
22
+ }
16
23
  .pc-tabs-block__tabs_centered {
17
24
  display: flex;
18
25
  justify-content: center;
19
26
  flex-wrap: wrap;
20
27
  }
28
+ @media (max-width: 769px) {
29
+ .pc-tabs-block__tabs {
30
+ display: flex;
31
+ flex-wrap: nowrap;
32
+ justify-content: flex-start;
33
+ overflow: auto;
34
+ margin-left: -48px;
35
+ margin-right: -48px;
36
+ padding-left: 48px;
37
+ padding-right: 40px;
38
+ }
39
+ }
40
+ @media (max-width: 577px) {
41
+ .pc-tabs-block__tabs {
42
+ margin-left: -24px;
43
+ margin-right: -24px;
44
+ padding-left: 24px;
45
+ padding-right: 16px;
46
+ }
47
+ }
21
48
  .pc-tabs-block__row_reverse {
22
49
  flex-direction: row-reverse;
23
50
  }
@@ -65,16 +92,6 @@ unpredictable css rules order in build */
65
92
  }
66
93
 
67
94
  @media (max-width: 769px) {
68
- .pc-tabs-block__tabs {
69
- display: flex;
70
- flex-wrap: nowrap;
71
- justify-content: flex-start;
72
- overflow: auto;
73
- margin-left: -48px;
74
- margin-right: -48px;
75
- padding-left: 48px;
76
- padding-right: 40px;
77
- }
78
95
  .pc-tabs-block__content-wrapper_margin {
79
96
  margin: 0 0 32px 0;
80
97
  }
@@ -86,14 +103,6 @@ unpredictable css rules order in build */
86
103
  padding-bottom: 0;
87
104
  }
88
105
  }
89
- @media (max-width: 577px) {
90
- .pc-tabs-block__tabs {
91
- margin-left: -24px;
92
- margin-right: -24px;
93
- padding-left: 24px;
94
- padding-right: 16px;
95
- }
96
- }
97
106
  @media (min-width: 769px) {
98
107
  .pc-tabs-block.pc-AnimateBlock .pc-tabs-block__media, .pc-AnimateBlock .pc-tabs-block .pc-tabs-block__media {
99
108
  position: relative;
@@ -19,3 +19,4 @@ export { default as HeaderSliderBlock } from './HeaderSlider/HeaderSlider';
19
19
  export { default as CardLayoutBlock } from './CardLayout/CardLayout';
20
20
  export { default as ContentLayoutBlock } from './ContentLayout/ContentLayout';
21
21
  export { default as ShareBlock } from './Share/Share';
22
+ export { default as FilterBlock } from './FilterBlock/FilterBlock';
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ShareBlock = exports.ContentLayoutBlock = exports.CardLayoutBlock = exports.HeaderSliderBlock = exports.IconsBlock = exports.HeaderBlock = exports.LinkTableBlock = exports.TabsBlock = exports.TableBlock = exports.QuestionsBlock = exports.PromoFeaturesBlock = exports.ExtendedFeaturesBlock = exports.SliderBlock = exports.SecurityBlock = exports.PreviewBlock = exports.MapBlock = exports.MediaBlock = exports.InfoBlock = exports.SimpleBlock = exports.CompaniesBlock = exports.BannerBlock = void 0;
6
+ exports.FilterBlock = exports.ShareBlock = exports.ContentLayoutBlock = exports.CardLayoutBlock = exports.HeaderSliderBlock = exports.IconsBlock = exports.HeaderBlock = exports.LinkTableBlock = exports.TabsBlock = exports.TableBlock = exports.QuestionsBlock = exports.PromoFeaturesBlock = exports.ExtendedFeaturesBlock = exports.SliderBlock = exports.SecurityBlock = exports.PreviewBlock = exports.MapBlock = exports.MediaBlock = exports.InfoBlock = exports.SimpleBlock = exports.CompaniesBlock = exports.BannerBlock = void 0;
7
7
  var Banner_1 = require("./Banner/Banner");
8
8
  Object.defineProperty(exports, "BannerBlock", { enumerable: true, get: function () { return __importDefault(Banner_1).default; } });
9
9
  var Companies_1 = require("./Companies/Companies");
@@ -46,3 +46,5 @@ var ContentLayout_1 = require("./ContentLayout/ContentLayout");
46
46
  Object.defineProperty(exports, "ContentLayoutBlock", { enumerable: true, get: function () { return __importDefault(ContentLayout_1).default; } });
47
47
  var Share_1 = require("./Share/Share");
48
48
  Object.defineProperty(exports, "ShareBlock", { enumerable: true, get: function () { return __importDefault(Share_1).default; } });
49
+ var FilterBlock_1 = require("./FilterBlock/FilterBlock");
50
+ Object.defineProperty(exports, "FilterBlock", { enumerable: true, get: function () { return __importDefault(FilterBlock_1).default; } });
@@ -14,6 +14,8 @@ unpredictable css rules order in build */
14
14
  .pc-button-block_theme_github.pc-button-block_theme_github {
15
15
  --yc-button-background-color: var(--pc-monochrome-button-background-color);
16
16
  --yc-button-background-color-hover: var(--pc-monochrome-button-background-color-hover);
17
+ }
18
+ .pc-button-block_theme_github.pc-button-block_theme_github, .pc-button-block_theme_github.pc-button-block_theme_github:link, .pc-button-block_theme_github.pc-button-block_theme_github:visited, .pc-button-block_theme_github.pc-button-block_theme_github:active, .pc-button-block_theme_github.pc-button-block_theme_github:focus {
17
19
  color: var(--pc-monochrome-button-color);
18
20
  }
19
21
  .pc-button-block_theme_github.pc-button-block_theme_github:hover {
@@ -25,6 +27,8 @@ unpredictable css rules order in build */
25
27
  .pc-button-block_theme_monochrome {
26
28
  --yc-button-background-color: var(--pc-monochrome-button-background-color);
27
29
  --yc-button-background-color-hover: var(--pc-monochrome-button-background-color-hover);
30
+ }
31
+ .pc-button-block_theme_monochrome, .pc-button-block_theme_monochrome:link, .pc-button-block_theme_monochrome:visited, .pc-button-block_theme_monochrome:active, .pc-button-block_theme_monochrome:focus {
28
32
  color: var(--pc-monochrome-button-color);
29
33
  }
30
34
  .pc-button-block_theme_monochrome:hover {
@@ -1,12 +1,25 @@
1
1
  /* use this for style redefinitions to awoid problems with
2
2
  unpredictable css rules order in build */
3
- .pc-button-tabs {
4
- margin-bottom: 20px;
5
- }
6
3
  .pc-button-tabs__item {
7
4
  margin-right: 8px;
8
5
  margin-bottom: 12px;
6
+ --yc-button-background-color: var(--pc-tab-item-background-color);
7
+ --yc-button-background-color-hover: var(--pc-tab-item-background-color-hover);
8
+ }
9
+ .pc-button-tabs__item, .pc-button-tabs__item:link, .pc-button-tabs__item:visited, .pc-button-tabs__item:active, .pc-button-tabs__item:focus {
10
+ color: var(--pc-tab-item-color);
11
+ }
12
+ .pc-button-tabs__item:hover {
13
+ color: var(--pc-tab-item-color);
9
14
  }
10
15
  .pc-button-tabs__item_active {
11
16
  pointer-events: none;
17
+ --yc-button-background-color: var(--pc-selected-tab-item-background-color);
18
+ --yc-button-background-color-hover: var(--pc-selected-tab-item-background-color-hover);
19
+ }
20
+ .pc-button-tabs__item_active, .pc-button-tabs__item_active:link, .pc-button-tabs__item_active:visited, .pc-button-tabs__item_active:active, .pc-button-tabs__item_active:focus {
21
+ color: var(--pc-selected-tab-item-color);
22
+ }
23
+ .pc-button-tabs__item_active:hover {
24
+ color: var(--pc-selected-tab-item-color);
12
25
  }
@@ -1,13 +1,16 @@
1
+ import React from 'react';
2
+ import { ButtonSize } from '@gravity-ui/uikit';
1
3
  import { ButtonProps } from '../../models';
2
4
  export interface ButtonTabsItemProps extends Omit<ButtonProps, 'url' | 'primary' | 'target' | 'text'> {
3
- id: string;
5
+ id: string | null;
4
6
  title: string;
5
7
  }
6
8
  export interface ButtonTabsProps {
7
9
  className?: string;
8
10
  items: ButtonTabsItemProps[];
9
- activeTab?: string;
10
- onSelectTab?: (tabId: string) => void;
11
+ activeTab?: string | null;
12
+ onSelectTab?: (tabId: string | null) => void;
13
+ tabSize?: ButtonSize;
11
14
  }
12
- declare const ButtonTabs: (props: ButtonTabsProps) => JSX.Element;
15
+ declare const ButtonTabs: React.FC<ButtonTabsProps>;
13
16
  export default ButtonTabs;
@@ -5,8 +5,7 @@ const react_1 = tslib_1.__importStar(require("react"));
5
5
  const utils_1 = require("../../utils");
6
6
  const index_1 = require("../index");
7
7
  const b = (0, utils_1.block)('button-tabs');
8
- const ButtonTabs = (props) => {
9
- const { className, items, activeTab, onSelectTab } = props;
8
+ const ButtonTabs = ({ className, items, activeTab, onSelectTab, tabSize = 'l', }) => {
10
9
  const activeTabId = (0, react_1.useMemo)(() => {
11
10
  if (activeTab) {
12
11
  return activeTab;
@@ -18,9 +17,6 @@ const ButtonTabs = (props) => {
18
17
  onSelectTab(tabId);
19
18
  }
20
19
  }, [onSelectTab]);
21
- return (react_1.default.createElement("div", { className: b(null, className) }, items.map((item) => {
22
- const isActive = item.id === activeTabId;
23
- return (react_1.default.createElement(index_1.Button, { text: item.title, className: b('item', { active: isActive }), key: item.title, size: 'l', onClick: () => handleClick(item.id), theme: isActive ? 'monochrome' : 'normal' }));
24
- })));
20
+ return (react_1.default.createElement("div", { className: b(null, className) }, items.map(({ id, title }) => (react_1.default.createElement(index_1.Button, { text: title, className: b('item', { active: id === activeTabId }), key: title, size: tabSize, onClick: () => handleClick(id) })))));
25
21
  };
26
22
  exports.default = ButtonTabs;
@@ -16,10 +16,11 @@ export declare const blockMap: {
16
16
  "header-block": (props: import("./models").WithChildren<import("./models").HeaderBlockProps & import("./models").ClassNameProps>) => JSX.Element;
17
17
  "icons-block": ({ title, size, items }: import("./models").IconsBlockProps) => JSX.Element;
18
18
  "header-slider-block": ({ items, arrows, ...props }: import("./models").HeaderSliderBlockProps) => JSX.Element;
19
- "card-layout-block": ({ title, description, animated, colSizes, children, }: import("./blocks/CardLayout/CardLayout").CardLayoutBlockProps) => JSX.Element;
19
+ "card-layout-block": import("react").FC<import("./blocks/CardLayout/CardLayout").CardLayoutBlockProps>;
20
20
  "content-layout-block": (props: import("./models").ContentLayoutBlockProps) => JSX.Element;
21
21
  "share-block": ({ items, title }: import("./models").ShareBlockProps) => JSX.Element;
22
22
  "map-block": ({ map, ...props }: import("./models").MapBlockProps) => JSX.Element;
23
+ "filter-block": import("react").FC<import("./models").FilterBlockProps>;
23
24
  };
24
25
  export declare const subBlockMap: {
25
26
  divider: ({ size, border }: import("./models").DividerProps) => JSX.Element;
@@ -26,6 +26,7 @@ exports.blockMap = {
26
26
  [models_1.BlockType.ContentLayoutBlock]: blocks_1.ContentLayoutBlock,
27
27
  [models_1.BlockType.ShareBlock]: blocks_1.ShareBlock,
28
28
  [models_1.BlockType.MapBlock]: blocks_1.MapBlock,
29
+ [models_1.BlockType.FilterBlock]: blocks_1.FilterBlock,
29
30
  };
30
31
  exports.subBlockMap = {
31
32
  [models_1.SubBlockType.Divider]: sub_blocks_1.Divider,
@@ -19,6 +19,14 @@ unpredictable css rules order in build */
19
19
  --pc-monochrome-button-color: var(--yc-color-text-light-primary);
20
20
  --pc-text-header-color: var(--yc-color-text-primary);
21
21
  --pc-media-card-meta-info-color: var(--yc-color-text-secondary);
22
+ --pc-tab-item-color: var(--yc-color-text-primary);
23
+ --pc-tab-item-background-color: var(--yc-color-base-generic);
24
+ --pc-tab-item-background-color-hover: var(--yc-color-base-generic-hover);
25
+ --pc-selected-tab-item-color: var(--pc-monochrome-button-color);
26
+ --pc-selected-tab-item-background-color: var(--pc-monochrome-button-background-color);
27
+ --pc-selected-tab-item-background-color-hover: var(
28
+ --pc-monochrome-button-background-color-hover
29
+ );
22
30
  }
23
31
  .yc-root.yc-root_theme_dark {
24
32
  --pc-color-sfx-shadow: var(--yc-color-sfx-shadow);