Skip to content

Releases: boostcamp-2020/Project14-A-Web-Audio-Editor

Week5

21 Dec 10:21
bf6e7eb
Compare
Choose a tag to compare
Week5 v1.2.3 ๋ฐฐํฌ

Week5 v1.2.3 ๋ฐฐํฌ

Week5

21 Dec 00:13
f8bc0fd
Compare
Choose a tag to compare
fix: [FE] style ์ˆ˜์ • ๋ฐ AddEffectCommand,Compressor, Fade in/out ๋ฒ„๊ทธ ํ•ด๊ฒฐ

style ์ˆ˜์ • ๋ฐ AddEffectCommand,Compressor, Fade in/out ๋ฒ„๊ทธ ํ•ด๊ฒฐ

Week5

20 Dec 11:37
111a772
Compare
Choose a tag to compare
fix: [FE] console์ œ๊ฑฐ ๋ฐ zoom out ์ปค์„œ ์‹ฑํฌ ์•ˆ๋งž๋Š” ๋ฒ„๊ทธ ํ•ด๊ฒฐ

console์ œ๊ฑฐ ๋ฐ zoom out ์ปค์„œ ์‹ฑํฌ ์•ˆ๋งž๋Š” ๋ฒ„๊ทธ ํ•ด๊ฒฐ

Week5

20 Dec 11:30
e8efc6a
Compare
Choose a tag to compare
deploy: 5์ฃผ์ฐจ ์ตœ์ข… ๋ฐฐํฌ

5์ฃผ์ฐจ ์ตœ์ข… ๋ฐฐํฌ

Week4

18 Dec 09:18
1a88235
Compare
Choose a tag to compare
fix: [FE] ์Šคํฌ๋กค ๊ด€๋ จ ๋ฒ„๊ทธ ๋ฐ ์คŒ ๊ด€๋ จ marker ์œ„์น˜ ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#163)

* fix: [FE] EditTools delete๋ฒ„ํŠผ ๋น„ํ™œ์„ฑํ™” ๋ฒ„๊ทธ ํ•ด๊ฒฐ

- 0๊ฐœ์™€ 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์œผ๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•ด๊ฒฐ

* fix: [FE] ํŠธ๋ž™ ์ถ”๊ฐ€/์ œ๊ฑฐ ๊ด€๋ จ ์Šคํฌ๋กค ๋ฒ„๊ทธ ํ•ด๊ฒฐ

- ํŠธ๋ž™ ์ถ”๊ฐ€/์ œ๊ฑฐ๋ฅผ ํ• ๋•Œ marker์˜ height๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ํ•ด๊ฒฐ

* fix: [FE] ์คŒ ์ธ/์•„์›ƒ ๊ด€๋ จ ๋งˆ์ปค ์œ„์น˜ ๋ฒ„๊ทธ ํ•ด๊ฒฐ

* style: [FE] AudioTrack ์•ˆ์“ฐ๋Š” ์†์„ฑ ์‚ญ์ œ

- maxTrackPlayTime ์‚ญ์ œ

Week3

11 Dec 03:17
e7cf629
Compare
Choose a tag to compare
deploy: Week3 ๋ฐฐํฌ (#133)

* Update README.md

* feat: [FE] ์˜ค๋””์˜ค ์ •์ง€, ๊ตฌ๊ฐ„ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#98)

* feat : [FE] Audio Stop ๊ตฌํ˜„

- ์ •์ง€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์˜ค๋””์˜ค ์žฌ์ƒ์ด ์ •์ง€๋จ
- ๋งˆ์ปค์˜ ์œ„์น˜๊ฐ€ 0์œผ๋กœ ์ด๋™
- ์žฌ์ƒ์‹œ๊ฐ„์ด 0์œผ๋กœ ์ดˆ๊ธฐํ™”
- controller์— setMarkerWidthToZero ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
- store์— setMarkerWidthToZero ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
- storetype์œผ๋กœ current_position_zero_channel ์ถ”๊ฐ€
- Marker๋Š” ํ•ด๋‹น ์ฑ„๋„์„ subscribeํ•ด ๋งˆ์ปค ์œ„์น˜๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•จ

* chore : [FE] ๊ณต๋ฐฑ ์‚ญ์ œ

- enter๊ฐ€ ๋‘ ๋ฒˆ ๋“ค์–ด๊ฐ„ ๋ถ€๋ถ„ ์‚ญ์ œ

* feat : [FE] ๊ฑด๋„ˆ๋›ด ์‹œ๊ฐ„์ด ์Œ์ˆ˜์ผ ๋•Œ ์ฒ˜๋ฆฌ

- markerTime์ด ์Œ์ˆ˜๊ฐ€ ๋์„ ๋•Œ 0์œผ๋กœ ๋ณ€๊ฒฝ
- playTime์ด ์Œ์ˆ˜๊ฐ€ ๋„˜์–ด์™”์„ ๋•Œ ์žฌ๊ณ„์‚ฐ

* feat : [FE] ๋งˆ์ปค์˜ ์œ„์น˜๊ฐ€ ์Œ์ˆ˜์ผ ๋•Œ ์ฒ˜๋ฆฌ

- ๋งˆ์ปค๊ฐ€ ์›€์ง์ธ ์œ„์น˜๊ฐ€ ์Œ์ˆ˜๊ฐ€ ๋„˜์–ด์™€ ํ˜„์žฌ ์œ„์น˜์™€ ๊ณ„์‚ฐ ์‹œ ์Œ์ˆ˜๊ฐ€ ๋์„ ๋•Œ
  0์œผ๋กœ ๊ฐ’ ์ ์šฉ

* feat : [FE] ๊ตฌ๊ฐ„ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ๊ตฌ๊ฐ„ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- quantum์€ 3์œผ๋กœ ์„ค์ •
- ์•ž์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ, ๋’ค๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๊ฐ€๋Šฅ
- markerTime ๋ณ€๊ฒฝ์„ audioContext.currentTime์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ
  setInterval์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณ€ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝ
- setInterval์ด ๊ฑด๋„ˆ๋›ฐ๊ธฐ์—์„œ๋„ ํ•„์š”ํ•˜์—ฌ ๋”ฐ๋กœ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•ด ์‚ฌ์šฉ

* chore : [FE] ์ฃผ์„ ์‚ญ์ œ

- ์ฃผ์„์„ ๋ช‡ ๊ฐœ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.
- ์ดํ•ด๊ฐ€ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„๋“ค์˜ ์ฃผ์„์€ ์•„์ง ์‚ญ์ œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

* feat : [FE] ๋งจ ์•ž์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

- ๊ธฐ์กด์˜ stop, play ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜์—ฌ ๋งจ ์•ž์œผ๋กœ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„
- stop์„ ํ–ˆ์„ ๋•Œ delay๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— setTimeout ๋‚ด์—์„œ play๋ฅผ
  ํ˜ธ์ถœํ•˜๋„๋ก ํ•จ

* feat : [FE] marker position ํด๋ฆญ์œผ๋กœ ๋ณ€๊ฒฝ ์‹œ ์žฌ์ƒ ์œ„ํ•œ ์œ„์น˜ ์„ ์ •

- MarkerEventUtil์˜ clickMarkerListener์—์„œ play ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถฉํ•˜๋ฉด ๋จ.
- ์•„์ง play ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๊ณณ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์–ด์„œ ์œ„์น˜๋ฅผ ์žก์•„๋‘๊ธฐ๋งŒ ํ•จ.

* fix : [FE] FastRewind ์‹œ์˜ ์‹œ์ž‘ ์˜ค๋ฅ˜ ์ˆ˜์ •

- fastRewind๊ฐ€ 0์ดํ•˜๋กœ ๋์„ ๋•Œ waitTime ์‹œ๊ฐ„์ด ์ œ๋Œ€๋กœ ๊ณ„์‚ฐ์ด ์•ˆ๋˜์–ด
  delay๊ฐ€ ์ƒ๊น€
- markerTime - QUANTUM์ด ์Œ์ˆ˜๊ฐ€ ๋์„ ๋•Œ waitTime์„ 0์œผ๋กœ ์„ค์ •.

* refactor : [FE] ๋ณ€์ˆ˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ๊ณผ ์ฃผ์„ ์‚ญ์ œ

- when, offset, duration ๋ณ€์ˆ˜ ์ด๋ฆ„์„ waitTime, audioStartTime,
  playDuration์œผ๋กœ ๋ณ€๊ฒฝ
- ์ฃผ์„ ์‚ญ์ œ

close #23, close #25

* feat: [FE] ๊ตฌ๊ฐ„ ํŽธ์ง‘๊ธฐ๋Šฅ(์ž˜๋ผ๋‚ด๊ธฐ, ๋ถ™์—ฌ๋„ฃ๊ธฐ, ๊ตฌ๊ฐ„ ์ž๋ฅด๊ธฐ) ๊ตฌํ˜„ (#101)

* refactor: [FE] auto increment ์ดˆ๊ธฐ๊ฐ’ 1๋กœ ์ˆ˜์ •

- clipBoard์— ์ €์žฅ๋˜๋Š” TrackSection๊ณผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ auto increment์˜ ์ดˆ๊ธฐ๊ฐ’์„ 1๋กœ ์ˆ˜์ •

* refactor: [FE] DeleteCommand CopyUtil ์ ์šฉ

- CopyUtil๋กœ deleteList์— ์ €์žฅํ•˜๋„๋ก ์ˆ˜์ •

* refactor: [FE] CopyUtil ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜์ •

- ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ id ์ •๋ณด๋ฅผ ๋ฐ›๋„๋ก ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๊ธฐ์กด์—๋Š” clipBoard์— ์ €์žฅํ•˜๋Š” ์šฉ๋„๋กœ ๋งŒ๋“ค์—ˆ์ง€๋งŒ DelelteCommand์—์„œ๋Š”
  id ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] controller cutCommand() ๊ตฌํ˜„

- ๊ธฐ์กด์— ๊ตฌํ˜„ํ•œ copy์™€ delete ๊ธฐ๋Šฅ์„ ํ•ฉ์ณ์„œ cutCommand ํ•จ์ˆ˜๋ฅผ
  ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ์ž˜๋ผ๋‚ด๊ธฐ๋Š” ์„น์…˜์„ 1๊ฐœ ์„ ํƒํ–ˆ์„ ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— setClipBoard()์˜
  return๊ฐ’์„ boolean์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ์œ ํšจ์„ฑ ์ฒดํฌ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] EditTools ์ž˜๋ผ๋‚ด๊ธฐ ์ด๋ฒคํŠธ ๋“ฑ๋ก

- ์„ ํƒํ•œ ๊ตฌ๊ฐ„ ์ž˜๋ผ๋‚ด๊ธฐ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] ์ž˜๋ผ๋‚ด๊ธฐ ๋‹จ์ถ•ํ‚ค ๊ตฌํ˜„

- 1๊ฐœ์˜ ๊ตฌ๊ฐ„์„ ์„ ํƒํ•˜๊ณ  ctrl + X ๋ฅผ ๋ˆ„๋ฅด๋ฉด cutCommand()๊ฐ€ ์‹คํ–‰๋˜๋„๋ก
  ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] icons์— iconInfo ์ถ”๊ฐ€

- IconButton์— ๋Œ€ํ•œ hover ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ์•„์ด์ฝ˜ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๋Š” iconInfo๋ฅผ
  ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
- iconInfo๋Š” iconType์— ๋Œ€ํ•œ ์ƒ์„ธ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

* style: [FE] hover์‹œ icon ์ƒ์„ธ์ •๋ณด๊ฐ€ ๋‚˜์˜ค๋„๋ก style ์ ์šฉ

- visibility ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ hover์‹œ์— ์•„์ด์ฝ˜์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‚˜์˜ค๋„๋ก
  style ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
- transition-delay๋กœ 0.3์ดˆ ํ›„์— ์ •๋ณด๊ฐ€ ๋‚˜์˜ค๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] ์‹œ์ž‘์œ„์น˜, ์ข…๋ฃŒ์œ„์น˜ ์ด๋™ ๋‹จ์ถ•ํ‚ค ์ถ”๊ฐ€

- ์‹œ์ž‘์œ„์น˜๋กœ ์ด๋™์€ '[', ์ข…๋ฃŒ์œ„์น˜๋กœ ์ด๋™์€ ']' ํ‚ค๋กœ ๋™์ž‘ํ•˜๋„๋ก keyType๊ณผ
  keyDown ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] publish ๋นˆ ์ธ์ž๊ฐ’ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„

- ๋นˆ ์ธ์ž๋ฅผ ๋„˜๊ธฐ๋Š” ๊ฒฝ์šฐ null๋กœ ํ‘œํ˜„

* refacot: [FE] Command ํด๋ž˜์Šค index์—์„œ exportํ•˜๋„๋ก ๋ณ€๊ฒฝ

- importํ•˜๊ธฐ ์‰ฝ๊ฒŒ index.js์—์„œ export ๊ด€๋ฆฌ

* feat: [FE] CopyUtil copyTrack ํ•จ์ˆ˜ ๊ตฌํ˜„

- Track์„ deep copyํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜ ๊ตฌํ˜„

* refactor: [FE] store setTrack, setTrackSection ์ˆ˜์ •

- setTrack์€ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ๋ณ€๊ฒฝ
  - newTrack์˜ id๊ฐ’์ด ์ด๋ฏธ TrackList์— ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ’๋งŒ ๋ณ€๊ฒฝ
  - ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” TrackList์— ์ƒˆ๋กœ ์ถ”๊ฐ€
- setTrackSection
  - clipBoard์— ๋ณต์‚ฌ๋œ trackSection์€ 0์˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฏ€๋กœ ์ƒˆ๋กœ id๊ฐ’์„ ๋ณ€๊ฒฝ
  - undo์—์„œ ๊ทธ์ „์— ์ €์žฅ๋œ ์ƒํƒœ ๊ทธ๋Œ€๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ๋˜๊ธฐ ๋•Œ๋ฌธ์— trackSection id๊ฐ’์„ ๊ทธ๋Œ€๋กœ
    ์‚ฌ์šฉ

* feat: [FE] controller pasteCommand ํ•จ์ˆ˜ ๊ตฌํ˜„

- ๋ถ™์—ฌ๋„ฃ๊ธฐ๋Š” ํ˜„์žฌ clipBoard์— ๋ณต์‚ฌ๋œ ๊ตฌ๊ฐ„์˜ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
- ํ˜„์žฌ๋Š” 1๊ฐœ์˜ ๊ตฌ๊ฐ„์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  - ์ถ”ํ›„ ๋งˆ์ปค์œ„์น˜ ๊ด€๋ จํ•ด์„œ ๋ถ™์—ฌ๋„ฃ๊ธฐ ๊ธฐ๋Šฅ ๋ฆฌํŒฉํ† ๋ง ํ•„์š”
- pasteCommand()์— ๋Œ€ํ•œ ์„ค๋ช…
  - 1) focusList์˜ ๊ธธ์ด๊ฐ€ 1์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  - 2) ๋ถ™์—ฌ๋„ฃ๊ธฐ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” track๊ณผ clipBoard๋ฅผ deep copyํ•ฉ๋‹ˆ๋‹ค.
  - 3) copySection์˜ trackStartTime์„ ํ˜„์žฌ focusํ•œ
    trackSection์˜ endTime์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  - 4) PasteCommand์˜ ์ธ์ž๋กœ ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค.

* feat: [FE] PasteCommand ํด๋ž˜์Šค ๊ตฌํ˜„

