Compare commits
8 Commits
c20b530c51
...
2cdf08fe6b
Author | SHA1 | Date | |
---|---|---|---|
|
2cdf08fe6b | ||
6bbf58d35d | |||
e0bf5dc02a | |||
0a24f2eb52 | |||
3742844220 | |||
d80f2fb07b | |||
cd0b3e5dc0 | |||
7038e8a90c |
13
Frontend/.eslintignore
Normal file
13
Frontend/.eslintignore
Normal file
@ -0,0 +1,13 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/build
|
||||
/.svelte-kit
|
||||
/package
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# Ignore files for PNPM, NPM and YARN
|
||||
pnpm-lock.yaml
|
||||
package-lock.json
|
||||
yarn.lock
|
30
Frontend/.eslintrc.cjs
Normal file
30
Frontend/.eslintrc.cjs
Normal file
@ -0,0 +1,30 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:svelte/recommended',
|
||||
'prettier'
|
||||
],
|
||||
parser: '@typescript-eslint/parser',
|
||||
plugins: ['@typescript-eslint'],
|
||||
parserOptions: {
|
||||
sourceType: 'module',
|
||||
ecmaVersion: 2020,
|
||||
extraFileExtensions: ['.svelte']
|
||||
},
|
||||
env: {
|
||||
browser: true,
|
||||
es2017: true,
|
||||
node: true
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: ['*.svelte'],
|
||||
parser: 'svelte-eslint-parser',
|
||||
parserOptions: {
|
||||
parser: '@typescript-eslint/parser'
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
10
Frontend/.gitignore
vendored
Normal file
10
Frontend/.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/build
|
||||
/.svelte-kit
|
||||
/package
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
vite.config.js.timestamp-*
|
||||
vite.config.ts.timestamp-*
|
2
Frontend/.npmrc
Normal file
2
Frontend/.npmrc
Normal file
@ -0,0 +1,2 @@
|
||||
engine-strict=true
|
||||
resolution-mode=highest
|
13
Frontend/.prettierignore
Normal file
13
Frontend/.prettierignore
Normal file
@ -0,0 +1,13 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/build
|
||||
/.svelte-kit
|
||||
/package
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# Ignore files for PNPM, NPM and YARN
|
||||
pnpm-lock.yaml
|
||||
package-lock.json
|
||||
yarn.lock
|
7
Frontend/.prettierrc
Normal file
7
Frontend/.prettierrc
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"useTabs": true,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none",
|
||||
"printWidth": 100,
|
||||
"svelteSortOrder": "options-scripts-markup-styles"
|
||||
}
|
38
Frontend/README.md
Normal file
38
Frontend/README.md
Normal file
@ -0,0 +1,38 @@
|
||||
# create-svelte
|
||||
|
||||
Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).
|
||||
|
||||
## Creating a project
|
||||
|
||||
If you're seeing this, you've probably already done this step. Congrats!
|
||||
|
||||
```bash
|
||||
# create a new project in the current directory
|
||||
npm create svelte@latest
|
||||
|
||||
# create a new project in my-app
|
||||
npm create svelte@latest my-app
|
||||
```
|
||||
|
||||
## Developing
|
||||
|
||||
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
|
||||
# or start the server and open the app in a new browser tab
|
||||
npm run dev -- --open
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
To create a production version of your app:
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
You can preview the production build with `npm run preview`.
|
||||
|
||||
> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.
|
7478
Frontend/package-lock.json
generated
Normal file
7478
Frontend/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
42
Frontend/package.json
Normal file
42
Frontend/package.json
Normal file
@ -0,0 +1,42 @@
|
||||
{
|
||||
"name": "frontend",
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview",
|
||||
"test": "playwright test",
|
||||
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
||||
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
||||
"test:unit": "vitest",
|
||||
"lint": "prettier --plugin-search-dir . --check . && eslint .",
|
||||
"format": "prettier --plugin-search-dir . --write ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.28.1",
|
||||
"@sveltejs/adapter-auto": "^2.0.0",
|
||||
"@sveltejs/kit": "^1.5.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
||||
"@typescript-eslint/parser": "^5.45.0",
|
||||
"autoprefixer": "^10.4.14",
|
||||
"eslint": "^8.28.0",
|
||||
"eslint-config-prettier": "^8.5.0",
|
||||
"eslint-plugin-svelte": "^2.26.0",
|
||||
"postcss": "^8.4.23",
|
||||
"prettier": "^2.8.0",
|
||||
"prettier-plugin-svelte": "^2.8.1",
|
||||
"svelte": "^3.54.0",
|
||||
"svelte-check": "^3.0.1",
|
||||
"tailwindcss": "^3.3.2",
|
||||
"tslib": "^2.4.1",
|
||||
"typescript": "^5.0.0",
|
||||
"vite": "^4.3.0",
|
||||
"vitest": "^0.25.3"
|
||||
},
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"cssnano": "^6.0.1",
|
||||
"postcss-nesting": "^11.2.2"
|
||||
}
|
||||
}
|
12
Frontend/playwright.config.ts
Normal file
12
Frontend/playwright.config.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import type { PlaywrightTestConfig } from '@playwright/test';
|
||||
|
||||
const config: PlaywrightTestConfig = {
|
||||
webServer: {
|
||||
command: 'npm run build && npm run preview',
|
||||
port: 4173
|
||||
},
|
||||
testDir: 'tests',
|
||||
testMatch: /(.+\.)?(test|spec)\.[jt]s/
|
||||
};
|
||||
|
||||
export default config;
|
21
Frontend/postcss.config.cjs
Normal file
21
Frontend/postcss.config.cjs
Normal file
@ -0,0 +1,21 @@
|
||||
const tailwindcss = require('tailwindcss');
|
||||
const autoprefixer = require('autoprefixer');
|
||||
const postcssImport = require('postcss-import');
|
||||
const postcssNesting = require('postcss-nesting');
|
||||
const cssnano = require('cssnano');
|
||||
|
||||
const mode = process.env.NODE_ENV;
|
||||
const dev = mode === 'development';
|
||||
|
||||
module.exports = {
|
||||
plugins: [
|
||||
postcssImport(),
|
||||
postcssNesting(),
|
||||
tailwindcss(),
|
||||
autoprefixer(),
|
||||
!dev &&
|
||||
cssnano({
|
||||
preset: 'default'
|
||||
})
|
||||
]
|
||||
};
|
12
Frontend/src/app.d.ts
vendored
Normal file
12
Frontend/src/app.d.ts
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
// See https://kit.svelte.dev/docs/types#app
|
||||
// for information about these interfaces
|
||||
declare global {
|
||||
namespace App {
|
||||
// interface Error {}
|
||||
// interface Locals {}
|
||||
// interface PageData {}
|
||||
// interface Platform {}
|
||||
}
|
||||
}
|
||||
|
||||
export {};
|
12
Frontend/src/app.html
Normal file
12
Frontend/src/app.html
Normal file
@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
%sveltekit.head%
|
||||
</head>
|
||||
<body data-sveltekit-preload-data="hover">
|
||||
<div style="display: contents">%sveltekit.body%</div>
|
||||
</body>
|
||||
</html>
|
106
Frontend/src/components/Icons.svelte
Normal file
106
Frontend/src/components/Icons.svelte
Normal file
@ -0,0 +1,106 @@
|
||||
<script context="module" lang="ts">
|
||||
export type IconValues =
|
||||
| 'analytics'
|
||||
| 'back'
|
||||
| 'building'
|
||||
| 'calendar'
|
||||
| 'calendarView'
|
||||
| 'camera'
|
||||
| 'chart'
|
||||
| 'chat'
|
||||
| 'chat-small'
|
||||
| 'check'
|
||||
| 'check-big'
|
||||
| 'checklist'
|
||||
| 'chevron'
|
||||
| 'cloud'
|
||||
| 'company'
|
||||
| 'cross'
|
||||
| 'dots-horizontal'
|
||||
| 'dots-vertical'
|
||||
| 'edit'
|
||||
| 'eye'
|
||||
| 'eye-off'
|
||||
| 'filter-lines'
|
||||
| 'hamburger'
|
||||
| 'hash'
|
||||
| 'help'
|
||||
| 'heart-hand'
|
||||
| 'home'
|
||||
| 'listView'
|
||||
| 'lock'
|
||||
| 'logout'
|
||||
| 'map'
|
||||
| 'microphone'
|
||||
| 'notification-box'
|
||||
| 'people'
|
||||
| 'plus'
|
||||
| 'plus-circle'
|
||||
| 'profile'
|
||||
| 'publish'
|
||||
| 'qrcode'
|
||||
| 'schedule'
|
||||
| 'search'
|
||||
| 'share'
|
||||
| 'settings'
|
||||
| 'send'
|
||||
| 'social'
|
||||
| 'support'
|
||||
| 'table'
|
||||
| 'trash'
|
||||
| 'upload'
|
||||
| 'user-circle'
|
||||
| 'user-default'
|
||||
| 'user-down'
|
||||
| 'user-plus'
|
||||
| 'user-remove'
|
||||
| 'verified'
|
||||
| 'socials/Twitter'
|
||||
| 'socials/LinkedIn';
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
export var icon: IconValues;
|
||||
export var active: boolean = false;
|
||||
export var inactive: boolean = false;
|
||||
export var black: boolean = false;
|
||||
export var white: boolean = false;
|
||||
export var rotate = 0;
|
||||
|
||||
let className = '';
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<div
|
||||
class="icon {className}"
|
||||
class:active
|
||||
class:inactive
|
||||
style:mask="url(/images/icons/{icon}.svg) no-repeat center"
|
||||
style:-webkit-mask="url(/images/icons/{icon}.svg) no-repeat center"
|
||||
style:transform="rotate({rotate}deg)"
|
||||
class:black
|
||||
class:white
|
||||
on:click
|
||||
on:dblclick
|
||||
on:keydown
|
||||
on:keypress
|
||||
on:keyup
|
||||
/>
|
||||
|
||||
<style>
|
||||
.icon {
|
||||
@apply w-8 h-8 bg-current origin-center rounded-[100%];
|
||||
}
|
||||
.icon.active {
|
||||
@apply bg-primary;
|
||||
}
|
||||
.icon.black {
|
||||
@apply bg-black;
|
||||
}
|
||||
.icon.inactive {
|
||||
@apply bg-gray-700;
|
||||
}
|
||||
.icon.white {
|
||||
@apply bg-white;
|
||||
}
|
||||
</style>
|
7
Frontend/src/index.test.ts
Normal file
7
Frontend/src/index.test.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
|
||||
describe('sum test', () => {
|
||||
it('adds 1 + 2 to equal 3', () => {
|
||||
expect(1 + 2).toBe(3);
|
||||
});
|
||||
});
|
23
Frontend/src/routes/+layout.svelte
Normal file
23
Frontend/src/routes/+layout.svelte
Normal file
@ -0,0 +1,23 @@
|
||||
<script lang="ts">
|
||||
import '$styles/tailwind.css';
|
||||
|
||||
const pages = [
|
||||
{ name: 'Dashboard', path: '/' },
|
||||
{ name: 'Settings', path: '/settings' },
|
||||
{ name: 'About', path: '/about' },
|
||||
{ name: 'Docs', path: '/docs' },
|
||||
{ name: 'Contact', path: '/contact' }
|
||||
] as const;
|
||||
</script>
|
||||
|
||||
<div class="bg-[#0B2A37] h-screen w-screen">
|
||||
<div class="flex flex-row items-center px-20">
|
||||
<img class="w-40" src="/icons/Logo.svg" alt="Logo" />
|
||||
<div class="w-full justify-between flex px-5 lg:px-40 text-lg text-white">
|
||||
{#each pages as link}
|
||||
<a href={link.path}>{link.name}</a>
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
<slot />
|
||||
</div>
|
24
Frontend/src/routes/+page.svelte
Normal file
24
Frontend/src/routes/+page.svelte
Normal file
@ -0,0 +1,24 @@
|
||||
<script lang="ts">
|
||||
let numberOfAccessPoints = 0;
|
||||
let numberOfAccessPointsUp = 0;
|
||||
</script>
|
||||
|
||||
<div class="height">
|
||||
<div class="bg-[#05171E] rounded-lg w-3/4 h-full mx-auto mt-20 py-4 px-20">
|
||||
<div class="text-white text-center text-3xl">Dashboard</div>
|
||||
<div class="flex flex-row text-white mt-20 text-xl">
|
||||
<div class="pr-2">Access point amount :</div>
|
||||
<div>{numberOfAccessPoints}</div>
|
||||
</div>
|
||||
<div class="flex flex-row text-white mt-20 text-xl">
|
||||
<div class="pr-2">Access points up :</div>
|
||||
<div>{numberOfAccessPointsUp}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.height {
|
||||
height: calc(100vh - 14rem);
|
||||
}
|
||||
</style>
|
17
Frontend/src/routes/about/+page.svelte
Normal file
17
Frontend/src/routes/about/+page.svelte
Normal file
@ -0,0 +1,17 @@
|
||||
<div class="height">
|
||||
<div class="bg-[#05171E] rounded-lg w-3/4 h-full mx-auto mt-20 py-4 px-20">
|
||||
<div class="text-white text-center text-3xl">About</div>
|
||||
<div class="flex flex-row text-white mt-20 text-xl">
|
||||
This project was made by the Pátek team during the 2023 Junior AT&T Hackathon.
|
||||
</div>
|
||||
<div class="flex flex-row text-white mt-20 text-xl">
|
||||
It’s an open-source management tool for access points with
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.height {
|
||||
height: calc(100vh - 14rem);
|
||||
}
|
||||
</style>
|
12
Frontend/src/routes/contact/+page.svelte
Normal file
12
Frontend/src/routes/contact/+page.svelte
Normal file
@ -0,0 +1,12 @@
|
||||
<div class="height">
|
||||
<div class="bg-[#05171E] rounded-lg w-3/4 h-full mx-auto mt-20 py-4 px-20">
|
||||
<div class="text-white text-center text-3xl">Contact</div>
|
||||
<div class="flex flex-row text-white mt-20 text-xl">patek@gbl.cz</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.height {
|
||||
height: calc(100vh - 14rem);
|
||||
}
|
||||
</style>
|
19
Frontend/src/routes/docs/+page.svelte
Normal file
19
Frontend/src/routes/docs/+page.svelte
Normal file
@ -0,0 +1,19 @@
|
||||
<div class="height">
|
||||
<div class="bg-[#05171E] rounded-lg w-3/4 h-full mx-auto mt-20 py-4 px-20">
|
||||
<div class="text-white text-center text-3xl">Docs</div>
|
||||
<div class="flex flex-row text-white mt-20 text-xl">
|
||||
dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy
|
||||
text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text
|
||||
dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy
|
||||
text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text
|
||||
dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy text dummy
|
||||
text dummy text
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.height {
|
||||
height: calc(100vh - 14rem);
|
||||
}
|
||||
</style>
|
26
Frontend/src/routes/settings/+page.svelte
Normal file
26
Frontend/src/routes/settings/+page.svelte
Normal file
@ -0,0 +1,26 @@
|
||||
<div class="height">
|
||||
<div class="bg-[#05171E] rounded-lg w-3/4 h-full mx-auto mt-20 py-4 px-20">
|
||||
<div class="text-white text-center text-3xl">Settings</div>
|
||||
<table class="text-white border mx-auto mt-10">
|
||||
<tr>
|
||||
<th class="title">ID</th>
|
||||
<th class="title">Name</th>
|
||||
<th class="title">Type</th>
|
||||
<th class="title">Location</th>
|
||||
<th class="title">IP address</th>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="flex justify-center mt-10">
|
||||
<button class="text-white py-2 px-10 bg-[#1D3920] rounded-xl"> Add access point </button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.height {
|
||||
height: calc(100vh - 14rem);
|
||||
}
|
||||
.title {
|
||||
@apply py-2 px-10 bg-[#5B5B5B] border;
|
||||
}
|
||||
</style>
|
24
Frontend/src/styles/tailwind.css
Normal file
24
Frontend/src/styles/tailwind.css
Normal file
@ -0,0 +1,24 @@
|
||||
/* Injects Tailwind's base styles & any base styles registered by plugins. */
|
||||
@tailwind base;
|
||||
|
||||
@layer base {
|
||||
/* custom CSS goes here */
|
||||
}
|
||||
|
||||
/* Injects Tailwind's component classes & any component classes registered by plugins. */
|
||||
@tailwind components;
|
||||
|
||||
@layer components {
|
||||
/* custom CSS goes here */
|
||||
}
|
||||
|
||||
/* Injects Tailwind's utility classes & any utility classes registered by plugins. */
|
||||
@tailwind utilities;
|
||||
|
||||
@layer utilities {
|
||||
/* custom CSS goes here */
|
||||
}
|
||||
|
||||
/* Directive controlling where Tailwind injects responsive variations of utilities.
|
||||
By default Tailwind normally append these at the end of your stylesheet. */
|
||||
@tailwind screens;
|
BIN
Frontend/static/favicon.png
Normal file
BIN
Frontend/static/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
18
Frontend/static/icons/Logo.svg
Normal file
18
Frontend/static/icons/Logo.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 340 224">
|
||||
<rect width="340" height="224" x="0" y="0" fill="#0b2a37" rx="0" ry="0"></rect>
|
||||
<g id="content" transform="translate(-14.675779999999975,32)">
|
||||
<path id="circle0" fill="#ffffff" d="M162.68928 79.500341c.00001 32.335449 19.43462 62.028599 49.38074 74.430609 29.87414 12.37423 64.31674 5.52319 87.17895-17.34172 22.86505-22.86506 29.71595-57.306944 17.34172-87.178952C304.18797 19.467723 274.53544.016 242.20284.016v14.377329c26.562 0 50.97695 16.042665 61.11362 40.514624 10.16518 24.540368 4.55826 52.727797-14.22412 71.508967-18.78259 18.7826-46.97003 24.3893-71.50897 14.22412-24.46839-10.13524-40.51462-34.5787-40.51462-61.141412z" paint-order="markers fill stroke" style="font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal"></path>
|
||||
|
||||
|
||||
|
||||
<path id="circle4" fill="#ffffff" d="M215.271 79.543096c-.00001 10.890599 6.57041 20.717294 16.63198 24.885264 10.06114 4.16762 21.66576 1.86914 29.36678-5.831597 7.70102-7.701021 9.99914-19.304928 5.8316-29.366778-4.16762-10.061138-13.99467-16.631982-24.88527-16.631982v4.843441c8.94593 0 16.99398 5.374539 20.41729 13.639793 3.42331 8.265254 1.538 17.766434-4.78779 24.092145-6.32578 6.325788-15.82675 8.211238-24.09214 4.787788-8.26469-3.423452-13.63979-11.471364-13.63979-20.41729z" paint-order="markers fill stroke" style="font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration-line:none;text-decoration-style:solid;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal"></path>
|
||||
|
||||
|
||||
<text x="234.51401" y="68.234459" fill="#ffffff" stroke-width="1.9459722" font-family="sans-serif" font-size="77.83888245" font-weight="400" letter-spacing="0" style="line-height:1.25;text-align:end" text-anchor="end" word-spacing="0">
|
||||
<tspan id="title" x="234.51402" y="68.234459" font-family="Fira Code" font-weight="700" style="-inkscape-font-specification:'Fira Code Bold';text-align:end">PWC²</tspan>
|
||||
</text>
|
||||
<text x="159.64459" y="120.83648" fill="#ffffff" stroke-width="1.17030752" font-family="sans-serif" font-size="46.81230164" font-weight="400" letter-spacing="0" style="line-height:1.25;text-align:end" text-anchor="end" word-spacing="0">
|
||||
<tspan id="subtitle" x="159.64459" y="120.83648" font-family="Fira Code" font-weight="700" style="-inkscape-font-specification:'Fira Code Bold';text-align:end">Pátek</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
18
Frontend/svelte.config.js
Normal file
18
Frontend/svelte.config.js
Normal file
@ -0,0 +1,18 @@
|
||||
import preprocess from 'svelte-preprocess';
|
||||
import adapter from '@sveltejs/adapter-auto';
|
||||
|
||||
/** @type {import('@sveltejs/kit').Config} */
|
||||
const config = {
|
||||
// Consult https://github.com/sveltejs/svelte-preprocess
|
||||
// for more information about preprocessors
|
||||
preprocess: preprocess({
|
||||
postcss: true
|
||||
}),
|
||||
|
||||
kit: {
|
||||
// hydrate the <div id="svelte"> element in src/app.html
|
||||
adapter: adapter()
|
||||
}
|
||||
};
|
||||
|
||||
export default config;
|
12
Frontend/tailwind.config.cjs
Normal file
12
Frontend/tailwind.config.cjs
Normal file
@ -0,0 +1,12 @@
|
||||
module.exports = {
|
||||
mode: 'jit',
|
||||
content: ['./src/**/*.{html,js,svelte,ts}'],
|
||||
theme: {
|
||||
extend: {
|
||||
},
|
||||
},
|
||||
variants: {
|
||||
extend: {}
|
||||
},
|
||||
plugins: []
|
||||
};
|
6
Frontend/tests/test.ts
Normal file
6
Frontend/tests/test.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import { expect, test } from '@playwright/test';
|
||||
|
||||
test('index page has expected h1', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
await expect(page.getByRole('heading', { name: 'Welcome to SvelteKit' })).toBeVisible();
|
||||
});
|
46
Frontend/tsconfig.json
Normal file
46
Frontend/tsconfig.json
Normal file
@ -0,0 +1,46 @@
|
||||
{
|
||||
"extends": "./.svelte-kit/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"moduleResolution": "node",
|
||||
"module": "es2020",
|
||||
"lib": ["es2020", "DOM"],
|
||||
"target": "es2020",
|
||||
/**
|
||||
svelte-preprocess cannot figure out whether you have a value or a type, so tell TypeScript
|
||||
to enforce using \`import type\` instead of \`import\` for Types.
|
||||
*/
|
||||
"importsNotUsedAsValues": "error",
|
||||
"isolatedModules": true,
|
||||
"resolveJsonModule": true,
|
||||
/**
|
||||
To have warnings/errors of the Svelte compiler at the correct position,
|
||||
enable source maps by default.
|
||||
*/
|
||||
"sourceMap": true,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"baseUrl": ".",
|
||||
"allowJs": true,
|
||||
"checkJs": true,
|
||||
"paths": {
|
||||
"$lib": ["src/lib"],
|
||||
"$lib/*": ["src/lib/*"],
|
||||
"$styles": ["src/styles"],
|
||||
"$styles/*": ["src/styles/*"],
|
||||
"$stores": ["src/stores"],
|
||||
"$stores/*": ["src/stores/*"],
|
||||
"$utils": ["src/utils"],
|
||||
"$utils/*": ["src/utils/*"],
|
||||
"$components": ["src/lib/components"],
|
||||
"$components/*": ["src/lib/components/*"],
|
||||
"$pages": ["src/lib/pages"],
|
||||
"$pages/*": ["src/lib/pages/*"],
|
||||
"$sections": ["src/lib/sections"],
|
||||
"$sections/*": ["src/lib/sections/*"],
|
||||
"$icons": ["src/lib/icons"],
|
||||
"$icons/*": ["src/lib/icons/*"]
|
||||
}
|
||||
},
|
||||
"include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.ts", "src/**/*.svelte"]
|
||||
}
|
21
Frontend/vite.config.ts
Normal file
21
Frontend/vite.config.ts
Normal file
@ -0,0 +1,21 @@
|
||||
import { sveltekit } from '@sveltejs/kit/vite';
|
||||
import path from 'path';
|
||||
|
||||
/** @type {import('vite').UserConfig} */
|
||||
const config = {
|
||||
plugins: [sveltekit()],
|
||||
resolve: {
|
||||
alias: {
|
||||
$stores: path.resolve('./src/stores'),
|
||||
$styles: path.resolve('./src/styles'),
|
||||
$utils: path.resolve('./src/utils'),
|
||||
$components: path.resolve('./src/lib/components'),
|
||||
$pages: path.resolve('./src/lib/pages'),
|
||||
$sections: path.resolve('./src/lib/sections'),
|
||||
$icons: path.resolve('./src/lib/icons')
|
||||
}
|
||||
},
|
||||
clearScreen: false
|
||||
};
|
||||
|
||||
export default config;
|
@ -1,5 +1,2 @@
|
||||
# AT&T Hackathon 2023
|
||||
This repository contains code made by the Pátek team for the 2023 AT&T Hackathon in Brno. :)
|
||||
|
||||
FYI all code is currently on Broxon branch
|
||||
|
||||
This repository contains code made by the Pátek team for the 2023 AT&T Hackathon in Brno.
|
||||
|
5
Wifi Analyzer/.gitignore
vendored
Normal file
5
Wifi Analyzer/.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
.pio
|
||||
.vscode/.browse.c_cpp.db*
|
||||
.vscode/c_cpp_properties.json
|
||||
.vscode/launch.json
|
||||
.vscode/ipch
|
10
Wifi Analyzer/.vscode/extensions.json
vendored
Normal file
10
Wifi Analyzer/.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||
// for the documentation about the extensions.json format
|
||||
"recommendations": [
|
||||
"platformio.platformio-ide"
|
||||
],
|
||||
"unwantedRecommendations": [
|
||||
"ms-vscode.cpptools-extension-pack"
|
||||
]
|
||||
}
|
39
Wifi Analyzer/include/README
Normal file
39
Wifi Analyzer/include/README
Normal file
@ -0,0 +1,39 @@
|
||||
|
||||
This directory is intended for project header files.
|
||||
|
||||
A header file is a file containing C declarations and macro definitions
|
||||
to be shared between several project source files. You request the use of a
|
||||
header file in your project source file (C, C++, etc) located in `src` folder
|
||||
by including it, with the C preprocessing directive `#include'.
|
||||
|
||||
```src/main.c
|
||||
|
||||
#include "header.h"
|
||||
|
||||
int main (void)
|
||||
{
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Including a header file produces the same results as copying the header file
|
||||
into each source file that needs it. Such copying would be time-consuming
|
||||
and error-prone. With a header file, the related declarations appear
|
||||
in only one place. If they need to be changed, they can be changed in one
|
||||
place, and programs that include the header file will automatically use the
|
||||
new version when next recompiled. The header file eliminates the labor of
|
||||
finding and changing all the copies as well as the risk that a failure to
|
||||
find one copy will result in inconsistencies within a program.
|
||||
|
||||
In C, the usual convention is to give header files names that end with `.h'.
|
||||
It is most portable to use only letters, digits, dashes, and underscores in
|
||||
header file names, and at most one dot.
|
||||
|
||||
Read more about using header files in official GCC documentation:
|
||||
|
||||
* Include Syntax
|
||||
* Include Operation
|
||||
* Once-Only Headers
|
||||
* Computed Includes
|
||||
|
||||
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
|
46
Wifi Analyzer/lib/README
Normal file
46
Wifi Analyzer/lib/README
Normal file
@ -0,0 +1,46 @@
|
||||
|
||||
This directory is intended for project specific (private) libraries.
|
||||
PlatformIO will compile them to static libraries and link into executable file.
|
||||
|
||||
The source code of each library should be placed in a an own separate directory
|
||||
("lib/your_library_name/[here are source files]").
|
||||
|
||||
For example, see a structure of the following two libraries `Foo` and `Bar`:
|
||||
|
||||
|--lib
|
||||
| |
|
||||
| |--Bar
|
||||
| | |--docs
|
||||
| | |--examples
|
||||
| | |--src
|
||||
| | |- Bar.c
|
||||
| | |- Bar.h
|
||||
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
|
||||
| |
|
||||
| |--Foo
|
||||
| | |- Foo.c
|
||||
| | |- Foo.h
|
||||
| |
|
||||
| |- README --> THIS FILE
|
||||
|
|
||||
|- platformio.ini
|
||||
|--src
|
||||
|- main.c
|
||||
|
||||
and a contents of `src/main.c`:
|
||||
```
|
||||
#include <Foo.h>
|
||||
#include <Bar.h>
|
||||
|
||||
int main (void)
|
||||
{
|
||||
...
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
PlatformIO Library Dependency Finder will find automatically dependent
|
||||
libraries scanning project source files.
|
||||
|
||||
More information about PlatformIO Library Dependency Finder
|
||||
- https://docs.platformio.org/page/librarymanager/ldf.html
|
19
Wifi Analyzer/platformio.ini
Normal file
19
Wifi Analyzer/platformio.ini
Normal file
@ -0,0 +1,19 @@
|
||||
; PlatformIO Project Configuration File
|
||||
;
|
||||
; Build options: build flags, source filter
|
||||
; Upload options: custom upload port, speed and extra flags
|
||||
; Library options: dependencies, extra library storages
|
||||
; Advanced options: extra scripting
|
||||
;
|
||||
; Please visit documentation for the other options and examples
|
||||
; https://docs.platformio.org/page/projectconf.html
|
||||
|
||||
[env:esp32doit-devkit-v1]
|
||||
platform = espressif32
|
||||
board = esp32doit-devkit-v1
|
||||
framework = arduino
|
||||
monitor_speed = 115200
|
||||
lib_deps =
|
||||
WiFi
|
||||
ArduinoJson
|
||||
WebSocketsClient
|
48
Wifi Analyzer/src/main.cpp
Normal file
48
Wifi Analyzer/src/main.cpp
Normal file
@ -0,0 +1,48 @@
|
||||
#include <Arduino.h>
|
||||
#include <WiFi.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
const int scanIterations = 5;
|
||||
const int maxChannel = 14; // Maximum number of Wi-Fi channels in the 2.4 GHz band
|
||||
int channelUsage[maxChannel] = {0};
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.disconnect();
|
||||
delay(100);
|
||||
Serial.println("Setup complete. Starting Wi-Fi channel analysis.");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
Serial.println("Scanning...");
|
||||
|
||||
for (int iteration = 0; iteration < scanIterations; iteration++) {
|
||||
int numberOfNetworks = WiFi.scanNetworks();
|
||||
|
||||
for (int networkIndex = 0; networkIndex < numberOfNetworks; networkIndex++) {
|
||||
int channel = WiFi.channel(networkIndex);
|
||||
if (channel > 0 && channel <= maxChannel) {
|
||||
channelUsage[channel - 1]++;
|
||||
}
|
||||
}
|
||||
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
// Create a JSON object to store channel usage data
|
||||
StaticJsonDocument<256> jsonDocument;
|
||||
JsonObject channelUsageJson = jsonDocument.to<JsonObject>();
|
||||
|
||||
for (int channelIndex = 0; channelIndex < maxChannel; channelIndex++) {
|
||||
String channel = String(channelIndex + 1);
|
||||
channelUsageJson[channel] = channelUsage[channelIndex];
|
||||
channelUsage[channelIndex] = 0; // Reset channel usage counter for the next analysis
|
||||
}
|
||||
|
||||
// Serialize and print the JSON object
|
||||
Serial.println("Analysis complete. Channel usage:");
|
||||
serializeJsonPretty(channelUsageJson, Serial);
|
||||
Serial.println("\nRescanning in 5 seconds...");
|
||||
delay(5000);
|
||||
}
|
11
Wifi Analyzer/test/README
Normal file
11
Wifi Analyzer/test/README
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
This directory is intended for PlatformIO Test Runner and project tests.
|
||||
|
||||
Unit Testing is a software testing method by which individual units of
|
||||
source code, sets of one or more MCU program modules together with associated
|
||||
control data, usage procedures, and operating procedures, are tested to
|
||||
determine whether they are fit for use. Unit testing finds problems early
|
||||
in the development cycle.
|
||||
|
||||
More information about PlatformIO Unit Testing:
|
||||
- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
|
Loading…
Reference in New Issue
Block a user