feat: 4th layer support

This commit is contained in:
2025-11-12 18:21:22 +01:00
parent d84495894a
commit 245dd97532
50 changed files with 2882 additions and 4 deletions

View File

@@ -34,6 +34,7 @@ const config = {
"abc",
"function",
"cloud_done",
"counter_4",
"backup",
"cloud_download",
"cloud_off",
@@ -149,6 +150,7 @@ const config = {
counter_1: "f784",
counter_2: "f783",
counter_3: "f782",
counter_4: "f781",
ios_share: "e6b8",
light_mode: "e518",
upload_file: "e9fc",

View File

@@ -0,0 +1,36 @@
test:
- clearChords: true
addChords:
- input: [[c, p]]
output: [CAPITALIZE]
- input: [[a, b]]
output: [a, b, c]
idle: true
- press: [c, p]
keys: [c, p]
- release: [c, p]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,35 @@
test:
- clearChords: true
addChords:
- input: [[c, p]]
output: [CAPITALIZE, KSC_00]
- input: [[a, b]]
output: [JOIN, a, b, c, KSC_00]
idle: true
- press: [c, p]
keys: [c, p]
- release: [c, p]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: []
idle: true

View File

@@ -0,0 +1,33 @@
test:
- remap:
A1:
- [d, DUP]
idle: true
- press: [a]
keys: [a]
- release: [a]
- step: 16
keys: []
idle: true
- press: [d]
keys: [a]
- release: [d]
- step: 16
keys: []
idle: true
- press: [c]
keys: [c]
- release: [c]
- step: 16
keys: []
idle: true
- press: [d]
keys: [c]
- release: [d]
- step: 16
keys: []
idle: true

View File

@@ -0,0 +1,24 @@
test:
- remap:
A1:
- [d, DUP]
idle: true
- press: [a]
keys: [a]
- release: [a]
- step: 16
keys: []
idle: true
- press: [LEFT_SHIFT]
modifiers:
lshift: true
- press: [d]
keys: [a]
modifiers:
lshift: true
- release: [LEFT_SHIFT, d]
- step: 16
keys: []
idle: true

View File

@@ -0,0 +1,25 @@
test:
- remap:
A1:
- [d, DUP]
idle: true
- press: [a]
keys: [a]
- release: [a]
- step: 16
keys: []
idle: true
- step: 16
idle: true
- press: [a]
keys: [a]
- press: [d]
keys: []
- keys: [a]
- release: [a, d]
- step: 16
keys: []
idle: true

View File

@@ -0,0 +1,81 @@
test:
- clearChords: true
remap:
A1:
- [q, QUICKFIX]
addChords:
- input: [[t, s, e]]
output: [t, e, s, t]
- input: [[t, s]]
output: [s, e, t]
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, t]
keys: [s, t]
- release: [s, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [s]
- keys: [e]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [q]
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- release: [q]
step: 16
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,83 @@
test:
- clearChords: true
remap:
A1:
- [q, QUICKFIX]
addChords:
- input: [[t, s, e]]
output: [t, e, s, t]
- input: [[t, s]]
output: [s, e, t]
settings:
chording:
concatenation style: prepended
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, t]
keys: [s, t]
- release: [s, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [SPACE]
- keys: [s]
- keys: [e]
- keys: [t]
- keys: []
idle: true
- step: 16
idle: true
- press: [q]
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- release: [q]
step: 16
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [SPACE]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true

View File

@@ -0,0 +1,65 @@
test:
- clearChords: true
remap:
A1:
- [q, QUICKFIX]
addChords:
- input: [[t, s, e]]
output: [t, e, s, t]
- input: [[t, s]]
output: [s, e, t]
settings:
chording:
detection method: smart
idle: true
- press: [s, e, t]
- release: [s, e, t]
- step: 16
keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, t]
- release: [s, t]
- step: 16
keys: [s]
- keys: [e]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [q]
- release: [q]
step: 16
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
idle: true
- press: [s, e, t]
- release: [s, e, t]
- step: 16
keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,65 @@
test:
- clearChords: true
remap:
A1:
- [q, QUICKFIX]
addChords:
- input: [[t, s, e]]
output: [t, e, s, t]
- input: [[t, s]]
output: [s, e, t]
settings:
chording:
detection method: smart
concatenation style: prepended
idle: true
- press: [s, e, t]
- release: [s, e, t]
- step: 16
keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, t]
- release: [s, t]
- step: 16
keys: [SPACE]
- keys: [s]
- keys: [e]
- keys: [t]
- keys: []
idle: true
- step: 16
idle: true
- press: [q]
- release: [q]
step: 16
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
idle: true
- press: [s, e, t]
- release: [s, e, t]
- step: 16
keys: [SPACE]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true

