@bwg-ui/core 1.1.26 → 1.1.28

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 (116) hide show
  1. package/dist/chunks/common-components-3AGyXNkY.cjs +183 -0
  2. package/dist/chunks/common-components-CSaGU_Fk.js +15782 -0
  3. package/dist/chunks/{core-BBMCFpHx.js → core-CTXWuoUa.js} +1 -2
  4. package/dist/chunks/core-Cp0Uyip7.cjs +1 -0
  5. package/dist/chunks/{enc-base64-DAsYWbA2.js → enc-base64-ClENPele.js} +4 -5
  6. package/dist/chunks/enc-base64-CvKQ-yW8.cjs +1 -0
  7. package/dist/chunks/sha256-Dl_QPg4b.cjs +1 -0
  8. package/dist/chunks/{sha256-D80RpYO2.js → sha256-DxfJD4fu.js} +12 -13
  9. package/dist/components/common/BwgEditor.d.ts.map +1 -1
  10. package/dist/components/common/BwgPagination.d.ts +1 -1
  11. package/dist/components/common/BwgPagination.d.ts.map +1 -1
  12. package/dist/components/common/index.cjs +1 -2
  13. package/dist/components/common/index.d.ts +3 -1
  14. package/dist/components/common/index.d.ts.map +1 -1
  15. package/dist/components/common/index.js +16 -17
  16. package/dist/components/core/index.cjs +1 -2
  17. package/dist/components/core/index.js +1218 -23
  18. package/dist/components/guide/index.cjs +1 -2
  19. package/dist/components/guide/index.js +1 -2
  20. package/dist/components/layout/index.cjs +35 -2
  21. package/dist/components/layout/index.js +350 -10
  22. package/dist/components/popup/MenuReport.d.ts.map +1 -1
  23. package/dist/index.cjs +1 -2
  24. package/dist/index.js +211 -222
  25. package/dist/provider/index.cjs +1 -2
  26. package/dist/provider/index.js +384 -25
  27. package/dist/stores/index.cjs +2 -2
  28. package/dist/stores/index.js +1394 -24
  29. package/dist/utils/index.cjs +1 -2
  30. package/dist/utils/index.js +1369 -200
  31. package/package.json +1 -1
  32. package/dist/chunks/AuthContext-BQ3gHLbr.cjs +0 -2
  33. package/dist/chunks/AuthContext-BQ3gHLbr.cjs.map +0 -1
  34. package/dist/chunks/AuthContext-CVizgYxY.js +0 -57
  35. package/dist/chunks/AuthContext-CVizgYxY.js.map +0 -1
  36. package/dist/chunks/BwgSpace-BPJARdOc.js +0 -27
  37. package/dist/chunks/BwgSpace-BPJARdOc.js.map +0 -1
  38. package/dist/chunks/BwgSpace-Cw27d-XU.cjs +0 -2
  39. package/dist/chunks/BwgSpace-Cw27d-XU.cjs.map +0 -1
  40. package/dist/chunks/BwgSwitch-BLtVdW44.cjs +0 -2
  41. package/dist/chunks/BwgSwitch-BLtVdW44.cjs.map +0 -1
  42. package/dist/chunks/BwgSwitch-DdHo4gYR.js +0 -269
  43. package/dist/chunks/BwgSwitch-DdHo4gYR.js.map +0 -1
  44. package/dist/chunks/BwgUploader-BUmFmeuS.js +0 -3250
  45. package/dist/chunks/BwgUploader-BUmFmeuS.js.map +0 -1
  46. package/dist/chunks/BwgUploader-Djhl4lIt.cjs +0 -3
  47. package/dist/chunks/BwgUploader-Djhl4lIt.cjs.map +0 -1
  48. package/dist/chunks/LoadingOverlay-Uf6xy04v.js +0 -19
  49. package/dist/chunks/LoadingOverlay-Uf6xy04v.js.map +0 -1
  50. package/dist/chunks/LoadingOverlay-jdMzdB-z.cjs +0 -2
  51. package/dist/chunks/LoadingOverlay-jdMzdB-z.cjs.map +0 -1
  52. package/dist/chunks/SSOHandler-CR0nR3rJ.js +0 -28654
  53. package/dist/chunks/SSOHandler-CR0nR3rJ.js.map +0 -1
  54. package/dist/chunks/SSOHandler-DQG0Jp4V.cjs +0 -237
  55. package/dist/chunks/SSOHandler-DQG0Jp4V.cjs.map +0 -1
  56. package/dist/chunks/ScreenProtectContext-BMsPPcTX.js +0 -154
  57. package/dist/chunks/ScreenProtectContext-BMsPPcTX.js.map +0 -1
  58. package/dist/chunks/ScreenProtectContext-DrCGlcTs.cjs +0 -2
  59. package/dist/chunks/ScreenProtectContext-DrCGlcTs.cjs.map +0 -1
  60. package/dist/chunks/SearchBoxContext-DY6lES-W.cjs +0 -2
  61. package/dist/chunks/SearchBoxContext-DY6lES-W.cjs.map +0 -1
  62. package/dist/chunks/SearchBoxContext-Dtzo_rJd.js +0 -86
  63. package/dist/chunks/SearchBoxContext-Dtzo_rJd.js.map +0 -1
  64. package/dist/chunks/ViewContainer-BfiTFvLP.cjs +0 -36
  65. package/dist/chunks/ViewContainer-BfiTFvLP.cjs.map +0 -1
  66. package/dist/chunks/ViewContainer-CTl3_56W.js +0 -338
  67. package/dist/chunks/ViewContainer-CTl3_56W.js.map +0 -1
  68. package/dist/chunks/apiUtils-D9Vn1gwZ.cjs +0 -3
  69. package/dist/chunks/apiUtils-D9Vn1gwZ.cjs.map +0 -1
  70. package/dist/chunks/apiUtils-DPUgfmKk.js +0 -1450
  71. package/dist/chunks/apiUtils-DPUgfmKk.js.map +0 -1
  72. package/dist/chunks/codeStore-BrCfe9K3.js +0 -450
  73. package/dist/chunks/codeStore-BrCfe9K3.js.map +0 -1
  74. package/dist/chunks/codeStore-_b2fDZtD.cjs +0 -2
  75. package/dist/chunks/codeStore-_b2fDZtD.cjs.map +0 -1
  76. package/dist/chunks/core-BBMCFpHx.js.map +0 -1
  77. package/dist/chunks/core-CM9MsJRf.cjs +0 -2
  78. package/dist/chunks/core-CM9MsJRf.cjs.map +0 -1
  79. package/dist/chunks/enc-base64-DAsYWbA2.js.map +0 -1
  80. package/dist/chunks/enc-base64-DbK5VBfD.cjs +0 -2
  81. package/dist/chunks/enc-base64-DbK5VBfD.cjs.map +0 -1
  82. package/dist/chunks/favoriteStore-BnQ2u-sa.cjs +0 -2
  83. package/dist/chunks/favoriteStore-BnQ2u-sa.cjs.map +0 -1
  84. package/dist/chunks/favoriteStore-SyAjqLG8.js +0 -439
  85. package/dist/chunks/favoriteStore-SyAjqLG8.js.map +0 -1
  86. package/dist/chunks/popupStore-BrKcPw7K.js +0 -92
  87. package/dist/chunks/popupStore-BrKcPw7K.js.map +0 -1
  88. package/dist/chunks/popupStore-ChbYTqy1.cjs +0 -2
  89. package/dist/chunks/popupStore-ChbYTqy1.cjs.map +0 -1
  90. package/dist/chunks/realFormat-Cha7OTd9.cjs +0 -2
  91. package/dist/chunks/realFormat-Cha7OTd9.cjs.map +0 -1
  92. package/dist/chunks/realFormat-DRGLFabQ.js +0 -305
  93. package/dist/chunks/realFormat-DRGLFabQ.js.map +0 -1
  94. package/dist/chunks/sha256-BnWVPP1K.cjs +0 -2
  95. package/dist/chunks/sha256-BnWVPP1K.cjs.map +0 -1
  96. package/dist/chunks/sha256-D80RpYO2.js.map +0 -1
  97. package/dist/chunks/usePopup-DnfKRiYs.js +0 -109
  98. package/dist/chunks/usePopup-DnfKRiYs.js.map +0 -1
  99. package/dist/chunks/usePopup-Domnpg55.cjs +0 -2
  100. package/dist/chunks/usePopup-Domnpg55.cjs.map +0 -1
  101. package/dist/components/common/index.cjs.map +0 -1
  102. package/dist/components/common/index.js.map +0 -1
  103. package/dist/components/core/index.cjs.map +0 -1
  104. package/dist/components/core/index.js.map +0 -1
  105. package/dist/components/guide/index.cjs.map +0 -1
  106. package/dist/components/guide/index.js.map +0 -1
  107. package/dist/components/layout/index.cjs.map +0 -1
  108. package/dist/components/layout/index.js.map +0 -1
  109. package/dist/index.cjs.map +0 -1
  110. package/dist/index.js.map +0 -1
  111. package/dist/provider/index.cjs.map +0 -1
  112. package/dist/provider/index.js.map +0 -1
  113. package/dist/stores/index.cjs.map +0 -1
  114. package/dist/stores/index.js.map +0 -1
  115. package/dist/utils/index.cjs.map +0 -1
  116. package/dist/utils/index.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bwg-ui/core",
3
- "version": "1.1.26",
3
+ "version": "1.1.28",
4
4
  "description": "bankwareglobal UI 라이브러리입니다.",
5
5
  "author": "kyeongdon.park",
6
6
  "license": "ISC",
