{"version":3,"sources":["../../../src/components/Calendar/calendarContext.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { calendarFormatters } from './utils';\nimport type { EventHandler } from '@fluentui/react-utilities';\nimport type { CalendarState } from './Calendar.types';\nimport type { CalendarFormatters, DateRangeType, DayOfWeek, FirstWeekOfYear } from './utils';\nimport type { CalendarDaySelectData } from './CalendarDay/CalendarDay.types';\n\n/**\n * Configuration shared by the Calendar root, every picker below it, and every grid row and cell.\n * Pickers and their descendants read shared configuration directly from this context.\n */\nexport type CalendarContextValue = {\n  /**\n   * Allows all dates and buttons to be focused, including disabled ones.\n   */\n  allFocusable: boolean;\n\n  /** Number of columns in the month picker. */\n  calendarMonthColumns: 3 | 4;\n\n  /** Number of columns in the year picker. */\n  calendarYearColumns: 3 | 4;\n\n  /**\n   * The range selected when a date is chosen.\n   */\n  dateRangeType: DateRangeType;\n\n  /**\n   * The first day of the displayed week.\n   */\n  firstDayOfWeek: DayOfWeek;\n\n  /**\n   * The rule used to determine the first week of a year.\n   */\n  firstWeekOfYear: FirstWeekOfYear;\n\n  /**\n   * Formats dates and accessibility labels displayed by the calendar.\n   */\n  formatters: CalendarFormatters;\n\n  /**\n   * The latest selectable or navigable date.\n   */\n  maxDate?: Date;\n\n  /**\n   * The earliest selectable or navigable date.\n   */\n  minDate?: Date;\n\n  /**\n   * Dates that cannot be selected.\n   */\n  restrictedDates?: Date[];\n\n  /**\n   * Selects a date. Fired by the day grid once the date range has been resolved.\n   */\n  setValue?: EventHandler<CalendarDaySelectData>;\n\n  /**\n   * Whether week numbers appear before each week row.\n   */\n  showWeekNumbers: boolean;\n\n  /**\n   * Value of today. Pass explicitly while server rendering to keep server and client output consistent.\n   */\n  today?: Date;\n\n  /**\n   * The currently selected date.\n   */\n  value?: Date | null;\n\n  /**\n   * Days included in a work-week selection.\n   */\n  workWeekDays?: DayOfWeek[];\n};\n\n/**\n * Context values provided by Calendar.\n */\nexport type CalendarContextValues = {\n  /**\n   * Shared Calendar configuration.\n   */\n  calendar: CalendarContextValue;\n};\n\n/**\n * Default shared configuration used when a picker or grid is rendered without a Calendar above it.\n */\nexport const calendarContextDefaultValue: CalendarContextValue = {\n  allFocusable: false,\n  calendarMonthColumns: 4,\n  calendarYearColumns: 4,\n  dateRangeType: 'day',\n  firstDayOfWeek: 'sunday',\n  firstWeekOfYear: 'firstDay',\n  formatters: calendarFormatters,\n  showWeekNumbers: false,\n};\n\nconst calendarContext = React.createContext<CalendarContextValue | undefined>(undefined);\n\n/** Provides shared configuration to standalone Calendar pickers and grids. */\nexport const CalendarProvider = calendarContext.Provider;\n\n/** Reads shared Calendar configuration from the nearest CalendarProvider, or standalone defaults. */\nexport const useCalendarContext = (): CalendarContextValue =>\n  React.useContext(calendarContext) ?? calendarContextDefaultValue;\n\n/**\n * Creates state for the CalendarContextValues component.\n */\nexport function useCalendarContextValues(state: CalendarState): CalendarContextValues {\n  const {\n    allFocusable,\n    calendarMonthColumns,\n    calendarYearColumns,\n    dateRangeType,\n    firstDayOfWeek,\n    firstWeekOfYear,\n    formatters,\n    maxDate,\n    minDate,\n    restrictedDates,\n    setValue,\n    showWeekNumbers,\n    today,\n    value,\n    workWeekDays,\n  } = state;\n\n  const calendar = React.useMemo<CalendarContextValue>(\n    () => ({\n      allFocusable,\n      calendarMonthColumns,\n      calendarYearColumns,\n      dateRangeType,\n      firstDayOfWeek,\n      firstWeekOfYear,\n      formatters,\n      maxDate,\n      minDate,\n      restrictedDates,\n      setValue,\n      showWeekNumbers,\n      today,\n      value,\n      workWeekDays,\n    }),\n    [\n      allFocusable,\n      calendarMonthColumns,\n      calendarYearColumns,\n      dateRangeType,\n      firstDayOfWeek,\n      firstWeekOfYear,\n      formatters,\n      maxDate,\n      minDate,\n      restrictedDates,\n      setValue,\n      showWeekNumbers,\n      today,\n      value,\n      workWeekDays,\n    ],\n  );\n\n  return { calendar };\n}\n"],"names":["CalendarProvider","calendarContextDefaultValue","useCalendarContext","useCalendarContextValues","allFocusable","calendarMonthColumns","calendarYearColumns","dateRangeType","firstDayOfWeek","firstWeekOfYear","formatters","calendarFormatters","showWeekNumbers","calendarContext","React","createContext","undefined","Provider","useContext","state","maxDate","minDate","restrictedDates","setValue","today","value","workWeekDays","calendar","useMemo"],"mappings":"AAAA;;;;;;;;;;;;QAiHaA;eAAAA;;QAdAC;eAAAA;;QAiBAC;eAAAA;;QAMGC;eAAAA;;;;iEAxHO;uBACY;AAgG5B,MAAMF,8BAAoD;IAC/DG,cAAc;IACdC,sBAAsB;IACtBC,qBAAqB;IACrBC,eAAe;IACfC,gBAAgB;IAChBC,iBAAiB;IACjBC,YAAYC,yBAAkB;IAC9BC,iBAAiB;AACnB;AAEA,MAAMC,kBAAkBC,OAAMC,aAAa,CAAmCC;AAGvE,MAAMhB,mBAAmBa,gBAAgBI,QAAQ;AAGjD,MAAMf,qBAAqB,IAChCY,OAAMI,UAAU,CAACL,oBAAoBZ;AAKhC,SAASE,yBAAyBgB,KAAoB;IAC3D,MAAM,EACJf,YAAY,EACZC,oBAAoB,EACpBC,mBAAmB,EACnBC,aAAa,EACbC,cAAc,EACdC,eAAe,EACfC,UAAU,EACVU,OAAO,EACPC,OAAO,EACPC,eAAe,EACfC,QAAQ,EACRX,eAAe,EACfY,KAAK,EACLC,KAAK,EACLC,YAAY,EACb,GAAGP;IAEJ,MAAMQ,WAAWb,OAAMc,OAAO,CAC5B,IAAO,CAAA;YACLxB;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAU;YACAC;YACAC;YACAC;YACAX;YACAY;YACAC;YACAC;QACF,CAAA,GACA;QACEtB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAU;QACAC;QACAC;QACAC;QACAX;QACAY;QACAC;QACAC;KACD;IAGH,OAAO;QAAEC;IAAS;AACpB"}