@bwg-ui/core 1.2.32 → 1.2.35

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 (49) hide show
  1. package/dist/chunks/{CMSearchIntfGwP01-uJxdFXUb.cjs → CMSearchIntfGwP01-CMSQULsU.cjs} +1 -1
  2. package/dist/chunks/{CMSearchIntfGwP01-C_y_G3xh.js → CMSearchIntfGwP01-Duabg_5A.js} +1 -1
  3. package/dist/chunks/{MenuReport-DkWB3Yyc.cjs → MenuReport-5e2dMr_C.cjs} +1 -1
  4. package/dist/chunks/{MenuReport-XwdiwiFn.js → MenuReport-B4EU1A6l.js} +1 -1
  5. package/dist/chunks/{common-components-DcTm1Tn1.cjs → common-components-D3-r7D-8.cjs} +30 -30
  6. package/dist/chunks/{common-components-Cxh8PLBH.js → common-components-DIpOkbb5.js} +452 -401
  7. package/dist/chunks/{layout-components-Bp6b-T1V.js → layout-components-D2Fla5uu.js} +952 -699
  8. package/dist/chunks/layout-components-pfHVy2at.cjs +35 -0
  9. package/dist/components/common/index.cjs +1 -1
  10. package/dist/components/common/index.js +1 -1
  11. package/dist/components/core/BwgDatePicker.d.ts.map +1 -1
  12. package/dist/components/core/BwgDownload.d.ts +3 -3
  13. package/dist/components/core/BwgDownload.d.ts.map +1 -1
  14. package/dist/components/core/index.cjs +1 -1
  15. package/dist/components/core/index.js +546 -526
  16. package/dist/components/guide/index.cjs +1 -1
  17. package/dist/components/guide/index.js +2 -2
  18. package/dist/components/layout/AppWrapper.d.ts +1 -1
  19. package/dist/components/layout/AppWrapper.d.ts.map +1 -1
  20. package/dist/components/layout/BwgPortal02.d.ts.map +1 -1
  21. package/dist/components/layout/custom/ConfigurableHeader.d.ts.map +1 -1
  22. package/dist/components/layout/default/HeaderContainer.d.ts +15 -0
  23. package/dist/components/layout/default/HeaderContainer.d.ts.map +1 -0
  24. package/dist/components/layout/default/index.d.ts +1 -0
  25. package/dist/components/layout/default/index.d.ts.map +1 -1
  26. package/dist/components/layout/extension/ContentWrapper.d.ts +17 -0
  27. package/dist/components/layout/extension/ContentWrapper.d.ts.map +1 -0
  28. package/dist/components/layout/extension/index.d.ts +1 -0
  29. package/dist/components/layout/extension/index.d.ts.map +1 -1
  30. package/dist/components/layout/index.cjs +1 -1
  31. package/dist/components/layout/index.js +15 -13
  32. package/dist/components/layout/types.d.ts +28 -2
  33. package/dist/components/layout/types.d.ts.map +1 -1
  34. package/dist/components/pages/rsrc/CMFileMstrM01.d.ts.map +1 -1
  35. package/dist/components/pages/rsrc/CMPrgrMstrM01.d.ts.map +1 -1
  36. package/dist/components/popup/index.cjs +1 -1
  37. package/dist/components/popup/index.js +1 -1
  38. package/dist/index.cjs +1 -1
  39. package/dist/index.js +41 -39
  40. package/dist/stores/index.cjs +1 -1
  41. package/dist/stores/index.js +1 -1
  42. package/dist/utils/apiUtils.d.ts +1 -1
  43. package/dist/utils/apiUtils.d.ts.map +1 -1
  44. package/dist/utils/index.cjs +1 -1
  45. package/dist/utils/index.d.ts +1 -1
  46. package/dist/utils/index.d.ts.map +1 -1
  47. package/dist/utils/index.js +321 -312
  48. package/package.json +1 -1
  49. package/dist/chunks/layout-components-B4ptqDmC.cjs +0 -35
