diff --git a/scripts/mongo.sh b/scripts/mongo.sh index b1516a54..0e1d52de 100644 --- a/scripts/mongo.sh +++ b/scripts/mongo.sh @@ -1,2 +1,2 @@ sudo systemctl start mongod -sudo systemctl status mongo \ No newline at end of file +sudo systemctl status mongod \ No newline at end of file diff --git a/src/client/bun.lockb b/src/client/bun.lockb index 70ac154e..9c7cabbc 100755 Binary files a/src/client/bun.lockb and b/src/client/bun.lockb differ diff --git a/src/client/cypress/e2e/act.cy.ts b/src/client/cypress/e2e/act.cy.ts index 1d6ecf45..f205e1b0 100644 --- a/src/client/cypress/e2e/act.cy.ts +++ b/src/client/cypress/e2e/act.cy.ts @@ -1,6 +1,6 @@ describe('Activities page', () => { it('displays the heading', () => { - cy.visit('http://localhost:5173/activities'); + cy.visit('http://localhost:5173/admin/activities'); cy.get('h1').contains('Activities').should('be.visible'); }); @@ -15,7 +15,7 @@ describe('Activities page', () => { activities.forEach((activity) => { it(`displays the activity: ${activity}`, () => { - cy.visit('http://localhost:5173/activities'); + cy.visit('http://localhost:5173/admin/activities'); cy.contains(activity).should('be.visible'); }); }); diff --git a/src/client/cypress/e2e/adm.cy.ts b/src/client/cypress/e2e/adm.cy.ts index c9240d83..0920186c 100644 --- a/src/client/cypress/e2e/adm.cy.ts +++ b/src/client/cypress/e2e/adm.cy.ts @@ -1,16 +1,16 @@ describe('Admins page', () => { it('displays the heading', () => { - cy.visit('http://localhost:5173/admins'); + cy.visit('http://localhost:5173/admin/admins'); cy.get('h2').contains('Admins').should('be.visible'); }); it('displays the button', () => { - cy.visit('http://localhost:5173/admins'); + cy.visit('http://localhost:5173/admin/admins'); cy.get('button').should('be.visible'); }); it('displays the search input', () => { - cy.visit('http://localhost:5173/admins'); + cy.visit('http://localhost:5173/admin/admins'); cy.get('input[type="text"]').should('be.visible'); }); }); diff --git a/src/client/cypress/e2e/ann.cy.ts b/src/client/cypress/e2e/ann.cy.ts index 8c823ebf..67b971fc 100644 --- a/src/client/cypress/e2e/ann.cy.ts +++ b/src/client/cypress/e2e/ann.cy.ts @@ -1,6 +1,6 @@ describe('Announcements page', () => { it('displays the heading', () => { - cy.visit('http://localhost:5173/announcements'); + cy.visit('http://localhost:5173/admin/announcements'); cy.get('h1').contains('Announcements').should('be.visible'); }); @@ -8,7 +8,7 @@ describe('Announcements page', () => { announcements.forEach((announcement) => { it(`displays the announcement: ${announcement}`, () => { - cy.visit('http://localhost:5173/announcements'); + cy.visit('http://localhost:5173/admin/announcements'); cy.contains(announcement).should('be.visible'); }); }); diff --git a/src/client/cypress/e2e/hm.cy.ts b/src/client/cypress/e2e/hm.cy.ts index ca3b7941..6a25b100 100644 --- a/src/client/cypress/e2e/hm.cy.ts +++ b/src/client/cypress/e2e/hm.cy.ts @@ -1,6 +1,6 @@ describe('Degree Dashboard page', () => { it('displays the heading', () => { - cy.visit('http://localhost:5173'); + cy.visit('http://localhost:5173/admin'); cy.get('h1').contains('Degree Dashboard').should('be.visible'); }); @@ -21,7 +21,7 @@ describe('Degree Dashboard page', () => { degrees.forEach((degree) => { it(`displays the degree: ${degree}`, () => { - cy.visit('http://localhost:5173'); + cy.visit('http://localhost:5173/admin'); cy.contains(degree).should('be.visible'); }); }); diff --git a/src/client/cypress/e2e/lec.cy.ts b/src/client/cypress/e2e/lec.cy.ts index f6e59526..1a6a9278 100644 --- a/src/client/cypress/e2e/lec.cy.ts +++ b/src/client/cypress/e2e/lec.cy.ts @@ -1,16 +1,16 @@ describe('Lecturers page', () => { it('displays the heading', () => { - cy.visit('http://localhost:5173/lecturers'); + cy.visit('http://localhost:5173/admin/lecturers'); cy.get('h2').contains('Lecturers').should('be.visible'); }); it('displays the button', () => { - cy.visit('http://localhost:5173/lecturers'); + cy.visit('http://localhost:5173/admin/lecturers'); cy.get('button').should('be.visible'); }); it('displays the search input', () => { - cy.visit('http://localhost:5173/lecturers'); + cy.visit('http://localhost:5173/admin/lecturers'); cy.get('input[type="text"]').should('be.visible'); }); }); diff --git a/src/client/cypress/e2e/org.cy.ts b/src/client/cypress/e2e/org.cy.ts index b659f877..faf762b8 100644 --- a/src/client/cypress/e2e/org.cy.ts +++ b/src/client/cypress/e2e/org.cy.ts @@ -1,11 +1,11 @@ describe('Organisation page', () => { it('displays the heading', () => { - cy.visit('http://localhost:5173/organisation'); + cy.visit('http://localhost:5173/admin/organisation'); cy.get('h2').contains('Organisation').should('be.visible'); }); it('displays the button', () => { - cy.visit('http://localhost:5173/organisation'); + cy.visit('http://localhost:5173/admin/organisation'); cy.get('button').should('be.visible'); }); }); diff --git a/src/client/cypress/e2e/stu.cy.ts b/src/client/cypress/e2e/stu.cy.ts index 26f96c3f..fb20dc75 100644 --- a/src/client/cypress/e2e/stu.cy.ts +++ b/src/client/cypress/e2e/stu.cy.ts @@ -1,16 +1,16 @@ describe('Students page', () => { it('displays the heading', () => { - cy.visit('http://localhost:5173/students'); + cy.visit('http://localhost:5173/admin/students'); cy.get('h2').contains('Students').should('be.visible'); }); it('displays the button', () => { - cy.visit('http://localhost:5173/students'); + cy.visit('http://localhost:5173/admin/students'); cy.get('button').should('be.visible'); }); it('displays the search input', () => { - cy.visit('http://localhost:5173/students'); + cy.visit('http://localhost:5173/admin/students'); cy.get('input[type="text"]').should('be.visible'); }); }); diff --git a/src/client/package-lock.json b/src/client/package-lock.json index 9f87b15d..dd173b57 100644 --- a/src/client/package-lock.json +++ b/src/client/package-lock.json @@ -8,11 +8,18 @@ "name": "client", "version": "0.0.1", "dependencies": { + "@stream-io/node-sdk": "^0.2.5", + "@stream-io/video-client": "^1.3.0", + "@tabler/icons-svelte": "^3.5.0", "@threlte/core": "^7.3.0", + "@threlte/extras": "^8.11.3", "axios": "^1.7.2", "clsx": "^2.1.1", + "crypto": "^1.0.1", + "svelte-tweakpane-ui": "^1.3.0", "tailwind-merge": "^2.3.0", - "three": "^0.165.0" + "three": "^0.165.0", + "threlte": "^3.13.1" }, "devDependencies": { "@cypress/code-coverage": "^3.12.39", @@ -21,14 +28,18 @@ "@neoconfetti/svelte": "^1.0.0", "@sveltejs/adapter-auto": "^3.0.0", "@sveltejs/kit": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^3.0.0", + "@sveltejs/vite-plugin-svelte": "^3.1.1", "@tailwindcss/typography": "^0.5.10", + "@testing-library/jest-dom": "^6.4.5", + "@testing-library/svelte": "^5.1.0", "@types/eslint": "^8.56.0", "@typescript-eslint/eslint-plugin": "^7.0.0", "@typescript-eslint/parser": "^7.0.0", + "@vitest/ui": "^1.6.0", "autoprefixer": "^10.4.16", "cypress": "^13.10.0", - "cypress-svelte-unit-test": "^3.3.4", + "cypress-svelte-unit-test": "^2.2.0", + "dotenv": "^16.4.5", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-svelte": "^2.35.1", @@ -36,6 +47,7 @@ "flowbite-svelte": "^0.46.1", "flowbite-svelte-icons": "^1.6.1", "istanbul-lib-coverage": "^3.2.2", + "jsdom": "^24.1.0", "nyc": "^15.1.0", "postcss": "^8.4.33", "prettier": "^3.1.1", @@ -46,9 +58,16 @@ "tailwindcss": "^3.4.1", "tslib": "^2.4.1", "typescript": "^5.0.0", - "vite": "^5.0.3" + "vite": "^5.0.3", + "vitest": "^1.6.0" } }, + "node_modules/@adobe/css-tools": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==", + "dev": true + }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "dev": true, @@ -2468,6 +2487,18 @@ "node": ">=8" } }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "license": "MIT", @@ -2517,6 +2548,83 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kitschpatrol/tweakpane-plugin-camerakit": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@kitschpatrol/tweakpane-plugin-camerakit/-/tweakpane-plugin-camerakit-0.3.0.tgz", + "integrity": "sha512-Rj1puvx5dzr04REfMz6DDMjoNxidA98n/j4RljLs4Hql8JqblPTeioQLjNnaRGTlDkmwhoEmhKJXtX26NtPAQQ==", + "dependencies": { + "@tweakpane/core": "^2.0.3" + }, + "peerDependencies": { + "tweakpane": "^4.0.3" + } + }, + "node_modules/@kitschpatrol/tweakpane-plugin-essentials": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@kitschpatrol/tweakpane-plugin-essentials/-/tweakpane-plugin-essentials-0.2.1.tgz", + "integrity": "sha512-0V7ANWmcOb+oWNssIqa+KtBt8+Lqtqk++wiBZ8g8DjJ9z1v8Q3VLluVekSzZb2Mhu1rytWsXmzMknnRWsfzqBg==", + "dependencies": { + "@tweakpane/core": "^2.0.3" + }, + "peerDependencies": { + "tweakpane": "^4.0.3" + } + }, + "node_modules/@kitschpatrol/tweakpane-plugin-image": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@kitschpatrol/tweakpane-plugin-image/-/tweakpane-plugin-image-2.0.0.tgz", + "integrity": "sha512-7gnWKCBIJtcBus4JhvBCGU3q4NL+Tfgo7Bnxb30ORsqnYI/D6W8Kuty/NbUrPVL6fx1E3zulgH6lmBkmv0JhDA==", + "dependencies": { + "@tweakpane/core": "^2.0.3" + }, + "peerDependencies": { + "tweakpane": "^4.0.3" + } + }, + "node_modules/@kitschpatrol/tweakpane-plugin-profiler": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@kitschpatrol/tweakpane-plugin-profiler/-/tweakpane-plugin-profiler-0.4.1.tgz", + "integrity": "sha512-dPPLvaHUBpZM8upzudMforfMw/h6j9jscZsHkt+LjSrrmXH2OUM5adR4Dd7WUCc/OGjgMx9hxsSjiptIZqxA+g==", + "dependencies": { + "@tweakpane/core": "^2.0.3" + }, + "peerDependencies": { + "tweakpane": "^4.0.3" + } + }, + "node_modules/@kitschpatrol/tweakpane-plugin-rotation": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@kitschpatrol/tweakpane-plugin-rotation/-/tweakpane-plugin-rotation-0.2.0.tgz", + "integrity": "sha512-bXGR2WO84zlXeafk/r4PRy6mhpuGdXX9AiQHWAwcCchzyYGvXtqNK0QjCZQfLTTBHbp8y1wDxU2Idd2qAKBq2Q==", + "dependencies": { + "@tweakpane/core": "^2.0.3" + }, + "peerDependencies": { + "tweakpane": "^4.0.3" + } + }, + "node_modules/@kitschpatrol/tweakpane-plugin-textarea": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@kitschpatrol/tweakpane-plugin-textarea/-/tweakpane-plugin-textarea-2.0.0.tgz", + "integrity": "sha512-h68Eo9gKbeZ9AYyaFy/HSVFzYeMsN+WTlOk+QO1prqDs56yqw0DJKDHffK2sdlGd8wThtGF359TiV8UEsCa3dA==", + "dependencies": { + "@tweakpane/core": "^2.0.3" + }, + "peerDependencies": { + "tweakpane": "^4.0.3" + } + }, + "node_modules/@kitschpatrol/tweakpane-plugin-waveform": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@kitschpatrol/tweakpane-plugin-waveform/-/tweakpane-plugin-waveform-1.0.3.tgz", + "integrity": "sha512-litDHX36MXbaw92stzTxua0MqS8INOkq0kGIhqxuRlyjOom7JJsO0bkSgNSbSNAQxJTHmo9NRjO6PzBbFR2Dsw==", + "dependencies": { + "@tweakpane/core": "^2.0.3" + }, + "peerDependencies": { + "tweakpane": "^4.0.3" + } + }, "node_modules/@neoconfetti/svelte": { "version": "1.0.0", "dev": true, @@ -2578,6 +2686,28 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@protobuf-ts/runtime": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime/-/runtime-2.9.4.tgz", + "integrity": "sha512-vHRFWtJJB/SiogWDF0ypoKfRIZ41Kq+G9cEFj6Qm1eQaAhJ1LDFvgZ7Ja4tb3iLOQhz0PaoPnnOijF1qmEqTxg==" + }, + "node_modules/@protobuf-ts/runtime-rpc": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.9.4.tgz", + "integrity": "sha512-y9L9JgnZxXFqH5vD4d7j9duWvIJ7AShyBRoNKJGhu9Q27qIbchfzli66H9RvrQNIFk5ER7z1Twe059WZGqERcA==", + "dependencies": { + "@protobuf-ts/runtime": "^2.9.4" + } + }, + "node_modules/@protobuf-ts/twirp-transport": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@protobuf-ts/twirp-transport/-/twirp-transport-2.9.4.tgz", + "integrity": "sha512-hoLHHVn1GgLyRVxDW9f0QKG24u/T/hLC0D97cV18OLyeC6Ibsvfg6xSSgA9Q/9wtBPI9ntMU/5/XLpICUXDgDQ==", + "dependencies": { + "@protobuf-ts/runtime": "^2.9.4", + "@protobuf-ts/runtime-rpc": "^2.9.4" + } + }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.18.0", "cpu": [ @@ -2602,6 +2732,54 @@ "linux" ] }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@stream-io/node-sdk": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@stream-io/node-sdk/-/node-sdk-0.2.6.tgz", + "integrity": "sha512-6RgnmCweISvmuS9hW9rccpiwUASEaeURhwKuMiLFJeP5igAsa+aehr0FHulWJ6MnMpDMaVGXx7QARmOCykRa4w==", + "dependencies": { + "@types/jsonwebtoken": "^9.0.3", + "@types/node": "^20.11.24", + "jsonwebtoken": "^9.0.2", + "uuid": "^9.0.1" + } + }, + "node_modules/@stream-io/node-sdk/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@stream-io/video-client": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@stream-io/video-client/-/video-client-1.4.1.tgz", + "integrity": "sha512-9jwjHRq5BEjDeBUAvB6Bz1QIUFlH+Guq10lpsfbsrBXTVEHMzQsHDv1ht1mUCX/IEaMyq3gubaNQHyMqGFQnRA==", + "dependencies": { + "@protobuf-ts/runtime": "^2.9.4", + "@protobuf-ts/runtime-rpc": "^2.9.4", + "@protobuf-ts/twirp-transport": "^2.9.4", + "@types/ws": "^8.5.7", + "axios": "^1.6.0", + "base64-js": "^1.5.1", + "isomorphic-ws": "^5.0.0", + "rxjs": "~7.8.1", + "sdp-transform": "^2.14.1", + "ua-parser-js": "^1.0.36", + "webrtc-adapter": "^8.2.3", + "ws": "^8.14.2" + } + }, "node_modules/@sveltejs/adapter-auto": { "version": "3.2.1", "dev": true, @@ -2645,15 +2823,16 @@ } }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.1.tgz", + "integrity": "sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==", "dev": true, - "license": "MIT", "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0", + "@sveltejs/vite-plugin-svelte-inspector": "^2.1.0", "debug": "^4.3.4", "deepmerge": "^4.3.1", "kleur": "^4.1.5", - "magic-string": "^0.30.9", + "magic-string": "^0.30.10", "svelte-hmr": "^0.16.0", "vitefu": "^0.2.5" }, @@ -2681,6 +2860,30 @@ "vite": "^5.0.0" } }, + "node_modules/@tabler/icons": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.5.0.tgz", + "integrity": "sha512-I53dC3ZSHQ2MZFGvDYJelfXm91L2bTTixS4w5jTAulLhHbCZso5Bih4Rk/NYZxlngLQMKHvEYwZQ+6w/WluKiA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@tabler/icons-svelte": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@tabler/icons-svelte/-/icons-svelte-3.5.0.tgz", + "integrity": "sha512-mc5ardGEM7cnUA4/q6Mz5bmW9B6t28vAAOf4Wl6+KXiTwG00EjImfnIr3pS3Ihi9sFIiXvJPYRl4H5IHlgvJvQ==", + "dependencies": { + "@tabler/icons": "3.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "peerDependencies": { + "svelte": ">=3 <5" + } + }, "node_modules/@tailwindcss/typography": { "version": "0.5.13", "dev": true, @@ -2695,6 +2898,138 @@ "tailwindcss": ">=3.0.0 || insiders" } }, + "node_modules/@testing-library/dom": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/dom/node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", + "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.3.2", + "@babel/runtime": "^7.9.2", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + }, + "peerDependencies": { + "@jest/globals": ">= 28", + "@types/bun": "latest", + "@types/jest": ">= 28", + "jest": ">= 28", + "vitest": ">= 0.32" + }, + "peerDependenciesMeta": { + "@jest/globals": { + "optional": true + }, + "@types/bun": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "jest": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/svelte": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/svelte/-/svelte-5.1.0.tgz", + "integrity": "sha512-8GW+rBR72U7Qql0Glxl4CtVTr6GPotYf/MB7MamIH6ZpV45i7IJIOm3oHWH4Wr6ZULdUs37F9recegQygLbC0g==", + "dev": true, + "dependencies": { + "@testing-library/dom": "^9.3.1" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "svelte": "^3 || ^4 || ^5", + "vite": "*", + "vitest": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@threejs-kit/instanced-sprite-mesh": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/@threejs-kit/instanced-sprite-mesh/-/instanced-sprite-mesh-2.4.7.tgz", + "integrity": "sha512-31erNfFEF+msFyWH46sIbjaACXqBke/8qMr/xhv9E3INPCLTrLuN4C4W93znnyTiyuCQ3Waf5UOCT18OBWTUtw==", + "dependencies": { + "diet-sprite": "^0.0.1", + "earcut": "^2.2.4", + "maath": "^0.10.7", + "three-instanced-uniforms-mesh": "^0.49.0", + "troika-three-utils": "^0.49.0" + }, + "peerDependencies": { + "three": ">=0.151.0" + } + }, "node_modules/@threlte/core": { "version": "7.3.0", "license": "MIT", @@ -2706,6 +3041,38 @@ "three": ">=0.152" } }, + "node_modules/@threlte/extras": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/@threlte/extras/-/extras-8.11.3.tgz", + "integrity": "sha512-4KWPmHbWKCsVLZvQOnTamBhxefy5JWwUmkxWTuKnD+e/dwe8Dy6qGIXN3tBtM3XMf1x9u2fhsu8ZkhiGJPbZvA==", + "dependencies": { + "@threejs-kit/instanced-sprite-mesh": "^2.4.6", + "three-mesh-bvh": "^0.7.1", + "three-perf": "^1.0.10", + "troika-three-text": "^0.49.0" + }, + "peerDependencies": { + "svelte": ">=4", + "three": ">=0.152" + } + }, + "node_modules/@tweakpane/core": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tweakpane/core/-/core-2.0.3.tgz", + "integrity": "sha512-qHci4XA1Wngpwy8IzsLh5JEdscz8aDti/9YhyOaq01si+cgNDaZfwzTtXdn1+xTxSnCM+pW4Zb2/4eqn+K1ATw==" + }, + "node_modules/@tweenjs/tween.js": { + "version": "23.1.2", + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.2.tgz", + "integrity": "sha512-kMCNaZCJugWI86xiEHaY338CU5JpD0B97p1j1IKNn/Zto8PgACjQx0UxbHjmOcLl/dDOBnItwD07KmCs75pxtQ==", + "peer": true + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true + }, "node_modules/@types/cookie": { "version": "0.6.0", "dev": true, @@ -2740,11 +3107,18 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz", + "integrity": "sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "20.14.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", - "dev": true, "dependencies": { "undici-types": "~5.26.4" } @@ -2766,6 +3140,39 @@ "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", "dev": true }, + "node_modules/@types/stats.js": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz", + "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==", + "peer": true + }, + "node_modules/@types/three": { + "version": "0.165.0", + "resolved": "https://registry.npmjs.org/@types/three/-/three-0.165.0.tgz", + "integrity": "sha512-AJK8JZAFNBF0kBXiAIl5pggYlzAGGA8geVYQXAcPCEDRbyA+oEjkpUBcJJrtNz6IiALwzGexFJGZG2yV3WsYBw==", + "peer": true, + "dependencies": { + "@tweenjs/tween.js": "~23.1.1", + "@types/stats.js": "*", + "@types/webxr": "*", + "fflate": "~0.8.2", + "meshoptimizer": "~0.18.1" + } + }, + "node_modules/@types/webxr": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.17.tgz", + "integrity": "sha512-JYcclaQIlisHRXM9dMF7SeVvQ54kcYc7QK1eKCExCTLKWnZDxP4cp/rXH4Uoa1j5+5oQJ0Cc2sZC/PWiiG4q2g==", + "peer": true + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yauzl": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", @@ -2980,58 +3387,239 @@ "dev": true, "license": "ISC" }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "node_modules/@vitest/expect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", + "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "node_modules/@vitest/runner": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz", + "integrity": "sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==", "dev": true, - "peer": true + "dependencies": { + "@vitest/utils": "1.6.0", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", "dev": true, - "peer": true + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, - "peer": true + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "node_modules/@vitest/snapshot": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.0.tgz", + "integrity": "sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "node_modules/@vitest/snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/snapshot/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/@vitest/spy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", + "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", + "dev": true, + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/ui": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-1.6.0.tgz", + "integrity": "sha512-k3Lyo+ONLOgylctiGovRKy7V4+dIN2yxstX3eY5cWFXH6WP+ooVX79YSyi0GagdTQzLmT43BF27T0s6dOIPBXA==", + "dev": true, + "dependencies": { + "@vitest/utils": "1.6.0", + "fast-glob": "^3.3.2", + "fflate": "^0.8.1", + "flatted": "^3.2.9", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "sirv": "^2.0.4" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "1.6.0" + } + }, + "node_modules/@vitest/utils": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", + "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vitest/utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", @@ -3189,6 +3777,27 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -3414,6 +4023,22 @@ "dequal": "^2.0.3" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "dev": true, @@ -3440,6 +4065,15 @@ "node": ">=0.8" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -3505,6 +4139,21 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -3616,7 +4265,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -3641,6 +4289,14 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "dev": true, @@ -3747,6 +4403,11 @@ "node": "*" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3754,6 +4415,15 @@ "dev": true, "peer": true }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/cachedir": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", @@ -3847,6 +4517,24 @@ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "dev": true, @@ -3862,6 +4550,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, "node_modules/check-more-types": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", @@ -4154,6 +4854,12 @@ "dev": true, "license": "MIT" }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", + "dev": true + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -4201,6 +4907,12 @@ "node": ">= 8" } }, + "node_modules/crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", + "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." + }, "node_modules/css-tree": { "version": "2.3.1", "license": "MIT", @@ -4212,6 +4924,12 @@ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, "node_modules/cssesc": { "version": "3.0.0", "dev": true, @@ -4223,6 +4941,24 @@ "node": ">=4" } }, + "node_modules/cssstyle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "dev": true, + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "node_modules/cypress": { "version": "13.10.0", "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.10.0.tgz", @@ -4281,56 +5017,14 @@ } }, "node_modules/cypress-svelte-unit-test": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/cypress-svelte-unit-test/-/cypress-svelte-unit-test-3.3.4.tgz", - "integrity": "sha512-Ce93Tz7YuqnQnyIlOSoieL3tzorUg+/R/sFxNU2v4t1rHI5oCyQ4Q1P2nydUGyJaGYrNXDwTP1CaGpw8yIR++g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cypress-svelte-unit-test/-/cypress-svelte-unit-test-2.2.0.tgz", + "integrity": "sha512-UNF6lqjNPpa2ffUK5/4Z90bqllAJMttUkbUJQ6JKnHKHyb4qm2uQhfsEbCbaYLReSf5X1BuoZvik4Stl8xtumw==", "dev": true, - "dependencies": { - "@bahmutov/cy-rollup": "2.0.0", - "unfetch": "4.1.0" - }, "engines": { "node": ">=8" } }, - "node_modules/cypress-svelte-unit-test/node_modules/@bahmutov/cy-rollup": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@bahmutov/cy-rollup/-/cy-rollup-2.0.0.tgz", - "integrity": "sha512-KJlvqB3U1nvKSq7djkXcvM4WpBLP6HEWKKzChI8s/aw0pYm0gVc+sphpyz5CmGpsNE9+/1QB6yoDfTe9Q97SJw==", - "dev": true, - "dependencies": { - "debug": "4.1.1" - }, - "peerDependencies": { - "rollup": "2" - } - }, - "node_modules/cypress-svelte-unit-test/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/cypress-svelte-unit-test/node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "peer": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/cypress/node_modules/commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -4373,6 +5067,19 @@ "node": ">=0.10" } }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/dayjs": { "version": "1.11.11", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", @@ -4404,6 +5111,56 @@ "node": ">=0.10.0" } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-is": { "version": "0.1.4", "dev": true, @@ -4449,9 +5206,26 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" @@ -4482,6 +5256,20 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/diet-sprite": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/diet-sprite/-/diet-sprite-0.0.1.tgz", + "integrity": "sha512-zSHI2WDAn1wJqJYxcmjWfJv3Iw8oL9reQIbEyx2x2/EZ4/qmUTIo8/5qOCurnAcq61EwtJJaZ0XTy2NRYqpB5A==" + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "dev": true, @@ -4509,6 +5297,29 @@ "node": ">=6.0.0" } }, + "node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + }, "node_modules/eastasianwidth": { "version": "0.2.0", "dev": true, @@ -4524,6 +5335,14 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.783", "dev": true, @@ -4570,6 +5389,18 @@ "node": ">=8.6" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -4591,6 +5422,26 @@ "node": ">= 0.4" } }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-module-lexer": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", @@ -4818,7 +5669,6 @@ }, "node_modules/esm-env": { "version": "1.0.0", - "dev": true, "license": "MIT" }, "node_modules/espree": { @@ -4987,11 +5837,24 @@ "node >=0.6.0" ] }, + "node_modules/fast-copy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz", + "integrity": "sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "dev": true, "license": "MIT" }, + "node_modules/fast-equals": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/fast-glob": { "version": "3.3.2", "dev": true, @@ -5045,6 +5908,11 @@ "pend": "~1.2.0" } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -5200,6 +6068,15 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/foreground-child": { "version": "3.1.1", "dev": true, @@ -5311,6 +6188,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5329,6 +6215,15 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -5531,6 +6426,15 @@ "dev": true, "license": "MIT" }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "dev": true, @@ -5575,6 +6479,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -5611,12 +6530,37 @@ "node": ">= 0.4" } }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/http-signature": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", @@ -5631,6 +6575,19 @@ "node": ">=0.10" } }, + "node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -5640,6 +6597,18 @@ "node": ">=8.12.0" } }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -5732,6 +6701,64 @@ "node": ">=10" } }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "dev": true, @@ -5743,6 +6770,34 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-ci": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", @@ -5766,6 +6821,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "dev": true, @@ -5809,6 +6879,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "dev": true, @@ -5817,6 +6899,21 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "dev": true, @@ -5825,6 +6922,12 @@ "node": ">=8" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "node_modules/is-reference": { "version": "3.0.2", "license": "MIT", @@ -5832,50 +6935,165 @@ "@types/estree": "*" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/isexe": { - "version": "2.0.0", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", "dev": true, "license": "ISC" }, + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "peerDependencies": { + "ws": "*" + } + }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -6091,6 +7309,46 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, + "node_modules/jsdom": { + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.0.tgz", + "integrity": "sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==", + "dev": true, + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.4", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.10", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.4", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.17.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -6161,6 +7419,27 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, "node_modules/jsprim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", @@ -6176,6 +7455,25 @@ "verror": "1.10.0" } }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", "dev": true, @@ -6305,6 +7603,22 @@ "node": ">=6.11.5" } }, + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-character": { "version": "3.0.0", "license": "MIT" @@ -6347,11 +7661,35 @@ "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "dev": true, "license": "MIT" }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "dev": true, @@ -6360,8 +7698,7 @@ "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, "node_modules/log-symbols": { "version": "4.1.0", @@ -6448,6 +7785,15 @@ "node": ">=8" } }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lru-cache": { "version": "10.2.2", "dev": true, @@ -6456,6 +7802,24 @@ "node": "14 || >=16.14" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/maath": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/maath/-/maath-0.10.7.tgz", + "integrity": "sha512-zQ2xd7dNOIVTjAS+hj22fyj1EFYmOJX6tzKjZ92r6WDoq8hyFxjuGA2q950tmR4iC/EKXoMQdSipkaJVuUHDTg==", + "peerDependencies": { + "@types/three": ">=0.144.0", + "three": ">=0.144.0" + } + }, "node_modules/magic-string": { "version": "0.30.10", "license": "MIT", @@ -6505,6 +7869,12 @@ "node": ">= 8" } }, + "node_modules/meshoptimizer": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", + "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", + "peer": true + }, "node_modules/micromatch": { "version": "4.0.7", "dev": true, @@ -6604,6 +7974,18 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mlly": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" + } + }, "node_modules/mri": { "version": "1.2.0", "dev": true, @@ -6622,7 +8004,6 @@ }, "node_modules/ms": { "version": "2.1.2", - "dev": true, "license": "MIT" }, "node_modules/mz": { @@ -6709,6 +8090,12 @@ "node": ">=8" } }, + "node_modules/nwsapi": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", + "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==", + "dev": true + }, "node_modules/nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -6923,6 +8310,49 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", "dev": true, @@ -7046,6 +8476,18 @@ "node": ">=6" } }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "dev": true, @@ -7098,6 +8540,21 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -7255,6 +8712,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pkg-types": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.1.tgz", + "integrity": "sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==", + "dev": true, + "dependencies": { + "confbox": "^0.1.7", + "mlly": "^1.7.0", + "pathe": "^1.1.2" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.38", "dev": true, @@ -7547,6 +9024,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -7647,6 +9150,12 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, "node_modules/read-cache": { "version": "1.0.0", "dev": true, @@ -7666,6 +9175,19 @@ "node": ">=8.10.0" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -7701,6 +9223,24 @@ "@babel/runtime": "^7.8.4" } }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -7776,8 +9316,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -7919,8 +9457,14 @@ "fsevents": "~2.3.2" } }, - "node_modules/run-parallel": { - "version": "1.2.0", + "node_modules/rrweb-cssom": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.0.tgz", + "integrity": "sha512-KlSv0pm9kgQSRxXEMgtivPJ4h826YHsuob8pSHcfSZsSXGtvpEAie8S0AnXuObEJ7nhikOb4ahwxDm0H2yW17g==", + "dev": true + }, + "node_modules/run-parallel": { + "version": "1.2.0", "dev": true, "funding": [ { @@ -7945,7 +9489,6 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, "dependencies": { "tslib": "^2.1.0" } @@ -7965,7 +9508,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -8028,6 +9570,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/schema-utils": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", @@ -8085,9 +9639,21 @@ "dev": true, "peer": true }, + "node_modules/sdp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz", + "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==" + }, + "node_modules/sdp-transform": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.2.tgz", + "integrity": "sha512-icY6jVao7MfKCieyo1AyxFYm1baiM+fA00qW/KrNNVlkxHAd34riEKuEkUe4bBb3gJwLJZM+xT60Yj1QL8rHiA==", + "bin": { + "sdp-verify": "checker.js" + } + }, "node_modules/semver": { "version": "7.6.2", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -8134,6 +9700,21 @@ "node": ">= 0.4" } }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "dev": true, @@ -8171,6 +9752,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "node_modules/signal-exit": { "version": "4.1.0", "dev": true, @@ -8325,6 +9912,30 @@ "node": ">=0.10.0" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string-width": { "version": "5.1.2", "dev": true, @@ -8417,6 +10028,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz", + "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", + "dev": true, + "dependencies": { + "js-tokens": "^9.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz", + "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==", + "dev": true + }, "node_modules/sucrase": { "version": "3.35.0", "dev": true, @@ -8541,6 +10170,17 @@ "svelte": "^3.19.0 || ^4.0.0" } }, + "node_modules/svelte-local-storage-store": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/svelte-local-storage-store/-/svelte-local-storage-store-0.6.4.tgz", + "integrity": "sha512-45WoY2vSGPQM1sIQJ9jTkPPj20hYeqm+af6mUGRFSPP5WglZf36YYoZqwmZZ8Dt/2SU8lem+BTA8/Z/8TkqNLg==", + "engines": { + "node": ">=0.14" + }, + "peerDependencies": { + "svelte": "^3.48.0 || >4.0.0" + } + }, "node_modules/svelte-preprocess": { "version": "5.1.4", "dev": true, @@ -8602,6 +10242,51 @@ } } }, + "node_modules/svelte-tweakpane-ui": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/svelte-tweakpane-ui/-/svelte-tweakpane-ui-1.3.0.tgz", + "integrity": "sha512-LeJxKU+z8kDpsrTjjJtrg55F6OoLx06owQWaAPHQu7gsYZeFjf1YQ+8DnA+YP24aJE/B1A3ZkJ+qRi24lL9f3A==", + "dependencies": { + "@kitschpatrol/tweakpane-plugin-camerakit": "^0.3.0", + "@kitschpatrol/tweakpane-plugin-essentials": "^0.2.1", + "@kitschpatrol/tweakpane-plugin-image": "^2.0.0", + "@kitschpatrol/tweakpane-plugin-profiler": "^0.4.1", + "@kitschpatrol/tweakpane-plugin-rotation": "^0.2.0", + "@kitschpatrol/tweakpane-plugin-textarea": "^2.0.0", + "@kitschpatrol/tweakpane-plugin-waveform": "^1.0.3", + "@tweakpane/core": "2.0.3", + "esm-env": "1.0.0", + "fast-copy": "3.0.1", + "fast-equals": "5.0.1", + "nanoid": "5.0.6", + "svelte-local-storage-store": "0.6.4", + "tweakpane": "4.0.3" + }, + "engines": { + "node": ">=18.0.0", + "pnpm": ">=8.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0" + } + }, + "node_modules/svelte-tweakpane-ui/node_modules/nanoid": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.6.tgz", + "integrity": "sha512-rRq0eMHoGZxlvaFOUdK1Ev83Bd1IgzzR+WJ3IbDJ7QOSdAxYjlurSPqFs9s4lJg29RT6nPwizFtJhQS6V5xgiA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, "node_modules/svg.draggable.js": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", @@ -8693,6 +10378,12 @@ "node": ">= 0.8.0" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "node_modules/tailwind-merge": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.3.0.tgz", @@ -8963,6 +10654,108 @@ "resolved": "https://registry.npmjs.org/three/-/three-0.165.0.tgz", "integrity": "sha512-cc96IlVYGydeceu0e5xq70H8/yoVT/tXBxV/W8A/U6uOq7DXc4/s1Mkmnu6SqoYGhSRWWYFOhVwvq6V0VtbplA==" }, + "node_modules/three-instanced-uniforms-mesh": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/three-instanced-uniforms-mesh/-/three-instanced-uniforms-mesh-0.49.1.tgz", + "integrity": "sha512-qPgPLA6JR2nQau2zAODwiVRknYndXNE6aYmTe5zESiwg9hO8AaNq1xC0hWDYOyyH+NbN2G8278NxX1hpZ+2ZgQ==", + "dependencies": { + "troika-three-utils": "^0.49.0" + }, + "peerDependencies": { + "three": ">=0.125.0" + } + }, + "node_modules/three-mesh-bvh": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/three-mesh-bvh/-/three-mesh-bvh-0.7.5.tgz", + "integrity": "sha512-WDd77RklE52pZSKZx8sDXzrd2JCF/gL/hugFvsIBylpMRlJxxwesKn2rW7TcQZ809NocDVkQx1UJo9pJtVAPYg==", + "peerDependencies": { + "three": ">= 0.151.0" + } + }, + "node_modules/three-perf": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/three-perf/-/three-perf-1.0.10.tgz", + "integrity": "sha512-lCur/i8U6m0ysWYhQ1yFGWOZB0QA2oVsDsfynYd65HhXxLxJfiAt8OsXmpv9PnTLacfaZclBcZHUOB9QKk3eaw==", + "dependencies": { + "troika-three-text": "^0.47.2", + "tweakpane": "^3.1.10" + }, + "peerDependencies": { + "three": ">=0.151" + } + }, + "node_modules/three-perf/node_modules/troika-three-text": { + "version": "0.47.2", + "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.47.2.tgz", + "integrity": "sha512-qylT0F+U7xGs+/PEf3ujBdJMYWbn0Qci0kLqI5BJG2kW1wdg4T1XSxneypnF05DxFqJhEzuaOR9S2SjiyknMng==", + "dependencies": { + "bidi-js": "^1.0.2", + "troika-three-utils": "^0.47.2", + "troika-worker-utils": "^0.47.2", + "webgl-sdf-generator": "1.1.1" + }, + "peerDependencies": { + "three": ">=0.125.0" + } + }, + "node_modules/three-perf/node_modules/troika-three-utils": { + "version": "0.47.2", + "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.47.2.tgz", + "integrity": "sha512-/28plhCxfKtH7MSxEGx8e3b/OXU5A0xlwl+Sbdp0H8FXUHKZDoksduEKmjQayXYtxAyuUiCRunYIv/8Vi7aiyg==", + "peerDependencies": { + "three": ">=0.125.0" + } + }, + "node_modules/three-perf/node_modules/troika-worker-utils": { + "version": "0.47.2", + "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.47.2.tgz", + "integrity": "sha512-mzss4MeyzUkYBppn4x5cdAqrhBHFEuVmMMgLMTyFV23x6GvQMyo+/R5E5Lsbrt7WSt5RfvewjcwD1DChRTA9lA==" + }, + "node_modules/three-perf/node_modules/tweakpane": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/tweakpane/-/tweakpane-3.1.10.tgz", + "integrity": "sha512-rqwnl/pUa7+inhI2E9ayGTqqP0EPOOn/wVvSWjZsRbZUItzNShny7pzwL3hVlaN4m9t/aZhsP0aFQ9U5VVR2VQ==", + "funding": { + "url": "https://github.com/sponsors/cocopon" + } + }, + "node_modules/threlte": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/threlte/-/threlte-3.13.1.tgz", + "integrity": "sha512-9Yfw3qHfHA8O9p28oBnPFFlnBVYaqoxx78bzC5xAbDmwuUJhdBRhuzPY2ZEdjrOXk+15TIIYaKr84MoGtwgnMw==", + "deprecated": "threlte is now available as @threlte/core and @threlte/extras", + "dependencies": { + "troika-three-text": "^0.46.4" + } + }, + "node_modules/threlte/node_modules/troika-three-text": { + "version": "0.46.4", + "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.46.4.tgz", + "integrity": "sha512-Qsv0HhUKTZgSmAJs5wvO7YlBoJSP9TGPLmrg+K9pbQq4lseQdcevbno/WI38bwJBZ/qS56hvfqEzY0zUEFzDIw==", + "dependencies": { + "bidi-js": "^1.0.2", + "troika-three-utils": "^0.46.0", + "troika-worker-utils": "^0.46.0", + "webgl-sdf-generator": "1.1.1" + }, + "peerDependencies": { + "three": ">=0.103.0" + } + }, + "node_modules/threlte/node_modules/troika-three-utils": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.46.0.tgz", + "integrity": "sha512-llHyrXAcwzr0bpg80GxsIp73N7FuImm4WCrKDJkAqcAsWmE5pfP9+Qzw+oMWK1P/AdHQ79eOrOl9NjyW4aOw0w==", + "peerDependencies": { + "three": ">=0.103.0" + } + }, + "node_modules/threlte/node_modules/troika-worker-utils": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.46.0.tgz", + "integrity": "sha512-bzOx5f2ZBxkFhXtIvDJlLn2AI3bzCkGVbCndl/2dL5QZrwHEKl45OEIilCxYQQWJG1rEbOD9O80tMjoYjw19OA==" + }, "node_modules/throttleit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", @@ -8987,6 +10780,30 @@ "globrex": "^0.1.2" } }, + "node_modules/tinybench": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", + "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", @@ -9048,6 +10865,45 @@ "node": ">= 4.0.0" } }, + "node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/troika-three-text": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/troika-three-text/-/troika-three-text-0.49.1.tgz", + "integrity": "sha512-lXGWxgjJP9kw4i4Wh+0k0Q/7cRfS6iOME4knKht/KozPu9GcFA9NnNpRvehIhrUawq9B0ZRw+0oiFHgRO+4Wig==", + "dependencies": { + "bidi-js": "^1.0.2", + "troika-three-utils": "^0.49.0", + "troika-worker-utils": "^0.49.0", + "webgl-sdf-generator": "1.1.1" + }, + "peerDependencies": { + "three": ">=0.125.0" + } + }, + "node_modules/troika-three-utils": { + "version": "0.49.0", + "resolved": "https://registry.npmjs.org/troika-three-utils/-/troika-three-utils-0.49.0.tgz", + "integrity": "sha512-umitFL4cT+Fm/uONmaQEq4oZlyRHWwVClaS6ZrdcueRvwc2w+cpNQ47LlJKJswpqtMFWbEhOLy0TekmcPZOdYA==", + "peerDependencies": { + "three": ">=0.125.0" + } + }, + "node_modules/troika-worker-utils": { + "version": "0.49.0", + "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.49.0.tgz", + "integrity": "sha512-1xZHoJrG0HFfCvT/iyN41DvI/nRykiBtHqFkGaGgJwq5iXfIZFBiPPEHFpPpgyKM3Oo5ITHXP5wM2TNQszYdVg==" + }, "node_modules/ts-api-utils": { "version": "1.3.0", "dev": true, @@ -9066,7 +10922,6 @@ }, "node_modules/tslib": { "version": "2.6.2", - "dev": true, "license": "0BSD" }, "node_modules/tunnel-agent": { @@ -9081,6 +10936,14 @@ "node": "*" } }, + "node_modules/tweakpane": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tweakpane/-/tweakpane-4.0.3.tgz", + "integrity": "sha512-BlcWOAe8oe4c+k9pmLBARGdWB6MVZMszayekkixQXTgkxTaYoTUpHpwVEp+3HkoamZkomodpbBf0CkguIHTgLg==", + "funding": { + "url": "https://github.com/sponsors/cocopon" + } + }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -9098,6 +10961,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "dev": true, @@ -9130,17 +11002,38 @@ "node": ">=14.17" } }, + "node_modules/ua-parser-js": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.38.tgz", + "integrity": "sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/ufo": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", + "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", + "dev": true + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/unfetch": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.1.0.tgz", - "integrity": "sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg==", - "dev": true + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -9333,6 +11226,28 @@ } } }, + "node_modules/vite-node": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", + "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/vitefu": { "version": "0.2.5", "dev": true, @@ -9346,6 +11261,205 @@ } } }, + "node_modules/vitest": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.0.tgz", + "integrity": "sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==", + "dev": true, + "dependencies": { + "@vitest/expect": "1.6.0", + "@vitest/runner": "1.6.0", + "@vitest/snapshot": "1.6.0", + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", + "acorn-walk": "^8.3.2", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.3", + "vite": "^5.0.0", + "vite-node": "1.6.0", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "1.6.0", + "@vitest/ui": "1.6.0", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/vitest/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/vitest/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vitest/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/watchpack": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", @@ -9360,6 +11474,20 @@ "node": ">=10.13.0" } }, + "node_modules/webgl-sdf-generator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/webgl-sdf-generator/-/webgl-sdf-generator-1.1.1.tgz", + "integrity": "sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA==" + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/webpack": { "version": "5.91.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", @@ -9461,6 +11589,52 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/webrtc-adapter": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-8.2.3.tgz", + "integrity": "sha512-gnmRz++suzmvxtp3ehQts6s2JtAGPuDPjA1F3a9ckNpG1kYdYuHWYpazoAnL9FS5/B21tKlhkorbdCXat0+4xQ==", + "dependencies": { + "sdp": "^3.2.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=3.10.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "dev": true, + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/which": { "version": "2.0.2", "dev": true, @@ -9475,12 +11649,81 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "dev": true, @@ -9564,6 +11807,41 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", diff --git a/src/client/package.json b/src/client/package.json index 74a3929c..c08766c6 100644 --- a/src/client/package.json +++ b/src/client/package.json @@ -32,7 +32,8 @@ "@vitest/ui": "^1.6.0", "autoprefixer": "^10.4.16", "cypress": "^13.10.0", - "cypress-svelte-unit-test": "^3.3.4", + "cypress-svelte-unit-test": "^2.2.0", + "dotenv": "^16.4.5", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-svelte": "^2.35.1", @@ -60,9 +61,13 @@ "@stream-io/video-client": "^1.3.0", "@tabler/icons-svelte": "^3.5.0", "@threlte/core": "^7.3.0", + "@threlte/extras": "^8.11.3", "axios": "^1.7.2", "clsx": "^2.1.1", + "crypto": "^1.0.1", + "svelte-tweakpane-ui": "^1.3.0", "tailwind-merge": "^2.3.0", - "three": "^0.165.0" + "three": "^0.165.0", + "threlte": "^3.13.1" } } diff --git a/src/client/src/app.css b/src/client/src/app.css index 44e8832f..386ef7e2 100644 --- a/src/client/src/app.css +++ b/src/client/src/app.css @@ -22,3 +22,96 @@ .roboto { font-family: 'Roboto', sans-serif; } + +.task { + position: relative; + color: #2e2e2f; + background-color: #fff; + padding: 1rem; + border-radius: 8px; + box-shadow: rgba(99, 99, 99, 0.1) 0px 2px 8px 0px; + margin-bottom: 1rem; + border: 3px dashed transparent; +} + +.task:hover { + box-shadow: rgba(99, 99, 99, 0.3) 0px 2px 8px 0px; + border-color: rgba(162, 179, 207, 0.2) !important; +} + +.task p { + font-size: 15px; + margin: 1.2rem 0; +} + +.tag { + border-radius: 100px; + padding: 4px 13px; + font-size: 12px; + color: #ffffff; + background-color: var(--primary); +} + +.tags { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; +} + +.options { + background: transparent; + border: 0; + color: #c4cad3; + font-size: 17px; +} + +.options svg { + fill: #9fa4aa; +} + +.stats { + position: relative; + width: 100%; + color: #9fa4aa; + font-size: 12px; + display: flex; + align-items: center; + justify-content: space-between; +} + +.stats div { + margin-right: 1rem; + height: 20px; + display: flex; + align-items: center; +} + +.stats svg { + margin-right: 5px; + height: 100%; + stroke: #9fa4aa; +} + +.viewer span { + height: 30px; + background-color: var(--primary); + margin-right: -10px; + border-radius: 50%; + border: 1px solid #fff; + display: grid; + align-items: center; + text-align: center; + font-weight: bold; + color: #fff; + padding: 2px; +} + +.viewer span svg { + stroke: #fff; +} + +.active { + --tw-bg-opacity: 1; + background-color: rgb(134 239 172 / var(--tw-bg-opacity)); +} diff --git a/src/client/src/lib/components/admin/+Admins.svelte b/src/client/src/lib/components/admin/+Admins.svelte index 49ba01ab..5443c782 100644 --- a/src/client/src/lib/components/admin/+Admins.svelte +++ b/src/client/src/lib/components/admin/+Admins.svelte @@ -1,10 +1,10 @@
-
- - Home - Admins - -
-
diff --git a/src/client/src/lib/components/admin/+Announcements.svelte b/src/client/src/lib/components/admin/+Announcements.svelte deleted file mode 100644 index ebb4ed7f..00000000 --- a/src/client/src/lib/components/admin/+Announcements.svelte +++ /dev/null @@ -1,72 +0,0 @@ - - -
-
-

