diff --git a/apps/calendar-macos/CompassKit/Sources/CompassKit/Life/DatePickerCaption.swift b/apps/calendar-macos/CompassKit/Sources/CompassKit/Life/DatePickerCaption.swift index 405bc2d3b7..2eef42dfc6 100644 --- a/apps/calendar-macos/CompassKit/Sources/CompassKit/Life/DatePickerCaption.swift +++ b/apps/calendar-macos/CompassKit/Sources/CompassKit/Life/DatePickerCaption.swift @@ -28,12 +28,6 @@ public enum DatePickerCaption { return (start ..< start + yearsPerPage).map { $0 } } - /// Decade-aligned pages (1980–1999 for 1993); legacy sidebar grids. - public static func yearPage(containing year: Int) -> [Int] { - let start = year - ((year % yearsPerPage) + yearsPerPage) % yearsPerPage - return (start ..< start + yearsPerPage).map { $0 } - } - public static let monthLabels = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ] diff --git a/apps/calendar-web/src/components/DatePicker/caption-picker-year-page.test.ts b/apps/calendar-web/src/components/DatePicker/caption-picker-year-page.test.ts index 46fda33455..dc5752588f 100644 --- a/apps/calendar-web/src/components/DatePicker/caption-picker-year-page.test.ts +++ b/apps/calendar-web/src/components/DatePicker/caption-picker-year-page.test.ts @@ -1,5 +1,4 @@ import { - macYearRangeCaption, reactDatepickerYearPageBounds, shiftYearPageBounds, yearRangeCaptionFromBounds, @@ -33,8 +32,4 @@ describe("caption-picker-year-page", () => { expect(shiftYearPageBounds(page, -1)).toEqual({ start: 1961, end: 1980 }); expect(shiftYearPageBounds(page, 1)).toEqual({ start: 2001, end: 2020 }); }); - - it("keeps mac decade alignment separate", () => { - expect(macYearRangeCaption(1993)).toBe("Years 1980 to 1999"); - }); }); diff --git a/apps/calendar-web/src/components/DatePicker/caption-picker-year-page.ts b/apps/calendar-web/src/components/DatePicker/caption-picker-year-page.ts index dabf4a9719..6aea14f809 100644 --- a/apps/calendar-web/src/components/DatePicker/caption-picker-year-page.ts +++ b/apps/calendar-web/src/components/DatePicker/caption-picker-year-page.ts @@ -1,4 +1,4 @@ -/** Keep in sync with `DatePickerCaption.reactYearsPerPage` on macOS. */ +/** Keep in sync with `DatePickerCaption.yearsPerPage` on macOS. */ export const CAPTION_YEARS_PER_PAGE = 20; export type YearPageBounds = { readonly start: number; readonly end: number }; @@ -30,23 +30,3 @@ export const yearRangeCaptionFromBounds = (bounds: YearPageBounds): string => { const { start, end } = bounds; return start === end ? `Year ${start}` : `Years ${start} to ${end}`; }; - -/** macOS decade-aligned pages (0, 20, 40, …) for non-react grids. */ -export const macYearPageContaining = ( - year: number, - pageSize = CAPTION_YEARS_PER_PAGE, -): readonly number[] => { - const start = year - (((year % pageSize) + pageSize) % pageSize); - return Array.from({ length: pageSize }, (_, index) => start + index); -}; - -export const macYearRangeCaption = ( - anchorYear: number, - pageSize = CAPTION_YEARS_PER_PAGE, -): string => { - const page = macYearPageContaining(anchorYear, pageSize); - const first = page[0]; - const last = page[page.length - 1]; - if (first === undefined || last === undefined) return "Select year"; - return first === last ? `Year ${first}` : `Years ${first} to ${last}`; -}; diff --git a/apps/calendar-web/src/views/Life/LifeSidebarContent.tsx b/apps/calendar-web/src/views/Life/LifeSidebarContent.tsx index 47af1b1c56..1fd0793240 100644 --- a/apps/calendar-web/src/views/Life/LifeSidebarContent.tsx +++ b/apps/calendar-web/src/views/Life/LifeSidebarContent.tsx @@ -14,6 +14,10 @@ import { ID_LIFE_BIRTH_DATE } from "@web/common/constants/web.constants"; import { ArrowButton } from "@web/components/Button/ArrowButton"; import { NumberInput } from "@web/components/NumberInput/NumberInput"; import { TooltipWrapper } from "@web/components/Tooltip/TooltipWrapper"; +import { + selectPageJumpHintsVisible, + usePageJumpHintStore, +} from "@web/shortcuts/page-jump/page-jump.store"; import { pageJumpAttrs, pageJumpChipAttrs, @@ -46,6 +50,7 @@ export function LifeSidebarContent({ today, onPreferencesChange, }: LifeSidebarContentProps) { + const pageJumpHintsVisible = usePageJumpHintStore(selectPageJumpHintsVisible); const [isBirthDatePickerOpen, setIsBirthDatePickerOpen] = useState(false); const [lifespanInput, setLifespanInput] = useState(() => String(preferences.lifespan), @@ -124,9 +129,14 @@ export function LifeSidebarContent({ /> - {/* Portaled Mod chips do not affect layout; reserve space so chip 3 - sits between the arrows and the title without covering the label. */} - +