@@ -0,0 +1,35 @@
1
+ "use strict";const e=require("react/jsx-runtime"),A=require("../provider/index.cjs"),R=require("react-router-dom"),Y=require("./common-components-D3-r7D-8.cjs"),i=require("antd"),l=require("react"),N=require("../stores/index.cjs"),L=require("@ant-design/icons"),F=require("../utils/index.cjs"),_=require("@dnd-kit/core"),ue=require("@dnd-kit/modifiers"),G=require("@dnd-kit/sortable");var U=typeof document<"u"?document.currentScript:null;function me(n){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const r in n)if(r!=="default"){const s=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:()=>n[r]})}}return t.default=n,Object.freeze(t)}const H=me(L),pe=l.lazy(()=>Promise.resolve().then(()=>require("./MenuReport-5e2dMr_C.cjs"))),he=l.lazy(()=>Promise.resolve().then(()=>require("./common-components-D3-r7D-8.cjs")).then(n=>n.SearchDepartmentP01$1)),ge=l.lazy(()=>Promise.resolve().then(()=>require("./common-components-D3-r7D-8.cjs")).then(n=>n.SearchDepartmentP02$1)),fe=l.lazy(()=>Promise.resolve().then(()=>require("./common-components-D3-r7D-8.cjs")).then(n=>n.SearchOrganizationP01$1)),xe=l.lazy(()=>Promise.resolve().then(()=>require("./common-components-D3-r7D-8.cjs")).then(n=>n.SearchOrganizationP02$1)),be=l.lazy(()=>Promise.resolve().then(()=>require("./common-components-D3-r7D-8.cjs")).then(n=>n.CMPrgrMstrP02$1)),ye=l.lazy(()=>Promise.resolve().then(()=>require("./CMSearchIntfGwP01-CMSQULsU.cjs"))),ee={CORE_REPORT:{component:pe,defaultConfig:{title:"게시판/문의",width:1200,height:800}},CORE_DEPARTMENT_01:{component:he,defaultConfig:{title:"부서 검색",width:620,height:700}},CORE_DEPARTMENT_02:{component:ge,defaultConfig:{title:"부서 검색",width:620,height:700}},CORE_ORGANIZATION_01:{component:fe,defaultConfig:{title:"조직 검색",width:620,height:700}},CORE_ORGANIZATION_02:{component:xe,defaultConfig:{title:"조직 검색",width:1e3,height:700}},CORE_PRGR_02:{component:be,defaultConfig:{title:"프로그램 검색",width:700,height:800}},CORE_GW_DRAFTS:{component:ye,defaultConfig:{title:"기안 목록",width:1e3,height:700}}},J="bwg-dot-line-wave-v4";function Ce(){if(typeof document>"u"||document.getElementById(J))return;const n=document.createElement("style");n.id=J,n.textContent=`
2
+ .bwg-dotline {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ gap: var(--bwg-gap, 12px);
6
+ height: calc(var(--bwg-size, 12px) + 2 * var(--bwg-amp, 12px));
7
+ line-height: 0;
8
+ }
9
+ .bwg-dotline .dot {
10
+ width: var(--bwg-size, 12px);
11
+ height: var(--bwg-size, 12px);
12
+ border-radius: 50%;
13
+ background: currentColor;
14
+ will-change: transform, opacity;
15
+ filter: drop-shadow(0 1px 2px rgba(0,0,0,.12));
16
+ animation: bwg-dotline-sine var(--bwg-speed, 780ms) linear infinite;
17
+ }
18
+
19
+ /* sin(θ) 근사: 0, 45, 90, 135, 180, 225, 270, 315, 360deg */
20
+ @keyframes bwg-dotline-sine {
21
+ 0% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
22
+ 12.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }
23
+ 25% { transform: translate3d(0, calc(-1 * var(--bwg-amp, 12px)), 0) scale(1.06); opacity: 1; }
24
+ 37.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }
25
+ 50% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
26
+ 62.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }
27
+ 75% { transform: translate3d(0, calc( 1 * var(--bwg-amp, 12px)), 0) scale(.96); opacity: .76; }
28
+ 87.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }
29
+ 100% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
30
+ }
31
+
32
+ @media (prefers-reduced-motion: reduce) {
33
+ .bwg-dotline .dot { animation: none; }
34
+ }
35
+ `,document.head.appendChild(n)}const ve=({colors:n=["#DAD3FF","#B3A6FF","#9380FF","#816BFA"],count:t,size:r=12,gap:s=10,amp:o=16,speedMs:c=900,direction:y="ltr",phase:d=.7})=>{l.useEffect(()=>{Ce()},[]);const m=t??n.length,u=Array.from({length:m}),p={"--bwg-size":`${r}px`,"--bwg-gap":`${s}px`,"--bwg-amp":`${o}px`,"--bwg-speed":`${c}ms`},C=c/m*d;return e.jsx("span",{className:"bwg-dotline",role:"img","aria-label":"loading",style:p,children:u.map((g,h)=>e.jsx("span",{className:"dot",style:{backgroundColor:n[h%n.length],animationDelay:y==="ltr"?`${h*C}ms`:`${(m-1-h)*C}ms`}},h))})},je=({spin:n=null,text:t="인증중...",dimStyle:r="dark"})=>{if(!(n??!0))return null;const c=r==="dark";return e.jsxs("div",{className:"loading-overlay",style:{position:"fixed",height:"100vh",left:0,right:0,top:0,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",gap:8,padding:"8px 12px",background:c?"rgba(0, 0, 0, 0.6)":"rgba(255, 255, 255, 0.85)",color:c?"#fff":"#333",backdropFilter:"blur(4px)",zIndex:1e4},"aria-live":"polite","aria-busy":"true",role:"status",children:[e.jsx(i.Spin,{indicator:e.jsx(ve,{colors:["#DAD3FF","#B3A6FF","#9380FF","#816BFA"],size:12,gap:10,amp:16,speedMs:900,phase:.75,direction:"ltr"})}),e.jsx("span",{className:"bwg-spin-txt",style:{marginTop:"15px"},children:t})]})},we=({routes:n,useCommonProvider:t=!0,useServiceProvider:r=!0})=>{let o=e.jsxs(R.Routes,{children:[e.jsx(R.Route,{path:"/",element:e.jsx(R.Navigate,{to:"/login"})}),e.jsx(R.Route,{path:"/login",element:n.login}),e.jsx(R.Route,{path:"/main/*",element:n.main})]});return r&&(o=e.jsx(A.ServiceCodeProvider,{children:o})),t&&(o=e.jsx(A.CommonCodeProvider,{children:o})),e.jsx(Y.GlobalConfigProvider,{children:o})},{Content:ke}=i.Layout,X=({config:n={},children:t})=>{const r={wrapper:{className:"content-wrapper",...n.wrapper},body:{className:"content-body",...n.body},...n};return e.jsx(ke,{className:r.wrapper.className,style:r.wrapper.style,children:e.jsx(Y.BwgConfigProvider,{children:e.jsx("div",{className:r.body.className,style:r.body.style,children:t})})})},Pe="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",Ie="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",Ne="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:Se}=i.Layout,$={light:{headerBg:"#ffffff",headerText:"#000000",sidebarBg:"#ffffff",sidebarText:"#000000",buttonPrimary:"#1890ff",buttonPrimaryHover:"#40a9ff",buttonPrimaryActive:"#096dd9",buttonDefault:"#ffffff",buttonDefaultHover:"#f5f5f5",buttonDefaultBorder:"#d9d9d9",buttonPermissionBorder:"#bdb1ff"},dark:{headerBg:"#4a4a4a",headerText:"#ffffff",sidebarBg:"#4a4a4a",sidebarText:"#ffffff",buttonPrimary:"#177ddc",buttonPrimaryHover:"#1890ff",buttonPrimaryActive:"#0958b5",buttonDefault:"#434343",buttonDefaultHover:"#303030",buttonDefaultBorder:"#434343",buttonPermissionBorder:"#bdb1ff"},blue:{headerBg:"#4a90e2",headerText:"#ffffff",sidebarBg:"#4a90e2",sidebarText:"#ffffff",buttonPrimary:"#1890ff",buttonPrimaryHover:"#40a9ff",buttonPrimaryActive:"#096dd9",buttonDefault:"#ffffff",buttonDefaultHover:"#f0f8ff",buttonDefaultBorder:"#4a90e2",buttonPermissionBorder:"#bdb1ff"},modern:{headerBg:"#f3f4ff",headerText:"#333333",sidebarBg:"#ffffff",sidebarText:"#555555",buttonPrimary:"#6449FC",buttonPrimaryHover:"#6449FC",buttonPrimaryActive:"#6449FC",buttonDefault:"#ffffff",buttonDefaultHover:"#f5f5f5",buttonDefaultBorder:"#dddddd",buttonPermissionBorder:"#bdb1ff"}},K={0:"작게",1:"보통",2:"크게"},Q=({config:n={},children:t})=>{const r={gap:14,minWidth:200,items:n.right?.items,alarm:{visible:!0,...n.right?.alarm||{}},theme:{visible:!0,...n.right?.theme||{}},logout:{visible:!0,...n.right?.logout||{}},avatar:{visible:!0,width:30,height:30,...n.right?.avatar||{}}},s={wrapper:{className:"header-wrapper",...n.wrapper},logo:{gap:10,...n.logo},right:r},o=R.useNavigate(),[c,y]=l.useState("modern"),d=l.useRef(null),m=N.useLogout(),{componentSize:u,setComponentSize:p,gridSize:C,setGridSize:g,spacingSize:h,setSpacingSize:P}=N.useUserStore(),v=(x,a)=>{try{if(!/^[a-zA-Z0-9-]+$/.test(x)||!/^[#a-zA-Z0-9()\s,.-]+$/.test(a))return;document.documentElement.style.setProperty(x,a)}catch(T){console.error("CSS variable setting failed:",T)}},f=x=>{if(!$[x])return;y(x);const a={...$[x]};v("--header-bg",a.headerBg),v("--header-text",a.headerText),v("--sidebar-bg",a.sidebarBg),v("--sidebar-text",a.sidebarText),v("--button-primary",a.buttonPrimary),v("--button-primary-hover",a.buttonPrimaryHover),v("--button-primary-active",a.buttonPrimaryActive),v("--button-default",a.buttonDefault),v("--button-default-hover",a.buttonDefaultHover),v("--button-default-border",a.buttonDefaultBorder),v("--button-permission-border",a.buttonPermissionBorder),d.current&&d.current.setAttribute("data-theme",x),document.documentElement.setAttribute("data-theme",x),F.setCookie(F.THEME_COOKIE_NAME,x,30)};l.useEffect(()=>{const x=F.getCookie(F.THEME_COOKIE_NAME);x&&$[x]?f(x):f("modern")},[]);const j=()=>({...$[c]}).headerBg,I=()=>{m(),o("/login")};F.getTodateString?F.getTodateString("HH:mm:ss"):new Date().toLocaleTimeString("ko-KR");const z=e.jsxs("div",{style:{padding:"8px 0"},children:[e.jsxs("div",{style:{marginBottom:"12px"},children:[e.jsx(i.ColorPicker,{value:j(),disabled:!0,size:"small"}),e.jsx("span",{style:{marginLeft:"8px",fontSize:"12px"},children:"현재 테마 색상"})]}),e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:[e.jsx(i.Button,{type:c==="modern"?"primary":"default",size:"small",onClick:()=>f("modern"),style:{textAlign:"left",backgroundColor:c==="modern"?$.modern.headerBg:void 0,color:c==="modern"?$.modern.headerText:void 0},children:"모던"},"modern"),Object.entries($).filter(([x])=>x!=="modern").map(([x,a])=>e.jsx(i.Button,{type:c===x?"primary":"default",size:"small",onClick:()=>f(x),style:{textAlign:"left",backgroundColor:c===x?a.headerBg:void 0,color:c===x?a.headerText:void 0},children:x},x))]}),e.jsx(i.Divider,{}),e.jsxs("div",{style:{marginTop:"8px"},children:[e.jsx("div",{style:{marginBottom:"8px",fontSize:"12px"},children:"컴포넌트 크기"}),e.jsx(i.Slider,{marks:K,value:u,min:0,max:2,step:1,onChange:x=>p(x)}),e.jsx("div",{style:{marginTop:"16px",marginBottom:"8px",fontSize:"12px"},children:"그리드 크기"}),e.jsx(i.Slider,{marks:K,value:C,min:0,max:2,step:1,onChange:x=>g(x)}),e.jsx("div",{style:{marginTop:"16px",marginBottom:"8px",fontSize:"12px"},children:"여백 조정"}),e.jsx(i.Slider,{marks:K,value:h,min:0,max:2,step:1,onChange:x=>P(x)})]})]});return e.jsxs(Se,{className:s.wrapper.className,style:{...s.wrapper.style},children:[s.logo&&e.jsx("div",{className:"header-left",children:e.jsx("div",{className:"logo-container",style:{gap:s.logo?.gap},children:s.logo?.items})}),t&&e.jsx("div",{className:"header-center",style:{flex:1,display:"flex",justifyContent:"center",alignItems:"center"},children:t}),e.jsxs("div",{className:"header-right",style:{gap:s.right?.gap,minWidth:s.right?.minWidth},children:[s.right?.items?.map((x,a)=>e.jsx("div",{children:x},a)),s.right?.alarm?.visible&&e.jsx(i.Button,{type:"text",icon:e.jsx("img",{src:Pe,alt:"알림"}),className:"alarm-btn",onClick:s.right?.alarm?.onClick}),s.right?.theme?.visible&&e.jsx(i.Popover,{content:z,title:"테마 설정",trigger:"click",placement:"bottomRight",onOpenChange:x=>s.right?.theme?.onOpenChange?.(x),children:e.jsx(i.Button,{type:"text",icon:e.jsx("img",{src:Ne,alt:"개인설정"}),className:"theme-btn",onClick:s.right?.theme?.onClick})}),s.right?.logout?.visible&&e.jsx(i.Button,{type:"text",icon:e.jsx("img",{src:Ie,alt:"로그아웃"}),onClick:s.right?.logout?.onClick||I,className:"logout-btn"}),s.right?.avatar?.visible&&e.jsx(i.Avatar,{icon:e.jsx(L.UserOutlined,{}),className:"avatar",style:{width:s.right?.avatar?.width,height:s.right?.avatar?.height},onClick:s.right?.avatar?.onClick})]})]})},Z=Object.freeze({Translate:{toString(n){if(!n)return;const{x:t,y:r}=n;return"translate3d("+(t?Math.round(t):0)+"px, "+(r?Math.round(r):0)+"px, 0)"}},Scale:{toString(n){if(!n)return;const{scaleX:t,scaleY:r}=n;return"scaleX("+t+") scaleY("+r+")"}},Transform:{toString(n){if(n)return[Z.Translate.toString(n),Z.Scale.toString(n)].join(" ")}},Transition:{toString(n){let{property:t,duration:r,easing:s}=n;return t+" "+r+"ms "+s}}}),Me=l.memo(({className:n,...t})=>{const r=l.useRef(null),{attributes:s,listeners:o,transform:c,transition:y,isDragging:d,setNodeRef:m}=G.useSortable({id:t["data-node-key"]}),[u,p]=l.useState();l.useEffect(()=>{const g=r.current;if(g)if(d){const h=Math.round(g.getBoundingClientRect().width);p(h)}else p(void 0)},[d]);const C={...t.style,transform:c?Z.Transform.toString(c):void 0,transition:y??"transform 0.16s ease",cursor:"grab",userSelect:"none",willChange:"transform",width:u??void 0,minWidth:u??void 0,maxWidth:u??void 0,flex:u!==void 0?"0 0 auto":void 0};return l.cloneElement(t.children,{ref:g=>{r.current!==g&&(r.current=g),m(g)},style:C,...s,...o})}),Le=l.memo(function({config:t,isFirst:r,isLast:s,canCloseAll:o,onFirst:c,onPrev:y,onNext:d,onLast:m,onCloseAll:u}){return e.jsxs("div",{className:t.wrapper?.className,style:t.wrapper?.style,children:[e.jsx(i.Tooltip,{title:"첫 번째 탭",className:t.tooltip?.className,style:t.tooltip?.style,children:e.jsx(i.Button,{className:t.buttons?.className,style:t.buttons?.style,size:"small",icon:e.jsx(L.StepBackwardOutlined,{}),onClick:c,disabled:r})}),e.jsx(i.Tooltip,{title:"이전 탭",className:t.tooltip?.className,style:t.tooltip?.style,children:e.jsx(i.Button,{className:t.buttons?.className,style:t.buttons?.style,size:"small",icon:e.jsx(L.LeftOutlined,{}),onClick:y,disabled:r})}),e.jsx(i.Tooltip,{title:"다음 탭",className:t.tooltip?.className,style:t.tooltip?.style,children:e.jsx(i.Button,{className:t.buttons?.className,style:t.buttons?.style,size:"small",icon:e.jsx(L.RightOutlined,{}),onClick:d,disabled:s})}),e.jsx(i.Tooltip,{title:"마지막 탭",className:t.tooltip?.className,style:t.tooltip?.style,children:e.jsx(i.Button,{className:t.buttons?.className,style:t.buttons?.style,size:"small",icon:e.jsx(L.StepForwardOutlined,{}),onClick:m,disabled:s})}),e.jsx(i.Tooltip,{title:"모든 탭 닫기",className:t.tooltip?.className,style:t.tooltip?.style,children:e.jsx(i.Button,{className:t.buttons?.className,style:t.buttons?.style,size:"small",icon:e.jsx(L.CloseOutlined,{}),onClick:u,disabled:!o})})]})}),te=({config:n={}})=>{const t={wrapper:{className:"menu-tab-wrapper",...n?.wrapper},tabs:{className:"menu-tabs",...n?.tabs},nav:{wrapper:{className:"menu-nav-wrapper",...n?.nav?.wrapper},buttons:{className:"menu-nav-buttons",...n?.nav?.buttons},tooltip:{className:"menu-nav-tooltip",...n?.nav?.tooltip},...n?.nav},...n},r=N.useMenuViewStore(a=>a.tabs),s=N.useMenuViewStore(a=>a.activeMenuId),o=N.useMenuViewStore(a=>a.focusTab),c=N.useMenuViewStore(a=>a.closeTab),y=N.useMenuViewStore(a=>a.reorderTabs),d=_.useSensors(_.useSensor(_.PointerSensor,{activationConstraint:{distance:6}})),m=a=>{o(a)},u=(a,T)=>{T==="remove"&&typeof a=="string"&&c(a)},p=()=>{r.length>0&&o(r[0].key)},C=()=>{if(!s||r.length<=1)return;const a=r.findIndex(T=>T.key===s);a>0&&o(r[a-1].key)},g=()=>{if(!s||r.length<=1)return;const a=r.findIndex(T=>T.key===s);a<r.length-1&&o(r[a+1].key)},h=()=>{r.length>0&&o(r[r.length-1].key)},P=()=>{r.forEach(a=>{c(a.key)})},v=s?r.findIndex(a=>a.key===s):-1,f=v===0,j=v===r.length-1,I=l.useMemo(()=>r.map(a=>({key:a.key,label:a.label,closable:!0,children:null})),[r]),z=l.useCallback(({active:a,over:T})=>{if(!T||a.id===T.id)return;const B=r.findIndex(D=>D.key===a.id),W=r.findIndex(D=>D.key===T.id);if(B<0||W<0||B===W)return;const q=r.map(D=>D.key),V=G.arrayMove(q,B,W);y?.(V)},[r,y]),x=l.useCallback((a,T)=>e.jsx(_.DndContext,{sensors:d,onDragEnd:z,collisionDetection:_.closestCenter,modifiers:[ue.restrictToHorizontalAxis],children:e.jsx(G.SortableContext,{items:r.map(B=>B.key),strategy:G.horizontalListSortingStrategy,children:e.jsx(T,{...a,children:B=>l.createElement(Me,{...B.props,key:B.key},B)})})}),[d,z,r]);return e.jsx("div",{className:t.wrapper.className,style:{...t.wrapper.style,display:r.length===0?"none":"block"},children:e.jsx(i.Tabs,{type:"editable-card",activeKey:s||void 0,onChange:m,onEdit:u,className:t.tabs.className,style:t.tabs.style,hideAdd:!0,items:I,tabBarExtraContent:e.jsx(Le,{config:t?.nav,isFirst:!!f,isLast:!!j,canCloseAll:r.length>0,onFirst:p,onPrev:C,onNext:g,onLast:h,onCloseAll:P}),renderTabBar:x})})},{Sider:Te}=i.Layout,ne=({config:n={}})=>{const t={collapsed:!1,width:230,menuGubunCode:{mainMenu:"MAIN",subMenu:"SUB",program:"PRGM",...n?.menuGubunCode},className:{wrapper:"side-wrapper",search:"sider-search-ipt",segmented:{wrapper:"sider-segmented",item:"sider-segment-item",...n?.className?.segmented},sider:{content:"sider-content",loading:"sider-loading",loadingText:"sider-loading-text",error:"sider-error",errorIcon:"sider-error-icon",errorText:"sider-error-text",menu:"sider-menu",menuContainer:"sider-menu-container",...n?.className?.sider},...n?.className},style:{search:{placeholder:"메뉴명, 메뉴번호 검색...",height:30,...n?.style?.search},...n?.style},...n},[r,s]=l.useState(""),[o,c]=l.useState("category"),[y,d]=l.useState([]),{activeMenuId:m,sidebarCollapsed:u,openTabFromMenu:p,toggleSidebar:C}=N.useMenuViewStore(),{menuList:g,isLoading:h,error:P,findMenuById:v,flatMenuList:f}=N.useMenuModelStore(),{nodes:j,treeNodes:I,loadFavoritesIfNeeded:z}=N.useFavoriteStore(),x=l.useMemo(()=>{const k=[],w=(b,S=0)=>{if(b.menuGbCd===t.menuGubunCode.program&&b.scrnPath){const M=" ".repeat(S),O=b.menuNo||"";k.push({value:b.menuId,label:e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[e.jsxs("span",{children:[M,b.menuNm]}),e.jsx("span",{style:{fontSize:"11px",color:"#999",backgroundColor:"#f0f0f0",padding:"2px 6px",borderRadius:"3px",marginLeft:"8px"},children:O})]}),menuItem:b})}b.children&&b.children.length>0&&b.children.forEach(M=>w(M,S+1))};return g.forEach(b=>w(b)),k},[g]),a=l.useMemo(()=>r.trim()?x.filter(k=>{const w=k.menuItem.menuNm.toLowerCase(),b=String(k.menuItem.menuNo||"미지정").toLowerCase(),S=r.toLowerCase();return w.includes(S)||b.includes(S)}):[],[x,r]),T=k=>{if(!k||typeof k!="string"){console.warn("Invalid menu selection value:",k);return}if(!/^[a-zA-Z0-9_-]+$/.test(k)){console.warn("Invalid menu ID format:",k);return}const w=x.find(b=>b.value===k);if(w){const{menuItem:b}=w;if(!b||!b.menuId||!b.menuNm){console.warn("Invalid menu item:",b);return}b.menuGbCd===t.menuGubunCode.program&&b.scrnPath?(console.log("✅ 검색으로 프로그램 메뉴 선택 - 탭 추가 및 setCurrentProgram 호출"),console.log("메뉴명:",b.menuNm,"경로:",b.scrnPath,"scrnId:",b.scrnId),p(b)):(b.menuGbCd===t.menuGubunCode.mainMenu||b.menuGbCd===t.menuGubunCode.subMenu)&&(console.log("❌ 검색으로 메인/서브 메뉴 선택 - 이벤트 무시"),console.log("메뉴명:",b.menuNm,"menuGbCd:",b.menuGbCd)),s("")}},B=l.useCallback(k=>{const w=v(k);w?.menuGbCd===t.menuGubunCode.program&&(console.log("메뉴명:",w.menuNm,"경로:",w.scrnPath,"scrnId:",w.scrnId),p(w))},[v,p]),W=l.useCallback(k=>k.map(w=>({key:w.menuId,label:e.jsx("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:e.jsx("span",{children:w.menuNm})}),icon:q(w.iconCd,w.menuGbCd),children:w.children&&w.children.length>0?W(w.children):void 0})),[]),q=(k,w)=>{if(k){const b=H[k];if(b)return e.jsx(b,{})}if(w)switch(w){case t.menuGubunCode.mainMenu:return e.jsx(H.HomeOutlined,{});case t.menuGubunCode.subMenu:return null;case t.menuGubunCode.program:return null;default:return null}return null},V=l.useCallback(k=>{if(g.length===0)return[];const w=S=>{if(S)return typeof S=="string"?j[S]:S},b=S=>{if(S.type==="M"){const M=S,O=v(M.menuId)||void 0,E=!!O,de=E?`${O?.menuNm??M.menuNm??M.menuId}`:`${M.menuNm??M.menuId} (삭제됨)`;return{key:M.menuId,label:de,icon:E?void 0:e.jsx(L.WarningOutlined,{style:{color:"#faad14"}})}}else{const M=S,O=(M.children??[]).map(w).filter(Boolean).map(b);return{key:M.bkmkId,label:M.bkmkNm??M.bkmkId,icon:M.prntBkmkId==="-"?e.jsx(L.StarOutlined,{}):e.jsx(L.FolderOpenOutlined,{}),children:O}}};return k.map(b)},[v,j,g]),D=l.useMemo(()=>V(I),[V,I,j]);return l.useEffect(()=>{F.getUserId()&&z(F.getUserId())},[z]),l.useEffect(()=>{o==="category"&&s("")},[o]),l.useEffect(()=>{if(!m||o!=="category")return;const w=(b=>{const S=[],M=new Map(f.map(E=>[E.menuId,E]));let O=b;for(;O;){const E=M.get(O);if(!E)break;if(E.menuPrntId&&E.menuPrntId!=="-"&&E.menuPrntId!=="")S.push(E.menuPrntId),O=E.menuPrntId;else break}return S})(m);w.length>0&&d(b=>{const S=new Set([...b,...w]);return Array.from(S)})},[m,o,f]),e.jsxs(Te,{className:t.className.wrapper,collapsed:t.collapsed||u,trigger:null,width:t.width||230,children:[e.jsx("div",{style:{position:"absolute",top:"9px",right:"-25px",zIndex:"1000",width:"25px",height:"41px",backgroundColor:"#ffffff",border:"1px solid #dddddd",borderRadius:"0 10px 10px 0",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",boxShadow:"2px 2px 2px rgba(0, 0, 0, 0.05)",transition:"all 0.3s ease"},children:e.jsx(i.Button,{type:"text",icon:t.collapsed||u?e.jsx(L.MenuUnfoldOutlined,{}):e.jsx(L.MenuFoldOutlined,{}),style:{fontSize:"12px",color:"#787878",padding:0,width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center",borderRadius:"0 10px 10px 0"},onClick:C})}),!(t.collapsed||u)&&e.jsx("div",{style:{padding:10},children:e.jsx(i.AutoComplete,{value:r,options:a,onSelect:T,onSearch:s,style:{width:"100%"},allowClear:!0,children:e.jsx(i.Input,{className:t.className.search,placeholder:t.style.search.placeholder,prefix:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",children:e.jsx("path",{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",stroke:"#5F5F5F",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),size:"middle",style:{height:t.style.search.height||30}})})}),!(t.collapsed||u)&&e.jsx("div",{style:{width:"100%",padding:"0px 10px",marginBottom:"10px"},children:e.jsx(i.Segmented,{className:t.className.segmented.wrapper,options:[{label:e.jsxs(e.Fragment,{children:[e.jsx("span",{className:t.className.segmented.item,style:{display:"flex",alignItems:"center"},children:e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:[e.jsx("path",{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",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("path",{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",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),e.jsx("path",{d:"M4.71631 1.45996H10.783",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]})}),"카테고리"]}),value:"category"},{label:e.jsxs(e.Fragment,{children:[e.jsx("span",{className:t.className.segmented.item,style:{display:"flex",alignItems:"center"},children:e.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:e.jsx("path",{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",stroke:"currentColor",strokeWidth:"1.5",strokeMiterlimit:"4"})})}),"즐겨찾기"]}),value:"favorite"}],value:o,onChange:k=>{c(k)},style:{width:"100%"},block:!0})}),e.jsxs("div",{className:t.className.sider.content,children:[h&&e.jsxs("div",{className:t.className.sider.loading,style:{padding:10,margin:"0 auto",textAlign:"center",color:"var(--text-primary)"},children:[e.jsx(i.ConfigProvider,{theme:{components:{Spin:{colorPrimary:"var(--primary-color)"}}},children:e.jsx(i.Spin,{size:"default"})}),e.jsx("div",{className:t.className.sider.loadingText,style:{marginTop:10},children:"메뉴 로딩 중..."})]}),P&&e.jsxs("div",{className:t.className.sider.error,children:[e.jsx(L.ExclamationCircleOutlined,{className:t.className.sider.errorIcon}),e.jsx("div",{className:t.className.sider.errorText,children:"메뉴 로드 실패"})]}),!h&&!P&&o==="category"&&g.length===0&&e.jsx("div",{style:{padding:"16px",textAlign:"center",color:"#666",fontSize:"12px"},children:"메뉴가 없습니다"}),!h&&!P&&o==="favorite"&&D.length===0&&e.jsx("div",{style:{padding:"16px",textAlign:"center",color:"#666",fontSize:"12px"},children:"즐겨찾기된 메뉴가 없습니다"}),!h&&!P&&o==="category"&&g.length>0&&e.jsx("div",{className:t.className.sider.menuContainer,children:e.jsx(i.Menu,{theme:"light",mode:"inline",items:W(g),className:t.className.sider.menu,selectedKeys:[m||""],openKeys:y,onOpenChange:d,onClick:k=>B(k.key)})}),!h&&!P&&o==="favorite"&&D.length>0&&e.jsx("div",{className:t.className.sider.menuContainer,children:e.jsx(i.Menu,{theme:"light",mode:"inline",items:D,className:t.className.sider.menu,selectedKeys:[m||""],onClick:k=>B(k.key)})})]})]})};class Be extends l.Component{constructor(t){super(t),this.resetError=()=>{this.setState({hasError:!1,error:void 0,errorInfo:void 0})},this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,r){console.error("ErrorBound caught an error:",t,r),this.setState({error:t,errorInfo:r})}render(){return this.state.hasError?this.props.fallback?this.props.fallback:e.jsxs("div",{style:{padding:"40px 20px",textAlign:"center",backgroundColor:"#fafafa",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center"},children:[e.jsx(i.Result,{status:"error",title:"컴포넌트 로딩 중 오류가 발생했습니다",subTitle:this.state.error?`오류 내용: ${this.state.error.message}`:"알 수 없는 오류가 발생했습니다",extra:[e.jsx(i.Button,{type:"primary",icon:e.jsx(L.ReloadOutlined,{}),onClick:this.resetError,style:{marginRight:8},children:"다시 시도"},"retry")]}),this.state.error&&e.jsxs("details",{style:{marginTop:"20px",textAlign:"left",maxWidth:"600px",backgroundColor:"#fff",padding:"16px",borderRadius:"6px",border:"1px solid #d9d9d9"},children:[e.jsx("summary",{style:{cursor:"pointer",fontWeight:"bold"},children:"오류 상세 정보"}),e.jsx("pre",{style:{marginTop:"8px",fontSize:"12px",color:"#666",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:this.state.error.stack})]})]}):this.props.children}}const Ee=({isActive:n,instance:t,params:r})=>{const{activeMenuId:s,closeTab:o}=N.useMenuViewStore(),c=()=>{s&&o(s)};return t?e.jsx("div",{style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",visibility:n?"visible":"hidden",opacity:n?1:0,transition:"opacity 0.2s ease-in-out",pointerEvents:n?"auto":"none"},children:e.jsx(Be,{children:e.jsx(l.Suspense,{fallback:null,children:t&&l.createElement(t,{params:r})})})}):e.jsx("div",{style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",display:"flex",justifyContent:"center",alignItems:"center",visibility:n?"visible":"hidden",opacity:n?1:0,transition:"opacity 0.2s ease-in-out",pointerEvents:n?"auto":"none"},children:e.jsx("div",{style:{width:500,maxWidth:"90%",background:"#fff",borderRadius:16,boxShadow:"0 8px 30px rgba(0,0,0,0.05)",padding:24},children:e.jsx(i.Result,{icon:e.jsx(L.ExclamationCircleTwoTone,{twoToneColor:"#69b1ff"}),status:"warning",title:"등록된 메뉴 정보가 없거나 유효한 메뉴가 아닙니다.",subTitle:e.jsx(i.Typography.Text,{type:"secondary",children:"자세한 내용은 관리자에게 문의바랍니다."}),extra:e.jsx(i.Space,{children:e.jsx(i.Button,{icon:e.jsx(L.CloseOutlined,{}),onClick:c,children:"탭 닫기"})})})})})},re=l.memo(Ee),se=({menuGubunCode:n={mainMenu:"MAIN",subMenu:"SUB",program:"PRGM"},mode:t="horizontal",style:r,routeMap:s})=>{const{menuList:o,findMenuById:c,flatMenuList:y}=N.useMenuModelStore(),{activeMenuId:d}=N.useMenuViewStore(),m=R.useNavigate(),[u,p]=l.useState([]),C=l.useCallback((v,f)=>{if(v){const j=H[v];if(j)return e.jsx(j,{})}if(f)switch(f){case n.mainMenu:return e.jsx(H.HomeOutlined,{});default:return null}return null},[n]),g=l.useCallback(v=>v.map(f=>{const j=f.children&&f.children.length===1&&f.children[0].menuGbCd===n.program;return{key:f.menuId,label:f.menuNm,icon:C(f.iconCd,f.menuGbCd),children:f.children&&f.children.length>0&&!j?g(f.children):void 0}}),[C,n]),h=l.useMemo(()=>g(o),[o,g]),P=l.useCallback(v=>{const f=c(v.key);if(f){if(f.children&&f.children.length===1&&f.children[0].menuGbCd===n.program){const j=f.children[0];let I=s?.[j.menuId]||j.scrnPath||"/";I==="/"?I="/main":I.startsWith("/main")||(I=I.startsWith("/")?`/main${I}`:`/main/${I}`),m(I);return}if(f.menuGbCd===n.program&&f.scrnPath){let j=s?.[f.menuId]||f.scrnPath||"/";j==="/"?j="/main":j.startsWith("/main")||(j=j.startsWith("/")?`/main${j}`:`/main/${j}`),m(j);return}}},[c,n,m,s]);return l.useEffect(()=>{if(!d||t!=="vertical")return;const f=(j=>{const I=[],z=new Map(y.map(a=>[a.menuId,a]));let x=j;for(;x;){const a=z.get(x);if(!a)break;if(a.menuPrntId&&a.menuPrntId!=="-"&&a.menuPrntId!=="")I.push(a.menuPrntId),x=a.menuPrntId;else break}return I})(d);f.length>0&&p(j=>{const I=new Set([...j,...f]);return Array.from(I)})},[d,t,y]),e.jsx(i.Menu,{mode:t,theme:"light",items:h,selectedKeys:[d||""],openKeys:t==="vertical"?u:void 0,onOpenChange:t==="vertical"?p:void 0,onClick:P,style:r})},oe=()=>e.jsxs(e.Fragment,{children:[e.jsx("link",{rel:"preload",as:"image",href:"/src/styles/assets/images/backgrounds/LandingContainer_bg.png"}),e.jsx("div",{className:"LandingContainer-wrap",children:e.jsx("div",{className:"inner",children:e.jsx("div",{className:"content"})})})]}),Re=(n,t)=>{console.log("createPopupViewLoader 호출 - popupUrl:",n);const s=(o=>{if(o.startsWith("/src/pages/views/popup/")){const d=o+".tsx";return console.log(`팝업 URL 변환: ${o} -> ${d}`),d}const y=`/src/pages/views/popup/${o.startsWith("/")?o.substring(1):o}.tsx`;return console.log(`팝업 URL 변환: ${o} -> ${y}`),y})(n);return!s||!t?.glob||!t.glob[s]?(console.warn(`팝업 뷰를 찾을 수 없습니다: ${n} (${s})`),console.warn("사용 가능한 팝업 뷰들:",Object.keys(t?.glob||{})),null):t.glob[s]},Oe=({popup:n,modules:t})=>{const[r,s]=l.useState(null),[o,c]=l.useState(!1),[y,d]=l.useState(null),m=()=>{console.log("PopupArea - handleClose:",n.popupId),N.usePopupStore.getState().closePopup(n.popupId)};return l.useEffect(()=>{(async()=>{console.log("팝업 뷰 로드 시작:",n.popupUrl),c(!0),d(null);try{const p=Re(n.popupUrl,t);if(!p){const h=`팝업 뷰를 찾을 수 없습니다: ${n.popupUrl}`;console.error(h),d(h),c(!1);return}console.log("팝업 뷰 모듈 로드 중...");const C=await p();console.log("팝업 뷰 모듈 로드 완료:",C);const g=C.default;if(console.log("팝업 뷰 컴포넌트:",g),!g)throw new Error("팝업 뷰 컴포넌트를 찾을 수 없습니다");s(()=>g),console.log("팝업 뷰 설정 완료")}catch(p){console.error("팝업 뷰 로드 실패:",p),d(p instanceof Error?p.message:"팝업 뷰 로드 실패")}finally{c(!1)}})()},[n.popupUrl]),o?e.jsxs("div",{className:"popup-loading",children:[e.jsx(i.Spin,{size:"large"}),e.jsx("p",{children:"팝업을 로드하는 중..."})]}):y?e.jsxs("div",{className:"popup-error",children:[e.jsx(i.Empty,{description:y,image:i.Empty.PRESENTED_IMAGE_SIMPLE}),e.jsx(i.Button,{icon:e.jsx(L.ReloadOutlined,{}),onClick:()=>window.location.reload(),children:"다시 시도"})]}):r?e.jsx(l.Suspense,{fallback:e.jsxs("div",{className:"popup-loading",children:[e.jsx(i.Spin,{size:"large"}),e.jsx("p",{children:"컴포넌트를 로드하는 중..."})]}),children:e.jsx(r,{popup:{...n,close:m},onClose:m})}):e.jsx("div",{className:"popup-empty",children:e.jsx(i.Empty,{description:"팝업 내용을 불러올 수 없습니다."})})},ae=({modules:n})=>{const{popups:t}=N.usePopupStore();return t.length===0?null:e.jsx(e.Fragment,{children:t.map(r=>{if(r.isLocal||r.popupCode.startsWith("CORE_"))return null;const s=r.config||{},o=s.width||r.width||800,c=s.height||r.height||600,y=s.title||r.popupTitle,d=r.buttonList?.map((m,u)=>({key:m.btnId||`btn_${u}`,text:m.btnNm,type:m.btnId==="CLOSE"?"default":"primary",disabled:m.enblYn!=="Y",danger:!1}))||[];return console.log("팝업 렌더링:",{popupId:r.popupId,popupCode:r.popupCode,title:y,width:o,height:c,buttons:d}),e.jsx(A.SearchBoxProvider,{children:e.jsx("div",{children:e.jsx(Oe,{popup:r,modules:n})},r.popupId)},`sbp-${r.popupId}`)})})},ie=()=>{const{popups:n,closePopup:t}=N.usePopupStore();return e.jsx(e.Fragment,{children:n.map(r=>{if(!(r.isLocal||r.popupCode.startsWith("CORE_")))return null;const s=ee[r.popupCode];if(!s)return null;const o=s.component;return e.jsx(A.SearchBoxProvider,{children:e.jsx(l.Suspense,{fallback:null,children:e.jsx(o,{popup:r,onClose:()=>t(r.popupId)})},r.popupId)},`sbp-${r.popupId}`)})})},ze=n=>({position:"absolute",inset:0,visibility:n?"visible":"hidden",opacity:n?1:0,transition:"opacity 0.2s ease-in-out",pointerEvents:n?"auto":"none"}),De=({once:n=!0})=>{const{lock:t}=A.useLock(),r=l.useRef(!1);return l.useEffect(()=>{n&&r.current||(r.current=!0,t())},[n,t]),null},le=({isActive:n,flagged:t,tabKey:r,onUnlock:s,children:o})=>{const c=l.useRef(null),[y,d]=l.useState(!1),m=l.useCallback(p=>{c.current=p,d(!!p)},[]),u=ze(n);return e.jsx("div",{ref:m,style:u,children:y?e.jsxs(A.ScreenProtectProvider,{idleMs:Number.POSITIVE_INFINITY,persistLocked:!1,overlayScope:"scoped",overlayPosition:"absolute",eventTarget:c.current,overlayId:`tab-overlay-${r}`,onUnlock:async()=>(s(),!0),children:[n&&t?e.jsx(De,{once:!0}):null,o]}):o})},Fe=({config:n={},modules:t={view:{path:"/src/pages/views/content"},popup:{path:"/src/pages/views/popups"}}})=>{const r=l.useRef(new Map),{tabs:s,tabParams:o,activeMenuId:c,tabProtectFlag:y,clearProtectFlagForKey:d}=N.useMenuViewStore(),m=l.useCallback(u=>{const p=r.current.get(u.key);if(p)return p;const C=u.gubun==="M"?`${t.view.path}${u.menuItem?.scrnPath}.tsx`:`${t.view.path}${u.componentItem?.scrnPath}.tsx`;let g=t.view?.glob?.[C];if(!g&&typeof{url:typeof document>"u"?require("url").pathToFileURL(__filename).href:U&&U.tagName.toUpperCase()==="SCRIPT"&&U.src||new URL("chunks/layout-components-pfHVy2at.cjs",document.baseURI).href}<"u",g){const h=l.lazy(g);return r.current.set(u.key,h),h}return null},[t.view?.glob]);return e.jsxs(i.Layout,{className:"main-layout",children:[e.jsx(Q,{config:n?.header}),e.jsxs(i.Layout,{children:[e.jsx(ne,{config:n?.sidebar}),e.jsxs("div",{className:"content-container",children:[e.jsx(te,{config:n?.menuTab}),e.jsxs(X,{config:n?.content,children:[e.jsx("div",{className:"view-container",children:e.jsxs("div",{style:{position:"relative",width:"100%",height:"100%"},children:[s.map(u=>{const p=m(u),C=c===u.key,g=!!y?.[u.key],h=o[u.key]||{};return e.jsx(A.SearchBoxProvider,{children:e.jsx(le,{isActive:C,flagged:g,tabKey:u.key,onUnlock:()=>d(u.key),children:e.jsx(re,{isActive:C,instance:p||void 0,params:h},u.key)},u.key)},`sbp-${u.key}`)}),(!c||s.length===0)&&e.jsx(oe,{})]})}),e.jsx(ie,{}),e.jsx(ae,{modules:t?.popup})]})]})]}),(n?.quickService?.visible??!0)&&e.jsx(Y.QuickServiceToggle,{})]})},ce=({children:n,menuGubunCode:t={mainMenu:"CMPRGRM",subMenu:"CMPRGRS",program:"CMPRGRP"},routeMap:r,routes:s})=>{const o=R.useLocation(),c=R.useNavigate(),{flatMenuList:y,findMenuById:d}=N.useMenuModelStore(),m=l.useMemo(()=>{const p=o.pathname,C=p.replace(/^\/main/,"")||"/";if(r){const g=Object.keys(r).find(P=>r[P]===p);if(g)return d(g);const h=Object.keys(r).find(P=>(r[P].replace(/^\/main/,"")||"/")===C);if(h)return d(h)}return y.find(g=>g.menuGbCd===t.program&&g.scrnPath&&(g.scrnPath===C||g.scrnPath===p||p.endsWith(g.scrnPath)||C===g.scrnPath))},[o.pathname,y,t.program,r,d]),u=l.useMemo(()=>{if(!m)return[];const p=[],C=h=>{if(!h||!h.menuPrntId||h.menuPrntId==="-")return[];const P=d(h.menuPrntId);return P?[...C(P),P]:[]};return C(m).forEach(h=>{if(h.menuGbCd===t.mainMenu||h.menuGbCd===t.subMenu){let P;if(r&&h.menuId&&(P=r[h.menuId]),!P&&s&&h.scrnPath){const v=h.scrnPath.startsWith("/")?h.scrnPath:`/${h.scrnPath}`,f=Object.keys(s).find(j=>j===v||j===`/main${v}`);f&&(P=f.startsWith("/main")?f:`/main${f.startsWith("/")?f:`/${f}`}`)}p.push({title:h.menuNm,onClick:P?()=>c(P):void 0})}}),p.push({title:m.menuNm}),p},[m,t,c,d]);return e.jsxs("div",{style:{height:"100%",padding:"15px 20px"},children:[e.jsx(i.Breadcrumb,{separator:">",items:u,style:{marginBottom:"16px"}}),e.jsx("div",{children:n})]})},$e=({config:n={}})=>{const t=n?.header?.menu,r=t?.visible!==!1,s=t?.routes,o=l.useMemo(()=>{if(!s)return;const c={},{flatMenuList:y}=N.useMenuModelStore.getState();return y.forEach(d=>{if(d.menuGbCd===t?.menuGubunCode?.program&&d.scrnPath){const m=d.scrnPath.startsWith("/")?d.scrnPath:`/${d.scrnPath}`,u=Object.keys(s).find(p=>{const C=p==="/"?"/":p.startsWith("/")?p:`/${p}`;return C===m||C===`/main${m}`||m===C.replace(/^\/main/,"")});if(u){const p=u==="/"?"/main":u.startsWith("/main")?u:`/main${u.startsWith("/")?u:`/${u}`}`;c[d.menuId]=p}}}),c},[s,t?.menuGubunCode?.program]);return e.jsxs(i.Layout,{className:"main-layout",children:[e.jsx(Q,{config:n?.header,children:r&&e.jsx(se,{menuGubunCode:t?.menuGubunCode,mode:t?.style?.mode||"horizontal",routeMap:o,style:{border:"none",backgroundColor:"transparent",minWidth:0,flex:1,...t?.style}})}),e.jsx("div",{className:"content-container",children:e.jsxs(X,{config:n?.content,children:[e.jsx("div",{className:"view-container",children:e.jsx("div",{style:{position:"relative",width:"100%",height:"100%"},children:e.jsx(l.Suspense,{fallback:e.jsx("div",{children:"Loading..."}),children:e.jsx(R.Routes,{children:Object.entries(s||{}).map(([c,y])=>{const d=c==="/"?"":c.replace(/^\/main/,"").replace(/^\//,"")||"";return e.jsx(R.Route,{path:d,element:e.jsx(ce,{menuGubunCode:t?.menuGubunCode,routeMap:o,routes:s,children:e.jsx(y,{})})},c)})})})})}),e.jsx(ie,{})]})})]})};function Ae({config:n,ui:t,navigate:r}){const{loading:s,capsOn:o,prefills:c,onKeyDown:y,doLogin:d}=N.useLogin(n),m=u=>d(u,r);return l.useEffect(()=>{N.useSystemStore.getState().fetchSystemMap()},[]),e.jsx(e.Fragment,{children:t({onSubmit:m,loading:s,capsOn:o,onKeyDown:y,prefills:c})})}function We({onSubmit:n,loading:t,capsOn:r,onKeyDown:s,prefills:o,labels:c={id:"ID 혹은 사번",pw:"비밀번호",remember:"Remember me",login:"로그인"},header:y,footer:d}){const[m]=i.Form.useForm();return l.useEffect(()=>{o&&(o.id||o.pswr)&&m.setFieldsValue({id:o.id,pswr:o.pswr})},[o,m]),e.jsx("div",{className:"login-main",children:e.jsxs("div",{className:"login_wrap",children:[y||e.jsx("div",{className:"logo_box"}),e.jsx("div",{className:"login_title"}),e.jsx(i.Form,{form:m,onFinish:n,className:"login-form",children:e.jsxs(i.Flex,{vertical:!0,children:[e.jsx(i.Form.Item,{name:"id",rules:[{required:!0,message:"아이디를 입력해주세요."},{whitespace:!0,message:"아이디는 공백이 들어갈 수 없습니다."}],children:e.jsx(i.Input,{allowClear:!0,placeholder:c.id,onKeyDown:s})}),e.jsx(i.Form.Item,{name:"pswr",rules:[{required:!0,message:"비밀번호를 입력하세요."}],children:e.jsx(i.Input.Password,{allowClear:!0,placeholder:c.pw,onKeyDown:s})}),e.jsx(i.Form.Item,{name:"remember",valuePropName:"checked",children:e.jsx(i.Checkbox,{children:c.remember})}),e.jsx("div",{className:r?"caps-lock caps-lock-on":"caps-lock",children:r?"Caps Lock On":"Caps Lock Off"}),e.jsx(i.Form.Item,{children:e.jsx(i.Button,{type:"primary",htmlType:"submit",loading:t,block:!0,children:c.login})})]})}),d]})})}exports.AppWrapper=we;exports.BwgCoreLogin=Ae;exports.BwgPortal01=Fe;exports.BwgPortal02=$e;exports.ConfigurableContent=X;exports.ConfigurableHeader=Q;exports.ConfigurableMenuTab=te;exports.ConfigurableSidebar=ne;exports.ContentContainer=re;exports.ContentWrapper=ce;exports.DefaultLoginView=We;exports.HeaderContainer=se;exports.LandingContainer=oe;exports.LoadingContainer=je;exports.PopupContainer=ae;exports.ProtectWrapper=le;exports.localPopupRegistry=ee;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/common-components-DcTm1Tn1.cjs"),o=require("../../utils/index.cjs");exports.ButtonAccessController=e.ButtonAccessController;exports.BwgButtonGroup=e.BwgButtonGroup;exports.BwgCmptArea=e.BwgCmptArea;exports.BwgCol=e.BwgCol;exports.BwgConfigProvider=e.BwgConfigProvider;exports.BwgDetail=e.BwgDetail;exports.BwgDrawer=e.BwgDrawer;exports.BwgEditor=e.BwgEditor;exports.BwgGrid=e.BwgGrid;exports.BwgInfoArea=e.BwgInfoArea;exports.BwgPagination=e.BwgPagination;exports.BwgPopup=e.BwgPopup;exports.BwgRow=e.BwgRow;exports.BwgSpace=e.BwgSpace;exports.BwgTable=e.BwgTable;exports.BwgTabs=e.BwgTabs;exports.BwgTitleBox=e.BwgTitleBox;exports.BwgView=e.BwgView;exports.ContentBox=e.ContentBox;exports.ContentLayOut=e.ContentLayOut;exports.GlobalConfigProvider=e.GlobalConfigProvider;exports.QuickServiceToggle=e.QuickServiceToggle;exports.SSOHandler=e.SSOHandler;exports.SearchBox=e.SearchBox;exports.createBwgGridRenderer=e.createBwgGridRenderer;exports.realFormat=o.realFormat;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/common-components-D3-r7D-8.cjs"),o=require("../../utils/index.cjs");exports.ButtonAccessController=e.ButtonAccessController;exports.BwgButtonGroup=e.BwgButtonGroup;exports.BwgCmptArea=e.BwgCmptArea;exports.BwgCol=e.BwgCol;exports.BwgConfigProvider=e.BwgConfigProvider;exports.BwgDetail=e.BwgDetail;exports.BwgDrawer=e.BwgDrawer;exports.BwgEditor=e.BwgEditor;exports.BwgGrid=e.BwgGrid;exports.BwgInfoArea=e.BwgInfoArea;exports.BwgPagination=e.BwgPagination;exports.BwgPopup=e.BwgPopup;exports.BwgRow=e.BwgRow;exports.BwgSpace=e.BwgSpace;exports.BwgTable=e.BwgTable;exports.BwgTabs=e.BwgTabs;exports.BwgTitleBox=e.BwgTitleBox;exports.BwgView=e.BwgView;exports.ContentBox=e.ContentBox;exports.ContentLayOut=e.ContentLayOut;exports.GlobalConfigProvider=e.GlobalConfigProvider;exports.QuickServiceToggle=e.QuickServiceToggle;exports.SSOHandler=e.SSOHandler;exports.SearchBox=e.SearchBox;exports.createBwgGridRenderer=e.createBwgGridRenderer;exports.realFormat=o.realFormat;
@@ -1,4 +1,4 @@
1
- import { f as e, q as o, r, j as B, B as g, s as w, t, p as i, h as n, u as l, o as d, n as p, i as C, b as c, v as u, l as f, e as S, k as m, d as x, C as G, G as b, Q as v, w as P, S as T, m as A } from "../../chunks/common-components-Cxh8PLBH.js";
1
+ import { f as e, q as o, r, j as B, B as g, s as w, t, p as i, h as n, u as l, o as d, n as p, i as C, b as c, v as u, l as f, e as S, k as m, d as x, C as G, G as b, Q as v, w as P, S as T, m as A } from "../../chunks/common-components-DIpOkbb5.js";
2
2
  import { realFormat as k } from "../../utils/index.js";
3
3
  export {
4
4
  e as ButtonAccessController,
@@ -1 +1 @@
1
- {"version":3,"file":"BwgDatePicker.d.ts","sourceRoot":"","sources":["../../../src/components/core/BwgDatePicker.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IACvD,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACjC;AAaD,QAAA,MAAM,aAAa,GAAI,8CAKpB,kBAAkB,4CAoDpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"BwgDatePicker.d.ts","sourceRoot":"","sources":["../../../src/components/core/BwgDatePicker.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IACvD,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACjC;AAaD,QAAA,MAAM,aAAa,GAAI,8CAKpB,kBAAkB,4CA2DpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -3,7 +3,7 @@ export interface BwgDownloadProps {
3
3
  /**
4
4
  * 파일을 조회하기 위한 파일 그룹 키입니다.
5
5
  */
6
- fileGrpKey?: string | number;
6
+ fileGrpKey: string | number;
7
7
  /**
8
8
  * 파일 목록을 조회하는 거래코드.
9
9
  * 기본값: 'SCMFILE00101'
@@ -16,9 +16,9 @@ export interface BwgDownloadProps {
16
16
  readOnly?: boolean;
17
17
  /**
18
18
  * 시스템 코드
19
- * @default __SYS_CD__
19
+ * @default __APP_CD__
20
20
  */
21
- sysCd?: string;
21
+ appCd?: string;
22
22
  }
23
23
  /**
24
24
  * BwgDownload 컴포넌트
@@ -1 +1 @@
1
- {"version":3,"file":"BwgDownload.d.ts","sourceRoot":"","sources":["../../../src/components/core/BwgDownload.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAuB,MAAM,OAAO,CAAC;AAGhD,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD;;;;;;;GAOG;AACH,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAqIrC,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"BwgDownload.d.ts","sourceRoot":"","sources":["../../../src/components/core/BwgDownload.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAuB,MAAM,OAAO,CAAC;AAGhD,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD;;;;;;;GAOG;AACH,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CA8IrC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),n=require("antd"),m=require("react"),ne=require("../../stores/index.cjs"),U=require("dayjs"),T=require("@ant-design/icons"),q=require("lodash"),E=require("../../utils/index.cjs"),ie=require("jszip"),se=require("imask"),J=require("react-dnd"),le=require("react-dnd-html5-backend"),ce=t=>{const{componentSize:e}=ne.useUserStore(),l=m.useMemo(()=>t.size?t.size:{0:"small",1:"middle",2:"large"}[e],[e,t.size]),a=m.useMemo(()=>({0:12,1:14,2:16})[e],[e]);return r.jsx(n.Button,{...t,size:l,className:"bwg-btn",style:{fontSize:`${a}px`,...t.style},children:t.children})},D=m.memo(({children:t,label:e,name:l,rules:a,initialValue:s,style:o,required:f,...i})=>{const g={fontWeight:"bold"};(a==null||a==null)&&f&&(a=[{required:!0,message:`${e}을(를) 입력해주세요.`}]);const d=Array.isArray(a)&&a.some(x=>x.required===!0),w=()=>typeof e=="string"?r.jsxs("span",{style:g,children:[e,d&&r.jsx("span",{style:{color:"#ff4d4f",marginLeft:"4px"},children:"*"})]}):r.jsx("span",{style:g,children:e});return r.jsx(n.Form.Item,{className:"bwg-form-item",label:e?w():void 0,labelAlign:i.labelAlign||"left",name:l,rules:a,colon:!1,initialValue:s,style:o,...i,children:t})}),de=({itemProps:t,inputProps:e={format:"YN"}})=>{const l=n.Form.useFormInstance(),a=s=>{e.format==="boolean"?l.setFieldValue(t?.name,s.target.checked):l.setFieldValue(t?.name,s.target.checked?"Y":"N"),e.onChange&&e.onChange(s)};return r.jsx(D,{...t,getValueProps:s=>({checked:e.format==="boolean"?!!s:s==="Y"}),normalize:s=>typeof s=="boolean"?e.format==="boolean"?s:s?"Y":"N":e.format==="boolean"?!!s:s?"Y":"N",children:r.jsx(n.Checkbox,{...e,onChange:a,children:e?.title})})},ue=({itemProps:t,inputProps:e})=>{const l=n.Form.useFormInstance(),[a,s]=m.useState(t?.initialValue??[]),[o,f]=m.useState([]),i=o.length>0&&o.length==a?.length,g=a?.length>0&&a.length<o.length;m.useEffect(()=>{f(d(e?.options))},[e?.options]),m.useEffect(()=>{s(a)},[a]);const d=C=>{const b=[];return(C||[]).map((k,z)=>{b.push(k.value)}),b},w=C=>{s(C.target.checked?o:[]),l.setFieldValue(t?.name,C.target.checked?o:[])},x=C=>{s(C),l.setFieldValue(t?.name,C),e?.onChange&&typeof e?.onChange=="function"&&e?.onChange(C)};return r.jsx(D,{...t,children:r.jsxs(n.ConfigProvider,{theme:{components:{Checkbox:{colorPrimary:"var(--check-primary)",colorPrimaryBorder:"var(--check-primary)",colorPrimaryHover:"var(--check-primary-active)"}}},children:[e?.allCheck&&r.jsx(n.Checkbox,{indeterminate:g,checked:i,onChange:w,children:"전체선택"}),r.jsx(n.Checkbox.Group,{options:e?.options,value:a,onChange:x})]})})},Z={year:{displayFormat:"YYYY",outputFormat:"YYYY"},month:{displayFormat:"YYYY-MM",outputFormat:"YYYYMM"},date:{displayFormat:"YYYY-MM-DD",outputFormat:"YYYYMMDD"},time:{displayFormat:"HH:mm",outputFormat:"HHmm"},datetime:{displayFormat:"YYYY-MM-DD HH:mm",outputFormat:"YYYYMMDDHHmm"}},me=({itemProps:t,inputProps:e,type:l="date",returnType:a="string"})=>{const{displayFormat:s,outputFormat:o}=m.useMemo(()=>Z[l],[l]),f=m.useMemo(()=>Object.values(Z).map(i=>i.outputFormat).sort((i,g)=>{if(i.length===g.length){if(i===o)return-1;if(g===o)return 1}return g.length-i.length}),[o]);return r.jsx(D,{...t,getValueProps:i=>({value:i?U.isDayjs(i)?i:U(i,f):null}),normalize:i=>i?a==="dayjs"?i:i.format(o):null,children:r.jsx(n.DatePicker,{...e,picker:l==="datetime"?"date":l,showTime:e?.showTime??(l==="datetime"||l==="time"),format:s})})},fe=({fileGrpKey:t,onFetchFilesTrxCd:e="SCMFILE00101",readOnly:l=!1,sysCd:a=__SYS_CD__})=>{const[s,o]=m.useState([]);m.useEffect(()=>{t&&e?a!=__SYS_CD__?E.callServiceBySysCd(__APP_CD__,e,{crprCd:E.getUserInfo()?.crprCd,sysCd:a,fileGrpKey:t}).then(i=>{if(i?.sub){const g=i.sub.map(d=>({uid:d.fileKey,name:d.lgclFileNm,filePath:d.filePath}));o(g)}}).catch(i=>{console.error("파일 목록 조회 서비스 호출에 실패했습니다.",i),n.message.error("파일 목록을 불러오는 중 오류가 발생했습니다.")}):E.callService(e,{crprCd:E.getUserInfo()?.crprCd,sysCd:a,fileGrpKey:t}).then(i=>{if(i?.sub){const g=i.sub.map(d=>({uid:d.fileKey,name:d.lgclFileNm,filePath:d.filePath}));o(g)}}).catch(i=>{console.error("파일 목록 조회 서비스 호출에 실패했습니다.",i),n.message.error("파일 목록을 불러오는 중 오류가 발생했습니다.")}):o([])},[t,e]);const f=async i=>{try{let g;a!=__SYS_CD__?g="/api/download/"+a:g="/api/download";const d=await fetch(g,{method:"POST",headers:{SYSCD:__SYS_CD__,"Content-Type":"application/json"},body:JSON.stringify({filePath:i.filePath,logicalName:i.name,fileKey:i.uid})});if(!d.ok){const k=(await d.json().catch(()=>null))?.message||"파일 다운로드에 실패했습니다.";throw new Error(k)}const w=await d.blob(),x=window.URL.createObjectURL(w),C=document.createElement("a");C.href=x,C.setAttribute("download",i.name),document.body.appendChild(C),C.click(),document.body.removeChild(C),window.URL.revokeObjectURL(x)}catch(g){console.error(g),n.message.error(g.message||"파일을 다운로드하는 중 오류가 발생했습니다.")}};return q.isEmpty(s)?null:r.jsx(n.Card,{title:"파일 목록",children:r.jsx(n.List,{dataSource:s,renderItem:i=>r.jsx(n.List.Item,{actions:l?[]:[r.jsx(n.Button,{type:"text",icon:r.jsx(T.DownloadOutlined,{}),onClick:()=>f(i)},"download")],children:r.jsx(n.List.Item.Meta,{avatar:r.jsx(T.PaperClipOutlined,{}),title:i.name})})})})},oe=m.forwardRef(({children:t,labelCol:e,style:l,className:a,...s},o)=>r.jsx(n.ConfigProvider,{form:{},children:r.jsx(n.Form,{ref:o,...s,requiredMark:!1,labelCol:e||{flex:"100px"},style:{padding:"10px",...l},className:`bwg-form ${a??""}`,children:t})}));oe.displayName="BwgForm";const ge=({itemProps:t,inputProps:e})=>r.jsx(D,{...t,children:r.jsx(n.Input,{...e})}),{Text:W}=n.Typography,{Dragger:he}=n.Upload,pe=[".pdf",".xlsx",".xls",".docx",".doc",".pptx",".ppt",".hwp",".txt",".csv",".jpg",".jpeg",".png",".gif",".zip"],xe=(t,e=2)=>{if(t===0)return"0 Bytes";const l=1024,a=e<0?0:e,s=["Bytes","KB","MB","GB","TB"],o=Math.floor(Math.log(t)/Math.log(l));return parseFloat((t/Math.pow(l,o)).toFixed(a))+" "+s[o]},Fe=({title:t="첨부파일",fileGrpKey:e,onUploadComplete:l,onSuccessTrxCd:a="SCMFILE00102",anotherServiceTrxCd:s="SCMFILE00105",allowedExtensions:o=pe,maxFileSize:f=2048})=>{const[i,g]=m.useState([]),[d,w]=m.useState(!1),[x,C]=m.useState(!1),[b,k]=m.useState(0),z=p=>{if(o&&o.length>0){const c=(S=>{const L=S.lastIndexOf(".");return L===-1?"":S.substring(L).toLowerCase()})(p.name);if(!o.includes(c))return n.message.error(`${p.name} 파일은 허용되지 않는 확장자입니다. (${o.join(", ")}만 가능)`),!1}return!0},B=async()=>{const p=i.filter(I=>I.status!=="done"),y=p.reduce((I,A)=>I+(A.size||0),0),c=2*1024*1024*1024;if(y>c){n.notification.error({message:"업로드 용량 초과",description:"한 번에 업로드할 수 있는 총 파일 용량은 2GB를 초과할 수 없습니다."});return}if(p.length===0){n.message.warning("업로드할 파일이 없거나 모든 파일이 이미 업로드되었습니다.");return}C(!0);let S;try{const I=new ie;p.forEach(A=>{A.originFileObj&&I.file(A.name,A.originFileObj)}),S=await I.generateAsync({type:"blob",compression:"DEFLATE",compressionOptions:{level:9}})}catch(I){C(!1),n.message.error("파일을 압축하는 중 오류가 발생했습니다."),console.error("Zipping error:",I);return}C(!1);const L=new FormData;L.append("file",S,"upload.zip"),w(!0),k(0);try{const I=await new Promise((j,M)=>{const O=new XMLHttpRequest;O.open("POST","/api/upload-large",!0),O.upload.onprogress=N=>{if(N.lengthComputable){const P=Math.round(N.loaded/N.total*100);k(P)}},O.onload=()=>{if(O.status>=200&&O.status<300)try{const N=JSON.parse(O.responseText);N.success?j(N):M(new Error(N.message||"파일 업로드에 실패했습니다."))}catch{M(new Error("잘못된 서버 응답입니다."))}else try{const N=JSON.parse(O.responseText);M(new Error(N.message||`서버 오류: ${O.status}`))}catch{M(new Error(`서버 오류: ${O.status}`))}},O.onerror=()=>{M(new Error("네트워크 오류가 발생했습니다."))},O.send(L)});n.message.success(I.message||"압축 파일이 성공적으로 업로드되었습니다.");const A=i.map(j=>p.find(M=>M.uid===j.uid)?{...j,status:"done"}:j);if(g(A),a&&I.uploadedFiles&&Array.isArray(I.uploadedFiles)){const j=E.getUserInfo();I.uploadedFiles.forEach(M=>{const O={crprCd:j?.crprCd,sysCd:__SYS_CD__,fileGrpKey:e,sub:[{crprCd:j?.crprCd,sysCd:__SYS_CD__,fileGrpKey:e,physFileNm:M.fileNameP,lgclFileNm:M.fileNameL,filePath:M.filePath,fileExtn:M.fileExt,fileSize:M.fileSize,mltpYn:"Y"}]};E.callService(a,O).then(N=>{const P=i.map(K=>({crprCd:j?.crprCd,sysCd:__SYS_CD__,fileGrpKey:N.sub[0].fileGrpKey,fileKey:N.sub[0].fileKey,lgclFileNm:K.name,fileSize:K.size,fileExtn:K.name.split(".").pop(),fileType:K.type}));E.callService(s,{sub:P})}).catch(N=>{console.error("후처리 서비스 호출 실패:",N),n.message.error(`${M.fileNameL} 파일의 후처리 작업에 실패했습니다.`)}),l&&l({fileNameP:M.fileNameP,fileNameL:M.fileNameL})})}}catch(I){n.message.error(I.message||"파일 업로드 중 오류가 발생했습니다.");const A=i.map(j=>p.find(M=>M.uid===j.uid)?{...j,status:"error",response:I.message||"파일 업로드 중 오류가 발생했습니다."}:j);g(A)}finally{w(!1)}},F={multiple:!0,fileList:i,beforeUpload:p=>z(p)?f&&p.size>=f*1024*1024?(n.message.error(`대용량 첨부 파일 최대 크기는 ${(f/1024).toFixed(1)}GB입니다.`),n.Upload.LIST_IGNORE):!1:n.Upload.LIST_IGNORE,onChange:({fileList:p})=>{const y=new Map(i.map(c=>[c.uid,c]));p.forEach(c=>{y.set(c.uid,c)}),g(Array.from(y.values()))},onRemove:p=>{const y=i.filter(c=>c.uid!==p.uid);g(y)},showUploadList:!1};return r.jsx(n.Spin,{spinning:d||x,tip:x?"파일 압축 중...":`파일 업로드 중... ${b}%`,children:r.jsxs("div",{className:"bwg-large-uploader-container",children:[r.jsx(n.Card,{title:r.jsx(W,{strong:!0,children:t}),extra:r.jsx(n.Upload,{...F,children:r.jsx(n.Button,{icon:r.jsx(T.UploadOutlined,{}),children:"파일 선택"})}),style:{padding:0},children:r.jsx(he,{...F,style:{border:"none",background:"transparent",padding:0},children:r.jsx("div",{className:"upload-list-container",children:i.length>0?r.jsx(n.List,{style:{textAlign:"left"},dataSource:i,renderItem:p=>{const y=p.status==="done",c=p.status==="error";let S;return y?S=r.jsx(T.CheckCircleOutlined,{style:{color:"#52c41a",fontSize:14}}):c?S=r.jsx(n.Tooltip,{title:typeof p.response=="string"?p.response:"업로드 실패",children:r.jsx(T.CloseCircleOutlined,{style:{color:"#ff4d4f",fontSize:14}})}):S=r.jsx(T.FileTextOutlined,{style:{fontSize:14}}),r.jsx(n.List.Item,{actions:[r.jsx(W,{type:"secondary",children:xe(p.size||0)},"size"),r.jsx(n.Button,{type:"text",icon:r.jsx(T.DeleteOutlined,{}),onClick:L=>{L.stopPropagation(),F.onRemove?.(p)},disabled:d||x},"delete")],children:r.jsx(n.List.Item.Meta,{avatar:S,title:r.jsx(W,{type:c?"danger":void 0,children:p.name})})},p.uid)}}):r.jsxs(n.Flex,{gap:"middle",align:"center",justify:"center",vertical:!0,style:{padding:"20px 0",minHeight:"120px"},children:[r.jsx(T.InboxOutlined,{style:{fontSize:"32px",color:"#999"}}),r.jsx(W,{type:"secondary",children:"업로드할 파일을 선택하거나 이 영역으로 드래그하세요."})]})})})}),i.length>0&&r.jsxs(n.Flex,{justify:"flex-end",align:"center",gap:"large",style:{marginTop:16},children:[d&&r.jsx("div",{style:{width:"250px"},children:r.jsx(n.Progress,{percent:b,size:"small"})}),r.jsx(n.Button,{type:"primary",onClick:B,disabled:d||x||i.filter(p=>p.status!=="done").length===0,icon:r.jsx(T.CloudUploadOutlined,{}),children:"일괄 업로드"})]})]})})},ye=t=>{if(typeof t=="string")return t.replace(/0/g,"_");if(Array.isArray(t))return t[0].replace(/0/g,"_");if(typeof t=="object"&&"mask"in t&&"blocks"in t){const{mask:e,blocks:l}=t;return e.split(".").map(a=>{const o=l?.[a]?.maxLength??3;return"_".repeat(o)}).join(".")}return""},Se=({itemProps:t,inputProps:e,mask:l})=>{const a=m.useRef(null),s=n.Form.useFormInstance(),o=m.useMemo(()=>ye(l),[l]);return m.useEffect(()=>{if(!a.current?.input)return;const f=typeof l=="string"||Array.isArray(l)?{mask:l}:l,i=se(a.current.input,f);return i.on("accept",()=>{s&&t?.name&&s.setFieldValue(t.name,i.value)}),()=>{i.destroy()}},[l,s,t?.name]),r.jsx(D,{...t,children:r.jsx(n.Input,{...e,ref:a,placeholder:o})})},je=t=>{switch(t){case"year":return{format:"YYYY",mask:"0000",outputFormat:"YYYY"};case"month":return{format:"YYYY-MM",mask:"0000-00",outputFormat:"YYYYMM"};case"date":default:return{format:"YYYY-MM-DD",mask:"0000-00-00",outputFormat:"YYYYMMDD"}}},Ce=({type:t="date",itemProps:e={name:"calendar"},inputProps:l})=>{const{format:a,mask:s,outputFormat:o}=je(t),f=m.useRef(null),i=m.useRef(null),g=m.useRef(null),d=n.Form.useFormInstance(),[w,x]=m.useState(!1),[C,b]=m.useState(!1),k=e?.name,[z,B]=m.useState(null),F=n.Form.useWatch(k,d);m.useEffect(()=>{if(!f.current?.input)return;const c=se(f.current.input,{mask:s,lazy:!1});return i.current=c,c.on("accept",()=>{const S=c.value;S.length>0&&x(!0);const L=U(S,a,!0);S.length===a.length&&L.isValid()&&(d.setFieldValue(k,c.value),B(L),i.current?.updateValue())}),()=>{c.destroy()}},[a,s]),m.useEffect(()=>{if(!F){B(null);return}let c=null;if(typeof F=="string"&&F.length===o.length&&/^\d+$/.test(F))if(t==="date"){const S=F.substring(0,4),L=F.substring(4,6),I=F.substring(6,8);c=U(`${S}-${L}-${I}`,a,!0)}else if(t==="month"){const S=F.substring(0,4),L=F.substring(4,6);c=U(`${S}-${L}`,a,!0)}else t==="year"&&(c=U(F,a,!0));else c=U(F,a,!0);c&&c.isValid()?B(c):B(null),b(!1)},[F,a,o,t]);const p=c=>{if(!c){B(null),i.current?.updateValue();return}B(c);const S=c.format(o);i.current&&(i.current.value=S,i.current.updateValue()),b(!1)},y=c=>{setTimeout(()=>{const S=document.activeElement,L=g.current,I=L?.querySelector(".ant-picker-dropdown");!(L&&(L.contains(S)||L===S||I?.contains(S)))&&!(c!==void 0?c:w)&&console.log("✅ Input과 DatePicker 모두 포커스가 없습니다")},0)};return r.jsx(D,{...e,name:void 0,validateStatus:C?"warning":void 0,children:r.jsx(n.ConfigProvider,{theme:{components:{Input:{addonBg:"#fff"}}},children:r.jsxs("div",{ref:g,style:{position:"relative"},children:[r.jsx(n.Form.Item,{name:k,getValueProps:c=>({value:c?U(c).format(a):void 0}),normalize:c=>c?U(c).format(o):void 0,noStyle:!0,children:r.jsx(n.Input,{...l,ref:f,onFocus:()=>{x(!w),i.current?.updateValue()},onBlur:()=>{y()},onKeyDown:c=>{if(c.key==="Backspace"&&x(!0),c.key==="Tab"&&x(!1),c.key==="Enter")if(w){const S=i.current?.value||"",L=U(S,a,!0);S.length===a.length&&L.isValid()?(x(!1),b(!1)):b(!0)}else x(!0)},allowClear:!0,placeholder:s.replace(/0/g,"_"),suffix:r.jsx(T.CalendarOutlined,{style:{color:"#d9d9d9"}}),autoComplete:"off"})}),r.jsx(n.DatePicker,{open:w,picker:t,format:{format:a,type:"mask"},showNow:!0,value:z,onChange:p,onOpenChange:c=>{x(c),c||y(!1)},renderExtraFooter:()=>C?r.jsxs("div",{style:{color:"#faad14",paddingLeft:"8px",fontSize:"12px",display:"flex",alignItems:"center",gap:"6px",borderTop:"1px solid #f0f0f0",backgroundColor:"#fffbe6"},children:[r.jsx(T.ExclamationCircleOutlined,{}),r.jsx("span",{children:"유효하지 않은 날짜입니다"})]}):null,getPopupContainer:c=>c.parentElement,style:{position:"absolute",top:0,left:0,pointerEvents:"none",opacity:0,width:"100%"}})]})})})},{Option:Q}=n.Select,Ye=({itemProps:t,inputProps:e})=>{const[l,a]=m.useState([]);return m.useEffect(()=>{e?.addField==="ALL"?a([{label:"전체",value:""},...e?.list||[]]):e?.addField==="NULL"?a([{label:"",value:""},...e?.list||[]]):a(e?.list||[])},[e?.list]),r.jsx(D,{...t,getValueProps:s=>s?{value:s&&s.indexOf(",")>0?s.split(","):[s]}:{value:[]},normalize:s=>s!=null&&s!=null&&s.length>0?s.toString():"",children:r.jsx(n.Select,{...e,mode:"multiple",children:l.map(s=>{const{value:o,label:f}=s;return e?.printCode?r.jsx(Q,{value:o,label:f,children:r.jsx(n.Space,{children:`[${o}] ${f}`})},o):r.jsx(Q,{value:o,label:f,children:r.jsx(n.Space,{children:`${f}`})},o)})})})},we=({itemProps:t,inputProps:e})=>{const l=s=>{let o=s.toString().split(".");return e?.decimalPoint!=null&&o[1]!=null&&e?.decimalPoint>0?o[1].length>e?.decimalPoint?o[1]="."+o[1].substring(0,e?.decimalPoint):o[1]="."+o[1]:o[1]="",o[0].replace(/\B(?=(\d{3})+(?!\d))/g,",")+o[1]},a=s=>{let o=s.toString().split(".");return e?.decimalPoint!=null&&o[1]!=null&&e?.decimalPoint>0?o[1].length>e?.decimalPoint?o[1]="."+o[1].substring(0,e?.decimalPoint):o[1]="."+o[1]:o[1]="",o[0].replace(/\$\s?|(,*)/g,"")+o[1]};return r.jsx(D,{...t,children:r.jsx(n.InputNumber,{...e,formatter:s=>l(s),parser:s=>a(s)})})},be=({itemProps:t,inputProps:e})=>r.jsx(D,{...t,children:r.jsx(n.Radio.Group,{...e})}),{RangePicker:Le}=n.DatePicker,ee={year:{displayFormat:"YYYY",outputFormat:"YYYY"},month:{displayFormat:"YYYY-MM",outputFormat:"YYYYMM"},date:{displayFormat:"YYYY-MM-DD",outputFormat:"YYYYMMDD"},time:{displayFormat:"HH:mm",outputFormat:"HHmm"},datetime:{displayFormat:"YYYY-MM-DD HH:mm",outputFormat:"YYYYMMDDHHmm"}},Ie=({itemProps:t,inputProps:e,type:l="date",minDate:a,maxDate:s,returnType:o="string"})=>{const{displayFormat:f,outputFormat:i}=m.useMemo(()=>ee[l],[l]),g=m.useMemo(()=>Object.values(ee).map(d=>d.outputFormat).sort((d,w)=>{if(d.length===w.length){if(d===i)return-1;if(w===i)return 1}return w.length-d.length}),[i]);return r.jsx(D,{...t,getValueProps:d=>({value:d&&d.length>0?[d[0]?U.isDayjs(d[0])?d[0]:U(d[0],g):null,d[1]?U.isDayjs(d[1])?d[1]:U(d[1],g):null]:null}),normalize:d=>d?o==="dayjs"?[d[0]??void 0,d[1]??void 0]:[d[0]?d[0].format(i):void 0,d[1]?d[1].format(i):void 0]:[void 0,void 0],children:r.jsx(Le,{...e,order:!0,minDate:a?U(a,g):void 0,maxDate:s?U(s,g):void 0,picker:l==="datetime"?"date":l,showTime:e?.showTime??(l==="datetime"||l==="time"),format:f})})},te=n.Input.Search,Be=t=>{const e=n.Form.useFormInstance(),{openPopup:l}=ne.usePopupStore(),a=t.itemProps?.name||[],s=t.popupConfig||{callback(f){console.log("callback data :: ",f),a.length>1?(e.setFieldValue(a[0],f.code),e.setFieldValue(a[1],f.name)):e.setFieldValue(a,f.code)}},o={...t,placeholder:typeof t.placeholder=="string"?t.placeholder:t.placeholder?.[0]||"",onChange:f=>{a.length>1&&e.setFieldValue(a[0],""),t.onChange?.(f)},onSearch:f=>{t.popuCd?l(t.popuCd,t.popupParams,s):t.onSearch?.(f)}};return a.length>1?r.jsx(D,{...t.itemProps,name:void 0,children:r.jsxs(n.Space.Compact,{block:!0,children:[r.jsx(n.Form.Item,{name:a[0],rules:t.itemProps?.rules,style:{width:"40%",marginBottom:0,marginInlineEnd:0},validateStatus:"",help:"",children:r.jsx(n.Input,{style:{color:"#999",backgroundColor:"#f5f5f5"},placeholder:t.placeholder?.[0]||"",readOnly:!0})}),r.jsx(n.Form.Item,{name:a[1],style:{width:"60%",marginBottom:0},children:r.jsx(te,{readOnly:t.readOnly,enterButton:r.jsx(n.Button,{icon:r.jsx(T.SearchOutlined,{}),disabled:t.readOnly}),...o})})]})}):r.jsx(D,{...t.itemProps,children:r.jsx(te,{...o})})},Me=({itemProps:t,selectProps:e={options:[],allowClear:!0}})=>{const l=n.Form.useFormInstance(),a=!!l,s=m.useMemo(()=>e?.addField==="ALL"?[{label:"전체",value:""},...e?.options||[]]:e?.addField==="NULL"?[{label:"",value:""},...e?.options||[]]:e?.options||[],[e.options,e.addField]),o=g=>{e.onChange?.(g)},f={...e,allowClear:e.allowClear??!0,options:s,onChange:o,variant:e.variant},i=r.jsx(n.Select,{...f,disabled:e.disabled});return e.copyable&&!a&&console.warn("BwgSelect: copyable 기능은 Form 컨텍스트 내에서만 사용 가능합니다."),e.copyable?r.jsx(D,{...t,name:void 0,children:r.jsxs(n.Space.Compact,{block:!0,children:[r.jsx(n.Form.Item,{name:t?.name,rules:t?.rules,style:{width:"100%",marginBottom:0},validateStatus:"",help:"",children:i}),r.jsx(n.Typography.Paragraph,{copyable:{text:a&&l?.getFieldValue(t?.name)?.toString()||"",tooltips:["코드복사","코드복사됨"]},style:{margin:0,backgroundColor:"#f5f5f5",borderRadius:"4px",border:"1px solid #d9d9d9",fontSize:"12px",color:"#666",display:"flex",alignItems:"center",height:"30px",padding:"0 8px"}})]})}):r.jsx(D,{...t,children:i})},_e=({itemProps:t,inputProps:e={format:"YN"}})=>{const l=n.Form.useFormInstance(),a=(s,o)=>{e.format==="boolean"?l.setFieldValue(t?.name,s):l.setFieldValue(t?.name,s?"Y":"N"),e.onChange&&e.onChange(s,o)};return r.jsx(D,{...t,getValueProps:s=>({checked:e.format==="boolean"?!!s:s==="Y"}),normalize:s=>typeof s=="boolean"?e.format==="boolean"?s:s?"Y":"N":e.format==="boolean"?!!s:s?"Y":"N",children:r.jsx(n.Switch,{...e,onChange:(s,o)=>a(s,o)})})},{TextArea:ke}=n.Input,Ne=({itemProps:t,inputProps:e})=>r.jsx(D,{...t,children:r.jsx(ke,{...e})}),De=[".pdf",".xlsx",".xls",".docx",".doc",".pptx",".ppt",".hwp",".txt",".csv",".jpg",".jpeg",".png",".gif",".zip"],re={FILE:"file"},ve=({originNode:t,file:e,fileList:l,moveFile:a,onDrop:s})=>{const o=m.useRef(null),[{handlerId:f},i]=J.useDrop({accept:re.FILE,collect:x=>({handlerId:x.getHandlerId()}),hover(x,C){if(!o.current)return;const b=x.uid,k=e.uid;if(b===k)return;const z=q.findIndex(l,{uid:k}),B=q.findIndex(l,{uid:b});if(B===-1||z===-1)return;const F=o.current.getBoundingClientRect(),p=C.getClientOffset();if(!p)return;const y=(F.bottom-F.top)/2,c=p.y-F.top;B<z&&c<y||B>z&&c>y||a(b,k)},drop(){s()}}),[{isDragging:g},d]=J.useDrag({type:re.FILE,item:()=>({uid:e.uid,index:q.findIndex(l,{uid:e.uid})}),collect:x=>({isDragging:x.isDragging()})}),w=g?0:1;return d(i(o)),r.jsx("div",{ref:o,style:{opacity:w},"data-handler-id":f,children:t})},Ee=({itemProps:t,fileGrpKey:e,onUploadComplete:l,onFetchFilesTrxCd:a="SCMFILE00101",onSuccessTrxCd:s="SCMFILE00102",onDeleteFileTrxCd:o="SCMFILE00103",onReorderFilesTrxCd:f="SCMFILE00104",allowedExtensions:i=De,maxFileSize:g=200,showButton:d=!0,multiple:w=!1,newFileGrpKeyonModify:x=!1,buttonText:C="파일 선택",localOnly:b=!1,onFilesChange:k})=>{const[z,B]=m.useState([]),F=m.useRef(e),p=m.useRef([]),y=n.Form.useFormInstance(),c=()=>{if(b||p.current.length===0)return;const u=[...p.current];if(p.current=[],s){const _=u.map(Y=>({crprCd:E.getUserInfo()?.crprCd,sysCd:__SYS_CD__,fileGrpKey:F.current,physFileNm:Y.fileNameP,lgclFileNm:Y.fileNameL,filePath:Y.filePath,fileExtn:Y.fileExt,fileSize:Y.fileSize,mltpYn:"N"}));console.log("newFileGrpKeyonModify",x),console.log("newFileGrpKeyonModify",x?0:F.current),E.callService(s,{crprCd:E.getUserInfo()?.crprCd,sysCd:__SYS_CD__,fileGrpKey:x?0:F.current,oldFileGrpKey:F.current,newFileGrpKeyonModify:x,sub:_}).then(Y=>{if(Y?.sub&&Y.sub.length>0){const h=Y.sub[0].fileGrpKey;(!F.current||x)&&(F.current=h);const V=new Map;Y.sub.forEach(v=>{const R=u.find(H=>H.fileNameL===v.lgclFileNm);R&&V.set(R.tempId,v)});const G=t?.name;(v=>{if(j){const R=y?.getFieldValue(G)||[],H=v(R);y?.setFieldValue(G,H)}else B(R=>v(R))})(v=>v.map(R=>{const H=V.get(R.uid);if(H){const X=u.find(ae=>ae.tempId===R.uid);return l&&X&&l({...X,fileGrpKey:h,fileKey:H.fileKey}),{...R,name:H.lgclFileNm,fileGrpKey:h,fileKey:H.fileKey,uid:H.fileKey,status:"done",url:`/api/download?filePath=${H.filePath}&logicalName=${H.lgclFileNm}`}}return R}))}}).catch(Y=>{console.error("업로드 후처리 서비스 호출 실패:",Y),n.message.error("파일 후처리 중 오류가 발생했습니다.");const h=new Set(u.map($=>$.tempId)),V=t?.name;($=>{if(j){const v=y?.getFieldValue(V)||[],R=$(v);y?.setFieldValue(V,R)}else B(v=>$(v))})($=>$.map(v=>h.has(v.uid)?{...v,status:"error",error:"후처리 실패"}:v))})}},S=m.useRef(q.debounce(c,500)).current;m.useEffect(()=>()=>{S.cancel()},[S]),m.useEffect(()=>{F.current=e},[e]),m.useEffect(()=>{b||e&&a&&E.callService(a,{crprCd:E.getUserInfo()?.crprCd,sysCd:__SYS_CD__,fileGrpKey:e}).then(u=>{if(u?.sub){const _=u.sub.map(h=>({uid:h.fileKey,name:h.lgclFileNm,status:"done",url:`/api/download?filePath=${h.filePath}&logicalName=${h.lgclFileNm}`})),Y=t?.name;j?y?.setFieldValue(Y,_):B(_)}else{const _=t?.name;j?y?.setFieldValue(_,[]):B([])}}).catch(u=>{console.error("파일 목록 조회 서비스 호출에 실패했습니다.",u),n.message.error("파일 목록을 불러오는 중 오류가 발생했습니다.")})},[e,a]);const L=(u,_)=>{const Y=t?.name,h=j?y?.getFieldValue(Y)||[]:z,V=q.findIndex(h,{uid:u}),G=q.findIndex(h,{uid:_});if(V<0||G<0)return;const $=[...h],[v]=$.splice(V,1);$.splice(G,0,v),j?y?.setFieldValue(Y,$):B($)},I=()=>{if(!b&&e&&f){const u=t?.name,Y=(j?y?.getFieldValue(u)||[]:z).map(h=>h.uid);E.callService(f,{crprCd:E.getUserInfo()?.crprCd,sysCd:__SYS_CD__,fileGrpKey:e,reorderedFileKeys:Y}).then(()=>{n.message.success("파일 순서가 성공적으로 저장되었습니다.")}).catch(h=>{console.error("파일 순서 저장 서비스 호출 실패:",h),n.message.error("파일 순서 저장 중 오류가 발생했습니다.")})}},A=u=>{const _=t?.name,Y=j?y?.getFieldValue(_)||[]:z;if(!w&&Y.length>0)return n.message.error("하나의 파일만 업로드할 수 있습니다."),n.Upload.LIST_IGNORE;if(i&&i.length>0){const h=`.${u.name.split(".").pop()?.toLowerCase()}`;if(!i.includes(h))return n.message.error(`${u.name} 파일은 허용되지 않는 확장자입니다. (${i.join(", ")})`),n.Upload.LIST_IGNORE}return g&&!(u.size/1024/1024<g)?(n.message.error(`일반업로드의 최대용량은 ${g}MB입니다.`),n.Upload.LIST_IGNORE):!b},j=!!t?.name,M={name:"file",multiple:w,action:b?void 0:"/api/upload",beforeUpload:A,showUploadList:{showRemoveIcon:d},onChange(u){const{status:_,uid:Y}=u.file;if(_==="removed"){if(!b&&o)E.callService(o,{crprCd:E.getUserInfo()?.crprCd,sysCd:__SYS_CD__,fileGrpKey:x?0:F.current,fileKey:Y,oldFileGrpKey:F.current,newFileGrpKeyonModify:x}).then(h=>{if(n.message.success("파일이 성공적으로 삭제되었습니다."),x&&(F.current=h.fileGrpKey),j){const V=t?.name;y?.setFieldValue(V,u.fileList)}else B(u.fileList);k?.(u.fileList),l?.({fileGrpKey:h.fileGrpKey})}).catch(h=>{console.error("파일 삭제 서비스 호출에 실패했습니다.",h),n.message.error("파일 삭제 중 오류가 발생했습니다.")});else{if(j){const h=t?.name;y?.setFieldValue(h,u.fileList)}else B(u.fileList);k?.(u.fileList)}return}if(j){const h=t?.name;y?.setFieldValue(h,u.fileList)}else B(u.fileList);if(k?.(u.fileList),_==="done")if(!b&&u.file.response?.success){const{uploadedFiles:h}=u.file.response;h&&Array.isArray(h)&&h.length>0&&(h.forEach(V=>{V.tempId=u.file.uid,p.current.push(V)}),S()),n.message.success(u.file.response.message||`${u.file.name} 파일이 성공적으로 업로드되었습니다.`)}else n.message.error(u.file.response?.message||`${u.file.name} 파일 업로드에 실패했습니다.`);else _==="error"&&n.message.error(u.file.response?.message||`${u.file.name} 파일 업로드 중 오류가 발생했습니다.`)},itemRender(u,_,Y){const h=m.cloneElement(u,{href:_.url||void 0,title:void 0});return r.jsx(ve,{originNode:h,file:_,fileList:Y,moveFile:L,onDrop:I},_.uid)}};j||(M.fileList=z);const O=u=>Array.isArray(u)?u:u&&u.fileList,N=t?.name,P=j?n.Form.useWatch?.(N,y):void 0,K=j?P||[]:z;return r.jsx(J.DndProvider,{backend:le.HTML5Backend,children:r.jsx(D,{valuePropName:"fileList",getValueFromEvent:O,...t,children:r.jsx(n.Upload,{headers:{SYSCD:__SYS_CD__},...M,listType:"picture",children:d&&(w||K.length===0)&&r.jsx(n.Button,{icon:r.jsx(T.UploadOutlined,{}),children:C})})})})};exports.BwgButton=ce;exports.BwgCheck=de;exports.BwgCheckList=ue;exports.BwgDatePicker=me;exports.BwgDownload=fe;exports.BwgForm=oe;exports.BwgFormItem=D;exports.BwgInput=ge;exports.BwgLargeUploader=Fe;exports.BwgMaskedInput=Se;exports.BwgMaskedPicker=Ce;exports.BwgMultiSelect=Ye;exports.BwgNumber=we;exports.BwgRadio=be;exports.BwgRangePicker=Ie;exports.BwgSearch=Be;exports.BwgSelect=Me;exports.BwgSwitch=_e;exports.BwgTextArea=Ne;exports.BwgUploader=Ee;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),n=require("antd"),m=require("react"),ne=require("../../stores/index.cjs"),O=require("dayjs"),R=require("@ant-design/icons"),N=require("../../utils/index.cjs"),ie=require("jszip"),se=require("imask"),P=require("lodash"),J=require("react-dnd"),le=require("react-dnd-html5-backend"),ce=t=>{const{componentSize:e}=ne.useUserStore(),l=m.useMemo(()=>t.size?t.size:{0:"small",1:"middle",2:"large"}[e],[e,t.size]),o=m.useMemo(()=>({0:12,1:14,2:16})[e],[e]);return r.jsx(n.Button,{...t,size:l,className:"bwg-btn",style:{fontSize:`${o}px`,...t.style},children:t.children})},v=m.memo(({children:t,label:e,name:l,rules:o,initialValue:s,style:a,required:f,...i})=>{const g={fontWeight:"bold"};(o==null||o==null)&&f&&(o=[{required:!0,message:`${e}을(를) 입력해주세요.`}]);const d=Array.isArray(o)&&o.some(h=>h.required===!0),b=()=>typeof e=="string"?r.jsxs("span",{style:g,children:[e,d&&r.jsx("span",{style:{color:"#ff4d4f",marginLeft:"4px"},children:"*"})]}):r.jsx("span",{style:g,children:e});return r.jsx(n.Form.Item,{className:"bwg-form-item",label:e?b():void 0,labelAlign:i.labelAlign||"left",name:l,rules:o,colon:!1,initialValue:s,style:a,...i,children:t})}),de=({itemProps:t,inputProps:e={format:"YN"}})=>{const l=n.Form.useFormInstance(),o=s=>{e.format==="boolean"?l.setFieldValue(t?.name,s.target.checked):l.setFieldValue(t?.name,s.target.checked?"Y":"N"),e.onChange&&e.onChange(s)};return r.jsx(v,{...t,getValueProps:s=>({checked:e.format==="boolean"?!!s:s==="Y"}),normalize:s=>typeof s=="boolean"?e.format==="boolean"?s:s?"Y":"N":e.format==="boolean"?!!s:s?"Y":"N",children:r.jsx(n.Checkbox,{...e,onChange:o,children:e?.title})})},ue=({itemProps:t,inputProps:e})=>{const l=n.Form.useFormInstance(),[o,s]=m.useState(t?.initialValue??[]),[a,f]=m.useState([]),i=a.length>0&&a.length==o?.length,g=o?.length>0&&o.length<a.length;m.useEffect(()=>{f(d(e?.options))},[e?.options]),m.useEffect(()=>{s(o)},[o]);const d=_=>{const S=[];return(_||[]).map((I,U)=>{S.push(I.value)}),S},b=_=>{s(_.target.checked?a:[]),l.setFieldValue(t?.name,_.target.checked?a:[])},h=_=>{s(_),l.setFieldValue(t?.name,_),e?.onChange&&typeof e?.onChange=="function"&&e?.onChange(_)};return r.jsx(v,{...t,children:r.jsxs(n.ConfigProvider,{theme:{components:{Checkbox:{colorPrimary:"var(--check-primary)",colorPrimaryBorder:"var(--check-primary)",colorPrimaryHover:"var(--check-primary-active)"}}},children:[e?.allCheck&&r.jsx(n.Checkbox,{indeterminate:g,checked:i,onChange:b,children:"전체선택"}),r.jsx(n.Checkbox.Group,{options:e?.options,value:o,onChange:h})]})})},Z={year:{displayFormat:"YYYY",outputFormat:"YYYY"},month:{displayFormat:"YYYY-MM",outputFormat:"YYYYMM"},date:{displayFormat:"YYYY-MM-DD",outputFormat:"YYYYMMDD"},time:{displayFormat:"HH:mm",outputFormat:"HHmm"},datetime:{displayFormat:"YYYY-MM-DD HH:mm",outputFormat:"YYYYMMDDHHmm"}},me=({itemProps:t,inputProps:e,type:l="date",returnType:o="string"})=>{const{displayFormat:s,outputFormat:a}=m.useMemo(()=>Z[l],[l]),f=m.useMemo(()=>Object.values(Z).map(i=>i.outputFormat).sort((i,g)=>{if(i.length===g.length){if(i===a)return-1;if(g===a)return 1}return g.length-i.length}),[a]);return r.jsx(v,{...t,getValueProps:i=>({value:i?O.isDayjs(i)?i:O(i,f):null}),normalize:i=>i?o==="dayjs"?i:i.format(a):null,children:r.jsx(n.DatePicker,{...e,picker:l==="datetime"?"date":l,showTime:e?.showTime??(l==="datetime"||l==="time"),format:e?.format?{format:e?.format?.format,type:"mask"}:s})})},fe=({fileGrpKey:t,onFetchFilesTrxCd:e="SCMFILE00101",readOnly:l=!1,appCd:o=__APP_CD__})=>{const[s,a]=m.useState([]);m.useEffect(()=>{if(e)if(o!=__APP_CD__){const g=N.getApiDeps().findSystemByAppCd?.(o??__APP_CD__);if(!g||!g.sysCd){console.error("해당 앱코드는 존재하지 않습니다.",o);return}N.callServiceByAppCd({trxCd:e,appCd:o},{crprCd:N.getCrprCd(),sysCd:g.sysCd,fileGrpKey:t}).then(d=>{if(d?.sub){const b=d.sub.map(h=>({uid:h.fileKey,name:h.lgclFileNm,filePath:h.filePath}));a(b)}}).catch(d=>{console.error("파일 목록 조회 서비스 호출에 실패했습니다.",d),n.message.error("파일 목록을 불러오는 중 오류가 발생했습니다.")})}else N.callService(e,{crprCd:N.getUserInfo()?.crprCd,sysCd:__SYS_CD__,fileGrpKey:t}).then(i=>{if(i?.sub){const g=i.sub.map(d=>({uid:d.fileKey,name:d.lgclFileNm,filePath:d.filePath}));a(g)}}).catch(i=>{console.error("파일 목록 조회 서비스 호출에 실패했습니다.",i),n.message.error("파일 목록을 불러오는 중 오류가 발생했습니다.")});else a([])},[t,e,o]);const f=async i=>{try{const d=N.getApiDeps().findSystemByAppCd?.(o??__APP_CD__);if(!d||!d.sysCd){console.error("해당 앱코드는 존재하지 않습니다.",o);return}const h=await fetch("/api/download",{method:"POST",headers:{SYSCD:d.sysCd,"Content-Type":"application/json"},body:JSON.stringify({filePath:i.filePath,logicalName:i.name,fileKey:i.uid})});if(!h.ok){const w=(await h.json().catch(()=>null))?.message||"파일 다운로드에 실패했습니다.";throw new Error(w)}const _=await h.blob(),S=window.URL.createObjectURL(_),I=document.createElement("a");I.href=S,I.setAttribute("download",i.name),document.body.appendChild(I),I.click(),document.body.removeChild(I),window.URL.revokeObjectURL(S)}catch(g){console.error(g),n.message.error(g.message||"파일을 다운로드하는 중 오류가 발생했습니다.")}};return r.jsx(n.Card,{title:"파일 목록",children:r.jsx(n.List,{dataSource:s,renderItem:i=>r.jsx(n.List.Item,{actions:l?[]:[r.jsx(n.Button,{type:"text",icon:r.jsx(R.DownloadOutlined,{}),onClick:()=>f(i)},"download")],children:r.jsx(n.List.Item.Meta,{avatar:r.jsx(R.PaperClipOutlined,{}),title:i.name})})})})},oe=m.forwardRef(({children:t,labelCol:e,style:l,className:o,...s},a)=>r.jsx(n.ConfigProvider,{form:{},children:r.jsx(n.Form,{ref:a,...s,requiredMark:!1,labelCol:e||{flex:"100px"},style:{padding:"10px",...l},className:`bwg-form ${o??""}`,children:t})}));oe.displayName="BwgForm";const ge=({itemProps:t,inputProps:e})=>r.jsx(v,{...t,children:r.jsx(n.Input,{...e})}),{Text:W}=n.Typography,{Dragger:he}=n.Upload,pe=[".pdf",".xlsx",".xls",".docx",".doc",".pptx",".ppt",".hwp",".txt",".csv",".jpg",".jpeg",".png",".gif",".zip"],xe=(t,e=2)=>{if(t===0)return"0 Bytes";const l=1024,o=e<0?0:e,s=["Bytes","KB","MB","GB","TB"],a=Math.floor(Math.log(t)/Math.log(l));return parseFloat((t/Math.pow(l,a)).toFixed(o))+" "+s[a]},ye=({title:t="첨부파일",fileGrpKey:e,onUploadComplete:l,onSuccessTrxCd:o="SCMFILE00102",anotherServiceTrxCd:s="SCMFILE00105",allowedExtensions:a=pe,maxFileSize:f=2048})=>{const[i,g]=m.useState([]),[d,b]=m.useState(!1),[h,_]=m.useState(!1),[S,I]=m.useState(0),U=x=>{if(a&&a.length>0){const c=(C=>{const L=C.lastIndexOf(".");return L===-1?"":C.substring(L).toLowerCase()})(x.name);if(!a.includes(c))return n.message.error(`${x.name} 파일은 허용되지 않는 확장자입니다. (${a.join(", ")}만 가능)`),!1}return!0},w=async()=>{const x=i.filter(B=>B.status!=="done"),F=x.reduce((B,T)=>B+(T.size||0),0),c=2*1024*1024*1024;if(F>c){n.notification.error({message:"업로드 용량 초과",description:"한 번에 업로드할 수 있는 총 파일 용량은 2GB를 초과할 수 없습니다."});return}if(x.length===0){n.message.warning("업로드할 파일이 없거나 모든 파일이 이미 업로드되었습니다.");return}_(!0);let C;try{const B=new ie;x.forEach(T=>{T.originFileObj&&B.file(T.name,T.originFileObj)}),C=await B.generateAsync({type:"blob",compression:"DEFLATE",compressionOptions:{level:9}})}catch(B){_(!1),n.message.error("파일을 압축하는 중 오류가 발생했습니다."),console.error("Zipping error:",B);return}_(!1);const L=new FormData;L.append("file",C,"upload.zip"),b(!0),I(0);try{const B=await new Promise((j,M)=>{const A=new XMLHttpRequest;A.open("POST","/api/upload-large",!0),A.upload.onprogress=D=>{if(D.lengthComputable){const G=Math.round(D.loaded/D.total*100);I(G)}},A.onload=()=>{if(A.status>=200&&A.status<300)try{const D=JSON.parse(A.responseText);D.success?j(D):M(new Error(D.message||"파일 업로드에 실패했습니다."))}catch{M(new Error("잘못된 서버 응답입니다."))}else try{const D=JSON.parse(A.responseText);M(new Error(D.message||`서버 오류: ${A.status}`))}catch{M(new Error(`서버 오류: ${A.status}`))}},A.onerror=()=>{M(new Error("네트워크 오류가 발생했습니다."))},A.send(L)});n.message.success(B.message||"압축 파일이 성공적으로 업로드되었습니다.");const T=i.map(j=>x.find(M=>M.uid===j.uid)?{...j,status:"done"}:j);if(g(T),o&&B.uploadedFiles&&Array.isArray(B.uploadedFiles)){const j=N.getUserInfo();B.uploadedFiles.forEach(M=>{const A={crprCd:j?.crprCd,sysCd:__SYS_CD__,fileGrpKey:e,sub:[{crprCd:j?.crprCd,sysCd:__SYS_CD__,fileGrpKey:e,physFileNm:M.fileNameP,lgclFileNm:M.fileNameL,filePath:M.filePath,fileExtn:M.fileExt,fileSize:M.fileSize,mltpYn:"Y"}]};N.callService(o,A).then(D=>{const G=i.map(q=>({crprCd:j?.crprCd,sysCd:__SYS_CD__,fileGrpKey:D.sub[0].fileGrpKey,fileKey:D.sub[0].fileKey,lgclFileNm:q.name,fileSize:q.size,fileExtn:q.name.split(".").pop(),fileType:q.type}));N.callService(s,{sub:G})}).catch(D=>{console.error("후처리 서비스 호출 실패:",D),n.message.error(`${M.fileNameL} 파일의 후처리 작업에 실패했습니다.`)}),l&&l({fileNameP:M.fileNameP,fileNameL:M.fileNameL})})}}catch(B){n.message.error(B.message||"파일 업로드 중 오류가 발생했습니다.");const T=i.map(j=>x.find(M=>M.uid===j.uid)?{...j,status:"error",response:B.message||"파일 업로드 중 오류가 발생했습니다."}:j);g(T)}finally{b(!1)}},y={multiple:!0,fileList:i,beforeUpload:x=>U(x)?f&&x.size>=f*1024*1024?(n.message.error(`대용량 첨부 파일 최대 크기는 ${(f/1024).toFixed(1)}GB입니다.`),n.Upload.LIST_IGNORE):!1:n.Upload.LIST_IGNORE,onChange:({fileList:x})=>{const F=new Map(i.map(c=>[c.uid,c]));x.forEach(c=>{F.set(c.uid,c)}),g(Array.from(F.values()))},onRemove:x=>{const F=i.filter(c=>c.uid!==x.uid);g(F)},showUploadList:!1};return r.jsx(n.Spin,{spinning:d||h,tip:h?"파일 압축 중...":`파일 업로드 중... ${S}%`,children:r.jsxs("div",{className:"bwg-large-uploader-container",children:[r.jsx(n.Card,{title:r.jsx(W,{strong:!0,children:t}),extra:r.jsx(n.Upload,{...y,children:r.jsx(n.Button,{icon:r.jsx(R.UploadOutlined,{}),children:"파일 선택"})}),style:{padding:0},children:r.jsx(he,{...y,style:{border:"none",background:"transparent",padding:0},children:r.jsx("div",{className:"upload-list-container",children:i.length>0?r.jsx(n.List,{style:{textAlign:"left"},dataSource:i,renderItem:x=>{const F=x.status==="done",c=x.status==="error";let C;return F?C=r.jsx(R.CheckCircleOutlined,{style:{color:"#52c41a",fontSize:14}}):c?C=r.jsx(n.Tooltip,{title:typeof x.response=="string"?x.response:"업로드 실패",children:r.jsx(R.CloseCircleOutlined,{style:{color:"#ff4d4f",fontSize:14}})}):C=r.jsx(R.FileTextOutlined,{style:{fontSize:14}}),r.jsx(n.List.Item,{actions:[r.jsx(W,{type:"secondary",children:xe(x.size||0)},"size"),r.jsx(n.Button,{type:"text",icon:r.jsx(R.DeleteOutlined,{}),onClick:L=>{L.stopPropagation(),y.onRemove?.(x)},disabled:d||h},"delete")],children:r.jsx(n.List.Item.Meta,{avatar:C,title:r.jsx(W,{type:c?"danger":void 0,children:x.name})})},x.uid)}}):r.jsxs(n.Flex,{gap:"middle",align:"center",justify:"center",vertical:!0,style:{padding:"20px 0",minHeight:"120px"},children:[r.jsx(R.InboxOutlined,{style:{fontSize:"32px",color:"#999"}}),r.jsx(W,{type:"secondary",children:"업로드할 파일을 선택하거나 이 영역으로 드래그하세요."})]})})})}),i.length>0&&r.jsxs(n.Flex,{justify:"flex-end",align:"center",gap:"large",style:{marginTop:16},children:[d&&r.jsx("div",{style:{width:"250px"},children:r.jsx(n.Progress,{percent:S,size:"small"})}),r.jsx(n.Button,{type:"primary",onClick:w,disabled:d||h||i.filter(x=>x.status!=="done").length===0,icon:r.jsx(R.CloudUploadOutlined,{}),children:"일괄 업로드"})]})]})})},Fe=t=>{if(typeof t=="string")return t.replace(/0/g,"_");if(Array.isArray(t))return t[0].replace(/0/g,"_");if(typeof t=="object"&&"mask"in t&&"blocks"in t){const{mask:e,blocks:l}=t;return e.split(".").map(o=>{const a=l?.[o]?.maxLength??3;return"_".repeat(a)}).join(".")}return""},Ce=({itemProps:t,inputProps:e,mask:l})=>{const o=m.useRef(null),s=n.Form.useFormInstance(),a=m.useMemo(()=>Fe(l),[l]);return m.useEffect(()=>{if(!o.current?.input)return;const f=typeof l=="string"||Array.isArray(l)?{mask:l}:l,i=se(o.current.input,f);return i.on("accept",()=>{s&&t?.name&&s.setFieldValue(t.name,i.value)}),()=>{i.destroy()}},[l,s,t?.name]),r.jsx(v,{...t,children:r.jsx(n.Input,{...e,ref:o,placeholder:a})})},je=t=>{switch(t){case"year":return{format:"YYYY",mask:"0000",outputFormat:"YYYY"};case"month":return{format:"YYYY-MM",mask:"0000-00",outputFormat:"YYYYMM"};case"date":default:return{format:"YYYY-MM-DD",mask:"0000-00-00",outputFormat:"YYYYMMDD"}}},Se=({type:t="date",itemProps:e={name:"calendar"},inputProps:l})=>{const{format:o,mask:s,outputFormat:a}=je(t),f=m.useRef(null),i=m.useRef(null),g=m.useRef(null),d=n.Form.useFormInstance(),[b,h]=m.useState(!1),[_,S]=m.useState(!1),I=e?.name,[U,w]=m.useState(null),y=n.Form.useWatch(I,d);m.useEffect(()=>{if(!f.current?.input)return;const c=se(f.current.input,{mask:s,lazy:!1});return i.current=c,c.on("accept",()=>{const C=c.value;C.length>0&&h(!0);const L=O(C,o,!0);C.length===o.length&&L.isValid()&&(d.setFieldValue(I,c.value),w(L),i.current?.updateValue())}),()=>{c.destroy()}},[o,s]),m.useEffect(()=>{if(!y){w(null);return}let c=null;if(typeof y=="string"&&y.length===a.length&&/^\d+$/.test(y))if(t==="date"){const C=y.substring(0,4),L=y.substring(4,6),B=y.substring(6,8);c=O(`${C}-${L}-${B}`,o,!0)}else if(t==="month"){const C=y.substring(0,4),L=y.substring(4,6);c=O(`${C}-${L}`,o,!0)}else t==="year"&&(c=O(y,o,!0));else c=O(y,o,!0);c&&c.isValid()?w(c):w(null),S(!1)},[y,o,a,t]);const x=c=>{if(!c){w(null),i.current?.updateValue();return}w(c);const C=c.format(a);i.current&&(i.current.value=C,i.current.updateValue()),S(!1)},F=c=>{setTimeout(()=>{const C=document.activeElement,L=g.current,B=L?.querySelector(".ant-picker-dropdown");!(L&&(L.contains(C)||L===C||B?.contains(C)))&&!(c!==void 0?c:b)&&console.log("✅ Input과 DatePicker 모두 포커스가 없습니다")},0)};return r.jsx(v,{...e,name:void 0,validateStatus:_?"warning":void 0,children:r.jsx(n.ConfigProvider,{theme:{components:{Input:{addonBg:"#fff"}}},children:r.jsxs("div",{ref:g,style:{position:"relative"},children:[r.jsx(n.Form.Item,{name:I,getValueProps:c=>({value:c?O(c).format(o):void 0}),normalize:c=>c?O(c).format(a):void 0,noStyle:!0,children:r.jsx(n.Input,{...l,ref:f,onFocus:()=>{h(!b),i.current?.updateValue()},onBlur:()=>{F()},onKeyDown:c=>{if(c.key==="Backspace"&&h(!0),c.key==="Tab"&&h(!1),c.key==="Enter")if(b){const C=i.current?.value||"",L=O(C,o,!0);C.length===o.length&&L.isValid()?(h(!1),S(!1)):S(!0)}else h(!0)},allowClear:!0,placeholder:s.replace(/0/g,"_"),suffix:r.jsx(R.CalendarOutlined,{style:{color:"#d9d9d9"}}),autoComplete:"off"})}),r.jsx(n.DatePicker,{open:b,picker:t,format:{format:o,type:"mask"},showNow:!0,value:U,onChange:x,onOpenChange:c=>{h(c),c||F(!1)},renderExtraFooter:()=>_?r.jsxs("div",{style:{color:"#faad14",paddingLeft:"8px",fontSize:"12px",display:"flex",alignItems:"center",gap:"6px",borderTop:"1px solid #f0f0f0",backgroundColor:"#fffbe6"},children:[r.jsx(R.ExclamationCircleOutlined,{}),r.jsx("span",{children:"유효하지 않은 날짜입니다"})]}):null,getPopupContainer:c=>c.parentElement,style:{position:"absolute",top:0,left:0,pointerEvents:"none",opacity:0,width:"100%"}})]})})})},{Option:Q}=n.Select,Ye=({itemProps:t,inputProps:e})=>{const[l,o]=m.useState([]);return m.useEffect(()=>{e?.addField==="ALL"?o([{label:"전체",value:""},...e?.list||[]]):e?.addField==="NULL"?o([{label:"",value:""},...e?.list||[]]):o(e?.list||[])},[e?.list]),r.jsx(v,{...t,getValueProps:s=>s?{value:s&&s.indexOf(",")>0?s.split(","):[s]}:{value:[]},normalize:s=>s!=null&&s!=null&&s.length>0?s.toString():"",children:r.jsx(n.Select,{...e,mode:"multiple",children:l.map(s=>{const{value:a,label:f}=s;return e?.printCode?r.jsx(Q,{value:a,label:f,children:r.jsx(n.Space,{children:`[${a}] ${f}`})},a):r.jsx(Q,{value:a,label:f,children:r.jsx(n.Space,{children:`${f}`})},a)})})})},be=({itemProps:t,inputProps:e})=>{const l=s=>{let a=s.toString().split(".");return e?.decimalPoint!=null&&a[1]!=null&&e?.decimalPoint>0?a[1].length>e?.decimalPoint?a[1]="."+a[1].substring(0,e?.decimalPoint):a[1]="."+a[1]:a[1]="",a[0].replace(/\B(?=(\d{3})+(?!\d))/g,",")+a[1]},o=s=>{let a=s.toString().split(".");return e?.decimalPoint!=null&&a[1]!=null&&e?.decimalPoint>0?a[1].length>e?.decimalPoint?a[1]="."+a[1].substring(0,e?.decimalPoint):a[1]="."+a[1]:a[1]="",a[0].replace(/\$\s?|(,*)/g,"")+a[1]};return r.jsx(v,{...t,children:r.jsx(n.InputNumber,{...e,formatter:s=>l(s),parser:s=>o(s)})})},we=({itemProps:t,inputProps:e})=>r.jsx(v,{...t,children:r.jsx(n.Radio.Group,{...e})}),{RangePicker:Le}=n.DatePicker,ee={year:{displayFormat:"YYYY",outputFormat:"YYYY"},month:{displayFormat:"YYYY-MM",outputFormat:"YYYYMM"},date:{displayFormat:"YYYY-MM-DD",outputFormat:"YYYYMMDD"},time:{displayFormat:"HH:mm",outputFormat:"HHmm"},datetime:{displayFormat:"YYYY-MM-DD HH:mm",outputFormat:"YYYYMMDDHHmm"}},Ie=({itemProps:t,inputProps:e,type:l="date",minDate:o,maxDate:s,returnType:a="string"})=>{const{displayFormat:f,outputFormat:i}=m.useMemo(()=>ee[l],[l]),g=m.useMemo(()=>Object.values(ee).map(d=>d.outputFormat).sort((d,b)=>{if(d.length===b.length){if(d===i)return-1;if(b===i)return 1}return b.length-d.length}),[i]);return r.jsx(v,{...t,getValueProps:d=>({value:d&&d.length>0?[d[0]?O.isDayjs(d[0])?d[0]:O(d[0],g):null,d[1]?O.isDayjs(d[1])?d[1]:O(d[1],g):null]:null}),normalize:d=>d?a==="dayjs"?[d[0]??void 0,d[1]??void 0]:[d[0]?d[0].format(i):void 0,d[1]?d[1].format(i):void 0]:[void 0,void 0],children:r.jsx(Le,{...e,order:!0,minDate:o?O(o,g):void 0,maxDate:s?O(s,g):void 0,picker:l==="datetime"?"date":l,showTime:e?.showTime??(l==="datetime"||l==="time"),format:f})})},te=n.Input.Search,Be=t=>{const e=n.Form.useFormInstance(),{openPopup:l}=ne.usePopupStore(),o=t.itemProps?.name||[],s=t.popupConfig||{callback(f){Array.isArray(o)&&o.length>1?(e.setFieldValue(o[0],f.code),e.setFieldValue(o[1],f.name)):e.setFieldValue(o,f.code)}},a={...t,placeholder:typeof t.placeholder=="string"?t.placeholder:t.placeholder?.[0]||"",onChange:f=>{Array.isArray(o)&&o.length>1&&e.setFieldValue(o[0],""),t.onChange?.(f)},onSearch:f=>{t.popuCd?l(t.popuCd,t.popupParams,s):t.onSearch?.(f)}};return Array.isArray(o)&&o.length>1?r.jsx(v,{...t.itemProps,name:void 0,children:r.jsxs(n.Space.Compact,{block:!0,children:[r.jsx(n.Form.Item,{name:o[0],rules:t.itemProps?.rules,style:{width:"40%",marginBottom:0,marginInlineEnd:0},validateStatus:"",help:"",children:r.jsx(n.Input,{style:{color:"#999",backgroundColor:"#f5f5f5"},placeholder:t.placeholder?.[0]||"",readOnly:!0})}),r.jsx(n.Form.Item,{name:o[1],style:{width:"60%",marginBottom:0},children:r.jsx(te,{readOnly:t.readOnly,enterButton:r.jsx(n.Button,{icon:r.jsx(R.SearchOutlined,{}),disabled:t.readOnly}),...a})})]})}):r.jsx(v,{...t.itemProps,children:r.jsx(te,{...a})})},_e=({itemProps:t,selectProps:e={options:[],allowClear:!0}})=>{const l=n.Form.useFormInstance(),o=!!l,s=m.useMemo(()=>e?.addField==="ALL"?[{label:"전체",value:""},...e?.options||[]]:e?.addField==="NULL"?[{label:"",value:""},...e?.options||[]]:e?.options||[],[e.options,e.addField]),a=g=>{e.onChange?.(g)},f={...e,allowClear:e.allowClear??!0,options:s,onChange:a,variant:e.variant},i=r.jsx(n.Select,{...f,disabled:e.disabled});return e.copyable&&!o&&console.warn("BwgSelect: copyable 기능은 Form 컨텍스트 내에서만 사용 가능합니다."),e.copyable?r.jsx(v,{...t,name:void 0,children:r.jsxs(n.Space.Compact,{block:!0,children:[r.jsx(n.Form.Item,{name:t?.name,rules:t?.rules,style:{width:"100%",marginBottom:0},validateStatus:"",help:"",children:i}),r.jsx(n.Typography.Paragraph,{copyable:{text:o&&l?.getFieldValue(t?.name)?.toString()||"",tooltips:["코드복사","코드복사됨"]},style:{margin:0,backgroundColor:"#f5f5f5",borderRadius:"4px",border:"1px solid #d9d9d9",fontSize:"12px",color:"#666",display:"flex",alignItems:"center",height:"30px",padding:"0 8px"}})]})}):r.jsx(v,{...t,children:i})},Me=({itemProps:t,inputProps:e={format:"YN"}})=>{const l=n.Form.useFormInstance(),o=(s,a)=>{e.format==="boolean"?l.setFieldValue(t?.name,s):l.setFieldValue(t?.name,s?"Y":"N"),e.onChange&&e.onChange(s,a)};return r.jsx(v,{...t,getValueProps:s=>({checked:e.format==="boolean"?!!s:s==="Y"}),normalize:s=>typeof s=="boolean"?e.format==="boolean"?s:s?"Y":"N":e.format==="boolean"?!!s:s?"Y":"N",children:r.jsx(n.Switch,{...e,onChange:(s,a)=>o(s,a)})})},{TextArea:ke}=n.Input,De=({itemProps:t,inputProps:e})=>r.jsx(v,{...t,children:r.jsx(ke,{...e})}),Ne=[".pdf",".xlsx",".xls",".docx",".doc",".pptx",".ppt",".hwp",".txt",".csv",".jpg",".jpeg",".png",".gif",".zip"],re={FILE:"file"},ve=({originNode:t,file:e,fileList:l,moveFile:o,onDrop:s})=>{const a=m.useRef(null),[{handlerId:f},i]=J.useDrop({accept:re.FILE,collect:h=>({handlerId:h.getHandlerId()}),hover(h,_){if(!a.current)return;const S=h.uid,I=e.uid;if(S===I)return;const U=P.findIndex(l,{uid:I}),w=P.findIndex(l,{uid:S});if(w===-1||U===-1)return;const y=a.current.getBoundingClientRect(),x=_.getClientOffset();if(!x)return;const F=(y.bottom-y.top)/2,c=x.y-y.top;w<U&&c<F||w>U&&c>F||o(S,I)},drop(){s()}}),[{isDragging:g},d]=J.useDrag({type:re.FILE,item:()=>({uid:e.uid,index:P.findIndex(l,{uid:e.uid})}),collect:h=>({isDragging:h.isDragging()})}),b=g?0:1;return d(i(a)),r.jsx("div",{ref:a,style:{opacity:b},"data-handler-id":f,children:t})},Ee=({itemProps:t,fileGrpKey:e,onUploadComplete:l,onFetchFilesTrxCd:o="SCMFILE00101",onSuccessTrxCd:s="SCMFILE00102",onDeleteFileTrxCd:a="SCMFILE00103",onReorderFilesTrxCd:f="SCMFILE00104",allowedExtensions:i=Ne,maxFileSize:g=200,showButton:d=!0,multiple:b=!1,newFileGrpKeyonModify:h=!1,buttonText:_="파일 선택",localOnly:S=!1,onFilesChange:I})=>{const[U,w]=m.useState([]),y=m.useRef(e),x=m.useRef([]),F=n.Form.useFormInstance(),c=()=>{if(S||x.current.length===0)return;const u=[...x.current];if(x.current=[],s){const k=u.map(Y=>({crprCd:N.getUserInfo()?.crprCd,sysCd:__SYS_CD__,fileGrpKey:y.current,physFileNm:Y.fileNameP,lgclFileNm:Y.fileNameL,filePath:Y.filePath,fileExtn:Y.fileExt,fileSize:Y.fileSize,mltpYn:"N"}));console.log("newFileGrpKeyonModify",h),console.log("newFileGrpKeyonModify",h?0:y.current),N.callService(s,{crprCd:N.getUserInfo()?.crprCd,sysCd:__SYS_CD__,fileGrpKey:h?0:y.current,oldFileGrpKey:y.current,newFileGrpKeyonModify:h,sub:k}).then(Y=>{if(Y?.sub&&Y.sub.length>0){const p=Y.sub[0].fileGrpKey;(!y.current||h)&&(y.current=p);const z=new Map;Y.sub.forEach(E=>{const V=u.find(H=>H.fileNameL===E.lgclFileNm);V&&z.set(V.tempId,E)});const K=t?.name;(E=>{if(j){const V=F?.getFieldValue(K)||[],H=E(V);F?.setFieldValue(K,H)}else w(V=>E(V))})(E=>E.map(V=>{const H=z.get(V.uid);if(H){const X=u.find(ae=>ae.tempId===V.uid);return l&&X&&l({...X,fileGrpKey:p,fileKey:H.fileKey}),{...V,name:H.lgclFileNm,fileGrpKey:p,fileKey:H.fileKey,uid:H.fileKey,status:"done",url:`/api/download?filePath=${H.filePath}&logicalName=${H.lgclFileNm}`}}return V}))}}).catch(Y=>{console.error("업로드 후처리 서비스 호출 실패:",Y),n.message.error("파일 후처리 중 오류가 발생했습니다.");const p=new Set(u.map($=>$.tempId)),z=t?.name;($=>{if(j){const E=F?.getFieldValue(z)||[],V=$(E);F?.setFieldValue(z,V)}else w(E=>$(E))})($=>$.map(E=>p.has(E.uid)?{...E,status:"error",error:"후처리 실패"}:E))})}},C=m.useRef(P.debounce(c,500)).current;m.useEffect(()=>()=>{C.cancel()},[C]),m.useEffect(()=>{y.current=e},[e]),m.useEffect(()=>{S||e&&o&&N.callService(o,{crprCd:N.getUserInfo()?.crprCd,sysCd:__SYS_CD__,fileGrpKey:e}).then(u=>{if(u?.sub){const k=u.sub.map(p=>({uid:p.fileKey,name:p.lgclFileNm,status:"done",url:`/api/download?filePath=${p.filePath}&logicalName=${p.lgclFileNm}`})),Y=t?.name;j?F?.setFieldValue(Y,k):w(k)}else{const k=t?.name;j?F?.setFieldValue(k,[]):w([])}}).catch(u=>{console.error("파일 목록 조회 서비스 호출에 실패했습니다.",u),n.message.error("파일 목록을 불러오는 중 오류가 발생했습니다.")})},[e,o]);const L=(u,k)=>{const Y=t?.name,p=j?F?.getFieldValue(Y)||[]:U,z=P.findIndex(p,{uid:u}),K=P.findIndex(p,{uid:k});if(z<0||K<0)return;const $=[...p],[E]=$.splice(z,1);$.splice(K,0,E),j?F?.setFieldValue(Y,$):w($)},B=()=>{if(!S&&e&&f){const u=t?.name,Y=(j?F?.getFieldValue(u)||[]:U).map(p=>p.uid);N.callService(f,{crprCd:N.getUserInfo()?.crprCd,sysCd:__SYS_CD__,fileGrpKey:e,reorderedFileKeys:Y}).then(()=>{n.message.success("파일 순서가 성공적으로 저장되었습니다.")}).catch(p=>{console.error("파일 순서 저장 서비스 호출 실패:",p),n.message.error("파일 순서 저장 중 오류가 발생했습니다.")})}},T=u=>{const k=t?.name,Y=j?F?.getFieldValue(k)||[]:U;if(!b&&Y.length>0)return n.message.error("하나의 파일만 업로드할 수 있습니다."),n.Upload.LIST_IGNORE;if(i&&i.length>0){const p=`.${u.name.split(".").pop()?.toLowerCase()}`;if(!i.includes(p))return n.message.error(`${u.name} 파일은 허용되지 않는 확장자입니다. (${i.join(", ")})`),n.Upload.LIST_IGNORE}return g&&!(u.size/1024/1024<g)?(n.message.error(`일반업로드의 최대용량은 ${g}MB입니다.`),n.Upload.LIST_IGNORE):!S},j=!!t?.name,M={name:"file",multiple:b,action:S?void 0:"/api/upload",beforeUpload:T,showUploadList:{showRemoveIcon:d},onChange(u){const{status:k,uid:Y}=u.file;if(k==="removed"){if(!S&&a)N.callService(a,{crprCd:N.getUserInfo()?.crprCd,sysCd:__SYS_CD__,fileGrpKey:h?0:y.current,fileKey:Y,oldFileGrpKey:y.current,newFileGrpKeyonModify:h}).then(p=>{if(n.message.success("파일이 성공적으로 삭제되었습니다."),h&&(y.current=p.fileGrpKey),j){const z=t?.name;F?.setFieldValue(z,u.fileList)}else w(u.fileList);I?.(u.fileList),l?.({fileGrpKey:p.fileGrpKey})}).catch(p=>{console.error("파일 삭제 서비스 호출에 실패했습니다.",p),n.message.error("파일 삭제 중 오류가 발생했습니다.")});else{if(j){const p=t?.name;F?.setFieldValue(p,u.fileList)}else w(u.fileList);I?.(u.fileList)}return}if(j){const p=t?.name;F?.setFieldValue(p,u.fileList)}else w(u.fileList);if(I?.(u.fileList),k==="done")if(!S&&u.file.response?.success){const{uploadedFiles:p}=u.file.response;p&&Array.isArray(p)&&p.length>0&&(p.forEach(z=>{z.tempId=u.file.uid,x.current.push(z)}),C()),n.message.success(u.file.response.message||`${u.file.name} 파일이 성공적으로 업로드되었습니다.`)}else n.message.error(u.file.response?.message||`${u.file.name} 파일 업로드에 실패했습니다.`);else k==="error"&&n.message.error(u.file.response?.message||`${u.file.name} 파일 업로드 중 오류가 발생했습니다.`)},itemRender(u,k,Y){const p=m.cloneElement(u,{href:k.url||void 0,title:void 0});return r.jsx(ve,{originNode:p,file:k,fileList:Y,moveFile:L,onDrop:B},k.uid)}};j||(M.fileList=U);const A=u=>Array.isArray(u)?u:u&&u.fileList,D=t?.name,G=j?n.Form.useWatch?.(D,F):void 0,q=j?G||[]:U;return r.jsx(J.DndProvider,{backend:le.HTML5Backend,children:r.jsx(v,{valuePropName:"fileList",getValueFromEvent:A,...t,children:r.jsx(n.Upload,{headers:{SYSCD:__SYS_CD__},...M,listType:"picture",children:d&&(b||q.length===0)&&r.jsx(n.Button,{icon:r.jsx(R.UploadOutlined,{}),children:_})})})})};exports.BwgButton=ce;exports.BwgCheck=de;exports.BwgCheckList=ue;exports.BwgDatePicker=me;exports.BwgDownload=fe;exports.BwgForm=oe;exports.BwgFormItem=v;exports.BwgInput=ge;exports.BwgLargeUploader=ye;exports.BwgMaskedInput=Ce;exports.BwgMaskedPicker=Se;exports.BwgMultiSelect=Ye;exports.BwgNumber=be;exports.BwgRadio=we;exports.BwgRangePicker=Ie;exports.BwgSearch=Be;exports.BwgSelect=_e;exports.BwgSwitch=Me;exports.BwgTextArea=De;exports.BwgUploader=Ee;