- beforeTrack์€ execute๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „ ์ €์žฅํ•˜๋Š” ์ƒํƒœ๊ฐ’์ž…๋‹ˆ๋‹ค.
- execute()
  - 1) track๊ณผ section์˜ ์ •๋ณด๋ฅผ deep copyํ•ฉ๋‹ˆ๋‹ค.
  - 2) track์—์„œ newSection์ด ์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ์ธ endTime์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  - 3) newSection์˜ ์ข…๋ฃŒ์‹œ๊ฐ„ ์ „์— ์‹œ์ž‘ํ•˜๋Š” section์ด ์žˆ๋Š”์ง€ findIndex๋ฅผ
    ํ†ตํ•ด index๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  - 4-1) firstDelayIndex๊ฐ€ -1์ด ์•„๋‹ˆ๋ผ๋ฉด (์กด์žฌ)
    - endTime์—์„œ ํ•ด๋‹น section์˜ ์‹œ์ž‘์‹œ๊ฐ„์„ ๋นผ์„œ ์–ผ๋งˆ๋‚˜ delayTime์„
      ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
    - firstDelayIndex์™€ ๊ทธ ๋’ค์— ์กด์žฌํ•˜๋Š” section๋“ค์˜ trackStartTime์—
      delayTime์„ ๋”ํ•ด์ค๋‹ˆ๋‹ค.
  - 4-2) firstDelayIndex๊ฐ€ -1์ธ ๊ฒฝ์šฐ (์กด์žฌx)
    - ๋ฐ”๋กœ ํŠธ๋ž™์— newSection์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
- undo()
  - ์ €์žฅ๋œ beforeTrack์„ deep copyํ•˜์—ฌ setTrack์œผ๋กœ ๋ฎ์–ด์”Œ์šฐ๊ณ 
    publishํ•ฉ๋‹ˆ๋‹ค.

* feat: [FE] EditTools ๋ถ™์—ฌ๋„ฃ๊ธฐ ์ด๋ฒคํŠธ ๋“ฑ๋ก

- ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ์œ„ํ•œ click ์ด๋ฒคํŠธ ๋“ฑ๋ก

* feat: [FE] ๋ถ™์—ฌ๋„ฃ๊ธฐ ๋‹จ์ถ•ํ‚ค ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋œ ์ƒํƒœ์—์„œ ctrl + v ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ถ™์—ฌ๋„ฃ๊ธฐ ๊ธฐ๋Šฅ์ด
  ์‹คํ–‰๋˜๋„๋ก ๊ตฌํ˜„

* style: [FE] PlayBarUtil ์ฃผ์„ ์ถ”๊ฐ€

- ๋‚˜์ค‘์— ๋ฆฌํŒฉํ† ๋ง์„ ์œ„ํ•œ ์ฃผ์„์ถ”๊ฐ€
- PR mergeํ•˜๋ฉด์„œ ์ง€์šฐ๊ฒ ์Šต๋‹ˆ๋‹ค

* feat: [FE] SplitCommand ๊ตฌํ˜„

- ๊ตฌ๊ฐ„ ์ž๋ฅด๊ธฐ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ SplitCommand ๊ตฌํ˜„
- ํด๋ฆญํ•œ ๊ณณ์˜ ์‹œ๊ฐ„๊ณผ ํด๋ฆญํ•œ trackSection์˜ trackStartTime์œผ๋กœ splitTime์„ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.
- splitTime์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ ์„น์…˜์„ ์ƒ์„ฑํ•˜์—ฌ ๊ธฐ์กด์˜ trackSection์„ ์ง€์šฐ๊ณ  ์ƒˆ๋กœ track์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๊ธฐ์ค€์ด ๋˜๋Š” element๋Š” audi-main-audio-track-container div๋กœ
  ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] AudioTrackSection ์ปดํฌ๋„ŒํŠธ click ์ด๋ฒคํŠธ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ

- cursorMode์— ๋”ฐ๋ผ focus๋˜๊ฑฐ๋‚˜ split ํ•˜๋„๋ก ์กฐ๊ฑด๋ฌธ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค

* feat: [FE] controller splitCommand() ๊ตฌํ˜„

- SplitCommand๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
- getTrack์€ ์ž์ฃผ ์“ฐ์ผ ๊ฒƒ ๊ฐ™์•„์„œ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] AudioTrack ์ž๋ฅด๊ธฐ ๋ชจ๋“œ ์ปคํŠธ๋ผ์ธ ๊ตฌํ˜„

- Track ๋ณ„๋กœ cut-line ๊ด€๋ฆฌํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ํ‰์†Œ์—๋Š” class="hide"๋กœ ๋˜์–ด์žˆ๋‹ค๊ฐ€ cursorMode๊ฐ€ cut์ผ ๋•Œ,
  trackSection์˜ mousemove ์ด๋ฒคํŠธ๋กœ hide๊ฐ€ ํ•ด์ฒด๋ฉ๋‹ˆ๋‹ค.

* feat: [FE] EventType mouseout ์ถ”๊ฐ€

- ๋งˆ์šฐ์Šค๊ฐ€ canvas ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ”์„ ๋•Œ cut-line์ด ๋‹ค์‹œ hide ๋˜๋„๋ก mouseout
  ์ด๋ฒคํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] AudioTrackSection mousemove, mouseout ์ด๋ฒคํŠธ ๊ตฌํ˜„

- TrackSection์œ„์—์„œ  cursorMode๊ฐ€ ์ž๋ฅด๊ธฐ ๋ชจ๋“œ์ผ ๊ฒฝ์šฐ ๋งˆ์šฐ์Šค ์ปค์„œ ์œ„์น˜์—
  ๋”ฐ๋ผ cut-line์ด ๋‚˜์˜ค๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
- mouseout์€ ์ปค์„œ๊ฐ€ TrackSection ๋ฐ– ๋‚˜๊ฐ”์„ ๊ฒฝ์šฐ ๋‹ค์‹œ hideํ•˜๊ธฐ ์œ„ํ•œ
  ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

* style: [FE] image cursor ์œ„์น˜ ์กฐ์ •

- ์ปคํŠธ๋ผ์ธ๊ณผ ๋งˆ์šฐ์Šค ์ปค์„œ์˜ ์œ„์น˜์˜ ์‹ฑํฌ๊ฐ€ ์ž˜ ๋งž์ง€ ์•Š์•„์„œ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

close #65, close #68, close #73, close #99, close #100

* feat: [FE] ์žฌ์ƒ๋ฐ” ๋งˆ์ปค ๋“œ๋ž˜๊ทธ๋กœ ์ด๋™ํ•˜๊ธฐ ๊ตฌํ˜„ (#102)

* feat: [FE] PlayBarMarkerBlurZone ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ์žฌ์ƒ๋ฐ” ๋งˆ์ปค๋ฅผ ์›€์ง์ผ์‹œ ๋ฐ”๊นฅ ์˜์—ญ์˜ ์ƒ‰์„ ๋ฐ”๊พธ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ
  ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] PlayBarMarkerBlurZone style ๊ตฌํ˜„

- PlayBarMarkerBlurZone style์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] PlayBarMarker style ์ˆ˜์ •

- cursor: pointer๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค
- z-index: 4๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] playbarMarker ๋“œ๋ž˜๊ทธ ์ด๋ฒคํŠธ ์ถ”๊ฐ€

- ์žฌ์ƒ๋ฐ” ๋งˆ์ปค๊ฐ€ ๋“œ๋ž˜๊ทธ๋กœ ์›€์ง์ด๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๋“œ๋ž˜๊ทธ์‹œ ๋ฐ”๊นฅ ์˜์—ญ์— ์ƒ‰์ด ๋“ค์–ด๊ฐ€๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] playbar-event-zone ์ถ”๊ฐ€

- ์žฌ์ƒ๋ฐ” ์ด๋ฒคํŠธ๊ฐ€ ์ ์šฉ๋˜๋Š” ์˜์—ญ์— ๋Œ€ํ•œ css ์„ค์ •

* feat: [FE] eventType ์ถ”๊ฐ€

- PLAYBAR_EVENT_ZONE_DROP eventkey ์ถ”๊ฐ€

* feat: [FE] ์žฌ์ƒ๋ฐ” ๋”๋ธ”ํด๋ฆญ์‹œ ๋ฐ”๊นฅ์˜์—ญ ์ƒ‰ ์ง€์ •

- ๋”๋ธ”ํด๋ฆญ ํ–ˆ์„๋•Œ๋„ ๋ฐ”๊นฅ ์˜์—ญ์˜ ์ƒ‰์ด ๋ณ€๊ฒฝ๋˜๋„๋ก ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

Co-authored-by: Woojin Shin <[email protected]>

* refactor: [FE] AudioTrack Scroll ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ์ฝ”๋“œ๋ฆฌํŒฉํ† ๋ง (#103)

* feat: [FE] store ํŠธ๋ž™ ์ตœ๋Œ€ ๋„ˆ๋น„ ์‚ฌ์ด์ฆˆ ์ถ”๊ฐ€

- ํŠธ๋ž™์˜ ์ตœ๋Œ€ ๋„ˆ๋น„ ์‚ฌ์ด์ฆˆ๋กœ ๋ชจ๋“  ํŠธ๋ž™์˜ ๋„ˆ๋น„์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ •ํ•˜์—ฌ ์ „์ฒด
  ํŠธ๋ž™์„ ์Šคํฌ๋กคํ•˜๊ธฐ ์œ„ํ•ด store์— ์ตœ๋Œ€ ํŠธ๋ž™ ๋„ˆ๋น„์‚ฌ์ด์ฆˆ ์ถ”๊ฐ€
- ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ตœ๋Œ€ ํŠธ๋ž™ ๋„ˆ๋น„์‚ฌ์ด์ฆˆ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋„๋ก
  ์ธํ„ฐํŽ˜์ด์Šค ์ถ”๊ฐ€

* feat: [FE] eventType์— mouseup, mousemove ์ด๋ฒคํŠธ ์ถ”๊ฐ€

- Zoombar ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋ฅผ ์œ„ํ•œ ์ด๋ฒคํŠธ ์ถ”๊ฐ€

* feat: [FE] ZoomBar ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

- ํŠธ๋ž™ ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ณ€ํ•˜๋„๋ก ์ œ์ž‘
- ํŠธ๋ž™ ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ ์Šคํฌ๋กคํ•˜๋Š” px๊ฐ’์ด ๋ณ€ํ•˜๋„๋ก ์ œ์ž‘

* feat: [FE] Main ์ปดํฌ๋„ŒํŠธ์— ํŠธ๋ž™ ์Šคํฌ๋กค ์˜์—ญ ์ถ”๊ฐ€

- Zoombar ์ปดํฌ๋„ŒํŠธ๋กœ ์Šคํฌ๋กค ํ•˜๊ธฐ์œ„ํ•œ ์˜์—ญ ์ถ”๊ฐ€

* refactor: [FE] AudioTrack, AudioTrackSection  ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •

- ํŠธ๋ž™์˜ ๋„ˆ๋น„์‚ฌ์ด์ฆˆ๋ฅผ ์ตœ๋Œ€ ํŠธ๋ž™์˜ ๋„ˆ๋น„ ์‚ฌ์ด์ฆˆ๋กœ ๋ชจ๋‘ ๋ณ€๊ฒฝํ•˜๋„๋ก ์ˆ˜์ •
- ํŠธ๋ž™์˜์—ญ์„ overflowํ•˜๋ฉด ์Šคํฌ๋กค์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •
- ํŠธ๋ž™์˜ ๋„ˆ๋น„์‚ฌ์ด์ฆˆ๊ฐ€ ๋ณ€ํ•˜๋ฉด store์— ๋™๊ธฐํ™” ํ•˜๋„๋ก ์ˆ˜์ •

* refactor: [FE] ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง ๋ฐ ๋ฒ„๊ทธ์ˆ˜์ •

- ํŠธ๋ž™์— ๋‚ด์šฉ์ด ์—†๋Š” ๊ฒฝ์šฐ์— Drag&Drop ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋„๋ก ์ˆ˜์ •
- Zoombar EventType ์ถ”๊ฐ€

* style: [FE] ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ˆ˜์ •

- ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋…ธํŠธ๋ถ, ๋ฐ์Šคํฌํƒ‘ ํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ ๊นจ์ง€๋Š” ์Šคํƒ€์ผ ์ˆ˜์ •

* refactor: [FE] ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ ์ด๋ฒคํŠธ delegation ์ฒ˜๋ฆฌ ์ถ”๊ฐ€

- ๋ฃจํŠธ์—์„œ ์ด๋ฒคํŠธ ์‹คํ–‰์‹œ delegation์„ ์ ์šฉํ•œ ๋ถ€๋ชจ ํƒœ๊ทธ๋ฅผ ์ฐพ์•„์„œ ์ด๋ฒคํŠธ๋ฅผ
  ์‹คํ–‰ํ•˜๋„๋ก ์ฝ”๋“œ ์ˆ˜์ •

* feat: [FE] TrackOptionType ์ •์˜

- TrackOption ์ปดํฌ๋„ŒํŠธ OptionType ์ •์˜

* feat: [FE] AudioTrackOptionClick EventKey ์ •์˜

- AudioTrackOption ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ด๋ฒคํŠธ ํ‚ค ์ •์˜

* feat: [FE] AudioTrackOption ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

- AudioTrack์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฉ”์ธํŽ˜์ด์ง€๊ฐ€ ์ถ”๊ฐ€๋˜๋„๋ก ์ œ์ž‘
- Event Delegation์œผ๋กœ event-key๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* feat: [FE] AudioTrackMenu ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

* style: [FE] ๋ฉ”์ธํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์กฐ์ •

- ํ—ค๋” ๋ ˆ์ด์•„์›ƒ ๋ฐ์Šคํฌํƒ‘, ๋…ธํŠธ๋ถ์— ๋”ฐ๋ผ ์กฐ์ •

close #10, close #12

* feat: [FE] compressor ์ „์ฒด ํŠธ๋ž™ ์••์ถ• ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#116)

* fix: [FE] PasteCommand trackStartTime ๋ฒ„๊ทธ ํ•ด๊ฒฐ

- paste๋œ TrackSection์˜ trackStartTime์˜ ๊ฐ’์ด ์ด์ƒํ•˜๊ฒŒ ์ €์žฅ๋˜๋Š” ๋ฒ„๊ทธ
  ๋ฐœ๊ฒฌ
- delayTime์„ ๊ตฌํ•  ๋•Œ trackStartTime์ด ์•„๋‹ˆ๋ผ audioStartTime์œผ๋กœ ๊ตฌํ•ด์„œ
  ๋ฒ„๊ทธ ๋ฐœ์ƒํ–ˆ์—ˆ์Œ
    - audioStartTime -> trackStartTime์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐ

* refactor: [FE] ๋ชจ๋“  ํŠธ๋ž™ mergeํ•˜์—ฌ saveํ•˜๋„๋ก ๋ณ€๊ฒฝ

- ํŒŒ์ผ ์ƒ์„ฑ ๋‹จ๊ณ„
  - 1) getTrackArrayBuffer()๋กœ ํ•ด๋‹น ํŠธ๋ž™์„ ํ•˜๋‚˜์˜ ArrayBuffer๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  - 2) for๋ฌธ์œผ๋กœ ๋ชจ๋“  ํŠธ๋ž™์˜ ArrayBuffer๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„์ค๋‹ˆ๋‹ค.
  - 3)  ๋ชจ๋“  ํŠธ๋ž™์˜ ArrayBuffer๊ฐ€ ๋‹ด๊ธด arrayBufferList๋ฅผ mergeTrackArrayBuffer()๋กœ merge์‹œ์ผœ์ค๋‹ˆ๋‹ค.
  - 4) merge๋œ buffer๋ฅผ ChannelDataToWave()๋กœ wavBuffer๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.
  - 5-1) wav๋กœ ์ €์žฅ
   - wavBuffer๋ฅผ file๋กœ ์ƒ์„ฑํ•˜๊ณ  ๋ฒ„ํŠผ์˜ href๋ฅผ ๋ณ€๊ฒฝ
  - 5-2) mp3๋กœ ์ €์žฅ
   - wavBuffer๋ฅผ lamejs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ mp3๋กœ encoding ํ•œ ํ›„์— file๋กœ
     ์ƒ์„ฑํ•˜์—ฌ href ๋ณ€๊ฒฝ

* fix: [FE] Paste ์ดํ›„ ์„ ํƒ๊ตฌ๊ฐ„ ํ…Œ๋‘๋ฆฌ ์ดˆ๊ธฐํ™” ๋ฒ„๊ทธ

