@owp/core 2.5.22 → 2.5.24
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/_virtual/index15.js +2 -2
- package/dist/_virtual/index16.js +4 -4
- package/dist/_virtual/index17.js +4 -4
- package/dist/_virtual/index18.js +4 -4
- package/dist/_virtual/index19.js +4 -4
- package/dist/_virtual/index5.js +2 -2
- package/dist/components/OwpCommonCode/OwpCommonCodeQuerySelector.js +15 -13
- package/dist/components/OwpCommonCode/OwpCommonCodeQuerySelector.js.map +1 -1
- package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js +21 -19
- package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js.map +1 -1
- package/dist/components/OwpExportExcelButton/OwpExportExcelButton.js +1 -1
- package/dist/components/OwpExportExcelButton/OwpExportExcelButton.js.map +1 -1
- package/dist/components/OwpLanguageSwitcherSelect/OwpLanguageSwitcherSelect.js +1 -1
- package/dist/components/OwpLanguageSwitcherSelect/OwpLanguageSwitcherSelect.js.map +1 -1
- package/dist/components/OwpLoading/OwpLoading.js +1 -1
- package/dist/components/OwpLoading/OwpLoading.js.map +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTable.js +21 -21
- package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
- package/dist/components/OwpOptionSelector/OwpOptionSelector.js +14 -12
- package/dist/components/OwpOptionSelector/OwpOptionSelector.js.map +1 -1
- package/dist/components/OwpPageTitle/OwpPageTitle.js +1 -1
- package/dist/components/OwpPageTitle/OwpPageTitle.js.map +1 -1
- package/dist/components/OwpPicker/OwpDatePicker.js +81 -82
- package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpTimePicker.js +82 -83
- package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpWeekDatePicker.js +24 -25
- package/dist/components/OwpPicker/OwpWeekDatePicker.js.map +1 -1
- package/dist/components/OwpSearchFilter/OwpSearchFilter.js +1 -1
- package/dist/components/OwpSearchFilter/OwpSearchFilter.js.map +1 -1
- package/dist/components/OwpSection/OwpSection.js +1 -1
- package/dist/components/OwpSection/OwpSection.js.map +1 -1
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +155 -157
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
- package/dist/components/OwpSelectorBase/OwpSelectorSelect.js +95 -81
- package/dist/components/OwpSelectorBase/OwpSelectorSelect.js.map +1 -1
- package/dist/components/OwpSuspense/OwpSuspense.js +43 -43
- package/dist/components/OwpSuspense/OwpSuspense.js.map +1 -1
- package/dist/components/OwpTable/OwpDataTable.js +13 -12
- package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
- package/dist/components/OwpTable/OwpFieldTable.js +64 -78
- package/dist/components/OwpTable/OwpFieldTable.js.map +1 -1
- package/dist/components/OwpTable/OwpTable.js +56 -55
- package/dist/components/OwpTable/OwpTable.js.map +1 -1
- package/dist/components/OwpTable/internal/OwpTableBase.js +20 -19
- package/dist/components/OwpTable/internal/OwpTableBase.js.map +1 -1
- package/dist/components/OwpTable/internal/defaultTableStyle.js +6 -7
- package/dist/components/OwpTable/internal/defaultTableStyle.js.map +1 -1
- package/dist/components/OwpTable/utils/tableSx.js +16 -6
- package/dist/components/OwpTable/utils/tableSx.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +105 -104
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +55 -56
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +10 -10
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +253 -252
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
- package/dist/constants/table.js +5 -0
- package/dist/constants/table.js.map +1 -0
- package/dist/constants.js +25 -23
- package/dist/constants.js.map +1 -1
- package/dist/contexts/OwpUiProvider.js +5 -5
- package/dist/contexts/OwpUiProvider.js.map +1 -1
- package/dist/hooks/{useAccessTokenGuard.js → internal/useAccessTokenGuard.js} +2 -2
- package/dist/hooks/internal/useAccessTokenGuard.js.map +1 -0
- package/dist/hooks/{useCurrentLanguage.js → internal/useCurrentLanguage.js} +2 -2
- package/dist/hooks/internal/useCurrentLanguage.js.map +1 -0
- package/dist/hooks/internal/useHeaderWrapState.js.map +1 -0
- package/dist/hooks/internal/useNavbar.js +24 -0
- package/dist/hooks/internal/useNavbar.js.map +1 -0
- package/dist/hooks/{useNavigationActiveRouteRemount.js → internal/useNavigationActiveRouteRemount.js} +1 -1
- package/dist/hooks/internal/useNavigationActiveRouteRemount.js.map +1 -0
- package/dist/hooks/{useShortcuts.js → internal/useShortcuts.js} +3 -3
- package/dist/hooks/internal/useShortcuts.js.map +1 -0
- package/dist/hooks/internal/useThemeMediaQuery.js.map +1 -0
- package/dist/hooks/internal/useTimeout.js.map +1 -0
- package/dist/hooks/useInitApp.js.map +1 -1
- package/dist/hooks.js +53 -81
- package/dist/hooks.js.map +1 -1
- package/dist/layout/Layout.js +1 -1
- package/dist/layout/Layout.js.map +1 -1
- package/dist/layout/components/layouts/NavbarToggleFabLayout.js +2 -2
- package/dist/layout/components/layouts/NavbarToggleFabLayout.js.map +1 -1
- package/dist/layout/components/layouts/NavbarWrapperLayout.js +2 -2
- package/dist/layout/components/layouts/NavbarWrapperLayout.js.map +1 -1
- package/dist/layout/components/navbar/NavbarToggleButton.js +2 -2
- package/dist/layout/components/navbar/NavbarToggleButton.js.map +1 -1
- package/dist/layout/components/navbar/style/NavbarStyle.js +1 -1
- package/dist/layout/components/navbar/style/NavbarStyle.js.map +1 -1
- package/dist/layout/components/navbar/style/NavbarStyleContent.js +1 -1
- package/dist/layout/components/navbar/style/NavbarStyleContent.js.map +1 -1
- package/dist/layout/components/navigation/Navigation.js +2 -2
- package/dist/layout/components/navigation/Navigation.js.map +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalCollapse.js +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalCollapse.js.map +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalGroup.js +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalGroup.js.map +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalItem.js +1 -1
- package/dist/layout/components/navigation/vertical/types/NavVerticalItem.js.map +1 -1
- package/dist/layout/components/toggles/LanguageSwitcherToggle.js +1 -1
- package/dist/layout/components/toggles/LanguageSwitcherToggle.js.map +1 -1
- package/dist/layout/components/toggles/NavigationSearchToggle.js +3 -3
- package/dist/layout/components/toggles/NavigationShortcutsToggle.js +1 -1
- package/dist/layout/components/toggles/NavigationShortcutsToggle.js.map +1 -1
- 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/EAN_UPC/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/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
- package/dist/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js +1 -1
- package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpCommonCode/OwpCommonCodeQuerySelector.d.ts +5 -3
- package/dist/types/components/OwpCommonCode/OwpCommonCodeSelector.d.ts +5 -3
- package/dist/types/components/OwpOptionSelector/OwpOptionSelector.d.ts +4 -1
- package/dist/types/components/OwpSelectorBase/types/index.d.ts +1 -1
- package/dist/types/components/OwpSelectorBase/types/types.d.ts +3 -0
- package/dist/types/components/OwpTable/internal/defaultTableStyle.d.ts +0 -1
- package/dist/types/components/OwpTable/utils/tableSx.d.ts +15 -0
- package/dist/types/constants/index.d.ts +1 -0
- package/dist/types/constants/table.d.ts +1 -0
- package/dist/types/hooks/index.d.ts +0 -10
- package/dist/types/hooks/{useNavbar.d.ts → internal/useNavbar.d.ts} +1 -1
- package/dist/types/utils/treeGridUtil.d.ts +0 -14
- package/dist/utils/{exceljsBrowser.js → internal/exceljsBrowser.js} +1 -1
- package/dist/utils/internal/exceljsBrowser.js.map +1 -0
- package/dist/utils/internal/jszipBrowser.js.map +1 -0
- package/dist/utils/internal/treeGridBodyRowsEvent.js.map +1 -0
- package/dist/utils/treeGridExportExcelUtil.js +1 -1
- package/dist/utils/treeGridExportExcelUtil.js.map +1 -1
- package/dist/utils/treeGridUtil.js +1 -6
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/dist/utils/zipUtil.js +1 -1
- package/dist/utils/zipUtil.js.map +1 -1
- package/dist/utils.js +70 -75
- package/package.json +1 -1
- package/dist/hooks/useAccessTokenGuard.js.map +0 -1
- package/dist/hooks/useCurrentLanguage.js.map +0 -1
- package/dist/hooks/useDebounce.js +0 -24
- package/dist/hooks/useDebounce.js.map +0 -1
- package/dist/hooks/useDeepCompareEffect.js +0 -38
- package/dist/hooks/useDeepCompareEffect.js.map +0 -1
- package/dist/hooks/useHeaderWrapState.js.map +0 -1
- package/dist/hooks/useNavbar.js +0 -24
- package/dist/hooks/useNavbar.js.map +0 -1
- package/dist/hooks/useNavigationActiveRouteRemount.js.map +0 -1
- package/dist/hooks/usePrevious.js +0 -14
- package/dist/hooks/usePrevious.js.map +0 -1
- package/dist/hooks/useShortcuts.js.map +0 -1
- package/dist/hooks/useThemeMediaQuery.js.map +0 -1
- package/dist/hooks/useTimeout.js.map +0 -1
- package/dist/types/hooks/useDebounce.d.ts +0 -7
- package/dist/types/hooks/useDeepCompareEffect.d.ts +0 -22
- package/dist/types/hooks/usePrevious.d.ts +0 -5
- package/dist/types/utils/dayjsBrowser.d.ts +0 -1
- package/dist/utils/exceljsBrowser.js.map +0 -1
- package/dist/utils/jszipBrowser.js.map +0 -1
- package/dist/utils/treeGridBodyRowsEvent.js.map +0 -1
- /package/dist/hooks/{useHeaderWrapState.js → internal/useHeaderWrapState.js} +0 -0
- /package/dist/hooks/{useThemeMediaQuery.js → internal/useThemeMediaQuery.js} +0 -0
- /package/dist/hooks/{useTimeout.js → internal/useTimeout.js} +0 -0
- /package/dist/types/hooks/{useAccessTokenGuard.d.ts → internal/useAccessTokenGuard.d.ts} +0 -0
- /package/dist/types/hooks/{useCurrentLanguage.d.ts → internal/useCurrentLanguage.d.ts} +0 -0
- /package/dist/types/hooks/{useHeaderWrapState.d.ts → internal/useHeaderWrapState.d.ts} +0 -0
- /package/dist/types/hooks/{useNavigationActiveRouteRemount.d.ts → internal/useNavigationActiveRouteRemount.d.ts} +0 -0
- /package/dist/types/hooks/{useShortcuts.d.ts → internal/useShortcuts.d.ts} +0 -0
- /package/dist/types/hooks/{useThemeMediaQuery.d.ts → internal/useThemeMediaQuery.d.ts} +0 -0
- /package/dist/types/hooks/{useTimeout.d.ts → internal/useTimeout.d.ts} +0 -0
- /package/dist/types/utils/{exceljsBrowser.d.ts → internal/exceljsBrowser.d.ts} +0 -0
- /package/dist/types/utils/{jszipBrowser.d.ts → internal/jszipBrowser.d.ts} +0 -0
- /package/dist/types/utils/{treeGridBodyRowsEvent.d.ts → internal/treeGridBodyRowsEvent.d.ts} +0 -0
- /package/dist/utils/{jszipBrowser.js → internal/jszipBrowser.js} +0 -0
- /package/dist/utils/{treeGridBodyRowsEvent.js → internal/treeGridBodyRowsEvent.js} +0 -0
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
var Jn = Object.defineProperty;
|
|
2
2
|
var c = (r, I) => Jn(r, "name", { value: I, configurable: !0 });
|
|
3
|
-
import { jsx as
|
|
3
|
+
import { jsx as E, jsxs as F } 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
4
|
import { useOwpTranslation as Qn } from "../../hooks/useOwpTranslation.js";
|
|
5
|
-
import { owpDayjs as g, ensureDayjsBrowserSetup as Zn } from "../../dayjs.js";
|
|
6
5
|
import bn 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";
|
|
7
|
-
import { Popper as
|
|
8
|
-
import { TimePicker as
|
|
9
|
-
import { AdapterDayjs as
|
|
10
|
-
import { clsx as
|
|
6
|
+
import { Popper as Zn, Paper as xn, InputAdornment as pn, IconButton as Mn } from "@mui/material";
|
|
7
|
+
import { TimePicker as Fn, MultiSectionDigitalClock as Pn, LocalizationProvider as ne } from "@mui/x-date-pickers";
|
|
8
|
+
import { AdapterDayjs as ee } from "@mui/x-date-pickers/AdapterDayjs";
|
|
9
|
+
import { clsx as te } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
|
|
10
|
+
import { owpDayjs as g } from "../../dayjs.js";
|
|
11
11
|
import { useMemo as P, useState as q, useRef as k, useCallback as o, useEffect as nn } from "react";
|
|
12
|
-
import { TIME_PICKER_EDITOR_SECTION_WIDTH as en, VALUE_TIME_SECOND_FORMATTER as X, VALUE_TIME_FORMATTER as $, PICKER_INVALID_INPUT_MESSAGE_KEY as
|
|
13
|
-
import { getAdjacentFocusableElement as
|
|
14
|
-
import { OwpTextMaskField as
|
|
15
|
-
|
|
16
|
-
const tn = "––", le = {
|
|
12
|
+
import { TIME_PICKER_EDITOR_SECTION_WIDTH as en, VALUE_TIME_SECOND_FORMATTER as X, VALUE_TIME_FORMATTER as $, PICKER_INVALID_INPUT_MESSAGE_KEY as re, TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH as gn, TIME_PICKER_SELECTED_ITEM_SX as ie } from "./constants/index.js";
|
|
13
|
+
import { getAdjacentFocusableElement as ae, getPickerInputMask as ce } from "./utils/index.js";
|
|
14
|
+
import { OwpTextMaskField as ue } from "../OwpTextField/OwpTextMaskField.js";
|
|
15
|
+
const tn = "––", oe = {
|
|
17
16
|
"& .MuiInputBase-root": {
|
|
18
17
|
alignItems: "center"
|
|
19
18
|
},
|
|
@@ -39,8 +38,8 @@ const tn = "––", le = {
|
|
|
39
38
|
visibility: "visible"
|
|
40
39
|
}
|
|
41
40
|
}
|
|
42
|
-
},
|
|
43
|
-
const Y = r.trim(),
|
|
41
|
+
}, le = /* @__PURE__ */ c((r) => r.ctrlKey || r.altKey || r.metaKey ? !1 : r.key.length === 1 || r.key === "Backspace" || r.key === "Delete", "isValueEditingKey"), fe = /* @__PURE__ */ c((r) => r.ctrlKey || r.altKey || r.metaKey || r.key === "Escape" || r.key === "Enter" || r.key === "Tab" ? !1 : r.key.length === 1 || r.key.startsWith("Arrow"), "isTimePickerOpenKey"), rn = /* @__PURE__ */ c((r, I) => {
|
|
42
|
+
const Y = r.trim(), d = I ? "(\\d{2}):(\\d{2}):(\\d{2})" : "(\\d{2}):(\\d{2})", w = Y.match(new RegExp(`^${d}$`));
|
|
44
43
|
if (!w)
|
|
45
44
|
return null;
|
|
46
45
|
const S = Number(w[1]), B = Number(w[2]), h = I ? Number(w[3]) : 0;
|
|
@@ -59,11 +58,11 @@ const tn = "––", le = {
|
|
|
59
58
|
}
|
|
60
59
|
r.current = I;
|
|
61
60
|
}
|
|
62
|
-
}, "assignInputRef"),
|
|
61
|
+
}, "assignInputRef"), Ae = /* @__PURE__ */ c(({
|
|
63
62
|
label: r,
|
|
64
63
|
variant: I = "standard",
|
|
65
64
|
sx: Y,
|
|
66
|
-
value:
|
|
65
|
+
value: d,
|
|
67
66
|
format: w = $,
|
|
68
67
|
useAmPm: S,
|
|
69
68
|
placeholder: B,
|
|
@@ -87,41 +86,41 @@ const tn = "––", le = {
|
|
|
87
86
|
}, R = P(
|
|
88
87
|
() => m ? ["hours", "minutes", "seconds"] : ["hours", "minutes"],
|
|
89
88
|
[m]
|
|
90
|
-
), on = R.length - 1, G = en * (R.length + (A ? 1 : 0)), [_n, ln] = q(!1), [_, On] = q(""), [fn,
|
|
89
|
+
), on = R.length - 1, G = en * (R.length + (A ? 1 : 0)), [_n, ln] = q(!1), [_, On] = q(""), [fn, dn] = q(!1), [Kn, O] = q(null), C = k(null), sn = k(null), mn = k(null), J = k(null), H = k(!1), U = k(!1), b = k(0), Q = k(!1), { t: Z, i18n: In } = Qn(), Bn = (In.resolvedLanguage ?? In.language ?? "kr") === "kr" ? "ko" : "en", x = {
|
|
91
90
|
okButtonLabel: Z("Button.확인"),
|
|
92
91
|
clearButtonLabel: Z("Button.초기화"),
|
|
93
92
|
fieldHoursPlaceholder: /* @__PURE__ */ c(() => tn, "fieldHoursPlaceholder"),
|
|
94
93
|
fieldMinutesPlaceholder: /* @__PURE__ */ c(() => tn, "fieldMinutesPlaceholder"),
|
|
95
94
|
fieldMeridiemPlaceholder: /* @__PURE__ */ c(() => tn, "fieldMeridiemPlaceholder"),
|
|
96
95
|
...Sn
|
|
97
|
-
}, Ln = B ?? (A ? "–– ––:––" : "––:––"), Vn = [
|
|
96
|
+
}, Ln = B ?? (A ? "–– ––:––" : "––:––"), Vn = [oe, Y, t == null ? void 0 : t.sx].filter(
|
|
98
97
|
Boolean
|
|
99
|
-
), zn = !!(h || l.disabled || l.readOnly), Nn = !!a && !h, V = cn !== void 0,
|
|
100
|
-
On(n),
|
|
98
|
+
), zn = !!(h || l.disabled || l.readOnly), Nn = !!a && !h, V = cn !== void 0, s = V ? cn : _n, f = o((n) => {
|
|
99
|
+
On(n), dn(!1);
|
|
101
100
|
}, []), p = P(() => {
|
|
102
|
-
if (!
|
|
101
|
+
if (!d)
|
|
103
102
|
return null;
|
|
104
|
-
if (g.isDayjs(
|
|
105
|
-
return
|
|
106
|
-
if (typeof
|
|
107
|
-
const e = rn(
|
|
103
|
+
if (g.isDayjs(d))
|
|
104
|
+
return d;
|
|
105
|
+
if (typeof d == "string") {
|
|
106
|
+
const e = rn(d, m);
|
|
108
107
|
if (e != null && e.dateValue.isValid())
|
|
109
108
|
return e.dateValue;
|
|
110
|
-
const u = g(
|
|
109
|
+
const u = g(d, y, !0);
|
|
111
110
|
return u.isValid() ? u : null;
|
|
112
111
|
}
|
|
113
|
-
const n = g(
|
|
112
|
+
const n = g(d);
|
|
114
113
|
return n.isValid() ? n : null;
|
|
115
|
-
}, [m, y,
|
|
116
|
-
if (!
|
|
114
|
+
}, [m, y, d]), K = P(() => {
|
|
115
|
+
if (!d)
|
|
117
116
|
return "";
|
|
118
|
-
if (typeof
|
|
119
|
-
const e = g(
|
|
120
|
-
return e.isValid() ? an(e, m) :
|
|
117
|
+
if (typeof d == "string") {
|
|
118
|
+
const e = g(d, y, !0);
|
|
119
|
+
return e.isValid() ? an(e, m) : d;
|
|
121
120
|
}
|
|
122
|
-
const n = g(
|
|
121
|
+
const n = g(d);
|
|
123
122
|
return n.isValid() ? an(n, m) : "";
|
|
124
|
-
}, [m, y,
|
|
123
|
+
}, [m, y, d]), jn = /* @__PURE__ */ c((n) => {
|
|
125
124
|
const e = n != null && n.isValid() ? n.format(y) : void 0;
|
|
126
125
|
f(
|
|
127
126
|
n != null && n.isValid() ? an(n, m) : ""
|
|
@@ -131,10 +130,10 @@ const tn = "––", le = {
|
|
|
131
130
|
if (!_)
|
|
132
131
|
return f(""), a == null || a(""), !0;
|
|
133
132
|
const e = rn(_, m);
|
|
134
|
-
return e != null && e.dateValue.isValid() ? (f(e.valueText), a == null || a(e.valueText), !0) : (n && _ &&
|
|
133
|
+
return e != null && e.dateValue.isValid() ? (f(e.valueText), a == null || a(e.valueText), !0) : (n && _ && dn(!0), !1);
|
|
135
134
|
},
|
|
136
135
|
[m, _, a, f]
|
|
137
|
-
),
|
|
136
|
+
), D = o(() => {
|
|
138
137
|
if (U.current || Date.now() < b.current) {
|
|
139
138
|
U.current = !1;
|
|
140
139
|
return;
|
|
@@ -146,13 +145,13 @@ const tn = "––", le = {
|
|
|
146
145
|
z(), T();
|
|
147
146
|
}, [T, z]), yn = o(() => {
|
|
148
147
|
b.current = Date.now() + 200, M();
|
|
149
|
-
}, [M]),
|
|
148
|
+
}, [M]), En = o(() => {
|
|
150
149
|
b.current = Date.now() + 200, T();
|
|
151
|
-
}, [T]),
|
|
150
|
+
}, [T]), Dn = o((n) => {
|
|
152
151
|
const e = C.current;
|
|
153
152
|
e && window.requestAnimationFrame(() => {
|
|
154
153
|
var u;
|
|
155
|
-
(u =
|
|
154
|
+
(u = ae(e, n)) == null || u.focus();
|
|
156
155
|
});
|
|
157
156
|
}, []), N = o(() => {
|
|
158
157
|
window.requestAnimationFrame(() => {
|
|
@@ -186,7 +185,7 @@ const tn = "––", le = {
|
|
|
186
185
|
if (n.key === "Tab") {
|
|
187
186
|
if (n.preventDefault(), !z(!0))
|
|
188
187
|
return;
|
|
189
|
-
b.current = Date.now() + 200, T(),
|
|
188
|
+
b.current = Date.now() + 200, T(), Dn(n.shiftKey);
|
|
190
189
|
return;
|
|
191
190
|
}
|
|
192
191
|
n.key === "Enter" && (n.preventDefault(), z(!0) && (b.current = Date.now() + 200, T(), N()));
|
|
@@ -194,7 +193,7 @@ const tn = "––", le = {
|
|
|
194
193
|
[
|
|
195
194
|
T,
|
|
196
195
|
z,
|
|
197
|
-
|
|
196
|
+
Dn,
|
|
198
197
|
N,
|
|
199
198
|
K,
|
|
200
199
|
p,
|
|
@@ -212,11 +211,11 @@ const tn = "––", le = {
|
|
|
212
211
|
if (!(n != null && n.isValid()))
|
|
213
212
|
return;
|
|
214
213
|
const u = n.format(y);
|
|
215
|
-
O(n), f(u), e === R[on] && (b.current = Date.now() + 200, a == null || a(u),
|
|
214
|
+
O(n), f(u), e === R[on] && (b.current = Date.now() + 200, a == null || a(u), En(), N());
|
|
216
215
|
},
|
|
217
216
|
[
|
|
218
217
|
on,
|
|
219
|
-
|
|
218
|
+
En,
|
|
220
219
|
N,
|
|
221
220
|
y,
|
|
222
221
|
a,
|
|
@@ -232,9 +231,9 @@ const tn = "––", le = {
|
|
|
232
231
|
), $n = o(
|
|
233
232
|
(n) => {
|
|
234
233
|
var e;
|
|
235
|
-
(e = t == null ? void 0 : t.onFocus) == null || e.call(t, n), !(n.defaultPrevented || l.disabled || l.readOnly ||
|
|
234
|
+
(e = t == null ? void 0 : t.onFocus) == null || e.call(t, n), !(n.defaultPrevented || l.disabled || l.readOnly || s) && (Q.current = H.current, D());
|
|
236
235
|
},
|
|
237
|
-
[
|
|
236
|
+
[D, s, t, l.disabled, l.readOnly]
|
|
238
237
|
), Yn = o(
|
|
239
238
|
(n) => {
|
|
240
239
|
var e;
|
|
@@ -243,19 +242,19 @@ const tn = "––", le = {
|
|
|
243
242
|
Q.current = !1, H.current = !1;
|
|
244
243
|
return;
|
|
245
244
|
}
|
|
246
|
-
if (H.current = !1,
|
|
245
|
+
if (H.current = !1, s) {
|
|
247
246
|
U.current = !0, M(), queueMicrotask(() => {
|
|
248
247
|
U.current = !1;
|
|
249
248
|
});
|
|
250
249
|
return;
|
|
251
250
|
}
|
|
252
|
-
|
|
251
|
+
D();
|
|
253
252
|
}
|
|
254
253
|
},
|
|
255
254
|
[
|
|
256
255
|
M,
|
|
257
|
-
|
|
258
|
-
|
|
256
|
+
D,
|
|
257
|
+
s,
|
|
259
258
|
t,
|
|
260
259
|
l.disabled,
|
|
261
260
|
l.readOnly
|
|
@@ -264,26 +263,26 @@ const tn = "––", le = {
|
|
|
264
263
|
(n) => {
|
|
265
264
|
var e;
|
|
266
265
|
if ((e = t == null ? void 0 : t.onKeyDown) == null || e.call(t, n), !(n.defaultPrevented || l.disabled || l.readOnly)) {
|
|
267
|
-
if (!
|
|
268
|
-
n.preventDefault(),
|
|
266
|
+
if (!s && fe(n)) {
|
|
267
|
+
n.preventDefault(), D();
|
|
269
268
|
return;
|
|
270
269
|
}
|
|
271
|
-
!
|
|
270
|
+
!s || !le(n) || M();
|
|
272
271
|
}
|
|
273
272
|
},
|
|
274
273
|
[
|
|
275
274
|
M,
|
|
276
|
-
|
|
277
|
-
|
|
275
|
+
D,
|
|
276
|
+
s,
|
|
278
277
|
t,
|
|
279
278
|
l.disabled,
|
|
280
279
|
l.readOnly
|
|
281
280
|
]
|
|
282
281
|
);
|
|
283
282
|
return nn(() => {
|
|
284
|
-
|
|
285
|
-
}, [
|
|
286
|
-
if (!
|
|
283
|
+
s && (f(K), O(p));
|
|
284
|
+
}, [s, K, p, f]), nn(() => {
|
|
285
|
+
if (!s)
|
|
287
286
|
return;
|
|
288
287
|
const n = window.requestAnimationFrame(() => {
|
|
289
288
|
var e;
|
|
@@ -292,20 +291,20 @@ const tn = "––", le = {
|
|
|
292
291
|
return () => {
|
|
293
292
|
window.cancelAnimationFrame(n);
|
|
294
293
|
};
|
|
295
|
-
}, [
|
|
296
|
-
if (!
|
|
294
|
+
}, [s]), nn(() => {
|
|
295
|
+
if (!s)
|
|
297
296
|
return;
|
|
298
297
|
const n = /* @__PURE__ */ c((e) => {
|
|
299
298
|
var j, wn;
|
|
300
299
|
const u = e.target;
|
|
301
|
-
u instanceof Node && ((j = C.current) != null && j.contains(u) || (wn =
|
|
300
|
+
u instanceof Node && ((j = C.current) != null && j.contains(u) || (wn = sn.current) != null && wn.contains(u) || yn());
|
|
302
301
|
}, "handleDocumentMouseDown");
|
|
303
302
|
return document.addEventListener("mousedown", n, !0), () => {
|
|
304
303
|
document.removeEventListener("mousedown", n, !0);
|
|
305
304
|
};
|
|
306
|
-
}, [yn,
|
|
307
|
-
/* @__PURE__ */
|
|
308
|
-
|
|
305
|
+
}, [yn, s]), /* @__PURE__ */ E(ne, { dateAdapter: ee, adapterLocale: Bn, children: /* @__PURE__ */ F("div", { ref: C, children: [
|
|
306
|
+
/* @__PURE__ */ E(
|
|
307
|
+
Fn,
|
|
309
308
|
{
|
|
310
309
|
...l,
|
|
311
310
|
enableAccessibleFieldDOMStructure: !1,
|
|
@@ -319,12 +318,12 @@ const tn = "––", le = {
|
|
|
319
318
|
format: An,
|
|
320
319
|
localeText: x,
|
|
321
320
|
onChange: jn,
|
|
322
|
-
onOpen:
|
|
321
|
+
onOpen: D,
|
|
323
322
|
onClose: M,
|
|
324
323
|
slots: {
|
|
325
324
|
...hn,
|
|
326
325
|
inputAdornment: /* @__PURE__ */ c(({ position: n, children: e, ...u }) => /* @__PURE__ */ F(pn, { position: n, ...u, children: [
|
|
327
|
-
n === "end" && Nn && /* @__PURE__ */
|
|
326
|
+
n === "end" && Nn && /* @__PURE__ */ E(
|
|
328
327
|
Mn,
|
|
329
328
|
{
|
|
330
329
|
className: "clearButton",
|
|
@@ -335,7 +334,7 @@ const tn = "––", le = {
|
|
|
335
334
|
onClick: /* @__PURE__ */ c((j) => {
|
|
336
335
|
j.preventDefault(), j.stopPropagation(), Wn();
|
|
337
336
|
}, "onClick"),
|
|
338
|
-
children: /* @__PURE__ */
|
|
337
|
+
children: /* @__PURE__ */ E(bn, { fontSize: "small" })
|
|
339
338
|
}
|
|
340
339
|
),
|
|
341
340
|
e
|
|
@@ -348,7 +347,7 @@ const tn = "––", le = {
|
|
|
348
347
|
size: "small",
|
|
349
348
|
tabIndex: -1,
|
|
350
349
|
onClick: /* @__PURE__ */ c((n) => {
|
|
351
|
-
n.preventDefault(), n.stopPropagation(),
|
|
350
|
+
n.preventDefault(), n.stopPropagation(), s || D();
|
|
352
351
|
}, "onClick"),
|
|
353
352
|
sx: {
|
|
354
353
|
margin: 0,
|
|
@@ -372,7 +371,7 @@ const tn = "––", le = {
|
|
|
372
371
|
variant: I,
|
|
373
372
|
fullWidth: L,
|
|
374
373
|
...t,
|
|
375
|
-
className:
|
|
374
|
+
className: te(
|
|
376
375
|
!L && (A ? "w-[160px]" : "w-[140px]"),
|
|
377
376
|
t == null ? void 0 : t.className
|
|
378
377
|
),
|
|
@@ -387,13 +386,13 @@ const tn = "––", le = {
|
|
|
387
386
|
}
|
|
388
387
|
}
|
|
389
388
|
),
|
|
390
|
-
/* @__PURE__ */
|
|
391
|
-
|
|
389
|
+
/* @__PURE__ */ E(
|
|
390
|
+
Zn,
|
|
392
391
|
{
|
|
393
|
-
open:
|
|
392
|
+
open: s,
|
|
394
393
|
anchorEl: C.current,
|
|
395
394
|
placement: "bottom-end",
|
|
396
|
-
ref:
|
|
395
|
+
ref: sn,
|
|
397
396
|
modifiers: [
|
|
398
397
|
{
|
|
399
398
|
name: "offset",
|
|
@@ -404,7 +403,7 @@ const tn = "––", le = {
|
|
|
404
403
|
],
|
|
405
404
|
sx: { zIndex: /* @__PURE__ */ c((n) => n.zIndex.modal, "zIndex") },
|
|
406
405
|
children: /* @__PURE__ */ F(
|
|
407
|
-
|
|
406
|
+
xn,
|
|
408
407
|
{
|
|
409
408
|
elevation: 8,
|
|
410
409
|
onClick: /* @__PURE__ */ c((n) => {
|
|
@@ -426,8 +425,8 @@ const tn = "––", le = {
|
|
|
426
425
|
width: G
|
|
427
426
|
},
|
|
428
427
|
children: [
|
|
429
|
-
/* @__PURE__ */
|
|
430
|
-
|
|
428
|
+
/* @__PURE__ */ E(
|
|
429
|
+
ue,
|
|
431
430
|
{
|
|
432
431
|
autoFocus: !0,
|
|
433
432
|
inputRef: J,
|
|
@@ -436,8 +435,8 @@ const tn = "––", le = {
|
|
|
436
435
|
variant: "outlined",
|
|
437
436
|
value: _,
|
|
438
437
|
error: fn,
|
|
439
|
-
helperText: fn ? Z(
|
|
440
|
-
mask:
|
|
438
|
+
helperText: fn ? Z(re) : void 0,
|
|
439
|
+
mask: ce(y),
|
|
441
440
|
placeholder: y,
|
|
442
441
|
onChange: Cn,
|
|
443
442
|
onKeyDown: Hn,
|
|
@@ -445,14 +444,14 @@ const tn = "––", le = {
|
|
|
445
444
|
inputMode: "numeric",
|
|
446
445
|
"aria-label": y
|
|
447
446
|
},
|
|
448
|
-
endAdornment: /* @__PURE__ */
|
|
447
|
+
endAdornment: /* @__PURE__ */ E(
|
|
449
448
|
pn,
|
|
450
449
|
{
|
|
451
450
|
position: "end",
|
|
452
451
|
sx: {
|
|
453
452
|
marginLeft: 0
|
|
454
453
|
},
|
|
455
|
-
children: /* @__PURE__ */
|
|
454
|
+
children: /* @__PURE__ */ E(
|
|
456
455
|
Mn,
|
|
457
456
|
{
|
|
458
457
|
size: "small",
|
|
@@ -467,7 +466,7 @@ const tn = "––", le = {
|
|
|
467
466
|
margin: 0,
|
|
468
467
|
padding: 0.25
|
|
469
468
|
},
|
|
470
|
-
children: /* @__PURE__ */
|
|
469
|
+
children: /* @__PURE__ */ E(bn, { fontSize: "small" })
|
|
471
470
|
}
|
|
472
471
|
)
|
|
473
472
|
}
|
|
@@ -485,8 +484,8 @@ const tn = "––", le = {
|
|
|
485
484
|
}
|
|
486
485
|
}
|
|
487
486
|
),
|
|
488
|
-
/* @__PURE__ */
|
|
489
|
-
|
|
487
|
+
/* @__PURE__ */ E(
|
|
488
|
+
Pn,
|
|
490
489
|
{
|
|
491
490
|
ampm: A,
|
|
492
491
|
value: Kn,
|
|
@@ -495,7 +494,7 @@ const tn = "––", le = {
|
|
|
495
494
|
timeSteps: un,
|
|
496
495
|
slotProps: {
|
|
497
496
|
digitalClockSectionItem: {
|
|
498
|
-
sx:
|
|
497
|
+
sx: ie
|
|
499
498
|
}
|
|
500
499
|
},
|
|
501
500
|
sx: {
|
|
@@ -530,6 +529,6 @@ const tn = "––", le = {
|
|
|
530
529
|
] }) });
|
|
531
530
|
}, "OwpTimePicker");
|
|
532
531
|
export {
|
|
533
|
-
|
|
532
|
+
Ae as OwpTimePicker
|
|
534
533
|
};
|
|
535
534
|
//# sourceMappingURL=OwpTimePicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpTimePicker.js","sources":["../../../src/components/OwpPicker/OwpTimePicker.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { ensureDayjsBrowserSetup } from '@/utils/dayjsBrowser';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport {\n IconButton,\n InputAdornment,\n type InputAdornmentProps,\n Paper,\n Popper,\n type TextFieldProps,\n} from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport {\n LocalizationProvider,\n MultiSectionDigitalClock,\n TimePicker,\n type TimePickerProps,\n} from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport clsx from 'clsx';\nimport dayjs, { type Dayjs } from '@/dayjs';\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n PICKER_INVALID_INPUT_MESSAGE_KEY,\n TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n TIME_PICKER_EDITOR_SECTION_WIDTH,\n TIME_PICKER_SELECTED_ITEM_SX,\n VALUE_TIME_FORMATTER,\n VALUE_TIME_SECOND_FORMATTER,\n} from './constants';\nimport { OwpTextMaskField, type OwpTextMaskFieldChangeEvent } from '../OwpTextField';\nimport { getAdjacentFocusableElement, getPickerInputMask } from './utils';\n\nensureDayjsBrowserSetup();\n\nconst EMPTY_TIME_SECTION = '––';\n\nconst TIME_PICKER_TEXT_FIELD_SX = {\n '& .MuiInputBase-root': {\n alignItems: 'center',\n },\n '& .MuiInputAdornment-positionEnd': {\n marginBottom: 0,\n marginLeft: 0,\n gap: 0,\n },\n '& .MuiInputAdornment-positionEnd > :not(style) + :not(style)': {\n marginLeft: 0,\n },\n '& .MuiInputAdornment-positionEnd .MuiIconButton-root': {\n margin: 0,\n padding: 0,\n },\n '& .clearButton': {\n opacity: 1,\n visibility: 'visible',\n },\n '@media (pointer: fine)': {\n '& .clearButton': {\n opacity: 1,\n visibility: 'visible',\n },\n },\n};\n\nexport type OwpTimePickerValue = string | Date | Dayjs;\ntype OwpTimePickerTextFieldClickEvent = Parameters<NonNullable<TextFieldProps['onClick']>>[0];\ntype OwpTimePickerTextFieldFocusEvent = Parameters<NonNullable<TextFieldProps['onFocus']>>[0];\ntype OwpTimePickerTextFieldKeyDownEvent = Parameters<NonNullable<TextFieldProps['onKeyDown']>>[0];\ntype OwpTimePickerTextFieldMouseDownEvent = Parameters<\n NonNullable<TextFieldProps['onMouseDown']>\n>[0];\n\nconst isValueEditingKey = (event: OwpTimePickerTextFieldKeyDownEvent) => {\n if (event.ctrlKey || event.altKey || event.metaKey) {\n return false;\n }\n\n return event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete';\n};\n\nconst isTimePickerOpenKey = (event: OwpTimePickerTextFieldKeyDownEvent) => {\n if (\n event.ctrlKey ||\n event.altKey ||\n event.metaKey ||\n event.key === 'Escape' ||\n event.key === 'Enter' ||\n event.key === 'Tab'\n ) {\n return false;\n }\n\n return event.key.length === 1 || event.key.startsWith('Arrow');\n};\n\n/** TimePicker 입력 값 파싱 */\nconst parseTimePickerInput = (value: string, hasSeconds: boolean) => {\n const normalizedValue = value.trim();\n const timePattern = hasSeconds ? '(\\\\d{2}):(\\\\d{2}):(\\\\d{2})' : '(\\\\d{2}):(\\\\d{2})';\n const match = normalizedValue.match(new RegExp(`^${timePattern}$`));\n\n if (!match) {\n return null;\n }\n\n const hour = Number(match[1]);\n const minute = Number(match[2]);\n const second = hasSeconds ? Number(match[3]) : 0;\n\n if (minute > 59 || second > 59) {\n return null;\n }\n\n if (hour > 24 || (hour === 24 && (minute > 0 || second > 0))) {\n return null;\n }\n\n const valueText = [hour, minute, ...(hasSeconds ? [second] : [])]\n .map((part) => String(part).padStart(2, '0'))\n .join(':');\n\n return {\n dateValue:\n hour === 24\n ? dayjs('00:00:00', VALUE_TIME_SECOND_FORMATTER, true).add(1, 'day')\n : dayjs(valueText, hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER, true),\n valueText,\n };\n};\n\n/** TimePicker 상단 입력 표시 값 */\nconst formatTimePickerDisplayInput = (value: Dayjs, hasSeconds: boolean) =>\n value.format(hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER);\n\n/** input ref 값 할당 */\nconst assignInputRef = (\n inputRef: Ref<HTMLInputElement> | undefined,\n value: HTMLInputElement | null,\n) => {\n if (!inputRef) {\n return;\n }\n\n if (typeof inputRef === 'function') {\n inputRef(value);\n return;\n }\n\n (inputRef as { current: HTMLInputElement | null }).current = value;\n};\n\ninterface OwnProps {\n label?: string;\n variant?: TextFieldProps['variant'];\n sx?: TextFieldProps['sx'];\n value?: OwpTimePickerValue;\n format?: string;\n useAmPm?: boolean;\n placeholder?: string;\n disabledClearButton?: boolean;\n fullWidth?: boolean;\n onChange?: (value?: string) => void;\n slotProps?: TimePickerProps<false>['slotProps'];\n textFieldProps?: Omit<TextFieldProps, 'value' | 'defaultValue' | 'onChange'>;\n}\n\ntype OwpTimePickerProps = OwnProps &\n Omit<\n TimePickerProps<false>,\n | 'value'\n | 'onChange'\n | 'label'\n | 'format'\n | 'ampm'\n | 'slotProps'\n | 'enableAccessibleFieldDOMStructure'\n >;\n\n/**\n * OwpTimePicker 컴포넌트\n * @param label 입력 라벨\n * @param variant variant 값\n * @param sx sx 값\n * @param value 현재 값, clear 버튼 동작 대상 값\n * @param format 시간 포맷\n * @param useAmPm 오전/오후 포맷 사용 여부\n * @param disabledClearButton clear 버튼 비활성화 여부\n * @param fullWidth 전체 너비 사용 여부\n * @param onChange onChange 핸들러, clear 버튼 활성화 조건\n * @param slotProps TimePicker slot props\n * @param textFieldProps TextField props\n */\nconst OwpTimePicker = ({\n label,\n variant = 'standard',\n sx,\n value,\n format = VALUE_TIME_FORMATTER,\n useAmPm,\n placeholder,\n disabledClearButton,\n fullWidth,\n onChange,\n textFieldProps,\n localeText,\n open: openProp,\n onOpen,\n onClose,\n slots,\n slotProps,\n ...timePickerProps\n}: OwpTimePickerProps) => {\n const hasSeconds = /s/i.test(format);\n const normalizedValueFormat = hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER;\n const useMeridiem = useAmPm ?? /a/i.test(format);\n const displayFormat = useMeridiem\n ? hasSeconds\n ? 'A hh:mm:ss'\n : 'A hh:mm'\n : normalizedValueFormat;\n const resolvedCloseOnSelect = timePickerProps.closeOnSelect ?? false;\n const resolvedTimeSteps = {\n minutes: 1,\n seconds: 1,\n ...timePickerProps.timeSteps,\n };\n const timePickerViews = useMemo(\n () =>\n hasSeconds ? (['hours', 'minutes', 'seconds'] as const) : (['hours', 'minutes'] as const),\n [hasSeconds],\n );\n const closeTimePickerSectionIndex = timePickerViews.length - 1;\n const timePickerEditorWidth =\n TIME_PICKER_EDITOR_SECTION_WIDTH * (timePickerViews.length + (useMeridiem ? 1 : 0));\n const [internalOpen, setInternalOpen] = useState(false);\n const [inputDraftValue, setInputDraftValue] = useState('');\n const [hasPickerInputCommitError, setHasPickerInputCommitError] = useState(false);\n const [pickerDraftValue, setPickerDraftValue] = useState<Dayjs | null>(null);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const popperRef = useRef<HTMLDivElement | null>(null);\n const externalInputRef = useRef<HTMLInputElement | null>(null);\n const pickerInputRef = useRef<HTMLInputElement | null>(null);\n const isTextFieldMouseDownRef = useRef(false);\n const skipNextOpenRef = useRef(false);\n const suppressOpenUntilRef = useRef(0);\n const skipNextTextFieldClickRef = useRef(false);\n const { t, i18n } = useOwpTranslation();\n const languageId = i18n.resolvedLanguage ?? i18n.language ?? 'kr';\n const adapterLocale = languageId === 'kr' ? 'ko' : 'en';\n const resolvedLocaleText = {\n okButtonLabel: t('Button.확인'),\n clearButtonLabel: t('Button.초기화'),\n fieldHoursPlaceholder: () => EMPTY_TIME_SECTION,\n fieldMinutesPlaceholder: () => EMPTY_TIME_SECTION,\n fieldMeridiemPlaceholder: () => EMPTY_TIME_SECTION,\n ...localeText,\n };\n const resolvedPlaceholder = placeholder ?? (useMeridiem ? '–– ––:––' : '––:––');\n const resolvedTextFieldSx = [TIME_PICKER_TEXT_FIELD_SX, sx, textFieldProps?.sx].filter(\n Boolean,\n ) as SxProps<Theme>;\n const isClearDisabled = Boolean(\n disabledClearButton || timePickerProps.disabled || timePickerProps.readOnly,\n );\n const canClear = Boolean(onChange) && !disabledClearButton;\n const isControlledOpen = openProp !== undefined;\n const isOpen = isControlledOpen ? openProp : internalOpen;\n const setPickerInputDraftValue = useCallback((nextValue: string) => {\n setInputDraftValue(nextValue);\n setHasPickerInputCommitError(false);\n }, []);\n\n const selectedValue = useMemo(() => {\n if (!value) {\n return null;\n }\n\n if (dayjs.isDayjs(value)) {\n return value;\n }\n\n if (typeof value === 'string') {\n const parsedInputValue = parseTimePickerInput(value, hasSeconds);\n\n if (parsedInputValue?.dateValue.isValid()) {\n return parsedInputValue.dateValue;\n }\n\n const parsedValue = dayjs(value, normalizedValueFormat, true);\n return parsedValue.isValid() ? parsedValue : null;\n }\n\n const parsedValue = dayjs(value);\n return parsedValue.isValid() ? parsedValue : null;\n }, [hasSeconds, normalizedValueFormat, value]);\n\n const selectedInputValue = useMemo(() => {\n if (!value) {\n return '';\n }\n\n if (typeof value === 'string') {\n const parsedValue = dayjs(value, normalizedValueFormat, true);\n\n if (parsedValue.isValid()) {\n return formatTimePickerDisplayInput(parsedValue, hasSeconds);\n }\n\n return value;\n }\n\n const parsedValue = dayjs(value);\n return parsedValue.isValid() ? formatTimePickerDisplayInput(parsedValue, hasSeconds) : '';\n }, [hasSeconds, normalizedValueFormat, value]);\n\n const handleChange = (nextValue: Dayjs | null) => {\n const nextValueText = nextValue?.isValid()\n ? nextValue.format(normalizedValueFormat)\n : undefined;\n setPickerInputDraftValue(\n nextValue?.isValid() ? formatTimePickerDisplayInput(nextValue, hasSeconds) : '',\n );\n onChange?.(nextValueText);\n };\n\n const commitInputDraftValue = useCallback(\n (showError?: boolean) => {\n if (!inputDraftValue) {\n setPickerInputDraftValue('');\n onChange?.('');\n\n return true;\n }\n\n const parsedInput = parseTimePickerInput(inputDraftValue, hasSeconds);\n\n if (!parsedInput?.dateValue.isValid()) {\n if (showError && inputDraftValue) {\n setHasPickerInputCommitError(true);\n }\n\n return false;\n }\n\n setPickerInputDraftValue(parsedInput.valueText);\n onChange?.(parsedInput.valueText);\n\n return true;\n },\n [hasSeconds, inputDraftValue, onChange, setPickerInputDraftValue],\n );\n\n const handleOpen = useCallback(() => {\n if (skipNextOpenRef.current || Date.now() < suppressOpenUntilRef.current) {\n skipNextOpenRef.current = false;\n return;\n }\n\n if (!isControlledOpen) {\n setInternalOpen(true);\n }\n\n setPickerInputDraftValue(selectedInputValue);\n setPickerDraftValue(selectedValue);\n onOpen?.();\n }, [isControlledOpen, onOpen, selectedInputValue, selectedValue, setPickerInputDraftValue]);\n\n const closePicker = useCallback(() => {\n if (!isControlledOpen) {\n setInternalOpen(false);\n }\n\n onClose?.();\n }, [isControlledOpen, onClose]);\n\n const handleClose = useCallback(() => {\n commitInputDraftValue();\n closePicker();\n }, [closePicker, commitInputDraftValue]);\n\n const handleClickAwayClose = useCallback(() => {\n suppressOpenUntilRef.current = Date.now() + 200;\n handleClose();\n }, [handleClose]);\n\n const closePickerWithoutReopen = useCallback(() => {\n suppressOpenUntilRef.current = Date.now() + 200;\n closePicker();\n }, [closePicker]);\n\n const focusAdjacentElement = useCallback((isBackward?: boolean) => {\n const rootElement = rootRef.current;\n\n if (!rootElement) {\n return;\n }\n\n window.requestAnimationFrame(() => {\n getAdjacentFocusableElement(rootElement, isBackward)?.focus();\n });\n }, []);\n\n const focusExternalInput = useCallback(() => {\n window.requestAnimationFrame(() => {\n externalInputRef.current?.focus();\n });\n }, []);\n\n const handleTextFieldInputRef = useCallback(\n (input: HTMLInputElement | null) => {\n externalInputRef.current = input;\n assignInputRef(textFieldProps?.inputRef as Ref<HTMLInputElement> | undefined, input);\n },\n [textFieldProps?.inputRef],\n );\n\n const handleClear = () => {\n onChange?.('');\n setPickerInputDraftValue('');\n };\n\n const handlePickerInputChange = useCallback(\n (event: OwpTextMaskFieldChangeEvent) => {\n const nextInputValue = event.target.value;\n const parsedInput = parseTimePickerInput(nextInputValue, hasSeconds);\n\n setPickerInputDraftValue(nextInputValue);\n\n if (parsedInput?.dateValue.isValid()) {\n setPickerDraftValue(parsedInput.dateValue);\n }\n },\n [hasSeconds, setPickerInputDraftValue],\n );\n\n const stopPickerInputKeyboardEvent = useCallback(\n (event: ReactKeyboardEvent<HTMLInputElement>) => {\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n },\n [],\n );\n\n const handlePickerInputKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLInputElement>) => {\n stopPickerInputKeyboardEvent(event);\n\n if (event.key === 'Escape') {\n event.preventDefault();\n suppressOpenUntilRef.current = Date.now() + 200;\n setPickerInputDraftValue(selectedInputValue);\n setPickerDraftValue(selectedValue);\n closePicker();\n focusExternalInput();\n return;\n }\n\n if (event.key === 'Tab') {\n event.preventDefault();\n\n if (!commitInputDraftValue(true)) {\n return;\n }\n\n suppressOpenUntilRef.current = Date.now() + 200;\n closePicker();\n focusAdjacentElement(event.shiftKey);\n return;\n }\n\n if (event.key !== 'Enter') {\n return;\n }\n\n event.preventDefault();\n if (commitInputDraftValue(true)) {\n suppressOpenUntilRef.current = Date.now() + 200;\n closePicker();\n focusExternalInput();\n }\n },\n [\n closePicker,\n commitInputDraftValue,\n focusAdjacentElement,\n focusExternalInput,\n selectedInputValue,\n selectedValue,\n setPickerInputDraftValue,\n stopPickerInputKeyboardEvent,\n ],\n );\n\n const handlePickerInputClear = useCallback(\n (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n onChange?.('');\n setPickerInputDraftValue('');\n setPickerDraftValue(null);\n pickerInputRef.current?.focus();\n },\n [onChange, setPickerInputDraftValue],\n );\n\n const handlePickerClockChange = useCallback(\n (nextValue: Dayjs | null, selectedView?: string) => {\n if (!nextValue?.isValid()) {\n return;\n }\n\n const nextValueText = nextValue.format(normalizedValueFormat);\n\n setPickerDraftValue(nextValue);\n setPickerInputDraftValue(nextValueText);\n\n if (selectedView !== timePickerViews[closeTimePickerSectionIndex]) {\n return;\n }\n\n suppressOpenUntilRef.current = Date.now() + 200;\n onChange?.(nextValueText);\n closePickerWithoutReopen();\n focusExternalInput();\n },\n [\n closeTimePickerSectionIndex,\n closePickerWithoutReopen,\n focusExternalInput,\n normalizedValueFormat,\n onChange,\n setPickerInputDraftValue,\n timePickerViews,\n ],\n );\n\n const handleTextFieldMouseDown = useCallback(\n (event: OwpTimePickerTextFieldMouseDownEvent) => {\n textFieldProps?.onMouseDown?.(event);\n isTextFieldMouseDownRef.current = true;\n },\n [textFieldProps],\n );\n\n const handleTextFieldFocus = useCallback(\n (event: OwpTimePickerTextFieldFocusEvent) => {\n textFieldProps?.onFocus?.(event);\n\n if (\n event.defaultPrevented ||\n timePickerProps.disabled ||\n timePickerProps.readOnly ||\n isOpen\n ) {\n return;\n }\n\n skipNextTextFieldClickRef.current = isTextFieldMouseDownRef.current;\n handleOpen();\n },\n [handleOpen, isOpen, textFieldProps, timePickerProps.disabled, timePickerProps.readOnly],\n );\n\n const handleTextFieldClick = useCallback(\n (event: OwpTimePickerTextFieldClickEvent) => {\n textFieldProps?.onClick?.(event);\n\n if (event.defaultPrevented || timePickerProps.disabled || timePickerProps.readOnly) {\n return;\n }\n\n if (skipNextTextFieldClickRef.current) {\n skipNextTextFieldClickRef.current = false;\n isTextFieldMouseDownRef.current = false;\n return;\n }\n\n isTextFieldMouseDownRef.current = false;\n\n if (isOpen) {\n skipNextOpenRef.current = true;\n handleClose();\n queueMicrotask(() => {\n skipNextOpenRef.current = false;\n });\n return;\n }\n\n handleOpen();\n },\n [\n handleClose,\n handleOpen,\n isOpen,\n textFieldProps,\n timePickerProps.disabled,\n timePickerProps.readOnly,\n ],\n );\n\n const handleTextFieldKeyDown = useCallback(\n (event: OwpTimePickerTextFieldKeyDownEvent) => {\n textFieldProps?.onKeyDown?.(event);\n\n if (event.defaultPrevented || timePickerProps.disabled || timePickerProps.readOnly) {\n return;\n }\n\n if (!isOpen && isTimePickerOpenKey(event)) {\n event.preventDefault();\n handleOpen();\n return;\n }\n\n if (!isOpen || !isValueEditingKey(event)) {\n return;\n }\n\n handleClose();\n },\n [\n handleClose,\n handleOpen,\n isOpen,\n textFieldProps,\n timePickerProps.disabled,\n timePickerProps.readOnly,\n ],\n );\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n setPickerInputDraftValue(selectedInputValue);\n setPickerDraftValue(selectedValue);\n }, [isOpen, selectedInputValue, selectedValue, setPickerInputDraftValue]);\n\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n pickerInputRef.current?.focus();\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n const handleDocumentMouseDown = (event: MouseEvent) => {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n if (rootRef.current?.contains(target) || popperRef.current?.contains(target)) {\n return;\n }\n\n handleClickAwayClose();\n };\n\n document.addEventListener('mousedown', handleDocumentMouseDown, true);\n\n return () => {\n document.removeEventListener('mousedown', handleDocumentMouseDown, true);\n };\n }, [handleClickAwayClose, isOpen]);\n\n const TimePickerInputAdornment = ({ position, children, ...restProps }: InputAdornmentProps) => (\n <InputAdornment position={position} {...restProps}>\n {position === 'end' && canClear && (\n <IconButton\n className=\"clearButton\"\n size=\"small\"\n tabIndex={-1}\n aria-label={resolvedLocaleText.clearButtonLabel}\n disabled={isClearDisabled}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n handleClear();\n }}\n >\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n )}\n {children}\n </InputAdornment>\n );\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale={adapterLocale}>\n <div ref={rootRef}>\n <TimePicker\n {...timePickerProps}\n enableAccessibleFieldDOMStructure={false}\n ampm={useMeridiem}\n open={false}\n closeOnSelect={resolvedCloseOnSelect}\n timeSteps={resolvedTimeSteps}\n label={label}\n value={selectedValue}\n views={timePickerViews}\n format={displayFormat}\n localeText={resolvedLocaleText}\n onChange={handleChange}\n onOpen={handleOpen}\n onClose={handleClose}\n slots={{\n ...slots,\n inputAdornment: TimePickerInputAdornment,\n }}\n slotProps={{\n ...slotProps,\n openPickerButton: {\n ...(typeof slotProps?.openPickerButton === 'function'\n ? undefined\n : slotProps?.openPickerButton),\n size: 'small',\n tabIndex: -1,\n onClick: (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!isOpen) {\n handleOpen();\n }\n },\n sx: {\n margin: 0,\n padding: 0,\n },\n },\n openPickerIcon: {\n ...(typeof slotProps?.openPickerIcon === 'function'\n ? undefined\n : slotProps?.openPickerIcon),\n fontSize: 'small',\n },\n inputAdornment: {\n ...(typeof slotProps?.inputAdornment === 'function'\n ? undefined\n : slotProps?.inputAdornment),\n sx: {\n marginBottom: 0,\n marginLeft: 0,\n gap: 0,\n ...(typeof slotProps?.inputAdornment === 'function'\n ? undefined\n : slotProps?.inputAdornment?.sx),\n },\n },\n textField: {\n variant,\n fullWidth,\n ...textFieldProps,\n className: clsx(\n !fullWidth && (useMeridiem ? 'w-[160px]' : 'w-[140px]'),\n textFieldProps?.className,\n ),\n onMouseDown: handleTextFieldMouseDown,\n onFocus: handleTextFieldFocus,\n onClick: handleTextFieldClick,\n onKeyDown: handleTextFieldKeyDown,\n inputRef: handleTextFieldInputRef,\n placeholder: resolvedPlaceholder,\n sx: resolvedTextFieldSx,\n },\n }}\n />\n <Popper\n open={isOpen}\n anchorEl={rootRef.current}\n placement=\"bottom-end\"\n ref={popperRef}\n modifiers={[\n {\n name: 'offset',\n options: {\n offset: [0, 7],\n },\n },\n ]}\n sx={{ zIndex: (theme) => theme.zIndex.modal }}\n >\n <Paper\n elevation={8}\n onClick={(event) => {\n event.stopPropagation();\n }}\n onKeyDown={(event) => {\n event.stopPropagation();\n }}\n onKeyUp={(event) => {\n event.stopPropagation();\n }}\n onMouseDown={(event) => {\n event.stopPropagation();\n }}\n sx={{\n borderRadius: 1,\n lineHeight: 0,\n overflow: 'hidden',\n width: timePickerEditorWidth,\n }}\n >\n <OwpTextMaskField\n autoFocus\n inputRef={pickerInputRef}\n fullWidth\n size=\"small\"\n variant=\"outlined\"\n value={inputDraftValue}\n error={hasPickerInputCommitError}\n helperText={\n hasPickerInputCommitError ? t(PICKER_INVALID_INPUT_MESSAGE_KEY) : undefined\n }\n mask={getPickerInputMask(normalizedValueFormat)}\n placeholder={normalizedValueFormat}\n onChange={handlePickerInputChange}\n onKeyDown={handlePickerInputKeyDown}\n inputProps={{\n inputMode: 'numeric',\n 'aria-label': normalizedValueFormat,\n }}\n endAdornment={\n <InputAdornment\n position=\"end\"\n sx={{\n marginLeft: 0,\n }}\n >\n <IconButton\n size=\"small\"\n tabIndex={-1}\n aria-label={resolvedLocaleText.clearButtonLabel}\n disabled={!inputDraftValue}\n onClick={handlePickerInputClear}\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 sx={{\n boxSizing: 'border-box',\n width: timePickerEditorWidth,\n px: 1,\n py: 1,\n '& .MuiOutlinedInput-root': {\n borderRadius: 0.75,\n fontSize: 13,\n paddingRight: 0.5,\n },\n }}\n />\n <MultiSectionDigitalClock\n ampm={useMeridiem}\n value={pickerDraftValue}\n views={timePickerViews}\n onChange={(nextValue, _selectionState, selectedView) =>\n handlePickerClockChange(nextValue, selectedView)\n }\n timeSteps={resolvedTimeSteps}\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 </Paper>\n </Popper>\n </div>\n </LocalizationProvider>\n );\n};\n\nexport { OwpTimePicker };\n"],"names":["ensureDayjsBrowserSetup","EMPTY_TIME_SECTION","TIME_PICKER_TEXT_FIELD_SX","isValueEditingKey","__name","event","isTimePickerOpenKey","parseTimePickerInput","value","hasSeconds","normalizedValue","timePattern","match","hour","minute","second","valueText","part","dayjs","VALUE_TIME_SECOND_FORMATTER","VALUE_TIME_FORMATTER","formatTimePickerDisplayInput","assignInputRef","inputRef","OwpTimePicker","label","variant","sx","format","useAmPm","placeholder","disabledClearButton","fullWidth","onChange","textFieldProps","localeText","openProp","onOpen","onClose","slots","slotProps","timePickerProps","normalizedValueFormat","useMeridiem","displayFormat","resolvedCloseOnSelect","resolvedTimeSteps","timePickerViews","useMemo","closeTimePickerSectionIndex","timePickerEditorWidth","TIME_PICKER_EDITOR_SECTION_WIDTH","internalOpen","setInternalOpen","useState","inputDraftValue","setInputDraftValue","hasPickerInputCommitError","setHasPickerInputCommitError","pickerDraftValue","setPickerDraftValue","rootRef","useRef","popperRef","externalInputRef","pickerInputRef","isTextFieldMouseDownRef","skipNextOpenRef","suppressOpenUntilRef","skipNextTextFieldClickRef","t","i18n","useOwpTranslation","adapterLocale","resolvedLocaleText","resolvedPlaceholder","resolvedTextFieldSx","isClearDisabled","canClear","isControlledOpen","isOpen","setPickerInputDraftValue","useCallback","nextValue","selectedValue","parsedInputValue","parsedValue","selectedInputValue","handleChange","nextValueText","commitInputDraftValue","showError","parsedInput","handleOpen","closePicker","handleClose","handleClickAwayClose","closePickerWithoutReopen","focusAdjacentElement","isBackward","rootElement","_a","getAdjacentFocusableElement","focusExternalInput","handleTextFieldInputRef","input","handleClear","handlePickerInputChange","nextInputValue","stopPickerInputKeyboardEvent","handlePickerInputKeyDown","handlePickerInputClear","handlePickerClockChange","selectedView","handleTextFieldMouseDown","handleTextFieldFocus","handleTextFieldClick","handleTextFieldKeyDown","useEffect","animationFrameId","handleDocumentMouseDown","target","_b","jsx","LocalizationProvider","AdapterDayjs","jsxs","TimePicker","position","children","restProps","InputAdornment","IconButton","ClearIcon","clsx","Popper","theme","Paper","OwpTextMaskField","PICKER_INVALID_INPUT_MESSAGE_KEY","getPickerInputMask","MultiSectionDigitalClock","_selectionState","TIME_PICKER_SELECTED_ITEM_SX","TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OwpTimePicker.js","sources":["../../../src/components/OwpPicker/OwpTimePicker.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport ClearIcon from '@mui/icons-material/Clear';\nimport {\n IconButton,\n InputAdornment,\n type InputAdornmentProps,\n Paper,\n Popper,\n type TextFieldProps,\n} from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport {\n LocalizationProvider,\n MultiSectionDigitalClock,\n TimePicker,\n type TimePickerProps,\n} from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport clsx from 'clsx';\nimport dayjs, { type Dayjs } from '@/dayjs';\nimport {\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n PICKER_INVALID_INPUT_MESSAGE_KEY,\n TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH,\n TIME_PICKER_EDITOR_SECTION_WIDTH,\n TIME_PICKER_SELECTED_ITEM_SX,\n VALUE_TIME_FORMATTER,\n VALUE_TIME_SECOND_FORMATTER,\n} from './constants';\nimport { OwpTextMaskField, type OwpTextMaskFieldChangeEvent } from '../OwpTextField';\nimport { getAdjacentFocusableElement, getPickerInputMask } from './utils';\n\nconst EMPTY_TIME_SECTION = '––';\n\nconst TIME_PICKER_TEXT_FIELD_SX = {\n '& .MuiInputBase-root': {\n alignItems: 'center',\n },\n '& .MuiInputAdornment-positionEnd': {\n marginBottom: 0,\n marginLeft: 0,\n gap: 0,\n },\n '& .MuiInputAdornment-positionEnd > :not(style) + :not(style)': {\n marginLeft: 0,\n },\n '& .MuiInputAdornment-positionEnd .MuiIconButton-root': {\n margin: 0,\n padding: 0,\n },\n '& .clearButton': {\n opacity: 1,\n visibility: 'visible',\n },\n '@media (pointer: fine)': {\n '& .clearButton': {\n opacity: 1,\n visibility: 'visible',\n },\n },\n};\n\nexport type OwpTimePickerValue = string | Date | Dayjs;\ntype OwpTimePickerTextFieldClickEvent = Parameters<NonNullable<TextFieldProps['onClick']>>[0];\ntype OwpTimePickerTextFieldFocusEvent = Parameters<NonNullable<TextFieldProps['onFocus']>>[0];\ntype OwpTimePickerTextFieldKeyDownEvent = Parameters<NonNullable<TextFieldProps['onKeyDown']>>[0];\ntype OwpTimePickerTextFieldMouseDownEvent = Parameters<\n NonNullable<TextFieldProps['onMouseDown']>\n>[0];\n\nconst isValueEditingKey = (event: OwpTimePickerTextFieldKeyDownEvent) => {\n if (event.ctrlKey || event.altKey || event.metaKey) {\n return false;\n }\n\n return event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete';\n};\n\nconst isTimePickerOpenKey = (event: OwpTimePickerTextFieldKeyDownEvent) => {\n if (\n event.ctrlKey ||\n event.altKey ||\n event.metaKey ||\n event.key === 'Escape' ||\n event.key === 'Enter' ||\n event.key === 'Tab'\n ) {\n return false;\n }\n\n return event.key.length === 1 || event.key.startsWith('Arrow');\n};\n\n/** TimePicker 입력 값 파싱 */\nconst parseTimePickerInput = (value: string, hasSeconds: boolean) => {\n const normalizedValue = value.trim();\n const timePattern = hasSeconds ? '(\\\\d{2}):(\\\\d{2}):(\\\\d{2})' : '(\\\\d{2}):(\\\\d{2})';\n const match = normalizedValue.match(new RegExp(`^${timePattern}$`));\n\n if (!match) {\n return null;\n }\n\n const hour = Number(match[1]);\n const minute = Number(match[2]);\n const second = hasSeconds ? Number(match[3]) : 0;\n\n if (minute > 59 || second > 59) {\n return null;\n }\n\n if (hour > 24 || (hour === 24 && (minute > 0 || second > 0))) {\n return null;\n }\n\n const valueText = [hour, minute, ...(hasSeconds ? [second] : [])]\n .map((part) => String(part).padStart(2, '0'))\n .join(':');\n\n return {\n dateValue:\n hour === 24\n ? dayjs('00:00:00', VALUE_TIME_SECOND_FORMATTER, true).add(1, 'day')\n : dayjs(valueText, hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER, true),\n valueText,\n };\n};\n\n/** TimePicker 상단 입력 표시 값 */\nconst formatTimePickerDisplayInput = (value: Dayjs, hasSeconds: boolean) =>\n value.format(hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER);\n\n/** input ref 값 할당 */\nconst assignInputRef = (\n inputRef: Ref<HTMLInputElement> | undefined,\n value: HTMLInputElement | null,\n) => {\n if (!inputRef) {\n return;\n }\n\n if (typeof inputRef === 'function') {\n inputRef(value);\n return;\n }\n\n (inputRef as { current: HTMLInputElement | null }).current = value;\n};\n\ninterface OwnProps {\n label?: string;\n variant?: TextFieldProps['variant'];\n sx?: TextFieldProps['sx'];\n value?: OwpTimePickerValue;\n format?: string;\n useAmPm?: boolean;\n placeholder?: string;\n disabledClearButton?: boolean;\n fullWidth?: boolean;\n onChange?: (value?: string) => void;\n slotProps?: TimePickerProps<false>['slotProps'];\n textFieldProps?: Omit<TextFieldProps, 'value' | 'defaultValue' | 'onChange'>;\n}\n\ntype OwpTimePickerProps = OwnProps &\n Omit<\n TimePickerProps<false>,\n | 'value'\n | 'onChange'\n | 'label'\n | 'format'\n | 'ampm'\n | 'slotProps'\n | 'enableAccessibleFieldDOMStructure'\n >;\n\n/**\n * OwpTimePicker 컴포넌트\n * @param label 입력 라벨\n * @param variant variant 값\n * @param sx sx 값\n * @param value 현재 값, clear 버튼 동작 대상 값\n * @param format 시간 포맷\n * @param useAmPm 오전/오후 포맷 사용 여부\n * @param disabledClearButton clear 버튼 비활성화 여부\n * @param fullWidth 전체 너비 사용 여부\n * @param onChange onChange 핸들러, clear 버튼 활성화 조건\n * @param slotProps TimePicker slot props\n * @param textFieldProps TextField props\n */\nconst OwpTimePicker = ({\n label,\n variant = 'standard',\n sx,\n value,\n format = VALUE_TIME_FORMATTER,\n useAmPm,\n placeholder,\n disabledClearButton,\n fullWidth,\n onChange,\n textFieldProps,\n localeText,\n open: openProp,\n onOpen,\n onClose,\n slots,\n slotProps,\n ...timePickerProps\n}: OwpTimePickerProps) => {\n const hasSeconds = /s/i.test(format);\n const normalizedValueFormat = hasSeconds ? VALUE_TIME_SECOND_FORMATTER : VALUE_TIME_FORMATTER;\n const useMeridiem = useAmPm ?? /a/i.test(format);\n const displayFormat = useMeridiem\n ? hasSeconds\n ? 'A hh:mm:ss'\n : 'A hh:mm'\n : normalizedValueFormat;\n const resolvedCloseOnSelect = timePickerProps.closeOnSelect ?? false;\n const resolvedTimeSteps = {\n minutes: 1,\n seconds: 1,\n ...timePickerProps.timeSteps,\n };\n const timePickerViews = useMemo(\n () =>\n hasSeconds ? (['hours', 'minutes', 'seconds'] as const) : (['hours', 'minutes'] as const),\n [hasSeconds],\n );\n const closeTimePickerSectionIndex = timePickerViews.length - 1;\n const timePickerEditorWidth =\n TIME_PICKER_EDITOR_SECTION_WIDTH * (timePickerViews.length + (useMeridiem ? 1 : 0));\n const [internalOpen, setInternalOpen] = useState(false);\n const [inputDraftValue, setInputDraftValue] = useState('');\n const [hasPickerInputCommitError, setHasPickerInputCommitError] = useState(false);\n const [pickerDraftValue, setPickerDraftValue] = useState<Dayjs | null>(null);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const popperRef = useRef<HTMLDivElement | null>(null);\n const externalInputRef = useRef<HTMLInputElement | null>(null);\n const pickerInputRef = useRef<HTMLInputElement | null>(null);\n const isTextFieldMouseDownRef = useRef(false);\n const skipNextOpenRef = useRef(false);\n const suppressOpenUntilRef = useRef(0);\n const skipNextTextFieldClickRef = useRef(false);\n const { t, i18n } = useOwpTranslation();\n const languageId = i18n.resolvedLanguage ?? i18n.language ?? 'kr';\n const adapterLocale = languageId === 'kr' ? 'ko' : 'en';\n const resolvedLocaleText = {\n okButtonLabel: t('Button.확인'),\n clearButtonLabel: t('Button.초기화'),\n fieldHoursPlaceholder: () => EMPTY_TIME_SECTION,\n fieldMinutesPlaceholder: () => EMPTY_TIME_SECTION,\n fieldMeridiemPlaceholder: () => EMPTY_TIME_SECTION,\n ...localeText,\n };\n const resolvedPlaceholder = placeholder ?? (useMeridiem ? '–– ––:––' : '––:––');\n const resolvedTextFieldSx = [TIME_PICKER_TEXT_FIELD_SX, sx, textFieldProps?.sx].filter(\n Boolean,\n ) as SxProps<Theme>;\n const isClearDisabled = Boolean(\n disabledClearButton || timePickerProps.disabled || timePickerProps.readOnly,\n );\n const canClear = Boolean(onChange) && !disabledClearButton;\n const isControlledOpen = openProp !== undefined;\n const isOpen = isControlledOpen ? openProp : internalOpen;\n const setPickerInputDraftValue = useCallback((nextValue: string) => {\n setInputDraftValue(nextValue);\n setHasPickerInputCommitError(false);\n }, []);\n\n const selectedValue = useMemo(() => {\n if (!value) {\n return null;\n }\n\n if (dayjs.isDayjs(value)) {\n return value;\n }\n\n if (typeof value === 'string') {\n const parsedInputValue = parseTimePickerInput(value, hasSeconds);\n\n if (parsedInputValue?.dateValue.isValid()) {\n return parsedInputValue.dateValue;\n }\n\n const parsedValue = dayjs(value, normalizedValueFormat, true);\n return parsedValue.isValid() ? parsedValue : null;\n }\n\n const parsedValue = dayjs(value);\n return parsedValue.isValid() ? parsedValue : null;\n }, [hasSeconds, normalizedValueFormat, value]);\n\n const selectedInputValue = useMemo(() => {\n if (!value) {\n return '';\n }\n\n if (typeof value === 'string') {\n const parsedValue = dayjs(value, normalizedValueFormat, true);\n\n if (parsedValue.isValid()) {\n return formatTimePickerDisplayInput(parsedValue, hasSeconds);\n }\n\n return value;\n }\n\n const parsedValue = dayjs(value);\n return parsedValue.isValid() ? formatTimePickerDisplayInput(parsedValue, hasSeconds) : '';\n }, [hasSeconds, normalizedValueFormat, value]);\n\n const handleChange = (nextValue: Dayjs | null) => {\n const nextValueText = nextValue?.isValid()\n ? nextValue.format(normalizedValueFormat)\n : undefined;\n setPickerInputDraftValue(\n nextValue?.isValid() ? formatTimePickerDisplayInput(nextValue, hasSeconds) : '',\n );\n onChange?.(nextValueText);\n };\n\n const commitInputDraftValue = useCallback(\n (showError?: boolean) => {\n if (!inputDraftValue) {\n setPickerInputDraftValue('');\n onChange?.('');\n\n return true;\n }\n\n const parsedInput = parseTimePickerInput(inputDraftValue, hasSeconds);\n\n if (!parsedInput?.dateValue.isValid()) {\n if (showError && inputDraftValue) {\n setHasPickerInputCommitError(true);\n }\n\n return false;\n }\n\n setPickerInputDraftValue(parsedInput.valueText);\n onChange?.(parsedInput.valueText);\n\n return true;\n },\n [hasSeconds, inputDraftValue, onChange, setPickerInputDraftValue],\n );\n\n const handleOpen = useCallback(() => {\n if (skipNextOpenRef.current || Date.now() < suppressOpenUntilRef.current) {\n skipNextOpenRef.current = false;\n return;\n }\n\n if (!isControlledOpen) {\n setInternalOpen(true);\n }\n\n setPickerInputDraftValue(selectedInputValue);\n setPickerDraftValue(selectedValue);\n onOpen?.();\n }, [isControlledOpen, onOpen, selectedInputValue, selectedValue, setPickerInputDraftValue]);\n\n const closePicker = useCallback(() => {\n if (!isControlledOpen) {\n setInternalOpen(false);\n }\n\n onClose?.();\n }, [isControlledOpen, onClose]);\n\n const handleClose = useCallback(() => {\n commitInputDraftValue();\n closePicker();\n }, [closePicker, commitInputDraftValue]);\n\n const handleClickAwayClose = useCallback(() => {\n suppressOpenUntilRef.current = Date.now() + 200;\n handleClose();\n }, [handleClose]);\n\n const closePickerWithoutReopen = useCallback(() => {\n suppressOpenUntilRef.current = Date.now() + 200;\n closePicker();\n }, [closePicker]);\n\n const focusAdjacentElement = useCallback((isBackward?: boolean) => {\n const rootElement = rootRef.current;\n\n if (!rootElement) {\n return;\n }\n\n window.requestAnimationFrame(() => {\n getAdjacentFocusableElement(rootElement, isBackward)?.focus();\n });\n }, []);\n\n const focusExternalInput = useCallback(() => {\n window.requestAnimationFrame(() => {\n externalInputRef.current?.focus();\n });\n }, []);\n\n const handleTextFieldInputRef = useCallback(\n (input: HTMLInputElement | null) => {\n externalInputRef.current = input;\n assignInputRef(textFieldProps?.inputRef as Ref<HTMLInputElement> | undefined, input);\n },\n [textFieldProps?.inputRef],\n );\n\n const handleClear = () => {\n onChange?.('');\n setPickerInputDraftValue('');\n };\n\n const handlePickerInputChange = useCallback(\n (event: OwpTextMaskFieldChangeEvent) => {\n const nextInputValue = event.target.value;\n const parsedInput = parseTimePickerInput(nextInputValue, hasSeconds);\n\n setPickerInputDraftValue(nextInputValue);\n\n if (parsedInput?.dateValue.isValid()) {\n setPickerDraftValue(parsedInput.dateValue);\n }\n },\n [hasSeconds, setPickerInputDraftValue],\n );\n\n const stopPickerInputKeyboardEvent = useCallback(\n (event: ReactKeyboardEvent<HTMLInputElement>) => {\n event.stopPropagation();\n event.nativeEvent.stopImmediatePropagation();\n },\n [],\n );\n\n const handlePickerInputKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLInputElement>) => {\n stopPickerInputKeyboardEvent(event);\n\n if (event.key === 'Escape') {\n event.preventDefault();\n suppressOpenUntilRef.current = Date.now() + 200;\n setPickerInputDraftValue(selectedInputValue);\n setPickerDraftValue(selectedValue);\n closePicker();\n focusExternalInput();\n return;\n }\n\n if (event.key === 'Tab') {\n event.preventDefault();\n\n if (!commitInputDraftValue(true)) {\n return;\n }\n\n suppressOpenUntilRef.current = Date.now() + 200;\n closePicker();\n focusAdjacentElement(event.shiftKey);\n return;\n }\n\n if (event.key !== 'Enter') {\n return;\n }\n\n event.preventDefault();\n if (commitInputDraftValue(true)) {\n suppressOpenUntilRef.current = Date.now() + 200;\n closePicker();\n focusExternalInput();\n }\n },\n [\n closePicker,\n commitInputDraftValue,\n focusAdjacentElement,\n focusExternalInput,\n selectedInputValue,\n selectedValue,\n setPickerInputDraftValue,\n stopPickerInputKeyboardEvent,\n ],\n );\n\n const handlePickerInputClear = useCallback(\n (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n onChange?.('');\n setPickerInputDraftValue('');\n setPickerDraftValue(null);\n pickerInputRef.current?.focus();\n },\n [onChange, setPickerInputDraftValue],\n );\n\n const handlePickerClockChange = useCallback(\n (nextValue: Dayjs | null, selectedView?: string) => {\n if (!nextValue?.isValid()) {\n return;\n }\n\n const nextValueText = nextValue.format(normalizedValueFormat);\n\n setPickerDraftValue(nextValue);\n setPickerInputDraftValue(nextValueText);\n\n if (selectedView !== timePickerViews[closeTimePickerSectionIndex]) {\n return;\n }\n\n suppressOpenUntilRef.current = Date.now() + 200;\n onChange?.(nextValueText);\n closePickerWithoutReopen();\n focusExternalInput();\n },\n [\n closeTimePickerSectionIndex,\n closePickerWithoutReopen,\n focusExternalInput,\n normalizedValueFormat,\n onChange,\n setPickerInputDraftValue,\n timePickerViews,\n ],\n );\n\n const handleTextFieldMouseDown = useCallback(\n (event: OwpTimePickerTextFieldMouseDownEvent) => {\n textFieldProps?.onMouseDown?.(event);\n isTextFieldMouseDownRef.current = true;\n },\n [textFieldProps],\n );\n\n const handleTextFieldFocus = useCallback(\n (event: OwpTimePickerTextFieldFocusEvent) => {\n textFieldProps?.onFocus?.(event);\n\n if (\n event.defaultPrevented ||\n timePickerProps.disabled ||\n timePickerProps.readOnly ||\n isOpen\n ) {\n return;\n }\n\n skipNextTextFieldClickRef.current = isTextFieldMouseDownRef.current;\n handleOpen();\n },\n [handleOpen, isOpen, textFieldProps, timePickerProps.disabled, timePickerProps.readOnly],\n );\n\n const handleTextFieldClick = useCallback(\n (event: OwpTimePickerTextFieldClickEvent) => {\n textFieldProps?.onClick?.(event);\n\n if (event.defaultPrevented || timePickerProps.disabled || timePickerProps.readOnly) {\n return;\n }\n\n if (skipNextTextFieldClickRef.current) {\n skipNextTextFieldClickRef.current = false;\n isTextFieldMouseDownRef.current = false;\n return;\n }\n\n isTextFieldMouseDownRef.current = false;\n\n if (isOpen) {\n skipNextOpenRef.current = true;\n handleClose();\n queueMicrotask(() => {\n skipNextOpenRef.current = false;\n });\n return;\n }\n\n handleOpen();\n },\n [\n handleClose,\n handleOpen,\n isOpen,\n textFieldProps,\n timePickerProps.disabled,\n timePickerProps.readOnly,\n ],\n );\n\n const handleTextFieldKeyDown = useCallback(\n (event: OwpTimePickerTextFieldKeyDownEvent) => {\n textFieldProps?.onKeyDown?.(event);\n\n if (event.defaultPrevented || timePickerProps.disabled || timePickerProps.readOnly) {\n return;\n }\n\n if (!isOpen && isTimePickerOpenKey(event)) {\n event.preventDefault();\n handleOpen();\n return;\n }\n\n if (!isOpen || !isValueEditingKey(event)) {\n return;\n }\n\n handleClose();\n },\n [\n handleClose,\n handleOpen,\n isOpen,\n textFieldProps,\n timePickerProps.disabled,\n timePickerProps.readOnly,\n ],\n );\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n\n setPickerInputDraftValue(selectedInputValue);\n setPickerDraftValue(selectedValue);\n }, [isOpen, selectedInputValue, selectedValue, setPickerInputDraftValue]);\n\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n pickerInputRef.current?.focus();\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [isOpen]);\n\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n const handleDocumentMouseDown = (event: MouseEvent) => {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n if (rootRef.current?.contains(target) || popperRef.current?.contains(target)) {\n return;\n }\n\n handleClickAwayClose();\n };\n\n document.addEventListener('mousedown', handleDocumentMouseDown, true);\n\n return () => {\n document.removeEventListener('mousedown', handleDocumentMouseDown, true);\n };\n }, [handleClickAwayClose, isOpen]);\n\n const TimePickerInputAdornment = ({ position, children, ...restProps }: InputAdornmentProps) => (\n <InputAdornment position={position} {...restProps}>\n {position === 'end' && canClear && (\n <IconButton\n className=\"clearButton\"\n size=\"small\"\n tabIndex={-1}\n aria-label={resolvedLocaleText.clearButtonLabel}\n disabled={isClearDisabled}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n handleClear();\n }}\n >\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n )}\n {children}\n </InputAdornment>\n );\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs} adapterLocale={adapterLocale}>\n <div ref={rootRef}>\n <TimePicker\n {...timePickerProps}\n enableAccessibleFieldDOMStructure={false}\n ampm={useMeridiem}\n open={false}\n closeOnSelect={resolvedCloseOnSelect}\n timeSteps={resolvedTimeSteps}\n label={label}\n value={selectedValue}\n views={timePickerViews}\n format={displayFormat}\n localeText={resolvedLocaleText}\n onChange={handleChange}\n onOpen={handleOpen}\n onClose={handleClose}\n slots={{\n ...slots,\n inputAdornment: TimePickerInputAdornment,\n }}\n slotProps={{\n ...slotProps,\n openPickerButton: {\n ...(typeof slotProps?.openPickerButton === 'function'\n ? undefined\n : slotProps?.openPickerButton),\n size: 'small',\n tabIndex: -1,\n onClick: (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!isOpen) {\n handleOpen();\n }\n },\n sx: {\n margin: 0,\n padding: 0,\n },\n },\n openPickerIcon: {\n ...(typeof slotProps?.openPickerIcon === 'function'\n ? undefined\n : slotProps?.openPickerIcon),\n fontSize: 'small',\n },\n inputAdornment: {\n ...(typeof slotProps?.inputAdornment === 'function'\n ? undefined\n : slotProps?.inputAdornment),\n sx: {\n marginBottom: 0,\n marginLeft: 0,\n gap: 0,\n ...(typeof slotProps?.inputAdornment === 'function'\n ? undefined\n : slotProps?.inputAdornment?.sx),\n },\n },\n textField: {\n variant,\n fullWidth,\n ...textFieldProps,\n className: clsx(\n !fullWidth && (useMeridiem ? 'w-[160px]' : 'w-[140px]'),\n textFieldProps?.className,\n ),\n onMouseDown: handleTextFieldMouseDown,\n onFocus: handleTextFieldFocus,\n onClick: handleTextFieldClick,\n onKeyDown: handleTextFieldKeyDown,\n inputRef: handleTextFieldInputRef,\n placeholder: resolvedPlaceholder,\n sx: resolvedTextFieldSx,\n },\n }}\n />\n <Popper\n open={isOpen}\n anchorEl={rootRef.current}\n placement=\"bottom-end\"\n ref={popperRef}\n modifiers={[\n {\n name: 'offset',\n options: {\n offset: [0, 7],\n },\n },\n ]}\n sx={{ zIndex: (theme) => theme.zIndex.modal }}\n >\n <Paper\n elevation={8}\n onClick={(event) => {\n event.stopPropagation();\n }}\n onKeyDown={(event) => {\n event.stopPropagation();\n }}\n onKeyUp={(event) => {\n event.stopPropagation();\n }}\n onMouseDown={(event) => {\n event.stopPropagation();\n }}\n sx={{\n borderRadius: 1,\n lineHeight: 0,\n overflow: 'hidden',\n width: timePickerEditorWidth,\n }}\n >\n <OwpTextMaskField\n autoFocus\n inputRef={pickerInputRef}\n fullWidth\n size=\"small\"\n variant=\"outlined\"\n value={inputDraftValue}\n error={hasPickerInputCommitError}\n helperText={\n hasPickerInputCommitError ? t(PICKER_INVALID_INPUT_MESSAGE_KEY) : undefined\n }\n mask={getPickerInputMask(normalizedValueFormat)}\n placeholder={normalizedValueFormat}\n onChange={handlePickerInputChange}\n onKeyDown={handlePickerInputKeyDown}\n inputProps={{\n inputMode: 'numeric',\n 'aria-label': normalizedValueFormat,\n }}\n endAdornment={\n <InputAdornment\n position=\"end\"\n sx={{\n marginLeft: 0,\n }}\n >\n <IconButton\n size=\"small\"\n tabIndex={-1}\n aria-label={resolvedLocaleText.clearButtonLabel}\n disabled={!inputDraftValue}\n onClick={handlePickerInputClear}\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 sx={{\n boxSizing: 'border-box',\n width: timePickerEditorWidth,\n px: 1,\n py: 1,\n '& .MuiOutlinedInput-root': {\n borderRadius: 0.75,\n fontSize: 13,\n paddingRight: 0.5,\n },\n }}\n />\n <MultiSectionDigitalClock\n ampm={useMeridiem}\n value={pickerDraftValue}\n views={timePickerViews}\n onChange={(nextValue, _selectionState, selectedView) =>\n handlePickerClockChange(nextValue, selectedView)\n }\n timeSteps={resolvedTimeSteps}\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 </Paper>\n </Popper>\n </div>\n </LocalizationProvider>\n );\n};\n\nexport { OwpTimePicker };\n"],"names":["EMPTY_TIME_SECTION","TIME_PICKER_TEXT_FIELD_SX","isValueEditingKey","__name","event","isTimePickerOpenKey","parseTimePickerInput","value","hasSeconds","normalizedValue","timePattern","match","hour","minute","second","valueText","part","dayjs","VALUE_TIME_SECOND_FORMATTER","VALUE_TIME_FORMATTER","formatTimePickerDisplayInput","assignInputRef","inputRef","OwpTimePicker","label","variant","sx","format","useAmPm","placeholder","disabledClearButton","fullWidth","onChange","textFieldProps","localeText","openProp","onOpen","onClose","slots","slotProps","timePickerProps","normalizedValueFormat","useMeridiem","displayFormat","resolvedCloseOnSelect","resolvedTimeSteps","timePickerViews","useMemo","closeTimePickerSectionIndex","timePickerEditorWidth","TIME_PICKER_EDITOR_SECTION_WIDTH","internalOpen","setInternalOpen","useState","inputDraftValue","setInputDraftValue","hasPickerInputCommitError","setHasPickerInputCommitError","pickerDraftValue","setPickerDraftValue","rootRef","useRef","popperRef","externalInputRef","pickerInputRef","isTextFieldMouseDownRef","skipNextOpenRef","suppressOpenUntilRef","skipNextTextFieldClickRef","t","i18n","useOwpTranslation","adapterLocale","resolvedLocaleText","resolvedPlaceholder","resolvedTextFieldSx","isClearDisabled","canClear","isControlledOpen","isOpen","setPickerInputDraftValue","useCallback","nextValue","selectedValue","parsedInputValue","parsedValue","selectedInputValue","handleChange","nextValueText","commitInputDraftValue","showError","parsedInput","handleOpen","closePicker","handleClose","handleClickAwayClose","closePickerWithoutReopen","focusAdjacentElement","isBackward","rootElement","_a","getAdjacentFocusableElement","focusExternalInput","handleTextFieldInputRef","input","handleClear","handlePickerInputChange","nextInputValue","stopPickerInputKeyboardEvent","handlePickerInputKeyDown","handlePickerInputClear","handlePickerClockChange","selectedView","handleTextFieldMouseDown","handleTextFieldFocus","handleTextFieldClick","handleTextFieldKeyDown","useEffect","animationFrameId","handleDocumentMouseDown","target","_b","jsx","LocalizationProvider","AdapterDayjs","jsxs","TimePicker","position","children","restProps","InputAdornment","IconButton","ClearIcon","clsx","Popper","theme","Paper","OwpTextMaskField","PICKER_INVALID_INPUT_MESSAGE_KEY","getPickerInputMask","MultiSectionDigitalClock","_selectionState","TIME_PICKER_SELECTED_ITEM_SX","TIME_PICKER_EDITOR_SECTION_ITEM_WIDTH"],"mappings":"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"}
|