fix: align floating button safe bounds
ci / gitleaks (push) Successful in 6s
ci / docker (push) Successful in 3m27s

This commit is contained in:
2026-09-11 17:18:25 +08:00
parent e5cede1b98
commit 9ec9d60633
2 changed files with 6 additions and 6 deletions
+4 -4
View File
@@ -177,14 +177,14 @@ describe('MVP view utilities', () => {
it('keeps the draggable mobile add button inside the viewport', () => {
expect(clampFabPosition(-10, -20, 390, 844)).toEqual({ x: 14, y: 14 })
expect(clampFabPosition(500, 900, 390, 844)).toEqual({ x: 324, y: 718 })
expect(clampFabPosition(500, 900, 390, 844)).toEqual({ x: 320, y: 704 })
expect(clampFabPosition(120, 300, 390, 844)).toEqual({ x: 120, y: 300 })
})
it('snaps the add button to the nearest horizontal edge while preserving its safe vertical position', () => {
expect(snapFabPosition(40, 300, 390, 844)).toEqual({ x: 14, y: 300 })
expect(snapFabPosition(280, 300, 390, 844)).toEqual({ x: 324, y: 300 })
expect(snapFabPosition(180, 900, 390, 844)).toEqual({ x: 324, y: 718 })
expect(snapFabPosition(40, 300, 390, 844, 56, 14, 84)).toEqual({ x: 14, y: 300 })
expect(snapFabPosition(280, 300, 390, 844, 56, 14, 84)).toEqual({ x: 320, y: 300 })
expect(snapFabPosition(180, 900, 390, 844, 56, 14, 84)).toEqual({ x: 320, y: 704 })
})
it('validates safe habit input and emits only changed patch fields', () => {
+2 -2
View File
@@ -163,14 +163,14 @@ export async function performTrashMutation(
return { mutated: true, refreshed: await refresh() }
}
export function clampFabPosition(x: number, y: number, viewportWidth: number, viewportHeight: number, size = 52, margin = 14, bottomReserved = 74) {
export function clampFabPosition(x: number, y: number, viewportWidth: number, viewportHeight: number, size = 56, margin = 14, bottomReserved = 84) {
return {
x: Math.min(Math.max(x, margin), Math.max(margin, viewportWidth - size - margin)),
y: Math.min(Math.max(y, margin), Math.max(margin, viewportHeight - size - bottomReserved)),
}
}
export function snapFabPosition(x: number, y: number, viewportWidth: number, viewportHeight: number, size = 52, margin = 14, bottomReserved = 74) {
export function snapFabPosition(x: number, y: number, viewportWidth: number, viewportHeight: number, size = 56, margin = 14, bottomReserved = 84) {
const clamped = clampFabPosition(x, y, viewportWidth, viewportHeight, size, margin, bottomReserved)
const left = margin
const right = Math.max(margin, viewportWidth - size - margin)