aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/kit/.gitignore8
-rw-r--r--apps/kit/.npmrc1
-rw-r--r--apps/kit/.typesafe-i18n.json5
-rw-r--r--apps/kit/package.json45
-rw-r--r--apps/kit/playwright.config.ts10
-rw-r--r--apps/kit/pnpm-lock.yaml2282
-rw-r--r--apps/kit/postcss.config.cjs13
-rw-r--r--apps/kit/src/actions/pwKey.ts10
-rw-r--r--apps/kit/src/app.d.ts9
-rw-r--r--apps/kit/src/app.html14
-rw-r--r--apps/kit/src/app.pcss34
-rw-r--r--apps/kit/src/global.d.ts11
-rw-r--r--apps/kit/src/hooks.server.ts47
-rw-r--r--apps/kit/src/lib/api/internal-fetch.ts170
-rw-r--r--apps/kit/src/lib/api/root.ts6
-rw-r--r--apps/kit/src/lib/api/time-entry.ts83
-rw-r--r--apps/kit/src/lib/api/user.ts47
-rw-r--r--apps/kit/src/lib/colors.ts47
-rw-r--r--apps/kit/src/lib/components/alert.svelte268
-rw-r--r--apps/kit/src/lib/components/button.svelte103
-rw-r--r--apps/kit/src/lib/components/checkbox.svelte24
-rw-r--r--apps/kit/src/lib/components/icons/adjustments.svelte14
-rw-r--r--apps/kit/src/lib/components/icons/bars-3-center-left.svelte15
-rw-r--r--apps/kit/src/lib/components/icons/calendar.svelte14
-rw-r--r--apps/kit/src/lib/components/icons/check-circle.svelte13
-rw-r--r--apps/kit/src/lib/components/icons/chevron-up-down.svelte13
-rw-r--r--apps/kit/src/lib/components/icons/database.svelte14
-rw-r--r--apps/kit/src/lib/components/icons/exclamation-circle.svelte13
-rw-r--r--apps/kit/src/lib/components/icons/exclamation-triangle.svelte13
-rw-r--r--apps/kit/src/lib/components/icons/folder-open.svelte14
-rw-r--r--apps/kit/src/lib/components/icons/home.svelte14
-rw-r--r--apps/kit/src/lib/components/icons/index.ts41
-rw-r--r--apps/kit/src/lib/components/icons/information-circle.svelte13
-rw-r--r--apps/kit/src/lib/components/icons/magnifying-glass.svelte13
-rw-r--r--apps/kit/src/lib/components/icons/megaphone.svelte14
-rw-r--r--apps/kit/src/lib/components/icons/menu.svelte14
-rw-r--r--apps/kit/src/lib/components/icons/queue-list.svelte14
-rw-r--r--apps/kit/src/lib/components/icons/spinner.svelte20
-rw-r--r--apps/kit/src/lib/components/icons/x-circle.svelte13
-rw-r--r--apps/kit/src/lib/components/icons/x-mark.svelte11
-rw-r--r--apps/kit/src/lib/components/icons/x.svelte14
-rw-r--r--apps/kit/src/lib/components/index.ts15
-rw-r--r--apps/kit/src/lib/components/input.svelte103
-rw-r--r--apps/kit/src/lib/components/locale-switcher.svelte55
-rw-r--r--apps/kit/src/lib/components/switch.svelte143
-rw-r--r--apps/kit/src/lib/configuration.ts60
-rw-r--r--apps/kit/src/lib/helpers.ts493
-rw-r--r--apps/kit/src/lib/i18n/en/app/index.ts5
-rw-r--r--apps/kit/src/lib/i18n/en/index.ts50
-rw-r--r--apps/kit/src/lib/i18n/formatters.ts13
-rw-r--r--apps/kit/src/lib/i18n/i18n-svelte.ts12
-rw-r--r--apps/kit/src/lib/i18n/i18n-types.ts359
-rw-r--r--apps/kit/src/lib/i18n/i18n-util.async.ts42
-rw-r--r--apps/kit/src/lib/i18n/i18n-util.sync.ts35
-rw-r--r--apps/kit/src/lib/i18n/i18n-util.ts39
-rw-r--r--apps/kit/src/lib/i18n/nb/app/index.ts8
-rw-r--r--apps/kit/src/lib/i18n/nb/index.ts50
-rw-r--r--apps/kit/src/lib/logger.ts86
-rw-r--r--apps/kit/src/lib/models/CreateAccountPayload.ts4
-rw-r--r--apps/kit/src/lib/models/ErrorResult.ts4
-rw-r--r--apps/kit/src/lib/models/IInternalFetchRequest.ts6
-rw-r--r--apps/kit/src/lib/models/IInternalFetchResponse.ts6
-rw-r--r--apps/kit/src/lib/models/ISession.ts8
-rw-r--r--apps/kit/src/lib/models/IValidationResult.ts31
-rw-r--r--apps/kit/src/lib/models/LoginPayload.ts5
-rw-r--r--apps/kit/src/lib/models/TimeCategoryDto.ts9
-rw-r--r--apps/kit/src/lib/models/TimeEntryDto.ts13
-rw-r--r--apps/kit/src/lib/models/TimeEntryQuery.ts27
-rw-r--r--apps/kit/src/lib/models/TimeLabelDto.ts8
-rw-r--r--apps/kit/src/lib/models/TimeQueryDto.ts29
-rw-r--r--apps/kit/src/lib/models/UnwrappedEntryDateTime.ts9
-rw-r--r--apps/kit/src/lib/models/UpdateProfilePayload.ts4
-rw-r--r--apps/kit/src/lib/persistent-store.ts102
-rw-r--r--apps/kit/src/lib/session.ts69
-rw-r--r--apps/kit/src/params/guid.ts5
-rw-r--r--apps/kit/src/params/integer.ts3
-rw-r--r--apps/kit/src/routes/(main)/(app)/+layout.svelte297
-rw-r--r--apps/kit/src/routes/(main)/(app)/home/+page.svelte1
-rw-r--r--apps/kit/src/routes/(main)/(app)/org/+page.svelte4
-rw-r--r--apps/kit/src/routes/(main)/(app)/profile/+page.svelte4
-rw-r--r--apps/kit/src/routes/(main)/(app)/projects/+page.svelte4
-rw-r--r--apps/kit/src/routes/(main)/(app)/settings/+page.svelte4
-rw-r--r--apps/kit/src/routes/(main)/(app)/tickets/+page.svelte4
-rw-r--r--apps/kit/src/routes/(main)/(app)/todo/+page.svelte4
-rw-r--r--apps/kit/src/routes/(main)/(app)/wiki/+page.svelte4
-rw-r--r--apps/kit/src/routes/(main)/(public)/+layout.svelte18
-rw-r--r--apps/kit/src/routes/(main)/(public)/reset-password/+page.svelte82
-rw-r--r--apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.server.ts11
-rw-r--r--apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.svelte132
-rw-r--r--apps/kit/src/routes/(main)/(public)/sign-in/+page.svelte153
-rw-r--r--apps/kit/src/routes/(main)/(public)/sign-in/test.ts12
-rw-r--r--apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte82
-rw-r--r--apps/kit/src/routes/(main)/+layout.server.ts34
-rw-r--r--apps/kit/src/routes/(main)/+layout.svelte29
-rw-r--r--apps/kit/src/routes/(main)/+layout.ts15
-rw-r--r--apps/kit/src/routes/(main)/+page.svelte1
-rw-r--r--apps/kit/src/routes/book/+layout.svelte64
-rw-r--r--apps/kit/src/routes/book/+page.svelte1
-rw-r--r--apps/kit/src/routes/book/alerts/+page.svelte70
-rw-r--r--apps/kit/src/routes/book/buttons/+page.svelte23
-rw-r--r--apps/kit/src/routes/book/inputs/+page.svelte48
-rw-r--r--apps/kit/src/routes/book/toggles/+page.svelte27
-rw-r--r--apps/kit/static/favicon.icobin1406 -> 0 bytes
-rw-r--r--apps/kit/svelte.config.js22
-rw-r--r--apps/kit/tailwind.config.cjs135
-rw-r--r--apps/kit/tsconfig.json43
-rw-r--r--apps/kit/vite.config.js14
107 files changed, 0 insertions, 6793 deletions
diff --git a/apps/kit/.gitignore b/apps/kit/.gitignore
deleted file mode 100644
index f4401a3..0000000
--- a/apps/kit/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-.DS_Store
-node_modules
-/build
-/.svelte-kit
-/package
-.env
-.env.*
-!.env.example
diff --git a/apps/kit/.npmrc b/apps/kit/.npmrc
deleted file mode 100644
index b6f27f1..0000000
--- a/apps/kit/.npmrc
+++ /dev/null
@@ -1 +0,0 @@
-engine-strict=true
diff --git a/apps/kit/.typesafe-i18n.json b/apps/kit/.typesafe-i18n.json
deleted file mode 100644
index a51035e..0000000
--- a/apps/kit/.typesafe-i18n.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "adapter": "svelte",
- "$schema": "https://unpkg.com/typesafe-i18n@5.14.0/schema/typesafe-i18n.json",
- "outputPath": "src/lib/i18n"
-} \ No newline at end of file
diff --git a/apps/kit/package.json b/apps/kit/package.json
deleted file mode 100644
index 2825062..0000000
--- a/apps/kit/package.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "greatoffice-kit",
- "version": "0.0.1",
- "private": true,
- "type": "module",
- "scripts": {
- "dev": "npm-run-all --parallel vite typesafe-i18n",
- "typesafe-i18n": "typesafe-i18n",
- "vite": "vite",
- "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"
- },
- "devDependencies": {
- "@developermuch/dev-svelte-headlessui": "0.0.1",
- "@playwright/test": "^1.26.1",
- "@rgossiaux/svelte-headlessui": "^1.0.2",
- "@sveltejs/adapter-node": "1.0.0-next.96",
- "@sveltejs/kit": "1.0.0-next.507",
- "@sveltestack/svelte-query": "^1.6.0",
- "@tailwindcss/forms": "^0.5.3",
- "@types/cookie": "^0.5.1",
- "@types/js-cookie": "^3.0.2",
- "autoprefixer": "^10.4.12",
- "cookie": "^0.5.0",
- "devalue": "^3.1.3",
- "js-cookie": "^3.0.1",
- "npm-run-all": "^4.1.5",
- "pino": "^8.6.1",
- "pino-pretty": "^9.1.0",
- "postcss": "^8.4.17",
- "postcss-load-config": "^4.0.1",
- "svelte": "^3.50.1",
- "svelte-check": "^2.9.1",
- "svelte-preprocess": "^4.10.7",
- "tailwindcss": "^3.1.8",
- "temporal-polyfill": "^0.0.8",
- "tslib": "^2.4.0",
- "typesafe-i18n": "^5.14.0",
- "typescript": "^4.8.4",
- "vite": "^3.1.4"
- }
-} \ No newline at end of file
diff --git a/apps/kit/playwright.config.ts b/apps/kit/playwright.config.ts
deleted file mode 100644
index 5926752..0000000
--- a/apps/kit/playwright.config.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import type { PlaywrightTestConfig } from '@playwright/test';
-
-const config: PlaywrightTestConfig = {
- webServer: {
- command: 'pnpm run dev',
- port: 5173
- }
-};
-
-export default config;
diff --git a/apps/kit/pnpm-lock.yaml b/apps/kit/pnpm-lock.yaml
deleted file mode 100644
index 975c489..0000000
--- a/apps/kit/pnpm-lock.yaml
+++ /dev/null
@@ -1,2282 +0,0 @@
-lockfileVersion: 5.4
-
-specifiers:
- '@developermuch/dev-svelte-headlessui': 0.0.1
- '@playwright/test': ^1.26.1
- '@rgossiaux/svelte-headlessui': ^1.0.2
- '@sveltejs/adapter-node': 1.0.0-next.96
- '@sveltejs/kit': 1.0.0-next.507
- '@sveltestack/svelte-query': ^1.6.0
- '@tailwindcss/forms': ^0.5.3
- '@types/cookie': ^0.5.1
- '@types/js-cookie': ^3.0.2
- autoprefixer: ^10.4.12
- cookie: ^0.5.0
- devalue: ^3.1.3
- js-cookie: ^3.0.1
- npm-run-all: ^4.1.5
- pino: ^8.6.1
- pino-pretty: ^9.1.0
- postcss: ^8.4.17
- postcss-load-config: ^4.0.1
- svelte: ^3.50.1
- svelte-check: ^2.9.1
- svelte-preprocess: ^4.10.7
- tailwindcss: ^3.1.8
- temporal-polyfill: ^0.0.8
- tslib: ^2.4.0
- typesafe-i18n: ^5.14.0
- typescript: ^4.8.4
- vite: ^3.1.4
-
-devDependencies:
- '@developermuch/dev-svelte-headlessui': 0.0.1_svelte@3.50.1
- '@playwright/test': 1.26.1
- '@rgossiaux/svelte-headlessui': 1.0.2_svelte@3.50.1
- '@sveltejs/adapter-node': 1.0.0-next.96
- '@sveltejs/kit': 1.0.0-next.507_svelte@3.50.1+vite@3.1.4
- '@sveltestack/svelte-query': 1.6.0
- '@tailwindcss/forms': 0.5.3_tailwindcss@3.1.8
- '@types/cookie': 0.5.1
- '@types/js-cookie': 3.0.2
- autoprefixer: 10.4.12_postcss@8.4.17
- cookie: 0.5.0
- devalue: 3.1.3
- js-cookie: 3.0.1
- npm-run-all: 4.1.5
- pino: 8.6.1
- pino-pretty: 9.1.0
- postcss: 8.4.17
- postcss-load-config: 4.0.1_postcss@8.4.17
- svelte: 3.50.1
- svelte-check: 2.9.1_ejhwqstqdwfnekvhsm3hus3z4i
- svelte-preprocess: 4.10.7_or4gyn62tntw7ihg73nagmkdja
- tailwindcss: 3.1.8_postcss@8.4.17
- temporal-polyfill: 0.0.8
- tslib: 2.4.0
- typesafe-i18n: 5.14.0_typescript@4.8.4
- typescript: 4.8.4
- vite: 3.1.4
-
-packages:
-
- /@developermuch/dev-svelte-headlessui/0.0.1_svelte@3.50.1:
- resolution: {integrity: sha512-tfBlHliv75oQFRrC430nIsw+A8+iFmr5c2g0A+VTlVD3960nEL9jOE0LDHYKq6VhX5LnOLTFIZwVKC1DxFo0QA==}
- peerDependencies:
- svelte: ^3.44.0
- dependencies:
- svelte: 3.50.1
- dev: true
-
- /@esbuild/android-arm/0.15.10:
- resolution: {integrity: sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
- /@esbuild/linux-loong64/0.15.10:
- resolution: {integrity: sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /@jridgewell/resolve-uri/3.1.0:
- resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
- engines: {node: '>=6.0.0'}
- dev: true
-
- /@jridgewell/sourcemap-codec/1.4.14:
- resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
- dev: true
-
- /@jridgewell/trace-mapping/0.3.15:
- resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==}
- dependencies:
- '@jridgewell/resolve-uri': 3.1.0
- '@jridgewell/sourcemap-codec': 1.4.14
- dev: true
-
- /@nodelib/fs.scandir/2.1.5:
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
- engines: {node: '>= 8'}
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
- dev: true
-
- /@nodelib/fs.stat/2.0.5:
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
- dev: true
-
- /@nodelib/fs.walk/1.2.8:
- resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
- engines: {node: '>= 8'}
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.13.0
- dev: true
-
- /@playwright/test/1.26.1:
- resolution: {integrity: sha512-bNxyZASVt2adSZ9gbD7NCydzcb5JaI0OR9hc7s+nmPeH604gwp0zp17NNpwXY4c8nvuBGQQ9oGDx72LE+cUWvw==}
- engines: {node: '>=14'}
- hasBin: true
- dependencies:
- '@types/node': 18.8.0
- playwright-core: 1.26.1
- dev: true
-
- /@polka/url/1.0.0-next.21:
- resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
- dev: true
-
- /@rgossiaux/svelte-headlessui/1.0.2_svelte@3.50.1:
- resolution: {integrity: sha512-sauopYTSivhzXe1kAvgawkhyYJcQlK8Li3p0d2OtcCIVprOzdbard5lbqWB4xHDv83zAobt2mR08oizO2poHLQ==}
- peerDependencies:
- svelte: ^3.44.0
- dependencies:
- svelte: 3.50.1
- dev: true
-
- /@rollup/plugin-commonjs/22.0.2_rollup@2.79.1:
- resolution: {integrity: sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==}
- engines: {node: '>= 12.0.0'}
- peerDependencies:
- rollup: ^2.68.0
- dependencies:
- '@rollup/pluginutils': 3.1.0_rollup@2.79.1
- commondir: 1.0.1
- estree-walker: 2.0.2
- glob: 7.2.3
- is-reference: 1.2.1
- magic-string: 0.25.9
- resolve: 1.22.1
- rollup: 2.79.1
- dev: true
-
- /@rollup/plugin-json/4.1.0_rollup@2.79.1:
- resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==}
- peerDependencies:
- rollup: ^1.20.0 || ^2.0.0
- dependencies:
- '@rollup/pluginutils': 3.1.0_rollup@2.79.1
- rollup: 2.79.1
- dev: true
-
- /@rollup/plugin-node-resolve/14.1.0_rollup@2.79.1:
- resolution: {integrity: sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==}
- engines: {node: '>= 10.0.0'}
- peerDependencies:
- rollup: ^2.78.0
- dependencies:
- '@rollup/pluginutils': 3.1.0_rollup@2.79.1
- '@types/resolve': 1.17.1
- deepmerge: 4.2.2
- is-builtin-module: 3.2.0
- is-module: 1.0.0
- resolve: 1.22.1
- rollup: 2.79.1
- dev: true
-
- /@rollup/pluginutils/3.1.0_rollup@2.79.1:
- resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
- engines: {node: '>= 8.0.0'}
- peerDependencies:
- rollup: ^1.20.0||^2.0.0
- dependencies:
- '@types/estree': 0.0.39
- estree-walker: 1.0.1
- picomatch: 2.3.1
- rollup: 2.79.1
- dev: true
-
- /@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/adapter-node/1.0.0-next.96:
- resolution: {integrity: sha512-tIHaRolUYy2PiHl4RUWaOsYxEjK5lN9501qzCzFbYr/uoLnZcnPGSXNJICwX0AX9AUkV6cvkZey6bLbUQcwH0Q==}
- dependencies:
- '@rollup/plugin-commonjs': 22.0.2_rollup@2.79.1
- '@rollup/plugin-json': 4.1.0_rollup@2.79.1
- '@rollup/plugin-node-resolve': 14.1.0_rollup@2.79.1
- rollup: 2.79.1
- dev: true
-
- /@sveltejs/kit/1.0.0-next.507_svelte@3.50.1+vite@3.1.4:
- resolution: {integrity: sha512-GAgFb1yLUVOYPWXIPxh8j0iEjUOVvN42Xgsqf6j6j1Sb2/f0m0bC1O7eVbc8NQjNZIvgGuN8yxai188iIYQt7w==}
- engines: {node: '>=16.14'}
- hasBin: true
- requiresBuild: true
- peerDependencies:
- svelte: ^3.44.0
- vite: ^3.1.0
- dependencies:
- '@sveltejs/vite-plugin-svelte': 1.0.8_svelte@3.50.1+vite@3.1.4
- '@types/cookie': 0.5.1
- cookie: 0.5.0
- devalue: 3.1.3
- kleur: 4.1.5
- magic-string: 0.26.5
- mime: 3.0.0
- node-fetch: 3.2.10
- sade: 1.8.1
- set-cookie-parser: 2.5.1
- sirv: 2.0.2
- svelte: 3.50.1
- tiny-glob: 0.2.9
- undici: 5.10.0
- vite: 3.1.4
- transitivePeerDependencies:
- - diff-match-patch
- - supports-color
- dev: true
-
- /@sveltejs/vite-plugin-svelte/1.0.8_svelte@3.50.1+vite@3.1.4:
- resolution: {integrity: sha512-1xkVTB4pm6zuign858FzVYE9Fdw9MQBOlxrdd85STV0NvTDmcofcRpcrK+zcIyT8SZ2dseHLu8hvDwzssF6RfA==}
- 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.5
- svelte: 3.50.1
- svelte-hmr: 0.15.0_svelte@3.50.1
- vite: 3.1.4
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@sveltestack/svelte-query/1.6.0:
- resolution: {integrity: sha512-C0wWuh6av1zu3Pzwrg6EQmX3BhDZQ4gMAdYu6Tfv4bjbEZTB00uEDz52z92IZdONh+iUKuyo0xRZ2e16k2Xifg==}
- peerDependencies:
- broadcast-channel: ^4.5.0
- peerDependenciesMeta:
- broadcast-channel:
- optional: true
- dev: true
-
- /@tailwindcss/forms/0.5.3_tailwindcss@3.1.8:
- resolution: {integrity: sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==}
- peerDependencies:
- tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1'
- dependencies:
- mini-svg-data-uri: 1.4.4
- tailwindcss: 3.1.8_postcss@8.4.17
- dev: true
-
- /@types/cookie/0.5.1:
- resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==}
- dev: true
-
- /@types/estree/0.0.39:
- resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
- dev: true
-
- /@types/estree/1.0.0:
- resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
- dev: true
-
- /@types/js-cookie/3.0.2:
- resolution: {integrity: sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==}
- dev: true
-
- /@types/node/18.8.0:
- resolution: {integrity: sha512-u+h43R6U8xXDt2vzUaVP3VwjjLyOJk6uEciZS8OSyziUQGOwmk+l+4drxcsDboHXwyTaqS1INebghmWMRxq3LA==}
- dev: true
-
- /@types/pug/2.0.6:
- resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
- dev: true
-
- /@types/resolve/1.17.1:
- resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
- dependencies:
- '@types/node': 18.8.0
- dev: true
-
- /@types/sass/1.43.1:
- resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==}
- dependencies:
- '@types/node': 18.8.0
- dev: true
-
- /abort-controller/3.0.0:
- resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
- engines: {node: '>=6.5'}
- dependencies:
- event-target-shim: 5.0.1
- dev: true
-
- /acorn-node/1.8.2:
- resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
- dependencies:
- acorn: 7.4.1
- acorn-walk: 7.2.0
- xtend: 4.0.2
- dev: true
-
- /acorn-walk/7.2.0:
- resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
- engines: {node: '>=0.4.0'}
- dev: true
-
- /acorn/7.4.1:
- resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
- engines: {node: '>=0.4.0'}
- hasBin: true
- dev: true
-
- /ansi-styles/3.2.1:
- resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
- engines: {node: '>=4'}
- dependencies:
- color-convert: 1.9.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
-
- /arg/5.0.2:
- resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
- dev: true
-
- /atomic-sleep/1.0.0:
- resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
- engines: {node: '>=8.0.0'}
- dev: true
-
- /autoprefixer/10.4.12_postcss@8.4.17:
- resolution: {integrity: sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==}
- engines: {node: ^10 || ^12 || >=14}
- hasBin: true
- peerDependencies:
- postcss: ^8.1.0
- dependencies:
- browserslist: 4.21.4
- caniuse-lite: 1.0.30001414
- fraction.js: 4.2.0
- normalize-range: 0.1.2
- picocolors: 1.0.0
- postcss: 8.4.17
- postcss-value-parser: 4.2.0
- dev: true
-
- /balanced-match/1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- dev: true
-
- /base64-js/1.5.1:
- resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- 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
-
- /brace-expansion/2.0.1:
- resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
- dependencies:
- balanced-match: 1.0.2
- dev: true
-
- /braces/3.0.2:
- resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
- engines: {node: '>=8'}
- dependencies:
- fill-range: 7.0.1
- dev: true
-
- /browserslist/4.21.4:
- resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
- dependencies:
- caniuse-lite: 1.0.30001414
- electron-to-chromium: 1.4.270
- node-releases: 2.0.6
- update-browserslist-db: 1.0.9_browserslist@4.21.4
- dev: true
-
- /buffer-crc32/0.2.13:
- resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
- dev: true
-
- /buffer/6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
- dev: true
-
- /builtin-modules/3.3.0:
- resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
- engines: {node: '>=6'}
- dev: true
-
- /call-bind/1.0.2:
- resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
- dependencies:
- function-bind: 1.1.1
- get-intrinsic: 1.1.3
- dev: true
-
- /callsites/3.1.0:
- resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
- engines: {node: '>=6'}
- dev: true
-
- /camelcase-css/2.0.1:
- resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
- engines: {node: '>= 6'}
- dev: true
-
- /caniuse-lite/1.0.30001414:
- resolution: {integrity: sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==}
- dev: true
-
- /chalk/2.4.2:
- resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
- engines: {node: '>=4'}
- dependencies:
- ansi-styles: 3.2.1
- escape-string-regexp: 1.0.5
- supports-color: 5.5.0
- 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
-
- /color-convert/1.9.3:
- resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
- dependencies:
- color-name: 1.1.3
- dev: true
-
- /color-name/1.1.3:
- resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
- dev: true
-
- /color-name/1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- dev: true
-
- /colorette/2.0.19:
- resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
- dev: true
-
- /commondir/1.0.1:
- resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
- dev: true
-
- /concat-map/0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
- dev: true
-
- /cookie/0.5.0:
- resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
- engines: {node: '>= 0.6'}
- dev: true
-
- /cross-spawn/6.0.5:
- resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
- engines: {node: '>=4.8'}
- dependencies:
- nice-try: 1.0.5
- path-key: 2.0.1
- semver: 5.7.1
- shebang-command: 1.2.0
- which: 1.3.1
- dev: true
-
- /cssesc/3.0.0:
- resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
- engines: {node: '>=4'}
- hasBin: true
- dev: true
-
- /data-uri-to-buffer/4.0.0:
- resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==}
- engines: {node: '>= 12'}
- dev: true
-
- /dateformat/4.6.3:
- resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
- 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
-
- /define-properties/1.1.4:
- resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
- engines: {node: '>= 0.4'}
- dependencies:
- has-property-descriptors: 1.0.0
- object-keys: 1.1.1
- dev: true
-
- /defined/1.0.0:
- resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==}
- dev: true
-
- /detect-indent/6.1.0:
- resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
- engines: {node: '>=8'}
- dev: true
-
- /detective/5.2.1:
- resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==}
- engines: {node: '>=0.8.0'}
- hasBin: true
- dependencies:
- acorn-node: 1.8.2
- defined: 1.0.0
- minimist: 1.2.6
- dev: true
-
- /devalue/3.1.3:
- resolution: {integrity: sha512-9KO89Cb+qjzf2CqdrH+NuLaqdk9GhDP5EhR4zlkR51dvuIaiqtlkDkGzLMShDemwUy21raSMdu+kpX8Enw3yGQ==}
- dev: true
-
- /didyoumean/1.2.2:
- resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
- dev: true
-
- /dlv/1.1.3:
- resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
- dev: true
-
- /electron-to-chromium/1.4.270:
- resolution: {integrity: sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg==}
- dev: true
-
- /end-of-stream/1.4.4:
- resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
- dependencies:
- once: 1.4.0
- dev: true
-
- /error-ex/1.3.2:
- resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
- dependencies:
- is-arrayish: 0.2.1
- dev: true
-
- /es-abstract/1.20.3:
- resolution: {integrity: sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- es-to-primitive: 1.2.1
- function-bind: 1.1.1
- function.prototype.name: 1.1.5
- get-intrinsic: 1.1.3
- get-symbol-description: 1.0.0
- has: 1.0.3
- has-property-descriptors: 1.0.0
- has-symbols: 1.0.3
- internal-slot: 1.0.3
- is-callable: 1.2.7
- is-negative-zero: 2.0.2
- is-regex: 1.1.4
- is-shared-array-buffer: 1.0.2
- is-string: 1.0.7
- is-weakref: 1.0.2
- object-inspect: 1.12.2
- object-keys: 1.1.1
- object.assign: 4.1.4
- regexp.prototype.flags: 1.4.3
- safe-regex-test: 1.0.0
- string.prototype.trimend: 1.0.5
- string.prototype.trimstart: 1.0.5
- unbox-primitive: 1.0.2
- dev: true
-
- /es-to-primitive/1.2.1:
- resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
- engines: {node: '>= 0.4'}
- dependencies:
- is-callable: 1.2.7
- is-date-object: 1.0.5
- is-symbol: 1.0.4
- dev: true
-
- /es6-promise/3.3.1:
- resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
- dev: true
-
- /esbuild-android-64/0.15.10:
- resolution: {integrity: sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-android-arm64/0.15.10:
- resolution: {integrity: sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-darwin-64/0.15.10:
- resolution: {integrity: sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-darwin-arm64/0.15.10:
- resolution: {integrity: sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-freebsd-64/0.15.10:
- resolution: {integrity: sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-freebsd-arm64/0.15.10:
- resolution: {integrity: sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-32/0.15.10:
- resolution: {integrity: sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-64/0.15.10:
- resolution: {integrity: sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-arm/0.15.10:
- resolution: {integrity: sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-arm64/0.15.10:
- resolution: {integrity: sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-mips64le/0.15.10:
- resolution: {integrity: sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-ppc64le/0.15.10:
- resolution: {integrity: sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-riscv64/0.15.10:
- resolution: {integrity: sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-linux-s390x/0.15.10:
- resolution: {integrity: sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-netbsd-64/0.15.10:
- resolution: {integrity: sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-openbsd-64/0.15.10:
- resolution: {integrity: sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-sunos-64/0.15.10:
- resolution: {integrity: sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-windows-32/0.15.10:
- resolution: {integrity: sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-windows-64/0.15.10:
- resolution: {integrity: sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild-windows-arm64/0.15.10:
- resolution: {integrity: sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
- requiresBuild: true
- dev: true
- optional: true
-
- /esbuild/0.15.10:
- resolution: {integrity: sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==}
- engines: {node: '>=12'}
- hasBin: true
- requiresBuild: true
- optionalDependencies:
- '@esbuild/android-arm': 0.15.10
- '@esbuild/linux-loong64': 0.15.10
- esbuild-android-64: 0.15.10
- esbuild-android-arm64: 0.15.10
- esbuild-darwin-64: 0.15.10
- esbuild-darwin-arm64: 0.15.10
- esbuild-freebsd-64: 0.15.10
- esbuild-freebsd-arm64: 0.15.10
- esbuild-linux-32: 0.15.10
- esbuild-linux-64: 0.15.10
- esbuild-linux-arm: 0.15.10
- esbuild-linux-arm64: 0.15.10
- esbuild-linux-mips64le: 0.15.10
- esbuild-linux-ppc64le: 0.15.10
- esbuild-linux-riscv64: 0.15.10
- esbuild-linux-s390x: 0.15.10
- esbuild-netbsd-64: 0.15.10
- esbuild-openbsd-64: 0.15.10
- esbuild-sunos-64: 0.15.10
- esbuild-windows-32: 0.15.10
- esbuild-windows-64: 0.15.10
- esbuild-windows-arm64: 0.15.10
- dev: true
-
- /escalade/3.1.1:
- resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
- engines: {node: '>=6'}
- dev: true
-
- /escape-string-regexp/1.0.5:
- resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
- engines: {node: '>=0.8.0'}
- dev: true
-
- /estree-walker/1.0.1:
- resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
- dev: true
-
- /estree-walker/2.0.2:
- resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
- dev: true
-
- /event-target-shim/5.0.1:
- resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
- engines: {node: '>=6'}
- dev: true
-
- /events/3.3.0:
- resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
- engines: {node: '>=0.8.x'}
- dev: true
-
- /fast-copy/2.1.7:
- resolution: {integrity: sha512-ozrGwyuCTAy7YgFCua8rmqmytECYk/JYAMXcswOcm0qvGoE3tPb7ivBeIHTOK2DiapBhDZgacIhzhQIKU5TCfA==}
- dev: true
-
- /fast-glob/3.2.12:
- resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
- engines: {node: '>=8.6.0'}
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.5
- dev: true
-
- /fast-redact/3.1.2:
- resolution: {integrity: sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==}
- engines: {node: '>=6'}
- dev: true
-
- /fast-safe-stringify/2.1.1:
- resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
- dev: true
-
- /fastq/1.13.0:
- resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
- dependencies:
- reusify: 1.0.4
- dev: true
-
- /fetch-blob/3.2.0:
- resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
- engines: {node: ^12.20 || >= 14.13}
- dependencies:
- node-domexception: 1.0.0
- web-streams-polyfill: 3.2.1
- 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
-
- /formdata-polyfill/4.0.10:
- resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
- engines: {node: '>=12.20.0'}
- dependencies:
- fetch-blob: 3.2.0
- dev: true
-
- /fraction.js/4.2.0:
- resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
- 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
-
- /function.prototype.name/1.1.5:
- resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- es-abstract: 1.20.3
- functions-have-names: 1.2.3
- dev: true
-
- /functions-have-names/1.2.3:
- resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
- dev: true
-
- /get-intrinsic/1.1.3:
- resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==}
- dependencies:
- function-bind: 1.1.1
- has: 1.0.3
- has-symbols: 1.0.3
- dev: true
-
- /get-symbol-description/1.0.0:
- resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.1.3
- dev: true
-
- /glob-parent/5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
- dependencies:
- is-glob: 4.0.3
- dev: true
-
- /glob-parent/6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
- 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
-
- /glob/8.0.3:
- resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==}
- engines: {node: '>=12'}
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 5.1.0
- once: 1.4.0
- dev: true
-
- /globalyzer/0.1.0:
- resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
- dev: true
-
- /globrex/0.1.2:
- resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
- dev: true
-
- /graceful-fs/4.2.10:
- resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
- dev: true
-
- /has-bigints/1.0.2:
- resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
- dev: true
-
- /has-flag/3.0.0:
- resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
- engines: {node: '>=4'}
- dev: true
-
- /has-property-descriptors/1.0.0:
- resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
- dependencies:
- get-intrinsic: 1.1.3
- dev: true
-
- /has-symbols/1.0.3:
- resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
- engines: {node: '>= 0.4'}
- dev: true
-
- /has-tostringtag/1.0.0:
- resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
- engines: {node: '>= 0.4'}
- dependencies:
- has-symbols: 1.0.3
- 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
-
- /help-me/4.1.0:
- resolution: {integrity: sha512-5HMrkOks2j8Fpu2j5nTLhrBhT7VwHwELpqnSnx802ckofys5MO2SkLpgSz3dgNFHV7IYFX2igm5CM75SmuYidw==}
- dependencies:
- glob: 8.0.3
- readable-stream: 3.6.0
- dev: true
-
- /hosted-git-info/2.8.9:
- resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
- dev: true
-
- /ieee754/1.2.1:
- resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- dev: true
-
- /import-fresh/3.3.0:
- resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
- engines: {node: '>=6'}
- dependencies:
- parent-module: 1.0.1
- resolve-from: 4.0.0
- 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
-
- /internal-slot/1.0.3:
- resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==}
- engines: {node: '>= 0.4'}
- dependencies:
- get-intrinsic: 1.1.3
- has: 1.0.3
- side-channel: 1.0.4
- dev: true
-
- /is-arrayish/0.2.1:
- resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- dev: true
-
- /is-bigint/1.0.4:
- resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
- dependencies:
- has-bigints: 1.0.2
- 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-boolean-object/1.1.2:
- resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.0
- dev: true
-
- /is-builtin-module/3.2.0:
- resolution: {integrity: sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==}
- engines: {node: '>=6'}
- dependencies:
- builtin-modules: 3.3.0
- dev: true
-
- /is-callable/1.2.7:
- resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
- engines: {node: '>= 0.4'}
- dev: true
-
- /is-core-module/2.10.0:
- resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==}
- dependencies:
- has: 1.0.3
- dev: true
-
- /is-date-object/1.0.5:
- resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
- engines: {node: '>= 0.4'}
- dependencies:
- has-tostringtag: 1.0.0
- 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-module/1.0.0:
- resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
- dev: true
-
- /is-negative-zero/2.0.2:
- resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
- engines: {node: '>= 0.4'}
- dev: true
-
- /is-number-object/1.0.7:
- resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
- engines: {node: '>= 0.4'}
- dependencies:
- has-tostringtag: 1.0.0
- dev: true
-
- /is-number/7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
- dev: true
-
- /is-reference/1.2.1:
- resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
- dependencies:
- '@types/estree': 1.0.0
- dev: true
-
- /is-regex/1.1.4:
- resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- has-tostringtag: 1.0.0
- dev: true
-
- /is-shared-array-buffer/1.0.2:
- resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
- dependencies:
- call-bind: 1.0.2
- dev: true
-
- /is-string/1.0.7:
- resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
- engines: {node: '>= 0.4'}
- dependencies:
- has-tostringtag: 1.0.0
- dev: true
-
- /is-symbol/1.0.4:
- resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
- engines: {node: '>= 0.4'}
- dependencies:
- has-symbols: 1.0.3
- dev: true
-
- /is-weakref/1.0.2:
- resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
- dependencies:
- call-bind: 1.0.2
- dev: true
-
- /isexe/2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
- dev: true
-
- /joycon/3.1.1:
- resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
- engines: {node: '>=10'}
- dev: true
-
- /js-cookie/3.0.1:
- resolution: {integrity: sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==}
- engines: {node: '>=12'}
- dev: true
-
- /json-parse-better-errors/1.0.2:
- resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
- dev: true
-
- /kleur/4.1.5:
- resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
- engines: {node: '>=6'}
- dev: true
-
- /lilconfig/2.0.6:
- resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==}
- engines: {node: '>=10'}
- dev: true
-
- /load-json-file/4.0.0:
- resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
- engines: {node: '>=4'}
- dependencies:
- graceful-fs: 4.2.10
- parse-json: 4.0.0
- pify: 3.0.0
- strip-bom: 3.0.0
- 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.5:
- resolution: {integrity: sha512-yXUIYOOQnEHKHOftp5shMWpB9ImfgfDJpapa38j/qMtTj5QHWucvxP4lUtuRmHT9vAzvtpHkWKXW9xBwimXeNg==}
- engines: {node: '>=12'}
- dependencies:
- sourcemap-codec: 1.4.8
- dev: true
-
- /memorystream/0.3.1:
- resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
- engines: {node: '>= 0.10.0'}
- dev: true
-
- /merge2/1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
- dev: true
-
- /micromatch/4.0.5:
- resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
- engines: {node: '>=8.6'}
- dependencies:
- braces: 3.0.2
- picomatch: 2.3.1
- dev: true
-
- /mime/3.0.0:
- resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
- engines: {node: '>=10.0.0'}
- hasBin: true
- dev: true
-
- /min-indent/1.0.1:
- resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
- engines: {node: '>=4'}
- dev: true
-
- /mini-svg-data-uri/1.4.4:
- resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
- hasBin: true
- dev: true
-
- /minimatch/3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
- dependencies:
- brace-expansion: 1.1.11
- dev: true
-
- /minimatch/5.1.0:
- resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}
- engines: {node: '>=10'}
- dependencies:
- brace-expansion: 2.0.1
- 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
-
- /mri/1.2.0:
- resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
- engines: {node: '>=4'}
- dev: true
-
- /mrmime/1.0.1:
- resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
- engines: {node: '>=10'}
- 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
-
- /nice-try/1.0.5:
- resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
- dev: true
-
- /node-domexception/1.0.0:
- resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
- engines: {node: '>=10.5.0'}
- dev: true
-
- /node-fetch/3.2.10:
- resolution: {integrity: sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- data-uri-to-buffer: 4.0.0
- fetch-blob: 3.2.0
- formdata-polyfill: 4.0.10
- dev: true
-
- /node-releases/2.0.6:
- resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==}
- dev: true
-
- /normalize-package-data/2.5.0:
- resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
- dependencies:
- hosted-git-info: 2.8.9
- resolve: 1.22.1
- semver: 5.7.1
- validate-npm-package-license: 3.0.4
- dev: true
-
- /normalize-path/3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /normalize-range/0.1.2:
- resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /npm-run-all/4.1.5:
- resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==}
- engines: {node: '>= 4'}
- hasBin: true
- dependencies:
- ansi-styles: 3.2.1
- chalk: 2.4.2
- cross-spawn: 6.0.5
- memorystream: 0.3.1
- minimatch: 3.1.2
- pidtree: 0.3.1
- read-pkg: 3.0.0
- shell-quote: 1.7.3
- string.prototype.padend: 3.1.3
- dev: true
-
- /object-hash/3.0.0:
- resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
- engines: {node: '>= 6'}
- dev: true
-
- /object-inspect/1.12.2:
- resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
- dev: true
-
- /object-keys/1.1.1:
- resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
- engines: {node: '>= 0.4'}
- dev: true
-
- /object.assign/4.1.4:
- resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- has-symbols: 1.0.3
- object-keys: 1.1.1
- dev: true
-
- /on-exit-leak-free/2.1.0:
- resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==}
- dev: true
-
- /once/1.4.0:
- resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
- dependencies:
- wrappy: 1.0.2
- dev: true
-
- /parent-module/1.0.1:
- resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
- engines: {node: '>=6'}
- dependencies:
- callsites: 3.1.0
- dev: true
-
- /parse-json/4.0.0:
- resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
- engines: {node: '>=4'}
- dependencies:
- error-ex: 1.3.2
- json-parse-better-errors: 1.0.2
- dev: true
-
- /path-is-absolute/1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /path-key/2.0.1:
- resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
- engines: {node: '>=4'}
- dev: true
-
- /path-parse/1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- dev: true
-
- /path-type/3.0.0:
- resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
- engines: {node: '>=4'}
- dependencies:
- pify: 3.0.0
- 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
-
- /pidtree/0.3.1:
- resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==}
- engines: {node: '>=0.10'}
- hasBin: true
- dev: true
-
- /pify/2.3.0:
- resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /pify/3.0.0:
- resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
- engines: {node: '>=4'}
- dev: true
-
- /pino-abstract-transport/1.0.0:
- resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==}
- dependencies:
- readable-stream: 4.2.0
- split2: 4.1.0
- dev: true
-
- /pino-pretty/9.1.0:
- resolution: {integrity: sha512-IM6NY9LLo/dVgY7/prJhCh4rAJukafdt0ibxeNOWc2fxKMyTk90SOB9Ao2HfbtShT9QPeP0ePpJktksMhSQMYA==}
- hasBin: true
- dependencies:
- colorette: 2.0.19
- dateformat: 4.6.3
- fast-copy: 2.1.7
- fast-safe-stringify: 2.1.1
- help-me: 4.1.0
- joycon: 3.1.1
- minimist: 1.2.6
- on-exit-leak-free: 2.1.0
- pino-abstract-transport: 1.0.0
- pump: 3.0.0
- readable-stream: 4.2.0
- secure-json-parse: 2.5.0
- sonic-boom: 3.2.0
- strip-json-comments: 3.1.1
- dev: true
-
- /pino-std-serializers/6.0.0:
- resolution: {integrity: sha512-mMMOwSKrmyl+Y12Ri2xhH1lbzQxwwpuru9VjyJpgFIH4asSj88F2csdMwN6+M5g1Ll4rmsYghHLQJw81tgZ7LQ==}
- dev: true
-
- /pino/8.6.1:
- resolution: {integrity: sha512-fi+V2K98eMZjQ/uEHHSiMALNrz7HaFdKNYuyA3ZUrbH0f1e8sPFDmeRGzg7ZH2q4QDxGnJPOswmqlEaTAZeDPA==}
- hasBin: true
- dependencies:
- atomic-sleep: 1.0.0
- fast-redact: 3.1.2
- on-exit-leak-free: 2.1.0
- pino-abstract-transport: 1.0.0
- pino-std-serializers: 6.0.0
- process-warning: 2.0.0
- quick-format-unescaped: 4.0.4
- real-require: 0.2.0
- safe-stable-stringify: 2.4.0
- sonic-boom: 3.2.0
- thread-stream: 2.2.0
- dev: true
-
- /playwright-core/1.26.1:
- resolution: {integrity: sha512-hzFchhhxnEiPc4qVPs9q2ZR+5eKNifY2hQDHtg1HnTTUuphYCBP8ZRb2si+B1TR7BHirgXaPi48LIye5SgrLAA==}
- engines: {node: '>=14'}
- hasBin: true
- dev: true
-
- /postcss-import/14.1.0_postcss@8.4.17:
- resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- postcss: ^8.0.0
- dependencies:
- postcss: 8.4.17
- postcss-value-parser: 4.2.0
- read-cache: 1.0.0
- resolve: 1.22.1
- dev: true
-
- /postcss-js/4.0.0_postcss@8.4.17:
- resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==}
- engines: {node: ^12 || ^14 || >= 16}
- peerDependencies:
- postcss: ^8.3.3
- dependencies:
- camelcase-css: 2.0.1
- postcss: 8.4.17
- dev: true
-
- /postcss-load-config/3.1.4_postcss@8.4.17:
- resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
- engines: {node: '>= 10'}
- peerDependencies:
- postcss: '>=8.0.9'
- ts-node: '>=9.0.0'
- peerDependenciesMeta:
- postcss:
- optional: true
- ts-node:
- optional: true
- dependencies:
- lilconfig: 2.0.6
- postcss: 8.4.17
- yaml: 1.10.2
- dev: true
-
- /postcss-load-config/4.0.1_postcss@8.4.17:
- resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
- engines: {node: '>= 14'}
- peerDependencies:
- postcss: '>=8.0.9'
- ts-node: '>=9.0.0'
- peerDependenciesMeta:
- postcss:
- optional: true
- ts-node:
- optional: true
- dependencies:
- lilconfig: 2.0.6
- postcss: 8.4.17
- yaml: 2.1.2
- dev: true
-
- /postcss-nested/5.0.6_postcss@8.4.17:
- resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==}
- engines: {node: '>=12.0'}
- peerDependencies:
- postcss: ^8.2.14
- dependencies:
- postcss: 8.4.17
- postcss-selector-parser: 6.0.10
- dev: true
-
- /postcss-selector-parser/6.0.10:
- resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
- engines: {node: '>=4'}
- dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
- dev: true
-
- /postcss-value-parser/4.2.0:
- resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- dev: true
-
- /postcss/8.4.17:
- resolution: {integrity: sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==}
- engines: {node: ^10 || ^12 || >=14}
- dependencies:
- nanoid: 3.3.4
- picocolors: 1.0.0
- source-map-js: 1.0.2
- dev: true
-
- /process-warning/2.0.0:
- resolution: {integrity: sha512-+MmoAXoUX+VTHAlwns0h+kFUWFs/3FZy+ZuchkgjyOu3oioLAo2LB5aCfKPh2+P9O18i3m43tUEv3YqttSy0Ww==}
- dev: true
-
- /process/0.11.10:
- resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
- engines: {node: '>= 0.6.0'}
- dev: true
-
- /pump/3.0.0:
- resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
- dependencies:
- end-of-stream: 1.4.4
- once: 1.4.0
- dev: true
-
- /queue-microtask/1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- dev: true
-
- /quick-format-unescaped/4.0.4:
- resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
- dev: true
-
- /quick-lru/5.1.1:
- resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
- engines: {node: '>=10'}
- dev: true
-
- /read-cache/1.0.0:
- resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
- dependencies:
- pify: 2.3.0
- dev: true
-
- /read-pkg/3.0.0:
- resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
- engines: {node: '>=4'}
- dependencies:
- load-json-file: 4.0.0
- normalize-package-data: 2.5.0
- path-type: 3.0.0
- dev: true
-
- /readable-stream/3.6.0:
- resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
- engines: {node: '>= 6'}
- dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
- dev: true
-
- /readable-stream/4.2.0:
- resolution: {integrity: sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- dependencies:
- abort-controller: 3.0.0
- buffer: 6.0.3
- events: 3.3.0
- process: 0.11.10
- dev: true
-
- /readdirp/3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
- dependencies:
- picomatch: 2.3.1
- dev: true
-
- /real-require/0.2.0:
- resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
- engines: {node: '>= 12.13.0'}
- dev: true
-
- /regexp.prototype.flags/1.4.3:
- resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- functions-have-names: 1.2.3
- dev: true
-
- /resolve-from/4.0.0:
- resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
- engines: {node: '>=4'}
- dev: true
-
- /resolve/1.22.1:
- resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
- hasBin: true
- dependencies:
- is-core-module: 2.10.0
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
- dev: true
-
- /reusify/1.0.4:
- resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- dev: true
-
- /rimraf/2.7.1:
- resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
- hasBin: true
- dependencies:
- glob: 7.2.3
- dev: true
-
- /rollup/2.78.1:
- resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==}
- engines: {node: '>=10.0.0'}
- hasBin: true
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
-
- /rollup/2.79.1:
- resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
- engines: {node: '>=10.0.0'}
- hasBin: true
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
-
- /run-parallel/1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
- dependencies:
- queue-microtask: 1.2.3
- dev: true
-
- /sade/1.8.1:
- resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
- engines: {node: '>=6'}
- dependencies:
- mri: 1.2.0
- dev: true
-
- /safe-buffer/5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- dev: true
-
- /safe-regex-test/1.0.0:
- resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
- dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.1.3
- is-regex: 1.1.4
- dev: true
-
- /safe-stable-stringify/2.4.0:
- resolution: {integrity: sha512-eehKHKpab6E741ud7ZIMcXhKcP6TSIezPkNZhy5U8xC6+VvrRdUA2tMgxGxaGl4cz7c2Ew5+mg5+wNB16KQqrA==}
- engines: {node: '>=10'}
- 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
-
- /secure-json-parse/2.5.0:
- resolution: {integrity: sha512-ZQruFgZnIWH+WyO9t5rWt4ZEGqCKPwhiw+YbzTwpmT9elgLrLcfuyUiSnwwjUiVy9r4VM3urtbNF1xmEh9IL2w==}
- dev: true
-
- /semver/5.7.1:
- resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
- hasBin: true
- dev: true
-
- /set-cookie-parser/2.5.1:
- resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==}
- dev: true
-
- /shebang-command/1.2.0:
- resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
- engines: {node: '>=0.10.0'}
- dependencies:
- shebang-regex: 1.0.0
- dev: true
-
- /shebang-regex/1.0.0:
- resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /shell-quote/1.7.3:
- resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==}
- dev: true
-
- /side-channel/1.0.4:
- resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
- dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.1.3
- object-inspect: 1.12.2
- dev: true
-
- /sirv/2.0.2:
- resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==}
- engines: {node: '>= 10'}
- dependencies:
- '@polka/url': 1.0.0-next.21
- mrmime: 1.0.1
- totalist: 3.0.0
- dev: true
-
- /sonic-boom/3.2.0:
- resolution: {integrity: sha512-SbbZ+Kqj/XIunvIAgUZRlqd6CGQYq71tRRbXR92Za8J/R3Yh4Av+TWENiSiEgnlwckYLyP0YZQWVfyNC0dzLaA==}
- dependencies:
- atomic-sleep: 1.0.0
- 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
-
- /spdx-correct/3.1.1:
- resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==}
- dependencies:
- spdx-expression-parse: 3.0.1
- spdx-license-ids: 3.0.12
- dev: true
-
- /spdx-exceptions/2.3.0:
- resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
- dev: true
-
- /spdx-expression-parse/3.0.1:
- resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
- dependencies:
- spdx-exceptions: 2.3.0
- spdx-license-ids: 3.0.12
- dev: true
-
- /spdx-license-ids/3.0.12:
- resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==}
- dev: true
-
- /split2/4.1.0:
- resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==}
- engines: {node: '>= 10.x'}
- dev: true
-
- /string.prototype.padend/3.1.3:
- resolution: {integrity: sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- es-abstract: 1.20.3
- dev: true
-
- /string.prototype.trimend/1.0.5:
- resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- es-abstract: 1.20.3
- dev: true
-
- /string.prototype.trimstart/1.0.5:
- resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==}
- dependencies:
- call-bind: 1.0.2
- define-properties: 1.1.4
- es-abstract: 1.20.3
- dev: true
-
- /string_decoder/1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
- dependencies:
- safe-buffer: 5.2.1
- dev: true
-
- /strip-bom/3.0.0:
- resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
- engines: {node: '>=4'}
- 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
-
- /strip-json-comments/3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
- dev: true
-
- /supports-color/5.5.0:
- resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
- engines: {node: '>=4'}
- dependencies:
- has-flag: 3.0.0
- dev: true
-
- /supports-preserve-symlinks-flag/1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
- dev: true
-
- /svelte-check/2.9.1_ejhwqstqdwfnekvhsm3hus3z4i:
- resolution: {integrity: sha512-+BFPsj6irZ+t2pVSVo//2Ic1mI3A52xCwbkSTVhTqYZqgawcyZd9pYZoEac3fIWbEeTyCb5X82ORKI/gjn+P7A==}
- hasBin: true
- peerDependencies:
- svelte: ^3.24.0
- dependencies:
- '@jridgewell/trace-mapping': 0.3.15
- chokidar: 3.5.3
- fast-glob: 3.2.12
- import-fresh: 3.3.0
- picocolors: 1.0.0
- sade: 1.8.1
- svelte: 3.50.1
- svelte-preprocess: 4.10.7_or4gyn62tntw7ihg73nagmkdja
- typescript: 4.8.4
- transitivePeerDependencies:
- - '@babel/core'
- - coffeescript
- - less
- - node-sass
- - postcss
- - postcss-load-config
- - pug
- - sass
- - stylus
- - sugarss
- dev: true
-
- /svelte-hmr/0.15.0_svelte@3.50.1:
- resolution: {integrity: sha512-Aw21SsyoohyVn4yiKXWPNCSW2DQNH/76kvUnE9kpt4h9hcg9tfyQc6xshx9hzgMfGF0kVx0EGD8oBMWSnATeOg==}
- engines: {node: ^12.20 || ^14.13.1 || >= 16}
- peerDependencies:
- svelte: '>=3.19.0'
- dependencies:
- svelte: 3.50.1
- dev: true
-
- /svelte-preprocess/4.10.7_or4gyn62tntw7ihg73nagmkdja:
- 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
- postcss: 8.4.17
- postcss-load-config: 4.0.1_postcss@8.4.17
- sorcery: 0.10.0
- strip-indent: 3.0.0
- svelte: 3.50.1
- typescript: 4.8.4
- dev: true
-
- /svelte/3.50.1:
- resolution: {integrity: sha512-bS4odcsdj5D5jEg6riZuMg5NKelzPtmsCbD9RG+8umU03TeNkdWnP6pqbCm0s8UQNBkqk29w/Bdubn3C+HWSwA==}
- engines: {node: '>= 8'}
- dev: true
-
- /tailwindcss/3.1.8_postcss@8.4.17:
- resolution: {integrity: sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==}
- engines: {node: '>=12.13.0'}
- hasBin: true
- peerDependencies:
- postcss: ^8.0.9
- dependencies:
- arg: 5.0.2
- chokidar: 3.5.3
- color-name: 1.1.4
- detective: 5.2.1
- didyoumean: 1.2.2
- dlv: 1.1.3
- fast-glob: 3.2.12
- glob-parent: 6.0.2
- is-glob: 4.0.3
- lilconfig: 2.0.6
- normalize-path: 3.0.0
- object-hash: 3.0.0
- picocolors: 1.0.0
- postcss: 8.4.17
- postcss-import: 14.1.0_postcss@8.4.17
- postcss-js: 4.0.0_postcss@8.4.17
- postcss-load-config: 3.1.4_postcss@8.4.17
- postcss-nested: 5.0.6_postcss@8.4.17
- postcss-selector-parser: 6.0.10
- postcss-value-parser: 4.2.0
- quick-lru: 5.1.1
- resolve: 1.22.1
- transitivePeerDependencies:
- - ts-node
- dev: true
-
- /temporal-polyfill/0.0.8:
- resolution: {integrity: sha512-IuA8GhS1PRC04H/zVNAIxJvCZQum6V5HjqFj7gz1a3SMUf/Kf1xIXILNYtxrWYnGqIU/RrDRxlCKCm/vmqnBvw==}
- dependencies:
- temporal-spec: 0.0.3
- dev: true
-
- /temporal-spec/0.0.3:
- resolution: {integrity: sha512-gJu7QRqn5c2vTSkYWGC4qz1i+FZ9C+Cz16UIBMRcjgXOsHfXeSIgaWUKeq/2rz1iNfFxvmF/ywqbfC6ggTpjkA==}
- dev: true
-
- /thread-stream/2.2.0:
- resolution: {integrity: sha512-rUkv4/fnb4rqy/gGy7VuqK6wE1+1DOCOWy4RMeaV69ZHMP11tQKZvZSip1yTgrKCMZzEMcCL/bKfHvSfDHx+iQ==}
- dependencies:
- real-require: 0.2.0
- dev: true
-
- /tiny-glob/0.2.9:
- resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
- dependencies:
- globalyzer: 0.1.0
- globrex: 0.1.2
- 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
-
- /totalist/3.0.0:
- resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==}
- engines: {node: '>=6'}
- dev: true
-
- /tslib/2.4.0:
- resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
- dev: true
-
- /typesafe-i18n/5.14.0_typescript@4.8.4:
- resolution: {integrity: sha512-ZNHysUvZZhmUuMjBvDGtUI8vT3g//4ay5fFOk2sJCsjx4ztippW1Hrhrq59nJ9mV/Q0u4OX80Gyorq8L3rwNLw==}
- hasBin: true
- peerDependencies:
- typescript: '>=3.5.1'
- dependencies:
- typescript: 4.8.4
- dev: true
-
- /typescript/4.8.4:
- resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==}
- engines: {node: '>=4.2.0'}
- hasBin: true
- dev: true
-
- /unbox-primitive/1.0.2:
- resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
- dependencies:
- call-bind: 1.0.2
- has-bigints: 1.0.2
- has-symbols: 1.0.3
- which-boxed-primitive: 1.0.2
- dev: true
-
- /undici/5.10.0:
- resolution: {integrity: sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g==}
- engines: {node: '>=12.18'}
- dev: true
-
- /update-browserslist-db/1.0.9_browserslist@4.21.4:
- resolution: {integrity: sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
- dependencies:
- browserslist: 4.21.4
- escalade: 3.1.1
- picocolors: 1.0.0
- dev: true
-
- /util-deprecate/1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- dev: true
-
- /validate-npm-package-license/3.0.4:
- resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
- dependencies:
- spdx-correct: 3.1.1
- spdx-expression-parse: 3.0.1
- dev: true
-
- /vite/3.1.4:
- resolution: {integrity: sha512-JoQI08aBjY9lycL7jcEq4p9o1xUjq5aRvdH4KWaXtkSx7e7RpAh9D3IjzDWRD4Fg44LS3oDAIOG/Kq1L+82psA==}
- 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.15.10
- postcss: 8.4.17
- resolve: 1.22.1
- rollup: 2.78.1
- optionalDependencies:
- fsevents: 2.3.2
- dev: true
-
- /web-streams-polyfill/3.2.1:
- resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==}
- engines: {node: '>= 8'}
- dev: true
-
- /which-boxed-primitive/1.0.2:
- resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
- dependencies:
- is-bigint: 1.0.4
- is-boolean-object: 1.1.2
- is-number-object: 1.0.7
- is-string: 1.0.7
- is-symbol: 1.0.4
- dev: true
-
- /which/1.3.1:
- resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
- hasBin: true
- dependencies:
- isexe: 2.0.0
- dev: true
-
- /wrappy/1.0.2:
- resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- dev: true
-
- /xtend/4.0.2:
- resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
- engines: {node: '>=0.4'}
- dev: true
-
- /yaml/1.10.2:
- resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
- engines: {node: '>= 6'}
- dev: true
-
- /yaml/2.1.2:
- resolution: {integrity: sha512-VSdf2/K3FqAetooKQv45Hcu6sA00aDgWZeGcG6V9IYJnVLTnb6988Tie79K5nx2vK7cEpf+yW8Oy+7iPAbdiHA==}
- engines: {node: '>= 14'}
- dev: true
diff --git a/apps/kit/postcss.config.cjs b/apps/kit/postcss.config.cjs
deleted file mode 100644
index a53e3b3..0000000
--- a/apps/kit/postcss.config.cjs
+++ /dev/null
@@ -1,13 +0,0 @@
-const tailwindcss = require("tailwindcss");
-const autoprefixer = require("autoprefixer");
-const nesting = require("tailwindcss/nesting");
-
-const config = {
- plugins: [
- nesting,
- tailwindcss,
- autoprefixer
- ],
-};
-
-module.exports = config;
diff --git a/apps/kit/src/actions/pwKey.ts b/apps/kit/src/actions/pwKey.ts
deleted file mode 100644
index a2f22e7..0000000
--- a/apps/kit/src/actions/pwKey.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { is_development, is_testing } from "$lib/configuration";
-
-export default function pwKey(node: HTMLElement, value: string | undefined) {
- if (!value) return;
- if (!is_testing()) {
- if (is_development()) console.warn("VITE_TESTING is false, so not setting pw-key attributes");
- return;
- }
- node.setAttribute("pw-key", value);
-} \ No newline at end of file
diff --git a/apps/kit/src/app.d.ts b/apps/kit/src/app.d.ts
deleted file mode 100644
index 220ddc1..0000000
--- a/apps/kit/src/app.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-// See https://kit.svelte.dev/docs/types#app
-// for information about these interfaces
-// and what to do when importing types
-declare namespace App {
- interface Locals {}
- interface Platform {}
- interface PrivateEnv {}
- interface PublicEnv {}
-} \ No newline at end of file
diff --git a/apps/kit/src/app.html b/apps/kit/src/app.html
deleted file mode 100644
index 308b223..0000000
--- a/apps/kit/src/app.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html class="h-full bg-white" lang="en">
-
-<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width" />
- %sveltekit.head%
-</head>
-
-<body class="h-full">
- <div>%sveltekit.body%</div>
-</body>
-
-</html> \ No newline at end of file
diff --git a/apps/kit/src/app.pcss b/apps/kit/src/app.pcss
deleted file mode 100644
index d256fea..0000000
--- a/apps/kit/src/app.pcss
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Write your global styles here, in PostCSS syntax */
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
-pre {
- font-family: monospace !important;
-}
-
-*:focus-visible {
- outline: 1px auto;
-}
-
-.c-disabled {
- cursor: not-allowed !important;
- filter: opacity(.45);
- pointer-events: none !important;
-}
-
-.c-disabled.loading {
- cursor: wait !important;
-}
-
-.link {
- @apply text-blue-600 hover:text-blue-700 transition duration-300 ease-in-out mb-4;
-
- &.danger {
- @apply text-red-600 hover:text-red-700;
- }
-
- &.active {
- @apply underline
- }
-} \ No newline at end of file
diff --git a/apps/kit/src/global.d.ts b/apps/kit/src/global.d.ts
deleted file mode 100644
index 13f5e16..0000000
--- a/apps/kit/src/global.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-/// <reference types="@sveltejs/kit" />
-
-type Locales = import('$lib/i18n/i18n-types').Locales
-type TranslationFunctions = import('$lib/i18n/i18n-types').TranslationFunctions
-
-declare namespace App {
- interface Locals {
- locale: Locales
- LL: TranslationFunctions
- }
-} \ No newline at end of file
diff --git a/apps/kit/src/hooks.server.ts b/apps/kit/src/hooks.server.ts
deleted file mode 100644
index 0f6e0c0..0000000
--- a/apps/kit/src/hooks.server.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { CookieNames } from "$lib/configuration";
-import { detectLocale, i18n, isLocale, locales } from '$lib/i18n/i18n-util'
-import type { Handle, RequestEvent } from '@sveltejs/kit'
-import { initAcceptLanguageHeaderDetector } from 'typesafe-i18n/detectors'
-import { parse, serialize } from "cookie";
-import type { Locales } from "$lib/i18n/i18n-types";
-import { loadAllLocales } from "$lib/i18n/i18n-util.sync";
-
-
-loadAllLocales()
-const L = i18n()
-
-export const handle: Handle = async ({ event, resolve }) => {
- const cookies = parse(event.request.headers.get("Cookie") ?? '');
- const localeCookie = cookies[CookieNames.locale];
- const preferredLocale = getPreferredLocale(event);
- let finalLocale = localeCookie ?? preferredLocale;
-
- console.log("Handling locale", {
- locales,
- localeCookie,
- preferredLocale,
- finalLocale
- });
-
- if (!isLocale(finalLocale)) finalLocale = "en";
- if (!localeCookie) {
- // Set a locale cookie
- event.setHeaders({
- "Set-Cookie": serialize(CookieNames.locale, finalLocale, {
- path: "/",
- expires: new Date(2099, 1, 1, 0, 0, 0, 0),
- sameSite: "strict"
- })
- });
- }
-
- event.locals.locale = finalLocale as Locales;
- event.locals.LL = L[finalLocale as Locales];
-
- return resolve(event, { transformPageChunk: ({ html }) => html.replace('%lang%', finalLocale) });
-}
-
-function getPreferredLocale(event: RequestEvent) {
- const acceptLanguageDetector = initAcceptLanguageHeaderDetector(event.request);
- return detectLocale(acceptLanguageDetector);
-}
diff --git a/apps/kit/src/lib/api/internal-fetch.ts b/apps/kit/src/lib/api/internal-fetch.ts
deleted file mode 100644
index b21d669..0000000
--- a/apps/kit/src/lib/api/internal-fetch.ts
+++ /dev/null
@@ -1,170 +0,0 @@
-import { Temporal } from "temporal-polyfill";
-import { clear_session_data } from "$lib/session";
-import { resolve_references } from "$lib/helpers";
-import type { IInternalFetchResponse } from "$lib/models/IInternalFetchResponse";
-import type { IInternalFetchRequest } from "$lib/models/IInternalFetchRequest";
-import { redirect } from "@sveltejs/kit";
-
-export async function http_post(url: string, body?: object | string, timeout = -1, skip_401_check = false, abort_signal?: AbortSignal): Promise<IInternalFetchResponse> {
- const init = {
- method: "post",
- } as RequestInit;
-
- if (abort_signal) {
- init.signal = abort_signal;
- }
-
- if (body) {
- init.headers = {
- "Content-Type": "application/json;charset=UTF-8",
- };
- init.body = JSON.stringify(body);
- }
-
- const response = await internal_fetch({ url, init, timeout });
- const result = {} as IInternalFetchResponse;
-
- if (!skip_401_check && await is_401(response)) return result;
-
- result.ok = response.ok;
- result.status = response.status;
- result.http_response = response;
-
- if (response.status !== 204) {
- try {
- const ct = response.headers.get("Content-Type")?.toString() ?? "";
- if (ct.startsWith("application/json")) {
- const data = await response.json();
- result.data = resolve_references(data);
- } else if (ct.startsWith("text/plain")) {
- const text = await response.text();
- result.data = text as string;
- }
- } catch {
- // Ignored
- }
- }
-
- return result;
-}
-
-export async function http_get(url: string, timeout = -1, skip_401_check = false, abort_signal?: AbortSignal): Promise<IInternalFetchResponse> {
- const init = {
- method: "get",
- } as RequestInit;
-
- if (abort_signal) {
- init.signal = abort_signal;
- }
-
- const response = await internal_fetch({ url, init, timeout });
- const result = {} as IInternalFetchResponse;
-
- if (!skip_401_check && await is_401(response)) return result;
-
- result.ok = response.ok;
- result.status = response.status;
- result.http_response = response;
-
- if (response.status !== 204) {
- try {
- const ct = response.headers.get("Content-Type")?.toString() ?? "";
- if (ct.startsWith("application/json")) {
- const data = await response.json();
- result.data = resolve_references(data);
- } else if (ct.startsWith("text/plain")) {
- const text = await response.text();
- result.data = text as string;
- }
- } catch {
- // Ignored
- }
- }
-
- return result;
-}
-
-export async function http_delete(url: string, body?: object | string, timeout = -1, skip_401_check = false, abort_signal?: AbortSignal): Promise<IInternalFetchResponse> {
- const init = {
- method: "delete",
- } as RequestInit;
-
- if (abort_signal) {
- init.signal = abort_signal;
- }
-
- if (body) {
- init.headers = {
- "Content-Type": "application/json;charset=UTF-8",
- };
- init.body = JSON.stringify(body);
- }
-
- const response = await internal_fetch({ url, init, timeout });
- const result = {} as IInternalFetchResponse;
-
- if (!skip_401_check && await is_401(response)) return result;
-
- result.ok = response.ok;
- result.status = response.status;
- result.http_response = response;
-
- if (response.status !== 204) {
- try {
- const ct = response.headers.get("Content-Type")?.toString() ?? "";
- if (ct.startsWith("application/json")) {
- const data = await response.json();
- result.data = resolve_references(data);
- } else if (ct.startsWith("text/plain")) {
- const text = await response.text();
- result.data = text as string;
- }
- } catch (error) {
- // ignored
- }
- }
-
- return result;
-}
-
-async function internal_fetch(request: IInternalFetchRequest): Promise<Response> {
- if (!request.init) request.init = {};
- request.init.credentials = "include";
- request.init.headers = {
- "X-TimeZone": Temporal.Now.timeZone().id,
- ...request.init.headers
- };
-
- const fetch_request = new Request(request.url, request.init);
- let response: any;
-
- try {
- if (request.timeout && request.timeout > 500) {
- response = await Promise.race([
- fetch(fetch_request),
- new Promise((_, reject) => setTimeout(() => reject(new Error("Timeout")), request.timeout))
- ]);
- } else {
- response = await fetch(fetch_request);
- }
- } catch (error: any) {
- console.log(error);
- if (error.message === "Timeout") {
- console.error("Request timed out");
- } else if (error.message === "Network request failed") {
- console.error("No internet connection");
- } else {
- throw error; // rethrow other unexpected errors
- }
- }
-
- return response;
-}
-
-async function is_401(response: Response): Promise<boolean> {
- if (response.status === 401) {
- clear_session_data();
- throw redirect(307, "/login");
- }
- return false;
-}
diff --git a/apps/kit/src/lib/api/root.ts b/apps/kit/src/lib/api/root.ts
deleted file mode 100644
index 3e5bda2..0000000
--- a/apps/kit/src/lib/api/root.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import {http_post} from "$lib/api/internal-fetch";
-import {api_base} from "$lib/configuration";
-
-export function server_log(message: string): void {
- http_post(api_base("_/api/log"), message);
-}
diff --git a/apps/kit/src/lib/api/time-entry.ts b/apps/kit/src/lib/api/time-entry.ts
deleted file mode 100644
index a40b0c2..0000000
--- a/apps/kit/src/lib/api/time-entry.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import {api_base} from "$lib/configuration";
-import {is_guid} from "$lib/helpers";
-import {http_delete, http_get, http_post} from "./internal-fetch";
-import type {TimeCategoryDto} from "$lib/models/TimeCategoryDto";
-import type {TimeLabelDto} from "$lib/models/TimeLabelDto";
-import type {TimeEntryDto} from "$lib/models/TimeEntryDto";
-import type {TimeEntryQuery} from "$lib/models/TimeEntryQuery";
-import type {IInternalFetchResponse} from "$lib/models/IInternalFetchResponse";
-
-
-// ENTRIES
-
-export async function create_time_entry(payload: TimeEntryDto): Promise<IInternalFetchResponse> {
- return http_post(api_base("v1/entries/create"), payload);
-}
-
-export async function get_time_entry(entryId: string): Promise<IInternalFetchResponse> {
- if (is_guid(entryId)) {
- return http_get(api_base("v1/entries/" + entryId));
- }
- throw new Error("entryId is not a valid guid.");
-}
-
-export async function get_time_entries(entryQuery: TimeEntryQuery): Promise<IInternalFetchResponse> {
- return http_post(api_base("v1/entries/query"), entryQuery);
-}
-
-export async function delete_time_entry(id: string): Promise<IInternalFetchResponse> {
- if (!is_guid(id)) throw new Error("id is not a valid guid");
- return http_delete(api_base("v1/entries/" + id + "/delete"));
-}
-
-export async function update_time_entry(entryDto: TimeEntryDto): Promise<IInternalFetchResponse> {
- if (!is_guid(entryDto.id ?? "")) throw new Error("id is not a valid guid");
- if (!entryDto.category) throw new Error("category is empty");
- if (!entryDto.stop) throw new Error("stop is empty");
- if (!entryDto.start) throw new Error("start is empty");
- return http_post(api_base("v1/entries/update"), entryDto);
-}
-
-// LABELS
-export async function create_time_label(labelDto: TimeLabelDto): Promise<IInternalFetchResponse> {
- return http_post(api_base("v1/labels/create"), labelDto);
-}
-
-export async function get_time_labels(): Promise<IInternalFetchResponse> {
- return http_get(api_base("v1/labels"));
-}
-
-export async function delete_time_label(id: string): Promise<IInternalFetchResponse> {
- if (!is_guid(id)) throw new Error("id is not a valid guid");
- return http_delete(api_base("v1/labels/" + id + "/delete"));
-}
-
-export async function update_time_label(labelDto: TimeLabelDto): Promise<IInternalFetchResponse> {
- if (!is_guid(labelDto.id ?? "")) throw new Error("id is not a valid guid");
- if (!labelDto.name) throw new Error("name is empty");
- if (!labelDto.color) throw new Error("color is empty");
- return http_post(api_base("v1/labels/update"), labelDto);
-}
-
-// CATEGORIES
-export async function create_time_category(category: TimeCategoryDto): Promise<IInternalFetchResponse> {
- if (!category.name) throw new Error("name is empty");
- if (!category.color) throw new Error("color is empty");
- return http_post(api_base("v1/categories/create"), category);
-}
-
-export async function get_time_categories(): Promise<IInternalFetchResponse> {
- return http_get(api_base("v1/categories"));
-}
-
-export async function delete_time_category(id: string): Promise<IInternalFetchResponse> {
- if (!is_guid(id)) throw new Error("id is not a valid guid");
- return http_delete(api_base("v1/categories/" + id + "/delete"));
-}
-
-export async function update_time_category(category: TimeCategoryDto): Promise<IInternalFetchResponse> {
- if (!is_guid(category.id ?? "")) throw new Error("id is not a valid guid");
- if (!category.name) throw new Error("name is empty");
- if (!category.color) throw new Error("color is empty");
- return http_post(api_base("v1/categories/update"), category);
-}
diff --git a/apps/kit/src/lib/api/user.ts b/apps/kit/src/lib/api/user.ts
deleted file mode 100644
index f0dc932..0000000
--- a/apps/kit/src/lib/api/user.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import {api_base} from "$lib/configuration";
-import {http_delete, http_get, http_post} from "./internal-fetch";
-import type {LoginPayload} from "$lib/models/LoginPayload";
-import type {UpdateProfilePayload} from "$lib/models/UpdateProfilePayload";
-import type {CreateAccountPayload} from "$lib/models/CreateAccountPayload";
-import type {IInternalFetchResponse} from "$lib/models/IInternalFetchResponse";
-
-export async function login(payload: LoginPayload): Promise<IInternalFetchResponse> {
- return http_post(api_base("_/account/login"), payload);
-}
-
-export async function logout(): Promise<IInternalFetchResponse> {
- return http_get(api_base("_/account/logout"));
-}
-
-export async function create_forgot_password_request(username: string): Promise<IInternalFetchResponse> {
- if (!username) throw new Error("Username is empty");
- return http_get(api_base("_/forgot-password-requests/create?username=" + username));
-}
-
-export async function check_forgot_password_request(public_id: string): Promise<IInternalFetchResponse> {
- if (!public_id) throw new Error("Id is empty");
- return http_get(api_base("_/forgot-password-requests/is-valid?id=" + public_id));
-}
-
-export async function fulfill_forgot_password_request(public_id: string, newPassword: string): Promise<IInternalFetchResponse> {
- if (!public_id) throw new Error("Id is empty");
- return http_post(api_base("_/forgot-password-requests/fulfill"), {id: public_id, newPassword});
-}
-
-export async function delete_account(): Promise<IInternalFetchResponse> {
- return http_delete(api_base("_/account/delete"));
-}
-
-export async function update_profile(payload: UpdateProfilePayload): Promise<IInternalFetchResponse> {
- if (!payload.password && !payload.username) throw new Error("Password and Username is empty");
- return http_post(api_base("_/account/update"), payload);
-}
-
-export async function create_account(payload: CreateAccountPayload): Promise<IInternalFetchResponse> {
- if (!payload.password && !payload.username) throw new Error("Password and Username is empty");
- return http_post(api_base("_/account/create"), payload);
-}
-
-export async function get_profile_for_active_check(): Promise<IInternalFetchResponse> {
- return http_get(api_base("_/account"), 0, true);
-}
diff --git a/apps/kit/src/lib/colors.ts b/apps/kit/src/lib/colors.ts
deleted file mode 100644
index 34c7992..0000000
--- a/apps/kit/src/lib/colors.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-export function generate_random_hex_color(skip_contrast_check = false) {
- let hex = __generate_random_hex_color();
- if (skip_contrast_check) return hex;
- while ((__calculate_contrast_ratio("#ffffff", hex) < 4.5) || (__calculate_contrast_ratio("#000000", hex) < 4.5)) {
- hex = __generate_random_hex_color();
- }
-
- return hex;
-}
-
-// Largely copied from chroma js api
-function __generate_random_hex_color(): string {
- let code = "#";
- for (let i = 0; i < 6; i++) {
- code += "0123456789abcdef".charAt(Math.floor(Math.random() * 16));
- }
- return code;
-}
-
-function __calculate_contrast_ratio(hex1: string, hex2: string): number {
- const rgb1 = __hex_to_rgb(hex1);
- const rgb2 = __hex_to_rgb(hex2);
- const l1 = __get_luminance(rgb1[0], rgb1[1], rgb1[2]);
- const l2 = __get_luminance(rgb2[0], rgb2[1], rgb2[2]);
- const result = l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);
- return result;
-}
-
-function __hex_to_rgb(hex: string): number[] {
- if (!hex.match(/^#([A-Fa-f0-9]{6})$/)) return [];
- if (hex[0] === "#") hex = hex.substring(1, hex.length);
- return [parseInt(hex.substring(0, 2), 16), parseInt(hex.substring(2, 4), 16), parseInt(hex.substring(4, 6), 16)];
-}
-
-function __get_luminance(r: any, g: any, b: any) {
- // relative luminance
- // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
- r = __luminance_x(r);
- g = __luminance_x(g);
- b = __luminance_x(b);
- return 0.2126 * r + 0.7152 * g + 0.0722 * b;
-}
-
-function __luminance_x(x: any) {
- x /= 255;
- return x <= 0.03928 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
-}
diff --git a/apps/kit/src/lib/components/alert.svelte b/apps/kit/src/lib/components/alert.svelte
deleted file mode 100644
index fd57105..0000000
--- a/apps/kit/src/lib/components/alert.svelte
+++ /dev/null
@@ -1,268 +0,0 @@
-<script lang="ts">
- import { random_string } from "$lib/helpers";
- import { createEventDispatcher } from "svelte";
- import { onMount } from "svelte";
- import pwKey from "$actions/pwKey";
- import { Temporal } from "temporal-polyfill";
- import { ExclamationTriangleIcon, CheckCircleIcon, InformationCircleIcon, XCircleIcon, XMarkIcon } from "./icons";
-
- const dispatch = createEventDispatcher();
- const noCooldownSetting = "no-cooldown";
-
- let iconComponent: any;
- let colorClassPart = "";
-
- /**
- * An optional id for this alert, a default is set if not specified.
- * This value is necessary for closeable cooldown to work.
- */
- // if no unique id is supplied, cooldown will not work between page loads.
- // Therefore we are disabling it with noCooldownSetting in the fallback id.
- export let id = "alert--" + noCooldownSetting + "--" + random_string(4);
- /**
- * The title to communicate, value is optional
- */
- export let title = "";
- /**
- * The message to communicate, value is optional
- */
- export let message = "";
- /**
- * Changes the alerts color and icon.
- */
- export let type: "info" | "success" | "warning" | "error" = "info";
- /**
- * If true the alert can be removed from the DOM by clicking on a X icon on the upper right hand courner
- */
- export let closeable = false;
- /**
- * The amount of seconds that should go by before this alert is shown again, only works when a unique id is set.
- * Set to ~ if it should only be shown once per client (State stored in localestorage).
- **/
- export let closeableCooldown = "-1";
- /**
- * The text that is displayed on the right link
- */
- export let rightLinkText = "";
- /**
- * An array of list items displayed under the message or title
- */
- export let listItems: Array<string> = [];
- /**
- * An array of {id:string;text:string;color?:string}, where id is dispatched back as an svelte event with this syntax act$id (ex: on:actcancel).
- * Text is the button text
- * Color is the optional tailwind color to used, the value is used in classes like bg-$color-50.
- */
- export let actions: Array<{ id: string; text: string; color?: string }> = [];
- /**
- * This value is set on a plain anchor tag without any svelte routing,
- * listen to the on:rightLinkClick if you want to intercept the click without navigating
- */
- export let rightLinkHref = "javascript:void(0)";
- $: cooldownEnabled =
- id.indexOf(noCooldownSetting) === -1 && closeable && (closeableCooldown === "~" || parseInt(closeableCooldown) > 0);
- /**
- * Sets this alerts visibility state, when this is false it is removed from the dom using an {#if} block.
- */
- export let visible = closeableCooldown === "~" || parseInt(closeableCooldown) > 0 ? false : true;
-
- export let _pwKey: string | undefined = undefined;
-
- const cooldownStorageKey = "lastseen--" + id;
-
- $: switch (type) {
- case "info": {
- colorClassPart = "blue";
- iconComponent = InformationCircleIcon;
- break;
- }
- case "warning": {
- colorClassPart = "yellow";
- iconComponent = ExclamationTriangleIcon;
- break;
- }
- case "error": {
- colorClassPart = "red";
- iconComponent = XCircleIcon;
- break;
- }
- case "success": {
- colorClassPart = "green";
- iconComponent = CheckCircleIcon;
- break;
- }
- }
-
- function close() {
- visible = false;
- if (cooldownEnabled) {
- console.log("Cooldown enabled for " + id + ", " + closeableCooldown === "~" ? "with an endless cooldown" : "");
- localStorage.setItem(cooldownStorageKey, String(Temporal.Now.instant().epochSeconds));
- }
- }
-
- function rightLinkClicked() {
- dispatch("rightLinkCliked");
- }
-
- function actionClicked(name: string) {
- dispatch("act" + name);
- }
-
- // Manages the state of the alert if cooldown is enabled
- function run_cooldown() {
- if (!cooldownEnabled) {
- console.log("Alert cooldown is not enabled for " + id);
- return;
- }
- if (!localStorage.getItem(cooldownStorageKey)) {
- console.log("Alert " + id + " has not been seen yet, displaying");
- visible = true;
- return;
- }
- // if (!visible) {
- // console.log(
- // "Alert " + id + " is not visible, stopping cooldown change"
- // );
- // return;
- // }
- if (closeableCooldown === "~") {
- console.log("Alert " + id + " has an infinite cooldown, hiding");
- visible = false;
- return;
- }
-
- const lastSeen = Temporal.Instant.fromEpochSeconds(parseInt(localStorage.getItem(cooldownStorageKey) ?? "-1"));
- if (Temporal.Instant.compare(Temporal.Now.instant(), lastSeen.add({ seconds: parseInt(closeableCooldown) })) === 1) {
- console.log(
- "Alert " +
- id +
- " has a cooldown of " +
- closeableCooldown +
- " and was last seen " +
- lastSeen.toLocaleString() +
- " making it due for a showing"
- );
- visible = true;
- } else {
- visible = false;
- }
- }
-
- onMount(() => {
- if (cooldownEnabled) {
- run_cooldown();
- }
-
- if (closeable && closeableCooldown && id.indexOf(noCooldownSetting) !== -1) {
- // TODO: This prints twice before shutting up as it should, in this example look at the only alert with closeableCooldown in alertsbook.
- // Looks like svelte mounts three times and that my id is only set on the third. Not sure it does at all after logging the id onMount.
- console.error("Alert cooldown does not work without specifying a unique id, related id: " + id);
- }
- });
-</script>
-
-{#if visible}
- <div class="rounded-md bg-{colorClassPart}-50 p-4 {$$restProps.class ?? ''}" use:pwKey={_pwKey}>
- <div class="flex">
- <div class="flex-shrink-0">
- <svelte:component this={iconComponent} class="text-{colorClassPart}-400" />
- </div>
- <div class="ml-3 text-sm w-full">
- {#if !rightLinkText}
- {#if title}
- <h3 class="font-medium text-{colorClassPart}-800">
- {title}
- </h3>
- {/if}
- {#if message}
- <div class="{title ? 'mt-2' : ''} text-{colorClassPart}-700 justify-start">
- <p>
- {@html message}
- </p>
- </div>
- {/if}
- {#if listItems?.length ?? 0}
- <ul class="list-disc space-y-1 pl-5 text-{colorClassPart}-700">
- {#each listItems as listItem}
- <li>{listItem}</li>
- {/each}
- </ul>
- {/if}
- {:else}
- <div class="flex-1 md:flex md:justify-between">
- <div>
- {#if title}
- <h3 class="font-medium text-{colorClassPart}-800">
- {title}
- </h3>
- {/if}
- {#if message}
- <div class="{title ? 'mt-2' : ''} text-{colorClassPart}-700 justify-start">
- <p>
- {@html message}
- </p>
- </div>
- {/if}
- {#if listItems?.length ?? 0}
- <ul class="list-disc space-y-1 pl-5 text-{colorClassPart}-700">
- {#each listItems as listItem}
- <li>{listItem}</li>
- {/each}
- </ul>
- {/if}
- </div>
- <p class="mt-3 text-sm md:mt-0 md:ml-6 flex items-end">
- <a
- href={rightLinkHref}
- on:click={() => rightLinkClicked()}
- class="whitespace-nowrap font-medium text-{colorClassPart}-700 hover:text-{colorClassPart}-600"
- >
- {rightLinkText}
- <span aria-hidden="true"> &rarr;</span>
- </a>
- </p>
- </div>
- {/if}
- {#if actions?.length ?? 0}
- <div class="ml-2 mt-4">
- <div class="-mx-2 -my-1.5 flex gap-1">
- {#each actions as action}
- {@const color = action?.color ?? colorClassPart}
- <button
- type="button"
- on:click={() => actionClicked(action.id)}
- class="rounded-md
- bg-{color}-50
- px-2 py-1.5 text-sm font-medium
- text-{color}-800
- hover:bg-{color}-100
- focus:outline-none focus:ring-2
- focus:ring-{color}-600
- focus:ring-offset-2
- focus:ring-offset-{color}-50"
- >
- {action.text}
- </button>
- {/each}
- </div>
- </div>
- {/if}
- </div>
- {#if closeable}
- <div class="ml-auto pl-3">
- <div class="-mx-1.5 -my-1.5">
- <button
- type="button"
- on:click={() => close()}
- class="inline-flex rounded-md bg-{colorClassPart}-50 p-1.5 text-{colorClassPart}-500 hover:bg-{colorClassPart}-100 focus:outline-none focus:ring-2 focus:ring-{colorClassPart}-600 focus:ring-offset-2 focus:ring-offset-{colorClassPart}-50"
- >
- <span class="sr-only">Dismiss</span>
- <XMarkIcon />
- </button>
- </div>
- </div>
- {/if}
- </div>
- </div>
-{/if}
diff --git a/apps/kit/src/lib/components/button.svelte b/apps/kit/src/lib/components/button.svelte
deleted file mode 100644
index cbc09e2..0000000
--- a/apps/kit/src/lib/components/button.svelte
+++ /dev/null
@@ -1,103 +0,0 @@
-<script context="module" lang="ts">
- export type ButtonKind = "primary" | "secondary" | "white";
- export type ButtonSize = "sm" | "lg" | "md" | "xl";
-</script>
-
-<script lang="ts">
- import pwKey from "$actions/pwKey";
-
- import { SpinnerIcon } from "./icons";
-
- export let kind = "primary" as ButtonKind;
- export let size = "md" as ButtonSize;
- export let type: "button" | "submit" | "reset" = "button";
- export let id: string | undefined = undefined;
- export let tabindex: string | undefined = undefined;
- export let style: string | undefined = undefined;
- export let title: string | undefined = undefined;
- export let disabled: boolean | null = false;
- export let href: string | undefined = undefined;
- export let text: string;
- export let loading = false;
- export let fullWidth = false;
- export let _pwKey: string | undefined = undefined;
-
- let sizeClasses = "";
- let kindClasses = "";
- let spinnerTextClasses = "";
- let spinnerMarginClasses = "";
-
- $: shared_props = {
- type: type,
- id: id || null,
- title: title || null,
- disabled: disabled || loading || null,
- tabindex: tabindex || null,
- style: style || null,
- } as any;
-
- $: switch (size) {
- case "sm":
- sizeClasses = "px-2.5 py-1.5 text-xs";
- spinnerMarginClasses = "mr-2";
- break;
- case "md":
- sizeClasses = "px-3 py-2 text-sm";
- spinnerMarginClasses = "mr-2";
- break;
- case "lg":
- sizeClasses = "px-3 py-2 text-lg";
- spinnerMarginClasses = "mr-2";
- break;
- case "xl":
- sizeClasses = "px-6 py-3 text-xl";
- spinnerMarginClasses = "mr-2";
- break;
- }
-
- $: switch (kind) {
- case "secondary":
- kindClasses = "border-transparent text-teal-800 bg-teal-100 hover:bg-teal-200 focus:ring-teal-500";
- spinnerTextClasses = "teal-800";
- break;
- case "primary":
- kindClasses = "border-transparent text-teal-900 bg-teal-300 hover:bg-teal-400 focus:ring-teal-500";
- spinnerTextClasses = "text-teal-900";
- break;
- case "white":
- kindClasses = "border-gray-300 text-gray-700 bg-white hover:bg-gray-50 focus:ring-gray-400";
- spinnerTextClasses = "text-gray-700";
- break;
- }
-</script>
-
-{#if href}
- <a
- use:pwKey={_pwKey}
- {...shared_props}
- {href}
- class="{sizeClasses} {kindClasses} {loading ? 'disabled:' : ''} {$$restProps.class ?? ''} {fullWidth
- ? 'w-full justify-center'
- : ''} inline-flex items-center border font-medium rounded shadow-sm focus:outline-none focus:ring-2"
- >
- {#if loading}
- <SpinnerIcon class={spinnerTextClasses + " " + spinnerMarginClasses} />
- {/if}
- {text}
- </a>
-{:else}
- <button
- use:pwKey={_pwKey}
- {...shared_props}
- on:click
- class="{sizeClasses} {kindClasses} {$$restProps.class ?? ''}
- {fullWidth
- ? 'w-full justify-center'
- : ''} inline-flex items-center border font-medium rounded shadow-sm focus:outline-none focus:ring-2"
- >
- {#if loading}
- <SpinnerIcon class={spinnerTextClasses + " " + spinnerMarginClasses} />
- {/if}
- {text}
- </button>
-{/if}
diff --git a/apps/kit/src/lib/components/checkbox.svelte b/apps/kit/src/lib/components/checkbox.svelte
deleted file mode 100644
index b2fcddb..0000000
--- a/apps/kit/src/lib/components/checkbox.svelte
+++ /dev/null
@@ -1,24 +0,0 @@
-<script lang="ts">
- import pwKey from "$actions/pwKey";
- import { random_string } from "$lib/helpers";
-
- export let label: string;
- export let id: string | undefined = "input__" + random_string(4);
- export let name: string | undefined = undefined;
- export let disabled: boolean | null = null;
- export let checked: boolean;
- export let _pwKey: string | undefined = undefined;
-</script>
-
-<div class="flex items-center">
- <input
- {name}
- use:pwKey={_pwKey}
- {disabled}
- {id}
- type="checkbox"
- bind:checked
- class="h-4 w-4 text-teal-600 focus:ring-teal-500 border-gray-300 rounded"
- />
- <label for={id} class="ml-2 block text-sm text-gray-900">{label}</label>
-</div>
diff --git a/apps/kit/src/lib/components/icons/adjustments.svelte b/apps/kit/src/lib/components/icons/adjustments.svelte
deleted file mode 100644
index 83bda27..0000000
--- a/apps/kit/src/lib/components/icons/adjustments.svelte
+++ /dev/null
@@ -1,14 +0,0 @@
-<svg
- xmlns="http://www.w3.org/2000/svg"
- class="h-6 w-6 {$$restProps.class ?? ''}"
- fill="none"
- viewBox="0 0 24 24"
- stroke="currentColor"
- stroke-width="2"
->
- <path
- stroke-linecap="round"
- stroke-linejoin="round"
- d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/bars-3-center-left.svelte b/apps/kit/src/lib/components/icons/bars-3-center-left.svelte
deleted file mode 100644
index 785ece3..0000000
--- a/apps/kit/src/lib/components/icons/bars-3-center-left.svelte
+++ /dev/null
@@ -1,15 +0,0 @@
-<svg
- class="h-6 w-6 {$$restProps.class ?? ''}"
- xmlns="http://www.w3.org/2000/svg"
- fill="none"
- viewBox="0 0 24 24"
- stroke-width="1.5"
- stroke="currentColor"
- aria-hidden="true"
->
- <path
- stroke-linecap="round"
- stroke-linejoin="round"
- d="M3.75 6.75h16.5M3.75 12H12m-8.25 5.25h16.5"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/calendar.svelte b/apps/kit/src/lib/components/icons/calendar.svelte
deleted file mode 100644
index e0053ee..0000000
--- a/apps/kit/src/lib/components/icons/calendar.svelte
+++ /dev/null
@@ -1,14 +0,0 @@
-<svg
- xmlns="http://www.w3.org/2000/svg"
- fill="none"
- viewBox="0 0 24 24"
- stroke-width="1.5"
- stroke="currentColor"
- class="w-6 h-6 {$$restProps.class ?? ''}"
->
- <path
- stroke-linecap="round"
- stroke-linejoin="round"
- d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 012.25-2.25h13.5A2.25 2.25 0 0121 7.5v11.25m-18 0A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75m-18 0v-7.5A2.25 2.25 0 015.25 9h13.5A2.25 2.25 0 0121 11.25v7.5m-9-6h.008v.008H12v-.008zM12 15h.008v.008H12V15zm0 2.25h.008v.008H12v-.008zM9.75 15h.008v.008H9.75V15zm0 2.25h.008v.008H9.75v-.008zM7.5 15h.008v.008H7.5V15zm0 2.25h.008v.008H7.5v-.008zm6.75-4.5h.008v.008h-.008v-.008zm0 2.25h.008v.008h-.008V15zm0 2.25h.008v.008h-.008v-.008zm2.25-4.5h.008v.008H16.5v-.008zm0 2.25h.008v.008H16.5V15z"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/check-circle.svelte b/apps/kit/src/lib/components/icons/check-circle.svelte
deleted file mode 100644
index e30778e..0000000
--- a/apps/kit/src/lib/components/icons/check-circle.svelte
+++ /dev/null
@@ -1,13 +0,0 @@
-<svg
- class="h-5 w-5 {$$restProps.class ?? ''}"
- xmlns="http://www.w3.org/2000/svg"
- viewBox="0 0 20 20"
- fill="currentColor"
- aria-hidden="true"
->
- <path
- fill-rule="evenodd"
- d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
- clip-rule="evenodd"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/chevron-up-down.svelte b/apps/kit/src/lib/components/icons/chevron-up-down.svelte
deleted file mode 100644
index c07aed5..0000000
--- a/apps/kit/src/lib/components/icons/chevron-up-down.svelte
+++ /dev/null
@@ -1,13 +0,0 @@
-<svg
- class="h-5 w-5 {$$restProps.class ?? ''}"
- xmlns="http://www.w3.org/2000/svg"
- viewBox="0 0 20 20"
- fill="currentColor"
- aria-hidden="true"
->
- <path
- fill-rule="evenodd"
- d="M10 3a.75.75 0 01.55.24l3.25 3.5a.75.75 0 11-1.1 1.02L10 4.852 7.3 7.76a.75.75 0 01-1.1-1.02l3.25-3.5A.75.75 0 0110 3zm-3.76 9.2a.75.75 0 011.06.04l2.7 2.908 2.7-2.908a.75.75 0 111.1 1.02l-3.25 3.5a.75.75 0 01-1.1 0l-3.25-3.5a.75.75 0 01.04-1.06z"
- clip-rule="evenodd"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/database.svelte b/apps/kit/src/lib/components/icons/database.svelte
deleted file mode 100644
index 6ffdadb..0000000
--- a/apps/kit/src/lib/components/icons/database.svelte
+++ /dev/null
@@ -1,14 +0,0 @@
-<svg
- xmlns="http://www.w3.org/2000/svg"
- class="h-6 w-6 {$$restProps.class ?? ''}"
- fill="none"
- viewBox="0 0 24 24"
- stroke="currentColor"
- stroke-width="2"
->
- <path
- stroke-linecap="round"
- stroke-linejoin="round"
- d="M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/exclamation-circle.svelte b/apps/kit/src/lib/components/icons/exclamation-circle.svelte
deleted file mode 100644
index 2ce79b1..0000000
--- a/apps/kit/src/lib/components/icons/exclamation-circle.svelte
+++ /dev/null
@@ -1,13 +0,0 @@
-<svg
- class="h-5 w-5 {$$restProps.class ?? ''}"
- xmlns="http://www.w3.org/2000/svg"
- viewBox="0 0 20 20"
- fill="currentColor"
- aria-hidden="true"
->
- <path
- fill-rule="evenodd"
- d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z"
- clip-rule="evenodd"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/exclamation-triangle.svelte b/apps/kit/src/lib/components/icons/exclamation-triangle.svelte
deleted file mode 100644
index 8d807db..0000000
--- a/apps/kit/src/lib/components/icons/exclamation-triangle.svelte
+++ /dev/null
@@ -1,13 +0,0 @@
-<svg
- class="h-5 w-5 {$$restProps.class ?? ''}"
- xmlns="http://www.w3.org/2000/svg"
- viewBox="0 0 20 20"
- fill="currentColor"
- aria-hidden="true"
->
- <path
- fill-rule="evenodd"
- d="M8.485 3.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 3.495zM10 6a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 6zm0 9a1 1 0 100-2 1 1 0 000 2z"
- clip-rule="evenodd"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/folder-open.svelte b/apps/kit/src/lib/components/icons/folder-open.svelte
deleted file mode 100644
index 409c8e2..0000000
--- a/apps/kit/src/lib/components/icons/folder-open.svelte
+++ /dev/null
@@ -1,14 +0,0 @@
-<svg
- xmlns="http://www.w3.org/2000/svg"
- fill="none"
- viewBox="0 0 24 24"
- stroke-width="1.5"
- stroke="currentColor"
- class="w-6 h-6 {$$restProps.class ?? ''}"
->
- <path
- stroke-linecap="round"
- stroke-linejoin="round"
- d="M3.75 9.776c.112-.017.227-.026.344-.026h15.812c.117 0 .232.009.344.026m-16.5 0a2.25 2.25 0 00-1.883 2.542l.857 6a2.25 2.25 0 002.227 1.932H19.05a2.25 2.25 0 002.227-1.932l.857-6a2.25 2.25 0 00-1.883-2.542m-16.5 0V6A2.25 2.25 0 016 3.75h3.879a1.5 1.5 0 011.06.44l2.122 2.12a1.5 1.5 0 001.06.44H18A2.25 2.25 0 0120.25 9v.776"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/home.svelte b/apps/kit/src/lib/components/icons/home.svelte
deleted file mode 100644
index ee8305d..0000000
--- a/apps/kit/src/lib/components/icons/home.svelte
+++ /dev/null
@@ -1,14 +0,0 @@
-<svg
- xmlns="http://www.w3.org/2000/svg"
- class="h-6 w-6 {$$restProps.class ?? ''}"
- fill="none"
- viewBox="0 0 24 24"
- stroke="currentColor"
- stroke-width="2"
->
- <path
- stroke-linecap="round"
- stroke-linejoin="round"
- d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/index.ts b/apps/kit/src/lib/components/icons/index.ts
deleted file mode 100644
index 8c24873..0000000
--- a/apps/kit/src/lib/components/icons/index.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import XIcon from "./x.svelte";
-import MenuIcon from "./menu.svelte";
-import AdjustmentsIcon from "./adjustments.svelte";
-import DatabaseIcon from "./database.svelte";
-import HomeIcon from "./home.svelte";
-import InformationCircleIcon from "./information-circle.svelte";
-import ExclamationTriangleIcon from "./exclamation-triangle.svelte";
-import XCircleIcon from "./x-circle.svelte";
-import CheckCircleIcon from "./check-circle.svelte";
-import XMarkIcon from "./x-mark.svelte";
-import SpinnerIcon from "./spinner.svelte";
-import ExclamationCircleIcon from "./exclamation-circle.svelte";
-import ChevronUpDownIcon from "./chevron-up-down.svelte";
-import MagnifyingGlassIcon from "./magnifying-glass.svelte";
-import Bars3CenterLeftIcon from "./bars-3-center-left.svelte";
-import CalendarIcon from "./calendar.svelte";
-import FolderOpenIcon from "./folder-open.svelte";
-import MegaphoneIcon from "./megaphone.svelte";
-import QueueListIcon from "./queue-list.svelte";
-
-export {
- QueueListIcon,
- FolderOpenIcon,
- MegaphoneIcon,
- CalendarIcon,
- Bars3CenterLeftIcon,
- MagnifyingGlassIcon,
- ChevronUpDownIcon,
- XIcon,
- MenuIcon,
- HomeIcon,
- DatabaseIcon,
- AdjustmentsIcon,
- InformationCircleIcon,
- ExclamationTriangleIcon,
- ExclamationCircleIcon,
- XCircleIcon,
- CheckCircleIcon,
- XMarkIcon,
- SpinnerIcon
-} \ No newline at end of file
diff --git a/apps/kit/src/lib/components/icons/information-circle.svelte b/apps/kit/src/lib/components/icons/information-circle.svelte
deleted file mode 100644
index 68dbc60..0000000
--- a/apps/kit/src/lib/components/icons/information-circle.svelte
+++ /dev/null
@@ -1,13 +0,0 @@
-<svg
- class="h-5 w-5 {$$restProps.class ?? ''}"
- xmlns="http://www.w3.org/2000/svg"
- viewBox="0 0 20 20"
- fill="currentColor"
- aria-hidden="true"
->
- <path
- fill-rule="evenodd"
- d="M19 10.5a8.5 8.5 0 11-17 0 8.5 8.5 0 0117 0zM8.25 9.75A.75.75 0 019 9h.253a1.75 1.75 0 011.709 2.13l-.46 2.066a.25.25 0 00.245.304H11a.75.75 0 010 1.5h-.253a1.75 1.75 0 01-1.709-2.13l.46-2.066a.25.25 0 00-.245-.304H9a.75.75 0 01-.75-.75zM10 7a1 1 0 100-2 1 1 0 000 2z"
- clip-rule="evenodd"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/magnifying-glass.svelte b/apps/kit/src/lib/components/icons/magnifying-glass.svelte
deleted file mode 100644
index f8fdb6e..0000000
--- a/apps/kit/src/lib/components/icons/magnifying-glass.svelte
+++ /dev/null
@@ -1,13 +0,0 @@
-<svg
- class="h-5 w-5 {$$restProps.class ?? ''}"
- xmlns="http://www.w3.org/2000/svg"
- viewBox="0 0 20 20"
- fill="currentColor"
- aria-hidden="true"
->
- <path
- fill-rule="evenodd"
- d="M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z"
- clip-rule="evenodd"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/megaphone.svelte b/apps/kit/src/lib/components/icons/megaphone.svelte
deleted file mode 100644
index 7ada5f3..0000000
--- a/apps/kit/src/lib/components/icons/megaphone.svelte
+++ /dev/null
@@ -1,14 +0,0 @@
-<svg
- xmlns="http://www.w3.org/2000/svg"
- fill="none"
- viewBox="0 0 24 24"
- stroke-width="1.5"
- stroke="currentColor"
- class="w-6 h-6 {$$restProps.class ?? ''}"
->
- <path
- stroke-linecap="round"
- stroke-linejoin="round"
- d="M10.34 15.84c-.688-.06-1.386-.09-2.09-.09H7.5a4.5 4.5 0 110-9h.75c.704 0 1.402-.03 2.09-.09m0 9.18c.253.962.584 1.892.985 2.783.247.55.06 1.21-.463 1.511l-.657.38c-.551.318-1.26.117-1.527-.461a20.845 20.845 0 01-1.44-4.282m3.102.069a18.03 18.03 0 01-.59-4.59c0-1.586.205-3.124.59-4.59m0 9.18a23.848 23.848 0 018.835 2.535M10.34 6.66a23.847 23.847 0 008.835-2.535m0 0A23.74 23.74 0 0018.795 3m.38 1.125a23.91 23.91 0 011.014 5.395m-1.014 8.855c-.118.38-.245.754-.38 1.125m.38-1.125a23.91 23.91 0 001.014-5.395m0-3.46c.495.413.811 1.035.811 1.73 0 .695-.316 1.317-.811 1.73m0-3.46a24.347 24.347 0 010 3.46"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/menu.svelte b/apps/kit/src/lib/components/icons/menu.svelte
deleted file mode 100644
index 471d85f..0000000
--- a/apps/kit/src/lib/components/icons/menu.svelte
+++ /dev/null
@@ -1,14 +0,0 @@
-<svg
- xmlns="http://www.w3.org/2000/svg"
- class="h-6 w-6 {$$restProps.class ?? ''}"
- fill="none"
- viewBox="0 0 24 24"
- stroke="currentColor"
- stroke-width="2"
->
- <path
- stroke-linecap="round"
- stroke-linejoin="round"
- d="M4 6h16M4 12h16M4 18h16"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/queue-list.svelte b/apps/kit/src/lib/components/icons/queue-list.svelte
deleted file mode 100644
index 6148394..0000000
--- a/apps/kit/src/lib/components/icons/queue-list.svelte
+++ /dev/null
@@ -1,14 +0,0 @@
-<svg
- xmlns="http://www.w3.org/2000/svg"
- fill="none"
- viewBox="0 0 24 24"
- stroke-width="1.5"
- stroke="currentColor"
- class="w-6 h-6 {$$restProps.class ?? ''}"
->
- <path
- stroke-linecap="round"
- stroke-linejoin="round"
- d="M3.75 12h16.5m-16.5 3.75h16.5M3.75 19.5h16.5M5.625 4.5h12.75a1.875 1.875 0 010 3.75H5.625a1.875 1.875 0 010-3.75z"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/spinner.svelte b/apps/kit/src/lib/components/icons/spinner.svelte
deleted file mode 100644
index 80cc57c..0000000
--- a/apps/kit/src/lib/components/icons/spinner.svelte
+++ /dev/null
@@ -1,20 +0,0 @@
-<svg
- class="-ml-1 mr-3 h-5 w-5 animate-spin {$$restProps.class ?? ''}"
- xmlns="http://www.w3.org/2000/svg"
- fill="none"
- viewBox="0 0 24 24"
->
- <circle
- class="opacity-25"
- cx="12"
- cy="12"
- r="10"
- stroke="currentColor"
- stroke-width="4"
- />
- <path
- class="opacity-75"
- fill="currentColor"
- d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/x-circle.svelte b/apps/kit/src/lib/components/icons/x-circle.svelte
deleted file mode 100644
index 3793b5a..0000000
--- a/apps/kit/src/lib/components/icons/x-circle.svelte
+++ /dev/null
@@ -1,13 +0,0 @@
-<svg
- class="h-5 w-5 {$$restProps.class ?? ''}"
- xmlns="http://www.w3.org/2000/svg"
- viewBox="0 0 20 20"
- fill="currentColor"
- aria-hidden="true"
->
- <path
- fill-rule="evenodd"
- d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z"
- clip-rule="evenodd"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/x-mark.svelte b/apps/kit/src/lib/components/icons/x-mark.svelte
deleted file mode 100644
index fd1c6a1..0000000
--- a/apps/kit/src/lib/components/icons/x-mark.svelte
+++ /dev/null
@@ -1,11 +0,0 @@
-<svg
- class="h-5 w-5 {$$restProps.class ?? ''}"
- xmlns="http://www.w3.org/2000/svg"
- viewBox="0 0 20 20"
- fill="currentColor"
- aria-hidden="true"
->
- <path
- d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/icons/x.svelte b/apps/kit/src/lib/components/icons/x.svelte
deleted file mode 100644
index 6125ab8..0000000
--- a/apps/kit/src/lib/components/icons/x.svelte
+++ /dev/null
@@ -1,14 +0,0 @@
-<svg
- xmlns="http://www.w3.org/2000/svg"
- class="h-6 w-6 {$$restProps.class ?? ''}"
- fill="none"
- viewBox="0 0 24 24"
- stroke="currentColor"
- stroke-width="2"
->
- <path
- stroke-linecap="round"
- stroke-linejoin="round"
- d="M6 18L18 6M6 6l12 12"
- />
-</svg>
diff --git a/apps/kit/src/lib/components/index.ts b/apps/kit/src/lib/components/index.ts
deleted file mode 100644
index a81e0c3..0000000
--- a/apps/kit/src/lib/components/index.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import Alert from "./alert.svelte";
-import Button from "./button.svelte";
-import Checkbox from "./checkbox.svelte";
-import Input from "./input.svelte";
-import LocaleSwitcher from "./locale-switcher.svelte";
-import Switch from "./switch.svelte";
-
-export {
- Alert,
- Button,
- Checkbox,
- Input,
- LocaleSwitcher,
- Switch
-} \ No newline at end of file
diff --git a/apps/kit/src/lib/components/input.svelte b/apps/kit/src/lib/components/input.svelte
deleted file mode 100644
index c0ed654..0000000
--- a/apps/kit/src/lib/components/input.svelte
+++ /dev/null
@@ -1,103 +0,0 @@
-<script lang="ts">
- import pwKey from "$actions/pwKey";
- import { random_string } from "$lib/helpers";
- import { ExclamationCircleIcon } from "./icons";
-
- export let label: string | undefined = undefined;
- export let type: string = "text";
- export let autocomplete: string | undefined = undefined;
- export let required: boolean | undefined = undefined;
- export let id: string | undefined = "input__" + random_string(4);
- export let name: string | undefined = undefined;
- export let placeholder: string | undefined = undefined;
- export let helpText: string | undefined = undefined;
- export let errorText: string | undefined = undefined;
- export let disabled = false;
- export let hideLabel = false;
- export let cornerHint: string | undefined = undefined;
- export let icon: any = undefined;
- export let addon: string | undefined = undefined;
- export let value: string | undefined;
- export let wrapperClass: string | undefined = undefined;
- export let _pwKey: string | undefined = undefined;
-
- $: ariaErrorDescribedBy = id + "__" + "error";
- $: attributes = {
- "aria-describedby": errorText ? ariaErrorDescribedBy : null,
- "aria-invalid": errorText ? "true" : null,
- disabled: disabled || null,
- autocomplete: autocomplete || null,
- required: required || null,
- } as any;
- $: hasBling = icon || addon || errorText;
- const defaultColorClass = "border-gray-300 focus:border-teal-500 focus:ring-teal-500";
- let colorClass = defaultColorClass;
- $: if (errorText) {
- colorClass = "placeholder-red-300 focus:border-red-500 focus:outline-none focus:ring-red-500 text-red-900 pr-10 border-red-300";
- } else {
- colorClass = defaultColorClass;
- }
-
- function typeAction(node: HTMLInputElement) {
- node.type = type;
- }
-</script>
-
-<div class={wrapperClass}>
- {#if label && !cornerHint && !hideLabel}
- <label for={id} class={hideLabel ? "sr-only" : "block text-sm font-medium text-gray-700"}>
- {label}
- </label>
- {:else if cornerHint && !hideLabel}
- <div class="flex justify-between">
- {#if label}
- <label for={id} class={hideLabel ? "sr-only" : "block text-sm font-medium text-gray-700"}>
- {label}
- </label>
- {/if}
- <span class="text-sm text-gray-500">
- {cornerHint}
- </span>
- </div>
- {/if}
- <div class="mt-1 {hasBling ? 'relative rounded-md' : ''} {addon ? 'flex' : ''}">
- {#if icon}
- <div class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3">
- <svelte:component this={icon} class={errorText ? "text-red-500" : "text-gray-400"} />
- </div>
- {:else if addon}
- <div class="inline-flex items-center rounded-l-md border border-r-0 border-gray-300 bg-gray-50 px-3 text-gray-500 sm:text-sm">
- <span class="text-gray-500 sm:text-sm">{addon}</span>
- </div>
- {/if}
- <input
- use:typeAction
- use:pwKey={_pwKey}
- {name}
- {id}
- {...attributes}
- bind:value
- class="block w-full rounded-md shadow-sm sm:text-sm
- {colorClass}
- {disabled ? 'disabled:cursor-not-allowed disabled:border-gray-200 disabled:bg-gray-50 disabled:text-gray-500' : ''}
- {addon ? 'min-w-0 flex-1 rounded-none rounded-r-md' : ''}
- {icon ? 'pl-10' : ''}"
- {placeholder}
- />
- {#if errorText}
- <div class="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3">
- <ExclamationCircleIcon class="text-red-500" />
- </div>
- {/if}
- </div>
- {#if helpText && !errorText}
- <p class="mt-2 text-sm text-gray-500">
- {helpText}
- </p>
- {/if}
- {#if errorText}
- <p class="mt-2 text-sm text-red-600" id={ariaErrorDescribedBy}>
- {errorText}
- </p>
- {/if}
-</div>
diff --git a/apps/kit/src/lib/components/locale-switcher.svelte b/apps/kit/src/lib/components/locale-switcher.svelte
deleted file mode 100644
index f880bfb..0000000
--- a/apps/kit/src/lib/components/locale-switcher.svelte
+++ /dev/null
@@ -1,55 +0,0 @@
-<script lang="ts">
- import pwKey from "$actions/pwKey";
- import { browser } from "$app/environment";
- import { page } from "$app/stores";
- import { CookieNames } from "$lib/configuration";
- import { setLocale, locale } from "$lib/i18n/i18n-svelte";
- import type { Locales } from "$lib/i18n/i18n-types";
- import { locales } from "$lib/i18n/i18n-util";
- import { loadLocaleAsync } from "$lib/i18n/i18n-util.async";
- import Cookies from "js-cookie";
-
- export let _pwKey: string | undefined = undefined;
-
- async function switch_locale(newLocale: Locales) {
- if (!newLocale || $locale === newLocale) return;
- await loadLocaleAsync(newLocale);
- setLocale(newLocale);
- document.querySelector("html")?.setAttribute("lang", newLocale);
- Cookies.set(CookieNames.locale, newLocale, {
- sameSite: "strict",
- domain: location.hostname,
- });
- console.log("Switched to: " + newLocale);
- }
-
- function on_change(event: Event) {
- const target = event.target as HTMLSelectElement;
- switch_locale(target.options[target.selectedIndex].value as Locales);
- }
-
- $: if (browser) {
- switch_locale($page.params.lang as Locales);
- }
-
- function get_locale_name(iso: string) {
- switch (iso) {
- case "nb": {
- return "Norsk Bokmål";
- }
- case "en": {
- return "English";
- }
- }
- }
-</script>
-
-<select
- use:pwKey={_pwKey}
- on:change={on_change}
- class="mt-1 mr-1 block border-none py-2 pl-3 pr-10 text-base rounded-md right-0 absolute focus:outline-none focus:ring-teal-500 sm:text-sm"
->
- {#each locales as aLocale}
- <option value={aLocale}>{get_locale_name(aLocale)}</option>
- {/each}
-</select>
diff --git a/apps/kit/src/lib/components/switch.svelte b/apps/kit/src/lib/components/switch.svelte
deleted file mode 100644
index 16da23a..0000000
--- a/apps/kit/src/lib/components/switch.svelte
+++ /dev/null
@@ -1,143 +0,0 @@
-<script context="module" lang="ts">
- export type SwitchType = "short" | "icon" | "default";
-</script>
-
-<script lang="ts">
- import pwKey from "$actions/pwKey";
-
-
- export let enabled = false;
- export let type: SwitchType = "default";
- export let srText = "Use setting";
- export let label: string | undefined = undefined;
- export let description: string | undefined = undefined;
- export let rightAlignedLabelDescription = false;
- export let _pwKey:string|undefined = undefined;
-
- $: colorClass = enabled
- ? "bg-teal-600 focus:ring-teal-500"
- : "bg-gray-200 focus:ring-teal-500";
- $: translateClass = enabled ? "translate-x-5" : "translate-x-0";
- $: hasLabelOrDescription = label || description;
-
- function toggle() {
- enabled = !enabled;
- }
-</script>
-
-<div
- class="{hasLabelOrDescription
- ? 'flex items-center'
- : ''} {rightAlignedLabelDescription ? '' : 'justify-between'}"
->
- {#if hasLabelOrDescription && !rightAlignedLabelDescription}
- <span class="flex flex-grow flex-col">
- {#if label}
- <span class="text-sm font-medium text-gray-900">{label}</span>
- {/if}
- {#if description}
- <span class="text-sm text-gray-500">{description}</span>
- {/if}
- </span>
- {/if}
- {#if type === "short"}
- <button
- type="button"
- class="group relative inline-flex h-5 w-10 flex-shrink-0 cursor-pointer items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-offset-2"
- role="switch"
- aria-checked={enabled}
- use:pwKey={_pwKey}
- on:click={toggle}
- >
- <span class="sr-only">{srText}</span>
- <span
- aria-hidden="true"
- class="pointer-events-none absolute h-full w-full rounded-md"
- />
- <span
- aria-hidden="true"
- class="{colorClass} pointer-events-none absolute mx-auto h-4 w-9 rounded-full transition-colors duration-200 ease-in-out"
- />
- <span
- aria-hidden="true"
- class="{translateClass} pointer-events-none absolute left-0 inline-block h-5 w-5 transform rounded-full border border-gray-200 bg-white shadow ring-0 transition-transform duration-200 ease-in-out"
- />
- </button>
- {:else if type === "icon"}
- <button
- type="button"
- class="{colorClass} relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-offset-2"
- role="switch"
- aria-checked={enabled}
- use:pwKey={_pwKey}
- on:click={toggle}
- >
- <span class="sr-only">{srText}</span>
- <span
- class="{translateClass} pointer-events-none relative inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"
- >
- <span
- class="{enabled
- ? 'opacity-0 ease-out duration-100'
- : 'opacity-100 ease-in duration-200'} absolute inset-0 flex h-full w-full items-center justify-center transition-opacity"
- aria-hidden="true"
- >
- <svg
- class="h-3 w-3 text-gray-400"
- fill="none"
- viewBox="0 0 12 12"
- >
- <path
- d="M4 8l2-2m0 0l2-2M6 6L4 4m2 2l2 2"
- stroke="currentColor"
- stroke-width="2"
- stroke-linecap="round"
- stroke-linejoin="round"
- />
- </svg>
- </span>
- <span
- class="{enabled
- ? 'opacity-100 ease-in duration-200'
- : 'opacity-0 ease-out duration-100'} absolute inset-0 flex h-full w-full items-center justify-center transition-opacity"
- aria-hidden="true"
- >
- <svg
- class="h-3 w-3 text-indigo-600"
- fill="currentColor"
- viewBox="0 0 12 12"
- >
- <path
- d="M3.707 5.293a1 1 0 00-1.414 1.414l1.414-1.414zM5 8l-.707.707a1 1 0 001.414 0L5 8zm4.707-3.293a1 1 0 00-1.414-1.414l1.414 1.414zm-7.414 2l2 2 1.414-1.414-2-2-1.414 1.414zm3.414 2l4-4-1.414-1.414-4 4 1.414 1.414z"
- />
- </svg>
- </span>
- </span>
- </button>
- {:else if type === "default"}
- <button
- type="button"
- class="{colorClass} relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-offset-2"
- role="switch"
- aria-checked={enabled}
- use:pwKey={_pwKey}
- on:click={toggle}
- >
- <span class="sr-only">{srText}</span>
- <span
- aria-hidden="true"
- class="{translateClass} pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out"
- />
- </button>
- {/if}
- {#if hasLabelOrDescription && rightAlignedLabelDescription}
- <span class="ml-3">
- {#if label}
- <span class="text-sm font-medium text-gray-900">{label}</span>
- {/if}
- {#if description}
- <span class="text-sm text-gray-500">{description}</span>
- {/if}
- </span>
- {/if}
-</div>
diff --git a/apps/kit/src/lib/configuration.ts b/apps/kit/src/lib/configuration.ts
deleted file mode 100644
index 5a6a1bf..0000000
--- a/apps/kit/src/lib/configuration.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-export const BASE_DOMAIN = "dev.greatoffice.app";
-export const DEV_BASE_DOMAIN = "http://localhost";
-export const API_ADDRESS = "https://api." + BASE_DOMAIN;
-export const DEV_API_ADDRESS = "http://localhost:5000";
-export const SECONDS_BETWEEN_SESSION_CHECK = 600;
-
-export function api_base(path: string = ""): string {
- return (is_development() ? DEV_API_ADDRESS : API_ADDRESS) + (path !== "" ? "/" + path : "");
-}
-
-export function is_development(): boolean {
- return import.meta.env.DEV;
-}
-
-export function is_testing(): boolean {
- return import.meta.env.VITE_TESTING;
-}
-
-export function is_debug(): boolean {
- return localStorage.getItem(StorageKeys.debug) !== "true";
-}
-
-export const CookieNames = {
- theme: "go_theme",
- locale: "go_locale",
- session: "go_session"
-};
-
-export function get_test_context(): TestContext {
- return {
- user: {
- username: import.meta.env.VITE_TEST_USERNAME,
- password: import.meta.env.VITE_TEST_PASSWORD
- }
- }
-}
-
-export interface TestContext {
- user: {
- username: string,
- password: string
- }
-}
-
-export const QueryKeys = {
- labels: "labels",
- categories: "categories",
- entries: "entries",
-};
-
-export const StorageKeys = {
- session: "sessionData",
- theme: "theme",
- debug: "debug",
- categories: "categories",
- labels: "labels",
- entries: "entries",
- stopwatch: "stopwatchState",
- logLevel: "logLevel"
-}; \ No newline at end of file
diff --git a/apps/kit/src/lib/helpers.ts b/apps/kit/src/lib/helpers.ts
deleted file mode 100644
index 38376e5..0000000
--- a/apps/kit/src/lib/helpers.ts
+++ /dev/null
@@ -1,493 +0,0 @@
-import { browser } from "$app/environment";
-import type { TimeEntryDto } from "$lib/models/TimeEntryDto";
-import type { UnwrappedEntryDateTime } from "$lib/models/UnwrappedEntryDateTime";
-import { logInfo } from "$lib/logger";
-import { Temporal } from "temporal-polyfill";
-
-export const EMAIL_REGEX = new RegExp(/^([a-z0-9]+(?:([._\-])[a-z0-9]+)*@(?:[a-z0-9]+(?:(-)[a-z0-9]+)?\.)+[a-z0-9](?:[a-z0-9]*[a-z0-9])?)$/i);
-export const URL_REGEX = new RegExp(/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-.][a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/gm);
-export const GUID_REGEX = new RegExp(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i);
-export const NORWEGIAN_PHONE_NUMBER_REGEX = new RegExp(/(0047|\+47|47)?\d{8,12}/);
-
-export function get_default_sorted(unsorted: Array<TimeEntryDto>): Array<TimeEntryDto> {
- if (unsorted.length < 1) return unsorted;
- const byStart = unsorted.sort((a, b) => {
- return Temporal.Instant.compare(Temporal.Instant.from(b.start), Temporal.Instant.from(a.start));
- });
-
- return byStart.sort((a, b) => {
- return Temporal.Instant.compare(Temporal.Instant.from(b.stop), Temporal.Instant.from(a.stop));
- });
-}
-
-export function get_element_by_pw_key(key: string): HTMLElement | null {
- return document.querySelector("[pw-key='" + key + "']");
-}
-
-export function is_email(value: string): boolean {
- return EMAIL_REGEX.test(String(value).toLowerCase());
-}
-
-export function is_url(value: string): boolean {
- return URL_REGEX.test(String(value).toLowerCase());
-}
-
-export function is_norwegian_phone_number(value: string): boolean {
- if (value.length < 8 || value.length > 12) {
- return false;
- }
- return NORWEGIAN_PHONE_NUMBER_REGEX.test(String(value));
-}
-
-export function get_cookie(name: string) {
- const value = `; ${document.cookie}`;
- const parts = value.split(`; ${name}=`);
- if (parts.length === 2) return parts.pop()?.split(";").shift();
-}
-
-export function set_cookie(name: string, value: string, baseDomain = window.location.hostname) {
- document.cookie = name + "=" + encodeURIComponent(value) + (baseDomain ? ";domain=" + baseDomain : "");
-}
-
-export function unwrap_date_time_from_entry(entry: TimeEntryDto): UnwrappedEntryDateTime {
- if (!entry) throw new Error("entry was undefined");
- const currentTimeZone = Temporal.Now.timeZone().id;
- const startInstant = Temporal.Instant.from(entry.start).toZonedDateTimeISO(currentTimeZone);
- const stopInstant = Temporal.Instant.from(entry.stop).toZonedDateTimeISO(currentTimeZone);
-
- return {
- start_date: startInstant.toPlainDate(),
- stop_date: stopInstant.toPlainDate(),
- start_time: startInstant.toPlainTime(),
- stop_time: stopInstant.toPlainTime(),
- duration: Temporal.Duration.from({
- hours: stopInstant.hour,
- minutes: stopInstant.minute,
- }).subtract(Temporal.Duration.from({
- hours: startInstant.hour,
- minutes: startInstant.minute,
- })),
- };
-}
-
-
-export function is_guid(value: string): boolean {
- if (!value) {
- return false;
- }
- if (value[0] === "{") {
- value = value.substring(1, value.length - 1);
- }
- return GUID_REGEX.test(value);
-}
-
-export function is_empty_object(obj: object): boolean {
- return obj !== void 0 && Object.keys(obj).length > 0;
-}
-
-export function merge_obj_arr<T>(a: Array<T>, b: Array<T>, props: Array<string>): Array<T> {
- let start = 0;
- let merge = [];
-
- while (start < a.length) {
-
- if (a[start] === b[start]) {
- //pushing the merged objects into array
- merge.push({ ...a[start], ...b[start] });
- }
- //incrementing start value
- start = start + 1;
- }
- return merge;
-}
-
-export function set_favicon(url: string) {
- // Find the current favicon element
- const favicon = document.querySelector("link[rel=\"icon\"]") as HTMLLinkElement;
- if (favicon) {
- // Update the new link
- favicon.href = url;
- } else {
- // Create new `link`
- const link = document.createElement("link");
- link.rel = "icon";
- link.href = url;
-
- // Append to the `head` element
- document.head.appendChild(link);
- }
-}
-export function no_type_check(x: any) {
- return x;
-}
-export function capitalise(value: string): string {
- return value.charAt(0).toUpperCase() + value.slice(1);
-}
-
-export function set_emoji_favicon(emoji: string) {
- // Create a canvas element
- const canvas = document.createElement("canvas");
- canvas.height = 64;
- canvas.width = 64;
-
- // Get the canvas context
- const context = canvas.getContext("2d") as CanvasRenderingContext2D;
- context.font = "64px serif";
- context.fillText(emoji, 0, 64);
-
- // Get the custom URL
- const url = canvas.toDataURL();
-
- // Update the favicon
- set_favicon(url);
-}
-
-
-// https://stackoverflow.com/a/48400665/11961742
-export function seconds_to_hour_minute_string(seconds: number, hourChar = "h", minuteChar = "m") {
- const hours = Math.floor(seconds / (60 * 60));
- seconds -= hours * (60 * 60);
- const minutes = Math.floor(seconds / 60);
- return hours + "h" + minutes + "m";
-}
-
-export function seconds_to_hour_minute(seconds: number) {
- const hours = Math.floor(seconds / (60 * 60));
- seconds -= hours * (60 * 60);
- const minutes = Math.floor(seconds / 60);
- return { hours, minutes };
-}
-
-export function get_query_string(params: any = {}): string {
- const map = Object.keys(params).reduce((arr: Array<string>, key: string) => {
- if (params[key] !== undefined) {
- return arr.concat(`${key}=${encodeURIComponent(params[key])}`);
- }
- return arr;
- }, [] as any);
-
- if (map.length) {
- return `?${map.join("&")}`;
- }
-
- return "";
-}
-
-export function make_url(url: string, params: object): string {
- return `${url}${get_query_string(params)}`;
-}
-
-export function noop() {
-}
-
-export async function run_async(functionToRun: Function): Promise<any> {
- return new Promise((greatSuccess, graveFailure) => {
- try {
- greatSuccess(functionToRun());
- } catch (exception) {
- graveFailure(exception);
- }
- });
-}
-
-// https://stackoverflow.com/a/45215694/11961742
-export function get_selected_options(domElement: HTMLSelectElement): Array<string> {
- const ret = [];
-
- // fast but not universally supported
- if (domElement.selectedOptions !== undefined) {
- for (let i = 0; i < domElement.selectedOptions.length; i++) {
- ret.push(domElement.selectedOptions[i].value);
- }
-
- // compatible, but can be painfully slow
- } else {
- for (let i = 0; i < domElement.options.length; i++) {
- if (domElement.options[i].selected) {
- ret.push(domElement.options[i].value);
- }
- }
- }
- return ret;
-}
-
-export function random_string(length: number): string {
- if (!length) {
- throw new Error("length is undefined");
- }
- let result = "";
- const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
- const charactersLength = characters.length;
- for (let i = 0; i < length; i++) {
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
- }
- return result;
-}
-
-interface CreateElementOptions {
- name: string,
- properties?: object,
- children?: Array<HTMLElement | Function | Node>
-}
-
-export function create_element_from_object(elementOptions: CreateElementOptions): HTMLElement {
- return create_element(elementOptions.name, elementOptions.properties, elementOptions.children);
-}
-
-export function create_element(name: string, properties?: object, children?: Array<HTMLElement | any>): HTMLElement {
- if (!name || name.length < 1) {
- throw new Error("name is required");
- }
- const node = document.createElement(name);
- if (properties) {
- for (const [key, value] of Object.entries(properties)) {
- // @ts-ignore
- node[key] = value;
- }
- }
-
- if (children && children.length > 0) {
- let actualChildren = children;
- if (typeof children === "function") {
- // @ts-ignore
- actualChildren = children();
- }
- for (const child of actualChildren) {
- node.appendChild(child as Node);
- }
- }
- return node;
-}
-
-export function get_element_position(element: HTMLElement | any) {
- if (!element) return { x: 0, y: 0 };
- let x = 0;
- let y = 0;
- while (true) {
- x += element.offsetLeft;
- y += element.offsetTop;
- if (element.offsetParent === null) {
- break;
- }
- element = element.offsetParent;
- }
- return { x, y };
-}
-
-export function restrict_input_to_numbers(element: HTMLElement, specials: Array<string> = [], mergeSpecialsWithDefaults: boolean = false): void {
- if (element) {
- element.addEventListener("keydown", (e) => {
- const defaultSpecials = ["Backspace", "ArrowLeft", "ArrowRight", "Tab"];
- let keys = specials.length > 0 ? specials : defaultSpecials;
- if (mergeSpecialsWithDefaults && specials) {
- keys = [...specials, ...defaultSpecials];
- }
- if (keys.indexOf(e.key) !== -1) {
- return;
- }
- if (isNaN(parseInt(e.key))) {
- e.preventDefault();
- }
- });
- }
-}
-
-export function element_has_focus(element: HTMLElement): boolean {
- return element === document.activeElement;
-}
-
-export function move_focus(element: HTMLElement): void {
- if (!element) {
- element = document.getElementsByTagName("body")[0];
- }
- element.focus();
- // @ts-ignore
- if (!element_has_focus(element)) {
- element.setAttribute("tabindex", "-1");
- element.focus();
- }
-}
-
-export function get_url_parameter(name: string): string {
- // @ts-ignore
- return new RegExp("[?&]" + name + "=([^&#]*)")?.exec(window.location.href)[1];
-}
-
-export function update_url_parameter(param: string, newVal: string): void {
- let newAdditionalURL = "";
- let tempArray = location.href.split("?");
- const baseURL = tempArray[0];
- const additionalURL = tempArray[1];
- let temp = "";
- if (additionalURL) {
- tempArray = additionalURL.split("&");
- for (let i = 0; i < tempArray.length; i++) {
- if (tempArray[i].split("=")[0] !== param) {
- newAdditionalURL += temp + tempArray[i];
- temp = "&";
- }
- }
- }
- const rows_txt = temp + "" + param + "=" + newVal;
- const newUrl = baseURL + "?" + newAdditionalURL + rows_txt;
- window.history.replaceState("", "", newUrl);
-}
-
-
-export function get_style_string(rules: CSSRuleList) {
- let styleString = "";
- for (const [key, value] of Object.entries(rules)) {
- styleString += key + ":" + value + ";";
- }
- return styleString;
-}
-
-export function parse_iso_local(s: string) {
- const b = s.split(/\D/);
- //@ts-ignore
- return new Date(b[0], b[1] - 1, b[2], b[3], b[4], b[5]);
-}
-
-export function resolve_references(json: any) {
- if (!json) return;
- if (typeof json === "string") {
- json = JSON.parse(json ?? "{}");
- }
- const byid = {}, refs = [];
- json = function recurse(obj, prop, parent) {
- if (typeof obj !== "object" || !obj) {
- return obj;
- }
- if (Object.prototype.toString.call(obj) === "[object Array]") {
- for (let i = 0; i < obj.length; i++) {
- if (typeof obj[i] !== "object" || !obj[i]) {
- continue;
- } else if ("$ref" in obj[i]) {
- // @ts-ignore
- obj[i] = recurse(obj[i], i, obj);
- } else {
- obj[i] = recurse(obj[i], prop, obj);
- }
- }
- return obj;
- }
- if ("$ref" in obj) {
- let ref = obj.$ref;
- if (ref in byid) {
- // @ts-ignore
- return byid[ref];
- }
- refs.push([parent, prop, ref]);
- return;
- } else if ("$id" in obj) {
- let id = obj.$id;
- delete obj.$id;
- if ("$values" in obj) {
- obj = obj.$values.map(recurse);
- } else {
- for (let prop2 in obj) {
- // @ts-ignore
- obj[prop2] = recurse(obj[prop2], prop2, obj);
- }
- }
- // @ts-ignore
- byid[id] = obj;
- }
- return obj;
- }(json);
- for (let i = 0; i < refs.length; i++) {
- let ref = refs[i];
- // @ts-ignore
- ref[0][ref[1]] = byid[ref[2]];
- }
- return json;
-}
-
-export function get_random_int(min: number, max: number): number {
- min = Math.ceil(min);
- max = Math.floor(max);
- return Math.floor(Math.random() * (max - min + 1)) + min;
-}
-
-export function to_readable_bytes(bytes: number): string {
- const s = ["bytes", "kB", "MB", "GB", "TB", "PB"];
- const e = Math.floor(Math.log(bytes) / Math.log(1024));
- return (bytes / Math.pow(1024, e)).toFixed(2) + " " + s[e];
-}
-
-export function can_use_dom(): boolean {
- return !!(typeof window !== "undefined" && window.document && window.document.createElement);
-}
-
-export function session_storage_remove_regex(regex: RegExp): void {
- if (!browser) {
- logInfo("sessionStorage is not available in non-browser contexts");
- return;
- }
- let n = sessionStorage.length;
- while (n--) {
- const key = sessionStorage.key(n);
- if (key && regex.test(key)) {
- sessionStorage.removeItem(key);
- }
- }
-}
-
-export function local_storage_remove_regex(regex: RegExp): void {
- if (!browser) {
- logInfo("sessionStorage is not available in non-browser contexts");
- return;
- }
- let n = localStorage.length;
- while (n--) {
- const key = localStorage.key(n);
- if (key && regex.test(key)) {
- localStorage.removeItem(key);
- }
- }
-}
-
-export function session_storage_set_json(key: string, value: object): void {
- if (!browser) {
- console.warn("sessionStorage is not available in non-browser contexts");
- return;
- }
- sessionStorage.setItem(key, JSON.stringify(value));
-}
-
-export function session_storage_get_json(key: string): object {
- if (!browser) {
- console.warn("sessionStorage is not available in non-browser contexts");
- return {};
- }
- return JSON.parse(sessionStorage.getItem(key) ?? "{}");
-}
-
-export function local_storage_set_json(key: string, value: object): void {
- if (!browser) {
- console.warn("sessionStorage is not available in non-browser contexts");
- return;
- }
- localStorage.setItem(key, JSON.stringify(value));
-}
-
-export function local_storage_get_json(key: string): object {
- if (!browser) {
- console.warn("sessionStorage is not available in non-browser contexts");
- return {};
- }
- return JSON.parse(localStorage.getItem(key) ?? "{}");
-}
-
-export function get_hash_code(value: string): number | undefined {
- let hash = 0;
- if (value.length === 0) {
- return;
- }
- for (let i = 0; i < value.length; i++) {
- const char = value.charCodeAt(i);
- hash = (hash << 5) - hash + char;
- hash |= 0;
- }
- return hash;
-}
diff --git a/apps/kit/src/lib/i18n/en/app/index.ts b/apps/kit/src/lib/i18n/en/app/index.ts
deleted file mode 100644
index 7cd05ee..0000000
--- a/apps/kit/src/lib/i18n/en/app/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import type { BaseTranslation } from '../../i18n-types'
-
-const en_app: BaseTranslation = {}
-
-export default en_app \ No newline at end of file
diff --git a/apps/kit/src/lib/i18n/en/index.ts b/apps/kit/src/lib/i18n/en/index.ts
deleted file mode 100644
index e084a6c..0000000
--- a/apps/kit/src/lib/i18n/en/index.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import type { BaseTranslation } from "../i18n-types";
-
-const en: BaseTranslation = {
- or: "Or",
- emailAddress: "Email address",
- password: "Password",
- pageNotFound: "Page not found",
- noInternet: "It seems like your device does not have a internet connection, please check your connection.",
- reset: "Reset",
- of: "{0} of {1}",
- isRequired: "{0} is required",
- submit: "Submit",
- success: "Success",
- tryAgainSoon: "Try again soon",
- createANewAccount: "Create a new account",
- unexpectedError: "An unexpected error occured",
- notFound: "Not found",
- documentation: "Documentation",
- tos: "Terms of service",
- privacyPolicy: "Privacy policy",
- signIntoYourAccount: "Sign into your account",
- signInPage: {
- notMyComputer: "This is not my computer",
- resetPassword: "Reset password",
- yourPasswordIsUpdated: "Your password is updated",
- signIn: "Sign In",
- yourNewPasswordIsApplied: "Your new password is applied",
- signInBelow: "Sign in below",
- yourAccountIsDisabled: "Your account is disabled",
- contactYourAdminIfDisabled: "Contact your administrator if this feels wrong",
- youHaveReachedInactivityLimit: "You've reached the hidden inactivity limit",
- feelFreeToSignInAgain: "Feel free to sign in again"
- },
- signUpPage: {
- createYourNewAccount: "Create your new account",
- },
- resetPasswordPage: {
- setANewPassword: "Set a new password",
- expired: "Expired",
- requestHasExpired: "Your request has expired",
- requestANewReset: "Request a new reset",
- newPassword: "New password",
- requestSentMessage: "If we find your email address in our systems, you will receive an email with instructions on how to set a new password for your account.",
- requestAPasswordReset: "Request a password reset",
- requestNotFound: "Your request was not found",
- submitANewRequestBelow: "Submit a new reset request below"
- }
-};
-
-export default en;
diff --git a/apps/kit/src/lib/i18n/formatters.ts b/apps/kit/src/lib/i18n/formatters.ts
deleted file mode 100644
index 5232b7d..0000000
--- a/apps/kit/src/lib/i18n/formatters.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { capitalise } from '$lib/helpers'
-import type { FormattersInitializer } from 'typesafe-i18n'
-import type { Locales, Formatters } from './i18n-types'
-
-export const initFormatters: FormattersInitializer<Locales, Formatters> = (locale: Locales) => {
-
- const formatters: Formatters = {
- // add your formatter functions here
- capitalise: (value: string) => capitalise(value)
- }
-
- return formatters
-}
diff --git a/apps/kit/src/lib/i18n/i18n-svelte.ts b/apps/kit/src/lib/i18n/i18n-svelte.ts
deleted file mode 100644
index 6cdffb3..0000000
--- a/apps/kit/src/lib/i18n/i18n-svelte.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten.
-/* eslint-disable */
-
-import { initI18nSvelte } from 'typesafe-i18n/svelte'
-import type { Formatters, Locales, TranslationFunctions, Translations } from './i18n-types'
-import { loadedFormatters, loadedLocales } from './i18n-util'
-
-const { locale, LL, setLocale } = initI18nSvelte<Locales, Translations, TranslationFunctions, Formatters>(loadedLocales, loadedFormatters)
-
-export { locale, LL, setLocale }
-
-export default LL
diff --git a/apps/kit/src/lib/i18n/i18n-types.ts b/apps/kit/src/lib/i18n/i18n-types.ts
deleted file mode 100644
index 0df6d1a..0000000
--- a/apps/kit/src/lib/i18n/i18n-types.ts
+++ /dev/null
@@ -1,359 +0,0 @@
-// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten.
-/* eslint-disable */
-import type { BaseTranslation as BaseTranslationType, LocalizedString, RequiredParams } from 'typesafe-i18n'
-
-export type BaseTranslation = BaseTranslationType & DisallowNamespaces
-export type BaseLocale = 'en'
-
-export type Locales =
- | 'en'
- | 'nb'
-
-export type Translation = RootTranslation & DisallowNamespaces
-
-export type Translations = RootTranslation &
-{
- app: NamespaceAppTranslation
-}
-
-type RootTranslation = {
- /**
- * O​r
- */
- or: string
- /**
- * E​m​a​i​l​ ​a​d​d​r​e​s​s
- */
- emailAddress: string
- /**
- * P​a​s​s​w​o​r​d
- */
- password: string
- /**
- * P​a​g​e​ ​n​o​t​ ​f​o​u​n​d
- */
- pageNotFound: string
- /**
- * I​t​ ​s​e​e​m​s​ ​l​i​k​e​ ​y​o​u​r​ ​d​e​v​i​c​e​ ​d​o​e​s​ ​n​o​t​ ​h​a​v​e​ ​a​ ​i​n​t​e​r​n​e​t​ ​c​o​n​n​e​c​t​i​o​n​,​ ​p​l​e​a​s​e​ ​c​h​e​c​k​ ​y​o​u​r​ ​c​o​n​n​e​c​t​i​o​n​.
- */
- noInternet: string
- /**
- * R​e​s​e​t
- */
- reset: string
- /**
- * {​0​}​ ​o​f​ ​{​1​}
- * @param {unknown} 0
- * @param {unknown} 1
- */
- of: RequiredParams<'0' | '1'>
- /**
- * {​0​}​ ​i​s​ ​r​e​q​u​i​r​e​d
- * @param {unknown} 0
- */
- isRequired: RequiredParams<'0'>
- /**
- * S​u​b​m​i​t
- */
- submit: string
- /**
- * S​u​c​c​e​s​s
- */
- success: string
- /**
- * T​r​y​ ​a​g​a​i​n​ ​s​o​o​n
- */
- tryAgainSoon: string
- /**
- * C​r​e​a​t​e​ ​a​ ​n​e​w​ ​a​c​c​o​u​n​t
- */
- createANewAccount: string
- /**
- * A​n​ ​u​n​e​x​p​e​c​t​e​d​ ​e​r​r​o​r​ ​o​c​c​u​r​e​d
- */
- unexpectedError: string
- /**
- * N​o​t​ ​f​o​u​n​d
- */
- notFound: string
- /**
- * D​o​c​u​m​e​n​t​a​t​i​o​n
- */
- documentation: string
- /**
- * T​e​r​m​s​ ​o​f​ ​s​e​r​v​i​c​e
- */
- tos: string
- /**
- * P​r​i​v​a​c​y​ ​p​o​l​i​c​y
- */
- privacyPolicy: string
- /**
- * S​i​g​n​ ​i​n​t​o​ ​y​o​u​r​ ​a​c​c​o​u​n​t
- */
- signIntoYourAccount: string
- signInPage: {
- /**
- * T​h​i​s​ ​i​s​ ​n​o​t​ ​m​y​ ​c​o​m​p​u​t​e​r
- */
- notMyComputer: string
- /**
- * R​e​s​e​t​ ​p​a​s​s​w​o​r​d
- */
- resetPassword: string
- /**
- * Y​o​u​r​ ​p​a​s​s​w​o​r​d​ ​i​s​ ​u​p​d​a​t​e​d
- */
- yourPasswordIsUpdated: string
- /**
- * S​i​g​n​ ​I​n
- */
- signIn: string
- /**
- * Y​o​u​r​ ​n​e​w​ ​p​a​s​s​w​o​r​d​ ​i​s​ ​a​p​p​l​i​e​d
- */
- yourNewPasswordIsApplied: string
- /**
- * S​i​g​n​ ​i​n​ ​b​e​l​o​w
- */
- signInBelow: string
- /**
- * Y​o​u​r​ ​a​c​c​o​u​n​t​ ​i​s​ ​d​i​s​a​b​l​e​d
- */
- yourAccountIsDisabled: string
- /**
- * C​o​n​t​a​c​t​ ​y​o​u​r​ ​a​d​m​i​n​i​s​t​r​a​t​o​r​ ​i​f​ ​t​h​i​s​ ​f​e​e​l​s​ ​w​r​o​n​g
- */
- contactYourAdminIfDisabled: string
- /**
- * Y​o​u​'​v​e​ ​r​e​a​c​h​e​d​ ​t​h​e​ ​h​i​d​d​e​n​ ​i​n​a​c​t​i​v​i​t​y​ ​l​i​m​i​t
- */
- youHaveReachedInactivityLimit: string
- /**
- * F​e​e​l​ ​f​r​e​e​ ​t​o​ ​s​i​g​n​ ​i​n​ ​a​g​a​i​n
- */
- feelFreeToSignInAgain: string
- }
- signUpPage: {
- /**
- * C​r​e​a​t​e​ ​y​o​u​r​ ​n​e​w​ ​a​c​c​o​u​n​t
- */
- createYourNewAccount: string
- }
- resetPasswordPage: {
- /**
- * S​e​t​ ​a​ ​n​e​w​ ​p​a​s​s​w​o​r​d
- */
- setANewPassword: string
- /**
- * E​x​p​i​r​e​d
- */
- expired: string
- /**
- * Y​o​u​r​ ​r​e​q​u​e​s​t​ ​h​a​s​ ​e​x​p​i​r​e​d
- */
- requestHasExpired: string
- /**
- * R​e​q​u​e​s​t​ ​a​ ​n​e​w​ ​r​e​s​e​t
- */
- requestANewReset: string
- /**
- * N​e​w​ ​p​a​s​s​w​o​r​d
- */
- newPassword: string
- /**
- * I​f​ ​w​e​ ​f​i​n​d​ ​y​o​u​r​ ​e​m​a​i​l​ ​a​d​d​r​e​s​s​ ​i​n​ ​o​u​r​ ​s​y​s​t​e​m​s​,​ ​y​o​u​ ​w​i​l​l​ ​r​e​c​e​i​v​e​ ​a​n​ ​e​m​a​i​l​ ​w​i​t​h​ ​i​n​s​t​r​u​c​t​i​o​n​s​ ​o​n​ ​h​o​w​ ​t​o​ ​s​e​t​ ​a​ ​n​e​w​ ​p​a​s​s​w​o​r​d​ ​f​o​r​ ​y​o​u​r​ ​a​c​c​o​u​n​t​.
- */
- requestSentMessage: string
- /**
- * R​e​q​u​e​s​t​ ​a​ ​p​a​s​s​w​o​r​d​ ​r​e​s​e​t
- */
- requestAPasswordReset: string
- /**
- * Y​o​u​r​ ​r​e​q​u​e​s​t​ ​w​a​s​ ​n​o​t​ ​f​o​u​n​d
- */
- requestNotFound: string
- /**
- * S​u​b​m​i​t​ ​a​ ​n​e​w​ ​r​e​s​e​t​ ​r​e​q​u​e​s​t​ ​b​e​l​o​w
- */
- submitANewRequestBelow: string
- }
-}
-
-export type NamespaceAppTranslation = {}
-
-export type Namespaces =
- | 'app'
-
-type DisallowNamespaces = {
- /**
- * reserved for 'app'-namespace\
- * you need to use the `./app/index.ts` file instead
- */
- app?: "[typesafe-i18n] reserved for 'app'-namespace. You need to use the `./app/index.ts` file instead."
-}
-
-export type TranslationFunctions = {
- /**
- * Or
- */
- or: () => LocalizedString
- /**
- * Email address
- */
- emailAddress: () => LocalizedString
- /**
- * Password
- */
- password: () => LocalizedString
- /**
- * Page not found
- */
- pageNotFound: () => LocalizedString
- /**
- * It seems like your device does not have a internet connection, please check your connection.
- */
- noInternet: () => LocalizedString
- /**
- * Reset
- */
- reset: () => LocalizedString
- /**
- * {0} of {1}
- */
- of: (arg0: unknown, arg1: unknown) => LocalizedString
- /**
- * {0} is required
- */
- isRequired: (arg0: unknown) => LocalizedString
- /**
- * Submit
- */
- submit: () => LocalizedString
- /**
- * Success
- */
- success: () => LocalizedString
- /**
- * Try again soon
- */
- tryAgainSoon: () => LocalizedString
- /**
- * Create a new account
- */
- createANewAccount: () => LocalizedString
- /**
- * An unexpected error occured
- */
- unexpectedError: () => LocalizedString
- /**
- * Not found
- */
- notFound: () => LocalizedString
- /**
- * Documentation
- */
- documentation: () => LocalizedString
- /**
- * Terms of service
- */
- tos: () => LocalizedString
- /**
- * Privacy policy
- */
- privacyPolicy: () => LocalizedString
- /**
- * Sign into your account
- */
- signIntoYourAccount: () => LocalizedString
- signInPage: {
- /**
- * This is not my computer
- */
- notMyComputer: () => LocalizedString
- /**
- * Reset password
- */
- resetPassword: () => LocalizedString
- /**
- * Your password is updated
- */
- yourPasswordIsUpdated: () => LocalizedString
- /**
- * Sign In
- */
- signIn: () => LocalizedString
- /**
- * Your new password is applied
- */
- yourNewPasswordIsApplied: () => LocalizedString
- /**
- * Sign in below
- */
- signInBelow: () => LocalizedString
- /**
- * Your account is disabled
- */
- yourAccountIsDisabled: () => LocalizedString
- /**
- * Contact your administrator if this feels wrong
- */
- contactYourAdminIfDisabled: () => LocalizedString
- /**
- * You've reached the hidden inactivity limit
- */
- youHaveReachedInactivityLimit: () => LocalizedString
- /**
- * Feel free to sign in again
- */
- feelFreeToSignInAgain: () => LocalizedString
- }
- signUpPage: {
- /**
- * Create your new account
- */
- createYourNewAccount: () => LocalizedString
- }
- resetPasswordPage: {
- /**
- * Set a new password
- */
- setANewPassword: () => LocalizedString
- /**
- * Expired
- */
- expired: () => LocalizedString
- /**
- * Your request has expired
- */
- requestHasExpired: () => LocalizedString
- /**
- * Request a new reset
- */
- requestANewReset: () => LocalizedString
- /**
- * New password
- */
- newPassword: () => LocalizedString
- /**
- * If we find your email address in our systems, you will receive an email with instructions on how to set a new password for your account.
- */
- requestSentMessage: () => LocalizedString
- /**
- * Request a password reset
- */
- requestAPasswordReset: () => LocalizedString
- /**
- * Your request was not found
- */
- requestNotFound: () => LocalizedString
- /**
- * Submit a new reset request below
- */
- submitANewRequestBelow: () => LocalizedString
- }
- app: {
- }
-}
-
-export type Formatters = {}
diff --git a/apps/kit/src/lib/i18n/i18n-util.async.ts b/apps/kit/src/lib/i18n/i18n-util.async.ts
deleted file mode 100644
index 00b8e0a..0000000
--- a/apps/kit/src/lib/i18n/i18n-util.async.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten.
-/* eslint-disable */
-
-import { initFormatters } from './formatters'
-import type { Locales, Namespaces, Translations } from './i18n-types'
-import { loadedFormatters, loadedLocales, locales } from './i18n-util'
-
-const localeTranslationLoaders = {
- en: () => import('./en'),
- nb: () => import('./nb'),
-}
-
-const localeNamespaceLoaders = {
- en: {
- app: () => import('./en/app')
- },
- nb: {
- app: () => import('./nb/app')
- }
-}
-
-const updateDictionary = (locale: Locales, dictionary: Partial<Translations>) =>
- loadedLocales[locale] = { ...loadedLocales[locale], ...dictionary }
-
-export const importLocaleAsync = async (locale: Locales) =>
- (await localeTranslationLoaders[locale]()).default as unknown as Translations
-
-export const loadLocaleAsync = async (locale: Locales): Promise<void> => {
- updateDictionary(locale, await importLocaleAsync(locale))
- loadFormatters(locale)
-}
-
-export const loadAllLocalesAsync = (): Promise<void[]> => Promise.all(locales.map(loadLocaleAsync))
-
-export const loadFormatters = (locale: Locales): void =>
- void (loadedFormatters[locale] = initFormatters(locale))
-
-export const importNamespaceAsync = async<Namespace extends Namespaces>(locale: Locales, namespace: Namespace) =>
- (await localeNamespaceLoaders[locale][namespace]()).default as unknown as Translations[Namespace]
-
-export const loadNamespaceAsync = async <Namespace extends Namespaces>(locale: Locales, namespace: Namespace): Promise<void> =>
- void updateDictionary(locale, { [namespace]: await importNamespaceAsync(locale, namespace )})
diff --git a/apps/kit/src/lib/i18n/i18n-util.sync.ts b/apps/kit/src/lib/i18n/i18n-util.sync.ts
deleted file mode 100644
index 8144fdc..0000000
--- a/apps/kit/src/lib/i18n/i18n-util.sync.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten.
-/* eslint-disable */
-
-import { initFormatters } from './formatters'
-import type { Locales, Translations } from './i18n-types'
-import { loadedFormatters, loadedLocales, locales } from './i18n-util'
-
-import en from './en'
-import nb from './nb'
-
-import en_app from './en/app'
-import nb_app from './nb/app'
-
-const localeTranslations = {
- en: {
- ...en,
- app: en_app
- },
- nb: {
- ...nb,
- app: nb_app
- },
-}
-
-export const loadLocale = (locale: Locales): void => {
- if (loadedLocales[locale]) return
-
- loadedLocales[locale] = localeTranslations[locale] as unknown as Translations
- loadFormatters(locale)
-}
-
-export const loadAllLocales = (): void => locales.forEach(loadLocale)
-
-export const loadFormatters = (locale: Locales): void =>
- void (loadedFormatters[locale] = initFormatters(locale))
diff --git a/apps/kit/src/lib/i18n/i18n-util.ts b/apps/kit/src/lib/i18n/i18n-util.ts
deleted file mode 100644
index 35f023c..0000000
--- a/apps/kit/src/lib/i18n/i18n-util.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten.
-/* eslint-disable */
-
-import { i18n as initI18n, i18nObject as initI18nObject, i18nString as initI18nString } from 'typesafe-i18n'
-import type { LocaleDetector } from 'typesafe-i18n/detectors'
-import { detectLocale as detectLocaleFn } from 'typesafe-i18n/detectors'
-import type { Formatters, Locales, Namespaces, Translations, TranslationFunctions } from './i18n-types'
-
-export const baseLocale: Locales = 'en'
-
-export const locales: Locales[] = [
- 'en',
- 'nb'
-]
-
-export const namespaces: Namespaces[] = [
- 'app'
-]
-
-export const isLocale = (locale: string) => locales.includes(locale as Locales)
-
-export const isNamespace = (namespace: string) => namespaces.includes(namespace as Namespaces)
-
-export const loadedLocales = {} as Record<Locales, Translations>
-
-export const loadedFormatters = {} as Record<Locales, Formatters>
-
-export const i18nString = (locale: Locales) => initI18nString<Locales, Formatters>(locale, loadedFormatters[locale])
-
-export const i18nObject = (locale: Locales) =>
- initI18nObject<Locales, Translations, TranslationFunctions, Formatters>(
- locale,
- loadedLocales[locale],
- loadedFormatters[locale]
- )
-
-export const i18n = () => initI18n<Locales, Translations, TranslationFunctions, Formatters>(loadedLocales, loadedFormatters)
-
-export const detectLocale = (...detectors: LocaleDetector[]) => detectLocaleFn<Locales>(baseLocale, locales, ...detectors)
diff --git a/apps/kit/src/lib/i18n/nb/app/index.ts b/apps/kit/src/lib/i18n/nb/app/index.ts
deleted file mode 100644
index 15d0b9a..0000000
--- a/apps/kit/src/lib/i18n/nb/app/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import type { NamespaceAppTranslation } from '../../i18n-types'
-
-const nb_app: NamespaceAppTranslation = {
- // TODO: insert translations
-
-}
-
-export default nb_app
diff --git a/apps/kit/src/lib/i18n/nb/index.ts b/apps/kit/src/lib/i18n/nb/index.ts
deleted file mode 100644
index fa81477..0000000
--- a/apps/kit/src/lib/i18n/nb/index.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import type { Translation } from "../i18n-types";
-
-const nb: Translation = {
- or: "Eller",
- emailAddress: "E-postadresse",
- password: "Passord",
- pageNotFound: "Fant ikke siden",
- noInternet: "Det ser ut som at du ikke tilkoblet internettet, sjekk tilkoblingen din for å fortsette",
- reset: "Tilbakestill",
- of: "{0} av {1}",
- isRequired: "{0} er påkrevd",
- submit: "Send",
- success: "Suksess",
- tryAgainSoon: "Prøv igjen snart",
- createANewAccount: "Lag en ny konto",
- unexpectedError: "En uventet feil oppstod",
- notFound: "Ikke funnet",
- documentation: "Dokumentasjon",
- tos: "Vilkår",
- privacyPolicy: "Personvernerklæring",
- signIntoYourAccount: "Logg inn med din konto",
- signInPage: {
- notMyComputer: "Dette er ikke min datamaskin",
- resetPassword: "Tilbakestill passord",
- yourPasswordIsUpdated: "Ditt passord er oppdater",
- signIn: "Logg inn",
- yourNewPasswordIsApplied: "Ditt nye passord er satt",
- signInBelow: "Logg inn nedenfor",
- yourAccountIsDisabled: "Din konto er deaktivert",
- contactYourAdminIfDisabled: "Ta kontakt med din administrator hvis dette føles feil",
- youHaveReachedInactivityLimit: "Du har nådd den hemmelige inaktivitetsgrensen",
- feelFreeToSignInAgain: "Logg gjerne inn igjen"
- },
- signUpPage: {
- createYourNewAccount: "Opprett din nye konto",
- },
- resetPasswordPage: {
- setANewPassword: "Skriv et nytt passord",
- expired: "Utgått",
- requestHasExpired: "Din forespørsel er utgått",
- requestANewReset: "Spør om en ny tilbakestillingslenke",
- newPassword: "Nytt passord",
- requestSentMessage: "Hvis vi finner e-postadressen din i våre systemer, vil du få en e-post med instrukser for å sette ditt nye passord.",
- requestAPasswordReset: "Forespør tilbakestilling av ditt passord",
- requestNotFound: "Din forespørsel ble ikke funnet",
- submitANewRequestBelow: "Spør om en ny tilbakestillingslenke nedenfor"
- }
-}
-
-export default nb; \ No newline at end of file
diff --git a/apps/kit/src/lib/logger.ts b/apps/kit/src/lib/logger.ts
deleted file mode 100644
index df0a821..0000000
--- a/apps/kit/src/lib/logger.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import { browser, dev } from "$app/environment";
-import { StorageKeys } from "$lib/configuration";
-import pino from "pino";
-
-const pinoConfig = dev ? {
- transport: {
- target: "pino-pretty",
- }
-} : {};
-
-const pinoLogger = pino(pinoConfig);
-
-function browserLogLevel(): number {
- if (browser) return LogLevel.toNumber(sessionStorage.getItem(StorageKeys.logLevel), LogLevel.INFO);
- throw new Error("Called browser api in server");
-}
-
-function serverLogLevel(): number {
- if (!browser) return LogLevel.toNumber(import.meta.env.VITE_LOG_LEVEL, LogLevel.ERROR);
- throw new Error("Called server api in browser");
-}
-
-export const LogLevel = {
- DEBUG: 0,
- INFO: 1,
- ERROR: 2,
- SILENT: 3,
- toString(levelInt: number): string {
- switch (levelInt) {
- case 0:
- return "DEBUG";
- case 1:
- return "INFO";
- case 2:
- return "ERROR";
- case 3:
- return "SILENT";
- default:
- throw new Error("Log level int is unknown");
- }
- },
- toNumber(levelString?: string | null, fallback?: number): number {
- if (!levelString && fallback) return fallback;
- else if (!levelString && !fallback) throw new Error("levelString was empty, and no fallback was specified");
- switch (levelString?.toUpperCase()) {
- case "DEBUG":
- return 0;
- case "INFO":
- return 1;
- case "ERROR":
- return 2;
- case "SILENT":
- return 3;
- default:
- if (!fallback) throw new Error("Log level string is unknown");
- else return fallback;
- }
- },
-};
-
-export function logDebug(message: string, ...additional: any[]): void {
- if (browser && browserLogLevel() <= LogLevel.DEBUG) {
- pinoLogger.debug(message, additional);
- }
- if (!browser && serverLogLevel() <= LogLevel.DEBUG) {
- pinoLogger.debug(message, additional);
- }
-}
-
-export function logInfo(message: string, ...additional: any[]): void {
- if (browser && browserLogLevel() <= LogLevel.INFO) {
- pinoLogger.info(message, additional);
- }
- if (!browser && serverLogLevel() <= LogLevel.INFO) {
- pinoLogger.info(message, additional);
- }
-}
-
-export function logError(message: any, ...additional: any[]): void {
- if (browser && browserLogLevel() <= LogLevel.ERROR) {
- pinoLogger.error(message, additional);
- }
- if (!browser && serverLogLevel() <= LogLevel.ERROR) {
- pinoLogger.error(message, additional);
- }
-} \ No newline at end of file
diff --git a/apps/kit/src/lib/models/CreateAccountPayload.ts b/apps/kit/src/lib/models/CreateAccountPayload.ts
deleted file mode 100644
index d116308..0000000
--- a/apps/kit/src/lib/models/CreateAccountPayload.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export interface CreateAccountPayload {
- username: string,
- password: string
-}
diff --git a/apps/kit/src/lib/models/ErrorResult.ts b/apps/kit/src/lib/models/ErrorResult.ts
deleted file mode 100644
index 7c70017..0000000
--- a/apps/kit/src/lib/models/ErrorResult.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export interface ErrorResult {
- title: string,
- text: string
-}
diff --git a/apps/kit/src/lib/models/IInternalFetchRequest.ts b/apps/kit/src/lib/models/IInternalFetchRequest.ts
deleted file mode 100644
index 68505e2..0000000
--- a/apps/kit/src/lib/models/IInternalFetchRequest.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export interface IInternalFetchRequest {
- url: string,
- init?: RequestInit,
- timeout?: number
- retry_count?: number
-}
diff --git a/apps/kit/src/lib/models/IInternalFetchResponse.ts b/apps/kit/src/lib/models/IInternalFetchResponse.ts
deleted file mode 100644
index 6c91b35..0000000
--- a/apps/kit/src/lib/models/IInternalFetchResponse.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export interface IInternalFetchResponse {
- ok: boolean,
- status: number,
- data: any,
- http_response: Response
-}
diff --git a/apps/kit/src/lib/models/ISession.ts b/apps/kit/src/lib/models/ISession.ts
deleted file mode 100644
index 7587145..0000000
--- a/apps/kit/src/lib/models/ISession.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export interface ISession {
- profile: {
- username: string,
- displayName: string,
- id: string,
- },
- lastChecked: number,
-} \ No newline at end of file
diff --git a/apps/kit/src/lib/models/IValidationResult.ts b/apps/kit/src/lib/models/IValidationResult.ts
deleted file mode 100644
index 9a21b13..0000000
--- a/apps/kit/src/lib/models/IValidationResult.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-export interface IValidationResult {
- errors: Array<IValidationError>,
- has_errors: Function,
- add_error: Function,
- remove_error: Function,
-}
-
-export interface IValidationError {
- _id?: string,
- title: string,
- text?: string
-}
-
-export default class ValidationResult implements IValidationResult {
- errors: IValidationError[]
- has_errors(): boolean {
- return this.errors?.length > 0;
- }
- add_error(prop: string, error: IValidationError): void {
- if (!this.errors) this.errors = [];
- error._id = prop;
- this.errors.push(error);
- }
- remove_error(property: string): void {
- const new_errors = [];
- for (const error of this.errors) {
- if (error._id != property) new_errors.push(error)
- }
- this.errors = new_errors;
- }
-}
diff --git a/apps/kit/src/lib/models/LoginPayload.ts b/apps/kit/src/lib/models/LoginPayload.ts
deleted file mode 100644
index beb96cf..0000000
--- a/apps/kit/src/lib/models/LoginPayload.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export interface LoginPayload {
- username: string,
- password: string,
- persist: boolean
-}
diff --git a/apps/kit/src/lib/models/TimeCategoryDto.ts b/apps/kit/src/lib/models/TimeCategoryDto.ts
deleted file mode 100644
index fcdb7ea..0000000
--- a/apps/kit/src/lib/models/TimeCategoryDto.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Temporal } from "temporal-polyfill";
-
-export interface TimeCategoryDto {
- selected?: boolean;
- id?: string,
- modified_at?: Temporal.PlainDate,
- name?: string,
- color?: string
-}
diff --git a/apps/kit/src/lib/models/TimeEntryDto.ts b/apps/kit/src/lib/models/TimeEntryDto.ts
deleted file mode 100644
index 571c52e..0000000
--- a/apps/kit/src/lib/models/TimeEntryDto.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import type { TimeLabelDto } from "./TimeLabelDto";
-import type { TimeCategoryDto } from "./TimeCategoryDto";
-import { Temporal } from "temporal-polyfill";
-
-export interface TimeEntryDto {
- id: string,
- modified_at?: Temporal.PlainDate,
- start: string,
- stop: string,
- description: string,
- labels?: Array<TimeLabelDto>,
- category: TimeCategoryDto,
-}
diff --git a/apps/kit/src/lib/models/TimeEntryQuery.ts b/apps/kit/src/lib/models/TimeEntryQuery.ts
deleted file mode 100644
index d983d1a..0000000
--- a/apps/kit/src/lib/models/TimeEntryQuery.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import type { TimeCategoryDto } from "./TimeCategoryDto";
-import type { TimeLabelDto } from "./TimeLabelDto";
-import type { Temporal } from "temporal-polyfill";
-
-export interface TimeEntryQuery {
- duration: TimeEntryQueryDuration,
- categories?: Array<TimeCategoryDto>,
- labels?: Array<TimeLabelDto>,
- dateRange?: TimeEntryQueryDateRange,
- specificDate?: Temporal.PlainDateTime
- page: number,
- pageSize: number
-}
-
-export interface TimeEntryQueryDateRange {
- from: Temporal.PlainDateTime,
- to: Temporal.PlainDateTime
-}
-
-export enum TimeEntryQueryDuration {
- TODAY = 0,
- THIS_WEEK = 1,
- THIS_MONTH = 2,
- THIS_YEAR = 3,
- SPECIFIC_DATE = 4,
- DATE_RANGE = 5,
-}
diff --git a/apps/kit/src/lib/models/TimeLabelDto.ts b/apps/kit/src/lib/models/TimeLabelDto.ts
deleted file mode 100644
index 7183bcf..0000000
--- a/apps/kit/src/lib/models/TimeLabelDto.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { Temporal } from "temporal-polyfill";
-
-export interface TimeLabelDto {
- id?: string,
- modified_at?: Temporal.PlainDate,
- name?: string,
- color?: string
-}
diff --git a/apps/kit/src/lib/models/TimeQueryDto.ts b/apps/kit/src/lib/models/TimeQueryDto.ts
deleted file mode 100644
index 607c51e..0000000
--- a/apps/kit/src/lib/models/TimeQueryDto.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import type { TimeEntryDto } from "./TimeEntryDto";
-import ValidationResult, { IValidationResult } from "./IValidationResult";
-
-export interface ITimeQueryDto {
- results: Array<TimeEntryDto>,
- page: number,
- pageSize: number,
- totalRecords: number,
- totalPageCount: number,
- is_valid: Function
-}
-
-export class TimeQueryDto implements ITimeQueryDto {
- results: TimeEntryDto[];
- page: number;
- pageSize: number;
- totalRecords: number;
- totalPageCount: number;
-
- is_valid(): IValidationResult {
- const result = new ValidationResult();
- if (this.page < 0) {
- result.add_error("page", {
- title: "Page cannot be less than zero",
- })
- }
- return result;
- }
-}
diff --git a/apps/kit/src/lib/models/UnwrappedEntryDateTime.ts b/apps/kit/src/lib/models/UnwrappedEntryDateTime.ts
deleted file mode 100644
index d614f91..0000000
--- a/apps/kit/src/lib/models/UnwrappedEntryDateTime.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Temporal } from "temporal-polyfill";
-
-export interface UnwrappedEntryDateTime {
- start_date: Temporal.PlainDate,
- stop_date: Temporal.PlainDate,
- start_time: Temporal.PlainTime,
- stop_time: Temporal.PlainTime,
- duration: Temporal.Duration,
-}
diff --git a/apps/kit/src/lib/models/UpdateProfilePayload.ts b/apps/kit/src/lib/models/UpdateProfilePayload.ts
deleted file mode 100644
index d2983ff..0000000
--- a/apps/kit/src/lib/models/UpdateProfilePayload.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export interface UpdateProfilePayload {
- username?: string,
- password?: string,
-}
diff --git a/apps/kit/src/lib/persistent-store.ts b/apps/kit/src/lib/persistent-store.ts
deleted file mode 100644
index 922f3ab..0000000
--- a/apps/kit/src/lib/persistent-store.ts
+++ /dev/null
@@ -1,102 +0,0 @@
-import { writable as _writable, readable as _readable, } from "svelte/store";
-import type { Writable, Readable, StartStopNotifier } from "svelte/store";
-
-enum StoreType {
- SESSION = 0,
- LOCAL = 1
-}
-
-interface StoreOptions {
- store?: StoreType;
-}
-
-const default_store_options = {
- store: StoreType.SESSION
-} as StoreOptions;
-
-interface WritableStore<T> {
- name: string,
- initialState: T,
- options?: StoreOptions
-}
-
-interface ReadableStore<T> {
- name: string,
- initialState: T,
- callback: StartStopNotifier<any>,
- options?: StoreOptions
-}
-
-function get_store(type: StoreType): Storage {
- switch (type) {
- case StoreType.SESSION:
- return window.sessionStorage;
- case StoreType.LOCAL:
- return window.localStorage;
- }
-}
-
-function prepared_store_value(value: any): string {
- try {
- return JSON.stringify(value);
- } catch (e) {
- console.error(e);
- return "__INVALID__";
- }
-}
-
-function get_store_value<T>(options: WritableStore<T> | ReadableStore<T>): any {
- try {
- const storage = get_store(options.options.store);
- const value = storage.getItem(options.name);
- if (!value) return false;
- return JSON.parse(value);
- } catch (e) {
- console.error(e);
- return { __INVALID__: true };
- }
-}
-
-function hydrate<T>(store: Writable<T>, options: WritableStore<T> | ReadableStore<T>): void {
- const value = get_store_value<T>(options);
- if (value && store.set) store.set(value);
-}
-
-function subscribe<T>(store: Writable<T> | Readable<T>, options: WritableStore<T> | ReadableStore<T>): void {
- const storage = get_store(options.options.store);
- if (!store.subscribe) return;
- store.subscribe((state: any) => {
- storage.setItem(options.name, prepared_store_value(state));
- });
-}
-
-function writable_persistent<T>(options: WritableStore<T>): Writable<T> {
- if (options.options === undefined) options.options = default_store_options;
- console.log("Creating writable store with options: ", options);
- const store = _writable<T>(options.initialState);
- hydrate(store, options);
- subscribe(store, options);
- return store;
-}
-
-function readable_persistent<T>(options: ReadableStore<T>): Readable<T> {
- if (options.options === undefined) options.options = default_store_options;
- console.log("Creating readable store with options: ", options);
- const store = _readable<T>(options.initialState, options.callback);
- // hydrate(store, options);
- subscribe(store, options);
- return store;
-}
-
-export {
- writable_persistent,
- readable_persistent,
- StoreType
-};
-
-export type {
- WritableStore,
- ReadableStore,
- StoreOptions
-};
-
diff --git a/apps/kit/src/lib/session.ts b/apps/kit/src/lib/session.ts
deleted file mode 100644
index ee79933..0000000
--- a/apps/kit/src/lib/session.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import {logError, logInfo} from "$lib/logger";
-import { Temporal } from "temporal-polyfill";
-import { get_profile_for_active_check, logout } from "./api/user";
-import { is_guid, session_storage_get_json, session_storage_set_json } from "./helpers";
-import { SECONDS_BETWEEN_SESSION_CHECK, StorageKeys } from "./configuration";
-import type { ISession } from "$lib/models/ISession";
-
-export async function is_active(forceRefresh: boolean = false): Promise<boolean> {
- const nowEpoch = Temporal.Now.instant().epochSeconds;
- const data = session_storage_get_json(StorageKeys.session) as ISession;
- const expiryEpoch = data?.lastChecked + SECONDS_BETWEEN_SESSION_CHECK;
- const lastCheckIsStaleOrNone = !is_guid(data?.profile?.id) || (expiryEpoch < nowEpoch);
- if (forceRefresh || lastCheckIsStaleOrNone) {
- return await call_api();
- } else {
- const sessionIsValid = data.profile && is_guid(data.profile.id);
- if (!sessionIsValid) {
- clear_session_data();
- logInfo("Session data is not valid");
- }
- return sessionIsValid;
- }
-}
-
-export async function end_session(cb: Function): Promise<void> {
- await logout();
- clear_session_data();
- cb();
-}
-
-async function call_api(): Promise<boolean> {
- logInfo("Getting profile data while checking session state");
- try {
- const response = await get_profile_for_active_check();
- if (response.ok) {
- const userData = await response.data;
- if (is_guid(userData.id) && userData.username) {
- const session = {
- profile: userData,
- lastChecked: Temporal.Now.instant().epochSeconds
- } as ISession;
- session_storage_set_json(StorageKeys.session, session);
- logInfo("Successfully got profile data while checking session state");
- return true;
- } else {
- logError("Api returned invalid data while getting profile data");
- clear_session_data();
- return false;
- }
- } else {
- logError("Api returned unsuccessfully while getting profile data");
- clear_session_data();
- return false;
- }
- } catch (e) {
- logError(e);
- clear_session_data();
- return false;
- }
-}
-
-export function clear_session_data() {
- session_storage_set_json(StorageKeys.session, {});
- logInfo("Cleared session data.");
-}
-
-export function get_session_data(): ISession {
- return session_storage_get_json(StorageKeys.session) as ISession;
-}
diff --git a/apps/kit/src/params/guid.ts b/apps/kit/src/params/guid.ts
deleted file mode 100644
index d8f7231..0000000
--- a/apps/kit/src/params/guid.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import {is_guid} from "$lib/helpers";
-
-export function match(param: string): boolean {
- return is_guid(param);
-} \ No newline at end of file
diff --git a/apps/kit/src/params/integer.ts b/apps/kit/src/params/integer.ts
deleted file mode 100644
index 6e36cd8..0000000
--- a/apps/kit/src/params/integer.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export function match(param: string): boolean {
- return /^\d+$/.test(param);
-} \ No newline at end of file
diff --git a/apps/kit/src/routes/(main)/(app)/+layout.svelte b/apps/kit/src/routes/(main)/(app)/+layout.svelte
deleted file mode 100644
index 0be6ff3..0000000
--- a/apps/kit/src/routes/(main)/(app)/+layout.svelte
+++ /dev/null
@@ -1,297 +0,0 @@
-<script lang="ts">
- import {
- ChevronUpDownIcon,
- MagnifyingGlassIcon,
- Bars3CenterLeftIcon,
- XMarkIcon,
- HomeIcon,
- MegaphoneIcon,
- FolderOpenIcon,
- QueueListIcon,
- CalendarIcon,
- } from "$lib/components/icons";
- import { Dialog, Menu, MenuButton, MenuItem, MenuItems, Transition, TransitionChild, TransitionRoot } from "@rgossiaux/svelte-headlessui";
- import { DialogPanel } from "@developermuch/dev-svelte-headlessui";
- import type { ISession } from "$lib/models/ISession";
- import { Input } from "$lib/components";
- import { end_session } from "$lib/session";
- import { goto } from "$app/navigation";
- import { page } from "$app/stores";
-
- const session = {
- profile: {
- username: "Brukernavn",
- displayName: "epost@adresse.no",
- },
- } as ISession;
-
- let sidebarOpen = false;
- let sidebarSearchValue: string | undefined;
-
- function sign_out() {
- end_session(() => goto("/sign-in"));
- }
-
- const navigationItems = [
- {
- href: "/home",
- name: "Home",
- icon: HomeIcon,
- },
- {
- href: "/projects",
- name: "Projects",
- icon: CalendarIcon,
- },
- {
- href: "/tickets",
- name: "Tickets",
- icon: MegaphoneIcon,
- },
- {
- href: "/todo",
- name: "Todo",
- icon: QueueListIcon,
- },
- {
- href: "/wiki",
- name: "Wiki",
- icon: FolderOpenIcon,
- },
- ];
-</script>
-
-<div class="min-h-full">
- <!-- Mobile sidebar -->
- <TransitionRoot show={sidebarOpen}>
- <Dialog as="div" class="relative z-40 lg:hidden" on:close={() => (sidebarOpen = false)}>
- <TransitionChild
- as="div"
- enter="transition-opacity ease-linear duration-300"
- enterFrom="opacity-0"
- enterTo="opacity-100"
- leave="transition-opacity ease-linear duration-300"
- leaveFrom="opacity-100"
- leaveTo="opacity-0"
- >
- <div class="fixed inset-0 bg-gray-600 bg-opacity-75" />
- </TransitionChild>
-
- <div class="fixed inset-0 z-40 flex">
- <TransitionChild
- as="div"
- enter="transition ease-in-out duration-300 transform"
- enterFrom="-translate-x-full"
- enterTo="translate-x-0"
- leave="transition ease-in-out duration-300 transform"
- leaveFrom="translate-x-0"
- leaveTo="-translate-x-full"
- >
- <DialogPanel class="relative flex w-full max-w-xs flex-1 flex-col bg-white pt-5 pb-4">
- <TransitionChild
- as="div"
- enter="ease-in-out duration-300"
- enterFrom="opacity-0"
- enterTo="opacity-100"
- leave="ease-in-out duration-300"
- leaveFrom="opacity-100"
- leaveTo="opacity-0"
- >
- <div class="absolute top-0 right-0 -mr-12 pt-2">
- <button
- type="button"
- class="ml-1 flex h-10 w-10 items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white"
- on:click={() => (sidebarOpen = false)}
- >
- <span class="sr-only">Close sidebar</span>
- <XMarkIcon class="text-white" aria-hidden="true" />
- </button>
- </div>
- </TransitionChild>
- <div class="mt-5 h-0 flex-1 overflow-y-auto">
- <nav class="px-2">
- <div class="space-y-1">
- {#each navigationItems as item}
- {@const current = $page.url.pathname.startsWith(item.href)}
- <a
- href={item.href}
- aria-current={current ? "page" : undefined}
- class="group flex items-center px-2 py-2 text-base leading-5 font-medium rounded-md
- {current ? 'bg-gray-100 text-gray-900' : 'text-gray-600 hover:text-gray-900 hover:bg-gray-50'}"
- >
- <svelte:component
- this={item.icon}
- class="mr-3 flex-shrink-0 h-6 w-6 {current ? 'text-gray-500' : 'text-gray-400 group-hover:text-gray-500'}"
- aria-hidden="true"
- />
- {item.name}
- </a>
- {/each}
- </div>
- </nav>
- </div>
- </DialogPanel>
- </TransitionChild>
- <div class="w-14 flex-shrink-0" aria-hidden="true">
- <!-- Dummy element to force sidebar to shrink to fit close icon -->
- </div>
- </div>
- </Dialog>
- </TransitionRoot>
-
- <!-- Static sidebar for desktop -->
- <div class="hidden lg:fixed lg:inset-y-0 lg:flex lg:w-64 lg:flex-col lg:border-r lg:border-gray-200 lg:bg-gray-100 lg:pb-4">
- <div class="flex h-0 flex-1 p-3 flex-col overflow-y-auto">
- <!-- User account dropdown -->
- <Menu class="relative inline-block text-left">
- <MenuButton
- class="group w-full rounded-md bg-gray-100 px-3.5 py-2 text-left text-sm font-medium text-gray-700 hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-teal-500 focus:ring-offset-2 focus:ring-offset-gray-100"
- >
- <span class="flex w-full items-center justify-between">
- <span class="flex min-w-0 items-center justify-between space-x-3">
- <span class="flex min-w-0 flex-1 flex-col">
- <span class="truncate text-sm font-medium text-gray-900">
- {session.profile.username}
- </span>
- <span class="truncate text-sm text-gray-500">{session.profile.displayName}</span>
- </span>
- </span>
- <ChevronUpDownIcon class="flex-shrink-0 text-gray-400 group-hover:text-gray-500" aria-hidden="true" />
- </span>
- </MenuButton>
- <Transition
- leave="transition ease-in duration-75"
- enter="transition ease-out duration-100"
- enterFrom="transform opacity-0 scale-95"
- enterTo="transform opacity-100 scale-100"
- leaveFrom="transform opacity-100 scale-100"
- leaveTo="transform opacity-0 scale-95"
- as="div"
- >
- <MenuItems
- class="absolute right-0 left-0 z-10 mt-1 origin-top divide-y divide-gray-200 rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none"
- >
- <div class="py-1">
- <MenuItem>
- <a href="/profile" class="text-gray-700 block px-4 py-2 text-sm hover:text-gray-900 hover:bg-gray-100"> View profile </a>
- </MenuItem>
- <MenuItem>
- <a href="/settings" class="text-gray-700 block px-4 py-2 text-sm hover:text-gray-900 hover:bg-gray-100"> Settings </a>
- </MenuItem>
- </div>
- <div class="py-1">
- <MenuItem>
- <span
- on:click={() => sign_out()}
- class="text-gray-700 block px-4 py-2 text-sm hover:bg-red-200 hover:text-red-900 cursor-pointer"
- >
- Sign out
- </span>
- </MenuItem>
- </div>
- </MenuItems>
- </Transition>
- </Menu>
- <!-- Sidebar Search -->
- <div class="mt-3 hidden">
- <label for="search" class="sr-only">Search</label>
- <div class="relative mt-1 rounded-md shadow-sm">
- <Input type="search" name="search" icon={MagnifyingGlassIcon} placeholder="Search" bind:value={sidebarSearchValue} />
- </div>
- </div>
- <!-- Navigation -->
- <nav class="mt-5">
- <div class="space-y-1">
- {#each navigationItems as item}
- {@const current = $page.url.pathname.startsWith(item.href)}
- <a
- href={item.href}
- aria-current={current ? "page" : undefined}
- class="group flex items-center px-2 py-2 text-base leading-5 font-medium rounded-md
- {current ? 'bg-gray-200 text-gray-900' : 'text-gray-700 hover:text-gray-900 hover:bg-gray-50'}"
- >
- <svelte:component
- this={item.icon}
- class="mr-3 flex-shrink-0 h-6 w-6 {current ? 'text-gray-500' : 'text-gray-400 group-hover:text-gray-500'}"
- aria-hidden="true"
- />
- {item.name}
- </a>
- {/each}
- </div>
- </nav>
- </div>
- </div>
-
- <!-- Main column -->
- <div class="flex flex-col lg:pl-64">
- <!-- Search header -->
- <div class="sticky top-0 z-10 flex h-16 flex-shrink-0 border-b border-gray-200 bg-white lg:hidden">
- <button
- type="button"
- class="border-r border-gray-200 px-4 text-gray-500 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-teal-500 lg:hidden"
- on:click={() => (sidebarOpen = true)}
- >
- <span class="sr-only">Open sidebar</span>
- <Bars3CenterLeftIcon aria-hidden="true" />
- </button>
- <div class="flex flex-1 justify-between px-4 sm:px-6 lg:px-8">
- <div class="flex flex-1">
- <form class="flex w-full md:ml-0" action="#" method="GET">
- <label for="search-field" class="sr-only">Search</label>
- <div class="relative w-full text-gray-400 focus-within:text-gray-600">
- <Input
- bind:value={sidebarSearchValue}
- icon={MagnifyingGlassIcon}
- id="search-field"
- name="search-field"
- placeholder="Search"
- type="search"
- />
- </div>
- </form>
- </div>
- <div class="flex items-center">
- <!-- Profile dropdown -->
- <Menu as="div" class="relative ml-3">
- <div>
- <MenuButton
- class="flex max-w-xs items-center rounded-full bg-white text-sm focus:outline-none focus:ring-2 focus:ring-teal-500 focus:ring-offset-2"
- >
- <span class="sr-only">Open user menu</span>
- </MenuButton>
- </div>
- <Transition
- enterFrom="transform opacity-0 scale-95"
- enterTo="transform opacity-100 scale-100"
- leaveFrom="transform opacity-100 scale-100"
- leaveTo="transform opacity-0 scale-95"
- as="div"
- >
- <MenuItems
- class="absolute right-0 z-10 mt-2 w-48 origin-top-right divide-y divide-gray-200 rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none"
- >
- <div class="py-1">
- <MenuItem>
- <a href="/profile" class="text-gray-700 block px-4 py-2 text-sm"> View profile </a>
- </MenuItem>
- <MenuItem>
- <a href="/settings" class="text-gray-700 block px-4 py-2 text-sm hover:text-gray-900 hover:bg-gray-100"> Settings </a>
- </MenuItem>
- <div class="py-1">
- <MenuItem>
- <span on:click={() => sign_out()} class="text-gray-700 block px-4 py-2 text-sm"> Sign out </span>
- </MenuItem>
- </div>
- </div>
- </MenuItems>
- </Transition>
- </Menu>
- </div>
- </div>
- </div>
- <main class="flex-1">
- <slot />
- </main>
- </div>
-</div>
diff --git a/apps/kit/src/routes/(main)/(app)/home/+page.svelte b/apps/kit/src/routes/(main)/(app)/home/+page.svelte
deleted file mode 100644
index 247ee47..0000000
--- a/apps/kit/src/routes/(main)/(app)/home/+page.svelte
+++ /dev/null
@@ -1 +0,0 @@
-<h1>Welcome Home</h1> \ No newline at end of file
diff --git a/apps/kit/src/routes/(main)/(app)/org/+page.svelte b/apps/kit/src/routes/(main)/(app)/org/+page.svelte
deleted file mode 100644
index 429ec25..0000000
--- a/apps/kit/src/routes/(main)/(app)/org/+page.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-<script lang="ts">
-</script>
-
-<h1>$ORGNAME</h1>
diff --git a/apps/kit/src/routes/(main)/(app)/profile/+page.svelte b/apps/kit/src/routes/(main)/(app)/profile/+page.svelte
deleted file mode 100644
index 7c6eb3e..0000000
--- a/apps/kit/src/routes/(main)/(app)/profile/+page.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-<script lang="ts">
-</script>
-
-<h1>Hi, Ivar</h1>
diff --git a/apps/kit/src/routes/(main)/(app)/projects/+page.svelte b/apps/kit/src/routes/(main)/(app)/projects/+page.svelte
deleted file mode 100644
index 6413e1d..0000000
--- a/apps/kit/src/routes/(main)/(app)/projects/+page.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-<script lang="ts">
-</script>
-
-<h1>Projects</h1>
diff --git a/apps/kit/src/routes/(main)/(app)/settings/+page.svelte b/apps/kit/src/routes/(main)/(app)/settings/+page.svelte
deleted file mode 100644
index ae6d403..0000000
--- a/apps/kit/src/routes/(main)/(app)/settings/+page.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-<script lang="ts">
-</script>
-
-<h1>Settings</h1>
diff --git a/apps/kit/src/routes/(main)/(app)/tickets/+page.svelte b/apps/kit/src/routes/(main)/(app)/tickets/+page.svelte
deleted file mode 100644
index 2a4792b..0000000
--- a/apps/kit/src/routes/(main)/(app)/tickets/+page.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-<script lang="ts">
-</script>
-
-<h1>Tickets</h1>
diff --git a/apps/kit/src/routes/(main)/(app)/todo/+page.svelte b/apps/kit/src/routes/(main)/(app)/todo/+page.svelte
deleted file mode 100644
index e29f263..0000000
--- a/apps/kit/src/routes/(main)/(app)/todo/+page.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-<script lang="ts">
-</script>
-
-<h1>Todo</h1>
diff --git a/apps/kit/src/routes/(main)/(app)/wiki/+page.svelte b/apps/kit/src/routes/(main)/(app)/wiki/+page.svelte
deleted file mode 100644
index 1762d43..0000000
--- a/apps/kit/src/routes/(main)/(app)/wiki/+page.svelte
+++ /dev/null
@@ -1,4 +0,0 @@
-<script lang="ts">
-</script>
-
-<h1>Wiki</h1>
diff --git a/apps/kit/src/routes/(main)/(public)/+layout.svelte b/apps/kit/src/routes/(main)/(public)/+layout.svelte
deleted file mode 100644
index 69c29c5..0000000
--- a/apps/kit/src/routes/(main)/(public)/+layout.svelte
+++ /dev/null
@@ -1,18 +0,0 @@
-<script>
- import LL from "$lib/i18n/i18n-svelte";
-</script>
-
-<slot />
-<footer
- class="grid sm:gap-5 grid-flow-row sm:justify-center px-2 sm:grid-flow-col"
->
- <a href="https://greatoffice.life/privacy" class="link">
- {$LL.privacyPolicy()}
- </a>
- <a href="https://greatoffice.life/tos" class="link">
- {$LL.tos()}
- </a>
- <a href="https://greatoffice.life/documentation" class="link">
- {$LL.documentation()}
- </a>
-</footer>
diff --git a/apps/kit/src/routes/(main)/(public)/reset-password/+page.svelte b/apps/kit/src/routes/(main)/(public)/reset-password/+page.svelte
deleted file mode 100644
index aa26892..0000000
--- a/apps/kit/src/routes/(main)/(public)/reset-password/+page.svelte
+++ /dev/null
@@ -1,82 +0,0 @@
-<script lang="ts">
- import { create_forgot_password_request } from "$lib/api/user";
- import { Alert, Input, Button } from "$lib/components";
- import LL from "$lib/i18n/i18n-svelte";
- import type { ErrorResult } from "$lib/models/ErrorResult";
-
- const formData = {
- email: "",
- };
-
- $: showErrorAlert =
- (errorData?.text.length ?? 0 + errorData?.title.length ?? 0) > 0 &&
- !showSuccessAlert;
-
- const errorData = {
- text: "",
- title: "",
- } as ErrorResult;
-
- let loading = false;
- let showSuccessAlert = false;
-
- async function submitFormAsync() {
- errorData.text = "";
- errorData.title = "";
- showSuccessAlert = false;
- loading = true;
- const request = await create_forgot_password_request(formData.email);
- loading = false;
- if (!request.ok) {
- errorData.text = request.data.text ?? $LL.tryAgainSoon();
- errorData.title = request.data.title ?? $LL.unexpectedError();
- return;
- }
- showSuccessAlert = true;
- }
-</script>
-
-<div class="min-h-full flex flex-col justify-center py-12 sm:px-6 lg:px-8">
- <div class="sm:mx-auto sm:w-full p-2 sm:p-0 sm:max-w-md">
- <h2 class="mt-6 text-3xl tracking-tight font-bold text-gray-900">
- {$LL.resetPasswordPage.requestAPasswordReset()}
- </h2>
- <p class="mt-2 text-sm text-gray-600">
- {$LL.or().toLowerCase()}
- <a href="/sign-in" class="link">
- {$LL.signIntoYourAccount().toLowerCase()}
- </a>
- </p>
- </div>
-
- <div class="mt-8 sm:mx-auto sm:w-full sm:max-w-md">
- <div class="bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10">
- <form class="space-y-6" on:submit|preventDefault={submitFormAsync}>
- <Alert
- title={errorData.title}
- message={errorData.text}
- type="error"
- visible={showErrorAlert}
- />
-
- <Alert
- type="success"
- title={$LL.success()}
- message={$LL.resetPasswordPage.requestSentMessage()}
- visible={showSuccessAlert}
- />
-
- <Input
- id="email"
- name="email"
- type="email"
- autocomplete="email"
- required
- bind:value={formData.email}
- label={$LL.emailAddress()}
- />
- <Button text={$LL.submit()} type="submit" {loading} fullWidth />
- </form>
- </div>
- </div>
-</div>
diff --git a/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.server.ts b/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.server.ts
deleted file mode 100644
index 389d04c..0000000
--- a/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.server.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { is_guid } from '$lib/helpers';
-import { redirect } from '@sveltejs/kit';
-import type { PageServerLoad } from './$types';
-
-export const load: PageServerLoad = async ({ params }) => {
- const resetRequestId = params.id ?? "";
- if (!is_guid(resetRequestId)) throw redirect(302, "/reset-password");
- return {
- resetRequestId
- };
-}; \ No newline at end of file
diff --git a/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.svelte b/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.svelte
deleted file mode 100644
index 562d902..0000000
--- a/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.svelte
+++ /dev/null
@@ -1,132 +0,0 @@
-<script lang="ts">
- import {
- check_forgot_password_request,
- fulfill_forgot_password_request,
- } from "$lib/api/user";
- import { onMount } from "svelte";
- import LL from "$lib/i18n/i18n-svelte";
- import { Alert, Input, Button } from "$lib/components";
- import type { PageServerData } from "./$types";
- import type { ErrorResult } from "$lib/models/ErrorResult";
- import { goto } from "$app/navigation";
- import { Message, messageQueryKey } from "../../sign-in/+page.svelte";
-
- export let data: PageServerData;
-
- const formData = {
- newPassword: "",
- };
-
- const errorData = {
- text: "",
- title: "",
- } as ErrorResult;
-
- let errorState: undefined | "expired" | "404" | "unknown";
-
- let finishedPreliminaryLoading = false;
- let loading = false;
- let canSubmit = true;
-
- async function submitFormAsync() {
- if (!canSubmit) return;
- loading = true;
- const request = await fulfill_forgot_password_request(
- data.resetRequestId,
- formData.newPassword
- );
- if (request.ok) {
- goto(
- "/sign-in?" +
- messageQueryKey +
- "=" +
- Message.AFTER_PASSWORD_RESET
- );
- }
-
- loading = false;
- }
-
- onMount(async () => {
- errorState = undefined;
- const isValidRequest = await check_forgot_password_request(
- data.resetRequestId
- );
- if (!isValidRequest.ok && isValidRequest.status !== 404) {
- errorState = "unknown";
- canSubmit = false;
- }
- if (isValidRequest.status === 404) {
- errorState = "404";
- canSubmit = false;
- }
- if (isValidRequest.ok && isValidRequest.data !== true) {
- errorState = "expired";
- canSubmit = false;
- }
- finishedPreliminaryLoading = true;
- });
-</script>
-
-<div class="min-h-full flex flex-col justify-center py-12 sm:px-6 lg:px-8">
- {#if finishedPreliminaryLoading}
- <div class="sm:mx-auto sm:w-full p-2 sm:p-0 sm:max-w-md">
- <h2 class="mt-6 text-3xl tracking-tight font-bold text-gray-900">
- {$LL.resetPasswordPage.setANewPassword()}
- </h2>
- <p class="mt-2 text-sm text-gray-600">
- {$LL.or().toLowerCase()}
- <a href="/sign-in" class="link">
- {$LL.signIntoYourAccount().toLowerCase()}
- </a>
- </p>
- </div>
-
- <div class="mt-8 sm:mx-auto sm:w-full sm:max-w-md">
- <div class="bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10">
- <form
- class="space-y-6"
- on:submit|preventDefault={submitFormAsync}
- >
- {#if errorState === "404"}
- <Alert
- title={$LL.notFound()}
- message={$LL.resetPasswordPage.requestNotFound()}
- />
- {:else if errorState === "expired"}
- <Alert
- title={$LL.resetPasswordPage.expired()}
- message={$LL.resetPasswordPage.requestHasExpired()}
- rightLinkHref="/reset-password"
- rightLinkText={$LL.resetPasswordPage.requestANewReset()}
- />
- {:else if errorState === "unknown"}
- <Alert
- title={$LL.unexpectedError()}
- message={$LL.tryAgainSoon()}
- />
- {/if}
-
- <Input
- id="password"
- name="password"
- type="password"
- autocomplete="new-password"
- required
- bind:value={formData.newPassword}
- label={$LL.resetPasswordPage.newPassword()}
- />
-
- <Button
- text={$LL.submit()}
- type="submit"
- {loading}
- fullWidth
- />
- </form>
- </div>
- </div>
- {:else}
- <p>Checking your request...</p>
- {/if}
-</div>
diff --git a/apps/kit/src/routes/(main)/(public)/sign-in/+page.svelte b/apps/kit/src/routes/(main)/(public)/sign-in/+page.svelte
deleted file mode 100644
index 101b49d..0000000
--- a/apps/kit/src/routes/(main)/(public)/sign-in/+page.svelte
+++ /dev/null
@@ -1,153 +0,0 @@
-<script context="module" lang="ts">
- export enum Message {
- AFTER_PASSWORD_RESET = "after-password-reset",
- USER_INACTIVITY = "user-inactivity",
- USER_DISABLED = "user-disabled",
- }
- export const messageQueryKey = "m";
- export const signInPageTestKeys = {
- passwordInput: "password-input",
- usernameInput: "username-input",
- rememberMeCheckbox: "remember-me-checkbox",
- signUpForm: "login-form",
- userInactivityAlert: Message.USER_INACTIVITY + "-alert",
- userDisabledAlert: Message.USER_DISABLED + "-alert",
- afterPasswordResetAlert: Message.AFTER_PASSWORD_RESET + "-alert",
- formErrorAlert: "form-error-alert",
- resetPasswordAnchor: "reset-password-anchor",
- signUpAnchor: "sign-up-anchor",
- };
-</script>
-
-<script lang="ts">
- import { goto } from "$app/navigation";
- import { login } from "$lib/api/user";
- import { Button, Checkbox, Input, Alert } from "$lib/components";
- import LL from "$lib/i18n/i18n-svelte";
- import type { ErrorResult } from "$lib/models/ErrorResult";
- import type { LoginPayload } from "$lib/models/LoginPayload";
- import pwKey from "$actions/pwKey";
- import { onMount } from "svelte";
-
- let loading = false;
- let messageType: Message | undefined = undefined;
-
- const data = {
- username: "",
- password: "",
- persist: true,
- } as LoginPayload;
-
- let errorData = {
- text: "",
- title: "",
- } as ErrorResult;
- $: showErrorAlert = (errorData?.text.length ?? 0 + errorData?.title.length ?? 0) > 0;
-
- onMount(() => {
- const searcher = new URLSearchParams(window.location.search);
- if (searcher.get(messageQueryKey)) {
- messageType = searcher.get(messageQueryKey) as Message;
- searcher.delete(messageQueryKey);
- history.replaceState(null, "", window.location.origin + window.location.pathname);
- }
- });
-
- async function submitFormAsync() {
- errorData = { text: "", title: "" };
- loading = true;
- data.persist = !data.persist;
- const loginResponse = await login(data);
- if (loginResponse.ok) {
- await goto("/home");
- } else {
- errorData.title = loginResponse.data.title;
- errorData.text = loginResponse.data.text;
- }
- loading = false;
- }
-</script>
-
-<div class="min-h-full flex flex-col justify-center py-12 sm:px-6 lg:px-8">
- {#if messageType}
- <div class="sm:max-w-md sm:mx-auto sm:w-full">
- {#if messageType === "after-password-reset"}
- <Alert
- title={$LL.signInPage.yourNewPasswordIsApplied()}
- _pwKey={signInPageTestKeys.afterPasswordResetAlert}
- message={$LL.signInPage.signInBelow()}
- closeable
- />
- {:else if messageType === "user-disabled"}
- <Alert
- title={$LL.signInPage.yourAccountIsDisabled()}
- _pwKey={signInPageTestKeys.userDisabledAlert}
- message={$LL.signInPage.contactYourAdminIfDisabled()}
- closeable
- />
- {:else if messageType === "user-inactivity"}
- <Alert
- title={$LL.signInPage.youHaveReachedInactivityLimit()}
- _pwKey={signInPageTestKeys.userInactivityAlert}
- message={$LL.signInPage.feelFreeToSignInAgain()}
- closeable
- />
- {/if}
- </div>
- {/if}
- <div class="sm:mx-auto sm:w-full p-2 sm:p-0 sm:max-w-md">
- <h2 class="mt-6 text-3xl tracking-tight font-bold text-gray-900">
- {$LL.signInPage.signIn()}
- </h2>
- <p class="mt-2 text-sm text-gray-600">
- {$LL.or().toLowerCase()}
- <a href="/sign-up" use:pwKey={signInPageTestKeys.signUpAnchor} class="link">{$LL.createANewAccount().toLowerCase()}</a>
- </p>
- </div>
- <div class="mt-8 sm:mx-auto sm:w-full sm:max-w-md">
- <div class="bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10">
- {#if showErrorAlert}
- <Alert title={errorData.title} message={errorData.text} type="error" _pwKey={signInPageTestKeys.formErrorAlert} />
- {/if}
- <form class="space-y-6" use:pwKey={signInPageTestKeys.signUpForm} on:submit|preventDefault={submitFormAsync}>
- <Input
- id="username"
- _pwKey={signInPageTestKeys.usernameInput}
- name="username"
- type="email"
- label={$LL.emailAddress()}
- required
- bind:value={data.username}
- />
-
- <Input
- id="password"
- name="password"
- type="password"
- label={$LL.password()}
- _pwKey={signInPageTestKeys.passwordInput}
- autocomplete="current-password"
- required
- bind:value={data.password}
- />
-
- <div class="flex items-center justify-between">
- <Checkbox
- id="remember-me"
- _pwKey={signInPageTestKeys.rememberMeCheckbox}
- name="remember-me"
- bind:checked={data.persist}
- label={$LL.signInPage.notMyComputer()}
- />
- <div class="text-sm">
- <a href="/reset-password" class="link" use:pwKey={signInPageTestKeys.resetPasswordAnchor}>
- {$LL.signInPage.resetPassword()}
- </a>
- </div>
- </div>
-
- <Button text={$LL.submit()} fullWidth type="submit" {loading} />
- </form>
- </div>
- </div>
-</div>
diff --git a/apps/kit/src/routes/(main)/(public)/sign-in/test.ts b/apps/kit/src/routes/(main)/(public)/sign-in/test.ts
deleted file mode 100644
index 27af2ea..0000000
--- a/apps/kit/src/routes/(main)/(public)/sign-in/test.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { get_test_context } from "$lib/configuration";
-import { get_element_by_pw_key } from "$lib/helpers";
-import { test, expect } from "@playwright/test";
-import { signInPageTestKeys } from "./+page.svelte";
-
-const context = get_test_context();
-
-test("form loads", async ({ page }) => {
- await page.goto("/sign-up");
- const formElement = get_element_by_pw_key(signInPageTestKeys.signUpForm);
- expect(formElement).toBeTruthy();
-}); \ No newline at end of file
diff --git a/apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte b/apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte
deleted file mode 100644
index 0dfa41a..0000000
--- a/apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte
+++ /dev/null
@@ -1,82 +0,0 @@
-<script lang="ts">
- import { goto } from "$app/navigation";
- import { create_account } from "$lib/api/user";
- import { Button, Input, Alert } from "$lib/components";
- import LL from "$lib/i18n/i18n-svelte";
- import type { CreateAccountPayload } from "$lib/models/CreateAccountPayload";
- import type { ErrorResult } from "$lib/models/ErrorResult";
-
- const formData = {
- username: "",
- password: "",
- } as CreateAccountPayload;
-
- const errorData = {
- text: "",
- title: "",
- } as ErrorResult;
- let loading = false;
- $: showErrorAlert =
- (errorData?.text.length ?? 0 + errorData?.title.length ?? 0) > 0;
-
- async function submitFormAsync() {
- loading = true;
- errorData.text = "";
- errorData.title = "";
- const response = await create_account(formData);
- loading = false;
- if (response.ok) {
- await goto("/home");
- return;
- }
- errorData.title = response.data?.title ?? $LL.unexpectedError();
- errorData.text = response.data?.text ?? $LL.tryAgainSoon();
- }
-</script>
-
-<div class="min-h-full flex flex-col justify-center py-12 sm:px-6 lg:px-8">
- <div class="sm:mx-auto sm:w-full p-2 sm:p-0 sm:max-w-md">
- <h2 class="mt-6 text-3xl tracking-tight font-bold text-gray-900">
- {$LL.signUpPage.createYourNewAccount()}
- </h2>
- <p class="mt-2 text-sm text-gray-600">
- {$LL.or().toLowerCase()}
- <a href="/sign-in" class="link">
- {$LL.signIntoYourAccount().toLowerCase()}
- </a>
- </p>
- </div>
-
- <div class="mt-8 sm:mx-auto sm:w-full sm:max-w-md">
- <div class="bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10">
- <Alert
- title={errorData.title}
- message={errorData.text}
- type="error"
- class="mb-2"
- visible={showErrorAlert}
- />
- <form class="space-y-6" on:submit|preventDefault={submitFormAsync}>
- <Input
- label={$LL.emailAddress()}
- id="email"
- name="email"
- autocomplete="email"
- required
- type="email"
- bind:value={formData.username}
- />
-
- <Input
- label={$LL.password()}
- id="password"
- name="password"
- required
- type="password"
- bind:value={formData.password}
- />
- <Button type="submit" text={$LL.submit()} {loading} fullWidth />
- </form>
- </div>
- </div>
-</div>
diff --git a/apps/kit/src/routes/(main)/+layout.server.ts b/apps/kit/src/routes/(main)/+layout.server.ts
deleted file mode 100644
index d2eb2eb..0000000
--- a/apps/kit/src/routes/(main)/+layout.server.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { api_base, CookieNames } from "$lib/configuration";
-import { logError } from "$lib/logger";
-import { error, redirect } from "@sveltejs/kit";
-import type { LayoutServerLoad } from "./$types";
-
-export const load: LayoutServerLoad = async ({ routeId, cookies, locals }) => {
- const isPublicRoute = (routeId?.startsWith("(main)/(public)") || routeId === "(main)") ?? true;
-
- let sessionIsValid = (await fetch(api_base("_/valid-session"), {
- headers: {
- Cookie: CookieNames.session + "=" + cookies.get(CookieNames.session)
- }
- }).catch((e) => {
- logError(e);
- throw error(503, {
- message: "We are experiencing a service distruption! Have patience while we resolve the issue."
- })
- })).ok;
-
- console.log("Base Layout loaded", {
- sessionIsValid,
- isPublicRoute,
- routeId
- });
-
- if (sessionIsValid && isPublicRoute) {
- throw redirect(302, "/home");
- } else if (!sessionIsValid && !isPublicRoute) {
- throw redirect(302, "/sign-in");
- }
- return {
- locale: locals.locale
- }
-}; \ No newline at end of file
diff --git a/apps/kit/src/routes/(main)/+layout.svelte b/apps/kit/src/routes/(main)/+layout.svelte
deleted file mode 100644
index 1a870bb..0000000
--- a/apps/kit/src/routes/(main)/+layout.svelte
+++ /dev/null
@@ -1,29 +0,0 @@
-<script lang="ts">
- import "../../app.pcss";
- import { setLocale } from "$lib/i18n/i18n-svelte";
- import LocaleSwitcher from "$lib/components/locale-switcher.svelte";
- import { ExclamationTriangleIcon } from "$lib/components/icons";
- import type { LayoutData } from "./$types";
-
- let online = true;
- export let data: LayoutData;
- setLocale(data.locale);
-</script>
-
-<svelte:window bind:online />
-
-{#if !online}
- <div class="bg-yellow-50 relative z-50 p-4">
- <div class="flex">
- <div class="flex-shrink-0">
- <ExclamationTriangleIcon class="bg-yellow-50 text-yellow-500" />
- </div>
- <div class="ml-3">
- <p class="text-sm text-yellow-700">You seem to be offline, please check your internet connection.</p>
- </div>
- </div>
- </div>
-{/if}
-
-<LocaleSwitcher />
-<slot />
diff --git a/apps/kit/src/routes/(main)/+layout.ts b/apps/kit/src/routes/(main)/+layout.ts
deleted file mode 100644
index 5d0e005..0000000
--- a/apps/kit/src/routes/(main)/+layout.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import type { LayoutLoad } from './$types'
-import type { Locales } from '$lib/i18n/i18n-types'
-import { loadLocaleAsync } from '$lib/i18n/i18n-util.async'
-import { setLocale } from '$lib/i18n/i18n-svelte'
-
-export const load: LayoutLoad<{ locale: Locales }> = async ({ data: { locale } }) => {
- // load dictionary into memory
- await loadLocaleAsync(locale)
-
- // if you need to output a localized string in a `load` function,
- // you always need to call `setLocale` right before you access the `LL` store
- setLocale(locale)
- // pass locale to the "rendering context"
- return { locale }
-} \ No newline at end of file
diff --git a/apps/kit/src/routes/(main)/+page.svelte b/apps/kit/src/routes/(main)/+page.svelte
deleted file mode 100644
index e507a19..0000000
--- a/apps/kit/src/routes/(main)/+page.svelte
+++ /dev/null
@@ -1 +0,0 @@
-<p class="text-bold p-1">Hold on...</p>
diff --git a/apps/kit/src/routes/book/+layout.svelte b/apps/kit/src/routes/book/+layout.svelte
deleted file mode 100644
index aeed0d4..0000000
--- a/apps/kit/src/routes/book/+layout.svelte
+++ /dev/null
@@ -1,64 +0,0 @@
-<script>
- import { page } from "$app/stores";
- import "../../app.pcss";
-</script>
-
-<div id="wrapper">
- <nav>
- <a
- href="/book/alerts"
- class="link"
- class:active={$page.url.pathname.startsWith("/book/alerts")}
- >Alerts</a
- >
- <a
- href="/book/buttons"
- class="link"
- class:active={$page.url.pathname.startsWith("/book/buttons")}
- >Buttons</a
- >
- <a
- href="/book/toggles"
- class="link"
- class:active={$page.url.pathname.startsWith("/book/toggles")}
- >Toggles</a
- >
- <a
- href="/book/inputs"
- class="link"
- class:active={$page.url.pathname.startsWith("/book/inputs")}
- >Inputs</a
- >
- </nav>
- <main>
- <slot />
- </main>
-</div>
-
-<style global lang="postcss">
- #wrapper {
- display: flex;
- flex-direction: row;
- }
- nav {
- min-width: 120px;
- padding: 10px;
- display: flex;
- flex-direction: column;
- position: sticky;
- position: -webkit-sticky;
- top: 0;
- height: fit-content;
- }
- main {
- width: 100%;
- padding: 10px;
- }
- section {
- margin-bottom: 25px;
-
- h2 {
- margin-bottom: 5px;
- }
- }
-</style>
diff --git a/apps/kit/src/routes/book/+page.svelte b/apps/kit/src/routes/book/+page.svelte
deleted file mode 100644
index 635b3c2..0000000
--- a/apps/kit/src/routes/book/+page.svelte
+++ /dev/null
@@ -1 +0,0 @@
-<p>A showcase of greatoffices components</p>
diff --git a/apps/kit/src/routes/book/alerts/+page.svelte b/apps/kit/src/routes/book/alerts/+page.svelte
deleted file mode 100644
index d008d85..0000000
--- a/apps/kit/src/routes/book/alerts/+page.svelte
+++ /dev/null
@@ -1,70 +0,0 @@
-<script>
- import Alert from "$lib/components/alert.svelte";
-</script>
-
-<section>
- <h2>Info</h2>
- <Alert type="info" message="This is message" title="This is title" />
-</section>
-<section>
- <h2>Warning</h2>
- <Alert type="warning" message="This is message" title="This is title" />
-</section>
-<section>
- <h2>Error</h2>
- <Alert type="error" message="This is message" title="This is title" />
-</section>
-<section>
- <h2>Success</h2>
- <Alert type="success" message="This is message" title="This is title" />
-</section>
-<section>
- <h2>Actions</h2>
- <Alert
- type="info"
- message="This is message"
- title="This is title"
- closeable
- actions={[
- {
- id: "confirm",
- text: "Yes!",
- },
- {
- id: "cancel",
- text: "No!",
- color: "red",
- },
- ]}
- />
-</section>
-<section>
- <h2>Right link</h2>
- <Alert
- on:rightLinkCliked={() => alert("Right link clicked")}
- rightLinkText="Link or action"
- title="Go here"
- message="Hehe"
- type="error"
- />
-</section>
-<section>
- <h2>List</h2>
- <Alert
- title="This is title"
- listItems={["Message 1", "Message 2"]}
- type="error"
- message="This is bad dude"
- closeable
- closeableCooldown="60"
- id="alert-1"
- on:actrepeat={() => {
- alert("Repeat requested");
- }}
- actions={[{ id: "repeat", text: "Try again" }]}
- />
-</section>
-<section>
- <h2>Closeable</h2>
- <Alert message="This is message" closeable type="info" />
-</section>
diff --git a/apps/kit/src/routes/book/buttons/+page.svelte b/apps/kit/src/routes/book/buttons/+page.svelte
deleted file mode 100644
index 19ba163..0000000
--- a/apps/kit/src/routes/book/buttons/+page.svelte
+++ /dev/null
@@ -1,23 +0,0 @@
-<script>
- import Button from "$lib/components/button.svelte";
-</script>
-
-<section>
- <h2>Primary</h2>
- <Button kind="primary" text="Small" size="sm" />
- <Button kind="primary" text="Medium/Default" />
- <Button kind="primary" text="Large" size="lg" />
- <Button kind="primary" text="Extra large" size="xl" />
-</section>
-<section>
- <h2>Secondary</h2>
- <Button kind="secondary" text="Click me!" />
-</section>
-<section>
- <h2>White</h2>
- <Button kind="white" text="Click me!" />
-</section>
-<section>
- <h2>Loading</h2>
- <Button kind="primary" loading={true} text="Wait" />
-</section>
diff --git a/apps/kit/src/routes/book/inputs/+page.svelte b/apps/kit/src/routes/book/inputs/+page.svelte
deleted file mode 100644
index a693f69..0000000
--- a/apps/kit/src/routes/book/inputs/+page.svelte
+++ /dev/null
@@ -1,48 +0,0 @@
-<script lang="ts">
- import Input from "$lib/components/input.svelte";
- import { DatabaseIcon } from "$lib/components/icons";
-</script>
-
-<section>
- <h2>Default</h2>
- <Input label="Input me" placeholder="Hello" />
-</section>
-
-<section>
- <h2>With icon</h2>
- <Input label="Input me" placeholder="Hello" icon={DatabaseIcon} />
-</section>
-
-<section>
- <h2>With corner hint</h2>
- <Input label="Input me ->" placeholder="Hello" cornerHint="Hint hint" />
-</section>
-
-<section>
- <h2>Disabled</h2>
- <Input label="No" placeholder="Sorry" disabled />
-</section>
-
-<section>
- <h2>Errored</h2>
- <Input
- label="No"
- placeholder="Sorry"
- errorText="That's not right"
- icon={DatabaseIcon}
- />
-</section>
-
-<section>
- <h2>Help</h2>
- <Input label="Go ahead" placeholder="Write here" helpText="Write above" />
-</section>
-<section>
- <h2>Addon</h2>
- <Input
- label="Go ahead"
- placeholder="Write here"
- helpText="Write above"
- addon="To the right"
- />
-</section>
diff --git a/apps/kit/src/routes/book/toggles/+page.svelte b/apps/kit/src/routes/book/toggles/+page.svelte
deleted file mode 100644
index 94228b4..0000000
--- a/apps/kit/src/routes/book/toggles/+page.svelte
+++ /dev/null
@@ -1,27 +0,0 @@
-<script>
- import Switch from "$lib/components/switch.svelte";
-</script>
-
-<section>
- <h2>Default</h2>
- <Switch />
-</section>
-<section>
- <h2>Short</h2>
- <Switch type="short" />
-</section>
-<section>
- <h2>Icon</h2>
- <Switch type="icon" />
-</section>
-<section>
- <h2>Label / Description</h2>
- <div class="max-w-md">
- <Switch label="Label" description="Some text" />
- </div>
-</section>
-
-<section>
- <h2>Label / Description (right aligned)</h2>
- <Switch label="Label" description="Some text" rightAlignedLabelDescription />
-</section> \ No newline at end of file
diff --git a/apps/kit/static/favicon.ico b/apps/kit/static/favicon.ico
deleted file mode 100644
index 6848441..0000000
--- a/apps/kit/static/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/apps/kit/svelte.config.js b/apps/kit/svelte.config.js
deleted file mode 100644
index 7a41f1c..0000000
--- a/apps/kit/svelte.config.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import adapter from "@sveltejs/adapter-node";
-import preprocess from "svelte-preprocess";
-
-/** @type {import('@sveltejs/kit').Config} */
-const config = {
- preprocess: [
- preprocess({
- postcss: true,
- }),
- ],
- kit: {
- adapter: adapter(),
- alias: {
- "$actions": "src/actions"
- },
- prerender: {
- enabled: false,
- }
- },
-};
-
-export default config;
diff --git a/apps/kit/tailwind.config.cjs b/apps/kit/tailwind.config.cjs
deleted file mode 100644
index 2f80e55..0000000
--- a/apps/kit/tailwind.config.cjs
+++ /dev/null
@@ -1,135 +0,0 @@
-const defaultColors = require("tailwindcss/colors");
-
-const refactoringUiPalette4 = {
- "blue": {
- "50": "#DCEEFB",
- "100": "#B6E0FE",
- "200": "#84C5F4",
- "300": "#62B0E8",
- "400": "#4098D7",
- "500": "#2680C2",
- "600": "#186FAF",
- "700": "#0F609B",
- "800": "#0A558C",
- "900": "#003E6B",
- },
- "red": {
- "50": "#FFEEEE",
- "100": "#FACDCD",
- "200": "#F29B9B",
- "300": "#E66A6A",
- "400": "#D64545",
- "500": "#BA2525",
- "600": "#A61B1B",
- "700": "#911111",
- "800": "#780A0A",
- "900": "#610404",
- },
- "yellow": {
- "50": "#FFFAEB",
- "100": "#FCEFC7",
- "200": "#F8E3A3",
- "300": "#F9DA8B",
- "400": "#F7D070",
- "500": "#E9B949",
- "600": "#C99A2E",
- "700": "#A27C1A",
- "800": "#7C5E10",
- "900": "#513C06",
- },
- "purple": {
- "50": "#EAE2F8",
- "100": "#CFBCF2",
- "200": "#A081D9",
- "300": "#8662C7",
- "400": "#724BB7",
- "500": "#653CAD",
- "600": "#51279B",
- "700": "#421987",
- "800": "#34126F",
- "900": "#240754",
- },
- "blue-grey": {
- "50": "#F0F4F8",
- "100": "#D9E2EC",
- "200": "#BCCCDC",
- "300": "#9FB3C8",
- "400": "#829AB1",
- "500": "#627D98",
- "600": "#486581",
- "700": "#334E68",
- "800": "#243B53",
- "900": "#102A43",
- },
- "teal": {
- "50": "#EFFCF6",
- "100": "#C6F7E2",
- "200": "#8EEDC7",
- "300": "#65D6AD",
- "400": "#3EBD93",
- "500": "#27AB83",
- "600": "#199473",
- "700": "#147D64",
- "800": "#0C6B58",
- "900": "#014D40",
- }
-}
-
-const config = {
- content: ["./src/**/*.{html,js,svelte,ts}"],
- theme: {
- colors: {
- "blue": refactoringUiPalette4.blue,
- "red": refactoringUiPalette4.red,
- "yellow": refactoringUiPalette4.yellow,
- "purple": refactoringUiPalette4.purple,
- "teal": refactoringUiPalette4.teal,
- "green": refactoringUiPalette4.teal,
- "gray": defaultColors.gray,
- "white": defaultColors.white
- }
- },
- plugins: [
- require("@tailwindcss/forms"),
- ],
- safelist: [
- "bg-blue-50",
- "bg-yellow-50",
- "bg-red-50",
- "bg-green-50",
- "text-blue-400",
- "text-yellow-400",
- "text-red-400",
- "text-green-400",
- "text-blue-800",
- "text-yellow-800",
- "text-red-800",
- "text-green-800",
- "text-blue-700",
- "text-yellow-700",
- "text-red-700",
- "text-green-700",
- "text-blue-500",
- "text-yellow-500",
- "text-red-500",
- "text-green-500",
- "hover:text-blue-600",
- "hover:text-yellow-600",
- "hover:text-red-600",
- "hover:text-green-600",
- "hover:bg-blue-100",
- "hover:bg-yellow-100",
- "hover:bg-red-100",
- "hover:bg-green-100",
- "focus:ring-blue-600",
- "focus:ring-yellow-600",
- "focus:ring-red-600",
- "focus:ring-green-600",
- "focus:ring-offset-blue-50",
- "focus:ring-offset-yellow-50",
- "focus:ring-offset-red-50",
- "focus:ring-offset-green-50",
- ]
-};
-
-module.exports = config;
diff --git a/apps/kit/tsconfig.json b/apps/kit/tsconfig.json
deleted file mode 100644
index bb8cf41..0000000
--- a/apps/kit/tsconfig.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "extends": "./.svelte-kit/tsconfig.json",
- "compilerOptions": {
- "allowJs": true,
- "checkJs": true,
- "esModuleInterop": true,
- "forceConsistentCasingInFileNames": true,
- "resolveJsonModule": true,
- "skipLibCheck": true,
- "sourceMap": true,
- "strict": true,
- "lib": [
- "es2021",
- "dom",
- "es6"
- ],
- "baseUrl": "./",
- "paths": {
- "$lib": [
- "src/lib"
- ],
- "$lib/*": [
- "src/lib/*"
- ],
- "$actions": [
- "src/actions"
- ],
- "$actions/*": [
- "src/actions/*"
- ],
- },
- },
- "include": [
- "./**/*.d.ts",
- "./**/*.ts",
- "./**/*.js",
- "./**/*.svelte",
- "tailwind.config.cjs"
- ],
- "exclude": [
- "./node_modules"
- ]
-} \ No newline at end of file
diff --git a/apps/kit/vite.config.js b/apps/kit/vite.config.js
deleted file mode 100644
index f777f75..0000000
--- a/apps/kit/vite.config.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { sveltekit } from '@sveltejs/kit/vite';
-
-/** @type {import('vite').UserConfig} */
-const config = {
- plugins: [sveltekit()],
- build: { target: "es2020" },
- optimizeDeps: {
- esbuildOptions: {
- target: "es2020"
- }
- }
-};
-
-export default config;