@owp/core 2.3.0 → 2.4.0

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 (80) hide show
  1. package/dist/_virtual/index10.js +2 -2
  2. package/dist/_virtual/index12.js +2 -2
  3. package/dist/_virtual/index13.js +2 -2
  4. package/dist/_virtual/index14.js +2 -2
  5. package/dist/_virtual/index15.js +2 -2
  6. package/dist/_virtual/index5.js +2 -2
  7. package/dist/components/OwpDialog/OwpDialog.js +30 -32
  8. package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
  9. package/dist/components/OwpLayout/OwpLayout.js +39 -39
  10. package/dist/components/OwpLayout/OwpLayout.js.map +1 -1
  11. package/dist/components/OwpMrtTable/OwpMrtTable.js +393 -255
  12. package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
  13. package/dist/components/OwpTable/OwpDataTable.js +45 -45
  14. package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
  15. package/dist/components/OwpTable/OwpTable.js +6 -6
  16. package/dist/components/OwpTable/OwpTable.js.map +1 -1
  17. package/dist/components/OwpTable/OwpVerticalTable.js +55 -53
  18. package/dist/components/OwpTable/OwpVerticalTable.js.map +1 -1
  19. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +169 -148
  20. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  21. package/dist/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.js +1 -1
  22. package/dist/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.js.map +1 -1
  23. package/dist/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.js +1 -1
  24. package/dist/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.js.map +1 -1
  25. package/dist/components/OwpTreeGrid/{hooks → internal/hooks}/useOwpTreeGridOverlayFrame.js +1 -1
  26. package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridOverlayFrame.js.map +1 -0
  27. package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js +84 -0
  28. package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js.map +1 -0
  29. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +114 -103
  30. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
  31. package/dist/components/OwpTreeGrid/internal/utils/perf.js.map +1 -0
  32. package/dist/constants/storageKeys.js +1 -0
  33. package/dist/constants/storageKeys.js.map +1 -1
  34. package/dist/hooks/useCurrentUserSeq.js +11 -0
  35. package/dist/hooks/useCurrentUserSeq.js.map +1 -0
  36. package/dist/hooks.js +67 -64
  37. package/dist/hooks.js.map +1 -1
  38. package/dist/index.js +58 -59
  39. package/dist/layout/Layout.js +24 -24
  40. package/dist/layout/Layout.js.map +1 -1
  41. package/dist/layout/themeLayouts.js.map +1 -1
  42. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
  43. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
  44. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
  45. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
  46. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
  47. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
  48. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
  49. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
  50. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
  51. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
  52. package/dist/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js +1 -1
  53. package/dist/owp-app.css +1 -1
  54. package/dist/types/components/OwpDialog/OwpDialog.d.ts +1 -9
  55. package/dist/types/components/OwpMrtTable/OwpMrtTable.d.ts +9 -0
  56. package/dist/types/components/OwpTable/OwpVerticalTable.d.ts +3 -1
  57. package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +7 -1
  58. package/dist/types/components/OwpTreeGrid/index.d.ts +1 -1
  59. package/dist/types/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.d.ts +1 -1
  60. package/dist/types/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.d.ts +1 -1
  61. package/dist/types/components/OwpTreeGrid/internal/treeGridColumnEditRules.d.ts +60 -0
  62. package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +7 -2
  63. package/dist/types/constants/storageKeys.d.ts +1 -0
  64. package/dist/types/hooks/index.d.ts +1 -0
  65. package/dist/types/hooks/useCurrentUserSeq.d.ts +8 -0
  66. package/dist/types/layout/Layout.d.ts +2 -0
  67. package/dist/types/layout/themeLayouts.d.ts +2 -0
  68. package/dist/types/utils/treeGridExportExcelUtil.d.ts +0 -4
  69. package/dist/types/utils/treeGridUtil.d.ts +0 -59
  70. package/dist/utils/treeGridExportExcelUtil.js +57 -58
  71. package/dist/utils/treeGridExportExcelUtil.js.map +1 -1
  72. package/dist/utils/treeGridUtil.js +69 -83
  73. package/dist/utils/treeGridUtil.js.map +1 -1
  74. package/dist/utils.js +71 -86
  75. package/package.json +2 -2
  76. package/dist/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.js.map +0 -1
  77. package/dist/components/OwpTreeGrid/utils/perf.js.map +0 -1
  78. /package/dist/components/OwpTreeGrid/{utils → internal/utils}/perf.js +0 -0
  79. /package/dist/types/components/OwpTreeGrid/{hooks → internal/hooks}/useOwpTreeGridOverlayFrame.d.ts +0 -0
  80. /package/dist/types/components/OwpTreeGrid/{utils → internal/utils}/perf.d.ts +0 -0
