- Add TimePickerViewModel with const string ID (release/6.0 pattern)
- Add TimePickerShowCase AXAML with x:DataType for compiled bindings
- Add TimePickerShowCase code-behind with ReactiveUserControl
- Register ViewModel in CaseNavigationViewModel
- Register View mapping in ShowCaseRegister
- Add menu item to CaseNavigation.axaml under DataEntry category
- Add Chinese language resource: DataEntry_TimePicker = "TimePicker 时间选择框"
- Add English language resource: DataEntry_TimePicker = "TimePicker"
- All 7 registration steps completed for Gallery integration
- Document that Avalonia.Utilities.MathUtilities is now internal in Avalonia 12
- Add detection pattern for MathUtilities usage
- Document fix: use AtomUI.Utils.MathUtils as public wrapper
- Explain that MathUtils provides identical epsilon-based floating-point comparison methods
- Add TimePicker and RangeTimePicker controls with time selection UI
- Add InfoPickerInput base control for picker-style inputs
- Add TimeView, TimePickerPresenter, and TimePickerFlyout components
- Add localization resources (en_US, zh_CN)
- Fix RenderScaleAwareDoubleConfigure for Avalonia 12 (use IPresentationSource.RenderScaling)
- Add placeholder files for TimePickerShowCase
- Remove incorrectly added logic in HandleSubMenuOpenChanged (SetCurrentValue(IsSelectedProperty, true) and SelectedIndex = -1)
- Remove incorrectly added methods (PointerMoved, KeyDown, HandleKeyDown) and special top-level handling in NotifyPointerEntered/NotifyPointerExited
- Optimize HashSet creation in Select method by using ToHashSet() directly instead of foreach loop
- Update migrate-to-avalonia12 skill to emphasize preserving control behavior during migration
Refactor flyout and popup components to improve positioning behavior, token resource bindings, and internal API access for ContextMenu integration.
**Flyout Token Improvements:**
- Change Flyout.MotionDuration binding from CreateTokenBinding to CreateGlobalTokenBinding for consistency
- Add HorizontalOffset and VerticalOffset properties to FlyoutHostToken (default to SharedToken.UniformlyMarginXS)
- Bind MenuFlyout HorizontalOffset/VerticalOffset to FlyoutHostToken values
- Set MenuFlyout.ShouldUseOverlayLayer default to true
**ContextMenu Theme:**
- Add ShouldUseOverlayLayer, MotionDuration, PopupRootShadow, OverlayHostShadow setters to ContextMenuTheme
- Enable overlay layer and motion support for ContextMenu by default
**Popup Positioning Fix:**
- Fix PopupUtils.CalculatePopupPositionAndAnchor for PlacementMode.Pointer with overlay host
- Apply marginToAnchor first, then add shadowThickness only when not using overlay host
- Prevents double-offset when overlay host already handles shadow spacing
**Internal API Access:**
- Change Popup.HandleCustomPlacement from private to internal
- Allows ContextMenu to set CustomPopupPlacementCallback = _popup.HandleCustomPlacement
**Cleanup:**
- Remove commented-out code in NavMenuItemTheme.axaml
- Remove duplicate PaginationThemeConstants.cs (already committed in previous commit)
- Update generated files (LanguageResourceConst.g.cs, TokenResourceConst.g.cs)
Port MenuShowCase component from release/5.0 branch to release/6.0, upgrading to Avalonia 12 standards and fixing compatibility issues.
**MenuShowCase Port:**
- Add MenuViewModel with IActivatableViewModel pattern
- Add MenuShowCase.axaml with 14 showcase items (basic menu, ItemsSource, NavMenu modes, icons, toggle types, scrollable, context menu, menu flyout)
- Add MenuShowCase.axaml.cs with ReactiveUserControl pattern and proper disposal
- Register in ShowCaseRegister and CaseNavigationViewModel
- Add localization entries (en_US: "Menu", zh_CN: "Menu 导航菜单")
- Add navigation menu item in CaseNavigation.axaml
**Avalonia 12 Compatibility Fixes:**
- Remove Flyout.HorizontalOffset/VerticalOffset (removed in Avalonia 12)
- Fix Visual parent conflict: create separate NavMenuNode trees for InlineModeMenu and ItemsSourceDemoNavMenu (Avalonia 12 enforces strict single-parent rule for Visuals)
- Add ItemsSourceDemoNavMenuNodes property to avoid sharing INavMenuNode instances with Icon Visuals across multiple NavMenu controls
**ContextMenu Avalonia 12 Migration:**
- Refactor ContextMenu popup creation to match Avalonia 12 architecture
- Rename MenuReflectionExtensions.cs to ContextMenuReflectionExtensions.cs
- Add reflection accessors for ContextMenu private methods (PopupOpened, PopupClosed, PopupClosing, PopupKeyUp)
- Implement lazy popup creation in CreatePopup() method (called by base class Open() when _popup is null)
- Add proper event handler delegation to base class methods via reflection
- Add PopupRootShadow, OverlayHostShadow, MotionDuration, OpenMotion, CloseMotion properties
- Bind AtomUI-specific properties (ShouldUseOverlayLayer, IsMotionEnabled, shadows, motions) to internal Popup instance
- Fix CustomPopupPlacementCallback handling via Popup.HandleCustomPlacement
- Add TakesFocusFromNativeControl property (matches Avalonia base class behavior)
**Technical Details:**
- Avalonia 12 ContextMenu uses _popup field (not _popupLazy like PopupFlyoutBase)
- Base class Open() method creates popup if null, then syncs all placement properties
- AtomUI CreatePopup() injects customized Popup via reflection before base class creates default one
- Use AddClosingEventHandler instead of Closing += (AtomUI Popup uses extension method)