@salutejs/plasma-new-hope 0.114.0-dev.0 → 0.114.1-canary.1333.10216082008.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. package/cjs/components/Tabs/tokens.js +5 -2
  2. package/cjs/components/Tabs/tokens.js.map +1 -1
  3. package/cjs/components/Tabs/ui/TabItem/TabItem.css +1 -1
  4. package/cjs/components/Tabs/ui/TabItem/TabItem.js +8 -2
  5. package/cjs/components/Tabs/ui/TabItem/TabItem.js.map +1 -1
  6. package/cjs/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  7. package/cjs/components/Tabs/ui/TabItem/variations/_view/base.js.map +1 -1
  8. package/cjs/components/Tabs/ui/TabItem/variations/_view/base_7pcxtm.css +1 -0
  9. package/cjs/components/Tabs/ui/Tabs/Tabs.css +6 -6
  10. package/cjs/components/Tabs/ui/Tabs/Tabs.js +51 -8
  11. package/cjs/components/Tabs/ui/Tabs/Tabs.js.map +1 -1
  12. package/cjs/components/Tabs/ui/Tabs/Tabs.styles.js +7 -7
  13. package/cjs/components/Tabs/ui/Tabs/Tabs.styles.js.map +1 -1
  14. package/{es/components/Tabs/ui/Tabs/Tabs.styles_1b8qt33.css → cjs/components/Tabs/ui/Tabs/Tabs.styles_z4dnzh.css} +2 -2
  15. package/cjs/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  16. package/cjs/components/Tabs/ui/Tabs/variations/_stretch/base.js.map +1 -1
  17. package/{es/components/Tabs/ui/Tabs/variations/_stretch/base_176tz0n.css → cjs/components/Tabs/ui/Tabs/variations/_stretch/base_1c7lnrm.css} +1 -1
  18. package/cjs/components/Tabs/ui/Tabs/variations/_view/base.js +1 -1
  19. package/{es/components/Tabs/ui/Tabs/variations/_view/base_4xkt26.css → cjs/components/Tabs/ui/Tabs/variations/_view/base_aij3sf.css} +1 -1
  20. package/cjs/index.css +7 -7
  21. package/emotion/cjs/components/Tabs/tokens.js +5 -2
  22. package/emotion/cjs/components/Tabs/ui/TabItem/TabItem.js +8 -2
  23. package/emotion/cjs/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  24. package/emotion/cjs/components/Tabs/ui/Tabs/Tabs.js +51 -8
  25. package/emotion/cjs/components/Tabs/ui/Tabs/Tabs.styles.js +8 -16
  26. package/emotion/cjs/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  27. package/emotion/cjs/components/Tabs/ui/Tabs/variations/_view/tokens.json +1 -1
  28. package/emotion/cjs/examples/plasma_b2c/components/Tabs/TabItem.config.js +15 -15
  29. package/emotion/cjs/examples/plasma_b2c/components/Tabs/Tabs.config.js +16 -17
  30. package/emotion/cjs/examples/plasma_b2c/components/Tabs/Tabs.stories.tsx +287 -196
  31. package/emotion/cjs/examples/plasma_web/components/Tabs/TabItem.config.js +15 -15
  32. package/emotion/cjs/examples/plasma_web/components/Tabs/Tabs.config.js +16 -17
  33. package/emotion/cjs/examples/plasma_web/components/Tabs/Tabs.stories.tsx +287 -196
  34. package/emotion/es/components/Tabs/tokens.js +5 -2
  35. package/emotion/es/components/Tabs/ui/TabItem/TabItem.js +8 -2
  36. package/emotion/es/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  37. package/emotion/es/components/Tabs/ui/Tabs/Tabs.js +52 -9
  38. package/emotion/es/components/Tabs/ui/Tabs/Tabs.styles.js +9 -17
  39. package/emotion/es/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  40. package/emotion/es/components/Tabs/ui/Tabs/variations/_view/tokens.json +1 -1
  41. package/emotion/es/examples/plasma_b2c/components/Tabs/TabItem.config.js +15 -15
  42. package/emotion/es/examples/plasma_b2c/components/Tabs/Tabs.config.js +16 -17
  43. package/emotion/es/examples/plasma_b2c/components/Tabs/Tabs.stories.tsx +287 -196
  44. package/emotion/es/examples/plasma_web/components/Tabs/TabItem.config.js +15 -15
  45. package/emotion/es/examples/plasma_web/components/Tabs/Tabs.config.js +16 -17
  46. package/emotion/es/examples/plasma_web/components/Tabs/Tabs.stories.tsx +287 -196
  47. package/es/components/Tabs/tokens.js +5 -2
  48. package/es/components/Tabs/tokens.js.map +1 -1
  49. package/es/components/Tabs/ui/TabItem/TabItem.css +1 -1
  50. package/es/components/Tabs/ui/TabItem/TabItem.js +8 -2
  51. package/es/components/Tabs/ui/TabItem/TabItem.js.map +1 -1
  52. package/es/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  53. package/es/components/Tabs/ui/TabItem/variations/_view/base.js.map +1 -1
  54. package/es/components/Tabs/ui/TabItem/variations/_view/base_7pcxtm.css +1 -0
  55. package/es/components/Tabs/ui/Tabs/Tabs.css +6 -6
  56. package/es/components/Tabs/ui/Tabs/Tabs.js +52 -9
  57. package/es/components/Tabs/ui/Tabs/Tabs.js.map +1 -1
  58. package/es/components/Tabs/ui/Tabs/Tabs.styles.js +7 -7
  59. package/es/components/Tabs/ui/Tabs/Tabs.styles.js.map +1 -1
  60. package/{cjs/components/Tabs/ui/Tabs/Tabs.styles_1b8qt33.css → es/components/Tabs/ui/Tabs/Tabs.styles_z4dnzh.css} +2 -2
  61. package/es/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  62. package/es/components/Tabs/ui/Tabs/variations/_stretch/base.js.map +1 -1
  63. package/{cjs/components/Tabs/ui/Tabs/variations/_stretch/base_176tz0n.css → es/components/Tabs/ui/Tabs/variations/_stretch/base_1c7lnrm.css} +1 -1
  64. package/es/components/Tabs/ui/Tabs/variations/_view/base.js +1 -1
  65. package/{cjs/components/Tabs/ui/Tabs/variations/_view/base_4xkt26.css → es/components/Tabs/ui/Tabs/variations/_view/base_aij3sf.css} +1 -1
  66. package/es/index.css +7 -7
  67. package/package.json +2 -2
  68. package/styled-components/cjs/components/Tabs/tokens.js +5 -2
  69. package/styled-components/cjs/components/Tabs/ui/TabItem/TabItem.js +8 -2
  70. package/styled-components/cjs/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  71. package/styled-components/cjs/components/Tabs/ui/Tabs/Tabs.js +51 -8
  72. package/styled-components/cjs/components/Tabs/ui/Tabs/Tabs.styles.js +2 -2
  73. package/styled-components/cjs/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  74. package/styled-components/cjs/components/Tabs/ui/Tabs/variations/_view/tokens.json +1 -1
  75. package/styled-components/cjs/examples/plasma_b2c/components/Tabs/TabItem.config.js +8 -8
  76. package/styled-components/cjs/examples/plasma_b2c/components/Tabs/Tabs.config.js +4 -5
  77. package/styled-components/cjs/examples/plasma_b2c/components/Tabs/Tabs.stories.tsx +287 -196
  78. package/styled-components/cjs/examples/plasma_web/components/Tabs/TabItem.config.js +8 -8
  79. package/styled-components/cjs/examples/plasma_web/components/Tabs/Tabs.config.js +4 -5
  80. package/styled-components/cjs/examples/plasma_web/components/Tabs/Tabs.stories.tsx +287 -196
  81. package/styled-components/es/components/Tabs/tokens.js +5 -2
  82. package/styled-components/es/components/Tabs/ui/TabItem/TabItem.js +8 -2
  83. package/styled-components/es/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  84. package/styled-components/es/components/Tabs/ui/Tabs/Tabs.js +52 -9
  85. package/styled-components/es/components/Tabs/ui/Tabs/Tabs.styles.js +3 -3
  86. package/styled-components/es/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  87. package/styled-components/es/components/Tabs/ui/Tabs/variations/_view/tokens.json +1 -1
  88. package/styled-components/es/examples/plasma_b2c/components/Tabs/TabItem.config.js +8 -8
  89. package/styled-components/es/examples/plasma_b2c/components/Tabs/Tabs.config.js +4 -5
  90. package/styled-components/es/examples/plasma_b2c/components/Tabs/Tabs.stories.tsx +287 -196
  91. package/styled-components/es/examples/plasma_web/components/Tabs/TabItem.config.js +8 -8
  92. package/styled-components/es/examples/plasma_web/components/Tabs/Tabs.config.js +4 -5
  93. package/styled-components/es/examples/plasma_web/components/Tabs/Tabs.stories.tsx +287 -196
  94. package/types/components/Tabs/tokens.d.ts +3 -0
  95. package/types/components/Tabs/tokens.d.ts.map +1 -1
  96. package/types/components/Tabs/ui/TabItem/TabItem.d.ts.map +1 -1
  97. package/types/components/Tabs/ui/TabItem/variations/_view/base.d.ts.map +1 -1
  98. package/types/components/Tabs/ui/Tabs/Tabs.d.ts +4 -2
  99. package/types/components/Tabs/ui/Tabs/Tabs.d.ts.map +1 -1
  100. package/types/components/Tabs/ui/Tabs/Tabs.styles.d.ts.map +1 -1
  101. package/types/components/Tabs/ui/Tabs/Tabs.types.d.ts +12 -5
  102. package/types/components/Tabs/ui/Tabs/Tabs.types.d.ts.map +1 -1
  103. package/types/components/Tabs/ui/Tabs/variations/_stretch/base.d.ts.map +1 -1
  104. package/types/examples/plasma_b2c/components/Tabs/TabItem.config.d.ts.map +1 -1
  105. package/types/examples/plasma_b2c/components/Tabs/Tabs.config.d.ts +0 -1
  106. package/types/examples/plasma_b2c/components/Tabs/Tabs.config.d.ts.map +1 -1
  107. package/types/examples/plasma_b2c/components/Tabs/Tabs.d.ts +2 -1
  108. package/types/examples/plasma_b2c/components/Tabs/Tabs.d.ts.map +1 -1
  109. package/types/examples/plasma_web/components/Tabs/TabItem.config.d.ts.map +1 -1
  110. package/types/examples/plasma_web/components/Tabs/Tabs.config.d.ts +0 -1
  111. package/types/examples/plasma_web/components/Tabs/Tabs.config.d.ts.map +1 -1
  112. package/types/examples/plasma_web/components/Tabs/Tabs.d.ts +2 -1
  113. package/types/examples/plasma_web/components/Tabs/Tabs.d.ts.map +1 -1
  114. package/types/examples/sds_engineer/components/Tabs/Tabs.d.ts +2 -1
  115. package/types/examples/sds_engineer/components/Tabs/Tabs.d.ts.map +1 -1
  116. package/cjs/components/Tabs/ui/TabItem/variations/_view/base_q8xs21.css +0 -1
  117. package/es/components/Tabs/ui/TabItem/variations/_view/base_q8xs21.css +0 -1
