Compare commits

...

5 Commits

Author SHA1 Message Date
semantic-release-bot
4bace36561 chore(release): 4.47.2 [skip ci]
## [4.47.2](https://github.com/antialias/soroban-abacus-flashcards/compare/v4.47.1...v4.47.2) (2025-10-20)

### Bug Fixes

* **nav:** prevent thrashing by using fixed position always ([eff44b3](eff44b3ad1))
* **nav:** remove unnecessary borders from transparent nav ([8c2ddca](8c2ddca28d))
2025-10-20 19:16:22 +00:00
Thomas Hallock
8c2ddca28d fix(nav): remove unnecessary borders from transparent nav
Remove borders and extra padding around navigation elements when in
transparent mode. The borders were appearing as black and cluttering
the clean transparent overlay look. Now navigation elements show only
white text without any borders.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-20 14:14:59 -05:00
Thomas Hallock
eff44b3ad1 fix(nav): prevent thrashing by using fixed position always
The thrashing was caused by a layout shift feedback loop: switching
between position sticky (takes up space) and position fixed (overlays)
caused content to shift, triggering IntersectionObserver again.

Fix: Always use position fixed so nav state changes are purely visual
(transparency, borders, colors) without any layout shifts.

Also removed unnecessary hysteresis code since the root cause is fixed.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-20 14:13:54 -05:00
semantic-release-bot
f81b88ae30 chore(release): 4.47.1 [skip ci]
## [4.47.1](https://github.com/antialias/soroban-abacus-flashcards/compare/v4.47.0...v4.47.1) (2025-10-20)

### Bug Fixes

* **hero:** prevent nav thrashing with hysteresis ([71b1b93](71b1b933b5))
2025-10-20 19:11:07 +00:00
Thomas Hallock
71b1b933b5 fix(hero): prevent nav thrashing with hysteresis
Add hysteresis to IntersectionObserver to prevent rapid toggling
between transparent and opaque nav bar states when scrolling near
the threshold. Now uses different thresholds for hiding (< 10%) vs
showing (> 30%), creating a 20% buffer zone.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-20 14:09:51 -05:00
3 changed files with 21 additions and 38 deletions

View File

@@ -1,3 +1,18 @@
## [4.47.2](https://github.com/antialias/soroban-abacus-flashcards/compare/v4.47.1...v4.47.2) (2025-10-20)
### Bug Fixes
* **nav:** prevent thrashing by using fixed position always ([eff44b3](https://github.com/antialias/soroban-abacus-flashcards/commit/eff44b3ad1ea0535c6965ad58012f9275cb143ec))
* **nav:** remove unnecessary borders from transparent nav ([8c2ddca](https://github.com/antialias/soroban-abacus-flashcards/commit/8c2ddca28dbdd7743227eed4d19a9a8f662a72b5))
## [4.47.1](https://github.com/antialias/soroban-abacus-flashcards/compare/v4.47.0...v4.47.1) (2025-10-20)
### Bug Fixes
* **hero:** prevent nav thrashing with hysteresis ([71b1b93](https://github.com/antialias/soroban-abacus-flashcards/commit/71b1b933b598c0a6a8aef1bc9f8c598c1871b2eb))
## [4.47.0](https://github.com/antialias/soroban-abacus-flashcards/compare/v4.46.2...v4.47.0) (2025-10-20)

View File

@@ -580,7 +580,7 @@ export function AppNavBar({ variant = 'full', navSlot }: AppNavBarProps) {
shadow: isTransparent ? 'none' : 'sm',
borderBottom: isTransparent ? 'none' : '1px solid',
borderColor: isTransparent ? 'transparent' : 'gray.200',
position: isTransparent ? 'fixed' : 'sticky',
position: 'fixed',
top: 0,
left: 0,
right: 0,
@@ -659,31 +659,9 @@ export function AppNavBar({ variant = 'full', navSlot }: AppNavBarProps) {
<div />
)}
<div
className={css({
display: 'flex',
gap: '6',
alignItems: 'center',
px: isTransparent ? '4' : '0',
py: isTransparent ? '2' : '0',
rounded: isTransparent ? 'lg' : 'none',
border: isTransparent ? '1px solid' : 'none',
borderColor: isTransparent ? 'rgba(255, 255, 255, 0.3)' : 'transparent',
transition: 'all 0.3s ease',
})}
>
<div className={hstack({ gap: '6', alignItems: 'center' })}>
{/* Navigation Links */}
<nav
className={css({
display: 'flex',
gap: '4',
px: isTransparent ? '2' : '0',
py: isTransparent ? '1' : '0',
rounded: isTransparent ? 'md' : 'none',
border: isTransparent ? '1px solid' : 'none',
borderColor: isTransparent ? 'rgba(255, 255, 255, 0.2)' : 'transparent',
})}
>
<nav className={hstack({ gap: '4' })}>
<NavLink href="/create" currentPath={pathname} isTransparent={isTransparent}>
Create
</NavLink>
@@ -695,18 +673,8 @@ export function AppNavBar({ variant = 'full', navSlot }: AppNavBarProps) {
</NavLink>
</nav>
{/* Abacus Style Dropdown - with border when transparent */}
<div
className={css({
px: isTransparent ? '2' : '0',
py: isTransparent ? '1' : '0',
rounded: isTransparent ? 'md' : 'none',
border: isTransparent ? '1px solid' : 'none',
borderColor: isTransparent ? 'rgba(255, 255, 255, 0.2)' : 'transparent',
})}
>
<AbacusDisplayDropdown isFullscreen={false} />
</div>
{/* Abacus Style Dropdown */}
<AbacusDisplayDropdown isFullscreen={false} />
</div>
</div>
</div>

View File

@@ -1,6 +1,6 @@
{
"name": "soroban-monorepo",
"version": "4.47.0",
"version": "4.47.2",
"private": true,
"description": "Beautiful Soroban Flashcard Generator - Monorepo",
"workspaces": [