@owp/core 2.5.34 → 2.5.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/_virtual/index3.js +2 -2
  2. package/dist/_virtual/index4.js +2 -2
  3. package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js +68 -62
  4. package/dist/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.js.map +1 -1
  5. package/dist/components/OwpDialog/OwpAlertDialog.js +19 -18
  6. package/dist/components/OwpDialog/OwpAlertDialog.js.map +1 -1
  7. package/dist/components/OwpDialog/OwpDialog.js +34 -31
  8. package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
  9. package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js +18 -0
  10. package/dist/components/OwpDialog/internal/useDialogOpenFocusCleanup.js.map +1 -0
  11. package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js +25 -15
  12. package/dist/components/OwpErrorBoundary/OwpErrorBoundary.js.map +1 -1
  13. package/dist/components/OwpLayout/OwpLayout.js.map +1 -1
  14. package/dist/components/OwpNumberField/OwpNumberField.js +45 -24
  15. package/dist/components/OwpNumberField/OwpNumberField.js.map +1 -1
  16. package/dist/components/OwpScrollbars/OwpScrollbars.js +79 -52
  17. package/dist/components/OwpScrollbars/OwpScrollbars.js.map +1 -1
  18. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +157 -157
  19. package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -1
  20. package/dist/components/OwpTable/OwpDataTable.js +377 -342
  21. package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
  22. package/dist/components/OwpTable/OwpTable.js +20 -19
  23. package/dist/components/OwpTable/OwpTable.js.map +1 -1
  24. package/dist/components/OwpTable/internal/OwpTableBase.js +81 -78
  25. package/dist/components/OwpTable/internal/OwpTableBase.js.map +1 -1
  26. package/dist/components/OwpTable/internal/treeGridTableStyle.js +88 -31
  27. package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -1
  28. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +304 -262
  29. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  30. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +282 -277
  31. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
  32. package/dist/configs/layoutConfig.js +0 -6
  33. package/dist/configs/layoutConfig.js.map +1 -1
  34. package/dist/constants/treeGrid.js +59 -46
  35. package/dist/constants/treeGrid.js.map +1 -1
  36. package/dist/constants.js +18 -18
  37. package/dist/constants.js.map +1 -1
  38. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js +15 -15
  39. package/dist/features/themePreview/dialogs/ThemePreviewDialog.js.map +1 -1
  40. package/dist/hooks/internal/useNavbar.js +4 -4
  41. package/dist/hooks/useConfirm.js +1 -1
  42. package/dist/hooks/useConfirm.js.map +1 -1
  43. package/dist/hooks/useOwpDialogs.js +19 -0
  44. package/dist/hooks/useOwpDialogs.js.map +1 -0
  45. package/dist/hooks.js +34 -32
  46. package/dist/hooks.js.map +1 -1
  47. package/dist/index.js +69 -71
  48. package/dist/index.js.map +1 -1
  49. package/dist/layout/Layout.js +23 -27
  50. package/dist/layout/Layout.js.map +1 -1
  51. package/dist/layout/components/layouts/FooterLayout.js.map +1 -1
  52. package/dist/layout/components/menus/PasswordChangeMenu.js +25 -25
  53. package/dist/layout/components/menus/PasswordChangeMenu.js.map +1 -1
  54. package/dist/layout/components/toggles/NavigationSearchToggle.js +1 -1
  55. package/dist/layout/components/toggles/NavigationSearchToggle.js.map +1 -1
  56. package/dist/layout/components/toggles/NavigationShortcutsToggle.js +1 -1
  57. package/dist/layout/components/toggles/NavigationShortcutsToggle.js.map +1 -1
  58. package/dist/layout/components/toggles/ThemePreviewToggle.js +14 -14
  59. package/dist/layout/components/toggles/ThemePreviewToggle.js.map +1 -1
  60. package/dist/node_modules/.pnpm/inko@1.1.1/node_modules/inko/index.js +1 -1
  61. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/index.js +1 -1
  62. package/dist/owp-app.css +1 -1
  63. package/dist/types/components/OwpAutoLogoutDialog/OwpAutoLogoutDialog.d.ts +5 -3
  64. package/dist/types/components/OwpDialog/OwpAlertDialog.d.ts +1 -1
  65. package/dist/types/components/OwpDialog/internal/useDialogOpenFocusCleanup.d.ts +5 -0
  66. package/dist/types/components/OwpErrorBoundary/OwpErrorBoundary.d.ts +8 -14
  67. package/dist/types/components/OwpNumberField/OwpNumberField.d.ts +18 -4
  68. package/dist/types/components/OwpScrollbars/OwpScrollbars.d.ts +28 -14
  69. package/dist/types/components/OwpTable/internal/OwpTableBase.d.ts +3 -1
  70. package/dist/types/components/OwpTable/internal/treeGridTableStyle.d.ts +61 -2
  71. package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +2 -1
  72. package/dist/types/configs/layoutConfig.d.ts +0 -6
  73. package/dist/types/constants/index.d.ts +0 -1
  74. package/dist/types/constants/treeGrid.d.ts +9 -0
  75. package/dist/types/features/themePreview/dialogs/ThemePreviewDialog.d.ts +1 -1
  76. package/dist/types/hooks/index.d.ts +1 -0
  77. package/dist/types/hooks/useOwpDialogs.d.ts +5 -0
  78. package/dist/types/hooks/useOwpSettings.d.ts +0 -6
  79. package/dist/types/index.d.ts +0 -1
  80. package/dist/types/store/atoms/owpSettingsAtoms.d.ts +0 -6
  81. package/dist/types/types/OwpDialogTypes.d.ts +1 -0
  82. package/dist/types/types/OwpRouteTypes.d.ts +25 -0
  83. package/dist/types/types/index.d.ts +2 -0
  84. package/dist/types/utils/index.d.ts +0 -1
  85. package/dist/types/utils/internal/blurActiveElement.d.ts +4 -0
  86. package/dist/utils/internal/blurActiveElement.js +12 -0
  87. package/dist/utils/internal/blurActiveElement.js.map +1 -0
  88. package/dist/utils/{navigationUtils.js → internal/navigationUtils.js} +3 -3
  89. package/dist/utils/internal/navigationUtils.js.map +1 -0
  90. package/dist/utils.js +23 -25
  91. package/dist/utils.js.map +1 -1
  92. package/package.json +1 -1
  93. package/dist/components/OwpEventEmitter/OwpEventEmitter.js +0 -51
  94. package/dist/components/OwpEventEmitter/OwpEventEmitter.js.map +0 -1
  95. package/dist/layout/components/layouts/LeftSideLayout.js +0 -13
  96. package/dist/layout/components/layouts/LeftSideLayout.js.map +0 -1
  97. package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js +0 -66
  98. package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/array/some.js.map +0 -1
  99. package/dist/node_modules/.pnpm/perfect-scrollbar@1.5.6/node_modules/perfect-scrollbar/css/perfect-scrollbar.css +0 -1
  100. package/dist/types/components/OwpEventEmitter/OwpEventEmitter.d.ts +0 -27
  101. package/dist/types/components/OwpEventEmitter/index.d.ts +0 -1
  102. package/dist/types/layout/components/layouts/LeftSideLayout.d.ts +0 -6
  103. package/dist/types/utils/common/OwpUtils.d.ts +0 -119
  104. package/dist/types/utils/common/index.d.ts +0 -1
  105. package/dist/utils/common/OwpUtils.js +0 -196
  106. package/dist/utils/common/OwpUtils.js.map +0 -1
  107. package/dist/utils/navigationUtils.js.map +0 -1
  108. /package/dist/types/utils/{navigationUtils.d.ts → internal/navigationUtils.d.ts} +0 -0
