norma-library 0.4.2 → 0.4.5

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 (220) hide show
  1. package/.babelrc.json +18 -0
  2. package/buildcache/front-end +1 -0
  3. package/dist/esm/components/Accordion.d.ts +3 -0
  4. package/dist/esm/components/Accordion.js +24 -0
  5. package/dist/esm/components/Accordion.js.map +1 -0
  6. package/dist/esm/components/Button.d.ts +3 -0
  7. package/dist/esm/components/Button.js +22 -0
  8. package/dist/esm/components/Button.js.map +1 -0
  9. package/dist/esm/components/Card.d.ts +7 -0
  10. package/dist/esm/components/Card.js +31 -0
  11. package/dist/esm/components/Card.js.map +1 -0
  12. package/dist/esm/components/CheckBox.d.ts +3 -0
  13. package/dist/esm/components/CheckBox.js +13 -0
  14. package/dist/esm/components/CheckBox.js.map +1 -0
  15. package/dist/esm/components/DropDown.d.ts +3 -0
  16. package/dist/esm/components/DropDown.js +17 -0
  17. package/dist/esm/components/DropDown.js.map +1 -0
  18. package/dist/esm/components/IconButton.d.ts +3 -0
  19. package/dist/esm/components/IconButton.js +31 -0
  20. package/dist/esm/components/IconButton.js.map +1 -0
  21. package/dist/esm/components/Icons.d.ts +7 -0
  22. package/dist/esm/components/Icons.js +49 -0
  23. package/dist/esm/components/Icons.js.map +1 -0
  24. package/dist/esm/components/Modal.d.ts +4 -0
  25. package/dist/esm/components/Modal.js +32 -0
  26. package/dist/esm/components/Modal.js.map +1 -0
  27. package/dist/esm/components/Paper.d.ts +3 -0
  28. package/dist/esm/components/Paper.js +14 -0
  29. package/dist/esm/components/Paper.js.map +1 -0
  30. package/dist/esm/components/ProgressBar.d.ts +6 -0
  31. package/dist/esm/components/ProgressBar.js +31 -0
  32. package/dist/esm/components/ProgressBar.js.map +1 -0
  33. package/dist/esm/components/RadioGroup.d.ts +3 -0
  34. package/dist/esm/components/RadioGroup.js +18 -0
  35. package/dist/esm/components/RadioGroup.js.map +1 -0
  36. package/dist/esm/components/RangerSlider.d.ts +3 -0
  37. package/dist/esm/components/RangerSlider.js +64 -0
  38. package/dist/esm/components/RangerSlider.js.map +1 -0
  39. package/dist/esm/components/Select.d.ts +3 -0
  40. package/dist/esm/components/Select.js +45 -0
  41. package/dist/esm/components/Select.js.map +1 -0
  42. package/dist/esm/components/Svgs.d.ts +29 -0
  43. package/dist/esm/components/Svgs.js +102 -0
  44. package/dist/esm/components/Svgs.js.map +1 -0
  45. package/dist/esm/components/Tabs.d.ts +3 -0
  46. package/dist/esm/components/Tabs.js +78 -0
  47. package/dist/esm/components/Tabs.js.map +1 -0
  48. package/dist/esm/components/Tag.d.ts +3 -0
  49. package/dist/esm/components/Tag.js +27 -0
  50. package/dist/esm/components/Tag.js.map +1 -0
  51. package/dist/esm/components/TextField.d.ts +3 -0
  52. package/dist/esm/components/TextField.js +18 -0
  53. package/dist/esm/components/TextField.js.map +1 -0
  54. package/dist/esm/components/button/index.d.ts +3 -0
  55. package/dist/esm/components/button/index.js +22 -0
  56. package/dist/esm/components/button/index.js.map +1 -0
  57. package/dist/esm/components/checkbox/index.d.ts +3 -0
  58. package/dist/esm/components/checkbox/index.js +13 -0
  59. package/dist/esm/components/checkbox/index.js.map +1 -0
  60. package/dist/esm/components/icons/index.d.ts +7 -0
  61. package/dist/esm/components/icons/index.js +49 -0
  62. package/dist/esm/components/icons/index.js.map +1 -0
  63. package/dist/esm/components/icons/svgs.d.ts +29 -0
  64. package/dist/esm/components/icons/svgs.js +102 -0
  65. package/dist/esm/components/icons/svgs.js.map +1 -0
  66. package/dist/esm/components/index.d.ts +16 -0
  67. package/dist/esm/components/index.js +17 -0
  68. package/dist/esm/components/index.js.map +1 -0
  69. package/dist/esm/components/textfield/index.d.ts +3 -0
  70. package/dist/esm/components/textfield/index.js +18 -0
  71. package/dist/esm/components/textfield/index.js.map +1 -0
  72. package/dist/esm/helpers/alignments.d.ts +2 -0
  73. package/dist/esm/helpers/alignments.js +14 -0
  74. package/dist/esm/helpers/alignments.js.map +1 -0
  75. package/dist/esm/helpers/borders.d.ts +2 -0
  76. package/dist/esm/helpers/borders.js +18 -0
  77. package/dist/esm/helpers/borders.js.map +1 -0
  78. package/dist/esm/helpers/colors.d.ts +172 -0
  79. package/dist/esm/helpers/colors.js +156 -0
  80. package/dist/esm/helpers/colors.js.map +1 -0
  81. package/dist/esm/helpers/index.d.ts +5 -0
  82. package/dist/esm/helpers/index.js +6 -0
  83. package/dist/esm/helpers/index.js.map +1 -0
  84. package/dist/esm/helpers/radios.d.ts +2 -0
  85. package/dist/esm/helpers/radios.js +24 -0
  86. package/dist/esm/helpers/radios.js.map +1 -0
  87. package/dist/esm/helpers/sizes.d.ts +11 -0
  88. package/dist/esm/helpers/sizes.js +67 -0
  89. package/dist/esm/helpers/sizes.js.map +1 -0
  90. package/dist/esm/index.d.ts +17 -0
  91. package/dist/esm/index.js +18 -0
  92. package/dist/esm/index.js.map +1 -0
  93. package/dist/esm/interfaces/Accordion.d.ts +12 -0
  94. package/dist/esm/interfaces/Accordion.js +2 -0
  95. package/dist/esm/interfaces/Accordion.js.map +1 -0
  96. package/dist/esm/interfaces/Button.d.ts +14 -0
  97. package/dist/esm/interfaces/Button.js +2 -0
  98. package/dist/esm/interfaces/Button.js.map +1 -0
  99. package/dist/esm/interfaces/Card.d.ts +11 -0
  100. package/dist/esm/interfaces/Card.js +2 -0
  101. package/dist/esm/interfaces/Card.js.map +1 -0
  102. package/dist/esm/interfaces/CheckBox.d.ts +19 -0
  103. package/dist/esm/interfaces/CheckBox.js +2 -0
  104. package/dist/esm/interfaces/CheckBox.js.map +1 -0
  105. package/dist/esm/interfaces/DropDown.d.ts +11 -0
  106. package/dist/esm/interfaces/DropDown.js +2 -0
  107. package/dist/esm/interfaces/DropDown.js.map +1 -0
  108. package/dist/esm/interfaces/Icon.d.ts +15 -0
  109. package/dist/esm/interfaces/Icon.js +2 -0
  110. package/dist/esm/interfaces/Icon.js.map +1 -0
  111. package/dist/esm/interfaces/IconButton.d.ts +14 -0
  112. package/dist/esm/interfaces/IconButton.js +2 -0
  113. package/dist/esm/interfaces/IconButton.js.map +1 -0
  114. package/dist/esm/interfaces/Icons.d.ts +15 -0
  115. package/dist/esm/interfaces/Icons.js +2 -0
  116. package/dist/esm/interfaces/Icons.js.map +1 -0
  117. package/dist/esm/interfaces/Modal.d.ts +15 -0
  118. package/dist/esm/interfaces/Modal.js +2 -0
  119. package/dist/esm/interfaces/Modal.js.map +1 -0
  120. package/dist/esm/interfaces/Paper.d.ts +12 -0
  121. package/dist/esm/interfaces/Paper.js +2 -0
  122. package/dist/esm/interfaces/Paper.js.map +1 -0
  123. package/dist/esm/interfaces/ProgressBar.d.ts +17 -0
  124. package/dist/esm/interfaces/ProgressBar.js +2 -0
  125. package/dist/esm/interfaces/ProgressBar.js.map +1 -0
  126. package/dist/esm/interfaces/RadioGroup.d.ts +15 -0
  127. package/dist/esm/interfaces/RadioGroup.js +2 -0
  128. package/dist/esm/interfaces/RadioGroup.js.map +1 -0
  129. package/dist/esm/interfaces/RangerSlider.d.ts +18 -0
  130. package/dist/esm/interfaces/RangerSlider.js +2 -0
  131. package/dist/esm/interfaces/RangerSlider.js.map +1 -0
  132. package/dist/esm/interfaces/Select.d.ts +17 -0
  133. package/dist/esm/interfaces/Select.js +2 -0
  134. package/dist/esm/interfaces/Select.js.map +1 -0
  135. package/dist/esm/interfaces/Tabs.d.ts +18 -0
  136. package/dist/esm/interfaces/Tabs.js +2 -0
  137. package/dist/esm/interfaces/Tabs.js.map +1 -0
  138. package/dist/esm/interfaces/Tag.d.ts +18 -0
  139. package/dist/esm/interfaces/Tag.js +2 -0
  140. package/dist/esm/interfaces/Tag.js.map +1 -0
  141. package/dist/esm/interfaces/TextField.d.ts +40 -0
  142. package/dist/esm/interfaces/TextField.js +2 -0
  143. package/dist/esm/interfaces/TextField.js.map +1 -0
  144. package/dist/esm/interfaces/index.d.ts +17 -0
  145. package/dist/esm/interfaces/index.js +18 -0
  146. package/dist/esm/interfaces/index.js.map +1 -0
  147. package/dist/esm/types/index.d.ts +78 -0
  148. package/dist/esm/types/index.js +10 -0
  149. package/dist/esm/types/index.js.map +1 -0
  150. package/dist/index.css +8363 -0
  151. package/norma-library.tar +0 -0
  152. package/package.json +75 -90
  153. package/postcss.config.js +6 -0
  154. package/src/components/Accordion.tsx +64 -0
  155. package/src/components/Button.tsx +38 -0
  156. package/src/components/Card.tsx +47 -0
  157. package/src/components/CheckBox.tsx +35 -0
  158. package/src/components/DropDown.tsx +38 -0
  159. package/src/components/IconButton.tsx +58 -0
  160. package/src/components/Icons.tsx +87 -0
  161. package/src/components/Modal.tsx +123 -0
  162. package/src/components/Paper.tsx +22 -0
  163. package/src/components/ProgressBar.tsx +62 -0
  164. package/src/components/RadioGroup.tsx +55 -0
  165. package/src/components/RangerSlider.tsx +81 -0
  166. package/src/components/Select.tsx +98 -0
  167. package/src/components/Svgs.tsx +522 -0
  168. package/src/components/Tabs.tsx +140 -0
  169. package/src/components/Tag.tsx +45 -0
  170. package/src/components/TextField.tsx +35 -0
  171. package/src/components/index.ts +16 -0
  172. package/src/helpers/alignments.ts +14 -0
  173. package/src/helpers/borders.ts +18 -0
  174. package/src/helpers/colors.ts +173 -0
  175. package/src/helpers/index.ts +5 -0
  176. package/src/helpers/radios.ts +24 -0
  177. package/src/helpers/sizes.ts +79 -0
  178. package/src/index.css +2 -0
  179. package/src/index.ts +36 -0
  180. package/src/interfaces/Accordion.ts +12 -0
  181. package/src/interfaces/Button.ts +27 -0
  182. package/src/interfaces/Card.ts +11 -0
  183. package/src/interfaces/CheckBox.ts +33 -0
  184. package/src/interfaces/DropDown.ts +14 -0
  185. package/src/interfaces/IconButton.ts +27 -0
  186. package/src/interfaces/Icons.ts +17 -0
  187. package/src/interfaces/Modal.ts +15 -0
  188. package/src/interfaces/Paper.ts +12 -0
  189. package/src/interfaces/ProgressBar.ts +25 -0
  190. package/src/interfaces/RadioGroup.ts +28 -0
  191. package/src/interfaces/RangerSlider.ts +32 -0
  192. package/src/interfaces/Select.ts +17 -0
  193. package/src/interfaces/Tabs.ts +24 -0
  194. package/src/interfaces/Tag.ts +17 -0
  195. package/src/interfaces/TextField.ts +63 -0
  196. package/src/interfaces/index.ts +17 -0
  197. package/src/stories/Accordion.stories.tsx +65 -0
  198. package/src/stories/Button.stories.tsx +99 -0
  199. package/src/stories/Card.stories.tsx +55 -0
  200. package/src/stories/CheckBox.stories.tsx +94 -0
  201. package/src/stories/Colors.stories.mdx +127 -0
  202. package/src/stories/DropDown.stories.tsx +57 -0
  203. package/src/stories/IconButton.stories.tsx +114 -0
  204. package/src/stories/Icons.stories.mdx +27 -0
  205. package/src/stories/Modal.stories.tsx +190 -0
  206. package/src/stories/Paper.stories.tsx +53 -0
  207. package/src/stories/ProgressBar.stories.tsx +139 -0
  208. package/src/stories/RadioGroup.stories.tsx +94 -0
  209. package/src/stories/RangerSlider.stories.tsx +68 -0
  210. package/src/stories/Select.stories.tsx +128 -0
  211. package/src/stories/Tabs.stories.tsx +62 -0
  212. package/src/stories/Tag.stories.tsx +76 -0
  213. package/src/stories/TextField.stories.tsx +445 -0
  214. package/src/styles/custom.css +5 -0
  215. package/src/styles/globals.css +21 -0
  216. package/src/types/index.ts +220 -0
  217. package/tailwind.config.js +58 -0
  218. package/tsconfig.json +32 -0
  219. package/README.md +0 -160
  220. package/dist/index.js +0 -8
