@bwg-ui/core 1.2.8 → 1.2.9

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 (47) hide show
  1. package/dist/chunks/{MenuReport-DIkKwvta.cjs → MenuReport-CuAfCZbc.cjs} +1 -1
  2. package/dist/chunks/{MenuReport-CiL4ggPy.js → MenuReport-iuRC_snf.js} +1 -1
  3. package/dist/chunks/{common-components-G-FELsbw.js → common-components-CFIJNFN0.js} +1343 -1322
  4. package/dist/chunks/{common-components-B4mah7DM.cjs → common-components-CioS_8Bi.cjs} +16 -16
  5. package/dist/chunks/{core-CXP75zcn.cjs → core-CA7iRgyb.cjs} +1 -1
  6. package/dist/chunks/{core-pjW5SaWA.js → core-D18HD1It.js} +1 -1
  7. package/dist/chunks/{enc-base64-DtP_G7ev.js → enc-base64-CdWu8KMI.js} +2 -2
  8. package/dist/chunks/{enc-base64-Bg9x86kU.cjs → enc-base64-DSIiAsI5.cjs} +1 -1
  9. package/dist/chunks/{layout-components-mRRx1BIz.js → layout-components-C-9ATcL9.js} +2 -2
  10. package/dist/chunks/{layout-components-De-k79AV.cjs → layout-components-DMR4tl9_.cjs} +2 -2
  11. package/dist/chunks/{sha256-CFa0dyCj.cjs → sha256-D5iKSlK6.cjs} +1 -1
  12. package/dist/chunks/{sha256-BTxiV_cX.js → sha256-DQcqzuys.js} +2 -2
  13. package/dist/components/common/index.cjs +1 -1
  14. package/dist/components/common/index.js +1 -1
  15. package/dist/components/guide/index.cjs +1 -1
  16. package/dist/components/guide/index.js +1 -1
  17. package/dist/components/layout/index.cjs +1 -1
  18. package/dist/components/layout/index.js +1 -1
  19. package/dist/components/popup/SearchDepartmentP01.d.ts.map +1 -1
  20. package/dist/components/popup/SearchDepartmentP02.d.ts.map +1 -1
  21. package/dist/components/popup/SearchEmployeeP01.d.ts.map +1 -1
  22. package/dist/components/popup/SearchEmployeeP02.d.ts.map +1 -1
  23. package/dist/components/popup/SearchOrganizationP01.d.ts.map +1 -1
  24. package/dist/components/popup/SearchOrganizationP02.d.ts.map +1 -1
  25. package/dist/components/popup/index.cjs +1 -1
  26. package/dist/components/popup/index.js +1 -1
  27. package/dist/index.cjs +1 -1
  28. package/dist/index.js +238 -220
  29. package/dist/provider/hooks/usePopup.d.ts +2 -2
  30. package/dist/provider/hooks/usePopup.d.ts.map +1 -1
  31. package/dist/provider/index.cjs +1 -1
  32. package/dist/provider/index.js +35 -35
  33. package/dist/stores/index.cjs +2 -2
  34. package/dist/stores/index.js +93 -77
  35. package/dist/stores/popupStore.d.ts +9 -1
  36. package/dist/stores/popupStore.d.ts.map +1 -1
  37. package/dist/stores/userStore.d.ts +16 -2
  38. package/dist/stores/userStore.d.ts.map +1 -1
  39. package/dist/utils/commonUtils.d.ts +77 -6
  40. package/dist/utils/commonUtils.d.ts.map +1 -1
  41. package/dist/utils/index.cjs +1 -1
  42. package/dist/utils/index.d.ts +18 -0
  43. package/dist/utils/index.d.ts.map +1 -1
  44. package/dist/utils/index.js +550 -501
  45. package/dist/utils/userUtils.d.ts +6 -0
  46. package/dist/utils/userUtils.d.ts.map +1 -1
  47. package/package.json +1 -1
