@salutejs/plasma-new-hope 0.114.0-canary.1332.10195467656.0 → 0.114.1-canary.1333.10211221618.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (198) hide show
  1. package/cjs/components/DatePicker/DatePickerBase.styles.js +1 -1
  2. package/cjs/components/DatePicker/DatePickerBase.styles.js.map +1 -1
  3. package/cjs/components/DatePicker/DatePickerBase.styles_192va2p.css +1 -0
  4. package/cjs/components/DatePicker/RangeDate/RangeDate.js +13 -9
  5. package/cjs/components/DatePicker/RangeDate/RangeDate.js.map +1 -1
  6. package/cjs/components/DatePicker/SingleDate/SingleDate.css +4 -4
  7. package/cjs/components/DatePicker/SingleDate/SingleDate.js +13 -5
  8. package/cjs/components/DatePicker/SingleDate/SingleDate.js.map +1 -1
  9. package/cjs/components/DatePicker/SingleDate/SingleDate.styles.js +1 -1
  10. package/cjs/components/DatePicker/SingleDate/SingleDate.styles.js.map +1 -1
  11. package/cjs/components/DatePicker/SingleDate/SingleDate.styles_18z9fw1.css +5 -0
  12. package/cjs/components/DatePicker/SingleDate/variations/_size/base.js +1 -1
  13. package/cjs/components/DatePicker/SingleDate/variations/_size/base.js.map +1 -1
  14. package/cjs/components/DatePicker/SingleDate/variations/_size/base_lf7y25.css +1 -0
  15. package/cjs/components/DatePicker/hooks/useKeyboardNavigation.js +30 -0
  16. package/cjs/components/DatePicker/hooks/useKeyboardNavigation.js.map +1 -0
  17. package/cjs/components/Tabs/tokens.js +5 -2
  18. package/cjs/components/Tabs/tokens.js.map +1 -1
  19. package/cjs/components/Tabs/ui/TabItem/TabItem.css +1 -1
  20. package/cjs/components/Tabs/ui/TabItem/TabItem.js +8 -2
  21. package/cjs/components/Tabs/ui/TabItem/TabItem.js.map +1 -1
  22. package/cjs/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  23. package/cjs/components/Tabs/ui/TabItem/variations/_view/base.js.map +1 -1
  24. package/cjs/components/Tabs/ui/TabItem/variations/_view/base_7pcxtm.css +1 -0
  25. package/cjs/components/Tabs/ui/Tabs/Tabs.css +6 -6
  26. package/cjs/components/Tabs/ui/Tabs/Tabs.js +49 -7
  27. package/cjs/components/Tabs/ui/Tabs/Tabs.js.map +1 -1
  28. package/cjs/components/Tabs/ui/Tabs/Tabs.styles.js +7 -7
  29. package/cjs/components/Tabs/ui/Tabs/Tabs.styles.js.map +1 -1
  30. package/cjs/components/Tabs/ui/Tabs/{Tabs.styles_1b8qt33.css → Tabs.styles_106qhdc.css} +1 -1
  31. package/cjs/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  32. package/cjs/components/Tabs/ui/Tabs/variations/_stretch/base.js.map +1 -1
  33. package/cjs/components/Tabs/ui/Tabs/variations/_stretch/{base_176tz0n.css → base_1c7lnrm.css} +1 -1
  34. package/cjs/components/Tabs/ui/Tabs/variations/_view/base.js +1 -1
  35. package/cjs/components/Tabs/ui/Tabs/variations/_view/{base_4xkt26.css → base_aij3sf.css} +1 -1
  36. package/cjs/index.css +11 -11
  37. package/emotion/cjs/components/DatePicker/DatePickerBase.styles.js +1 -1
  38. package/emotion/cjs/components/DatePicker/RangeDate/RangeDate.js +13 -9
  39. package/emotion/cjs/components/DatePicker/SingleDate/SingleDate.js +13 -5
  40. package/emotion/cjs/components/DatePicker/SingleDate/SingleDate.styles.js +14 -5
  41. package/emotion/cjs/components/DatePicker/SingleDate/variations/_size/base.js +1 -1
  42. package/emotion/cjs/components/DatePicker/hooks/useKeyboardNavigation.js +32 -0
  43. package/emotion/cjs/components/Tabs/tokens.js +5 -2
  44. package/emotion/cjs/components/Tabs/ui/TabItem/TabItem.js +8 -2
  45. package/emotion/cjs/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  46. package/emotion/cjs/components/Tabs/ui/Tabs/Tabs.js +49 -7
  47. package/emotion/cjs/components/Tabs/ui/Tabs/Tabs.styles.js +4 -12
  48. package/emotion/cjs/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  49. package/emotion/cjs/components/Tabs/ui/Tabs/variations/_view/tokens.json +1 -1
  50. package/emotion/cjs/examples/plasma_b2c/components/DatePicker/DatePicker.config.js +7 -7
  51. package/emotion/cjs/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +1 -80
  52. package/emotion/cjs/examples/plasma_b2c/components/Tabs/TabItem.config.js +15 -15
  53. package/emotion/cjs/examples/plasma_b2c/components/Tabs/Tabs.config.js +16 -17
  54. package/emotion/cjs/examples/plasma_b2c/components/Tabs/Tabs.stories.tsx +261 -196
  55. package/emotion/cjs/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +1 -80
  56. package/emotion/cjs/examples/plasma_web/components/Tabs/TabItem.config.js +15 -15
  57. package/emotion/cjs/examples/plasma_web/components/Tabs/Tabs.config.js +16 -17
  58. package/emotion/cjs/examples/plasma_web/components/Tabs/Tabs.stories.tsx +261 -196
  59. package/emotion/es/components/DatePicker/DatePickerBase.styles.js +1 -1
  60. package/emotion/es/components/DatePicker/RangeDate/RangeDate.js +13 -9
  61. package/emotion/es/components/DatePicker/SingleDate/SingleDate.js +13 -5
  62. package/emotion/es/components/DatePicker/SingleDate/SingleDate.styles.js +15 -6
  63. package/emotion/es/components/DatePicker/SingleDate/variations/_size/base.js +1 -1
  64. package/emotion/es/components/DatePicker/hooks/useKeyboardNavigation.js +26 -0
  65. package/emotion/es/components/Tabs/tokens.js +5 -2
  66. package/emotion/es/components/Tabs/ui/TabItem/TabItem.js +8 -2
  67. package/emotion/es/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  68. package/emotion/es/components/Tabs/ui/Tabs/Tabs.js +50 -8
  69. package/emotion/es/components/Tabs/ui/Tabs/Tabs.styles.js +5 -13
  70. package/emotion/es/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  71. package/emotion/es/components/Tabs/ui/Tabs/variations/_view/tokens.json +1 -1
  72. package/emotion/es/examples/plasma_b2c/components/DatePicker/DatePicker.config.js +7 -7
  73. package/emotion/es/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +1 -80
  74. package/emotion/es/examples/plasma_b2c/components/Tabs/TabItem.config.js +15 -15
  75. package/emotion/es/examples/plasma_b2c/components/Tabs/Tabs.config.js +16 -17
  76. package/emotion/es/examples/plasma_b2c/components/Tabs/Tabs.stories.tsx +261 -196
  77. package/emotion/es/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +1 -80
  78. package/emotion/es/examples/plasma_web/components/Tabs/TabItem.config.js +15 -15
  79. package/emotion/es/examples/plasma_web/components/Tabs/Tabs.config.js +16 -17
  80. package/emotion/es/examples/plasma_web/components/Tabs/Tabs.stories.tsx +261 -196
  81. package/es/components/DatePicker/DatePickerBase.styles.js +1 -1
  82. package/es/components/DatePicker/DatePickerBase.styles.js.map +1 -1
  83. package/es/components/DatePicker/DatePickerBase.styles_192va2p.css +1 -0
  84. package/es/components/DatePicker/RangeDate/RangeDate.js +13 -9
  85. package/es/components/DatePicker/RangeDate/RangeDate.js.map +1 -1
  86. package/es/components/DatePicker/SingleDate/SingleDate.css +4 -4
  87. package/es/components/DatePicker/SingleDate/SingleDate.js +13 -5
  88. package/es/components/DatePicker/SingleDate/SingleDate.js.map +1 -1
  89. package/es/components/DatePicker/SingleDate/SingleDate.styles.js +1 -1
  90. package/es/components/DatePicker/SingleDate/SingleDate.styles.js.map +1 -1
  91. package/es/components/DatePicker/SingleDate/SingleDate.styles_18z9fw1.css +5 -0
  92. package/es/components/DatePicker/SingleDate/variations/_size/base.js +1 -1
  93. package/es/components/DatePicker/SingleDate/variations/_size/base.js.map +1 -1
  94. package/es/components/DatePicker/SingleDate/variations/_size/base_lf7y25.css +1 -0
  95. package/es/components/DatePicker/hooks/useKeyboardNavigation.js +25 -0
  96. package/es/components/DatePicker/hooks/useKeyboardNavigation.js.map +1 -0
  97. package/es/components/Tabs/tokens.js +5 -2
  98. package/es/components/Tabs/tokens.js.map +1 -1
  99. package/es/components/Tabs/ui/TabItem/TabItem.css +1 -1
  100. package/es/components/Tabs/ui/TabItem/TabItem.js +8 -2
  101. package/es/components/Tabs/ui/TabItem/TabItem.js.map +1 -1
  102. package/es/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  103. package/es/components/Tabs/ui/TabItem/variations/_view/base.js.map +1 -1
  104. package/es/components/Tabs/ui/TabItem/variations/_view/base_7pcxtm.css +1 -0
  105. package/es/components/Tabs/ui/Tabs/Tabs.css +6 -6
  106. package/es/components/Tabs/ui/Tabs/Tabs.js +50 -8
  107. package/es/components/Tabs/ui/Tabs/Tabs.js.map +1 -1
  108. package/es/components/Tabs/ui/Tabs/Tabs.styles.js +7 -7
  109. package/es/components/Tabs/ui/Tabs/Tabs.styles.js.map +1 -1
  110. package/es/components/Tabs/ui/Tabs/{Tabs.styles_1b8qt33.css → Tabs.styles_106qhdc.css} +1 -1
  111. package/es/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  112. package/es/components/Tabs/ui/Tabs/variations/_stretch/base.js.map +1 -1
  113. package/es/components/Tabs/ui/Tabs/variations/_stretch/{base_176tz0n.css → base_1c7lnrm.css} +1 -1
  114. package/es/components/Tabs/ui/Tabs/variations/_view/base.js +1 -1
  115. package/es/components/Tabs/ui/Tabs/variations/_view/{base_4xkt26.css → base_aij3sf.css} +1 -1
  116. package/es/index.css +11 -11
  117. package/package.json +2 -2
  118. package/styled-components/cjs/components/DatePicker/DatePickerBase.styles.js +1 -1
  119. package/styled-components/cjs/components/DatePicker/RangeDate/RangeDate.js +13 -9
  120. package/styled-components/cjs/components/DatePicker/SingleDate/SingleDate.js +13 -5
  121. package/styled-components/cjs/components/DatePicker/SingleDate/SingleDate.styles.js +2 -2
  122. package/styled-components/cjs/components/DatePicker/SingleDate/variations/_size/base.js +1 -1
  123. package/styled-components/cjs/components/DatePicker/hooks/useKeyboardNavigation.js +32 -0
  124. package/styled-components/cjs/components/Tabs/tokens.js +5 -2
  125. package/styled-components/cjs/components/Tabs/ui/TabItem/TabItem.js +8 -2
  126. package/styled-components/cjs/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  127. package/styled-components/cjs/components/Tabs/ui/Tabs/Tabs.js +49 -7
  128. package/styled-components/cjs/components/Tabs/ui/Tabs/Tabs.styles.js +1 -1
  129. package/styled-components/cjs/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  130. package/styled-components/cjs/components/Tabs/ui/Tabs/variations/_view/tokens.json +1 -1
  131. package/styled-components/cjs/examples/plasma_b2c/components/DatePicker/DatePicker.config.js +1 -1
  132. package/styled-components/cjs/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +1 -80
  133. package/styled-components/cjs/examples/plasma_b2c/components/Tabs/TabItem.config.js +8 -8
  134. package/styled-components/cjs/examples/plasma_b2c/components/Tabs/Tabs.config.js +4 -5
  135. package/styled-components/cjs/examples/plasma_b2c/components/Tabs/Tabs.stories.tsx +261 -196
  136. package/styled-components/cjs/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +1 -80
  137. package/styled-components/cjs/examples/plasma_web/components/Tabs/TabItem.config.js +8 -8
  138. package/styled-components/cjs/examples/plasma_web/components/Tabs/Tabs.config.js +4 -5
  139. package/styled-components/cjs/examples/plasma_web/components/Tabs/Tabs.stories.tsx +261 -196
  140. package/styled-components/es/components/DatePicker/DatePickerBase.styles.js +1 -1
  141. package/styled-components/es/components/DatePicker/RangeDate/RangeDate.js +13 -9
  142. package/styled-components/es/components/DatePicker/SingleDate/SingleDate.js +13 -5
  143. package/styled-components/es/components/DatePicker/SingleDate/SingleDate.styles.js +3 -3
  144. package/styled-components/es/components/DatePicker/SingleDate/variations/_size/base.js +1 -1
  145. package/styled-components/es/components/DatePicker/hooks/useKeyboardNavigation.js +26 -0
  146. package/styled-components/es/components/Tabs/tokens.js +5 -2
  147. package/styled-components/es/components/Tabs/ui/TabItem/TabItem.js +8 -2
  148. package/styled-components/es/components/Tabs/ui/TabItem/variations/_view/base.js +1 -1
  149. package/styled-components/es/components/Tabs/ui/Tabs/Tabs.js +50 -8
  150. package/styled-components/es/components/Tabs/ui/Tabs/Tabs.styles.js +2 -2
  151. package/styled-components/es/components/Tabs/ui/Tabs/variations/_stretch/base.js +1 -1
  152. package/styled-components/es/components/Tabs/ui/Tabs/variations/_view/tokens.json +1 -1
  153. package/styled-components/es/examples/plasma_b2c/components/DatePicker/DatePicker.config.js +1 -1
  154. package/styled-components/es/examples/plasma_b2c/components/DatePicker/DatePicker.stories.tsx +1 -80
  155. package/styled-components/es/examples/plasma_b2c/components/Tabs/TabItem.config.js +8 -8
  156. package/styled-components/es/examples/plasma_b2c/components/Tabs/Tabs.config.js +4 -5
  157. package/styled-components/es/examples/plasma_b2c/components/Tabs/Tabs.stories.tsx +261 -196
  158. package/styled-components/es/examples/plasma_web/components/DatePicker/DatePicker.stories.tsx +1 -80
  159. package/styled-components/es/examples/plasma_web/components/Tabs/TabItem.config.js +8 -8
  160. package/styled-components/es/examples/plasma_web/components/Tabs/Tabs.config.js +4 -5
  161. package/styled-components/es/examples/plasma_web/components/Tabs/Tabs.stories.tsx +261 -196
  162. package/types/components/DatePicker/DatePickerBase.styles.d.ts.map +1 -1
  163. package/types/components/DatePicker/RangeDate/RangeDate.d.ts.map +1 -1
  164. package/types/components/DatePicker/SingleDate/SingleDate.d.ts.map +1 -1
  165. package/types/components/DatePicker/SingleDate/SingleDate.styles.d.ts.map +1 -1
  166. package/types/components/DatePicker/SingleDate/variations/_size/base.d.ts.map +1 -1
  167. package/types/components/DatePicker/hooks/useKeyboardNavigation.d.ts +13 -0
  168. package/types/components/DatePicker/hooks/useKeyboardNavigation.d.ts.map +1 -0
  169. package/types/components/Tabs/tokens.d.ts +3 -0
  170. package/types/components/Tabs/tokens.d.ts.map +1 -1
  171. package/types/components/Tabs/ui/TabItem/TabItem.d.ts.map +1 -1
  172. package/types/components/Tabs/ui/TabItem/variations/_view/base.d.ts.map +1 -1
  173. package/types/components/Tabs/ui/Tabs/Tabs.d.ts +4 -2
  174. package/types/components/Tabs/ui/Tabs/Tabs.d.ts.map +1 -1
  175. package/types/components/Tabs/ui/Tabs/Tabs.styles.d.ts.map +1 -1
  176. package/types/components/Tabs/ui/Tabs/Tabs.types.d.ts +12 -5
  177. package/types/components/Tabs/ui/Tabs/Tabs.types.d.ts.map +1 -1
  178. package/types/components/Tabs/ui/Tabs/variations/_stretch/base.d.ts.map +1 -1
  179. package/types/examples/plasma_b2c/components/Tabs/TabItem.config.d.ts.map +1 -1
  180. package/types/examples/plasma_b2c/components/Tabs/Tabs.config.d.ts +0 -1
  181. package/types/examples/plasma_b2c/components/Tabs/Tabs.config.d.ts.map +1 -1
  182. package/types/examples/plasma_b2c/components/Tabs/Tabs.d.ts +2 -1
  183. package/types/examples/plasma_b2c/components/Tabs/Tabs.d.ts.map +1 -1
  184. package/types/examples/plasma_web/components/Tabs/TabItem.config.d.ts.map +1 -1
  185. package/types/examples/plasma_web/components/Tabs/Tabs.config.d.ts +0 -1
  186. package/types/examples/plasma_web/components/Tabs/Tabs.config.d.ts.map +1 -1
  187. package/types/examples/plasma_web/components/Tabs/Tabs.d.ts +2 -1
  188. package/types/examples/plasma_web/components/Tabs/Tabs.d.ts.map +1 -1
  189. package/types/examples/sds_engineer/components/Tabs/Tabs.d.ts +2 -1
  190. package/types/examples/sds_engineer/components/Tabs/Tabs.d.ts.map +1 -1
  191. package/cjs/components/DatePicker/DatePickerBase.styles_1whkrlf.css +0 -1
  192. package/cjs/components/DatePicker/SingleDate/SingleDate.styles_qt45m5.css +0 -5
  193. package/cjs/components/DatePicker/SingleDate/variations/_size/base_g7zrur.css +0 -1
  194. package/cjs/components/Tabs/ui/TabItem/variations/_view/base_q8xs21.css +0 -1
  195. package/es/components/DatePicker/DatePickerBase.styles_1whkrlf.css +0 -1
  196. package/es/components/DatePicker/SingleDate/SingleDate.styles_qt45m5.css +0 -5
  197. package/es/components/DatePicker/SingleDate/variations/_size/base_g7zrur.css +0 -1
  198. package/es/components/Tabs/ui/TabItem/variations/_view/base_q8xs21.css +0 -1