- Announcements -

-
- {#each announcements as announcement} - - {/each} -
diff --git a/src/client/src/lib/components/admin/+Degrees.svelte b/src/client/src/lib/components/admin/+Degrees.svelte index fe513be1..8629a9c7 100644 --- a/src/client/src/lib/components/admin/+Degrees.svelte +++ b/src/client/src/lib/components/admin/+Degrees.svelte @@ -1,8 +1,11 @@ +
+

Degree Dashboard

+
{#each degrees as degree} diff --git a/src/client/src/lib/components/admin/+Lectures.svelte b/src/client/src/lib/components/admin/+Lectures.svelte index c86b9289..46ca61a4 100644 --- a/src/client/src/lib/components/admin/+Lectures.svelte +++ b/src/client/src/lib/components/admin/+Lectures.svelte @@ -1,10 +1,10 @@
-
- - Home - Lecturers - -
-
diff --git a/src/client/src/lib/components/admin/+Organisation.svelte b/src/client/src/lib/components/admin/+Organisation.svelte index e02bd399..ce3dd231 100644 --- a/src/client/src/lib/components/admin/+Organisation.svelte +++ b/src/client/src/lib/components/admin/+Organisation.svelte @@ -1,10 +1,10 @@
-
- - Home - Students - -
-
diff --git a/src/client/src/lib/components/admin/+Workspaces.svelte b/src/client/src/lib/components/admin/+Workspaces.svelte index 9f697de9..28ebcd13 100644 --- a/src/client/src/lib/components/admin/+Workspaces.svelte +++ b/src/client/src/lib/components/admin/+Workspaces.svelte @@ -1,23 +1,85 @@ -
-
- {#each workspaces as workspace} -
-
- -

- {workspace.title} -

-

- {workspace.description} -

-
-
+
+
+
+
+

Workspaces

+ + + {workspaces.length} + {' '} workspaces +
- {/each} +
+ +
+ + + + +
+ +
+ +
-
+ + + + {#each headers as header} + {header} + {/each} + + + {#each workspaces as workspace} + + +
+
+

+ {workspace.name} +

+
+
+
+ + + + + + + + + + + + +
+ {/each} +
+
+
diff --git a/src/client/src/lib/components/modals/+AddAdmin.svelte b/src/client/src/lib/components/admin/modals/add/+AddAdmin.svelte similarity index 94% rename from src/client/src/lib/components/modals/+AddAdmin.svelte rename to src/client/src/lib/components/admin/modals/add/+AddAdmin.svelte index 518bb9fb..4c51877d 100644 --- a/src/client/src/lib/components/modals/+AddAdmin.svelte +++ b/src/client/src/lib/components/admin/modals/add/+AddAdmin.svelte @@ -1,7 +1,7 @@ + + + + +
+

Add Lecturer

+ + + + + + + + + + + +
+
diff --git a/src/client/src/lib/components/modals/+AddLecturer.svelte b/src/client/src/lib/components/admin/modals/add/+AddLecturer.svelte similarity index 92% rename from src/client/src/lib/components/modals/+AddLecturer.svelte rename to src/client/src/lib/components/admin/modals/add/+AddLecturer.svelte index 11bb2a87..6d0a66c6 100644 --- a/src/client/src/lib/components/modals/+AddLecturer.svelte +++ b/src/client/src/lib/components/admin/modals/add/+AddLecturer.svelte @@ -1,8 +1,8 @@ + + + + +
+

Add Lecturer

+ + + + + + + + +
+
diff --git a/src/client/src/lib/components/modals/+AddStudent.svelte b/src/client/src/lib/components/admin/modals/add/+AddStudent.svelte similarity index 94% rename from src/client/src/lib/components/modals/+AddStudent.svelte rename to src/client/src/lib/components/admin/modals/add/+AddStudent.svelte index 340d1832..f38e6c65 100644 --- a/src/client/src/lib/components/modals/+AddStudent.svelte +++ b/src/client/src/lib/components/admin/modals/add/+AddStudent.svelte @@ -1,7 +1,7 @@ + + + + +
+

Create New Workspace

+ + + + + + + + +
+
diff --git a/src/client/src/lib/components/modals/+EditAdmin.svelte b/src/client/src/lib/components/admin/modals/edit/+EditAdmin.svelte similarity index 95% rename from src/client/src/lib/components/modals/+EditAdmin.svelte rename to src/client/src/lib/components/admin/modals/edit/+EditAdmin.svelte index 02d03ff0..67e0e6c4 100644 --- a/src/client/src/lib/components/modals/+EditAdmin.svelte +++ b/src/client/src/lib/components/admin/modals/edit/+EditAdmin.svelte @@ -2,8 +2,8 @@ export let adminID = ''; import { Button, Modal, Label, Input } from 'flowbite-svelte'; - import { updateUser } from '../../../services/users'; - import { admChange } from '../../stores/store'; + import { updateUser } from '$lib/services/users'; + import { admChange } from '$lib/store'; let formModal = false; diff --git a/src/client/src/lib/components/modals/+EditLecturer.svelte b/src/client/src/lib/components/admin/modals/edit/+EditLecturer.svelte similarity index 95% rename from src/client/src/lib/components/modals/+EditLecturer.svelte rename to src/client/src/lib/components/admin/modals/edit/+EditLecturer.svelte index 774f8626..4d1d00e2 100644 --- a/src/client/src/lib/components/modals/+EditLecturer.svelte +++ b/src/client/src/lib/components/admin/modals/edit/+EditLecturer.svelte @@ -1,7 +1,7 @@ + + + + +
+

Edit Student

+ + + + + + + + + + + +
+
diff --git a/src/client/src/lib/components/modals/+Remove.svelte b/src/client/src/lib/components/admin/modals/remove/+Remove.svelte similarity index 90% rename from src/client/src/lib/components/modals/+Remove.svelte rename to src/client/src/lib/components/admin/modals/remove/+Remove.svelte index 11e819e0..42c3f01c 100644 --- a/src/client/src/lib/components/modals/+Remove.svelte +++ b/src/client/src/lib/components/admin/modals/remove/+Remove.svelte @@ -3,9 +3,9 @@ import { Button, Modal } from 'flowbite-svelte'; import { ExclamationCircleOutline } from 'flowbite-svelte-icons'; - import { deleteUser } from '../../../services/users'; + import { deleteUser } from '$lib/services/users'; import IconTrash from '@tabler/icons-svelte/IconTrash.svelte'; - import { lecChange, stuChange, admChange } from '../../stores/store'; + import { lecChange, stuChange, admChange } from '$lib/store'; let popupModal = false; async function handleRemove(event: Event) { diff --git a/src/client/src/lib/components/modals/+RemoveOrg.svelte b/src/client/src/lib/components/admin/modals/remove/+RemoveOrg.svelte similarity index 90% rename from src/client/src/lib/components/modals/+RemoveOrg.svelte rename to src/client/src/lib/components/admin/modals/remove/+RemoveOrg.svelte index fa9fbbb3..95e800b7 100644 --- a/src/client/src/lib/components/modals/+RemoveOrg.svelte +++ b/src/client/src/lib/components/admin/modals/remove/+RemoveOrg.svelte @@ -2,8 +2,8 @@ import { goto } from '$app/navigation'; import { Button, Modal } from 'flowbite-svelte'; import { ExclamationCircleOutline } from 'flowbite-svelte-icons'; - import { deleteOrganization } from '../../../services/orgs'; - import { organisationName } from '$lib/stores/store'; + import { deleteOrganization } from '$lib/services/orgs'; + import { organisationName } from '$lib/store'; let popupModal = false; async function handleRemove() { diff --git a/src/client/src/lib/components/authentication/+Landing.svelte b/src/client/src/lib/components/authentication/+Landing.svelte deleted file mode 100644 index eb289e0b..00000000 --- a/src/client/src/lib/components/authentication/+Landing.svelte +++ /dev/null @@ -1,32 +0,0 @@ - - - -
{ - opacity.set(1); - y.set(0); - }} - on:mouseleave={() => { - opacity.set(0); - y.set(40); - }} - > -
- Background lights are cool you know. -
-
- And this, is chemical burn. -
- -
-
diff --git a/src/client/src/lib/components/envirmonment/+Scene.svelte b/src/client/src/lib/components/envirmonment/+Scene.svelte new file mode 100644 index 00000000..229cffc4 --- /dev/null +++ b/src/client/src/lib/components/envirmonment/+Scene.svelte @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + --> + + + diff --git a/src/client/src/lib/components/envirmonment/models/+ObjectSettings.svelte b/src/client/src/lib/components/envirmonment/models/+ObjectSettings.svelte new file mode 100644 index 00000000..a68df442 --- /dev/null +++ b/src/client/src/lib/components/envirmonment/models/+ObjectSettings.svelte @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/src/client/src/lib/components/envirmonment/models/Cash_Register.svelte b/src/client/src/lib/components/envirmonment/models/Cash_Register.svelte new file mode 100644 index 00000000..50ab438f --- /dev/null +++ b/src/client/src/lib/components/envirmonment/models/Cash_Register.svelte @@ -0,0 +1,42 @@ + + + + + + {#await gltf} + + {:then gltf} + + + + + + + + {:catch error} + + {/await} + + + diff --git a/src/client/src/lib/components/lecturer/+Dashboard.svelte b/src/client/src/lib/components/lecturer/+Dashboard.svelte new file mode 100644 index 00000000..d0c52c1a --- /dev/null +++ b/src/client/src/lib/components/lecturer/+Dashboard.svelte @@ -0,0 +1,35 @@ + + + + +
Overview
+
+ +
+
+ + +
Study Material Upload
+
+

+ Study Material: + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut + labore et dolore magna aliqua. +

+
+
+ + +
3D Material Upload
+
+

+ 3D Material: + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut + labore et dolore magna aliqua. +

+
+
+
diff --git a/src/client/src/lib/components/admin/+Lessons.svelte b/src/client/src/lib/components/lecturer/+Lessons.svelte similarity index 79% rename from src/client/src/lib/components/admin/+Lessons.svelte rename to src/client/src/lib/components/lecturer/+Lessons.svelte index ace70c8b..d5f951ef 100644 --- a/src/client/src/lib/components/admin/+Lessons.svelte +++ b/src/client/src/lib/components/lecturer/+Lessons.svelte @@ -1,6 +1,12 @@ + +
@@ -39,9 +53,11 @@
-
- -
+ {#if $showButtonReactive} +
+ +
+ {/if}

diff --git a/src/client/src/lib/components/lecturer/+Overview.svelte b/src/client/src/lib/components/lecturer/+Overview.svelte new file mode 100644 index 00000000..eee5ec5b --- /dev/null +++ b/src/client/src/lib/components/lecturer/+Overview.svelte @@ -0,0 +1,47 @@ + + +
+ {#each stats as stat} +
+
+
+
+

+ {stat.title} +

+
+
+

+ + {stat.stat} + +

+
+
+
+
+ {/each} +
+ +
+ + +
diff --git a/src/client/src/lib/components/modals/+ScheduleLesson.svelte b/src/client/src/lib/components/lecturer/modals/+ScheduleLesson.svelte similarity index 100% rename from src/client/src/lib/components/modals/+ScheduleLesson.svelte rename to src/client/src/lib/components/lecturer/modals/+ScheduleLesson.svelte diff --git a/src/client/src/lib/components/lecturer/modals/+UploadStudy.svelte b/src/client/src/lib/components/lecturer/modals/+UploadStudy.svelte new file mode 100644 index 00000000..5c9418a1 --- /dev/null +++ b/src/client/src/lib/components/lecturer/modals/+UploadStudy.svelte @@ -0,0 +1,40 @@ + + + + + +
+

Upload Student Material

+ + + + + + +
diff --git a/src/client/src/lib/components/student/+Home.svelte b/src/client/src/lib/components/student/+Home.svelte new file mode 100644 index 00000000..bc6a9254 --- /dev/null +++ b/src/client/src/lib/components/student/+Home.svelte @@ -0,0 +1,16 @@ + + +
+

University of Pretoria

+

Computer Science

+
+
+ {#each modules as module} + + {/each} +
+
+
diff --git a/src/client/src/lib/components/student/+Material.svelte b/src/client/src/lib/components/student/+Material.svelte new file mode 100644 index 00000000..d02bc980 --- /dev/null +++ b/src/client/src/lib/components/student/+Material.svelte @@ -0,0 +1,22 @@ + + + + + diff --git a/src/client/src/lib/components/admin/+Navigation.svelte b/src/client/src/lib/components/student/+Module.svelte similarity index 100% rename from src/client/src/lib/components/admin/+Navigation.svelte rename to src/client/src/lib/components/student/+Module.svelte diff --git a/src/client/src/lib/components/student/+Study.svelte b/src/client/src/lib/components/student/+Study.svelte new file mode 100644 index 00000000..677cb8f7 --- /dev/null +++ b/src/client/src/lib/components/student/+Study.svelte @@ -0,0 +1,16 @@ + + +
+

Computer Science

+

Computer Networks

+
+
+ {#each materials as material} + + {/each} +
+
+
diff --git a/src/client/src/lib/components/admin/+Activities.svelte b/src/client/src/lib/components/universal/+Activities.svelte similarity index 100% rename from src/client/src/lib/components/admin/+Activities.svelte rename to src/client/src/lib/components/universal/+Activities.svelte diff --git a/src/client/src/lib/components/universal/+Announcements.svelte b/src/client/src/lib/components/universal/+Announcements.svelte new file mode 100644 index 00000000..9f799669 --- /dev/null +++ b/src/client/src/lib/components/universal/+Announcements.svelte @@ -0,0 +1,19 @@ + + +
+
+

+ Announcements +

+
+ {#each announcements as announcement} + + {/each} +
diff --git a/src/client/src/lib/components/universal/+Construction.svelte b/src/client/src/lib/components/universal/+Construction.svelte new file mode 100644 index 00000000..c492aed1 --- /dev/null +++ b/src/client/src/lib/components/universal/+Construction.svelte @@ -0,0 +1,16 @@ + + + +
+ Logo +

+ Site is under contruction +

+

+ We're working hard to improve the user experience. Stay tuned! +

+
+ diff --git a/src/client/src/lib/components/universal/+SandBox.svelte b/src/client/src/lib/components/universal/+SandBox.svelte new file mode 100644 index 00000000..f528555e --- /dev/null +++ b/src/client/src/lib/components/universal/+SandBox.svelte @@ -0,0 +1,56 @@ + + +
+
+
+

Sandbox

+
+ + +
+
+
+
+ + + +
+ +
+
+
diff --git a/src/client/src/lib/components/authentication/+LeftSideImage.svelte b/src/client/src/lib/components/universal/auth/+LeftSideImage.svelte similarity index 100% rename from src/client/src/lib/components/authentication/+LeftSideImage.svelte rename to src/client/src/lib/components/universal/auth/+LeftSideImage.svelte diff --git a/src/client/src/lib/components/authentication/+SignInForm.svelte b/src/client/src/lib/components/universal/auth/+SignInForm.svelte similarity index 90% rename from src/client/src/lib/components/authentication/+SignInForm.svelte rename to src/client/src/lib/components/universal/auth/+SignInForm.svelte index 9abf078d..f3059e93 100644 --- a/src/client/src/lib/components/authentication/+SignInForm.svelte +++ b/src/client/src/lib/components/universal/auth/+SignInForm.svelte @@ -3,7 +3,8 @@ import Google from '$lib/images/google.svg'; import { goto } from '$app/navigation'; import { Input, Label, Button, A } from 'flowbite-svelte'; - import { signIn } from '../../../services/auth'; + import { signIn } from '$lib/services/auth'; + import { user_details } from '$lib/store'; import '@fontsource/roboto'; @@ -30,15 +31,19 @@ // Send a request to your server-side action try { const response = await signIn(username, password); + user_details.set(response); + + const details = $user_details; + console.log(details); console.log('Response:', response); if (response && response.accessToken) { storeAccessToken(response.accessToken, response.sub); - goto('/'); } + goto('/student'); } catch (error) { - console.error('Sign-ip error:', error); + console.error('Sign-in error:', error); alert('Sign-in failed'); } } @@ -96,7 +101,7 @@

Already have an account?{' '} - Sign Up + Sign Up

diff --git a/src/client/src/lib/components/authentication/+SignUpForm.svelte b/src/client/src/lib/components/universal/auth/+SignUpForm.svelte similarity index 93% rename from src/client/src/lib/components/authentication/+SignUpForm.svelte rename to src/client/src/lib/components/universal/auth/+SignUpForm.svelte index 9bb9827a..4e8c75a9 100644 --- a/src/client/src/lib/components/authentication/+SignUpForm.svelte +++ b/src/client/src/lib/components/universal/auth/+SignUpForm.svelte @@ -5,7 +5,8 @@ import Google from '$lib/images/google.svg'; import { Input, Label, Button, Checkbox, A } from 'flowbite-svelte'; - import { signUp } from '../../../services/auth'; + import { signUp } from '$lib/services/auth'; + import { user_details } from '$lib/store'; function storeAccessToken(token: string): void { localStorage.setItem('accessToken', token); @@ -31,13 +32,17 @@ //creates user but does not redirect to home page try { const response = await signUp(name, surname, email, image, password); + user_details.set(response); + + const details = $user_details; + console.log(details); console.log('Response:', response); if (response && response.accessToken) { storeAccessToken(response.accessToken); - goto('/'); } + goto('/student'); } catch (error) { console.error('Sign-up error:', error); alert('Sign-up failed'); @@ -102,7 +107,7 @@

Already have an account?{' '} - Sign In + Sign In

diff --git a/src/client/src/lib/components/utils/+SideBar.svelte b/src/client/src/lib/components/utils/+SideBar.svelte deleted file mode 100644 index 39a5f1e2..00000000 --- a/src/client/src/lib/components/utils/+SideBar.svelte +++ /dev/null @@ -1,99 +0,0 @@ - - - diff --git a/src/client/src/lib/components/utils/+TopBar.svelte b/src/client/src/lib/components/utils/+TopBar.svelte new file mode 100644 index 00000000..49278561 --- /dev/null +++ b/src/client/src/lib/components/utils/+TopBar.svelte @@ -0,0 +1,37 @@ + + + + +
+ + +
+
Eugene Mpande
+
u21573558
+
+
+ + + Eugene Mpande + u21573558@tuks.co.za + + Profile + + Sign out + +
diff --git a/src/client/src/lib/components/utils/admin/+SideBar.svelte b/src/client/src/lib/components/utils/admin/+SideBar.svelte new file mode 100644 index 00000000..01b3b57a --- /dev/null +++ b/src/client/src/lib/components/utils/admin/+SideBar.svelte @@ -0,0 +1,89 @@ + + + diff --git a/src/client/src/lib/components/utils/lecturer/+FilesCard.svelte b/src/client/src/lib/components/utils/lecturer/+FilesCard.svelte new file mode 100644 index 00000000..8772ddf9 --- /dev/null +++ b/src/client/src/lib/components/utils/lecturer/+FilesCard.svelte @@ -0,0 +1,32 @@ + + +
+

Study Material Uploads

+ {#each files as file} +
+ +

{file.name}

+
+ {/each} +
+ +
+
diff --git a/src/client/src/lib/components/utils/lecturer/+ObjectCard.svelte b/src/client/src/lib/components/utils/lecturer/+ObjectCard.svelte new file mode 100644 index 00000000..2359097b --- /dev/null +++ b/src/client/src/lib/components/utils/lecturer/+ObjectCard.svelte @@ -0,0 +1,32 @@ + + +
+

Object Uploads

+ {#each files as file} +
+ +

{file.name}

+
+ {/each} +
+ +
+
diff --git a/src/client/src/lib/components/utils/lecturer/+SideBar.svelte b/src/client/src/lib/components/utils/lecturer/+SideBar.svelte new file mode 100644 index 00000000..54332a5d --- /dev/null +++ b/src/client/src/lib/components/utils/lecturer/+SideBar.svelte @@ -0,0 +1,68 @@ + + + diff --git a/src/client/src/lib/components/utils/student/+HomeCard.svelte b/src/client/src/lib/components/utils/student/+HomeCard.svelte new file mode 100644 index 00000000..5769433a --- /dev/null +++ b/src/client/src/lib/components/utils/student/+HomeCard.svelte @@ -0,0 +1,24 @@ + + + +
+ {module_name} +
+ +
diff --git a/src/client/src/lib/components/utils/student/+ModuleSideBar.svelte b/src/client/src/lib/components/utils/student/+ModuleSideBar.svelte new file mode 100644 index 00000000..3e771980 --- /dev/null +++ b/src/client/src/lib/components/utils/student/+ModuleSideBar.svelte @@ -0,0 +1,62 @@ + + + diff --git a/src/client/src/lib/components/utils/student/+SideBar.svelte b/src/client/src/lib/components/utils/student/+SideBar.svelte new file mode 100644 index 00000000..a728d54a --- /dev/null +++ b/src/client/src/lib/components/utils/student/+SideBar.svelte @@ -0,0 +1,56 @@ + + + diff --git a/src/client/src/lib/components/utils/universal/+Breadcrumbs.svelte b/src/client/src/lib/components/utils/universal/+Breadcrumbs.svelte new file mode 100644 index 00000000..be32b788 --- /dev/null +++ b/src/client/src/lib/components/utils/universal/+Breadcrumbs.svelte @@ -0,0 +1,34 @@ + + + + Home + {#each breadcrumbItems as item} + {item.name} + {/each} + diff --git a/src/client/src/lib/components/utils/universal/cards/+AnnCard.svelte b/src/client/src/lib/components/utils/universal/cards/+AnnCard.svelte new file mode 100644 index 00000000..8a95e810 --- /dev/null +++ b/src/client/src/lib/components/utils/universal/cards/+AnnCard.svelte @@ -0,0 +1,58 @@ + + +
+
+ {heading} + +
+

{announcement}

+
+
+
+ + + + {date} +
+
+
+
diff --git a/src/client/src/lib/components/utils/universal/cards/+StudyCard.svelte b/src/client/src/lib/components/utils/universal/cards/+StudyCard.svelte new file mode 100644 index 00000000..c58d14d1 --- /dev/null +++ b/src/client/src/lib/components/utils/universal/cards/+StudyCard.svelte @@ -0,0 +1,34 @@ + + +
+ PDF preview +
+

+ {title} +

+

+ {description} +

+ +
+
diff --git a/src/client/src/lib/files/study-notes-one.pdf b/src/client/src/lib/files/study-notes-one.pdf new file mode 100644 index 00000000..e40f7e4d Binary files /dev/null and b/src/client/src/lib/files/study-notes-one.pdf differ diff --git a/src/client/src/lib/files/study-notes-three.pdf b/src/client/src/lib/files/study-notes-three.pdf new file mode 100644 index 00000000..725a073b Binary files /dev/null and b/src/client/src/lib/files/study-notes-three.pdf differ diff --git a/src/client/src/lib/files/study-notes-two.pdf b/src/client/src/lib/files/study-notes-two.pdf new file mode 100644 index 00000000..94d94779 Binary files /dev/null and b/src/client/src/lib/files/study-notes-two.pdf differ diff --git a/src/client/src/lib/images/pdf-cover.svg b/src/client/src/lib/images/pdf-cover.svg new file mode 100644 index 00000000..53e5d184 --- /dev/null +++ b/src/client/src/lib/images/pdf-cover.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/client/src/lib/images/random-image.avif b/src/client/src/lib/images/random-image.avif new file mode 100644 index 00000000..eb7b253a Binary files /dev/null and b/src/client/src/lib/images/random-image.avif differ diff --git a/src/client/src/services/auth.ts b/src/client/src/lib/services/auth.ts similarity index 96% rename from src/client/src/services/auth.ts rename to src/client/src/lib/services/auth.ts index 9811e65d..7c31cef6 100644 --- a/src/client/src/services/auth.ts +++ b/src/client/src/lib/services/auth.ts @@ -9,6 +9,7 @@ export async function signIn(username: string, password: string): Promise { return response.data; } catch (error) { + console.log(error); throw new Error('Sign-in failed'); } } diff --git a/src/client/src/services/orgs.ts b/src/client/src/lib/services/orgs.ts similarity index 100% rename from src/client/src/services/orgs.ts rename to src/client/src/lib/services/orgs.ts diff --git a/src/client/src/services/users.ts b/src/client/src/lib/services/users.ts similarity index 100% rename from src/client/src/services/users.ts rename to src/client/src/lib/services/users.ts diff --git a/src/client/src/lib/stores/store.ts b/src/client/src/lib/store/index.ts similarity index 82% rename from src/client/src/lib/stores/store.ts rename to src/client/src/lib/store/index.ts index 8c9830c7..ca5a5939 100644 --- a/src/client/src/lib/stores/store.ts +++ b/src/client/src/lib/store/index.ts @@ -12,10 +12,17 @@ export const lessons = writable([ ]); export const organisationName = writable('Organisation'); + export const lecChange = writable('change'); export const stuChange = writable('change'); export const admChange = writable('change'); +export const user = writable('eugene'); +export const email = writable('eugene.mpande@tuks.co.za'); +export const file = writable(''); +export const module = writable(''); + +export const user_details = writable({}); export const username = 'e241198014'; export const userInfo = writable({ diff --git a/src/client/src/routes/+layout.svelte b/src/client/src/routes/+layout.svelte index 6328e459..5157c9f1 100644 --- a/src/client/src/routes/+layout.svelte +++ b/src/client/src/routes/+layout.svelte @@ -1,14 +1,9 @@
-
- - diff --git a/src/client/src/routes/+page.svelte b/src/client/src/routes/+page.svelte index a6be6e4d..6e6cda37 100644 --- a/src/client/src/routes/+page.svelte +++ b/src/client/src/routes/+page.svelte @@ -1,49 +1,10 @@
- -
- -
- - -
- - -
- -
-
- - - -
-
-
- - -
-
-

Degree Dashboard

-
- -
-
+
diff --git a/src/client/src/routes/activities/+page.svelte b/src/client/src/routes/activities/+page.svelte deleted file mode 100644 index 219f6c15..00000000 --- a/src/client/src/routes/activities/+page.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-
-
- -
-
- -
-
-
diff --git a/src/client/src/routes/admin/+page.svelte b/src/client/src/routes/admin/+page.svelte new file mode 100644 index 00000000..4d28ea07 --- /dev/null +++ b/src/client/src/routes/admin/+page.svelte @@ -0,0 +1,20 @@ + + +
+
+ +
+
+ +
+ +
+
+
diff --git a/src/client/src/routes/admin/+page.ts b/src/client/src/routes/admin/+page.ts new file mode 100644 index 00000000..7bd59715 --- /dev/null +++ b/src/client/src/routes/admin/+page.ts @@ -0,0 +1,75 @@ +/** @type {import('./$types').PageLoad} */ + +export function load() { + return { + degrees: [ + { + program: 'BEng Mechanical Engineering', + duration: '4 years', + level: 'Undergraduate', + link: '/' + }, + { + program: 'BEng Electrical Engineering', + duration: '4 years', + level: 'Undergraduate', + link: '/' + }, + { + program: 'BEng Civil Engineering', + duration: '4 years', + level: 'Undergraduate', + link: '/' + }, + { + program: 'BSc Computer Science', + duration: '3 years', + level: 'Undergraduate', + link: '/degree' + }, + { + program: 'BEng Chemical Engineering', + duration: '4 years', + level: 'Undergraduate', + link: '/' + }, + { + program: 'BSc Information Technology', + duration: '3 years', + level: 'Undergraduate', + link: '/' + }, + { + program: 'MEng Industrial Engineering', + duration: '2 years', + level: 'Postgraduate', + link: '/' + }, + { + program: 'MEng Mechanical Engineering', + duration: '2 years', + level: 'Postgraduate', + link: '/' + }, + { + program: 'MEng Electrical Engineering', + duration: '2 years', + level: 'Postgraduate', + link: '/' + }, + { + program: 'MSc Computer Science', + duration: '2 years', + level: 'Postgraduate', + link: '/' + }, + { program: 'PhD Civil Engineering', duration: '3-5 years', level: 'Doctoral', link: '/' }, + { + program: 'PhD Information Technology', + duration: '3-5 years', + level: 'Doctoral', + link: '/' + } + ] + }; +} diff --git a/src/client/src/routes/admin/activities/+page.svelte b/src/client/src/routes/admin/activities/+page.svelte new file mode 100644 index 00000000..f48185c2 --- /dev/null +++ b/src/client/src/routes/admin/activities/+page.svelte @@ -0,0 +1,19 @@ + + +
+
+
+ +
+
+ +
+ +
+
+
+
diff --git a/src/client/src/routes/activities/+page.ts b/src/client/src/routes/admin/activities/+page.ts similarity index 100% rename from src/client/src/routes/activities/+page.ts rename to src/client/src/routes/admin/activities/+page.ts diff --git a/src/client/src/routes/admin/admins/+page.svelte b/src/client/src/routes/admin/admins/+page.svelte new file mode 100644 index 00000000..e2b38800 --- /dev/null +++ b/src/client/src/routes/admin/admins/+page.svelte @@ -0,0 +1,19 @@ + + +
+
+
+ +
+
+ +
+ +
+
+
+
diff --git a/src/client/src/routes/admins/+page.ts b/src/client/src/routes/admin/admins/+page.ts similarity index 100% rename from src/client/src/routes/admins/+page.ts rename to src/client/src/routes/admin/admins/+page.ts diff --git a/src/client/src/routes/admin/announcements/+page.svelte b/src/client/src/routes/admin/announcements/+page.svelte new file mode 100644 index 00000000..b2d8b9e9 --- /dev/null +++ b/src/client/src/routes/admin/announcements/+page.svelte @@ -0,0 +1,20 @@ + + +
+
+
+ +
+
+ + +
+
+
diff --git a/src/client/src/routes/admin/announcements/+page.ts b/src/client/src/routes/admin/announcements/+page.ts new file mode 100644 index 00000000..afb68e9c --- /dev/null +++ b/src/client/src/routes/admin/announcements/+page.ts @@ -0,0 +1,26 @@ +/** @type {import('./$types').PageLoad} */ + +export function load() { + return { + announcements: [ + { + date: '10 Oct', + heading: 'Campus Safety Drill', + announcement: + 'A campus-wide safety drill will be conducted on October 15th at 10 AM. All students and staff are required to participate. Please review the safety procedures and follow instructions during the drill.' + }, + { + date: '12 Oct', + heading: 'New Library Hours', + announcement: + 'Starting October 20th, the university library will have extended hours. It will now be open from 8 AM to 12 AM, Monday through Friday, and 9 AM to 10 PM on weekends.' + }, + { + date: '15 Oct', + heading: 'Guest Lecture Series', + announcement: + 'We are excited to announce a new guest lecture series starting October 25th. Prominent speakers from various fields will be sharing their insights. All students and faculty are encouraged to attend.' + } + ] + }; +} diff --git a/src/client/src/routes/degrees.ts b/src/client/src/routes/admin/degrees.ts similarity index 100% rename from src/client/src/routes/degrees.ts rename to src/client/src/routes/admin/degrees.ts diff --git a/src/client/src/routes/lecturers/+page.server.js b/src/client/src/routes/admin/lecturers/+page.server.js similarity index 100% rename from src/client/src/routes/lecturers/+page.server.js rename to src/client/src/routes/admin/lecturers/+page.server.js diff --git a/src/client/src/routes/admin/lecturers/+page.svelte b/src/client/src/routes/admin/lecturers/+page.svelte new file mode 100644 index 00000000..fa8bab60 --- /dev/null +++ b/src/client/src/routes/admin/lecturers/+page.svelte @@ -0,0 +1,19 @@ + + +
+
+
+ +
+
+ +
+ +
+
+
+
diff --git a/src/client/src/routes/announcements/+page.ts b/src/client/src/routes/admin/lecturers/+page.ts similarity index 100% rename from src/client/src/routes/announcements/+page.ts rename to src/client/src/routes/admin/lecturers/+page.ts diff --git a/src/client/src/routes/organisation/+page.server.js b/src/client/src/routes/admin/organisation/+page.server.js similarity index 100% rename from src/client/src/routes/organisation/+page.server.js rename to src/client/src/routes/admin/organisation/+page.server.js diff --git a/src/client/src/routes/admin/organisation/+page.svelte b/src/client/src/routes/admin/organisation/+page.svelte new file mode 100644 index 00000000..31e27b36 --- /dev/null +++ b/src/client/src/routes/admin/organisation/+page.svelte @@ -0,0 +1,19 @@ + + +
+
+
+ +
+
+ +
+ +
+
+
+
diff --git a/src/client/src/routes/lecturers/+page.ts b/src/client/src/routes/admin/organisation/+page.ts similarity index 100% rename from src/client/src/routes/lecturers/+page.ts rename to src/client/src/routes/admin/organisation/+page.ts diff --git a/src/client/src/routes/admin/settings/+page.svelte b/src/client/src/routes/admin/settings/+page.svelte new file mode 100644 index 00000000..6a89416f --- /dev/null +++ b/src/client/src/routes/admin/settings/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/organisation/+page.ts b/src/client/src/routes/admin/settings/+page.ts similarity index 100% rename from src/client/src/routes/organisation/+page.ts rename to src/client/src/routes/admin/settings/+page.ts diff --git a/src/client/src/routes/admin/students/+page.svelte b/src/client/src/routes/admin/students/+page.svelte new file mode 100644 index 00000000..43fd074b --- /dev/null +++ b/src/client/src/routes/admin/students/+page.svelte @@ -0,0 +1,19 @@ + + +
+
+
+ +
+
+ +
+ +
+
+
+
diff --git a/src/client/src/routes/profile/+page.ts b/src/client/src/routes/admin/students/+page.ts similarity index 100% rename from src/client/src/routes/profile/+page.ts rename to src/client/src/routes/admin/students/+page.ts diff --git a/src/client/src/routes/admin/workspaces/+page.server.js b/src/client/src/routes/admin/workspaces/+page.server.js new file mode 100644 index 00000000..53e8481f --- /dev/null +++ b/src/client/src/routes/admin/workspaces/+page.server.js @@ -0,0 +1,71 @@ +/** @type {import('./$types').Actions} */ + +// Mock add, edit, and delete functions +async function addDetails(name, email, role) { + console.log(name); + console.log(email); + console.log(role); +} + +async function editDetails(name, email, role) { + console.log(name); + console.log(email); + console.log(role); +} + +async function deleteDetails(name, email, role) { + console.log(name); + console.log(email); + console.log(role); +} + +export const actions = { + default: async ({ request }) => { + const formData = await request.formData(); + const name = formData.get('org_name'); + const email = formData.get('email'); + const role = formData.get('role'); + + console.log(name); + console.log(email); + console.log(role); + + addDetails(name, email, role); + + return { + status: 200 + }; + }, + edit: async ({ request }) => { + const formData = await request.formData(); + const name = formData.get('org_name'); + const email = formData.get('email'); + const role = formData.get('role'); + + console.log(name); + console.log(email); + console.log(role); + + editDetails(name, email, role); + + return { + status: 200 + }; + }, + delete: async ({ request }) => { + const formData = await request.formData(); + const name = formData.get('org_name'); + const email = formData.get('email'); + const role = formData.get('role'); + + console.log(name); + console.log(email); + console.log(role); + + deleteDetails(name, email, role); + + return { + status: 200 + }; + } +}; diff --git a/src/client/src/routes/admin/workspaces/+page.svelte b/src/client/src/routes/admin/workspaces/+page.svelte new file mode 100644 index 00000000..b9922bcc --- /dev/null +++ b/src/client/src/routes/admin/workspaces/+page.svelte @@ -0,0 +1,22 @@ + + +
+
+
+ +
+
+ +
+ +
+
+
+
diff --git a/src/client/src/routes/admin/workspaces/+page.ts b/src/client/src/routes/admin/workspaces/+page.ts new file mode 100644 index 00000000..e7379ee1 --- /dev/null +++ b/src/client/src/routes/admin/workspaces/+page.ts @@ -0,0 +1,20 @@ +/** @type {import('./$types').PageLoad} */ + +export function load() { + return { + workspaces: [ + { + name: 'Computer Networks' + }, + { + name: 'Artificial Intelligence' + }, + { + name: 'Programming Languages' + }, + { + name: 'Computer Graphics' + } + ] + }; +} diff --git a/src/client/src/routes/admins/+page.svelte b/src/client/src/routes/admins/+page.svelte deleted file mode 100644 index fd4eee42..00000000 --- a/src/client/src/routes/admins/+page.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-
-
- -
-
- -
-
-
diff --git a/src/client/src/routes/announcements/+page.svelte b/src/client/src/routes/announcements/+page.svelte deleted file mode 100644 index 88aff789..00000000 --- a/src/client/src/routes/announcements/+page.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-
-
- -
-
- -
-
-
diff --git a/src/client/src/routes/auth/+page.svelte b/src/client/src/routes/auth/+page.svelte new file mode 100644 index 00000000..4b3c9410 --- /dev/null +++ b/src/client/src/routes/auth/+page.svelte @@ -0,0 +1,7 @@ + diff --git a/src/client/src/routes/signin/+page.server.js b/src/client/src/routes/auth/signin/+page.server.js similarity index 100% rename from src/client/src/routes/signin/+page.server.js rename to src/client/src/routes/auth/signin/+page.server.js diff --git a/src/client/src/routes/signin/+page.svelte b/src/client/src/routes/auth/signin/+page.svelte similarity index 61% rename from src/client/src/routes/signin/+page.svelte rename to src/client/src/routes/auth/signin/+page.svelte index dcf2483d..5488a742 100644 --- a/src/client/src/routes/signin/+page.svelte +++ b/src/client/src/routes/auth/signin/+page.svelte @@ -1,6 +1,6 @@
diff --git a/src/client/src/routes/settings/+page.ts b/src/client/src/routes/auth/signin/+page.ts similarity index 100% rename from src/client/src/routes/settings/+page.ts rename to src/client/src/routes/auth/signin/+page.ts diff --git a/src/client/src/routes/signup/+page.svelte b/src/client/src/routes/auth/signup/+page.svelte similarity index 65% rename from src/client/src/routes/signup/+page.svelte rename to src/client/src/routes/auth/signup/+page.svelte index 04d9c222..2e1e114e 100644 --- a/src/client/src/routes/signup/+page.svelte +++ b/src/client/src/routes/auth/signup/+page.svelte @@ -1,6 +1,6 @@
diff --git a/src/client/src/routes/signin/+page.ts b/src/client/src/routes/auth/signup/+page.ts similarity index 100% rename from src/client/src/routes/signin/+page.ts rename to src/client/src/routes/auth/signup/+page.ts diff --git a/src/client/src/routes/degree/+page.svelte b/src/client/src/routes/degree/+page.svelte deleted file mode 100644 index 25694c78..00000000 --- a/src/client/src/routes/degree/+page.svelte +++ /dev/null @@ -1,51 +0,0 @@ - - -
- -
- -
- - -
- - -
- -
-
- - - -
-
-
- - -
-

University of Pretoria

-

Computer Science

-
- -
- -
-
-
diff --git a/src/client/src/routes/degree/+page.ts b/src/client/src/routes/degree/+page.ts deleted file mode 100644 index 189f71e2..00000000 --- a/src/client/src/routes/degree/+page.ts +++ /dev/null @@ -1 +0,0 @@ -export const prerender = true; diff --git a/src/client/src/routes/degree/workspaces.ts b/src/client/src/routes/degree/workspaces.ts deleted file mode 100644 index be40198f..00000000 --- a/src/client/src/routes/degree/workspaces.ts +++ /dev/null @@ -1,30 +0,0 @@ -import COS333Logo from '$lib/images/COS333_logo.png'; -import COS314Logo from '$lib/images/COS314_logo.png'; -import COS344Logo from '$lib/images/COS344_logo.png'; -import COS332Logo from '$lib/images/COS332_logo.png'; - -//This file mock stores the mock data needed to display the workspaces on the home page. -//The information is stored as an array of JSON objects -//Each workspace has a title, a description and an image. -export const workspaces = [ - { - title: 'COS 333', - description: 'Programming languages', - image: COS333Logo - }, - { - title: 'COS 314', - description: 'Artificial Intelligence', - image: COS314Logo - }, - { - title: 'COS 344', - description: 'Computer Graphics', - image: COS344Logo - }, - { - title: 'COS 332', - description: 'Networking', - image: COS332Logo - } -]; diff --git a/src/client/src/routes/lecturer/+page.svelte b/src/client/src/routes/lecturer/+page.svelte new file mode 100644 index 00000000..f5f8f0c8 --- /dev/null +++ b/src/client/src/routes/lecturer/+page.svelte @@ -0,0 +1,18 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/lecturer/+page.ts b/src/client/src/routes/lecturer/+page.ts new file mode 100644 index 00000000..afb68e9c --- /dev/null +++ b/src/client/src/routes/lecturer/+page.ts @@ -0,0 +1,26 @@ +/** @type {import('./$types').PageLoad} */ + +export function load() { + return { + announcements: [ + { + date: '10 Oct', + heading: 'Campus Safety Drill', + announcement: + 'A campus-wide safety drill will be conducted on October 15th at 10 AM. All students and staff are required to participate. Please review the safety procedures and follow instructions during the drill.' + }, + { + date: '12 Oct', + heading: 'New Library Hours', + announcement: + 'Starting October 20th, the university library will have extended hours. It will now be open from 8 AM to 12 AM, Monday through Friday, and 9 AM to 10 PM on weekends.' + }, + { + date: '15 Oct', + heading: 'Guest Lecture Series', + announcement: + 'We are excited to announce a new guest lecture series starting October 25th. Prominent speakers from various fields will be sharing their insights. All students and faculty are encouraged to attend.' + } + ] + }; +} diff --git a/src/client/src/routes/lecturer/activities/+page.svelte b/src/client/src/routes/lecturer/activities/+page.svelte new file mode 100644 index 00000000..6bd262eb --- /dev/null +++ b/src/client/src/routes/lecturer/activities/+page.svelte @@ -0,0 +1,17 @@ + + +
+
+ +
+ +
+ +
+
+
+
diff --git a/src/client/src/routes/signup/+page.ts b/src/client/src/routes/lecturer/activities/+page.ts similarity index 100% rename from src/client/src/routes/signup/+page.ts rename to src/client/src/routes/lecturer/activities/+page.ts diff --git a/src/client/src/routes/lecturer/classroom/+page.svelte b/src/client/src/routes/lecturer/classroom/+page.svelte new file mode 100644 index 00000000..b617f4a7 --- /dev/null +++ b/src/client/src/routes/lecturer/classroom/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/students/+page.ts b/src/client/src/routes/lecturer/classroom/+page.ts similarity index 100% rename from src/client/src/routes/students/+page.ts rename to src/client/src/routes/lecturer/classroom/+page.ts diff --git a/src/client/src/routes/lessons/[id]/+page.server.ts b/src/client/src/routes/lecturer/classroom/[id]/+page.server.ts similarity index 94% rename from src/client/src/routes/lessons/[id]/+page.server.ts rename to src/client/src/routes/lecturer/classroom/[id]/+page.server.ts index e213eccb..abff8514 100644 --- a/src/client/src/routes/lessons/[id]/+page.server.ts +++ b/src/client/src/routes/lecturer/classroom/[id]/+page.server.ts @@ -1,4 +1,4 @@ -import { username } from '$lib/stores/store'; +import { username } from '$lib/store'; import { StreamClient } from '@stream-io/node-sdk'; import { STREAM_API_KEY, STREAM_SECRET_KEY } from '$env/static/private'; diff --git a/src/client/src/routes/lessons/[id]/+page.svelte b/src/client/src/routes/lecturer/classroom/[id]/+page.svelte similarity index 95% rename from src/client/src/routes/lessons/[id]/+page.svelte rename to src/client/src/routes/lecturer/classroom/[id]/+page.svelte index db77b271..dd1ee8ac 100644 --- a/src/client/src/routes/lessons/[id]/+page.svelte +++ b/src/client/src/routes/lecturer/classroom/[id]/+page.svelte @@ -3,7 +3,7 @@ import { onMount, onDestroy } from 'svelte'; import { StreamVideoClient, type Call } from '@stream-io/video-client'; - import { userInfo } from '$lib/stores/store'; + import { userInfo } from '$lib/store'; import Container from '$lib/components/lesson/Container.svelte'; import ControlPanel from '$lib/components/lesson/ControlPanel.svelte'; diff --git a/src/client/src/routes/lecturer/dashboard/+page.server.ts b/src/client/src/routes/lecturer/dashboard/+page.server.ts new file mode 100644 index 00000000..68c84e5c --- /dev/null +++ b/src/client/src/routes/lecturer/dashboard/+page.server.ts @@ -0,0 +1,123 @@ +/** @type {import('./$types').Actions} */ +import axios from 'axios'; +import { webcrypto as crypto } from 'crypto'; +import { FILE_UPLOAD_API_KEY, FILE_UPLOAD_URL } from '$env/static/private'; + +function generateFileName(originalFileName: string): string { + // Split the original filename to get the base name and extension + const lastDotIndex = originalFileName.lastIndexOf('.'); + if (lastDotIndex === -1) { + throw new Error('Filename does not have an extension'); + } + + const extension = originalFileName.substring(lastDotIndex); + + // 4-byte timestamp + const timestamp = Math.floor(Date.now() / 1000); + const timestampHex = timestamp.toString(16).padStart(8, '0'); + + // 5-byte random value + const randomValue = crypto.getRandomValues(new Uint8Array(5)); + const randomValueHex = Array.from(randomValue) + .map((b) => b.toString(16).padStart(2, '0')) + .join(''); + + // 3-byte counter, initialized to a random value + const counter = Math.floor(Math.random() * 0xffffff); + const counterHex = counter.toString(16).padStart(6, '0'); + + // Combine to form the ObjectId + const objectId = timestampHex + randomValueHex + counterHex; + + // Combine objectId and extension to form the final filename + return `${objectId}${extension}`; +} + +async function fileToBase64(file: File): Promise { + const buffer = await file.arrayBuffer(); + const base64 = Buffer.from(buffer).toString('base64'); + return base64; +} + +async function uploadfileToS3(file: File, filename: string, contentType: string) { + try { + const base64file: string = await fileToBase64(file); + + const body = { + file: base64file, + filename: filename, + contentType: contentType + }; + + const headers = { + 'Content-Type': 'application/json', + 'x-api-key': FILE_UPLOAD_API_KEY + }; + + const response = await axios.post(FILE_UPLOAD_URL, body, { headers }); + + // Parse the response body JSON + const responseBody = JSON.parse(response.data.body); + + // Check if response includes fileUrl + if (responseBody.fileUrl) { + console.log('File uploaded successfully'); + return responseBody; // Return the entire response body if needed + } else { + throw new Error('File upload failed: No fileUrl in response'); + } + } catch (error) { + console.log('Error during file upload:', error); + throw error; + } +} + +export const actions = { + upload: async ({ request }) => { + try { + const formData = await request.formData(); + + // Get the form field values + const title = formData.get('title'); + const description = formData.get('description'); + let file_url; + const file = formData.get('file'); + + // Log the extracted data + console.log('Title:', title); + console.log('Description:', description); + + // Ensure the file is present + if (!file) { + throw new Error('File is required'); + } + + if (file instanceof File) { + const filename = generateFileName(file.name); + const response_data = await uploadfileToS3(file, filename, file.type); + file_url = response_data.fileUrl; + console.log('File URL:', file_url); + } else { + console.log('No file received'); + } + } catch (error) { + console.error('Error during file upload:', error); + return { + error: error + }; + } + }, + + delete: async ({ request }) => { + try { + const formData = await request.formData(); + //TODO: create the delete logic + return formData; + } catch (error) { + console.error('Error during file deletion:', error); + return { + error: error + }; + } + } +}; diff --git a/src/client/src/routes/lecturer/dashboard/+page.svelte b/src/client/src/routes/lecturer/dashboard/+page.svelte new file mode 100644 index 00000000..ae0ee09e --- /dev/null +++ b/src/client/src/routes/lecturer/dashboard/+page.svelte @@ -0,0 +1,17 @@ + + +
+
+ +
+ +
+ +
+
+
+
diff --git a/src/client/src/routes/lecturer/dashboard/+page.ts b/src/client/src/routes/lecturer/dashboard/+page.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/client/src/routes/lecturer/profile/+page.svelte b/src/client/src/routes/lecturer/profile/+page.svelte new file mode 100644 index 00000000..160aface --- /dev/null +++ b/src/client/src/routes/lecturer/profile/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/lecturer/profile/+page.ts b/src/client/src/routes/lecturer/profile/+page.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/client/src/routes/lecturer/sandbox/+page.svelte b/src/client/src/routes/lecturer/sandbox/+page.svelte new file mode 100644 index 00000000..78779247 --- /dev/null +++ b/src/client/src/routes/lecturer/sandbox/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/lecturer/sandbox/+page.ts b/src/client/src/routes/lecturer/sandbox/+page.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/client/src/routes/lecturers/+page.svelte b/src/client/src/routes/lecturers/+page.svelte deleted file mode 100644 index d79e9043..00000000 --- a/src/client/src/routes/lecturers/+page.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-
-
- -
-
- -
-
-
diff --git a/src/client/src/routes/lessons/+page.svelte b/src/client/src/routes/lessons/+page.svelte deleted file mode 100644 index 1eea4b75..00000000 --- a/src/client/src/routes/lessons/+page.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-
-
- -
-
- -
-
-
diff --git a/src/client/src/routes/organisation/+page.svelte b/src/client/src/routes/organisation/+page.svelte deleted file mode 100644 index 820bf428..00000000 --- a/src/client/src/routes/organisation/+page.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-
-
- -
-
- -
-
-
diff --git a/src/client/src/routes/profile/+page.svelte b/src/client/src/routes/profile/+page.svelte deleted file mode 100644 index 28f7e513..00000000 --- a/src/client/src/routes/profile/+page.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-
-
- -
-
- -
-
-
diff --git a/src/client/src/routes/settings/+page.svelte b/src/client/src/routes/settings/+page.svelte deleted file mode 100644 index 88aff789..00000000 --- a/src/client/src/routes/settings/+page.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-
-
- -
-
- -
-
-
diff --git a/src/client/src/routes/student/+page.svelte b/src/client/src/routes/student/+page.svelte new file mode 100644 index 00000000..bc7de5a0 --- /dev/null +++ b/src/client/src/routes/student/+page.svelte @@ -0,0 +1,18 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/student/+page.ts b/src/client/src/routes/student/+page.ts new file mode 100644 index 00000000..8078dd82 --- /dev/null +++ b/src/client/src/routes/student/+page.ts @@ -0,0 +1,24 @@ +/** @type {import('./$types').PageLoad} */ +import { get } from 'svelte/store'; +import { user_details } from '$lib/store'; + +export function load() { + const details = get(user_details); + console.log('User details:', details); + return { + modules: [ + { + module_name: 'Computer Networks', + module_id: '123456789' + }, + { + module_name: 'Computer Graphics', + module_id: '789123456' + }, + { + module_name: 'Programming Languages', + module_id: '789456123' + } + ] + }; +} diff --git a/src/client/src/routes/student/activities/+page.svelte b/src/client/src/routes/student/activities/+page.svelte new file mode 100644 index 00000000..59ab73a3 --- /dev/null +++ b/src/client/src/routes/student/activities/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/student/activities/+page.ts b/src/client/src/routes/student/activities/+page.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/client/src/routes/student/grades/+page.svelte b/src/client/src/routes/student/grades/+page.svelte new file mode 100644 index 00000000..59ab73a3 --- /dev/null +++ b/src/client/src/routes/student/grades/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/student/grades/+page.ts b/src/client/src/routes/student/grades/+page.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/client/src/routes/student/module/+page.svelte b/src/client/src/routes/student/module/+page.svelte new file mode 100644 index 00000000..bf536ec4 --- /dev/null +++ b/src/client/src/routes/student/module/+page.svelte @@ -0,0 +1,18 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/student/module/+page.ts b/src/client/src/routes/student/module/+page.ts new file mode 100644 index 00000000..afb68e9c --- /dev/null +++ b/src/client/src/routes/student/module/+page.ts @@ -0,0 +1,26 @@ +/** @type {import('./$types').PageLoad} */ + +export function load() { + return { + announcements: [ + { + date: '10 Oct', + heading: 'Campus Safety Drill', + announcement: + 'A campus-wide safety drill will be conducted on October 15th at 10 AM. All students and staff are required to participate. Please review the safety procedures and follow instructions during the drill.' + }, + { + date: '12 Oct', + heading: 'New Library Hours', + announcement: + 'Starting October 20th, the university library will have extended hours. It will now be open from 8 AM to 12 AM, Monday through Friday, and 9 AM to 10 PM on weekends.' + }, + { + date: '15 Oct', + heading: 'Guest Lecture Series', + announcement: + 'We are excited to announce a new guest lecture series starting October 25th. Prominent speakers from various fields will be sharing their insights. All students and faculty are encouraged to attend.' + } + ] + }; +} diff --git a/src/client/src/routes/student/module/announcements/+page.svelte b/src/client/src/routes/student/module/announcements/+page.svelte new file mode 100644 index 00000000..8b916ff1 --- /dev/null +++ b/src/client/src/routes/student/module/announcements/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/student/module/announcements/+page.ts b/src/client/src/routes/student/module/announcements/+page.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/client/src/routes/student/module/classroom/+page.svelte b/src/client/src/routes/student/module/classroom/+page.svelte new file mode 100644 index 00000000..29dd5cf9 --- /dev/null +++ b/src/client/src/routes/student/module/classroom/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/student/module/classroom/+page.ts b/src/client/src/routes/student/module/classroom/+page.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/client/src/routes/student/module/classroom/[id]/+page.server.ts b/src/client/src/routes/student/module/classroom/[id]/+page.server.ts new file mode 100644 index 00000000..abff8514 --- /dev/null +++ b/src/client/src/routes/student/module/classroom/[id]/+page.server.ts @@ -0,0 +1,23 @@ +import { username } from '$lib/store'; +import { StreamClient } from '@stream-io/node-sdk'; + +import { STREAM_API_KEY, STREAM_SECRET_KEY } from '$env/static/private'; + +export const load = async () => { + if (!username) throw new Error('User is not authenticated'); + if (!STREAM_API_KEY) throw new Error('Stream API key secret is missing'); + if (!STREAM_SECRET_KEY) throw new Error('Stream API secret is missing'); + + const streamClient = new StreamClient(STREAM_API_KEY, STREAM_SECRET_KEY); + + const tokenProvider = async () => { + const expirationTime = Math.floor(Date.now() / 1000) + 3600; + const issuedAt = Math.floor(Date.now() / 1000) - 60; + const token = streamClient.createToken(username, expirationTime, issuedAt); + return token; + }; + + const token = await tokenProvider(); + + return { apiKey: STREAM_API_KEY, token }; +}; diff --git a/src/client/src/routes/student/module/classroom/[id]/+page.svelte b/src/client/src/routes/student/module/classroom/[id]/+page.svelte new file mode 100644 index 00000000..dd1ee8ac --- /dev/null +++ b/src/client/src/routes/student/module/classroom/[id]/+page.svelte @@ -0,0 +1,41 @@ + + +
+ {#if call} + + + {/if} +
diff --git a/src/client/src/routes/student/module/sandbox/+page.svelte b/src/client/src/routes/student/module/sandbox/+page.svelte new file mode 100644 index 00000000..78779247 --- /dev/null +++ b/src/client/src/routes/student/module/sandbox/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/student/module/sandbox/+page.ts b/src/client/src/routes/student/module/sandbox/+page.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/client/src/routes/student/module/study/+page.svelte b/src/client/src/routes/student/module/study/+page.svelte new file mode 100644 index 00000000..8f1ce0de --- /dev/null +++ b/src/client/src/routes/student/module/study/+page.svelte @@ -0,0 +1,18 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/student/module/study/+page.ts b/src/client/src/routes/student/module/study/+page.ts new file mode 100644 index 00000000..e5cd084e --- /dev/null +++ b/src/client/src/routes/student/module/study/+page.ts @@ -0,0 +1,29 @@ +/** @type {import('./$types').PageLoad} */ +import one from '$lib/files/study-notes-one.pdf'; +import two from '$lib/files/study-notes-two.pdf'; +import three from '$lib/files/study-notes-three.pdf'; + +export function load() { + return { + materials: [ + { + title: 'Introduction to Computer Networks', + description: + 'A foundational course covering the basics of computer networking, including network models, protocols, and architectures. (COS 332)', + link: one + }, + { + title: 'Advanced Networking Concepts', + description: + 'An in-depth exploration of advanced networking topics such as routing algorithms, network security, and wireless networks. (COS 332)', + link: two + }, + { + title: 'Practical Network Design', + description: + 'A hands-on course focusing on the design and implementation of network solutions for real-world applications. (COS 332)', + link: three + } + ] + }; +} diff --git a/src/client/src/routes/student/module/study/material/+page.svelte b/src/client/src/routes/student/module/study/material/+page.svelte new file mode 100644 index 00000000..f8c88e95 --- /dev/null +++ b/src/client/src/routes/student/module/study/material/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/student/module/study/material/+page.ts b/src/client/src/routes/student/module/study/material/+page.ts new file mode 100644 index 00000000..5811cd0b --- /dev/null +++ b/src/client/src/routes/student/module/study/material/+page.ts @@ -0,0 +1,23 @@ +/** @type {import('./$types').PageLoad} */ + +export function load() { + return { + materials: [ + { + title: 'Introduction to Computer Networks', + description: + 'A foundational course covering the basics of computer networking, including network models, protocols, and architectures. (COS 332)' + }, + { + title: 'Advanced Networking Concepts', + description: + 'An in-depth exploration of advanced networking topics such as routing algorithms, network security, and wireless networks. (COS 332)' + }, + { + title: 'Practical Network Design', + description: + 'A hands-on course focusing on the design and implementation of network solutions for real-world applications. (COS 332)' + } + ] + }; +} diff --git a/src/client/src/routes/student/profile/+page.svelte b/src/client/src/routes/student/profile/+page.svelte new file mode 100644 index 00000000..59ab73a3 --- /dev/null +++ b/src/client/src/routes/student/profile/+page.svelte @@ -0,0 +1,15 @@ + + +
+
+ +
+ + +
+
+
diff --git a/src/client/src/routes/student/profile/+page.ts b/src/client/src/routes/student/profile/+page.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/client/src/routes/students/+page.svelte b/src/client/src/routes/students/+page.svelte deleted file mode 100644 index 6bece31a..00000000 --- a/src/client/src/routes/students/+page.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - -
-
-
- -
-
- -
-
-
diff --git a/src/client/src/testing/Activities.test.ts b/src/client/src/testing/Activities.test.ts index 329483d2..aac8c916 100644 --- a/src/client/src/testing/Activities.test.ts +++ b/src/client/src/testing/Activities.test.ts @@ -1,6 +1,6 @@ import { render } from '@testing-library/svelte'; import { expect, test } from 'vitest'; -import ActivityTimeline from '../lib/components/admin/+Activities.svelte'; +import ActivityTimeline from '../lib/components/universal/+Activities.svelte'; test('renders activities correctly', () => { const { getByText } = render(ActivityTimeline); diff --git a/src/client/static/models/cash_register_with_a_counting_machine.glb b/src/client/static/models/cash_register_with_a_counting_machine.glb new file mode 100644 index 00000000..1ac6d62a Binary files /dev/null and b/src/client/static/models/cash_register_with_a_counting_machine.glb differ