- setSection์œผ๋กœ ๋ฆฌ๋ Œ๋”๋ง ๋˜๋ฉด์„œ focus๋œ ๊ตฌ๊ฐ„์˜ border style์„ ๋จน์ธ
  class๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ
  - trackSection ์ปดํฌ๋„ŒํŠธ์—์„œ initState()๋กœ focusList์˜ section๊ณผ ๋™์ผํ•œ
    id๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด focusInfo์˜ element๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ , classList.add('focused-section')๋ฅผ ํ•ด์คฌ์Šต๋‹ˆ๋‹ค.

* feat: [FE] EditorMenu ์ปดํฌ๋„ŒํŠธ init ๊ตฌํ˜„

- ๋ชจ๋“  ํŠธ๋ž™์— trackSection์ด ํ•˜๋‚˜๋„ ์—†์œผ๋ฉด ์ €์žฅํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋น„ํ™œ์„ฑํ™”
  ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.
- init์—์„œ ๋ชจ๋“  track์˜ trackSectionList์˜ ๊ธธ์ด๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] store publish ์ถ”๊ฐ€

- EditorMenu์˜ ๋ฆฌ๋ Œ๋”๋ง์„ ์œ„ํ•œ publish ์ถ”๊ฐ€

* feat: [FE] controller getSourceList() ๊ตฌํ˜„

- ๋ชจ๋“  sourceList๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ ๊ตฌํ˜„

* refactor: [FE] SourceDowload saveFile ์ธ์ž ๋ณ€๊ฒฝ

- ๊ธฐ์กด์— test์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๋˜ audioํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ธ์ž๋ฅผ
  compressorObject๋งŒ ๋„˜๊ฒจ์ฃผ๋„๋ก ์ˆ˜์ •

* refactor: [FE] compressor emptyTime ์‚ญ์ œ

- ์˜ค๋Š˜ ์Šคํฌ๋Ÿผ๋•Œ ์„ค๋ช…ํ•˜๋ฉด์„œ ๊นจ๋‹ฌ์•˜๋Š”๋ฐ emptyTime์ด ํ•„์š”๊ฐ€ ์—†์–ด์„œ
  ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๊ตฌํ˜„ ์ดˆ๊ธฐ์— ์‚ฌ์šฉํ•˜๊ณ  ๋กœ์ง์ด ๋ณ€๊ฒฝ๋˜์–ด emptyTime์ด ํ•„์š”๊ฐ€ ์—†์–ด์„œ ์‚ญ์ œ
  - start()์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ trackStartTime์„ ๋„˜๊ฒจ์ฃผ๋ฉด์„œ ํ•„์š”๊ฐ€
    ์—†์–ด์กŒ์Šต๋‹ˆ๋‹ค.

* feat: [FE] ๋ณ€ํ™˜ ์™„๋ฃŒ๋œ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ํŒŒ์ผ์„ ๋ณ€ํ™˜ ์™„๋ฃŒํ•œ ์ƒํƒœ์—์„œ ๊ธฐ์กด์—๋Š” ํ™•์žฅ์ž๋ฅผ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ๋ชจ๋‹ฌ์ฐฝ์„
  ๋‹ซ์œผ๋ฉด ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
- ํ•˜์ง€๋งŒ ๋ณ€ํ™˜ ์™„๋ฃŒ๋œ ์ƒํƒœ์—์„œ ํŒŒ์ผ๋ช…์„ ๋ฐ”๊ฟ€ ๋•Œ๋„ ์ดˆ๊ธฐํ™” ๋˜๋ฉด ๋„ˆ๋ฌด
  ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ download์˜ ์ €์žฅ๋œ ํŒŒ์ผ๋ช…๋งŒ ๋ณ€๊ฒฝ๋˜๋„๋ก
  ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] compressor getTrackArrayBuffer ์†๋„ ๊ฐœ์„ 

- ๊ธฐ์กด์—๋Š” for๋ฌธ์œผ๋กœ ๋ชจ๋“  ์„น์…˜์˜ ์ฑ„๋„๋ฐ์ดํ„ฐ๋ฅผ ๋งค๋ฒˆ index 0๋ถ€ํ„ฐ ๊ณ„์† ๋”ํ•˜๋Š”
  ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
- offset ๋ณ€์ˆ˜๋ฅผ ๋‘ฌ์„œ ๊ทธ์ „์— ์ €์žฅํ–ˆ๋˜ index๋Š” ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๋„๋ก
  ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] compressor ๊ณต๋ฐฑ ์ œ๊ฑฐ

- ๋ถˆํ•„์š”ํ•œ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] EffectState ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ & PlayBarUtil / controller/ store ํ•จ์ˆ˜๋ช…, ๋ณ€์ˆ˜๋ช… ๋ฆฌํŒฉํ† ๋ง (#118)

* feat: [FE] EffectState ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

- ๊ตฌ๊ฐ„์ด ์„ ํƒ๋˜๋ฉด ํ•ด๋‹น ๊ตฌ๊ฐ„์— ์ ์šฉ๋œ effect ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ
  ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] SectionEffectList style ์ ์šฉ

- SectionEffectList ์ปดํฌ๋„ŒํŠธ์˜ style์„ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] SectionEffectList์™€ ๊ด€๋ จ๋œ Util ์ƒ์„ฑ

- hideEffectList๋Š” section ์„ ํƒ์„ ํ•˜์ง€ ์•Š์•˜์„๋•Œ EffectList๋ฅผ ์ˆจ๊ธฐ๊ณ 
  SourceList๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
- showEffectList๋Š” section ์„ ํƒ์„ ํ–ˆ์„ ๋•Œ EffectList๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ 
  SourceList๋ฅผ ์ˆจ๊ธฐ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

* feat: [FE] SourceList ์ˆจ๊น€/ํ‘œ์‹œ ํ•จ์ˆ˜ ์ถ”๊ฐ€

- section์— ํฌ์ปค์Šค๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ sourcelist๊ฐ€ ๋ณด์ด์ง€ ์•Š๋„๋ก ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ
  ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
- section์— ํฌ์ปค์Šค๊ฐ€ ์—†์„ ๊ฒฝ์šฐ sourcelist๊ฐ€ ๋ณด์ด๋„๋ก ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ
  ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] SectionEffectList ์ปดํฌ๋„ŒํŠธ Sidebar์— ์ถ”๊ฐ€

- Sidebar ์ปดํฌ๋„ŒํŠธ์— SectionEffectList ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] focus๋ฅผ ์ค„๋•Œ SectionEffectList ์ˆจ๊น€/ํ‘œ์‹œ ์„ค์ •

- addFocus์‹œ SectionEffectList๊ฐ€ ๋ณด์ด๋„๋ก ๋กœ์ง ์ž‘์„ฑ
- removeFocus, resetFocus์‹œ SectionEffectList๊ฐ€ ์ˆจ๊ฒจ์ง€๋„๋ก ๋กœ์ง ์ž‘์„ฑ

* feat: [FE] EffectListType ์„ค์ •

- EffectListType์„ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] eventType ์ถ”๊ฐ€

- EffectList Modal ์ฐฝ์„ ์—ฌ๋Š” ์ด๋ฒคํŠธํƒ€์ž… ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] setMarkerWidthToZero ๊ด€๋ จ ํ•จ์ˆ˜ ์‚ญ์ œ

- setMarkerWidth์— ํ•จ์ˆ˜ ์ธ์ž 0์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋งˆ์ปค์˜ ์œ„์น˜๊ฐ€ ์ดˆ๊ธฐํ™”
  ๋˜๋„๋กํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๋”ฐ๋ผ์„œ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” setMarkerWidthToZero ํ•จ์ˆ˜๋Š” ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ 
  ์ƒ๊ฐ๋˜์–ด ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] store state ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ

- ์‹œ๊ฐ„์„ string์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜๋Š” ~~StringTime์œผ๋กœ ํ‘œ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.
- ์‹œ๊ฐ„์„ ์ดˆ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜๋Š” ~~NumberTime์œผ๋กœ ํ‘œ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] TimeUtil ํŒŒ์ผ ์ƒ์„ฑ

- PlayBarUtil์—์„œ ์‹œ๊ฐ„๊ณผ ๊ด€๋ จ๋œ ํ•จ์ˆ˜๋“ค์„ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
- getSplitTime์€ ์ดˆ๋‹จ์œ„๋กœ ์ •์˜๋œ ์‹œ๊ฐ„์„ ๋ถ„, ์ดˆ, ๋ฐ€๋ฆฌ์ดˆ๋กœ ๋ถ„ํ•ดํ•ด์ฃผ๋Š”
  ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
- getStringPlayBarTime์€ ์žฌ์ƒ๋ฐ” ๋ˆˆ๊ธˆ์„ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
- getNumberTime์€ ๋งˆ์šฐ์Šค ์œ„์น˜๋ฅผ ์ดˆ๋‹จ์œ„ ์‹œ๊ฐ„์œผ๋กœ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
- getStringTime์€ ์ดˆ๋‹จ์œ„ ์‹œ๊ฐ„์„ ๋ฌธ์ž๋กœ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ex)
  '05:11:236'

* refactor: [FE] setCursorStringTime ํ•จ์ˆ˜ ๋‚ด์šฉ ๋ณ€๊ฒฝ

- ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ๋งž๋Š” ๋กœ์ง์œผ๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ธ์ž๋กœ string ํ˜•์‹์˜
  ์‹œ๊ฐ„์„ ๋ฐ›์•„์˜ค๊ณ  ๋ฐ”๋กœ ์ƒˆ๋กœ์šด stringTime์„ state์— ๋„ฃ์–ด์คฌ์Šต๋‹ˆ๋‹ค.
- ๊ทธ ์™ธ ์ž˜๋ชป ๋ณ€๊ฒฝ๋œ state ๋ณ€์ˆ˜๋ช…๋“ค์„ ์ˆ˜์ •ํ•˜๊ณ  ๊ทธ์— ๋งž๋Š” ํ•จ์ˆ˜๋“ค๋„ ์ด๋ฆ„์„
  ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] controller ํ•จ์ˆ˜๋ช… ๋ณ€๊ฒฝ

- resetPlayTime ํ•จ์ˆ˜๋ฅผ changeMarkerPlayStringTime์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
- ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ์žฌ์ƒ๋ฐ”๋ฅผ ํด๋ฆญํ–ˆ์„ ๊ฒฝ์šฐ ๋งˆ์ปค์˜ ์‹œ๊ฐ„์„ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š”
  ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

* refactor: [FE] PlayBarUtil ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ

- WidthUtil๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๋„ˆ๋น„๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋“ค์ด ๋ชจ์—ฌ์žˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] ํ•จ์ˆ˜๋ช… ๋ณ€๊ฒฝ

- ๋ฆฌํŒฉํ† ๋งํ•œ ํ•จ์ˆ˜๋กœ ๊ต์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] ์™ผ์ชฝ ์žฌ์ƒ๋ฐ” ๋งˆ์ปค ์œ„์น˜ ์ˆ˜์ •

- 100%์ด๋˜ ์œ„์น˜๋ฅผ 99.3%๋กœ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.
- ์•„๋งˆ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ฑฐ์˜ ๋‹ค ์™„์„ฑ๋˜๋ฉด ๋˜ ๋‹ค์‹œ ๋ฐ”๋€” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

* refactor: [FE] getNumberTime ๋ช…ํ™•ํ•œ ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์ˆ˜์ •

- calculateTimeOfCursorPosition ํ•จ์ˆ˜๋ช…์œผ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ์–ด ๋ฌด์Šจ ์—ญํ• ์„
  ํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

Co-authored-by: Woojin Shin <[email protected]>

close #117

* refactor: [FE] ๊ตฌ๊ฐ„ ๋‚˜๋ˆ„๊ธฐ ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (#115)

* refactor: [FE] SplitCommand ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

- excute ํ•จ์ˆ˜ ์ž‘์€ ํ•จ์ˆ˜๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ
- PlayBarUtil์€ PlayBar์™€ ๊ด€๋ จ๋˜์–ด ๋ณด์ด๋Š”๋ฐ ์„น์…˜์„ ๋‚˜๋ˆ„๋Š” ์ปค๋งจ๋“œ์—์„œ
  ์‚ฌ์šฉ๋˜์–ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ณ , PlayBarUtil์€ ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์ด
  ํ•„์š”ํ•˜๋ฏ€๋กœ ํ•ด๋‹น ๋ถ€๋ถ„์„ ์‚ญ์ œํ•˜๊ณ , ํ•„์š”ํ•œ ๋กœ์ง๋ถ€๋ถ„๋งŒ ์ถ”๊ฐ€ํ•˜๋„๋ก ์ˆ˜์ •
  (์ถ”ํ›„ ๊ณตํ†ต ์œ ํ‹ธ์ด ๋งŒ๋“ค์–ด์ง€๋ฉด ์ˆ˜์ •ํ•„์š”)
- ํŠธ๋ž™ ์„น์…˜์„ ๋‚˜๋ˆŒ ๋•Œ, ํŒŒํ˜•์ด ์ด์ƒํ•˜๊ฒŒ ๋‚˜๋ˆ„์–ด์ง€๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •.
  trackStartTime, channelStartTime ์„ค์ •๋กœ์ง ์ˆ˜์ •ํ•˜์—ฌ ํ•ด๊ฒฐ

* refactor: [FE] AudioTrackSection ๋ฆฌํŒฉํ† ๋ง

- ํƒ€์ž… ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ SectionDataType ๋ถ„๋ฆฌ
- CursorMode๋ฅผ subscribeํ•˜์—ฌ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜๋„๋ก ์ˆ˜์ •
- ํ•จ์ˆ˜ ๋„ค์ด๋ฐ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณ€๊ฒฝ ๋ฐ ์ž‘์€ ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ

* refactor: [FE] AudioTrack ๋ฆฌํŒฉํ† ๋ง

- TrackSection ๋ชจ๋ธ parsedChannel ์ •๋ณด ์‚ญ์ œ
- ์†Œ์Šค๋ฆฌ์ŠคํŠธ์—์„œ ๋“œ๋ž˜๊ทธ์•ค๋“œ๋ž์œผ๋กœ ์ƒˆ๋กœ์šด ํŠธ๋ž™์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๋น„์ฆˆ๋‹ˆ์Šค
  ๋กœ์ง์„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ด๋™

* refactor: [FE] EditTools ๋ฆฌํŒฉํ† ๋ง

- ํ•จ์ˆ˜ ๋„ค์ด๋ฐ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณ€๊ฒฝ

* refactor: [FE] Controller ๋ฆฌํŒฉํ† ๋ง

- getSectionData ํ•จ์ˆ˜ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด ํ•จ์ˆ˜ํ˜•์œผ๋กœ
  ๊ธฐ๋Šฅ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ

* fix: [FE] ๋จธ์ง€๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ ๋ฒ„๊ทธ ์ˆ˜์ • (#119)

- PlaybackTools ๋ฆฌ๋ Œ๋”๋ง์„ ํ†ตํ•œ ํ”„๋กœํผํ‹ฐ ์ฐธ์กฐ ๋ฌธ์ œ ํ•ด๊ฒฐ
- Controller ํ•จ์ˆ˜ getSourceBySourceId ์ถ”๊ฐ€, SpliCommand ์ˆ˜์ • ์‚ฌํ•ญ ๋ฐ˜์˜

* feat: [FE] AudioMeter ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#120)

* feat: [FE] AudioUtil getDecibel() ๊ตฌํ˜„

- analyser์˜ getFloatTimeDomainData๋ฅผ Decibel๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ๊ตฌํ˜„

* feat: [FE] AudioMeter ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- ํ˜„์žฌ ์žฌ์ƒ์ค‘์ธ volume์— ๋”ฐ๋ผ ๋ฐ˜์‘ํ•˜๋Š” AudioMeter ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
- ์ตœ๋Œ€ -72๊นŒ์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๊ณ , ๋ฐฑ๋ถ„์œจ๋กœ ๋‹ค๋ฅธ gradient ์ปฌ๋Ÿฌ๋ฅผ
  ๋จน์˜€์Šต๋‹ˆ๋‹ค.
  - ์Šคํฌ๋กค ๊ธฐ๋Šฅ์ด ๋‹ค ๊ตฌํ˜„๋˜๋ฉด  ๋‚˜์ค‘์— canvas๋กœ ๋ฐ˜์‘ํ˜•์œผ๋กœ ๊ตฌํ˜„ํ•ด๋„ ๋  ๊ฒƒ
    ๊ฐ™์Šต๋‹ˆ๋‹ค.

* style: [FE] AudioMeter style ์ ์šฉ

- decibel-Marekr๋Š” decibel์ด 100%๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด -10px ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] components/index.js, Main.js์— AudioMeter ์ ์šฉ

- index.js์™€ Main ์ปดํฌ๋„ŒํŠธ์— AudioMeter ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] PlayBackTools์˜ setInterval ์ˆ˜์ •