@@ -1,26 +1,47 @@
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;
16
20
 
17
21
  type CustomStoryTabsProps = {
18
- tabItemView: string;
19
- itemsNumber?: number;
20
- animated?: boolean;
21
- label?: string;
22
- showLeftContent: boolean;
23
- showRightContent: boolean;
22
+ hasDivider: boolean;
23
+ contentLeft: string;
24
+ contentRight: string;
25
+ stretch?: boolean;
26
+ };
27
+
28
+ const contentLeftOptions = ['none', 'icon'];
29
+ const contentRightOptions = ['none', 'text', 'counter', 'icon'];
30
+
31
+ const getContentLeft = (contentLeftOption: string) =>
32
+ contentLeftOption === 'icon' ? <IconMic size="xs" color="inherit" /> : undefined;
33
+
34
+ const getContentRight = (contentRightOption: string) => {
35
+ switch (contentRightOption) {
36
+ case 'icon':
37
+ return <IconMic size="xs" color="inherit" />;
38
+ case 'counter':
39
+ return <Counter count={1} view="positive" />;
40
+ case 'text':
41
+ return <div>Text</div>;
42
+ default:
43
+ return undefined;
44
+ }
24
45
  };
25
46
 
26
47
  type StoryTabsProps = ComponentProps<typeof Tabs> & CustomStoryTabsProps;
