{"version":3,"sources":["../../../../src/components/Calendar/utils/calendarNavigation.ts"],"sourcesContent":["import type * as React from 'react';\nimport { Enter } from '@fluentui/keyboard-keys';\nimport { mergeCallbacks, slot } from '@fluentui/react-utilities';\nimport type { ExtractSlotProps, Slot, SlotShorthandValue } from '@fluentui/react-utilities';\n\ntype ButtonEvent = React.MouseEvent<HTMLButtonElement> | React.KeyboardEvent<HTMLButtonElement>;\n\n// The day grid supplies the focused date while Calendar owns paging and consumer cancellation.\nconst navigationDates = new WeakMap<Event, Date>();\n\n/** Records the focused day for the parent Calendar's paging handler. */\nexport const setCalendarNavigationDate = (event: Event, date: Date): void => {\n  navigationDates.set(event, date);\n};\n\n/** Consumes the focused day associated with this paging event. */\nexport const getCalendarNavigationDate = (event: Event): Date | undefined => {\n  const date = navigationDates.get(event);\n  navigationDates.delete(event);\n  return date;\n};\n\n/**\n * The `type` reported in event data for a mouse or keyboard activation.\n */\nexport const getCalendarEventType = (event: React.SyntheticEvent | Event): 'click' | 'keydown' =>\n  event.type === 'keydown' ? 'keydown' : 'click';\n\n/**\n * Activates a header button on Enter and reports the activation as a `keydown`.\n */\nexport const onCalendarEnterKeyDown =\n  <E extends HTMLElement>(callback: (event: React.KeyboardEvent<E>) => void) =>\n  (event: React.KeyboardEvent<E>): void => {\n    if (event.key === Enter) {\n      callback(event);\n      if (!event.isDefaultPrevented()) {\n        event.preventDefault();\n      }\n    }\n  };\n\n/**\n * Default props of a previous/next navigation button. Unavailable buttons use `aria-disabled` rather than `disabled`,\n * so focus is not lost when a button becomes unavailable right after being activated.\n */\nexport const getCalendarNavigationButtonProps = (\n  inBounds: boolean,\n  allFocusable: boolean,\n  title: string,\n): React.ButtonHTMLAttributes<HTMLButtonElement> => ({\n  'aria-disabled': !inBounds,\n  'aria-label': title,\n  tabIndex: inBounds ? undefined : allFocusable ? 0 : -1,\n  title,\n  type: 'button',\n});\n\n/** Resolves navigation button props while allowing consumer handlers to cancel built-in navigation. */\nexport const resolveCalendarNavigationButton = (\n  button: ExtractSlotProps<Slot<'button'>> | SlotShorthandValue | undefined,\n  inBounds: boolean,\n  allFocusable: boolean,\n  title: string,\n  onActivate: (event: ButtonEvent) => void,\n): ExtractSlotProps<Slot<'button'>> => {\n  const buttonSlot = slot.always(button, {\n    defaultProps: getCalendarNavigationButtonProps(inBounds, allFocusable, title),\n    elementType: 'button',\n  });\n  buttonSlot.onClick = mergeCallbacks(buttonSlot.onClick, event => {\n    if (inBounds && !event.isDefaultPrevented()) {\n      onActivate(event);\n    }\n  });\n  buttonSlot.onKeyDown = mergeCallbacks(buttonSlot.onKeyDown, event => {\n    if (inBounds && !event.isDefaultPrevented()) {\n      onCalendarEnterKeyDown(onActivate)(event);\n    }\n  });\n  return buttonSlot;\n};\n"],"names":["getCalendarEventType","getCalendarNavigationButtonProps","getCalendarNavigationDate","onCalendarEnterKeyDown","resolveCalendarNavigationButton","setCalendarNavigationDate","navigationDates","WeakMap","event","date","set","get","delete","type","callback","key","Enter","isDefaultPrevented","preventDefault","inBounds","allFocusable","title","tabIndex","undefined","button","onActivate","buttonSlot","slot","always","defaultProps","elementType","onClick","mergeCallbacks","onKeyDown"],"mappings":";;;;;;;;;;;QAyBaA;eAAAA;;QAqBAC;eAAAA;;QA9BAC;eAAAA;;QAeAC;eAAAA;;QA4BAC;eAAAA;;QAhDAC;eAAAA;;;8BAVS;gCACe;AAKrC,+FAA+F;AAC/F,MAAMC,kBAAkB,IAAIC;AAGrB,MAAMF,4BAA4B,CAACG,OAAcC;IACtDH,gBAAgBI,GAAG,CAACF,OAAOC;AAC7B;AAGO,MAAMP,4BAA4B,CAACM;IACxC,MAAMC,OAAOH,gBAAgBK,GAAG,CAACH;IACjCF,gBAAgBM,MAAM,CAACJ;IACvB,OAAOC;AACT;AAKO,MAAMT,uBAAuB,CAACQ,QACnCA,MAAMK,IAAI,KAAK,YAAY,YAAY;AAKlC,MAAMV,yBACX,CAAwBW,WACxB,CAACN;QACC,IAAIA,MAAMO,GAAG,KAAKC,mBAAK,EAAE;YACvBF,SAASN;YACT,IAAI,CAACA,MAAMS,kBAAkB,IAAI;gBAC/BT,MAAMU,cAAc;YACtB;QACF;IACF;AAMK,MAAMjB,mCAAmC,CAC9CkB,UACAC,cACAC,QACmD,CAAA;QACnD,iBAAiB,CAACF;QAClB,cAAcE;QACdC,UAAUH,WAAWI,YAAYH,eAAe,IAAI,CAAC;QACrDC;QACAR,MAAM;IACR,CAAA;AAGO,MAAMT,kCAAkC,CAC7CoB,QACAL,UACAC,cACAC,OACAI;IAEA,MAAMC,aAAaC,oBAAI,CAACC,MAAM,CAACJ,QAAQ;QACrCK,cAAc5B,iCAAiCkB,UAAUC,cAAcC;QACvES,aAAa;IACf;IACAJ,WAAWK,OAAO,GAAGC,IAAAA,8BAAc,EAACN,WAAWK,OAAO,EAAEvB,CAAAA;QACtD,IAAIW,YAAY,CAACX,MAAMS,kBAAkB,IAAI;YAC3CQ,WAAWjB;QACb;IACF;IACAkB,WAAWO,SAAS,GAAGD,IAAAA,8BAAc,EAACN,WAAWO,SAAS,EAAEzB,CAAAA;QAC1D,IAAIW,YAAY,CAACX,MAAMS,kBAAkB,IAAI;YAC3Cd,uBAAuBsB,YAAYjB;QACrC;IACF;IACA,OAAOkB;AACT"}