@byeolnaerim/flex-layout 0.0.7 → 0.0.9

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 (127) hide show
  1. package/dist/flex-layout/components/FlexLayout.cjs +62 -28
  2. package/dist/flex-layout/components/FlexLayout.cjs.map +1 -1
  3. package/dist/flex-layout/components/FlexLayout.js +26 -11
  4. package/dist/flex-layout/components/FlexLayout.js.map +1 -1
  5. package/dist/flex-layout/components/FlexLayoutContainer.cjs +121 -55
  6. package/dist/flex-layout/components/FlexLayoutContainer.cjs.map +1 -1
  7. package/dist/flex-layout/components/FlexLayoutContainer.js +68 -25
  8. package/dist/flex-layout/components/FlexLayoutContainer.js.map +1 -1
  9. package/dist/flex-layout/components/FlexLayoutIFramePane.cjs +68 -0
  10. package/dist/flex-layout/components/FlexLayoutIFramePane.cjs.map +1 -0
  11. package/dist/flex-layout/components/FlexLayoutIFramePane.d.ts +4 -0
  12. package/dist/flex-layout/components/FlexLayoutIFramePane.js +44 -0
  13. package/dist/flex-layout/components/FlexLayoutIFramePane.js.map +1 -0
  14. package/dist/flex-layout/components/FlexLayoutResizePanel.cjs +111 -46
  15. package/dist/flex-layout/components/FlexLayoutResizePanel.cjs.map +1 -1
  16. package/dist/flex-layout/components/FlexLayoutResizePanel.d.ts +1 -1
  17. package/dist/flex-layout/components/FlexLayoutResizePanel.js +68 -27
  18. package/dist/flex-layout/components/FlexLayoutResizePanel.js.map +1 -1
  19. package/dist/flex-layout/components/FlexLayoutSplitScreen.cjs +184 -143
  20. package/dist/flex-layout/components/FlexLayoutSplitScreen.cjs.map +1 -1
  21. package/dist/flex-layout/components/FlexLayoutSplitScreen.js +71 -32
  22. package/dist/flex-layout/components/FlexLayoutSplitScreen.js.map +1 -1
  23. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.cjs +253 -60
  24. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.cjs.map +1 -1
  25. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.d.ts +1 -1
  26. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.js +215 -39
  27. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.js.map +1 -1
  28. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.cjs +40 -17
  29. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.cjs.map +1 -1
  30. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.js +7 -7
  31. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.js.map +1 -1
  32. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.cjs +44 -21
  33. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.cjs.map +1 -1
  34. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.js +7 -8
  35. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.js.map +1 -1
  36. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.cjs +40 -17
  37. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.cjs.map +1 -1
  38. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.js +5 -6
  39. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.js.map +1 -1
  40. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.cjs +53 -29
  41. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.cjs.map +1 -1
  42. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.js +14 -10
  43. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.js.map +1 -1
  44. package/dist/flex-layout/components/FlexLayoutStickyBox.cjs +46 -27
  45. package/dist/flex-layout/components/FlexLayoutStickyBox.cjs.map +1 -1
  46. package/dist/flex-layout/components/FlexLayoutStickyBox.d.ts +1 -0
  47. package/dist/flex-layout/components/FlexLayoutStickyBox.js +13 -8
  48. package/dist/flex-layout/components/FlexLayoutStickyBox.js.map +1 -1
  49. package/dist/flex-layout/components/index.cjs +54 -49
  50. package/dist/flex-layout/components/index.cjs.map +1 -1
  51. package/dist/flex-layout/components/index.js +16 -8
  52. package/dist/flex-layout/components/index.js.map +1 -1
  53. package/dist/flex-layout/hooks/index.cjs +23 -19
  54. package/dist/flex-layout/hooks/index.cjs.map +1 -1
  55. package/dist/flex-layout/hooks/index.js +2 -3
  56. package/dist/flex-layout/hooks/index.js.map +1 -1
  57. package/dist/flex-layout/hooks/useDrag.cjs +136 -79
  58. package/dist/flex-layout/hooks/useDrag.cjs.map +1 -1
  59. package/dist/flex-layout/hooks/useDrag.d.ts +5 -0
  60. package/dist/flex-layout/hooks/useDrag.js +86 -47
  61. package/dist/flex-layout/hooks/useDrag.js.map +1 -1
  62. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.cjs +40 -19
  63. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.cjs.map +1 -1
  64. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.js +9 -7
  65. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.js.map +1 -1
  66. package/dist/flex-layout/hooks/useListPaging.cjs +68 -35
  67. package/dist/flex-layout/hooks/useListPaging.cjs.map +1 -1
  68. package/dist/flex-layout/hooks/useListPaging.js +34 -18
  69. package/dist/flex-layout/hooks/useListPaging.js.map +1 -1
  70. package/dist/flex-layout/hooks/useSizes.cjs +45 -23
  71. package/dist/flex-layout/hooks/useSizes.cjs.map +1 -1
  72. package/dist/flex-layout/hooks/useSizes.js +6 -6
  73. package/dist/flex-layout/hooks/useSizes.js.map +1 -1
  74. package/dist/flex-layout/index.cjs +29 -40
  75. package/dist/flex-layout/index.cjs.map +1 -1
  76. package/dist/flex-layout/index.js +5 -6
  77. package/dist/flex-layout/index.js.map +1 -1
  78. package/dist/flex-layout/providers/FlexLayoutContext.cjs +35 -12
  79. package/dist/flex-layout/providers/FlexLayoutContext.cjs.map +1 -1
  80. package/dist/flex-layout/providers/FlexLayoutContext.js +7 -6
  81. package/dist/flex-layout/providers/FlexLayoutContext.js.map +1 -1
  82. package/dist/flex-layout/providers/FlexLayoutHooks.cjs +82 -53
  83. package/dist/flex-layout/providers/FlexLayoutHooks.cjs.map +1 -1
  84. package/dist/flex-layout/providers/FlexLayoutHooks.js +33 -8
  85. package/dist/flex-layout/providers/FlexLayoutHooks.js.map +1 -1
  86. package/dist/flex-layout/providers/index.cjs +21 -12
  87. package/dist/flex-layout/providers/index.cjs.map +1 -1
  88. package/dist/flex-layout/providers/index.js +1 -2
  89. package/dist/flex-layout/providers/index.js.map +1 -1
  90. package/dist/flex-layout/store/FlexLayoutContainerStore.cjs +130 -76
  91. package/dist/flex-layout/store/FlexLayoutContainerStore.cjs.map +1 -1
  92. package/dist/flex-layout/store/FlexLayoutContainerStore.d.ts +1 -0
  93. package/dist/flex-layout/store/FlexLayoutContainerStore.js +63 -38
  94. package/dist/flex-layout/store/FlexLayoutContainerStore.js.map +1 -1
  95. package/dist/flex-layout/store/index.cjs +21 -12
  96. package/dist/flex-layout/store/index.cjs.map +1 -1
  97. package/dist/flex-layout/store/index.js +1 -2
  98. package/dist/flex-layout/store/index.js.map +1 -1
  99. package/dist/flex-layout/types/FlexDirectionTypes.cjs +16 -3
  100. package/dist/flex-layout/types/FlexDirectionTypes.cjs.map +1 -1
  101. package/dist/flex-layout/types/FlexDirectionTypes.js +0 -2
  102. package/dist/flex-layout/types/FlexDirectionTypes.js.map +1 -1
  103. package/dist/flex-layout/types/FlexLayoutTypes.cjs +16 -3
  104. package/dist/flex-layout/types/FlexLayoutTypes.cjs.map +1 -1
  105. package/dist/flex-layout/types/FlexLayoutTypes.d.ts +1 -3
  106. package/dist/flex-layout/types/FlexLayoutTypes.js +0 -2
  107. package/dist/flex-layout/types/FlexLayoutTypes.js.map +1 -1
  108. package/dist/flex-layout/utils/FlexLayoutUtils.cjs +57 -20
  109. package/dist/flex-layout/utils/FlexLayoutUtils.cjs.map +1 -1
  110. package/dist/flex-layout/utils/FlexLayoutUtils.d.ts +4 -4
  111. package/dist/flex-layout/utils/FlexLayoutUtils.js +23 -8
  112. package/dist/flex-layout/utils/FlexLayoutUtils.js.map +1 -1
  113. package/dist/flex-layout/utils/index.cjs +21 -12
  114. package/dist/flex-layout/utils/index.cjs.map +1 -1
  115. package/dist/flex-layout/utils/index.js +1 -2
  116. package/dist/flex-layout/utils/index.js.map +1 -1
  117. package/dist/index.cjs +21 -12
  118. package/dist/index.cjs.map +1 -1
  119. package/dist/index.js +1 -2
  120. package/dist/index.js.map +1 -1
  121. package/dist/metafile-cjs.json +1 -0
  122. package/dist/metafile-esm.json +1 -0
  123. package/dist/types/css.d.cjs +1 -3
  124. package/dist/types/css.d.cjs.map +1 -1
  125. package/dist/types/css.d.js +0 -2
  126. package/dist/types/css.d.js.map +1 -1
  127. package/package.json +5 -1