View File

@@ -0,0 +1,79 @@
test:
- clearChords: true
addChords:
- input: [[a, b]]
output: [a, b, c]
settings:
arpeggiates:
enable: 1
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true
- press: [LEFT_SHIFT]
modifiers:
lshift: true
- release: [LEFT_SHIFT]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true
- press: [x]
keys: [x]
- release: [x]
- step: 16
keys: []
idle: true
- press: [LEFT_SHIFT]
modifiers:
lshift: true
- release: [LEFT_SHIFT]
- step: 16
keys: []
idle: true

View File

@@ -0,0 +1,74 @@
test:
- clearChords: true
addChords:
- input: [[a, b]]
output: [a, b, c, KSC_00]
settings:
arpeggiates:
enable: 1
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: [b]
- keys: [c]
- keys: []
idle: true
- step: 16
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: [b]
- keys: [c]
- keys: []
idle: true
- press: [LEFT_SHIFT]
modifiers:
lshift: true
- release: [LEFT_SHIFT]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: []
idle: true
- press: [x]
keys: [x]
- release: [x]
- step: 16
keys: []
idle: true
- press: [LEFT_SHIFT]
modifiers:
lshift: true
- release: [LEFT_SHIFT]
- step: 16
keys: []
idle: true

View File

@@ -0,0 +1,65 @@
test:
- clearChords: true
addChords:
- input: [[a, b]]
output: [a, b, c]
- input: [[ARPEGGIATE, .]]
output: [JOIN, ., CAPITALIZE, JOIN]
settings:
arpeggiates:
enable: 1
autocorrect:
maximum attempts: 0
idle: true
- press: [.]
keys: [.]
- release: [.]
- step: 16
keys: []
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true
- press: [.]
keys: [.]
- release: [.]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [.]
- keys: [SPACE]
- keys: []
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,80 @@
test:
- clearChords: true
addChords:
- input: [[a, b]]
output: [a, b, c]
settings:
arpeggiates:
enable: 1
chording:
concatenation style: prepended
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: [b]
- keys: [c]
- keys: []
idle: true
- step: 16
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [SPACE]
- keys: [a]
- keys: [b]
- keys: [c]
- keys: []
idle: true
- press: [LEFT_SHIFT]
modifiers:
lshift: true
- release: [LEFT_SHIFT]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [SPACE]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: []
idle: true
- press: [x]
keys: [x]
- release: [x]
- step: 16
keys: []
idle: true
- press: [LEFT_SHIFT]
modifiers:
lshift: true
- release: [LEFT_SHIFT]
- step: 16
keys: []
idle: true

View File

@@ -0,0 +1,76 @@
test:
- clearChords: true
addChords:
- input: [[a, b]]
output: [a, b, c, KSC_00]
settings:
arpeggiates:
enable: 1
chording:
concatenation style: prepended
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: [b]
- keys: [c]
- keys: []
idle: true
- step: 16
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: [b]
- keys: [c]
- keys: []
idle: true
- press: [LEFT_SHIFT]
modifiers:
lshift: true
- release: [LEFT_SHIFT]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: []
idle: true
- press: [x]
keys: [x]
- release: [x]
- step: 16
keys: []
idle: true
- press: [LEFT_SHIFT]
modifiers:
lshift: true
- release: [LEFT_SHIFT]
- step: 16
keys: []
idle: true

View File