@@ -1,200 +1,221 @@
1
- var Ae = Object.defineProperty;
2
- var a = (r, u) => Ae(r, "name", { value: u, configurable: !0 });
3
- import { jsxs as Ne, jsx as H } 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 { useOwpTranslation as Pe } from "../../hooks/useOwpTranslation.js";
5
- import { useGetCurrentLanguage as Ve } from "../../hooks/useCurrentLanguage.js";
6
- import { TREE_GRID_BODY_ROWS_CHANGED_EVENT as pe } from "../../utils/treeGridBodyRowsEvent.js";
7
- import { getTreeGridPerfTimestamp as C, countTreeGridPerf as me, logTreeGridPerf as ye, measureTreeGridPerf as Re } from "./utils/perf.js";
8
- import { useRef as e, useState as S, useEffect as I, useLayoutEffect as xe } from "react";
9
- import { useOwpTreeGridOverlayFrame as He } from "./hooks/useOwpTreeGridOverlayFrame.js";
10
- import { bindTreeGridEvents as Ce, getTreeGridBodyDataCount as M, buildTreeGridInitializationOptions as Se, hasTreeGridDisplayDataRows as ve, replaceTreeGridBodyData as Me, TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS as qe } from "./internal/treeGridRuntime.js";
11
- import { applyTreeGridLayoutToGrid as je } from "./internal/treeGridLayout.js";
12
- import { OwpTreeGridLoadingOverlay as Fe } from "./internal/OwpTreeGridLoadingOverlay.js";
13
- import { OwpTreeGridNoDataOverlay as We } from "./internal/OwpTreeGridNoDataOverlay.js";
14
- import { isEmpty as E } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js";
15
- import { delay as ze } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/function/delay.js";
16
- import { isEqual as Ye } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
17
- import { omit as he } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/omit.js";
18
- const cr = /* @__PURE__ */ a(({
1
+ var he = Object.defineProperty;
2
+ var a = (r, u) => he(r, "name", { value: u, configurable: !0 });
3
+ import { jsxs as qe, jsx as q } 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 { useOwpTranslation as je } from "../../hooks/useOwpTranslation.js";
5
+ import { useGetCurrentLanguage as Fe } from "../../hooks/useCurrentLanguage.js";
6
+ import { TREE_GRID_BODY_ROWS_CHANGED_EVENT as ge } from "../../utils/treeGridBodyRowsEvent.js";
7
+ import { getTreeGridPerfTimestamp as j, countTreeGridPerf as be, logTreeGridPerf as Ee, measureTreeGridPerf as Be } from "./internal/utils/perf.js";
8
+ import { useRef as e, useState as F, useEffect as L, useLayoutEffect as We } from "react";
9
+ import { useOwpTreeGridOverlayFrame as ze } from "./internal/hooks/useOwpTreeGridOverlayFrame.js";
10
+ import { bindTreeGridEvents as Ye, getTreeGridBodyDataCount as W, buildTreeGridInitializationOptions as ke, hasTreeGridDisplayDataRows as Ie, replaceTreeGridBodyData as Je, TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS as Ke } from "./internal/treeGridRuntime.js";
11
+ import { applyTreeGridLayoutToGrid as Qe } from "./internal/treeGridLayout.js";
12
+ import { OwpTreeGridLoadingOverlay as Xe } from "./internal/OwpTreeGridLoadingOverlay.js";
13
+ import { OwpTreeGridNoDataOverlay as Ze } from "./internal/OwpTreeGridNoDataOverlay.js";
14
+ import { resolveTreeGridColumnEditRuleLookup as Le, createTreeGridColumnEditRulesState as $e, syncTreeGridColumnEditRules as Ue } from "./internal/treeGridColumnEditRules.js";
15
+ import { isEmpty as w } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js";
16
+ import { delay as er } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/function/delay.js";
17
+ import { isEqual as we } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
18
+ import { omit as rr } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/omit.js";
19
+ const Dr = /* @__PURE__ */ a(({
19
20
  id: r = "treeGridWrapper",
20
21
  containerStyle: u,
21
- containerClassName: Te,
22
- className: Ge,
23
- style: De,
24
- height: q = "100%",
25
- width: j = "100%",
26
- layoutUrl: be,
27
- dataUrl: ge,
28
- layoutOverrides: w,
22
+ containerClassName: Oe,
23
+ className: Ce,
24
+ style: Ae,
25
+ height: z = "100%",
26
+ width: Y = "100%",
27
+ layoutUrl: _e,
28
+ dataUrl: He,
29
+ layoutOverrides: O,
29
30
  data: n,
30
- useDataUrl: F,
31
- onSelect: W,
32
- onRowClick: z,
33
- onRowAdd: Y,
34
- onRowDelete: h,
35
- onRowUndelete: J,
36
- onRowChange: K,
37
- onClickButton: Q,
38
- onSave: X,
39
- onReady: Z,
40
- onAfterValueChanged: $,
41
- highlightEditableCells: U = !0,
42
- highlightChangedCells: k = !0,
43
- loading: Be,
31
+ useDataUrl: k,
32
+ onSelect: J,
33
+ onRowClick: K,
34
+ onRowAdd: Q,
35
+ onRowDelete: X,
36
+ onRowUndelete: Z,
37
+ onRowChange: $,
38
+ onClickButton: U,
39
+ onSave: ee,
40
+ onReady: re,
41
+ onAfterValueChanged: te,
42
+ columnEditRules: f,
43
+ highlightEditableCells: ne = !0,
44
+ highlightChangedCells: oe = !0,
45
+ loading: xe,
44
46
  showLoading: o = !0
45
47
  }) => {
46
- const { t: Ie } = Pe(), i = e(null), ee = e(null), re = e(null), L = e(null), O = e(w), te = e(n), ne = e({
47
- onSelect: W,
48
- onRowClick: z,
49
- onRowAdd: Y,
50
- onRowDelete: h,
51
- onRowUndelete: J,
52
- onRowChange: K,
53
- onClickButton: Q,
54
- onSave: X,
55
- onReady: Z,
56
- onAfterValueChanged: $
57
- }), l = e(void 0), _ = e(!1), G = e(void 0), D = e(void 0), Ee = e(!1), f = e(0), c = e(null), p = e(void 0), m = e(void 0), oe = e(U), ie = e(k), [A, we] = S(!1), [Le, y] = S(!1), [Oe, se] = S(!1), b = Ve(), ue = e(b.id), _e = o && n !== void 0 && A && D.current !== n, N = o && Be === !0 || o && (Le || _e), P = !N && n !== void 0 && E(n) && !Oe, ae = /* @__PURE__ */ a((t) => {
58
- se(ve(t));
48
+ const { t: C } = je(), i = e(null), ie = e(null), se = e(null), A = e(null), _ = e(O), ue = e(n), H = e(
49
+ f
50
+ ), x = e(
51
+ Le(f, {
52
+ hourMinuteInvalidText: C("Message.시간은 HH:mm 형식으로 입력해주세요.")
53
+ })
54
+ ), ae = e({
55
+ onSelect: J,
56
+ onRowClick: K,
57
+ onRowAdd: Q,
58
+ onRowDelete: X,
59
+ onRowUndelete: Z,
60
+ onRowChange: $,
61
+ onClickButton: U,
62
+ onSave: ee,
63
+ onReady: re,
64
+ onAfterValueChanged: te
65
+ }), p = e(void 0), N = e(!1), D = e(void 0), g = e(void 0), b = e(
66
+ void 0
67
+ ), ce = e($e()), Ne = e(!1), m = e(0), c = e(null), R = e(void 0), y = e(void 0), de = e(ne), le = e(oe), [P, Pe] = F(!1), [Me, v] = F(!1), [Ve, fe] = F(!1), E = Fe(), pe = e(E.id), Se = o && n !== void 0 && P && g.current !== n, M = o && xe === !0 || o && (Me || Se), V = !M && n !== void 0 && w(n) && !Ve, me = /* @__PURE__ */ a((t) => {
68
+ fe(Ie(t));
59
69
  }, "syncHasDisplayDataRows");
60
- O.current = w, te.current = n, oe.current = U, ie.current = k, ne.current = {
61
- onSelect: W,
62
- onRowClick: z,
63
- onRowAdd: Y,
64
- onRowDelete: h,
65
- onRowUndelete: J,
66
- onRowChange: K,
67
- onClickButton: Q,
68
- onSave: X,
69
- onReady: Z,
70
- onAfterValueChanged: $
70
+ _.current = O, ue.current = n, H.current = f, x.current = Le(f, {
71
+ hourMinuteInvalidText: C("Message.시간은 HH:mm 형식으로 입력해주세요.")
72
+ }), de.current = ne, le.current = oe, ae.current = {
73
+ onSelect: J,
74
+ onRowClick: K,
75
+ onRowAdd: Q,
76
+ onRowDelete: X,
77
+ onRowUndelete: Z,
78
+ onRowChange: $,
79
+ onClickButton: U,
80
+ onSave: ee,
81
+ onReady: re,
82
+ onAfterValueChanged: te
71
83
  };
72
- const ce = He({
73
- visible: N || P,
74
- containerRef: ee,
84
+ const Re = ze({
85
+ visible: M || V,
86
+ containerRef: ie,
75
87
  treeGridInstanceRef: i,
76
88
  debugId: r
77
- }), g = /* @__PURE__ */ a(() => {
78
- p.current !== void 0 && (window.clearTimeout(p.current), p.current = void 0);
79
- }, "clearBindingLoadingHideTimeout"), V = /* @__PURE__ */ a(() => {
80
- m.current !== void 0 && (window.clearTimeout(m.current), m.current = void 0);
89
+ }), B = /* @__PURE__ */ a(() => {
90
+ R.current !== void 0 && (window.clearTimeout(R.current), R.current = void 0);
91
+ }, "clearBindingLoadingHideTimeout"), S = /* @__PURE__ */ a(() => {
92
+ y.current !== void 0 && (window.clearTimeout(y.current), y.current = void 0);
81
93
  }, "clearBodyReloadStartTimeout");
82
- I(() => {
94
+ L(() => {
83
95
  const t = /* @__PURE__ */ a((s) => {
84
- var v;
85
- ((v = s.detail) == null ? void 0 : v.gridId) === r && se(ve(i.current));
96
+ var d;
97
+ ((d = s.detail) == null ? void 0 : d.gridId) === r && fe(Ie(i.current));
86
98
  }, "handleBodyRowsChanged");
87
- return window.addEventListener(pe, t), () => {
88
- window.removeEventListener(pe, t);
99
+ return window.addEventListener(ge, t), () => {
100
+ window.removeEventListener(ge, t);
89
101
  };
90
- }, [r]), I(() => {
91
- o || (V(), g(), c.current = null, y(!1));
92
- }, [o]), I(() => {
102
+ }, [r]), L(() => {
103
+ o || (S(), B(), c.current = null, v(!1));
104
+ }, [o]), L(() => {
93
105
  var t;
94
- if (b.id !== ue.current && !E(i.current) && ((t = i.current) == null || t.Dispose(), i.current = null, ue.current = b.id), !!E(i.current))
95
- return Ce({
106
+ if (E.id !== pe.current && !w(i.current) && ((t = i.current) == null || t.Dispose(), i.current = null, pe.current = E.id), !!w(i.current))
107
+ return Ye({
96
108
  id: r,
97
- latestEventHandlersRef: ne,
98
- highlightEditableCellsRef: oe,
99
- highlightChangedCellsRef: ie,
109
+ latestEventHandlersRef: ae,
110
+ highlightEditableCellsRef: de,
111
+ highlightChangedCellsRef: le,
100
112
  treeGridInstanceRef: i,
101
- treeGridInitStartedAtRef: re,
102
- latestLayoutOverridesRef: O,
103
- appliedLayoutOverridesRef: G,
104
- appliedBodyDataPropRef: D,
105
- hasAppliedInitialLayoutRef: Ee,
106
- syncHasDisplayDataRows: ae,
107
- setIsTreeGridReady: we
108
- }), re.current = C(), me(r, "init"), ye(r, "TreeGrid init start", {
109
- useDataUrl: !!F,
110
- bodyRowCount: M(n)
113
+ treeGridInitStartedAtRef: se,
114
+ latestLayoutOverridesRef: _,
115
+ appliedLayoutOverridesRef: D,
116
+ appliedBodyDataPropRef: g,
117
+ latestColumnEditRulesRef: H,
118
+ latestColumnEditRuleLookupRef: x,
119
+ appliedColumnEditRulesRef: b,
120
+ columnEditRulesStateRef: ce,
121
+ hasAppliedInitialLayoutRef: Ne,
122
+ syncHasDisplayDataRows: me,
123
+ setIsTreeGridReady: Pe
124
+ }), se.current = j(), be(r, "init"), Ee(r, "TreeGrid init start", {
125
+ useDataUrl: !!k,
126
+ bodyRowCount: W(n)
111
127
  }), window.TreeGrid(
112
- Se({
128
+ ke({
113
129
  id: r,
114
- layoutUrl: be,
115
- dataUrl: ge,
130
+ layoutUrl: _e,
131
+ dataUrl: He,
116
132
  bodyData: n,
117
- useDataUrl: F,
118
- width: j,
119
- height: q,
120
- languageId: b.id
133
+ useDataUrl: k,
134
+ width: Y,
135
+ height: z,
136
+ languageId: E.id
121
137
  }),
122
138
  r,
123
139
  r
124
140
  ), () => {
125
- ze(() => {
141
+ er(() => {
126
142
  var s;
127
143
  (s = i.current) == null || s.Dispose();
128
144
  }, 200);
129
145
  };
130
- }, []), xe(() => {
131
- const t = i.current, s = O.current, R = te.current;
132
- if (E(t) || !A)
146
+ }, []), We(() => {
147
+ const t = i.current, s = _.current, T = ue.current, d = H.current;
148
+ if (w(t) || !P)
133
149
  return;
134
- const v = G.current !== s && !Ye(G.current, s), B = D.current !== R && (!_.current || l.current !== R);
135
- if (!(!v && !B)) {
136
- if (v) {
137
- const d = C();
138
- je(t, s, B), G.current = s, Re(r, "apply layout", d, {
139
- disableBodyReload: !!B
150
+ const ye = D.current !== s && !we(D.current, s), I = g.current !== T && (!N.current || p.current !== T), ve = b.current !== d && !we(b.current, d);
151
+ if (!(!ye && !I && !ve)) {
152
+ if (ye) {
153
+ const l = j();
154
+ Qe(t, s, I), D.current = s, Be(r, "apply layout", l, {
155
+ disableBodyReload: !!I
140
156
  });
141
157
  }
142
- if (B) {
143
- const d = f.current + 1, de = /* @__PURE__ */ a(() => {
144
- const T = l.current;
145
- m.current = void 0, L.current = C(), me(r, "reload"), ye(r, "ReloadBody start", {
146
- bodyRowCount: M(T)
147
- }), Me(t, T, () => {
148
- if (f.current !== d)
158
+ if (I) {
159
+ const l = m.current + 1, Te = /* @__PURE__ */ a(() => {
160
+ const G = p.current;
161
+ y.current = void 0, A.current = j(), be(r, "reload"), Ee(r, "ReloadBody start", {
162
+ bodyRowCount: W(G)
163
+ }), Je(t, G, () => {
164
+ if (m.current !== l)
149
165
  return;
150
- D.current = T, ae(t), Re(r, "ReloadBody end", L.current, {
151
- bodyRowCount: M(T)
152
- }), L.current = null, l.current === T && (l.current = void 0, _.current = !1);
153
- const le = c.current;
154
- if (!o || le === null) {
155
- c.current = null, y(!1);
166
+ g.current = G, me(t), Be(r, "ReloadBody end", A.current, {
167
+ bodyRowCount: W(G)
168
+ }), A.current = null, p.current === G && (p.current = void 0, N.current = !1);
169
+ const Ge = c.current;
170
+ if (!o || Ge === null) {
171
+ c.current = null, v(!1);
156
172
  return;
157
173
  }
158
- const fe = Math.max(
174
+ const De = Math.max(
159
175
  0,
160
- qe - (Date.now() - le)
176
+ Ke - (Date.now() - Ge)
161
177
  );
162
- if (g(), fe === 0) {
163
- c.current = null, y(!1);
178
+ if (B(), De === 0) {
179
+ c.current = null, v(!1);
164
180
  return;
165
181
  }
166
- p.current = window.setTimeout(() => {
167
- f.current === d && (p.current = void 0, c.current = null, y(!1));
168
- }, fe);
182
+ R.current = window.setTimeout(() => {
183
+ m.current === l && (R.current = void 0, c.current = null, v(!1));
184
+ }, De);
169
185
  });
170
186
  }, "runBodyReload");
171
- f.current = d, l.current = R, _.current = !0, o && R !== void 0 ? (V(), g(), c.current = Date.now(), y(!0), m.current = window.setTimeout(() => {
172
- f.current === d && de();
173
- }, 0)) : de();
187
+ m.current = l, p.current = T, N.current = !0, o && T !== void 0 ? (S(), B(), c.current = Date.now(), v(!0), y.current = window.setTimeout(() => {
188
+ m.current === l && Te();
189
+ }, 0)) : Te();
174
190
  }
191
+ ve && (Ue(
192
+ t,
193
+ x.current,
194
+ ce.current
195
+ ), b.current = d);
175
196
  }
176
- }, [A, w, n, o, r]), I(() => () => {
177
- V(), g();
197
+ }, [P, O, n, f, o, r]), L(() => () => {
198
+ S(), B();
178
199
  }, []);
179
- const x = {
180
- height: q,
181
- width: j,
200
+ const h = {
201
+ height: z,
202
+ width: Y,
182
203
  ...u
183
204
  };
184
- return (o || P) && (x.position = u != null && u.position && u.position !== "static" ? u.position : "relative", x.isolation = "isolate"), /* @__PURE__ */ Ne("div", { ref: ee, className: Te, style: x, children: [
185
- /* @__PURE__ */ H("div", { id: r, className: Ge, style: he(De, ["height", "width"]) }),
186
- /* @__PURE__ */ H(
187
- We,
205
+ return (o || V) && (h.position = u != null && u.position && u.position !== "static" ? u.position : "relative", h.isolation = "isolate"), /* @__PURE__ */ qe("div", { ref: ie, className: Oe, style: h, children: [
206
+ /* @__PURE__ */ q("div", { id: r, className: Ce, style: rr(Ae, ["height", "width"]) }),
207
+ /* @__PURE__ */ q(
208
+ Ze,
188
209
  {
189
- visible: P,
190
- message: Ie("Message.조회된 결과가 없습니다."),
191
- overlayFrame: ce
210
+ visible: V,
211
+ message: C("Message.조회된 결과가 없습니다."),
212
+ overlayFrame: Re
192
213
  }
193
214
  ),
194
- /* @__PURE__ */ H(Fe, { visible: N, overlayFrame: ce })
215
+ /* @__PURE__ */ q(Xe, { visible: M, overlayFrame: Re })
195
216
  ] });
196
217
  }, "OwpTreeGrid");
197
218
  export {
198
- cr as OwpTreeGrid
219
+ Dr as OwpTreeGrid
199
220
  };
200
221
  //# sourceMappingURL=OwpTreeGrid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\nimport { delay, isEmpty, isEqual, omit } from 'es-toolkit/compat';\n// Temporary TreeGrid perf instrumentation import. Remove with ./utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n logTreeGridPerf,\n measureTreeGridPerf,\n} from './utils/perf';\nimport {\n type CSSProperties,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useOwpTreeGridOverlayFrame } from './hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\n hasTreeGridDisplayDataRows,\n replaceTreeGridBodyData,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,\n type TreeGridEventHandlers,\n} from './internal/treeGridRuntime';\nimport { applyTreeGridLayoutToGrid } from './internal/treeGridLayout';\nimport { OwpTreeGridLoadingOverlay } from './internal/OwpTreeGridLoadingOverlay';\nimport { OwpTreeGridNoDataOverlay } from './internal/OwpTreeGridNoDataOverlay';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\n\nexport interface OwpTreeGridLayout {\n Header?: TreeGridLayoutFields;\n Toolbar?: TreeGridSectionFields;\n Foot?: TreeGridSectionFields;\n}\n\nexport type OwpTreeGridLayoutConfig = OwpTreeGridLayout;\nexport type THeader = OwpTreeGridLayoutConfig;\nexport type OwpTreeGridBodyData<T> = Record<string, never> | [] | undefined | T[];\nexport type OwpTreeGridData<T> = OwpTreeGridBodyData<T>;\nexport type TData<T> = OwpTreeGridBodyData<T>;\nexport type OwpTreeGridRowModel<T> = TRow & T;\nexport type OwpTreeGridSelectedRows<T> = OwpTreeGridRowModel<T>[];\n\ntype OwpTreeGridSelectHandler<T> = (selectedRows: OwpTreeGridSelectedRows<T>) => void;\ntype OwpTreeGridRowAddHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridRowDeleteHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n deleteType: number,\n) => void;\ntype OwpTreeGridRowUndeleteHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridButtonClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n event: Event,\n) => void;\ntype OwpTreeGridRowClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n x: number,\n y: number,\n event: Event,\n) => void;\ntype OwpTreeGridSaveHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n autoupdate: boolean | number,\n) => void;\ntype OwpTreeGridCellValue = unknown;\ntype OwpTreeGridAfterValueChangedHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: OwpTreeGridCellValue,\n) => void;\n\nexport interface OwpTreeGridProps<T> {\n id: string;\n className?: string;\n containerStyle?: CSSProperties;\n containerClassName?: string;\n layoutUrl?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n useDataUrl?: boolean;\n onSelect?: OwpTreeGridSelectHandler<T>;\n onRowAdd?: OwpTreeGridRowAddHandler<T>;\n onRowDelete?: OwpTreeGridRowDeleteHandler<T>;\n onRowUndelete?: OwpTreeGridRowUndeleteHandler<T>;\n onRowChange?: OwpTreeGridAfterValueChangedHandler<T>;\n onClickButton?: OwpTreeGridButtonClickHandler<T>;\n onReady?: (grid: TGrid) => void;\n onRowClick?: OwpTreeGridRowClickHandler<T>;\n onSave?: OwpTreeGridSaveHandler<T>;\n onAfterValueChanged?: OwpTreeGridAfterValueChangedHandler<T>;\n highlightEditableCells?: boolean;\n highlightChangedCells?: boolean;\n loading?: boolean;\n showLoading?: boolean;\n}\n\n/**\n * OwpTreeGrid 컴포넌트\n * @param id 식별자\n * @param containerStyle containerStyle 값\n * @param containerClassName containerClassName 값\n * @param className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n className,\n style,\n height = '100%',\n width = '100%',\n layoutUrl,\n dataUrl,\n layoutOverrides,\n data,\n useDataUrl,\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n highlightEditableCells = true,\n highlightChangedCells = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const treeGridInstanceRef = useRef<TGrid>(null);\n const treeGridContainerRef = useRef<HTMLDivElement | null>(null);\n const treeGridInitStartedAtRef = useRef<number | null>(null);\n const bodyReloadStartedAtRef = useRef<number | null>(null);\n const latestLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(layoutOverrides);\n const latestBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(data);\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n });\n const stagedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasStagedBodyDataPropRef = useRef(false);\n const appliedLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(undefined);\n const appliedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasAppliedInitialLayoutRef = useRef(false);\n const bodyReloadSequenceRef = useRef(0);\n const bindingLoadingStartedAtRef = useRef<number | null>(null);\n const bindingLoadingHideTimeoutRef = useRef<number | undefined>(undefined);\n const bodyReloadStartTimeoutRef = useRef<number | undefined>(undefined);\n const highlightEditableCellsRef = useRef(highlightEditableCells);\n const highlightChangedCellsRef = useRef(highlightChangedCells);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const currentLanguageIdRef = useRef(currentLanguage.id);\n const isPendingBodyReload =\n showLoading &&\n data !== undefined &&\n isTreeGridReady &&\n appliedBodyDataPropRef.current !== data;\n const isInternalLoadingVisible = showLoading && (isBindingLoadingVisible || isPendingBodyReload);\n const isLoadingOverlayVisible = (showLoading && loading === true) || isInternalLoadingVisible;\n const isNoDataVisible =\n !isLoadingOverlayVisible && data !== undefined && isEmpty(data) && !hasDisplayDataRows;\n\n const syncHasDisplayDataRows = (grid: TGrid | null) => {\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(grid));\n };\n\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n highlightEditableCellsRef.current = highlightEditableCells;\n highlightChangedCellsRef.current = highlightChangedCells;\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n };\n\n const overlayFrame = useOwpTreeGridOverlayFrame({\n visible: isLoadingOverlayVisible || isNoDataVisible,\n containerRef: treeGridContainerRef,\n treeGridInstanceRef,\n debugId: id,\n });\n\n const clearBindingLoadingHideTimeout = () => {\n if (bindingLoadingHideTimeoutRef.current !== undefined) {\n window.clearTimeout(bindingLoadingHideTimeoutRef.current);\n bindingLoadingHideTimeoutRef.current = undefined;\n }\n };\n\n const clearBodyReloadStartTimeout = () => {\n if (bodyReloadStartTimeoutRef.current !== undefined) {\n window.clearTimeout(bodyReloadStartTimeoutRef.current);\n bodyReloadStartTimeoutRef.current = undefined;\n }\n };\n\n useEffect(() => {\n const handleBodyRowsChanged = (event: Event) => {\n const customEvent = event as CustomEvent<TreeGridBodyRowsChangedEventDetail>;\n\n if (customEvent.detail?.gridId !== id) {\n return;\n }\n\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(treeGridInstanceRef.current));\n };\n\n window.addEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n\n return () => {\n window.removeEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n };\n }, [id]);\n\n useEffect(() => {\n if (!showLoading) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }\n }, [showLoading]);\n\n useEffect(() => {\n if (\n currentLanguage.id !== currentLanguageIdRef.current &&\n !isEmpty(treeGridInstanceRef.current)\n ) {\n treeGridInstanceRef.current?.Dispose();\n treeGridInstanceRef.current = null;\n currentLanguageIdRef.current = currentLanguage.id;\n }\n\n if (!isEmpty(treeGridInstanceRef.current)) {\n return;\n }\n\n bindTreeGridEvents({\n id,\n latestEventHandlersRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n });\n\n treeGridInitStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'init');\n logTreeGridPerf(id, 'TreeGrid init start', {\n useDataUrl: Boolean(useDataUrl),\n bodyRowCount: getTreeGridBodyDataCount(data),\n });\n\n window.TreeGrid(\n buildTreeGridInitializationOptions({\n id,\n layoutUrl,\n dataUrl,\n bodyData: data,\n useDataUrl,\n width,\n height,\n languageId: currentLanguage.id,\n }),\n id,\n id,\n );\n\n return () => {\n delay(() => {\n treeGridInstanceRef.current?.Dispose();\n }, 200);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n const treeGrid = treeGridInstanceRef.current;\n const nextLayoutOverrides = latestLayoutOverridesRef.current;\n const nextBodyData = latestBodyDataPropRef.current;\n\n if (isEmpty(treeGrid) || !isTreeGridReady) {\n return;\n }\n\n const shouldApplyLayoutOverrides =\n appliedLayoutOverridesRef.current !== nextLayoutOverrides &&\n !isEqual(appliedLayoutOverridesRef.current, nextLayoutOverrides);\n const shouldApplyBodyData =\n appliedBodyDataPropRef.current !== nextBodyData &&\n (!hasStagedBodyDataPropRef.current || stagedBodyDataPropRef.current !== nextBodyData);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData) {\n return;\n }\n\n if (shouldApplyLayoutOverrides) {\n const layoutApplyStartedAt = getTreeGridPerfTimestamp();\n\n applyTreeGridLayoutToGrid(treeGrid, nextLayoutOverrides, shouldApplyBodyData);\n appliedLayoutOverridesRef.current = nextLayoutOverrides;\n measureTreeGridPerf(id, 'apply layout', layoutApplyStartedAt, {\n disableBodyReload: Boolean(shouldApplyBodyData),\n });\n }\n\n if (shouldApplyBodyData) {\n const reloadSequence = bodyReloadSequenceRef.current + 1;\n const runBodyReload = () => {\n const bodyDataToApply = stagedBodyDataPropRef.current;\n\n bodyReloadStartTimeoutRef.current = undefined;\n bodyReloadStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'reload');\n logTreeGridPerf(id, 'ReloadBody start', {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n\n replaceTreeGridBodyData(treeGrid, bodyDataToApply, () => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n appliedBodyDataPropRef.current = bodyDataToApply;\n syncHasDisplayDataRows(treeGrid);\n measureTreeGridPerf(id, 'ReloadBody end', bodyReloadStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n bodyReloadStartedAtRef.current = null;\n\n if (stagedBodyDataPropRef.current === bodyDataToApply) {\n stagedBodyDataPropRef.current = undefined;\n hasStagedBodyDataPropRef.current = false;\n }\n\n const startedAt = bindingLoadingStartedAtRef.current;\n\n if (!showLoading || startedAt === null) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n const remainingVisibleTime = Math.max(\n 0,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS - (Date.now() - startedAt),\n );\n\n clearBindingLoadingHideTimeout();\n\n if (remainingVisibleTime === 0) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = undefined;\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }, remainingVisibleTime);\n });\n };\n\n bodyReloadSequenceRef.current = reloadSequence;\n stagedBodyDataPropRef.current = nextBodyData;\n hasStagedBodyDataPropRef.current = true;\n\n if (showLoading && nextBodyData !== undefined) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = Date.now();\n setIsBindingLoadingVisible(true);\n bodyReloadStartTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n runBodyReload();\n }, 0);\n } else {\n runBodyReload();\n }\n }\n }, [isTreeGridReady, layoutOverrides, data, showLoading, id]);\n\n useEffect(() => {\n return () => {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n };\n }, []);\n\n const resolvedContainerStyle: CSSProperties = {\n height,\n width,\n ...containerStyle,\n };\n\n if (showLoading || isNoDataVisible) {\n resolvedContainerStyle.position =\n containerStyle?.position && containerStyle.position !== 'static'\n ? containerStyle.position\n : 'relative';\n resolvedContainerStyle.isolation = 'isolate';\n }\n\n return (\n <div ref={treeGridContainerRef} className={containerClassName} style={resolvedContainerStyle}>\n <div id={id} className={className} style={omit(style, ['height', 'width'])} />\n <OwpTreeGridNoDataOverlay\n visible={isNoDataVisible}\n message={t('Message.조회된 결과가 없습니다.')}\n overlayFrame={overlayFrame}\n />\n <OwpTreeGridLoadingOverlay visible={isLoadingOverlayVisible} overlayFrame={overlayFrame} />\n </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["OwpTreeGrid","__name","id","containerStyle","containerClassName","className","style","height","width","layoutUrl","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","highlightEditableCells","highlightChangedCells","loading","showLoading","t","useOwpTranslation","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","grid","hasTreeGridDisplayDataRows","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","_a","TREE_GRID_BODY_ROWS_CHANGED_EVENT","bindTreeGridEvents","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","getTreeGridBodyDataCount","buildTreeGridInitializationOptions","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","layoutApplyStartedAt","applyTreeGridLayoutToGrid","measureTreeGridPerf","reloadSequence","runBodyReload","bodyDataToApply","replaceTreeGridBodyData","startedAt","remainingVisibleTime","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","resolvedContainerStyle","jsx","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
1
+ {"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\nimport { delay, isEmpty, isEqual, omit } from 'es-toolkit/compat';\n// Temporary TreeGrid perf instrumentation import. Remove with ./internal/utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n logTreeGridPerf,\n measureTreeGridPerf,\n} from './internal/utils/perf';\nimport {\n type CSSProperties,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useOwpTreeGridOverlayFrame } from './internal/hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\n hasTreeGridDisplayDataRows,\n replaceTreeGridBodyData,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,\n type TreeGridEventHandlers,\n} from './internal/treeGridRuntime';\nimport { applyTreeGridLayoutToGrid } from './internal/treeGridLayout';\nimport { OwpTreeGridLoadingOverlay } from './internal/OwpTreeGridLoadingOverlay';\nimport { OwpTreeGridNoDataOverlay } from './internal/OwpTreeGridNoDataOverlay';\nimport {\n createTreeGridColumnEditRulesState,\n resolveTreeGridColumnEditRuleLookup,\n syncTreeGridColumnEditRules,\n} from './internal/treeGridColumnEditRules';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\n\nexport interface OwpTreeGridLayout {\n Header?: TreeGridLayoutFields;\n Toolbar?: TreeGridSectionFields;\n Foot?: TreeGridSectionFields;\n}\n\nexport type OwpTreeGridLayoutConfig = OwpTreeGridLayout;\nexport type THeader = OwpTreeGridLayoutConfig;\nexport type OwpTreeGridBodyData<T> = Record<string, never> | [] | undefined | T[];\nexport type OwpTreeGridData<T> = OwpTreeGridBodyData<T>;\nexport type TData<T> = OwpTreeGridBodyData<T>;\nexport type OwpTreeGridRowModel<T> = TRow & T;\nexport type OwpTreeGridSelectedRows<T> = OwpTreeGridRowModel<T>[];\nexport type OwpTreeGridColumnEditPreset = 'hourMinute';\n\nexport interface OwpTreeGridColumnEditRule {\n columns: readonly string[];\n preset: OwpTreeGridColumnEditPreset;\n}\n\ntype OwpTreeGridSelectHandler<T> = (selectedRows: OwpTreeGridSelectedRows<T>) => void;\ntype OwpTreeGridRowAddHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridRowDeleteHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n deleteType: number,\n) => void;\ntype OwpTreeGridRowUndeleteHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridButtonClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n event: Event,\n) => void;\ntype OwpTreeGridRowClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n x: number,\n y: number,\n event: Event,\n) => void;\ntype OwpTreeGridSaveHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n autoupdate: boolean | number,\n) => void;\ntype OwpTreeGridCellValue = unknown;\ntype OwpTreeGridAfterValueChangedHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: OwpTreeGridCellValue,\n) => void;\n\nexport interface OwpTreeGridProps<T> {\n id: string;\n className?: string;\n containerStyle?: CSSProperties;\n containerClassName?: string;\n layoutUrl?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n useDataUrl?: boolean;\n onSelect?: OwpTreeGridSelectHandler<T>;\n onRowAdd?: OwpTreeGridRowAddHandler<T>;\n onRowDelete?: OwpTreeGridRowDeleteHandler<T>;\n onRowUndelete?: OwpTreeGridRowUndeleteHandler<T>;\n onRowChange?: OwpTreeGridAfterValueChangedHandler<T>;\n onClickButton?: OwpTreeGridButtonClickHandler<T>;\n onReady?: (grid: TGrid) => void;\n onRowClick?: OwpTreeGridRowClickHandler<T>;\n onSave?: OwpTreeGridSaveHandler<T>;\n onAfterValueChanged?: OwpTreeGridAfterValueChangedHandler<T>;\n columnEditRules?: readonly OwpTreeGridColumnEditRule[];\n highlightEditableCells?: boolean;\n highlightChangedCells?: boolean;\n loading?: boolean;\n showLoading?: boolean;\n}\n\n/**\n * OwpTreeGrid 컴포넌트\n * @param id 식별자\n * @param containerStyle containerStyle 값\n * @param containerClassName containerClassName 값\n * @param className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n className,\n style,\n height = '100%',\n width = '100%',\n layoutUrl,\n dataUrl,\n layoutOverrides,\n data,\n useDataUrl,\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n columnEditRules,\n highlightEditableCells = true,\n highlightChangedCells = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const treeGridInstanceRef = useRef<TGrid>(null);\n const treeGridContainerRef = useRef<HTMLDivElement | null>(null);\n const treeGridInitStartedAtRef = useRef<number | null>(null);\n const bodyReloadStartedAtRef = useRef<number | null>(null);\n const latestLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(layoutOverrides);\n const latestBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(data);\n const latestColumnEditRulesRef = useRef<readonly OwpTreeGridColumnEditRule[] | undefined>(\n columnEditRules,\n );\n const latestColumnEditRuleLookupRef = useRef(\n resolveTreeGridColumnEditRuleLookup(columnEditRules, {\n hourMinuteInvalidText: t('Message.시간은 HH:mm 형식으로 입력해주세요.'),\n }),\n );\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n });\n const stagedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasStagedBodyDataPropRef = useRef(false);\n const appliedLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(undefined);\n const appliedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const appliedColumnEditRulesRef = useRef<readonly OwpTreeGridColumnEditRule[] | undefined>(\n undefined,\n );\n const columnEditRulesStateRef = useRef(createTreeGridColumnEditRulesState());\n const hasAppliedInitialLayoutRef = useRef(false);\n const bodyReloadSequenceRef = useRef(0);\n const bindingLoadingStartedAtRef = useRef<number | null>(null);\n const bindingLoadingHideTimeoutRef = useRef<number | undefined>(undefined);\n const bodyReloadStartTimeoutRef = useRef<number | undefined>(undefined);\n const highlightEditableCellsRef = useRef(highlightEditableCells);\n const highlightChangedCellsRef = useRef(highlightChangedCells);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const currentLanguageIdRef = useRef(currentLanguage.id);\n const isPendingBodyReload =\n showLoading &&\n data !== undefined &&\n isTreeGridReady &&\n appliedBodyDataPropRef.current !== data;\n const isInternalLoadingVisible = showLoading && (isBindingLoadingVisible || isPendingBodyReload);\n const isLoadingOverlayVisible = (showLoading && loading === true) || isInternalLoadingVisible;\n const isNoDataVisible =\n !isLoadingOverlayVisible && data !== undefined && isEmpty(data) && !hasDisplayDataRows;\n\n const syncHasDisplayDataRows = (grid: TGrid | null) => {\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(grid));\n };\n\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n latestColumnEditRulesRef.current = columnEditRules;\n latestColumnEditRuleLookupRef.current = resolveTreeGridColumnEditRuleLookup(columnEditRules, {\n hourMinuteInvalidText: t('Message.시간은 HH:mm 형식으로 입력해주세요.'),\n });\n highlightEditableCellsRef.current = highlightEditableCells;\n highlightChangedCellsRef.current = highlightChangedCells;\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n };\n\n const overlayFrame = useOwpTreeGridOverlayFrame({\n visible: isLoadingOverlayVisible || isNoDataVisible,\n containerRef: treeGridContainerRef,\n treeGridInstanceRef,\n debugId: id,\n });\n\n const clearBindingLoadingHideTimeout = () => {\n if (bindingLoadingHideTimeoutRef.current !== undefined) {\n window.clearTimeout(bindingLoadingHideTimeoutRef.current);\n bindingLoadingHideTimeoutRef.current = undefined;\n }\n };\n\n const clearBodyReloadStartTimeout = () => {\n if (bodyReloadStartTimeoutRef.current !== undefined) {\n window.clearTimeout(bodyReloadStartTimeoutRef.current);\n bodyReloadStartTimeoutRef.current = undefined;\n }\n };\n\n useEffect(() => {\n const handleBodyRowsChanged = (event: Event) => {\n const customEvent = event as CustomEvent<TreeGridBodyRowsChangedEventDetail>;\n\n if (customEvent.detail?.gridId !== id) {\n return;\n }\n\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(treeGridInstanceRef.current));\n };\n\n window.addEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n\n return () => {\n window.removeEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n };\n }, [id]);\n\n useEffect(() => {\n if (!showLoading) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }\n }, [showLoading]);\n\n useEffect(() => {\n if (\n currentLanguage.id !== currentLanguageIdRef.current &&\n !isEmpty(treeGridInstanceRef.current)\n ) {\n treeGridInstanceRef.current?.Dispose();\n treeGridInstanceRef.current = null;\n currentLanguageIdRef.current = currentLanguage.id;\n }\n\n if (!isEmpty(treeGridInstanceRef.current)) {\n return;\n }\n\n bindTreeGridEvents({\n id,\n latestEventHandlersRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n latestColumnEditRulesRef,\n latestColumnEditRuleLookupRef,\n appliedColumnEditRulesRef,\n columnEditRulesStateRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n });\n\n treeGridInitStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'init');\n logTreeGridPerf(id, 'TreeGrid init start', {\n useDataUrl: Boolean(useDataUrl),\n bodyRowCount: getTreeGridBodyDataCount(data),\n });\n\n window.TreeGrid(\n buildTreeGridInitializationOptions({\n id,\n layoutUrl,\n dataUrl,\n bodyData: data,\n useDataUrl,\n width,\n height,\n languageId: currentLanguage.id,\n }),\n id,\n id,\n );\n\n return () => {\n delay(() => {\n treeGridInstanceRef.current?.Dispose();\n }, 200);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n const treeGrid = treeGridInstanceRef.current;\n const nextLayoutOverrides = latestLayoutOverridesRef.current;\n const nextBodyData = latestBodyDataPropRef.current;\n const nextColumnEditRules = latestColumnEditRulesRef.current;\n\n if (isEmpty(treeGrid) || !isTreeGridReady) {\n return;\n }\n\n const shouldApplyLayoutOverrides =\n appliedLayoutOverridesRef.current !== nextLayoutOverrides &&\n !isEqual(appliedLayoutOverridesRef.current, nextLayoutOverrides);\n const shouldApplyBodyData =\n appliedBodyDataPropRef.current !== nextBodyData &&\n (!hasStagedBodyDataPropRef.current || stagedBodyDataPropRef.current !== nextBodyData);\n const shouldApplyColumnEditRules =\n appliedColumnEditRulesRef.current !== nextColumnEditRules &&\n !isEqual(appliedColumnEditRulesRef.current, nextColumnEditRules);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData && !shouldApplyColumnEditRules) {\n return;\n }\n\n if (shouldApplyLayoutOverrides) {\n const layoutApplyStartedAt = getTreeGridPerfTimestamp();\n\n applyTreeGridLayoutToGrid(treeGrid, nextLayoutOverrides, shouldApplyBodyData);\n appliedLayoutOverridesRef.current = nextLayoutOverrides;\n measureTreeGridPerf(id, 'apply layout', layoutApplyStartedAt, {\n disableBodyReload: Boolean(shouldApplyBodyData),\n });\n }\n\n if (shouldApplyBodyData) {\n const reloadSequence = bodyReloadSequenceRef.current + 1;\n const runBodyReload = () => {\n const bodyDataToApply = stagedBodyDataPropRef.current;\n\n bodyReloadStartTimeoutRef.current = undefined;\n bodyReloadStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'reload');\n logTreeGridPerf(id, 'ReloadBody start', {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n\n replaceTreeGridBodyData(treeGrid, bodyDataToApply, () => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n appliedBodyDataPropRef.current = bodyDataToApply;\n syncHasDisplayDataRows(treeGrid);\n measureTreeGridPerf(id, 'ReloadBody end', bodyReloadStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n bodyReloadStartedAtRef.current = null;\n\n if (stagedBodyDataPropRef.current === bodyDataToApply) {\n stagedBodyDataPropRef.current = undefined;\n hasStagedBodyDataPropRef.current = false;\n }\n\n const startedAt = bindingLoadingStartedAtRef.current;\n\n if (!showLoading || startedAt === null) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n const remainingVisibleTime = Math.max(\n 0,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS - (Date.now() - startedAt),\n );\n\n clearBindingLoadingHideTimeout();\n\n if (remainingVisibleTime === 0) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = undefined;\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }, remainingVisibleTime);\n });\n };\n\n bodyReloadSequenceRef.current = reloadSequence;\n stagedBodyDataPropRef.current = nextBodyData;\n hasStagedBodyDataPropRef.current = true;\n\n if (showLoading && nextBodyData !== undefined) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = Date.now();\n setIsBindingLoadingVisible(true);\n bodyReloadStartTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n runBodyReload();\n }, 0);\n } else {\n runBodyReload();\n }\n }\n\n if (shouldApplyColumnEditRules) {\n syncTreeGridColumnEditRules(\n treeGrid,\n latestColumnEditRuleLookupRef.current,\n columnEditRulesStateRef.current,\n );\n appliedColumnEditRulesRef.current = nextColumnEditRules;\n }\n }, [isTreeGridReady, layoutOverrides, data, columnEditRules, showLoading, id]);\n\n useEffect(() => {\n return () => {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n };\n }, []);\n\n const resolvedContainerStyle: CSSProperties = {\n height,\n width,\n ...containerStyle,\n };\n\n if (showLoading || isNoDataVisible) {\n resolvedContainerStyle.position =\n containerStyle?.position && containerStyle.position !== 'static'\n ? containerStyle.position\n : 'relative';\n resolvedContainerStyle.isolation = 'isolate';\n }\n\n return (\n <div ref={treeGridContainerRef} className={containerClassName} style={resolvedContainerStyle}>\n <div id={id} className={className} style={omit(style, ['height', 'width'])} />\n <OwpTreeGridNoDataOverlay\n visible={isNoDataVisible}\n message={t('Message.조회된 결과가 없습니다.')}\n overlayFrame={overlayFrame}\n />\n <OwpTreeGridLoadingOverlay visible={isLoadingOverlayVisible} overlayFrame={overlayFrame} />\n </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["OwpTreeGrid","__name","id","containerStyle","containerClassName","className","style","height","width","layoutUrl","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","columnEditRules","highlightEditableCells","highlightChangedCells","loading","showLoading","t","useOwpTranslation","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","latestColumnEditRulesRef","latestColumnEditRuleLookupRef","resolveTreeGridColumnEditRuleLookup","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","appliedColumnEditRulesRef","columnEditRulesStateRef","createTreeGridColumnEditRulesState","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","grid","hasTreeGridDisplayDataRows","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","_a","TREE_GRID_BODY_ROWS_CHANGED_EVENT","bindTreeGridEvents","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","getTreeGridBodyDataCount","buildTreeGridInitializationOptions","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","nextColumnEditRules","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","shouldApplyColumnEditRules","layoutApplyStartedAt","applyTreeGridLayoutToGrid","measureTreeGridPerf","reloadSequence","runBodyReload","bodyDataToApply","replaceTreeGridBodyData","startedAt","remainingVisibleTime","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","syncTreeGridColumnEditRules","resolvedContainerStyle","jsx","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
@@ -2,7 +2,7 @@ var r = Object.defineProperty;
2
2
  var i = (e, t) => r(e, "name", { value: t, configurable: !0 });
3
3
  import { jsx as n } 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
4
  import o from "@mui/material/CircularProgress";
5
- import { TREE_GRID_LOADING_OVERLAY_Z_INDEX as s } from "../hooks/useOwpTreeGridOverlayFrame.js";
5
+ import { TREE_GRID_LOADING_OVERLAY_Z_INDEX as s } from "./hooks/useOwpTreeGridOverlayFrame.js";
6
6
  const c = /* @__PURE__ */ i(({ visible: e, overlayFrame: t }) => e ? /* @__PURE__ */ n(
7
7
  "div",
8
8
  {
@@ -1 +1 @@
1
- {"version":3,"file":"OwpTreeGridLoadingOverlay.js","sources":["../../../../src/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.tsx"],"sourcesContent":["import CircularProgress from '@mui/material/CircularProgress';\nimport {\n type OwpTreeGridOverlayFrame,\n TREE_GRID_LOADING_OVERLAY_Z_INDEX,\n} from '../hooks/useOwpTreeGridOverlayFrame';\n\ntype OwpTreeGridLoadingOverlayProps = {\n visible: boolean;\n overlayFrame: OwpTreeGridOverlayFrame;\n};\n\n/**\n * TreeGrid loading overlay\n */\nconst OwpTreeGridLoadingOverlay = ({ visible, overlayFrame }: OwpTreeGridLoadingOverlayProps) => {\n if (!visible) {\n return null;\n }\n\n return (\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: overlayFrame.left,\n top: overlayFrame.top,\n width: overlayFrame.width,\n height: overlayFrame.height,\n zIndex: TREE_GRID_LOADING_OVERLAY_Z_INDEX,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n <CircularProgress color=\"secondary\" size={44} thickness={3.6} />\n </div>\n );\n};\n\nexport { OwpTreeGridLoadingOverlay };\n"],"names":["OwpTreeGridLoadingOverlay","__name","visible","overlayFrame","jsx","TREE_GRID_LOADING_OVERLAY_Z_INDEX","CircularProgress"],"mappings":";;;;;AAcA,MAAMA,IAA4B,gBAAAC,EAAA,CAAC,EAAE,SAAAC,GAAS,cAAAC,QACvCD,IAKH,gBAAAE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAMD,EAAa;AAAA,MACnB,KAAKA,EAAa;AAAA,MAClB,OAAOA,EAAa;AAAA,MACpB,QAAQA,EAAa;AAAA,MACrB,QAAQE;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,eAAe;AAAA,IAAA;AAAA,IAGjB,4BAACC,GAAA,EAAiB,OAAM,aAAY,MAAM,IAAI,WAAW,IAAA,CAAK;AAAA,EAAA;AAAA,IAnBzD,MAFuB;"}
1
+ {"version":3,"file":"OwpTreeGridLoadingOverlay.js","sources":["../../../../src/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.tsx"],"sourcesContent":["import CircularProgress from '@mui/material/CircularProgress';\nimport {\n type OwpTreeGridOverlayFrame,\n TREE_GRID_LOADING_OVERLAY_Z_INDEX,\n} from './hooks/useOwpTreeGridOverlayFrame';\n\ntype OwpTreeGridLoadingOverlayProps = {\n visible: boolean;\n overlayFrame: OwpTreeGridOverlayFrame;\n};\n\n/**\n * TreeGrid loading overlay\n */\nconst OwpTreeGridLoadingOverlay = ({ visible, overlayFrame }: OwpTreeGridLoadingOverlayProps) => {\n if (!visible) {\n return null;\n }\n\n return (\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: overlayFrame.left,\n top: overlayFrame.top,\n width: overlayFrame.width,\n height: overlayFrame.height,\n zIndex: TREE_GRID_LOADING_OVERLAY_Z_INDEX,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n <CircularProgress color=\"secondary\" size={44} thickness={3.6} />\n </div>\n );\n};\n\nexport { OwpTreeGridLoadingOverlay };\n"],"names":["OwpTreeGridLoadingOverlay","__name","visible","overlayFrame","jsx","TREE_GRID_LOADING_OVERLAY_Z_INDEX","CircularProgress"],"mappings":";;;;;AAcA,MAAMA,IAA4B,gBAAAC,EAAA,CAAC,EAAE,SAAAC,GAAS,cAAAC,QACvCD,IAKH,gBAAAE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAMD,EAAa;AAAA,MACnB,KAAKA,EAAa;AAAA,MAClB,OAAOA,EAAa;AAAA,MACpB,QAAQA,EAAa;AAAA,MACrB,QAAQE;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,eAAe;AAAA,IAAA;AAAA,IAGjB,4BAACC,GAAA,EAAiB,OAAM,aAAY,MAAM,IAAI,WAAW,IAAA,CAAK;AAAA,EAAA;AAAA,IAnBzD,MAFuB;"}
@@ -2,7 +2,7 @@ var r = Object.defineProperty;
2
2
  var n = (e, i) => r(e, "name", { value: i, configurable: !0 });
3
3
  import { jsx as o } 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
4
  import p from "@mui/material/Typography";
5
- import { TREE_GRID_NO_DATA_OVERLAY_Z_INDEX as l } from "../hooks/useOwpTreeGridOverlayFrame.js";
5
+ import { TREE_GRID_NO_DATA_OVERLAY_Z_INDEX as l } from "./hooks/useOwpTreeGridOverlayFrame.js";
6
6
  const c = /* @__PURE__ */ n(({
7
7
  visible: e,
8
8
  message: i,
@@ -1 +1 @@
1
- {"version":3,"file":"OwpTreeGridNoDataOverlay.js","sources":["../../../../src/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.tsx"],"sourcesContent":["import Typography from '@mui/material/Typography';\nimport {\n type OwpTreeGridOverlayFrame,\n TREE_GRID_NO_DATA_OVERLAY_Z_INDEX,\n} from '../hooks/useOwpTreeGridOverlayFrame';\n\ntype OwpTreeGridNoDataOverlayProps = {\n visible: boolean;\n message: string;\n overlayFrame: OwpTreeGridOverlayFrame;\n};\n\n/**\n * TreeGrid no-data overlay\n * @param visible overlay visibility\n * @param message no-data message\n * @param overlayFrame overlay frame\n */\nconst OwpTreeGridNoDataOverlay = ({\n visible,\n message,\n overlayFrame,\n}: OwpTreeGridNoDataOverlayProps) => {\n if (!visible) {\n return null;\n }\n\n return (\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: overlayFrame.left,\n top: overlayFrame.top,\n width: overlayFrame.width,\n height: overlayFrame.height,\n zIndex: TREE_GRID_NO_DATA_OVERLAY_Z_INDEX,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n <Typography\n sx={{\n color: '#111112',\n fontFamily: 'RobotoLight, sans-serif',\n fontSize: '14px',\n lineHeight: '16px',\n letterSpacing: '0.04em',\n }}\n >\n {message}\n </Typography>\n </div>\n );\n};\n\nexport { OwpTreeGridNoDataOverlay };\n"],"names":["OwpTreeGridNoDataOverlay","__name","visible","message","overlayFrame","jsx","TREE_GRID_NO_DATA_OVERLAY_Z_INDEX","Typography"],"mappings":";;;;;AAkBA,MAAMA,IAA2B,gBAAAC,EAAA,CAAC;AAAA,EAChC,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AACF,MACOF,IAKH,gBAAAG;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAMD,EAAa;AAAA,MACnB,KAAKA,EAAa;AAAA,MAClB,OAAOA,EAAa;AAAA,MACpB,QAAQA,EAAa;AAAA,MACrB,QAAQE;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,eAAe;AAAA,IAAA;AAAA,IAGjB,UAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,eAAe;AAAA,QAAA;AAAA,QAGhB,UAAAJ;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AAAA,IA7BK,MANsB;"}
1
+ {"version":3,"file":"OwpTreeGridNoDataOverlay.js","sources":["../../../../src/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.tsx"],"sourcesContent":["import Typography from '@mui/material/Typography';\nimport {\n type OwpTreeGridOverlayFrame,\n TREE_GRID_NO_DATA_OVERLAY_Z_INDEX,\n} from './hooks/useOwpTreeGridOverlayFrame';\n\ntype OwpTreeGridNoDataOverlayProps = {\n visible: boolean;\n message: string;\n overlayFrame: OwpTreeGridOverlayFrame;\n};\n\n/**\n * TreeGrid no-data overlay\n * @param visible overlay visibility\n * @param message no-data message\n * @param overlayFrame overlay frame\n */\nconst OwpTreeGridNoDataOverlay = ({\n visible,\n message,\n overlayFrame,\n}: OwpTreeGridNoDataOverlayProps) => {\n if (!visible) {\n return null;\n }\n\n return (\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: overlayFrame.left,\n top: overlayFrame.top,\n width: overlayFrame.width,\n height: overlayFrame.height,\n zIndex: TREE_GRID_NO_DATA_OVERLAY_Z_INDEX,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n <Typography\n sx={{\n color: '#111112',\n fontFamily: 'RobotoLight, sans-serif',\n fontSize: '14px',\n lineHeight: '16px',\n letterSpacing: '0.04em',\n }}\n >\n {message}\n </Typography>\n </div>\n );\n};\n\nexport { OwpTreeGridNoDataOverlay };\n"],"names":["OwpTreeGridNoDataOverlay","__name","visible","message","overlayFrame","jsx","TREE_GRID_NO_DATA_OVERLAY_Z_INDEX","Typography"],"mappings":";;;;;AAkBA,MAAMA,IAA2B,gBAAAC,EAAA,CAAC;AAAA,EAChC,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AACF,MACOF,IAKH,gBAAAG;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAMD,EAAa;AAAA,MACnB,KAAKA,EAAa;AAAA,MAClB,OAAOA,EAAa;AAAA,MACpB,QAAQA,EAAa;AAAA,MACrB,QAAQE;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,eAAe;AAAA,IAAA;AAAA,IAGjB,UAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,eAAe;AAAA,QAAA;AAAA,QAGhB,UAAAJ;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AAAA,IA7BK,MANsB;"}
@@ -2,7 +2,7 @@ var A = Object.defineProperty;
2
2
  var l = (i, o) => A(i, "name", { value: o, configurable: !0 });
3
3
  import { useState as g, useLayoutEffect as _ } from "react";
4
4
  import { countTreeGridPerf as O, isTreeGridPerfEnabled as b, getTreeGridPerfTimestamp as F, measureTreeGridPerf as G } from "../utils/perf.js";
5
- import { isEqual as L } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
5
+ import { isEqual as L } from "../../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
6
6
  const N = 2147483646, P = 2147483647, R = /* @__PURE__ */ l((i, o) => {
7
7
  const r = (o == null ? void 0 : o.MainTag) ?? i, a = Array.from(
8
8
  r.querySelectorAll("table.TSMainTable")
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOwpTreeGridOverlayFrame.js","sources":["../../../../../src/components/OwpTreeGrid/internal/hooks/useOwpTreeGridOverlayFrame.ts"],"sourcesContent":["import { isEqual } from 'es-toolkit/compat';\nimport { type RefObject, useLayoutEffect, useState } from 'react';\n// Temporary TreeGrid perf instrumentation import. Remove with ../utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n isTreeGridPerfEnabled,\n measureTreeGridPerf,\n} from '../utils/perf';\n\nexport type OwpTreeGridOverlayFrame = {\n left: number;\n top: number;\n width: number;\n height: number;\n};\n\ntype UseOwpTreeGridOverlayFrameInput = {\n visible: boolean;\n containerRef: RefObject<HTMLDivElement | null>;\n treeGridInstanceRef: RefObject<TGrid>;\n debugId?: string;\n};\n\nexport const TREE_GRID_NO_DATA_OVERLAY_Z_INDEX = 2147483646;\nexport const TREE_GRID_LOADING_OVERLAY_Z_INDEX = 2147483647;\n\nconst getTreeGridMainTableElement = (containerElement: HTMLDivElement, grid: TGrid | null) => {\n const mainTagElement = grid?.MainTag as HTMLElement | null | undefined;\n const scopedRootElement = mainTagElement ?? containerElement;\n const mainTableElements = Array.from(\n scopedRootElement.querySelectorAll<HTMLTableElement>('table.TSMainTable'),\n );\n\n const tableElements =\n mainTableElements.length > 0\n ? mainTableElements\n : Array.from(scopedRootElement.querySelectorAll<HTMLTableElement>('table'));\n\n return tableElements.reduce<HTMLTableElement | null>((largestTableElement, tableElement) => {\n const tableRect = tableElement.getBoundingClientRect();\n const largestTableRect = largestTableElement?.getBoundingClientRect();\n\n if (tableRect.width <= 0 || tableRect.height <= 0) {\n return largestTableElement;\n }\n\n if (!largestTableRect) {\n return tableElement;\n }\n\n return tableRect.width * tableRect.height > largestTableRect.width * largestTableRect.height\n ? tableElement\n : largestTableElement;\n }, null);\n};\n\nconst getTreeGridOverlayFrame = (\n containerElement: HTMLDivElement,\n grid: TGrid | null,\n): OwpTreeGridOverlayFrame => {\n const containerRect = containerElement.getBoundingClientRect();\n const fallbackWidth = containerElement.clientWidth || containerRect.width;\n const fallbackHeight = containerElement.clientHeight || containerRect.height;\n const mainTableElement = getTreeGridMainTableElement(containerElement, grid);\n\n if (!mainTableElement) {\n return {\n left: 0,\n top: 0,\n width: fallbackWidth,\n height: fallbackHeight,\n };\n }\n\n const tableRect = mainTableElement.getBoundingClientRect();\n\n if (tableRect.width <= 0 || tableRect.height <= 0) {\n return {\n left: 0,\n top: 0,\n width: fallbackWidth,\n height: fallbackHeight,\n };\n }\n\n return {\n left: tableRect.left - containerRect.left,\n top: tableRect.top - containerRect.top,\n width: tableRect.width,\n height: tableRect.height,\n };\n};\n\n/**\n * TreeGrid overlay frame hook\n * @param visible overlay visibility\n * @param containerRef TreeGrid container ref\n * @param treeGridInstanceRef TreeGrid instance ref\n */\nconst useOwpTreeGridOverlayFrame = ({\n visible,\n containerRef,\n treeGridInstanceRef,\n debugId,\n}: UseOwpTreeGridOverlayFrameInput) => {\n const [overlayFrame, setOverlayFrame] = useState<OwpTreeGridOverlayFrame>({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n });\n\n useLayoutEffect(() => {\n if (!visible) {\n return;\n }\n\n const containerElement = containerRef.current;\n\n if (!containerElement) {\n return;\n }\n\n let animationFrameId: number | undefined;\n let resizeObserver: ResizeObserver | undefined;\n let observedMainTableElement: HTMLTableElement | null = null;\n const scrollListenerOptions = { capture: true } as const;\n\n const syncObservedMainTableElement = (nextMainTableElement: HTMLTableElement | null) => {\n if (!resizeObserver || observedMainTableElement === nextMainTableElement) {\n observedMainTableElement = nextMainTableElement;\n return;\n }\n\n if (observedMainTableElement) {\n resizeObserver.unobserve(observedMainTableElement);\n }\n\n observedMainTableElement = nextMainTableElement;\n\n if (observedMainTableElement) {\n resizeObserver.observe(observedMainTableElement);\n }\n };\n\n const updateOverlayFrame = () => {\n const startedAt =\n debugId && isTreeGridPerfEnabled() ? getTreeGridPerfTimestamp() : null;\n const treeGrid = treeGridInstanceRef.current;\n const mainTableElement = getTreeGridMainTableElement(containerElement, treeGrid);\n const nextOverlayFrame = getTreeGridOverlayFrame(containerElement, treeGrid);\n\n if (debugId) {\n countTreeGridPerf(debugId, 'overlay update');\n }\n\n syncObservedMainTableElement(mainTableElement);\n\n setOverlayFrame((currentOverlayFrame) =>\n isEqual(currentOverlayFrame, nextOverlayFrame) ? currentOverlayFrame : nextOverlayFrame,\n );\n\n if (debugId) {\n measureTreeGridPerf(debugId, 'overlay update end', startedAt);\n }\n };\n\n const scheduleOverlayFrameUpdate = () => {\n if (debugId) {\n countTreeGridPerf(debugId, 'overlay schedule');\n }\n\n if (animationFrameId !== undefined) {\n window.cancelAnimationFrame(animationFrameId);\n }\n\n animationFrameId = window.requestAnimationFrame(() => {\n animationFrameId = undefined;\n updateOverlayFrame();\n });\n };\n\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(scheduleOverlayFrameUpdate);\n resizeObserver.observe(containerElement);\n }\n\n const mutationObserver = new MutationObserver(scheduleOverlayFrameUpdate);\n mutationObserver.observe(containerElement, { childList: true, subtree: true });\n window.addEventListener('resize', scheduleOverlayFrameUpdate);\n containerElement.addEventListener('scroll', scheduleOverlayFrameUpdate, scrollListenerOptions);\n updateOverlayFrame();\n\n return () => {\n if (animationFrameId !== undefined) {\n window.cancelAnimationFrame(animationFrameId);\n }\n\n window.removeEventListener('resize', scheduleOverlayFrameUpdate);\n containerElement.removeEventListener(\n 'scroll',\n scheduleOverlayFrameUpdate,\n scrollListenerOptions,\n );\n mutationObserver.disconnect();\n\n if (resizeObserver && observedMainTableElement) {\n resizeObserver.unobserve(observedMainTableElement);\n }\n\n resizeObserver?.disconnect();\n };\n }, [containerRef, treeGridInstanceRef, visible, debugId]);\n\n return overlayFrame;\n};\n\nexport { useOwpTreeGridOverlayFrame };\n"],"names":["TREE_GRID_NO_DATA_OVERLAY_Z_INDEX","TREE_GRID_LOADING_OVERLAY_Z_INDEX","getTreeGridMainTableElement","__name","containerElement","grid","scopedRootElement","mainTableElements","largestTableElement","tableElement","tableRect","largestTableRect","getTreeGridOverlayFrame","containerRect","fallbackWidth","fallbackHeight","mainTableElement","useOwpTreeGridOverlayFrame","visible","containerRef","treeGridInstanceRef","debugId","overlayFrame","setOverlayFrame","useState","useLayoutEffect","animationFrameId","resizeObserver","observedMainTableElement","scrollListenerOptions","syncObservedMainTableElement","nextMainTableElement","updateOverlayFrame","startedAt","isTreeGridPerfEnabled","getTreeGridPerfTimestamp","treeGrid","nextOverlayFrame","countTreeGridPerf","currentOverlayFrame","isEqual","measureTreeGridPerf","scheduleOverlayFrameUpdate","mutationObserver"],"mappings":"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"}