@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.
Files changed (40) hide show
  1. package/dist/components/OwpPicker/OwpTimePicker.js +186 -208
  2. package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
  3. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +298 -227
  4. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  5. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +487 -0
  6. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -0
  7. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +369 -248
  8. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
  9. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +201 -117
  10. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
  11. package/dist/constants/gridTheme.js +7 -6
  12. package/dist/constants/gridTheme.js.map +1 -1
  13. package/dist/constants/treeGrid.js +27 -26
  14. package/dist/constants/treeGrid.js.map +1 -1
  15. package/dist/constants.js +23 -22
  16. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
  17. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/constants.js +1 -1
  18. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
  19. package/dist/owp-app.css +1 -1
  20. package/dist/types/components/OwpPicker/OwpTimePicker.d.ts +3 -1
  21. package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +14 -6
  22. package/dist/types/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.d.ts +17 -0
  23. package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +41 -7
  24. package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +1 -1
  25. package/dist/types/constants/gridTheme.d.ts +2 -0
  26. package/dist/types/constants/treeGrid.d.ts +2 -1
  27. package/dist/types/types/OwpGridThemeTypes.d.ts +1 -0
  28. package/dist/types/utils/index.d.ts +0 -1
  29. package/dist/types/utils/treeGridUtil.d.ts +27 -0
  30. package/dist/utils/treeGridUtil.js +172 -112
  31. package/dist/utils/treeGridUtil.js.map +1 -1
  32. package/dist/utils.js +85 -83
  33. package/dist/utils.js.map +1 -1
  34. package/package.json +1 -1
  35. package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js +0 -84
  36. package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js.map +0 -1
  37. package/dist/types/components/OwpTreeGrid/internal/treeGridColumnEditRules.d.ts +0 -60
  38. package/dist/types/utils/normalizeTimeToHourMinute.d.ts +0 -11
  39. package/dist/utils/normalizeTimeToHourMinute.js +0 -34
  40. 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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"}