Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

epic: new gesture engine 🐵 #7324

Merged
merged 915 commits into from
Dec 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
915 commits
Select commit Hold shift + click to select a range
279e6b8
fix(web): better cleanup of cancelled gestures
jahorton Oct 30, 2023
2e0f6b0
fix(web): proper touch-start robustness handling
jahorton Oct 30, 2023
b940e90
fix(web): gesture-engine null-ref check for doc keyboards
jahorton Oct 30, 2023
bf3dcef
chore(web): Merge branch 'feature-gestures' into fix/web/cancelled-ge…
jahorton Oct 31, 2023
0fa0520
feat(web): further enhances interruption recovery
jahorton Oct 31, 2023
40c67c1
Merge pull request #9893 from keymanapp/fix/web/cancelled-gesture-cle…
jahorton Oct 31, 2023
f7e8720
chore(web): Merge branch 'feature-gestures' into fix/web/state-tokens…
jahorton Oct 31, 2023
4d615b3
chore(web): Merge branch 'fix/web/state-tokens-and-two-caps' into fix…
jahorton Oct 31, 2023
7c6a1f8
feat(web): dynamic rescale of flick threhsolds
jahorton Oct 31, 2023
28ab0e8
feat(web): start of the gesture preview host
jahorton Oct 20, 2023
58da961
fix(web): minor goof in last commit
jahorton Oct 20, 2023
90f9baf
feat(web): prototype flick preview styling
jahorton Oct 20, 2023
3f9fd8c
change(web): puts flick previews in multitap ele to prevent overlay
jahorton Oct 20, 2023
55f004f
feat(web): demo flag, styling nuances, ability to fade invalid entries
jahorton Oct 23, 2023
efa4806
feat(web): multitap + longpress styling statically positioned, flick …
jahorton Oct 23, 2023
f6d9354
fix(web): border-rounding for previews
jahorton Oct 23, 2023
1ff8d68
chore(web): post-rebase patchup
jahorton Oct 24, 2023
5be435b
change(web): gesture-preview longevity, causality
jahorton Oct 31, 2023
9ef0ad3
fix(web): no roaming preview with flicks
jahorton Oct 31, 2023
db77fa1
change(web): trims previous preview styling
jahorton Oct 31, 2023
3483781
feat(web): first scrolling flick preview
jahorton Oct 31, 2023
e562253
feat(web): 'natural' scrolling, smoother scroll start
jahorton Oct 31, 2023
d3ad24e
feat(web): flick-scroll clearing
jahorton Oct 31, 2023
6169ffe
chore(web): post-rebase patchup
jahorton Oct 31, 2023
bb2250f
fix(web): flick-scroll only for keys with flicks
jahorton Oct 31, 2023
1715463
fix(web): random viewport-size def bug
jahorton Oct 31, 2023
b070c10
fix(web): CSS styling for tablet key-hints
jahorton Oct 31, 2023
c4d29da
chore(web): Merge branch 'fix/web/state-change-source-rewrite' into f…
jahorton Oct 31, 2023
b003e1b
fix(web): removes unneeded, problematic GestureMatcher check
jahorton Nov 1, 2023
b3e8bda
chore(web): Merge branch 'feat/web/custom-key-hints' into refactor/we…
jahorton Nov 1, 2023
ccc4c00
fix(web): multitaps with heterogenous nextLayer use
jahorton Nov 1, 2023
bfb31a6
chore(web): Merge branch 'refactor/web/transcription-cache' into feat…
jahorton Nov 1, 2023
cc29c89
chore(common/models): Merge branch 'feat/web/test-kbd-prototyping' in…
jahorton Nov 1, 2023
338af8f
chore(web): Merge branch 'change/common/models/pred-text-context-trac…
jahorton Nov 1, 2023
dd52337
chore(web): Merge branch 'feat/web/generalized-multitap' into feat/we…
jahorton Nov 1, 2023
4dfba2c
chore(web): Merge branch 'feat/web/modipress' into feat/web/flick-imp…
jahorton Nov 1, 2023
f4061f7
chore(web): Merge branch 'feat/web/flick-implementation' into feat/we…
jahorton Nov 1, 2023
3c9c036
fix(web): early off-the-top cancellation in app/webview mode
jahorton Nov 1, 2023
b9d02cb
fix(web): automated-test patchup
jahorton Nov 2, 2023
7934d3f
chore(web): Merge branch 'feat/web/modipress' into feat/web/flick-imp…
jahorton Nov 2, 2023
00cdbdf
chore(web): Merge branch 'feat/web/flick-implementation' into feat/we…
jahorton Nov 2, 2023
1cef89f
fix(web): app/webview globe-key key-up signalling
Nov 2, 2023
44c1a71
chore(web): now uses common/web/types enum for button classes
jahorton Nov 2, 2023
3e3e6ed
fix(web): Android API 21 compat
jahorton Nov 2, 2023
c1436c6
fix(web): fixes modipress issues discovered in personal tests
jahorton Nov 3, 2023
6955f90
chore(web): addresses most review concerns
jahorton Nov 3, 2023
0897a28
chore(web): semi-verbose check for modipress button-class critierion
jahorton Nov 3, 2023
fd585e5
chore(web): Apply suggestions from code review
jahorton Nov 3, 2023
924e761
change(web): remembered that the outputTarget.restoreTo func exists
jahorton Nov 3, 2023
2189f1e
chore(web): Merge branch 'feat/web/generalized-multitap' into feat/we…
jahorton Nov 3, 2023
baca0ab
chore(web): Merge branch 'feat/web/modipress' into feat/web/flick-imp…
jahorton Nov 3, 2023
01c85b7
chore(web): Merge branch 'feat/web/flick-implementation' into feat/we…
jahorton Nov 3, 2023
31257d9
fix(web): fixes tablet preview-host cleanup
jahorton Nov 3, 2023
3ef5519
fix(web): modipress+longpress next-layer handling
jahorton Nov 3, 2023
db67896
chore(web): Merge branch 'feat/web/modipress' into feat/web/flick-imp…
jahorton Nov 3, 2023
874e463
chore(web): Merge branch 'feat/web/flick-implementation' into feat/we…
jahorton Nov 3, 2023
5580ebb
fix(web): restores compat with older Android devices
jahorton Nov 3, 2023
8355442
chore(web): Apply suggestions from code review
jahorton Nov 6, 2023
fd5f94b
Merge pull request #9802 from keymanapp/fix/web/state-tokens-and-two-…
jahorton Nov 6, 2023
8e13ca4
Merge pull request #9803 from keymanapp/fix/web/state-change-source-r…
jahorton Nov 6, 2023
5a2cfb8
chore(web): Apply suggestions from code review
jahorton Nov 6, 2023
1bfe774
Merge pull request #9829 from keymanapp/feat/web/custom-key-hints
jahorton Nov 6, 2023
a559004
Merge pull request #9836 from keymanapp/refactor/web/transcription-cache
jahorton Nov 6, 2023
ce4176e
Merge pull request #9827 from keymanapp/feat/web/test-kbd-prototyping
jahorton Nov 6, 2023
a01a48f
Merge pull request #9855 from keymanapp/change/common/models/pred-tex…
jahorton Nov 6, 2023
93c1317
fix(web): modipress on first tap of multitappable
jahorton Nov 6, 2023
dca2f14
chore(web): Merge branch 'feat/web/modipress' into feat/web/flick-imp…
jahorton Nov 6, 2023
ba97cc2
chore(web): Merge branch 'feat/web/flick-implementation' into feat/we…
jahorton Nov 6, 2023
2c16255
docs(web): updates a comment
jahorton Nov 6, 2023
8ddb91b
chore(web): Merge branch 'feat/web/flick-implementation' into feat/we…
jahorton Nov 6, 2023
fab64bc
chore(web): applies a few PR suggestions
jahorton Nov 6, 2023
1136b83
fix(web): better consistency for flick-animation b/t phone and tablet
jahorton Nov 6, 2023
8d6610a
fix(web): lm-worker null guard
jahorton Nov 6, 2023
5289776
fix(web): fixes #9561 - disables esbuild's keepNames setting
jahorton Nov 6, 2023
d227550
fix(web): path with undefined return value in matcherSelector
jahorton Nov 6, 2023
8e87e66
chore(web): gesture-engine integration null-guards
jahorton Nov 6, 2023
eb74bb9
chore(web): taggedContext null guard in lm-worker
jahorton Nov 6, 2023
221e1dc
chore(web): Merge branch 'feat/web/modipress' into feat/web/flick-imp…
jahorton Nov 6, 2023
f1f0991
chore(web): Merge branch 'feat/web/flick-implementation' into feat/we…
jahorton Nov 6, 2023
f5cfd27
chore(web): Merge branch 'feat/web/gesture-preview-host' into fix/web…
jahorton Nov 7, 2023
3ea4a60
docs(web): doc of min Chrome version for keepNames
jahorton Nov 7, 2023
9a83e5b
fix(web): default subkey forwarding
jahorton Nov 7, 2023
09f0f3a
fix(web): subkey cancellation should not throw error
jahorton Nov 7, 2023
d316e19
feat(web): path eval access to prior stage path-stats
jahorton Nov 7, 2023
e0a6804
feat(web): headless flick-path unit tests
jahorton Nov 7, 2023
c9ec3e2
fix(web): removes debugging console statement
jahorton Nov 7, 2023
e73af2f
feat(web): flick gesture-model headless unit-testing
jahorton Nov 7, 2023
5633d44
feat(web): flick direction-locking, pass 1
jahorton Nov 7, 2023
2a56021
feat(web): flick lock resetting
jahorton Nov 7, 2023
e139052
change(web): flick-animation scaling distortion
jahorton Nov 7, 2023
86cf2be
fix(web): flick preview element, text alignments
jahorton Nov 7, 2023
51958ae
fix(web): whoops, broke modipress
jahorton Nov 7, 2023
9e42760
fix(web): reset-flick output, reset stability
jahorton Nov 8, 2023
a1974dc
fix(web): flick sustain through incoming simple-taps
jahorton Nov 8, 2023
46d1801
feat(web): flicks auto-finish upon new tap
jahorton Nov 8, 2023
e524c86
change(web): longpress, flick autocancellation removal
jahorton Nov 8, 2023
216b4aa
refactor(web): up-flick for longpresses on keys without northish-flicks
jahorton Nov 8, 2023
83c2616
fix(web): special-key hint text accidental camouflage
jahorton Nov 8, 2023
33da132
Merge branch 'feature-gestures' into chore/merge-master-into-feature-…
mcdurdin Nov 12, 2023
cca9918
fix(web): fixes gesture-engine unit test affected by changes
jahorton Nov 13, 2023
a9aea50
chore(web): Merge branch 'change/web/locked-flicks' into change/web/p…
jahorton Nov 13, 2023
e64cc70
Merge pull request #9982 from keymanapp/chore/merge-master-into-featu…
jahorton Nov 13, 2023
6d68df3
Merge pull request #9740 from keymanapp/feat/web/generalized-multitap
jahorton Nov 13, 2023
cc9de9d
chore(web): Merge branch 'feature-gestures' into feat/web/modipress
jahorton Nov 13, 2023
721c73d
Merge pull request #9876 from keymanapp/feat/web/modipress
jahorton Nov 13, 2023
925d082
docs(web): adds review-requested comment
jahorton Nov 13, 2023
f477c10
feat(web): better locked-flick resetting behaviors
jahorton Nov 13, 2023
a213531
feat(web): delayed modipress completion with nested subkeys
jahorton Nov 8, 2023
fabf5a4
feat(web): delayed modipress completion with nested flicks
jahorton Nov 8, 2023
1dc94fc
fix(web): modipress-flick robustness; properly updates layer for comp…
jahorton Nov 8, 2023
f47fd0d
fix(web): resetting locked flicks during a modipress (without cancell…
jahorton Nov 9, 2023
c84c2e2
chore(web): gesture models now spec'd via function
jahorton Nov 14, 2023
2eb69f9
chore(web): resolves old TODO
jahorton Nov 14, 2023
719bfa6
chore(web): Merge branch 'feature-gestures' into feat/web/flick-imple…
jahorton Nov 14, 2023
3e3929d
chore(web): Merge branch 'feat/web/flick-implementation' into feat/we…
jahorton Nov 14, 2023
b0b696d
chore(web): a bit more cleanup
jahorton Nov 14, 2023
e76d47a
fix(web): fixes #9864 - keytips, callouts now children of vkbd.element
jahorton Oct 31, 2023
f82ba7a
fix(web): fixes #7889 - callout now dynamic CSS triangle, used on all…
jahorton Oct 31, 2023
22b9d17
fix(web): popup callout needs _Box access but vkbd.element parent
jahorton Nov 3, 2023
d12e335
fix(web): fixes #7890 - webview-based subkeys lacked non-webview-defa…
jahorton Nov 3, 2023
4246a3e
change(android): webview pages now use standards mode, not quirks mode
jahorton Nov 14, 2023
680c031
change(ios): ios too
jahorton Nov 14, 2023
25fe85e
chore(web): minor cleanup
jahorton Nov 14, 2023
53364bc
fix(web): better callout positioning, webview-mode sizing
jahorton Nov 14, 2023
78dfec6
feat(web): better locked-flick resetting behaviors
jahorton Nov 13, 2023
d2c8e70
chore(web): Merge branch 'change/web/locked-flicks' into change/web/p…
jahorton Nov 14, 2023
e44e5f3
chore(web): Merge branch 'change/web/polish-pass' into feat/web/delay…
jahorton Nov 14, 2023
92372cc
Merge pull request #9909 from keymanapp/feat/web/flick-implementation
jahorton Nov 14, 2023
1a7245e
Merge pull request #9825 from keymanapp/feat/web/gesture-preview-host
jahorton Nov 14, 2023
eefea0d
Merge pull request #9943 from keymanapp/fix/web/gestures-old-android-…
jahorton Nov 14, 2023
6205506
Merge pull request #9952 from keymanapp/fix/web/gestures-and-longpres…
jahorton Nov 14, 2023
90aa8aa
chore(web): Merge branch 'change/web/polish-pass' into chore/web/gest…
jahorton Nov 15, 2023
5ad0477
chore(web): post-review adjustments
jahorton Nov 15, 2023
22c09d7
chore(web): Merge branch 'feature-gestures' into change/web/locked-fl…
jahorton Nov 15, 2023
681e298
change(web): better math, documentation on callout params
jahorton Nov 15, 2023
f03c898
docs(web): adds and updates gesture-recognizer doc-comments
jahorton Nov 16, 2023
48fc311
feat(web): implements basic gesture-definition validator
jahorton Nov 16, 2023
8d542e2
chore(web): links validator into web's engine/osk build action
jahorton Nov 16, 2023
0439565
fix(web): missed an optional-based null guard
jahorton Nov 17, 2023
762139b
fix(web): multitap not cancelling with alt press if involves modipress
jahorton Nov 20, 2023
d1a97ff
fix(web): rejection second-press in subkey now possible, is unwanted
jahorton Nov 20, 2023
df77d57
fix(web): sustain mode behavior when nested model has own sustain mode
jahorton Nov 20, 2023
c196f6c
chore(web): temporarily disables broken unit tests
jahorton Nov 20, 2023
568e85b
chore(web): reverts prior commit
jahorton Nov 20, 2023
2a21f9a
fix(web): app/webview multitap context-reset synchronization
jahorton Nov 20, 2023
f29888f
fix(web): modipress+multitap handling
jahorton Nov 20, 2023
65795b8
Merge pull request #9957 from keymanapp/change/web/locked-flicks
jahorton Nov 21, 2023
f550490
change(web): changes headless subkey-select model, drops now-invalid …
jahorton Nov 21, 2023
8be3f09
fix(web): headless unit-test patchup, fixes non-awaitNested handling
jahorton Nov 21, 2023
83bc0da
fix(web): proper resolution on model replacement failure
jahorton Nov 21, 2023
b3714a0
fix(web): subview construction for terminated sources
jahorton Nov 21, 2023
33e53ea
chore(web): Merge branch 'feature-gestures' into change/web/polish-pass
jahorton Nov 21, 2023
b939841
Merge pull request #9972 from keymanapp/change/web/polish-pass
jahorton Nov 21, 2023
893d48e
Merge pull request #9998 from keymanapp/chore/web/gesture-model-cleanup
jahorton Nov 21, 2023
8842463
chore(web): Merge branch 'feature-gestures' into feat/web/delayed-mod…
jahorton Nov 21, 2023
d3d42b7
Merge pull request #10015 from keymanapp/feat/web/basic-gesture-model…
jahorton Nov 21, 2023
a0ea2b8
chore(web): Merge branch 'feature-gestures' into feat/web/delayed-mod…
jahorton Nov 21, 2023
b3ba87f
fix(web): key-preview behavior for flicks during multitap-modipress
jahorton Nov 21, 2023
bce1737
fix(web): incomplete layer remapping during modipress-multitap
jahorton Nov 21, 2023
a1bff2c
fix(web): forgot to sustain flick-reset (after divergence from flick-…
jahorton Nov 21, 2023
f94f98f
docs(web): minor doc on resetOnResolve
jahorton Nov 21, 2023
59870ff
fix(web): app/webview did not clear deadkeys on context-reset
jahorton Nov 22, 2023
31cc1f8
change(web): app/webview - single transform per keystroke, even with …
jahorton Nov 22, 2023
0c9a9fa
chore(web): Merge branch 'feat/web/delayed-modipress-completion' into…
jahorton Nov 22, 2023
a9802c6
feat(web): can orient keytip below key, hotswap orientation
jahorton Nov 22, 2023
54bac9c
feat(web): adds plumbing needed to dynamically orient keytip
jahorton Nov 23, 2023
cf8568a
change(web): updates flick test kbd with a down-flick on vowels
jahorton Nov 23, 2023
8e08403
fix(web): fixes kbd's shift next-layer, lack of lang id for package
jahorton Nov 23, 2023
e18fe87
fix(web): forgot to reset preview during roaming touch (thrown in)
jahorton Nov 23, 2023
1c8e498
fix(web): a bit more flick-polish
jahorton Nov 23, 2023
8ede792
fix(web): constrains keytip within OSK bottom bound
jahorton Nov 23, 2023
1910ac4
chore(web): restores tip-orientation default
jahorton Nov 23, 2023
2d198d9
chore(web): minor dead code removal
jahorton Nov 23, 2023
c8186e2
fix(web): tablet flick-preview layout
jahorton Nov 23, 2023
e4e1345
chore(web): better import compat for validation tool
jahorton Nov 23, 2023
eb19579
chore(web): removal of dead code (that otherwise needed a tweak)
jahorton Nov 24, 2023
e0e5d90
Merge branch 'feature-gestures' into chore/merge-master-into-feature-…
mcdurdin Nov 24, 2023
40f9e6e
chore(web): Merge branch 'feature-gestures' into chore/merge-master-i…
jahorton Nov 24, 2023
d015f38
chore: Merge remote-tracking branch 'origin/chore/merge-master-into-f…
jahorton Nov 24, 2023
a6e2ae4
change(web): test keyboard now uses debug build
jahorton Nov 24, 2023
126ee8b
chore(web): dead comment
jahorton Nov 24, 2023
6fdd966
Merge pull request #9973 from keymanapp/feat/web/delayed-modipress-co…
jahorton Nov 24, 2023
0c1e9ae
Merge pull request #9911 from keymanapp/change/web/keytips-and-callouts
jahorton Nov 24, 2023
6f38fde
Merge pull request #10074 from keymanapp/chore/merge-master-into-feat…
jahorton Nov 24, 2023
253c81b
chore(web): Merge branch 'feature-gestures' into feat/web/orientable-…
jahorton Nov 24, 2023
c86d417
chore(web): splits path-stats object into simpler + full; full tree-s…
jahorton Nov 24, 2023
b9a584a
docs(web): updates comments for the two path-stats variants
jahorton Nov 24, 2023
12aad6c
fix(web): simplified mean
jahorton Nov 24, 2023
129e193
chore(web): fully removes all remaining subsegmentation bits and baubles
jahorton Nov 24, 2023
736e06f
chore(web): drops single-use protected prop
jahorton Nov 24, 2023
41c0a9b
change(web): 'up' | 'down' as to 'top' | 'bottom' custom type
jahorton Nov 30, 2023
977ad9c
change(web): adds CSS type based on 'top' | 'bottom' custom type
jahorton Nov 30, 2023
4f19b4c
change(web): floating tablet key-previews, hosted by layer-independen…
jahorton Nov 30, 2023
1279d14
Merge pull request #10063 from keymanapp/feat/web/orientable-keytip
jahorton Nov 30, 2023
bc592c8
Merge pull request #10079 from keymanapp/chore/web/gesture-stats-simp…
jahorton Nov 30, 2023
907b688
Merge pull request #10080 from keymanapp/chore/web/final-subsegmentat…
jahorton Nov 30, 2023
aa72c8d
chore(web): Merge branch 'feature-gestures' into change/web/floating-…
jahorton Nov 30, 2023
68cad10
feat(web): core multitap preview implementation
jahorton Nov 30, 2023
3f911ed
feat(web): multitap preview fade animation
jahorton Nov 30, 2023
7203479
refactor(web): mild refactor of bits from last commit
jahorton Nov 30, 2023
a475fda
fix(web): right, modipressable multitaps don't get previews; null-gua…
jahorton Nov 30, 2023
f705825
fix(web): test-keyboard patchup
jahorton Nov 30, 2023
3035c55
chore(web): removes older duplicated kbd script file
jahorton Dec 1, 2023
5ae42bf
chore(web): better code brevity per review
jahorton Dec 1, 2023
32e7d9a
chore(web): changes per PR review
jahorton Dec 1, 2023
3c4e5d6
chore(web): Merge branch 'master' into chore/web/conflict-fix
jahorton Dec 1, 2023
d8a6467
Merge pull request #10120 from keymanapp/chore/web/conflict-fix
jahorton Dec 4, 2023
22a6fbe
fix(web): test keyboard 0-key not consistent with other numerals
jahorton Dec 5, 2023
0944927
change(web): adds a 'default' nextlayer key in default shift-multitap…
jahorton Dec 5, 2023
e9dd7a1
chore(web): marks new default key's ID as private use
jahorton Dec 5, 2023
b938dc5
fix(web): whoops, forgot to --debug build in last commit
jahorton Dec 5, 2023
b960cb0
fix(web): tablet preview positioning
jahorton Dec 5, 2023
4551c4f
chore(web): Merge branch 'change/web/floating-tablet-preview' into fe…
jahorton Dec 5, 2023
c2d69f8
change(web): prevents auto-cancellation of simple-taps for flicked la…
jahorton Dec 5, 2023
95bcfea
Merge pull request #10131 from keymanapp/change/web/default-multitap-…
jahorton Dec 6, 2023
58081be
Merge pull request #10134 from keymanapp/change/web/flick-mode-locked…
jahorton Dec 6, 2023
1a1a971
fix(web): heterogenous longpress roaming
jahorton Dec 7, 2023
a4373f1
chore(web): Apply suggestions from code review
jahorton Dec 8, 2023
2f2195e
fix(common/models): worker reset context did not auto-tag new context
jahorton Dec 8, 2023
c43a2a4
fix(common/models): lm-worker reset context didn't clear context cache
jahorton Dec 8, 2023
9470c8a
chore(web): adds 'private' keyword on a method
jahorton Dec 8, 2023
aa45815
Merge branch 'feature-gestures' into chore/merge-master-into-feature-…
mcdurdin Dec 8, 2023
00e9025
change(web): gesture processing stats-object based aside from subviews
jahorton Dec 7, 2023
3e1ac67
refactor(web): differentiated path/src types - default no longer pers…
jahorton Dec 7, 2023
5923002
fix(web): fixes Web flick-spec per changes 2 commits back
jahorton Dec 7, 2023
a975bc1
chore(web): updates test resources, specs
jahorton Dec 7, 2023
a8e7320
fix(web): post-rebase export mixup
jahorton Dec 8, 2023
b98a7c4
change(web): changes model-path evaluate signature
jahorton Dec 6, 2023
ef247ba
fix(web): preserves original KMW flick behavior with change
jahorton Dec 6, 2023
aebdc6a
feat(web): adds gesture-engine path-segment-start replacement
jahorton Dec 7, 2023
6306c68
change(web): reworks flick-resetting states, state transitions
jahorton Dec 7, 2023
e55daa6
fix(web): fixes within-branch bugs from prior commits
jahorton Dec 8, 2023
ad32bc8
feat(web): resetting of flick base coordinate to key centroid
jahorton Dec 8, 2023
6688a58
feat(web): allows mild off-center recentering
jahorton Dec 8, 2023
b25a408
Merge branch 'feature-gestures' into change/web/floating-tablet-preview
jahorton Dec 8, 2023
a6f8e35
chore(web): mild build-script cleanup, gesture-engine test page update
jahorton Dec 8, 2023
876fe0b
Merge pull request #10172 from keymanapp/fix/web/roaming-longpresses
jahorton Dec 8, 2023
cfedbc7
Merge pull request #10185 from keymanapp/fix/common/models/worker-res…
jahorton Dec 8, 2023
2511e37
Merge pull request #10190 from keymanapp/chore/merge-master-into-feat…
jahorton Dec 8, 2023
ddb7988
Merge pull request #10102 from keymanapp/change/web/floating-tablet-p…
jahorton Dec 8, 2023
38251fe
Merge pull request #10103 from keymanapp/feat/web/multitap-preview-hints
jahorton Dec 8, 2023
8172405
Merge pull request #10104 from keymanapp/fix/web/test-keyboards-update
jahorton Dec 8, 2023
0825db2
chhcore(web): Update gestureDebugPath.ts
jahorton Dec 9, 2023
03bf11f
chore(web): Update build.sh
jahorton Dec 9, 2023
8d77443
chore(web): Update build.sh
jahorton Dec 9, 2023
ea0de27
Merge pull request #10169 from keymanapp/feat/web/gesture-path-memory…
jahorton Dec 12, 2023
cc24571
Merge pull request #10195 from keymanapp/chore/web/web-script-cleanup
jahorton Dec 12, 2023
535bfec
Merge pull request #10242 from keymanapp/chore/merge-master-into-feat…
jahorton Dec 13, 2023
207324e
Merge pull request #10152 from keymanapp/change/web/path-evaluate-sig…
jahorton Dec 13, 2023
c754a22
Merge pull request #10173 from keymanapp/feat/web/path-base-coord-rep…
jahorton Dec 13, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion android/KMEA/app/src/main/assets/keyboard.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<!DOCTYPE html>
<html>
<!--
Copyright (C) 2017-2019 SIL International. All rights reserved.
-->

<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no">
Expand All @@ -15,6 +15,7 @@
polyfill.
-->
<script src="es6-shim.min.js"></script>
<script src="other-polyfills.js"></script>
<script src="keymanweb-webview.js"></script>
<script src="sentry.min.js"></script>
<script src="keyman-sentry.js"></script>
Expand Down
17 changes: 17 additions & 0 deletions android/KMEA/app/src/main/assets/other-polyfills.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// Needed by the KMW's gesture engine until Chrome 61.
var DOMRect = DOMRect || function (x, y, width, height) {
this.x = this.left = x;
this.y = this.top = y;
this.width = width;
this.height = height;
this.bottom = y + height;
this.right = x + width;
};

// https://stackoverflow.com/questions/53308396/how-to-polyfill-array-prototype-includes-for-ie8
if(!Array.prototype.includes){
//or use Object.defineProperty
Array.prototype.includes = function(search){
return !!~this.indexOf(search);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,7 @@ public String toString() {
protected static final String KMFilename_KmwGlobeHintCss = "globe-hint.css";
protected static final String KMFilename_Osk_Ttf_Font = "keymanweb-osk.ttf";
protected static final String KMFilename_JSPolyfill = "es6-shim.min.js";
protected static final String KMFilename_JSPolyfill2 = "other-polyfills.js";

// Deprecated by KeyboardController.KMFilename_Installed_KeyboardsList
public static final String KMFilename_KeyboardsList = "keyboards_list.dat";
Expand Down Expand Up @@ -864,6 +865,7 @@ private static void copyAssets(Context context) {
// Copy default keyboard font
copyAsset(context, KMDefault_KeyboardFont, "", true);
copyAsset(context, KMFilename_JSPolyfill, "", true);
copyAsset(context, KMFilename_JSPolyfill2, "", true);

// Keyboard packages directory
File packagesDir = new File(getPackagesDir());
Expand Down
19 changes: 17 additions & 2 deletions common/models/templates/src/priority-queue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,35 @@ export default class PriorityQueue<Type> {
private comparator: Comparator<Type>;
private heap: Type[];

/**
* Shallow-copy / clone constructor.
* @param instance
*/
constructor(instance: PriorityQueue<Type>);
/**
* Constructs an empty priority queue.
* @param comparator A `Comparator` returning negative values when and only when
* the first parameter should precede the second parameter.
* @param initialEntries
*/
constructor(comparator: Comparator<Type>, initialEntries: Type[] = []) {
constructor(comparator: Comparator<Type>, initialEntries?: Type[]);
constructor(arg1: Comparator<Type> | PriorityQueue<Type>, initialEntries?: Type[]) {
if(typeof arg1 != 'function') {
this.comparator = arg1.comparator;
// Shallow-copies are fine.
this.heap = ([] as Type[]).concat(arg1.heap);
return;
}

const comparator = arg1;
// TODO: We may wish to allow options specifying a limit or threshold for adding
// items to the priority queue. Possibly both.
//
// When that time comes, consider a min-max heap.
// https://en.wikipedia.org/wiki/Min-max_heap
this.comparator = comparator;

this.heap = Array.from(initialEntries);
this.heap = Array.from(initialEntries ?? []);
this.heapify();
}

Expand Down
2 changes: 1 addition & 1 deletion common/predictive-text/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
"karma-teamcity-reporter": "^1.1.0",
"mocha": "^10.0.0",
"mocha-teamcity-reporter": "^4.0.0",
"sinon": "^7.1.1",
"sinon": "^14.0.0",
"ts-node": "^10.9.1",
"typescript": "^4.9.5"
},
Expand Down
5 changes: 4 additions & 1 deletion common/test/resources/karma-browserstack-config.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,10 @@ module.exports = function(baseConfigParams /* the project's base configuration
FINAL_LAUNCHER_DEFS = mergeLaunchers( PRIMARY_LAUNCHERS,
SECONDARY_LAUNCHERS);
} else {
FINAL_LAUNCHER_DEFS = PRIMARY_LAUNCHERS;
// The function also does some necessary bookkeeping that makes for
// cleaner definitions at the file's top, so we call it even if we
// aren't merging lists.
FINAL_LAUNCHER_DEFS = mergeLaunchers(PRIMARY_LAUNCHERS);
}

var FINAL_BROWSER_LIST = toBrowserList(FINAL_LAUNCHER_DEFS);
Expand Down
2 changes: 1 addition & 1 deletion common/web/es-bundling/src/classTreeshaker.mts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export const pluginForDowncompiledClassTreeshaking: esbuild.Plugin = {
return {
// Marks any classes compiled by TS (as per the /** @class */ annotation)
// as __PURE__ in order to facilitate tree-shaking.
contents: source.replace('/** @class */', '/* @__PURE__ */ /** @class */'),
contents: source.replaceAll('/** @class */', '/** @__PURE__ */'),
loader: 'js'
}
});
Expand Down
2 changes: 2 additions & 0 deletions common/web/es-bundling/src/tslibTreeshaking.mts
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ export async function determineNeededDowncompileHelpers(config: esbuild.BuildOpt
detectedHelpers.push('__createBinding');
} else if(helper == '__exportStar') {
detectedHelpers.push('__createBinding');
} else if(helper == '__spread') {
detectedHelpers.push('__read');
}
}
}
Expand Down
18 changes: 18 additions & 0 deletions common/web/gesture-recognizer/.c8rc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"check-coverage": false,
"clean": true,
"exclude": [
"src/test/*",
"node_modules/*",
"src/tools/*"
],
"exclude-after-remap": true,
"include": [
"src/engine/headless/*"
],
"reporter": ["text", "text-summary"],
"reports-dir": "build/coverage",
"src": [
"src/engine/headless/*"
]
}
11 changes: 11 additions & 0 deletions common/web/gesture-recognizer/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Build products
build

# Legacy build folders.

# Other local files.
node_modules/
unit_tests/modernizr.js
.idea/**/*.xml
*.iml
*.kpj.user
5 changes: 5 additions & 0 deletions common/web/gesture-recognizer/.mocharc.env.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { fileURLToPath } from "url";
import { dirname } from 'path';

// Tells ts-node where to find the tsconfig.json to be used for executing TS unit tests.
process.env.TS_NODE_PROJECT = `${dirname(fileURLToPath(import.meta.url))}/src/test/auto/tsconfig.json`;
10 changes: 10 additions & 0 deletions common/web/gesture-recognizer/.mocharc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"extensions": ["js", "ts"],
"spec" : [
"src/test/auto/headless/**/*.*"
],
"node-option": [
"loader=ts-node/esm"
],
"require": ".mocharc.env.js"
}
11 changes: 11 additions & 0 deletions common/web/gesture-recognizer/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Keyman: Gesture Recognizer Module
The Original Code is (C) SIL International

