{"version":3,"file":"index.mjs","names":[],"sources":["../src/calendar/icons.ts","../src/calendar/time/numericField.ts","../src/calendar/dom/floatingList.ts","../src/calendar/dom/customSelect.ts","../src/calendar/time/timeSelect.ts","../src/calendar/dom/createElements.ts","../src/calendar/utils/calendarOptions.ts","../src/calendar/utils/days.ts","../src/calendar/utils/filters.ts","../src/calendar/utils/format.ts","../src/calendar/utils/locale.ts","../src/calendar/utils/range.ts","../src/calendar/utils/viewport.ts","../src/calendar/input/createInputController.ts","../src/calendar/internal/dayClick.ts","../src/calendar/internal/emitters.ts","../src/calendar/render/gridKeyboard.ts","../src/calendar/internal/gridNav.ts","../src/calendar/range/rangePresets.ts","../src/calendar/render/rangePresetsPanel.ts","../src/calendar/internal/layoutHelpers.ts","../src/calendar/navigation.ts","../src/calendar/render/monthYear.ts","../src/calendar/internal/navigationHandlers.ts","../src/calendar/setDate.ts","../src/calendar/internal/publicApi.ts","../src/calendar/internal/timeManager.ts","../src/calendar/popover.ts","../src/calendar/render/grid.ts","../src/calendar/render/weekdays.ts","../src/calendar/buildCalendarPicker.ts","../src/calendar/resolveInputs.ts","../src/calendar/dateFlow.ts"],"sourcesContent":["export const ICON_PREV_MONTH =\n  '<svg class=\"cal__nav-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"15 18 9 12 15 6\"/></svg>';\n\nexport const ICON_NEXT_MONTH =\n  '<svg class=\"cal__nav-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"9 18 15 12 9 6\"/></svg>';\n\nexport const ICON_RESET =\n  '<svg class=\"cal__reset-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 2v5h5\"/><path d=\"M3.05 13a9 9 0 1 0 3.36-7.03L3 7\"/><path d=\"M12 7v5l3 2\"/></svg>';\n\nexport const ICON_SELECT_CHEVRON =\n  '<svg class=\"cal__list-select__chevron-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"6 9 12 15 18 9\"/></svg>';\n\nexport const ICON_SELECT_CHECK =\n  '<svg class=\"cal__list-select__check-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"20 6 9 17 4 12\"/></svg>';\n","export type TimeNumericField = \"hour\" | \"minute\" | \"second\";\n\nexport interface TimeFieldClampContext {\n  use12Hour: boolean;\n  minuteStep: number;\n}\n\nexport const normalizeMinuteStep = (step?: number): number => {\n  if (step === undefined) return 5;\n  if (!Number.isFinite(step) || step < 1) return 5;\n  return Math.min(60, Math.max(1, Math.floor(step)));\n};\n\nexport const snapMinuteToStep = (minute: number, step: number): number => {\n  const max = 60 - (60 % step || step);\n  const snapped = Math.round(minute / step) * step;\n  return Math.min(max, Math.max(0, snapped));\n};\n\nexport const parseTimeNumericInput = (text: string): number | null => {\n  const trimmed = text.trim();\n  if (!/^\\d{1,2}$/.test(trimmed)) return null;\n  const parsed = Number.parseInt(trimmed, 10);\n  return Number.isFinite(parsed) ? parsed : null;\n};\n\nexport const clampTimeNumericField = (\n  field: TimeNumericField,\n  raw: number,\n  context: TimeFieldClampContext,\n): number => {\n  if (field === \"hour\") {\n    if (context.use12Hour) return Math.min(12, Math.max(1, Math.round(raw)));\n    return Math.min(23, Math.max(0, Math.round(raw)));\n  }\n  if (field === \"minute\") {\n    const step = normalizeMinuteStep(context.minuteStep);\n    return snapMinuteToStep(Math.min(59, Math.max(0, Math.round(raw))), step);\n  }\n  return Math.min(59, Math.max(0, Math.round(raw)));\n};\n\nexport const formatTimeNumericLabel = (value: number): string =>\n  value < 10 ? `0${String(value)}` : String(value);\n","import { autoUpdate, computePosition, flip, offset, shift, size } from \"@floating-ui/dom\";\n\nconst MAX_LIST_HEIGHT_PX = 232;\n\nconst CAL_THEME_VARS = [\n  \"--cal-bg\",\n  \"--cal-surface\",\n  \"--cal-text\",\n  \"--cal-muted\",\n  \"--cal-input-placeholder\",\n  \"--cal-border\",\n  \"--cal-header-select-border\",\n  \"--cal-accent\",\n  \"--cal-accent-contrast\",\n  \"--cal-radius\",\n  \"--cal-shadow\",\n  \"--cal-day-size\",\n  \"--cal-font\",\n] as const;\n\nexport interface FloatingListHandle {\n  start(): void;\n  stop(): void;\n}\n\nconst findThemeElement = (reference: HTMLElement): Element | null =>\n  reference.closest(\".cal-anchor, .cal\");\n\nconst syncThemeVars = (floating: HTMLElement, reference: HTMLElement): void => {\n  const themeEl = findThemeElement(reference);\n  if (!themeEl) return;\n\n  const styles = getComputedStyle(themeEl);\n  for (const name of CAL_THEME_VARS) {\n    const value = styles.getPropertyValue(name);\n    if (value) floating.style.setProperty(name, value);\n  }\n};\n\nconst clearThemeVars = (floating: HTMLElement): void => {\n  for (const name of CAL_THEME_VARS) {\n    floating.style.removeProperty(name);\n  }\n};\n\nconst syncListVariantClasses = (floating: HTMLElement, root: HTMLElement): void => {\n  floating.classList.toggle(\n    \"cal__list-select__list--meridiem\",\n    root.classList.contains(\"cal__list-select--meridiem\"),\n  );\n};\n\nexport function attachFloatingList(\n  reference: HTMLElement,\n  floating: HTMLElement,\n  root: HTMLElement,\n): FloatingListHandle {\n  let cleanupAutoUpdate: (() => void) | null = null;\n\n  const updatePosition = (): void => {\n    void computePosition(reference, floating, {\n      strategy: \"fixed\",\n      placement: \"bottom-start\",\n      middleware: [\n        offset(6),\n        flip({ padding: 8 }),\n        shift({ padding: 8 }),\n        size({\n          padding: 8,\n          apply({ availableHeight, rects, elements }) {\n            Object.assign(elements.floating.style, {\n              width: `${Math.round(rects.reference.width)}px`,\n              maxHeight: `${Math.min(Math.max(availableHeight, 0), MAX_LIST_HEIGHT_PX)}px`,\n            });\n          },\n        }),\n      ],\n    }).then(({ x, y }) => {\n      floating.style.left = `${Math.round(x)}px`;\n      floating.style.top = `${Math.round(y)}px`;\n    });\n  };\n\n  const start = (): void => {\n    syncThemeVars(floating, reference);\n    syncListVariantClasses(floating, root);\n    floating.classList.add(\"cal__list-select__list--floating\");\n    document.body.append(floating);\n    cleanupAutoUpdate?.();\n    cleanupAutoUpdate = autoUpdate(reference, floating, updatePosition);\n    updatePosition();\n  };\n\n  const stop = (): void => {\n    cleanupAutoUpdate?.();\n    cleanupAutoUpdate = null;\n    floating.classList.remove(\"cal__list-select__list--floating\");\n    floating.style.left = \"\";\n    floating.style.top = \"\";\n    floating.style.width = \"\";\n    floating.style.maxHeight = \"\";\n    clearThemeVars(floating);\n    root.append(floating);\n  };\n\n  return { start, stop };\n}\n","import { ICON_SELECT_CHECK, ICON_SELECT_CHEVRON } from \"../icons\";\nimport {\n  clampTimeNumericField,\n  formatTimeNumericLabel,\n  parseTimeNumericInput,\n  type TimeFieldClampContext,\n  type TimeNumericField,\n} from \"../time/numericField\";\nimport { attachFloatingList } from \"./floatingList\";\n\nexport interface CustomSelectOption {\n  value: string;\n  label: string;\n}\n\nexport interface CustomSelectControl {\n  readonly root: HTMLDivElement;\n  get value(): string;\n  set value(next: string);\n  setOptions(options: readonly CustomSelectOption[]): void;\n  addEventListener(type: \"change\", listener: () => void): void;\n  close(): void;\n  setEditable?(enabled: boolean): void;\n  setClampContext?(context: TimeFieldClampContext): void;\n}\n\nexport type CustomSelectVariant = \"month\" | \"time\";\n\nexport interface CustomSelectCreateOptions {\n  numericField?: TimeNumericField;\n}\n\nlet openCustomSelect: (() => void) | null = null;\n\nconst findOptionForTypedValue = (\n  raw: string,\n  options: readonly CustomSelectOption[],\n): CustomSelectOption | null => {\n  const trimmed = raw.trim();\n  if (!trimmed) return null;\n\n  const textMatch = options.find(\n    (option) =>\n      option.label.toLowerCase() === trimmed.toLowerCase() ||\n      option.value.toLowerCase() === trimmed.toLowerCase(),\n  );\n  if (textMatch) return textMatch;\n\n  const parsed = Number.parseInt(trimmed, 10);\n  if (Number.isNaN(parsed)) return null;\n\n  const numericOptions = options\n    .map((option) => ({ option, numeric: Number.parseInt(option.value, 10) }))\n    .filter((entry) => !Number.isNaN(entry.numeric));\n\n  const exact = numericOptions.find((entry) => entry.numeric === parsed);\n  if (exact) return exact.option;\n\n  if (numericOptions.length === 0) return null;\n\n  let best = numericOptions[0];\n  let bestDistance = Math.abs(best.numeric - parsed);\n  for (const entry of numericOptions) {\n    const distance = Math.abs(entry.numeric - parsed);\n    if (distance < bestDistance) {\n      best = entry;\n      bestDistance = distance;\n    }\n  }\n  return best.option;\n};\n\nconst createList = (ariaLabel: string, variant: CustomSelectVariant): HTMLUListElement => {\n  const list = document.createElement(\"ul\");\n  list.className = `cal__list-select__list cal__list-select__list--${variant}`;\n  list.setAttribute(\"role\", \"listbox\");\n  list.setAttribute(\"aria-label\", ariaLabel);\n  list.hidden = true;\n  return list;\n};\n\nconst createMonthCustomSelect = (ariaLabel: string): CustomSelectControl => {\n  const root = document.createElement(\"div\");\n  root.className = \"cal__list-select cal__list-select--month\";\n\n  const trigger = document.createElement(\"button\");\n  trigger.type = \"button\";\n  trigger.className = \"cal__list-select__trigger\";\n  trigger.setAttribute(\"aria-label\", ariaLabel);\n  trigger.setAttribute(\"aria-haspopup\", \"listbox\");\n  trigger.setAttribute(\"aria-expanded\", \"false\");\n\n  const label = document.createElement(\"span\");\n  label.className = \"cal__list-select__label\";\n\n  const chevron = document.createElement(\"span\");\n  chevron.className = \"cal__list-select__chevron\";\n  chevron.innerHTML = ICON_SELECT_CHEVRON;\n\n  trigger.append(label, chevron);\n\n  const list = createList(ariaLabel, \"month\");\n  root.append(trigger, list);\n\n  const floatingList = attachFloatingList(trigger, list, root);\n\n  let options: CustomSelectOption[] = [];\n  let selectedValue = \"\";\n  const changeListeners: Array<() => void> = [];\n  let docPointerListener: ((event: PointerEvent) => void) | null = null;\n\n  const removeDocPointerListener = (): void => {\n    if (!docPointerListener) return;\n    document.removeEventListener(\"pointerdown\", docPointerListener);\n    docPointerListener = null;\n  };\n\n  const syncTriggerLabel = (): void => {\n    const current = options.find((option) => option.value === selectedValue);\n    label.textContent = current?.label ?? \"\";\n  };\n\n  const close = (): void => {\n    floatingList.stop();\n    list.hidden = true;\n    trigger.setAttribute(\"aria-expanded\", \"false\");\n    root.classList.remove(\"cal__list-select--open\");\n    removeDocPointerListener();\n    if (openCustomSelect === close) openCustomSelect = null;\n  };\n\n  const renderList = (): void => {\n    list.replaceChildren();\n    options.forEach((option) => {\n      const item = document.createElement(\"li\");\n      item.className = \"cal__list-select__option\";\n      item.setAttribute(\"role\", \"option\");\n      const isSelected = option.value === selectedValue;\n      item.setAttribute(\"aria-selected\", isSelected ? \"true\" : \"false\");\n      if (isSelected) item.classList.add(\"cal__list-select__option--selected\");\n\n      const optionLabel = document.createElement(\"span\");\n      optionLabel.className = \"cal__list-select__option-label\";\n      optionLabel.textContent = option.label;\n\n      item.append(optionLabel);\n      if (isSelected) {\n        const check = document.createElement(\"span\");\n        check.className = \"cal__list-select__check\";\n        check.innerHTML = ICON_SELECT_CHECK;\n        item.append(check);\n      }\n      item.addEventListener(\"click\", (event) => {\n        event.stopPropagation();\n        if (selectedValue === option.value) {\n          close();\n          return;\n        }\n        selectedValue = option.value;\n        syncTriggerLabel();\n        renderList();\n        close();\n        changeListeners.forEach((listener) => listener());\n      });\n      list.append(item);\n    });\n  };\n\n  const open = (): void => {\n    openCustomSelect?.();\n    openCustomSelect = close;\n    list.hidden = false;\n    trigger.setAttribute(\"aria-expanded\", \"true\");\n    root.classList.add(\"cal__list-select--open\");\n    floatingList.start();\n    const selectedItem = list.querySelector(\".cal__list-select__option--selected\");\n    selectedItem?.scrollIntoView?.({ block: \"nearest\" });\n    docPointerListener = (event: PointerEvent): void => {\n      const target = event.target;\n      if (!(target instanceof Node)) return;\n      if (root.contains(target) || list.contains(target)) return;\n      close();\n    };\n    document.addEventListener(\"pointerdown\", docPointerListener);\n  };\n\n  trigger.addEventListener(\"click\", () => {\n    if (list.hidden) open();\n    else close();\n  });\n\n  trigger.addEventListener(\"keydown\", (event) => {\n    if (event.key === \"Escape\") close();\n  });\n\n  return {\n    root,\n    get value() {\n      return selectedValue;\n    },\n    set value(next) {\n      if (!options.some((option) => option.value === next)) return;\n      selectedValue = next;\n      syncTriggerLabel();\n      renderList();\n    },\n    setOptions(nextOptions) {\n      const previous = selectedValue;\n      options = [...nextOptions];\n      if (!options.some((option) => option.value === selectedValue)) {\n        selectedValue = options[0]?.value ?? \"\";\n      } else {\n        selectedValue = previous;\n      }\n      syncTriggerLabel();\n      renderList();\n    },\n    addEventListener(type, listener) {\n      if (type === \"change\") changeListeners.push(listener);\n    },\n    close,\n  };\n};\n\nconst createTimeCustomSelect = (\n  ariaLabel: string,\n  createOptions: CustomSelectCreateOptions = {},\n): CustomSelectControl => {\n  const { numericField } = createOptions;\n  const root = document.createElement(\"div\");\n  root.className = \"cal__list-select cal__list-select--time\";\n\n  const trigger = document.createElement(\"div\");\n  trigger.className = \"cal__list-select__trigger\";\n  trigger.setAttribute(\"role\", \"group\");\n\n  const input = document.createElement(\"input\");\n  input.type = \"text\";\n  input.className = \"cal__list-select__input\";\n  input.setAttribute(\"aria-label\", ariaLabel);\n  input.inputMode = numericField ? \"numeric\" : \"text\";\n  input.maxLength = 2;\n  input.readOnly = true;\n  input.spellcheck = false;\n  input.autocomplete = \"off\";\n\n  const chevronBtn = document.createElement(\"button\");\n  chevronBtn.type = \"button\";\n  chevronBtn.className = \"cal__list-select__chevron-btn\";\n  chevronBtn.setAttribute(\"aria-label\", `${ariaLabel} options`);\n  chevronBtn.setAttribute(\"aria-haspopup\", \"listbox\");\n  chevronBtn.setAttribute(\"aria-expanded\", \"false\");\n  chevronBtn.innerHTML = ICON_SELECT_CHEVRON;\n\n  trigger.append(input, chevronBtn);\n\n  const list = createList(ariaLabel, \"time\");\n  root.append(trigger, list);\n\n  const floatingList = attachFloatingList(trigger, list, root);\n\n  let options: CustomSelectOption[] = [];\n  let selectedValue = \"\";\n  let editable = true;\n  let clampContext: TimeFieldClampContext = { use12Hour: false, minuteStep: 5 };\n  const changeListeners: Array<() => void> = [];\n  let docPointerListener: ((event: PointerEvent) => void) | null = null;\n\n  const removeDocPointerListener = (): void => {\n    if (!docPointerListener) return;\n    document.removeEventListener(\"pointerdown\", docPointerListener);\n    docPointerListener = null;\n  };\n\n  const syncInputDisplay = (): void => {\n    const current = options.find((option) => option.value === selectedValue);\n    input.value = current?.label ?? \"\";\n  };\n\n  const pickOptionValueForClamped = (clamped: number): string => {\n    const exact = String(clamped);\n    if (options.some((option) => option.value === exact)) return exact;\n    let bestValue = selectedValue;\n    let bestDistance = Number.POSITIVE_INFINITY;\n    for (const option of options) {\n      const numeric = Number.parseInt(option.value, 10);\n      if (!Number.isFinite(numeric)) continue;\n      const distance = Math.abs(numeric - clamped);\n      if (distance < bestDistance) {\n        bestDistance = distance;\n        bestValue = option.value;\n      }\n    }\n    return bestValue;\n  };\n\n  const close = (): void => {\n    floatingList.stop();\n    list.hidden = true;\n    chevronBtn.setAttribute(\"aria-expanded\", \"false\");\n    root.classList.remove(\"cal__list-select--open\");\n    removeDocPointerListener();\n    if (openCustomSelect === close) openCustomSelect = null;\n  };\n\n  const renderList = (): void => {\n    list.replaceChildren();\n    options.forEach((option) => {\n      const item = document.createElement(\"li\");\n      item.className = \"cal__list-select__option\";\n      item.setAttribute(\"role\", \"option\");\n      const isSelected = option.value === selectedValue;\n      item.setAttribute(\"aria-selected\", isSelected ? \"true\" : \"false\");\n      if (isSelected) item.classList.add(\"cal__list-select__option--selected\");\n\n      const optionLabel = document.createElement(\"span\");\n      optionLabel.className = \"cal__list-select__option-label\";\n      optionLabel.textContent = option.label;\n\n      item.append(optionLabel);\n      if (isSelected) {\n        const check = document.createElement(\"span\");\n        check.className = \"cal__list-select__check\";\n        check.innerHTML = ICON_SELECT_CHECK;\n        item.append(check);\n      }\n      item.addEventListener(\"click\", (event) => {\n        event.stopPropagation();\n        if (selectedValue === option.value) {\n          close();\n          return;\n        }\n        selectedValue = option.value;\n        syncInputDisplay();\n        renderList();\n        close();\n        changeListeners.forEach((listener) => listener());\n      });\n      list.append(item);\n    });\n  };\n\n  const commitEdit = (): void => {\n    if (input.readOnly) return;\n    input.readOnly = true;\n    root.classList.remove(\"cal__list-select--editing\");\n\n    const previous = selectedValue;\n    if (numericField) {\n      const parsed = parseTimeNumericInput(input.value);\n      if (parsed !== null) {\n        const clamped = clampTimeNumericField(numericField, parsed, clampContext);\n        selectedValue = pickOptionValueForClamped(clamped);\n      }\n    } else {\n      const matched = findOptionForTypedValue(input.value, options);\n      if (matched) selectedValue = matched.value;\n    }\n\n    syncInputDisplay();\n    renderList();\n    if (selectedValue !== previous) {\n      changeListeners.forEach((listener) => listener());\n    }\n  };\n\n  const enterEditMode = (): void => {\n    if (!editable || !input.readOnly) return;\n    close();\n    input.readOnly = false;\n    if (numericField) {\n      const parsed = Number.parseInt(selectedValue, 10);\n      input.value = Number.isFinite(parsed) ? formatTimeNumericLabel(parsed) : input.value;\n    }\n    root.classList.add(\"cal__list-select--editing\");\n    input.focus();\n    input.select();\n  };\n\n  const open = (): void => {\n    if (!input.readOnly) commitEdit();\n    openCustomSelect?.();\n    openCustomSelect = close;\n    list.hidden = false;\n    chevronBtn.setAttribute(\"aria-expanded\", \"true\");\n    root.classList.add(\"cal__list-select--open\");\n    floatingList.start();\n    const selectedItem = list.querySelector(\".cal__list-select__option--selected\");\n    selectedItem?.scrollIntoView?.({ block: \"nearest\" });\n    docPointerListener = (event: PointerEvent): void => {\n      const target = event.target;\n      if (!(target instanceof Node)) return;\n      if (root.contains(target) || list.contains(target)) return;\n      close();\n    };\n    document.addEventListener(\"pointerdown\", docPointerListener);\n  };\n\n  const openFromInput = (): void => {\n    if (list.hidden) open();\n    else close();\n  };\n\n  input.addEventListener(\"pointerdown\", (event) => {\n    if (!editable) {\n      event.preventDefault();\n      openFromInput();\n      return;\n    }\n    if (!input.readOnly) return;\n    event.preventDefault();\n    enterEditMode();\n  });\n\n  input.addEventListener(\"focus\", () => {\n    if (!editable) return;\n    if (input.readOnly) enterEditMode();\n  });\n\n  input.addEventListener(\"blur\", commitEdit);\n\n  input.addEventListener(\"keydown\", (event) => {\n    if (event.key === \"Enter\") {\n      event.preventDefault();\n      input.blur();\n      return;\n    }\n    if (event.key === \"Escape\") {\n      syncInputDisplay();\n      input.readOnly = true;\n      root.classList.remove(\"cal__list-select--editing\");\n      input.blur();\n    }\n  });\n\n  chevronBtn.addEventListener(\"click\", (event) => {\n    event.stopPropagation();\n    if (!input.readOnly) commitEdit();\n    openFromInput();\n  });\n\n  chevronBtn.addEventListener(\"keydown\", (event) => {\n    if (event.key === \"Escape\") close();\n  });\n\n  const control: CustomSelectControl = {\n    root,\n    get value() {\n      return selectedValue;\n    },\n    set value(next) {\n      if (!options.some((option) => option.value === next)) return;\n      selectedValue = next;\n      syncInputDisplay();\n      renderList();\n    },\n    setOptions(nextOptions) {\n      const previous = selectedValue;\n      options = [...nextOptions];\n      if (!options.some((option) => option.value === selectedValue)) {\n        selectedValue = options[0]?.value ?? \"\";\n      } else {\n        selectedValue = previous;\n      }\n      syncInputDisplay();\n      renderList();\n    },\n    addEventListener(type, listener) {\n      if (type === \"change\") changeListeners.push(listener);\n    },\n    close,\n  };\n\n  if (numericField) {\n    control.setEditable = (enabled: boolean): void => {\n      editable = enabled;\n      if (!enabled && !input.readOnly) {\n        syncInputDisplay();\n        input.readOnly = true;\n        root.classList.remove(\"cal__list-select--editing\");\n      }\n    };\n    control.setClampContext = (context: TimeFieldClampContext): void => {\n      clampContext = context;\n    };\n  }\n\n  return control;\n};\n\nexport const createCustomSelect = (\n  ariaLabel: string,\n  variant: CustomSelectVariant = \"time\",\n  createOptions: CustomSelectCreateOptions = {},\n): CustomSelectControl =>\n  variant === \"month\"\n    ? createMonthCustomSelect(ariaLabel)\n    : createTimeCustomSelect(ariaLabel, createOptions);\n\nexport const createMonthSelect = (ariaLabel: string): CustomSelectControl =>\n  createCustomSelect(ariaLabel, \"month\");\n","import { createCustomSelect, type CustomSelectControl } from \"../dom/customSelect\";\nimport { snapMinuteToStep } from \"./numericField\";\n\nexport { normalizeMinuteStep, snapMinuteToStep } from \"./numericField\";\n\nconst formatTimeOption = (value: number): string =>\n  value < 10 ? `0${String(value)}` : String(value);\n\nexport const fillSecond = (selectS: CustomSelectControl): void => {\n  selectS.setOptions(\n    Array.from({ length: 60 }, (_, second) => ({\n      value: String(second),\n      label: formatTimeOption(second),\n    })),\n  );\n};\n\nexport const fillHourMinute = (\n  selectH: CustomSelectControl,\n  selectM: CustomSelectControl,\n  selectMeridiem: CustomSelectControl,\n  use12HourTime: boolean,\n  minuteStep: number,\n): void => {\n  const hourFrom = use12HourTime ? 1 : 0;\n  const hourTo = use12HourTime ? 12 : 23;\n  selectH.setOptions(\n    Array.from({ length: hourTo - hourFrom + 1 }, (_, index) => {\n      const hour = hourFrom + index;\n      return {\n        value: String(hour),\n        label: formatTimeOption(hour),\n      };\n    }),\n  );\n  selectM.setOptions(\n    Array.from({ length: Math.ceil(60 / minuteStep) }, (_, index) => {\n      const minute = index * minuteStep;\n      return {\n        value: String(minute),\n        label: formatTimeOption(minute),\n      };\n    }),\n  );\n  selectMeridiem.setOptions([\n    { value: \"AM\", label: \"AM\" },\n    { value: \"PM\", label: \"PM\" },\n  ]);\n};\n\nexport const setHM = (\n  selectH: CustomSelectControl,\n  selectM: CustomSelectControl,\n  selectMeridiem: CustomSelectControl,\n  selectS: CustomSelectControl | null,\n  d: Date,\n  use12HourTime: boolean,\n  minuteStep: number,\n): void => {\n  const h = d.getHours();\n  if (use12HourTime) {\n    const isPm = h >= 12;\n    const h12 = h % 12 === 0 ? 12 : h % 12;\n    selectH.value = String(h12);\n    selectMeridiem.value = isPm ? \"PM\" : \"AM\";\n  } else {\n    selectH.value = String(h);\n    selectMeridiem.value = h >= 12 ? \"PM\" : \"AM\";\n  }\n  selectM.value = String(snapMinuteToStep(d.getMinutes(), minuteStep));\n  if (selectS) selectS.value = String(d.getSeconds());\n};\n\nexport const applyHM = (\n  base: Date,\n  selectH: CustomSelectControl,\n  selectM: CustomSelectControl,\n  selectMeridiem: CustomSelectControl,\n  selectS: CustomSelectControl | null,\n  use12HourTime: boolean,\n): Date => {\n  const rawHour = Number.parseInt(selectH.value, 10);\n  const min = Number.parseInt(selectM.value, 10);\n  const sec = selectS ? Number.parseInt(selectS.value, 10) : 0;\n  const h = use12HourTime ? (rawHour % 12) + (selectMeridiem.value === \"PM\" ? 12 : 0) : rawHour;\n  return new Date(base.getFullYear(), base.getMonth(), base.getDate(), h, min, sec, 0);\n};\n\nexport interface TimeRowElements {\n  row: HTMLDivElement;\n  label: HTMLSpanElement;\n  hour: CustomSelectControl;\n  sep: HTMLSpanElement;\n  minute: CustomSelectControl;\n  sepSecond: HTMLSpanElement;\n  second: CustomSelectControl;\n  meridiem: CustomSelectControl;\n}\n\nexport const createTimeRow = (\n  rowClass: string,\n  labels: { hour: string; minute: string; second: string; meridiem: string },\n): TimeRowElements => {\n  const row = document.createElement(\"div\");\n  row.className = rowClass;\n\n  const label = document.createElement(\"span\");\n  label.className = \"cal__time-label\";\n\n  const hour = createCustomSelect(labels.hour, \"time\", { numericField: \"hour\" });\n  const sep = document.createElement(\"span\");\n  sep.className = \"cal__time-sep\";\n  sep.textContent = \":\";\n\n  const minute = createCustomSelect(labels.minute, \"time\", { numericField: \"minute\" });\n  const sepSecond = document.createElement(\"span\");\n  sepSecond.className = \"cal__time-sep cal__time-sep--second\";\n  sepSecond.textContent = \":\";\n\n  const second = createCustomSelect(labels.second, \"time\", { numericField: \"second\" });\n  const meridiem = createCustomSelect(labels.meridiem, \"time\");\n  meridiem.root.classList.add(\"cal__list-select--meridiem\");\n\n  row.append(label, hour.root, sep, minute.root, sepSecond, second.root, meridiem.root);\n\n  return { row, label, hour, sep, minute, sepSecond, second, meridiem };\n};\n","import { ICON_NEXT_MONTH, ICON_PREV_MONTH, ICON_RESET } from \"../icons\";\nimport { createTimeRow } from \"../time\";\nimport { createMonthSelect } from \"./customSelect\";\nimport type { CalendarDomElements } from \"./types\";\n\nexport const createCalendarDom = (): CalendarDomElements => {\n  const container = document.createElement(\"div\");\n  container.className = \"cal-anchor\";\n  container.hidden = true;\n\n  const root = document.createElement(\"div\");\n  root.setAttribute(\"role\", \"group\");\n\n  const header = document.createElement(\"div\");\n  header.className = \"cal__header\";\n\n  const btnPrev = document.createElement(\"button\");\n  btnPrev.type = \"button\";\n  btnPrev.className = \"cal__nav cal__nav--prev\";\n  btnPrev.setAttribute(\"aria-label\", \"Previous month\");\n  btnPrev.innerHTML = ICON_PREV_MONTH;\n\n  const btnNext = document.createElement(\"button\");\n  btnNext.type = \"button\";\n  btnNext.className = \"cal__nav cal__nav--next\";\n  btnNext.setAttribute(\"aria-label\", \"Next month\");\n  btnNext.innerHTML = ICON_NEXT_MONTH;\n\n  const btnReset = document.createElement(\"button\");\n  btnReset.type = \"button\";\n  btnReset.className = \"cal__reset\";\n  btnReset.innerHTML = ICON_RESET;\n\n  const selectsWrap = document.createElement(\"div\");\n  selectsWrap.className = \"cal__selects\";\n\n  const monthSelect = createMonthSelect(\"Month\");\n\n  const yearInput = document.createElement(\"input\");\n  yearInput.type = \"text\";\n  yearInput.inputMode = \"numeric\";\n  yearInput.className = \"cal__year-input\";\n  yearInput.setAttribute(\"aria-label\", \"Year\");\n  yearInput.maxLength = 4;\n  yearInput.spellcheck = false;\n\n  selectsWrap.append(monthSelect.root, yearInput);\n  header.append(btnPrev, selectsWrap, btnNext, btnReset);\n\n  const headerRight = document.createElement(\"div\");\n  headerRight.className = \"cal__header cal__header--sub\";\n  const selectsWrapRight = document.createElement(\"div\");\n  selectsWrapRight.className = \"cal__selects\";\n  const monthSelectRight = createMonthSelect(\"Month\");\n  const yearInputRight = document.createElement(\"input\");\n  yearInputRight.type = \"text\";\n  yearInputRight.inputMode = \"numeric\";\n  yearInputRight.className = \"cal__year-input\";\n  yearInputRight.setAttribute(\"aria-label\", \"Year\");\n  yearInputRight.maxLength = 4;\n  yearInputRight.spellcheck = false;\n  selectsWrapRight.append(monthSelectRight.root, yearInputRight);\n  headerRight.append(selectsWrapRight);\n\n  const weekdaysRow = document.createElement(\"div\");\n  weekdaysRow.className = \"cal__weekdays\";\n  const weekdaysRowRight = document.createElement(\"div\");\n  weekdaysRowRight.className = \"cal__weekdays\";\n\n  const grid = document.createElement(\"div\");\n  grid.className = \"cal__grid\";\n  grid.setAttribute(\"role\", \"grid\");\n  const gridRight = document.createElement(\"div\");\n  gridRight.className = \"cal__grid\";\n  gridRight.setAttribute(\"role\", \"grid\");\n\n  const timeWrap = document.createElement(\"div\");\n  timeWrap.className = \"cal__time-wrap\";\n  const rangeActions = document.createElement(\"div\");\n  rangeActions.className = \"cal__range-actions\";\n  const btnCancelRange = document.createElement(\"button\");\n  btnCancelRange.type = \"button\";\n  btnCancelRange.className = \"cal__action-btn cal__action-btn--ghost\";\n  btnCancelRange.textContent = \"Cancel\";\n  const btnApplyRange = document.createElement(\"button\");\n  btnApplyRange.type = \"button\";\n  btnApplyRange.className = \"cal__action-btn cal__action-btn--primary\";\n  btnApplyRange.textContent = \"Apply\";\n  rangeActions.append(btnCancelRange, btnApplyRange);\n\n  const timeWrapRangeStart = document.createElement(\"div\");\n  timeWrapRangeStart.className = \"cal__time-wrap cal__time-wrap--pane\";\n  const timeWrapRangeEnd = document.createElement(\"div\");\n  timeWrapRangeEnd.className = \"cal__time-wrap cal__time-wrap--pane\";\n\n  const timeSingle = createTimeRow(\"cal__time cal__time--single\", {\n    hour: \"Hour\",\n    minute: \"Minute\",\n    second: \"Second\",\n    meridiem: \"AM/PM\",\n  });\n  const timeRangeStart = createTimeRow(\"cal__time cal__time--range-start\", {\n    hour: \"Start hour\",\n    minute: \"Start minute\",\n    second: \"Start second\",\n    meridiem: \"Start AM/PM\",\n  });\n  const timeRangeEnd = createTimeRow(\"cal__time cal__time--range-end\", {\n    hour: \"End hour\",\n    minute: \"End minute\",\n    second: \"End second\",\n    meridiem: \"End AM/PM\",\n  });\n\n  timeWrap.append(timeSingle.row);\n  timeWrapRangeStart.append(timeRangeStart.row);\n  timeWrapRangeEnd.append(timeRangeEnd.row);\n\n  const paneLeft = document.createElement(\"div\");\n  paneLeft.className = \"cal__pane\";\n  paneLeft.append(header, weekdaysRow, grid, timeWrapRangeStart);\n  const paneRight = document.createElement(\"div\");\n  paneRight.className = \"cal__pane\";\n  paneRight.append(headerRight, weekdaysRowRight, gridRight, timeWrapRangeEnd);\n  const panes = document.createElement(\"div\");\n  panes.className = \"cal__panes\";\n  panes.append(paneLeft, paneRight);\n\n  const main = document.createElement(\"div\");\n  main.className = \"cal__main\";\n\n  const rangePresets = document.createElement(\"nav\");\n  rangePresets.className = \"cal__range-presets\";\n  rangePresets.setAttribute(\"aria-label\", \"Range presets\");\n  rangePresets.hidden = true;\n\n  const body = document.createElement(\"div\");\n  body.className = \"cal__body\";\n  main.append(panes, timeWrap, rangeActions);\n  body.append(rangePresets, main);\n  root.append(body);\n  container.append(root);\n\n  return {\n    container,\n    root,\n    body,\n    main,\n    rangePresets,\n    paneLeft,\n    paneRight,\n    header,\n    headerRight,\n    btnPrev,\n    btnNext,\n    btnReset,\n    monthSelect,\n    monthSelectRight,\n    yearInput,\n    yearInputRight,\n    weekdaysRow,\n    weekdaysRowRight,\n    grid,\n    gridRight,\n    timeWrap,\n    timeWrapRangeStart,\n    timeWrapRangeEnd,\n    rangeActions,\n    btnCancelRange,\n    btnApplyRange,\n    timeSingle,\n    timeRangeStart,\n    timeRangeEnd,\n  };\n};\n","import { startOfDay } from \"date-fns\";\nimport type { CalendarOptions } from \"../types/types\";\n\nconst effectiveOutputFormat = (options: CalendarOptions): string => {\n  if (options.outputFormat) return options.outputFormat;\n  if (!options.showTime) return \"yyyy-MM-dd\";\n  if (options.showSeconds) {\n    return options.use12HourTime ? \"yyyy-MM-dd hh:mm:ss a\" : \"yyyy-MM-dd HH:mm:ss\";\n  }\n  return options.use12HourTime ? \"yyyy-MM-dd hh:mm a\" : \"yyyy-MM-dd HH:mm\";\n};\n\nconst shouldShowTimeOn = (options: CalendarOptions): boolean => {\n  return options.showTime ?? false;\n};\n\n/** When time UI is off, values and formatting use calendar date at local midnight. */\nconst dateOnlyIfNeeded = (options: CalendarOptions, d: Date): Date => {\n  return shouldShowTimeOn(options) ? d : startOfDay(d);\n};\n\nexport { effectiveOutputFormat, shouldShowTimeOn, dateOnlyIfNeeded };\n","import { compareAsc, startOfDay } from \"date-fns\";\n\nconst parseCalendarDay = (isoDate: string): Date => {\n  const [y, mo, d] = isoDate.split(\"-\").map((s) => Number.parseInt(s, 10));\n  return new Date(y, mo - 1, d);\n};\n\n/** Local-date `yyyy-MM-dd` string without pulling in date-fns' formatter. */\nconst toISODate = (date: Date): string => {\n  const y = String(date.getFullYear()).padStart(4, \"0\");\n  const m = String(date.getMonth() + 1).padStart(2, \"0\");\n  const d = String(date.getDate()).padStart(2, \"0\");\n  return `${y}-${m}-${d}`;\n};\n\nconst compareCalendarDay = (a: Date, b: Date): number => {\n  return compareAsc(startOfDay(a), startOfDay(b));\n};\n\nconst dayInInclusiveRange = (day: Date, rangeStart: Date, rangeEnd: Date): boolean => {\n  const dayMidnight = startOfDay(day).getTime();\n  const rangeStartMidnight = startOfDay(rangeStart).getTime();\n  const rangeEndMidnight = startOfDay(rangeEnd).getTime();\n  const low = Math.min(rangeStartMidnight, rangeEndMidnight);\n  const high = Math.max(rangeStartMidnight, rangeEndMidnight);\n  return dayMidnight >= low && dayMidnight <= high;\n};\n\nexport { parseCalendarDay, toISODate, compareCalendarDay, dayInInclusiveRange };\n","import { isSameDay } from \"date-fns\";\nimport type { DateFilter } from \"../types/types\";\n\nconst matchesFilter = (filter: DateFilter | undefined, day: Date): boolean => {\n  if (!filter) return false;\n  if (typeof filter === \"function\") return filter(day);\n  return filter.some((d) => isSameDay(d, day));\n};\n\nexport { matchesFilter };\n","import type { CalendarLocale } from \"../types/types\";\n\nconst formatRangeDurationLabel = (locale: CalendarLocale, dayCount: number): string => {\n  const one = locale.rangeDurationOne ?? \"1 day\";\n  const other = locale.rangeDurationOther ?? \"{n} days\";\n  if (dayCount === 1) return one;\n  return other.replace(/\\{n\\}/g, String(dayCount));\n};\n\nexport { formatRangeDurationLabel };\n","import { DEFAULT_LOCALE } from \"../locales/index\";\nimport type { CalendarLocale, ResolvedCalendarLocale } from \"../types/types\";\n\n/** Calendar convention: 0 = Sunday … 6 = Saturday. */\nconst normalizeFirstDayOfWeek = (day: number): number => ((day % 7) + 7) % 7;\n\ntype IntlLocaleWithWeekInfo = {\n  getWeekInfo?: () => { firstDay?: number };\n};\n\nconst getFirstDayOfWeekFromIntl = (localeTag: string): number | null => {\n  try {\n    const LocaleCtor = Intl.Locale;\n    if (typeof LocaleCtor !== \"function\") return null;\n    const locale = new LocaleCtor(localeTag);\n    const getWeekInfo = (locale as IntlLocaleWithWeekInfo).getWeekInfo;\n    if (typeof getWeekInfo !== \"function\") return null;\n    const { firstDay } = getWeekInfo.call(locale);\n    if (typeof firstDay !== \"number\" || firstDay < 1 || firstDay > 7) return null;\n    return normalizeFirstDayOfWeek(firstDay);\n  } catch {\n    return null;\n  }\n};\n\nconst resolveFirstDayOfWeek = (override?: number, localeTag?: string): number => {\n  if (override !== undefined) {\n    return normalizeFirstDayOfWeek(override);\n  }\n\n  const tag = localeTag ?? (typeof navigator !== \"undefined\" ? navigator.language : undefined);\n  if (tag) {\n    const fromIntl = getFirstDayOfWeekFromIntl(tag);\n    if (fromIntl !== null) return fromIntl;\n  }\n\n  return 1;\n};\n\nconst mergeLocale = (partial: Partial<CalendarLocale> | undefined): ResolvedCalendarLocale => {\n  const base = partial ?? {};\n  return {\n    weekdays: { ...DEFAULT_LOCALE.weekdays, ...base.weekdays },\n    months: { ...DEFAULT_LOCALE.months, ...base.months },\n    firstDayOfWeek: resolveFirstDayOfWeek(base.firstDayOfWeek, base.localeTag),\n    weekNumberHeader: base.weekNumberHeader ?? DEFAULT_LOCALE.weekNumberHeader ?? \"Wk\",\n    rangeDurationOne: base.rangeDurationOne ?? DEFAULT_LOCALE.rangeDurationOne,\n    rangeDurationOther: base.rangeDurationOther ?? DEFAULT_LOCALE.rangeDurationOther,\n    inputPlaceholder: base.inputPlaceholder ?? DEFAULT_LOCALE.inputPlaceholder ?? \"Select date\",\n    rangeInputPlaceholder:\n      base.rangeInputPlaceholder ??\n      DEFAULT_LOCALE.rangeInputPlaceholder ??\n      base.inputPlaceholder ??\n      DEFAULT_LOCALE.inputPlaceholder ??\n      \"Select date range\",\n    rangeCancel: base.rangeCancel ?? DEFAULT_LOCALE.rangeCancel ?? \"Cancel\",\n    rangeApply: base.rangeApply ?? DEFAULT_LOCALE.rangeApply ?? \"Apply\",\n  };\n};\n\nexport { getFirstDayOfWeekFromIntl, mergeLocale, resolveFirstDayOfWeek };\n","import { compareAsc } from \"date-fns\";\nimport { compareCalendarDay } from \"./days\";\nimport { matchesFilter } from \"./filters\";\nimport type { DateFilter, DateRangeValue, YearRange } from \"../types/types\";\n\nconst isSelectable = (\n  day: Date,\n  minDate: Date | null | undefined,\n  maxDate: Date | null | undefined,\n  disabledDates: DateFilter | undefined,\n  enabledDatesOnly: DateFilter | undefined,\n): boolean => {\n  if (minDate && compareCalendarDay(day, minDate) < 0) return false;\n  if (maxDate && compareCalendarDay(day, maxDate) > 0) return false;\n\n  if (enabledDatesOnly) {\n    return matchesFilter(enabledDatesOnly, day);\n  }\n  if (disabledDates && matchesFilter(disabledDates, day)) return false;\n  return true;\n};\n\nconst yearRange = (\n  viewYear: number,\n  minDate: Date | null | undefined,\n  maxDate: Date | null | undefined,\n  radius: number,\n): YearRange => {\n  let from = viewYear - radius;\n  let to = viewYear + radius;\n\n  if (minDate) from = Math.max(from, minDate.getFullYear());\n\n  if (maxDate) to = Math.min(to, maxDate.getFullYear());\n\n  if (from > to) {\n    return { from: viewYear, to: viewYear };\n  }\n\n  return { from, to };\n};\n\nconst cloneRange = (range: DateRangeValue): DateRangeValue => {\n  return {\n    start: range.start ? new Date(range.start.getTime()) : null,\n    end: range.end ? new Date(range.end.getTime()) : null,\n  };\n};\n\nconst orderDateTimeRange = (start: Date, end: Date): { start: Date; end: Date } => {\n  if (compareAsc(start, end) <= 0) {\n    return { start, end };\n  }\n  return {\n    start: new Date(end.getTime()),\n    end: new Date(start.getTime()),\n  };\n};\n\nexport { isSelectable, yearRange, cloneRange, orderDateTimeRange };\n","export const COMPACT_RANGE_MEDIA_QUERY = \"(max-width: 899px)\";\n\nexport const matchesCompactRangeLayout = (): boolean => {\n  if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n    return false;\n  }\n  return window.matchMedia(COMPACT_RANGE_MEDIA_QUERY).matches;\n};\n","import { format, isValid, parse, startOfDay } from \"date-fns\";\nimport {\n  dateOnlyIfNeeded,\n  effectiveOutputFormat,\n  isSelectable,\n  mergeLocale,\n  shouldShowTimeOn,\n} from \"../utils\";\nimport type { CalendarMode, CalendarOptions } from \"../types\";\n\nexport interface InputControllerDeps {\n  getOptions: () => CalendarOptions;\n  getMode: () => CalendarMode;\n  getSelected: () => Date | null;\n  getInputSingleValue: () => Date | null;\n  setSelected: (d: Date | null) => void;\n  getRangeStart: () => Date | null;\n  setRangeStart: (d: Date | null) => void;\n  getRangeEnd: () => Date | null;\n  setRangeEnd: (d: Date | null) => void;\n  getViewYear: () => number;\n  setViewYear: (y: number) => void;\n  getViewMonth: () => number;\n  setViewMonth: (m: number) => void;\n  clearRangeHover: () => void;\n  syncCommittedRange: () => void;\n  emitSingle: () => void;\n  emitRange: () => void;\n  render: () => void;\n}\n\nexport interface InputController {\n  syncInputFromState: () => void;\n  applyInputMode: () => void;\n  commitTypedInput: () => boolean;\n  onInputBlur: () => void;\n}\n\nexport const createInputController = (\n  valueInput: HTMLInputElement,\n  deps: InputControllerDeps,\n): InputController => {\n  let syncingInput = false;\n\n  const allowInputOn = (): boolean => deps.getOptions().allowInput ?? false;\n\n  const formatSingleForInput = (d: Date | null): string => {\n    if (!d) return \"\";\n    return format(dateOnlyIfNeeded(deps.getOptions(), d), effectiveOutputFormat(deps.getOptions()));\n  };\n\n  const formatRangeForInput = (): string => {\n    const options = deps.getOptions();\n    const sep = options.rangeOutputSeparator ?? \" — \";\n    const fmt = effectiveOutputFormat(options);\n    const rangeStart = deps.getRangeStart();\n    const rangeEnd = deps.getRangeEnd();\n    if (!rangeStart) return \"\";\n    const start = format(dateOnlyIfNeeded(options, rangeStart), fmt);\n    if (!rangeEnd) return `${start} …`;\n    const end = format(dateOnlyIfNeeded(options, rangeEnd), fmt);\n    return `${start}${sep}${end}`;\n  };\n\n  const inputPlaceholderFor = (): string => {\n    const options = deps.getOptions();\n    const locale = mergeLocale(options.locale);\n    if (deps.getMode() === \"range\") {\n      return locale.rangeInputPlaceholder ?? locale.inputPlaceholder ?? \"Select date range\";\n    }\n    return locale.inputPlaceholder ?? \"Select date\";\n  };\n\n  const syncInputPlaceholder = (): void => {\n    valueInput.placeholder = inputPlaceholderFor();\n  };\n\n  const syncInputFromState = (): void => {\n    syncingInput = true;\n    valueInput.value =\n      deps.getMode() === \"range\"\n        ? formatRangeForInput()\n        : formatSingleForInput(deps.getInputSingleValue());\n    syncInputPlaceholder();\n    syncingInput = false;\n  };\n\n  const applyInputMode = (): void => {\n    valueInput.readOnly = !allowInputOn();\n  };\n\n  const tryParseDate = (text: string, ref: Date): Date | null => {\n    const trimmed = text.trim();\n    if (!trimmed) return null;\n    try {\n      const d = parse(trimmed, effectiveOutputFormat(deps.getOptions()), ref);\n      return isValid(d) ? d : null;\n    } catch {\n      return null;\n    }\n  };\n\n  const applyParsedSingle = (d: Date): boolean => {\n    const options = deps.getOptions();\n    const normalized = dateOnlyIfNeeded(options, d);\n    if (\n      !isSelectable(\n        normalized,\n        options.minDate ?? null,\n        options.maxDate ?? null,\n        options.enabledDatesOnly ? undefined : options.disabledDates,\n        options.enabledDatesOnly,\n      )\n    ) {\n      return false;\n    }\n    deps.setSelected(shouldShowTimeOn(options) ? d : startOfDay(d));\n    deps.setViewYear(deps.getSelected()!.getFullYear());\n    deps.setViewMonth(deps.getSelected()!.getMonth());\n    return true;\n  };\n\n  const commitTypedInput = (): boolean => {\n    if (syncingInput || !allowInputOn()) return false;\n    const options = deps.getOptions();\n    const text = valueInput.value;\n    const ref = deps.getSelected() ?? deps.getRangeStart() ?? new Date();\n\n    if (deps.getMode() === \"range\") {\n      const sep = options.rangeOutputSeparator ?? \" — \";\n      const trimmed = text.trim();\n      if (!trimmed) {\n        deps.clearRangeHover();\n        deps.setRangeStart(null);\n        deps.setRangeEnd(null);\n        deps.syncCommittedRange();\n        deps.emitRange();\n        deps.render();\n        return true;\n      }\n      const parts = trimmed.split(sep);\n      const start = tryParseDate(parts[0] ?? \"\", ref);\n      if (!start) {\n        syncInputFromState();\n        return false;\n      }\n      let end: Date | null = null;\n      const endPart = (parts[1] ?? \"\").trim();\n      if (endPart && endPart !== \"…\") {\n        end = tryParseDate(endPart, ref);\n        if (!end) {\n          syncInputFromState();\n          return false;\n        }\n      }\n      const startNorm = dateOnlyIfNeeded(options, start);\n      const endNorm = end ? dateOnlyIfNeeded(options, end) : null;\n      if (\n        !isSelectable(\n          startNorm,\n          options.minDate ?? null,\n          options.maxDate ?? null,\n          options.enabledDatesOnly ? undefined : options.disabledDates,\n          options.enabledDatesOnly,\n        )\n      ) {\n        syncInputFromState();\n        return false;\n      }\n      if (\n        endNorm &&\n        !isSelectable(\n          endNorm,\n          options.minDate ?? null,\n          options.maxDate ?? null,\n          options.enabledDatesOnly ? undefined : options.disabledDates,\n          options.enabledDatesOnly,\n        )\n      ) {\n        syncInputFromState();\n        return false;\n      }\n      deps.clearRangeHover();\n      deps.setRangeStart(shouldShowTimeOn(options) ? start : startOfDay(start));\n      deps.setRangeEnd(end ? (shouldShowTimeOn(options) ? end : startOfDay(end)) : null);\n      if (deps.getRangeStart()) {\n        deps.setViewYear(deps.getRangeStart()!.getFullYear());\n        deps.setViewMonth(deps.getRangeStart()!.getMonth());\n      }\n      deps.syncCommittedRange();\n      deps.emitRange();\n      deps.render();\n      return true;\n    }\n\n    const trimmed = text.trim();\n    if (!trimmed) {\n      deps.setSelected(null);\n      deps.emitSingle();\n      deps.render();\n      return true;\n    }\n    const parsed = tryParseDate(trimmed, ref);\n    if (!parsed || !applyParsedSingle(parsed)) {\n      syncInputFromState();\n      return false;\n    }\n    deps.emitSingle();\n    deps.render();\n    return true;\n  };\n\n  const onInputBlur = (): void => {\n    commitTypedInput();\n  };\n\n  return {\n    syncInputFromState,\n    applyInputMode,\n    commitTypedInput,\n    onInputBlur,\n  };\n};\n","import { compareAsc, startOfDay } from \"date-fns\";\nimport { applyHM, setHM } from \"../time\";\nimport { shouldShowTimeOn } from \"../utils\";\nimport type { CustomSelectControl } from \"../dom/customSelect\";\nimport type { CalendarDomElements } from \"../dom/types\";\nimport type { CalendarCallbacks, CalendarState } from \"./ctx\";\n\nexport type DayClickDeps = {\n  s: CalendarState;\n  dom: CalendarDomElements;\n  mode: () => string;\n  use12Hour: () => boolean;\n  minuteStepOn: () => number;\n  usesApplyActions: () => boolean;\n  secondForSingle: () => CustomSelectControl | null;\n  secondForStart: () => CustomSelectControl | null;\n  secondForEnd: () => CustomSelectControl | null;\n  cb: CalendarCallbacks;\n};\n\nexport function createDayClickHandler({\n  s,\n  dom,\n  mode,\n  use12Hour,\n  minuteStepOn,\n  usesApplyActions,\n  secondForSingle,\n  secondForStart,\n  secondForEnd,\n  cb,\n}: DayClickDeps): (_dayDate: Date, cellYear: number, cellMonth: number, dayNum: number) => void {\n  return function onDayClick(\n    _dayDate: Date,\n    cellYear: number,\n    cellMonth: number,\n    dayNum: number,\n  ): void {\n    s.activeDate = new Date(cellYear, cellMonth, dayNum);\n    if (mode() === \"single\") {\n      const dayOnly = new Date(cellYear, cellMonth, dayNum, 0, 0, 0, 0);\n      s.selected = shouldShowTimeOn(s.options)\n        ? applyHM(\n            dayOnly,\n            dom.timeSingle.hour,\n            dom.timeSingle.minute,\n            dom.timeSingle.meridiem,\n            secondForSingle(),\n            use12Hour(),\n          )\n        : dayOnly;\n      if (!usesApplyActions()) {\n        cb.emitSingle();\n        if (s.options.hideOnSingleSelect ?? true) {\n          cb.hidePanel();\n        }\n      }\n    } else {\n      const clicked = new Date(cellYear, cellMonth, dayNum, 0, 0, 0, 0);\n      if (!s.rangeStart || (s.rangeStart && s.rangeEnd)) {\n        s.rangeStart = shouldShowTimeOn(s.options)\n          ? applyHM(\n              clicked,\n              dom.timeRangeStart.hour,\n              dom.timeRangeStart.minute,\n              dom.timeRangeStart.meridiem,\n              secondForStart(),\n              use12Hour(),\n            )\n          : clicked;\n        s.rangeEnd = null;\n        s.rangeHoverEnd = startOfDay(s.rangeStart);\n        setHM(\n          dom.timeRangeEnd.hour,\n          dom.timeRangeEnd.minute,\n          dom.timeRangeEnd.meridiem,\n          secondForEnd(),\n          s.rangeStart,\n          use12Hour(),\n          minuteStepOn(),\n        );\n      } else {\n        cb.clearRangeHover();\n        const d0 = startOfDay(s.rangeStart);\n        const d1 = startOfDay(clicked);\n        let lo = d0;\n        let hi = d1;\n        if (compareAsc(lo, hi) > 0) {\n          const t = lo;\n          lo = hi;\n          hi = t;\n        }\n        s.rangeStart = shouldShowTimeOn(s.options)\n          ? applyHM(\n              lo,\n              dom.timeRangeStart.hour,\n              dom.timeRangeStart.minute,\n              dom.timeRangeStart.meridiem,\n              secondForStart(),\n              use12Hour(),\n            )\n          : lo;\n        s.rangeEnd = shouldShowTimeOn(s.options)\n          ? applyHM(\n              hi,\n              dom.timeRangeEnd.hour,\n              dom.timeRangeEnd.minute,\n              dom.timeRangeEnd.meridiem,\n              secondForEnd(),\n              use12Hour(),\n            )\n          : hi;\n      }\n    }\n    cb.render();\n  };\n}\n","import { dateOnlyIfNeeded, shouldShowTimeOn } from \"../utils\";\nimport { orderDateTimeRange } from \"../utils/range\";\nimport type { CalendarMode } from \"../types\";\nimport type { CalendarCallbacks, CalendarState } from \"./ctx\";\n\nexport type Emitters = {\n  syncCommittedSingle: () => void;\n  syncCommittedRange: () => void;\n  emitSingle: () => void;\n  emitRange: () => void;\n  clearSelection: () => void;\n};\n\nexport function createEmitters(\n  s: CalendarState,\n  mode: () => CalendarMode,\n  usesApplyActions: () => boolean,\n  cb: CalendarCallbacks,\n): Emitters {\n  function syncCommittedSingle(): void {\n    s.committedSelected = s.selected ? new Date(s.selected.getTime()) : null;\n  }\n\n  function normalizeRangeSelection(): void {\n    if (!shouldShowTimeOn(s.options) || !s.rangeStart || !s.rangeEnd) return;\n    const ordered = orderDateTimeRange(s.rangeStart, s.rangeEnd);\n    s.rangeStart = ordered.start;\n    s.rangeEnd = ordered.end;\n  }\n\n  function syncCommittedRange(): void {\n    normalizeRangeSelection();\n    s.committedRangeStart = s.rangeStart ? new Date(s.rangeStart.getTime()) : null;\n    s.committedRangeEnd = s.rangeEnd ? new Date(s.rangeEnd.getTime()) : null;\n  }\n\n  function emitSingle(): void {\n    if (usesApplyActions()) {\n      syncCommittedSingle();\n    }\n    if (!s.selected) {\n      s.options.onChange?.(null);\n      s.inputController.syncInputFromState();\n      return;\n    }\n    s.options.onChange?.(new Date(dateOnlyIfNeeded(s.options, s.selected).getTime()));\n    s.inputController.syncInputFromState();\n  }\n\n  function emitRange(): void {\n    normalizeRangeSelection();\n    s.options.onRangeChange?.({\n      start: s.rangeStart ? new Date(dateOnlyIfNeeded(s.options, s.rangeStart).getTime()) : null,\n      end: s.rangeEnd ? new Date(dateOnlyIfNeeded(s.options, s.rangeEnd).getTime()) : null,\n    });\n    s.inputController.syncInputFromState();\n  }\n\n  function clearSelection(): void {\n    cb.clearRangeHover();\n    if (mode() === \"single\") {\n      s.selected = null;\n      emitSingle();\n    } else {\n      s.rangeStart = null;\n      s.rangeEnd = null;\n      syncCommittedRange();\n      emitRange();\n    }\n    cb.render();\n  }\n\n  return { syncCommittedSingle, syncCommittedRange, emitSingle, emitRange, clearSelection };\n}\n","import { addDays, addMonths, addYears, startOfDay } from \"date-fns\";\n\n/** Keys handled by the day-grid roving-tabindex navigation. */\nconst GRID_NAV_KEYS = new Set([\n  \"ArrowLeft\",\n  \"ArrowRight\",\n  \"ArrowUp\",\n  \"ArrowDown\",\n  \"Home\",\n  \"End\",\n  \"PageUp\",\n  \"PageDown\",\n]);\n\nconst isGridNavKey = (key: string): boolean => GRID_NAV_KEYS.has(key);\n\n/**\n * Given the currently focused day and a navigation key, return the day focus\n * should move to. Returns `null` when the key is not a navigation key.\n *\n * - Arrow keys move by day (±1) or week (±7).\n * - Home/End jump to the start/end of the current week (honouring the locale's\n *   first day of week).\n * - PageUp/PageDown move by month, or by year when Shift is held.\n */\nconst nextActiveDate = (\n  key: string,\n  shiftKey: boolean,\n  active: Date,\n  firstDayOfWeek: number,\n): Date | null => {\n  const base = startOfDay(active);\n  const weekStartOffset = (base.getDay() - (firstDayOfWeek % 7) + 7) % 7;\n  switch (key) {\n    case \"ArrowLeft\":\n      return addDays(base, -1);\n    case \"ArrowRight\":\n      return addDays(base, 1);\n    case \"ArrowUp\":\n      return addDays(base, -7);\n    case \"ArrowDown\":\n      return addDays(base, 7);\n    case \"Home\":\n      return addDays(base, -weekStartOffset);\n    case \"End\":\n      return addDays(base, 6 - weekStartOffset);\n    case \"PageUp\":\n      return shiftKey ? addYears(base, -1) : addMonths(base, -1);\n    case \"PageDown\":\n      return shiftKey ? addYears(base, 1) : addMonths(base, 1);\n    default:\n      return null;\n  }\n};\n\nexport { GRID_NAV_KEYS, isGridNavKey, nextActiveDate };\n","import { addMonths, startOfDay } from \"date-fns\";\nimport { isGridNavKey, nextActiveDate } from \"../render/gridKeyboard\";\nimport { compareCalendarDay, mergeLocale, toISODate } from \"../utils\";\nimport type { CalendarDomElements } from \"../dom/types\";\nimport type { CalendarPopover } from \"../popover\";\nimport type { CalendarCallbacks, CalendarState } from \"./ctx\";\n\nconst monthIdx = (year: number, month: number): number => year * 12 + month;\n\nexport type GridNavDeps = {\n  s: CalendarState;\n  dom: CalendarDomElements;\n  mode: () => string;\n  isCompactRangeLayout: () => boolean;\n  getPopover: () => CalendarPopover | null;\n  cb: CalendarCallbacks;\n};\n\nexport type GridNav = {\n  focusActiveDay: () => void;\n  revealActiveDate: (date: Date) => void;\n  onGridKeydown: (e: KeyboardEvent) => void;\n};\n\nexport function createGridNav({\n  s,\n  dom,\n  mode,\n  isCompactRangeLayout,\n  getPopover,\n  cb,\n}: GridNavDeps): GridNav {\n  function focusActiveDay(): void {\n    const selector = `button.cal__day[data-date=\"${toISODate(s.activeDate)}\"]`;\n    const btn =\n      dom.grid.querySelector<HTMLButtonElement>(selector) ??\n      dom.gridRight.querySelector<HTMLButtonElement>(selector);\n    btn?.focus();\n  }\n\n  function revealActiveDate(date: Date): void {\n    const compactRange = isCompactRangeLayout();\n    const left = monthIdx(s.viewYear, s.viewMonth);\n    const target = monthIdx(date.getFullYear(), date.getMonth());\n    const isVisible =\n      mode() !== \"range\" || compactRange ? target === left : target === left || target === left + 1;\n    if (isVisible) return;\n    const twoPane = mode() === \"range\" && !compactRange;\n    if (twoPane && target > left) {\n      const leftDate = addMonths(new Date(date.getFullYear(), date.getMonth(), 1), -1);\n      s.viewYear = leftDate.getFullYear();\n      s.viewMonth = leftDate.getMonth();\n    } else {\n      s.viewYear = date.getFullYear();\n      s.viewMonth = date.getMonth();\n    }\n  }\n\n  function onGridKeydown(e: KeyboardEvent): void {\n    if (e.key === \"Escape\" && getPopover()) {\n      e.preventDefault();\n      cb.hidePanel();\n      return;\n    }\n    if (!isGridNavKey(e.key)) return;\n    const locale = mergeLocale(s.options.locale);\n    const candidate = nextActiveDate(e.key, e.shiftKey, s.activeDate, locale.firstDayOfWeek);\n    if (!candidate) return;\n    e.preventDefault();\n    const next = startOfDay(candidate);\n    if (s.options.minDate && compareCalendarDay(next, s.options.minDate) < 0) return;\n    if (s.options.maxDate && compareCalendarDay(next, s.options.maxDate) > 0) return;\n    cb.clearRangeHover();\n    s.activeDate = next;\n    revealActiveDate(next);\n    cb.render();\n    focusActiveDay();\n  }\n\n  return { focusActiveDay, revealActiveDate, onGridKeydown };\n}\n","import { compareAsc, isSameDay, startOfDay } from \"date-fns\";\nimport type { RangePreset } from \"../types\";\n\nexport const normalizePresetRange = (\n  preset: RangePreset,\n  showTime: boolean,\n): { start: Date; end: Date } => {\n  let start = new Date(preset.start.getTime());\n  let end = new Date(preset.end.getTime());\n  if (!showTime) {\n    start = startOfDay(start);\n    end = startOfDay(end);\n  }\n  if (compareAsc(start, end) > 0) {\n    return { start: end, end: start };\n  }\n  return { start, end };\n};\n\nexport const presetMatchesRange = (\n  preset: RangePreset,\n  start: Date | null,\n  end: Date | null,\n  showTime: boolean,\n): boolean => {\n  if (!start || !end) return false;\n  const normalized = normalizePresetRange(preset, showTime);\n  if (showTime) {\n    return (\n      start.getTime() === normalized.start.getTime() && end.getTime() === normalized.end.getTime()\n    );\n  }\n  return isSameDay(start, normalized.start) && isSameDay(end, normalized.end);\n};\n\nexport const findMatchingPresetIndex = (\n  presets: readonly RangePreset[],\n  start: Date | null,\n  end: Date | null,\n  showTime: boolean,\n): number | null => {\n  for (let index = 0; index < presets.length; index += 1) {\n    if (presetMatchesRange(presets[index], start, end, showTime)) return index;\n  }\n  return null;\n};\n\nexport const DESKTOP_RANGE_PRESETS_MEDIA_QUERY = \"(min-width: 900px)\";\n\nexport const shouldShowRangePresetsPanel = (\n  isRangeMode: boolean,\n  presets: readonly RangePreset[] | undefined,\n): boolean => {\n  if (!isRangeMode || !presets?.length) return false;\n  if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n    return true;\n  }\n  return window.matchMedia(DESKTOP_RANGE_PRESETS_MEDIA_QUERY).matches;\n};\n","import type { RangePreset, RangePresetsConfig } from \"../types\";\n\nexport const renderRangePresetsPanel = (\n  nav: HTMLElement,\n  config: RangePresetsConfig,\n  activeIndex: number | null,\n  onSelect: (index: number) => void,\n): void => {\n  nav.replaceChildren();\n  config.presets.forEach((preset: RangePreset, index: number) => {\n    const button = document.createElement(\"button\");\n    button.type = \"button\";\n    button.className = \"cal__range-preset\";\n    if (index === activeIndex) {\n      button.classList.add(\"cal__range-preset--active\");\n    }\n    button.textContent = preset.caption;\n    button.addEventListener(\"click\", () => {\n      onSelect(index);\n    });\n    nav.append(button);\n  });\n};\n","import { findMatchingPresetIndex, shouldShowRangePresetsPanel } from \"../range/rangePresets\";\nimport { renderRangePresetsPanel } from \"../render/rangePresetsPanel\";\nimport { mergeLocale, shouldShowTimeOn } from \"../utils\";\nimport type { CalendarDomElements } from \"../dom/types\";\nimport type { CalendarState } from \"./ctx\";\n\nexport type LayoutHelpersDeps = {\n  s: CalendarState;\n  dom: CalendarDomElements;\n  mode: () => string;\n  isCompactRangeLayout: () => boolean;\n  applyRangePreset: (index: number) => void;\n};\n\nexport type LayoutHelpers = {\n  layoutCompactRangePanes: () => void;\n  layoutRangeHeaders: () => void;\n  syncRangeActionLabels: () => void;\n  updateResetVisibility: () => void;\n  syncRangePresetsPanel: () => void;\n};\n\nexport function createLayoutHelpers({\n  s,\n  dom,\n  mode,\n  isCompactRangeLayout,\n  applyRangePreset,\n}: LayoutHelpersDeps): LayoutHelpers {\n  function layoutCompactRangePanes(): void {\n    const compact = isCompactRangeLayout();\n    if (compact) {\n      if (!dom.paneLeft.contains(dom.timeWrapRangeEnd)) {\n        dom.paneLeft.append(dom.timeWrapRangeEnd);\n      }\n      return;\n    }\n    if (mode() === \"range\" && !dom.paneRight.contains(dom.timeWrapRangeEnd)) {\n      dom.paneRight.append(dom.timeWrapRangeEnd);\n    }\n  }\n\n  function layoutRangeHeaders(): void {\n    const isRange = mode() === \"range\";\n    const compact = isCompactRangeLayout();\n    if (isRange && !compact) {\n      if (dom.btnNext.parentElement !== dom.headerRight) {\n        dom.headerRight.append(dom.btnNext);\n      }\n      dom.header.classList.add(\"cal__header--range-start\");\n      dom.headerRight.classList.add(\"cal__header--range-end\");\n      return;\n    }\n    if (dom.btnNext.parentElement !== dom.header) {\n      dom.header.insertBefore(dom.btnNext, dom.btnReset);\n    }\n    dom.header.classList.remove(\"cal__header--range-start\");\n    dom.headerRight.classList.remove(\"cal__header--range-end\");\n  }\n\n  function syncRangeActionLabels(): void {\n    const locale = mergeLocale(s.options.locale);\n    dom.btnCancelRange.textContent = locale.rangeCancel ?? \"Cancel\";\n    dom.btnApplyRange.textContent = locale.rangeApply ?? \"Apply\";\n  }\n\n  function updateResetVisibility(): void {\n    const visible = s.options.showResetButton ?? false;\n    dom.btnReset.hidden = !visible;\n    if (visible) {\n      const label = s.options.resetInputLabel ?? \"Reset\";\n      dom.btnReset.setAttribute(\"aria-label\", label);\n      dom.btnReset.title = label;\n    }\n  }\n\n  function syncRangePresetsPanel(): void {\n    const config = s.options.rangePresets;\n    const visible = shouldShowRangePresetsPanel(mode() === \"range\", config?.presets);\n    dom.rangePresets.hidden = !visible;\n    dom.root.classList.toggle(\"cal--range-presets\", visible);\n    dom.root.classList.toggle(\"cal--range-presets-right\", visible && config?.position === \"right\");\n    if (!visible || !config) {\n      dom.rangePresets.replaceChildren();\n      return;\n    }\n    const activeIndex = findMatchingPresetIndex(\n      config.presets,\n      s.rangeStart,\n      s.rangeEnd,\n      shouldShowTimeOn(s.options),\n    );\n    renderRangePresetsPanel(dom.rangePresets, config, activeIndex, applyRangePreset);\n  }\n\n  return {\n    layoutCompactRangePanes,\n    layoutRangeHeaders,\n    syncRangeActionLabels,\n    updateResetVisibility,\n    syncRangePresetsPanel,\n  };\n}\n","import { startOfDay } from \"date-fns\";\nimport { compareCalendarDay } from \"./utils\";\nimport type { CalendarMode } from \"./types\";\n\nexport const canGoPrevMonth = (\n  viewYear: number,\n  viewMonth: number,\n  minDate: Date | null | undefined,\n): boolean => {\n  if (!minDate) return true;\n  const prev = new Date(viewYear, viewMonth - 1, 1);\n  const minM = startOfDay(minDate);\n  return compareCalendarDay(prev, new Date(minM.getFullYear(), minM.getMonth(), 1)) >= 0;\n};\n\nexport const canGoNextMonth = (\n  viewYear: number,\n  viewMonth: number,\n  maxDate: Date | null | undefined,\n  mode: CalendarMode,\n  compactRange = false,\n): boolean => {\n  if (!maxDate) return true;\n  const nextShift = mode === \"range\" && !compactRange ? 2 : 1;\n  const next = new Date(viewYear, viewMonth + nextShift, 1);\n  const maxM = startOfDay(maxDate);\n  return compareCalendarDay(next, new Date(maxM.getFullYear(), maxM.getMonth(), 1)) <= 0;\n};\n","import { addMonths } from \"date-fns\";\nimport { mergeLocale } from \"../utils\";\nimport type { CustomSelectControl } from \"../dom/customSelect\";\nimport type { CalendarOptions } from \"../types\";\n\nexport const parseYearInput = (text: string): number | null => {\n  const trimmed = text.trim();\n  if (!/^\\d{1,4}$/.test(trimmed)) return null;\n  const year = Number.parseInt(trimmed, 10);\n  if (!Number.isFinite(year) || year < 1 || year > 9999) return null;\n  return year;\n};\n\nexport const clampYear = (year: number, options: CalendarOptions): number => {\n  let y = year;\n  if (options.minDate) y = Math.max(y, options.minDate.getFullYear());\n  if (options.maxDate) y = Math.min(y, options.maxDate.getFullYear());\n  return y;\n};\n\nexport const restoreYearInput = (\n  input: HTMLInputElement,\n  viewYear: number,\n  viewMonth: number,\n  forRightPane: boolean,\n): void => {\n  if (forRightPane) {\n    const rightView = addMonths(new Date(viewYear, viewMonth, 1), 1);\n    input.value = String(rightView.getFullYear());\n    return;\n  }\n  input.value = String(viewYear);\n};\n\nexport const fillMonthYearSelects = (\n  monthSelect: CustomSelectControl,\n  monthSelectRight: CustomSelectControl,\n  viewYear: number,\n  viewMonth: number,\n  options: CalendarOptions,\n): void => {\n  const locale = mergeLocale(options.locale);\n  const monthOptions = Array.from({ length: 12 }, (_, monthIndex) => ({\n    value: String(monthIndex),\n    label: locale.months.longhand[monthIndex] ?? String(monthIndex),\n  }));\n  monthSelect.setOptions(monthOptions);\n  monthSelect.value = String(viewMonth);\n  monthSelectRight.setOptions(monthOptions);\n  const rightView = addMonths(new Date(viewYear, viewMonth, 1), 1);\n  monthSelectRight.value = String(rightView.getMonth());\n};\n\nexport const syncYearInputs = (\n  yearInput: HTMLInputElement,\n  yearInputRight: HTMLInputElement,\n  viewYear: number,\n  viewMonth: number,\n): void => {\n  if (document.activeElement !== yearInput) {\n    yearInput.value = String(viewYear);\n  }\n  const rightView = addMonths(new Date(viewYear, viewMonth, 1), 1);\n  if (document.activeElement !== yearInputRight) {\n    yearInputRight.value = String(rightView.getFullYear());\n  }\n};\n","import { addMonths, compareAsc, startOfDay } from \"date-fns\";\nimport { canGoNextMonth, canGoPrevMonth } from \"../navigation\";\nimport { clampYear, parseYearInput, restoreYearInput } from \"../render/monthYear\";\nimport { applyHM } from \"../time\";\nimport { orderDateTimeRange, shouldShowTimeOn } from \"../utils\";\nimport type { CustomSelectControl } from \"../dom/customSelect\";\nimport type { CalendarDomElements } from \"../dom/types\";\nimport type { CalendarMode } from \"../types\";\nimport type { CalendarCallbacks, CalendarState } from \"./ctx\";\nimport type { Emitters } from \"./emitters\";\n\nexport type NavigationHandlersDeps = {\n  s: CalendarState;\n  dom: CalendarDomElements;\n  mode: () => CalendarMode;\n  use12Hour: () => boolean;\n  usesApplyActions: () => boolean;\n  secondForSingle: () => CustomSelectControl | null;\n  secondForStart: () => CustomSelectControl | null;\n  secondForEnd: () => CustomSelectControl | null;\n  emitters: Emitters;\n  cb: CalendarCallbacks;\n};\n\nexport function attachNavigationHandlers({\n  s,\n  dom,\n  mode,\n  use12Hour,\n  usesApplyActions,\n  secondForSingle,\n  secondForStart,\n  secondForEnd,\n  emitters,\n  cb,\n}: NavigationHandlersDeps): void {\n  function commitYearInput(input: HTMLInputElement, forRightPane: boolean): void {\n    if (s.syncingYearInput) return;\n    const parsed = parseYearInput(input.value);\n    if (parsed === null) {\n      restoreYearInput(input, s.viewYear, s.viewMonth, forRightPane);\n      return;\n    }\n    cb.clearRangeHover();\n    const year = clampYear(parsed, s.options);\n    if (forRightPane) {\n      const nextMonth = Number.parseInt(dom.monthSelectRight.value, 10);\n      const left = addMonths(new Date(year, nextMonth, 1), -1);\n      s.viewYear = left.getFullYear();\n      s.viewMonth = left.getMonth();\n    } else {\n      s.viewYear = year;\n    }\n    cb.render();\n  }\n\n  dom.btnPrev.addEventListener(\"click\", (): void => {\n    if (!canGoPrevMonth(s.viewYear, s.viewMonth, s.options.minDate)) return;\n    cb.clearRangeHover();\n    if (s.viewMonth === 0) {\n      s.viewMonth = 11;\n      s.viewYear -= 1;\n    } else {\n      s.viewMonth -= 1;\n    }\n    cb.render();\n  });\n\n  dom.btnNext.addEventListener(\"click\", (): void => {\n    if (!canGoNextMonth(s.viewYear, s.viewMonth, s.options.maxDate, mode())) return;\n    cb.clearRangeHover();\n    if (s.viewMonth === 11) {\n      s.viewMonth = 0;\n      s.viewYear += 1;\n    } else {\n      s.viewMonth += 1;\n    }\n    cb.render();\n  });\n\n  dom.btnReset.addEventListener(\"click\", (): void => {\n    emitters.clearSelection();\n    cb.hidePanel();\n  });\n\n  dom.btnApplyRange.addEventListener(\"click\", (): void => {\n    if (mode() === \"single\" && usesApplyActions()) {\n      if (!s.selected) return;\n      s.selected = applyHM(\n        s.selected,\n        dom.timeSingle.hour,\n        dom.timeSingle.minute,\n        dom.timeSingle.meridiem,\n        secondForSingle(),\n        use12Hour(),\n      );\n      emitters.emitSingle();\n      if (s.options.hideOnSingleSelect ?? true) {\n        cb.hidePanel();\n      }\n      cb.render();\n      return;\n    }\n    if (mode() !== \"range\") return;\n    const hoverAtApply = s.rangeHoverEnd ? new Date(s.rangeHoverEnd.getTime()) : null;\n    if (s.rangeStart && !s.rangeEnd && hoverAtApply) {\n      const d0 = startOfDay(s.rangeStart);\n      const d1 = startOfDay(hoverAtApply);\n      let lo = d0;\n      let hi = d1;\n      if (compareAsc(lo, hi) > 0) {\n        const t = lo;\n        lo = hi;\n        hi = t;\n      }\n      s.rangeStart = shouldShowTimeOn(s.options)\n        ? applyHM(\n            lo,\n            dom.timeRangeStart.hour,\n            dom.timeRangeStart.minute,\n            dom.timeRangeStart.meridiem,\n            secondForStart(),\n            use12Hour(),\n          )\n        : lo;\n      s.rangeEnd = shouldShowTimeOn(s.options)\n        ? applyHM(\n            hi,\n            dom.timeRangeEnd.hour,\n            dom.timeRangeEnd.minute,\n            dom.timeRangeEnd.meridiem,\n            secondForEnd(),\n            use12Hour(),\n          )\n        : hi;\n    }\n    if (shouldShowTimeOn(s.options) && s.rangeStart && s.rangeEnd) {\n      s.rangeStart = applyHM(\n        s.rangeStart,\n        dom.timeRangeStart.hour,\n        dom.timeRangeStart.minute,\n        dom.timeRangeStart.meridiem,\n        secondForStart(),\n        use12Hour(),\n      );\n      s.rangeEnd = applyHM(\n        s.rangeEnd,\n        dom.timeRangeEnd.hour,\n        dom.timeRangeEnd.minute,\n        dom.timeRangeEnd.meridiem,\n        secondForEnd(),\n        use12Hour(),\n      );\n      const ordered = orderDateTimeRange(s.rangeStart, s.rangeEnd);\n      s.rangeStart = ordered.start;\n      s.rangeEnd = ordered.end;\n    }\n    cb.clearRangeHover();\n    emitters.syncCommittedRange();\n    emitters.emitRange();\n    cb.hidePanel();\n    cb.render();\n  });\n\n  dom.btnCancelRange.addEventListener(\"click\", (): void => {\n    if (mode() === \"single\" && usesApplyActions()) {\n      s.selected = s.committedSelected ? new Date(s.committedSelected.getTime()) : null;\n      cb.hidePanel();\n      cb.render();\n      return;\n    }\n    if (mode() !== \"range\") return;\n    cb.clearRangeHover();\n    s.rangeStart = s.committedRangeStart ? new Date(s.committedRangeStart.getTime()) : null;\n    s.rangeEnd = s.committedRangeEnd ? new Date(s.committedRangeEnd.getTime()) : null;\n    cb.hidePanel();\n    cb.render();\n  });\n\n  dom.monthSelect.addEventListener(\"change\", (): void => {\n    cb.clearRangeHover();\n    s.viewMonth = Number.parseInt(dom.monthSelect.value, 10);\n    cb.render();\n  });\n\n  dom.yearInput.addEventListener(\"blur\", (): void => {\n    commitYearInput(dom.yearInput, false);\n  });\n  dom.yearInput.addEventListener(\"keydown\", (e): void => {\n    if (e.key !== \"Enter\") return;\n    e.preventDefault();\n    commitYearInput(dom.yearInput, false);\n    dom.yearInput.blur();\n  });\n\n  dom.monthSelectRight.addEventListener(\"change\", (): void => {\n    cb.clearRangeHover();\n    const nextMonth = Number.parseInt(dom.monthSelectRight.value, 10);\n    const parsedYear = parseYearInput(dom.yearInputRight.value);\n    if (parsedYear === null) {\n      restoreYearInput(dom.yearInputRight, s.viewYear, s.viewMonth, true);\n      return;\n    }\n    const left = addMonths(new Date(clampYear(parsedYear, s.options), nextMonth, 1), -1);\n    s.viewYear = left.getFullYear();\n    s.viewMonth = left.getMonth();\n    cb.render();\n  });\n\n  dom.yearInputRight.addEventListener(\"blur\", (): void => {\n    commitYearInput(dom.yearInputRight, true);\n  });\n  dom.yearInputRight.addEventListener(\"keydown\", (e): void => {\n    if (e.key !== \"Enter\") return;\n    e.preventDefault();\n    commitYearInput(dom.yearInputRight, true);\n    dom.yearInputRight.blur();\n  });\n}\n","import { isValid, parse } from \"date-fns\";\n\nexport const coerceSetDateEntry = (\n  entry: Date | string | null | undefined,\n  formatStr: string,\n  ref: Date,\n): Date | null => {\n  if (entry == null) return null;\n  if (entry instanceof Date) {\n    return isValid(entry) ? new Date(entry.getTime()) : null;\n  }\n  const trimmed = entry.trim();\n  if (!trimmed) return null;\n  try {\n    const d = parse(trimmed, formatStr, ref);\n    return isValid(d) ? d : null;\n  } catch {\n    return null;\n  }\n};\n","import { addMonths, startOfDay } from \"date-fns\";\nimport { coerceSetDateEntry } from \"../setDate\";\nimport { cloneRange, dateOnlyIfNeeded, effectiveOutputFormat, shouldShowTimeOn } from \"../utils\";\nimport type { CalendarDomElements } from \"../dom/types\";\nimport type { CalendarPopover } from \"../popover\";\nimport type {\n  CalendarCurrentYear,\n  CalendarMode,\n  CalendarOptions,\n  CalendarPickerInstance,\n  CalendarSelectedDates,\n  CalendarSetDateInput,\n  DateRangeValue,\n} from \"../types\";\nimport type { CalendarCallbacks, CalendarState } from \"./ctx\";\nimport type { Emitters } from \"./emitters\";\n\nexport type PublicApiDeps = {\n  s: CalendarState;\n  dom: CalendarDomElements;\n  valueInput: HTMLInputElement;\n  popover: CalendarPopover | null;\n  rangePresetsMediaQuery: MediaQueryList | null;\n  compactRangeMediaQuery: MediaQueryList | null;\n  onRangePresetsLayoutChange: () => void;\n  onCompactRangeLayoutChange: () => void;\n  onInputKeydown: (e: KeyboardEvent) => void;\n  onGridKeydown: (e: KeyboardEvent) => void;\n  onGridMouseMove: (e: MouseEvent) => void;\n  onGridMouseLeave: () => void;\n  mode: () => CalendarMode;\n  usesApplyActions: () => boolean;\n  isCompactRangeLayout: () => boolean;\n  emitters: Emitters;\n  showPanel: () => void;\n  cb: CalendarCallbacks;\n};\n\nexport function createPublicApi({\n  s,\n  dom,\n  valueInput,\n  popover,\n  rangePresetsMediaQuery,\n  compactRangeMediaQuery,\n  onRangePresetsLayoutChange,\n  onCompactRangeLayoutChange,\n  onInputKeydown,\n  onGridKeydown,\n  onGridMouseMove,\n  onGridMouseLeave,\n  mode,\n  usesApplyActions,\n  isCompactRangeLayout,\n  emitters,\n  showPanel,\n  cb,\n}: PublicApiDeps): CalendarPickerInstance {\n  function applyTheme(theme?: string): void {\n    if (theme) {\n      dom.root.dataset.calTheme = theme;\n      valueInput.dataset.calTheme = theme;\n    } else {\n      delete dom.root.dataset.calTheme;\n      delete valueInput.dataset.calTheme;\n    }\n  }\n\n  function normalizeStoredDatesIfDateOnly(): void {\n    if (shouldShowTimeOn(s.options)) return;\n    if (mode() === \"single\") {\n      if (s.selected) s.selected = startOfDay(s.selected);\n    } else {\n      if (s.rangeStart) s.rangeStart = startOfDay(s.rangeStart);\n      if (s.rangeEnd) s.rangeEnd = startOfDay(s.rangeEnd);\n    }\n  }\n\n  function readSelectedDates(): CalendarSelectedDates {\n    if (mode() === \"single\") {\n      const value = usesApplyActions() ? s.committedSelected : s.selected;\n      return {\n        selectedDate: value ? new Date(dateOnlyIfNeeded(s.options, value).getTime()) : null,\n      };\n    }\n    return {\n      start: s.rangeStart ? new Date(dateOnlyIfNeeded(s.options, s.rangeStart).getTime()) : null,\n      end: s.rangeEnd ? new Date(dateOnlyIfNeeded(s.options, s.rangeEnd).getTime()) : null,\n    };\n  }\n\n  function readCurrentYear(): CalendarCurrentYear {\n    if (mode() === \"single\") {\n      return { currentYear: s.viewYear };\n    }\n    const rightView = addMonths(new Date(s.viewYear, s.viewMonth, 1), 1);\n    return {\n      startYear: s.viewYear,\n      endYear: isCompactRangeLayout() ? s.viewYear : rightView.getFullYear(),\n    };\n  }\n\n  return {\n    get selectedDates(): CalendarSelectedDates {\n      return readSelectedDates();\n    },\n    get currentYear(): CalendarCurrentYear {\n      return readCurrentYear();\n    },\n    changeMonth(months: number, relative = true): void {\n      cb.clearRangeHover();\n      if (relative) {\n        const next = addMonths(new Date(s.viewYear, s.viewMonth, 1), months);\n        s.viewYear = next.getFullYear();\n        s.viewMonth = next.getMonth();\n      } else {\n        s.viewMonth = Math.min(11, Math.max(0, Math.floor(months)));\n      }\n      cb.render();\n    },\n    clear(): void {\n      emitters.clearSelection();\n    },\n    getValue(): Date | null {\n      if (mode() !== \"single\") return null;\n      const value = usesApplyActions() ? s.committedSelected : s.selected;\n      if (!value) return null;\n      return new Date(dateOnlyIfNeeded(s.options, value).getTime());\n    },\n    setValue(date: Date | null): void {\n      if (mode() !== \"single\") return;\n      s.selected = date ? new Date(date.getTime()) : null;\n      if (s.selected && !shouldShowTimeOn(s.options)) {\n        s.selected = startOfDay(s.selected);\n      }\n      if (usesApplyActions()) {\n        emitters.syncCommittedSingle();\n      }\n      if (s.selected) {\n        s.viewYear = s.selected.getFullYear();\n        s.viewMonth = s.selected.getMonth();\n      }\n      cb.render();\n    },\n    setDate(newDate: CalendarSetDateInput, format?: string, silent = false): void {\n      cb.clearRangeHover();\n      const parseFormat = format ?? effectiveOutputFormat(s.options);\n      const ref = s.selected ?? s.rangeStart ?? new Date();\n\n      if (mode() === \"single\") {\n        const parsed =\n          newDate.length === 0 ? null : coerceSetDateEntry(newDate[0], parseFormat, ref);\n        s.selected = parsed ? new Date(parsed.getTime()) : null;\n        if (s.selected && !shouldShowTimeOn(s.options)) {\n          s.selected = startOfDay(s.selected);\n        }\n        if (usesApplyActions()) {\n          emitters.syncCommittedSingle();\n        }\n        if (s.selected) {\n          s.viewYear = s.selected.getFullYear();\n          s.viewMonth = s.selected.getMonth();\n        }\n        cb.render();\n        if (!silent) emitters.emitSingle();\n        return;\n      }\n\n      const startParsed =\n        newDate.length === 0 ? null : coerceSetDateEntry(newDate[0], parseFormat, ref);\n      const endParsed =\n        newDate.length < 2 ? null : coerceSetDateEntry(newDate[1], parseFormat, ref);\n      s.rangeStart = startParsed ? new Date(startParsed.getTime()) : null;\n      s.rangeEnd = endParsed ? new Date(endParsed.getTime()) : null;\n      if (!shouldShowTimeOn(s.options)) {\n        if (s.rangeStart) s.rangeStart = startOfDay(s.rangeStart);\n        if (s.rangeEnd) s.rangeEnd = startOfDay(s.rangeEnd);\n      }\n      const anchorDate = s.rangeStart ?? s.rangeEnd;\n      if (anchorDate) {\n        s.viewYear = anchorDate.getFullYear();\n        s.viewMonth = anchorDate.getMonth();\n      }\n      emitters.syncCommittedRange();\n      cb.render();\n      if (!silent) emitters.emitRange();\n    },\n    getRange(): DateRangeValue {\n      if (mode() === \"single\") {\n        return cloneRange({\n          start: s.selected ? dateOnlyIfNeeded(s.options, s.selected) : null,\n          end: null,\n        });\n      }\n      return cloneRange({\n        start: s.committedRangeStart ? dateOnlyIfNeeded(s.options, s.committedRangeStart) : null,\n        end: s.committedRangeEnd ? dateOnlyIfNeeded(s.options, s.committedRangeEnd) : null,\n      });\n    },\n    setRange(range: DateRangeValue): void {\n      cb.clearRangeHover();\n      if (mode() === \"single\") {\n        s.selected = range.start ? new Date(range.start.getTime()) : null;\n        if (s.selected && !shouldShowTimeOn(s.options)) {\n          s.selected = startOfDay(s.selected);\n        }\n        if (s.selected) {\n          s.viewYear = s.selected.getFullYear();\n          s.viewMonth = s.selected.getMonth();\n        }\n        cb.render();\n        return;\n      }\n      s.rangeStart = range.start ? new Date(range.start.getTime()) : null;\n      s.rangeEnd = range.end ? new Date(range.end.getTime()) : null;\n      if (!shouldShowTimeOn(s.options)) {\n        if (s.rangeStart) s.rangeStart = startOfDay(s.rangeStart);\n        if (s.rangeEnd) s.rangeEnd = startOfDay(s.rangeEnd);\n      }\n      const a = s.rangeStart ?? s.rangeEnd;\n      if (a) {\n        s.viewYear = a.getFullYear();\n        s.viewMonth = a.getMonth();\n      }\n      emitters.syncCommittedRange();\n      cb.render();\n    },\n    setOptions(partial: Partial<CalendarOptions>): void {\n      s.options = { ...s.options, ...partial };\n      if (partial.mode !== undefined || partial.range !== undefined) {\n        cb.clearRangeHover();\n      }\n      if (partial.mode !== undefined) {\n        if ((s.options.mode ?? \"single\") === \"single\") {\n          s.rangeStart = null;\n          s.rangeEnd = null;\n          s.committedRangeStart = null;\n          s.committedRangeEnd = null;\n          s.selected = s.options.value != null ? new Date(s.options.value.getTime()) : null;\n          if (s.selected && !shouldShowTimeOn(s.options)) {\n            s.selected = startOfDay(s.selected);\n          }\n          if (usesApplyActions()) {\n            emitters.syncCommittedSingle();\n          }\n          if (s.selected) {\n            s.viewYear = s.selected.getFullYear();\n            s.viewMonth = s.selected.getMonth();\n          }\n        } else {\n          s.selected = null;\n          s.rangeStart = s.options.range?.start ? new Date(s.options.range.start.getTime()) : null;\n          s.rangeEnd = s.options.range?.end ? new Date(s.options.range.end.getTime()) : null;\n          emitters.syncCommittedRange();\n          const a = s.rangeStart ?? s.rangeEnd;\n          if (a) {\n            s.viewYear = a.getFullYear();\n            s.viewMonth = a.getMonth();\n          }\n        }\n      }\n      if (partial.value !== undefined && mode() === \"single\") {\n        s.selected = partial.value === null ? null : new Date(partial.value.getTime());\n        if (usesApplyActions()) {\n          emitters.syncCommittedSingle();\n        }\n        if (s.selected) {\n          s.viewYear = s.selected.getFullYear();\n          s.viewMonth = s.selected.getMonth();\n        }\n      }\n      if (partial.range !== undefined && mode() === \"range\") {\n        s.rangeStart = partial.range.start ? new Date(partial.range.start.getTime()) : null;\n        s.rangeEnd = partial.range.end ? new Date(partial.range.end.getTime()) : null;\n        emitters.syncCommittedRange();\n        const a = s.rangeStart ?? s.rangeEnd;\n        if (a) {\n          s.viewYear = a.getFullYear();\n          s.viewMonth = a.getMonth();\n        }\n      }\n      if (partial.theme !== undefined) {\n        applyTheme(partial.theme || undefined);\n      }\n      if (partial.className !== undefined) {\n        dom.root.className = [\"cal\", s.options.className].filter(Boolean).join(\" \");\n      }\n      if (partial.ariaLabel !== undefined) {\n        dom.root.setAttribute(\"aria-label\", partial.ariaLabel);\n      }\n      if (partial.allowInput !== undefined) {\n        s.inputController.applyInputMode();\n      }\n      normalizeStoredDatesIfDateOnly();\n      if (mode() === \"range\") {\n        emitters.syncCommittedRange();\n      } else if (usesApplyActions()) {\n        emitters.syncCommittedSingle();\n      }\n      cb.render();\n    },\n    getInputElement(): HTMLInputElement {\n      return valueInput;\n    },\n    getCalendarElement(): HTMLElement {\n      return dom.container;\n    },\n    open(): void {\n      showPanel();\n    },\n    close(): void {\n      cb.hidePanel();\n    },\n    destroy(): void {\n      rangePresetsMediaQuery?.removeEventListener(\"change\", onRangePresetsLayoutChange);\n      compactRangeMediaQuery?.removeEventListener(\"change\", onCompactRangeLayoutChange);\n      popover?.destroy();\n      valueInput.removeEventListener(\"blur\", s.inputController.onInputBlur);\n      valueInput.removeEventListener(\"keydown\", onInputKeydown);\n      dom.grid.removeEventListener(\"keydown\", onGridKeydown);\n      dom.gridRight.removeEventListener(\"keydown\", onGridKeydown);\n      dom.grid.removeEventListener(\"mousemove\", onGridMouseMove);\n      dom.grid.removeEventListener(\"mouseleave\", onGridMouseLeave);\n      dom.gridRight.removeEventListener(\"mousemove\", onGridMouseMove);\n      dom.gridRight.removeEventListener(\"mouseleave\", onGridMouseLeave);\n      dom.monthSelect.close();\n      dom.monthSelectRight.close();\n      dom.timeSingle.hour.close();\n      dom.timeSingle.minute.close();\n      dom.timeSingle.second.close();\n      dom.timeSingle.meridiem.close();\n      dom.timeRangeStart.hour.close();\n      dom.timeRangeStart.minute.close();\n      dom.timeRangeStart.second.close();\n      dom.timeRangeStart.meridiem.close();\n      dom.timeRangeEnd.hour.close();\n      dom.timeRangeEnd.minute.close();\n      dom.timeRangeEnd.second.close();\n      dom.timeRangeEnd.meridiem.close();\n      dom.container.remove();\n    },\n  };\n}\n","import { applyHM, fillHourMinute, fillSecond, setHM, snapMinuteToStep } from \"../time\";\nimport { compareCalendarDay, shouldShowTimeOn } from \"../utils\";\nimport type { CustomSelectControl } from \"../dom/customSelect\";\nimport type { CalendarDomElements } from \"../dom/types\";\nimport type { CalendarCallbacks, CalendarState } from \"./ctx\";\n\nexport type TimeManagerDeps = {\n  s: CalendarState;\n  dom: CalendarDomElements;\n  now: Date;\n  mode: () => string;\n  use12Hour: () => boolean;\n  minuteStepOn: () => number;\n  showSecondsOn: () => boolean;\n  usesApplyActions: () => boolean;\n  secondForSingle: () => CustomSelectControl | null;\n  secondForStart: () => CustomSelectControl | null;\n  secondForEnd: () => CustomSelectControl | null;\n  emitSingle: () => void;\n  cb: CalendarCallbacks;\n};\n\nexport type TimeManager = {\n  syncTimeSelectsFromValue: () => void;\n  syncTimeFieldControls: () => void;\n  updateTimeVisibility: () => void;\n  onTimeSingleChange: () => void;\n  onTimeRangeStartChange: () => void;\n  onTimeRangeEndChange: () => void;\n};\n\nexport function createTimeManager({\n  s,\n  dom,\n  now,\n  mode,\n  use12Hour,\n  minuteStepOn,\n  showSecondsOn,\n  usesApplyActions,\n  secondForSingle,\n  secondForStart,\n  secondForEnd,\n  emitSingle,\n  cb,\n}: TimeManagerDeps): TimeManager {\n  function syncTimeSelectsFromValue(): void {\n    const use12 = use12Hour();\n    const step = minuteStepOn();\n\n    const snapStoredMinutes = (date: Date | null): Date | null => {\n      if (!date || !shouldShowTimeOn(s.options)) return date;\n      const snapped = snapMinuteToStep(date.getMinutes(), step);\n      if (snapped === date.getMinutes()) return date;\n      const next = new Date(date);\n      next.setMinutes(snapped, 0, 0);\n      return next;\n    };\n\n    if (mode() === \"single\") {\n      s.selected = snapStoredMinutes(s.selected);\n    } else {\n      s.rangeStart = snapStoredMinutes(s.rangeStart);\n      s.rangeEnd = snapStoredMinutes(s.rangeEnd);\n    }\n\n    fillHourMinute(\n      dom.timeSingle.hour,\n      dom.timeSingle.minute,\n      dom.timeSingle.meridiem,\n      use12,\n      step,\n    );\n    fillHourMinute(\n      dom.timeRangeStart.hour,\n      dom.timeRangeStart.minute,\n      dom.timeRangeStart.meridiem,\n      use12,\n      step,\n    );\n    fillHourMinute(\n      dom.timeRangeEnd.hour,\n      dom.timeRangeEnd.minute,\n      dom.timeRangeEnd.meridiem,\n      use12,\n      step,\n    );\n\n    if (showSecondsOn()) {\n      fillSecond(dom.timeSingle.second);\n      fillSecond(dom.timeRangeStart.second);\n      fillSecond(dom.timeRangeEnd.second);\n    }\n\n    if (mode() === \"single\") {\n      const base = s.selected ?? now;\n      setHM(\n        dom.timeSingle.hour,\n        dom.timeSingle.minute,\n        dom.timeSingle.meridiem,\n        secondForSingle(),\n        base,\n        use12,\n        step,\n      );\n      return;\n    }\n    const start = s.rangeStart ?? now;\n    const end = s.rangeEnd ?? s.rangeStart ?? now;\n    setHM(\n      dom.timeRangeStart.hour,\n      dom.timeRangeStart.minute,\n      dom.timeRangeStart.meridiem,\n      secondForStart(),\n      start,\n      use12,\n      step,\n    );\n    setHM(\n      dom.timeRangeEnd.hour,\n      dom.timeRangeEnd.minute,\n      dom.timeRangeEnd.meridiem,\n      secondForEnd(),\n      end,\n      use12,\n      step,\n    );\n  }\n\n  function syncTimeFieldControls(): void {\n    const editable = s.options.allowTimeInput ?? true;\n    const context = { use12Hour: use12Hour(), minuteStep: minuteStepOn() };\n    for (const row of [dom.timeSingle, dom.timeRangeStart, dom.timeRangeEnd]) {\n      for (const field of [row.hour, row.minute, row.second] as const) {\n        field.setEditable?.(editable);\n        field.setClampContext?.(context);\n      }\n    }\n  }\n\n  function updateTimeVisibility(): void {\n    const st = s.options.showTime ?? false;\n    const use12 = use12Hour();\n    const secs = showSecondsOn();\n    const rng = mode() === \"range\";\n    dom.timeWrap.hidden = !st || rng;\n    dom.timeWrapRangeStart.hidden = !st || !rng;\n    dom.timeWrapRangeEnd.hidden = !st || !rng;\n    dom.timeSingle.row.hidden = !st || rng;\n    dom.timeRangeStart.row.hidden = !st || !rng;\n    dom.timeRangeEnd.row.hidden = !st || !rng;\n    dom.timeSingle.meridiem.root.hidden = !st || !use12 || rng;\n    dom.timeRangeStart.meridiem.root.hidden = !st || !use12 || !rng;\n    dom.timeRangeEnd.meridiem.root.hidden = !st || !use12 || !rng;\n    dom.timeSingle.second.root.hidden = !st || !secs || rng;\n    dom.timeSingle.sepSecond.hidden = !st || !secs || rng;\n    dom.timeRangeStart.second.root.hidden = !st || !secs || !rng;\n    dom.timeRangeStart.sepSecond.hidden = !st || !secs || !rng;\n    dom.timeRangeEnd.second.root.hidden = !st || !secs || !rng;\n    dom.timeRangeEnd.sepSecond.hidden = !st || !secs || !rng;\n    syncTimeFieldControls();\n  }\n\n  function onTimeSingleChange(): void {\n    if (!s.selected) return;\n    s.selected = applyHM(\n      s.selected,\n      dom.timeSingle.hour,\n      dom.timeSingle.minute,\n      dom.timeSingle.meridiem,\n      secondForSingle(),\n      use12Hour(),\n    );\n    if (!usesApplyActions()) {\n      emitSingle();\n    }\n  }\n\n  function onTimeRangeStartChange(): void {\n    if (!s.rangeStart) return;\n    s.rangeStart = applyHM(\n      s.rangeStart,\n      dom.timeRangeStart.hour,\n      dom.timeRangeStart.minute,\n      dom.timeRangeStart.meridiem,\n      secondForStart(),\n      use12Hour(),\n    );\n    if (s.rangeEnd && compareCalendarDay(s.rangeEnd, s.rangeStart) < 0) {\n      s.rangeEnd = new Date(s.rangeStart);\n      setHM(\n        dom.timeRangeEnd.hour,\n        dom.timeRangeEnd.minute,\n        dom.timeRangeEnd.meridiem,\n        secondForEnd(),\n        s.rangeEnd,\n        use12Hour(),\n        minuteStepOn(),\n      );\n    }\n    cb.render();\n  }\n\n  function onTimeRangeEndChange(): void {\n    if (!s.rangeEnd) return;\n    s.rangeEnd = applyHM(\n      s.rangeEnd,\n      dom.timeRangeEnd.hour,\n      dom.timeRangeEnd.minute,\n      dom.timeRangeEnd.meridiem,\n      secondForEnd(),\n      use12Hour(),\n    );\n    if (s.rangeStart && compareCalendarDay(s.rangeEnd, s.rangeStart) < 0) {\n      s.rangeStart = new Date(s.rangeEnd);\n      setHM(\n        dom.timeRangeStart.hour,\n        dom.timeRangeStart.minute,\n        dom.timeRangeStart.meridiem,\n        secondForStart(),\n        s.rangeStart,\n        use12Hour(),\n        minuteStepOn(),\n      );\n    }\n    cb.render();\n  }\n\n  return {\n    syncTimeSelectsFromValue,\n    syncTimeFieldControls,\n    updateTimeVisibility,\n    onTimeSingleChange,\n    onTimeRangeStartChange,\n    onTimeRangeEndChange,\n  };\n}\n","import { autoUpdate, computePosition, flip, offset, shift } from \"@floating-ui/dom\";\n\nexport interface CalendarPopover {\n  open(): void;\n  /**\n   * Close the panel. When `restoreFocus` is true and focus is currently inside\n   * the panel, focus is returned to the anchor input so keyboard focus is never\n   * lost when the calendar disappears.\n   */\n  close(restoreFocus?: boolean): void;\n  destroy(): void;\n}\n\nexport function attachCalendarPopover(\n  input: HTMLInputElement,\n  panel: HTMLElement,\n  {\n    floating,\n    onClose,\n  }: {\n    floating: boolean;\n    onClose?: () => void;\n  },\n): CalendarPopover {\n  input.setAttribute(\"aria-expanded\", \"false\");\n  input.setAttribute(\"aria-haspopup\", \"dialog\");\n  if (floating) {\n    panel.classList.add(\"cal-anchor--floating\");\n  }\n\n  let cleanupAutoUpdate: (() => void) | null = null;\n  // Guards against the anchor's focus handler re-opening the panel when we\n  // programmatically return focus to the input after a close.\n  let suppressOpen = false;\n\n  const updatePosition = (): void => {\n    if (!floating) return;\n    void computePosition(input, panel, {\n      strategy: \"fixed\",\n      placement: \"bottom-start\",\n      middleware: [offset(8), flip(), shift({ padding: 8 })],\n    }).then(({ x, y }) => {\n      panel.style.left = `${Math.round(x)}px`;\n      panel.style.top = `${Math.round(y)}px`;\n    });\n  };\n\n  const close = (restoreFocus = false): void => {\n    if (panel.hidden) return;\n    const hadFocusInside =\n      panel.contains(document.activeElement) || document.activeElement === panel;\n    panel.hidden = true;\n    cleanupAutoUpdate?.();\n    cleanupAutoUpdate = null;\n    input.setAttribute(\"aria-expanded\", \"false\");\n    onClose?.();\n    if (restoreFocus && hadFocusInside) {\n      suppressOpen = true;\n      input.focus();\n      setTimeout(() => {\n        suppressOpen = false;\n      }, 0);\n    }\n  };\n\n  const open = (): void => {\n    if (suppressOpen) return;\n    if (!panel.hidden) return;\n    panel.hidden = false;\n    input.setAttribute(\"aria-expanded\", \"true\");\n    if (floating) {\n      cleanupAutoUpdate = autoUpdate(input, panel, updatePosition);\n      updatePosition();\n    }\n  };\n\n  const onInputFocus = (): void => open();\n  const onInputClick = (): void => open();\n  const onInputKeydown = (e: KeyboardEvent): void => {\n    if (e.key === \"Escape\") close();\n  };\n  const onDocumentPointerDown = (e: PointerEvent): void => {\n    if (panel.hidden) return;\n    const target = e.target;\n    if (!(target instanceof Node)) return;\n    if (panel.contains(target) || input.contains(target)) return;\n    if (target instanceof Element && target.closest(\".cal__list-select__list--floating\")) return;\n    close();\n  };\n\n  input.addEventListener(\"focus\", onInputFocus);\n  input.addEventListener(\"click\", onInputClick);\n  input.addEventListener(\"keydown\", onInputKeydown);\n  document.addEventListener(\"pointerdown\", onDocumentPointerDown);\n\n  const destroy = (): void => {\n    close();\n    input.removeEventListener(\"focus\", onInputFocus);\n    input.removeEventListener(\"click\", onInputClick);\n    input.removeEventListener(\"keydown\", onInputKeydown);\n    document.removeEventListener(\"pointerdown\", onDocumentPointerDown);\n  };\n\n  return { open, close, destroy };\n}\n","import {\n  addMonths,\n  compareAsc,\n  differenceInCalendarDays,\n  getDaysInMonth,\n  getISOWeek,\n  isSameDay,\n  startOfDay,\n} from \"date-fns\";\nimport {\n  dayInInclusiveRange,\n  formatRangeDurationLabel,\n  isSelectable,\n  mergeLocale,\n  toISODate,\n} from \"../utils\";\nimport type { CalendarMode, CalendarOptions } from \"../types\";\nimport type { ResolvedCalendarLocale } from \"../types/types\";\n\nexport interface GridSelectionState {\n  mode: CalendarMode;\n  selected: Date | null;\n  rangeStart: Date | null;\n  rangeEnd: Date | null;\n  rangeHoverEnd: Date | null;\n  shouldPseudoSelectToday: boolean;\n  now: Date;\n  durationTipIdBase: string;\n  /** Day that holds `tabindex=\"0\"` for roving-tabindex keyboard navigation. */\n  activeDate: Date | null;\n}\n\nexport interface GridRenderCallbacks {\n  onDayClick: (dayDate: Date, cellYear: number, cellMonth: number, dayNum: number) => void;\n}\n\n/**\n * Selection-dependent classes applied during decoration. Cleared and re-applied\n * on every decorate pass, so they must NOT include structural classes such as\n * `cal__day--today` or `cal__day--disabled`.\n */\nconst DAY_STATE_CLASSES = [\n  \"cal__day--selected\",\n  \"cal__day--pseudo-selected\",\n  \"cal__day--range-single\",\n  \"cal__day--range-start\",\n  \"cal__day--range-end\",\n  \"cal__day--range-between\",\n  \"cal__day--range-preview-between\",\n  \"cal__day--range-preview-start\",\n  \"cal__day--range-preview-end\",\n];\n\ninterface GridDay {\n  date: Date;\n  btn: HTMLButtonElement;\n}\n\n/**\n * The structural shape of a rendered month, cached per grid element so that\n * selection/hover changes only re-decorate existing day buttons instead of\n * tearing down and rebuilding the whole grid.\n */\ninterface GridStructure {\n  year: number;\n  month: number;\n  firstDayOfWeek: number;\n  /** Locale option reference — drives the per-day `aria-label` month names. */\n  localeOption: CalendarOptions[\"locale\"];\n  showWk: boolean;\n  minDate: Date | null | undefined;\n  maxDate: Date | null | undefined;\n  disabledDates: CalendarOptions[\"disabledDates\"];\n  enabledDatesOnly: CalendarOptions[\"enabledDatesOnly\"];\n  strike: CalendarOptions[\"disabledDatesStrikeThrough\"];\n  nowTime: number;\n  days: GridDay[];\n}\n\nconst gridStructures = new WeakMap<HTMLElement, GridStructure>();\n\nconst structureMatches = (\n  cache: GridStructure,\n  year: number,\n  month: number,\n  firstDayOfWeek: number,\n  showWk: boolean,\n  options: CalendarOptions,\n  nowTime: number,\n): boolean =>\n  cache.year === year &&\n  cache.month === month &&\n  cache.firstDayOfWeek === firstDayOfWeek &&\n  cache.localeOption === options.locale &&\n  cache.showWk === showWk &&\n  cache.minDate === options.minDate &&\n  cache.maxDate === options.maxDate &&\n  cache.disabledDates === options.disabledDates &&\n  cache.enabledDatesOnly === options.enabledDatesOnly &&\n  cache.strike === options.disabledDatesStrikeThrough &&\n  cache.nowTime === nowTime;\n\n/** Apply selection/range/hover state to already-built day buttons. */\nconst decorateDays = (\n  days: readonly GridDay[],\n  selection: GridSelectionState,\n  locale: ResolvedCalendarLocale,\n): void => {\n  const {\n    mode,\n    selected,\n    rangeStart,\n    rangeEnd,\n    rangeHoverEnd,\n    shouldPseudoSelectToday,\n    now,\n    activeDate,\n    durationTipIdBase,\n  } = selection;\n\n  for (const { date: dayDate, btn } of days) {\n    btn.classList.remove(...DAY_STATE_CLASSES);\n    btn.querySelector(\".cal__range-duration-tip\")?.remove();\n    btn.removeAttribute(\"aria-describedby\");\n    btn.tabIndex = activeDate && isSameDay(dayDate, activeDate) ? 0 : -1;\n\n    if (mode === \"single\") {\n      if (selected && isSameDay(dayDate, selected)) {\n        btn.classList.add(\"cal__day--selected\");\n        btn.setAttribute(\"aria-selected\", \"true\");\n      } else if (shouldPseudoSelectToday && isSameDay(dayDate, now)) {\n        btn.classList.add(\"cal__day--pseudo-selected\");\n        btn.setAttribute(\"aria-selected\", \"false\");\n      } else {\n        btn.setAttribute(\"aria-selected\", \"false\");\n      }\n    } else if (rangeStart && rangeEnd) {\n      const rs = rangeStart;\n      const re = rangeEnd;\n      if (isSameDay(dayDate, rs) && isSameDay(dayDate, re)) {\n        btn.classList.add(\"cal__day--range-single\");\n      } else if (isSameDay(dayDate, rs)) {\n        btn.classList.add(\"cal__day--range-start\");\n      } else if (isSameDay(dayDate, re)) {\n        btn.classList.add(\"cal__day--range-end\");\n      } else if (dayInInclusiveRange(dayDate, rs, re)) {\n        btn.classList.add(\"cal__day--range-between\");\n      }\n      btn.setAttribute(\n        \"aria-selected\",\n        isSameDay(dayDate, rs) || isSameDay(dayDate, re) ? \"true\" : \"false\",\n      );\n    } else if (rangeStart && !rangeEnd) {\n      const anchor = startOfDay(rangeStart);\n      const hover = rangeHoverEnd ? startOfDay(rangeHoverEnd) : null;\n\n      if (!hover || isSameDay(anchor, hover)) {\n        if (isSameDay(dayDate, anchor)) {\n          btn.classList.add(\"cal__day--range-start\");\n          btn.setAttribute(\"aria-selected\", \"true\");\n          if (hover && isSameDay(anchor, hover)) {\n            appendDurationTip(btn, durationTipIdBase, formatRangeDurationLabel(locale, 1));\n          }\n        } else {\n          btn.setAttribute(\"aria-selected\", \"false\");\n        }\n      } else {\n        let lo = anchor;\n        let hi = hover;\n        if (compareAsc(lo, hi) > 0) {\n          const t = lo;\n          lo = hi;\n          hi = t;\n        }\n\n        if (dayInInclusiveRange(dayDate, lo, hi)) {\n          const spanDays = differenceInCalendarDays(hi, lo) + 1;\n          if (isSameDay(dayDate, lo)) {\n            btn.classList.add(\n              isSameDay(anchor, lo) ? \"cal__day--range-start\" : \"cal__day--range-preview-start\",\n            );\n          } else if (isSameDay(dayDate, hi)) {\n            btn.classList.add(\n              isSameDay(anchor, hi) ? \"cal__day--range-end\" : \"cal__day--range-preview-end\",\n            );\n          } else {\n            btn.classList.add(\"cal__day--range-preview-between\");\n          }\n          if (isSameDay(dayDate, hover)) {\n            appendDurationTip(btn, durationTipIdBase, formatRangeDurationLabel(locale, spanDays));\n          }\n          btn.setAttribute(\n            \"aria-selected\",\n            isSameDay(dayDate, anchor) || isSameDay(dayDate, hover) ? \"true\" : \"false\",\n          );\n        } else {\n          btn.setAttribute(\"aria-selected\", \"false\");\n        }\n      }\n    } else {\n      btn.setAttribute(\"aria-selected\", \"false\");\n    }\n  }\n};\n\nconst appendDurationTip = (btn: HTMLButtonElement, idBase: string, label: string): void => {\n  const tipEl = document.createElement(\"span\");\n  tipEl.className = \"cal__range-duration-tip\";\n  tipEl.id = `${idBase}-hover`;\n  tipEl.setAttribute(\"role\", \"tooltip\");\n  tipEl.textContent = label;\n  btn.setAttribute(\"aria-describedby\", tipEl.id);\n  btn.append(tipEl);\n};\n\n/** Build the (selection-independent) day buttons for a month. */\nconst buildGridStructure = (\n  target: HTMLDivElement,\n  panelYear: number,\n  panelMonth: number,\n  options: CalendarOptions,\n  locale: ResolvedCalendarLocale,\n  showWk: boolean,\n  nowTime: number,\n  callbacks: GridRenderCallbacks,\n): GridStructure => {\n  target.replaceChildren();\n  target.classList.toggle(\"cal__grid--with-weeks\", showWk);\n  target.setAttribute(\"aria-label\", `${locale.months.longhand[panelMonth]} ${panelYear}`);\n\n  const first = new Date(panelYear, panelMonth, 1);\n  const startWeekday = (first.getDay() - (locale.firstDayOfWeek % 7) + 7) % 7;\n  const dim = getDaysInMonth(first);\n  const numRows = Math.ceil((startWeekday + dim) / 7);\n  const days: GridDay[] = [];\n\n  const appendSpacer = (rowEl: HTMLDivElement): void => {\n    const spacer = document.createElement(\"div\");\n    spacer.className = \"cal__day-spacer\";\n    spacer.setAttribute(\"role\", \"gridcell\");\n    spacer.setAttribute(\"aria-hidden\", \"true\");\n    rowEl.append(spacer);\n  };\n\n  for (let row = 0; row < numRows; row += 1) {\n    const rowStart = row * 7;\n    const rowEl = document.createElement(\"div\");\n    rowEl.className = \"cal__week\";\n    rowEl.setAttribute(\"role\", \"row\");\n\n    if (showWk) {\n      let weekRef: Date | null = null;\n      for (let col = 0; col < 7; col += 1) {\n        const i = rowStart + col;\n        if (i >= startWeekday && i < startWeekday + dim) {\n          weekRef = new Date(panelYear, panelMonth, i - startWeekday + 1);\n          break;\n        }\n      }\n      const wkCell = document.createElement(\"div\");\n      wkCell.className = \"cal__weeknum\";\n      wkCell.setAttribute(\"role\", \"rowheader\");\n      if (weekRef) {\n        wkCell.textContent = String(getISOWeek(weekRef));\n      } else {\n        wkCell.setAttribute(\"aria-hidden\", \"true\");\n      }\n      rowEl.append(wkCell);\n    }\n\n    for (let col = 0; col < 7; col += 1) {\n      const i = rowStart + col;\n      if (i < startWeekday || i >= startWeekday + dim) {\n        appendSpacer(rowEl);\n        continue;\n      }\n\n      const dayNum = i - startWeekday + 1;\n      const dayDate = new Date(panelYear, panelMonth, dayNum);\n      const cell = document.createElement(\"div\");\n      cell.className = \"cal__gridcell\";\n      cell.setAttribute(\"role\", \"gridcell\");\n      const btn = document.createElement(\"button\");\n      btn.type = \"button\";\n      btn.className = \"cal__day\";\n      btn.setAttribute(\n        \"aria-label\",\n        `${dayNum} ${locale.months.longhand[panelMonth]} ${panelYear}`,\n      );\n      const dayNumEl = document.createElement(\"span\");\n      dayNumEl.className = \"cal__day__num\";\n      dayNumEl.textContent = String(dayNum);\n      btn.append(dayNumEl);\n      btn.dataset.date = toISODate(dayDate);\n\n      const selectable = isSelectable(\n        dayDate,\n        options.minDate ?? null,\n        options.maxDate ?? null,\n        options.enabledDatesOnly ? undefined : options.disabledDates,\n        options.enabledDatesOnly,\n      );\n      if (!selectable) {\n        btn.disabled = true;\n        btn.classList.add(\"cal__day--disabled\");\n        if (options.disabledDatesStrikeThrough) {\n          btn.classList.add(\"cal__day--disabled-strike\");\n        }\n      }\n\n      if (nowTime === startOfDay(dayDate).getTime()) {\n        btn.classList.add(\"cal__day--today\");\n      }\n\n      btn.addEventListener(\"click\", () => {\n        if (!selectable) return;\n        callbacks.onDayClick(dayDate, panelYear, panelMonth, dayNum);\n      });\n\n      cell.append(btn);\n      rowEl.append(cell);\n      days.push({ date: dayDate, btn });\n    }\n\n    target.append(rowEl);\n  }\n\n  return {\n    year: panelYear,\n    month: panelMonth,\n    firstDayOfWeek: locale.firstDayOfWeek,\n    localeOption: options.locale,\n    showWk,\n    minDate: options.minDate,\n    maxDate: options.maxDate,\n    disabledDates: options.disabledDates,\n    enabledDatesOnly: options.enabledDatesOnly,\n    strike: options.disabledDatesStrikeThrough,\n    nowTime,\n    days,\n  };\n};\n\nexport const renderGridForMonth = (\n  target: HTMLDivElement,\n  panelYear: number,\n  panelMonth: number,\n  options: CalendarOptions,\n  selection: GridSelectionState,\n  callbacks: GridRenderCallbacks,\n): void => {\n  const locale = mergeLocale(options.locale);\n  const showWk = options.showWeekNumbers ?? false;\n  const nowTime = startOfDay(selection.now).getTime();\n\n  let structure = gridStructures.get(target);\n  if (\n    !structure ||\n    !structureMatches(\n      structure,\n      panelYear,\n      panelMonth,\n      locale.firstDayOfWeek,\n      showWk,\n      options,\n      nowTime,\n    )\n  ) {\n    structure = buildGridStructure(\n      target,\n      panelYear,\n      panelMonth,\n      options,\n      locale,\n      showWk,\n      nowTime,\n      callbacks,\n    );\n    gridStructures.set(target, structure);\n  }\n\n  decorateDays(structure.days, selection, locale);\n};\n\nexport const renderGrid = (\n  grid: HTMLDivElement,\n  gridRight: HTMLDivElement,\n  viewYear: number,\n  viewMonth: number,\n  options: CalendarOptions,\n  selection: GridSelectionState,\n  callbacks: GridRenderCallbacks,\n  compactRange = false,\n): void => {\n  renderGridForMonth(grid, viewYear, viewMonth, options, selection, callbacks);\n  if (compactRange) {\n    gridRight.replaceChildren();\n    gridStructures.delete(gridRight);\n    return;\n  }\n  const rightView = addMonths(new Date(viewYear, viewMonth, 1), 1);\n  renderGridForMonth(\n    gridRight,\n    rightView.getFullYear(),\n    rightView.getMonth(),\n    options,\n    selection,\n    callbacks,\n  );\n};\n","import { mergeLocale } from \"../utils\";\nimport type { CalendarOptions } from \"../types\";\n\nexport const renderWeekdaysRow = (target: HTMLDivElement, options: CalendarOptions): void => {\n  const locale = mergeLocale(options.locale);\n  const showWk = options.showWeekNumbers ?? false;\n  target.replaceChildren();\n  target.classList.toggle(\"cal__weekdays--with-weeks\", showWk);\n  if (showWk) {\n    const wk = document.createElement(\"div\");\n    wk.className = \"cal__weekday cal__weekday--weeknum\";\n    wk.textContent = locale.weekNumberHeader ?? \"Wk\";\n    target.append(wk);\n  }\n  const start = locale.firstDayOfWeek % 7;\n  for (let i = 0; i < 7; i += 1) {\n    const idx = (start + i) % 7;\n    const cell = document.createElement(\"div\");\n    cell.className = \"cal__weekday\";\n    cell.textContent = locale.weekdays.shorthand[idx] ?? \"\";\n    target.append(cell);\n  }\n};\n","import { isSameDay, startOfDay } from \"date-fns\";\nimport { createCalendarDom } from \"./dom/createElements\";\nimport { createInputController } from \"./input/createInputController\";\nimport { createDayClickHandler } from \"./internal/dayClick\";\nimport { createEmitters } from \"./internal/emitters\";\nimport { createGridNav } from \"./internal/gridNav\";\nimport { createLayoutHelpers } from \"./internal/layoutHelpers\";\nimport { attachNavigationHandlers } from \"./internal/navigationHandlers\";\nimport { createPublicApi } from \"./internal/publicApi\";\nimport { createTimeManager } from \"./internal/timeManager\";\nimport { canGoNextMonth, canGoPrevMonth } from \"./navigation\";\nimport { attachCalendarPopover, type CalendarPopover } from \"./popover\";\nimport { DESKTOP_RANGE_PRESETS_MEDIA_QUERY, normalizePresetRange } from \"./range/rangePresets\";\nimport { renderGrid, type GridSelectionState } from \"./render/grid\";\nimport { fillMonthYearSelects, syncYearInputs } from \"./render/monthYear\";\nimport { renderWeekdaysRow } from \"./render/weekdays\";\nimport { fillHourMinute, normalizeMinuteStep } from \"./time\";\nimport { isSelectable, parseCalendarDay, shouldShowTimeOn } from \"./utils\";\nimport { COMPACT_RANGE_MEDIA_QUERY, matchesCompactRangeLayout } from \"./utils/viewport\";\nimport type { CustomSelectControl } from \"./dom/customSelect\";\nimport type { CalendarCallbacks, CalendarState } from \"./internal/ctx\";\nimport type { CalendarMode, CalendarOptions, CalendarPickerInstance } from \"./types\";\nimport \"../styles/calendar.css\";\n\nexport const buildCalendarPicker = (\n  input: HTMLInputElement,\n  initial: CalendarOptions = {},\n): CalendarPickerInstance => {\n  const valueInput = input;\n  valueInput.classList.add(\"cal__input\");\n  if (!valueInput.type) valueInput.type = \"text\";\n  valueInput.spellcheck = false;\n\n  const dom = createCalendarDom();\n\n  // ── State box ─────────────────────────────────────────────────────────────\n  const s: CalendarState = {\n    options: { ...initial },\n    selected: null,\n    rangeStart: null,\n    rangeEnd: null,\n    committedRangeStart: null,\n    committedRangeEnd: null,\n    committedSelected: null,\n    rangeHoverEnd: null,\n    viewYear: 0,\n    viewMonth: 0,\n    activeDate: new Date(),\n    syncingYearInput: false,\n    inputController: null!,\n  };\n\n  // ── Derived option helpers ─────────────────────────────────────────────────\n  const mode = (): CalendarMode => s.options.mode ?? \"single\";\n  const use12Hour = (): boolean => s.options.use12HourTime ?? false;\n  const minuteStepOn = (): number => normalizeMinuteStep(s.options.minuteStep);\n  const showSecondsOn = (): boolean => s.options.showSeconds ?? false;\n  const usesApplyActions = (): boolean => shouldShowTimeOn(s.options);\n  const isCompactRangeLayout = (): boolean => mode() === \"range\" && matchesCompactRangeLayout();\n  const secondForSingle = (): CustomSelectControl | null =>\n    showSecondsOn() ? dom.timeSingle.second : null;\n  const secondForStart = (): CustomSelectControl | null =>\n    showSecondsOn() ? dom.timeRangeStart.second : null;\n  const secondForEnd = (): CustomSelectControl | null =>\n    showSecondsOn() ? dom.timeRangeEnd.second : null;\n\n  // ── Seed initial selection from options ────────────────────────────────────\n  if (mode() === \"single\") {\n    s.selected = s.options.value != null ? new Date(s.options.value.getTime()) : null;\n    if (s.selected && !shouldShowTimeOn(s.options)) {\n      s.selected = startOfDay(s.selected);\n    }\n    if (usesApplyActions()) {\n      s.committedSelected = s.selected ? new Date(s.selected.getTime()) : null;\n    }\n  } else {\n    s.rangeStart = s.options.range?.start ? new Date(s.options.range.start.getTime()) : null;\n    s.rangeEnd = s.options.range?.end ? new Date(s.options.range.end.getTime()) : null;\n    if (!shouldShowTimeOn(s.options)) {\n      if (s.rangeStart) s.rangeStart = startOfDay(s.rangeStart);\n      if (s.rangeEnd) s.rangeEnd = startOfDay(s.rangeEnd);\n    }\n    s.committedRangeStart = s.rangeStart ? new Date(s.rangeStart.getTime()) : null;\n    s.committedRangeEnd = s.rangeEnd ? new Date(s.rangeEnd.getTime()) : null;\n  }\n  const now = new Date();\n  const anchor = s.selected ?? s.rangeStart ?? s.rangeEnd ?? now;\n  s.viewYear = anchor.getFullYear();\n  s.viewMonth = anchor.getMonth();\n  s.activeDate = startOfDay(anchor);\n\n  // ── DOM wiring ─────────────────────────────────────────────────────────────\n  if (s.options.inline) {\n    valueInput.insertAdjacentElement(\"afterend\", dom.container);\n  } else {\n    (s.options.appendTo ?? document.body).append(dom.container);\n  }\n\n  dom.root.className = [\"cal\", s.options.className].filter(Boolean).join(\" \");\n  if (s.options.theme) {\n    dom.root.dataset.calTheme = s.options.theme;\n    valueInput.dataset.calTheme = s.options.theme;\n  }\n  dom.root.setAttribute(\"aria-label\", s.options.ariaLabel ?? \"Calendar\");\n\n  // ── Late-binding callbacks shared across modules ───────────────────────────\n  const cb = {} as CalendarCallbacks;\n\n  // ── Panel management ───────────────────────────────────────────────────────\n  let popover: CalendarPopover | null = null;\n\n  const showPanel = (): void => {\n    if (popover) {\n      popover.open();\n      return;\n    }\n    if (!dom.container.hidden) return;\n    dom.container.hidden = false;\n  };\n  const hidePanel = (): void => {\n    if (popover) {\n      popover.close(true);\n      return;\n    }\n    if (dom.container.hidden) return;\n    dom.container.hidden = true;\n    onPanelClosed();\n  };\n\n  function onPanelClosed(): void {\n    if (mode() === \"single\" && usesApplyActions()) {\n      s.selected = s.committedSelected ? new Date(s.committedSelected.getTime()) : null;\n      cb.render();\n      return;\n    }\n    if (mode() === \"range\" && usesApplyActions()) {\n      cb.clearRangeHover();\n      s.rangeStart = s.committedRangeStart ? new Date(s.committedRangeStart.getTime()) : null;\n      s.rangeEnd = s.committedRangeEnd ? new Date(s.committedRangeEnd.getTime()) : null;\n      cb.render();\n      return;\n    }\n    if (mode() !== \"range\") return;\n    if (!s.rangeStart || s.rangeEnd) return;\n    cb.clearRangeHover();\n    s.rangeStart = s.committedRangeStart ? new Date(s.committedRangeStart.getTime()) : null;\n    s.rangeEnd = s.committedRangeEnd ? new Date(s.committedRangeEnd.getTime()) : null;\n    cb.render();\n  }\n\n  cb.hidePanel = hidePanel;\n\n  // ── Range hover ────────────────────────────────────────────────────────────\n  function clearRangeHover(): void {\n    s.rangeHoverEnd = null;\n  }\n  cb.clearRangeHover = clearRangeHover;\n\n  function updateRangeHoverFromPointer(e: MouseEvent): void {\n    if (mode() !== \"range\" || !s.rangeStart || s.rangeEnd) return;\n    const hit = (e.target as HTMLElement | null)?.closest(\"button.cal__day\") as\n      | HTMLButtonElement\n      | undefined\n      | null;\n    if (!hit || hit.disabled) return;\n    const ds = hit.dataset.date;\n    if (!ds) return;\n    const dayDate = parseCalendarDay(ds);\n    if (\n      !isSelectable(\n        dayDate,\n        s.options.minDate ?? null,\n        s.options.maxDate ?? null,\n        s.options.enabledDatesOnly ? undefined : s.options.disabledDates,\n        s.options.enabledDatesOnly,\n      )\n    ) {\n      return;\n    }\n    const next = startOfDay(dayDate);\n    if (s.rangeHoverEnd && isSameDay(next, s.rangeHoverEnd)) return;\n    s.rangeHoverEnd = next;\n    cb.renderGridsOnly();\n  }\n\n  const onGridMouseLeave = (): void => {\n    if (mode() === \"range\" && s.rangeStart && !s.rangeEnd && s.rangeHoverEnd !== null) {\n      clearRangeHover();\n      cb.renderGridsOnly();\n    }\n  };\n\n  dom.grid.addEventListener(\"mousemove\", updateRangeHoverFromPointer);\n  dom.grid.addEventListener(\"mouseleave\", onGridMouseLeave);\n  dom.gridRight.addEventListener(\"mousemove\", updateRangeHoverFromPointer);\n  dom.gridRight.addEventListener(\"mouseleave\", onGridMouseLeave);\n\n  // ── Media queries ──────────────────────────────────────────────────────────\n  const rangePresetsMediaQuery =\n    typeof window !== \"undefined\" && typeof window.matchMedia === \"function\"\n      ? window.matchMedia(DESKTOP_RANGE_PRESETS_MEDIA_QUERY)\n      : null;\n  const compactRangeMediaQuery =\n    typeof window !== \"undefined\" && typeof window.matchMedia === \"function\"\n      ? window.matchMedia(COMPACT_RANGE_MEDIA_QUERY)\n      : null;\n\n  // ── Popover ────────────────────────────────────────────────────────────────\n  if (s.options.popover ?? true) {\n    popover = attachCalendarPopover(valueInput, dom.container, {\n      floating: !(s.options.inline ?? false),\n      onClose: onPanelClosed,\n    });\n  }\n\n  // ── Range presets ──────────────────────────────────────────────────────────\n  const applyRangePreset = (index: number): void => {\n    const config = s.options.rangePresets;\n    const preset = config?.presets[index];\n    if (!preset || mode() !== \"range\") return;\n    clearRangeHover();\n    const { start, end } = normalizePresetRange(preset, shouldShowTimeOn(s.options));\n    s.rangeStart = start;\n    s.rangeEnd = end;\n    s.viewYear = start.getFullYear();\n    s.viewMonth = start.getMonth();\n    cb.render();\n  };\n\n  // ── Initial time select population ────────────────────────────────────────\n  const durationTipIdBase = `cal-dur-${Math.random().toString(36).slice(2, 11)}`;\n\n  fillHourMinute(\n    dom.timeSingle.hour,\n    dom.timeSingle.minute,\n    dom.timeSingle.meridiem,\n    use12Hour(),\n    minuteStepOn(),\n  );\n  fillHourMinute(\n    dom.timeRangeStart.hour,\n    dom.timeRangeStart.minute,\n    dom.timeRangeStart.meridiem,\n    use12Hour(),\n    minuteStepOn(),\n  );\n  fillHourMinute(\n    dom.timeRangeEnd.hour,\n    dom.timeRangeEnd.minute,\n    dom.timeRangeEnd.meridiem,\n    use12Hour(),\n    minuteStepOn(),\n  );\n\n  // ── Sub-modules ────────────────────────────────────────────────────────────\n  const emitters = createEmitters(s, mode, usesApplyActions, cb);\n  cb.emitSingle = emitters.emitSingle;\n  cb.emitRange = emitters.emitRange;\n\n  const timeMgr = createTimeManager({\n    s,\n    dom,\n    now,\n    mode,\n    use12Hour,\n    minuteStepOn,\n    showSecondsOn,\n    usesApplyActions,\n    secondForSingle,\n    secondForStart,\n    secondForEnd,\n    emitSingle: emitters.emitSingle,\n    cb,\n  });\n\n  const onDayClick = createDayClickHandler({\n    s,\n    dom,\n    mode,\n    use12Hour,\n    minuteStepOn,\n    usesApplyActions,\n    secondForSingle,\n    secondForStart,\n    secondForEnd,\n    cb,\n  });\n\n  const gridNav = createGridNav({\n    s,\n    dom,\n    mode,\n    isCompactRangeLayout,\n    getPopover: () => popover,\n    cb,\n  });\n\n  const layout = createLayoutHelpers({\n    s,\n    dom,\n    mode,\n    isCompactRangeLayout,\n    applyRangePreset,\n  });\n\n  attachNavigationHandlers({\n    s,\n    dom,\n    mode,\n    use12Hour,\n    usesApplyActions,\n    secondForSingle,\n    secondForStart,\n    secondForEnd,\n    emitters,\n    cb,\n  });\n\n  // ── Input controller ───────────────────────────────────────────────────────\n  s.inputController = createInputController(valueInput, {\n    getOptions: () => s.options,\n    getMode: mode,\n    getSelected: () => s.selected,\n    getInputSingleValue: () => {\n      if (usesApplyActions()) {\n        return s.committedSelected ? new Date(s.committedSelected.getTime()) : null;\n      }\n      return s.selected ? new Date(s.selected.getTime()) : null;\n    },\n    setSelected: (d) => {\n      s.selected = d;\n    },\n    getRangeStart: () => s.rangeStart,\n    setRangeStart: (d) => {\n      s.rangeStart = d;\n    },\n    getRangeEnd: () => s.rangeEnd,\n    setRangeEnd: (d) => {\n      s.rangeEnd = d;\n    },\n    getViewYear: () => s.viewYear,\n    setViewYear: (y) => {\n      s.viewYear = y;\n    },\n    getViewMonth: () => s.viewMonth,\n    setViewMonth: (m) => {\n      s.viewMonth = m;\n    },\n    clearRangeHover,\n    syncCommittedRange: emitters.syncCommittedRange,\n    emitSingle: emitters.emitSingle,\n    emitRange: emitters.emitRange,\n    render: () => cb.render(),\n  });\n\n  const onInputKeydown = (e: KeyboardEvent): void => {\n    if (e.key !== \"Enter\") return;\n    e.preventDefault();\n    const committed = s.inputController.commitTypedInput();\n    valueInput.blur();\n    if (committed && !(s.options.keepOpenOnAllowInputEnter ?? false)) {\n      hidePanel();\n    }\n  };\n\n  valueInput.addEventListener(\"blur\", s.inputController.onInputBlur);\n  valueInput.addEventListener(\"keydown\", onInputKeydown);\n\n  dom.grid.addEventListener(\"keydown\", gridNav.onGridKeydown);\n  dom.gridRight.addEventListener(\"keydown\", gridNav.onGridKeydown);\n\n  dom.timeSingle.hour.addEventListener(\"change\", timeMgr.onTimeSingleChange);\n  dom.timeSingle.minute.addEventListener(\"change\", timeMgr.onTimeSingleChange);\n  dom.timeSingle.second.addEventListener(\"change\", timeMgr.onTimeSingleChange);\n  dom.timeSingle.meridiem.addEventListener(\"change\", timeMgr.onTimeSingleChange);\n  dom.timeRangeStart.hour.addEventListener(\"change\", timeMgr.onTimeRangeStartChange);\n  dom.timeRangeStart.minute.addEventListener(\"change\", timeMgr.onTimeRangeStartChange);\n  dom.timeRangeStart.second.addEventListener(\"change\", timeMgr.onTimeRangeStartChange);\n  dom.timeRangeStart.meridiem.addEventListener(\"change\", timeMgr.onTimeRangeStartChange);\n  dom.timeRangeEnd.hour.addEventListener(\"change\", timeMgr.onTimeRangeEndChange);\n  dom.timeRangeEnd.minute.addEventListener(\"change\", timeMgr.onTimeRangeEndChange);\n  dom.timeRangeEnd.second.addEventListener(\"change\", timeMgr.onTimeRangeEndChange);\n  dom.timeRangeEnd.meridiem.addEventListener(\"change\", timeMgr.onTimeRangeEndChange);\n\n  // ── Media query listeners (defined after layout module is ready) ───────────\n  const onRangePresetsLayoutChange = (): void => {\n    cb.render();\n  };\n  const onCompactRangeLayoutChange = (): void => {\n    layout.layoutCompactRangePanes();\n    cb.render();\n  };\n  rangePresetsMediaQuery?.addEventListener(\"change\", onRangePresetsLayoutChange);\n  compactRangeMediaQuery?.addEventListener(\"change\", onCompactRangeLayoutChange);\n\n  // ── Grid selection helper ──────────────────────────────────────────────────\n  const monthIdx = (year: number, month: number): number => year * 12 + month;\n\n  const isActiveDateVisible = (date: Date, compactRange: boolean): boolean => {\n    const target = monthIdx(date.getFullYear(), date.getMonth());\n    const left = monthIdx(s.viewYear, s.viewMonth);\n    if (mode() !== \"range\" || compactRange) return target === left;\n    return target === left || target === left + 1;\n  };\n\n  const shouldPseudoSelectToday = (): boolean => mode() === \"single\" && s.selected === null;\n\n  const shouldShowApplyActions = (): boolean => {\n    if (usesApplyActions()) return true;\n    return mode() === \"range\" && Boolean(s.rangeStart || s.rangeEnd);\n  };\n\n  const getGridSelection = (): GridSelectionState => ({\n    mode: mode(),\n    selected: s.selected,\n    rangeStart: s.rangeStart,\n    rangeEnd: s.rangeEnd,\n    rangeHoverEnd: s.rangeHoverEnd,\n    shouldPseudoSelectToday: shouldPseudoSelectToday(),\n    now,\n    durationTipIdBase,\n    activeDate: s.activeDate,\n  });\n\n  // ── Render ─────────────────────────────────────────────────────────────────\n  function render(): void {\n    const isRange = mode() === \"range\";\n    const compactRange = isCompactRangeLayout();\n    if (!isActiveDateVisible(s.activeDate, compactRange)) {\n      s.activeDate = new Date(s.viewYear, s.viewMonth, 1);\n    }\n    dom.root.classList.toggle(\"cal--range\", isRange);\n    dom.root.classList.toggle(\"cal--range-compact\", compactRange);\n    dom.paneRight.hidden = !isRange || compactRange;\n    layout.layoutCompactRangePanes();\n    dom.rangeActions.hidden = !shouldShowApplyActions();\n    layout.layoutRangeHeaders();\n    fillMonthYearSelects(dom.monthSelect, dom.monthSelectRight, s.viewYear, s.viewMonth, s.options);\n    s.syncingYearInput = true;\n    syncYearInputs(dom.yearInput, dom.yearInputRight, s.viewYear, s.viewMonth);\n    s.syncingYearInput = false;\n    renderWeekdaysRow(dom.weekdaysRow, s.options);\n    renderWeekdaysRow(dom.weekdaysRowRight, s.options);\n    renderGrid(\n      dom.grid,\n      dom.gridRight,\n      s.viewYear,\n      s.viewMonth,\n      s.options,\n      getGridSelection(),\n      { onDayClick },\n      compactRange,\n    );\n    timeMgr.syncTimeSelectsFromValue();\n    timeMgr.updateTimeVisibility();\n    layout.updateResetVisibility();\n    layout.syncRangeActionLabels();\n    layout.syncRangePresetsPanel();\n    dom.btnPrev.disabled = !canGoPrevMonth(s.viewYear, s.viewMonth, s.options.minDate);\n    dom.btnNext.disabled = !canGoNextMonth(\n      s.viewYear,\n      s.viewMonth,\n      s.options.maxDate,\n      mode(),\n      compactRange,\n    );\n    s.inputController.applyInputMode();\n    s.inputController.syncInputFromState();\n  }\n\n  const renderGridsOnly = (): void => {\n    renderGrid(\n      dom.grid,\n      dom.gridRight,\n      s.viewYear,\n      s.viewMonth,\n      s.options,\n      getGridSelection(),\n      { onDayClick },\n      isCompactRangeLayout(),\n    );\n  };\n\n  // Bind render functions now that they are defined\n  cb.render = render;\n  cb.renderGridsOnly = renderGridsOnly;\n\n  // ── Public API ─────────────────────────────────────────────────────────────\n  const publicApi = createPublicApi({\n    s,\n    dom,\n    valueInput,\n    popover,\n    rangePresetsMediaQuery,\n    compactRangeMediaQuery,\n    onRangePresetsLayoutChange,\n    onCompactRangeLayoutChange,\n    onInputKeydown,\n    onGridKeydown: gridNav.onGridKeydown,\n    onGridMouseMove: updateRangeHoverFromPointer,\n    onGridMouseLeave,\n    mode,\n    usesApplyActions,\n    isCompactRangeLayout,\n    emitters,\n    showPanel,\n    cb,\n  });\n\n  s.inputController.applyInputMode();\n  s.inputController.syncInputFromState();\n  render();\n\n  return publicApi;\n};\n","import type { CalendarPickerAnchor } from \"./types\";\n\nexport const resolveCalendarInputs = (anchor: CalendarPickerAnchor): HTMLInputElement[] => {\n  if (anchor instanceof HTMLInputElement) return [anchor];\n  if (typeof anchor !== \"string\") {\n    throw new TypeError(\"dateFlow expects an HTMLInputElement or a CSS selector string\");\n  }\n\n  const selector = anchor.trim();\n  if (!selector.startsWith(\"#\") && !selector.startsWith(\".\")) {\n    throw new TypeError(\"dateFlow selector must start with # (id) or . (class)\");\n  }\n\n  if (selector.startsWith(\"#\")) {\n    const el = document.querySelector(selector);\n    if (!(el instanceof HTMLInputElement)) {\n      throw new TypeError(`dateFlow: no input element matches ${selector}`);\n    }\n    return [el];\n  }\n\n  const inputs = [...document.querySelectorAll(selector)].filter(\n    (node): node is HTMLInputElement => node instanceof HTMLInputElement,\n  );\n  if (inputs.length === 0) {\n    throw new TypeError(`dateFlow: no input elements match ${selector}`);\n  }\n  return inputs;\n};\n","import { buildCalendarPicker } from \"./buildCalendarPicker\";\nimport { resolveCalendarInputs } from \"./resolveInputs\";\nimport type { CalendarOptions, CalendarPickerAnchor, CalendarPickerInstance } from \"./types\";\n\nexport function dateFlow(\n  anchor: HTMLInputElement,\n  initial?: CalendarOptions,\n): CalendarPickerInstance;\nexport function dateFlow(selector: `#${string}`, initial?: CalendarOptions): CalendarPickerInstance;\nexport function dateFlow(\n  selector: `.${string}`,\n  initial?: CalendarOptions,\n): CalendarPickerInstance[];\nexport function dateFlow(\n  anchor: CalendarPickerAnchor,\n  initial: CalendarOptions = {},\n): CalendarPickerInstance | CalendarPickerInstance[] {\n  const inputs = resolveCalendarInputs(anchor);\n  const pickers = inputs.map((input) => buildCalendarPicker(input, initial));\n  if (typeof anchor === \"string\" && anchor.trim().startsWith(\".\")) {\n    return pickers;\n  }\n  return pickers[0]!;\n}\n"],"mappings":"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"}