@@ -1,2 +0,0 @@
1
- "use strict";const p=require("react/jsx-runtime"),s=require("react"),h=s.createContext(null),w=()=>{const o=s.useContext(h);if(!o)throw new Error("useAuth must be used within AuthProvider");return o},k=({children:o})=>{const[c,u]=s.useState(!1),[a,n]=s.useState(!1),i=async r=>{const e=(await r.text()).trim().toLowerCase();try{const t=JSON.parse(e);if(typeof t=="object"&&t&&(t.ok===!0||t.success===!0))return!0}catch{}return!!["true","ok","1","y"].includes(e)},d=async r=>{n(!0);try{const e=await fetch("/serviceEndpoint/sso_check.jsp",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"token="+encodeURIComponent(r)}),t=e.ok&&await i(e);return u(t),t}catch{return!1}finally{n(!1)}},l=async r=>{n(!0);try{const e=await fetch("/serviceEndpoint/sso_reauth.jsp",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"pin="+encodeURIComponent(r)});return e.ok&&await i(e)?(u(!0),!0):!1}catch{return!1}finally{n(!1)}},f=()=>{u(!1)},y=s.useMemo(()=>({authed:c,busy:a,verifyWithToken:d,reauthWithPin:l,logout:f}),[c,a]);return p.jsx(h.Provider,{value:y,children:o})};exports.AuthProvider=k;exports.useAuth=w;
2
- //# sourceMappingURL=AuthContext-BQ3gHLbr.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthContext-BQ3gHLbr.cjs","sources":["../../src/provider/contexts/AuthContext.tsx"],"sourcesContent":["import {\r\n createContext,\r\n FC,\r\n ReactNode,\r\n useContext,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\n\r\ntype AuthContextValue = {\r\n authed: boolean;\r\n busy: boolean; // show global progress when true\r\n verifyWithToken: (token: string) => Promise<boolean>; // initial SSO\r\n reauthWithPin: (pin: string) => Promise<boolean>; // unlock SSO\r\n logout: () => void;\r\n};\r\n\r\nconst AuthContext = createContext<AuthContextValue | null>(null);\r\nexport const useAuth = () => {\r\n const ctx = useContext(AuthContext);\r\n if (!ctx) throw new Error('useAuth must be used within AuthProvider');\r\n return ctx;\r\n};\r\n\r\nexport const AuthProvider: FC<{ children: ReactNode }> = ({ children }) => {\r\n const [authed, setAuthed] = useState(false);\r\n const [busy, setBusy] = useState(false);\r\n\r\n // Heuristic text parser for JSP boolean responses\r\n const parseOk = async (res: Response) => {\r\n const text = (await res.text()).trim().toLowerCase();\r\n try {\r\n const j = JSON.parse(text);\r\n if (typeof j === 'object' && j && (j.ok === true || j.success === true))\r\n return true;\r\n } catch {}\r\n if (['true', 'ok', '1', 'y'].includes(text)) return true;\r\n return false;\r\n };\r\n\r\n const verifyWithToken = async (token: string) => {\r\n setBusy(true);\r\n try {\r\n // TODO: replace with your real endpoint\r\n const res = await fetch('/serviceEndpoint/sso_check.jsp', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\r\n body: 'token=' + encodeURIComponent(token),\r\n });\r\n const ok = res.ok && (await parseOk(res));\r\n setAuthed(ok);\r\n return ok;\r\n } catch (e) {\r\n return false;\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n const reauthWithPin = async (pin: string) => {\r\n setBusy(true);\r\n try {\r\n // TODO: replace with your real endpoint\r\n const res = await fetch('/serviceEndpoint/sso_reauth.jsp', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\r\n body: 'pin=' + encodeURIComponent(pin),\r\n });\r\n const ok = res.ok && (await parseOk(res));\r\n // Keep authed true only if reauth succeeds\r\n if (!ok) return false;\r\n setAuthed(true);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n const logout = () => {\r\n setAuthed(false);\r\n };\r\n\r\n const value = useMemo(\r\n () => ({ authed, busy, verifyWithToken, reauthWithPin, logout }),\r\n [authed, busy]\r\n );\r\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\r\n};\r\n"],"names":["AuthContext","createContext","useAuth","ctx","useContext","AuthProvider","children","authed","setAuthed","useState","busy","setBusy","parseOk","res","text","j","verifyWithToken","token","ok","reauthWithPin","pin","logout","value","useMemo","jsx"],"mappings":"qEAiBMA,EAAcC,EAAAA,cAAuC,IAAI,EAClDC,EAAU,IAAM,CAC3B,MAAMC,EAAMC,EAAAA,WAAWJ,CAAW,EAClC,GAAI,CAACG,EAAK,MAAM,IAAI,MAAM,0CAA0C,EACpE,OAAOA,CACT,EAEaE,EAA4C,CAAC,CAAE,SAAAC,KAAe,CACzE,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EACpC,CAACC,EAAMC,CAAO,EAAIF,EAAAA,SAAS,EAAK,EAGhCG,EAAU,MAAOC,GAAkB,CACvC,MAAMC,GAAQ,MAAMD,EAAI,QAAQ,KAAA,EAAO,YAAA,EACvC,GAAI,CACF,MAAME,EAAI,KAAK,MAAMD,CAAI,EACzB,GAAI,OAAOC,GAAM,UAAYA,IAAMA,EAAE,KAAO,IAAQA,EAAE,UAAY,IAChE,MAAO,EACX,MAAQ,CAAC,CACT,MAAI,GAAC,OAAQ,KAAM,IAAK,GAAG,EAAE,SAASD,CAAI,CAE5C,EAEME,EAAkB,MAAOC,GAAkB,CAC/CN,EAAQ,EAAI,EACZ,GAAI,CAEF,MAAME,EAAM,MAAM,MAAM,iCAAkC,CACxD,OAAQ,OACR,QAAS,CAAE,eAAgB,mCAAA,EAC3B,KAAM,SAAW,mBAAmBI,CAAK,CAAA,CAC1C,EACKC,EAAKL,EAAI,IAAO,MAAMD,EAAQC,CAAG,EACvC,OAAAL,EAAUU,CAAE,EACLA,CACT,MAAY,CACV,MAAO,EACT,QAAA,CACEP,EAAQ,EAAK,CACf,CACF,EAEMQ,EAAgB,MAAOC,GAAgB,CAC3CT,EAAQ,EAAI,EACZ,GAAI,CAEF,MAAME,EAAM,MAAM,MAAM,kCAAmC,CACzD,OAAQ,OACR,QAAS,CAAE,eAAgB,mCAAA,EAC3B,KAAM,OAAS,mBAAmBO,CAAG,CAAA,CACtC,EAGD,OAFWP,EAAI,IAAO,MAAMD,EAAQC,CAAG,GAGvCL,EAAU,EAAI,EACP,IAFS,EAGlB,MAAY,CACV,MAAO,EACT,QAAA,CACEG,EAAQ,EAAK,CACf,CACF,EAEMU,EAAS,IAAM,CACnBb,EAAU,EAAK,CACjB,EAEMc,EAAQC,EAAAA,QACZ,KAAO,CAAE,OAAAhB,EAAQ,KAAAG,EAAM,gBAAAM,EAAiB,cAAAG,EAAe,OAAAE,CAAA,GACvD,CAACd,EAAQG,CAAI,CAAA,EAEf,OAAOc,EAAAA,IAACxB,EAAY,SAAZ,CAAqB,MAAAsB,EAAe,SAAAhB,CAAA,CAAS,CACvD"}
@@ -1,57 +0,0 @@
1
- import { jsx as y } from "react/jsx-runtime";
2
- import { useContext as w, createContext as m, useState as i, useMemo as k } from "react";
3
- const f = m(null), v = () => {
4
- const r = w(f);
5
- if (!r) throw new Error("useAuth must be used within AuthProvider");
6
- return r;
7
- }, A = ({ children: r }) => {
8
- const [u, n] = i(!1), [a, s] = i(!1), c = async (o) => {
9
- const t = (await o.text()).trim().toLowerCase();
10
- try {
11
- const e = JSON.parse(t);
12
- if (typeof e == "object" && e && (e.ok === !0 || e.success === !0))
13
- return !0;
14
- } catch {
15
- }
16
- return !!["true", "ok", "1", "y"].includes(t);
17
- }, h = async (o) => {
18
- s(!0);
19
- try {
20
- const t = await fetch("/serviceEndpoint/sso_check.jsp", {
21
- method: "POST",
22
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
23
- body: "token=" + encodeURIComponent(o)
24
- }), e = t.ok && await c(t);
25
- return n(e), e;
26
- } catch {
27
- return !1;
28
- } finally {
29
- s(!1);
30
- }
31
- }, l = async (o) => {
32
- s(!0);
33
- try {
34
- const t = await fetch("/serviceEndpoint/sso_reauth.jsp", {
35
- method: "POST",
36
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
37
- body: "pin=" + encodeURIComponent(o)
38
- });
39
- return t.ok && await c(t) ? (n(!0), !0) : !1;
40
- } catch {
41
- return !1;
42
- } finally {
43
- s(!1);
44
- }
45
- }, d = () => {
46
- n(!1);
47
- }, p = k(
48
- () => ({ authed: u, busy: a, verifyWithToken: h, reauthWithPin: l, logout: d }),
49
- [u, a]
50
- );
51
- return /* @__PURE__ */ y(f.Provider, { value: p, children: r });
52
- };
53
- export {
54
- A,
55
- v as u
56
- };
57
- //# sourceMappingURL=AuthContext-CVizgYxY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthContext-CVizgYxY.js","sources":["../../src/provider/contexts/AuthContext.tsx"],"sourcesContent":["import {\r\n createContext,\r\n FC,\r\n ReactNode,\r\n useContext,\r\n useMemo,\r\n useState,\r\n} from 'react';\r\n\r\ntype AuthContextValue = {\r\n authed: boolean;\r\n busy: boolean; // show global progress when true\r\n verifyWithToken: (token: string) => Promise<boolean>; // initial SSO\r\n reauthWithPin: (pin: string) => Promise<boolean>; // unlock SSO\r\n logout: () => void;\r\n};\r\n\r\nconst AuthContext = createContext<AuthContextValue | null>(null);\r\nexport const useAuth = () => {\r\n const ctx = useContext(AuthContext);\r\n if (!ctx) throw new Error('useAuth must be used within AuthProvider');\r\n return ctx;\r\n};\r\n\r\nexport const AuthProvider: FC<{ children: ReactNode }> = ({ children }) => {\r\n const [authed, setAuthed] = useState(false);\r\n const [busy, setBusy] = useState(false);\r\n\r\n // Heuristic text parser for JSP boolean responses\r\n const parseOk = async (res: Response) => {\r\n const text = (await res.text()).trim().toLowerCase();\r\n try {\r\n const j = JSON.parse(text);\r\n if (typeof j === 'object' && j && (j.ok === true || j.success === true))\r\n return true;\r\n } catch {}\r\n if (['true', 'ok', '1', 'y'].includes(text)) return true;\r\n return false;\r\n };\r\n\r\n const verifyWithToken = async (token: string) => {\r\n setBusy(true);\r\n try {\r\n // TODO: replace with your real endpoint\r\n const res = await fetch('/serviceEndpoint/sso_check.jsp', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\r\n body: 'token=' + encodeURIComponent(token),\r\n });\r\n const ok = res.ok && (await parseOk(res));\r\n setAuthed(ok);\r\n return ok;\r\n } catch (e) {\r\n return false;\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n const reauthWithPin = async (pin: string) => {\r\n setBusy(true);\r\n try {\r\n // TODO: replace with your real endpoint\r\n const res = await fetch('/serviceEndpoint/sso_reauth.jsp', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\r\n body: 'pin=' + encodeURIComponent(pin),\r\n });\r\n const ok = res.ok && (await parseOk(res));\r\n // Keep authed true only if reauth succeeds\r\n if (!ok) return false;\r\n setAuthed(true);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n } finally {\r\n setBusy(false);\r\n }\r\n };\r\n\r\n const logout = () => {\r\n setAuthed(false);\r\n };\r\n\r\n const value = useMemo(\r\n () => ({ authed, busy, verifyWithToken, reauthWithPin, logout }),\r\n [authed, busy]\r\n );\r\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\r\n};\r\n"],"names":["AuthContext","createContext","useAuth","ctx","useContext","AuthProvider","children","authed","setAuthed","useState","busy","setBusy","parseOk","res","text","j","verifyWithToken","token","ok","reauthWithPin","pin","logout","value","useMemo","jsx"],"mappings":";;AAiBA,MAAMA,IAAcC,EAAuC,IAAI,GAClDC,IAAU,MAAM;AAC3B,QAAMC,IAAMC,EAAWJ,CAAW;AAClC,MAAI,CAACG,EAAK,OAAM,IAAI,MAAM,0CAA0C;AACpE,SAAOA;AACT,GAEaE,IAA4C,CAAC,EAAE,UAAAC,QAAe;AACzE,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpC,CAACC,GAAMC,CAAO,IAAIF,EAAS,EAAK,GAGhCG,IAAU,OAAOC,MAAkB;AACvC,UAAMC,KAAQ,MAAMD,EAAI,QAAQ,KAAA,EAAO,YAAA;AACvC,QAAI;AACF,YAAME,IAAI,KAAK,MAAMD,CAAI;AACzB,UAAI,OAAOC,KAAM,YAAYA,MAAMA,EAAE,OAAO,MAAQA,EAAE,YAAY;AAChE,eAAO;AAAA,IACX,QAAQ;AAAA,IAAC;AACT,WAAI,GAAC,QAAQ,MAAM,KAAK,GAAG,EAAE,SAASD,CAAI;AAAA,EAE5C,GAEME,IAAkB,OAAOC,MAAkB;AAC/C,IAAAN,EAAQ,EAAI;AACZ,QAAI;AAEF,YAAME,IAAM,MAAM,MAAM,kCAAkC;AAAA,QACxD,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,oCAAA;AAAA,QAC3B,MAAM,WAAW,mBAAmBI,CAAK;AAAA,MAAA,CAC1C,GACKC,IAAKL,EAAI,MAAO,MAAMD,EAAQC,CAAG;AACvC,aAAAL,EAAUU,CAAE,GACLA;AAAA,IACT,QAAY;AACV,aAAO;AAAA,IACT,UAAA;AACE,MAAAP,EAAQ,EAAK;AAAA,IACf;AAAA,EACF,GAEMQ,IAAgB,OAAOC,MAAgB;AAC3C,IAAAT,EAAQ,EAAI;AACZ,QAAI;AAEF,YAAME,IAAM,MAAM,MAAM,mCAAmC;AAAA,QACzD,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,oCAAA;AAAA,QAC3B,MAAM,SAAS,mBAAmBO,CAAG;AAAA,MAAA,CACtC;AAGD,aAFWP,EAAI,MAAO,MAAMD,EAAQC,CAAG,KAGvCL,EAAU,EAAI,GACP,MAFS;AAAA,IAGlB,QAAY;AACV,aAAO;AAAA,IACT,UAAA;AACE,MAAAG,EAAQ,EAAK;AAAA,IACf;AAAA,EACF,GAEMU,IAAS,MAAM;AACnB,IAAAb,EAAU,EAAK;AAAA,EACjB,GAEMc,IAAQC;AAAA,IACZ,OAAO,EAAE,QAAAhB,GAAQ,MAAAG,GAAM,iBAAAM,GAAiB,eAAAG,GAAe,QAAAE,EAAA;AAAA,IACvD,CAACd,GAAQG,CAAI;AAAA,EAAA;AAEf,SAAO,gBAAAc,EAACxB,EAAY,UAAZ,EAAqB,OAAAsB,GAAe,UAAAhB,EAAA,CAAS;AACvD;"}
@@ -1,27 +0,0 @@
1
- import { jsx as d } from "react/jsx-runtime";
2
- const i = ({ children: r }) => /* @__PURE__ */ d(
3
- "div",
4
- {
5
- style: {
6
- height: "100%",
7
- padding: "20px 30px 26px"
8
- },
9
- children: /* @__PURE__ */ d(
10
- "div",
11
- {
12
- style: {
13
- width: "100%",
14
- height: "100%",
15
- border: "1px solid #ddd",
16
- borderRadius: "15px",
17
- background: "#fff"
18
- },
19
- children: r
20
- }
21
- )
22
- }
23
- );
24
- export {
25
- i as B
26
- };
27
- //# sourceMappingURL=BwgSpace-BPJARdOc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BwgSpace-BPJARdOc.js","sources":["../../src/components/common/BwgSpace.tsx"],"sourcesContent":["import { ReactNode } from 'react';\r\n\r\n/**\r\n * BwgSpace : 공간컴포넌트\r\n * 추후 style => className 변경 예정\r\n * @param children 하위 컴포넌트\r\n * @returns\r\n */\r\nconst BwgSpace = ({ children }: { children: ReactNode }) => {\r\n return (\r\n <div\r\n style={{\r\n height: '100%',\r\n padding: '20px 30px 26px',\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n border: '1px solid #ddd',\r\n borderRadius: '15px',\r\n background: '#fff',\r\n }}\r\n >\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default BwgSpace;\r\n"],"names":["BwgSpace","children","jsx"],"mappings":";AAQA,MAAMA,IAAW,CAAC,EAAE,UAAAC,QAEhB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,SAAS;AAAA,IAAA;AAAA,IAGX,UAAA,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,YAAY;AAAA,QAAA;AAAA,QAGb,UAAAD;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AAAA;"}
@@ -1,2 +0,0 @@
1
- "use strict";const d=require("react/jsx-runtime"),i=({children:e})=>d.jsx("div",{style:{height:"100%",padding:"20px 30px 26px"},children:d.jsx("div",{style:{width:"100%",height:"100%",border:"1px solid #ddd",borderRadius:"15px",background:"#fff"},children:e})});exports.BwgSpace=i;
2
- //# sourceMappingURL=BwgSpace-Cw27d-XU.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BwgSpace-Cw27d-XU.cjs","sources":["../../src/components/common/BwgSpace.tsx"],"sourcesContent":["import { ReactNode } from 'react';\r\n\r\n/**\r\n * BwgSpace : 공간컴포넌트\r\n * 추후 style => className 변경 예정\r\n * @param children 하위 컴포넌트\r\n * @returns\r\n */\r\nconst BwgSpace = ({ children }: { children: ReactNode }) => {\r\n return (\r\n <div\r\n style={{\r\n height: '100%',\r\n padding: '20px 30px 26px',\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n border: '1px solid #ddd',\r\n borderRadius: '15px',\r\n background: '#fff',\r\n }}\r\n >\r\n {children}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default BwgSpace;\r\n"],"names":["BwgSpace","children","jsx"],"mappings":"kDAQMA,EAAW,CAAC,CAAE,SAAAC,KAEhBC,EAAAA,IAAC,MAAA,CACC,MAAO,CACL,OAAQ,OACR,QAAS,gBAAA,EAGX,SAAAA,EAAAA,IAAC,MAAA,CACC,MAAO,CACL,MAAO,OACP,OAAQ,OACR,OAAQ,iBACR,aAAc,OACd,WAAY,MAAA,EAGb,SAAAD,CAAA,CAAA,CACH,CAAA"}
@@ -1,2 +0,0 @@
1
- "use strict";const m=require("react/jsx-runtime"),s=require("antd"),c=require("dayjs"),f=require("react"),u=f.memo(({children:a,label:e,name:o,rules:l,initialValue:t,style:i,...Y})=>{const r={fontWeight:"bold"},d=Array.isArray(l)&&l.some(g=>g.required===!0),n=()=>typeof e=="string"?m.jsxs("span",{style:r,children:[e,d&&m.jsx("span",{style:{color:"#ff4d4f",marginLeft:"4px"},children:"*"})]}):m.jsx("span",{style:r,children:e});return m.jsx(s.Form.Item,{className:"bwg-form-item",label:e?n():void 0,labelAlign:"left",name:o,rules:l,colon:!1,initialValue:t,style:i,...Y,children:a})}),w=({itemProps:a,inputProps:e={format:"YN"}})=>{const o=s.Form.useFormInstance(),l=t=>{e.format==="boolean"?o.setFieldValue(a?.name,t.target.checked):o.setFieldValue(a?.name,t.target.checked?"Y":"N"),e.onChange&&e.onChange(t)};return m.jsx(u,{...a,getValueProps:t=>({checked:e.format==="boolean"?!!t:t==="Y"}),normalize:t=>typeof t=="boolean"?e.format==="boolean"?t:t?"Y":"N":e.format==="boolean"?!!t:t?"Y":"N",children:m.jsx(s.Checkbox,{...e,onChange:l,children:e?.title})})},h={year:{displayFormat:"YYYY",outputFormat:"YYYY"},month:{displayFormat:"YYYY-MM",outputFormat:"YYYYMM"},date:{displayFormat:"YYYY-MM-DD",outputFormat:"YYYYMMDD"},time:{displayFormat:"HH:mm",outputFormat:"HHmm"},datetime:{displayFormat:"YYYY-MM-DD HH:mm",outputFormat:"YYYYMMDDHHmm"}},M=({itemProps:a,inputProps:e,type:o="date",returnType:l="string"})=>{const{displayFormat:t,outputFormat:i}=f.useMemo(()=>h[o],[o]),Y=f.useMemo(()=>Object.values(h).map(r=>r.outputFormat).sort((r,d)=>{if(r.length===d.length){if(r===i)return-1;if(d===i)return 1}return d.length-r.length}),[i]);return m.jsx(u,{...a,getValueProps:r=>({value:r?c.isDayjs(r)?r:c(r,Y):null}),normalize:r=>r?l==="dayjs"?r:r.format(i):null,children:m.jsx(s.DatePicker,{...e,picker:o==="datetime"?"date":o,showTime:e?.showTime??(o==="datetime"||o==="time"),format:t})})},x=f.forwardRef(({children:a,labelCol:e,style:o,className:l,...t},i)=>m.jsx(s.ConfigProvider,{form:{validateMessages:{required:"'${label}을(를) 입력해주세요.'"}},children:m.jsx(s.Form,{ref:i,...t,requiredMark:!1,labelCol:e||{flex:"100px"},style:{padding:"10px",...o},className:`bwg-form ${l??""}`,children:a})}));x.displayName="BwgForm";const j=({itemProps:a,inputProps:e})=>m.jsx(u,{...a,children:m.jsx(s.Input,{...e})}),{RangePicker:y}=s.DatePicker,F={year:{displayFormat:"YYYY",outputFormat:"YYYY"},month:{displayFormat:"YYYY-MM",outputFormat:"YYYYMM"},date:{displayFormat:"YYYY-MM-DD",outputFormat:"YYYYMMDD"},time:{displayFormat:"HH:mm",outputFormat:"HHmm"},datetime:{displayFormat:"YYYY-MM-DD HH:mm",outputFormat:"YYYYMMDDHHmm"}},b=({itemProps:a,inputProps:e,type:o="date",minDate:l,maxDate:t,returnType:i="string"})=>{const{displayFormat:Y,outputFormat:r}=f.useMemo(()=>F[o],[o]),d=f.useMemo(()=>Object.values(F).map(n=>n.outputFormat).sort((n,g)=>{if(n.length===g.length){if(n===r)return-1;if(g===r)return 1}return g.length-n.length}),[r]);return m.jsx(u,{...a,getValueProps:n=>({value:n&&n.length>0?[n[0]?c.isDayjs(n[0])?n[0]:c(n[0],d):null,n[1]?c.isDayjs(n[1])?n[1]:c(n[1],d):null]:null}),normalize:n=>n?i==="dayjs"?[n[0]??void 0,n[1]??void 0]:[n[0]?n[0].format(r):void 0,n[1]?n[1].format(r):void 0]:[void 0,void 0],children:m.jsx(y,{...e,order:!0,minDate:l?c(l,d):void 0,maxDate:t?c(t,d):void 0,picker:o==="datetime"?"date":o,showTime:e?.showTime??(o==="datetime"||o==="time"),format:Y})})},C=({itemProps:a,selectProps:e={options:[],allowClear:!0}})=>{const o=s.Form.useFormInstance(),l=!!o,t=f.useMemo(()=>e?.addField==="ALL"?[{label:"전체",value:""},...e?.options||[]]:e?.addField==="NULL"?[{label:"",value:""},...e?.options||[]]:e?.options||[],[e.options,e.addField]),i=d=>{e.onChange?.(d)},Y={...e,allowClear:e.allowClear??!0,options:t,onChange:i,variant:e.variant},r=m.jsx(s.Select,{...Y,disabled:e.disabled});return e.copyable&&!l&&console.warn("BwgSelect: copyable 기능은 Form 컨텍스트 내에서만 사용 가능합니다."),e.copyable?m.jsx(u,{...a,name:void 0,children:m.jsxs(s.Space.Compact,{block:!0,children:[m.jsx(s.Form.Item,{name:a?.name,rules:a?.rules,style:{width:"100%",marginBottom:0},validateStatus:"",help:"",children:r}),m.jsx(s.Typography.Paragraph,{copyable:{text:l&&o?.getFieldValue(a?.name)?.toString()||"",tooltips:["코드복사","코드복사됨"]},style:{margin:0,backgroundColor:"#f5f5f5",borderRadius:"4px",border:"1px solid #d9d9d9",fontSize:"12px",color:"#666",display:"flex",alignItems:"center",height:"30px",padding:"0 8px"}})]})}):m.jsx(u,{...a,children:r})},D=({itemProps:a,inputProps:e={format:"YN"}})=>{const o=s.Form.useFormInstance(),l=(t,i)=>{e.format==="boolean"?o.setFieldValue(a?.name,t):o.setFieldValue(a?.name,t?"Y":"N"),e.onChange&&e.onChange(t,i)};return m.jsx(u,{...a,getValueProps:t=>({checked:e.format==="boolean"?!!t:t==="Y"}),normalize:t=>typeof t=="boolean"?e.format==="boolean"?t:t?"Y":"N":e.format==="boolean"?!!t:t?"Y":"N",children:m.jsx(s.Switch,{...e,onChange:(t,i)=>l(t,i)})})};exports.BwgCheck=w;exports.BwgDatePicker=M;exports.BwgForm=x;exports.BwgFormItem=u;exports.BwgInput=j;exports.BwgRangePicker=b;exports.BwgSelect=C;exports.BwgSwitch=D;
2
- //# sourceMappingURL=BwgSwitch-BLtVdW44.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BwgSwitch-BLtVdW44.cjs","sources":["../../src/components/core/BwgFormItem.tsx","../../src/components/core/BwgCheck.tsx","../../src/components/core/BwgDatePicker.tsx","../../src/components/core/BwgForm.tsx","../../src/components/core/BwgInput.tsx","../../src/components/core/BwgRangePicker.tsx","../../src/components/core/BwgSelect.tsx","../../src/components/core/BwgSwitch.tsx"],"sourcesContent":["import { Form, FormItemProps } from 'antd';\r\nimport { memo, ReactNode } from 'react';\r\n\r\nexport interface BwgFormItemProps extends FormItemProps {\r\n /** 폼 아이템 이름 */\r\n name?: string | string[];\r\n /** 폼 아이템 라벨 */\r\n label?: string | ReactNode;\r\n /** 폼 아이템 규칙 */\r\n rules?: any;\r\n /** 폼 아이템 초기값 */\r\n initialValue?: any;\r\n /** 폼 아이템 자식 컴포넌트 */\r\n children?: ReactNode;\r\n}\r\n\r\n/** 입력 폼 아이템 컴포넌트 */\r\nconst BwgFormItem = memo(\r\n ({\r\n children,\r\n label,\r\n name,\r\n rules,\r\n initialValue,\r\n style,\r\n ...rest\r\n }: BwgFormItemProps) => {\r\n const labelStyle = {\r\n fontWeight: 'bold',\r\n };\r\n\r\n // rules에서 required 필드 확인\r\n const isRequired =\r\n Array.isArray(rules) && rules.some((rule: any) => rule.required === true);\r\n\r\n // 라벨 렌더링 함수\r\n const renderLabel = () => {\r\n if (typeof label === 'string') {\r\n return (\r\n <span style={labelStyle}>\r\n {label}\r\n {isRequired && (\r\n <span style={{ color: '#ff4d4f', marginLeft: '4px' }}>*</span>\r\n )}\r\n </span>\r\n );\r\n }\r\n return <span style={labelStyle}>{label}</span>;\r\n };\r\n\r\n return (\r\n <Form.Item\r\n className='bwg-form-item'\r\n label={label ? renderLabel() : undefined}\r\n labelAlign='left'\r\n name={name}\r\n rules={rules}\r\n colon={false}\r\n initialValue={initialValue}\r\n style={style}\r\n {...rest}\r\n >\r\n {children}\r\n </Form.Item>\r\n );\r\n }\r\n);\r\n\r\nexport default BwgFormItem;\r\n","import { Checkbox, CheckboxProps, Form } from 'antd';\r\nimport BwgFormItem, { BwgFormItemProps } from './BwgFormItem';\r\n\r\nexport type BwgCheckBoxProps = CheckboxProps & {\r\n format?: 'boolean' | 'YN';\r\n};\r\n\r\nexport interface BwgCheckProps {\r\n itemProps?: BwgFormItemProps;\r\n inputProps?: BwgCheckBoxProps;\r\n}\r\n\r\n/**\r\n * 체크박스 컴포넌트\r\n * @param itemProps - BwgFormItemProps\r\n * @param inputProps - BwgCheckBoxProps\r\n * @returns \r\n * @example\r\n * <BwgCheck\r\n * itemProps={{ name: 'check' }}\r\n * inputProps={{ format: 'YN' }}\r\n * />\r\n */\r\nconst BwgCheck = ({\r\n itemProps,\r\n inputProps = {\r\n format: 'YN',\r\n },\r\n}: BwgCheckProps) => {\r\n const form = Form.useFormInstance();\r\n\r\n const handleChange = (e: any) => {\r\n //console.log('handleChange :: ', e.target.checked);\r\n if (inputProps.format === 'boolean') {\r\n form.setFieldValue(itemProps?.name, e.target.checked);\r\n } else {\r\n form.setFieldValue(itemProps?.name, e.target.checked ? 'Y' : 'N');\r\n }\r\n\r\n inputProps.onChange && inputProps.onChange(e);\r\n };\r\n\r\n return (\r\n <BwgFormItem\r\n {...itemProps}\r\n getValueProps={value => {\r\n //console.log('getValueProps :: ', value);\r\n const checked =\r\n inputProps.format === 'boolean'\r\n ? Boolean(value)\r\n : value === 'Y'\r\n ? true\r\n : false;\r\n return { checked }; // ✅ 수정: value 대신 checked 반환\r\n }}\r\n normalize={value => {\r\n //console.log('normalize :: ', value);\r\n // 체크박스의 경우 e.target.checked 값이 전달되므로 이를 처리\r\n if (typeof value === 'boolean') {\r\n if (inputProps.format === 'boolean') {\r\n return value;\r\n }\r\n return value ? 'Y' : 'N';\r\n }\r\n // 문자열이나 다른 값의 경우 기존 로직 유지\r\n if (inputProps.format === 'boolean') {\r\n return !!value;\r\n }\r\n return value ? 'Y' : 'N';\r\n }}\r\n >\r\n <Checkbox {...inputProps} onChange={handleChange}>\r\n {inputProps?.title}\r\n </Checkbox>\r\n </BwgFormItem>\r\n );\r\n};\r\n\r\nexport default BwgCheck;\r\n","import { DatePicker } from 'antd';\r\nimport { DatePickerProps } from 'antd/es/date-picker';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { useMemo } from 'react';\r\nimport BwgFormItem, { BwgFormItemProps } from './BwgFormItem';\r\n\r\nexport interface BwgDatePickerProps {\r\n itemProps?: BwgFormItemProps;\r\n inputProps?: DatePickerProps;\r\n type?: 'year' | 'month' | 'date' | 'time' | 'datetime';\r\n returnType?: 'dayjs' | 'string';\r\n}\r\n\r\nconst formatMap = {\r\n year: { displayFormat: 'YYYY', outputFormat: 'YYYY' },\r\n month: { displayFormat: 'YYYY-MM', outputFormat: 'YYYYMM' },\r\n date: { displayFormat: 'YYYY-MM-DD', outputFormat: 'YYYYMMDD' },\r\n time: { displayFormat: 'HH:mm', outputFormat: 'HHmm' },\r\n datetime: {\r\n displayFormat: 'YYYY-MM-DD HH:mm',\r\n outputFormat: 'YYYYMMDDHHmm',\r\n },\r\n};\r\n\r\nconst BwgDatePicker = ({\r\n itemProps,\r\n inputProps,\r\n type = 'date',\r\n returnType = 'string',\r\n}: BwgDatePickerProps) => {\r\n // type이 변경될 때 format이 업데이트되도록 useMemo를 사용합니다.\r\n const { displayFormat, outputFormat } = useMemo(\r\n () => formatMap[type],\r\n [type]\r\n );\r\n\r\n // 현재 type의 포맷을 우선순위로 두어 파싱 순서 결정\r\n const allOutputFormats = useMemo(\r\n () =>\r\n Object.values(formatMap)\r\n .map(f => f.outputFormat)\r\n .sort((a, b) => {\r\n if (a.length === b.length) {\r\n if (a === outputFormat) return -1; // 현재 포맷이면 우선순위를 높인다\r\n if (b === outputFormat) return 1;\r\n }\r\n return b.length - a.length;\r\n }),\r\n [outputFormat] // type(outputFormat)이 바뀔 때마다 재정렬\r\n );\r\n return (\r\n <BwgFormItem\r\n {...itemProps}\r\n getValueProps={value => ({\r\n // 폼에 저장된 값(문자열 또는 Dayjs)을 DatePicker가 요구하는 Dayjs로 변환\r\n value: value\r\n ? dayjs.isDayjs(value)\r\n ? (value as Dayjs)\r\n : dayjs(value as any, allOutputFormats)\r\n : null,\r\n })}\r\n normalize={value => {\r\n // DatePicker에서 넘어온 Dayjs를 returnType에 따라 반환\r\n if (!value) return null;\r\n if (returnType === 'dayjs') return value as Dayjs;\r\n return value.format(outputFormat);\r\n }}\r\n >\r\n <DatePicker\r\n {...inputProps}\r\n // antd DatePicker는 type 대신 picker와 showTime 속성을 사용합니다.\r\n picker={type === 'datetime' ? 'date' : type}\r\n showTime={\r\n inputProps?.showTime ?? (type === 'datetime' || type === 'time')\r\n }\r\n // useMask 속성 관련 로직이 불분명하고, displayFormat을 직접 사용하는 것이 더 확실합니다.\r\n format={displayFormat}\r\n // onChange 이벤트는 BwgFormItem의 normalize로 처리하므로 중복되는 handleChange를 제거합니다.\r\n ></DatePicker>\r\n </BwgFormItem>\r\n );\r\n};\r\n\r\nexport default BwgDatePicker;\r\n","import { ConfigProvider, Form, FormProps } from 'antd';\r\nimport { forwardRef, ReactNode } from 'react';\r\n\r\nexport interface BwgFormProps extends FormProps {\r\n children: ReactNode;\r\n}\r\n\r\nconst BwgForm = forwardRef<any, BwgFormProps>(\r\n ({ children, labelCol, style, className, ...props }, ref) => {\r\n return (\r\n <ConfigProvider\r\n form={{\r\n //기존 rule.message의 default message인 $name을를 입력해주세요를 변경\r\n validateMessages: { required: \"'${label}을(를) 입력해주세요.'\" },\r\n }}\r\n >\r\n <Form\r\n ref={ref}\r\n {...props}\r\n requiredMark={false}\r\n labelCol={labelCol || { flex: '100px' }}\r\n style={{ padding: '10px', ...style }}\r\n className={`bwg-form ${className ?? ''}`}\r\n >\r\n {children}\r\n </Form>\r\n </ConfigProvider>\r\n );\r\n }\r\n);\r\n\r\nBwgForm.displayName = 'BwgForm';\r\n\r\nexport default BwgForm;\r\n","import { FC } from 'react';\r\nimport { Input, InputProps } from 'antd';\r\nimport BwgFormItem, { BwgFormItemProps } from './BwgFormItem';\r\n\r\nexport interface BwgInputProps {\r\n itemProps?: BwgFormItemProps;\r\n inputProps?: InputProps;\r\n}\r\n\r\nconst BwgInput: FC<BwgInputProps> = ({ itemProps, inputProps }) => {\r\n return (\r\n <BwgFormItem {...itemProps}>\r\n <Input {...inputProps} />\r\n </BwgFormItem>\r\n );\r\n};\r\n\r\nexport default BwgInput;\r\n","import { DatePicker } from 'antd';\r\nimport { RangePickerProps } from 'antd/es/date-picker';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { useMemo } from 'react';\r\nimport BwgFormItem, { BwgFormItemProps } from './BwgFormItem';\r\n\r\nconst { RangePicker } = DatePicker;\r\n\r\nexport interface BwgRangePickerProps {\r\n inputProps?: RangePickerProps;\r\n itemProps?: BwgFormItemProps;\r\n type?: 'year' | 'month' | 'date' | 'time' | 'datetime';\r\n minDate?: string;\r\n maxDate?: string;\r\n returnType?: 'dayjs' | 'string';\r\n}\r\n\r\nconst formatMap = {\r\n year: { displayFormat: 'YYYY', outputFormat: 'YYYY' },\r\n month: { displayFormat: 'YYYY-MM', outputFormat: 'YYYYMM' },\r\n date: { displayFormat: 'YYYY-MM-DD', outputFormat: 'YYYYMMDD' },\r\n time: { displayFormat: 'HH:mm', outputFormat: 'HHmm' },\r\n datetime: {\r\n displayFormat: 'YYYY-MM-DD HH:mm',\r\n outputFormat: 'YYYYMMDDHHmm',\r\n },\r\n};\r\n\r\nconst BwgRangePicker = ({\r\n itemProps,\r\n inputProps,\r\n type = 'date',\r\n minDate,\r\n maxDate,\r\n returnType = 'string',\r\n}: BwgRangePickerProps) => {\r\n // type이 변경될 때 format이 업데이트되도록 useMemo를 사용합니다.\r\n const { displayFormat, outputFormat } = useMemo(\r\n () => formatMap[type],\r\n [type]\r\n );\r\n\r\n // 현재 type의 포맷을 우선순위로 두어 파싱 순서 결정\r\n const allOutputFormats = useMemo(\r\n () =>\r\n Object.values(formatMap)\r\n .map(f => f.outputFormat)\r\n .sort((a, b) => {\r\n if (a.length === b.length) {\r\n if (a === outputFormat) return -1; // 현재 포맷이면 우선순위를 높인다\r\n if (b === outputFormat) return 1;\r\n }\r\n return b.length - a.length;\r\n }),\r\n [outputFormat] // type(outputFormat)이 바뀔 때마다 재정렬\r\n );\r\n return (\r\n <BwgFormItem\r\n {...itemProps}\r\n getValueProps={value => ({\r\n // 폼에 저장된 값(문자열 또는 Dayjs)을 RangePicker가 요구하는 Dayjs 배열로 변환\r\n value:\r\n value && value.length > 0\r\n ? [\r\n value[0]\r\n ? dayjs.isDayjs(value[0])\r\n ? (value[0] as Dayjs)\r\n : dayjs(value[0] as any, allOutputFormats)\r\n : null,\r\n value[1]\r\n ? dayjs.isDayjs(value[1])\r\n ? (value[1] as Dayjs)\r\n : dayjs(value[1] as any, allOutputFormats)\r\n : null,\r\n ]\r\n : null,\r\n })}\r\n normalize={(value: [Dayjs, Dayjs] | null) => {\r\n // RangePicker에서 넘어온 dayjs 객체 배열을 현재 type에 맞는 outputFormat으로 변환합니다.\r\n if (!value) {\r\n return [undefined, undefined];\r\n }\r\n if (returnType === 'dayjs') {\r\n return [value[0] ?? undefined, value[1] ?? undefined];\r\n }\r\n return [\r\n value[0] ? value[0].format(outputFormat) : undefined,\r\n value[1] ? value[1].format(outputFormat) : undefined,\r\n ];\r\n }}\r\n >\r\n <RangePicker\r\n {...inputProps}\r\n order={true}\r\n // minDate/maxDate도 모든 포맷으로 파싱하도록 수정\r\n minDate={minDate ? dayjs(minDate, allOutputFormats) : undefined}\r\n maxDate={maxDate ? dayjs(maxDate, allOutputFormats) : undefined}\r\n // antd DatePicker는 type 대신 picker와 showTime 속성을 사용합니다.\r\n picker={type === 'datetime' ? 'date' : type}\r\n showTime={\r\n inputProps?.showTime ?? (type === 'datetime' || type === 'time')\r\n }\r\n // useMask 속성 관련 로직이 불분명하고, displayFormat을 직접 사용하는 것이 더 확실합니다.\r\n format={displayFormat}\r\n // onChange 이벤트는 BwgFormItem의 normalize로 처리하므로 제거합니다.\r\n />\r\n </BwgFormItem>\r\n );\r\n};\r\n\r\nexport default BwgRangePicker;\r\n","import { Form, Select, Space, Typography } from 'antd';\r\nimport { SelectProps } from 'antd/es/select';\r\nimport { useMemo } from 'react';\r\nimport { SimpleCodeItem } from '../../stores/codeStore';\r\nimport BwgFormItem, { BwgFormItemProps } from './BwgFormItem';\r\n\r\nexport type SelectBoxProps = SelectProps & {\r\n addField?: 'ALL' | 'NULL';\r\n options: SimpleCodeItem[];\r\n copyable?: boolean;\r\n};\r\n\r\nexport interface BwgSelectProps {\r\n /** 폼 아이템 속성 */\r\n itemProps?: BwgFormItemProps;\r\n selectProps?: SelectBoxProps;\r\n}\r\n\r\nconst BwgSelect = ({\r\n itemProps,\r\n selectProps = {\r\n options: [],\r\n allowClear: true,\r\n },\r\n}: BwgSelectProps) => {\r\n // Form 컨텍스트 체크\r\n const form = Form.useFormInstance();\r\n const isFormContext = !!form;\r\n\r\n // 옵션 리스트 메모이제이션\r\n const optionList = useMemo(() => {\r\n if (selectProps?.addField === 'ALL') {\r\n return [{ label: '전체', value: '' }, ...(selectProps?.options || [])];\r\n } else if (selectProps?.addField === 'NULL') {\r\n return [{ label: '', value: '' }, ...(selectProps?.options || [])];\r\n } else {\r\n return selectProps?.options || [];\r\n }\r\n }, [selectProps.options, selectProps.addField]);\r\n\r\n const handleChange = (newValue: string) => {\r\n selectProps.onChange?.(newValue);\r\n };\r\n\r\n // Select 컴포넌트에 전달할 props\r\n const selectComponentProps = {\r\n ...selectProps,\r\n allowClear: selectProps.allowClear ?? true,\r\n options: optionList,\r\n onChange: handleChange,\r\n variant: selectProps.variant,\r\n };\r\n\r\n // console.log(\"selectComponentProps :: \", selectComponentProps);\r\n\r\n const selectComponent = (\r\n <Select {...selectComponentProps} disabled={selectProps.disabled} />\r\n );\r\n\r\n // copyable일 때 Form 컨텍스트 체크\r\n if (selectProps.copyable && !isFormContext) {\r\n console.warn(\r\n 'BwgSelect: copyable 기능은 Form 컨텍스트 내에서만 사용 가능합니다.'\r\n );\r\n }\r\n\r\n if (selectProps.copyable) {\r\n return (\r\n <BwgFormItem {...itemProps} name={undefined}>\r\n <Space.Compact block>\r\n <Form.Item\r\n name={itemProps?.name}\r\n rules={itemProps?.rules}\r\n style={{ width: '100%', marginBottom: 0 }}\r\n validateStatus=''\r\n help=''\r\n >\r\n {selectComponent}\r\n </Form.Item>\r\n <Typography.Paragraph\r\n copyable={{\r\n text: isFormContext\r\n ? form?.getFieldValue(itemProps?.name)?.toString() || ''\r\n : '',\r\n tooltips: ['코드복사', '코드복사됨'],\r\n }}\r\n style={{\r\n margin: 0,\r\n backgroundColor: '#f5f5f5',\r\n borderRadius: '4px',\r\n border: '1px solid #d9d9d9',\r\n fontSize: '12px',\r\n color: '#666',\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '30px',\r\n padding: '0 8px',\r\n }}\r\n />\r\n </Space.Compact>\r\n </BwgFormItem>\r\n );\r\n } else {\r\n return <BwgFormItem {...itemProps}>{selectComponent}</BwgFormItem>;\r\n }\r\n};\r\n\r\nexport default BwgSelect;\r\n","import { Form, Switch, SwitchProps } from \"antd\";\r\nimport BwgFormItem, { BwgFormItemProps } from \"./BwgFormItem\";\r\n\r\nexport type BwgSwitchItemProps = SwitchProps & {\r\n format?: 'boolean' | 'YN';\r\n };\r\n \r\n export interface BwgSwitchProps {\r\n itemProps?: BwgFormItemProps;\r\n inputProps?: BwgSwitchItemProps;\r\n }\r\n\r\n/**\r\n * 스위치 컴포넌트\r\n * @param itemProps - BwgFormItemProps\r\n * @param inputProps - BwgSwitchItemProps\r\n * @returns \r\n * @example\r\n * <BwgSwitch\r\n * itemProps={{ name: 'switch' }}\r\n * inputProps={{ format: 'YN' }}\r\n * />\r\n * @returns \r\n */\r\nconst BwgSwitch = ({\r\n itemProps,\r\n inputProps = {\r\n format: 'YN',\r\n },\r\n}: BwgSwitchProps) => {\r\n const form = Form.useFormInstance();\r\n \r\n const handleChange = (checked: boolean, e: any) => {\r\n if (inputProps.format === 'boolean') {\r\n form.setFieldValue(itemProps?.name, checked);\r\n } else {\r\n form.setFieldValue(itemProps?.name, checked ? 'Y' : 'N');\r\n }\r\n \r\n inputProps.onChange && inputProps.onChange(checked, e as any);\r\n };\r\n\r\n return <BwgFormItem {...itemProps} \r\n getValueProps={value => {\r\n const checked =\r\n inputProps.format === 'boolean'\r\n ? Boolean(value)\r\n : value === 'Y'\r\n ? true\r\n : false;\r\n return { checked };\r\n }}\r\n normalize={value => {\r\n //console.log('normalize :: ', value);\r\n // 체크박스의 경우 e.target.checked 값이 전달되므로 이를 처리\r\n if (typeof value === 'boolean') {\r\n if (inputProps.format === 'boolean') {\r\n return value;\r\n }\r\n return value ? 'Y' : 'N';\r\n }\r\n // 문자열이나 다른 값의 경우 기존 로직 유지\r\n if (inputProps.format === 'boolean') {\r\n return !!value;\r\n }\r\n return value ? 'Y' : 'N';\r\n }}\r\n >\r\n <Switch {...inputProps} onChange={(checked: boolean, e: any) => handleChange(checked, e)} />\r\n </BwgFormItem>;\r\n};\r\n\r\nexport default BwgSwitch;"],"names":["BwgFormItem","memo","children","label","name","rules","initialValue","style","rest","labelStyle","isRequired","rule","renderLabel","jsxs","jsx","Form","BwgCheck","itemProps","inputProps","form","handleChange","e","value","Checkbox","formatMap","BwgDatePicker","type","returnType","displayFormat","outputFormat","useMemo","allOutputFormats","f","a","b","dayjs","DatePicker","BwgForm","forwardRef","labelCol","className","props","ref","ConfigProvider","BwgInput","Input","RangePicker","BwgRangePicker","minDate","maxDate","BwgSelect","selectProps","isFormContext","optionList","newValue","selectComponentProps","selectComponent","Select","Space","Typography","BwgSwitch","checked","Switch"],"mappings":"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"}
@@ -1,269 +0,0 @@
1
- import { jsx as m, jsxs as y } from "react/jsx-runtime";
2
- import { Form as f, Checkbox as b, DatePicker as M, ConfigProvider as w, Input as C, Select as p, Space as D, Typography as x, Switch as H } from "antd";
3
- import s from "dayjs";
4
- import { memo as k, useMemo as g, forwardRef as B } from "react";
5
- const Y = k(
6
- ({
7
- children: n,
8
- label: t,
9
- name: o,
10
- rules: l,
11
- initialValue: e,
12
- style: i,
13
- ...c
14
- }) => {
15
- const r = {
16
- fontWeight: "bold"
17
- }, d = Array.isArray(l) && l.some((u) => u.required === !0), a = () => typeof t == "string" ? /* @__PURE__ */ y("span", { style: r, children: [
18
- t,
19
- d && /* @__PURE__ */ m("span", { style: { color: "#ff4d4f", marginLeft: "4px" }, children: "*" })
20
- ] }) : /* @__PURE__ */ m("span", { style: r, children: t });
21
- return /* @__PURE__ */ m(
22
- f.Item,
23
- {
24
- className: "bwg-form-item",
25
- label: t ? a() : void 0,
26
- labelAlign: "left",
27
- name: o,
28
- rules: l,
29
- colon: !1,
30
- initialValue: e,
31
- style: i,
32
- ...c,
33
- children: n
34
- }
35
- );
36
- }
37
- ), z = ({
38
- itemProps: n,
39
- inputProps: t = {
40
- format: "YN"
41
- }
42
- }) => {
43
- const o = f.useFormInstance();
44
- return /* @__PURE__ */ m(
45
- Y,
46
- {
47
- ...n,
48
- getValueProps: (e) => ({ checked: t.format === "boolean" ? !!e : e === "Y" }),
49
- normalize: (e) => typeof e == "boolean" ? t.format === "boolean" ? e : e ? "Y" : "N" : t.format === "boolean" ? !!e : e ? "Y" : "N",
50
- children: /* @__PURE__ */ m(b, { ...t, onChange: (e) => {
51
- t.format === "boolean" ? o.setFieldValue(n?.name, e.target.checked) : o.setFieldValue(n?.name, e.target.checked ? "Y" : "N"), t.onChange && t.onChange(e);
52
- }, children: t?.title })
53
- }
54
- );
55
- }, h = {
56
- year: { displayFormat: "YYYY", outputFormat: "YYYY" },
57
- month: { displayFormat: "YYYY-MM", outputFormat: "YYYYMM" },
58
- date: { displayFormat: "YYYY-MM-DD", outputFormat: "YYYYMMDD" },
59
- time: { displayFormat: "HH:mm", outputFormat: "HHmm" },
60
- datetime: {
61
- displayFormat: "YYYY-MM-DD HH:mm",
62
- outputFormat: "YYYYMMDDHHmm"
63
- }
64
- }, R = ({
65
- itemProps: n,
66
- inputProps: t,
67
- type: o = "date",
68
- returnType: l = "string"
69
- }) => {
70
- const { displayFormat: e, outputFormat: i } = g(
71
- () => h[o],
72
- [o]
73
- ), c = g(
74
- () => Object.values(h).map((r) => r.outputFormat).sort((r, d) => {
75
- if (r.length === d.length) {
76
- if (r === i) return -1;
77
- if (d === i) return 1;
78
- }
79
- return d.length - r.length;
80
- }),
81
- [i]
82
- // type(outputFormat)이 바뀔 때마다 재정렬
83
- );
84
- return /* @__PURE__ */ m(
85
- Y,
86
- {
87
- ...n,
88
- getValueProps: (r) => ({
89
- // 폼에 저장된 값(문자열 또는 Dayjs)을 DatePicker가 요구하는 Dayjs로 변환
90
- value: r ? s.isDayjs(r) ? r : s(r, c) : null
91
- }),
92
- normalize: (r) => r ? l === "dayjs" ? r : r.format(i) : null,
93
- children: /* @__PURE__ */ m(
94
- M,
95
- {
96
- ...t,
97
- picker: o === "datetime" ? "date" : o,
98
- showTime: t?.showTime ?? (o === "datetime" || o === "time"),
99
- format: e
100
- }
101
- )
102
- }
103
- );
104
- }, N = B(
105
- ({ children: n, labelCol: t, style: o, className: l, ...e }, i) => /* @__PURE__ */ m(
106
- w,
107
- {
108
- form: {
109
- //기존 rule.message의 default message인 $name을를 입력해주세요를 변경
110
- validateMessages: { required: "'${label}을(를) 입력해주세요.'" }
111
- },
112
- children: /* @__PURE__ */ m(
113
- f,
114
- {
115
- ref: i,
116
- ...e,
117
- requiredMark: !1,
118
- labelCol: t || { flex: "100px" },
119
- style: { padding: "10px", ...o },
120
- className: `bwg-form ${l ?? ""}`,
121
- children: n
122
- }
123
- )
124
- }
125
- )
126
- );
127
- N.displayName = "BwgForm";
128
- const T = ({ itemProps: n, inputProps: t }) => /* @__PURE__ */ m(Y, { ...n, children: /* @__PURE__ */ m(C, { ...t }) }), { RangePicker: j } = M, F = {
129
- year: { displayFormat: "YYYY", outputFormat: "YYYY" },
130
- month: { displayFormat: "YYYY-MM", outputFormat: "YYYYMM" },
131
- date: { displayFormat: "YYYY-MM-DD", outputFormat: "YYYYMMDD" },
132
- time: { displayFormat: "HH:mm", outputFormat: "HHmm" },
133
- datetime: {
134
- displayFormat: "YYYY-MM-DD HH:mm",
135
- outputFormat: "YYYYMMDDHHmm"
136
- }
137
- }, q = ({
138
- itemProps: n,
139
- inputProps: t,
140
- type: o = "date",
141
- minDate: l,
142
- maxDate: e,
143
- returnType: i = "string"
144
- }) => {
145
- const { displayFormat: c, outputFormat: r } = g(
146
- () => F[o],
147
- [o]
148
- ), d = g(
149
- () => Object.values(F).map((a) => a.outputFormat).sort((a, u) => {
150
- if (a.length === u.length) {
151
- if (a === r) return -1;
152
- if (u === r) return 1;
153
- }
154
- return u.length - a.length;
155
- }),
156
- [r]
157
- // type(outputFormat)이 바뀔 때마다 재정렬
158
- );
159
- return /* @__PURE__ */ m(
160
- Y,
161
- {
162
- ...n,
163
- getValueProps: (a) => ({
164
- // 폼에 저장된 값(문자열 또는 Dayjs)을 RangePicker가 요구하는 Dayjs 배열로 변환
165
- value: a && a.length > 0 ? [
166
- a[0] ? s.isDayjs(a[0]) ? a[0] : s(a[0], d) : null,
167
- a[1] ? s.isDayjs(a[1]) ? a[1] : s(a[1], d) : null
168
- ] : null
169
- }),
170
- normalize: (a) => a ? i === "dayjs" ? [a[0] ?? void 0, a[1] ?? void 0] : [
171
- a[0] ? a[0].format(r) : void 0,
172
- a[1] ? a[1].format(r) : void 0
173
- ] : [void 0, void 0],
174
- children: /* @__PURE__ */ m(
175
- j,
176
- {
177
- ...t,
178
- order: !0,
179
- minDate: l ? s(l, d) : void 0,
180
- maxDate: e ? s(e, d) : void 0,
181
- picker: o === "datetime" ? "date" : o,
182
- showTime: t?.showTime ?? (o === "datetime" || o === "time"),
183
- format: c
184
- }
185
- )
186
- }
187
- );
188
- }, A = ({
189
- itemProps: n,
190
- selectProps: t = {
191
- options: [],
192
- allowClear: !0
193
- }
194
- }) => {
195
- const o = f.useFormInstance(), l = !!o, e = g(() => t?.addField === "ALL" ? [{ label: "전체", value: "" }, ...t?.options || []] : t?.addField === "NULL" ? [{ label: "", value: "" }, ...t?.options || []] : t?.options || [], [t.options, t.addField]), i = (d) => {
196
- t.onChange?.(d);
197
- }, c = {
198
- ...t,
199
- allowClear: t.allowClear ?? !0,
200
- options: e,
201
- onChange: i,
202
- variant: t.variant
203
- }, r = /* @__PURE__ */ m(p, { ...c, disabled: t.disabled });
204
- return t.copyable && !l && console.warn(
205
- "BwgSelect: copyable 기능은 Form 컨텍스트 내에서만 사용 가능합니다."
206
- ), t.copyable ? /* @__PURE__ */ m(Y, { ...n, name: void 0, children: /* @__PURE__ */ y(D.Compact, { block: !0, children: [
207
- /* @__PURE__ */ m(
208
- f.Item,
209
- {
210
- name: n?.name,
211
- rules: n?.rules,
212
- style: { width: "100%", marginBottom: 0 },
213
- validateStatus: "",
214
- help: "",
215
- children: r
216
- }
217
- ),
218
- /* @__PURE__ */ m(
219
- x.Paragraph,
220
- {
221
- copyable: {
222
- text: l && o?.getFieldValue(n?.name)?.toString() || "",
223
- tooltips: ["코드복사", "코드복사됨"]
224
- },
225
- style: {
226
- margin: 0,
227
- backgroundColor: "#f5f5f5",
228
- borderRadius: "4px",
229
- border: "1px solid #d9d9d9",
230
- fontSize: "12px",
231
- color: "#666",
232
- display: "flex",
233
- alignItems: "center",
234
- height: "30px",
235
- padding: "0 8px"
236
- }
237
- }
238
- )
239
- ] }) }) : /* @__PURE__ */ m(Y, { ...n, children: r });
240
- }, O = ({
241
- itemProps: n,
242
- inputProps: t = {
243
- format: "YN"
244
- }
245
- }) => {
246
- const o = f.useFormInstance(), l = (e, i) => {
247
- t.format === "boolean" ? o.setFieldValue(n?.name, e) : o.setFieldValue(n?.name, e ? "Y" : "N"), t.onChange && t.onChange(e, i);
248
- };
249
- return /* @__PURE__ */ m(
250
- Y,
251
- {
252
- ...n,
253
- getValueProps: (e) => ({ checked: t.format === "boolean" ? !!e : e === "Y" }),
254
- normalize: (e) => typeof e == "boolean" ? t.format === "boolean" ? e : e ? "Y" : "N" : t.format === "boolean" ? !!e : e ? "Y" : "N",
255
- children: /* @__PURE__ */ m(H, { ...t, onChange: (e, i) => l(e, i) })
256
- }
257
- );
258
- };
259
- export {
260
- z as B,
261
- R as a,
262
- N as b,
263
- Y as c,
264
- T as d,
265
- q as e,
266
- A as f,
267
- O as g
268
- };
269
- //# sourceMappingURL=BwgSwitch-DdHo4gYR.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BwgSwitch-DdHo4gYR.js","sources":["../../src/components/core/BwgFormItem.tsx","../../src/components/core/BwgCheck.tsx","../../src/components/core/BwgDatePicker.tsx","../../src/components/core/BwgForm.tsx","../../src/components/core/BwgInput.tsx","../../src/components/core/BwgRangePicker.tsx","../../src/components/core/BwgSelect.tsx","../../src/components/core/BwgSwitch.tsx"],"sourcesContent":["import { Form, FormItemProps } from 'antd';\r\nimport { memo, ReactNode } from 'react';\r\n\r\nexport interface BwgFormItemProps extends FormItemProps {\r\n /** 폼 아이템 이름 */\r\n name?: string | string[];\r\n /** 폼 아이템 라벨 */\r\n label?: string | ReactNode;\r\n /** 폼 아이템 규칙 */\r\n rules?: any;\r\n /** 폼 아이템 초기값 */\r\n initialValue?: any;\r\n /** 폼 아이템 자식 컴포넌트 */\r\n children?: ReactNode;\r\n}\r\n\r\n/** 입력 폼 아이템 컴포넌트 */\r\nconst BwgFormItem = memo(\r\n ({\r\n children,\r\n label,\r\n name,\r\n rules,\r\n initialValue,\r\n style,\r\n ...rest\r\n }: BwgFormItemProps) => {\r\n const labelStyle = {\r\n fontWeight: 'bold',\r\n };\r\n\r\n // rules에서 required 필드 확인\r\n const isRequired =\r\n Array.isArray(rules) && rules.some((rule: any) => rule.required === true);\r\n\r\n // 라벨 렌더링 함수\r\n const renderLabel = () => {\r\n if (typeof label === 'string') {\r\n return (\r\n <span style={labelStyle}>\r\n {label}\r\n {isRequired && (\r\n <span style={{ color: '#ff4d4f', marginLeft: '4px' }}>*</span>\r\n )}\r\n </span>\r\n );\r\n }\r\n return <span style={labelStyle}>{label}</span>;\r\n };\r\n\r\n return (\r\n <Form.Item\r\n className='bwg-form-item'\r\n label={label ? renderLabel() : undefined}\r\n labelAlign='left'\r\n name={name}\r\n rules={rules}\r\n colon={false}\r\n initialValue={initialValue}\r\n style={style}\r\n {...rest}\r\n >\r\n {children}\r\n </Form.Item>\r\n );\r\n }\r\n);\r\n\r\nexport default BwgFormItem;\r\n","import { Checkbox, CheckboxProps, Form } from 'antd';\r\nimport BwgFormItem, { BwgFormItemProps } from './BwgFormItem';\r\n\r\nexport type BwgCheckBoxProps = CheckboxProps & {\r\n format?: 'boolean' | 'YN';\r\n};\r\n\r\nexport interface BwgCheckProps {\r\n itemProps?: BwgFormItemProps;\r\n inputProps?: BwgCheckBoxProps;\r\n}\r\n\r\n/**\r\n * 체크박스 컴포넌트\r\n * @param itemProps - BwgFormItemProps\r\n * @param inputProps - BwgCheckBoxProps\r\n * @returns \r\n * @example\r\n * <BwgCheck\r\n * itemProps={{ name: 'check' }}\r\n * inputProps={{ format: 'YN' }}\r\n * />\r\n */\r\nconst BwgCheck = ({\r\n itemProps,\r\n inputProps = {\r\n format: 'YN',\r\n },\r\n}: BwgCheckProps) => {\r\n const form = Form.useFormInstance();\r\n\r\n const handleChange = (e: any) => {\r\n //console.log('handleChange :: ', e.target.checked);\r\n if (inputProps.format === 'boolean') {\r\n form.setFieldValue(itemProps?.name, e.target.checked);\r\n } else {\r\n form.setFieldValue(itemProps?.name, e.target.checked ? 'Y' : 'N');\r\n }\r\n\r\n inputProps.onChange && inputProps.onChange(e);\r\n };\r\n\r\n return (\r\n <BwgFormItem\r\n {...itemProps}\r\n getValueProps={value => {\r\n //console.log('getValueProps :: ', value);\r\n const checked =\r\n inputProps.format === 'boolean'\r\n ? Boolean(value)\r\n : value === 'Y'\r\n ? true\r\n : false;\r\n return { checked }; // ✅ 수정: value 대신 checked 반환\r\n }}\r\n normalize={value => {\r\n //console.log('normalize :: ', value);\r\n // 체크박스의 경우 e.target.checked 값이 전달되므로 이를 처리\r\n if (typeof value === 'boolean') {\r\n if (inputProps.format === 'boolean') {\r\n return value;\r\n }\r\n return value ? 'Y' : 'N';\r\n }\r\n // 문자열이나 다른 값의 경우 기존 로직 유지\r\n if (inputProps.format === 'boolean') {\r\n return !!value;\r\n }\r\n return value ? 'Y' : 'N';\r\n }}\r\n >\r\n <Checkbox {...inputProps} onChange={handleChange}>\r\n {inputProps?.title}\r\n </Checkbox>\r\n </BwgFormItem>\r\n );\r\n};\r\n\r\nexport default BwgCheck;\r\n","import { DatePicker } from 'antd';\r\nimport { DatePickerProps } from 'antd/es/date-picker';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { useMemo } from 'react';\r\nimport BwgFormItem, { BwgFormItemProps } from './BwgFormItem';\r\n\r\nexport interface BwgDatePickerProps {\r\n itemProps?: BwgFormItemProps;\r\n inputProps?: DatePickerProps;\r\n type?: 'year' | 'month' | 'date' | 'time' | 'datetime';\r\n returnType?: 'dayjs' | 'string';\r\n}\r\n\r\nconst formatMap = {\r\n year: { displayFormat: 'YYYY', outputFormat: 'YYYY' },\r\n month: { displayFormat: 'YYYY-MM', outputFormat: 'YYYYMM' },\r\n date: { displayFormat: 'YYYY-MM-DD', outputFormat: 'YYYYMMDD' },\r\n time: { displayFormat: 'HH:mm', outputFormat: 'HHmm' },\r\n datetime: {\r\n displayFormat: 'YYYY-MM-DD HH:mm',\r\n outputFormat: 'YYYYMMDDHHmm',\r\n },\r\n};\r\n\r\nconst BwgDatePicker = ({\r\n itemProps,\r\n inputProps,\r\n type = 'date',\r\n returnType = 'string',\r\n}: BwgDatePickerProps) => {\r\n // type이 변경될 때 format이 업데이트되도록 useMemo를 사용합니다.\r\n const { displayFormat, outputFormat } = useMemo(\r\n () => formatMap[type],\r\n [type]\r\n );\r\n\r\n // 현재 type의 포맷을 우선순위로 두어 파싱 순서 결정\r\n const allOutputFormats = useMemo(\r\n () =>\r\n Object.values(formatMap)\r\n .map(f => f.outputFormat)\r\n .sort((a, b) => {\r\n if (a.length === b.length) {\r\n if (a === outputFormat) return -1; // 현재 포맷이면 우선순위를 높인다\r\n if (b === outputFormat) return 1;\r\n }\r\n return b.length - a.length;\r\n }),\r\n [outputFormat] // type(outputFormat)이 바뀔 때마다 재정렬\r\n );\r\n return (\r\n <BwgFormItem\r\n {...itemProps}\r\n getValueProps={value => ({\r\n // 폼에 저장된 값(문자열 또는 Dayjs)을 DatePicker가 요구하는 Dayjs로 변환\r\n value: value\r\n ? dayjs.isDayjs(value)\r\n ? (value as Dayjs)\r\n : dayjs(value as any, allOutputFormats)\r\n : null,\r\n })}\r\n normalize={value => {\r\n // DatePicker에서 넘어온 Dayjs를 returnType에 따라 반환\r\n if (!value) return null;\r\n if (returnType === 'dayjs') return value as Dayjs;\r\n return value.format(outputFormat);\r\n }}\r\n >\r\n <DatePicker\r\n {...inputProps}\r\n // antd DatePicker는 type 대신 picker와 showTime 속성을 사용합니다.\r\n picker={type === 'datetime' ? 'date' : type}\r\n showTime={\r\n inputProps?.showTime ?? (type === 'datetime' || type === 'time')\r\n }\r\n // useMask 속성 관련 로직이 불분명하고, displayFormat을 직접 사용하는 것이 더 확실합니다.\r\n format={displayFormat}\r\n // onChange 이벤트는 BwgFormItem의 normalize로 처리하므로 중복되는 handleChange를 제거합니다.\r\n ></DatePicker>\r\n </BwgFormItem>\r\n );\r\n};\r\n\r\nexport default BwgDatePicker;\r\n","import { ConfigProvider, Form, FormProps } from 'antd';\r\nimport { forwardRef, ReactNode } from 'react';\r\n\r\nexport interface BwgFormProps extends FormProps {\r\n children: ReactNode;\r\n}\r\n\r\nconst BwgForm = forwardRef<any, BwgFormProps>(\r\n ({ children, labelCol, style, className, ...props }, ref) => {\r\n return (\r\n <ConfigProvider\r\n form={{\r\n //기존 rule.message의 default message인 $name을를 입력해주세요를 변경\r\n validateMessages: { required: \"'${label}을(를) 입력해주세요.'\" },\r\n }}\r\n >\r\n <Form\r\n ref={ref}\r\n {...props}\r\n requiredMark={false}\r\n labelCol={labelCol || { flex: '100px' }}\r\n style={{ padding: '10px', ...style }}\r\n className={`bwg-form ${className ?? ''}`}\r\n >\r\n {children}\r\n </Form>\r\n </ConfigProvider>\r\n );\r\n }\r\n);\r\n\r\nBwgForm.displayName = 'BwgForm';\r\n\r\nexport default BwgForm;\r\n","import { FC } from 'react';\r\nimport { Input, InputProps } from 'antd';\r\nimport BwgFormItem, { BwgFormItemProps } from './BwgFormItem';\r\n\r\nexport interface BwgInputProps {\r\n itemProps?: BwgFormItemProps;\r\n inputProps?: InputProps;\r\n}\r\n\r\nconst BwgInput: FC<BwgInputProps> = ({ itemProps, inputProps }) => {\r\n return (\r\n <BwgFormItem {...itemProps}>\r\n <Input {...inputProps} />\r\n </BwgFormItem>\r\n );\r\n};\r\n\r\nexport default BwgInput;\r\n","import { DatePicker } from 'antd';\r\nimport { RangePickerProps } from 'antd/es/date-picker';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport { useMemo } from 'react';\r\nimport BwgFormItem, { BwgFormItemProps } from './BwgFormItem';\r\n\r\nconst { RangePicker } = DatePicker;\r\n\r\nexport interface BwgRangePickerProps {\r\n inputProps?: RangePickerProps;\r\n itemProps?: BwgFormItemProps;\r\n type?: 'year' | 'month' | 'date' | 'time' | 'datetime';\r\n minDate?: string;\r\n maxDate?: string;\r\n returnType?: 'dayjs' | 'string';\r\n}\r\n\r\nconst formatMap = {\r\n year: { displayFormat: 'YYYY', outputFormat: 'YYYY' },\r\n month: { displayFormat: 'YYYY-MM', outputFormat: 'YYYYMM' },\r\n date: { displayFormat: 'YYYY-MM-DD', outputFormat: 'YYYYMMDD' },\r\n time: { displayFormat: 'HH:mm', outputFormat: 'HHmm' },\r\n datetime: {\r\n displayFormat: 'YYYY-MM-DD HH:mm',\r\n outputFormat: 'YYYYMMDDHHmm',\r\n },\r\n};\r\n\r\nconst BwgRangePicker = ({\r\n itemProps,\r\n inputProps,\r\n type = 'date',\r\n minDate,\r\n maxDate,\r\n returnType = 'string',\r\n}: BwgRangePickerProps) => {\r\n // type이 변경될 때 format이 업데이트되도록 useMemo를 사용합니다.\r\n const { displayFormat, outputFormat } = useMemo(\r\n () => formatMap[type],\r\n [type]\r\n );\r\n\r\n // 현재 type의 포맷을 우선순위로 두어 파싱 순서 결정\r\n const allOutputFormats = useMemo(\r\n () =>\r\n Object.values(formatMap)\r\n .map(f => f.outputFormat)\r\n .sort((a, b) => {\r\n if (a.length === b.length) {\r\n if (a === outputFormat) return -1; // 현재 포맷이면 우선순위를 높인다\r\n if (b === outputFormat) return 1;\r\n }\r\n return b.length - a.length;\r\n }),\r\n [outputFormat] // type(outputFormat)이 바뀔 때마다 재정렬\r\n );\r\n return (\r\n <BwgFormItem\r\n {...itemProps}\r\n getValueProps={value => ({\r\n // 폼에 저장된 값(문자열 또는 Dayjs)을 RangePicker가 요구하는 Dayjs 배열로 변환\r\n value:\r\n value && value.length > 0\r\n ? [\r\n value[0]\r\n ? dayjs.isDayjs(value[0])\r\n ? (value[0] as Dayjs)\r\n : dayjs(value[0] as any, allOutputFormats)\r\n : null,\r\n value[1]\r\n ? dayjs.isDayjs(value[1])\r\n ? (value[1] as Dayjs)\r\n : dayjs(value[1] as any, allOutputFormats)\r\n : null,\r\n ]\r\n : null,\r\n })}\r\n normalize={(value: [Dayjs, Dayjs] | null) => {\r\n // RangePicker에서 넘어온 dayjs 객체 배열을 현재 type에 맞는 outputFormat으로 변환합니다.\r\n if (!value) {\r\n return [undefined, undefined];\r\n }\r\n if (returnType === 'dayjs') {\r\n return [value[0] ?? undefined, value[1] ?? undefined];\r\n }\r\n return [\r\n value[0] ? value[0].format(outputFormat) : undefined,\r\n value[1] ? value[1].format(outputFormat) : undefined,\r\n ];\r\n }}\r\n >\r\n <RangePicker\r\n {...inputProps}\r\n order={true}\r\n // minDate/maxDate도 모든 포맷으로 파싱하도록 수정\r\n minDate={minDate ? dayjs(minDate, allOutputFormats) : undefined}\r\n maxDate={maxDate ? dayjs(maxDate, allOutputFormats) : undefined}\r\n // antd DatePicker는 type 대신 picker와 showTime 속성을 사용합니다.\r\n picker={type === 'datetime' ? 'date' : type}\r\n showTime={\r\n inputProps?.showTime ?? (type === 'datetime' || type === 'time')\r\n }\r\n // useMask 속성 관련 로직이 불분명하고, displayFormat을 직접 사용하는 것이 더 확실합니다.\r\n format={displayFormat}\r\n // onChange 이벤트는 BwgFormItem의 normalize로 처리하므로 제거합니다.\r\n />\r\n </BwgFormItem>\r\n );\r\n};\r\n\r\nexport default BwgRangePicker;\r\n","import { Form, Select, Space, Typography } from 'antd';\r\nimport { SelectProps } from 'antd/es/select';\r\nimport { useMemo } from 'react';\r\nimport { SimpleCodeItem } from '../../stores/codeStore';\r\nimport BwgFormItem, { BwgFormItemProps } from './BwgFormItem';\r\n\r\nexport type SelectBoxProps = SelectProps & {\r\n addField?: 'ALL' | 'NULL';\r\n options: SimpleCodeItem[];\r\n copyable?: boolean;\r\n};\r\n\r\nexport interface BwgSelectProps {\r\n /** 폼 아이템 속성 */\r\n itemProps?: BwgFormItemProps;\r\n selectProps?: SelectBoxProps;\r\n}\r\n\r\nconst BwgSelect = ({\r\n itemProps,\r\n selectProps = {\r\n options: [],\r\n allowClear: true,\r\n },\r\n}: BwgSelectProps) => {\r\n // Form 컨텍스트 체크\r\n const form = Form.useFormInstance();\r\n const isFormContext = !!form;\r\n\r\n // 옵션 리스트 메모이제이션\r\n const optionList = useMemo(() => {\r\n if (selectProps?.addField === 'ALL') {\r\n return [{ label: '전체', value: '' }, ...(selectProps?.options || [])];\r\n } else if (selectProps?.addField === 'NULL') {\r\n return [{ label: '', value: '' }, ...(selectProps?.options || [])];\r\n } else {\r\n return selectProps?.options || [];\r\n }\r\n }, [selectProps.options, selectProps.addField]);\r\n\r\n const handleChange = (newValue: string) => {\r\n selectProps.onChange?.(newValue);\r\n };\r\n\r\n // Select 컴포넌트에 전달할 props\r\n const selectComponentProps = {\r\n ...selectProps,\r\n allowClear: selectProps.allowClear ?? true,\r\n options: optionList,\r\n onChange: handleChange,\r\n variant: selectProps.variant,\r\n };\r\n\r\n // console.log(\"selectComponentProps :: \", selectComponentProps);\r\n\r\n const selectComponent = (\r\n <Select {...selectComponentProps} disabled={selectProps.disabled} />\r\n );\r\n\r\n // copyable일 때 Form 컨텍스트 체크\r\n if (selectProps.copyable && !isFormContext) {\r\n console.warn(\r\n 'BwgSelect: copyable 기능은 Form 컨텍스트 내에서만 사용 가능합니다.'\r\n );\r\n }\r\n\r\n if (selectProps.copyable) {\r\n return (\r\n <BwgFormItem {...itemProps} name={undefined}>\r\n <Space.Compact block>\r\n <Form.Item\r\n name={itemProps?.name}\r\n rules={itemProps?.rules}\r\n style={{ width: '100%', marginBottom: 0 }}\r\n validateStatus=''\r\n help=''\r\n >\r\n {selectComponent}\r\n </Form.Item>\r\n <Typography.Paragraph\r\n copyable={{\r\n text: isFormContext\r\n ? form?.getFieldValue(itemProps?.name)?.toString() || ''\r\n : '',\r\n tooltips: ['코드복사', '코드복사됨'],\r\n }}\r\n style={{\r\n margin: 0,\r\n backgroundColor: '#f5f5f5',\r\n borderRadius: '4px',\r\n border: '1px solid #d9d9d9',\r\n fontSize: '12px',\r\n color: '#666',\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '30px',\r\n padding: '0 8px',\r\n }}\r\n />\r\n </Space.Compact>\r\n </BwgFormItem>\r\n );\r\n } else {\r\n return <BwgFormItem {...itemProps}>{selectComponent}</BwgFormItem>;\r\n }\r\n};\r\n\r\nexport default BwgSelect;\r\n","import { Form, Switch, SwitchProps } from \"antd\";\r\nimport BwgFormItem, { BwgFormItemProps } from \"./BwgFormItem\";\r\n\r\nexport type BwgSwitchItemProps = SwitchProps & {\r\n format?: 'boolean' | 'YN';\r\n };\r\n \r\n export interface BwgSwitchProps {\r\n itemProps?: BwgFormItemProps;\r\n inputProps?: BwgSwitchItemProps;\r\n }\r\n\r\n/**\r\n * 스위치 컴포넌트\r\n * @param itemProps - BwgFormItemProps\r\n * @param inputProps - BwgSwitchItemProps\r\n * @returns \r\n * @example\r\n * <BwgSwitch\r\n * itemProps={{ name: 'switch' }}\r\n * inputProps={{ format: 'YN' }}\r\n * />\r\n * @returns \r\n */\r\nconst BwgSwitch = ({\r\n itemProps,\r\n inputProps = {\r\n format: 'YN',\r\n },\r\n}: BwgSwitchProps) => {\r\n const form = Form.useFormInstance();\r\n \r\n const handleChange = (checked: boolean, e: any) => {\r\n if (inputProps.format === 'boolean') {\r\n form.setFieldValue(itemProps?.name, checked);\r\n } else {\r\n form.setFieldValue(itemProps?.name, checked ? 'Y' : 'N');\r\n }\r\n \r\n inputProps.onChange && inputProps.onChange(checked, e as any);\r\n };\r\n\r\n return <BwgFormItem {...itemProps} \r\n getValueProps={value => {\r\n const checked =\r\n inputProps.format === 'boolean'\r\n ? Boolean(value)\r\n : value === 'Y'\r\n ? true\r\n : false;\r\n return { checked };\r\n }}\r\n normalize={value => {\r\n //console.log('normalize :: ', value);\r\n // 체크박스의 경우 e.target.checked 값이 전달되므로 이를 처리\r\n if (typeof value === 'boolean') {\r\n if (inputProps.format === 'boolean') {\r\n return value;\r\n }\r\n return value ? 'Y' : 'N';\r\n }\r\n // 문자열이나 다른 값의 경우 기존 로직 유지\r\n if (inputProps.format === 'boolean') {\r\n return !!value;\r\n }\r\n return value ? 'Y' : 'N';\r\n }}\r\n >\r\n <Switch {...inputProps} onChange={(checked: boolean, e: any) => handleChange(checked, e)} />\r\n </BwgFormItem>;\r\n};\r\n\r\nexport default BwgSwitch;"],"names":["BwgFormItem","memo","children","label","name","rules","initialValue","style","rest","labelStyle","isRequired","rule","renderLabel","jsxs","jsx","Form","BwgCheck","itemProps","inputProps","form","value","Checkbox","formatMap","BwgDatePicker","type","returnType","displayFormat","outputFormat","useMemo","allOutputFormats","f","a","b","dayjs","DatePicker","BwgForm","forwardRef","labelCol","className","props","ref","ConfigProvider","BwgInput","Input","RangePicker","BwgRangePicker","minDate","maxDate","BwgSelect","selectProps","isFormContext","optionList","handleChange","newValue","selectComponentProps","selectComponent","Select","Space","Typography","BwgSwitch","checked","e","Switch"],"mappings":"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"}