@bwg-ui/core 1.1.24 → 1.1.26
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/chunks/AuthContext-BQ3gHLbr.cjs +2 -0
- package/dist/chunks/AuthContext-BQ3gHLbr.cjs.map +1 -0
- package/dist/chunks/{AuthContext-Ei2P-z4d.js → AuthContext-CVizgYxY.js} +14 -10
- package/dist/chunks/AuthContext-CVizgYxY.js.map +1 -0
- package/dist/chunks/{BwgSpace-CnLM4qcg.js → BwgSpace-BPJARdOc.js} +4 -4
- package/dist/chunks/{BwgSpace-CnLM4qcg.js.map → BwgSpace-BPJARdOc.js.map} +1 -1
- package/dist/chunks/BwgSpace-Cw27d-XU.cjs +2 -0
- package/dist/chunks/{BwgSpace-b0hmM1Ht.cjs.map → BwgSpace-Cw27d-XU.cjs.map} +1 -1
- package/dist/chunks/BwgSwitch-BLtVdW44.cjs +2 -0
- package/dist/chunks/BwgSwitch-BLtVdW44.cjs.map +1 -0
- package/dist/chunks/{BwgSwitch-B79pseQM.js → BwgSwitch-DdHo4gYR.js} +66 -66
- package/dist/chunks/BwgSwitch-DdHo4gYR.js.map +1 -0
- package/dist/chunks/{BwgUploader-BcVlE61B.js → BwgUploader-BUmFmeuS.js} +639 -639
- package/dist/chunks/BwgUploader-BUmFmeuS.js.map +1 -0
- package/dist/chunks/BwgUploader-Djhl4lIt.cjs +3 -0
- package/dist/chunks/BwgUploader-Djhl4lIt.cjs.map +1 -0
- package/dist/chunks/LoadingOverlay-Uf6xy04v.js +19 -0
- package/dist/chunks/LoadingOverlay-Uf6xy04v.js.map +1 -0
- package/dist/chunks/LoadingOverlay-jdMzdB-z.cjs +2 -0
- package/dist/chunks/LoadingOverlay-jdMzdB-z.cjs.map +1 -0
- package/dist/chunks/{SSOHandler-CkPcSHIm.js → SSOHandler-CR0nR3rJ.js} +8132 -8085
- package/dist/chunks/SSOHandler-CR0nR3rJ.js.map +1 -0
- package/dist/chunks/{SSOHandler-DiW4Ft9i.cjs → SSOHandler-DQG0Jp4V.cjs} +53 -53
- package/dist/chunks/SSOHandler-DQG0Jp4V.cjs.map +1 -0
- package/dist/chunks/ScreenProtectContext-BMsPPcTX.js +154 -0
- package/dist/chunks/ScreenProtectContext-BMsPPcTX.js.map +1 -0
- package/dist/chunks/ScreenProtectContext-DrCGlcTs.cjs +2 -0
- package/dist/chunks/ScreenProtectContext-DrCGlcTs.cjs.map +1 -0
- package/dist/chunks/SearchBoxContext-DY6lES-W.cjs +2 -0
- package/dist/chunks/SearchBoxContext-DY6lES-W.cjs.map +1 -0
- package/dist/chunks/{SearchBoxContext-BCvEYyFk.js → SearchBoxContext-Dtzo_rJd.js} +25 -27
- package/dist/chunks/SearchBoxContext-Dtzo_rJd.js.map +1 -0
- package/dist/chunks/ViewContainer-BfiTFvLP.cjs +36 -0
- package/dist/chunks/ViewContainer-BfiTFvLP.cjs.map +1 -0
- package/dist/chunks/{ViewContainer-CjpJqoGG.js → ViewContainer-CTl3_56W.js} +128 -116
- package/dist/chunks/ViewContainer-CTl3_56W.js.map +1 -0
- package/dist/chunks/apiUtils-D9Vn1gwZ.cjs +3 -0
- package/dist/chunks/apiUtils-D9Vn1gwZ.cjs.map +1 -0
- package/dist/chunks/{apiUtils-DxzLqPhU.js → apiUtils-DPUgfmKk.js} +57 -48
- package/dist/chunks/apiUtils-DPUgfmKk.js.map +1 -0
- package/dist/chunks/{codeStore-CfI4Wh5M.js → codeStore-BrCfe9K3.js} +2 -2
- package/dist/chunks/{codeStore-CfI4Wh5M.js.map → codeStore-BrCfe9K3.js.map} +1 -1
- package/dist/chunks/{codeStore-il4-kZPe.cjs → codeStore-_b2fDZtD.cjs} +2 -2
- package/dist/chunks/{codeStore-il4-kZPe.cjs.map → codeStore-_b2fDZtD.cjs.map} +1 -1
- package/dist/chunks/{core-bHd8azE6.js → core-BBMCFpHx.js} +2 -2
- package/dist/chunks/{core-bHd8azE6.js.map → core-BBMCFpHx.js.map} +1 -1
- package/dist/chunks/{core-BHejg5iS.cjs → core-CM9MsJRf.cjs} +2 -2
- package/dist/chunks/{core-BHejg5iS.cjs.map → core-CM9MsJRf.cjs.map} +1 -1
- package/dist/chunks/{enc-base64-BQYwLKgk.js → enc-base64-DAsYWbA2.js} +3 -3
- package/dist/chunks/{enc-base64-BQYwLKgk.js.map → enc-base64-DAsYWbA2.js.map} +1 -1
- package/dist/chunks/{enc-base64-BkBtNBQV.cjs → enc-base64-DbK5VBfD.cjs} +2 -2
- package/dist/chunks/{enc-base64-BkBtNBQV.cjs.map → enc-base64-DbK5VBfD.cjs.map} +1 -1
- package/dist/chunks/{favoriteStore-CcKg_nEH.cjs → favoriteStore-BnQ2u-sa.cjs} +2 -2
- package/dist/chunks/{favoriteStore-CcKg_nEH.cjs.map → favoriteStore-BnQ2u-sa.cjs.map} +1 -1
- package/dist/chunks/{favoriteStore-Cemc-26t.js → favoriteStore-SyAjqLG8.js} +2 -2
- package/dist/chunks/{favoriteStore-Cemc-26t.js.map → favoriteStore-SyAjqLG8.js.map} +1 -1
- package/dist/chunks/{popupStore-Bi6o78lP.js → popupStore-BrKcPw7K.js} +2 -2
- package/dist/chunks/{popupStore-Bi6o78lP.js.map → popupStore-BrKcPw7K.js.map} +1 -1
- package/dist/chunks/{popupStore-DUApUBF2.cjs → popupStore-ChbYTqy1.cjs} +2 -2
- package/dist/chunks/{popupStore-DUApUBF2.cjs.map → popupStore-ChbYTqy1.cjs.map} +1 -1
- package/dist/chunks/{sha256-DiIRoCQ8.cjs → sha256-BnWVPP1K.cjs} +2 -2
- package/dist/chunks/{sha256-DiIRoCQ8.cjs.map → sha256-BnWVPP1K.cjs.map} +1 -1
- package/dist/chunks/{sha256-BZfJs28k.js → sha256-D80RpYO2.js} +3 -3
- package/dist/chunks/{sha256-BZfJs28k.js.map → sha256-D80RpYO2.js.map} +1 -1
- package/dist/chunks/{usePopup-BSqsnSz7.js → usePopup-DnfKRiYs.js} +27 -27
- package/dist/chunks/usePopup-DnfKRiYs.js.map +1 -0
- package/dist/chunks/usePopup-Domnpg55.cjs +2 -0
- package/dist/chunks/usePopup-Domnpg55.cjs.map +1 -0
- package/dist/components/common/BookmarkMngModal.d.ts +1 -1
- package/dist/components/common/BookmarkMngModal.d.ts.map +1 -1
- package/dist/components/common/BookmarkPopver.d.ts +2 -2
- package/dist/components/common/BookmarkPopver.d.ts.map +1 -1
- package/dist/components/common/BwgButtonGroup.d.ts +5 -5
- package/dist/components/common/BwgButtonGroup.d.ts.map +1 -1
- package/dist/components/common/BwgCmptArea.d.ts +7 -7
- package/dist/components/common/BwgCmptArea.d.ts.map +1 -1
- package/dist/components/common/BwgCol.d.ts +2 -1
- package/dist/components/common/BwgCol.d.ts.map +1 -1
- package/dist/components/common/BwgConfigProvider.d.ts +2 -2
- package/dist/components/common/BwgConfigProvider.d.ts.map +1 -1
- package/dist/components/common/BwgDetail.d.ts +2 -1
- package/dist/components/common/BwgDetail.d.ts.map +1 -1
- package/dist/components/common/BwgDraggable.d.ts +5 -5
- package/dist/components/common/BwgDraggable.d.ts.map +1 -1
- package/dist/components/common/BwgDrawer.d.ts +2 -1
- package/dist/components/common/BwgDrawer.d.ts.map +1 -1
- package/dist/components/common/BwgEditor.d.ts +5 -5
- package/dist/components/common/BwgEditor.d.ts.map +1 -1
- package/dist/components/common/BwgGrid.d.ts +8 -8
- package/dist/components/common/BwgGrid.d.ts.map +1 -1
- package/dist/components/common/BwgInfoArea.d.ts +4 -4
- package/dist/components/common/BwgInfoArea.d.ts.map +1 -1
- package/dist/components/common/BwgPopup.d.ts +3 -3
- package/dist/components/common/BwgPopup.d.ts.map +1 -1
- package/dist/components/common/BwgRow.d.ts +2 -1
- package/dist/components/common/BwgRow.d.ts.map +1 -1
- package/dist/components/common/BwgTitleBox.d.ts +5 -4
- package/dist/components/common/BwgTitleBox.d.ts.map +1 -1
- package/dist/components/common/BwgView.d.ts +4 -4
- package/dist/components/common/BwgView.d.ts.map +1 -1
- package/dist/components/common/ContentBox.d.ts +3 -3
- package/dist/components/common/ContentBox.d.ts.map +1 -1
- package/dist/components/common/ContentLayOut.d.ts +6 -5
- package/dist/components/common/ContentLayOut.d.ts.map +1 -1
- package/dist/components/common/GlobalConfigProvider.d.ts +2 -2
- package/dist/components/common/GlobalConfigProvider.d.ts.map +1 -1
- package/dist/components/common/QuickServiceToggle.d.ts +4 -4
- package/dist/components/common/QuickServiceToggle.d.ts.map +1 -1
- package/dist/components/common/SSOHandler.d.ts +2 -1
- package/dist/components/common/SSOHandler.d.ts.map +1 -1
- package/dist/components/common/SearchBox.d.ts +5 -4
- package/dist/components/common/SearchBox.d.ts.map +1 -1
- package/dist/components/common/index.cjs +1 -1
- package/dist/components/common/index.js +2 -2
- package/dist/components/core/BwgButton.d.ts +3 -2
- package/dist/components/core/BwgButton.d.ts.map +1 -1
- package/dist/components/core/BwgDatePicker.d.ts +3 -3
- package/dist/components/core/BwgDatePicker.d.ts.map +1 -1
- package/dist/components/core/BwgDownload.d.ts +2 -2
- package/dist/components/core/BwgDownload.d.ts.map +1 -1
- package/dist/components/core/BwgForm.d.ts +2 -1
- package/dist/components/core/BwgForm.d.ts.map +1 -1
- package/dist/components/core/BwgFormItem.d.ts +4 -4
- package/dist/components/core/BwgFormItem.d.ts.map +1 -1
- package/dist/components/core/BwgInput.d.ts +2 -2
- package/dist/components/core/BwgInput.d.ts.map +1 -1
- package/dist/components/core/BwgLargeUploader.d.ts +2 -2
- package/dist/components/core/BwgLargeUploader.d.ts.map +1 -1
- package/dist/components/core/BwgMaskedInput.d.ts +2 -2
- package/dist/components/core/BwgMaskedInput.d.ts.map +1 -1
- package/dist/components/core/BwgMaskedPicker.d.ts +2 -2
- package/dist/components/core/BwgMaskedPicker.d.ts.map +1 -1
- package/dist/components/core/BwgRangePicker.d.ts +3 -3
- package/dist/components/core/BwgRangePicker.d.ts.map +1 -1
- package/dist/components/core/BwgSearch.d.ts +1 -1
- package/dist/components/core/BwgSearch.d.ts.map +1 -1
- package/dist/components/core/BwgUploader.d.ts +2 -2
- package/dist/components/core/BwgUploader.d.ts.map +1 -1
- package/dist/components/core/index.cjs +1 -1
- package/dist/components/core/index.js +2 -2
- package/dist/components/guide/index.cjs +1 -1
- package/dist/components/guide/index.cjs.map +1 -1
- package/dist/components/guide/index.js +3 -3
- package/dist/components/guide/index.js.map +1 -1
- package/dist/components/layout/ErrorBound.d.ts +3 -3
- package/dist/components/layout/ErrorBound.d.ts.map +1 -1
- package/dist/components/layout/LoadingOverlay.d.ts +3 -2
- package/dist/components/layout/LoadingOverlay.d.ts.map +1 -1
- package/dist/components/layout/PrivateProtectedOverlay.d.ts +3 -2
- package/dist/components/layout/PrivateProtectedOverlay.d.ts.map +1 -1
- package/dist/components/layout/ProgressOverlay.d.ts +2 -2
- package/dist/components/layout/ProgressOverlay.d.ts.map +1 -1
- package/dist/components/layout/ViewContainer.d.ts +3 -3
- package/dist/components/layout/ViewContainer.d.ts.map +1 -1
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.js +2 -2
- package/dist/components/popup/MenuReport.d.ts +2 -2
- package/dist/components/popup/MenuReport.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +14 -14
- package/dist/provider/contexts/AuthContext.d.ts +3 -2
- package/dist/provider/contexts/AuthContext.d.ts.map +1 -1
- package/dist/provider/contexts/CommonCodeContext.d.ts +2 -2
- package/dist/provider/contexts/CommonCodeContext.d.ts.map +1 -1
- package/dist/provider/contexts/ScreenProtectContext.d.ts +5 -5
- package/dist/provider/contexts/ScreenProtectContext.d.ts.map +1 -1
- package/dist/provider/contexts/SearchBoxContext.d.ts +3 -3
- package/dist/provider/contexts/SearchBoxContext.d.ts.map +1 -1
- package/dist/provider/contexts/ServiceCodeContext.d.ts +2 -2
- package/dist/provider/contexts/ServiceCodeContext.d.ts.map +1 -1
- package/dist/provider/index.cjs +1 -1
- package/dist/provider/index.js +4 -4
- package/dist/stores/index.cjs +1 -1
- package/dist/stores/index.d.ts.map +1 -1
- package/dist/stores/index.js +6 -6
- package/dist/stores/menuViewStore.d.ts +6 -5
- package/dist/stores/menuViewStore.d.ts.map +1 -1
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.js +2 -2
- package/package.json +2 -3
- package/dist/chunks/AuthContext-CXng9fj0.cjs +0 -2
- package/dist/chunks/AuthContext-CXng9fj0.cjs.map +0 -1
- package/dist/chunks/AuthContext-Ei2P-z4d.js.map +0 -1
- package/dist/chunks/BwgSpace-b0hmM1Ht.cjs +0 -2
- package/dist/chunks/BwgSwitch-B79pseQM.js.map +0 -1
- package/dist/chunks/BwgSwitch-CAI-kEaM.cjs +0 -2
- package/dist/chunks/BwgSwitch-CAI-kEaM.cjs.map +0 -1
- package/dist/chunks/BwgUploader-BcVlE61B.js.map +0 -1
- package/dist/chunks/BwgUploader-DaNV2URT.cjs +0 -3
- package/dist/chunks/BwgUploader-DaNV2URT.cjs.map +0 -1
- package/dist/chunks/LoadingOverlay-DAZJF5wg.js +0 -19
- package/dist/chunks/LoadingOverlay-DAZJF5wg.js.map +0 -1
- package/dist/chunks/LoadingOverlay-DcmKvoZA.cjs +0 -2
- package/dist/chunks/LoadingOverlay-DcmKvoZA.cjs.map +0 -1
- package/dist/chunks/SSOHandler-CkPcSHIm.js.map +0 -1
- package/dist/chunks/SSOHandler-DiW4Ft9i.cjs.map +0 -1
- package/dist/chunks/ScreenProtectContext-3my4PHFa.js +0 -154
- package/dist/chunks/ScreenProtectContext-3my4PHFa.js.map +0 -1
- package/dist/chunks/ScreenProtectContext-CVuXrJm6.cjs +0 -2
- package/dist/chunks/ScreenProtectContext-CVuXrJm6.cjs.map +0 -1
- package/dist/chunks/SearchBoxContext-BCvEYyFk.js.map +0 -1
- package/dist/chunks/SearchBoxContext-DwFDOyYG.cjs +0 -2
- package/dist/chunks/SearchBoxContext-DwFDOyYG.cjs.map +0 -1
- package/dist/chunks/ViewContainer-Bhq22_B3.cjs +0 -36
- package/dist/chunks/ViewContainer-Bhq22_B3.cjs.map +0 -1
- package/dist/chunks/ViewContainer-CjpJqoGG.js.map +0 -1
- package/dist/chunks/apiUtils-BZ6s0_NI.cjs +0 -3
- package/dist/chunks/apiUtils-BZ6s0_NI.cjs.map +0 -1
- package/dist/chunks/apiUtils-DxzLqPhU.js.map +0 -1
- package/dist/chunks/jsx-runtime-CeSfJrVB.cjs +0 -31
- package/dist/chunks/jsx-runtime-CeSfJrVB.cjs.map +0 -1
- package/dist/chunks/jsx-runtime-Dpn_P65e.js +0 -634
- package/dist/chunks/jsx-runtime-Dpn_P65e.js.map +0 -1
- package/dist/chunks/usePopup-BSqsnSz7.js.map +0 -1
- package/dist/chunks/usePopup-D2JEuDrO.cjs +0 -2
- package/dist/chunks/usePopup-D2JEuDrO.cjs.map +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { S as
|
|
3
|
-
import
|
|
4
|
-
import { u as
|
|
5
|
-
import { a7 as
|
|
6
|
-
import { Result as
|
|
7
|
-
import { Outlet as
|
|
8
|
-
import { ReloadOutlined as
|
|
9
|
-
class
|
|
1
|
+
import { jsxs as s, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { S as g, u as E } from "./ScreenProtectContext-BMsPPcTX.js";
|
|
3
|
+
import { Component as S, useRef as y, useState as T, useCallback as F, useEffect as b, memo as I, Suspense as D, createElement as P } from "react";
|
|
4
|
+
import { u as x } from "./AuthContext-CVizgYxY.js";
|
|
5
|
+
import { a7 as B, aH as L } from "./apiUtils-DPUgfmKk.js";
|
|
6
|
+
import { Result as w, Button as v, Spin as R, ConfigProvider as $, Space as z, Typography as N } from "antd";
|
|
7
|
+
import { Outlet as k } from "react-router-dom";
|
|
8
|
+
import { ReloadOutlined as O, CloseOutlined as V, ExclamationCircleTwoTone as j } from "@ant-design/icons";
|
|
9
|
+
class W extends S {
|
|
10
10
|
constructor(r) {
|
|
11
11
|
super(r), this.resetError = () => {
|
|
12
12
|
this.setState({ hasError: !1, error: void 0, errorInfo: void 0 });
|
|
@@ -15,14 +15,14 @@ class V extends C {
|
|
|
15
15
|
static getDerivedStateFromError(r) {
|
|
16
16
|
return { hasError: !0, error: r };
|
|
17
17
|
}
|
|
18
|
-
componentDidCatch(r,
|
|
19
|
-
console.error("ErrorBound caught an error:", r,
|
|
18
|
+
componentDidCatch(r, a) {
|
|
19
|
+
console.error("ErrorBound caught an error:", r, a), this.setState({
|
|
20
20
|
error: r,
|
|
21
|
-
errorInfo:
|
|
21
|
+
errorInfo: a
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
render() {
|
|
25
|
-
return this.state.hasError ? this.props.fallback ? this.props.fallback : /* @__PURE__ */
|
|
25
|
+
return this.state.hasError ? this.props.fallback ? this.props.fallback : /* @__PURE__ */ s(
|
|
26
26
|
"div",
|
|
27
27
|
{
|
|
28
28
|
style: {
|
|
@@ -35,18 +35,18 @@ class V extends C {
|
|
|
35
35
|
alignItems: "center"
|
|
36
36
|
},
|
|
37
37
|
children: [
|
|
38
|
-
/* @__PURE__ */
|
|
39
|
-
|
|
38
|
+
/* @__PURE__ */ t(
|
|
39
|
+
w,
|
|
40
40
|
{
|
|
41
41
|
status: "error",
|
|
42
42
|
title: "컴포넌트 로딩 중 오류가 발생했습니다",
|
|
43
43
|
subTitle: this.state.error ? `오류 내용: ${this.state.error.message}` : "알 수 없는 오류가 발생했습니다",
|
|
44
44
|
extra: [
|
|
45
|
-
/* @__PURE__ */
|
|
46
|
-
|
|
45
|
+
/* @__PURE__ */ t(
|
|
46
|
+
v,
|
|
47
47
|
{
|
|
48
48
|
type: "primary",
|
|
49
|
-
icon: /* @__PURE__ */
|
|
49
|
+
icon: /* @__PURE__ */ t(O, {}),
|
|
50
50
|
onClick: this.resetError,
|
|
51
51
|
style: { marginRight: 8 },
|
|
52
52
|
children: "다시 시도"
|
|
@@ -56,7 +56,7 @@ class V extends C {
|
|
|
56
56
|
]
|
|
57
57
|
}
|
|
58
58
|
),
|
|
59
|
-
this.state.error && /* @__PURE__ */
|
|
59
|
+
this.state.error && /* @__PURE__ */ s(
|
|
60
60
|
"details",
|
|
61
61
|
{
|
|
62
62
|
style: {
|
|
@@ -69,8 +69,8 @@ class V extends C {
|
|
|
69
69
|
border: "1px solid #d9d9d9"
|
|
70
70
|
},
|
|
71
71
|
children: [
|
|
72
|
-
/* @__PURE__ */
|
|
73
|
-
/* @__PURE__ */
|
|
72
|
+
/* @__PURE__ */ t("summary", { style: { cursor: "pointer", fontWeight: "bold" }, children: "오류 상세 정보" }),
|
|
73
|
+
/* @__PURE__ */ t(
|
|
74
74
|
"pre",
|
|
75
75
|
{
|
|
76
76
|
style: {
|
|
@@ -91,43 +91,43 @@ class V extends C {
|
|
|
91
91
|
) : this.props.children;
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
-
const
|
|
94
|
+
const M = (e) => ({
|
|
95
95
|
position: "absolute",
|
|
96
96
|
inset: 0,
|
|
97
|
-
visibility:
|
|
98
|
-
opacity:
|
|
97
|
+
visibility: e ? "visible" : "hidden",
|
|
98
|
+
opacity: e ? 1 : 0,
|
|
99
99
|
transition: "opacity 0.2s ease-in-out",
|
|
100
|
-
pointerEvents:
|
|
101
|
-
}),
|
|
102
|
-
const { lock: r } = E(),
|
|
103
|
-
return
|
|
104
|
-
|
|
105
|
-
}, [
|
|
106
|
-
},
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
}, []),
|
|
110
|
-
return /* @__PURE__ */
|
|
111
|
-
|
|
100
|
+
pointerEvents: e ? "auto" : "none"
|
|
101
|
+
}), _ = ({ once: e = !0 }) => {
|
|
102
|
+
const { lock: r } = E(), a = y(!1);
|
|
103
|
+
return b(() => {
|
|
104
|
+
e && a.current || (a.current = !0, r());
|
|
105
|
+
}, [e, r]), null;
|
|
106
|
+
}, te = ({ isActive: e, flagged: r, tabKey: a, onUnlock: n, children: i }) => {
|
|
107
|
+
const o = y(null), [p, u] = T(!1), l = F((c) => {
|
|
108
|
+
o.current = c, u(!!c);
|
|
109
|
+
}, []), h = M(e);
|
|
110
|
+
return /* @__PURE__ */ t("div", { ref: l, style: h, children: p ? /* @__PURE__ */ s(
|
|
111
|
+
g,
|
|
112
112
|
{
|
|
113
113
|
idleMs: Number.POSITIVE_INFINITY,
|
|
114
114
|
persistLocked: !1,
|
|
115
115
|
overlayScope: "scoped",
|
|
116
116
|
overlayPosition: "absolute",
|
|
117
|
-
eventTarget:
|
|
118
|
-
overlayId: `tab-overlay-${
|
|
119
|
-
onUnlock: async () => (
|
|
117
|
+
eventTarget: o.current,
|
|
118
|
+
overlayId: `tab-overlay-${a}`,
|
|
119
|
+
onUnlock: async () => (n(), !0),
|
|
120
120
|
children: [
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
e && r ? /* @__PURE__ */ t(_, { once: !0 }) : null,
|
|
122
|
+
i
|
|
123
123
|
]
|
|
124
124
|
}
|
|
125
|
-
) :
|
|
126
|
-
},
|
|
127
|
-
function
|
|
128
|
-
if (typeof document > "u" || document.getElementById(
|
|
129
|
-
const
|
|
130
|
-
|
|
125
|
+
) : i });
|
|
126
|
+
}, f = "bwg-dot-line-wave-v4";
|
|
127
|
+
function A() {
|
|
128
|
+
if (typeof document > "u" || document.getElementById(f)) return;
|
|
129
|
+
const e = document.createElement("style");
|
|
130
|
+
e.id = f, e.textContent = `
|
|
131
131
|
.bwg-dotline {
|
|
132
132
|
display: inline-flex;
|
|
133
133
|
align-items: center;
|
|
@@ -161,41 +161,53 @@ function M() {
|
|
|
161
161
|
@media (prefers-reduced-motion: reduce) {
|
|
162
162
|
.bwg-dotline .dot { animation: none; }
|
|
163
163
|
}
|
|
164
|
-
`, document.head.appendChild(
|
|
164
|
+
`, document.head.appendChild(e);
|
|
165
165
|
}
|
|
166
|
-
const
|
|
167
|
-
colors:
|
|
166
|
+
const U = ({
|
|
167
|
+
colors: e = ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
|
|
168
168
|
count: r,
|
|
169
|
-
size:
|
|
170
|
-
gap:
|
|
171
|
-
amp:
|
|
172
|
-
speedMs:
|
|
173
|
-
direction:
|
|
174
|
-
phase:
|
|
169
|
+
size: a = 12,
|
|
170
|
+
gap: n = 10,
|
|
171
|
+
amp: i = 16,
|
|
172
|
+
speedMs: o = 900,
|
|
173
|
+
direction: p = "ltr",
|
|
174
|
+
phase: u = 0.7
|
|
175
175
|
}) => {
|
|
176
|
-
|
|
177
|
-
|
|
176
|
+
b(() => {
|
|
177
|
+
A();
|
|
178
178
|
}, []);
|
|
179
|
-
const
|
|
180
|
-
"--bwg-size": `${
|
|
181
|
-
"--bwg-gap": `${
|
|
182
|
-
"--bwg-amp": `${
|
|
183
|
-
"--bwg-speed": `${
|
|
184
|
-
},
|
|
185
|
-
return /* @__PURE__ */
|
|
179
|
+
const l = r ?? e.length, h = Array.from({ length: l }), c = {
|
|
180
|
+
"--bwg-size": `${a}px`,
|
|
181
|
+
"--bwg-gap": `${n}px`,
|
|
182
|
+
"--bwg-amp": `${i}px`,
|
|
183
|
+
"--bwg-speed": `${o}ms`
|
|
184
|
+
}, m = o / l * u;
|
|
185
|
+
return /* @__PURE__ */ t(
|
|
186
186
|
"span",
|
|
187
187
|
{
|
|
188
|
-
className: "
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
188
|
+
className: "bwg-dotline",
|
|
189
|
+
role: "img",
|
|
190
|
+
"aria-label": "loading",
|
|
191
|
+
style: c,
|
|
192
|
+
children: h.map((H, d) => /* @__PURE__ */ t(
|
|
193
|
+
"span",
|
|
194
|
+
{
|
|
195
|
+
className: "dot",
|
|
196
|
+
style: {
|
|
197
|
+
backgroundColor: e[d % e.length],
|
|
198
|
+
animationDelay: p === "ltr" ? `${d * m}ms` : `${(l - 1 - d) * m}ms`
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
d
|
|
202
|
+
))
|
|
203
|
+
}
|
|
204
|
+
);
|
|
205
|
+
}, C = ({
|
|
206
|
+
spin: e = null,
|
|
207
|
+
text: r = "인증중..."
|
|
208
|
+
}) => {
|
|
209
|
+
const { busy: a } = x();
|
|
210
|
+
return e ?? a ? /* @__PURE__ */ s(
|
|
199
211
|
"div",
|
|
200
212
|
{
|
|
201
213
|
style: {
|
|
@@ -218,11 +230,11 @@ const A = ({
|
|
|
218
230
|
"aria-busy": "true",
|
|
219
231
|
role: "status",
|
|
220
232
|
children: [
|
|
221
|
-
/* @__PURE__ */
|
|
233
|
+
/* @__PURE__ */ t(
|
|
222
234
|
R,
|
|
223
235
|
{
|
|
224
|
-
indicator: /* @__PURE__ */
|
|
225
|
-
|
|
236
|
+
indicator: /* @__PURE__ */ t(
|
|
237
|
+
U,
|
|
226
238
|
{
|
|
227
239
|
colors: ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
|
|
228
240
|
size: 12,
|
|
@@ -235,28 +247,28 @@ const A = ({
|
|
|
235
247
|
)
|
|
236
248
|
}
|
|
237
249
|
),
|
|
238
|
-
/* @__PURE__ */
|
|
250
|
+
/* @__PURE__ */ t("span", { className: "bwg-spin-txt", style: { marginTop: "15px" }, children: r })
|
|
239
251
|
]
|
|
240
252
|
}
|
|
241
253
|
) : null;
|
|
242
|
-
},
|
|
243
|
-
const { reauthWithPin:
|
|
244
|
-
return /* @__PURE__ */
|
|
245
|
-
/* @__PURE__ */
|
|
246
|
-
/* @__PURE__ */
|
|
254
|
+
}, re = () => {
|
|
255
|
+
const { reauthWithPin: e } = x();
|
|
256
|
+
return /* @__PURE__ */ t(g, { idleMs: 30 * 6e4, onUnlock: async (r) => B ? !0 : !!r && await e(r), children: /* @__PURE__ */ t($, { getPopupContainer: () => document.getElementById("app-shell") || document.body, children: /* @__PURE__ */ s("div", { id: "app-shell", children: [
|
|
257
|
+
/* @__PURE__ */ t(C, {}),
|
|
258
|
+
/* @__PURE__ */ t(k, {})
|
|
247
259
|
] }) }) });
|
|
248
|
-
},
|
|
249
|
-
/* @__PURE__ */
|
|
250
|
-
/* @__PURE__ */
|
|
251
|
-
] }),
|
|
252
|
-
isActive:
|
|
260
|
+
}, ae = () => /* @__PURE__ */ s("div", { children: [
|
|
261
|
+
/* @__PURE__ */ t(C, {}),
|
|
262
|
+
/* @__PURE__ */ t(k, {})
|
|
263
|
+
] }), Y = ({
|
|
264
|
+
isActive: e,
|
|
253
265
|
instance: r,
|
|
254
|
-
params:
|
|
266
|
+
params: a
|
|
255
267
|
}) => {
|
|
256
|
-
const { activeMenuId:
|
|
257
|
-
|
|
268
|
+
const { activeMenuId: n, closeTab: i } = L(), o = () => {
|
|
269
|
+
n && i(n);
|
|
258
270
|
};
|
|
259
|
-
return r ? /* @__PURE__ */
|
|
271
|
+
return r ? /* @__PURE__ */ t(
|
|
260
272
|
"div",
|
|
261
273
|
{
|
|
262
274
|
style: {
|
|
@@ -265,14 +277,14 @@ const A = ({
|
|
|
265
277
|
left: 0,
|
|
266
278
|
width: "100%",
|
|
267
279
|
height: "100%",
|
|
268
|
-
visibility:
|
|
269
|
-
opacity:
|
|
280
|
+
visibility: e ? "visible" : "hidden",
|
|
281
|
+
opacity: e ? 1 : 0,
|
|
270
282
|
transition: "opacity 0.2s ease-in-out",
|
|
271
|
-
pointerEvents:
|
|
283
|
+
pointerEvents: e ? "auto" : "none"
|
|
272
284
|
},
|
|
273
|
-
children: /* @__PURE__ */
|
|
285
|
+
children: /* @__PURE__ */ t(W, { children: /* @__PURE__ */ t(D, { fallback: null, children: r && P(r, { params: a }) }) })
|
|
274
286
|
}
|
|
275
|
-
) : /* @__PURE__ */
|
|
287
|
+
) : /* @__PURE__ */ t(
|
|
276
288
|
"div",
|
|
277
289
|
{
|
|
278
290
|
style: {
|
|
@@ -284,12 +296,12 @@ const A = ({
|
|
|
284
296
|
display: "flex",
|
|
285
297
|
justifyContent: "center",
|
|
286
298
|
alignItems: "center",
|
|
287
|
-
visibility:
|
|
288
|
-
opacity:
|
|
299
|
+
visibility: e ? "visible" : "hidden",
|
|
300
|
+
opacity: e ? 1 : 0,
|
|
289
301
|
transition: "opacity 0.2s ease-in-out",
|
|
290
|
-
pointerEvents:
|
|
302
|
+
pointerEvents: e ? "auto" : "none"
|
|
291
303
|
},
|
|
292
|
-
children: /* @__PURE__ */
|
|
304
|
+
children: /* @__PURE__ */ t(
|
|
293
305
|
"div",
|
|
294
306
|
{
|
|
295
307
|
style: {
|
|
@@ -300,27 +312,27 @@ const A = ({
|
|
|
300
312
|
boxShadow: "0 8px 30px rgba(0,0,0,0.05)",
|
|
301
313
|
padding: 24
|
|
302
314
|
},
|
|
303
|
-
children: /* @__PURE__ */
|
|
304
|
-
|
|
315
|
+
children: /* @__PURE__ */ t(
|
|
316
|
+
w,
|
|
305
317
|
{
|
|
306
|
-
icon: /* @__PURE__ */
|
|
318
|
+
icon: /* @__PURE__ */ t(j, { twoToneColor: "#69b1ff" }),
|
|
307
319
|
status: "warning",
|
|
308
320
|
title: "등록된 메뉴 정보가 없거나 유효한 메뉴가 아닙니다.",
|
|
309
|
-
subTitle: /* @__PURE__ */
|
|
310
|
-
extra: /* @__PURE__ */
|
|
321
|
+
subTitle: /* @__PURE__ */ t(N.Text, { type: "secondary", children: "자세한 내용은 관리자에게 문의바랍니다." }),
|
|
322
|
+
extra: /* @__PURE__ */ t(z, { children: /* @__PURE__ */ t(v, { icon: /* @__PURE__ */ t(V, {}), onClick: o, children: "탭 닫기" }) })
|
|
311
323
|
}
|
|
312
324
|
)
|
|
313
325
|
}
|
|
314
326
|
)
|
|
315
327
|
}
|
|
316
328
|
);
|
|
317
|
-
},
|
|
329
|
+
}, ne = I(Y);
|
|
318
330
|
export {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
331
|
+
W as E,
|
|
332
|
+
te as P,
|
|
333
|
+
ne as V,
|
|
334
|
+
C as a,
|
|
335
|
+
re as b,
|
|
336
|
+
ae as c
|
|
325
337
|
};
|
|
326
|
-
//# sourceMappingURL=ViewContainer-
|
|
338
|
+
//# sourceMappingURL=ViewContainer-CTl3_56W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewContainer-CTl3_56W.js","sources":["../../src/components/layout/ErrorBound.tsx","../../src/components/layout/PrivateProtectedOverlay.tsx","../../src/components/layout/ProgressOverlay.tsx","../../src/components/layout/ProtectLayout.tsx","../../src/components/layout/PublicLayout.tsx","../../src/components/layout/ViewContainer.tsx"],"sourcesContent":["import { HomeOutlined, ReloadOutlined } from '@ant-design/icons';\r\nimport { Button, Result } from 'antd';\r\nimport {\r\n Component,\r\n ErrorInfo,\r\n FC,\r\n ReactNode,\r\n useCallback,\r\n useState,\r\n} from 'react';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\ninterface Props {\r\n children: ReactNode;\r\n fallback?: ReactNode;\r\n}\r\n\r\ninterface State {\r\n hasError: boolean;\r\n error?: Error;\r\n errorInfo?: ErrorInfo;\r\n}\r\n\r\n// 에러 페이지 컴포넌트\r\nexport const ErrorPage: FC<{\r\n error?: Error;\r\n resetError?: () => void;\r\n onGoHome?: () => void;\r\n}> = ({ error, resetError, onGoHome }) => {\r\n const navigate = useNavigate();\r\n\r\n const handleGoHome = () => {\r\n if (onGoHome) {\r\n onGoHome();\r\n } else {\r\n // 기본 홈 이동 로직\r\n navigate('/');\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n style={{\r\n padding: '40px 20px',\r\n textAlign: 'center',\r\n backgroundColor: '#fafafa',\r\n minHeight: '400px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <Result\r\n status='error'\r\n title='컴포넌트 로딩 중 오류가 발생했습니다'\r\n subTitle={\r\n error\r\n ? `오류 내용: ${error.message}`\r\n : '알 수 없는 오류가 발생했습니다'\r\n }\r\n extra={[\r\n <Button\r\n key='retry'\r\n type='primary'\r\n icon={<ReloadOutlined />}\r\n onClick={resetError}\r\n style={{ marginRight: 8 }}\r\n >\r\n 다시 시도\r\n </Button>,\r\n <Button key='home' icon={<HomeOutlined />} onClick={handleGoHome}>\r\n 홈으로\r\n </Button>,\r\n ]}\r\n />\r\n {error && (\r\n <details\r\n style={{\r\n marginTop: '20px',\r\n textAlign: 'left',\r\n maxWidth: '600px',\r\n backgroundColor: '#fff',\r\n padding: '16px',\r\n borderRadius: '6px',\r\n border: '1px solid #d9d9d9',\r\n }}\r\n >\r\n <summary style={{ cursor: 'pointer', fontWeight: 'bold' }}>\r\n 오류 상세 정보\r\n </summary>\r\n <pre\r\n style={{\r\n marginTop: '8px',\r\n fontSize: '12px',\r\n color: '#666',\r\n whiteSpace: 'pre-wrap',\r\n wordBreak: 'break-word',\r\n }}\r\n >\r\n {error.stack}\r\n </pre>\r\n </details>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// 에러 경계 클래스 컴포넌트\r\nexport class ErrorBound extends Component<Props, State> {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError(error: Error): State {\r\n return { hasError: true, error };\r\n }\r\n\r\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\r\n console.error('ErrorBound caught an error:', error, errorInfo);\r\n this.setState({\r\n error,\r\n errorInfo,\r\n });\r\n }\r\n\r\n resetError = () => {\r\n this.setState({ hasError: false, error: undefined, errorInfo: undefined });\r\n };\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n if (this.props.fallback) {\r\n return this.props.fallback;\r\n }\r\n\r\n return (\r\n <div\r\n style={{\r\n padding: '40px 20px',\r\n textAlign: 'center',\r\n backgroundColor: '#fafafa',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <Result\r\n status='error'\r\n title='컴포넌트 로딩 중 오류가 발생했습니다'\r\n subTitle={\r\n this.state.error\r\n ? `오류 내용: ${this.state.error.message}`\r\n : '알 수 없는 오류가 발생했습니다'\r\n }\r\n extra={[\r\n <Button\r\n key='retry'\r\n type='primary'\r\n icon={<ReloadOutlined />}\r\n onClick={this.resetError}\r\n style={{ marginRight: 8 }}\r\n >\r\n 다시 시도\r\n </Button>,\r\n ]}\r\n />\r\n {this.state.error && (\r\n <details\r\n style={{\r\n marginTop: '20px',\r\n textAlign: 'left',\r\n maxWidth: '600px',\r\n backgroundColor: '#fff',\r\n padding: '16px',\r\n borderRadius: '6px',\r\n border: '1px solid #d9d9d9',\r\n }}\r\n >\r\n <summary style={{ cursor: 'pointer', fontWeight: 'bold' }}>\r\n 오류 상세 정보\r\n </summary>\r\n <pre\r\n style={{\r\n marginTop: '8px',\r\n fontSize: '12px',\r\n color: '#666',\r\n whiteSpace: 'pre-wrap',\r\n wordBreak: 'break-word',\r\n }}\r\n >\r\n {this.state.error.stack}\r\n </pre>\r\n </details>\r\n )}\r\n </div>\r\n );\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}\r\n\r\n// 함수형 컴포넌트용 에러 경계 훅\r\nexport const useErrorHandler = () => {\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n const handleError = useCallback((error: Error) => {\r\n console.error('useErrorHandler caught an error:', error);\r\n setError(error);\r\n }, []);\r\n\r\n const resetError = useCallback(() => {\r\n setError(null);\r\n }, []);\r\n\r\n return { error, handleError, resetError };\r\n};\r\n","import {\r\n ScreenProtectProvider,\r\n useLock,\r\n} from '@/provider/contexts/ScreenProtectContext';\r\nimport {\r\n FC,\r\n MutableRefObject,\r\n ReactNode,\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from 'react';\r\n\r\n// ──────────────────────────────────────────────\r\n// 공통 스타일 유틸\r\n// ──────────────────────────────────────────────\r\nconst createTabStyle = (isActive: boolean) => ({\r\n position: 'absolute' as const,\r\n inset: 0,\r\n visibility: isActive ? ('visible' as const) : ('hidden' as const),\r\n opacity: isActive ? 1 : 0,\r\n transition: 'opacity 0.2s ease-in-out',\r\n pointerEvents: isActive ? ('auto' as const) : ('none' as const),\r\n});\r\n\r\n// ──────────────────────────────────────────────\r\n// AutoLock (활성 탭일 때 잠금 트리거)\r\n// ──────────────────────────────────────────────\r\nconst AutoLock: FC<{ once?: boolean }> = ({ once = true }) => {\r\n const { lock } = useLock();\r\n const called = useRef(false);\r\n useEffect(() => {\r\n if (once && called.current) return;\r\n called.current = true;\r\n lock();\r\n }, [once, lock]);\r\n return null;\r\n};\r\n\r\n// ──────────────────────────────────────────────\r\n// PrivateProtectedOverlay (개인정보 포함 화면 보호레이어)\r\n// ──────────────────────────────────────────────\r\nconst PrivateProtectedOverlay: FC<{\r\n isActive: boolean;\r\n flagged: boolean;\r\n tabKey: string;\r\n onUnlock: () => void;\r\n children: ReactNode;\r\n}> = ({ isActive, flagged, tabKey, onUnlock, children }) => {\r\n const shellRef = useRef<HTMLDivElement>(null);\r\n const [ready, setReady] = useState(false);\r\n\r\n const setShellRef = useCallback((el: HTMLDivElement | null) => {\r\n (shellRef as MutableRefObject<HTMLDivElement | null>).current = el;\r\n setReady(!!el);\r\n }, []);\r\n\r\n const shellStyle = createTabStyle(isActive);\r\n\r\n return (\r\n <div ref={setShellRef} style={shellStyle}>\r\n {ready ? (\r\n <ScreenProtectProvider\r\n idleMs={Number.POSITIVE_INFINITY}\r\n persistLocked={false}\r\n overlayScope='scoped'\r\n overlayPosition='absolute'\r\n eventTarget={shellRef.current!}\r\n overlayId={`tab-overlay-${tabKey}`}\r\n onUnlock={async () => {\r\n onUnlock();\r\n return true;\r\n }}\r\n >\r\n {isActive && flagged ? <AutoLock once /> : null}\r\n {children}\r\n </ScreenProtectProvider>\r\n ) : (\r\n children\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PrivateProtectedOverlay;\r\n","import { useAuth } from \"@/provider/contexts/AuthContext\";\r\nimport { Spin } from \"antd\";\r\nimport { CSSProperties, FC, useEffect } from 'react';\r\n\r\nconst DOTLINE_STYLE_ID = 'bwg-dot-line-wave-v4';\r\nfunction ensureDotLineWaveStylesV4() {\r\n if (typeof document === 'undefined') return;\r\n if (document.getElementById(DOTLINE_STYLE_ID)) return;\r\n\r\n const style = document.createElement('style');\r\n style.id = DOTLINE_STYLE_ID;\r\n style.textContent = `\r\n .bwg-dotline {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--bwg-gap, 12px);\r\n height: calc(var(--bwg-size, 12px) + 2 * var(--bwg-amp, 12px));\r\n line-height: 0;\r\n }\r\n .bwg-dotline .dot {\r\n width: var(--bwg-size, 12px);\r\n height: var(--bwg-size, 12px);\r\n border-radius: 50%;\r\n background: currentColor;\r\n will-change: transform, opacity;\r\n filter: drop-shadow(0 1px 2px rgba(0,0,0,.12));\r\n animation: bwg-dotline-sine var(--bwg-speed, 780ms) linear infinite;\r\n }\r\n\r\n /* sin(θ) 근사: 0, 45, 90, 135, 180, 225, 270, 315, 360deg */\r\n @keyframes bwg-dotline-sine {\r\n 0% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n 12.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }\r\n 25% { transform: translate3d(0, calc(-1 * var(--bwg-amp, 12px)), 0) scale(1.06); opacity: 1; }\r\n 37.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }\r\n 50% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n 62.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }\r\n 75% { transform: translate3d(0, calc( 1 * var(--bwg-amp, 12px)), 0) scale(.96); opacity: .76; }\r\n 87.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }\r\n 100% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n }\r\n\r\n @media (prefers-reduced-motion: reduce) {\r\n .bwg-dotline .dot { animation: none; }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n}\r\n\r\n/* 직선 도트 파동 인디케이터 */\r\nconst DotLineSmoothIndicator: FC<{\r\n colors?: string[]; // 각 점 색\r\n count?: number; // 점 개수 (기본: colors 길이)\r\n size?: number; // 점 지름\r\n gap?: number; // 점 간격\r\n amp?: number; // 진폭(px)\r\n speedMs?: number; // 한 주기(ms)\r\n direction?: 'ltr' | 'rtl'; // 파동 진행 방향\r\n phase?: number; // 점 간 지연 비율(0~1) — 낮출수록 부드러움\r\n}> = ({\r\n colors = ['#DAD3FF', '#B3A6FF', '#9380FF', '#816BFA'],\r\n count,\r\n size = 12,\r\n gap = 10,\r\n amp = 16,\r\n speedMs = 900,\r\n direction = 'ltr',\r\n phase = 0.7,\r\n}) => {\r\n useEffect(() => {\r\n ensureDotLineWaveStylesV4();\r\n }, []);\r\n\r\n const n = count ?? colors.length;\r\n const dots = Array.from({ length: n });\r\n const baseStyle = {\r\n ['--bwg-size' as any]: `${size}px`,\r\n ['--bwg-gap' as any]: `${gap}px`,\r\n ['--bwg-amp' as any]: `${amp}px`,\r\n ['--bwg-speed' as any]: `${speedMs}ms`,\r\n } as CSSProperties;\r\n\r\n const perDotDelay = (speedMs / n) * phase;\r\n\r\n return (\r\n <span\r\n className='bwg-dotline'\r\n role='img'\r\n aria-label='loading'\r\n style={baseStyle}\r\n >\r\n {dots.map((_, i) => (\r\n <span\r\n key={i}\r\n className='dot'\r\n style={{\r\n backgroundColor: colors[i % colors.length],\r\n animationDelay:\r\n direction === 'ltr'\r\n ? `${i * perDotDelay}ms`\r\n : `${(n - 1 - i) * perDotDelay}ms`,\r\n }}\r\n />\r\n ))}\r\n </span>\r\n );\r\n};\r\n\r\n/**\r\n * 진행 중 표시\r\n * @returns ProgressOverlay\r\n */\r\nconst ProgressOverlay: FC<{ spin?: boolean | null; text?: string }> = ({\r\n spin = null,\r\n text = '인증중...',\r\n}) => {\r\n const { busy } = useAuth();\r\n const show = spin ?? busy;\r\n if (!show) return null;\r\n return (\r\n <div\r\n style={{\r\n position: 'fixed',\r\n height: '100vh',\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n gap: 8,\r\n padding: '8px 12px',\r\n background: 'rgba(0,0,0,0.6)',\r\n color: '#fff',\r\n zIndex: 10000,\r\n }}\r\n aria-live='polite'\r\n aria-busy='true'\r\n role='status'\r\n >\r\n <Spin\r\n indicator={\r\n <DotLineSmoothIndicator\r\n colors={['#DAD3FF', '#B3A6FF', '#9380FF', '#816BFA']}\r\n size={12}\r\n gap={10}\r\n amp={16}\r\n speedMs={900}\r\n phase={0.75}\r\n direction='ltr'\r\n />\r\n }\r\n />\r\n <span className='bwg-spin-txt' style={{ marginTop: '15px' }}>\r\n {text}\r\n </span>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ProgressOverlay;","import { useAuth } from \"@/provider/contexts/AuthContext\";\r\nimport { ScreenProtectProvider } from \"@/provider/contexts/ScreenProtectContext\";\r\nimport { isLocal } from \"@/utils/envUtils\";\r\nimport { ConfigProvider } from \"antd\";\r\nimport { Outlet } from \"react-router-dom\";\r\nimport ProgressOverlay from \"./ProgressOverlay\";\r\n\r\n/**\r\n * 보호 레이아웃\r\n * @returns ProtectedLayout\r\n */\r\nconst ProtectedLayout = () => {\r\n const { reauthWithPin } = useAuth();\r\n // NOTE: 인증 여부 체크는 각 페이지(/main)의 스토어 가드에 위임합니다.\r\n // 필요하다면 여기서도 RequireAuth로 감싸세요.\r\n return (\r\n <ScreenProtectProvider idleMs={30 * 60_000} onUnlock={async (pin) => {\r\n if(isLocal) {\r\n // 로컬에서는 항상 true\r\n return true;\r\n }\r\n return !!pin && (await reauthWithPin(pin));\r\n }}>\r\n {/* Ensure AntD portals mount inside protected shell if you need it */}\r\n <ConfigProvider getPopupContainer={() => document.getElementById(\"app-shell\") || document.body}>\r\n <div id=\"app-shell\">\r\n <ProgressOverlay />\r\n <Outlet />\r\n </div>\r\n </ConfigProvider>\r\n </ScreenProtectProvider>\r\n );\r\n }\r\n\r\n export default ProtectedLayout;","import { Outlet } from \"react-router-dom\";\r\nimport ProgressOverlay from \"./ProgressOverlay\";\r\n\r\n/**\r\n * 공개 레이아웃\r\n * @returns PublicLayout\r\n */\r\nconst PublicLayout = () => {\r\n return (\r\n <div>\r\n <ProgressOverlay />\r\n <Outlet />\r\n </div>\r\n );\r\n}\r\n\r\nexport default PublicLayout;","import { CloseOutlined, ExclamationCircleTwoTone } from \"@ant-design/icons\";\r\nimport { Button, Result, Space, Typography } from \"antd\";\r\nimport { ComponentType, createElement, memo, Suspense } from 'react';\r\nimport { useMenuViewStore } from '../../stores/menuViewStore';\r\nimport { ErrorBound } from './ErrorBound';\r\n\r\nconst ViewContainer = ({\r\n isActive,\r\n instance,\r\n params,\r\n}: {\r\n isActive: boolean;\r\n instance?: ComponentType;\r\n params?: Record<string, any>;\r\n}) => {\r\n const { activeMenuId, closeTab } = useMenuViewStore();\r\n\r\n // 현재 활성 탭 닫기 핸들러\r\n const onClose = () => {\r\n if (activeMenuId) {\r\n closeTab(activeMenuId);\r\n }\r\n };\r\n\r\n if (instance) {\r\n return (\r\n <div\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n visibility: isActive ? 'visible' : 'hidden',\r\n opacity: isActive ? 1 : 0,\r\n transition: 'opacity 0.2s ease-in-out',\r\n pointerEvents: isActive ? 'auto' : 'none',\r\n }}\r\n >\r\n <ErrorBound>\r\n <Suspense fallback={null}>\r\n {instance && createElement(instance, { params } as any)}\r\n </Suspense>\r\n </ErrorBound>\r\n </div>\r\n );\r\n } else {\r\n return (\r\n <div\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n visibility: isActive ? 'visible' : 'hidden',\r\n opacity: isActive ? 1 : 0,\r\n transition: 'opacity 0.2s ease-in-out',\r\n pointerEvents: isActive ? 'auto' : 'none',\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: 500,\r\n maxWidth: '90%',\r\n background: '#fff',\r\n borderRadius: 16,\r\n boxShadow: '0 8px 30px rgba(0,0,0,0.05)',\r\n padding: 24,\r\n }}\r\n >\r\n <Result\r\n icon={<ExclamationCircleTwoTone twoToneColor='#69b1ff' />}\r\n status='warning'\r\n title='등록된 메뉴 정보가 없거나 유효한 메뉴가 아닙니다.'\r\n subTitle={\r\n <Typography.Text type='secondary'>\r\n 자세한 내용은 관리자에게 문의바랍니다.\r\n </Typography.Text>\r\n }\r\n extra={\r\n <Space>\r\n <Button icon={<CloseOutlined />} onClick={onClose}>\r\n 탭 닫기\r\n </Button>\r\n </Space>\r\n }\r\n />\r\n </div>\r\n </div>\r\n );\r\n }\r\n};\r\n\r\nexport default memo(ViewContainer);"],"names":["ErrorBound","Component","props","error","errorInfo","jsxs","jsx","Result","Button","ReloadOutlined","createTabStyle","isActive","AutoLock","once","lock","useLock","called","useRef","useEffect","PrivateProtectedOverlay","flagged","tabKey","onUnlock","children","shellRef","ready","setReady","useState","setShellRef","useCallback","el","shellStyle","ScreenProtectProvider","DOTLINE_STYLE_ID","ensureDotLineWaveStylesV4","style","DotLineSmoothIndicator","colors","count","size","gap","amp","speedMs","direction","phase","n","dots","baseStyle","perDotDelay","_","i","ProgressOverlay","spin","text","busy","useAuth","Spin","ProtectedLayout","reauthWithPin","pin","isLocal","ConfigProvider","Outlet","PublicLayout","ViewContainer","instance","params","activeMenuId","closeTab","useMenuViewStore","onClose","Suspense","createElement","ExclamationCircleTwoTone","Typography","Space","CloseOutlined","ViewContainer$1","memo"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";const ce=require("axios"),L=require("dayjs"),x=require("antd"),R=require("zustand"),be={AUTH_BTNS:"SCMSIGN00202",AUTH_MENU:"SCMSIGN00201",SRCH_CODE:"SCMSIGN00301",SRCH_POPU:"SCMPOPU00101",AUTH_BMRK:"SCMBMRK00101"};let Y={};function De(e){Y=e,console.log("🔧 Provider 서비스코드 오버라이드 설정:",e)}function V(e){return Y[e]&&Y[e].trim()!==""?Y[e]:be[e]}function ue(){const e={};for(const r of Object.keys(be))e[r]=V(r);return e}function xe(){console.log("🔧 bwg-core 서비스코드 설정:"),console.log("📋 Provider 설정 > 기본값 순서로 확인");const e=ue();for(const[r,t]of Object.entries(e)){const n=Y[r]?"Provider 설정":"기본값";console.log(` ${r}: ${t} (${n})`)}}const Vt=Object.freeze(Object.defineProperty({__proto__:null,getAllServiceCodes:ue,getServiceCode:V,logServiceCodeConfig:xe,setServiceCodeOverrides:De},Symbol.toStringTag,{value:"Module"}));(void 0).DEV;function Zt(e,r){let t;try{t=e()}catch{return}return{getItem:o=>{var a;const i=d=>d===null?null:JSON.parse(d,void 0),g=(a=t.getItem(o))!=null?a:null;return g instanceof Promise?g.then(i):i(g)},setItem:(o,a)=>t.setItem(o,JSON.stringify(a,void 0)),removeItem:o=>t.removeItem(o)}}const ae=e=>r=>{try{const t=e(r);return t instanceof Promise?t:{then(n){return ae(n)(t)},catch(n){return this}}}catch(t){return{then(n){return this},catch(n){return ae(n)(t)}}}},Qt=(e,r)=>(t,n,o)=>{let a={storage:Zt(()=>localStorage),partialize:s=>s,version:0,merge:(s,f)=>({...f,...s}),...r},i=!1;const g=new Set,d=new Set;let v=a.storage;if(!v)return e((...s)=>{console.warn(`[zustand persist middleware] Unable to update item '${a.name}', the given storage is currently unavailable.`),t(...s)},n,o);const h=()=>{const s=a.partialize({...n()});return v.setItem(a.name,{state:s,version:a.version})},p=o.setState;o.setState=(s,f)=>(p(s,f),h());const c=e((...s)=>(t(...s),h()),n,o);o.getInitialState=()=>c;let u;const l=()=>{var s,f;if(!v)return;i=!1,g.forEach(m=>{var S;return m((S=n())!=null?S:c)});const y=((f=a.onRehydrateStorage)==null?void 0:f.call(a,(s=n())!=null?s:c))||void 0;return ae(v.getItem.bind(v))(a.name).then(m=>{if(m)if(typeof m.version=="number"&&m.version!==a.version){if(a.migrate){const S=a.migrate(m.state,m.version);return S instanceof Promise?S.then(C=>[!0,C]):[!0,S]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,m.state];return[!1,void 0]}).then(m=>{var S;const[C,M]=m;if(u=a.merge(M,(S=n())!=null?S:c),t(u,!0),C)return h()}).then(()=>{y?.(u,void 0),u=n(),i=!0,d.forEach(m=>m(u))}).catch(m=>{y?.(void 0,m)})};return o.persist={setOptions:s=>{a={...a,...s},s.storage&&(v=s.storage)},clearStorage:()=>{v?.removeItem(a.name)},getOptions:()=>a,rehydrate:()=>l(),hasHydrated:()=>i,onHydrate:s=>(g.add(s),()=>{g.delete(s)}),onFinishHydration:s=>(d.add(s),()=>{d.delete(s)})},a.skipHydration||l(),u||c},Pe=Qt,b=R.create()(Pe((e,r)=>({user:null,isLoggedIn:!1,login:t=>{e({user:t,isLoggedIn:!0}),console.log("사용자 로그인:",t)},logout:()=>{e({user:null,isLoggedIn:!1}),console.log("사용자 로그아웃")},updateUser:t=>{const n=r().user;n&&e({user:{...n,...t}})}}),{name:"user-storage",partialize:e=>({user:e.user,isLoggedIn:e.isLoggedIn})})),Ee=()=>b.getState().user?.crprCd||null,le=()=>b.getState().user?.userId||null,de=()=>b.getState().user?.userNm||null,Oe=()=>b.getState().user?.userDvsn||null,Ne=()=>b.getState().user?.emplNo||null,fe=()=>b.getState().user?.dprtCd||null,me=()=>b.getState().user?.dprtNm||null,j=()=>b.getState().user?.roleList||null,Le=e=>{const r=j();return r?r.includes(e):!1},Ue=e=>{const r=j();return r?e.some(t=>r.includes(t)):!1},$e=e=>{const r=j();return r?e.every(t=>r.includes(t)):!1},Ae=()=>b.getState().isLoggedIn,k=()=>b.getState().user,ke=()=>k()!==null,Ye=()=>{const e=de(),r=le();return e||r||null},Fe=()=>{const e=me(),r=fe();return e||(r?String(r):null)},er=Object.freeze(Object.defineProperty({__proto__:null,getCrprCd:Ee,getDepartmentInfo:Fe,getDisplayName:Ye,getDprtCd:fe,getDprtNm:me,getEmplNo:Ne,getRoleList:j,getUserDvsn:Oe,getUserId:le,getUserInfo:k,getUserNm:de,hasAllRoles:$e,hasAnyRole:Ue,hasRole:Le,hasUserInfo:ke,isLoggedIn:Ae},Symbol.toStringTag,{value:"Module"})),ie={DEFAULT_PRNT_GBCD:1},tr=e=>e&&typeof e=="object"&&typeof e.menuId=="string"&&typeof e.menuNm=="string",Me=e=>Array.isArray(e)&&e.every(tr);let oe=[],Ce=[];const rr=e=>{if(e&&typeof e=="object"){const r=e;if(r.menus&&Me(r.menus))return r.menus;if(Me(e))return e}return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."),[]},nr=(e,r)=>!!r&&e.crprCd===r.crprCd&&e.userId===r.userId&&(e.prntGbcd??ie.DEFAULT_PRNT_GBCD)===(r.prntGbcd??ie.DEFAULT_PRNT_GBCD),or=e=>{if(oe.length===e.length&&oe.every((a,i)=>a.menuId===e[i]?.menuId&&a.menuPrntId===e[i]?.menuPrntId))return Ce;if(!e.length)return[];const r=new Map,t=[];e.forEach(a=>a?.menuId&&r.set(a.menuId,{...a,children:[]})),e.forEach(a=>{const i=r.get(a.menuId);i&&(a.menuPrntId&&a.menuPrntId!==""&&a.menuPrntId!=="-"?r.get(a.menuPrntId)?.children?.push(i):t.push(i))});const n=a=>a.sort((i,g)=>(i?.menuNo??0)-(g?.menuNo??0)).map(i=>({...i,children:i.children&&i.children.length?n(i.children):void 0})),o=n(t);return oe=[...e],Ce=o,o},Re=R.create((e,r)=>({menuList:[],flatMenuList:[],isLoading:!1,error:null,_lastFetchParams:null,fetchMenu:async({crprCd:t,userId:n,prntGbcd:o})=>{const a={crprCd:t,userId:n,prntGbcd:o??ie.DEFAULT_PRNT_GBCD};if(nr(a,r()._lastFetchParams)){console.log("✅ 중복 fetch 차단",a);return}e({isLoading:!0,error:null,_lastFetchParams:a});try{const i=await N(V("AUTH_MENU"),a),g=rr(i),d=or(g);e({flatMenuList:g,menuList:d,isLoading:!1,error:null})}catch(i){e({isLoading:!1,error:i?.message??"메뉴 로드 실패"})}},clearMenu:()=>{e({menuList:[],flatMenuList:[],error:null,_lastFetchParams:null})},findMenuById:t=>{const{flatMenuList:n}=r();return n.find(o=>o.menuId===t)??null}})),se={MAX_TABS:15},ge=R.create((e,r)=>({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:se.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},openTabFromMenu:(t,n)=>{const{tabs:o,activeMenuId:a}=r(),i=o.find(d=>d.key===t.menuId),g=o.find(d=>d.key===t.menuId);if(i)g!=null?(e({activeMenuId:t.menuId,activeMenuItem:t}),r().setTabParams(t.menuId,n||{}),t?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(t.menuId)):x.message.warning("유효하지 않은 메뉴정보입니다.");else{if(o.length>se.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),x.message.warning(`최대 ${se.MAX_TABS}개의 탭만 열 수 있습니다.
|
|
2
|
+
기존 탭을 닫고 다시 시도해주세요.`);return}const d={key:t.menuId,label:t.menuNm,gubun:"M",menuItem:t,closable:!0};e({tabs:[...o,d],activeMenuId:t.menuId,activeMenuItem:t}),r().setTabParams(t.menuId,n||{}),t?.prsnInfoYn==="Y"&&r().setProtectFlagForKey(t.menuId)}},openTabByMenuId:(t,n)=>{const o=Re.getState().findMenuById(t);o?r().openTabFromMenu(o,n):x.message.warning("메뉴 ID를 찾을 수 없습니다.")},openDetailView:(t,n,o)=>{const{tabs:a,activeMenuId:i}=r();if(a.find(d=>d.key===t.viewId))r().focusTab(t.viewId);else{const d={key:t.viewId,label:t.viewLabel,gubun:"C",componentItem:{scrnPath:n,prsnInfoYn:o,prntInfo:t.prntInfo},closable:!0};e({tabs:[...a,d],activeMenuId:t.viewId,activeDetailItem:t}),r().setTabParams(t.viewId,t.viewParams||{})}},closeTab:t=>{const{tabs:n,activeMenuId:o}=r();n.find(g=>g.key===t);const a=n.filter(g=>g.key!==t);let i=o;if(o===t){const g=n.findIndex(d=>d.key===t);i=a.length?a[Math.min(g,a.length-1)]?.key??null:null}e({tabs:a}),i&&r().focusTab(i)},focusTab:t=>{const{tabs:n}=r(),o=n.find(a=>a.key===t);if(o){const a=o.gubun==="C"?{viewId:o.key,viewLabel:o.label,prntInfo:o.componentItem?.prntInfo}:null;o.menuItem?.prsnInfoYn==="Y"?(e({activeMenuId:t,activeMenuItem:o.menuItem,activeDetailItem:a}),console.log("✅ 탭 포커스 (개인정보) - activeMenuItem:",o.menuItem),r().setProtectFlagForKey(t)):(e({activeMenuId:t,activeMenuItem:o.menuItem,activeDetailItem:a}),r().clearProtectFlagForKey(t))}else e({activeMenuId:t,activeMenuItem:null,activeDetailItem:null}),console.warn("❌ 탭을 찾을 수 없음:",t)},closeAllTabs:()=>e({tabs:[],activeMenuId:null,activeMenuItem:null,activeDetailItem:null}),toggleSidebar:()=>e(t=>({sidebarCollapsed:!t.sidebarCollapsed})),reorderTabs:t=>e(n=>{const o=new Map(n.tabs.map(a=>[a.key,a]));return{tabs:t.map(a=>o.get(a)).filter(Boolean)}}),setProtectFlagForKey:t=>e(n=>({tabProtectFlag:{...n.tabProtectFlag,[t]:!0}})),clearProtectFlagForKey:t=>e(n=>{const o={...n.tabProtectFlag};return delete o[t],{tabProtectFlag:o}}),setTabParams:(t,n)=>e(o=>{const a=o.tabParams[t]||{},i={...n||{}};return Object.keys(a).length===Object.keys(i).length&&Object.keys(i).every(d=>a[d]===i[d])?o:{tabParams:{...o.tabParams,[t]:i}}}),setComponentLabelMap:(t,n)=>e({componentLabelMap:t})})),K=R.create(e=>({requestCount:0,loading:!1,showLoading:()=>e(r=>{const t=r.requestCount+1;return{requestCount:t,loading:t>0}}),hideLoading:()=>e(r=>{const t=Math.max(0,r.requestCount-1);return{requestCount:t,loading:t>0}})})),J=R.create(e=>({requestCount:0,loading:!1,showLoading:()=>e(r=>{const t=r.requestCount+1;return{requestCount:t,loading:t>0}}),hideLoading:()=>e(r=>{const t=Math.max(0,r.requestCount-1);return{requestCount:t,loading:t>0}})}));var sr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Z(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function ar(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var r=e.default;if(typeof r=="function"){var t=function n(){var o=!1;try{o=this instanceof n}catch{}return o?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)};t.prototype=r.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(e).forEach(function(n){var o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:function(){return e[n]}})}),t}var z={exports:{}},ir=z.exports,Te;function cr(){return Te||(Te=1,(function(e,r){(function(t,n){e.exports=n(L)})(ir,(function(t){function n(i){return i&&typeof i=="object"&&"default"in i?i:{default:i}}var o=n(t),a={name:"ko",weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),ordinal:function(i){return i+"일"},formats:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},meridiem:function(i){return i<12?"오전":"오후"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"}};return o.default.locale(a,null,!0),a}))})(z)),z.exports}cr();var B={exports:{}},ur=B.exports,we;function lr(){return we||(we=1,(function(e,r){(function(t,n){e.exports=n()})(ur,(function(){return function(t,n,o){t=t||{};var a=n.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function g(v,h,p,c){return a.fromToBase(v,h,p,c)}o.en.relativeTime=i,a.fromToBase=function(v,h,p,c,u){for(var l,s,f,y=p.$locale().relativeTime||i,m=t.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],S=m.length,C=0;C<S;C+=1){var M=m[C];M.d&&(l=c?o(v).diff(p,M.d,!0):p.diff(v,M.d,!0));var w=(t.rounding||Math.round)(Math.abs(l));if(f=l>0,w<=M.r||!M.r){w<=1&&C>0&&(M=m[C-1]);var I=y[M.l];u&&(w=u(""+w)),s=typeof I=="string"?I.replace("%d",w):I(w,h,M.l,f);break}}if(h)return s;var _=f?y.future:y.past;return typeof _=="function"?_(s):_.replace("%s",s)},a.to=function(v,h){return g(v,h,this,!0)},a.from=function(v,h){return g(v,h,this)};var d=function(v){return v.$u?o.utc():o()};a.toNow=function(v){return this.to(d(this),v)},a.fromNow=function(v){return this.from(d(this),v)}}}))})(B)),B.exports}var dr=lr();const fr=Z(dr);var G={exports:{}},mr=G.exports,Ie;function gr(){return Ie||(Ie=1,(function(e,r){(function(t,n){e.exports=n()})(mr,(function(){var t={year:0,month:1,day:2,hour:3,minute:4,second:5},n={};return function(o,a,i){var g,d=function(c,u,l){l===void 0&&(l={});var s=new Date(c),f=(function(y,m){m===void 0&&(m={});var S=m.timeZoneName||"short",C=y+"|"+S,M=n[C];return M||(M=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:y,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:S}),n[C]=M),M})(u,l);return f.formatToParts(s)},v=function(c,u){for(var l=d(c,u),s=[],f=0;f<l.length;f+=1){var y=l[f],m=y.type,S=y.value,C=t[m];C>=0&&(s[C]=parseInt(S,10))}var M=s[3],w=M===24?0:M,I=s[0]+"-"+s[1]+"-"+s[2]+" "+w+":"+s[4]+":"+s[5]+":000",_=+c;return(i.utc(I).valueOf()-(_-=_%1e3))/6e4},h=a.prototype;h.tz=function(c,u){c===void 0&&(c=g);var l,s=this.utcOffset(),f=this.toDate(),y=f.toLocaleString("en-US",{timeZone:c}),m=Math.round((f-new Date(y))/1e3/60),S=15*-Math.round(f.getTimezoneOffset()/15)-m;if(!Number(S))l=this.utcOffset(0,u);else if(l=i(y,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(S,!0),u){var C=l.utcOffset();l=l.add(s-C,"minute")}return l.$x.$timezone=c,l},h.offsetName=function(c){var u=this.$x.$timezone||i.tz.guess(),l=d(this.valueOf(),u,{timeZoneName:c}).find((function(s){return s.type.toLowerCase()==="timezonename"}));return l&&l.value};var p=h.startOf;h.startOf=function(c,u){if(!this.$x||!this.$x.$timezone)return p.call(this,c,u);var l=i(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return p.call(l,c,u).tz(this.$x.$timezone,!0)},i.tz=function(c,u,l){var s=l&&u,f=l||u||g,y=v(+i(),f);if(typeof c!="string")return i(c).tz(f);var m=(function(w,I,_){var O=w-60*I*1e3,U=v(O,_);if(I===U)return[O,I];var ne=v(O-=60*(U-I)*1e3,_);return U===ne?[O,U]:[w-60*Math.min(U,ne)*1e3,Math.max(U,ne)]})(i.utc(c,s).valueOf(),y,f),S=m[0],C=m[1],M=i(S).utcOffset(C);return M.$x.$timezone=f,M},i.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},i.tz.setDefault=function(c){g=c}}}))})(G)),G.exports}var hr=gr();const pr=Z(hr);var W={exports:{}},vr=W.exports,_e;function yr(){return _e||(_e=1,(function(e,r){(function(t,n){e.exports=n()})(vr,(function(){var t="minute",n=/[+-]\d\d(?::?\d\d)?/g,o=/([+-]|\d\d)/g;return function(a,i,g){var d=i.prototype;g.utc=function(s){var f={date:s,utc:!0,args:arguments};return new i(f)},d.utc=function(s){var f=g(this.toDate(),{locale:this.$L,utc:!0});return s?f.add(this.utcOffset(),t):f},d.local=function(){return g(this.toDate(),{locale:this.$L,utc:!1})};var v=d.parse;d.parse=function(s){s.utc&&(this.$u=!0),this.$utils().u(s.$offset)||(this.$offset=s.$offset),v.call(this,s)};var h=d.init;d.init=function(){if(this.$u){var s=this.$d;this.$y=s.getUTCFullYear(),this.$M=s.getUTCMonth(),this.$D=s.getUTCDate(),this.$W=s.getUTCDay(),this.$H=s.getUTCHours(),this.$m=s.getUTCMinutes(),this.$s=s.getUTCSeconds(),this.$ms=s.getUTCMilliseconds()}else h.call(this)};var p=d.utcOffset;d.utcOffset=function(s,f){var y=this.$utils().u;if(y(s))return this.$u?0:y(this.$offset)?p.call(this):this.$offset;if(typeof s=="string"&&(s=(function(M){M===void 0&&(M="");var w=M.match(n);if(!w)return null;var I=(""+w[0]).match(o)||["-",0,0],_=I[0],O=60*+I[1]+ +I[2];return O===0?0:_==="+"?O:-O})(s),s===null))return this;var m=Math.abs(s)<=16?60*s:s;if(m===0)return this.utc(f);var S=this.clone();if(f)return S.$offset=m,S.$u=!1,S;var C=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(S=this.local().add(m+C,t)).$offset=m,S.$x.$localOffset=C,S};var c=d.format;d.format=function(s){var f=s||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return c.call(this,f)},d.valueOf=function(){var s=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*s},d.isUTC=function(){return!!this.$u},d.toISOString=function(){return this.toDate().toISOString()},d.toString=function(){return this.toDate().toUTCString()};var u=d.toDate;d.toDate=function(s){return s==="s"&&this.$offset?g(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():u.call(this)};var l=d.diff;d.diff=function(s,f,y){if(s&&this.$u===s.$u)return l.call(this,s,f,y);var m=this.local(),S=g(s).local();return l.call(m,S,f,y)}}}))})(W)),W.exports}var Sr=yr();const Mr=Z(Sr),je="ui_theme",qe=e=>typeof e=="string",He=e=>typeof e=="number"&&!isNaN(e),ze=e=>typeof e=="boolean",Be=e=>typeof e=="function",Ge=e=>e!==null&&typeof e=="object",We=e=>Array.isArray(e),Ke=e=>e===null,Je=e=>e===void 0,Xe=e=>e==null,Ve=(e,r)=>{let t=0;return(...n)=>{const o=Date.now();o-t>=r&&(t=o,e(...n))}},Ze=(e,r)=>{let t;return(...n)=>{clearTimeout(t),t=setTimeout(()=>e(...n),r)}},Qe=async e=>{try{return await navigator.clipboard.writeText(e),!0}catch(r){return console.error("Error copying to clipboard:",r),!1}},q=()=>{const e=window.innerWidth;return e<768?"mobile":e<1024?"tablet":"desktop"},et=()=>q()==="mobile",tt=()=>q()==="tablet",rt=()=>q()==="desktop",nt=()=>"#"+Math.floor(Math.random()*16777215).toString(16),H=e=>!e||e.length===0,ot=e=>[...new Set(e)],st=e=>{if(!H(e))return Math.max(...e)},at=e=>{if(!H(e))return Math.min(...e)},it=e=>{if(!H(e))return e.reduce((r,t)=>r+t,0)/e.length},ct=e=>e.reduce((r,t)=>r+t,0),ut=(e,r)=>e.filter(r).length,lt=e=>[...e].reverse(),dt=e=>{const r=new Set,t=new Set;return e.forEach(n=>{r.has(n)?t.add(n):r.add(n)}),Array.from(t)},ft=(e,r)=>Math.random()*(r-e)+e,mt=(e,r,t)=>Math.min(Math.max(e,r),t),gt=(e,r=0)=>Math.round(e*Math.pow(10,r))/Math.pow(10,r),ht=(e,r)=>{try{sessionStorage.setItem(e,JSON.stringify(r))}catch(t){console.error("Error saving to sessionStorage:",t)}},pt=(e,r)=>{try{const t=sessionStorage.getItem(e);return t?JSON.parse(t):r||null}catch(t){return console.error("Error reading from sessionStorage:",t),r||null}},vt=e=>{try{sessionStorage.removeItem(e)}catch(r){console.error("Error removing from sessionStorage:",r)}},yt=()=>{try{sessionStorage.clear()}catch(e){console.error("Error clearing sessionStorage:",e)}},St=(e,r,t=30)=>{const n=new Date;n.setTime(n.getTime()+t*24*60*60*1e3),document.cookie=`${e}=${r};expires=${n.toUTCString()};path=/`},Mt=e=>{const r=e+"=",t=document.cookie.split(";");for(let n=0;n<t.length;n++){let o=t[n];for(;o.charAt(0)===" ";)o=o.substring(1,o.length);if(o.indexOf(r)===0)return o.substring(r.length,o.length)}return null},Ct=e=>{document.cookie=`${e}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/`},he=e=>typeof e!="string"?!e:e.trim().length===0,Tt=(e,r)=>he(e)?r:e||"",wt=e=>e.replace(/-([a-z])/g,r=>r[1].toUpperCase()),It=e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),_t=e=>{try{return new URL(e),!0}catch{return!1}},bt=(e,r,t=" ")=>e.padStart(r,t),Dt=(e,r,t=" ")=>e.padEnd(r,t),pe=(e,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")=>{let t="";for(let n=0;n<e;n++)t+=r.charAt(Math.floor(Math.random()*r.length));return t},Cr=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){const r=Math.random()*16|0;return(e==="x"?r:r&3|8).toString(16)}),ve=(e=32)=>{const t=Cr().replace(/-/g,"");return e>=32?t+pe(e-32,"0123456789abcdef"):t.substring(0,e)};async function xt(e){const[{default:r},{default:t}]=await Promise.all([Promise.resolve().then(()=>require("./sha256-BnWVPP1K.cjs")).then(n=>n.sha256),Promise.resolve().then(()=>require("./enc-base64-DbK5VBfD.cjs")).then(n=>n.encBase64)]);return r(e).toString(t)}L.extend(fr);L.extend(Mr);L.extend(pr);L.locale("ko");const Pt=()=>L(),Et=(e="YYYY-MM-DD")=>L().format(e),Tr=Object.freeze(Object.defineProperty({__proto__:null,THEME_COOKIE_NAME:je,arrAverage:it,arrCount:ut,arrMax:st,arrMin:at,arrReverse:lt,arrSum:ct,arrUnique:ot,clamp:mt,clearSessionStorage:yt,copyToClipboard:Qe,debounce:Ze,deleteCookie:Ct,duplicates:dt,encryptSha256:xt,generateRandomColor:nt,generateRandomString:pe,generateUID:ve,getCookie:Mt,getCurrentDate:Pt,getCurrentDateString:Et,getDeviceType:q,getSessionStorage:pt,isArray:We,isBoolean:ze,isDesktop:rt,isEmpty:he,isEmptyArray:H,isFunction:Be,isMobile:et,isNull:Ke,isNullOrUndefined:Xe,isNumber:He,isObject:Ge,isSafeEmpty:Tt,isString:qe,isTablet:tt,isUndefined:Je,isValidEmail:It,isValidUrl:_t,padLeft:bt,padRight:Dt,random:ft,removeSessionStorage:vt,round:gt,setCookie:St,setSessionStorage:ht,throttle:Ve,toCamelCase:wt},Symbol.toStringTag,{value:"Module"})),A=(()=>{try{if((void 0).DEV)return!0}catch{}return!1})();let Ot=[],Nt=[];function Lt(e){e.devHosts&&(Ot=e.devHosts),e.prodHosts&&(Nt=e.prodHosts)}function Ut(){if(typeof window<"u"&&window.location)return window.location.hostname}const ye=(()=>{const e=Ut();return!!(e&&Ot.includes(e))})(),Se=(()=>{const e=Ut();return!!(e&&Nt.includes(e))})();function $t(){return A?"X":ye?"D":Se?"P":"X"}const wr=Object.freeze(Object.defineProperty({__proto__:null,configureEnvUtils:Lt,getEnvCode:$t,isDev:ye,isLocal:A,isProd:Se},Symbol.toStringTag,{value:"Module"})),D={duration:4.5,placement:"topRight"};class ${constructor(){}static getInstance(){return $.instance||($.instance=new $),$.instance}showBwgError(r){const{message:t,description:n,duration:o=D.duration,placement:a=D.placement}=r;x.notification.error({message:`${t}`,description:n||"오류가 발생했습니다. 다시 시도해주세요.",duration:o,placement:a,style:{borderLeft:"4px solid #ff4d4f",backgroundColor:"#fff2f0"}})}showSuccess(r,t,n){x.notification.success({message:`${r}`,description:t,duration:n||D.duration,placement:D.placement})}showInfo(r,t,n){x.notification.info({message:`${r}`,description:t,duration:n||D.duration,placement:D.placement})}showWarning(r,t,n){x.notification.warning({message:`${r}`,description:t,duration:n||D.duration,placement:D.placement})}showError(r,t,n){x.notification.error({message:`${r}`,description:t,duration:n||D.duration,placement:D.placement})}destroy(){x.notification.destroy()}close(r){x.notification.destroy()}}const E=$.getInstance(),Q=e=>{E.showBwgError(e)},At=(e,r,t)=>{E.showSuccess(e,r,t)},ee=(e,r,t)=>{E.showInfo(e,r,t)},te=(e,r,t)=>{E.showWarning(e,r,t)},kt=(e,r,t)=>{E.showError(e,r,t)},Yt=()=>{E.destroy()},Ft=e=>{E.close(e)},Ir=Object.freeze(Object.defineProperty({__proto__:null,closeNotification:Ft,destroyNotifications:Yt,notiBwgError:Q,notiError:kt,notiInfo:ee,notiSuccess:At,notiWarning:te,notificationService:E},Symbol.toStringTag,{value:"Module"}));let P=null;const re=async e=>{if(P===null)if(e===void 0)try{let t=(await ce.get("/api/ip")).data.trim();t=t.replace(/\s+/g,""),P=t}catch(r){console.warn("IP 가져오기 실패:",r),P="unknown"}else P=e},Rt=()=>P,jt=async()=>(console.log("IP 검증 비활성화됨 (성능 최적화)"),P||"unknown");class T extends Error{constructor(r,t,n,o,a){super(r),this.name="ApiError",this.detailMsg=t,this.response=n,this.msgCd=o,this.errorType=a,Error.captureStackTrace&&Error.captureStackTrace(this,T)}}const X={method:"POST",timeout:3e4,withCredentials:!0,showLoading:!0,isPopup:!1,showError:!0,retryCount:0,retryDelay:1e3},F=ce.create({timeout:X.timeout,withCredentials:X.withCredentials,headers:{"Content-Type":"application/json; charset=utf-8",Accept:"application/json; charset=utf-8","Apm-Guid":ve()}});F.interceptors.request.use(e=>{e.showLoading&&!e.isPopup&&K.getState().showLoading(),e.showLoading&&e.isPopup&&J.getState().showLoading();let r="UNKNOWN";new Date().getTime();try{e.data&&e.data.header?r=e.data.header.trxCd||"UNKNOWN":e.params&&e.params.header&&(r=e.params.header.trxCd||"UNKNOWN")}catch(n){console.warn("trxCd/guid 추출 실패:",n)}e.trxCd=r,e.requestStartTime=Date.now(),console.log(`🚀 API 요청 시작 [거래코드: ${r} / 서비스요청자: ${k()?.userId}]`);const t=localStorage.getItem("accessToken");return t&&(e.headers.Authorization=`Bearer ${t}`),e.headers["Content-Type"]="application/json; charset=UTF-8",e.headers.Accept="application/json; charset=UTF-8",e},e=>(console.error("❌ 요청 인터셉터 에러:",e),Promise.reject(e)));F.interceptors.response.use(e=>{e.config.showLoading&&!e.config.isPopup&&K.getState().hideLoading(),e.config.isPopup&&J.getState().hideLoading();let r="UNKNOWN",t="UNKNOWN";const n=new Date().getTime();try{e.config.trxCd&&(r=e.config.trxCd),e.config.guid?t=e.config.guid:e.data&&e.data.header&&e.data.header.trxCd?(r=e.data.header.trxCd,t=e.data.header.guid||"UNKNOWN"):e.config.data&&e.config.data.header?(r=e.config.data.header.trxCd||"UNKNOWN",t=e.config.data.header.guid||"UNKNOWN"):e.config.params&&e.config.params.header&&(r=e.config.params.header.trxCd||"UNKNOWN",t=e.config.params.header.guid||"UNKNOWN")}catch(a){console.warn("trxCd/guid 추출 실패:",a)}let o=0;return e.config.requestStartTime&&(o=n-e.config.requestStartTime),console.log(`✅ API 응답 성공 [거래코드: ${r} / GUID : ${t}] - (소요시간: ${o}ms)`),e},async e=>{if(e.config&&e.config.showLoading&&!e.config.isPopup&&K.getState().hideLoading(),e.config&&e.config.isPopup&&J.getState().hideLoading(),console.error("❌ API 응답 에러:",e),A&&console.error("🚨 Error Details:",{message:e.message,status:e.response?.status,statusText:e.response?.statusText,data:e.response?.data,config:{url:e.config?.url,method:e.config?.method,baseURL:e.config?.baseURL}}),e.response?.status===401){const r=localStorage.getItem("refreshToken");if(r)try{const t=await ce.post("/auth/refresh",{refreshToken:r});if(t.data.accessToken){localStorage.setItem("accessToken",t.data.accessToken);const n=e.config;if(n)return n.headers.Authorization=`Bearer ${t.data.accessToken}`,F(n)}}catch{localStorage.removeItem("accessToken"),localStorage.removeItem("refreshToken"),window.location.href="/login"}}return Promise.reject(e)});const N=async(e,r,t)=>{try{const n={...X,...t},{activeMenuId:o}=ge.getState();if(P===null){const p=Date.now();await re();const c=Date.now();console.log(`[INFO] IP 조회 소요시간: ${c-p}ms`)}const a={method:n.method,url:"/api/service",timeout:n.timeout,withCredentials:n.withCredentials,showLoading:n.showLoading,isPopup:n.isPopup};n.headers&&(a.headers=n.headers);const i=P||"unknown",g=__APP_CD__,d=__SYS_CD__,v={header:{trxCd:e,userInfo:k(),clientIp:i,domainId:"DEFAULT",appCd:g,sysCd:d,screenId:o},data:r};n.method==="GET"?a.params=v||n.params:(a.data=v||n.data,n.params&&(a.params=n.params));let h;for(let p=0;p<=(n.retryCount||0);p++)try{const c=await F(a);if(c.data.header?.resCd==0){for(const u in c.data)if(u!=="header")return c.data[u];return{}}else{const u=c.data.header,l=u?.msgs?.basicMsg||"요청 처리 중 오류가 발생했습니다.",s=u?.msgs?.detailMsgs||l,f=u?.msgCd,y=u?.msgs?.type;throw new T(l,s,c,f,y)}}catch(c){if(c.isAxiosError&&c.response){const u=c,l=u.response,s=l.data,f=s?.header?.msgs?.basicMsg||u.message||"서버에서 오류가 발생했습니다.",y=s?.header?.msgs?.detailMsgs||(typeof l.data=="string"?l.data:JSON.stringify(l.data))||f,m=s?.header?.msgCd,S=s?.header?.msgs?.type;h=new T(f,y,l,m,S)}else h=c;if(c.isAxiosError&&Ht(c)&&p<(n.retryCount||0)){await zt(n.retryDelay||1e3);continue}break}if(h){if(n.showError){const p=h instanceof T?h.message:"요청 처리 중 오류가 발생했습니다.",c=h instanceof T?h.msgCd:"요청 처리 중 오류가 발생했습니다.",u=h instanceof T?h.detailMsg:h.message,l=h instanceof T?h.errorType:"";c?.startsWith("BXM")?Q({message:p,description:u,duration:5}):l=="I"?ee(p,u,5):te(p,u,5)}throw h}throw new Error("알 수 없는 API 오류가 발생했습니다.")}catch(n){throw console.error("callService 최종 에러:",n),n}},qt=async(e,r,t,n)=>{try{const o={...X,...n},{activeMenuId:a}=ge.getState();if(P===null){const c=Date.now();await re();const u=Date.now();console.log(`[INFO] IP 조회 소요시간: ${u-c}ms`)}const i={method:o.method,url:"/api/"+e+"/service",timeout:o.timeout,withCredentials:o.withCredentials,showLoading:o.showLoading,isPopup:o.isPopup};o.headers&&(i.headers=o.headers);const g=P||"unknown",d=__APP_CD__,v=__SYS_CD__,h={header:{trxCd:r,userInfo:k(),clientIp:g,domainId:"DEFAULT",appCd:d,sysCd:v,screenId:a},data:t};A&&console.log("__BWG_LOCAL__ 테스트 입니다. ",A),o.method==="GET"?i.params=h||o.params:(i.data=h||o.data,o.params&&(i.params=o.params));let p;for(let c=0;c<=(o.retryCount||0);c++)try{const u=await F(i);if(u.data.header?.resCd==0){for(const l in u.data)if(l!=="header")return u.data[l];return{}}else{const l=u.data.header,s=l?.msgs?.basicMsg||"요청 처리 중 오류가 발생했습니다.",f=l?.msgs?.detailMsgs||s,y=l?.msgCd,m=l?.msgs?.type;throw new T(s,f,u,y,m)}}catch(u){if(u.isAxiosError&&u.response){const l=u,s=l.response,f=s.data,y=f?.header?.msgs?.basicMsg||l.message||"서버에서 오류가 발생했습니다.",m=f?.header?.msgs?.detailMsgs||(typeof s.data=="string"?s.data:JSON.stringify(s.data))||y,S=f?.header?.msgCd,C=f?.header?.msgs?.type;p=new T(y,m,s,S,C)}else p=u;if(u.isAxiosError&&Ht(u)&&c<(o.retryCount||0)){await zt(o.retryDelay||1e3);continue}break}if(p){if(o.showError){const c=p instanceof T?p.message:"요청 처리 중 오류가 발생했습니다.",u=p instanceof T?p.msgCd:"요청 처리 중 오류가 발생했습니다.",l=p instanceof T?p.detailMsg:p.message,s=p instanceof T?p.errorType:"";u?.startsWith("BXM")?Q({message:c,description:l,duration:5}):s=="I"?ee(c,l,5):te(c,l,5)}throw p}throw new Error("알 수 없는 API 오류가 발생했습니다.")}catch(o){throw console.error("callService 최종 에러:",o),o}},Ht=e=>!e.response||e.response.status>=500&&e.response.status<600,zt=e=>new Promise(r=>setTimeout(r,e)),Bt=(e,r,t)=>N(e,r,{...t,method:"GET"}),Gt=(e,r,t)=>N(e,r,{...t,method:"POST"}),Wt=(e,r,t)=>N(e,r,{...t,method:"PUT"}),Kt=(e,r,t)=>N(e,r,{...t,method:"DELETE"}),Jt=(e,r,t)=>N(e,r,{...t,method:"PATCH"}),Xt=async(e,r,t)=>{try{const n=await fetch("/api/permissions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userId:e,menuId:r,popupId:t})});if(!n.ok)throw new Error(`권한 확인 실패: ${n.status}`);return await n.json()}catch(n){throw console.error("권한 확인 서비스 오류:",n),n}},_r=Object.freeze(Object.defineProperty({__proto__:null,ApiError:T,apiDelete:Kt,apiGet:Bt,apiPatch:Jt,apiPost:Gt,apiPut:Wt,callService:N,callService_SYSCD:qt,getClientIp:Rt,getPermissionService:Xt,setClientIp:re,verifyClientIp:jt},Symbol.toStringTag,{value:"Module"}));exports.ApiError=T;exports.THEME_COOKIE_NAME=je;exports.apiDelete=Kt;exports.apiGet=Bt;exports.apiPatch=Jt;exports.apiPost=Gt;exports.apiPut=Wt;exports.apiUtilsModule=_r;exports.arrAverage=it;exports.arrCount=ut;exports.arrMax=st;exports.arrMin=at;exports.arrReverse=lt;exports.arrSum=ct;exports.arrUnique=ot;exports.callService=N;exports.callService_SYSCD=qt;exports.clamp=mt;exports.clearSessionStorage=yt;exports.closeNotification=Ft;exports.commonUtilsModule=Tr;exports.commonjsGlobal=sr;exports.configureEnvUtils=Lt;exports.copyToClipboard=Qe;exports.debounce=Ze;exports.deleteCookie=Ct;exports.destroyNotifications=Yt;exports.duplicates=dt;exports.encryptSha256=xt;exports.envUtilsModule=wr;exports.generateRandomColor=nt;exports.generateRandomString=pe;exports.generateUID=ve;exports.getAllServiceCodes=ue;exports.getAugmentedNamespace=ar;exports.getClientIp=Rt;exports.getCookie=Mt;exports.getCrprCd=Ee;exports.getCurrentDate=Pt;exports.getCurrentDateString=Et;exports.getDefaultExportFromCjs=Z;exports.getDepartmentInfo=Fe;exports.getDeviceType=q;exports.getDisplayName=Ye;exports.getDprtCd=fe;exports.getDprtNm=me;exports.getEmplNo=Ne;exports.getEnvCode=$t;exports.getPermissionService=Xt;exports.getRoleList=j;exports.getServiceCode=V;exports.getSessionStorage=pt;exports.getUserDvsn=Oe;exports.getUserId=le;exports.getUserInfo=k;exports.getUserNm=de;exports.hasAllRoles=$e;exports.hasAnyRole=Ue;exports.hasRole=Le;exports.hasUserInfo=ke;exports.isArray=We;exports.isBoolean=ze;exports.isDesktop=rt;exports.isDev=ye;exports.isEmpty=he;exports.isEmptyArray=H;exports.isFunction=Be;exports.isLocal=A;exports.isLoggedIn=Ae;exports.isMobile=et;exports.isNull=Ke;exports.isNullOrUndefined=Xe;exports.isNumber=He;exports.isObject=Ge;exports.isProd=Se;exports.isSafeEmpty=Tt;exports.isString=qe;exports.isTablet=tt;exports.isUndefined=Je;exports.isValidEmail=It;exports.isValidUrl=_t;exports.logServiceCodeConfig=xe;exports.notiBwgError=Q;exports.notiError=kt;exports.notiInfo=ee;exports.notiSuccess=At;exports.notiWarning=te;exports.notificationService=E;exports.notificationUtilsModule=Ir;exports.padLeft=bt;exports.padRight=Dt;exports.persist=Pe;exports.random=ft;exports.removeSessionStorage=vt;exports.round=gt;exports.serviceConfigModule=Vt;exports.setClientIp=re;exports.setCookie=St;exports.setServiceCodeOverrides=De;exports.setSessionStorage=ht;exports.throttle=Ve;exports.toCamelCase=wt;exports.useLoadingStore=K;exports.useMenuModelStore=Re;exports.useMenuViewStore=ge;exports.usePopupLoadingStore=J;exports.useUserStore=b;exports.userUtilsModule=er;exports.verifyClientIp=jt;
|
|
3
|
+
//# sourceMappingURL=apiUtils-D9Vn1gwZ.cjs.map
|