@bwg-ui/core 1.2.7 → 1.2.8

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 (75) hide show
  1. package/README.md +28 -0
  2. package/dist/chunks/MenuReport-CiL4ggPy.js +1244 -0
  3. package/dist/chunks/MenuReport-DIkKwvta.cjs +1 -0
  4. package/dist/chunks/common-components-B4mah7DM.cjs +183 -0
  5. package/dist/chunks/{common-components-BiUtYMIt.js → common-components-G-FELsbw.js} +6664 -7980
  6. package/dist/chunks/{core-CF_HWm44.cjs → core-CXP75zcn.cjs} +1 -1
  7. package/dist/chunks/{core-Cb5dF0QU.js → core-pjW5SaWA.js} +1 -1
  8. package/dist/chunks/{enc-base64-CAxIzedh.cjs → enc-base64-Bg9x86kU.cjs} +1 -1
  9. package/dist/chunks/{enc-base64-Dy-3zKzn.js → enc-base64-DtP_G7ev.js} +2 -2
  10. package/dist/chunks/layout-components-De-k79AV.cjs +35 -0
  11. package/dist/chunks/layout-components-mRRx1BIz.js +1616 -0
  12. package/dist/chunks/{sha256-DKma8qua.js → sha256-BTxiV_cX.js} +2 -2
  13. package/dist/chunks/{sha256-DbQnwvPn.cjs → sha256-CFa0dyCj.cjs} +1 -1
  14. package/dist/components/common/ButtonAccessController.d.ts +5 -0
  15. package/dist/components/common/ButtonAccessController.d.ts.map +1 -0
  16. package/dist/components/common/BwgEditor.d.ts +3 -3
  17. package/dist/components/common/BwgEditor.d.ts.map +1 -1
  18. package/dist/components/common/BwgPopup.d.ts +15 -0
  19. package/dist/components/common/BwgPopup.d.ts.map +1 -1
  20. package/dist/components/common/BwgView.d.ts +2 -23
  21. package/dist/components/common/BwgView.d.ts.map +1 -1
  22. package/dist/components/common/SearchBox.d.ts +1 -57
  23. package/dist/components/common/SearchBox.d.ts.map +1 -1
  24. package/dist/components/common/index.cjs +1 -1
  25. package/dist/components/common/index.d.ts +5 -3
  26. package/dist/components/common/index.d.ts.map +1 -1
  27. package/dist/components/common/index.js +24 -23
  28. package/dist/components/common/type.d.ts +132 -0
  29. package/dist/components/common/type.d.ts.map +1 -0
  30. package/dist/components/guide/index.cjs +1 -1
  31. package/dist/components/guide/index.js +1 -1
  32. package/dist/components/layout/BwgPortal01.d.ts.map +1 -1
  33. package/dist/components/layout/default/LocalPopupContainer.d.ts +3 -0
  34. package/dist/components/layout/default/LocalPopupContainer.d.ts.map +1 -0
  35. package/dist/components/layout/default/PopupContainer.d.ts.map +1 -1
  36. package/dist/components/layout/index.cjs +1 -35
  37. package/dist/components/layout/index.js +13 -1558
  38. package/dist/components/popup/MenuReport.d.ts +2 -5
  39. package/dist/components/popup/MenuReport.d.ts.map +1 -1
  40. package/dist/components/popup/SearchDepartmentP01.d.ts +4 -5
  41. package/dist/components/popup/SearchDepartmentP01.d.ts.map +1 -1
  42. package/dist/components/popup/SearchDepartmentP02.d.ts +3 -5
  43. package/dist/components/popup/SearchDepartmentP02.d.ts.map +1 -1
  44. package/dist/components/popup/SearchEmployeeP01.d.ts +3 -1
  45. package/dist/components/popup/SearchEmployeeP01.d.ts.map +1 -1
  46. package/dist/components/popup/SearchEmployeeP02.d.ts +3 -1
  47. package/dist/components/popup/SearchEmployeeP02.d.ts.map +1 -1
  48. package/dist/components/popup/SearchOrganizationP01.d.ts +2 -4
  49. package/dist/components/popup/SearchOrganizationP01.d.ts.map +1 -1
  50. package/dist/components/popup/SearchOrganizationP02.d.ts +3 -4
  51. package/dist/components/popup/SearchOrganizationP02.d.ts.map +1 -1
  52. package/dist/components/popup/config/localPopupRegistry.d.ts +8 -0
  53. package/dist/components/popup/config/localPopupRegistry.d.ts.map +1 -0
  54. package/dist/components/popup/index.cjs +1 -1
  55. package/dist/components/popup/index.d.ts +2 -4
  56. package/dist/components/popup/index.d.ts.map +1 -1
  57. package/dist/components/popup/index.js +1 -1
  58. package/dist/index.cjs +1 -1
  59. package/dist/index.js +135 -132
  60. package/dist/provider/hooks/usePopup.d.ts +1 -0
  61. package/dist/provider/hooks/usePopup.d.ts.map +1 -1
  62. package/dist/provider/index.cjs +1 -1
  63. package/dist/provider/index.js +205 -188
  64. package/dist/stores/index.cjs +2 -2
  65. package/dist/stores/index.js +253 -200
  66. package/dist/stores/popupStore.d.ts +9 -1
  67. package/dist/stores/popupStore.d.ts.map +1 -1
  68. package/dist/utils/gwUtils.d.ts +23 -0
  69. package/dist/utils/gwUtils.d.ts.map +1 -0
  70. package/dist/utils/index.cjs +1 -1
  71. package/dist/utils/index.d.ts +9 -8
  72. package/dist/utils/index.d.ts.map +1 -1
  73. package/dist/utils/index.js +588 -486
  74. package/package.json +4 -4
  75. package/dist/chunks/common-components-DyOLtUJx.cjs +0 -183
