@bwg-ui/core 1.1.33 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/chunks/{common-components-C-dWpBJk.js → common-components-CKPZB7JH.js} +1997 -1981
  2. package/dist/chunks/common-components-Cw7pbhrp.cjs +183 -0
  3. package/dist/chunks/{core-uWiM5s5E.js → core-C2wEZy2f.js} +1 -1
  4. package/dist/chunks/{core-Cdocvd6i.cjs → core-DfOWJ6JQ.cjs} +1 -1
  5. package/dist/chunks/{enc-base64-1cOwmBuR.js → enc-base64-BNbm__mu.js} +2 -2
  6. package/dist/chunks/{enc-base64-D3cQUe7q.cjs → enc-base64-DPfS87kE.cjs} +1 -1
  7. package/dist/chunks/{sha256-C1laOj1I.cjs → sha256-BXXaP9RF.cjs} +1 -1
  8. package/dist/chunks/{sha256-naKE9EFq.js → sha256-ZWZAX8tH.js} +2 -2
  9. package/dist/components/common/BwgDraggable.d.ts +1 -1
  10. package/dist/components/common/BwgDraggable.d.ts.map +1 -1
  11. package/dist/components/common/BwgGrid.d.ts +4 -4
  12. package/dist/components/common/BwgGrid.d.ts.map +1 -1
  13. package/dist/components/common/BwgView.d.ts.map +1 -1
  14. package/dist/components/common/index.cjs +1 -1
  15. package/dist/components/common/index.js +5 -5
  16. package/dist/components/core/BwgUploader.d.ts +31 -6
  17. package/dist/components/core/BwgUploader.d.ts.map +1 -1
  18. package/dist/components/core/index.cjs +1 -1
  19. package/dist/components/core/index.js +519 -451
  20. package/dist/components/guide/index.cjs +1 -1
  21. package/dist/components/guide/index.js +1 -1
  22. package/dist/components/layout/AppWrapper.d.ts +13 -0
  23. package/dist/components/layout/AppWrapper.d.ts.map +1 -0
  24. package/dist/components/layout/BwgPortal01.d.ts +5 -0
  25. package/dist/components/layout/BwgPortal01.d.ts.map +1 -0
  26. package/dist/components/layout/BwgPortal02.d.ts +5 -0
  27. package/dist/components/layout/BwgPortal02.d.ts.map +1 -0
  28. package/dist/components/layout/custom/ConfigurableContent.d.ts +4 -0
  29. package/dist/components/layout/custom/ConfigurableContent.d.ts.map +1 -0
  30. package/dist/components/layout/{ErrorBound.d.ts → custom/ConfigurableErrorBound.d.ts} +1 -1
  31. package/dist/components/layout/custom/ConfigurableErrorBound.d.ts.map +1 -0
  32. package/dist/components/layout/custom/ConfigurableHeader.d.ts +5 -0
  33. package/dist/components/layout/custom/ConfigurableHeader.d.ts.map +1 -0
  34. package/dist/components/layout/custom/ConfigurableMenuTab.d.ts +5 -0
  35. package/dist/components/layout/custom/ConfigurableMenuTab.d.ts.map +1 -0
  36. package/dist/components/layout/custom/ConfigurableSidebar.d.ts +5 -0
  37. package/dist/components/layout/custom/ConfigurableSidebar.d.ts.map +1 -0
  38. package/dist/components/layout/custom/index.d.ts +5 -0
  39. package/dist/components/layout/custom/index.d.ts.map +1 -0
  40. package/dist/components/layout/{ViewContainer.d.ts → default/ContentContainer.d.ts} +1 -1
  41. package/dist/components/layout/default/ContentContainer.d.ts.map +1 -0
  42. package/dist/components/layout/default/LandingContainer.d.ts +3 -0
  43. package/dist/components/layout/default/LandingContainer.d.ts.map +1 -0
  44. package/dist/components/layout/default/LoadingContainer.d.ts +11 -0
  45. package/dist/components/layout/default/LoadingContainer.d.ts.map +1 -0
  46. package/dist/components/layout/default/PopupContainer.d.ts +12 -0
  47. package/dist/components/layout/default/PopupContainer.d.ts.map +1 -0
  48. package/dist/components/layout/default/index.d.ts +5 -0
  49. package/dist/components/layout/default/index.d.ts.map +1 -0
  50. package/dist/components/layout/{PrivateProtectedOverlay.d.ts → extension/ProtectWrapper.d.ts} +3 -3
  51. package/dist/components/layout/extension/ProtectWrapper.d.ts.map +1 -0
  52. package/dist/components/layout/extension/index.d.ts +2 -0
  53. package/dist/components/layout/extension/index.d.ts.map +1 -0
  54. package/dist/components/layout/index.cjs +2 -2
  55. package/dist/components/layout/index.d.ts +7 -7
  56. package/dist/components/layout/index.d.ts.map +1 -1
  57. package/dist/components/layout/index.js +1437 -229
  58. package/dist/components/layout/types.d.ts +181 -0
  59. package/dist/components/layout/types.d.ts.map +1 -0
  60. package/dist/components/popup/SearchAddress.d.ts +3 -0
  61. package/dist/components/popup/SearchAddress.d.ts.map +1 -0
  62. package/dist/components/popup/SearchDepartmentP01.d.ts +3 -0
  63. package/dist/components/popup/SearchDepartmentP01.d.ts.map +1 -0
  64. package/dist/components/popup/SearchDepartmentP02.d.ts +3 -0
  65. package/dist/components/popup/SearchDepartmentP02.d.ts.map +1 -0
  66. package/dist/components/popup/SearchEmployeeP01.d.ts +3 -0
  67. package/dist/components/popup/SearchEmployeeP01.d.ts.map +1 -0
  68. package/dist/components/popup/SearchEmployeeP02.d.ts +3 -0
  69. package/dist/components/popup/SearchEmployeeP02.d.ts.map +1 -0
  70. package/dist/index.cjs +1 -1
  71. package/dist/index.js +133 -128
  72. package/dist/provider/index.cjs +1 -1
  73. package/dist/provider/index.js +84 -84
  74. package/dist/styles/assets/images/header/icon/ico-bell.svg +3 -3
  75. package/dist/styles/assets/images/header/icon/ico-logout.svg +10 -10
  76. package/dist/styles/assets/images/header/icon/ico-setting.svg +4 -4
  77. package/dist/styles/assets/images/header/icon/ico-sidebar-arrow.svg +3 -3
  78. package/dist/styles/layout-test.css +354 -0
  79. package/dist/styles/layout.css +65 -78
  80. package/dist/utils/index.cjs +1 -1
  81. package/dist/utils/index.js +3 -3
  82. package/package.json +4 -1
  83. package/dist/chunks/common-components-eKBzroXe.cjs +0 -183
  84. package/dist/components/layout/ErrorBound.d.ts.map +0 -1
  85. package/dist/components/layout/LoadingOverlay.d.ts +0 -6
  86. package/dist/components/layout/LoadingOverlay.d.ts.map +0 -1
  87. package/dist/components/layout/PrivateProtectedOverlay.d.ts.map +0 -1
  88. package/dist/components/layout/ProgressOverlay.d.ts +0 -11
  89. package/dist/components/layout/ProgressOverlay.d.ts.map +0 -1
  90. package/dist/components/layout/ProtectLayout.d.ts +0 -7
  91. package/dist/components/layout/ProtectLayout.d.ts.map +0 -1
  92. package/dist/components/layout/PublicLayout.d.ts +0 -7
  93. package/dist/components/layout/PublicLayout.d.ts.map +0 -1
  94. package/dist/components/layout/ViewContainer.d.ts.map +0 -1