- setInterval๋กœ ์žฌ์ƒ์ค‘์ธ ์˜ค๋””์˜ค ์ •๋ณด๋กœ AudioMeter์˜ style์„ ์ง€์†์ ์œผ๋กœ
  ๋ณ€๊ฒฝํ•˜๋„๋ก ๊ตฌํ˜„
  - ๋‚˜์ค‘์— AudioContext๋ฅผ ๋”ฐ๋กœ store์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•ด์•ผ ๋  ๊ฒƒ
    ๊ฐ™์Šต๋‹ˆ๋‹ค.
  - ํ˜„์žฌ ๊ฑด๋„ˆ๋›ฐ๊ธฐ๋กœ audioContext๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด AudioMeter์— ์ ์šฉ๋˜์ง€ ์•Š๋Š”
    ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ store ๋ฆฌํŒฉํ† ๋ง์ด ๋๋‚˜๋ฉด ํ•ด๊ฒฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Co-authored-by: Woojin Shin <[email protected]>

close #17

* feat: [FE] ๊ตฌ๊ฐ„ ์ด๋™ํ•˜๊ธฐ (๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ) ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#122)

* feat: [FE] MoveCommand ์ƒ์„ฑ

- ๋“œ๋ž˜๊ทธํ•˜์—ฌ trackSection์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” MoveCommand๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
  - dragstart ํ•  ๋•Œ์˜ ์ปค์„œ ์‹œ๊ฐ„์—์„œ trackStartTime์„ ๋นผ์ค€ ์ฐจ์ด๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  - ๊ทธ๋Ÿฐ ํ›„ drop์‹œ์˜ ์ปค์„œ ์‹œ๊ฐ„์—์„œ ๋นผ์ค€ ์ฐจ์ด๋ฅผ ๋‹ค์‹œ ๋นผ์ค€๊ฒŒ
    newTrackStartTime์ž…๋‹ˆ๋‹ค.
  - checkEnterTrack์€ ์•„์ง ๋ฏธ๊ตฌํ˜„ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค!

* feat: [FE] audioTrack ๊ด€๋ จ eventType ์ƒ์„ฑ

- AUDIO_TRACK_MULTIPLE๊ณผ AUDIO_TRACK_AREA_MULTIPLE ํƒ€์ž…์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜ ์‚ญ์ œ

- ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜๋ฅผ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] ๋„ˆ๋น„์˜ ์ฐจ๊ฐ€ ํ•ญ์ƒ ์–‘์ˆ˜๊ฐ€ ๋˜๋„๋ก ์ˆ˜์ •

- ๋„ˆ๋น„์˜ ์ฐจ๊ฐ€ ํ•ญ์ƒ ์–‘์ˆ˜๊ฐ€ ๋˜๋„๋ก Math.abs ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] drop ์ด๋ฒคํŠธ ์ƒ์„ฑ

- dropAudioTrackListener
  - ํ˜„์žฌ ์ปค์„œ์˜ ์œ„์น˜๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  - ์ปค์„œ ์œ„์น˜์˜ ์‹œ๊ฐ„๊ฐ’์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  - ํ•„์š”ํ•œ ์ธ์ž๋“ค์„ moveCommand์— ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค.

- audio-track-area์— data-track-id๋ฅผ ์ถ”๊ฐ€ํ•ด์คฌ์Šต๋‹ˆ๋‹ค.

* feat: [FE] dragstart ์ด๋ฒคํŠธ ํ•จ์ˆ˜ ์ƒ์„ฑ

- ๋“œ๋ž˜๊ทธ๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๋“œ๋ž˜๊ทธ ์‹œ์ž‘์‹œ ์ปค์„œ ์œ„์น˜๋ฅผ ๊ตฌํ•˜๊ณ  ๊ทธ๋•Œ์˜ ์‹œ๊ฐ„๊ฐ’์„ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๊ทธ๋Ÿฐ๋’ค ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋“ค์„ dataTransfer๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•ด์คฌ์Šต๋‹ˆ๋‹ค.

* feat: [FE] moveCommand ํ•จ์ˆ˜ ์ถ”๊ฐ€

- moveCommand๋ฅผ ์‹คํ–‰ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
- getSource์™€ getTrackSection ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  - ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๊ฐ€ ์žˆ์–ด ๋ถ„๋ฆฌํ•˜์—ฌ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

* fix: [FE] ์Šคํฌ๋กค ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋กœ ๋ฐœ์ƒํ•œ ๋ฒ„๊ทธ ์ˆ˜์ • (#121)

* feat: [FE] ํŠธ๋ž™ ํŒŒํ˜• ๋™์ ์ธ ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ ์ ์šฉ

- ํŠธ๋ž™ ํŒŒํ˜•์„ ๋ธŒ๋ผ์šฐ์ €์˜ ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋„๋ก ๊ตฌํ˜„

* feat: [FE] store maxTrackPlayTime ์ •์˜

- ์žฌ์ƒ๋ฐ”์˜ ์‹œ๊ฐ„์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ€ํ‹ฐํŠธ๋ž™์—์„œ ์ตœ๋Œ€ ์žฌ์ƒ์‹œ๊ฐ„์„
  store์— ์ •์˜

* feat: [FE] Controller maxTrackPlayTime ๋ณ€๊ฒฝ ํ•จ์ˆ˜ ์ถ”๊ฐ€

- ์ตœ๋Œ€ ํŠธ๋ž™ ์žฌ์ƒ์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ์œ„ํ•œ changeMaxTrackPlayTime ํ•จ์ˆ˜ ์ถ”๊ฐ€

* refactor: [FE] ํŠธ๋ž™ ์˜์—ญ ๋ฐ˜์‘ํ˜• ์‚ฌ์ด์ฆˆ ์ ์šฉ

- AudioTrack ์ปดํฌ๋„ŒํŠธ์˜ ํŠธ๋ž™ ์˜์—ญ์„ ์ตœ๋Œ€ ํŠธ๋ž™ ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ ๋ฐ˜์‘ํ˜•
  ์œผ๋กœ ๋ฆฌ์‚ฌ์ด์ง• ์ ์šฉ

* refactor: [FE] ๋ฉ”์ธ์ปดํฌ๋„ŒํŠธ ํŠธ๋ž™ ์Šคํฌ๋กค ์˜์—ญ ์ˆ˜์ •

- ํŠธ๋ž™ ์Šคํฌ๋กค ์˜์—ญ์„ ์žฌ์ƒ๋ฐ”๋„ ํฌํ•จํ•˜๋„๋ก ์ˆ˜์ •

* refactor: [FE] ์žฌ์ƒ๋ฐ” ๋™์  ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ ์ ์šฉ ๋ฐ ์ฝ”๋“œ๋ฆฌํŒฉํ† ๋ง

- ํŠธ๋ž™์˜ ์ตœ๋Œ€์‚ฌ์ด์ฆˆ ๋ฐ ์ตœ๋Œ€์žฌ์ƒ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์žฌ์ƒ๋ฐ”๊ฐ€ ๋™์ ์œผ๋กœ
  ๋ Œ๋”๋ง๋˜๋„๋ก ์ˆ˜์ •
- ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜ ๋„ค์ด๋ฐ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณ€๊ฒฝ

* style: [FE] TimeInfo ๋ฐ˜์‘ํ˜• ์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ

* feat: [FE] store currentScrollAmount ์ •์˜

- ์Šคํฌ๋กค์— ๋”ฐ๋ฅธ ์žฌ์ƒ๋ฐ” ์ปค์„œ ์‹œ๊ฐ„ ์‹ฑํฌ๋ฅผ ๋งž์ถ”๊ธฐ์œ„ํ•ด ์Šคํฌ๋กคํ•œ ์–‘(pixel)
  ์ƒํƒœ์œ ์ง€ ์ถ”๊ฐ€

* refactor: [FE] ZoomBar ํ˜„์žฌ ์Šคํฌ๋กค์–‘์„ ์ƒํƒœ์œ ์ง€ ํ•˜๋„๋ก ์ˆ˜์ •

- ํ˜„์žฌ ์Šคํฌ๋กค์–‘์„ ์ƒํƒœ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ZoomBar์—์„œ Controller๋ฅผ ํ™œ์šฉํ•˜์—ฌ
  ์Šคํฌ๋กค์‹œ ์Šคํฌ๋กค์–‘์„ store์— ์—…๋ฐ์ดํŠธ

* refactor: [FE] TimeUtil / WidthUtil ๋ฆฌํŒฉํ† ๋ง

- ํŠธ๋ž™์˜ ์žฌ์ƒ์‹œ๊ฐ„ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ์ปค์„œ ์‹œ๊ฐ„๊ณ„์‚ฐ์„ ์œ„ํ•ด ์žฌ์ƒ์‹œ๊ฐ„์„ 300์ดˆ ๊ณ ์ •์ด ์•„๋‹Œ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •
- ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜ ๋„ค์ด๋ฐ ๋ช…ํ™•ํ•˜๊ฒŒ ์ˆ˜์ •
- Util ์ฝ”๋“œ ์ˆ˜์ •์œผ๋กœ ์ธํ•œ Util ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”  ๊ฐ ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ ์ˆ˜์ •

* refactor: [FE] ์žฌ์ƒ๋ฐ” playTime ๋ฐ˜์‘ํ˜• ์‚ฌ์ด์ฆˆ ์ ์šฉ

- ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ ์žฌ์ƒ๋ฐ”์˜ playTime ๋ฐ˜์‘ํ˜•์œผ๋กœ ์‚ฌ์ด์ฆˆ ์กฐ์ ˆ
- playTime์ด ๋ฐ˜์‘ํ˜•์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด์„œ ์ปค์„œ ํƒ€์ž„ ๊ณ„์‚ฐ๋„ ๋ณ€๊ฒฝ๋œ ์‚ฌ์ด์ฆˆ์— ๋งž๊ฒŒ
  ๋ณด์—ฌ์ฃผ๋„๋ก ์ˆ˜์ •

* fix: [FE] ํŠธ๋ž™์„น์…˜ cutLine ์Šคํฌ๋กค์— ๋”ฐ๋ผ ์œ„์น˜ ์กฐ์ •

- ์Šคํฌ๋กค์‹œ ํŠธ๋ž™์„น์…˜์˜ cutLine์ด ์œ„์น˜๊ฐ€ ์กฐ์ •๋˜์ง€ ์•Š๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •

* refactor: [FE] SplitCommand ๋‚˜๋ˆ„๊ธฐ ๋กœ์ง ์ˆ˜์ •

- splitCommand ๋‚˜๋ˆ„๊ธฐ ๋กœ์ง ๋™์ž‘ ๋ฒ„๊ทธ ์ˆ˜์ •์ค‘

* fix: [FE] ์˜ค๋””์˜ค ๋ฏธํ„ฐ ์ถœ๋ ฅ ๋ฒ„๊ทธ ์ˆ˜์ • (#123)

- ์Œ์•… ์žฌ์ƒ์‹œ ์˜ค๋””์˜ค๋ฏธํ„ฐ ์ถœ๋ ฅ ๋ฒ„๊ทธ ์ˆ˜์ •
- ํ•จ์ˆ˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

* feat: [FE] ๋‹จ์ถ•ํ‚ค ๊ธฐ๋Šฅ, ์žฌ์ƒ ์ค‘ ์ปค์„œ ํด๋ฆญ ์‹œ ์›ํ•˜๋Š” ์œ„์น˜์—์„œ ์‹œ์ž‘, solo/mute ๊ธฐ๋Šฅ ์ ์šฉ (#124)

* chore : [FE] audioStartTime ์‚ญ์ œ์™€ channelStartTime ์‚ฌ์šฉ

- trackSection์—์„œ audioStartTime์„ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.
- channelStartTime์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* chore : [FE] ์ฃผ์„ ์‚ญ์ œ

- subscribe ๋ถ€๋ถ„์˜ ์ฃผ์„์„ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : [FE] ์ฑ„๋„ ์‚ญ์ œ ๋ฐ ์ถ”๊ฐ€์™€ solo, mute ๊ด€๋ จ

- CURRENT_POSITION_ZERO_CHANNEL ์‚ญ์ œ
- play, pause ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ PLAY_OR_PAUSE_CHANNEL ์ถ”๊ฐ€
- solo ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ SOLO_CHANNEL ์ถ”๊ฐ€
- solo, mute ํด๋ฆญ ์‹œ ์ƒ‰์ƒ ๋ณ€๊ฒฝ

* feat : [FE] play/pause ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ, solo ์œ„ํ•œ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

- changePlayPauseIcon์œผ๋กœ ์ƒํƒœ์— ๋”ฐ๋ผ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ
- soloPlay๋กœ ์ „์ฒด solo ์„ ํƒ ์ƒํƒœ ๋ณ€๊ฒฝ

* feat : [FE] ๋‹จ์ถ•ํ‚ค ํ•จ์ˆ˜ ์ •์˜

- Controller์— ๋‹จ์ถ•ํ‚ค์—์„œ ์‚ฌ์šฉํ•  ํ•จ์ˆ˜ ์ •์˜.
- playbackTool์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

* feat : [FE] ์žฌ์ƒ ์ค‘ ์ปค์„œ๋กœ ํด๋ฆญํ•œ ๊ณณ์—์„œ ๋ฐ”๋กœ ์žฌ์ƒ

- ์žฌ์ƒ ์ค‘์— ์ปค์„œ๋กœ ํด๋ฆญํ•œ ๋งˆ์ปค ์œ„์น˜์—์„œ ๋‹ค์‹œ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ๋Š”
  audioCursorPlay ํ•จ์ˆ˜ ํ˜ธ์ถœ.
- play ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋จ.

* chore : [FE] updateMarkerPosition ๊ณ ๋ ค์‚ฌํ•ญ

- ํ•จ์ˆ˜๊ฐ€ ๋ฐ›์•„์˜จ ๊ฐ’์ด 0์ผ ๋•Œ 0์œผ๋กœ ๊ฐ’์„ ๋ฐ”๊พธ๊ณ  0์ด ์•„๋‹ ๋•Œ๋Š” ์ด์ „ ๊ฐ’์—
  ๋”ํ•ด๋‚˜๊ฐ€๋Š” ํ˜•์‹.
- ์˜ค๋ฅธ์ชฝ ๋์œผ๋กœ ์˜ฎ๊ธธ ๋•Œ๋„ ๋”ํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์ด ๋˜์–ด ์ˆ˜์ •์ด ํ•„์š”. ํ˜„์žฌ
  ๋งˆ์ง€๋ง‰ ์œ„์น˜ ๊ด€๋ จํ•ด์„œ ์Šคํฌ๋กค๊ณผ ๊ด€๋ จํ•ด ์ˆ˜์ •์ด ํ•„์š”ํ•ด๋ณด์—ฌ ๋ฉ”๋ชจ๋งŒ ํ•ด ๋‘ .

* feat : [FE] PlaybackTools ๊ธฐ๋Šฅ๊ด€๋ จ ๋ถ€๋ถ„ ์ด๋™

- PlaybackToolClass๋กœ ์˜ฎ๊ฒจ controller์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ.
- ์ •์ง€์™€ ๋ฐ˜๋ณต์„ ์ œ์™ธํ•œ ๋ชจ๋“  ํ‚ค๋Š” ๋‹จ์ถ•ํ‚ค๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
- mute, solo์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ง€์—ญ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.

* feat : [FE] ๋ฐ˜๋ณต๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์ƒ‰์ƒ ๋ณ€ํ™”

- ๋ฐ˜๋ณต ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ƒ‰์ƒ ๋ณ€ํ™”
- ํ•œ ๋ฒˆ ํด๋ฆญ ์‹œ ์ดˆ๋ก์ƒ‰, ๋‹ค์‹œ ํด๋ฆญ ์‹œ ํฐ์ƒ‰์œผ๋กœ ๋Œ์•„์˜ด.
- store์— isRepeat ์ถ”๊ฐ€
- playbackTools์—์„œ IS_REPEAT_CHANNEL์„ ๊ตฌ๋… ์ค‘.
- isRepeat ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๋•Œ publish ๋˜์–ด ์ƒํƒœ ์ „๋‹ฌ.

* feat : [FE] ๋ฐ˜๋ณต ์žฌ์ƒ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์‹œ์ž‘ ์œ„์น˜ ๋ณ€๊ฒฝ

- ๋ฐ˜๋ณต์žฌ์ƒ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‹œ์ž‘ ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ์žฌ์ƒ, ์ผ์‹œ์ •์ง€ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋ฐ˜๋ณต์žฌ์ƒ ๋ฒ„ํŠผ์˜ ์ƒ‰์ƒ์ด ์ดˆ๊ธฐํ™”๋˜๋Š” ๋ฌธ์ œ๊ฐ€
  ์žˆ์Šต๋‹ˆ๋‹ค.

* style : [FE] ๋ฐ˜๋ณต ์žฌ์ƒ ๋ฒ„ํŠผ green color

- ํด๋ฆญ ์‹œ green color๋กœ ๋ณ€๊ฒฝ๋˜๋„๋ก scss์— class๋ฅผ ์ถ”๊ฐ€.

* chore : [FE] ์ฃผ์„ ์‚ญ์ œ

- PlaybackTools์—์„œ ๊ณ ๋ฏผํ•˜๋˜ ํ”์ ์ด ๋‹ด๊ธด ์ฃผ์„์„ ์ง€์› ์Šต๋‹ˆ๋‹ค.

* refactor : [FE] Handler Listener๋กœ ๋ณ€๊ฒฝ

- AudioTrackOption์—์„œ Handler๋กœ ์“ฐ์ธ ๋ถ€๋ถ„์„ Listener๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

Co-authored-by: Woojin Shin <[email protected]>

 close #109, close #108, close #106, close #104

* fix: [FE] Marker ์ด๋™ ๋ฐ AudioMeter ๋ฒ„๊ทธ ํ•ด๊ฒฐ (#125)

- ๋ณ€๊ฒฝ๋œ ํ•จ์ˆ˜ ์ ์šฉ(๋„ค์ด๋ฐ, ์ธ์ž)
- PlaybackToolsClass์˜ ๋ชจ๋“ˆํ™”๋กœ AudioMeter ๊ด€๋ จ ์‚ญ์ œ๋œ ๋กœ์ง ์ถ”๊ฐ€

* Update README.md

* refactor: [FE] Solo ๋‹ค์ค‘ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •, ์˜ค๋””์˜ค ๋ฏธํ„ฐ ๋ฉˆ์ถค ํ˜„์ƒ ์ˆ˜์ • (#126)

* refactor : [FE] ๋ณ€์ˆ˜ ๋ช… ์ˆ˜์ •

- ret์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ ๋ช…ํ™•ํ•˜์ง€ ์•Š์•˜๋˜ ๋ณ€์ˆ˜ ๋ช…์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat : [FE] Solo ๋‹ค์ค‘ ์„ ํƒ ๊ธฐ๋Šฅ

- Solo ๊ธฐ๋Šฅ์„ ๋‹ค์ค‘์„ ํƒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •.
- Solo ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฐ ๊ฒฝ์šฐ ์žฌ์ƒ๋จ. ๋ˆŒ๋ฆฌ์ง€ ์•Š์€ ํŠธ๋ž™์€ ์žฌ์ƒ ์•ˆ๋จ.

* fix : [FE] ์˜ค๋””์˜ค ๋ฏธํ„ฐ ๋ฉˆ์ถค ๋ฌธ์ œ ํ•ด๊ฒฐ

- createAndConnectAnalyser ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋‹ค์‹œ ์žฌ์ƒํ•  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ.
- ์ƒˆ๋กญ๊ฒŒ analyser๋ฅผ ๋งŒ๋“ค๊ณ  connect ํ•ด ์คŒ.

* refactor : [FE] !=๋ฅผ !==๋กœ ๋ณ€๊ฒฝ

- ๋ช…ํ™•ํ•˜๊ฒŒ !== ์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor : [FE] repeat ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ƒ‰ ๋ณ€๊ฒฝ๋กœ์ง ์ˆ˜์ •

- channel์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ์‚ญ์ œ.
- ๊ด€๋ จํ–ˆ๋˜ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜ ์‚ญ์ œ.
- store์˜ isRepeat ๊ฐ’์„ ํ™•์ธํ•ด render ์‹œ์— ๊ทธ๋ ค์ฃผ๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝ.

* feat: [FE] ์˜ค๋””์˜ค ๊ตฌ๊ฐ„ ์ด๋™ ๊ตฌํ˜„, ์†Œ์Šค๋ฆฌ์ŠคํŠธ ํŒŒํ˜• ์ถ”๊ฐ€ ๋ฆฌํŒฉํ† ๋ง (#128)

* feat: [FE] SectionDragStartData Model ๊ตฌํ˜„

- DragStart ์ด๋ฒคํŠธ์—์„œ transferData ๋Œ€์‹  store์—์„œ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ
  SectionDragStartData Model ๊ตฌํ˜„
  - dragover์—์„œ getData๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์„œ ์ถ”๊ฐ€
- SectionDragStartData์—๋Š” TrackSection, dragstart ๋‹น์‹œ ์ปค์„œ ์œ„์น˜, x์ขŒํ‘œ
  ๊ฐ’ ๊ณ„์‚ฐ์„ ์œ„ํ•œ offsetLeft๊ฐ€ ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] MoveCommand ์œ ํšจ์„ฑ๊ฒ€์‚ฌ ์กฐ๊ฑด ๋ณ€๊ฒฝ ๋ฐ ๋ชจ๋“ˆํ™”

- ๊ธฐ์กด์˜ ์กฐ๊ฑด๋ฌธ์— ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•ด์„œ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๊ตฌ๊ฐ„ ์ด๋™ํ•˜๊ธฐ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์ธ์ง€ ํŒ๋‹จํ•˜๋Š” checkEnterTrack()
  ํ•จ์ˆ˜๋ฅผ ValidUtil๋กœ ๋ชจ๋“ˆํ™” ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] TRACK_CHANEL ์ฑ„๋„ publish ์‚ญ์ œ

- ํ•„์š”์—†๋Š” publish ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] SectionDragStartData storeType ์ถ”๊ฐ€

* refactor: [FE] ๋‹จ์ถ•ํ‚ค ์„ค๋ช… ์ˆ˜์ •

- redo์™€ undo์˜ ๋‹จ์ถ•ํ‚ค ์ •๋ณด๊ฐ€ ๋’ค๋ฐ”๊ปด์„œ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค....

* feat: [FE] ValidUtil export ์ถ”๊ฐ€, eventType ์ถ”๊ฐ€

- ๊ตฌ๊ฐ„ ์ด๋™ํ• ๋•Œ ์ž”์ƒ์„ ์œ„ํ•œ AUDIO_TRACK_AFTERIMAGE_DROP :ใ…ˆEventType ์ถ”๊ฐ€

* style: [FE] AudioMeter console.log ์ œ๊ฑฐ

* style: [FE] AudioTrack ์ž”์ƒํšจ๊ณผ style ์ ์šฉ

- ๋ถ€๋ชจ์š”์†Œ์˜ padding๊ฐ’์— ๋งž์ถฐ์„œ top๊ณผ height๋ฅผ ์กฐ์ ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
- padding๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด height์™€ top๋„ ๋ณ€๊ฒฝ๋˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

* feat: [FE] AudioTrack ์„น์…˜์˜ ์‹œ๊ฐ„์— ๋งž๋Š” ์œ„์น˜ ์ ์šฉ

- initPosition() ํ•จ์ˆ˜๋กœ TrackSection๋“ค์˜ ์œ„์น˜๋ฅผ ์‹œ๊ฐ„์— ๋งž๊ฒŒ ๋ณ€๊ฒฝ
  - prevEndOffset์€ ๋ฐ”๋กœ ์ „ section์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ
    ์ดˆ๊ธฐ๊ฐ’์€ 0
  - preEndOffset๊ณผ ํ˜„์žฌ section์˜ trackStartTime์˜ ์ฐจ์ด ๋งŒํผ ์ดˆ๋‹น px
    ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ๊ณฑํ•ด์„œ margin-left์— ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
- afterimage
  - ์˜ค๋””์˜ค ๊ตฌ๊ฐ„์„ AudioTrack์— dragํ–ˆ์„ ๋•Œ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฉด ์ž”์ƒ์ด
    ๋œจ๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  - dragover, dragenter, dragleave๋กœ ์ž”์ƒ์˜ left๊ฐ’๊ณผ width๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜
    display์†์„ฑ์„ ๋‹ค๋ฅด๊ฒŒ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] AudioTrackSetion style ์ˆ˜์ •

- ์ž˜๋ฆฐ ๊ตฌ๊ฐ„๋ผ๋ฆฌ ๊ตฌ๋ถ„์ด ๋˜์ง€ ์•Š์•„์„œ border๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] AudioTrackSection drag ์ด๋ฒคํŠธ ์ ์šฉ

- ๊ธฐ์กด์— dragstart ํ–ˆ์„ ๋•Œ dataTransfer๋กœ ์ •๋ณด๋ฅผ ์ €์žฅํ–ˆ๋Š”๋ฐ dragover
  ์ด๋ฒคํŠธ์—์„œ๋Š” getData๋ฅผ ํ•  ์ˆ˜ ์—†์–ด์„œ store์—์„œ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋„๋ก
  ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
- afterimage๋ฅผ ์œ„ํ•œ dragover ์ด๋ฒคํŠธ ์ถ”๊ฐ€
- drag์—์„œ ์ž์‹  ์œ„์— drop์ด ์•ˆ๋˜๋˜ ๋ฌธ์ œ๋กœ drop ์ด๋ฒคํŠธ๋„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] IconButton ์ปดํฌ๋„ŒํŠธ์— cursor:pointer ์Šคํƒ€์ผ ์ ์šฉ

