@owp/core 2.5.16 → 2.5.18
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/dist/components/OwpPicker/OwpTimePicker.js +186 -208
- package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +298 -227
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +487 -0
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -0
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +369 -248
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +201 -117
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
- package/dist/constants/gridTheme.js +7 -6
- package/dist/constants/gridTheme.js.map +1 -1
- package/dist/constants/treeGrid.js +27 -26
- package/dist/constants/treeGrid.js.map +1 -1
- package/dist/constants.js +23 -22
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpPicker/OwpTimePicker.d.ts +3 -1
- package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +14 -6
- package/dist/types/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.d.ts +17 -0
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +41 -7
- package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +1 -1
- package/dist/types/constants/gridTheme.d.ts +2 -0
- package/dist/types/constants/treeGrid.d.ts +2 -1
- package/dist/types/types/OwpGridThemeTypes.d.ts +1 -0
- package/dist/types/utils/index.d.ts +0 -1
- package/dist/types/utils/treeGridUtil.d.ts +27 -0
- package/dist/utils/treeGridUtil.js +172 -112
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/dist/utils.js +85 -83
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js +0 -84
- package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js.map +0 -1
- package/dist/types/components/OwpTreeGrid/internal/treeGridColumnEditRules.d.ts +0 -60
- package/dist/types/utils/normalizeTimeToHourMinute.d.ts +0 -11
- package/dist/utils/normalizeTimeToHourMinute.js +0 -34
- package/dist/utils/normalizeTimeToHourMinute.js.map +0 -1
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
var Ht = Object.defineProperty;
|
|
2
|
+
var l = (t, r) => Ht(t, "name", { value: r, configurable: !0 });
|
|
3
|
+
import { jsx as I, jsxs as Kt } from "../../../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
|
+
import { VALUE_TIME_FORMATTER as v, VALUE_DATE_FORMATTER as T, VALUE_MONTH_FORMATTER as A, VALUE_YEAR_FORMATTER as Y } from "../../../OwpPicker/constants/index.js";
|
|
5
|
+
import { useOwpTranslation as $t } from "../../../../hooks/useOwpTranslation.js";
|
|
6
|
+
import { ensureDayjsBrowserSetup as Bt } from "../../../../utils/dayjsBrowser.js";
|
|
7
|
+
import Gt from "../../../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/Clear.js";
|
|
8
|
+
import jt from "@mui/material/ClickAwayListener";
|
|
9
|
+
import zt from "@mui/material/IconButton";
|
|
10
|
+
import Ut from "@mui/material/InputAdornment";
|
|
11
|
+
import Vt from "@mui/material/Paper";
|
|
12
|
+
import Wt from "@mui/material/Popper";
|
|
13
|
+
import Nt from "@mui/material/TextField";
|
|
14
|
+
import { LocalizationProvider as gt, MultiSectionDigitalClock as qt } from "@mui/x-date-pickers";
|
|
15
|
+
import { AdapterDayjs as Xt } from "@mui/x-date-pickers/AdapterDayjs";
|
|
16
|
+
import { enUS as Jt } from "../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/en-US.js";
|
|
17
|
+
import { ko as Qt } from "../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/ko.js";
|
|
18
|
+
import R from "dayjs";
|
|
19
|
+
import { useState as it, useRef as st, useMemo as M, useEffect as U, useCallback as _ } from "react";
|
|
20
|
+
import { DatePicker as Zt, registerLocale as mt, setDefaultLocale as te } from "../../../../node_modules/.pnpm/react-datepicker@8.7.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/index.es.js";
|
|
21
|
+
mt("ko", Qt);
|
|
22
|
+
mt("en", Jt);
|
|
23
|
+
te("ko");
|
|
24
|
+
Bt();
|
|
25
|
+
const H = `${T} ${v}`, O = `${v}:ss`, b = `${T} ${O}`, at = "", pt = "OwpTreeGridDatePickerEditor", ee = "OwpTreeGridTimePickerEditor", ne = '<span class="OwpTreeGridTimePickerEditorIcon" aria-hidden="true"></span>', N = "MM", g = "DD", V = 64, lt = 56, ct = /* @__PURE__ */ new Map([
|
|
26
|
+
["yyyy", Y],
|
|
27
|
+
["YYYY", Y],
|
|
28
|
+
["mm", N],
|
|
29
|
+
["MM", N],
|
|
30
|
+
["dd", g],
|
|
31
|
+
["DD", g],
|
|
32
|
+
["yyyy-mm", A],
|
|
33
|
+
["YYYY-MM", A],
|
|
34
|
+
["yyyy-mm-dd", T],
|
|
35
|
+
["YYYY-MM-DD", T],
|
|
36
|
+
["HH:mm", v],
|
|
37
|
+
["HH:mm:ss", O],
|
|
38
|
+
["yyyy-mm-dd HH:mm", H],
|
|
39
|
+
["YYYY-MM-DD HH:mm", H],
|
|
40
|
+
["yyyy-mm-dd HH:mm:ss", b],
|
|
41
|
+
["YYYY-MM-DD HH:mm:ss", b]
|
|
42
|
+
]), re = {
|
|
43
|
+
"&:hover": {
|
|
44
|
+
backgroundColor: "var(--owp-datepicker-hover-bg, rgba(3, 155, 229, 0.14))"
|
|
45
|
+
},
|
|
46
|
+
"&.Mui-selected": {
|
|
47
|
+
backgroundColor: "var(--owp-datepicker-selected-bg, #039be5)",
|
|
48
|
+
color: "var(--owp-datepicker-selected-color, #fff)",
|
|
49
|
+
"&:focus-visible, &:hover": {
|
|
50
|
+
backgroundColor: "var(--owp-datepicker-selected-hover-bg, #039be5)"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}, oe = /* @__PURE__ */ l((t) => (t == null ? void 0 : t.enabled) !== !1, "isDatePickerEditorEnabled"), ie = /* @__PURE__ */ l((t) => t == null ? void 0 : t.trim().replace(/\s+/g, " "), "normalizeTreeGridDateFormat"), Et = /* @__PURE__ */ l((t) => {
|
|
54
|
+
const r = ie(t);
|
|
55
|
+
return r ? ct.get(r) ?? ct.get(r.toLowerCase()) ?? null : null;
|
|
56
|
+
}, "convertTreeGridDateFormatToDayjs"), q = /* @__PURE__ */ l((t) => {
|
|
57
|
+
switch (t) {
|
|
58
|
+
case Y:
|
|
59
|
+
return { kind: "year", valueFormat: t, inputLength: 4, digitLength: 4 };
|
|
60
|
+
case N:
|
|
61
|
+
return { kind: "month", valueFormat: t, inputLength: 2, digitLength: 2 };
|
|
62
|
+
case A:
|
|
63
|
+
return { kind: "yearMonth", valueFormat: t, inputLength: 7, digitLength: 6 };
|
|
64
|
+
case g:
|
|
65
|
+
return { kind: "day", valueFormat: t, inputLength: 2, digitLength: 2 };
|
|
66
|
+
case v:
|
|
67
|
+
return { kind: "time", valueFormat: t, inputLength: 5, digitLength: 4 };
|
|
68
|
+
case O:
|
|
69
|
+
return { kind: "time", valueFormat: t, inputLength: 8, digitLength: 6 };
|
|
70
|
+
case H:
|
|
71
|
+
return { kind: "dateTime", valueFormat: t, inputLength: 16, digitLength: 12 };
|
|
72
|
+
case b:
|
|
73
|
+
return { kind: "dateTime", valueFormat: t, inputLength: 19, digitLength: 14 };
|
|
74
|
+
default:
|
|
75
|
+
return { kind: "date", valueFormat: t, inputLength: 10, digitLength: 8 };
|
|
76
|
+
}
|
|
77
|
+
}, "getDatePickerEditorFormatMeta"), se = /* @__PURE__ */ l((t, r) => {
|
|
78
|
+
var e;
|
|
79
|
+
if (!t)
|
|
80
|
+
return q(T);
|
|
81
|
+
const o = t.row, i = (e = t.grid.Cols) == null ? void 0 : e[t.col], c = o[`${t.col}EditFormat`] ?? o[`${t.col}Format`] ?? (i == null ? void 0 : i.EditFormat) ?? (i == null ? void 0 : i.Format), s = Et(typeof c == "string" ? c : void 0) ?? (r != null && r.showTimeInput || r != null && r.showTimeSelect ? H : T);
|
|
82
|
+
return q(s);
|
|
83
|
+
}, "resolveDatePickerEditorFormatMeta"), ae = /* @__PURE__ */ l((t, r) => {
|
|
84
|
+
const o = t.replace(/\D/g, "").slice(0, r.digitLength), i = o.slice(0, 4), c = o.slice(4, 6), s = o.slice(6, 8), e = o.slice(8, 10), E = o.slice(10, 12), m = o.slice(12, 14);
|
|
85
|
+
switch (r.kind) {
|
|
86
|
+
case "year":
|
|
87
|
+
case "month":
|
|
88
|
+
case "day":
|
|
89
|
+
return o;
|
|
90
|
+
case "yearMonth":
|
|
91
|
+
return [i, c].filter(Boolean).join("-");
|
|
92
|
+
case "time":
|
|
93
|
+
return [o.slice(0, 2), o.slice(2, 4), o.slice(4, 6)].filter(Boolean).join(":");
|
|
94
|
+
case "dateTime":
|
|
95
|
+
return [i, c, s].filter(Boolean).join("-") + (e ? ` ${e}` : "") + (E ? `:${E}` : "") + (m ? `:${m}` : "");
|
|
96
|
+
default:
|
|
97
|
+
return [i, c, s].filter(Boolean).join("-");
|
|
98
|
+
}
|
|
99
|
+
}, "formatDatePickerEditorInput"), Dt = /* @__PURE__ */ l((t, r) => t.length === r.inputLength, "isCompleteDatePickerEditorInput"), kt = /* @__PURE__ */ l((t, r, o, i) => {
|
|
100
|
+
var c, s, e, E;
|
|
101
|
+
return o.kind === "month" ? `${((s = (c = i == null ? void 0 : i.columnOptions) == null ? void 0 : c[t]) == null ? void 0 : s.baseYear) ?? R().format(Y)}-${r}` : o.kind === "day" ? `${((E = (e = i == null ? void 0 : i.columnOptions) == null ? void 0 : e[t]) == null ? void 0 : E.baseYearMonth) ?? R().format(A)}-${r}` : r;
|
|
102
|
+
}, "resolvePartialDatePickerEditorInputValue"), yt = /* @__PURE__ */ l((t) => t.kind === "month" ? A : t.kind === "day" ? T : t.valueFormat, "resolvePartialDatePickerEditorInputFormat"), ut = /* @__PURE__ */ l((t, r, o, i) => {
|
|
103
|
+
if (!r)
|
|
104
|
+
return null;
|
|
105
|
+
if (o.kind === "year") {
|
|
106
|
+
const s = R(`${r}-01-01`, T, !0);
|
|
107
|
+
return s.isValid() ? s : null;
|
|
108
|
+
}
|
|
109
|
+
if (o.kind === "yearMonth") {
|
|
110
|
+
const s = R(`${r}-01`, T, !0);
|
|
111
|
+
return s.isValid() ? s : null;
|
|
112
|
+
}
|
|
113
|
+
const c = R(
|
|
114
|
+
kt(t, r, o, i),
|
|
115
|
+
yt(o),
|
|
116
|
+
!0
|
|
117
|
+
);
|
|
118
|
+
return c.isValid() ? c : null;
|
|
119
|
+
}, "parseDatePickerEditorValue"), le = /* @__PURE__ */ l((t) => {
|
|
120
|
+
switch (t.kind) {
|
|
121
|
+
case "year":
|
|
122
|
+
return "yyyy";
|
|
123
|
+
case "month":
|
|
124
|
+
return "MM";
|
|
125
|
+
case "yearMonth":
|
|
126
|
+
return "yyyy-MM";
|
|
127
|
+
case "day":
|
|
128
|
+
return "dd";
|
|
129
|
+
case "dateTime":
|
|
130
|
+
return t.valueFormat === b ? "yyyy-MM-dd HH:mm:ss" : "yyyy-MM-dd HH:mm";
|
|
131
|
+
default:
|
|
132
|
+
return "yyyy-MM-dd";
|
|
133
|
+
}
|
|
134
|
+
}, "getReactDatePickerDisplayFormat"), W = /* @__PURE__ */ l((t, r, o, i) => Dt(r, o) && R(
|
|
135
|
+
kt(t, r, o, i),
|
|
136
|
+
yt(o),
|
|
137
|
+
!0
|
|
138
|
+
).isValid(), "isValidDatePickerEditorInput"), dt = /* @__PURE__ */ l((t) => t.valueFormat === O || t.valueFormat === b, "hasDatePickerEditorSeconds"), ce = /* @__PURE__ */ l((t, r) => {
|
|
139
|
+
const o = (t == null ? void 0 : t.split(/\s+/).filter(Boolean)) ?? [];
|
|
140
|
+
return o.includes(r) ? t : [...o, r].join(" ");
|
|
141
|
+
}, "appendTreeGridClass"), ue = /* @__PURE__ */ l((t, r, o, i) => {
|
|
142
|
+
var m, C, w, k;
|
|
143
|
+
const c = (m = t.GetStringEdit) == null ? void 0 : m.call(t, r, o), s = (C = t.GetString) == null ? void 0 : C.call(t, r, o), e = (w = t.GetValue) == null ? void 0 : w.call(t, r, o), E = (k = i.textContent) == null ? void 0 : k.trim();
|
|
144
|
+
return String(c || s || E || e || "");
|
|
145
|
+
}, "resolveDatePickerEditorInitialValue"), de = /* @__PURE__ */ l((t, r) => {
|
|
146
|
+
const o = r;
|
|
147
|
+
return o.ctrlKey || o.altKey || o.metaKey ? !1 : /^\d$/.test(t) || /^\d$/.test(o.key) || t === "Enter" || t === "F2" || t === "Backspace" || t === "Delete" || o.key === "Enter" || o.key === "F2" || o.key === "Backspace" || o.key === "Delete";
|
|
148
|
+
}, "isDatePickerEditorStartKey"), me = /* @__PURE__ */ l((t) => {
|
|
149
|
+
const r = t.target;
|
|
150
|
+
return r instanceof Element && !!r.closest(`.${pt}`);
|
|
151
|
+
}, "isDatePickerEditorEventTarget"), K = /* @__PURE__ */ l((t) => t === 1 || t === "1", "isTreeGridCanEditEnabled"), pe = /* @__PURE__ */ l((t) => t === 0 || t === "0" || t === !1, "isTreeGridCanEditDisabled"), Ee = /* @__PURE__ */ l((t) => !t || t.Fixed === "Foot" ? !1 : t.Kind === "Data" || K(t.Added), "isDisplayTreeGridRow"), x = /* @__PURE__ */ l((t, r, o, i) => {
|
|
152
|
+
var m;
|
|
153
|
+
if (i.size > 0 && !i.has(o))
|
|
154
|
+
return !1;
|
|
155
|
+
const c = (m = t.Cols) == null ? void 0 : m[o], s = r[`${o}CanEdit`], e = s != null, E = K(e ? s : c == null ? void 0 : c.CanEdit);
|
|
156
|
+
return (c == null ? void 0 : c.Type) === "Date" && Ee(r) && !pe(r.CanEdit) && E && r.Deleted !== 1;
|
|
157
|
+
}, "isEditableDatePickerCell"), De = /* @__PURE__ */ l((t, r) => {
|
|
158
|
+
var i;
|
|
159
|
+
if (!t)
|
|
160
|
+
return;
|
|
161
|
+
(r.length > 0 ? r : Object.keys(t.Cols ?? {}).filter((c) => {
|
|
162
|
+
var s, e;
|
|
163
|
+
return ((e = (s = t.Cols) == null ? void 0 : s[c]) == null ? void 0 : e.Type) === "Date";
|
|
164
|
+
})).forEach((c) => {
|
|
165
|
+
var m;
|
|
166
|
+
const s = (m = t.Cols) == null ? void 0 : m[c];
|
|
167
|
+
if (!s || s.Type !== "Date" || !K(s.CanEdit))
|
|
168
|
+
return;
|
|
169
|
+
s.AutoCalendar = 0, s.CalendarButtons = 0;
|
|
170
|
+
const e = s.EditFormat ?? s.Format, E = Et(typeof e == "string" ? e : void 0) ?? T;
|
|
171
|
+
q(E).kind === "time" ? (s.Button = "Html", s.ButtonText = ne, s.OnClickSide = "Focus", s.Class = ce(s.Class, ee)) : (s.Button = "Date", s.OnClickSideDate = "Focus");
|
|
172
|
+
}), (i = t.Rerender) == null || i.call(t, 1, 1);
|
|
173
|
+
}, "configureTreeGridDatePickerColumns"), Ye = /* @__PURE__ */ l(({
|
|
174
|
+
config: t,
|
|
175
|
+
treeGridInstanceRef: r,
|
|
176
|
+
isTreeGridReady: o,
|
|
177
|
+
onValueChange: i
|
|
178
|
+
}) => {
|
|
179
|
+
var rt;
|
|
180
|
+
const { t: c, i18n: s } = $t(), [e, E] = it(null), [m, C] = it(""), w = st(null), k = st(!1), y = oe(t), $ = ((rt = t == null ? void 0 : t.columns) == null ? void 0 : rt.join(at)) ?? "", S = M(
|
|
181
|
+
() => $ ? $.split(at) : [],
|
|
182
|
+
[$]
|
|
183
|
+
), P = M(() => new Set(S), [S]), X = s.resolvedLanguage ?? s.language ?? "kr", Tt = X === "kr" ? "ko" : "en", ht = X === "kr" ? "ko" : "en", B = (t == null ? void 0 : t.allowInput) !== !1, u = M(
|
|
184
|
+
() => se(e, t),
|
|
185
|
+
[t, e]
|
|
186
|
+
);
|
|
187
|
+
U(() => {
|
|
188
|
+
!y || !o || De(r.current, S);
|
|
189
|
+
}, [S, y, o, r]);
|
|
190
|
+
const h = _(() => {
|
|
191
|
+
E(null);
|
|
192
|
+
}, []), f = _(
|
|
193
|
+
(n, a, d) => {
|
|
194
|
+
const p = n.GetCell(a, d);
|
|
195
|
+
if (!p)
|
|
196
|
+
return;
|
|
197
|
+
const D = {
|
|
198
|
+
grid: n,
|
|
199
|
+
row: a,
|
|
200
|
+
col: d,
|
|
201
|
+
anchorRect: p.getBoundingClientRect(),
|
|
202
|
+
value: ue(n, a, d, p)
|
|
203
|
+
};
|
|
204
|
+
return k.current = !1, C(D.value ?? ""), E(D), 1;
|
|
205
|
+
},
|
|
206
|
+
[]
|
|
207
|
+
), It = _(
|
|
208
|
+
(n, a, d, p, D, L) => {
|
|
209
|
+
var ot;
|
|
210
|
+
if (!y || !x(n, a, d, P)) {
|
|
211
|
+
h();
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
return (ot = n.CloseDialog) == null || ot.call(n), L.preventDefault(), L.stopPropagation(), f(n, a, d);
|
|
215
|
+
},
|
|
216
|
+
[h, P, y, f]
|
|
217
|
+
), _t = _(
|
|
218
|
+
(n, a, d, p) => {
|
|
219
|
+
var D;
|
|
220
|
+
if (!(!y || !x(n, a, d, P)))
|
|
221
|
+
return (D = n.CloseDialog) == null || D.call(n), p.preventDefault(), p.stopPropagation(), f(n, a, d);
|
|
222
|
+
},
|
|
223
|
+
[P, y, f]
|
|
224
|
+
), Rt = _(
|
|
225
|
+
(n, a, d) => {
|
|
226
|
+
var L;
|
|
227
|
+
if (me(d))
|
|
228
|
+
return 1;
|
|
229
|
+
const p = n.FRow || n.ARow, D = n.FCol || n.ACol;
|
|
230
|
+
if (!(!y || !p || !D || !x(n, p, D, P) || !de(a, d)))
|
|
231
|
+
return (L = n.CloseDialog) == null || L.call(n), d.preventDefault(), d.stopPropagation(), f(n, p, D);
|
|
232
|
+
},
|
|
233
|
+
[P, y, f]
|
|
234
|
+
), Ct = _(
|
|
235
|
+
(n, a, d) => {
|
|
236
|
+
var p;
|
|
237
|
+
if (!(!y || !x(n, a, d, P)))
|
|
238
|
+
return (p = n.CloseDialog) == null || p.call(n), f(n, a, d), !0;
|
|
239
|
+
},
|
|
240
|
+
[P, y, f]
|
|
241
|
+
), Pt = M(() => {
|
|
242
|
+
var a;
|
|
243
|
+
if (!e || u.kind === "time")
|
|
244
|
+
return null;
|
|
245
|
+
const n = W(
|
|
246
|
+
e.col,
|
|
247
|
+
m,
|
|
248
|
+
u,
|
|
249
|
+
t
|
|
250
|
+
) ? ut(e.col, m, u, t) : null;
|
|
251
|
+
return n ? n.toDate() : ((a = ut(
|
|
252
|
+
e.col,
|
|
253
|
+
e.value,
|
|
254
|
+
u,
|
|
255
|
+
t
|
|
256
|
+
)) == null ? void 0 : a.toDate()) ?? null;
|
|
257
|
+
}, [t, e, u, m]), ft = M(() => {
|
|
258
|
+
if (u.kind !== "time")
|
|
259
|
+
return null;
|
|
260
|
+
const n = R(m, u.valueFormat, !0);
|
|
261
|
+
if (n.isValid())
|
|
262
|
+
return n;
|
|
263
|
+
if (!(e != null && e.value))
|
|
264
|
+
return null;
|
|
265
|
+
const a = R(e.value, u.valueFormat, !0);
|
|
266
|
+
return a.isValid() ? a : null;
|
|
267
|
+
}, [e == null ? void 0 : e.value, u, m]), Mt = M(() => e ? {
|
|
268
|
+
getBoundingClientRect: /* @__PURE__ */ l(() => e.anchorRect, "getBoundingClientRect")
|
|
269
|
+
} : null, [e]), wt = M(() => {
|
|
270
|
+
if (!(typeof document > "u"))
|
|
271
|
+
return document.getElementById("calendar-portal") ?? void 0;
|
|
272
|
+
}, []), Ft = /* @__PURE__ */ l((n) => {
|
|
273
|
+
if (!e)
|
|
274
|
+
return;
|
|
275
|
+
const a = n ? R(n).format(u.valueFormat) : "";
|
|
276
|
+
k.current = !0, C(a), e.grid.SetString(e.row, e.col, a, 1), i == null || i(e.grid, e.row, e.col, a), h();
|
|
277
|
+
}, "handleDateSelect"), Lt = /* @__PURE__ */ l((n, a) => {
|
|
278
|
+
if (!e)
|
|
279
|
+
return;
|
|
280
|
+
const d = n != null && n.isValid() ? n.format(u.valueFormat) : "", p = a === (dt(u) ? "seconds" : "minutes");
|
|
281
|
+
p && (k.current = !0), C(d), e.grid.SetString(e.row, e.col, d, 1), i == null || i(e.grid, e.row, e.col, d), E((D) => D && { ...D, value: d }), p && h();
|
|
282
|
+
}, "handleTimeSelect"), J = _(
|
|
283
|
+
(n) => {
|
|
284
|
+
e && (e.grid.SetString(e.row, e.col, n, 1), i == null || i(e.grid, e.row, e.col, n));
|
|
285
|
+
},
|
|
286
|
+
[e, i]
|
|
287
|
+
), G = _(() => !e || !W(e.col, m, u, t) ? !1 : (k.current = !0, J(m), !0), [J, t, e, u, m]), At = _(() => {
|
|
288
|
+
G(), h();
|
|
289
|
+
}, [h, G]), bt = /* @__PURE__ */ l((n) => {
|
|
290
|
+
e && C(ae(n.target.value, u));
|
|
291
|
+
}, "handleInputChange"), vt = /* @__PURE__ */ l((n) => {
|
|
292
|
+
n.stopPropagation(), n.nativeEvent.stopImmediatePropagation(), !(n.key !== "Enter" || !e) && G() && h();
|
|
293
|
+
}, "handleInputKeyDown"), Ot = /* @__PURE__ */ l((n) => {
|
|
294
|
+
n.preventDefault(), n.stopPropagation(), e && (k.current = !0, e.grid.SetString(e.row, e.col, "", 1), i == null || i(e.grid, e.row, e.col, ""), C(""), E((a) => a && { ...a, value: "" }));
|
|
295
|
+
}, "handleInputClear"), Q = /* @__PURE__ */ l((n) => {
|
|
296
|
+
n.stopPropagation();
|
|
297
|
+
}, "handleEditorMouseEvent"), Z = /* @__PURE__ */ l((n) => {
|
|
298
|
+
n.stopPropagation(), n.nativeEvent.stopImmediatePropagation();
|
|
299
|
+
}, "handleEditorKeyboardEvent"), F = m, tt = e == null ? void 0 : e.grid, et = e == null ? void 0 : e.row, nt = e == null ? void 0 : e.col, St = !k.current && !!F && Dt(F, u) && !W((e == null ? void 0 : e.col) ?? "", F, u, t), j = dt(u), z = V * (j ? 3 : 2), xt = j ? ["hours", "minutes", "seconds"] : ["hours", "minutes"], Yt = j ? O : v;
|
|
300
|
+
return U(() => {
|
|
301
|
+
if (!e)
|
|
302
|
+
return;
|
|
303
|
+
const n = /* @__PURE__ */ l((a) => {
|
|
304
|
+
a.key === "Escape" && h();
|
|
305
|
+
}, "handleKeyDown");
|
|
306
|
+
return window.addEventListener("keydown", n), () => {
|
|
307
|
+
window.removeEventListener("keydown", n);
|
|
308
|
+
};
|
|
309
|
+
}, [h, e]), U(() => {
|
|
310
|
+
if (!tt || !et || !nt || !B)
|
|
311
|
+
return;
|
|
312
|
+
const n = window.requestAnimationFrame(() => {
|
|
313
|
+
var a;
|
|
314
|
+
(a = w.current) == null || a.focus();
|
|
315
|
+
});
|
|
316
|
+
return () => {
|
|
317
|
+
window.cancelAnimationFrame(n);
|
|
318
|
+
};
|
|
319
|
+
}, [B, nt, tt, et]), {
|
|
320
|
+
datePickerEditorElement: e ? /* @__PURE__ */ I(
|
|
321
|
+
Wt,
|
|
322
|
+
{
|
|
323
|
+
open: !0,
|
|
324
|
+
anchorEl: Mt,
|
|
325
|
+
container: wt,
|
|
326
|
+
placement: "bottom-start",
|
|
327
|
+
sx: { zIndex: 1400 },
|
|
328
|
+
children: /* @__PURE__ */ I(jt, { onClickAway: At, children: /* @__PURE__ */ Kt(
|
|
329
|
+
Vt,
|
|
330
|
+
{
|
|
331
|
+
className: pt,
|
|
332
|
+
elevation: 8,
|
|
333
|
+
onClick: Q,
|
|
334
|
+
onKeyDown: Z,
|
|
335
|
+
onKeyUp: Z,
|
|
336
|
+
onMouseDown: Q,
|
|
337
|
+
sx: {
|
|
338
|
+
borderRadius: 1,
|
|
339
|
+
lineHeight: 0,
|
|
340
|
+
overflow: "hidden",
|
|
341
|
+
width: u.kind === "time" ? z : "auto",
|
|
342
|
+
"& .react-datepicker": {
|
|
343
|
+
border: 0,
|
|
344
|
+
display: "block",
|
|
345
|
+
lineHeight: "normal"
|
|
346
|
+
},
|
|
347
|
+
"& .react-datepicker__month-container": {
|
|
348
|
+
float: "none"
|
|
349
|
+
},
|
|
350
|
+
"& .react-datepicker__month": {
|
|
351
|
+
marginBottom: 0
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
children: [
|
|
355
|
+
B && /* @__PURE__ */ I(
|
|
356
|
+
Nt,
|
|
357
|
+
{
|
|
358
|
+
autoFocus: !0,
|
|
359
|
+
inputRef: w,
|
|
360
|
+
fullWidth: !0,
|
|
361
|
+
size: "small",
|
|
362
|
+
value: F,
|
|
363
|
+
error: St,
|
|
364
|
+
color: k.current ? "primary" : void 0,
|
|
365
|
+
placeholder: u.valueFormat,
|
|
366
|
+
onChange: bt,
|
|
367
|
+
onKeyDown: vt,
|
|
368
|
+
slotProps: {
|
|
369
|
+
htmlInput: {
|
|
370
|
+
inputMode: "numeric",
|
|
371
|
+
"aria-label": u.valueFormat
|
|
372
|
+
},
|
|
373
|
+
input: {
|
|
374
|
+
sx: {
|
|
375
|
+
paddingRight: 0.5
|
|
376
|
+
},
|
|
377
|
+
endAdornment: /* @__PURE__ */ I(
|
|
378
|
+
Ut,
|
|
379
|
+
{
|
|
380
|
+
position: "end",
|
|
381
|
+
sx: {
|
|
382
|
+
marginLeft: 0
|
|
383
|
+
},
|
|
384
|
+
children: /* @__PURE__ */ I(
|
|
385
|
+
zt,
|
|
386
|
+
{
|
|
387
|
+
size: "small",
|
|
388
|
+
"aria-label": "clear-date-picker-editor-value",
|
|
389
|
+
disabled: !F,
|
|
390
|
+
onClick: Ot,
|
|
391
|
+
onMouseDown: /* @__PURE__ */ l((n) => {
|
|
392
|
+
n.preventDefault(), n.stopPropagation();
|
|
393
|
+
}, "onMouseDown"),
|
|
394
|
+
sx: {
|
|
395
|
+
margin: 0,
|
|
396
|
+
padding: 0.25
|
|
397
|
+
},
|
|
398
|
+
children: /* @__PURE__ */ I(Gt, { fontSize: "small" })
|
|
399
|
+
}
|
|
400
|
+
)
|
|
401
|
+
}
|
|
402
|
+
)
|
|
403
|
+
}
|
|
404
|
+
},
|
|
405
|
+
sx: {
|
|
406
|
+
boxSizing: "border-box",
|
|
407
|
+
width: u.kind === "time" ? z : "100%",
|
|
408
|
+
px: 1,
|
|
409
|
+
py: 1,
|
|
410
|
+
"& .MuiOutlinedInput-root": {
|
|
411
|
+
borderRadius: 0.75,
|
|
412
|
+
fontSize: 13
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
),
|
|
417
|
+
u.kind === "time" ? /* @__PURE__ */ I(gt, { dateAdapter: Xt, adapterLocale: ht, children: /* @__PURE__ */ I(
|
|
418
|
+
qt,
|
|
419
|
+
{
|
|
420
|
+
ampm: !1,
|
|
421
|
+
value: ft,
|
|
422
|
+
views: xt,
|
|
423
|
+
onChange: /* @__PURE__ */ l((n, a, d) => Lt(n, d), "onChange"),
|
|
424
|
+
timeSteps: {
|
|
425
|
+
minutes: (t == null ? void 0 : t.timeIntervals) ?? 1,
|
|
426
|
+
seconds: 1
|
|
427
|
+
},
|
|
428
|
+
slotProps: {
|
|
429
|
+
digitalClockSectionItem: {
|
|
430
|
+
sx: re
|
|
431
|
+
}
|
|
432
|
+
},
|
|
433
|
+
sx: {
|
|
434
|
+
border: 0,
|
|
435
|
+
width: z,
|
|
436
|
+
"& .MuiMultiSectionDigitalClockSection-root": {
|
|
437
|
+
border: 0,
|
|
438
|
+
boxSizing: "border-box",
|
|
439
|
+
width: V,
|
|
440
|
+
flex: `0 0 ${V}px`,
|
|
441
|
+
display: "flex",
|
|
442
|
+
flexDirection: "column",
|
|
443
|
+
alignItems: "stretch"
|
|
444
|
+
},
|
|
445
|
+
"& .MuiMultiSectionDigitalClockSection-item": {
|
|
446
|
+
alignSelf: "stretch",
|
|
447
|
+
boxSizing: "border-box",
|
|
448
|
+
width: lt,
|
|
449
|
+
minWidth: lt,
|
|
450
|
+
justifyContent: "center",
|
|
451
|
+
marginLeft: "auto",
|
|
452
|
+
marginRight: "auto"
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
) }) : /* @__PURE__ */ I(
|
|
457
|
+
Zt,
|
|
458
|
+
{
|
|
459
|
+
inline: !0,
|
|
460
|
+
locale: Tt,
|
|
461
|
+
selected: Pt,
|
|
462
|
+
onChange: /* @__PURE__ */ l((n) => Ft(n), "onChange"),
|
|
463
|
+
showYearPicker: u.kind === "year",
|
|
464
|
+
showMonthYearPicker: u.kind === "yearMonth" || u.kind === "month",
|
|
465
|
+
showTimeInput: u.kind === "dateTime",
|
|
466
|
+
timeIntervals: t == null ? void 0 : t.timeIntervals,
|
|
467
|
+
dateFormat: le(u),
|
|
468
|
+
timeFormat: Yt,
|
|
469
|
+
timeCaption: `${c("Common.시간")}: `,
|
|
470
|
+
timeInputLabel: `${c("Common.시간")}: `
|
|
471
|
+
}
|
|
472
|
+
)
|
|
473
|
+
]
|
|
474
|
+
}
|
|
475
|
+
) })
|
|
476
|
+
}
|
|
477
|
+
) : null,
|
|
478
|
+
handleDatePickerEditorButtonClick: _t,
|
|
479
|
+
handleDatePickerEditorCellClick: It,
|
|
480
|
+
handleDatePickerEditorKeyDown: Rt,
|
|
481
|
+
handleDatePickerEditorStartEdit: Ct
|
|
482
|
+
};
|
|
483
|
+
}, "useOwpTreeGridDatePickerEditor");
|
|
484
|
+
export {
|
|
485
|
+
Ye as useOwpTreeGridDatePickerEditor
|
|
486
|
+
};
|
|
487
|
+
//# sourceMappingURL=useOwpTreeGridDatePickerEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOwpTreeGridDatePickerEditor.js","sources":["../../../../../src/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.tsx"],"sourcesContent":["import {\n VALUE_DATE_FORMATTER,\n VALUE_MONTH_FORMATTER,\n VALUE_TIME_FORMATTER,\n VALUE_YEAR_FORMATTER,\n} from '@/components/OwpPicker/constants';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { ensureDayjsBrowserSetup } from '@/utils/dayjsBrowser';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport Paper from '@mui/material/Paper';\nimport Popper, { type PopperProps } from '@mui/material/Popper';\nimport TextField from '@mui/material/TextField';\nimport { LocalizationProvider, MultiSectionDigitalClock } from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { enUS } from 'date-fns/locale/en-US';\nimport { ko } from 'date-fns/locale/ko';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport {\n type ChangeEvent,\n type MouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n type RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport ReactDatePicker, {\n registerLocale,\n setDefaultLocale,\n} from 'react-datepicker';\nimport type {\n OwpTreeGridDatePickerEditorConfig,\n OwpTreeGridRowModel,\n} from '../../OwpTreeGrid';\n\nregisterLocale('ko', ko);\nregisterLocale('en', enUS);\nsetDefaultLocale('ko');\nensureDayjsBrowserSetup();\n\nconst DATE_TIME_VALUE_FORMATTER = `${VALUE_DATE_FORMATTER} ${VALUE_TIME_FORMATTER}`;\nconst VALUE_TIME_SECOND_FORMATTER = `${VALUE_TIME_FORMATTER}:ss`;\nconst DATE_TIME_SECOND_VALUE_FORMATTER = `${VALUE_DATE_FORMATTER} ${VALUE_TIME_SECOND_FORMATTER}`;\nconst DATE_PICKER_EDITOR_COLUMNS_SEPARATOR = '\\u001f';\nconst TREE_GRID_DATE_PICKER_EDITOR_CLASS = 'OwpTreeGridDatePickerEditor';\nconst TREE_GRID_TIME_PICKER_EDITOR_CLASS = 'OwpTreeGridTimePickerEditor';\nconst TREE_GRID_TIME_PICKER_EDITOR_BUTTON_HTML =\n '<span class=\"OwpTreeGridTimePickerEditorIcon\" aria-hidden=\"true\"></span>';\nconst DATE_PICKER_EDITOR_MONTH_FORMATTER = 'MM';\nconst DATE_PICKER_EDITOR_DAY_FORMATTER = 'DD';\nconst TIME_PICKER_EDITOR_SECTION_WIDTH = 64;\nconst TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH = 56;\nconst TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS = new Map<string, OwpTreeGridDatePickerEditorValueFormat>([\n ['yyyy', VALUE_YEAR_FORMATTER],\n ['YYYY', VALUE_YEAR_FORMATTER],\n ['mm', DATE_PICKER_EDITOR_MONTH_FORMATTER],\n ['MM', DATE_PICKER_EDITOR_MONTH_FORMATTER],\n ['dd', DATE_PICKER_EDITOR_DAY_FORMATTER],\n ['DD', DATE_PICKER_EDITOR_DAY_FORMATTER],\n ['yyyy-mm', VALUE_MONTH_FORMATTER],\n ['YYYY-MM', VALUE_MONTH_FORMATTER],\n ['yyyy-mm-dd', VALUE_DATE_FORMATTER],\n ['YYYY-MM-DD', VALUE_DATE_FORMATTER],\n ['HH:mm', VALUE_TIME_FORMATTER],\n ['HH:mm:ss', VALUE_TIME_SECOND_FORMATTER],\n ['yyyy-mm-dd HH:mm', DATE_TIME_VALUE_FORMATTER],\n ['YYYY-MM-DD HH:mm', DATE_TIME_VALUE_FORMATTER],\n ['yyyy-mm-dd HH:mm:ss', DATE_TIME_SECOND_VALUE_FORMATTER],\n ['YYYY-MM-DD HH:mm:ss', DATE_TIME_SECOND_VALUE_FORMATTER],\n]);\nconst TIME_PICKER_SELECTED_ITEM_SX = {\n '&:hover': {\n backgroundColor: 'var(--owp-datepicker-hover-bg, rgba(3, 155, 229, 0.14))',\n },\n '&.Mui-selected': {\n backgroundColor: 'var(--owp-datepicker-selected-bg, #039be5)',\n color: 'var(--owp-datepicker-selected-color, #fff)',\n '&:focus-visible, &:hover': {\n backgroundColor: 'var(--owp-datepicker-selected-hover-bg, #039be5)',\n },\n },\n};\n\ntype OwpTreeGridDatePickerEditorValueFormat =\n | typeof VALUE_YEAR_FORMATTER\n | typeof DATE_PICKER_EDITOR_MONTH_FORMATTER\n | typeof VALUE_MONTH_FORMATTER\n | typeof DATE_PICKER_EDITOR_DAY_FORMATTER\n | typeof VALUE_DATE_FORMATTER\n | typeof VALUE_TIME_FORMATTER\n | typeof VALUE_TIME_SECOND_FORMATTER\n | typeof DATE_TIME_VALUE_FORMATTER\n | typeof DATE_TIME_SECOND_VALUE_FORMATTER;\n\ntype OwpTreeGridDatePickerEditorKind =\n | 'year'\n | 'month'\n | 'day'\n | 'yearMonth'\n | 'date'\n | 'time'\n | 'dateTime';\n\ntype OwpTreeGridDatePickerEditorFormatMeta = {\n kind: OwpTreeGridDatePickerEditorKind;\n valueFormat: OwpTreeGridDatePickerEditorValueFormat;\n inputLength: number;\n digitLength: number;\n};\n\ntype TreeGridDatePickerColumn = TCol & {\n OnClickSide?: string;\n OnClickSideDate?: string;\n};\n\ntype TreeGridDatePickerEditorState<T> = {\n grid: TGrid;\n row: OwpTreeGridRowModel<T>;\n col: string;\n anchorRect: DOMRect;\n value?: string;\n};\n\ninterface UseOwpTreeGridDatePickerEditorParams<T> {\n config?: OwpTreeGridDatePickerEditorConfig;\n treeGridInstanceRef: RefObject<TGrid>;\n isTreeGridReady: boolean;\n onValueChange?: (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: string,\n ) => void;\n}\n\n/** DatePicker editor 활성 여부 */\nconst isDatePickerEditorEnabled = (config?: OwpTreeGridDatePickerEditorConfig) =>\n config?.enabled !== false;\n\n/** TreeGrid 날짜 포맷 정규화 */\nconst normalizeTreeGridDateFormat = (format?: string) => format?.trim().replace(/\\s+/g, ' ');\n\n/** TreeGrid 날짜 포맷 Dayjs 변환 */\nconst convertTreeGridDateFormatToDayjs = (format?: string) => {\n const normalizedFormat = normalizeTreeGridDateFormat(format);\n\n if (!normalizedFormat) {\n return null;\n }\n\n return (\n TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS.get(normalizedFormat) ??\n TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS.get(normalizedFormat.toLowerCase()) ??\n null\n );\n};\n\n/** DatePicker editor 포맷 메타 */\nconst getDatePickerEditorFormatMeta = (\n valueFormat: OwpTreeGridDatePickerEditorValueFormat,\n): OwpTreeGridDatePickerEditorFormatMeta => {\n switch (valueFormat) {\n case VALUE_YEAR_FORMATTER:\n return { kind: 'year', valueFormat, inputLength: 4, digitLength: 4 };\n case DATE_PICKER_EDITOR_MONTH_FORMATTER:\n return { kind: 'month', valueFormat, inputLength: 2, digitLength: 2 };\n case VALUE_MONTH_FORMATTER:\n return { kind: 'yearMonth', valueFormat, inputLength: 7, digitLength: 6 };\n case DATE_PICKER_EDITOR_DAY_FORMATTER:\n return { kind: 'day', valueFormat, inputLength: 2, digitLength: 2 };\n case VALUE_TIME_FORMATTER:\n return { kind: 'time', valueFormat, inputLength: 5, digitLength: 4 };\n case VALUE_TIME_SECOND_FORMATTER:\n return { kind: 'time', valueFormat, inputLength: 8, digitLength: 6 };\n case DATE_TIME_VALUE_FORMATTER:\n return { kind: 'dateTime', valueFormat, inputLength: 16, digitLength: 12 };\n case DATE_TIME_SECOND_VALUE_FORMATTER:\n return { kind: 'dateTime', valueFormat, inputLength: 19, digitLength: 14 };\n default:\n return { kind: 'date', valueFormat, inputLength: 10, digitLength: 8 };\n }\n};\n\n/** DatePicker editor 컬럼 포맷 메타 */\nconst resolveDatePickerEditorFormatMeta = <T,>(\n editorState: TreeGridDatePickerEditorState<T> | null,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (!editorState) {\n return getDatePickerEditorFormatMeta(VALUE_DATE_FORMATTER);\n }\n\n const rowRecord = editorState.row as Record<string, unknown>;\n const column = editorState.grid.Cols?.[editorState.col];\n const treeGridFormat =\n rowRecord[`${editorState.col}EditFormat`] ??\n rowRecord[`${editorState.col}Format`] ??\n column?.EditFormat ??\n column?.Format;\n const valueFormat =\n convertTreeGridDateFormatToDayjs(typeof treeGridFormat === 'string' ? treeGridFormat : undefined) ??\n (config?.showTimeInput || config?.showTimeSelect ? DATE_TIME_VALUE_FORMATTER : VALUE_DATE_FORMATTER);\n\n return getDatePickerEditorFormatMeta(valueFormat);\n};\n\n/** DatePicker editor 입력 마스크 */\nconst formatDatePickerEditorInput = (\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n) => {\n const digits = value.replace(/\\D/g, '').slice(0, formatMeta.digitLength);\n const year = digits.slice(0, 4);\n const month = digits.slice(4, 6);\n const date = digits.slice(6, 8);\n const hour = digits.slice(8, 10);\n const minute = digits.slice(10, 12);\n const second = digits.slice(12, 14);\n\n switch (formatMeta.kind) {\n case 'year':\n case 'month':\n case 'day':\n return digits;\n case 'yearMonth':\n return [year, month].filter(Boolean).join('-');\n case 'time':\n return [digits.slice(0, 2), digits.slice(2, 4), digits.slice(4, 6)]\n .filter(Boolean)\n .join(':');\n case 'dateTime':\n return (\n [year, month, date].filter(Boolean).join('-') +\n (hour ? ` ${hour}` : '') +\n (minute ? `:${minute}` : '') +\n (second ? `:${second}` : '')\n );\n default:\n return [year, month, date].filter(Boolean).join('-');\n }\n};\n\n/** DatePicker editor 입력 완성 여부 */\nconst isCompleteDatePickerEditorInput = (\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n) => value.length === formatMeta.inputLength;\n\n/** DatePicker editor 단독 월/일 파싱 값 */\nconst resolvePartialDatePickerEditorInputValue = (\n col: string,\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (formatMeta.kind === 'month') {\n return `${config?.columnOptions?.[col]?.baseYear ?? dayjs().format(VALUE_YEAR_FORMATTER)}-${value}`;\n }\n\n if (formatMeta.kind === 'day') {\n return `${config?.columnOptions?.[col]?.baseYearMonth ?? dayjs().format(VALUE_MONTH_FORMATTER)}-${value}`;\n }\n\n return value;\n};\n\n/** DatePicker editor 단독 월/일 파싱 포맷 */\nconst resolvePartialDatePickerEditorInputFormat = (\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n) => {\n if (formatMeta.kind === 'month') {\n return VALUE_MONTH_FORMATTER;\n }\n\n if (formatMeta.kind === 'day') {\n return VALUE_DATE_FORMATTER;\n }\n\n return formatMeta.valueFormat;\n};\n\n/** DatePicker editor 선택 값 파싱 */\nconst parseDatePickerEditorValue = (\n col: string,\n value: string | undefined,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (!value) {\n return null;\n }\n\n if (formatMeta.kind === 'year') {\n const parsedValue = dayjs(`${value}-01-01`, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() ? parsedValue : null;\n }\n\n if (formatMeta.kind === 'yearMonth') {\n const parsedValue = dayjs(`${value}-01`, VALUE_DATE_FORMATTER, true);\n return parsedValue.isValid() ? parsedValue : null;\n }\n\n const parsedValue = dayjs(\n resolvePartialDatePickerEditorInputValue(col, value, formatMeta, config),\n resolvePartialDatePickerEditorInputFormat(formatMeta),\n true,\n );\n\n return parsedValue.isValid() ? parsedValue : null;\n};\n\n/** DatePicker editor react-datepicker 표시 포맷 */\nconst getReactDatePickerDisplayFormat = (formatMeta: OwpTreeGridDatePickerEditorFormatMeta) => {\n switch (formatMeta.kind) {\n case 'year':\n return 'yyyy';\n case 'month':\n return 'MM';\n case 'yearMonth':\n return 'yyyy-MM';\n case 'day':\n return 'dd';\n case 'dateTime':\n return formatMeta.valueFormat === DATE_TIME_SECOND_VALUE_FORMATTER\n ? 'yyyy-MM-dd HH:mm:ss'\n : 'yyyy-MM-dd HH:mm';\n default:\n return 'yyyy-MM-dd';\n }\n};\n\n/** DatePicker editor 입력 유효 여부 */\nconst isValidDatePickerEditorInput = (\n col: string,\n value: string,\n formatMeta: OwpTreeGridDatePickerEditorFormatMeta,\n config?: OwpTreeGridDatePickerEditorConfig,\n) =>\n isCompleteDatePickerEditorInput(value, formatMeta) &&\n dayjs(\n resolvePartialDatePickerEditorInputValue(col, value, formatMeta, config),\n resolvePartialDatePickerEditorInputFormat(formatMeta),\n true,\n ).isValid();\n\n/** DatePicker editor 초 포함 여부 */\nconst hasDatePickerEditorSeconds = (formatMeta: OwpTreeGridDatePickerEditorFormatMeta) =>\n formatMeta.valueFormat === VALUE_TIME_SECOND_FORMATTER ||\n formatMeta.valueFormat === DATE_TIME_SECOND_VALUE_FORMATTER;\n\n/** TreeGrid class 병합 */\nconst appendTreeGridClass = (className: string | undefined, targetClassName: string) => {\n const classNames = className?.split(/\\s+/).filter(Boolean) ?? [];\n\n if (classNames.includes(targetClassName)) {\n return className;\n }\n\n return [...classNames, targetClassName].join(' ');\n};\n\n/** DatePicker editor 초기 표시 값 */\nconst resolveDatePickerEditorInitialValue = (\n grid: TGrid,\n row: TRow,\n col: string,\n cellElement: HTMLElement,\n) => {\n const stringEditValue = grid.GetStringEdit?.(row, col);\n const stringValue = grid.GetString?.(row, col);\n const rawValue = grid.GetValue?.(row, col);\n const textValue = cellElement.textContent?.trim();\n\n return String(stringEditValue || stringValue || textValue || rawValue || '');\n};\n\n/** DatePicker editor 키보드 시작 키 여부 */\nconst isDatePickerEditorStartKey = (key: string, event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n\n if (keyboardEvent.ctrlKey || keyboardEvent.altKey || keyboardEvent.metaKey) {\n return false;\n }\n\n return (\n /^\\d$/.test(key) ||\n /^\\d$/.test(keyboardEvent.key) ||\n key === 'Enter' ||\n key === 'F2' ||\n key === 'Backspace' ||\n key === 'Delete' ||\n keyboardEvent.key === 'Enter' ||\n keyboardEvent.key === 'F2' ||\n keyboardEvent.key === 'Backspace' ||\n keyboardEvent.key === 'Delete'\n );\n};\n\n/** DatePicker editor 내부 이벤트 여부 */\nconst isDatePickerEditorEventTarget = (event: Event) => {\n const target = event.target;\n\n return (\n target instanceof Element &&\n Boolean(target.closest(`.${TREE_GRID_DATE_PICKER_EDITOR_CLASS}`))\n );\n};\n\n/** TreeGrid CanEdit 명시 활성 여부 */\nconst isTreeGridCanEditEnabled = (value: unknown) => value === 1 || value === '1';\n\n/** TreeGrid CanEdit 명시 비활성 여부 */\nconst isTreeGridCanEditDisabled = (value: unknown) =>\n value === 0 || value === '0' || value === false;\n\n/** TreeGrid 표시 행 여부 */\nconst isDisplayTreeGridRow = (row: TRow | null | undefined) => {\n if (!row || row.Fixed === 'Foot') {\n return false;\n }\n\n return row.Kind === 'Data' || isTreeGridCanEditEnabled((row as { Added?: unknown }).Added);\n};\n\n/** TreeGrid 날짜 셀 편집 가능 여부 */\nconst isEditableDatePickerCell = <T,>(\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n columns: ReadonlySet<string>,\n) => {\n if (columns.size > 0 && !columns.has(col)) {\n return false;\n }\n\n const column = grid.Cols?.[col];\n const cellCanEdit = (row as Record<string, unknown>)[`${col}CanEdit`];\n const hasCellCanEdit = cellCanEdit !== undefined && cellCanEdit !== null;\n const canEdit = hasCellCanEdit\n ? isTreeGridCanEditEnabled(cellCanEdit)\n : isTreeGridCanEditEnabled(column?.CanEdit);\n\n return (\n column?.Type === 'Date' &&\n isDisplayTreeGridRow(row) &&\n !isTreeGridCanEditDisabled(row.CanEdit) &&\n canEdit &&\n row.Deleted !== 1\n );\n};\n\n/** TreeGrid DatePicker editor 컬럼 설정 */\nconst configureTreeGridDatePickerColumns = (grid: TGrid | null, columns: readonly string[]) => {\n if (!grid) {\n return;\n }\n\n const targetColumns =\n columns.length > 0\n ? columns\n : Object.keys(grid.Cols ?? {}).filter((col) => grid.Cols?.[col]?.Type === 'Date');\n\n targetColumns.forEach((col) => {\n const column = grid.Cols?.[col] as TreeGridDatePickerColumn | undefined;\n\n if (!column || column.Type !== 'Date' || !isTreeGridCanEditEnabled(column.CanEdit)) {\n return;\n }\n\n column.AutoCalendar = 0;\n column.CalendarButtons = 0;\n\n const treeGridFormat = column.EditFormat ?? column.Format;\n const valueFormat =\n convertTreeGridDateFormatToDayjs(typeof treeGridFormat === 'string' ? treeGridFormat : undefined) ??\n VALUE_DATE_FORMATTER;\n\n if (getDatePickerEditorFormatMeta(valueFormat).kind === 'time') {\n column.Button = 'Html';\n column.ButtonText = TREE_GRID_TIME_PICKER_EDITOR_BUTTON_HTML;\n column.OnClickSide = 'Focus';\n column.Class = appendTreeGridClass(column.Class, TREE_GRID_TIME_PICKER_EDITOR_CLASS);\n } else {\n column.Button = 'Date';\n column.OnClickSideDate = 'Focus';\n }\n });\n\n grid.Rerender?.(1, 1);\n};\n\n/** OwpTreeGrid Date 셀 React DatePicker editor */\nexport const useOwpTreeGridDatePickerEditor = <T,>({\n config,\n treeGridInstanceRef,\n isTreeGridReady,\n onValueChange,\n}: UseOwpTreeGridDatePickerEditorParams<T>) => {\n const { t, i18n } = useOwpTranslation();\n const [editorState, setEditorState] = useState<TreeGridDatePickerEditorState<T> | null>(null);\n const [inputDraftValue, setInputDraftValue] = useState('');\n const editorInputRef = useRef<HTMLInputElement | null>(null);\n const isClosingAfterCommitRef = useRef(false);\n const enabled = isDatePickerEditorEnabled(config);\n const columnsKey = config?.columns?.join(DATE_PICKER_EDITOR_COLUMNS_SEPARATOR) ?? '';\n const columns = useMemo(\n () => (columnsKey ? columnsKey.split(DATE_PICKER_EDITOR_COLUMNS_SEPARATOR) : []),\n [columnsKey],\n );\n const columnSet = useMemo(() => new Set(columns), [columns]);\n const languageId = i18n.resolvedLanguage ?? i18n.language ?? 'kr';\n const datePickerLocale = languageId === 'kr' ? 'ko' : 'en';\n const adapterLocale = languageId === 'kr' ? 'ko' : 'en';\n const allowInput = config?.allowInput !== false;\n const formatMeta = useMemo(\n () => resolveDatePickerEditorFormatMeta(editorState, config),\n [config, editorState],\n );\n\n useEffect(() => {\n if (!enabled || !isTreeGridReady) {\n return;\n }\n\n configureTreeGridDatePickerColumns(treeGridInstanceRef.current, columns);\n }, [columns, enabled, isTreeGridReady, treeGridInstanceRef]);\n\n const closeEditor = useCallback(() => {\n setEditorState(null);\n }, []);\n\n const openDatePickerEditor = useCallback(\n (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n ) => {\n const cellElement = grid.GetCell(row, col) as HTMLElement | null;\n\n if (!cellElement) {\n return undefined;\n }\n\n const baseEditorState: TreeGridDatePickerEditorState<T> = {\n grid,\n row,\n col,\n anchorRect: cellElement.getBoundingClientRect(),\n value: resolveDatePickerEditorInitialValue(grid, row, col, cellElement),\n };\n isClosingAfterCommitRef.current = false;\n setInputDraftValue(baseEditorState.value ?? '');\n setEditorState(baseEditorState);\n\n return 1;\n },\n [],\n );\n\n const handleDatePickerEditorCellClick = useCallback(\n (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n _x: number,\n _y: number,\n event: Event,\n ) => {\n if (!enabled || !isEditableDatePickerCell(grid, row, col, columnSet)) {\n closeEditor();\n return undefined;\n }\n\n grid.CloseDialog?.();\n event.preventDefault();\n event.stopPropagation();\n\n return openDatePickerEditor(grid, row, col);\n },\n [closeEditor, columnSet, enabled, openDatePickerEditor],\n );\n\n const handleDatePickerEditorButtonClick = useCallback(\n (grid: TGrid, row: OwpTreeGridRowModel<T>, col: string, event: Event) => {\n if (!enabled || !isEditableDatePickerCell(grid, row, col, columnSet)) {\n return undefined;\n }\n\n grid.CloseDialog?.();\n event.preventDefault();\n event.stopPropagation();\n\n return openDatePickerEditor(grid, row, col);\n },\n [columnSet, enabled, openDatePickerEditor],\n );\n\n const handleDatePickerEditorKeyDown = useCallback(\n (grid: TGrid, key: string, event: Event) => {\n if (isDatePickerEditorEventTarget(event)) {\n return 1;\n }\n\n const row = (grid.FRow || grid.ARow) as OwpTreeGridRowModel<T> | null | undefined;\n const col = grid.FCol || grid.ACol;\n\n if (\n !enabled ||\n !row ||\n !col ||\n !isEditableDatePickerCell(grid, row, col, columnSet) ||\n !isDatePickerEditorStartKey(key, event)\n ) {\n return undefined;\n }\n\n grid.CloseDialog?.();\n event.preventDefault();\n event.stopPropagation();\n\n return openDatePickerEditor(grid, row, col);\n },\n [columnSet, enabled, openDatePickerEditor],\n );\n\n const handleDatePickerEditorStartEdit = useCallback(\n (grid: TGrid, row: OwpTreeGridRowModel<T>, col: string) => {\n if (!enabled || !isEditableDatePickerCell(grid, row, col, columnSet)) {\n return undefined;\n }\n\n grid.CloseDialog?.();\n openDatePickerEditor(grid, row, col);\n\n return true;\n },\n [columnSet, enabled, openDatePickerEditor],\n );\n\n const selectedDateValue = useMemo(() => {\n if (!editorState || formatMeta.kind === 'time') {\n return null;\n }\n\n const parsedInputDraftValue = isValidDatePickerEditorInput(\n editorState.col,\n inputDraftValue,\n formatMeta,\n config,\n )\n ? parseDatePickerEditorValue(editorState.col, inputDraftValue, formatMeta, config)\n : null;\n\n if (parsedInputDraftValue) {\n return parsedInputDraftValue.toDate();\n }\n\n return parseDatePickerEditorValue(\n editorState.col,\n editorState.value,\n formatMeta,\n config,\n )?.toDate() ?? null;\n }, [config, editorState, formatMeta, inputDraftValue]);\n\n const selectedTimeValue = useMemo(() => {\n if (formatMeta.kind !== 'time') {\n return null;\n }\n\n const draftDateValue = dayjs(inputDraftValue, formatMeta.valueFormat, true);\n\n if (draftDateValue.isValid()) {\n return draftDateValue;\n }\n\n if (!editorState?.value) {\n return null;\n }\n\n const dateValue = dayjs(editorState.value, formatMeta.valueFormat, true);\n\n return dateValue.isValid() ? dateValue : null;\n }, [editorState?.value, formatMeta, inputDraftValue]);\n\n const anchorEl = useMemo<PopperProps['anchorEl']>(() => {\n if (!editorState) {\n return null;\n }\n\n return {\n getBoundingClientRect: () => editorState.anchorRect,\n };\n }, [editorState]);\n const popperContainer = useMemo(() => {\n if (typeof document === 'undefined') {\n return undefined;\n }\n\n return document.getElementById('calendar-portal') ?? undefined;\n }, []);\n\n const handleDateSelect = (dateValue: Date | null) => {\n if (!editorState) {\n return;\n }\n\n const nextValue = dateValue ? dayjs(dateValue).format(formatMeta.valueFormat) : '';\n isClosingAfterCommitRef.current = true;\n setInputDraftValue(nextValue);\n\n editorState.grid.SetString(editorState.row, editorState.col, nextValue, 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, nextValue);\n closeEditor();\n };\n\n const handleTimeSelect = (dateValue: Dayjs | null, selectedView?: string) => {\n if (!editorState) {\n return;\n }\n\n const nextValue = dateValue?.isValid() ? dateValue.format(formatMeta.valueFormat) : '';\n const shouldClose =\n selectedView === (hasDatePickerEditorSeconds(formatMeta) ? 'seconds' : 'minutes');\n\n if (shouldClose) {\n isClosingAfterCommitRef.current = true;\n }\n\n setInputDraftValue(nextValue);\n editorState.grid.SetString(editorState.row, editorState.col, nextValue, 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, nextValue);\n setEditorState((prevState) => (prevState ? { ...prevState, value: nextValue } : prevState));\n\n if (shouldClose) {\n closeEditor();\n }\n };\n\n const commitInputValue = useCallback(\n (nextValue: string) => {\n if (!editorState) {\n return;\n }\n\n editorState.grid.SetString(editorState.row, editorState.col, nextValue, 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, nextValue);\n },\n [editorState, onValueChange],\n );\n\n const commitInputDraftValue = useCallback(() => {\n if (\n !editorState ||\n !isValidDatePickerEditorInput(editorState.col, inputDraftValue, formatMeta, config)\n ) {\n return false;\n }\n\n isClosingAfterCommitRef.current = true;\n commitInputValue(inputDraftValue);\n\n return true;\n }, [commitInputValue, config, editorState, formatMeta, inputDraftValue]);\n\n const closeEditorWithInputCommit = useCallback(() => {\n commitInputDraftValue();\n closeEditor();\n }, [closeEditor, commitInputDraftValue]);\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (!editorState) {\n return;\n }\n\n setInputDraftValue(formatDatePickerEditorInput(event.target.value, formatMeta));\n };\n\n const handleInputKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n\n if (event.key !== 'Enter' || !editorState) {\n return;\n }\n\n if (!commitInputDraftValue()) {\n return;\n }\n\n closeEditor();\n };\n\n const handleInputClear = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!editorState) {\n return;\n }\n\n isClosingAfterCommitRef.current = true;\n editorState.grid.SetString(editorState.row, editorState.col, '', 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, '');\n setInputDraftValue('');\n setEditorState((prevState) => (prevState ? { ...prevState, value: '' } : prevState));\n };\n\n const handleEditorMouseEvent = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n const handleEditorKeyboardEvent = (event: ReactKeyboardEvent) => {\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n };\n\n const inputValue = inputDraftValue;\n const editorFocusGrid = editorState?.grid;\n const editorFocusRow = editorState?.row;\n const editorFocusCol = editorState?.col;\n const hasInputError =\n !isClosingAfterCommitRef.current &&\n Boolean(inputValue) &&\n isCompleteDatePickerEditorInput(inputValue, formatMeta) &&\n !isValidDatePickerEditorInput(editorState?.col ?? '', inputValue, formatMeta, config);\n const hasSeconds = hasDatePickerEditorSeconds(formatMeta);\n const timePickerEditorWidth = TIME_PICKER_EDITOR_SECTION_WIDTH * (hasSeconds ? 3 : 2);\n const timePickerViews = hasSeconds\n ? (['hours', 'minutes', 'seconds'] as const)\n : (['hours', 'minutes'] as const);\n const timeFormat = hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER;\n\n useEffect(() => {\n if (!editorState) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n closeEditor();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [closeEditor, editorState]);\n\n useEffect(() => {\n if (!editorFocusGrid || !editorFocusRow || !editorFocusCol || !allowInput) {\n return undefined;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n editorInputRef.current?.focus();\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [allowInput, editorFocusCol, editorFocusGrid, editorFocusRow]);\n\n const datePickerEditorElement = editorState ? (\n <Popper\n open\n anchorEl={anchorEl}\n container={popperContainer}\n placement=\"bottom-start\"\n sx={{ zIndex: 1400 }}\n >\n <ClickAwayListener onClickAway={closeEditorWithInputCommit}>\n <Paper\n className={TREE_GRID_DATE_PICKER_EDITOR_CLASS}\n elevation={8}\n onClick={handleEditorMouseEvent}\n onKeyDown={handleEditorKeyboardEvent}\n onKeyUp={handleEditorKeyboardEvent}\n onMouseDown={handleEditorMouseEvent}\n sx={{\n borderRadius: 1,\n lineHeight: 0,\n overflow: 'hidden',\n width: formatMeta.kind === 'time' ? timePickerEditorWidth : 'auto',\n '& .react-datepicker': {\n border: 0,\n display: 'block',\n lineHeight: 'normal',\n },\n '& .react-datepicker__month-container': {\n float: 'none',\n },\n '& .react-datepicker__month': {\n marginBottom: 0,\n },\n }}\n >\n {allowInput && (\n <TextField\n autoFocus\n inputRef={editorInputRef}\n fullWidth\n size=\"small\"\n value={inputValue}\n error={hasInputError}\n color={isClosingAfterCommitRef.current ? 'primary' : undefined}\n placeholder={formatMeta.valueFormat}\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n slotProps={{\n htmlInput: {\n inputMode: 'numeric',\n 'aria-label': formatMeta.valueFormat,\n },\n input: {\n sx: {\n paddingRight: 0.5,\n },\n endAdornment: (\n <InputAdornment\n position=\"end\"\n sx={{\n marginLeft: 0,\n }}\n >\n <IconButton\n size=\"small\"\n aria-label=\"clear-date-picker-editor-value\"\n disabled={!inputValue}\n onClick={handleInputClear}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n sx={{\n margin: 0,\n padding: 0.25,\n }}\n >\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n sx={{\n boxSizing: 'border-box',\n width: formatMeta.kind === 'time' ? timePickerEditorWidth : '100%',\n px: 1,\n py: 1,\n '& .MuiOutlinedInput-root': {\n borderRadius: 0.75,\n fontSize: 13,\n },\n }}\n />\n )}\n {formatMeta.kind === 'time' ? (\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale={adapterLocale}>\n <MultiSectionDigitalClock\n ampm={false}\n value={selectedTimeValue}\n views={timePickerViews}\n onChange={(dateValue, _selectionState, selectedView) =>\n handleTimeSelect(dateValue, selectedView)\n }\n timeSteps={{\n minutes: config?.timeIntervals ?? 1,\n seconds: 1,\n }}\n slotProps={{\n digitalClockSectionItem: {\n sx: TIME_PICKER_SELECTED_ITEM_SX,\n },\n }}\n sx={{\n border: 0,\n width: timePickerEditorWidth,\n '& .MuiMultiSectionDigitalClockSection-root': {\n border: 0,\n boxSizing: 'border-box',\n width: TIME_PICKER_EDITOR_SECTION_WIDTH,\n flex: `0 0 ${TIME_PICKER_EDITOR_SECTION_WIDTH}px`,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n },\n '& .MuiMultiSectionDigitalClockSection-item': {\n alignSelf: 'stretch',\n boxSizing: 'border-box',\n width: TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n minWidth: TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n justifyContent: 'center',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n }}\n />\n </LocalizationProvider>\n ) : (\n <ReactDatePicker\n inline\n locale={datePickerLocale}\n selected={selectedDateValue}\n onChange={(dateValue: Date | null) => handleDateSelect(dateValue)}\n showYearPicker={formatMeta.kind === 'year'}\n showMonthYearPicker={formatMeta.kind === 'yearMonth' || formatMeta.kind === 'month'}\n showTimeInput={formatMeta.kind === 'dateTime'}\n timeIntervals={config?.timeIntervals}\n dateFormat={getReactDatePickerDisplayFormat(formatMeta)}\n timeFormat={timeFormat}\n timeCaption={`${t('Common.시간')}: `}\n timeInputLabel={`${t('Common.시간')}: `}\n />\n )}\n </Paper>\n </ClickAwayListener>\n </Popper>\n ) : null;\n\n return {\n datePickerEditorElement,\n handleDatePickerEditorButtonClick,\n handleDatePickerEditorCellClick,\n handleDatePickerEditorKeyDown,\n handleDatePickerEditorStartEdit,\n };\n};\n"],"names":["registerLocale","ko","enUS","setDefaultLocale","ensureDayjsBrowserSetup","DATE_TIME_VALUE_FORMATTER","VALUE_DATE_FORMATTER","VALUE_TIME_FORMATTER","VALUE_TIME_SECOND_FORMATTER","DATE_TIME_SECOND_VALUE_FORMATTER","DATE_PICKER_EDITOR_COLUMNS_SEPARATOR","TREE_GRID_DATE_PICKER_EDITOR_CLASS","TREE_GRID_TIME_PICKER_EDITOR_CLASS","TREE_GRID_TIME_PICKER_EDITOR_BUTTON_HTML","DATE_PICKER_EDITOR_MONTH_FORMATTER","DATE_PICKER_EDITOR_DAY_FORMATTER","TIME_PICKER_EDITOR_SECTION_WIDTH","TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH","TREE_GRID_DATE_PICKER_SUPPORTED_FORMATS","VALUE_YEAR_FORMATTER","VALUE_MONTH_FORMATTER","TIME_PICKER_SELECTED_ITEM_SX","isDatePickerEditorEnabled","__name","config","normalizeTreeGridDateFormat","format","convertTreeGridDateFormatToDayjs","normalizedFormat","getDatePickerEditorFormatMeta","valueFormat","resolveDatePickerEditorFormatMeta","editorState","rowRecord","column","_a","treeGridFormat","formatDatePickerEditorInput","value","formatMeta","digits","year","month","date","hour","minute","second","isCompleteDatePickerEditorInput","resolvePartialDatePickerEditorInputValue","col","_b","dayjs","_d","_c","resolvePartialDatePickerEditorInputFormat","parseDatePickerEditorValue","parsedValue","getReactDatePickerDisplayFormat","isValidDatePickerEditorInput","hasDatePickerEditorSeconds","appendTreeGridClass","className","targetClassName","classNames","resolveDatePickerEditorInitialValue","grid","row","cellElement","stringEditValue","stringValue","rawValue","textValue","isDatePickerEditorStartKey","key","event","keyboardEvent","isDatePickerEditorEventTarget","target","isTreeGridCanEditEnabled","isTreeGridCanEditDisabled","isDisplayTreeGridRow","isEditableDatePickerCell","columns","cellCanEdit","hasCellCanEdit","canEdit","configureTreeGridDatePickerColumns","useOwpTreeGridDatePickerEditor","treeGridInstanceRef","isTreeGridReady","onValueChange","t","i18n","useOwpTranslation","setEditorState","useState","inputDraftValue","setInputDraftValue","editorInputRef","useRef","isClosingAfterCommitRef","enabled","columnsKey","useMemo","columnSet","languageId","datePickerLocale","adapterLocale","allowInput","useEffect","closeEditor","useCallback","openDatePickerEditor","baseEditorState","handleDatePickerEditorCellClick","_x","_y","handleDatePickerEditorButtonClick","handleDatePickerEditorKeyDown","handleDatePickerEditorStartEdit","selectedDateValue","parsedInputDraftValue","selectedTimeValue","draftDateValue","dateValue","anchorEl","popperContainer","handleDateSelect","nextValue","handleTimeSelect","selectedView","shouldClose","prevState","commitInputValue","commitInputDraftValue","closeEditorWithInputCommit","handleInputChange","handleInputKeyDown","handleInputClear","handleEditorMouseEvent","handleEditorKeyboardEvent","inputValue","editorFocusGrid","editorFocusRow","editorFocusCol","hasInputError","hasSeconds","timePickerEditorWidth","timePickerViews","timeFormat","handleKeyDown","animationFrameId","jsx","Popper","ClickAwayListener","jsxs","Paper","TextField","InputAdornment","IconButton","ClearIcon","LocalizationProvider","AdapterDayjs","MultiSectionDigitalClock","_selectionState","ReactDatePicker"],"mappings":"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"}
|