@bwg-ui/core 1.1.15 → 1.1.16

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.
@@ -0,0 +1,36 @@
1
+ "use strict";const e=require("./jsx-runtime-CeSfJrVB.cjs"),h=require("./ScreenProtectContext-CVuXrJm6.cjs"),n=require("react"),b=require("./AuthContext-CXng9fj0.cjs"),p=require("antd"),j=require("react-router-dom"),v=require("./envUtils-CduTHoHu.cjs"),w=require("@ant-design/icons");class E 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:e.jsxRuntimeExports.jsxs("div",{style:{padding:"40px 20px",textAlign:"center",backgroundColor:"#fafafa",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center"},children:[e.jsxRuntimeExports.jsx(p.Result,{status:"error",title:"컴포넌트 로딩 중 오류가 발생했습니다",subTitle:this.state.error?`오류 내용: ${this.state.error.message}`:"알 수 없는 오류가 발생했습니다",extra:[e.jsxRuntimeExports.jsx(p.Button,{type:"primary",icon:e.jsxRuntimeExports.jsx(w.ReloadOutlined,{}),onClick:this.resetError,style:{marginRight:8},children:"다시 시도"},"retry")]}),this.state.error&&e.jsxRuntimeExports.jsxs("details",{style:{marginTop:"20px",textAlign:"left",maxWidth:"600px",backgroundColor:"#fff",padding:"16px",borderRadius:"6px",border:"1px solid #d9d9d9"},children:[e.jsxRuntimeExports.jsx("summary",{style:{cursor:"pointer",fontWeight:"bold"},children:"오류 상세 정보"}),e.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 R=t=>({position:"absolute",inset:0,visibility:t?"visible":"hidden",opacity:t?1:0,transition:"opacity 0.2s ease-in-out",pointerEvents:t?"auto":"none"}),k=({once:t=!0})=>{const{lock:r}=h.useLock(),s=n.useRef(!1);return n.useEffect(()=>{t&&s.current||(s.current=!0,r())},[t,r]),null},P=({isActive:t,flagged:r,tabKey:s,onUnlock:i,children:l})=>{const o=n.useRef(null),[d,x]=n.useState(!1),a=n.useCallback(c=>{o.current=c,x(!!c)},[]),m=R(t);return e.jsxRuntimeExports.jsx("div",{ref:a,style:m,children:d?e.jsxRuntimeExports.jsxs(h.ScreenProtectProvider,{idleMs:Number.POSITIVE_INFINITY,persistLocked:!1,overlayScope:"scoped",overlayPosition:"absolute",eventTarget:o.current,overlayId:`tab-overlay-${s}`,onUnlock:async()=>(i(),!0),children:[t&&r?e.jsxRuntimeExports.jsx(k,{once:!0}):null,l]}):l})},f="bwg-dot-line-wave-v4";function S(){if(typeof document>"u"||document.getElementById(f))return;const t=document.createElement("style");t.id=f,t.textContent=`
2
+ .bwg-dotline {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ gap: var(--bwg-gap, 12px);
6
+ height: calc(var(--bwg-size, 12px) + 2 * var(--bwg-amp, 12px));
7
+ line-height: 0;
8
+ }
9
+ .bwg-dotline .dot {
10
+ width: var(--bwg-size, 12px);
11
+ height: var(--bwg-size, 12px);
12
+ border-radius: 50%;
13
+ background: currentColor;
14
+ will-change: transform, opacity;
15
+ filter: drop-shadow(0 1px 2px rgba(0,0,0,.12));
16
+ animation: bwg-dotline-sine var(--bwg-speed, 780ms) linear infinite;
17
+ }
18
+
19
+ /* sin(θ) 근사: 0, 45, 90, 135, 180, 225, 270, 315, 360deg */
20
+ @keyframes bwg-dotline-sine {
21
+ 0% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
22
+ 12.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }
23
+ 25% { transform: translate3d(0, calc(-1 * var(--bwg-amp, 12px)), 0) scale(1.06); opacity: 1; }
24
+ 37.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }
25
+ 50% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
26
+ 62.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }
27
+ 75% { transform: translate3d(0, calc( 1 * var(--bwg-amp, 12px)), 0) scale(.96); opacity: .76; }
28
+ 87.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }
29
+ 100% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
30
+ }
31
+
32
+ @media (prefers-reduced-motion: reduce) {
33
+ .bwg-dotline .dot { animation: none; }
34
+ }
35
+ `,document.head.appendChild(t)}const C=({colors:t=["#DAD3FF","#B3A6FF","#9380FF","#816BFA"],count:r,size:s=12,gap:i=10,amp:l=16,speedMs:o=900,direction:d="ltr",phase:x=.7})=>{n.useEffect(()=>{S()},[]);const a=r??t.length,m=Array.from({length:a}),c={"--bwg-size":`${s}px`,"--bwg-gap":`${i}px`,"--bwg-amp":`${l}px`,"--bwg-speed":`${o}ms`},y=o/a*x;return e.jsxRuntimeExports.jsx("span",{className:"bwg-dotline",role:"img","aria-label":"loading",style:c,children:m.map((B,u)=>e.jsxRuntimeExports.jsx("span",{className:"dot",style:{backgroundColor:t[u%t.length],animationDelay:d==="ltr"?`${u*y}ms`:`${(a-1-u)*y}ms`}},u))})},g=({spin:t=null,text:r="인증중..."})=>{const{busy:s}=b.useAuth();return t??s?e.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:[e.jsxRuntimeExports.jsx(p.Spin,{indicator:e.jsxRuntimeExports.jsx(C,{colors:["#DAD3FF","#B3A6FF","#9380FF","#816BFA"],size:12,gap:10,amp:16,speedMs:900,phase:.75,direction:"ltr"})}),e.jsxRuntimeExports.jsx("span",{className:"bwg-spin-txt",style:{marginTop:"15px"},children:r})]}):null},D=()=>{const{reauthWithPin:t}=b.useAuth();return e.jsxRuntimeExports.jsx(h.ScreenProtectProvider,{idleMs:30*6e4,onUnlock:async r=>v.isLocal?!0:!!r&&await t(r),children:e.jsxRuntimeExports.jsx(p.ConfigProvider,{getPopupContainer:()=>document.getElementById("app-shell")||document.body,children:e.jsxRuntimeExports.jsxs("div",{id:"app-shell",children:[e.jsxRuntimeExports.jsx(g,{}),e.jsxRuntimeExports.jsx(j.Outlet,{})]})})})},F=()=>e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx(g,{}),e.jsxRuntimeExports.jsx(j.Outlet,{})]}),I=({isActive:t,instance:r,params:s})=>e.jsxRuntimeExports.jsx("div",{style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",visibility:t?"visible":"hidden",opacity:t?1:0,transition:"opacity 0.2s ease-in-out",pointerEvents:t?"auto":"none"},children:e.jsxRuntimeExports.jsx(E,{children:e.jsxRuntimeExports.jsx(n.Suspense,{fallback:null,children:r&&n.createElement(r,{params:s})})})}),L=n.memo(I);exports.ErrorBound=E;exports.PrivateProtectedOverlay=P;exports.ProgressOverlay=g;exports.ProtectedLayout=D;exports.PublicLayout=F;exports.ViewContainer=L;
36
+ //# sourceMappingURL=ViewContainer-BJQtASUE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewContainer-BJQtASUE.cjs","sources":["../../src/components/layout/ErrorBound.tsx","../../src/components/layout/PrivateProtectedOverlay.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 { ScreenProtectProvider, useLock } from \"@/provider/contexts/ScreenProtectContext\";\r\nimport { useCallback, useEffect, useRef, useState } from \"react\";\r\n\r\n// ──────────────────────────────────────────────\r\n// 공통 스타일 유틸\r\n// ──────────────────────────────────────────────\r\nconst createTabStyle = (isActive: boolean) => ({\r\n position: 'absolute' as const,\r\n inset: 0,\r\n visibility: isActive ? ('visible' as const) : ('hidden' as const),\r\n opacity: isActive ? 1 : 0,\r\n transition: 'opacity 0.2s ease-in-out',\r\n pointerEvents: isActive ? ('auto' as const) : ('none' as const),\r\n });\r\n\r\n// ──────────────────────────────────────────────\r\n// AutoLock (활성 탭일 때 잠금 트리거)\r\n// ──────────────────────────────────────────────\r\nconst AutoLock: React.FC<{ once?: boolean }> = ({ once = true }) => {\r\n const { lock } = useLock();\r\n const called = useRef(false);\r\n useEffect(() => {\r\n if (once && called.current) return;\r\n called.current = true;\r\n lock();\r\n }, [once, lock]);\r\n return null;\r\n };\r\n\r\n// ──────────────────────────────────────────────\r\n// PrivateProtectedOverlay (개인정보 포함 화면 보호레이어)\r\n// ──────────────────────────────────────────────\r\nconst PrivateProtectedOverlay: React.FC<{\r\n isActive: boolean;\r\n flagged: boolean;\r\n tabKey: string;\r\n onUnlock: () => void;\r\n children: React.ReactNode;\r\n }> = ({ isActive, flagged, tabKey, onUnlock, children }) => {\r\n const shellRef = useRef<HTMLDivElement>(null);\r\n const [ready, setReady] = useState(false);\r\n \r\n const setShellRef = useCallback((el: HTMLDivElement | null) => {\r\n (shellRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\r\n setReady(!!el);\r\n }, []);\r\n \r\n const shellStyle = createTabStyle(isActive);\r\n \r\n return (\r\n <div ref={setShellRef} style={shellStyle}>\r\n {ready ? (\r\n <ScreenProtectProvider\r\n idleMs={Number.POSITIVE_INFINITY}\r\n persistLocked={false}\r\n overlayScope=\"scoped\"\r\n overlayPosition=\"absolute\"\r\n eventTarget={shellRef.current!}\r\n overlayId={`tab-overlay-${tabKey}`}\r\n onUnlock={async () => {\r\n onUnlock();\r\n return true;\r\n }}\r\n >\r\n {isActive && flagged ? <AutoLock once /> : null}\r\n {children}\r\n </ScreenProtectProvider>\r\n ) : (\r\n children\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n export default PrivateProtectedOverlay;","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","createTabStyle","isActive","AutoLock","once","lock","useLock","called","useRef","useEffect","PrivateProtectedOverlay","flagged","tabKey","onUnlock","children","shellRef","ready","setReady","useState","setShellRef","useCallback","el","shellStyle","ScreenProtectProvider","DOTLINE_STYLE_ID","ensureDotLineWaveStylesV4","style","DotLineSmoothIndicator","colors","count","size","gap","amp","speedMs","direction","phase","n","dots","baseStyle","perDotDelay","_","i","ProgressOverlay","spin","text","busy","useAuth","Spin","ProtectedLayout","reauthWithPin","pin","isLocal","ConfigProvider","Outlet","PublicLayout","ViewContainer","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,CC9LA,MAAMI,EAAkBC,IAAuB,CAC3C,SAAU,WACV,MAAO,EACP,WAAYA,EAAY,UAAuB,SAC/C,QAASA,EAAW,EAAI,EACxB,WAAY,2BACZ,cAAeA,EAAY,OAAoB,MACjD,GAKIC,EAAyC,CAAC,CAAE,KAAAC,EAAO,MAAW,CAChE,KAAM,CAAE,KAAAC,CAAA,EAASC,UAAA,EACXC,EAASC,EAAAA,OAAO,EAAK,EAC3BC,OAAAA,EAAAA,UAAU,IAAM,CACVL,GAAQG,EAAO,UACnBA,EAAO,QAAU,GACjBF,EAAA,EACF,EAAG,CAACD,EAAMC,CAAI,CAAC,EACR,IACT,EAKIK,EAMC,CAAC,CAAE,SAAAR,EAAU,QAAAS,EAAS,OAAAC,EAAQ,SAAAC,EAAU,SAAAC,KAAe,CAC1D,MAAMC,EAAWP,EAAAA,OAAuB,IAAI,EACtC,CAACQ,EAAOC,CAAQ,EAAIC,EAAAA,SAAS,EAAK,EAElCC,EAAcC,cAAaC,GAA8B,CAC5DN,EAA2D,QAAUM,EACtEJ,EAAS,CAAC,CAACI,CAAE,CACf,EAAG,CAAA,CAAE,EAECC,EAAarB,EAAeC,CAAQ,EAE1C,+BACG,MAAA,CAAI,IAAKiB,EAAa,MAAOG,EAC3B,SAAAN,EACCpB,EAAAA,kBAAAA,KAAC2B,EAAAA,sBAAA,CACC,OAAQ,OAAO,kBACf,cAAe,GACf,aAAa,SACb,gBAAgB,WAChB,YAAaR,EAAS,QACtB,UAAW,eAAeH,CAAM,GAChC,SAAU,UACRC,EAAA,EACO,IAGR,SAAA,CAAAX,GAAYS,EAAUd,wBAACM,EAAA,CAAS,KAAI,GAAC,EAAK,KAC1CW,CAAA,CAAA,CAAA,EAGHA,CAAA,CAEJ,CAEJ,ECpEIU,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,CACJ1B,EAAAA,UAAU,IAAM,CAAEgB,EAAA,CAA6B,EAAG,CAAA,CAAE,EAEpD,MAAMW,EAAIP,GAASD,EAAO,OACpBS,EAAO,MAAM,KAAK,CAAE,OAAQD,EAAG,EAC/BE,EAAY,CACf,aAAsB,GAAGR,CAAI,KAC7B,YAAqB,GAAGC,CAAG,KAC3B,YAAqB,GAAGC,CAAG,KAC3B,cAAuB,GAAGC,CAAO,IAAA,EAG9BM,EAAeN,EAAUG,EAAKD,EAEpC,OACEtC,EAAAA,kBAAAA,IAAC,OAAA,CAAK,UAAU,cAAc,KAAK,MAAM,aAAW,UAAU,MAAOyC,EAClE,SAAAD,EAAK,IAAI,CAACG,EAAGC,IACZ5C,EAAAA,kBAAAA,IAAC,OAAA,CAEC,UAAU,MACV,MAAO,CACL,gBAAiB+B,EAAOa,EAAIb,EAAO,MAAM,EACzC,eACEM,IAAc,MACV,GAAIO,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,EAGpBjD,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,IAACkD,EAAAA,KAAA,CACC,UACElD,EAAAA,kBAAAA,IAAC8B,EAAA,CACC,OAAQ,CAAC,UAAW,UAAW,UAAW,SAAS,EACnD,KAAM,GACN,IAAK,GACL,IAAK,GACL,QAAS,IACT,MAAO,IACP,UAAU,KAAA,CAAA,CACZ,CAAA,EAGF9B,EAAAA,kBAAAA,IAAC,QAAK,UAAU,eAAe,MAAO,CAAC,UAAU,MAAA,EAAU,SAAA+C,CAAA,CAAK,CAAA,CAAA,CAAA,EApCpD,IAuClB,ECzIII,EAAkB,IAAM,CAC1B,KAAM,CAAE,cAAAC,CAAA,EAAkBH,UAAA,EAG1B,+BACGvB,EAAAA,sBAAA,CAAsB,OAAQ,GAAK,IAAQ,SAAU,MAAO2B,GACxDC,UAEM,GAEF,CAAC,CAACD,GAAQ,MAAMD,EAAcC,CAAG,EAGxC,SAAArD,wBAACuD,EAAAA,eAAA,CAAe,kBAAmB,IAAM,SAAS,eAAe,WAAW,GAAK,SAAS,KACxF,SAAAxD,EAAAA,kBAAAA,KAAC,MAAA,CAAI,GAAG,YACN,SAAA,CAAAC,EAAAA,kBAAAA,IAAC6C,EAAA,EAAgB,0BAChBW,EAAAA,OAAA,CAAA,CAAO,CAAA,CAAA,CACV,EACF,EACF,CAEJ,ECzBIC,EAAe,6BAEd,MAAA,CACC,SAAA,CAAAzD,EAAAA,kBAAAA,IAAC6C,EAAA,EAAgB,0BAChBW,EAAAA,OAAA,CAAA,CAAO,CAAA,EACV,ECTAE,EAAgB,CAAC,CACnB,SAAArD,EACA,SAAAsD,EACA,OAAAC,CACF,IAKa5D,EAAAA,kBAAAA,IAAC,MAAA,CACd,MAAO,CACL,SAAU,WACV,IAAK,EACL,KAAM,EACN,MAAO,OACP,OAAQ,OACR,WAAYK,EAAW,UAAY,SACnC,QAASA,EAAW,EAAI,EACxB,WAAY,2BACZ,cAAeA,EAAW,OAAS,MAAA,EAGrC,iCAACX,EAAA,CACC,SAAAM,EAAAA,kBAAAA,IAAC6D,EAAAA,SAAA,CACC,SAAU,KAET,YAAYC,EAAM,cAAcH,EAAU,CAAE,OAAAC,EAAe,CAAA,CAAA,CAC9D,CACF,CAAA,CAAA,EAIFG,EAAeC,EAAAA,KAAKN,CAAa"}
@@ -1,12 +1,12 @@
1
1
  import { j as e } from "./jsx-runtime-Dpn_P65e.js";
2
- import { u as d } from "./AuthContext-Ei2P-z4d.js";
3
- import { S as b } from "./ScreenProtectContext-3my4PHFa.js";
4
- import { Result as y, Button as w, Spin as v, ConfigProvider as j } from "antd";
5
- import { Outlet as p } from "react-router-dom";
6
- import { i as E } from "./envUtils-C9Gf5aek.js";
7
- import C, { Component as D, useEffect as F, memo as k, Suspense as S } from "react";
8
- import { ReloadOutlined as B } from "@ant-design/icons";
9
- class P extends D {
2
+ import { S as g, u as v } from "./ScreenProtectContext-3my4PHFa.js";
3
+ import j, { Component as E, useRef as x, useState as k, useCallback as S, useEffect as f, memo as C, Suspense as F } from "react";
4
+ import { u as y } from "./AuthContext-Ei2P-z4d.js";
5
+ import { Result as D, Button as I, Spin as P, ConfigProvider as B } from "antd";
6
+ import { Outlet as b } from "react-router-dom";
7
+ import { i as L } from "./envUtils-C9Gf5aek.js";
8
+ import { ReloadOutlined as R } from "@ant-design/icons";
9
+ class T extends E {
10
10
  constructor(r) {
11
11
  super(r), this.resetError = () => {
12
12
  this.setState({ hasError: !1, error: void 0, errorInfo: void 0 });
@@ -15,10 +15,10 @@ class P extends D {
15
15
  static getDerivedStateFromError(r) {
16
16
  return { hasError: !0, error: r };
17
17
  }
18
- componentDidCatch(r, a) {
19
- console.error("ErrorBound caught an error:", r, a), this.setState({
18
+ componentDidCatch(r, s) {
19
+ console.error("ErrorBound caught an error:", r, s), this.setState({
20
20
  error: r,
21
- errorInfo: a
21
+ errorInfo: s
22
22
  });
23
23
  }
24
24
  render() {
@@ -36,17 +36,17 @@ class P extends D {
36
36
  },
37
37
  children: [
38
38
  /* @__PURE__ */ e.jsx(
39
- y,
39
+ D,
40
40
  {
41
41
  status: "error",
42
42
  title: "컴포넌트 로딩 중 오류가 발생했습니다",
43
43
  subTitle: this.state.error ? `오류 내용: ${this.state.error.message}` : "알 수 없는 오류가 발생했습니다",
44
44
  extra: [
45
45
  /* @__PURE__ */ e.jsx(
46
- w,
46
+ I,
47
47
  {
48
48
  type: "primary",
49
- icon: /* @__PURE__ */ e.jsx(B, {}),
49
+ icon: /* @__PURE__ */ e.jsx(R, {}),
50
50
  onClick: this.resetError,
51
51
  style: { marginRight: 8 },
52
52
  children: "다시 시도"
@@ -91,11 +91,43 @@ class P extends D {
91
91
  ) : this.props.children;
92
92
  }
93
93
  }
94
- const c = "bwg-dot-line-wave-v4";
95
- function A() {
96
- if (typeof document > "u" || document.getElementById(c)) return;
94
+ const $ = (t) => ({
95
+ position: "absolute",
96
+ inset: 0,
97
+ visibility: t ? "visible" : "hidden",
98
+ opacity: t ? 1 : 0,
99
+ transition: "opacity 0.2s ease-in-out",
100
+ pointerEvents: t ? "auto" : "none"
101
+ }), z = ({ once: t = !0 }) => {
102
+ const { lock: r } = v(), s = x(!1);
103
+ return f(() => {
104
+ t && s.current || (s.current = !0, r());
105
+ }, [t, r]), null;
106
+ }, J = ({ isActive: t, flagged: r, tabKey: s, onUnlock: o, children: i }) => {
107
+ const a = x(null), [d, p] = k(!1), n = S((l) => {
108
+ a.current = l, p(!!l);
109
+ }, []), u = $(t);
110
+ return /* @__PURE__ */ e.jsx("div", { ref: n, style: u, children: d ? /* @__PURE__ */ e.jsxs(
111
+ g,
112
+ {
113
+ idleMs: Number.POSITIVE_INFINITY,
114
+ persistLocked: !1,
115
+ overlayScope: "scoped",
116
+ overlayPosition: "absolute",
117
+ eventTarget: a.current,
118
+ overlayId: `tab-overlay-${s}`,
119
+ onUnlock: async () => (o(), !0),
120
+ children: [
121
+ t && r ? /* @__PURE__ */ e.jsx(z, { once: !0 }) : null,
122
+ i
123
+ ]
124
+ }
125
+ ) : i });
126
+ }, h = "bwg-dot-line-wave-v4";
127
+ function N() {
128
+ if (typeof document > "u" || document.getElementById(h)) return;
97
129
  const t = document.createElement("style");
98
- t.id = c, t.textContent = `
130
+ t.id = h, t.textContent = `
99
131
  .bwg-dotline {
100
132
  display: inline-flex;
101
133
  align-items: center;
@@ -131,39 +163,39 @@ function A() {
131
163
  }
132
164
  `, document.head.appendChild(t);