@@ -31,232 +52,276 @@ const meta: Meta<StoryTabsProps> = {
31
52
  decorators: [WithTheme],
32
53
  argTypes: {
33
54
  ...argTypesFromConfig(mergeConfig(tabsConfig, config)),
34
- tabItemView: {
35
- options: tabItemViews,
55
+ contentLeft: {
56
+ options: contentLeftOptions,
36
57
  control: {
37
58
  type: 'select',
38
59
  },
39
60
  },
61
+ contentRight: {
62
+ options: contentRightOptions,
63
+ control: {
64
+ type: 'select',
65
+ },
66
+ },
67
+ ...disableProps(['itemsNumber', 'pilled', 'animated', 'stretch', 'view']),
40
68
  },
41
69
  };
42
70
 
43
71
  export default meta;
44
72
 
45
73
  const StoryDefault = (props: StoryTabsProps) => {
74
+ const { disabled, size, contentLeft: contentLeftOption, contentRight: contentRightOption, hasDivider } = props;
75
+ const items = Array(8).fill(0);
76
+ const [index, setIndex] = useState(0);
77
+
78
+ return (
79
+ <Tabs view={hasDivider ? 'divider' : 'clear'} disabled={disabled} size={size}>
80
+ {items.map((_, i) => (
81
+ <TabItem
82
+ key={`item:${i}`}
83
+ view="divider"
84
+ selected={i === index}
85
+ onClick={() => !disabled && setIndex(i)}
86
+ tabIndex={!disabled ? 0 : -1}
87
+ disabled={disabled}
88
+ contentLeft={getContentLeft(contentLeftOption)}
89
+ contentRight={getContentRight(contentRightOption)}
90
+ size={size}
91
+ >
92
+ {`Label${i + 1}`}
93
+ </TabItem>
94
+ ))}
95
+ </Tabs>
96
+ );
97
+ };
98
+
99
+ const StoryScroll = (props: StoryTabsProps) => {
46
100
  const {
47
- itemsNumber,
48
- label,
49
- view,
50
101
  disabled,
51
- stretch,
52
- pilled,
53
- animated,
54
- tabItemView,
102
+ clip,
55
103
  size,
56
- showLeftContent,
57
- showRightContent,
104
+ contentLeft: contentLeftOption,
105
+ contentRight: contentRightOption,
106
+ hasDivider,
58
107
  } = props;
59
- const items = Array(itemsNumber).fill(0);
60
- const secondItems = Array(10).fill(0);
108
+ const items = Array(8).fill(0);
61
109
  const [index, setIndex] = useState(0);
62
- const [secondIndex, setSecondIndex] = useState(0);
63
- const [thirdIndex, setThirdIndex] = useState(0);
64
110
 
65
111
  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>
112
+ <Tabs
113
+ clip={clip}
114
+ view={hasDivider ? 'divider' : 'clear'}
115
+ disabled={disabled}
116
+ size={size}
117
+ style={{ width: '15rem' }}
118
+ >
119
+ {items.map((_, i) => (
120
+ <TabItem
121
+ key={`item:${i}`}
122
+ view="divider"
123
+ selected={i === index}
124
+ onClick={() => !disabled && setIndex(i)}
125
+ tabIndex={!disabled ? 0 : -1}
126
+ disabled={disabled}
127
+ contentLeft={getContentLeft(contentLeftOption)}
128
+ contentRight={getContentRight(contentRightOption)}
129
+ size={size}
130
+ >
131
+ {`Label${i + 1}`}
132
+ </TabItem>
133
+ ))}
134
+ </Tabs>
135
+ );
136
+ };
87
137
 
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>
138
+ const StoryShowAll = (props: StoryTabsProps) => {
139
+ const {
140
+ disabled,
141
+ clip,
142
+ size,
143
+ contentLeft: contentLeftOption,
144
+ contentRight: contentRightOption,
145
+ hasDivider,
146
+ } = props;
147
+ const maxItemsNumber = 3;
148
+ const items = Array(8).fill(0);
149
+ const [index, setIndex] = useState(0);
150
+
151
+ const visibleItems = items.slice(0, maxItemsNumber);
152
+ const otherItems = items.slice(maxItemsNumber);
153
+
154
+ const dropdownItems = otherItems.map((_, i) => {
155
+ const itemIndex = maxItemsNumber + i;
156
+
157
+ return {
158
+ label: `Label${itemIndex + 1}`,
159
+ value: itemIndex,
160
+ };
161
+ });
115
162
 
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}
163
+ return (
164
+ <Tabs clip={clip} view={hasDivider ? 'divider' : 'clear'} disabled={disabled} size={size}>
165
+ {visibleItems.map((_, i) => (
166
+ <TabItem
167
+ key={`item:${i}`}
168
+ view="divider"
169
+ selected={i === index}
170
+ onClick={() => !disabled && setIndex(i)}
171
+ tabIndex={!disabled ? 0 : -1}
172
+ disabled={disabled}
173
+ contentLeft={getContentLeft(contentLeftOption)}
174
+ contentRight={getContentRight(contentRightOption)}
175
+ size={size}
176
+ >
177
+ {`Label${i + 1}`}
178
+ </TabItem>
179
+ ))}
180
+ {dropdownItems.length > 0 && (
181
+ <div style={{ marginLeft: '1.75rem' }}>
182
+ <Dropdown
183
+ size={size as typeof sizes[number]}
184
+ items={dropdownItems}
185
+ onItemSelect={(item) => setIndex(item.value as number)}
133
186
  >
134
- {label}
135
- </TabItem>
136
- ))}
137
- </Tabs>
138
- </>
187
+ <TabItem
188
+ key="item:ShowAll"
189
+ view="divider"
190
+ tabIndex={!disabled ? 0 : -1}
191
+ disabled={disabled}
192
+ size={size}
193
+ >
194
+ ShowAll
195
+ </TabItem>
196
+ </Dropdown>
197
+ </div>
198
+ )}
199
+ </Tabs>
139
200
  );