Binary file
package/package.json CHANGED
@@ -1,90 +1,75 @@
1
- {
2
- "version": "0.4.2",
3
- "license": "MIT",
4
- "description": "Norma Library. A React UI kit.",
5
- "main": "dist/index.js",
6
- "typings": "dist/index.d.ts",
7
- "private": false,
8
- "files": [
9
- "dist",
10
- "src"
11
- ],
12
- "engines": {
13
- "node": ">=10"
14
- },
15
- "scripts": {
16
- "start": "tsdx watch",
17
- "build": "tsdx build",
18
- "test": "tsdx test --passWithNoTests",
19
- "lint": "tsdx lint",
20
- "size": "size-limit",
21
- "analyze": "size-limit --why",
22
- "format": "prettier --write src//**/**/*.{ts,tsx,css} --config ./.prettierrc",
23
- "prepare": "husky install",
24
- "deploy": "npm run build && npm publish"
25
- },
26
- "peerDependencies": {
27
- "react": ">=16"
28
- },
29
- "husky": {
30
- "hooks": {
31
- "pre-commit": "lint-staged"
32
- }
33
- },
34
- "lint-staged": {
35
- "src/**/**/*.{js,jsx,ts,tsx}": [
36
- "yarn lint",
37
- "yarn format"
38
- ]
39
- },
40
- "prettier": {
41
- "printWidth": 80,
42
- "semi": true,
43
- "singleQuote": true,
44
- "trailingComma": "es5"
45
- },
46
- "name": "norma-library",
47
- "author": "José Roberto Miguel Filho",
48
- "module": "dist/norma.esm.js",
49
- "size-limit": [
50
- {
51
- "path": "dist/norma.cjs.production.min.js",
52
- "limit": "100 KB"
53
- },
54
- {
55
- "path": "dist/norma.esm.js",
56
- "limit": "100 KB"
57
- }
58
- ],
59
- "devDependencies": {
60
- "@size-limit/preset-small-lib": "^8.2.6",
61
- "@types/react": "^18.2.21",
62
- "@types/react-dom": "^18.2.7",
63
- "husky": "^8.0.3",
64
- "react": "^18.2.0",
65
- "react-dom": "^18.2.0",
66
- "size-limit": "^8.2.6",
67
- "tsdx": "^0.14.1",
68
- "tslib": "^2.6.2",
69
- "typescript": "^5.2.2"
70
- },
71
- "dependencies": {
72
- "@emotion/react": "^11.11.1",
73
- "@emotion/styled": "^11.11.0",
74
- "@ladle/react": "^2.17.2",
75
- "@mui/material": "^5.14.6",
76
- "lint-staged": "^14.0.1",
77
- "styled-components": "^6.0.7"
78
- },
79
- "repository": {
80
- "type": "git",
81
- "url": "https://github.com/OlosLive/norma-library"
82
- },
83
- "bugs": {
84
- "url": "https://github.com/OlosLive/norma-library/issues"
85
- },
86
- "publishConfig": {
87
- "access": "public"
88
- },
89
- "homepage": "https://github.com/OlosLive/norma-library"
90
- }
1
+ {
2
+ "name": "norma-library",
3
+ "version": "0.4.5",
4
+ "private": false,
5
+ "description": "Norma Library. A React UI kit.",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "start": "react-scripts start",
9
+ "storybook": "storybook dev -p 6006",
10
+ "build-storybook": "storybook build"
11
+ },
12
+ "author": "José Roberto Miguel Filho",
13
+ "module": "dist/esm/index.js",
14
+ "main": "dist/esm/index.js",
15
+ "license": "ISC",
16
+ "keywords": [],
17
+ "devDependencies": {
18
+ "@babel/preset-env": "^7.22.15",
19
+ "@babel/preset-react": "^7.22.15",
20
+ "@babel/preset-typescript": "^7.22.15",
21
+ "@storybook/addon-essentials": "^7.5.0-alpha.1",
22
+ "@storybook/addon-interactions": "^7.5.0-alpha.1",
23
+ "@storybook/addon-links": "^7.5.0-alpha.1",
24
+ "@storybook/addon-onboarding": "^1.0.8",
25
+ "@storybook/addon-styling": "^1.3.7",
26
+ "@storybook/blocks": "^7.4.1",
27
+ "@storybook/react": "^7.4.0",
28
+ "@storybook/react-webpack5": "^7.5.0-alpha.1",
29
+ "@storybook/testing-library": "^0.2.1-next.0",
30
+ "@types/react": "^18.2.21",
31
+ "autoprefixer": "^10.4.15",
32
+ "postcss": "^8.4.29",
33
+ "react": "^18.2.0",
34
+ "react-dom": "^18.2.0",
35
+ "storybook": "^7.5.0-alpha.1",
36
+ "storybook-addon-dark-mode-toggle": "^0.0.6",
37
+ "storybook-dark-mode": "^3.0.1",
38
+ "tailwindcss": "^3.3.3",
39
+ "typescript": "^5.2.2"
40
+ },
41
+ "dependencies": {
42
+ "@emotion/react": "^11.11.1",
43
+ "@emotion/styled": "^11.11.0",
44
+ "@material-tailwind/react": "^2.1.1",
45
+ "@mui/icons-material": "^5.14.8",
46
+ "@mui/material": "^5.14.8",
47
+ "react-i18next": "^13.2.2",
48
+ "react-scripts": "^5.0.1",
49
+ "tslib": "^2.6.2"
50
+ },
51
+ "peerDependencies": {
52
+ "react": "^17.0.0 || ^18.0.0",
53
+ "react-dom": "^17.0.0 || ^18.0.0"
54
+ },
55
+ "browserslist": {
56
+ "production": [
57
+ ">0.2%",
58
+ "not dead",
59
+ "not op_mini all"
60
+ ],
61
+ "development": [
62
+ "last 1 chrome version",
63
+ "last 1 firefox version",
64
+ "last 1 safari version"
65
+ ]
66
+ },
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "https://github.com/OlosLive/norma-library"
70
+ },
71
+ "bugs": {
72
+ "url": "https://github.com/OlosLive/norma-library/issues"
73
+ },
74
+ "homepage": "https://github.com/OlosLive/norma-library"
75
+ }
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ }
@@ -0,0 +1,64 @@
1
+ import React, { useMemo } from "react";
2
+ import {
3
+ AccordionDetails,
4
+ AccordionSummary,
5
+ Accordion as MuiAccordion,
6
+ ThemeProvider,
7
+ Typography,
8
+ useMediaQuery,
9
+ } from "@mui/material";
10
+ import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
11
+ import { AccordionBaseProps } from "../interfaces";
12
+ import { themes } from "../helpers";
13
+ import { styled } from "@mui/material/styles";
14
+
15
+ const AccordionStyled = styled(MuiAccordion)({});
16
+
17
+ export const Accordion = ({
18
+ data = [],
19
+ defaultExpanded = false,
20
+ ...props
21
+ }: AccordionBaseProps) => {
22
+ const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)");
23
+ const [expanded, setExpanded] = React.useState<boolean | string>(
24
+ defaultExpanded
25
+ );
26
+
27
+ const handleChange =
28
+ (panel: string) => (event: React.SyntheticEvent, isExpanded: boolean) => {
29
+ console.log("Event ==> ", event);
30
+ setExpanded(isExpanded ? panel : false);
31
+ };
32
+
33
+ const theme = useMemo(
34
+ () => (prefersDarkMode ? themes.light : themes.dark),
35
+ [prefersDarkMode]
36
+ );
37
+
38
+ return (
39
+ <ThemeProvider theme={theme}>
40
+ <>
41
+ {data &&
42
+ data.map((item, key) => (
43
+ <AccordionStyled
44
+ expanded={expanded === item.id}
45
+ onChange={handleChange(item.id)}
46
+ key={key}
47
+ {...props}
48
+ >
49
+ <AccordionSummary
50
+ expandIcon={<ExpandMoreIcon />}
51
+ aria-controls={`panel-${key}-content`}
52
+ id={`panel-${key}-header`}
53
+ >
54
+ <Typography sx={{ width: "66%", flexShrink: 0 }}>
55
+ {item.label}
56
+ </Typography>
57
+ </AccordionSummary>
58
+ <AccordionDetails>{item.children}</AccordionDetails>
59
+ </AccordionStyled>
60
+ ))}
61
+ </>
62
+ </ThemeProvider>
63
+ );
64
+ };
@@ -0,0 +1,38 @@
1
+ import React, { useMemo } from "react";
2
+ import {
3
+ Button as MuiButton,
4
+ ThemeProvider,
5
+ useMediaQuery,
6
+ } from "@mui/material";
7
+ import { ButtonBaseProps } from "../interfaces";
8
+ import { themes } from "../helpers";
9
+ import { styled } from "@mui/material/styles";
10
+
11
+ const ButtonStyled = styled(MuiButton)({
12
+ textTransform: "none",
13
+ "& .MuiButton-sizeLarge": {
14
+ height: "75px",
15
+ backgroundColor: "red",
16
+ },
17
+ });
18
+
19
+ export const Button = ({ label, children, ...props }: ButtonBaseProps) => {
20
+ const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)");
21
+ const theme = useMemo(
22
+ () => (prefersDarkMode ? themes.dark : themes.light),
23
+ [prefersDarkMode]
24
+ );
25
+
26
+ return (
27
+ <ThemeProvider theme={theme}>
28
+ <ButtonStyled
29
+ {...props}
30
+ sx={{
31
+ color: props.variant === "contained" ? "#FFFF" : props.color,
32
+ }}
33
+ >
34
+ {label ? label : children}
35
+ </ButtonStyled>
36
+ </ThemeProvider>
37
+ );
38
+ };
@@ -0,0 +1,47 @@
1
+ import React, { useMemo } from "react";
2
+ import { Card as MuiCard, ThemeProvider, useMediaQuery } from "@mui/material";
3
+ import { CardBaseProps } from "../interfaces";
4
+ import { palette, themes } from "../helpers";
5
+ import { styled } from "@mui/material/styles";
6
+ import { ColorVariant } from "@/types";
7
+
8
+ const colorMap: Record<ColorVariant, string> = {
9
+ inherit: palette.inherit,
10
+ primary: palette.primary,
11
+ secondary: palette.secondary,
12
+ error: palette.error,
13
+ warning: palette.warning,
14
+ info: palette.info,
15
+ success: palette.success,
16
+ };
17
+
18
+ const CardStyled = styled(MuiCard)<{
19
+ borderColor?: ColorVariant;
20
+ }>(({ borderColor }) => ({
21
+ padding: 16,
22
+ borderRadius: 5,
23
+ boxShadow: "0px 2px 8px #00000053",
24
+ borderLeft: borderColor ? `7px solid ${colorMap[borderColor]}` : "none",
25
+ }));
26
+
27
+ export const Card = ({
28
+ children,
29
+ border,
30
+ color = "inherit",
31
+ ...props
32
+ }: CardBaseProps & { border?: boolean; color?: ColorVariant }) => {
33
+ const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)");
34
+
35
+ const theme = useMemo(
36
+ () => (prefersDarkMode ? themes.light : themes.dark),
37
+ [prefersDarkMode]
38
+ );
39
+
40
+ return (
41
+ <ThemeProvider theme={theme}>
42
+ <CardStyled borderColor={border ? color : undefined} {...props}>
43
+ {children}
44
+ </CardStyled>
45
+ </ThemeProvider>
46
+ );
47
+ };
@@ -0,0 +1,35 @@
1
+ import React, { useMemo } from "react";
2
+ import {
3
+ FormControlLabel,
4
+ Checkbox as MuiCheckbox,
5
+ ThemeProvider,
6
+ useMediaQuery,
7
+ } from "@mui/material";
8
+
9
+ import { CheckBoxBaseProps } from "../interfaces";
10
+
11
+ import { themes } from "../helpers";
12
+ import { styled } from "@mui/material/styles";
13
+
14
+ const CheckBoxStyled = styled(MuiCheckbox)({});
15
+
16
+ export const CheckBox = ({ ...props }: CheckBoxBaseProps) => {
17
+ const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)");
18
+ const theme = useMemo(
19
+ () => (prefersDarkMode ? themes.light : themes.dark),
20
+ [prefersDarkMode]
21
+ );
22
+
23
+ return (
24
+ <ThemeProvider theme={theme}>
25
+ {props.label ? (
26
+ <FormControlLabel
27
+ control={<CheckBoxStyled {...props} />}
28
+ label={props.label}
29
+ />
30
+ ) : (
31
+ <CheckBoxStyled {...props} />
32
+ )}
33
+ </ThemeProvider>
34
+ );
35
+ };
@@ -0,0 +1,38 @@
1
+ import React, { useMemo } from "react";
2
+ import {
3
+ Menu as MuiDropDown,
4
+ ThemeProvider,
5
+ useMediaQuery,
6
+ } from "@mui/material";
7
+ import { DropDownBaseProps } from "../interfaces";
8
+ import { themes } from "../helpers";
9
+ import { styled } from "@mui/material/styles";
10
+
11
+ const DropDownStyled = styled(MuiDropDown)({});
12
+
13
+ export const DropDown = ({ open, children, ...props }: DropDownBaseProps) => {
14
+ const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)");
15
+ const theme = useMemo(
16
+ () => (prefersDarkMode ? themes.light : themes.dark),
17
+ [prefersDarkMode]
18
+ );
19
+
20
+ return (
21
+ <ThemeProvider theme={theme}>
22
+ <>
23
+ <DropDownStyled
24
+ open
25
+ id="basic-menu"
26
+ anchorEl={props.anchorEl}
27
+ onClose={props.onClose}
28
+ MenuListProps={{
29
+ "aria-labelledby": "basic-button",
30
+ }}
31
+ {...props}
32
+ >
33
+ {children}
34
+ </DropDownStyled>
35
+ </>
36
+ </ThemeProvider>
37
+ );
38
+ };
@@ -0,0 +1,58 @@
1
+ import React, { useMemo } from "react";
2
+ import {
3
+ IconButton as MuiIconButton,
4
+ ThemeProvider,
5
+ useMediaQuery,
6
+ } from "@mui/material";
7
+ import { IconButtonBaseProps } from "../interfaces";
8
+ import { palette, themes } from "../helpers";
9
+ import { styled } from "@mui/material/styles";
10
+ import { ButtonVariant, ColorVariant } from "@/types";
11
+
12
+ const colorMap: Record<ColorVariant, string> = {
13
+ inherit: palette.inherit,
14
+ primary: palette.primary,
15
+ secondary: palette.secondary,
16
+ error: palette.error,
17
+ warning: palette.warning,
18
+ info: palette.info,
19
+ success: palette.success,
20
+ };
21
+
22
+ const IconButtonStyled = styled(MuiIconButton)<{
23
+ circle: boolean;
24
+ color: ColorVariant;
25
+ variant: ButtonVariant;
26
+ cursor: string;
27
+ }>(({ circle, color, variant, cursor }) => ({
28
+ borderRadius: circle === true ? 99 : 5,
29
+ border: variant === "outlined" ? `1px solid ${colorMap[color]}` : "none",
30
+ backgroundColor: variant === "contained" ? `${colorMap[color]}` : "none",
31
+ cursor: cursor,
32
+ }));
33
+
34
+ export const IconButton = ({
35
+ circle = false,
36
+ children,
37
+ ...props
38
+ }: IconButtonBaseProps) => {
39
+ const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)");
40
+ const theme = useMemo(
41
+ () => (prefersDarkMode ? themes.dark : themes.light),
42
+ [prefersDarkMode]
43
+ );
44
+
45
+ return (
46
+ <ThemeProvider theme={theme}>
47
+ <IconButtonStyled
48
+ circle={circle}
49
+ color="primary"
50
+ variant="text"
51
+ cursor="default"
52
+ {...props}
53
+ >
54
+ {children}
55
+ </IconButtonStyled>
56
+ </ThemeProvider>
57
+ );
58
+ };
@@ -0,0 +1,87 @@
1
+ import React, { FunctionComponent } from "react";
2
+ import { iconsSVG } from "./Svgs";
3
+ import { IconColors, IconScale } from "../types";
4
+ import { IconsProps, SvgProps } from "../interfaces/Icons";
5
+ import styled from "@emotion/styled";
6
+ import { palette } from "../helpers";
7
+
8
+ export const Svg = styled.svg<SvgProps>(
9
+ {
10
+ shapeRendering: "inherit",
11
+ transform: "translate3d(0,0,0)",
12
+ },
13
+ ({ inline }) => (inline ? { display: "inline-block" } : { display: "block" })
14
+ );
15
+
16
+ const scaleSize: Record<IconScale, number> = {
17
+ xsmall: 14,
18
+ small: 20,
19
+ medium: 24,
20
+ large: 28,
21
+ xlarge: 32,
22
+ "2xlarge": 36,
23
+ "3xlarge": 40,
24
+ };
25
+
26
+ // Definindo um objeto com as cores de preenchimento e traço com base no MUI
27
+ const colors: Record<IconColors, string> = {
28
+ inherit: palette.inherit,
29
+ primary: palette.primary,
30
+ secondary: palette.secondary,
31
+ error: palette.error,
32
+ info: palette.info,
33
+ success: palette.success,
34
+ warning: palette.warning,
35
+ white: palette.white,
36
+ black: palette.black,
37
+ };
38
+
39
+ export const Icons: FunctionComponent<IconsProps> = ({
40
+ icon,
41
+ scale,
42
+ useSymbol,
43
+ color = "inherit",
44
+ ...props
45
+ }: IconsProps) => {
46
+ let width = 24;
47
+ let height = 24;
48
+ if (scale) {
49
+ width = scaleSize[scale];
50
+ height = scaleSize[scale];
51
+ }
52
+
53
+ // Obtém a cor de preenchimento e traço com base no valor da prop 'color'
54
+ const fill = colors[color];
55
+ const stroke = colors[color];
56
+
57
+ const Svg = styled.svg`
58
+ display: inline-block;
59
+ shape-rendering: inherit;
60
+ vertical-align: middle;
61
+ fill: ${fill};
62
+ path {
63
+ stroke: ${stroke};
64
+ }
65
+ circle {
66
+ stroke: ${stroke};
67
+ }
68
+ rect {
69
+ stroke: ${stroke};
70
+ }
71
+ `;
72
+
73
+ return (
74
+ <Svg
75
+ viewBox="0 0 64 64"
76
+ width={`${width}px`}
77
+ height={`${height}px`}
78
+ {...props}
79
+ >
80
+ {useSymbol ? (
81
+ <use xlinkHref={`#icon--${icon}`} fill={fill} stroke={stroke} />
82
+ ) : (
83
+ React.cloneElement(iconsSVG[icon], { fill, stroke })
84
+ )}
85
+ </Svg>
86
+ );
87
+ };
@@ -0,0 +1,123 @@
1
+ import React, { useMemo } from "react";
2
+ import {
3
+ Modal as MuiModal,
4
+ Paper,
5
+ Box,
6
+ ThemeProvider,
7
+ useMediaQuery,
8
+ } from "@mui/material";
9
+ import { ModalBaseProps } from "../interfaces";
10
+ import { themes } from "../helpers";
11
+ import { styled } from "@mui/material/styles";
12
+ import { IconButton } from "./IconButton";
13
+ import { Button } from "./Button";
14
+
15
+ const ModalStyled = styled(MuiModal)({});
16
+
17
+ const ModalContentStyled = styled(Paper)`
18
+ border: 1px solid #00000033;
19
+ border-radius: 4px;
20
+ position: absolute;
21
+ top: 50%;
22
+ left: 50%;
23
+ width: 421px;
24
+ transform: translate(-50%, -50%);
25
+ bgcolor: background.paper;
26
+ box-shadow: 24px;
27
+ padding: 16px;
28
+ `;
29
+
30
+ const ModalHeaderStyled = styled(Box)`
31
+ text-align: left;
32
+ border-bottom: 1px solid #00000033;
33
+ margin: 0;
34
+ top: -5px;
35
+ position: relative;
36
+ padding: 0 5px;
37
+ display: flex;
38
+
39
+ & h2 {
40
+ font: normal normal 600 18px/30px Source Sans Pro;
41
+ color: #292929;
42
+ }
43
+ `;
44
+
45
+ const ModalFooterStyled = styled(Box)`
46
+ text-align: left;
47
+ border-top: 1px solid #00000033;
48
+ margin-top: 16px;
49
+ bottom: -5px;
50
+ position: relative;
51
+ padding: 10px 5px 5px;
52
+ display: flex;
53
+ justify-content: end;
54
+ `;
55
+
56
+ export function Close() {
57
+ return (
58
+ <svg
59
+ fill="#808080"
60
+ viewBox="0 0 24 24"
61
+ xmlns="http://www.w3.org/2000/svg"
62
+ aria-hidden="true"
63
+ height="24"
64
+ width="24"
65
+ >
66
+ <path
67
+ clipRule="evenodd"
68
+ fillRule="evenodd"
69
+ d="M5.47 5.47a.75.75 0 011.06 0L12 10.94l5.47-5.47a.75.75 0 111.06 1.06L13.06 12l5.47 5.47a.75.75 0 11-1.06 1.06L12 13.06l-5.47 5.47a.75.75 0 01-1.06-1.06L10.94 12 5.47 6.53a.75.75 0 010-1.06z"
70
+ />
71
+ </svg>
72
+ );
73
+ }
74
+
75
+ export const Modal = ({ open, children, ...props }: ModalBaseProps) => {
76
+ const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)");
77
+ const theme = useMemo(
78
+ () => (prefersDarkMode ? themes.light : themes.dark),
79
+ [prefersDarkMode]
80
+ );
81
+
82
+ return (
83
+ <ThemeProvider theme={theme}>
84
+ <ModalStyled open {...props}>
85
+ <ModalContentStyled>
86
+ {props.title && (
87
+ <ModalHeaderStyled>
88
+ <>
89
+ <h2>{props.title}</h2>
90
+ <IconButton
91
+ onClick={props.onClose}
92
+ size="small"
93
+ color="inherit"
94
+ variant="text"
95
+ cursor="pointer"
96
+ sx={{ position: "absolute", right: 0, top: 5 }}
97
+ >
98
+ <Close />
99
+ </IconButton>
100
+ </>
101
+ </ModalHeaderStyled>
102
+ )}
103
+ {children}
104
+ {props.action && (
105
+ <ModalFooterStyled>
106
+ {props.action.map((item, key) => (
107
+ <Button
108
+ color={item.color}
109
+ variant={item.variant}
110
+ key={key}
111
+ onClick={item.action}
112
+ style={{ marginLeft: 10 }}
113
+ >
114
+ {item.label}
115
+ </Button>
116
+ ))}
117
+ </ModalFooterStyled>
118
+ )}
119
+ </ModalContentStyled>
120
+ </ModalStyled>
121
+ </ThemeProvider>
122
+ );
123
+ };