@@ -1,1560 +1,15 @@
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-BiUtYMIt.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: "현재 테마 색상" })
288
- ] }),
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
- ] })
321
- ] });
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 = () => {
1185
- this.setState({ hasError: !1, error: void 0, errorInfo: void 0 });
1186
- }, this.state = { hasError: !1 };
1187
- }
1188
- static getDerivedStateFromError(t) {
1189
- return { hasError: !0, error: t };
1190
- }
1191
- componentDidCatch(t, r) {
1192
- console.error("ErrorBound caught an error:", t, r), this.setState({
1193
- error: t,
1194
- errorInfo: r
1195
- });
1196
- }
1197
- render() {
1198
- return this.state.hasError ? this.props.fallback ? this.props.fallback : /* @__PURE__ */ b(
1199
- "div",
1200
- {
1201
- style: {
1202
- padding: "40px 20px",
1203
- textAlign: "center",
1204
- backgroundColor: "#fafafa",
1205
- display: "flex",
1206
- flexDirection: "column",
1207
- justifyContent: "center",
1208
- alignItems: "center"
1209
- },
1210
- children: [
1211
- /* @__PURE__ */ e(
1212
- ne,
1213
- {
1214
- status: "error",
1215
- title: "컴포넌트 로딩 중 오류가 발생했습니다",
1216
- subTitle: this.state.error ? `오류 내용: ${this.state.error.message}` : "알 수 없는 오류가 발생했습니다",
1217
- extra: [
1218
- /* @__PURE__ */ e(
1219
- x,
1220
- {
1221
- type: "primary",
1222
- icon: /* @__PURE__ */ e(ie, {}),
1223
- onClick: this.resetError,
1224
- style: { marginRight: 8 },
1225
- children: "다시 시도"
1226
- },
1227
- "retry"
1228
- )
1229
- ]
1230
- }
1231
- ),
1232
- this.state.error && /* @__PURE__ */ b(
1233
- "details",
1234
- {
1235
- style: {
1236
- marginTop: "20px",
1237
- textAlign: "left",
1238
- maxWidth: "600px",
1239
- backgroundColor: "#fff",
1240
- padding: "16px",
1241
- borderRadius: "6px",
1242
- border: "1px solid #d9d9d9"
1243
- },
1244
- children: [
1245
- /* @__PURE__ */ e("summary", { style: { cursor: "pointer", fontWeight: "bold" }, children: "오류 상세 정보" }),
1246
- /* @__PURE__ */ e(
1247
- "pre",
1248
- {
1249
- style: {
1250
- marginTop: "8px",
1251
- fontSize: "12px",
1252
- color: "#666",
1253
- whiteSpace: "pre-wrap",
1254
- wordBreak: "break-word"
1255
- },
1256
- children: this.state.error.stack
1257
- }
1258
- )
1259
- ]
1260
- }
1261
- )
1262
- ]
1263
- }
1264
- ) : this.props.children;
1265
- }
1266
- }
1267
- const vt = ({
1268
- isActive: n,
1269
- instance: t,
1270
- params: r
1271
- }) => {
1272
- const { activeMenuId: s, closeTab: a } = I(), p = () => {
1273
- s && a(s);
1274
- };
1275
- return t ? /* @__PURE__ */ e(
1276
- "div",
1277
- {
1278
- style: {
1279
- position: "absolute",
1280
- top: 0,
1281
- left: 0,
1282
- width: "100%",
1283
- height: "100%",
1284
- visibility: n ? "visible" : "hidden",
1285
- opacity: n ? 1 : 0,
1286
- transition: "opacity 0.2s ease-in-out",
1287
- pointerEvents: n ? "auto" : "none"
1288
- },
1289
- children: /* @__PURE__ */ e(Ct, { children: /* @__PURE__ */ e(oe, { fallback: null, children: t && re(t, { params: r }) }) })
1290
- }
1291
- ) : /* @__PURE__ */ e(
1292
- "div",
1293
- {
1294
- style: {
1295
- position: "absolute",
1296
- top: 0,
1297
- left: 0,
1298
- width: "100%",
1299
- height: "100%",
1300
- display: "flex",
1301
- justifyContent: "center",
1302
- alignItems: "center",
1303
- visibility: n ? "visible" : "hidden",
1304
- opacity: n ? 1 : 0,
1305
- transition: "opacity 0.2s ease-in-out",
1306
- pointerEvents: n ? "auto" : "none"
1307
- },
1308
- children: /* @__PURE__ */ e(
1309
- "div",
1310
- {
1311
- style: {
1312
- width: 500,
1313
- maxWidth: "90%",
1314
- background: "#fff",
1315
- borderRadius: 16,
1316
- boxShadow: "0 8px 30px rgba(0,0,0,0.05)",
1317
- padding: 24
1318
- },
1319
- children: /* @__PURE__ */ e(
1320
- ne,
1321
- {
1322
- icon: /* @__PURE__ */ e(Ue, { twoToneColor: "#69b1ff" }),
1323
- status: "warning",
1324
- title: "등록된 메뉴 정보가 없거나 유효한 메뉴가 아닙니다.",
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: "탭 닫기" }) })
1327
- }
1328
- )
1329
- }
1330
- )
1331
- }
1332
- );
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" });
1
+ import { A as e, B as r, a as o, c as t, d as s, e as i, f as C, C as g, b as p, L as b, P as f, g as l } from "../../chunks/layout-components-mRRx1BIz.js";
1547
2
  export {
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
3
+ e as AppWrapper,
4
+ r as BwgPortal01,
5
+ o as BwgPortal02,
6
+ t as ConfigurableContent,
7
+ s as ConfigurableHeader,
8
+ i as ConfigurableMenuTab,
9
+ C as ConfigurableSidebar,
10
+ g as ContentContainer,
11
+ p as LandingContainer,
12
+ b as LoadingContainer,
13
+ f as PopupContainer,
14
+ l as ProtectWrapper
1560
15
  };