Initial commit

empty website with chakra, unfinished controls in the top right, eslint, prettier and base data schema + provider
This commit is contained in:
mmacierzanka committed 2023-04-18 17:37:16 +02:00
commit 2419a7b6d3
19 files changed
+3641

No files matched your search

+55
View File
@@ -0,0 +1,55 @@
module.exports = {
root: true,
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:react-hooks/recommended',
'plugin:react/jsx-runtime',
'xo',
'xo-typescript',
'xo-typescript/space',
'prettier',
'plugin:@typescript-eslint/recommended',
],
plugins: ['react', 'react-hooks', '@typescript-eslint', 'prettier'],
rules: {
'@typescript-eslint/indent': 'off',
'@typescript-eslint/object-curly-spacing': 'off',
'@typescript-eslint/strict-boolean-expressions': ['error', { allowString: false, allowNumber: false }],
'@typescript-eslint/ban-types': 'off',
eqeqeq: ['error', 'always'],
'linebreak-style': 'off',
'prettier/prettier': [
'error',
{
singleQuote: true,
useTabs: false,
endOfLine: 'lf',
printWidth: 120,
trailingComma: 'es5',
semi: true,
jsxSingleQuote: true,
arrowParens: 'always',
tabWidth: 2,
},
],
},
env: {
browser: true,
es2021: true,
},
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 2022,
sourceType: 'module',
},
settings: {
react: {
version: '18',
},
},
ignorePatterns: ['.eslintrc.js', 'vite.config.ts'],
};
+24
View File
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
+11
View File
@@ -0,0 +1,11 @@
{
"singleQuote": true,
"useTabs": false,
"endOfLine": "lf",
"printWidth": 120,
"trailingComma": "es5",
"semi": true,
"jsxSingleQuote": true,
"arrowParens": "always",
"tabWidth": 2
}
+13
View File
@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Geografia - Bartosz Hospodura, Marcin Macierzanka 4aSP</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
+36
View File
@@ -0,0 +1,36 @@
{
"name": "geografia",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview"
},
"dependencies": {
"@chakra-ui/react": "^2.5.5",
"@emotion/react": "^11.10.6",
"@emotion/styled": "^11.10.6",
"framer-motion": "^10.12.4",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@types/react": "^18.0.28",
"@types/react-dom": "^18.0.11",
"@typescript-eslint/eslint-plugin": "^5.59.0",
"@typescript-eslint/parser": "^5.59.0",
"@vitejs/plugin-react": "^3.1.0",
"eslint": "^8.38.0",
"eslint-config-prettier": "^8.8.0",
"eslint-config-xo": "^0.43.1",
"eslint-config-xo-typescript": "^0.57.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.32.2",
"eslint-plugin-react-hooks": "^4.6.0",
"prettier": "^2.8.7",
"typescript": "^4.9.3",
"vite": "^4.2.0"
}
}
+3
View File
@@ -0,0 +1,3 @@
{
"mapViews": ["Liczba ludności", "Przyrost naturalny"]
}
+1
View File
@@ -0,0 +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>

After

Width:  |  Height:  |  Size: 1.5 KiB

+8
View File
@@ -0,0 +1,8 @@
import { Card, Heading } from '@chakra-ui/react';
import { type FC } from 'react';
export const Controls: FC = () => (
<Card p={3} bg={'gray.200'}>
<Heading fontSize={'lg'}>Wybierz widok</Heading>
</Card>
);
+27
View File
@@ -0,0 +1,27 @@
import { type FC, createContext, useState, type ReactNode, useEffect, useContext } from 'react';
import { type JsonData } from '../types/json';
const Data = createContext<JsonData | undefined>(undefined);
export const DataProvider: FC<{ children: ReactNode }> = ({ children }) => {
const [data, setData] = useState<JsonData>();
useEffect(() => {
const { origin } = window.location;
void fetch(`${origin}/data.json`)
.then(async (r) => {
if (r.status !== 200) {
throw new Error(`Failed to obtain data (${r.status}: ${r.statusText})`);
}
return r.json();
})
.then((d: JsonData) => {
setData(d);
});
}, []);
return <Data.Provider value={data}>{children}</Data.Provider>;
};
export const useData = () => useContext(Data);
+7
View File
@@ -0,0 +1,7 @@
* {
margin: 0;
padding: 0;
}
body {
font-family: Arial, Helvetica, sans-serif;
}
+23
View File
@@ -0,0 +1,23 @@
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import './index.css';
import { ChakraProvider } from '@chakra-ui/react';
import { MainPage } from './pages';
import { DataProvider } from './components/DataProvider';
const root = document.querySelector('#root');
if (root === null) {
throw new Error('Root DOM node not found');
}
const reactRoot = createRoot(root);
reactRoot.render(
<StrictMode>
<DataProvider>
<ChakraProvider>
<MainPage />
</ChakraProvider>
</DataProvider>
</StrictMode>
);
+12
View File
@@ -0,0 +1,12 @@
.controlsContainer {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100vh;
display: flex;
align-items: flex-start;
justify-content: flex-end;
padding: 20px;
box-sizing: border-box;
}
+9
View File
@@ -0,0 +1,9 @@
import { type FC } from 'react';
import style from './index.module.css';
import { Controls } from '../components/Controls';
export const MainPage: FC = () => (
<div className={style.controlsContainer}>
<Controls />
</div>
);
+3
View File
@@ -0,0 +1,3 @@
export type JsonData = {
mapViews: string[];
};
+1
View File
@@ -0,0 +1 @@
/// <reference types="vite/client" />
+21
View File
@@ -0,0 +1,21 @@
{
"compilerOptions": {
"target": "ESNext",
"useDefineForClassFields": true,
"lib": ["DOM", "DOM.Iterable", "ESNext"],
"allowJs": false,
"skipLibCheck": true,
"esModuleInterop": false,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "ESNext",
"moduleResolution": "Node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": ["src"],
"references": [{ "path": "./tsconfig.node.json" }]
}
+9
View File
@@ -0,0 +1,9 @@
{
"compilerOptions": {
"composite": true,
"module": "ESNext",
"moduleResolution": "Node",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}
+7
View File
@@ -0,0 +1,7 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
})
+3371
View File
File diff suppressed because it is too large. Load diff