w-design-system 0.0.1

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 (294) hide show
  1. package/.storybook/main.ts +19 -0
  2. package/.storybook/preview.ts +14 -0
  3. package/README.md +46 -0
  4. package/README.old.md +1 -0
  5. package/dist/App.d.ts +5 -0
  6. package/dist/App.d.ts.map +1 -0
  7. package/dist/App.js +9 -0
  8. package/dist/App.js.map +1 -0
  9. package/dist/App.test.d.ts +2 -0
  10. package/dist/App.test.d.ts.map +1 -0
  11. package/dist/App.test.js +9 -0
  12. package/dist/App.test.js.map +1 -0
  13. package/dist/assets/icon/index.d.ts +7 -0
  14. package/dist/assets/icon/index.d.ts.map +1 -0
  15. package/dist/assets/icon/index.js +7 -0
  16. package/dist/assets/icon/index.js.map +1 -0
  17. package/dist/components/Banner/index.d.ts +5 -0
  18. package/dist/components/Banner/index.d.ts.map +1 -0
  19. package/dist/components/Banner/index.js +33 -0
  20. package/dist/components/Banner/index.js.map +1 -0
  21. package/dist/components/Banner/stories.d.ts +7 -0
  22. package/dist/components/Banner/stories.d.ts.map +1 -0
  23. package/dist/components/Banner/stories.js +25 -0
  24. package/dist/components/Banner/stories.js.map +1 -0
  25. package/dist/components/Banner/styles.d.ts +4 -0
  26. package/dist/components/Banner/styles.d.ts.map +1 -0
  27. package/dist/components/Banner/styles.js +55 -0
  28. package/dist/components/Banner/styles.js.map +1 -0
  29. package/dist/components/Button /index.d.ts +5 -0
  30. package/dist/components/Button /index.d.ts.map +1 -0
  31. package/dist/components/Button /index.js +22 -0
  32. package/dist/components/Button /index.js.map +1 -0
  33. package/dist/components/Button /stories.d.ts +14 -0
  34. package/dist/components/Button /stories.d.ts.map +1 -0
  35. package/dist/components/Button /stories.js +88 -0
  36. package/dist/components/Button /stories.js.map +1 -0
  37. package/dist/components/Button /styles.d.ts +4 -0
  38. package/dist/components/Button /styles.d.ts.map +1 -0
  39. package/dist/components/Button /styles.js +194 -0
  40. package/dist/components/Button /styles.js.map +1 -0
  41. package/dist/components/Button /test.d.ts +2 -0
  42. package/dist/components/Button /test.d.ts.map +1 -0
  43. package/dist/components/Button /test.js +33 -0
  44. package/dist/components/Button /test.js.map +1 -0
  45. package/dist/components/ButtonRadiusIcon/index.d.ts +5 -0
  46. package/dist/components/ButtonRadiusIcon/index.d.ts.map +1 -0
  47. package/dist/components/ButtonRadiusIcon/index.js +26 -0
  48. package/dist/components/ButtonRadiusIcon/index.js.map +1 -0
  49. package/dist/components/ButtonRadiusIcon/stories.d.ts +8 -0
  50. package/dist/components/ButtonRadiusIcon/stories.d.ts.map +1 -0
  51. package/dist/components/ButtonRadiusIcon/stories.js +42 -0
  52. package/dist/components/ButtonRadiusIcon/stories.js.map +1 -0
  53. package/dist/components/ButtonRadiusIcon/styles.d.ts +4 -0
  54. package/dist/components/ButtonRadiusIcon/styles.d.ts.map +1 -0
  55. package/dist/components/ButtonRadiusIcon/styles.js +137 -0
  56. package/dist/components/ButtonRadiusIcon/styles.js.map +1 -0
  57. package/dist/components/ButtonRound/index.d.ts +5 -0
  58. package/dist/components/ButtonRound/index.d.ts.map +1 -0
  59. package/dist/components/ButtonRound/index.js +22 -0
  60. package/dist/components/ButtonRound/index.js.map +1 -0
  61. package/dist/components/ButtonRound/stories.d.ts +8 -0
  62. package/dist/components/ButtonRound/stories.d.ts.map +1 -0
  63. package/dist/components/ButtonRound/stories.js +44 -0
  64. package/dist/components/ButtonRound/stories.js.map +1 -0
  65. package/dist/components/ButtonRound/styles.d.ts +4 -0
  66. package/dist/components/ButtonRound/styles.d.ts.map +1 -0
  67. package/dist/components/ButtonRound/styles.js +134 -0
  68. package/dist/components/ButtonRound/styles.js.map +1 -0
  69. package/dist/components/IconWrapper/index.d.ts +12 -0
  70. package/dist/components/IconWrapper/index.d.ts.map +1 -0
  71. package/dist/components/IconWrapper/index.js +24 -0
  72. package/dist/components/IconWrapper/index.js.map +1 -0
  73. package/dist/components/Modal/index.d.ts +5 -0
  74. package/dist/components/Modal/index.d.ts.map +1 -0
  75. package/dist/components/Modal/index.js +32 -0
  76. package/dist/components/Modal/index.js.map +1 -0
  77. package/dist/components/Modal/stories.d.ts +7 -0
  78. package/dist/components/Modal/stories.d.ts.map +1 -0
  79. package/dist/components/Modal/stories.js +24 -0
  80. package/dist/components/Modal/stories.js.map +1 -0
  81. package/dist/components/Modal/styles.d.ts +4 -0
  82. package/dist/components/Modal/styles.d.ts.map +1 -0
  83. package/dist/components/Modal/styles.js +48 -0
  84. package/dist/components/Modal/styles.js.map +1 -0
  85. package/dist/components/Paragraph/index.d.ts +11 -0
  86. package/dist/components/Paragraph/index.d.ts.map +1 -0
  87. package/dist/components/Paragraph/index.js +28 -0
  88. package/dist/components/Paragraph/index.js.map +1 -0
  89. package/dist/components/Paragraph/stories.d.ts +14 -0
  90. package/dist/components/Paragraph/stories.d.ts.map +1 -0
  91. package/dist/components/Paragraph/stories.js +95 -0
  92. package/dist/components/Paragraph/stories.js.map +1 -0
  93. package/dist/components/Tabs/index.d.ts +5 -0
  94. package/dist/components/Tabs/index.d.ts.map +1 -0
  95. package/dist/components/Tabs/index.js +14 -0
  96. package/dist/components/Tabs/index.js.map +1 -0
  97. package/dist/components/Tabs/stories.d.ts +7 -0
  98. package/dist/components/Tabs/stories.d.ts.map +1 -0
  99. package/dist/components/Tabs/stories.js +31 -0
  100. package/dist/components/Tabs/stories.js.map +1 -0
  101. package/dist/components/Tabs/styles.d.ts +6 -0
  102. package/dist/components/Tabs/styles.d.ts.map +1 -0
  103. package/dist/components/Tabs/styles.js +22 -0
  104. package/dist/components/Tabs/styles.js.map +1 -0
  105. package/dist/components/Themes/index.d.ts +79 -0
  106. package/dist/components/Themes/index.d.ts.map +1 -0
  107. package/dist/components/Themes/index.js +83 -0
  108. package/dist/components/Themes/index.js.map +1 -0
  109. package/dist/components/Title/index.d.ts +11 -0
  110. package/dist/components/Title/index.d.ts.map +1 -0
  111. package/dist/components/Title/index.js +18 -0
  112. package/dist/components/Title/index.js.map +1 -0
  113. package/dist/components/Title/stories.d.ts +9 -0
  114. package/dist/components/Title/stories.d.ts.map +1 -0
  115. package/dist/components/Title/stories.js +61 -0
  116. package/dist/components/Title/stories.js.map +1 -0
  117. package/dist/components/Types/index.d.ts +41 -0
  118. package/dist/components/Types/index.d.ts.map +1 -0
  119. package/dist/components/Types/index.js +2 -0
  120. package/dist/components/Types/index.js.map +1 -0
  121. package/dist/components/index.d.ts +2 -0
  122. package/dist/components/index.d.ts.map +1 -0
  123. package/dist/components/index.js +2 -0
  124. package/dist/components/index.js.map +1 -0
  125. package/dist/index.d.ts +2 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +13 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/prettier.config.d.ts +10 -0
  130. package/dist/prettier.config.d.ts.map +1 -0
  131. package/dist/prettier.config.js +13 -0
  132. package/dist/prettier.config.js.map +1 -0
  133. package/dist/reportWebVitals.d.ts +4 -0
  134. package/dist/reportWebVitals.d.ts.map +1 -0
  135. package/dist/reportWebVitals.js +14 -0
  136. package/dist/reportWebVitals.js.map +1 -0
  137. package/dist/setupTests.d.ts +2 -0
  138. package/dist/setupTests.d.ts.map +1 -0
  139. package/dist/setupTests.js +6 -0
  140. package/dist/setupTests.js.map +1 -0
  141. package/dist/src/globalStyles.d.ts +4 -0
  142. package/dist/src/globalStyles.d.ts.map +1 -0
  143. package/dist/src/globalStyles.js +10 -0
  144. package/dist/src/globalStyles.js.map +1 -0
  145. package/dist/stories/Button.d.ts +29 -0
  146. package/dist/stories/Button.d.ts.map +1 -0
  147. package/dist/stories/Button.js +22 -0
  148. package/dist/stories/Button.js.map +1 -0
  149. package/dist/stories/Button.stories.d.ts +25 -0
  150. package/dist/stories/Button.stories.d.ts.map +1 -0
  151. package/dist/stories/Button.stories.js +45 -0
  152. package/dist/stories/Button.stories.js.map +1 -0
  153. package/dist/stories/Header.d.ts +14 -0
  154. package/dist/stories/Header.d.ts.map +1 -0
  155. package/dist/stories/Header.js +21 -0
  156. package/dist/stories/Header.js.map +1 -0
  157. package/dist/stories/Header.stories.d.ts +20 -0
  158. package/dist/stories/Header.stories.d.ts.map +1 -0
  159. package/dist/stories/Header.stories.js +27 -0
  160. package/dist/stories/Header.stories.js.map +1 -0
  161. package/dist/stories/Page.d.ts +4 -0
  162. package/dist/stories/Page.d.ts.map +1 -0
  163. package/dist/stories/Page.js +38 -0
  164. package/dist/stories/Page.js.map +1 -0
  165. package/dist/stories/Page.stories.d.ts +14 -0
  166. package/dist/stories/Page.stories.d.ts.map +1 -0
  167. package/dist/stories/Page.stories.js +34 -0
  168. package/dist/stories/Page.stories.js.map +1 -0
  169. package/dist/types/App.d.ts +4 -0
  170. package/dist/types/App.test.d.ts +1 -0
  171. package/dist/types/assets/icon/index.d.ts +6 -0
  172. package/dist/types/components/Banner/index.d.ts +4 -0
  173. package/dist/types/components/Banner/stories.d.ts +6 -0
  174. package/dist/types/components/Banner/styles.d.ts +3 -0
  175. package/dist/types/components/Button /index.d.ts +4 -0
  176. package/dist/types/components/Button /stories.d.ts +13 -0
  177. package/dist/types/components/Button /styles.d.ts +3 -0
  178. package/dist/types/components/Button /test.d.ts +1 -0
  179. package/dist/types/components/ButtonRadiusIcon/index.d.ts +4 -0
  180. package/dist/types/components/ButtonRadiusIcon/stories.d.ts +7 -0
  181. package/dist/types/components/ButtonRadiusIcon/styles.d.ts +3 -0
  182. package/dist/types/components/ButtonRound/index.d.ts +4 -0
  183. package/dist/types/components/ButtonRound/stories.d.ts +7 -0
  184. package/dist/types/components/ButtonRound/styles.d.ts +3 -0
  185. package/dist/types/components/IconWrapper/index.d.ts +11 -0
  186. package/dist/types/components/Modal/index.d.ts +4 -0
  187. package/dist/types/components/Modal/stories.d.ts +6 -0
  188. package/dist/types/components/Modal/styles.d.ts +3 -0
  189. package/dist/types/components/Paragraph/index.d.ts +10 -0
  190. package/dist/types/components/Paragraph/stories.d.ts +13 -0
  191. package/dist/types/components/Tabs/index.d.ts +4 -0
  192. package/dist/types/components/Tabs/stories.d.ts +6 -0
  193. package/dist/types/components/Tabs/styles.d.ts +5 -0
  194. package/dist/types/components/Themes/index.d.ts +78 -0
  195. package/dist/types/components/Title/index.d.ts +10 -0
  196. package/dist/types/components/Title/stories.d.ts +8 -0
  197. package/dist/types/components/Types/index.d.ts +40 -0
  198. package/dist/types/components/index.d.ts +1 -0
  199. package/dist/types/index.d.ts +1 -0
  200. package/dist/types/reportWebVitals.d.ts +3 -0
  201. package/dist/types/setupTests.d.ts +1 -0
  202. package/dist/types/src/globalStyles.d.ts +3 -0
  203. package/dist/types/stories/Button.d.ts +28 -0
  204. package/dist/types/stories/Button.stories.d.ts +24 -0
  205. package/dist/types/stories/Header.d.ts +13 -0
  206. package/dist/types/stories/Header.stories.d.ts +19 -0
  207. package/dist/types/stories/Page.d.ts +3 -0
  208. package/dist/types/stories/Page.stories.d.ts +13 -0
  209. package/dist/types/utils/constanst.d.ts +2 -0
  210. package/dist/utils/constanst.d.ts +3 -0
  211. package/dist/utils/constanst.d.ts.map +1 -0
  212. package/dist/utils/constanst.js +3 -0
  213. package/dist/utils/constanst.js.map +1 -0
  214. package/package.json +69 -0
  215. package/public/favicon.ico +0 -0
  216. package/public/index.html +43 -0
  217. package/public/logo192.png +0 -0
  218. package/public/logo512.png +0 -0
  219. package/public/manifest.json +25 -0
  220. package/public/robots.txt +3 -0
  221. package/src/App.css +39 -0
  222. package/src/App.test.tsx +9 -0
  223. package/src/App.tsx +14 -0
  224. package/src/assets/icon/alert.svg +3 -0
  225. package/src/assets/icon/close.svg +10 -0
  226. package/src/assets/icon/comment.svg +10 -0
  227. package/src/assets/icon/doc-check.svg +10 -0
  228. package/src/assets/icon/image.svg +3 -0
  229. package/src/assets/icon/index.ts +6 -0
  230. package/src/assets/icon/svg.d.ts +4 -0
  231. package/src/components/Banner/index.tsx +49 -0
  232. package/src/components/Banner/stories.tsx +31 -0
  233. package/src/components/Banner/styles.ts +58 -0
  234. package/src/components/Button /index.tsx +33 -0
  235. package/src/components/Button /stories.tsx +98 -0
  236. package/src/components/Button /styles.ts +198 -0
  237. package/src/components/Button /test.tsx +36 -0
  238. package/src/components/ButtonRadiusIcon/index.tsx +24 -0
  239. package/src/components/ButtonRadiusIcon/stories.tsx +47 -0
  240. package/src/components/ButtonRadiusIcon/styles.ts +139 -0
  241. package/src/components/ButtonRound/index.tsx +27 -0
  242. package/src/components/ButtonRound/stories.tsx +50 -0
  243. package/src/components/ButtonRound/styles.ts +136 -0
  244. package/src/components/IconWrapper/index.tsx +45 -0
  245. package/src/components/Modal/index.tsx +32 -0
  246. package/src/components/Modal/stories.tsx +53 -0
  247. package/src/components/Modal/styles.ts +51 -0
  248. package/src/components/Paragraph/index.tsx +44 -0
  249. package/src/components/Paragraph/stories.tsx +107 -0
  250. package/src/components/Tabs/index.tsx +26 -0
  251. package/src/components/Tabs/stories.tsx +74 -0
  252. package/src/components/Tabs/styles.ts +23 -0
  253. package/src/components/Themes/index.ts +99 -0
  254. package/src/components/Title/index.tsx +35 -0
  255. package/src/components/Title/stories.tsx +70 -0
  256. package/src/components/Types/index.ts +45 -0
  257. package/src/components/index.ts +1 -0
  258. package/src/index.css +13 -0
  259. package/src/index.tsx +19 -0
  260. package/src/logo.svg +1 -0
  261. package/src/prettier.config.js +11 -0
  262. package/src/react-app-env.d.ts +1 -0
  263. package/src/reportWebVitals.ts +16 -0
  264. package/src/setupTests.ts +5 -0
  265. package/src/src/globalStyles.ts +11 -0
  266. package/src/stories/Button.stories.ts +52 -0
  267. package/src/stories/Button.tsx +42 -0
  268. package/src/stories/Configure.mdx +364 -0
  269. package/src/stories/Header.stories.ts +33 -0
  270. package/src/stories/Header.tsx +56 -0
  271. package/src/stories/Page.stories.ts +32 -0
  272. package/src/stories/Page.tsx +73 -0
  273. package/src/stories/assets/accessibility.png +0 -0
  274. package/src/stories/assets/accessibility.svg +1 -0
  275. package/src/stories/assets/addon-library.png +0 -0
  276. package/src/stories/assets/assets.png +0 -0
  277. package/src/stories/assets/avif-test-image.avif +0 -0
  278. package/src/stories/assets/context.png +0 -0
  279. package/src/stories/assets/discord.svg +1 -0
  280. package/src/stories/assets/docs.png +0 -0
  281. package/src/stories/assets/figma-plugin.png +0 -0
  282. package/src/stories/assets/github.svg +1 -0
  283. package/src/stories/assets/share.png +0 -0
  284. package/src/stories/assets/styling.png +0 -0
  285. package/src/stories/assets/testing.png +0 -0
  286. package/src/stories/assets/theming.png +0 -0
  287. package/src/stories/assets/tutorials.svg +1 -0
  288. package/src/stories/assets/youtube.svg +1 -0
  289. package/src/stories/button.css +30 -0
  290. package/src/stories/header.css +32 -0
  291. package/src/stories/page.css +69 -0
  292. package/src/utils/constanst.ts +2 -0
  293. package/tsconfig.json +38 -0
  294. package/webpack.config.js +12 -0