The Gesture Recognizer module is an internal component for all of Keyman's Web-based OSKs. At this time, this is only referenced by
KeymanWeb, seen within this repo at /web/.

## Minimum Compilation Requirements

See the repo-level [document for build configuration](../../../docs/build/index.md) for details on how to
configure your build environment.
- Follow the Keyman Engine for Web (KeymanWeb) requirements where appropriate.
7 changes: 7 additions & 0 deletions common/web/gesture-recognizer/build-bundler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import esbuild from 'esbuild';
import { esmConfiguration, bundleObjEntryPoints, prepareTslibTreeshaking } from '../es-bundling/build/index.mjs';

await esbuild.build(await prepareTslibTreeshaking({
...esmConfiguration,
...bundleObjEntryPoints('lib', 'build/obj/index.js')
}));
70 changes: 70 additions & 0 deletions common/web/gesture-recognizer/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#!/usr/bin/env bash

## START STANDARD BUILD SCRIPT INCLUDE
# adjust relative paths as necessary
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
. "$(dirname "$THIS_SCRIPT")/../../../resources/build/build-utils.sh"
## END STANDARD BUILD SCRIPT INCLUDE

. "$KEYMAN_ROOT/resources/shellHelperFunctions.sh"

# This script runs from its own folder
cd "$(dirname "$THIS_SCRIPT")"

