@ahmadinia/ui-kit 1.0.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.
- package/dist/components/RayButton.d.ts +2 -0
- package/dist/components/RayButton.js +5 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/theme/componentOverrides.d.ts +2 -0
- package/dist/theme/componentOverrides.js +19 -0
- package/dist/theme/palette.d.ts +2 -0
- package/dist/theme/palette.js +23 -0
- package/dist/theme/theme.d.ts +1 -0
- package/dist/theme/theme.js +9 -0
- package/dist/theme/themeModeContext.d.ts +14 -0
- package/dist/theme/themeModeContext.js +43 -0
- package/dist/theme/typography.d.ts +2 -0
- package/dist/theme/typography.js +8 -0
- package/package.json +22 -0
- package/src/components/RayButton.tsx +6 -0
- package/src/index.ts +3 -0
- package/src/theme/componentOverrides.ts +21 -0
- package/src/theme/palette.ts +25 -0
- package/src/theme/theme.ts +10 -0
- package/src/theme/themeModeContext.tsx +77 -0
- package/src/theme/typography.ts +10 -0
- package/tsconfig.json +16 -0
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const componentOverrides = {
|
|
2
|
+
MuiButton: {
|
|
3
|
+
defaultProps: {
|
|
4
|
+
size: "small",
|
|
5
|
+
variant: "contained"
|
|
6
|
+
}
|
|
7
|
+
},
|
|
8
|
+
MuiTextField: {
|
|
9
|
+
defaultProps: {
|
|
10
|
+
size: "small",
|
|
11
|
+
fullWidth: true
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
MuiSvgIcon: {
|
|
15
|
+
defaultProps: {
|
|
16
|
+
fontSize: "small"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const palette = {
|
|
2
|
+
primary: {
|
|
3
|
+
main: "#067af5",
|
|
4
|
+
light: "#388af7",
|
|
5
|
+
dark: "#04356d",
|
|
6
|
+
contrastText: "#fff",
|
|
7
|
+
},
|
|
8
|
+
secondary: {
|
|
9
|
+
main: "#9c27b0",
|
|
10
|
+
light: "#d05ce3",
|
|
11
|
+
dark: "#6a0080",
|
|
12
|
+
contrastText: "#fff"
|
|
13
|
+
},
|
|
14
|
+
success: {
|
|
15
|
+
main: "#95e7a7",
|
|
16
|
+
light: "#0af31d",
|
|
17
|
+
dark: "#046d5f",
|
|
18
|
+
contrastText: "#fff",
|
|
19
|
+
},
|
|
20
|
+
background: {
|
|
21
|
+
default: undefined
|
|
22
|
+
},
|
|
23
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const appTheme: import("@mui/material/styles").Theme;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createTheme } from "@mui/material/styles";
|
|
2
|
+
import { palette } from "./palette";
|
|
3
|
+
import { typography } from "./typography";
|
|
4
|
+
import { componentOverrides } from "./componentOverrides";
|
|
5
|
+
export const appTheme = createTheme({
|
|
6
|
+
palette,
|
|
7
|
+
typography,
|
|
8
|
+
components: componentOverrides
|
|
9
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Theme } from "@mui/material/styles";
|
|
3
|
+
type ThemeMode = "light" | "dark";
|
|
4
|
+
interface ThemeModeContextValue {
|
|
5
|
+
mode: ThemeMode;
|
|
6
|
+
setMode: (mode: ThemeMode) => void;
|
|
7
|
+
toggleMode: () => void;
|
|
8
|
+
theme: Theme;
|
|
9
|
+
}
|
|
10
|
+
export declare const ThemeModeProvider: React.FC<{
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const useThemeMode: () => ThemeModeContextValue;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useMemo, useState } from "react";
|
|
3
|
+
import { ThemeProvider, createTheme } from "@mui/material/styles";
|
|
4
|
+
import { appTheme } from "./theme";
|
|
5
|
+
import { CssBaseline } from "@mui/material";
|
|
6
|
+
const ThemeModeContext = createContext(undefined);
|
|
7
|
+
export const ThemeModeProvider = ({ children }) => {
|
|
8
|
+
const [mode, setMode] = useState("light");
|
|
9
|
+
const lightPalette = {
|
|
10
|
+
...appTheme.palette,
|
|
11
|
+
background: {
|
|
12
|
+
default: "#f5f7fa"
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const darkPalette = {
|
|
16
|
+
...appTheme.palette,
|
|
17
|
+
background: {
|
|
18
|
+
default: "#1d293f"
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const theme = useMemo(() => createTheme({
|
|
22
|
+
...appTheme,
|
|
23
|
+
palette: {
|
|
24
|
+
...(mode === "light" ? lightPalette : darkPalette),
|
|
25
|
+
mode
|
|
26
|
+
}
|
|
27
|
+
}), [mode]);
|
|
28
|
+
const toggleMode = () => setMode((prev) => (prev === "light" ? "dark" : "light"));
|
|
29
|
+
const value = {
|
|
30
|
+
mode,
|
|
31
|
+
setMode,
|
|
32
|
+
toggleMode,
|
|
33
|
+
theme
|
|
34
|
+
};
|
|
35
|
+
return (_jsx(ThemeModeContext.Provider, { value: value, children: _jsxs(ThemeProvider, { theme: theme, children: [_jsx(CssBaseline, {}), children] }) }));
|
|
36
|
+
};
|
|
37
|
+
export const useThemeMode = () => {
|
|
38
|
+
const ctx = useContext(ThemeModeContext);
|
|
39
|
+
if (!ctx) {
|
|
40
|
+
throw new Error("useThemeMode must be used within ThemeModeProvider");
|
|
41
|
+
}
|
|
42
|
+
return ctx;
|
|
43
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const typography = {
|
|
2
|
+
fontFamily: "'Inter', sans-serif",
|
|
3
|
+
h1: { fontSize: "2rem", fontWeight: 700 },
|
|
4
|
+
h2: { fontSize: "1.75rem", fontWeight: 700 },
|
|
5
|
+
h3: { fontSize: "1.5rem", fontWeight: 700 },
|
|
6
|
+
body1: { fontSize: "1rem" },
|
|
7
|
+
body2: { fontSize: "0.875rem" }
|
|
8
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ahmadinia/ui-kit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"types": "dist/index.d.ts",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "npx tsc -p tsconfig.json"
|
|
8
|
+
},
|
|
9
|
+
"peerDependencies": {
|
|
10
|
+
"react": "^19",
|
|
11
|
+
"react-dom": "^19",
|
|
12
|
+
"@types/react": "^19",
|
|
13
|
+
"@types/react-dom": "^19",
|
|
14
|
+
"@mui/icons-material": "^7",
|
|
15
|
+
"@mui/material": "^7",
|
|
16
|
+
"@mui/x-data-grid": "^8",
|
|
17
|
+
"@mui/x-data-grid-premium": "^8"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"typescript": "~5.9.3"
|
|
21
|
+
}
|
|
22
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Components } from "@mui/material/styles";
|
|
2
|
+
|
|
3
|
+
export const componentOverrides: Components = {
|
|
4
|
+
MuiButton: {
|
|
5
|
+
defaultProps: {
|
|
6
|
+
size: "small",
|
|
7
|
+
variant: "contained"
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
MuiTextField: {
|
|
11
|
+
defaultProps: {
|
|
12
|
+
size: "small",
|
|
13
|
+
fullWidth: true
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
MuiSvgIcon:{
|
|
17
|
+
defaultProps: {
|
|
18
|
+
fontSize: "small"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { PaletteOptions } from "@mui/material/styles";
|
|
2
|
+
|
|
3
|
+
export const palette: PaletteOptions = {
|
|
4
|
+
primary: {
|
|
5
|
+
main: "#067af5",
|
|
6
|
+
light: "#388af7",
|
|
7
|
+
dark: "#04356d",
|
|
8
|
+
contrastText: "#fff",
|
|
9
|
+
},
|
|
10
|
+
secondary: {
|
|
11
|
+
main: "#9c27b0",
|
|
12
|
+
light: "#d05ce3",
|
|
13
|
+
dark: "#6a0080",
|
|
14
|
+
contrastText: "#fff"
|
|
15
|
+
},
|
|
16
|
+
success: {
|
|
17
|
+
main: "#95e7a7",
|
|
18
|
+
light: "#0af31d",
|
|
19
|
+
dark: "#046d5f",
|
|
20
|
+
contrastText: "#fff",
|
|
21
|
+
},
|
|
22
|
+
background: {
|
|
23
|
+
default: undefined
|
|
24
|
+
},
|
|
25
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createTheme } from "@mui/material/styles";
|
|
2
|
+
import { palette } from "./palette";
|
|
3
|
+
import { typography } from "./typography";
|
|
4
|
+
import { componentOverrides } from "./componentOverrides";
|
|
5
|
+
|
|
6
|
+
export const appTheme = createTheme({
|
|
7
|
+
palette,
|
|
8
|
+
typography,
|
|
9
|
+
components: componentOverrides
|
|
10
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import React, { createContext, useContext, useMemo, useState } from "react";
|
|
2
|
+
import { ThemeProvider, createTheme, Theme } from "@mui/material/styles";
|
|
3
|
+
import { appTheme } from "./theme";
|
|
4
|
+
import { CssBaseline } from "@mui/material";
|
|
5
|
+
|
|
6
|
+
type ThemeMode = "light" | "dark";
|
|
7
|
+
|
|
8
|
+
interface ThemeModeContextValue {
|
|
9
|
+
mode: ThemeMode;
|
|
10
|
+
setMode: (mode: ThemeMode) => void;
|
|
11
|
+
toggleMode: () => void;
|
|
12
|
+
theme: Theme;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
const ThemeModeContext = createContext<ThemeModeContextValue | undefined>(
|
|
17
|
+
undefined
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export const ThemeModeProvider: React.FC<{ children: React.ReactNode }> = ({
|
|
21
|
+
children
|
|
22
|
+
}) => {
|
|
23
|
+
const [mode, setMode] = useState<ThemeMode>("light");
|
|
24
|
+
const lightPalette = {
|
|
25
|
+
...appTheme.palette,
|
|
26
|
+
background: {
|
|
27
|
+
default: "#f5f7fa"
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const darkPalette = {
|
|
32
|
+
...appTheme.palette,
|
|
33
|
+
background: {
|
|
34
|
+
default: "#1d293f"
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const theme = useMemo(
|
|
38
|
+
() =>
|
|
39
|
+
createTheme({
|
|
40
|
+
...appTheme,
|
|
41
|
+
palette: {
|
|
42
|
+
...(mode === "light" ? lightPalette : darkPalette),
|
|
43
|
+
mode
|
|
44
|
+
}
|
|
45
|
+
}),
|
|
46
|
+
[mode]
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
const toggleMode = () =>
|
|
50
|
+
setMode((prev) => (prev === "light" ? "dark" : "light"));
|
|
51
|
+
|
|
52
|
+
const value: ThemeModeContextValue = {
|
|
53
|
+
mode,
|
|
54
|
+
setMode,
|
|
55
|
+
toggleMode,
|
|
56
|
+
theme
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<ThemeModeContext.Provider value={value}>
|
|
61
|
+
<ThemeProvider theme={theme}>
|
|
62
|
+
<CssBaseline />
|
|
63
|
+
{children}
|
|
64
|
+
</ThemeProvider>
|
|
65
|
+
</ThemeModeContext.Provider>
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
export const useThemeMode = (): ThemeModeContextValue => {
|
|
71
|
+
|
|
72
|
+
const ctx = useContext(ThemeModeContext);
|
|
73
|
+
if (!ctx) {
|
|
74
|
+
throw new Error("useThemeMode must be used within ThemeModeProvider");
|
|
75
|
+
}
|
|
76
|
+
return ctx;
|
|
77
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TypographyVariantsOptions } from "@mui/material";
|
|
2
|
+
|
|
3
|
+
export const typography: TypographyVariantsOptions = {
|
|
4
|
+
fontFamily: "'Inter', sans-serif",
|
|
5
|
+
h1: { fontSize: "2rem", fontWeight: 700 },
|
|
6
|
+
h2: { fontSize: "1.75rem", fontWeight: 700 },
|
|
7
|
+
h3: { fontSize: "1.5rem", fontWeight: 700 },
|
|
8
|
+
body1: { fontSize: "1rem" },
|
|
9
|
+
body2: { fontSize: "0.875rem" }
|
|
10
|
+
};
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"lib": ["DOM", "ES2022"],
|
|
6
|
+
"jsx": "react-jsx",
|
|
7
|
+
"strict": true,
|
|
8
|
+
"moduleResolution": "Node",
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"forceConsistentCasingInFileNames": true,
|
|
11
|
+
"skipLibCheck": true,
|
|
12
|
+
"outDir": "dist",
|
|
13
|
+
"declaration": true
|
|
14
|
+
},
|
|
15
|
+
"include": ["src"]
|
|
16
|
+
}
|