* chore: move logic for lastUsedByActivityType into ConstructIdentifier
* feat: vocab practice
* add vocab activity progress bar
* fix: shuffle audio practice choices
* update UI of vocab practice
Added buttons, increased text size and change position, cards flip over and turn red/green on click and respond to hover input
* add xp sparkle, shimmering choice card placeholder
* spacing changes
fix padding, make choice cards spacing/sizing responsive to screen size, replace shimmer cards with stationary circle indicator
* don't include duplicate lemma choices
* use constructID and show lemma/emoji on choice cards
add method to clear cache in case the results was an error, and add a retry button on error
* gain xp immediately and take out continue session
also refactor the choice cards to have separate widgets for each type and a parent widget to give each an id for xp sparkle
* add practice finished page with analytics
* Color tweaks on completed page and time card placeholder
* add timer
* give XP for bonuses and change timer to use stopwatch
* simplify card logic, lock practice when few vocab words
* merge analytics changes and fix bugs
* reload on language change
- derive XP data from new analytics
- Don't allow any clicks after correct answer selected
* small fixes, added tooltip, added copy to l10
* small tweaks and comments
* formatting and import sorting
---------
Co-authored-by: avashilling <165050625+avashilling@users.noreply.github.com>
* fix: add new analytics update type for initial data (from local and server), listen for init updates in analytics page to rebuild on language change
* fix: URL encode construct IDs during construct analytics navigation
* chore: add tooltip to level analytics page, update divider in construct analytics details page
* style activity role tooltip like instruction inline tooltips
* style updates to activity details
* don't show token underlines in practice mode
* show loading activity analytics
* use all construct types to calculate activity analytics, include audio messages in activity summary request
* update chat context menus for activities
* fix positioning on menu in main chat list
* refactor: move construct notifications to the top of the screen
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* chore: move toolbar buttons above reading assistance input bar
* chore: positioning on message relative to header and footer / positioning of tooltip between message and header
* chore: update inline tooltip color
* chore: animate reading assistance input bar height
* still in draft
* feat(reading_assistance): whole message activity oriented
* chore: fix .env file path
* feat: animate selected toolbar into middle of screen
* chore: initial work for message bubble size animation
* refactor(reading_assistance): hooking up the choice interactions and polishing UI
* chore: animate in content and buttons
* formatting
* position reading content relative to selected token
* working on limiting choices
* chore: fix positioning of toolbar animation
* chore: simplify positioning logic
* chore: animate in button height
* getting there
* rough draft with restricted activity number is complete
---------
Co-authored-by: ggurdin <ggurdin@gmail.com>
* started activity in chat creation
* starting vocab tile display
* refactor(vocab_analytics_list): made into little tiles that show the user chosen emoji
* chore: comment out unused file
* chore: remove unused variable
* chore: make eventID nullable for constructs so users can set emoji from vocab details popup
---------
Co-authored-by: ggurdin <ggurdin@gmail.com>
Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>
* dev: clean up isActivityBasicallyEligible and shouldDoActivity defs
* feat: bring back locking of tools and highlight words with meaning activities
* fix: exclude tokens that are not relevant for meaning activities from proportionOfActivitiesCompleted computation
* fix: show yellow if token meaning activity has been done but shouldDoActivity is true
---------
Co-authored-by: ggurdin <ggurdin@gmail.com>