133
165
  }
134
- const I = ({
166
+ const A = ({
135
167
  colors: t = ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
136
168
  count: r,
137
- size: a = 12,
169
+ size: s = 12,
138
170
  gap: o = 10,
139
- amp: u = 16,
140
- speedMs: i = 900,
141
- direction: g = "ltr",
142
- phase: h = 0.7
171
+ amp: i = 16,
172
+ speedMs: a = 900,
173
+ direction: d = "ltr",
174
+ phase: p = 0.7
143
175
  }) => {
144
- F(() => {
145
- A();
176
+ f(() => {
177
+ N();
146
178
  }, []);
147
- const n = r ?? t.length, x = Array.from({ length: n }), f = {
148
- "--bwg-size": `${a}px`,
179
+ const n = r ?? t.length, u = Array.from({ length: n }), l = {
180
+ "--bwg-size": `${s}px`,
149
181
  "--bwg-gap": `${o}px`,
150
- "--bwg-amp": `${u}px`,
151
- "--bwg-speed": `${i}ms`
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(
182
+ "--bwg-amp": `${i}px`,
183
+ "--bwg-speed": `${a}ms`
184
+ }, m = a / n * p;
185
+ return /* @__PURE__ */ e.jsx("span", { className: "bwg-dotline", role: "img", "aria-label": "loading", style: l, children: u.map((_, c) => /* @__PURE__ */ e.jsx(
154
186
  "span",
155
187
  {
156
188
  className: "dot",
157
189
  style: {
158
- backgroundColor: t[s % t.length],
159
- animationDelay: g === "ltr" ? `${s * l}ms` : `${(n - 1 - s) * l}ms`
190
+ backgroundColor: t[c % t.length],
191
+ animationDelay: d === "ltr" ? `${c * m}ms` : `${(n - 1 - c) * m}ms`
160
192
  }
161
193
  },
162
- s
194
+ c
163
195
  )) });
164
- }, m = ({ spin: t = null, text: r = "인증중..." }) => {
165
- const { busy: a } = d();
166
- return t ?? a ? /* @__PURE__ */ e.jsxs(
196
+ }, w = ({ spin: t = null, text: r = "인증중..." }) => {
197
+ const { busy: s } = y();
198
+ return t ?? s ? /* @__PURE__ */ e.jsxs(
167
199
  "div",
168
200
  {
169
201
  style: {
@@ -187,10 +219,10 @@ const I = ({
187
219
  role: "status",
188
220
  children: [
189
221
  /* @__PURE__ */ e.jsx(
190
- v,
222
+ P,
191
223
  {
192
224
  indicator: /* @__PURE__ */ e.jsx(
193
- I,
225
+ A,
194
226
  {
195
227
  colors: ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
196
228
  size: 12,
@@ -207,19 +239,19 @@ const I = ({
207
239
  ]
208
240
  }
209
241
  ) : null;
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
- /* @__PURE__ */ e.jsx(m, {}),
214
- /* @__PURE__ */ e.jsx(p, {})
242
+ }, K = () => {
243
+ const { reauthWithPin: t } = y();
244
+ return /* @__PURE__ */ e.jsx(g, { idleMs: 30 * 6e4, onUnlock: async (r) => L ? !0 : !!r && await t(r), children: /* @__PURE__ */ e.jsx(B, { getPopupContainer: () => document.getElementById("app-shell") || document.body, children: /* @__PURE__ */ e.jsxs("div", { id: "app-shell", children: [
245
+ /* @__PURE__ */ e.jsx(w, {}),
246
+ /* @__PURE__ */ e.jsx(b, {})
215
247
  ] }) }) });
216
- }, U = () => /* @__PURE__ */ e.jsxs("div", { children: [
217
- /* @__PURE__ */ e.jsx(m, {}),
218
- /* @__PURE__ */ e.jsx(p, {})
219
- ] }), $ = ({
248
+ }, Q = () => /* @__PURE__ */ e.jsxs("div", { children: [
249
+ /* @__PURE__ */ e.jsx(w, {}),
250
+ /* @__PURE__ */ e.jsx(b, {})
251
+ ] }), O = ({
220
252
  isActive: t,
221
253
  instance: r,
222
- params: a
254
+ params: s
223
255
  }) => /* @__PURE__ */ e.jsx(
224
256
  "div",
225
257
  {
@@ -234,20 +266,21 @@ const I = ({
234
266
  transition: "opacity 0.2s ease-in-out",
235
267
  pointerEvents: t ? "auto" : "none"
236
268
  },
237
- children: /* @__PURE__ */ e.jsx(P, { children: /* @__PURE__ */ e.jsx(
238
- S,
269
+ children: /* @__PURE__ */ e.jsx(T, { children: /* @__PURE__ */ e.jsx(
270
+ F,
239
271
  {
240
272
  fallback: null,
241
- children: r && C.createElement(r, { params: a })
273
+ children: r && j.createElement(r, { params: s })
242
274
  }
243
275
  ) })
244
276
  }
245
- ), Y = k($);
277
+ ), X = C(O);
246
278
  export {
247
- P as E,
248
- m as P,
249
- Y as V,
250
- M as a,
251
- U as b
279
+ T as E,
280
+ J as P,
281
+ X as V,
282
+ w as a,
283
+ K as b,
284
+ Q as c
252
285
  };
253
- //# sourceMappingURL=ViewContainer-v1V83KBq.js.map
286
+ //# sourceMappingURL=ViewContainer-D6ne-F5v.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewContainer-D6ne-F5v.js","sources":["../../src/components/layout/ErrorBound.tsx","../../src/components/layout/PrivateProtectedOverlay.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 { ScreenProtectProvider, useLock } from \"@/provider/contexts/ScreenProtectContext\";\r\nimport { useCallback, useEffect, useRef, useState } from \"react\";\r\n\r\n// ──────────────────────────────────────────────\r\n// 공통 스타일 유틸\r\n// ──────────────────────────────────────────────\r\nconst createTabStyle = (isActive: boolean) => ({\r\n position: 'absolute' as const,\r\n inset: 0,\r\n visibility: isActive ? ('visible' as const) : ('hidden' as const),\r\n opacity: isActive ? 1 : 0,\r\n transition: 'opacity 0.2s ease-in-out',\r\n pointerEvents: isActive ? ('auto' as const) : ('none' as const),\r\n });\r\n\r\n// ──────────────────────────────────────────────\r\n// AutoLock (활성 탭일 때 잠금 트리거)\r\n// ──────────────────────────────────────────────\r\nconst AutoLock: React.FC<{ once?: boolean }> = ({ once = true }) => {\r\n const { lock } = useLock();\r\n const called = useRef(false);\r\n useEffect(() => {\r\n if (once && called.current) return;\r\n called.current = true;\r\n lock();\r\n }, [once, lock]);\r\n return null;\r\n };\r\n\r\n// ──────────────────────────────────────────────\r\n// PrivateProtectedOverlay (개인정보 포함 화면 보호레이어)\r\n// ──────────────────────────────────────────────\r\nconst PrivateProtectedOverlay: React.FC<{\r\n isActive: boolean;\r\n flagged: boolean;\r\n tabKey: string;\r\n onUnlock: () => void;\r\n children: React.ReactNode;\r\n }> = ({ isActive, flagged, tabKey, onUnlock, children }) => {\r\n const shellRef = useRef<HTMLDivElement>(null);\r\n const [ready, setReady] = useState(false);\r\n \r\n const setShellRef = useCallback((el: HTMLDivElement | null) => {\r\n (shellRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\r\n setReady(!!el);\r\n }, []);\r\n \r\n const shellStyle = createTabStyle(isActive);\r\n \r\n return (\r\n <div ref={setShellRef} style={shellStyle}>\r\n {ready ? (\r\n <ScreenProtectProvider\r\n idleMs={Number.POSITIVE_INFINITY}\r\n persistLocked={false}\r\n overlayScope=\"scoped\"\r\n overlayPosition=\"absolute\"\r\n eventTarget={shellRef.current!}\r\n overlayId={`tab-overlay-${tabKey}`}\r\n onUnlock={async () => {\r\n onUnlock();\r\n return true;\r\n }}\r\n >\r\n {isActive && flagged ? <AutoLock once /> : null}\r\n {children}\r\n </ScreenProtectProvider>\r\n ) : (\r\n children\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n export default PrivateProtectedOverlay;","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","createTabStyle","isActive","AutoLock","once","lock","useLock","called","useRef","useEffect","PrivateProtectedOverlay","flagged","tabKey","onUnlock","children","shellRef","ready","setReady","useState","setShellRef","useCallback","el","shellStyle","ScreenProtectProvider","DOTLINE_STYLE_ID","ensureDotLineWaveStylesV4","style","DotLineSmoothIndicator","colors","count","size","gap","amp","speedMs","direction","phase","dots","baseStyle","perDotDelay","i","ProgressOverlay","spin","text","busy","useAuth","Spin","ProtectedLayout","reauthWithPin","pin","isLocal","ConfigProvider","Outlet","PublicLayout","ViewContainer","instance","params","Suspense","React","ViewContainer$1","memo"],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- export declare const PrivateProtectedOverlay: React.FC<{
1
+ declare const PrivateProtectedOverlay: React.FC<{
2
2
  isActive: boolean;
3
3
  flagged: boolean;
4
4
  tabKey: string;
5
5
  onUnlock: () => void;
6
6
  children: React.ReactNode;
7
7
  }>;
8
+ export default PrivateProtectedOverlay;
8
9
  //# sourceMappingURL=PrivateProtectedOverlay.d.ts.map
@@ -1 +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
+ {"version":3,"file":"PrivateProtectedOverlay.d.ts","sourceRoot":"","sources":["../../../src/components/layout/PrivateProtectedOverlay.tsx"],"names":[],"mappings":"AAgCA,QAAA,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC;IACpC,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;AAEF,eAAe,uBAAuB,CAAC"}
@@ -1,2 +1,2 @@
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;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/ViewContainer-BJQtASUE.cjs"),r=require("../../chunks/LoadingOverlay-NX9Mo_6n.cjs");exports.ErrorBound=e.ErrorBound;exports.PrivateProtectedOverlay=e.PrivateProtectedOverlay;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
@@ -1,5 +1,6 @@
1
1
  export { ErrorBound } from './ErrorBound';
2
2
  export { default as LoadingOverlay } from './LoadingOverlay';
3
+ export { default as PrivateProtectedOverlay } from './PrivateProtectedOverlay';
3
4
  export { default as ProgressOverlay } from './ProgressOverlay';
4
5
  export { default as ProtectedLayout } from './ProtectLayout';
5
6
  export { default as PublicLayout } from './PublicLayout';
@@ -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,aAAa,EAAE,MAAM,iBAAiB,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,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,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,12 @@
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";
1
+ import { E as e, P as o, a as t, b as s, c as P, V as i } from "../../chunks/ViewContainer-D6ne-F5v.js";
2
+ import { L as c } from "../../chunks/LoadingOverlay-CAO6_FuF.js";
3
3
  export {
4
- o as ErrorBound,
5
- u as LoadingOverlay,
6
- e as ProgressOverlay,
4
+ e as ErrorBound,
5
+ c as LoadingOverlay,
6
+ o as PrivateProtectedOverlay,
7
+ t as ProgressOverlay,
7
8
  s as ProtectedLayout,
8
- t as PublicLayout,
9
+ P as PublicLayout,
9
10
  i as ViewContainer
10
11
  };
11
12
  //# 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-DZeC8Xgh.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.BwgEditor;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;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./stores/index.cjs"),t=require("./chunks/SSOHandler-DZeC8Xgh.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-BJQtASUE.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.BwgEditor;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.PrivateProtectedOverlay=g.PrivateProtectedOverlay;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