@@ -1,28 +1,49 @@
1
- var o = Object.defineProperty;
2
- var e = (r, t) => o(r, "name", { value: t, configurable: !0 });
3
- import { jsx as u } 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 i } from "@mui/material";
5
- import { clsx as p } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
6
- import { NumericFormat as c } 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";
7
- const l = /* @__PURE__ */ e(({
8
- className: r,
9
- inputAlign: t,
10
- ...m
11
- }) => /* @__PURE__ */ u(
12
- c,
13
- {
14
- ...m,
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
- ), "OwpNumberField");
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
- l as OwpNumberField
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 * OwpNumberField 컴포넌트\n * @param className CSS 클래스명\n * @param inputAlign inputAlign 값\n */\nconst OwpNumberField = ({\n className,\n inputAlign,\n ...props\n}: ComponentProps<\n typeof NumericFormat<TextFieldProps & { inputAlign?: 'left' | 'center' | 'right' }>\n>) => {\n return (\n <NumericFormat\n {...props}\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 thousandSeparator\n valueIsNumericString\n />\n );\n};\n\nexport { OwpNumberField };\n"],"names":["OwpNumberField","__name","className","inputAlign","props","jsx","NumericFormat","clsx","TextField"],"mappings":";;;;;;AAUA,MAAMA,IAAiB,gBAAAC,EAAA,CAAC;AAAA,EACtB,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,GAAGC;AACL,MAII,gBAAAC;AAAA,EAACC;AAAA,EAAA;AAAA,IACE,GAAGF;AAAA,IACJ,WAAWG,EAAKL,GAAW;AAAA,MACzB,uBAAuBC,MAAe;AAAA,MACtC,yBAAyBA,MAAe;AAAA,MACxC,wBAAwBA,MAAe;AAAA,IAAA,CACxC;AAAA,IACD,aAAaK;AAAA,IACb,mBAAiB;AAAA,IACjB,sBAAoB;AAAA,EAAA;AAAA,GAjBH;"}
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 j = Object.defineProperty;
2
- var u = (t, o) => j(t, "name", { value: o, configurable: !0 });
3
- import { jsx as k } 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 B } from "../../hooks/useOwpSettings.js";
5
- import { styled as M } from "@mui/material/styles";
6
- import U from "../../_virtual/mobile-detect.js";
7
- import X from "../../node_modules/.pnpm/perfect-scrollbar@1.5.6/node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js";
8
- /* empty css */
9
- import { forwardRef as Y, useRef as f, useState as D, useCallback as p, useEffect as a } from "react";
10
- import { useLocation as H } from "react-router-dom";
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
- })), P = new U(window.navigator.userAgent), y = P.mobile(), g = Object.freeze({
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
- }), V = Y((t, o) => {
26
+ }, io = V((p, e) => {
26
27
  const {
27
- className: T = "",
28
- children: h,
29
- id: x = "",
30
- scrollToTopOnChildChange: m = !0,
31
- scrollToTopOnRouteChange: d = !1,
32
- enable: S = !0,
33
- option: b = {
34
- wheelPropagation: !0
35
- }
36
- } = t, r = f(null), n = f(null), i = f(/* @__PURE__ */ new Map()), [C, v] = D({}), c = B(), O = H(), { pathname: L } = O, E = p(() => {
37
- Object.keys(g).forEach((e) => {
38
- const s = t[g[e]];
39
- if (s) {
40
- const R = /* @__PURE__ */ u(() => s(r.current), "handler");
41
- i.current.set(e, R), r.current && r.current.addEventListener(e, R, !1);
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
- }, [t]), w = p(() => {
45
- i.current.forEach((e, s) => {
46
- r.current && r.current.removeEventListener(s, e, !1);
47
- }), i.current.clear();
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
- a(() => (c && r.current && !y && (n.current = new X(r.current, b), E()), () => {
50
- n.current && (n.current.destroy(), n.current = null, w());
51
- }), [c, E, b, w]);
52
- const l = p(() => {
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 a(() => {
56
- m && l();
57
- }, [l, h, m]), a(() => {
58
- d && l();
59
- }, [L, l, d]), a(() => {
60
- v(c && S && !y ? {
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
- }, [c, S]), /* @__PURE__ */ k(
65
- N,
91
+ }, [l, t]), /* @__PURE__ */ F(
92
+ $,
66
93
  {
67
- id: x,
68
- className: T,
69
- style: C,
70
- ref: /* @__PURE__ */ u((e) => {
71
- r.current = e, typeof o == "function" ? o(e) : o && (o.current = e);
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: h
100
+ children: m
74
101
  }
75
102
  );
76
103
  });
77
104
  export {
78
- V as OwpScrollbars
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 'perfect-scrollbar/css/perfect-scrollbar.css';\nimport { forwardRef, ReactNode, useCallback, useEffect, useRef, useState } 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\nconst handlerNameByEvent = Object.freeze({\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});\n\ntype OwpScrollbarsProps = {\n id?: string;\n className?: string;\n children: ReactNode;\n enable?: boolean;\n scrollToTopOnChildChange?: boolean;\n scrollToTopOnRouteChange?: boolean;\n option?: {\n wheelPropagation?: boolean;\n suppressScrollX?: boolean;\n };\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 = {\n wheelPropagation: true,\n },\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 [style, setStyle] = useState({});\n const customScrollbars = useGetCustomScrollbarsEnabled();\n const location = useLocation();\n const { pathname } = location;\n\n const hookUpEvents = useCallback(() => {\n Object.keys(handlerNameByEvent).forEach((key) => {\n const callback = props[handlerNameByEvent[key] as keyof OwpScrollbarsProps] as (\n T: HTMLDivElement,\n ) => void;\n\n if (callback) {\n const handler: EventListener = () => callback(containerRef.current);\n handlerByEvent.current.set(key, handler);\n\n if (containerRef.current) {\n containerRef.current.addEventListener(key, handler, false);\n }\n }\n });\n }, [props]);\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 && containerRef.current && !isMobile) {\n psRef.current = new PerfectScrollbar(containerRef.current, option);\n hookUpEvents();\n }\n\n return () => {\n if (psRef.current) {\n psRef.current.destroy();\n psRef.current = null;\n unHookUpEvents();\n }\n };\n }, [customScrollbars, hookUpEvents, option, 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","handlerNameByEvent","OwpScrollbars","forwardRef","props","ref","className","children","id","scrollToTopOnChildChange","scrollToTopOnRouteChange","enable","option","containerRef","useRef","psRef","handlerByEvent","style","setStyle","useState","customScrollbars","useGetCustomScrollbarsEnabled","location","useLocation","pathname","hookUpEvents","useCallback","key","callback","handler","__name","unHookUpEvents","value","useEffect","PerfectScrollbar","scrollToTop","jsx","el"],"mappings":"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"}
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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"}