@bwg-ui/core 1.1.10 → 1.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/dist/chunks/BwgLargeUploader-CgrJUwFW.cjs +3 -0
  2. package/dist/chunks/BwgLargeUploader-CgrJUwFW.cjs.map +1 -0
  3. package/dist/chunks/{BwgLargeUploader-B5EtYKUz.js → BwgLargeUploader-Nx2-wiD8.js} +802 -776
  4. package/dist/chunks/BwgLargeUploader-Nx2-wiD8.js.map +1 -0
  5. package/dist/chunks/{FileUtils-CaU9Bzu2.js → FileUtils-Bbz3AvQn.js} +2 -2
  6. package/dist/chunks/{FileUtils-CaU9Bzu2.js.map → FileUtils-Bbz3AvQn.js.map} +1 -1
  7. package/dist/chunks/FileUtils-D73GVmB8.cjs +2 -0
  8. package/dist/chunks/{FileUtils-BweAWoJt.cjs.map → FileUtils-D73GVmB8.cjs.map} +1 -1
  9. package/dist/chunks/SSOHandler-CZHPiuEh.js +25397 -0
  10. package/dist/chunks/SSOHandler-CZHPiuEh.js.map +1 -0
  11. package/dist/chunks/SSOHandler-rq0OGrpX.cjs +236 -0
  12. package/dist/chunks/SSOHandler-rq0OGrpX.cjs.map +1 -0
  13. package/dist/chunks/{SearchBoxContext-CY4tAQcg.js → SearchBoxContext-BxtHF9BO.js} +2 -2
  14. package/dist/chunks/{SearchBoxContext-CY4tAQcg.js.map → SearchBoxContext-BxtHF9BO.js.map} +1 -1
  15. package/dist/chunks/SearchBoxContext-Cpr9xa1S.cjs +2 -0
  16. package/dist/chunks/{SearchBoxContext-DDBY44Wr.cjs.map → SearchBoxContext-Cpr9xa1S.cjs.map} +1 -1
  17. package/dist/chunks/TabContainer-B7-6AQXV.js +254 -0
  18. package/dist/chunks/TabContainer-B7-6AQXV.js.map +1 -0
  19. package/dist/chunks/TabContainer-Dx2PVShz.cjs +36 -0
  20. package/dist/chunks/TabContainer-Dx2PVShz.cjs.map +1 -0
  21. package/dist/chunks/_commonjsHelpers-DKOUU3wS.cjs +2 -0
  22. package/dist/chunks/_commonjsHelpers-DKOUU3wS.cjs.map +1 -0
  23. package/dist/chunks/_commonjsHelpers-DaMA6jEr.js +9 -0
  24. package/dist/chunks/_commonjsHelpers-DaMA6jEr.js.map +1 -0
  25. package/dist/chunks/apiUtils-C45AWfu-.js +957 -0
  26. package/dist/chunks/apiUtils-C45AWfu-.js.map +1 -0
  27. package/dist/chunks/apiUtils-Cbg6NQLv.cjs +4 -0
  28. package/dist/chunks/apiUtils-Cbg6NQLv.cjs.map +1 -0
  29. package/dist/chunks/codeStore-BGLhSpAM.cjs +2 -0
  30. package/dist/chunks/{codeStore-KPL92rcv.cjs.map → codeStore-BGLhSpAM.cjs.map} +1 -1
  31. package/dist/chunks/{codeStore-IIp25egq.js → codeStore-BzT5wSd9.js} +2 -2
  32. package/dist/chunks/{codeStore-IIp25egq.js.map → codeStore-BzT5wSd9.js.map} +1 -1
  33. package/dist/chunks/commonUtils-BH6QwGUb.cjs +2 -0
  34. package/dist/chunks/commonUtils-BH6QwGUb.cjs.map +1 -0
  35. package/dist/chunks/{commonUtils-Cvx6_eK2.js → commonUtils-Bb16Yqjk.js} +24 -25
  36. package/dist/chunks/commonUtils-Bb16Yqjk.js.map +1 -0
  37. package/dist/chunks/envUtils-C9Gf5aek.js.map +1 -1
  38. package/dist/chunks/envUtils-CduTHoHu.cjs.map +1 -1
  39. package/dist/chunks/favoriteStore-3YceyayF.cjs +2 -0
  40. package/dist/chunks/favoriteStore-3YceyayF.cjs.map +1 -0
  41. package/dist/chunks/favoriteStore-C9utQ6sm.js +112 -0
  42. package/dist/chunks/favoriteStore-C9utQ6sm.js.map +1 -0
  43. package/dist/chunks/{popupStore-D8RI04bU.js → popupStore-DmFbkkjd.js} +19 -18
  44. package/dist/chunks/popupStore-DmFbkkjd.js.map +1 -0
  45. package/dist/chunks/popupStore-DnWLaQ70.cjs +2 -0
  46. package/dist/chunks/popupStore-DnWLaQ70.cjs.map +1 -0
  47. package/dist/chunks/usePopup-C8FrbrDD.cjs +2 -0
  48. package/dist/chunks/{UtilsContext-JSHHfnWl.js.map → usePopup-C8FrbrDD.cjs.map} +1 -1
  49. package/dist/chunks/{UtilsContext-JSHHfnWl.js → usePopup-pfh-ajfP.js} +82 -82
  50. package/dist/chunks/usePopup-pfh-ajfP.js.map +1 -0
  51. package/dist/components/common/BwgDetail.d.ts +5 -0
  52. package/dist/components/common/BwgDetail.d.ts.map +1 -0
  53. package/dist/components/common/BwgDrawer.d.ts.map +1 -1
  54. package/dist/components/common/BwgEditor.d.ts +7 -0
  55. package/dist/components/common/BwgEditor.d.ts.map +1 -0
  56. package/dist/components/common/BwgView.d.ts.map +1 -1
  57. package/dist/components/common/index.cjs +1 -1
  58. package/dist/components/common/index.d.ts +3 -1
  59. package/dist/components/common/index.d.ts.map +1 -1
  60. package/dist/components/common/index.js +27 -25
  61. package/dist/components/core/BwgDatePicker.d.ts +1 -1
  62. package/dist/components/core/BwgDatePicker.d.ts.map +1 -1
  63. package/dist/components/core/BwgRangePicker.d.ts +1 -1
  64. package/dist/components/core/BwgRangePicker.d.ts.map +1 -1
  65. package/dist/components/core/BwgUploader.d.ts.map +1 -1
  66. package/dist/components/core/index.cjs +1 -1
  67. package/dist/components/core/index.js +1 -1
  68. package/dist/components/layout/ErrorBound.d.ts +29 -0
  69. package/dist/components/layout/ErrorBound.d.ts.map +1 -0
  70. package/dist/components/layout/TabContainer.d.ts +9 -0
  71. package/dist/components/layout/TabContainer.d.ts.map +1 -0
  72. package/dist/components/layout/index.cjs +1 -1
  73. package/dist/components/layout/index.d.ts +3 -1
  74. package/dist/components/layout/index.d.ts.map +1 -1
  75. package/dist/components/layout/index.js +6 -4
  76. package/dist/index.cjs +1 -1
  77. package/dist/index.js +304 -299
  78. package/dist/provider/index.cjs +1 -1
  79. package/dist/provider/index.js +2 -2
  80. package/dist/stores/favoriteStore.d.ts.map +1 -1
  81. package/dist/stores/index.cjs +1 -1
  82. package/dist/stores/index.cjs.map +1 -1
  83. package/dist/stores/index.d.ts +3 -1
  84. package/dist/stores/index.d.ts.map +1 -1
  85. package/dist/stores/index.js +18 -16
  86. package/dist/stores/index.js.map +1 -1
  87. package/dist/stores/loadingStore.d.ts +9 -0
  88. package/dist/stores/loadingStore.d.ts.map +1 -0
  89. package/dist/stores/menuViewStore.d.ts +28 -3
  90. package/dist/stores/menuViewStore.d.ts.map +1 -1
  91. package/dist/stores/popupStore.d.ts.map +1 -1
  92. package/dist/styles/assets/images/header/icon/ico-bell.svg +3 -3
  93. package/dist/styles/assets/images/header/icon/ico-logout.svg +10 -10
  94. package/dist/styles/assets/images/header/icon/ico-setting.svg +4 -4
  95. package/dist/styles/assets/images/header/icon/ico-sidebar-arrow.svg +3 -3
  96. package/dist/utils/apiUtils.d.ts +3 -2
  97. package/dist/utils/apiUtils.d.ts.map +1 -1
  98. package/dist/utils/index.cjs +1 -1
  99. package/dist/utils/index.d.ts +1 -0
  100. package/dist/utils/index.d.ts.map +1 -1
  101. package/dist/utils/index.js +3 -3
  102. package/dist/utils/notificationUtils.d.ts +0 -1
  103. package/dist/utils/notificationUtils.d.ts.map +1 -1
  104. package/package.json +6 -7
  105. package/dist/chunks/BwgLargeUploader-B5EtYKUz.js.map +0 -1
  106. package/dist/chunks/BwgLargeUploader-BPJcShgF.cjs +0 -3
  107. package/dist/chunks/BwgLargeUploader-BPJcShgF.cjs.map +0 -1
  108. package/dist/chunks/FileUtils-BweAWoJt.cjs +0 -2
  109. package/dist/chunks/PublicLayout-3v46YZdi.cjs +0 -36
  110. package/dist/chunks/PublicLayout-3v46YZdi.cjs.map +0 -1
  111. package/dist/chunks/PublicLayout-B4wGo0ut.js +0 -139
  112. package/dist/chunks/PublicLayout-B4wGo0ut.js.map +0 -1
  113. package/dist/chunks/SSOHandler-C72Do3RD.js +0 -15717
  114. package/dist/chunks/SSOHandler-C72Do3RD.js.map +0 -1
  115. package/dist/chunks/SSOHandler-ColywAGZ.cjs +0 -184
  116. package/dist/chunks/SSOHandler-ColywAGZ.cjs.map +0 -1
  117. package/dist/chunks/SearchBoxContext-DDBY44Wr.cjs +0 -2
  118. package/dist/chunks/UtilsContext-C4tlOndT.cjs +0 -2
  119. package/dist/chunks/UtilsContext-C4tlOndT.cjs.map +0 -1
  120. package/dist/chunks/_commonjsHelpers-C6fGbg64.js +0 -7
  121. package/dist/chunks/_commonjsHelpers-C6fGbg64.js.map +0 -1
  122. package/dist/chunks/_commonjsHelpers-DwGv2jUC.cjs +0 -2
  123. package/dist/chunks/_commonjsHelpers-DwGv2jUC.cjs.map +0 -1
  124. package/dist/chunks/codeStore-KPL92rcv.cjs +0 -2
  125. package/dist/chunks/commonUtils-Cvx6_eK2.js.map +0 -1
  126. package/dist/chunks/commonUtils-DaFg0y7C.cjs +0 -2
  127. package/dist/chunks/commonUtils-DaFg0y7C.cjs.map +0 -1
  128. package/dist/chunks/menuViewStore-DuS0VmkB.cjs +0 -3
  129. package/dist/chunks/menuViewStore-DuS0VmkB.cjs.map +0 -1
  130. package/dist/chunks/menuViewStore-OKcSQq-s.js +0 -343
  131. package/dist/chunks/menuViewStore-OKcSQq-s.js.map +0 -1
  132. package/dist/chunks/popupStore-BEoWGajT.cjs +0 -2
  133. package/dist/chunks/popupStore-BEoWGajT.cjs.map +0 -1
  134. package/dist/chunks/popupStore-D8RI04bU.js.map +0 -1
  135. package/dist/chunks/serviceConfig-9dHegQIK.cjs +0 -3
  136. package/dist/chunks/serviceConfig-9dHegQIK.cjs.map +0 -1
  137. package/dist/chunks/serviceConfig-Dhe7neaj.js +0 -709
  138. package/dist/chunks/serviceConfig-Dhe7neaj.js.map +0 -1
  139. package/scripts/gen-component-registry.js +0 -138
