From 24cae93de8ea7413b924c1b5df7539cf72ec9339 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Tue, 6 Feb 2024 23:13:52 +0900 Subject: [PATCH 01/26] feat: add location and gauge color at config --- package.json | 18 ++++++++++++++++++ src/core/modes/walk-mode.ts | 36 +++++++++++++++++++++++++++++------- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index cd54012..08b38ba 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,24 @@ "items": "string", "default": [], "markdownDescription": "mode test" + }, + "junbae-mode.location": { + "type": "string", + "default": "top", + "enum": [ + "top", + "bottom" + ], + "markdownDescription": "Junbae is located on the screen" + }, + "junbae-mode.gaugeColor": { + "type": "string", + "default": "white", + "enum": [ + "white", + "#C54B65" + ], + "markdownDescription": "gauge color change" } } } diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 784eb1f..27b7001 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -59,18 +59,39 @@ export class WalkMode implements Mode { return; } - const position = firstVisibleRange.start; - const range = new vscode.Range(position, position); + let visibleStartLine = firstVisibleRange.start; + let visibleEndLine = firstVisibleRange.start; + const junbaeLocation = { top: '5%' }; + const location = vscode.workspace.getConfiguration('junbae-mode').get('location'); + + if (location === 'top') { + visibleStartLine = firstVisibleRange.start; + visibleEndLine = firstVisibleRange.start; + } + if (location === 'bottom') { + visibleStartLine = firstVisibleRange.end; + visibleEndLine = firstVisibleRange.end; + junbaeLocation.top = '-100px'; + } + + // const position = firstVisibleRange.start; + // const range = new vscode.Range(position, position); + + const range = new vscode.Range(visibleStartLine, visibleEndLine); if (this.combo !== this.renderedComboCount || !range.isEqual(this.renderedRange!)) { this.renderedComboCount = this.combo; this.renderedRange = range; - this.createWalkMotionDecorator([range], editor); + this.createWalkMotionDecorator([range], editor, junbaeLocation); this.createTimerDecoration([range], editor); } } - private createWalkMotionDecorator = (ranges: vscode.Range[], editor: vscode.TextEditor) => { + private createWalkMotionDecorator = ( + ranges: vscode.Range[], + editor: vscode.TextEditor, + junbaeLocation: { top: string }, + ) => { const timeLeft = this.expiredAt - new Date().getTime(); if (timeLeft <= 0) { @@ -92,7 +113,8 @@ export class WalkMode implements Mode { 'background-image': `url("${motions[this.combo % motions.length]}")`, position: 'absolute', right: '5vw', - top: '5%', + // top: '5%', + ...junbaeLocation, 'font-size': '100px', 'font-family': 'monospace', 'font-weight': '900', @@ -125,14 +147,14 @@ export class WalkMode implements Mode { this.dispose(); return; } - + const gaugeColor = vscode.workspace.getConfiguration('junbae-mode').get('gaugeColor'); const timerWidth = (timeLeft / this.timerDuration) * 1.5; this.timerDecorator?.dispose(); this.timerDecorator = vscode.window.createTextEditorDecorationType({ before: { contentText: '', - backgroundColor: 'white', + backgroundColor: `${gaugeColor}`, width: `${timerWidth}em`, color: 'white', height: '8px', From 5fc349da8261a8c0beec7a986f3f6ec81e477445 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Tue, 6 Feb 2024 23:47:46 +0900 Subject: [PATCH 02/26] fix: css of detail location --- src/core/modes/walk-mode.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 27b7001..238388b 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -61,7 +61,7 @@ export class WalkMode implements Mode { let visibleStartLine = firstVisibleRange.start; let visibleEndLine = firstVisibleRange.start; - const junbaeLocation = { top: '5%' }; + const junbaeLocation = { top: '5%', 'font-size': '50px' }; const location = vscode.workspace.getConfiguration('junbae-mode').get('location'); if (location === 'top') { @@ -72,6 +72,7 @@ export class WalkMode implements Mode { visibleStartLine = firstVisibleRange.end; visibleEndLine = firstVisibleRange.end; junbaeLocation.top = '-100px'; + junbaeLocation['font-size'] = '100px'; } // const position = firstVisibleRange.start; @@ -115,7 +116,7 @@ export class WalkMode implements Mode { right: '5vw', // top: '5%', ...junbaeLocation, - 'font-size': '100px', + // 'font-size': '50px', 'font-family': 'monospace', 'font-weight': '900', 'z-index': 1, From b8981f24f6cae3727466bdd35543ff4d90adf417 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Tue, 6 Feb 2024 23:59:14 +0900 Subject: [PATCH 03/26] fix: change hex color code to color name --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 08b38ba..0718e51 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "default": "white", "enum": [ "white", - "#C54B65" + "red" ], "markdownDescription": "gauge color change" } From 455fc9bbd95fa46a82b3cb5352fdd54cf411e235 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Wed, 7 Feb 2024 00:04:18 +0900 Subject: [PATCH 04/26] fix: Delete unnecessary code and change gauge color --- src/core/modes/walk-mode.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 238388b..ce54781 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -75,9 +75,6 @@ export class WalkMode implements Mode { junbaeLocation['font-size'] = '100px'; } - // const position = firstVisibleRange.start; - // const range = new vscode.Range(position, position); - const range = new vscode.Range(visibleStartLine, visibleEndLine); if (this.combo !== this.renderedComboCount || !range.isEqual(this.renderedRange!)) { @@ -114,9 +111,7 @@ export class WalkMode implements Mode { 'background-image': `url("${motions[this.combo % motions.length]}")`, position: 'absolute', right: '5vw', - // top: '5%', ...junbaeLocation, - // 'font-size': '50px', 'font-family': 'monospace', 'font-weight': '900', 'z-index': 1, @@ -148,7 +143,12 @@ export class WalkMode implements Mode { this.dispose(); return; } - const gaugeColor = vscode.workspace.getConfiguration('junbae-mode').get('gaugeColor'); + const gaugeColorName = vscode.workspace.getConfiguration('junbae-mode').get('gaugeColor'); + let gaugeColor = 'white'; + if (gaugeColorName === 'red') { + gaugeColor = '#C54B65'; + } + const timerWidth = (timeLeft / this.timerDuration) * 1.5; this.timerDecorator?.dispose(); From ca1796d7cc54d2b2f4f1de06e11db74ede6fb12f Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Thu, 8 Feb 2024 18:54:21 +0900 Subject: [PATCH 05/26] fix: add font size property --- src/core/modes/walk-mode.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index ce54781..1b0d810 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -88,7 +88,7 @@ export class WalkMode implements Mode { private createWalkMotionDecorator = ( ranges: vscode.Range[], editor: vscode.TextEditor, - junbaeLocation: { top: string }, + junbaeLocation: { top: string; ['font-size']: string }, ) => { const timeLeft = this.expiredAt - new Date().getTime(); From 9f0c9c594cc5141b6e20f883082f543e8ce732f0 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Thu, 8 Feb 2024 18:55:08 +0900 Subject: [PATCH 06/26] fix: remove top case --- src/core/modes/walk-mode.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 1b0d810..fb26494 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -64,10 +64,6 @@ export class WalkMode implements Mode { const junbaeLocation = { top: '5%', 'font-size': '50px' }; const location = vscode.workspace.getConfiguration('junbae-mode').get('location'); - if (location === 'top') { - visibleStartLine = firstVisibleRange.start; - visibleEndLine = firstVisibleRange.start; - } if (location === 'bottom') { visibleStartLine = firstVisibleRange.end; visibleEndLine = firstVisibleRange.end; From dfbfbb84318146a3c067662f083a04ae39ef68a3 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Thu, 8 Feb 2024 23:18:00 +0900 Subject: [PATCH 07/26] fix: add order property at package --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index 0718e51..aea0789 100644 --- a/package.json +++ b/package.json @@ -88,12 +88,14 @@ "order": 1, "properties": { "junbae-mode.mode": { + "order": 0, "type": "array", "items": "string", "default": [], "markdownDescription": "mode test" }, "junbae-mode.location": { + "order": 1, "type": "string", "default": "top", "enum": [ @@ -103,6 +105,7 @@ "markdownDescription": "Junbae is located on the screen" }, "junbae-mode.gaugeColor": { + "order": 2, "type": "string", "default": "white", "enum": [ From 7e332d33129069dcc909a3aa876f8600e7727291 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Thu, 8 Feb 2024 23:19:07 +0900 Subject: [PATCH 08/26] fix: fix variable name --- package.json | 4 ++-- src/core/modes/walk-mode.ts | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index aea0789..8907f42 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ ], "markdownDescription": "Junbae is located on the screen" }, - "junbae-mode.gaugeColor": { + "junbae-mode.timerColor": { "order": 2, "type": "string", "default": "white", @@ -112,7 +112,7 @@ "white", "red" ], - "markdownDescription": "gauge color change" + "markdownDescription": "timer color change" } } } diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index fb26494..641a782 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -139,10 +139,10 @@ export class WalkMode implements Mode { this.dispose(); return; } - const gaugeColorName = vscode.workspace.getConfiguration('junbae-mode').get('gaugeColor'); - let gaugeColor = 'white'; - if (gaugeColorName === 'red') { - gaugeColor = '#C54B65'; + const timerColorName = vscode.workspace.getConfiguration('junbae-mode').get('timerColor'); + let timerColor = 'white'; + if (timerColorName === 'red') { + timerColor = '#C54B65'; } const timerWidth = (timeLeft / this.timerDuration) * 1.5; @@ -151,7 +151,7 @@ export class WalkMode implements Mode { this.timerDecorator = vscode.window.createTextEditorDecorationType({ before: { contentText: '', - backgroundColor: `${gaugeColor}`, + backgroundColor: `${timerColor}`, width: `${timerWidth}em`, color: 'white', height: '8px', From 0ddf0593fbf2dde629ffcd867679e8828e65933b Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Thu, 8 Feb 2024 23:29:03 +0900 Subject: [PATCH 09/26] fix: change order at package --- package.json | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 26cdf75..1271470 100644 --- a/package.json +++ b/package.json @@ -92,12 +92,14 @@ "title": "Mode", "order": 1, "properties": { - "junbae-mode.mode": { + "junbae-mode.Mode": { "order": 0, - "type": "array", - "items": "string", - "default": [], - "markdownDescription": "mode test" + "type": "string", + "default": "Walk", + "enum": [ + "Walk" + ], + "markdownDescription": "You can choose the mode of Junbae." }, "junbae-mode.location": { "order": 1, @@ -118,14 +120,6 @@ "red" ], "markdownDescription": "timer color change" - }, - "junbae-mode.Mode": { - "type": "string", - "default": "Walk", - "enum": [ - "Walk" - ], - "markdownDescription": "You can choose the mode of Junbae." } } } From 5758440813788de0ad4564382d42c8bd66cf8d5c Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Tue, 13 Feb 2024 19:33:34 +0900 Subject: [PATCH 10/26] feat: add timer shadow color --- package.json | 10 ++++++++++ src/core/modes/walk-mode.ts | 8 +++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 1271470..4929bf5 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,16 @@ "red" ], "markdownDescription": "timer color change" + }, + "junbae-mode.timerShadowColor": { + "order": 3, + "type": "string", + "default": "blue", + "enum": [ + "blue", + "purple" + ], + "markdownDescription": "timer shadow color change" } } } diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 96613b7..c813d36 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -141,11 +141,17 @@ export class WalkMode implements Mode { return; } const timerColorName = vscode.workspace.getConfiguration('junbae-mode').get('timerColor'); + const timerShadowColorName = vscode.workspace.getConfiguration('junbae-mode').get('timerShadowColor'); let timerColor = 'white'; + let timerShadowColor = '015dee'; if (timerColorName === 'red') { timerColor = '#C54B65'; } + if (timerShadowColorName === 'purple') { + timerShadowColor = '#A485B3'; + } + const timerWidth = (timeLeft / this.timerDuration) * 1.5; this.timerDecorator?.dispose(); @@ -158,7 +164,7 @@ export class WalkMode implements Mode { height: '8px', margin: '0.25em 0 0 0', textDecoration: `none; ${objectToCssString({ - 'box-shadow': `0px 0px 15px #015dee`, + 'box-shadow': `0px 0px 15px ${timerShadowColor}`, position: 'absolute', right: '5vw', top: '5%', From 86038541f0ea01325bdba734245951c9bc02046b Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Tue, 13 Feb 2024 20:09:49 +0900 Subject: [PATCH 11/26] fix: change timer bottom location --- src/core/modes/walk-mode.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index c813d36..ffbf3eb 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -63,6 +63,7 @@ export class WalkMode implements Mode { let visibleStartLine = firstVisibleRange.start; let visibleEndLine = firstVisibleRange.start; const junbaeLocation = { top: '5%', 'font-size': '50px' }; + const timerLocation = { top: '5%' }; const location = vscode.workspace.getConfiguration('junbae-mode').get('location'); if (location === 'bottom') { @@ -70,6 +71,7 @@ export class WalkMode implements Mode { visibleEndLine = firstVisibleRange.end; junbaeLocation.top = '-100px'; junbaeLocation['font-size'] = '100px'; + timerLocation.top = '-75px'; } const range = new vscode.Range(visibleStartLine, visibleEndLine); @@ -78,7 +80,7 @@ export class WalkMode implements Mode { this.renderedComboCount = this.combo; this.renderedRange = range; this.createWalkMotionDecorator([range], editor, junbaeLocation); - this.createTimerDecoration([range], editor); + this.createTimerDecoration([range], editor, timerLocation); } } @@ -128,7 +130,7 @@ export class WalkMode implements Mode { clearTimeout(this.decorationTimer); } - private createTimerDecoration(ranges: vscode.Range[], editor: vscode.TextEditor) { + private createTimerDecoration(ranges: vscode.Range[], editor: vscode.TextEditor, timerLocation: { top: string }) { if (this.decorationTimer) { clearTimeout(this.decorationTimer); } @@ -142,18 +144,18 @@ export class WalkMode implements Mode { } const timerColorName = vscode.workspace.getConfiguration('junbae-mode').get('timerColor'); const timerShadowColorName = vscode.workspace.getConfiguration('junbae-mode').get('timerShadowColor'); + let timerColor = 'white'; - let timerShadowColor = '015dee'; + let timerShadowColor = '#015dee'; + if (timerColorName === 'red') { timerColor = '#C54B65'; } - if (timerShadowColorName === 'purple') { timerShadowColor = '#A485B3'; } const timerWidth = (timeLeft / this.timerDuration) * 1.5; - this.timerDecorator?.dispose(); this.timerDecorator = vscode.window.createTextEditorDecorationType({ before: { @@ -167,7 +169,7 @@ export class WalkMode implements Mode { 'box-shadow': `0px 0px 15px ${timerShadowColor}`, position: 'absolute', right: '5vw', - top: '5%', + ...timerLocation, 'font-size': '40px', 'font-family': 'monospace', 'font-weight': '900', From af443af634f9bf476160d3a45199bbd18a075f95 Mon Sep 17 00:00:00 2001 From: myunggyuns <61381189+myunggyuns@users.noreply.github.com> Date: Tue, 13 Feb 2024 21:50:41 +0900 Subject: [PATCH 12/26] fix: config description change to sentence Co-authored-by: Arthur Hwang --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4929bf5..62004de 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "top", "bottom" ], - "markdownDescription": "Junbae is located on the screen" + "markdownDescription": "�You can choose location of junbae on the screen." }, "junbae-mode.timerColor": { "order": 2, From ec80db4ad192b6a892a578f967a5231114d1694f Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Tue, 13 Feb 2024 21:57:17 +0900 Subject: [PATCH 13/26] fix: change location property --- src/core/modes/walk-mode.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index ffbf3eb..cb70a31 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -62,16 +62,18 @@ export class WalkMode implements Mode { let visibleStartLine = firstVisibleRange.start; let visibleEndLine = firstVisibleRange.start; - const junbaeLocation = { top: '5%', 'font-size': '50px' }; - const timerLocation = { top: '5%' }; + const junbaeLocation = { top: '5%', 'font-size': '50px', bottom: 'none' }; + const timerLocation = { top: '5%', bottom: 'none' }; const location = vscode.workspace.getConfiguration('junbae-mode').get('location'); if (location === 'bottom') { visibleStartLine = firstVisibleRange.end; visibleEndLine = firstVisibleRange.end; - junbaeLocation.top = '-100px'; + junbaeLocation.top = 'none'; + junbaeLocation.bottom = '10px'; junbaeLocation['font-size'] = '100px'; - timerLocation.top = '-75px'; + timerLocation.top = 'none'; + timerLocation.bottom = '70px'; } const range = new vscode.Range(visibleStartLine, visibleEndLine); @@ -87,7 +89,7 @@ export class WalkMode implements Mode { private createWalkMotionDecorator = ( ranges: vscode.Range[], editor: vscode.TextEditor, - junbaeLocation: { top: string; ['font-size']: string }, + junbaeLocation: { top: string; ['font-size']: string; bottom: string }, ) => { const timeLeft = this.expiredAt - new Date().getTime(); @@ -130,7 +132,11 @@ export class WalkMode implements Mode { clearTimeout(this.decorationTimer); } - private createTimerDecoration(ranges: vscode.Range[], editor: vscode.TextEditor, timerLocation: { top: string }) { + private createTimerDecoration( + ranges: vscode.Range[], + editor: vscode.TextEditor, + timerLocation: { top: string; bottom: string }, + ) { if (this.decorationTimer) { clearTimeout(this.decorationTimer); } From 660c274d4411d61ba66ac949200fe093f3f44c7d Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Tue, 13 Feb 2024 22:00:44 +0900 Subject: [PATCH 14/26] fix: remove code about font css --- src/core/modes/walk-mode.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index cb70a31..6a805ee 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -103,7 +103,6 @@ export class WalkMode implements Mode { after: { contentText: ``, margin: '0.5em 0 0 0', - color: '#FFFFFF', textDecoration: `none; ${objectToCssString({ width: '50px', height: '50px', @@ -113,11 +112,8 @@ export class WalkMode implements Mode { position: 'absolute', right: '5vw', ...junbaeLocation, - 'font-family': 'monospace', - 'font-weight': '900', 'z-index': 1, 'pointer-events': 'none', - 'text-align': 'center', })}`, }, rangeBehavior: vscode.DecorationRangeBehavior.ClosedClosed, @@ -168,7 +164,6 @@ export class WalkMode implements Mode { contentText: '', backgroundColor: `${timerColor}`, width: `${timerWidth}em`, - color: 'white', height: '8px', margin: '0.25em 0 0 0', textDecoration: `none; ${objectToCssString({ @@ -176,12 +171,8 @@ export class WalkMode implements Mode { position: 'absolute', right: '5vw', ...timerLocation, - 'font-size': '40px', - 'font-family': 'monospace', - 'font-weight': '900', 'z-index': 1, 'pointer-events': 'none', - 'text-align': 'center', })}`, }, rangeBehavior: vscode.DecorationRangeBehavior.ClosedClosed, From 5279ad8a2e939ab90d6e24b856ca1f8488ca416b Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Tue, 13 Feb 2024 22:03:42 +0900 Subject: [PATCH 15/26] fix: colors config description change to sentence --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 62004de..a61f26b 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "top", "bottom" ], - "markdownDescription": "�You can choose location of junbae on the screen." + "markdownDescription": "You can choose location of junbae on the screen." }, "junbae-mode.timerColor": { "order": 2, @@ -119,7 +119,7 @@ "white", "red" ], - "markdownDescription": "timer color change" + "markdownDescription": "You can choose timer color." }, "junbae-mode.timerShadowColor": { "order": 3, @@ -129,7 +129,7 @@ "blue", "purple" ], - "markdownDescription": "timer shadow color change" + "markdownDescription": "You can choose timer shadow color." } } } From 6e5800b0d376c6a2b6a732be4e4fa8c6fed3fa34 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Tue, 13 Feb 2024 22:38:48 +0900 Subject: [PATCH 16/26] fix: use default value --- src/core/modes/walk-mode.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 6a805ee..ce4cdad 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -144,16 +144,18 @@ export class WalkMode implements Mode { this.dispose(); return; } - const timerColorName = vscode.workspace.getConfiguration('junbae-mode').get('timerColor'); - const timerShadowColorName = vscode.workspace.getConfiguration('junbae-mode').get('timerShadowColor'); - let timerColor = 'white'; - let timerShadowColor = '#015dee'; + let timerColor = vscode.workspace.getConfiguration('junbae-mode').get('timerColor'); - if (timerColorName === 'red') { + if (timerColor === 'red') { timerColor = '#C54B65'; } - if (timerShadowColorName === 'purple') { + + let timerShadowColor = vscode.workspace.getConfiguration('junbae-mode').get('timerShadowColor'); + + if (timerShadowColor === 'blue') { + timerShadowColor = '#015dee'; + } else if (timerShadowColor === 'purple') { timerShadowColor = '#A485B3'; } From ebed9c695b6c0c9f8565da9b319fb42565efde82 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Tue, 13 Feb 2024 23:00:41 +0900 Subject: [PATCH 17/26] fix: seperate with private method --- src/core/modes/walk-mode.ts | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index ce4cdad..46e790b 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -60,21 +60,7 @@ export class WalkMode implements Mode { return; } - let visibleStartLine = firstVisibleRange.start; - let visibleEndLine = firstVisibleRange.start; - const junbaeLocation = { top: '5%', 'font-size': '50px', bottom: 'none' }; - const timerLocation = { top: '5%', bottom: 'none' }; - const location = vscode.workspace.getConfiguration('junbae-mode').get('location'); - - if (location === 'bottom') { - visibleStartLine = firstVisibleRange.end; - visibleEndLine = firstVisibleRange.end; - junbaeLocation.top = 'none'; - junbaeLocation.bottom = '10px'; - junbaeLocation['font-size'] = '100px'; - timerLocation.top = 'none'; - timerLocation.bottom = '70px'; - } + const { junbaeLocation, timerLocation, visibleStartLine, visibleEndLine } = this.getLocation(firstVisibleRange); const range = new vscode.Range(visibleStartLine, visibleEndLine); @@ -185,4 +171,25 @@ export class WalkMode implements Mode { this.decorationTimer = setInterval(updateComboTimerDecoration, 50); } + + private getLocation(firstVisibleRange: vscode.Range) { + const location = vscode.workspace.getConfiguration('junbae-mode').get('location'); + + let visibleStartLine = firstVisibleRange.start; + let visibleEndLine = firstVisibleRange.start; + const junbaeLocation = { top: '5%', 'font-size': '50px', bottom: 'none' }; + const timerLocation = { top: '5%', bottom: 'none' }; + + if (location === 'bottom') { + visibleStartLine = firstVisibleRange.end; + visibleEndLine = firstVisibleRange.end; + junbaeLocation.top = 'none'; + junbaeLocation.bottom = '10px'; + junbaeLocation['font-size'] = '100px'; + timerLocation.top = 'none'; + timerLocation.bottom = '70px'; + } + + return { junbaeLocation, timerLocation, visibleStartLine, visibleEndLine }; + } } From 8fc98239d7b5c6bd73a31233902a7158bbe72057 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Wed, 14 Feb 2024 00:17:05 +0900 Subject: [PATCH 18/26] fix: seperate with private color method and add range in location method --- package.json | 10 ---------- src/core/modes/walk-mode.ts | 39 ++++++++++++++++++++++--------------- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index a61f26b..5ca0036 100644 --- a/package.json +++ b/package.json @@ -120,16 +120,6 @@ "red" ], "markdownDescription": "You can choose timer color." - }, - "junbae-mode.timerShadowColor": { - "order": 3, - "type": "string", - "default": "blue", - "enum": [ - "blue", - "purple" - ], - "markdownDescription": "You can choose timer shadow color." } } } diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 46e790b..6b81755 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -60,9 +60,9 @@ export class WalkMode implements Mode { return; } - const { junbaeLocation, timerLocation, visibleStartLine, visibleEndLine } = this.getLocation(firstVisibleRange); + const { junbaeLocation, timerLocation, range } = this.getLocation(firstVisibleRange); - const range = new vscode.Range(visibleStartLine, visibleEndLine); + // const range = new vscode.Range(visibleStartLine, visibleEndLine); if (this.combo !== this.renderedComboCount || !range.isEqual(this.renderedRange!)) { this.renderedComboCount = this.combo; @@ -131,19 +131,7 @@ export class WalkMode implements Mode { return; } - let timerColor = vscode.workspace.getConfiguration('junbae-mode').get('timerColor'); - - if (timerColor === 'red') { - timerColor = '#C54B65'; - } - - let timerShadowColor = vscode.workspace.getConfiguration('junbae-mode').get('timerShadowColor'); - - if (timerShadowColor === 'blue') { - timerShadowColor = '#015dee'; - } else if (timerShadowColor === 'purple') { - timerShadowColor = '#A485B3'; - } + const { timerColor, timerShadowColor } = this.getTimerColor(); const timerWidth = (timeLeft / this.timerDuration) * 1.5; this.timerDecorator?.dispose(); @@ -190,6 +178,25 @@ export class WalkMode implements Mode { timerLocation.bottom = '70px'; } - return { junbaeLocation, timerLocation, visibleStartLine, visibleEndLine }; + const range = new vscode.Range(visibleStartLine, visibleEndLine); + + return { junbaeLocation, timerLocation, range }; + } + + private getTimerColor() { + const timerColorName = vscode.workspace.getConfiguration('junbae-mode').get('timerColor'); + const timerColor = { + timerColor: 'white', + timerShadowColor: '#015dee', + }; + + if (timerColorName === 'white') { + timerColor.timerColor = 'white'; + timerColor.timerShadowColor = '#015dee'; + } else if (timerColorName === 'red') { + timerColor.timerColor = '#C54B65'; + timerColor.timerShadowColor = '#FFC0CB'; + } + return timerColor; } } From 92f5939368ec913ec736c3e24ab5a8923a6eb38e Mon Sep 17 00:00:00 2001 From: myunggyuns <61381189+myunggyuns@users.noreply.github.com> Date: Wed, 14 Feb 2024 08:03:31 +0900 Subject: [PATCH 19/26] fix: remove comment --- src/core/modes/walk-mode.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 6b81755..8a55d9f 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -62,8 +62,6 @@ export class WalkMode implements Mode { const { junbaeLocation, timerLocation, range } = this.getLocation(firstVisibleRange); - // const range = new vscode.Range(visibleStartLine, visibleEndLine); - if (this.combo !== this.renderedComboCount || !range.isEqual(this.renderedRange!)) { this.renderedComboCount = this.combo; this.renderedRange = range; From 9f75a825d90f9e537b89e7956aa5c1bd68c015c0 Mon Sep 17 00:00:00 2001 From: myunggyuns <61381189+myunggyuns@users.noreply.github.com> Date: Wed, 14 Feb 2024 08:08:22 +0900 Subject: [PATCH 20/26] refactor: change variable --- src/core/modes/walk-mode.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 8a55d9f..2237b95 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -183,18 +183,18 @@ export class WalkMode implements Mode { private getTimerColor() { const timerColorName = vscode.workspace.getConfiguration('junbae-mode').get('timerColor'); - const timerColor = { + const timerColors = { timerColor: 'white', timerShadowColor: '#015dee', }; if (timerColorName === 'white') { - timerColor.timerColor = 'white'; - timerColor.timerShadowColor = '#015dee'; + timerColors.timerColor = 'white'; + timerColors.timerShadowColor = '#015dee'; } else if (timerColorName === 'red') { - timerColor.timerColor = '#C54B65'; - timerColor.timerShadowColor = '#FFC0CB'; + timerColors.timerColor = '#C54B65'; + timerColors.timerShadowColor = '#FFC0CB'; } - return timerColor; + return timerColors; } } From 3b3c39aa18d575a5e11f02d9b41e184bfc06efcf Mon Sep 17 00:00:00 2001 From: myunggyuns <61381189+myunggyuns@users.noreply.github.com> Date: Wed, 14 Feb 2024 08:12:33 +0900 Subject: [PATCH 21/26] fix: remove duplicate property assignments --- src/core/modes/walk-mode.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 2237b95..0a85610 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -188,13 +188,11 @@ export class WalkMode implements Mode { timerShadowColor: '#015dee', }; - if (timerColorName === 'white') { - timerColors.timerColor = 'white'; - timerColors.timerShadowColor = '#015dee'; - } else if (timerColorName === 'red') { + if (timerColorName === 'red') { timerColors.timerColor = '#C54B65'; timerColors.timerShadowColor = '#FFC0CB'; } + return timerColors; } } From 414803d1b2bd34bb5f13ef8f8a67bb488fb30536 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Wed, 14 Feb 2024 22:08:14 +0900 Subject: [PATCH 22/26] fix: the if statement changes to a switch statement. --- src/core/modes/walk-mode.ts | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 0a85610..902e06f 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -161,24 +161,20 @@ export class WalkMode implements Mode { private getLocation(firstVisibleRange: vscode.Range) { const location = vscode.workspace.getConfiguration('junbae-mode').get('location'); - let visibleStartLine = firstVisibleRange.start; - let visibleEndLine = firstVisibleRange.start; - const junbaeLocation = { top: '5%', 'font-size': '50px', bottom: 'none' }; - const timerLocation = { top: '5%', bottom: 'none' }; - - if (location === 'bottom') { - visibleStartLine = firstVisibleRange.end; - visibleEndLine = firstVisibleRange.end; - junbaeLocation.top = 'none'; - junbaeLocation.bottom = '10px'; - junbaeLocation['font-size'] = '100px'; - timerLocation.top = 'none'; - timerLocation.bottom = '70px'; + switch (location) { + case 'bottom': + return { + range: new vscode.Range(firstVisibleRange.end, firstVisibleRange.end), + junbaeLocation: { top: 'none', 'font-size': '100px', bottom: '10px' }, + timerLocation: { top: 'none', bottom: '70px' }, + }; + default: + return { + range: new vscode.Range(firstVisibleRange.start, firstVisibleRange.start), + junbaeLocation: { top: '5%', 'font-size': '50px', bottom: 'none' }, + timerLocation: { top: '5%', bottom: 'none' }, + }; } - - const range = new vscode.Range(visibleStartLine, visibleEndLine); - - return { junbaeLocation, timerLocation, range }; } private getTimerColor() { @@ -192,7 +188,7 @@ export class WalkMode implements Mode { timerColors.timerColor = '#C54B65'; timerColors.timerShadowColor = '#FFC0CB'; } - + return timerColors; } } From e351fbc9ac80aed9db2585895ef4d54bf8a01f2a Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Wed, 14 Feb 2024 22:40:40 +0900 Subject: [PATCH 23/26] fix: the if statement changes to a switch statement in timer method --- src/core/modes/walk-mode.ts | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 902e06f..8470a93 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -179,16 +179,18 @@ export class WalkMode implements Mode { private getTimerColor() { const timerColorName = vscode.workspace.getConfiguration('junbae-mode').get('timerColor'); - const timerColors = { - timerColor: 'white', - timerShadowColor: '#015dee', - }; - if (timerColorName === 'red') { - timerColors.timerColor = '#C54B65'; - timerColors.timerShadowColor = '#FFC0CB'; + switch (timerColorName) { + case 'red': + return { + timerColor: '#C54B65', + timerShadowColor: '#FFC0CB', + }; + default: + return { + timerColor: 'white', + timerShadowColor: '#015dee', + }; } - - return timerColors; } } From 36c7c002cd1e633430485c39db2c1d6ac6d0d488 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Thu, 15 Feb 2024 00:27:28 +0900 Subject: [PATCH 24/26] refactor: add type --- src/@types/index.d.ts | 2 ++ src/core/modes/walk-mode.ts | 30 ++++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 src/@types/index.d.ts diff --git a/src/@types/index.d.ts b/src/@types/index.d.ts new file mode 100644 index 0000000..61320d8 --- /dev/null +++ b/src/@types/index.d.ts @@ -0,0 +1,2 @@ +type Without = { [P in Exclude]?: never }; +type XOR = T extends object ? Without> & T : T; diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 8470a93..6f67770 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -3,6 +3,20 @@ import { TextEditorDecorationType } from 'vscode'; import { Mode } from './mode.interface'; import { objectToCssString } from '../../utils'; +type JunbaeLocation = { 'font-size': string } & XOR<{ top: string }, { bottom: string }>; +type TimerLocation = XOR<{ top: string }, { bottom: string }>; + +type Location = { + range: vscode.Range; + junbaeLocation: JunbaeLocation; + timerLocation: TimerLocation; +}; + +type TimerColor = { + timerColor: string; + timerShadowColor: string; +}; + const motions = [ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAAXNSR0IArs4c6QAAEtVJREFUeF7tndtuK7kOBeP//+gMsB1gOnDaXiJFipTqPJ7RhapFVbqdy3588T8IQAACTQg8mtRJmRCAAAS+EBZNAAEItCGAsNpERaEQgADCogcgAIE2BBBWm6goFAIQQFj0AAQg0IYAwmoTFYVCAAIIix6AAATaEEBYbaKiUAhAAGHRAxCAQBsCCKtNVBQKAQggLHoAAhBoQwBhtYmKQiEAAYRFD0AAAm0IIKw2UVEoBCCAsOgBCECgDQGE1SYqCoUABBAWPQABCLQhgLDaREWhEIAAwqIHIACBNgQQVpuoKBQCEEBY9AAEINCGAMJqExWFQgACCIsegAAE2hBAWG2iolAIQABh0QMQgEAbAgirTVQUCgEIICx6AAIQaEMAYbWJikIhAAGERQ9AAAJtCCCsNlFRKAQggLDoAQhAoA0BhNUmKgqFAAQQFj0AAQi0IYCw2kRFoRCAAMKiByAAgTYEEFabqCgUAhBAWPQABCDQhgDCahMVhUIAAgiLHoAABNoQQFhtoqJQCEAAYdEDEIBAGwIIq01UFAoBCCAsegACEGhDAGG1iYpCIQABhEUPQAACbQggrDZRUSgEIICw6IFUAt/f39+pG/6x2ePxoO9Xh2Dcn+CM4JhmI4CwbNyY9SSAsOiEVAIIKxX3dpshrO0ijT+QRzqrXseUmlfVFp/YPjsgrH2yTDuJcvnvilklBaXmVbWlBbfBRghrgxCzj6BcfoSVncoZ+yGsM3I2nfJOTDs9iZxwRlP4RSchrKLBVCjrhMt8whkr9NKsGhDWLJIbrnPCZT7hjDu1JsLaKU3jWZTPpHZ6DbzDhLyMDZQ4DWElwq66FcJ6JoOwqnbo/3UhrPoZhVeIsBBWeJNN2gBhTQLZYRnEZEvpyu2EV2MbpZxZCCuHc4ldEJYtBoRl4xYxC2FFUC26JsKyBYOwbNwiZiGsCKqF1uSyzQ0DnnN5jq6GsEaJNRvPBZsbGDzn8hxdDWGNEms2ngs2NzB4zuU5uhrCGiXWYDw/TxQXEmzj2CorIyyFUrMxXKq4wGAbx1ZZGWEplJqN4VLFBQbbOLbKyghLodRgDJ+t5IcE83zmCCufeciOXJ4QrG8XhXk+c4SVzzxkRy5PCFaElY/17Y4Iq1ggI+XwecoIrflj+SIxn+mnFRHWJ0KF/zvCWhsOwsrnj7DymU/bEWFNQ2laCGGZsLkmISwXvvzJXJJ85sqO5KJQ8o9BWH6GqStwMVJxy5uRi4zKNRBhufDlT+Zi5DNXdiQXhZJ/DMLyM0xdgYuRilvejFxkVK6BCMuFL38yFyOfubIjuSiU/GMQlp9h6gpcjFTc8mbkIqNyDURYLnw5k7kMT86VOVSuLadLc3ZBWDmcXbtwGRCWq4E2moywGoSJsBBWgzZNKRFhpWAe34SfYn9lVlnclWsb7766MxBW0WwQFsIq2ppLy0JYS/Hfb46wEFbR1lxaFsJail8TFv88etGQLmXxSpiTEcLK4Ty8CxdgGNnSCeSVgx9h5XAe3oULMIxs6QTyysGPsHI4S7vwuZWEyTTojq1psYFJvM4PwBKGIiwBUtYQhBVHGmHFsc1cGWFl0v6wF8KKCwNhxbHNXBlhZdIeEBavErZgFDFFs+ULjy07ZRbCUigljeGDWz9ohOVnWHkFhFUoHYTlDwNh+RlWXgFhFUoHYdnCqPwKVrk2G+21sxDWWv6/dkdYtjAqS6FybTbaa2chrLX8EdYE/pWlULm2CejTl0BY6cjvN+QJyxZGF25d6rSlkDMLYeVwlnahoSVML4O6cOtSpy2FnFkIK4eztAsNLWFCWDZMW8xCWIViRFi2MLpw61KnLYWcWQgrh7O0Cw0tYeIJy4Zpi1kIq1CMCMsWRhduXeq0pZAzC2HlcJZ2oaElTG+fsK7/Mfp3Bker5UccRom9jkdYfobTVkBYNpRdRNClTlsKObMQVg5naReEJWHiCcuGaYtZCKtQjAjLFkbHJxeytmWNsGzcQmbRxDasCMvGreMshFUoNYRlCwNh2bh1nIWwCqXW8eJVwHcn+spfACrXViHTuxoQVqF0EJYtDIRl49ZxFsIqlBrCsoWBsGzcOs5CWEVT45XBFkxlefEFyZbpdRbC8jMMWQFh2bAiLBu3LrMQVtGkEJYtGIRl49ZlFsIqmtTo6wOCewapcFDGRLTFqn0jzrJqTYS1ivyHfRGWLRhFCsoY2+7vZ63aN+Isq9ZEWKvII6wQ8ooUlDERxa3aN+Isq9ZEWKvID+yrNPrdE9nANm+HVvtTLXfFep5Mr2tGnFfJcVZeu66DsBokqzQ6wnr9DEsR0KjgPO2i5OhZ/4S5CKtBykqjIyyE1aCV3SUiLDfCmAUyv/IrJ/AIMeL1ylPzXT3KFwZl3+uYiDVHa9hpPMIqmibC8gczyjBCLhFr+sn0XQFhFc1u9LJFH4MnLBthhGXjdjcLYc3l6VqtmqRch7lMrnZpR+U7+kq7a46z+sGzDsLy0Js8d9dGR1jPRhkV3+T22mI5hFUoRoSVEwZPWDmcI3ZBWBFUB9bcVVJ33ym7/Wzi8SjVi6NPhSfkONDWYUNLNUnYKQsvfEKjK0801V6XEFbNS4OwFueCsGp+voOwFl+Mm+0R1uJcRi/G4nKnbl/57MpTYZfX26mhLV4MYS0OoPKljUZT+ewIKzp92/oIy8Zt2qzKl3baIW8Wqnx2hBWdvm19hGXj5pp1wudWCqCdOFSWr5JFlzEIa0FSO11UD76dOCAsTyfocxGWzmrayJ0uqgfKThwQlqcT9LkIS2c1bSTN/YqyO5Od5Dut0QMWQlgBUD8t2f1yfjqf5b93Z4KwLKmPz0FY48zcM7pfTjeAPxbozgRhRXTF65oIK4ez9O/lJZVScptdL3x3EVdrFoSVlAiN+x40wkpqxObbIKykABEWwqr2C95JrT91G4Q1Fef9YghLB70Tq53OoicYNxJhxbH9tTKNq4PeidVOZ9ETjBuJsOLYIiwj250u+U5nMcY5dRrCmorz92K7fpAciOzf0jtdcnpgbrcgrLk8b5+qrv+BD1/1D+C7s0JYcy8YwprLE2FN4MkT1gSImy6BsAKD3eniBWJ6WXpXbrueK7M3EFYgbRrUBndXbruey5aybRbCsnGTZtGgEiaesGyYjpyFsCbHjqRsQE/7cJo+sfUJwrJxu51FI9qAIiwbt9NmIazJiSMsG1CEZeN22iyENSFxJOWHeBrD087r75DnCghrAkmazw/xNIanndffIQhrFsOtfpVkGpTBhU67wKedd7AdbofzhGUkedpnLkZMb6edfGnpH1tHISwbt19PVdcluv/umxGHaRrCesVG/7xvJYRlumq//6IAwrJBRFgIa7RzENYHYjy6j7bU+/EnS+qODEz0HkNYCEvvlgkjuZyvEGGiNxbCQlh6t0wYyeVEWJ42OlpYd697fCblaannXNjqDJG4zgphfWDFd230ZrqORFg6N4Sls0JYCEvvloGRCEuHhbB0VkcIa9V3+lbtq8c/d+Rp551FD2HpJBGWzmp45GkX+LTzDjfEzQSEpZNEWDqr4ZGnXeDTzjvcEAjLjQxhuRH+XqD7ZzdK/XfI+AaFrZl4wtK5ISydlTRSufCVL7ZSP8KSWkEehLBkVGf8PazMVxXlwiMsvUFPGImw9JSPeMK64lCEouN7HXkno1lNGSFfhUllyXryqjB3Vm9UOEt0DQhrMmGENRnoAcshLD1khKWzkkYiLAkTgy4EEJbeDscJ6+71MOKVx9OIymva9SyKKJW2iOCg7HvyGE+fnMYNYf0kHnFRPY2IsM65ip4+OYfS86QIC2H96vkIcZ92qUbPi7B0YggrSVh6JD9fSR6Pj9koT2EnCyjiO6qjOSrjEZZCiSes8H+eSxHKXVSKaJT1lXX0duk1EmH1ykup9uNXcWWRrmOiv7IpQkFYcd2DsOLYrlr5OGF1aeJVDbHrvtFfnDzcKtfmOVfEXIQV+BlWRGCsaSNQWQqVa7PRjpuFsBBWXHcVWrmyFCrXVijCf6UcIazM10Car1qLP+uplktmT9ZMxFYVwrJxu51V7WJMPl7b5arlgrBsrYSwbNwQ1mRu0cshrGjCOetvK6xVX8FW7ZvTLn13qSysk39WbrSjENYosQ/jEdZkoJOWQ1iTQC5eBmFNDgBhTQY6aTmENQnk4mW2Epbyk+WZj9/VLsniXkvfvvIXD3rD1g4Iy8ZNmkVTSpjCBiGsMLTLFkZYgegRViBcYWmEJUBqNqS9sGjKZh0XXG7lfrgenS9mtkZAWDZu0iyaUsI0dRDCmoqz3GIIKzAShBUI92ZphJXPPHPH0sJa9V0/j2hW1ZzZNJX38mQXfa4uMo3m4FkfYf1Bz9P0CMvTjv65nuz8u79fAWH5CSMshOXvokIrIKxCYQSUUkJYEU8lo1/NRsfffcfn+v9ff0i18kUK6KtlS1bmXLm2ZYENboywfoAhrMHOKTq8shQq11Y0zpeyEBbC6tKrUp2VpVC5NglugUElhKVwUF4bldcxZS/POsrvKtK4oyno46ux9Ty566c+ZyTC+pD13edQd9MQ1trLg7DW8o/eHWEhrOgeS10fYaXiTt+sjbA8ZJTXyYgnKaVmXhkUSu/HjEpK6Ye7jwWUaslUoWQbg7B+uCEsWwNVmIWwKqSQUwPCQlg5nRa4C8IKhFts6eOEpXwovioj5VWlcv2Z3EZfuzzjFeaj62ey2mkvhFUoTYSlhzEqCM94hKXnEj0SYUUTHlgfYemwPAJSPlCf9ZqpyE4/NSOPEFb3mEcvZ/fzKvUrQvFwi15fOSNjXgkgrAZd4bl4DY5nKjFaKNHrmw7NpC+E1aAJENZrSNFCiV6/QduVLBFhlYzlvijk9WSjfN6nfFZ1HTPKVpFas/YqXy7CKh/R7wJHL1Wz48nlIiwZ1VYDEVazOBEWT1jNWnZquQhrKs7cxSKeMjJPsEq+CrdVv6qVyb/jXgirY2o/NSsXb/RznEwcCCuT9h57IazGOSIsW3gKN56wbGyjZyGsaMKF1lcu6qwnMmWvu58Cj/jum1KPEhU/ua5QihuDsOLYllt59NJ6LqeyF8Iq1yLlC0JY5SOaV6AiEZ6w3vP2SHxekueuhLDOzf7Pk49KTcHnueSe18PRD/U9eykcGOMngLD8DLdaAWE94/RIdquGKHYYhFUskNXlICyEtboH3+2PsCqnc2hto69yV0yKcJUP+2d9lndohGHHRlhhaFnYSgBhWcntPw9h7Z9xuxMirHaRpRWMsNJQs9E7AhGSuvtpdeUDdeXVcjRRZd/RNU8bj7BOS7zoeRFW0WCKlYWwigVyajkI69Tkx86NsMZ4MXoigWhJTSx1ylL8YKofI8LyM2QFIwGEZQR38DSEdXD4q4+OsFYn0G9/hNUvs9YVj0pq9Lt1lb8Txyuhv3URlp8hKwwQQFhPWJXFOhBn+lCElY787A0RFsLy3ACE5aHHXBcB5XVPeRJR1nEVGjBZOVfAtu2XRFjtI+x7AEU0ysVW1qlGSTlXtZor1IOwKqRwaA2KaJSLraxTDbFyrmo1V6gHYVVIgRogAAGJAMKSMDEIAhCoQABhVUiBGiAAAYnAo+P7v3QyBkEAAtsRQFjbRcqBILAvAYS1b7acDALbEeAzrO0i5UAQ2JcAwto3W04Gge0IIKztIuVAENiXAMLaN1tOBoHtCCCs7SLlQBDYlwDC2jdbTgaB7QggrO0i5UAQGCcw+nfKxneYMwNhzeHIKhBoTQBhtY6P4iFwFgGEdVbenBYCLQgovzt8/Vtd1UTGK2GLNqNICMwhgLDmcGQVCEAggQDCSoDMFhCAgJ3ArNe6WevYT/L1xSuhhx5zIdCAwCzRzFrHgwxheegxFwINCMwSzax1PMgQlocecyFQlEC0XKLXv8OKsIo2HGVBwEMgWijR6yMsT/rMhUAzAtFCiV4fYTVrOMqFQBcCV3lF/wOxvBJ26QrqhEBRAgiraDCUBQEIvBJAWHQFBCAAgT8I8EpIW0AAAm0IIKw2UVEoBCCAsOgBCECgDQGE1SYqCoUABBAWPQABCLQhgLDaRFW/UOVvLV1PEf1DhvWJUeEoAYQ1SozxtwQQFs0RTQBhRRM+aH2EdVDYi46KsBaB77btLBkp6/Cq2K078upFWHmsW++kiEb5fEpZB2G1bpXQ4hFWKN59FldEg7D2ybvqSRBW1WQK1JX5N48UIfLkVaApFpeAsBYHUHl7hFU5nTNrQ1hn5i6dGmFJmBiUSABhJcJmKwhAwEcAYfn4MRsCEEgkgLASYbMVBCDgI4CwfPyYDQEIJBJAWImw2QoCEPARQFg+fsyGAAQSCSCsRNhsBQEI+AggLB8/ZkMAAokEEFYibLaCAAR8BBCWjx+zIQCBRAIIKxE2W0EAAj4CCMvHj9kQgEAiAYSVCJutIAABHwGE5ePHbAhAIJEAwkqEzVYQgICPwH9zGSnGaiRFygAAAABJRU5ErkJggg==', 'data:image/png;base64,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', @@ -73,7 +87,7 @@ export class WalkMode implements Mode { private createWalkMotionDecorator = ( ranges: vscode.Range[], editor: vscode.TextEditor, - junbaeLocation: { top: string; ['font-size']: string; bottom: string }, + junbaeLocation: Location['junbaeLocation'], ) => { const timeLeft = this.expiredAt - new Date().getTime(); @@ -115,7 +129,7 @@ export class WalkMode implements Mode { private createTimerDecoration( ranges: vscode.Range[], editor: vscode.TextEditor, - timerLocation: { top: string; bottom: string }, + timerLocation: Location['timerLocation'], ) { if (this.decorationTimer) { clearTimeout(this.decorationTimer); @@ -158,26 +172,26 @@ export class WalkMode implements Mode { this.decorationTimer = setInterval(updateComboTimerDecoration, 50); } - private getLocation(firstVisibleRange: vscode.Range) { + private getLocation(firstVisibleRange: vscode.Range): Location { const location = vscode.workspace.getConfiguration('junbae-mode').get('location'); switch (location) { case 'bottom': return { range: new vscode.Range(firstVisibleRange.end, firstVisibleRange.end), - junbaeLocation: { top: 'none', 'font-size': '100px', bottom: '10px' }, - timerLocation: { top: 'none', bottom: '70px' }, + junbaeLocation: { 'font-size': '100px', bottom: '10px' }, + timerLocation: { bottom: '70px' }, }; default: return { range: new vscode.Range(firstVisibleRange.start, firstVisibleRange.start), - junbaeLocation: { top: '5%', 'font-size': '50px', bottom: 'none' }, - timerLocation: { top: '5%', bottom: 'none' }, + junbaeLocation: { top: '5%', 'font-size': '50px' }, + timerLocation: { top: '5%' }, }; } } - private getTimerColor() { + private getTimerColor(): TimerColor { const timerColorName = vscode.workspace.getConfiguration('junbae-mode').get('timerColor'); switch (timerColorName) { From 6b25fd23cabde04fe1fce15dd88f52fab519a514 Mon Sep 17 00:00:00 2001 From: myunggyuns Date: Thu, 15 Feb 2024 00:37:43 +0900 Subject: [PATCH 25/26] fix: change timer width ratio --- src/core/modes/walk-mode.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index 6f67770..f17fa65 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -145,7 +145,7 @@ export class WalkMode implements Mode { const { timerColor, timerShadowColor } = this.getTimerColor(); - const timerWidth = (timeLeft / this.timerDuration) * 1.5; + const timerWidth = (timeLeft / this.timerDuration) * 4; this.timerDecorator?.dispose(); this.timerDecorator = vscode.window.createTextEditorDecorationType({ before: { From 655bc68f935be163079fd947f7b9c0303fd5f286 Mon Sep 17 00:00:00 2001 From: changhwan hwang Date: Thu, 15 Feb 2024 01:09:50 +0900 Subject: [PATCH 26/26] refactor: add comment, remove useless types --- src/core/modes/walk-mode.ts | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/core/modes/walk-mode.ts b/src/core/modes/walk-mode.ts index f17fa65..3e7b44d 100644 --- a/src/core/modes/walk-mode.ts +++ b/src/core/modes/walk-mode.ts @@ -3,13 +3,17 @@ import { TextEditorDecorationType } from 'vscode'; import { Mode } from './mode.interface'; import { objectToCssString } from '../../utils'; -type JunbaeLocation = { 'font-size': string } & XOR<{ top: string }, { bottom: string }>; -type TimerLocation = XOR<{ top: string }, { bottom: string }>; +const motions = [ + 'data:image/png;base64,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', + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAAXNSR0IArs4c6QAAErVJREFUeF7tndtyHDkOBUf//9HeiJE3trVSqQ9xI0DmvA4vYB4wu6ol2x//8B8EIACBIQQ+htRJmRCAAAT+QVg0AQQgMIYAwhoTFYVCAAIIix6AAATGEEBYY6KiUAhAAGHRAxCAwBgCCGtMVBQKAQggLHoAAhAYQwBhjYmKQiEAAYRFD0AAAmMIIKwxUVEoBCCAsOgBCEBgDAGENSYqCoUABBAWPQABCIwhgLDGREWhEIAAwqIHIACBMQQQ1pioKBQCEEBY9AAEIDCGAMIaExWFQgACCIsegAAExhBAWGOiolAIQABh0QMQgMAYAghrTFQUCgEIICx6AAIQGEMAYY2JikIhAAGERQ9AAAJjCCCsMVFRKAQggLDoAQhAYAwBhDUmKgqFAAQQFj0AAQiMIYCwxkRFoRCAAMKiByAAgTEEENaYqCgUAhBAWPQABCAwhgDCGhMVhUIAAgiLHoAABMYQQFhjoqJQCEAAYdEDEIDAGAIIa0xUFAoBCCAsegACEBhDAGGNiYpCIQABhEUPQAACYwggrDFRUSgEIICw6AEIQGAMAYQ1JioKhQAEEBY9AAEIjCGAsMZERaEQgADCogdKCfz58+dP6YY/bPbx8UHf7w7BuD/BGcExzUYAYdm4MeuTAMKiE0oJIKxS3MdthrCOizT/QB7p7HodU2reVVt+YufsgLDOybLsJMrlfypmlxSUmnfVVhbcARshrANCrD6CcvkRVnUqd+yHsO7I2XTKJzGd9CRywxlN4TedhLCaBtOhrBsu8w1n7NBLUTUgrCiSB65zw2W+4YwntSbCOilN41mU76ROeg18woS8jA1UOA1hFcLuuhXC+kwGYXXt0P/VhbD6Z5ReIcJCWOlNFrQBwgoCOWEZxGRL6ZXbDa/GNko1sxBWDecWuyAsWwwIy8YtYxbCyqDadE2EZQsGYdm4ZcxCWBlUG63JZYsNA56xPFdXQ1irxIaN54LFBgbPWJ6rqyGsVWLDxnPBYgODZyzP1dUQ1iqxAeP5faK8kGCbx1ZZGWEplIaN4VLlBQbbPLbKyghLoTRsDJcqLzDY5rFVVkZYCqUBY/hupT4kmNczR1j1zFN25PKkYP11UZjXM0dY9cxTduTypGBFWPVYf90RYTULZKUcvk9ZoRU/lg+JeKbvVkRY7wg1/v8Ia284CKueP8KqZx62I8IKQ2laCGGZsLkmISwXvvrJXJJ65sqO5KJQ8o9BWH6GpStwMUpxy5uRi4zKNRBhufDVT+Zi1DNXdiQXhZJ/DMLyMyxdgYtRilvejFxkVK6BCMuFr34yF6OeubIjuSiU/GMQlp9h6QpcjFLc8mbkIqNyDURYLnw1k7kMn5w7c+hcW02X1uyCsGo4u3bhMiAsVwMdNBlhDQgTYSGsAW1aUiLCKsG8vgm/xf6dWWdxd65tvfv6zkBYTbNBWAiraWtuLQthbcX/vDnCQlhNW3NrWQhrK35NWPzz6E1DeimLV8KajBBWDeflXbgAy8i2TiCvGvwIq4bz8i5cgGVkWyeQVw1+hFXDWdqF760kTKZBT2xNiy1M4nV+AZYwFGEJkKqGIKw80ggrj23lygirkvabvRBWXhgIK49t5coIq5L2grB4lbAFo4gpmy0fPLbslFkIS6FUNIYvbv2gEZafYecVEFajdBCWPwyE5WfYeQWE1SgdhGULo/MrWOfabLT3zkJYe/l/2R1h2cLoLIXOtdlo752FsPbyR1gB/DtLoXNtAejLl0BY5cifN+QJyxbGFG5T6rSlUDMLYdVwlnahoSVM3wZN4TalTlsKNbMQVg1naRcaWsKEsGyYjpiFsBrFiLBsYUzhNqVOWwo1sxBWDWdpFxpawsQTlg3TEbMQVqMYEZYtjCncptRpS6FmFsKq4SztQkNLmH59wnr9n9l/ZnC1Wn7FYZXY9/EIy88wbAWEZUM5RQRT6rSlUDMLYdVwlnZBWBImnrBsmI6YhbAaxYiwbGFMfHIha1vWCMvGLWUWTWzDirBs3CbOQliNUkNYtjAQlo3bxFkIq1FqEy9eB3xPou/8AdC5tg6ZPtWAsBqlg7BsYSAsG7eJsxBWo9QQli0MhGXjNnEWwmqaGq8MtmA6y4sPJFumr7MQlp9hygoIy4YVYdm4TZmFsJomhbBswSAsG7cpsxBW06RWXx8Q3GeQCgdlTEZb7No34yy71kRYu8i/2Rdh2YJRpKCMse3++6xd+2acZdeaCGsXeYSVQl6RgjImo7hd+2acZdeaCGsX+YV9lUZ/eiJb2ObXod3+qpanYj1Ppq9rZpxXyTEqr1PXQVgDklUaHWF9/w5LEdCq4DztouToWf+GuQhrQMpKoyMshDWgld0lIiw3wpwFKj/5lRN4hJjxeuWp+ake5YNB2fd1TMaaqzWcNB5hNU0TYfmDWWWYIZeMNf1k5q6AsJpmt3rZso/BE5aNMMKycXuahbBiebpW6yYp12FeJne7tKvyXX2lPTXHqH7wrIOwPPSC557a6Ajrs1FWxRfcXkcsh7AaxYiwasLgCauGc8YuCCuD6sKap0rq6Sdlj99NfHy06sXVp8Ibclxo67ShrZok7ZSNF76h0ZUnmm6vSwir56VBWJtzQVg9v99BWJsvxsP2CGtzLqsXY3O5odt3PrvyVDjl9TY0tM2LIazNAXS+tNloOp8dYWWnb1sfYdm4hc3qfGnDDvmwUOezI6zs9G3rIywbN9esG763UgCdxKGzfJUspoxBWBuSOumievCdxAFheTpBn4uwdFZhI0+6qB4oJ3FAWJ5O0OciLJ1V2Eia+zvK6UxOkm9YoycshLASoL5bcvrlfHc+y/+fzgRhWVJfn4Ow1pm5Z0y/nG4APywwnQnCyuiK72sirBrO0r+XV1RKy21OvfDTRdytWRBWUSI07u+gEVZRIw7fBmEVBYiwEFa3P+Bd1Pqh2yCsUJzPiyEsHfRJrE46i55g3kiElcf2y8o0rg76JFYnnUVPMG8kwspji7CMbE+65CedxRhn6DSEFYrz62KnfpGciOzfpU+65PRAbLcgrFiej09Vr/+DL1/1L+Cns0JYsRcMYcXyRFgBPHnCCoB46BIIKzHYky5eIqZvS5/K7dRzVfYGwkqkTYPa4J7K7dRz2VK2zUJYNm7SLBpUwsQTlg3TlbMQVnDsSMoG9LYvp+kTW58gLBu3x1k0og0owrJxu20WwgpOHGHZgCIsG7fbZiGsgMSRlB/ibQxvO6+/Qz5XQFgBJGk+P8TbGN52Xn+HIKwohkf9UZIwKIsL3XaBbzvvYjs8DucJy0jytu9cjJh+ncal/cQDB727EJbO6stIhGUE9zKNi4qwVrsIYa0S+zseYRnBIaxv4BC33ksI6w0rxKQ3kzKSy/mdEkyUzuFLd4kSwpIwyYO4nAhLbpYfBvKExROWp3+W5yIshLXcNC8TrhbW09PTK9Dpf4Gcpzk8c2Gr0+MpXmeFsN6wQlh6M72ORFg6N4Sls0JYCEvvloWRCEuHhbB0VlcIa1dD7NpXjz925G3njaX3uRrf8f1OFWFldN3fNW+7wLedN6N1EBbC+vKpVfmF+m0X+LbzIqwMAgirVFjTv7tR6n9qKX5A4b/APGEhLIS1cI8Q1gKshKEIC2EhrIWLhbAWYCUMRVgI6wsBz4VU+vPptSiqETO+J1KY8LqnpO8fE9Un/kp6rnDFTwlf0SuX0xMVwvLQYy7C4gmLJ6w3HlAkzhNWjUwRFsJ6JJDdHJ71FYkov6IRtU7NdWUXT8/cQO+6V8Kn18OMJwhP80WJJmqdGy5DhzN6eqZD/dk1IKy/hBHWJ4gMDtlNfNL6CItXwhavhKuXShGH8vSkrLNaG+PzCCAshIWw8u4XKwcTQFgIC2EFXyqWyyOAsBDWFwIZv3iZ176sfBsBhIWwENZtt37weREWwkJYgy/wbaUjLIS17Q8/8xO623RjOy9fU+jcrvg9rMqG4BNSbz5GfhKo7M/pzBFWcIIIKxjoBcshLD3kY4W1qwl27atHzshuBPiQ0xNBWDoraSTCkjAx6IUAwtLbAWHprKSRCEvCxCCEZeqBo4TV7c/W8clp6skrJnk+2Lr1eWVgCCuRNsJKhDt8aYRlCxBh2bhJsxCWhOnKQQjLFvt4YXmCtyHTZyEsndVtI1d7Q+nz1TUnMkdYiand0ECJ+I5eerU3ENZnOyCsxGux2pSJpbB0MwKrvYGwBghr109DVpvp9S7sqrnZfaScHwis9oYiqafeO/XPsbZ+wloNOOqWIKwokqzj+TBDWN/7B2G9+SRc/aTaJVnU0J/Aam8grKbCWg1SaU1P2K/rK8JS9vI8tSnnZUxPAkrunv5Xeq8nGVtVLZ6wPIE9HXs1yNXxyqP+q+yUxrVFyKzOBJTcPf3v6dvO3J5qQ1h/yXiCV+YqjTuxgaj5dwJK7ghL76IWwlLKVUJ9epVbnetZZ/UVUhmv8GFMDYHVXlrNVxHc09P96l41xGJ3QVhveD691j0+sn58vGW62pSxkbOahwDC8tDzz317ufxbxKzgaZTVuTxhxWR24iqrvbT61LP6YbY6fnomY4TlAa00WcaTlFKz8v2Xsg5jaggogsjONHv9GpK2XRDWX24Iy9ZAt81CWHsTR1gIa28HDtsdYe0N7DphrX6nUBnP6qtrZW037JXBXxHcKtuMNVdr2DUeYe0i/8O+GRem0fHal5LBP0MuGWu2D+e/b0JTCvXUOSXgjAvj4Xbb3Az+Gb2XseaUrK94wpoSxlOdGRdpIhOFg+dcGV8XRMnl5p8MvmaKsDwdXjRXuagZl63oePI2Cgd5sR8GZjBEWJ5Evs9FWLE8U1ZTLmrGZUs5jGNRhYNj+X8yGCIsTyIIK5behtWUS5tx8TYc9d8toy58Zf1Rr29R61SePXsvnrCyCQevj7CCgSYsFyWaqHUSjrhtSYS1Db1tY4Rl41Y5K0o0UetUnj17L4SVTbho/c4iU2pTMHV+1Y2SS9Q6Cs+JYxDWxNR+qFmRwq4Lr9SmxLCrfqW2KNFEraPUPHEMwpqYGsJql1qUaKLWaQcoqCCEFQSy6zJRTzdR5+v8lOQ5o+enmUhKJ4+wdFYjRyKsmtgQVg1nhFXDedsuCKsGPcKq4Yywaji32CXqUp36WucJKeqDAba/p4CwPF06bC7CygsMYeWxfV0ZYdVwbrELwsqLAWHlsUVYNWxb7OL5CZRnbovDU8RxBHjCOi7SrwfySMcz93CsHG8TAYS1CXzVth7peOZWnY997iKAsA7PO/t7K+W7G37ydXiTFR4PYRXC3rEVwtpBnT2zCCCsLLJN1kVYTYKgjBACCCsE455FlNexLz8S/vhYyltZ/+l1j++/9vTE6bsuNfDpMKadTxEKwpqWKvX+RgBhDe4PhDU4PEo3EUBYJmz7Jnm+k9pV9cSad7Fi398JIKxhHTLx8k+seVhbXFMuwhoW9cTLP7HmYW1xTbkIa1jUq99bdTsev0TaLZFZ9SCsWXl9+YdFh5X+b7kIa2JqfWpGWH2ykCrhCUvCxKBDCSCsQ4PlWBA4kQDCOjFVzgSBQwkgrEOD5VgQOJHAx/TvRE4MhTNBAAI/E0BYdAYEIDCGAMIaExWFQgACfIdFD0AAAmMIIKwxUVEoBCCAsOgBCEBgDAGENSYqCoUABBAWPQABCIwhgLDGREWhEIAAwqIHIBBAgH90IwCisATCEiAxBALvCCCsd4Ri/j/CiuHIKpcTQFg1DYCwajizyyEElD97+/qXFCKy2OARVixPVjucAMLaGzDC2suf3YcRQFh7A0NYe/mz+wACUa91UesMQJZWIsJKQ8vCpxCIEk3UOqdwtZwDYVmoMecqAlGiiVrnKvj/d1iEdXP6nP2RQLZcstc/NVqEdWqynMtFIFso2eu7Dt94MsJqHA6l7SOQLZTs9feRy90ZYeXyZXUIvCXwKi/+ZezfcSGst+3EAAjkEkBYOl+EpbNiJARSCCAsHSvC0lkxEgIQ2EwAYW0OgO0hAAGdAMLSWTESAhDYTABhbQ6A7SEAAZ0AwtJZMRICENhMAGFtDoDtIQABnQDC0lmlj1T+rqXXIvglw/RI2KAZAYTVKBCE1SgMSmlJAGE1igVhNQqDUloSQFhFsUTJSFmHV8WiUNmmnADCKkKuiEb5fkpZB2EVhco25QQQVhFyRTQIqygMthlLAGElRlf5dx4pQuTJKzFsli4hgLASMSOsRLgsfSUBhJUYO8JKhMvSVxJAWFfGzqEhMJMAwpqZG1VD4EoCCOvK2Dk0BGYSQFgzc6NqCFxJAGFdGTuHhsBMAghrZm5UDYErCSCsK2Pn0BCYSQBhzcyNqiFwJQGEdWXsHBoCMwkgrJm5UTUEriSAsK6MnUNDYCYBhDUzN6qGwJUEENaVsXNoCMwkgLBm5kbVELiSAMK6MnYODYGZBP4DLkDJtw/S85AAAAAASUVORK5CYII=', + 'data:image/png;base64,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', + 'data:image/png;base64,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', +]; type Location = { range: vscode.Range; - junbaeLocation: JunbaeLocation; - timerLocation: TimerLocation; + junbaeLocation: { 'font-size': string } & XOR<{ top: string }, { bottom: string }>; + timerLocation: XOR<{ top: string }, { bottom: string }>; }; type TimerColor = { @@ -17,12 +21,6 @@ type TimerColor = { timerShadowColor: string; }; -const motions = [ - 'data:image/png;base64,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', - 'data:image/png;base64,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', - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAAXNSR0IArs4c6QAAEtVJREFUeF7tndlyJLsNBaX//+hx2JoIt0JTrQOAAAEy/ejLBcwDpqpay3x+8D8IQAACQwh8DqmTMiEAAQh8ICyaAAIQGEMAYY2JikIhAAGERQ9AAAJjCCCsMVFRKAQggLDoAQhAYAwBhDUmKgqFAAQQFj0AAQiMIYCwxkRFoRCAAMKiByAAgTEEENaYqCgUAhBAWPQABCAwhgDCGhMVhUIAAgiLHoAABMYQQFhjoqJQCEAAYdEDEIDAGAIIa0xUFAoBCCAsegACEBhDAGGNiYpCIQABhEUPQAACYwggrDFRUSgEIICw6AEIQGAMAYQ1JioKhQAEEBY9AAEIjCGAsMZERaEQgADCogcgAIExBBDWmKgoFAIQQFj0AAQgMIYAwhoTFYVCAAIIix6AAATGEEBYY6KiUAhAAGHRAxCAwBgCCGtMVBQKAQggLHoAAhAYQwBhjYmKQiEAAYRFD0AAAmMIIKwxUVEoBCCAsOgBCEBgDAGENSYqCoUABBAWPQABCIwhgLDGREWhEIAAwqIHIACBMQQQ1pioKBQCEEBY9AAEIDCGAMIaExWFQgACCIsegAAExhBAWGOiolAIQABh0QOlBP78+fOndMN/bPb5+Unf7w7BuT/BOcExzUcAYfm4MeuLAMKiE0oJIKxS3MdthrCOizT/QBHp7HodU2reVVt+YufsgLDOybLsJMrlfypmlxSUmnfVVhbcARshrANCrD6CcvkRVnUqd+yHsO7I2XXKJzGd9CRywxld4TedhLCaBtOhrBsu8w1n7NBLq2pAWKtIHrjODZf5hjOe1JoI66Q0nWdRPpM66TXwCRPycjZQ4TSEVQi761YI6ysZhNW1Q/9fF8Lqn1F6hQgLYaU32aINENYikBOWQUy+lF653fBq7KNUMwth1XBusQvC8sWAsHzcMmYhrAyqTddEWL5gEJaPW8YshJVBtdGaXLa1YcBzLU/ragjLSmzYeC7Y2sDguZandTWEZSU2bDwXbG1g8FzL07oawrISGzCenyfKCwm2eWyVlRGWQmnYGC5VXmCwzWOrrIywFErDxnCp8gKDbR5bZWWEpVAaMIbPVupDgnk9c4RVzzxlRy5PCta3i8K8njnCqmeesiOXJwUrwqrH+nZHhNUsEEs5fJ5iobV+LF8k1jP9bUWE9Ruhxv8dYe0NB2HV80dY9cyX7YiwlqF0LYSwXNhCkxBWCF/9ZC5JPXNlR3JRKMXHIKw4w9IVuBiluOXNyEVGFRqIsEL46idzMeqZKzuSi0IpPgZhxRmWrsDFKMUtb0YuMqrQQIQVwlc/mYtRz1zZkVwUSvExCCvOsHQFLkYpbnkzcpFRhQYirBC+mslchi/OnTl0rq2mS2t2QVg1nEO7cBkQVqiBDpqMsAaEibAQ1oA2LSkRYZVgtm/CT7H/ZNZZ3J1rs3df3xkIq2k2CAthNW3NrWUhrK34nzdHWAiraWtuLQthbcWvCYt/Hr1pSC9l8UpYkxHCquFs3oULYEa2dQJ51eBHWDWczbtwAczItk4grxr8CKuGs7QLn1tJmFyDnti6FjNM4nXeAEsYirAESFVDEFYeaYSVx7ZyZYRVSfuXvRBWXhgIK49t5coIq5K2QVi8SviCUcSUzZYvPL7slFkIS6FUNIYPbuOgEVacYecVEFajdBBWPAyEFWfYeQWE1SgdhOULo/MrWOfafLT3zkJYe/l/2x1h+cLoLIXOtflo752FsPbyR1gL+HeWQufaFqAvXwJhlSN/3pAnLF8YU7hNqdOXQs0shFXDWdqFhpYw/Rg0hduUOn0p1MxCWDWcpV1oaAkTwvJhOmIWwmoUI8LyhTGF25Q6fSnUzEJYNZylXWhoCRNPWD5MR8xCWI1iRFi+MKZwm1KnL4WaWQirhrO0Cw0tYXr7hPX6H7N/Z9BaLT/iYCX2czzCijNctgLC8qGcIoIpdfpSqJmFsGo4S7sgLAkTT1g+TEfMQliNYkRYvjAmPrmQtS9rhOXjljKLJvZhRVg+bhNnIaxGqSEsXxgIy8dt4iyE1Si1iRevA74n0Xf+AtC5tg6ZPtWAsBqlg7B8YSAsH7eJsxBWo9QQli8MhOXjNnEWwmqaGq8MvmA6y4svSL5MX2chrDjDlBUQlg8rwvJxmzILYTVNCmH5gkFYPm5TZiGspklZXx8Q3FeQCgdlTEZb7No34yy71kRYu8j/si/C8gWjSEEZ49v9/axd+2acZdeaCGsXeYSVQl6RgjImo7hd+2acZdeaCGsXecO+SqM/PZEZtnk7tNufankqNvJk+rpmxnmVHFfldeo6CGtAskqjI6yfn2EpArIKLtIuSo6R9W+Yi7AGpKw0OsJCWANaOVwiwgojzFmg8iu/coKIEDNeryI1P9WjfGFQ9n0dk7GmtYaTxiOspmkirHgwVoYZcslYM05m7goIq2l21suWfQyesHyEEZaP29MshLWWZ2i1bpIKHeZlcrdLa5Wv9ZX21BxX9UNkHYQVobd47qmNjrC+GsUqvsXtdcRyCKtRjAirJgyesGo4Z+yCsDKoGtY8VVJP3yl7/Gzi87NVL1qfCm/I0dDWaUNbNUnaKRsvfEOjK0803V6XEFbPS4OwNueCsHp+voOwNl+Mh+0R1uZcrBdjc7lLt+98duWpcMrr7dLQNi+GsDYH0PnSZqPpfHaElZ2+b32E5eO2bFbnS7vskA8LdT47wspO37c+wvJxC8264XMrBdBJHDrLV8liyhiEtSGpky5qBN9JHBBWpBP0uQhLZ7Vs5EkXNQLlJA4IK9IJ+lyEpbNaNpLm/olyOpOT5Lus0RMWQlgJUH9bcvrl/O18nv8+nQnC8qRun4Ow7MzCM6ZfzjCAfywwnQnCyuiKn2sirBrO0r+XV1RKy21OvfDTRdytWRBWUSI07nvQCKuoEYdvg7CKAkRYCKvbL3gXtf7SbRDWUpzPiyEsHfRJrE46i55g3kiElcf228o0rg76JFYnnUVPMG8kwspji7CcbE+65CedxRnn0mkIaynO74ud+kFyIrL/LX3SJacH1nYLwlrL8/Gp6vU/8OGr/gH8dFYIa+0FQ1hreSKsBTx5wloA8dAlEFZisCddvERMP5Y+ldup56rsDYSVSJsG9cE9ldup5/Kl7JuFsHzcpFk0qISJJywfpitnIazFsSMpH9DbPpymT3x9grB83B5n0Yg+oAjLx+22WQhrceIIywcUYfm43TYLYS1IHEnFId7G8LbzxjvkawWEtYAkzReHeBvD284b7xCEtYrhUb9KsgyKcaHbLvBt5zW2w+NwnrCcJG/7zMWJ6e20my8t/ePrKITl4/btqep1iem/++bE4ZqGsH5io3/etxLCcl21739RAGH5ICIshGXtHIT1CzEe3a0t9X78zZJ6IgMTvccQFsLSu2XBSC7nT4gw0RsLYSEsvVsWjORyIqxIG10trKfXPT6TirTU11zY6gyRuM4KYf3Ciu/a6M30OhJh6dwQls4KYSEsvVsMIxGWDgth6ayuENau7/Tt2lePf+3I2867ih7C0kkiLJ2VeeRtF/i285ob4mECwtJJIiydlXnkbRf4tvOaGwJhhZEhrDDC7wtM/+xGqf8JGd+g8DUTT1g6N4Sls5JGKhe+88VW6kdYUivIgxCWjOqOv4dV+aqiXHiEpTfoDSMRlp7yFU9YrzgUoej4fo58ktGqpsyQr8Kks2QjeXWYu6o3OpwluwaEtZgwwloM9ILlEJYeMsLSWUkjEZaEiUEvBBCW3g7XCevp9TDjlSfSiMpr2utZFFEqbZHBQdn35jGRPrmNG8L6m3jGRY00IsK65ypG+uQeSl8nRVgI61vPZ4j7tktlPS/C0okhrCJh6ZH8/Ury+flrNspT2M0CyviOqjVHZTzCUijxhJX+z3MpQnmKShGNsr6yjt4us0YirFl5KdX++lVcWWTqmOyvbIpQEFZe9yCsPLa7Vr5OWFOaeFdDnLpv9henCLfOtUXOlTEXYSV+hpURGGv6CHSWQufafLTzZiEshJXXXY1W7iyFzrU1ivB/pVwhrMrXQJqvW4t/1dMtl8qe7JmIryqE5eP2OKvbxVh8vLHLdcsFYflaCWH5uCGsxdyyl0NY2YRr1j9WWLu+gu3at6Zd5u7SWVg3/6yctaMQlpXYL+MR1mKgi5ZDWItAbl4GYS0OAGEtBrpoOYS1COTmZY4SlvKT5ZWP390uyeZeK9++8xcPesPXDgjLx02aRVNKmNIGIaw0tNsWRliJ6BFWIlxhaYQlQBo2ZLywaMphHZdcbud+eD06X8x8jYCwfNykWTSlhGnpIIS1FGe7xRBWYiQIKxHuw9IIq5555Y6thbXru34R0eyqubJpOu8VyS77XFNkms0hsj7C+ge9SNMjrEg7xudGsovv/n4FhBUnjLAQVryLGq2AsBqFkVBKC2FlPJVYv5pZxz99x+f1/3/9IdXOFymhr7Yt2Zlz59q2BWbcGGH9BYawjJ3TdHhnKXSurWmcP8pCWAhrSq9KdXaWQufaJLgNBrUQlsJBeW1UXseUvSLrKL+rSONaU9DHd2MbeXLXT33PSIT1S9ZPn0M9TUNYey8PwtrLP3t3hIWwsnusdH2EVYq7fLMxwoqQUV4nM56klJp5ZVAovR9jlZTSD08fCyjVkqlCyTcGYf3lhrB8DdRhFsLqkEJNDQgLYdV0WuIuCCsRbrOlrxOW8qH4royUV5XO9Vdys752RcYrzK3rV7I6aS+E1ShNhKWHYRVEZDzC0nPJHomwsgkb1kdYOqyIgJQP1Fe9Ziqy00/NyCuENT1m6+Wcfl6lfkUoEW7Z6ytnZMxPAghrQFdELt6A47lKzBZK9vquQzPpA2ENaAKE9TOkbKFkrz+g7VqWiLBaxvJcFPL6YqN83qd8VvU6xspWkdqw9mpfLsJqH9H3Aq2Xatjx5HIRlozqqIEIa1icCIsnrGEtu7RchLUUZ+1iGU8ZlSfYJV+F265f1arkP3EvhDUxtb81KxfP+jlOJQ6EVUn7jL0Q1uAcEZYvPIUbT1g+ttmzEFY24UbrKxd11ROZstfTT4FnfPdNqUeJip9cVyjljUFYeWzbrWy9tJHLqeyFsNq1SPuCEFb7iNYVqEiEJ6z3vCMSX5fkvSshrHuz/+fJrVJT8EUueeT10PqhfmQvhQNj4gQQVpzhUSsgrK84I5I9qiGaHQZhNQtkdzkIC2Ht7sF3+yOszulcWpv1Ve4VkyJc5cP+VZ/lXRph2rERVhpaFvYSQFhecufPQ1jnZzzuhAhrXGRlBSOsMtRs9I5AhqSeflpd+UBdebW0Jqrsa13ztvEI67bEm54XYTUNpllZCKtZILeWg7BuTd52boRl48XohQSyJbWw1CVL8YOpcYwIK86QFZwEEJYT3MXTENbF4e8+OsLancC8/RHWvMxGV2yVlPW7dZ2/E8crYbx1EVacISsYCCCsL1idxWqIs3wowipHfveGCAthRW4AworQY26IgPK6pzyJKOuECk2YrJwrYdvxSyKs8RHOPYAiGuViK+t0o6Scq1vNHepBWB1SuLQGRTTKxVbW6YZYOVe3mjvUg7A6pEANEICARABhSZgYBAEIdCCAsDqkQA0QgIBE4HPi+790MgZBAALHEUBYx0XKgSBwLgGEdW62nAwCxxHgM6zjIuVAEDiXAMI6N1tOBoHjCCCs4yLlQBA4lwDCOjdbTgaB4wggrOMi5UAQOJcAwjo3W04GgeMIIKzjIu19IOvfw+p9GqqrJoCwqolfvh/CurwBgsdHWEGATLcRQFg2Xoz+TgBh0REpBJTfUX36p+RfC+LvRqXEM3ZRhDU2ut6FI6ze+UytDmFNTa553QireUBDy0NYQ4PrWPaqz6dWrdORETXFCCCsGD9mvxBYJZpV6xDOeQQQ1nmZbjvRKtGsWmcbCDZOI4Cw0tDesXC2XLLXvyOlc06JsM7JcstJsoWSvf4WaGzqJoCw3OiY+F8C2ULJXp8UZxFAWLPyurraV3nxA6V3tgLCujP3kadGWCNjW1o0wlqKk8UyCSCsTLoz1kZYM3KiSghA4OPjA2HRBhCAwBgCCGtMVBQKAQggLHoAAhAYQwBhjYmKQiEAAYRFD0AAAmMIjBSW8reWXhPghwzH9COFQuAtAYRFg0AAAmMIIKwxUVEoBCDQTlirXveUdXhV5AJAYBYBhDUrL6qFwNUEENbV8XN4CMwi0EJYlX/ziFfFWQ1KtRD49h3/DjgQVocUqAEC/QnwhPWPjPgwvn/jUuGdBFoI6070nBoCELASQFhWYoyHAAS2EUBY29CzMQQgYCWAsKzEGA8BCGwjgLC2oWdjCEDASgBhWYkxHgIQ2EYAYW1Dz8YQgICVAMKyEmM8BCCwjQDC2oaejSEAASsBhGUlxngIQGAbAYS1DT0bQwACVgIIy0qM8RCAwDYCCGsbejaGAASsBBCWlRjjIQCBbQQQ1jb0bAwBCFgJ/AchsCnG0BzaGwAAAABJRU5ErkJggg==', - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAAXNSR0IArs4c6QAAEwpJREFUeF7tndtyHDkOBa3//2hPxMi7U4o2uw8BAgTInFfzAuYBU1Wty3z94j8IQAACTQh8NamTMiEAAQj8Qlg0AQQg0IYAwmoTFYVCAAIIix6AAATaEEBYbaKiUAhAAGHRAxCAQBsCCKtNVBQKAQggLHoAAhBoQwBhtYmKQiEAAYRFD0AAAm0IIKw2UVEoBCCAsOgBCECgDQGE1SYqCoUABBAWPQABCLQhgLDaREWhEIAAwqIHIACBNgQQVpuoKBQCEEBY9AAEINCGAMJqExWFQgACCIsegAAE2hBAWG2iolAIQABh0QMQgEAbAgirTVQUCgEIICx6AAIQaEMAYbWJikIhAAGERQ9AAAJtCCCsNlFRKAQggLDoAQhAoA0BhNUmKgqFAAQQFj0AAQi0IYCw2kRFoRCAAMKiByAAgTYEEFabqCgUAhBAWPQABCDQhgDCahMVhUIAAgiLHoAABNoQQFhtoqJQCEAAYdEDEIBAGwIIq01UFAoBCCAsegACEGhDAGG1iYpCIQABhEUPQAACbQggrDZRUSgEIICw6AEIQKANAYTVJioKhQAEEBY9AAEItCGAsNpERaEQgADCogdSCfz+/ft36oZ/2ezr64u+3x2CcX+CM4Jjmo0AwrJxY9Y3AYRFJ6QSQFipuI/bDGEdF2n8gTzS2fU6ptS8q7b4xM7ZAWGdk2XaSZTLPypmlxSUmnfVlhbcARshrANCzD6CcvkRVnYqd+yHsO7I2XTKkZhOehK54Yym8ItOQlhFg6lQ1g2X+YYzVuilVTUgrFUkD1znhst8wxlPak2EdVKaxrMon0md9Bo4woS8jA2UOA1hJcKuuhXC+k4GYVXt0P/qQlj1MwqvEGEhrPAmW7QBwloEssMyiMmW0pPbDa/GNko5sxBWDucSuyAsWwwIy8YtYhbCiqBadE2EZQsGYdm4RcxCWBFUC63JZVsbBjzX8pxdDWHNEms2ngu2NjB4ruU5uxrCmiXWbDwXbG1g8FzLc3Y1hDVLrMF4fp4oLiTYxrFVVkZYCqVmY7hUcYHBNo6tsjLCUig1G8OligsMtnFslZURlkKpwRg+W8kPCeb5zBFWPvOQHbk8IVjfLgrzfOYIK595yI5cnhCsCCsf69sdEVaxQGbK4fOUGVrrx/JFYj3TTysirE+ECv87wtobDsLK54+w8pkv2xFhLUNpWghhmbC5JiEsF778yVySfObKjuSiUPKPQVh+hqkrcDFSccubkYuMyjUQYbnw5U/mYuQzV3YkF4WSfwzC8jNMXYGLkYpb3oxcZFSugQjLhS9/Mhcjn7myI7kolPxjEJafYeoKXIxU3PJm5CKjcg1EWC58OZO5DN+cK3OoXFtOl+bsgrByOLt24TIgLFcDHTQZYTUIE2EhrAZtmlIiwkrBPL8JP8X+yqyyuCvXNt99dWcgrKLZICyEVbQ1t5aFsLbiH2+OsBBW0dbcWhbC2opfExb/e/SiIT3K4pUwJyOElcN5ehcuwDSyrRPIKwc/wsrhPL0LF2Aa2dYJ5JWDH2HlcJZ24XMrCZNp0IitabGJSbzOT8AShiIsAVLWEIQVRxphxbHNXBlhZdL+sBfCigsDYcWxzVwZYWXSnhAWrxK2YBQxRbPlC48tO2UWwlIoJY3hg1s/aITlZ1h5BYRVKB2E5Q8DYfkZVl4BYRVKB2HZwqj8Cla5NhvtvbMQ1l7+P3ZHWLYwKkuhcm022ntnIay9/BHWAv6VpVC5tgXo05dAWOnIxxvyhGULowu3LnXaUsiZhbByOEu70NASppdBXbh1qdOWQs4shJXDWdqFhpYwISwbpiNmIaxCMSIsWxhduHWp05ZCziyElcNZ2oWGljDxhGXDdMQshFUoRoRlC6MLty512lLImYWwcjhLu9DQEqa3T1jPf4z+ncHZavkRh1lir+MRlp/hshUQlg1lFxF0qdOWQs4shJXDWdoFYUmYeMKyYTpiFsIqFCPCsoXR8cmFrG1ZIywbt5BZNLENK8Kyces4C2EVSg1h2cJAWDZuHWchrEKpdbx4FfCNRF/5C0Dl2ipkOqoBYRVKB2HZwkBYNm4dZyGsQqkhLFsYCMvGreMshFU0NV4ZbMFUlhdfkGyZPmchLD/DkBUQlg0rwrJx6zILYRVNCmHZgkFYNm5dZiGsoknNvj4guO8gFQ7KmIi22LVvxFl2rYmwdpH/sC/CsgWjSEEZY9v9/axd+0acZdeaCGsXeYQVQl6RgjImorhd+0acZdeaCGsX+Yl9lUYfPZFNbPN2aLU/1TIq1vNk+lwz4rxKjqvyOnUdhNUgWaXREdbrZ1iKgGYF52kXJUfP+jfMRVgNUlYaHWEhrAat7C4RYbkRxiyQ+ZVfOYFHiBGvV56aR/UoXxiUfZ9jItacreGk8QiraJoIyx/MLMMIuUSs6SfTdwWEVTS72csWfQyesGyEEZaN22gWwlrL07VaNUm5DvOYXO3Szsp39pX21BxX9YNnHYTlobd47qmNjrC+G2VWfIvb64jlEFahGBFWThg8YeVwjtgFYUVQnVjzVEmNvlM2/Gzi66tUL84+Fd6Q40Rbhw0t1SRhpyy88A2NrjzRVHtdQlg1Lw3C2pwLwqr5+Q7C2nwxBtsjrM25zF6MzeUu3b7y2ZWnwi6vt0tD27wYwtocQOVLG42m8tkRVnT6tvURlo3bslmVL+2yQw4Wqnx2hBWdvm19hGXj5pp1w+dWCqCTOFSWr5JFlzEIa0NSJ11UD76TOCAsTyfocxGWzmrZyJMuqgfKSRwQlqcT9LkIS2e1bCTN/YqyO5OT5Lus0QMWQlgBUD8t2f1yfjqf5d+7M0FYltTn5yCseWbuGd0vpxvAXxbozgRhRXTF65oIK4ez9P/LSyql5DanXvjuIq7WLAgrKREa9z1ohJXUiM23QVhJASIshFXtF7yTWn/pNghrKc7xYghLB30Sq5POoicYNxJhxbH9sTKNq4M+idVJZ9ETjBuJsOLYIiwj25Mu+UlnMca5dBrCWorz52KnfpAciOzfpU+65PTA2m5BWGt5Dp+qnv/Ah6/6B/DdWSGstRcMYa3libAW8OQJawHEQ5dAWIHBnnTxAjG9LH0qt1PPldkbCCuQNg1qg3sqt1PPZUvZNgth2bhJs2hQCRNPWDZMV85CWItjR1I2oLd9OE2f2PoEYdm4DWfRiDagCMvG7bZZCGtx4gjLBhRh2bjdNgthLUgcSfkh3sbwtvP6O+R7BYS1gCTN54d4G8PbzuvvEIS1iuFRv0qyDMrkQrdd4NvOO9kOw+E8YRlJ3vaZixHT22k3X1r6x9ZRCMvG7cdT1XOJ7r/7ZsRhmoawXrHRP+9bCWGZrtrPvyiAsGwQERbCmu0chPWBGI/usy31fvzNkhqRgYneYwgLYendsmAkl/MVIkz0xkJYCEvvlgUjuZwIy9NGVwtr9LrHZ1KelvqeC1udIRLXWSGsD6z4ro3eTM+RCEvnhrB0VggLYendMjESYemwEJbO6gph7fpO36599fjXjrztvKvoISydJMLSWU2PvO0C33be6YYYTEBYOkmEpbOaHnnbBb7tvNMNgbDcyBCWG+HPBbp/dqPUP0LGNyhszcQTls4NYemspJHKha98sZX6EZbUCvIghCWjuuPvYWW+qigXHmHpDXrDSISlp3zFE9YThyIUHd/ryJGMVjVlhHwVJpUl68mrwtxVvVHhLNE1IKzFhBHWYqAXLIew9JARls5KGomwJEwMehBAWHo7XCes0ethxCuPpxGV17TnWRRRKm0RwUHZ9+Yxnj65jRvC+pN4xEX1NCLCuucqevrkHkrfJ0VYCOtHz0eI+7ZLNXtehKUTQ1hJwtIj+fOV5OvrYzbKUxgCmiWfPx5h6cw/Xgp9qX4joxtFEcqImiIaZX1lnX7JnVVxdB+eRAth8YR1Uj+3PAvC0mO7TlgRP3ip42YkBF4JICy9KxBW4BOWHgMjbyaAsPT0ERbC0ruFkSEEEJaO9QphZb4G0nx68zHymwA9o3cCwtJZSSNpPgkTgx4E6Bm9HRCWzkoaSfNJmBiEsEw9cKywMl8Dn+R37WtKn0nbCPCFzYYeYdm4DWchrMVAD10OYdmCRVg2bghrMbfblkNYtsSPEla1X1WhKW1NecMsesOWMsKycZNm0ZQSpisH0Ru22BGWjZs0i6aUMF05iN6wxd5eWJU/5KYpbU156qzKvdqFOcIKTAphBcJtuDTC8oeGsPwMpe8Y8nepAkE3WRph+YMqLaxd3/XzPBntqtnfCqwQTQBh+QkjrL8wRFj+xmKFVwIIy98VCAth+buIFSQCCEvC9HZQCWFFvEbNNsfs+CdVZa7nqc0fMyvsIqD0xq7aOu6LsP6k5mksZS7C6ng9/DUrveHf5Z4VEBbCuqfbN5wUYa2FXkJYypGU18bnOs8fI5id61lH+fEFnraUxM8YQ9Zrc0RYH3jOig9hrW3Q7qshrLUJIiyEtbajWO0HAYS1tiHaCMtzbOWVMOJJSqmZzzgUSn3HzApL6dXRRxZ9KemVI6w/rBCW3jSM1AkgLJ2VMhJhISylTxhjJICwjOAG064TlvKh+FrE+mrK60Dl+vWT3jPSI6xR1rNrnkQbYRVKE2EVCmNRKbNyUcYrYxaVX24ZhFUoEoRVKIxFpczKRRmvjFlUfrllrhBWOeqTBSGyb2AKBwVt9Gu1p06lNoSlpMyYbQSUC6A0+rYDLNpY4aBsFc3KU6dSG8JSUmbMNgLKBVAafdsBFm2scFC2imblqVOpDWEpKTOmBAHlMihNX+IwQhGrLqfCTSjnl/Kdu+c6ys/3zea1ioly3mpj+AyrWiIf6lEu3uwFqIxg1eVUuCkcEJZCKW4MwopjG7KycvEQ1it6hZsSGMJSKMWNQVhxbFNXVi7kLpEptSmwIuof1aa8yo1e/ZSzzI5R6pxds+N4hNUxtb/UrEgh4sIr+JTalHUi6ldEoNQfUduTiVKnwrD7GITVPcE/9Ve4VCOUSm1KDBFSUESg1B9RG8J67QqEpdyUxmOUy5Z5vOiLnXmWVd8QQEx6aghLZ9VyJMKKiw1hxbEdrYyw8pmn7oiw4nAjrDi2CCufbZsdZy/e7Pg2IByFepgon6M5SjtqKk9YR8VpO8zsZZsdb6uq1ywPE4SlZ42wdFbHjpy9bLPjjwX3OJiHCcLSOwRh6ayOHTl72WbHHwvOISwkZesKhGXjdtSsWQHNjj8K1uAws0wQlq0rEJaN21GzPJftpJ+r8oTqYfjcF57vU0BYni5tNlf5EQflwijrKGiUvZR1Msd4now8czPPWHkvhFU5ncW1KaJRJKKso5Su7KWskznGIx3P3MwzVt4LYVVOZ3FtimgUiSjrKKUreynrZI7xSMczN/OMlfdCWJXTMdamCKWCLGY/9zHicE/ziMYz1134gQsgrANDRVhrQ/VIxzN37SnOWA1hnZHjj1MgrLWheqTjmbv2FGeshrDOyHEorAqvfiPEXS7zbJ2z4w9swbAjIawwtPsWvuGzoUy6swKaHZ95lu57IazuCf6lfoS1NtRZAc2OX1vt2ashrAPzVT7Dqnzsjq+xI56Vz1K5B4Y8OxZNze8JIKy4Dplli7DWZsET1lqeJVabvVQlin4UUfmSz7KtfJZquSv1ICyFEmMgAIESBBBWiRgoAgIQUAggLIUSYyAAgRIEvmbfyUtUTREQgMCVBBDWlbFzaAj0JICweuZG1RC4kgCfYV0ZO4eGQE8CCKtnblQNgSsJIKwrY+fQEOhJAGH1zO3fqvkl28bhUbqJAMIyYasxCWHVyIEq8gggrDzWy3dCWMuRsmBxAgireEDvXv2epT9/yRaRNQiVEk0EEJYJW+4k5bcREFZuJuy2hwDC2sN9aleENYWLwQcTQFhFw131WrdqnaKYKOsyAgiraOCrRLNqnaKYKOsyAgiraOCrRLNqnaKYKOsyAgirUODRcolevxBKSjmUAMIqFGy0UKLXL4SSUg4lgLAKBRstlOj1C6GklEMJIKxDg/10rC7/s9VP5+Df7yKAsO7K+/+nRViXBt/82AireYDW8hGWlRzzdhJAWDvpszcEIDBFAGFN4WIwBCCwkwDC2kmfvSEAgSkCCGsKF4MhAIGdBBDWTvrsDQEITBFAWFO4GAwBCOwkMP0/Un3+obidhbM3BCBwHwGEdV/mnBgCbQkgrLbRUTgE7iPwQ1ij173ZP9F7H0ZODAEIZBBAWBmU2QMCEFhCAGEtwcgiEIBABgHXjzXwqpgREXtAAAL/I4Cw6AUIQKANAYTVJioKhQAEXMICHwQgAIFMAggrkzZ7QQACLgIIy4WPyRCAQCYBhJVJm70gAAEXAYTlwsdkCEAgkwDCyqTNXhCAgIsAwnLhYzIEIJBJAGFl0mYvCEDARQBhufAxGQIQyCSAsDJpsxcEIOAigLBc+JgMAQhkEkBYmbTZCwIQcBFAWC58TIYABDIJIKxM2uwFAQi4CCAsFz4mQwACmQQQViZt9oIABFwEEJYLH5MhAIFMAggrkzZ7QQACLgL/AEXkybci0Cc9AAAAAElFTkSuQmCC', -]; export class WalkMode implements Mode { private combo = 0; @@ -108,6 +106,10 @@ export class WalkMode implements Mode { 'background-repeat': 'no-repeat', 'background-image': `url("${motions[this.combo % motions.length]}")`, position: 'absolute', + /** + * NOTE: Junbae go out of screen when horizontal scroll + * If you want to limit position of Junbae, use `%` + */ right: '5vw', ...junbaeLocation, 'z-index': 1, @@ -157,6 +159,10 @@ export class WalkMode implements Mode { textDecoration: `none; ${objectToCssString({ 'box-shadow': `0px 0px 15px ${timerShadowColor}`, position: 'absolute', + /** + * NOTE: Junbae go out of screen when horizontal scroll + * If you want to limit position of Junbae, use `%` + */ right: '5vw', ...timerLocation, 'z-index': 1,