- IconButton ์ปดํฌ๋„ŒํŠธ๋Š” ๊ธฐ๋ณธ์œผ๋กœ cursor:pointer๋กœ ๋˜๋„๋ก ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] SectionDragStartData ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๊ฒฝ

- ์†Œ์Šค๋ฆฌ์ŠคํŠธ์—์„œ ๋“œ๋ž˜๊ทธํ•œ ๊ฒฝ์šฐ์—๋Š” prevCursorTime์ด ์—†์–ด์„œ null ํƒ€์ž…
  ์ถ”๊ฐ€

* refactor: [FE] DragUtil ๊ตฌํ˜„

- ๊ตฌ๊ฐ„ ์ด๋™ํ•  ๋•Œ dragover, drop์—์„œ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ ๋ชจ๋“ˆํ™” ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] SectionEffectList render() ์ˆ˜์ •

- IconButton ์ปค์Šคํ…€ ์—˜๋ฆฌ๋จผํŠธ ์‚ฌ์šฉ

* refactor: [FE] SourceList ๋“œ๋ž˜๊ทธ์•ค ๋“œ๋กญ ๊ด€๋ จ ํ•จ์ˆ˜ ์ถ”๊ฐ€

- addTrackSectionFromSource()๋ฅผ ์‚ญ์ œํ•˜๊ณ  ํ˜„์žฌ ๋ฐฉ์‹์— ๋งž๊ฒŒ ์ƒˆ๋กœ์šด
  ํ•จ์ˆ˜๋“ค์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
- moveCommand()์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ sectionId -> trackSection์œผ๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ํ˜„์žฌ ์Šคํฌ๋กค ์‹œ๊ฐ„๊ณผ ์œ„์น˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” getCurrentScrollAmount,
  getCurrentScrollTime ํ•จ์ˆ˜ ๊ตฌํ˜„

* refactor: [FE] SourceList MoveCommand ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝ

- SouceList์—์„œ๋„  ๊ตฌ๊ฐ„ ์ด๋™ ๊ธฐ๋Šฅ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ๋กœ์ง์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] PasteCommand, SplitCommand TRACK_CHANNEL ์ฑ„๋„ ์ถ”๊ฐ€

- ์žฌ์ƒ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ผ๊ณ  ๋“ค์–ด์„œ  ์ง€์› ๋˜ TRACK_CHANNEL ์ฑ„๋„์„ ๋‹ค์‹œ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] MoveCommand SourceList ๊ด€๋ จ ์กฐ๊ฑด๋ฌธ ์ถ”๊ฐ€

- SourceList์—์„œ drag๋œ SectionDragStartData๋Š” trackSection์˜ id๊ฐ’์ด
  0์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์–ด์„œ ์กฐ๊ฑด๋ฌธ์œผ๋กœ removeSection์„ ์‹คํ–‰ํ•˜๋„๋ก
  ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

close #70

