@servicetitan/anvil2 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/{Calendar-BhCce9hE.js → Calendar-D0CczOpQ.js} +2 -2
  3. package/dist/{Calendar-BhCce9hE.js.map → Calendar-D0CczOpQ.js.map} +1 -1
  4. package/dist/{Calendar-D93exRLI.js → Calendar-oNlBgZKB.js} +2 -2
  5. package/dist/{Calendar-D93exRLI.js.map → Calendar-oNlBgZKB.js.map} +1 -1
  6. package/dist/Calendar.js +2 -2
  7. package/dist/{Checkbox-cVlWQOTq.js → Checkbox-DIY-6agd.js} +4 -4
  8. package/dist/{Checkbox-cVlWQOTq.js.map → Checkbox-DIY-6agd.js.map} +1 -1
  9. package/dist/{Checkbox-DHWOiSml.js → Checkbox-DuzAqrE7.js} +2 -2
  10. package/dist/{Checkbox-DHWOiSml.js.map → Checkbox-DuzAqrE7.js.map} +1 -1
  11. package/dist/Checkbox.js +1 -1
  12. package/dist/{Combobox-BGYeW0ZF.js → Combobox-CSGn20KQ.js} +14 -7
  13. package/dist/Combobox-CSGn20KQ.js.map +1 -0
  14. package/dist/Combobox.js +1 -1
  15. package/dist/{DataTable-Dnt-q7jf.js → DataTable-D30sE1Xt.js} +5 -5
  16. package/dist/{DataTable-Dnt-q7jf.js.map → DataTable-D30sE1Xt.js.map} +1 -1
  17. package/dist/{DateFieldRange-Dx2YbnQ-.js → DateFieldRange-DBOiqaML.js} +45 -35
  18. package/dist/DateFieldRange-DBOiqaML.js.map +1 -0
  19. package/dist/DateFieldRange.js +1 -1
  20. package/dist/{DateFieldSingle-CZg1n-n2.js → DateFieldSingle-C4hU55MP.js} +37 -28
  21. package/dist/DateFieldSingle-C4hU55MP.js.map +1 -0
  22. package/dist/DateFieldSingle.js +1 -1
  23. package/dist/{DateFieldYearless-D7-O2FLP.js → DateFieldYearless-BXkUiHIR.js} +4 -4
  24. package/dist/{DateFieldYearless-D7-O2FLP.js.map → DateFieldYearless-BXkUiHIR.js.map} +1 -1
  25. package/dist/DateFieldYearless.js +1 -1
  26. package/dist/{DateFieldYearlessRange-6EocQch6.js → DateFieldYearlessRange-CGffFnVT.js} +4 -4
  27. package/dist/{DateFieldYearlessRange-6EocQch6.js.map → DateFieldYearlessRange-CGffFnVT.js.map} +1 -1
  28. package/dist/DateFieldYearlessRange.js +1 -1
  29. package/dist/{DaysOfTheWeek-BfCVsQK7.js → DaysOfTheWeek-DJEDopC9.js} +4 -4
  30. package/dist/{DaysOfTheWeek-BfCVsQK7.js.map → DaysOfTheWeek-DJEDopC9.js.map} +1 -1
  31. package/dist/DaysOfTheWeek.js +1 -1
  32. package/dist/{Dialog-DVBl8phs.js → Dialog-BbsZMnCA.js} +3 -3
  33. package/dist/{Dialog-DVBl8phs.js.map → Dialog-BbsZMnCA.js.map} +1 -1
  34. package/dist/Dialog.js +1 -1
  35. package/dist/{Drawer-c_d511iA.js → Drawer-Dhq76ot3.js} +3 -3
  36. package/dist/{Drawer-c_d511iA.js.map → Drawer-Dhq76ot3.js.map} +1 -1
  37. package/dist/Drawer.js +1 -1
  38. package/dist/DrillDown.js +1 -1
  39. package/dist/{FieldDialog-BHDi3oXg.js → FieldDialog-CAuhkCZY.js} +7 -5
  40. package/dist/{FieldDialog-BHDi3oXg.js.map → FieldDialog-CAuhkCZY.js.map} +1 -1
  41. package/dist/{FieldLabel-DSrHbw9U.js → FieldLabel-DL0D6fvc.js} +2 -2
  42. package/dist/{FieldLabel-DSrHbw9U.js.map → FieldLabel-DL0D6fvc.js.map} +1 -1
  43. package/dist/FieldLabel.js +1 -1
  44. package/dist/{FieldMessage-B0LBQl0D.js → FieldMessage-DS0COrjp.js} +5 -5
  45. package/dist/FieldMessage-DS0COrjp.js.map +1 -0
  46. package/dist/FieldMessage.js +1 -1
  47. package/dist/{Helper-BXiz9ZRC.js → Helper-PNGm_U2X.js} +2 -2
  48. package/dist/{Helper-BXiz9ZRC.js.map → Helper-PNGm_U2X.js.map} +1 -1
  49. package/dist/{InputMask-CdJ-cfLV.js → InputMask-Ds0W2fKy.js} +2 -2
  50. package/dist/{InputMask-CdJ-cfLV.js.map → InputMask-Ds0W2fKy.js.map} +1 -1
  51. package/dist/InputMask.js +1 -1
  52. package/dist/{ListView-D7GBpVnV.js → ListView-MMmJDM--.js} +2 -2
  53. package/dist/{ListView-D7GBpVnV.js.map → ListView-MMmJDM--.js.map} +1 -1
  54. package/dist/ListView.js +1 -1
  55. package/dist/MultiSelectField.js +1 -1
  56. package/dist/{MultiSelectFieldSync-Bc7IphJ7.js → MultiSelectFieldSync-Bey99LzJ.js} +23 -4
  57. package/dist/MultiSelectFieldSync-Bey99LzJ.js.map +1 -0
  58. package/dist/{NumberField-CcGYnIFG.js → NumberField-CDkEUfXW.js} +3 -3
  59. package/dist/{NumberField-CcGYnIFG.js.map → NumberField-CDkEUfXW.js.map} +1 -1
  60. package/dist/NumberField.js +1 -1
  61. package/dist/{Page-D_IpquWk.js → Page-BVxybI-j.js} +6 -6
  62. package/dist/{Page-D_IpquWk.js.map → Page-BVxybI-j.js.map} +1 -1
  63. package/dist/Page.js +1 -1
  64. package/dist/{Popover-BxgfNjyI.js → Popover-4C5IVk8T.js} +6 -6
  65. package/dist/{Popover-BxgfNjyI.js.map → Popover-4C5IVk8T.js.map} +1 -1
  66. package/dist/Popover.css +15 -14
  67. package/dist/Popover.js +1 -1
  68. package/dist/{ProgressBar-B_g3VRUD.js → ProgressBar-BGwp-qnf.js} +3 -3
  69. package/dist/{ProgressBar-B_g3VRUD.js.map → ProgressBar-BGwp-qnf.js.map} +1 -1
  70. package/dist/ProgressBar.js +1 -1
  71. package/dist/{Radio-CtG1jOiO.js → Radio-BRcpSu-d.js} +4 -4
  72. package/dist/{Radio-CtG1jOiO.js.map → Radio-BRcpSu-d.js.map} +1 -1
  73. package/dist/{Radio-DpSPaTCO.js → Radio-D7hNws2b.js} +2 -2
  74. package/dist/{Radio-DpSPaTCO.js.map → Radio-D7hNws2b.js.map} +1 -1
  75. package/dist/Radio.js +1 -1
  76. package/dist/{SelectCard-WXTxM25t.js → SelectCard-Bag44PmE.js} +3 -3
  77. package/dist/{SelectCard-WXTxM25t.js.map → SelectCard-Bag44PmE.js.map} +1 -1
  78. package/dist/SelectCard.js +1 -1
  79. package/dist/SelectField.js +1 -1
  80. package/dist/{SelectFieldSync-0UwcyJTA.js → SelectFieldSync-CigqXq3T.js} +23 -4
  81. package/dist/SelectFieldSync-CigqXq3T.js.map +1 -0
  82. package/dist/{SelectTrigger-DhEe9uk9.js → SelectTrigger-DgsvUfyl.js} +2 -2
  83. package/dist/{SelectTrigger-DhEe9uk9.js.map → SelectTrigger-DgsvUfyl.js.map} +1 -1
  84. package/dist/SelectTrigger.js +1 -1
  85. package/dist/{SelectTriggerBase-C6HYuH_N.js → SelectTriggerBase-OxfNqdIq.js} +3 -3
  86. package/dist/{SelectTriggerBase-C6HYuH_N.js.map → SelectTriggerBase-OxfNqdIq.js.map} +1 -1
  87. package/dist/{Switch-stfkX7Jb.js → Switch-D0zwZCg4.js} +2 -2
  88. package/dist/{Switch-stfkX7Jb.js.map → Switch-D0zwZCg4.js.map} +1 -1
  89. package/dist/Switch.js +1 -1
  90. package/dist/Table.js +1 -1
  91. package/dist/{TextField-DoC8YyDM.js → TextField-BycenT6H.js} +3 -3
  92. package/dist/{TextField-DoC8YyDM.js.map → TextField-BycenT6H.js.map} +1 -1
  93. package/dist/{TextField-rpj9q7zM.js → TextField-Dfzn2HeL.js} +2 -2
  94. package/dist/{TextField-rpj9q7zM.js.map → TextField-Dfzn2HeL.js.map} +1 -1
  95. package/dist/TextField.js +1 -1
  96. package/dist/{Textarea-NLBfav5i.js → Textarea-BwbwJP6z.js} +3 -3
  97. package/dist/{Textarea-NLBfav5i.js.map → Textarea-BwbwJP6z.js.map} +1 -1
  98. package/dist/Textarea.js +1 -1
  99. package/dist/{TimeField-CnhHEvuK.js → TimeField-B0WSzSfJ.js} +3 -3
  100. package/dist/{TimeField-CnhHEvuK.js.map → TimeField-B0WSzSfJ.js.map} +1 -1
  101. package/dist/TimeField.js +1 -1
  102. package/dist/TimezoneMessage-Cnsl4cHT.js +84 -0
  103. package/dist/TimezoneMessage-Cnsl4cHT.js.map +1 -0
  104. package/dist/TimezoneMessage.css +7 -0
  105. package/dist/Toast.js +2 -2
  106. package/dist/{Toaster-Ca0dk3qg.js → Toaster-9Q_yaKGu.js} +2 -2
  107. package/dist/{Toaster-Ca0dk3qg.js.map → Toaster-9Q_yaKGu.js.map} +1 -1
  108. package/dist/{Toaster-ChpE9e3Z.js → Toaster-DHo8dnWH.js} +2 -2
  109. package/dist/{Toaster-ChpE9e3Z.js.map → Toaster-DHo8dnWH.js.map} +1 -1
  110. package/dist/{Toolbar-BO_vOFMg.js → Toolbar-CVOenuCF.js} +12 -12
  111. package/dist/{Toolbar-BO_vOFMg.js.map → Toolbar-CVOenuCF.js.map} +1 -1
  112. package/dist/Toolbar.js +1 -1
  113. package/dist/{Tooltip-CUiAJXak.js → Tooltip-Bt62hC5J.js} +5 -5
  114. package/dist/{Tooltip-CUiAJXak.js.map → Tooltip-Bt62hC5J.js.map} +1 -1
  115. package/dist/Tooltip.css +9 -8
  116. package/dist/Tooltip.js +1 -1
  117. package/dist/{YearlessDateInputWithPicker-BqDyd-Vq.js → YearlessDateInputWithPicker-ztozRk-X.js} +2 -2
  118. package/dist/{YearlessDateInputWithPicker-BqDyd-Vq.js.map → YearlessDateInputWithPicker-ztozRk-X.js.map} +1 -1
  119. package/dist/beta/components/MultiSelectField/types.d.ts +2 -0
  120. package/dist/beta/components/SelectField/types.d.ts +2 -0
  121. package/dist/beta.js +7 -7
  122. package/dist/components/DateFieldRange/DateFieldRange.d.ts +8 -1
  123. package/dist/components/DateFieldRange/internal/DateFieldRangeCalendar.d.ts +3 -1
  124. package/dist/components/DateFieldSingle/DateFieldSingle.d.ts +8 -1
  125. package/dist/components/DateFieldSingle/internal/DateFieldSingleCalendar.d.ts +3 -1
  126. package/dist/components/DateFieldSingle/internal/TimezoneMessage.d.ts +6 -0
  127. package/dist/components/DateFieldSingle/internal/utils.d.ts +11 -0
  128. package/dist/{index.esm-BZV0wNKZ.js → index.esm-K9kxJhLx.js} +2 -1
  129. package/dist/{index.esm-BZV0wNKZ.js.map → index.esm-K9kxJhLx.js.map} +1 -1
  130. package/dist/index.js +29 -29
  131. package/dist/{useDrilldown-CjabTI9n.js → useDrilldown-jbU4Cs5l.js} +2 -2
  132. package/dist/{useDrilldown-CjabTI9n.js.map → useDrilldown-jbU4Cs5l.js.map} +1 -1
  133. package/dist/{useInitialFocus-CdoVwSbr.js → useInitialFocus-BRRbylek.js} +2 -2
  134. package/dist/{useInitialFocus-CdoVwSbr.js.map → useInitialFocus-BRRbylek.js.map} +1 -1
  135. package/package.json +4 -3
  136. package/dist/Combobox-BGYeW0ZF.js.map +0 -1
  137. package/dist/DateFieldRange-Dx2YbnQ-.js.map +0 -1
  138. package/dist/DateFieldSingle-CZg1n-n2.js.map +0 -1
  139. package/dist/FieldMessage-B0LBQl0D.js.map +0 -1
  140. package/dist/MultiSelectFieldSync-Bc7IphJ7.js.map +0 -1
  141. package/dist/SelectFieldSync-0UwcyJTA.js.map +0 -1
  142. package/dist/utils-BHKRoLps.js +0 -60
  143. package/dist/utils-BHKRoLps.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar-BhCce9hE.js","sources":["../src/components/Calendar/CalendarContext.tsx","../src/components/Calendar/internal/utils.ts","../src/components/Calendar/CalendarNowButton.tsx","../src/components/Calendar/CalendarYearButton.tsx","../src/components/Calendar/CalendarPrevButton.tsx","../src/components/Calendar/CalendarNextButton.tsx","../src/components/Calendar/CalendarMonthButton.tsx","../src/components/Calendar/internal/CalendarDay.tsx","../src/components/Calendar/internal/CalendarWeek.tsx","../src/components/Calendar/CalendarMonth.tsx","../src/internal/components/YearSelector/internal/useYearSelectorKeys.ts","../src/internal/components/YearSelector/internal/YearItem.tsx","../src/internal/components/YearSelector/YearSelector.tsx","../src/components/Calendar/internal/CalendarMonthSelection.tsx","../src/beta/components/Calendar/CalendarBetaPropsContext.tsx","../src/beta/components/Calendar/useCalendarBetaProps.tsx","../src/components/Calendar/Calendar.tsx"],"sourcesContent":["import { createContext, Dispatch, SetStateAction, useContext } from \"react\";\nimport { CalendarProps, CalendarRangeValue, CalendarValue } from \"./Calendar\";\nimport { DateTime } from \"luxon\";\nimport { IanaZone } from \"../../types\";\n\ntype CalendarContextCommonProps = {\n /**\n * Whether the calendar should focus on the focused date.\n */\n disableAutofocus: boolean;\n /**\n * The focused date. Used to determine what month and year is currently selected.\n */\n focusedDate: DateTime;\n /**\n * The function to call when the focused date changes.\n *\n * @param date - The date that is focused.\n */\n setFocusedDate: Dispatch<\n SetStateAction<CalendarContextCommonProps[\"focusedDate\"]>\n >;\n /**\n * The selected month. Used to determine what month is currently selected in the month button.\n */\n selectedMonth: DateTime[\"month\"];\n /**\n * The function to call when the selected month changes.\n *\n * @param month - The month that is selected.\n */\n setSelectedMonth: Dispatch<\n SetStateAction<CalendarContextCommonProps[\"selectedMonth\"]>\n >;\n /**\n * The selected year. Used to determine what year is currently selected in the year button.\n */\n selectedYear: DateTime[\"year\"];\n /**\n * The function to call when the selected year changes.\n *\n * @param year - The year that is selected.\n */\n setSelectedYear: Dispatch<\n SetStateAction<CalendarContextCommonProps[\"selectedYear\"]>\n >;\n /**\n * The hovered date. Used to determine what date is currently hovered over.\n */\n hoveredDate: DateTime;\n setHoveredDate: Dispatch<\n SetStateAction<CalendarContextCommonProps[\"hoveredDate\"] | undefined>\n >;\n /**\n * The default time zone to use for the calendar.\n */\n defaultTimeZone: IanaZone;\n /**\n * The minimum date allowed.\n */\n minDate: DateTime | null;\n /**\n * The maximum date allowed.\n */\n maxDate: DateTime | null;\n /**\n * The days of the week and dates that are unavailable.\n */\n unavailable: {\n /**\n * The specific dates that are unavailable.\n */\n dates: Set<string>;\n /**\n * The days of the week that are unavailable.\n */\n daysOfWeek: Set<number>;\n };\n /**\n * The locale to use for the calendar.\n */\n locale: Exclude<CalendarProps[\"locale\"], undefined>;\n /**\n * The id of the calendar.\n */\n id: string;\n /**\n * The date format to use for the calendar.\n */\n dateFormat: Intl.DateTimeFormatOptions;\n /**\n * The day of the week to start the calendar on.\n */\n startDay: \"Sunday\" | \"Monday\";\n /**\n * Whether the calendar is controlled.\n */\n controlled?: boolean;\n /**\n * The date metadata to determine if a date has a pip associated with it.\n */\n dateMetadata?: Map<string, string>;\n};\n\nexport type CalendarSingleContextProps = CalendarContextCommonProps & {\n /**\n * The value of the calendar.\n */\n value: DateTime | null;\n /**\n * The function to call when the value changes.\n */\n setValue: Dispatch<SetStateAction<CalendarSingleContextProps[\"value\"]>>;\n /**\n * The function to call when the selection changes.\n *\n * @param data - The data to pass to the function.\n */\n onSelection?: (data: { value: CalendarValue }) => void;\n /**\n * Whether the calendar is in range mode.\n */\n range?: false;\n};\nexport type CalendarRangeContextProps = CalendarContextCommonProps & {\n /**\n * The value of the calendar.\n */\n value: { start?: DateTime | null; end?: DateTime | null };\n /**\n * The function to call when the value changes.\n */\n setValue: Dispatch<SetStateAction<CalendarRangeContextProps[\"value\"]>>;\n /**\n * The function to call when the selection changes.\n *\n * @param data - The data to pass to the function.\n */\n onSelection?: (data: { value: CalendarRangeValue }) => void;\n /**\n * Whether the calendar is in range mode.\n */\n range: true;\n};\n\nexport type CalendarContextProps =\n | CalendarSingleContextProps\n | CalendarRangeContextProps;\n\n/**\n * The context for the calendar.\n */\nexport const CalendarContext = createContext<CalendarContextProps | null>(null);\n\n/**\n * A hook to access the calendar context.\n *\n * @returns The calendar context.\n */\nexport function useCalendar(): CalendarContextProps {\n const context = useContext(CalendarContext);\n if (!context) {\n throw new Error(\"useCalendar must be used within a <Calendar>\");\n }\n return context;\n}\n","import {\n CalendarContextProps,\n CalendarRangeContextProps,\n} from \"../CalendarContext\";\nimport { DateTime } from \"luxon\";\n\nexport const isSameDay = (d1?: DateTime | null, d2?: DateTime | null) => {\n if (!d1 || !d2) return undefined;\n try {\n if (\n d1.hasSame(d2, \"month\") &&\n d1.hasSame(d2, \"year\") &&\n d1.hasSame(d2, \"day\")\n ) {\n return true;\n }\n return false;\n } catch {\n return false;\n }\n};\n\nexport const isSameMonth = (d1?: DateTime | null, d2?: DateTime | null) => {\n if (!d1 || !d2) return undefined;\n if (d1.hasSame(d2, \"month\") && d1.hasSame(d2, \"year\")) return true;\n return false;\n};\n\nexport const isSameYear = (d1?: DateTime | null, d2?: DateTime | null) => {\n if (!d1 || !d2) return undefined;\n if (d1.hasSame(d2, \"year\")) return true;\n return false;\n};\n\nexport const isUnavailableDate = (\n n: DateTime,\n unavailable: CalendarContextProps[\"unavailable\"],\n timeZone: string,\n) => {\n const tmpSet = new Set();\n unavailable.dates?.forEach((date) => {\n tmpSet.add(toDateString(DateTime.fromISO(date, { zone: timeZone })));\n });\n if (unavailable.daysOfWeek?.has(n.weekday)) {\n return true;\n }\n const dateISO = n.toISO();\n if (!dateISO) return;\n return tmpSet.has(\n toDateString(DateTime.fromISO(dateISO, { zone: timeZone })),\n );\n};\n\nexport const isBeyondMinDate = (\n n: DateTime,\n minDate: CalendarContextProps[\"minDate\"],\n) => minDate && minDate.toMillis() > n.toMillis();\n\nexport const isBeyondMaxDate = (\n n: DateTime,\n maxDate: CalendarContextProps[\"maxDate\"],\n) => maxDate && maxDate.toMillis() < n.toMillis();\n\nexport const isValidDate = (\n n: DateTime | undefined,\n minDate = \"\",\n maxDate = \"\",\n unavailable: CalendarContextProps[\"unavailable\"],\n timeZone: string,\n) => {\n if (!n) return false;\n const normalizedMinDate = normalizeDate(minDate, timeZone);\n const normalizedMaxDate = normalizeDate(maxDate, timeZone);\n if (normalizedMinDate && isBeyondMinDate(n, normalizedMinDate)) return false;\n if (normalizedMaxDate && isBeyondMaxDate(n, normalizedMaxDate)) return false;\n return !isUnavailableDate(n, unavailable, timeZone);\n};\n\nexport const normalizeDate = (date: string, defaultTimeZone: string) => {\n return DateTime.fromISO(date, { zone: defaultTimeZone }).startOf(\"day\");\n};\n\nexport const toDateString = (date: DateTime<boolean>) =>\n date.startOf(\"day\").toISO();\n\nexport function rangeUpdater(\n value: CalendarRangeContextProps[\"value\"],\n newDate: DateTime,\n setValue: CalendarRangeContextProps[\"setValue\"],\n onSelection: CalendarRangeContextProps[\"onSelection\"],\n) {\n if (value.start && isSameDay(value.start, newDate) && !value.end) {\n setValue((prev) => {\n return { ...prev, end: newDate };\n });\n onSelection?.({\n value: {\n start: toDateString(value.start) ?? undefined,\n end: toDateString(newDate) ?? undefined,\n },\n });\n return;\n }\n if (\n (!value.start && !value.end) ||\n (value.start && value.end) ||\n (value.start &&\n !value.end &&\n value.start.startOf(\"day\").toMillis() > newDate.startOf(\"day\").toMillis())\n ) {\n setValue({ start: newDate, end: null });\n onSelection?.({\n value: {\n start: toDateString(newDate) ?? undefined,\n end: undefined,\n },\n });\n return;\n }\n if (\n value.start &&\n !value.end &&\n value.start.startOf(\"day\").toMillis() < newDate.startOf(\"day\").toMillis()\n ) {\n setValue((prev) => {\n return { ...prev, end: newDate };\n });\n onSelection?.({\n value: {\n start: toDateString(value.start) ?? undefined,\n end: toDateString(newDate) ?? undefined,\n },\n });\n return;\n }\n if (!value.start && value.end) {\n setValue((prev) => {\n return { ...prev, start: newDate };\n });\n onSelection?.({\n value: {\n start: toDateString(newDate) ?? undefined,\n end: toDateString(value.end) ?? undefined,\n },\n });\n return;\n }\n}\n\nexport const getDateMetadata = (\n date: DateTime,\n dateMetadata: Map<string, string> | undefined,\n): string | undefined => {\n if (!dateMetadata) return undefined;\n const dateString = date.toISODate(); // Returns \"2024-01-15\" format\n return dateString ? dateMetadata.get(dateString) : undefined;\n};\n","import { DateTime } from \"luxon\";\nimport { Button, ButtonProps } from \"../Button\";\nimport { useCalendar } from \"./CalendarContext\";\nimport { MouseEvent, MouseEventHandler, forwardRef } from \"react\";\nimport {\n isBeyondMaxDate,\n isBeyondMinDate,\n isUnavailableDate,\n rangeUpdater,\n toDateString,\n} from \"./internal/utils\";\n\nexport type CalendarNowProps = {\n /**\n * @deprecated This is overridden internally\n */\n onClick?: (e: MouseEvent<HTMLButtonElement>, date: string | null) => void;\n onClickFixed?: MouseEventHandler<HTMLButtonElement> | undefined;\n} & Omit<ButtonProps, \"onClick\">;\n\n/**\n * A button that displays the current date and allows the user to select it.\n *\n * @param props - The rest of the props for the Button component.\n * @returns A button that displays the current date and allows the user to select it.\n */\nexport const CalendarNow = forwardRef<HTMLButtonElement, CalendarNowProps>(\n (props, ref) => {\n const { onClick, onClickFixed, ...rest } = props;\n const {\n setFocusedDate,\n setSelectedMonth,\n setSelectedYear,\n value,\n setValue,\n defaultTimeZone,\n unavailable,\n onSelection,\n minDate,\n maxDate,\n controlled,\n range,\n } = useCalendar();\n\n const nToday = DateTime.fromISO(DateTime.now().toISO(), {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onClickFixed?.(e);\n setFocusedDate(nToday);\n setSelectedMonth(nToday.month);\n setSelectedYear(nToday.year);\n if (!range) {\n onSelection?.({\n value: toDateString(nToday) ?? undefined,\n });\n if (!controlled) {\n setValue(nToday);\n }\n return;\n }\n rangeUpdater(value, nToday, setValue, onSelection);\n };\n\n const isDisabled =\n isBeyondMaxDate(nToday, maxDate) ||\n isBeyondMinDate(nToday, minDate) ||\n isUnavailableDate(nToday, unavailable, defaultTimeZone);\n\n return (\n <Button\n ref={ref}\n onClick={onClickHandler}\n appearance=\"ghost\"\n disabled={isDisabled}\n data-anv=\"calendar-now\"\n size=\"small\"\n {...rest}\n >\n Today\n </Button>\n );\n },\n);\n\nCalendarNow.displayName = \"CalendarNowButton\";\n","import { Button, ButtonProps } from \"../Button\";\nimport { useCalendar } from \"./CalendarContext\";\nimport { forwardRef } from \"react\";\nimport IconKeyboardArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport IconKeyboardArrowUp from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_up.svg\";\nimport { DateTime } from \"luxon\";\n\nexport type CalendarYearButtonProps = ButtonProps & {\n /**\n * The current selection state of the calendar.\n */\n calendarSelectionState: \"day\" | \"month\" | \"year\";\n};\n\n/**\n * A button that displays the current year and allows the user to select a different year.\n *\n * @param props.calendarSelectionState - The current selection state of the calendar.\n * @param props - The rest of the props for the Button component.\n * @returns A button that displays the current year and allows the user to select a different year.\n */\nexport const CalendarYearButton = forwardRef<\n HTMLButtonElement,\n CalendarYearButtonProps\n>((props, ref) => {\n const { calendarSelectionState, ...rest } = props;\n const { selectedYear, locale } = useCalendar();\n\n const currentYear = DateTime.fromObject({ year: selectedYear })\n .setLocale(locale)\n .toLocaleString({ year: \"numeric\" });\n\n return (\n <Button\n ref={ref}\n appearance=\"ghost\"\n size=\"small\"\n icon={{\n after:\n calendarSelectionState === \"year\"\n ? IconKeyboardArrowUp\n : IconKeyboardArrowDown,\n }}\n {...rest}\n >\n {currentYear}\n </Button>\n );\n});\n\nCalendarYearButton.displayName = \"CalendarYearButton\";\n","import { Button, ButtonProps } from \"../Button\";\nimport { useCalendar } from \"./CalendarContext\";\nimport { MouseEvent, forwardRef, useEffect, useState } from \"react\";\nimport Prev from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_left.svg\";\nimport styles from \"./Calendar.module.scss\";\nimport { isSameMonth } from \"./internal/utils\";\nimport cx from \"classnames\";\n\nexport type CalendarPrevProps = ButtonProps;\n\n/**\n * A button that displays the previous month and allows the user to select a different month.\n *\n * @param props.onClick - The function to call when the button is clicked.\n * @param props.className - The class name to apply to the button.\n * @param props - The rest of the props for the Button component.\n * @returns A button that displays the previous month and allows the user to select a different month.\n */\nexport const CalendarPrev = forwardRef<HTMLButtonElement, CalendarPrevProps>(\n (props, ref) => {\n const { onClick, className, ...rest } = props;\n const {\n focusedDate,\n setFocusedDate,\n minDate,\n setSelectedMonth,\n setSelectedYear,\n } = useCalendar();\n\n const [disabled, setDisabled] = useState(false);\n\n useEffect(() => {\n setDisabled(\n minDate != null &&\n focusedDate.minus({ month: 1 }).endOf(\"month\") < minDate,\n );\n }, [minDate, focusedDate]);\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n\n const targetMonth = focusedDate.minus({ month: 1 }).endOf(\"month\");\n const targetDate = focusedDate.minus({ month: 1 });\n\n // Check if we're crossing year boundary (January to December)\n const isCrossingYearBoundary =\n focusedDate.month === 1 && targetDate.month === 12;\n\n if (minDate !== null) {\n if (targetDate.toMillis() >= minDate?.toMillis()) {\n setFocusedDate(targetDate);\n setSelectedMonth(targetDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(targetDate.year);\n }\n return;\n }\n\n if (!isSameMonth(targetMonth, focusedDate)) {\n setFocusedDate(minDate);\n setSelectedMonth(minDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(minDate.year);\n }\n }\n return;\n }\n setFocusedDate(targetDate);\n setSelectedMonth(targetDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(targetDate.year);\n }\n };\n\n return (\n <Button\n ref={ref}\n onClick={onClickHandler}\n className={cx(styles[\"controller-button\"], className)}\n appearance=\"ghost\"\n size=\"small\"\n icon={Prev}\n data-anv=\"calendar-prev\"\n aria-label=\"Previous Month\"\n {...rest}\n disabled={disabled}\n />\n );\n },\n);\n\nCalendarPrev.displayName = \"CalendarPrevButton\";\n","import { Button, ButtonProps } from \"../Button\";\nimport { useCalendar } from \"./CalendarContext\";\nimport { MouseEvent, forwardRef, useEffect, useState } from \"react\";\nimport Next from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_right.svg\";\nimport { isSameMonth } from \"./internal/utils\";\nimport cx from \"classnames\";\nimport styles from \"./Calendar.module.scss\";\n\nexport type CalendarNextProps = ButtonProps;\n\n/**\n * A button that displays the next month and allows the user to select a different month.\n *\n * @param props.onClick - The function to call when the button is clicked.\n * @param props.className - The class name to apply to the button.\n * @param props - The rest of the props for the Button component.\n * @returns A button that displays the next month and allows the user to select a different month.\n */\nexport const CalendarNext = forwardRef<HTMLButtonElement, CalendarNextProps>(\n (props, ref) => {\n const { onClick, className, ...rest } = props;\n const {\n focusedDate,\n setFocusedDate,\n maxDate,\n setSelectedMonth,\n setSelectedYear,\n } = useCalendar();\n\n const [disabled, setDisabled] = useState(false);\n\n useEffect(() => {\n setDisabled(\n maxDate != null &&\n focusedDate.plus({ month: 1 }).startOf(\"month\") > maxDate,\n );\n }, [maxDate, focusedDate]);\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n\n const targetMonth = focusedDate.plus({ month: 1 }).startOf(\"month\");\n const targetDate = focusedDate.plus({ month: 1 });\n\n // Check if we're crossing year boundary (December to January)\n const isCrossingYearBoundary =\n focusedDate.month === 12 && targetDate.month === 1;\n\n if (maxDate !== null) {\n if (targetDate.toMillis() <= maxDate?.toMillis()) {\n setFocusedDate(targetDate);\n setSelectedMonth(targetDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(targetDate.year);\n }\n return;\n }\n\n if (!isSameMonth(targetMonth, focusedDate)) {\n setFocusedDate(maxDate);\n setSelectedMonth(maxDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(maxDate.year);\n }\n }\n return;\n }\n setFocusedDate(targetDate);\n setSelectedMonth(targetDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(targetDate.year);\n }\n };\n\n return (\n <Button\n onClick={onClickHandler}\n appearance=\"ghost\"\n size=\"small\"\n className={cx(styles[\"controller-button\"], className)}\n icon={Next}\n aria-label=\"Next Month\"\n data-anv=\"calendar-next\"\n ref={ref}\n {...rest}\n disabled={disabled}\n />\n );\n },\n);\n\nCalendarNext.displayName = \"CalendarNextButton\";\n","import { Button, ButtonProps } from \"../Button\";\nimport { useCalendar } from \"./CalendarContext\";\nimport { forwardRef } from \"react\";\nimport IconKeyboardArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport IconKeyboardArrowUp from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_up.svg\";\nimport { DateTime } from \"luxon\";\n\nexport type CalendarMonthButtonProps = ButtonProps & {\n /**\n * The current selection state of the calendar.\n */\n calendarSelectionState: \"day\" | \"month\" | \"year\";\n};\n\n/**\n * A button that displays the current month and allows the user to select a different month.\n *\n * @param props.calendarSelectionState - The current selection state of the calendar.\n * @param props.onClick - The function to call when the button is clicked.\n * @param props - The rest of the props for the Button component.\n * @returns A button that displays the current month and allows the user to select a different month.\n */\nexport const CalendarMonthButton = forwardRef<\n HTMLButtonElement,\n CalendarMonthButtonProps\n>((props, ref) => {\n const { calendarSelectionState, onClick, ...rest } = props;\n const { selectedMonth, locale } = useCalendar();\n\n const currentMonth = DateTime.fromObject({ month: selectedMonth })\n .setLocale(locale)\n .toFormat(\"MMM\");\n\n return (\n <Button\n ref={ref}\n appearance=\"ghost\"\n size=\"small\"\n onClick={onClick}\n icon={{\n after:\n calendarSelectionState === \"month\"\n ? IconKeyboardArrowUp\n : IconKeyboardArrowDown,\n }}\n {...rest}\n >\n {currentMonth}\n </Button>\n );\n});\n\nCalendarMonthButton.displayName = \"CalendarMonthButton\";\n","import { useCalendar } from \"../CalendarContext\";\nimport {\n ComponentPropsWithoutRef,\n KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"../Calendar.module.scss\";\nimport { DateTime, Info } from \"luxon\";\nimport {\n isBeyondMaxDate,\n isBeyondMinDate,\n isSameDay,\n isSameMonth,\n isUnavailableDate,\n rangeUpdater,\n toDateString,\n getDateMetadata,\n} from \"./utils\";\n\nexport type CalendarDayProps = ComponentPropsWithoutRef<\"td\"> & {\n /**\n * The date to display.\n */\n date: DateTime;\n};\n\n/**\n * A component that displays a day in the calendar.\n *\n * @param props.date - The date to display.\n * @param props - The rest of the props for the td element.\n * @returns A component that displays a day in the calendar.\n */\nexport const CalendarDay = forwardRef<HTMLTableCellElement, CalendarDayProps>(\n (props, ref) => {\n const { className, date, ...rest } = props;\n const context = useCalendar();\n const {\n disableAutofocus,\n value,\n setValue,\n focusedDate,\n setFocusedDate,\n hoveredDate,\n setHoveredDate,\n onSelection,\n locale,\n minDate,\n maxDate,\n unavailable,\n defaultTimeZone,\n controlled,\n id: uid,\n range,\n dateFormat,\n startDay,\n setSelectedMonth,\n setSelectedYear,\n dateMetadata,\n } = context;\n\n const initialized = useRef(false);\n\n const futureDateSelection = useCallback(\n (targetDate: DateTime) => {\n if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {\n return;\n }\n\n if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {\n let nextFocusDate = targetDate.plus({ days: 1 });\n for (let i = 0; i < 365; i++) {\n if (\n maxDate !== null &&\n nextFocusDate.toMillis() > maxDate?.toMillis()\n ) {\n break;\n }\n if (\n isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)\n ) {\n nextFocusDate = nextFocusDate.plus({ days: 1 });\n } else {\n // setHoveredDate(nextFocusDate);\n setFocusedDate(nextFocusDate);\n break;\n }\n }\n return;\n }\n\n setFocusedDate(targetDate);\n\n if (targetDate.month !== focusedDate.month) {\n setSelectedMonth(targetDate.month);\n if (targetDate.year !== focusedDate.year) {\n setSelectedYear(targetDate.year);\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps -- we don't need to re-render when the selected month or year changes\n [maxDate, setFocusedDate, defaultTimeZone, unavailable],\n );\n\n const pastDateSelection = (targetDate: DateTime) => {\n if (minDate !== null && targetDate.toMillis() < minDate?.toMillis()) {\n return;\n }\n\n if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {\n let prevFocusDate = targetDate.minus({ days: 1 });\n for (let i = 0; i < 365; i++) {\n if (\n minDate !== null &&\n prevFocusDate.toMillis() < minDate?.toMillis()\n ) {\n break;\n }\n if (isUnavailableDate(prevFocusDate, unavailable, defaultTimeZone)) {\n prevFocusDate = prevFocusDate.minus({ days: 1 });\n } else {\n // setHoveredDate(prevFocusDate);\n setFocusedDate(prevFocusDate);\n break;\n }\n }\n return;\n }\n\n setFocusedDate(targetDate);\n\n if (targetDate.month !== focusedDate.month) {\n setSelectedMonth(targetDate.month);\n if (targetDate.year !== focusedDate.year) {\n setSelectedYear(targetDate.year);\n }\n }\n };\n\n const isSelectedDate = (date: DateTime, compareDate?: DateTime) => {\n if (!range) {\n return isSameDay(date, compareDate ?? value);\n }\n if (value.start && value.end) {\n return (\n date.toMillis() >= value.start.startOf(\"day\").toMillis() &&\n date.toMillis() <= value.end.endOf(\"day\").toMillis()\n );\n }\n\n return isSameDay(date, value.start);\n };\n\n const isRange = (date: DateTime) => {\n if (!range) {\n return false;\n }\n if (value.start && value.end) {\n return (\n date.toMillis() >= value.start.startOf(\"day\").toMillis() &&\n date.toMillis() <= value.end.endOf(\"day\").toMillis() &&\n !isSameDay(value.start, date) &&\n !isSameDay(value.end, date)\n );\n }\n\n return false;\n };\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLButtonElement>) => {\n switch (e.code) {\n case \"Space\":\n case \"Enter\":\n e.preventDefault();\n if (!range) {\n if (!controlled) {\n setValue(isSameDay(value, focusedDate) ? null : focusedDate);\n }\n onSelection?.({\n value: isSameDay(value, focusedDate)\n ? undefined\n : (focusedDate\n .setZone(defaultTimeZone)\n .startOf(\"day\")\n .toISO() ?? undefined),\n });\n break;\n }\n rangeUpdater(value, focusedDate, setValue, onSelection);\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n pastDateSelection(focusedDate.minus({ days: 1 }));\n break;\n case \"ArrowRight\":\n e.preventDefault();\n futureDateSelection(focusedDate.plus({ days: 1 }));\n break;\n case \"ArrowUp\":\n e.preventDefault();\n pastDateSelection(focusedDate.minus({ days: 7 }));\n break;\n case \"ArrowDown\":\n e.preventDefault();\n futureDateSelection(focusedDate.plus({ days: 7 }));\n break;\n case \"PageUp\":\n e.preventDefault();\n if (e.shiftKey) {\n pastDateSelection(focusedDate.minus({ years: 1 }));\n break;\n }\n pastDateSelection(focusedDate.minus({ months: 1 }));\n break;\n case \"PageDown\":\n e.preventDefault();\n if (e.shiftKey) {\n futureDateSelection(focusedDate.plus({ years: 1 }));\n break;\n }\n futureDateSelection(focusedDate.plus({ months: 1 }));\n break;\n\n default:\n break;\n }\n };\n\n let startDayIndex = 6;\n switch (startDay) {\n case \"Monday\":\n startDayIndex = 0;\n break;\n case \"Sunday\":\n default:\n startDayIndex = 6;\n }\n\n const weekdaysArr: string[] = [];\n for (let i = 0; i < 7; i++) {\n const dayIndex = (startDayIndex + i) % 7;\n weekdaysArr.push(Info.weekdays(\"narrow\", { locale })[dayIndex]);\n }\n\n const firstDay = focusedDate.startOf(\"month\");\n\n const prevArr: DateTime<boolean>[] = [];\n if (firstDay.weekday !== startDayIndex + 1) {\n // Complete the first row with the previous month's dates.\n for (let i = 1; i < 8; i++) {\n const prevDay = firstDay.minus({ days: i });\n prevArr.push(prevDay);\n if (prevDay.weekday === startDayIndex + 1) break;\n }\n }\n prevArr.reverse();\n\n const onClickHandler = (d: DateTime) => {\n setFocusedDate(d);\n if (!range) {\n onSelection?.({\n value: toDateString(d.setZone(defaultTimeZone)) ?? undefined,\n });\n if (!controlled) {\n setValue(d);\n }\n return;\n }\n\n rangeUpdater(value, d, setValue, onSelection);\n };\n\n const onFocusHandler = (d: DateTime) => {\n setHoveredDate(d);\n };\n const onBlurHandler = () => {\n setHoveredDate(undefined);\n };\n\n const onMouseEnterHandler = (d: DateTime) => {\n setHoveredDate(d);\n };\n\n useEffect(() => {\n if (!initialized.current) {\n initialized.current = true;\n return;\n }\n if (!disableAutofocus) {\n requestAnimationFrame(() => {\n const targetElement =\n document.getElementById(`${uid}-${focusedDate.toISODate()}`) ||\n document.activeElement?.shadowRoot?.getElementById(\n `${uid}-${focusedDate.toISODate()}`,\n );\n targetElement?.focus();\n });\n }\n }, [focusedDate, uid, disableAutofocus]);\n\n useEffect(() => {\n if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;\n futureDateSelection(focusedDate.plus({ days: 1 }));\n }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);\n\n const isDisabled =\n !isSameMonth(date, focusedDate) ||\n isBeyondMinDate(date, minDate) ||\n isBeyondMaxDate(date, maxDate) ||\n isUnavailableDate(date, unavailable, defaultTimeZone);\n const isUnavailable = isUnavailableDate(date, unavailable, defaultTimeZone);\n\n const hasMetadata = getDateMetadata(date, dateMetadata);\n\n const hoverRange =\n range &&\n hoveredDate &&\n value.start &&\n !value.end &&\n date.toMillis() > value.start.toMillis() &&\n date.toMillis() <= hoveredDate.toMillis();\n\n const cellCx = cx(styles[\"cell\"], {\n [styles[\"selected\"]]: !isUnavailable && isSelectedDate(date),\n [styles[\"range-first\"]]:\n range &&\n value.start &&\n (value.end || hoveredDate) &&\n isSameDay(date, value.start),\n [styles[\"range-last\"]]:\n range &&\n ((value.start && value.end && isSameDay(date, value.end)) ||\n (hoverRange && isSameDay(date, hoveredDate))),\n [styles[\"range\"]]: isRange(date) || hoverRange,\n [styles[\"is-unavailable\"]]: isUnavailable,\n [styles[\"overflow\"]]: !isSameMonth(date, focusedDate),\n [styles[\"hover-last\"]]: hoverRange && isSameDay(date, hoveredDate),\n [styles[\"has-metadata\"]]: hasMetadata,\n });\n const isMinDate =\n minDate !== null && date.toMillis() <= minDate?.toMillis();\n const isMaxDate =\n maxDate !== null && date.toMillis() >= maxDate?.toMillis();\n\n return (\n <td key={date.toISODate()} role=\"gridcell\" {...rest} ref={ref}>\n {!isUnavailable && (isRange(date) || hoverRange) ? (\n <div\n role=\"presentation\"\n className={cx(styles[\"range-fill\"], {\n [styles[\"range-disabled\"]]: isDisabled,\n [styles[\"hover-last\"]]:\n hoverRange && isSameDay(date, hoveredDate),\n })}\n />\n ) : null}\n <button\n onClick={() => onClickHandler(date)}\n onFocus={() => onFocusHandler(date)}\n onBlur={() => onBlurHandler()}\n className={cellCx}\n onKeyDown={onKeyDownHandler}\n onMouseEnter={() => onMouseEnterHandler(date)}\n tabIndex={\n disableAutofocus ? -1 : isSameDay(date, focusedDate) ? 0 : -1\n }\n disabled={isDisabled ? true : undefined}\n aria-label={`${date.toLocaleString(dateFormat)}${isSelectedDate(date) ? \" selected\" : \"\"}${hasMetadata ? `, ${hasMetadata}` : \"\"}${isMinDate ? \", You are on the first available date\" : \"\"}${isMaxDate ? \", You are on the last available date\" : \"\"}`}\n id={`${uid}-${date.toISODate()}`}\n >\n {date.day}\n {hasMetadata && <span className={styles[\"pip\"]} aria-hidden=\"true\" />}\n </button>\n </td>\n );\n },\n);\n\nCalendarDay.displayName = \"CalendarDay\";\n","import { useCalendar } from \"../CalendarContext\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { DateTime, Info } from \"luxon\";\nimport { isUnavailableDate } from \"./utils\";\nimport { CalendarDay } from \"./CalendarDay\";\n\nexport type CalendarWeekProps = ComponentPropsWithoutRef<\"tr\"> & {\n /**\n * @deprecated This is overridden internally\n */\n className?: ComponentPropsWithoutRef<\"tr\">[\"className\"];\n /**\n * The dates for the week.\n */\n week: DateTime[];\n};\n\n/**\n * A component that displays a week in the calendar.\n *\n * @param props - The props for the tr element.\n * @returns A component that displays a week in the calendar.\n */\nexport const CalendarWeek = forwardRef<HTMLTableRowElement, CalendarWeekProps>(\n (props, ref) => {\n const { className, week, ...rest } = props;\n const context = useCalendar();\n const {\n focusedDate,\n setFocusedDate,\n locale,\n maxDate,\n unavailable,\n defaultTimeZone,\n id: uid,\n startDay,\n } = context;\n\n const initialized = useRef(false);\n\n const futureDateSelection = useCallback(\n (targetDate: DateTime) => {\n if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {\n return;\n }\n\n if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {\n let nextFocusDate = targetDate.plus({ days: 1 });\n for (let i = 0; i < 365; i++) {\n if (\n maxDate !== null &&\n nextFocusDate.toMillis() > maxDate?.toMillis()\n ) {\n break;\n }\n if (\n isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)\n ) {\n nextFocusDate = nextFocusDate.plus({ days: 1 });\n } else {\n // setHoveredDate(nextFocusDate);\n setFocusedDate(nextFocusDate);\n break;\n }\n }\n return;\n }\n\n setFocusedDate(targetDate);\n },\n [maxDate, setFocusedDate, defaultTimeZone, unavailable],\n );\n\n let startDayIndex = 6;\n switch (startDay) {\n case \"Monday\":\n startDayIndex = 0;\n break;\n case \"Sunday\":\n default:\n startDayIndex = 6;\n }\n\n const weekdaysArr: string[] = [];\n for (let i = 0; i < 7; i++) {\n const dayIndex = (startDayIndex + i) % 7;\n weekdaysArr.push(Info.weekdays(\"narrow\", { locale })[dayIndex]);\n }\n\n const firstDay = focusedDate.startOf(\"month\");\n\n const prevArr: DateTime<boolean>[] = [];\n if (firstDay.weekday !== startDayIndex + 1) {\n // Complete the first row with the previous month's dates.\n for (let i = 1; i < 8; i++) {\n const prevDay = firstDay.minus({ days: i });\n prevArr.push(prevDay);\n if (prevDay.weekday === startDayIndex + 1) break;\n }\n }\n prevArr.reverse();\n\n useEffect(() => {\n if (!initialized.current) return;\n setTimeout(() => {\n const targetElement = document.getElementById(\n `${uid}-${focusedDate.toISODate()}`,\n );\n targetElement?.focus();\n }, 100);\n }, [focusedDate, uid]);\n\n useEffect(() => {\n if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;\n futureDateSelection(focusedDate.plus({ days: 1 }));\n }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);\n\n return (\n <tr {...rest} ref={ref}>\n {week.map((n) => {\n return <CalendarDay date={n} key={n.toISODate()} />;\n })}\n </tr>\n );\n },\n);\n\nCalendarWeek.displayName = \"CalendarWeek\";\n","import { useCalendar } from \"./CalendarContext\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Calendar.module.scss\";\nimport { DateTime, Info } from \"luxon\";\nimport {\n isBeyondMaxDate,\n isBeyondMinDate,\n isUnavailableDate,\n} from \"./internal/utils\";\nimport { useSwipe, UseSwipeFn } from \"../../hooks\";\nimport { SrOnly } from \"../SrOnly\";\nimport { CalendarWeek } from \"./internal/CalendarWeek\";\n\nexport type CalendarMonthProps = ComponentPropsWithoutRef<\"table\">;\n\n/**\n * A component that displays a month in the calendar.\n *\n * @param props - The props for the table element.\n * @returns A component that displays a month in the calendar.\n */\nexport const CalendarMonth = forwardRef<HTMLTableElement, CalendarMonthProps>(\n (props, ref) => {\n const { className, ...rest } = props;\n const context = useCalendar();\n const {\n value,\n focusedDate,\n setFocusedDate,\n setHoveredDate,\n locale,\n minDate,\n maxDate,\n unavailable,\n defaultTimeZone,\n id: uid,\n range,\n dateFormat,\n startDay,\n } = context;\n\n const initialized = useRef(false);\n\n const ViewCX = cx(styles[\"grid\"], className);\n const futureDateSelection = useCallback(\n (targetDate: DateTime) => {\n if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {\n return;\n }\n\n if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {\n let nextFocusDate = targetDate.plus({ days: 1 });\n for (let i = 0; i < 365; i++) {\n if (\n maxDate !== null &&\n nextFocusDate.toMillis() > maxDate?.toMillis()\n ) {\n break;\n }\n if (\n isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)\n ) {\n nextFocusDate = nextFocusDate.plus({ days: 1 });\n } else {\n // setHoveredDate(nextFocusDate);\n setFocusedDate(nextFocusDate);\n break;\n }\n }\n return;\n }\n\n setFocusedDate(targetDate);\n },\n [maxDate, setFocusedDate, defaultTimeZone, unavailable],\n );\n\n let startDayIndex = 6;\n switch (startDay) {\n case \"Monday\":\n startDayIndex = 0;\n break;\n case \"Sunday\":\n default:\n startDayIndex = 6;\n }\n\n const weekdaysArr: string[] = [];\n for (let i = 0; i < 7; i++) {\n const dayIndex = (startDayIndex + i) % 7;\n weekdaysArr.push(Info.weekdays(\"narrow\", { locale })[dayIndex]);\n }\n\n const firstDay = focusedDate.startOf(\"month\");\n const lastDay = focusedDate.endOf(\"month\");\n\n const monthArr = Array.from(new Array(firstDay.daysInMonth)).map((_, i) => {\n return firstDay.plus({ days: i });\n });\n\n const prevArr: DateTime<boolean>[] = [];\n if (firstDay.weekday !== startDayIndex + 1) {\n // Complete the first row with the previous month's dates.\n for (let i = 1; i < 8; i++) {\n const prevDay = firstDay.minus({ days: i });\n prevArr.push(prevDay);\n if (prevDay.weekday === startDayIndex + 1) break;\n }\n }\n prevArr.reverse();\n\n const nextArr = Array.from(new Array(14)).map((_, i) => {\n return lastDay.plus({ days: i + 1 });\n });\n\n const fullArr: DateTime[] = [...prevArr, ...monthArr, ...nextArr];\n\n const splitArr = [...Array(Math.ceil(fullArr.length / 7))]\n .map((_, i) => fullArr.slice(7 * i, 7 + 7 * i))\n .slice(0, 6);\n\n const onMouseLeaveHandler = () => {\n setHoveredDate(undefined);\n };\n\n const onSwipe = (dir: UseSwipeFn[\"direction\"]) => {\n if (dir === \"left\") {\n const targetMonth = focusedDate.plus({ month: 1 });\n if (\n isBeyondMinDate(targetMonth, minDate) ||\n isBeyondMaxDate(targetMonth, maxDate)\n )\n return;\n setFocusedDate(targetMonth);\n return;\n }\n if (dir === \"right\") {\n const targetMonth = focusedDate.minus({ month: 1 });\n if (\n isBeyondMinDate(targetMonth, minDate) ||\n isBeyondMaxDate(targetMonth, maxDate)\n )\n return;\n setFocusedDate(targetMonth);\n return;\n }\n };\n\n const { direction, ...touchProps } = useSwipe(onSwipe);\n\n useEffect(() => {\n if (!initialized.current) return;\n setTimeout(() => {\n const targetElement = document.getElementById(\n `${uid}-${focusedDate.toISODate()}`,\n );\n targetElement?.focus();\n }, 100);\n }, [focusedDate, uid]);\n\n useEffect(() => {\n if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;\n futureDateSelection(focusedDate.plus({ days: 1 }));\n }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);\n\n return (\n <>\n <table\n ref={ref}\n data-anv=\"calendar-month\"\n onFocus={() => {\n initialized.current = true;\n }}\n onBlur={() => {\n initialized.current = false;\n }}\n className={ViewCX}\n onMouseLeave={onMouseLeaveHandler}\n role=\"grid\"\n {...rest}\n {...touchProps}\n >\n <thead aria-hidden className={styles[\"weekdays\"]}>\n <tr>\n {weekdaysArr.map((weekday, i) => {\n return (\n <th\n scope=\"col\"\n key={`${weekday}${i}`}\n className={styles[\"weekday\"]}\n >\n {weekday}\n </th>\n );\n })}\n </tr>\n <tr className={styles[\"spacer\"]}>\n <td colSpan={7} />\n </tr>\n </thead>\n <tbody\n className={styles[\"day-grid\"]}\n key={focusedDate.startOf(\"month\").toMillis()}\n >\n {splitArr.map((week, i) => {\n return <CalendarWeek week={week} key={i} />;\n })}\n </tbody>\n </table>\n {range && value ? (\n <SrOnly aria-live=\"polite\">\n {`Range starts at ${\n value.start && value.start.toLocaleString(dateFormat)\n }, ${\n value.end\n ? `ends at ${value.end.toLocaleString(dateFormat)}`\n : \"select an end date\"\n }`}\n </SrOnly>\n ) : null}\n </>\n );\n },\n);\n\nCalendarMonth.displayName = \"CalendarMonth\";\n","import { useEffect, useRef } from \"react\";\n\nexport type UseYearSelectorKeysParams = {\n columns: number;\n scrollToYear: (year: number, { focus }: { focus?: boolean }) => void;\n initialFocus: number;\n onSelect: (year: number | null) => void;\n onConfirm: () => void;\n min: number;\n max: number;\n disabled: boolean;\n pseudoFocused: number;\n setPseudoFocused: (year: number) => void;\n required: boolean;\n};\n\nexport type UseYearSelectorKeysReturn = {\n listRef: React.RefObject<HTMLDivElement>;\n};\n\nexport const useYearSelectorKeys = ({\n columns,\n scrollToYear,\n initialFocus,\n onSelect,\n onConfirm,\n pseudoFocused,\n setPseudoFocused,\n min,\n max,\n disabled,\n required,\n}: UseYearSelectorKeysParams): UseYearSelectorKeysReturn => {\n const listRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const list = listRef.current;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (pseudoFocused === null) return;\n if (\n [\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"Home\",\n \"PageUp\",\n \"PageDown\",\n \"Enter\",\n \" \",\n \"Backspace\",\n \"Delete\",\n ].includes(e.key)\n ) {\n e.preventDefault();\n if (\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowRight\" ||\n e.key === \"ArrowUp\" ||\n e.key === \"ArrowDown\"\n ) {\n const newYear =\n e.key === \"ArrowLeft\" || e.key === \"ArrowUp\"\n ? pseudoFocused - 1\n : pseudoFocused + 1;\n const clampedYear = Math.min(Math.max(newYear, min), max);\n scrollToYear(newYear, { focus: true });\n setPseudoFocused(newYear);\n if (!disabled) {\n onSelect(clampedYear);\n }\n return;\n }\n if (!required && (e.key === \"Backspace\" || e.key === \"Delete\")) {\n onSelect(null);\n return;\n }\n if (e.key === \"PageUp\" || e.key === \"PageDown\") {\n const newYear = e.key === \"PageUp\" ? min : max;\n scrollToYear(newYear, { focus: true });\n setPseudoFocused(newYear);\n if (!disabled) {\n onSelect(newYear);\n }\n return;\n }\n if (e.key === \"Home\") {\n scrollToYear(initialFocus, { focus: true });\n setPseudoFocused(initialFocus);\n if (!disabled) {\n onSelect(initialFocus);\n }\n return;\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n if (!disabled) {\n onConfirm();\n }\n return;\n }\n }\n };\n list?.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n list?.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n pseudoFocused,\n columns,\n scrollToYear,\n onSelect,\n min,\n max,\n initialFocus,\n disabled,\n setPseudoFocused,\n required,\n onConfirm,\n ]);\n\n return { listRef };\n};\n","import styles from \"../YearSelector.module.scss\";\nimport cx from \"classnames\";\nimport { ComponentPropsWithoutRef } from \"react\";\nimport SelectCard from \"../../../../components/SelectCard\";\n\ntype YearItemProps = Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> & {\n year: number;\n onChange: (year: number) => void;\n selected: boolean;\n pseudoFocused: boolean;\n disabled: boolean;\n};\nexport const YearItem = ({\n year,\n onChange,\n selected,\n pseudoFocused,\n disabled,\n onFocus,\n ...rest\n}: YearItemProps) => {\n return (\n <SelectCard\n disabled={disabled}\n id={year}\n onChange={!disabled ? () => onChange(year) : () => {}}\n checked={selected}\n checkboxProps={{\n tabIndex: -1,\n onFocus,\n }}\n flexGrow={1}\n className={cx(styles[\"year-item\"], {\n [styles[\"pseudo-focused\"]]: pseudoFocused,\n })}\n data-year={year}\n tabIndex={-1}\n {...rest}\n >\n {year}\n </SelectCard>\n );\n};\n","import { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport styles from \"./YearSelector.module.scss\";\nimport cx from \"classnames\";\nimport { useYearSelectorKeys } from \"./internal/useYearSelectorKeys\";\nimport { useOptionallyControlledState, usePrevious } from \"../../hooks\";\nimport { useMergeRefs } from \"../../../hooks\";\nimport { YearItem } from \"./internal/YearItem\";\nimport { PassThroughProps } from \"../../../types\";\n\nconst DEFAULT_MIN = 1900;\nconst DEFAULT_MAX = 2200;\n\nexport interface YearSelectorProps {\n /**\n * The minimum selectable year\n * Defaults to 1900.\n */\n min?: number;\n /**\n * The maximum selectable year.\n * Defaults to 2200.\n */\n max?: number;\n /**\n * The currently selected year\n */\n value?: number | null;\n /**\n * The default value of the selected year\n */\n defaultValue?: number;\n /**\n * The function to call when the selected year changes\n *\n * @param year - The year that is selected.\n */\n onChange?: (year: number | null) => void;\n /**\n * The function to call when the selected year is affirmatively changed.\n * This is called when the user confirms the selection by pressing Enter, pressing Space, or clicking.\n *\n * @param year - The year that is selected.\n */\n onConfirm?: (year: number | null) => void;\n /**\n * If a `value` or `defaultValue` is not provided, this will be used as the starting scroll position (and initial focus for accessibility).\n */\n startingYear?: number;\n /**\n * The number of columns to display.\n * @default 2\n */\n columns?: number;\n /**\n * The class name to apply to the component.\n */\n className?: string;\n /**\n * Controls whether a year can be deselected, i.e. set to null.\n * @default false\n */\n required?: boolean;\n /**\n * Controls whether the component allows the user to select a year.\n * @default false\n */\n disabled?: boolean;\n /**\n * The aria-label for the component.\n * @default \"Year selection\"\n */\n ariaLabel?: string;\n /**\n * Props forwarded onto the root element of the component.\n */\n rootProps?: PassThroughProps<\"div\">;\n}\nconst currentYear = new Date().getFullYear();\n\nexport const YearSelector = forwardRef<HTMLDivElement, YearSelectorProps>(\n (\n {\n min = DEFAULT_MIN,\n max = DEFAULT_MAX,\n value: valueProp,\n defaultValue: defaultValueProp,\n onChange,\n onConfirm,\n startingYear = currentYear,\n columns: columnsProp,\n className,\n required = false,\n disabled = false,\n ariaLabel = \"Year selection\",\n rootProps,\n },\n ref,\n ) => {\n const columns = Math.max(columnsProp ?? 2, 1);\n const [value, setValue] = useOptionallyControlledState<number | null>({\n controlledValue: valueProp,\n defaultValue: defaultValueProp ?? null,\n onChange,\n });\n const previousValue = usePrevious(value);\n const initialFocusYear = value ?? startingYear;\n const [pseudoFocused, setPseudoFocused] =\n useState<number>(initialFocusYear);\n\n const handleChange = (year: number | null) => {\n if (!required && value === year) {\n setValue(null);\n return;\n }\n setValue(year);\n if (year !== null) {\n setPseudoFocused(year);\n }\n };\n\n const handleItemChange = (year: number) => {\n handleChange(year);\n onConfirm?.(year);\n };\n\n const gap = 12;\n const rowHeight = 58;\n const rowCount = Math.ceil((max - min + 1) / columns);\n const initialOffset =\n ((initialFocusYear - min) * (rowHeight + gap)) / columns + gap / 2;\n\n // The virtualizer\n const rowVirtualizer = useVirtualizer({\n count: rowCount,\n getScrollElement: () => parentRef.current,\n estimateSize: () => rowHeight,\n gap,\n initialOffset,\n paddingEnd: gap / 2,\n });\n\n const scrollToYear = useCallback(\n (year: number, { focus }: { focus?: boolean } = {}) => {\n const index = Math.floor((year - min) / columns);\n rowVirtualizer.scrollToIndex(index, { align: \"center\" });\n if (focus) {\n setPseudoFocused(year);\n }\n },\n [min, columns, rowVirtualizer, setPseudoFocused],\n );\n\n const parentRef = useRef(null);\n const { listRef } = useYearSelectorKeys({\n columns,\n scrollToYear,\n initialFocus: initialFocusYear,\n onSelect: handleChange,\n onConfirm: () => onConfirm?.(value),\n min,\n max,\n disabled,\n pseudoFocused,\n setPseudoFocused,\n required,\n });\n\n useEffect(() => {\n if (value !== null && previousValue !== value) {\n scrollToYear(value, { focus: true });\n }\n }, [value, previousValue, scrollToYear, listRef]);\n\n const jointRef = useMergeRefs([parentRef, listRef, ref]);\n\n return (\n <>\n {/* The scrollable element */}\n <div\n ref={jointRef}\n aria-label={ariaLabel}\n tabIndex={0}\n className={cx(styles[\"year-selector\"], className)}\n role=\"spinbutton\"\n aria-valuenow={value ?? undefined}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={value ? `${value}` : \"No year selected\"}\n data-test={rowVirtualizer.options.paddingEnd}\n style={{\n maxHeight: `${\n rowVirtualizer.getTotalSize() + 8 // Accounts for the padding of the container\n }px`,\n }}\n {...rootProps}\n >\n {/* The large inner element to hold all of the items */}\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {/* Only the visible items in the virtualizer, manually positioned to be in view */}\n {rowVirtualizer.getVirtualItems().map((virtualItem) => {\n const years = Array.from(\n { length: columns },\n (_, i) => virtualItem.index * columns + i + min,\n );\n return (\n <div\n key={virtualItem.key}\n data-testid=\"v-row\"\n className={styles[\"year-grid\"]}\n style={{\n transform: `translateY(${virtualItem.start}px)`,\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n }}\n >\n {years.map((year) => {\n if (year > max) return <div key={year} />;\n return (\n <YearItem\n key={year}\n disabled={disabled}\n year={year}\n onChange={handleItemChange}\n selected={value === year}\n pseudoFocused={pseudoFocused === year}\n onFocus={() => {\n listRef.current?.focus();\n setPseudoFocused(year);\n }}\n />\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n </>\n );\n },\n);\n\nYearSelector.displayName = \"YearSelector\";\n","import { DateTime } from \"luxon\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Grid } from \"../../Grid\";\nimport { SelectCard } from \"../../SelectCard\";\nimport { useCalendar } from \"../CalendarContext\";\nimport styles from \"../Calendar.module.scss\";\nimport cx from \"classnames\";\nimport { useMergeRefs } from \"../../../hooks\";\n\nexport type CalendarMonthSelectionProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * The function to call when a month is selected.\n *\n * @param month - The month that is selected.\n */\n onMonthSelection: (month: DateTime[\"month\"]) => void;\n};\n\n/**\n * A component that displays a grid of month cards and allows the user to select a month.\n *\n * @param props.onMonthSelection - The function to call when a month is selected.\n * @param props - The rest of the props for the div wrapper.\n * @returns A component that displays a grid of month cards and allows the user to select a month.\n */\nexport const CalendarMonthSelection = forwardRef<\n HTMLDivElement,\n CalendarMonthSelectionProps\n>(({ onMonthSelection, ...props }, ref) => {\n const { defaultTimeZone, maxDate, minDate, selectedMonth, selectedYear } =\n useCalendar();\n\n const monthSelectionRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([ref, monthSelectionRef]);\n\n const currentDate = useMemo(\n () =>\n DateTime.fromObject({ year: selectedYear, month: selectedMonth })\n .setZone(defaultTimeZone)\n .startOf(\"day\"),\n [defaultTimeZone, selectedYear, selectedMonth],\n );\n\n const dates = useMemo(\n () =>\n Array.from({ length: 12 }, (_, i) => {\n const date = DateTime.fromObject({\n year: selectedYear,\n month: 1,\n }).plus({\n month: i,\n });\n\n // disable the select card if outside the min or max date\n const disabled =\n (minDate && date < minDate && !date.hasSame(minDate, \"month\")) ||\n (maxDate && date > maxDate && !date.hasSame(maxDate, \"month\"));\n\n return {\n month: date.month,\n disabled: disabled ?? false,\n };\n }),\n [maxDate, minDate, selectedYear],\n );\n\n const classes = cx(styles[\"month-selection\"], props.className);\n\n const [focusedIndex, setFocusedIndex] = useState(selectedMonth - 1);\n\n // reset focused index when current date changes\n useEffect(() => {\n if (minDate || maxDate) {\n // find the next enabled month\n let index = dates.findIndex(({ month }) => month === selectedMonth);\n while (dates[index].disabled && index < 11) {\n index++;\n }\n setFocusedIndex(index);\n } else {\n setFocusedIndex(selectedMonth - 1);\n }\n }, [selectedMonth, minDate, maxDate, dates]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const target = e.target as HTMLElement;\n const cards = monthSelectionRef.current?.querySelectorAll(\n \"input[type='checkbox']\",\n );\n if (!cards || cards.length === 0) {\n return;\n }\n\n const cardArray = Array.from(cards);\n const currentIndex = cardArray.indexOf(target as HTMLButtonElement);\n\n if (currentIndex === -1) return;\n\n const updateFocusedIndex = (index: number) => {\n e.preventDefault();\n (cardArray[index] as HTMLButtonElement).focus();\n setFocusedIndex(index);\n };\n\n let newIndex: number;\n switch (e.key) {\n case \"ArrowLeft\":\n newIndex = currentIndex > 0 ? currentIndex - 1 : 11;\n while (dates[newIndex].disabled) {\n newIndex = newIndex > 0 ? newIndex - 1 : 11;\n }\n updateFocusedIndex(newIndex);\n break;\n\n case \"ArrowRight\":\n newIndex = currentIndex < 11 ? currentIndex + 1 : 0;\n while (dates[newIndex].disabled) {\n newIndex = newIndex < 11 ? newIndex + 1 : 0;\n }\n updateFocusedIndex(newIndex);\n break;\n\n case \"ArrowUp\":\n if (currentIndex < 3) {\n newIndex = currentIndex + 9;\n } else {\n newIndex = currentIndex - 3;\n }\n while (dates[newIndex].disabled) {\n if (newIndex > 2) {\n newIndex -= 3;\n } else {\n newIndex += 9;\n }\n }\n updateFocusedIndex(newIndex);\n break;\n\n case \"ArrowDown\":\n if (currentIndex > 8) {\n newIndex = currentIndex - 9;\n } else {\n newIndex = currentIndex + 3;\n }\n while (dates[newIndex].disabled) {\n if (newIndex < 9) {\n newIndex += 3;\n } else {\n newIndex -= 9;\n }\n }\n updateFocusedIndex(newIndex);\n break;\n\n case \"Enter\":\n case \" \":\n e.preventDefault();\n if (!dates[currentIndex].disabled) {\n onMonthSelection(dates[currentIndex].month);\n }\n break;\n }\n },\n [dates, onMonthSelection],\n );\n\n return (\n <div\n ref={combinedRef}\n data-anv=\"calendar-month-selection\"\n className={classes}\n {...props}\n >\n <div role=\"grid\" aria-label=\"Calendar month selection\">\n <Grid\n templateColumns=\"repeat(3, minmax(0, 1fr))\"\n gap={3}\n onKeyDown={handleKeyDown}\n role=\"row\"\n >\n {dates.map(({ month, disabled }, index) => (\n <div role=\"gridcell\" key={month.toString()}>\n <SelectCard\n id={month.toString()}\n disabled={disabled}\n onChange={() => onMonthSelection(month)}\n checked={\n selectedMonth === month && selectedYear === currentDate.year\n }\n checkboxProps={{\n className: styles[\"selection-checkbox\"],\n tabIndex: focusedIndex === index ? 0 : -1,\n }}\n className={styles[\"selection-card\"]}\n >\n {DateTime.fromObject({ month }).toFormat(\"MMMM\")}\n </SelectCard>\n </div>\n ))}\n </Grid>\n </div>\n </div>\n );\n});\n\nCalendarMonthSelection.displayName = \"CalendarMonthSelection\";\n","import { createContext } from \"react\";\nimport { CalendarBetaProps } from \"./Calendar\";\n\nexport const CalendarBetaPropsContext = createContext<CalendarBetaProps>({});\n","import { useContext } from \"react\";\nimport { CalendarBetaPropsContext } from \"./CalendarBetaPropsContext\";\n\nexport const useCalendarBetaProps = () => {\n return useContext(CalendarBetaPropsContext);\n};\n","import { DateTime, type WeekdayNumbers } from \"luxon\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { IanaZone, LayoutUtilProps, Locale } from \"../../types\";\nimport { CalendarNow } from \"./CalendarNowButton\";\nimport { CalendarYearButton } from \"./CalendarYearButton\";\nimport { CalendarPrev } from \"./CalendarPrevButton\";\nimport { CalendarNext } from \"./CalendarNextButton\";\nimport { CalendarMonthButton } from \"./CalendarMonthButton\";\nimport { CalendarMonth } from \"./CalendarMonth\";\nimport {\n CalendarContext,\n CalendarContextProps,\n CalendarRangeContextProps,\n} from \"./CalendarContext\";\nimport { useMergeRefs } from \"../../hooks\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport styles from \"./Calendar.module.scss\";\nimport cx from \"classnames\";\nimport { normalizeDate } from \"./internal/utils\";\nimport { CalendarMonthSelection } from \"./internal/CalendarMonthSelection\";\nimport { YearSelector } from \"../../internal/components/YearSelector\";\nimport { useCalendarBetaProps } from \"../../beta\";\n\nexport type CalendarValue = string | undefined;\n\nexport type CalendarRangeValue = { start?: string; end?: string } | undefined;\n\nconst toolbarFocusStates = [\"month\", \"year\", \"next\", \"prev\", \"now\"] as const;\n\n/**\n * Props for the Calendar component\n * @extends Omit<ComponentPropsWithoutRef<\"div\">, \"value\" | \"defaultValue\">\n * @extends LayoutUtilProps\n */\ntype CalendarCommonProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"value\" | \"defaultValue\"\n> & {\n /**\n * @deprecated children will be overridden internally\n */\n children?: ComponentPropsWithoutRef<\"div\">[\"children\"];\n /**\n * The default focused date. Used to determine what month and year is shown.\n */\n defaultFocusedDate?: string | null;\n /**\n * The focused date. Used to determine what month and year is currently shown.\n */\n focusedDate?: string | null;\n /**\n * The minimum date allowed.\n */\n minDate?: string;\n /**\n * The maximum date allowed.\n */\n maxDate?: string;\n /**\n * The days of the week and dates that are unavailable.\n */\n unavailable?: {\n /**\n * The days of the week that are unavailable.\n */\n daysOfWeek?: WeekdayNumbers[];\n /**\n * The specific dates that are unavailable.\n */\n dates?: string[];\n };\n /**\n * The locale to use for the calendar.\n */\n locale?: Locale;\n /**\n * The time zone to use for the calendar.\n */\n defaultTimeZone?: IanaZone;\n /**\n * The day of the week to start the calendar on.\n */\n startDay?: \"Sunday\" | \"Monday\";\n\n /**\n * Whether the calendar should focus on the focused date.\n * @internal - Do not use this prop directly.\n */\n _disableAutofocus?: boolean;\n /** Whether the calendar should set all tab indexes to -1.\n * @internal - Do not use this prop directly.\n */\n _disableFocus?: boolean;\n};\n\ntype CalendarSingleProps = CalendarCommonProps & {\n /**\n * The function to call when the value changes.\n *\n * @param data - The data to pass to the function.\n */\n onSelection?: (data: { value: CalendarValue }) => void;\n /**\n * The default date value for uncontrolled mode.\n */\n defaultValue?: string | false;\n /**\n * The value for controlled mode.\n */\n value?: string;\n /**\n * Whether the calendar is in range mode.\n */\n range?: false;\n};\n\ntype CalendarRangeProps = CalendarCommonProps & {\n /**\n * The function to call when the value changes.\n *\n * @param data.value - The date value that is selected.\n */\n onSelection?: (data: { value: CalendarRangeValue }) => void;\n /**\n * The default date value for uncontrolled mode.\n */\n defaultValue?: { start?: string; end?: string };\n /**\n * The date value for controlled mode.\n */\n value?: { start?: string; end?: string };\n /**\n * Whether the calendar is in range mode.\n */\n range: true;\n};\n\nexport type CalendarProps = LayoutUtilProps &\n (CalendarSingleProps | CalendarRangeProps);\n\n/**\n * Calendar component for viewing and selecting a date or range of dates.\n *\n * Features:\n * - Single date and date range selection modes\n * - Month and year navigation with header buttons\n * - Configurable start day (Sunday or Monday)\n * - Date range restrictions with min/max dates\n * - Unavailable dates and days of week support\n * - Locale and timezone customization\n * - Full accessibility support with ARIA attributes\n * - Keyboard navigation support\n * - Responsive design with automatic width detection\n * - Month and year selection views\n * - Today button for quick navigation\n *\n * @example\n * <Calendar\n * value=\"2024-01-15\"\n * onSelection={({ value }) => console.log('Selected:', value)}\n * minDate=\"2024-01-01\"\n * maxDate=\"2024-12-31\"\n * />\n */\nexport const CalendarElement = forwardRef<HTMLDivElement, CalendarProps>(\n (props, ref) => {\n const uid = useId();\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n children,\n focusedDate: focusProp,\n defaultFocusedDate,\n locale = Intl.DateTimeFormat().resolvedOptions().locale as Locale,\n defaultTimeZone = Intl.DateTimeFormat().resolvedOptions()\n .timeZone as IanaZone,\n startDay = \"Sunday\",\n minDate,\n maxDate,\n unavailable = {\n dates: [],\n daysOfWeek: [],\n },\n id,\n style,\n value: iValue,\n defaultValue: iDefaultValue,\n onSelection,\n range,\n className,\n _disableAutofocus,\n _disableFocus,\n ...remainingProps\n } = componentProps;\n\n const { dateMetadata, onMonthView } = useCalendarBetaProps();\n\n const calendarRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([ref, calendarRef]);\n const lastIValue = useRef(iValue);\n const yearButtonRef = useRef<HTMLButtonElement>(null);\n const monthButtonRef = useRef<HTMLButtonElement>(null);\n const headerRef = useRef<HTMLSpanElement>(null);\n const [toolbarFocus, setToolbarFocus] = useState<\n (typeof toolbarFocusStates)[number]\n >(toolbarFocusStates[0]);\n\n const [calendarWidth, setCalendarWidth] = useState<number | undefined>(\n undefined,\n );\n\n const [calendarSelectionState, setCalendarSelectionState] = useState<\n \"day\" | \"month\" | \"year\"\n >(\"day\");\n\n const visibleHeaderButtons = useMemo(() => {\n if (calendarSelectionState !== \"day\") {\n return toolbarFocusStates.slice(0, 2);\n }\n return toolbarFocusStates;\n }, [calendarSelectionState]);\n\n useEffect(() => {\n if (!calendarRef.current || style?.width != null) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const width = entry.contentRect.width;\n if (calendarSelectionState === \"day\" && width > 100) {\n setCalendarWidth(width);\n }\n }\n });\n\n resizeObserver.observe(calendarRef.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [calendarSelectionState, style?.width]);\n\n // Common\n const styleCombined = {\n width: calendarWidth,\n ...style,\n ...layoutStyles,\n };\n\n const classNameCombined = cx(styles[\"calendar\"], className);\n\n const { nDate, nDefaultDate, nToday } = useMemo(\n () => ({\n nDate: iValue\n ? typeof iValue === \"string\"\n ? normalizeDate(iValue, defaultTimeZone)\n : {\n start: iValue.start\n ? normalizeDate(iValue.start, defaultTimeZone)\n : null,\n end: iValue.end\n ? normalizeDate(iValue.end, defaultTimeZone)\n : null,\n }\n : null,\n nDefaultDate: iDefaultValue\n ? typeof iDefaultValue === \"string\"\n ? normalizeDate(iDefaultValue, defaultTimeZone)\n : {\n start: iDefaultValue.start\n ? normalizeDate(iDefaultValue.start, defaultTimeZone)\n : null,\n end: iDefaultValue?.end\n ? normalizeDate(iDefaultValue.end, defaultTimeZone)\n : null,\n }\n : null,\n nToday:\n typeof iValue === \"string\"\n ? normalizeDate(DateTime.now().toISO(), defaultTimeZone)\n : {\n start: normalizeDate(DateTime.now().toISO(), defaultTimeZone),\n end: normalizeDate(DateTime.now().toISO(), defaultTimeZone),\n },\n }),\n [iValue, iDefaultValue, defaultTimeZone],\n );\n\n const [value, setValue] = useState<\n | CalendarContextProps[\"value\"]\n | CalendarRangeContextProps[\"value\"]\n | undefined\n >(nDate ?? nDefaultDate ?? nToday);\n\n const getInitialDate = useMemo(() => {\n if (defaultFocusedDate) {\n return normalizeDate(defaultFocusedDate, defaultTimeZone);\n }\n if (iDefaultValue) {\n const date =\n typeof iDefaultValue === \"string\"\n ? normalizeDate(iDefaultValue, defaultTimeZone)\n : normalizeDate(\n iDefaultValue.start ?? iDefaultValue.end ?? \"\",\n defaultTimeZone,\n );\n return date;\n }\n if (\n !DateTime.isDateTime(nDate) &&\n !DateTime.isDateTime(nDefaultDate) &&\n !DateTime.isDateTime(nToday)\n ) {\n return nDate?.start ?? nDefaultDate?.start ?? nToday?.start;\n }\n\n return (nDate ?? nDefaultDate ?? nToday) as DateTime;\n }, [\n defaultFocusedDate,\n iDefaultValue,\n nDate,\n nDefaultDate,\n nToday,\n defaultTimeZone,\n ]);\n\n const initialDate = getInitialDate ?? DateTime.now();\n\n const [focusedDate, setFocusedDate] = useState<\n | CalendarContextProps[\"focusedDate\"]\n | CalendarRangeContextProps[\"focusedDate\"]\n | undefined\n >(initialDate);\n\n const [hoveredDate, setHoveredDate] = useState<\n | CalendarContextProps[\"hoveredDate\"]\n | CalendarRangeContextProps[\"hoveredDate\"]\n >();\n\n const [selectedMonth, setSelectedMonth] = useState<DateTime[\"month\"]>(\n initialDate.month,\n );\n const [selectedYear, setSelectedYear] = useState<DateTime[\"year\"]>(\n initialDate.year,\n );\n\n const currentVisibleMonth = useMemo(() => {\n return {\n year: focusedDate?.year ?? selectedYear,\n month: focusedDate?.month ?? selectedMonth,\n };\n }, [focusedDate?.month, focusedDate?.year, selectedYear, selectedMonth]);\n\n useEffect(\n () => onMonthView?.(currentVisibleMonth),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- omit onMonthView from deps because we don't want to trigger infinite re-renders\n [currentVisibleMonth],\n );\n\n useEffect(() => {\n if (!focusProp && !defaultFocusedDate) return;\n if (focusProp) {\n setFocusedDate(normalizeDate(focusProp, defaultTimeZone));\n } else if (defaultFocusedDate) {\n setFocusedDate(normalizeDate(defaultFocusedDate, defaultTimeZone));\n setSelectedMonth(\n normalizeDate(defaultFocusedDate, defaultTimeZone).month,\n );\n setSelectedYear(\n normalizeDate(defaultFocusedDate, defaultTimeZone).year,\n );\n }\n // defaultTimeZone should not rerender\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusProp, defaultFocusedDate]);\n\n useEffect(() => {\n if (!iValue) {\n lastIValue.current = iValue;\n return;\n }\n if (typeof iValue === \"string\") {\n setValue(normalizeDate(iValue, defaultTimeZone));\n setFocusedDate(normalizeDate(iValue, defaultTimeZone));\n } else if (\n iValue.end &&\n (typeof lastIValue.current !== \"object\" ||\n lastIValue?.current?.end !== iValue.end)\n ) {\n setValue({\n start: iValue.start\n ? normalizeDate(iValue.start, defaultTimeZone)\n : null,\n end: iValue.end ? normalizeDate(iValue.end, defaultTimeZone) : null,\n });\n setFocusedDate(normalizeDate(iValue.end, defaultTimeZone));\n } else if (\n iValue.start &&\n (typeof lastIValue.current !== \"object\" ||\n lastIValue?.current?.start !== iValue.start)\n ) {\n setFocusedDate(normalizeDate(iValue.start, defaultTimeZone));\n }\n lastIValue.current = iValue;\n // defaultTimeZone should not rerender\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [iValue]);\n\n // Memoize normalized minDate and maxDate to avoid new references on every render\n const normalizedMinDate = useMemo(\n () => (minDate ? normalizeDate(minDate, defaultTimeZone) : null),\n [minDate, defaultTimeZone],\n );\n const normalizedMaxDate = useMemo(\n () => (maxDate ? normalizeDate(maxDate, defaultTimeZone) : null),\n [maxDate, defaultTimeZone],\n );\n\n const dateMetadataMap = useMemo(() => {\n if (!dateMetadata) return undefined;\n return new Map(dateMetadata.map((item) => [item.date, item.context]));\n }, [dateMetadata]);\n\n const providerValue = useMemo(() => {\n // TODO FUTURE: Hookup with dateformat from localization provider\n const format = {\n weekday: \"long\",\n month: \"long\",\n day: \"2-digit\",\n year: \"numeric\",\n } as const;\n\n return {\n disableAutofocus: _disableAutofocus ?? false,\n focusedDate,\n setFocusedDate,\n selectedMonth,\n setSelectedMonth,\n selectedYear,\n setSelectedYear,\n hoveredDate,\n setHoveredDate,\n value,\n setValue,\n defaultTimeZone,\n id: id ?? uid,\n onSelection,\n controlled: !!iValue,\n range,\n minDate: normalizedMinDate,\n maxDate: normalizedMaxDate,\n unavailable: {\n dates: new Set(unavailable.dates),\n daysOfWeek: new Set(unavailable.daysOfWeek),\n },\n locale,\n dateFormat: format,\n startDay,\n dateMetadata: dateMetadataMap,\n };\n }, [\n focusedDate,\n selectedMonth,\n selectedYear,\n hoveredDate,\n id,\n locale,\n normalizedMaxDate,\n normalizedMinDate,\n iValue,\n onSelection,\n range,\n defaultTimeZone,\n uid,\n unavailable,\n value,\n startDay,\n dateMetadataMap,\n _disableAutofocus,\n ]);\n\n const handleHeaderKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowLeft\":\n e.preventDefault();\n setToolbarFocus((previousToolbarFocus) => {\n const newToolbarFocus =\n previousToolbarFocus === visibleHeaderButtons[0]\n ? visibleHeaderButtons[visibleHeaderButtons.length - 1]\n : (visibleHeaderButtons[\n visibleHeaderButtons.indexOf(previousToolbarFocus) - 1\n ] ?? visibleHeaderButtons[visibleHeaderButtons.length - 1]);\n const button = headerRef.current?.querySelector(\n `[data-calendar-header-button-name=\"${newToolbarFocus}\"]`,\n );\n if (\n button &&\n \"focus\" in button &&\n typeof (button as HTMLElement).focus === \"function\"\n ) {\n (button as HTMLElement).focus();\n }\n return newToolbarFocus;\n });\n\n break;\n case \"ArrowRight\":\n e.preventDefault();\n setToolbarFocus((previousToolbarFocus) => {\n const newToolbarFocus =\n previousToolbarFocus ===\n visibleHeaderButtons[visibleHeaderButtons.length - 1]\n ? visibleHeaderButtons[0]\n : (visibleHeaderButtons[\n visibleHeaderButtons.indexOf(previousToolbarFocus) + 1\n ] ?? visibleHeaderButtons[0]);\n const button = headerRef.current?.querySelector(\n `[data-calendar-header-button-name=\"${newToolbarFocus}\"]`,\n );\n if (\n button &&\n \"focus\" in button &&\n typeof (button as HTMLElement).focus === \"function\"\n ) {\n (button as HTMLElement).focus();\n }\n return newToolbarFocus;\n });\n }\n },\n [visibleHeaderButtons],\n );\n\n const handleMonthSelection = useCallback(\n (month: DateTime[\"month\"]) => {\n monthButtonRef.current?.focus();\n setToolbarFocus(toolbarFocusStates[0]);\n setSelectedMonth(month);\n setFocusedDate(\n DateTime.fromObject(\n {\n year: focusedDate?.year ?? 1,\n month: month,\n day: 1,\n },\n { zone: defaultTimeZone },\n ).startOf(\"day\"),\n );\n setCalendarSelectionState(\"day\");\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [focusedDate],\n );\n\n const handleYearSelection = useCallback(\n (year: number | null) => {\n if (year === null) return;\n yearButtonRef.current?.focus();\n setToolbarFocus(toolbarFocusStates[1]);\n setSelectedYear(year);\n setFocusedDate(\n DateTime.fromObject(\n {\n year: year,\n month: focusedDate?.month ?? 1,\n day: 1,\n },\n { zone: defaultTimeZone },\n ).startOf(\"day\"),\n );\n setCalendarSelectionState(\"day\");\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [focusedDate?.month],\n );\n\n return (\n <CalendarContext.Provider value={providerValue as CalendarContextProps}>\n <div\n ref={combinedRef}\n id={id ?? uid}\n style={styleCombined}\n className={classNameCombined}\n data-anv=\"calendar\"\n {...remainingProps}\n >\n <div className={styles[\"header\"]}>\n <span\n ref={headerRef}\n aria-label=\"Calendar navigation\"\n role=\"toolbar\"\n onKeyDown={handleHeaderKeyDown}\n className={styles[\"controller\"]}\n >\n <CalendarMonthButton\n ref={monthButtonRef}\n tabIndex={\n _disableFocus\n ? -1\n : toolbarFocus === toolbarFocusStates[0]\n ? 0\n : -1\n }\n data-calendar-header-button\n data-calendar-header-button-name={toolbarFocusStates[0]}\n calendarSelectionState={calendarSelectionState}\n onClick={() => {\n setCalendarSelectionState((prev) =>\n prev === \"month\" ? \"day\" : \"month\",\n );\n setToolbarFocus(toolbarFocusStates[0]);\n }}\n />\n <CalendarYearButton\n ref={yearButtonRef}\n tabIndex={\n _disableFocus\n ? -1\n : toolbarFocus === toolbarFocusStates[1]\n ? 0\n : -1\n }\n data-calendar-header-button\n data-calendar-header-button-name={toolbarFocusStates[1]}\n calendarSelectionState={calendarSelectionState}\n onClick={() => {\n setCalendarSelectionState((prev) =>\n prev === \"year\" ? \"day\" : \"year\",\n );\n setToolbarFocus(toolbarFocusStates[1]);\n }}\n />\n {calendarSelectionState === \"day\" && (\n <>\n <CalendarPrev\n tabIndex={\n _disableFocus\n ? -1\n : toolbarFocus === toolbarFocusStates[2]\n ? 0\n : -1\n }\n data-calendar-header-button\n data-calendar-header-button-name={toolbarFocusStates[2]}\n onClick={() => setToolbarFocus(toolbarFocusStates[2])}\n />\n <CalendarNext\n tabIndex={\n _disableFocus\n ? -1\n : toolbarFocus === toolbarFocusStates[3]\n ? 0\n : -1\n }\n data-calendar-header-button\n data-calendar-header-button-name={toolbarFocusStates[3]}\n onClick={() => setToolbarFocus(toolbarFocusStates[3])}\n />\n <CalendarNow\n tabIndex={\n _disableFocus\n ? -1\n : toolbarFocus === toolbarFocusStates[4]\n ? 0\n : -1\n }\n data-calendar-header-button\n data-calendar-header-button-name={toolbarFocusStates[4]}\n onClickFixed={() => setToolbarFocus(toolbarFocusStates[4])}\n />\n </>\n )}\n </span>\n </div>\n {calendarSelectionState === \"day\" && <CalendarMonth />}\n {calendarSelectionState === \"month\" && (\n <CalendarMonthSelection onMonthSelection={handleMonthSelection} />\n )}\n {calendarSelectionState === \"year\" && (\n // Wrapper div provides some manual offsetting to account for internal padding of the year selector\n <div className={styles[\"year-selector\"]}>\n <YearSelector\n onConfirm={handleYearSelection}\n required\n defaultValue={selectedYear}\n min={normalizedMinDate?.year}\n max={normalizedMaxDate?.year}\n />\n </div>\n )}\n </div>\n </CalendarContext.Provider>\n );\n },\n);\n\nCalendarElement.displayName = \"Calendar\";\n\n// export const useCalendar = useCoreCalendar;\n\n/**\n * Calendar component for viewing and selecting a date or range of dates.\n *\n * Features:\n * - Single date and date range selection modes\n * - Month and year navigation with header buttons\n * - Configurable start day (Sunday or Monday)\n * - Date range restrictions with min/max dates\n * - Unavailable dates and days of week support\n * - Locale and timezone customization\n * - Full accessibility support with ARIA attributes\n * - Keyboard navigation support\n * - Responsive design with automatic width detection\n * - Month and year selection views\n * - Today button for quick navigation\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar\n * value=\"2024-01-15\"\n * onSelection={({ value }) => console.log('Selected:', value)}\n * minDate=\"2024-01-01\"\n * maxDate=\"2024-12-31\"\n * />\n */\nexport const Calendar = Object.assign(CalendarElement, {\n /**\n * Calendar.Now component for navigating to today's date.\n *\n * Features:\n * - Quick navigation to current date\n * - Accessible button with proper ARIA labels\n * - Integrates with calendar context\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.Now />\n */\n Now: CalendarNow,\n /**\n * Calendar.Month component for displaying the month grid.\n *\n * Features:\n * - Displays calendar days in a table format\n * - Handles day selection and navigation\n * - Supports range selection mode\n * - Accessible with proper ARIA attributes\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.Month />\n */\n Month: CalendarMonth,\n /**\n * Calendar.Next component for navigating to the next month.\n *\n * Features:\n * - Navigation to next month\n * - Accessible button with proper ARIA labels\n * - Integrates with calendar context\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.Next />\n */\n Next: CalendarNext,\n /**\n * Calendar.Prev component for navigating to the previous month.\n *\n * Features:\n * - Navigation to previous month\n * - Accessible button with proper ARIA labels\n * - Integrates with calendar context\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.Prev />\n */\n Prev: CalendarPrev,\n /**\n * Calendar.MonthButton component for switching to month selection view.\n *\n * Features:\n * - Switches calendar to month selection mode\n * - Accessible button with proper ARIA labels\n * - Integrates with calendar context\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.MonthButton />\n */\n MonthButton: CalendarMonthButton,\n /**\n * Calendar.YearButton component for switching to year selection view.\n *\n * Features:\n * - Switches calendar to year selection mode\n * - Accessible button with proper ARIA labels\n * - Integrates with calendar context\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.YearButton />\n */\n YearButton: CalendarYearButton,\n});\n"],"names":["IconKeyboardArrowUp","IconKeyboardArrowDown","styles","Prev","Next","date"],"mappings":"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"}