@@ -0,0 +1,63 @@
test:
- clearChords: true
addChords:
- input: [[a, b]]
output: [a, b, c]
- input: [[ARPEGGIATE, .]]
output: [JOIN, ., CAPITALIZE, JOIN]
settings:
arpeggiates:
enable: 1
chording:
concatenation style: prepended
autocorrect:
maximum attempts: 0
idle: true
- press: [.]
keys: [.]
- release: [.]
- step: 16
keys: []
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: [b]
- keys: [c]
- keys: []
idle: true
- press: [.]
keys: [.]
- release: [.]
- step: 16
keys: []
- keys: [BKSP]
- keys: [.]
- keys: []
idle: true
- press: [a, b]
keys: [a, b]
- release: [a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [SPACE]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: []
idle: true

View File

@@ -0,0 +1,55 @@
test:
- clearChords: true
addChords:
- input: [[a, b]]
output: [a, b, c]
settings:
chording:
detection method: smart
arpeggiates:
enable: 1
idle: true
- press: [a, b]
- release: [a, b]
- step: 16
keys: [a]
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true
- press: [LEFT_SHIFT]
- release: [LEFT_SHIFT]
- step: 16
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true
- press: [x]
- release: [x]
- step: 16
keys: [x]
- keys: []
idle: true
- press: [LEFT_SHIFT]
- release: [LEFT_SHIFT]
- step: 16
modifiers:
lshift: true
- modifiers: {}
idle: true

View File

@@ -0,0 +1,51 @@
test:
- clearChords: true
addChords:
- input: [[a, b]]
output: [a, b, c, KSC_00]
settings:
chording:
detection method: smart
arpeggiates:
enable: 1
idle: true
- press: [a, b]
- release: [a, b]
- step: 16
keys: [a]
- keys: [b]
- keys: [c]
- keys: []
idle: true
- press: [LEFT_SHIFT]
- release: [LEFT_SHIFT]
- step: 16
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: []
idle: true
- press: [x]
- release: [x]
- step: 16
keys: [x]
- keys: []
idle: true
- press: [LEFT_SHIFT]
- release: [LEFT_SHIFT]
- step: 16
modifiers:
lshift: true
- modifiers: {}
idle: true

View File

@@ -0,0 +1,59 @@
test:
- clearChords: true
addChords:
- input: [[a, b]]
output: [a, b, c]
- input: [[ARPEGGIATE, .]]
output: [JOIN, ., CAPITALIZE, JOIN]
settings:
chording:
detection method: smart
arpeggiates:
enable: 1
autocorrect:
maximum attempts: 0
idle: true
- press: [.]
- release: [.]
- step: 16
keys: [.]
- keys: []
idle: true
- step: 16
idle: true
- press: [a, b]
- release: [a, b]
- step: 16
keys: [a]
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true
- press: [.]
- release: [.]
- step: 16
keys: [BKSP]
- keys: [.]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [a, b]
- release: [a, b]
- step: 16
keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,51 @@
test:
- clearChords: true
addChords:
- input: [[a, b]]
output: [a, b, c]
- input: [[ARPEGGIATE, .]]
output: [JOIN, ., CAPITALIZE, JOIN]
settings:
arpeggiates:
enable: 1
chording:
detection method: smart
concatenation style: prepended
autocorrect:
maximum attempts: 0
idle: true
- press: [.]
- release: [.]
- step: 16
keys: [.]
- keys: []
idle: true
- press: [a, b]
- release: [a, b]
- step: 16
keys: [a]
- keys: [b]
- keys: [c]
- keys: []
idle: true
- press: [.]
- release: [.]
- step: 16
keys: [.]
- keys: []
idle: true
- press: [a, b]
- release: [a, b]
- step: 16
keys: [SPACE]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: []
idle: true

View File

@@ -0,0 +1,76 @@
test:
- clearChords: true
remap:
A1:
- [d, DUP]
addChords:
- input: [[h, z]]
output: [t, h, e]
- input: [[m, o, h, DUP, a, y]]
output: [m, o, t, i, v, a, t, i, o, n]
settings:
chording:
detection method: smart
concatenation style: prepended
idle: true
- press: [x]
- release: [x]
- step: 16
keys: [x]
- keys: []
idle: true
- step: 16
idle: true
- press: [h, z]
- release: [h, z]
- step: 16
keys: [BKSP]
- keys: [t]
- keys: [h]
- keys: [e]
- keys: []
idle: true
- step: 16
idle: true
- press: [d]
- press: [m, h, a, y]
- release: [d, m, h, a, y]
- step: 16
keys: [e, a, h, m, y]
- keys: []
idle: true
- step: 16
idle: true
- press: [d]
- press: [m, o, h, a, y]
- release: [d, m, o, h, a, y]
- step: 16
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [SPACE]
- keys: [m]
- keys: [o]
- keys: [t]
- keys: [i]
- keys: [v]
- keys: [a]
- keys: [t]
- keys: [i]
- keys: [o]
- keys: [n]
- keys: []
idle: true

View File

@@ -0,0 +1,67 @@
test:
- clearChords: true
remap:
A1:
- [d, DUP]
addChords:
- input: [[h, z]]
output: [t, h, e]
- input: [[m, o, h, DUP, a, y]]
output: [m, o, t, i, v, a, t, i, o, n]
settings:
chording:
detection method: smart
concatenation style: prepended
autocorrect:
maximum attempts: 0
idle: true
- press: [x]
- release: [x]
- step: 16
keys: [x]
- keys: []
idle: true
- step: 16
idle: true
- press: [h, z]
- release: [h, z]
- step: 16
keys: [t]
- keys: [h]
- keys: [e]
- keys: []
idle: true
- step: 16
idle: true
- press: [d]
- press: [m, h, a, y]
- release: [d, m, h, a, y]
- step: 16
keys: [e, a, h, m, y]
- keys: []
idle: true
- step: 16
idle: true
- press: [d]
- press: [m, o, h, a, y]
- release: [d, m, o, h, a, y]
- step: 16
keys: [m]
- keys: [o]
- keys: [t]
- keys: [i]
- keys: [v]
- keys: [a]
- keys: [t]
- keys: [i]
- keys: [o]
- keys: [n]
- keys: []
idle: true

View File

@@ -0,0 +1,24 @@
test:
- clearChords: true
addChords:
- input: [[t, s, e]]
output: [t, e, s, t]
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,23 @@
test:
- clearChords: true
addChords:
- input: [[t, s, e]]
output: [t, e, s, t, KSC_00]
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true

View File

@@ -0,0 +1,78 @@
test:
- clearChords: true
addChords:
- input: [[i, n, g]]
output: [t, h, i, n, g]
- input: [[t, s, e]]
output: [t, e, s, t]
- input: [[i, n, g], [t, s, e]]
output: [t, e, s, t, i, n, g]
idle: true
- press: [i, n, g]
keys: [g, i, n]
- release: [i, n, g]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [h]
- keys: [i]
- keys: [n]
- keys: [g]
- keys: [SPACE]
- keys: []
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true
- press: [i, n, g]
keys: [g, i, n]
- release: [i, n, g]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [i]
- keys: [n]
- keys: [g]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,45 @@
test:
- clearChords: true
remap:
A1:
- [d, DUP]
addChords:
- input: [[DUP, s, e]]
output: [t, e, s, t]
settings:
autocorrect:
maximum attempts: 0
idle: true
- press: [s]
keys: [s]
- release: [s]
- step: 16
keys: []
idle: true
- step: 16
idle: true
- press: [s]
keys: [s]
- press: [d]
keys: []
- keys: [s]
- press: [e]
keys: [s, e]
- release: [d, e, s]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,27 @@
test:
- clearChords: true
addChords:
- input: [[t]]
output: [t, e, s, t]
idle: true
- press: [t]
keys: [t]
- release: [t]
- step: 16
keys: []
idle: true
- step: 16
idle: true
- press: [t]
keys: [t]
- press: [LEFT_SHIFT]
keys: [t]
modifiers:
lshift: true
- release: [LEFT_SHIFT, t]
- step: 16
keys: []
idle: true

View File

@@ -0,0 +1,58 @@
test:
- clearChords: true
addChords:
- input: [[SPACE, s]]
output: [a, b]
idle: true
- press: [a]
keys: [a]
- release: [a]
- step: 16
keys: []
idle: true
- press: [SPACE]
keys: [SPACE]
- release: [SPACE]
- step: 16
keys: []
idle: true
- step: 16
idle: true
- press: [SPACE]
keys: [SPACE]
- press: [s]
keys: [SPACE, s]
- release: [SPACE, s]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: [b]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [s]
keys: [s]
- press: [SPACE]
keys: [s, SPACE]
- release: [SPACE, s]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: [b]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,28 @@
test:
- clearChords: true
addChords:
- input: [[t, h, e]]
output: [t, h, e]
settings:
keyboard:
debounce press: 4
debounce release: 5
idle: true
- press: [t]
keys: [t]
- release: [t]
- press: [a]
keys: [t, a]
- release: [a]
- keys: [a]
- press: [t]
- keys: []
- step: 1
- step: 1
- keys: [t]
- release: [t]
- step: 1
- step: 1
- keys: []
idle: true

View File

@@ -0,0 +1,34 @@
test:
- clearChords: true
remap:
A1:
- [l, KM_3_L]
- [r, KM_3_R]
- [a, a]
A2:
- [l, KM_3_L]
- [r, KM_3_R]
- [a, b]
A3:
- [l, KM_3_L]
- [r, KM_3_R]
- [a, c]
idle: true
- press: [a]
keys: [a]
- release: [a]
- step: 16
keys: []
idle: true
- step: 16
idle: true
- press: [l]
- press: [a]
keys: [c]
- release: [l, a]
- step: 16
keys: []
idle: true

View File

@@ -0,0 +1,82 @@
test:
- clearChords: true
addChords:
- input: [[h, y]]
output: [CAPTURE, CAPITALIZE, CAPTURE]
- input: [[t, s, e]]
output: [t, e, s, t]
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [h, y]
keys: [h, y]
- release: [h, y]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
modifiers:
lshift: true
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true

View File

@@ -0,0 +1,83 @@
test:
- clearChords: true
addChords:
- input: [[h, y]]
output: [CAPTURE, "-", CAPTURE]
- input: [[t, s, e]]
output: [t, e, s, t]
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [h, y]
keys: [h, y]
- release: [h, y]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: ["-"]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: ["-"]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: ["-"]
- keys: []
idle: true

View File

@@ -0,0 +1,85 @@
test:
- clearChords: true
addChords:
- input: [[h, y]]
output: [CAPTURE, CAPITALIZE, CAPTURE]
- input: [[t, s, e]]
output: [t, e, s, t]
settings:
chording:
concatenation style: prepended
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true
- step: 16
idle: true
- press: [h, y]
keys: [h, y]
- release: [h, y]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
modifiers:
lshift: true
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true

View File

@@ -0,0 +1,85 @@
test:
- clearChords: true
addChords:
- input: [[h, y]]
output: [CAPTURE, "-", CAPTURE]
- input: [[t, s, e]]
output: [t, e, s, t]
settings:
chording:
concatenation style: prepended
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true
- step: 16
idle: true
- press: [h, y]
keys: [h, y]
- release: [h, y]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: ["-"]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true
- step: 16
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: ["-"]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true

View File

@@ -0,0 +1,28 @@
test:
- clearChords: true
addChords:
- input: [[a, b]]
output: [a, b, c]
idle: true
- press: [LEFT_SHIFT]
modifiers:
lshift: true
- press: [LEFT_SHIFT, a, b]
modifiers:
lshift: true
keys: [a, b]
- release: [LEFT_SHIFT, a, b]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
modifiers:
lshift: true
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,80 @@
test:
- clearChords: true
addChords:
- input: [[i, n, g]]
output: [t, h, i, n, g]
- input: [[t, s, e]]
output: [t, e, s, t]
- input: [[i, n, g], [t, s, e]]
output: [t, e, s, t, i, n, g]
settings:
chording:
concatenation style: prepended
idle: true
- press: [i, n, g]
keys: [g, i, n]
- release: [i, n, g]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [h]
- keys: [i]
- keys: [n]
- keys: [g]
- keys: []
idle: true
- press: [s, e, t]
keys: [e, s, t]
- release: [s, e, t]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [SPACE]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: []
idle: true
- press: [i, n, g]
keys: [g, i, n]
- release: [i, n, g]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [SPACE]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [i]
- keys: [n]
- keys: [g]
- keys: []
idle: true

View File

@@ -0,0 +1,45 @@
test:
- clearChords: true
addChords:
- input: [[h, z]]
output: [t, h, e]
settings:
chording:
detection method: smart
concatenation style: prepended
autocorrect:
maximum attempts: 0
idle: true
- press: [x]
- release: [x]
- step: 16
keys: [x]
- keys: []
idle: true
- press: [h, z]
- release: [h, z]
- step: 16
keys: [t]
- keys: [h]
- keys: [e]
- keys: []
idle: true
- press: [x]
- release: [x]
- step: 16
keys: [x]
- keys: []
idle: true
- step: 16
idle: true
- press: [x]
- step: 120
keys: [x]
- release: [x]
keys: []
idle: true

View File

@@ -0,0 +1,49 @@
test:
- clearChords: true
addChords:
- input: [[h, z]]
output: [t, h, e]
settings:
chording:
detection method: smart
idle: true
- press: [ENTER]
- release: [ENTER]
- step: 16
keys: [ENTER]
- keys: []
idle: true
- step: 16
idle: true
- press: [h, z]
- release: [h, z]
- step: 16
keys: [t]
- keys: [h]
- keys: [e]
- keys: [SPACE]
- keys: []
idle: true
- press: [ENTER]
- release: [ENTER]
- step: 16
keys: [ENTER]
- keys: []
idle: true
- step: 16
idle: true
- press: [h, z]
- release: [h, z]
- step: 16
keys: [t]
- keys: [h]
- keys: [e]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,109 @@
test:
- clearChords: true
addChords:
- input: [[t, s]]
output: [t, e, s, t]
- input: [[ARPEGGIATE, .]]
output: [JOIN, ., CAPITALIZE, JOIN]
- input: [[., .]]
output: [JOIN, ., KSC_00]
- input: [[., ., .]]
output: [JOIN, ., ., ., CAPITALIZE, JOIN]
settings:
chording:
tap dance tolerance: 175
autocorrect:
maximum attempts: 0
arpeggiates:
enable: 1
idle: true
- press: [t, s]
keys: [s, t]
- release: [t, s]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [.]
keys: [.]
- release: [.]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [.]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [.]
keys: [.]
- release: [.]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [.]
- keys: []
idle: true
- step: 16
idle: true
- press: [.]
keys: [.]
- release: [.]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [.]
- keys: []
- keys: [.]
- keys: []
- keys: [.]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [t, s]
keys: [s, t]
- release: [t, s]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
modifiers:
lshift: true
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,102 @@
test:
- clearChords: true
addChords:
- input: [[t, s]]
output: [t, e, s, t]
- input: [[., .]]
output: [JOIN, ., CAPITALIZE, JOIN]
- input: [[., ., .]]
output: [JOIN, ., ., ., CAPITALIZE, JOIN]
settings:
chording:
tap dance tolerance: 175
autocorrect:
maximum attempts: 0
idle: true
- press: [t, s]
keys: [s, t]
- release: [t, s]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [.]
keys: [.]
- release: [.]
- step: 16
keys: []
idle: true
- step: 16
idle: true
- press: [.]
keys: [.]
- release: [.]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [.]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [.]
keys: [.]
- release: [.]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [.]
- keys: []
- keys: [.]
- keys: []
- keys: [.]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [t, s]
keys: [s, t]
- release: [t, s]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [t]
modifiers:
lshift: true
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,103 @@
test:
- clearChords: true
addChords:
- input: [[a, a]]
output: [b, c]
- input: [[a, a, a, a, a]]
output: [d, e]
settings:
chording:
tap dance tolerance: 175
autocorrect:
maximum attempts: 0
idle: true
- press: [a]
keys: [a]
- release: [a]
- step: 16
keys: []
idle: true
- step: 180
idle: true
- press: [a]
keys: [a]
- release: [a]
- step: 16
keys: []
idle: true
- step: 16
idle: true
- press: [a]
keys: [a]
- release: [a]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [a]
keys: [a]
- release: [a]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: []
- keys: [a]
- keys: []
- keys: [a]
- keys: []
idle: true
- step: 16
idle: true
- press: [a]
keys: [a]
- release: [a]
- step: 16
keys: []
idle: true
- step: 16
idle: true
- press: [a]
keys: [a]
- release: [a]
- step: 16
keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [d]
- keys: [e]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,88 @@
test:
- clearChords: true
addChords:
- input: [[t, s]]
output: [t, e, s, t]
- input: [[ARPEGGIATE, .]]
output: [JOIN, ., CAPITALIZE, JOIN]
- input: [[., .]]
output: [JOIN, ., KSC_00]
- input: [[., ., .]]
output: [JOIN, ., ., ., CAPITALIZE, JOIN]
settings:
chording:
tap dance tolerance: 175
detection method: smart
autocorrect:
maximum attempts: 0
arpeggiates:
enable: 1
idle: true
- press: [t, s]
- release: [t, s]
- step: 16
keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [.]
- release: [.]
- step: 16
keys: [BKSP]
- keys: [.]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [.]
- release: [.]
- step: 16
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [.]
- keys: []
idle: true
- step: 16
idle: true
- press: [.]
- release: [.]
- step: 16
keys: [BKSP]
- keys: [.]
- keys: []
- keys: [.]
- keys: []
- keys: [.]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [t, s]
- release: [t, s]
- step: 16
keys: [t]
modifiers:
lshift: true
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,85 @@
test:
- clearChords: true
addChords:
- input: [[t, s]]
output: [t, e, s, t]
- input: [[., .]]
output: [JOIN, ., CAPITALIZE, JOIN]
- input: [[., ., .]]
output: [JOIN, ., ., ., CAPITALIZE, JOIN]
settings:
chording:
tap dance tolerance: 175
detection method: smart
autocorrect:
maximum attempts: 0
idle: true
- press: [t, s]
- release: [t, s]
- step: 16
keys: [t]
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [.]
- release: [.]
- step: 16
keys: [.]
- keys: []
idle: true
- step: 16
idle: true
- press: [.]
- release: [.]
- step: 16
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [.]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [.]
- release: [.]
- step: 16
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [.]
- keys: []
- keys: [.]
- keys: []
- keys: [.]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [t, s]
- release: [t, s]
- step: 16
keys: [t]
modifiers:
lshift: true
- keys: [e]
- keys: [s]
- keys: [t]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -0,0 +1,92 @@
test:
- clearChords: true
addChords:
- input: [[a, a]]
output: [b, c]
- input: [[a, a, a, a, a]]
output: [d, e]
settings:
chording:
tap dance tolerance: 175
detection method: smart
autocorrect:
maximum attempts: 0
idle: true
- press: [a]
- release: [a]
- step: 16
keys: [a]
- keys: []
idle: true
- step: 180
idle: true
- press: [a]
- release: [a]
- step: 16
keys: [a]
- keys: []
idle: true
- step: 16
idle: true
- press: [a]
- release: [a]
- step: 16
keys: [BKSP]
- keys: [b]
- keys: [c]
- keys: [SPACE]
- keys: []
idle: true
- step: 16
idle: true
- press: [a]
- release: [a]
- step: 16
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [a]
- keys: []
- keys: [a]
- keys: []
- keys: [a]
- keys: []
idle: true
- step: 16
idle: true
- press: [a]
- release: [a]
- step: 16
keys: [a]
- keys: []
idle: true
- step: 16
idle: true
- press: [a]
- release: [a]
- step: 16
keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: []
- keys: [BKSP]
- keys: [d]
- keys: [e]
- keys: [SPACE]
- keys: []
idle: true

View File

@@ -69,7 +69,7 @@
style:rotate="{rotate}deg"
use:action={{ title: tooltip }}
>
{#if code !== 0}
{#if code !== 0 && code != 1023}
{dynamicMapping || icon || display || id || `0x${code.toString(16)}`}
{/if}
{#if !isApplied}

View File

@@ -103,6 +103,7 @@
[-rotY, -rotX],
[-rotX, -rotY],
[rotX, rotY],
[rotY, rotX],
]}
/>
{/if}

View File

@@ -178,13 +178,16 @@ export class CharaDevice {
this.version = await this.send(1, ["VERSION"]).then(
([version]) => version,
);
if (semverGte(this.version, "2.2.0-beta.4")) {
this.profileCount = 3;
}
const [company, device, chipset] = await this.send(3, ["ID"]);
this.company = company as typeof this.company;
this.device = device as typeof this.device;
this.chipset = chipset as typeof this.chipset;
if (semverGte(this.version, "2.2.0-beta.4")) {
this.profileCount = this.chipset === "M0" ? 2 : 3;
}
if (semverGte(this.version, "2.2.0-beta.20")) {
this.layerCount = this.chipset === "M0" ? 3 : 4;
}
this.keyCount = KEY_COUNTS[this.device];
} catch (e) {
console.error(e);

View File

@@ -0,0 +1,28 @@
<script lang="ts">
import Recipe from "./Recipe.svelte";
const tests = import.meta.glob("$lib/assets/tests/**/*.yml");
</script>
<h1>Recipes</h1>
<p>These are example uses, taken directly from our E2E testing library.</p>
<div class="recipes">
{#each Object.entries(tests) as [path, resolver]}
{#await resolver() then module}
<section>
<Recipe test={module.default} />
</section>
{/await}
{/each}
</div>
<style lang="scss">
.recipes {
display: flex;
flex-direction: column;
gap: 2rem;
overflow-y: auto;
}
</style>

View File

@@ -0,0 +1,148 @@
<script lang="ts">
import CharRecorder from "$lib/charrecorder/CharRecorder.svelte";
import type { Replay } from "$lib/charrecorder/core/types";
import type { E2eTest } from "./test-types";
let { test }: { test: E2eTest } = $props();
const replace = new Map<string, string>([
["SPACE", "Space"],
["ENTER", "Enter"],
["BKSP", "Backspace"],
["e", "KeyE"],
["t", "KeyT"],
]);
const replaceOut = new Map<string, string>([
["SPACE", " "],
["ENTER", "\n"],
["BKSP", "Backspace"],
]);
let timescale = $state(10);
let idleHold = $state(500);
let replayDelay = $state(1000);
let replay: Replay = $derived.by(() => {
const replay: Replay = {
start: 0,
finish: 0,
keys: [],
};
let timeIndex = 0;
let held = new Map<string, any>();
for (const it of test.test) {
if (it.keys) {
for (const key of it.keys) {
if (held.has(key)) continue;
held.set(key, [
replaceOut.get(key) ?? key,
replace.get(key) ?? key,
timeIndex,
0,
]);
replay.keys.push(held.get(key));
}
for (const [key, value] of held) {
if (!it.keys.includes(key)) {
value[3] = timeIndex - value[2];
held.delete(key);
}
}
}
timeIndex += timescale * (it.step ?? 1);
if (it.idle) {
timeIndex += idleHold;
}
}
replay.finish = timeIndex;
return replay;
});
let graph = $derived.by(() => {
const rows: string[][] = [[]];
for (const it of test.test) {
if (it.keys?.includes("BKSP")) {
if (rows.at(-1)!.at(-1) === " ") {
rows.at(-1)!.pop();
} else {
rows.push(Array.from({ length: rows.at(-1)!.length - 1 }, () => " "));
}
} else {
for (const key of it.keys ?? []) {
if (key === "SPACE") {
rows.at(-1)!.push("␣");
} else if (key === "ENTER") {
rows.at(-1)!.push("↵");
} else {
rows.at(-1)!.push(key);
}
}
}
}
return rows;
});
</script>
<section>
<div class="replay">
<CharRecorder
{replay}
cursor={true}
ondone={() => setTimeout(() => (replay = { ...replay }), replayDelay)}
/>
</div>
<details>
<summary>Breakdown</summary>
<div class="graph">
{#each graph as row, i}
{#each row as char, j}
{#if char !== " "}
<div
class:deleted={(graph[i + 1]?.findIndex((it) => it !== " ") ??
Infinity) <= j}
style:grid-row={i + 1}
style:grid-column={j + 1}
>
{char}
</div>
{/if}
{/each}
{/each}
</div>
</details>
</section>
<style lang="scss">
section {
font-family: monospace;
}
summary {
cursor: pointer;
margin-top: 0.5rem;
font-weight: bold;
user-select: none;
}
.replay {
background: #f0f0f0;
padding: 0.6rem;
font-weight: bold;
font-size: 1.2rem;
}
.graph {
display: grid;
align-items: center;
justify-items: center;
width: min-content;
}
.deleted {
opacity: 0.6;
text-decoration: line-through;
}
</style>

View File

@@ -0,0 +1,20 @@
export interface E2eAddChord {
input: string[][];
output: string[];
}
export interface E2eTestItem {
keys?: string[];
modifiers?: Record<string, boolean>;
press?: string[];
release?: string[];
step?: number;
idle?: boolean;
clearChords?: boolean;
addChords?: E2eAddChord[];
settings: Record<string, Record<string, string | number>>;
}
export interface E2eTest {
test: E2eTestItem[];
}