create-lik-app 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. package/README.md +0 -0
  2. package/dist/index.mjs +119 -0
  3. package/index.js +3 -0
  4. package/package.json +39 -0
  5. package/templates/template-react/.husky/commit-msg +6 -0
  6. package/templates/template-react/.husky/lintstagedrc.cjs +8 -0
  7. package/templates/template-react/.husky/pre-commit +10 -0
  8. package/templates/template-react/.prettierignore +13 -0
  9. package/templates/template-react/.vscode/extensions.json +5 -0
  10. package/templates/template-react/README.md +24 -0
  11. package/templates/template-react/_gitignore +24 -0
  12. package/templates/template-react/commitlint.config.mjs +28 -0
  13. package/templates/template-react/config/uno/rules.ts +127 -0
  14. package/templates/template-react/eslint.config.mjs +44 -0
  15. package/templates/template-react/index.html +13 -0
  16. package/templates/template-react/package-lock.json +6460 -0
  17. package/templates/template-react/package.json +49 -0
  18. package/templates/template-react/pnpm-lock.yaml +4403 -0
  19. package/templates/template-react/prettier.config.mjs +11 -0
  20. package/templates/template-react/public/lic.svg +1263 -0
  21. package/templates/template-react/public/react.svg +1 -0
  22. package/templates/template-react/public/vite.svg +1 -0
  23. package/templates/template-react/src/App.tsx +18 -0
  24. package/templates/template-react/src/assets/react.svg +1 -0
  25. package/templates/template-react/src/components/Lic/index.tsx +12 -0
  26. package/templates/template-react/src/libs/gsap/index.ts +6 -0
  27. package/templates/template-react/src/main.tsx +12 -0
  28. package/templates/template-react/src/router/loaders.ts +10 -0
  29. package/templates/template-react/src/router/routes.tsx +36 -0
  30. package/templates/template-react/src/store/index.ts +2 -0
  31. package/templates/template-react/src/store/module/counter.ts +20 -0
  32. package/templates/template-react/src/store/module/favorite.ts +18 -0
  33. package/templates/template-react/src/styles/animation.css +8 -0
  34. package/templates/template-react/src/styles/mian.css +10 -0
  35. package/templates/template-react/src/styles/variable.css +21 -0
  36. package/templates/template-react/src/views/About/index.tsx +7 -0
  37. package/templates/template-react/src/views/Home/components/React/index.tsx +17 -0
  38. package/templates/template-react/src/views/Home/components/Vite/index.tsx +20 -0
  39. package/templates/template-react/src/views/Home/index.tsx +59 -0
  40. package/templates/template-react/src/views/Layout/index.tsx +22 -0
  41. package/templates/template-react/src/vite-env.d.ts +1 -0
  42. package/templates/template-react/tsconfig.app.json +36 -0
  43. package/templates/template-react/tsconfig.json +7 -0
  44. package/templates/template-react/tsconfig.node.json +24 -0
  45. package/templates/template-react/uno.config.ts +40 -0
  46. package/templates/template-react/vite.config.ts +28 -0
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
@@ -0,0 +1,18 @@
1
+ import { type FC, Suspense } from 'react'
2
+ import { RouterProvider } from 'react-router-dom'
3
+ import router from './router/routes'
4
+
5
+ const App: FC = () => {
6
+ return (
7
+ <Suspense fallback={'loading'}>
8
+ <RouterProvider
9
+ router={router}
10
+ future={{
11
+ v7_startTransition: true
12
+ }}
13
+ />
14
+ </Suspense>
15
+ )
16
+ }
17
+
18
+ export default App
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>
@@ -0,0 +1,12 @@
1
+ import { type FC } from 'react'
2
+
3
+ const Lic: FC<{ favorite: string }> = ({ favorite }) => {
4
+ return (
5
+ <div className="animate-keyframes-bounce-in animate-duration-1000 animate-count-1 flex-center flex-col">
6
+ <img className="w-30" src="/lic.svg" alt="liclogo" />
7
+ <p className="text-8xl mt6">{favorite.toUpperCase()}</p>
8
+ </div>
9
+ )
10
+ }
11
+
12
+ export default Lic
@@ -0,0 +1,6 @@
1
+ import gsap from 'gsap'
2
+ import { useGSAP } from '@gsap/react'
3
+
4
+ gsap.registerPlugin(useGSAP)
5
+
6
+ export default gsap
@@ -0,0 +1,12 @@
1
+ import 'virtual:uno.css'
2
+ import '@unocss/reset/tailwind.css'
3
+ import '@/styles/mian.css'
4
+ import { StrictMode } from 'react'
5
+ import { createRoot } from 'react-dom/client'
6
+ import App from './App.tsx'
7
+
8
+ createRoot(document.getElementById('root') as Element).render(
9
+ <StrictMode>
10
+ <App />
11
+ </StrictMode>
12
+ )
@@ -0,0 +1,10 @@
1
+ import { redirect, type LoaderFunction } from 'react-router'
2
+
3
+ export const layoutLoader: LoaderFunction = ({ request }) => {
4
+ const url = new URL(request.url)
5
+ if (url.pathname === '/') {
6
+ return redirect('/home')
7
+ }
8
+
9
+ return null
10
+ }
@@ -0,0 +1,36 @@
1
+ import { createHashRouter } from 'react-router-dom'
2
+ import Layout from '@/views/Layout'
3
+ import About from '@/views/About'
4
+ import Home from '@/views/Home'
5
+ import { layoutLoader } from './loaders'
6
+
7
+ const router = createHashRouter(
8
+ [
9
+ {
10
+ path: '/',
11
+ element: <Layout />,
12
+ loader: layoutLoader,
13
+ children: [
14
+ {
15
+ path: '/home',
16
+ element: <Home />
17
+ },
18
+ {
19
+ path: '/about-me',
20
+ element: <About />
21
+ }
22
+ ]
23
+ }
24
+ ],
25
+ {
26
+ future: {
27
+ v7_partialHydration: true,
28
+ v7_fetcherPersist: true,
29
+ v7_normalizeFormMethod: true,
30
+ v7_relativeSplatPath: true,
31
+ v7_skipActionErrorRevalidation: true
32
+ }
33
+ }
34
+ )
35
+
36
+ export default router
@@ -0,0 +1,2 @@
1
+ export * from './module/counter'
2
+ export * from './module/favorite'
@@ -0,0 +1,20 @@
1
+ import { makeObservable, action, observable } from 'mobx'
2
+
3
+ class CountStore {
4
+ count: number = 0
5
+ constructor() {
6
+ console.log('countStore cunstructed')
7
+ makeObservable(this, {
8
+ count: observable,
9
+ increment: action
10
+ })
11
+ }
12
+
13
+ increment(): void {
14
+ this.count++
15
+ }
16
+ }
17
+
18
+ const countStore = new CountStore()
19
+
20
+ export { countStore }
@@ -0,0 +1,18 @@
1
+ import { makeAutoObservable } from 'mobx'
2
+
3
+ class FavoriteStore {
4
+ favorite: 'vite' | 'react' = 'vite'
5
+
6
+ constructor() {
7
+ console.log('favoriteStore cunstructed')
8
+ makeAutoObservable(this)
9
+ }
10
+
11
+ changeFavorite(fav: 'vite' | 'react'): void {
12
+ this.favorite = fav
13
+ }
14
+ }
15
+
16
+ const favoriteStore = new FavoriteStore()
17
+
18
+ export { favoriteStore }
@@ -0,0 +1,8 @@
1
+ @keyframes rotate-y {
2
+ 0% {
3
+ transform: rotateY(0deg);
4
+ }
5
+ 100% {
6
+ transform: rotateY(360deg);
7
+ }
8
+ }
@@ -0,0 +1,10 @@
1
+ @import './variable.css';
2
+ @import './animation.css';
3
+
4
+ html,
5
+ body,
6
+ #root {
7
+ height: 100vh;
8
+ width: 100vw;
9
+ color: var(--lic-color-text-muted);
10
+ }
@@ -0,0 +1,21 @@
1
+ :root {
2
+ --lic-color-primary: #696996;
3
+ --lic-color-primary-hover: #58587d;
4
+ --lic-color-primary-deep: #2f2f44;
5
+ --lic-color-primary-highlight: #7a7ab3;
6
+ --lic-color-success: #4caf50;
7
+ --lic-color-success-hover: #43a047;
8
+ --lic-color-info: #2196f3;
9
+ --lic-color-info-hover: #1e88e5;
10
+ --lic-color-error: #f44336;
11
+ --lic-color-error-hover: #e53935;
12
+ --lic-color-text: #333333;
13
+ --lic-color-text-inverse: #ffffff;
14
+ --lic-color-text-muted: #777777;
15
+ --lic-color-text-disabled: #aaaaaa;
16
+ --lic-color-background: #fafafa;
17
+ --lic-color-background-muted: #eeeeee;
18
+ --lic-color-border: #dddddd;
19
+ --lic-color-border-hover: #cccccc;
20
+ --lic-color-shadow: rgba(0, 0, 0, 0.15);
21
+ }
@@ -0,0 +1,7 @@
1
+ import { type FC } from 'react'
2
+
3
+ const About: FC = () => {
4
+ return <>About me</>
5
+ }
6
+
7
+ export default About
@@ -0,0 +1,17 @@
1
+ import { favoriteStore } from '@/store'
2
+ import { observer } from 'mobx-react-lite'
3
+ import type { FC } from 'react'
4
+
5
+ const React: FC = observer(() => {
6
+ return (
7
+ <div className={`scale-${favoriteStore.favorite === 'react'}`}>
8
+ <img
9
+ className="w-30 animate-spin animate-duration-2000"
10
+ src="/react.svg"
11
+ alt="reactlogo"
12
+ />
13
+ </div>
14
+ )
15
+ })
16
+
17
+ export default React
@@ -0,0 +1,20 @@
1
+ import type { FC } from 'react'
2
+
3
+ interface ViteProps extends Partial<Element> {
4
+ onClick?: () => void
5
+ }
6
+
7
+ const Vite: FC<ViteProps> = ({ onClick }) => {
8
+ return (
9
+ <div>
10
+ <img
11
+ onClick={onClick}
12
+ className={`w-30 animate-keyframes-rotate-y animate-duration-2000 animate-count-infinite`}
13
+ src="/vite.svg"
14
+ alt="vitelogo"
15
+ />
16
+ </div>
17
+ )
18
+ }
19
+
20
+ export default Vite
@@ -0,0 +1,59 @@
1
+ import { observer } from 'mobx-react-lite'
2
+ import { type FC } from 'react'
3
+ import Lic from '@/components/Lic'
4
+ import { favoriteStore } from '@/store'
5
+ import React from './components/React'
6
+ import Vite from './components/Vite'
7
+
8
+ const Button: FC<{ target: 'vite' | 'react'; disabled: boolean }> = ({
9
+ target,
10
+ disabled
11
+ }) => {
12
+ return (
13
+ <button
14
+ className="btn"
15
+ disabled={disabled}
16
+ onClick={() => {
17
+ favoriteStore.changeFavorite(target)
18
+ }}
19
+ >
20
+ choose {target.toUpperCase()}
21
+ </button>
22
+ )
23
+ }
24
+
25
+ const Home: FC = observer(() => {
26
+ return (
27
+ <div
28
+ className={
29
+ 'flex items-center h-full relative w-full justify-around text-center'
30
+ }
31
+ >
32
+ <div
33
+ className={`
34
+ flex-1 flex-center flex-col gap-10
35
+ animate-count-1 animate-duration-1000
36
+ ${favoriteStore.favorite === 'vite' ? 'animate-keyframes-bounce-alt' : ''}
37
+ `}
38
+ >
39
+ <Vite />
40
+ <Button target="vite" disabled={favoriteStore.favorite === 'vite'} />
41
+ </div>
42
+ <div
43
+ className={`
44
+ flex-1 flex-center flex-col gap-10
45
+ animate-count-1 animate-duration-1000
46
+ ${favoriteStore.favorite === 'react' ? 'animate-keyframes-bounce-alt' : ''}
47
+ `}
48
+ >
49
+ <React />
50
+ <Button target="react" disabled={favoriteStore.favorite === 'react'} />
51
+ </div>
52
+ <div className="absolute translate-x-[50%] right-[50%] top-[10%]">
53
+ <Lic favorite={favoriteStore.favorite} />
54
+ </div>
55
+ </div>
56
+ )
57
+ })
58
+
59
+ export default Home
@@ -0,0 +1,22 @@
1
+ import { type FC } from 'react'
2
+ import { Outlet, Link } from 'react-router-dom'
3
+
4
+ const Layout: FC = () => {
5
+ return (
6
+ <div className="flex flex-col h-full bg-[#F8F8FF]">
7
+ <div className="flex justify-evenly py-6">
8
+ <Link className="w-[50%] text-center link" to="/home">
9
+ Home
10
+ </Link>
11
+ <Link className="w-[50%] text-center link" to="/about-me">
12
+ AboutMe
13
+ </Link>
14
+ </div>
15
+ <div className="flex-1">
16
+ <Outlet />
17
+ </div>
18
+ </div>
19
+ )
20
+ }
21
+
22
+ export default Layout
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
@@ -0,0 +1,36 @@
1
+ {
2
+ "compilerOptions": {
3
+ "incremental": true,
4
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
5
+ "target": "ES2020",
6
+ "useDefineForClassFields": true,
7
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
8
+ "module": "ESNext",
9
+ "skipLibCheck": true,
10
+
11
+ /* allow decorators */
12
+ "experimentalDecorators": true,
13
+
14
+ /* Bundler mode */
15
+ "moduleResolution": "Bundler",
16
+ "allowImportingTsExtensions": true,
17
+ "isolatedModules": true,
18
+ "moduleDetection": "force",
19
+ "noEmit": true,
20
+ "jsx": "react-jsx",
21
+
22
+ /* Linting */
23
+ "strict": true,
24
+ "noUnusedLocals": true,
25
+ "noUnusedParameters": true,
26
+ "noFallthroughCasesInSwitch": true,
27
+
28
+ /* vite path resolve */
29
+ "baseUrl": "./",
30
+ "paths": {
31
+ "@": ["src"],
32
+ "@/*": ["src/*"]
33
+ }
34
+ },
35
+ "include": ["src"]
36
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "files": [],
3
+ "references": [
4
+ { "path": "./tsconfig.app.json" },
5
+ { "path": "./tsconfig.node.json" }
6
+ ]
7
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "compilerOptions": {
3
+ "incremental": true,
4
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
5
+ "target": "ES2022",
6
+ "lib": ["ES2023"],
7
+ "module": "ESNext",
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "Bundler",
12
+ "allowImportingTsExtensions": true,
13
+ "isolatedModules": true,
14
+ "moduleDetection": "force",
15
+ "noEmit": true,
16
+
17
+ /* Linting */
18
+ "strict": true,
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+ "noFallthroughCasesInSwitch": true
22
+ },
23
+ "include": ["vite.config.ts"]
24
+ }
@@ -0,0 +1,40 @@
1
+ import {
2
+ defineConfig,
3
+ presetIcons,
4
+ presetUno,
5
+ transformerDirectives,
6
+ transformerVariantGroup
7
+ } from 'unocss'
8
+
9
+ import rules from './config/uno/rules'
10
+
11
+ export default defineConfig({
12
+ presets: [presetUno(), presetIcons()],
13
+ transformers: [transformerDirectives(), transformerVariantGroup()],
14
+ rules: Object.values(rules)
15
+ .flat()
16
+ .concat([
17
+ [
18
+ 'animate-keyframes-rotate-y',
19
+ {
20
+ 'animation-name': 'rotate-y'
21
+ }
22
+ ]
23
+ ]),
24
+ shortcuts: [
25
+ {
26
+ link: 'linkPrimary hover:linkHover active:linkActive disabled:hover:linkDisabledHover visited:linkVisited',
27
+ 'active-link': 'linkIsActive hover:linkHover',
28
+ btn: 'btnPrimary active:btnActive disabled:btnDisabled hover:btnHover shadow-xl',
29
+ 'flex-center': 'flex justify-center items-center'
30
+ },
31
+ [
32
+ /^success-([a-z]+)$/,
33
+ ([, shortcut]) => `${shortcut} success hover:successHover`
34
+ ],
35
+ [
36
+ /^active-([a-z]+)$/,
37
+ ([, shortcut]) => `${shortcut} active hover:activeHover`
38
+ ]
39
+ ]
40
+ })
@@ -0,0 +1,28 @@
1
+ import { defineConfig } from 'vite'
2
+ import react from '@vitejs/plugin-react'
3
+ import unocss from 'unocss/vite'
4
+ import path from 'node:path'
5
+ import process from 'node:process'
6
+
7
+ // https://vite.dev/config/
8
+ export default defineConfig({
9
+ plugins: [
10
+ react({
11
+ babel: {
12
+ plugins: [
13
+ ['@babel/plugin-proposal-decorators', { legacy: true }]
14
+ // ['@babel/plugin-proposal-class-properties', { loose: true }]
15
+ ]
16
+ }
17
+ }),
18
+ unocss()
19
+ ],
20
+ resolve: {
21
+ alias: {
22
+ '@': path.resolve(process.cwd(), '/src')
23
+ }
24
+ },
25
+ server: {
26
+ port: 8220
27
+ }
28
+ })