- Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
- Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
- Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
- Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
- Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
- Lorem ipsum dolor sit amet consectetur, adipisicing elit. Asperiores, reiciendis quo. Quos animi nisi modi cumque hic illo doloremque totam! Distinctio molestias sint magnam illum nostrum eos, fugit aliquid consequuntur?
+
+
+
+
diff --git a/backend/web/src/routes/(authenticated)/[space]/(chat)/+page.ts b/backend/web/src/routes/(authenticated)/[space]/(chat)/+page.ts
index ef26b91..33ac37f 100644
--- a/backend/web/src/routes/(authenticated)/[space]/(chat)/+page.ts
+++ b/backend/web/src/routes/(authenticated)/[space]/(chat)/+page.ts
@@ -1,3 +1,8 @@
-export function load() {
- return { title: 'Conversation' };
+import type { PageLoad } from "./$types";
+
+export const load: PageLoad = ({params}) => {
+ return {
+ title: 'Nouvelle conversation',
+ spaceId : params.space,
+ };
}
diff --git a/backend/web/src/routes/(authenticated)/[space]/(chat)/[conversation]/+page.svelte b/backend/web/src/routes/(authenticated)/[space]/(chat)/[conversation]/+page.svelte
new file mode 100644
index 0000000..74cfb84
--- /dev/null
+++ b/backend/web/src/routes/(authenticated)/[space]/(chat)/[conversation]/+page.svelte
@@ -0,0 +1,75 @@
+
+
+
+
+ {#each messages as message (message.id)}
+
+ {/each}
+
+
+
+
+
diff --git a/backend/web/src/routes/(authenticated)/[space]/(chat)/[conversation]/+page.ts b/backend/web/src/routes/(authenticated)/[space]/(chat)/[conversation]/+page.ts
new file mode 100644
index 0000000..4e51ec0
--- /dev/null
+++ b/backend/web/src/routes/(authenticated)/[space]/(chat)/[conversation]/+page.ts
@@ -0,0 +1,9 @@
+import type { PageLoad } from "./$types";
+
+export const load: PageLoad = ({params}) => {
+ return {
+ title: 'Nouvelle conversation',
+ spaceId: params.space,
+ chatId: params.conversation,
+ };
+}
diff --git a/backend/web/src/routes/(authenticated)/[space]/settings/agents/+page.svelte b/backend/web/src/routes/(authenticated)/[space]/settings/agents/+page.svelte
index 539399d..9910253 100644
--- a/backend/web/src/routes/(authenticated)/[space]/settings/agents/+page.svelte
+++ b/backend/web/src/routes/(authenticated)/[space]/settings/agents/+page.svelte
@@ -100,7 +100,6 @@
let updSpace = space
updSpace.defaultAgentId = agentId
teamApi.updateSpace(updSpace.id, updSpace).then((newdata)=>{
- console.log(newdata)
spaceState.spaces.map((s)=>s.id===spaceState.current?newdata:s)
space=newdata
}).catch((err)=>{
diff --git a/backend/web/src/routes/(public)/login/+page.svelte b/backend/web/src/routes/(public)/login/+page.svelte
index ddca439..b2002d2 100644
--- a/backend/web/src/routes/(public)/login/+page.svelte
+++ b/backend/web/src/routes/(public)/login/+page.svelte
@@ -3,6 +3,7 @@
import { auth, setToken } from '$lib/state/auth.svelte';
import { goto } from '$app/navigation';
import { authApi } from "$lib/api/endpoints/auth"
+ import { validateEmail } from "$lib/utilities/validators"
type Credentials = {
email: string
@@ -17,7 +18,7 @@
})
const formSubmitEmail = () => {
- credentials.validemail = true
+ credentials.validemail = validateEmail(credentials.email)
}
const formSubmitPass = (e: Event) => {
@@ -43,16 +44,16 @@
diff --git a/backend/web/src/routes/layout.css b/backend/web/src/routes/layout.css
index d3d6533..b0b4371 100644
--- a/backend/web/src/routes/layout.css
+++ b/backend/web/src/routes/layout.css
@@ -11,7 +11,7 @@ body {
@apply h-full bg-stone-100 text-stone-950 dark:bg-stone-950 dark:text-stone-100;
}
-.formelement > label {
+label {
@apply text-xs text-stone-600 uppercase dark:text-stone-400;
}
hr {
@@ -30,9 +30,9 @@ h2 {
}
.bt {
appearance: button;
- @apply min-w-40 cursor-pointer rounded bg-stone-300 px-4 py-1 transition-all duration-300 hover:bg-stone-200 dark:bg-stone-800 dark:hover:bg-stone-700;
+ @apply min-w-40 cursor-pointer rounded bg-stone-300 px-4 py-1 transition-all duration-300 hover:bg-stone-400 dark:bg-stone-800 dark:hover:bg-stone-700;
&.small {
- @apply min-w-0 px-2 py-1;
+ @apply min-w-2 px-2 py-1;
}
&.changed,
&.saving {
@@ -62,10 +62,12 @@ h2 {
.public h1 {
@apply mb-4 text-3xl font-bold;
}
-.profile a,
-.public a {
+.profile a {
@apply bg-sky-300 dark:bg-sky-700;
}
+.public a {
+ @apply text-sky-500 dark:text-sky-500;
+}
#outer {
@apply flex h-full flex-row;
@@ -113,10 +115,18 @@ h2 {
}
}
+.chatinput {
+ @apply w-full rounded-l-xl border-stone-300 bg-stone-50 p-2 text-stone-900 dark:border-stone-700 dark:bg-stone-900 dark:text-stone-100;
+}
+
+.chatbutton {
+ @apply min-w-12 cursor-pointer rounded-r-xl bg-stone-300 px-2 py-1 transition-all duration-300 hover:bg-stone-400 dark:bg-stone-700 dark:hover:bg-stone-600;
+}
+
/* form */
.formgroup {
- @apply rounded border border-stone-300 bg-stone-100 p-2 text-sm dark:border-stone-700 dark:bg-stone-900;
+ @apply rounded border border-stone-300 bg-stone-200 p-2 text-sm dark:border-stone-700 dark:bg-stone-900;
}
.formelement {
@@ -124,11 +134,11 @@ h2 {
}
.textinput {
- @apply h-8 w-full rounded border-stone-700 bg-stone-50 px-2 py-1 text-sm text-stone-900 dark:bg-stone-950 dark:text-stone-100;
+ @apply h-8 w-full rounded border-stone-300 bg-stone-50 px-2 py-1 text-sm text-stone-900 dark:border-stone-700 dark:bg-stone-950 dark:text-stone-100;
}
.areainput {
- @apply w-full rounded border-stone-700 bg-stone-50 px-2 py-1 text-sm text-stone-900 dark:bg-stone-950 dark:text-stone-100;
+ @apply w-full rounded border-stone-300 bg-stone-50 px-2 py-1 text-sm text-stone-900 dark:bg-stone-950 dark:text-stone-100;
}
/* svelte select */
@@ -261,3 +271,31 @@ h2 {
.list-item {
@apply list-none;
}
+
+/* chat */
+
+.message {
+ @apply m-2 rounded p-2;
+
+ &.user {
+ @apply bg-sky-500 dark:text-white;
+ }
+
+ &.assistant {
+ &.reasoning {
+ @apply text-white/50;
+ }
+ }
+}
+
+.message-content {
+ @apply text-sm;
+}
+
+.message-content p {
+ @apply my-2;
+}
+
+.message-content pre {
+ @apply my-2 whitespace-pre dark:bg-stone-700;
+}
diff --git a/backend/web/tailwind.config.js b/backend/web/tailwind.config.js
new file mode 100644
index 0000000..d0b1278
--- /dev/null
+++ b/backend/web/tailwind.config.js
@@ -0,0 +1,10 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: [
+ "./src/**/*.{html,js,svelte,ts}",
+ ],
+ theme: {
+ extend: {},
+ },
+ plugins: [],
+}