* feat: [FE] ํŠธ๋ž™ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ปค๋งจ๋“œ ๊ตฌํ˜„ ๋ฐ ๋ฉ”์ธํŽ˜์ด์ง€ ๋ฆฌํŒฉํ† ๋ง (#127)

* fix: [FE] ์Šคํฌ๋กค์‹œ ๊ตฌ๊ฐ„ ๋‚˜๋ˆ„๊ธฐ ๋ฒ„๊ทธ ์ˆ˜์ •

- ์Šคํฌ๋กค์‹œ ๊ตฌ๊ฐ„ ๋‚˜๋ˆ„๊ธฐํ•˜๋ฉด ์Šคํฌ๋กค ์œ„์น˜๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š์•„ ์˜ค์ž‘๋™ ํ•˜๋Š” ๋ฒ„๊ทธ
  ์ˆ˜์ •

* style: [FE] ๋ฉ”์ธํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ๋ฐ ๋ฐ˜์‘ํ˜• ์Šคํƒ€์ผ ์ˆ˜์ •

- ZoomBar, AudioMeter ์œ„์น˜ ์กฐ์ •
- ๋ฉ”์ธํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ๋ฐ˜์‘ํ˜• ์‚ฌ์ด์ฆˆ ์กฐ์ ˆ

* refactor: [FE] iconButton ์ด๋ฒคํŠธ ์œ„์ž„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •

- ๊ธฐ์กด์— ์ด๋ฒคํŠธ ํ‚ค๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์— ๋ชจ๋‘ ์ „๋‹ฌํ•ด์•ผํ•˜๋Š” ๋ฐฉ์‹์—์„œ ์ด๋ฒคํŠธ
  ์œ„์ž„ ๋ฐฉ์‹์œผ๋กœ ์•„์ด์ฝ˜ ๋ฒ„ํŠผ ์ˆ˜์ •

* refactor: [FE] command ๋ฆฌํŒฉํ† ๋ง

- command ๋ชจ๋“ˆ ๋‚ด๋ณด๋‚ด๊ธฐ ๊ด€๋ จ ์—๋Ÿฌ ๋ฐœ์ƒ ์ด์Šˆ ํ•ด๊ฒฐ
- ๋ชจ๋“ˆ์„ ๋‚ด๋ณด๋‚ผ ๋•Œ export default๋กœ ๋‚ด๋ณด๋‚ด์„œ ์ฐธ์กฐํ•˜๋Š” ๊ณณ์—์„œ
  destructureํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •
- Command ์ธํ„ฐํŽ˜์ด์Šค ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ

* refactor: [FE] Main ์ปดํฌ๋„ŒํŠธ ๋ฆฌํŒฉํ† ๋ง

- ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ๋ Œ๋”๋ง ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด Main ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜์œ„
  ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์กฐํ•ฉ์œผ๋กœ ๋ถ„๋ฆฌ

* style: [FE] Main ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ๋กœ ์ธํ•œ ์Šคํƒ€์ผ ์ˆ˜์ •

- ๋ณธ๋ฌธ ๋‚ด์šฉ

* feat: [FE] ์ด๋ฒคํŠธ ํƒ€์ž… ์ •์˜ ์ถ”๊ฐ€

- TrackAddMenu click ์ด๋ฒคํŠธ ํ‚ค ์ถ”๊ฐ€
- TrackScroll List scroll ์ด๋ฒคํŠธ ํ‚ค ์ถ”๊ฐ€ ๋ฐ scroll ์ด๋ฒคํŠธ ์ถ”๊ฐ€

* refactor: [FE] Main ์ปดํฌ๋„ŒํŠธ์—์„œ TrackList, TrackOptionList ๋ถ„๋ฆฌ

- ํŠธ๋ž™ ์ถ”๊ฐ€๋กœ ์ธํ•œ ์ „์ฒด ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ๋ Œ๋”๋ง์ด ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌ
- ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ๋กœ ์ธํ•œ ์Šคํƒ€์ผ ์ˆ˜์ •

* feat: [FE] StoreType ์ถ”๊ฐ€ ์ •์˜

- trackList ์—…๋ฐ์ดํŠธ๋กœ ์ •๋ณด๋ฅผ ์œ„ํ•œ  TRACK_LIST_CHANNEL ์ถ”๊ฐ€

* feat: [FE] AddTrackCommand ์ •์˜

- ํŠธ๋ž™ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ปค๋งจ๋“œ ์ •์˜
- excute, undo์‹œ ํŠธ๋ž™์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๊ณ , TRACK_LIST_CHANNEL์—
  publishํ•˜์—ฌ trackList ๋ณ€๊ฒฝ๋‚ด์šฉ์„ ๋ Œ๋”๋ง ํ•˜๋„๋ก ๊ตฌํ˜„

* feat: [FE] CommandController ์ •์˜

- Command ๊ด€๋ จ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” CommandController ์ •์˜
- ๊ธฐ์กด Controller์˜ ์—ญํ• ์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ Command ๊ด€๋ จ ์ฑ…์ž„์„
  CommandController๋กœ ๋ถ„๋ฆฌ

* feat: [FE] AudioTrackMenu ํŠธ๋ž™ ์ถ”๊ฐ€ํ•˜๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ํŠธ๋ž™ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด AddTrackCommand๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ๊ตฌํ˜„
- ํŠธ๋ž™ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ์ธํ•œ ํŠธ๋ž™ ๋ฆฌ๋ Œ๋”๋ง์‹œ ํŠธ๋ž™ ๋ฆฌ์‚ฌ์ด์ฆˆ  ๋กœ์ง ๋ณ€๊ฒฝ

* refactor: [FE] Controller ๋ฆฌํŒฉํ† ๋ง

- Controller์—์„œ Command ๊ด€๋ จ ํ•จ์ˆ˜ CommandController๋กœ ์ด๋™

* fix: [FE] ํŠธ๋ž™ ๋‚˜๋ˆ„๊ธฐ redo์‹œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฉˆ์ถ”๋Š” ๋ฒ„๊ทธ ํ•ด๊ฒฐ

- ์ƒ์„ฑ์žํ•จ์ˆ˜ ๋‚ด์—์„œ element๋ฅผ ํ•œ๋ฒˆ ์ฐธ์กฐํ•˜๊ณ , ์ดํ›„์— ๋ฆฌ๋ Œ๋”๋ง์„ ํ†ตํ•ด
  ์ฐธ์กฐ๋ฅผ ์žƒ์–ด๋ฒ„๋ ค์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* fix: [FE] ํŠธ๋ž™ ์ด๋™ํ•˜๊ธฐ ๋ฐ ์žฌ์ƒ๋ฒ„ํŠผ ๋ฏธ๋™์ž‘ ๋ฒ„๊ทธ ์ˆ˜์ • (#129)

- ์ตœ์ดˆ ์†Œ์Šค์—์„œ ํŠธ๋ž™์œผ๋กœ ๋“œ๋ž˜๊ทธ์•ค๋“œ๋žํ•  ๋•Œ, ์œ„์น˜๊ฐ’์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๋ฒ„๊ทธ๋ฅผ
  initPosition์œ„์น˜ ๋ฐ trackWidth ์žฌ๊ณ„์‚ฐ์„ ํ†ตํ•ด ๋ฒ„๊ทธ
  ์ˆ˜์ •
- playBackTools์—์„œ ์•„์ด์ฝ˜ ๋ฒ„ํŠผ delegation ์ ์šฉํ•˜์—ฌ ๋ฒ„๊ทธ ์ˆ˜์ •

* feat: [FE] ํŠธ๋ž™ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ปค๋งจ๋“œ ์ˆ˜์ • ๋ฐ ํŠธ๋ž™ ์‚ญ์ œํ•˜๊ธฐ ์ปค๋งจ๋“œ ๊ตฌํ˜„ (#132)

* refactor: [FE] ํŠธ๋ž™ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ปค๋งจ๋“œ trackIndex๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋กœ์ง ๋ณ€๊ฒฝ

- store์— ํŠธ๋ž™ ๋ฆฌ์ŠคํŠธ, ํŠธ๋ž™ ์ธ๋ฑ์Šค ์„ค์ • ํ•จ์ˆ˜ ์ •์˜
- controller์— ํŠธ๋ž™ ๋ฆฌ์ŠคํŠธ์—์„œ pop๊ณผ ๋™์‹œ์— ํŠธ๋ž™ ์ธ๋ฑ์Šค๋„ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๋Š”
  ํ•จ์ˆ˜ ์ •์˜
- AddTrackCommand ์ธ๋ฑ์Šค๋ฅผ ๊ณ ๋ คํ•˜์—ฌ excute, redo ๋กœ์ง ๋ณ€๊ฒฝ

* refactor: [FE] CommandController ์˜คํƒ€ ์ˆ˜์ •

- CommandController ์˜คํƒ€ ์ˆ˜์ • ๋ฐ deleteTrackCommand ์‹คํ–‰ ํ•จ์ˆ˜ ์ถ”๊ฐ€

* feat: [FE] Controller ํŠธ๋ž™๋ฆฌ์ŠคํŠธ push, popํ•จ์ˆ˜ ์ •์˜

- ํŠธ๋ž™ ์ถ”๊ฐ€ํ•˜๊ธฐ, ์‚ญ์ œํ•˜๊ธฐ ์‹œ ์ธ๋ฑ์Šค๋ฅผ ๊ณ ๋ คํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋ž™๋ฆฌ์ŠคํŠธ pop, push
  ํ•จ์ˆ˜ ์ •์˜

* feat: [FE] ํŠธ๋ž™ ์‚ญ์ œํ•˜๊ธฐ ์ปค๋งจ๋“œ ์ •์˜

- ํŠธ๋ž™์„ ์‚ญ์ œํ•˜๋Š” ์ปค๋งจ๋“œ ์ •์˜

* feat: [FE] ํŠธ๋ž™ ์˜ต์…˜ ๋ฉ”๋‰ด ์‚ญ์ œํ•˜๊ธฐ ๋ฒ„ํŠผ ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”

- ์‚ญ์ œํ•˜๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ deleteTrackCommand ์‹คํ–‰ํ•˜๋„๋ก ๋ฆฌ์Šค๋„ˆ ์ถ”๊ฐ€

* feat: [FE] Controller ํŠธ๋ž™ ์ œ๊ฑฐ, ํŠธ๋ž™ ์‚ฝ์ž… ์ •์˜

- ํŠธ๋ž™ ๋ฆฌ์ŠคํŠธ์—์„œ ํŠธ๋ž™ ID๋กœ ์‹๋ณ„๋˜๋Š” ํŠธ๋ž™์„ ์ œ๊ฑฐํ•˜๋Š” ํ•จ์ˆ˜ ์ •์˜
- ํŠธ๋ž™ ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ฝ์ž…ํ•˜๊ณ ์ž ํ•˜๋Š” ์ธ๋ฑ์Šค ๊ฐ’์„ ํ†ตํ•ด ํ•ด๋‹น ์œ„์น˜์—
  ์‚ฝ์ž…ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜ ์ •์˜

* refactor: [FE] ํŠธ๋ž™ ์‚ญ์ œํ•˜๊ธฐ ์ปค๋งจ๋“œ ๋กœ์ง ๋ณ€๊ฒฝ

- ํŠธ๋ž™ ์‚ญ์ œํ•˜๊ธฐ ์ปค๋งจ๋“œ ๋กœ์ง์„ delete option ํด๋ฆญ ์‹œ ํ•ด๋‹น ํŠธ๋ž™์„
  ์‚ญ์ œํ•˜๋„๋ก ๋กœ์ง ๋ณ€๊ฒฝ

* fix: [FE] ํŠธ๋ž™ ์‚ญ์ œํ•˜๊ธฐ ์ปค๋งจ๋“œ undo ์˜ค์ž‘๋™ ๋ฒ„๊ทธ ํ•ด๊ฒฐ

- Controller insertTrack ๋กœ์ง์„ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ œ ์œ„์น˜์— ์‚ฝ์ž…๋˜๋„๋ก
  ์ฝ”๋“œ ์ˆ˜์ •

* refactor: [FE] ํŠธ๋ž™ ์‚ญ์ œํ•˜๊ธฐ alert ๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€

- ํŠธ๋ž™์ด ์ตœ์†Œ 3๊ฐœ ์ด์ƒ ์กด์žฌํ•˜๋„๋ก ํŠธ๋ž™ ์‚ญ์ œ์‹œ alert ๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€

close #110

* feat: [FE] ๋งˆ์ปค ์ข…๋ฃŒ์‹œ์  ์ด๋™ ๋ฐ ์˜ค๋””์˜ค ๋ฐ˜๋ณต ์žฌ์ƒ ๊ตฌํ˜„, ์•ž์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๋ฒ„๊ทธ ์ˆ˜์ • (#131)

* feat : [FE] ์›ํ•˜๋Š” ์‹œ๊ฐ„์œผ๋กœ ๋งˆ์ปค ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด setMarkerWidth ์ˆ˜์ •

- ๋งจ ๋งˆ์ง€๋ง‰ ๊ฑด๋„ˆ๋›ฐ๊ธฐ, loop์‹œ ๋งˆ์ปค๋ฅผ ์›ํ•˜๋Š” ์‹œ๊ฐ„์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•จ
- number ๋ฐฐ์—ด์„ ๋„˜๊ฒผ์„ ๋•Œ ๋‘ ๋ฒˆ์งธ ๊ฐ’์ด 1์ด๋ฉด ์ฒซ๋ฒˆ์งธ ๊ฐ’์œผ๋กœ
  ํ• ๋‹นํ•˜๋„๋ก ์ˆ˜์ •.

* feat : [FE] ๋งจ ๋’ค๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ์‹œ ๋งˆ์ปค์ด๋™, loop ๊ตฌํ˜„

- ๋งจ ๋’ค๋กœ ๊ฑด๋„ˆ๋›ฐ๋ฉด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” ๋งˆ์ปค ์‹œ๊ฐ„์œผ๋กœ ์ด๋™.
- ๊ตฌ๊ฐ„์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด AudioTrack์— ์žˆ๋˜ calculateTrackWidth ํ•จ์ˆ˜๋ฅผ
  ๋ณต์‚ฌํ•ด ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ํ›„์— ๋”ฐ๋กœ ๋นผ๊ฑฐ๋‚˜ ํ•ด์•ผํ•  ๊ฒƒ.
- loop๋Š” isRepeat์˜ ์ƒํƒœ์™€ markerTime์˜ ์œ„์น˜๋ฅผ ๊ณ„์†ํ•ด์„œ ํŒ๋‹จํ•ด
  ๋™์ž‘ํ•˜๋„๋ก ํ•จ.
- loop๊ฐ€ ๋ผ์žˆ์ง€ ์•Š์„ ๋•Œ๋Š” ๋งˆ์ง€๋ง‰ ์‹œ๊ฐ„์—์„œ ๋ฉˆ์ถค.
- loop์ผ ๋•Œ๋Š” ๋งˆ์ง€๋ง‰ ์‹œ๊ฐ„์—์„œ ๋‹ค์‹œ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ. ํ›„์— loop์˜ start์™€
  endTime์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด ์ˆ˜์ •ํ•„์š”.

close #24, close #29, close #111

* fix: [FE] ํŠธ๋ž™ ์„ ํƒ๊ธฐ๋Šฅ ๊ตฌํ˜„, ์ขŒ์šฐ ๋‹จ์ถ•ํ‚ค ๋ฒ„๊ทธ ์ˆ˜์ •, backend ํ™˜๊ฒฝ ์‚ญ์ œ (#130)

* refactor: [FE] ์žฌ์ƒ์ค‘์— command ์‹คํ–‰ ์•ˆ๋˜๋„๋ก ์ˆ˜์ •

- isPause๋ฅผ ํ™•์ธํ•˜์—ฌ ์žฌ์ƒ์ค‘์— command๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ
- CommandControllers์— executeMoveCommand() ์ถ”๊ฐ€
- excute -> execute๋กœ ๋ณ€๊ฒฝ

* refactor: [FE] moveCommand -> CommandController๋กœ ๋ณ€๊ฒฝ

* style: [FE] excute -> execute๋กœ ๋ณ€๊ฒฝ

- excute -> execute๋กœ ๋ณ€๊ฒฝ

* refactor: [FE] left, right ๋‹จ์ถ•ํ‚ค preventDefault() ์„ค์ •

- left, right keydown์— ์Šคํฌ๋กค์ด ์›€์ง์ด๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

* feat: [FE] ํŠธ๋ž™ ์„ ํƒ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ํŠธ๋ž™์— ์•„๋ฌด ๊ตฌ๊ฐ„๋„ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ํŠธ๋ž™์„ ์„ ํƒํ•ด์„œ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•  ์ˆ˜
  ์žˆ๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„
- AudioTrack ์ปดํฌ๋„ŒํŠธ์— track-select-line ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ํ˜„์žฌ
  store์˜ SelectTrackData๋ฅผ ํ™•์ธํ•˜์—ฌ left, display ์†์„ฑ์„ ๋ณ€๊ฒฝ
- SelectTrackData๋Š” ์–ด๋–ค ํŠธ๋ž™์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ trackId,
  paste command ํ•  ๋•Œ ํ•„์š”ํ•œ  trackStartTime์ธ selectedTime์ด ์ €์žฅ๋˜์–ด
  ์žˆ์Šต๋‹ˆ๋‹ค.
- ํŠธ๋ž™ ์„ ํƒ์€ focus ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋• ์ดˆ๊ธฐํ™” ๋˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๊ณ , ํŠธ๋ž™์˜์—ญ์ด
  ์•„๋‹Œ ๋‹ค๋ฅธ focusList reset ๊ตฌ์—ญ์„ ํด๋ฆญํ•  ๋•Œ๋„ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

* refactor: [FE] PasteCommand์— ํŠธ๋ž™์„ ํƒ ๊ด€๋ จ ์กฐ๊ฑด๋ฌธ ์ถ”๊ฐ€

- ์„ ํƒ๋œ ๊ตฌ๊ฐ„์ด 1๊ฐœ์ด๊ฑฐ๋‚˜ ํŠธ๋ž™์„ ์„ ํƒํ–ˆ์„ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก
  ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] selectTrackData๊ด€๋ จ controller, store ์ˆ˜์ •

- ํŠธ๋ž™์„ ํƒ ๊ด€๋ จ SelectTrackData ๊ด€๋ จ ํ•จ์ˆ˜๋“ค์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
- focus ์„ ํƒ ๊ธฐ๋Šฅ ๊ด€๋ จํ•˜์—ฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ selectTrackData๊ฐ€ reset๋˜๋„๋ก
  ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* chore: [BE] backend ํ™˜๊ฒฝ ์‚ญ์ œ

- ํ”„๋กœ์ ํŠธ ์„ค๊ณ„ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ backend ํ™˜๊ฒฝ ์‚ญ์ œ

Co-authored-by: Woojin Shin <[email protected]>

close #7

* Update README.md

* Update README.md

Co-authored-by: Woojin Shin <[email protected]>
Co-authored-by: pieisland <[email protected]>
Co-authored-by: Jeongeun-Choi <[email protected]>

Week2

04 Dec 03:40
Compare
Choose a tag to compare
v0.2.0

deploy: [FE] 2์ฃผ์ฐจ ๋ฐฐํฌ

Week1

26 Nov 13:15
f6abfaf
Compare
Choose a tag to compare
deploy: 1์ฃผ์ฐจ ๋ฐฐํฌ (#56)

* ์„œ๋ฒ„ ์ •์ ํŒŒ์ผ ์„œ๋น„์Šค ์ถ”๊ฐ€ (#40)

* chore: [FE] ์›นํŒฉ ๋นŒ๋“œ ๊ฒฝ๋กœ ์ˆ˜์ •

์›นํŒฉ ๋นŒ๋“œ ๊ฒฝ๋กœ๋ฅผ ๋ฐฑ์—”๋“œ ์ •์ ํŒŒ์ผ ๊ฒฝ๋กœ๋กœ ์ˆ˜์ •

* chore: [BE] ์„œ๋ฒ„ ์ •์  ํŒŒ์ผ ๋ฏธ๋“ค์›จ์–ด ๋“ฑ๋ก

์ •์ ํŒŒ์ผ ์š”์ฒญ์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฏธ๋“ค์›จ์–ด ๋“ฑ๋ก

close #38

* Update README.md

* Modal ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#41)

* feat: [FE] Modal Close Event ๊ตฌํ˜„

Modal ๋ฐฐ๊ฒฝํ™”๋ฉด์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ์ทจ์†Œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ ธ์„๋•Œ Modal ์ฐฝ์ด ๋‹ซํžˆ๋Š” ํ•จ์ˆ˜๋ฅผ
๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] Modal Style ์ถ”๊ฐ€
 - Modal conent๊ฐ€ ์ •์ค‘์•™์— ์˜ค๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
 - ์ž์ฃผ ์“ฐ์ผ ๊ฒƒ ๊ฐ™์€ ์ƒ‰์ƒ์„ ๋”ฐ๋กœ ๋ณ€์ˆ˜๋กœ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] Modal-content์— display ์ถ”๊ฐ€

class ์ด๋ฆ„์ด modal-content์ธ ์˜์—ญ์— display๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ€์šด๋ฐ ์ •๋ ฌ์„
ํ•˜๋„๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] Modal buttons css ์ถ”๊ฐ€

Modal buttons css ๋‚ด์šฉ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] ์ค‘๋ณต๋œ border ์‚ญ์ œ

์ค‘๋ณต๋œ boorder๋ฅผ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] css ์ •๋ ฌ

css ์ •๋ ฌ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

* fix: [FE] Modal ์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ์„ฑ ๊ณ ๋ คํ•˜์—ฌ ๋‹ค์‹œ ์ž‘์„ฑ

  - modal์˜ title๊ณผ type์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  - modalContents์— ๋ฐ›์€ type์„ ๋„ฃ์–ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  - modal-buttons์—๋„ type์„ ๋„ฃ์–ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.

* feat: [FE] ModalContents Object ์ƒ์„ฑ

  - modal์—์„œ ๋ฐ›์€ type์„ ํ‚ค๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.
  - ํ‚ค๊ฐ’์€ modal ์•ˆ์— ๋„ฃ์„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

* style: class name ์ถ”๊ฐ€

ํ•„์š”ํ•œ class name์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] Modal buttons ๋ถ„๋ฆฌ
  - ํ•˜๋“œ ์ฝ”๋”ฉ์„ ํ•˜์—ฌ ๊ฐ ๋ชจ๋‹ฌ์˜ type์— ๋งž๊ฒŒ ์ถœ๋ ฅ๋˜๋Š” ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