@@ -1,26 +1,55 @@
1
1
  import React, { useState } from 'react';
2
2
  import type { ComponentProps } from 'react';
3
3
  import type { StoryObj, Meta } from '@storybook/react';
4
- import styled from '@emotion/styled';
4
+ import { disableProps } from '@salutejs/plasma-sb-utils';
5
5
 
6
6
  import { tabsConfig } from '../../../../components/Tabs';
7
7
  import { mergeConfig } from '../../../../engines';
8
8
  import { argTypesFromConfig, WithTheme } from '../../../_helpers';
9
9
  import { IconMic } from '../../../../components/_Icon';
10
+ import { Dropdown } from '../Dropdown/Dropdown';
11
+ import { Counter } from '../Counter/Counter';
10
12
 
11
13
  import { config } from './Tabs.config';
12
14
  import { Tabs } from './Tabs';
13
15
  import { TabItem } from './TabItem';
14
16
 
15
- const tabItemViews = ['clear', 'default', 'divider', 'secondary'];
17
+ const clips = ['none', 'scroll', 'showAll'];
18
+ const sizes = ['xs', 's', 'm', 'l'] as const;
19
+ const headerSizes = ['h5', 'h4', 'h3', 'h2', 'h1'] as const;
20
+
21
+ type Size = typeof sizes[number];
16
22
 