@@ -1,12 +1,12 @@
1
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { useRef, useCallback, useState, useEffect } from 'react';
3
- import { useSize } from '../hooks/useSizes';
4
- import { useFlexLayoutContext } from '../providers/FlexLayoutContext';
5
- import { setContainerRef } from '../store/FlexLayoutContainerStore';
6
- import styles from '../styles/FlexLayout.module.css';
7
- import { getGrow, mathGrow, mathWeight } from '../utils/FlexLayoutUtils';
8
- import FlexLayoutResizePanel from './FlexLayoutResizePanel';
9
-
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useRef, useState } from "react";
4
+ import { useSize } from "../hooks/useSizes";
5
+ import { useFlexLayoutContext } from "../providers/FlexLayoutContext";
6
+ import { setContainerRef } from "../store/FlexLayoutContainerStore";
7
+ import styles from "../styles/FlexLayout.module.css";
8
+ import { getGrow, mathGrow, mathWeight } from "../utils/FlexLayoutUtils";
9
+ import FlexLayoutResizePanel from "./FlexLayoutResizePanel";
10
10
  function FlexLayoutContainer({
11
11
  isFitContent,
12
12
  isFitResize,
@@ -36,11 +36,21 @@ function FlexLayoutContainer({
36
36
  useSize(fitContent)
37
37
  );
38
38
  const flexContainerNodeRef = useRef(null);
39
+ const isUserResizingRef = useRef(false);
40
+ const handleResizingChange = useCallback((v) => {
41
+ isUserResizingRef.current = v;
42
+ }, []);
39
43
  const flexContainerRef = useCallback(
40
44
  (node) => {
41
45
  flexContainerNodeRef.current = node;
42
- if (node !== null) {
43
- setContainerRef(layoutName, containerName, { current: node });
46
+ if (node) {
47
+ setContainerRef(
48
+ layoutName,
49
+ containerName,
50
+ flexContainerNodeRef
51
+ );
52
+ } else {
53
+ setContainerRef(layoutName, containerName, null);
44
54
  }
45
55
  },
46
56
  [layoutName, containerName]
@@ -53,15 +63,6 @@ function FlexLayoutContainer({
53
63
  initialPrevGrow
54
64
  );
55
65
  const [isFirstLoad, setIsFirstLoad] = useState(true);
56
- useEffect(() => {
57
- if (!flexContainerNodeRef.current) return;
58
- setContainerRef(layoutName, containerName, flexContainerNodeRef);
59
- return () => {
60
- setContainerRef(layoutName, containerName, {
61
- current: null
62
- });
63
- };
64
- }, [containerName, layoutName]);
65
66
  useEffect(() => {
66
67
  if (typeof window == "undefined" || flexContainerNodeRef.current === null)
67
68
  return;
@@ -98,7 +99,8 @@ function FlexLayoutContainer({
98
99
  };
99
100
  }, [containerName]);
100
101
  useEffect(() => {
101
- if (!flexContainerNodeRef.current || !ref || !ref.current || !size || !fitContent)
102
+ if (!flexContainerNodeRef.current || !ref || !ref.current || !size || !fitContent || // getGrow(flexContainerNodeRef.current) == 0 ||
103
+ isUserResizingRef.current)
102
104
  return;
103
105
  requestAnimationFrame(() => {
104
106
  if (!flexContainerNodeRef.current) return;
@@ -144,6 +146,46 @@ function FlexLayoutContainer({
144
146
  });
145
147
  }
146
148
  }, []);
149
+ useEffect(() => {
150
+ if (!flexContainerNodeRef.current || !isFitContent || !fitContent || !size || getGrow(flexContainerNodeRef.current) == 0)
151
+ return;
152
+ const parent = flexContainerNodeRef.current.parentElement;
153
+ if (!parent) return;
154
+ const sizeName = fitContent.charAt(0).toUpperCase() + fitContent.substring(1);
155
+ const parentSize = parent["client" + sizeName] || 0;
156
+ if (!parentSize || containerCount <= 0) return;
157
+ const nextGrowRaw = mathGrow(size, parentSize, containerCount);
158
+ const nextGrow = Math.min(containerCount, Math.max(0, nextGrowRaw));
159
+ const currentGrow = getGrow(flexContainerNodeRef.current);
160
+ if (Math.abs(nextGrow - currentGrow) < 1e-3) return;
161
+ setPrevGrowState(currentGrow);
162
+ setGrowState(nextGrow);
163
+ const containers = [...parent.children || []].filter((el) => {
164
+ const item = el;
165
+ return item.hasAttribute("data-container_name") && !item.classList.contains(styles["flex-resize-panel"]);
166
+ });
167
+ const siblings = containers.filter(
168
+ (el) => el !== flexContainerNodeRef.current
169
+ );
170
+ const adjustable = siblings.filter((el) => el.style.flex !== "0 1 0%");
171
+ const remaining = containerCount - nextGrow;
172
+ if (remaining <= 0 || adjustable.length === 0) return;
173
+ const oldSum = adjustable.reduce((sum, el) => sum + getGrow(el), 0);
174
+ if (oldSum <= 0) {
175
+ const each = remaining / adjustable.length;
176
+ adjustable.forEach((el) => {
177
+ el.dataset.grow = each.toString();
178
+ el.style.flex = `${each} 1 0%`;
179
+ });
180
+ } else {
181
+ adjustable.forEach((el) => {
182
+ const g = getGrow(el);
183
+ const scaled = remaining * (g / oldSum);
184
+ el.dataset.grow = scaled.toString();
185
+ el.style.flex = `${scaled} 1 0%`;
186
+ });
187
+ }
188
+ }, [size, isFitContent, fitContent, containerCount]);
147
189
  return /* @__PURE__ */ jsxs(Fragment, { children: [
148
190
  /* @__PURE__ */ jsx(
149
191
  "div",
@@ -178,12 +220,13 @@ function FlexLayoutContainer({
178
220
  containerCount,
179
221
  panelMode,
180
222
  panelClassName,
181
- panelMovementMode
223
+ panelMovementMode,
224
+ onResizingChange: handleResizingChange
182
225
  }
183
226
  )
184
227
  ] });
185
228
  }
186
-
187
- export { FlexLayoutContainer as default };
188
- //# sourceMappingURL=FlexLayoutContainer.js.map
229
+ export {
230
+ FlexLayoutContainer as default
231
+ };
189
232
  //# sourceMappingURL=FlexLayoutContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/flex-layout/components/FlexLayoutContainer.tsx"],"names":[],"mappings":";;;;;;;;;AAUe,SAAR,mBAAA,CAAqC;AAAA,EAC3C,YAAA;AAAA,EACA,WAAA;AAAA;AAAA;AAAA;AAAA,EAIA,aAAA;AAAA,EACA,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU,eAAA;AAAA,EACV,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACD,CAAA,EAAuB;AACtB,EAAA,MAAM;AAAA,IACL,SAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACG,oBAAA,EAAqB;AAEzB,EAAA,MAAM,EAAE,KAAK,IAAA,EAAK;AAAA;AAAA;AAAA,IAGjB,QAAQ,UAAU;AAAA,GAAA;AAGnB,EAAA,MAAM,oBAAA,GAAuB,OAA8B,IAAI,CAAA;AAG/D,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACxB,CAAC,IAAA,KAAgC;AAChC,MAAA,oBAAA,CAAqB,OAAA,GAAU,IAAA;AAC/B,MAAA,IAAI,SAAS,IAAA,EAAM;AAClB,QAAA,eAAA,CAAgB,UAAA,EAAY,aAAA,EAAe,EAAE,OAAA,EAAS,MAAM,CAAA;AAAA,MAC7D;AAEA,IACD,CAAA;AAAA,IACA,CAAC,YAAY,aAAa;AAAA,GAC3B;AAGA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAA6B,WAAW,CAAA;AAC1E,EAAA,SAAA,CAAU,MAAM;AACf,IAAA,YAAA,CAAa,WAAW,CAAA;AAAA,EACzB,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAChB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAA;AAAA,IACzC;AAAA,GACD;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAkB,IAAI,CAAA;AAE5D,EAAA,SAAA,CAAU,MAAM;AACf,IAAA,IAAI,CAAC,qBAAqB,OAAA,EAAS;AACnC,IAAA,eAAA,CAAgB,UAAA,EAAY,eAAe,oBAAoB,CAAA;AAC/D,IAAA,OAAO,MAAM;AACZ,MAAA,eAAA,CAAgB,YAAY,aAAA,EAAe;AAAA,QAC1C,OAAA,EAAS;AAAA,OACF,CAAA;AAAA,IACT,CAAA;AAAA,EACD,CAAA,EAAG,CAAC,aAAA,EAAe,UAAU,CAAC,CAAA;AAG9B,EAAA,SAAA,CAAU,MAAM;AACf,IAAA,IACC,OAAO,MAAA,IAAU,WAAA,IACjB,oBAAA,CAAqB,OAAA,KAAY,IAAA;AAEjC,MAAA;AAED,IAAA,MAAM,UAAA,GAAa,cAAA,CAAe,OAAA,CAAQ,aAAa,CAAA;AACvD,IAAA,IAAI,eAAe,IAAA,EAAM;AACxB,MAAA,MAAM,MAAA,GAAS,WAAW,UAAU,CAAA;AACpC,MAAA,IAAI,CAAC,KAAA,CAAM,MAAM,CAAA,EAAG;AACnB,QAAA,oBAAA,CAAqB,OAAA,CAAQ,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,MAAM,CAAA,KAAA,CAAA;AACnD,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACpB;AAAA,IACD;AAAA,EACD,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAGlB,EAAA,SAAA,CAAU,MAAM;AACf,IAAA,IAAI,CAAC,qBAAqB,OAAA,EAAS;AACnC,IAAA,MAAM,aAAa,oBAAA,CAAqB,OAAA;AAExC,IAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,CAAC,SAAA,KAAc;AACpD,MAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AACjC,QAAA,IACC,QAAA,CAAS,SAAS,YAAA,IAClB,QAAA,CAAS,kBAAkB,OAAA,IAC3B,UAAA,CAAW,MAAM,IAAA,EAChB;AAED,UAAA,MAAM,SAAA,GAAY,WAAW,KAAA,CAAM,IAAA;AACnC,UAAA,MAAM,aAAa,UAAA,CAAW,SAAA,CAAU,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AACrD,UAAA,IAAI,CAAC,KAAA,CAAM,UAAU,CAAA,EAAG;AAOvB,YAAA,YAAA,CAAa,UAAU,CAAA;AAAA,UACxB;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,QAAQ,UAAA,EAAY;AAAA,MAC5B,UAAA,EAAY,IAAA;AAAA,MACZ,eAAA,EAAiB,CAAC,OAAO,CAAA;AAAA,MACzB,iBAAA,EAAmB;AAAA,KACnB,CAAA;AAED,IAAA,OAAO,MAAM;AACZ,MAAA,QAAA,CAAS,UAAA,EAAW;AAAA,IACrB,CAAA;AAAA,EACD,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,SAAA,CAAU,MAAM;AAEf,IAAA,IACC,CAAC,oBAAA,CAAqB,OAAA,IACtB,CAAC,GAAA,IACD,CAAC,GAAA,CAAI,OAAA,IACL,CAAC,IAAA,IACD,CAAC,UAAA;AAGD,MAAA;AACD,IAAA,qBAAA,CAAsB,MAAM;AAC3B,MAAA,IAAI,CAAC,qBAAqB,OAAA,EAAS;AACnC,MAAA,MAAM,QAAA,GAAW,CAAA,EAAG,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,UAAA,CAAW,SAAA,CAAU,CAAC,CAAC,CAAA,CAAA;AAChF,MAAA,MAAM,UAAA,GACJ,qBAAqB,OAAA,CAAQ,aAAA,IAC7B,qBAAqB,OAAA,CAAQ,aAAA,CAC3B,QAAA,GAAW,QACb,CAAA,IACD,CAAA;AACD,MAAA,IAAI,YAAA,EAAc;AACjB,QAAA,oBAAA,CAAqB,OAAA,CAAQ,KAAA,CAC3B,KAAA,GAAQ,QACV,IAAI,IAAA,GAAO,IAAA;AAAA,MACZ;AACA,MAAA,IAAI,CAAC,eAAe,WAAA,EAAa;AAChC,QAAA,cAAA,CAAe,KAAK,CAAA;AACpB,QAAA;AAAA,MACD;AAEA,MAAA,IAAI,OAAA,CAAQ,oBAAA,CAAqB,OAAO,CAAA,IAAK,KAAK,WAAA,EAAa;AAC9D,QAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAA,EAAM,UAAA,EAAY,cAAc,CAAA;AACzD,QAAA,gBAAA,CAAiB,SAAS,CAAA;AAC1B,QAAA,YAAA,CAAa,OAAO,CAAA;AAAA,MAKrB;AAAA,IACD,CAAC,CAAA;AAAA,EACF,GAAG,CAAC,IAAA,EAAM,cAAA,EAAgB,WAAA,EAAa,QAAQ,CAAC,CAAA;AAEhD,EAAA,SAAA,CAAU,MAAM;AACf,IAAA,IAAI,CAAC,qBAAqB,OAAA,EAAS;AAEnC,IAAA,IAAI,cAAkC,EAAC;AACvC,IAAA,IAAI,aAAA,GAAgB;AAAA,MACnB,GAAI,oBAAA,CAAqB,OAAA,CAAQ,aAAA,EAAe,YAAY;AAAC,MAC5D,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,YAAA,CAAa,qBAAqB,CAAC,CAAA;AACrD,IAAA,IAAI,gBAAgB,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,EAAG,GAAG,CAAA,KAAM;AACrD,MAAA,IAAI,IAAA,GAAO,CAAA;AAEX,MAAA,IAAI,KAAK,SAAA,CAAU,QAAA,CAAS,OAAO,mBAAmB,CAAC,GAAG,OAAO,CAAA;AAEjE,MAAA,IACC,CAAA,CAAE,aAAa,WAAW,CAAA,IAAK,SAC/B,CAAA,CAAE,YAAA,CAAa,gBAAgB,CAAA,KAAM,MAAA,EACpC;AACD,QAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AACrB,QAAA,OAAO,CAAA;AAAA,MACR;AACA,MAAA,IAAI,IAAA,GAAO,UAAA,CAAW,IAAA,CAAK,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC7C,MAAA,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,KAAA,CAAA;AACzB,MAAA,CAAA,IAAK,IAAA;AACL,MAAA,OAAO,CAAA;AAAA,IACR,CAAA,EAAG,cAAc,MAAM,CAAA;AACvB,IAAA,IAAI,WAAA,CAAY,UAAU,CAAA,EAAG;AAC5B,MAAA,IAAI,YAAA,GAAe,UAAA,CAAW,WAAA,CAAY,MAAA,EAAQ,aAAa,CAAA;AAC/D,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC1B,QAAA,CAAA,CAAE,OAAA,CAAQ,IAAA,GAAO,YAAA,CAAa,QAAA,EAAS;AACvC,QAAA,CAAA,CAAE,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,YAAY,CAAA,KAAA,CAAA;AAAA,MAC/B,CAAC,CAAA;AAAA,IACF;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,uBACC,IAAA,CAAA,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,EAAA,EAAI,aAAA;AAAA,QACJ,qBAAA,EAAqB,aAAA;AAAA,QACrB,GAAA,EAAK,gBAAA;AAAA,QACL,SAAA,EAAW,CAAA,EAAG,MAAA,CAAO,gBAAgB,CAAC,IAAI,SAAA,IAAa,SAAA,KAAc,EAAA,GAAK,SAAA,GAAY,EAAE,CAAA,CAAA;AAAA,QACvF,GAAI,cAAc,MAAA,GAChB,EAAE,CAAC,WAAW,GAAG,SAAA,EAAU,GAC3B,EAAC;AAAA,QACH,GAAI,iBAAiB,MAAA,GACnB,EAAE,CAAC,gBAAgB,GAAG,aAAA,EAAc,GACpC,EAAC;AAAA,QACJ,gBAAA,EAAgB,kBAAA;AAAA,QAChB,sBAAA,EAAsB,aAAA;AAAA,QACtB,KAAA,EACE,cAAc,MAAA,IAAa;AAAA,UAC3B,IAAA,EAAM,GAAG,SAAS,CAAA,KAAA;AAAA,aAEnB,EAAC;AAAA,QAGA,QAAA,EAAA,YAAA,oBACD,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,SAAA,EAAW,CAAA,EAAG,MAAA,CAAO,0BAA0B,CAAC,CAAA,CAAA;AAAA,YAChD,GAAA;AAAA,YAEC;AAAA;AAAA,SACF,IAEA;AAAA;AAAA,KACF;AAAA,IACC,aAAA,oBACA,GAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACA,aAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAA;AAAA,QACA,cAAA;AAAA,QACA,SAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AAAA;AACD,GAAA,EAEF,CAAA;AAEF","file":"FlexLayoutContainer.js","sourcesContent":["\"use client\";\r\nimport { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport { useSize } from \"../hooks/useSizes\";\r\nimport { useFlexLayoutContext } from \"../providers/FlexLayoutContext\";\r\nimport { setContainerRef } from \"../store/FlexLayoutContainerStore\";\r\nimport styles from \"../styles/FlexLayout.module.css\";\r\nimport { FlexContainerProps } from \"../types/FlexLayoutTypes\";\r\nimport { getGrow, mathGrow, mathWeight } from \"../utils/FlexLayoutUtils\";\r\nimport FlexLayoutResizePanel from \"./FlexLayoutResizePanel\";\r\n\r\nexport default function FlexLayoutContainer({\r\n\tisFitContent,\r\n\tisFitResize,\r\n\t// fitContent,\r\n\t// containerCount,\r\n\t// layoutName,\r\n\tcontainerName,\r\n\tgrow: initialGrow,\r\n\tprevGrow: initialPrevGrow,\r\n\tisInitialResizable,\r\n\tisResizePanel,\r\n\tchildren,\r\n\tclassName,\r\n\tpanelMode,\r\n}: FlexContainerProps) {\r\n\tconst {\r\n\t\tdirection,\r\n\t\tpanelMovementMode,\r\n\t\tpanelClassName,\r\n\t\tlayoutName,\r\n\t\tfitContent,\r\n\t\tcontainerCount,\r\n\t} = useFlexLayoutContext();\r\n\r\n\tconst { ref, size } =\r\n\t\t// isFitContent && fitContent\r\n\t\t//?\r\n\t\tuseSize(fitContent);\r\n\t//: { ref: null, size: null };\r\n\t// 콜백 ref에서 접근하기 위한 내부 ref 생성\r\n\tconst flexContainerNodeRef = useRef<HTMLDivElement | null>(null);\r\n\r\n\t// 콜백 ref 정의\r\n\tconst flexContainerRef = useCallback(\r\n\t\t(node: HTMLDivElement | null) => {\r\n\t\t\tflexContainerNodeRef.current = node;\r\n\t\t\tif (node !== null) {\r\n\t\t\t\tsetContainerRef(layoutName, containerName, { current: node });\r\n\t\t\t} else {\r\n\t\t\t\t// 컴포넌트가 언마운트될 때 필요한 작업이 있다면 여기에 추가\r\n\t\t\t}\r\n\t\t},\r\n\t\t[layoutName, containerName],\r\n\t);\r\n\r\n\t// 초기 SSR 시점에는 sessionStorage를 사용할 수 없으므로 일단 initialGrow를 사용\r\n\tconst [growState, setGrowState] = useState<number | undefined>(initialGrow);\r\n\tuseEffect(() => {\r\n\t\tsetGrowState(initialGrow);\r\n\t}, [initialGrow]);\r\n\tconst [prevGrowState, setPrevGrowState] = useState<number | undefined>(\r\n\t\tinitialPrevGrow,\r\n\t);\r\n\tconst [isFirstLoad, setIsFirstLoad] = useState<boolean>(true);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!flexContainerNodeRef.current) return;\r\n\t\tsetContainerRef(layoutName, containerName, flexContainerNodeRef);\r\n\t\treturn () => {\r\n\t\t\tsetContainerRef(layoutName, containerName, {\r\n\t\t\t\tcurrent: null,\r\n\t\t\t} as any);\r\n\t\t};\r\n\t}, [containerName, layoutName]);\r\n\r\n\t// 클라이언트 마운트 후 sessionStorage에서 grow값을 가져와 state 업데이트 (SSR/Hydration 안정화)\r\n\tuseEffect(() => {\r\n\t\tif (\r\n\t\t\ttypeof window == \"undefined\" ||\r\n\t\t\tflexContainerNodeRef.current === null\r\n\t\t)\r\n\t\t\treturn;\r\n\r\n\t\tconst storedGrow = sessionStorage.getItem(containerName);\r\n\t\tif (storedGrow !== null) {\r\n\t\t\tconst parsed = parseFloat(storedGrow);\r\n\t\t\tif (!isNaN(parsed)) {\r\n\t\t\t\tflexContainerNodeRef.current.style.flex = `${parsed} 1 0%`;\r\n\t\t\t\tsetGrowState(parsed);\r\n\t\t\t}\r\n\t\t}\r\n\t}, [containerName]);\r\n\r\n\t// 스타일 변경 감지를 위한 MutationObserver\r\n\tuseEffect(() => {\r\n\t\tif (!flexContainerNodeRef.current) return;\r\n\t\tconst targetNode = flexContainerNodeRef.current;\r\n\r\n\t\tconst observer = new MutationObserver((mutations) => {\r\n\t\t\tfor (const mutation of mutations) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tmutation.type === \"attributes\" &&\r\n\t\t\t\t\tmutation.attributeName === \"style\" &&\r\n\t\t\t\t\ttargetNode.style.flex\r\n\t\t\t\t) {\r\n\t\t\t\t\t// style.flex = \"X 1 0%\" 형태이므로 X를 파싱\r\n\t\t\t\t\tconst flexValue = targetNode.style.flex;\r\n\t\t\t\t\tconst parsedGrow = parseFloat(flexValue.split(\" \")[0]);\r\n\t\t\t\t\tif (!isNaN(parsedGrow)) {\r\n\t\t\t\t\t\t// sessionStorage에 저장\r\n\t\t\t\t\t\t// sessionStorage.setItem(\r\n\t\t\t\t\t\t// containerName,\r\n\t\t\t\t\t\t// parsedGrow.toString()\r\n\t\t\t\t\t\t// );\r\n\t\t\t\t\t\t// state 업데이트\r\n\t\t\t\t\t\tsetGrowState(parsedGrow);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tobserver.observe(targetNode, {\r\n\t\t\tattributes: true,\r\n\t\t\tattributeFilter: [\"style\"],\r\n\t\t\tattributeOldValue: true,\r\n\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tobserver.disconnect();\r\n\t\t};\r\n\t}, [containerName]);\r\n\r\n\tuseEffect(() => {\r\n\t\t// 컴포넌트 크기 및 설정값에 따른 사이즈 재조정\r\n\t\tif (\r\n\t\t\t!flexContainerNodeRef.current ||\r\n\t\t\t!ref ||\r\n\t\t\t!ref.current ||\r\n\t\t\t!size ||\r\n\t\t\t!fitContent\r\n\t\t\t//||getGrow(flexContainerRef.current) == 0\r\n\t\t)\r\n\t\t\treturn;\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tif (!flexContainerNodeRef.current) return;\r\n\t\t\tconst sizeName = `${fitContent.charAt(0).toUpperCase() + fitContent.substring(1)}`;\r\n\t\t\tconst parentSize =\r\n\t\t\t\t(flexContainerNodeRef.current.parentElement &&\r\n\t\t\t\t\tflexContainerNodeRef.current.parentElement[\r\n\t\t\t\t\t\t(\"client\" + sizeName) as \"clientWidth\" | \"clientHeight\"\r\n\t\t\t\t\t]) ||\r\n\t\t\t\t0;\r\n\t\t\tif (isFitContent) {\r\n\t\t\t\tflexContainerNodeRef.current.style[\r\n\t\t\t\t\t(\"max\" + sizeName) as \"maxWidth\" | \"maxHeight\"\r\n\t\t\t\t] = size + \"px\";\r\n\t\t\t}\r\n\t\t\tif (!isFitResize && isFirstLoad) {\r\n\t\t\t\tsetIsFirstLoad(false);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (getGrow(flexContainerNodeRef.current) != 0 && isFitResize) {\r\n\t\t\t\tconst newGrow = mathGrow(size, parentSize, containerCount);\r\n\t\t\t\tsetPrevGrowState(growState);\r\n\t\t\t\tsetGrowState(newGrow);\r\n\t\t\t\t// flexContainerNodeRef.current.dataset.prev_grow =\r\n\t\t\t\t// flexContainerNodeRef.current.dataset.grow;\r\n\t\t\t\t// flexContainerNodeRef.current.dataset.grow = newGrow.toString();\r\n\t\t\t\t// flexContainerNodeRef.current.style.flex = `${newGrow} 1 0%`;\r\n\t\t\t}\r\n\t\t});\r\n\t}, [size, containerCount, isFitResize, children]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!flexContainerNodeRef.current) return;\r\n\r\n\t\tlet notGrowList: Array<HTMLElement> = [];\r\n\t\tlet containerList = [\r\n\t\t\t...(flexContainerNodeRef.current.parentElement?.children || []),\r\n\t\t].filter((e) => e.hasAttribute(\"data-container_name\"));\r\n\t\tlet remainingGrow = containerList.reduce((t, e, i) => {\r\n\t\t\tlet item = e as HTMLElement;\r\n\r\n\t\t\tif (item.classList.contains(styles[\"flex-resize-panel\"])) return t;\r\n\r\n\t\t\tif (\r\n\t\t\t\te.hasAttribute(\"data-grow\") == false ||\r\n\t\t\t\te.getAttribute(\"data-is_resize\") === \"true\"\r\n\t\t\t) {\r\n\t\t\t\tnotGrowList.push(item);\r\n\t\t\t\treturn t;\r\n\t\t\t}\r\n\t\t\tlet grow = parseFloat(item.dataset.grow || \"\");\r\n\t\t\titem.style.flex = `${grow} 1 0%`;\r\n\t\t\tt -= grow;\r\n\t\t\treturn t;\r\n\t\t}, containerList.length);\r\n\t\tif (notGrowList.length != 0) {\r\n\t\t\tlet resizeWeight = mathWeight(notGrowList.length, remainingGrow);\r\n\t\t\tnotGrowList.forEach((e) => {\r\n\t\t\t\te.dataset.grow = resizeWeight.toString();\r\n\t\t\t\te.style.flex = `${resizeWeight} 1 0%`;\r\n\t\t\t});\r\n\t\t}\r\n\t}, []);\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<div\r\n\t\t\t\tid={containerName}\r\n\t\t\t\tdata-container_name={containerName}\r\n\t\t\t\tref={flexContainerRef}\r\n\t\t\t\tclassName={`${styles[\"flex-container\"]} ${className && className !== \"\" ? className : \"\"}`}\r\n\t\t\t\t{...(growState !== undefined\r\n\t\t\t\t\t? { [\"data-grow\"]: growState }\r\n\t\t\t\t\t: {})}\r\n\t\t\t\t{...(prevGrowState != undefined\r\n\t\t\t\t\t? { [\"data-prev_grow\"]: prevGrowState }\r\n\t\t\t\t\t: {})}\r\n\t\t\t\tdata-is_resize={isInitialResizable}\r\n\t\t\t\tdata-is_resize_panel={isResizePanel}\r\n\t\t\t\tstyle={\r\n\t\t\t\t\t(growState !== undefined && {\r\n\t\t\t\t\t\tflex: `${growState} 1 0%`,\r\n\t\t\t\t\t}) ||\r\n\t\t\t\t\t{}\r\n\t\t\t\t}\r\n\t\t\t>\r\n\t\t\t\t{(isFitContent && (\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName={`${styles[\"flex-content-fit-wrapper\"]}`}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)) ||\r\n\t\t\t\t\tchildren}\r\n\t\t\t</div>\r\n\t\t\t{isResizePanel && (\r\n\t\t\t\t<FlexLayoutResizePanel\r\n\t\t\t\t\tcontainerName={containerName}\r\n\t\t\t\t\tlayoutName={layoutName}\r\n\t\t\t\t\tdirection={direction}\r\n\t\t\t\t\tcontainerCount={containerCount}\r\n\t\t\t\t\tpanelMode={panelMode}\r\n\t\t\t\t\tpanelClassName={panelClassName}\r\n\t\t\t\t\tpanelMovementMode={panelMovementMode}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../src/flex-layout/components/FlexLayoutContainer.tsx"],"sourcesContent":["\"use client\";\r\nimport { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport { useSize } from \"../hooks/useSizes\";\r\nimport { useFlexLayoutContext } from \"../providers/FlexLayoutContext\";\r\nimport { setContainerRef } from \"../store/FlexLayoutContainerStore\";\r\nimport styles from \"../styles/FlexLayout.module.css\";\r\nimport { FlexContainerProps } from \"../types/FlexLayoutTypes\";\r\nimport { getGrow, mathGrow, mathWeight } from \"../utils/FlexLayoutUtils\";\r\nimport FlexLayoutResizePanel from \"./FlexLayoutResizePanel\";\r\n\r\nexport default function FlexLayoutContainer({\r\n\tisFitContent,\r\n\tisFitResize,\r\n\t// fitContent,\r\n\t// containerCount,\r\n\t// layoutName,\r\n\tcontainerName,\r\n\tgrow: initialGrow,\r\n\tprevGrow: initialPrevGrow,\r\n\tisInitialResizable,\r\n\tisResizePanel,\r\n\tchildren,\r\n\tclassName,\r\n\tpanelMode,\r\n}: FlexContainerProps) {\r\n\tconst {\r\n\t\tdirection,\r\n\t\tpanelMovementMode,\r\n\t\tpanelClassName,\r\n\t\tlayoutName,\r\n\t\tfitContent,\r\n\t\tcontainerCount,\r\n\t} = useFlexLayoutContext();\r\n\r\n\tconst { ref, size } =\r\n\t\t// isFitContent && fitContent\r\n\t\t//?\r\n\t\tuseSize(fitContent);\r\n\t//: { ref: null, size: null };\r\n\t// 콜백 ref에서 접근하기 위한 내부 ref 생성\r\n\tconst flexContainerNodeRef = useRef<HTMLDivElement | null>(null);\r\n\r\n\tconst isUserResizingRef = useRef(false);\r\n\r\n\tconst handleResizingChange = useCallback((v: boolean) => {\r\n\t\tisUserResizingRef.current = v;\r\n\t}, []);\r\n\r\n\t// 콜백 ref 정의\r\n\tconst flexContainerRef = useCallback(\r\n\t\t(node: HTMLDivElement | null) => {\r\n\t\t\tflexContainerNodeRef.current = node;\r\n\r\n\t\t\t// 마운트: 저장 / 언마운트: 삭제\r\n\t\t\tif (node) {\r\n\t\t\t\tsetContainerRef(\r\n\t\t\t\t\tlayoutName,\r\n\t\t\t\t\tcontainerName,\r\n\t\t\t\t\tflexContainerNodeRef,\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tsetContainerRef(layoutName, containerName, null);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[layoutName, containerName],\r\n\t);\r\n\r\n\t// 초기 SSR 시점에는 sessionStorage를 사용할 수 없으므로 일단 initialGrow를 사용\r\n\tconst [growState, setGrowState] = useState<number | undefined>(initialGrow);\r\n\tuseEffect(() => {\r\n\t\tsetGrowState(initialGrow);\r\n\t}, [initialGrow]);\r\n\tconst [prevGrowState, setPrevGrowState] = useState<number | undefined>(\r\n\t\tinitialPrevGrow,\r\n\t);\r\n\tconst [isFirstLoad, setIsFirstLoad] = useState<boolean>(true);\r\n\r\n\t// 클라이언트 마운트 후 sessionStorage에서 grow값을 가져와 state 업데이트 (SSR/Hydration 안정화)\r\n\tuseEffect(() => {\r\n\t\tif (\r\n\t\t\ttypeof window == \"undefined\" ||\r\n\t\t\tflexContainerNodeRef.current === null\r\n\t\t)\r\n\t\t\treturn;\r\n\r\n\t\tconst storedGrow = sessionStorage.getItem(containerName);\r\n\t\tif (storedGrow !== null) {\r\n\t\t\tconst parsed = parseFloat(storedGrow);\r\n\t\t\tif (!isNaN(parsed)) {\r\n\t\t\t\tflexContainerNodeRef.current.style.flex = `${parsed} 1 0%`;\r\n\t\t\t\tsetGrowState(parsed);\r\n\t\t\t}\r\n\t\t}\r\n\t}, [containerName]);\r\n\r\n\t// 스타일 변경 감지를 위한 MutationObserver\r\n\tuseEffect(() => {\r\n\t\tif (!flexContainerNodeRef.current) return;\r\n\t\tconst targetNode = flexContainerNodeRef.current;\r\n\r\n\t\tconst observer = new MutationObserver((mutations) => {\r\n\t\t\tfor (const mutation of mutations) {\r\n\t\t\t\tif (\r\n\t\t\t\t\tmutation.type === \"attributes\" &&\r\n\t\t\t\t\tmutation.attributeName === \"style\" &&\r\n\t\t\t\t\ttargetNode.style.flex\r\n\t\t\t\t) {\r\n\t\t\t\t\t// style.flex = \"X 1 0%\" 형태이므로 X를 파싱\r\n\t\t\t\t\tconst flexValue = targetNode.style.flex;\r\n\t\t\t\t\tconst parsedGrow = parseFloat(flexValue.split(\" \")[0]);\r\n\t\t\t\t\tif (!isNaN(parsedGrow)) {\r\n\t\t\t\t\t\t// sessionStorage에 저장\r\n\t\t\t\t\t\t// sessionStorage.setItem(\r\n\t\t\t\t\t\t// containerName,\r\n\t\t\t\t\t\t// parsedGrow.toString()\r\n\t\t\t\t\t\t// );\r\n\t\t\t\t\t\t// state 업데이트\r\n\t\t\t\t\t\tsetGrowState(parsedGrow);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tobserver.observe(targetNode, {\r\n\t\t\tattributes: true,\r\n\t\t\tattributeFilter: [\"style\"],\r\n\t\t\tattributeOldValue: true,\r\n\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tobserver.disconnect();\r\n\t\t};\r\n\t}, [containerName]);\r\n\r\n\tuseEffect(() => {\r\n\t\t// 컴포넌트 크기 및 설정값에 따른 사이즈 재조정\r\n\t\tif (\r\n\t\t\t!flexContainerNodeRef.current ||\r\n\t\t\t!ref ||\r\n\t\t\t!ref.current ||\r\n\t\t\t!size ||\r\n\t\t\t!fitContent ||\r\n\t\t\t// getGrow(flexContainerNodeRef.current) == 0 ||\r\n\t\t\tisUserResizingRef.current // 사용자가 직접 사이즈 조정 중일 때는 자동 조정 방지\r\n\t\t)\r\n\t\t\treturn;\r\n\t\trequestAnimationFrame(() => {\r\n\t\t\tif (!flexContainerNodeRef.current) return;\r\n\t\t\tconst sizeName = `${fitContent.charAt(0).toUpperCase() + fitContent.substring(1)}`;\r\n\t\t\tconst parentSize =\r\n\t\t\t\t(flexContainerNodeRef.current.parentElement &&\r\n\t\t\t\t\tflexContainerNodeRef.current.parentElement[\r\n\t\t\t\t\t\t(\"client\" + sizeName) as \"clientWidth\" | \"clientHeight\"\r\n\t\t\t\t\t]) ||\r\n\t\t\t\t0;\r\n\t\t\tif (isFitContent) {\r\n\t\t\t\tflexContainerNodeRef.current.style[\r\n\t\t\t\t\t(\"max\" + sizeName) as \"maxWidth\" | \"maxHeight\"\r\n\t\t\t\t] = size + \"px\";\r\n\t\t\t}\r\n\t\t\tif (!isFitResize && isFirstLoad) {\r\n\t\t\t\tsetIsFirstLoad(false);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (getGrow(flexContainerNodeRef.current) != 0 && isFitResize) {\r\n\t\t\t\tconst newGrow = mathGrow(size, parentSize, containerCount);\r\n\t\t\t\tsetPrevGrowState(growState);\r\n\t\t\t\tsetGrowState(newGrow);\r\n\t\t\t\t// flexContainerNodeRef.current.dataset.prev_grow =\r\n\t\t\t\t// flexContainerNodeRef.current.dataset.grow;\r\n\t\t\t\t// flexContainerNodeRef.current.dataset.grow = newGrow.toString();\r\n\t\t\t\t// flexContainerNodeRef.current.style.flex = `${newGrow} 1 0%`;\r\n\t\t\t}\r\n\t\t});\r\n\t}, [size, containerCount, isFitResize, children]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!flexContainerNodeRef.current) return;\r\n\r\n\t\tlet notGrowList: Array<HTMLElement> = [];\r\n\t\tlet containerList = [\r\n\t\t\t...(flexContainerNodeRef.current.parentElement?.children || []),\r\n\t\t].filter((e) => e.hasAttribute(\"data-container_name\"));\r\n\t\tlet remainingGrow = containerList.reduce((t, e, i) => {\r\n\t\t\tlet item = e as HTMLElement;\r\n\r\n\t\t\tif (item.classList.contains(styles[\"flex-resize-panel\"])) return t;\r\n\r\n\t\t\tif (\r\n\t\t\t\te.hasAttribute(\"data-grow\") == false ||\r\n\t\t\t\te.getAttribute(\"data-is_resize\") === \"true\"\r\n\t\t\t) {\r\n\t\t\t\tnotGrowList.push(item);\r\n\t\t\t\treturn t;\r\n\t\t\t}\r\n\t\t\tlet grow = parseFloat(item.dataset.grow || \"\");\r\n\t\t\titem.style.flex = `${grow} 1 0%`;\r\n\t\t\tt -= grow;\r\n\t\t\treturn t;\r\n\t\t}, containerList.length);\r\n\t\tif (notGrowList.length != 0) {\r\n\t\t\tlet resizeWeight = mathWeight(notGrowList.length, remainingGrow);\r\n\t\t\tnotGrowList.forEach((e) => {\r\n\t\t\t\te.dataset.grow = resizeWeight.toString();\r\n\t\t\t\te.style.flex = `${resizeWeight} 1 0%`;\r\n\t\t\t});\r\n\t\t}\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (\r\n\t\t\t!flexContainerNodeRef.current ||\r\n\t\t\t!isFitContent ||\r\n\t\t\t!fitContent ||\r\n\t\t\t!size ||\r\n\t\t\tgetGrow(flexContainerNodeRef.current) == 0\r\n\t\t)\r\n\t\t\treturn;\r\n\r\n\t\tconst parent = flexContainerNodeRef.current.parentElement;\r\n\t\tif (!parent) return;\r\n\r\n\t\tconst sizeName =\r\n\t\t\tfitContent.charAt(0).toUpperCase() + fitContent.substring(1);\r\n\t\tconst parentSize =\r\n\t\t\t(parent[\r\n\t\t\t\t(\"client\" + sizeName) as \"clientWidth\" | \"clientHeight\"\r\n\t\t\t] as number) || 0;\r\n\r\n\t\tif (!parentSize || containerCount <= 0) return;\r\n\r\n\t\t// 내 grow 재계산 (0 ~ containerCount로 클램프)\r\n\t\tconst nextGrowRaw = mathGrow(size, parentSize, containerCount);\r\n\t\tconst nextGrow = Math.min(containerCount, Math.max(0, nextGrowRaw));\r\n\t\tconst currentGrow = getGrow(flexContainerNodeRef.current);\r\n\r\n\t\t// 미세 변화로 루프 도는 것 방지\r\n\t\tif (Math.abs(nextGrow - currentGrow) < 0.001) return;\r\n\r\n\t\tsetPrevGrowState(currentGrow);\r\n\t\tsetGrowState(nextGrow);\r\n\r\n\t\t// 형제 컨테이너 grow 재분배\r\n\t\tconst containers = [...(parent.children || [])].filter((el) => {\r\n\t\t\tconst item = el as HTMLElement;\r\n\t\t\treturn (\r\n\t\t\t\titem.hasAttribute(\"data-container_name\") &&\r\n\t\t\t\t!item.classList.contains(styles[\"flex-resize-panel\"])\r\n\t\t\t);\r\n\t\t}) as HTMLElement[];\r\n\r\n\t\tconst siblings = containers.filter(\r\n\t\t\t(el) => el !== (flexContainerNodeRef.current as HTMLElement),\r\n\t\t);\r\n\r\n\t\t// 닫힌 컨테이너는 건드리지 않음\r\n\t\tconst adjustable = siblings.filter((el) => el.style.flex !== \"0 1 0%\");\r\n\r\n\t\tconst remaining = containerCount - nextGrow;\r\n\t\tif (remaining <= 0 || adjustable.length === 0) return;\r\n\r\n\t\tconst oldSum = adjustable.reduce((sum, el) => sum + getGrow(el), 0);\r\n\r\n\t\tif (oldSum <= 0) {\r\n\t\t\t// 기존 grow 합이 0이면 균등분배\r\n\t\t\tconst each = remaining / adjustable.length;\r\n\t\t\tadjustable.forEach((el) => {\r\n\t\t\t\tel.dataset.grow = each.toString();\r\n\t\t\t\tel.style.flex = `${each} 1 0%`;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t// 기존 grow 비율대로 스케일링\r\n\t\t\tadjustable.forEach((el) => {\r\n\t\t\t\tconst g = getGrow(el);\r\n\t\t\t\tconst scaled = remaining * (g / oldSum);\r\n\t\t\t\tel.dataset.grow = scaled.toString();\r\n\t\t\t\tel.style.flex = `${scaled} 1 0%`;\r\n\t\t\t});\r\n\t\t}\r\n\t}, [size, isFitContent, fitContent, containerCount]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<div\r\n\t\t\t\tid={containerName}\r\n\t\t\t\tdata-container_name={containerName}\r\n\t\t\t\tref={flexContainerRef}\r\n\t\t\t\tclassName={`${styles[\"flex-container\"]} ${className && className !== \"\" ? className : \"\"}`}\r\n\t\t\t\t{...(growState !== undefined\r\n\t\t\t\t\t? { [\"data-grow\"]: growState }\r\n\t\t\t\t\t: {})}\r\n\t\t\t\t{...(prevGrowState != undefined\r\n\t\t\t\t\t? { [\"data-prev_grow\"]: prevGrowState }\r\n\t\t\t\t\t: {})}\r\n\t\t\t\tdata-is_resize={isInitialResizable}\r\n\t\t\t\tdata-is_resize_panel={isResizePanel}\r\n\t\t\t\tstyle={\r\n\t\t\t\t\t(growState !== undefined && {\r\n\t\t\t\t\t\tflex: `${growState} 1 0%`,\r\n\t\t\t\t\t}) ||\r\n\t\t\t\t\t{}\r\n\t\t\t\t}\r\n\t\t\t>\r\n\t\t\t\t{(isFitContent && (\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclassName={`${styles[\"flex-content-fit-wrapper\"]}`}\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)) ||\r\n\t\t\t\t\tchildren}\r\n\t\t\t</div>\r\n\t\t\t{isResizePanel && (\r\n\t\t\t\t<FlexLayoutResizePanel\r\n\t\t\t\t\tcontainerName={containerName}\r\n\t\t\t\t\tlayoutName={layoutName}\r\n\t\t\t\t\tdirection={direction}\r\n\t\t\t\t\tcontainerCount={containerCount}\r\n\t\t\t\t\tpanelMode={panelMode}\r\n\t\t\t\t\tpanelClassName={panelClassName}\r\n\t\t\t\t\tpanelMovementMode={panelMovementMode}\r\n\t\t\t\t\tonResizingChange={handleResizingChange}\r\n\t\t\t\t/>\r\n\t\t\t)}\r\n\t\t</>\r\n\t);\r\n}\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var FlexLayoutIFramePane_exports = {};
21
+ __export(FlexLayoutIFramePane_exports, {
22
+ FlexLayoutIFramePane: () => FlexLayoutIFramePane
23
+ });
24
+ module.exports = __toCommonJS(FlexLayoutIFramePane_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_react = require("react");
27
+ var import_rxjs = require("rxjs");
28
+ var import_hooks = require("../hooks");
29
+ function FlexLayoutIFramePane({
30
+ url,
31
+ screenKey
32
+ }) {
33
+ const [blockPointer, setBlockPointer] = (0, import_react.useState)(false);
34
+ (0, import_react.useEffect)(() => {
35
+ const draggingSubject = import_hooks.dragStateSubject.pipe(
36
+ (0, import_rxjs.map)((s) => !!s?.isDragging),
37
+ (0, import_rxjs.startWith)(false),
38
+ (0, import_rxjs.distinctUntilChanged)()
39
+ );
40
+ const sub = (0, import_rxjs.combineLatest)([draggingSubject, import_hooks.isResizingSubject]).pipe(
41
+ (0, import_rxjs.map)(([dragging, resizing]) => dragging || resizing),
42
+ (0, import_rxjs.distinctUntilChanged)()
43
+ ).subscribe(setBlockPointer);
44
+ return () => sub.unsubscribe();
45
+ }, []);
46
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
47
+ "iframe",
48
+ {
49
+ src: url,
50
+ style: {
51
+ width: "100%",
52
+ height: "100%",
53
+ border: 0,
54
+ //리사이즈 및 드래깅 중 ifram이 이벤트 못먹게 방지
55
+ pointerEvents: blockPointer ? "none" : "auto"
56
+ },
57
+ sandbox: "allow-same-origin allow-scripts allow-forms allow-popups",
58
+ referrerPolicy: "no-referrer",
59
+ loading: "lazy"
60
+ },
61
+ screenKey
62
+ );
63
+ }
64
+ // Annotate the CommonJS export names for ESM import in node:
65
+ 0 && (module.exports = {
66
+ FlexLayoutIFramePane
67
+ });
68
+ //# sourceMappingURL=FlexLayoutIFramePane.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/flex-layout/components/FlexLayoutIFramePane.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { combineLatest, distinctUntilChanged, map, startWith } from \"rxjs\";\r\nimport { dragStateSubject, isResizingSubject } from \"../hooks\";\r\n\r\nexport function FlexLayoutIFramePane({\r\n\turl,\r\n\tscreenKey,\r\n}: {\r\n\turl: string;\r\n\tscreenKey?: string;\r\n}) {\r\n\tconst [blockPointer, setBlockPointer] = useState(false);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst draggingSubject = dragStateSubject.pipe(\r\n\t\t\tmap((s) => !!s?.isDragging),\r\n\t\t\tstartWith(false),\r\n\t\t\tdistinctUntilChanged(),\r\n\t\t);\r\n\r\n\t\tconst sub = combineLatest([draggingSubject, isResizingSubject])\r\n\t\t\t.pipe(\r\n\t\t\t\tmap(([dragging, resizing]) => dragging || resizing),\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t)\r\n\t\t\t.subscribe(setBlockPointer);\r\n\r\n\t\treturn () => sub.unsubscribe();\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t<iframe\r\n\t\t\tkey={screenKey}\r\n\t\t\tsrc={url}\r\n\t\t\tstyle={{\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\theight: \"100%\",\r\n\t\t\t\tborder: 0,\r\n\t\t\t\t//리사이즈 및 드래깅 중 ifram이 이벤트 못먹게 방지\r\n\t\t\t\tpointerEvents: blockPointer ? \"none\" : \"auto\",\r\n\t\t\t}}\r\n\t\t\tsandbox=\"allow-same-origin allow-scripts allow-forms allow-popups\"\r\n\t\t\treferrerPolicy=\"no-referrer\"\r\n\t\t\tloading=\"lazy\"\r\n\t\t/>\r\n\t);\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCE;AA/BF,mBAAoC;AACpC,kBAAoE;AACpE,mBAAoD;AAE7C,SAAS,qBAAqB;AAAA,EACpC;AAAA,EACA;AACD,GAGG;AACF,QAAM,CAAC,cAAc,eAAe,QAAI,uBAAS,KAAK;AAEtD,8BAAU,MAAM;AACf,UAAM,kBAAkB,8BAAiB;AAAA,UACxC,iBAAI,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU;AAAA,UAC1B,uBAAU,KAAK;AAAA,UACf,kCAAqB;AAAA,IACtB;AAEA,UAAM,UAAM,2BAAc,CAAC,iBAAiB,8BAAiB,CAAC,EAC5D;AAAA,UACA,iBAAI,CAAC,CAAC,UAAU,QAAQ,MAAM,YAAY,QAAQ;AAAA,UAClD,kCAAqB;AAAA,IACtB,EACC,UAAU,eAAe;AAE3B,WAAO,MAAM,IAAI,YAAY;AAAA,EAC9B,GAAG,CAAC,CAAC;AAEL,SACC;AAAA,IAAC;AAAA;AAAA,MAEA,KAAK;AAAA,MACL,OAAO;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ;AAAA;AAAA,QAER,eAAe,eAAe,SAAS;AAAA,MACxC;AAAA,MACA,SAAQ;AAAA,MACR,gBAAe;AAAA,MACf,SAAQ;AAAA;AAAA,IAXH;AAAA,EAYN;AAEF;","names":[]}
@@ -0,0 +1,4 @@
1
+ export declare function FlexLayoutIFramePane({ url, screenKey, }: {
2
+ url: string;
3
+ screenKey?: string;
4
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useEffect, useState } from "react";
4
+ import { combineLatest, distinctUntilChanged, map, startWith } from "rxjs";
5
+ import { dragStateSubject, isResizingSubject } from "../hooks";
6
+ function FlexLayoutIFramePane({
7
+ url,
8
+ screenKey
9
+ }) {
10
+ const [blockPointer, setBlockPointer] = useState(false);
11
+ useEffect(() => {
12
+ const draggingSubject = dragStateSubject.pipe(
13
+ map((s) => !!s?.isDragging),
14
+ startWith(false),
15
+ distinctUntilChanged()
16
+ );
17
+ const sub = combineLatest([draggingSubject, isResizingSubject]).pipe(
18
+ map(([dragging, resizing]) => dragging || resizing),
19
+ distinctUntilChanged()
20
+ ).subscribe(setBlockPointer);
21
+ return () => sub.unsubscribe();
22
+ }, []);
23
+ return /* @__PURE__ */ jsx(
24
+ "iframe",
25
+ {
26
+ src: url,
27
+ style: {
28
+ width: "100%",
29
+ height: "100%",
30
+ border: 0,
31
+ //리사이즈 및 드래깅 중 ifram이 이벤트 못먹게 방지
32
+ pointerEvents: blockPointer ? "none" : "auto"
33
+ },
34
+ sandbox: "allow-same-origin allow-scripts allow-forms allow-popups",
35
+ referrerPolicy: "no-referrer",
36
+ loading: "lazy"
37
+ },
38
+ screenKey
39
+ );
40
+ }
41
+ export {
42
+ FlexLayoutIFramePane
43
+ };
44
+ //# sourceMappingURL=FlexLayoutIFramePane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/flex-layout/components/FlexLayoutIFramePane.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { combineLatest, distinctUntilChanged, map, startWith } from \"rxjs\";\r\nimport { dragStateSubject, isResizingSubject } from \"../hooks\";\r\n\r\nexport function FlexLayoutIFramePane({\r\n\turl,\r\n\tscreenKey,\r\n}: {\r\n\turl: string;\r\n\tscreenKey?: string;\r\n}) {\r\n\tconst [blockPointer, setBlockPointer] = useState(false);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst draggingSubject = dragStateSubject.pipe(\r\n\t\t\tmap((s) => !!s?.isDragging),\r\n\t\t\tstartWith(false),\r\n\t\t\tdistinctUntilChanged(),\r\n\t\t);\r\n\r\n\t\tconst sub = combineLatest([draggingSubject, isResizingSubject])\r\n\t\t\t.pipe(\r\n\t\t\t\tmap(([dragging, resizing]) => dragging || resizing),\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t)\r\n\t\t\t.subscribe(setBlockPointer);\r\n\r\n\t\treturn () => sub.unsubscribe();\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t<iframe\r\n\t\t\tkey={screenKey}\r\n\t\t\tsrc={url}\r\n\t\t\tstyle={{\r\n\t\t\t\twidth: \"100%\",\r\n\t\t\t\theight: \"100%\",\r\n\t\t\t\tborder: 0,\r\n\t\t\t\t//리사이즈 및 드래깅 중 ifram이 이벤트 못먹게 방지\r\n\t\t\t\tpointerEvents: blockPointer ? \"none\" : \"auto\",\r\n\t\t\t}}\r\n\t\t\tsandbox=\"allow-same-origin allow-scripts allow-forms allow-popups\"\r\n\t\t\treferrerPolicy=\"no-referrer\"\r\n\t\t\tloading=\"lazy\"\r\n\t\t/>\r\n\t);\r\n}\r\n"],"mappings":";AAiCE;AA/BF,SAAS,WAAW,gBAAgB;AACpC,SAAS,eAAe,sBAAsB,KAAK,iBAAiB;AACpE,SAAS,kBAAkB,yBAAyB;AAE7C,SAAS,qBAAqB;AAAA,EACpC;AAAA,EACA;AACD,GAGG;AACF,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AAEtD,YAAU,MAAM;AACf,UAAM,kBAAkB,iBAAiB;AAAA,MACxC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU;AAAA,MAC1B,UAAU,KAAK;AAAA,MACf,qBAAqB;AAAA,IACtB;AAEA,UAAM,MAAM,cAAc,CAAC,iBAAiB,iBAAiB,CAAC,EAC5D;AAAA,MACA,IAAI,CAAC,CAAC,UAAU,QAAQ,MAAM,YAAY,QAAQ;AAAA,MAClD,qBAAqB;AAAA,IACtB,EACC,UAAU,eAAe;AAE3B,WAAO,MAAM,IAAI,YAAY;AAAA,EAC9B,GAAG,CAAC,CAAC;AAEL,SACC;AAAA,IAAC;AAAA;AAAA,MAEA,KAAK;AAAA,MACL,OAAO;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ;AAAA;AAAA,QAER,eAAe,eAAe,SAAS;AAAA,MACxC;AAAA,MACA,SAAQ;AAAA,MACR,gBAAe;AAAA,MACf,SAAQ;AAAA;AAAA,IAXH;AAAA,EAYN;AAEF;","names":[]}
@@ -1,15 +1,43 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var react = require('react');
5
- var FlexLayoutContainerStore = require('../store/FlexLayoutContainerStore');
6
- var styles = require('../styles/FlexLayout.module.css');
7
- var FlexLayoutUtils = require('../utils/FlexLayoutUtils');
8
-
9
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
-
11
- var styles__default = /*#__PURE__*/_interopDefault(styles);
12
-
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var FlexLayoutResizePanel_exports = {};
31
+ __export(FlexLayoutResizePanel_exports, {
32
+ default: () => FlexLayoutResizePanel
33
+ });
34
+ module.exports = __toCommonJS(FlexLayoutResizePanel_exports);
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_react = require("react");
37
+ var import_hooks = require("../hooks");
38
+ var import_FlexLayoutContainerStore = require("../store/FlexLayoutContainerStore");
39
+ var import_FlexLayout = __toESM(require("../styles/FlexLayout.module.css"), 1);
40
+ var import_FlexLayoutUtils = require("../utils/FlexLayoutUtils");
13
41
  const flexDirectionModel = {
14
42
  row: {
15
43
  xy: "x",
@@ -33,55 +61,69 @@ function FlexLayoutResizePanel({
33
61
  containerName,
34
62
  layoutName,
35
63
  panelClassName,
36
- panelMovementMode
64
+ panelMovementMode,
65
+ onResizingChange
37
66
  }) {
38
- let isResizePanelClickRef = react.useRef(false);
39
- let prevTouchEvent = null;
40
- let parentSizeRef = react.useRef(0);
41
- let totalMovementRef = react.useRef(0);
42
- const containerCountRef = react.useRef(containerCount);
43
- react.useEffect(() => {
67
+ const directionRef = (0, import_react.useRef)(direction);
68
+ const movementModeRef = (0, import_react.useRef)(panelMovementMode);
69
+ (0, import_react.useEffect)(() => {
70
+ directionRef.current = direction;
71
+ }, [direction]);
72
+ (0, import_react.useEffect)(() => {
73
+ movementModeRef.current = panelMovementMode;
74
+ }, [panelMovementMode]);
75
+ const isResizePanelClickRef = (0, import_react.useRef)(false);
76
+ const prevTouchEventRef = (0, import_react.useRef)(null);
77
+ const parentSizeRef = (0, import_react.useRef)(0);
78
+ const totalMovementRef = (0, import_react.useRef)(0);
79
+ const containerCountRef = (0, import_react.useRef)(containerCount);
80
+ const panelRef = (0, import_react.useRef)(null);
81
+ (0, import_react.useEffect)(() => {
44
82
  return () => {
83
+ import_hooks.isResizingSubject.next(false);
45
84
  document.body.style.cursor = "";
46
85
  };
47
86
  }, []);
48
- react.useEffect(() => {
87
+ (0, import_react.useEffect)(() => {
49
88
  containerCountRef.current = containerCount;
50
89
  }, [containerCount]);
51
- const panelRef = react.useRef(null);
52
90
  const panelMouseDownEvent = (event) => {
53
91
  if (!panelRef.current || !panelRef.current.parentElement) return;
54
92
  isResizePanelClickRef.current = true;
93
+ onResizingChange?.(true);
55
94
  containerCountRef.current = [
56
95
  ...panelRef.current.parentElement.children
57
96
  ].filter((e) => e.hasAttribute("data-container_name")).length;
58
97
  const sizeName = flexDirectionModel[direction].sizeName;
59
98
  parentSizeRef.current = panelRef.current.parentElement.getBoundingClientRect()[sizeName];
60
- prevTouchEvent = null;
99
+ prevTouchEventRef.current = null;
61
100
  totalMovementRef.current = 0;
101
+ import_hooks.isResizingSubject.next(true);
62
102
  if (!parentSizeRef.current) return;
63
103
  document.body.style.cursor = flexDirectionModel[direction].resizeCursor;
64
104
  };
65
105
  const panelMouseUpEvent = () => {
66
106
  isResizePanelClickRef.current = false;
107
+ onResizingChange?.(false);
67
108
  parentSizeRef.current = 0;
68
- prevTouchEvent = null;
69
109
  totalMovementRef.current = 0;
110
+ prevTouchEventRef.current = null;
111
+ import_hooks.isResizingSubject.next(false);
70
112
  document.body.style.cursor = "";
71
113
  };
72
- function moveMouseFlex(originTarget, resizePanel, moveEvent) {
73
- const model = flexDirectionModel[direction];
114
+ function moveMouseFlex(originTarget, resizePanel, moveEvent, dir, mode) {
115
+ const model = flexDirectionModel[dir];
74
116
  const movement = moveEvent["movement" + model.xy.toUpperCase()];
75
117
  totalMovementRef.current += movement;
76
118
  const minSizeName = "min-" + model.sizeName;
77
119
  const maxSizeName = "max-" + model.sizeName;
78
- let targetElement = FlexLayoutUtils.findNotCloseFlexContent(
120
+ let targetElement = (0, import_FlexLayoutUtils.findNotCloseFlexContent)(
79
121
  originTarget,
80
122
  "previousElementSibling"
81
123
  );
82
124
  if (panelMovementMode === "divorce" && totalMovementRef.current > 0 || panelMovementMode === "bulldozer" && movement > 0 || !targetElement)
83
125
  targetElement = originTarget;
84
- let nextElement = FlexLayoutUtils.findNotCloseFlexContent(
126
+ let nextElement = (0, import_FlexLayoutUtils.findNotCloseFlexContent)(
85
127
  resizePanel.nextElementSibling,
86
128
  "nextElementSibling"
87
129
  );
@@ -104,10 +146,10 @@ function FlexLayoutResizePanel({
104
146
  if (nextMaxSize > 0 && nextElementSize > nextMaxSize) {
105
147
  return;
106
148
  }
107
- if (FlexLayoutUtils.isOverMove(targetSize, targetMinSize)) {
149
+ if ((0, import_FlexLayoutUtils.isOverMove)(targetSize, targetMinSize)) {
108
150
  targetSize = 0;
109
151
  nextElementSize = nextRect[model.sizeName];
110
- } else if (FlexLayoutUtils.isOverMove(nextElementSize, nextMinSize)) {
152
+ } else if ((0, import_FlexLayoutUtils.isOverMove)(nextElementSize, nextMinSize)) {
111
153
  nextElementSize = 0;
112
154
  targetSize = targetRect[model.sizeName];
113
155
  }
@@ -118,64 +160,87 @@ function FlexLayoutResizePanel({
118
160
  targetElement.style.flex = `${targetFlexGrow} 1 0%`;
119
161
  nextElement.style.flex = `${nextElementFlexGrow} 1 0%`;
120
162
  }
121
- react.useEffect(() => {
163
+ (0, import_react.useEffect)(() => {
122
164
  const addGlobalMoveEvent = (event) => {
123
165
  if (!isResizePanelClickRef.current || !panelRef.current) {
124
166
  return;
125
167
  }
126
168
  event.preventDefault();
169
+ const dir = directionRef.current;
170
+ const mode = movementModeRef.current;
127
171
  const targetElement = panelRef.current.previousElementSibling;
128
172
  const targetPanel = panelRef.current;
129
173
  if (!targetElement || !targetPanel) return;
130
174
  let move = { movementX: 0, movementY: 0 };
131
175
  if (window.TouchEvent && event instanceof window.TouchEvent) {
132
- if (!prevTouchEvent) {
133
- prevTouchEvent = event;
176
+ const prev = prevTouchEventRef.current;
177
+ if (!prev) {
178
+ prevTouchEventRef.current = event;
134
179
  return;
135
180
  }
136
- move.movementX = (prevTouchEvent.touches[0].pageX - event.touches[0].pageX) * -2;
137
- move.movementY = (prevTouchEvent.touches[0].pageY - event.touches[0].pageY) * -2;
138
- prevTouchEvent = event;
181
+ move.movementX = (prev.touches[0].pageX - event.touches[0].pageX) * -1;
182
+ move.movementY = (prev.touches[0].pageY - event.touches[0].pageY) * -1;
183
+ prevTouchEventRef.current = event;
139
184
  } else {
140
185
  move.movementX = event.movementX;
141
186
  move.movementY = event.movementY;
142
187
  }
143
- moveMouseFlex(targetElement, targetPanel, move);
188
+ moveMouseFlex(targetElement, targetPanel, move, dir, mode);
144
189
  };
145
190
  ["mousemove", "touchmove"].forEach((eventName) => {
146
191
  window.addEventListener(eventName, addGlobalMoveEvent, {
147
192
  passive: false
148
193
  });
149
194
  });
150
- ["mouseup", "touchend"].forEach((eventName) => {
195
+ [
196
+ "mouseup",
197
+ "touchend",
198
+ "touchcancel",
199
+ // 터치 제스처 시스템 인터럽트
200
+ "pointerup",
201
+ // 범용 포인터 이벤트
202
+ "pointercancel",
203
+ "blur"
204
+ // 윈도우 포커스 아웃 (Alt+Tab 등)
205
+ ].forEach((eventName) => {
151
206
  window.addEventListener(eventName, panelMouseUpEvent);
152
207
  });
153
208
  return () => {
154
209
  ["mousemove", "touchmove"].forEach((eventName) => {
155
210
  window.removeEventListener(eventName, addGlobalMoveEvent);
156
211
  });
157
- ["mouseup", "touchend"].forEach((eventName) => {
212
+ [
213
+ "mouseup",
214
+ "touchend",
215
+ "touchcancel",
216
+ // 터치 제스처 시스템 인터럽트
217
+ "pointerup",
218
+ // 범용 포인터 이벤트
219
+ "pointercancel",
220
+ "blur"
221
+ // 윈도우 포커스 아웃 (Alt+Tab 등)
222
+ ].forEach((eventName) => {
158
223
  window.removeEventListener(eventName, panelMouseUpEvent);
159
224
  });
160
225
  };
161
226
  }, []);
162
- react.useEffect(() => {
227
+ (0, import_react.useEffect)(() => {
163
228
  if (!panelRef.current) return;
164
- FlexLayoutContainerStore.setResizePanelRef(layoutName, containerName, panelRef);
229
+ (0, import_FlexLayoutContainerStore.setResizePanelRef)(layoutName, containerName, panelRef);
230
+ return () => {
231
+ (0, import_FlexLayoutContainerStore.setResizePanelRef)(layoutName, containerName, null);
232
+ };
165
233
  }, [containerName, layoutName]);
166
- return /* @__PURE__ */ jsxRuntime.jsx(
234
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
167
235
  "div",
168
236
  {
169
237
  id: containerName + "_resize_panel",
170
- className: `${styles__default.default["flex-resize-panel"]} ${styles__default.default[panelMode]} ${panelClassName && panelClassName !== "" ? panelClassName : ""}`,
238
+ className: `${import_FlexLayout.default["flex-resize-panel"]} ${import_FlexLayout.default[panelMode]} ${panelClassName && panelClassName !== "" ? panelClassName : ""}`,
171
239
  ref: panelRef,
172
240
  onMouseDown: panelMouseDownEvent,
173
241
  onTouchStart: panelMouseDownEvent,
174
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles__default.default.hover })
242
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: import_FlexLayout.default.hover })
175
243
  }
176
244
  );
177
245
  }
178
-
179
- module.exports = FlexLayoutResizePanel;
180
- //# sourceMappingURL=FlexLayoutResizePanel.cjs.map
181
246
  //# sourceMappingURL=FlexLayoutResizePanel.cjs.map