@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.
@@ -0,0 +1,2 @@
1
+ import { ButtonProps } from '@mui/material';
2
+ export declare function RayButton(props: ButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Button } from '@mui/material';
3
+ export function RayButton(props) {
4
+ return _jsx(Button, { ...props });
5
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./theme/theme";
2
+ export * from "./theme/themeModeContext";
3
+ export * from "./components/RayButton";
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./theme/theme";
2
+ export * from "./theme/themeModeContext";
3
+ export * from "./components/RayButton";
@@ -0,0 +1,2 @@
1
+ import { Components } from "@mui/material/styles";
2
+ export declare const componentOverrides: Components;
@@ -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,2 @@
1
+ import { PaletteOptions } from "@mui/material/styles";
2
+ export declare const palette: PaletteOptions;
@@ -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,2 @@
1
+ import { TypographyVariantsOptions } from "@mui/material";
2
+ export declare const typography: TypographyVariantsOptions;
@@ -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
+ }
@@ -0,0 +1,6 @@
1
+ import { Button, ButtonProps } from '@mui/material';
2
+
3
+ export function RayButton(props: ButtonProps) {
4
+
5
+ return <Button {...props} />;
6
+ }
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./theme/theme";
2
+ export * from "./theme/themeModeContext";
3
+ export * from "./components/RayButton";
@@ -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
+ }