17
23
  type CustomStoryTabsProps = {
18
- tabItemView: string;
19
- itemsNumber?: number;
20
- animated?: boolean;
21
- label?: string;
22
- showLeftContent: boolean;
23
- showRightContent: boolean;
24
+ hasDivider: boolean;
25
+ itemQuantity: number;
26
+ contentLeft: string;
27
+ contentRight: string;
28
+ stretch?: boolean;
29
+ };
30
+
31
+ const contentLeftOptions = ['none', 'icon'];
32
+ const contentRightOptions = ['none', 'text', 'counter', 'icon'];
33
+
34
+ const getContentLeft = (contentLeftOption: string, size: Size) => {
35
+ const iconSize = size === 'xs' ? 'xs' : 's';
36
+ return contentLeftOption === 'icon' ? <IconMic size={iconSize} color="inherit" /> : undefined;
37
+ };
38
+
39
+ const getContentRight = (contentRightOption: string, size: Size) => {
40
+ const iconSize = size === 'xs' ? 'xs' : 's';
41
+ const counterSize = size === 'xs' ? 'xxs' : 'xs';
42
+
43
+ switch (contentRightOption) {
44
+ case 'icon':
45
+ return <IconMic size={iconSize} color="inherit" />;
46
+ case 'counter':
47
+ return <Counter size={counterSize} count={1} view="positive" />;
48
+ case 'text':
49
+ return <div>Text</div>;
50
+ default:
51
+ return undefined;
52
+ }
24
53
  };
25
54
 
26
55
  type StoryTabsProps = ComponentProps<typeof Tabs> & CustomStoryTabsProps;