1
+ {"version":3,"file":"Calendar-D0CczOpQ.js","sources":["../src/components/Calendar/CalendarContext.tsx","../src/components/Calendar/internal/utils.ts","../src/components/Calendar/CalendarNowButton.tsx","../src/components/Calendar/CalendarYearButton.tsx","../src/components/Calendar/CalendarPrevButton.tsx","../src/components/Calendar/CalendarNextButton.tsx","../src/components/Calendar/CalendarMonthButton.tsx","../src/components/Calendar/internal/CalendarDay.tsx","../src/components/Calendar/internal/CalendarWeek.tsx","../src/components/Calendar/CalendarMonth.tsx","../src/internal/components/YearSelector/internal/useYearSelectorKeys.ts","../src/internal/components/YearSelector/internal/YearItem.tsx","../src/internal/components/YearSelector/YearSelector.tsx","../src/components/Calendar/internal/CalendarMonthSelection.tsx","../src/beta/components/Calendar/CalendarBetaPropsContext.tsx","../src/beta/components/Calendar/useCalendarBetaProps.tsx","../src/components/Calendar/Calendar.tsx"],"sourcesContent":["import { createContext, Dispatch, SetStateAction, useContext } from \"react\";\nimport { CalendarProps, CalendarRangeValue, CalendarValue } from \"./Calendar\";\nimport { DateTime } from \"luxon\";\nimport { IanaZone } from \"../../types\";\n\ntype CalendarContextCommonProps = {\n /**\n * Whether the calendar should focus on the focused date.\n */\n disableAutofocus: boolean;\n /**\n * The focused date. Used to determine what month and year is currently selected.\n */\n focusedDate: DateTime;\n /**\n * The function to call when the focused date changes.\n *\n * @param date - The date that is focused.\n */\n setFocusedDate: Dispatch<\n SetStateAction<CalendarContextCommonProps[\"focusedDate\"]>\n >;\n /**\n * The selected month. Used to determine what month is currently selected in the month button.\n */\n selectedMonth: DateTime[\"month\"];\n /**\n * The function to call when the selected month changes.\n *\n * @param month - The month that is selected.\n */\n setSelectedMonth: Dispatch<\n SetStateAction<CalendarContextCommonProps[\"selectedMonth\"]>\n >;\n /**\n * The selected year. Used to determine what year is currently selected in the year button.\n */\n selectedYear: DateTime[\"year\"];\n /**\n * The function to call when the selected year changes.\n *\n * @param year - The year that is selected.\n */\n setSelectedYear: Dispatch<\n SetStateAction<CalendarContextCommonProps[\"selectedYear\"]>\n >;\n /**\n * The hovered date. Used to determine what date is currently hovered over.\n */\n hoveredDate: DateTime;\n setHoveredDate: Dispatch<\n SetStateAction<CalendarContextCommonProps[\"hoveredDate\"] | undefined>\n >;\n /**\n * The default time zone to use for the calendar.\n */\n defaultTimeZone: IanaZone;\n /**\n * The minimum date allowed.\n */\n minDate: DateTime | null;\n /**\n * The maximum date allowed.\n */\n maxDate: DateTime | null;\n /**\n * The days of the week and dates that are unavailable.\n */\n unavailable: {\n /**\n * The specific dates that are unavailable.\n */\n dates: Set<string>;\n /**\n * The days of the week that are unavailable.\n */\n daysOfWeek: Set<number>;\n };\n /**\n * The locale to use for the calendar.\n */\n locale: Exclude<CalendarProps[\"locale\"], undefined>;\n /**\n * The id of the calendar.\n */\n id: string;\n /**\n * The date format to use for the calendar.\n */\n dateFormat: Intl.DateTimeFormatOptions;\n /**\n * The day of the week to start the calendar on.\n */\n startDay: \"Sunday\" | \"Monday\";\n /**\n * Whether the calendar is controlled.\n */\n controlled?: boolean;\n /**\n * The date metadata to determine if a date has a pip associated with it.\n */\n dateMetadata?: Map<string, string>;\n};\n\nexport type CalendarSingleContextProps = CalendarContextCommonProps & {\n /**\n * The value of the calendar.\n */\n value: DateTime | null;\n /**\n * The function to call when the value changes.\n */\n setValue: Dispatch<SetStateAction<CalendarSingleContextProps[\"value\"]>>;\n /**\n * The function to call when the selection changes.\n *\n * @param data - The data to pass to the function.\n */\n onSelection?: (data: { value: CalendarValue }) => void;\n /**\n * Whether the calendar is in range mode.\n */\n range?: false;\n};\nexport type CalendarRangeContextProps = CalendarContextCommonProps & {\n /**\n * The value of the calendar.\n */\n value: { start?: DateTime | null; end?: DateTime | null };\n /**\n * The function to call when the value changes.\n */\n setValue: Dispatch<SetStateAction<CalendarRangeContextProps[\"value\"]>>;\n /**\n * The function to call when the selection changes.\n *\n * @param data - The data to pass to the function.\n */\n onSelection?: (data: { value: CalendarRangeValue }) => void;\n /**\n * Whether the calendar is in range mode.\n */\n range: true;\n};\n\nexport type CalendarContextProps =\n | CalendarSingleContextProps\n | CalendarRangeContextProps;\n\n/**\n * The context for the calendar.\n */\nexport const CalendarContext = createContext<CalendarContextProps | null>(null);\n\n/**\n * A hook to access the calendar context.\n *\n * @returns The calendar context.\n */\nexport function useCalendar(): CalendarContextProps {\n const context = useContext(CalendarContext);\n if (!context) {\n throw new Error(\"useCalendar must be used within a <Calendar>\");\n }\n return context;\n}\n","import {\n CalendarContextProps,\n CalendarRangeContextProps,\n} from \"../CalendarContext\";\nimport { DateTime } from \"luxon\";\n\nexport const isSameDay = (d1?: DateTime | null, d2?: DateTime | null) => {\n if (!d1 || !d2) return undefined;\n try {\n if (\n d1.hasSame(d2, \"month\") &&\n d1.hasSame(d2, \"year\") &&\n d1.hasSame(d2, \"day\")\n ) {\n return true;\n }\n return false;\n } catch {\n return false;\n }\n};\n\nexport const isSameMonth = (d1?: DateTime | null, d2?: DateTime | null) => {\n if (!d1 || !d2) return undefined;\n if (d1.hasSame(d2, \"month\") && d1.hasSame(d2, \"year\")) return true;\n return false;\n};\n\nexport const isSameYear = (d1?: DateTime | null, d2?: DateTime | null) => {\n if (!d1 || !d2) return undefined;\n if (d1.hasSame(d2, \"year\")) return true;\n return false;\n};\n\nexport const isUnavailableDate = (\n n: DateTime,\n unavailable: CalendarContextProps[\"unavailable\"],\n timeZone: string,\n) => {\n const tmpSet = new Set();\n unavailable.dates?.forEach((date) => {\n tmpSet.add(toDateString(DateTime.fromISO(date, { zone: timeZone })));\n });\n if (unavailable.daysOfWeek?.has(n.weekday)) {\n return true;\n }\n const dateISO = n.toISO();\n if (!dateISO) return;\n return tmpSet.has(\n toDateString(DateTime.fromISO(dateISO, { zone: timeZone })),\n );\n};\n\nexport const isBeyondMinDate = (\n n: DateTime,\n minDate: CalendarContextProps[\"minDate\"],\n) => minDate && minDate.toMillis() > n.toMillis();\n\nexport const isBeyondMaxDate = (\n n: DateTime,\n maxDate: CalendarContextProps[\"maxDate\"],\n) => maxDate && maxDate.toMillis() < n.toMillis();\n\nexport const isValidDate = (\n n: DateTime | undefined,\n minDate = \"\",\n maxDate = \"\",\n unavailable: CalendarContextProps[\"unavailable\"],\n timeZone: string,\n) => {\n if (!n) return false;\n const normalizedMinDate = normalizeDate(minDate, timeZone);\n const normalizedMaxDate = normalizeDate(maxDate, timeZone);\n if (normalizedMinDate && isBeyondMinDate(n, normalizedMinDate)) return false;\n if (normalizedMaxDate && isBeyondMaxDate(n, normalizedMaxDate)) return false;\n return !isUnavailableDate(n, unavailable, timeZone);\n};\n\nexport const normalizeDate = (date: string, defaultTimeZone: string) => {\n return DateTime.fromISO(date, { zone: defaultTimeZone }).startOf(\"day\");\n};\n\nexport const toDateString = (date: DateTime<boolean>) =>\n date.startOf(\"day\").toISO();\n\nexport function rangeUpdater(\n value: CalendarRangeContextProps[\"value\"],\n newDate: DateTime,\n setValue: CalendarRangeContextProps[\"setValue\"],\n onSelection: CalendarRangeContextProps[\"onSelection\"],\n) {\n if (value.start && isSameDay(value.start, newDate) && !value.end) {\n setValue((prev) => {\n return { ...prev, end: newDate };\n });\n onSelection?.({\n value: {\n start: toDateString(value.start) ?? undefined,\n end: toDateString(newDate) ?? undefined,\n },\n });\n return;\n }\n if (\n (!value.start && !value.end) ||\n (value.start && value.end) ||\n (value.start &&\n !value.end &&\n value.start.startOf(\"day\").toMillis() > newDate.startOf(\"day\").toMillis())\n ) {\n setValue({ start: newDate, end: null });\n onSelection?.({\n value: {\n start: toDateString(newDate) ?? undefined,\n end: undefined,\n },\n });\n return;\n }\n if (\n value.start &&\n !value.end &&\n value.start.startOf(\"day\").toMillis() < newDate.startOf(\"day\").toMillis()\n ) {\n setValue((prev) => {\n return { ...prev, end: newDate };\n });\n onSelection?.({\n value: {\n start: toDateString(value.start) ?? undefined,\n end: toDateString(newDate) ?? undefined,\n },\n });\n return;\n }\n if (!value.start && value.end) {\n setValue((prev) => {\n return { ...prev, start: newDate };\n });\n onSelection?.({\n value: {\n start: toDateString(newDate) ?? undefined,\n end: toDateString(value.end) ?? undefined,\n },\n });\n return;\n }\n}\n\nexport const getDateMetadata = (\n date: DateTime,\n dateMetadata: Map<string, string> | undefined,\n): string | undefined => {\n if (!dateMetadata) return undefined;\n const dateString = date.toISODate(); // Returns \"2024-01-15\" format\n return dateString ? dateMetadata.get(dateString) : undefined;\n};\n","import { DateTime } from \"luxon\";\nimport { Button, ButtonProps } from \"../Button\";\nimport { useCalendar } from \"./CalendarContext\";\nimport { MouseEvent, MouseEventHandler, forwardRef } from \"react\";\nimport {\n isBeyondMaxDate,\n isBeyondMinDate,\n isUnavailableDate,\n rangeUpdater,\n toDateString,\n} from \"./internal/utils\";\n\nexport type CalendarNowProps = {\n /**\n * @deprecated This is overridden internally\n */\n onClick?: (e: MouseEvent<HTMLButtonElement>, date: string | null) => void;\n onClickFixed?: MouseEventHandler<HTMLButtonElement> | undefined;\n} & Omit<ButtonProps, \"onClick\">;\n\n/**\n * A button that displays the current date and allows the user to select it.\n *\n * @param props - The rest of the props for the Button component.\n * @returns A button that displays the current date and allows the user to select it.\n */\nexport const CalendarNow = forwardRef<HTMLButtonElement, CalendarNowProps>(\n (props, ref) => {\n const { onClick, onClickFixed, ...rest } = props;\n const {\n setFocusedDate,\n setSelectedMonth,\n setSelectedYear,\n value,\n setValue,\n defaultTimeZone,\n unavailable,\n onSelection,\n minDate,\n maxDate,\n controlled,\n range,\n } = useCalendar();\n\n const nToday = DateTime.fromISO(DateTime.now().toISO(), {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onClickFixed?.(e);\n setFocusedDate(nToday);\n setSelectedMonth(nToday.month);\n setSelectedYear(nToday.year);\n if (!range) {\n onSelection?.({\n value: toDateString(nToday) ?? undefined,\n });\n if (!controlled) {\n setValue(nToday);\n }\n return;\n }\n rangeUpdater(value, nToday, setValue, onSelection);\n };\n\n const isDisabled =\n isBeyondMaxDate(nToday, maxDate) ||\n isBeyondMinDate(nToday, minDate) ||\n isUnavailableDate(nToday, unavailable, defaultTimeZone);\n\n return (\n <Button\n ref={ref}\n onClick={onClickHandler}\n appearance=\"ghost\"\n disabled={isDisabled}\n data-anv=\"calendar-now\"\n size=\"small\"\n {...rest}\n >\n Today\n </Button>\n );\n },\n);\n\nCalendarNow.displayName = \"CalendarNowButton\";\n","import { Button, ButtonProps } from \"../Button\";\nimport { useCalendar } from \"./CalendarContext\";\nimport { forwardRef } from \"react\";\nimport IconKeyboardArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport IconKeyboardArrowUp from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_up.svg\";\nimport { DateTime } from \"luxon\";\n\nexport type CalendarYearButtonProps = ButtonProps & {\n /**\n * The current selection state of the calendar.\n */\n calendarSelectionState: \"day\" | \"month\" | \"year\";\n};\n\n/**\n * A button that displays the current year and allows the user to select a different year.\n *\n * @param props.calendarSelectionState - The current selection state of the calendar.\n * @param props - The rest of the props for the Button component.\n * @returns A button that displays the current year and allows the user to select a different year.\n */\nexport const CalendarYearButton = forwardRef<\n HTMLButtonElement,\n CalendarYearButtonProps\n>((props, ref) => {\n const { calendarSelectionState, ...rest } = props;\n const { selectedYear, locale } = useCalendar();\n\n const currentYear = DateTime.fromObject({ year: selectedYear })\n .setLocale(locale)\n .toLocaleString({ year: \"numeric\" });\n\n return (\n <Button\n ref={ref}\n appearance=\"ghost\"\n size=\"small\"\n icon={{\n after:\n calendarSelectionState === \"year\"\n ? IconKeyboardArrowUp\n : IconKeyboardArrowDown,\n }}\n {...rest}\n >\n {currentYear}\n </Button>\n );\n});\n\nCalendarYearButton.displayName = \"CalendarYearButton\";\n","import { Button, ButtonProps } from \"../Button\";\nimport { useCalendar } from \"./CalendarContext\";\nimport { MouseEvent, forwardRef, useEffect, useState } from \"react\";\nimport Prev from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_left.svg\";\nimport styles from \"./Calendar.module.scss\";\nimport { isSameMonth } from \"./internal/utils\";\nimport cx from \"classnames\";\n\nexport type CalendarPrevProps = ButtonProps;\n\n/**\n * A button that displays the previous month and allows the user to select a different month.\n *\n * @param props.onClick - The function to call when the button is clicked.\n * @param props.className - The class name to apply to the button.\n * @param props - The rest of the props for the Button component.\n * @returns A button that displays the previous month and allows the user to select a different month.\n */\nexport const CalendarPrev = forwardRef<HTMLButtonElement, CalendarPrevProps>(\n (props, ref) => {\n const { onClick, className, ...rest } = props;\n const {\n focusedDate,\n setFocusedDate,\n minDate,\n setSelectedMonth,\n setSelectedYear,\n } = useCalendar();\n\n const [disabled, setDisabled] = useState(false);\n\n useEffect(() => {\n setDisabled(\n minDate != null &&\n focusedDate.minus({ month: 1 }).endOf(\"month\") < minDate,\n );\n }, [minDate, focusedDate]);\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n\n const targetMonth = focusedDate.minus({ month: 1 }).endOf(\"month\");\n const targetDate = focusedDate.minus({ month: 1 });\n\n // Check if we're crossing year boundary (January to December)\n const isCrossingYearBoundary =\n focusedDate.month === 1 && targetDate.month === 12;\n\n if (minDate !== null) {\n if (targetDate.toMillis() >= minDate?.toMillis()) {\n setFocusedDate(targetDate);\n setSelectedMonth(targetDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(targetDate.year);\n }\n return;\n }\n\n if (!isSameMonth(targetMonth, focusedDate)) {\n setFocusedDate(minDate);\n setSelectedMonth(minDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(minDate.year);\n }\n }\n return;\n }\n setFocusedDate(targetDate);\n setSelectedMonth(targetDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(targetDate.year);\n }\n };\n\n return (\n <Button\n ref={ref}\n onClick={onClickHandler}\n className={cx(styles[\"controller-button\"], className)}\n appearance=\"ghost\"\n size=\"small\"\n icon={Prev}\n data-anv=\"calendar-prev\"\n aria-label=\"Previous Month\"\n {...rest}\n disabled={disabled}\n />\n );\n },\n);\n\nCalendarPrev.displayName = \"CalendarPrevButton\";\n","import { Button, ButtonProps } from \"../Button\";\nimport { useCalendar } from \"./CalendarContext\";\nimport { MouseEvent, forwardRef, useEffect, useState } from \"react\";\nimport Next from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_right.svg\";\nimport { isSameMonth } from \"./internal/utils\";\nimport cx from \"classnames\";\nimport styles from \"./Calendar.module.scss\";\n\nexport type CalendarNextProps = ButtonProps;\n\n/**\n * A button that displays the next month and allows the user to select a different month.\n *\n * @param props.onClick - The function to call when the button is clicked.\n * @param props.className - The class name to apply to the button.\n * @param props - The rest of the props for the Button component.\n * @returns A button that displays the next month and allows the user to select a different month.\n */\nexport const CalendarNext = forwardRef<HTMLButtonElement, CalendarNextProps>(\n (props, ref) => {\n const { onClick, className, ...rest } = props;\n const {\n focusedDate,\n setFocusedDate,\n maxDate,\n setSelectedMonth,\n setSelectedYear,\n } = useCalendar();\n\n const [disabled, setDisabled] = useState(false);\n\n useEffect(() => {\n setDisabled(\n maxDate != null &&\n focusedDate.plus({ month: 1 }).startOf(\"month\") > maxDate,\n );\n }, [maxDate, focusedDate]);\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n\n const targetMonth = focusedDate.plus({ month: 1 }).startOf(\"month\");\n const targetDate = focusedDate.plus({ month: 1 });\n\n // Check if we're crossing year boundary (December to January)\n const isCrossingYearBoundary =\n focusedDate.month === 12 && targetDate.month === 1;\n\n if (maxDate !== null) {\n if (targetDate.toMillis() <= maxDate?.toMillis()) {\n setFocusedDate(targetDate);\n setSelectedMonth(targetDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(targetDate.year);\n }\n return;\n }\n\n if (!isSameMonth(targetMonth, focusedDate)) {\n setFocusedDate(maxDate);\n setSelectedMonth(maxDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(maxDate.year);\n }\n }\n return;\n }\n setFocusedDate(targetDate);\n setSelectedMonth(targetDate.month);\n if (isCrossingYearBoundary) {\n setSelectedYear(targetDate.year);\n }\n };\n\n return (\n <Button\n onClick={onClickHandler}\n appearance=\"ghost\"\n size=\"small\"\n className={cx(styles[\"controller-button\"], className)}\n icon={Next}\n aria-label=\"Next Month\"\n data-anv=\"calendar-next\"\n ref={ref}\n {...rest}\n disabled={disabled}\n />\n );\n },\n);\n\nCalendarNext.displayName = \"CalendarNextButton\";\n","import { Button, ButtonProps } from \"../Button\";\nimport { useCalendar } from \"./CalendarContext\";\nimport { forwardRef } from \"react\";\nimport IconKeyboardArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport IconKeyboardArrowUp from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_up.svg\";\nimport { DateTime } from \"luxon\";\n\nexport type CalendarMonthButtonProps = ButtonProps & {\n /**\n * The current selection state of the calendar.\n */\n calendarSelectionState: \"day\" | \"month\" | \"year\";\n};\n\n/**\n * A button that displays the current month and allows the user to select a different month.\n *\n * @param props.calendarSelectionState - The current selection state of the calendar.\n * @param props.onClick - The function to call when the button is clicked.\n * @param props - The rest of the props for the Button component.\n * @returns A button that displays the current month and allows the user to select a different month.\n */\nexport const CalendarMonthButton = forwardRef<\n HTMLButtonElement,\n CalendarMonthButtonProps\n>((props, ref) => {\n const { calendarSelectionState, onClick, ...rest } = props;\n const { selectedMonth, locale } = useCalendar();\n\n const currentMonth = DateTime.fromObject({ month: selectedMonth })\n .setLocale(locale)\n .toFormat(\"MMM\");\n\n return (\n <Button\n ref={ref}\n appearance=\"ghost\"\n size=\"small\"\n onClick={onClick}\n icon={{\n after:\n calendarSelectionState === \"month\"\n ? IconKeyboardArrowUp\n : IconKeyboardArrowDown,\n }}\n {...rest}\n >\n {currentMonth}\n </Button>\n );\n});\n\nCalendarMonthButton.displayName = \"CalendarMonthButton\";\n","import { useCalendar } from \"../CalendarContext\";\nimport {\n ComponentPropsWithoutRef,\n KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"../Calendar.module.scss\";\nimport { DateTime, Info } from \"luxon\";\nimport {\n isBeyondMaxDate,\n isBeyondMinDate,\n isSameDay,\n isSameMonth,\n isUnavailableDate,\n rangeUpdater,\n toDateString,\n getDateMetadata,\n} from \"./utils\";\n\nexport type CalendarDayProps = ComponentPropsWithoutRef<\"td\"> & {\n /**\n * The date to display.\n */\n date: DateTime;\n};\n\n/**\n * A component that displays a day in the calendar.\n *\n * @param props.date - The date to display.\n * @param props - The rest of the props for the td element.\n * @returns A component that displays a day in the calendar.\n */\nexport const CalendarDay = forwardRef<HTMLTableCellElement, CalendarDayProps>(\n (props, ref) => {\n const { className, date, ...rest } = props;\n const context = useCalendar();\n const {\n disableAutofocus,\n value,\n setValue,\n focusedDate,\n setFocusedDate,\n hoveredDate,\n setHoveredDate,\n onSelection,\n locale,\n minDate,\n maxDate,\n unavailable,\n defaultTimeZone,\n controlled,\n id: uid,\n range,\n dateFormat,\n startDay,\n setSelectedMonth,\n setSelectedYear,\n dateMetadata,\n } = context;\n\n const initialized = useRef(false);\n\n const futureDateSelection = useCallback(\n (targetDate: DateTime) => {\n if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {\n return;\n }\n\n if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {\n let nextFocusDate = targetDate.plus({ days: 1 });\n for (let i = 0; i < 365; i++) {\n if (\n maxDate !== null &&\n nextFocusDate.toMillis() > maxDate?.toMillis()\n ) {\n break;\n }\n if (\n isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)\n ) {\n nextFocusDate = nextFocusDate.plus({ days: 1 });\n } else {\n // setHoveredDate(nextFocusDate);\n setFocusedDate(nextFocusDate);\n break;\n }\n }\n return;\n }\n\n setFocusedDate(targetDate);\n\n if (targetDate.month !== focusedDate.month) {\n setSelectedMonth(targetDate.month);\n if (targetDate.year !== focusedDate.year) {\n setSelectedYear(targetDate.year);\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps -- we don't need to re-render when the selected month or year changes\n [maxDate, setFocusedDate, defaultTimeZone, unavailable],\n );\n\n const pastDateSelection = (targetDate: DateTime) => {\n if (minDate !== null && targetDate.toMillis() < minDate?.toMillis()) {\n return;\n }\n\n if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {\n let prevFocusDate = targetDate.minus({ days: 1 });\n for (let i = 0; i < 365; i++) {\n if (\n minDate !== null &&\n prevFocusDate.toMillis() < minDate?.toMillis()\n ) {\n break;\n }\n if (isUnavailableDate(prevFocusDate, unavailable, defaultTimeZone)) {\n prevFocusDate = prevFocusDate.minus({ days: 1 });\n } else {\n // setHoveredDate(prevFocusDate);\n setFocusedDate(prevFocusDate);\n break;\n }\n }\n return;\n }\n\n setFocusedDate(targetDate);\n\n if (targetDate.month !== focusedDate.month) {\n setSelectedMonth(targetDate.month);\n if (targetDate.year !== focusedDate.year) {\n setSelectedYear(targetDate.year);\n }\n }\n };\n\n const isSelectedDate = (date: DateTime, compareDate?: DateTime) => {\n if (!range) {\n return isSameDay(date, compareDate ?? value);\n }\n if (value.start && value.end) {\n return (\n date.toMillis() >= value.start.startOf(\"day\").toMillis() &&\n date.toMillis() <= value.end.endOf(\"day\").toMillis()\n );\n }\n\n return isSameDay(date, value.start);\n };\n\n const isRange = (date: DateTime) => {\n if (!range) {\n return false;\n }\n if (value.start && value.end) {\n return (\n date.toMillis() >= value.start.startOf(\"day\").toMillis() &&\n date.toMillis() <= value.end.endOf(\"day\").toMillis() &&\n !isSameDay(value.start, date) &&\n !isSameDay(value.end, date)\n );\n }\n\n return false;\n };\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLButtonElement>) => {\n switch (e.code) {\n case \"Space\":\n case \"Enter\":\n e.preventDefault();\n if (!range) {\n if (!controlled) {\n setValue(isSameDay(value, focusedDate) ? null : focusedDate);\n }\n onSelection?.({\n value: isSameDay(value, focusedDate)\n ? undefined\n : (focusedDate\n .setZone(defaultTimeZone)\n .startOf(\"day\")\n .toISO() ?? undefined),\n });\n break;\n }\n rangeUpdater(value, focusedDate, setValue, onSelection);\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n pastDateSelection(focusedDate.minus({ days: 1 }));\n break;\n case \"ArrowRight\":\n e.preventDefault();\n futureDateSelection(focusedDate.plus({ days: 1 }));\n break;\n case \"ArrowUp\":\n e.preventDefault();\n pastDateSelection(focusedDate.minus({ days: 7 }));\n break;\n case \"ArrowDown\":\n e.preventDefault();\n futureDateSelection(focusedDate.plus({ days: 7 }));\n break;\n case \"PageUp\":\n e.preventDefault();\n if (e.shiftKey) {\n pastDateSelection(focusedDate.minus({ years: 1 }));\n break;\n }\n pastDateSelection(focusedDate.minus({ months: 1 }));\n break;\n case \"PageDown\":\n e.preventDefault();\n if (e.shiftKey) {\n futureDateSelection(focusedDate.plus({ years: 1 }));\n break;\n }\n futureDateSelection(focusedDate.plus({ months: 1 }));\n break;\n\n default:\n break;\n }\n };\n\n let startDayIndex = 6;\n switch (startDay) {\n case \"Monday\":\n startDayIndex = 0;\n break;\n case \"Sunday\":\n default:\n startDayIndex = 6;\n }\n\n const weekdaysArr: string[] = [];\n for (let i = 0; i < 7; i++) {\n const dayIndex = (startDayIndex + i) % 7;\n weekdaysArr.push(Info.weekdays(\"narrow\", { locale })[dayIndex]);\n }\n\n const firstDay = focusedDate.startOf(\"month\");\n\n const prevArr: DateTime<boolean>[] = [];\n if (firstDay.weekday !== startDayIndex + 1) {\n // Complete the first row with the previous month's dates.\n for (let i = 1; i < 8; i++) {\n const prevDay = firstDay.minus({ days: i });\n prevArr.push(prevDay);\n if (prevDay.weekday === startDayIndex + 1) break;\n }\n }\n prevArr.reverse();\n\n const onClickHandler = (d: DateTime) => {\n setFocusedDate(d);\n if (!range) {\n onSelection?.({\n value: toDateString(d.setZone(defaultTimeZone)) ?? undefined,\n });\n if (!controlled) {\n setValue(d);\n }\n return;\n }\n\n rangeUpdater(value, d, setValue, onSelection);\n };\n\n const onFocusHandler = (d: DateTime) => {\n setHoveredDate(d);\n };\n const onBlurHandler = () => {\n setHoveredDate(undefined);\n };\n\n const onMouseEnterHandler = (d: DateTime) => {\n setHoveredDate(d);\n };\n\n useEffect(() => {\n if (!initialized.current) {\n initialized.current = true;\n return;\n }\n if (!disableAutofocus) {\n requestAnimationFrame(() => {\n const targetElement =\n document.getElementById(`${uid}-${focusedDate.toISODate()}`) ||\n document.activeElement?.shadowRoot?.getElementById(\n `${uid}-${focusedDate.toISODate()}`,\n );\n targetElement?.focus();\n });\n }\n }, [focusedDate, uid, disableAutofocus]);\n\n useEffect(() => {\n if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;\n futureDateSelection(focusedDate.plus({ days: 1 }));\n }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);\n\n const isDisabled =\n !isSameMonth(date, focusedDate) ||\n isBeyondMinDate(date, minDate) ||\n isBeyondMaxDate(date, maxDate) ||\n isUnavailableDate(date, unavailable, defaultTimeZone);\n const isUnavailable = isUnavailableDate(date, unavailable, defaultTimeZone);\n\n const hasMetadata = getDateMetadata(date, dateMetadata);\n\n const hoverRange =\n range &&\n hoveredDate &&\n value.start &&\n !value.end &&\n date.toMillis() > value.start.toMillis() &&\n date.toMillis() <= hoveredDate.toMillis();\n\n const cellCx = cx(styles[\"cell\"], {\n [styles[\"selected\"]]: !isUnavailable && isSelectedDate(date),\n [styles[\"range-first\"]]:\n range &&\n value.start &&\n (value.end || hoveredDate) &&\n isSameDay(date, value.start),\n [styles[\"range-last\"]]:\n range &&\n ((value.start && value.end && isSameDay(date, value.end)) ||\n (hoverRange && isSameDay(date, hoveredDate))),\n [styles[\"range\"]]: isRange(date) || hoverRange,\n [styles[\"is-unavailable\"]]: isUnavailable,\n [styles[\"overflow\"]]: !isSameMonth(date, focusedDate),\n [styles[\"hover-last\"]]: hoverRange && isSameDay(date, hoveredDate),\n [styles[\"has-metadata\"]]: hasMetadata,\n });\n const isMinDate =\n minDate !== null && date.toMillis() <= minDate?.toMillis();\n const isMaxDate =\n maxDate !== null && date.toMillis() >= maxDate?.toMillis();\n\n return (\n <td key={date.toISODate()} role=\"gridcell\" {...rest} ref={ref}>\n {!isUnavailable && (isRange(date) || hoverRange) ? (\n <div\n role=\"presentation\"\n className={cx(styles[\"range-fill\"], {\n [styles[\"range-disabled\"]]: isDisabled,\n [styles[\"hover-last\"]]:\n hoverRange && isSameDay(date, hoveredDate),\n })}\n />\n ) : null}\n <button\n onClick={() => onClickHandler(date)}\n onFocus={() => onFocusHandler(date)}\n onBlur={() => onBlurHandler()}\n className={cellCx}\n onKeyDown={onKeyDownHandler}\n onMouseEnter={() => onMouseEnterHandler(date)}\n tabIndex={\n disableAutofocus ? -1 : isSameDay(date, focusedDate) ? 0 : -1\n }\n disabled={isDisabled ? true : undefined}\n aria-label={`${date.toLocaleString(dateFormat)}${isSelectedDate(date) ? \" selected\" : \"\"}${hasMetadata ? `, ${hasMetadata}` : \"\"}${isMinDate ? \", You are on the first available date\" : \"\"}${isMaxDate ? \", You are on the last available date\" : \"\"}`}\n id={`${uid}-${date.toISODate()}`}\n >\n {date.day}\n {hasMetadata && <span className={styles[\"pip\"]} aria-hidden=\"true\" />}\n </button>\n </td>\n );\n },\n);\n\nCalendarDay.displayName = \"CalendarDay\";\n","import { useCalendar } from \"../CalendarContext\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { DateTime, Info } from \"luxon\";\nimport { isUnavailableDate } from \"./utils\";\nimport { CalendarDay } from \"./CalendarDay\";\n\nexport type CalendarWeekProps = ComponentPropsWithoutRef<\"tr\"> & {\n /**\n * @deprecated This is overridden internally\n */\n className?: ComponentPropsWithoutRef<\"tr\">[\"className\"];\n /**\n * The dates for the week.\n */\n week: DateTime[];\n};\n\n/**\n * A component that displays a week in the calendar.\n *\n * @param props - The props for the tr element.\n * @returns A component that displays a week in the calendar.\n */\nexport const CalendarWeek = forwardRef<HTMLTableRowElement, CalendarWeekProps>(\n (props, ref) => {\n const { className, week, ...rest } = props;\n const context = useCalendar();\n const {\n focusedDate,\n setFocusedDate,\n locale,\n maxDate,\n unavailable,\n defaultTimeZone,\n id: uid,\n startDay,\n } = context;\n\n const initialized = useRef(false);\n\n const futureDateSelection = useCallback(\n (targetDate: DateTime) => {\n if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {\n return;\n }\n\n if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {\n let nextFocusDate = targetDate.plus({ days: 1 });\n for (let i = 0; i < 365; i++) {\n if (\n maxDate !== null &&\n nextFocusDate.toMillis() > maxDate?.toMillis()\n ) {\n break;\n }\n if (\n isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)\n ) {\n nextFocusDate = nextFocusDate.plus({ days: 1 });\n } else {\n // setHoveredDate(nextFocusDate);\n setFocusedDate(nextFocusDate);\n break;\n }\n }\n return;\n }\n\n setFocusedDate(targetDate);\n },\n [maxDate, setFocusedDate, defaultTimeZone, unavailable],\n );\n\n let startDayIndex = 6;\n switch (startDay) {\n case \"Monday\":\n startDayIndex = 0;\n break;\n case \"Sunday\":\n default:\n startDayIndex = 6;\n }\n\n const weekdaysArr: string[] = [];\n for (let i = 0; i < 7; i++) {\n const dayIndex = (startDayIndex + i) % 7;\n weekdaysArr.push(Info.weekdays(\"narrow\", { locale })[dayIndex]);\n }\n\n const firstDay = focusedDate.startOf(\"month\");\n\n const prevArr: DateTime<boolean>[] = [];\n if (firstDay.weekday !== startDayIndex + 1) {\n // Complete the first row with the previous month's dates.\n for (let i = 1; i < 8; i++) {\n const prevDay = firstDay.minus({ days: i });\n prevArr.push(prevDay);\n if (prevDay.weekday === startDayIndex + 1) break;\n }\n }\n prevArr.reverse();\n\n useEffect(() => {\n if (!initialized.current) return;\n setTimeout(() => {\n const targetElement = document.getElementById(\n `${uid}-${focusedDate.toISODate()}`,\n );\n targetElement?.focus();\n }, 100);\n }, [focusedDate, uid]);\n\n useEffect(() => {\n if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;\n futureDateSelection(focusedDate.plus({ days: 1 }));\n }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);\n\n return (\n <tr {...rest} ref={ref}>\n {week.map((n) => {\n return <CalendarDay date={n} key={n.toISODate()} />;\n })}\n </tr>\n );\n },\n);\n\nCalendarWeek.displayName = \"CalendarWeek\";\n","import { useCalendar } from \"./CalendarContext\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Calendar.module.scss\";\nimport { DateTime, Info } from \"luxon\";\nimport {\n isBeyondMaxDate,\n isBeyondMinDate,\n isUnavailableDate,\n} from \"./internal/utils\";\nimport { useSwipe, UseSwipeFn } from \"../../hooks\";\nimport { SrOnly } from \"../SrOnly\";\nimport { CalendarWeek } from \"./internal/CalendarWeek\";\n\nexport type CalendarMonthProps = ComponentPropsWithoutRef<\"table\">;\n\n/**\n * A component that displays a month in the calendar.\n *\n * @param props - The props for the table element.\n * @returns A component that displays a month in the calendar.\n */\nexport const CalendarMonth = forwardRef<HTMLTableElement, CalendarMonthProps>(\n (props, ref) => {\n const { className, ...rest } = props;\n const context = useCalendar();\n const {\n value,\n focusedDate,\n setFocusedDate,\n setHoveredDate,\n locale,\n minDate,\n maxDate,\n unavailable,\n defaultTimeZone,\n id: uid,\n range,\n dateFormat,\n startDay,\n } = context;\n\n const initialized = useRef(false);\n\n const ViewCX = cx(styles[\"grid\"], className);\n const futureDateSelection = useCallback(\n (targetDate: DateTime) => {\n if (maxDate !== null && targetDate.toMillis() > maxDate?.toMillis()) {\n return;\n }\n\n if (isUnavailableDate(targetDate, unavailable, defaultTimeZone)) {\n let nextFocusDate = targetDate.plus({ days: 1 });\n for (let i = 0; i < 365; i++) {\n if (\n maxDate !== null &&\n nextFocusDate.toMillis() > maxDate?.toMillis()\n ) {\n break;\n }\n if (\n isUnavailableDate(nextFocusDate, unavailable, defaultTimeZone)\n ) {\n nextFocusDate = nextFocusDate.plus({ days: 1 });\n } else {\n // setHoveredDate(nextFocusDate);\n setFocusedDate(nextFocusDate);\n break;\n }\n }\n return;\n }\n\n setFocusedDate(targetDate);\n },\n [maxDate, setFocusedDate, defaultTimeZone, unavailable],\n );\n\n let startDayIndex = 6;\n switch (startDay) {\n case \"Monday\":\n startDayIndex = 0;\n break;\n case \"Sunday\":\n default:\n startDayIndex = 6;\n }\n\n const weekdaysArr: string[] = [];\n for (let i = 0; i < 7; i++) {\n const dayIndex = (startDayIndex + i) % 7;\n weekdaysArr.push(Info.weekdays(\"narrow\", { locale })[dayIndex]);\n }\n\n const firstDay = focusedDate.startOf(\"month\");\n const lastDay = focusedDate.endOf(\"month\");\n\n const monthArr = Array.from(new Array(firstDay.daysInMonth)).map((_, i) => {\n return firstDay.plus({ days: i });\n });\n\n const prevArr: DateTime<boolean>[] = [];\n if (firstDay.weekday !== startDayIndex + 1) {\n // Complete the first row with the previous month's dates.\n for (let i = 1; i < 8; i++) {\n const prevDay = firstDay.minus({ days: i });\n prevArr.push(prevDay);\n if (prevDay.weekday === startDayIndex + 1) break;\n }\n }\n prevArr.reverse();\n\n const nextArr = Array.from(new Array(14)).map((_, i) => {\n return lastDay.plus({ days: i + 1 });\n });\n\n const fullArr: DateTime[] = [...prevArr, ...monthArr, ...nextArr];\n\n const splitArr = [...Array(Math.ceil(fullArr.length / 7))]\n .map((_, i) => fullArr.slice(7 * i, 7 + 7 * i))\n .slice(0, 6);\n\n const onMouseLeaveHandler = () => {\n setHoveredDate(undefined);\n };\n\n const onSwipe = (dir: UseSwipeFn[\"direction\"]) => {\n if (dir === \"left\") {\n const targetMonth = focusedDate.plus({ month: 1 });\n if (\n isBeyondMinDate(targetMonth, minDate) ||\n isBeyondMaxDate(targetMonth, maxDate)\n )\n return;\n setFocusedDate(targetMonth);\n return;\n }\n if (dir === \"right\") {\n const targetMonth = focusedDate.minus({ month: 1 });\n if (\n isBeyondMinDate(targetMonth, minDate) ||\n isBeyondMaxDate(targetMonth, maxDate)\n )\n return;\n setFocusedDate(targetMonth);\n return;\n }\n };\n\n const { direction, ...touchProps } = useSwipe(onSwipe);\n\n useEffect(() => {\n if (!initialized.current) return;\n setTimeout(() => {\n const targetElement = document.getElementById(\n `${uid}-${focusedDate.toISODate()}`,\n );\n targetElement?.focus();\n }, 100);\n }, [focusedDate, uid]);\n\n useEffect(() => {\n if (!isUnavailableDate(focusedDate, unavailable, defaultTimeZone)) return;\n futureDateSelection(focusedDate.plus({ days: 1 }));\n }, [focusedDate, futureDateSelection, defaultTimeZone, unavailable]);\n\n return (\n <>\n <table\n ref={ref}\n data-anv=\"calendar-month\"\n onFocus={() => {\n initialized.current = true;\n }}\n onBlur={() => {\n initialized.current = false;\n }}\n className={ViewCX}\n onMouseLeave={onMouseLeaveHandler}\n role=\"grid\"\n {...rest}\n {...touchProps}\n >\n <thead aria-hidden className={styles[\"weekdays\"]}>\n <tr>\n {weekdaysArr.map((weekday, i) => {\n return (\n <th\n scope=\"col\"\n key={`${weekday}${i}`}\n className={styles[\"weekday\"]}\n >\n {weekday}\n </th>\n );\n })}\n </tr>\n <tr className={styles[\"spacer\"]}>\n <td colSpan={7} />\n </tr>\n </thead>\n <tbody\n className={styles[\"day-grid\"]}\n key={focusedDate.startOf(\"month\").toMillis()}\n >\n {splitArr.map((week, i) => {\n return <CalendarWeek week={week} key={i} />;\n })}\n </tbody>\n </table>\n {range && value ? (\n <SrOnly aria-live=\"polite\">\n {`Range starts at ${\n value.start && value.start.toLocaleString(dateFormat)\n }, ${\n value.end\n ? `ends at ${value.end.toLocaleString(dateFormat)}`\n : \"select an end date\"\n }`}\n </SrOnly>\n ) : null}\n </>\n );\n },\n);\n\nCalendarMonth.displayName = \"CalendarMonth\";\n","import { useEffect, useRef } from \"react\";\n\nexport type UseYearSelectorKeysParams = {\n columns: number;\n scrollToYear: (year: number, { focus }: { focus?: boolean }) => void;\n initialFocus: number;\n onSelect: (year: number | null) => void;\n onConfirm: () => void;\n min: number;\n max: number;\n disabled: boolean;\n pseudoFocused: number;\n setPseudoFocused: (year: number) => void;\n required: boolean;\n};\n\nexport type UseYearSelectorKeysReturn = {\n listRef: React.RefObject<HTMLDivElement>;\n};\n\nexport const useYearSelectorKeys = ({\n columns,\n scrollToYear,\n initialFocus,\n onSelect,\n onConfirm,\n pseudoFocused,\n setPseudoFocused,\n min,\n max,\n disabled,\n required,\n}: UseYearSelectorKeysParams): UseYearSelectorKeysReturn => {\n const listRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const list = listRef.current;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (pseudoFocused === null) return;\n if (\n [\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"Home\",\n \"PageUp\",\n \"PageDown\",\n \"Enter\",\n \" \",\n \"Backspace\",\n \"Delete\",\n ].includes(e.key)\n ) {\n e.preventDefault();\n if (\n e.key === \"ArrowLeft\" ||\n e.key === \"ArrowRight\" ||\n e.key === \"ArrowUp\" ||\n e.key === \"ArrowDown\"\n ) {\n const newYear =\n e.key === \"ArrowLeft\" || e.key === \"ArrowUp\"\n ? pseudoFocused - 1\n : pseudoFocused + 1;\n const clampedYear = Math.min(Math.max(newYear, min), max);\n scrollToYear(newYear, { focus: true });\n setPseudoFocused(newYear);\n if (!disabled) {\n onSelect(clampedYear);\n }\n return;\n }\n if (!required && (e.key === \"Backspace\" || e.key === \"Delete\")) {\n onSelect(null);\n return;\n }\n if (e.key === \"PageUp\" || e.key === \"PageDown\") {\n const newYear = e.key === \"PageUp\" ? min : max;\n scrollToYear(newYear, { focus: true });\n setPseudoFocused(newYear);\n if (!disabled) {\n onSelect(newYear);\n }\n return;\n }\n if (e.key === \"Home\") {\n scrollToYear(initialFocus, { focus: true });\n setPseudoFocused(initialFocus);\n if (!disabled) {\n onSelect(initialFocus);\n }\n return;\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n if (!disabled) {\n onConfirm();\n }\n return;\n }\n }\n };\n list?.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n list?.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n pseudoFocused,\n columns,\n scrollToYear,\n onSelect,\n min,\n max,\n initialFocus,\n disabled,\n setPseudoFocused,\n required,\n onConfirm,\n ]);\n\n return { listRef };\n};\n","import styles from \"../YearSelector.module.scss\";\nimport cx from \"classnames\";\nimport { ComponentPropsWithoutRef } from \"react\";\nimport SelectCard from \"../../../../components/SelectCard\";\n\ntype YearItemProps = Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> & {\n year: number;\n onChange: (year: number) => void;\n selected: boolean;\n pseudoFocused: boolean;\n disabled: boolean;\n};\nexport const YearItem = ({\n year,\n onChange,\n selected,\n pseudoFocused,\n disabled,\n onFocus,\n ...rest\n}: YearItemProps) => {\n return (\n <SelectCard\n disabled={disabled}\n id={year}\n onChange={!disabled ? () => onChange(year) : () => {}}\n checked={selected}\n checkboxProps={{\n tabIndex: -1,\n onFocus,\n }}\n flexGrow={1}\n className={cx(styles[\"year-item\"], {\n [styles[\"pseudo-focused\"]]: pseudoFocused,\n })}\n data-year={year}\n tabIndex={-1}\n {...rest}\n >\n {year}\n </SelectCard>\n );\n};\n","import { useVirtualizer } from \"@tanstack/react-virtual\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport styles from \"./YearSelector.module.scss\";\nimport cx from \"classnames\";\nimport { useYearSelectorKeys } from \"./internal/useYearSelectorKeys\";\nimport { useOptionallyControlledState, usePrevious } from \"../../hooks\";\nimport { useMergeRefs } from \"../../../hooks\";\nimport { YearItem } from \"./internal/YearItem\";\nimport { PassThroughProps } from \"../../../types\";\n\nconst DEFAULT_MIN = 1900;\nconst DEFAULT_MAX = 2200;\n\nexport interface YearSelectorProps {\n /**\n * The minimum selectable year\n * Defaults to 1900.\n */\n min?: number;\n /**\n * The maximum selectable year.\n * Defaults to 2200.\n */\n max?: number;\n /**\n * The currently selected year\n */\n value?: number | null;\n /**\n * The default value of the selected year\n */\n defaultValue?: number;\n /**\n * The function to call when the selected year changes\n *\n * @param year - The year that is selected.\n */\n onChange?: (year: number | null) => void;\n /**\n * The function to call when the selected year is affirmatively changed.\n * This is called when the user confirms the selection by pressing Enter, pressing Space, or clicking.\n *\n * @param year - The year that is selected.\n */\n onConfirm?: (year: number | null) => void;\n /**\n * If a `value` or `defaultValue` is not provided, this will be used as the starting scroll position (and initial focus for accessibility).\n */\n startingYear?: number;\n /**\n * The number of columns to display.\n * @default 2\n */\n columns?: number;\n /**\n * The class name to apply to the component.\n */\n className?: string;\n /**\n * Controls whether a year can be deselected, i.e. set to null.\n * @default false\n */\n required?: boolean;\n /**\n * Controls whether the component allows the user to select a year.\n * @default false\n */\n disabled?: boolean;\n /**\n * The aria-label for the component.\n * @default \"Year selection\"\n */\n ariaLabel?: string;\n /**\n * Props forwarded onto the root element of the component.\n */\n rootProps?: PassThroughProps<\"div\">;\n}\nconst currentYear = new Date().getFullYear();\n\nexport const YearSelector = forwardRef<HTMLDivElement, YearSelectorProps>(\n (\n {\n min = DEFAULT_MIN,\n max = DEFAULT_MAX,\n value: valueProp,\n defaultValue: defaultValueProp,\n onChange,\n onConfirm,\n startingYear = currentYear,\n columns: columnsProp,\n className,\n required = false,\n disabled = false,\n ariaLabel = \"Year selection\",\n rootProps,\n },\n ref,\n ) => {\n const columns = Math.max(columnsProp ?? 2, 1);\n const [value, setValue] = useOptionallyControlledState<number | null>({\n controlledValue: valueProp,\n defaultValue: defaultValueProp ?? null,\n onChange,\n });\n const previousValue = usePrevious(value);\n const initialFocusYear = value ?? startingYear;\n const [pseudoFocused, setPseudoFocused] =\n useState<number>(initialFocusYear);\n\n const handleChange = (year: number | null) => {\n if (!required && value === year) {\n setValue(null);\n return;\n }\n setValue(year);\n if (year !== null) {\n setPseudoFocused(year);\n }\n };\n\n const handleItemChange = (year: number) => {\n handleChange(year);\n onConfirm?.(year);\n };\n\n const gap = 12;\n const rowHeight = 58;\n const rowCount = Math.ceil((max - min + 1) / columns);\n const initialOffset =\n ((initialFocusYear - min) * (rowHeight + gap)) / columns + gap / 2;\n\n // The virtualizer\n const rowVirtualizer = useVirtualizer({\n count: rowCount,\n getScrollElement: () => parentRef.current,\n estimateSize: () => rowHeight,\n gap,\n initialOffset,\n paddingEnd: gap / 2,\n });\n\n const scrollToYear = useCallback(\n (year: number, { focus }: { focus?: boolean } = {}) => {\n const index = Math.floor((year - min) / columns);\n rowVirtualizer.scrollToIndex(index, { align: \"center\" });\n if (focus) {\n setPseudoFocused(year);\n }\n },\n [min, columns, rowVirtualizer, setPseudoFocused],\n );\n\n const parentRef = useRef(null);\n const { listRef } = useYearSelectorKeys({\n columns,\n scrollToYear,\n initialFocus: initialFocusYear,\n onSelect: handleChange,\n onConfirm: () => onConfirm?.(value),\n min,\n max,\n disabled,\n pseudoFocused,\n setPseudoFocused,\n required,\n });\n\n useEffect(() => {\n if (value !== null && previousValue !== value) {\n scrollToYear(value, { focus: true });\n }\n }, [value, previousValue, scrollToYear, listRef]);\n\n const jointRef = useMergeRefs([parentRef, listRef, ref]);\n\n return (\n <>\n {/* The scrollable element */}\n <div\n ref={jointRef}\n aria-label={ariaLabel}\n tabIndex={0}\n className={cx(styles[\"year-selector\"], className)}\n role=\"spinbutton\"\n aria-valuenow={value ?? undefined}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={value ? `${value}` : \"No year selected\"}\n data-test={rowVirtualizer.options.paddingEnd}\n style={{\n maxHeight: `${\n rowVirtualizer.getTotalSize() + 8 // Accounts for the padding of the container\n }px`,\n }}\n {...rootProps}\n >\n {/* The large inner element to hold all of the items */}\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {/* Only the visible items in the virtualizer, manually positioned to be in view */}\n {rowVirtualizer.getVirtualItems().map((virtualItem) => {\n const years = Array.from(\n { length: columns },\n (_, i) => virtualItem.index * columns + i + min,\n );\n return (\n <div\n key={virtualItem.key}\n data-testid=\"v-row\"\n className={styles[\"year-grid\"]}\n style={{\n transform: `translateY(${virtualItem.start}px)`,\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n }}\n >\n {years.map((year) => {\n if (year > max) return <div key={year} />;\n return (\n <YearItem\n key={year}\n disabled={disabled}\n year={year}\n onChange={handleItemChange}\n selected={value === year}\n pseudoFocused={pseudoFocused === year}\n onFocus={() => {\n listRef.current?.focus();\n setPseudoFocused(year);\n }}\n />\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n </>\n );\n },\n);\n\nYearSelector.displayName = \"YearSelector\";\n","import { DateTime } from \"luxon\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Grid } from \"../../Grid\";\nimport { SelectCard } from \"../../SelectCard\";\nimport { useCalendar } from \"../CalendarContext\";\nimport styles from \"../Calendar.module.scss\";\nimport cx from \"classnames\";\nimport { useMergeRefs } from \"../../../hooks\";\n\nexport type CalendarMonthSelectionProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * The function to call when a month is selected.\n *\n * @param month - The month that is selected.\n */\n onMonthSelection: (month: DateTime[\"month\"]) => void;\n};\n\n/**\n * A component that displays a grid of month cards and allows the user to select a month.\n *\n * @param props.onMonthSelection - The function to call when a month is selected.\n * @param props - The rest of the props for the div wrapper.\n * @returns A component that displays a grid of month cards and allows the user to select a month.\n */\nexport const CalendarMonthSelection = forwardRef<\n HTMLDivElement,\n CalendarMonthSelectionProps\n>(({ onMonthSelection, ...props }, ref) => {\n const { defaultTimeZone, maxDate, minDate, selectedMonth, selectedYear } =\n useCalendar();\n\n const monthSelectionRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([ref, monthSelectionRef]);\n\n const currentDate = useMemo(\n () =>\n DateTime.fromObject({ year: selectedYear, month: selectedMonth })\n .setZone(defaultTimeZone)\n .startOf(\"day\"),\n [defaultTimeZone, selectedYear, selectedMonth],\n );\n\n const dates = useMemo(\n () =>\n Array.from({ length: 12 }, (_, i) => {\n const date = DateTime.fromObject({\n year: selectedYear,\n month: 1,\n }).plus({\n month: i,\n });\n\n // disable the select card if outside the min or max date\n const disabled =\n (minDate && date < minDate && !date.hasSame(minDate, \"month\")) ||\n (maxDate && date > maxDate && !date.hasSame(maxDate, \"month\"));\n\n return {\n month: date.month,\n disabled: disabled ?? false,\n };\n }),\n [maxDate, minDate, selectedYear],\n );\n\n const classes = cx(styles[\"month-selection\"], props.className);\n\n const [focusedIndex, setFocusedIndex] = useState(selectedMonth - 1);\n\n // reset focused index when current date changes\n useEffect(() => {\n if (minDate || maxDate) {\n // find the next enabled month\n let index = dates.findIndex(({ month }) => month === selectedMonth);\n while (dates[index].disabled && index < 11) {\n index++;\n }\n setFocusedIndex(index);\n } else {\n setFocusedIndex(selectedMonth - 1);\n }\n }, [selectedMonth, minDate, maxDate, dates]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n const target = e.target as HTMLElement;\n const cards = monthSelectionRef.current?.querySelectorAll(\n \"input[type='checkbox']\",\n );\n if (!cards || cards.length === 0) {\n return;\n }\n\n const cardArray = Array.from(cards);\n const currentIndex = cardArray.indexOf(target as HTMLButtonElement);\n\n if (currentIndex === -1) return;\n\n const updateFocusedIndex = (index: number) => {\n e.preventDefault();\n (cardArray[index] as HTMLButtonElement).focus();\n setFocusedIndex(index);\n };\n\n let newIndex: number;\n switch (e.key) {\n case \"ArrowLeft\":\n newIndex = currentIndex > 0 ? currentIndex - 1 : 11;\n while (dates[newIndex].disabled) {\n newIndex = newIndex > 0 ? newIndex - 1 : 11;\n }\n updateFocusedIndex(newIndex);\n break;\n\n case \"ArrowRight\":\n newIndex = currentIndex < 11 ? currentIndex + 1 : 0;\n while (dates[newIndex].disabled) {\n newIndex = newIndex < 11 ? newIndex + 1 : 0;\n }\n updateFocusedIndex(newIndex);\n break;\n\n case \"ArrowUp\":\n if (currentIndex < 3) {\n newIndex = currentIndex + 9;\n } else {\n newIndex = currentIndex - 3;\n }\n while (dates[newIndex].disabled) {\n if (newIndex > 2) {\n newIndex -= 3;\n } else {\n newIndex += 9;\n }\n }\n updateFocusedIndex(newIndex);\n break;\n\n case \"ArrowDown\":\n if (currentIndex > 8) {\n newIndex = currentIndex - 9;\n } else {\n newIndex = currentIndex + 3;\n }\n while (dates[newIndex].disabled) {\n if (newIndex < 9) {\n newIndex += 3;\n } else {\n newIndex -= 9;\n }\n }\n updateFocusedIndex(newIndex);\n break;\n\n case \"Enter\":\n case \" \":\n e.preventDefault();\n if (!dates[currentIndex].disabled) {\n onMonthSelection(dates[currentIndex].month);\n }\n break;\n }\n },\n [dates, onMonthSelection],\n );\n\n return (\n <div\n ref={combinedRef}\n data-anv=\"calendar-month-selection\"\n className={classes}\n {...props}\n >\n <div role=\"grid\" aria-label=\"Calendar month selection\">\n <Grid\n templateColumns=\"repeat(3, minmax(0, 1fr))\"\n gap={3}\n onKeyDown={handleKeyDown}\n role=\"row\"\n >\n {dates.map(({ month, disabled }, index) => (\n <div role=\"gridcell\" key={month.toString()}>\n <SelectCard\n id={month.toString()}\n disabled={disabled}\n onChange={() => onMonthSelection(month)}\n checked={\n selectedMonth === month && selectedYear === currentDate.year\n }\n checkboxProps={{\n className: styles[\"selection-checkbox\"],\n tabIndex: focusedIndex === index ? 0 : -1,\n }}\n className={styles[\"selection-card\"]}\n >\n {DateTime.fromObject({ month }).toFormat(\"MMMM\")}\n </SelectCard>\n </div>\n ))}\n </Grid>\n </div>\n </div>\n );\n});\n\nCalendarMonthSelection.displayName = \"CalendarMonthSelection\";\n","import { createContext } from \"react\";\nimport { CalendarBetaProps } from \"./Calendar\";\n\nexport const CalendarBetaPropsContext = createContext<CalendarBetaProps>({});\n","import { useContext } from \"react\";\nimport { CalendarBetaPropsContext } from \"./CalendarBetaPropsContext\";\n\nexport const useCalendarBetaProps = () => {\n return useContext(CalendarBetaPropsContext);\n};\n","import { DateTime, type WeekdayNumbers } from \"luxon\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { IanaZone, LayoutUtilProps, Locale } from \"../../types\";\nimport { CalendarNow } from \"./CalendarNowButton\";\nimport { CalendarYearButton } from \"./CalendarYearButton\";\nimport { CalendarPrev } from \"./CalendarPrevButton\";\nimport { CalendarNext } from \"./CalendarNextButton\";\nimport { CalendarMonthButton } from \"./CalendarMonthButton\";\nimport { CalendarMonth } from \"./CalendarMonth\";\nimport {\n CalendarContext,\n CalendarContextProps,\n CalendarRangeContextProps,\n} from \"./CalendarContext\";\nimport { useMergeRefs } from \"../../hooks\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport styles from \"./Calendar.module.scss\";\nimport cx from \"classnames\";\nimport { normalizeDate } from \"./internal/utils\";\nimport { CalendarMonthSelection } from \"./internal/CalendarMonthSelection\";\nimport { YearSelector } from \"../../internal/components/YearSelector\";\nimport { useCalendarBetaProps } from \"../../beta\";\n\nexport type CalendarValue = string | undefined;\n\nexport type CalendarRangeValue = { start?: string; end?: string } | undefined;\n\nconst toolbarFocusStates = [\"month\", \"year\", \"next\", \"prev\", \"now\"] as const;\n\n/**\n * Props for the Calendar component\n * @extends Omit<ComponentPropsWithoutRef<\"div\">, \"value\" | \"defaultValue\">\n * @extends LayoutUtilProps\n */\ntype CalendarCommonProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"value\" | \"defaultValue\"\n> & {\n /**\n * @deprecated children will be overridden internally\n */\n children?: ComponentPropsWithoutRef<\"div\">[\"children\"];\n /**\n * The default focused date. Used to determine what month and year is shown.\n */\n defaultFocusedDate?: string | null;\n /**\n * The focused date. Used to determine what month and year is currently shown.\n */\n focusedDate?: string | null;\n /**\n * The minimum date allowed.\n */\n minDate?: string;\n /**\n * The maximum date allowed.\n */\n maxDate?: string;\n /**\n * The days of the week and dates that are unavailable.\n */\n unavailable?: {\n /**\n * The days of the week that are unavailable.\n */\n daysOfWeek?: WeekdayNumbers[];\n /**\n * The specific dates that are unavailable.\n */\n dates?: string[];\n };\n /**\n * The locale to use for the calendar.\n */\n locale?: Locale;\n /**\n * The time zone to use for the calendar.\n */\n defaultTimeZone?: IanaZone;\n /**\n * The day of the week to start the calendar on.\n */\n startDay?: \"Sunday\" | \"Monday\";\n\n /**\n * Whether the calendar should focus on the focused date.\n * @internal - Do not use this prop directly.\n */\n _disableAutofocus?: boolean;\n /** Whether the calendar should set all tab indexes to -1.\n * @internal - Do not use this prop directly.\n */\n _disableFocus?: boolean;\n};\n\ntype CalendarSingleProps = CalendarCommonProps & {\n /**\n * The function to call when the value changes.\n *\n * @param data - The data to pass to the function.\n */\n onSelection?: (data: { value: CalendarValue }) => void;\n /**\n * The default date value for uncontrolled mode.\n */\n defaultValue?: string | false;\n /**\n * The value for controlled mode.\n */\n value?: string;\n /**\n * Whether the calendar is in range mode.\n */\n range?: false;\n};\n\ntype CalendarRangeProps = CalendarCommonProps & {\n /**\n * The function to call when the value changes.\n *\n * @param data.value - The date value that is selected.\n */\n onSelection?: (data: { value: CalendarRangeValue }) => void;\n /**\n * The default date value for uncontrolled mode.\n */\n defaultValue?: { start?: string; end?: string };\n /**\n * The date value for controlled mode.\n */\n value?: { start?: string; end?: string };\n /**\n * Whether the calendar is in range mode.\n */\n range: true;\n};\n\nexport type CalendarProps = LayoutUtilProps &\n (CalendarSingleProps | CalendarRangeProps);\n\n/**\n * Calendar component for viewing and selecting a date or range of dates.\n *\n * Features:\n * - Single date and date range selection modes\n * - Month and year navigation with header buttons\n * - Configurable start day (Sunday or Monday)\n * - Date range restrictions with min/max dates\n * - Unavailable dates and days of week support\n * - Locale and timezone customization\n * - Full accessibility support with ARIA attributes\n * - Keyboard navigation support\n * - Responsive design with automatic width detection\n * - Month and year selection views\n * - Today button for quick navigation\n *\n * @example\n * <Calendar\n * value=\"2024-01-15\"\n * onSelection={({ value }) => console.log('Selected:', value)}\n * minDate=\"2024-01-01\"\n * maxDate=\"2024-12-31\"\n * />\n */\nexport const CalendarElement = forwardRef<HTMLDivElement, CalendarProps>(\n (props, ref) => {\n const uid = useId();\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n children,\n focusedDate: focusProp,\n defaultFocusedDate,\n locale = Intl.DateTimeFormat().resolvedOptions().locale as Locale,\n defaultTimeZone = Intl.DateTimeFormat().resolvedOptions()\n .timeZone as IanaZone,\n startDay = \"Sunday\",\n minDate,\n maxDate,\n unavailable = {\n dates: [],\n daysOfWeek: [],\n },\n id,\n style,\n value: iValue,\n defaultValue: iDefaultValue,\n onSelection,\n range,\n className,\n _disableAutofocus,\n _disableFocus,\n ...remainingProps\n } = componentProps;\n\n const { dateMetadata, onMonthView } = useCalendarBetaProps();\n\n const calendarRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([ref, calendarRef]);\n const lastIValue = useRef(iValue);\n const yearButtonRef = useRef<HTMLButtonElement>(null);\n const monthButtonRef = useRef<HTMLButtonElement>(null);\n const headerRef = useRef<HTMLSpanElement>(null);\n const [toolbarFocus, setToolbarFocus] = useState<\n (typeof toolbarFocusStates)[number]\n >(toolbarFocusStates[0]);\n\n const [calendarWidth, setCalendarWidth] = useState<number | undefined>(\n undefined,\n );\n\n const [calendarSelectionState, setCalendarSelectionState] = useState<\n \"day\" | \"month\" | \"year\"\n >(\"day\");\n\n const visibleHeaderButtons = useMemo(() => {\n if (calendarSelectionState !== \"day\") {\n return toolbarFocusStates.slice(0, 2);\n }\n return toolbarFocusStates;\n }, [calendarSelectionState]);\n\n useEffect(() => {\n if (!calendarRef.current || style?.width != null) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const width = entry.contentRect.width;\n if (calendarSelectionState === \"day\" && width > 100) {\n setCalendarWidth(width);\n }\n }\n });\n\n resizeObserver.observe(calendarRef.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [calendarSelectionState, style?.width]);\n\n // Common\n const styleCombined = {\n width: calendarWidth,\n ...style,\n ...layoutStyles,\n };\n\n const classNameCombined = cx(styles[\"calendar\"], className);\n\n const { nDate, nDefaultDate, nToday } = useMemo(\n () => ({\n nDate: iValue\n ? typeof iValue === \"string\"\n ? normalizeDate(iValue, defaultTimeZone)\n : {\n start: iValue.start\n ? normalizeDate(iValue.start, defaultTimeZone)\n : null,\n end: iValue.end\n ? normalizeDate(iValue.end, defaultTimeZone)\n : null,\n }\n : null,\n nDefaultDate: iDefaultValue\n ? typeof iDefaultValue === \"string\"\n ? normalizeDate(iDefaultValue, defaultTimeZone)\n : {\n start: iDefaultValue.start\n ? normalizeDate(iDefaultValue.start, defaultTimeZone)\n : null,\n end: iDefaultValue?.end\n ? normalizeDate(iDefaultValue.end, defaultTimeZone)\n : null,\n }\n : null,\n nToday:\n typeof iValue === \"string\"\n ? normalizeDate(DateTime.now().toISO(), defaultTimeZone)\n : {\n start: normalizeDate(DateTime.now().toISO(), defaultTimeZone),\n end: normalizeDate(DateTime.now().toISO(), defaultTimeZone),\n },\n }),\n [iValue, iDefaultValue, defaultTimeZone],\n );\n\n const [value, setValue] = useState<\n | CalendarContextProps[\"value\"]\n | CalendarRangeContextProps[\"value\"]\n | undefined\n >(nDate ?? nDefaultDate ?? nToday);\n\n const getInitialDate = useMemo(() => {\n if (defaultFocusedDate) {\n return normalizeDate(defaultFocusedDate, defaultTimeZone);\n }\n if (iDefaultValue) {\n const date =\n typeof iDefaultValue === \"string\"\n ? normalizeDate(iDefaultValue, defaultTimeZone)\n : normalizeDate(\n iDefaultValue.start ?? iDefaultValue.end ?? \"\",\n defaultTimeZone,\n );\n return date;\n }\n if (\n !DateTime.isDateTime(nDate) &&\n !DateTime.isDateTime(nDefaultDate) &&\n !DateTime.isDateTime(nToday)\n ) {\n return nDate?.start ?? nDefaultDate?.start ?? nToday?.start;\n }\n\n return (nDate ?? nDefaultDate ?? nToday) as DateTime;\n }, [\n defaultFocusedDate,\n iDefaultValue,\n nDate,\n nDefaultDate,\n nToday,\n defaultTimeZone,\n ]);\n\n const initialDate = getInitialDate ?? DateTime.now();\n\n const [focusedDate, setFocusedDate] = useState<\n | CalendarContextProps[\"focusedDate\"]\n | CalendarRangeContextProps[\"focusedDate\"]\n | undefined\n >(initialDate);\n\n const [hoveredDate, setHoveredDate] = useState<\n | CalendarContextProps[\"hoveredDate\"]\n | CalendarRangeContextProps[\"hoveredDate\"]\n >();\n\n const [selectedMonth, setSelectedMonth] = useState<DateTime[\"month\"]>(\n initialDate.month,\n );\n const [selectedYear, setSelectedYear] = useState<DateTime[\"year\"]>(\n initialDate.year,\n );\n\n const currentVisibleMonth = useMemo(() => {\n return {\n year: focusedDate?.year ?? selectedYear,\n month: focusedDate?.month ?? selectedMonth,\n };\n }, [focusedDate?.month, focusedDate?.year, selectedYear, selectedMonth]);\n\n useEffect(\n () => onMonthView?.(currentVisibleMonth),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- omit onMonthView from deps because we don't want to trigger infinite re-renders\n [currentVisibleMonth],\n );\n\n useEffect(() => {\n if (!focusProp && !defaultFocusedDate) return;\n if (focusProp) {\n setFocusedDate(normalizeDate(focusProp, defaultTimeZone));\n } else if (defaultFocusedDate) {\n setFocusedDate(normalizeDate(defaultFocusedDate, defaultTimeZone));\n setSelectedMonth(\n normalizeDate(defaultFocusedDate, defaultTimeZone).month,\n );\n setSelectedYear(\n normalizeDate(defaultFocusedDate, defaultTimeZone).year,\n );\n }\n // defaultTimeZone should not rerender\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusProp, defaultFocusedDate]);\n\n useEffect(() => {\n if (!iValue) {\n lastIValue.current = iValue;\n return;\n }\n if (typeof iValue === \"string\") {\n setValue(normalizeDate(iValue, defaultTimeZone));\n setFocusedDate(normalizeDate(iValue, defaultTimeZone));\n } else if (\n iValue.end &&\n (typeof lastIValue.current !== \"object\" ||\n lastIValue?.current?.end !== iValue.end)\n ) {\n setValue({\n start: iValue.start\n ? normalizeDate(iValue.start, defaultTimeZone)\n : null,\n end: iValue.end ? normalizeDate(iValue.end, defaultTimeZone) : null,\n });\n setFocusedDate(normalizeDate(iValue.end, defaultTimeZone));\n } else if (\n iValue.start &&\n (typeof lastIValue.current !== \"object\" ||\n lastIValue?.current?.start !== iValue.start)\n ) {\n setFocusedDate(normalizeDate(iValue.start, defaultTimeZone));\n }\n lastIValue.current = iValue;\n // defaultTimeZone should not rerender\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [iValue]);\n\n // Memoize normalized minDate and maxDate to avoid new references on every render\n const normalizedMinDate = useMemo(\n () => (minDate ? normalizeDate(minDate, defaultTimeZone) : null),\n [minDate, defaultTimeZone],\n );\n const normalizedMaxDate = useMemo(\n () => (maxDate ? normalizeDate(maxDate, defaultTimeZone) : null),\n [maxDate, defaultTimeZone],\n );\n\n const dateMetadataMap = useMemo(() => {\n if (!dateMetadata) return undefined;\n return new Map(dateMetadata.map((item) => [item.date, item.context]));\n }, [dateMetadata]);\n\n const providerValue = useMemo(() => {\n // TODO FUTURE: Hookup with dateformat from localization provider\n const format = {\n weekday: \"long\",\n month: \"long\",\n day: \"2-digit\",\n year: \"numeric\",\n } as const;\n\n return {\n disableAutofocus: _disableAutofocus ?? false,\n focusedDate,\n setFocusedDate,\n selectedMonth,\n setSelectedMonth,\n selectedYear,\n setSelectedYear,\n hoveredDate,\n setHoveredDate,\n value,\n setValue,\n defaultTimeZone,\n id: id ?? uid,\n onSelection,\n controlled: !!iValue,\n range,\n minDate: normalizedMinDate,\n maxDate: normalizedMaxDate,\n unavailable: {\n dates: new Set(unavailable.dates),\n daysOfWeek: new Set(unavailable.daysOfWeek),\n },\n locale,\n dateFormat: format,\n startDay,\n dateMetadata: dateMetadataMap,\n };\n }, [\n focusedDate,\n selectedMonth,\n selectedYear,\n hoveredDate,\n id,\n locale,\n normalizedMaxDate,\n normalizedMinDate,\n iValue,\n onSelection,\n range,\n defaultTimeZone,\n uid,\n unavailable,\n value,\n startDay,\n dateMetadataMap,\n _disableAutofocus,\n ]);\n\n const handleHeaderKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowLeft\":\n e.preventDefault();\n setToolbarFocus((previousToolbarFocus) => {\n const newToolbarFocus =\n previousToolbarFocus === visibleHeaderButtons[0]\n ? visibleHeaderButtons[visibleHeaderButtons.length - 1]\n : (visibleHeaderButtons[\n visibleHeaderButtons.indexOf(previousToolbarFocus) - 1\n ] ?? visibleHeaderButtons[visibleHeaderButtons.length - 1]);\n const button = headerRef.current?.querySelector(\n `[data-calendar-header-button-name=\"${newToolbarFocus}\"]`,\n );\n if (\n button &&\n \"focus\" in button &&\n typeof (button as HTMLElement).focus === \"function\"\n ) {\n (button as HTMLElement).focus();\n }\n return newToolbarFocus;\n });\n\n break;\n case \"ArrowRight\":\n e.preventDefault();\n setToolbarFocus((previousToolbarFocus) => {\n const newToolbarFocus =\n previousToolbarFocus ===\n visibleHeaderButtons[visibleHeaderButtons.length - 1]\n ? visibleHeaderButtons[0]\n : (visibleHeaderButtons[\n visibleHeaderButtons.indexOf(previousToolbarFocus) + 1\n ] ?? visibleHeaderButtons[0]);\n const button = headerRef.current?.querySelector(\n `[data-calendar-header-button-name=\"${newToolbarFocus}\"]`,\n );\n if (\n button &&\n \"focus\" in button &&\n typeof (button as HTMLElement).focus === \"function\"\n ) {\n (button as HTMLElement).focus();\n }\n return newToolbarFocus;\n });\n }\n },\n [visibleHeaderButtons],\n );\n\n const handleMonthSelection = useCallback(\n (month: DateTime[\"month\"]) => {\n monthButtonRef.current?.focus();\n setToolbarFocus(toolbarFocusStates[0]);\n setSelectedMonth(month);\n setFocusedDate(\n DateTime.fromObject(\n {\n year: focusedDate?.year ?? 1,\n month: month,\n day: 1,\n },\n { zone: defaultTimeZone },\n ).startOf(\"day\"),\n );\n setCalendarSelectionState(\"day\");\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [focusedDate],\n );\n\n const handleYearSelection = useCallback(\n (year: number | null) => {\n if (year === null) return;\n yearButtonRef.current?.focus();\n setToolbarFocus(toolbarFocusStates[1]);\n setSelectedYear(year);\n setFocusedDate(\n DateTime.fromObject(\n {\n year: year,\n month: focusedDate?.month ?? 1,\n day: 1,\n },\n { zone: defaultTimeZone },\n ).startOf(\"day\"),\n );\n setCalendarSelectionState(\"day\");\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [focusedDate?.month],\n );\n\n return (\n <CalendarContext.Provider value={providerValue as CalendarContextProps}>\n <div\n ref={combinedRef}\n id={id ?? uid}\n style={styleCombined}\n className={classNameCombined}\n data-anv=\"calendar\"\n {...remainingProps}\n >\n <div className={styles[\"header\"]}>\n <span\n ref={headerRef}\n aria-label=\"Calendar navigation\"\n role=\"toolbar\"\n onKeyDown={handleHeaderKeyDown}\n className={styles[\"controller\"]}\n >\n <CalendarMonthButton\n ref={monthButtonRef}\n tabIndex={\n _disableFocus\n ? -1\n : toolbarFocus === toolbarFocusStates[0]\n ? 0\n : -1\n }\n data-calendar-header-button\n data-calendar-header-button-name={toolbarFocusStates[0]}\n calendarSelectionState={calendarSelectionState}\n onClick={() => {\n setCalendarSelectionState((prev) =>\n prev === \"month\" ? \"day\" : \"month\",\n );\n setToolbarFocus(toolbarFocusStates[0]);\n }}\n />\n <CalendarYearButton\n ref={yearButtonRef}\n tabIndex={\n _disableFocus\n ? -1\n : toolbarFocus === toolbarFocusStates[1]\n ? 0\n : -1\n }\n data-calendar-header-button\n data-calendar-header-button-name={toolbarFocusStates[1]}\n calendarSelectionState={calendarSelectionState}\n onClick={() => {\n setCalendarSelectionState((prev) =>\n prev === \"year\" ? \"day\" : \"year\",\n );\n setToolbarFocus(toolbarFocusStates[1]);\n }}\n />\n {calendarSelectionState === \"day\" && (\n <>\n <CalendarPrev\n tabIndex={\n _disableFocus\n ? -1\n : toolbarFocus === toolbarFocusStates[2]\n ? 0\n : -1\n }\n data-calendar-header-button\n data-calendar-header-button-name={toolbarFocusStates[2]}\n onClick={() => setToolbarFocus(toolbarFocusStates[2])}\n />\n <CalendarNext\n tabIndex={\n _disableFocus\n ? -1\n : toolbarFocus === toolbarFocusStates[3]\n ? 0\n : -1\n }\n data-calendar-header-button\n data-calendar-header-button-name={toolbarFocusStates[3]}\n onClick={() => setToolbarFocus(toolbarFocusStates[3])}\n />\n <CalendarNow\n tabIndex={\n _disableFocus\n ? -1\n : toolbarFocus === toolbarFocusStates[4]\n ? 0\n : -1\n }\n data-calendar-header-button\n data-calendar-header-button-name={toolbarFocusStates[4]}\n onClickFixed={() => setToolbarFocus(toolbarFocusStates[4])}\n />\n </>\n )}\n </span>\n </div>\n {calendarSelectionState === \"day\" && <CalendarMonth />}\n {calendarSelectionState === \"month\" && (\n <CalendarMonthSelection onMonthSelection={handleMonthSelection} />\n )}\n {calendarSelectionState === \"year\" && (\n // Wrapper div provides some manual offsetting to account for internal padding of the year selector\n <div className={styles[\"year-selector\"]}>\n <YearSelector\n onConfirm={handleYearSelection}\n required\n defaultValue={selectedYear}\n min={normalizedMinDate?.year}\n max={normalizedMaxDate?.year}\n />\n </div>\n )}\n </div>\n </CalendarContext.Provider>\n );\n },\n);\n\nCalendarElement.displayName = \"Calendar\";\n\n// export const useCalendar = useCoreCalendar;\n\n/**\n * Calendar component for viewing and selecting a date or range of dates.\n *\n * Features:\n * - Single date and date range selection modes\n * - Month and year navigation with header buttons\n * - Configurable start day (Sunday or Monday)\n * - Date range restrictions with min/max dates\n * - Unavailable dates and days of week support\n * - Locale and timezone customization\n * - Full accessibility support with ARIA attributes\n * - Keyboard navigation support\n * - Responsive design with automatic width detection\n * - Month and year selection views\n * - Today button for quick navigation\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar\n * value=\"2024-01-15\"\n * onSelection={({ value }) => console.log('Selected:', value)}\n * minDate=\"2024-01-01\"\n * maxDate=\"2024-12-31\"\n * />\n */\nexport const Calendar = Object.assign(CalendarElement, {\n /**\n * Calendar.Now component for navigating to today's date.\n *\n * Features:\n * - Quick navigation to current date\n * - Accessible button with proper ARIA labels\n * - Integrates with calendar context\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.Now />\n */\n Now: CalendarNow,\n /**\n * Calendar.Month component for displaying the month grid.\n *\n * Features:\n * - Displays calendar days in a table format\n * - Handles day selection and navigation\n * - Supports range selection mode\n * - Accessible with proper ARIA attributes\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.Month />\n */\n Month: CalendarMonth,\n /**\n * Calendar.Next component for navigating to the next month.\n *\n * Features:\n * - Navigation to next month\n * - Accessible button with proper ARIA labels\n * - Integrates with calendar context\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.Next />\n */\n Next: CalendarNext,\n /**\n * Calendar.Prev component for navigating to the previous month.\n *\n * Features:\n * - Navigation to previous month\n * - Accessible button with proper ARIA labels\n * - Integrates with calendar context\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.Prev />\n */\n Prev: CalendarPrev,\n /**\n * Calendar.MonthButton component for switching to month selection view.\n *\n * Features:\n * - Switches calendar to month selection mode\n * - Accessible button with proper ARIA labels\n * - Integrates with calendar context\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.MonthButton />\n */\n MonthButton: CalendarMonthButton,\n /**\n * Calendar.YearButton component for switching to year selection view.\n *\n * Features:\n * - Switches calendar to year selection mode\n * - Accessible button with proper ARIA labels\n * - Integrates with calendar context\n * - Data tracking integration for analytics\n *\n * @example\n * <Calendar.YearButton />\n */\n YearButton: CalendarYearButton,\n});\n"],"names":["IconKeyboardArrowUp","IconKeyboardArrowDown","styles","Prev","Next","date"],"mappings":";;;;;;;;;;;;;;;;;;AAwJO,MAAM,eAAA,GAAkB,cAA2C,IAAI,CAAA;AAOvE,SAAS,WAAA,GAAoC;AAClD,EAAA,MAAM,OAAA,GAAU,WAAW,eAAe,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,OAAA;AACT;;AC/JO,MAAM,SAAA,GAAY,CAAC,EAAA,EAAsB,EAAA,KAAyB;AACvE,EAAA,IAAI,CAAC,EAAA,IAAM,CAAC,EAAA,EAAI,OAAO,MAAA;AACvB,EAAA,IAAI;AACF,IAAA,IACE,EAAA,CAAG,OAAA,CAAQ,EAAA,EAAI,OAAO,KACtB,EAAA,CAAG,OAAA,CAAQ,EAAA,EAAI,MAAM,CAAA,IACrB,EAAA,CAAG,OAAA,CAAQ,EAAA,EAAI,KAAK,CAAA,EACpB;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AAEO,MAAM,WAAA,GAAc,CAAC,EAAA,EAAsB,EAAA,KAAyB;AACzE,EAAA,IAAI,CAAC,EAAA,IAAM,CAAC,EAAA,EAAI,OAAO,MAAA;AACvB,EAAA,IAAI,EAAA,CAAG,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAA,IAAK,GAAG,OAAA,CAAQ,EAAA,EAAI,MAAM,CAAA,EAAG,OAAO,IAAA;AAC9D,EAAA,OAAO,KAAA;AACT,CAAA;AAQO,MAAM,iBAAA,GAAoB,CAC/B,CAAA,EACA,WAAA,EACA,QAAA,KACG;AACH,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAI;AACvB,EAAA,WAAA,CAAY,KAAA,EAAO,OAAA,CAAQ,CAAC,IAAA,KAAS;AACnC,IAAA,MAAA,CAAO,GAAA,CAAI,YAAA,CAAa,QAAA,CAAS,OAAA,CAAQ,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,EACrE,CAAC,CAAA;AACD,EAAA,IAAI,WAAA,CAAY,UAAA,EAAY,GAAA,CAAI,CAAA,CAAE,OAAO,CAAA,EAAG;AAC1C,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,EAAE,KAAA,EAAM;AACxB,EAAA,IAAI,CAAC,OAAA,EAAS;AACd,EAAA,OAAO,MAAA,CAAO,GAAA;AAAA,IACZ,YAAA,CAAa,SAAS,OAAA,CAAQ,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,CAAC;AAAA,GAC5D;AACF,CAAA;AAEO,MAAM,eAAA,GAAkB,CAC7B,CAAA,EACA,OAAA,KACG,WAAW,OAAA,CAAQ,QAAA,EAAS,GAAI,CAAA,CAAE,QAAA,EAAS;AAEzC,MAAM,eAAA,GAAkB,CAC7B,CAAA,EACA,OAAA,KACG,WAAW,OAAA,CAAQ,QAAA,EAAS,GAAI,CAAA,CAAE,QAAA,EAAS;AAiBzC,MAAM,aAAA,GAAgB,CAAC,IAAA,EAAc,eAAA,KAA4B;AACtE,EAAA,OAAO,QAAA,CAAS,QAAQ,IAAA,EAAM,EAAE,MAAM,eAAA,EAAiB,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA;AACxE,CAAA;AAEO,MAAM,eAAe,CAAC,IAAA,KAC3B,KAAK,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAM;AAErB,SAAS,YAAA,CACd,KAAA,EACA,OAAA,EACA,QAAA,EACA,WAAA,EACA;AACA,EAAA,IAAI,KAAA,CAAM,SAAS,SAAA,CAAU,KAAA,CAAM,OAAO,OAAO,CAAA,IAAK,CAAC,KAAA,CAAM,GAAA,EAAK;AAChE,IAAA,QAAA,CAAS,CAAC,IAAA,KAAS;AACjB,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAA,EAAK,OAAA,EAAQ;AAAA,IACjC,CAAC,CAAA;AACD,IAAA,WAAA,GAAc;AAAA,MACZ,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA,IAAK,MAAA;AAAA,QACpC,GAAA,EAAK,YAAA,CAAa,OAAO,CAAA,IAAK;AAAA;AAChC,KACD,CAAA;AACD,IAAA;AAAA,EACF;AACA,EAAA,IACG,CAAC,KAAA,CAAM,KAAA,IAAS,CAAC,KAAA,CAAM,GAAA,IACvB,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,GAAA,IACrB,KAAA,CAAM,KAAA,IACL,CAAC,KAAA,CAAM,GAAA,IACP,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,CAAE,QAAA,EAAS,GAAI,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,CAAE,QAAA,EAAS,EAC1E;AACA,IAAA,QAAA,CAAS,EAAE,KAAA,EAAO,OAAA,EAAS,GAAA,EAAK,MAAM,CAAA;AACtC,IAAA,WAAA,GAAc;AAAA,MACZ,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,YAAA,CAAa,OAAO,CAAA,IAAK,MAAA;AAAA,QAChC,GAAA,EAAK;AAAA;AACP,KACD,CAAA;AACD,IAAA;AAAA,EACF;AACA,EAAA,IACE,MAAM,KAAA,IACN,CAAC,KAAA,CAAM,GAAA,IACP,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,CAAE,UAAS,GAAI,OAAA,CAAQ,QAAQ,KAAK,CAAA,CAAE,UAAS,EACxE;AACA,IAAA,QAAA,CAAS,CAAC,IAAA,KAAS;AACjB,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAA,EAAK,OAAA,EAAQ;AAAA,IACjC,CAAC,CAAA;AACD,IAAA,WAAA,GAAc;AAAA,MACZ,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA,IAAK,MAAA;AAAA,QACpC,GAAA,EAAK,YAAA,CAAa,OAAO,CAAA,IAAK;AAAA;AAChC,KACD,CAAA;AACD,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,GAAA,EAAK;AAC7B,IAAA,QAAA,CAAS,CAAC,IAAA,KAAS;AACjB,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,OAAA,EAAQ;AAAA,IACnC,CAAC,CAAA;AACD,IAAA,WAAA,GAAc;AAAA,MACZ,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,YAAA,CAAa,OAAO,CAAA,IAAK,MAAA;AAAA,QAChC,GAAA,EAAK,YAAA,CAAa,KAAA,CAAM,GAAG,CAAA,IAAK;AAAA;AAClC,KACD,CAAA;AACD,IAAA;AAAA,EACF;AACF;AAEO,MAAM,eAAA,GAAkB,CAC7B,IAAA,EACA,YAAA,KACuB;AACvB,EAAA,IAAI,CAAC,cAAc,OAAO,MAAA;AAC1B,EAAA,MAAM,UAAA,GAAa,KAAK,SAAA,EAAU;AAClC,EAAA,OAAO,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA,GAAI,MAAA;AACrD,CAAA;;AClIO,MAAM,WAAA,GAAc,UAAA;AAAA,EACzB,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAc,GAAG,MAAK,GAAI,KAAA;AAC3C,IAAA,MAAM;AAAA,MACJ,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,QACE,WAAA,EAAY;AAEhB,IAAA,MAAM,SAAS,QAAA,CAAS,OAAA,CAAQ,SAAS,GAAA,EAAI,CAAE,OAAM,EAAG;AAAA,MACtD,IAAA,EAAM;AAAA,KACP,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA;AAChB,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAqC;AAC3D,MAAA,YAAA,GAAe,CAAC,CAAA;AAChB,MAAA,cAAA,CAAe,MAAM,CAAA;AACrB,MAAA,gBAAA,CAAiB,OAAO,KAAK,CAAA;AAC7B,MAAA,eAAA,CAAgB,OAAO,IAAI,CAAA;AAC3B,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,WAAA,GAAc;AAAA,UACZ,KAAA,EAAO,YAAA,CAAa,MAAM,CAAA,IAAK;AAAA,SAChC,CAAA;AACD,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,QAAA,CAAS,MAAM,CAAA;AAAA,QACjB;AACA,QAAA;AAAA,MACF;AACA,MAAA,YAAA,CAAa,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,WAAW,CAAA;AAAA,IACnD,CAAA;AAEA,IAAA,MAAM,UAAA,GACJ,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA,IAC/B,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA,IAC/B,iBAAA,CAAkB,MAAA,EAAQ,WAAA,EAAa,eAAe,CAAA;AAExD,IAAA,uBACE,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,OAAA,EAAS,cAAA;AAAA,QACT,UAAA,EAAW,OAAA;AAAA,QACX,QAAA,EAAU,UAAA;AAAA,QACV,UAAA,EAAS,cAAA;AAAA,QACT,IAAA,EAAK,OAAA;AAAA,QACJ,GAAG,IAAA;AAAA,QACL,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,EAEJ;AACF;AAEA,WAAA,CAAY,WAAA,GAAc,mBAAA;;AChEnB,MAAM,kBAAA,GAAqB,UAAA,CAGhC,CAAC,KAAA,EAAO,GAAA,KAAQ;AAChB,EAAA,MAAM,EAAE,sBAAA,EAAwB,GAAG,IAAA,EAAK,GAAI,KAAA;AAC5C,EAAA,MAAM,EAAE,YAAA,EAAc,MAAA,EAAO,GAAI,WAAA,EAAY;AAE7C,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,UAAA,CAAW,EAAE,MAAM,YAAA,EAAc,CAAA,CAC3D,SAAA,CAAU,MAAM,CAAA,CAChB,cAAA,CAAe,EAAE,IAAA,EAAM,WAAW,CAAA;AAErC,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,UAAA,EAAW,OAAA;AAAA,MACX,IAAA,EAAK,OAAA;AAAA,MACL,IAAA,EAAM;AAAA,QACJ,KAAA,EACE,sBAAA,KAA2B,MAAA,GACvBA,kBAAA,GACAC;AAAA,OACR;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ,CAAC;AAED,kBAAA,CAAmB,WAAA,GAAc,oBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChC1B,MAAM,YAAA,GAAe,UAAA;AAAA,EAC1B,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,GAAG,MAAK,GAAI,KAAA;AACxC,IAAA,MAAM;AAAA,MACJ,WAAA;AAAA,MACA,cAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,QACE,WAAA,EAAY;AAEhB,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAE9C,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,WAAA;AAAA,QACE,OAAA,IAAW,IAAA,IACT,WAAA,CAAY,KAAA,CAAM,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,OAAO,CAAA,GAAI;AAAA,OACrD;AAAA,IACF,CAAA,EAAG,CAAC,OAAA,EAAS,WAAW,CAAC,CAAA;AAEzB,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAqC;AAC3D,MAAA,OAAA,GAAU,CAAC,CAAA;AAEX,MAAA,MAAM,WAAA,GAAc,YAAY,KAAA,CAAM,EAAE,OAAO,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,OAAO,CAAA;AACjE,MAAA,MAAM,aAAa,WAAA,CAAY,KAAA,CAAM,EAAE,KAAA,EAAO,GAAG,CAAA;AAGjD,MAAA,MAAM,sBAAA,GACJ,WAAA,CAAY,KAAA,KAAU,CAAA,IAAK,WAAW,KAAA,KAAU,EAAA;AAElD,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,IAAI,UAAA,CAAW,QAAA,EAAS,IAAK,OAAA,EAAS,UAAS,EAAG;AAChD,UAAA,cAAA,CAAe,UAAU,CAAA;AACzB,UAAA,gBAAA,CAAiB,WAAW,KAAK,CAAA;AACjC,UAAA,IAAI,sBAAA,EAAwB;AAC1B,YAAA,eAAA,CAAgB,WAAW,IAAI,CAAA;AAAA,UACjC;AACA,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,CAAC,WAAA,CAAY,WAAA,EAAa,WAAW,CAAA,EAAG;AAC1C,UAAA,cAAA,CAAe,OAAO,CAAA;AACtB,UAAA,gBAAA,CAAiB,QAAQ,KAAK,CAAA;AAC9B,UAAA,IAAI,sBAAA,EAAwB;AAC1B,YAAA,eAAA,CAAgB,QAAQ,IAAI,CAAA;AAAA,UAC9B;AAAA,QACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,cAAA,CAAe,UAAU,CAAA;AACzB,MAAA,gBAAA,CAAiB,WAAW,KAAK,CAAA;AACjC,MAAA,IAAI,sBAAA,EAAwB;AAC1B,QAAA,eAAA,CAAgB,WAAW,IAAI,CAAA;AAAA,MACjC;AAAA,IACF,CAAA;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,OAAA,EAAS,cAAA;AAAA,QACT,SAAA,EAAW,EAAA,CAAGC,QAAA,CAAO,mBAAmB,GAAG,SAAS,CAAA;AAAA,QACpD,UAAA,EAAW,OAAA;AAAA,QACX,IAAA,EAAK,OAAA;AAAA,QACL,IAAA,EAAMC,oBAAA;AAAA,QACN,UAAA,EAAS,eAAA;AAAA,QACT,YAAA,EAAW,gBAAA;AAAA,QACV,GAAG,IAAA;AAAA,QACJ;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,YAAA,CAAa,WAAA,GAAc,oBAAA;;ACzEpB,MAAM,YAAA,GAAe,UAAA;AAAA,EAC1B,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,GAAG,MAAK,GAAI,KAAA;AACxC,IAAA,MAAM;AAAA,MACJ,WAAA;AAAA,MACA,cAAA;AAAA,MACA,OAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,QACE,WAAA,EAAY;AAEhB,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAE9C,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,WAAA;AAAA,QACE,OAAA,IAAW,IAAA,IACT,WAAA,CAAY,IAAA,CAAK,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAA,GAAI;AAAA,OACtD;AAAA,IACF,CAAA,EAAG,CAAC,OAAA,EAAS,WAAW,CAAC,CAAA;AAEzB,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAqC;AAC3D,MAAA,OAAA,GAAU,CAAC,CAAA;AAEX,MAAA,MAAM,WAAA,GAAc,YAAY,IAAA,CAAK,EAAE,OAAO,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAA;AAClE,MAAA,MAAM,aAAa,WAAA,CAAY,IAAA,CAAK,EAAE,KAAA,EAAO,GAAG,CAAA;AAGhD,MAAA,MAAM,sBAAA,GACJ,WAAA,CAAY,KAAA,KAAU,EAAA,IAAM,WAAW,KAAA,KAAU,CAAA;AAEnD,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,IAAI,UAAA,CAAW,QAAA,EAAS,IAAK,OAAA,EAAS,UAAS,EAAG;AAChD,UAAA,cAAA,CAAe,UAAU,CAAA;AACzB,UAAA,gBAAA,CAAiB,WAAW,KAAK,CAAA;AACjC,UAAA,IAAI,sBAAA,EAAwB;AAC1B,YAAA,eAAA,CAAgB,WAAW,IAAI,CAAA;AAAA,UACjC;AACA,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,CAAC,WAAA,CAAY,WAAA,EAAa,WAAW,CAAA,EAAG;AAC1C,UAAA,cAAA,CAAe,OAAO,CAAA;AACtB,UAAA,gBAAA,CAAiB,QAAQ,KAAK,CAAA;AAC9B,UAAA,IAAI,sBAAA,EAAwB;AAC1B,YAAA,eAAA,CAAgB,QAAQ,IAAI,CAAA;AAAA,UAC9B;AAAA,QACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,cAAA,CAAe,UAAU,CAAA;AACzB,MAAA,gBAAA,CAAiB,WAAW,KAAK,CAAA;AACjC,MAAA,IAAI,sBAAA,EAAwB;AAC1B,QAAA,eAAA,CAAgB,WAAW,IAAI,CAAA;AAAA,MACjC;AAAA,IACF,CAAA;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,cAAA;AAAA,QACT,UAAA,EAAW,OAAA;AAAA,QACX,IAAA,EAAK,OAAA;AAAA,QACL,SAAA,EAAW,EAAA,CAAGD,QAAA,CAAO,mBAAmB,GAAG,SAAS,CAAA;AAAA,QACpD,IAAA,EAAME,qBAAA;AAAA,QACN,YAAA,EAAW,YAAA;AAAA,QACX,UAAA,EAAS,eAAA;AAAA,QACT,GAAA;AAAA,QACC,GAAG,IAAA;AAAA,QACJ;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,YAAA,CAAa,WAAA,GAAc,oBAAA;;ACrEpB,MAAM,mBAAA,GAAsB,UAAA,CAGjC,CAAC,KAAA,EAAO,GAAA,KAAQ;AAChB,EAAA,MAAM,EAAE,sBAAA,EAAwB,OAAA,EAAS,GAAG,MAAK,GAAI,KAAA;AACrD,EAAA,MAAM,EAAE,aAAA,EAAe,MAAA,EAAO,GAAI,WAAA,EAAY;AAE9C,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,UAAA,CAAW,EAAE,KAAA,EAAO,aAAA,EAAe,CAAA,CAC9D,SAAA,CAAU,MAAM,CAAA,CAChB,QAAA,CAAS,KAAK,CAAA;AAEjB,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,UAAA,EAAW,OAAA;AAAA,MACX,IAAA,EAAK,OAAA;AAAA,MACL,OAAA;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,KAAA,EACE,sBAAA,KAA2B,OAAA,GACvBJ,kBAAA,GACAC;AAAA,OACR;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ,CAAC;AAED,mBAAA,CAAoB,WAAA,GAAc,qBAAA;;ACf3B,MAAM,WAAA,GAAc,UAAA;AAAA,EACzB,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,MAAK,GAAI,KAAA;AACrC,IAAA,MAAM,UAAU,WAAA,EAAY;AAC5B,IAAA,MAAM;AAAA,MACJ,gBAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA;AAAA,MACA,EAAA,EAAI,GAAA;AAAA,MACJ,KAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF,GAAI,OAAA;AAEJ,IAAA,MAAM,WAAA,GAAc,OAAO,KAAK,CAAA;AAEhC,IAAA,MAAM,mBAAA,GAAsB,WAAA;AAAA,MAC1B,CAAC,UAAA,KAAyB;AACxB,QAAA,IAAI,YAAY,IAAA,IAAQ,UAAA,CAAW,UAAS,GAAI,OAAA,EAAS,UAAS,EAAG;AACnE,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,iBAAA,CAAkB,UAAA,EAAY,WAAA,EAAa,eAAe,CAAA,EAAG;AAC/D,UAAA,IAAI,gBAAgB,UAAA,CAAW,IAAA,CAAK,EAAE,IAAA,EAAM,GAAG,CAAA;AAC/C,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,YAAA,IACE,YAAY,IAAA,IACZ,aAAA,CAAc,UAAS,GAAI,OAAA,EAAS,UAAS,EAC7C;AACA,cAAA;AAAA,YACF;AACA,YAAA,IACE,iBAAA,CAAkB,aAAA,EAAe,WAAA,EAAa,eAAe,CAAA,EAC7D;AACA,cAAA,aAAA,GAAgB,aAAA,CAAc,IAAA,CAAK,EAAE,IAAA,EAAM,GAAG,CAAA;AAAA,YAChD,CAAA,MAAO;AAEL,cAAA,cAAA,CAAe,aAAa,CAAA;AAC5B,cAAA;AAAA,YACF;AAAA,UACF;AACA,UAAA;AAAA,QACF;AAEA,QAAA,cAAA,CAAe,UAAU,CAAA;AAEzB,QAAA,IAAI,UAAA,CAAW,KAAA,KAAU,WAAA,CAAY,KAAA,EAAO;AAC1C,UAAA,gBAAA,CAAiB,WAAW,KAAK,CAAA;AACjC,UAAA,IAAI,UAAA,CAAW,IAAA,KAAS,WAAA,CAAY,IAAA,EAAM;AACxC,YAAA,eAAA,CAAgB,WAAW,IAAI,CAAA;AAAA,UACjC;AAAA,QACF;AAAA,MACF,CAAA;AAAA;AAAA,MAEA,CAAC,OAAA,EAAS,cAAA,EAAgB,eAAA,EAAiB,WAAW;AAAA,KACxD;AAEA,IAAA,MAAM,iBAAA,GAAoB,CAAC,UAAA,KAAyB;AAClD,MAAA,IAAI,YAAY,IAAA,IAAQ,UAAA,CAAW,UAAS,GAAI,OAAA,EAAS,UAAS,EAAG;AACnE,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,iBAAA,CAAkB,UAAA,EAAY,WAAA,EAAa,eAAe,CAAA,EAAG;AAC/D,QAAA,IAAI,gBAAgB,UAAA,CAAW,KAAA,CAAM,EAAE,IAAA,EAAM,GAAG,CAAA;AAChD,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,UAAA,IACE,YAAY,IAAA,IACZ,aAAA,CAAc,UAAS,GAAI,OAAA,EAAS,UAAS,EAC7C;AACA,YAAA;AAAA,UACF;AACA,UAAA,IAAI,iBAAA,CAAkB,aAAA,EAAe,WAAA,EAAa,eAAe,CAAA,EAAG;AAClE,YAAA,aAAA,GAAgB,aAAA,CAAc,KAAA,CAAM,EAAE,IAAA,EAAM,GAAG,CAAA;AAAA,UACjD,CAAA,MAAO;AAEL,YAAA,cAAA,CAAe,aAAa,CAAA;AAC5B,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAEA,MAAA,cAAA,CAAe,UAAU,CAAA;AAEzB,MAAA,IAAI,UAAA,CAAW,KAAA,KAAU,WAAA,CAAY,KAAA,EAAO;AAC1C,QAAA,gBAAA,CAAiB,WAAW,KAAK,CAAA;AACjC,QAAA,IAAI,UAAA,CAAW,IAAA,KAAS,WAAA,CAAY,IAAA,EAAM;AACxC,UAAA,eAAA,CAAgB,WAAW,IAAI,CAAA;AAAA,QACjC;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,cAAA,GAAiB,CAACI,KAAAA,EAAgB,WAAA,KAA2B;AACjE,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,SAAA,CAAUA,KAAAA,EAAqB,KAAK,CAAA;AAAA,MAC7C;AACA,MAAA,IAAI,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,GAAA,EAAK;AAC5B,QAAA,OACEA,MAAK,QAAA,EAAS,IAAK,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,CAAE,QAAA,EAAS,IACvDA,KAAAA,CAAK,UAAS,IAAK,KAAA,CAAM,IAAI,KAAA,CAAM,KAAK,EAAE,QAAA,EAAS;AAAA,MAEvD;AAEA,MAAA,OAAO,SAAA,CAAUA,KAAAA,EAAM,KAAA,CAAM,KAAK,CAAA;AAAA,IACpC,CAAA;AAEA,IAAA,MAAM,OAAA,GAAU,CAACA,KAAAA,KAAmB;AAClC,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,IAAI,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,GAAA,EAAK;AAC5B,QAAA,OACEA,KAAAA,CAAK,QAAA,EAAS,IAAK,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,CAAE,QAAA,EAAS,IACvDA,KAAAA,CAAK,QAAA,MAAc,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,CAAE,QAAA,EAAS,IACnD,CAAC,SAAA,CAAU,KAAA,CAAM,KAAA,EAAOA,KAAI,CAAA,IAC5B,CAAC,SAAA,CAAU,KAAA,CAAM,KAAKA,KAAI,CAAA;AAAA,MAE9B;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAAwC;AAChE,MAAA,QAAQ,EAAE,IAAA;AAAM,QACd,KAAK,OAAA;AAAA,QACL,KAAK,OAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,CAAC,KAAA,EAAO;AACV,YAAA,IAAI,CAAC,UAAA,EAAY;AACf,cAAA,QAAA,CAAS,SAAA,CAAU,KAAA,EAAO,WAAW,CAAA,GAAI,OAAO,WAAW,CAAA;AAAA,YAC7D;AACA,YAAA,WAAA,GAAc;AAAA,cACZ,KAAA,EAAO,SAAA,CAAU,KAAA,EAAO,WAAW,IAC/B,MAAA,GACC,WAAA,CACE,OAAA,CAAQ,eAAe,CAAA,CACvB,OAAA,CAAQ,KAAK,CAAA,CACb,OAAM,IAAK;AAAA,aACnB,CAAA;AACD,YAAA;AAAA,UACF;AACA,UAAA,YAAA,CAAa,KAAA,EAAO,WAAA,EAAa,QAAA,EAAU,WAAW,CAAA;AACtD,UAAA;AAAA,QACF,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,iBAAA,CAAkB,YAAY,KAAA,CAAM,EAAE,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA;AAChD,UAAA;AAAA,QACF,KAAK,YAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,mBAAA,CAAoB,YAAY,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA;AACjD,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,iBAAA,CAAkB,YAAY,KAAA,CAAM,EAAE,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA;AAChD,UAAA;AAAA,QACF,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,mBAAA,CAAoB,YAAY,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA;AACjD,UAAA;AAAA,QACF,KAAK,QAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,EAAE,QAAA,EAAU;AACd,YAAA,iBAAA,CAAkB,YAAY,KAAA,CAAM,EAAE,KAAA,EAAO,CAAA,EAAG,CAAC,CAAA;AACjD,YAAA;AAAA,UACF;AACA,UAAA,iBAAA,CAAkB,YAAY,KAAA,CAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AAClD,UAAA;AAAA,QACF,KAAK,UAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,EAAE,QAAA,EAAU;AACd,YAAA,mBAAA,CAAoB,YAAY,IAAA,CAAK,EAAE,KAAA,EAAO,CAAA,EAAG,CAAC,CAAA;AAClD,YAAA;AAAA,UACF;AACA,UAAA,mBAAA,CAAoB,YAAY,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AACnD,UAAA;AAGA;AACJ,IACF,CAAA;AAEA,IAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,IAAA,QAAQ,QAAA;AAAU,MAChB,KAAK,QAAA;AACH,QAAA,aAAA,GAAgB,CAAA;AAChB,QAAA;AAAA,MACF,KAAK,QAAA;AAAA,MACL;AACE,QAAA,aAAA,GAAgB,CAAA;AAAA;AAGpB,IAAA,MAAM,cAAwB,EAAC;AAC/B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,MAAM,QAAA,GAAA,CAAY,gBAAgB,CAAA,IAAK,CAAA;AACvC,MAAA,WAAA,CAAY,IAAA,CAAK,KAAK,QAAA,CAAS,QAAA,EAAU,EAAE,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,IAChE;AAEA,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAG5C,IAAA,IAAI,QAAA,CAAS,OAAA,KAAY,aAAA,GAAgB,CAAA,EAAG;AAE1C,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,QAAA,MAAM,UAAU,QAAA,CAAS,KAAA,CAAM,EAAE,IAAA,EAAM,GAAG,CAAA;AAE1C,QAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,aAAA,GAAgB,CAAA,EAAG;AAAA,MAC7C;AAAA,IACF;AAGA,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAgB;AACtC,MAAA,cAAA,CAAe,CAAC,CAAA;AAChB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,WAAA,GAAc;AAAA,UACZ,OAAO,YAAA,CAAa,CAAA,CAAE,OAAA,CAAQ,eAAe,CAAC,CAAA,IAAK;AAAA,SACpD,CAAA;AACD,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,QAAA,CAAS,CAAC,CAAA;AAAA,QACZ;AACA,QAAA;AAAA,MACF;AAEA,MAAA,YAAA,CAAa,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,WAAW,CAAA;AAAA,IAC9C,CAAA;AAEA,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAgB;AACtC,MAAA,cAAA,CAAe,CAAC,CAAA;AAAA,IAClB,CAAA;AACA,IAAA,MAAM,gBAAgB,MAAM;AAC1B,MAAA,cAAA,CAAe,MAAS,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,mBAAA,GAAsB,CAAC,CAAA,KAAgB;AAC3C,MAAA,cAAA,CAAe,CAAC,CAAA;AAAA,IAClB,CAAA;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,QAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,qBAAA,CAAsB,MAAM;AAC1B,UAAA,MAAM,aAAA,GACJ,QAAA,CAAS,cAAA,CAAe,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,WAAA,CAAY,SAAA,EAAW,CAAA,CAAE,CAAA,IAC3D,QAAA,CAAS,eAAe,UAAA,EAAY,cAAA;AAAA,YAClC,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,WAAA,CAAY,WAAW,CAAA;AAAA,WACnC;AACF,UAAA,aAAA,EAAe,KAAA,EAAM;AAAA,QACvB,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA,EAAG,CAAC,WAAA,EAAa,GAAA,EAAK,gBAAgB,CAAC,CAAA;AAEvC,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,iBAAA,CAAkB,WAAA,EAAa,WAAA,EAAa,eAAe,CAAA,EAAG;AACnE,MAAA,mBAAA,CAAoB,YAAY,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA;AAAA,IACnD,GAAG,CAAC,WAAA,EAAa,mBAAA,EAAqB,eAAA,EAAiB,WAAW,CAAC,CAAA;AAEnE,IAAA,MAAM,aACJ,CAAC,WAAA,CAAY,IAAA,EAAM,WAAW,KAC9B,eAAA,CAAgB,IAAA,EAAM,OAAO,CAAA,IAC7B,gBAAgB,IAAA,EAAM,OAAO,KAC7B,iBAAA,CAAkB,IAAA,EAAM,aAAa,eAAe,CAAA;AACtD,IAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,IAAA,EAAM,WAAA,EAAa,eAAe,CAAA;AAE1E,IAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,IAAA,EAAM,YAAY,CAAA;AAEtD,IAAA,MAAM,aACJ,KAAA,IACA,WAAA,IACA,MAAM,KAAA,IACN,CAAC,MAAM,GAAA,IACP,IAAA,CAAK,UAAS,GAAI,KAAA,CAAM,MAAM,QAAA,EAAS,IACvC,KAAK,QAAA,EAAS,IAAK,YAAY,QAAA,EAAS;AAE1C,IAAA,MAAM,MAAA,GAAS,EAAA,CAAGH,QAAA,CAAO,MAAM,CAAA,EAAG;AAAA,MAChC,CAACA,SAAO,UAAU,CAAC,GAAG,CAAC,aAAA,IAAiB,eAAe,IAAI,CAAA;AAAA,MAC3D,CAACA,QAAA,CAAO,aAAa,CAAC,GACpB,KAAA,IACA,KAAA,CAAM,KAAA,KACL,KAAA,CAAM,GAAA,IAAO,WAAA,CAAA,IACd,SAAA,CAAU,IAAA,EAAM,MAAM,KAAK,CAAA;AAAA,MAC7B,CAACA,QAAA,CAAO,YAAY,CAAC,GACnB,KAAA,KACE,MAAM,KAAA,IAAS,KAAA,CAAM,GAAA,IAAO,SAAA,CAAU,MAAM,KAAA,CAAM,GAAG,KACpD,UAAA,IAAc,SAAA,CAAU,MAAM,WAAW,CAAA,CAAA;AAAA,MAC9C,CAACA,QAAA,CAAO,OAAO,CAAC,GAAG,OAAA,CAAQ,IAAI,CAAA,IAAK,UAAA;AAAA,MACpC,CAACA,QAAA,CAAO,gBAAgB,CAAC,GAAG,aAAA;AAAA,MAC5B,CAACA,SAAO,UAAU,CAAC,GAAG,CAAC,WAAA,CAAY,MAAM,WAAW,CAAA;AAAA,MACpD,CAACA,SAAO,YAAY,CAAC,GAAG,UAAA,IAAc,SAAA,CAAU,MAAM,WAAW,CAAA;AAAA,MACjE,CAACA,QAAA,CAAO,cAAc,CAAC,GAAG;AAAA,KAC3B,CAAA;AACD,IAAA,MAAM,YACJ,OAAA,KAAY,IAAA,IAAQ,KAAK,QAAA,EAAS,IAAK,SAAS,QAAA,EAAS;AAC3D,IAAA,MAAM,YACJ,OAAA,KAAY,IAAA,IAAQ,KAAK,QAAA,EAAS,IAAK,SAAS,QAAA,EAAS;AAE3D,IAAA,4BACG,IAAA,EAAA,EAA0B,IAAA,EAAK,UAAA,EAAY,GAAG,MAAM,GAAA,EAClD,QAAA,EAAA;AAAA,MAAA,CAAC,aAAA,KAAkB,OAAA,CAAQ,IAAI,CAAA,IAAK,UAAA,CAAA,mBACnC,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,cAAA;AAAA,UACL,SAAA,EAAW,EAAA,CAAGA,QAAA,CAAO,YAAY,CAAA,EAAG;AAAA,YAClC,CAACA,QAAA,CAAO,gBAAgB,CAAC,GAAG,UAAA;AAAA,YAC5B,CAACA,SAAO,YAAY,CAAC,GACnB,UAAA,IAAc,SAAA,CAAU,MAAM,WAAW;AAAA,WAC5C;AAAA;AAAA,OACH,GACE,IAAA;AAAA,sBACJ,IAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,UAClC,OAAA,EAAS,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,UAClC,MAAA,EAAQ,MAAM,aAAA,EAAc;AAAA,UAC5B,SAAA,EAAW,MAAA;AAAA,UACX,SAAA,EAAW,gBAAA;AAAA,UACX,YAAA,EAAc,MAAM,mBAAA,CAAoB,IAAI,CAAA;AAAA,UAC5C,UACE,gBAAA,GAAmB,EAAA,GAAK,UAAU,IAAA,EAAM,WAAW,IAAI,CAAA,GAAI,EAAA;AAAA,UAE7D,QAAA,EAAU,aAAa,IAAA,GAAO,MAAA;AAAA,UAC9B,YAAA,EAAY,CAAA,EAAG,IAAA,CAAK,cAAA,CAAe,UAAU,CAAC,CAAA,EAAG,cAAA,CAAe,IAAI,CAAA,GAAI,WAAA,GAAc,EAAE,GAAG,WAAA,GAAc,CAAA,EAAA,EAAK,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,EAAG,SAAA,GAAY,uCAAA,GAA0C,EAAE,CAAA,EAAG,SAAA,GAAY,sCAAA,GAAyC,EAAE,CAAA,CAAA;AAAA,UACrP,IAAI,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,CAAA;AAAA,UAE7B,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,GAAA;AAAA,YACL,WAAA,wBAAgB,MAAA,EAAA,EAAK,SAAA,EAAWA,SAAO,KAAK,CAAA,EAAG,eAAY,MAAA,EAAO;AAAA;AAAA;AAAA;AACrE,KAAA,EAAA,EA3BO,IAAA,CAAK,WA4Bd,CAAA;AAAA,EAEJ;AACF,CAAA;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;;ACjWnB,MAAM,YAAA,GAAe,UAAA;AAAA,EAC1B,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,MAAK,GAAI,KAAA;AACrC,IAAA,MAAM,UAAU,WAAA,EAAY;AAC5B,IAAA,MAAM;AAAA,MACJ,WAAA;AAAA,MACA,cAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,EAAA,EAAI,GAAA;AAAA,MACJ;AAAA,KACF,GAAI,OAAA;AAEJ,IAAA,MAAM,WAAA,GAAc,OAAO,KAAK,CAAA;AAEhC,IAAA,MAAM,mBAAA,GAAsB,WAAA;AAAA,MAC1B,CAAC,UAAA,KAAyB;AACxB,QAAA,IAAI,YAAY,IAAA,IAAQ,UAAA,CAAW,UAAS,GAAI,OAAA,EAAS,UAAS,EAAG;AACnE,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,iBAAA,CAAkB,UAAA,EAAY,WAAA,EAAa,eAAe,CAAA,EAAG;AAC/D,UAAA,IAAI,gBAAgB,UAAA,CAAW,IAAA,CAAK,EAAE,IAAA,EAAM,GAAG,CAAA;AAC/C,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,YAAA,IACE,YAAY,IAAA,IACZ,aAAA,CAAc,UAAS,GAAI,OAAA,EAAS,UAAS,EAC7C;AACA,cAAA;AAAA,YACF;AACA,YAAA,IACE,iBAAA,CAAkB,aAAA,EAAe,WAAA,EAAa,eAAe,CAAA,EAC7D;AACA,cAAA,aAAA,GAAgB,aAAA,CAAc,IAAA,CAAK,EAAE,IAAA,EAAM,GAAG,CAAA;AAAA,YAChD,CAAA,MAAO;AAEL,cAAA,cAAA,CAAe,aAAa,CAAA;AAC5B,cAAA;AAAA,YACF;AAAA,UACF;AACA,UAAA;AAAA,QACF;AAEA,QAAA,cAAA,CAAe,UAAU,CAAA;AAAA,MAC3B,CAAA;AAAA,MACA,CAAC,OAAA,EAAS,cAAA,EAAgB,eAAA,EAAiB,WAAW;AAAA,KACxD;AAEA,IAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,IAAA,QAAQ,QAAA;AAAU,MAChB,KAAK,QAAA;AACH,QAAA,aAAA,GAAgB,CAAA;AAChB,QAAA;AAAA,MACF,KAAK,QAAA;AAAA,MACL;AACE,QAAA,aAAA,GAAgB,CAAA;AAAA;AAGpB,IAAA,MAAM,cAAwB,EAAC;AAC/B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,MAAM,QAAA,GAAA,CAAY,gBAAgB,CAAA,IAAK,CAAA;AACvC,MAAA,WAAA,CAAY,IAAA,CAAK,KAAK,QAAA,CAAS,QAAA,EAAU,EAAE,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,IAChE;AAEA,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAG5C,IAAA,IAAI,QAAA,CAAS,OAAA,KAAY,aAAA,GAAgB,CAAA,EAAG;AAE1C,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,QAAA,MAAM,UAAU,QAAA,CAAS,KAAA,CAAM,EAAE,IAAA,EAAM,GAAG,CAAA;AAE1C,QAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,aAAA,GAAgB,CAAA,EAAG;AAAA,MAC7C;AAAA,IACF;AAGA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AAC1B,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,MAAM,gBAAgB,QAAA,CAAS,cAAA;AAAA,UAC7B,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,WAAA,CAAY,WAAW,CAAA;AAAA,SACnC;AACA,QAAA,aAAA,EAAe,KAAA,EAAM;AAAA,MACvB,GAAG,GAAG,CAAA;AAAA,IACR,CAAA,EAAG,CAAC,WAAA,EAAa,GAAG,CAAC,CAAA;AAErB,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,iBAAA,CAAkB,WAAA,EAAa,WAAA,EAAa,eAAe,CAAA,EAAG;AACnE,MAAA,mBAAA,CAAoB,YAAY,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA;AAAA,IACnD,GAAG,CAAC,WAAA,EAAa,mBAAA,EAAqB,eAAA,EAAiB,WAAW,CAAC,CAAA;AAEnE,IAAA,uBACE,GAAA,CAAC,QAAI,GAAG,IAAA,EAAM,KACX,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM;AACf,MAAA,2BAAQ,WAAA,EAAA,EAAY,IAAA,EAAM,CAAA,EAAA,EAAQ,CAAA,CAAE,WAAa,CAAA;AAAA,IACnD,CAAC,CAAA,EACH,CAAA;AAAA,EAEJ;AACF,CAAA;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;;ACzGpB,MAAM,aAAA,GAAgB,UAAA;AAAA,EAC3B,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,MAAM,EAAE,SAAA,EAAW,GAAG,IAAA,EAAK,GAAI,KAAA;AAC/B,IAAA,MAAM,UAAU,WAAA,EAAY;AAC5B,IAAA,MAAM;AAAA,MACJ,KAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,cAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,EAAA,EAAI,GAAA;AAAA,MACJ,KAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,GAAI,OAAA;AAEJ,IAAA,MAAM,WAAA,GAAc,OAAO,KAAK,CAAA;AAEhC,IAAA,MAAM,MAAA,GAAS,EAAA,CAAGA,QAAA,CAAO,MAAM,GAAG,SAAS,CAAA;AAC3C,IAAA,MAAM,mBAAA,GAAsB,WAAA;AAAA,MAC1B,CAAC,UAAA,KAAyB;AACxB,QAAA,IAAI,YAAY,IAAA,IAAQ,UAAA,CAAW,UAAS,GAAI,OAAA,EAAS,UAAS,EAAG;AACnE,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,iBAAA,CAAkB,UAAA,EAAY,WAAA,EAAa,eAAe,CAAA,EAAG;AAC/D,UAAA,IAAI,gBAAgB,UAAA,CAAW,IAAA,CAAK,EAAE,IAAA,EAAM,GAAG,CAAA;AAC/C,UAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,YAAA,IACE,YAAY,IAAA,IACZ,aAAA,CAAc,UAAS,GAAI,OAAA,EAAS,UAAS,EAC7C;AACA,cAAA;AAAA,YACF;AACA,YAAA,IACE,iBAAA,CAAkB,aAAA,EAAe,WAAA,EAAa,eAAe,CAAA,EAC7D;AACA,cAAA,aAAA,GAAgB,aAAA,CAAc,IAAA,CAAK,EAAE,IAAA,EAAM,GAAG,CAAA;AAAA,YAChD,CAAA,MAAO;AAEL,cAAA,cAAA,CAAe,aAAa,CAAA;AAC5B,cAAA;AAAA,YACF;AAAA,UACF;AACA,UAAA;AAAA,QACF;AAEA,QAAA,cAAA,CAAe,UAAU,CAAA;AAAA,MAC3B,CAAA;AAAA,MACA,CAAC,OAAA,EAAS,cAAA,EAAgB,eAAA,EAAiB,WAAW;AAAA,KACxD;AAEA,IAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,IAAA,QAAQ,QAAA;AAAU,MAChB,KAAK,QAAA;AACH,QAAA,aAAA,GAAgB,CAAA;AAChB,QAAA;AAAA,MACF,KAAK,QAAA;AAAA,MACL;AACE,QAAA,aAAA,GAAgB,CAAA;AAAA;AAGpB,IAAA,MAAM,cAAwB,EAAC;AAC/B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,MAAM,QAAA,GAAA,CAAY,gBAAgB,CAAA,IAAK,CAAA;AACvC,MAAA,WAAA,CAAY,IAAA,CAAK,KAAK,QAAA,CAAS,QAAA,EAAU,EAAE,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,IAChE;AAEA,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAEzC,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,IAAI,KAAA,CAAM,QAAA,CAAS,WAAW,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AACzE,MAAA,OAAO,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,GAAG,CAAA;AAAA,IAClC,CAAC,CAAA;AAED,IAAA,MAAM,UAA+B,EAAC;AACtC,IAAA,IAAI,QAAA,CAAS,OAAA,KAAY,aAAA,GAAgB,CAAA,EAAG;AAE1C,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,QAAA,MAAM,UAAU,QAAA,CAAS,KAAA,CAAM,EAAE,IAAA,EAAM,GAAG,CAAA;AAC1C,QAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AACpB,QAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,aAAA,GAAgB,CAAA,EAAG;AAAA,MAC7C;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,OAAA,EAAQ;AAEhB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,IAAI,KAAA,CAAM,EAAE,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AACtD,MAAA,OAAO,QAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,GAAI,GAAG,CAAA;AAAA,IACrC,CAAC,CAAA;AAED,IAAA,MAAM,UAAsB,CAAC,GAAG,SAAS,GAAG,QAAA,EAAU,GAAG,OAAO,CAAA;AAEhE,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA,CACtD,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,OAAA,CAAQ,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAC,CAAA,CAC7C,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAEb,IAAA,MAAM,sBAAsB,MAAM;AAChC,MAAA,cAAA,CAAe,MAAS,CAAA;AAAA,IAC1B,CAAA;AAEA,IAAA,MAAM,OAAA,GAAU,CAAC,GAAA,KAAiC;AAChD,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,MAAM,cAAc,WAAA,CAAY,IAAA,CAAK,EAAE,KAAA,EAAO,GAAG,CAAA;AACjD,QAAA,IACE,gBAAgB,WAAA,EAAa,OAAO,CAAA,IACpC,eAAA,CAAgB,aAAa,OAAO,CAAA;AAEpC,UAAA;AACF,QAAA,cAAA,CAAe,WAAW,CAAA;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,MAAM,cAAc,WAAA,CAAY,KAAA,CAAM,EAAE,KAAA,EAAO,GAAG,CAAA;AAClD,QAAA,IACE,gBAAgB,WAAA,EAAa,OAAO,CAAA,IACpC,eAAA,CAAgB,aAAa,OAAO,CAAA;AAEpC,UAAA;AACF,QAAA,cAAA,CAAe,WAAW,CAAA;AAC1B,QAAA;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,EAAE,SAAA,EAAW,GAAG,UAAA,EAAW,GAAI,SAAS,OAAO,CAAA;AAErD,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AAC1B,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,MAAM,gBAAgB,QAAA,CAAS,cAAA;AAAA,UAC7B,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,WAAA,CAAY,WAAW,CAAA;AAAA,SACnC;AACA,QAAA,aAAA,EAAe,KAAA,EAAM;AAAA,MACvB,GAAG,GAAG,CAAA;AAAA,IACR,CAAA,EAAG,CAAC,WAAA,EAAa,GAAG,CAAC,CAAA;AAErB,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,iBAAA,CAAkB,WAAA,EAAa,WAAA,EAAa,eAAe,CAAA,EAAG;AACnE,MAAA,mBAAA,CAAoB,YAAY,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA;AAAA,IACnD,GAAG,CAAC,WAAA,EAAa,mBAAA,EAAqB,eAAA,EAAiB,WAAW,CAAC,CAAA;AAEnE,IAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,UAAA,EAAS,gBAAA;AAAA,UACT,SAAS,MAAM;AACb,YAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AAAA,UACxB,CAAA;AAAA,UACA,QAAQ,MAAM;AACZ,YAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AAAA,UACxB,CAAA;AAAA,UACA,SAAA,EAAW,MAAA;AAAA,UACX,YAAA,EAAc,mBAAA;AAAA,UACd,IAAA,EAAK,MAAA;AAAA,UACJ,GAAG,IAAA;AAAA,UACH,GAAG,UAAA;AAAA,UAEJ,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,WAAM,aAAA,EAAW,IAAA,EAAC,SAAA,EAAWA,QAAA,CAAO,UAAU,CAAA,EAC7C,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EACE,QAAA,EAAA,WAAA,CAAY,GAAA,CAAI,CAAC,SAAS,CAAA,KAAM;AAC/B,gBAAA,uBACE,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,KAAA,EAAM,KAAA;AAAA,oBAEN,SAAA,EAAWA,SAAO,SAAS,CAAA;AAAA,oBAE1B,QAAA,EAAA;AAAA,mBAAA;AAAA,kBAHI,CAAA,EAAG,OAAO,CAAA,EAAG,CAAC,CAAA;AAAA,iBAIrB;AAAA,cAEJ,CAAC,CAAA,EACH,CAAA;AAAA,8BACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAWA,QAAA,CAAO,QAAQ,GAC5B,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,OAAA,EAAS,CAAA,EAAG,CAAA,EAClB;AAAA,aAAA,EACF,CAAA;AAAA,4BACA,GAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAWA,SAAO,UAAU,CAAA;AAAA,gBAG3B,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACzB,kBAAA,uBAAO,GAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAA,EAAiB,CAAG,CAAA;AAAA,gBAC3C,CAAC;AAAA,eAAA;AAAA,cAJI,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA,CAAE,QAAA;AAAS;AAK7C;AAAA;AAAA,OACF;AAAA,MACC,KAAA,IAAS,KAAA,mBACR,GAAA,CAAC,MAAA,EAAA,EAAO,WAAA,EAAU,QAAA,EACf,QAAA,EAAA,CAAA,gBAAA,EACC,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,cAAA,CAAe,UAAU,CACtD,CAAA,GAAA,EACE,KAAA,CAAM,GAAA,GACF,CAAA,QAAA,EAAW,KAAA,CAAM,GAAA,CAAI,cAAA,CAAe,UAAU,CAAC,CAAA,CAAA,GAC/C,oBACN,CAAA,CAAA,EACF,CAAA,GACE;AAAA,KAAA,EACN,CAAA;AAAA,EAEJ;AACF;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;;;;;;;;;ACpNrB,MAAM,sBAAsB,CAAC;AAAA,EAClC,OAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAA4D;AAC1D,EAAA,MAAM,OAAA,GAAU,OAAuB,IAAI,CAAA;AAE3C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAqB;AAC1C,MAAA,IAAI,kBAAkB,IAAA,EAAM;AAC5B,MAAA,IACE;AAAA,QACE,WAAA;AAAA,QACA,YAAA;AAAA,QACA,SAAA;AAAA,QACA,WAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA;AAAA,QACA,GAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF,CAAE,QAAA,CAAS,CAAA,CAAE,GAAG,CAAA,EAChB;AACA,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,IACE,CAAA,CAAE,GAAA,KAAQ,WAAA,IACV,CAAA,CAAE,GAAA,KAAQ,YAAA,IACV,CAAA,CAAE,GAAA,KAAQ,SAAA,IACV,CAAA,CAAE,GAAA,KAAQ,WAAA,EACV;AACA,UAAA,MAAM,OAAA,GACJ,EAAE,GAAA,KAAQ,WAAA,IAAe,EAAE,GAAA,KAAQ,SAAA,GAC/B,aAAA,GAAgB,CAAA,GAChB,aAAA,GAAgB,CAAA;AACtB,UAAA,MAAM,WAAA,GAAc,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,OAAA,EAAS,GAAG,GAAG,GAAG,CAAA;AACxD,UAAA,YAAA,CAAa,OAAA,EAAS,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AACrC,UAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,QAAA,CAAS,WAAW,CAAA;AAAA,UACtB;AACA,UAAA;AAAA,QACF;AACA,QAAA,IAAI,CAAC,QAAA,KAAa,CAAA,CAAE,QAAQ,WAAA,IAAe,CAAA,CAAE,QAAQ,QAAA,CAAA,EAAW;AAC9D,UAAA,QAAA,CAAS,IAAI,CAAA;AACb,UAAA;AAAA,QACF;AACA,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,IAAY,CAAA,CAAE,QAAQ,UAAA,EAAY;AAC9C,UAAA,MAAM,OAAA,GAAU,CAAA,CAAE,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,GAAA;AAC3C,UAAA,YAAA,CAAa,OAAA,EAAS,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AACrC,UAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,QAAA,CAAS,OAAO,CAAA;AAAA,UAClB;AACA,UAAA;AAAA,QACF;AACA,QAAA,IAAI,CAAA,CAAE,QAAQ,MAAA,EAAQ;AACpB,UAAA,YAAA,CAAa,YAAA,EAAc,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AAC1C,UAAA,gBAAA,CAAiB,YAAY,CAAA;AAC7B,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,QAAA,CAAS,YAAY,CAAA;AAAA,UACvB;AACA,UAAA;AAAA,QACF;AACA,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,SAAA,EAAU;AAAA,UACZ;AACA,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AACA,IAAA,IAAA,EAAM,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAC/C,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,EAAM,mBAAA,CAAoB,WAAW,aAAa,CAAA;AAAA,IACpD,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD,aAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAO,EAAE,OAAA,EAAQ;AACnB,CAAA;;AC7GO,MAAM,WAAW,CAAC;AAAA,EACvB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAqB;AACnB,EAAA,uBACE,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,QAAA;AAAA,MACA,EAAA,EAAI,IAAA;AAAA,MACJ,UAAU,CAAC,QAAA,GAAW,MAAM,QAAA,CAAS,IAAI,IAAI,MAAM;AAAA,MAAC,CAAA;AAAA,MACpD,OAAA,EAAS,QAAA;AAAA,MACT,aAAA,EAAe;AAAA,QACb,QAAA,EAAU,EAAA;AAAA,QACV;AAAA,OACF;AAAA,MACA,QAAA,EAAU,CAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,WAAW,CAAA,EAAG;AAAA,QACjC,CAAC,MAAA,CAAO,gBAAgB,CAAC,GAAG;AAAA,OAC7B,CAAA;AAAA,MACD,WAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU,EAAA;AAAA,MACT,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ,CAAA;;AChCA,MAAM,WAAA,GAAc,IAAA;AACpB,MAAM,WAAA,GAAc,IAAA;AAmEpB,MAAM,WAAA,GAAA,iBAAc,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAEpC,MAAM,YAAA,GAAe,UAAA;AAAA,EAC1B,CACE;AAAA,IACE,GAAA,GAAM,WAAA;AAAA,IACN,GAAA,GAAM,WAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,YAAA,EAAc,gBAAA;AAAA,IACd,QAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA,GAAe,WAAA;AAAA,IACf,OAAA,EAAS,WAAA;AAAA,IACT,SAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,QAAA,GAAW,KAAA;AAAA,IACX,SAAA,GAAY,gBAAA;AAAA,IACZ;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,WAAA,IAAe,GAAG,CAAC,CAAA;AAC5C,IAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,4BAAA,CAA4C;AAAA,MACpE,eAAA,EAAiB,SAAA;AAAA,MACjB,cAAc,gBAAA,IAAoB,IAAA;AAAA,MAClC;AAAA,KACD,CAAA;AACD,IAAA,MAAM,aAAA,GAAgB,YAAY,KAAK,CAAA;AACvC,IAAA,MAAM,mBAAmB,KAAA,IAAS,YAAA;AAClC,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GACpC,SAAiB,gBAAgB,CAAA;AAEnC,IAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAwB;AAC5C,MAAA,IAAI,CAAC,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAC/B,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA;AAAA,MACF;AACA,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAAiB;AACzC,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,SAAA,GAAY,IAAI,CAAA;AAAA,IAClB,CAAA;AAEA,IAAA,MAAM,GAAA,GAAM,EAAA;AACZ,IAAA,MAAM,SAAA,GAAY,EAAA;AAClB,IAAA,MAAM,WAAW,IAAA,CAAK,IAAA,CAAA,CAAM,GAAA,GAAM,GAAA,GAAM,KAAK,OAAO,CAAA;AACpD,IAAA,MAAM,iBACF,gBAAA,GAAmB,GAAA,KAAQ,SAAA,GAAY,GAAA,CAAA,GAAQ,UAAU,GAAA,GAAM,CAAA;AAGnE,IAAA,MAAM,iBAAiB,cAAA,CAAe;AAAA,MACpC,KAAA,EAAO,QAAA;AAAA,MACP,gBAAA,EAAkB,MAAM,SAAA,CAAU,OAAA;AAAA,MAClC,cAAc,MAAM,SAAA;AAAA,MACpB,GAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAY,GAAA,GAAM;AAAA,KACnB,CAAA;AAED,IAAA,MAAM,YAAA,GAAe,WAAA;AAAA,MACnB,CAAC,IAAA,EAAc,EAAE,KAAA,EAAM,GAAyB,EAAC,KAAM;AACrD,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,GAAO,OAAO,OAAO,CAAA;AAC/C,QAAA,cAAA,CAAe,aAAA,CAAc,KAAA,EAAO,EAAE,KAAA,EAAO,UAAU,CAAA;AACvD,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,QACvB;AAAA,MACF,CAAA;AAAA,MACA,CAAC,GAAA,EAAK,OAAA,EAAS,cAAA,EAAgB,gBAAgB;AAAA,KACjD;AAEA,IAAA,MAAM,SAAA,GAAY,OAAO,IAAI,CAAA;AAC7B,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,mBAAA,CAAoB;AAAA,MACtC,OAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA,EAAc,gBAAA;AAAA,MACd,QAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,MAAM,SAAA,GAAY,KAAK,CAAA;AAAA,MAClC,GAAA;AAAA,MACA,GAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,aAAA,KAAkB,KAAA,EAAO;AAC7C,QAAA,YAAA,CAAa,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,MACrC;AAAA,IACF,GAAG,CAAC,KAAA,EAAO,aAAA,EAAe,YAAA,EAAc,OAAO,CAAC,CAAA;AAEhD,IAAA,MAAM,WAAW,YAAA,CAAa,CAAC,SAAA,EAAW,OAAA,EAAS,GAAG,CAAC,CAAA;AAEvD,IAAA,uBACE,GAAA,CAAA,QAAA,EAAA,EAEE,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAY,SAAA;AAAA,QACZ,QAAA,EAAU,CAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,eAAe,GAAG,SAAS,CAAA;AAAA,QAChD,IAAA,EAAK,YAAA;AAAA,QACL,iBAAe,KAAA,IAAS,MAAA;AAAA,QACxB,eAAA,EAAe,GAAA;AAAA,QACf,eAAA,EAAe,GAAA;AAAA,QACf,gBAAA,EAAgB,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,CAAA,GAAK,kBAAA;AAAA,QACrC,WAAA,EAAW,eAAe,OAAA,CAAQ,UAAA;AAAA,QAClC,KAAA,EAAO;AAAA,UACL,SAAA,EAAW,CAAA,EACT,cAAA,CAAe,YAAA,KAAiB,CAClC,CAAA,EAAA;AAAA,SACF;AAAA,QACC,GAAG,SAAA;AAAA,QAGJ,QAAA,kBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,MAAA,EAAQ,CAAA,EAAG,cAAA,CAAe,YAAA,EAAc,CAAA,EAAA,CAAA;AAAA,cACxC,KAAA,EAAO,MAAA;AAAA,cACP,QAAA,EAAU;AAAA,aACZ;AAAA,YAGC,QAAA,EAAA,cAAA,CAAe,eAAA,EAAgB,CAAE,GAAA,CAAI,CAAC,WAAA,KAAgB;AACrD,cAAA,MAAM,QAAQ,KAAA,CAAM,IAAA;AAAA,gBAClB,EAAE,QAAQ,OAAA,EAAQ;AAAA,gBAClB,CAAC,CAAA,EAAG,CAAA,KAAM,WAAA,CAAY,KAAA,GAAQ,UAAU,CAAA,GAAI;AAAA,eAC9C;AACA,cAAA,uBACE,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBAEC,aAAA,EAAY,OAAA;AAAA,kBACZ,SAAA,EAAW,OAAO,WAAW,CAAA;AAAA,kBAC7B,KAAA,EAAO;AAAA,oBACL,SAAA,EAAW,CAAA,WAAA,EAAc,WAAA,CAAY,KAAK,CAAA,GAAA,CAAA;AAAA,oBAC1C,mBAAA,EAAqB,UAAU,OAAO,CAAA,MAAA;AAAA,mBACxC;AAAA,kBAEC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,oBAAA,IAAI,IAAA,GAAO,GAAA,EAAK,uBAAO,GAAA,CAAC,WAAS,IAAM,CAAA;AACvC,oBAAA,uBACE,GAAA;AAAA,sBAAC,QAAA;AAAA,sBAAA;AAAA,wBAEC,QAAA;AAAA,wBACA,IAAA;AAAA,wBACA,QAAA,EAAU,gBAAA;AAAA,wBACV,UAAU,KAAA,KAAU,IAAA;AAAA,wBACpB,eAAe,aAAA,KAAkB,IAAA;AAAA,wBACjC,SAAS,MAAM;AACb,0BAAA,OAAA,CAAQ,SAAS,KAAA,EAAM;AACvB,0BAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,wBACvB;AAAA,uBAAA;AAAA,sBATK;AAAA,qBAUP;AAAA,kBAEJ,CAAC;AAAA,iBAAA;AAAA,gBAxBI,WAAA,CAAY;AAAA,eAyBnB;AAAA,YAEJ,CAAC;AAAA;AAAA;AACH;AAAA,KACF,EACF,CAAA;AAAA,EAEJ;AACF,CAAA;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;;ACvNpB,MAAM,sBAAA,GAAyB,WAGpC,CAAC,EAAE,kBAAkB,GAAG,KAAA,IAAS,GAAA,KAAQ;AACzC,EAAA,MAAM,EAAE,eAAA,EAAiB,OAAA,EAAS,SAAS,aAAA,EAAe,YAAA,KACxD,WAAA,EAAY;AAEd,EAAA,MAAM,iBAAA,GAAoB,OAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,CAAC,GAAA,EAAK,iBAAiB,CAAC,CAAA;AAEzD,EAAA,MAAM,WAAA,GAAc,OAAA;AAAA,IAClB,MACE,QAAA,CAAS,UAAA,CAAW,EAAE,MAAM,YAAA,EAAc,KAAA,EAAO,aAAA,EAAe,CAAA,CAC7D,OAAA,CAAQ,eAAe,CAAA,CACvB,QAAQ,KAAK,CAAA;AAAA,IAClB,CAAC,eAAA,EAAiB,YAAA,EAAc,aAAa;AAAA,GAC/C;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,MACE,MAAM,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM;AACnC,MAAA,MAAM,IAAA,GAAO,SAAS,UAAA,CAAW;AAAA,QAC/B,IAAA,EAAM,YAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACR,EAAE,IAAA,CAAK;AAAA,QACN,KAAA,EAAO;AAAA,OACR,CAAA;AAGD,MAAA,MAAM,WACH,OAAA,IAAW,IAAA,GAAO,OAAA,IAAW,CAAC,KAAK,OAAA,CAAQ,OAAA,EAAS,OAAO,CAAA,IAC3D,WAAW,IAAA,GAAO,OAAA,IAAW,CAAC,IAAA,CAAK,OAAA,CAAQ,SAAS,OAAO,CAAA;AAE9D,MAAA,OAAO;AAAA,QACL,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,UAAU,QAAA,IAAY;AAAA,OACxB;AAAA,IACF,CAAC,CAAA;AAAA,IACH,CAAC,OAAA,EAAS,OAAA,EAAS,YAAY;AAAA,GACjC;AAEA,EAAA,MAAM,UAAU,EAAA,CAAGA,QAAA,CAAO,iBAAiB,CAAA,EAAG,MAAM,SAAS,CAAA;AAE7D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,QAAA,CAAS,gBAAgB,CAAC,CAAA;AAGlE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,OAAA,EAAS;AAEtB,MAAA,IAAI,KAAA,GAAQ,MAAM,SAAA,CAAU,CAAC,EAAE,KAAA,EAAM,KAAM,UAAU,aAAa,CAAA;AAClE,MAAA,OAAO,KAAA,CAAM,KAAK,CAAA,CAAE,QAAA,IAAY,QAAQ,EAAA,EAAI;AAC1C,QAAA,KAAA,EAAA;AAAA,MACF;AACA,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,eAAA,CAAgB,gBAAgB,CAAC,CAAA;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,aAAA,EAAe,OAAA,EAAS,OAAA,EAAS,KAAK,CAAC,CAAA;AAE3C,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,CAAC,CAAA,KAA2B;AAC1B,MAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,MAAA,MAAM,KAAA,GAAQ,kBAAkB,OAAA,EAAS,gBAAA;AAAA,QACvC;AAAA,OACF;AACA,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAChC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAClC,MAAA,MAAM,YAAA,GAAe,SAAA,CAAU,OAAA,CAAQ,MAA2B,CAAA;AAElE,MAAA,IAAI,iBAAiB,EAAA,EAAI;AAEzB,MAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAkB;AAC5C,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAC,SAAA,CAAU,KAAK,CAAA,CAAwB,KAAA,EAAM;AAC9C,QAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,MACvB,CAAA;AAEA,MAAA,IAAI,QAAA;AACJ,MAAA,QAAQ,EAAE,GAAA;AAAK,QACb,KAAK,WAAA;AACH,UAAA,QAAA,GAAW,YAAA,GAAe,CAAA,GAAI,YAAA,GAAe,CAAA,GAAI,EAAA;AACjD,UAAA,OAAO,KAAA,CAAM,QAAQ,CAAA,CAAE,QAAA,EAAU;AAC/B,YAAA,QAAA,GAAW,QAAA,GAAW,CAAA,GAAI,QAAA,GAAW,CAAA,GAAI,EAAA;AAAA,UAC3C;AACA,UAAA,kBAAA,CAAmB,QAAQ,CAAA;AAC3B,UAAA;AAAA,QAEF,KAAK,YAAA;AACH,UAAA,QAAA,GAAW,YAAA,GAAe,EAAA,GAAK,YAAA,GAAe,CAAA,GAAI,CAAA;AAClD,UAAA,OAAO,KAAA,CAAM,QAAQ,CAAA,CAAE,QAAA,EAAU;AAC/B,YAAA,QAAA,GAAW,QAAA,GAAW,EAAA,GAAK,QAAA,GAAW,CAAA,GAAI,CAAA;AAAA,UAC5C;AACA,UAAA,kBAAA,CAAmB,QAAQ,CAAA;AAC3B,UAAA;AAAA,QAEF,KAAK,SAAA;AACH,UAAA,IAAI,eAAe,CAAA,EAAG;AACpB,YAAA,QAAA,GAAW,YAAA,GAAe,CAAA;AAAA,UAC5B,CAAA,MAAO;AACL,YAAA,QAAA,GAAW,YAAA,GAAe,CAAA;AAAA,UAC5B;AACA,UAAA,OAAO,KAAA,CAAM,QAAQ,CAAA,CAAE,QAAA,EAAU;AAC/B,YAAA,IAAI,WAAW,CAAA,EAAG;AAChB,cAAA,QAAA,IAAY,CAAA;AAAA,YACd,CAAA,MAAO;AACL,cAAA,QAAA,IAAY,CAAA;AAAA,YACd;AAAA,UACF;AACA,UAAA,kBAAA,CAAmB,QAAQ,CAAA;AAC3B,UAAA;AAAA,QAEF,KAAK,WAAA;AACH,UAAA,IAAI,eAAe,CAAA,EAAG;AACpB,YAAA,QAAA,GAAW,YAAA,GAAe,CAAA;AAAA,UAC5B,CAAA,MAAO;AACL,YAAA,QAAA,GAAW,YAAA,GAAe,CAAA;AAAA,UAC5B;AACA,UAAA,OAAO,KAAA,CAAM,QAAQ,CAAA,CAAE,QAAA,EAAU;AAC/B,YAAA,IAAI,WAAW,CAAA,EAAG;AAChB,cAAA,QAAA,IAAY,CAAA;AAAA,YACd,CAAA,MAAO;AACL,cAAA,QAAA,IAAY,CAAA;AAAA,YACd;AAAA,UACF;AACA,UAAA,kBAAA,CAAmB,QAAQ,CAAA;AAC3B,UAAA;AAAA,QAEF,KAAK,OAAA;AAAA,QACL,KAAK,GAAA;AACH,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,IAAI,CAAC,KAAA,CAAM,YAAY,CAAA,CAAE,QAAA,EAAU;AACjC,YAAA,gBAAA,CAAiB,KAAA,CAAM,YAAY,CAAA,CAAE,KAAK,CAAA;AAAA,UAC5C;AACA,UAAA;AAAA;AACJ,IACF,CAAA;AAAA,IACA,CAAC,OAAO,gBAAgB;AAAA,GAC1B;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,WAAA;AAAA,MACL,UAAA,EAAS,0BAAA;AAAA,MACT,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,MAAA,EAAO,cAAW,0BAAA,EAC1B,QAAA,kBAAA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,eAAA,EAAgB,2BAAA;AAAA,UAChB,GAAA,EAAK,CAAA;AAAA,UACL,SAAA,EAAW,aAAA;AAAA,UACX,IAAA,EAAK,KAAA;AAAA,UAEJ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,QAAA,EAAS,EAAG,KAAA,qBAC/B,GAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,UAAA,EACR,QAAA,kBAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,MAAM,QAAA,EAAS;AAAA,cACnB,QAAA;AAAA,cACA,QAAA,EAAU,MAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,cACtC,OAAA,EACE,aAAA,KAAkB,KAAA,IAAS,YAAA,KAAiB,WAAA,CAAY,IAAA;AAAA,cAE1D,aAAA,EAAe;AAAA,gBACb,SAAA,EAAWA,SAAO,oBAAoB,CAAA;AAAA,gBACtC,QAAA,EAAU,YAAA,KAAiB,KAAA,GAAQ,CAAA,GAAI;AAAA,eACzC;AAAA,cACA,SAAA,EAAWA,SAAO,gBAAgB,CAAA;AAAA,cAEjC,mBAAS,UAAA,CAAW,EAAE,OAAO,CAAA,CAAE,SAAS,MAAM;AAAA;AAAA,WACjD,EAAA,EAfwB,KAAA,CAAM,QAAA,EAgBhC,CACD;AAAA;AAAA,OACH,EACF;AAAA;AAAA,GACF;AAEJ,CAAC,CAAA;AAED,sBAAA,CAAuB,WAAA,GAAc,wBAAA;;ACnN9B,MAAM,wBAAA,GAA2B,aAAA,CAAiC,EAAE;;ACApE,MAAM,uBAAuB,MAAM;AACxC,EAAA,OAAO,WAAW,wBAAwB,CAAA;AAC5C;;AC+BA,MAAM,qBAAqB,CAAC,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAyI3D,MAAM,eAAA,GAAkB,UAAA;AAAA,EAC7B,CAAC,OAAO,GAAA,KAAQ;AACd,IAAA,MAAM,MAAM,KAAA,EAAM;AAClB,IAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,mBAAmB,KAAK,CAAA;AACjE,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,WAAA,EAAa,SAAA;AAAA,MACb,kBAAA;AAAA,MACA,MAAA,GAAS,IAAA,CAAK,cAAA,EAAe,CAAE,iBAAgB,CAAE,MAAA;AAAA,MACjD,eAAA,GAAkB,IAAA,CAAK,cAAA,EAAe,CAAE,iBAAgB,CACrD,QAAA;AAAA,MACH,QAAA,GAAW,QAAA;AAAA,MACX,OAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA,GAAc;AAAA,QACZ,OAAO,EAAC;AAAA,QACR,YAAY;AAAC,OACf;AAAA,MACA,EAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA,EAAO,MAAA;AAAA,MACP,YAAA,EAAc,aAAA;AAAA,MACd,WAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA;AAAA,MACA,aAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,cAAA;AAEJ,IAAA,MAAM,EAAE,YAAA,EAAc,WAAA,EAAY,GAAI,oBAAA,EAAqB;AAE3D,IAAA,MAAM,WAAA,GAAc,OAAuB,IAAI,CAAA;AAC/C,IAAA,MAAM,WAAA,GAAc,YAAA,CAAa,CAAC,GAAA,EAAK,WAAW,CAAC,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,OAAO,MAAM,CAAA;AAChC,IAAA,MAAM,aAAA,GAAgB,OAA0B,IAAI,CAAA;AACpD,IAAA,MAAM,cAAA,GAAiB,OAA0B,IAAI,CAAA;AACrD,IAAA,MAAM,SAAA,GAAY,OAAwB,IAAI,CAAA;AAC9C,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,IAAI,QAAA,CAEtC,kBAAA,CAAmB,CAAC,CAAC,CAAA;AAEvB,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAA;AAAA,MACxC;AAAA,KACF;AAEA,IAAA,MAAM,CAAC,sBAAA,EAAwB,yBAAyB,CAAA,GAAI,SAE1D,KAAK,CAAA;AAEP,IAAA,MAAM,oBAAA,GAAuB,QAAQ,MAAM;AACzC,MAAA,IAAI,2BAA2B,KAAA,EAAO;AACpC,QAAA,OAAO,kBAAA,CAAmB,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAAA,MACtC;AACA,MAAA,OAAO,kBAAA;AAAA,IACT,CAAA,EAAG,CAAC,sBAAsB,CAAC,CAAA;AAE3B,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,WAAA,CAAY,OAAA,IAAW,KAAA,EAAO,SAAS,IAAA,EAAM;AAElD,MAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,CAAC,OAAA,KAAY;AACrD,QAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,UAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,KAAA;AAChC,UAAA,IAAI,sBAAA,KAA2B,KAAA,IAAS,KAAA,GAAQ,GAAA,EAAK;AACnD,YAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,UACxB;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAED,MAAA,cAAA,CAAe,OAAA,CAAQ,YAAY,OAAO,CAAA;AAE1C,MAAA,OAAO,MAAM;AACX,QAAA,cAAA,CAAe,UAAA,EAAW;AAAA,MAC5B,CAAA;AAAA,IACF,CAAA,EAAG,CAAC,sBAAA,EAAwB,KAAA,EAAO,KAAK,CAAC,CAAA;AAGzC,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,KAAA,EAAO,aAAA;AAAA,MACP,GAAG,KAAA;AAAA,MACH,GAAG;AAAA,KACL;AAEA,IAAA,MAAM,iBAAA,GAAoB,EAAA,CAAGA,QAAA,CAAO,UAAU,GAAG,SAAS,CAAA;AAE1D,IAAA,MAAM,EAAE,KAAA,EAAO,YAAA,EAAc,MAAA,EAAO,GAAI,OAAA;AAAA,MACtC,OAAO;AAAA,QACL,KAAA,EAAO,SACH,OAAO,MAAA,KAAW,WAChB,aAAA,CAAc,MAAA,EAAQ,eAAe,CAAA,GACrC;AAAA,UACE,OAAO,MAAA,CAAO,KAAA,GACV,cAAc,MAAA,CAAO,KAAA,EAAO,eAAe,CAAA,GAC3C,IAAA;AAAA,UACJ,KAAK,MAAA,CAAO,GAAA,GACR,cAAc,MAAA,CAAO,GAAA,EAAK,eAAe,CAAA,GACzC;AAAA,SACN,GACF,IAAA;AAAA,QACJ,YAAA,EAAc,gBACV,OAAO,aAAA,KAAkB,WACvB,aAAA,CAAc,aAAA,EAAe,eAAe,CAAA,GAC5C;AAAA,UACE,OAAO,aAAA,CAAc,KAAA,GACjB,cAAc,aAAA,CAAc,KAAA,EAAO,eAAe,CAAA,GAClD,IAAA;AAAA,UACJ,KAAK,aAAA,EAAe,GAAA,GAChB,cAAc,aAAA,CAAc,GAAA,EAAK,eAAe,CAAA,GAChD;AAAA,SACN,GACF,IAAA;AAAA,QACJ,MAAA,EACE,OAAO,MAAA,KAAW,QAAA,GACd,aAAA,CAAc,QAAA,CAAS,GAAA,EAAI,CAAE,KAAA,EAAM,EAAG,eAAe,CAAA,GACrD;AAAA,UACE,OAAO,aAAA,CAAc,QAAA,CAAS,KAAI,CAAE,KAAA,IAAS,eAAe,CAAA;AAAA,UAC5D,KAAK,aAAA,CAAc,QAAA,CAAS,KAAI,CAAE,KAAA,IAAS,eAAe;AAAA;AAC5D,OACR,CAAA;AAAA,MACA,CAAC,MAAA,EAAQ,aAAA,EAAe,eAAe;AAAA,KACzC;AAEA,IAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAI,QAAA,CAIxB,KAAA,IAAS,gBAAgB,MAAM,CAAA;AAEjC,IAAA,MAAM,cAAA,GAAiB,QAAQ,MAAM;AACnC,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,OAAO,aAAA,CAAc,oBAAoB,eAAe,CAAA;AAAA,MAC1D;AACA,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,MAAM,OACJ,OAAO,aAAA,KAAkB,WACrB,aAAA,CAAc,aAAA,EAAe,eAAe,CAAA,GAC5C,aAAA;AAAA,UACE,aAAA,CAAc,KAAA,IAAS,aAAA,CAAc,GAAA,IAAO,EAAA;AAAA,UAC5C;AAAA,SACF;AACN,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,IACE,CAAC,QAAA,CAAS,UAAA,CAAW,KAAK,KAC1B,CAAC,QAAA,CAAS,UAAA,CAAW,YAAY,CAAA,IACjC,CAAC,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA,EAC3B;AACA,QAAA,OAAO,KAAA,EAAO,KAAA,IAAS,YAAA,EAAc,KAAA,IAAS,MAAA,EAAQ,KAAA;AAAA,MACxD;AAEA,MAAA,OAAQ,SAAS,YAAA,IAAgB,MAAA;AAAA,IACnC,CAAA,EAAG;AAAA,MACD,kBAAA;AAAA,MACA,aAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,MAAM,WAAA,GAAc,cAAA,IAAkB,QAAA,CAAS,GAAA,EAAI;AAEnD,IAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAIpC,WAAW,CAAA;AAEb,IAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAA,EAGpC;AAEF,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAA;AAAA,MACxC,WAAA,CAAY;AAAA,KACd;AACA,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,QAAA;AAAA,MACtC,WAAA,CAAY;AAAA,KACd;AAEA,IAAA,MAAM,mBAAA,GAAsB,QAAQ,MAAM;AACxC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,aAAa,IAAA,IAAQ,YAAA;AAAA,QAC3B,KAAA,EAAO,aAAa,KAAA,IAAS;AAAA,OAC/B;AAAA,IACF,CAAA,EAAG,CAAC,WAAA,EAAa,KAAA,EAAO,aAAa,IAAA,EAAM,YAAA,EAAc,aAAa,CAAC,CAAA;AAEvE,IAAA,SAAA;AAAA,MACE,MAAM,cAAc,mBAAmB,CAAA;AAAA;AAAA,MAEvC,CAAC,mBAAmB;AAAA,KACtB;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,SAAA,IAAa,CAAC,kBAAA,EAAoB;AACvC,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,cAAA,CAAe,aAAA,CAAc,SAAA,EAAW,eAAe,CAAC,CAAA;AAAA,MAC1D,WAAW,kBAAA,EAAoB;AAC7B,QAAA,cAAA,CAAe,aAAA,CAAc,kBAAA,EAAoB,eAAe,CAAC,CAAA;AACjE,QAAA,gBAAA;AAAA,UACE,aAAA,CAAc,kBAAA,EAAoB,eAAe,CAAA,CAAE;AAAA,SACrD;AACA,QAAA,eAAA;AAAA,UACE,aAAA,CAAc,kBAAA,EAAoB,eAAe,CAAA,CAAE;AAAA,SACrD;AAAA,MACF;AAAA,IAGF,CAAA,EAAG,CAAC,SAAA,EAAW,kBAAkB,CAAC,CAAA;AAElC,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,UAAA,CAAW,OAAA,GAAU,MAAA;AACrB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,QAAA,QAAA,CAAS,aAAA,CAAc,MAAA,EAAQ,eAAe,CAAC,CAAA;AAC/C,QAAA,cAAA,CAAe,aAAA,CAAc,MAAA,EAAQ,eAAe,CAAC,CAAA;AAAA,MACvD,CAAA,MAAA,IACE,MAAA,CAAO,GAAA,KACN,OAAO,UAAA,CAAW,OAAA,KAAY,QAAA,IAC7B,UAAA,EAAY,OAAA,EAAS,GAAA,KAAQ,MAAA,CAAO,GAAA,CAAA,EACtC;AACA,QAAA,QAAA,CAAS;AAAA,UACP,OAAO,MAAA,CAAO,KAAA,GACV,cAAc,MAAA,CAAO,KAAA,EAAO,eAAe,CAAA,GAC3C,IAAA;AAAA,UACJ,KAAK,MAAA,CAAO,GAAA,GAAM,cAAc,MAAA,CAAO,GAAA,EAAK,eAAe,CAAA,GAAI;AAAA,SAChE,CAAA;AACD,QAAA,cAAA,CAAe,aAAA,CAAc,MAAA,CAAO,GAAA,EAAK,eAAe,CAAC,CAAA;AAAA,MAC3D,CAAA,MAAA,IACE,MAAA,CAAO,KAAA,KACN,OAAO,UAAA,CAAW,OAAA,KAAY,QAAA,IAC7B,UAAA,EAAY,OAAA,EAAS,KAAA,KAAU,MAAA,CAAO,KAAA,CAAA,EACxC;AACA,QAAA,cAAA,CAAe,aAAA,CAAc,MAAA,CAAO,KAAA,EAAO,eAAe,CAAC,CAAA;AAAA,MAC7D;AACA,MAAA,UAAA,CAAW,OAAA,GAAU,MAAA;AAAA,IAGvB,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,IAAA,MAAM,iBAAA,GAAoB,OAAA;AAAA,MACxB,MAAO,OAAA,GAAU,aAAA,CAAc,OAAA,EAAS,eAAe,CAAA,GAAI,IAAA;AAAA,MAC3D,CAAC,SAAS,eAAe;AAAA,KAC3B;AACA,IAAA,MAAM,iBAAA,GAAoB,OAAA;AAAA,MACxB,MAAO,OAAA,GAAU,aAAA,CAAc,OAAA,EAAS,eAAe,CAAA,GAAI,IAAA;AAAA,MAC3D,CAAC,SAAS,eAAe;AAAA,KAC3B;AAEA,IAAA,MAAM,eAAA,GAAkB,QAAQ,MAAM;AACpC,MAAA,IAAI,CAAC,cAAc,OAAO,MAAA;AAC1B,MAAA,OAAO,IAAI,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,OAAO,CAAC,CAAC,CAAA;AAAA,IACtE,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,IAAA,MAAM,aAAA,GAAgB,QAAQ,MAAM;AAElC,MAAA,MAAM,MAAA,GAAS;AAAA,QACb,OAAA,EAAS,MAAA;AAAA,QACT,KAAA,EAAO,MAAA;AAAA,QACP,GAAA,EAAK,SAAA;AAAA,QACL,IAAA,EAAM;AAAA,OACR;AAEA,MAAA,OAAO;AAAA,QACL,kBAAkB,iBAAA,IAAqB,KAAA;AAAA,QACvC,WAAA;AAAA,QACA,cAAA;AAAA,QACA,aAAA;AAAA,QACA,gBAAA;AAAA,QACA,YAAA;AAAA,QACA,eAAA;AAAA,QACA,WAAA;AAAA,QACA,cAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,eAAA;AAAA,QACA,IAAI,EAAA,IAAM,GAAA;AAAA,QACV,WAAA;AAAA,QACA,UAAA,EAAY,CAAC,CAAC,MAAA;AAAA,QACd,KAAA;AAAA,QACA,OAAA,EAAS,iBAAA;AAAA,QACT,OAAA,EAAS,iBAAA;AAAA,QACT,WAAA,EAAa;AAAA,UACX,KAAA,EAAO,IAAI,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA;AAAA,UAChC,UAAA,EAAY,IAAI,GAAA,CAAI,WAAA,CAAY,UAAU;AAAA,SAC5C;AAAA,QACA,MAAA;AAAA,QACA,UAAA,EAAY,MAAA;AAAA,QACZ,QAAA;AAAA,QACA,YAAA,EAAc;AAAA,OAChB;AAAA,IACF,CAAA,EAAG;AAAA,MACD,WAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,EAAA;AAAA,MACA,MAAA;AAAA,MACA,iBAAA;AAAA,MACA,iBAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA;AAAA,MACA,eAAA;AAAA,MACA,GAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,MAAM,mBAAA,GAAsB,WAAA;AAAA,MAC1B,CAAC,CAAA,KAA2B;AAC1B,QAAA,QAAQ,EAAE,GAAA;AAAK,UACb,KAAK,WAAA;AACH,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,eAAA,CAAgB,CAAC,oBAAA,KAAyB;AACxC,cAAA,MAAM,eAAA,GACJ,yBAAyB,oBAAA,CAAqB,CAAC,IAC3C,oBAAA,CAAqB,oBAAA,CAAqB,SAAS,CAAC,CAAA,GACnD,qBACC,oBAAA,CAAqB,OAAA,CAAQ,oBAAoB,CAAA,GAAI,CACvD,KAAK,oBAAA,CAAqB,oBAAA,CAAqB,SAAS,CAAC,CAAA;AAC/D,cAAA,MAAM,MAAA,GAAS,UAAU,OAAA,EAAS,aAAA;AAAA,gBAChC,sCAAsC,eAAe,CAAA,EAAA;AAAA,eACvD;AACA,cAAA,IACE,UACA,OAAA,IAAW,MAAA,IACX,OAAQ,MAAA,CAAuB,UAAU,UAAA,EACzC;AACA,gBAAC,OAAuB,KAAA,EAAM;AAAA,cAChC;AACA,cAAA,OAAO,eAAA;AAAA,YACT,CAAC,CAAA;AAED,YAAA;AAAA,UACF,KAAK,YAAA;AACH,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,eAAA,CAAgB,CAAC,oBAAA,KAAyB;AACxC,cAAA,MAAM,kBACJ,oBAAA,KACA,oBAAA,CAAqB,qBAAqB,MAAA,GAAS,CAAC,IAChD,oBAAA,CAAqB,CAAC,CAAA,GACrB,oBAAA,CACC,qBAAqB,OAAA,CAAQ,oBAAoB,IAAI,CACvD,CAAA,IAAK,qBAAqB,CAAC,CAAA;AACjC,cAAA,MAAM,MAAA,GAAS,UAAU,OAAA,EAAS,aAAA;AAAA,gBAChC,sCAAsC,eAAe,CAAA,EAAA;AAAA,eACvD;AACA,cAAA,IACE,UACA,OAAA,IAAW,MAAA,IACX,OAAQ,MAAA,CAAuB,UAAU,UAAA,EACzC;AACA,gBAAC,OAAuB,KAAA,EAAM;AAAA,cAChC;AACA,cAAA,OAAO,eAAA;AAAA,YACT,CAAC,CAAA;AAAA;AACL,MACF,CAAA;AAAA,MACA,CAAC,oBAAoB;AAAA,KACvB;AAEA,IAAA,MAAM,oBAAA,GAAuB,WAAA;AAAA,MAC3B,CAAC,KAAA,KAA6B;AAC5B,QAAA,cAAA,CAAe,SAAS,KAAA,EAAM;AAC9B,QAAA,eAAA,CAAgB,kBAAA,CAAmB,CAAC,CAAC,CAAA;AACrC,QAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,QAAA,cAAA;AAAA,UACE,QAAA,CAAS,UAAA;AAAA,YACP;AAAA,cACE,IAAA,EAAM,aAAa,IAAA,IAAQ,CAAA;AAAA,cAC3B,KAAA;AAAA,cACA,GAAA,EAAK;AAAA,aACP;AAAA,YACA,EAAE,MAAM,eAAA;AAAgB,WAC1B,CAAE,QAAQ,KAAK;AAAA,SACjB;AACA,QAAA,yBAAA,CAA0B,KAAK,CAAA;AAAA,MACjC,CAAA;AAAA;AAAA,MAEA,CAAC,WAAW;AAAA,KACd;AAEA,IAAA,MAAM,mBAAA,GAAsB,WAAA;AAAA,MAC1B,CAAC,IAAA,KAAwB;AACvB,QAAA,IAAI,SAAS,IAAA,EAAM;AACnB,QAAA,aAAA,CAAc,SAAS,KAAA,EAAM;AAC7B,QAAA,eAAA,CAAgB,kBAAA,CAAmB,CAAC,CAAC,CAAA;AACrC,QAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,QAAA,cAAA;AAAA,UACE,QAAA,CAAS,UAAA;AAAA,YACP;AAAA,cACE,IAAA;AAAA,cACA,KAAA,EAAO,aAAa,KAAA,IAAS,CAAA;AAAA,cAC7B,GAAA,EAAK;AAAA,aACP;AAAA,YACA,EAAE,MAAM,eAAA;AAAgB,WAC1B,CAAE,QAAQ,KAAK;AAAA,SACjB;AACA,QAAA,yBAAA,CAA0B,KAAK,CAAA;AAAA,MACjC,CAAA;AAAA;AAAA,MAEA,CAAC,aAAa,KAAK;AAAA,KACrB;AAEA,IAAA,uBACE,GAAA,CAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,OAAO,aAAA,EAC/B,QAAA,kBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,WAAA;AAAA,QACL,IAAI,EAAA,IAAM,GAAA;AAAA,QACV,KAAA,EAAO,aAAA;AAAA,QACP,SAAA,EAAW,iBAAA;AAAA,QACX,UAAA,EAAS,UAAA;AAAA,QACR,GAAG,cAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWA,QAAA,CAAO,QAAQ,CAAA,EAC7B,QAAA,kBAAA,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,SAAA;AAAA,cACL,YAAA,EAAW,qBAAA;AAAA,cACX,IAAA,EAAK,SAAA;AAAA,cACL,SAAA,EAAW,mBAAA;AAAA,cACX,SAAA,EAAWA,SAAO,YAAY,CAAA;AAAA,cAE9B,QAAA,EAAA;AAAA,gCAAA,GAAA;AAAA,kBAAC,mBAAA;AAAA,kBAAA;AAAA,oBACC,GAAA,EAAK,cAAA;AAAA,oBACL,UACE,aAAA,GACI,EAAA,GACA,iBAAiB,kBAAA,CAAmB,CAAC,IACnC,CAAA,GACA,EAAA;AAAA,oBAER,6BAAA,EAA2B,IAAA;AAAA,oBAC3B,kCAAA,EAAkC,mBAAmB,CAAC,CAAA;AAAA,oBACtD,sBAAA;AAAA,oBACA,SAAS,MAAM;AACb,sBAAA,yBAAA;AAAA,wBAA0B,CAAC,IAAA,KACzB,IAAA,KAAS,OAAA,GAAU,KAAA,GAAQ;AAAA,uBAC7B;AACA,sBAAA,eAAA,CAAgB,kBAAA,CAAmB,CAAC,CAAC,CAAA;AAAA,oBACvC;AAAA;AAAA,iBACF;AAAA,gCACA,GAAA;AAAA,kBAAC,kBAAA;AAAA,kBAAA;AAAA,oBACC,GAAA,EAAK,aAAA;AAAA,oBACL,UACE,aAAA,GACI,EAAA,GACA,iBAAiB,kBAAA,CAAmB,CAAC,IACnC,CAAA,GACA,EAAA;AAAA,oBAER,6BAAA,EAA2B,IAAA;AAAA,oBAC3B,kCAAA,EAAkC,mBAAmB,CAAC,CAAA;AAAA,oBACtD,sBAAA;AAAA,oBACA,SAAS,MAAM;AACb,sBAAA,yBAAA;AAAA,wBAA0B,CAAC,IAAA,KACzB,IAAA,KAAS,MAAA,GAAS,KAAA,GAAQ;AAAA,uBAC5B;AACA,sBAAA,eAAA,CAAgB,kBAAA,CAAmB,CAAC,CAAC,CAAA;AAAA,oBACvC;AAAA;AAAA,iBACF;AAAA,gBACC,sBAAA,KAA2B,yBAC1B,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,kCAAA,GAAA;AAAA,oBAAC,YAAA;AAAA,oBAAA;AAAA,sBACC,UACE,aAAA,GACI,EAAA,GACA,iBAAiB,kBAAA,CAAmB,CAAC,IACnC,CAAA,GACA,EAAA;AAAA,sBAER,6BAAA,EAA2B,IAAA;AAAA,sBAC3B,kCAAA,EAAkC,mBAAmB,CAAC,CAAA;AAAA,sBACtD,OAAA,EAAS,MAAM,eAAA,CAAgB,kBAAA,CAAmB,CAAC,CAAC;AAAA;AAAA,mBACtD;AAAA,kCACA,GAAA;AAAA,oBAAC,YAAA;AAAA,oBAAA;AAAA,sBACC,UACE,aAAA,GACI,EAAA,GACA,iBAAiB,kBAAA,CAAmB,CAAC,IACnC,CAAA,GACA,EAAA;AAAA,sBAER,6BAAA,EAA2B,IAAA;AAAA,sBAC3B,kCAAA,EAAkC,mBAAmB,CAAC,CAAA;AAAA,sBACtD,OAAA,EAAS,MAAM,eAAA,CAAgB,kBAAA,CAAmB,CAAC,CAAC;AAAA;AAAA,mBACtD;AAAA,kCACA,GAAA;AAAA,oBAAC,WAAA;AAAA,oBAAA;AAAA,sBACC,UACE,aAAA,GACI,EAAA,GACA,iBAAiB,kBAAA,CAAmB,CAAC,IACnC,CAAA,GACA,EAAA;AAAA,sBAER,6BAAA,EAA2B,IAAA;AAAA,sBAC3B,kCAAA,EAAkC,mBAAmB,CAAC,CAAA;AAAA,sBACtD,YAAA,EAAc,MAAM,eAAA,CAAgB,kBAAA,CAAmB,CAAC,CAAC;AAAA;AAAA;AAC3D,iBAAA,EACF;AAAA;AAAA;AAAA,WAEJ,EACF,CAAA;AAAA,UACC,sBAAA,KAA2B,KAAA,oBAAS,GAAA,CAAC,aAAA,EAAA,EAAc,CAAA;AAAA,UACnD,sBAAA,KAA2B,OAAA,oBAC1B,GAAA,CAAC,sBAAA,EAAA,EAAuB,kBAAkB,oBAAA,EAAsB,CAAA;AAAA,UAEjE,sBAAA,KAA2B,MAAA;AAAA,0BAE1B,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWA,QAAA,CAAO,eAAe,CAAA,EACpC,QAAA,kBAAA,GAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,mBAAA;AAAA,cACX,QAAA,EAAQ,IAAA;AAAA,cACR,YAAA,EAAc,YAAA;AAAA,cACd,KAAK,iBAAA,EAAmB,IAAA;AAAA,cACxB,KAAK,iBAAA,EAAmB;AAAA;AAAA,WAC1B,EACF;AAAA;AAAA;AAAA,KAEJ,EACF,CAAA;AAAA,EAEJ;AACF,CAAA;AAEA,eAAA,CAAgB,WAAA,GAAc,UAAA;AA6BvB,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,eAAA,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAarD,GAAA,EAAK,WAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcL,KAAA,EAAO,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaP,IAAA,EAAM,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaN,IAAA,EAAM,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaN,WAAA,EAAa,mBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAab,UAAA,EAAY;AACd,CAAC;;;;"}