@bwg-ui/core 1.1.12 → 1.1.14

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.
@@ -1,4 +1,4 @@
1
- "use strict";const t=require("./jsx-runtime-CeSfJrVB.cjs"),u=require("./AuthContext-CXng9fj0.cjs"),E=require("./ScreenProtectContext-CVuXrJm6.cjs"),i=require("antd"),m=require("react-router-dom"),w=require("./envUtils-CduTHoHu.cjs"),n=require("react"),v=require("@ant-design/icons");class g extends n.Component{constructor(e){super(e),this.resetError=()=>{this.setState({hasError:!1,error:void 0,errorInfo:void 0})},this.state={hasError:!1}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,s){console.error("ErrorBound caught an error:",e,s),this.setState({error:e,errorInfo:s})}render(){return this.state.hasError?this.props.fallback?this.props.fallback:t.jsxRuntimeExports.jsxs("div",{style:{padding:"40px 20px",textAlign:"center",backgroundColor:"#fafafa",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center"},children:[t.jsxRuntimeExports.jsx(i.Result,{status:"error",title:"컴포넌트 로딩 중 오류가 발생했습니다",subTitle:this.state.error?`오류 내용: ${this.state.error.message}`:"알 수 없는 오류가 발생했습니다",extra:[t.jsxRuntimeExports.jsx(i.Button,{type:"primary",icon:t.jsxRuntimeExports.jsx(v.ReloadOutlined,{}),onClick:this.resetError,style:{marginRight:8},children:"다시 시도"},"retry")]}),this.state.error&&t.jsxRuntimeExports.jsxs("details",{style:{marginTop:"20px",textAlign:"left",maxWidth:"600px",backgroundColor:"#fff",padding:"16px",borderRadius:"6px",border:"1px solid #d9d9d9"},children:[t.jsxRuntimeExports.jsx("summary",{style:{cursor:"pointer",fontWeight:"bold"},children:"오류 상세 정보"}),t.jsxRuntimeExports.jsx("pre",{style:{marginTop:"8px",fontSize:"12px",color:"#666",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:this.state.error.stack})]})]}):this.props.children}}const x="bwg-dot-line-wave-v4";function R(){if(typeof document>"u"||document.getElementById(x))return;const r=document.createElement("style");r.id=x,r.textContent=`
1
+ "use strict";const t=require("./jsx-runtime-CeSfJrVB.cjs"),u=require("./AuthContext-CXng9fj0.cjs"),E=require("./ScreenProtectContext-CVuXrJm6.cjs"),i=require("antd"),m=require("react-router-dom"),w=require("./envUtils-CduTHoHu.cjs"),n=require("react"),v=require("@ant-design/icons");class g extends n.Component{constructor(r){super(r),this.resetError=()=>{this.setState({hasError:!1,error:void 0,errorInfo:void 0})},this.state={hasError:!1}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,s){console.error("ErrorBound caught an error:",r,s),this.setState({error:r,errorInfo:s})}render(){return this.state.hasError?this.props.fallback?this.props.fallback:t.jsxRuntimeExports.jsxs("div",{style:{padding:"40px 20px",textAlign:"center",backgroundColor:"#fafafa",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center"},children:[t.jsxRuntimeExports.jsx(i.Result,{status:"error",title:"컴포넌트 로딩 중 오류가 발생했습니다",subTitle:this.state.error?`오류 내용: ${this.state.error.message}`:"알 수 없는 오류가 발생했습니다",extra:[t.jsxRuntimeExports.jsx(i.Button,{type:"primary",icon:t.jsxRuntimeExports.jsx(v.ReloadOutlined,{}),onClick:this.resetError,style:{marginRight:8},children:"다시 시도"},"retry")]}),this.state.error&&t.jsxRuntimeExports.jsxs("details",{style:{marginTop:"20px",textAlign:"left",maxWidth:"600px",backgroundColor:"#fff",padding:"16px",borderRadius:"6px",border:"1px solid #d9d9d9"},children:[t.jsxRuntimeExports.jsx("summary",{style:{cursor:"pointer",fontWeight:"bold"},children:"오류 상세 정보"}),t.jsxRuntimeExports.jsx("pre",{style:{marginTop:"8px",fontSize:"12px",color:"#666",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:this.state.error.stack})]})]}):this.props.children}}const x="bwg-dot-line-wave-v4";function R(){if(typeof document>"u"||document.getElementById(x))return;const e=document.createElement("style");e.id=x,e.textContent=`
2
2
  .bwg-dotline {
3
3
  display: inline-flex;
4
4
  align-items: center;
@@ -32,5 +32,5 @@
32
32
  @media (prefers-reduced-motion: reduce) {
33
33
  .bwg-dotline .dot { animation: none; }
34
34
  }
35
- `,document.head.appendChild(r)}const C=({colors:r=["#DAD3FF","#B3A6FF","#9380FF","#816BFA"],count:e,size:s=12,gap:o=10,amp:h=16,speedMs:p=900,direction:b="ltr",phase:f=.7})=>{n.useEffect(()=>{R()},[]);const l=e??r.length,y=Array.from({length:l}),j={"--bwg-size":`${s}px`,"--bwg-gap":`${o}px`,"--bwg-amp":`${h}px`,"--bwg-speed":`${p}ms`},d=p/l*f;return t.jsxRuntimeExports.jsx("span",{className:"bwg-dotline",role:"img","aria-label":"loading",style:j,children:y.map((P,a)=>t.jsxRuntimeExports.jsx("span",{className:"dot",style:{backgroundColor:r[a%r.length],animationDelay:b==="ltr"?`${a*d}ms`:`${(l-1-a)*d}ms`}},a))})},c=({spin:r=null,text:e="인증중..."})=>{const{busy:s}=u.useAuth();return r??s?t.jsxRuntimeExports.jsxs("div",{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:"rgba(0,0,0,0.6)",color:"#fff",zIndex:1e4},"aria-live":"polite","aria-busy":"true",role:"status",children:[t.jsxRuntimeExports.jsx(i.Spin,{indicator:t.jsxRuntimeExports.jsx(C,{colors:["#DAD3FF","#B3A6FF","#9380FF","#816BFA"],size:12,gap:10,amp:16,speedMs:900,phase:.75,direction:"ltr"})}),t.jsxRuntimeExports.jsx("span",{className:"bwg-spin-txt",style:{marginTop:"15px"},children:e})]}):null},D=()=>{const{reauthWithPin:r}=u.useAuth();return t.jsxRuntimeExports.jsx(E.ScreenProtectProvider,{idleMs:30*6e4,onUnlock:async e=>w.isLocal?!0:!!e&&await r(e),children:t.jsxRuntimeExports.jsx(i.ConfigProvider,{getPopupContainer:()=>document.getElementById("app-shell")||document.body,children:t.jsxRuntimeExports.jsxs("div",{id:"app-shell",children:[t.jsxRuntimeExports.jsx(c,{}),t.jsxRuntimeExports.jsx(m.Outlet,{})]})})})},F=()=>t.jsxRuntimeExports.jsxs("div",{children:[t.jsxRuntimeExports.jsx(c,{}),t.jsxRuntimeExports.jsx(m.Outlet,{})]}),k=({tab:r,isActive:e,instance:s,params:o})=>t.jsxRuntimeExports.jsx("div",{style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",visibility:e?"visible":"hidden",opacity:e?1:0,transition:"opacity 0.2s ease-in-out",pointerEvents:e?"auto":"none"},children:t.jsxRuntimeExports.jsx(g,{children:t.jsxRuntimeExports.jsx(n.Suspense,{fallback:null,children:s&&n.createElement(s,{params:o})})})}),S=n.memo(k);exports.ErrorBound=g;exports.ProgressOverlay=c;exports.ProtectedLayout=D;exports.PublicLayout=F;exports.TabContainer=S;
36
- //# sourceMappingURL=TabContainer-Dx2PVShz.cjs.map
35
+ `,document.head.appendChild(e)}const C=({colors:e=["#DAD3FF","#B3A6FF","#9380FF","#816BFA"],count:r,size:s=12,gap:c=10,amp:h=16,speedMs:p=900,direction:f="ltr",phase:y=.7})=>{n.useEffect(()=>{R()},[]);const a=r??e.length,j=Array.from({length:a}),b={"--bwg-size":`${s}px`,"--bwg-gap":`${c}px`,"--bwg-amp":`${h}px`,"--bwg-speed":`${p}ms`},d=p/a*y;return t.jsxRuntimeExports.jsx("span",{className:"bwg-dotline",role:"img","aria-label":"loading",style:b,children:j.map((P,o)=>t.jsxRuntimeExports.jsx("span",{className:"dot",style:{backgroundColor:e[o%e.length],animationDelay:f==="ltr"?`${o*d}ms`:`${(a-1-o)*d}ms`}},o))})},l=({spin:e=null,text:r="인증중..."})=>{const{busy:s}=u.useAuth();return e??s?t.jsxRuntimeExports.jsxs("div",{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:"rgba(0,0,0,0.6)",color:"#fff",zIndex:1e4},"aria-live":"polite","aria-busy":"true",role:"status",children:[t.jsxRuntimeExports.jsx(i.Spin,{indicator:t.jsxRuntimeExports.jsx(C,{colors:["#DAD3FF","#B3A6FF","#9380FF","#816BFA"],size:12,gap:10,amp:16,speedMs:900,phase:.75,direction:"ltr"})}),t.jsxRuntimeExports.jsx("span",{className:"bwg-spin-txt",style:{marginTop:"15px"},children:r})]}):null},D=()=>{const{reauthWithPin:e}=u.useAuth();return t.jsxRuntimeExports.jsx(E.ScreenProtectProvider,{idleMs:30*6e4,onUnlock:async r=>w.isLocal?!0:!!r&&await e(r),children:t.jsxRuntimeExports.jsx(i.ConfigProvider,{getPopupContainer:()=>document.getElementById("app-shell")||document.body,children:t.jsxRuntimeExports.jsxs("div",{id:"app-shell",children:[t.jsxRuntimeExports.jsx(l,{}),t.jsxRuntimeExports.jsx(m.Outlet,{})]})})})},F=()=>t.jsxRuntimeExports.jsxs("div",{children:[t.jsxRuntimeExports.jsx(l,{}),t.jsxRuntimeExports.jsx(m.Outlet,{})]}),k=({isActive:e,instance:r,params:s})=>t.jsxRuntimeExports.jsx("div",{style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",visibility:e?"visible":"hidden",opacity:e?1:0,transition:"opacity 0.2s ease-in-out",pointerEvents:e?"auto":"none"},children:t.jsxRuntimeExports.jsx(g,{children:t.jsxRuntimeExports.jsx(n.Suspense,{fallback:null,children:r&&n.createElement(r,{params:s})})})}),S=n.memo(k);exports.ErrorBound=g;exports.ProgressOverlay=l;exports.ProtectedLayout=D;exports.PublicLayout=F;exports.ViewContainer=S;
36
+ //# sourceMappingURL=ViewContainer-DQl7Mb0U.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewContainer-DQl7Mb0U.cjs","sources":["../../src/components/layout/ErrorBound.tsx","../../src/components/layout/ProgressOverlay.tsx","../../src/components/layout/ProtectLayout.tsx","../../src/components/layout/PublicLayout.tsx","../../src/components/layout/ViewContainer.tsx"],"sourcesContent":["import React, { Component, ErrorInfo, ReactNode } from 'react';\r\nimport { Result, Button } from 'antd';\r\nimport { ReloadOutlined, HomeOutlined } from '@ant-design/icons';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\ninterface Props {\r\n children: ReactNode;\r\n fallback?: ReactNode;\r\n}\r\n\r\ninterface State {\r\n hasError: boolean;\r\n error?: Error;\r\n errorInfo?: ErrorInfo;\r\n}\r\n\r\n// 에러 페이지 컴포넌트\r\nexport const ErrorPage: React.FC<{\r\n error?: Error;\r\n resetError?: () => void;\r\n onGoHome?: () => void;\r\n}> = ({ error, resetError, onGoHome }) => {\r\n const navigate = useNavigate();\r\n\r\n const handleGoHome = () => {\r\n if (onGoHome) {\r\n onGoHome();\r\n } else {\r\n // 기본 홈 이동 로직\r\n navigate('/');\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n style={{\r\n padding: '40px 20px',\r\n textAlign: 'center',\r\n backgroundColor: '#fafafa',\r\n minHeight: '400px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <Result\r\n status=\"error\"\r\n title=\"컴포넌트 로딩 중 오류가 발생했습니다\"\r\n subTitle={\r\n error\r\n ? `오류 내용: ${error.message}`\r\n : '알 수 없는 오류가 발생했습니다'\r\n }\r\n extra={[\r\n <Button\r\n key=\"retry\"\r\n type=\"primary\"\r\n icon={<ReloadOutlined />}\r\n onClick={resetError}\r\n style={{ marginRight: 8 }}\r\n >\r\n 다시 시도\r\n </Button>,\r\n <Button key=\"home\" icon={<HomeOutlined />} onClick={handleGoHome}>\r\n 홈으로\r\n </Button>,\r\n ]}\r\n />\r\n {error && (\r\n <details\r\n style={{\r\n marginTop: '20px',\r\n textAlign: 'left',\r\n maxWidth: '600px',\r\n backgroundColor: '#fff',\r\n padding: '16px',\r\n borderRadius: '6px',\r\n border: '1px solid #d9d9d9',\r\n }}\r\n >\r\n <summary style={{ cursor: 'pointer', fontWeight: 'bold' }}>\r\n 오류 상세 정보\r\n </summary>\r\n <pre\r\n style={{\r\n marginTop: '8px',\r\n fontSize: '12px',\r\n color: '#666',\r\n whiteSpace: 'pre-wrap',\r\n wordBreak: 'break-word',\r\n }}\r\n >\r\n {error.stack}\r\n </pre>\r\n </details>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// 에러 경계 클래스 컴포넌트\r\nexport class ErrorBound extends Component<Props, State> {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError(error: Error): State {\r\n return { hasError: true, error };\r\n }\r\n\r\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\r\n console.error('ErrorBound caught an error:', error, errorInfo);\r\n this.setState({\r\n error,\r\n errorInfo,\r\n });\r\n }\r\n\r\n resetError = () => {\r\n this.setState({ hasError: false, error: undefined, errorInfo: undefined });\r\n };\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n if (this.props.fallback) {\r\n return this.props.fallback;\r\n }\r\n\r\n return (\r\n <div\r\n style={{\r\n padding: '40px 20px',\r\n textAlign: 'center',\r\n backgroundColor: '#fafafa',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <Result\r\n status=\"error\"\r\n title=\"컴포넌트 로딩 중 오류가 발생했습니다\"\r\n subTitle={\r\n this.state.error\r\n ? `오류 내용: ${this.state.error.message}`\r\n : '알 수 없는 오류가 발생했습니다'\r\n }\r\n extra={[\r\n <Button\r\n key=\"retry\"\r\n type=\"primary\"\r\n icon={<ReloadOutlined />}\r\n onClick={this.resetError}\r\n style={{ marginRight: 8 }}\r\n >\r\n 다시 시도\r\n </Button>,\r\n ]}\r\n />\r\n {this.state.error && (\r\n <details\r\n style={{\r\n marginTop: '20px',\r\n textAlign: 'left',\r\n maxWidth: '600px',\r\n backgroundColor: '#fff',\r\n padding: '16px',\r\n borderRadius: '6px',\r\n border: '1px solid #d9d9d9',\r\n }}\r\n >\r\n <summary style={{ cursor: 'pointer', fontWeight: 'bold' }}>\r\n 오류 상세 정보\r\n </summary>\r\n <pre\r\n style={{\r\n marginTop: '8px',\r\n fontSize: '12px',\r\n color: '#666',\r\n whiteSpace: 'pre-wrap',\r\n wordBreak: 'break-word',\r\n }}\r\n >\r\n {this.state.error.stack}\r\n </pre>\r\n </details>\r\n )}\r\n </div>\r\n );\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}\r\n\r\n// 함수형 컴포넌트용 에러 경계 훅\r\nexport const useErrorHandler = () => {\r\n const [error, setError] = React.useState<Error | null>(null);\r\n\r\n const handleError = React.useCallback((error: Error) => {\r\n console.error('useErrorHandler caught an error:', error);\r\n setError(error);\r\n }, []);\r\n\r\n const resetError = React.useCallback(() => {\r\n setError(null);\r\n }, []);\r\n\r\n return { error, handleError, resetError };\r\n};\r\n","import { useAuth } from \"@/provider/contexts/AuthContext\";\r\nimport { Spin } from \"antd\";\r\nimport React, { useEffect } from 'react';\r\n\r\nconst DOTLINE_STYLE_ID = 'bwg-dot-line-wave-v4';\r\nfunction ensureDotLineWaveStylesV4() {\r\n if (typeof document === 'undefined') return;\r\n if (document.getElementById(DOTLINE_STYLE_ID)) return;\r\n\r\n const style = document.createElement('style');\r\n style.id = DOTLINE_STYLE_ID;\r\n style.textContent = `\r\n .bwg-dotline {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--bwg-gap, 12px);\r\n height: calc(var(--bwg-size, 12px) + 2 * var(--bwg-amp, 12px));\r\n line-height: 0;\r\n }\r\n .bwg-dotline .dot {\r\n width: var(--bwg-size, 12px);\r\n height: var(--bwg-size, 12px);\r\n border-radius: 50%;\r\n background: currentColor;\r\n will-change: transform, opacity;\r\n filter: drop-shadow(0 1px 2px rgba(0,0,0,.12));\r\n animation: bwg-dotline-sine var(--bwg-speed, 780ms) linear infinite;\r\n }\r\n\r\n /* sin(θ) 근사: 0, 45, 90, 135, 180, 225, 270, 315, 360deg */\r\n @keyframes bwg-dotline-sine {\r\n 0% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n 12.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }\r\n 25% { transform: translate3d(0, calc(-1 * var(--bwg-amp, 12px)), 0) scale(1.06); opacity: 1; }\r\n 37.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }\r\n 50% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n 62.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }\r\n 75% { transform: translate3d(0, calc( 1 * var(--bwg-amp, 12px)), 0) scale(.96); opacity: .76; }\r\n 87.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }\r\n 100% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n }\r\n\r\n @media (prefers-reduced-motion: reduce) {\r\n .bwg-dotline .dot { animation: none; }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n}\r\n\r\n/* 직선 도트 파동 인디케이터 */\r\nconst DotLineSmoothIndicator: React.FC<{\r\n colors?: string[]; // 각 점 색\r\n count?: number; // 점 개수 (기본: colors 길이)\r\n size?: number; // 점 지름\r\n gap?: number; // 점 간격\r\n amp?: number; // 진폭(px)\r\n speedMs?: number; // 한 주기(ms)\r\n direction?: 'ltr' | 'rtl'; // 파동 진행 방향\r\n phase?: number; // 점 간 지연 비율(0~1) — 낮출수록 부드러움\r\n}> = ({\r\n colors = ['#DAD3FF', '#B3A6FF', '#9380FF', '#816BFA'],\r\n count,\r\n size = 12,\r\n gap = 10,\r\n amp = 16,\r\n speedMs = 900,\r\n direction = 'ltr',\r\n phase = 0.7,\r\n}) => {\r\n useEffect(() => { ensureDotLineWaveStylesV4(); }, []);\r\n\r\n const n = count ?? colors.length;\r\n const dots = Array.from({ length: n });\r\n const baseStyle = {\r\n ['--bwg-size' as any]: `${size}px`,\r\n ['--bwg-gap' as any]: `${gap}px`,\r\n ['--bwg-amp' as any]: `${amp}px`,\r\n ['--bwg-speed' as any]: `${speedMs}ms`,\r\n } as React.CSSProperties;\r\n\r\n const perDotDelay = (speedMs / n) * phase;\r\n\r\n return (\r\n <span className=\"bwg-dotline\" role=\"img\" aria-label=\"loading\" style={baseStyle}>\r\n {dots.map((_, i) => (\r\n <span\r\n key={i}\r\n className=\"dot\"\r\n style={{\r\n backgroundColor: colors[i % colors.length],\r\n animationDelay:\r\n direction === 'ltr'\r\n ? `${(i * perDotDelay)}ms`\r\n : `${((n - 1 - i) * perDotDelay)}ms`,\r\n }}\r\n />\r\n ))}\r\n </span>\r\n );\r\n};\r\n\r\n\r\n/**\r\n * 진행 중 표시\r\n * @returns ProgressOverlay\r\n */\r\nconst ProgressOverlay: React.FC<{spin?: boolean | null; text?: string }> = ({spin = null, text = '인증중...',}) => {\r\n const { busy } = useAuth();\r\n const show = (spin ?? busy);\r\n if (!show) return null;\r\n return (\r\n <div\r\n style={{\r\n position: \"fixed\",\r\n height: \"100vh\",\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n display: \"flex\",\r\n flexDirection:'column',\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n gap: 8,\r\n padding: \"8px 12px\",\r\n background: \"rgba(0,0,0,0.6)\",\r\n color: \"#fff\",\r\n zIndex: 10000,\r\n }}\r\n aria-live=\"polite\"\r\n aria-busy=\"true\"\r\n role=\"status\"\r\n >\r\n <Spin\r\n indicator={\r\n <DotLineSmoothIndicator\r\n colors={['#DAD3FF', '#B3A6FF', '#9380FF', '#816BFA']}\r\n size={12}\r\n gap={10}\r\n amp={16}\r\n speedMs={900}\r\n phase={0.75} \r\n direction=\"ltr\"\r\n />\r\n }\r\n />\r\n <span className=\"bwg-spin-txt\" style={{marginTop:\"15px\"}}>{text}</span>\r\n </div>\r\n );\r\n };\r\n\r\nexport default ProgressOverlay;","import { useAuth } from \"@/provider/contexts/AuthContext\";\r\nimport { ScreenProtectProvider } from \"@/provider/contexts/ScreenProtectContext\";\r\nimport { isLocal } from \"@/utils\";\r\nimport { ConfigProvider } from \"antd\";\r\nimport { Outlet } from \"react-router-dom\";\r\nimport ProgressOverlay from \"./ProgressOverlay\";\r\n\r\n/**\r\n * 보호 레이아웃\r\n * @returns ProtectedLayout\r\n */\r\nconst ProtectedLayout = () => {\r\n const { reauthWithPin } = useAuth();\r\n // NOTE: 인증 여부 체크는 각 페이지(/main)의 스토어 가드에 위임합니다.\r\n // 필요하다면 여기서도 RequireAuth로 감싸세요.\r\n return (\r\n <ScreenProtectProvider idleMs={30 * 60_000} onUnlock={async (pin) => {\r\n if(isLocal) {\r\n // 로컬에서는 항상 true\r\n return true;\r\n }\r\n return !!pin && (await reauthWithPin(pin));\r\n }}>\r\n {/* Ensure AntD portals mount inside protected shell if you need it */}\r\n <ConfigProvider getPopupContainer={() => document.getElementById(\"app-shell\") || document.body}>\r\n <div id=\"app-shell\">\r\n <ProgressOverlay />\r\n <Outlet />\r\n </div>\r\n </ConfigProvider>\r\n </ScreenProtectProvider>\r\n );\r\n }\r\n\r\n export default ProtectedLayout;","import { Outlet } from \"react-router-dom\";\r\nimport ProgressOverlay from \"./ProgressOverlay\";\r\n\r\n/**\r\n * 공개 레이아웃\r\n * @returns PublicLayout\r\n */\r\nconst PublicLayout = () => {\r\n return (\r\n <div>\r\n <ProgressOverlay />\r\n <Outlet />\r\n </div>\r\n );\r\n}\r\n\r\nexport default PublicLayout;","import React, { memo, Suspense } from \"react\";\r\nimport { ErrorBound } from \"./ErrorBound\";\r\n\r\nconst ViewContainer = ({\r\n isActive,\r\n instance,\r\n params,\r\n }: {\r\n isActive: boolean;\r\n instance?: React.ComponentType;\r\n params?: Record<string, any>;\r\n }) => {\r\n return <div\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n visibility: isActive ? 'visible' : 'hidden',\r\n opacity: isActive ? 1 : 0,\r\n transition: 'opacity 0.2s ease-in-out',\r\n pointerEvents: isActive ? 'auto' : 'none',\r\n }}\r\n>\r\n <ErrorBound>\r\n <Suspense \r\n fallback={null}\r\n >\r\n {instance && React.createElement(instance, { params } as any)}\r\n </Suspense>\r\n </ErrorBound>\r\n</div>;\r\n};\r\n\r\nexport default memo(ViewContainer);"],"names":["ErrorBound","Component","props","error","errorInfo","jsxs","jsx","Result","Button","ReloadOutlined","DOTLINE_STYLE_ID","ensureDotLineWaveStylesV4","style","DotLineSmoothIndicator","colors","count","size","gap","amp","speedMs","direction","phase","useEffect","n","dots","baseStyle","perDotDelay","_","i","ProgressOverlay","spin","text","busy","useAuth","Spin","ProtectedLayout","reauthWithPin","ScreenProtectProvider","pin","isLocal","ConfigProvider","Outlet","PublicLayout","ViewContainer","isActive","instance","params","Suspense","React","ViewContainer$1","memo"],"mappings":"2RAsGO,MAAMA,UAAmBC,EAAAA,SAAwB,CACtD,YAAYC,EAAc,CACxB,MAAMA,CAAK,EAgBb,KAAA,WAAa,IAAM,CACjB,KAAK,SAAS,CAAE,SAAU,GAAO,MAAO,OAAW,UAAW,OAAW,CAC3E,EAjBE,KAAK,MAAQ,CAAE,SAAU,EAAA,CAC3B,CAEA,OAAO,yBAAyBC,EAAqB,CACnD,MAAO,CAAE,SAAU,GAAM,MAAAA,CAAA,CAC3B,CAEA,kBAAkBA,EAAcC,EAAsB,CACpD,QAAQ,MAAM,8BAA+BD,EAAOC,CAAS,EAC7D,KAAK,SAAS,CACZ,MAAAD,EACA,UAAAC,CAAA,CACD,CACH,CAMA,QAAS,CACP,OAAI,KAAK,MAAM,SACT,KAAK,MAAM,SACN,KAAK,MAAM,SAIlBC,EAAAA,kBAAAA,KAAC,MAAA,CACC,MAAO,CACL,QAAS,YACT,UAAW,SACX,gBAAiB,UACjB,QAAS,OACT,cAAe,SACf,eAAgB,SAChB,WAAY,QAAA,EAGd,SAAA,CAAAC,EAAAA,kBAAAA,IAACC,EAAAA,OAAA,CACC,OAAO,QACP,MAAM,uBACN,SACE,KAAK,MAAM,MACP,UAAU,KAAK,MAAM,MAAM,OAAO,GAClC,oBAEN,MAAO,CACLD,EAAAA,kBAAAA,IAACE,EAAAA,OAAA,CAEC,KAAK,UACL,6BAAOC,EAAAA,eAAA,EAAe,EACtB,QAAS,KAAK,WACd,MAAO,CAAE,YAAa,CAAA,EACvB,SAAA,OAAA,EALK,OAAA,CAON,CACF,CAAA,EAED,KAAK,MAAM,OACVJ,EAAAA,kBAAAA,KAAC,UAAA,CACC,MAAO,CACL,UAAW,OACX,UAAW,OACX,SAAU,QACV,gBAAiB,OACjB,QAAS,OACT,aAAc,MACd,OAAQ,mBAAA,EAGV,SAAA,CAAAC,EAAAA,kBAAAA,IAAC,UAAA,CAAQ,MAAO,CAAE,OAAQ,UAAW,WAAY,MAAA,EAAU,SAAA,UAAA,CAE3D,EACAA,EAAAA,kBAAAA,IAAC,MAAA,CACC,MAAO,CACL,UAAW,MACX,SAAU,OACV,MAAO,OACP,WAAY,WACZ,UAAW,YAAA,EAGZ,SAAA,KAAK,MAAM,MAAM,KAAA,CAAA,CACpB,CAAA,CAAA,CACF,CAAA,CAAA,EAMD,KAAK,MAAM,QACpB,CACF,CChMA,MAAMI,EAAmB,uBACzB,SAASC,GAA4B,CAEnC,GADI,OAAO,SAAa,KACpB,SAAS,eAAeD,CAAgB,EAAG,OAE/C,MAAME,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,GAAKF,EACXE,EAAM,YAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAmCpB,SAAS,KAAK,YAAYA,CAAK,CACjC,CAGA,MAAMC,EASD,CAAC,CACJ,OAAAC,EAAS,CAAC,UAAW,UAAW,UAAW,SAAS,EACpD,MAAAC,EACA,KAAAC,EAAO,GACP,IAAAC,EAAM,GACN,IAAAC,EAAM,GACN,QAAAC,EAAU,IACV,UAAAC,EAAY,MACZ,MAAAC,EAAQ,EACV,IAAM,CACJC,EAAAA,UAAU,IAAM,CAAEX,EAAA,CAA6B,EAAG,CAAA,CAAE,EAEpD,MAAMY,EAAIR,GAASD,EAAO,OACpBU,EAAO,MAAM,KAAK,CAAE,OAAQD,EAAG,EAC/BE,EAAY,CACf,aAAsB,GAAGT,CAAI,KAC7B,YAAqB,GAAGC,CAAG,KAC3B,YAAqB,GAAGC,CAAG,KAC3B,cAAuB,GAAGC,CAAO,IAAA,EAG9BO,EAAeP,EAAUI,EAAKF,EAEpC,OACEf,EAAAA,kBAAAA,IAAC,OAAA,CAAK,UAAU,cAAc,KAAK,MAAM,aAAW,UAAU,MAAOmB,EAClE,SAAAD,EAAK,IAAI,CAACG,EAAGC,IACZtB,EAAAA,kBAAAA,IAAC,OAAA,CAEC,UAAU,MACV,MAAO,CACL,gBAAiBQ,EAAOc,EAAId,EAAO,MAAM,EACzC,eACEM,IAAc,MACV,GAAIQ,EAAIF,CAAY,KACpB,IAAKH,EAAI,EAAIK,GAAKF,CAAY,IAAA,CACtC,EARKE,CAAA,CAUR,EACH,CAEJ,EAOMC,EAAqE,CAAC,CAAC,KAAAC,EAAO,KAAM,KAAAC,EAAO,YAAe,CAC5G,KAAM,CAAE,KAAAC,CAAA,EAASC,UAAA,EAEnB,OADgBH,GAAQE,EAGpB3B,EAAAA,kBAAAA,KAAC,MAAA,CACC,MAAO,CACL,SAAU,QACV,OAAQ,QACR,KAAM,EACN,MAAO,EACP,IAAK,EACL,QAAS,OACT,cAAc,SACd,eAAgB,SAChB,WAAY,SACZ,IAAK,EACL,QAAS,WACT,WAAY,kBACZ,MAAO,OACP,OAAQ,GAAA,EAET,YAAU,SACX,YAAU,OACV,KAAK,SAEP,SAAA,CAAAC,EAAAA,kBAAAA,IAAC4B,EAAAA,KAAA,CACC,UACE5B,EAAAA,kBAAAA,IAACO,EAAA,CACC,OAAQ,CAAC,UAAW,UAAW,UAAW,SAAS,EACnD,KAAM,GACN,IAAK,GACL,IAAK,GACL,QAAS,IACT,MAAO,IACP,UAAU,KAAA,CAAA,CACZ,CAAA,EAGFP,EAAAA,kBAAAA,IAAC,QAAK,UAAU,eAAe,MAAO,CAAC,UAAU,MAAA,EAAU,SAAAyB,CAAA,CAAK,CAAA,CAAA,CAAA,EApCpD,IAuClB,ECzIII,EAAkB,IAAM,CAC1B,KAAM,CAAE,cAAAC,CAAA,EAAkBH,UAAA,EAG1B,+BACGI,EAAAA,sBAAA,CAAsB,OAAQ,GAAK,IAAQ,SAAU,MAAOC,GACxDC,UAEM,GAEF,CAAC,CAACD,GAAQ,MAAMF,EAAcE,CAAG,EAGxC,SAAAhC,wBAACkC,EAAAA,eAAA,CAAe,kBAAmB,IAAM,SAAS,eAAe,WAAW,GAAK,SAAS,KACxF,SAAAnC,EAAAA,kBAAAA,KAAC,MAAA,CAAI,GAAG,YACN,SAAA,CAAAC,EAAAA,kBAAAA,IAACuB,EAAA,EAAgB,0BAChBY,EAAAA,OAAA,CAAA,CAAO,CAAA,CAAA,CACV,EACF,EACF,CAEJ,ECzBIC,EAAe,6BAEd,MAAA,CACC,SAAA,CAAApC,EAAAA,kBAAAA,IAACuB,EAAA,EAAgB,0BAChBY,EAAAA,OAAA,CAAA,CAAO,CAAA,EACV,ECTAE,EAAgB,CAAC,CACnB,SAAAC,EACA,SAAAC,EACA,OAAAC,CACF,IAKaxC,EAAAA,kBAAAA,IAAC,MAAA,CACd,MAAO,CACL,SAAU,WACV,IAAK,EACL,KAAM,EACN,MAAO,OACP,OAAQ,OACR,WAAYsC,EAAW,UAAY,SACnC,QAASA,EAAW,EAAI,EACxB,WAAY,2BACZ,cAAeA,EAAW,OAAS,MAAA,EAGrC,iCAAC5C,EAAA,CACC,SAAAM,EAAAA,kBAAAA,IAACyC,EAAAA,SAAA,CACC,SAAU,KAET,YAAYC,EAAM,cAAcH,EAAU,CAAE,OAAAC,EAAe,CAAA,CAAA,CAC9D,CACF,CAAA,CAAA,EAIFG,EAAeC,EAAAA,KAAKP,CAAa"}
@@ -7,17 +7,17 @@ import { i as E } from "./envUtils-C9Gf5aek.js";
7
7
  import C, { Component as D, useEffect as F, memo as k, Suspense as S } from "react";
8
8
  import { ReloadOutlined as B } from "@ant-design/icons";
9
9
  class P extends D {
10
- constructor(t) {
11
- super(t), this.resetError = () => {
10
+ constructor(r) {
11
+ super(r), this.resetError = () => {
12
12
  this.setState({ hasError: !1, error: void 0, errorInfo: void 0 });
13
13
  }, this.state = { hasError: !1 };
14
14
  }
15
- static getDerivedStateFromError(t) {
16
- return { hasError: !0, error: t };
15
+ static getDerivedStateFromError(r) {
16
+ return { hasError: !0, error: r };
17
17
  }
18
- componentDidCatch(t, a) {
19
- console.error("ErrorBound caught an error:", t, a), this.setState({
20
- error: t,
18
+ componentDidCatch(r, a) {
19
+ console.error("ErrorBound caught an error:", r, a), this.setState({
20
+ error: r,
21
21
  errorInfo: a
22
22
  });
23
23
  }
@@ -92,10 +92,10 @@ class P extends D {
92
92
  }
93
93
  }
94
94
  const c = "bwg-dot-line-wave-v4";
95
- function T() {
95
+ function A() {
96
96
  if (typeof document > "u" || document.getElementById(c)) return;
97
- const r = document.createElement("style");
98
- r.id = c, r.textContent = `
97
+ const t = document.createElement("style");
98
+ t.id = c, t.textContent = `
99
99
  .bwg-dotline {
100
100
  display: inline-flex;
101
101
  align-items: center;
@@ -129,41 +129,41 @@ function T() {
129
129
  @media (prefers-reduced-motion: reduce) {
130
130
  .bwg-dotline .dot { animation: none; }
131
131
  }
132
- `, document.head.appendChild(r);
132
+ `, document.head.appendChild(t);
133
133
  }
134
- const A = ({
135
- colors: r = ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
136
- count: t,
134
+ const I = ({
135
+ colors: t = ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
136
+ count: r,
137
137
  size: a = 12,
138
- gap: s = 10,
138
+ gap: o = 10,
139
139
  amp: u = 16,
140
140
  speedMs: i = 900,
141
141
  direction: g = "ltr",
142
142
  phase: h = 0.7
143
143
  }) => {
144
144
  F(() => {
145
- T();
145
+ A();
146
146
  }, []);
147
- const o = t ?? r.length, x = Array.from({ length: o }), f = {
147
+ const n = r ?? t.length, x = Array.from({ length: n }), f = {
148
148
  "--bwg-size": `${a}px`,
149
- "--bwg-gap": `${s}px`,
149
+ "--bwg-gap": `${o}px`,
150
150
  "--bwg-amp": `${u}px`,
151
151
  "--bwg-speed": `${i}ms`
152
- }, l = i / o * h;
153
- return /* @__PURE__ */ e.jsx("span", { className: "bwg-dotline", role: "img", "aria-label": "loading", style: f, children: x.map(($, n) => /* @__PURE__ */ e.jsx(
152
+ }, l = i / n * h;
153
+ return /* @__PURE__ */ e.jsx("span", { className: "bwg-dotline", role: "img", "aria-label": "loading", style: f, children: x.map((z, s) => /* @__PURE__ */ e.jsx(
154
154
  "span",
155
155
  {
156
156
  className: "dot",
157
157
  style: {
158
- backgroundColor: r[n % r.length],
159
- animationDelay: g === "ltr" ? `${n * l}ms` : `${(o - 1 - n) * l}ms`
158
+ backgroundColor: t[s % t.length],
159
+ animationDelay: g === "ltr" ? `${s * l}ms` : `${(n - 1 - s) * l}ms`
160
160
  }
161
161
  },
162
- n
162
+ s
163
163
  )) });
164
- }, m = ({ spin: r = null, text: t = "인증중..." }) => {
164
+ }, m = ({ spin: t = null, text: r = "인증중..." }) => {
165
165
  const { busy: a } = d();
166
- return r ?? a ? /* @__PURE__ */ e.jsxs(
166
+ return t ?? a ? /* @__PURE__ */ e.jsxs(
167
167
  "div",
168
168
  {
169
169
  style: {
@@ -190,7 +190,7 @@ const A = ({
190
190
  v,
191
191
  {
192
192
  indicator: /* @__PURE__ */ e.jsx(
193
- A,
193
+ I,
194
194
  {
195
195
  colors: ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
196
196
  size: 12,
@@ -203,24 +203,23 @@ const A = ({
203
203
  )
204
204
  }
205
205
  ),
206
- /* @__PURE__ */ e.jsx("span", { className: "bwg-spin-txt", style: { marginTop: "15px" }, children: t })
206
+ /* @__PURE__ */ e.jsx("span", { className: "bwg-spin-txt", style: { marginTop: "15px" }, children: r })
207
207
  ]
208
208
  }
209
209
  ) : null;
210
- }, U = () => {
211
- const { reauthWithPin: r } = d();
212
- return /* @__PURE__ */ e.jsx(b, { idleMs: 30 * 6e4, onUnlock: async (t) => E ? !0 : !!t && await r(t), children: /* @__PURE__ */ e.jsx(j, { getPopupContainer: () => document.getElementById("app-shell") || document.body, children: /* @__PURE__ */ e.jsxs("div", { id: "app-shell", children: [
210
+ }, M = () => {
211
+ const { reauthWithPin: t } = d();
212
+ return /* @__PURE__ */ e.jsx(b, { idleMs: 30 * 6e4, onUnlock: async (r) => E ? !0 : !!r && await t(r), children: /* @__PURE__ */ e.jsx(j, { getPopupContainer: () => document.getElementById("app-shell") || document.body, children: /* @__PURE__ */ e.jsxs("div", { id: "app-shell", children: [
213
213
  /* @__PURE__ */ e.jsx(m, {}),
214
214
  /* @__PURE__ */ e.jsx(p, {})
215
215
  ] }) }) });
216
- }, V = () => /* @__PURE__ */ e.jsxs("div", { children: [
216
+ }, U = () => /* @__PURE__ */ e.jsxs("div", { children: [
217
217
  /* @__PURE__ */ e.jsx(m, {}),
218
218
  /* @__PURE__ */ e.jsx(p, {})
219
- ] }), I = ({
220
- tab: r,
219
+ ] }), $ = ({
221
220
  isActive: t,
222
- instance: a,
223
- params: s
221
+ instance: r,
222
+ params: a
224
223
  }) => /* @__PURE__ */ e.jsx(
225
224
  "div",
226
225
  {
@@ -239,16 +238,16 @@ const A = ({
239
238
  S,
240
239
  {
241
240
  fallback: null,
242
- children: a && C.createElement(a, { params: s })
241
+ children: r && C.createElement(r, { params: a })
243
242
  }
244
243
  ) })
245
244
  }
246
- ), Y = k(I);
245
+ ), Y = k($);
247
246
  export {
248
247
  P as E,
249
248
  m as P,
250
- Y as T,
251
- U as a,
252
- V as b
249
+ Y as V,
250
+ M as a,
251
+ U as b
253
252
  };
254
- //# sourceMappingURL=TabContainer-B7-6AQXV.js.map
253
+ //# sourceMappingURL=ViewContainer-v1V83KBq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewContainer-v1V83KBq.js","sources":["../../src/components/layout/ErrorBound.tsx","../../src/components/layout/ProgressOverlay.tsx","../../src/components/layout/ProtectLayout.tsx","../../src/components/layout/PublicLayout.tsx","../../src/components/layout/ViewContainer.tsx"],"sourcesContent":["import React, { Component, ErrorInfo, ReactNode } from 'react';\r\nimport { Result, Button } from 'antd';\r\nimport { ReloadOutlined, HomeOutlined } from '@ant-design/icons';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\ninterface Props {\r\n children: ReactNode;\r\n fallback?: ReactNode;\r\n}\r\n\r\ninterface State {\r\n hasError: boolean;\r\n error?: Error;\r\n errorInfo?: ErrorInfo;\r\n}\r\n\r\n// 에러 페이지 컴포넌트\r\nexport const ErrorPage: React.FC<{\r\n error?: Error;\r\n resetError?: () => void;\r\n onGoHome?: () => void;\r\n}> = ({ error, resetError, onGoHome }) => {\r\n const navigate = useNavigate();\r\n\r\n const handleGoHome = () => {\r\n if (onGoHome) {\r\n onGoHome();\r\n } else {\r\n // 기본 홈 이동 로직\r\n navigate('/');\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n style={{\r\n padding: '40px 20px',\r\n textAlign: 'center',\r\n backgroundColor: '#fafafa',\r\n minHeight: '400px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <Result\r\n status=\"error\"\r\n title=\"컴포넌트 로딩 중 오류가 발생했습니다\"\r\n subTitle={\r\n error\r\n ? `오류 내용: ${error.message}`\r\n : '알 수 없는 오류가 발생했습니다'\r\n }\r\n extra={[\r\n <Button\r\n key=\"retry\"\r\n type=\"primary\"\r\n icon={<ReloadOutlined />}\r\n onClick={resetError}\r\n style={{ marginRight: 8 }}\r\n >\r\n 다시 시도\r\n </Button>,\r\n <Button key=\"home\" icon={<HomeOutlined />} onClick={handleGoHome}>\r\n 홈으로\r\n </Button>,\r\n ]}\r\n />\r\n {error && (\r\n <details\r\n style={{\r\n marginTop: '20px',\r\n textAlign: 'left',\r\n maxWidth: '600px',\r\n backgroundColor: '#fff',\r\n padding: '16px',\r\n borderRadius: '6px',\r\n border: '1px solid #d9d9d9',\r\n }}\r\n >\r\n <summary style={{ cursor: 'pointer', fontWeight: 'bold' }}>\r\n 오류 상세 정보\r\n </summary>\r\n <pre\r\n style={{\r\n marginTop: '8px',\r\n fontSize: '12px',\r\n color: '#666',\r\n whiteSpace: 'pre-wrap',\r\n wordBreak: 'break-word',\r\n }}\r\n >\r\n {error.stack}\r\n </pre>\r\n </details>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// 에러 경계 클래스 컴포넌트\r\nexport class ErrorBound extends Component<Props, State> {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError(error: Error): State {\r\n return { hasError: true, error };\r\n }\r\n\r\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\r\n console.error('ErrorBound caught an error:', error, errorInfo);\r\n this.setState({\r\n error,\r\n errorInfo,\r\n });\r\n }\r\n\r\n resetError = () => {\r\n this.setState({ hasError: false, error: undefined, errorInfo: undefined });\r\n };\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n if (this.props.fallback) {\r\n return this.props.fallback;\r\n }\r\n\r\n return (\r\n <div\r\n style={{\r\n padding: '40px 20px',\r\n textAlign: 'center',\r\n backgroundColor: '#fafafa',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <Result\r\n status=\"error\"\r\n title=\"컴포넌트 로딩 중 오류가 발생했습니다\"\r\n subTitle={\r\n this.state.error\r\n ? `오류 내용: ${this.state.error.message}`\r\n : '알 수 없는 오류가 발생했습니다'\r\n }\r\n extra={[\r\n <Button\r\n key=\"retry\"\r\n type=\"primary\"\r\n icon={<ReloadOutlined />}\r\n onClick={this.resetError}\r\n style={{ marginRight: 8 }}\r\n >\r\n 다시 시도\r\n </Button>,\r\n ]}\r\n />\r\n {this.state.error && (\r\n <details\r\n style={{\r\n marginTop: '20px',\r\n textAlign: 'left',\r\n maxWidth: '600px',\r\n backgroundColor: '#fff',\r\n padding: '16px',\r\n borderRadius: '6px',\r\n border: '1px solid #d9d9d9',\r\n }}\r\n >\r\n <summary style={{ cursor: 'pointer', fontWeight: 'bold' }}>\r\n 오류 상세 정보\r\n </summary>\r\n <pre\r\n style={{\r\n marginTop: '8px',\r\n fontSize: '12px',\r\n color: '#666',\r\n whiteSpace: 'pre-wrap',\r\n wordBreak: 'break-word',\r\n }}\r\n >\r\n {this.state.error.stack}\r\n </pre>\r\n </details>\r\n )}\r\n </div>\r\n );\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}\r\n\r\n// 함수형 컴포넌트용 에러 경계 훅\r\nexport const useErrorHandler = () => {\r\n const [error, setError] = React.useState<Error | null>(null);\r\n\r\n const handleError = React.useCallback((error: Error) => {\r\n console.error('useErrorHandler caught an error:', error);\r\n setError(error);\r\n }, []);\r\n\r\n const resetError = React.useCallback(() => {\r\n setError(null);\r\n }, []);\r\n\r\n return { error, handleError, resetError };\r\n};\r\n","import { useAuth } from \"@/provider/contexts/AuthContext\";\r\nimport { Spin } from \"antd\";\r\nimport React, { useEffect } from 'react';\r\n\r\nconst DOTLINE_STYLE_ID = 'bwg-dot-line-wave-v4';\r\nfunction ensureDotLineWaveStylesV4() {\r\n if (typeof document === 'undefined') return;\r\n if (document.getElementById(DOTLINE_STYLE_ID)) return;\r\n\r\n const style = document.createElement('style');\r\n style.id = DOTLINE_STYLE_ID;\r\n style.textContent = `\r\n .bwg-dotline {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--bwg-gap, 12px);\r\n height: calc(var(--bwg-size, 12px) + 2 * var(--bwg-amp, 12px));\r\n line-height: 0;\r\n }\r\n .bwg-dotline .dot {\r\n width: var(--bwg-size, 12px);\r\n height: var(--bwg-size, 12px);\r\n border-radius: 50%;\r\n background: currentColor;\r\n will-change: transform, opacity;\r\n filter: drop-shadow(0 1px 2px rgba(0,0,0,.12));\r\n animation: bwg-dotline-sine var(--bwg-speed, 780ms) linear infinite;\r\n }\r\n\r\n /* sin(θ) 근사: 0, 45, 90, 135, 180, 225, 270, 315, 360deg */\r\n @keyframes bwg-dotline-sine {\r\n 0% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n 12.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }\r\n 25% { transform: translate3d(0, calc(-1 * var(--bwg-amp, 12px)), 0) scale(1.06); opacity: 1; }\r\n 37.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }\r\n 50% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n 62.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }\r\n 75% { transform: translate3d(0, calc( 1 * var(--bwg-amp, 12px)), 0) scale(.96); opacity: .76; }\r\n 87.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }\r\n 100% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n }\r\n\r\n @media (prefers-reduced-motion: reduce) {\r\n .bwg-dotline .dot { animation: none; }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n}\r\n\r\n/* 직선 도트 파동 인디케이터 */\r\nconst DotLineSmoothIndicator: React.FC<{\r\n colors?: string[]; // 각 점 색\r\n count?: number; // 점 개수 (기본: colors 길이)\r\n size?: number; // 점 지름\r\n gap?: number; // 점 간격\r\n amp?: number; // 진폭(px)\r\n speedMs?: number; // 한 주기(ms)\r\n direction?: 'ltr' | 'rtl'; // 파동 진행 방향\r\n phase?: number; // 점 간 지연 비율(0~1) — 낮출수록 부드러움\r\n}> = ({\r\n colors = ['#DAD3FF', '#B3A6FF', '#9380FF', '#816BFA'],\r\n count,\r\n size = 12,\r\n gap = 10,\r\n amp = 16,\r\n speedMs = 900,\r\n direction = 'ltr',\r\n phase = 0.7,\r\n}) => {\r\n useEffect(() => { ensureDotLineWaveStylesV4(); }, []);\r\n\r\n const n = count ?? colors.length;\r\n const dots = Array.from({ length: n });\r\n const baseStyle = {\r\n ['--bwg-size' as any]: `${size}px`,\r\n ['--bwg-gap' as any]: `${gap}px`,\r\n ['--bwg-amp' as any]: `${amp}px`,\r\n ['--bwg-speed' as any]: `${speedMs}ms`,\r\n } as React.CSSProperties;\r\n\r\n const perDotDelay = (speedMs / n) * phase;\r\n\r\n return (\r\n <span className=\"bwg-dotline\" role=\"img\" aria-label=\"loading\" style={baseStyle}>\r\n {dots.map((_, i) => (\r\n <span\r\n key={i}\r\n className=\"dot\"\r\n style={{\r\n backgroundColor: colors[i % colors.length],\r\n animationDelay:\r\n direction === 'ltr'\r\n ? `${(i * perDotDelay)}ms`\r\n : `${((n - 1 - i) * perDotDelay)}ms`,\r\n }}\r\n />\r\n ))}\r\n </span>\r\n );\r\n};\r\n\r\n\r\n/**\r\n * 진행 중 표시\r\n * @returns ProgressOverlay\r\n */\r\nconst ProgressOverlay: React.FC<{spin?: boolean | null; text?: string }> = ({spin = null, text = '인증중...',}) => {\r\n const { busy } = useAuth();\r\n const show = (spin ?? busy);\r\n if (!show) return null;\r\n return (\r\n <div\r\n style={{\r\n position: \"fixed\",\r\n height: \"100vh\",\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n display: \"flex\",\r\n flexDirection:'column',\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n gap: 8,\r\n padding: \"8px 12px\",\r\n background: \"rgba(0,0,0,0.6)\",\r\n color: \"#fff\",\r\n zIndex: 10000,\r\n }}\r\n aria-live=\"polite\"\r\n aria-busy=\"true\"\r\n role=\"status\"\r\n >\r\n <Spin\r\n indicator={\r\n <DotLineSmoothIndicator\r\n colors={['#DAD3FF', '#B3A6FF', '#9380FF', '#816BFA']}\r\n size={12}\r\n gap={10}\r\n amp={16}\r\n speedMs={900}\r\n phase={0.75} \r\n direction=\"ltr\"\r\n />\r\n }\r\n />\r\n <span className=\"bwg-spin-txt\" style={{marginTop:\"15px\"}}>{text}</span>\r\n </div>\r\n );\r\n };\r\n\r\nexport default ProgressOverlay;","import { useAuth } from \"@/provider/contexts/AuthContext\";\r\nimport { ScreenProtectProvider } from \"@/provider/contexts/ScreenProtectContext\";\r\nimport { isLocal } from \"@/utils\";\r\nimport { ConfigProvider } from \"antd\";\r\nimport { Outlet } from \"react-router-dom\";\r\nimport ProgressOverlay from \"./ProgressOverlay\";\r\n\r\n/**\r\n * 보호 레이아웃\r\n * @returns ProtectedLayout\r\n */\r\nconst ProtectedLayout = () => {\r\n const { reauthWithPin } = useAuth();\r\n // NOTE: 인증 여부 체크는 각 페이지(/main)의 스토어 가드에 위임합니다.\r\n // 필요하다면 여기서도 RequireAuth로 감싸세요.\r\n return (\r\n <ScreenProtectProvider idleMs={30 * 60_000} onUnlock={async (pin) => {\r\n if(isLocal) {\r\n // 로컬에서는 항상 true\r\n return true;\r\n }\r\n return !!pin && (await reauthWithPin(pin));\r\n }}>\r\n {/* Ensure AntD portals mount inside protected shell if you need it */}\r\n <ConfigProvider getPopupContainer={() => document.getElementById(\"app-shell\") || document.body}>\r\n <div id=\"app-shell\">\r\n <ProgressOverlay />\r\n <Outlet />\r\n </div>\r\n </ConfigProvider>\r\n </ScreenProtectProvider>\r\n );\r\n }\r\n\r\n export default ProtectedLayout;","import { Outlet } from \"react-router-dom\";\r\nimport ProgressOverlay from \"./ProgressOverlay\";\r\n\r\n/**\r\n * 공개 레이아웃\r\n * @returns PublicLayout\r\n */\r\nconst PublicLayout = () => {\r\n return (\r\n <div>\r\n <ProgressOverlay />\r\n <Outlet />\r\n </div>\r\n );\r\n}\r\n\r\nexport default PublicLayout;","import React, { memo, Suspense } from \"react\";\r\nimport { ErrorBound } from \"./ErrorBound\";\r\n\r\nconst ViewContainer = ({\r\n isActive,\r\n instance,\r\n params,\r\n }: {\r\n isActive: boolean;\r\n instance?: React.ComponentType;\r\n params?: Record<string, any>;\r\n }) => {\r\n return <div\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n visibility: isActive ? 'visible' : 'hidden',\r\n opacity: isActive ? 1 : 0,\r\n transition: 'opacity 0.2s ease-in-out',\r\n pointerEvents: isActive ? 'auto' : 'none',\r\n }}\r\n>\r\n <ErrorBound>\r\n <Suspense \r\n fallback={null}\r\n >\r\n {instance && React.createElement(instance, { params } as any)}\r\n </Suspense>\r\n </ErrorBound>\r\n</div>;\r\n};\r\n\r\nexport default memo(ViewContainer);"],"names":["ErrorBound","Component","props","error","errorInfo","jsxs","jsx","Result","Button","ReloadOutlined","DOTLINE_STYLE_ID","ensureDotLineWaveStylesV4","style","DotLineSmoothIndicator","colors","count","size","gap","amp","speedMs","direction","phase","useEffect","dots","baseStyle","perDotDelay","_","i","ProgressOverlay","spin","text","busy","useAuth","Spin","ProtectedLayout","reauthWithPin","ScreenProtectProvider","pin","isLocal","ConfigProvider","Outlet","PublicLayout","ViewContainer","isActive","instance","params","Suspense","React","ViewContainer$1","memo"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/SSOHandler-rq0OGrpX.cjs"),r=require("../../chunks/BwgSpace-b0hmM1Ht.cjs"),o=require("../../chunks/realFormat-Cha7OTd9.cjs");exports.BWgRow=e.BwgRow;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.EditorBoxRef;exports.BwgGrid=e.BwgGrid;exports.BwgInfoArea=e.BwgInfoArea;exports.BwgPopup=e.BwgPopup;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.BwgSpace=r.BwgSpace;exports.realFormat=o.realFormat;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/SSOHandler-rq0OGrpX.cjs"),r=require("../../chunks/BwgSpace-b0hmM1Ht.cjs"),o=require("../../chunks/realFormat-Cha7OTd9.cjs");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.EditorBoxRef;exports.BwgGrid=e.BwgGrid;exports.BwgInfoArea=e.BwgInfoArea;exports.BwgPopup=e.BwgPopup;exports.BwgRow=e.BwgRow;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.BwgSpace=r.BwgSpace;exports.realFormat=o.realFormat;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -8,7 +8,7 @@ export { default as BwgEditor } from './BwgEditor';
8
8
  export { default as BwgGrid } from './BwgGrid';
9
9
  export { default as BwgInfoArea } from './BwgInfoArea';
10
10
  export { default as BwgPopup } from './BwgPopup';
11
- export { default as BWgRow } from './BwgRow';
11
+ export { default as BwgRow } from './BwgRow';
12
12
  export { default as BwgSpace } from './BwgSpace';
13
13
  export { default as BwgTable } from './BwgTable';
14
14
  export { default as BwgTabs } from './BwgTabs';
@@ -1,18 +1,18 @@
1
- import { i as r, B as o, a as s, b as B, c as g, d as w, e as t, E as i, f as n, g as l, h as p, j as d, k as f, l as C, m as c, C as m, n as x, G as S, Q as u, o as G, S as b, p as T } from "../../chunks/SSOHandler-CZHPiuEh.js";
1
+ import { B as r, a as o, b as s, c as B, d as g, e as w, E as t, f as i, g as n, h as l, i as p, j as d, k as f, l as C, m as c, C as m, n as x, G as S, Q as u, o as G, S as b, p as T } from "../../chunks/SSOHandler-CZHPiuEh.js";
2
2
  import { B as P } from "../../chunks/BwgSpace-CnLM4qcg.js";
3
3
  import { r as k } from "../../chunks/realFormat-DRGLFabQ.js";
4
4
  export {
5
- r as BWgRow,
6
- o as BwgButtonGroup,
7
- s as BwgCmptArea,
8
- B as BwgCol,
9
- g as BwgConfigProvider,
10
- w as BwgDetail,
11
- t as BwgDrawer,
12
- i as BwgEditor,
13
- n as BwgGrid,
14
- l as BwgInfoArea,
15
- p as BwgPopup,
5
+ r as BwgButtonGroup,
6
+ o as BwgCmptArea,
7
+ s as BwgCol,
8
+ B as BwgConfigProvider,
9
+ g as BwgDetail,
10
+ w as BwgDrawer,
11
+ t as BwgEditor,
12
+ i as BwgGrid,
13
+ n as BwgInfoArea,
14
+ l as BwgPopup,
15
+ p as BwgRow,
16
16
  P as BwgSpace,
17
17
  d as BwgTable,
18
18
  f as BwgTabs,
@@ -0,0 +1,8 @@
1
+ export declare const PrivateProtectedOverlay: React.FC<{
2
+ isActive: boolean;
3
+ flagged: boolean;
4
+ tabKey: string;
5
+ onUnlock: () => void;
6
+ children: React.ReactNode;
7
+ }>;
8
+ //# sourceMappingURL=PrivateProtectedOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrivateProtectedOverlay.d.ts","sourceRoot":"","sources":["../../../src/components/layout/PrivateProtectedOverlay.tsx"],"names":[],"mappings":"AAgCA,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAkCA,CAAC"}
@@ -1,9 +1,8 @@
1
1
  import { default as React } from 'react';
2
- declare const _default: React.MemoExoticComponent<({ tab, isActive, instance, params, }: {
3
- tab: any;
2
+ declare const _default: React.MemoExoticComponent<({ isActive, instance, params, }: {
4
3
  isActive: boolean;
5
4
  instance?: React.ComponentType;
6
5
  params?: Record<string, any>;
7
6
  }) => import("react/jsx-runtime").JSX.Element>;
8
7
  export default _default;
9
- //# sourceMappingURL=TabContainer.d.ts.map
8
+ //# sourceMappingURL=ViewContainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewContainer.d.ts","sourceRoot":"","sources":["../../../src/components/layout/ViewContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyB,MAAM,OAAO,CAAC;oFAOzC;IACD,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAwBH,wBAAmC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../chunks/TabContainer-Dx2PVShz.cjs"),e=require("../../chunks/LoadingOverlay-NX9Mo_6n.cjs");exports.ErrorBound=r.ErrorBound;exports.ProgressOverlay=r.ProgressOverlay;exports.ProtectedLayout=r.ProtectedLayout;exports.PublicLayout=r.PublicLayout;exports.TabContainer=r.TabContainer;exports.LoadingOverlay=e.LoadingOverlay;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/ViewContainer-DQl7Mb0U.cjs"),r=require("../../chunks/LoadingOverlay-NX9Mo_6n.cjs");exports.ErrorBound=e.ErrorBound;exports.ProgressOverlay=e.ProgressOverlay;exports.ProtectedLayout=e.ProtectedLayout;exports.PublicLayout=e.PublicLayout;exports.ViewContainer=e.ViewContainer;exports.LoadingOverlay=r.LoadingOverlay;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -3,5 +3,5 @@ export { default as LoadingOverlay } from './LoadingOverlay';
3
3
  export { default as ProgressOverlay } from './ProgressOverlay';
4
4
  export { default as ProtectedLayout } from './ProtectLayout';
5
5
  export { default as PublicLayout } from './PublicLayout';
6
- export { default as TabContainer } from './TabContainer';
6
+ export { default as ViewContainer } from './ViewContainer';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,11 +1,11 @@
1
- import { E as o, P as e, a as s, b as t, T as n } from "../../chunks/TabContainer-B7-6AQXV.js";
2
- import { L as y } from "../../chunks/LoadingOverlay-CAO6_FuF.js";
1
+ import { E as o, P as e, a as s, b as t, V as i } from "../../chunks/ViewContainer-v1V83KBq.js";
2
+ import { L as u } from "../../chunks/LoadingOverlay-CAO6_FuF.js";
3
3
  export {
4
4
  o as ErrorBound,
5
- y as LoadingOverlay,
5
+ u as LoadingOverlay,
6
6
  e as ProgressOverlay,
7
7
  s as ProtectedLayout,
8
8
  t as PublicLayout,
9
- n as TabContainer
9
+ i as ViewContainer
10
10
  };
11
11
  //# sourceMappingURL=index.js.map
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./stores/index.cjs"),t=require("./chunks/SSOHandler-rq0OGrpX.cjs"),m=require("./chunks/BwgSpace-b0hmM1Ht.cjs"),p=require("./chunks/realFormat-Cha7OTd9.cjs"),a=require("./chunks/BwgLargeUploader-CgrJUwFW.cjs"),S=require("./chunks/LoadingOverlay-NX9Mo_6n.cjs"),g=require("./chunks/TabContainer-Dx2PVShz.cjs"),e=require("./chunks/commonUtils-BH6QwGUb.cjs"),r=require("./chunks/apiUtils-Cbg6NQLv.cjs"),o=require("./chunks/FileUtils-D73GVmB8.cjs"),l=require("./chunks/envUtils-CduTHoHu.cjs"),u=require("./chunks/codeStore-BGLhSpAM.cjs"),C=require("./chunks/popupStore-DnWLaQ70.cjs"),w=require("./chunks/favoriteStore-3YceyayF.cjs"),c=require("./chunks/AuthContext-CXng9fj0.cjs"),s=require("./chunks/usePopup-C8FrbrDD.cjs"),d=require("./chunks/ScreenProtectContext-CVuXrJm6.cjs"),i=require("./chunks/SearchBoxContext-Cpr9xa1S.cjs");exports.useCode=n.useCode;exports.useFavorite=n.useFavorite;exports.useMenuModel=n.useMenuModel;exports.useMenuView=n.useMenuView;exports.usePopupState=n.usePopupState;exports.useUser=n.useUser;exports.BWgRow=t.BwgRow;exports.BwgButtonGroup=t.BwgButtonGroup;exports.BwgCmptArea=t.BwgCmptArea;exports.BwgCol=t.BwgCol;exports.BwgConfigProvider=t.BwgConfigProvider;exports.BwgDetail=t.BwgDetail;exports.BwgDrawer=t.BwgDrawer;exports.BwgEditor=t.EditorBoxRef;exports.BwgGrid=t.BwgGrid;exports.BwgInfoArea=t.BwgInfoArea;exports.BwgPopup=t.BwgPopup;exports.BwgTable=t.BwgTable;exports.BwgTabs=t.BwgTabs;exports.BwgTitleBox=t.BwgTitleBox;exports.BwgView=t.BwgView;exports.ContentBox=t.ContentBox;exports.ContentLayOut=t.ContentLayOut;exports.GlobalConfigProvider=t.GlobalConfigProvider;exports.QuickServiceToggle=t.QuickServiceToggle;exports.SSOHandler=t.SSOHandler;exports.SearchBox=t.SearchBox;exports.createBwgGridRenderer=t.createBwgGridRenderer;exports.BwgSpace=m.BwgSpace;exports.realFormat=p.realFormat;exports.BwgButton=a.BwgButton;exports.BwgCheck=a.BwgCheck;exports.BwgCheckList=a.BwgCheckList;exports.BwgDatePicker=a.BwgDatePicker;exports.BwgForm=a.BwgForm;exports.BwgFormItem=a.BwgFormItem;exports.BwgInput=a.BwgInput;exports.BwgLargeUploader=a.BwgLargeUploader;exports.BwgMaskedInput=a.BwgMaskedInput;exports.BwgMaskedPicker=a.BwgMaskedPicker;exports.BwgMultiSelect=a.BwgMultiSelect;exports.BwgNumber=a.BwgNumber;exports.BwgRadio=a.BwgRadio;exports.BwgRangePicker=a.BwgRangePicker;exports.BwgSearch=a.BwgSearch;exports.BwgSelect=a.BwgSelect;exports.BwgTextArea=a.BwgTextArea;exports.BwgUploader=a.BwgUploader;exports.LoadingOverlay=S.LoadingOverlay;exports.ErrorBound=g.ErrorBound;exports.ProgressOverlay=g.ProgressOverlay;exports.ProtectedLayout=g.ProtectedLayout;exports.PublicLayout=g.PublicLayout;exports.TabContainer=g.TabContainer;exports.average=e.average;exports.calculateAge=e.calculateAge;exports.chunk=e.chunk;exports.clamp=e.clamp;exports.clearLocalStorage=e.clearLocalStorage;exports.clearSessionStorage=e.clearSessionStorage;exports.copyToClipboard=e.copyToClipboard;exports.count=e.count;exports.debounce=e.debounce;exports.deepClone=e.deepClone;exports.delay=e.delay;exports.difference=e.difference;exports.downloadFile=e.downloadFile;exports.duplicates=e.duplicates;exports.entries=e.entries;exports.find=e.find;exports.findLast=e.findLast;exports.flattenArray=e.flattenArray;exports.flattenDeep=e.flattenDeep;exports.formatDate=e.formatDate;exports.formatDateKST=e.formatDateKST;exports.formatDateKorean=e.formatDateKorean;exports.formatDateTimeKorean=e.formatDateTimeKorean;exports.formatTimeKorean=e.formatTimeKorean;exports.generateRandomColor=e.generateRandomColor;exports.getAllKeys=e.getAllKeys;exports.getCurrentDate=e.getCurrentDate;exports.getCurrentDateString=e.getCurrentDateString;exports.getDateDiff=e.getDateDiff;exports.getDateRange=e.getDateRange;exports.getDateRangeForPicker=e.getDateRangeForPicker;exports.getDeviceType=e.getDeviceType;exports.getLocalStorage=e.getLocalStorage;exports.getMonthEnd=e.getMonthEnd;exports.getMonthStart=e.getMonthStart;exports.getRelativeTime=e.getRelativeTime;exports.getSessionStorage=e.getSessionStorage;exports.getWeekEnd=e.getWeekEnd;exports.getWeekStart=e.getWeekStart;exports.groupBy=e.groupBy;exports.has=e.has;exports.includes=e.includes;exports.intersection=e.intersection;exports.isArray=e.isArray;exports.isBoolean=e.isBoolean;exports.isDesktop=e.isDesktop;exports.isEqual=e.isEqual;exports.isFunction=e.isFunction;exports.isInViewport=e.isInViewport;exports.isMobile=e.isMobile;exports.isNull=e.isNull;exports.isNullOrUndefined=e.isNullOrUndefined;exports.isNumber=e.isNumber;exports.isObject=e.isObject;exports.isString=e.isString;exports.isTablet=e.isTablet;exports.isThisMonth=e.isThisMonth;exports.isThisWeek=e.isThisWeek;exports.isToday=e.isToday;exports.isUndefined=e.isUndefined;exports.isValidDate=e.isValidDate;exports.keys=e.keys;exports.lastIndexOf=e.lastIndexOf;exports.map=e.map;exports.max=e.max;exports.merge=e.merge;exports.min=e.min;exports.omit=e.omit;exports.pick=e.pick;exports.random=e.random;exports.randomChoice=e.randomChoice;exports.randomFromArray=e.randomFromArray;exports.randomInt=e.randomInt;exports.randomMultiple=e.randomMultiple;exports.range=e.range;exports.remove=e.remove;exports.removeAt=e.removeAt;exports.removeEmptyStrings=e.removeEmptyStrings;exports.removeLocalStorage=e.removeLocalStorage;exports.removeNullValues=e.removeNullValues;exports.removeSessionStorage=e.removeSessionStorage;exports.removeWhere=e.removeWhere;exports.round=e.round;exports.scrollToElement=e.scrollToElement;exports.scrollToTop=e.scrollToTop;exports.set=e.set;exports.setLocalStorage=e.setLocalStorage;exports.setSessionStorage=e.setSessionStorage;exports.shuffle=e.shuffle;exports.size=e.size;exports.sortBy=e.sortBy;exports.sortNumbers=e.sortNumbers;exports.sum=e.sum;exports.throttle=e.throttle;exports.union=e.union;exports.unique=e.unique;exports.uniqueBy=e.uniqueBy;exports.values=e.values;exports.apiDelete=r.apiDelete;exports.apiGet=r.apiGet;exports.apiPatch=r.apiPatch;exports.apiPost=r.apiPost;exports.apiPut=r.apiPut;exports.base64Decode=r.base64Decode;exports.base64Encode=r.base64Encode;exports.br2nl=r.br2nl;exports.bxmDecrypt=r.bxmDecrypt;exports.bxmEncrypt=r.bxmEncrypt;exports.callService=r.callService;exports.capitalize=r.capitalize;exports.capitalizeWords=r.capitalizeWords;exports.center=r.center;exports.closeNotification=r.closeNotification;exports.countChar=r.countChar;exports.countWords=r.countWords;exports.destroyNotifications=r.destroyNotifications;exports.encryptSha256=r.encryptSha256;exports.extractNumbers=r.extractNumbers;exports.findPattern=r.findPattern;exports.formatPhoneNumber=r.formatPhoneNumber;exports.generateAlphanumericUID=r.generateAlphanumericUID;exports.generateCustomUID=r.generateCustomUID;exports.generateGUID=r.generateGUID;exports.generateGUIDWithoutHyphens=r.generateGUIDWithoutHyphens;exports.generateLongUID=r.generateLongUID;exports.generateNumericUID=r.generateNumericUID;exports.generateRandomString=r.generateRandomString;exports.generateShortUID=r.generateShortUID;exports.generateTimestampUID=r.generateTimestampUID;exports.generateUID=r.generateUID;exports.getAllServiceCodes=r.getAllServiceCodes;exports.getClientIp=r.getClientIp;exports.getCrprCd=r.getCrprCd;exports.getDepartmentInfo=r.getDepartmentInfo;exports.getDisplayName=r.getDisplayName;exports.getDprtCd=r.getDprtCd;exports.getDprtNm=r.getDprtNm;exports.getEmplNo=r.getEmplNo;exports.getGuid=r.getGuid;exports.getRoleList=r.getRoleList;exports.getServiceCode=r.getServiceCode;exports.getUserDvsn=r.getUserDvsn;exports.getUserId=r.getUserId;exports.getUserInfo=r.getUserInfo;exports.getUserNm=r.getUserNm;exports.hasAllRoles=r.hasAllRoles;exports.hasAnyRole=r.hasAnyRole;exports.hasRole=r.hasRole;exports.hasUserInfo=r.hasUserInfo;exports.isEmpty=r.isEmpty;exports.isLoggedIn=r.isLoggedIn;exports.isSafeEmpty=r.isSafeEmpty;exports.isValidEmail=r.isValidEmail;exports.isValidUrl=r.isValidUrl;exports.md5Hash=r.md5Hash;exports.nl2br=r.nl2br;exports.notificationService=r.notificationService;exports.padLeft=r.padLeft;exports.padRight=r.padRight;exports.removeHtmlTags=r.removeHtmlTags;exports.removeSpecialChars=r.removeSpecialChars;exports.reverse=r.reverse;exports.setClientIp=r.setClientIp;exports.setServiceCodeOverrides=r.setServiceCodeOverrides;exports.sha256Hash=r.sha256Hash;exports.showError=r.showError;exports.showInfo=r.showInfo;exports.showSuccess=r.showSuccess;exports.showWarning=r.showWarning;exports.simpleDecrypt=r.simpleDecrypt;exports.simpleEncrypt=r.simpleEncrypt;exports.toCamelCase=r.toCamelCase;exports.toKebabCase=r.toKebabCase;exports.toSnakeCase=r.toSnakeCase;exports.truncate=r.truncate;exports.useLoadingStore=r.useLoadingStore;exports.useMenuModelStore=r.useMenuModelStore;exports.useMenuViewStore=r.useMenuViewStore;exports.useUserStore=r.useUserStore;exports.verifyClientIp=r.verifyClientIp;exports.THEME_COOKIE_NAME=o.THEME_COOKIE_NAME;exports.closeAllMessages=o.closeAllMessages;exports.closeMessage=o.closeMessage;exports.convertImageFormat=o.convertImageFormat;exports.deleteCookie=o.deleteCookie;exports.downloadByFileKey=o.downloadByFileKey;exports.generateSrcSet=o.generateSrcSet;exports.getAvatarImage=o.getAvatarImage;exports.getBackgroundImage=o.getBackgroundImage;exports.getCookie=o.getCookie;exports.getDefaultBackgroundImage=o.getDefaultBackgroundImage;exports.getIconImage=o.getIconImage;exports.getLogoImage=o.getLogoImage;exports.getOptimizedImageUrl=o.getOptimizedImageUrl;exports.handleImageError=o.handleImageError;exports.preloadImage=o.preloadImage;exports.resizeImage=o.resizeImage;exports.setCookie=o.setCookie;exports.showApiError=o.showApiError;exports.showDuplicateError=o.showDuplicateError;exports.showLoading=o.showLoading;exports.showRequiredError=o.showRequiredError;exports.showSaveError=o.showSaveError;exports.showSaveSuccess=o.showSaveSuccess;exports.useImageLoader=o.useImageLoader;exports.getEnvCode=l.getEnvCode;exports.isDev=l.isDev;exports.isLocal=l.isLocal;exports.isProd=l.isProd;exports.useCodeStore=u.useCodeStore;exports.useColorStore=u.useColorStore;exports.useOptionStore=u.useOptionStore;exports.usePopupStore=C.usePopupStore;exports.useFavoriteStore=w.useFavoriteStore;exports.AuthProvider=c.AuthProvider;exports.useAuth=c.useAuth;exports.CommonCodeProvider=s.CommonCodeProvider;exports.UtilsProvider=s.UtilsProvider;exports.useApiUtils=s.useApiUtils;exports.useArrayUtils=s.useArrayUtils;exports.useCodeColor=s.useCodeColor;exports.useCodeList=s.useCodeList;exports.useCodeListByOption=s.useCodeListByOption;exports.useCodeName=s.useCodeName;exports.useCommonCode=s.useCommonCode;exports.useCommonUtils=s.useCommonUtils;exports.useDateUtils=s.useDateUtils;exports.useGridLookup=s.useGridLookup;exports.usePopup=s.usePopup;exports.usePopupContext=s.usePopupContext;exports.useStringUtils=s.useStringUtils;exports.useUtils=s.useUtils;exports.ScreenProtectProvider=d.ScreenProtectProvider;exports.useLock=d.useLock;exports.SearchBoxProvider=i.SearchBoxProvider;exports.ServiceCodeProvider=i.ServiceCodeProvider;exports.useAllServiceCodes=i.useAllServiceCodes;exports.useLogServiceCodeConfig=i.useLogServiceCodeConfig;exports.useSearchBox=i.useSearchBox;exports.useServiceCode=i.useServiceCode;exports.useServiceCodeValue=i.useServiceCodeValue;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./stores/index.cjs"),t=require("./chunks/SSOHandler-rq0OGrpX.cjs"),m=require("./chunks/BwgSpace-b0hmM1Ht.cjs"),p=require("./chunks/realFormat-Cha7OTd9.cjs"),a=require("./chunks/BwgLargeUploader-CgrJUwFW.cjs"),S=require("./chunks/LoadingOverlay-NX9Mo_6n.cjs"),g=require("./chunks/ViewContainer-DQl7Mb0U.cjs"),e=require("./chunks/commonUtils-BH6QwGUb.cjs"),r=require("./chunks/apiUtils-Cbg6NQLv.cjs"),o=require("./chunks/FileUtils-D73GVmB8.cjs"),l=require("./chunks/envUtils-CduTHoHu.cjs"),u=require("./chunks/codeStore-BGLhSpAM.cjs"),C=require("./chunks/popupStore-DnWLaQ70.cjs"),w=require("./chunks/favoriteStore-3YceyayF.cjs"),c=require("./chunks/AuthContext-CXng9fj0.cjs"),i=require("./chunks/usePopup-C8FrbrDD.cjs"),d=require("./chunks/ScreenProtectContext-CVuXrJm6.cjs"),s=require("./chunks/SearchBoxContext-Cpr9xa1S.cjs");exports.useCode=n.useCode;exports.useFavorite=n.useFavorite;exports.useMenuModel=n.useMenuModel;exports.useMenuView=n.useMenuView;exports.usePopupState=n.usePopupState;exports.useUser=n.useUser;exports.BwgButtonGroup=t.BwgButtonGroup;exports.BwgCmptArea=t.BwgCmptArea;exports.BwgCol=t.BwgCol;exports.BwgConfigProvider=t.BwgConfigProvider;exports.BwgDetail=t.BwgDetail;exports.BwgDrawer=t.BwgDrawer;exports.BwgEditor=t.EditorBoxRef;exports.BwgGrid=t.BwgGrid;exports.BwgInfoArea=t.BwgInfoArea;exports.BwgPopup=t.BwgPopup;exports.BwgRow=t.BwgRow;exports.BwgTable=t.BwgTable;exports.BwgTabs=t.BwgTabs;exports.BwgTitleBox=t.BwgTitleBox;exports.BwgView=t.BwgView;exports.ContentBox=t.ContentBox;exports.ContentLayOut=t.ContentLayOut;exports.GlobalConfigProvider=t.GlobalConfigProvider;exports.QuickServiceToggle=t.QuickServiceToggle;exports.SSOHandler=t.SSOHandler;exports.SearchBox=t.SearchBox;exports.createBwgGridRenderer=t.createBwgGridRenderer;exports.BwgSpace=m.BwgSpace;exports.realFormat=p.realFormat;exports.BwgButton=a.BwgButton;exports.BwgCheck=a.BwgCheck;exports.BwgCheckList=a.BwgCheckList;exports.BwgDatePicker=a.BwgDatePicker;exports.BwgForm=a.BwgForm;exports.BwgFormItem=a.BwgFormItem;exports.BwgInput=a.BwgInput;exports.BwgLargeUploader=a.BwgLargeUploader;exports.BwgMaskedInput=a.BwgMaskedInput;exports.BwgMaskedPicker=a.BwgMaskedPicker;exports.BwgMultiSelect=a.BwgMultiSelect;exports.BwgNumber=a.BwgNumber;exports.BwgRadio=a.BwgRadio;exports.BwgRangePicker=a.BwgRangePicker;exports.BwgSearch=a.BwgSearch;exports.BwgSelect=a.BwgSelect;exports.BwgTextArea=a.BwgTextArea;exports.BwgUploader=a.BwgUploader;exports.LoadingOverlay=S.LoadingOverlay;exports.ErrorBound=g.ErrorBound;exports.ProgressOverlay=g.ProgressOverlay;exports.ProtectedLayout=g.ProtectedLayout;exports.PublicLayout=g.PublicLayout;exports.ViewContainer=g.ViewContainer;exports.average=e.average;exports.calculateAge=e.calculateAge;exports.chunk=e.chunk;exports.clamp=e.clamp;exports.clearLocalStorage=e.clearLocalStorage;exports.clearSessionStorage=e.clearSessionStorage;exports.copyToClipboard=e.copyToClipboard;exports.count=e.count;exports.debounce=e.debounce;exports.deepClone=e.deepClone;exports.delay=e.delay;exports.difference=e.difference;exports.downloadFile=e.downloadFile;exports.duplicates=e.duplicates;exports.entries=e.entries;exports.find=e.find;exports.findLast=e.findLast;exports.flattenArray=e.flattenArray;exports.flattenDeep=e.flattenDeep;exports.formatDate=e.formatDate;exports.formatDateKST=e.formatDateKST;exports.formatDateKorean=e.formatDateKorean;exports.formatDateTimeKorean=e.formatDateTimeKorean;exports.formatTimeKorean=e.formatTimeKorean;exports.generateRandomColor=e.generateRandomColor;exports.getAllKeys=e.getAllKeys;exports.getCurrentDate=e.getCurrentDate;exports.getCurrentDateString=e.getCurrentDateString;exports.getDateDiff=e.getDateDiff;exports.getDateRange=e.getDateRange;exports.getDateRangeForPicker=e.getDateRangeForPicker;exports.getDeviceType=e.getDeviceType;exports.getLocalStorage=e.getLocalStorage;exports.getMonthEnd=e.getMonthEnd;exports.getMonthStart=e.getMonthStart;exports.getRelativeTime=e.getRelativeTime;exports.getSessionStorage=e.getSessionStorage;exports.getWeekEnd=e.getWeekEnd;exports.getWeekStart=e.getWeekStart;exports.groupBy=e.groupBy;exports.has=e.has;exports.includes=e.includes;exports.intersection=e.intersection;exports.isArray=e.isArray;exports.isBoolean=e.isBoolean;exports.isDesktop=e.isDesktop;exports.isEqual=e.isEqual;exports.isFunction=e.isFunction;exports.isInViewport=e.isInViewport;exports.isMobile=e.isMobile;exports.isNull=e.isNull;exports.isNullOrUndefined=e.isNullOrUndefined;exports.isNumber=e.isNumber;exports.isObject=e.isObject;exports.isString=e.isString;exports.isTablet=e.isTablet;exports.isThisMonth=e.isThisMonth;exports.isThisWeek=e.isThisWeek;exports.isToday=e.isToday;exports.isUndefined=e.isUndefined;exports.isValidDate=e.isValidDate;exports.keys=e.keys;exports.lastIndexOf=e.lastIndexOf;exports.map=e.map;exports.max=e.max;exports.merge=e.merge;exports.min=e.min;exports.omit=e.omit;exports.pick=e.pick;exports.random=e.random;exports.randomChoice=e.randomChoice;exports.randomFromArray=e.randomFromArray;exports.randomInt=e.randomInt;exports.randomMultiple=e.randomMultiple;exports.range=e.range;exports.remove=e.remove;exports.removeAt=e.removeAt;exports.removeEmptyStrings=e.removeEmptyStrings;exports.removeLocalStorage=e.removeLocalStorage;exports.removeNullValues=e.removeNullValues;exports.removeSessionStorage=e.removeSessionStorage;exports.removeWhere=e.removeWhere;exports.round=e.round;exports.scrollToElement=e.scrollToElement;exports.scrollToTop=e.scrollToTop;exports.set=e.set;exports.setLocalStorage=e.setLocalStorage;exports.setSessionStorage=e.setSessionStorage;exports.shuffle=e.shuffle;exports.size=e.size;exports.sortBy=e.sortBy;exports.sortNumbers=e.sortNumbers;exports.sum=e.sum;exports.throttle=e.throttle;exports.union=e.union;exports.unique=e.unique;exports.uniqueBy=e.uniqueBy;exports.values=e.values;exports.apiDelete=r.apiDelete;exports.apiGet=r.apiGet;exports.apiPatch=r.apiPatch;exports.apiPost=r.apiPost;exports.apiPut=r.apiPut;exports.base64Decode=r.base64Decode;exports.base64Encode=r.base64Encode;exports.br2nl=r.br2nl;exports.bxmDecrypt=r.bxmDecrypt;exports.bxmEncrypt=r.bxmEncrypt;exports.callService=r.callService;exports.capitalize=r.capitalize;exports.capitalizeWords=r.capitalizeWords;exports.center=r.center;exports.closeNotification=r.closeNotification;exports.countChar=r.countChar;exports.countWords=r.countWords;exports.destroyNotifications=r.destroyNotifications;exports.encryptSha256=r.encryptSha256;exports.extractNumbers=r.extractNumbers;exports.findPattern=r.findPattern;exports.formatPhoneNumber=r.formatPhoneNumber;exports.generateAlphanumericUID=r.generateAlphanumericUID;exports.generateCustomUID=r.generateCustomUID;exports.generateGUID=r.generateGUID;exports.generateGUIDWithoutHyphens=r.generateGUIDWithoutHyphens;exports.generateLongUID=r.generateLongUID;exports.generateNumericUID=r.generateNumericUID;exports.generateRandomString=r.generateRandomString;exports.generateShortUID=r.generateShortUID;exports.generateTimestampUID=r.generateTimestampUID;exports.generateUID=r.generateUID;exports.getAllServiceCodes=r.getAllServiceCodes;exports.getClientIp=r.getClientIp;exports.getCrprCd=r.getCrprCd;exports.getDepartmentInfo=r.getDepartmentInfo;exports.getDisplayName=r.getDisplayName;exports.getDprtCd=r.getDprtCd;exports.getDprtNm=r.getDprtNm;exports.getEmplNo=r.getEmplNo;exports.getGuid=r.getGuid;exports.getRoleList=r.getRoleList;exports.getServiceCode=r.getServiceCode;exports.getUserDvsn=r.getUserDvsn;exports.getUserId=r.getUserId;exports.getUserInfo=r.getUserInfo;exports.getUserNm=r.getUserNm;exports.hasAllRoles=r.hasAllRoles;exports.hasAnyRole=r.hasAnyRole;exports.hasRole=r.hasRole;exports.hasUserInfo=r.hasUserInfo;exports.isEmpty=r.isEmpty;exports.isLoggedIn=r.isLoggedIn;exports.isSafeEmpty=r.isSafeEmpty;exports.isValidEmail=r.isValidEmail;exports.isValidUrl=r.isValidUrl;exports.md5Hash=r.md5Hash;exports.nl2br=r.nl2br;exports.notificationService=r.notificationService;exports.padLeft=r.padLeft;exports.padRight=r.padRight;exports.removeHtmlTags=r.removeHtmlTags;exports.removeSpecialChars=r.removeSpecialChars;exports.reverse=r.reverse;exports.setClientIp=r.setClientIp;exports.setServiceCodeOverrides=r.setServiceCodeOverrides;exports.sha256Hash=r.sha256Hash;exports.showError=r.showError;exports.showInfo=r.showInfo;exports.showSuccess=r.showSuccess;exports.showWarning=r.showWarning;exports.simpleDecrypt=r.simpleDecrypt;exports.simpleEncrypt=r.simpleEncrypt;exports.toCamelCase=r.toCamelCase;exports.toKebabCase=r.toKebabCase;exports.toSnakeCase=r.toSnakeCase;exports.truncate=r.truncate;exports.useLoadingStore=r.useLoadingStore;exports.useMenuModelStore=r.useMenuModelStore;exports.useMenuViewStore=r.useMenuViewStore;exports.useUserStore=r.useUserStore;exports.verifyClientIp=r.verifyClientIp;exports.THEME_COOKIE_NAME=o.THEME_COOKIE_NAME;exports.closeAllMessages=o.closeAllMessages;exports.closeMessage=o.closeMessage;exports.convertImageFormat=o.convertImageFormat;exports.deleteCookie=o.deleteCookie;exports.downloadByFileKey=o.downloadByFileKey;exports.generateSrcSet=o.generateSrcSet;exports.getAvatarImage=o.getAvatarImage;exports.getBackgroundImage=o.getBackgroundImage;exports.getCookie=o.getCookie;exports.getDefaultBackgroundImage=o.getDefaultBackgroundImage;exports.getIconImage=o.getIconImage;exports.getLogoImage=o.getLogoImage;exports.getOptimizedImageUrl=o.getOptimizedImageUrl;exports.handleImageError=o.handleImageError;exports.preloadImage=o.preloadImage;exports.resizeImage=o.resizeImage;exports.setCookie=o.setCookie;exports.showApiError=o.showApiError;exports.showDuplicateError=o.showDuplicateError;exports.showLoading=o.showLoading;exports.showRequiredError=o.showRequiredError;exports.showSaveError=o.showSaveError;exports.showSaveSuccess=o.showSaveSuccess;exports.useImageLoader=o.useImageLoader;exports.getEnvCode=l.getEnvCode;exports.isDev=l.isDev;exports.isLocal=l.isLocal;exports.isProd=l.isProd;exports.useCodeStore=u.useCodeStore;exports.useColorStore=u.useColorStore;exports.useOptionStore=u.useOptionStore;exports.usePopupStore=C.usePopupStore;exports.useFavoriteStore=w.useFavoriteStore;exports.AuthProvider=c.AuthProvider;exports.useAuth=c.useAuth;exports.CommonCodeProvider=i.CommonCodeProvider;exports.UtilsProvider=i.UtilsProvider;exports.useApiUtils=i.useApiUtils;exports.useArrayUtils=i.useArrayUtils;exports.useCodeColor=i.useCodeColor;exports.useCodeList=i.useCodeList;exports.useCodeListByOption=i.useCodeListByOption;exports.useCodeName=i.useCodeName;exports.useCommonCode=i.useCommonCode;exports.useCommonUtils=i.useCommonUtils;exports.useDateUtils=i.useDateUtils;exports.useGridLookup=i.useGridLookup;exports.usePopup=i.usePopup;exports.usePopupContext=i.usePopupContext;exports.useStringUtils=i.useStringUtils;exports.useUtils=i.useUtils;exports.ScreenProtectProvider=d.ScreenProtectProvider;exports.useLock=d.useLock;exports.SearchBoxProvider=s.SearchBoxProvider;exports.ServiceCodeProvider=s.ServiceCodeProvider;exports.useAllServiceCodes=s.useAllServiceCodes;exports.useLogServiceCodeConfig=s.useLogServiceCodeConfig;exports.useSearchBox=s.useSearchBox;exports.useServiceCode=s.useServiceCode;exports.useServiceCodeValue=s.useServiceCodeValue;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,41 +1,40 @@
1
1
  import { useCode as s, useFavorite as o, useMenuModel as r, useMenuView as t, usePopupState as i, useUser as n } from "./stores/index.js";
2
- import { i as l, B as u, a as m, b as d, c, d as p, e as S, E as f, f as C, g as B, h as w, j as h, k as v, l as D, m as I, C as y, n as b, G as x, Q as k, o as U, S as E, p as P } from "./chunks/SSOHandler-CZHPiuEh.js";
2
+ import { B as l, a as u, b as m, c as d, d as c, e as p, E as S, f, g as C, h as w, i as B, j as h, k as v, l as D, m as I, C as y, n as b, G as x, Q as k, o as U, S as E, p as P } from "./chunks/SSOHandler-CZHPiuEh.js";
3
3
  import { B as A } from "./chunks/BwgSpace-CnLM4qcg.js";
4
4
  import { r as M } from "./chunks/realFormat-DRGLFabQ.js";
5
- import { o as R, j as O, k as F, g as G, a as V, B as W, f as q, q as K, d as j, e as H, n as z, m as Q, i as _, h as J, c as X, b as Y, l as Z, p as $ } from "./chunks/BwgLargeUploader-Nx2-wiD8.js";
5
+ import { o as R, j as O, k as F, g as G, a as V, B as q, f as K, q as W, d as j, e as H, n as z, m as Q, i as _, h as J, c as X, b as Y, l as Z, p as $ } from "./chunks/BwgLargeUploader-Nx2-wiD8.js";
6
6
  import { L as ea } from "./chunks/LoadingOverlay-CAO6_FuF.js";
7
- import { E as oa, P as ra, a as ta, b as ia, T as na } from "./chunks/TabContainer-B7-6AQXV.js";
8
- import { Y as la, t as ua, J as ma, a9 as da, aa as ca, ab as pa, ac as Sa, _ as fa, ad as Ca, u as Ba, ae as wa, K as ha, af as va, L as Da, v as Ia, a0 as ya, a1 as ba, a6 as xa, a7 as ka, f as Ua, a as Ea, b as Pa, c as La, d as Aa, ag as Ta, w as Ma, g as Na, e as Ra, h as Oa, i as Fa, j as Ga, ah as Va, ai as Wa, k as qa, l as Ka, m as ja, aj as Ha, n as za, o as Qa, M as _a, x as Ja, a5 as Xa, N as Ya, ak as Za, al as $a, am as ae, y as ee, an as se, ao as oe, ap as re, aq as te, ar as ie, as as ne, at as ge, au as le, av as ue, p as me, q as de, r as ce, aw as pe, s as Se, z as fe, $ as Ce, A as Be, W as we, B as he, X as ve, C as De, D as Ie, ax as ye, ay as be, T as xe, az as ke, U as Ue, a8 as Ee, a2 as Pe, a3 as Le, E as Ae, aA as Te, F as Me, aB as Ne, a4 as Re, aC as Oe, aD as Fe, aE as Ge, G as Ve, aF as We, aG as qe, O as Ke, H as je, P as He, V as ze, Z as Qe, aH as _e, Q as Je, R as Xe, S as Ye, I as Ze } from "./chunks/commonUtils-Bb16Yqjk.js";
9
- import { Q as as, R as es, S as ss, T as os, U as rs, b as ts, a as is, c as ns, d as gs, e as ls, V as us, f as ms, g as ds, h as cs, ae as ps, i as Ss, j as fs, af as Cs, k as Bs, l as ws, m as hs, n as vs, o as Ds, p as Is, q as ys, r as bs, s as xs, t as ks, u as Us, v as Es, w as Ps, x as Ls, al as As, W as Ts, _ as Ms, $ as Ns, a0 as Rs, a1 as Os, a2 as Fs, a3 as Gs, X as Vs, a4 as Ws, am as qs, a5 as Ks, a6 as js, a7 as Hs, a8 as zs, a9 as Qs, aa as _s, ab as Js, ac as Xs, y as Ys, ad as Zs, z as $s, A as ao, B as eo, C as so, D as oo, ag as ro, E as to, F as io, G as no, H as go, I as lo, Y as uo, an as mo, J as co, ah as po, ai as So, aj as fo, ak as Co, K as Bo, L as wo, M as ho, N as vo, O as Do, P as Io, ao as yo, ap as bo, aq as xo, ar as ko, Z as Uo } from "./chunks/apiUtils-C45AWfu-.js";
10
- import { T as Po, n as Lo, m as Ao, c as To, j as Mo, x as No, g as Ro, a as Oo, b as Fo, k as Go, d as Vo, e as Wo, f as qo, h as Ko, i as jo, p as Ho, r as zo, s as Qo, o as _o, v as Jo, l as Xo, w as Yo, t as Zo, q as $o, u as ar } from "./chunks/FileUtils-Bbz3AvQn.js";
7
+ import { E as oa, P as ra, a as ta, b as ia, V as na } from "./chunks/ViewContainer-v1V83KBq.js";
8
+ import { Y as la, t as ua, J as ma, a9 as da, aa as ca, ab as pa, ac as Sa, _ as fa, ad as Ca, u as wa, ae as Ba, K as ha, af as va, L as Da, v as Ia, a0 as ya, a1 as ba, a6 as xa, a7 as ka, f as Ua, a as Ea, b as Pa, c as La, d as Aa, ag as Ta, w as Ma, g as Na, e as Ra, h as Oa, i as Fa, j as Ga, ah as Va, ai as qa, k as Ka, l as Wa, m as ja, aj as Ha, n as za, o as Qa, M as _a, x as Ja, a5 as Xa, N as Ya, ak as Za, al as $a, am as ae, y as ee, an as se, ao as oe, ap as re, aq as te, ar as ie, as as ne, at as ge, au as le, av as ue, p as me, q as de, r as ce, aw as pe, s as Se, z as fe, $ as Ce, A as we, W as Be, B as he, X as ve, C as De, D as Ie, ax as ye, ay as be, T as xe, az as ke, U as Ue, a8 as Ee, a2 as Pe, a3 as Le, E as Ae, aA as Te, F as Me, aB as Ne, a4 as Re, aC as Oe, aD as Fe, aE as Ge, G as Ve, aF as qe, aG as Ke, O as We, H as je, P as He, V as ze, Z as Qe, aH as _e, Q as Je, R as Xe, S as Ye, I as Ze } from "./chunks/commonUtils-Bb16Yqjk.js";
9
+ import { Q as as, R as es, S as ss, T as os, U as rs, b as ts, a as is, c as ns, d as gs, e as ls, V as us, f as ms, g as ds, h as cs, ae as ps, i as Ss, j as fs, af as Cs, k as ws, l as Bs, m as hs, n as vs, o as Ds, p as Is, q as ys, r as bs, s as xs, t as ks, u as Us, v as Es, w as Ps, x as Ls, al as As, W as Ts, _ as Ms, $ as Ns, a0 as Rs, a1 as Os, a2 as Fs, a3 as Gs, X as Vs, a4 as qs, am as Ks, a5 as Ws, a6 as js, a7 as Hs, a8 as zs, a9 as Qs, aa as _s, ab as Js, ac as Xs, y as Ys, ad as Zs, z as $s, A as ao, B as eo, C as so, D as oo, ag as ro, E as to, F as io, G as no, H as go, I as lo, Y as uo, an as mo, J as co, ah as po, ai as So, aj as fo, ak as Co, K as wo, L as Bo, M as ho, N as vo, O as Do, P as Io, ao as yo, ap as bo, aq as xo, ar as ko, Z as Uo } from "./chunks/apiUtils-C45AWfu-.js";
10
+ import { T as Po, n as Lo, m as Ao, c as To, j as Mo, x as No, g as Ro, a as Oo, b as Fo, k as Go, d as Vo, e as qo, f as Ko, h as Wo, i as jo, p as Ho, r as zo, s as Qo, o as _o, v as Jo, l as Xo, w as Yo, t as Zo, q as $o, u as ar } from "./chunks/FileUtils-Bbz3AvQn.js";
11
11
  import { g as sr, a as or, i as rr, b as tr } from "./chunks/envUtils-C9Gf5aek.js";
12
12
  import { u as nr, b as gr, a as lr } from "./chunks/codeStore-BzT5wSd9.js";
13
13
  import { u as mr } from "./chunks/popupStore-DmFbkkjd.js";
14
14
  import { u as cr } from "./chunks/favoriteStore-C9utQ6sm.js";
15
15
  import { A as Sr, u as fr } from "./chunks/AuthContext-Ei2P-z4d.js";
16
- import { C as Br, U as wr, k as hr, i as vr, c as Dr, a as Ir, d as yr, b as br, u as xr, j as kr, g as Ur, e as Er, m as Pr, l as Lr, h as Ar, f as Tr } from "./chunks/usePopup-pfh-ajfP.js";
16
+ import { C as wr, U as Br, k as hr, i as vr, c as Dr, a as Ir, d as yr, b as br, u as xr, j as kr, g as Ur, e as Er, m as Pr, l as Lr, h as Ar, f as Tr } from "./chunks/usePopup-pfh-ajfP.js";
17
17
  import { S as Nr, u as Rr } from "./chunks/ScreenProtectContext-3my4PHFa.js";
18
- import { S as Fr, a as Gr, d as Vr, e as Wr, u as qr, b as Kr, c as jr } from "./chunks/SearchBoxContext-BxtHF9BO.js";
18
+ import { S as Fr, a as Gr, d as Vr, e as qr, u as Kr, b as Wr, c as jr } from "./chunks/SearchBoxContext-BxtHF9BO.js";
19
19
  export {
20
20
  Sr as AuthProvider,
21
- l as BWgRow,
22
21
  R as BwgButton,
23
- u as BwgButtonGroup,
22
+ l as BwgButtonGroup,
24
23
  O as BwgCheck,
25
24
  F as BwgCheckList,
26
- m as BwgCmptArea,
27
- d as BwgCol,
28
- c as BwgConfigProvider,
25
+ u as BwgCmptArea,
26
+ m as BwgCol,
27
+ d as BwgConfigProvider,
29
28
  G as BwgDatePicker,
30
- p as BwgDetail,
31
- S as BwgDrawer,
32
- f as BwgEditor,
29
+ c as BwgDetail,
30
+ p as BwgDrawer,
31
+ S as BwgEditor,
33
32
  V as BwgForm,
34
- W as BwgFormItem,
35
- C as BwgGrid,
36
- B as BwgInfoArea,
37
- q as BwgInput,
38
- K as BwgLargeUploader,
33
+ q as BwgFormItem,
34
+ f as BwgGrid,
35
+ C as BwgInfoArea,
36
+ K as BwgInput,
37
+ W as BwgLargeUploader,
39
38
  j as BwgMaskedInput,
40
39
  H as BwgMaskedPicker,
41
40
  z as BwgMultiSelect,
@@ -43,6 +42,7 @@ export {
43
42
  w as BwgPopup,
44
43
  _ as BwgRadio,
45
44
  J as BwgRangePicker,
45
+ B as BwgRow,
46
46
  X as BwgSearch,
47
47
  Y as BwgSelect,
48
48
  A as BwgSpace,
@@ -52,7 +52,7 @@ export {
52
52
  D as BwgTitleBox,
53
53
  $ as BwgUploader,
54
54
  I as BwgView,
55
- Br as CommonCodeProvider,
55
+ wr as CommonCodeProvider,
56
56
  y as ContentBox,
57
57
  b as ContentLayOut,
58
58
  oa as ErrorBound,
@@ -68,8 +68,8 @@ export {
68
68
  Fr as SearchBoxProvider,
69
69
  Gr as ServiceCodeProvider,
70
70
  Po as THEME_COOKIE_NAME,
71
- na as TabContainer,
72
- wr as UtilsProvider,
71
+ Br as UtilsProvider,
72
+ na as ViewContainer,
73
73
  as as apiDelete,
74
74
  es as apiGet,
75
75
  ss as apiPatch,
@@ -100,17 +100,17 @@ export {
100
100
  fs as countWords,
101
101
  P as createBwgGridRenderer,
102
102
  Ca as debounce,
103
- Ba as deepClone,
104
- wa as delay,
103
+ wa as deepClone,
104
+ Ba as delay,
105
105
  Mo as deleteCookie,
106
106
  Cs as destroyNotifications,
107
107
  ha as difference,
108
108
  No as downloadByFileKey,
109
109
  va as downloadFile,
110
110
  Da as duplicates,
111
- Bs as encryptSha256,
111
+ ws as encryptSha256,
112
112
  Ia as entries,
113
- ws as extractNumbers,
113
+ Bs as extractNumbers,
114
114
  ya as find,
115
115
  ba as findLast,
116
116
  hs as findPattern,
@@ -155,17 +155,17 @@ export {
155
155
  Gs as getEmplNo,
156
156
  sr as getEnvCode,
157
157
  Vs as getGuid,
158
- Wo as getIconImage,
159
- Wa as getLocalStorage,
160
- qo as getLogoImage,
161
- qa as getMonthEnd,
162
- Ka as getMonthStart,
163
- Ko as getOptimizedImageUrl,
158
+ qo as getIconImage,
159
+ qa as getLocalStorage,
160
+ Ko as getLogoImage,
161
+ Ka as getMonthEnd,
162
+ Wa as getMonthStart,
163
+ Wo as getOptimizedImageUrl,
164
164
  ja as getRelativeTime,
165
- Ws as getRoleList,
166
- qs as getServiceCode,
165
+ qs as getRoleList,
166
+ Ks as getServiceCode,
167
167
  Ha as getSessionStorage,
168
- Ks as getUserDvsn,
168
+ Ws as getUserDvsn,
169
169
  js as getUserId,
170
170
  Hs as getUserInfo,
171
171
  zs as getUserNm,
@@ -208,8 +208,8 @@ export {
208
208
  eo as isValidUrl,
209
209
  fe as keys,
210
210
  Ce as lastIndexOf,
211
- Be as map,
212
- we as max,
211
+ we as map,
212
+ Be as max,
213
213
  so as md5Hash,
214
214
  he as merge,
215
215
  ve as min,
@@ -244,9 +244,9 @@ export {
244
244
  Ve as set,
245
245
  uo as setClientIp,
246
246
  Qo as setCookie,
247
- We as setLocalStorage,
247
+ qe as setLocalStorage,
248
248
  mo as setServiceCodeOverrides,
249
- qe as setSessionStorage,
249
+ Ke as setSessionStorage,
250
250
  co as sha256Hash,
251
251
  _o as showApiError,
252
252
  Jo as showDuplicateError,
@@ -258,9 +258,9 @@ export {
258
258
  $o as showSaveSuccess,
259
259
  fo as showSuccess,
260
260
  Co as showWarning,
261
- Ke as shuffle,
262
- Bo as simpleDecrypt,
263
- wo as simpleEncrypt,
261
+ We as shuffle,
262
+ wo as simpleDecrypt,
263
+ Bo as simpleEncrypt,
264
264
  je as size,
265
265
  He as sortBy,
266
266
  ze as sortNumbers,
@@ -293,7 +293,7 @@ export {
293
293
  ar as useImageLoader,
294
294
  yo as useLoadingStore,
295
295
  Rr as useLock,
296
- Wr as useLogServiceCodeConfig,
296
+ qr as useLogServiceCodeConfig,
297
297
  r as useMenuModel,
298
298
  bo as useMenuModelStore,
299
299
  t as useMenuView,
@@ -303,8 +303,8 @@ export {
303
303
  Lr as usePopupContext,
304
304
  i as usePopupState,
305
305
  mr as usePopupStore,
306
- qr as useSearchBox,
307
- Kr as useServiceCode,
306
+ Kr as useSearchBox,
307
+ Wr as useServiceCode,
308
308
  jr as useServiceCodeValue,
309
309
  Ar as useStringUtils,
310
310
  n as useUser,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bwg-ui/core",
3
- "version": "1.1.12",
3
+ "version": "1.1.14",
4
4
  "description": "bankwareglobal UI 라이브러리입니다.",
5
5
  "author": "kyeongdon.park",
6
6
  "license": "ISC",
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabContainer-B7-6AQXV.js","sources":["../../src/components/layout/ErrorBound.tsx","../../src/components/layout/ProgressOverlay.tsx","../../src/components/layout/ProtectLayout.tsx","../../src/components/layout/PublicLayout.tsx","../../src/components/layout/TabContainer.tsx"],"sourcesContent":["import React, { Component, ErrorInfo, ReactNode } from 'react';\r\nimport { Result, Button } from 'antd';\r\nimport { ReloadOutlined, HomeOutlined } from '@ant-design/icons';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\ninterface Props {\r\n children: ReactNode;\r\n fallback?: ReactNode;\r\n}\r\n\r\ninterface State {\r\n hasError: boolean;\r\n error?: Error;\r\n errorInfo?: ErrorInfo;\r\n}\r\n\r\n// 에러 페이지 컴포넌트\r\nexport const ErrorPage: React.FC<{\r\n error?: Error;\r\n resetError?: () => void;\r\n onGoHome?: () => void;\r\n}> = ({ error, resetError, onGoHome }) => {\r\n const navigate = useNavigate();\r\n\r\n const handleGoHome = () => {\r\n if (onGoHome) {\r\n onGoHome();\r\n } else {\r\n // 기본 홈 이동 로직\r\n navigate('/');\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n style={{\r\n padding: '40px 20px',\r\n textAlign: 'center',\r\n backgroundColor: '#fafafa',\r\n minHeight: '400px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <Result\r\n status=\"error\"\r\n title=\"컴포넌트 로딩 중 오류가 발생했습니다\"\r\n subTitle={\r\n error\r\n ? `오류 내용: ${error.message}`\r\n : '알 수 없는 오류가 발생했습니다'\r\n }\r\n extra={[\r\n <Button\r\n key=\"retry\"\r\n type=\"primary\"\r\n icon={<ReloadOutlined />}\r\n onClick={resetError}\r\n style={{ marginRight: 8 }}\r\n >\r\n 다시 시도\r\n </Button>,\r\n <Button key=\"home\" icon={<HomeOutlined />} onClick={handleGoHome}>\r\n 홈으로\r\n </Button>,\r\n ]}\r\n />\r\n {error && (\r\n <details\r\n style={{\r\n marginTop: '20px',\r\n textAlign: 'left',\r\n maxWidth: '600px',\r\n backgroundColor: '#fff',\r\n padding: '16px',\r\n borderRadius: '6px',\r\n border: '1px solid #d9d9d9',\r\n }}\r\n >\r\n <summary style={{ cursor: 'pointer', fontWeight: 'bold' }}>\r\n 오류 상세 정보\r\n </summary>\r\n <pre\r\n style={{\r\n marginTop: '8px',\r\n fontSize: '12px',\r\n color: '#666',\r\n whiteSpace: 'pre-wrap',\r\n wordBreak: 'break-word',\r\n }}\r\n >\r\n {error.stack}\r\n </pre>\r\n </details>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// 에러 경계 클래스 컴포넌트\r\nexport class ErrorBound extends Component<Props, State> {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError(error: Error): State {\r\n return { hasError: true, error };\r\n }\r\n\r\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\r\n console.error('ErrorBound caught an error:', error, errorInfo);\r\n this.setState({\r\n error,\r\n errorInfo,\r\n });\r\n }\r\n\r\n resetError = () => {\r\n this.setState({ hasError: false, error: undefined, errorInfo: undefined });\r\n };\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n if (this.props.fallback) {\r\n return this.props.fallback;\r\n }\r\n\r\n return (\r\n <div\r\n style={{\r\n padding: '40px 20px',\r\n textAlign: 'center',\r\n backgroundColor: '#fafafa',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <Result\r\n status=\"error\"\r\n title=\"컴포넌트 로딩 중 오류가 발생했습니다\"\r\n subTitle={\r\n this.state.error\r\n ? `오류 내용: ${this.state.error.message}`\r\n : '알 수 없는 오류가 발생했습니다'\r\n }\r\n extra={[\r\n <Button\r\n key=\"retry\"\r\n type=\"primary\"\r\n icon={<ReloadOutlined />}\r\n onClick={this.resetError}\r\n style={{ marginRight: 8 }}\r\n >\r\n 다시 시도\r\n </Button>,\r\n ]}\r\n />\r\n {this.state.error && (\r\n <details\r\n style={{\r\n marginTop: '20px',\r\n textAlign: 'left',\r\n maxWidth: '600px',\r\n backgroundColor: '#fff',\r\n padding: '16px',\r\n borderRadius: '6px',\r\n border: '1px solid #d9d9d9',\r\n }}\r\n >\r\n <summary style={{ cursor: 'pointer', fontWeight: 'bold' }}>\r\n 오류 상세 정보\r\n </summary>\r\n <pre\r\n style={{\r\n marginTop: '8px',\r\n fontSize: '12px',\r\n color: '#666',\r\n whiteSpace: 'pre-wrap',\r\n wordBreak: 'break-word',\r\n }}\r\n >\r\n {this.state.error.stack}\r\n </pre>\r\n </details>\r\n )}\r\n </div>\r\n );\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}\r\n\r\n// 함수형 컴포넌트용 에러 경계 훅\r\nexport const useErrorHandler = () => {\r\n const [error, setError] = React.useState<Error | null>(null);\r\n\r\n const handleError = React.useCallback((error: Error) => {\r\n console.error('useErrorHandler caught an error:', error);\r\n setError(error);\r\n }, []);\r\n\r\n const resetError = React.useCallback(() => {\r\n setError(null);\r\n }, []);\r\n\r\n return { error, handleError, resetError };\r\n};\r\n","import { useAuth } from \"@/provider/contexts/AuthContext\";\r\nimport { Spin } from \"antd\";\r\nimport React, { useEffect } from 'react';\r\n\r\nconst DOTLINE_STYLE_ID = 'bwg-dot-line-wave-v4';\r\nfunction ensureDotLineWaveStylesV4() {\r\n if (typeof document === 'undefined') return;\r\n if (document.getElementById(DOTLINE_STYLE_ID)) return;\r\n\r\n const style = document.createElement('style');\r\n style.id = DOTLINE_STYLE_ID;\r\n style.textContent = `\r\n .bwg-dotline {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--bwg-gap, 12px);\r\n height: calc(var(--bwg-size, 12px) + 2 * var(--bwg-amp, 12px));\r\n line-height: 0;\r\n }\r\n .bwg-dotline .dot {\r\n width: var(--bwg-size, 12px);\r\n height: var(--bwg-size, 12px);\r\n border-radius: 50%;\r\n background: currentColor;\r\n will-change: transform, opacity;\r\n filter: drop-shadow(0 1px 2px rgba(0,0,0,.12));\r\n animation: bwg-dotline-sine var(--bwg-speed, 780ms) linear infinite;\r\n }\r\n\r\n /* sin(θ) 근사: 0, 45, 90, 135, 180, 225, 270, 315, 360deg */\r\n @keyframes bwg-dotline-sine {\r\n 0% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n 12.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }\r\n 25% { transform: translate3d(0, calc(-1 * var(--bwg-amp, 12px)), 0) scale(1.06); opacity: 1; }\r\n 37.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }\r\n 50% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n 62.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }\r\n 75% { transform: translate3d(0, calc( 1 * var(--bwg-amp, 12px)), 0) scale(.96); opacity: .76; }\r\n 87.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }\r\n 100% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n }\r\n\r\n @media (prefers-reduced-motion: reduce) {\r\n .bwg-dotline .dot { animation: none; }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n}\r\n\r\n/* 직선 도트 파동 인디케이터 */\r\nconst DotLineSmoothIndicator: React.FC<{\r\n colors?: string[]; // 각 점 색\r\n count?: number; // 점 개수 (기본: colors 길이)\r\n size?: number; // 점 지름\r\n gap?: number; // 점 간격\r\n amp?: number; // 진폭(px)\r\n speedMs?: number; // 한 주기(ms)\r\n direction?: 'ltr' | 'rtl'; // 파동 진행 방향\r\n phase?: number; // 점 간 지연 비율(0~1) — 낮출수록 부드러움\r\n}> = ({\r\n colors = ['#DAD3FF', '#B3A6FF', '#9380FF', '#816BFA'],\r\n count,\r\n size = 12,\r\n gap = 10,\r\n amp = 16,\r\n speedMs = 900,\r\n direction = 'ltr',\r\n phase = 0.7,\r\n}) => {\r\n useEffect(() => { ensureDotLineWaveStylesV4(); }, []);\r\n\r\n const n = count ?? colors.length;\r\n const dots = Array.from({ length: n });\r\n const baseStyle = {\r\n ['--bwg-size' as any]: `${size}px`,\r\n ['--bwg-gap' as any]: `${gap}px`,\r\n ['--bwg-amp' as any]: `${amp}px`,\r\n ['--bwg-speed' as any]: `${speedMs}ms`,\r\n } as React.CSSProperties;\r\n\r\n const perDotDelay = (speedMs / n) * phase;\r\n\r\n return (\r\n <span className=\"bwg-dotline\" role=\"img\" aria-label=\"loading\" style={baseStyle}>\r\n {dots.map((_, i) => (\r\n <span\r\n key={i}\r\n className=\"dot\"\r\n style={{\r\n backgroundColor: colors[i % colors.length],\r\n animationDelay:\r\n direction === 'ltr'\r\n ? `${(i * perDotDelay)}ms`\r\n : `${((n - 1 - i) * perDotDelay)}ms`,\r\n }}\r\n />\r\n ))}\r\n </span>\r\n );\r\n};\r\n\r\n\r\n/**\r\n * 진행 중 표시\r\n * @returns ProgressOverlay\r\n */\r\nconst ProgressOverlay: React.FC<{spin?: boolean | null; text?: string }> = ({spin = null, text = '인증중...',}) => {\r\n const { busy } = useAuth();\r\n const show = (spin ?? busy);\r\n if (!show) return null;\r\n return (\r\n <div\r\n style={{\r\n position: \"fixed\",\r\n height: \"100vh\",\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n display: \"flex\",\r\n flexDirection:'column',\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n gap: 8,\r\n padding: \"8px 12px\",\r\n background: \"rgba(0,0,0,0.6)\",\r\n color: \"#fff\",\r\n zIndex: 10000,\r\n }}\r\n aria-live=\"polite\"\r\n aria-busy=\"true\"\r\n role=\"status\"\r\n >\r\n <Spin\r\n indicator={\r\n <DotLineSmoothIndicator\r\n colors={['#DAD3FF', '#B3A6FF', '#9380FF', '#816BFA']}\r\n size={12}\r\n gap={10}\r\n amp={16}\r\n speedMs={900}\r\n phase={0.75} \r\n direction=\"ltr\"\r\n />\r\n }\r\n />\r\n <span className=\"bwg-spin-txt\" style={{marginTop:\"15px\"}}>{text}</span>\r\n </div>\r\n );\r\n };\r\n\r\nexport default ProgressOverlay;","import { useAuth } from \"@/provider/contexts/AuthContext\";\r\nimport { ScreenProtectProvider } from \"@/provider/contexts/ScreenProtectContext\";\r\nimport { isLocal } from \"@/utils\";\r\nimport { ConfigProvider } from \"antd\";\r\nimport { Outlet } from \"react-router-dom\";\r\nimport ProgressOverlay from \"./ProgressOverlay\";\r\n\r\n/**\r\n * 보호 레이아웃\r\n * @returns ProtectedLayout\r\n */\r\nconst ProtectedLayout = () => {\r\n const { reauthWithPin } = useAuth();\r\n // NOTE: 인증 여부 체크는 각 페이지(/main)의 스토어 가드에 위임합니다.\r\n // 필요하다면 여기서도 RequireAuth로 감싸세요.\r\n return (\r\n <ScreenProtectProvider idleMs={30 * 60_000} onUnlock={async (pin) => {\r\n if(isLocal) {\r\n // 로컬에서는 항상 true\r\n return true;\r\n }\r\n return !!pin && (await reauthWithPin(pin));\r\n }}>\r\n {/* Ensure AntD portals mount inside protected shell if you need it */}\r\n <ConfigProvider getPopupContainer={() => document.getElementById(\"app-shell\") || document.body}>\r\n <div id=\"app-shell\">\r\n <ProgressOverlay />\r\n <Outlet />\r\n </div>\r\n </ConfigProvider>\r\n </ScreenProtectProvider>\r\n );\r\n }\r\n\r\n export default ProtectedLayout;","import { Outlet } from \"react-router-dom\";\r\nimport ProgressOverlay from \"./ProgressOverlay\";\r\n\r\n/**\r\n * 공개 레이아웃\r\n * @returns PublicLayout\r\n */\r\nconst PublicLayout = () => {\r\n return (\r\n <div>\r\n <ProgressOverlay />\r\n <Outlet />\r\n </div>\r\n );\r\n}\r\n\r\nexport default PublicLayout;","import React, { memo, Suspense } from \"react\";\r\nimport { ErrorBound } from \"./ErrorBound\";\r\n\r\nconst TabContainer = ({\r\n tab,\r\n isActive,\r\n instance,\r\n params,\r\n }: {\r\n tab: any;\r\n isActive: boolean;\r\n instance?: React.ComponentType;\r\n params?: Record<string, any>;\r\n }) => {\r\n return <div\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n visibility: isActive ? 'visible' : 'hidden',\r\n opacity: isActive ? 1 : 0,\r\n transition: 'opacity 0.2s ease-in-out',\r\n pointerEvents: isActive ? 'auto' : 'none',\r\n }}\r\n>\r\n <ErrorBound>\r\n <Suspense \r\n fallback={null}\r\n >\r\n {instance && React.createElement(instance, { params } as any)}\r\n </Suspense>\r\n </ErrorBound>\r\n</div>;\r\n};\r\n\r\nexport default memo(TabContainer);"],"names":["ErrorBound","Component","props","error","errorInfo","jsxs","jsx","Result","Button","ReloadOutlined","DOTLINE_STYLE_ID","ensureDotLineWaveStylesV4","style","DotLineSmoothIndicator","colors","count","size","gap","amp","speedMs","direction","phase","useEffect","n","dots","baseStyle","perDotDelay","_","i","ProgressOverlay","spin","text","busy","useAuth","Spin","ProtectedLayout","reauthWithPin","ScreenProtectProvider","pin","isLocal","ConfigProvider","Outlet","PublicLayout","TabContainer","tab","isActive","instance","params","Suspense","React","TabContainer$1","memo"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabContainer-Dx2PVShz.cjs","sources":["../../src/components/layout/ErrorBound.tsx","../../src/components/layout/ProgressOverlay.tsx","../../src/components/layout/ProtectLayout.tsx","../../src/components/layout/PublicLayout.tsx","../../src/components/layout/TabContainer.tsx"],"sourcesContent":["import React, { Component, ErrorInfo, ReactNode } from 'react';\r\nimport { Result, Button } from 'antd';\r\nimport { ReloadOutlined, HomeOutlined } from '@ant-design/icons';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\ninterface Props {\r\n children: ReactNode;\r\n fallback?: ReactNode;\r\n}\r\n\r\ninterface State {\r\n hasError: boolean;\r\n error?: Error;\r\n errorInfo?: ErrorInfo;\r\n}\r\n\r\n// 에러 페이지 컴포넌트\r\nexport const ErrorPage: React.FC<{\r\n error?: Error;\r\n resetError?: () => void;\r\n onGoHome?: () => void;\r\n}> = ({ error, resetError, onGoHome }) => {\r\n const navigate = useNavigate();\r\n\r\n const handleGoHome = () => {\r\n if (onGoHome) {\r\n onGoHome();\r\n } else {\r\n // 기본 홈 이동 로직\r\n navigate('/');\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n style={{\r\n padding: '40px 20px',\r\n textAlign: 'center',\r\n backgroundColor: '#fafafa',\r\n minHeight: '400px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <Result\r\n status=\"error\"\r\n title=\"컴포넌트 로딩 중 오류가 발생했습니다\"\r\n subTitle={\r\n error\r\n ? `오류 내용: ${error.message}`\r\n : '알 수 없는 오류가 발생했습니다'\r\n }\r\n extra={[\r\n <Button\r\n key=\"retry\"\r\n type=\"primary\"\r\n icon={<ReloadOutlined />}\r\n onClick={resetError}\r\n style={{ marginRight: 8 }}\r\n >\r\n 다시 시도\r\n </Button>,\r\n <Button key=\"home\" icon={<HomeOutlined />} onClick={handleGoHome}>\r\n 홈으로\r\n </Button>,\r\n ]}\r\n />\r\n {error && (\r\n <details\r\n style={{\r\n marginTop: '20px',\r\n textAlign: 'left',\r\n maxWidth: '600px',\r\n backgroundColor: '#fff',\r\n padding: '16px',\r\n borderRadius: '6px',\r\n border: '1px solid #d9d9d9',\r\n }}\r\n >\r\n <summary style={{ cursor: 'pointer', fontWeight: 'bold' }}>\r\n 오류 상세 정보\r\n </summary>\r\n <pre\r\n style={{\r\n marginTop: '8px',\r\n fontSize: '12px',\r\n color: '#666',\r\n whiteSpace: 'pre-wrap',\r\n wordBreak: 'break-word',\r\n }}\r\n >\r\n {error.stack}\r\n </pre>\r\n </details>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// 에러 경계 클래스 컴포넌트\r\nexport class ErrorBound extends Component<Props, State> {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError(error: Error): State {\r\n return { hasError: true, error };\r\n }\r\n\r\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\r\n console.error('ErrorBound caught an error:', error, errorInfo);\r\n this.setState({\r\n error,\r\n errorInfo,\r\n });\r\n }\r\n\r\n resetError = () => {\r\n this.setState({ hasError: false, error: undefined, errorInfo: undefined });\r\n };\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n if (this.props.fallback) {\r\n return this.props.fallback;\r\n }\r\n\r\n return (\r\n <div\r\n style={{\r\n padding: '40px 20px',\r\n textAlign: 'center',\r\n backgroundColor: '#fafafa',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n }}\r\n >\r\n <Result\r\n status=\"error\"\r\n title=\"컴포넌트 로딩 중 오류가 발생했습니다\"\r\n subTitle={\r\n this.state.error\r\n ? `오류 내용: ${this.state.error.message}`\r\n : '알 수 없는 오류가 발생했습니다'\r\n }\r\n extra={[\r\n <Button\r\n key=\"retry\"\r\n type=\"primary\"\r\n icon={<ReloadOutlined />}\r\n onClick={this.resetError}\r\n style={{ marginRight: 8 }}\r\n >\r\n 다시 시도\r\n </Button>,\r\n ]}\r\n />\r\n {this.state.error && (\r\n <details\r\n style={{\r\n marginTop: '20px',\r\n textAlign: 'left',\r\n maxWidth: '600px',\r\n backgroundColor: '#fff',\r\n padding: '16px',\r\n borderRadius: '6px',\r\n border: '1px solid #d9d9d9',\r\n }}\r\n >\r\n <summary style={{ cursor: 'pointer', fontWeight: 'bold' }}>\r\n 오류 상세 정보\r\n </summary>\r\n <pre\r\n style={{\r\n marginTop: '8px',\r\n fontSize: '12px',\r\n color: '#666',\r\n whiteSpace: 'pre-wrap',\r\n wordBreak: 'break-word',\r\n }}\r\n >\r\n {this.state.error.stack}\r\n </pre>\r\n </details>\r\n )}\r\n </div>\r\n );\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}\r\n\r\n// 함수형 컴포넌트용 에러 경계 훅\r\nexport const useErrorHandler = () => {\r\n const [error, setError] = React.useState<Error | null>(null);\r\n\r\n const handleError = React.useCallback((error: Error) => {\r\n console.error('useErrorHandler caught an error:', error);\r\n setError(error);\r\n }, []);\r\n\r\n const resetError = React.useCallback(() => {\r\n setError(null);\r\n }, []);\r\n\r\n return { error, handleError, resetError };\r\n};\r\n","import { useAuth } from \"@/provider/contexts/AuthContext\";\r\nimport { Spin } from \"antd\";\r\nimport React, { useEffect } from 'react';\r\n\r\nconst DOTLINE_STYLE_ID = 'bwg-dot-line-wave-v4';\r\nfunction ensureDotLineWaveStylesV4() {\r\n if (typeof document === 'undefined') return;\r\n if (document.getElementById(DOTLINE_STYLE_ID)) return;\r\n\r\n const style = document.createElement('style');\r\n style.id = DOTLINE_STYLE_ID;\r\n style.textContent = `\r\n .bwg-dotline {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: var(--bwg-gap, 12px);\r\n height: calc(var(--bwg-size, 12px) + 2 * var(--bwg-amp, 12px));\r\n line-height: 0;\r\n }\r\n .bwg-dotline .dot {\r\n width: var(--bwg-size, 12px);\r\n height: var(--bwg-size, 12px);\r\n border-radius: 50%;\r\n background: currentColor;\r\n will-change: transform, opacity;\r\n filter: drop-shadow(0 1px 2px rgba(0,0,0,.12));\r\n animation: bwg-dotline-sine var(--bwg-speed, 780ms) linear infinite;\r\n }\r\n\r\n /* sin(θ) 근사: 0, 45, 90, 135, 180, 225, 270, 315, 360deg */\r\n @keyframes bwg-dotline-sine {\r\n 0% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n 12.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }\r\n 25% { transform: translate3d(0, calc(-1 * var(--bwg-amp, 12px)), 0) scale(1.06); opacity: 1; }\r\n 37.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }\r\n 50% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n 62.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }\r\n 75% { transform: translate3d(0, calc( 1 * var(--bwg-amp, 12px)), 0) scale(.96); opacity: .76; }\r\n 87.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }\r\n 100% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }\r\n }\r\n\r\n @media (prefers-reduced-motion: reduce) {\r\n .bwg-dotline .dot { animation: none; }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n}\r\n\r\n/* 직선 도트 파동 인디케이터 */\r\nconst DotLineSmoothIndicator: React.FC<{\r\n colors?: string[]; // 각 점 색\r\n count?: number; // 점 개수 (기본: colors 길이)\r\n size?: number; // 점 지름\r\n gap?: number; // 점 간격\r\n amp?: number; // 진폭(px)\r\n speedMs?: number; // 한 주기(ms)\r\n direction?: 'ltr' | 'rtl'; // 파동 진행 방향\r\n phase?: number; // 점 간 지연 비율(0~1) — 낮출수록 부드러움\r\n}> = ({\r\n colors = ['#DAD3FF', '#B3A6FF', '#9380FF', '#816BFA'],\r\n count,\r\n size = 12,\r\n gap = 10,\r\n amp = 16,\r\n speedMs = 900,\r\n direction = 'ltr',\r\n phase = 0.7,\r\n}) => {\r\n useEffect(() => { ensureDotLineWaveStylesV4(); }, []);\r\n\r\n const n = count ?? colors.length;\r\n const dots = Array.from({ length: n });\r\n const baseStyle = {\r\n ['--bwg-size' as any]: `${size}px`,\r\n ['--bwg-gap' as any]: `${gap}px`,\r\n ['--bwg-amp' as any]: `${amp}px`,\r\n ['--bwg-speed' as any]: `${speedMs}ms`,\r\n } as React.CSSProperties;\r\n\r\n const perDotDelay = (speedMs / n) * phase;\r\n\r\n return (\r\n <span className=\"bwg-dotline\" role=\"img\" aria-label=\"loading\" style={baseStyle}>\r\n {dots.map((_, i) => (\r\n <span\r\n key={i}\r\n className=\"dot\"\r\n style={{\r\n backgroundColor: colors[i % colors.length],\r\n animationDelay:\r\n direction === 'ltr'\r\n ? `${(i * perDotDelay)}ms`\r\n : `${((n - 1 - i) * perDotDelay)}ms`,\r\n }}\r\n />\r\n ))}\r\n </span>\r\n );\r\n};\r\n\r\n\r\n/**\r\n * 진행 중 표시\r\n * @returns ProgressOverlay\r\n */\r\nconst ProgressOverlay: React.FC<{spin?: boolean | null; text?: string }> = ({spin = null, text = '인증중...',}) => {\r\n const { busy } = useAuth();\r\n const show = (spin ?? busy);\r\n if (!show) return null;\r\n return (\r\n <div\r\n style={{\r\n position: \"fixed\",\r\n height: \"100vh\",\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n display: \"flex\",\r\n flexDirection:'column',\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n gap: 8,\r\n padding: \"8px 12px\",\r\n background: \"rgba(0,0,0,0.6)\",\r\n color: \"#fff\",\r\n zIndex: 10000,\r\n }}\r\n aria-live=\"polite\"\r\n aria-busy=\"true\"\r\n role=\"status\"\r\n >\r\n <Spin\r\n indicator={\r\n <DotLineSmoothIndicator\r\n colors={['#DAD3FF', '#B3A6FF', '#9380FF', '#816BFA']}\r\n size={12}\r\n gap={10}\r\n amp={16}\r\n speedMs={900}\r\n phase={0.75} \r\n direction=\"ltr\"\r\n />\r\n }\r\n />\r\n <span className=\"bwg-spin-txt\" style={{marginTop:\"15px\"}}>{text}</span>\r\n </div>\r\n );\r\n };\r\n\r\nexport default ProgressOverlay;","import { useAuth } from \"@/provider/contexts/AuthContext\";\r\nimport { ScreenProtectProvider } from \"@/provider/contexts/ScreenProtectContext\";\r\nimport { isLocal } from \"@/utils\";\r\nimport { ConfigProvider } from \"antd\";\r\nimport { Outlet } from \"react-router-dom\";\r\nimport ProgressOverlay from \"./ProgressOverlay\";\r\n\r\n/**\r\n * 보호 레이아웃\r\n * @returns ProtectedLayout\r\n */\r\nconst ProtectedLayout = () => {\r\n const { reauthWithPin } = useAuth();\r\n // NOTE: 인증 여부 체크는 각 페이지(/main)의 스토어 가드에 위임합니다.\r\n // 필요하다면 여기서도 RequireAuth로 감싸세요.\r\n return (\r\n <ScreenProtectProvider idleMs={30 * 60_000} onUnlock={async (pin) => {\r\n if(isLocal) {\r\n // 로컬에서는 항상 true\r\n return true;\r\n }\r\n return !!pin && (await reauthWithPin(pin));\r\n }}>\r\n {/* Ensure AntD portals mount inside protected shell if you need it */}\r\n <ConfigProvider getPopupContainer={() => document.getElementById(\"app-shell\") || document.body}>\r\n <div id=\"app-shell\">\r\n <ProgressOverlay />\r\n <Outlet />\r\n </div>\r\n </ConfigProvider>\r\n </ScreenProtectProvider>\r\n );\r\n }\r\n\r\n export default ProtectedLayout;","import { Outlet } from \"react-router-dom\";\r\nimport ProgressOverlay from \"./ProgressOverlay\";\r\n\r\n/**\r\n * 공개 레이아웃\r\n * @returns PublicLayout\r\n */\r\nconst PublicLayout = () => {\r\n return (\r\n <div>\r\n <ProgressOverlay />\r\n <Outlet />\r\n </div>\r\n );\r\n}\r\n\r\nexport default PublicLayout;","import React, { memo, Suspense } from \"react\";\r\nimport { ErrorBound } from \"./ErrorBound\";\r\n\r\nconst TabContainer = ({\r\n tab,\r\n isActive,\r\n instance,\r\n params,\r\n }: {\r\n tab: any;\r\n isActive: boolean;\r\n instance?: React.ComponentType;\r\n params?: Record<string, any>;\r\n }) => {\r\n return <div\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n visibility: isActive ? 'visible' : 'hidden',\r\n opacity: isActive ? 1 : 0,\r\n transition: 'opacity 0.2s ease-in-out',\r\n pointerEvents: isActive ? 'auto' : 'none',\r\n }}\r\n>\r\n <ErrorBound>\r\n <Suspense \r\n fallback={null}\r\n >\r\n {instance && React.createElement(instance, { params } as any)}\r\n </Suspense>\r\n </ErrorBound>\r\n</div>;\r\n};\r\n\r\nexport default memo(TabContainer);"],"names":["ErrorBound","Component","props","error","errorInfo","jsxs","jsx","Result","Button","ReloadOutlined","DOTLINE_STYLE_ID","ensureDotLineWaveStylesV4","style","DotLineSmoothIndicator","colors","count","size","gap","amp","speedMs","direction","phase","useEffect","n","dots","baseStyle","perDotDelay","_","i","ProgressOverlay","spin","text","busy","useAuth","Spin","ProtectedLayout","reauthWithPin","ScreenProtectProvider","pin","isLocal","ConfigProvider","Outlet","PublicLayout","TabContainer","tab","isActive","instance","params","Suspense","React","TabContainer$1","memo"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabContainer.d.ts","sourceRoot":"","sources":["../../../src/components/layout/TabContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyB,MAAM,OAAO,CAAC;yFAQzC;IACD,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAwBH,wBAAkC"}