@bwg-ui/core 1.1.25 → 1.1.26
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.
- package/dist/chunks/AuthContext-BQ3gHLbr.cjs +2 -0
- package/dist/chunks/{AuthContext-CXng9fj0.cjs.map → AuthContext-BQ3gHLbr.cjs.map} +1 -1
- package/dist/chunks/{AuthContext-DrEpBrpB.js → AuthContext-CVizgYxY.js} +9 -9
- package/dist/chunks/{AuthContext-DrEpBrpB.js.map → AuthContext-CVizgYxY.js.map} +1 -1
- package/dist/chunks/{BwgSpace-CnLM4qcg.js → BwgSpace-BPJARdOc.js} +4 -4
- package/dist/chunks/{BwgSpace-CnLM4qcg.js.map → BwgSpace-BPJARdOc.js.map} +1 -1
- package/dist/chunks/BwgSpace-Cw27d-XU.cjs +2 -0
- package/dist/chunks/{BwgSpace-b0hmM1Ht.cjs.map → BwgSpace-Cw27d-XU.cjs.map} +1 -1
- package/dist/chunks/BwgSwitch-BLtVdW44.cjs +2 -0
- package/dist/chunks/BwgSwitch-BLtVdW44.cjs.map +1 -0
- package/dist/chunks/{BwgSwitch-D_scwi9_.js → BwgSwitch-DdHo4gYR.js} +57 -57
- package/dist/chunks/BwgSwitch-DdHo4gYR.js.map +1 -0
- package/dist/chunks/{BwgUploader-DBFF9BPF.js → BwgUploader-BUmFmeuS.js} +801 -801
- package/dist/chunks/{BwgUploader-DBFF9BPF.js.map → BwgUploader-BUmFmeuS.js.map} +1 -1
- package/dist/chunks/BwgUploader-Djhl4lIt.cjs +3 -0
- package/dist/chunks/{BwgUploader-CkXwkcUL.cjs.map → BwgUploader-Djhl4lIt.cjs.map} +1 -1
- package/dist/chunks/LoadingOverlay-Uf6xy04v.js +19 -0
- package/dist/chunks/{LoadingOverlay-DAZJF5wg.js.map → LoadingOverlay-Uf6xy04v.js.map} +1 -1
- package/dist/chunks/LoadingOverlay-jdMzdB-z.cjs +2 -0
- package/dist/chunks/{LoadingOverlay-DcmKvoZA.cjs.map → LoadingOverlay-jdMzdB-z.cjs.map} +1 -1
- package/dist/chunks/{SSOHandler-CxvxEBaH.js → SSOHandler-CR0nR3rJ.js} +8252 -8252
- package/dist/chunks/{SSOHandler-CxvxEBaH.js.map → SSOHandler-CR0nR3rJ.js.map} +1 -1
- package/dist/chunks/{SSOHandler-BY6LXMLc.cjs → SSOHandler-DQG0Jp4V.cjs} +53 -53
- package/dist/chunks/{SSOHandler-BY6LXMLc.cjs.map → SSOHandler-DQG0Jp4V.cjs.map} +1 -1
- package/dist/chunks/ScreenProtectContext-BMsPPcTX.js +154 -0
- package/dist/chunks/{ScreenProtectContext-3my4PHFa.js.map → ScreenProtectContext-BMsPPcTX.js.map} +1 -1
- package/dist/chunks/ScreenProtectContext-DrCGlcTs.cjs +2 -0
- package/dist/chunks/{ScreenProtectContext-CVuXrJm6.cjs.map → ScreenProtectContext-DrCGlcTs.cjs.map} +1 -1
- package/dist/chunks/SearchBoxContext-DY6lES-W.cjs +2 -0
- package/dist/chunks/{SearchBoxContext-DwFDOyYG.cjs.map → SearchBoxContext-DY6lES-W.cjs.map} +1 -1
- package/dist/chunks/{SearchBoxContext-gWM7FHIw.js → SearchBoxContext-Dtzo_rJd.js} +24 -24
- package/dist/chunks/{SearchBoxContext-gWM7FHIw.js.map → SearchBoxContext-Dtzo_rJd.js.map} +1 -1
- package/dist/chunks/ViewContainer-BfiTFvLP.cjs +36 -0
- package/dist/chunks/{ViewContainer-Bhq22_B3.cjs.map → ViewContainer-BfiTFvLP.cjs.map} +1 -1
- package/dist/chunks/{ViewContainer-D9SKBnrn.js → ViewContainer-CTl3_56W.js} +115 -115
- package/dist/chunks/{ViewContainer-D9SKBnrn.js.map → ViewContainer-CTl3_56W.js.map} +1 -1
- package/dist/chunks/apiUtils-D9Vn1gwZ.cjs +3 -0
- package/dist/chunks/{apiUtils-BZ6s0_NI.cjs.map → apiUtils-D9Vn1gwZ.cjs.map} +1 -1
- package/dist/chunks/{apiUtils-DSwE62oG.js → apiUtils-DPUgfmKk.js} +46 -46
- package/dist/chunks/{apiUtils-DSwE62oG.js.map → apiUtils-DPUgfmKk.js.map} +1 -1
- package/dist/chunks/{codeStore-vPj4Y0TK.js → codeStore-BrCfe9K3.js} +2 -2
- package/dist/chunks/{codeStore-vPj4Y0TK.js.map → codeStore-BrCfe9K3.js.map} +1 -1
- package/dist/chunks/{codeStore-il4-kZPe.cjs → codeStore-_b2fDZtD.cjs} +2 -2
- package/dist/chunks/{codeStore-il4-kZPe.cjs.map → codeStore-_b2fDZtD.cjs.map} +1 -1
- package/dist/chunks/{core-Dl0PdDdT.js → core-BBMCFpHx.js} +2 -2
- package/dist/chunks/{core-Dl0PdDdT.js.map → core-BBMCFpHx.js.map} +1 -1
- package/dist/chunks/{core-BHejg5iS.cjs → core-CM9MsJRf.cjs} +2 -2
- package/dist/chunks/{core-BHejg5iS.cjs.map → core-CM9MsJRf.cjs.map} +1 -1
- package/dist/chunks/{enc-base64-D7t4BoUA.js → enc-base64-DAsYWbA2.js} +3 -3
- package/dist/chunks/{enc-base64-D7t4BoUA.js.map → enc-base64-DAsYWbA2.js.map} +1 -1
- package/dist/chunks/{enc-base64-BkBtNBQV.cjs → enc-base64-DbK5VBfD.cjs} +2 -2
- package/dist/chunks/{enc-base64-BkBtNBQV.cjs.map → enc-base64-DbK5VBfD.cjs.map} +1 -1
- package/dist/chunks/{favoriteStore-CcKg_nEH.cjs → favoriteStore-BnQ2u-sa.cjs} +2 -2
- package/dist/chunks/{favoriteStore-CcKg_nEH.cjs.map → favoriteStore-BnQ2u-sa.cjs.map} +1 -1
- package/dist/chunks/{favoriteStore-Bh1FuZm9.js → favoriteStore-SyAjqLG8.js} +2 -2
- package/dist/chunks/{favoriteStore-Bh1FuZm9.js.map → favoriteStore-SyAjqLG8.js.map} +1 -1
- package/dist/chunks/{popupStore-BRRmB4zH.js → popupStore-BrKcPw7K.js} +2 -2
- package/dist/chunks/{popupStore-BRRmB4zH.js.map → popupStore-BrKcPw7K.js.map} +1 -1
- package/dist/chunks/{popupStore-DUApUBF2.cjs → popupStore-ChbYTqy1.cjs} +2 -2
- package/dist/chunks/{popupStore-DUApUBF2.cjs.map → popupStore-ChbYTqy1.cjs.map} +1 -1
- package/dist/chunks/{sha256-DiIRoCQ8.cjs → sha256-BnWVPP1K.cjs} +2 -2
- package/dist/chunks/{sha256-DiIRoCQ8.cjs.map → sha256-BnWVPP1K.cjs.map} +1 -1
- package/dist/chunks/{sha256-C2-s1oZe.js → sha256-D80RpYO2.js} +3 -3
- package/dist/chunks/{sha256-C2-s1oZe.js.map → sha256-D80RpYO2.js.map} +1 -1
- package/dist/chunks/{usePopup-DarKTbRC.js → usePopup-DnfKRiYs.js} +27 -27
- package/dist/chunks/{usePopup-DarKTbRC.js.map → usePopup-DnfKRiYs.js.map} +1 -1
- package/dist/chunks/usePopup-Domnpg55.cjs +2 -0
- package/dist/chunks/{usePopup-D2JEuDrO.cjs.map → usePopup-Domnpg55.cjs.map} +1 -1
- package/dist/components/common/index.cjs +1 -1
- package/dist/components/common/index.js +2 -2
- package/dist/components/core/BwgFormItem.d.ts +2 -2
- package/dist/components/core/BwgFormItem.d.ts.map +1 -1
- package/dist/components/core/BwgInput.d.ts.map +1 -1
- package/dist/components/core/index.cjs +1 -1
- package/dist/components/core/index.js +2 -2
- package/dist/components/guide/index.cjs +1 -1
- package/dist/components/guide/index.cjs.map +1 -1
- package/dist/components/guide/index.js +3 -3
- package/dist/components/guide/index.js.map +1 -1
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.js +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.js +14 -14
- package/dist/provider/index.cjs +1 -1
- package/dist/provider/index.js +4 -4
- package/dist/stores/index.cjs +1 -1
- package/dist/stores/index.js +6 -6
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.js +2 -2
- package/package.json +2 -3
- package/dist/chunks/AuthContext-CXng9fj0.cjs +0 -2
- package/dist/chunks/BwgSpace-b0hmM1Ht.cjs +0 -2
- package/dist/chunks/BwgSwitch-DOlc57wi.cjs +0 -2
- package/dist/chunks/BwgSwitch-DOlc57wi.cjs.map +0 -1
- package/dist/chunks/BwgSwitch-D_scwi9_.js.map +0 -1
- package/dist/chunks/BwgUploader-CkXwkcUL.cjs +0 -3
- package/dist/chunks/LoadingOverlay-DAZJF5wg.js +0 -19
- package/dist/chunks/LoadingOverlay-DcmKvoZA.cjs +0 -2
- package/dist/chunks/ScreenProtectContext-3my4PHFa.js +0 -154
- package/dist/chunks/ScreenProtectContext-CVuXrJm6.cjs +0 -2
- package/dist/chunks/SearchBoxContext-DwFDOyYG.cjs +0 -2
- package/dist/chunks/ViewContainer-Bhq22_B3.cjs +0 -36
- package/dist/chunks/apiUtils-BZ6s0_NI.cjs +0 -3
- package/dist/chunks/jsx-runtime-CeSfJrVB.cjs +0 -31
- package/dist/chunks/jsx-runtime-CeSfJrVB.cjs.map +0 -1
- package/dist/chunks/jsx-runtime-Dpn_P65e.js +0 -634
- package/dist/chunks/jsx-runtime-Dpn_P65e.js.map +0 -1
- package/dist/chunks/usePopup-D2JEuDrO.cjs +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthContext-
|
|
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,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useContext as w, createContext as m, useState as i, useMemo as
|
|
3
|
-
const f = m(null),
|
|
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
4
|
const r = w(f);
|
|
5
5
|
if (!r) throw new Error("useAuth must be used within AuthProvider");
|
|
6
6
|
return r;
|
|
7
|
-
},
|
|
7
|
+
}, A = ({ children: r }) => {
|
|
8
8
|
const [u, n] = i(!1), [a, s] = i(!1), c = async (o) => {
|
|
9
9
|
const t = (await o.text()).trim().toLowerCase();
|
|
10
10
|
try {
|
|
@@ -44,14 +44,14 @@ const f = m(null), j = () => {
|
|
|
44
44
|
}
|
|
45
45
|
}, d = () => {
|
|
46
46
|
n(!1);
|
|
47
|
-
}, p =
|
|
47
|
+
}, p = k(
|
|
48
48
|
() => ({ authed: u, busy: a, verifyWithToken: h, reauthWithPin: l, logout: d }),
|
|
49
49
|
[u, a]
|
|
50
50
|
);
|
|
51
|
-
return /* @__PURE__ */ y
|
|
51
|
+
return /* @__PURE__ */ y(f.Provider, { value: p, children: r });
|
|
52
52
|
};
|
|
53
53
|
export {
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
A,
|
|
55
|
+
v as u
|
|
56
56
|
};
|
|
57
|
-
//# sourceMappingURL=AuthContext-
|
|
57
|
+
//# sourceMappingURL=AuthContext-CVizgYxY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthContext-
|
|
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,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
const i = ({ children: r }) => /* @__PURE__ */ d
|
|
1
|
+
import { jsx as d } from "react/jsx-runtime";
|
|
2
|
+
const i = ({ children: r }) => /* @__PURE__ */ d(
|
|
3
3
|
"div",
|
|
4
4
|
{
|
|
5
5
|
style: {
|
|
6
6
|
height: "100%",
|
|
7
7
|
padding: "20px 30px 26px"
|
|
8
8
|
},
|
|
9
|
-
children: /* @__PURE__ */ d
|
|
9
|
+
children: /* @__PURE__ */ d(
|
|
10
10
|
"div",
|
|
11
11
|
{
|
|
12
12
|
style: {
|
|
@@ -24,4 +24,4 @@ const i = ({ children: r }) => /* @__PURE__ */ d.jsx(
|
|
|
24
24
|
export {
|
|
25
25
|
i as B
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=BwgSpace-
|
|
27
|
+
//# sourceMappingURL=BwgSpace-BPJARdOc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BwgSpace-
|
|
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;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BwgSpace-
|
|
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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Form as f, Checkbox as
|
|
3
|
-
import
|
|
4
|
-
import { memo as
|
|
5
|
-
const Y =
|
|
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
6
|
({
|
|
7
7
|
children: n,
|
|
8
8
|
label: t,
|
|
@@ -14,11 +14,11 @@ const Y = D(
|
|
|
14
14
|
}) => {
|
|
15
15
|
const r = {
|
|
16
16
|
fontWeight: "bold"
|
|
17
|
-
},
|
|
17
|
+
}, d = Array.isArray(l) && l.some((u) => u.required === !0), a = () => typeof t == "string" ? /* @__PURE__ */ y("span", { style: r, children: [
|
|
18
18
|
t,
|
|
19
|
-
|
|
20
|
-
] }) : /* @__PURE__ */ m
|
|
21
|
-
return /* @__PURE__ */ m
|
|
19
|
+
d && /* @__PURE__ */ m("span", { style: { color: "#ff4d4f", marginLeft: "4px" }, children: "*" })
|
|
20
|
+
] }) : /* @__PURE__ */ m("span", { style: r, children: t });
|
|
21
|
+
return /* @__PURE__ */ m(
|
|
22
22
|
f.Item,
|
|
23
23
|
{
|
|
24
24
|
className: "bwg-form-item",
|
|
@@ -34,22 +34,22 @@ const Y = D(
|
|
|
34
34
|
}
|
|
35
35
|
);
|
|
36
36
|
}
|
|
37
|
-
),
|
|
37
|
+
), z = ({
|
|
38
38
|
itemProps: n,
|
|
39
39
|
inputProps: t = {
|
|
40
40
|
format: "YN"
|
|
41
41
|
}
|
|
42
42
|
}) => {
|
|
43
|
-
const o = f.useFormInstance()
|
|
44
|
-
|
|
45
|
-
};
|
|
46
|
-
return /* @__PURE__ */ m.jsx(
|
|
43
|
+
const o = f.useFormInstance();
|
|
44
|
+
return /* @__PURE__ */ m(
|
|
47
45
|
Y,
|
|
48
46
|
{
|
|
49
47
|
...n,
|
|
50
48
|
getValueProps: (e) => ({ checked: t.format === "boolean" ? !!e : e === "Y" }),
|
|
51
49
|
normalize: (e) => typeof e == "boolean" ? t.format === "boolean" ? e : e ? "Y" : "N" : t.format === "boolean" ? !!e : e ? "Y" : "N",
|
|
52
|
-
children: /* @__PURE__ */ m
|
|
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
53
|
}
|
|
54
54
|
);
|
|
55
55
|
}, h = {
|
|
@@ -71,27 +71,27 @@ const Y = D(
|
|
|
71
71
|
() => h[o],
|
|
72
72
|
[o]
|
|
73
73
|
), c = g(
|
|
74
|
-
() => Object.values(h).map((r) => r.outputFormat).sort((r,
|
|
75
|
-
if (r.length ===
|
|
74
|
+
() => Object.values(h).map((r) => r.outputFormat).sort((r, d) => {
|
|
75
|
+
if (r.length === d.length) {
|
|
76
76
|
if (r === i) return -1;
|
|
77
|
-
if (
|
|
77
|
+
if (d === i) return 1;
|
|
78
78
|
}
|
|
79
|
-
return
|
|
79
|
+
return d.length - r.length;
|
|
80
80
|
}),
|
|
81
81
|
[i]
|
|
82
82
|
// type(outputFormat)이 바뀔 때마다 재정렬
|
|
83
83
|
);
|
|
84
|
-
return /* @__PURE__ */ m
|
|
84
|
+
return /* @__PURE__ */ m(
|
|
85
85
|
Y,
|
|
86
86
|
{
|
|
87
87
|
...n,
|
|
88
88
|
getValueProps: (r) => ({
|
|
89
89
|
// 폼에 저장된 값(문자열 또는 Dayjs)을 DatePicker가 요구하는 Dayjs로 변환
|
|
90
|
-
value: r ?
|
|
90
|
+
value: r ? s.isDayjs(r) ? r : s(r, c) : null
|
|
91
91
|
}),
|
|
92
92
|
normalize: (r) => r ? l === "dayjs" ? r : r.format(i) : null,
|
|
93
|
-
children: /* @__PURE__ */ m
|
|
94
|
-
|
|
93
|
+
children: /* @__PURE__ */ m(
|
|
94
|
+
M,
|
|
95
95
|
{
|
|
96
96
|
...t,
|
|
97
97
|
picker: o === "datetime" ? "date" : o,
|
|
@@ -101,15 +101,15 @@ const Y = D(
|
|
|
101
101
|
)
|
|
102
102
|
}
|
|
103
103
|
);
|
|
104
|
-
},
|
|
105
|
-
({ children: n, labelCol: t, style: o, className: l, ...e }, i) => /* @__PURE__ */ m
|
|
106
|
-
|
|
104
|
+
}, N = B(
|
|
105
|
+
({ children: n, labelCol: t, style: o, className: l, ...e }, i) => /* @__PURE__ */ m(
|
|
106
|
+
w,
|
|
107
107
|
{
|
|
108
108
|
form: {
|
|
109
109
|
//기존 rule.message의 default message인 $name을를 입력해주세요를 변경
|
|
110
110
|
validateMessages: { required: "'${label}을(를) 입력해주세요.'" }
|
|
111
111
|
},
|
|
112
|
-
children: /* @__PURE__ */ m
|
|
112
|
+
children: /* @__PURE__ */ m(
|
|
113
113
|
f,
|
|
114
114
|
{
|
|
115
115
|
ref: i,
|
|
@@ -124,8 +124,8 @@ const Y = D(
|
|
|
124
124
|
}
|
|
125
125
|
)
|
|
126
126
|
);
|
|
127
|
-
|
|
128
|
-
const
|
|
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
129
|
year: { displayFormat: "YYYY", outputFormat: "YYYY" },
|
|
130
130
|
month: { displayFormat: "YYYY-MM", outputFormat: "YYYYMM" },
|
|
131
131
|
date: { displayFormat: "YYYY-MM-DD", outputFormat: "YYYYMMDD" },
|
|
@@ -134,7 +134,7 @@ const z = ({ itemProps: n, inputProps: t }) => /* @__PURE__ */ m.jsx(Y, { ...n,
|
|
|
134
134
|
displayFormat: "YYYY-MM-DD HH:mm",
|
|
135
135
|
outputFormat: "YYYYMMDDHHmm"
|
|
136
136
|
}
|
|
137
|
-
},
|
|
137
|
+
}, q = ({
|
|
138
138
|
itemProps: n,
|
|
139
139
|
inputProps: t,
|
|
140
140
|
type: o = "date",
|
|
@@ -145,7 +145,7 @@ const z = ({ itemProps: n, inputProps: t }) => /* @__PURE__ */ m.jsx(Y, { ...n,
|
|
|
145
145
|
const { displayFormat: c, outputFormat: r } = g(
|
|
146
146
|
() => F[o],
|
|
147
147
|
[o]
|
|
148
|
-
),
|
|
148
|
+
), d = g(
|
|
149
149
|
() => Object.values(F).map((a) => a.outputFormat).sort((a, u) => {
|
|
150
150
|
if (a.length === u.length) {
|
|
151
151
|
if (a === r) return -1;
|
|
@@ -156,28 +156,28 @@ const z = ({ itemProps: n, inputProps: t }) => /* @__PURE__ */ m.jsx(Y, { ...n,
|
|
|
156
156
|
[r]
|
|
157
157
|
// type(outputFormat)이 바뀔 때마다 재정렬
|
|
158
158
|
);
|
|
159
|
-
return /* @__PURE__ */ m
|
|
159
|
+
return /* @__PURE__ */ m(
|
|
160
160
|
Y,
|
|
161
161
|
{
|
|
162
162
|
...n,
|
|
163
163
|
getValueProps: (a) => ({
|
|
164
164
|
// 폼에 저장된 값(문자열 또는 Dayjs)을 RangePicker가 요구하는 Dayjs 배열로 변환
|
|
165
165
|
value: a && a.length > 0 ? [
|
|
166
|
-
a[0] ?
|
|
167
|
-
a[1] ?
|
|
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
168
|
] : null
|
|
169
169
|
}),
|
|
170
170
|
normalize: (a) => a ? i === "dayjs" ? [a[0] ?? void 0, a[1] ?? void 0] : [
|
|
171
171
|
a[0] ? a[0].format(r) : void 0,
|
|
172
172
|
a[1] ? a[1].format(r) : void 0
|
|
173
173
|
] : [void 0, void 0],
|
|
174
|
-
children: /* @__PURE__ */ m
|
|
175
|
-
|
|
174
|
+
children: /* @__PURE__ */ m(
|
|
175
|
+
j,
|
|
176
176
|
{
|
|
177
177
|
...t,
|
|
178
178
|
order: !0,
|
|
179
|
-
minDate: l ?
|
|
180
|
-
maxDate: e ?
|
|
179
|
+
minDate: l ? s(l, d) : void 0,
|
|
180
|
+
maxDate: e ? s(e, d) : void 0,
|
|
181
181
|
picker: o === "datetime" ? "date" : o,
|
|
182
182
|
showTime: t?.showTime ?? (o === "datetime" || o === "time"),
|
|
183
183
|
format: c
|
|
@@ -185,26 +185,26 @@ const z = ({ itemProps: n, inputProps: t }) => /* @__PURE__ */ m.jsx(Y, { ...n,
|
|
|
185
185
|
)
|
|
186
186
|
}
|
|
187
187
|
);
|
|
188
|
-
},
|
|
188
|
+
}, A = ({
|
|
189
189
|
itemProps: n,
|
|
190
190
|
selectProps: t = {
|
|
191
191
|
options: [],
|
|
192
192
|
allowClear: !0
|
|
193
193
|
}
|
|
194
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 = (
|
|
196
|
-
t.onChange?.(
|
|
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
197
|
}, c = {
|
|
198
198
|
...t,
|
|
199
199
|
allowClear: t.allowClear ?? !0,
|
|
200
200
|
options: e,
|
|
201
201
|
onChange: i,
|
|
202
202
|
variant: t.variant
|
|
203
|
-
}, r = /* @__PURE__ */ m
|
|
203
|
+
}, r = /* @__PURE__ */ m(p, { ...c, disabled: t.disabled });
|
|
204
204
|
return t.copyable && !l && console.warn(
|
|
205
205
|
"BwgSelect: copyable 기능은 Form 컨텍스트 내에서만 사용 가능합니다."
|
|
206
|
-
), t.copyable ? /* @__PURE__ */ m
|
|
207
|
-
/* @__PURE__ */ m
|
|
206
|
+
), t.copyable ? /* @__PURE__ */ m(Y, { ...n, name: void 0, children: /* @__PURE__ */ y(D.Compact, { block: !0, children: [
|
|
207
|
+
/* @__PURE__ */ m(
|
|
208
208
|
f.Item,
|
|
209
209
|
{
|
|
210
210
|
name: n?.name,
|
|
@@ -215,8 +215,8 @@ const z = ({ itemProps: n, inputProps: t }) => /* @__PURE__ */ m.jsx(Y, { ...n,
|
|
|
215
215
|
children: r
|
|
216
216
|
}
|
|
217
217
|
),
|
|
218
|
-
/* @__PURE__ */ m
|
|
219
|
-
|
|
218
|
+
/* @__PURE__ */ m(
|
|
219
|
+
x.Paragraph,
|
|
220
220
|
{
|
|
221
221
|
copyable: {
|
|
222
222
|
text: l && o?.getFieldValue(n?.name)?.toString() || "",
|
|
@@ -236,8 +236,8 @@ const z = ({ itemProps: n, inputProps: t }) => /* @__PURE__ */ m.jsx(Y, { ...n,
|
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
238
|
)
|
|
239
|
-
] }) }) : /* @__PURE__ */ m
|
|
240
|
-
},
|
|
239
|
+
] }) }) : /* @__PURE__ */ m(Y, { ...n, children: r });
|
|
240
|
+
}, O = ({
|
|
241
241
|
itemProps: n,
|
|
242
242
|
inputProps: t = {
|
|
243
243
|
format: "YN"
|
|
@@ -246,24 +246,24 @@ const z = ({ itemProps: n, inputProps: t }) => /* @__PURE__ */ m.jsx(Y, { ...n,
|
|
|
246
246
|
const o = f.useFormInstance(), l = (e, i) => {
|
|
247
247
|
t.format === "boolean" ? o.setFieldValue(n?.name, e) : o.setFieldValue(n?.name, e ? "Y" : "N"), t.onChange && t.onChange(e, i);
|
|
248
248
|
};
|
|
249
|
-
return /* @__PURE__ */ m
|
|
249
|
+
return /* @__PURE__ */ m(
|
|
250
250
|
Y,
|
|
251
251
|
{
|
|
252
252
|
...n,
|
|
253
253
|
getValueProps: (e) => ({ checked: t.format === "boolean" ? !!e : e === "Y" }),
|
|
254
254
|
normalize: (e) => typeof e == "boolean" ? t.format === "boolean" ? e : e ? "Y" : "N" : t.format === "boolean" ? !!e : e ? "Y" : "N",
|
|
255
|
-
children: /* @__PURE__ */ m
|
|
255
|
+
children: /* @__PURE__ */ m(H, { ...t, onChange: (e, i) => l(e, i) })
|
|
256
256
|
}
|
|
257
257
|
);
|
|
258
258
|
};
|
|
259
259
|
export {
|
|
260
|
-
|
|
260
|
+
z as B,
|
|
261
261
|
R as a,
|
|
262
|
-
|
|
262
|
+
N as b,
|
|
263
263
|
Y as c,
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
264
|
+
T as d,
|
|
265
|
+
q as e,
|
|
266
|
+
A as f,
|
|
267
|
+
O as g
|
|
268
268
|
};
|
|
269
|
-
//# sourceMappingURL=BwgSwitch-
|
|
269
|
+
//# sourceMappingURL=BwgSwitch-DdHo4gYR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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":";;;;AAiBA,MAAMA,IAAcC;AAAA,EAClB,CAAC;AAAA,IACC,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,OAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,MACmB;AACtB,UAAMC,IAAa;AAAA,MACjB,YAAY;AAAA,IAAA,GAIRC,IACJ,MAAM,QAAQL,CAAK,KAAKA,EAAM,KAAK,CAACM,MAAcA,EAAK,aAAa,EAAI,GAGpEC,IAAc,MACd,OAAOT,KAAU,WAEjB,gBAAAU,EAAC,QAAA,EAAK,OAAOJ,GACV,UAAA;AAAA,MAAAN;AAAA,MACAO,KACC,gBAAAI,EAAC,QAAA,EAAK,OAAO,EAAE,OAAO,WAAW,YAAY,SAAS,UAAA,IAAA,CAAC;AAAA,IAAA,GAE3D,IAGG,gBAAAA,EAAC,QAAA,EAAK,OAAOL,GAAa,UAAAN,GAAM;AAGzC,WACE,gBAAAW;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,WAAU;AAAA,QACV,OAAOZ,IAAQS,EAAA,IAAgB;AAAA,QAC/B,YAAW;AAAA,QACX,MAAAR;AAAA,QACA,OAAAC;AAAA,QACA,OAAO;AAAA,QACP,cAAAC;AAAA,QACA,OAAAC;AAAA,QACC,GAAGC;AAAA,QAEH,UAAAN;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF,GC3CMc,IAAW,CAAC;AAAA,EAChB,WAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,IACX,QAAQ;AAAA,EAAA;AAEZ,MAAqB;AACnB,QAAMC,IAAOJ,EAAK,gBAAA;AAalB,SACE,gBAAAD;AAAA,IAACd;AAAA,IAAA;AAAA,MACE,GAAGiB;AAAA,MACJ,eAAe,CAAAG,OAQN,EAAE,SALPF,EAAW,WAAW,YAClB,EAAQE,IACRA,MAAU,IAGP;AAAA,MAEX,WAAW,CAAAA,MAGL,OAAOA,KAAU,YACfF,EAAW,WAAW,YACjBE,IAEFA,IAAQ,MAAM,MAGnBF,EAAW,WAAW,YACjB,CAAC,CAACE,IAEJA,IAAQ,MAAM;AAAA,MAGvB,4BAACC,GAAA,EAAU,GAAGH,GAAY,UAxCT,CAAC,MAAW;AAE/B,QAAIA,EAAW,WAAW,YACxBC,EAAK,cAAcF,GAAW,MAAM,EAAE,OAAO,OAAO,IAEpDE,EAAK,cAAcF,GAAW,MAAM,EAAE,OAAO,UAAU,MAAM,GAAG,GAGlEC,EAAW,YAAYA,EAAW,SAAS,CAAC;AAAA,MAC9C,GAgCO,aAAY,MAAA,CACf;AAAA,IAAA;AAAA,EAAA;AAGN,GC/DMI,IAAY;AAAA,EAChB,MAAM,EAAE,eAAe,QAAQ,cAAc,OAAA;AAAA,EAC7C,OAAO,EAAE,eAAe,WAAW,cAAc,SAAA;AAAA,EACjD,MAAM,EAAE,eAAe,cAAc,cAAc,WAAA;AAAA,EACnD,MAAM,EAAE,eAAe,SAAS,cAAc,OAAA;AAAA,EAC9C,UAAU;AAAA,IACR,eAAe;AAAA,IACf,cAAc;AAAA,EAAA;AAElB,GAEMC,IAAgB,CAAC;AAAA,EACrB,WAAAN;AAAA,EACA,YAAAC;AAAA,EACA,MAAAM,IAAO;AAAA,EACP,YAAAC,IAAa;AACf,MAA0B;AAExB,QAAM,EAAE,eAAAC,GAAe,cAAAC,EAAA,IAAiBC;AAAA,IACtC,MAAMN,EAAUE,CAAI;AAAA,IACpB,CAACA,CAAI;AAAA,EAAA,GAIDK,IAAmBD;AAAA,IACvB,MACE,OAAO,OAAON,CAAS,EACpB,IAAI,CAAAQ,MAAKA,EAAE,YAAY,EACvB,KAAK,CAACC,GAAGC,MAAM;AACd,UAAID,EAAE,WAAWC,EAAE,QAAQ;AACzB,YAAID,MAAMJ,EAAc,QAAO;AAC/B,YAAIK,MAAML,EAAc,QAAO;AAAA,MACjC;AACA,aAAOK,EAAE,SAASD,EAAE;AAAA,IACtB,CAAC;AAAA,IACL,CAACJ,CAAY;AAAA;AAAA,EAAA;AAEf,SACE,gBAAAb;AAAA,IAACd;AAAA,IAAA;AAAA,MACE,GAAGiB;AAAA,MACJ,eAAe,CAAAG,OAAU;AAAA;AAAA,QAEvB,OAAOA,IACHa,EAAM,QAAQb,CAAK,IAChBA,IACDa,EAAMb,GAAcS,CAAgB,IACtC;AAAA,MAAA;AAAA,MAEN,WAAW,CAAAT,MAEJA,IACDK,MAAe,UAAgBL,IAC5BA,EAAM,OAAOO,CAAY,IAFb;AAAA,MAKrB,UAAA,gBAAAb;AAAA,QAACoB;AAAA,QAAA;AAAA,UACE,GAAGhB;AAAA,UAEJ,QAAQM,MAAS,aAAa,SAASA;AAAA,UACvC,UACEN,GAAY,aAAaM,MAAS,cAAcA,MAAS;AAAA,UAG3D,QAAQE;AAAA,QAAA;AAAA,MAAA;AAAA,IAET;AAAA,EAAA;AAGP,GC1EMS,IAAUC;AAAA,EACd,CAAC,EAAE,UAAAlC,GAAU,UAAAmC,GAAU,OAAA9B,GAAO,WAAA+B,GAAW,GAAGC,EAAA,GAASC,MAEjD,gBAAA1B;AAAA,IAAC2B;AAAA,IAAA;AAAA,MACC,MAAM;AAAA;AAAA,QAEJ,kBAAkB,EAAE,UAAU,yBAAA;AAAA,MAAyB;AAAA,MAGzD,UAAA,gBAAA3B;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAAyB;AAAA,UACC,GAAGD;AAAA,UACJ,cAAc;AAAA,UACd,UAAUF,KAAY,EAAE,MAAM,QAAA;AAAA,UAC9B,OAAO,EAAE,SAAS,QAAQ,GAAG9B,EAAA;AAAA,UAC7B,WAAW,YAAY+B,KAAa,EAAE;AAAA,UAErC,UAAApC;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAIR;AAEAiC,EAAQ,cAAc;ACtBtB,MAAMO,IAA8B,CAAC,EAAE,WAAAzB,GAAW,YAAAC,QAE9C,gBAAAJ,EAACd,KAAa,GAAGiB,GACf,4BAAC0B,GAAA,EAAO,GAAGzB,GAAY,EAAA,CACzB,GCPE,EAAE,aAAA0B,MAAgBV,GAWlBZ,IAAY;AAAA,EAChB,MAAM,EAAE,eAAe,QAAQ,cAAc,OAAA;AAAA,EAC7C,OAAO,EAAE,eAAe,WAAW,cAAc,SAAA;AAAA,EACjD,MAAM,EAAE,eAAe,cAAc,cAAc,WAAA;AAAA,EACnD,MAAM,EAAE,eAAe,SAAS,cAAc,OAAA;AAAA,EAC9C,UAAU;AAAA,IACR,eAAe;AAAA,IACf,cAAc;AAAA,EAAA;AAElB,GAEMuB,IAAiB,CAAC;AAAA,EACtB,WAAA5B;AAAA,EACA,YAAAC;AAAA,EACA,MAAAM,IAAO;AAAA,EACP,SAAAsB;AAAA,EACA,SAAAC;AAAA,EACA,YAAAtB,IAAa;AACf,MAA2B;AAEzB,QAAM,EAAE,eAAAC,GAAe,cAAAC,EAAA,IAAiBC;AAAA,IACtC,MAAMN,EAAUE,CAAI;AAAA,IACpB,CAACA,CAAI;AAAA,EAAA,GAIDK,IAAmBD;AAAA,IACvB,MACE,OAAO,OAAON,CAAS,EACpB,IAAI,CAAAQ,MAAKA,EAAE,YAAY,EACvB,KAAK,CAAC,GAAGE,MAAM;AACd,UAAI,EAAE,WAAWA,EAAE,QAAQ;AACzB,YAAI,MAAML,EAAc,QAAO;AAC/B,YAAIK,MAAML,EAAc,QAAO;AAAA,MACjC;AACA,aAAOK,EAAE,SAAS,EAAE;AAAA,IACtB,CAAC;AAAA,IACL,CAACL,CAAY;AAAA;AAAA,EAAA;AAEf,SACE,gBAAAb;AAAA,IAACd;AAAA,IAAA;AAAA,MACE,GAAGiB;AAAA,MACJ,eAAe,CAAAG,OAAU;AAAA;AAAA,QAEvB,OACEA,KAASA,EAAM,SAAS,IACpB;AAAA,UACEA,EAAM,CAAC,IACHa,EAAM,QAAQb,EAAM,CAAC,CAAC,IACnBA,EAAM,CAAC,IACRa,EAAMb,EAAM,CAAC,GAAUS,CAAgB,IACzC;AAAA,UACJT,EAAM,CAAC,IACHa,EAAM,QAAQb,EAAM,CAAC,CAAC,IACnBA,EAAM,CAAC,IACRa,EAAMb,EAAM,CAAC,GAAUS,CAAgB,IACzC;AAAA,QAAA,IAEN;AAAA,MAAA;AAAA,MAER,WAAW,CAACT,MAELA,IAGDK,MAAe,UACV,CAACL,EAAM,CAAC,KAAK,QAAWA,EAAM,CAAC,KAAK,MAAS,IAE/C;AAAA,QACLA,EAAM,CAAC,IAAIA,EAAM,CAAC,EAAE,OAAOO,CAAY,IAAI;AAAA,QAC3CP,EAAM,CAAC,IAAIA,EAAM,CAAC,EAAE,OAAOO,CAAY,IAAI;AAAA,MAAA,IAPpC,CAAC,QAAW,MAAS;AAAA,MAWhC,UAAA,gBAAAb;AAAA,QAAC8B;AAAA,QAAA;AAAA,UACE,GAAG1B;AAAA,UACJ,OAAO;AAAA,UAEP,SAAS4B,IAAUb,EAAMa,GAASjB,CAAgB,IAAI;AAAA,UACtD,SAASkB,IAAUd,EAAMc,GAASlB,CAAgB,IAAI;AAAA,UAEtD,QAAQL,MAAS,aAAa,SAASA;AAAA,UACvC,UACEN,GAAY,aAAaM,MAAS,cAAcA,MAAS;AAAA,UAG3D,QAAQE;AAAA,QAAA;AAAA,MAAA;AAAA,IAEV;AAAA,EAAA;AAGN,GC1FMsB,IAAY,CAAC;AAAA,EACjB,WAAA/B;AAAA,EACA,aAAAgC,IAAc;AAAA,IACZ,SAAS,CAAA;AAAA,IACT,YAAY;AAAA,EAAA;AAEhB,MAAsB;AAEpB,QAAM9B,IAAOJ,EAAK,gBAAA,GACZmC,IAAgB,CAAC,CAAC/B,GAGlBgC,IAAavB,EAAQ,MACrBqB,GAAa,aAAa,QACrB,CAAC,EAAE,OAAO,MAAM,OAAO,GAAA,GAAM,GAAIA,GAAa,WAAW,EAAG,IAC1DA,GAAa,aAAa,SAC5B,CAAC,EAAE,OAAO,IAAI,OAAO,GAAA,GAAM,GAAIA,GAAa,WAAW,EAAG,IAE1DA,GAAa,WAAW,CAAA,GAEhC,CAACA,EAAY,SAASA,EAAY,QAAQ,CAAC,GAExCG,IAAe,CAACC,MAAqB;AACzC,IAAAJ,EAAY,WAAWI,CAAQ;AAAA,EACjC,GAGMC,IAAuB;AAAA,IAC3B,GAAGL;AAAA,IACH,YAAYA,EAAY,cAAc;AAAA,IACtC,SAASE;AAAA,IACT,UAAUC;AAAA,IACV,SAASH,EAAY;AAAA,EAAA,GAKjBM,IACJ,gBAAAzC,EAAC0C,GAAA,EAAQ,GAAGF,GAAsB,UAAUL,EAAY,UAAU;AAUpE,SANIA,EAAY,YAAY,CAACC,KAC3B,QAAQ;AAAA,IACN;AAAA,EAAA,GAIAD,EAAY,WAEZ,gBAAAnC,EAACd,GAAA,EAAa,GAAGiB,GAAW,MAAM,QAChC,UAAA,gBAAAJ,EAAC4C,EAAM,SAAN,EAAc,OAAK,IAClB,UAAA;AAAA,IAAA,gBAAA3C;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAME,GAAW;AAAA,QACjB,OAAOA,GAAW;AAAA,QAClB,OAAO,EAAE,OAAO,QAAQ,cAAc,EAAA;AAAA,QACtC,gBAAe;AAAA,QACf,MAAK;AAAA,QAEJ,UAAAsC;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,gBAAAzC;AAAA,MAAC4C,EAAW;AAAA,MAAX;AAAA,QACC,UAAU;AAAA,UACR,MAAMR,KACF/B,GAAM,cAAcF,GAAW,IAAI,GAAG,cAAc;AAAA,UAExD,UAAU,CAAC,QAAQ,OAAO;AAAA,QAAA;AAAA,QAE5B,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,OAAO;AAAA,UACP,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,SAAS;AAAA,QAAA;AAAA,MACX;AAAA,IAAA;AAAA,EACF,EAAA,CACF,EAAA,CACF,IAGK,gBAAAH,EAACd,GAAA,EAAa,GAAGiB,GAAY,UAAAsC,GAAgB;AAExD,GCjFMI,IAAY,CAAC;AAAA,EACjB,WAAA1C;AAAA,EACA,YAAAC,IAAa;AAAA,IACX,QAAQ;AAAA,EAAA;AAEZ,MAAsB;AACpB,QAAMC,IAAOJ,EAAK,gBAAA,GAEZqC,IAAe,CAACQ,GAAkBC,MAAW;AACjD,IAAI3C,EAAW,WAAW,YACtBC,EAAK,cAAcF,GAAW,MAAM2C,CAAO,IAE3CzC,EAAK,cAAcF,GAAW,MAAM2C,IAAU,MAAM,GAAG,GAGzD1C,EAAW,YAAYA,EAAW,SAAS0C,GAASC,CAAQ;AAAA,EAChE;AAEE,SAAO,gBAAA/C;AAAA,IAACd;AAAA,IAAA;AAAA,MAAa,GAAGiB;AAAA,MACxB,eAAe,CAAAG,OAOJ,EAAE,SALPF,EAAW,WAAW,YAClB,EAAQE,IACRA,MAAU,IAGP;AAAA,MAEX,WAAW,CAAAA,MAGL,OAAOA,KAAU,YACfF,EAAW,WAAW,YACjBE,IAEFA,IAAQ,MAAM,MAGnBF,EAAW,WAAW,YACjB,CAAC,CAACE,IAEJA,IAAQ,MAAM;AAAA,MAGrB,UAAA,gBAAAN,EAACgD,GAAA,EAAQ,GAAG5C,GAAY,UAAU,CAAC0C,GAAkBC,MAAWT,EAAaQ,GAASC,CAAC,EAAA,CAAG;AAAA,IAAA;AAAA,EAAA;AAElG;"}
|