diff --git a/package-lock.json b/package-lock.json
index dbd9d44f..2787e1f1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,6 +18,7 @@
"canvas-confetti": "^1.4.0",
"compression": "^1.7.1",
"cookie-parser": "^1.4.5",
+ "copy-to-clipboard": "^3.3.1",
"express": "^4.17.1",
"hotkeys-js": "^3.8.5",
"js-yaml": "^4.1.0",
@@ -2732,6 +2733,14 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
+ "node_modules/copy-to-clipboard": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz",
+ "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==",
+ "dependencies": {
+ "toggle-selection": "^1.0.6"
+ }
+ },
"node_modules/core-js-compat": {
"version": "3.12.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz",
@@ -6185,6 +6194,11 @@
"node": ">=8.0"
}
},
+ "node_modules/toggle-selection": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
+ "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI="
+ },
"node_modules/toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
@@ -8832,6 +8846,14 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
+ "copy-to-clipboard": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz",
+ "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==",
+ "requires": {
+ "toggle-selection": "^1.0.6"
+ }
+ },
"core-js-compat": {
"version": "3.12.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz",
@@ -11463,6 +11485,11 @@
"is-number": "^7.0.0"
}
},
+ "toggle-selection": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
+ "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI="
+ },
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
diff --git a/package.json b/package.json
index 746c6db7..fa52a625 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"canvas-confetti": "^1.4.0",
"compression": "^1.7.1",
"cookie-parser": "^1.4.5",
+ "copy-to-clipboard": "^3.3.1",
"express": "^4.17.1",
"hotkeys-js": "^3.8.5",
"js-yaml": "^4.1.0",
diff --git a/src/components/Avatar/index.svelte b/src/components/Avatar/index.svelte
index 9b0b603a..e86a8e67 100644
--- a/src/components/Avatar/index.svelte
+++ b/src/components/Avatar/index.svelte
@@ -1,7 +1,7 @@
{}; // This is to know if element is 'dirty'
// onMount(() => {
@@ -22,6 +21,7 @@
bind:value
class="form-select block w-auto mt-1 {selectClassName}"
required={isRequired}
+ on:blur={() => {}}
on:change={onChange}
class:customColor={!!selectClassName}
>
diff --git a/src/routes/courses/[id]/people.svelte b/src/routes/courses/[id]/people.svelte
index 729f094d..84ca8a01 100644
--- a/src/routes/courses/[id]/people.svelte
+++ b/src/routes/courses/[id]/people.svelte
@@ -12,7 +12,10 @@