@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.
- package/dist/chunks/common-components-3AGyXNkY.cjs +183 -0
- package/dist/chunks/common-components-CSaGU_Fk.js +15782 -0
- package/dist/chunks/{core-BBMCFpHx.js → core-CTXWuoUa.js} +1 -2
- package/dist/chunks/core-Cp0Uyip7.cjs +1 -0
- package/dist/chunks/{enc-base64-DAsYWbA2.js → enc-base64-ClENPele.js} +4 -5
- package/dist/chunks/enc-base64-CvKQ-yW8.cjs +1 -0
- package/dist/chunks/sha256-Dl_QPg4b.cjs +1 -0
- package/dist/chunks/{sha256-D80RpYO2.js → sha256-DxfJD4fu.js} +12 -13
- package/dist/components/common/BwgEditor.d.ts.map +1 -1
- package/dist/components/common/BwgPagination.d.ts +1 -1
- package/dist/components/common/BwgPagination.d.ts.map +1 -1
- package/dist/components/common/index.cjs +1 -2
- package/dist/components/common/index.d.ts +3 -1
- package/dist/components/common/index.d.ts.map +1 -1
- package/dist/components/common/index.js +16 -17
- package/dist/components/core/index.cjs +1 -2
- package/dist/components/core/index.js +1218 -23
- package/dist/components/guide/index.cjs +1 -2
- package/dist/components/guide/index.js +1 -2
- package/dist/components/layout/index.cjs +35 -2
- package/dist/components/layout/index.js +350 -10
- package/dist/components/popup/MenuReport.d.ts.map +1 -1
- package/dist/index.cjs +1 -2
- package/dist/index.js +211 -222
- package/dist/provider/index.cjs +1 -2
- package/dist/provider/index.js +384 -25
- package/dist/stores/index.cjs +2 -2
- package/dist/stores/index.js +1394 -24
- package/dist/utils/index.cjs +1 -2
- package/dist/utils/index.js +1369 -200
- package/package.json +1 -1
- package/dist/chunks/AuthContext-BQ3gHLbr.cjs +0 -2
- package/dist/chunks/AuthContext-BQ3gHLbr.cjs.map +0 -1
- package/dist/chunks/AuthContext-CVizgYxY.js +0 -57
- package/dist/chunks/AuthContext-CVizgYxY.js.map +0 -1
- package/dist/chunks/BwgSpace-BPJARdOc.js +0 -27
- package/dist/chunks/BwgSpace-BPJARdOc.js.map +0 -1
- package/dist/chunks/BwgSpace-Cw27d-XU.cjs +0 -2
- package/dist/chunks/BwgSpace-Cw27d-XU.cjs.map +0 -1
- package/dist/chunks/BwgSwitch-BLtVdW44.cjs +0 -2
- package/dist/chunks/BwgSwitch-BLtVdW44.cjs.map +0 -1
- package/dist/chunks/BwgSwitch-DdHo4gYR.js +0 -269
- package/dist/chunks/BwgSwitch-DdHo4gYR.js.map +0 -1
- package/dist/chunks/BwgUploader-BUmFmeuS.js +0 -3250
- package/dist/chunks/BwgUploader-BUmFmeuS.js.map +0 -1
- package/dist/chunks/BwgUploader-Djhl4lIt.cjs +0 -3
- package/dist/chunks/BwgUploader-Djhl4lIt.cjs.map +0 -1
- package/dist/chunks/LoadingOverlay-Uf6xy04v.js +0 -19
- package/dist/chunks/LoadingOverlay-Uf6xy04v.js.map +0 -1
- package/dist/chunks/LoadingOverlay-jdMzdB-z.cjs +0 -2
- package/dist/chunks/LoadingOverlay-jdMzdB-z.cjs.map +0 -1
- package/dist/chunks/SSOHandler-CR0nR3rJ.js +0 -28654
- package/dist/chunks/SSOHandler-CR0nR3rJ.js.map +0 -1
- package/dist/chunks/SSOHandler-DQG0Jp4V.cjs +0 -237
- package/dist/chunks/SSOHandler-DQG0Jp4V.cjs.map +0 -1
- package/dist/chunks/ScreenProtectContext-BMsPPcTX.js +0 -154
- package/dist/chunks/ScreenProtectContext-BMsPPcTX.js.map +0 -1
- package/dist/chunks/ScreenProtectContext-DrCGlcTs.cjs +0 -2
- package/dist/chunks/ScreenProtectContext-DrCGlcTs.cjs.map +0 -1
- package/dist/chunks/SearchBoxContext-DY6lES-W.cjs +0 -2
- package/dist/chunks/SearchBoxContext-DY6lES-W.cjs.map +0 -1
- package/dist/chunks/SearchBoxContext-Dtzo_rJd.js +0 -86
- package/dist/chunks/SearchBoxContext-Dtzo_rJd.js.map +0 -1
- package/dist/chunks/ViewContainer-BfiTFvLP.cjs +0 -36
- package/dist/chunks/ViewContainer-BfiTFvLP.cjs.map +0 -1
- package/dist/chunks/ViewContainer-CTl3_56W.js +0 -338
- package/dist/chunks/ViewContainer-CTl3_56W.js.map +0 -1
- package/dist/chunks/apiUtils-D9Vn1gwZ.cjs +0 -3
- package/dist/chunks/apiUtils-D9Vn1gwZ.cjs.map +0 -1
- package/dist/chunks/apiUtils-DPUgfmKk.js +0 -1450
- package/dist/chunks/apiUtils-DPUgfmKk.js.map +0 -1
- package/dist/chunks/codeStore-BrCfe9K3.js +0 -450
- package/dist/chunks/codeStore-BrCfe9K3.js.map +0 -1
- package/dist/chunks/codeStore-_b2fDZtD.cjs +0 -2
- package/dist/chunks/codeStore-_b2fDZtD.cjs.map +0 -1
- package/dist/chunks/core-BBMCFpHx.js.map +0 -1
- package/dist/chunks/core-CM9MsJRf.cjs +0 -2
- package/dist/chunks/core-CM9MsJRf.cjs.map +0 -1
- package/dist/chunks/enc-base64-DAsYWbA2.js.map +0 -1
- package/dist/chunks/enc-base64-DbK5VBfD.cjs +0 -2
- package/dist/chunks/enc-base64-DbK5VBfD.cjs.map +0 -1
- package/dist/chunks/favoriteStore-BnQ2u-sa.cjs +0 -2
- package/dist/chunks/favoriteStore-BnQ2u-sa.cjs.map +0 -1
- package/dist/chunks/favoriteStore-SyAjqLG8.js +0 -439
- package/dist/chunks/favoriteStore-SyAjqLG8.js.map +0 -1
- package/dist/chunks/popupStore-BrKcPw7K.js +0 -92
- package/dist/chunks/popupStore-BrKcPw7K.js.map +0 -1
- package/dist/chunks/popupStore-ChbYTqy1.cjs +0 -2
- package/dist/chunks/popupStore-ChbYTqy1.cjs.map +0 -1
- package/dist/chunks/realFormat-Cha7OTd9.cjs +0 -2
- package/dist/chunks/realFormat-Cha7OTd9.cjs.map +0 -1
- package/dist/chunks/realFormat-DRGLFabQ.js +0 -305
- package/dist/chunks/realFormat-DRGLFabQ.js.map +0 -1
- package/dist/chunks/sha256-BnWVPP1K.cjs +0 -2
- package/dist/chunks/sha256-BnWVPP1K.cjs.map +0 -1
- package/dist/chunks/sha256-D80RpYO2.js.map +0 -1
- package/dist/chunks/usePopup-DnfKRiYs.js +0 -109
- package/dist/chunks/usePopup-DnfKRiYs.js.map +0 -1
- package/dist/chunks/usePopup-Domnpg55.cjs +0 -2
- package/dist/chunks/usePopup-Domnpg55.cjs.map +0 -1
- package/dist/components/common/index.cjs.map +0 -1
- package/dist/components/common/index.js.map +0 -1
- package/dist/components/core/index.cjs.map +0 -1
- package/dist/components/core/index.js.map +0 -1
- package/dist/components/guide/index.cjs.map +0 -1
- package/dist/components/guide/index.js.map +0 -1
- package/dist/components/layout/index.cjs.map +0 -1
- package/dist/components/layout/index.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/provider/index.cjs.map +0 -1
- package/dist/provider/index.js.map +0 -1
- package/dist/stores/index.cjs.map +0 -1
- package/dist/stores/index.js.map +0 -1
- package/dist/utils/index.cjs.map +0 -1
- package/dist/utils/index.js.map +0 -1
package/package.json
CHANGED
|
@@ -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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"}
|