Forms

useClockDrag

Composable interno per la gestione dell'interazione mouse/drag sul componente Clock SVG.

Composable interno — utilizzato dal componente TimePicker / Clock SVG della libreria.

Firma TypeScript

export function useClockDrag(params: UseClockDragParams): UseClockDragResult

export interface UseClockDragParams {
  svgRef: Ref<SVGSVGElement | null>;
  center: ComputedRef<number>;
  selectionMode: Ref<ClockSelectionMode>;  // 'HOUR' | 'MINUTE'
  disabled: ComputedRef<boolean>;
  duration: ComputedRef<boolean>;
  durationNegative: ComputedRef<boolean>;
  outerHours: ComputedRef<HourItem[]>;
  innerHours: ComputedRef<HourItem[]>;
  minuteItems: ComputedRef<MinuteItem[]>;
  numberRadius: number;
  precision: ComputedRef<ClockPrecision>;
  onHourSelected: (hour: HourItem) => void;
  onMinuteSelected: (minute: MinuteItem) => void;
  onSignToggle: () => void;
  onSwitchToMinuteMode: () => void;
}

export interface UseClockDragResult {
  isDragging: Ref<boolean>;
  hoverHour: Ref<number | null>;
  hoverMinute: Ref<number | null>;
  onSvgMouseDown: (event: MouseEvent) => void;
  onSvgMouseMove: (event: MouseEvent) => void;
  onSvgMouseUp: (event: MouseEvent) => void;
  onSvgMouseLeave: () => void;
  onHourHover: (hour: HourItem | null) => void;
  onMinuteHover: (minute: MinuteItem | null) => void;
}

Parametri

I parametri principali sono ComputedRef che descrivono lo stato del clock, piu le callback da invocare agli eventi utente.

Valore di Ritorno

ProprietàTipoDescrizione
isDraggingRef<boolean>True mentre il mouse e premuto sull'SVG
hoverHourRef<number | null>Numero ora sotto hover
hoverMinuteRef<number | null>Numero minuto sotto hover
onSvgMouseDownhandlerAvvia il drag
onSvgMouseMovehandlerAggiorna hover e selezione durante drag
onSvgMouseUphandlerFinalizza la selezione e termina il drag
onSvgMouseLeavehandlerCancella hover e drag allo leave dell'SVG
onHourHoverhandlerAggiorna l'ora sotto hover
onMinuteHoverhandlerAggiorna il minuto sotto hover

Esempio

<svg
  ref="svgRef"
  @mousedown="onSvgMouseDown"
  @mousemove="onSvgMouseMove"
  @mouseup="onSvgMouseUp"
  @mouseleave="onSvgMouseLeave"
/>

Note

  • Il rilevamento della posizione usa le coordinate relative all'SVG (getBoundingClientRect).
  • La selezione avviene all'mouseup (click) o durante il drag se il mouse e sopra un elemento valido.
  • Click sull'area centrale in modalita durata con segno negativo attiva onSignToggle.
  • In modalita HOUR: dopo il click su un'ora valida, se precision !== 60, chiama automaticamente onSwitchToMinuteMode.
  • Se disabled=true tutti gli handler sono no-op.