@edvisor/product-language 0.3.0 → 0.4.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 (290) hide show
  1. package/index.d.ts +2 -0
  2. package/index.js +9374 -0
  3. package/lib/components/alert-banner/alert-banner.d.ts +11 -0
  4. package/lib/components/alert-banner/alert-level-flags.d.ts +13 -0
  5. package/lib/components/alert-banner/index.d.ts +1 -0
  6. package/lib/components/badge/badge-type-flags.d.ts +18 -0
  7. package/lib/components/badge/badge.d.ts +5 -0
  8. package/lib/components/badge/index.d.ts +1 -0
  9. package/{src/lib/components/card/atoms/card-frame.tsx → lib/components/card/atoms/card-frame.d.ts} +7 -17
  10. package/lib/components/card/atoms/index.d.ts +1 -0
  11. package/lib/components/card/card.d.ts +14 -0
  12. package/lib/components/card/components/card-alert-banner-slot.d.ts +5 -0
  13. package/lib/components/card/components/card-controls-slot.d.ts +4 -0
  14. package/lib/components/card/components/card-section-slot.d.ts +11 -0
  15. package/lib/components/card/components/index.d.ts +3 -0
  16. package/lib/components/card/index.d.ts +2 -0
  17. package/lib/components/card/molecules/index.d.ts +1 -0
  18. package/lib/components/card/molecules/left-right-card.d.ts +16 -0
  19. package/lib/components/checkbox/checkbox.d.ts +10 -0
  20. package/lib/components/checkbox/helpers.d.ts +12 -0
  21. package/lib/components/checkbox/index.d.ts +1 -0
  22. package/lib/components/divider/divider-type-flags.d.ts +9 -0
  23. package/lib/components/divider/divider.d.ts +7 -0
  24. package/lib/components/divider/index.d.ts +1 -0
  25. package/lib/components/flag/flag-size-flags.d.ts +12 -0
  26. package/lib/components/flag/flag.d.ts +9 -0
  27. package/lib/components/flag/flag.list.d.ts +781 -0
  28. package/lib/components/flag/index.d.ts +1 -0
  29. package/lib/components/icon/icon-list.d.ts +131 -0
  30. package/lib/components/icon/icon.d.ts +131 -0
  31. package/lib/components/icon/index.d.ts +1 -0
  32. package/lib/components/index.d.ts +18 -0
  33. package/lib/components/input-field/components/index.d.ts +2 -0
  34. package/lib/components/input-field/components/labeled-input.d.ts +10 -0
  35. package/lib/components/input-field/components/stepper.d.ts +7 -0
  36. package/lib/components/input-field/index.d.ts +3 -0
  37. package/lib/components/input-field/input-field.d.ts +25 -0
  38. package/lib/components/input-field/input-number.d.ts +18 -0
  39. package/lib/components/input-field/input-text.d.ts +14 -0
  40. package/lib/components/layout/flex.d.ts +16 -0
  41. package/lib/components/layout/grid-layout.d.ts +11 -0
  42. package/lib/components/layout/index.d.ts +3 -0
  43. package/lib/components/layout/left-right-layout.d.ts +34 -0
  44. package/lib/components/link/index.d.ts +1 -0
  45. package/lib/components/link/link.d.ts +14 -0
  46. package/lib/components/molecules/avatar/avatar-size-flags.d.ts +12 -0
  47. package/lib/components/molecules/avatar/avatar.d.ts +12 -0
  48. package/lib/components/molecules/avatar/index.d.ts +1 -0
  49. package/lib/components/molecules/button/button-flags.d.ts +44 -0
  50. package/lib/components/molecules/button/button.d.ts +12 -0
  51. package/lib/components/molecules/button/index.d.ts +1 -0
  52. package/lib/components/molecules/index.d.ts +3 -0
  53. package/lib/components/molecules/input-checkbox/index.d.ts +1 -0
  54. package/lib/components/molecules/input-checkbox/input-checkbox.d.ts +8 -0
  55. package/lib/components/organisms/index.d.ts +1 -0
  56. package/lib/components/organisms/multi-choice-list/index.d.ts +1 -0
  57. package/lib/components/organisms/multi-choice-list/multi-choice-list.d.ts +10 -0
  58. package/lib/components/select/components/menu-container.d.ts +3 -0
  59. package/lib/components/select/components/menu-row.d.ts +9 -0
  60. package/lib/components/select/components/menu.d.ts +2 -0
  61. package/lib/components/select/components/option.d.ts +10 -0
  62. package/lib/components/select/components/select-label.d.ts +1 -0
  63. package/lib/components/select/components/value-component-multi.d.ts +3 -0
  64. package/lib/components/select/components/value-component-single.d.ts +4 -0
  65. package/lib/components/select/components/value.d.ts +4 -0
  66. package/lib/components/select/index.d.ts +1 -0
  67. package/lib/components/select/select.d.ts +9 -0
  68. package/lib/components/select/types.d.ts +124 -0
  69. package/lib/components/select/utils.d.ts +15 -0
  70. package/lib/components/spinner/index.d.ts +1 -0
  71. package/lib/components/spinner/spinner-size-flags.d.ts +10 -0
  72. package/lib/components/spinner/spinner.d.ts +9 -0
  73. package/lib/components/tabs/components/index.d.ts +1 -0
  74. package/lib/components/tabs/components/tab.d.ts +7 -0
  75. package/lib/components/tabs/index.d.ts +1 -0
  76. package/lib/components/tabs/tabs.d.ts +15 -0
  77. package/lib/components/tag/components/close-button.d.ts +8 -0
  78. package/lib/components/tag/components/index.d.ts +2 -0
  79. package/lib/components/tag/components/tag-label.d.ts +8 -0
  80. package/lib/components/tag/index.d.ts +1 -0
  81. package/lib/components/tag/tag.d.ts +10 -0
  82. package/lib/components/thumbnail/index.d.ts +1 -0
  83. package/lib/components/thumbnail/thumbnail-size-flags.d.ts +10 -0
  84. package/lib/components/thumbnail/thumbnail.d.ts +10 -0
  85. package/lib/components/typography/index.d.ts +1 -0
  86. package/lib/components/typography/typography.d.ts +24 -0
  87. package/lib/foundations/color-system/base-palette/base-palette.d.ts +76 -0
  88. package/lib/foundations/color-system/base-palette/index.d.ts +1 -0
  89. package/lib/foundations/color-system/color-guidelines/color-guidelines.d.ts +132 -0
  90. package/lib/foundations/color-system/color-guidelines/index.d.ts +1 -0
  91. package/lib/foundations/color-system/components/color-sample.d.ts +17 -0
  92. package/lib/foundations/color-system/components/index.d.ts +1 -0
  93. package/lib/foundations/color-system/index.d.ts +1 -0
  94. package/lib/foundations/index.d.ts +4 -0
  95. package/lib/foundations/shadows/components.d.ts +8 -0
  96. package/lib/foundations/shadows/index.d.ts +1 -0
  97. package/lib/foundations/shadows/shadows.d.ts +8 -0
  98. package/lib/foundations/spacing/index.d.ts +1 -0
  99. package/lib/foundations/spacing/spacing-guidelines.d.ts +22 -0
  100. package/lib/foundations/spacing/spacing.d.ts +18 -0
  101. package/lib/foundations/typography/constants.d.ts +22 -0
  102. package/lib/foundations/typography/fonts.d.ts +1 -0
  103. package/lib/foundations/typography/index.d.ts +1 -0
  104. package/lib/foundations/typography/text-aspect-flags.d.ts +19 -0
  105. package/lib/foundations/typography/typography.d.ts +24 -0
  106. package/lib/helpers/generic-types.d.ts +21 -0
  107. package/lib/helpers/index.d.ts +6 -0
  108. package/lib/helpers/nothing.d.ts +8 -0
  109. package/{src/lib/helpers/numbers.ts → lib/helpers/numbers.d.ts} +50 -67
  110. package/lib/helpers/safe-navigation.d.ts +15 -0
  111. package/lib/helpers/slots.d.ts +23 -0
  112. package/lib/helpers/strings.d.ts +1 -0
  113. package/package.json +12 -3
  114. package/.babelrc +0 -12
  115. package/.eslintrc.json +0 -147
  116. package/.storybook/main.js +0 -57
  117. package/.storybook/manager.js +0 -7
  118. package/.storybook/preview.js +0 -15
  119. package/.storybook/tsconfig.json +0 -30
  120. package/jest.config.ts +0 -15
  121. package/jest.setup.ts +0 -2
  122. package/project.json +0 -96
  123. package/release-it.json +0 -18
  124. package/src/README.md +0 -61
  125. package/src/assets/svg/example_icon.svg +0 -3
  126. package/src/assets/svg/example_icon_white.svg +0 -3
  127. package/src/assets/svg/spinner.svg +0 -3
  128. package/src/assets/svg/spinner_white.svg +0 -3
  129. package/src/helpers/index.ts +0 -4
  130. package/src/helpers/playground.ts +0 -16
  131. package/src/helpers/talesOf.tsx +0 -42
  132. package/src/index.ts +0 -2
  133. package/src/lib/components/README.md +0 -49
  134. package/src/lib/components/alert-banner/alert-banner.tsx +0 -34
  135. package/src/lib/components/alert-banner/alert-level-flags.ts +0 -77
  136. package/src/lib/components/alert-banner/index.ts +0 -1
  137. package/src/lib/components/badge/badge-type-flags.ts +0 -72
  138. package/src/lib/components/badge/badge.test.tsx +0 -29
  139. package/src/lib/components/badge/badge.tsx +0 -22
  140. package/src/lib/components/badge/index.ts +0 -1
  141. package/src/lib/components/badge/stories/badge.stories.mdx +0 -44
  142. package/src/lib/components/badge/stories/components.tsx +0 -49
  143. package/src/lib/components/card/atoms/index.ts +0 -1
  144. package/src/lib/components/card/card.test.tsx +0 -162
  145. package/src/lib/components/card/card.tsx +0 -78
  146. package/src/lib/components/card/components/card-alert-banner-slot.tsx +0 -16
  147. package/src/lib/components/card/components/card-controls-slot.tsx +0 -19
  148. package/src/lib/components/card/components/card-section-slot.tsx +0 -51
  149. package/src/lib/components/card/components/index.ts +0 -3
  150. package/src/lib/components/card/index.ts +0 -2
  151. package/src/lib/components/card/molecules/index.ts +0 -1
  152. package/src/lib/components/card/molecules/left-right-card.test.tsx +0 -89
  153. package/src/lib/components/card/molecules/left-right-card.tsx +0 -63
  154. package/src/lib/components/card/storybook/card.stories.mdx +0 -100
  155. package/src/lib/components/card/storybook/components.tsx +0 -223
  156. package/src/lib/components/checkbox/checkbox.test.tsx +0 -39
  157. package/src/lib/components/checkbox/checkbox.tsx +0 -63
  158. package/src/lib/components/checkbox/helpers.tsx +0 -100
  159. package/src/lib/components/checkbox/index.tsx +0 -1
  160. package/src/lib/components/checkbox/stories/checkbox.stories.mdx +0 -57
  161. package/src/lib/components/checkbox/stories/components.tsx +0 -84
  162. package/src/lib/components/divider/divider-type-flags.tsx +0 -37
  163. package/src/lib/components/divider/divider.test.tsx +0 -34
  164. package/src/lib/components/divider/divider.tsx +0 -37
  165. package/src/lib/components/divider/index.tsx +0 -1
  166. package/src/lib/components/divider/stories/components.tsx +0 -13
  167. package/src/lib/components/divider/stories/divider.stories.mdx +0 -44
  168. package/src/lib/components/flag/flag-size-flags.tsx +0 -55
  169. package/src/lib/components/flag/flag.list.tsx +0 -788
  170. package/src/lib/components/flag/flag.test.tsx +0 -65
  171. package/src/lib/components/flag/flag.tsx +0 -97
  172. package/src/lib/components/flag/index.tsx +0 -1
  173. package/src/lib/components/flag/stories/components.tsx +0 -403
  174. package/src/lib/components/flag/stories/flag.stories.mdx +0 -48
  175. package/src/lib/components/flag/stories/playGround-select.tsx +0 -145
  176. package/src/lib/components/icon/icon-list.tsx +0 -135
  177. package/src/lib/components/icon/icon.test.tsx +0 -48
  178. package/src/lib/components/icon/icon.tsx +0 -181
  179. package/src/lib/components/icon/index.tsx +0 -1
  180. package/src/lib/components/icon/stories/components.tsx +0 -282
  181. package/src/lib/components/icon/stories/icon.stories.mdx +0 -65
  182. package/src/lib/components/index.ts +0 -19
  183. package/src/lib/components/input-field/components/index.ts +0 -2
  184. package/src/lib/components/input-field/components/labeled-input.tsx +0 -54
  185. package/src/lib/components/input-field/components/stepper.tsx +0 -60
  186. package/src/lib/components/input-field/index.ts +0 -6
  187. package/src/lib/components/input-field/input-field.test.tsx +0 -107
  188. package/src/lib/components/input-field/input-field.tsx +0 -126
  189. package/src/lib/components/input-field/input-number.tsx +0 -41
  190. package/src/lib/components/input-field/input-text.tsx +0 -30
  191. package/src/lib/components/input-field/storybook/components.tsx +0 -327
  192. package/src/lib/components/input-field/storybook/input-field.stories.mdx +0 -113
  193. package/src/lib/components/layout/flex.tsx +0 -22
  194. package/src/lib/components/layout/grid-layout.tsx +0 -40
  195. package/src/lib/components/layout/index.ts +0 -3
  196. package/src/lib/components/layout/left-right-layout.tsx +0 -67
  197. package/src/lib/components/link/index.ts +0 -1
  198. package/src/lib/components/link/link.test.tsx +0 -29
  199. package/src/lib/components/link/link.tsx +0 -56
  200. package/src/lib/components/link/storybook/link.stories.mdx +0 -52
  201. package/src/lib/components/molecules/avatar/avatar-size-flags.tsx +0 -55
  202. package/src/lib/components/molecules/avatar/avatar.test.tsx +0 -114
  203. package/src/lib/components/molecules/avatar/avatar.tsx +0 -80
  204. package/src/lib/components/molecules/avatar/index.tsx +0 -1
  205. package/src/lib/components/molecules/avatar/stories/avatar.stories.mdx +0 -52
  206. package/src/lib/components/molecules/avatar/stories/components.tsx +0 -36
  207. package/src/lib/components/molecules/button/button-flags.tsx +0 -340
  208. package/src/lib/components/molecules/button/button.test.tsx +0 -77
  209. package/src/lib/components/molecules/button/button.tsx +0 -214
  210. package/src/lib/components/molecules/button/index.tsx +0 -1
  211. package/src/lib/components/molecules/button/stories/button.stories.mdx +0 -105
  212. package/src/lib/components/molecules/button/stories/components.tsx +0 -84
  213. package/src/lib/components/molecules/index.ts +0 -3
  214. package/src/lib/components/molecules/input-checkbox/index.tsx +0 -1
  215. package/src/lib/components/molecules/input-checkbox/input-checkbox.test.tsx +0 -34
  216. package/src/lib/components/molecules/input-checkbox/input-checkbox.tsx +0 -49
  217. package/src/lib/components/molecules/input-checkbox/stories/components.tsx +0 -53
  218. package/src/lib/components/molecules/input-checkbox/stories/input-checkbox.stories.mdx +0 -49
  219. package/src/lib/components/organisms/index.ts +0 -1
  220. package/src/lib/components/organisms/multi-choice-list/index.tsx +0 -1
  221. package/src/lib/components/organisms/multi-choice-list/multi-choice-list.test.tsx +0 -33
  222. package/src/lib/components/organisms/multi-choice-list/multi-choice-list.tsx +0 -52
  223. package/src/lib/components/organisms/multi-choice-list/stories/components.tsx +0 -124
  224. package/src/lib/components/organisms/multi-choice-list/stories/multi-choice-list.stories.mdx +0 -99
  225. package/src/lib/components/spinner/index.tsx +0 -1
  226. package/src/lib/components/spinner/spinner-size-flags.tsx +0 -39
  227. package/src/lib/components/spinner/spinner.test.tsx +0 -31
  228. package/src/lib/components/spinner/spinner.tsx +0 -54
  229. package/src/lib/components/spinner/stories/components.tsx +0 -39
  230. package/src/lib/components/spinner/stories/spinner.stories.mdx +0 -35
  231. package/src/lib/components/tabs/components/index.ts +0 -1
  232. package/src/lib/components/tabs/components/tab.tsx +0 -62
  233. package/src/lib/components/tabs/index.tsx +0 -1
  234. package/src/lib/components/tabs/storybook/components.tsx +0 -282
  235. package/src/lib/components/tabs/storybook/tabs.stories.mdx +0 -97
  236. package/src/lib/components/tabs/tabs.test.tsx +0 -86
  237. package/src/lib/components/tabs/tabs.tsx +0 -101
  238. package/src/lib/components/tag/components/close-button.tsx +0 -85
  239. package/src/lib/components/tag/components/index.ts +0 -2
  240. package/src/lib/components/tag/components/tag-label.tsx +0 -44
  241. package/src/lib/components/tag/index.tsx +0 -1
  242. package/src/lib/components/tag/stories/components.tsx +0 -86
  243. package/src/lib/components/tag/stories/tag.stories.mdx +0 -42
  244. package/src/lib/components/tag/tag.test.tsx +0 -36
  245. package/src/lib/components/tag/tag.tsx +0 -33
  246. package/src/lib/components/thumbnail/index.tsx +0 -1
  247. package/src/lib/components/thumbnail/stories/thumbnail.stories.mdx +0 -34
  248. package/src/lib/components/thumbnail/thumbnail-size-flags.tsx +0 -41
  249. package/src/lib/components/thumbnail/thumbnail.test.tsx +0 -51
  250. package/src/lib/components/thumbnail/thumbnail.tsx +0 -45
  251. package/src/lib/components/typography/index.ts +0 -1
  252. package/src/lib/components/typography/storybook/components.tsx +0 -288
  253. package/src/lib/components/typography/storybook/typography.stories.mdx +0 -90
  254. package/src/lib/components/typography/typography.test.tsx +0 -97
  255. package/src/lib/components/typography/typography.tsx +0 -99
  256. package/src/lib/foundations/color-system/base-palette/base-palette.stories.tsx +0 -123
  257. package/src/lib/foundations/color-system/base-palette/base-palette.ts +0 -93
  258. package/src/lib/foundations/color-system/base-palette/index.ts +0 -1
  259. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.mdx +0 -85
  260. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.tsx +0 -231
  261. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.ts +0 -160
  262. package/src/lib/foundations/color-system/color-guidelines/index.ts +0 -1
  263. package/src/lib/foundations/color-system/components/color-sample.tsx +0 -99
  264. package/src/lib/foundations/color-system/components/index.ts +0 -1
  265. package/src/lib/foundations/color-system/index.ts +0 -1
  266. package/src/lib/foundations/index.ts +0 -4
  267. package/src/lib/foundations/shadows/components.tsx +0 -59
  268. package/src/lib/foundations/shadows/index.ts +0 -1
  269. package/src/lib/foundations/shadows/shadows.stories.mdx +0 -71
  270. package/src/lib/foundations/shadows/shadows.tsx +0 -47
  271. package/src/lib/foundations/spacing/index.ts +0 -1
  272. package/src/lib/foundations/spacing/spacing-guidelines.ts +0 -24
  273. package/src/lib/foundations/spacing/spacing.stories.mdx +0 -51
  274. package/src/lib/foundations/spacing/spacing.ts +0 -18
  275. package/src/lib/foundations/typography/constants.ts +0 -25
  276. package/src/lib/foundations/typography/fonts.ts +0 -205
  277. package/src/lib/foundations/typography/index.tsx +0 -1
  278. package/src/lib/foundations/typography/text-aspect-flags.ts +0 -61
  279. package/src/lib/foundations/typography/typography.tsx +0 -102
  280. package/src/lib/helpers/generic-types.ts +0 -44
  281. package/src/lib/helpers/index.ts +0 -6
  282. package/src/lib/helpers/nothing.tsx +0 -18
  283. package/src/lib/helpers/safe-navigation.ts +0 -44
  284. package/src/lib/helpers/slots.test.tsx +0 -98
  285. package/src/lib/helpers/slots.tsx +0 -157
  286. package/src/lib/helpers/strings.test.ts +0 -47
  287. package/src/lib/helpers/strings.ts +0 -16
  288. package/tsconfig.json +0 -35
  289. package/tsconfig.lib.json +0 -28
  290. package/tsconfig.spec.json +0 -21
