create-react-scaffold-cli 0.1.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 (72) hide show
  1. package/bin/index.js +34 -0
  2. package/package.json +15 -0
  3. package/scripts/createProject.js +30 -0
  4. package/templates/base/.env +1 -0
  5. package/templates/base/.husky/pre-commit +1 -0
  6. package/templates/base/.husky/pre-push +0 -0
  7. package/templates/base/.prettierrc +8 -0
  8. package/templates/base/.vscode/extensions.json +8 -0
  9. package/templates/base/.vscode/settings.json +16 -0
  10. package/templates/base/eslint.config.js +48 -0
  11. package/templates/base/index.html +16 -0
  12. package/templates/base/jsconfig.json +7 -0
  13. package/templates/base/package.json +64 -0
  14. package/templates/base/postcss.config.mjs +7 -0
  15. package/templates/base/readme.md +97 -0
  16. package/templates/base/src/app/App.jsx +13 -0
  17. package/templates/base/src/app/Router.jsx +4 -0
  18. package/templates/base/src/app/app_readme.md +74 -0
  19. package/templates/base/src/app/index.css +1 -0
  20. package/templates/base/src/app/main.jsx +10 -0
  21. package/templates/base/src/app/middlewares/index.js +0 -0
  22. package/templates/base/src/app/providers/QueryProvider.jsx +75 -0
  23. package/templates/base/src/app/providers/index.js +1 -0
  24. package/templates/base/src/features/features_readme.md +102 -0
  25. package/templates/base/src/features/index.js +0 -0
  26. package/templates/base/src/features/sample/components/index.js +0 -0
  27. package/templates/base/src/features/sample/constants/index.js +0 -0
  28. package/templates/base/src/features/sample/constants/sample.constants.js +0 -0
  29. package/templates/base/src/features/sample/hooks/index.js +0 -0
  30. package/templates/base/src/features/sample/pages/index.js +0 -0
  31. package/templates/base/src/features/sample/sample.assets.js +0 -0
  32. package/templates/base/src/features/sample/sample.context.js +0 -0
  33. package/templates/base/src/features/sample/sample.navigations.js +0 -0
  34. package/templates/base/src/features/sample/sample.queryKeys.js +0 -0
  35. package/templates/base/src/features/sample/sample.routes.jsx +0 -0
  36. package/templates/base/src/shared/constants/app.constants.js +4 -0
  37. package/templates/base/src/shared/constants/assets.constants.js +0 -0
  38. package/templates/base/src/shared/constants/index.js +0 -0
  39. package/templates/base/src/shared/contexts/index.js +0 -0
  40. package/templates/base/src/shared/hooks/index.js +3 -0
  41. package/templates/base/src/shared/hooks/useBooleanState.js +19 -0
  42. package/templates/base/src/shared/hooks/useDebounce.js +17 -0
  43. package/templates/base/src/shared/hooks/useToggleState.js +11 -0
  44. package/templates/base/src/shared/layouts/index.js +0 -0
  45. package/templates/base/src/shared/libs/axios.js +6 -0
  46. package/templates/base/src/shared/libs/cn.js +7 -0
  47. package/templates/base/src/shared/libs/index.js +2 -0
  48. package/templates/base/src/shared/shared_readme.md +98 -0
  49. package/templates/base/src/shared/theme/index.js +1 -0
  50. package/templates/base/src/shared/theme/theme.js +2138 -0
  51. package/templates/base/src/shared/ui/Box.jsx +200 -0
  52. package/templates/base/src/shared/ui/Button.jsx +150 -0
  53. package/templates/base/src/shared/ui/Checkbox.jsx +112 -0
  54. package/templates/base/src/shared/ui/DropdownMenu.jsx +152 -0
  55. package/templates/base/src/shared/ui/Flex.jsx +151 -0
  56. package/templates/base/src/shared/ui/FlexItem.jsx +96 -0
  57. package/templates/base/src/shared/ui/FormField.jsx +184 -0
  58. package/templates/base/src/shared/ui/Grid.jsx +151 -0
  59. package/templates/base/src/shared/ui/GridItem.jsx +95 -0
  60. package/templates/base/src/shared/ui/Modal.jsx +43 -0
  61. package/templates/base/src/shared/ui/Scrollable.jsx +47 -0
  62. package/templates/base/src/shared/ui/Select.jsx +207 -0
  63. package/templates/base/src/shared/ui/Sheet.jsx +112 -0
  64. package/templates/base/src/shared/ui/Text.jsx +122 -0
  65. package/templates/base/src/shared/ui/Toaster.jsx +31 -0
  66. package/templates/base/src/shared/ui/index.js +1 -0
  67. package/templates/base/src/shared/utils/getClassName.js +5 -0
  68. package/templates/base/src/shared/utils/index.js +4 -0
  69. package/templates/base/src/shared/utils/memo.js +3 -0
  70. package/templates/base/src/shared/utils/parser.js +41 -0
  71. package/templates/base/src/shared/utils/tryCatch.js +13 -0
  72. package/templates/base/vite.config.js +19 -0
