@owp/core 2.5.34 → 2.5.36
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/_virtual/index3.js +2 -2
- package/dist/_virtual/index4.js +2 -2
- package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js +68 -62
- package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js.map +1 -1
- package/dist/components/OwpDialog/OwpAlertDialog.js +19 -18
- package/dist/components/OwpDialog/OwpAlertDialog.js.map +1 -1
- package/dist/components/OwpDialog/OwpDialog.js +34 -31
- package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
- package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js +18 -0
- package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js.map +1 -0
- package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js +25 -15
- package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js.map +1 -1
- package/dist/components/OwpLayout/OwpLayout.js.map +1 -1
- package/dist/components/OwpNumberField/OwpNumberField.js +45 -24
- package/dist/components/OwpNumberField/OwpNumberField.js.map +1 -1
- package/dist/components/OwpScrollbars/OwpScrollbars.js +79 -52
- package/dist/components/OwpScrollbars/OwpScrollbars.js.map +1 -1
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +157 -157
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +298 -248
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
- package/dist/configs/layoutConfig.js +0 -6
- package/dist/configs/layoutConfig.js.map +1 -1
- package/dist/features/themePreview/dialogs/ThemePreviewDialog.js +15 -15
- package/dist/features/themePreview/dialogs/ThemePreviewDialog.js.map +1 -1
- package/dist/hooks/internal/useNavbar.js +4 -4
- package/dist/hooks/useConfirm.js +1 -1
- package/dist/hooks/useConfirm.js.map +1 -1
- package/dist/hooks/useOwpDialogs.js +19 -0
- package/dist/hooks/useOwpDialogs.js.map +1 -0
- package/dist/hooks.js +34 -32
- package/dist/hooks.js.map +1 -1
- package/dist/index.js +69 -71
- package/dist/index.js.map +1 -1
- package/dist/layout/Layout.js +23 -27
- package/dist/layout/Layout.js.map +1 -1
- package/dist/layout/components/layouts/FooterLayout.js.map +1 -1
- package/dist/layout/components/menus/PasswordChangeMenu.js +25 -25
- package/dist/layout/components/menus/PasswordChangeMenu.js.map +1 -1
- package/dist/layout/components/toggles/NavigationSearchToggle.js +1 -1
- package/dist/layout/components/toggles/NavigationSearchToggle.js.map +1 -1
- package/dist/layout/components/toggles/NavigationShortcutsToggle.js +1 -1
- package/dist/layout/components/toggles/NavigationShortcutsToggle.js.map +1 -1
- package/dist/layout/components/toggles/ThemePreviewToggle.js +14 -14
- package/dist/layout/components/toggles/ThemePreviewToggle.js.map +1 -1
- package/dist/node_modules/.pnpm/inko@1.1.1/node_modules/inko/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/index.js +1 -1
- package/dist/types/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.d.ts +5 -3
- package/dist/types/components/OwpDialog/OwpAlertDialog.d.ts +1 -1
- package/dist/types/components/OwpDialog/internal/useDialogOpenFocusCleanup.d.ts +5 -0
- package/dist/types/components/OwpErrorBoundary/OwpErrorBoundary.d.ts +8 -14
- package/dist/types/components/OwpNumberField/OwpNumberField.d.ts +18 -4
- package/dist/types/components/OwpScrollbars/OwpScrollbars.d.ts +28 -14
- package/dist/types/configs/layoutConfig.d.ts +0 -6
- package/dist/types/features/themePreview/dialogs/ThemePreviewDialog.d.ts +1 -1
- package/dist/types/hooks/index.d.ts +1 -0
- package/dist/types/hooks/useOwpDialogs.d.ts +5 -0
- package/dist/types/hooks/useOwpSettings.d.ts +0 -6
- package/dist/types/index.d.ts +0 -1
- package/dist/types/store/atoms/owpSettingsAtoms.d.ts +0 -6
- package/dist/types/types/OwpDialogTypes.d.ts +1 -0
- package/dist/types/types/OwpRouteTypes.d.ts +25 -0
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/utils/index.d.ts +0 -1
- package/dist/types/utils/internal/blurActiveElement.d.ts +4 -0
- package/dist/utils/internal/blurActiveElement.js +12 -0
- package/dist/utils/internal/blurActiveElement.js.map +1 -0
- package/dist/utils/{navigationUtils.js → internal/navigationUtils.js} +3 -3
- package/dist/utils/internal/navigationUtils.js.map +1 -0
- package/dist/utils.js +23 -25
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/OwpEventEmitter/OwpEventEmitter.js +0 -51
- package/dist/components/OwpEventEmitter/OwpEventEmitter.js.map +0 -1
- package/dist/layout/components/layouts/LeftSideLayout.js +0 -13
- package/dist/layout/components/layouts/LeftSideLayout.js.map +0 -1
- package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js +0 -66
- package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js.map +0 -1
- package/dist/node_modules/.pnpm/perfect-scrollbar@1.5.6/node_modules/perfect-scrollbar/css/perfect-scrollbar.css +0 -1
- package/dist/types/components/OwpEventEmitter/OwpEventEmitter.d.ts +0 -27
- package/dist/types/components/OwpEventEmitter/index.d.ts +0 -1
- package/dist/types/layout/components/layouts/LeftSideLayout.d.ts +0 -6
- package/dist/types/utils/common/OwpUtils.d.ts +0 -119
- package/dist/types/utils/common/index.d.ts +0 -1
- package/dist/utils/common/OwpUtils.js +0 -196
- package/dist/utils/common/OwpUtils.js.map +0 -1
- package/dist/utils/navigationUtils.js.map +0 -1
- /package/dist/types/utils/{navigationUtils.d.ts → internal/navigationUtils.d.ts} +0 -0
|
@@ -1,28 +1,49 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
import { jsx as
|
|
4
|
-
import { TextField as
|
|
5
|
-
import { clsx as
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
className: p(r, {
|
|
16
|
-
"[&_input]:text-left": t === "left",
|
|
17
|
-
"[&_input]:text-center": t === "center",
|
|
18
|
-
"[&_input]:text-right": t === "right"
|
|
19
|
-
}),
|
|
20
|
-
customInput: i,
|
|
21
|
-
thousandSeparator: !0,
|
|
22
|
-
valueIsNumericString: !0
|
|
1
|
+
var d = Object.defineProperty;
|
|
2
|
+
var p = (t, e) => d(t, "name", { value: e, configurable: !0 });
|
|
3
|
+
import { jsx as g } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
|
+
import { TextField as x } from "@mui/material";
|
|
5
|
+
import { clsx as N } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
|
|
6
|
+
import { forwardRef as v, useCallback as R } from "react";
|
|
7
|
+
import { NumericFormat as F } from "../../node_modules/.pnpm/react-number-format@5.4.4_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-number-format/dist/react-number-format.es.js";
|
|
8
|
+
const a = /* @__PURE__ */ p((t, e) => {
|
|
9
|
+
if (t) {
|
|
10
|
+
if (typeof t == "function") {
|
|
11
|
+
t(e);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
t.current = e;
|
|
23
15
|
}
|
|
24
|
-
|
|
16
|
+
}, "assignRef"), b = v((t, e) => {
|
|
17
|
+
const { className: c, inputAlign: i, getInputRef: o, onChange: u, onValueChange: m, ...l } = t, f = R(
|
|
18
|
+
(r) => {
|
|
19
|
+
a(o, r), a(e, r);
|
|
20
|
+
},
|
|
21
|
+
[o, e]
|
|
22
|
+
);
|
|
23
|
+
return /* @__PURE__ */ g(
|
|
24
|
+
F,
|
|
25
|
+
{
|
|
26
|
+
...l,
|
|
27
|
+
className: N(c, {
|
|
28
|
+
"[&_input]:text-left": i === "left",
|
|
29
|
+
"[&_input]:text-center": i === "center",
|
|
30
|
+
"[&_input]:text-right": i === "right"
|
|
31
|
+
}),
|
|
32
|
+
customInput: x,
|
|
33
|
+
getInputRef: f,
|
|
34
|
+
onValueChange: /* @__PURE__ */ p((r, n) => {
|
|
35
|
+
if (m == null || m(r, n), n.source !== "event" || !n.event)
|
|
36
|
+
return;
|
|
37
|
+
const s = n.event;
|
|
38
|
+
s.target.value = r.value, u == null || u(s);
|
|
39
|
+
}, "onValueChange"),
|
|
40
|
+
thousandSeparator: !0,
|
|
41
|
+
valueIsNumericString: !0
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
});
|
|
45
|
+
b.displayName = "OwpNumberField";
|
|
25
46
|
export {
|
|
26
|
-
|
|
47
|
+
b as OwpNumberField
|
|
27
48
|
};
|
|
28
49
|
//# sourceMappingURL=OwpNumberField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpNumberField.js","sources":["../../../src/components/OwpNumberField/OwpNumberField.tsx"],"sourcesContent":["import { TextField, TextFieldProps } from '@mui/material';\nimport clsx from 'clsx';\nimport { ComponentProps } from 'react';\nimport { NumericFormat } from 'react-number-format';\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"OwpNumberField.js","sources":["../../../src/components/OwpNumberField/OwpNumberField.tsx"],"sourcesContent":["import { TextField, TextFieldProps } from '@mui/material';\nimport clsx from 'clsx';\nimport { ChangeEvent, ComponentProps, forwardRef, Ref, useCallback } from 'react';\nimport { NumericFormat } from 'react-number-format';\n\ntype OwpNumberFieldProps = ComponentProps<\n typeof NumericFormat<TextFieldProps & { inputAlign?: 'left' | 'center' | 'right' }>\n>;\n\n/**\n * ref 값 할당\n * @param ref 대상 ref\n * @param value 할당 값\n */\nconst assignRef = <T,>(ref: Ref<T> | undefined, value: T | null) => {\n if (!ref) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(value);\n return;\n }\n\n ref.current = value;\n};\n\n/**\n * OwpNumberField 컴포넌트\n * @param className CSS 클래스명\n * @param inputAlign inputAlign 값\n * @param ref input 참조\n */\nconst OwpNumberField = forwardRef<HTMLInputElement, OwpNumberFieldProps>((props, ref) => {\n const { className, inputAlign, getInputRef, onChange, onValueChange, ...restProps } = props;\n const handleInputRef = useCallback(\n (input: HTMLInputElement | null) => {\n assignRef(getInputRef, input);\n assignRef(ref, input);\n },\n [getInputRef, ref],\n );\n\n return (\n <NumericFormat\n {...restProps}\n className={clsx(className, {\n '[&_input]:text-left': inputAlign === 'left',\n '[&_input]:text-center': inputAlign === 'center',\n '[&_input]:text-right': inputAlign === 'right',\n })}\n customInput={TextField}\n getInputRef={handleInputRef}\n onValueChange={(values, sourceInfo) => {\n onValueChange?.(values, sourceInfo);\n\n if (sourceInfo.source !== 'event' || !sourceInfo.event) {\n return;\n }\n\n const event = sourceInfo.event as ChangeEvent<HTMLInputElement>;\n event.target.value = values.value;\n onChange?.(event);\n }}\n thousandSeparator\n valueIsNumericString\n />\n );\n});\n\nOwpNumberField.displayName = 'OwpNumberField';\n\nexport { OwpNumberField };\n"],"names":["assignRef","__name","ref","value","OwpNumberField","forwardRef","props","className","inputAlign","getInputRef","onChange","onValueChange","restProps","handleInputRef","useCallback","input","jsx","NumericFormat","clsx","TextField","values","sourceInfo","event"],"mappings":";;;;;;;AAcA,MAAMA,IAAY,gBAAAC,EAAA,CAAKC,GAAyBC,MAAoB;AAClE,MAAKD,GAIL;AAAA,QAAI,OAAOA,KAAQ,YAAY;AAC7B,MAAAA,EAAIC,CAAK;AACT;AAAA,IACF;AAEA,IAAAD,EAAI,UAAUC;AAAA;AAChB,GAXkB,cAmBZC,IAAiBC,EAAkD,CAACC,GAAOJ,MAAQ;AACvF,QAAM,EAAE,WAAAK,GAAW,YAAAC,GAAY,aAAAC,GAAa,UAAAC,GAAU,eAAAC,GAAe,GAAGC,MAAcN,GAChFO,IAAiBC;AAAA,IACrB,CAACC,MAAmC;AAClC,MAAAf,EAAUS,GAAaM,CAAK,GAC5Bf,EAAUE,GAAKa,CAAK;AAAA,IACtB;AAAA,IACA,CAACN,GAAaP,CAAG;AAAA,EAAA;AAGnB,SACE,gBAAAc;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGL;AAAA,MACJ,WAAWM,EAAKX,GAAW;AAAA,QACzB,uBAAuBC,MAAe;AAAA,QACtC,yBAAyBA,MAAe;AAAA,QACxC,wBAAwBA,MAAe;AAAA,MAAA,CACxC;AAAA,MACD,aAAaW;AAAA,MACb,aAAaN;AAAA,MACb,eAAe,gBAAAZ,EAAA,CAACmB,GAAQC,MAAe;AAGrC,YAFAV,KAAA,QAAAA,EAAgBS,GAAQC,IAEpBA,EAAW,WAAW,WAAW,CAACA,EAAW;AAC/C;AAGF,cAAMC,IAAQD,EAAW;AACzB,QAAAC,EAAM,OAAO,QAAQF,EAAO,OAC5BV,KAAA,QAAAA,EAAWY;AAAA,MACb,GAVe;AAAA,MAWf,mBAAiB;AAAA,MACjB,sBAAoB;AAAA,IAAA;AAAA,EAAA;AAG1B,CAAC;AAEDlB,EAAe,cAAc;"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
import { jsx as
|
|
4
|
-
import { useGetCustomScrollbarsEnabled as
|
|
5
|
-
import { styled as
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
const N = M("div")(() => ({
|
|
1
|
+
var q = Object.defineProperty;
|
|
2
|
+
var h = (p, e) => q(p, "name", { value: e, configurable: !0 });
|
|
3
|
+
import { jsx as F } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
|
+
import { useGetCustomScrollbarsEnabled as I } from "../../hooks/useOwpSettings.js";
|
|
5
|
+
import { styled as J } from "@mui/material/styles";
|
|
6
|
+
import K from "../../_virtual/mobile-detect.js";
|
|
7
|
+
import Q from "../../node_modules/.pnpm/perfect-scrollbar@1.5.6/node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js";
|
|
8
|
+
import { forwardRef as V, useRef as a, useState as W, useMemo as Z, useCallback as d, useEffect as i } from "react";
|
|
9
|
+
import { useLocation as _ } from "react-router-dom";
|
|
10
|
+
const $ = J("div")(() => ({
|
|
12
11
|
overscrollBehavior: "contain",
|
|
13
12
|
minHeight: "100%"
|
|
14
|
-
})),
|
|
13
|
+
})), oo = new K(window.navigator.userAgent), O = oo.mobile(), T = Object.freeze({
|
|
14
|
+
wheelPropagation: !0
|
|
15
|
+
}), x = {
|
|
15
16
|
"ps-scroll-y": "onScrollY",
|
|
16
17
|
"ps-scroll-x": "onScrollX",
|
|
17
18
|
"ps-scroll-up": "onScrollUp",
|
|
@@ -22,59 +23,85 @@ const N = M("div")(() => ({
|
|
|
22
23
|
"ps-y-reach-end": "onYReachEnd",
|
|
23
24
|
"ps-x-reach-start": "onXReachStart",
|
|
24
25
|
"ps-x-reach-end": "onXReachEnd"
|
|
25
|
-
}
|
|
26
|
+
}, io = V((p, e) => {
|
|
26
27
|
const {
|
|
27
|
-
className:
|
|
28
|
-
children:
|
|
29
|
-
id:
|
|
30
|
-
scrollToTopOnChildChange:
|
|
31
|
-
scrollToTopOnRouteChange:
|
|
32
|
-
enable:
|
|
33
|
-
option:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
28
|
+
className: P = "",
|
|
29
|
+
children: m,
|
|
30
|
+
id: Y = "",
|
|
31
|
+
scrollToTopOnChildChange: S = !0,
|
|
32
|
+
scrollToTopOnRouteChange: R = !1,
|
|
33
|
+
enable: t = !0,
|
|
34
|
+
option: n = T,
|
|
35
|
+
onScrollY: C,
|
|
36
|
+
onScrollX: L,
|
|
37
|
+
onScrollUp: k,
|
|
38
|
+
onScrollDown: B,
|
|
39
|
+
onScrollLeft: M,
|
|
40
|
+
onScrollRight: N,
|
|
41
|
+
onYReachStart: U,
|
|
42
|
+
onYReachEnd: j,
|
|
43
|
+
onXReachStart: D,
|
|
44
|
+
onXReachEnd: H
|
|
45
|
+
} = p, r = a(null), c = a(null), u = a(/* @__PURE__ */ new Map()), w = a({}), [z, v] = W({}), l = I(), A = _(), { pathname: G } = A, b = Z(() => {
|
|
46
|
+
const o = {
|
|
47
|
+
wheelPropagation: n.wheelPropagation ?? T.wheelPropagation
|
|
48
|
+
};
|
|
49
|
+
return n.suppressScrollX !== void 0 && (o.suppressScrollX = n.suppressScrollX), o;
|
|
50
|
+
}, [n.suppressScrollX, n.wheelPropagation]);
|
|
51
|
+
w.current = {
|
|
52
|
+
onScrollY: C,
|
|
53
|
+
onScrollX: L,
|
|
54
|
+
onScrollUp: k,
|
|
55
|
+
onScrollDown: B,
|
|
56
|
+
onScrollLeft: M,
|
|
57
|
+
onScrollRight: N,
|
|
58
|
+
onYReachStart: U,
|
|
59
|
+
onYReachEnd: j,
|
|
60
|
+
onXReachStart: D,
|
|
61
|
+
onXReachEnd: H
|
|
62
|
+
};
|
|
63
|
+
const E = d(() => {
|
|
64
|
+
Object.keys(x).forEach((o) => {
|
|
65
|
+
const f = x[o], y = /* @__PURE__ */ h(() => {
|
|
66
|
+
const X = w.current[f];
|
|
67
|
+
X && r.current && X(r.current);
|
|
68
|
+
}, "handler");
|
|
69
|
+
u.current.set(o, y), r.current && r.current.addEventListener(o, y, !1);
|
|
43
70
|
});
|
|
44
|
-
}, [
|
|
45
|
-
|
|
46
|
-
r.current && r.current.removeEventListener(
|
|
47
|
-
}),
|
|
71
|
+
}, []), g = d(() => {
|
|
72
|
+
u.current.forEach((o, f) => {
|
|
73
|
+
r.current && r.current.removeEventListener(f, o, !1);
|
|
74
|
+
}), u.current.clear();
|
|
48
75
|
}, []);
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}), [
|
|
52
|
-
const
|
|
76
|
+
i(() => (l && t && r.current && !O && (c.current = new Q(r.current, b), E()), () => {
|
|
77
|
+
c.current && (c.current.destroy(), c.current = null, g());
|
|
78
|
+
}), [l, t, E, b, g]);
|
|
79
|
+
const s = d(() => {
|
|
53
80
|
r.current && (r.current.scrollTop = 0);
|
|
54
81
|
}, []);
|
|
55
|
-
return
|
|
56
|
-
|
|
57
|
-
}, [
|
|
58
|
-
|
|
59
|
-
}, [
|
|
60
|
-
v(
|
|
82
|
+
return i(() => {
|
|
83
|
+
S && s();
|
|
84
|
+
}, [s, m, S]), i(() => {
|
|
85
|
+
R && s();
|
|
86
|
+
}, [G, s, R]), i(() => {
|
|
87
|
+
v(l && t && !O ? {
|
|
61
88
|
position: "relative",
|
|
62
89
|
overflow: "hidden!important"
|
|
63
90
|
} : {});
|
|
64
|
-
}, [
|
|
65
|
-
|
|
91
|
+
}, [l, t]), /* @__PURE__ */ F(
|
|
92
|
+
$,
|
|
66
93
|
{
|
|
67
|
-
id:
|
|
68
|
-
className:
|
|
69
|
-
style:
|
|
70
|
-
ref: /* @__PURE__ */
|
|
71
|
-
r.current =
|
|
94
|
+
id: Y,
|
|
95
|
+
className: P,
|
|
96
|
+
style: z,
|
|
97
|
+
ref: /* @__PURE__ */ h((o) => {
|
|
98
|
+
r.current = o, typeof e == "function" ? e(o) : e && (e.current = o);
|
|
72
99
|
}, "ref"),
|
|
73
|
-
children:
|
|
100
|
+
children: m
|
|
74
101
|
}
|
|
75
102
|
);
|
|
76
103
|
});
|
|
77
104
|
export {
|
|
78
|
-
|
|
105
|
+
io as OwpScrollbars
|
|
79
106
|
};
|
|
80
107
|
//# sourceMappingURL=OwpScrollbars.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpScrollbars.js","sources":["../../../src/components/OwpScrollbars/OwpScrollbars.tsx"],"sourcesContent":["import { useGetCustomScrollbarsEnabled } from '@/hooks/useOwpSettings';\nimport { styled } from '@mui/material/styles';\nimport MobileDetect from 'mobile-detect';\nimport PerfectScrollbar from 'perfect-scrollbar';\nimport
|
|
1
|
+
{"version":3,"file":"OwpScrollbars.js","sources":["../../../src/components/OwpScrollbars/OwpScrollbars.tsx"],"sourcesContent":["import { useGetCustomScrollbarsEnabled } from '@/hooks/useOwpSettings';\nimport { styled } from '@mui/material/styles';\nimport MobileDetect from 'mobile-detect';\nimport PerfectScrollbar from 'perfect-scrollbar';\nimport { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nconst Root = styled('div')(() => ({\n overscrollBehavior: 'contain',\n minHeight: '100%',\n}));\n\nconst md = new MobileDetect(window.navigator.userAgent);\nconst isMobile = md.mobile();\n\ntype OwpScrollbarOption = {\n wheelPropagation?: boolean;\n suppressScrollX?: boolean;\n};\n\nconst defaultOption: Readonly<OwpScrollbarOption> = Object.freeze({\n wheelPropagation: true,\n});\n\nconst handlerNameByEvent = {\n 'ps-scroll-y': 'onScrollY',\n 'ps-scroll-x': 'onScrollX',\n 'ps-scroll-up': 'onScrollUp',\n 'ps-scroll-down': 'onScrollDown',\n 'ps-scroll-left': 'onScrollLeft',\n 'ps-scroll-right': 'onScrollRight',\n 'ps-y-reach-start': 'onYReachStart',\n 'ps-y-reach-end': 'onYReachEnd',\n 'ps-x-reach-start': 'onXReachStart',\n 'ps-x-reach-end': 'onXReachEnd',\n} as const;\n\ntype OwpScrollbarEventName = keyof typeof handlerNameByEvent;\ntype OwpScrollbarHandlerName = (typeof handlerNameByEvent)[OwpScrollbarEventName];\ntype OwpScrollbarEventCallback = (container: HTMLDivElement) => void;\ntype OwpScrollbarEventProps = Partial<Record<OwpScrollbarHandlerName, OwpScrollbarEventCallback>>;\n\ntype OwpScrollbarsProps = OwpScrollbarEventProps & {\n id?: string;\n className?: string;\n children: ReactNode;\n enable?: boolean;\n scrollToTopOnChildChange?: boolean;\n scrollToTopOnRouteChange?: boolean;\n option?: OwpScrollbarOption;\n};\n\n/**\n * OwpScrollbars 컴포넌트\n * @param props 컴포넌트 props\n * @param ref forwardRef 참조\n */\nconst OwpScrollbars = forwardRef<HTMLDivElement, OwpScrollbarsProps>((props, ref) => {\n const {\n className = '',\n children,\n id = '',\n scrollToTopOnChildChange = true,\n scrollToTopOnRouteChange = false,\n enable = true,\n option = defaultOption,\n onScrollY,\n onScrollX,\n onScrollUp,\n onScrollDown,\n onScrollLeft,\n onScrollRight,\n onYReachStart,\n onYReachEnd,\n onXReachStart,\n onXReachEnd,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const psRef = useRef<PerfectScrollbar | null>(null);\n const handlerByEvent = useRef<Map<string, EventListener>>(new Map());\n const callbackByNameRef = useRef<OwpScrollbarEventProps>({});\n const [style, setStyle] = useState({});\n const customScrollbars = useGetCustomScrollbarsEnabled();\n const location = useLocation();\n const { pathname } = location;\n const resolvedOption = useMemo(() => {\n const nextOption: NonNullable<OwpScrollbarsProps['option']> = {\n wheelPropagation: option.wheelPropagation ?? defaultOption.wheelPropagation,\n };\n\n if (option.suppressScrollX !== undefined) {\n nextOption.suppressScrollX = option.suppressScrollX;\n }\n\n return nextOption;\n }, [option.suppressScrollX, option.wheelPropagation]);\n\n callbackByNameRef.current = {\n onScrollY,\n onScrollX,\n onScrollUp,\n onScrollDown,\n onScrollLeft,\n onScrollRight,\n onYReachStart,\n onYReachEnd,\n onXReachStart,\n onXReachEnd,\n };\n\n const hookUpEvents = useCallback(() => {\n Object.keys(handlerNameByEvent).forEach((key) => {\n const handlerName = handlerNameByEvent[key as OwpScrollbarEventName];\n const handler: EventListener = () => {\n const callback = callbackByNameRef.current[handlerName];\n\n if (callback && containerRef.current) {\n callback(containerRef.current);\n }\n };\n handlerByEvent.current.set(key, handler);\n\n if (containerRef.current) {\n containerRef.current.addEventListener(key, handler, false);\n }\n });\n }, []);\n\n const unHookUpEvents = useCallback(() => {\n handlerByEvent.current.forEach((value, key) => {\n if (containerRef.current) {\n containerRef.current.removeEventListener(key, value, false);\n }\n });\n handlerByEvent.current.clear();\n }, []);\n\n useEffect(() => {\n if (customScrollbars && enable && containerRef.current && !isMobile) {\n psRef.current = new PerfectScrollbar(containerRef.current, resolvedOption);\n hookUpEvents();\n }\n\n return () => {\n if (psRef.current) {\n psRef.current.destroy();\n psRef.current = null;\n unHookUpEvents();\n }\n };\n }, [customScrollbars, enable, hookUpEvents, resolvedOption, unHookUpEvents]);\n\n const scrollToTop = useCallback(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = 0;\n }\n }, []);\n\n useEffect(() => {\n if (scrollToTopOnChildChange) {\n scrollToTop();\n }\n }, [scrollToTop, children, scrollToTopOnChildChange]);\n\n useEffect(() => {\n if (scrollToTopOnRouteChange) {\n scrollToTop();\n }\n }, [pathname, scrollToTop, scrollToTopOnRouteChange]);\n\n useEffect(() => {\n if (customScrollbars && enable && !isMobile) {\n setStyle({\n position: 'relative',\n overflow: 'hidden!important',\n });\n } else {\n setStyle({});\n }\n }, [customScrollbars, enable]);\n\n return (\n <Root\n id={id}\n className={className}\n style={style}\n ref={(el) => {\n containerRef.current = el;\n\n if (typeof ref === 'function') {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n >\n {children}\n </Root>\n );\n});\n\nexport { OwpScrollbars };\n"],"names":["Root","styled","md","MobileDetect","isMobile","defaultOption","handlerNameByEvent","OwpScrollbars","forwardRef","props","ref","className","children","id","scrollToTopOnChildChange","scrollToTopOnRouteChange","enable","option","onScrollY","onScrollX","onScrollUp","onScrollDown","onScrollLeft","onScrollRight","onYReachStart","onYReachEnd","onXReachStart","onXReachEnd","containerRef","useRef","psRef","handlerByEvent","callbackByNameRef","style","setStyle","useState","customScrollbars","useGetCustomScrollbarsEnabled","location","useLocation","pathname","resolvedOption","useMemo","nextOption","hookUpEvents","useCallback","key","handlerName","handler","__name","callback","unHookUpEvents","value","useEffect","PerfectScrollbar","scrollToTop","jsx","el"],"mappings":"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"}
|