@@ -1,282 +0,0 @@
1
- import styled from 'styled-components'
2
-
3
- import { Padding, Margin } from '@foundations'
4
- import { CardPlayground, Playground } from '@stories'
5
-
6
- import { CardFrame } from 'components/card/atoms'
7
- import { Tab, Tabs } from '../tabs'
8
- import { InputField as InputFieldBase } from 'components/input-field'
9
- import { Button } from 'components/molecules'
10
- import { Flex } from 'components/layout'
11
- import { Label } from 'components/typography'
12
- import { FC, Nothing } from '@helpers'
13
- import { Card } from 'components/card'
14
- import { IconMinor as Icon } from 'components/icon'
15
-
16
- const ContentFrame = styled(Tabs.Content)`
17
- padding: ${Padding.l};
18
- `
19
-
20
- export const AdditionalControlsExample = () => (
21
- <Playground
22
- code={`
23
- const [selected, setSelected] = useState(0);
24
-
25
- <Tabs selected={selected} onChange={setSelected}>
26
- <Tabs.TabList>
27
- <div>This is not a tab.</div>
28
- <Tab>No Icon</Tab>
29
- <Tab Prefix={Icon.Comment}>With Icon</Tab>
30
- <div>This is also not a tab.</div>
31
- </Tabs.TabList>
32
- <ContentFrame>
33
- One
34
- </ContentFrame>
35
- <ContentFrame>
36
- Two
37
- </ContentFrame>
38
- </Tabs>
39
- `}
40
- providerProps={{
41
- renderAsComponent: true,
42
- scope: {
43
- Tabs,
44
- Tab,
45
- ContentFrame,
46
- Icon,
47
- Card,
48
- },
49
- }}
50
- />
51
- )
52
-
53
- export const CrazyTabsExample = () => (
54
- <Playground
55
- code={`
56
- const [selected, setSelected] = useState(0);
57
-
58
- <Tabs selected={selected} onChange={setSelected}>
59
- <ContentFrame>
60
- One
61
- </ContentFrame>
62
- <ContentFrame>
63
- Two
64
- </ContentFrame>
65
- <div>This message will render on every tab</div>
66
- <Tabs.TabList>
67
- <Tab>No Icon</Tab>
68
- <Tab Prefix={Icon.Comment}>With Icon</Tab>
69
- </Tabs.TabList>
70
- </Tabs>
71
- `}
72
- providerProps={{
73
- renderAsComponent: true,
74
- scope: {
75
- Tabs,
76
- Tab,
77
- ContentFrame,
78
- Icon,
79
- Card,
80
- },
81
- }}
82
- />
83
- )
84
-
85
- export const TabsWithIconsExample = () => (
86
- <Playground
87
- code={`
88
- const [selected, setSelected] = useState(0);
89
-
90
- <Tabs selected={selected} onChange={setSelected}>
91
- <Tabs.TabList>
92
- <Tab>No Icon</Tab>
93
- <Tab Prefix={Icon.Comment}>With Icon</Tab>
94
- </Tabs.TabList>
95
- <ContentFrame>
96
- One
97
- </ContentFrame>
98
- <ContentFrame>
99
- Two
100
- </ContentFrame>
101
- </Tabs>
102
- `}
103
- providerProps={{
104
- renderAsComponent: true,
105
- scope: {
106
- Tabs,
107
- Tab,
108
- ContentFrame,
109
- Icon,
110
- Card,
111
- },
112
- }}
113
- />
114
- )
115
-
116
- export const RenderingContentExample = () => (
117
- <Playground
118
- code={`
119
- const [selected, setSelected] = useState(0);
120
-
121
- <Tabs selected={selected} onChange={setSelected}>
122
- <Tabs.TabList>
123
- <Tab Prefix={Icon.Comment}>Style Directly</Tab>
124
- <Tab Prefix={Icon.GraduationCap}>Use sub-components</Tab>
125
- </Tabs.TabList>
126
- <ContentFrame>
127
- This was styled directly.
128
- </ContentFrame>
129
- <Tabs.Content>
130
- <Card>This is in a Card.</Card>
131
- </Tabs.Content>
132
- </Tabs>
133
- `}
134
- providerProps={{
135
- renderAsComponent: true,
136
- scope: {
137
- Tabs,
138
- Tab,
139
- ContentFrame,
140
- Icon,
141
- Card,
142
- },
143
- }}
144
- />
145
- )
146
-
147
- const InputField = styled(InputFieldBase)`
148
- margin-right: ${Margin.s};
149
- flex-grow: 1;
150
- `
151
-
152
- const Controls = styled(Flex)`
153
- width: 100%;
154
- justify-content: end;
155
- align-items: center;
156
- padding-right: ${Padding.l};
157
- `
158
-
159
- const NationalityButton = styled(Button)`
160
- display: flex;
161
- `
162
-
163
- const NationalityButtonPrefix: FC = () => {
164
- return (
165
- <Flex>
166
- <Icon.Comment />
167
- <Icon.GraduationCap />
168
- </Flex>
169
- )
170
- }
171
-
172
- export const TabsExample = () => (
173
- <CardPlayground
174
- code={`
175
- const [selected, setSelected] = useState(0);
176
-
177
- <Card>
178
- <Tabs selected={selected} onChange={setSelected}>
179
- <Tabs.TabList>
180
- <Tab Prefix={Icon.Comment}>Language</Tab>
181
- <Tab Prefix={Icon.GraduationCap}>Higher Ed.</Tab>
182
- <Controls>
183
- <NationalityButton
184
- plain subtle
185
- IconPrefix={NationalityButtonPrefix}
186
- >
187
- Brazil, Onshore
188
- </NationalityButton>
189
- </Controls>
190
- </Tabs.TabList>
191
- <ContentFrame>
192
- <Flex center>
193
- <InputField
194
- label='Destination'
195
- placeholder='Search'
196
- />
197
- <InputField
198
- label='Provider'
199
- placeholder='Any'
200
- />
201
- <InputField
202
- label='Min. Number of Weeks'
203
- placeholder='4'
204
- />
205
- <Button large primary>Search</Button>
206
- </Flex>
207
- </ContentFrame>
208
- <ContentFrame>
209
- In progress...
210
- </ContentFrame>
211
- </Tabs>
212
- </Card>
213
- `}
214
- providerProps={{
215
- renderAsComponent: true,
216
- scope: {
217
- Tabs,
218
- ContentFrame,
219
- Tab,
220
- InputField,
221
- Flex,
222
- Controls,
223
- NationalityButton,
224
- Label,
225
- NationalityButtonPrefix,
226
- Button,
227
- Card: CardFrame,
228
- Icon,
229
- },
230
- }}
231
- />
232
- )
233
-
234
- export const StateManagementExample = () => (
235
- <CardPlayground
236
- code={`
237
- const [selected, setSelected] = useState(0);
238
-
239
- <Card>
240
- <Tabs selected={selected} onChange={setSelected}>
241
- <Tabs.TabList>
242
- <Tab Prefix={Icon.Comment}>One</Tab>
243
- <Tab Prefix={Icon.GraduationCap}>Two</Tab>
244
- <Tab Prefix={Icon.Check}>Three</Tab>
245
- {selected > 0 ? <Button onClick={() => setSelected(0)}>Reset</Button> : <Nothing />}
246
- </Tabs.TabList>
247
- <ContentFrame>
248
- ONE
249
- <Button onClick={() => setSelected(1)}>Next</Button>
250
- </ContentFrame>
251
- <ContentFrame>
252
- TWO
253
- <Button onClick={() => setSelected(2)}>Next</Button>
254
- <Button onClick={() => setSelected(0)}>Back</Button>
255
- </ContentFrame>
256
- <ContentFrame>
257
- THREE
258
- <Button onClick={() => setSelected(1)}>Back</Button>
259
- </ContentFrame>
260
- </Tabs>
261
- </Card>
262
- `}
263
- providerProps={{
264
- renderAsComponent: true,
265
- scope: {
266
- Tabs,
267
- ContentFrame,
268
- Tab,
269
- InputField,
270
- Flex,
271
- Controls,
272
- NationalityButton,
273
- Label,
274
- NationalityButtonPrefix,
275
- Nothing,
276
- Button,
277
- Card: CardFrame,
278
- Icon,
279
- },
280
- }}
281
- />
282
- )
@@ -1,97 +0,0 @@
1
- import { Meta } from '@storybook/addon-docs';
2
- import { TabsExample, TabsWithIconsExample, RenderingContentExample, AdditionalControlsExample, StateManagementExample, CrazyTabsExample } from './components';
3
-
4
- <Meta title="Components/Tabs"/>
5
-
6
- # Tabs
7
-
8
- Tabs are used to organize content on a page into sections.
9
-
10
- For more details, check out the guidelines on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=734%3A7384)
11
-
12
- ## How to Use It
13
-
14
- ```tsx
15
- import { Tabs, Tab } from '@edvisor/product-language'
16
-
17
- const [selected, setSelected] = useState(0)
18
-
19
- <Tabs selected={selected} onChange={setSelected}>
20
- <Tabs.TabList>
21
- <Tab>One</Tab>
22
- <Tab>Two</Tab>
23
- </Tabs.TabList>
24
-
25
- <Tabs.Content>
26
- One
27
- </Tabs.Content>
28
- <Tabs.Content>
29
- Two
30
- </Tabs.Content>
31
- </Tabs>
32
- ```
33
-
34
- ### Rendering Content
35
-
36
- Put whatever you want in the `Content` part of the `Tabs` layout, or style the `Content` slot directly.
37
-
38
- ```tsx
39
- // Add padding to the content slot
40
- const ContentFrame = styled(Tabs.Content)`
41
- padding: ${Padding.l};
42
- `
43
- ```
44
-
45
- <RenderingContentExample />
46
-
47
- ### Tabs with Icons
48
-
49
- Add an icon of other simple components to the left of the `Tab` label.
50
-
51
- <TabsWithIconsExample />
52
-
53
- ### Tabs with additional layout
54
-
55
- The `Tabs.TabList` slot will render all of its children. Only `Tab` children will be used to control the tabs.
56
-
57
- <AdditionalControlsExample />
58
-
59
- Use this to implement additional controls and configuration shared by the tabs.
60
-
61
- <TabsExample />
62
-
63
- ### Content with additional layout
64
-
65
- The Tabs component will render any and all children in the order they are given. You can add children between the tabs and content, or you can put the tabs on the bottom.
66
-
67
- <CrazyTabsExample />
68
-
69
- ### Managing State
70
-
71
- Pass an integer into the `selected` property of `Tabs` to manage its state.
72
-
73
- <StateManagementExample />
74
-
75
- ## API
76
-
77
- ### `Tabs`
78
-
79
- | Prop | Type | Description |
80
- | ---------- | ---------------------------- | ------------------------------------------------------- |
81
- | `selected` | `number` | Determines which tab is selected |
82
- | `onChange` | `(selected: number) => void` | Announces when the currently selected tab should change |
83
-
84
- ### `Tab`
85
-
86
- Extends `HTMLAttributes<HTMLDivElement>`
87
-
88
- | Prop | Type | Description |
89
- | ---------- | ------------ | ------------------------------------------- |
90
- | `selected` | `boolean?` | Whether this tab is selected |
91
- | `Prefix` | `Component?` | A component to render in front of the label |
92
-
93
- ## Changelog
94
-
95
- ### [0.0.1]
96
- - add primary tabs
97
- - currently we can control the tabs with the "tab" key, but later we should implement the UX described here: https://www.w3.org/WAI/ARIA/apg/example-index/tabs/tabs-automatic
@@ -1,86 +0,0 @@
1
- import styled from 'styled-components'
2
- import { Margin } from '@foundations'
3
- import { render, screen } from '@testing-library/react'
4
- import userEvent from '@testing-library/user-event'
5
- import { Tabs, Tab } from './index'
6
-
7
- describe('Tabs', () => {
8
- it('renders both tabs and the currently selected content', async () => {
9
- render(
10
- <Tabs selected={0}>
11
- <Tabs.TabList>
12
- <Tab>One</Tab>
13
- <Tab>Two</Tab>
14
- </Tabs.TabList>
15
- <Tabs.Content>ONE</Tabs.Content>
16
- <Tabs.Content>TWO</Tabs.Content>
17
- </Tabs>
18
- )
19
-
20
- expect(screen.getAllByRole('tab')).toHaveLength(2)
21
- expect(screen.getAllByRole('tabpanel')).toHaveLength(1)
22
- expect(screen.getByRole('tabpanel')).toHaveTextContent('ONE')
23
- })
24
-
25
- it('does not render the unselected tabs', async () => {
26
- render(
27
- <Tabs selected={2}>
28
- <Tabs.TabList>
29
- <Tab>One</Tab>
30
- <Tab>Two</Tab>
31
- <Tab>Three</Tab>
32
- </Tabs.TabList>
33
- <Tabs.Content>ONE</Tabs.Content>
34
- <Tabs.Content>TWO</Tabs.Content>
35
- <Tabs.Content>THREE</Tabs.Content>
36
- </Tabs>
37
- )
38
-
39
- expect(screen.getAllByRole('tab')).toHaveLength(3)
40
- expect(screen.getAllByRole('tabpanel', { hidden: true })).toHaveLength(3)
41
-
42
- expect(screen.getByText('ONE')).toHaveAttribute('aria-hidden', 'true')
43
- expect(screen.getByText('TWO')).toHaveAttribute('aria-hidden', 'true')
44
- expect(screen.getByText('ONE')).not.toBeVisible()
45
- expect(screen.getByText('TWO')).not.toBeVisible()
46
- })
47
-
48
- /**
49
- * this test just ensures that the programmer did not
50
- * forget to add className? to the props and then pass
51
- * it to the wrapping element so that users downstream
52
- * can style the component
53
- */
54
- it('accepts styles', () => {
55
- const NiceTab = styled(Tab)`
56
- margin-bottom: ${Margin.l};
57
- `
58
-
59
- const { container } = render(<NiceTab>Contents</NiceTab>)
60
-
61
- expect(container.firstChild).toHaveStyle(`margin-bottom: ${Margin.l}`)
62
- expect(screen.getByText('Contents')).toBeInTheDocument()
63
- })
64
-
65
- it('calls onChange when a tab is clicked', async () => {
66
- const handleChange = jest.fn()
67
-
68
- render(
69
- <Tabs selected={0} onChange={handleChange}>
70
- <Tabs.TabList>
71
- <Tab>One</Tab>
72
- <Tab>Two</Tab>
73
- </Tabs.TabList>
74
- <Tabs.Content>ONE</Tabs.Content>
75
- <Tabs.Content>TWO</Tabs.Content>
76
- </Tabs>
77
- )
78
-
79
- await userEvent.click(screen.getByText('Two'))
80
-
81
- expect(handleChange).toHaveBeenCalledTimes(1)
82
-
83
- expect(screen.getByText('ONE')).toBeVisible()
84
- expect(screen.getByText('TWO')).not.toBeVisible()
85
- })
86
- })
@@ -1,101 +0,0 @@
1
- import { Children, ReactElement } from 'react'
2
- import styled from 'styled-components'
3
-
4
- import { Borders, Margin, Padding } from '@foundations'
5
- import { applyProps, applyStyle, FC, is, isReactElementOfType, PropsWithChildren, safeCallback, Slot, StylableSlot } from '@helpers'
6
-
7
- import { Flex } from 'components/layout'
8
- import { ITabProps, Tab as TabBase } from './components'
9
-
10
- const Tab = styled(TabBase)``
11
-
12
- const TabList = styled(Flex)`
13
- padding-left: ${Padding.m};
14
- border-bottom: 1px solid ${Borders.Default.Subdued};
15
-
16
- ${Tab} {
17
- margin-right: ${Margin.m};
18
- margin-bottom: -1px;
19
- flex-shrink: 0;
20
- }
21
- `
22
-
23
- class Content extends StylableSlot {}
24
- class Navigation extends Slot {}
25
-
26
- type SubComponents = {
27
- Content: typeof Content
28
- TabList: typeof Navigation
29
- }
30
-
31
- interface ITabsProps extends PropsWithChildren {
32
- selected: number
33
- onChange?: (selected: number) => void
34
- }
35
-
36
- const isTab = isReactElementOfType(Tab)
37
- const isTabList = isReactElementOfType(Navigation)
38
- const isContent = isReactElementOfType(Content)
39
-
40
- export const Tabs: FC<ITabsProps, SubComponents> = (props) => {
41
- /** iterate over the children, wiring up the tabs and contents */
42
- let contentCount = 0
43
- let tabCount = 0
44
- const children = Children.map(props.children, (child) => {
45
- if (isContent(child)) {
46
- return decorateContent(child, props, contentCount++)
47
- } if (isTabList(child)) {
48
- const tabs = Children.map(child.props.children, (tab) => {
49
- return isTab(tab) ? decorateTab(tab, props, tabCount++) : tab
50
- })
51
-
52
- return <TabList>{tabs}</TabList>
53
- } else {
54
- return child
55
- }
56
- })
57
-
58
- return <>{children}</>
59
- }
60
-
61
- function decorateTab(
62
- tab: ReactElement<ITabProps>,
63
- { selected, onChange = () => undefined }: ITabsProps,
64
- index: number
65
- ) {
66
- return (
67
- <Tab
68
- {...tab.props}
69
- selected={
70
- is(tab.props.selected) ? tab.props.selected : index === selected
71
- }
72
- onFocus={(e) => {
73
- safeCallback(tab.props.onFocus, e)
74
-
75
- if (index !== selected) {
76
- onChange(index)
77
- }
78
- }}
79
- >
80
- {tab.props.children}
81
- </Tab>
82
- )
83
- }
84
-
85
- /** content could be anything, but it needs to at least show and hide appropriately */
86
- function decorateContent (child: ReactElement, props: ITabsProps, index: number) {
87
- return applyProps(
88
- applyStyle(child, {
89
- display: index === props.selected ? 'inherit' : 'none',
90
- }),
91
- {
92
- role: 'tabpanel',
93
- 'aria-hidden': !(index === props.selected),
94
- }
95
- )
96
- }
97
-
98
- Tabs.Content = Content
99
- Tabs.TabList = Navigation
100
-
101
- export { Tab } from './components'
@@ -1,85 +0,0 @@
1
- //close-button.tsx
2
- import styled from 'styled-components'
3
- import { Flex } from 'components/layout'
4
- import { Surface, Padding, Icons } from '@foundations'
5
- import { FC, is, isDefined, PropsWithChildren } from '@helpers'
6
- import { HTMLAttributes } from 'react'
7
-
8
- const ClosableWrapper = styled(Flex)<{
9
- disabled: boolean
10
- }>`
11
- flex-direction: row;
12
- align-items: center;
13
- justify-content: center;
14
- padding: ${Padding.xxxs} ${Padding.xxs};
15
- gap: 8px;
16
- width: 28px;
17
-
18
- background: ${(props) =>
19
- props.disabled ? Surface.Neutral.Subdued : Surface.Neutral.Default};
20
- border-radius: 0px 4px 4px 0px;
21
-
22
- ${(props) =>
23
- !props.disabled
24
- ? `
25
- &:hover {
26
- background: ${Surface.Neutral.Hover};
27
- cursor: pointer;
28
-
29
- svg {
30
- path {
31
- fill: ${Icons.Hover}
32
- }
33
- }
34
- }
35
-
36
- &:active {
37
- background: ${Surface.Neutral.Pressed};
38
-
39
- svg {
40
- path {
41
- fill: ${Icons.Pressed};
42
- }
43
- }
44
- }
45
- `
46
- : `
47
- svg {
48
- path {
49
- fill: ${Icons.Disabled};
50
- }
51
- }`}
52
- `
53
-
54
- const ClosableIcon = styled.svg`
55
- path {
56
- fill: ${Icons.Default};
57
- }
58
- `
59
-
60
- interface IProps extends HTMLAttributes<HTMLDivElement>, PropsWithChildren {
61
- disabled?: boolean
62
- onClick?: () => void
63
- }
64
-
65
- export const CloseButton: FC<IProps> = (props) => {
66
- const disabled = is(props.disabled)
67
-
68
- const onClickHandler = () => {
69
- if (!disabled && isDefined(props.onClick)) {
70
- props.onClick()
71
- }
72
- }
73
- return (
74
- <ClosableWrapper disabled={disabled} onClick={onClickHandler} role="button">
75
- <ClosableIcon
76
- width="12.5"
77
- height="12.5"
78
- viewBox="0 0 16 16"
79
- xmlns="http://www.w3.org/2000/svg"
80
- >
81
- <path d="M8.00451 6.79303L14.5439 0.251124C14.8798 -0.0837079 15.423 -0.0837079 15.7267 0.251124C16.0912 0.585955 16.0912 1.12912 15.7267 1.46395L9.21591 8.00442L15.7267 14.5438C16.0912 14.8797 16.0912 15.4229 15.7267 15.7266C15.423 16.0911 14.8798 16.0911 14.5439 15.7266L8.00451 9.21582L1.46404 15.7266C1.12921 16.0911 0.586045 16.0911 0.251177 15.7266C-0.0837258 15.4229 -0.0837258 14.8797 0.251177 14.5438L6.79312 8.00442L0.251177 1.46395C-0.0837258 1.12912 -0.0837258 0.585955 0.251177 0.251124C0.586045 -0.0837079 1.12921 -0.0837079 1.46404 0.251124L8.00451 6.79303Z" />
82
- </ClosableIcon>
83
- </ClosableWrapper>
84
- )
85
- }
@@ -1,2 +0,0 @@
1
- export * from './close-button'
2
- export * from './tag-label'
@@ -1,44 +0,0 @@
1
- import styled from 'styled-components'
2
- import { Flex } from 'components/layout'
3
- import { Surface, Padding, Text } from '@foundations'
4
- import { Label } from 'components/typography'
5
- import { FC, is, PropsWithChildren } from '@helpers'
6
- import { HTMLAttributes } from 'react'
7
-
8
- const LabelFrame = styled(Flex)<{
9
- disabled: boolean
10
- closable: boolean
11
- }>`
12
- background: ${(props) =>
13
- props.disabled ? Surface.Neutral.Subdued : Surface.Neutral.Default};
14
- flex-direction: row;
15
- align-items: center;
16
- justify-content: center;
17
- gap: 8px;
18
- padding: ${Padding.xxxs} ${Padding.xs} ${Padding.xxxs} ${Padding.xs};
19
- width: 100%;
20
- min-height: 24px;
21
- border-radius: ${(props) => (props.closable ? '4px 0px 0px 4px' : '4px')};
22
- `
23
-
24
- const LabelText = styled(Label)<{
25
- disabled: boolean
26
- }>`
27
- color: ${(props) => (props.disabled ? Text.Light : Text.Default)};
28
- `
29
-
30
- interface IProps extends HTMLAttributes<HTMLLabelElement>, PropsWithChildren {
31
- closable?: boolean
32
- disabled?: boolean
33
- }
34
-
35
- export const TagLabel: FC<IProps> = (props) => {
36
- const disabled = is(props.disabled)
37
- const closable = is(props.closable)
38
-
39
- return (
40
- <LabelFrame disabled={disabled} closable={closable}>
41
- <LabelText disabled={disabled}>{props.children}</LabelText>
42
- </LabelFrame>
43
- )
44
- }
@@ -1 +0,0 @@
1
- export * from './tag'