140
201
  };
141
202
 
142
203
  export const Default: StoryObj<StoryTabsProps> = {
143
204
  args: {
144
205
  size: 'xs',
145
- itemsNumber: 4,
146
- tabItemView: 'default',
147
206
  disabled: false,
148
- stretch: false,
149
- pilled: false,
150
- animated: true,
151
- view: 'filled',
152
- label: 'Label',
153
- showLeftContent: false,
154
- showRightContent: false,
207
+ hasDivider: true,
208
+ },
209
+ argTypes: {
210
+ clip: {
211
+ options: clips,
212
+ control: {
213
+ type: 'select',
214
+ },
215
+ },
216
+ size: {
217
+ options: sizes,
218
+ control: {
219
+ type: 'select',
220
+ },
221
+ },
222
+ },
223
+ render: (args) => {
224
+ switch (args.clip) {
225
+ case 'scroll':
226
+ return <StoryScroll {...args} />;
227
+ case 'showAll':
228
+ return <StoryShowAll {...args} />;
229
+ default:
230
+ return <StoryDefault {...args} />;
231
+ }
155
232
  },
156
- render: (args) => <StoryDefault {...args} />,
157
233
  };
158
234
 
159
- const StyledMultipleContainer = styled.div`
160
- display: flex;
161
- align-items: center;
162
- column-gap: 1rem;
163
- `;
235
+ const StoryStretch = (props: StoryTabsProps) => {
236
+ const {
237
+ disabled,
238
+ size,
239
+ contentLeft: contentLeftOption,
240
+ contentRight: contentRightOption,
241
+ hasDivider,
242
+ stretch,
243
+ } = props;
244
+ const items = Array(8).fill(0);
245
+ const [index, setIndex] = useState(0);
164
246
 
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);
247
+ return (
248
+ <Tabs view={hasDivider ? 'divider' : 'clear'} stretch={stretch} disabled={disabled} size={size}>
249
+ {items.map((_, i) => (
250
+ <TabItem
251
+ key={`item:${i}`}
252
+ view="divider"
253
+ selected={i === index}
254
+ onClick={() => !disabled && setIndex(i)}
255
+ tabIndex={!disabled ? 0 : -1}
256
+ disabled={disabled}
257
+ contentLeft={getContentLeft(contentLeftOption)}
258
+ contentRight={getContentRight(contentRightOption)}
259
+ size={size}
260
+ >
261
+ {`Label${i + 1}`}
262
+ </TabItem>
263
+ ))}
264
+ </Tabs>
265
+ );
266
+ };
179
267
 