################################ Main script ################################

builder_describe "Builds the gesture-recognition model for Web-based on-screen keyboards" \
"@/common/web/es-bundling build" \
"@/common/web/utils build" \
"clean" \
"configure" \
"build" \
"test" \
":module" \
":tools tools for testing & developing test resources for this module" \
"--ci sets the --ci option for child scripts (i.e, the $(builder_term test) action)"

builder_describe_outputs \
configure /node_modules \
build:module /common/web/gesture-recognizer/build/lib/index.mjs \
build:tools /common/web/gesture-recognizer/build/tools/lib/index.mjs

builder_parse "$@"

# TODO: build if out-of-date if test is specified
# TODO: configure if npm has not been run, and build is specified

if builder_start_action configure; then
verify_npm_setup
builder_finish_action success configure
fi

if builder_start_action clean; then
rm -rf build/
builder_finish_action success clean
fi

if builder_start_action build:module; then
# Build
tsc --build $builder_verbose
node build-bundler.js
builder_finish_action success build:module
fi

if builder_start_action build:tools; then
src/tools/build.sh build
builder_finish_action success build:tools
fi

if builder_start_action test:module; then
if builder_has_option --ci; then
./test.sh --ci
else
./test.sh
fi
builder_finish_action success test:module
fi

if builder_has_action test:tools && ! builder_has_action test:module; then
echo "The $(builder_term test:tools) action is currently a no-op."
fi
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
67 changes: 67 additions & 0 deletions common/web/gesture-recognizer/docs/recognizer-configuration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# GestureRecognizer - DOM configuration design

