* Refactor(tasks): Centralize daily task start date normalization
* fix datepicker server day shifts by zeroing time
---------
Co-authored-by: Hafiz <hafizbhamidi@gmail.com>
* apply email passed via body if it is missing from apple profile
* Add Web UI to set email if apple does not provide one
* fix lint
* remove trailing space
* fix(register): show field if social auth without email
* fix(ux): add explanatory text
* fix(lint): max-len
* fix(data): remove unused field
* fix(auth): pass email around as necessary in Apple flow
* fix(auth): still wrong place argh
* Fix(auth): handle email in Apple registration flow
---------
Co-authored-by: Phillip Thelen <phillip@habitica.com>
Co-authored-by: Hafiz <hafizbhamidi@gmail.com>
* added hasExactMatch function
* changed the handleSubmit logic to check for match
* changed the conditional in class for dropdown
* added hasExactMatch conditional to display the AddTag text
* one more conditional to check if string is empty
* changed styling to display hidden text of "Press Enter to add tag"
* lint error fixed
* fix(tags): don't allow same tag spam within add session
---------
Co-authored-by: Kalista Payne <kalista@habitica.com>
Co-authored-by: Kalista Payne <sabrecat@gmail.com>
* Add group plan selection modal for upgrades
Allow users to select an existing group to upgrade before creating a new one.
* crlf -> lf lint
* set selection of group plan
Also tiny UI fixes
* Update group plan selection to include expired plans
* Add includeExpiredPlans option to group fetching
* force flag when fetching group plans
* Update group plan eligibility check
* Fix eslint error in push notification import
* replace chaining (?.) w/null check
* Remove comment
* set initial selected group plan, and fix card rounding
* format member count
* Show warning for pending party invites when upgrading to paid group plan
Show warning for pending party invites when upgrading to paid group plan. If user upgrades from party to group, remove any pending invites
* suppress error toasts for group modal, and UI tweaks for group modal
suppress error toast for 404 on party fetch for users without a party (for group modal), Increase check SVG size in selectableCard, and show "Previously upgraded" label for parties that were canceled group plans
* Clear upgradingGroup state after group plan payment
* Update emoji system to native Unicode rendering
* Fix line endings in habiticaMarkdown test
* fix indented code block detection for markdown-it v14
* update habitica-markdown to include v3 emoji dataset (pointed towards test branch)
* size emoji in markdown
* emoji autocomplete to chat, messages, tasks, and profile
add :emoji shortcode autocomplete dropdown (reusing existing autocomplete mixin w/new helper)
* try upping github-action fix
* trying another github actions fix
* update habitica-markdown package version (v3.0.0 -> v4.0.0)
* Fix emoji autocomplete overlapping actual text
position dropdown below text
* update group-plans info card styles
* Support Melior emoji autocomplete & more places for emoji autocomplete
Include emoji autocomplete in task checklists, tags, challenge name/summary/description
* position emoji autocomplete dropdown below text area
* fix: replace nested ternary
* Emoji autocomplete fixes
Fix emoji autocomplete overlapping checklist text, and add short name emoji autocomplete
* Have emoji autocomplete dropdown directly below text, add to task tag
* Fix emoji autocomplete starting at beginning/end initially
* lint/line length
* Add group plan selection modal for upgrades
Allow users to select an existing group to upgrade before creating a new one.
* crlf -> lf lint
* set selection of group plan
Also tiny UI fixes
* Update group plan selection to include expired plans
* Add includeExpiredPlans option to group fetching
* force flag when fetching group plans
* Update group plan eligibility check
* Fix eslint error in push notification import
* replace chaining (?.) w/null check
* Remove comment
* set initial selected group plan, and fix card rounding
* format member count
* Show warning for pending party invites when upgrading to paid group plan
Show warning for pending party invites when upgrading to paid group plan. If user upgrades from party to group, remove any pending invites
* suppress error toasts for group modal, and UI tweaks for group modal
suppress error toast for 404 on party fetch for users without a party (for group modal), Increase check SVG size in selectableCard, and show "Previously upgraded" label for parties that were canceled group plans
* Clear upgradingGroup state after group plan payment
* Update emoji system to native Unicode rendering
* Fix line endings in habiticaMarkdown test
* fix indented code block detection for markdown-it v14
* update habitica-markdown to include v3 emoji dataset (pointed towards test branch)
* size emoji in markdown
* emoji autocomplete to chat, messages, tasks, and profile
add :emoji shortcode autocomplete dropdown (reusing existing autocomplete mixin w/new helper)
* try upping github-action fix
* trying another github actions fix
* update habitica-markdown package version (v3.0.0 -> v4.0.0)
* Fix emoji autocomplete overlapping actual text
position dropdown below text
* update group-plans info card styles
* Support Melior emoji autocomplete & more places for emoji autocomplete
Include emoji autocomplete in task checklists, tags, challenge name/summary/description
* position emoji autocomplete dropdown below text area
* fix: replace nested ternary
* Emoji autocomplete fixes
Fix emoji autocomplete overlapping checklist text, and add short name emoji autocomplete
* Have emoji autocomplete dropdown directly below text, add to task tag
* Fix emoji autocomplete starting at beginning/end initially
* lint/line length
* Revert "trying another github actions fix"
This reverts commit 72fc7fc20e.
* Revert "try upping github-action fix"
This reverts commit 70e48a57aa.
* fix(git): revert ci changes
---------
Co-authored-by: Kalista Payne <kalista@habitica.com>
* Add group plan selection modal for upgrades
Allow users to select an existing group to upgrade before creating a new one.
* crlf -> lf lint
* set selection of group plan
Also tiny UI fixes
* Update group plan selection to include expired plans
* Add includeExpiredPlans option to group fetching
* force flag when fetching group plans
* Update group plan eligibility check
* Fix eslint error in push notification import
* replace chaining (?.) w/null check
* Remove comment
* set initial selected group plan, and fix card rounding
* format member count
* Show warning for pending party invites when upgrading to paid group plan
Show warning for pending party invites when upgrading to paid group plan. If user upgrades from party to group, remove any pending invites
* suppress error toasts for group modal, and UI tweaks for group modal
suppress error toast for 404 on party fetch for users without a party (for group modal), Increase check SVG size in selectableCard, and show "Previously upgraded" label for parties that were canceled group plans
* Clear upgradingGroup state after group plan payment
* fix most customizations not being pinnable
* set correct pinTypes
* fix(pinning): correct purchase types for base hair and mustaches
* automatically unpin purchased customizations
* ability to pin customization items
* Fix pin not showing on buy modal
* Pin on buy modal tweak
---------
Co-authored-by: Kalista Payne <kalista@habitica.com>
Co-authored-by: Hafiz <hafizbhamidi@gmail.com>
* fix(content): textual tweaks and updates
* fix(link): direct to FAQ instead of wiki
* fix(faq): correct Markdown
* Show orb of rebirth confirmation modal after use (window refresh)
* Set and check rebirth confirmation modal from localstorage
Set and check rebirth confirmation modal from localstorage after window reload
* Don't show orb of rebirth confirmation modal until page reloads
* message effective limit optimization
* Keep max limit for web (400 recent messages)
* Fix amount of messages initially being shown
* PM_PER_PAGE set to 50
* Increases number of messages in inbox test
* Increases number of messages for inbox pagination test
* Set and check rebirth confirmation modal from localstorage
Set and check rebirth confirmation modal from localstorage after window reload
* Don't show orb of rebirth confirmation modal until page reloads
* message effective limit optimization
* Keep max limit for web (400 recent messages)
* Add UUID validation for 'before' query parameter
* add party message stress test tool in admin panel
* lint
* add MAX_PM_COUNT of 400, admin tool for stress testing messages
* comment
* update stress test inbox message tool to use logged in user
* comment
---------
Co-authored-by: Kalista Payne <kalista@habitica.com>
* fix(responsive): adjustments for small screens by @Hafizzle
* Fixed cut off modal issues
- Fixed limited time banner being cut off on smaller devices
- Fixed Pin on purchase quest modal being cut off
* Update order of views on Stats tab
* Update styling of stat boxes & add stat allocation info
* Live stat allocation & auto allocation implemented
- Update stat allocation UI/UX cont.
- Update stats live (versus pressing save)
- Dynamically show the distribute dropdown based on if auto allocate switch is enabled
* Remove duplicate string value, convert line endings
* Fix auto allocation toggle alignment
* lint fixes
* Auto allocate UI fixes
- remove info icon in each dropdown option, and replace info below each option
- disable auto allocate dropdown instead of hiding it
- removed radio buttons drop auto allocate options dropdown
- Points available & auto allocate text share same baseline now
* Stat allocation updates
* Assigned Stat
* lint fixes
* stat feedback UI updates
* tweak
* stat allocation UI tweaks
refactor allocation mode selection with selectList component & other UI tweaks
* Fix hover dropdown padding & stat allocation chip always showing
* Update stat allocation dropdown styling
* Remove bold text on hover
* Stat allocation by task dropdown
* remove empty lines
* show selected attribute on component itself
* task stat selection UI updates
* fix(cr): remove weird line endings
---------
Co-authored-by: Kalista Payne <kalista@habitica.com>
* Set and check rebirth confirmation modal from localstorage
Set and check rebirth confirmation modal from localstorage after window reload
* Don't show orb of rebirth confirmation modal until page reloads
* Confirmation prompts (replace browser confirmation prompts)
* lint
* lint
* Fix confirmation modal not showing for items w/gems
* Updated delete and confirmation modals
* lint
* Fix top bar on color on confirmation prompt clipping
* Show currency amount on purchase confirmation modals
* confirmation modals using existing components
* lint
* Broken task confirmation modal
* Replace class change confirmation with modal
* fix(style): correct indentation
* Replace warning svg w/ existing alert svg, and reset language strings
* fix(json): json doesn't like comma dangles
---------
Co-authored-by: Kalista Payne <kalista@habitica.com>
Co-authored-by: Kalista Payne <sabrecat@gmail.com>
* fix(content): textual tweaks and updates
* fix(link): direct to FAQ instead of wiki
* fix(faq): correct Markdown
* Show orb of rebirth confirmation modal after use (window refresh)
* Set and check rebirth confirmation modal from localstorage
Set and check rebirth confirmation modal from localstorage after window reload
* Don't show orb of rebirth confirmation modal until page reloads
* message effective limit optimization
* Keep max limit for web (400 recent messages)
* Fix amount of messages initially being shown
* PM_PER_PAGE set to 50
* Increases number of messages in inbox test
* Increases number of messages for inbox pagination test
* Set and check rebirth confirmation modal from localstorage
Set and check rebirth confirmation modal from localstorage after window reload
* Don't show orb of rebirth confirmation modal until page reloads
* message effective limit optimization
* Keep max limit for web (400 recent messages)
* Add UUID validation for 'before' query parameter
* add party message stress test tool in admin panel
* lint
* add MAX_PM_COUNT of 400, admin tool for stress testing messages
* comment
* update stress test inbox message tool to use logged in user
* comment
---------
Co-authored-by: Kalista Payne <kalista@habitica.com>
* fix(content): textual tweaks and updates
* fix(link): direct to FAQ instead of wiki
* fix(faq): correct Markdown
* Show orb of rebirth confirmation modal after use (window refresh)
* Set and check rebirth confirmation modal from localstorage
Set and check rebirth confirmation modal from localstorage after window reload
* Don't show orb of rebirth confirmation modal until page reloads
---------
Co-authored-by: Kalista Payne <kalista@habitica.com>
* fix(responsive): adjustments for small screens by @Hafizzle
* Fixed cut off modal issues
- Fixed limited time banner being cut off on smaller devices
- Fixed Pin on purchase quest modal being cut off
---------
Co-authored-by: Hafiz <hafizbhamidi@gmail.com>
* add new frontend files
* Add UI for managing blockers
* correctly reset local data after creating blocker
* Tweak wording
* Add UI for managing blockers
* restructure admin pages
* add blocker to block emails from registration
* lint fixes
* Await genericPurchase completion before page reload to prevent request cancellation.
Also adds defensive check for undefined error.response in axios interceptor to prevent "t.response undefined" errors.
* Fix shop tabs overflow off screen at certain zoom levels
Fix quest cards get cut off on small screens
Fix pop-up windows extend past screen edges on mobile
* Update ToS error message
- Updated account suspension message from "This account, User ID..." to "Your account @[username] has been
blocked..."
- Modified server auth middleware to pass username parameter when throwing account suspended error
-Modified auth utils loginRes function to include username in suspended account error
- Updated client bannedAccountModal component to pass username (empty string if unavailable)
- Updated login test to expect username in account suspended message
* lint fix
* Responsive Layout for Equipment Containers
- Added responsive CSS for mobile (<768px) and tablet (769px-1024px)
- Implemented flex-wrap layout that automatically stacks items in rows of 4 on smaller
* remove redundant disabled styles in task modals
The .disabled class conflicting with existing disabled state implementations
* Revert "Merge branch 'fiz/item-container-scaling' into qa/bat"
This reverts commit 4f28bfaad4dbeade66e507fd10904c133b206bda, reversing
changes made to 477dd6328acc6a63f5e7f1e98f2dd581665f1898.
* fix(blockers): duplicated code from rebase
* fix(admin): revert accidental change from rebase
* move !error.response to correct level
!error.response before any attempt to access error.response.status
* chore(github): split responsiveness to #15514
* Group string updates & removals
Removed the "Couple sharing tasks" and "Coworkers sharing tasks" strings:
- Removed from all language locale files
- Removed from both Vue components that used them in dropdowns:
- groupPlanCreationModal.vue
- successModal.vue
* Remove some Group strings
Remove the "groupParentChildren", "groupFriends", "groupManager", and "groupTeacher" strings from all languages (except default)
---------
Co-authored-by: Phillip Thelen <phillip@habitica.com>
Co-authored-by: Kalista Payne <kalista@habitica.com>
* Load all participants when end challenge modal is opened.
* Fetch members in batches until members are loaded
* Fix challenge winner search to load all participants
Separated loading flags to prevent conflicts between modals
* Rename end challenge members flag to be more clear
* await load members
* Implement challenge member search only when searching w/debounce
* add new frontend files
* Add UI for managing blockers
* correctly reset local data after creating blocker
* Tweak wording
* Add UI for managing blockers
* restructure admin pages
* add blocker to block emails from registration
* lint fixes
* Await genericPurchase completion before page reload to prevent request cancellation.
Also adds defensive check for undefined error.response in axios interceptor to prevent "t.response undefined" errors.
* Fix shop tabs overflow off screen at certain zoom levels
Fix quest cards get cut off on small screens
Fix pop-up windows extend past screen edges on mobile
* Update ToS error message
- Updated account suspension message from "This account, User ID..." to "Your account @[username] has been
blocked..."
- Modified server auth middleware to pass username parameter when throwing account suspended error
-Modified auth utils loginRes function to include username in suspended account error
- Updated client bannedAccountModal component to pass username (empty string if unavailable)
- Updated login test to expect username in account suspended message
* lint fix
* Responsive Layout for Equipment Containers
- Added responsive CSS for mobile (<768px) and tablet (769px-1024px)
- Implemented flex-wrap layout that automatically stacks items in rows of 4 on smaller
* remove redundant disabled styles in task modals
The .disabled class conflicting with existing disabled state implementations
* Revert "Merge branch 'fiz/item-container-scaling' into qa/bat"
This reverts commit 4f28bfaad4dbeade66e507fd10904c133b206bda, reversing
changes made to 477dd6328acc6a63f5e7f1e98f2dd581665f1898.
* fix(blockers): duplicated code from rebase
* fix(admin): revert accidental change from rebase
* move !error.response to correct level
!error.response before any attempt to access error.response.status
* chore(github): split responsiveness to #15514
---------
Co-authored-by: Phillip Thelen <phillip@habitica.com>
Co-authored-by: Kalista Payne <kalista@habitica.com>
* Fix profile modal tab navigation URLs for both own and other users profiles
- Add routes for /user/profile, /user/stats, and /user/achievements
- Update selectPage() to properly update URLs when switching tabs
- Own profile uses /user/{tab} format
- Other users' profiles use /profile/{userId}#{tab} format
- Parse hash fragments when navigating to other users' profile tabs
- Ensure direct navigation to tab URLs opens correct tab
* Fix undefined userId
* Server now matches usernames case insensitively like client
- Preserves original capitalization in mention text
- Fixes profile links not working with wrong case mentions
* lint fixes
* g1g1 width auto sizing w/padding
* Challenge participants spacing & text sizing fix
* Fix inconsistent profile URL format between own and other users' profiles
- Update profile tab navigation to use consistent URL format for all users
- Redirect old /user/* routes to new format for backward compatibility
- Update all navigation points (dropdown menu, notifications) to use new URLs
* Update End Challenge modal
- Replace dropdown with searchable input (384x32px) for winner selection
- Add visual badge state with gems icons for challenge completion
- Update Delete Challenge flow with refund info and proper styling
- Add close button (X) with opacity hover effect
- Enhance Award Winner button with gem icon and dynamic prize display
- Apply conditional styling based on winner selection state
- Update text colors: Maroon/50 for delete warning, Gray/100 for "OR" text
- Add proper translations for gem/gems and refund description
* lint error fixes
* end challenge modal fixes
* lint fix
* Use existing closeX component, minor UI fixes to close challenge modal
* fix lint
* Delete icon color to match text on close challenge modal
use color field to set delete icon color
* Highlight username on close challenge modal color updates
- Background color on hover: purple-600
- Text color on hover: purple-300
- Changed transition from just background-color to all so both color changes animate smoothly
* Fix strings
* Refactor g1g1 notifications from database-driven to event-based system
Changed g1g1 (gift one get one) notifications to display automatically during event periods instead of requiring database storage. Notifications now appear based on event calendar dates and use sessionStorage for dismissal state.
- Display g1g1 notification when event is active in worldState
- Store dismissal state in sessionStorage with event-specific keys
- Remove dependency on user.notifications database array
- Maintain identical user experience and appearance
* Update prize card to match participants card on challenges
* End Challenge modal UI tweaks
* Prevent false mention highlights
Prevent false mention highlights when a user's display name matches another user's username. The purple mention indicator now only appears for actual @username mentions.
* lint fixes
* Remove mention highlight
* Mention highlighting to only highlight w/username mentions
* Update G1G1 Notification
- Updated text styling for title & description
- Updated button styling
- Updated close button
* lint fix
* Add updated G1G1 notification SVGs
* Don't highlight display name w/mention
* g1g1 UI updates
- Fix sizing of gift SVGs (96px tall)
- Update button to use button element and styles <button class="btn btn-secondary mx-auto">
- Fixed positioning, color, and hover state of close icon (default white 50% opacity, hover 75% opacity)
* Fix g1g1 close icon hover state
Fix hover state of close icon (default white 50% opacity, hover 75% opacity)
* g1g1 close hover state fix
* End challenge UI updates
- Fix modal title positioning
- Fix close icon positioning
- Fix spacing between title and gem graphic
- Fix spacing between label and input field
- Fix search icon position, change input hint to "@Username"
- Set search results text align start/left with 16px starting padding.
- Fix Award Button state
* remove trailing space
* Fix exit hover state on g1g1
* fix g1g1 close icon (directly render close icon)
* new line
* Update z-index of g1g1 close button
* add display name support for mention highlighting
mention highlights now trigger for both username and display name mentions.
* Override default close button color (gray -> white)
(Also revert the renderWithMentions change)
* Fix mention display name test (& fix lint)
* Revert display name mention, strictly only username
Mentions work w/username only (works w/case insensitive as well)
* Improved case-insensitive username matching
* add close-white.svg, replace close.svg on g1g1
* find mentions that match the current user's username (case-insensitive)
* fix lint errors
* end challenge modal UI updates
* Don't change gem color on update
* disabled state button match button.scss syling
* remove padding from g1g1 close
* Directly use button.scss on end challenge modal
* Update disabled state for button.scss
* explicitly set close challenge modal button disabled/enabled state
* fix trailing space
* Add font details (and fix text color) for button disabled state
* Update award winner button min-height & padding
* button.scss button disabled styling updates
* Remove redundant disabled override on award winner button
* lint
* Use single gifts svg, and apply transform to flip horizontally
Remove unneeded gifts_end.svg
* Replaced the hardcoded #1A1B1D color with the $black from colors.scss
* Removed the 0.5em padding w/p-2
* added v-once to the refund text element
* Converted the line-height values from pixel values to multipliers