180
- const [index1, setIndex1] = useState(0);
181
- const [index2, setIndex2] = useState(0);
268
+ export const Stretch: StoryObj<StoryTabsProps> = {
269
+ args: {
270
+ size: 'xs',
271
+ stretch: true,
272
+ disabled: false,
273
+ hasDivider: true,
274
+ },
275
+ argTypes: {
276
+ size: {
277
+ options: sizes,
278
+ control: {
279
+ type: 'select',
280
+ },
281
+ },
282
+ },
283
+ render: (args) => <StoryStretch {...args} />,
284
+ };
285
+
286
+ const StoryHeaderTabs = (props: StoryTabsProps) => {
287
+ const { disabled, size, contentLeft: contentLeftOption, contentRight: contentRightOption, hasDivider } = props;
288
+ const items = Array(4).fill(0);
289
+ const [index, setIndex] = useState(0);
182
290
 
183
291
  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>
292
+ <Tabs view={hasDivider ? 'divider' : 'clear'} disabled={disabled} size={size}>
293
+ {items.map((_, i) => (
294
+ <TabItem
295
+ key={`item:${i}`}
296
+ view="divider"
297
+ selected={i === index}
298
+ onClick={() => !disabled && setIndex(i)}
299
+ tabIndex={!disabled ? 0 : -1}
300
+ disabled={disabled}
301
+ contentLeft={getContentLeft(contentLeftOption)}
302
+ contentRight={getContentRight(contentRightOption)}
303
+ size={size}
304
+ >
305
+ {`Label${i + 1}`}
306
+ </TabItem>
307
+ ))}
308
+ </Tabs>
244
309
  );