@@ -1,42 +1,1201 @@
1
- import { jsxs as a, jsx as e } from "react/jsx-runtime";
2
- import { ReloadOutlined as E, CloseOutlined as S, ExclamationCircleTwoTone as F } from "@ant-design/icons";
3
- import { Result as f, Button as y, Spin as I, ConfigProvider as T, Space as D, Typography as P } from "antd";
4
- import { Component as L, useRef as b, useState as N, useCallback as B, useEffect as x, memo as R, Suspense as $, createElement as O } from "react";
5
- import { ScreenProtectProvider as w, useLock as z, useAuth as v } from "../../provider/index.js";
6
- import { isLocal as V } from "../../utils/index.js";
7
- import { Outlet as C } from "react-router-dom";
8
- import { useMenuViewStore as j } from "../../stores/index.js";
9
- function te({
10
- title: t = "로딩 중...",
11
- subTitle: r
12
- }) {
13
- return /* @__PURE__ */ a("div", { className: "bwg-load-indicator", children: [
14
- /* @__PURE__ */ a("div", { className: "bwg-load-wave", children: [
15
- /* @__PURE__ */ e("span", {}),
16
- /* @__PURE__ */ e("span", {}),
17
- /* @__PURE__ */ e("span", {})
1
+ import { jsxs as b, jsx as e, Fragment as G } from "react/jsx-runtime";
2
+ import { ServiceCodeProvider as de, CommonCodeProvider as ce, ScreenProtectProvider as ue, useLock as me, SearchBoxProvider as pe } from "../../provider/index.js";
3
+ import { Routes as he, Route as _, Navigate as ge, useNavigate as fe } from "react-router-dom";
4
+ import { G as be, B as ye, Q as Ce } from "../../chunks/common-components-CKPZB7JH.js";
5
+ import { Spin as W, Layout as A, ColorPicker as ve, Button as x, Popover as we, Avatar as xe, Tabs as ke, Tooltip as z, AutoComplete as Ne, Input as Ie, Segmented as Se, Menu as Q, Result as ne, Space as Te, Typography as Le, Empty as U } from "antd";
6
+ import { useEffect as B, useState as S, useRef as $, useMemo as V, useCallback as M, createElement as re, memo as Z, cloneElement as Pe, Component as Me, Suspense as oe, lazy as Be } from "react";
7
+ import { useUserStore as Ee, useMenuViewStore as I, useMenuModelStore as De, useFavoriteStore as Fe, usePopupStore as se } from "../../stores/index.js";
8
+ import * as X from "@ant-design/icons";
9
+ import { UserOutlined as ze, StepBackwardOutlined as Ae, LeftOutlined as $e, RightOutlined as He, StepForwardOutlined as Oe, CloseOutlined as ae, MenuUnfoldOutlined as Re, MenuFoldOutlined as Ve, ExclamationCircleOutlined as Ge, WarningOutlined as We, StarOutlined as je, FolderOpenOutlined as _e, ReloadOutlined as ie, ExclamationCircleTwoTone as Ue } from "@ant-design/icons";
10
+ import { getCookie as Ke, getCurrentDateString as q, setCookie as Ze, THEME_COOKIE_NAME as J, getUserId as ee } from "../../utils/index.js";
11
+ import { useSensors as Ye, useSensor as Qe, PointerSensor as Xe, DndContext as qe, closestCenter as Je } from "@dnd-kit/core";
12
+ import { restrictToHorizontalAxis as et } from "@dnd-kit/modifiers";
13
+ import { arrayMove as tt, SortableContext as nt, horizontalListSortingStrategy as rt, useSortable as ot } from "@dnd-kit/sortable";
14
+ const te = "bwg-dot-line-wave-v4";
15
+ function st() {
16
+ if (typeof document > "u" || document.getElementById(te)) return;
17
+ const n = document.createElement("style");
18
+ n.id = te, n.textContent = `
19
+ .bwg-dotline {
20
+ display: inline-flex;
21
+ align-items: center;
22
+ gap: var(--bwg-gap, 12px);
23
+ height: calc(var(--bwg-size, 12px) + 2 * var(--bwg-amp, 12px));
24
+ line-height: 0;
25
+ }
26
+ .bwg-dotline .dot {
27
+ width: var(--bwg-size, 12px);
28
+ height: var(--bwg-size, 12px);
29
+ border-radius: 50%;
30
+ background: currentColor;
31
+ will-change: transform, opacity;
32
+ filter: drop-shadow(0 1px 2px rgba(0,0,0,.12));
33
+ animation: bwg-dotline-sine var(--bwg-speed, 780ms) linear infinite;
34
+ }
35
+
36
+ /* sin(θ) 근사: 0, 45, 90, 135, 180, 225, 270, 315, 360deg */
37
+ @keyframes bwg-dotline-sine {
38
+ 0% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
39
+ 12.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }
40
+ 25% { transform: translate3d(0, calc(-1 * var(--bwg-amp, 12px)), 0) scale(1.06); opacity: 1; }
41
+ 37.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }
42
+ 50% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
43
+ 62.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }
44
+ 75% { transform: translate3d(0, calc( 1 * var(--bwg-amp, 12px)), 0) scale(.96); opacity: .76; }
45
+ 87.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }
46
+ 100% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
47
+ }
48
+
49
+ @media (prefers-reduced-motion: reduce) {
50
+ .bwg-dotline .dot { animation: none; }
51
+ }
52
+ `, document.head.appendChild(n);
53
+ }
54
+ const at = ({
55
+ colors: n = ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
56
+ count: t,
57
+ size: r = 12,
58
+ gap: s = 10,
59
+ amp: a = 16,
60
+ speedMs: p = 900,
61
+ direction: y = "ltr",
62
+ phase: d = 0.7
63
+ }) => {
64
+ B(() => {
65
+ st();
66
+ }, []);
67
+ const h = t ?? n.length, u = Array.from({ length: h }), m = {
68
+ "--bwg-size": `${r}px`,
69
+ "--bwg-gap": `${s}px`,
70
+ "--bwg-amp": `${a}px`,
71
+ "--bwg-speed": `${p}ms`
72
+ }, C = p / h * d;
73
+ return /* @__PURE__ */ e(
74
+ "span",
75
+ {
76
+ className: "bwg-dotline",
77
+ role: "img",
78
+ "aria-label": "loading",
79
+ style: m,
80
+ children: u.map((o, i) => /* @__PURE__ */ e(
81
+ "span",
82
+ {
83
+ className: "dot",
84
+ style: {
85
+ backgroundColor: n[i % n.length],
86
+ animationDelay: y === "ltr" ? `${i * C}ms` : `${(h - 1 - i) * C}ms`
87
+ }
88
+ },
89
+ i
90
+ ))
91
+ }
92
+ );
93
+ }, Vt = ({
94
+ spin: n = null,
95
+ text: t = "인증중..."
96
+ }) => n ?? !0 ? /* @__PURE__ */ b(
97
+ "div",
98
+ {
99
+ style: {
100
+ position: "fixed",
101
+ height: "100vh",
102
+ left: 0,
103
+ right: 0,
104
+ top: 0,
105
+ display: "flex",
106
+ flexDirection: "column",
107
+ justifyContent: "center",
108
+ alignItems: "center",
109
+ gap: 8,
110
+ padding: "8px 12px",
111
+ background: "rgba(0,0,0,0.6)",
112
+ color: "#fff",
113
+ zIndex: 1e4
114
+ },
115
+ "aria-live": "polite",
116
+ "aria-busy": "true",
117
+ role: "status",
118
+ children: [
119
+ /* @__PURE__ */ e(
120
+ W,
121
+ {
122
+ indicator: /* @__PURE__ */ e(
123
+ at,
124
+ {
125
+ colors: ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
126
+ size: 12,
127
+ gap: 10,
128
+ amp: 16,
129
+ speedMs: 900,
130
+ phase: 0.75,
131
+ direction: "ltr"
132
+ }
133
+ )
134
+ }
135
+ ),
136
+ /* @__PURE__ */ e("span", { className: "bwg-spin-txt", style: { marginTop: "15px" }, children: t })
137
+ ]
138
+ }
139
+ ) : null, Gt = ({ routes: n, useCommonProvider: t = !0, useServiceProvider: r = !0 }) => {
140
+ let a = /* @__PURE__ */ b(he, { children: [
141
+ /* @__PURE__ */ e(_, { path: "/", element: /* @__PURE__ */ e(ge, { to: "/login" }) }),
142
+ /* @__PURE__ */ e(_, { path: "/login", element: n.login }),
143
+ /* @__PURE__ */ e(_, { path: "/main", element: n.main })
144
+ ] });
145
+ return r && (a = /* @__PURE__ */ e(de, { children: a })), t && (a = /* @__PURE__ */ e(ce, { children: a })), /* @__PURE__ */ e(be, { children: a });
146
+ }, { Content: it } = A, lt = ({
147
+ config: n = {},
148
+ children: t
149
+ }) => {
150
+ const r = {
151
+ wrapper: {
152
+ className: "content-wrapper",
153
+ ...n.wrapper
154
+ },
155
+ body: {
156
+ className: "content-body",
157
+ ...n.body
158
+ },
159
+ ...n
160
+ };
161
+ return /* @__PURE__ */ e(
162
+ it,
163
+ {
164
+ className: r.wrapper.className,
165
+ style: r.wrapper.style,
166
+ children: /* @__PURE__ */ e(ye, { children: /* @__PURE__ */ e(
167
+ "div",
168
+ {
169
+ className: r.body.className,
170
+ style: r.body.style,
171
+ children: t
172
+ }
173
+ ) })
174
+ }
175
+ );
176
+ }, dt = "data:image/svg+xml,%3csvg%20width='30'%20height='30'%20viewBox='0%200%2030%2030'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M11.9998%2019.9993V20.9993C11.9998%2021.3932%2012.0774%2021.7833%2012.2282%2022.1473C12.3789%2022.5112%2012.5999%2022.8419%2012.8785%2023.1205C13.157%2023.399%2013.4877%2023.62%2013.8517%2023.7708C14.2156%2023.9215%2014.6057%2023.9991%2014.9997%2023.9991C15.3936%2023.9991%2015.7837%2023.9215%2016.1477%2023.7708C16.5116%2023.62%2016.8423%2023.399%2017.1209%2023.1205C17.3994%2022.8419%2017.6204%2022.5112%2017.7712%2022.1473C17.9219%2021.7833%2017.9995%2021.3932%2017.9995%2020.9993V19.9993M20.9994%2011.9997C20.9994%2014.9996%2022.9993%2019.9993%2022.9993%2019.9993H7.00006C7.00006%2019.9993%208.99996%2015.9995%208.99996%2011.9997C8.99996%208.73187%2011.7318%206%2014.9997%206C18.2675%206%2020.9994%208.73187%2020.9994%2011.9997Z'%20stroke='%23485299'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e", ct = "data:image/svg+xml,%3csvg%20width='30'%20height='30'%20viewBox='0%200%2030%2030'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_93_4488)'%3e%3cpath%20d='M18%207H21C22.1046%207%2023%207.89543%2023%209V21C23%2022.1046%2022.1046%2023%2021%2023H18M11%2011L7%2015M7%2015L11%2019M7%2015L19%2015'%20stroke='%23485299'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_93_4488'%3e%3crect%20width='30'%20height='30'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e", ut = "data:image/svg+xml,%3csvg%20width='30'%20height='30'%20viewBox='0%200%2030%2030'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M14%206H16C16.5523%206%2017%206.44772%2017%207V7.56879C17%207.99659%2017.2871%208.36825%2017.6822%208.53228C18.0775%208.69638%2018.5377%208.63384%2018.8403%208.33123L19.2426%207.92891C19.6331%207.53838%2020.2663%207.53838%2020.6568%207.92891L22.071%209.34312C22.4616%209.73365%2022.4615%2010.3668%2022.071%2010.7573L21.6688%2011.1596C21.3661%2011.4622%2021.3036%2011.9225%2021.4677%2012.3177C21.6317%2012.7129%2022.0034%2013%2022.4313%2013L23%2013C23.5523%2013%2024%2013.4477%2024%2014V16C24%2016.5523%2023.5523%2017%2023%2017H22.4312C22.0034%2017%2021.6318%2017.2871%2021.4677%2017.6822C21.3036%2018.0775%2021.3661%2018.5377%2021.6688%2018.8403L22.071%2019.2426C22.4616%2019.6331%2022.4616%2020.2663%2022.071%2020.6568L20.6568%2022.071C20.2663%2022.4616%2019.6331%2022.4616%2019.2426%2022.071L18.8403%2021.6688C18.5377%2021.3661%2018.0775%2021.3036%2017.6822%2021.4677C17.2871%2021.6318%2017%2022.0034%2017%2022.4312V23C17%2023.5523%2016.5523%2024%2016%2024H14C13.4477%2024%2013%2023.5523%2013%2023V22.4313C13%2022.0034%2012.7129%2021.6317%2012.3177%2021.4677C11.9225%2021.3036%2011.4622%2021.3661%2011.1596%2021.6688L10.7573%2022.071C10.3668%2022.4616%209.73363%2022.4616%209.34311%2022.071L7.92889%2020.6568C7.53837%2020.2663%207.53837%2019.6331%207.92889%2019.2426L8.33123%2018.8403C8.63384%2018.5377%208.69638%2018.0775%208.53228%2017.6822C8.36825%2017.2871%207.99659%2017%207.56879%2017H7C6.44772%2017%206%2016.5523%206%2016V14C6%2013.4477%206.44772%2013%207%2013L7.56877%2013C7.99658%2013%208.36825%2012.7129%208.53229%2012.3178C8.6964%2011.9225%208.63386%2011.4623%208.33123%2011.1597L7.92891%2010.7573C7.53838%2010.3668%207.53838%209.73365%207.92891%209.34313L9.34312%207.92891C9.73365%207.53839%2010.3668%207.53839%2010.7573%207.92891L11.1597%208.33123C11.4623%208.63386%2011.9225%208.6964%2012.3178%208.53229C12.7129%208.36825%2013%207.99658%2013%207.56876V7C13%206.44772%2013.4477%206%2014%206Z'%20stroke='%23485299'%20stroke-width='1.5'/%3e%3cpath%20d='M17%2015C17%2016.1046%2016.1046%2017%2015%2017C13.8954%2017%2013%2016.1046%2013%2015C13%2013.8954%2013.8954%2013%2015%2013C16.1046%2013%2017%2013.8954%2017%2015Z'%20stroke='%23485299'%20stroke-width='1.5'/%3e%3c/svg%3e", { Header: mt } = A, P = {
177
+ light: {
178
+ headerBg: "#ffffff",
179
+ headerText: "#000000",
180
+ sidebarBg: "#ffffff",
181
+ sidebarText: "#000000",
182
+ buttonPrimary: "#1890ff",
183
+ buttonPrimaryHover: "#40a9ff",
184
+ buttonPrimaryActive: "#096dd9",
185
+ buttonDefault: "#ffffff",
186
+ buttonDefaultHover: "#f5f5f5",
187
+ buttonDefaultBorder: "#d9d9d9",
188
+ buttonPermissionBorder: "#bdb1ff"
189
+ },
190
+ dark: {
191
+ headerBg: "#4a4a4a",
192
+ headerText: "#ffffff",
193
+ sidebarBg: "#4a4a4a",
194
+ sidebarText: "#ffffff",
195
+ buttonPrimary: "#177ddc",
196
+ buttonPrimaryHover: "#1890ff",
197
+ buttonPrimaryActive: "#0958b5",
198
+ buttonDefault: "#434343",
199
+ buttonDefaultHover: "#303030",
200
+ buttonDefaultBorder: "#434343",
201
+ buttonPermissionBorder: "#bdb1ff"
202
+ },
203
+ blue: {
204
+ headerBg: "#4a90e2",
205
+ headerText: "#ffffff",
206
+ sidebarBg: "#4a90e2",
207
+ sidebarText: "#ffffff",
208
+ buttonPrimary: "#1890ff",
209
+ buttonPrimaryHover: "#40a9ff",
210
+ buttonPrimaryActive: "#096dd9",
211
+ buttonDefault: "#ffffff",
212
+ buttonDefaultHover: "#f0f8ff",
213
+ buttonDefaultBorder: "#4a90e2",
214
+ buttonPermissionBorder: "#bdb1ff"
215
+ },
216
+ modern: {
217
+ headerBg: "#f3f4ff",
218
+ headerText: "#333333",
219
+ sidebarBg: "#ffffff",
220
+ sidebarText: "#555555",
221
+ buttonPrimary: "#6449FC",
222
+ buttonPrimaryHover: "#6449FC",
223
+ buttonPrimaryActive: "#6449FC",
224
+ buttonDefault: "#ffffff",
225
+ buttonDefaultHover: "#f5f5f5",
226
+ buttonDefaultBorder: "#dddddd",
227
+ buttonPermissionBorder: "#bdb1ff"
228
+ }
229
+ }, pt = ({ config: n = {} }) => {
230
+ const t = {
231
+ wrapper: {
232
+ className: "header-wrapper",
233
+ ...n.wrapper
234
+ },
235
+ logo: {
236
+ gap: 10,
237
+ ...n.logo
238
+ },
239
+ right: {
240
+ gap: 14,
241
+ minWidth: 200,
242
+ avatar: {
243
+ width: 30,
244
+ height: 30,
245
+ ...n.right?.avatar
246
+ },
247
+ ...n.right
248
+ },
249
+ ...n
250
+ }, r = fe(), [s, a] = S("modern"), p = $(null), { logout: y } = Ee(), d = (o, i) => {
251
+ try {
252
+ if (!/^[a-zA-Z0-9-]+$/.test(o)) {
253
+ console.warn(`Invalid CSS variable name: ${o}`);
254
+ return;
255
+ }
256
+ if (!/^[#a-zA-Z0-9()\s,.-]+$/.test(i)) {
257
+ console.warn(`Invalid CSS variable value: ${i}`);
258
+ return;
259
+ }
260
+ document.documentElement.style.setProperty(o, i);
261
+ } catch (T) {
262
+ console.error("CSS variable setting failed:", T);
263
+ }
264
+ }, h = (o) => {
265
+ if (!P[o]) {
266
+ console.warn(`Invalid theme: ${o}`);
267
+ return;
268
+ }
269
+ a(o);
270
+ const i = { ...P[o] };
271
+ d("--header-bg", i.headerBg), d("--header-text", i.headerText), d("--sidebar-bg", i.sidebarBg), d("--sidebar-text", i.sidebarText), d("--button-primary", i.buttonPrimary), d("--button-primary-hover", i.buttonPrimaryHover), d("--button-primary-active", i.buttonPrimaryActive), d("--button-default", i.buttonDefault), d("--button-default-hover", i.buttonDefaultHover), d("--button-default-border", i.buttonDefaultBorder), d(
272
+ "--button-permission-border",
273
+ i.buttonPermissionBorder
274
+ ), p.current && p.current.setAttribute("data-theme", o), document.documentElement.setAttribute("data-theme", o), Ze(J, o, 30);
275
+ };
276
+ B(() => {
277
+ const o = Ke(J);
278
+ o && P[o] ? h(o) : h("modern");
279
+ }, []);
280
+ const u = () => ({ ...P[s] }).headerBg, m = () => {
281
+ y(), r("/login");
282
+ };
283
+ q ? q("HH:mm:ss") : (/* @__PURE__ */ new Date()).toLocaleTimeString("ko-KR");
284
+ const C = /* @__PURE__ */ b("div", { style: { padding: "8px 0" }, children: [
285
+ /* @__PURE__ */ b("div", { style: { marginBottom: "12px" }, children: [
286
+ /* @__PURE__ */ e(ve, { value: u(), disabled: !0, size: "small" }),
287
+ /* @__PURE__ */ e("span", { style: { marginLeft: "8px", fontSize: "12px" }, children: "현재 테마 색상" })
18
288
  ] }),
19
- /* @__PURE__ */ e("div", { className: "bwg-load-title", children: t }),
20
- r && /* @__PURE__ */ e("div", { className: "bwg-load-sub", children: r })
289
+ /* @__PURE__ */ b("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: [
290
+ /* @__PURE__ */ e(
291
+ x,
292
+ {
293
+ type: s === "modern" ? "primary" : "default",
294
+ size: "small",
295
+ onClick: () => h("modern"),
296
+ style: {
297
+ textAlign: "left",
298
+ backgroundColor: s === "modern" ? P.modern.headerBg : void 0,
299
+ color: s === "modern" ? P.modern.headerText : void 0
300
+ },
301
+ children: "모던"
302
+ },
303
+ "modern"
304
+ ),
305
+ Object.entries(P).filter(([o]) => o !== "modern").map(([o, i]) => /* @__PURE__ */ e(
306
+ x,
307
+ {
308
+ type: s === o ? "primary" : "default",
309
+ size: "small",
310
+ onClick: () => h(o),
311
+ style: {
312
+ textAlign: "left",
313
+ backgroundColor: s === o ? i.headerBg : void 0,
314
+ color: s === o ? i.headerText : void 0
315
+ },
316
+ children: o === "light" ? "라이트" : o === "dark" ? "다크" : o === "blue" ? "블루" : o
317
+ },
318
+ o
319
+ ))
320
+ ] })
21
321
  ] });
22
- }
23
- class W extends L {
24
- constructor(r) {
25
- super(r), this.resetError = () => {
322
+ return /* @__PURE__ */ b(
323
+ mt,
324
+ {
325
+ className: t.wrapper.className,
326
+ style: { ...t.wrapper.style },
327
+ children: [
328
+ t.logo && /* @__PURE__ */ e("div", { className: "header-left", children: /* @__PURE__ */ e(
329
+ "div",
330
+ {
331
+ className: "logo-container",
332
+ style: { gap: t.logo?.gap },
333
+ children: t.logo?.items
334
+ }
335
+ ) }),
336
+ /* @__PURE__ */ b(
337
+ "div",
338
+ {
339
+ className: "header-right",
340
+ style: {
341
+ gap: t.right?.gap,
342
+ minWidth: t.right?.minWidth
343
+ },
344
+ children: [
345
+ t.right?.items?.map((o, i) => /* @__PURE__ */ e("div", { children: o }, i)),
346
+ /* @__PURE__ */ e(
347
+ x,
348
+ {
349
+ type: "text",
350
+ icon: /* @__PURE__ */ e("img", { src: dt, alt: "알림" }),
351
+ className: "alarm-btn"
352
+ }
353
+ ),
354
+ /* @__PURE__ */ e(
355
+ we,
356
+ {
357
+ content: C,
358
+ title: "테마 설정",
359
+ trigger: "click",
360
+ placement: "bottomRight",
361
+ children: /* @__PURE__ */ e(
362
+ x,
363
+ {
364
+ type: "text",
365
+ icon: /* @__PURE__ */ e("img", { src: ut, alt: "개인설정" }),
366
+ className: "theme-btn"
367
+ }
368
+ )
369
+ }
370
+ ),
371
+ /* @__PURE__ */ e(
372
+ x,
373
+ {
374
+ type: "text",
375
+ icon: /* @__PURE__ */ e("img", { src: ct, alt: "로그아웃" }),
376
+ onClick: m,
377
+ className: "logout-btn"
378
+ }
379
+ ),
380
+ /* @__PURE__ */ e(
381
+ xe,
382
+ {
383
+ icon: /* @__PURE__ */ e(ze, {}),
384
+ className: "avatar",
385
+ style: {
386
+ width: t.right?.avatar?.width,
387
+ height: t.right?.avatar?.height
388
+ }
389
+ }
390
+ )
391
+ ]
392
+ }
393
+ )
394
+ ]
395
+ }
396
+ );
397
+ }, K = /* @__PURE__ */ Object.freeze({
398
+ Translate: {
399
+ toString(n) {
400
+ if (!n)
401
+ return;
402
+ const {
403
+ x: t,
404
+ y: r
405
+ } = n;
406
+ return "translate3d(" + (t ? Math.round(t) : 0) + "px, " + (r ? Math.round(r) : 0) + "px, 0)";
407
+ }
408
+ },
409
+ Scale: {
410
+ toString(n) {
411
+ if (!n)
412
+ return;
413
+ const {
414
+ scaleX: t,
415
+ scaleY: r
416
+ } = n;
417
+ return "scaleX(" + t + ") scaleY(" + r + ")";
418
+ }
419
+ },
420
+ Transform: {
421
+ toString(n) {
422
+ if (n)
423
+ return [K.Translate.toString(n), K.Scale.toString(n)].join(" ");
424
+ }
425
+ },
426
+ Transition: {
427
+ toString(n) {
428
+ let {
429
+ property: t,
430
+ duration: r,
431
+ easing: s
432
+ } = n;
433
+ return t + " " + r + "ms " + s;
434
+ }
435
+ }
436
+ }), ht = Z(
437
+ ({ className: n, ...t }) => {
438
+ const r = $(null), {
439
+ attributes: s,
440
+ listeners: a,
441
+ transform: p,
442
+ transition: y,
443
+ isDragging: d,
444
+ setNodeRef: h
445
+ } = ot({ id: t["data-node-key"] }), [u, m] = S();
446
+ B(() => {
447
+ const o = r.current;
448
+ if (o)
449
+ if (d) {
450
+ const i = Math.round(o.getBoundingClientRect().width);
451
+ m(i);
452
+ } else
453
+ m(void 0);
454
+ }, [d]);
455
+ const C = {
456
+ ...t.style,
457
+ transform: p ? K.Transform.toString(p) : void 0,
458
+ transition: y ?? "transform 0.16s ease",
459
+ cursor: "grab",
460
+ userSelect: "none",
461
+ willChange: "transform",
462
+ // ✅ 드래그 중 픽셀 폭 고정 (flex 재계산 억제)
463
+ width: u ?? void 0,
464
+ minWidth: u ?? void 0,
465
+ maxWidth: u ?? void 0,
466
+ flex: u !== void 0 ? "0 0 auto" : void 0
467
+ };
468
+ return Pe(t.children, {
469
+ ref: (o) => {
470
+ r.current !== o && (r.current = o), h(o);
471
+ },
472
+ style: C,
473
+ ...s,
474
+ ...a
475
+ });
476
+ }
477
+ ), gt = Z(function({
478
+ config: t,
479
+ isFirst: r,
480
+ isLast: s,
481
+ canCloseAll: a,
482
+ onFirst: p,
483
+ onPrev: y,
484
+ onNext: d,
485
+ onLast: h,
486
+ onCloseAll: u
487
+ }) {
488
+ return /* @__PURE__ */ b("div", { className: t.wrapper?.className, style: t.wrapper?.style, children: [
489
+ /* @__PURE__ */ e(
490
+ z,
491
+ {
492
+ title: "첫 번째 탭",
493
+ className: t.tooltip?.className,
494
+ style: t.tooltip?.style,
495
+ children: /* @__PURE__ */ e(
496
+ x,
497
+ {
498
+ className: t.buttons?.className,
499
+ style: t.buttons?.style,
500
+ size: "small",
501
+ icon: /* @__PURE__ */ e(Ae, {}),
502
+ onClick: p,
503
+ disabled: r
504
+ }
505
+ )
506
+ }
507
+ ),
508
+ /* @__PURE__ */ e(
509
+ z,
510
+ {
511
+ title: "이전 탭",
512
+ className: t.tooltip?.className,
513
+ style: t.tooltip?.style,
514
+ children: /* @__PURE__ */ e(
515
+ x,
516
+ {
517
+ className: t.buttons?.className,
518
+ style: t.buttons?.style,
519
+ size: "small",
520
+ icon: /* @__PURE__ */ e($e, {}),
521
+ onClick: y,
522
+ disabled: r
523
+ }
524
+ )
525
+ }
526
+ ),
527
+ /* @__PURE__ */ e(
528
+ z,
529
+ {
530
+ title: "다음 탭",
531
+ className: t.tooltip?.className,
532
+ style: t.tooltip?.style,
533
+ children: /* @__PURE__ */ e(
534
+ x,
535
+ {
536
+ className: t.buttons?.className,
537
+ style: t.buttons?.style,
538
+ size: "small",
539
+ icon: /* @__PURE__ */ e(He, {}),
540
+ onClick: d,
541
+ disabled: s
542
+ }
543
+ )
544
+ }
545
+ ),
546
+ /* @__PURE__ */ e(
547
+ z,
548
+ {
549
+ title: "마지막 탭",
550
+ className: t.tooltip?.className,
551
+ style: t.tooltip?.style,
552
+ children: /* @__PURE__ */ e(
553
+ x,
554
+ {
555
+ className: t.buttons?.className,
556
+ style: t.buttons?.style,
557
+ size: "small",
558
+ icon: /* @__PURE__ */ e(Oe, {}),
559
+ onClick: h,
560
+ disabled: s
561
+ }
562
+ )
563
+ }
564
+ ),
565
+ /* @__PURE__ */ e(
566
+ z,
567
+ {
568
+ title: "모든 탭 닫기",
569
+ className: t.tooltip?.className,
570
+ style: t.tooltip?.style,
571
+ children: /* @__PURE__ */ e(
572
+ x,
573
+ {
574
+ className: t.buttons?.className,
575
+ style: t.buttons?.style,
576
+ size: "small",
577
+ icon: /* @__PURE__ */ e(ae, {}),
578
+ onClick: u,
579
+ disabled: !a
580
+ }
581
+ )
582
+ }
583
+ )
584
+ ] });
585
+ }), ft = ({
586
+ config: n = {}
587
+ }) => {
588
+ const t = {
589
+ wrapper: {
590
+ className: "menu-tab-wrapper",
591
+ ...n?.wrapper
592
+ },
593
+ tabs: {
594
+ className: "menu-tabs",
595
+ ...n?.tabs
596
+ },
597
+ nav: {
598
+ wrapper: {
599
+ className: "menu-nav-wrapper",
600
+ ...n?.nav?.wrapper
601
+ },
602
+ buttons: {
603
+ className: "menu-nav-buttons",
604
+ ...n?.nav?.buttons
605
+ },
606
+ tooltip: {
607
+ className: "menu-nav-tooltip",
608
+ ...n?.nav?.tooltip
609
+ },
610
+ ...n?.nav
611
+ },
612
+ ...n
613
+ }, r = I((c) => c.tabs), s = I((c) => c.activeMenuId), a = I((c) => c.focusTab), p = I((c) => c.closeTab), y = I((c) => c.reorderTabs), d = Ye(
614
+ Qe(Xe, { activationConstraint: { distance: 6 } })
615
+ ), h = (c) => {
616
+ a(c);
617
+ }, u = (c, k) => {
618
+ k === "remove" && typeof c == "string" && p(c);
619
+ }, m = () => {
620
+ r.length > 0 && a(r[0].key);
621
+ }, C = () => {
622
+ if (!s || r.length <= 1) return;
623
+ const c = r.findIndex((k) => k.key === s);
624
+ c > 0 && a(r[c - 1].key);
625
+ }, o = () => {
626
+ if (!s || r.length <= 1) return;
627
+ const c = r.findIndex((k) => k.key === s);
628
+ c < r.length - 1 && a(r[c + 1].key);
629
+ }, i = () => {
630
+ r.length > 0 && a(r[r.length - 1].key);
631
+ }, T = () => {
632
+ r.forEach((c) => {
633
+ p(c.key);
634
+ });
635
+ }, D = s ? r.findIndex((c) => c.key === s) : -1, H = D === 0, F = D === r.length - 1, j = V(
636
+ () => r.map((c) => ({
637
+ key: c.key,
638
+ label: c.label,
639
+ closable: !0,
640
+ children: null
641
+ // 컨텐츠는 Main 쪽에서 렌더 → 여기선 헤더만 필요
642
+ })),
643
+ [r]
644
+ ), O = M(
645
+ ({ active: c, over: k }) => {
646
+ if (!k || c.id === k.id) return;
647
+ const N = r.findIndex((l) => l.key === c.id), L = r.findIndex((l) => l.key === k.id);
648
+ if (N < 0 || L < 0 || N === L) return;
649
+ const g = r.map((l) => l.key), f = tt(g, N, L);
650
+ y?.(f);
651
+ },
652
+ [r, y]
653
+ ), R = M(
654
+ (c, k) => /* @__PURE__ */ e(
655
+ qe,
656
+ {
657
+ sensors: d,
658
+ onDragEnd: O,
659
+ collisionDetection: Je,
660
+ modifiers: [et],
661
+ children: /* @__PURE__ */ e(
662
+ nt,
663
+ {
664
+ items: r.map((N) => N.key),
665
+ strategy: rt,
666
+ children: /* @__PURE__ */ e(k, { ...c, children: (N) => /* @__PURE__ */ re(
667
+ ht,
668
+ {
669
+ ...N.props,
670
+ key: N.key
671
+ },
672
+ N
673
+ ) })
674
+ }
675
+ )
676
+ }
677
+ ),
678
+ [d, O, r]
679
+ );
680
+ return /* @__PURE__ */ e(
681
+ "div",
682
+ {
683
+ className: t.wrapper.className,
684
+ style: {
685
+ ...t.wrapper.style,
686
+ display: r.length === 0 ? "none" : "block"
687
+ },
688
+ children: /* @__PURE__ */ e(
689
+ ke,
690
+ {
691
+ type: "editable-card",
692
+ activeKey: s || void 0,
693
+ onChange: h,
694
+ onEdit: u,
695
+ className: t.tabs.className,
696
+ style: t.tabs.style,
697
+ hideAdd: !0,
698
+ items: j,
699
+ tabBarExtraContent: /* @__PURE__ */ e(
700
+ gt,
701
+ {
702
+ config: t?.nav,
703
+ isFirst: !!H,
704
+ isLast: !!F,
705
+ canCloseAll: r.length > 0,
706
+ onFirst: m,
707
+ onPrev: C,
708
+ onNext: o,
709
+ onLast: i,
710
+ onCloseAll: T
711
+ }
712
+ ),
713
+ renderTabBar: R
714
+ }
715
+ )
716
+ }
717
+ );
718
+ }, { Sider: bt } = A, yt = ({
719
+ config: n = {}
720
+ }) => {
721
+ const t = {
722
+ collapsed: !1,
723
+ width: 230,
724
+ menuGubunCode: {
725
+ mainMenu: "MAIN",
726
+ subMenu: "SUB",
727
+ program: "PRGM",
728
+ ...n?.menuGubunCode
729
+ },
730
+ className: {
731
+ wrapper: "side-wrapper",
732
+ search: "sider-search-ipt",
733
+ segmented: {
734
+ wrapper: "sider-segmented",
735
+ item: "sider-segment-item",
736
+ ...n?.className?.segmented
737
+ },
738
+ sider: {
739
+ content: "sider-content",
740
+ loading: "sider-loading",
741
+ loadingText: "sider-loading-text",
742
+ error: "sider-error",
743
+ errorIcon: "sider-error-icon",
744
+ errorText: "sider-error-text",
745
+ menu: "sider-menu",
746
+ menuContainer: "sider-menu-container",
747
+ ...n?.className?.sider
748
+ },
749
+ ...n?.className
750
+ },
751
+ style: {
752
+ search: {
753
+ placeholder: "메뉴명, 메뉴번호 검색...",
754
+ height: 30,
755
+ ...n?.style?.search
756
+ },
757
+ ...n?.style
758
+ },
759
+ ...n
760
+ };
761
+ console.log("@@ 사이드바 config : ", n);
762
+ const [r, s] = S(""), [a, p] = S(
763
+ "category"
764
+ ), { activeMenuId: y, sidebarCollapsed: d, openTabFromMenu: h, toggleSidebar: u } = I(), { menuList: m, isLoading: C, error: o, findMenuById: i } = De(), { nodes: T, treeNodes: D, loadFavoritesIfNeeded: H } = Fe(), F = V(() => {
765
+ const g = [], f = (l, w = 0) => {
766
+ if (l.menuGbCd === t.menuGubunCode.program && l.scrnPath) {
767
+ const v = " ".repeat(w), E = l.menuNo || "";
768
+ g.push({
769
+ value: l.menuId,
770
+ label: /* @__PURE__ */ b(
771
+ "div",
772
+ {
773
+ style: {
774
+ display: "flex",
775
+ justifyContent: "space-between",
776
+ alignItems: "center"
777
+ },
778
+ children: [
779
+ /* @__PURE__ */ b("span", { children: [
780
+ v,
781
+ l.menuNm
782
+ ] }),
783
+ /* @__PURE__ */ e(
784
+ "span",
785
+ {
786
+ style: {
787
+ fontSize: "11px",
788
+ color: "#999",
789
+ backgroundColor: "#f0f0f0",
790
+ padding: "2px 6px",
791
+ borderRadius: "3px",
792
+ marginLeft: "8px"
793
+ },
794
+ children: E
795
+ }
796
+ )
797
+ ]
798
+ }
799
+ ),
800
+ menuItem: l
801
+ });
802
+ }
803
+ l.children && l.children.length > 0 && l.children.forEach((v) => f(v, w + 1));
804
+ };
805
+ return m.forEach((l) => f(l)), g;
806
+ }, [m]), j = V(() => r.trim() ? F.filter((g) => {
807
+ const f = g.menuItem.menuNm.toLowerCase(), l = String(g.menuItem.menuNo || "미지정").toLowerCase(), w = r.toLowerCase();
808
+ return f.includes(w) || l.includes(w);
809
+ }) : [], [F, r]), O = (g) => {
810
+ if (!g || typeof g != "string") {
811
+ console.warn("Invalid menu selection value:", g);
812
+ return;
813
+ }
814
+ if (!/^[a-zA-Z0-9_-]+$/.test(g)) {
815
+ console.warn("Invalid menu ID format:", g);
816
+ return;
817
+ }
818
+ const f = F.find(
819
+ (l) => l.value === g
820
+ );
821
+ if (f) {
822
+ const { menuItem: l } = f;
823
+ if (!l || !l.menuId || !l.menuNm) {
824
+ console.warn("Invalid menu item:", l);
825
+ return;
826
+ }
827
+ l.menuGbCd === t.menuGubunCode.program && l.scrnPath ? (console.log(
828
+ "✅ 검색으로 프로그램 메뉴 선택 - 탭 추가 및 setCurrentProgram 호출"
829
+ ), console.log(
830
+ "메뉴명:",
831
+ l.menuNm,
832
+ "경로:",
833
+ l.scrnPath,
834
+ "scrnId:",
835
+ l.scrnId
836
+ ), h(l)) : (l.menuGbCd === t.menuGubunCode.mainMenu || l.menuGbCd === t.menuGubunCode.subMenu) && (console.log("❌ 검색으로 메인/서브 메뉴 선택 - 이벤트 무시"), console.log("메뉴명:", l.menuNm, "menuGbCd:", l.menuGbCd)), s("");
837
+ }
838
+ }, R = M(
839
+ (g) => {
840
+ const f = i(g);
841
+ f?.menuGbCd === t.menuGubunCode.program && (console.log(
842
+ "메뉴명:",
843
+ f.menuNm,
844
+ "경로:",
845
+ f.scrnPath,
846
+ "scrnId:",
847
+ f.scrnId
848
+ ), h(f));
849
+ },
850
+ [i, h]
851
+ ), c = M((g) => g.map((f) => ({
852
+ key: f.menuId,
853
+ label: /* @__PURE__ */ e(
854
+ "div",
855
+ {
856
+ style: {
857
+ display: "flex",
858
+ justifyContent: "space-between",
859
+ alignItems: "center"
860
+ },
861
+ children: /* @__PURE__ */ e("span", { children: f.menuNm })
862
+ }
863
+ ),
864
+ icon: k(f.iconCd, f.menuGbCd),
865
+ children: f.children && f.children.length > 0 ? c(f.children) : void 0
866
+ })), []), k = (g, f) => {
867
+ if (g) {
868
+ const l = X[g];
869
+ if (l)
870
+ return /* @__PURE__ */ e(l, {});
871
+ }
872
+ if (f)
873
+ switch (f) {
874
+ case t.menuGubunCode.mainMenu:
875
+ return /* @__PURE__ */ e(X.HomeOutlined, {});
876
+ case t.menuGubunCode.subMenu:
877
+ return null;
878
+ case t.menuGubunCode.program:
879
+ return null;
880
+ default:
881
+ return null;
882
+ }
883
+ return null;
884
+ }, N = M(
885
+ (g) => {
886
+ if (m.length === 0) return [];
887
+ const f = (w) => {
888
+ if (w)
889
+ return typeof w == "string" ? T[w] : w;
890
+ }, l = (w) => {
891
+ if (w.type === "M") {
892
+ const v = w, E = i(v.menuId) || void 0, Y = !!E, le = Y ? `${E?.menuNm ?? v.menuNm ?? v.menuId}` : `${v.menuNm ?? v.menuId} (삭제됨)`;
893
+ return {
894
+ key: v.menuId,
895
+ label: le,
896
+ icon: Y ? void 0 : /* @__PURE__ */ e(We, { style: { color: "#faad14" } })
897
+ };
898
+ } else {
899
+ const v = w, E = (v.children ?? []).map(f).filter(Boolean).map(l);
900
+ return {
901
+ key: v.bkmkId,
902
+ label: v.bkmkNm ?? v.bkmkId,
903
+ icon: v.prntBkmkId === "-" ? /* @__PURE__ */ e(je, {}) : /* @__PURE__ */ e(_e, {}),
904
+ children: E
905
+ // 빈 배열이면 자동으로 말아줌
906
+ };
907
+ }
908
+ };
909
+ return g.map(l);
910
+ },
911
+ [i, T, m]
912
+ ), L = V(
913
+ () => N(D),
914
+ [N, D, T]
915
+ );
916
+ return B(() => {
917
+ ee() && H(ee());
918
+ }, [H]), B(() => {
919
+ a === "category" && s("");
920
+ }, [a]), /* @__PURE__ */ b(
921
+ bt,
922
+ {
923
+ className: t.className.wrapper,
924
+ collapsed: t.collapsed || d,
925
+ trigger: null,
926
+ width: t.width || 230,
927
+ children: [
928
+ /* @__PURE__ */ e(
929
+ "div",
930
+ {
931
+ style: {
932
+ position: "absolute",
933
+ top: "9px",
934
+ right: "-25px",
935
+ zIndex: "1000",
936
+ width: "25px",
937
+ height: "41px",
938
+ backgroundColor: "#ffffff",
939
+ border: "1px solid #dddddd",
940
+ borderRadius: "0 10px 10px 0",
941
+ display: "flex",
942
+ alignItems: "center",
943
+ justifyContent: "center",
944
+ cursor: "pointer",
945
+ boxShadow: "2px 2px 2px rgba(0, 0, 0, 0.05)",
946
+ transition: "all 0.3s ease"
947
+ },
948
+ children: /* @__PURE__ */ e(
949
+ x,
950
+ {
951
+ type: "text",
952
+ icon: t.collapsed || d ? /* @__PURE__ */ e(Re, {}) : /* @__PURE__ */ e(Ve, {}),
953
+ style: {
954
+ fontSize: "12px",
955
+ color: "#787878",
956
+ padding: 0,
957
+ width: "100%",
958
+ height: "100%",
959
+ display: "flex",
960
+ alignItems: "center",
961
+ justifyContent: "center"
962
+ },
963
+ onClick: u
964
+ }
965
+ )
966
+ }
967
+ ),
968
+ !(t.collapsed || d) && /* @__PURE__ */ e(
969
+ "div",
970
+ {
971
+ style: {
972
+ padding: 10
973
+ },
974
+ children: /* @__PURE__ */ e(
975
+ Ne,
976
+ {
977
+ value: r,
978
+ options: j,
979
+ onSelect: O,
980
+ onSearch: s,
981
+ style: { width: "100%" },
982
+ allowClear: !0,
983
+ children: /* @__PURE__ */ e(
984
+ Ie,
985
+ {
986
+ className: t.className.search,
987
+ placeholder: t.style.search.placeholder,
988
+ prefix: /* @__PURE__ */ e(
989
+ "svg",
990
+ {
991
+ xmlns: "http://www.w3.org/2000/svg",
992
+ width: "20",
993
+ height: "20",
994
+ viewBox: "0 0 20 20",
995
+ fill: "none",
996
+ children: /* @__PURE__ */ e(
997
+ "path",
998
+ {
999
+ d: "M16.4972 16.6667L13.0355 13.1694M14.8475 8.75C14.8475 5.29822 12.0777 2.5 8.66105 2.5C5.24437 2.5 2.47461 5.29822 2.47461 8.75C2.47461 12.2018 5.24437 15 8.66105 15C12.0777 15 14.8475 12.2018 14.8475 8.75Z",
1000
+ stroke: "#5F5F5F",
1001
+ strokeWidth: "1.5",
1002
+ strokeLinecap: "round",
1003
+ strokeLinejoin: "round"
1004
+ }
1005
+ )
1006
+ }
1007
+ ),
1008
+ size: "middle",
1009
+ style: {
1010
+ height: t.style.search.height || 30
1011
+ }
1012
+ }
1013
+ )
1014
+ }
1015
+ )
1016
+ }
1017
+ ),
1018
+ !(t.collapsed || d) && /* @__PURE__ */ e(
1019
+ "div",
1020
+ {
1021
+ style: {
1022
+ width: "100%",
1023
+ padding: "0px 10px",
1024
+ marginBottom: "10px"
1025
+ },
1026
+ children: /* @__PURE__ */ e(
1027
+ Se,
1028
+ {
1029
+ className: t.className.segmented.wrapper,
1030
+ options: [
1031
+ {
1032
+ label: /* @__PURE__ */ b(G, { children: [
1033
+ /* @__PURE__ */ e("span", { className: t.className.segmented.item, children: /* @__PURE__ */ b(
1034
+ "svg",
1035
+ {
1036
+ xmlns: "http://www.w3.org/2000/svg",
1037
+ width: "16",
1038
+ height: "16",
1039
+ viewBox: "0 0 16 16",
1040
+ fill: "none",
1041
+ children: [
1042
+ /* @__PURE__ */ e(
1043
+ "path",
1044
+ {
1045
+ d: "M2.46979 6.90625H13.0298C13.7298 6.90625 14.2965 7.47292 14.2965 8.17292V13.5396H1.20312V8.17292C1.20312 7.47292 1.76979 6.90625 2.46979 6.90625Z",
1046
+ stroke: "currentColor",
1047
+ strokeWidth: "1.5",
1048
+ strokeLinecap: "round",
1049
+ strokeLinejoin: "round"
1050
+ }
1051
+ ),
1052
+ /* @__PURE__ */ e(
1053
+ "path",
1054
+ {
1055
+ d: "M2.76318 4.70626C2.76318 4.00626 3.18318 3.75293 3.69652 3.75293H11.8032C12.3165 3.75293 12.7365 4.00626 12.7365 4.70626",
1056
+ stroke: "currentColor",
1057
+ strokeWidth: "1.5",
1058
+ strokeLinecap: "round",
1059
+ strokeLinejoin: "round"
1060
+ }
1061
+ ),
1062
+ /* @__PURE__ */ e(
1063
+ "path",
1064
+ {
1065
+ d: "M4.71631 1.45996H10.783",
1066
+ stroke: "currentColor",
1067
+ strokeWidth: "1.5",
1068
+ strokeLinecap: "round",
1069
+ strokeLinejoin: "round"
1070
+ }
1071
+ )
1072
+ ]
1073
+ }
1074
+ ) }),
1075
+ "카테고리"
1076
+ ] }),
1077
+ value: "category"
1078
+ },
1079
+ {
1080
+ label: /* @__PURE__ */ b(G, { children: [
1081
+ /* @__PURE__ */ e("span", { className: t.className.segmented.item, children: /* @__PURE__ */ e(
1082
+ "svg",
1083
+ {
1084
+ xmlns: "http://www.w3.org/2000/svg",
1085
+ width: "15",
1086
+ height: "15",
1087
+ viewBox: "0 0 15 15",
1088
+ fill: "none",
1089
+ children: /* @__PURE__ */ e(
1090
+ "path",
1091
+ {
1092
+ d: "M7.11329 1.33356C7.32084 0.888813 7.66676 0.888813 7.88296 1.33356L9.258 4.25619C9.46556 4.70094 10.0277 5.12753 10.4947 5.20014L13.5647 5.67212C14.0317 5.74473 14.1441 6.08964 13.7982 6.43455L11.5757 8.70367C11.2384 9.04858 11.0222 9.73839 11.1 10.2285L11.6276 13.4325C11.7054 13.9227 11.4287 14.1405 11.0049 13.9045L8.26348 12.3887C7.83972 12.1527 7.15653 12.1527 6.73277 12.3887L3.99134 13.9045C3.56759 14.1405 3.29085 13.9227 3.36868 13.4325L3.89621 10.2285C3.97405 9.73839 3.76649 9.04858 3.42057 8.70367L1.19802 6.43455C0.86075 6.08964 0.964526 5.74473 1.43152 5.67212L4.50158 5.20014C4.96857 5.12753 5.5307 4.70094 5.73825 4.25619L7.11329 1.33356Z",
1093
+ stroke: "currentColor",
1094
+ strokeWidth: "1.5",
1095
+ strokeMiterlimit: "4"
1096
+ }
1097
+ )
1098
+ }
1099
+ ) }),
1100
+ "즐겨찾기"
1101
+ ] }),
1102
+ value: "favorite"
1103
+ }
1104
+ ],
1105
+ value: a,
1106
+ onChange: (g) => {
1107
+ p(g);
1108
+ },
1109
+ style: {
1110
+ width: "100%"
1111
+ },
1112
+ block: !0
1113
+ }
1114
+ )
1115
+ }
1116
+ ),
1117
+ /* @__PURE__ */ b("div", { className: t.className.sider.content, children: [
1118
+ C && /* @__PURE__ */ b("div", { className: t.className.sider.loading, children: [
1119
+ /* @__PURE__ */ e(W, { size: "default" }),
1120
+ /* @__PURE__ */ e("div", { className: t.className.sider.loadingText, children: "메뉴 로딩 중..." })
1121
+ ] }),
1122
+ o && /* @__PURE__ */ b("div", { className: t.className.sider.error, children: [
1123
+ /* @__PURE__ */ e(
1124
+ Ge,
1125
+ {
1126
+ className: t.className.sider.errorIcon
1127
+ }
1128
+ ),
1129
+ /* @__PURE__ */ e("div", { className: t.className.sider.errorText, children: "메뉴 로드 실패" })
1130
+ ] }),
1131
+ !C && !o && a === "category" && m.length === 0 && /* @__PURE__ */ e(
1132
+ "div",
1133
+ {
1134
+ style: {
1135
+ padding: "16px",
1136
+ textAlign: "center",
1137
+ color: "#666",
1138
+ fontSize: "12px"
1139
+ },
1140
+ children: "메뉴가 없습니다"
1141
+ }
1142
+ ),
1143
+ !C && !o && a === "favorite" && L.length === 0 && /* @__PURE__ */ e(
1144
+ "div",
1145
+ {
1146
+ style: {
1147
+ padding: "16px",
1148
+ textAlign: "center",
1149
+ color: "#666",
1150
+ fontSize: "12px"
1151
+ },
1152
+ children: "즐겨찾기된 메뉴가 없습니다"
1153
+ }
1154
+ ),
1155
+ !C && !o && a === "category" && m.length > 0 && /* @__PURE__ */ e("div", { className: t.className.sider.menuContainer, children: /* @__PURE__ */ e(
1156
+ Q,
1157
+ {
1158
+ theme: "light",
1159
+ mode: "inline",
1160
+ items: c(m),
1161
+ className: t.className.sider.menu,
1162
+ selectedKeys: [y || ""],
1163
+ onClick: (g) => R(g.key)
1164
+ }
1165
+ ) }),
1166
+ !C && !o && a === "favorite" && L.length > 0 && /* @__PURE__ */ e("div", { className: t.className.sider.menuContainer, children: /* @__PURE__ */ e(
1167
+ Q,
1168
+ {
1169
+ theme: "light",
1170
+ mode: "inline",
1171
+ items: L,
1172
+ className: t.className.sider.menu,
1173
+ selectedKeys: [y || ""],
1174
+ onClick: (g) => R(g.key)
1175
+ }
1176
+ ) })
1177
+ ] })
1178
+ ]
1179
+ }
1180
+ );
1181
+ };
1182
+ class Ct extends Me {
1183
+ constructor(t) {
1184
+ super(t), this.resetError = () => {
26
1185
  this.setState({ hasError: !1, error: void 0, errorInfo: void 0 });
27
1186
  }, this.state = { hasError: !1 };
28
1187
  }
29
- static getDerivedStateFromError(r) {
30
- return { hasError: !0, error: r };
1188
+ static getDerivedStateFromError(t) {
1189
+ return { hasError: !0, error: t };
31
1190
  }
32
- componentDidCatch(r, n) {
33
- console.error("ErrorBound caught an error:", r, n), this.setState({
34
- error: r,
35
- errorInfo: n
1191
+ componentDidCatch(t, r) {
1192
+ console.error("ErrorBound caught an error:", t, r), this.setState({
1193
+ error: t,
1194
+ errorInfo: r
36
1195
  });
37
1196
  }
38
1197
  render() {
39
- return this.state.hasError ? this.props.fallback ? this.props.fallback : /* @__PURE__ */ a(
1198
+ return this.state.hasError ? this.props.fallback ? this.props.fallback : /* @__PURE__ */ b(
40
1199
  "div",
41
1200
  {
42
1201
  style: {
@@ -50,17 +1209,17 @@ class W extends L {
50
1209
  },
51
1210
  children: [
52
1211
  /* @__PURE__ */ e(
53
- f,
1212
+ ne,
54
1213
  {
55
1214
  status: "error",
56
1215
  title: "컴포넌트 로딩 중 오류가 발생했습니다",
57
1216
  subTitle: this.state.error ? `오류 내용: ${this.state.error.message}` : "알 수 없는 오류가 발생했습니다",
58
1217
  extra: [
59
1218
  /* @__PURE__ */ e(
60
- y,
1219
+ x,
61
1220
  {
62
1221
  type: "primary",
63
- icon: /* @__PURE__ */ e(E, {}),
1222
+ icon: /* @__PURE__ */ e(ie, {}),
64
1223
  onClick: this.resetError,
65
1224
  style: { marginRight: 8 },
66
1225
  children: "다시 시도"
@@ -70,7 +1229,7 @@ class W extends L {
70
1229
  ]
71
1230
  }
72
1231
  ),
73
- this.state.error && /* @__PURE__ */ a(
1232
+ this.state.error && /* @__PURE__ */ b(
74
1233
  "details",
75
1234
  {
76
1235
  style: {
@@ -105,184 +1264,15 @@ class W extends L {
105
1264
  ) : this.props.children;
106
1265
  }
107
1266
  }
108
- const M = (t) => ({
109
- position: "absolute",
110
- inset: 0,
111
- visibility: t ? "visible" : "hidden",
112
- opacity: t ? 1 : 0,
113
- transition: "opacity 0.2s ease-in-out",
114
- pointerEvents: t ? "auto" : "none"
115
- }), _ = ({ once: t = !0 }) => {
116
- const { lock: r } = z(), n = b(!1);
117
- return x(() => {
118
- t && n.current || (n.current = !0, r());
119
- }, [t, r]), null;
120
- }, re = ({ isActive: t, flagged: r, tabKey: n, onUnlock: o, children: s }) => {
121
- const i = b(null), [p, u] = N(!1), l = B((c) => {
122
- i.current = c, u(!!c);
123
- }, []), h = M(t);
124
- return /* @__PURE__ */ e("div", { ref: l, style: h, children: p ? /* @__PURE__ */ a(
125
- w,
126
- {
127
- idleMs: Number.POSITIVE_INFINITY,
128
- persistLocked: !1,
129
- overlayScope: "scoped",
130
- overlayPosition: "absolute",
131
- eventTarget: i.current,
132
- overlayId: `tab-overlay-${n}`,
133
- onUnlock: async () => (o(), !0),
134
- children: [
135
- t && r ? /* @__PURE__ */ e(_, { once: !0 }) : null,
136
- s
137
- ]
138
- }
139
- ) : s });
140
- }, g = "bwg-dot-line-wave-v4";
141
- function A() {
142
- if (typeof document > "u" || document.getElementById(g)) return;
143
- const t = document.createElement("style");
144
- t.id = g, t.textContent = `
145
- .bwg-dotline {
146
- display: inline-flex;
147
- align-items: center;
148
- gap: var(--bwg-gap, 12px);
149
- height: calc(var(--bwg-size, 12px) + 2 * var(--bwg-amp, 12px));
150
- line-height: 0;
151
- }
152
- .bwg-dotline .dot {
153
- width: var(--bwg-size, 12px);
154
- height: var(--bwg-size, 12px);
155
- border-radius: 50%;
156
- background: currentColor;
157
- will-change: transform, opacity;
158
- filter: drop-shadow(0 1px 2px rgba(0,0,0,.12));
159
- animation: bwg-dotline-sine var(--bwg-speed, 780ms) linear infinite;
160
- }
161
-
162
- /* sin(θ) 근사: 0, 45, 90, 135, 180, 225, 270, 315, 360deg */
163
- @keyframes bwg-dotline-sine {
164
- 0% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
165
- 12.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }
166
- 25% { transform: translate3d(0, calc(-1 * var(--bwg-amp, 12px)), 0) scale(1.06); opacity: 1; }
167
- 37.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }
168
- 50% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
169
- 62.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }
170
- 75% { transform: translate3d(0, calc( 1 * var(--bwg-amp, 12px)), 0) scale(.96); opacity: .76; }
171
- 87.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }
172
- 100% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
173
- }
174
-
175
- @media (prefers-reduced-motion: reduce) {
176
- .bwg-dotline .dot { animation: none; }
177
- }
178
- `, document.head.appendChild(t);
179
- }
180
- const U = ({
181
- colors: t = ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
182
- count: r,
183
- size: n = 12,
184
- gap: o = 10,
185
- amp: s = 16,
186
- speedMs: i = 900,
187
- direction: p = "ltr",
188
- phase: u = 0.7
1267
+ const vt = ({
1268
+ isActive: n,
1269
+ instance: t,
1270
+ params: r
189
1271
  }) => {
190
- x(() => {
191
- A();
192
- }, []);
193
- const l = r ?? t.length, h = Array.from({ length: l }), c = {
194
- "--bwg-size": `${n}px`,
195
- "--bwg-gap": `${o}px`,
196
- "--bwg-amp": `${s}px`,
197
- "--bwg-speed": `${i}ms`
198
- }, m = i / l * u;
199
- return /* @__PURE__ */ e(
200
- "span",
201
- {
202
- className: "bwg-dotline",
203
- role: "img",
204
- "aria-label": "loading",
205
- style: c,
206
- children: h.map((q, d) => /* @__PURE__ */ e(
207
- "span",
208
- {
209
- className: "dot",
210
- style: {
211
- backgroundColor: t[d % t.length],
212
- animationDelay: p === "ltr" ? `${d * m}ms` : `${(l - 1 - d) * m}ms`
213
- }
214
- },
215
- d
216
- ))
217
- }
218
- );
219
- }, k = ({
220
- spin: t = null,
221
- text: r = "인증중..."
222
- }) => {
223
- const { busy: n } = v();
224
- return t ?? n ? /* @__PURE__ */ a(
225
- "div",
226
- {
227
- style: {
228
- position: "fixed",
229
- height: "100vh",
230
- left: 0,
231
- right: 0,
232
- top: 0,
233
- display: "flex",
234
- flexDirection: "column",
235
- justifyContent: "center",
236
- alignItems: "center",
237
- gap: 8,
238
- padding: "8px 12px",
239
- background: "rgba(0,0,0,0.6)",
240
- color: "#fff",
241
- zIndex: 1e4
242
- },
243
- "aria-live": "polite",
244
- "aria-busy": "true",
245
- role: "status",
246
- children: [
247
- /* @__PURE__ */ e(
248
- I,
249
- {
250
- indicator: /* @__PURE__ */ e(
251
- U,
252
- {
253
- colors: ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
254
- size: 12,
255
- gap: 10,
256
- amp: 16,
257
- speedMs: 900,
258
- phase: 0.75,
259
- direction: "ltr"
260
- }
261
- )
262
- }
263
- ),
264
- /* @__PURE__ */ e("span", { className: "bwg-spin-txt", style: { marginTop: "15px" }, children: r })
265
- ]
266
- }
267
- ) : null;
268
- }, ne = () => {
269
- const { reauthWithPin: t } = v();
270
- return /* @__PURE__ */ e(w, { idleMs: 30 * 6e4, onUnlock: async (r) => V ? !0 : !!r && await t(r), children: /* @__PURE__ */ e(T, { getPopupContainer: () => document.getElementById("app-shell") || document.body, children: /* @__PURE__ */ a("div", { id: "app-shell", children: [
271
- /* @__PURE__ */ e(k, {}),
272
- /* @__PURE__ */ e(C, {})
273
- ] }) }) });
274
- }, ae = () => /* @__PURE__ */ a("div", { children: [
275
- /* @__PURE__ */ e(k, {}),
276
- /* @__PURE__ */ e(C, {})
277
- ] }), Y = ({
278
- isActive: t,
279
- instance: r,
280
- params: n
281
- }) => {
282
- const { activeMenuId: o, closeTab: s } = j(), i = () => {
283
- o && s(o);
1272
+ const { activeMenuId: s, closeTab: a } = I(), p = () => {
1273
+ s && a(s);
284
1274
  };
285
- return r ? /* @__PURE__ */ e(
1275
+ return t ? /* @__PURE__ */ e(
286
1276
  "div",
287
1277
  {
288
1278
  style: {
@@ -291,12 +1281,12 @@ const U = ({
291
1281
  left: 0,
292
1282
  width: "100%",
293
1283
  height: "100%",
294
- visibility: t ? "visible" : "hidden",
295
- opacity: t ? 1 : 0,
1284
+ visibility: n ? "visible" : "hidden",
1285
+ opacity: n ? 1 : 0,
296
1286
  transition: "opacity 0.2s ease-in-out",
297
- pointerEvents: t ? "auto" : "none"
1287
+ pointerEvents: n ? "auto" : "none"
298
1288
  },
299
- children: /* @__PURE__ */ e(W, { children: /* @__PURE__ */ e($, { fallback: null, children: r && O(r, { params: n }) }) })
1289
+ children: /* @__PURE__ */ e(Ct, { children: /* @__PURE__ */ e(oe, { fallback: null, children: t && re(t, { params: r }) }) })
300
1290
  }
301
1291
  ) : /* @__PURE__ */ e(
302
1292
  "div",
@@ -310,10 +1300,10 @@ const U = ({
310
1300
  display: "flex",
311
1301
  justifyContent: "center",
312
1302
  alignItems: "center",
313
- visibility: t ? "visible" : "hidden",
314
- opacity: t ? 1 : 0,
1303
+ visibility: n ? "visible" : "hidden",
1304
+ opacity: n ? 1 : 0,
315
1305
  transition: "opacity 0.2s ease-in-out",
316
- pointerEvents: t ? "auto" : "none"
1306
+ pointerEvents: n ? "auto" : "none"
317
1307
  },
318
1308
  children: /* @__PURE__ */ e(
319
1309
  "div",
@@ -327,26 +1317,244 @@ const U = ({
327
1317
  padding: 24
328
1318
  },
329
1319
  children: /* @__PURE__ */ e(
330
- f,
1320
+ ne,
331
1321
  {
332
- icon: /* @__PURE__ */ e(F, { twoToneColor: "#69b1ff" }),
1322
+ icon: /* @__PURE__ */ e(Ue, { twoToneColor: "#69b1ff" }),
333
1323
  status: "warning",
334
1324
  title: "등록된 메뉴 정보가 없거나 유효한 메뉴가 아닙니다.",
335
- subTitle: /* @__PURE__ */ e(P.Text, { type: "secondary", children: "자세한 내용은 관리자에게 문의바랍니다." }),
336
- extra: /* @__PURE__ */ e(D, { children: /* @__PURE__ */ e(y, { icon: /* @__PURE__ */ e(S, {}), onClick: i, children: "탭 닫기" }) })
1325
+ subTitle: /* @__PURE__ */ e(Le.Text, { type: "secondary", children: "자세한 내용은 관리자에게 문의바랍니다." }),
1326
+ extra: /* @__PURE__ */ e(Te, { children: /* @__PURE__ */ e(x, { icon: /* @__PURE__ */ e(ae, {}), onClick: p, children: "탭 닫기" }) })
337
1327
  }
338
1328
  )
339
1329
  }
340
1330
  )
341
1331
  }
342
1332
  );
343
- }, oe = R(Y);
1333
+ }, wt = Z(vt), xt = () => /* @__PURE__ */ b(G, { children: [
1334
+ /* @__PURE__ */ e(
1335
+ "link",
1336
+ {
1337
+ rel: "preload",
1338
+ as: "image",
1339
+ href: "/src/styles/assets/images/backgrounds/LandingContainer_bg.png"
1340
+ }
1341
+ ),
1342
+ /* @__PURE__ */ e("div", { className: "LandingContainer-wrap", children: /* @__PURE__ */ e("div", { className: "inner", children: /* @__PURE__ */ e("div", { className: "content" }) }) })
1343
+ ] }), kt = (n, t) => {
1344
+ console.log("createPopupViewLoader 호출 - popupUrl:", n);
1345
+ const s = ((a) => {
1346
+ if (a.startsWith("/src/pages/views/popup/")) {
1347
+ const d = a + ".tsx";
1348
+ return console.log(`팝업 URL 변환: ${a} -> ${d}`), d;
1349
+ }
1350
+ const y = `/src/pages/views/popup/${a.startsWith("/") ? a.substring(1) : a}.tsx`;
1351
+ return console.log(`팝업 URL 변환: ${a} -> ${y}`), y;
1352
+ })(n);
1353
+ return !s || !t?.glob[s] ? (console.warn(`팝업 뷰를 찾을 수 없습니다: ${n} (${s})`), console.warn("사용 가능한 팝업 뷰들:", Object.keys(t?.glob || {})), null) : t?.glob[s];
1354
+ }, Nt = ({ popup: n, modules: t }) => {
1355
+ const [r, s] = S(null), [a, p] = S(!1), [y, d] = S(null), h = () => {
1356
+ console.log("PopupArea - handleClose:", n.popupId), se.getState().closePopup(n.popupId);
1357
+ };
1358
+ return B(() => {
1359
+ (async () => {
1360
+ console.log("팝업 뷰 로드 시작:", n.popupUrl), p(!0), d(null);
1361
+ try {
1362
+ const m = kt(n.popupUrl, t);
1363
+ if (!m) {
1364
+ const i = `팝업 뷰를 찾을 수 없습니다: ${n.popupUrl}`;
1365
+ console.error(i), d(i), p(!1);
1366
+ return;
1367
+ }
1368
+ console.log("팝업 뷰 모듈 로드 중...");
1369
+ const C = await m();
1370
+ console.log("팝업 뷰 모듈 로드 완료:", C);
1371
+ const o = C.default;
1372
+ if (console.log("팝업 뷰 컴포넌트:", o), !o)
1373
+ throw new Error("팝업 뷰 컴포넌트를 찾을 수 없습니다");
1374
+ s(() => o), console.log("팝업 뷰 설정 완료");
1375
+ } catch (m) {
1376
+ console.error("팝업 뷰 로드 실패:", m), d(m instanceof Error ? m.message : "팝업 뷰 로드 실패");
1377
+ } finally {
1378
+ p(!1);
1379
+ }
1380
+ })();
1381
+ }, [n.popupUrl]), a ? /* @__PURE__ */ b("div", { className: "popup-loading", children: [
1382
+ /* @__PURE__ */ e(W, { size: "large" }),
1383
+ /* @__PURE__ */ e("p", { children: "팝업을 로드하는 중..." })
1384
+ ] }) : y ? /* @__PURE__ */ b("div", { className: "popup-error", children: [
1385
+ /* @__PURE__ */ e(U, { description: y, image: U.PRESENTED_IMAGE_SIMPLE }),
1386
+ /* @__PURE__ */ e(
1387
+ x,
1388
+ {
1389
+ icon: /* @__PURE__ */ e(ie, {}),
1390
+ onClick: () => window.location.reload(),
1391
+ children: "다시 시도"
1392
+ }
1393
+ )
1394
+ ] }) : r ? /* @__PURE__ */ e(
1395
+ oe,
1396
+ {
1397
+ fallback: /* @__PURE__ */ b("div", { className: "popup-loading", children: [
1398
+ /* @__PURE__ */ e(W, { size: "large" }),
1399
+ /* @__PURE__ */ e("p", { children: "컴포넌트를 로드하는 중..." })
1400
+ ] }),
1401
+ children: /* @__PURE__ */ e(
1402
+ r,
1403
+ {
1404
+ popup: {
1405
+ ...n,
1406
+ close: h
1407
+ // popup 객체에 close 이벤트 추가
1408
+ },
1409
+ onClose: h
1410
+ }
1411
+ )
1412
+ }
1413
+ ) : /* @__PURE__ */ e("div", { className: "popup-empty", children: /* @__PURE__ */ e(U, { description: "팝업 내용을 불러올 수 없습니다." }) });
1414
+ }, It = ({ modules: n }) => {
1415
+ const { popups: t } = se();
1416
+ return t.length === 0 ? null : /* @__PURE__ */ e(G, { children: t.map((r) => {
1417
+ const s = r.config || {}, a = s.width || r.width || 800, p = s.height || r.height || 600, y = s.title || r.popupTitle, d = r.buttonList?.map((h, u) => ({
1418
+ key: h.btnId || `btn_${u}`,
1419
+ text: h.btnNm,
1420
+ type: h.btnId === "CLOSE" ? "default" : "primary",
1421
+ disabled: h.enblYn !== "Y",
1422
+ danger: !1
1423
+ })) || [];
1424
+ return console.log("팝업 렌더링:", {
1425
+ popupId: r.popupId,
1426
+ popupCode: r.popupCode,
1427
+ title: y,
1428
+ width: a,
1429
+ height: p,
1430
+ buttons: d
1431
+ }), /* @__PURE__ */ e("div", { children: /* @__PURE__ */ e(Nt, { popup: r, modules: n }) }, r.popupId);
1432
+ }) });
1433
+ }, St = (n) => ({
1434
+ position: "absolute",
1435
+ inset: 0,
1436
+ visibility: n ? "visible" : "hidden",
1437
+ opacity: n ? 1 : 0,
1438
+ transition: "opacity 0.2s ease-in-out",
1439
+ pointerEvents: n ? "auto" : "none"
1440
+ }), Tt = ({ once: n = !0 }) => {
1441
+ const { lock: t } = me(), r = $(!1);
1442
+ return B(() => {
1443
+ n && r.current || (r.current = !0, t());
1444
+ }, [n, t]), null;
1445
+ }, Lt = ({ isActive: n, flagged: t, tabKey: r, onUnlock: s, children: a }) => {
1446
+ const p = $(null), [y, d] = S(!1), h = M((m) => {
1447
+ p.current = m, d(!!m);
1448
+ }, []), u = St(n);
1449
+ return /* @__PURE__ */ e("div", { ref: h, style: u, children: y ? /* @__PURE__ */ b(
1450
+ ue,
1451
+ {
1452
+ idleMs: Number.POSITIVE_INFINITY,
1453
+ persistLocked: !1,
1454
+ overlayScope: "scoped",
1455
+ overlayPosition: "absolute",
1456
+ eventTarget: p.current,
1457
+ overlayId: `tab-overlay-${r}`,
1458
+ onUnlock: async () => (s(), !0),
1459
+ children: [
1460
+ n && t ? /* @__PURE__ */ e(Tt, { once: !0 }) : null,
1461
+ a
1462
+ ]
1463
+ }
1464
+ ) : a });
1465
+ }, Wt = ({
1466
+ config: n = {},
1467
+ modules: t = {
1468
+ view: {
1469
+ path: "/src/pages/views/content"
1470
+ },
1471
+ popup: {
1472
+ path: "/src/pages/views/popups"
1473
+ }
1474
+ }
1475
+ }) => {
1476
+ const r = $(
1477
+ /* @__PURE__ */ new Map()
1478
+ ), {
1479
+ tabs: s,
1480
+ tabParams: a,
1481
+ activeMenuId: p,
1482
+ tabProtectFlag: y,
1483
+ clearProtectFlagForKey: d
1484
+ } = I(), h = M(
1485
+ (u) => {
1486
+ const m = r.current.get(u.key);
1487
+ if (m) return m;
1488
+ const C = u.gubun === "M" ? `${t.view.path}${u.menuItem?.scrnPath}.tsx` : `${t.view.path}${u.componentItem?.scrnPath}.tsx`;
1489
+ let o = t.view?.glob?.[C];
1490
+ if (!o && typeof import.meta < "u" && typeof import.meta.glob == "function" && (o = (/* @__PURE__ */ Object.assign({}))[C]), o) {
1491
+ const i = Be(
1492
+ o
1493
+ );
1494
+ return r.current.set(u.key, i), i;
1495
+ }
1496
+ return null;
1497
+ },
1498
+ [t.view?.glob]
1499
+ );
1500
+ return /* @__PURE__ */ b(A, { className: "main-layout", children: [
1501
+ /* @__PURE__ */ e(pt, { config: n?.header }),
1502
+ /* @__PURE__ */ b(A, { children: [
1503
+ /* @__PURE__ */ e(yt, { config: n?.sidebar }),
1504
+ /* @__PURE__ */ b("div", { className: "content-container", children: [
1505
+ /* @__PURE__ */ e(ft, { config: n?.menuTab }),
1506
+ /* @__PURE__ */ e(lt, { config: n?.content, children: /* @__PURE__ */ e(pe, { children: /* @__PURE__ */ e("div", { className: "view-container", children: /* @__PURE__ */ b(
1507
+ "div",
1508
+ {
1509
+ style: {
1510
+ position: "relative",
1511
+ width: "100%",
1512
+ height: "100%"
1513
+ },
1514
+ children: [
1515
+ s.map((u) => {
1516
+ const m = h(u), C = p === u.key, o = !!y?.[u.key], i = a[u.key] || {};
1517
+ return /* @__PURE__ */ e(
1518
+ Lt,
1519
+ {
1520
+ isActive: C,
1521
+ flagged: o,
1522
+ tabKey: u.key,
1523
+ onUnlock: () => d(u.key),
1524
+ children: /* @__PURE__ */ e(
1525
+ wt,
1526
+ {
1527
+ isActive: C,
1528
+ instance: m || void 0,
1529
+ params: i
1530
+ },
1531
+ u.key
1532
+ )
1533
+ },
1534
+ u.key
1535
+ );
1536
+ }),
1537
+ (!p || s.length === 0) && /* @__PURE__ */ e(xt, {})
1538
+ ]
1539
+ }
1540
+ ) }) }) })
1541
+ ] })
1542
+ ] }),
1543
+ /* @__PURE__ */ e(It, { modules: t?.popup }),
1544
+ /* @__PURE__ */ e(Ce, {})
1545
+ ] });
1546
+ }, jt = ({ config: n, children: t }) => /* @__PURE__ */ e("div", { children: "BwgPortal02" });
344
1547
  export {
345
- W as ErrorBound,
346
- te as LoadingOverlay,
347
- re as PrivateProtectedOverlay,
348
- k as ProgressOverlay,
349
- ne as ProtectedLayout,
350
- ae as PublicLayout,
351
- oe as ViewContainer
1548
+ Gt as AppWrapper,
1549
+ Wt as BwgPortal01,
1550
+ jt as BwgPortal02,
1551
+ lt as ConfigurableContent,
1552
+ pt as ConfigurableHeader,
1553
+ ft as ConfigurableMenuTab,
1554
+ yt as ConfigurableSidebar,
1555
+ wt as ContentContainer,
1556
+ xt as LandingContainer,
1557
+ Vt as LoadingContainer,
1558
+ It as PopupContainer,
1559
+ Lt as ProtectWrapper
352
1560
  };