@@ -0,0 +1,32 @@
1
+ import React from 'react'
2
+ import ReactDOM from 'react-dom'
3
+ import { closeSVG } from '../../assets/icon'
4
+ import { theme } from '../Themes'
5
+ import Title from '../Title'
6
+ import IconWrapper from '../IconWrapper'
7
+ import { ModalTypes } from '../Types'
8
+ import { ModalContainer, Overlay } from './styles'
9
+ const {
10
+ colors: { cyan50, shade30 },
11
+ } = theme
12
+
13
+ const Modal: React.FC<ModalTypes> = ({ children, onClose, footer, ...props }) => {
14
+ return ReactDOM.createPortal(
15
+ <>
16
+ <Overlay onClick={onClose} />
17
+ <ModalContainer {...props}>
18
+ <div className={'modalHeader'}>
19
+ <Title size={'medium'} bold color={cyan50}>
20
+ Enviar
21
+ </Title>
22
+ <IconWrapper src={closeSVG} width={'14px'} height={'14px'} color={shade30} onClick={onClose} />
23
+ </div>
24
+ <div className={'modalContainer'}>{children}</div>
25
+ <div className={'modalFooter'}>{footer}</div>
26
+ </ModalContainer>
27
+ </>,
28
+ document.body,
29
+ )
30
+ }
31
+
32
+ export default Modal
@@ -0,0 +1,53 @@
1
+ import React from 'react'
2
+ import { Meta, StoryObj } from '@storybook/react'
3
+ import { useState } from 'react'
4
+ import Modal from './index'
5
+ import Button from '../Button '
6
+ import Paragraph from '../Paragraph'
7
+
8
+ const meta: Meta<typeof Modal> = {
9
+ title: 'Components/Modal',
10
+ component: Modal,
11
+ } satisfies Meta<typeof Modal>
12
+
13
+ export default meta
14
+
15
+ type Story = StoryObj<typeof Modal>
16
+
17
+ export const Playground: Story = {
18
+ render: () => {
19
+ // eslint-disable-next-line react-hooks/rules-of-hooks
20
+ const [isOpen, setIsOpen] = useState(false)
21
+
22
+ return (
23
+ <>
24
+ <Button onClick={() => setIsOpen(true)}>Open Modal</Button>
25
+ {isOpen && (
26
+ <Modal
27
+ onClose={() => setIsOpen(false)}
28
+ footer={
29
+ <>
30
+ <Button onClick={() => setIsOpen(true)} variant={'gray'}>
31
+ Cancelar
32
+ </Button>
33
+ <Button onClick={() => setIsOpen(true)}>Open Modal</Button>
34
+ </>
35
+ }
36
+ >
37
+ <Paragraph size={'medium'} weight={800}>
38
+ Modal Title
39
+ </Paragraph>
40
+ <Paragraph>
41
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the
42
+ industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and
43
+ scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into
44
+ electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release
45
+ of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software
46
+ like Aldus PageMaker including versions of Lorem Ipsum.
47
+ </Paragraph>
48
+ </Modal>
49
+ )}
50
+ </>
51
+ )
52
+ },
53
+ }
@@ -0,0 +1,51 @@
1
+ import styled from 'styled-components'
2
+ import { theme } from '../Themes'
3
+ const {
4
+ colors: { shade20 },
5
+ zIndex: { z8, z9 },
6
+ } = theme
7
+
8
+ export const Overlay = styled.div`
9
+ position: fixed;
10
+ top: 0;
11
+ left: 0;
12
+ width: 100%;
13
+ height: 100%;
14
+ background: rgba(0, 0, 0, 0.5);
15
+ z-index: ${z8};
16
+ `
17
+ export const ModalContainer = styled.div`
18
+ display: flex;
19
+ min-width: 360px;
20
+ width: auto;
21
+ height: auto;
22
+ padding: 30px;
23
+ flex-direction: column;
24
+ align-items: flex-start;
25
+ gap: 24px;
26
+ flex-shrink: 0;
27
+ border-radius: 24px;
28
+ border: 1px solid ${shade20};
29
+ background: white;
30
+ position: fixed;
31
+ top: 50%;
32
+ left: 50%;
33
+ transform: translate(-50%, -50%);
34
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
35
+ z-index: ${z9};
36
+
37
+ .modalContainer {
38
+ min-height: 100px;
39
+ }
40
+ .modalHeader {
41
+ display: inline-flex;
42
+ justify-content: space-between;
43
+ width: 100%;
44
+ }
45
+ .modalFooter {
46
+ display: inline-flex;
47
+ justify-content: flex-end;
48
+ width: 100%;
49
+ gap: 0 24px;
50
+ }
51
+ `
@@ -0,0 +1,44 @@
1
+ import React from 'react'
2
+ import styled from 'styled-components'
3
+
4
+ interface ParagraphProps {
5
+ size?: 'x-small' | 'small' | 'medium' | 'large'
6
+ weight?: 400 | 600 | 700 | 800
7
+ as?: 'span' | 'div' | 'label' | 'p'
8
+ color?: string // Adicionando a propriedade color
9
+ children: React.ReactNode
10
+ }
11
+
12
+ const sizes = {
13
+ 'x-small': '12px',
14
+ small: '14px',
15
+ medium: '16px',
16
+ large: '18px',
17
+ }
18
+
19
+ const weights = {
20
+ 400: 400,
21
+ 600: 600,
22
+ 700: 700,
23
+ 800: 800,
24
+ }
25
+
26
+ const ParagraphStyled = styled.p<ParagraphProps>`
27
+ margin: 0;
28
+ padding: 0;
29
+ font-size: ${props => sizes[props.size || 'small']};
30
+ font-weight: ${props => (props.weight ? weights[props.weight] : 400)};
31
+ line-height: 140%;
32
+ font-family: 'Nunito Sans', sans-serif;
33
+ color: ${props => props.color || 'inherit'}; // Aplicando a cor
34
+ `
35
+
36
+ const Paragraph: React.FC<ParagraphProps> = ({ size = 'small', weight, as = 'p', color, children }) => {
37
+ return (
38
+ <ParagraphStyled as={as} size={size} weight={weight} color={color}>
39
+ {children}
40
+ </ParagraphStyled>
41
+ )
42
+ }
43
+
44
+ export default Paragraph
@@ -0,0 +1,107 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import Paragraph from "./index";
3
+
4
+ const meta: Meta<typeof Paragraph> = {
5
+ title: 'Components/Paragraph',
6
+ component: Paragraph,
7
+ parameters: {
8
+ layout: 'centered',
9
+ },
10
+ tags: ['autodocs'],
11
+ argTypes: {
12
+ size: {
13
+ control: { type: 'select', options: ['x-small', 'small', 'medium', 'large'] },
14
+ description: 'Select the size of the paragraph',
15
+ },
16
+ weight: {
17
+ control: { type: 'select', options: [400, 600, 700, 800] },
18
+ description: 'Select the font weight of the paragraph',
19
+ },
20
+ as: {
21
+ control: { type: 'select', options: ['span', 'div', 'label', 'p'] },
22
+ description: 'Select the HTML element to render',
23
+ },
24
+ color: {
25
+ control: 'color', // Adicionando o controle de cor
26
+ description: 'Select the color of the text',
27
+ },
28
+ children: {
29
+ control: 'text',
30
+ description: 'Content of the paragraph',
31
+ },
32
+ },
33
+ } satisfies Meta<typeof Paragraph>;
34
+
35
+ export default meta;
36
+ type Story = StoryObj<typeof meta>;
37
+
38
+ // Define different stories for the Paragraph component
39
+
40
+ export const XSmall: Story = {
41
+ args: {
42
+ size: 'x-small',
43
+ color: '#000000', // Definindo a cor para XSmall
44
+ children: 'This is an X-small paragraph.',
45
+ },
46
+ };
47
+
48
+ export const Small: Story = {
49
+ args: {
50
+ size: 'small',
51
+ weight: 600,
52
+ color: '#333333', // Definindo a cor para Small
53
+ children: 'This is a small paragraph with weight 600.',
54
+ },
55
+ };
56
+
57
+ export const Medium: Story = {
58
+ args: {
59
+ size: 'medium',
60
+ weight: 700,
61
+ color: '#666666', // Definindo a cor para Medium
62
+ children: 'This is a medium paragraph with weight 700.',
63
+ },
64
+ };
65
+
66
+ export const Large: Story = {
67
+ args: {
68
+ size: 'large',
69
+ color: '#999999', // Definindo a cor para Large
70
+ children: 'This is a large paragraph.',
71
+ },
72
+ };
73
+
74
+ export const CustomElement: Story = {
75
+ args: {
76
+ size: 'medium',
77
+ as: 'label',
78
+ color: '#CC0000', // Definindo a cor para CustomElement
79
+ children: 'This is a medium paragraph rendered as a label.',
80
+ },
81
+ };
82
+
83
+ export const AllSizes: Story = {
84
+ args: {
85
+ size: 'medium',
86
+ color: '#000000',
87
+ children: 'This paragraph can be adjusted to any size using the controls.',
88
+ },
89
+ };
90
+
91
+ export const AllWeights: Story = {
92
+ args: {
93
+ size: 'medium',
94
+ weight: 400,
95
+ color: '#000000',
96
+ children: 'This paragraph weight can be adjusted to 400, 600, 700, or 800.',
97
+ },
98
+ };
99
+
100
+ export const AllElements: Story = {
101
+ args: {
102
+ size: 'medium',
103
+ as: 'div',
104
+ color: '#000000',
105
+ children: 'This paragraph can be rendered as different HTML elements.',
106
+ },
107
+ };
@@ -0,0 +1,26 @@
1
+ import React, { useState } from 'react'
2
+ import { TabsTypes } from '../Types'
3
+ import { TabsContainerStyled, TabStyled } from './styles'
4
+
5
+ const Tabs: React.FC<TabsTypes> = ({ tabs, defaultActiveTab, onTabChange }) => {
6
+ const [activeTab, setActiveTab] = useState(defaultActiveTab || tabs[0])
7
+
8
+ const handleTabClick = (tab: string) => {
9
+ setActiveTab(tab)
10
+ if (onTabChange) {
11
+ onTabChange(tab)
12
+ }
13
+ }
14
+
15
+ return (
16
+ <TabsContainerStyled>
17
+ {tabs.map(tab => (
18
+ <TabStyled key={tab} active={tab === activeTab} onClick={() => handleTabClick(tab)}>
19
+ {tab}
20
+ </TabStyled>
21
+ ))}
22
+ </TabsContainerStyled>
23
+ )
24
+ }
25
+
26
+ export default Tabs
@@ -0,0 +1,74 @@
1
+ import React from 'react'
2
+ import { Meta, StoryObj } from '@storybook/react'
3
+ import Paragraph from '../Paragraph'
4
+ import Tabs from './index'
5
+ import { useState } from 'react'
6
+
7
+ const meta: Meta<typeof Tabs> = {
8
+ title: 'Components/Tabs',
9
+ component: Tabs,
10
+ } satisfies Meta<typeof Tabs>
11
+
12
+ export default meta
13
+
14
+ type Story = StoryObj<typeof Tabs>
15
+
16
+ export const Playground: Story = {
17
+ render: () => {
18
+ // eslint-disable-next-line react-hooks/rules-of-hooks
19
+ const [activeTab, setActiveTab] = useState('Tab 1')
20
+ const handleTabChange = (activeTab: string) => {
21
+ setActiveTab(activeTab)
22
+ }
23
+
24
+ return (
25
+ <div style={{ background: '#e0dede', padding: '50px', height: '100vh' }}>
26
+ <Tabs tabs={['Tab 1', 'Tab 2', 'Tab 3']} defaultActiveTab="Tab 1" onTabChange={handleTabChange} />
27
+ <div style={{ background: 'white', padding: '50px 20px', borderRadius: '8px', marginTop: '-5px' }}>
28
+ {activeTab === 'Tab 1' && (
29
+ <>
30
+ <Paragraph size={'medium'} weight={800}>
31
+ Tab 1
32
+ </Paragraph>
33
+ <Paragraph>
34
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the
35
+ industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and
36
+ scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap
37
+ into electronic
38
+ </Paragraph>
39
+ </>
40
+ )}
41
+ {activeTab === 'Tab 2' && (
42
+ <>
43
+ <Paragraph size={'medium'} weight={800}>
44
+ Tab 2
45
+ </Paragraph>
46
+ <Paragraph>
47
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the
48
+ industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and
49
+ scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap
50
+ into electronic Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum
51
+ has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley
52
+ of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also
53
+ the leap into electronic
54
+ </Paragraph>
55
+ </>
56
+ )}
57
+ {activeTab === 'Tab 3' && (
58
+ <>
59
+ <Paragraph size={'medium'} weight={800}>
60
+ Tab 3
61
+ </Paragraph>
62
+ <Paragraph>
63
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the
64
+ industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and
65
+ scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap
66
+ into electronic
67
+ </Paragraph>
68
+ </>
69
+ )}
70
+ </div>
71
+ </div>
72
+ )
73
+ },
74
+ }
@@ -0,0 +1,23 @@
1
+ import styled from 'styled-components'
2
+
3
+ export const TabsContainerStyled = styled.div`
4
+ display: flex;
5
+ align-items: flex-end;
6
+ `
7
+
8
+ export const TabStyled = styled.div<{ active: boolean }>`
9
+ padding: 8px 16px;
10
+ cursor: pointer;
11
+ border-radius: 24px 24px 0 0;
12
+ background: white;
13
+ opacity: ${props => (props.active ? 1 : 0.8)};
14
+ height: ${props => (props.active ? '45px' : '40px')};
15
+ min-width: 95px;
16
+ display: inline-flex;
17
+ justify-content: center;
18
+ align-items: center;
19
+ font-family: 'Nunito Sans', sans-serif;
20
+ font-weight: ${props => (props.active ? 'bold' : 'normal')};
21
+ color: ${props => (props.active ? 'var(--PrimaryColor, #000)' : 'var(--SecondaryColor, #666)')};
22
+ transition: opacity 0.3s;
23
+ `
@@ -0,0 +1,99 @@
1
+ const cyan = {
2
+ cyan50: '#001640',
3
+ cyan40: '#1A3D7F',
4
+ cyan30: '#025FDE',
5
+ cyan20: '#217EFD',
6
+ cyan10: '#EEF5FF',
7
+ }
8
+
9
+ const shades = {
10
+ shade50: '#333333',
11
+ shade40: '#666666',
12
+ shade30: '#999999',
13
+ shade20: '#EEEEEE',
14
+ shade10: '#EFF1F3',
15
+ shade05: '#FAFAFA',
16
+ }
17
+
18
+ const red = {
19
+ red40: '#981010',
20
+ red30: '#B41313',
21
+ red20: '#F3D9D9',
22
+ red10: '#F9EDED',
23
+ }
24
+
25
+ const honey = {
26
+ honey40: '#F77202',
27
+ honey30: '#F77202',
28
+ honey20: '#FCCEA7',
29
+ honey10: '#FDE3CC',
30
+ }
31
+
32
+ const yellow = {
33
+ yellow30: '#D08007',
34
+ yellow20: '#EFD3A8',
35
+ yellow10: '#FAF2E6',
36
+ }
37
+
38
+ const mint = {
39
+ mint40: '#059D2F',
40
+ mint30: '#06B737',
41
+ mint20: '#D7EFDE',
42
+ mint10: '#EBF8EF',
43
+ }
44
+
45
+ const white = '#FFFFFF'
46
+ const black = '#333333'
47
+ const transparent = 'transparent'
48
+
49
+ export const spacing = {
50
+ space1: '4px',
51
+ space2: '8px',
52
+ space3: '16px',
53
+ space4: '24px',
54
+ space5: '32px',
55
+ space6: '40px',
56
+ space7: '48px',
57
+ space8: '56px',
58
+ space9: '64px',
59
+ }
60
+
61
+ const zIndex = {
62
+ z1: 1,
63
+ z2: 2,
64
+ z3: 3,
65
+ z4: 4,
66
+ z5: 5,
67
+ z6: 6,
68
+ z7: 7,
69
+ z8: 8,
70
+ z9: 9,
71
+ full: 10000,
72
+ }
73
+
74
+ export const theme = {
75
+ zIndex,
76
+ spacing,
77
+ colors: {
78
+ ...yellow,
79
+ ...shades,
80
+ ...red,
81
+ ...honey,
82
+ ...mint,
83
+ ...cyan,
84
+ white,
85
+ black,
86
+ transparent,
87
+ },
88
+ fonts: ['Nunito Sans', 'Helvetica Neue', 'Helvetica', 'Arial', 'sans-serif'],
89
+ title: {
90
+ medium: '24px',
91
+ large: '34px',
92
+ },
93
+ paragraph: {
94
+ 'x-small': '12px',
95
+ small: '14px',
96
+ medium: '16px',
97
+ large: '18px',
98
+ },
99
+ }
@@ -0,0 +1,35 @@
1
+ import React from 'react'
2
+ import styled from 'styled-components'
3
+ import { theme } from '../Themes'
4
+
5
+ interface ParagraphProps {
6
+ size: 'medium' | 'large'
7
+ bold?: boolean
8
+ as?: 'h1' | 'h2' | 'h3'
9
+ color?: string // Adicionando a propriedade color
10
+ children: React.ReactNode
11
+ }
12
+
13
+ const sizes = {
14
+ ...theme.title,
15
+ }
16
+
17
+ const TitleStyled = styled.p<ParagraphProps>`
18
+ margin: 0;
19
+ padding: 0;
20
+ font-size: ${props => sizes[props.size]};
21
+ font-weight: ${props => (props.bold ? 800 : 400)};
22
+ line-height: 130%;
23
+ font-family: 'Nunito Sans', sans-serif;
24
+ color: ${props => props.color || 'inherit'}; // Aplicando a cor
25
+ `
26
+
27
+ const Title: React.FC<ParagraphProps> = ({ size = 'medium', bold, as = 'h2', color, children }) => {
28
+ return (
29
+ <TitleStyled as={as} size={size} bold={bold} color={color}>
30
+ {children}
31
+ </TitleStyled>
32
+ )
33
+ }
34
+
35
+ export default Title
@@ -0,0 +1,70 @@
1
+ // src/components/Title.stories.tsx
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
+ import { theme } from '../Themes';
4
+ import Title from "./index";
5
+
6
+ const sizes = theme.title;
7
+
8
+ const meta: Meta<typeof Title> = {
9
+ title: 'Components/Title',
10
+ component: Title,
11
+ parameters: {
12
+ layout: 'centered',
13
+ },
14
+ argTypes: {
15
+ size: {
16
+ control: { type: 'select', options: ['medium', 'large'] },
17
+ description: 'Font size of the title',
18
+ },
19
+ bold: {
20
+ control: 'boolean',
21
+ description: 'Apply bold font weight',
22
+ },
23
+ as: {
24
+ control: { type: 'select', options: ['h1', 'h2', 'h3'] },
25
+ description: 'HTML element to render',
26
+ },
27
+ color: {
28
+ control: 'color',
29
+ description: 'Font color of the title',
30
+ },
31
+ children: {
32
+ control: 'text',
33
+ description: 'Content of the title',
34
+ },
35
+ },
36
+ };
37
+
38
+ export default meta;
39
+ type Story = StoryObj<typeof meta>;
40
+
41
+
42
+ export const LargeBoldTitle: Story = {
43
+ args: {
44
+ size: 'large',
45
+ bold: true,
46
+ as: 'h1',
47
+ color: '#1A3D7F', // Example color
48
+ children: 'Large Bold Title',
49
+ },
50
+ };
51
+
52
+ export const MediumTitle: Story = {
53
+ args: {
54
+ size: 'medium',
55
+ bold: false,
56
+ as: 'h2',
57
+ color: '#025FDE', // Example color
58
+ children: 'Medium Title',
59
+ },
60
+ };
61
+
62
+ export const CustomColorTitle: Story = {
63
+ args: {
64
+ size: 'large',
65
+ bold: true,
66
+ as: 'h3',
67
+ color: '#FF5733', // Custom color
68
+ children: 'Custom Color Title',
69
+ },
70
+ };
@@ -0,0 +1,45 @@
1
+ import { ButtonHTMLAttributes, HTMLAttributes, ReactNode } from 'react'
2
+
3
+ type ColorsVariant = 'primary' | 'secondary' | 'success' | 'danger' | 'gray' | 'warning' | 'yellow'
4
+ type ColorsVariantBanner = 'notice' | 'success' | 'danger' | 'warning'
5
+ export interface ButtonTypes extends ButtonHTMLAttributes<HTMLButtonElement> {
6
+ variant?: ColorsVariant
7
+ icon?: string
8
+ radius?: boolean
9
+ outline?: boolean
10
+ halfLeft?: boolean
11
+ halfRight?: boolean
12
+ fullWidth?: boolean
13
+ }
14
+
15
+ export interface ButtonRadiusIconTypes extends ButtonHTMLAttributes<HTMLButtonElement> {
16
+ variant?: ColorsVariant
17
+ icon?: string
18
+ subTitle?: string
19
+ }
20
+
21
+ export interface ButtonRoundTypes extends ButtonHTMLAttributes<HTMLButtonElement> {
22
+ variant?: ColorsVariant
23
+ icon?: string
24
+ outline?: boolean
25
+ badge?: number
26
+ }
27
+
28
+ export interface BannerTypes extends HTMLAttributes<HTMLDivElement> {
29
+ variant?: ColorsVariantBanner
30
+ title?: string
31
+ subTitle?: string
32
+ onClick?: () => void
33
+ }
34
+
35
+ export interface ModalTypes extends HTMLAttributes<HTMLDivElement> {
36
+ children: ReactNode
37
+ onClose: () => void
38
+ footer?: ReactNode | ReactNode[]
39
+ }
40
+
41
+ export interface TabsTypes extends HTMLAttributes<HTMLDivElement> {
42
+ tabs: string[]
43
+ defaultActiveTab?: string
44
+ onTabChange?: (activeTab: string) => void
45
+ }
@@ -0,0 +1 @@
1
+ export { default as Banner } from './Banner'
package/src/index.css ADDED
@@ -0,0 +1,13 @@
1
+ body {
2
+ margin: 0;
3
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4
+ 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5
+ sans-serif;
6
+ -webkit-font-smoothing: antialiased;
7
+ -moz-osx-font-smoothing: grayscale;
8
+ }
9
+
10
+ code {
11
+ font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12
+ monospace;
13
+ }