feat: T-023 프로젝트 환경설정 및 초기 세팅 완료 - Vite+TypeScript+React 환경구성, TailwindCSS+ShadCN UI 설정, ESLint+Prettier 설정, Zustand 스토어 구현, 기본 UI 레이아웃 완성, 환경설정 오류 수정
This commit is contained in:
@@ -2,27 +2,36 @@ import js from '@eslint/js'
|
||||
import globals from 'globals'
|
||||
import reactHooks from 'eslint-plugin-react-hooks'
|
||||
import reactRefresh from 'eslint-plugin-react-refresh'
|
||||
import tseslint from 'typescript-eslint'
|
||||
import tseslint from '@typescript-eslint/eslint-plugin'
|
||||
import parser from '@typescript-eslint/parser'
|
||||
|
||||
export default tseslint.config(
|
||||
export default [
|
||||
{ ignores: ['dist'] },
|
||||
{
|
||||
extends: [js.configs.recommended, ...tseslint.configs.recommended],
|
||||
files: ['**/*.{ts,tsx}'],
|
||||
languageOptions: {
|
||||
ecmaVersion: 2020,
|
||||
globals: globals.browser,
|
||||
parser: parser,
|
||||
parserOptions: {
|
||||
ecmaVersion: 'latest',
|
||||
sourceType: 'module',
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
'@typescript-eslint': tseslint,
|
||||
'react-hooks': reactHooks,
|
||||
'react-refresh': reactRefresh,
|
||||
},
|
||||
rules: {
|
||||
...js.configs.recommended.rules,
|
||||
...tseslint.configs.recommended.rules,
|
||||
...reactHooks.configs.recommended.rules,
|
||||
'react-refresh/only-export-components': [
|
||||
'warn',
|
||||
{ allowConstantExport: true },
|
||||
],
|
||||
'@typescript-eslint/no-unused-vars': 'warn',
|
||||
},
|
||||
},
|
||||
)
|
||||
]
|
||||
|
||||
1782
package-lock.json
generated
1782
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -15,6 +15,7 @@
|
||||
"type-check": "tsc --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tailwindcss/postcss": "^4.1.10",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"file-saver": "^2.0.5",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
export default {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
'@tailwindcss/postcss': {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
}
|
||||
@@ -1,11 +1,9 @@
|
||||
import React from "react";
|
||||
import { useAppStore } from "./stores/useAppStore";
|
||||
import { Card, CardContent } from "./components/ui/card";
|
||||
import { Button } from "./components/ui/button";
|
||||
|
||||
function App() {
|
||||
const { isLoading, loadingMessage, currentFile, isAuthenticated } =
|
||||
useAppStore();
|
||||
const { isLoading, loadingMessage, currentFile } = useAppStore();
|
||||
|
||||
return (
|
||||
<div className="min-h-screen bg-background">
|
||||
|
||||
@@ -37,7 +37,7 @@ interface AppState {
|
||||
setAuthenticated: (authenticated: boolean) => void;
|
||||
|
||||
setCurrentFile: (
|
||||
file: { name: string; size: number; uploadedAt: Date } | null
|
||||
file: { name: string; size: number; uploadedAt: Date } | null,
|
||||
) => void;
|
||||
setSheets: (sheets: SheetData[]) => void;
|
||||
setActiveSheetId: (sheetId: string | null) => void;
|
||||
@@ -70,7 +70,7 @@ const initialState = {
|
||||
|
||||
export const useAppStore = create<AppState>()(
|
||||
devtools(
|
||||
(set, get) => ({
|
||||
(set) => ({
|
||||
...initialState,
|
||||
|
||||
// 사용자 액션
|
||||
@@ -118,6 +118,6 @@ export const useAppStore = create<AppState>()(
|
||||
}),
|
||||
{
|
||||
name: "app-store",
|
||||
}
|
||||
)
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"erasableSyntaxOnly": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noUncheckedSideEffectImports": true
|
||||
},
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"erasableSyntaxOnly": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noUncheckedSideEffectImports": true
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user