245
310
  };
246
311
 
247
- export const Multiple: StoryObj<StoryTabsProps> = {
312
+ export const HeaderTabs: StoryObj<StoryTabsProps> = {
248
313
  args: {
249
- size: 'xs',
250
- itemsNumber: 6,
251
- tabItemView: 'secondary',
314
+ size: 'h5',
252
315
  disabled: false,
253
- stretch: false,
254
- pilled: false,
255
- animated: true,
256
- view: 'filled',
257
- label: 'Label',
258
- showLeftContent: false,
259
- showRightContent: false,
316
+ hasDivider: true,
317
+ },
318
+ argTypes: {
319
+ size: {
320
+ options: headerSizes,
321
+ control: {
322
+ type: 'select',
323
+ },
324
+ },
260
325
  },
261
- render: (args) => <StoryMultiple {...args} />,
326
+ render: (args) => <StoryHeaderTabs {...args} />,
262
327
  };
@@ -1,4 +1,4 @@
1
- import React, { ComponentProps, useEffect, useRef, useState } from 'react';
1
+ import React, { ComponentProps, useRef, useState } from 'react';
2
2
  import type { StoryObj, Meta } from '@storybook/react';
3
3
  import { action } from '@storybook/addon-actions';
4
4
  import { IconPlaceholder } from '@salutejs/plasma-sb-utils';
@@ -262,82 +262,3 @@ export const Range: StoryObj<StoryPropsRange> = {
262
262
  },
263
263
  render: (args) => <StoryRange {...args} />,
264
264
  };