@@ -1,2 +0,0 @@
1
- "use strict";const i=require("react"),n=require("antd"),g=require("./serviceConfig-9dHegQIK.cjs");var a=typeof document<"u"?document.currentScript:null;const h=e=>{try{return new URL(Object.assign({})[`../assets/images/backgrounds/${e}`],typeof document>"u"?require("url").pathToFileURL(__filename).href:a&&a.tagName.toUpperCase()==="SCRIPT"&&a.src||new URL("chunks/FileUtils-BweAWoJt.cjs",document.baseURI).href).href}catch{return l()}},l=()=>"https://images.unsplash.com/photo-1578662996442-48f60103fc96?w=1920&h=1080&fit=crop&crop=center",d=e=>{try{return new URL(Object.assign({})[`../assets/images/logos/${e}`],typeof document>"u"?require("url").pathToFileURL(__filename).href:a&&a.tagName.toUpperCase()==="SCRIPT"&&a.src||new URL("chunks/FileUtils-BweAWoJt.cjs",document.baseURI).href).href}catch{return"/images/default-logo.png"}},f=(e,t="common")=>{try{return new URL(Object.assign({})[`../assets/images/icons/${t}/${e}`],typeof document>"u"?require("url").pathToFileURL(__filename).href:a&&a.tagName.toUpperCase()==="SCRIPT"&&a.src||new URL("chunks/FileUtils-BweAWoJt.cjs",document.baseURI).href).href}catch{return`/images/icons/${t}/default.svg`}},w=e=>{try{return new URL(Object.assign({})[`../assets/images/avatars/${e}`],typeof document>"u"?require("url").pathToFileURL(__filename).href:a&&a.tagName.toUpperCase()==="SCRIPT"&&a.src||new URL("chunks/FileUtils-BweAWoJt.cjs",document.baseURI).href).href}catch{return"/images/avatars/default.png"}},u=e=>new Promise((t,r)=>{const s=new Image;s.onload=()=>t(),s.onerror=()=>r(new Error(`Failed to load image: ${e}`)),s.src=e}),m=(e,t,r)=>{const s=new URL(e);return s.searchParams.set("w",t.toString()),s.searchParams.set("h",r.toString()),s.toString()},p=(e,t)=>{const r=new URL(e);return r.searchParams.set("fm",t),r.toString()},I=(e,t)=>t.map(r=>`${m(e,r,r)} ${r}w`).join(", "),U=(e,t={})=>{const r=new URL(e);return t.width&&r.searchParams.set("w",t.width.toString()),t.height&&r.searchParams.set("h",t.height.toString()),t.format&&r.searchParams.set("fm",t.format),t.quality&&r.searchParams.set("q",t.quality.toString()),r.toString()},S=e=>{const t=e.target;t.src="/images/placeholder.png",t.alt="이미지를 불러올 수 없습니다"},R=e=>{const[t,r]=i.useState(!0),[s,o]=i.useState(!1);return i.useEffect(()=>{r(!0),o(!1),u(e).then(()=>r(!1)).catch(()=>{o(!0),r(!1)})},[e]),{isLoading:t,hasError:s}},C=(e,t,r=30)=>{const s=new Date;s.setTime(s.getTime()+r*24*60*60*1e3),document.cookie=`${e}=${t};expires=${s.toUTCString()};path=/`},E=e=>{const t=e+"=",r=document.cookie.split(";");for(let s=0;s<r.length;s++){let o=r[s];for(;o.charAt(0)===" ";)o=o.substring(1,o.length);if(o.indexOf(t)===0)return o.substring(t.length,o.length)}return null},L=e=>{document.cookie=`${e}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/`},y="krx_ui_theme",_=(e,t=3)=>{n.message.success({content:e,duration:t})},c=(e,t=5)=>{n.message.error({content:e,duration:t})},k=(e="처리중...")=>n.message.loading({content:e,duration:0}),$=e=>{n.message.destroy(e)},F=()=>{n.message.destroy()},P=(e,t="처리 중 오류가 발생했습니다.")=>{const r=e?.response?.data?.message||e?.message||t;c(r)},T=(e="저장")=>{_(`${e}이 완료되었습니다.`)},b=(e="저장")=>{c(`${e} 중 오류가 발생했습니다.`)},v=e=>{c(`이미 사용중인 ${e}입니다.`)},q=e=>{c(`${e}을(를) 입력해주세요.`)};async function O(e){try{return await g.callService("SCMFILE00101",{crprCd:g.getUserInfo().crprCd,sysCd:__SYS_CD__,fileKey:e}).then(r=>{let s;if(r.sub&&(s=r.sub[0]),console.log(r),console.log(s),!s.lgclFileNm)throw console.error("논리파일명이 없습니다."),new Error("논리 파일명 누락");if(!s.filePath)throw console.error("파일 경로가 없습니다."),new Error("파일 경로 누락");const o=`api/download?filePath=${encodeURIComponent(s.filePath)}&logicalName=${encodeURIComponent(s.lgclFileNm)}`;return window.open(o,"_blank"),{success:!0,message:"파일 다운로드 요청 성공"}})}catch(t){throw console.error("downloadByFileKey 함수 실행 중 오류 발생:",t),t}}exports.THEME_COOKIE_NAME=y;exports.closeAllMessages=F;exports.closeMessage=$;exports.convertImageFormat=p;exports.deleteCookie=L;exports.downloadByFileKey=O;exports.generateSrcSet=I;exports.getAvatarImage=w;exports.getBackgroundImage=h;exports.getCookie=E;exports.getDefaultBackgroundImage=l;exports.getIconImage=f;exports.getLogoImage=d;exports.getOptimizedImageUrl=U;exports.handleImageError=S;exports.preloadImage=u;exports.resizeImage=m;exports.setCookie=C;exports.showApiError=P;exports.showDuplicateError=v;exports.showLoading=k;exports.showRequiredError=q;exports.showSaveError=b;exports.showSaveSuccess=T;exports.useImageLoader=R;
2
- //# sourceMappingURL=FileUtils-BweAWoJt.cjs.map
@@ -1,36 +0,0 @@
1
- "use strict";const t=require("./jsx-runtime-CeSfJrVB.cjs"),d=require("./AuthContext-CXng9fj0.cjs"),f=require("./ScreenProtectContext-CVuXrJm6.cjs"),u=require("antd"),x=require("react-router-dom"),w=require("./envUtils-CduTHoHu.cjs"),j=require("react"),p="bwg-dot-line-wave-v4";function v(){if(typeof document>"u"||document.getElementById(p))return;const e=document.createElement("style");e.id=p,e.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(e)}const E=({colors:e=["#DAD3FF","#B3A6FF","#9380FF","#816BFA"],count:r,size:s=12,gap:i=10,amp:m=16,speedMs:l=900,direction:g="ltr",phase:y=.7})=>{j.useEffect(()=>{v()},[]);const a=r??e.length,b=Array.from({length:a}),h={"--bwg-size":`${s}px`,"--bwg-gap":`${i}px`,"--bwg-amp":`${m}px`,"--bwg-speed":`${l}ms`},c=l/a*y;return t.jsxRuntimeExports.jsx("span",{className:"bwg-dotline",role:"img","aria-label":"loading",style:h,children:b.map((D,n)=>t.jsxRuntimeExports.jsx("span",{className:"dot",style:{backgroundColor:e[n%e.length],animationDelay:g==="ltr"?`${n*c}ms`:`${(a-1-n)*c}ms`}},n))})},o=({spin:e=null,text:r="인증중..."})=>{const{busy:s}=d.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(u.Spin,{indicator:t.jsxRuntimeExports.jsx(E,{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},R=()=>{const{reauthWithPin:e}=d.useAuth();return t.jsxRuntimeExports.jsx(f.ScreenProtectProvider,{idleMs:30*6e4,onUnlock:async r=>w.isLocal?!0:!!r&&await e(r),children:t.jsxRuntimeExports.jsx(u.ConfigProvider,{getPopupContainer:()=>document.getElementById("app-shell")||document.body,children:t.jsxRuntimeExports.jsxs("div",{id:"app-shell",children:[t.jsxRuntimeExports.jsx(o,{}),t.jsxRuntimeExports.jsx(x.Outlet,{})]})})})},F=()=>t.jsxRuntimeExports.jsxs("div",{children:[t.jsxRuntimeExports.jsx(o,{}),t.jsxRuntimeExports.jsx(x.Outlet,{})]});exports.ProgressOverlay=o;exports.ProtectedLayout=R;exports.PublicLayout=F;
36
- //# sourceMappingURL=PublicLayout-3v46YZdi.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PublicLayout-3v46YZdi.cjs","sources":["../../src/components/layout/ProgressOverlay.tsx","../../src/components/layout/ProtectLayout.tsx","../../src/components/layout/PublicLayout.tsx"],"sourcesContent":["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;"],"names":["DOTLINE_STYLE_ID","ensureDotLineWaveStylesV4","style","DotLineSmoothIndicator","colors","count","size","gap","amp","speedMs","direction","phase","useEffect","n","dots","baseStyle","perDotDelay","jsx","_","i","ProgressOverlay","spin","text","busy","useAuth","jsxs","Spin","ProtectedLayout","reauthWithPin","ScreenProtectProvider","pin","isLocal","ConfigProvider","Outlet","PublicLayout"],"mappings":"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"}
@@ -1,139 +0,0 @@
1
- import { j as e } from "./jsx-runtime-Dpn_P65e.js";
2
- import { u as p } from "./AuthContext-Ei2P-z4d.js";
3
- import { S as y } from "./ScreenProtectContext-3my4PHFa.js";
4
- import { Spin as h, ConfigProvider as w } from "antd";
5
- import { Outlet as d } from "react-router-dom";
6
- import { i as v } from "./envUtils-C9Gf5aek.js";
7
- import { useEffect as j } from "react";
8
- const c = "bwg-dot-line-wave-v4";
9
- function F() {
10
- if (typeof document > "u" || document.getElementById(c)) return;
11
- const t = document.createElement("style");
12
- t.id = c, t.textContent = `
13
- .bwg-dotline {
14
- display: inline-flex;
15
- align-items: center;
16
- gap: var(--bwg-gap, 12px);
17
- height: calc(var(--bwg-size, 12px) + 2 * var(--bwg-amp, 12px));
18
- line-height: 0;
19
- }
20
- .bwg-dotline .dot {
21
- width: var(--bwg-size, 12px);
22
- height: var(--bwg-size, 12px);
23
- border-radius: 50%;
24
- background: currentColor;
25
- will-change: transform, opacity;
26
- filter: drop-shadow(0 1px 2px rgba(0,0,0,.12));
27
- animation: bwg-dotline-sine var(--bwg-speed, 780ms) linear infinite;
28
- }
29
-
30
- /* sin(θ) 근사: 0, 45, 90, 135, 180, 225, 270, 315, 360deg */
31
- @keyframes bwg-dotline-sine {
32
- 0% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
33
- 12.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }
34
- 25% { transform: translate3d(0, calc(-1 * var(--bwg-amp, 12px)), 0) scale(1.06); opacity: 1; }
35
- 37.5%{ transform: translate3d(0, calc(-0.7071 * var(--bwg-amp, 12px)), 0) scale(1.03); opacity: .92; }
36
- 50% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
37
- 62.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }
38
- 75% { transform: translate3d(0, calc( 1 * var(--bwg-amp, 12px)), 0) scale(.96); opacity: .76; }
39
- 87.5%{ transform: translate3d(0, calc( 0.7071 * var(--bwg-amp, 12px)), 0) scale(.97); opacity: .78; }
40
- 100% { transform: translate3d(0, 0, 0) scale(.98); opacity: .80; }
41
- }
42
-
43
- @media (prefers-reduced-motion: reduce) {
44
- .bwg-dotline .dot { animation: none; }
45
- }
46
- `, document.head.appendChild(t);
47
- }
48
- const D = ({
49
- colors: t = ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
50
- count: a,
51
- size: n = 12,
52
- gap: o = 10,
53
- amp: g = 16,
54
- speedMs: i = 900,
55
- direction: u = "ltr",
56
- phase: x = 0.7
57
- }) => {
58
- j(() => {
59
- F();
60
- }, []);
61
- const s = a ?? t.length, f = Array.from({ length: s }), b = {
62
- "--bwg-size": `${n}px`,
63
- "--bwg-gap": `${o}px`,
64
- "--bwg-amp": `${g}px`,
65
- "--bwg-speed": `${i}ms`
66
- }, l = i / s * x;
67
- return /* @__PURE__ */ e.jsx("span", { className: "bwg-dotline", role: "img", "aria-label": "loading", style: b, children: f.map((P, r) => /* @__PURE__ */ e.jsx(
68
- "span",
69
- {
70
- className: "dot",
71
- style: {
72
- backgroundColor: t[r % t.length],
73
- animationDelay: u === "ltr" ? `${r * l}ms` : `${(s - 1 - r) * l}ms`
74
- }
75
- },
76
- r
77
- )) });
78
- }, m = ({ spin: t = null, text: a = "인증중..." }) => {
79
- const { busy: n } = p();
80
- return t ?? n ? /* @__PURE__ */ e.jsxs(
81
- "div",
82
- {
83
- style: {
84
- position: "fixed",
85
- height: "100vh",
86
- left: 0,
87
- right: 0,
88
- top: 0,
89
- display: "flex",
90
- flexDirection: "column",
91
- justifyContent: "center",
92
- alignItems: "center",
93
- gap: 8,
94
- padding: "8px 12px",
95
- background: "rgba(0,0,0,0.6)",
96
- color: "#fff",
97
- zIndex: 1e4
98
- },
99
- "aria-live": "polite",
100
- "aria-busy": "true",
101
- role: "status",
102
- children: [
103
- /* @__PURE__ */ e.jsx(
104
- h,
105
- {
106
- indicator: /* @__PURE__ */ e.jsx(
107
- D,
108
- {
109
- colors: ["#DAD3FF", "#B3A6FF", "#9380FF", "#816BFA"],
110
- size: 12,
111
- gap: 10,
112
- amp: 16,
113
- speedMs: 900,
114
- phase: 0.75,
115
- direction: "ltr"
116
- }
117
- )
118
- }
119
- ),
120
- /* @__PURE__ */ e.jsx("span", { className: "bwg-spin-txt", style: { marginTop: "15px" }, children: a })
121
- ]
122
- }
123
- ) : null;
124
- }, B = () => {
125
- const { reauthWithPin: t } = p();
126
- return /* @__PURE__ */ e.jsx(y, { idleMs: 30 * 6e4, onUnlock: async (a) => v ? !0 : !!a && await t(a), children: /* @__PURE__ */ e.jsx(w, { getPopupContainer: () => document.getElementById("app-shell") || document.body, children: /* @__PURE__ */ e.jsxs("div", { id: "app-shell", children: [
127
- /* @__PURE__ */ e.jsx(m, {}),
128
- /* @__PURE__ */ e.jsx(d, {})
129
- ] }) }) });
130
- }, $ = () => /* @__PURE__ */ e.jsxs("div", { children: [
131
- /* @__PURE__ */ e.jsx(m, {}),
132
- /* @__PURE__ */ e.jsx(d, {})
133
- ] });
134
- export {
135
- m as P,
136
- B as a,
137
- $ as b
138
- };
139
- //# sourceMappingURL=PublicLayout-B4wGo0ut.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PublicLayout-B4wGo0ut.js","sources":["../../src/components/layout/ProgressOverlay.tsx","../../src/components/layout/ProtectLayout.tsx","../../src/components/layout/PublicLayout.tsx"],"sourcesContent":["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;"],"names":["DOTLINE_STYLE_ID","ensureDotLineWaveStylesV4","style","DotLineSmoothIndicator","colors","count","size","gap","amp","speedMs","direction","phase","useEffect","n","dots","baseStyle","perDotDelay","jsx","_","i","ProgressOverlay","spin","text","busy","useAuth","jsxs","Spin","ProtectedLayout","reauthWithPin","ScreenProtectProvider","pin","isLocal","ConfigProvider","Outlet","PublicLayout"],"mappings":"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"}