* feat: attributeChangedCallback ํ•จ์ˆ˜ ์ถ”๊ฐ€

attributeChangedCallback ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

close #37

* feat: [FE] Sidebar Source List ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘ (#42)

* <feat>: [FE] Sidebar ์ปดํฌ๋„ŒํŠธ

- sidebar ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
- source list์™€ ์žฌ์ƒ์‹œ๊ฐ„ ์ •๋ณด, ๋‹จ์ถ•ํ‚ค ์ •๋ณด ๋“ฑ์ด ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

* <style>: [FE] Sidebar ์ปดํฌ๋„ŒํŠธ

- sidebar ์ปดํฌ๋„ŒํŠธ์˜ ์Šคํƒ€์ผ์„ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* <feat>: [FE] SourceList ์ปดํฌ๋„ŒํŠธ

- sourcelist ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๊ฐœ๋ณ„ source ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆด ์‹œ ์ •๋ณด๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

* style: [FE] SourceList ์ปดํฌ๋„ŒํŠธ

- sourcelist ์ปดํฌ๋„ŒํŠธ์˜ ์Šคํƒ€์ผ์„ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

close #14

* feat: [FE] Sidebar TimeInfo ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘ (#43)

* <feat>: [FE] Sidebar ์ปดํฌ๋„ŒํŠธ

- sidebar ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
- source list์™€ ์žฌ์ƒ์‹œ๊ฐ„ ์ •๋ณด, ๋‹จ์ถ•ํ‚ค ์ •๋ณด ๋“ฑ์ด ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

* <style>: [FE] Sidebar ์ปดํฌ๋„ŒํŠธ

- sidebar ์ปดํฌ๋„ŒํŠธ์˜ ์Šคํƒ€์ผ์„ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* <feat>: [FE] SourceList ์ปดํฌ๋„ŒํŠธ

- sourcelist ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๊ฐœ๋ณ„ source ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆด ์‹œ ์ •๋ณด๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

* style: [FE] SourceList ์ปดํฌ๋„ŒํŠธ

- sourcelist ์ปดํฌ๋„ŒํŠธ์˜ ์Šคํƒ€์ผ์„ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] TimeInfo ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

- timeinfo ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
- playTime, totalTime, cursorTime์„ 00.00.000 ์œผ๋กœ ์ง€์ •ํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.
  - string์œผ๋กœ ํ•˜์—ฌ ๋ณ€ํ™˜์ด ํ•„์š”ํ•  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.

* style: [FE] TimeInfo ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

- timeinfo ์ปดํฌ๋„ŒํŠธ์˜ style์„ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] Sidebar style ์ˆ˜์ •

- sidebar์— timeinfo๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ css๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] scss ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ฐ ์Šคํƒ€์ผ ์ •๋ ฌ

- scss ํŒŒ์ผ ์ด๋ฆ„์„ ๋ชจ๋‘ style.scss๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
- ์Šคํƒ€์ผ ์ •๋ ฌ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] ์Šคํƒ€์ผ import ์ด๋ฆ„ ๋ณ€๊ฒฝ๊ณผ ๋ฆฌ๋ทฐ ์ ์šฉ

- scss ํŒŒ์ผ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด์„œ import ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๋ฆฌ๋ทฐ ๋‚ด์šฉ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  - sourceList๋ฅผ ํ•˜๋‚˜์˜ string์œผ๋กœ ๋ฌถ๋Š” ๋ถ€๋ถ„์„ ๋ณ„๋„์˜ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌ
  - forEach ๋Œ€์‹  reducer ์‚ฌ์šฉ

Co-authored-by: Woojin Shin <[email protected]>

close #6

* feat: [FE] Source Upload Form ์ปดํฌ๋„ŒํŠธ ๋ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#44)

* feat: [FE] Modal Close Event ๊ตฌํ˜„

- ๋ณธ๋ฌธ ๋‚ด์šฉ
Modal ๋ฐฐ๊ฒฝํ™”๋ฉด์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ์ทจ์†Œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ ธ์„๋•Œ Modal ์ฐฝ์ด ๋‹ซํžˆ๋Š” ํ•จ์ˆ˜๋ฅผ
๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] Modal Style ์ถ”๊ฐ€

- ๋ณธ๋ฌธ ๋‚ด์šฉ
 - Modal conent๊ฐ€ ์ •์ค‘์•™์— ์˜ค๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
 - ์ž์ฃผ ์“ฐ์ผ ๊ฒƒ ๊ฐ™์€ ์ƒ‰์ƒ์„ ๋”ฐ๋กœ ๋ณ€์ˆ˜๋กœ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] source-upload-form ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ

- ๋ณธ๋ฌธ ๋‚ด์šฉ
  - ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์œผ๋กœ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  - Click or Drag and Drop ํ…์ŠคํŠธ๋ฅผ ๋ˆŒ๋Ÿฌ๋„ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] source-upload-form style

- ๋ณธ๋ฌธ ๋‚ด์šฉ
source-uplaod-form๊ณผ ๊ด€๋ จ๋œ style์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] Analyzer ์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ

- ๋ณธ๋ฌธ ๋‚ด์šฉ
ArrayBuffer๋ฅผ ๋ฐ›์•„์„œ AudioBuffer๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ฃผ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค.

* style: [FE] Style ์†์„ฑ ์ œ๊ฑฐ

- ๋ณธ๋ฌธ ๋‚ด์šฉ
Modal ๊ด€๋ จ css๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

* fix: [FE] console.log ์‚ญ์ œ

- ๋ณธ๋ฌธ ๋‚ด์šฉ
console.log ์‚ญ์ œ ํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] css ์ •๋ ฌ

- ๋ณธ๋ฌธ ๋‚ด์šฉ
css ์ •๋ ฌ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค!

* fix: [FE] ์ฝ”๋“œ ๋ถ„๋ฆฌ

- ๋ณธ๋ฌธ ๋‚ด์šฉ
  - initDOM ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด DOM์„ ํƒ์ƒ‰ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  - initEvent ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด Event๋ฅผ ๋“ฑ๋กํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

* refactor: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ์‚ญ์ œ

- ๋ณธ๋ฌธ ๋‚ด์šฉ
์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.

Co-authored-by: Woojin Shin <[email protected]>
close  #4, close #21

