aboutsummaryrefslogtreecommitdiffstats
path: root/apps/portal
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2022-09-20 09:24:27 +0200
committerivarlovlie <git@ivarlovlie.no>2022-09-20 09:24:27 +0200
commita9072370ca1eb9a5cce928b1d487db0f307edea6 (patch)
tree59c3c23df930a8b5f888dc7813923abf4ceefed4 /apps/portal
parent56fa963a1d63cbe0bf28e29e717cceaa417c45c1 (diff)
downloadgreatoffice-a9072370ca1eb9a5cce928b1d487db0f307edea6.tar.xz
greatoffice-a9072370ca1eb9a5cce928b1d487db0f307edea6.zip
feat: Move old apps into it's own directory
Diffstat (limited to 'apps/portal')
-rw-r--r--apps/portal/.version1
-rw-r--r--apps/portal/.version-dev1
-rw-r--r--apps/portal/CHANGELOG.md135
-rwxr-xr-xapps/portal/build_and_push.sh76
-rw-r--r--apps/portal/cliff.toml62
l---------apps/portal/src/_assets/preload.css1
l---------apps/portal/src/_assets/preload.js1
-rw-r--r--apps/portal/src/_assets/pwa/android-chrome-192x192.pngbin3291 -> 0 bytes
-rw-r--r--apps/portal/src/_assets/pwa/android-chrome-512x512.pngbin9687 -> 0 bytes
-rw-r--r--apps/portal/src/_assets/pwa/apple-touch-icon.pngbin2769 -> 0 bytes
-rw-r--r--apps/portal/src/_assets/pwa/browserconfig.xml9
-rw-r--r--apps/portal/src/_assets/pwa/favicon-16x16.pngbin636 -> 0 bytes
-rw-r--r--apps/portal/src/_assets/pwa/favicon-32x32.pngbin907 -> 0 bytes
-rw-r--r--apps/portal/src/_assets/pwa/favicon.icobin15086 -> 0 bytes
-rw-r--r--apps/portal/src/_assets/pwa/favicon.svg4
-rw-r--r--apps/portal/src/_assets/pwa/manifest.json28
-rw-r--r--apps/portal/src/_assets/pwa/mstile-144x144.pngbin3109 -> 0 bytes
-rw-r--r--apps/portal/src/_assets/pwa/mstile-150x150.pngbin3238 -> 0 bytes
-rw-r--r--apps/portal/src/_assets/pwa/mstile-310x150.pngbin3501 -> 0 bytes
-rw-r--r--apps/portal/src/_assets/pwa/mstile-310x310.pngbin6823 -> 0 bytes
-rw-r--r--apps/portal/src/_assets/pwa/mstile-70x70.pngbin2238 -> 0 bytes
-rw-r--r--apps/portal/src/_assets/pwa/safari-pinned-tab.svg50
-rw-r--r--apps/portal/src/app/components/user-menu.svelte70
-rw-r--r--apps/portal/src/app/index.d.ts48
-rw-r--r--apps/portal/src/app/index.scss27
-rw-r--r--apps/portal/src/app/index.svelte87
-rw-r--r--apps/portal/src/app/index.ts14
-rw-r--r--apps/portal/src/app/pages/_layout.svelte62
-rw-r--r--apps/portal/src/app/pages/_layout@loggedin.svelte75
-rw-r--r--apps/portal/src/app/pages/admin/index.svelte18
-rw-r--r--apps/portal/src/app/pages/forgot.svelte102
-rw-r--r--apps/portal/src/app/pages/home.svelte103
-rw-r--r--apps/portal/src/app/pages/login.svelte142
-rw-r--r--apps/portal/src/app/pages/profile/index.svelte167
-rw-r--r--apps/portal/src/app/pages/reset-password.svelte138
-rw-r--r--apps/portal/src/app/pages/sign-up.svelte131
-rw-r--r--apps/portal/src/index.html55
-rw-r--r--apps/portal/src/package.json24
-rw-r--r--apps/portal/src/pnpm-lock.yaml787
-rw-r--r--apps/portal/src/tsconfig.json27
-rw-r--r--apps/portal/src/vite.config.ts32
41 files changed, 0 insertions, 2477 deletions
diff --git a/apps/portal/.version b/apps/portal/.version
deleted file mode 100644
index 2a3638d..0000000
--- a/apps/portal/.version
+++ /dev/null
@@ -1 +0,0 @@
-v3-portal
diff --git a/apps/portal/.version-dev b/apps/portal/.version-dev
deleted file mode 100644
index d5c9e03..0000000
--- a/apps/portal/.version-dev
+++ /dev/null
@@ -1 +0,0 @@
-v24-portal-dev
diff --git a/apps/portal/CHANGELOG.md b/apps/portal/CHANGELOG.md
deleted file mode 100644
index 395fd25..0000000
--- a/apps/portal/CHANGELOG.md
+++ /dev/null
@@ -1,135 +0,0 @@
-# Changelog
-
-## [unreleased]
-
-### Bug Fixes
-
-- Correct path to BASE_DOMAIN
-
-### Miscellaneous Tasks
-
-- Bump version
-- Update CHANGELOG.md for v19-portal-dev
-
-## [unreleased]
-
-### Bug Fixes
-
-- Inherit radius on svg to align styling with other theme figure icons
-
-### Features
-
-- Work in progress more module data models
-- Add inital translation support
-- Add link to BASE_DOMAIN on every public page in portal
-- Centre guarded portal pages
-- Add link to BASE_DOMAIN on every public page in portal
-- Set a max width on the portal layout
-
-### Miscellaneous Tasks
-
-- Bump version
-- Update CHANGELOG.md for v10-projects-dev
-- Bump version
-- Update CHANGELOG.md for v8-frontpage-dev
-- Bump version
-- Update CHANGELOG.md for v7-frontpage-dev
-- Bump version
-- Update CHANGELOG.md for v9-projects-dev
-- Bump version
-- Update CHANGELOG.md for v8-projects-dev
-- Bump version
-- Update CHANGELOG.md for v18-portal-dev
-
-### Refactor
-
-- Use dev.greatoffice.life as BASE_DOMAIN while in development-phase
-- Remove all transitions on theme-switcher
-- Put pre.css inside of style tags so that we dont have to wait for the second request on pre.css to show the loader and theme
-- Temporarily disable user deletion from within projects
-
-## [unreleased]
-
-### Features
-
-- More work on portal
-- Implement new theme switcher component and backend
-
-### Miscellaneous Tasks
-
-- Bump version
-- Update CHANGELOG.md for v7-projects-dev
-- Bump version
-- Update CHANGELOG.md for v17-portal-dev
-
-## [unreleased]
-
-### Features
-
-- Seperate layout for docs
-- New frontpage
-- !WIP start implementation of svelte-query
-
-### Miscellaneous Tasks
-
-- Bump version
-- Update CHANGELOG.md for v6-frontpage-dev
-- Bump version
-- Update CHANGELOG.md for v5-frontpage-dev
-- Bump version
-- Update CHANGELOG.md for v4-frontpage-dev
-- Bump version
-- Bump version
-- Bump version
-- Update CHANGELOG.md for v41-server-dev
-- Bump version
-- Update CHANGELOG.md for v40-server-dev
-- Bump version
-- Update CHANGELOG.md for v39-server-dev
-- Bump version
-- Remove logging of quartz db host
-- Update CHANGELOG.md for v6-projects-dev
-- Bump version
-- Bump version
-- Bump version
-- Update CHANGELOG.md for v38-server-dev
-- Bump version
-- Update CHANGELOG.md for v22-server
-- Bump version
-- Update CHANGELOG.md for v16-portal-dev
-
-### Refactor
-
-- Update style on portal forms
-- Implement caching in VaultService and use VaultService instead of IOptions
-- Use Vault to get configuration
-- Use Vault to get configuration
-- Small changes on button style
-- Add a small box-shadow
-
-## [unreleased]
-
-### Bug Fixes
-
-- !WIP flickering dropdown on multi dropdowns with new focus strategy
-- Fix route matching when deciding which tab is open
-
-### Miscellaneous Tasks
-
-- Bump version
-- Bump version
-- Update CHANGELOG.md for v15-portal-dev
-
-### Refactor
-
-- Dont loose focus on search input when navigating results
-- Make optional base fields nullable
-- Remove text
-
-## [unreleased]
-
-### Miscellaneous Tasks
-
-- Bump version
-- Update CHANGELOG.md for v14-portal-dev
-
diff --git a/apps/portal/build_and_push.sh b/apps/portal/build_and_push.sh
deleted file mode 100755
index b3d827d..0000000
--- a/apps/portal/build_and_push.sh
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env bash
-
-set -Eueo pipefail
-
-APP_NAME="portal";
-CURRENT_DEV_VERSION=$(cat .version-dev)
-CURRENT_DEV_VERSION_INT=${CURRENT_DEV_VERSION//[!0-9]/}
-CURRENT_VERSION=$(cat .version)
-CURRENT_VERSION_INT=${CURRENT_VERSION//[!0-9]/}
-if [ ${1-prod} == "dev" ]; then
- NEW_VERSION="v$((CURRENT_DEV_VERSION_INT+1))-$APP_NAME-dev"
- OLD_VERSION=$CURRENT_DEV_VERSION
-else
- NEW_VERSION="v$((CURRENT_VERSION_INT+1))-$APP_NAME"
- OLD_VERSION=$CURRENT_VERSION
-fi
-# Check for uncommited changes and optionally commit them
-if [ "$(git status --untracked-files=no --porcelain)" ]; then
- echo "Unclean git tree! press CTRL+C to exit or press ENTER to commit and push to the default branch"
- read -n 1
-
- read -p "Enter commit message: " COMMIT_MESSAGE
- git add ../../
- git commit --quiet -m "$COMMIT_MESSAGE"
-fi
-
-if [ ${1-prod} == "dev" ]; then
- echo $NEW_VERSION >| .version-dev
- git add .version-dev
-else
- echo $NEW_VERSION >| .version
- git add .version
-fi
-
-echo "Starting build of $APP_NAME@$NEW_VERSION at $(date -u)..."
-echo
-
-git commit --quiet -m "chore(release): Bump version";
-
-read -p "Do you want to tag this build? (y/n) " -n 1 -r
-echo
-if [[ $REPLY =~ ^[Yy]$ ]]
-then
- read -p "Enter tag message (can be empty): " TAG_MESSAGE
-# commit_msg="chore(release): Update CHANGELOG.md for $NEW_VERSION"
-# git cliff -r ../../ $OLD_VERSION..HEAD --prepend CHANGELOG.md
-# git add CHANGELOG.md
-# git commit --quiet -m "$commit_msg";
- git tag -am "$TAG_MESSAGE" $NEW_VERSION
-fi
-
-read -p "Do you want to push the latest commits and tags to origin? (y/n) " -n 1 -r
-echo
-if [[ $REPLY =~ ^[Yy]$ ]]
-then
- echo "Pushing latest changes to remotes..."
- echo
- git push --quiet --follow-tags
-fi
-
-pushd src
-pnpm run build
-
-cd build
-echo "$NEW_VERSION" >version.txt
-
-
-if [ ${1-prod} == "dev" ]; then
- scp -r * contabo-fast-1:services/public/portal.dev.greatoffice.life/www
-else
- echo "Pushing to production in 10 sec, press CTRL+C to cancel"
- sleep 10
- scp -r * contabo-fast-1:services/public/portal.greatoffice.life/www
-fi
-
-popd
diff --git a/apps/portal/cliff.toml b/apps/portal/cliff.toml
deleted file mode 100644
index 7299951..0000000
--- a/apps/portal/cliff.toml
+++ /dev/null
@@ -1,62 +0,0 @@
-# configuration file for git-cliff (0.1.0)
-
-[changelog]
-# changelog header
-header = """
-# Changelog\n
-"""
-# template for the changelog body
-# https://tera.netlify.app/docs/#introduction
-body = """
-{% if version %}\
- ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
-{% else %}\
- ## [unreleased]
-{% endif %}\
-{% for group, commits in commits | group_by(attribute="group") %}
- ### {{ group | upper_first }}
- {% for commit in commits %}
- - {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}\
- {% endfor %}
-{% endfor %}\n
-"""
-# remove the leading and trailing whitespace from the template
-trim = true
-# changelog footer
-footer = """
-<!-- generated by git-cliff -->
-"""
-
-[git]
-# parse the commits based on https://www.conventionalcommits.org
-conventional_commits = true
-# filter out the commits that are not conventional
-filter_unconventional = true
-# regex for preprocessing the commit messages
-commit_preprocessors = [
- { pattern = "([ \\n])(([a-f0-9]{7})[a-f0-9]*)", replace = "${1}commit # [${3}](https://git.ivar.systems/greatoffice/commit/${2})" },
- { pattern = "https://git.ivar.systems/greatoffice/commit/([a-f0-9]{7})[a-f0-9]*", replace = "commit # [${1}](${0})" },
-]
-# regex for parsing and grouping commits
-commit_parsers = [
- { message = "^feat", group = "Features" },
- { message = "^fix", group = "Bug Fixes" },
- { message = "^doc", group = "Documentation" },
- { message = "^perf", group = "Performance" },
- { message = "^refactor", group = "Refactor" },
- { message = "^style", group = "Styling" },
- { message = "^test", group = "Testing" },
- { message = "^chore", group = "Miscellaneous Tasks" },
-]
-# filter out the commits that are not matched by commit parsers
-filter_commits = true
-# glob pattern for matching git tags
-tag_pattern = "v.*"
-# regex for skipping tags
-skip_tags = "v0.1.0-beta.1"
-# regex for ignoring tags
-ignore_tags = ""
-# sort the tags chronologically
-date_order = true
-# sort the commits inside sections by oldest/newest order
-sort_commits = "newest"
diff --git a/apps/portal/src/_assets/preload.css b/apps/portal/src/_assets/preload.css
deleted file mode 120000
index e248c5b..0000000
--- a/apps/portal/src/_assets/preload.css
+++ /dev/null
@@ -1 +0,0 @@
-/Users/ivarlovlie/i2r/greatoffice/apps/web-shared/src/assets/preload.css \ No newline at end of file
diff --git a/apps/portal/src/_assets/preload.js b/apps/portal/src/_assets/preload.js
deleted file mode 120000
index 3fa1cc7..0000000
--- a/apps/portal/src/_assets/preload.js
+++ /dev/null
@@ -1 +0,0 @@
-/Users/ivarlovlie/i2r/greatoffice/apps/web-shared/src/assets/preload.js \ No newline at end of file
diff --git a/apps/portal/src/_assets/pwa/android-chrome-192x192.png b/apps/portal/src/_assets/pwa/android-chrome-192x192.png
deleted file mode 100644
index 5c098bc..0000000
--- a/apps/portal/src/_assets/pwa/android-chrome-192x192.png
+++ /dev/null
Binary files differ
diff --git a/apps/portal/src/_assets/pwa/android-chrome-512x512.png b/apps/portal/src/_assets/pwa/android-chrome-512x512.png
deleted file mode 100644
index 973a1c3..0000000
--- a/apps/portal/src/_assets/pwa/android-chrome-512x512.png
+++ /dev/null
Binary files differ
diff --git a/apps/portal/src/_assets/pwa/apple-touch-icon.png b/apps/portal/src/_assets/pwa/apple-touch-icon.png
deleted file mode 100644
index b4d9773..0000000
--- a/apps/portal/src/_assets/pwa/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/apps/portal/src/_assets/pwa/browserconfig.xml b/apps/portal/src/_assets/pwa/browserconfig.xml
deleted file mode 100644
index b3930d0..0000000
--- a/apps/portal/src/_assets/pwa/browserconfig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<browserconfig>
- <msapplication>
- <tile>
- <square150x150logo src="/mstile-150x150.png"/>
- <TileColor>#da532c</TileColor>
- </tile>
- </msapplication>
-</browserconfig>
diff --git a/apps/portal/src/_assets/pwa/favicon-16x16.png b/apps/portal/src/_assets/pwa/favicon-16x16.png
deleted file mode 100644
index 5dde9f9..0000000
--- a/apps/portal/src/_assets/pwa/favicon-16x16.png
+++ /dev/null
Binary files differ
diff --git a/apps/portal/src/_assets/pwa/favicon-32x32.png b/apps/portal/src/_assets/pwa/favicon-32x32.png
deleted file mode 100644
index 9cef4c4..0000000
--- a/apps/portal/src/_assets/pwa/favicon-32x32.png
+++ /dev/null
Binary files differ
diff --git a/apps/portal/src/_assets/pwa/favicon.ico b/apps/portal/src/_assets/pwa/favicon.ico
deleted file mode 100644
index 89c7542..0000000
--- a/apps/portal/src/_assets/pwa/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/apps/portal/src/_assets/pwa/favicon.svg b/apps/portal/src/_assets/pwa/favicon.svg
deleted file mode 100644
index 964dbb8..0000000
--- a/apps/portal/src/_assets/pwa/favicon.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-stopwatch" viewBox="0 0 16 16">
- <path d="M8.5 5.6a.5.5 0 1 0-1 0v2.9h-3a.5.5 0 0 0 0 1H8a.5.5 0 0 0 .5-.5V5.6z"/>
- <path d="M6.5 1A.5.5 0 0 1 7 .5h2a.5.5 0 0 1 0 1v.57c1.36.196 2.594.78 3.584 1.64a.715.715 0 0 1 .012-.013l.354-.354-.354-.353a.5.5 0 0 1 .707-.708l1.414 1.415a.5.5 0 1 1-.707.707l-.353-.354-.354.354a.512.512 0 0 1-.013.012A7 7 0 1 1 7 2.071V1.5a.5.5 0 0 1-.5-.5zM8 3a6 6 0 1 0 .001 12A6 6 0 0 0 8 3z"/>
-</svg> \ No newline at end of file
diff --git a/apps/portal/src/_assets/pwa/manifest.json b/apps/portal/src/_assets/pwa/manifest.json
deleted file mode 100644
index 4c550fe..0000000
--- a/apps/portal/src/_assets/pwa/manifest.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "manifest_version": 2,
- "version": "0.1",
- "name": "Time Tracker",
- "short_name": "Time Tracker",
- "display": "standalone",
- "background_color": "#fff",
- "theme_color": "#4D3DF7",
- "start_url": ".",
- "orientation": "portrait",
- "icons": [
- {
- "src": "/favicon.svg",
- "purpose": "maskable any",
- "sizes": "any"
- },
- {
- "src": "/pwa/android-chrome-192x192.png",
- "sizes": "192x192",
- "type": "image/png"
- },
- {
- "src": "/pwa/android-chrome-512x512.png",
- "sizes": "512x512",
- "type": "image/png"
- }
- ]
-}
diff --git a/apps/portal/src/_assets/pwa/mstile-144x144.png b/apps/portal/src/_assets/pwa/mstile-144x144.png
deleted file mode 100644
index 84d94cb..0000000
--- a/apps/portal/src/_assets/pwa/mstile-144x144.png
+++ /dev/null
Binary files differ
diff --git a/apps/portal/src/_assets/pwa/mstile-150x150.png b/apps/portal/src/_assets/pwa/mstile-150x150.png
deleted file mode 100644
index b1398ae..0000000
--- a/apps/portal/src/_assets/pwa/mstile-150x150.png
+++ /dev/null
Binary files differ
diff --git a/apps/portal/src/_assets/pwa/mstile-310x150.png b/apps/portal/src/_assets/pwa/mstile-310x150.png
deleted file mode 100644
index 76b16a0..0000000
--- a/apps/portal/src/_assets/pwa/mstile-310x150.png
+++ /dev/null
Binary files differ
diff --git a/apps/portal/src/_assets/pwa/mstile-310x310.png b/apps/portal/src/_assets/pwa/mstile-310x310.png
deleted file mode 100644
index d8e4097..0000000
--- a/apps/portal/src/_assets/pwa/mstile-310x310.png
+++ /dev/null
Binary files differ
diff --git a/apps/portal/src/_assets/pwa/mstile-70x70.png b/apps/portal/src/_assets/pwa/mstile-70x70.png
deleted file mode 100644
index 0df1e8c..0000000
--- a/apps/portal/src/_assets/pwa/mstile-70x70.png
+++ /dev/null
Binary files differ
diff --git a/apps/portal/src/_assets/pwa/safari-pinned-tab.svg b/apps/portal/src/_assets/pwa/safari-pinned-tab.svg
deleted file mode 100644
index ba2220c..0000000
--- a/apps/portal/src/_assets/pwa/safari-pinned-tab.svg
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
- "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
- width="700.000000pt" height="700.000000pt" viewBox="0 0 700.000000 700.000000"
- preserveAspectRatio="xMidYMid meet">
-<metadata>
-Created by potrace 1.14, written by Peter Selinger 2001-2017
-</metadata>
-<g transform="translate(0.000000,700.000000) scale(0.100000,-0.100000)"
-fill="#000000" stroke="none">
-<path d="M3195 6780 c-116 -3 -211 -10 -226 -17 -39 -17 -105 -98 -116 -142
--19 -72 -2 -146 45 -202 26 -31 96 -69 131 -72 25 -2 31 -6 32 -27 1 -27 1
--198 0 -216 -1 -6 -47 -19 -103 -28 -160 -28 -451 -107 -533 -146 -11 -5 -51
--21 -90 -36 -60 -23 -246 -112 -325 -155 -431 -236 -834 -619 -1101 -1045
--207 -328 -364 -733 -423 -1089 -51 -307 -61 -583 -31 -875 26 -261 119 -615
-225 -861 185 -430 432 -773 800 -1108 75 -69 387 -301 405 -301 1 0 33 -18 70
--40 209 -128 602 -288 796 -325 12 -2 29 -7 39 -10 72 -23 273 -56 435 -73
-144 -14 601 -5 658 13 7 2 37 7 67 10 273 33 616 141 904 283 725 357 1275
-982 1542 1754 55 159 113 395 129 523 4 28 8 57 10 65 2 8 7 47 10 85 3 39 8
-93 10 120 6 66 6 327 0 390 -2 28 -7 82 -10 120 -3 39 -11 99 -16 135 -6 36
--13 79 -16 95 -15 98 -61 279 -103 405 -121 372 -298 694 -542 993 -27 32 -48
-61 -48 65 0 4 35 41 78 84 l77 76 90 -90 c53 -54 108 -99 134 -110 62 -28 130
--25 191 8 95 52 135 151 103 257 -13 46 -44 79 -362 397 -322 323 -351 349
--398 363 -148 44 -287 -61 -285 -215 1 -62 35 -118 126 -208 47 -47 86 -87 86
--90 0 -6 -91 -101 -132 -138 l-25 -23 -46 38 c-264 223 -584 405 -924 528 -92
-34 -320 100 -376 109 -15 3 -35 7 -45 10 -9 3 -34 7 -54 10 -86 13 -113 18
--117 22 -2 2 -4 56 -4 121 l0 118 29 9 c66 19 114 47 139 80 72 95 65 215 -18
-296 -58 56 -83 60 -402 63 -159 1 -380 0 -490 -3z m560 -1104 c224 -24 547
--99 670 -156 11 -5 56 -24 100 -41 90 -37 282 -134 306 -155 8 -8 19 -14 23
--14 13 0 192 -124 286 -199 97 -77 297 -270 364 -351 237 -288 405 -598 509
--941 30 -98 44 -157 72 -299 3 -14 8 -47 11 -75 3 -27 7 -56 10 -63 22 -69 21
--519 -1 -642 -1 -8 -6 -40 -10 -70 -4 -30 -9 -64 -11 -75 -2 -11 -7 -33 -10
--50 -3 -16 -14 -66 -26 -110 -11 -44 -21 -84 -22 -90 -18 -79 -93 -275 -154
--408 -39 -83 -158 -296 -171 -307 -3 -3 -26 -34 -50 -70 -116 -169 -312 -384
--466 -508 -38 -32 -78 -65 -89 -74 -25 -22 -229 -160 -281 -189 -177 -99 -405
--197 -570 -244 -126 -36 -305 -74 -375 -81 -19 -2 -48 -5 -65 -8 -121 -22
--509 -22 -618 0 -12 2 -42 6 -67 10 -369 45 -795 215 -1125 448 -192 135 -399
-326 -517 476 -23 30 -48 61 -55 67 -57 60 -227 336 -291 473 -64 135 -150 365
--167 444 -2 12 -6 30 -9 41 -28 120 -36 156 -41 193 -3 24 -7 53 -10 65 -32
-148 -38 552 -10 707 2 14 7 45 10 70 33 274 160 643 313 910 60 106 201 312
-232 340 3 3 23 28 45 55 22 28 85 96 140 151 347 352 768 590 1252 709 56 14
-118 27 137 30 20 2 61 9 93 14 32 6 92 13 133 17 41 3 76 7 77 8 6 5 368 -2
-428 -8z"/>
-<path d="M3423 4754 c-45 -17 -95 -61 -121 -109 -15 -27 -17 -93 -19 -650 -1
--341 -2 -641 -3 -666 l0 -47 -679 0 -679 -1 -49 -24 c-59 -30 -76 -49 -104
--112 -54 -122 23 -270 154 -293 23 -5 400 -8 837 -7 l795 1 42 22 c52 27 98
-82 112 136 8 29 10 273 9 826 -3 854 1 796 -59 867 -53 63 -153 87 -236 57z"/>
-</g>
-</svg>
diff --git a/apps/portal/src/app/components/user-menu.svelte b/apps/portal/src/app/components/user-menu.svelte
deleted file mode 100644
index b0cfc8a..0000000
--- a/apps/portal/src/app/components/user-menu.svelte
+++ /dev/null
@@ -1,70 +0,0 @@
-<script>
- import {end_session} from "$shared/lib/session";
- import {onMount} from "svelte";
- import {Menu, MenuItem, MenuItemSeparator} from "$shared/components/menu";
- import {replace} from "svelte-spa-router";
-
- let userMenuTrigger;
- let showUserMenu = false;
-
- export let avatar = "";
- export let name;
- export let secondary = "";
- let userMenuId;
-
- async function on_logout() {
- await end_session(() => {
- replace("/login");
- });
- }
-
- onMount(() => {
- userMenuTrigger = document.getElementById("open-user-menu");
- });
-</script>
-
-<button class="reset user-menu-control"
- id="open-user-menu"
- aria-controls="{userMenuId}"
- on:click={() => showUserMenu = true}>
- {#if avatar}
- <figure class="user-menu-control__img-wrapper radius-50%">
- <img class="user-menu-control__img"
- src="{avatar}"
- alt="Avatar">
- </figure>
- {/if}
-
- <div class="margin-x-xs user-menu__meta">
- <p class="user-menu__meta-title text-sm line-height-1 padding-y-xxxxs font-semibold color-contrast-higher text-truncate">{name}</p>
- {#if secondary}
- <p class="text-xs color-contrast-medium line-height-1 padding-bottom-xxxxs">{secondary}</p>
- {/if}
- </div>
-
- <svg class="icon icon--xxs"
- aria-hidden="true"
- viewBox="0 0 12 12">
- <polyline points="1 4 6 9 11 4"
- fill="none"
- stroke="currentColor"
- stroke-linecap="round"
- stroke-linejoin="round"
- stroke-width="2"/>
- </svg>
-</button>
-
-<Menu trigger={userMenuTrigger}
- bind:id={userMenuId}
- bind:show="{showUserMenu}">
- <div slot="options">
- <MenuItem on:click={() => replace("/profile")}>
- <span>Profile</span>
- </MenuItem>
- <MenuItemSeparator/>
- <MenuItem danger="true"
- on:click={() => on_logout()}>
- Logout
- </MenuItem>
- </div>
-</Menu>
diff --git a/apps/portal/src/app/index.d.ts b/apps/portal/src/app/index.d.ts
deleted file mode 100644
index c044583..0000000
--- a/apps/portal/src/app/index.d.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Use this file to declare any custom file extensions for importing */
-/* Use this folder to also add/extend a package d.ts file, if needed. */
-
-/* CSS MODULES */
-declare module "*.module.css" {
- const classes: { [key: string]: string };
- export default classes;
-}
-declare module "*.module.scss" {
- const classes: { [key: string]: string };
- export default classes;
-}
-
-/* CSS */
-declare module "*.css";
-declare module "*.scss";
-
-/* IMAGES */
-declare module "*.svg" {
- const ref: string;
- export default ref;
-}
-declare module "*.bmp" {
- const ref: string;
- export default ref;
-}
-declare module "*.gif" {
- const ref: string;
- export default ref;
-}
-declare module "*.jpg" {
- const ref: string;
- export default ref;
-}
-declare module "*.jpeg" {
- const ref: string;
- export default ref;
-}
-declare module "*.png" {
- const ref: string;
- export default ref;
-}
-
-/* CUSTOM: ADD YOUR OWN HERE */
-declare module "*.svelte" {
- const value: any;
- export default value;
-}
diff --git a/apps/portal/src/app/index.scss b/apps/portal/src/app/index.scss
deleted file mode 100644
index 718adf2..0000000
--- a/apps/portal/src/app/index.scss
+++ /dev/null
@@ -1,27 +0,0 @@
-@use '../../web-shared/src/styles/base'as * with ($breakpoints: ('xs': "768px",
- 'sm': "768px",
- 'md': "1200px",
- 'lg': "1200px",
- 'xl': "1600px",
- ),
- $grid-columns: 12);
-
-@use '../../web-shared/src/styles/custom-style/colors';
-@use '../../web-shared/src/styles/custom-style/spacing';
-@use '../../web-shared/src/styles/custom-style/shared-styles';
-@use '../../web-shared/src/styles/custom-style/typography';
-@use '../../web-shared/src/styles/custom-style/icons';
-@use '../../web-shared/src/styles/custom-style/buttons';
-@use '../../web-shared/src/styles/custom-style/forms';
-@use '../../web-shared/src/styles/custom-style/util';
-
-@use '../../web-shared/src/styles/components/radios-checkboxes';
-@use '../../web-shared/src/styles/components/btn-states';
-@use '../../web-shared/src/styles/components/alert';
-@use '../../web-shared/src/styles/components/details';
-@use '../../web-shared/src/styles/components/light-dark-switch';
-@use '../../web-shared/src/styles/components/link-card';
-@use '../../web-shared/src/styles/components/auto-sized-grid';
-@use '../../web-shared/src/styles/components/menu';
-@use '../../web-shared/src/styles/components/user-menu';
-@use '../../web-shared/src/styles/components/breadcrumbs';
diff --git a/apps/portal/src/app/index.svelte b/apps/portal/src/app/index.svelte
deleted file mode 100644
index af2b6d0..0000000
--- a/apps/portal/src/app/index.svelte
+++ /dev/null
@@ -1,87 +0,0 @@
-<svelte:options immutable={true}/>
-<svelte:window bind:online={online}/>
-
-<script>
- import Router, {replace} from "svelte-spa-router";
- import {wrap} from "svelte-spa-router/wrap";
- import {is_active} from "$shared/lib/session";
- import SignUp from "$app/pages/sign-up.svelte";
- import Login from "$app/pages/login.svelte";
- import Forgot from "$app/pages/forgot.svelte";
- import Reset from "$app/pages/reset-password.svelte";
- import Home from "$app/pages/home.svelte";
- import ProfileHome from "$app/pages/profile/index.svelte";
- import AdminHome from "$app/pages/admin/index.svelte";
- import PreHeader from "$shared/components/pre-header.svelte";
-
- let online = true;
-
- const publicRoutes = ["/login", "/signup", "/reset-password", "/forgot"];
- const guardedRoutes = ["/", "/home", "/profile", "/admin"];
-
- async function user_is_logged_in(event) {
- const isActive = await is_active();
- if (!isActive && !publicRoutes.includes(event.route)) {
- return false;
- }
- if (isActive && !guardedRoutes.includes(event.route)) {
- await replace("/");
- }
- return true;
- }
-
- function route_guarded(event) {
- if (!publicRoutes.includes(event.detail.route)) {
- replace("/login");
- }
- }
-
- const routes = {
- "/login": wrap({
- component: Login,
- conditions: [user_is_logged_in],
- }),
- "/home": wrap({
- component: Home,
- conditions: [user_is_logged_in],
- }),
- "/admin": wrap({
- component: AdminHome,
- conditions: [user_is_logged_in],
- }),
- "/profile": wrap({
- component: ProfileHome,
- conditions: [user_is_logged_in],
- }),
- "/": wrap({
- component: Home,
- conditions: [user_is_logged_in],
- }),
- "/signup": wrap({
- component: SignUp,
- conditions: [user_is_logged_in],
- }),
- "/reset-password": wrap({
- component: Reset,
- conditions: [user_is_logged_in],
- }),
- "/forgot": wrap({
- component: Forgot,
- conditions: [user_is_logged_in],
- })
- };
-</script>
-
-<PreHeader show="{!online}">You seem to be offline, please check your internet connection.</PreHeader>
-
-<Router
- {routes}
- restoreScrollState={true}
- on:conditionsFailed={route_guarded}
- on:routeLoading={() => {
- document.getElementById("loader").style.display = "inline-block";
- }}
- on:routeLoaded={() => {
- document.getElementById("loader").style.display = "none";
- }}
-/>
diff --git a/apps/portal/src/app/index.ts b/apps/portal/src/app/index.ts
deleted file mode 100644
index 0bfb30d..0000000
--- a/apps/portal/src/app/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import App from "./index.svelte";
-import "./index.scss";
-import {is_debug, is_development} from "$shared/lib/configuration";
-import {noop} from "$shared/lib/helpers";
-
-if (!is_development() && !is_debug()) {
- console.log("%c Production; Suppressing logs", "background-color:yellow;color:black;font-size:18px;");
- console.log = noop;
-}
-
-// @ts-ignore
-export default new App({
- target: document.getElementById("root"),
-});
diff --git a/apps/portal/src/app/pages/_layout.svelte b/apps/portal/src/app/pages/_layout.svelte
deleted file mode 100644
index 8c75cb9..0000000
--- a/apps/portal/src/app/pages/_layout.svelte
+++ /dev/null
@@ -1,62 +0,0 @@
-<script>
- import BlowoutToolbelt from "$shared/components/blowout-toolbelt.svelte";
-</script>
-
-<style>
- #decoration {
- position: absolute;
- top: 0;
- left: 0;
- pointer-events: none;
- width: 100%;
- height: 100%;
- overflow: hidden;
- z-index: 1;
- }
-
- #decoration svg {
- position: absolute;
- top: 0;
- left: 50%;
- -webkit-transform: translateX(-50%);
- transform: translateX(-50%);
- width: 134%;
- min-width: 1280px;
- max-width: 1920px;
- height: auto;
- }
-</style>
-<BlowoutToolbelt/>
-
-<main class="container-fluid padding-x-xs padding-x-xxl@xs padding-y-md padding-y-lg@md max-width-sm">
- <div class="z-index-2 position-relative">
- <slot/>
- </div>
-
- <figure id="decoration"
- class="z-index-1"
- aria-hidden="true">
- <svg class="color-contrast-higher opacity-10%"
- viewBox="0 0 1920 450"
- fill="none">
- <g stroke="currentColor"
- stroke-width="2"
- stroke-linejoin="round"
- stroke-linecap="round">
- <path d="M1449 94.9993V3L1354 48.9995L1259 3V94.9993L1354 140.999L1449 94.9993Z"/>
- <path d="M1639 94.9993V3L1544 48.9995L1449 3V94.9993L1544 140.999L1639 94.9993Z"/>
- <path d="M1354 49.0002V141"/>
- <path d="M1544 49.0002V141"/>
- <path d="M1449 94.9995L1544 140.999L1449 186.999L1354 140.999L1449 94.9995Z"/>
- <path d="M1544 141V232.999L1449 278.999L1354 232.999V141"/>
- <path d="M1449 187V279"/>
- <path d="M1544 264L1639 310L1544 355.999L1449 310L1544 264Z"/>
- <path d="M1639 310V402L1544 447.999L1449 402V310"/>
- <path d="M1544 356.001V448"/>
- <path d="M1639 94.9995L1734 140.999L1639 186.999L1544 140.999L1639 94.9995Z"/>
- <path d="M1734 141V232.999L1639 278.999L1544 232.999V141"/>
- <path d="M1639 187V279"/>
- </g>
- </svg>
- </figure>
-</main>
diff --git a/apps/portal/src/app/pages/_layout@loggedin.svelte b/apps/portal/src/app/pages/_layout@loggedin.svelte
deleted file mode 100644
index 44e2e4a..0000000
--- a/apps/portal/src/app/pages/_layout@loggedin.svelte
+++ /dev/null
@@ -1,75 +0,0 @@
-<script>
- import BlowoutToolbelt from "$shared/components/blowout-toolbelt.svelte";
- import {end_session, get_session_data} from "$shared/lib/session";
- import {replace} from "svelte-spa-router";
-
- const session = get_session_data();
-</script>
-
-<style>
- #decoration {
- position: absolute;
- top: 0;
- left: 0;
- pointer-events: none;
- width: 100%;
- height: 100%;
- overflow: hidden;
- z-index: 1;
- }
-
- #decoration svg {
- position: absolute;
- top: 0;
- left: 50%;
- -webkit-transform: translateX(-50%);
- transform: translateX(-50%);
- width: 134%;
- min-width: 1280px;
- max-width: 1920px;
- height: auto;
- }
-</style>
-<BlowoutToolbelt/>
-<main class="container max-width-xl padding-x-xs padding-x-xxl@xs padding-y-md padding-y-lg@md">
- <div class="z-index-2 position-relative">
- <slot/>
- </div>
-
- <div class="flex flex-row gap-xs position-fixed left-0 top-0 margin-md z-index-2">
- <span on:click={async () => {
- if (confirm("Are you sure?")) await end_session(() => {
- replace("/login");
- })
- }} class="btn btn--sm">
- Logout
- </span>
- </div>
-
- <figure id="decoration"
- class="z-index-1"
- aria-hidden="true">
- <svg class="color-contrast-higher opacity-10%"
- viewBox="0 0 1920 450"
- fill="none">
- <g stroke="currentColor"
- stroke-width="2"
- stroke-linejoin="round"
- stroke-linecap="round">
- <path d="M1449 94.9993V3L1354 48.9995L1259 3V94.9993L1354 140.999L1449 94.9993Z"/>
- <path d="M1639 94.9993V3L1544 48.9995L1449 3V94.9993L1544 140.999L1639 94.9993Z"/>
- <path d="M1354 49.0002V141"/>
- <path d="M1544 49.0002V141"/>
- <path d="M1449 94.9995L1544 140.999L1449 186.999L1354 140.999L1449 94.9995Z"/>
- <path d="M1544 141V232.999L1449 278.999L1354 232.999V141"/>
- <path d="M1449 187V279"/>
- <path d="M1544 264L1639 310L1544 355.999L1449 310L1544 264Z"/>
- <path d="M1639 310V402L1544 447.999L1449 402V310"/>
- <path d="M1544 356.001V448"/>
- <path d="M1639 94.9995L1734 140.999L1639 186.999L1544 140.999L1639 94.9995Z"/>
- <path d="M1734 141V232.999L1639 278.999L1544 232.999V141"/>
- <path d="M1639 187V279"/>
- </g>
- </svg>
- </figure>
-</main>
diff --git a/apps/portal/src/app/pages/admin/index.svelte b/apps/portal/src/app/pages/admin/index.svelte
deleted file mode 100644
index f9b91d2..0000000
--- a/apps/portal/src/app/pages/admin/index.svelte
+++ /dev/null
@@ -1,18 +0,0 @@
-<script>
- import Layout from "../_layout@loggedin.svelte";
- import {Bread, Crumb} from "$shared/components/breadcrumb";
- import {push} from "svelte-spa-router";
-
-</script>
-
-<Layout>
- <Bread>
- <Crumb name="Home"
- withArrow="true"
- isLink="true"
- on:click={() => push("/")}/>
- <Crumb name="Organisation"/>
- </Bread>
-
- <main class="max-width-sm"></main>
-</Layout>
diff --git a/apps/portal/src/app/pages/forgot.svelte b/apps/portal/src/app/pages/forgot.svelte
deleted file mode 100644
index 156deab..0000000
--- a/apps/portal/src/app/pages/forgot.svelte
+++ /dev/null
@@ -1,102 +0,0 @@
-<script>
- import {onMount} from "svelte";
- import {link} from "svelte-spa-router";
- import {create_forgot_password_request} from "$shared/lib/api/user";
- import {is_email} from "$shared/lib/helpers";
- import Alert from "$shared/components/alert.svelte";
- import Button from "$shared/components/button.svelte";
- import Tile from "$shared/components/tile.svelte";
- import Layout from "./_layout.svelte";
-
- let isLoading = false;
- let username;
-
- const alert = {
- title: "",
- type: "",
- message: "",
- isVisible: false,
- show(type, obj) {
- alert.title = obj.title;
- alert.message = obj.text;
- alert.type = type;
- alert.isVisible = true;
- isLoading = false;
- },
- hide() {
- alert.isVisible = false;
- alert.title = "";
- alert.message = "";
- alert.type = "";
- isLoading = false;
- },
- };
-
- function is_valid() {
- return is_email(username);
- }
-
- async function submit_form() {
- if (isLoading) {
- return;
- }
- if (is_valid()) {
- isLoading = true;
- const response = await create_forgot_password_request(username);
- if (response.ok) {
- alert.show("success", {
- title: "Request is sent",
- text: "If we find an account associated with this email address, you will receive an email with a reset link very soon.",
- });
- } else {
- console.error(response.data);
- alert.show("error", {
- title: response.data?.title ?? "An error occured",
- text: response.data?.text ?? "Please try again soon",
- });
- }
- }
- }
-
- onMount(() => {
- document.addEventListener("DOMContentLoaded", () => {
- document.getElementById("email-address").focus();
- });
- });
-</script>
-
-<Layout>
- <Tile>
- <form on:submit|preventDefault={submit_form}
- class="max-width-xxs">
- <fieldset>
- <legend class="form-legend">
- <span class="margin-bottom-xs text-xl">Send reset link</span> <br/>
- <span class="text-sm">... or <a href="/login"
- use:link>log in</a></span>
- </legend>
- <div class="margin-bottom-xs">
- <p>Provide your email address, and we'll send you a link to set your new password.</p>
- </div>
- <div class="margin-bottom-xxs max-width-xxs">
- <Alert visible={alert.isVisible}
- title={alert.title}
- message={alert.message}
- type={alert.type}/>
- </div>
- <div class="margin-bottom-xs">
- <input type="email"
- id="email-address"
- placeholder="Email address"
- class="form-control width-100%"
- bind:value={username}/>
- </div>
- <div class="flex justify-end">
- <Button text="Send reset link"
- type="primary"
- loading={isLoading}/>
- </div>
- </fieldset>
- </form>
- </Tile>
-</Layout>
diff --git a/apps/portal/src/app/pages/home.svelte b/apps/portal/src/app/pages/home.svelte
deleted file mode 100644
index 0e325ee..0000000
--- a/apps/portal/src/app/pages/home.svelte
+++ /dev/null
@@ -1,103 +0,0 @@
-<script>
- import {projects_base} from "$shared/lib/configuration";
- import {get_session_data} from "$shared/lib/session";
- import {push} from "svelte-spa-router";
- import Layout from "./_layout@loggedin.svelte";
- import LinkCard from "$shared/components/link-card.svelte";
- import Alert from "$shared/components/alert.svelte";
- import {UserIcon, UsersIcon, WatchIcon, SendIcon, ListIcon} from "svelte-feather-icons";
-
- let showUsers = true;
- const session = get_session_data();
-</script>
-
-<Layout>
- <div class="grid gap-md">
- <div class="row">
- <Alert closeable="true"
- closeableCooldown="~"
- id="welcome-note"
- title="Hello {session.profile?.username}"
- message="This is your portal to Greatoffice, here you will find all your great apps and management options."/>
- </div>
- <div class="row">
- <h2 class="margin-bottom-xs">Apps</h2>
- <div class="grid-auto-md gap-sm">
- <LinkCard name="Projects"
- description="The home for your projects"
- text="Open in a new tab"
- title="Open Projects"
- href="{projects_base()}">
- <figure slot="icon">
- <div class="bg-primary bg-opacity-10% padding-xs border-left border-primary border-2">
- <WatchIcon size="42"
- class="color-primary"
- strokeWidth="1.2"/>
- </div>
- </figure>
- </LinkCard>
- <LinkCard name="Tickets"
- description="The home for your tickets"
- class="c-disabled user-select-none"
- text="Coming soon"
- title="Open Tickets"
- href="{projects_base()}">
- <figure slot="icon">
- <div class="bg-primary bg-opacity-10% padding-xs border-left border-primary border-2">
- <SendIcon size="42"
- class="color-primary"
- strokeWidth="1.2"/>
- </div>
- </figure>
- </LinkCard>
- <LinkCard name="Todo"
- description="The home for your todos"
- class="c-disabled user-select-none"
- text="Coming soon"
- title="Open Todo"
- href="{projects_base()}">
- <figure slot="icon">
- <div class="bg-primary bg-opacity-10% padding-xs border-left border-primary border-2">
- <ListIcon size="42"
- class="color-primary"
- strokeWidth="1.2"/>
- </div>
- </figure>
- </LinkCard>
- </div>
- </div>
- <div class="row">
- <h2 class="margin-bottom-xs">Manage</h2>
- <div class="grid-auto-md gap-sm">
- <LinkCard name="Profile"
- description="Manage your profile"
- text="Open"
- title="Go to your profile management page"
- on:click={() => push("/profile")}>
- <figure slot="icon">
- <div class="bg-primary bg-opacity-10% padding-xs border-left border-primary border-2">
- <UserIcon size="42"
- class="color-primary"
- strokeWidth="1.2"/>
- </div>
- </figure>
- </LinkCard>
- {#if showUsers}
- <LinkCard name="Organisation"
- description="Manage your organisation"
- title="Go to your organisations management page"
- text="Open"
- on:click={() => push("/admin")}>
- <figure slot="icon">
- <div class="bg-primary bg-opacity-10% padding-xs border-left border-primary border-2">
- <UsersIcon size="42"
- class="color-primary"
- strokeWidth="1.2"/>
- </div>
- </figure>
- </LinkCard>
- {/if}
- </div>
- </div>
- </div>
-</Layout>
diff --git a/apps/portal/src/app/pages/login.svelte b/apps/portal/src/app/pages/login.svelte
deleted file mode 100644
index 1ca6b61..0000000
--- a/apps/portal/src/app/pages/login.svelte
+++ /dev/null
@@ -1,142 +0,0 @@
-<script>
- import {onMount} from "svelte";
- import {link, replace, querystring} from "svelte-spa-router";
- import {api_base, IconNames, frontpage_base} from "$shared/lib/configuration";
- import Button from "$shared/components/button.svelte";
- import Alert from "$shared/components/alert.svelte";
- import Tile from "$shared/components/tile.svelte";
- import {login} from "$shared/lib/api/user";
- import {is_email} from "$shared/lib/helpers";
- import Layout from "./_layout.svelte";
-
- const loginForm = {
- loading: false,
- values: {
- username: "",
- password: "",
- persist: true
- },
- alert: {
- title: "",
- type: "",
- message: "",
- isVisible: false,
- show(type, obj) {
- loginForm.alert.title = obj.title;
- loginForm.alert.message = obj.text;
- loginForm.alert.type = type;
- loginForm.alert.isVisible = true;
- loginForm.loading = false;
- },
- hide() {
- loginForm.alert.isVisible = false;
- loginForm.alert.title = "";
- loginForm.alert.message = "";
- loginForm.alert.type = "";
- },
- },
- is_valid() {
- return is_email(loginForm.values.username) && loginForm.values.password.length > 0;
- },
- async submit_form() {
- if (loginForm.loading) {
- return;
- }
- if (loginForm.is_valid()) {
- loginForm.alert.hide();
- loginForm.loading = true;
- try {
- const response = await login(loginForm.values);
- if (response.ok) {
- await replace("#/home");
- } else {
- if (response.data.title || response.data.text) {
- loginForm.alert.show("error", {
- title: response.data.title ?? "",
- text: response.data.text ?? "",
- });
- } else {
- loginForm.alert.show("error", {
- title: "An unknown error occured",
- text: "Try again soon",
- });
- }
- }
- } catch (e) {
- loginForm.alert.show("error", {
- title: "An error occured",
- text: "Could not connect to server, please check your internet connection",
- });
- }
- } else {
- loginForm.alert.show("error", {
- title: "Invalid form",
- });
- }
- },
- };
-
- onMount(() => {
- if ($querystring === "deleted") {
- loginForm.alert.show("info", {
- title: "Account deleted",
- text: "Your account and all its data was successfully deleted.",
- });
- }
- if ($querystring === "expired") {
- loginForm.alert.show("info", {
- title: "Session expired",
- text: "Your session has expired, feel free to log in again.",
- });
- }
- });
-</script>
-
-<Layout>
- <a href="{frontpage_base()}" class="block margin-bottom-xs">Go to {frontpage_base()}</a>
- <Tile>
- <form on:submit|preventDefault={loginForm.submit_form}
- class="max-width-xxs">
- <fieldset>
- <legend class="form-legend">
- <span class="margin-bottom-xs text-xl">Log into your account</span>
- <br/>
- <span class="text-sm">... or <a href="/signup"
- use:link>create a new one</a></span>
- </legend>
- <div class="margin-bottom-xxs max-width-xxs">
- <Alert visible={loginForm.alert.isVisible}
- title={loginForm.alert.title}
- message={loginForm.alert.message}
- type={loginForm.alert.type}/>
- </div>
- <div class="margin-bottom-xxs">
- <input type="email"
- placeholder="Email address"
- class="form-control width-100%"
- id="username"
- bind:value={loginForm.values.username}/>
- </div>
- <div class="margin-bottom-xxs">
- <input type="password"
- placeholder="Password"
- id="password"
- class="form-control width-100%"
- bind:value={loginForm.values.password}/>
- <div class="flex justify-end">
- <a tabindex="-1"
- class="text-sm"
- href="/forgot"
- use:link>Reset password</a>
- </div>
- </div>
- <div class="flex justify-between">
- <Button text="Login"
- type="submit"
- variant="primary"
- loading={loginForm.loading}/>
- </div>
- </fieldset>
- </form>
- </Tile>
-</Layout>
diff --git a/apps/portal/src/app/pages/profile/index.svelte b/apps/portal/src/app/pages/profile/index.svelte
deleted file mode 100644
index a7291d6..0000000
--- a/apps/portal/src/app/pages/profile/index.svelte
+++ /dev/null
@@ -1,167 +0,0 @@
-<script>
- import {push} from "svelte-spa-router";
- import {Bread, Crumb} from "$shared/components/breadcrumb/index";
- import Layout from "$app/pages/_layout@loggedin.svelte";
- import {update_profile} from "$shared/lib/api/user";
- import Alert from "$shared/components/alert.svelte";
- import Button from "$shared/components/button.svelte";
- import {is_email} from "$shared/lib/helpers";
- import {api_base} from "$shared/lib/configuration";
- import {get_session_data} from "$shared/lib/session";
-
- const archiveLink = api_base("_/account/archive");
-
- let modal;
- let understands = false;
-
- let formIsLoading = false;
- let formError;
-
- let username = get_session_data()?.profile.username;
- let usernameFieldMessage;
- let usernameFieldMessageClass = "color-error";
-
- let password;
- let passwordFieldMessage;
- let passwordFieldMessageClass = "color-error";
-
- async function submit_form(e) {
- e.preventDefault();
- if (!username && !password) {
- console.error("Not submitting because both values is empty");
- return;
- }
-
- usernameFieldMessage = "";
- passwordFieldMessage = "";
-
- if (username && !is_email(username)) {
- usernameFieldMessage = "Username has to be a valid email";
- return;
- }
-
- if (password && password?.length < 6) {
- passwordFieldMessage = "The new password must contain at least 6 characters";
- return;
- }
-
- formIsLoading = true;
-
- const response = await update_profile({
- username,
- password,
- });
-
- formIsLoading = false;
-
- if (response.ok) {
- if (password) {
- passwordFieldMessage = "Successfully updated";
- passwordFieldMessageClass = "color-success";
- password = "";
- }
- if (username) {
- usernameFieldMessage = "Successfully updated";
- usernameFieldMessageClass = "color-success";
- password = "";
- }
- } else {
- formError = response.data.title ?? "An unknown error occured";
- }
- }
-
- async function handle_delete_account_button_click() {
- alert("Not implemented");
- return;
- if (understands && confirm("Are you absolutely sure that you want to delete your account?")) {
- }
- }
-
- export const functions = {
- open() {
- modal.open();
- },
- close() {
- // modal.close();
- },
- };
-</script>
-
-<Layout>
- <Bread>
- <Crumb name="Home"
- withArrow="true"
- isLink="true"
- on:click={() => push("/")}/>
- <Crumb name="Profile"/>
- </Bread>
-
- <main class="max-width-sm">
- <section class="margin-bottom-md">
- <p class="text-md margin-bottom-sm">Update your information</p>
- <form on:submit={submit_form}
- autocomplete="new-password">
- {#if formError}
- <small class="color-danger">{formError}</small>
- {/if}
- <div class="margin-bottom-sm">
- <label for="email"
- class="form-label margin-bottom-xxs">New username</label>
- <input type="email"
- class="form-control width-100%"
- id="email"
- placeholder={username}
- bind:value={username}/>
- {#if usernameFieldMessage}
- <small class={usernameFieldMessageClass}>{usernameFieldMessage}</small>
- {/if}
- </div>
- <div class="margin-bottom-sm">
- <label for="password"
- class="form-label margin-bottom-xxs">New password</label>
- <input type="password"
- class="form-control width-100%"
- id="password"
- bind:value={password}/>
- {#if passwordFieldMessage}
- <small class={passwordFieldMessageClass}>{passwordFieldMessage}</small>
- {/if}
- </div>
- <div class="flex justify-end">
- <Button text="Save"
- on:click={submit_form}
- variant="primary"
- loading={formIsLoading}/>
- </div>
- </form>
- </section>
- <section class="margin-bottom-md">
- <p class="text-md margin-bottom-sm">Download your data</p>
- <a class="btn btn--subtle"
- href={archiveLink}
- download>Click here to download your data</a>
- </section>
- <section>
- <p class="text-md margin-bottom-sm">Delete account</p>
- <div class="margin-bottom-sm">
- <Alert
- message="Deleting your account and data means that all of your data (entries, categories, etc.) will be unrecoverable forever.<br>You should probably download your data before continuing."
- type="info"
- />
- </div>
- <div class="form-check margin-bottom-sm">
- <input type="checkbox"
- class="checkbox"
- id="the-consequences"
- bind:checked={understands}/>
- <label for="the-consequences">I understand the consequences of deleting my account and data.</label>
- </div>
- <div class="flex justify-end">
- <Button text="Delete everything"
- variant="accent"
- disabled={!understands}
- on:click={handle_delete_account_button_click}/>
- </div>
- </section>
- </main>
-</Layout>
diff --git a/apps/portal/src/app/pages/reset-password.svelte b/apps/portal/src/app/pages/reset-password.svelte
deleted file mode 100644
index dabf5c9..0000000
--- a/apps/portal/src/app/pages/reset-password.svelte
+++ /dev/null
@@ -1,138 +0,0 @@
-<script>
- import {querystring, link} from "svelte-spa-router";
- import {check_forgot_password_request, fulfill_forgot_password_request} from "$shared/lib/api/user";
- import Alert from "$shared/components/alert.svelte";
- import Button from "$shared/components/button.svelte";
- import Tile from "$shared/components/tile.svelte";
- import Layout from "./_layout.svelte";
-
- const requestId = new URLSearchParams($querystring).get("id");
- let isLoading = false;
- let newPassword;
- let newPasswordError;
- let alert = {
- title: "",
- type: "",
- message: "",
- isVisible: false,
- show(type, obj) {
- alert.title = obj.title;
- alert.message = obj.text;
- alert.type = type;
- alert.isVisible = true;
- isLoading = false;
- },
- hide() {
- alert.isVisible = false;
- alert.title = "";
- alert.message = "";
- alert.type = "";
- isLoading = false;
- },
- };
-
- function is_valid() {
- let isValid = true;
- if (!newPassword.length > 5) {
- newPasswordError = "The new password must be at least 5 characters";
- isValid = false;
- }
- return isValid;
- }
-
- async function submit() {
- if (isLoading) {
- return;
- }
- if (is_valid()) {
- isLoading = true;
- const response = await fulfill_forgot_password_request(requestId, newPassword);
- if (response.ok) {
- alert.show("success", {
- title: "Your new password is set",
- text: "<a href='/#/login'>Click here to log in</a>",
- });
- } else {
- console.error(response.data);
- alert.show("error", {
- title: response.data?.title ?? "An error occured",
- text: response.data?.text ?? "Please try again soon",
- });
- }
- }
- }
-
- async function is_valid_password_reset_request() {
- const response = await check_forgot_password_request(requestId);
- if (response.ok) {
- return response.data === true;
- }
- return false;
- }
-</script>
-
-<Layout>
- <Tile>
- <form on:submit|preventDefault={submit}
- class="max-width-xxs {isLoading ? 'c-disabled loading' : ''}">
- {#if requestId}
- {#await is_valid_password_reset_request()}
- <p>Checking your request...</p>
- <a href="/login"
- use:link>cancel</a>
- {:then isActive}
- {#if isActive === true}
- <fieldset>
- <legend class="form-legend">
- <span class="margin-bottom-xs text-xl">Set your new password</span> <br/>
- <span class="text-sm">
- ... or
- <a href="/login"
- use:link> log in </a>
- </span>
- </legend>
- <div class="margin-bottom-xxs max-width-xxs">
- <Alert visible={alert.isVisible}
- title={alert.title}
- message={alert.message}
- type={alert.type}/>
- </div>
- <div class="margin-bottom-xs">
- <input
- type="password"
- id="new-password"
- placeholder="New password"
- class="form-control width-100%"
- bind:value={newPassword}
- />
- {#if newPasswordError}
- <small class="color-danger">{newPasswordError}</small>
- {/if}
- </div>
- <div class="flex justify-end">
- <Button text="Set new password"
- type="primary"
- loading={isLoading}
- on:click={submit}/>
- </div>
- </fieldset>
- {:else}
- <Alert title="This request is expired"
- message="Please submit the forgot password form again"
- type="warning"/>
- <div class="flex justify-between width-100% margin-y-sm">
- <a href="/forgot"
- use:link>Go to forgot form</a>
- <a href="/login"
- use:link>Go to login form</a>
- </div>
- {/if}
- {:catch _}
- <Alert title="An error occured"
- message="Please try again soon"
- type="error"/>
- {/await}
- {/if}
- </form>
- </Tile>
-</Layout>
diff --git a/apps/portal/src/app/pages/sign-up.svelte b/apps/portal/src/app/pages/sign-up.svelte
deleted file mode 100644
index 3bcab6d..0000000
--- a/apps/portal/src/app/pages/sign-up.svelte
+++ /dev/null
@@ -1,131 +0,0 @@
-<script>
- import {create_account} from "$shared/lib/api/user";
- import {frontpage_base} from "$shared/lib/configuration";
- import {is_email} from "$shared/lib/helpers";
- import Alert from "$shared/components/alert.svelte";
- import Button from "$shared/components/button.svelte";
- import Tile from "$shared/components/tile.svelte";
- import {link} from "svelte-spa-router";
- import Layout from "./_layout.svelte";
-
- const signupForm = {
- loading: false,
- values: {
- username: "",
- password: "",
- },
- alert: {
- title: "",
- type: "",
- message: "",
- isVisible: false,
- show(type, obj) {
- signupForm.alert.title = obj.title;
- signupForm.alert.message = obj.text;
- signupForm.alert.type = type;
- signupForm.alert.isVisible = true;
- signupForm.loading = false;
- },
- hide() {
- signupForm.alert.isVisible = false;
- signupForm.alert.title = "";
- signupForm.alert.message = "";
- signupForm.alert.type = "";
- },
- },
- is_valid() {
- return (
- is_email(signupForm.values.username) &&
- signupForm.values.password.length > 0
- );
- },
- async submit_form() {
- if (signupForm.loading) {
- return;
- }
- if (signupForm.is_valid()) {
- signupForm.alert.hide();
- signupForm.loading = true;
- try {
- const response = await create_account(signupForm.values);
- if (response.ok) {
- location.reload();
- } else {
- if (response.data.title || response.data.text) {
- signupForm.alert.show("error", {
- title: response.data.title ?? "",
- text: response.data.text ?? "",
- });
- } else {
- signupForm.alert.show("error", {
- title: "An unknown error occured",
- text: "Try again soon",
- });
- }
- }
- } catch (e) {
- console.error(e);
- signupForm.alert.show("error", {
- title: "An error occured",
- text: "Could not connect to server, please check your internet connection",
- });
- }
- } else {
- signupForm.alert.show("error", {
- title: "Invalid form",
- });
- }
- },
- };
-</script>
-
-<Layout>
- <a href="{frontpage_base()}"
- class="block margin-bottom-xs">Go to {frontpage_base()}</a>
- <Tile>
- <form on:submit|preventDefault={signupForm.submit_form}
- class="max-width-xxs">
- <fieldset>
- <legend class="form-legend">
- <span class="margin-bottom-xs text-xl">Create your account</span> <br/>
- <span class="text-sm"
- >... or <a href="/login"
- use:link>log in</a></span
- >
- </legend>
- <div class="margin-bottom-xs">
- <p>Provide an email and password to get immediate access to your new environment (30 days full access, no billing details required, no promotion emails).</p>
- </div>
- <div class="margin-bottom-xxs max-width-xxs">
- <Alert visible={signupForm.alert.isVisible}
- title={signupForm.alert.title}
- message={signupForm.alert.message}
- type={signupForm.alert.type}
- />
- </div>
- <div class="margin-bottom-xxs">
- <input type="email"
- placeholder="Email address"
- class="form-control width-100%"
- id="email-address"
- bind:value={signupForm.values.username}
- />
- </div>
- <div class="margin-bottom-xxs">
- <input type="password"
- placeholder="Password"
- class="form-control width-100%"
- bind:value={signupForm.values.password}
- />
- </div>
- <div class="flex justify-end">
- <Button class="margin-bottom-xs"
- text="Create account"
- type="primary"
- loading={signupForm.loading}
- />
- </div>
- </fieldset>
- </form>
- </Tile>
-</Layout>
diff --git a/apps/portal/src/index.html b/apps/portal/src/index.html
deleted file mode 100644
index 2102205..0000000
--- a/apps/portal/src/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!doctype html>
-<html lang="en">
-
-<head>
- <meta charset="UTF-8">
- <meta name="viewport"
- content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
- <link rel="apple-touch-icon"
- sizes="180x180"
- href="./_assets/pwa/apple-touch-icon.png">
- <link rel="icon"
- type="image/png"
- sizes="32x32"
- href="./_assets/pwa/favicon-32x32.png">
- <link rel="icon"
- type="image/png"
- sizes="16x16"
- href="./_assets/pwa/favicon-16x16.png">
- <link rel="manifest"
- href="./_assets/pwa/manifest.json">
- <link rel="mask-icon"
- href="./_assets/pwa/safari-pinned-tab.svg"
- color="#5bbad5">
- <meta name="msapplication-TileColor"
- content="#da532c">
- <link rel="icon"
- href="./_assets/pwa/favicon.svg">
- <link rel="stylesheet" href="./_assets/preload.css">
- <script src="./_assets/preload.js"></script>
- <title>Portal - Greatoffice</title>
-</head>
-
-<body>
-
-<noscript>
- This page is built with javascript. Allow it and try again.
-</noscript>
-
-<div class="fill-loader fill-loader--v4"
- id="loader"
- role="alert">
- <p class="fill-loader__label">Loading Portal...</p>
- <div aria-hidden="true">
- <div class="fill-loader__base"></div>
- <div class="fill-loader__fill"></div>
- </div>
-</div>
-
-<div id="root"></div>
-
-<script type="module"
- src="./app/index.ts"></script>
-</body>
-
-</html>
diff --git a/apps/portal/src/package.json b/apps/portal/src/package.json
deleted file mode 100644
index 07800b3..0000000
--- a/apps/portal/src/package.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "name": "greatoffice-portal",
- "version": "0.0.1",
- "private": "true",
- "scripts": {
- "dev": "vite",
- "build": "vite build"
- },
- "devDependencies": {
- "@sveltejs/vite-plugin-svelte": "1.0.1",
- "install": "^0.13.0",
- "sass": "^1.54.0",
- "svelte": "^3.49.0",
- "svelte-feather-icons": "^4.0.0",
- "svelte-preprocess": "^4.10.7",
- "svelte-spa-router": "^3.2.0",
- "typescript": "4.7.4",
- "vite": "^3.0.4"
- },
- "dependencies": {
- "@js-temporal/polyfill": "^0.4.2",
- "fuzzysort": "^2.0.1"
- }
-}
diff --git a/apps/portal/src/pnpm-lock.yaml b/apps/portal/src/pnpm-lock.yaml
deleted file mode 100644
index b091925..0000000
--- a/apps/portal/src/pnpm-lock.yaml
+++ /dev/null
@@ -1,787 +0,0 @@
-lockfileVersion: 5.4
-
-specifiers:
- '@js-temporal/polyfill': ^0.4.2
- '@sveltejs/vite-plugin-svelte': 1.0.1
- fuzzysort: ^2.0.1
- install: ^0.13.0
- sass: ^1.54.0
- svelte: ^3.49.0
- svelte-feather-icons: ^4.0.0
- svelte-preprocess: ^4.10.7
- svelte-spa-router: ^3.2.0
- typescript: 4.7.4
- vite: ^3.0.4
-
-dependencies:
- '@js-temporal/polyfill': 0.4.2
- fuzzysort: 2.0.1
-
-devDependencies:
- '@sveltejs/vite-plugin-svelte': 1.0.1_svelte@3.49.0+vite@3.0.4
- install: 0.13.0
- sass: 1.54.0
- svelte: 3.49.0
- svelte-feather-icons: 4.0.0
- svelte-preprocess: 4.10.7_qqyngjnvpp2z5rj6eppfx7s47e
- svelte-spa-router: 3.2.0
- typescript: 4.7.4
- vite: 3.0.4_sass@1.54.0
-
-packages:
-
- /@js-temporal/polyfill/0.4.2:
- resolution: {integrity: sha512-c85vRxyqnJaXKyf4tvYij8jwiVIZhNLYDI9C4LLuOwVEHf4HUqGg07BBn70Le71W193QT/vmKg3jPUyQxJRHKQ==}
- engines: {node: '>=12'}
- dependencies:
- jsbi: 4.3.0
- tslib: 2.4.0
- dev: false
-
- /@rollup/pluginutils/4.2.1:
- resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
- engines: {node: '>= 8.0.0'}
- dependencies:
- estree-walker: 2.0.2
- picomatch: 2.3.1
- dev: true
-
- /@sveltejs/vite-plugin-svelte/1.0.1_svelte@3.49.0+vite@3.0.4:
- resolution: {integrity: sha512-PorCgUounn0VXcpeJu+hOweZODKmGuLHsLomwqSj+p26IwjjGffmYQfVHtiTWq+NqaUuuHWWG7vPge6UFw4Aeg==}
- engines: {node: ^14.18.0 || >= 16}
- peerDependencies:
- diff-match-patch: ^1.0.5
- svelte: ^3.44.0
- vite: ^3.0.0
- peerDependenciesMeta:
- diff-match-patch:
- optional: true
- dependencies:
- '@rollup/pluginutils': 4.2.1
- debug: 4.3.4
- deepmerge: 4.2.2
- kleur: 4.1.5
- magic-string: 0.26.2
- svelte: 3.49.0
- svelte-hmr: 0.14.12_svelte@3.49.0
- vite: 3.0.4_sass@1.54.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@types/node/18.6.3:
- resolution: {integrity: sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==}
- dev: true
-
- /@types/pug/2.0.6:
- resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
- dev: true
-
- /@types/sass/1.43.1:
- resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==}
- dependencies:
- '@types/node': 18.6.3
- dev: true
-
- /anymatch/3.1.2:
- resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
- engines: {node: '>= 8'}
- dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
- dev: true
-
- /balanced-match/1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- dev: true
-
- /binary-extensions/2.2.0:
- resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
- engines: {node: '>=8'}
- dev: true
-
- /brace-expansion/1.1.11:
- resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
- dependencies:
- balanced-match: 1.0.2
- concat-map: 0.0.1
- dev: true
-
- /braces/3.0.2:
- resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
- engines: {node: '>=8'}
- dependencies:
- fill-range: 7.0.1
- dev: true
-
- /buffer-crc32/0.2.13:
- resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
- dev: true
-
- /chokidar/3.5.3:
- resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
- engines: {node: '>= 8.10.0'}
- dependencies:
- anymatch: 3.1.2
- braces: 3.0.2
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
-
- /concat-map/0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- dev: true
-
- /debug/4.3.4:
- resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
- dependencies:
- ms: 2.1.2
- dev: true
-
- /deepmerge/4.2.2:
- resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /detect-indent/6.1.0:
- resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
- engines: {node: '>=8'}
- dev: true
-
- /es6-promise/3.3.1:
- resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
- dev: true
-
- /esbuild-android-64/0.14.51:
- resolution: {integrity: sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-android-arm64/0.14.51:
- resolution: {integrity: sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-darwin-64/0.14.51:
- resolution: {integrity: sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-darwin-arm64/0.14.51:
- resolution: {integrity: sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-freebsd-64/0.14.51:
- resolution: {integrity: sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-freebsd-arm64/0.14.51:
- resolution: {integrity: sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-32/0.14.51:
- resolution: {integrity: sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-64/0.14.51:
- resolution: {integrity: sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-arm/0.14.51:
- resolution: {integrity: sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-arm64/0.14.51:
- resolution: {integrity: sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-mips64le/0.14.51:
- resolution: {integrity: sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-ppc64le/0.14.51:
- resolution: {integrity: sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-riscv64/0.14.51:
- resolution: {integrity: sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-s390x/0.14.51:
- resolution: {integrity: sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-netbsd-64/0.14.51:
- resolution: {integrity: sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-openbsd-64/0.14.51:
- resolution: {integrity: sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-sunos-64/0.14.51:
- resolution: {integrity: sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-windows-32/0.14.51:
- resolution: {integrity: sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-windows-64/0.14.51:
- resolution: {integrity: sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-windows-arm64/0.14.51:
- resolution: {integrity: sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild/0.14.51:
- resolution: {integrity: sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==}
- engines: {node: '>=12'}
- hasBin: true
- requiresBuild: true
- optionalDependencies:
- esbuild-android-64: 0.14.51
- esbuild-android-arm64: 0.14.51
- esbuild-darwin-64: 0.14.51
- esbuild-darwin-arm64: 0.14.51
- esbuild-freebsd-64: 0.14.51
- esbuild-freebsd-arm64: 0.14.51
- esbuild-linux-32: 0.14.51
- esbuild-linux-64: 0.14.51
- esbuild-linux-arm: 0.14.51
- esbuild-linux-arm64: 0.14.51
- esbuild-linux-mips64le: 0.14.51
- esbuild-linux-ppc64le: 0.14.51
- esbuild-linux-riscv64: 0.14.51
- esbuild-linux-s390x: 0.14.51
- esbuild-netbsd-64: 0.14.51
- esbuild-openbsd-64: 0.14.51
- esbuild-sunos-64: 0.14.51
- esbuild-windows-32: 0.14.51
- esbuild-windows-64: 0.14.51
- esbuild-windows-arm64: 0.14.51
- dev: true
-
- /estree-walker/2.0.2:
- resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
- dev: true
-
- /fill-range/7.0.1:
- resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
- engines: {node: '>=8'}
- dependencies:
- to-regex-range: 5.0.1
- dev: true
-
- /fs.realpath/1.0.0:
- resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
- dev: true
-
- /fsevents/2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
- /function-bind/1.1.1:
- resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
- dev: true
-
- /fuzzysort/2.0.1:
- resolution: {integrity: sha512-SlgbPAq0eQ6JQ1h3l4MNeGH/t9DHKH8GGM0RD/6RhmJrNnSoWt3oIVaiQm9g9BPB+wAhRMeMqlUTbhbd7+Ufcg==}
- dev: false
-
- /glob-parent/5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
- dependencies:
- is-glob: 4.0.3
- dev: true
-
- /glob/7.2.3:
- resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
- dev: true
-
- /graceful-fs/4.2.10:
- resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
- dev: true
-
- /has/1.0.3:
- resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
- engines: {node: '>= 0.4.0'}
- dependencies:
- function-bind: 1.1.1
- dev: true
-
- /immutable/4.1.0:
- resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==}
- dev: true
-
- /inflight/1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
- dependencies:
- once: 1.4.0
- wrappy: 1.0.2
- dev: true
-
- /inherits/2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- dev: true
-
- /install/0.13.0:
- resolution: {integrity: sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==}
- engines: {node: '>= 0.10'}
- dev: true
-
- /is-binary-path/2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
- dependencies:
- binary-extensions: 2.2.0
- dev: true
-
- /is-core-module/2.9.0:
- resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==}
- dependencies:
- has: 1.0.3
- dev: true
-
- /is-extglob/2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /is-glob/4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
- dependencies:
- is-extglob: 2.1.1
- dev: true
-
- /is-number/7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
- dev: true
-
- /jsbi/4.3.0:
- resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==}
- dev: false
-
- /kleur/4.1.5:
- resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
- engines: {node: '>=6'}
- dev: true
-
- /magic-string/0.25.9:
- resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
- dependencies:
- sourcemap-codec: 1.4.8
- dev: true
-
- /magic-string/0.26.2:
- resolution: {integrity: sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==}
- engines: {node: '>=12'}
- dependencies:
- sourcemap-codec: 1.4.8
- dev: true
-
- /min-indent/1.0.1:
- resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
- engines: {node: '>=4'}
- dev: true
-
- /minimatch/3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
- dependencies:
- brace-expansion: 1.1.11
- dev: true
-
- /minimist/1.2.6:
- resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==}
- dev: true
-
- /mkdirp/0.5.6:
- resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
- hasBin: true
- dependencies:
- minimist: 1.2.6
- dev: true
-
- /ms/2.1.2:
- resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
- dev: true
-
- /nanoid/3.3.4:
- resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
- dev: true
-
- /normalize-path/3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /once/1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
- dependencies:
- wrappy: 1.0.2
- dev: true
-
- /path-is-absolute/1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /path-parse/1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- dev: true
-
- /picocolors/1.0.0:
- resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
- dev: true
-
- /picomatch/2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
- dev: true
-
- /postcss/8.4.14:
- resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
- engines: {node: ^10 || ^12 || >=14}
- dependencies:
- nanoid: 3.3.4
- picocolors: 1.0.0
- source-map-js: 1.0.2
- dev: true
-
- /readdirp/3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
- dependencies:
- picomatch: 2.3.1
- dev: true
-
- /regexparam/2.0.0:
- resolution: {integrity: sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==}
- engines: {node: '>=8'}
- dev: true
-
- /resolve/1.22.1:
- resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
- hasBin: true
- dependencies:
- is-core-module: 2.9.0
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
- dev: true
-
- /rimraf/2.7.1:
- resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
- hasBin: true
- dependencies:
- glob: 7.2.3
- dev: true
-
- /rollup/2.77.2:
- resolution: {integrity: sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==}
- engines: {node: '>=10.0.0'}
- hasBin: true
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
-
- /sander/0.5.1:
- resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
- dependencies:
- es6-promise: 3.3.1
- graceful-fs: 4.2.10
- mkdirp: 0.5.6
- rimraf: 2.7.1
- dev: true
-
- /sass/1.54.0:
- resolution: {integrity: sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ==}
- engines: {node: '>=12.0.0'}
- hasBin: true
- dependencies:
- chokidar: 3.5.3
- immutable: 4.1.0
- source-map-js: 1.0.2
- dev: true
-
- /sorcery/0.10.0:
- resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==}
- hasBin: true
- dependencies:
- buffer-crc32: 0.2.13
- minimist: 1.2.6
- sander: 0.5.1
- sourcemap-codec: 1.4.8
- dev: true
-
- /source-map-js/1.0.2:
- resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /sourcemap-codec/1.4.8:
- resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
- dev: true
-
- /strip-indent/3.0.0:
- resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
- engines: {node: '>=8'}
- dependencies:
- min-indent: 1.0.1
- dev: true
-
- /supports-preserve-symlinks-flag/1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
- dev: true
-
- /svelte-feather-icons/4.0.0:
- resolution: {integrity: sha512-4ieUsjp+VYa1r6y80jDt9zRiRUZyJNbESpRdHdJJhiBubyuXX96A7f1UZSK4olxzP6Qsg5ZAuyZlnmvD+/swAA==}
- dependencies:
- svelte: 3.49.0
- dev: true
-
- /svelte-hmr/0.14.12_svelte@3.49.0:
- resolution: {integrity: sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w==}
- engines: {node: ^12.20 || ^14.13.1 || >= 16}
- peerDependencies:
- svelte: '>=3.19.0'
- dependencies:
- svelte: 3.49.0
- dev: true
-
- /svelte-preprocess/4.10.7_qqyngjnvpp2z5rj6eppfx7s47e:
- resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==}
- engines: {node: '>= 9.11.2'}
- requiresBuild: true
- peerDependencies:
- '@babel/core': ^7.10.2
- coffeescript: ^2.5.1
- less: ^3.11.3 || ^4.0.0
- node-sass: '*'
- postcss: ^7 || ^8
- postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0
- pug: ^3.0.0
- sass: ^1.26.8
- stylus: ^0.55.0
- sugarss: ^2.0.0
- svelte: ^3.23.0
- typescript: ^3.9.5 || ^4.0.0
- peerDependenciesMeta:
- '@babel/core':
- optional: true
- coffeescript:
- optional: true
- less:
- optional: true
- node-sass:
- optional: true
- postcss:
- optional: true
- postcss-load-config:
- optional: true
- pug:
- optional: true
- sass:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- typescript:
- optional: true
- dependencies:
- '@types/pug': 2.0.6
- '@types/sass': 1.43.1
- detect-indent: 6.1.0
- magic-string: 0.25.9
- sass: 1.54.0
- sorcery: 0.10.0
- strip-indent: 3.0.0
- svelte: 3.49.0
- typescript: 4.7.4
- dev: true
-
- /svelte-spa-router/3.2.0:
- resolution: {integrity: sha512-igemo5Vs82TGBBw+DjWt6qKameXYzNs6aDXcTxou5XbEvOjiRcAM6MLkdVRCatn6u8r42dE99bt/br7T4qe/AQ==}
- dependencies:
- regexparam: 2.0.0
- dev: true
-
- /svelte/3.49.0:
- resolution: {integrity: sha512-+lmjic1pApJWDfPCpUUTc1m8azDqYCG1JN9YEngrx/hUyIcFJo6VZhj0A1Ai0wqoHcEIuQy+e9tk+4uDgdtsFA==}
- engines: {node: '>= 8'}
- dev: true
-
- /to-regex-range/5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
- dependencies:
- is-number: 7.0.0
- dev: true
-
- /tslib/2.4.0:
- resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
- dev: false
-
- /typescript/4.7.4:
- resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==}
- engines: {node: '>=4.2.0'}
- hasBin: true
- dev: true
-
- /vite/3.0.4_sass@1.54.0:
- resolution: {integrity: sha512-NU304nqnBeOx2MkQnskBQxVsa0pRAH5FphokTGmyy8M3oxbvw7qAXts2GORxs+h/2vKsD+osMhZ7An6yK6F1dA==}
- engines: {node: ^14.18.0 || >=16.0.0}
- hasBin: true
- peerDependencies:
- less: '*'
- sass: '*'
- stylus: '*'
- terser: ^5.4.0
- peerDependenciesMeta:
- less:
- optional: true
- sass:
- optional: true
- stylus:
- optional: true
- terser:
- optional: true
- dependencies:
- esbuild: 0.14.51
- postcss: 8.4.14
- resolve: 1.22.1
- rollup: 2.77.2
- sass: 1.54.0
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
-
- /wrappy/1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- dev: true
diff --git a/apps/portal/src/tsconfig.json b/apps/portal/src/tsconfig.json
deleted file mode 100644
index c60fce6..0000000
--- a/apps/portal/src/tsconfig.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "include": [
- "./**/*.d.ts",
- "./**/*.ts",
- "./**/*.js",
- "./**/*.svelte"
- ],
- "exclude": [
- "./node_modules"
- ],
- "compilerOptions": {
- "target": "esnext",
- "useDefineForClassFields": true,
- "module": "esnext",
- "moduleResolution": "node",
- "allowJs": true,
- "checkJs": false,
- "paths": {
- "$app/*": [
- "./app/*"
- ],
- "$shared/*": [
- "../../web-shared/src/*"
- ]
- }
- }
-}
diff --git a/apps/portal/src/vite.config.ts b/apps/portal/src/vite.config.ts
deleted file mode 100644
index 684ef14..0000000
--- a/apps/portal/src/vite.config.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import {defineConfig} from "vite";
-import {svelte} from "@sveltejs/vite-plugin-svelte";
-import sveltePreprocess from "svelte-preprocess";
-// @ts-ignore
-import path from "path";
-
-// https://vitejs.dev/config/
-export default defineConfig({
- resolve: {
- alias: {
- "$shared": path.resolve(__dirname, "../../web-shared/src"),
- "$app": path.resolve(__dirname, "./app"),
- }
- },
- build: {
- outDir: "build",
- emptyOutDir: true,
- rollupOptions: {
- input: {
- main: path.resolve(__dirname, "index.html"),
- }
- }
- },
- server: {
- port: 3001
- },
- plugins: [
- svelte({
- preprocess: sveltePreprocess()
- })
- ],
-});