@uniai-fe/uds-primitives 0.6.11 → 0.6.12

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniai-fe/uds-primitives",
3
- "version": "0.6.11",
3
+ "version": "0.6.12",
4
4
  "description": "UNIAI Design System; Primitives Components Package",
5
5
  "type": "module",
6
6
  "private": false,
@@ -5,6 +5,7 @@ import {
5
5
  DatesProvider,
6
6
  type DateStringValue,
7
7
  } from "@mantine/dates";
8
+ import { useEffect, useState } from "react";
8
9
  import { dayjs } from "../../../init/dayjs";
9
10
  import { CalendarIcon } from "./Icon";
10
11
  import type { CalendarDatePickerProps, CalendarGridProps } from "../types";
@@ -25,8 +26,14 @@ export default function CalendarCore({
25
26
  onChange,
26
27
  datePickerProps,
27
28
  }: CalendarGridProps) {
28
- const { valueFormat, renderDay, ...safeDatePickerProps } = (datePickerProps ??
29
- {}) as CalendarDatePickerProps & {
29
+ const {
30
+ valueFormat,
31
+ renderDay,
32
+ date,
33
+ defaultDate,
34
+ onDateChange,
35
+ ...safeDatePickerProps
36
+ } = (datePickerProps ?? {}) as CalendarDatePickerProps & {
30
37
  /**
31
38
  * deprecated DatePicker 표시 포맷 옵션
32
39
  */
@@ -35,6 +42,18 @@ export default function CalendarCore({
35
42
  // 변경: valueFormat은 의도적으로 폐기된 옵션이므로 명시적으로 무시한다.
36
43
  void valueFormat;
37
44
 
45
+ const isDisplayedDateControlled = date !== undefined;
46
+ const [displayedDate, setDisplayedDate] = useState<Date | DateStringValue>(
47
+ () => date ?? mapValueToPicker(value) ?? defaultDate ?? new Date(),
48
+ );
49
+
50
+ useEffect(() => {
51
+ if (isDisplayedDateControlled) {
52
+ return;
53
+ }
54
+ setDisplayedDate(mapValueToPicker(value) ?? defaultDate ?? new Date());
55
+ }, [defaultDate, isDisplayedDateControlled, value]);
56
+
38
57
  // 기본 DatePicker 옵션/스타일 책임을 Calendar.Core에 고정한다.
39
58
  const resolvedDatePickerProps = {
40
59
  size: "sm" as const,
@@ -80,6 +99,13 @@ export default function CalendarCore({
80
99
  onChange(parsed);
81
100
  };
82
101
 
102
+ const handleDateChange = (nextDate: DateStringValue) => {
103
+ if (!isDisplayedDateControlled) {
104
+ setDisplayedDate(nextDate);
105
+ }
106
+ onDateChange?.(nextDate);
107
+ };
108
+
83
109
  return (
84
110
  <DatesProvider
85
111
  settings={{
@@ -98,6 +124,8 @@ export default function CalendarCore({
98
124
  value={mapValueToPicker(value) as never}
99
125
  onChange={handleChange as never}
100
126
  {...resolvedDatePickerProps}
127
+ date={date ?? displayedDate}
128
+ onDateChange={handleDateChange}
101
129
  />
102
130
  </DatesProvider>
103
131
  );