* feat: [FE] Header ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ (#45)

* feat: [FE] Logo ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- README์— ์žˆ๋Š” AUDI ๋กœ๊ณ  svg๋กœ ๋ณ€ํ™˜ํ–ˆ์Œ
- svg ํƒœ๊ทธ๋กœ ๋ Œ๋”๋ง, color ์†์„ฑ์œผ๋กœ ์ƒ‰์ƒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

- #1

* feat: [FE] IconButton ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- iconSet์— ๋ชจ๋“  icontype ์ •๋ฆฌ
- color, size, icontype์„ ์†์„ฑ๊ฐ’์œผ๋กœ ์ค˜์„œ ์‚ฌ์šฉ
- blade icontype๋งŒ viewBox ๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •
- ๋ณธ๋ฌธ ๋‚ด์šฉ

 #2

* feat: [FE] EditorMenu ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- IconButton ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„
- file, edit, play, user ์ˆœ์œผ๋กœ tool ๋ชจ์•„๋‘ 
- play-tools ๊ฐ™์€ ๊ฒฝ์šฐ ์•„์ด์ฝ˜ ์ˆœ์„œ๋ฅผ audiomass๋ฅผ ์ฐธ๊ณ ํ–ˆ์Œ
- ๋ณธ๋ฌธ ๋‚ด์šฉ

 #3

* feat: [FE] Header ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- Logo, EditorMenu ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌํ˜„
- ๋ณธ๋ฌธ ๋‚ด์šฉ

* feat: [FE] icontype record_on ์ถ”๊ฐ€

- ๋…น์Œ ์ง„ํ–‰์ค‘ ์ƒํƒœ ์•„์ด์ฝ˜ ์ถ”๊ฐ€

* refactor: [FE] iconSet -> icons๋กœ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ

- Set์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์•ˆ๋งž๋Š”๊ฒƒ ๊ฐ™์•„์„œ iconSet์—์„œ icons๋กœ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ

* refactor: [FE] scss ์ •๋ ฌ

- scss ์ •๋ ฌ ๋„์ž…ํ–ˆ์Œ
-์ฐธ๊ณ : https://webdesign.tutsplus.com/articles/outside-in-ordering-css-properties-by-importance--cms-21685

* style: EOL ์ถ”๊ฐ€ ๋ฐ ์ฃผ์„ ์ œ๊ฑฐ

- ์†Œ์ŠคํŒŒ์ผ ๋งจ ๋งˆ์ง€๋ง‰์— ๊ณต๋ฐฑ ์ถ”๊ฐ€
- ์ฃผ์„์ œ๊ฑฐ

* refactor: [FE] EditorMen ๋‚ด๋ถ€ ์ปดํฌ๋„ŒํŠธ ๋ชจ๋“ˆํ™”

- ๋”ฐ๋กœ state๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ๋  ๊ฒƒ ๊ฐ™์•„์„œ EditTools, PlaybackTools ์ปดํฌ๋„ŒํŠธ
  ๋ชจ๋“ˆํ™”
- ๋ชจ๋“  ๋ฒ„ํŠผ์— icontype๊ณผ ๋™์ผํ•œ id๊ฐ’์„ ์†์„ฑ์œผ๋กœ ์คฌ์Œ

 #3

* refactor: [FE] PlaybackTools ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- EditorMenu์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์žฌ์ƒ๊ด€๋ จ ๋„๊ตฌ๋“ค์„ ๋ชจ๋“ˆํ™” ์‹œํ‚ด
- ๋ชจ๋“  icon-button์—๋Š” icontype๊ณผ ๋™์ผํ•œ id๊ฐ’์„ ์คฌ์Œ
- ๋ณธ๋ฌธ ๋‚ด์šฉ

* refactor: [FE] EditTools ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- EditorMenu ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํŽธ์ง‘๊ด€๋ จ ๋„๊ตฌ๋“ค ๋ชจ๋“ˆํ™”
- ๋ชจ๋“  icon-button์— icontype๊ณผ ๋™์ผํ•œ id๋ฅผ ๋„ฃ์—ˆ์Œ

* feat: [FE] components index.js์— EditTools, PlaybackTools import

- ๋”ฐ๋กœ ๋ชจ๋“ˆํ™” ์‹œํ‚จ EditTools, PlaybackTools ์ปดํฌ๋„ŒํŠธ ์ ์šฉ

* style: [FE] scss ์ •๋ ฌ๋ฐฉ์‹ ๋ณ€๊ฒฝ

- justify-content๋„ display:flex์™€ ๊ด€๋ จ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ๊ฐ™์€ ๊ทธ๋ฃน์œผ๋กœ
  ๋ณ€๊ฒฝ

* style: [FE] icontype camelcase ์ ์šฉ

- ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค -> ์นด๋ฉœ์ผ€์ด์Šค๋กœ ๋ณ€๊ฒฝ

* style: [FE] index-> ์ปดํฌ๋„ŒํŠธ ๋ช…์œผ๋กœ ๋ณ€๊ฒฝ

- ๊ฐœ๋ฐœ๋„์ค‘ ๋ณด๊ธฐ ๋ถˆํŽธํ•ด์„œ ์ปดํฌ๋„ŒํŠธ ๋ช…์œผ๋กœ ๋ณ€๊ฒฝ
- ๋ณธ๋ฌธ ๋‚ด์šฉ

* feat: [FE] AudioTrack ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘ (#46)

* chore: [FE] babel ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ๋ฐ ์›นํŒฉ ์„ค์ • ์ถ”๊ฐ€

- async/await ๋“ฑ polyfil์ด ํ•„์š”ํ•œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด babel ํ”Œ๋Ÿฌ๊ทธ์ธ
  ์„ค์น˜ ๋ฐ ์›นํŒฉ babel์„ค์ • ์ถ”๊ฐ€

* feat: [FE] AudioTrack ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

- AudioBuffer์˜ ํŒŒํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํŒŒํ˜• ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ ๊ตฌํ˜„
- ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์ด์ฆˆ ์กฐ์ ˆ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌํ˜„

* refactor: [FE] AudioTrack ์‚ฌ์ด์ฆˆ ์กฐ์ ˆ ์ถ”๊ฐ€

- ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ height ์†์„ฑ ๊ฐ’์œผ๋กœ ์‚ฌ์ด์ฆˆ ์กฐ์ ˆ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •


* refactor: [FE] ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ

- ์˜ค๋””์˜ค ํŒŒ์ผ ์ •๋ณด ์ฐธ์กฐ๋ฅผ ์œ„ํ•œ input ์ฒ˜๋ฆฌ ์ฝ”๋“œ ์‚ญ์ œ


* style: [FE] CSS ์šฐ์„ ์ˆœ์œ„ ์ •๋ ฌ

- CSS ํ”„๋กœํผํ‹ฐ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ฅธ ์ •๋ ฌ ์ˆ˜ํ–‰

* refactor: [FE] ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์‚ญ์ œ

close #18, close #36

* feat: [FE]๋ฉ”์ธํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ ๊ตฌ์„ฑ (#48)

* chore: [FE] ์›นํŒฉ ๊ฒฝ๋กœ alias ์ถ”๊ฐ€

* style: [FE] ๊ณตํ†ต ์Šคํƒ€์ผ ๋ถ„๋ฆฌ

- ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋  reset, variables, common ํŒŒ์ผ ์ถ”๊ฐ€

* refactor: [FE] ๋ฉ”์ธํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ ๊ตฌ์„ฑ

- ๋ฉ”์ธํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ ์„ค์ •(ํ—ค๋”, ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด, ์˜ค๋””์˜ค ํŒŒํ˜•)
- ์ „์ฒด์ ์ธ ํŒŒ์ผ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ

close #47

* refactor: [FE] IconButton hover ํšจ๊ณผ ์ถ”๊ฐ€ (#50)

* feat: [FE] IconButton hover fill ๋ณ€๊ฒฝ

- hover๋กœ fill ์ƒ‰์ƒ ๋ณ€๊ฒฝํ•˜๋„๋ก scss ์ถ”๊ฐ€
- user-menu์˜ ๊ฒฝ์šฐ๋Š” hover์‹œ ์ƒ‰์ƒ ๋ณ€๊ฒฝ ๋ง‰์•„๋†จ์Œ

* feat: [FE] variable์— ์ดˆ๋ก์ƒ‰ ์Šคํƒ€์ผ๋ณ€์ˆ˜ ์ถ”๊ฐ€

- prototype์—์„œ ์‚ฌ์šฉํ•œ ์ดˆ๋ก์ƒ‰ ๋ณ€์ˆ˜๋กœ ์ถ”๊ฐ€

* refactor: [FE] Sidebar ์ˆ˜์ • (#49)

* style: [FE] Sidebar style ์ˆ˜์ •

- Sidebar style์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  - css๋ฅผ ๊ธฐํš์•ˆ๋Œ€๋กœ ๊ณ ์ณค์Šต๋‹ˆ๋‹ค.
  - sidebar์˜ width ๊ฐ’์„ pixel๋กœ ์ฃผ์–ด ์‹œ๊ฐ„ ๊ฐ’์ด ๋น ์ ธ๋‚˜๊ฐ€์ง€ ์•Š๋„๋ก
    ํ–ˆ์Šต๋‹ˆ๋‹ค.
  - border-radius ๊ฐ’์„ 5px ์คฌ์Šต๋‹ˆ๋‹ค.

* refactor: [FE] ๋ณ€์ˆ˜ ์ˆ˜์ •

- private ๋ณ€์ˆ˜๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
- time ๊ฐ’์„ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋กœ ๊ฐ€์ง€๋„๋ก ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.

* feat: [FE] SourceUploadModal๊ณผ Header ์—ฐ๊ฒฐ (#51)

* feat: [FE] App์— source-modal-form ๋“ฑ๋ก

source-modal-form ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

* style: [FE] display ๊ฐ’ ์ˆ˜์ •

display: flex์—์„œ display: none์œผ๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] modal์— id ๋ณ€๊ฒฝ

id๊ฐ€ modal์ด๋˜๊ฑธ this.type์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] this.addEventListener ์ˆ˜์ •

this๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

* feat: [FE] Header์™€ SourceUploadForm ์—ฐ๊ฒฐ

์†Œ์Šค  ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์•„์ด์ฝ˜์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ๋ชจ๋‹ฌ์ฐฝ์ด ๋œจ๋„๋ก ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค!

* feat: [FE] Analyzer์— audioFileName ์ €์žฅ

Analyzer์— audioFileName๋„ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

* EffectList ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘ ๋ฐ ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ชจ๋“  ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๊ตฌํ˜„ (#53)

* refactor: [FE] modalContentType ์ •์˜

- ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ modal์˜ ์ปจํ…์ธ ๋ฅผ ๋ฐ”๊พธ๋Š” ๋ถ€๋ถ„์„ ํƒ€์ž…์„ ์ •์˜

* refactor: [FE] ModalButtonType ์ •์˜

- ์žฌ์‚ฌ์šฉ ๋ฐ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•œ ModalButtonType ์ •์˜

* style: [FE] SourceUploadForm ์Šคํƒ€์ผ ์ˆ˜์ •

- Form ๋ชจ๋‹ฌ์ฐฝ ์ค‘์•™๋ฐฐ์น˜
- ์‚ฌ์šฉ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ์šฐํ•ด ์†Œ์Šค๋ถˆ๋Ÿฌ์˜ค๊ธฐ ํด๋ฆญ์˜์—ญ ํ˜ธ๋ฒ„ํšจ๊ณผ

* refactor: [FE] Modal ์Šคํƒ€์ผ ์ˆ˜์ • ๋ฐ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ

- ํŒŒ์Šค์นผ์ผ€์ด์Šค ํ˜•์‹์œผ๋กœ ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ
- ๋ชจ๋‹ฌ ์ปจํ…์ธ  ์ค‘์•™ ๋ฐฐ์น˜ ๋ฐ ๋ ˆ์ด์•„์›ƒ ์žฌ์กฐ์ •

* feat: [FE] EffectList ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

- Modal ์ปดํฌ๋„ŒํŠธ์—์„œ ํƒ€์ž…์„ ์„ ํƒํ•ด์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก EffectList
  ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

* refactor: [FE] Modal ์ปดํฌ๋„ŒํŠธ ๋ฆฌํŒฉํ† ๋ง

- ModalType์„ ๋ชจ๋‘ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์ •๋ฆฌ
- Modal ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฆฌํŒฉํ† ๋ง

* chore: [FE] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ alias ์„ค์ • ์ถ”๊ฐ€

- TS์—์„œ alias ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•œ ์„ค์ • ์ถ”๊ฐ€

* feat: [FE] ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ชจ๋“  ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๊ตฌํ˜„

- ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •

* feat: [FE] ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ์— ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก ์œ ํ‹ธ ๊ตฌํ˜„

- ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ์— ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ํ‹ธ ํ•จ์ˆ˜
  ๊ตฌํ˜„

* feat: [FE] ์ด๋ฒคํŠธ ๊ด€๋ จ ํƒ€์ž… ์ •์˜

- ๋ฃจํŠธ์—์„œ ์ด๋ฒคํŠธ ๋“ฑ๋ก๊ด€๋ จ ํƒ€์ž… ์ •์˜


* refactor: [FE] Modal ์ปดํฌ๋„ŒํŠธ ๋ฃจํŠธ์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •

- ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ์— ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋ก

* refactor: [FE] ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

- ์ „์ฒด์ ์ธ ํ•จ์ˆ˜ ๋ฆฌํ„ด ํƒ€์ž… ์ถ”๊ฐ€

* refactor: [FE] EventDataType ์˜คํƒ€์ˆ˜์ •

- ํƒ€์ž…์ •์˜์‹œ ;์„ ,๋กœ ์ž‘์„ฑํ•œ ๋ถ€๋ถ„ ์ˆ˜์ •

close #20

* ํŽธ์ง‘ํŒŒ์ผ ์ €์žฅํ•˜๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (#54)

* feat: [FE] ํŒŒ์ผ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- AurrayBuffer, quality(0~1), fileName์„ ์ธ์ž๋กœ wavํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š”
  ๊ธฐ๋Šฅ ๊ตฌํ˜„
  - ์ €: 0.5 , ์ค‘ : 0.75, ๊ณ : 1 ๋กœ ์„ค์ •
- ์••์ถ•์ด ๋๋‚˜๋ฉด downloadModal์ฐฝ aํƒœ๊ทธ์— ๋‹ค์šด๋กœ๋“œ ๋งํฌ ์ƒ์„ฑ
- wav, mp3 ํŒŒ์ผ์˜ ์ฐจ์ด์ ์€ ์Œ์งˆ์ธ๊ฒƒ ๊ฐ™์Œ
  - wave ํŒŒ์ผ : ๋ฌด์†์‹ค ์Œ์›, ๋ณดํ†ต ํŽธ์ง‘ํ•  ๋•Œ ์‚ฌ์šฉ
  - mp3 ํŒŒ์ผ : ์••์ถ•์‹œํ‚จ ์Œ์›, ๋ฌด์†์‹ค ์Œ์›๋ณด๋‹จ ์Œ์งˆ์ด ๋œํ•˜์ง€๋งŒ ์šฉ๋Ÿ‰์ด
    ์ ์Œ

 #22

* feat: [FE] EventType์— keyup ์ถ”๊ฐ€

- inputํƒœ๊ทธ๋กœ ๋ฒ„ํŠผ disabled ๋จน์ผ ๋•Œ ํ•„์š”ํ•ด์„œ ์ถ”๊ฐ€ํ–ˆ์Œ

* refactor: [FE] util, components index์— import ์ถ”๊ฐ€

- ํŒŒ์ผ ์ €์žฅ๊ธฐ๋Šฅ util์— ์ถ”๊ฐ€
- SourceDownload Component ์ถ”๊ฐ€

* refactor: [FE] modal download ํƒ€์ž… ์ถ”๊ฐ€

- ํŒŒ์ผ ์ €์žฅํ•˜๋Š” modal ์ปดํฌ๋„ŒํŠธ๋ฅผ ์œ„ํ•œ downloadํƒ€์ž… ์ถ”๊ฐ€

* style: [FE] SourceDownload ์ปดํฌ๋„ŒํŠธ scss ์ถ”๊ฐ€

- ๋ชจ๋‹ฌ ๋ฒ„ํŠผ์— aํƒœ๊ทธ๋ฅผ ๊ฐ์‹ธ์„œ scss๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ ์šฉ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

 #22

* feat: [FE] SourceDownload ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„

- keyup ์ด๋ฒคํŠธ๋กœ ํŒŒ์ผ์ด๋ฆ„์ด ์—†์„ ์‹œ disabled ๋˜๋„๋ก ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
- ํŒŒ์ผ ์••์ถ•์ค‘์—๋„ disabled ๋˜๋„๋ก ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
- ์ด๋ฒคํŠธ๋Š” ์ผ๋‹จ test์šฉ์œผ๋กœ๋งŒ ์ ์šฉํ–ˆ๊ณ , ๋ฃจํŠธ์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ๋ฆฌํŒฉํ† ๋ง์ด
  ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค...

 #22

close #22

* feat: [FE] pub/sub ํŒจํ„ด ํ™œ์šฉ Store ๊ตฌํ˜„ ๋ฐ ์†Œ์Šค ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๊ธฐ๋Šฅ ์—ฐ๋™ (#55)

* feat: [FE] Store ํƒ€์ž… ์ •์˜

- Store ๊ธฐ๋ณธ ํƒ€์ž…์ •์˜

* feat: [FE] StoreChannel ๊ตฌํ˜„

- StoreChannel pub/sub ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ ๊ตฌํ˜„
- StoreChannelType ์ •์˜

* feat: [FE] Store alias ์„ค์ • ์ถ”๊ฐ€

- Store alias ์„ค์ • TS ์„ค์ •ํŒŒ์ผ, ์›นํŒฉ ์„ค์ •ํŒŒ์ผ์— ์ถ”๊ฐ€


* style: [FE] hide ์†์„ฑ important๋กœ ์ˆ˜์ •


* feat: [FE] StoreChannelType ์ •์˜

- StoreChannel ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ํƒ€์ž… ์ •์˜


* feat: [FE] FileUtil ์ž‘์„ฑ

- File๊ด€๋ จ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๋ฅผ ๋ชจ๋“ˆํ™”ํ•œ Util ์ž‘์„ฑ

* feat: [FE] AudioUtil ์ถ”๊ฐ€

- Audio ๊ด€๋ จ ์ž‘์—… ํ•จ์ˆ˜๋ฅผ ๋ชจ๋“ˆํ™”ํ•œ AudioUtil ๊ตฌํ˜„

* refactor: [FE] ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

- ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์ œ๊ฑฐ
- ๋ถˆํ•„์š”ํ•œ ์ด๋ฒคํŠธ ํƒ€์ž… ์ œ๊ฑฐ

* feat: [FE] Source ๋ชจ๋ธ ์ •์˜

- ์˜ค๋””์˜ค ํŒŒ์ผ ์†Œ์Šค์˜ ๋ชจ๋ธ์ •์˜

* feat: [FE] pub/sub ํŒจํ„ด ํ™œ์šฉ Store ๊ตฌํ˜„

- Store์—์„œ state๋ฅผ ์œ ์ง€ํ•˜๊ณ , immutableํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๋„๋ก ์ˆ˜์ •
- StoreChannel์—์„œ Store๊ฐ€ publishํ•œ ๋ฐ์ดํ„ฐ๋ฅผ notifyํ•˜๋„๋ก ๊ตฌํ˜„

* feat: [FE] cotroller ์ •์˜

- Store์— ์ ‘๊ทผํ•˜๊ธฐ ์ „์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ์ปจํŠธ๋กค๋Ÿฌ ์ •์˜
- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰ ํ›„, Store์— ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

* refacrtor: [FE] Modal ์ปดํฌ๋„ŒํŠธ ์†์„ฑ ๋ณ€๊ฒฝ

- Modal ์ปดํฌ๋„ŒํŠธ ์†์„ฑ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์ฝ”๋“œ ์ˆ˜์ •

* refactor: [FE] Modal ์ปดํฌ๋„ŒํŠธ ์ด๋ฒคํŠธ ์ถ”๊ฐ€

- ๋ชจ๋‹ฌ ์ฐฝ close ์ด๋ฒคํŠธ๋ฅผ ๋ฃจํŠธ์— ๋“ฑ๋ก

* refactor: [FE] ์—๋””ํ„ฐ ๋ฉ”๋‰ด ์†Œ์Šค๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋ฒ„๊ทธ ์ˆ˜์ •

- ์†Œ์Šค๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋ชจ๋‹ฌ ์ฐฝ ๋™์ž‘๊ด€๋ จ ์ˆ˜์ •(์ž„์‹œ๋กœ Dom ์„œ์น˜๋ฅผ ํ•ด์„œ ํ•ด๊ฒฐ, ์ถ”ํ›„
  ์ด์Šˆ๋ฅผ ํ†ตํ•ด ์ˆ˜์ •์˜ˆ์ •)

* feat: [FE] ์†Œ์Šค ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ์†Œ์Šค๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•œ ํ›„, Store์— ์ €์žฅ
- Store์— ์ €์žฅ ํ›„, observer๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

* feat: [FE] SourceUploadForm ์ˆ˜์ •

- ์ด๋ฒคํŠธ ๋“ฑ๋ก์„ ๋ฃจํŠธ์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •

* refactor: [FE] ModalButtonContent์— eventKey ๋“ฑ๋ก

- eventKey ๋“ฑ๋ก

close#39, close#31, close#32, close#33, close#34

Co-authored-by: Jeongeun-Choi <[email protected]>
Co-authored-by: pieisland <[email protected]>
Co-authored-by: Songwonseok <[email protected]>