@@ -0,0 +1,4 @@
1
+ export const ENV = {
2
+ BACKEND_URL: import.meta.env.VITE_BACKEND_URL,
3
+ };
4
+
File without changes
File without changes
@@ -0,0 +1,3 @@
1
+ export { useBooleanState } from './useBooleanState';
2
+ export { useDebounce } from './useDebounce';
3
+ export { useToggleState } from './useToggleState';
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+
3
+ export const useBooleanState = () => {
4
+ const [value, setValue] = React.useState(false);
5
+
6
+ const toggle = React.useCallback(() => {
7
+ setValue((v) => !v);
8
+ }, []);
9
+
10
+ const setToTrue = React.useCallback(() => {
11
+ setValue(true);
12
+ }, []);
13
+
14
+ const setToFalse = React.useCallback(() => {
15
+ setValue(false);
16
+ }, []);
17
+
18
+ return [value, setToTrue, setToFalse, toggle];
19
+ };
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+
3
+ export const useDebounce = (value, delay) => {
4
+ const [debounceValue, setDoebounceValue] = React.useState(value);
5
+
6
+ React.useEffect(() => {
7
+ const handler = setTimeout(() => {
8
+ setDoebounceValue(value);
9
+ }, delay);
10
+
11
+ return () => {
12
+ clearTimeout(handler);
13
+ };
14
+ }, [value, delay]);
15
+
16
+ return debounceValue;
17
+ };
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+
3
+ export const useToggleState = () => {
4
+ const [state, setState] = React.useState(false);
5
+
6
+ const toggle = React.useCallback(() => {
7
+ setState((v) => !v);
8
+ }, []);
9
+
10
+ return [state, toggle];
11
+ };
File without changes
@@ -0,0 +1,6 @@
1
+ import baseAxios from 'axios';
2
+ import { ENV } from '../constants/app.constants';
3
+
4
+ export const axios = baseAxios.create({
5
+ baseURL: ENV.BACKEND_URL,
6
+ });
@@ -0,0 +1,7 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ export function cn(...inputs) {
5
+ return twMerge(clsx(...inputs));
6
+ }
7
+
@@ -0,0 +1,2 @@
1
+ export { axios } from './axios';
2
+ export { cn } from './cn';
@@ -0,0 +1,98 @@
1
+ # Shared Module
2
+
3
+ ## Purpose
4
+ The `shared` folder contains **cross-feature reusable code**.
5
+
6
+ It exists to prevent duplication — not to become a dumping ground.
7
+
8
+ > Shared code must earn its place.
9
+
10
+ ---
11
+
12
+ ## What Belongs in Shared
13
+
14
+ Only code that is:
15
+ - Used by **multiple features**
16
+ - **Stateless or generic**
17
+ - Independent of business rules
18
+
19
+ ---
20
+
21
+ ## Folder Structure
22
+
23
+ ```txt
24
+ shared/
25
+ assets/ # Global images/icons
26
+ constants/ # App-wide constants
27
+ contexts/ # Truly global contexts
28
+ hooks/ # Reusable generic hooks
29
+ layouts/ # Application layouts
30
+ libs/ # Third-party wrappers (axios, query)
31
+ theme/ # Theme configuration
32
+ ui/ # Design system components
33
+ utils/ # Pure utility functions
34
+ ```
35
+
36
+ ---
37
+
38
+ ## Rules
39
+
40
+ ### ✅ Allowed
41
+ - UI primitives (Button, Modal)
42
+ - Generic hooks (useDebounce)
43
+ - Axios/query setup
44
+ - Theme tokens
45
+
46
+ ### ❌ Not Allowed
47
+ - Feature logic
48
+ - Business rules
49
+ - Feature-specific constants
50
+ - Feature state
51
+
52
+ ---
53
+
54
+ ## Import Rules
55
+
56
+ ```js
57
+ // ✅ Allowed
58
+ import { axios } from '@/shared/libs';
59
+ import { cn } from '@/shared/utils';
60
+
61
+ // ❌ Not Allowed
62
+ import { authQueryKeys } from '@/features/auth';
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Constants Policy
68
+
69
+ Shared constants should be:
70
+ - Truly global
71
+ - Stable
72
+ - Rarely changed
73
+
74
+ Examples:
75
+ - Pagination defaults
76
+ - Environment keys
77
+ - Generic route params
78
+
79
+ ---
80
+
81
+ ## Contexts
82
+
83
+ Global contexts should be rare.
84
+
85
+ Before adding one, ask:
86
+ 1. Is this needed by multiple unrelated features?
87
+ 2. Can this live inside a feature instead?
88
+
89
+ If unsure — **do not add it here**.
90
+
91
+ ---
92
+
93
+ ## Philosophy
94
+
95
+ Shared code is a **dependency magnet**.
96
+
97
+ The smaller it stays, the healthier the system remains.
98
+
@@ -0,0 +1 @@
1
+ export * from './theme';