The design for `GestureRecognizer`'s configuration object is based upon the needs and logic
of the on-screen keyboard (the "OSK") as implemented in Keyman Engine for Web 15.0.
Much of its related code is strewn about in various places there; one of the benefits of
developing this module has been to better document the behavior and produce an explicit
abstraction that can both centralize and clarify it.

While many doc-comments have been added to the configuration object's code, a bit more
overview may yet be merited here.

## On "safe zones" and "safe zone padding"

For modeling cancellation of an ongoing touchpoint or cursor-based input sequence, our design
considers it important to have coordinate boundaries that may actually be crossed. This is
notably complicated by certain use cases.

Consider implementation of an OSK that completely fills a WebView in a mobile application -
we actually use this in Keyman for Android and in Keyman for iPhone and iPad. Without any
defined "safe zone", it is impossible for a touchpoint within the WebView to actually leave
this OSK's boundaries. Should the user's finger attempt to leave those boundaries... it
leaves the viewport entirely - and quite possibly, the physical boundaries of the device's
touchscreen!

To facilitate this, we have implemented a "safe zone" of sorts, traditionally based on the
available viewport. Should a touchpoint cross the boundary of the safe zone - and thus,
become very close to a device boundary - that may then be used as criteria for a cancellation.
In reference to the [demo/host page](../../../../web/testing/gesture-recognizer/), this is
visualized as the outer, darker-colored set of dashed lines nested closely to the emulated
device borders.

