Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
2
2023-029
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
2023-029
2023-029
Commits
22c86490
Commit
22c86490
authored
Aug 30, 2023
by
Ridma Dilshan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix the Audio detection frontend
parent
c565bb29
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
416 additions
and
194 deletions
+416
-194
Project/Backend/Server_Node/package-lock.json
Project/Backend/Server_Node/package-lock.json
+122
-0
Project/Backend/Server_Node/package.json
Project/Backend/Server_Node/package.json
+1
-0
Project/Backend/Server_Node/yarn.lock
Project/Backend/Server_Node/yarn.lock
+209
-176
Project/Frontend/SignConnectPlus/src/pages/emotion-detection/emotion-audio-detection/list/list.tsx
...s/emotion-detection/emotion-audio-detection/list/list.tsx
+84
-18
No files found.
Project/Backend/Server_Node/package-lock.json
View file @
22c86490
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
"multer"
:
"^1.4.5-lts.1"
,
"multer"
:
"^1.4.5-lts.1"
,
"nodemailer"
:
"^6.9.1"
,
"nodemailer"
:
"^6.9.1"
,
"nodemon"
:
"^2.0.22"
,
"nodemon"
:
"^2.0.22"
,
"react-mic"
:
"^12.4.6"
,
"uuid"
:
"^9.0.0"
"uuid"
:
"^9.0.0"
}
}
},
},
...
@@ -637,6 +638,11 @@
...
@@ -637,6 +638,11 @@
"resolved"
:
"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
,
"integrity"
:
"sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
"integrity"
:
"sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
},
"node_modules/js-tokens"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
,
"integrity"
:
"sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"node_modules/jsonwebtoken"
:
{
"node_modules/jsonwebtoken"
:
{
"version"
:
"9.0.0"
,
"version"
:
"9.0.0"
,
"resolved"
:
"https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz"
,
...
@@ -689,6 +695,17 @@
...
@@ -689,6 +695,17 @@
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
,
"integrity"
:
"sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
"integrity"
:
"sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
},
"node_modules/loose-envify"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
,
"integrity"
:
"sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="
,
"dependencies"
:
{
"js-tokens"
:
"^3.0.0 || ^4.0.0"
},
"bin"
:
{
"loose-envify"
:
"cli.js"
}
},
"node_modules/lru-cache"
:
{
"node_modules/lru-cache"
:
{
"version"
:
"6.0.0"
,
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
,
...
@@ -1058,6 +1075,16 @@
...
@@ -1058,6 +1075,16 @@
"resolved"
:
"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
,
"integrity"
:
"sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
"integrity"
:
"sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
},
"node_modules/prop-types"
:
{
"version"
:
"15.8.1"
,
"resolved"
:
"https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
,
"integrity"
:
"sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="
,
"dependencies"
:
{
"loose-envify"
:
"^1.4.0"
,
"object-assign"
:
"^4.1.1"
,
"react-is"
:
"^16.13.1"
}
},
"node_modules/proxy-addr"
:
{
"node_modules/proxy-addr"
:
{
"version"
:
"2.0.7"
,
"version"
:
"2.0.7"
,
"resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz"
,
"resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz"
,
...
@@ -1119,6 +1146,47 @@
...
@@ -1119,6 +1146,47 @@
"node"
:
">= 0.8"
"node"
:
">= 0.8"
}
}
},
},
"node_modules/react"
:
{
"version"
:
"16.14.0"
,
"resolved"
:
"https://registry.npmjs.org/react/-/react-16.14.0.tgz"
,
"integrity"
:
"sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g=="
,
"peer"
:
true
,
"dependencies"
:
{
"loose-envify"
:
"^1.1.0"
,
"object-assign"
:
"^4.1.1"
,
"prop-types"
:
"^15.6.2"
},
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/react-ga"
:
{
"version"
:
"2.7.0"
,
"resolved"
:
"https://registry.npmjs.org/react-ga/-/react-ga-2.7.0.tgz"
,
"integrity"
:
"sha512-AjC7UOZMvygrWTc2hKxTDvlMXEtbmA0IgJjmkhgmQQ3RkXrWR11xEagLGFGaNyaPnmg24oaIiaNPnEoftUhfXA=="
,
"peerDependencies"
:
{
"prop-types"
:
"^15.6.0"
,
"react"
:
"^15.6.2 || ^16.0"
}
},
"node_modules/react-is"
:
{
"version"
:
"16.13.1"
,
"resolved"
:
"https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
,
"integrity"
:
"sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"node_modules/react-mic"
:
{
"version"
:
"12.4.6"
,
"resolved"
:
"https://registry.npmjs.org/react-mic/-/react-mic-12.4.6.tgz"
,
"integrity"
:
"sha512-2/DZoz7thR2nJyekF10zBvs/7a8HhUQ4L8MV6BpC+Q/T8G1MvpRHGSHjSlVtnbzaCMDJ3R1MdThoLu15WuVh/g=="
,
"dependencies"
:
{
"prop-types"
:
"^15.5.10"
,
"react-ga"
:
"^2.2.0"
},
"peerDependencies"
:
{
"prop-types"
:
"^15.5.10"
,
"react"
:
"16.x"
}
},
"node_modules/readable-stream"
:
{
"node_modules/readable-stream"
:
{
"version"
:
"2.3.8"
,
"version"
:
"2.3.8"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"
,
...
@@ -1968,6 +2036,11 @@
...
@@ -1968,6 +2036,11 @@
"resolved"
:
"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
,
"integrity"
:
"sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
"integrity"
:
"sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
},
"js-tokens"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
,
"integrity"
:
"sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"jsonwebtoken"
:
{
"jsonwebtoken"
:
{
"version"
:
"9.0.0"
,
"version"
:
"9.0.0"
,
"resolved"
:
"https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz"
,
...
@@ -2015,6 +2088,14 @@
...
@@ -2015,6 +2088,14 @@
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
,
"integrity"
:
"sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
"integrity"
:
"sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
},
"loose-envify"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
,
"integrity"
:
"sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="
,
"requires"
:
{
"js-tokens"
:
"^3.0.0 || ^4.0.0"
}
},
"lru-cache"
:
{
"lru-cache"
:
{
"version"
:
"6.0.0"
,
"version"
:
"6.0.0"
,
"resolved"
:
"https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
,
...
@@ -2269,6 +2350,16 @@
...
@@ -2269,6 +2350,16 @@
"resolved"
:
"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
,
"integrity"
:
"sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
"integrity"
:
"sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
},
"prop-types"
:
{
"version"
:
"15.8.1"
,
"resolved"
:
"https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
,
"integrity"
:
"sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="
,
"requires"
:
{
"loose-envify"
:
"^1.4.0"
,
"object-assign"
:
"^4.1.1"
,
"react-is"
:
"^16.13.1"
}
},
"proxy-addr"
:
{
"proxy-addr"
:
{
"version"
:
"2.0.7"
,
"version"
:
"2.0.7"
,
"resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz"
,
"resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz"
,
...
@@ -2312,6 +2403,37 @@
...
@@ -2312,6 +2403,37 @@
"unpipe"
:
"1.0.0"
"unpipe"
:
"1.0.0"
}
}
},
},
"react"
:
{
"version"
:
"16.14.0"
,
"resolved"
:
"https://registry.npmjs.org/react/-/react-16.14.0.tgz"
,
"integrity"
:
"sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g=="
,
"peer"
:
true
,
"requires"
:
{
"loose-envify"
:
"^1.1.0"
,
"object-assign"
:
"^4.1.1"
,
"prop-types"
:
"^15.6.2"
}
},
"react-ga"
:
{
"version"
:
"2.7.0"
,
"resolved"
:
"https://registry.npmjs.org/react-ga/-/react-ga-2.7.0.tgz"
,
"integrity"
:
"sha512-AjC7UOZMvygrWTc2hKxTDvlMXEtbmA0IgJjmkhgmQQ3RkXrWR11xEagLGFGaNyaPnmg24oaIiaNPnEoftUhfXA=="
,
"requires"
:
{}
},
"react-is"
:
{
"version"
:
"16.13.1"
,
"resolved"
:
"https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
,
"integrity"
:
"sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"react-mic"
:
{
"version"
:
"12.4.6"
,
"resolved"
:
"https://registry.npmjs.org/react-mic/-/react-mic-12.4.6.tgz"
,
"integrity"
:
"sha512-2/DZoz7thR2nJyekF10zBvs/7a8HhUQ4L8MV6BpC+Q/T8G1MvpRHGSHjSlVtnbzaCMDJ3R1MdThoLu15WuVh/g=="
,
"requires"
:
{
"prop-types"
:
"^15.5.10"
,
"react-ga"
:
"^2.2.0"
}
},
"readable-stream"
:
{
"readable-stream"
:
{
"version"
:
"2.3.8"
,
"version"
:
"2.3.8"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"
,
...
...
Project/Backend/Server_Node/package.json
View file @
22c86490
...
@@ -21,6 +21,7 @@
...
@@ -21,6 +21,7 @@
"multer"
:
"^1.4.5-lts.1"
,
"multer"
:
"^1.4.5-lts.1"
,
"nodemailer"
:
"^6.9.1"
,
"nodemailer"
:
"^6.9.1"
,
"nodemon"
:
"^2.0.22"
,
"nodemon"
:
"^2.0.22"
,
"react-mic"
:
"^12.4.6"
,
"uuid"
:
"^9.0.0"
"uuid"
:
"^9.0.0"
}
}
}
}
Project/Backend/Server_Node/yarn.lock
View file @
22c86490
This diff is collapsed.
Click to expand it.
Project/Frontend/SignConnectPlus/src/pages/emotion-detection/emotion-audio-detection/list/list.tsx
View file @
22c86490
import
React
,
{
useState
}
from
'
react
'
;
import
MainCard
from
'
components/MainCard
'
;
import
MainCard
from
'
components/MainCard
'
;
import
ScrollX
from
'
components/ScrollX
'
;
import
ScrollX
from
'
components/ScrollX
'
;
import
Grid
from
'
@mui/material/Grid
'
;
import
Grid
from
'
@mui/material/Grid
'
;
import
Button
from
'
@mui/material/Button
'
;
import
Button
from
'
@mui/material/Button
'
;
// import KeyboardVoiceIcon from '@mui/icons-material/KeyboardVoice';
import
UploadOutlined
from
'
@ant-design/icons/lib/icons/UploadOutlined
'
;
import
UploadOutlined
from
'
@ant-design/icons/lib/icons/UploadOutlined
'
;
// import MicIcon from '@mui/icons-material/Mic'; // Import MicIcon from the correct path
import
AudioOutlined
from
'
@ant-design/icons/lib/icons/AudioOutlined
'
;
// import CloudUploadOutlinedIcon from '@mui/icons-material/CloudUploadOutlined'; // Import CloudUploadOutlinedIcon from the correct path
const
List
=
()
=>
{
const
List
=
()
=>
{
const
[
audioBlob
,
setAudioBlob
]
=
useState
<
Blob
|
undefined
>
(
undefined
);
const
[
mediaRecorder
,
setMediaRecorder
]
=
useState
<
MediaRecorder
|
undefined
>
(
undefined
);
const
[
isRecording
,
setIsRecording
]
=
useState
<
boolean
>
(
false
);
const
[
audioUrl
,
setAudioUrl
]
=
useState
<
string
|
undefined
>
(
undefined
);
const
handleRecordStart
=
async
()
=>
{
// Clear the uploaded audio state when recording starts
setAudioUrl
(
undefined
);
try
{
const
stream
=
await
navigator
.
mediaDevices
.
getUserMedia
({
audio
:
true
});
const
recorder
=
new
MediaRecorder
(
stream
);
recorder
.
ondataavailable
=
(
event
)
=>
{
if
(
event
.
data
.
size
>
0
)
{
setAudioBlob
(
new
Blob
([
event
.
data
],
{
type
:
'
audio/wav
'
}));
}
};
recorder
.
onstop
=
()
=>
{
stream
.
getTracks
().
forEach
(
track
=>
track
.
stop
());
};
setMediaRecorder
(
recorder
);
recorder
.
start
();
setIsRecording
(
true
);
}
catch
(
error
)
{
console
.
error
(
'
Error starting recording:
'
,
error
);
}
};
const
handleRecordStop
=
()
=>
{
if
(
mediaRecorder
&&
isRecording
)
{
mediaRecorder
.
stop
();
setIsRecording
(
false
);
}
};
const
handleUpload
=
(
event
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
const
files
=
event
.
target
.
files
;
if
(
files
&&
files
[
0
]
&&
files
[
0
].
type
.
startsWith
(
'
audio/
'
))
{
const
audioObjectUrl
=
URL
.
createObjectURL
(
files
[
0
]);
setAudioUrl
(
audioObjectUrl
);
}
else
{
// Handle case where uploaded file is not an audio file
}
};
return
(
return
(
<
MainCard
content=
{
false
}
>
<
MainCard
content=
{
false
}
>
<
ScrollX
>
<
ScrollX
>
<
Grid
container
spacing=
{
2
}
>
<
Grid
container
spacing=
{
2
}
>
<
Grid
item
xs=
{
12
}
md=
{
6
}
>
<
Grid
item
xs=
{
12
}
md=
{
6
}
>
<
h2
>
Upload or Record
</
h2
>
<
h2
>
Upload or Record
</
h2
>
<
MainCard
>
<
MainCard
>
<
div
style=
{
{
textAlign
:
'
center
'
}
}
>
<
div
style=
{
{
textAlign
:
'
center
'
}
}
>
<
h2
>
Upload Your Files
</
h2
>
<
input
type=
"file"
accept=
"audio/*"
onChange=
{
handleUpload
}
style=
{
{
display
:
'
none
'
}
}
id=
"audio-upload"
/>
<
label
htmlFor=
"audio-upload"
>
<
Button
variant=
"contained"
color=
"primary"
component=
"span"
startIcon=
{
<
UploadOutlined
/>
}
>
Upload
</
Button
>
</
label
>
<
Button
<
Button
variant=
"contained"
variant=
"contained"
color=
"primary"
color=
"primary"
startIcon=
{
<
UploadOutlined
/>
}
startIcon=
{
<
AudioOutlined
/>
}
onClick=
{
isRecording
?
handleRecordStop
:
handleRecordStart
}
>
>
Upload
{
isRecording
?
'
Stop Recording
'
:
'
Record
'
}
</
Button
>
<
Button
variant=
"contained"
color=
"primary"
// startIcon={<KeyboardVoiceIcon />}
>
Record
</
Button
>
</
Button
>
{
audioBlob
&&
(
<
audio
controls
>
<
source
src=
{
URL
.
createObjectURL
(
audioBlob
)
}
type=
"audio/wav"
/>
Your browser does not support the audio element.
</
audio
>
)
}
{
audioUrl
&&
(
<
audio
controls
>
<
source
src=
{
audioUrl
}
type=
"audio/mpeg"
/>
Your browser does not support the audio element.
</
audio
>
)
}
</
div
>
</
div
>
</
MainCard
>
</
MainCard
>
</
Grid
>
</
Grid
>
<
Grid
item
xs=
{
12
}
md=
{
6
}
>
<
Grid
item
xs=
{
12
}
md=
{
6
}
>
<
h2
>
3D Avatar
</
h2
>
<
h2
>
3D Avatar
</
h2
>
<
MainCard
>
<
MainCard
>
{
/* Content of the second card */
}
{
/* Content of the second card */
}
{
/* You can put your 3D avatar components here */
}
{
/* You can put your 3D avatar components here */
}
...
@@ -50,4 +117,3 @@ const List = () => {
...
@@ -50,4 +117,3 @@ const List = () => {
};
};
export
default
List
;
export
default
List
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment