From 6895fa4a827a627c1176e941c2fdc91eed201d58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Fri, 28 Nov 2025 14:38:51 +0100 Subject: [PATCH] feat: cookbook --- icons.config.js | 2 + src/lib/assets/tests/actions/capitalize.yml | 36 -- .../tests/actions/capitalize_no_space.yml | 35 -- src/lib/assets/tests/actions/dup/dup.yml | 33 -- .../assets/tests/actions/dup/modifiers.yml | 24 -- .../assets/tests/actions/dup/release_keys.yml | 25 -- .../assets/tests/actions/quickfix/general.yml | 81 ---- .../tests/actions/quickfix/prepended.yml | 83 ---- .../assets/tests/actions/quickfix/smart.yml | 65 ---- .../actions/quickfix/smart_prepended.yml | 65 ---- .../assets/tests/arpeggiates/capitalize.yml | 79 ---- .../tests/arpeggiates/capitalize_no_space.yml | 74 ---- .../tests/arpeggiates/custom_period.yml | 65 ---- .../arpeggiates/prepended/capitalize.yml | 80 ---- .../prepended/capitalize_no_space.yml | 76 ---- .../arpeggiates/prepended/custom_period.yml | 63 --- .../tests/arpeggiates/smart/capitalize.yml | 55 --- .../arpeggiates/smart/capitalize_no_space.yml | 51 --- .../tests/arpeggiates/smart/custom_period.yml | 59 --- .../smart_prepended/custom_period.yml | 51 --- .../assets/tests/autocorrect/dup_chord.yml | 76 ---- .../autocorrect/smart_prepended/dup_chord.yml | 67 ---- src/lib/assets/tests/chording/chord.yml | 24 -- .../assets/tests/chording/chord_nospace.yml | 23 -- src/lib/assets/tests/chording/compound.yml | 78 ---- src/lib/assets/tests/chording/dup_input.yml | 45 --- .../tests/chording/min_chord_inputs.yml | 27 -- src/lib/assets/tests/chording/space_input.yml | 58 --- src/lib/assets/tests/debounce/basic.yml | 28 -- src/lib/assets/tests/fnshift.yml | 34 -- .../assets/tests/hyperspace/camel_case.yml | 82 ---- .../assets/tests/hyperspace/kebab_case.yml | 83 ---- .../tests/hyperspace/prepended/camel_case.yml | 85 ---- .../tests/hyperspace/prepended/kebab_case.yml | 85 ---- src/lib/assets/tests/modifiers/capitalize.yml | 28 -- src/lib/assets/tests/prepended/compound.yml | 80 ---- .../assets/tests/smart_detection/general.yml | 45 --- .../assets/tests/smart_detection/newline.yml | 49 --- .../tests/tap_dance/arpeggiate_override.yml | 109 ------ .../tests/tap_dance/arpeggiate_period.yml | 102 ----- src/lib/assets/tests/tap_dance/general.yml | 103 ----- .../tap_dance/smart/arpeggiate_override.yml | 88 ----- .../tap_dance/smart/arpeggiate_period.yml | 85 ---- .../assets/tests/tap_dance/smart/general.yml | 92 ----- src/lib/charrecorder/CharRecorder.svelte | 17 +- src/lib/charrecorder/core/player.ts | 13 +- src/lib/charrecorder/renderer/renderer.ts | 12 + src/lib/components/ChordPhraseDisplay.svelte | 367 ++++++++++++++++++ .../components/layout/ActionSelector.svelte | 18 +- src/lib/meta/meta-storage.ts | 5 +- src/lib/meta/types/meta.ts | 35 ++ src/lib/os-layout.ts | 1 + src/lib/serialization/base64.ts | 7 +- src/routes/(app)/Sidebar.svelte | 8 +- src/routes/(app)/ccos/[device]/+page.svelte | 15 +- .../ccos/[device]/[version]/+page.svelte | 9 + src/routes/(app)/e2e/+page.svelte.wip | 232 ----------- src/routes/(app)/e2e/keycodes.json | 251 ------------ src/routes/(app)/e2e/replay/+page.svelte | 85 ++++ src/routes/(app)/e2e/replay/+page.ts | 49 +++ src/routes/(app)/recipes/+page.svelte | 64 +++ src/routes/(app)/recipes/Demo.svelte | 86 ++++ src/routes/(app)/recipes/Recipe.svelte | 331 ++++++++++++++++ src/routes/recipes/+page.svelte | 28 -- src/routes/recipes/Recipe.svelte | 148 ------- src/routes/recipes/test-types.ts | 20 - 66 files changed, 1093 insertions(+), 3386 deletions(-) delete mode 100644 src/lib/assets/tests/actions/capitalize.yml delete mode 100644 src/lib/assets/tests/actions/capitalize_no_space.yml delete mode 100644 src/lib/assets/tests/actions/dup/dup.yml delete mode 100644 src/lib/assets/tests/actions/dup/modifiers.yml delete mode 100644 src/lib/assets/tests/actions/dup/release_keys.yml delete mode 100644 src/lib/assets/tests/actions/quickfix/general.yml delete mode 100644 src/lib/assets/tests/actions/quickfix/prepended.yml delete mode 100644 src/lib/assets/tests/actions/quickfix/smart.yml delete mode 100644 src/lib/assets/tests/actions/quickfix/smart_prepended.yml delete mode 100644 src/lib/assets/tests/arpeggiates/capitalize.yml delete mode 100644 src/lib/assets/tests/arpeggiates/capitalize_no_space.yml delete mode 100644 src/lib/assets/tests/arpeggiates/custom_period.yml delete mode 100644 src/lib/assets/tests/arpeggiates/prepended/capitalize.yml delete mode 100644 src/lib/assets/tests/arpeggiates/prepended/capitalize_no_space.yml delete mode 100644 src/lib/assets/tests/arpeggiates/prepended/custom_period.yml delete mode 100644 src/lib/assets/tests/arpeggiates/smart/capitalize.yml delete mode 100644 src/lib/assets/tests/arpeggiates/smart/capitalize_no_space.yml delete mode 100644 src/lib/assets/tests/arpeggiates/smart/custom_period.yml delete mode 100644 src/lib/assets/tests/arpeggiates/smart_prepended/custom_period.yml delete mode 100644 src/lib/assets/tests/autocorrect/dup_chord.yml delete mode 100644 src/lib/assets/tests/autocorrect/smart_prepended/dup_chord.yml delete mode 100644 src/lib/assets/tests/chording/chord.yml delete mode 100644 src/lib/assets/tests/chording/chord_nospace.yml delete mode 100644 src/lib/assets/tests/chording/compound.yml delete mode 100644 src/lib/assets/tests/chording/dup_input.yml delete mode 100644 src/lib/assets/tests/chording/min_chord_inputs.yml delete mode 100644 src/lib/assets/tests/chording/space_input.yml delete mode 100644 src/lib/assets/tests/debounce/basic.yml delete mode 100644 src/lib/assets/tests/fnshift.yml delete mode 100644 src/lib/assets/tests/hyperspace/camel_case.yml delete mode 100644 src/lib/assets/tests/hyperspace/kebab_case.yml delete mode 100644 src/lib/assets/tests/hyperspace/prepended/camel_case.yml delete mode 100644 src/lib/assets/tests/hyperspace/prepended/kebab_case.yml delete mode 100644 src/lib/assets/tests/modifiers/capitalize.yml delete mode 100644 src/lib/assets/tests/prepended/compound.yml delete mode 100644 src/lib/assets/tests/smart_detection/general.yml delete mode 100644 src/lib/assets/tests/smart_detection/newline.yml delete mode 100644 src/lib/assets/tests/tap_dance/arpeggiate_override.yml delete mode 100644 src/lib/assets/tests/tap_dance/arpeggiate_period.yml delete mode 100644 src/lib/assets/tests/tap_dance/general.yml delete mode 100644 src/lib/assets/tests/tap_dance/smart/arpeggiate_override.yml delete mode 100644 src/lib/assets/tests/tap_dance/smart/arpeggiate_period.yml delete mode 100644 src/lib/assets/tests/tap_dance/smart/general.yml create mode 100644 src/lib/components/ChordPhraseDisplay.svelte delete mode 100644 src/routes/(app)/e2e/+page.svelte.wip delete mode 100644 src/routes/(app)/e2e/keycodes.json create mode 100644 src/routes/(app)/e2e/replay/+page.svelte create mode 100644 src/routes/(app)/e2e/replay/+page.ts create mode 100644 src/routes/(app)/recipes/+page.svelte create mode 100644 src/routes/(app)/recipes/Demo.svelte create mode 100644 src/routes/(app)/recipes/Recipe.svelte delete mode 100644 src/routes/recipes/+page.svelte delete mode 100644 src/routes/recipes/Recipe.svelte delete mode 100644 src/routes/recipes/test-types.ts diff --git a/icons.config.js b/icons.config.js index d8a197c0..ded6d2a4 100644 --- a/icons.config.js +++ b/icons.config.js @@ -47,9 +47,11 @@ const config = { "step_over", "step_into", "step_out", + "timer_play", "settings_backup_restore", "sound_detection_loud_sound", "ring_volume", + "skillet", "wifi", "power_settings_circle", "graphic_eq", diff --git a/src/lib/assets/tests/actions/capitalize.yml b/src/lib/assets/tests/actions/capitalize.yml deleted file mode 100644 index 84a2a1e4..00000000 --- a/src/lib/assets/tests/actions/capitalize.yml +++ /dev/null @@ -1,36 +0,0 @@ -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 diff --git a/src/lib/assets/tests/actions/capitalize_no_space.yml b/src/lib/assets/tests/actions/capitalize_no_space.yml deleted file mode 100644 index e3558c81..00000000 --- a/src/lib/assets/tests/actions/capitalize_no_space.yml +++ /dev/null @@ -1,35 +0,0 @@ -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 diff --git a/src/lib/assets/tests/actions/dup/dup.yml b/src/lib/assets/tests/actions/dup/dup.yml deleted file mode 100644 index 1721f47e..00000000 --- a/src/lib/assets/tests/actions/dup/dup.yml +++ /dev/null @@ -1,33 +0,0 @@ -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 diff --git a/src/lib/assets/tests/actions/dup/modifiers.yml b/src/lib/assets/tests/actions/dup/modifiers.yml deleted file mode 100644 index 66c49fdb..00000000 --- a/src/lib/assets/tests/actions/dup/modifiers.yml +++ /dev/null @@ -1,24 +0,0 @@ -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 diff --git a/src/lib/assets/tests/actions/dup/release_keys.yml b/src/lib/assets/tests/actions/dup/release_keys.yml deleted file mode 100644 index e41a652a..00000000 --- a/src/lib/assets/tests/actions/dup/release_keys.yml +++ /dev/null @@ -1,25 +0,0 @@ -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 diff --git a/src/lib/assets/tests/actions/quickfix/general.yml b/src/lib/assets/tests/actions/quickfix/general.yml deleted file mode 100644 index dc718939..00000000 --- a/src/lib/assets/tests/actions/quickfix/general.yml +++ /dev/null @@ -1,81 +0,0 @@ -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 diff --git a/src/lib/assets/tests/actions/quickfix/prepended.yml b/src/lib/assets/tests/actions/quickfix/prepended.yml deleted file mode 100644 index 1268f443..00000000 --- a/src/lib/assets/tests/actions/quickfix/prepended.yml +++ /dev/null @@ -1,83 +0,0 @@ -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 diff --git a/src/lib/assets/tests/actions/quickfix/smart.yml b/src/lib/assets/tests/actions/quickfix/smart.yml deleted file mode 100644 index bb2683c1..00000000 --- a/src/lib/assets/tests/actions/quickfix/smart.yml +++ /dev/null @@ -1,65 +0,0 @@ -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 diff --git a/src/lib/assets/tests/actions/quickfix/smart_prepended.yml b/src/lib/assets/tests/actions/quickfix/smart_prepended.yml deleted file mode 100644 index c2afad52..00000000 --- a/src/lib/assets/tests/actions/quickfix/smart_prepended.yml +++ /dev/null @@ -1,65 +0,0 @@ -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 diff --git a/src/lib/assets/tests/arpeggiates/capitalize.yml b/src/lib/assets/tests/arpeggiates/capitalize.yml deleted file mode 100644 index f0975a43..00000000 --- a/src/lib/assets/tests/arpeggiates/capitalize.yml +++ /dev/null @@ -1,79 +0,0 @@ -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 diff --git a/src/lib/assets/tests/arpeggiates/capitalize_no_space.yml b/src/lib/assets/tests/arpeggiates/capitalize_no_space.yml deleted file mode 100644 index 58f3f6fe..00000000 --- a/src/lib/assets/tests/arpeggiates/capitalize_no_space.yml +++ /dev/null @@ -1,74 +0,0 @@ -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 diff --git a/src/lib/assets/tests/arpeggiates/custom_period.yml b/src/lib/assets/tests/arpeggiates/custom_period.yml deleted file mode 100644 index 559f56b2..00000000 --- a/src/lib/assets/tests/arpeggiates/custom_period.yml +++ /dev/null @@ -1,65 +0,0 @@ -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 diff --git a/src/lib/assets/tests/arpeggiates/prepended/capitalize.yml b/src/lib/assets/tests/arpeggiates/prepended/capitalize.yml deleted file mode 100644 index 01d53c21..00000000 --- a/src/lib/assets/tests/arpeggiates/prepended/capitalize.yml +++ /dev/null @@ -1,80 +0,0 @@ -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 diff --git a/src/lib/assets/tests/arpeggiates/prepended/capitalize_no_space.yml b/src/lib/assets/tests/arpeggiates/prepended/capitalize_no_space.yml deleted file mode 100644 index 56e5f219..00000000 --- a/src/lib/assets/tests/arpeggiates/prepended/capitalize_no_space.yml +++ /dev/null @@ -1,76 +0,0 @@ -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 diff --git a/src/lib/assets/tests/arpeggiates/prepended/custom_period.yml b/src/lib/assets/tests/arpeggiates/prepended/custom_period.yml deleted file mode 100644 index 34bb3690..00000000 --- a/src/lib/assets/tests/arpeggiates/prepended/custom_period.yml +++ /dev/null @@ -1,63 +0,0 @@ -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 diff --git a/src/lib/assets/tests/arpeggiates/smart/capitalize.yml b/src/lib/assets/tests/arpeggiates/smart/capitalize.yml deleted file mode 100644 index 206eb961..00000000 --- a/src/lib/assets/tests/arpeggiates/smart/capitalize.yml +++ /dev/null @@ -1,55 +0,0 @@ -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 diff --git a/src/lib/assets/tests/arpeggiates/smart/capitalize_no_space.yml b/src/lib/assets/tests/arpeggiates/smart/capitalize_no_space.yml deleted file mode 100644 index 99568879..00000000 --- a/src/lib/assets/tests/arpeggiates/smart/capitalize_no_space.yml +++ /dev/null @@ -1,51 +0,0 @@ -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 diff --git a/src/lib/assets/tests/arpeggiates/smart/custom_period.yml b/src/lib/assets/tests/arpeggiates/smart/custom_period.yml deleted file mode 100644 index c635c97a..00000000 --- a/src/lib/assets/tests/arpeggiates/smart/custom_period.yml +++ /dev/null @@ -1,59 +0,0 @@ -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 diff --git a/src/lib/assets/tests/arpeggiates/smart_prepended/custom_period.yml b/src/lib/assets/tests/arpeggiates/smart_prepended/custom_period.yml deleted file mode 100644 index daa835ae..00000000 --- a/src/lib/assets/tests/arpeggiates/smart_prepended/custom_period.yml +++ /dev/null @@ -1,51 +0,0 @@ -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 diff --git a/src/lib/assets/tests/autocorrect/dup_chord.yml b/src/lib/assets/tests/autocorrect/dup_chord.yml deleted file mode 100644 index db1efbd2..00000000 --- a/src/lib/assets/tests/autocorrect/dup_chord.yml +++ /dev/null @@ -1,76 +0,0 @@ -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 diff --git a/src/lib/assets/tests/autocorrect/smart_prepended/dup_chord.yml b/src/lib/assets/tests/autocorrect/smart_prepended/dup_chord.yml deleted file mode 100644 index 02ce9b12..00000000 --- a/src/lib/assets/tests/autocorrect/smart_prepended/dup_chord.yml +++ /dev/null @@ -1,67 +0,0 @@ -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 diff --git a/src/lib/assets/tests/chording/chord.yml b/src/lib/assets/tests/chording/chord.yml deleted file mode 100644 index 5433584b..00000000 --- a/src/lib/assets/tests/chording/chord.yml +++ /dev/null @@ -1,24 +0,0 @@ -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 diff --git a/src/lib/assets/tests/chording/chord_nospace.yml b/src/lib/assets/tests/chording/chord_nospace.yml deleted file mode 100644 index 63ac6bb1..00000000 --- a/src/lib/assets/tests/chording/chord_nospace.yml +++ /dev/null @@ -1,23 +0,0 @@ -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 diff --git a/src/lib/assets/tests/chording/compound.yml b/src/lib/assets/tests/chording/compound.yml deleted file mode 100644 index f8fe95ee..00000000 --- a/src/lib/assets/tests/chording/compound.yml +++ /dev/null @@ -1,78 +0,0 @@ -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 diff --git a/src/lib/assets/tests/chording/dup_input.yml b/src/lib/assets/tests/chording/dup_input.yml deleted file mode 100644 index f67d85ab..00000000 --- a/src/lib/assets/tests/chording/dup_input.yml +++ /dev/null @@ -1,45 +0,0 @@ -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 diff --git a/src/lib/assets/tests/chording/min_chord_inputs.yml b/src/lib/assets/tests/chording/min_chord_inputs.yml deleted file mode 100644 index cb1a8a42..00000000 --- a/src/lib/assets/tests/chording/min_chord_inputs.yml +++ /dev/null @@ -1,27 +0,0 @@ -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 diff --git a/src/lib/assets/tests/chording/space_input.yml b/src/lib/assets/tests/chording/space_input.yml deleted file mode 100644 index 5d8a36f2..00000000 --- a/src/lib/assets/tests/chording/space_input.yml +++ /dev/null @@ -1,58 +0,0 @@ -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 diff --git a/src/lib/assets/tests/debounce/basic.yml b/src/lib/assets/tests/debounce/basic.yml deleted file mode 100644 index ebe83a58..00000000 --- a/src/lib/assets/tests/debounce/basic.yml +++ /dev/null @@ -1,28 +0,0 @@ -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 diff --git a/src/lib/assets/tests/fnshift.yml b/src/lib/assets/tests/fnshift.yml deleted file mode 100644 index 0cb05346..00000000 --- a/src/lib/assets/tests/fnshift.yml +++ /dev/null @@ -1,34 +0,0 @@ -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 diff --git a/src/lib/assets/tests/hyperspace/camel_case.yml b/src/lib/assets/tests/hyperspace/camel_case.yml deleted file mode 100644 index 7bcd24c0..00000000 --- a/src/lib/assets/tests/hyperspace/camel_case.yml +++ /dev/null @@ -1,82 +0,0 @@ -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 diff --git a/src/lib/assets/tests/hyperspace/kebab_case.yml b/src/lib/assets/tests/hyperspace/kebab_case.yml deleted file mode 100644 index dc0d3e89..00000000 --- a/src/lib/assets/tests/hyperspace/kebab_case.yml +++ /dev/null @@ -1,83 +0,0 @@ -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 diff --git a/src/lib/assets/tests/hyperspace/prepended/camel_case.yml b/src/lib/assets/tests/hyperspace/prepended/camel_case.yml deleted file mode 100644 index 2787ce1d..00000000 --- a/src/lib/assets/tests/hyperspace/prepended/camel_case.yml +++ /dev/null @@ -1,85 +0,0 @@ -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 diff --git a/src/lib/assets/tests/hyperspace/prepended/kebab_case.yml b/src/lib/assets/tests/hyperspace/prepended/kebab_case.yml deleted file mode 100644 index 2890b094..00000000 --- a/src/lib/assets/tests/hyperspace/prepended/kebab_case.yml +++ /dev/null @@ -1,85 +0,0 @@ -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 diff --git a/src/lib/assets/tests/modifiers/capitalize.yml b/src/lib/assets/tests/modifiers/capitalize.yml deleted file mode 100644 index 94de66a0..00000000 --- a/src/lib/assets/tests/modifiers/capitalize.yml +++ /dev/null @@ -1,28 +0,0 @@ -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 diff --git a/src/lib/assets/tests/prepended/compound.yml b/src/lib/assets/tests/prepended/compound.yml deleted file mode 100644 index 046fc93e..00000000 --- a/src/lib/assets/tests/prepended/compound.yml +++ /dev/null @@ -1,80 +0,0 @@ -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 diff --git a/src/lib/assets/tests/smart_detection/general.yml b/src/lib/assets/tests/smart_detection/general.yml deleted file mode 100644 index e732c29a..00000000 --- a/src/lib/assets/tests/smart_detection/general.yml +++ /dev/null @@ -1,45 +0,0 @@ -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 diff --git a/src/lib/assets/tests/smart_detection/newline.yml b/src/lib/assets/tests/smart_detection/newline.yml deleted file mode 100644 index ea6fbb51..00000000 --- a/src/lib/assets/tests/smart_detection/newline.yml +++ /dev/null @@ -1,49 +0,0 @@ -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 diff --git a/src/lib/assets/tests/tap_dance/arpeggiate_override.yml b/src/lib/assets/tests/tap_dance/arpeggiate_override.yml deleted file mode 100644 index 2b7d67a2..00000000 --- a/src/lib/assets/tests/tap_dance/arpeggiate_override.yml +++ /dev/null @@ -1,109 +0,0 @@ -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 diff --git a/src/lib/assets/tests/tap_dance/arpeggiate_period.yml b/src/lib/assets/tests/tap_dance/arpeggiate_period.yml deleted file mode 100644 index b1506a05..00000000 --- a/src/lib/assets/tests/tap_dance/arpeggiate_period.yml +++ /dev/null @@ -1,102 +0,0 @@ -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 diff --git a/src/lib/assets/tests/tap_dance/general.yml b/src/lib/assets/tests/tap_dance/general.yml deleted file mode 100644 index 022a03f7..00000000 --- a/src/lib/assets/tests/tap_dance/general.yml +++ /dev/null @@ -1,103 +0,0 @@ -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 diff --git a/src/lib/assets/tests/tap_dance/smart/arpeggiate_override.yml b/src/lib/assets/tests/tap_dance/smart/arpeggiate_override.yml deleted file mode 100644 index 3858be5b..00000000 --- a/src/lib/assets/tests/tap_dance/smart/arpeggiate_override.yml +++ /dev/null @@ -1,88 +0,0 @@ -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 diff --git a/src/lib/assets/tests/tap_dance/smart/arpeggiate_period.yml b/src/lib/assets/tests/tap_dance/smart/arpeggiate_period.yml deleted file mode 100644 index a10028d0..00000000 --- a/src/lib/assets/tests/tap_dance/smart/arpeggiate_period.yml +++ /dev/null @@ -1,85 +0,0 @@ -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 diff --git a/src/lib/assets/tests/tap_dance/smart/general.yml b/src/lib/assets/tests/tap_dance/smart/general.yml deleted file mode 100644 index d61a952d..00000000 --- a/src/lib/assets/tests/tap_dance/smart/general.yml +++ /dev/null @@ -1,92 +0,0 @@ -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 diff --git a/src/lib/charrecorder/CharRecorder.svelte b/src/lib/charrecorder/CharRecorder.svelte index 97ca6de1..0837688c 100644 --- a/src/lib/charrecorder/CharRecorder.svelte +++ b/src/lib/charrecorder/CharRecorder.svelte @@ -10,14 +10,18 @@ replay, cursor = false, keys = false, + paused = false, children, ondone, + ontick, }: { replay: ReplayPlayer | Replay; cursor?: boolean; keys?: boolean; + paused?: boolean; children?: Snippet; ondone?: () => void; + ontick?: (time: number) => void; } = $props(); let replayPlayer: ReplayPlayer | undefined = $state(); @@ -45,6 +49,10 @@ $effect(() => { if (!svg || !text) return; + if (paused) { + text.textContent = finalText ?? ""; + return; + } const player = replay instanceof ReplayPlayer ? replay : new ReplayPlayer(replay); replayPlayer = player; @@ -63,6 +71,7 @@ const unsubscribePlayer = player.subscribe(apply); textRenderer = renderer; + player.onTick = ontick; player.onDone = ondone; player.start(); apply(); @@ -70,8 +79,11 @@ renderer.animated = true; }); return () => { + textRenderer = undefined; + replayPlayer = undefined; unsubscribePlayer(); - player?.destroy(); + player.destroy(); + renderer.destroy(); }; }); @@ -88,7 +100,7 @@ {#key replay} {#if browser} - + {:else if !(replay instanceof ReplayPlayer)} {finalText} {/if} @@ -104,7 +116,6 @@ } span { - opacity: 0; white-space: pre-wrap; overflow-wrap: break-word; } diff --git a/src/lib/charrecorder/core/player.ts b/src/lib/charrecorder/core/player.ts index 2332138c..a84b9ef9 100644 --- a/src/lib/charrecorder/core/player.ts +++ b/src/lib/charrecorder/core/player.ts @@ -12,7 +12,10 @@ export class ReplayPlayer { startTime = performance.now(); - private animationFrameId: number | null = null; + private animationFrameId: ReturnType | null = + null; + + private timeoutId: ReturnType | null = null; timescale = 1; @@ -20,6 +23,8 @@ export class ReplayPlayer { onDone?: () => void; + onTick?: (time: number) => void; + constructor( readonly replay: Replay, plugins: ReplayPlugin[] = [], @@ -47,6 +52,7 @@ export class ReplayPlayer { } const now = performance.now() - this.startTime; + this.onTick?.(now); while ( this.replayCursor < this.replay.keys.length && @@ -131,7 +137,7 @@ export class ReplayPlayer { } return this; } - setTimeout(() => { + this.timeoutId = setTimeout(() => { this.startTime = performance.now(); this.animationFrameId = requestAnimationFrame(this.updateLoop.bind(this)); }, delay); @@ -139,6 +145,9 @@ export class ReplayPlayer { } destroy() { + if (this.timeoutId) { + clearTimeout(this.timeoutId); + } if (this.animationFrameId) { cancelAnimationFrame(this.animationFrameId); } diff --git a/src/lib/charrecorder/renderer/renderer.ts b/src/lib/charrecorder/renderer/renderer.ts index 1008374a..6586de3d 100644 --- a/src/lib/charrecorder/renderer/renderer.ts +++ b/src/lib/charrecorder/renderer/renderer.ts @@ -279,6 +279,18 @@ export class TextRenderer { } } + destroy() { + this.cursorNode.remove(); + for (const node of this.nodes.values()) { + node.remove(); + } + for (const node of this.heldNodes.values()) { + node.remove(); + } + this.nodes.clear(); + this.heldNodes.clear(); + } + private isShiny(char: TextToken, index: number) { return ( this.shiny?.includes(index) || diff --git a/src/lib/components/ChordPhraseDisplay.svelte b/src/lib/components/ChordPhraseDisplay.svelte new file mode 100644 index 00000000..593c3271 --- /dev/null +++ b/src/lib/components/ChordPhraseDisplay.svelte @@ -0,0 +1,367 @@ + + +
{ + box.focus(); + } + : undefined} +> + {#if supportsAutospace} + + {/if} +
(hasFocus = true) : undefined} + onfocusout={interactive + ? (event) => { + if (event.relatedTarget !== button) hasFocus = false; + } + : undefined} + > + {#if hasFocus} +
+ +
+ {:else} +
+ + {/if} + +
+ {#if supportsAutospace} + + {/if} + +
+ + diff --git a/src/lib/components/layout/ActionSelector.svelte b/src/lib/components/layout/ActionSelector.svelte index 09f9d99d..9a950a5e 100644 --- a/src/lib/components/layout/ActionSelector.svelte +++ b/src/lib/components/layout/ActionSelector.svelte @@ -133,14 +133,16 @@ /> {#each $KEYMAP_CATEGORIES as category} - + {#if category.name !== "Internal"} + + {/if} {/each} {#if currentAction !== undefined} diff --git a/src/lib/meta/meta-storage.ts b/src/lib/meta/meta-storage.ts index 164a2d75..5c418335 100644 --- a/src/lib/meta/meta-storage.ts +++ b/src/lib/meta/meta-storage.ts @@ -17,7 +17,7 @@ export async function getMeta( try { if (!browser) return fetchMeta(device, version, fetch); - const dbRequest = indexedDB.open("version-meta", 5); + const dbRequest = indexedDB.open("version-meta", 6); const db = await new Promise((resolve, reject) => { dbRequest.onsuccess = () => resolve(dbRequest.result); dbRequest.onerror = () => reject(dbRequest.error); @@ -130,6 +130,9 @@ async function fetchMeta( async (load) => load().then((it) => (it as any).default), ), )), + recipes: await (meta?.recipes + ? fetch(`${path}/${meta.recipes}`).then((it) => it.json()) + : undefined), update: { uf2: meta?.update?.uf2 ?? diff --git a/src/lib/meta/types/meta.ts b/src/lib/meta/types/meta.ts index e5a3dbc2..ca9746f1 100644 --- a/src/lib/meta/types/meta.ts +++ b/src/lib/meta/types/meta.ts @@ -13,6 +13,7 @@ export interface SettingsMeta { export interface SettingsItemMeta { id: number; + name?: string; description?: string; enum?: string[]; range: [number, number]; @@ -43,6 +44,7 @@ export interface RawVersionMeta { actions: string; settings: string; changelog: string; + recipes: string; factory_defaults: { layout: string; settings: string; @@ -61,6 +63,38 @@ export interface RawVersionMeta { spi_flash: SPIFlashInfo | null; } +export interface E2eAddChord { + input: string[][]; + output: string[]; +} + +export interface E2eTestItem { + keys?: string[]; + modifiers?: Record; + press?: string[]; + release?: string[]; + step?: number; + idle?: boolean; + clearChords?: boolean; + addChords?: E2eAddChord[]; + settings: Record>; +} + +export interface E2eTest { + matrix?: string[]; + test: E2eTestItem[]; +} + +export interface E2eDemo { + demo?: { + id?: string; + title?: string; + description?: string; + }; + matrix?: string[]; + tests: E2eTest[]; +} + export interface VersionMeta { version: string; device: string; @@ -73,6 +107,7 @@ export interface VersionMeta { actions: KeymapCategory[]; settings: SettingsMeta[]; changelog: Changelog; + recipes?: E2eTest[]; factoryDefaults?: { layout: CharaLayoutFile; settings: CharaSettingsFile; diff --git a/src/lib/os-layout.ts b/src/lib/os-layout.ts index da60641a..c17da2ef 100644 --- a/src/lib/os-layout.ts +++ b/src/lib/os-layout.ts @@ -11,6 +11,7 @@ async function updateLayout() { layout.size !== currentLayout.size || [...layout.keys()].some((key) => layout.get(key) !== currentLayout.get(key)) ) { + console.log(layout); osLayout.set(layout); } } diff --git a/src/lib/serialization/base64.ts b/src/lib/serialization/base64.ts index 3b124ad4..b94bd0df 100644 --- a/src/lib/serialization/base64.ts +++ b/src/lib/serialization/base64.ts @@ -29,5 +29,10 @@ export async function fromBase64( .replaceAll(".", "+") .replaceAll("_", "/") .replaceAll("-", "=")}`, - ).then((it) => it.blob()); + ) + .then((it) => { + console.log(it); + return it; + }) + .then((it) => it.blob()); } diff --git a/src/routes/(app)/Sidebar.svelte b/src/routes/(app)/Sidebar.svelte index b4e1c175..3bbdddab 100644 --- a/src/routes/(app)/Sidebar.svelte +++ b/src/routes/(app)/Sidebar.svelte @@ -1,7 +1,8 @@ diff --git a/src/routes/(app)/ccos/[device]/+page.svelte b/src/routes/(app)/ccos/[device]/+page.svelte index 2033de98..c7fe020f 100644 --- a/src/routes/(app)/ccos/[device]/+page.svelte +++ b/src/routes/(app)/ccos/[device]/+page.svelte @@ -19,12 +19,7 @@ {#each data.versions as version} {@const isPrerelease = version.name.includes("-")}
  • - {version.name} - + {version.name}
  • {/each} @@ -70,14 +65,6 @@ } } - time { - opacity: 0.5; - &:before { - padding-inline: 0.4ch; - content: "•"; - } - } - div.title:has(input:not(:checked)) ~ ul .pre-release { opacity: 0; height: 0; diff --git a/src/routes/(app)/ccos/[device]/[version]/+page.svelte b/src/routes/(app)/ccos/[device]/[version]/+page.svelte index b7a40f12..452bd3a3 100644 --- a/src/routes/(app)/ccos/[device]/[version]/+page.svelte +++ b/src/routes/(app)/ccos/[device]/[version]/+page.svelte @@ -344,6 +344,15 @@

    Changelog

    + + + + {#if data.meta.recipes} +

    Includes {data.meta.recipes.length} recipes

    + {/if} + {#if data.meta.changelog.features}

    Features

      diff --git a/src/routes/(app)/e2e/+page.svelte.wip b/src/routes/(app)/e2e/+page.svelte.wip deleted file mode 100644 index 1ec1591d..00000000 --- a/src/routes/(app)/e2e/+page.svelte.wip +++ /dev/null @@ -1,232 +0,0 @@ - - -

      E2E Testing

      - -{#snippet Layout(keys: Set)} - - {#each layout.keys as key} - {#if key.shape === "square"} - - {/if} - {/each} - -{/snippet} - - - -
      - {#each test as { ms, reports, keys }} -
      - {ms}ms -
      - {#each keys ?? [] as key} - {keycodes[key] ?? key} - {/each} - -
      - {@render Layout(new Set(keys))} - {#each reports ?? [] as report} -
      -
      {report.modifiers}
      -
      - {#each report.keys ?? [] as key} - {keycodes[key] ?? key} - {/each} -
      -
      - {/each} -
      - {/each} -
      - -
      - {#each test as action, i} - {@const isActionTick = Array.isArray(action)} - {@const isActionPress = typeof action === "number" && action >= 0} - {@const isActionRelease = typeof action === "number" && action < 0} - {#if isActionTick} -
      - step_over - {action[0]}ms -
      - {#if action[1]} -
      - {#each Array.from({ length: 8 }) as _, j} -
      {j}
      - {/each} - {#each action[1][1] as key} -
      - {key} -
      - {/each} -
      - {/if} - {:else if typeof action === "string"} -
      Command: {action}
      - {:else if isActionPress} - - {:else if isActionRelease} - - {:else} -
      Unsupported {action}
      - {/if} - {/each} -
      - - diff --git a/src/routes/(app)/e2e/keycodes.json b/src/routes/(app)/e2e/keycodes.json deleted file mode 100644 index 20407730..00000000 --- a/src/routes/(app)/e2e/keycodes.json +++ /dev/null @@ -1,251 +0,0 @@ -[ - "reserved", - "esc", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", - "-", - "=", - "bksp", - "tab", - "q", - "w", - "e", - "r", - "t", - "y", - "u", - "i", - "o", - "p", - "[", - "]", - "enter", - "lctrl", - "a", - "s", - "d", - "f", - "g", - "h", - "j", - "k", - "l", - ";", - "'", - "`", - "lshift", - "\\", - "z", - "x", - "c", - "v", - "b", - "n", - "m", - ",", - ".", - "/", - "rshift", - "kp*", - "lalt", - "_", - "capslock", - "f1", - "f2", - "f3", - "f4", - "f5", - "f6", - "f7", - "f8", - "f9", - "f10", - "numlock", - "scrolllock", - "kp7", - "kp8", - "kp9", - "kp-", - "kp4", - "kp5", - "kp6", - "kp+", - "kp1", - "kp2", - "kp3", - "kp0", - "kp.", - "ksc_84", - "zenkaku_hankaku", - "102nd", - "f11", - "f12", - "ro", - "katakana", - "hiragana", - "henkan", - "katakana_hiragana", - "muhenkan", - "kp,", - "kp_enter", - "rctrl", - "kp/", - "sysrq", - "ralt", - "linefeed", - "home", - "up", - "pageup", - "left", - "right", - "end", - "down", - "pagedown", - "insert", - "delete", - "macro", - "mute", - "volume_down", - "volume_up", - "power", - "kp=", - "kp+-", - "pause", - "scale", - "kp,", - "hangeul", - "hanja", - "yen", - "lmeta", - "rmeta", - "compose", - "stop", - "again", - "props", - "undo", - "front", - "copy", - "open", - "paste", - "find", - "cut", - "help", - "menu", - "calc", - "setup", - "sleep", - "wakeup", - "file", - "sendfile", - "deletefile", - "xfer", - "prog1", - "prog2", - "www", - "msdos", - "coffee", - "rotate_display", - "cyclewindows", - "mail", - "bookmarks", - "computer", - "back", - "forward", - "close_cd", - "eject_cd", - "eject_close_cd", - "next_song", - "play_pause", - "prev_song", - "stop_cd", - "record", - "rewind", - "phone", - "iso", - "config", - "homepage", - "refresh", - "exit", - "move", - "edit", - "scroll_up", - "scroll_down", - "kp_left_paren", - "kp_right_paren", - "new", - "redo", - "f13", - "f14", - "f15", - "f16", - "f17", - "f18", - "f19", - "f20", - "f21", - "f22", - "f23", - "f24", - "sc_195", - "sc_196", - "sc_197", - "sc_198", - "sc_199", - "play_cd", - "pause_cd", - "prog3", - "prog4", - "all_applications", - "suspend", - "close", - "play", - "fastforward", - "bass_boost", - "print", - "hp", - "camera", - "sound", - "question", - "email", - "chat", - "search", - "connect", - "finance", - "sport", - "shop", - "alterase", - "cancel", - "brightness_down", - "brightness_up", - "media", - "switch_video_mode", - "kbd_illum_toggle", - "kbd_illum_down", - "kbd_illum_up", - "send", - "reply", - "forward_mail", - "save", - "documents", - "battery", - "bluetooth", - "wlan", - "uwb", - "unknown", - "video_next", - "video_prev", - "brightness_cycle", - "brightness_auto", - "display_off", - "wwan", - "rfkill", - "mic_mute" -] diff --git a/src/routes/(app)/e2e/replay/+page.svelte b/src/routes/(app)/e2e/replay/+page.svelte new file mode 100644 index 00000000..68de0d9d --- /dev/null +++ b/src/routes/(app)/e2e/replay/+page.svelte @@ -0,0 +1,85 @@ + + +
      + Full Log + {#each data.data as item, i} + {#if "press" in item} +
      {item.press}
      + {:else if "release" in item} +
      {item.release}
      + {:else if "keys" in item} +
      + keyboard +
      + {item.modifiers.toString(2)} +
      +
      {item.keys.join(", ")}
      +
      + {:else if "out" in item} +
      {item.out}
      + {:else if "in" in item} +
      {item.in}
      + {:else if "tick" in item} +
      timer_play{item.tick}ms
      + {:else} +
      Unknown log item at index {i}
      + {/if} + {/each} +
      + + diff --git a/src/routes/(app)/e2e/replay/+page.ts b/src/routes/(app)/e2e/replay/+page.ts new file mode 100644 index 00000000..1979346e --- /dev/null +++ b/src/routes/(app)/e2e/replay/+page.ts @@ -0,0 +1,49 @@ +import type { PageLoad } from "./$types"; +import { browser } from "$app/environment"; +import { fromBase64 } from "$lib/serialization/base64"; + +export interface ReplaySerialIn { + in: string; +} + +export interface ReplaySerialOut { + out: string; +} + +export interface ReplaySerialReport { + modifiers: number; + keys: number[]; +} + +export interface ReplaySerialPress { + press: number; +} + +export interface ReplaySerialRelease { + release: number; +} + +export interface ReplayTick { + tick: number; +} + +export type ReplayDataItem = + | ReplayTick + | ReplaySerialIn + | ReplaySerialOut + | ReplaySerialReport + | ReplaySerialPress + | ReplaySerialRelease; + +export const load = (async ({ url, fetch }) => { + const replay = browser && new URLSearchParams(url.search).get("data"); + if (!replay) { + return undefined; + } + const stream = (await fromBase64(replay, fetch)) + .stream() + .pipeThrough(new DecompressionStream("deflate")); + return { + data: JSON.parse(await new Response(stream).text()) as ReplayDataItem[], + }; +}) satisfies PageLoad; diff --git a/src/routes/(app)/recipes/+page.svelte b/src/routes/(app)/recipes/+page.svelte new file mode 100644 index 00000000..33983278 --- /dev/null +++ b/src/routes/(app)/recipes/+page.svelte @@ -0,0 +1,64 @@ + + +
      + + +
      +

      Cookbook

      + {#if recipes} + {#each recipes as demo, i} + + {/each} + {/if} +
      +
      + + diff --git a/src/routes/(app)/recipes/Demo.svelte b/src/routes/(app)/recipes/Demo.svelte new file mode 100644 index 00000000..f3f85097 --- /dev/null +++ b/src/routes/(app)/recipes/Demo.svelte @@ -0,0 +1,86 @@ + + +
      (paused = false)} + onmouseleave={() => (paused = true)} +> + {#if demo.demo} +

      {demo.demo?.title}

      +

      {demo.demo?.description}

      + {/if} + {#if demo.matrix} +
      + {#each demo.matrix as item, i} + + {/each} +
      + {/if} + {#if test} + + {/if} +
      + + diff --git a/src/routes/(app)/recipes/Recipe.svelte b/src/routes/(app)/recipes/Recipe.svelte new file mode 100644 index 00000000..123d3c22 --- /dev/null +++ b/src/routes/(app)/recipes/Recipe.svelte @@ -0,0 +1,331 @@ + + +
      + setTimeout(() => (replay = { ...replay }), replayDelay)} + ontick={(t) => (time = t)} + /> +
      + +
      + {#each keysUsed as [action, times]} +
      + +
      + {/each} +
      + +
      +
      + {#each graph as row, i} + {#each row as char, j} + {#if char !== " "} +
      it !== " ") ?? + Infinity) <= j} + style:grid-row={i + 1} + style:grid-column={j + 1} + > + {char} +
      + {/if} + {/each} + {/each} +
      + + {#if chords.length > 0} +

      Chords Used

      +
      + {#each chords as { input, output }} +
      + {#each input as actions} +
      + +
      + {/each} +
      + +
      + +
      + {/each} +
      + {/if} + {#if settings.length > 0} +

      Settings Changed

      +
        + {#each settings as [item, value]} +
      • + {item?.name ?? "Unknown Setting"}: {value?.toString()} +
      • + {/each} +
      + {/if} +
      + + diff --git a/src/routes/recipes/+page.svelte b/src/routes/recipes/+page.svelte deleted file mode 100644 index 318ab6c4..00000000 --- a/src/routes/recipes/+page.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - -

      Recipes

      - -

      These are example uses, taken directly from our E2E testing library.

      - -
      - {#each Object.entries(tests) as [path, resolver]} - {#await resolver() then module} -
      - -
      - {/await} - {/each} -
      - - diff --git a/src/routes/recipes/Recipe.svelte b/src/routes/recipes/Recipe.svelte deleted file mode 100644 index 339353a8..00000000 --- a/src/routes/recipes/Recipe.svelte +++ /dev/null @@ -1,148 +0,0 @@ - - -
      -
      - setTimeout(() => (replay = { ...replay }), replayDelay)} - /> -
      - -
      - Breakdown -
      - {#each graph as row, i} - {#each row as char, j} - {#if char !== " "} -
      it !== " ") ?? - Infinity) <= j} - style:grid-row={i + 1} - style:grid-column={j + 1} - > - {char} -
      - {/if} - {/each} - {/each} -
      -
      -
      - - diff --git a/src/routes/recipes/test-types.ts b/src/routes/recipes/test-types.ts deleted file mode 100644 index cb866617..00000000 --- a/src/routes/recipes/test-types.ts +++ /dev/null @@ -1,20 +0,0 @@ -export interface E2eAddChord { - input: string[][]; - output: string[]; -} - -export interface E2eTestItem { - keys?: string[]; - modifiers?: Record; - press?: string[]; - release?: string[]; - step?: number; - idle?: boolean; - clearChords?: boolean; - addChords?: E2eAddChord[]; - settings: Record>; -} - -export interface E2eTest { - test: E2eTestItem[]; -}