However! What if the user _starts_ their input sequence very close to the safe zone?
Especially with touch-based input, there can be natural shifts in position of the input point
that may accidentally cross that boundary... and it is entirely possible to _start_ in an
"unsafe" area. To prevent this from auto-canceling user input in these scenarios, we have
also noted a need for "safe zone padding". In reference to the
[demo/host page](../../../../web/testing/gesture-recognizer/), this is
visualized as the inner, lighter-colored set of dashed lines.

![Reference image for the host page](./host-page-viz.png)

Any input sequence _starting_ within an "unsafe" area - between the lightly-colored dashed
lines and the emulated device border, may ignore the boundaries of the safe zone -
but only for borders on the same side(s) as the violated "padded safe zone" border.

To recap:
- The "safe zone" is designed to facilitate input-sequence cancellation at borders offset from
specific values - typically, from a web page's viewport.
- "Safe zone padding" is used to allow selective cancellation of specific safe zone borders for
sequences that start very close to them.

We have generalized the "safe zone" somewhat by allowing versions based on sources aside from
the available viewport. This is largely intended to facilitate interactive demos and testing
such as the page (and corresponding image) referenced above.

## On "roaming bounds"

At times, it is important to allow an ongoing coordinate-based input sequence to be permitted
extended boundaries before auto-canceling it. Consider the nature of a "flick" input on
keyboards. For keys in the top of the keyboard, it may be necessary to allow the touchpoint
to extend beyond the top of the main keyboard element before the flick can be properly
recognized. For longpresses, it is also possible for the subkey menu may be displayed beyond
this area - though the subkey menu's handling of the input sequence should probably be
handled in its own implementation of `GestureRecognizer`.

The option for "Roaming bounds" exists in order to address such conditions. This is visualized
in blue in the image seen earlier.
Loading