@@ -31,12 +60,19 @@ const meta: Meta<StoryTabsProps> = {
31
60
  decorators: [WithTheme],
32
61
  argTypes: {
33
62
  ...argTypesFromConfig(mergeConfig(tabsConfig, config)),
34
- tabItemView: {
35
- options: tabItemViews,
63
+ contentLeft: {
64
+ options: contentLeftOptions,
65
+ control: {
66
+ type: 'select',
67
+ },
68
+ },
69
+ contentRight: {
70
+ options: contentRightOptions,
36
71
  control: {
37
72
  type: 'select',
38
73
  },
39
74
  },
75
+ ...disableProps(['itemsNumber', 'pilled', 'animated', 'stretch', 'view']),
40
76
  },
41
77
  };
42
78
 
@@ -44,219 +80,274 @@ export default meta;
44
80
 
45
81
  const StoryDefault = (props: StoryTabsProps) => {
46
82
  const {
47
- itemsNumber,
48
- label,
49
- view,
50
83
  disabled,
51
- stretch,
52
- pilled,
53
- animated,
54
- tabItemView,
84
+ itemQuantity,
55
85
  size,
56
- showLeftContent,
57
- showRightContent,
86
+ contentLeft: contentLeftOption,
87
+ contentRight: contentRightOption,
88
+ hasDivider,
58
89
  } = props;
59
- const items = Array(itemsNumber).fill(0);
60
- const secondItems = Array(10).fill(0);
90
+ const items = Array(itemQuantity).fill(0);
61
91
  const [index, setIndex] = useState(0);
62
- const [secondIndex, setSecondIndex] = useState(0);
63
- const [thirdIndex, setThirdIndex] = useState(0);
64
92
 
65
93
  return (
66
- <>
67
- <h3>Tabs with auto width</h3>
68
- <Tabs view={view} stretch={stretch} pilled={pilled} disabled={disabled} size={size}>
69
- {items.map((_, i) => (
70
- <TabItem
71
- key={`item:${i}`}
72
- view={tabItemView}
73
- selected={i === index}
74
- onClick={() => !disabled && setIndex(i)}
75
- tabIndex={!disabled ? 0 : -1}
76
- disabled={disabled}
77
- pilled={pilled}
78
- animated={animated}
79
- contentLeft={showLeftContent && <IconMic size="xs" color="inherit" />}
80
- contentRight={showRightContent && <div>Text</div>}
81
- size={size}
82
- >
83
- {label}
84
- </TabItem>
85
- ))}
86
- </Tabs>
94
+ <Tabs view={hasDivider ? 'divider' : 'clear'} disabled={disabled} size={size}>
95
+ {items.map((_, i) => (
96
+ <TabItem
97
+ key={`item:${i}`}
98
+ view="divider"
99
+ selected={i === index}
100
+ onClick={() => !disabled && setIndex(i)}
101
+ tabIndex={!disabled ? 0 : -1}
102
+ disabled={disabled}
103
+ contentLeft={getContentLeft(contentLeftOption, size as Size)}
104
+ contentRight={getContentRight(contentRightOption, size as Size)}
105
+ size={size}
106
+ >
107
+ {`Label${i + 1}`}
108
+ </TabItem>
109
+ ))}
110
+ </Tabs>
111
+ );
112
+ };
87
113
 
88
- <h3>Tabs with fixed width</h3>
89
- <Tabs
90
- view={view}
91
- stretch={stretch}
92
- pilled={pilled}
93
- disabled={disabled}
94
- size={size}
95
- style={{ width: '28.5rem' }}
96
- >
97
- {secondItems.map((_, i) => (
98
- <TabItem
99
- key={`item:${i}`}
100
- view={tabItemView}
101
- selected={i === secondIndex}
102
- onClick={() => !disabled && setSecondIndex(i)}
103
- tabIndex={!disabled ? 0 : -1}
104
- disabled={disabled}
105
- pilled={pilled}
106
- animated={animated}
107
- contentLeft={showLeftContent && <IconMic size="xs" color="inherit" />}
108
- contentRight={showRightContent && <div>Text</div>}
109
- size={size}
110
- >
111
- {label}
112
- </TabItem>
113
- ))}
114
- </Tabs>
114
+ const StoryScroll = (props: StoryTabsProps) => {
115
+ const {
116
+ disabled,
117
+ itemQuantity,
118
+ clip,
119
+ size,
120
+ contentLeft: contentLeftOption,
121
+ contentRight: contentRightOption,
122
+ hasDivider,
123
+ } = props;
124
+ const items = Array(itemQuantity).fill(0);
125
+ const [index, setIndex] = useState(0);
115
126
 
116
- <h3>Tabs with arrow navigation</h3>
117
- <Tabs view={view} index={thirdIndex} stretch={stretch} pilled={pilled} disabled={disabled} size={size}>
118
- {items.map((_, i) => (
119
- <TabItem
120
- key={`item:${i}`}
121
- view={tabItemView}
122
- selected={i === thirdIndex}
123
- itemIndex={i}
124
- onIndexChange={(i) => setThirdIndex(i)}
125
- onClick={() => !disabled && setThirdIndex(i)}
126
- tabIndex={!disabled ? 0 : -1}
127
- disabled={disabled}
128
- pilled={pilled}
129
- animated={animated}
130
- contentLeft={showLeftContent && <IconMic size="xs" color="inherit" />}
131
- contentRight={showRightContent && <div>Text</div>}
132
- size={size}
127
+ return (
128
+ <Tabs
129
+ clip={clip}
130
+ view={hasDivider ? 'divider' : 'clear'}
131
+ disabled={disabled}
132
+ size={size}
133
+ style={{ width: '15rem' }}
134
+ >
135
+ {items.map((_, i) => (
136
+ <TabItem
137
+ key={`item:${i}`}
138
+ view="divider"
139
+ selected={i === index}
140
+ onClick={() => !disabled && setIndex(i)}
141
+ tabIndex={!disabled ? 0 : -1}
142
+ disabled={disabled}
143
+ contentLeft={getContentLeft(contentLeftOption, size as Size)}
144
+ contentRight={getContentRight(contentRightOption, size as Size)}
145
+ size={size}
146
+ >
147
+ {`Label${i + 1}`}
148
+ </TabItem>
149
+ ))}
150
+ </Tabs>
151
+ );
152
+ };
153
+
154
+ const StoryShowAll = (props: StoryTabsProps) => {
155
+ const {
156
+ disabled,
157
+ itemQuantity,
158
+ clip,
159
+ size,
160
+ contentLeft: contentLeftOption,
161
+ contentRight: contentRightOption,
162
+ hasDivider,
163
+ } = props;
164
+ const maxItemQuantity = 3;
165
+ const items = Array(itemQuantity).fill(0);
166
+ const [index, setIndex] = useState(0);
167
+
168
+ const visibleItems = items.slice(0, maxItemQuantity);
169
+ const otherItems = items.slice(maxItemQuantity);
170
+
171
+ const dropdownItems = otherItems.map((_, i) => {
172
+ const itemIndex = maxItemQuantity + i;
173
+
174
+ return {
175
+ label: `Label${itemIndex + 1}`,
176
+ value: itemIndex,
177
+ };
178
+ });
179
+
180
+ return (
181
+ <Tabs clip={clip} view={hasDivider ? 'divider' : 'clear'} disabled={disabled} size={size}>
182
+ {visibleItems.map((_, i) => (
183
+ <TabItem
184
+ key={`item:${i}`}
185
+ view="divider"
186
+ selected={i === index}
187
+ onClick={() => !disabled && setIndex(i)}
188
+ tabIndex={!disabled ? 0 : -1}
189
+ disabled={disabled}
190
+ contentLeft={getContentLeft(contentLeftOption, size as Size)}
191
+ contentRight={getContentRight(contentRightOption, size as Size)}
192
+ size={size}
193
+ >
194
+ {`Label${i + 1}`}
195
+ </TabItem>
196
+ ))}
197
+ {dropdownItems.length > 0 && (
198
+ <div style={{ marginLeft: '1.75rem' }}>
199
+ <Dropdown
200
+ size={size as Size}
201
+ items={dropdownItems}
202
+ onItemSelect={(item) => setIndex(item.value as number)}
133
203
  >
134
- {label}
135
- </TabItem>
136
- ))}
137
- </Tabs>
138
- </>
204
+ <TabItem
205
+ key="item:ShowAll"
206
+ view="divider"
207
+ tabIndex={!disabled ? 0 : -1}
208
+ disabled={disabled}
209
+ size={size}
210
+ >
211
+ ShowAll
212
+ </TabItem>
213
+ </Dropdown>
214
+ </div>
215
+ )}
216
+ </Tabs>
139
217
  );
140
218
  };
141
219
 
142
220
  export const Default: StoryObj<StoryTabsProps> = {
143
221
  args: {
144
222
  size: 'xs',
145
- itemsNumber: 4,
146
- tabItemView: 'divider',
147
223
  disabled: false,
148
- stretch: false,
149
- pilled: false,
150
- animated: true,
151
- view: 'divider',
152
- label: 'Label',
153
- showLeftContent: false,
154
- showRightContent: false,
224
+ hasDivider: true,
225
+ itemQuantity: 8,
226
+ },
227
+ argTypes: {
228
+ clip: {
229
+ options: clips,
230
+ control: {
231
+ type: 'select',
232
+ },
233
+ },
234
+ size: {
235
+ options: sizes,
236
+ control: {
237
+ type: 'select',
238
+ },
239
+ },
240
+ },
241
+ render: (args) => {
242
+ switch (args.clip) {
243
+ case 'scroll':
244
+ return <StoryScroll {...args} />;
245
+ case 'showAll':
246
+ return <StoryShowAll {...args} />;
247
+ default:
248
+ return <StoryDefault {...args} />;
249
+ }
155
250
  },
156
- render: (args) => <StoryDefault {...args} />,
157
251
  };
158
252
 
159
- const StyledMultipleContainer = styled.div`
160
- display: flex;
161
- align-items: center;
162
- column-gap: 1rem;
163
- `;
253
+ const StoryStretch = (props: StoryTabsProps) => {
254
+ const {
255
+ disabled,
256
+ size,
257
+ contentLeft: contentLeftOption,
258
+ contentRight: contentRightOption,
259
+ hasDivider,
260
+ stretch,
261
+ itemQuantity,
262
+ } = props;
263
+ const items = Array(itemQuantity).fill(0);
264
+ const [index, setIndex] = useState(0);
265
+
266
+ return (
267
+ <Tabs view={hasDivider ? 'divider' : 'clear'} stretch={stretch} disabled={disabled} size={size}>
268
+ {items.map((_, i) => (
269
+ <TabItem
270
+ key={`item:${i}`}
271
+ view="divider"
272
+ selected={i === index}
273
+ onClick={() => !disabled && setIndex(i)}
274
+ tabIndex={!disabled ? 0 : -1}
275
+ disabled={disabled}
276
+ contentLeft={getContentLeft(contentLeftOption, size as Size)}
277
+ contentRight={getContentRight(contentRightOption, size as Size)}
278
+ size={size}
279
+ >
280
+ {`Label${i + 1}`}
281
+ </TabItem>
282
+ ))}
283
+ </Tabs>
284
+ );
285
+ };
164
286
 
165
- const StoryMultiple = ({
166
- itemsNumber,
167
- label,
168
- view,
169
- disabled,
170
- stretch,
171
- pilled,
172
- animated,
173
- tabItemView,
174
- size,
175
- showLeftContent,
176
- showRightContent,
177
- }: StoryTabsProps) => {
178
- const items = Array(itemsNumber).fill(0);
287
+ export const Stretch: StoryObj<StoryTabsProps> = {
288
+ args: {
289
+ size: 'xs',
290
+ stretch: true,
291
+ disabled: false,
292
+ hasDivider: true,
293
+ },
294
+ argTypes: {
295
+ size: {
296
+ options: sizes,
297
+ control: {
298
+ type: 'select',
299
+ },
300
+ },
301
+ },
302
+ render: (args) => <StoryStretch {...args} />,
303
+ };
179
304
 
180
- const [index1, setIndex1] = useState(0);
181
- const [index2, setIndex2] = useState(0);
305
+ const StoryHeaderTabs = (props: StoryTabsProps) => {
306
+ const {
307
+ disabled,
308
+ itemQuantity,
309
+ size,
310
+ contentLeft: contentLeftOption,
311
+ contentRight: contentRightOption,
312
+ hasDivider,
313
+ } = props;
314
+ const items = Array(itemQuantity).fill(0);
315
+ const [index, setIndex] = useState(0);
182
316
 
183
317
  return (
184
- <StyledMultipleContainer>
185
- <Tabs
186
- view={view}
187
- index={index1}
188
- stretch={stretch}
189
- pilled={pilled}
190
- disabled={disabled}
191
- size={size}
192
- style={{ width: '12rem' }}
193
- >
194
- {items.map((_, i) => (
195
- <TabItem
196
- key={`item:${i}`}
197
- view={tabItemView}
198
- selected={i === index1}
199
- itemIndex={i}
200
- onIndexChange={(i) => setIndex1(i)}
201
- onClick={() => !disabled && setIndex1(i)}
202
- tabIndex={!disabled ? 0 : -1}
203
- disabled={disabled}
204
- pilled={pilled}
205
- animated={animated}
206
- contentLeft={showLeftContent && <IconMic size="xs" color="inherit" />}
207
- contentRight={showRightContent && <div>Text</div>}
208
- size={size}
209
- >
210
- {label}
211
- </TabItem>
212
- ))}
213
- </Tabs>
214
- <Tabs
215
- view={view}
216
- index={index2}
217
- stretch={stretch}
218
- pilled={pilled}
219
- disabled={disabled}
220
- size={size}
221
- style={{ width: '12rem' }}
222
- >
223
- {items.map((_, i) => (
224
- <TabItem
225
- key={`item:${i}`}
226
- view={tabItemView}
227
- selected={i === index2}
228
- itemIndex={i}
229
- onIndexChange={(i) => setIndex2(i)}
230
- onClick={() => !disabled && setIndex2(i)}
231
- tabIndex={!disabled ? 0 : -1}
232
- disabled={disabled}
233
- pilled={pilled}
234
- animated={animated}
235
- contentLeft={showLeftContent && <IconMic size="xs" color="inherit" />}
236
- contentRight={showRightContent && <div>Text</div>}
237
- size={size}
238
- >
239
- {label}
240
- </TabItem>
241
- ))}
242
- </Tabs>
243
- </StyledMultipleContainer>
318
+ <Tabs view={hasDivider ? 'divider' : 'clear'} disabled={disabled} size={size}>
319
+ {items.map((_, i) => (
320
+ <TabItem
321
+ key={`item:${i}`}
322
+ view="divider"
323
+ selected={i === index}
324
+ onClick={() => !disabled && setIndex(i)}
325
+ tabIndex={!disabled ? 0 : -1}
326
+ disabled={disabled}
327
+ contentLeft={getContentLeft(contentLeftOption, size as Size)}
328
+ contentRight={getContentRight(contentRightOption, size as Size)}
329
+ size={size}
330
+ >
331
+ {`Label${i + 1}`}
332
+ </TabItem>
333
+ ))}
334
+ </Tabs>
244
335
  );
245
336
  };
246
337
 
247
- export const Multiple: StoryObj<StoryTabsProps> = {
338
+ export const HeaderTabs: StoryObj<StoryTabsProps> = {
248
339
  args: {
249
- size: 'xs',
250
- itemsNumber: 6,
251
- tabItemView: 'divider',
340
+ size: 'h5',
252
341
  disabled: false,
253
- stretch: false,
254
- pilled: false,
255
- animated: true,
256
- view: 'divider',
257
- label: 'Label',
258
- showLeftContent: false,
259
- showRightContent: false,
342
+ hasDivider: true,
343
+ },
344
+ argTypes: {
345
+ size: {
346
+ options: headerSizes,
347
+ control: {
348
+ type: 'select',
349
+ },
350
+ },
260
351
  },
261
- render: (args) => <StoryMultiple {...args} />,
352
+ render: (args) => <StoryHeaderTabs {...args} />,
262
353
  };
@@ -9,7 +9,9 @@ export var classes = {
9
9
  tabRightContent: 'tab-item-right-content',
10
10
  tabLeftContent: 'tab-item-left-content',
11
11
  tabsHasLeftArrow: 'tabs-has-left-arrow',
12
- tabsHasRightArrow: 'tabs-has-right-arrow'
12
+ tabsHasRightArrow: 'tabs-has-right-arrow',
13
+ tabsClipScroll: 'tabs-clip-scroll',
14
+ tabsClipShowAll: 'tabs-clip-show-all'
13
15
  };
14
16
  export var tokens = {
15
17
  disabledOpacity: '--plasma-tabs-disabled-opacity',
@@ -26,7 +28,7 @@ export var tokens = {
26
28
  outlineFocusColor: '--plasma-tabs-outline-focus-color',
27
29
  arrowColor: '--plasma-tabs-arrow-color',
28
30
  tabsFilledBackgroundColor: '--plasma-tabs-filled-background-color',
29
- tabsBackgroundColor: '--plasma-tabs-backgorund-color',
31
+ tabsBackgroundColor: '--plasma-tabs-background-color',
30
32
  tabsBorderRadius: '--plasma-tabs-border-radius',
31
33
  tabsWidth: '--plasma-tabs-width',
32
34
  tabsHeight: '--plasma-tabs-height',
@@ -50,6 +52,7 @@ export var tokens = {
50
52
  itemColor: '--plasma-tab-item-color',
51
53
  itemBackgroundColor: '--plasma-tab-item-background-color',
52
54
  itemColorHover: '--plasma-tab-item-color-hover',
55
+ itemColorActive: '--plasma-tab-item-color-active',
53
56
  itemBackgroundColorHover: '--plasma-tab-item-background-color-hover',
54
57
  itemSelectedColor: '--plasma-tab-item-selected-color',
55
58
  itemSelectedBackgroundColor: '--plasma-tab-item-selected-background-color',
@@ -1,4 +1,4 @@
1
- var _excluded = ["size", "view", "isActive", "selected", "disabled", "pilled", "children", "contentLeft", "contentRight", "animated", "onIndexChange", "itemIndex", "tabIndex", "className"];
1
+ var _excluded = ["size", "view", "isActive", "selected", "disabled", "pilled", "children", "contentLeft", "contentRight", "animated", "onIndexChange", "itemIndex", "tabIndex", "className", "onClick"];
2
2
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
3
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
4
4
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
@@ -31,6 +31,7 @@ export var tabItemRoot = function tabItemRoot(Root) {
31
31
  itemIndex = props.itemIndex,
32
32
  tabIndex = props.tabIndex,
33
33
  className = props.className,
34
+ onClick = props.onClick,
34
35
  rest = _objectWithoutProperties(props, _excluded);
35
36
  var innerRef = useRef(null);
36
37
  var ref = useForkRef(outerRef, innerRef);
@@ -72,6 +73,10 @@ export var tabItemRoot = function tabItemRoot(Root) {
72
73
  onIndexChange === null || onIndexChange === void 0 || onIndexChange(focusIndex);
73
74
  refs.setCurrent(focusIndex);
74
75
  }, [refs, innerRef, onIndexChange, disabled]);
76
+ var handleClick = useCallback(function (event) {
77
+ event.currentTarget.scrollIntoView();
78
+ onClick && onClick(event);
79
+ }, [onClick]);
75
80
  return /*#__PURE__*/React.createElement(Root, _extends({
76
81
  ref: ref,
77
82
  disabled: disabled,
@@ -81,7 +86,8 @@ export var tabItemRoot = function tabItemRoot(Root) {
81
86
  size: size,
82
87
  onFocus: onItemFocus,
83
88
  tabIndex: hasKeyNavigation ? navigationTabIndex : tabIndex,
84
- className: cx(pilledClass, selectedClass, animatedClass, className)
89
+ className: cx(pilledClass, selectedClass, animatedClass, className),
90
+ onClick: handleClick
85
91
  }, rest), /*#__PURE__*/React.createElement(React.Fragment, null, contentLeft && /*#__PURE__*/React.createElement(LeftContent, {
86
92
  className: classes.tabLeftContent
87
93
  }, contentLeft), /*#__PURE__*/React.createElement(StyledContent, {
@@ -1,4 +1,4 @@
1
1
  import { css } from '@emotion/react';
2
2
  import { classes, tokens } from '../../../../tokens';
3
3
  import { RightContent } from '../../TabItem.styles';
4
- export var base = /*#__PURE__*/css("color:var(", tokens.itemColor, ");background-color:var(", tokens.itemBackgroundColor, ");margin-left:var(", tokens.itemMarginLeftFilled, ", var(", tokens.itemMarginLeft, "));&:hover{color:var(", tokens.itemColorHover, ");background-color:var(", tokens.itemBackgroundColorHover, ");", RightContent, "{color:var(", tokens.additionalContentHoverColor, ");}}&.", /*#__PURE__*/String(classes.tabItemAnimated), "{transition:var(", tokens.itemBackgroundTransition, ");}&.", /*#__PURE__*/String(classes.selectedTabsItem), "{color:var(", tokens.itemSelectedColor, ");background-color:var(", tokens.itemSelectedBackgroundColor, ");&:hover{color:var(", tokens.itemSelectedColorHover, ");background-color:var(", tokens.itemSelectedBackgroundColorHover, ");&::after{background:var(", tokens.itemSelectedDividerColorHover, ");}}", RightContent, "{color:var(", tokens.additionalContentSelectedColor, ");&:hover{color:var(", tokens.additionalContentSelectedHoverColor, ");}}&::after{content:'';position:absolute;bottom:0px;left:0;right:0;background:var(", tokens.itemSelectedDividerColor, ");height:var(", tokens.itemSelectedDividerHeight, ");border-radius:1px;}};label:plasma-new-hope__base;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy1lbW90aW9uL2NvbXBvbmVudHMvVGFicy91aS9UYWJJdGVtL3ZhcmlhdGlvbnMvX3ZpZXcvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLdUIiLCJmaWxlIjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjLWVtb3Rpb24vY29tcG9uZW50cy9UYWJzL3VpL1RhYkl0ZW0vdmFyaWF0aW9ucy9fdmlldy9iYXNlLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuXG5pbXBvcnQgeyBjbGFzc2VzLCB0b2tlbnMgfSBmcm9tICcuLi8uLi8uLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgUmlnaHRDb250ZW50IH0gZnJvbSAnLi4vLi4vVGFiSXRlbS5zdHlsZXMnO1xuXG5leHBvcnQgY29uc3QgYmFzZSA9IGNzc2BcbiAgICBjb2xvcjogdmFyKCR7dG9rZW5zLml0ZW1Db2xvcn0pO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigke3Rva2Vucy5pdGVtQmFja2dyb3VuZENvbG9yfSk7XG5cbiAgICBtYXJnaW4tbGVmdDogdmFyKCR7dG9rZW5zLml0ZW1NYXJnaW5MZWZ0RmlsbGVkfSwgdmFyKCR7dG9rZW5zLml0ZW1NYXJnaW5MZWZ0fSkpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoJHt0b2tlbnMuaXRlbUNvbG9ySG92ZXJ9KTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKCR7dG9rZW5zLml0ZW1CYWNrZ3JvdW5kQ29sb3JIb3Zlcn0pO1xuXG4gICAgICAgICR7UmlnaHRDb250ZW50fSB7XG4gICAgICAgICAgICBjb2xvcjogdmFyKCR7dG9rZW5zLmFkZGl0aW9uYWxDb250ZW50SG92ZXJDb2xvcn0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi4ke1N0cmluZyhjbGFzc2VzLnRhYkl0ZW1BbmltYXRlZCl9IHtcbiAgICAgICAgdHJhbnNpdGlvbjogdmFyKCR7dG9rZW5zLml0ZW1CYWNrZ3JvdW5kVHJhbnNpdGlvbn0pO1xuICAgIH1cblxuICAgICYuJHtTdHJpbmcoY2xhc3Nlcy5zZWxlY3RlZFRhYnNJdGVtKX0ge1xuICAgICAgICBjb2xvcjogdmFyKCR7dG9rZW5zLml0ZW1TZWxlY3RlZENvbG9yfSk7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigke3Rva2Vucy5pdGVtU2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3J9KTtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiB2YXIoJHt0b2tlbnMuaXRlbVNlbGVjdGVkQ29sb3JIb3Zlcn0pO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKCR7dG9rZW5zLml0ZW1TZWxlY3RlZEJhY2tncm91bmRDb2xvckhvdmVyfSk7XG5cbiAgICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoJHt0b2tlbnMuaXRlbVNlbGVjdGVkRGl2aWRlckNvbG9ySG92ZXJ9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICR7UmlnaHRDb250ZW50fSB7XG4gICAgICAgICAgICBjb2xvcjogdmFyKCR7dG9rZW5zLmFkZGl0aW9uYWxDb250ZW50U2VsZWN0ZWRDb2xvcn0pO1xuXG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogdmFyKCR7dG9rZW5zLmFkZGl0aW9uYWxDb250ZW50U2VsZWN0ZWRIb3ZlckNvbG9yfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGJvdHRvbTogMHB4O1xuICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKCR7dG9rZW5zLml0ZW1TZWxlY3RlZERpdmlkZXJDb2xvcn0pO1xuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoJHt0b2tlbnMuaXRlbVNlbGVjdGVkRGl2aWRlckhlaWdodH0pO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4O1xuICAgICAgICB9XG4gICAgfVxuYDtcbiJdfQ== */"));
4
+ export var base = /*#__PURE__*/css("color:var(", tokens.itemColor, ");background-color:var(", tokens.itemBackgroundColor, ");margin-left:var(", tokens.itemMarginLeftFilled, ", var(", tokens.itemMarginLeft, "));&:hover{color:var(", tokens.itemColorHover, ");background-color:var(", tokens.itemBackgroundColorHover, ");", RightContent, "{color:var(", tokens.additionalContentHoverColor, ");}}&:active{color:var(", tokens.itemColorActive, ");}&.", /*#__PURE__*/String(classes.tabItemAnimated), "{transition:var(", tokens.itemBackgroundTransition, ");}&.", /*#__PURE__*/String(classes.selectedTabsItem), "{color:var(", tokens.itemSelectedColor, ");background-color:var(", tokens.itemSelectedBackgroundColor, ");&:hover{color:var(", tokens.itemSelectedColorHover, ");background-color:var(", tokens.itemSelectedBackgroundColorHover, ");&::after{background:var(", tokens.itemSelectedDividerColorHover, ");}}", RightContent, "{color:var(", tokens.additionalContentSelectedColor, ");&:hover{color:var(", tokens.additionalContentSelectedHoverColor, ");}}&::after{content:'';position:absolute;bottom:0px;left:0;right:0;background:var(", tokens.itemSelectedDividerColor, ");height:var(", tokens.itemSelectedDividerHeight, ");border-radius:1px;}};label:plasma-new-hope__base;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy1lbW90aW9uL2NvbXBvbmVudHMvVGFicy91aS9UYWJJdGVtL3ZhcmlhdGlvbnMvX3ZpZXcvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLdUIiLCJmaWxlIjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjLWVtb3Rpb24vY29tcG9uZW50cy9UYWJzL3VpL1RhYkl0ZW0vdmFyaWF0aW9ucy9fdmlldy9iYXNlLnRzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuXG5pbXBvcnQgeyBjbGFzc2VzLCB0b2tlbnMgfSBmcm9tICcuLi8uLi8uLi8uLi90b2tlbnMnO1xuaW1wb3J0IHsgUmlnaHRDb250ZW50IH0gZnJvbSAnLi4vLi4vVGFiSXRlbS5zdHlsZXMnO1xuXG5leHBvcnQgY29uc3QgYmFzZSA9IGNzc2BcbiAgICBjb2xvcjogdmFyKCR7dG9rZW5zLml0ZW1Db2xvcn0pO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigke3Rva2Vucy5pdGVtQmFja2dyb3VuZENvbG9yfSk7XG5cbiAgICBtYXJnaW4tbGVmdDogdmFyKCR7dG9rZW5zLml0ZW1NYXJnaW5MZWZ0RmlsbGVkfSwgdmFyKCR7dG9rZW5zLml0ZW1NYXJnaW5MZWZ0fSkpO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoJHt0b2tlbnMuaXRlbUNvbG9ySG92ZXJ9KTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKCR7dG9rZW5zLml0ZW1CYWNrZ3JvdW5kQ29sb3JIb3Zlcn0pO1xuXG4gICAgICAgICR7UmlnaHRDb250ZW50fSB7XG4gICAgICAgICAgICBjb2xvcjogdmFyKCR7dG9rZW5zLmFkZGl0aW9uYWxDb250ZW50SG92ZXJDb2xvcn0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgICBjb2xvcjogdmFyKCR7dG9rZW5zLml0ZW1Db2xvckFjdGl2ZX0pO1xuICAgIH1cblxuICAgICYuJHtTdHJpbmcoY2xhc3Nlcy50YWJJdGVtQW5pbWF0ZWQpfSB7XG4gICAgICAgIHRyYW5zaXRpb246IHZhcigke3Rva2Vucy5pdGVtQmFja2dyb3VuZFRyYW5zaXRpb259KTtcbiAgICB9XG5cbiAgICAmLiR7U3RyaW5nKGNsYXNzZXMuc2VsZWN0ZWRUYWJzSXRlbSl9IHtcbiAgICAgICAgY29sb3I6IHZhcigke3Rva2Vucy5pdGVtU2VsZWN0ZWRDb2xvcn0pO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoJHt0b2tlbnMuaXRlbVNlbGVjdGVkQmFja2dyb3VuZENvbG9yfSk7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogdmFyKCR7dG9rZW5zLml0ZW1TZWxlY3RlZENvbG9ySG92ZXJ9KTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigke3Rva2Vucy5pdGVtU2VsZWN0ZWRCYWNrZ3JvdW5kQ29sb3JIb3Zlcn0pO1xuXG4gICAgICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKCR7dG9rZW5zLml0ZW1TZWxlY3RlZERpdmlkZXJDb2xvckhvdmVyfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAke1JpZ2h0Q29udGVudH0ge1xuICAgICAgICAgICAgY29sb3I6IHZhcigke3Rva2Vucy5hZGRpdGlvbmFsQ29udGVudFNlbGVjdGVkQ29sb3J9KTtcblxuICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6IHZhcigke3Rva2Vucy5hZGRpdGlvbmFsQ29udGVudFNlbGVjdGVkSG92ZXJDb2xvcn0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBib3R0b206IDBweDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigke3Rva2Vucy5pdGVtU2VsZWN0ZWREaXZpZGVyQ29sb3J9KTtcbiAgICAgICAgICAgIGhlaWdodDogdmFyKCR7dG9rZW5zLml0ZW1TZWxlY3RlZERpdmlkZXJIZWlnaHR9KTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDtcbiAgICAgICAgfVxuICAgIH1cbmA7XG4iXX0= */"));