diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 0c64c67..44fb15a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,14 +8,20 @@ "name": "frontend", "version": "0.0.1", "dependencies": { + "@atlaskit/pragmatic-drag-and-drop": "^1.4.0", "@capacitor/cli": "^7.0.1", "@capacitor/core": "^7.0.1", + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/modifiers": "^9.0.0", + "@dnd-kit/sortable": "^10.0.0", "@inlang/paraglide-sveltekit": "^0.15.5", + "@svelte-plugins/datepicker": "^1.0.11", "@uppy/core": "^4.4.1", "@uppy/dashboard": "^4.3.1", "@uppy/svelte": "^4.3.0", "@uwdata/vgplot": "^0.12.2", "canvas-confetti": "^1.9.3", + "date-fns": "^4.1.0", "globe.gl": "^2.39.2", "gsap": "^3.12.7", "leaflet": "^1.9.4", @@ -24,6 +30,7 @@ "motion": "^12.0.6", "phoenix": "^1.7.18", "pikaday": "^1.8.2", + "sonner": "^1.7.3", "svelte-motion": "^0.12.2", "svelte-transitions": "^1.2.0", "three": "^0.172.0" @@ -88,6 +95,17 @@ "node": ">=6.0.0" } }, + "node_modules/@atlaskit/pragmatic-drag-and-drop": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@atlaskit/pragmatic-drag-and-drop/-/pragmatic-drag-and-drop-1.4.0.tgz", + "integrity": "sha512-qRY3PTJIcxfl/QB8Gwswz+BRvlmgAC5pB+J2hL6dkIxgqAgVwOhAamMUKsrOcFU/axG2Q7RbNs1xfoLKDuhoPg==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^3.0.0", + "raf-schd": "^4.0.3" + } + }, "node_modules/@babel/runtime": { "version": "7.26.7", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", @@ -141,6 +159,73 @@ "tslib": "^2.1.0" } }, + "node_modules/@dnd-kit/accessibility": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", + "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/core": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", + "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", + "license": "MIT", + "dependencies": { + "@dnd-kit/accessibility": "^3.1.1", + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/modifiers": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/modifiers/-/modifiers-9.0.0.tgz", + "integrity": "sha512-ybiLc66qRGuZoC20wdSSG6pDXFikui/dCNGthxv4Ndy8ylErY0N3KVxY2bgo7AWwIbxDmXDg3ylAFmnrjcbVvw==", + "license": "MIT", + "dependencies": { + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.3.0", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/sortable": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-10.0.0.tgz", + "integrity": "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==", + "license": "MIT", + "dependencies": { + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.3.0", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/utilities": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz", + "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/@duckdb/duckdb-wasm": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/@duckdb/duckdb-wasm/-/duckdb-wasm-1.29.0.tgz", @@ -1933,6 +2018,12 @@ "integrity": "sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ==", "license": "MIT" }, + "node_modules/@svelte-plugins/datepicker": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@svelte-plugins/datepicker/-/datepicker-1.0.11.tgz", + "integrity": "sha512-Tqc07QLyRkCpc3Glg6oRLTUApLtCrOh52d6vJ7L32QI17HrwvcDDjaH3LF3X1SBm3CWdMrnqfJp3xjUZmB4wzw==", + "license": "MIT" + }, "node_modules/@sveltejs/adapter-auto": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-3.3.1.tgz", @@ -3333,6 +3424,12 @@ "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==", "license": "MIT" }, + "node_modules/bind-event-listener": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bind-event-listener/-/bind-event-listener-3.0.0.tgz", + "integrity": "sha512-PJvH288AWQhKs2v9zyfYdPzlPqf5bXbGMmhmUIY9x4dAUGIWgomO771oBQNwJnMQSnUIXhKu6sgzpBRXTlvb8Q==", + "license": "MIT" + }, "node_modules/bottleneck": { "version": "2.19.5", "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", @@ -4286,6 +4383,16 @@ "node": ">=12" } }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/debug": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", @@ -7256,6 +7363,35 @@ "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", "license": "ISC" }, + "node_modules/raf-schd": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", + "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==", + "license": "MIT" + }, + "node_modules/react": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "scheduler": "^0.25.0" + }, + "peerDependencies": { + "react": "^19.0.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -7594,6 +7730,13 @@ "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==", "license": "ISC" }, + "node_modules/scheduler": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "license": "MIT", + "peer": true + }, "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -7723,6 +7866,16 @@ "csstype": "^3.1.0" } }, + "node_modules/sonner": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.3.tgz", + "integrity": "sha512-KXLWQfyR6AHpYZuQk8eO8fCbZSJY3JOpgsu/tbGc++jgPjj8JsR1ZpO8vFhqR/OxvWMQCSAmnSShY0gr4FPqHg==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 7c76e85..da948c6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -50,14 +50,20 @@ "vitest": "^3.0.0" }, "dependencies": { + "@atlaskit/pragmatic-drag-and-drop": "^1.4.0", "@capacitor/cli": "^7.0.1", "@capacitor/core": "^7.0.1", + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/modifiers": "^9.0.0", + "@dnd-kit/sortable": "^10.0.0", "@inlang/paraglide-sveltekit": "^0.15.5", + "@svelte-plugins/datepicker": "^1.0.11", "@uppy/core": "^4.4.1", "@uppy/dashboard": "^4.3.1", "@uppy/svelte": "^4.3.0", "@uwdata/vgplot": "^0.12.2", "canvas-confetti": "^1.9.3", + "date-fns": "^4.1.0", "globe.gl": "^2.39.2", "gsap": "^3.12.7", "leaflet": "^1.9.4", @@ -66,6 +72,7 @@ "motion": "^12.0.6", "phoenix": "^1.7.18", "pikaday": "^1.8.2", + "sonner": "^1.7.3", "svelte-motion": "^0.12.2", "svelte-transitions": "^1.2.0", "three": "^0.172.0" diff --git a/frontend/src/routes/(authed)/add/+page.svelte b/frontend/src/routes/(authed)/add/+page.svelte index fe932bb..baee7f4 100644 --- a/frontend/src/routes/(authed)/add/+page.svelte +++ b/frontend/src/routes/(authed)/add/+page.svelte @@ -1,7 +1,5 @@ + +
+ +
+ +
+ + +
+ {#each messages as message} +
+
+ {message.content} +
{message.timestamp}
+
+
+ {/each} +
+ + +
+
+ + +
+
+
\ No newline at end of file diff --git a/frontend/src/routes/(authed)/home/dinner/+page.svelte b/frontend/src/routes/(authed)/home/dinner/+page.svelte new file mode 100644 index 0000000..6e3430a --- /dev/null +++ b/frontend/src/routes/(authed)/home/dinner/+page.svelte @@ -0,0 +1,113 @@ + + +
+ + + + +
+
+
Currently Exploring
+
{currentCity}
+
+
🍴
+
+ + +
+ {#each expeditions as expedition} +
+
+ +
+
+

{expedition.name}

+
+ {expedition.cuisine} +
+
+
+ {#if expedition.seats > 3} + 🍽️ + {:else} + 🔥 + {/if} +
+
+ + +
+ {#each expedition.highlights as item} +
+
+ {item} +
+ {/each} +
+ + +
+
+ {#each Array(expedition.seats) as _, i} +
+
+ {i === 0 ? '👤' : '?'} +
+
+ {/each} +
+ +
+ + +
+ 📍 {expedition.meeting} + Local Guide: Maria +
+
+
+ {/each} +
+ + +
+
+
🌐
+

Your Lisbon Journey

+
+
+
5
+
New Allies
+
+
+
9
+
Local Dishes
+
+
+
3
+
Neighborhoods
+
+
+
+
+
\ No newline at end of file diff --git a/frontend/src/routes/(authed)/home/plan/+page.svelte b/frontend/src/routes/(authed)/home/plan/+page.svelte new file mode 100644 index 0000000..d780cf0 --- /dev/null +++ b/frontend/src/routes/(authed)/home/plan/+page.svelte @@ -0,0 +1,220 @@ + + + + + + +
+ +
+
+
+
Travel XP
+
{xp}
+
Level {Math.floor(xp/100)}
+
+
+ +
+ {streak}🔥 +
+ Streak! +
+
+
+ + +
+ + + +
+ + + {#if currentTab === 'pack'} +
+
+ + +
+ + {#each packedItems as item (item.name)} +
+
+
+ togglePacked(item)} + class="checkbox checkbox-primary checkbox-lg" + /> +
+

{item.name}

+
{item.category}
+
+
+{item.xp}XP
+
+
+
+ {/each} +
+ {:else if currentTab === 'plan'} + +
+
+ + +
+ + +
+ {:else} + +
+
+ + +
+ + {#each expenses as expense (expense.description)} +
+ +
+ 💰 {expense.description} - ${expense.amount} +
+
+

Paid by: {expense.paidBy}

+
+
+ {#each expense.splitWith as person} +
+ 👤 {person} +
+ {/each} +
+
+
+ {/each} +
+ {/if} + + +
+ +
+
\ No newline at end of file diff --git a/frontend/src/routes/(authed)/swipe/+page.svelte b/frontend/src/routes/(authed)/home/swipe/+page.svelte similarity index 100% rename from frontend/src/routes/(authed)/swipe/+page.svelte rename to frontend/src/routes/(authed)/home/swipe/+page.svelte