265
-
266
- const StoryDeferred = ({
267
- enableContentLeft,
268
- enableContentRight,
269
- valueError,
270
- valueSuccess,
271
- size,
272
- ...rest
273
- }: StoryPropsDefault) => {
274
- const [isOpen, setIsOpen] = useState(false);
275
-
276
- const [defVal, setDefVal] = useState<Date | undefined>(undefined);
277
-
278
- const iconSize = size === 'xs' ? 'xs' : 's';
279
-
280
- useEffect(() => {
281
- setTimeout(() => {
282
- setDefVal(new Date(2024, 5, 14));
283
- }, 5000);
284
- }, []);
285
-
286
- return (
287
- <>
288
- <h3>Асинхронная установка даты по умолчанию</h3>
289
- <DatePicker
290
- defaultDate={defVal}
291
- isOpen={isOpen}
292
- size={size}
293
- valueError={valueError}
294
- valueSuccess={valueSuccess}
295
- contentLeft={enableContentLeft ? <IconPlaceholder size={iconSize} /> : undefined}
296
- contentRight={enableContentRight ? <IconPlaceholder size={iconSize} /> : undefined}
297
- onBlur={onBlur}
298
- onFocus={onFocus}
299
- onToggle={(is) => setIsOpen(is)}
300
- onChangeValue={(e, currentValue) => {
301
- onChangeValue(e, currentValue);
302
- }}
303
- onCommitDate={() => setIsOpen(false)}
304
- {...rest}
305
- />
306
- </>
307
- );
308
- };
309
-
310
- export const Deferred: StoryObj<StoryPropsDefault> = {
311
- argTypes: {
312
- defaultDate: {
313
- control: {
314
- type: 'date',
315
- },
316
- },
317
- labelPlacement: {
318
- options: labelPlacements,
319
- control: {
320
- type: 'inline-radio',
321
- },
322
- },
323
- },
324
- args: {
325
- label: 'Лейбл',
326
- leftHelper: 'Подсказка к полю',
327
- placeholder: '30.05.2024',
328
- size: 'l',
329
- view: 'default',
330
- labelPlacement: 'outer',
331
- min: new Date(2024, 1, 1),
332
- max: new Date(2024, 12, 29),
333
- maskWithFormat: false,
334
- disabled: false,
335
- readOnly: false,
336
- textBefore: '',
337
- enableContentLeft: true,
338
- enableContentRight: true,
339
- valueError: false,
340
- valueSuccess: false,
341
- },
342
- render: (args) => <StoryDeferred {...args} />,
343
- };