@kalyx/react 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +67 -58
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +160 -162
  5. package/dist/index.d.ts +742 -17
  6. package/dist/index.js +2137 -11
  7. package/dist/index.js.map +1 -1
  8. package/package.json +2 -2
  9. package/dist/components/DatePicker/Calendar.d.ts +0 -23
  10. package/dist/components/DatePicker/Calendar.d.ts.map +0 -1
  11. package/dist/components/DatePicker/Calendar.js +0 -127
  12. package/dist/components/DatePicker/Calendar.js.map +0 -1
  13. package/dist/components/DatePicker/Input.d.ts +0 -7
  14. package/dist/components/DatePicker/Input.d.ts.map +0 -1
  15. package/dist/components/DatePicker/Input.js +0 -73
  16. package/dist/components/DatePicker/Input.js.map +0 -1
  17. package/dist/components/DatePicker/MonthGrid.d.ts +0 -34
  18. package/dist/components/DatePicker/MonthGrid.d.ts.map +0 -1
  19. package/dist/components/DatePicker/MonthGrid.js +0 -54
  20. package/dist/components/DatePicker/MonthGrid.js.map +0 -1
  21. package/dist/components/DatePicker/Popover.d.ts +0 -6
  22. package/dist/components/DatePicker/Popover.d.ts.map +0 -1
  23. package/dist/components/DatePicker/Popover.js +0 -72
  24. package/dist/components/DatePicker/Popover.js.map +0 -1
  25. package/dist/components/DatePicker/Root.d.ts +0 -46
  26. package/dist/components/DatePicker/Root.d.ts.map +0 -1
  27. package/dist/components/DatePicker/Root.js +0 -90
  28. package/dist/components/DatePicker/Root.js.map +0 -1
  29. package/dist/components/DatePicker/Trigger.d.ts +0 -6
  30. package/dist/components/DatePicker/Trigger.d.ts.map +0 -1
  31. package/dist/components/DatePicker/Trigger.js +0 -21
  32. package/dist/components/DatePicker/Trigger.js.map +0 -1
  33. package/dist/components/DatePicker/YearGrid.d.ts +0 -29
  34. package/dist/components/DatePicker/YearGrid.d.ts.map +0 -1
  35. package/dist/components/DatePicker/YearGrid.js +0 -53
  36. package/dist/components/DatePicker/YearGrid.js.map +0 -1
  37. package/dist/components/DatePicker/index.d.ts +0 -48
  38. package/dist/components/DatePicker/index.d.ts.map +0 -1
  39. package/dist/components/DatePicker/index.js +0 -42
  40. package/dist/components/DatePicker/index.js.map +0 -1
  41. package/dist/components/DateTimePicker/Input.d.ts +0 -12
  42. package/dist/components/DateTimePicker/Input.d.ts.map +0 -1
  43. package/dist/components/DateTimePicker/Input.js +0 -41
  44. package/dist/components/DateTimePicker/Input.js.map +0 -1
  45. package/dist/components/DateTimePicker/Root.d.ts +0 -60
  46. package/dist/components/DateTimePicker/Root.d.ts.map +0 -1
  47. package/dist/components/DateTimePicker/Root.js +0 -140
  48. package/dist/components/DateTimePicker/Root.js.map +0 -1
  49. package/dist/components/DateTimePicker/index.d.ts +0 -55
  50. package/dist/components/DateTimePicker/index.d.ts.map +0 -1
  51. package/dist/components/DateTimePicker/index.js +0 -55
  52. package/dist/components/DateTimePicker/index.js.map +0 -1
  53. package/dist/components/RangePicker/Calendar.d.ts +0 -24
  54. package/dist/components/RangePicker/Calendar.d.ts.map +0 -1
  55. package/dist/components/RangePicker/Calendar.js +0 -134
  56. package/dist/components/RangePicker/Calendar.js.map +0 -1
  57. package/dist/components/RangePicker/Input.d.ts +0 -14
  58. package/dist/components/RangePicker/Input.d.ts.map +0 -1
  59. package/dist/components/RangePicker/Input.js +0 -38
  60. package/dist/components/RangePicker/Input.js.map +0 -1
  61. package/dist/components/RangePicker/Popover.d.ts +0 -6
  62. package/dist/components/RangePicker/Popover.d.ts.map +0 -1
  63. package/dist/components/RangePicker/Popover.js +0 -71
  64. package/dist/components/RangePicker/Popover.js.map +0 -1
  65. package/dist/components/RangePicker/Presets.d.ts +0 -49
  66. package/dist/components/RangePicker/Presets.d.ts.map +0 -1
  67. package/dist/components/RangePicker/Presets.js +0 -117
  68. package/dist/components/RangePicker/Presets.js.map +0 -1
  69. package/dist/components/RangePicker/Root.d.ts +0 -40
  70. package/dist/components/RangePicker/Root.d.ts.map +0 -1
  71. package/dist/components/RangePicker/Root.js +0 -138
  72. package/dist/components/RangePicker/Root.js.map +0 -1
  73. package/dist/components/RangePicker/index.d.ts +0 -48
  74. package/dist/components/RangePicker/index.d.ts.map +0 -1
  75. package/dist/components/RangePicker/index.js +0 -43
  76. package/dist/components/RangePicker/index.js.map +0 -1
  77. package/dist/components/TimePicker/AmPmToggle.d.ts +0 -15
  78. package/dist/components/TimePicker/AmPmToggle.d.ts.map +0 -1
  79. package/dist/components/TimePicker/AmPmToggle.js +0 -29
  80. package/dist/components/TimePicker/AmPmToggle.js.map +0 -1
  81. package/dist/components/TimePicker/HourList.d.ts +0 -18
  82. package/dist/components/TimePicker/HourList.d.ts.map +0 -1
  83. package/dist/components/TimePicker/HourList.js +0 -71
  84. package/dist/components/TimePicker/HourList.js.map +0 -1
  85. package/dist/components/TimePicker/Input.d.ts +0 -9
  86. package/dist/components/TimePicker/Input.d.ts.map +0 -1
  87. package/dist/components/TimePicker/Input.js +0 -37
  88. package/dist/components/TimePicker/Input.js.map +0 -1
  89. package/dist/components/TimePicker/MinuteList.d.ts +0 -15
  90. package/dist/components/TimePicker/MinuteList.d.ts.map +0 -1
  91. package/dist/components/TimePicker/MinuteList.js +0 -62
  92. package/dist/components/TimePicker/MinuteList.js.map +0 -1
  93. package/dist/components/TimePicker/Root.d.ts +0 -38
  94. package/dist/components/TimePicker/Root.d.ts.map +0 -1
  95. package/dist/components/TimePicker/Root.js +0 -40
  96. package/dist/components/TimePicker/Root.js.map +0 -1
  97. package/dist/components/TimePicker/index.d.ts +0 -32
  98. package/dist/components/TimePicker/index.d.ts.map +0 -1
  99. package/dist/components/TimePicker/index.js +0 -27
  100. package/dist/components/TimePicker/index.js.map +0 -1
  101. package/dist/context/DatePickerContext.d.ts +0 -49
  102. package/dist/context/DatePickerContext.d.ts.map +0 -1
  103. package/dist/context/DatePickerContext.js +0 -18
  104. package/dist/context/DatePickerContext.js.map +0 -1
  105. package/dist/context/RangePickerContext.d.ts +0 -53
  106. package/dist/context/RangePickerContext.d.ts.map +0 -1
  107. package/dist/context/RangePickerContext.js +0 -18
  108. package/dist/context/RangePickerContext.js.map +0 -1
  109. package/dist/context/TimePickerContext.d.ts +0 -29
  110. package/dist/context/TimePickerContext.d.ts.map +0 -1
  111. package/dist/context/TimePickerContext.js +0 -18
  112. package/dist/context/TimePickerContext.js.map +0 -1
  113. package/dist/hooks/useDatePicker.d.ts +0 -63
  114. package/dist/hooks/useDatePicker.d.ts.map +0 -1
  115. package/dist/hooks/useDatePicker.js +0 -82
  116. package/dist/hooks/useDatePicker.js.map +0 -1
  117. package/dist/hooks/useRangePicker.d.ts +0 -67
  118. package/dist/hooks/useRangePicker.d.ts.map +0 -1
  119. package/dist/hooks/useRangePicker.js +0 -116
  120. package/dist/hooks/useRangePicker.js.map +0 -1
  121. package/dist/hooks/useTimePicker.d.ts +0 -63
  122. package/dist/hooks/useTimePicker.d.ts.map +0 -1
  123. package/dist/hooks/useTimePicker.js +0 -69
  124. package/dist/hooks/useTimePicker.js.map +0 -1
  125. package/dist/index.d.ts.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAE5B,OAAO;AACP,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,IAAI;AACJ,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAqDzD,+BAA+B;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"sources":["../src/context/DatePickerContext.ts","../src/components/DatePicker/Root.tsx","../src/components/DatePicker/Input.tsx","../src/components/DatePicker/Trigger.tsx","../src/components/DatePicker/Popover.tsx","../src/components/DatePicker/Calendar.tsx","../src/components/DatePicker/MonthGrid.tsx","../src/components/DatePicker/YearGrid.tsx","../src/components/DatePicker/index.ts","../src/context/RangePickerContext.ts","../src/components/RangePicker/Root.tsx","../src/components/RangePicker/Input.tsx","../src/components/RangePicker/Popover.tsx","../src/components/RangePicker/Calendar.tsx","../src/components/RangePicker/Presets.tsx","../src/components/RangePicker/index.ts","../src/context/TimePickerContext.ts","../src/components/TimePicker/Root.tsx","../src/components/TimePicker/Input.tsx","../src/components/TimePicker/HourList.tsx","../src/components/TimePicker/MinuteList.tsx","../src/components/TimePicker/AmPmToggle.tsx","../src/components/TimePicker/index.ts","../src/components/DateTimePicker/Root.tsx","../src/components/DateTimePicker/Input.tsx","../src/components/DateTimePicker/index.ts","../src/hooks/useDatePicker.ts","../src/hooks/useRangePicker.ts","../src/hooks/useTimePicker.ts"],"names":["DatePickerInput","useState","useCallback","jsx","forwardRef","DatePickerTrigger","useRef","useEffect","jsxs","useMemo","createContext","useContext","DateFnsAdapter","useId","RangePickerInput","useFloating","offset","flip","shift","autoUpdate","srOnly","getWeekdayNames","getCalendarDays","formatMonthYear","formatFullDate","isDateDisabled","setTime","setTimeOnIso","TimePickerInput","to12Hour","to24Hour","getDefaultIso","getTime","DateTimePickerInput","formatTimeString","EMPTY_RANGE","generateHours","generateMinutes"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext } from 'react';\nimport type { MutableRefObject } from 'react';\nimport type { DateAdapter, DisabledRule, ISODateString, WeekStartsOn } from '@kalyx/core';\n\nexport interface DatePickerContextValue {\n /** Floating UI reference element (set by Input/Trigger, read by Popover) */\n referenceRef: MutableRefObject<HTMLElement | null>;\n /** Currently selected date (ISO 8601 UTC) */\n value: ISODateString | null;\n /** Date selection handler */\n selectDate: (iso: ISODateString | null) => void;\n /** Popover open state */\n isOpen: boolean;\n /** Open the popover */\n open: () => void;\n /** Close the popover */\n close: () => void;\n /** Toggle the popover */\n toggle: () => void;\n /** Currently displayed month (ISO string) */\n viewMonth: ISODateString;\n /** Change the displayed month */\n setViewMonth: (iso: ISODateString) => void;\n /** Currently focused date in the calendar */\n focusedDate: ISODateString;\n /** Change the focused date */\n setFocusedDate: (iso: ISODateString) => void;\n /** Date adapter */\n adapter: DateAdapter;\n /** Disabled rules */\n disabled: DisabledRule[];\n /** Week start day */\n weekStartsOn: WeekStartsOn;\n /** Date display format */\n displayFormat: string;\n /** BCP 47 locale (e.g., \"en-US\", \"ko-KR\") */\n locale: string;\n /** Whether entire picker is disabled */\n isDisabled: boolean;\n /** Read-only */\n isReadOnly: boolean;\n /** Unique ID (useId-based) */\n pickerId: string;\n}\n\nexport const DatePickerContext = createContext<DatePickerContextValue | null>(null);\n\n/**\n * Consume DatePickerContext.\n * Throws a clear error when called outside of DatePicker.Root.\n */\nexport function useDatePickerContext(componentName: string): DatePickerContextValue {\n const context = useContext(DatePickerContext);\n if (!context) {\n throw new Error(\n `[${componentName}] DatePicker.Root 내부에서 사용해야 합니다.\\n\\n` +\n '올바른 사용법:\\n' +\n ' <DatePicker>\\n' +\n ` <DatePicker.${componentName.replace('DatePicker.', '')} />\\n` +\n ' </DatePicker>'\n );\n }\n return context;\n}\n","import { useCallback, useId, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { DateFnsAdapter } from '@kalyx/core';\nimport type { DateAdapter, DisabledRule, ISODateString, WeekStartsOn } from '@kalyx/core';\nimport { DatePickerContext } from '../../context/DatePickerContext.js';\nimport type { DatePickerContextValue } from '../../context/DatePickerContext.js';\n\n/**\n * Props for the DatePicker Root component.\n *\n * @example Controlled\n * ```tsx\n * <DatePicker value={date} onChange={setDate}>\n * <DatePicker.Input />\n * <DatePicker.Popover>\n * <DatePicker.Calendar />\n * </DatePicker.Popover>\n * </DatePicker>\n * ```\n *\n * @example Uncontrolled\n * ```tsx\n * <DatePicker defaultValue=\"2026-01-15T00:00:00.000Z\">\n * <DatePicker.Input />\n * </DatePicker>\n * ```\n */\nexport interface DatePickerRootProps {\n /** Selected date (controlled, ISO 8601 UTC). `null` means empty. */\n value?: ISODateString | null;\n /** Initial date (uncontrolled) */\n defaultValue?: ISODateString;\n /** Callback fired when the date changes */\n onChange?: (value: ISODateString | null) => void;\n /** Disabled rules */\n disabled?: DisabledRule[] | boolean;\n /** Read-only */\n readOnly?: boolean;\n /** Week start day */\n weekStartsOn?: WeekStartsOn;\n /** Date display format */\n displayFormat?: string;\n /** BCP 47 locale (e.g., \"en-US\", \"ko-KR\", \"ja-JP\") */\n locale?: string;\n /** Date adapter */\n adapter?: DateAdapter;\n /** Child components */\n children: ReactNode;\n}\n\nexport function DatePickerRoot({\n value: controlledValue,\n defaultValue,\n onChange,\n disabled = false,\n readOnly = false,\n weekStartsOn = 0,\n displayFormat = 'yyyy-MM-dd',\n locale = 'en-US',\n adapter = DateFnsAdapter,\n children,\n}: DatePickerRootProps) {\n const pickerId = useId();\n const isControlled = useRef(controlledValue !== undefined).current;\n const referenceRef = useRef<HTMLElement | null>(null);\n\n // Internal state for uncontrolled mode\n const [uncontrolledValue, setUncontrolledValue] = useState<ISODateString | null>(\n defaultValue ?? null,\n );\n\n const currentValue = isControlled ? (controlledValue ?? null) : uncontrolledValue;\n\n const [isOpen, setIsOpen] = useState(false);\n\n const [viewMonth, setViewMonth] = useState<ISODateString>(\n currentValue ?? adapter.today(),\n );\n\n const [focusedDate, setFocusedDate] = useState<ISODateString>(\n currentValue ?? adapter.today(),\n );\n\n const isDisabled = typeof disabled === 'boolean' ? disabled : false;\n const disabledRules: DisabledRule[] = Array.isArray(disabled) ? disabled : [];\n\n const selectDate = useCallback(\n (iso: ISODateString | null) => {\n if (isDisabled || readOnly) return;\n\n if (!isControlled) {\n setUncontrolledValue(iso);\n }\n onChange?.(iso);\n\n // Close the popover after selection\n setIsOpen(false);\n },\n [isControlled, isDisabled, readOnly, onChange],\n );\n\n const open = useCallback(() => {\n if (isDisabled || readOnly) return;\n setIsOpen(true);\n // Reset the view to the current value or today when opening\n const target = currentValue ?? adapter.today();\n setViewMonth(target);\n setFocusedDate(target);\n }, [isDisabled, readOnly, currentValue, adapter]);\n\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const toggle = useCallback(() => {\n if (isOpen) {\n close();\n } else {\n open();\n }\n }, [isOpen, open, close]);\n\n const contextValue: DatePickerContextValue = useMemo(\n () => ({\n referenceRef,\n value: currentValue,\n selectDate,\n isOpen,\n open,\n close,\n toggle,\n viewMonth,\n setViewMonth,\n focusedDate,\n setFocusedDate,\n adapter,\n disabled: disabledRules,\n weekStartsOn,\n displayFormat,\n locale,\n isDisabled,\n isReadOnly: readOnly,\n pickerId,\n }),\n [\n currentValue,\n selectDate,\n isOpen,\n open,\n close,\n toggle,\n viewMonth,\n focusedDate,\n adapter,\n disabledRules,\n weekStartsOn,\n displayFormat,\n locale,\n isDisabled,\n readOnly,\n pickerId,\n ],\n );\n\n return (\n <DatePickerContext.Provider value={contextValue}>\n {children}\n </DatePickerContext.Provider>\n );\n}\n","import { forwardRef, useCallback, useState } from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport { parseInputValue } from '@kalyx/core';\nimport { useDatePickerContext } from '../../context/DatePickerContext.js';\n\nexport interface DatePickerInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {\n /** Date display format (defaults to parent's displayFormat) */\n format?: string;\n}\n\nexport const DatePickerInput = forwardRef<HTMLInputElement, DatePickerInputProps>(\n function DatePickerInput({ format: formatProp, onFocus, onBlur, onKeyDown, ...props }, ref) {\n const ctx = useDatePickerContext('DatePicker.Input');\n const displayFormat = formatProp ?? ctx.displayFormat;\n\n // Text currently being edited (edit mode)\n const [inputText, setInputText] = useState<string | null>(null);\n\n const displayValue =\n inputText !== null\n ? inputText\n : ctx.value\n ? ctx.adapter.format(ctx.value, displayFormat)\n : '';\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n ctx.open();\n onFocus?.(e);\n },\n [ctx, onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n if (inputText !== null) {\n const parsed = parseInputValue(inputText, displayFormat, ctx.adapter);\n if (parsed) {\n ctx.selectDate(parsed);\n }\n setInputText(null);\n }\n onBlur?.(e);\n },\n [inputText, displayFormat, ctx, onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const text = e.target.value;\n setInputText(text);\n\n if (!text) {\n ctx.selectDate(null);\n setInputText(null);\n return;\n }\n\n const parsed = parseInputValue(text, displayFormat, ctx.adapter);\n if (parsed) {\n ctx.selectDate(parsed);\n setInputText(null);\n }\n },\n [displayFormat, ctx],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Escape') {\n ctx.close();\n } else if (e.key === 'Enter') {\n if (inputText !== null) {\n const parsed = parseInputValue(inputText, displayFormat, ctx.adapter);\n if (parsed) {\n ctx.selectDate(parsed);\n setInputText(null);\n }\n }\n } else if (e.key === 'ArrowDown' && !ctx.isOpen) {\n e.preventDefault();\n ctx.open();\n }\n onKeyDown?.(e);\n },\n [ctx, inputText, displayFormat, onKeyDown],\n );\n\n const calendarId = `${ctx.pickerId}-calendar`;\n\n return (\n <input\n ref={(node) => {\n // Register as Floating UI reference\n ctx.referenceRef.current = node;\n // Forward the ref\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={ctx.isOpen}\n aria-haspopup=\"dialog\"\n aria-controls={ctx.isOpen ? calendarId : undefined}\n aria-autocomplete=\"none\"\n autoComplete=\"off\"\n value={displayValue}\n disabled={ctx.isDisabled || props.disabled}\n readOnly={ctx.isReadOnly}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n },\n);\n","import { forwardRef, useCallback } from 'react';\nimport type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { useDatePickerContext } from '../../context/DatePickerContext.js';\n\nexport interface DatePickerTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {\n children?: ReactNode;\n}\n\nexport const DatePickerTrigger = forwardRef<HTMLButtonElement, DatePickerTriggerProps>(\n function DatePickerTrigger({ onClick, children, ...props }, ref) {\n const ctx = useDatePickerContext('DatePicker.Trigger');\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.toggle();\n onClick?.(e);\n },\n [ctx, onClick],\n );\n\n const calendarId = `${ctx.pickerId}-calendar`;\n\n return (\n <button\n ref={(node) => {\n // If there's no Input, Trigger becomes the reference\n if (!ctx.referenceRef.current) ctx.referenceRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n type=\"button\"\n tabIndex={0}\n aria-label={ctx.isOpen ? '캘린더 닫기' : '캘린더 열기'}\n aria-expanded={ctx.isOpen}\n aria-controls={ctx.isOpen ? calendarId : undefined}\n disabled={ctx.isDisabled || props.disabled}\n onClick={handleClick}\n {...props}\n >\n {children ?? (\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5 1v2M11 1v2M1 6h14M3 3h10a2 2 0 012 2v8a2 2 0 01-2 2H3a2 2 0 01-2-2V5a2 2 0 012-2z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </button>\n );\n },\n);\n","import { useEffect, useRef } from 'react';\nimport type { HTMLAttributes, ReactNode } from 'react';\nimport {\n useFloating,\n autoUpdate,\n offset,\n flip,\n shift,\n} from '@floating-ui/react';\nimport { useDatePickerContext } from '../../context/DatePickerContext.js';\n\nexport interface DatePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {\n children?: ReactNode;\n}\n\nexport function DatePickerPopover({ children, ...props }: DatePickerPopoverProps) {\n const ctx = useDatePickerContext('DatePicker.Popover');\n const calendarId = `${ctx.pickerId}-calendar`;\n const floatingRef = useRef<HTMLDivElement | null>(null);\n\n const { refs, floatingStyles } = useFloating({\n open: ctx.isOpen,\n placement: 'bottom-start',\n middleware: [offset(4), flip(), shift({ padding: 8 })],\n whileElementsMounted: autoUpdate,\n });\n\n // Wire the context's referenceRef into Floating UI\n useEffect(() => {\n if (ctx.referenceRef.current) {\n refs.setReference(ctx.referenceRef.current);\n }\n }, [ctx.referenceRef, refs, ctx.isOpen]);\n\n // Focus restoration: restore focus to the previous element on close\n const previousFocusRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (ctx.isOpen) {\n previousFocusRef.current = document.activeElement as HTMLElement;\n } else if (previousFocusRef.current) {\n previousFocusRef.current.focus();\n previousFocusRef.current = null;\n }\n }, [ctx.isOpen]);\n\n // Detect outside clicks\n useEffect(() => {\n if (!ctx.isOpen) return;\n\n function handleClickOutside(e: MouseEvent) {\n const floating = floatingRef.current;\n const reference = ctx.referenceRef.current;\n const target = e.target as Node;\n if (floating && !floating.contains(target) && (!reference || !reference.contains(target))) {\n ctx.close();\n }\n }\n\n // Register on next tick to skip the current click event\n const timer = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside);\n }, 0);\n\n return () => {\n clearTimeout(timer);\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [ctx.isOpen, ctx]);\n\n useEffect(() => {\n if (!ctx.isOpen) return;\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n ctx.close();\n }\n }\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [ctx.isOpen, ctx]);\n\n if (!ctx.isOpen) return null;\n\n return (\n <div\n ref={(node) => {\n floatingRef.current = node;\n refs.setFloating(node);\n }}\n id={calendarId}\n role=\"dialog\"\n aria-label=\"날짜 선택\"\n aria-modal=\"false\"\n style={floatingStyles}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport { getCalendarDays, isDateDisabled, getWeekdayNames, formatMonthYear, formatFullDate } from '@kalyx/core';\nimport type { CalendarDay } from '@kalyx/core';\nimport { useDatePickerContext } from '../../context/DatePickerContext.js';\n\nexport interface DatePickerCalendarClassNames {\n root?: string;\n header?: string;\n title?: string;\n navButton?: string;\n grid?: string;\n gridRow?: string;\n gridCell?: string;\n day?: string;\n daySelected?: string;\n dayToday?: string;\n dayDisabled?: string;\n dayOutsideMonth?: string;\n weekdayHeader?: string;\n}\n\nexport interface DatePickerCalendarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {\n classNames?: DatePickerCalendarClassNames;\n /** Called when the title (\"January 2026\") is clicked. Useful for switching to Month/Year views. */\n onTitleClick?: () => void;\n}\n\n/** Visually-hidden style for screen-reader-only content */\nconst srOnly: React.CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n\nexport function DatePickerCalendar({ classNames, onTitleClick, ...props }: DatePickerCalendarProps) {\n const ctx = useDatePickerContext('DatePicker.Calendar');\n const gridRef = useRef<HTMLTableElement>(null);\n const [announcement, setAnnouncement] = useState('');\n\n const { adapter, viewMonth, focusedDate, weekStartsOn, disabled, locale } = ctx;\n const weekdays = getWeekdayNames(locale, weekStartsOn);\n\n const weeks = getCalendarDays(viewMonth, adapter, {\n weekStartsOn,\n selected: ctx.value,\n focusedDate,\n disabled,\n });\n\n const year = adapter.getYear(viewMonth);\n const month = adapter.getMonth(viewMonth);\n const title = formatMonthYear(year, month, locale);\n\n // Move focus to the focused day cell\n useEffect(() => {\n if (!ctx.isOpen || !gridRef.current) return;\n const focusedButton = gridRef.current.querySelector<HTMLButtonElement>(\n '[data-focused=\"true\"]',\n );\n focusedButton?.focus();\n }, [focusedDate, ctx.isOpen]);\n\n const navigateMonth = useCallback(\n (direction: number) => {\n const newMonth = adapter.addMonths(viewMonth, direction);\n ctx.setViewMonth(newMonth);\n ctx.setFocusedDate(adapter.startOfMonth(newMonth));\n const y = adapter.getYear(newMonth);\n const m = adapter.getMonth(newMonth);\n setAnnouncement(formatMonthYear(y, m, locale));\n },\n [adapter, viewMonth, ctx, locale],\n );\n\n const handleDayClick = useCallback(\n (day: CalendarDay) => {\n if (day.isDisabled) return;\n ctx.selectDate(day.isoString);\n setAnnouncement(formatFullDate(day.isoString, locale));\n },\n [ctx, locale],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n let newFocused: string | null = null;\n\n switch (e.key) {\n case 'ArrowLeft':\n newFocused = adapter.addDays(focusedDate, -1);\n break;\n case 'ArrowRight':\n newFocused = adapter.addDays(focusedDate, 1);\n break;\n case 'ArrowUp':\n newFocused = adapter.addDays(focusedDate, -7);\n break;\n case 'ArrowDown':\n newFocused = adapter.addDays(focusedDate, 7);\n break;\n case 'PageUp':\n if (e.shiftKey) {\n newFocused = adapter.addYears(focusedDate, -1);\n } else {\n newFocused = adapter.addMonths(focusedDate, -1);\n }\n break;\n case 'PageDown':\n if (e.shiftKey) {\n newFocused = adapter.addYears(focusedDate, 1);\n } else {\n newFocused = adapter.addMonths(focusedDate, 1);\n }\n break;\n case 'Home':\n newFocused = adapter.startOfWeek(focusedDate, weekStartsOn);\n break;\n case 'End':\n newFocused = adapter.endOfWeek(focusedDate, weekStartsOn);\n // endOfWeek returns 23:59:59; normalize to start of day\n newFocused = adapter.startOfDay(newFocused);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!isDateDisabled(focusedDate, disabled, adapter)) {\n ctx.selectDate(focusedDate);\n }\n return;\n case 'Escape':\n ctx.close();\n return;\n default:\n return;\n }\n\n if (newFocused) {\n e.preventDefault();\n ctx.setFocusedDate(newFocused);\n\n // Update the view when focus moves outside the current view month\n if (!adapter.isSameMonth(newFocused, viewMonth)) {\n ctx.setViewMonth(newFocused);\n }\n }\n },\n [adapter, focusedDate, viewMonth, weekStartsOn, disabled, ctx],\n );\n\n return (\n <div className={classNames?.root} {...props}>\n <div className={classNames?.header}>\n <button\n type=\"button\"\n className={classNames?.navButton}\n onClick={() => navigateMonth(-1)}\n aria-label=\"이전 달\"\n >\n &lt;\n </button>\n {onTitleClick ? (\n <button\n type=\"button\"\n className={classNames?.title}\n onClick={onTitleClick}\n aria-live=\"polite\"\n >\n {title}\n </button>\n ) : (\n <span className={classNames?.title} aria-live=\"polite\">\n {title}\n </span>\n )}\n <button\n type=\"button\"\n className={classNames?.navButton}\n onClick={() => navigateMonth(1)}\n aria-label=\"다음 달\"\n >\n &gt;\n </button>\n </div>\n\n <table\n ref={gridRef}\n role=\"grid\"\n aria-label={title}\n className={classNames?.grid}\n onKeyDown={handleKeyDown}\n >\n <thead>\n <tr role=\"row\">\n {weekdays.map((day) => (\n <th\n key={day.short}\n role=\"columnheader\"\n abbr={day.full}\n scope=\"col\"\n className={classNames?.weekdayHeader}\n >\n {day.short}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((week, weekIndex) => (\n <tr key={weekIndex} role=\"row\" className={classNames?.gridRow}>\n {week.map((day) => {\n const dayClasses = [\n classNames?.day,\n day.isSelected && classNames?.daySelected,\n day.isToday && classNames?.dayToday,\n day.isDisabled && classNames?.dayDisabled,\n !day.isCurrentMonth && classNames?.dayOutsideMonth,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <td\n key={day.isoString}\n role=\"gridcell\"\n aria-selected={day.isSelected || undefined}\n aria-disabled={day.isDisabled || undefined}\n aria-current={day.isToday ? 'date' : undefined}\n className={classNames?.gridCell}\n >\n <button\n type=\"button\"\n tabIndex={day.isFocused ? 0 : -1}\n disabled={day.isDisabled}\n data-focused={day.isFocused || undefined}\n data-selected={day.isSelected || undefined}\n data-today={day.isToday || undefined}\n data-outside-month={!day.isCurrentMonth || undefined}\n className={dayClasses}\n onClick={() => handleDayClick(day)}\n aria-label={formatFullDate(day.isoString, locale)}\n >\n {day.dayNumber}\n </button>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" style={srOnly}>\n {announcement}\n </div>\n </div>\n );\n}\n","import { useCallback } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport { getMonthName } from '@kalyx/core';\nimport { useDatePickerContext } from '../../context/DatePickerContext.js';\n\nexport interface DatePickerMonthGridClassNames {\n root?: string;\n header?: string;\n title?: string;\n navButton?: string;\n grid?: string;\n month?: string;\n monthSelected?: string;\n monthCurrent?: string;\n}\n\nexport interface DatePickerMonthGridProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {\n classNames?: DatePickerMonthGridClassNames;\n /** Called when a month is selected. Typically used to switch back to the day view. */\n onSelect?: () => void;\n /** Called when the title (year) is clicked. Useful for switching to the year view. */\n onTitleClick?: () => void;\n}\n\n/**\n * DatePicker.MonthGrid — Quickly pick a month from a 12-month grid.\n * Click Calendar title -> MonthGrid -> click a month -> back to Calendar.\n *\n * @example\n * ```tsx\n * {view === 'months' && (\n * <DatePicker.MonthGrid\n * onSelect={() => setView('days')}\n * onTitleClick={() => setView('years')}\n * />\n * )}\n * ```\n */\nexport function DatePickerMonthGrid({\n classNames,\n onSelect,\n onTitleClick,\n ...props\n}: DatePickerMonthGridProps) {\n const ctx = useDatePickerContext('DatePicker.MonthGrid');\n const { adapter, viewMonth, locale } = ctx;\n\n const currentYear = adapter.getYear(viewMonth);\n const currentMonth = adapter.getMonth(viewMonth);\n const todayMonth = adapter.getMonth(adapter.today());\n const todayYear = adapter.getYear(adapter.today());\n\n const navigateYear = useCallback(\n (direction: number) => {\n const newDate = adapter.addYears(viewMonth, direction);\n ctx.setViewMonth(newDate);\n },\n [adapter, viewMonth, ctx],\n );\n\n const handleMonthSelect = useCallback(\n (monthIndex: number) => {\n // Set viewMonth to the first day of the selected month in the current year\n const target = new Date(Date.UTC(currentYear, monthIndex, 1)).toISOString();\n ctx.setViewMonth(target);\n ctx.setFocusedDate(target);\n onSelect?.();\n },\n [currentYear, ctx, onSelect],\n );\n\n const months = Array.from({ length: 12 }, (_, i) => ({\n index: i,\n name: getMonthName(i, locale),\n isSelected: i === currentMonth,\n isCurrent: i === todayMonth && currentYear === todayYear,\n }));\n\n return (\n <div className={classNames?.root} {...props}>\n <div className={classNames?.header}>\n <button\n type=\"button\"\n className={classNames?.navButton}\n onClick={() => navigateYear(-1)}\n aria-label=\"이전 년\"\n >\n &lt;\n </button>\n {onTitleClick ? (\n <button\n type=\"button\"\n className={classNames?.title}\n onClick={onTitleClick}\n >\n {currentYear}\n </button>\n ) : (\n <span className={classNames?.title}>{currentYear}</span>\n )}\n <button\n type=\"button\"\n className={classNames?.navButton}\n onClick={() => navigateYear(1)}\n aria-label=\"다음 년\"\n >\n &gt;\n </button>\n </div>\n\n <div\n role=\"grid\"\n aria-label={`${currentYear} months`}\n className={classNames?.grid}\n style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)' }}\n >\n {months.map((m) => {\n const monthClass = [\n classNames?.month,\n m.isSelected && classNames?.monthSelected,\n m.isCurrent && classNames?.monthCurrent,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <button\n key={m.index}\n type=\"button\"\n role=\"gridcell\"\n aria-selected={m.isSelected || undefined}\n aria-current={m.isCurrent ? 'date' : undefined}\n data-selected={m.isSelected || undefined}\n data-current={m.isCurrent || undefined}\n className={monthClass}\n onClick={() => handleMonthSelect(m.index)}\n >\n {m.name}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useCallback, useMemo } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport { useDatePickerContext } from '../../context/DatePickerContext.js';\n\nexport interface DatePickerYearGridClassNames {\n root?: string;\n header?: string;\n title?: string;\n navButton?: string;\n grid?: string;\n year?: string;\n yearSelected?: string;\n yearCurrent?: string;\n}\n\nexport interface DatePickerYearGridProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {\n classNames?: DatePickerYearGridClassNames;\n /** Called when a year is selected. Typically used to switch back to the month view. */\n onSelect?: () => void;\n}\n\n/**\n * DatePicker.YearGrid — Quickly pick a year from a 12-year grid.\n * Click MonthGrid title -> YearGrid -> click a year -> back to MonthGrid.\n *\n * @example\n * ```tsx\n * {view === 'years' && (\n * <DatePicker.YearGrid onSelect={() => setView('months')} />\n * )}\n * ```\n */\nexport function DatePickerYearGrid({\n classNames,\n onSelect,\n ...props\n}: DatePickerYearGridProps) {\n const ctx = useDatePickerContext('DatePicker.YearGrid');\n const { adapter, viewMonth } = ctx;\n\n const currentYear = adapter.getYear(viewMonth);\n const todayYear = adapter.getYear(adapter.today());\n\n // 12-year range (decade block containing the current year)\n const decadeStart = currentYear - (currentYear % 12);\n\n const navigateDecade = useCallback(\n (direction: number) => {\n const newDate = adapter.addYears(viewMonth, direction * 12);\n ctx.setViewMonth(newDate);\n },\n [adapter, viewMonth, ctx],\n );\n\n const handleYearSelect = useCallback(\n (year: number) => {\n const currentMonth = adapter.getMonth(viewMonth);\n const target = new Date(Date.UTC(year, currentMonth, 1)).toISOString();\n ctx.setViewMonth(target);\n ctx.setFocusedDate(target);\n onSelect?.();\n },\n [adapter, viewMonth, ctx, onSelect],\n );\n\n const years = useMemo(\n () =>\n Array.from({ length: 12 }, (_, i) => {\n const year = decadeStart + i;\n return {\n value: year,\n isSelected: year === currentYear,\n isCurrent: year === todayYear,\n };\n }),\n [decadeStart, currentYear, todayYear],\n );\n\n const rangeLabel = `${decadeStart}–${decadeStart + 11}`;\n\n return (\n <div className={classNames?.root} {...props}>\n <div className={classNames?.header}>\n <button\n type=\"button\"\n className={classNames?.navButton}\n onClick={() => navigateDecade(-1)}\n aria-label=\"이전 12년\"\n >\n &lt;\n </button>\n <span className={classNames?.title}>{rangeLabel}</span>\n <button\n type=\"button\"\n className={classNames?.navButton}\n onClick={() => navigateDecade(1)}\n aria-label=\"다음 12년\"\n >\n &gt;\n </button>\n </div>\n\n <div\n role=\"grid\"\n aria-label={rangeLabel}\n className={classNames?.grid}\n style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)' }}\n >\n {years.map((y) => {\n const yearClass = [\n classNames?.year,\n y.isSelected && classNames?.yearSelected,\n y.isCurrent && classNames?.yearCurrent,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <button\n key={y.value}\n type=\"button\"\n role=\"gridcell\"\n aria-selected={y.isSelected || undefined}\n aria-current={y.isCurrent ? 'date' : undefined}\n data-selected={y.isSelected || undefined}\n data-current={y.isCurrent || undefined}\n className={yearClass}\n onClick={() => handleYearSelect(y.value)}\n >\n {y.value}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import { DatePickerRoot } from './Root.js';\nimport { DatePickerInput } from './Input.js';\nimport { DatePickerTrigger } from './Trigger.js';\nimport { DatePickerPopover } from './Popover.js';\nimport { DatePickerCalendar } from './Calendar.js';\nimport { DatePickerMonthGrid } from './MonthGrid.js';\nimport { DatePickerYearGrid } from './YearGrid.js';\n\nimport type { DatePickerRootProps } from './Root.js';\nimport type { DatePickerInputProps } from './Input.js';\nimport type { DatePickerTriggerProps } from './Trigger.js';\nimport type { DatePickerPopoverProps } from './Popover.js';\nimport type { DatePickerCalendarProps, DatePickerCalendarClassNames } from './Calendar.js';\nimport type { DatePickerMonthGridProps, DatePickerMonthGridClassNames } from './MonthGrid.js';\nimport type { DatePickerYearGridProps, DatePickerYearGridClassNames } from './YearGrid.js';\n\n/**\n * DatePicker — Headless, SSR-safe React DatePicker\n *\n * @example Basic\n * ```tsx\n * <DatePicker value={date} onChange={setDate}>\n * <DatePicker.Input placeholder=\"날짜 선택\" />\n * <DatePicker.Popover>\n * <DatePicker.Calendar />\n * </DatePicker.Popover>\n * </DatePicker>\n * ```\n *\n * @example Month/Year quick navigation\n * ```tsx\n * const [view, setView] = useState('days');\n * <DatePicker value={date} onChange={setDate}>\n * <DatePicker.Input />\n * <DatePicker.Popover>\n * {view === 'days' && <DatePicker.Calendar onTitleClick={() => setView('months')} />}\n * {view === 'months' && <DatePicker.MonthGrid onSelect={() => setView('days')} onTitleClick={() => setView('years')} />}\n * {view === 'years' && <DatePicker.YearGrid onSelect={() => setView('months')} />}\n * </DatePicker.Popover>\n * </DatePicker>\n * ```\n */\nexport const DatePicker = Object.assign(DatePickerRoot, {\n Input: DatePickerInput,\n Trigger: DatePickerTrigger,\n Popover: DatePickerPopover,\n Calendar: DatePickerCalendar,\n MonthGrid: DatePickerMonthGrid,\n YearGrid: DatePickerYearGrid,\n});\n\nexport type {\n DatePickerRootProps,\n DatePickerInputProps,\n DatePickerTriggerProps,\n DatePickerPopoverProps,\n DatePickerCalendarProps,\n DatePickerCalendarClassNames,\n DatePickerMonthGridProps,\n DatePickerMonthGridClassNames,\n DatePickerYearGridProps,\n DatePickerYearGridClassNames,\n};\n","import { createContext, useContext } from 'react';\nimport type { MutableRefObject } from 'react';\nimport type {\n DateAdapter,\n DateRange,\n DisabledRule,\n ISODateString,\n WeekStartsOn,\n} from '@kalyx/core';\n\n/** Which part to select next (start | end) */\nexport type RangeSelectingTarget = 'start' | 'end';\n\nexport interface RangePickerContextValue {\n /** Floating UI reference element */\n referenceRef: MutableRefObject<HTMLElement | null>;\n /** Currently selected range */\n value: DateRange;\n /** Update the entire range object */\n setRange: (range: DateRange) => void;\n /** Single-date click; automatically decides start/end */\n selectDate: (iso: ISODateString) => void;\n /** Which part gets selected next (start first, then end) */\n selectingTarget: RangeSelectingTarget;\n /** Hovered date (for range preview) */\n hoverDate: ISODateString | null;\n setHoverDate: (iso: ISODateString | null) => void;\n /** Popover open state */\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n /** Currently displayed month */\n viewMonth: ISODateString;\n setViewMonth: (iso: ISODateString) => void;\n /** Currently focused date in the calendar */\n focusedDate: ISODateString;\n setFocusedDate: (iso: ISODateString) => void;\n /** Date adapter */\n adapter: DateAdapter;\n /** Disabled rules */\n disabled: DisabledRule[];\n /** Week start day */\n weekStartsOn: WeekStartsOn;\n /** Date display format */\n displayFormat: string;\n /** BCP 47 locale */\n locale: string;\n /** Whether entire picker is disabled */\n isDisabled: boolean;\n /** Read-only */\n isReadOnly: boolean;\n /** Unique ID */\n pickerId: string;\n}\n\nexport const RangePickerContext = createContext<RangePickerContextValue | null>(null);\n\n/**\n * Consume RangePickerContext.\n * Throws a clear error when called outside of RangePicker.Root.\n */\nexport function useRangePickerContext(componentName: string): RangePickerContextValue {\n const context = useContext(RangePickerContext);\n if (!context) {\n throw new Error(\n `[${componentName}] RangePicker.Root 내부에서 사용해야 합니다.\\n\\n` +\n '올바른 사용법:\\n' +\n ' <RangePicker>\\n' +\n ` <RangePicker.${componentName.replace('RangePicker.', '')} />\\n` +\n ' </RangePicker>',\n );\n }\n return context;\n}\n","import { useCallback, useId, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { DateFnsAdapter } from '@kalyx/core';\nimport type {\n DateAdapter,\n DateRange,\n DisabledRule,\n ISODateString,\n WeekStartsOn,\n} from '@kalyx/core';\nimport { RangePickerContext } from '../../context/RangePickerContext.js';\nimport type {\n RangePickerContextValue,\n RangeSelectingTarget,\n} from '../../context/RangePickerContext.js';\n\nconst EMPTY_RANGE: DateRange = { start: null, end: null };\n\n/**\n * Props for the RangePicker Root component.\n *\n * @example\n * ```tsx\n * <RangePicker value={range} onChange={setRange}>\n * <RangePicker.Input part=\"start\" />\n * <RangePicker.Input part=\"end\" />\n * <RangePicker.Popover>\n * <RangePicker.Calendar />\n * </RangePicker.Popover>\n * </RangePicker>\n * ```\n */\nexport interface RangePickerRootProps {\n /** Selected range (controlled). `{ start, end }` with ISO strings or null. */\n value?: DateRange;\n /** Initial range (uncontrolled) */\n defaultValue?: DateRange;\n /** Callback fired when the range changes */\n onChange?: (range: DateRange) => void;\n /** Disabled rules */\n disabled?: DisabledRule[] | boolean;\n /** Read-only */\n readOnly?: boolean;\n /** Week start day */\n weekStartsOn?: WeekStartsOn;\n /** Date display format */\n displayFormat?: string;\n /** BCP 47 locale */\n locale?: string;\n /** Date adapter */\n adapter?: DateAdapter;\n /** Child components */\n children: ReactNode;\n}\n\nexport function RangePickerRoot({\n value: controlledValue,\n defaultValue,\n onChange,\n disabled = false,\n readOnly = false,\n weekStartsOn = 0,\n displayFormat = 'yyyy-MM-dd',\n locale = 'en-US',\n adapter = DateFnsAdapter,\n children,\n}: RangePickerRootProps) {\n const pickerId = useId();\n const isControlled = useRef(controlledValue !== undefined).current;\n const referenceRef = useRef<HTMLElement | null>(null);\n\n // Internal state for uncontrolled mode\n const [uncontrolledValue, setUncontrolledValue] = useState<DateRange>(\n defaultValue ?? EMPTY_RANGE,\n );\n\n const currentValue = isControlled ? (controlledValue ?? EMPTY_RANGE) : uncontrolledValue;\n\n const [isOpen, setIsOpen] = useState(false);\n\n // Which part to select next (start first, then end)\n const [selectingTarget, setSelectingTarget] = useState<RangeSelectingTarget>('start');\n\n const [hoverDate, setHoverDate] = useState<ISODateString | null>(null);\n\n const [viewMonth, setViewMonth] = useState<ISODateString>(\n currentValue.start ?? adapter.today(),\n );\n\n const [focusedDate, setFocusedDate] = useState<ISODateString>(\n currentValue.start ?? adapter.today(),\n );\n\n const isDisabled = typeof disabled === 'boolean' ? disabled : false;\n const disabledRules: DisabledRule[] = Array.isArray(disabled) ? disabled : [];\n\n const setRange = useCallback(\n (range: DateRange) => {\n if (isDisabled || readOnly) return;\n if (!isControlled) {\n setUncontrolledValue(range);\n }\n onChange?.(range);\n },\n [isControlled, isDisabled, readOnly, onChange],\n );\n\n /**\n * Single-date click handler.\n * - selectingTarget === 'start' -> pick start, switch target to 'end'\n * - selectingTarget === 'end' -> pick end (swap if before start), switch target to 'start', close\n */\n const selectDate = useCallback(\n (iso: ISODateString) => {\n if (isDisabled || readOnly) return;\n\n if (selectingTarget === 'start') {\n const newRange: DateRange = { start: iso, end: null };\n setRange(newRange);\n setSelectingTarget('end');\n setHoverDate(null);\n } else {\n const start = currentValue.start;\n if (!start) {\n // Safety: if start is missing, treat this click as start\n setRange({ start: iso, end: null });\n setSelectingTarget('end');\n return;\n }\n\n let newRange: DateRange;\n if (adapter.isBefore(iso, start)) {\n // Swap if the clicked end is earlier than start\n newRange = { start: iso, end: start };\n } else {\n newRange = { start, end: iso };\n }\n\n setRange(newRange);\n setSelectingTarget('start');\n setHoverDate(null);\n setIsOpen(false);\n }\n },\n [isDisabled, readOnly, selectingTarget, currentValue.start, adapter, setRange],\n );\n\n const open = useCallback(() => {\n if (isDisabled || readOnly) return;\n setIsOpen(true);\n const target = currentValue.start ?? adapter.today();\n setViewMonth(target);\n setFocusedDate(target);\n // If the range is complete, restart; otherwise preserve current state\n if (currentValue.start && currentValue.end) {\n setSelectingTarget('start');\n }\n }, [isDisabled, readOnly, currentValue, adapter]);\n\n const close = useCallback(() => {\n setIsOpen(false);\n setHoverDate(null);\n }, []);\n\n const toggle = useCallback(() => {\n if (isOpen) close();\n else open();\n }, [isOpen, open, close]);\n\n const contextValue: RangePickerContextValue = useMemo(\n () => ({\n referenceRef,\n value: currentValue,\n setRange,\n selectDate,\n selectingTarget,\n hoverDate,\n setHoverDate,\n isOpen,\n open,\n close,\n toggle,\n viewMonth,\n setViewMonth,\n focusedDate,\n setFocusedDate,\n adapter,\n disabled: disabledRules,\n weekStartsOn,\n displayFormat,\n locale,\n isDisabled,\n isReadOnly: readOnly,\n pickerId,\n }),\n [\n currentValue,\n setRange,\n selectDate,\n selectingTarget,\n hoverDate,\n isOpen,\n open,\n close,\n toggle,\n viewMonth,\n focusedDate,\n adapter,\n disabledRules,\n weekStartsOn,\n displayFormat,\n locale,\n isDisabled,\n readOnly,\n pickerId,\n ],\n );\n\n return (\n <RangePickerContext.Provider value={contextValue}>\n {children}\n </RangePickerContext.Provider>\n );\n}\n","import { forwardRef, useCallback } from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport { useRangePickerContext } from '../../context/RangePickerContext.js';\n\nexport type RangeInputPart = 'start' | 'end';\n\nexport interface RangePickerInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {\n /** Which part this input represents (start | end) */\n part: RangeInputPart;\n /** Date display format (defaults to parent's displayFormat) */\n format?: string;\n}\n\n/**\n * RangePicker.Input — Separate input for start/end dates.\n * Use one with `part=\"start\"` and another with `part=\"end\"`.\n */\nexport const RangePickerInput = forwardRef<HTMLInputElement, RangePickerInputProps>(\n function RangePickerInput({ part, format: formatProp, onFocus, onKeyDown, ...props }, ref) {\n const ctx = useRangePickerContext('RangePicker.Input');\n const displayFormat = formatProp ?? ctx.displayFormat;\n\n const value = ctx.value[part];\n const displayValue = value ? ctx.adapter.format(value, displayFormat) : '';\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n ctx.open();\n onFocus?.(e);\n },\n [ctx, onFocus],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Escape') {\n ctx.close();\n } else if (e.key === 'ArrowDown' && !ctx.isOpen) {\n e.preventDefault();\n ctx.open();\n }\n onKeyDown?.(e);\n },\n [ctx, onKeyDown],\n );\n\n const calendarId = `${ctx.pickerId}-calendar`;\n\n return (\n <input\n ref={(node) => {\n // Use the first Input (start) as the reference\n if (part === 'start' && node) ctx.referenceRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n type=\"text\"\n role=\"combobox\"\n readOnly\n aria-expanded={ctx.isOpen}\n aria-haspopup=\"dialog\"\n aria-controls={ctx.isOpen ? calendarId : undefined}\n aria-autocomplete=\"none\"\n aria-label={part === 'start' ? '시작일' : '종료일'}\n autoComplete=\"off\"\n value={displayValue}\n disabled={ctx.isDisabled || props.disabled}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n data-part={part}\n {...props}\n />\n );\n },\n);\n","import { useEffect, useRef } from 'react';\nimport type { HTMLAttributes, ReactNode } from 'react';\nimport {\n useFloating,\n autoUpdate,\n offset,\n flip,\n shift,\n} from '@floating-ui/react';\nimport { useRangePickerContext } from '../../context/RangePickerContext.js';\n\nexport interface RangePickerPopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {\n children?: ReactNode;\n}\n\nexport function RangePickerPopover({ children, ...props }: RangePickerPopoverProps) {\n const ctx = useRangePickerContext('RangePicker.Popover');\n const calendarId = `${ctx.pickerId}-calendar`;\n const floatingRef = useRef<HTMLDivElement | null>(null);\n\n const { refs, floatingStyles } = useFloating({\n open: ctx.isOpen,\n placement: 'bottom-start',\n middleware: [offset(4), flip(), shift({ padding: 8 })],\n whileElementsMounted: autoUpdate,\n });\n\n // Wire the context's referenceRef into Floating UI\n useEffect(() => {\n if (ctx.referenceRef.current) {\n refs.setReference(ctx.referenceRef.current);\n }\n }, [ctx.referenceRef, refs, ctx.isOpen]);\n\n // Focus restoration\n const previousFocusRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (ctx.isOpen) {\n previousFocusRef.current = document.activeElement as HTMLElement;\n } else if (previousFocusRef.current) {\n previousFocusRef.current.focus();\n previousFocusRef.current = null;\n }\n }, [ctx.isOpen]);\n\n // Detect outside clicks\n useEffect(() => {\n if (!ctx.isOpen) return;\n\n function handleClickOutside(e: MouseEvent) {\n const floating = floatingRef.current;\n const reference = ctx.referenceRef.current;\n const target = e.target as Node;\n if (floating && !floating.contains(target) && (!reference || !reference.contains(target))) {\n ctx.close();\n }\n }\n\n const timer = setTimeout(() => {\n document.addEventListener('mousedown', handleClickOutside);\n }, 0);\n\n return () => {\n clearTimeout(timer);\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [ctx.isOpen, ctx]);\n\n useEffect(() => {\n if (!ctx.isOpen) return;\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n ctx.close();\n }\n }\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [ctx.isOpen, ctx]);\n\n if (!ctx.isOpen) return null;\n\n return (\n <div\n ref={(node) => {\n floatingRef.current = node;\n refs.setFloating(node);\n }}\n id={calendarId}\n role=\"dialog\"\n aria-label=\"날짜 범위 선택\"\n aria-modal=\"false\"\n style={floatingStyles}\n {...props}\n >\n {children}\n </div>\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport { getCalendarDays, isDateDisabled, getWeekdayNames, formatMonthYear, formatFullDate } from '@kalyx/core';\nimport type { CalendarDay } from '@kalyx/core';\nimport { useRangePickerContext } from '../../context/RangePickerContext.js';\n\nexport interface RangePickerCalendarClassNames {\n root?: string;\n header?: string;\n title?: string;\n navButton?: string;\n grid?: string;\n gridRow?: string;\n gridCell?: string;\n day?: string;\n daySelected?: string;\n dayToday?: string;\n dayDisabled?: string;\n dayOutsideMonth?: string;\n dayRangeStart?: string;\n dayRangeEnd?: string;\n dayInRange?: string;\n weekdayHeader?: string;\n}\n\nexport interface RangePickerCalendarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {\n classNames?: RangePickerCalendarClassNames;\n}\n\nconst srOnly: React.CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n\nexport function RangePickerCalendar({ classNames, ...props }: RangePickerCalendarProps) {\n const ctx = useRangePickerContext('RangePicker.Calendar');\n const gridRef = useRef<HTMLTableElement>(null);\n const [announcement, setAnnouncement] = useState('');\n\n const {\n adapter,\n viewMonth,\n focusedDate,\n weekStartsOn,\n disabled,\n value,\n hoverDate,\n selectingTarget,\n } = ctx;\n\n const { locale } = ctx;\n const weekdays = getWeekdayNames(locale, weekStartsOn);\n\n const weeks = getCalendarDays(viewMonth, adapter, {\n weekStartsOn,\n focusedDate,\n disabled,\n range: value,\n rangeHover: hoverDate,\n });\n\n const year = adapter.getYear(viewMonth);\n const month = adapter.getMonth(viewMonth);\n const title = formatMonthYear(year, month, locale);\n\n // Move focus to the focused day cell\n useEffect(() => {\n if (!ctx.isOpen || !gridRef.current) return;\n const focusedButton = gridRef.current.querySelector<HTMLButtonElement>(\n '[data-focused=\"true\"]',\n );\n focusedButton?.focus();\n }, [focusedDate, ctx.isOpen]);\n\n const navigateMonth = useCallback(\n (direction: number) => {\n const newMonth = adapter.addMonths(viewMonth, direction);\n ctx.setViewMonth(newMonth);\n ctx.setFocusedDate(adapter.startOfMonth(newMonth));\n const y = adapter.getYear(newMonth);\n const m = adapter.getMonth(newMonth);\n setAnnouncement(formatMonthYear(y, m, locale));\n },\n [adapter, viewMonth, ctx, locale],\n );\n\n const handleDayClick = useCallback(\n (day: CalendarDay) => {\n if (day.isDisabled) return;\n ctx.selectDate(day.isoString);\n setAnnouncement(formatFullDate(day.isoString, locale));\n },\n [ctx, locale],\n );\n\n const handleDayMouseEnter = useCallback(\n (day: CalendarDay) => {\n if (selectingTarget === 'end' && value.start && !day.isDisabled) {\n ctx.setHoverDate(day.isoString);\n }\n },\n [selectingTarget, value.start, ctx],\n );\n\n const handleMouseLeave = useCallback(() => {\n ctx.setHoverDate(null);\n }, [ctx]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n let newFocused: string | null = null;\n\n switch (e.key) {\n case 'ArrowLeft':\n newFocused = adapter.addDays(focusedDate, -1);\n break;\n case 'ArrowRight':\n newFocused = adapter.addDays(focusedDate, 1);\n break;\n case 'ArrowUp':\n newFocused = adapter.addDays(focusedDate, -7);\n break;\n case 'ArrowDown':\n newFocused = adapter.addDays(focusedDate, 7);\n break;\n case 'PageUp':\n newFocused = e.shiftKey\n ? adapter.addYears(focusedDate, -1)\n : adapter.addMonths(focusedDate, -1);\n break;\n case 'PageDown':\n newFocused = e.shiftKey\n ? adapter.addYears(focusedDate, 1)\n : adapter.addMonths(focusedDate, 1);\n break;\n case 'Home':\n newFocused = adapter.startOfWeek(focusedDate, weekStartsOn);\n break;\n case 'End':\n newFocused = adapter.startOfDay(adapter.endOfWeek(focusedDate, weekStartsOn));\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!isDateDisabled(focusedDate, disabled, adapter)) {\n ctx.selectDate(focusedDate);\n }\n return;\n case 'Escape':\n ctx.close();\n return;\n default:\n return;\n }\n\n if (newFocused) {\n e.preventDefault();\n ctx.setFocusedDate(newFocused);\n\n if (!adapter.isSameMonth(newFocused, viewMonth)) {\n ctx.setViewMonth(newFocused);\n }\n\n // Keep hover preview in sync while keyboard-navigating\n if (selectingTarget === 'end' && value.start) {\n ctx.setHoverDate(newFocused);\n }\n }\n },\n [adapter, focusedDate, viewMonth, weekStartsOn, disabled, ctx, selectingTarget, value.start],\n );\n\n return (\n <div className={classNames?.root} {...props} onMouseLeave={handleMouseLeave}>\n <div className={classNames?.header}>\n <button\n type=\"button\"\n className={classNames?.navButton}\n onClick={() => navigateMonth(-1)}\n aria-label=\"이전 달\"\n >\n &lt;\n </button>\n <span className={classNames?.title} aria-live=\"polite\">\n {title}\n </span>\n <button\n type=\"button\"\n className={classNames?.navButton}\n onClick={() => navigateMonth(1)}\n aria-label=\"다음 달\"\n >\n &gt;\n </button>\n </div>\n\n <table\n ref={gridRef}\n role=\"grid\"\n aria-label={title}\n aria-multiselectable=\"true\"\n className={classNames?.grid}\n onKeyDown={handleKeyDown}\n >\n <thead>\n <tr role=\"row\">\n {weekdays.map((day) => (\n <th\n key={day.short}\n role=\"columnheader\"\n abbr={day.full}\n scope=\"col\"\n className={classNames?.weekdayHeader}\n >\n {day.short}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {weeks.map((week, weekIndex) => (\n <tr key={weekIndex} role=\"row\" className={classNames?.gridRow}>\n {week.map((day) => {\n const dayClasses = [\n classNames?.day,\n day.isRangeStart && classNames?.dayRangeStart,\n day.isRangeEnd && classNames?.dayRangeEnd,\n day.isInRange && classNames?.dayInRange,\n day.isToday && classNames?.dayToday,\n day.isDisabled && classNames?.dayDisabled,\n !day.isCurrentMonth && classNames?.dayOutsideMonth,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const isSelected = day.isRangeStart || day.isRangeEnd;\n\n return (\n <td\n key={day.isoString}\n role=\"gridcell\"\n aria-selected={isSelected || undefined}\n aria-disabled={day.isDisabled || undefined}\n aria-current={day.isToday ? 'date' : undefined}\n className={classNames?.gridCell}\n >\n <button\n type=\"button\"\n tabIndex={day.isFocused ? 0 : -1}\n disabled={day.isDisabled}\n data-focused={day.isFocused || undefined}\n data-range-start={day.isRangeStart || undefined}\n data-range-end={day.isRangeEnd || undefined}\n data-in-range={day.isInRange || undefined}\n data-today={day.isToday || undefined}\n data-outside-month={!day.isCurrentMonth || undefined}\n className={dayClasses}\n onClick={() => handleDayClick(day)}\n onMouseEnter={() => handleDayMouseEnter(day)}\n aria-label={formatFullDate(day.isoString, locale)}\n >\n {day.dayNumber}\n </button>\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" style={srOnly}>\n {announcement}\n </div>\n </div>\n );\n}\n","import { useCallback } from 'react';\nimport type { HTMLAttributes, ReactNode } from 'react';\nimport type { DateRange, ISODateString } from '@kalyx/core';\nimport { useRangePickerContext } from '../../context/RangePickerContext.js';\n\n/** Predefined preset keys. Custom ranges are also supported. */\nexport type PresetKey =\n | 'today'\n | 'yesterday'\n | 'last7days'\n | 'last30days'\n | 'thisWeek'\n | 'lastWeek'\n | 'thisMonth'\n | 'lastMonth'\n | 'thisYear';\n\nexport interface RangePickerPresetsClassNames {\n root?: string;\n preset?: string;\n presetActive?: string;\n}\n\nexport interface RangePickerPresetsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {\n classNames?: RangePickerPresetsClassNames;\n children?: ReactNode;\n}\n\n/**\n * RangePicker.Presets — Container that wraps preset buttons.\n * Place `RangePicker.Preset` buttons inside.\n *\n * @example\n * ```tsx\n * <RangePicker.Presets>\n * <RangePicker.Preset value=\"last7days\">Last 7 days</RangePicker.Preset>\n * <RangePicker.Preset value=\"thisMonth\">This month</RangePicker.Preset>\n * </RangePicker.Presets>\n * ```\n */\nexport function RangePickerPresets({ classNames, children, ...props }: RangePickerPresetsProps) {\n return (\n <div role=\"group\" aria-label=\"날짜 범위 프리셋\" className={classNames?.root} {...props}>\n {children}\n </div>\n );\n}\n\nexport interface RangePickerPresetProps\n extends Omit<HTMLAttributes<HTMLButtonElement>, 'value'> {\n /** Predefined preset key; omit when passing `range` directly */\n value?: PresetKey;\n /** Pass a range directly (alternative to `value`) */\n range?: DateRange;\n children: ReactNode;\n className?: string;\n}\n\n/**\n * Resolve a predefined preset key into an actual DateRange.\n */\nfunction resolvePreset(key: PresetKey, today: ISODateString, adapter: { addDays: (iso: string, n: number) => string; addMonths: (iso: string, n: number) => string; addYears: (iso: string, n: number) => string; startOfMonth: (iso: string) => string; endOfMonth: (iso: string) => string; startOfWeek: (iso: string, weekStartsOn?: 0 | 1) => string; endOfWeek: (iso: string, weekStartsOn?: 0 | 1) => string; startOfDay: (iso: string) => string }): DateRange {\n switch (key) {\n case 'today':\n return { start: today, end: today };\n case 'yesterday': {\n const yesterday = adapter.addDays(today, -1);\n return { start: yesterday, end: yesterday };\n }\n case 'last7days':\n return { start: adapter.addDays(today, -6), end: today };\n case 'last30days':\n return { start: adapter.addDays(today, -29), end: today };\n case 'thisWeek':\n return {\n start: adapter.startOfDay(adapter.startOfWeek(today)),\n end: adapter.startOfDay(adapter.endOfWeek(today)),\n };\n case 'lastWeek': {\n const prevWeek = adapter.addDays(today, -7);\n return {\n start: adapter.startOfDay(adapter.startOfWeek(prevWeek)),\n end: adapter.startOfDay(adapter.endOfWeek(prevWeek)),\n };\n }\n case 'thisMonth':\n return {\n start: adapter.startOfMonth(today),\n end: adapter.startOfDay(adapter.endOfMonth(today)),\n };\n case 'lastMonth': {\n const prevMonth = adapter.addMonths(today, -1);\n return {\n start: adapter.startOfMonth(prevMonth),\n end: adapter.startOfDay(adapter.endOfMonth(prevMonth)),\n };\n }\n case 'thisYear': {\n const yearStart = adapter.startOfMonth(\n adapter.addMonths(today, -(new Date(today).getUTCMonth())),\n );\n return { start: yearStart, end: today };\n }\n }\n}\n\n/**\n * RangePicker.Preset — One-click preset button to select a date range.\n *\n * Pass either `value` (a preset key) or `range` (a direct range).\n *\n * @example\n * ```tsx\n * <RangePicker.Preset value=\"last7days\">Last 7 days</RangePicker.Preset>\n * <RangePicker.Preset range={{ start: \"2026-01-01T...\", end: \"2026-03-31T...\" }}>\n * Q1 2026\n * </RangePicker.Preset>\n * ```\n */\nexport function RangePickerPreset({\n value: presetKey,\n range: directRange,\n children,\n onClick,\n ...props\n}: RangePickerPresetProps) {\n const ctx = useRangePickerContext('RangePicker.Preset');\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n if (ctx.isDisabled || ctx.isReadOnly) return;\n\n let resolved: DateRange;\n if (directRange) {\n resolved = directRange;\n } else if (presetKey) {\n resolved = resolvePreset(presetKey, ctx.adapter.today(), ctx.adapter);\n } else {\n return;\n }\n\n ctx.setRange(resolved);\n ctx.close();\n onClick?.(e);\n },\n [ctx, presetKey, directRange, onClick],\n );\n\n // Determine whether the currently selected range matches this preset\n const isActive = (() => {\n if (!ctx.value.start || !ctx.value.end) return false;\n let target: DateRange;\n if (directRange) {\n target = directRange;\n } else if (presetKey) {\n target = resolvePreset(presetKey, ctx.adapter.today(), ctx.adapter);\n } else {\n return false;\n }\n return (\n target.start !== null &&\n target.end !== null &&\n ctx.adapter.isSameDay(ctx.value.start, target.start) &&\n ctx.adapter.isSameDay(ctx.value.end, target.end)\n );\n })();\n\n return (\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n data-active={isActive || undefined}\n disabled={ctx.isDisabled}\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n );\n}\n","import { RangePickerRoot } from './Root.js';\nimport { RangePickerInput } from './Input.js';\nimport { RangePickerPopover } from './Popover.js';\nimport { RangePickerCalendar } from './Calendar.js';\nimport { RangePickerPresets, RangePickerPreset } from './Presets.js';\n\nimport type { RangePickerRootProps } from './Root.js';\nimport type { RangePickerInputProps, RangeInputPart } from './Input.js';\nimport type { RangePickerPopoverProps } from './Popover.js';\nimport type {\n RangePickerCalendarProps,\n RangePickerCalendarClassNames,\n} from './Calendar.js';\nimport type {\n RangePickerPresetsProps,\n RangePickerPresetsClassNames,\n RangePickerPresetProps,\n PresetKey,\n} from './Presets.js';\n\n/**\n * RangePicker — Headless date-range picker component\n *\n * @example Basic\n * ```tsx\n * <RangePicker value={range} onChange={setRange}>\n * <RangePicker.Input part=\"start\" />\n * <RangePicker.Input part=\"end\" />\n * <RangePicker.Popover>\n * <RangePicker.Calendar />\n * </RangePicker.Popover>\n * </RangePicker>\n * ```\n *\n * @example Presets (dashboard)\n * ```tsx\n * <RangePicker value={range} onChange={setRange}>\n * <RangePicker.Input part=\"start\" />\n * <RangePicker.Input part=\"end\" />\n * <RangePicker.Popover>\n * <RangePicker.Presets>\n * <RangePicker.Preset value=\"last7days\">Last 7 days</RangePicker.Preset>\n * <RangePicker.Preset value=\"last30days\">Last 30 days</RangePicker.Preset>\n * <RangePicker.Preset value=\"thisMonth\">This month</RangePicker.Preset>\n * </RangePicker.Presets>\n * <RangePicker.Calendar />\n * </RangePicker.Popover>\n * </RangePicker>\n * ```\n */\nexport const RangePicker = Object.assign(RangePickerRoot, {\n Input: RangePickerInput,\n Popover: RangePickerPopover,\n Calendar: RangePickerCalendar,\n Presets: RangePickerPresets,\n Preset: RangePickerPreset,\n});\n\nexport type {\n RangePickerRootProps,\n RangePickerInputProps,\n RangeInputPart,\n RangePickerPopoverProps,\n RangePickerCalendarProps,\n RangePickerCalendarClassNames,\n RangePickerPresetsProps,\n RangePickerPresetsClassNames,\n RangePickerPresetProps,\n PresetKey,\n};\n","import { createContext, useContext } from 'react';\nimport type { ISODateString, TimeValue } from '@kalyx/core';\n\nexport type TimePickerFormat = '12h' | '24h';\n\nexport interface TimePickerContextValue {\n /** Currently selected ISO datetime (only the time portion is meaningful) */\n value: ISODateString | null;\n /** Update only the time portion (TimeValue) */\n setTime: (partial: Partial<TimeValue>) => void;\n /** 12-hour or 24-hour mode */\n format: TimePickerFormat;\n /** Minute step (e.g., 15 -> 0, 15, 30, 45) */\n step: number;\n /** Whether to display seconds */\n withSeconds: boolean;\n /** Whether entire picker is disabled */\n isDisabled: boolean;\n /** Read-only */\n isReadOnly: boolean;\n /** Current time (TimeValue) */\n currentTime: TimeValue;\n /** Unique ID */\n pickerId: string;\n}\n\nexport const TimePickerContext = createContext<TimePickerContextValue | null>(null);\n\n/**\n * Consume TimePickerContext.\n * Throws a clear error when called outside of TimePicker.Root.\n */\nexport function useTimePickerContext(componentName: string): TimePickerContextValue {\n const context = useContext(TimePickerContext);\n if (!context) {\n throw new Error(\n `[${componentName}] TimePicker.Root 내부에서 사용해야 합니다.\\n\\n` +\n '올바른 사용법:\\n' +\n ' <TimePicker>\\n' +\n ` <TimePicker.${componentName.replace('TimePicker.', '')} />\\n` +\n ' </TimePicker>',\n );\n }\n return context;\n}\n","import { useCallback, useId, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { getTime, setTime as setTimeOnIso } from '@kalyx/core';\nimport type { ISODateString, TimeValue } from '@kalyx/core';\nimport { TimePickerContext } from '../../context/TimePickerContext.js';\nimport type {\n TimePickerContextValue,\n TimePickerFormat,\n} from '../../context/TimePickerContext.js';\n\n/**\n * Props for the TimePicker Root component.\n *\n * @example\n * ```tsx\n * <TimePicker value={time} onChange={setTime} format=\"24h\" step={15}>\n * <TimePicker.Input />\n * <TimePicker.HourList />\n * <TimePicker.MinuteList />\n * <TimePicker.AmPmToggle />\n * </TimePicker>\n * ```\n */\nexport interface TimePickerRootProps {\n /** Selected time (controlled, ISO 8601 UTC). The date portion is ignored; only the time is used. */\n value?: ISODateString | null;\n /** Initial time (uncontrolled) */\n defaultValue?: ISODateString;\n /** Callback fired when the time changes */\n onChange?: (value: ISODateString | null) => void;\n /** 12-hour or 24-hour mode */\n format?: TimePickerFormat;\n /** Minute step (e.g., 1, 5, 10, 15, 30) */\n step?: number;\n /** Whether to display seconds */\n withSeconds?: boolean;\n /** Whether entire picker is disabled */\n disabled?: boolean;\n /** Read-only */\n readOnly?: boolean;\n /** Child components */\n children: ReactNode;\n}\n\n/** Fallback ISO used when value is null (today at 00:00:00 UTC) */\nfunction getDefaultIso(): ISODateString {\n const now = new Date();\n return new Date(\n Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()),\n ).toISOString();\n}\n\nexport function TimePickerRoot({\n value: controlledValue,\n defaultValue,\n onChange,\n format = '24h',\n step = 1,\n withSeconds = false,\n disabled = false,\n readOnly = false,\n children,\n}: TimePickerRootProps) {\n const pickerId = useId();\n const isControlled = useRef(controlledValue !== undefined).current;\n\n const [uncontrolledValue, setUncontrolledValue] = useState<ISODateString | null>(\n defaultValue ?? null,\n );\n\n const currentValue = isControlled ? (controlledValue ?? null) : uncontrolledValue;\n\n // Allow time selection even when value is null -> fallback\n const baseIso = currentValue ?? getDefaultIso();\n const currentTime = useMemo(() => getTime(baseIso), [baseIso]);\n\n const setTime = useCallback(\n (partial: Partial<TimeValue>) => {\n if (disabled || readOnly) return;\n const newIso = setTimeOnIso(baseIso, partial);\n if (!isControlled) {\n setUncontrolledValue(newIso);\n }\n onChange?.(newIso);\n },\n [disabled, readOnly, baseIso, isControlled, onChange],\n );\n\n const contextValue: TimePickerContextValue = useMemo(\n () => ({\n value: currentValue,\n setTime,\n format,\n step,\n withSeconds,\n isDisabled: disabled,\n isReadOnly: readOnly,\n currentTime,\n pickerId,\n }),\n [currentValue, setTime, format, step, withSeconds, disabled, readOnly, currentTime, pickerId],\n );\n\n return (\n <TimePickerContext.Provider value={contextValue}>\n {children}\n </TimePickerContext.Provider>\n );\n}\n","import { forwardRef, useCallback, useState } from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport { formatTimeString, parseTimeString } from '@kalyx/core';\nimport { useTimePickerContext } from '../../context/TimePickerContext.js';\n\nexport interface TimePickerInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {}\n\n/**\n * TimePicker.Input — Text input for HH:MM or HH:MM:SS format.\n * Supports direct typing by the user.\n */\nexport const TimePickerInput = forwardRef<HTMLInputElement, TimePickerInputProps>(\n function TimePickerInput({ onBlur, onKeyDown, ...props }, ref) {\n const ctx = useTimePickerContext('TimePicker.Input');\n const [inputText, setInputText] = useState<string | null>(null);\n\n const displayValue =\n inputText !== null ? inputText : formatTimeString(ctx.currentTime, ctx.withSeconds);\n\n const commitInput = useCallback(() => {\n if (inputText === null) return;\n const parsed = parseTimeString(inputText);\n if (parsed) {\n ctx.setTime(parsed);\n }\n setInputText(null);\n }, [inputText, ctx]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputText(e.target.value);\n },\n [],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n commitInput();\n onBlur?.(e);\n },\n [commitInput, onBlur],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n commitInput();\n }\n onKeyDown?.(e);\n },\n [commitInput, onKeyDown],\n );\n\n return (\n <input\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"off\"\n aria-label=\"시간 입력\"\n placeholder={ctx.withSeconds ? 'HH:MM:SS' : 'HH:MM'}\n value={displayValue}\n disabled={ctx.isDisabled || props.disabled}\n readOnly={ctx.isReadOnly}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n },\n);\n","import { useCallback, useRef } from 'react';\nimport type { HTMLAttributes, KeyboardEvent } from 'react';\nimport { generateHours, to12Hour, to24Hour } from '@kalyx/core';\nimport { useTimePickerContext } from '../../context/TimePickerContext.js';\n\nexport interface TimePickerHourListClassNames {\n root?: string;\n option?: string;\n optionSelected?: string;\n}\n\nexport interface TimePickerHourListProps\n extends Omit<HTMLAttributes<HTMLUListElement>, 'role' | 'children'> {\n classNames?: TimePickerHourListClassNames;\n}\n\n/**\n * TimePicker.HourList — `role=\"listbox\"` pattern for hour selection.\n * Renders differently depending on 12h/24h mode.\n *\n * ARIA-standard listbox: the <li role=\"option\"> element itself is interactive.\n * Keyboard: ArrowUp/ArrowDown to navigate, Enter/Space to select.\n */\nexport function TimePickerHourList({ classNames, ...props }: TimePickerHourListProps) {\n const ctx = useTimePickerContext('TimePicker.HourList');\n const { format, currentTime, isDisabled, isReadOnly } = ctx;\n const listRef = useRef<HTMLUListElement>(null);\n\n const hours = generateHours(format);\n\n const selectedHourDisplay =\n format === '12h' ? to12Hour(currentTime.hours).hours12 : currentTime.hours;\n\n const currentPeriod = format === '12h' ? to12Hour(currentTime.hours).period : null;\n\n const handleSelect = useCallback(\n (hourDisplay: number) => {\n if (isDisabled || isReadOnly) return;\n const hours24 =\n format === '12h' && currentPeriod\n ? to24Hour(hourDisplay, currentPeriod)\n : hourDisplay;\n ctx.setTime({ hours: hours24 });\n },\n [format, currentPeriod, ctx, isDisabled, isReadOnly],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLLIElement>, hour: number) => {\n if (isDisabled || isReadOnly) return;\n const currentIndex = hours.indexOf(hour);\n\n let newIndex = -1;\n if (e.key === 'ArrowDown') {\n newIndex = Math.min(currentIndex + 1, hours.length - 1);\n } else if (e.key === 'ArrowUp') {\n newIndex = Math.max(currentIndex - 1, 0);\n } else if (e.key === 'Home') {\n newIndex = 0;\n } else if (e.key === 'End') {\n newIndex = hours.length - 1;\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleSelect(hour);\n return;\n } else {\n return;\n }\n\n e.preventDefault();\n const targetHour = hours[newIndex];\n if (targetHour !== undefined) {\n handleSelect(targetHour);\n // Move focus to the newly selected option on the next render\n requestAnimationFrame(() => {\n const next = listRef.current?.querySelector<HTMLLIElement>(\n '[data-selected=\"true\"]',\n );\n next?.focus();\n });\n }\n },\n [hours, handleSelect, isDisabled, isReadOnly],\n );\n\n return (\n <ul\n ref={listRef}\n role=\"listbox\"\n aria-label=\"시\"\n aria-disabled={isDisabled || undefined}\n className={classNames?.root}\n {...props}\n >\n {hours.map((hour) => {\n const isSelected = hour === selectedHourDisplay;\n const optionClass =\n [classNames?.option, isSelected && classNames?.optionSelected]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <li\n key={hour}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled || undefined}\n aria-label={`${hour}시`}\n data-selected={isSelected || undefined}\n tabIndex={isSelected ? 0 : -1}\n className={optionClass}\n onClick={() => handleSelect(hour)}\n onKeyDown={(e) => handleKeyDown(e, hour)}\n >\n {String(hour).padStart(2, '0')}\n </li>\n );\n })}\n </ul>\n );\n}\n","import { useCallback, useRef } from 'react';\nimport type { HTMLAttributes, KeyboardEvent } from 'react';\nimport { generateMinutes } from '@kalyx/core';\nimport { useTimePickerContext } from '../../context/TimePickerContext.js';\n\nexport interface TimePickerMinuteListClassNames {\n root?: string;\n option?: string;\n optionSelected?: string;\n}\n\nexport interface TimePickerMinuteListProps\n extends Omit<HTMLAttributes<HTMLUListElement>, 'role' | 'children'> {\n classNames?: TimePickerMinuteListClassNames;\n}\n\n/**\n * TimePicker.MinuteList — `role=\"listbox\"` pattern for minute selection.\n * The displayed minutes depend on the `step` prop (e.g., step=15 -> [0, 15, 30, 45]).\n */\nexport function TimePickerMinuteList({ classNames, ...props }: TimePickerMinuteListProps) {\n const ctx = useTimePickerContext('TimePicker.MinuteList');\n const { step, currentTime, isDisabled, isReadOnly } = ctx;\n const listRef = useRef<HTMLUListElement>(null);\n\n const minutes = generateMinutes(step);\n\n const handleSelect = useCallback(\n (minute: number) => {\n if (isDisabled || isReadOnly) return;\n ctx.setTime({ minutes: minute });\n },\n [ctx, isDisabled, isReadOnly],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLLIElement>, minute: number) => {\n if (isDisabled || isReadOnly) return;\n const currentIndex = minutes.indexOf(minute);\n\n let newIndex = -1;\n if (e.key === 'ArrowDown') {\n newIndex = Math.min(currentIndex + 1, minutes.length - 1);\n } else if (e.key === 'ArrowUp') {\n newIndex = Math.max(currentIndex - 1, 0);\n } else if (e.key === 'Home') {\n newIndex = 0;\n } else if (e.key === 'End') {\n newIndex = minutes.length - 1;\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleSelect(minute);\n return;\n } else {\n return;\n }\n\n e.preventDefault();\n const target = minutes[newIndex];\n if (target !== undefined) {\n handleSelect(target);\n requestAnimationFrame(() => {\n const next = listRef.current?.querySelector<HTMLLIElement>(\n '[data-selected=\"true\"]',\n );\n next?.focus();\n });\n }\n },\n [minutes, handleSelect, isDisabled, isReadOnly],\n );\n\n return (\n <ul\n ref={listRef}\n role=\"listbox\"\n aria-label=\"분\"\n aria-disabled={isDisabled || undefined}\n className={classNames?.root}\n {...props}\n >\n {minutes.map((minute) => {\n const isSelected = minute === currentTime.minutes;\n const optionClass =\n [classNames?.option, isSelected && classNames?.optionSelected]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <li\n key={minute}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled || undefined}\n aria-label={`${minute}분`}\n data-selected={isSelected || undefined}\n tabIndex={isSelected ? 0 : -1}\n className={optionClass}\n onClick={() => handleSelect(minute)}\n onKeyDown={(e) => handleKeyDown(e, minute)}\n >\n {String(minute).padStart(2, '0')}\n </li>\n );\n })}\n </ul>\n );\n}\n","import { useCallback } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport { to12Hour, to24Hour } from '@kalyx/core';\nimport { useTimePickerContext } from '../../context/TimePickerContext.js';\n\nexport interface TimePickerAmPmToggleClassNames {\n root?: string;\n option?: string;\n optionSelected?: string;\n}\n\nexport interface TimePickerAmPmToggleProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'role' | 'children'> {\n classNames?: TimePickerAmPmToggleClassNames;\n}\n\n/**\n * TimePicker.AmPmToggle — AM/PM toggle shown only in 12-hour mode.\n * Returns null in 24-hour mode.\n */\nexport function TimePickerAmPmToggle({ classNames, ...props }: TimePickerAmPmToggleProps) {\n const ctx = useTimePickerContext('TimePicker.AmPmToggle');\n\n if (ctx.format !== '12h') return null;\n\n const { period, hours12 } = to12Hour(ctx.currentTime.hours);\n\n const setPeriod = useCallback(\n (newPeriod: 'AM' | 'PM') => {\n if (ctx.isDisabled || ctx.isReadOnly) return;\n const newHours24 = to24Hour(hours12, newPeriod);\n ctx.setTime({ hours: newHours24 });\n },\n [hours12, ctx],\n );\n\n const renderButton = (target: 'AM' | 'PM') => {\n const isSelected = period === target;\n const optionClass =\n [classNames?.option, isSelected && classNames?.optionSelected]\n .filter(Boolean)\n .join(' ') || undefined;\n\n return (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={isSelected}\n data-selected={isSelected || undefined}\n disabled={ctx.isDisabled}\n className={optionClass}\n onClick={() => setPeriod(target)}\n >\n {target}\n </button>\n );\n };\n\n return (\n <div role=\"radiogroup\" aria-label=\"오전/오후\" className={classNames?.root} {...props}>\n {renderButton('AM')}\n {renderButton('PM')}\n </div>\n );\n}\n","import { TimePickerRoot } from './Root.js';\nimport { TimePickerInput } from './Input.js';\nimport { TimePickerHourList } from './HourList.js';\nimport { TimePickerMinuteList } from './MinuteList.js';\nimport { TimePickerAmPmToggle } from './AmPmToggle.js';\n\nimport type { TimePickerRootProps } from './Root.js';\nimport type { TimePickerInputProps } from './Input.js';\nimport type {\n TimePickerHourListProps,\n TimePickerHourListClassNames,\n} from './HourList.js';\nimport type {\n TimePickerMinuteListProps,\n TimePickerMinuteListClassNames,\n} from './MinuteList.js';\nimport type {\n TimePickerAmPmToggleProps,\n TimePickerAmPmToggleClassNames,\n} from './AmPmToggle.js';\n\n/**\n * TimePicker — Headless time-picker component\n *\n * @example\n * ```tsx\n * <TimePicker value={time} onChange={setTime} format=\"24h\" step={15}>\n * <TimePicker.Input />\n * <div>\n * <TimePicker.HourList />\n * <TimePicker.MinuteList />\n * <TimePicker.AmPmToggle />\n * </div>\n * </TimePicker>\n * ```\n */\nexport const TimePicker = Object.assign(TimePickerRoot, {\n Input: TimePickerInput,\n HourList: TimePickerHourList,\n MinuteList: TimePickerMinuteList,\n AmPmToggle: TimePickerAmPmToggle,\n});\n\nexport type {\n TimePickerRootProps,\n TimePickerInputProps,\n TimePickerHourListProps,\n TimePickerHourListClassNames,\n TimePickerMinuteListProps,\n TimePickerMinuteListClassNames,\n TimePickerAmPmToggleProps,\n TimePickerAmPmToggleClassNames,\n};\n","import { useCallback, useId, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport {\n DateFnsAdapter,\n getTime,\n setTime as setTimeOnIso,\n} from '@kalyx/core';\nimport type {\n DateAdapter,\n DisabledRule,\n ISODateString,\n TimeValue,\n WeekStartsOn,\n} from '@kalyx/core';\nimport { DatePickerContext } from '../../context/DatePickerContext.js';\nimport type { DatePickerContextValue } from '../../context/DatePickerContext.js';\nimport { TimePickerContext } from '../../context/TimePickerContext.js';\nimport type {\n TimePickerContextValue,\n TimePickerFormat,\n} from '../../context/TimePickerContext.js';\n\n/**\n * Props for the DateTimePicker Root component.\n * Internally provides both DatePickerContext and TimePickerContext (context bridging).\n *\n * @example\n * ```tsx\n * <DateTimePicker value={dt} onChange={setDt} format=\"24h\" step={15}>\n * <DateTimePicker.Input />\n * <DateTimePicker.Popover>\n * <DateTimePicker.Calendar />\n * <DateTimePicker.HourList />\n * <DateTimePicker.MinuteList />\n * </DateTimePicker.Popover>\n * </DateTimePicker>\n * ```\n */\nexport interface DateTimePickerRootProps {\n /** Selected datetime (controlled, ISO 8601 UTC). Includes both date and time. */\n value?: ISODateString | null;\n /** Initial datetime (uncontrolled) */\n defaultValue?: ISODateString;\n /** Callback fired when the datetime changes */\n onChange?: (value: ISODateString | null) => void;\n /** 12-hour or 24-hour mode */\n format?: TimePickerFormat;\n /** Minute step (e.g., 1, 5, 15, 30) */\n step?: number;\n /** Disabled rules (applied to dates) */\n disabled?: DisabledRule[] | boolean;\n /** Read-only */\n readOnly?: boolean;\n /** Week start day */\n weekStartsOn?: WeekStartsOn;\n /** Date+time display format (for Input) */\n displayFormat?: string;\n /** BCP 47 locale */\n locale?: string;\n /** Date adapter */\n adapter?: DateAdapter;\n /** Child components */\n children: ReactNode;\n}\n\n/** Fallback ISO used when value is null (today at 00:00:00 UTC) */\nfunction getDefaultIso(): ISODateString {\n const now = new Date();\n return new Date(\n Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()),\n ).toISOString();\n}\n\n/**\n * DateTimePicker.Root — Combined DatePicker + TimePicker component.\n *\n * Manages a single ISO datetime as the source of truth while providing both\n * DatePickerContext and TimePickerContext internally. This lets existing\n * components such as DatePicker.Calendar and TimePicker.HourList be reused as-is.\n *\n * Key behavior:\n * - Clicking a day in Calendar -> changes only the date, preserves the time, keeps popover open\n * - Changing time in TimePicker -> changes only the time, preserves the date\n * - Escape / outside click -> close the popover (commit)\n */\nexport function DateTimePickerRoot({\n value: controlledValue,\n defaultValue,\n onChange,\n format = '24h',\n step = 1,\n disabled = false,\n readOnly = false,\n weekStartsOn = 0,\n displayFormat = 'yyyy-MM-dd HH:mm',\n locale = 'en-US',\n adapter = DateFnsAdapter,\n children,\n}: DateTimePickerRootProps) {\n const pickerId = useId();\n const isControlled = useRef(controlledValue !== undefined).current;\n const referenceRef = useRef<HTMLElement | null>(null);\n\n const [uncontrolledValue, setUncontrolledValue] = useState<ISODateString | null>(\n defaultValue ?? null,\n );\n\n const currentValue = isControlled ? (controlledValue ?? null) : uncontrolledValue;\n\n const [isOpen, setIsOpen] = useState(false);\n const [viewMonth, setViewMonth] = useState<ISODateString>(\n currentValue ?? adapter.today(),\n );\n const [focusedDate, setFocusedDate] = useState<ISODateString>(\n currentValue ?? adapter.today(),\n );\n\n const isDisabled = typeof disabled === 'boolean' ? disabled : false;\n const disabledRules: DisabledRule[] = Array.isArray(disabled) ? disabled : [];\n\n // When value is null, use a fallback for time extraction\n const baseIso = currentValue ?? getDefaultIso();\n const currentTime: TimeValue = useMemo(() => getTime(baseIso), [baseIso]);\n\n const updateValue = useCallback(\n (next: ISODateString | null) => {\n if (isDisabled || readOnly) return;\n if (!isControlled) {\n setUncontrolledValue(next);\n }\n onChange?.(next);\n },\n [isControlled, isDisabled, readOnly, onChange],\n );\n\n /**\n * Select a date while preserving the time portion.\n * Unlike DatePicker.Root, this does not automatically close the popover.\n */\n const selectDate = useCallback(\n (newDateIso: ISODateString | null) => {\n if (newDateIso === null) {\n updateValue(null);\n return;\n }\n // Preserve the current time portion and apply it to the new date\n const time = currentValue ? getTime(currentValue) : currentTime;\n const merged = setTimeOnIso(newDateIso, time);\n updateValue(merged);\n },\n [currentValue, currentTime, updateValue],\n );\n\n /**\n * Change the time while preserving the date portion.\n */\n const setTime = useCallback(\n (partial: Partial<TimeValue>) => {\n // If no date yet, start from today at midnight\n const base = currentValue ?? getDefaultIso();\n const merged = setTimeOnIso(base, partial);\n updateValue(merged);\n },\n [currentValue, updateValue],\n );\n\n const open = useCallback(() => {\n if (isDisabled || readOnly) return;\n setIsOpen(true);\n const target = currentValue ?? adapter.today();\n setViewMonth(target);\n setFocusedDate(target);\n }, [isDisabled, readOnly, currentValue, adapter]);\n\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const toggle = useCallback(() => {\n if (isOpen) close();\n else open();\n }, [isOpen, open, close]);\n\n // DatePickerContext (for reusing Calendar and Popover)\n const dateContext: DatePickerContextValue = useMemo(\n () => ({\n referenceRef,\n value: currentValue,\n selectDate,\n isOpen,\n open,\n close,\n toggle,\n viewMonth,\n setViewMonth,\n focusedDate,\n setFocusedDate,\n adapter,\n disabled: disabledRules,\n weekStartsOn,\n displayFormat,\n locale,\n isDisabled,\n isReadOnly: readOnly,\n pickerId,\n }),\n [\n currentValue,\n selectDate,\n isOpen,\n open,\n close,\n toggle,\n viewMonth,\n focusedDate,\n adapter,\n disabledRules,\n weekStartsOn,\n displayFormat,\n locale,\n isDisabled,\n readOnly,\n pickerId,\n ],\n );\n\n // TimePickerContext (for reusing HourList, MinuteList, AmPmToggle)\n const timeContext: TimePickerContextValue = useMemo(\n () => ({\n value: currentValue,\n setTime,\n format,\n step,\n withSeconds: false,\n isDisabled,\n isReadOnly: readOnly,\n currentTime,\n pickerId,\n }),\n [currentValue, setTime, format, step, isDisabled, readOnly, currentTime, pickerId],\n );\n\n return (\n <DatePickerContext.Provider value={dateContext}>\n <TimePickerContext.Provider value={timeContext}>\n {children}\n </TimePickerContext.Provider>\n </DatePickerContext.Provider>\n );\n}\n","import { forwardRef, useCallback } from 'react';\nimport type { InputHTMLAttributes } from 'react';\nimport { formatTimeString, getTime } from '@kalyx/core';\nimport { useDatePickerContext } from '../../context/DatePickerContext.js';\n\nexport interface DateTimePickerInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'type'> {}\n\n/**\n * DateTimePicker.Input — Displays date and time combined.\n * Example: \"2026-01-15 14:30\"\n *\n * In v0.3 the input is read-only (use Calendar/TimePicker to select).\n * Direct-typing parsing is planned for v0.4.\n */\nexport const DateTimePickerInput = forwardRef<HTMLInputElement, DateTimePickerInputProps>(\n function DateTimePickerInput({ onFocus, onKeyDown, ...props }, ref) {\n const ctx = useDatePickerContext('DateTimePicker.Input');\n\n // Combine the date portion (yyyy-MM-dd) and the time portion (HH:mm)\n const displayValue = ctx.value\n ? `${ctx.adapter.format(ctx.value, 'yyyy-MM-dd')} ${formatTimeString(getTime(ctx.value))}`\n : '';\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n ctx.open();\n onFocus?.(e);\n },\n [ctx, onFocus],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Escape') {\n ctx.close();\n } else if (e.key === 'ArrowDown' && !ctx.isOpen) {\n e.preventDefault();\n ctx.open();\n }\n onKeyDown?.(e);\n },\n [ctx, onKeyDown],\n );\n\n const calendarId = `${ctx.pickerId}-calendar`;\n\n return (\n <input\n ref={(node) => {\n ctx.referenceRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n type=\"text\"\n role=\"combobox\"\n readOnly\n aria-label=\"날짜 및 시간\"\n aria-expanded={ctx.isOpen}\n aria-haspopup=\"dialog\"\n aria-controls={ctx.isOpen ? calendarId : undefined}\n aria-autocomplete=\"none\"\n autoComplete=\"off\"\n value={displayValue}\n disabled={ctx.isDisabled || props.disabled}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n {...props}\n />\n );\n },\n);\n","import { DateTimePickerRoot } from './Root.js';\nimport { DateTimePickerInput } from './Input.js';\n\n// Reuse: DatePicker subcomponents (consume DatePickerContext)\nimport { DatePickerPopover } from '../DatePicker/Popover.js';\nimport { DatePickerCalendar } from '../DatePicker/Calendar.js';\nimport { DatePickerMonthGrid } from '../DatePicker/MonthGrid.js';\nimport { DatePickerYearGrid } from '../DatePicker/YearGrid.js';\n\n// Reuse: TimePicker subcomponents (consume TimePickerContext)\nimport { TimePickerHourList } from '../TimePicker/HourList.js';\nimport { TimePickerMinuteList } from '../TimePicker/MinuteList.js';\nimport { TimePickerAmPmToggle } from '../TimePicker/AmPmToggle.js';\n\nimport type { DateTimePickerRootProps } from './Root.js';\nimport type { DateTimePickerInputProps } from './Input.js';\n\n/**\n * DateTimePicker — Combined component for selecting both date and time.\n *\n * Manages a single ISO datetime as the source of truth while providing both\n * DatePickerContext and TimePickerContext internally. This lets existing\n * components such as DatePicker.Calendar and TimePicker.HourList work as-is.\n *\n * @example\n * ```tsx\n * <DateTimePicker value={dt} onChange={setDt} format=\"24h\" step={15}>\n * <DateTimePicker.Input />\n * <DateTimePicker.Popover>\n * <DateTimePicker.Calendar />\n * <DateTimePicker.HourList />\n * <DateTimePicker.MinuteList />\n * </DateTimePicker.Popover>\n * </DateTimePicker>\n * ```\n *\n * @example 12-hour mode\n * ```tsx\n * <DateTimePicker value={dt} onChange={setDt} format=\"12h\" step={15}>\n * <DateTimePicker.Input />\n * <DateTimePicker.Popover>\n * <DateTimePicker.Calendar />\n * <DateTimePicker.HourList />\n * <DateTimePicker.MinuteList />\n * <DateTimePicker.AmPmToggle />\n * </DateTimePicker.Popover>\n * </DateTimePicker>\n * ```\n */\nexport const DateTimePicker = Object.assign(DateTimePickerRoot, {\n Input: DateTimePickerInput,\n Popover: DatePickerPopover,\n Calendar: DatePickerCalendar,\n MonthGrid: DatePickerMonthGrid,\n YearGrid: DatePickerYearGrid,\n HourList: TimePickerHourList,\n MinuteList: TimePickerMinuteList,\n AmPmToggle: TimePickerAmPmToggle,\n});\n\nexport type { DateTimePickerRootProps, DateTimePickerInputProps };\n","import { useCallback, useId, useRef, useState } from 'react';\nimport { DateFnsAdapter, getCalendarDays } from '@kalyx/core';\nimport type {\n CalendarGrid,\n DateAdapter,\n DisabledRule,\n ISODateString,\n WeekStartsOn,\n} from '@kalyx/core';\n\nexport interface UseDatePickerOptions {\n /** Selected date (controlled mode) */\n value?: ISODateString | null;\n /** Initial date (uncontrolled mode) */\n defaultValue?: ISODateString;\n /** Callback fired when the date changes */\n onChange?: (value: ISODateString | null) => void;\n /** Rules that mark days as disabled */\n disabled?: DisabledRule[];\n /** Day the week starts on */\n weekStartsOn?: WeekStartsOn;\n /** Date adapter */\n adapter?: DateAdapter;\n}\n\nexport interface UseDatePickerReturn {\n /** Currently selected date (ISO string) */\n value: ISODateString | null;\n /** Whether the popover is open */\n isOpen: boolean;\n /** Open the popover */\n open: () => void;\n /** Close the popover */\n close: () => void;\n /** Toggle the popover */\n toggle: () => void;\n /** Select a date */\n selectDate: (iso: ISODateString | null) => void;\n /** Month currently displayed (ISO string) */\n viewMonth: ISODateString;\n /** Change the displayed month */\n setViewMonth: (iso: ISODateString) => void;\n /** Calendar grid data */\n calendar: CalendarGrid;\n /** Currently focused date */\n focusedDate: ISODateString;\n /** Update the focused date */\n setFocusedDate: (iso: ISODateString) => void;\n /** Move to the previous month */\n previousMonth: () => void;\n /** Move to the next month */\n nextMonth: () => void;\n /** Unique ID */\n pickerId: string;\n /** Date adapter */\n adapter: DateAdapter;\n}\n\n/**\n * Hook that manages DatePicker state.\n * Use this when you want to implement a fully custom UI without the built-in components.\n *\n * @example\n * ```tsx\n * function MyDatePicker() {\n * const { value, isOpen, calendar, open, selectDate } = useDatePicker({\n * onChange: (iso) => console.log(iso),\n * });\n * // ... custom rendering\n * }\n * ```\n */\nexport function useDatePicker(options: UseDatePickerOptions = {}): UseDatePickerReturn {\n const {\n value: controlledValue,\n defaultValue,\n onChange,\n disabled = [],\n weekStartsOn = 0,\n adapter = DateFnsAdapter,\n } = options;\n\n const pickerId = useId();\n const isControlled = useRef(controlledValue !== undefined).current;\n\n const [uncontrolledValue, setUncontrolledValue] = useState<ISODateString | null>(\n defaultValue ?? null,\n );\n\n const currentValue = isControlled ? (controlledValue ?? null) : uncontrolledValue;\n\n const [isOpen, setIsOpen] = useState(false);\n const [viewMonth, setViewMonth] = useState<ISODateString>(currentValue ?? adapter.today());\n const [focusedDate, setFocusedDate] = useState<ISODateString>(currentValue ?? adapter.today());\n\n const selectDate = useCallback(\n (iso: ISODateString | null) => {\n if (!isControlled) {\n setUncontrolledValue(iso);\n }\n onChange?.(iso);\n setIsOpen(false);\n },\n [isControlled, onChange],\n );\n\n const open = useCallback(() => {\n setIsOpen(true);\n const target = currentValue ?? adapter.today();\n setViewMonth(target);\n setFocusedDate(target);\n }, [currentValue, adapter]);\n\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const toggle = useCallback(() => {\n if (isOpen) close();\n else open();\n }, [isOpen, open, close]);\n\n const previousMonth = useCallback(() => {\n const newMonth = adapter.addMonths(viewMonth, -1);\n setViewMonth(newMonth);\n setFocusedDate(adapter.startOfMonth(newMonth));\n }, [adapter, viewMonth]);\n\n const nextMonth = useCallback(() => {\n const newMonth = adapter.addMonths(viewMonth, 1);\n setViewMonth(newMonth);\n setFocusedDate(adapter.startOfMonth(newMonth));\n }, [adapter, viewMonth]);\n\n const calendar = getCalendarDays(viewMonth, adapter, {\n weekStartsOn,\n selected: currentValue,\n focusedDate,\n disabled,\n });\n\n return {\n value: currentValue,\n isOpen,\n open,\n close,\n toggle,\n selectDate,\n viewMonth,\n setViewMonth,\n calendar,\n focusedDate,\n setFocusedDate,\n previousMonth,\n nextMonth,\n pickerId,\n adapter,\n };\n}\n","import { useCallback, useId, useRef, useState } from 'react';\nimport { DateFnsAdapter, getCalendarDays } from '@kalyx/core';\nimport type {\n CalendarGrid,\n DateAdapter,\n DateRange,\n DisabledRule,\n ISODateString,\n WeekStartsOn,\n} from '@kalyx/core';\nimport type { RangeSelectingTarget } from '../context/RangePickerContext.js';\n\nconst EMPTY_RANGE: DateRange = { start: null, end: null };\n\nexport interface UseRangePickerOptions {\n /** Selected range (controlled mode) */\n value?: DateRange;\n /** Initial range (uncontrolled mode) */\n defaultValue?: DateRange;\n /** Callback fired when the range changes */\n onChange?: (range: DateRange) => void;\n /** Rules that mark days as disabled */\n disabled?: DisabledRule[];\n /** Day the week starts on */\n weekStartsOn?: WeekStartsOn;\n /** Date adapter */\n adapter?: DateAdapter;\n}\n\nexport interface UseRangePickerReturn {\n /** Currently selected range */\n value: DateRange;\n /** Which endpoint will be selected next */\n selectingTarget: RangeSelectingTarget;\n /** Handler for clicking a single date */\n selectDate: (iso: ISODateString) => void;\n /** Set the range directly */\n setRange: (range: DateRange) => void;\n /** Whether the popover is open */\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n /** Hovered date (for range preview) */\n hoverDate: ISODateString | null;\n setHoverDate: (iso: ISODateString | null) => void;\n /** Month currently displayed */\n viewMonth: ISODateString;\n setViewMonth: (iso: ISODateString) => void;\n /** Calendar grid */\n calendar: CalendarGrid;\n /** Currently focused date */\n focusedDate: ISODateString;\n setFocusedDate: (iso: ISODateString) => void;\n /** Move to the previous month */\n previousMonth: () => void;\n /** Move to the next month */\n nextMonth: () => void;\n /** Unique ID */\n pickerId: string;\n /** Date adapter */\n adapter: DateAdapter;\n}\n\n/**\n * Hook that manages RangePicker state.\n * Use this when you want to build a fully custom UI without the built-in components.\n *\n * @example\n * ```tsx\n * function MyRangePicker() {\n * const { value, calendar, selectDate, selectingTarget } = useRangePicker({\n * onChange: (range) => console.log(range.start, range.end),\n * });\n * // selectingTarget === 'start' -> waiting for start date\n * // selectingTarget === 'end' -> waiting for end date\n * }\n * ```\n */\nexport function useRangePicker(options: UseRangePickerOptions = {}): UseRangePickerReturn {\n const {\n value: controlledValue,\n defaultValue,\n onChange,\n disabled = [],\n weekStartsOn = 0,\n adapter = DateFnsAdapter,\n } = options;\n\n const pickerId = useId();\n const isControlled = useRef(controlledValue !== undefined).current;\n\n const [uncontrolledValue, setUncontrolledValue] = useState<DateRange>(\n defaultValue ?? EMPTY_RANGE,\n );\n\n const currentValue = isControlled ? (controlledValue ?? EMPTY_RANGE) : uncontrolledValue;\n\n const [isOpen, setIsOpen] = useState(false);\n const [selectingTarget, setSelectingTarget] = useState<RangeSelectingTarget>('start');\n const [hoverDate, setHoverDate] = useState<ISODateString | null>(null);\n const [viewMonth, setViewMonth] = useState<ISODateString>(\n currentValue.start ?? adapter.today(),\n );\n const [focusedDate, setFocusedDate] = useState<ISODateString>(\n currentValue.start ?? adapter.today(),\n );\n\n const setRange = useCallback(\n (range: DateRange) => {\n if (!isControlled) {\n setUncontrolledValue(range);\n }\n onChange?.(range);\n },\n [isControlled, onChange],\n );\n\n const selectDate = useCallback(\n (iso: ISODateString) => {\n if (selectingTarget === 'start') {\n setRange({ start: iso, end: null });\n setSelectingTarget('end');\n setHoverDate(null);\n } else {\n const start = currentValue.start;\n if (!start) {\n setRange({ start: iso, end: null });\n setSelectingTarget('end');\n return;\n }\n\n const newRange: DateRange = adapter.isBefore(iso, start)\n ? { start: iso, end: start }\n : { start, end: iso };\n\n setRange(newRange);\n setSelectingTarget('start');\n setHoverDate(null);\n setIsOpen(false);\n }\n },\n [selectingTarget, currentValue.start, adapter, setRange],\n );\n\n const open = useCallback(() => {\n setIsOpen(true);\n const target = currentValue.start ?? adapter.today();\n setViewMonth(target);\n setFocusedDate(target);\n if (currentValue.start && currentValue.end) {\n setSelectingTarget('start');\n }\n }, [currentValue, adapter]);\n\n const close = useCallback(() => {\n setIsOpen(false);\n setHoverDate(null);\n }, []);\n\n const toggle = useCallback(() => {\n if (isOpen) close();\n else open();\n }, [isOpen, open, close]);\n\n const previousMonth = useCallback(() => {\n const newMonth = adapter.addMonths(viewMonth, -1);\n setViewMonth(newMonth);\n setFocusedDate(adapter.startOfMonth(newMonth));\n }, [adapter, viewMonth]);\n\n const nextMonth = useCallback(() => {\n const newMonth = adapter.addMonths(viewMonth, 1);\n setViewMonth(newMonth);\n setFocusedDate(adapter.startOfMonth(newMonth));\n }, [adapter, viewMonth]);\n\n const calendar = getCalendarDays(viewMonth, adapter, {\n weekStartsOn,\n focusedDate,\n disabled,\n range: currentValue,\n rangeHover: hoverDate,\n });\n\n return {\n value: currentValue,\n selectingTarget,\n selectDate,\n setRange,\n isOpen,\n open,\n close,\n toggle,\n hoverDate,\n setHoverDate,\n viewMonth,\n setViewMonth,\n calendar,\n focusedDate,\n setFocusedDate,\n previousMonth,\n nextMonth,\n pickerId,\n adapter,\n };\n}\n","import { useCallback, useId, useMemo, useRef, useState } from 'react';\nimport {\n generateHours,\n generateMinutes,\n getTime,\n setTime as setTimeOnIso,\n to12Hour,\n to24Hour,\n} from '@kalyx/core';\nimport type { ISODateString, TimeValue } from '@kalyx/core';\nimport type { TimePickerFormat } from '../context/TimePickerContext.js';\n\nexport interface UseTimePickerOptions {\n /** Selected time (controlled mode) */\n value?: ISODateString | null;\n /** Initial time (uncontrolled mode) */\n defaultValue?: ISODateString;\n /** Callback fired when the time changes */\n onChange?: (value: ISODateString | null) => void;\n /** 12h or 24h format */\n format?: TimePickerFormat;\n /** Minute step */\n step?: number;\n /** Whether seconds are shown */\n withSeconds?: boolean;\n}\n\nexport interface UseTimePickerReturn {\n /** Current ISO datetime value */\n value: ISODateString | null;\n /** Current time (TimeValue) */\n currentTime: TimeValue;\n /** Update part of the time */\n setTime: (partial: Partial<TimeValue>) => void;\n /** Set the hour directly (1-12 in 12h mode, 0-23 in 24h mode) */\n setHour: (hour: number) => void;\n /** Set the minute */\n setMinute: (minute: number) => void;\n /** Set the second */\n setSecond: (second: number) => void;\n /** Change AM/PM (12h mode only) */\n setPeriod: (period: 'AM' | 'PM') => void;\n /** Available hour list */\n availableHours: number[];\n /** Available minute list (respects step) */\n availableMinutes: number[];\n /** 12h or 24h mode */\n format: TimePickerFormat;\n /** Hour value for display (1-12 in 12h mode) */\n displayHour: number;\n /** Current AM/PM (12h mode only, null in 24h) */\n period: 'AM' | 'PM' | null;\n /** Unique ID */\n pickerId: string;\n}\n\nfunction getDefaultIso(): ISODateString {\n const now = new Date();\n return new Date(\n Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()),\n ).toISOString();\n}\n\n/**\n * Hook that manages TimePicker state.\n * Use this when you want to build a fully custom UI without the built-in components.\n *\n * @example\n * ```tsx\n * function MyTimePicker() {\n * const {\n * currentTime, displayHour, period,\n * availableHours, availableMinutes,\n * setHour, setMinute, setPeriod,\n * } = useTimePicker({ format: '12h', step: 15 });\n * // displayHour = 1-12, period = \"AM\" | \"PM\"\n * // availableMinutes = [0, 15, 30, 45]\n * }\n * ```\n */\nexport function useTimePicker(options: UseTimePickerOptions = {}): UseTimePickerReturn {\n const {\n value: controlledValue,\n defaultValue,\n onChange,\n format = '24h',\n step = 1,\n } = options;\n\n const pickerId = useId();\n const isControlled = useRef(controlledValue !== undefined).current;\n\n const [uncontrolledValue, setUncontrolledValue] = useState<ISODateString | null>(\n defaultValue ?? null,\n );\n\n const currentValue = isControlled ? (controlledValue ?? null) : uncontrolledValue;\n const baseIso = currentValue ?? getDefaultIso();\n const currentTime = useMemo(() => getTime(baseIso), [baseIso]);\n\n const setTime = useCallback(\n (partial: Partial<TimeValue>) => {\n const newIso = setTimeOnIso(baseIso, partial);\n if (!isControlled) {\n setUncontrolledValue(newIso);\n }\n onChange?.(newIso);\n },\n [baseIso, isControlled, onChange],\n );\n\n const period = format === '12h' ? to12Hour(currentTime.hours).period : null;\n const displayHour =\n format === '12h' ? to12Hour(currentTime.hours).hours12 : currentTime.hours;\n\n const setHour = useCallback(\n (hour: number) => {\n const hours24 = format === '12h' && period ? to24Hour(hour, period) : hour;\n setTime({ hours: hours24 });\n },\n [format, period, setTime],\n );\n\n const setMinute = useCallback(\n (minute: number) => setTime({ minutes: minute }),\n [setTime],\n );\n\n const setSecond = useCallback(\n (second: number) => setTime({ seconds: second }),\n [setTime],\n );\n\n const setPeriod = useCallback(\n (newPeriod: 'AM' | 'PM') => {\n if (format !== '12h') return;\n const newHours24 = to24Hour(displayHour, newPeriod);\n setTime({ hours: newHours24 });\n },\n [format, displayHour, setTime],\n );\n\n return {\n value: currentValue,\n currentTime,\n setTime,\n setHour,\n setMinute,\n setSecond,\n setPeriod,\n availableHours: generateHours(format),\n availableMinutes: generateMinutes(step),\n format,\n displayHour,\n period,\n pickerId,\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kalyx/react",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Headless, SSR-safe React DatePicker",
5
5
  "license": "MIT",
6
6
  "author": "jiji-hoon96",
@@ -49,7 +49,7 @@
49
49
  "@floating-ui/react": "^0.26.0",
50
50
  "date-fns": "^4.0.0",
51
51
  "date-fns-tz": "^3.0.0",
52
- "@kalyx/core": "0.2.0"
52
+ "@kalyx/core": "0.2.1"
53
53
  },
54
54
  "peerDependencies": {
55
55
  "react": "^19.0.0",
@@ -1,23 +0,0 @@
1
- import type { HTMLAttributes } from 'react';
2
- export interface DatePickerCalendarClassNames {
3
- root?: string;
4
- header?: string;
5
- title?: string;
6
- navButton?: string;
7
- grid?: string;
8
- gridRow?: string;
9
- gridCell?: string;
10
- day?: string;
11
- daySelected?: string;
12
- dayToday?: string;
13
- dayDisabled?: string;
14
- dayOutsideMonth?: string;
15
- weekdayHeader?: string;
16
- }
17
- export interface DatePickerCalendarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
18
- classNames?: DatePickerCalendarClassNames;
19
- /** 타이틀("January 2026") 클릭 시 콜백. Month/Year 뷰 전환에 사용. */
20
- onTitleClick?: () => void;
21
- }
22
- export declare function DatePickerCalendar({ classNames, onTitleClick, ...props }: DatePickerCalendarProps): import("react/jsx-runtime").JSX.Element;
23
- //# sourceMappingURL=Calendar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../src/components/DatePicker/Calendar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAK5C,MAAM,WAAW,4BAA4B;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAC3F,UAAU,CAAC,EAAE,4BAA4B,CAAC;IAC1C,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAeD,wBAAgB,kBAAkB,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,EAAE,uBAAuB,2CAiOjG"}