🫡2
telegramdesktop/tdesktop/dev • 20542a1 • 3 files, +20/-14
Added logs of source path when an unknown deleted message is re-added.
Related commit: 384f6d9a31.
telegramdesktop/tdesktop/dev • 0cf37dd • 4 files, +28/-1
Replaced gift button with call button for channel owner in info top bar.
telegramdesktop/tdesktop/dev • 550f623 • 1 files, +10/-1
Slightly improved trackpad scroll handling in profile flexible top bar.
telegramdesktop/tdesktop/dev • 16d9706 • 5 files, +111/-0
Added playback wave animation around voice message play button.
telegramdesktop/tdesktop/dev • 92e9644 • 1 files, +1/-2
Allowed swipe-to-reply gesture in channels.
telegramdesktop/tdesktop/dev • 9a38ab7 • 2 files, +4/-1
Fixed invisible small group call videos.
telegramdesktop/tdesktop/dev • c56fd45 • 1 files, +2/-2
Fixed repaint region for third column section animation.
telegramdesktop/tdesktop/dev • 969e84f • 1 files, +1/-0
Fixed clipped overlay buttons in group call QRhi viewport.
telegramdesktop/tdesktop/dev • 407d2cf • 4 files, +10/-0
Fixed new account intro opening in wrong window.
telegramdesktop/tdesktop/dev • df64efd • 6 files, +37/-9
Fixed back from new account intro focusing wrong window.
telegramdesktop/tdesktop/dev • 5d52a28 • 6 files, +66/-2
Added experimental option to keep unmuted unread dialogs on top.
telegramdesktop/tdesktop/dev • a74ee60 • 8 files, +297/-0
Added initial support of swipe-next-channel.
telegramdesktop/tdesktop/dev • 49396c4 • 4 files, +565/-12
Added growing-capsule swipe-next-channel pull indicator with userpic.
#tdesktop
Added logs of source path when an unknown deleted message is re-added.
Related commit: 384f6d9a31.
telegramdesktop/tdesktop/dev • 0cf37dd • 4 files, +28/-1
Replaced gift button with call button for channel owner in info top bar.
telegramdesktop/tdesktop/dev • 550f623 • 1 files, +10/-1
Slightly improved trackpad scroll handling in profile flexible top bar.
telegramdesktop/tdesktop/dev • 16d9706 • 5 files, +111/-0
Added playback wave animation around voice message play button.
telegramdesktop/tdesktop/dev • 92e9644 • 1 files, +1/-2
Allowed swipe-to-reply gesture in channels.
telegramdesktop/tdesktop/dev • 9a38ab7 • 2 files, +4/-1
Fixed invisible small group call videos.
telegramdesktop/tdesktop/dev • c56fd45 • 1 files, +2/-2
Fixed repaint region for third column section animation.
telegramdesktop/tdesktop/dev • 969e84f • 1 files, +1/-0
Fixed clipped overlay buttons in group call QRhi viewport.
telegramdesktop/tdesktop/dev • 407d2cf • 4 files, +10/-0
Fixed new account intro opening in wrong window.
telegramdesktop/tdesktop/dev • df64efd • 6 files, +37/-9
Fixed back from new account intro focusing wrong window.
telegramdesktop/tdesktop/dev • 5d52a28 • 6 files, +66/-2
Added experimental option to keep unmuted unread dialogs on top.
telegramdesktop/tdesktop/dev • a74ee60 • 8 files, +297/-0
Added initial support of swipe-next-channel.
telegramdesktop/tdesktop/dev • 49396c4 • 4 files, +565/-12
Added growing-capsule swipe-next-channel pull indicator with userpic.
#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 7549185 • 7 files, +111/-14
Added bottom-up section slide for swipe-next-channel jump.
telegramdesktop/tdesktop/dev • 1b88612 • 2 files, +22/-10
Fixed stale truncated history view top bar title on peer name change.
telegramdesktop/tdesktop/dev • 792cc5c • 1 files, +18/-4
Fixed text recognition overlay rotation in QRhi media viewer.
telegramdesktop/tdesktop/dev • 2da46cb • 2 files, +52/-16
Added text recognition for image documents in media viewer.
telegramdesktop/tdesktop/dev • b9d6b07 • 9 files, +628/-17
Added recognized text selection and copying in overlay media viewer.
telegramdesktop/tdesktop/dev • 05cb1e4 • 3 files, +41/-4
Added blockquote and code block rendering to media viewer captions.
telegramdesktop/tdesktop/dev • d0dba2e • 7 files, +119/-23
Added text transfer between message field and gif caption box.
telegramdesktop/tdesktop/dev • d10e9ce • 8 files, +271/-17
Added alphabetical section headers to contacts list sorted by name.
telegramdesktop/tdesktop/dev • 076de2d • 6 files, +498/-0
Added alphabetical fast-scroll index strip to contacts box.
telegramdesktop/tdesktop/dev • b8e82e3 • 1 files, +8/-5
Fixed opening sections from the settings search results.
telegramdesktop/tdesktop/dev • 165d20a • 5 files, +106/-15
Added support of deep link copying to settings search results.
telegramdesktop/tdesktop/dev • c40446b • 2 files, +13/-4
[thanos] Fixed lost auto-scroll to bottom during animation.
telegramdesktop/tdesktop/dev • 0ef307f • 2 files, +29/-17
Added right-button clicks support to pinned bar.
#tdesktop
Added bottom-up section slide for swipe-next-channel jump.
telegramdesktop/tdesktop/dev • 1b88612 • 2 files, +22/-10
Fixed stale truncated history view top bar title on peer name change.
telegramdesktop/tdesktop/dev • 792cc5c • 1 files, +18/-4
Fixed text recognition overlay rotation in QRhi media viewer.
telegramdesktop/tdesktop/dev • 2da46cb • 2 files, +52/-16
Added text recognition for image documents in media viewer.
telegramdesktop/tdesktop/dev • b9d6b07 • 9 files, +628/-17
Added recognized text selection and copying in overlay media viewer.
telegramdesktop/tdesktop/dev • 05cb1e4 • 3 files, +41/-4
Added blockquote and code block rendering to media viewer captions.
telegramdesktop/tdesktop/dev • d0dba2e • 7 files, +119/-23
Added text transfer between message field and gif caption box.
telegramdesktop/tdesktop/dev • d10e9ce • 8 files, +271/-17
Added alphabetical section headers to contacts list sorted by name.
telegramdesktop/tdesktop/dev • 076de2d • 6 files, +498/-0
Added alphabetical fast-scroll index strip to contacts box.
telegramdesktop/tdesktop/dev • b8e82e3 • 1 files, +8/-5
Fixed opening sections from the settings search results.
telegramdesktop/tdesktop/dev • 165d20a • 5 files, +106/-15
Added support of deep link copying to settings search results.
telegramdesktop/tdesktop/dev • c40446b • 2 files, +13/-4
[thanos] Fixed lost auto-scroll to bottom during animation.
telegramdesktop/tdesktop/dev • 0ef307f • 2 files, +29/-17
Added right-button clicks support to pinned bar.
#tdesktop
🫡4👍1
telegramdesktop/tdesktop/dev • 1ab8597 • 6 files, +106/-0
Added reverse iteration over pinned messages on right click.
telegramdesktop/tdesktop/dev • a1f3ee5 • 15 files, +193/-5
Added tooltip above link for hidden forwarded sender.
telegramdesktop/tdesktop/dev • e0504dd • 7 files, +763/-1121
[ai] Attempt to automate testing changes.
telegramdesktop/tdesktop/dev • 9ca694f • 1 files, +51/-51
Rename currency-balance and post-suggestion strings to Grams.
telegramdesktop/tdesktop/dev • 4089646 • 6 files, +41/-32
Refresh and unify the TON diamond vector icons.
telegramdesktop/tdesktop/dev • c9ed5ef • 1 files, +1/-1
Update lib_base.
telegramdesktop/tdesktop/dev • ee39aa3 • 4 files, +4/-23
Switch to Qt's queued invoker
#tdesktop
Added reverse iteration over pinned messages on right click.
telegramdesktop/tdesktop/dev • a1f3ee5 • 15 files, +193/-5
Added tooltip above link for hidden forwarded sender.
telegramdesktop/tdesktop/dev • e0504dd • 7 files, +763/-1121
[ai] Attempt to automate testing changes.
telegramdesktop/tdesktop/dev • 9ca694f • 1 files, +51/-51
Rename currency-balance and post-suggestion strings to Grams.
telegramdesktop/tdesktop/dev • 4089646 • 6 files, +41/-32
Refresh and unify the TON diamond vector icons.
telegramdesktop/tdesktop/dev • c9ed5ef • 1 files, +1/-1
Update lib_base.
telegramdesktop/tdesktop/dev • ee39aa3 • 4 files, +4/-23
Switch to Qt's queued invoker
#tdesktop
🫡4
telegramdesktop/tdesktop/dev • 156c8e7 • 4 files, +21/-11
Use new base::option::changes in a few old options
telegramdesktop/tdesktop/dev • 1520a81 • 7 files, +7/-7
Bump actions/checkout from 6 to 7
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: '7'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
#tdesktop
Use new base::option::changes in a few old options
telegramdesktop/tdesktop/dev • 1520a81 • 7 files, +7/-7
Bump actions/checkout from 6 to 7
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-version: '7'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com>
#tdesktop
🫡3💅1
telegramdesktop/tdesktop/dev • 1d17852 • 1 files, +1/-1
Return hinting for math formula fonts.
telegramdesktop/tdesktop/dev • c8ef31a • 4 files, +18/-26
Fix rich pages in scheduled / shorcuts sending.
telegramdesktop/tdesktop/dev • 54a7fd0 • 9 files, +101/-24
Use correct table entities limits.
telegramdesktop/tdesktop/dev • b01d375 • 1 files, +1/-1
Add some more math formula guardrails.
telegramdesktop/tdesktop/dev • fa9b926 • 5 files, +44/-48
Make InputField menu extension with hooks.
telegramdesktop/tdesktop/dev • 8997785 • 5 files, +81/-31
Enable jump-to-date in forum search.
telegramdesktop/tdesktop/dev • 2e54c33 • 1 files, +0/-2
Fix build with MSVC.
#tdesktop
Return hinting for math formula fonts.
telegramdesktop/tdesktop/dev • c8ef31a • 4 files, +18/-26
Fix rich pages in scheduled / shorcuts sending.
telegramdesktop/tdesktop/dev • 54a7fd0 • 9 files, +101/-24
Use correct table entities limits.
telegramdesktop/tdesktop/dev • b01d375 • 1 files, +1/-1
Add some more math formula guardrails.
telegramdesktop/tdesktop/dev • fa9b926 • 5 files, +44/-48
Make InputField menu extension with hooks.
telegramdesktop/tdesktop/dev • 8997785 • 5 files, +81/-31
Enable jump-to-date in forum search.
telegramdesktop/tdesktop/dev • 2e54c33 • 1 files, +0/-2
Fix build with MSVC.
#tdesktop
🫡3
Ajaxy/telegram-tt/master • f45c51b • 3 files, +4/-4
12.0.30
Ajaxy/telegram-tt/master • cf4b734 • 1 files, +2/-2
Chat Extra: Fix unofficial security risk block (#6977)
Ajaxy/telegram-tt/master • 0f2a87c • 1 files, +5/-2
Poll: Disable sending quiz with 1 option (#6980)
Ajaxy/telegram-tt/master • 7ddb46e • 3 files, +20/-1
Bot Forum: Change botoforum info button string (#6979)
Ajaxy/telegram-tt/master • 33ef4fb • 1 files, +14/-2
Chat List: Fix messege appearance after chat deletion (#6978)
Ajaxy/telegram-tt/master • 98e7644 • 115 files, +1925/-5812
Migrate to Vite (#6973)
Ajaxy/telegram-tt/master • 6aa405f • 6 files, +1654/-156
[CI] Bundle Stats: Add Vite PR reporting (#6976)
Ajaxy/telegram-tt/master • f50eefa • 7 files, +4305/-6728
Tests: Migrate Jest suite to Vitest (#6981)
Ajaxy/telegram-tt/master • bac8e43 • 2 files, +73/-58
PR Stats: Change format (#6983)
Ajaxy/telegram-tt/master • af5008b • 26 files, +544/-64
Reaction: Support reaction deletion (#6982)
Ajaxy/telegram-tt/master • 754be91 • 4 files, +90/-23
Vite: Show workers in stats (#7010)
Ajaxy/telegram-tt/master • 194f199 • 60 files, +836/-745
Remove Buffer dependency (#7009)
Ajaxy/telegram-tt/master • 49f82ed • 1 files, +1/-0
Sync: Fix outdated global error (#7014)
Ajaxy/telegram-tt/master • 38e4b77 • 5 files, +15/-29
Safari: Fix several problems (#7015)
Ajaxy/telegram-tt/master • 9f01ca8 • 11 files, +210/-195
GifButton: Move to SCSS Modules (#7013)
#webz
12.0.30
Ajaxy/telegram-tt/master • cf4b734 • 1 files, +2/-2
Chat Extra: Fix unofficial security risk block (#6977)
Ajaxy/telegram-tt/master • 0f2a87c • 1 files, +5/-2
Poll: Disable sending quiz with 1 option (#6980)
Ajaxy/telegram-tt/master • 7ddb46e • 3 files, +20/-1
Bot Forum: Change botoforum info button string (#6979)
Ajaxy/telegram-tt/master • 33ef4fb • 1 files, +14/-2
Chat List: Fix messege appearance after chat deletion (#6978)
Ajaxy/telegram-tt/master • 98e7644 • 115 files, +1925/-5812
Migrate to Vite (#6973)
Ajaxy/telegram-tt/master • 6aa405f • 6 files, +1654/-156
[CI] Bundle Stats: Add Vite PR reporting (#6976)
Ajaxy/telegram-tt/master • f50eefa • 7 files, +4305/-6728
Tests: Migrate Jest suite to Vitest (#6981)
Ajaxy/telegram-tt/master • bac8e43 • 2 files, +73/-58
PR Stats: Change format (#6983)
Ajaxy/telegram-tt/master • af5008b • 26 files, +544/-64
Reaction: Support reaction deletion (#6982)
Ajaxy/telegram-tt/master • 754be91 • 4 files, +90/-23
Vite: Show workers in stats (#7010)
Ajaxy/telegram-tt/master • 194f199 • 60 files, +836/-745
Remove Buffer dependency (#7009)
Ajaxy/telegram-tt/master • 49f82ed • 1 files, +1/-0
Sync: Fix outdated global error (#7014)
Ajaxy/telegram-tt/master • 38e4b77 • 5 files, +15/-29
Safari: Fix several problems (#7015)
Ajaxy/telegram-tt/master • 9f01ca8 • 11 files, +210/-195
GifButton: Move to SCSS Modules (#7013)
#webz
🫡2
Ajaxy/telegram-tt/master • 48bf95b • 1 files, +30/-15
Forum: Load topics when listed ids are missing (#7016)
Ajaxy/telegram-tt/master • bee4c3a • 1 files, +2/-2
Left Main: Fix chat list with tabs layout (#7017)
Ajaxy/telegram-tt/master • 34474e7 • 6 files, +54/-8
Profile: Implement round corners in profile media (#7019)
Ajaxy/telegram-tt/master • f23a4ba • 3 files, +594/-597
Agents: Move CLAUDE.md to AGENTS.md (#7012)
Ajaxy/telegram-tt/master • d419be9 • 11 files, +31/-43
Sticker: Fix blinking on send (#7011)
Ajaxy/telegram-tt/master • 0b47bec • 2 files, +2/-2
Audio: Fix audio message transcribing button color (#7021)
Ajaxy/telegram-tt/master • b52deb1 • 3 files, +169/-12
Checklists: Fix emoji display for checklists in chat list (#7018)
Ajaxy/telegram-tt/master • 173280d • 4 files, +14/-6
Summary: Prevent hiding on error (#7023)
Ajaxy/telegram-tt/master • 764aaa4 • 2 files, +0/-508
Remove unused dependencies (#7024)
Ajaxy/telegram-tt/master • ccd4bdc • 11 files, +0/-88
Remove unused functions (#7025)
Ajaxy/telegram-tt/master • 9c285e7 • 41 files, +156/-4438
Statistics: Upgrade to lovely-chart v2 npm package (#7027)
Ajaxy/telegram-tt/master • 54185fd • 7 files, +168/-139
Statistics: Restore lazy lovely-chart loading (#7028)
Ajaxy/telegram-tt/master • 954f0f1 • 121 files, +7622/-759
Support Rich Messages & Instant View (#6963)
Ajaxy/telegram-tt/master • 0df85b8 • 4 files, +14/-13
Lang: Updates from platform (#7030)
#webz
Forum: Load topics when listed ids are missing (#7016)
Ajaxy/telegram-tt/master • bee4c3a • 1 files, +2/-2
Left Main: Fix chat list with tabs layout (#7017)
Ajaxy/telegram-tt/master • 34474e7 • 6 files, +54/-8
Profile: Implement round corners in profile media (#7019)
Ajaxy/telegram-tt/master • f23a4ba • 3 files, +594/-597
Agents: Move CLAUDE.md to AGENTS.md (#7012)
Ajaxy/telegram-tt/master • d419be9 • 11 files, +31/-43
Sticker: Fix blinking on send (#7011)
Ajaxy/telegram-tt/master • 0b47bec • 2 files, +2/-2
Audio: Fix audio message transcribing button color (#7021)
Ajaxy/telegram-tt/master • b52deb1 • 3 files, +169/-12
Checklists: Fix emoji display for checklists in chat list (#7018)
Ajaxy/telegram-tt/master • 173280d • 4 files, +14/-6
Summary: Prevent hiding on error (#7023)
Ajaxy/telegram-tt/master • 764aaa4 • 2 files, +0/-508
Remove unused dependencies (#7024)
Ajaxy/telegram-tt/master • ccd4bdc • 11 files, +0/-88
Remove unused functions (#7025)
Ajaxy/telegram-tt/master • 9c285e7 • 41 files, +156/-4438
Statistics: Upgrade to lovely-chart v2 npm package (#7027)
Ajaxy/telegram-tt/master • 54185fd • 7 files, +168/-139
Statistics: Restore lazy lovely-chart loading (#7028)
Ajaxy/telegram-tt/master • 954f0f1 • 121 files, +7622/-759
Support Rich Messages & Instant View (#6963)
Ajaxy/telegram-tt/master • 0df85b8 • 4 files, +14/-13
Lang: Updates from platform (#7030)
#webz
🫡2
Ajaxy/telegram-tt/master • 68478f6 • 45 files, +615/-401
Redesign: Redesign Left panel and Middle header (#6971)
Co-authored-by: Alexander Zinchuk <alx.zinchuk@gmail.com>
Ajaxy/telegram-tt/master • e1f2988 • 1 files, +1/-1
Add .kml / .kmz as potentially IP-revealing. (#7031)
Ajaxy/telegram-tt/master • 73ff150 • 10 files, +76/-63
Rich Messages: Small fixes (#7032)
Ajaxy/telegram-tt/master • 1fafd66 • 1 files, +2/-2
Reactor List Modal: Fix button hover (#7034)
Ajaxy/telegram-tt/master • 1ead092 • 1 files, +2/-1
Topic: Fix error on min constructor (#7022)
Ajaxy/telegram-tt/master • ee72f71 • 10 files, +47/-33
Media Viewer: Fix ghost animation clipping (#7037)
Ajaxy/telegram-tt/master • 4cd5e76 • 8 files, +368/-6
Profile: Show long titles in line (#7020)
Ajaxy/telegram-tt/master • 3d85e97 • 12 files, +96/-99
Middle Column: Support mask gradient (#7036)
Ajaxy/telegram-tt/master • 54f4693 • 27 files, +153/-74
Toncoin: Rebrand token to Gram
Rename the Toncoin token to "Gram" across user-facing strings and
localization keys, and add the new colored coin icon. The TON blockchain,
the `TON` currency code and protocol/API entities are left intact.
- Update display strings to use the name "Gram"
- Rename token localization keys (`*Ton*` -> `*Gram*`)
- Add `GramIcon` (colored SVG inline, PNG in Settings, `currentColor`
monochrome variant for amount-colored transactions)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Ajaxy/telegram-tt/master • 6f02c7f • 1 files, +2/-1
Rich Message: Fix more button hover color (#7038)
Ajaxy/telegram-tt/master • bada5e5 • 2 files, +20/-0
Modal: Fix Esc handling (#7043)
Ajaxy/telegram-tt/master • b9a888f • 18 files, +452/-493
Mini Apps: Fix theme color parsing (#7029)
Ajaxy/telegram-tt/master • b7764bc • 17 files, +51/-30
Search: Fix search input position in chat list (#7040)
#webz
Redesign: Redesign Left panel and Middle header (#6971)
Co-authored-by: Alexander Zinchuk <alx.zinchuk@gmail.com>
Ajaxy/telegram-tt/master • e1f2988 • 1 files, +1/-1
Add .kml / .kmz as potentially IP-revealing. (#7031)
Ajaxy/telegram-tt/master • 73ff150 • 10 files, +76/-63
Rich Messages: Small fixes (#7032)
Ajaxy/telegram-tt/master • 1fafd66 • 1 files, +2/-2
Reactor List Modal: Fix button hover (#7034)
Ajaxy/telegram-tt/master • 1ead092 • 1 files, +2/-1
Topic: Fix error on min constructor (#7022)
Ajaxy/telegram-tt/master • ee72f71 • 10 files, +47/-33
Media Viewer: Fix ghost animation clipping (#7037)
Ajaxy/telegram-tt/master • 4cd5e76 • 8 files, +368/-6
Profile: Show long titles in line (#7020)
Ajaxy/telegram-tt/master • 3d85e97 • 12 files, +96/-99
Middle Column: Support mask gradient (#7036)
Ajaxy/telegram-tt/master • 54f4693 • 27 files, +153/-74
Toncoin: Rebrand token to Gram
Rename the Toncoin token to "Gram" across user-facing strings and
localization keys, and add the new colored coin icon. The TON blockchain,
the `TON` currency code and protocol/API entities are left intact.
- Update display strings to use the name "Gram"
- Rename token localization keys (`*Ton*` -> `*Gram*`)
- Add `GramIcon` (colored SVG inline, PNG in Settings, `currentColor`
monochrome variant for amount-colored transactions)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Ajaxy/telegram-tt/master • 6f02c7f • 1 files, +2/-1
Rich Message: Fix more button hover color (#7038)
Ajaxy/telegram-tt/master • bada5e5 • 2 files, +20/-0
Modal: Fix Esc handling (#7043)
Ajaxy/telegram-tt/master • b9a888f • 18 files, +452/-493
Mini Apps: Fix theme color parsing (#7029)
Ajaxy/telegram-tt/master • b7764bc • 17 files, +51/-30
Search: Fix search input position in chat list (#7040)
#webz
🫡2
Ajaxy/telegram-tt/master • 5a78bb0 • 7 files, +275/-76
Calls: Migrate methods to object parameters (#7044)
Ajaxy/telegram-tt/master • 248690e • 1 files, +3/-0
Inline Bots: Support rich content (#7046)
Ajaxy/telegram-tt/master • 7b64d1b • 7 files, +15/-8
Styles: Redesign shadows (#7039)
Ajaxy/telegram-tt/master • 37480bc • 1 files, +1/-1
Folders: Disable left tab folders grey out in inactive state (#7041)
Ajaxy/telegram-tt/master • 7a618df • 2 files, +4/-2
Chat Invite Modal: Redesign (#7047)
Ajaxy/telegram-tt/master • 9602b82 • 11 files, +96/-89
Revert "Middle Column: Support mask gradient (#7036)" (#7049)
Ajaxy/telegram-tt/master • 110eb87 • 1 files, +1/-1
Files: Fix progress spinner height init (#7052)
Ajaxy/telegram-tt/master • bcdf2a4 • 2 files, +1/-5
Contact Modal: Fix top margin for help text in New Contact Modal (#7053)
Ajaxy/telegram-tt/master • 84ee447 • 9 files, +68/-6
Message: Show edited if needed (#7045)
Ajaxy/telegram-tt/master • 3f795db • 31 files, +934/-157
Management: Support guard bots (#7035)
Co-authored-by: Alexander Zinchuk <alx.zinchuk@gmail.com>
Ajaxy/telegram-tt/master • 0b401d4 • 1 files, +4/-0
Quick Preview Modal: Fix layout (#7054)
Ajaxy/telegram-tt/master • fc777e6 • 300 files, +21565/-1530
[Build]
#webz
Calls: Migrate methods to object parameters (#7044)
Ajaxy/telegram-tt/master • 248690e • 1 files, +3/-0
Inline Bots: Support rich content (#7046)
Ajaxy/telegram-tt/master • 7b64d1b • 7 files, +15/-8
Styles: Redesign shadows (#7039)
Ajaxy/telegram-tt/master • 37480bc • 1 files, +1/-1
Folders: Disable left tab folders grey out in inactive state (#7041)
Ajaxy/telegram-tt/master • 7a618df • 2 files, +4/-2
Chat Invite Modal: Redesign (#7047)
Ajaxy/telegram-tt/master • 9602b82 • 11 files, +96/-89
Revert "Middle Column: Support mask gradient (#7036)" (#7049)
Ajaxy/telegram-tt/master • 110eb87 • 1 files, +1/-1
Files: Fix progress spinner height init (#7052)
Ajaxy/telegram-tt/master • bcdf2a4 • 2 files, +1/-5
Contact Modal: Fix top margin for help text in New Contact Modal (#7053)
Ajaxy/telegram-tt/master • 84ee447 • 9 files, +68/-6
Message: Show edited if needed (#7045)
Ajaxy/telegram-tt/master • 3f795db • 31 files, +934/-157
Management: Support guard bots (#7035)
Co-authored-by: Alexander Zinchuk <alx.zinchuk@gmail.com>
Ajaxy/telegram-tt/master • 0b401d4 • 1 files, +4/-0
Quick Preview Modal: Fix layout (#7054)
Ajaxy/telegram-tt/master • fc777e6 • 300 files, +21565/-1530
[Build]
#webz
🫡2
morethanwords/tweb/master • 11fde94 • 6 files, +38/-13
Misc non-sticker fixes: folders sidebar notification badge, media spoiler cover, reactions no-select, CLAUDE.md note, langPack sync
- folders sidebar: reactive total notification count on the menu button (Accessor instead of cloning the toolbar count element)
- media: keep sensitive-content cover clickable during reveal so a repeat click is ignored instead of falling through
- reactions: disable text selection
- CLAUDE.md: add commit-policy note
- regenerate langPack.strings
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
Misc non-sticker fixes: folders sidebar notification badge, media spoiler cover, reactions no-select, CLAUDE.md note, langPack sync
- folders sidebar: reactive total notification count on the menu button (Accessor instead of cloning the toolbar count element)
- media: keep sensitive-content cover clickable during reveal so a repeat click is ignored instead of falling through
- reactions: disable text selection
- CLAUDE.md: add commit-policy note
- regenerate langPack.strings
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
#webk
🫡3
morethanwords/tweb/master • 550b488 • 3 files, +195/-68
fix: format a shared contact's phone under the viewer's country, not a misread foreign code
Bug (bugs.telegram.org #30681): a phone number in an in-chat shared contact
embed is displayed with the wrong country code when the stored vCard number does
not explicitly contain its dialing prefix. The leading national/city digits are
shown as if they were the country code (does not happen on Android).
Root cause: formatPhoneNumber (src/helpers/formatPhoneNumber.ts) strips every
non-digit and then ALWAYS resolves a country by greedily matching the longest
numeric prefix against every known country code. For a number stored without its
dialing prefix (e.g. an Indonesian national mobile "8123456789"), the leading
"81" collide with Japan (+81): "81" is stripped as the country code and the rest
is regrouped under it, so "8123456789" rendered as "+81 23 4567 89" in the
contact bubble (src/components/chat/bubbles.ts, messageMediaContact). Registered
users (user.phone) always carry their country code, so this only surfaces for the
arbitrary vCard phone_number of a shared contact.
Fix: mirror Android's PhoneFormat, which biases an unprefixed number to the
viewer's own country instead of guessing one from the leading digits.
- formatPhoneNumber takes an opt-in `defaultCountryCode` (the viewer's own
calling code). When the input has no explicit '+' AND its digits do not already
start with that code, the number is treated as a national number of the
viewer's country and grouped with that country's national patterns; `code` is
returned undefined so the caller omits the '+'. Otherwise (explicit '+', or
digits already starting with the viewer's code) the existing greedy detection
runs unchanged, so a registered user's fully-qualified phone and an
international "+..." contact keep their grouping. The grouping logic is factored
into a shared applyPattern() helper.
- bubbles.ts reads the viewer's country code once from the warm main-thread user
cache (apiManagerProxy.getUser(rootScope.myId)) — synchronous, no chat-open
round-trip — and prefixes '+' only when a country code is present. Every other
formatPhoneNumber caller (profile, search, payments, telInputField) is
unchanged.
Result: a same-country contact regains correct grouping (e.g. "+7 999 123-45-67"),
the #30681 number is grouped under the viewer's country with no false foreign code
(Indonesian "8123456789" -> "812 3456789", never "+81 ..."), and a number that
does carry its own code still renders "+CC ...".
Test (src/tests/formatPhoneNumber.test.ts): pure-unit Vitest with two countries
whose leading digits overlap (JP +81, ID +62). Asserts the #30681 input is
grouped under the viewer (+62) with code undefined and never attributed to Japan;
plus the own-country international "+CC", explicit-'+' detection, the
foreign-under-viewer no-"+CC" case, and the unchanged default parse. 6/6 green
(one reproduces the bug before the fix).
Gates: tsc --noEmit 0 errors; eslint 0 on all changed files; vitest 6/6 green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk
fix: format a shared contact's phone under the viewer's country, not a misread foreign code
Bug (bugs.telegram.org #30681): a phone number in an in-chat shared contact
embed is displayed with the wrong country code when the stored vCard number does
not explicitly contain its dialing prefix. The leading national/city digits are
shown as if they were the country code (does not happen on Android).
Root cause: formatPhoneNumber (src/helpers/formatPhoneNumber.ts) strips every
non-digit and then ALWAYS resolves a country by greedily matching the longest
numeric prefix against every known country code. For a number stored without its
dialing prefix (e.g. an Indonesian national mobile "8123456789"), the leading
"81" collide with Japan (+81): "81" is stripped as the country code and the rest
is regrouped under it, so "8123456789" rendered as "+81 23 4567 89" in the
contact bubble (src/components/chat/bubbles.ts, messageMediaContact). Registered
users (user.phone) always carry their country code, so this only surfaces for the
arbitrary vCard phone_number of a shared contact.
Fix: mirror Android's PhoneFormat, which biases an unprefixed number to the
viewer's own country instead of guessing one from the leading digits.
- formatPhoneNumber takes an opt-in `defaultCountryCode` (the viewer's own
calling code). When the input has no explicit '+' AND its digits do not already
start with that code, the number is treated as a national number of the
viewer's country and grouped with that country's national patterns; `code` is
returned undefined so the caller omits the '+'. Otherwise (explicit '+', or
digits already starting with the viewer's code) the existing greedy detection
runs unchanged, so a registered user's fully-qualified phone and an
international "+..." contact keep their grouping. The grouping logic is factored
into a shared applyPattern() helper.
- bubbles.ts reads the viewer's country code once from the warm main-thread user
cache (apiManagerProxy.getUser(rootScope.myId)) — synchronous, no chat-open
round-trip — and prefixes '+' only when a country code is present. Every other
formatPhoneNumber caller (profile, search, payments, telInputField) is
unchanged.
Result: a same-country contact regains correct grouping (e.g. "+7 999 123-45-67"),
the #30681 number is grouped under the viewer's country with no false foreign code
(Indonesian "8123456789" -> "812 3456789", never "+81 ..."), and a number that
does carry its own code still renders "+CC ...".
Test (src/tests/formatPhoneNumber.test.ts): pure-unit Vitest with two countries
whose leading digits overlap (JP +81, ID +62). Asserts the #30681 input is
grouped under the viewer (+62) with code undefined and never attributed to Japan;
plus the own-country international "+CC", explicit-'+' detection, the
foreign-under-viewer no-"+CC" case, and the unchanged default parse. 6/6 green
(one reproduces the bug before the fix).
Gates: tsc --noEmit 0 errors; eslint 0 on all changed files; vitest 6/6 green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk
🫡3
telegramdesktop/tdesktop/dev • ef76b58 • 6 files, +45/-29
Fix reaction preview crash in stories.
telegramdesktop/tdesktop/dev • 2622f02 • 5 files, +487/-98
Improve context of messages copied to clipboard.
#tdesktop
Fix reaction preview crash in stories.
telegramdesktop/tdesktop/dev • 2622f02 • 5 files, +487/-98
Improve context of messages copied to clipboard.
#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 9f61a9f • 2 files, +4/-2
Work around freeze on Windows on ARM.
Fixes #30867.
#tdesktop
Work around freeze on Windows on ARM.
Fixes #30867.
#tdesktop
🫡3
telegramdesktop/tdesktop/nightly • 548185f • 2 files, +19/-17
Moved out IsDarkTaskbar() from the Windows tray module.
telegramdesktop/tdesktop/nightly • 14efa2d • 7 files, +342/-5
Added playback controls to Windows taskbar thumbnail.
#tdesktop
Moved out IsDarkTaskbar() from the Windows tray module.
telegramdesktop/tdesktop/nightly • 14efa2d • 7 files, +342/-5
Added playback controls to Windows taskbar thumbnail.
#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 5ba77ac • 2 files, +125/-21
[img-editor] Added pinch zoom gesture support.
telegramdesktop/tdesktop/dev • c9c02ad • 4 files, +36/-29
[poll-view] Fixed description being selected instead of question.
telegramdesktop/tdesktop/dev • c02a358 • 1 files, +1/-1
Fixed wrong caption being selected in file albums.
telegramdesktop/tdesktop/dev • e37fc1d • 2 files, +42/-0
Added pinch zoom gesture support to media viewer.
telegramdesktop/tdesktop/dev • 6ab3a8e • 4 files, +69/-5
Added swipe left-right navigation gesture to media viewer.
telegramdesktop/tdesktop/dev • 1a0b504 • 1 files, +3/-1
Added billions suffix to shortened counters.
telegramdesktop/tdesktop/dev • b023fd2 • 2 files, +11/-2
Limited contacts alphabetical section headers to contacts box.
telegramdesktop/tdesktop/dev • a2f2db3 • 3 files, +6/-2
Made discussion group open in same non-primary window as its channel.
telegramdesktop/tdesktop/dev • 57fdc4b • 2 files, +5/-1
Fixed macOS now playing timeline drift after pausing playback.
telegramdesktop/tdesktop/dev • 858a8fd • 2 files, +23/-1
Reflected the playback speed in macOS now playing timeline.
telegramdesktop/tdesktop/dev • 3adc0c1 • 2 files, +20/-1
Mapped macOS now playing skip buttons to relative seeking.
telegramdesktop/tdesktop/dev • b7dff42 • 2 files, +45/-14
[ai] Localize testing attempts.
telegramdesktop/tdesktop/dev • 4e6295b • 1 files, +154/-94
[ai] Bring Codex skill up to speed.
telegramdesktop/tdesktop/dev • 0782b4d • 2 files, +71/-19
[ai] Default to .ai/{project}/tasks/about.md task.
#tdesktop
[img-editor] Added pinch zoom gesture support.
telegramdesktop/tdesktop/dev • c9c02ad • 4 files, +36/-29
[poll-view] Fixed description being selected instead of question.
telegramdesktop/tdesktop/dev • c02a358 • 1 files, +1/-1
Fixed wrong caption being selected in file albums.
telegramdesktop/tdesktop/dev • e37fc1d • 2 files, +42/-0
Added pinch zoom gesture support to media viewer.
telegramdesktop/tdesktop/dev • 6ab3a8e • 4 files, +69/-5
Added swipe left-right navigation gesture to media viewer.
telegramdesktop/tdesktop/dev • 1a0b504 • 1 files, +3/-1
Added billions suffix to shortened counters.
telegramdesktop/tdesktop/dev • b023fd2 • 2 files, +11/-2
Limited contacts alphabetical section headers to contacts box.
telegramdesktop/tdesktop/dev • a2f2db3 • 3 files, +6/-2
Made discussion group open in same non-primary window as its channel.
telegramdesktop/tdesktop/dev • 57fdc4b • 2 files, +5/-1
Fixed macOS now playing timeline drift after pausing playback.
telegramdesktop/tdesktop/dev • 858a8fd • 2 files, +23/-1
Reflected the playback speed in macOS now playing timeline.
telegramdesktop/tdesktop/dev • 3adc0c1 • 2 files, +20/-1
Mapped macOS now playing skip buttons to relative seeking.
telegramdesktop/tdesktop/dev • b7dff42 • 2 files, +45/-14
[ai] Localize testing attempts.
telegramdesktop/tdesktop/dev • 4e6295b • 1 files, +154/-94
[ai] Bring Codex skill up to speed.
telegramdesktop/tdesktop/dev • 0782b4d • 2 files, +71/-19
[ai] Default to .ai/{project}/tasks/about.md task.
#tdesktop
🫡3
telegramdesktop/tdesktop/dev • 2428069 • 2 files, +26/-14
[ai] Clean up implementing.md every run.
#tdesktop
[ai] Clean up implementing.md every run.
#tdesktop
🫡2
telegramdesktop/tdesktop/dev • 18df941 • 2 files, +109/-1
Added screen reader tab-control accessibility for chat folders.
telegramdesktop/tdesktop/dev • 7ffb2c5 • 1 files, +4/-0
Report the chat-folders tab strip as a vertical tab control
Override TabListLayout::accessibilityOrientation() to return
Qt::Vertical, so screen readers announce the folders strip as a vertical
tab control (UIA Orientation). Relies on desktop-app/lib_ui#304 and
desktop-app/patches#254.
telegramdesktop/tdesktop/dev • c48860d • 1 files, +4/-0
Expose locked folders as plain buttons, not selectable tabs
A locked (premium) folder can never become the current tab - pressing it
opens the Premium box. Mark it not a page tab once locked, so it reports
as a plain button instead of a selectable PageTab and the tab container's
select() correctly rejects it.
telegramdesktop/tdesktop/dev • 9a5ec8b • 3 files, +12/-1
Fixed stuck voice waveform highlight after leaving hovered message.
telegramdesktop/tdesktop/dev • 8b4ccb7 • 1 files, +4/-0
Added display of hovered waveform time to voice message status line.
telegramdesktop/tdesktop/dev • 91fb168 • 2 files, +19/-17
Moved out IsDarkTaskbar() from the Windows tray module.
telegramdesktop/tdesktop/dev • 6477fdd • 6 files, +337/-5
Added playback controls to Windows taskbar thumbnail.
Fixed #30402.
telegramdesktop/tdesktop/dev • 1c6220a • 1 files, +1/-1
Update lib_ui submodule.
#tdesktop
Added screen reader tab-control accessibility for chat folders.
telegramdesktop/tdesktop/dev • 7ffb2c5 • 1 files, +4/-0
Report the chat-folders tab strip as a vertical tab control
Override TabListLayout::accessibilityOrientation() to return
Qt::Vertical, so screen readers announce the folders strip as a vertical
tab control (UIA Orientation). Relies on desktop-app/lib_ui#304 and
desktop-app/patches#254.
telegramdesktop/tdesktop/dev • c48860d • 1 files, +4/-0
Expose locked folders as plain buttons, not selectable tabs
A locked (premium) folder can never become the current tab - pressing it
opens the Premium box. Mark it not a page tab once locked, so it reports
as a plain button instead of a selectable PageTab and the tab container's
select() correctly rejects it.
telegramdesktop/tdesktop/dev • 9a5ec8b • 3 files, +12/-1
Fixed stuck voice waveform highlight after leaving hovered message.
telegramdesktop/tdesktop/dev • 8b4ccb7 • 1 files, +4/-0
Added display of hovered waveform time to voice message status line.
telegramdesktop/tdesktop/dev • 91fb168 • 2 files, +19/-17
Moved out IsDarkTaskbar() from the Windows tray module.
telegramdesktop/tdesktop/dev • 6477fdd • 6 files, +337/-5
Added playback controls to Windows taskbar thumbnail.
Fixed #30402.
telegramdesktop/tdesktop/dev • 1c6220a • 1 files, +1/-1
Update lib_ui submodule.
#tdesktop
🫡2
telegramdesktop/tdesktop/dev • e99928b • 2 files, +25/-9
Added custom emoji size support to sticker uploading.
telegramdesktop/tdesktop/dev • 6241d23 • 3 files, +137/-40
Added custom emoji creation flow to sticker creator box.
telegramdesktop/tdesktop/dev • 103c256 • 7 files, +157/-51
Added new-emoji button with menu to emoji set boxes.
telegramdesktop/tdesktop/dev • 9895e5b • 4 files, +128/-0
Added adapting existing sticker into custom emoji.
telegramdesktop/tdesktop/dev • ff2dfbf • 5 files, +65/-21
Improve accessibility changes for left filters.
telegramdesktop/tdesktop/dev • e4cde25 • 1 files, +1/-1
Fix build with Qt 5.
#tdesktop
Added custom emoji size support to sticker uploading.
telegramdesktop/tdesktop/dev • 6241d23 • 3 files, +137/-40
Added custom emoji creation flow to sticker creator box.
telegramdesktop/tdesktop/dev • 103c256 • 7 files, +157/-51
Added new-emoji button with menu to emoji set boxes.
telegramdesktop/tdesktop/dev • 9895e5b • 4 files, +128/-0
Added adapting existing sticker into custom emoji.
telegramdesktop/tdesktop/dev • ff2dfbf • 5 files, +65/-21
Improve accessibility changes for left filters.
telegramdesktop/tdesktop/dev • e4cde25 • 1 files, +1/-1
Fix build with Qt 5.
#tdesktop
🫡2
morethanwords/tweb/master • 154f42d • 2 files, +60/-1
fix: stringMiddleOverflow no longer exceeds maxLength (output was always ~maxLength+3)
Bug
---
`stringMiddleOverflow(str, maxLength)` is a middle-ellipsis truncation helper
used to shorten a string to fit a budget (e.g. the empty-search hint shortens
the query to 18 chars in topbarSearch.tsx). But its output was systematically
LONGER than the requested maxLength — and for inputs only slightly over the
limit it was even longer than the original string, defeating the helper's
entire purpose. This is the same class of off-by-the-ellipsis defect already
fixed elsewhere in the formatter cluster.
Same symptom as the platform reports about truncated/oversized inline labels;
discovered via a discovery scan over src/helpers/string during the Forge bug
lane (the well-mined number/byte/duration formatters were skipped per journal).
Root cause (current code)
-------------------------
str.slice(0, maxLength / 2 | 0) + '...' + str.slice(-Math.round(maxLength / 2))
The two halves already sum to ~maxLength, then a 3-char ellipsis is added ON
TOP, so the result length is always ≈ maxLength + 3. The 3-char ellipsis budget
was never subtracted. Examples (before):
stringMiddleOverflow('abcdefgh', 6) -> 'abc...fgh' (9 chars, > 6 AND > input 8)
stringMiddleOverflow('a'.repeat(20),18)-> 21 chars (> 18 AND > input 20)
Fix
---
Reserve the ellipsis length from the budget before splitting head/tail — the
same idiom the sibling helpers fitSymbols / limitSymbols already use:
const budget = Math.max(0, maxLength - ellipsis.length);
head = ceil(budget/2), tail = floor(budget/2)
Output is now always ≤ maxLength; the head+ellipsis+tail shape and the
"return unchanged when it already fits" fast path are preserved.
Test evidence (src/tests/stringMiddleOverflow.test.ts)
------------------------------------------------------
4 tests. BEFORE the fix 2 fail:
"never exceeds maxLength for any overflowing input"
-> AssertionError: expected 9 to be less than or equal to 6
"shortened result is never longer than the original (maxLength 18)"
-> AssertionError: expected 21 to be less than or equal to 18
AFTER the fix all 4 pass (the unchanged-fit + head/ellipsis/tail-shape tests
also lock the preserved behavior).
Gates: tsc --noEmit 0 errors · eslint 0 · vitest 4/4 green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit 8ab148fed4cfa6d0d8a3ad9e835b9aa6b0b0d3e7)
#webk
fix: stringMiddleOverflow no longer exceeds maxLength (output was always ~maxLength+3)
Bug
---
`stringMiddleOverflow(str, maxLength)` is a middle-ellipsis truncation helper
used to shorten a string to fit a budget (e.g. the empty-search hint shortens
the query to 18 chars in topbarSearch.tsx). But its output was systematically
LONGER than the requested maxLength — and for inputs only slightly over the
limit it was even longer than the original string, defeating the helper's
entire purpose. This is the same class of off-by-the-ellipsis defect already
fixed elsewhere in the formatter cluster.
Same symptom as the platform reports about truncated/oversized inline labels;
discovered via a discovery scan over src/helpers/string during the Forge bug
lane (the well-mined number/byte/duration formatters were skipped per journal).
Root cause (current code)
-------------------------
str.slice(0, maxLength / 2 | 0) + '...' + str.slice(-Math.round(maxLength / 2))
The two halves already sum to ~maxLength, then a 3-char ellipsis is added ON
TOP, so the result length is always ≈ maxLength + 3. The 3-char ellipsis budget
was never subtracted. Examples (before):
stringMiddleOverflow('abcdefgh', 6) -> 'abc...fgh' (9 chars, > 6 AND > input 8)
stringMiddleOverflow('a'.repeat(20),18)-> 21 chars (> 18 AND > input 20)
Fix
---
Reserve the ellipsis length from the budget before splitting head/tail — the
same idiom the sibling helpers fitSymbols / limitSymbols already use:
const budget = Math.max(0, maxLength - ellipsis.length);
head = ceil(budget/2), tail = floor(budget/2)
Output is now always ≤ maxLength; the head+ellipsis+tail shape and the
"return unchanged when it already fits" fast path are preserved.
Test evidence (src/tests/stringMiddleOverflow.test.ts)
------------------------------------------------------
4 tests. BEFORE the fix 2 fail:
"never exceeds maxLength for any overflowing input"
-> AssertionError: expected 9 to be less than or equal to 6
"shortened result is never longer than the original (maxLength 18)"
-> AssertionError: expected 21 to be less than or equal to 18
AFTER the fix all 4 pass (the unchanged-fit + head/ellipsis/tail-shape tests
also lock the preserved behavior).
Gates: tsc --noEmit 0 errors · eslint 0 · vitest 4/4 green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit 8ab148fed4cfa6d0d8a3ad9e835b9aa6b0b0d3e7)
#webk
🫡3
morethanwords/tweb/master • aa433ff • 2 files, +51/-1
fix: getWeekNumber divided a ms delta by a seconds constant (1000x off)
Bug (forge discovery scan over src/helpers/date.ts)
getWeekNumber computed the ISO week number as
Math.ceil((((d.getTime() - yearStart.getTime()) / ONE_DAY) + 1) / 7)
but getTime() deltas are in milliseconds while ONE_DAY is 86400 (seconds).
Dividing a millisecond span by the seconds-per-day constant inflates the
day count ~1000x, so the function returned absurd values: getWeekNumber for
2024-06-21 yielded 24429 instead of the ISO week 25; for 2017-01-02 it
returned 572 instead of 1. The algorithm is copied verbatim from
https://stackoverflow.com/a/6117889, which divides by 86400000 (ms/day) —
the port dropped the *1000.
Reachability
getWeekNumber is exported. Its single in-app caller (formatDateAccordingTo
TodayNew, "current week" weekday-format branch) compares two dates already
within ~7 days, and the 1000x scaling cancels out under that equality
comparison — so today's user-visible behavior is unchanged (verified
exhaustively: 0 branch-decision differences across 2018–2031, every day,
hourly within the 7-day gate). The fix therefore hardens an exported helper
that returns a grossly wrong number for any other/future caller, with no
behavior change to the existing one. Strictly more correct.
Fix
Divide by ms-per-day (ONE_DAY * 1000). 1-line change + clarifying comment.
Evidence
New src/tests/getWeekNumber.test.ts: 7 cases vs ISO-8601 reference week
numbers (incl. Sunday→prev-year week 52, year-end roll into next ISO year,
and a 1..53 range sweep over a full year). Before: 6/7 FAIL
(e.g. "expected 858 to be 1", "expected 51715 to be <= 53"). After: 7/7 pass.
Gates: tsc 0 · eslint 0 (date.ts + test) · vitest 7/7.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit 0ef09e626c661017807104466789b27886568ba1)
morethanwords/tweb/master • 15221e2 • 2 files, +38/-1
fix: correct alpha compositing in rgbaToRgb (background coefficient)
Bug (discovery scan, src/helpers/color.ts — pure helper)
rgbaToRgb() flattens an RGBA colour over an OPAQUE background. The
correct compositing formula is out = a*fg + (1 - a)*bg, but the code
weighted the background term by `a` as well:
a * (color/255) + (a * (bg/255)) // both terms scaled by a
Root cause (current source, color.ts:294)
The background contribution used `a` instead of `(1 - a)`. Consequences:
- a = 1 (opaque fg) returns fg + bg (clamped), not fg.
- a = 0 (transparent fg) returns 0, not bg.
- it only happens to be correct at a == 0.5 (where a == 1 - a), which
hid the bug for the common case.
Impact
webApp.tsx setHeaderColor() calls rgbaToRgb([...textColor, textOpacity],
headerRgb) to derive the Mini App header's --secondary-text-color by
flattening semi-transparent secondary text over the header background.
textOpacity comes from calculateOpacity() and ranges 0.5..0.64, so any
opacity above 0.5 produced a wrong (too-bright/over-saturated) colour.
Fix
Weight the background term by (1 - a). One-line change; output unchanged
for a == 0.5 and strictly correct elsewhere.
Tests (src/tests/colorRgbaToRgb.test.ts, new)
5 cases vs an alpha-compositing reference: opaque-fg, transparent-fg,
0.5 midpoint, the non-0.5 webApp.tsx usage, and a no-overflow check.
Before: 3 failed (opaque/transparent/non-0.5), 2 passed (0.5 cases).
After: 5/5 pass.
Gates: tsc 0 · eslint 0 (both files) · vitest 5/5.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk
fix: getWeekNumber divided a ms delta by a seconds constant (1000x off)
Bug (forge discovery scan over src/helpers/date.ts)
getWeekNumber computed the ISO week number as
Math.ceil((((d.getTime() - yearStart.getTime()) / ONE_DAY) + 1) / 7)
but getTime() deltas are in milliseconds while ONE_DAY is 86400 (seconds).
Dividing a millisecond span by the seconds-per-day constant inflates the
day count ~1000x, so the function returned absurd values: getWeekNumber for
2024-06-21 yielded 24429 instead of the ISO week 25; for 2017-01-02 it
returned 572 instead of 1. The algorithm is copied verbatim from
https://stackoverflow.com/a/6117889, which divides by 86400000 (ms/day) —
the port dropped the *1000.
Reachability
getWeekNumber is exported. Its single in-app caller (formatDateAccordingTo
TodayNew, "current week" weekday-format branch) compares two dates already
within ~7 days, and the 1000x scaling cancels out under that equality
comparison — so today's user-visible behavior is unchanged (verified
exhaustively: 0 branch-decision differences across 2018–2031, every day,
hourly within the 7-day gate). The fix therefore hardens an exported helper
that returns a grossly wrong number for any other/future caller, with no
behavior change to the existing one. Strictly more correct.
Fix
Divide by ms-per-day (ONE_DAY * 1000). 1-line change + clarifying comment.
Evidence
New src/tests/getWeekNumber.test.ts: 7 cases vs ISO-8601 reference week
numbers (incl. Sunday→prev-year week 52, year-end roll into next ISO year,
and a 1..53 range sweep over a full year). Before: 6/7 FAIL
(e.g. "expected 858 to be 1", "expected 51715 to be <= 53"). After: 7/7 pass.
Gates: tsc 0 · eslint 0 (date.ts + test) · vitest 7/7.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
(cherry picked from commit 0ef09e626c661017807104466789b27886568ba1)
morethanwords/tweb/master • 15221e2 • 2 files, +38/-1
fix: correct alpha compositing in rgbaToRgb (background coefficient)
Bug (discovery scan, src/helpers/color.ts — pure helper)
rgbaToRgb() flattens an RGBA colour over an OPAQUE background. The
correct compositing formula is out = a*fg + (1 - a)*bg, but the code
weighted the background term by `a` as well:
a * (color/255) + (a * (bg/255)) // both terms scaled by a
Root cause (current source, color.ts:294)
The background contribution used `a` instead of `(1 - a)`. Consequences:
- a = 1 (opaque fg) returns fg + bg (clamped), not fg.
- a = 0 (transparent fg) returns 0, not bg.
- it only happens to be correct at a == 0.5 (where a == 1 - a), which
hid the bug for the common case.
Impact
webApp.tsx setHeaderColor() calls rgbaToRgb([...textColor, textOpacity],
headerRgb) to derive the Mini App header's --secondary-text-color by
flattening semi-transparent secondary text over the header background.
textOpacity comes from calculateOpacity() and ranges 0.5..0.64, so any
opacity above 0.5 produced a wrong (too-bright/over-saturated) colour.
Fix
Weight the background term by (1 - a). One-line change; output unchanged
for a == 0.5 and strictly correct elsewhere.
Tests (src/tests/colorRgbaToRgb.test.ts, new)
5 cases vs an alpha-compositing reference: opaque-fg, transparent-fg,
0.5 midpoint, the non-0.5 webApp.tsx usage, and a no-overflow check.
Before: 3 failed (opaque/transparent/non-0.5), 2 passed (0.5 cases).
After: 5/5 pass.
Gates: tsc 0 · eslint 0 (both files) · vitest 5/5.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#webk
🫡3