@@ -84,18 +84,18 @@ const I = {
84
84
  openPopup: r,
85
85
  openCorePopup: i
86
86
  } = H(), l = N(
87
- async (m, h, s) => {
87
+ async (m, h, n) => {
88
88
  try {
89
- await r(m, h, s);
90
- } catch (n) {
91
- throw console.error("팝업 열기 실패:", n), n;
89
+ await r(m, h, n);
90
+ } catch (s) {
91
+ throw console.error("팝업 열기 실패:", s), s;
92
92
  }
93
93
  },
94
94
  [r]
95
95
  ), u = N(
96
- (m, h, s) => {
96
+ (m, h) => {
97
97
  try {
98
- i(m, h, s);
98
+ i(m, h);
99
99
  } catch (n) {
100
100
  throw console.error("로컬 팝업 열기 실패:", n), n;
101
101
  }
@@ -116,38 +116,38 @@ const I = {
116
116
  if (!e) throw new Error("useAuth must be used within AuthProvider");
117
117
  return e;
118
118
  }, ue = ({ children: e }) => {
119
- const [o, t] = w(!1), [c, r] = w(!1), i = async (s) => {
120
- const n = (await s.text()).trim().toLowerCase();
119
+ const [o, t] = w(!1), [c, r] = w(!1), i = async (n) => {
120
+ const s = (await n.text()).trim().toLowerCase();
121
121
  try {
122
- const a = JSON.parse(n);
122
+ const a = JSON.parse(s);
123
123
  if (typeof a == "object" && a && (a.ok === !0 || a.success === !0))
124
124
  return !0;
125
125
  } catch {
126
126
  }
127
- return !!["true", "ok", "1", "y"].includes(n);
128
- }, l = async (s) => {
127
+ return !!["true", "ok", "1", "y"].includes(s);
128
+ }, l = async (n) => {
129
129
  r(!0);
130
130
  try {
131
- const n = await fetch("/serviceEndpoint/sso_check.jsp", {
131
+ const s = await fetch("/serviceEndpoint/sso_check.jsp", {
132
132
  method: "POST",
133
133
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
134
- body: "token=" + encodeURIComponent(s)
135
- }), a = n.ok && await i(n);
134
+ body: "token=" + encodeURIComponent(n)
135
+ }), a = s.ok && await i(s);
136
136
  return t(a), a;
137
137
  } catch {
138
138
  return !1;
139
139
  } finally {
140
140
  r(!1);
141
141
  }
142
- }, u = async (s) => {
142
+ }, u = async (n) => {
143
143
  r(!0);
144
144
  try {
145
- const n = await fetch("/serviceEndpoint/sso_reauth.jsp", {
145
+ const s = await fetch("/serviceEndpoint/sso_reauth.jsp", {
146
146
  method: "POST",
147
147
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
148
- body: "pin=" + encodeURIComponent(s)
148
+ body: "pin=" + encodeURIComponent(n)
149
149
  });
150
- return n.ok && await i(n) ? (t(!0), !0) : !1;
150
+ return s.ok && await i(s) ? (t(!0), !0) : !1;
151
151
  } catch {
152
152
  return !1;
153
153
  } finally {
@@ -175,8 +175,8 @@ const I = {
175
175
  getCodeName: u,
176
176
  getCodeColor: m,
177
177
  getCodeByOption: h,
178
- getAvailableGroupCodes: s,
179
- getGridLookup: n,
178
+ getAvailableGroupCodes: n,
179
+ getGridLookup: s,
180
180
  fetchCommonCodes: a
181
181
  } = W(), L = {
182
182
  codeData: o,
@@ -188,8 +188,8 @@ const I = {
188
188
  getCodeName: u,
189
189
  getCodeColor: m,
190
190
  getCodeByOption: h,
191
- getAvailableGroupCodes: s,
192
- getGridLookup: n,
191
+ getAvailableGroupCodes: n,
192
+ getGridLookup: s,
193
193
  refreshCodes: a
194
194
  };
195
195
  return /* @__PURE__ */ d(j.Provider, { value: L, children: e });
@@ -249,26 +249,26 @@ const I = {
249
249
  overlayId: u = "lock-overlay-root",
250
250
  overlayPosition: m = "fixed"
251
251
  }) => {
252
- const h = c && typeof window < "u" && window.localStorage.getItem(r) === "1", [s, n] = w(h), [a, L] = w(o), x = Number.isFinite(a) && a > 0, C = A(null), G = () => {
252
+ const h = c && typeof window < "u" && window.localStorage.getItem(r) === "1", [n, s] = w(h), [a, L] = w(o), x = Number.isFinite(a) && a > 0, C = A(null), G = () => {
253
253
  try {
254
254
  c && window.localStorage.setItem(r, "1");
255
255
  } catch {
256
256
  }
257
- n(!0);
257
+ s(!0);
258
258
  }, F = async (f) => {
259
259
  if (!(t && !await t(f))) {
260
260
  try {
261
261
  c && window.localStorage.removeItem(r);
262
262
  } catch {
263
263
  }
264
- n(!1), x && E();
264
+ s(!1), x && E();
265
265
  }
266
266
  }, V = () => {
267
267
  try {
268
268
  c && window.localStorage.setItem(r, "1");
269
269
  } catch {
270
270
  }
271
- n(!0);
271
+ s(!0);
272
272
  }, E = () => {
273
273
  x && (C.current && window.clearTimeout(C.current), C.current = window.setTimeout(() => {
274
274
  V();
@@ -277,7 +277,7 @@ const I = {
277
277
  b(() => {
278
278
  if (!x) return;
279
279
  const f = () => {
280
- s || E();
280
+ n || E();
281
281
  }, v = { passive: !0 }, g = [
282
282
  "pointermove",
283
283
  "pointerdown",
@@ -288,8 +288,8 @@ const I = {
288
288
  return g.forEach((p) => S.addEventListener(p, f, v)), E(), () => {
289
289
  C.current && window.clearTimeout(C.current), g.forEach((p) => S.removeEventListener(p, f));
290
290
  };
291
- }, [a, s, i, x]), b(() => {
292
- if (!s) return;
291
+ }, [a, n, i, x]), b(() => {
292
+ if (!n) return;
293
293
  const f = (p) => {
294
294
  const B = document.getElementById(u);
295
295
  B && B.contains(p.target) || (p.stopPropagation(), p.preventDefault());
@@ -305,22 +305,22 @@ const I = {
305
305
  "touchmove"
306
306
  ], S = l === "scoped" ? i ?? window : window;
307
307
  return g.forEach((p) => S.addEventListener(p, f, v)), () => g.forEach((p) => S.removeEventListener(p, f, v));
308
- }, [s, l, u, i]);
308
+ }, [n, l, u, i]);
309
309
  const $ = T(
310
- () => ({ locked: s, lock: G, unlock: F, setIdleMs: L }),
311
- [s]
310
+ () => ({ locked: n, lock: G, unlock: F, setIdleMs: L }),
311
+ [n]
312
312
  );
313
313
  return /* @__PURE__ */ D(_.Provider, { value: $, children: [
314
314
  /* @__PURE__ */ d(
315
315
  "div",
316
316
  {
317
317
  style: { width: "100%", height: "100%" },
318
- ...s ? { inert: "" } : {},
319
- ...s ? { "aria-hidden": !0 } : {},
318
+ ...n ? { inert: "" } : {},
319
+ ...n ? { "aria-hidden": !0 } : {},
320
320
  children: e
321
321
  }
322
322
  ),
323
- s && /* @__PURE__ */ d(
323
+ n && /* @__PURE__ */ d(
324
324
  q,
325
325
  {
326
326
  onUnlock: F,
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("zustand"),C=require("../utils/index.cjs"),_=require("antd"),J=require("../chunks/layout-components-De-k79AV.cjs");function Z(r,s){let e;try{e=r()}catch{return}return{getItem:o=>{var t;const a=d=>d===null?null:JSON.parse(d,void 0),c=(t=e.getItem(o))!=null?t:null;return c instanceof Promise?c.then(a):a(c)},setItem:(o,t)=>e.setItem(o,JSON.stringify(t,void 0)),removeItem:o=>e.removeItem(o)}}const B=r=>s=>{try{const e=r(s);return e instanceof Promise?e:{then(n){return B(n)(e)},catch(n){return this}}}catch(e){return{then(n){return this},catch(n){return B(n)(e)}}}},X=(r,s)=>(e,n,o)=>{let t={storage:Z(()=>localStorage),partialize:h=>h,version:0,merge:(h,v)=>({...v,...h}),...s},a=!1;const c=new Set,d=new Set;let u=t.storage;if(!u)return r((...h)=>{console.warn(`[zustand persist middleware] Unable to update item '${t.name}', the given storage is currently unavailable.`),e(...h)},n,o);const i=()=>{const h=t.partialize({...n()});return u.setItem(t.name,{state:h,version:t.version})},f=o.setState;o.setState=(h,v)=>(f(h,v),i());const m=r((...h)=>(e(...h),i()),n,o);o.getInitialState=()=>m;let p;const g=()=>{var h,v;if(!u)return;a=!1,c.forEach(y=>{var k;return y((k=n())!=null?k:m)});const M=((v=t.onRehydrateStorage)==null?void 0:v.call(t,(h=n())!=null?h:m))||void 0;return B(u.getItem.bind(u))(t.name).then(y=>{if(y)if(typeof y.version=="number"&&y.version!==t.version){if(t.migrate){const k=t.migrate(y.state,y.version);return k instanceof Promise?k.then(L=>[!0,L]):[!0,k]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,y.state];return[!1,void 0]}).then(y=>{var k;const[L,q]=y;if(p=t.merge(q,(k=n())!=null?k:m),e(p,!0),L)return i()}).then(()=>{M?.(p,void 0),p=n(),a=!0,d.forEach(y=>y(p))}).catch(y=>{M?.(void 0,y)})};return o.persist={setOptions:h=>{t={...t,...h},h.storage&&(u=h.storage)},clearStorage:()=>{u?.removeItem(t.name)},getOptions:()=>t,rehydrate:()=>g(),hasHydrated:()=>a,onHydrate:h=>(c.add(h),()=>{c.delete(h)}),onFinishHydration:h=>(d.add(h),()=>{d.delete(h)})},t.skipHydration||g(),p||m},S=X,j=b.create()(S((r,s)=>({user:null,isLoggedIn:!1,login:e=>{r({user:e,isLoggedIn:!0}),console.log("사용자 로그인:",e)},logout:()=>{r({user:null,isLoggedIn:!1}),console.log("사용자 로그아웃")},updateUser:e=>{const n=s().user;n&&r({user:{...n,...e}})}}),{name:"user-storage",partialize:r=>({user:r.user,isLoggedIn:r.isLoggedIn})})),O={CACHE_SIZE_LIMIT:1e3},l={codeCache:new Map,nameCache:new Map,optionCache:new Map,colorCache:new Map,loadedGroups:new Set,cacheHits:new Map,clearCache(){this.codeCache.clear(),this.nameCache.clear(),this.optionCache.clear(),this.colorCache.clear(),this.loadedGroups.clear(),this.cacheHits.clear()},cleanupCache(){const r=Array.from(this.cacheHits.entries());r.sort((e,n)=>e[1]-n[1]),r.slice(0,Math.floor(r.length*.3)).forEach(([e])=>{this.codeCache.delete(e),this.nameCache.delete(e),this.optionCache.delete(e),this.colorCache.delete(e),this.cacheHits.delete(e)})},isGroupLoaded(r){return this.loadedGroups.has(r)},markGroupLoaded(r){this.loadedGroups.add(r)}},W=r=>{console.log("대규모 데이터 변환 시작:",r);const s={};if(r&&r.code&&Array.isArray(r.code)){const e=r.code,n=r.opt||[],o=new Map;n.forEach(t=>{t.cmmnCd&&t.enblYn==="Y"&&(o.has(t.cmmnCd)||o.set(t.cmmnCd,[]),o.get(t.cmmnCd).push(t))}),e.forEach(t=>{if(t&&t.cmmnCdGrp&&t.cmmnCd&&t.enblYn==="Y"){const a=t.cmmnCdGrp;s[a]||(s[a]={});const d=(o.get(t.cmmnCd)||[]).reduce((u,i)=>(i.optnCd&&i.optnNm&&(u[i.optnCd]=i.optnNm),u),{});s[a][t.cmmnCd]={codeValue:t.cmmnCd,codeNm:t.cmmnCdNm,groupCode:t.cmmnCdGrp,commonCode:t.cmmnCd,labelColor:t.cmmnCdClr,systemCodeYn:t.syscdYn,sortOrder:parseInt(t.sortOrd)||1,enabled:t.enblYn==="Y",options:Object.keys(d).length>0?d:null,originalData:t}}})}return console.log("대규모 데이터 변환 완료:",s),s},I=b.create()(S((r,s)=>({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set,fetchData:async()=>{r({isLoading:!0,error:null});try{console.log("대규모 공통코드 데이터 가져오기 시작: SCMSIGN00301");const e=await C.callService(C.getServiceCode("SRCH_CODE"),{crprCd:"100"});console.log("대규모 공통코드 응답:",e),console.log("대규모 공통코드목록:",e.code),console.log("대규모 공통코드옵션션목록:",e.opt);const n=W(e);l.clearCache();const o=new Set(Object.keys(n));o.forEach(t=>{l.markGroupLoaded(t)}),r({codeData:n,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:o}),console.log("대규모 공통코드 데이터 가져오기 완료")}catch(e){console.error("대규모 공통코드 데이터 가져오기 실패:",e),r({isLoading:!1,error:e instanceof Error?e.message:"대규모 공통코드 데이터 가져오기 실패"})}},loadSpecificGroup:async e=>{const{codeData:n,loadedGroups:o}=s();if(!n||o.has(e))return;const t=new Set(o).add(e);r({loadedGroups:t}),l.markGroupLoaded(e)},setData:e=>{l.clearCache();const n=new Set(Object.keys(e));n.forEach(o=>{l.markGroupLoaded(o)}),r({codeData:e,lastUpdated:new Date,loadedGroups:n})},clearData:()=>{l.clearCache(),r({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set})},getLoadedGroups:()=>Array.from(s().loadedGroups)}),{name:"large-data-storage",partialize:r=>({codeData:r.codeData,lastUpdated:r.lastUpdated,loadedGroups:Array.from(r.loadedGroups)})})),x=b.create()(S((r,s)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.getState().fetchData()},getCodeList:(e,n)=>{const{enabledOnly:o=!0,systemCodeOnly:t=!1,sortByOrder:a=!1,excludeParentCode:c=!1}=n||{},d=`simpleCodeList_${e}_${o}_${t}_${a}_${c}`;if(l.optionCache.has(d)){const g=l.cacheHits.get(d)||0;return l.cacheHits.set(d,g+1),l.optionCache.get(d)}const u=I.getState().codeData;if(!u)return[];if(!l.isGroupLoaded(e)&&!u[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const i=[],f=u[e];f&&Object.values(f).forEach(g=>{if(!(o&&!g.enabled)&&!(t&&g.systemCodeYn!=="Y"))if(c){const h=e.length,v=g.codeValue.substring(h);v.length>0&&i.push({...g,codeValue:v})}else i.push(g)});let m;a?m=i.sort((g,h)=>g.sortOrder!==h.sortOrder?g.sortOrder-h.sortOrder:g.codeValue.localeCompare(h.codeValue)):m=i.sort((g,h)=>g.codeValue.localeCompare(h.codeValue));const p=m.map(g=>({label:g.codeNm,value:g.codeValue,tagColor:g.labelColor}));return l.optionCache.size>=O.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.optionCache.set(d,p),l.cacheHits.set(d,1),p},getCodeName:e=>{if(l.nameCache.has(e)){const o=l.cacheHits.get(`name_${e}`)||0;return l.cacheHits.set(`name_${e}`,o+1),l.nameCache.get(e)}const n=I.getState().codeData;if(!n)return null;for(const o of Object.values(n))for(const t of Object.values(o))if(t.codeValue===e)return l.nameCache.set(e,t.codeNm),l.cacheHits.set(`name_${e}`,1),t.codeNm;return null},getCodeColor:e=>{if(l.colorCache.has(e)){const o=l.cacheHits.get(`color_${e}`)||0;return l.cacheHits.set(`color_${e}`,o+1),l.colorCache.get(e)}const n=I.getState().codeData;if(!n)return null;for(const o of Object.values(n))for(const t of Object.values(o))if(t.codeValue===e)return l.colorCache.set(e,t.labelColor||""),l.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getGridLookup:e=>{const n=`gridLookup_${e}`;if(l.optionCache.has(n)){const u=l.cacheHits.get(n)||0;return l.cacheHits.set(n,u+1),l.optionCache.get(n)}const o=I.getState().codeData;if(!o)return{labels:[],values:[],lookupDisplay:!0};const t=o[e];if(!t)return{labels:[],values:[],lookupDisplay:!0};const a=[],c=[];Object.values(t).filter(u=>u.enabled).sort((u,i)=>u.sortOrder-i.sortOrder).forEach(u=>{a.push(u.codeNm),c.push(u.codeValue)});const d={labels:a,values:c,lookupDisplay:!0};return l.optionCache.set(n,d),l.cacheHits.set(n,1),d},getCodeByOption:(e,n,o)=>{const t=`codeByOption_${e}_${n}_${o}`;if(l.codeCache.has(t)){const i=l.cacheHits.get(t)||0;return l.cacheHits.set(t,i+1),l.codeCache.get(t)}const a=I.getState().codeData;if(!a)return[];const c=[],d=a[e];d&&Object.values(d).forEach(i=>{i.enabled&&i.options&&i.options[n]===o&&c.push({...i,codeNm:i.options[n]||i.codeNm})});const u=c.sort((i,f)=>i.codeValue.localeCompare(f.codeValue));return l.codeCache.size>=O.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.codeCache.set(t,u),l.cacheHits.set(t,1),u},getCodeListByOption:(e,n,o)=>{const{enabledOnly:t=!0,systemCodeOnly:a=!1,sortByOrder:c=!1}=o||{},d=`codeListByOption_${e}_${n}_${t}_${a}_${c}`;if(l.codeCache.has(d)){const p=l.cacheHits.get(d)||0;return l.cacheHits.set(d,p+1),l.codeCache.get(d)}const u=I.getState().codeData;if(!u)return[];if(!l.isGroupLoaded(e)&&!u[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const i=[],f=u[e];f&&Object.values(f).forEach(p=>{t&&!p.enabled||a&&p.systemCodeYn!=="Y"||p.options&&p.options[n]&&i.push({label:p.options[n],value:p.commonCode,tagColor:p.labelColor})});let m;return c?m=i.sort((p,g)=>p.value.localeCompare(g.value)):m=i.sort((p,g)=>p.value.localeCompare(g.value)),l.codeCache.size>=O.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.codeCache.set(d,m),l.cacheHits.set(d,1),m},getAvailableGroupCodes:()=>{const e="available_group_codes";if(l.nameCache.has(e)){const t=l.cacheHits.get(e)||0;return l.cacheHits.set(e,t+1),JSON.parse(l.nameCache.get(e))}const n=I.getState().codeData;if(!n)return[];const o=Object.keys(n).sort();return l.nameCache.set(e,JSON.stringify(o)),l.cacheHits.set(e,1),o},clearCodes:()=>{I.getState().clearData()}}),{name:"code-storage",partialize:r=>({})})),Q=b.create()(S((r,s)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.getState().fetchData()},getOptionValue:(e,n)=>{const o=`option_${e}_${n}`;if(l.optionCache.has(o)){const c=l.cacheHits.get(o)||0;return l.cacheHits.set(o,c+1),l.optionCache.get(o)}const t=I.getState().codeData;if(!t)return null;const a=t[e];if(a&&a[n]){const c=a[n].options;return l.optionCache.set(o,c),l.cacheHits.set(o,1),c}return null},getOptionByKey:(e,n,o)=>{const t=`option_${e}_${n}_${o}`;if(l.optionCache.has(t)){const d=l.cacheHits.get(t)||0;return l.cacheHits.set(t,d+1),l.optionCache.get(t)}const a=s().getOptionValue(e,n),c=a?a[o]:null;return l.optionCache.set(t,c),l.cacheHits.set(t,1),c},clearCodes:()=>{I.getState().clearData()}}),{name:"option-storage",partialize:r=>({})})),V=b.create()(S((r,s)=>({get codeData(){return I.getState().codeData},get isLoading(){return I.getState().isLoading},get error(){return I.getState().error},get lastUpdated(){return I.getState().lastUpdated},fetchCommonCodes:async()=>{await I.getState().fetchData()},getColorCode:e=>{if(l.colorCache.has(e)){const o=l.cacheHits.get(`color_${e}`)||0;return l.cacheHits.set(`color_${e}`,o+1),l.colorCache.get(e)}const n=I.getState().codeData;if(!n)return null;for(const o of Object.values(n))for(const t of Object.values(o))if(t.codeValue===e)return l.colorCache.set(e,t.labelColor||""),l.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getColorMapping:()=>{const e="color_mapping";if(l.optionCache.has(e)){const t=l.cacheHits.get(e)||0;return l.cacheHits.set(e,t+1),l.optionCache.get(e)}const n=I.getState().codeData;if(!n)return[];const o=[];return Object.values(n).forEach(t=>{Object.values(t).forEach(a=>{a.labelColor&&o.push({code:a.codeValue,color:a.labelColor})})}),l.optionCache.set(e,o),l.cacheHits.set(e,1),o},clearCodes:()=>{I.getState().clearData()}}),{name:"color-storage",partialize:r=>({})})),ee=(r,s)=>({nodes:{},rootIds:[],loadedFor:void 0,loading:!1,error:void 0,treeNodes:[],isMenuBookmarked:e=>Object.values(s().nodes).some(n=>n.type==="M"&&n.menuId===e),getPrntBkmkIdByMenuId:e=>{const n=w(s().nodes,e);return n?s().nodes[n]?.prntBkmkId??"-":"-"},getNodeByMenuId:e=>{const n=w(s().nodes,e);if(!n)return null;const o=s().nodes[n];return o?.type==="M"?o:null},getFolderTree:e=>{const{nodes:n,rootIds:o}=s(),t=c=>e?c.toLowerCase().includes(e.toLowerCase()):!0,a=c=>{const d=n[c];if(!d||d.type!=="F")return null;const u=d,i=(u.children||[]).map(m=>n[m]).filter(m=>!!m&&m.type==="F").map(m=>a(m.bkmkId)).filter(Boolean);return t(u.bkmkNm)||i.length>0?{key:u.bkmkId,title:`📁 ${u.bkmkNm}`,children:i.length?i:void 0}:null};return o.map(c=>a(c)).filter(Boolean)},loadFavorites:async(e,n=!1)=>{console.log("loadFavorites ::::: ",e,n);const o=s();if(!(!n&&o.loadedFor===e&&Object.keys(o.nodes).length)){r({loading:!0,error:void 0});try{const t=await C.callService("SCMBKMK00101",{userId:e}),a=Array.isArray(t?.sub)?t.sub:[],c=te(a),d=N(c.nodes,c.rootIds);r({...c,treeNodes:d,loadedFor:e,loading:!1})}catch(t){throw r({loading:!1,error:t?.message||"즐겨찾기 로드 실패"}),t}}},loadFavoritesIfNeeded:async e=>{const n=s();(n.loadedFor!==e||Object.keys(n.nodes).length===0)&&await s().loadFavorites(e)},addNode:async e=>{const n=F(s()),o=oe();r(t=>{const a=e.sortOrdr??E(t,e.prntBkmkId),c={...t,nodes:{...t.nodes,[o]:e.type==="F"?{bkmkId:o,type:"F",prntBkmkId:e.prntBkmkId||"-",sortOrdr:a,bkmkNm:e.bkmkNm??"새 폴더",children:[],sysCd:e.sysCd,userId:e.userId}:{bkmkId:o,type:"M",prntBkmkId:e.prntBkmkId,sortOrdr:a,menuId:e.menuId??"",menuNm:e.menuNm,sysCd:e.sysCd,userId:e.userId}},rootIds:t.rootIds.slice(),treeNodes:t.treeNodes};return ne(c,o,e.prntBkmkId),c.treeNodes=N(c.nodes,c.rootIds),c});try{let t=o;const a=E(s(),e.prntBkmkId),c=await C.callService("SCMBKMK00102",{iudFlag:"I",type:e.type,sysCd:e.sysCd,userId:e.userId,bkmkId:o,bkmkNm:e.bkmkNm,prntBkmkId:e.prntBkmkId,menuId:e.menuId,sortOrdr:a,chngId:C.getUserId()});return t=String(c?.bkmkId??c?.itemId??o),r(d=>{const u=se(d,o,t);return{...u,treeNodes:N(u.nodes,u.rootIds)}}),t}catch(t){throw r(n),t}},moveNode:async({bkmkId:e,newPrntBkmkId:n,sortOrdr:o,userId:t})=>{const a=s(),c=structuredClone(a.nodes),d=[...a.rootIds],u=c[e];if(!u)return;if(n!=="-"){const p=c[n];if(!p||p.type!=="F")throw new Error("부모는 폴더만 가능합니다.")}const i=u.prntBkmkId??"-",f=i==="-"?d:c[i].children||=[];{const p=f.indexOf(e);p>=0&&f.splice(p,1)}const m=n==="-"?d:c[n].children||=[];m.splice(Math.max(0,Math.min(o,m.length)),0,e),u.prntBkmkId=n,r({nodes:c,rootIds:d}),$(c,d,n),$(c,d,i);try{await C.callService("SCMBKMK00104",{bkmkId:e,prntBkmkId:n,sortOrdr:o,chngId:t})}catch(p){throw r(a),p}},removeNode:async e=>{const n=F(s());r(o=>{if(!o.nodes[e])return o;const t={...o,nodes:{...o.nodes},rootIds:o.rootIds.slice(),treeNodes:o.treeNodes};return R(t,e),t.treeNodes=N(t.nodes,t.rootIds),t});try{await C.callService("SCMBKMK00103",{bkmkId:e})}catch(o){throw r(n),o}},editNode:async({bkmkId:e,userId:n,bkmkNm:o,prntBkmkId:t,sortOrdr:a})=>{const c=F(s());r(d=>{const u={...d,nodes:{...d.nodes}},i=u.nodes[e];return i?.type==="F"&&typeof o=="string"&&(u.nodes[e]={...i,bkmkNm:o}),u});try{await C.callService("SCMBKMK00102",{iudFlag:"U",userId:n,bkmkId:e,bkmkNm:o,prntBkmkId:t,sortOrdr:a,chngId:C.getUserId()})}catch(d){throw r(c),d}},addFolder:async(e,n,o,t)=>await s().addNode({type:"F",bkmkNm:e,prntBkmkId:n,sysCd:o,userId:t}),addMenuToFolder:async(e,n)=>w(s().nodes,n.menuId)?"이미 북마크에 저장된 메뉴입니다.":await s().addNode({type:"M",prntBkmkId:e,sysCd:"KH",userId:C.getUserId(),menuId:n.menuId,menuNm:n.menuNm}),toggleMenuFavorite:async(e,n)=>{const o=s(),t=Object.values(o.nodes).find(c=>c.type==="M"&&c.menuId===n.menuId);if(t){await s().removeNode(t.bkmkId);return}let a=U(o);a||(await s().loadFavorites(e,!0),a=U(s())),a&&await s().addNode({type:"M",prntBkmkId:a,sysCd:"KH",userId:C.getUserId(),menuId:n.menuId,menuNm:n.menuNm})},removeMenuByMenuId:async e=>{const n=s(),o=w(n.nodes,e);o&&await s().removeNode(o)},removeMenu:async e=>{await s().removeNode(e)},removeFolder:async e=>{await s().removeNode(e)},editFolder:async(e,n,o,t,a)=>{await s().editNode({bkmkId:e,userId:n,bkmkNm:o,prntBkmkId:t,sortOrdr:a})},convertToAntTreeData:(e,n,o,t=!1)=>{const a=d=>o?d.toLowerCase().includes(o.toLowerCase()):!0,c=d=>{const u=e[d];if(!u||t&&u.type!=="F")return null;if(u.type==="F"){const i=u,f=(i.children||[]).map(p=>c(p)).filter(Boolean);return a(i.bkmkNm)||f.length>0?{key:i.bkmkId,type:"F",title:`📁 ${i.bkmkNm}`,bkmkNm:i.bkmkNm,prntBkmkId:i.prntBkmkId,sortOrdr:i.sortOrdr,fullPath:i.fullPath,children:f.length?f:void 0}:null}else{const i=u,f=i.menuNm?`${i.menuNm} (${i.menuId})`:i.menuId;return a(f)?{key:i.bkmkId,type:"M",title:`📄 ${f}`,prntBkmkId:i.prntBkmkId,sortOrdr:i.sortOrdr,fullPath:i.fullPath,isLeaf:!0}:null}};return n.map(c).filter(Boolean)}}),z=b.create(ee);function te(r){const s={},e=[],n=o=>{o.forEach(t=>{const a={type:t.type,bkmkId:t.bkmkId??t.BKMK_ID??t.id,prntBkmkId:t.prntBkmkId??t.PRNT_BKMK_ID??"-",sortOrdr:Number(t.sortOrdr??t.SORT_ORDR??0),sysCd:t.sysCd??t.SYS_CD,userId:t.userId??t.USER_ID,fullPath:t.fullPath??t.FULL_PATH};if(t.type==="F"){s[a.bkmkId]={...a,bkmkNm:t.bkmkNm??t.BKMK_NM??t.name??a.bkmkId,children:[]};const c=Array.isArray(t.children)?t.children:[];n(c)}else s[a.bkmkId]={...a,menuId:t.menuId??t.MENU_ID??"",menuNm:t.menuNm??t.MENU_NM}})};return n(r),Object.values(s).forEach(o=>{if(o.prntBkmkId&&o.prntBkmkId!=="-"){const t=s[o.prntBkmkId];t?.type==="F"&&t.children.push(o.bkmkId)}else o.type==="F"&&e.push(o.bkmkId)}),e.sort((o,t)=>(s[o].sortOrdr??0)-(s[t].sortOrdr??0)),Object.values(s).forEach(o=>{o.type==="F"&&o.children.sort((a,c)=>(s[a].sortOrdr??0)-(s[c].sortOrdr??0))}),{nodes:s,rootIds:e}}function F(r){return{...r,nodes:JSON.parse(JSON.stringify(r.nodes)),rootIds:r.rootIds.slice()}}function oe(){return`tmp_${Math.random().toString(36).slice(2,10)}`}function E(r,s){if(!s||s==="-")return r.rootIds.length;const e=r.nodes[s];return e?e.children.length:0}function ne(r,s,e){const n=r.nodes[s];if(n)if(e&&e!=="-"){const o=r.nodes[e];if(!o||o.type!=="F")return;n.prntBkmkId=e,o.children=[...o.children,s]}else n.prntBkmkId="-",r.rootIds=[...r.rootIds,s]}function re(r,s){const e=r.nodes[s];if(!e)return;const n=e.prntBkmkId;if(n&&n!=="-"){const o=r.nodes[n];o?.type==="F"&&(o.children=o.children.filter(t=>t!==s))}else r.rootIds=r.rootIds.filter(o=>o!==s)}function R(r,s){const e=r.nodes[s];if(!e)return;e.type==="F"&&e.children.slice().forEach(a=>R(r,a)),re(r,s);const{[s]:n,...o}=r.nodes;r.nodes=o}function se(r,s,e){if(s===e)return r;const n=r.nodes[s];if(!n)return r;const o=JSON.parse(JSON.stringify(n));o.bkmkId=e;const t={...r.nodes,[e]:o};delete t[s];let a=r.rootIds;if(o.prntBkmkId&&o.prntBkmkId!=="-"){const c=t[o.prntBkmkId];c?.type==="F"&&(t[o.prntBkmkId]={...c,children:c.children.map(d=>d===s?e:d)})}else a=r.rootIds.map(c=>c===s?e:c);return{...r,nodes:t,rootIds:a}}function U(r){return r.rootIds.find(s=>r.nodes[s]?.type==="F")??null}function N(r,s){const e={};Object.values(r).forEach(d=>{const u=d.bkmkId,i=d.prntBkmkId;!u||!i||i==="-"||i===u||(e[i]??=[]).push(u)});const n=new Set,o=d=>{if(n.has(d))return null;const u=r[d];if(!u)return null;n.add(d);try{if(u.type==="F"){const f=u,m=e[d]??[];return{type:"F",bkmkId:d,bkmkNm:f.bkmkNm,prntBkmkId:f.prntBkmkId,children:m.map(o).filter(Boolean)}}const i=u;return{type:"M",bkmkId:d,bkmkNm:i.menuNm,menuId:i.menuId,menuNm:i.menuNm,prntBkmkId:i.prntBkmkId}}finally{n.delete(d)}},t=Object.values(r).filter(d=>d.prntBkmkId==="-"&&d.type==="M").map(d=>d.bkmkId),a=Object.values(r).filter(d=>d.prntBkmkId==="-"&&d.type==="F").map(d=>d.bkmkId);return Array.from(new Set([...s,...t,...a])).map(o).filter(Boolean)}function w(r,s){for(const e of Object.values(r))if(e.type==="M"&&e.menuId===s)return e.bkmkId;return null}function $(r,s,e){(!e||e==="-"?s:r[e].children||[]).forEach((o,t)=>{const a=r[o];a&&(a.sortOrdr=t)})}const H={DEFAULT_PRNT_GBCD:1},ae=r=>r&&typeof r=="object"&&typeof r.menuId=="string"&&typeof r.menuNm=="string",A=r=>Array.isArray(r)&&r.every(ae);let D=[],G=[];const ce=r=>{if(r&&typeof r=="object"){const s=r;if(s.menus&&A(s.menus))return s.menus;if(A(r))return r}return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."),[]},de=(r,s)=>!!s&&r.crprCd===s.crprCd&&r.userId===s.userId&&(r.prntGbcd??H.DEFAULT_PRNT_GBCD)===(s.prntGbcd??H.DEFAULT_PRNT_GBCD),le=r=>{if(D.length===r.length&&D.every((t,a)=>t.menuId===r[a]?.menuId&&t.menuPrntId===r[a]?.menuPrntId))return G;if(!r.length)return[];const s=new Map,e=[];r.forEach(t=>t?.menuId&&s.set(t.menuId,{...t,children:[]})),r.forEach(t=>{const a=s.get(t.menuId);a&&(t.menuPrntId&&t.menuPrntId!==""&&t.menuPrntId!=="-"?s.get(t.menuPrntId)?.children?.push(a):e.push(a))});const n=t=>t.sort((a,c)=>(a?.menuNo??0)-(c?.menuNo??0)).map(a=>({...a,children:a.children&&a.children.length?n(a.children):void 0})),o=n(e);return D=[...r],G=o,o},T=b.create((r,s)=>({menuList:[],flatMenuList:[],isLoading:!1,error:null,_lastFetchParams:null,fetchMenu:async({crprCd:e,userId:n,prntGbcd:o})=>{const t={crprCd:e,userId:n,prntGbcd:o??H.DEFAULT_PRNT_GBCD};if(de(t,s()._lastFetchParams)){console.log("✅ 중복 fetch 차단",t);return}r({isLoading:!0,error:null,_lastFetchParams:t});try{const a=await C.callService(C.getServiceCode("AUTH_MENU"),t),c=ce(a),d=le(c);r({flatMenuList:c,menuList:d,isLoading:!1,error:null})}catch(a){r({isLoading:!1,error:a?.message??"메뉴 로드 실패"})}},clearMenu:()=>{r({menuList:[],flatMenuList:[],error:null,_lastFetchParams:null})},findMenuById:e=>{const{flatMenuList:n}=s();return n.find(o=>o.menuId===e)??null}})),P={MAX_TABS:15},K=b.create((r,s)=>({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:P.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},openTabFromMenu:(e,n)=>{const{tabs:o}=s(),t=o.find(c=>c.key===e.menuId),a=o.find(c=>c.key===e.menuId);if(t)a!=null?(r({activeMenuId:e.menuId,activeMenuItem:e}),s().setTabParams(e.menuId,n||{}),e?.prsnInfoYn==="Y"&&s().setProtectFlagForKey(e.menuId)):_.message.warning("유효하지 않은 메뉴정보입니다.");else{if(o.length>P.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),_.message.warning(`최대 ${P.MAX_TABS}개의 탭만 열 수 있습니다.
2
- 기존 탭을 닫고 다시 시도해주세요.`);return}const c={key:e.menuId,label:e.menuNm,gubun:"M",menuItem:e,closable:!0};r({tabs:[...o,c],activeMenuId:e.menuId,activeMenuItem:e}),s().setTabParams(e.menuId,n||{}),e?.prsnInfoYn==="Y"&&s().setProtectFlagForKey(e.menuId)}},openTabByMenuId:(e,n)=>{const o=T.getState().findMenuById(e);o?s().openTabFromMenu(o,n):_.message.warning("메뉴 ID를 찾을 수 없습니다.")},openDetailView:(e,n,o)=>{const{tabs:t}=s();if(t.find(c=>c.key===e.viewId))s().focusTab(e.viewId);else{const c={key:e.viewId,label:e.viewLabel,gubun:"C",componentItem:{scrnPath:n,prsnInfoYn:o,prntInfo:e.prntInfo},closable:!0};r({tabs:[...t,c],activeMenuId:e.viewId,activeDetailItem:e}),s().setTabParams(e.viewId,e.viewParams||{})}},closeTab:e=>{const{tabs:n,activeMenuId:o}=s();n.find(c=>c.key===e);const t=n.filter(c=>c.key!==e);let a=o;if(o===e){const c=n.findIndex(d=>d.key===e);a=t.length?t[Math.min(c,t.length-1)]?.key??null:null}r({tabs:t}),a&&s().focusTab(a)},focusTab:e=>{const{tabs:n}=s(),o=n.find(t=>t.key===e);if(o){const t=o.gubun==="C"?{viewId:o.key,viewLabel:o.label,prntInfo:o.componentItem?.prntInfo}:null;o.menuItem?.prsnInfoYn==="Y"?(r({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),console.log("✅ 탭 포커스 (개인정보) - activeMenuItem:",o.menuItem),s().setProtectFlagForKey(e)):(r({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),s().clearProtectFlagForKey(e))}else r({activeMenuId:e,activeMenuItem:null,activeDetailItem:null}),console.warn("❌ 탭을 찾을 수 없음:",e)},closeAllTabs:()=>r({tabs:[],activeMenuId:null,activeMenuItem:null,activeDetailItem:null}),toggleSidebar:()=>r(e=>({sidebarCollapsed:!e.sidebarCollapsed})),reorderTabs:e=>r(n=>{const o=new Map(n.tabs.map(t=>[t.key,t]));return{tabs:e.map(t=>o.get(t)).filter(Boolean)}}),setProtectFlagForKey:e=>r(n=>({tabProtectFlag:{...n.tabProtectFlag,[e]:!0}})),clearProtectFlagForKey:e=>r(n=>{const o={...n.tabProtectFlag};return delete o[e],{tabProtectFlag:o}}),setTabParams:(e,n)=>r(o=>{const t=o.tabParams[e]||{},a={...n||{}};return Object.keys(t).length===Object.keys(a).length&&Object.keys(a).every(d=>t[d]===a[d])?o:{tabParams:{...o.tabParams,[e]:a}}}),setComponentLabelMap:(e,n)=>r({componentLabelMap:e})})),Y=b.create((r,s)=>({popups:[],activePopupId:null,isLoading:!1,error:null,zIndexSeed:1e3,openPopup:async(e,n,o)=>{r({isLoading:!0,error:null});try{let t=null;const a=await C.callService(C.getServiceCode("SRCH_POPU"),{crprCd:C.getUserInfo()?.crprCd,popuCd:e});t=a?.mstr;const c=a?.dtls||[];if(!t||!t.popuUrl){const p=`팝업 정보를 찾을 수 없습니다: ${e}`;throw console.error(p),new Error(p)}const u=(p=>`/src/pages/views/popup/${p}`)(t.popuUrl),i=s().zIndexSeed+1,f={popupId:`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,popupCode:e,popupTitle:o?.title||t.popuNm||"팝업",popupUrl:u,popupParams:n,width:t.popuWdth||800,height:t.popuHght||600,resizable:!0,draggable:!0,buttonList:c,config:o,zIndex:i},m=s().popups.find(p=>p.popupCode===e);if(m){r({activePopupId:m.popupId,popups:s().popups.map(p=>p.popupId===m.popupId?{...p,config:o}:p),isLoading:!1});return}r(p=>({popups:[...p.popups,f],activePopupId:f.popupId,isLoading:!1,zIndexSeed:i}))}catch(t){r({error:t instanceof Error?t.message:"팝업 열기 실패",isLoading:!1})}},openCorePopup:(e,n,o)=>{const t=`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,a=s().zIndexSeed+1,d=J.localPopupRegistry[e]?.defaultConfig||{},u={...d,...o,buttons:o?.buttons!==void 0?o.buttons:d.buttons,callback:o?.callback!==void 0?o.callback:d.callback},i=s().popups.find(m=>m.popupCode===e&&m.isLocal);if(i){const m=s().zIndexSeed+1;r({activePopupId:i.popupId,zIndexSeed:m}),r(p=>({popups:p.popups.map(g=>g.popupId===i.popupId?{...g,config:u,zIndex:m}:g)}));return}const f={popupId:t,popupCode:e,popupTitle:u.title||e,popupUrl:"",popupParams:n,width:u.width||1e3,height:u.height||700,resizable:u.resizable!==void 0?u.resizable:!0,draggable:u.draggable!==void 0?u.draggable:!0,buttonList:[],config:u,isLocal:!0,zIndex:a};r(m=>({popups:[...m.popups,f],activePopupId:t,zIndexSeed:a}))},closePopup:e=>{const{popups:n,activePopupId:o}=s(),t=n.filter(c=>c.popupId!==e);let a=o;o===e&&(a=t.length>0?t[t.length-1].popupId:null),r({popups:t,activePopupId:a})},closeAllPopups:()=>{r({popups:[],activePopupId:null})},setActivePopup:e=>{const n=s().zIndexSeed+1;r(o=>({activePopupId:e,zIndexSeed:n,popups:o.popups.map(t=>t.popupId===e?{...t,zIndex:n}:t)}))},updatePopupConfig:(e,n)=>{r(o=>({popups:o.popups.map(t=>t.popupId===e?{...t,config:{...t.config,...n}}:t)}))}})),ie=b.create(r=>({requestCount:0,loading:!1,showLoading:()=>r(s=>{const e=s.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>r(s=>{const e=Math.max(0,s.requestCount-1);return{requestCount:e,loading:e>0}})})),ue=b.create(r=>({requestCount:0,loading:!1,showLoading:()=>r(s=>{const e=s.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>r(s=>{const e=Math.max(0,s.requestCount-1);return{requestCount:e,loading:e>0}})})),pe=()=>x.getState(),me=()=>Y.getState(),he=()=>j.getState(),fe=()=>z.getState(),ge=()=>T.getState(),Ie=()=>K.getState();exports.useCode=pe;exports.useCodeStore=x;exports.useColorStore=V;exports.useFavorite=fe;exports.useFavoriteStore=z;exports.useLoadingStore=ie;exports.useMenuModel=ge;exports.useMenuModelStore=T;exports.useMenuView=Ie;exports.useMenuViewStore=K;exports.useOptionStore=Q;exports.usePopupLoadingStore=ue;exports.usePopupState=me;exports.usePopupStore=Y;exports.useUser=he;exports.useUserStore=j;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("zustand"),C=require("../utils/index.cjs"),_=require("antd"),J=require("../chunks/layout-components-DMR4tl9_.cjs");function Z(r,s){let e;try{e=r()}catch{return}return{getItem:o=>{var t;const a=d=>d===null?null:JSON.parse(d,void 0),c=(t=e.getItem(o))!=null?t:null;return c instanceof Promise?c.then(a):a(c)},setItem:(o,t)=>e.setItem(o,JSON.stringify(t,void 0)),removeItem:o=>e.removeItem(o)}}const B=r=>s=>{try{const e=r(s);return e instanceof Promise?e:{then(n){return B(n)(e)},catch(n){return this}}}catch(e){return{then(n){return this},catch(n){return B(n)(e)}}}},X=(r,s)=>(e,n,o)=>{let t={storage:Z(()=>localStorage),partialize:m=>m,version:0,merge:(m,v)=>({...v,...m}),...s},a=!1;const c=new Set,d=new Set;let u=t.storage;if(!u)return r((...m)=>{console.warn(`[zustand persist middleware] Unable to update item '${t.name}', the given storage is currently unavailable.`),e(...m)},n,o);const i=()=>{const m=t.partialize({...n()});return u.setItem(t.name,{state:m,version:t.version})},f=o.setState;o.setState=(m,v)=>(f(m,v),i());const h=r((...m)=>(e(...m),i()),n,o);o.getInitialState=()=>h;let p;const I=()=>{var m,v;if(!u)return;a=!1,c.forEach(y=>{var k;return y((k=n())!=null?k:h)});const M=((v=t.onRehydrateStorage)==null?void 0:v.call(t,(m=n())!=null?m:h))||void 0;return B(u.getItem.bind(u))(t.name).then(y=>{if(y)if(typeof y.version=="number"&&y.version!==t.version){if(t.migrate){const k=t.migrate(y.state,y.version);return k instanceof Promise?k.then(L=>[!0,L]):[!0,k]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,y.state];return[!1,void 0]}).then(y=>{var k;const[L,q]=y;if(p=t.merge(q,(k=n())!=null?k:h),e(p,!0),L)return i()}).then(()=>{M?.(p,void 0),p=n(),a=!0,d.forEach(y=>y(p))}).catch(y=>{M?.(void 0,y)})};return o.persist={setOptions:m=>{t={...t,...m},m.storage&&(u=m.storage)},clearStorage:()=>{u?.removeItem(t.name)},getOptions:()=>t,rehydrate:()=>I(),hasHydrated:()=>a,onHydrate:m=>(c.add(m),()=>{c.delete(m)}),onFinishHydration:m=>(d.add(m),()=>{d.delete(m)})},t.skipHydration||I(),p||h},S=X,j=b.create()(S((r,s)=>({user:null,isLoggedIn:!1,hrInfo:null,login:(e,n)=>{r({user:e,isLoggedIn:!0,hrInfo:n}),console.log("사용자 로그인:",e),console.log("HR 정보 저장:",n)},logout:()=>{r({user:null,isLoggedIn:!1,hrInfo:null}),console.log("사용자 로그아웃")},updateUser:(e,n)=>{const o=s().user,t=s().hrInfo;o&&r({user:{...o,...e}}),t&&r({hrInfo:{...t,...n}})}}),{name:"user-storage",partialize:r=>({user:r.user,hrInfo:r.hrInfo,isLoggedIn:r.isLoggedIn})})),O={CACHE_SIZE_LIMIT:1e3},l={codeCache:new Map,nameCache:new Map,optionCache:new Map,colorCache:new Map,loadedGroups:new Set,cacheHits:new Map,clearCache(){this.codeCache.clear(),this.nameCache.clear(),this.optionCache.clear(),this.colorCache.clear(),this.loadedGroups.clear(),this.cacheHits.clear()},cleanupCache(){const r=Array.from(this.cacheHits.entries());r.sort((e,n)=>e[1]-n[1]),r.slice(0,Math.floor(r.length*.3)).forEach(([e])=>{this.codeCache.delete(e),this.nameCache.delete(e),this.optionCache.delete(e),this.colorCache.delete(e),this.cacheHits.delete(e)})},isGroupLoaded(r){return this.loadedGroups.has(r)},markGroupLoaded(r){this.loadedGroups.add(r)}},W=r=>{console.log("대규모 데이터 변환 시작:",r);const s={};if(r&&r.code&&Array.isArray(r.code)){const e=r.code,n=r.opt||[],o=new Map;n.forEach(t=>{t.cmmnCd&&t.enblYn==="Y"&&(o.has(t.cmmnCd)||o.set(t.cmmnCd,[]),o.get(t.cmmnCd).push(t))}),e.forEach(t=>{if(t&&t.cmmnCdGrp&&t.cmmnCd&&t.enblYn==="Y"){const a=t.cmmnCdGrp;s[a]||(s[a]={});const d=(o.get(t.cmmnCd)||[]).reduce((u,i)=>(i.optnCd&&i.optnNm&&(u[i.optnCd]=i.optnNm),u),{});s[a][t.cmmnCd]={codeValue:t.cmmnCd,codeNm:t.cmmnCdNm,groupCode:t.cmmnCdGrp,commonCode:t.cmmnCd,labelColor:t.cmmnCdClr,systemCodeYn:t.syscdYn,sortOrder:parseInt(t.sortOrd)||1,enabled:t.enblYn==="Y",options:Object.keys(d).length>0?d:null,originalData:t}}})}return console.log("대규모 데이터 변환 완료:",s),s},g=b.create()(S((r,s)=>({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set,fetchData:async()=>{r({isLoading:!0,error:null});try{console.log("대규모 공통코드 데이터 가져오기 시작: SCMSIGN00301");const e=await C.callService(C.getServiceCode("SRCH_CODE"),{crprCd:"100"});console.log("대규모 공통코드 응답:",e),console.log("대규모 공통코드목록:",e.code),console.log("대규모 공통코드옵션션목록:",e.opt);const n=W(e);l.clearCache();const o=new Set(Object.keys(n));o.forEach(t=>{l.markGroupLoaded(t)}),r({codeData:n,isLoading:!1,error:null,lastUpdated:new Date,loadedGroups:o}),console.log("대규모 공통코드 데이터 가져오기 완료")}catch(e){console.error("대규모 공통코드 데이터 가져오기 실패:",e),r({isLoading:!1,error:e instanceof Error?e.message:"대규모 공통코드 데이터 가져오기 실패"})}},loadSpecificGroup:async e=>{const{codeData:n,loadedGroups:o}=s();if(!n||o.has(e))return;const t=new Set(o).add(e);r({loadedGroups:t}),l.markGroupLoaded(e)},setData:e=>{l.clearCache();const n=new Set(Object.keys(e));n.forEach(o=>{l.markGroupLoaded(o)}),r({codeData:e,lastUpdated:new Date,loadedGroups:n})},clearData:()=>{l.clearCache(),r({codeData:null,isLoading:!1,error:null,lastUpdated:null,loadedGroups:new Set})},getLoadedGroups:()=>Array.from(s().loadedGroups)}),{name:"large-data-storage",partialize:r=>({codeData:r.codeData,lastUpdated:r.lastUpdated,loadedGroups:Array.from(r.loadedGroups)})})),x=b.create()(S((r,s)=>({get codeData(){return g.getState().codeData},get isLoading(){return g.getState().isLoading},get error(){return g.getState().error},get lastUpdated(){return g.getState().lastUpdated},fetchCommonCodes:async()=>{await g.getState().fetchData()},getCodeList:(e,n)=>{const{enabledOnly:o=!0,systemCodeOnly:t=!1,sortByOrder:a=!1,excludeParentCode:c=!1}=n||{},d=`simpleCodeList_${e}_${o}_${t}_${a}_${c}`;if(l.optionCache.has(d)){const I=l.cacheHits.get(d)||0;return l.cacheHits.set(d,I+1),l.optionCache.get(d)}const u=g.getState().codeData;if(!u)return[];if(!l.isGroupLoaded(e)&&!u[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const i=[],f=u[e];f&&Object.values(f).forEach(I=>{if(!(o&&!I.enabled)&&!(t&&I.systemCodeYn!=="Y"))if(c){const m=e.length,v=I.codeValue.substring(m);v.length>0&&i.push({...I,codeValue:v})}else i.push(I)});let h;a?h=i.sort((I,m)=>I.sortOrder!==m.sortOrder?I.sortOrder-m.sortOrder:I.codeValue.localeCompare(m.codeValue)):h=i.sort((I,m)=>I.codeValue.localeCompare(m.codeValue));const p=h.map(I=>({label:I.codeNm,value:I.codeValue,tagColor:I.labelColor}));return l.optionCache.size>=O.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.optionCache.set(d,p),l.cacheHits.set(d,1),p},getCodeName:e=>{if(l.nameCache.has(e)){const o=l.cacheHits.get(`name_${e}`)||0;return l.cacheHits.set(`name_${e}`,o+1),l.nameCache.get(e)}const n=g.getState().codeData;if(!n)return null;for(const o of Object.values(n))for(const t of Object.values(o))if(t.codeValue===e)return l.nameCache.set(e,t.codeNm),l.cacheHits.set(`name_${e}`,1),t.codeNm;return null},getCodeColor:e=>{if(l.colorCache.has(e)){const o=l.cacheHits.get(`color_${e}`)||0;return l.cacheHits.set(`color_${e}`,o+1),l.colorCache.get(e)}const n=g.getState().codeData;if(!n)return null;for(const o of Object.values(n))for(const t of Object.values(o))if(t.codeValue===e)return l.colorCache.set(e,t.labelColor||""),l.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getGridLookup:e=>{const n=`gridLookup_${e}`;if(l.optionCache.has(n)){const u=l.cacheHits.get(n)||0;return l.cacheHits.set(n,u+1),l.optionCache.get(n)}const o=g.getState().codeData;if(!o)return{labels:[],values:[],lookupDisplay:!0};const t=o[e];if(!t)return{labels:[],values:[],lookupDisplay:!0};const a=[],c=[];Object.values(t).filter(u=>u.enabled).sort((u,i)=>u.sortOrder-i.sortOrder).forEach(u=>{a.push(u.codeNm),c.push(u.codeValue)});const d={labels:a,values:c,lookupDisplay:!0};return l.optionCache.set(n,d),l.cacheHits.set(n,1),d},getCodeByOption:(e,n,o)=>{const t=`codeByOption_${e}_${n}_${o}`;if(l.codeCache.has(t)){const i=l.cacheHits.get(t)||0;return l.cacheHits.set(t,i+1),l.codeCache.get(t)}const a=g.getState().codeData;if(!a)return[];const c=[],d=a[e];d&&Object.values(d).forEach(i=>{i.enabled&&i.options&&i.options[n]===o&&c.push({...i,codeNm:i.options[n]||i.codeNm})});const u=c.sort((i,f)=>i.codeValue.localeCompare(f.codeValue));return l.codeCache.size>=O.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.codeCache.set(t,u),l.cacheHits.set(t,1),u},getCodeListByOption:(e,n,o)=>{const{enabledOnly:t=!0,systemCodeOnly:a=!1,sortByOrder:c=!1}=o||{},d=`codeListByOption_${e}_${n}_${t}_${a}_${c}`;if(l.codeCache.has(d)){const p=l.cacheHits.get(d)||0;return l.cacheHits.set(d,p+1),l.codeCache.get(d)}const u=g.getState().codeData;if(!u)return[];if(!l.isGroupLoaded(e)&&!u[e])return console.warn(`그룹 ${e}가 아직 로드되지 않았습니다.`),[];const i=[],f=u[e];f&&Object.values(f).forEach(p=>{t&&!p.enabled||a&&p.systemCodeYn!=="Y"||p.options&&p.options[n]&&i.push({label:p.options[n],value:p.commonCode,tagColor:p.labelColor})});let h;return c?h=i.sort((p,I)=>p.value.localeCompare(I.value)):h=i.sort((p,I)=>p.value.localeCompare(I.value)),l.codeCache.size>=O.CACHE_SIZE_LIMIT&&l.cleanupCache(),l.codeCache.set(d,h),l.cacheHits.set(d,1),h},getAvailableGroupCodes:()=>{const e="available_group_codes";if(l.nameCache.has(e)){const t=l.cacheHits.get(e)||0;return l.cacheHits.set(e,t+1),JSON.parse(l.nameCache.get(e))}const n=g.getState().codeData;if(!n)return[];const o=Object.keys(n).sort();return l.nameCache.set(e,JSON.stringify(o)),l.cacheHits.set(e,1),o},clearCodes:()=>{g.getState().clearData()}}),{name:"code-storage",partialize:r=>({})})),Q=b.create()(S((r,s)=>({get codeData(){return g.getState().codeData},get isLoading(){return g.getState().isLoading},get error(){return g.getState().error},get lastUpdated(){return g.getState().lastUpdated},fetchCommonCodes:async()=>{await g.getState().fetchData()},getOptionValue:(e,n)=>{const o=`option_${e}_${n}`;if(l.optionCache.has(o)){const c=l.cacheHits.get(o)||0;return l.cacheHits.set(o,c+1),l.optionCache.get(o)}const t=g.getState().codeData;if(!t)return null;const a=t[e];if(a&&a[n]){const c=a[n].options;return l.optionCache.set(o,c),l.cacheHits.set(o,1),c}return null},getOptionByKey:(e,n,o)=>{const t=`option_${e}_${n}_${o}`;if(l.optionCache.has(t)){const d=l.cacheHits.get(t)||0;return l.cacheHits.set(t,d+1),l.optionCache.get(t)}const a=s().getOptionValue(e,n),c=a?a[o]:null;return l.optionCache.set(t,c),l.cacheHits.set(t,1),c},clearCodes:()=>{g.getState().clearData()}}),{name:"option-storage",partialize:r=>({})})),V=b.create()(S((r,s)=>({get codeData(){return g.getState().codeData},get isLoading(){return g.getState().isLoading},get error(){return g.getState().error},get lastUpdated(){return g.getState().lastUpdated},fetchCommonCodes:async()=>{await g.getState().fetchData()},getColorCode:e=>{if(l.colorCache.has(e)){const o=l.cacheHits.get(`color_${e}`)||0;return l.cacheHits.set(`color_${e}`,o+1),l.colorCache.get(e)}const n=g.getState().codeData;if(!n)return null;for(const o of Object.values(n))for(const t of Object.values(o))if(t.codeValue===e)return l.colorCache.set(e,t.labelColor||""),l.cacheHits.set(`color_${e}`,1),t.labelColor;return null},getColorMapping:()=>{const e="color_mapping";if(l.optionCache.has(e)){const t=l.cacheHits.get(e)||0;return l.cacheHits.set(e,t+1),l.optionCache.get(e)}const n=g.getState().codeData;if(!n)return[];const o=[];return Object.values(n).forEach(t=>{Object.values(t).forEach(a=>{a.labelColor&&o.push({code:a.codeValue,color:a.labelColor})})}),l.optionCache.set(e,o),l.cacheHits.set(e,1),o},clearCodes:()=>{g.getState().clearData()}}),{name:"color-storage",partialize:r=>({})})),ee=(r,s)=>({nodes:{},rootIds:[],loadedFor:void 0,loading:!1,error:void 0,treeNodes:[],isMenuBookmarked:e=>Object.values(s().nodes).some(n=>n.type==="M"&&n.menuId===e),getPrntBkmkIdByMenuId:e=>{const n=w(s().nodes,e);return n?s().nodes[n]?.prntBkmkId??"-":"-"},getNodeByMenuId:e=>{const n=w(s().nodes,e);if(!n)return null;const o=s().nodes[n];return o?.type==="M"?o:null},getFolderTree:e=>{const{nodes:n,rootIds:o}=s(),t=c=>e?c.toLowerCase().includes(e.toLowerCase()):!0,a=c=>{const d=n[c];if(!d||d.type!=="F")return null;const u=d,i=(u.children||[]).map(h=>n[h]).filter(h=>!!h&&h.type==="F").map(h=>a(h.bkmkId)).filter(Boolean);return t(u.bkmkNm)||i.length>0?{key:u.bkmkId,title:`📁 ${u.bkmkNm}`,children:i.length?i:void 0}:null};return o.map(c=>a(c)).filter(Boolean)},loadFavorites:async(e,n=!1)=>{console.log("loadFavorites ::::: ",e,n);const o=s();if(!(!n&&o.loadedFor===e&&Object.keys(o.nodes).length)){r({loading:!0,error:void 0});try{const t=await C.callService("SCMBKMK00101",{userId:e}),a=Array.isArray(t?.sub)?t.sub:[],c=te(a),d=N(c.nodes,c.rootIds);r({...c,treeNodes:d,loadedFor:e,loading:!1})}catch(t){throw r({loading:!1,error:t?.message||"즐겨찾기 로드 실패"}),t}}},loadFavoritesIfNeeded:async e=>{const n=s();(n.loadedFor!==e||Object.keys(n.nodes).length===0)&&await s().loadFavorites(e)},addNode:async e=>{const n=F(s()),o=oe();r(t=>{const a=e.sortOrdr??E(t,e.prntBkmkId),c={...t,nodes:{...t.nodes,[o]:e.type==="F"?{bkmkId:o,type:"F",prntBkmkId:e.prntBkmkId||"-",sortOrdr:a,bkmkNm:e.bkmkNm??"새 폴더",children:[],sysCd:e.sysCd,userId:e.userId}:{bkmkId:o,type:"M",prntBkmkId:e.prntBkmkId,sortOrdr:a,menuId:e.menuId??"",menuNm:e.menuNm,sysCd:e.sysCd,userId:e.userId}},rootIds:t.rootIds.slice(),treeNodes:t.treeNodes};return ne(c,o,e.prntBkmkId),c.treeNodes=N(c.nodes,c.rootIds),c});try{let t=o;const a=E(s(),e.prntBkmkId),c=await C.callService("SCMBKMK00102",{iudFlag:"I",type:e.type,sysCd:e.sysCd,userId:e.userId,bkmkId:o,bkmkNm:e.bkmkNm,prntBkmkId:e.prntBkmkId,menuId:e.menuId,sortOrdr:a,chngId:C.getUserId()});return t=String(c?.bkmkId??c?.itemId??o),r(d=>{const u=se(d,o,t);return{...u,treeNodes:N(u.nodes,u.rootIds)}}),t}catch(t){throw r(n),t}},moveNode:async({bkmkId:e,newPrntBkmkId:n,sortOrdr:o,userId:t})=>{const a=s(),c=structuredClone(a.nodes),d=[...a.rootIds],u=c[e];if(!u)return;if(n!=="-"){const p=c[n];if(!p||p.type!=="F")throw new Error("부모는 폴더만 가능합니다.")}const i=u.prntBkmkId??"-",f=i==="-"?d:c[i].children||=[];{const p=f.indexOf(e);p>=0&&f.splice(p,1)}const h=n==="-"?d:c[n].children||=[];h.splice(Math.max(0,Math.min(o,h.length)),0,e),u.prntBkmkId=n,r({nodes:c,rootIds:d}),$(c,d,n),$(c,d,i);try{await C.callService("SCMBKMK00104",{bkmkId:e,prntBkmkId:n,sortOrdr:o,chngId:t})}catch(p){throw r(a),p}},removeNode:async e=>{const n=F(s());r(o=>{if(!o.nodes[e])return o;const t={...o,nodes:{...o.nodes},rootIds:o.rootIds.slice(),treeNodes:o.treeNodes};return R(t,e),t.treeNodes=N(t.nodes,t.rootIds),t});try{await C.callService("SCMBKMK00103",{bkmkId:e})}catch(o){throw r(n),o}},editNode:async({bkmkId:e,userId:n,bkmkNm:o,prntBkmkId:t,sortOrdr:a})=>{const c=F(s());r(d=>{const u={...d,nodes:{...d.nodes}},i=u.nodes[e];return i?.type==="F"&&typeof o=="string"&&(u.nodes[e]={...i,bkmkNm:o}),u});try{await C.callService("SCMBKMK00102",{iudFlag:"U",userId:n,bkmkId:e,bkmkNm:o,prntBkmkId:t,sortOrdr:a,chngId:C.getUserId()})}catch(d){throw r(c),d}},addFolder:async(e,n,o,t)=>await s().addNode({type:"F",bkmkNm:e,prntBkmkId:n,sysCd:o,userId:t}),addMenuToFolder:async(e,n)=>w(s().nodes,n.menuId)?"이미 북마크에 저장된 메뉴입니다.":await s().addNode({type:"M",prntBkmkId:e,sysCd:"KH",userId:C.getUserId(),menuId:n.menuId,menuNm:n.menuNm}),toggleMenuFavorite:async(e,n)=>{const o=s(),t=Object.values(o.nodes).find(c=>c.type==="M"&&c.menuId===n.menuId);if(t){await s().removeNode(t.bkmkId);return}let a=U(o);a||(await s().loadFavorites(e,!0),a=U(s())),a&&await s().addNode({type:"M",prntBkmkId:a,sysCd:"KH",userId:C.getUserId(),menuId:n.menuId,menuNm:n.menuNm})},removeMenuByMenuId:async e=>{const n=s(),o=w(n.nodes,e);o&&await s().removeNode(o)},removeMenu:async e=>{await s().removeNode(e)},removeFolder:async e=>{await s().removeNode(e)},editFolder:async(e,n,o,t,a)=>{await s().editNode({bkmkId:e,userId:n,bkmkNm:o,prntBkmkId:t,sortOrdr:a})},convertToAntTreeData:(e,n,o,t=!1)=>{const a=d=>o?d.toLowerCase().includes(o.toLowerCase()):!0,c=d=>{const u=e[d];if(!u||t&&u.type!=="F")return null;if(u.type==="F"){const i=u,f=(i.children||[]).map(p=>c(p)).filter(Boolean);return a(i.bkmkNm)||f.length>0?{key:i.bkmkId,type:"F",title:`📁 ${i.bkmkNm}`,bkmkNm:i.bkmkNm,prntBkmkId:i.prntBkmkId,sortOrdr:i.sortOrdr,fullPath:i.fullPath,children:f.length?f:void 0}:null}else{const i=u,f=i.menuNm?`${i.menuNm} (${i.menuId})`:i.menuId;return a(f)?{key:i.bkmkId,type:"M",title:`📄 ${f}`,prntBkmkId:i.prntBkmkId,sortOrdr:i.sortOrdr,fullPath:i.fullPath,isLeaf:!0}:null}};return n.map(c).filter(Boolean)}}),z=b.create(ee);function te(r){const s={},e=[],n=o=>{o.forEach(t=>{const a={type:t.type,bkmkId:t.bkmkId??t.BKMK_ID??t.id,prntBkmkId:t.prntBkmkId??t.PRNT_BKMK_ID??"-",sortOrdr:Number(t.sortOrdr??t.SORT_ORDR??0),sysCd:t.sysCd??t.SYS_CD,userId:t.userId??t.USER_ID,fullPath:t.fullPath??t.FULL_PATH};if(t.type==="F"){s[a.bkmkId]={...a,bkmkNm:t.bkmkNm??t.BKMK_NM??t.name??a.bkmkId,children:[]};const c=Array.isArray(t.children)?t.children:[];n(c)}else s[a.bkmkId]={...a,menuId:t.menuId??t.MENU_ID??"",menuNm:t.menuNm??t.MENU_NM}})};return n(r),Object.values(s).forEach(o=>{if(o.prntBkmkId&&o.prntBkmkId!=="-"){const t=s[o.prntBkmkId];t?.type==="F"&&t.children.push(o.bkmkId)}else o.type==="F"&&e.push(o.bkmkId)}),e.sort((o,t)=>(s[o].sortOrdr??0)-(s[t].sortOrdr??0)),Object.values(s).forEach(o=>{o.type==="F"&&o.children.sort((a,c)=>(s[a].sortOrdr??0)-(s[c].sortOrdr??0))}),{nodes:s,rootIds:e}}function F(r){return{...r,nodes:JSON.parse(JSON.stringify(r.nodes)),rootIds:r.rootIds.slice()}}function oe(){return`tmp_${Math.random().toString(36).slice(2,10)}`}function E(r,s){if(!s||s==="-")return r.rootIds.length;const e=r.nodes[s];return e?e.children.length:0}function ne(r,s,e){const n=r.nodes[s];if(n)if(e&&e!=="-"){const o=r.nodes[e];if(!o||o.type!=="F")return;n.prntBkmkId=e,o.children=[...o.children,s]}else n.prntBkmkId="-",r.rootIds=[...r.rootIds,s]}function re(r,s){const e=r.nodes[s];if(!e)return;const n=e.prntBkmkId;if(n&&n!=="-"){const o=r.nodes[n];o?.type==="F"&&(o.children=o.children.filter(t=>t!==s))}else r.rootIds=r.rootIds.filter(o=>o!==s)}function R(r,s){const e=r.nodes[s];if(!e)return;e.type==="F"&&e.children.slice().forEach(a=>R(r,a)),re(r,s);const{[s]:n,...o}=r.nodes;r.nodes=o}function se(r,s,e){if(s===e)return r;const n=r.nodes[s];if(!n)return r;const o=JSON.parse(JSON.stringify(n));o.bkmkId=e;const t={...r.nodes,[e]:o};delete t[s];let a=r.rootIds;if(o.prntBkmkId&&o.prntBkmkId!=="-"){const c=t[o.prntBkmkId];c?.type==="F"&&(t[o.prntBkmkId]={...c,children:c.children.map(d=>d===s?e:d)})}else a=r.rootIds.map(c=>c===s?e:c);return{...r,nodes:t,rootIds:a}}function U(r){return r.rootIds.find(s=>r.nodes[s]?.type==="F")??null}function N(r,s){const e={};Object.values(r).forEach(d=>{const u=d.bkmkId,i=d.prntBkmkId;!u||!i||i==="-"||i===u||(e[i]??=[]).push(u)});const n=new Set,o=d=>{if(n.has(d))return null;const u=r[d];if(!u)return null;n.add(d);try{if(u.type==="F"){const f=u,h=e[d]??[];return{type:"F",bkmkId:d,bkmkNm:f.bkmkNm,prntBkmkId:f.prntBkmkId,children:h.map(o).filter(Boolean)}}const i=u;return{type:"M",bkmkId:d,bkmkNm:i.menuNm,menuId:i.menuId,menuNm:i.menuNm,prntBkmkId:i.prntBkmkId}}finally{n.delete(d)}},t=Object.values(r).filter(d=>d.prntBkmkId==="-"&&d.type==="M").map(d=>d.bkmkId),a=Object.values(r).filter(d=>d.prntBkmkId==="-"&&d.type==="F").map(d=>d.bkmkId);return Array.from(new Set([...s,...t,...a])).map(o).filter(Boolean)}function w(r,s){for(const e of Object.values(r))if(e.type==="M"&&e.menuId===s)return e.bkmkId;return null}function $(r,s,e){(!e||e==="-"?s:r[e].children||[]).forEach((o,t)=>{const a=r[o];a&&(a.sortOrdr=t)})}const H={DEFAULT_PRNT_GBCD:1},ae=r=>r&&typeof r=="object"&&typeof r.menuId=="string"&&typeof r.menuNm=="string",A=r=>Array.isArray(r)&&r.every(ae);let P=[],G=[];const ce=r=>{if(r&&typeof r=="object"){const s=r;if(s.menus&&A(s.menus))return s.menus;if(A(r))return r}return console.warn("⚠️ 메뉴 응답이 비어있거나 예상과 다릅니다."),[]},de=(r,s)=>!!s&&r.crprCd===s.crprCd&&r.userId===s.userId&&(r.prntGbcd??H.DEFAULT_PRNT_GBCD)===(s.prntGbcd??H.DEFAULT_PRNT_GBCD),le=r=>{if(P.length===r.length&&P.every((t,a)=>t.menuId===r[a]?.menuId&&t.menuPrntId===r[a]?.menuPrntId))return G;if(!r.length)return[];const s=new Map,e=[];r.forEach(t=>t?.menuId&&s.set(t.menuId,{...t,children:[]})),r.forEach(t=>{const a=s.get(t.menuId);a&&(t.menuPrntId&&t.menuPrntId!==""&&t.menuPrntId!=="-"?s.get(t.menuPrntId)?.children?.push(a):e.push(a))});const n=t=>t.sort((a,c)=>(a?.menuNo??0)-(c?.menuNo??0)).map(a=>({...a,children:a.children&&a.children.length?n(a.children):void 0})),o=n(e);return P=[...r],G=o,o},T=b.create((r,s)=>({menuList:[],flatMenuList:[],isLoading:!1,error:null,_lastFetchParams:null,fetchMenu:async({crprCd:e,userId:n,prntGbcd:o})=>{const t={crprCd:e,userId:n,prntGbcd:o??H.DEFAULT_PRNT_GBCD};if(de(t,s()._lastFetchParams)){console.log("✅ 중복 fetch 차단",t);return}r({isLoading:!0,error:null,_lastFetchParams:t});try{const a=await C.callService(C.getServiceCode("AUTH_MENU"),t),c=ce(a),d=le(c);r({flatMenuList:c,menuList:d,isLoading:!1,error:null})}catch(a){r({isLoading:!1,error:a?.message??"메뉴 로드 실패"})}},clearMenu:()=>{r({menuList:[],flatMenuList:[],error:null,_lastFetchParams:null})},findMenuById:e=>{const{flatMenuList:n}=s();return n.find(o=>o.menuId===e)??null}})),D={MAX_TABS:15},K=b.create((r,s)=>({activeMenuId:null,activeMenuItem:null,activeDetailItem:null,tabs:[],sidebarCollapsed:!1,maxTabs:D.MAX_TABS,tabProtectFlag:{},tabParams:{},componentLabelMap:{},openTabFromMenu:(e,n)=>{const{tabs:o}=s(),t=o.find(c=>c.key===e.menuId),a=o.find(c=>c.key===e.menuId);if(t)a!=null?(r({activeMenuId:e.menuId,activeMenuItem:e}),s().setTabParams(e.menuId,n||{}),e?.prsnInfoYn==="Y"&&s().setProtectFlagForKey(e.menuId)):_.message.warning("유효하지 않은 메뉴정보입니다.");else{if(o.length>D.MAX_TABS){console.warn("❌ 최대 탭 개수를 초과했습니다."),_.message.warning(`최대 ${D.MAX_TABS}개의 탭만 열 수 있습니다.
2
+ 기존 탭을 닫고 다시 시도해주세요.`);return}const c={key:e.menuId,label:e.menuNm,gubun:"M",menuItem:e,closable:!0};r({tabs:[...o,c],activeMenuId:e.menuId,activeMenuItem:e}),s().setTabParams(e.menuId,n||{}),e?.prsnInfoYn==="Y"&&s().setProtectFlagForKey(e.menuId)}},openTabByMenuId:(e,n)=>{const o=T.getState().findMenuById(e);o?s().openTabFromMenu(o,n):_.message.warning("메뉴 ID를 찾을 수 없습니다.")},openDetailView:(e,n,o)=>{const{tabs:t}=s();if(t.find(c=>c.key===e.viewId))s().focusTab(e.viewId);else{const c={key:e.viewId,label:e.viewLabel,gubun:"C",componentItem:{scrnPath:n,prsnInfoYn:o,prntInfo:e.prntInfo},closable:!0};r({tabs:[...t,c],activeMenuId:e.viewId,activeDetailItem:e}),s().setTabParams(e.viewId,e.viewParams||{})}},closeTab:e=>{const{tabs:n,activeMenuId:o}=s();n.find(c=>c.key===e);const t=n.filter(c=>c.key!==e);let a=o;if(o===e){const c=n.findIndex(d=>d.key===e);a=t.length?t[Math.min(c,t.length-1)]?.key??null:null}r({tabs:t}),a&&s().focusTab(a)},focusTab:e=>{const{tabs:n}=s(),o=n.find(t=>t.key===e);if(o){const t=o.gubun==="C"?{viewId:o.key,viewLabel:o.label,prntInfo:o.componentItem?.prntInfo}:null;o.menuItem?.prsnInfoYn==="Y"?(r({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),console.log("✅ 탭 포커스 (개인정보) - activeMenuItem:",o.menuItem),s().setProtectFlagForKey(e)):(r({activeMenuId:e,activeMenuItem:o.menuItem,activeDetailItem:t}),s().clearProtectFlagForKey(e))}else r({activeMenuId:e,activeMenuItem:null,activeDetailItem:null}),console.warn("❌ 탭을 찾을 수 없음:",e)},closeAllTabs:()=>r({tabs:[],activeMenuId:null,activeMenuItem:null,activeDetailItem:null}),toggleSidebar:()=>r(e=>({sidebarCollapsed:!e.sidebarCollapsed})),reorderTabs:e=>r(n=>{const o=new Map(n.tabs.map(t=>[t.key,t]));return{tabs:e.map(t=>o.get(t)).filter(Boolean)}}),setProtectFlagForKey:e=>r(n=>({tabProtectFlag:{...n.tabProtectFlag,[e]:!0}})),clearProtectFlagForKey:e=>r(n=>{const o={...n.tabProtectFlag};return delete o[e],{tabProtectFlag:o}}),setTabParams:(e,n)=>r(o=>{const t=o.tabParams[e]||{},a={...n||{}};return Object.keys(t).length===Object.keys(a).length&&Object.keys(a).every(d=>t[d]===a[d])?o:{tabParams:{...o.tabParams,[e]:a}}}),setComponentLabelMap:(e,n)=>r({componentLabelMap:e})})),Y=b.create((r,s)=>({popups:[],activePopupId:null,isLoading:!1,error:null,zIndexSeed:1e3,openPopup:async(e,n,o)=>{r({isLoading:!0,error:null});try{let t=null;const a=await C.callService(C.getServiceCode("SRCH_POPU"),{crprCd:C.getUserInfo()?.crprCd,popuCd:e});t=a?.mstr;const c=a?.dtls||[];if(!t||!t.popuUrl){const p=`팝업 정보를 찾을 수 없습니다: ${e}`;throw console.error(p),new Error(p)}const u=(p=>`/src/pages/views/popup/${p}`)(t.popuUrl),i=s().zIndexSeed+1,f={popupId:`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,popupCode:e,popupTitle:o?.title||t.popuNm||"팝업",popupUrl:u,popupParams:n,width:t.popuWdth||800,height:t.popuHght||600,resizable:!0,draggable:!0,buttonList:c,config:o,zIndex:i},h=s().popups.find(p=>p.popupCode===e);if(h){r({activePopupId:h.popupId,popups:s().popups.map(p=>p.popupId===h.popupId?{...p,config:o}:p),isLoading:!1});return}r(p=>({popups:[...p.popups,f],activePopupId:f.popupId,isLoading:!1,zIndexSeed:i}))}catch(t){r({error:t instanceof Error?t.message:"팝업 열기 실패",isLoading:!1})}},openCorePopup:(e,n)=>{const o=`popup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,t=s().zIndexSeed+1,c=J.localPopupRegistry[e]?.defaultConfig||{},d={...c,...n,buttons:n?.buttons!==void 0?n.buttons:c.buttons,callback:n?.callback!==void 0?n.callback:c.callback},u=n?.defaultParams||{},i=s().popups.find(h=>h.popupCode===e&&h.isLocal);if(i){const h=s().zIndexSeed+1;r({activePopupId:i.popupId,zIndexSeed:h}),r(p=>({popups:p.popups.map(I=>I.popupId===i.popupId?{...I,config:d,zIndex:h,close:()=>{s().closePopup(i.popupId)}}:I)}));return}const f={popupId:o,popupCode:e,popupTitle:d.title||e,popupUrl:"",popupParams:u,width:d.width||1e3,height:d.height||700,resizable:d.resizable!==void 0?d.resizable:!0,draggable:d.draggable!==void 0?d.draggable:!0,buttonList:[],config:d,isLocal:!0,zIndex:t,close:()=>{s().closePopup(o)}};r(h=>({popups:[...h.popups,f],activePopupId:o,zIndexSeed:t}))},closePopup:e=>{const{popups:n,activePopupId:o}=s(),t=n.filter(c=>c.popupId!==e);let a=o;o===e&&(a=t.length>0?t[t.length-1].popupId:null),r({popups:t,activePopupId:a})},closeAllPopups:()=>{r({popups:[],activePopupId:null})},setActivePopup:e=>{const n=s().zIndexSeed+1;r(o=>({activePopupId:e,zIndexSeed:n,popups:o.popups.map(t=>t.popupId===e?{...t,zIndex:n}:t)}))},updatePopupConfig:(e,n)=>{r(o=>({popups:o.popups.map(t=>t.popupId===e?{...t,config:{...t.config,...n}}:t)}))}})),ie=b.create(r=>({requestCount:0,loading:!1,showLoading:()=>r(s=>{const e=s.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>r(s=>{const e=Math.max(0,s.requestCount-1);return{requestCount:e,loading:e>0}})})),ue=b.create(r=>({requestCount:0,loading:!1,showLoading:()=>r(s=>{const e=s.requestCount+1;return{requestCount:e,loading:e>0}}),hideLoading:()=>r(s=>{const e=Math.max(0,s.requestCount-1);return{requestCount:e,loading:e>0}})})),pe=()=>x.getState(),he=()=>Y.getState(),me=()=>j.getState(),fe=()=>z.getState(),Ie=()=>T.getState(),ge=()=>K.getState();exports.useCode=pe;exports.useCodeStore=x;exports.useColorStore=V;exports.useFavorite=fe;exports.useFavoriteStore=z;exports.useLoadingStore=ie;exports.useMenuModel=Ie;exports.useMenuModelStore=T;exports.useMenuView=ge;exports.useMenuViewStore=K;exports.useOptionStore=Q;exports.usePopupLoadingStore=ue;exports.usePopupState=he;exports.usePopupStore=Y;exports.useUser=me;exports.useUserStore=j;