@byeolnaerim/flex-layout 0.0.5 → 0.0.7

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 (173) hide show
  1. package/README.en.md +314 -0
  2. package/README.ko.md +312 -0
  3. package/README.md +314 -0
  4. package/dist/flex-layout/components/FlexLayout.cjs +76 -0
  5. package/dist/flex-layout/components/FlexLayout.cjs.map +1 -0
  6. package/dist/flex-layout/components/FlexLayout.d.ts +2 -0
  7. package/dist/flex-layout/components/FlexLayout.js +70 -0
  8. package/dist/flex-layout/components/FlexLayout.js.map +1 -0
  9. package/dist/flex-layout/components/FlexLayoutContainer.cjs +196 -0
  10. package/dist/flex-layout/components/FlexLayoutContainer.cjs.map +1 -0
  11. package/dist/flex-layout/components/FlexLayoutContainer.d.ts +2 -0
  12. package/dist/flex-layout/components/FlexLayoutContainer.js +189 -0
  13. package/dist/flex-layout/components/FlexLayoutContainer.js.map +1 -0
  14. package/dist/flex-layout/components/FlexLayoutResizePanel.cjs +181 -0
  15. package/dist/flex-layout/components/FlexLayoutResizePanel.cjs.map +1 -0
  16. package/dist/flex-layout/components/FlexLayoutResizePanel.d.ts +2 -0
  17. package/dist/flex-layout/components/FlexLayoutResizePanel.js +175 -0
  18. package/dist/flex-layout/components/FlexLayoutResizePanel.js.map +1 -0
  19. package/dist/flex-layout/components/FlexLayoutSplitScreen.cjs +1211 -0
  20. package/dist/flex-layout/components/FlexLayoutSplitScreen.cjs.map +1 -0
  21. package/dist/flex-layout/components/FlexLayoutSplitScreen.d.ts +11 -0
  22. package/dist/flex-layout/components/FlexLayoutSplitScreen.js +1197 -0
  23. package/dist/flex-layout/components/FlexLayoutSplitScreen.js.map +1 -0
  24. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.cjs +339 -0
  25. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.cjs.map +1 -0
  26. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.d.ts +27 -0
  27. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.js +333 -0
  28. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.js.map +1 -0
  29. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.cjs +32 -0
  30. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.cjs.map +1 -0
  31. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.d.ts +5 -0
  32. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.js +25 -0
  33. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.js.map +1 -0
  34. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.cjs +40 -0
  35. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.cjs.map +1 -0
  36. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.d.ts +8 -0
  37. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.js +34 -0
  38. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.js.map +1 -0
  39. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.cjs +30 -0
  40. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.cjs.map +1 -0
  41. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.d.ts +4 -0
  42. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.js +24 -0
  43. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.js.map +1 -0
  44. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.cjs +109 -0
  45. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.cjs.map +1 -0
  46. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.d.ts +9 -0
  47. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.js +103 -0
  48. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.js.map +1 -0
  49. package/dist/flex-layout/components/FlexLayoutStickyBox.cjs +226 -0
  50. package/dist/flex-layout/components/FlexLayoutStickyBox.cjs.map +1 -0
  51. package/dist/flex-layout/components/FlexLayoutStickyBox.d.ts +29 -0
  52. package/dist/flex-layout/components/FlexLayoutStickyBox.js +224 -0
  53. package/dist/flex-layout/components/FlexLayoutStickyBox.js.map +1 -0
  54. package/dist/flex-layout/components/index.cjs +52 -0
  55. package/dist/flex-layout/components/index.cjs.map +1 -0
  56. package/dist/flex-layout/components/index.d.ts +7 -0
  57. package/dist/flex-layout/components/index.js +9 -0
  58. package/dist/flex-layout/components/index.js.map +1 -0
  59. package/dist/flex-layout/hooks/index.cjs +21 -0
  60. package/dist/flex-layout/hooks/index.cjs.map +1 -0
  61. package/dist/flex-layout/hooks/index.d.ts +2 -0
  62. package/dist/flex-layout/hooks/index.js +4 -0
  63. package/dist/flex-layout/hooks/index.js.map +1 -0
  64. package/dist/{hooks.cjs → flex-layout/hooks/useDrag.cjs} +15 -208
  65. package/dist/flex-layout/hooks/useDrag.cjs.map +1 -0
  66. package/dist/{useDrag-DR01Ob3s.d.ts → flex-layout/hooks/useDrag.d.ts} +22 -25
  67. package/dist/{hooks.js → flex-layout/hooks/useDrag.js} +13 -203
  68. package/dist/flex-layout/hooks/useDrag.js.map +1 -0
  69. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.cjs +118 -0
  70. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.cjs.map +1 -0
  71. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.d.ts +28 -0
  72. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.js +116 -0
  73. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.js.map +1 -0
  74. package/dist/flex-layout/hooks/useListPaging.cjs +179 -0
  75. package/dist/flex-layout/hooks/useListPaging.cjs.map +1 -0
  76. package/dist/{hooks.d.ts → flex-layout/hooks/useListPaging.d.ts} +6 -12
  77. package/dist/flex-layout/hooks/useListPaging.js +175 -0
  78. package/dist/flex-layout/hooks/useListPaging.js.map +1 -0
  79. package/dist/flex-layout/hooks/useSizes.cjs +104 -0
  80. package/dist/flex-layout/hooks/useSizes.cjs.map +1 -0
  81. package/dist/flex-layout/hooks/useSizes.d.ts +8 -0
  82. package/dist/flex-layout/hooks/useSizes.js +101 -0
  83. package/dist/flex-layout/hooks/useSizes.js.map +1 -0
  84. package/dist/flex-layout/index.cjs +42 -0
  85. package/dist/flex-layout/index.cjs.map +1 -0
  86. package/dist/flex-layout/index.d.ts +5 -0
  87. package/dist/flex-layout/index.js +7 -0
  88. package/dist/flex-layout/index.js.map +1 -0
  89. package/dist/flex-layout/providers/FlexLayoutContext.cjs +26 -0
  90. package/dist/flex-layout/providers/FlexLayoutContext.cjs.map +1 -0
  91. package/dist/flex-layout/providers/FlexLayoutContext.d.ts +9 -0
  92. package/dist/flex-layout/providers/FlexLayoutContext.js +23 -0
  93. package/dist/flex-layout/providers/FlexLayoutContext.js.map +1 -0
  94. package/dist/{providers.cjs → flex-layout/providers/FlexLayoutHooks.cjs} +22 -186
  95. package/dist/flex-layout/providers/FlexLayoutHooks.cjs.map +1 -0
  96. package/dist/flex-layout/providers/FlexLayoutHooks.d.ts +51 -0
  97. package/dist/{providers.js → flex-layout/providers/FlexLayoutHooks.js} +14 -178
  98. package/dist/flex-layout/providers/FlexLayoutHooks.js.map +1 -0
  99. package/dist/flex-layout/providers/index.cjs +14 -0
  100. package/dist/flex-layout/providers/index.cjs.map +1 -0
  101. package/dist/flex-layout/providers/index.d.ts +1 -0
  102. package/dist/flex-layout/providers/index.js +3 -0
  103. package/dist/flex-layout/providers/index.js.map +1 -0
  104. package/dist/{store.cjs → flex-layout/store/FlexLayoutContainerStore.cjs} +20 -21
  105. package/dist/flex-layout/store/FlexLayoutContainerStore.cjs.map +1 -0
  106. package/dist/flex-layout/store/FlexLayoutContainerStore.d.ts +62 -0
  107. package/dist/{store.js → flex-layout/store/FlexLayoutContainerStore.js} +20 -21
  108. package/dist/flex-layout/store/FlexLayoutContainerStore.js.map +1 -0
  109. package/dist/flex-layout/store/index.cjs +14 -0
  110. package/dist/flex-layout/store/index.cjs.map +1 -0
  111. package/dist/flex-layout/store/index.d.ts +1 -0
  112. package/dist/flex-layout/store/index.js +3 -0
  113. package/dist/flex-layout/store/index.js.map +1 -0
  114. package/dist/flex-layout/styles/FlexLayout.module.css +416 -0
  115. package/dist/flex-layout/styles/listScroll.module.css +85 -0
  116. package/dist/flex-layout/styles/shake.module.css +41 -0
  117. package/dist/flex-layout/types/FlexDirectionTypes.cjs +4 -0
  118. package/dist/flex-layout/types/FlexDirectionTypes.cjs.map +1 -0
  119. package/dist/flex-layout/types/FlexDirectionTypes.d.ts +6 -0
  120. package/dist/flex-layout/types/FlexDirectionTypes.js +3 -0
  121. package/dist/flex-layout/types/FlexDirectionTypes.js.map +1 -0
  122. package/dist/flex-layout/types/FlexLayoutTypes.cjs +4 -0
  123. package/dist/flex-layout/types/FlexLayoutTypes.cjs.map +1 -0
  124. package/dist/flex-layout/types/FlexLayoutTypes.d.ts +53 -0
  125. package/dist/flex-layout/types/FlexLayoutTypes.js +3 -0
  126. package/dist/flex-layout/types/FlexLayoutTypes.js.map +1 -0
  127. package/dist/{utils.cjs → flex-layout/utils/FlexLayoutUtils.cjs} +3 -4
  128. package/dist/flex-layout/utils/FlexLayoutUtils.cjs.map +1 -0
  129. package/dist/flex-layout/utils/FlexLayoutUtils.d.ts +26 -0
  130. package/dist/{utils.js → flex-layout/utils/FlexLayoutUtils.js} +3 -4
  131. package/dist/flex-layout/utils/FlexLayoutUtils.js.map +1 -0
  132. package/dist/flex-layout/utils/index.cjs +14 -0
  133. package/dist/flex-layout/utils/index.cjs.map +1 -0
  134. package/dist/flex-layout/utils/index.d.ts +1 -0
  135. package/dist/flex-layout/utils/index.js +3 -0
  136. package/dist/flex-layout/utils/index.js.map +1 -0
  137. package/dist/index.cjs +10 -0
  138. package/dist/index.cjs.map +1 -1
  139. package/dist/index.d.ts +1 -2
  140. package/dist/index.js +1 -1
  141. package/dist/index.js.map +1 -1
  142. package/dist/types/css.d.cjs +4 -0
  143. package/dist/types/css.d.cjs.map +1 -0
  144. package/dist/types/css.d.js +3 -0
  145. package/dist/types/css.d.js.map +1 -0
  146. package/package.json +27 -44
  147. package/dist/FlexLayoutSplitScreenDragBox-eCtq4kLd.d.cts +0 -31
  148. package/dist/FlexLayoutSplitScreenDragBox-eCtq4kLd.d.ts +0 -31
  149. package/dist/components.cjs +0 -3048
  150. package/dist/components.cjs.map +0 -1
  151. package/dist/components.css +0 -471
  152. package/dist/components.css.map +0 -1
  153. package/dist/components.d.cts +0 -122
  154. package/dist/components.d.ts +0 -122
  155. package/dist/components.js +0 -3036
  156. package/dist/components.js.map +0 -1
  157. package/dist/hooks.cjs.map +0 -1
  158. package/dist/hooks.d.cts +0 -37
  159. package/dist/hooks.js.map +0 -1
  160. package/dist/index.d.cts +0 -2
  161. package/dist/providers.cjs.map +0 -1
  162. package/dist/providers.d.cts +0 -54
  163. package/dist/providers.d.ts +0 -54
  164. package/dist/providers.js.map +0 -1
  165. package/dist/store.cjs.map +0 -1
  166. package/dist/store.d.cts +0 -67
  167. package/dist/store.d.ts +0 -67
  168. package/dist/store.js.map +0 -1
  169. package/dist/useDrag-CYQnhUFk.d.cts +0 -108
  170. package/dist/utils.cjs.map +0 -1
  171. package/dist/utils.d.cts +0 -28
  172. package/dist/utils.d.ts +0 -28
  173. package/dist/utils.js.map +0 -1
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var FlexLayoutHooks = require('./FlexLayoutHooks');
4
+
5
+
6
+
7
+ Object.keys(FlexLayoutHooks).forEach(function (k) {
8
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
9
+ enumerable: true,
10
+ get: function () { return FlexLayoutHooks[k]; }
11
+ });
12
+ });
13
+ //# sourceMappingURL=index.cjs.map
14
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs","sourcesContent":[]}
@@ -0,0 +1 @@
1
+ export * from "./FlexLayoutHooks";
@@ -0,0 +1,3 @@
1
+ export * from './FlexLayoutHooks';
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
@@ -8,7 +8,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
8
 
9
9
  var equal__default = /*#__PURE__*/_interopDefault(equal);
10
10
 
11
- // src/flex-layout/store/FlexLayoutContainerStore.ts
12
11
  function updateScrollStore(subject, newValue) {
13
12
  const currentValue = subject.getValue();
14
13
  if (!equal__default.default(currentValue, newValue)) {
@@ -27,9 +26,9 @@ function updateSplitScreenStore(newValue) {
27
26
  layoutSplitScreenStore.next(newValue);
28
27
  }
29
28
  }
30
- var scrollPositions = {};
31
- var scrollPositionsSubject = new rxjs.BehaviorSubject(scrollPositions);
32
- var setScrollPosition = (layoutName, position) => {
29
+ const scrollPositions = {};
30
+ const scrollPositionsSubject = new rxjs.BehaviorSubject(scrollPositions);
31
+ const setScrollPosition = (layoutName, position) => {
33
32
  const current = scrollPositionsSubject.getValue();
34
33
  const prevPos = current[layoutName];
35
34
  if (prevPos && prevPos.x === position.x && prevPos.y === position.y) {
@@ -41,7 +40,7 @@ var setScrollPosition = (layoutName, position) => {
41
40
  };
42
41
  updateScrollStore(scrollPositionsSubject, newPositions);
43
42
  };
44
- var getScrollPosition = (layoutName) => {
43
+ const getScrollPosition = (layoutName) => {
45
44
  return scrollPositionsSubject.pipe(
46
45
  // 해당 layoutName이 정의되지 않았을 때는 제외
47
46
  operators.filter((e) => e[layoutName] !== void 0),
@@ -51,14 +50,14 @@ var getScrollPosition = (layoutName) => {
51
50
  )
52
51
  );
53
52
  };
54
- var removeScrollPosition = (layoutName) => {
53
+ const removeScrollPosition = (layoutName) => {
55
54
  const current = scrollPositionsSubject.getValue();
56
55
  delete current[layoutName];
57
56
  const newPositions = { ...current };
58
57
  updateScrollStore(scrollPositionsSubject, newPositions);
59
58
  };
60
- var layoutSplitScreenStore = new rxjs.BehaviorSubject({});
61
- var setSplitScreen = (rootName, layoutName, newComponents) => {
59
+ const layoutSplitScreenStore = new rxjs.BehaviorSubject({});
60
+ const setSplitScreen = (rootName, layoutName, newComponents) => {
62
61
  const current = layoutSplitScreenStore.getValue();
63
62
  const updatedLayout = { ...current[rootName] || {} };
64
63
  updatedLayout[layoutName] = newComponents;
@@ -68,7 +67,7 @@ var setSplitScreen = (rootName, layoutName, newComponents) => {
68
67
  };
69
68
  updateSplitScreenStore(newStoreValue);
70
69
  };
71
- var resetRootSplitScreen = (rootName) => {
70
+ const resetRootSplitScreen = (rootName) => {
72
71
  const current = layoutSplitScreenStore.getValue();
73
72
  const newStoreValue = {
74
73
  ...current,
@@ -76,7 +75,7 @@ var resetRootSplitScreen = (rootName) => {
76
75
  };
77
76
  updateSplitScreenStore(newStoreValue);
78
77
  };
79
- var removeSplitScreenChild = (rootName, layoutName) => {
78
+ const removeSplitScreenChild = (rootName, layoutName) => {
80
79
  const current = layoutSplitScreenStore.getValue();
81
80
  if (!current[rootName]) return;
82
81
  const updatedLayout = { ...current[rootName] };
@@ -87,12 +86,12 @@ var removeSplitScreenChild = (rootName, layoutName) => {
87
86
  };
88
87
  updateSplitScreenStore(newStoreValue);
89
88
  };
90
- var getCurrentSplitScreenComponents = (rootName, layoutName) => {
89
+ const getCurrentSplitScreenComponents = (rootName, layoutName) => {
91
90
  const current = layoutSplitScreenStore.getValue();
92
91
  if (!current[rootName]) return;
93
92
  return current[rootName][layoutName];
94
93
  };
95
- var getSplitScreen = (rootName, layoutName) => {
94
+ const getSplitScreen = (rootName, layoutName) => {
96
95
  return layoutSplitScreenStore.pipe(
97
96
  operators.map((splitScreen) => splitScreen[rootName][layoutName]),
98
97
  operators.distinctUntilChanged((prev, curr) => {
@@ -104,9 +103,9 @@ var getSplitScreen = (rootName, layoutName) => {
104
103
  })
105
104
  );
106
105
  };
107
- var flexContainerStore = new rxjs.BehaviorSubject({});
108
- var flexResizePanelStore = new rxjs.BehaviorSubject({});
109
- var setContainerRef = (layoutName, containerName, ref) => {
106
+ const flexContainerStore = new rxjs.BehaviorSubject({});
107
+ const flexResizePanelStore = new rxjs.BehaviorSubject({});
108
+ const setContainerRef = (layoutName, containerName, ref) => {
110
109
  const currentRefs = flexContainerStore.getValue();
111
110
  const updatedLayoutRefs = { ...currentRefs[layoutName] || {} };
112
111
  if (ref === null) {
@@ -120,7 +119,7 @@ var setContainerRef = (layoutName, containerName, ref) => {
120
119
  };
121
120
  updateRefStore(flexContainerStore, newRefs);
122
121
  };
123
- var setResizePanelRef = (layoutName, containerName, ref) => {
122
+ const setResizePanelRef = (layoutName, containerName, ref) => {
124
123
  const currentRefs = flexResizePanelStore.getValue();
125
124
  const updatedLayoutRefs = { ...currentRefs[layoutName] || {} };
126
125
  if (ref === null) {
@@ -134,7 +133,7 @@ var setResizePanelRef = (layoutName, containerName, ref) => {
134
133
  };
135
134
  updateRefStore(flexResizePanelStore, newRefs);
136
135
  };
137
- var getLayoutInfos = (layoutName) => {
136
+ const getLayoutInfos = (layoutName) => {
138
137
  return rxjs.combineLatest([flexContainerStore, flexResizePanelStore]).pipe(
139
138
  operators.map(([containerRefs, resizePanelRefs]) => {
140
139
  const containerData = containerRefs[layoutName] || {};
@@ -148,7 +147,7 @@ var getLayoutInfos = (layoutName) => {
148
147
  // 빈 객체 제외
149
148
  );
150
149
  };
151
- var getContainerRef = ({
150
+ const getContainerRef = ({
152
151
  containerName,
153
152
  layoutName
154
153
  }) => {
@@ -165,7 +164,7 @@ var getContainerRef = ({
165
164
  operators.filter((ref) => ref !== null)
166
165
  );
167
166
  };
168
- var getResizePanelRef = ({
167
+ const getResizePanelRef = ({
169
168
  containerName,
170
169
  layoutName
171
170
  }) => {
@@ -200,5 +199,5 @@ exports.setContainerRef = setContainerRef;
200
199
  exports.setResizePanelRef = setResizePanelRef;
201
200
  exports.setScrollPosition = setScrollPosition;
202
201
  exports.setSplitScreen = setSplitScreen;
203
- //# sourceMappingURL=store.cjs.map
204
- //# sourceMappingURL=store.cjs.map
202
+ //# sourceMappingURL=FlexLayoutContainerStore.cjs.map
203
+ //# sourceMappingURL=FlexLayoutContainerStore.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/flex-layout/store/FlexLayoutContainerStore.ts"],"names":["equal","BehaviorSubject","filter","map","distinctUntilChanged","combineLatest"],"mappings":"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","file":"FlexLayoutContainerStore.cjs","sourcesContent":["\"use client\";\r\nimport equal from \"fast-deep-equal\";\r\nimport { RefObject } from \"react\";\r\nimport { BehaviorSubject, combineLatest } from \"rxjs\";\r\nimport { distinctUntilChanged, filter, map } from \"rxjs/operators\";\r\nimport { DropTargetComponent } from \"../hooks/useDrag\";\r\n\r\n/**\r\n * 이전 값과 새 값이 동일하지 않을 때만 store를 업데이트하는 유틸 함수\r\n */\r\nfunction updateScrollStore<T>(subject: BehaviorSubject<T>, newValue: T) {\r\n\tconst currentValue = subject.getValue();\r\n\t// deep 비교를 통해 실제 변경이 있는 경우만 next\r\n\tif (!equal(currentValue, newValue)) {\r\n\t\tsubject.next(newValue);\r\n\t}\r\n}\r\n// 동일한지 확인 후 업데이트하는 유틸\r\nfunction updateRefStore(store: BehaviorSubject<RefStore>, newState: RefStore) {\r\n\tconst prevState = store.getValue();\r\n\tif (!equal(prevState, newState)) {\r\n\t\tstore.next(newState);\r\n\t}\r\n}\r\n\r\nfunction updateSplitScreenStore(newValue: LayoutSplitScreenState) {\r\n\tconst prevValue = layoutSplitScreenStore.getValue();\r\n\t// deep-equal 로 비교\r\n\tif (!equal(prevValue, newValue)) {\r\n\t\tlayoutSplitScreenStore.next(newValue);\r\n\t}\r\n}\r\n\r\n// 구독 시 이전 상태들을 축적하여 관리\r\n// const stateWithHistory$ = flexContainerStore.pipe(\r\n// scan((acc, newState) => [...acc, newState], [] as RefStore[])\r\n// );\r\n\r\nexport interface ScrollPosition {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\nexport const scrollPositions: Record<string, ScrollPosition> = {};\r\n\r\nconst scrollPositionsSubject = new BehaviorSubject<\r\n\tRecord<string, ScrollPosition>\r\n>(scrollPositions);\r\n\r\n/**\r\n * 스크롤 위치 업데이트 함수\r\n *\r\n * 기존: 항상 store.next()가 호출됨 → 바뀌지 않았다면 건너뛰도록 변경\r\n */\r\nexport const setScrollPosition = (\r\n\tlayoutName: string,\r\n\tposition: ScrollPosition,\r\n) => {\r\n\tconst current = scrollPositionsSubject.getValue();\r\n\tconst prevPos = current[layoutName];\r\n\r\n\t// x, y 모두 동일하면 업데이트할 필요가 없으므로 조기 반환\r\n\tif (prevPos && prevPos.x === position.x && prevPos.y === position.y) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// 변경사항이 있으면 새 객체를 만들어 넘김\r\n\tconst newPositions = {\r\n\t\t...current,\r\n\t\t[layoutName]: position,\r\n\t};\r\n\r\n\tupdateScrollStore(scrollPositionsSubject, newPositions);\r\n};\r\n\r\n/**\r\n * 스크롤 위치 구독\r\n */\r\nexport const getScrollPosition = (layoutName: string) => {\r\n\treturn scrollPositionsSubject.pipe(\r\n\t\t// 해당 layoutName이 정의되지 않았을 때는 제외\r\n\t\tfilter((e) => e[layoutName] !== undefined),\r\n\t\tmap((positions) => positions[layoutName]),\r\n\t\tdistinctUntilChanged(\r\n\t\t\t(prev, curr) => prev?.x === curr?.x && prev?.y === curr?.y,\r\n\t\t),\r\n\t);\r\n};\r\n\r\nexport const removeScrollPosition = (layoutName: string) => {\r\n\tconst current = scrollPositionsSubject.getValue();\r\n\tdelete current[layoutName];\r\n\r\n\t// 꼭 삭제 후에도 이전 상태와 달라졌는지 확인\r\n\tconst newPositions = { ...current };\r\n\tupdateScrollStore(scrollPositionsSubject, newPositions);\r\n};\r\n\r\nexport type SplitScreenComponents = {\r\n\tafterDropTargetComponent: DropTargetComponent[];\r\n\tbeforeDropTargetComponent: DropTargetComponent[];\r\n\tcenterDropTargetComponent: DropTargetComponent[];\r\n\tdirection: \"row\" | \"column\";\r\n};\r\n\r\nexport type LayoutSplitScreenState = Record<\r\n\tstring,\r\n\tRecord<string, SplitScreenComponents>\r\n>;\r\n\r\nexport const layoutSplitScreenStore =\r\n\tnew BehaviorSubject<LayoutSplitScreenState>({});\r\n\r\nexport const setSplitScreen = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n\tnewComponents: SplitScreenComponents,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tconst updatedLayout = { ...(current[rootName] || {}) };\r\n\tupdatedLayout[layoutName] = newComponents;\r\n\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: updatedLayout,\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const resetRootSplitScreen = (rootName: string) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\t// rootName 아래만 초기화\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: {},\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const removeSplitScreenChild = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tif (!current[rootName]) return;\r\n\r\n\tconst updatedLayout = { ...current[rootName] };\r\n\tdelete updatedLayout[layoutName];\r\n\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: updatedLayout,\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const getCurrentSplitScreenComponents = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tif (!current[rootName]) return;\r\n\treturn current[rootName][layoutName];\r\n};\r\n\r\nexport const getSplitScreen = (rootName: string, layoutName: string) => {\r\n\treturn layoutSplitScreenStore.pipe(\r\n\t\tmap((splitScreen) => splitScreen[rootName][layoutName]),\r\n\t\tdistinctUntilChanged((prev, curr) => {\r\n\t\t\t// 이전 상태와 현재 상태를 비교하여 동일하면 필터링\r\n\t\t\tconst filterChildren = (obj: any) => {\r\n\t\t\t\t// 객체 복사 후 children 속성 제거\r\n\t\t\t\tconst { children, component, targetComponent, x, y, ...rest } =\r\n\t\t\t\t\tobj || {};\r\n\t\t\t\treturn rest;\r\n\t\t\t};\r\n\t\t\treturn equal(filterChildren(prev), filterChildren(curr));\r\n\t\t}),\r\n\t);\r\n};\r\n\r\n// 중첩된 객체 구조로 ref를 관리하는 타입\r\ntype RefStore = {\r\n\t[layoutName: string]: {\r\n\t\t[containerName: string]: RefObject<HTMLElement | null>;\r\n\t};\r\n};\r\n\r\n// 초기값으로 빈 객체를 설정한 BehaviorSubject 생성\r\nexport const flexContainerStore = new BehaviorSubject<RefStore>({});\r\n\r\nexport const flexResizePanelStore = new BehaviorSubject<RefStore>({});\r\n/**\r\n * ref를 업데이트하는 함수\r\n * - 기존: 무조건 next() → 새/이전 상태 비교 후 다를 경우에만 next()\r\n */\r\nexport const setContainerRef = <T extends HTMLElement>(\r\n\tlayoutName: string,\r\n\tcontainerName: string,\r\n\tref: RefObject<T | null> | null,\r\n) => {\r\n\tconst currentRefs = flexContainerStore.getValue();\r\n\tconst updatedLayoutRefs = { ...(currentRefs[layoutName] || {}) };\r\n\r\n\tif (ref === null) {\r\n\t\tdelete updatedLayoutRefs[containerName];\r\n\t} else {\r\n\t\tupdatedLayoutRefs[containerName] = ref;\r\n\t}\r\n\r\n\tconst newRefs: RefStore = {\r\n\t\t...currentRefs,\r\n\t\t[layoutName]: updatedLayoutRefs,\r\n\t};\r\n\r\n\tupdateRefStore(flexContainerStore, newRefs);\r\n};\r\n\r\nexport const setResizePanelRef = <T extends HTMLElement>(\r\n\tlayoutName: string,\r\n\tcontainerName: string,\r\n\tref: RefObject<T | null> | null,\r\n) => {\r\n\tconst currentRefs = flexResizePanelStore.getValue();\r\n\tconst updatedLayoutRefs = { ...(currentRefs[layoutName] || {}) };\r\n\r\n\tif (ref === null) {\r\n\t\tdelete updatedLayoutRefs[containerName];\r\n\t} else {\r\n\t\tupdatedLayoutRefs[containerName] = ref;\r\n\t}\r\n\r\n\tconst newRefs: RefStore = {\r\n\t\t...currentRefs,\r\n\t\t[layoutName]: updatedLayoutRefs,\r\n\t};\r\n\r\n\tupdateRefStore(flexResizePanelStore, newRefs);\r\n};\r\n\r\nexport const getLayoutInfos = (layoutName: string) => {\r\n\treturn combineLatest([flexContainerStore, flexResizePanelStore]).pipe(\r\n\t\tmap(([containerRefs, resizePanelRefs]) => {\r\n\t\t\t// 두 Store에서 layoutName에 해당하는 값을 병합\r\n\t\t\tconst containerData = containerRefs[layoutName] || {};\r\n\t\t\tconst resizePanelData = resizePanelRefs[layoutName] || {};\r\n\r\n\t\t\t// container와 resizePanel 데이터 합치기\r\n\t\t\treturn {\r\n\t\t\t\tcontainer: containerData,\r\n\t\t\t\tresizePanel: resizePanelData,\r\n\t\t\t};\r\n\t\t}),\r\n\t\tfilter((result) => result.container !== null), // 빈 객체 제외\r\n\t);\r\n};\r\n\r\n// 특정 containerName의 ref를 구독하는 함수\r\n// layoutName이 지정되지 않으면 전체 layout에서 해당하는 containerName의 ref를 찾음\r\nexport const getContainerRef = ({\r\n\tcontainerName,\r\n\tlayoutName,\r\n}: {\r\n\tcontainerName: string;\r\n\tlayoutName?: string;\r\n}) => {\r\n\treturn flexContainerStore.pipe(\r\n\t\tmap((refs: RefStore) => {\r\n\t\t\tif (layoutName) {\r\n\t\t\t\t// 지정된 layoutName에서 해당 containerName의 ref 반환\r\n\t\t\t\treturn refs[layoutName]?.[containerName] || null;\r\n\t\t\t} else {\r\n\t\t\t\t// 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t\treturn Object.entries(refs).find(\r\n\t\t\t\t\t([key, value]) => refs[key][containerName],\r\n\t\t\t\t)?.[1][containerName];\r\n\t\t\t}\r\n\t\t\t// else {\r\n\t\t\t// // 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t// for (const layout in refs) {\r\n\t\t\t// if (refs[layout][containerName]) {\r\n\t\t\t// return refs[layout][containerName];\r\n\t\t\t// }\r\n\t\t\t// }\r\n\t\t\t// return null;\r\n\t\t\t// }\r\n\t\t}),\r\n\t\tfilter((ref) => ref !== null),\r\n\t);\r\n};\r\n\r\nexport const getResizePanelRef = ({\r\n\tcontainerName,\r\n\tlayoutName,\r\n}: {\r\n\tcontainerName: string;\r\n\tlayoutName?: string;\r\n}) => {\r\n\treturn flexResizePanelStore.pipe(\r\n\t\tmap((refs: RefStore) => {\r\n\t\t\tif (layoutName) {\r\n\t\t\t\t// 지정된 layoutName에서 해당 containerName의 ref 반환\r\n\t\t\t\treturn refs[layoutName]?.[containerName] || null;\r\n\t\t\t} else {\r\n\t\t\t\t// 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t\treturn Object.entries(refs).find(\r\n\t\t\t\t\t([key, value]) => refs[key][containerName],\r\n\t\t\t\t)?.[1][containerName];\r\n\t\t\t}\r\n\t\t\t// else {\r\n\t\t\t// // 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t// for (const layout in refs) {\r\n\t\t\t// if (refs[layout][containerName]) {\r\n\t\t\t// return refs[layout][containerName];\r\n\t\t\t// }\r\n\t\t\t// }\r\n\t\t\t// return null;\r\n\t\t\t// }\r\n\t\t}),\r\n\t\tfilter((ref) => ref !== null),\r\n\t);\r\n};\r\n"]}
@@ -0,0 +1,62 @@
1
+ import { RefObject } from "react";
2
+ import { BehaviorSubject } from "rxjs";
3
+ import { DropTargetComponent } from "../hooks/useDrag";
4
+ export interface ScrollPosition {
5
+ x: number;
6
+ y: number;
7
+ }
8
+ export declare const scrollPositions: Record<string, ScrollPosition>;
9
+ /**
10
+ * 스크롤 위치 업데이트 함수
11
+ *
12
+ * 기존: 항상 store.next()가 호출됨 → 바뀌지 않았다면 건너뛰도록 변경
13
+ */
14
+ export declare const setScrollPosition: (layoutName: string, position: ScrollPosition) => void;
15
+ /**
16
+ * 스크롤 위치 구독
17
+ */
18
+ export declare const getScrollPosition: (layoutName: string) => import("rxjs").Observable<ScrollPosition>;
19
+ export declare const removeScrollPosition: (layoutName: string) => void;
20
+ export type SplitScreenComponents = {
21
+ afterDropTargetComponent: DropTargetComponent[];
22
+ beforeDropTargetComponent: DropTargetComponent[];
23
+ centerDropTargetComponent: DropTargetComponent[];
24
+ direction: "row" | "column";
25
+ };
26
+ export type LayoutSplitScreenState = Record<string, Record<string, SplitScreenComponents>>;
27
+ export declare const layoutSplitScreenStore: BehaviorSubject<LayoutSplitScreenState>;
28
+ export declare const setSplitScreen: (rootName: string, layoutName: string, newComponents: SplitScreenComponents) => void;
29
+ export declare const resetRootSplitScreen: (rootName: string) => void;
30
+ export declare const removeSplitScreenChild: (rootName: string, layoutName: string) => void;
31
+ export declare const getCurrentSplitScreenComponents: (rootName: string, layoutName: string) => SplitScreenComponents | undefined;
32
+ export declare const getSplitScreen: (rootName: string, layoutName: string) => import("rxjs").Observable<SplitScreenComponents>;
33
+ type RefStore = {
34
+ [layoutName: string]: {
35
+ [containerName: string]: RefObject<HTMLElement | null>;
36
+ };
37
+ };
38
+ export declare const flexContainerStore: BehaviorSubject<RefStore>;
39
+ export declare const flexResizePanelStore: BehaviorSubject<RefStore>;
40
+ /**
41
+ * ref를 업데이트하는 함수
42
+ * - 기존: 무조건 next() → 새/이전 상태 비교 후 다를 경우에만 next()
43
+ */
44
+ export declare const setContainerRef: <T extends HTMLElement>(layoutName: string, containerName: string, ref: RefObject<T | null> | null) => void;
45
+ export declare const setResizePanelRef: <T extends HTMLElement>(layoutName: string, containerName: string, ref: RefObject<T | null> | null) => void;
46
+ export declare const getLayoutInfos: (layoutName: string) => import("rxjs").Observable<{
47
+ container: {
48
+ [containerName: string]: RefObject<HTMLElement | null>;
49
+ };
50
+ resizePanel: {
51
+ [containerName: string]: RefObject<HTMLElement | null>;
52
+ };
53
+ }>;
54
+ export declare const getContainerRef: ({ containerName, layoutName, }: {
55
+ containerName: string;
56
+ layoutName?: string;
57
+ }) => import("rxjs").Observable<RefObject<HTMLElement | null> | undefined>;
58
+ export declare const getResizePanelRef: ({ containerName, layoutName, }: {
59
+ containerName: string;
60
+ layoutName?: string;
61
+ }) => import("rxjs").Observable<RefObject<HTMLElement | null> | undefined>;
62
+ export {};
@@ -2,7 +2,6 @@ import equal from 'fast-deep-equal';
2
2
  import { BehaviorSubject, combineLatest } from 'rxjs';
3
3
  import { filter, map, distinctUntilChanged } from 'rxjs/operators';
4
4
 
5
- // src/flex-layout/store/FlexLayoutContainerStore.ts
6
5
  function updateScrollStore(subject, newValue) {
7
6
  const currentValue = subject.getValue();
8
7
  if (!equal(currentValue, newValue)) {
@@ -21,9 +20,9 @@ function updateSplitScreenStore(newValue) {
21
20
  layoutSplitScreenStore.next(newValue);
22
21
  }
23
22
  }
24
- var scrollPositions = {};
25
- var scrollPositionsSubject = new BehaviorSubject(scrollPositions);
26
- var setScrollPosition = (layoutName, position) => {
23
+ const scrollPositions = {};
24
+ const scrollPositionsSubject = new BehaviorSubject(scrollPositions);
25
+ const setScrollPosition = (layoutName, position) => {
27
26
  const current = scrollPositionsSubject.getValue();
28
27
  const prevPos = current[layoutName];
29
28
  if (prevPos && prevPos.x === position.x && prevPos.y === position.y) {
@@ -35,7 +34,7 @@ var setScrollPosition = (layoutName, position) => {
35
34
  };
36
35
  updateScrollStore(scrollPositionsSubject, newPositions);
37
36
  };
38
- var getScrollPosition = (layoutName) => {
37
+ const getScrollPosition = (layoutName) => {
39
38
  return scrollPositionsSubject.pipe(
40
39
  // 해당 layoutName이 정의되지 않았을 때는 제외
41
40
  filter((e) => e[layoutName] !== void 0),
@@ -45,14 +44,14 @@ var getScrollPosition = (layoutName) => {
45
44
  )
46
45
  );
47
46
  };
48
- var removeScrollPosition = (layoutName) => {
47
+ const removeScrollPosition = (layoutName) => {
49
48
  const current = scrollPositionsSubject.getValue();
50
49
  delete current[layoutName];
51
50
  const newPositions = { ...current };
52
51
  updateScrollStore(scrollPositionsSubject, newPositions);
53
52
  };
54
- var layoutSplitScreenStore = new BehaviorSubject({});
55
- var setSplitScreen = (rootName, layoutName, newComponents) => {
53
+ const layoutSplitScreenStore = new BehaviorSubject({});
54
+ const setSplitScreen = (rootName, layoutName, newComponents) => {
56
55
  const current = layoutSplitScreenStore.getValue();
57
56
  const updatedLayout = { ...current[rootName] || {} };
58
57
  updatedLayout[layoutName] = newComponents;
@@ -62,7 +61,7 @@ var setSplitScreen = (rootName, layoutName, newComponents) => {
62
61
  };
63
62
  updateSplitScreenStore(newStoreValue);
64
63
  };
65
- var resetRootSplitScreen = (rootName) => {
64
+ const resetRootSplitScreen = (rootName) => {
66
65
  const current = layoutSplitScreenStore.getValue();
67
66
  const newStoreValue = {
68
67
  ...current,
@@ -70,7 +69,7 @@ var resetRootSplitScreen = (rootName) => {
70
69
  };
71
70
  updateSplitScreenStore(newStoreValue);
72
71
  };
73
- var removeSplitScreenChild = (rootName, layoutName) => {
72
+ const removeSplitScreenChild = (rootName, layoutName) => {
74
73
  const current = layoutSplitScreenStore.getValue();
75
74
  if (!current[rootName]) return;
76
75
  const updatedLayout = { ...current[rootName] };
@@ -81,12 +80,12 @@ var removeSplitScreenChild = (rootName, layoutName) => {
81
80
  };
82
81
  updateSplitScreenStore(newStoreValue);
83
82
  };
84
- var getCurrentSplitScreenComponents = (rootName, layoutName) => {
83
+ const getCurrentSplitScreenComponents = (rootName, layoutName) => {
85
84
  const current = layoutSplitScreenStore.getValue();
86
85
  if (!current[rootName]) return;
87
86
  return current[rootName][layoutName];
88
87
  };
89
- var getSplitScreen = (rootName, layoutName) => {
88
+ const getSplitScreen = (rootName, layoutName) => {
90
89
  return layoutSplitScreenStore.pipe(
91
90
  map((splitScreen) => splitScreen[rootName][layoutName]),
92
91
  distinctUntilChanged((prev, curr) => {
@@ -98,9 +97,9 @@ var getSplitScreen = (rootName, layoutName) => {
98
97
  })
99
98
  );
100
99
  };
101
- var flexContainerStore = new BehaviorSubject({});
102
- var flexResizePanelStore = new BehaviorSubject({});
103
- var setContainerRef = (layoutName, containerName, ref) => {
100
+ const flexContainerStore = new BehaviorSubject({});
101
+ const flexResizePanelStore = new BehaviorSubject({});
102
+ const setContainerRef = (layoutName, containerName, ref) => {
104
103
  const currentRefs = flexContainerStore.getValue();
105
104
  const updatedLayoutRefs = { ...currentRefs[layoutName] || {} };
106
105
  if (ref === null) {
@@ -114,7 +113,7 @@ var setContainerRef = (layoutName, containerName, ref) => {
114
113
  };
115
114
  updateRefStore(flexContainerStore, newRefs);
116
115
  };
117
- var setResizePanelRef = (layoutName, containerName, ref) => {
116
+ const setResizePanelRef = (layoutName, containerName, ref) => {
118
117
  const currentRefs = flexResizePanelStore.getValue();
119
118
  const updatedLayoutRefs = { ...currentRefs[layoutName] || {} };
120
119
  if (ref === null) {
@@ -128,7 +127,7 @@ var setResizePanelRef = (layoutName, containerName, ref) => {
128
127
  };
129
128
  updateRefStore(flexResizePanelStore, newRefs);
130
129
  };
131
- var getLayoutInfos = (layoutName) => {
130
+ const getLayoutInfos = (layoutName) => {
132
131
  return combineLatest([flexContainerStore, flexResizePanelStore]).pipe(
133
132
  map(([containerRefs, resizePanelRefs]) => {
134
133
  const containerData = containerRefs[layoutName] || {};
@@ -142,7 +141,7 @@ var getLayoutInfos = (layoutName) => {
142
141
  // 빈 객체 제외
143
142
  );
144
143
  };
145
- var getContainerRef = ({
144
+ const getContainerRef = ({
146
145
  containerName,
147
146
  layoutName
148
147
  }) => {
@@ -159,7 +158,7 @@ var getContainerRef = ({
159
158
  filter((ref) => ref !== null)
160
159
  );
161
160
  };
162
- var getResizePanelRef = ({
161
+ const getResizePanelRef = ({
163
162
  containerName,
164
163
  layoutName
165
164
  }) => {
@@ -178,5 +177,5 @@ var getResizePanelRef = ({
178
177
  };
179
178
 
180
179
  export { flexContainerStore, flexResizePanelStore, getContainerRef, getCurrentSplitScreenComponents, getLayoutInfos, getResizePanelRef, getScrollPosition, getSplitScreen, layoutSplitScreenStore, removeScrollPosition, removeSplitScreenChild, resetRootSplitScreen, scrollPositions, setContainerRef, setResizePanelRef, setScrollPosition, setSplitScreen };
181
- //# sourceMappingURL=store.js.map
182
- //# sourceMappingURL=store.js.map
180
+ //# sourceMappingURL=FlexLayoutContainerStore.js.map
181
+ //# sourceMappingURL=FlexLayoutContainerStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/flex-layout/store/FlexLayoutContainerStore.ts"],"names":[],"mappings":"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","file":"FlexLayoutContainerStore.js","sourcesContent":["\"use client\";\r\nimport equal from \"fast-deep-equal\";\r\nimport { RefObject } from \"react\";\r\nimport { BehaviorSubject, combineLatest } from \"rxjs\";\r\nimport { distinctUntilChanged, filter, map } from \"rxjs/operators\";\r\nimport { DropTargetComponent } from \"../hooks/useDrag\";\r\n\r\n/**\r\n * 이전 값과 새 값이 동일하지 않을 때만 store를 업데이트하는 유틸 함수\r\n */\r\nfunction updateScrollStore<T>(subject: BehaviorSubject<T>, newValue: T) {\r\n\tconst currentValue = subject.getValue();\r\n\t// deep 비교를 통해 실제 변경이 있는 경우만 next\r\n\tif (!equal(currentValue, newValue)) {\r\n\t\tsubject.next(newValue);\r\n\t}\r\n}\r\n// 동일한지 확인 후 업데이트하는 유틸\r\nfunction updateRefStore(store: BehaviorSubject<RefStore>, newState: RefStore) {\r\n\tconst prevState = store.getValue();\r\n\tif (!equal(prevState, newState)) {\r\n\t\tstore.next(newState);\r\n\t}\r\n}\r\n\r\nfunction updateSplitScreenStore(newValue: LayoutSplitScreenState) {\r\n\tconst prevValue = layoutSplitScreenStore.getValue();\r\n\t// deep-equal 로 비교\r\n\tif (!equal(prevValue, newValue)) {\r\n\t\tlayoutSplitScreenStore.next(newValue);\r\n\t}\r\n}\r\n\r\n// 구독 시 이전 상태들을 축적하여 관리\r\n// const stateWithHistory$ = flexContainerStore.pipe(\r\n// scan((acc, newState) => [...acc, newState], [] as RefStore[])\r\n// );\r\n\r\nexport interface ScrollPosition {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\nexport const scrollPositions: Record<string, ScrollPosition> = {};\r\n\r\nconst scrollPositionsSubject = new BehaviorSubject<\r\n\tRecord<string, ScrollPosition>\r\n>(scrollPositions);\r\n\r\n/**\r\n * 스크롤 위치 업데이트 함수\r\n *\r\n * 기존: 항상 store.next()가 호출됨 → 바뀌지 않았다면 건너뛰도록 변경\r\n */\r\nexport const setScrollPosition = (\r\n\tlayoutName: string,\r\n\tposition: ScrollPosition,\r\n) => {\r\n\tconst current = scrollPositionsSubject.getValue();\r\n\tconst prevPos = current[layoutName];\r\n\r\n\t// x, y 모두 동일하면 업데이트할 필요가 없으므로 조기 반환\r\n\tif (prevPos && prevPos.x === position.x && prevPos.y === position.y) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// 변경사항이 있으면 새 객체를 만들어 넘김\r\n\tconst newPositions = {\r\n\t\t...current,\r\n\t\t[layoutName]: position,\r\n\t};\r\n\r\n\tupdateScrollStore(scrollPositionsSubject, newPositions);\r\n};\r\n\r\n/**\r\n * 스크롤 위치 구독\r\n */\r\nexport const getScrollPosition = (layoutName: string) => {\r\n\treturn scrollPositionsSubject.pipe(\r\n\t\t// 해당 layoutName이 정의되지 않았을 때는 제외\r\n\t\tfilter((e) => e[layoutName] !== undefined),\r\n\t\tmap((positions) => positions[layoutName]),\r\n\t\tdistinctUntilChanged(\r\n\t\t\t(prev, curr) => prev?.x === curr?.x && prev?.y === curr?.y,\r\n\t\t),\r\n\t);\r\n};\r\n\r\nexport const removeScrollPosition = (layoutName: string) => {\r\n\tconst current = scrollPositionsSubject.getValue();\r\n\tdelete current[layoutName];\r\n\r\n\t// 꼭 삭제 후에도 이전 상태와 달라졌는지 확인\r\n\tconst newPositions = { ...current };\r\n\tupdateScrollStore(scrollPositionsSubject, newPositions);\r\n};\r\n\r\nexport type SplitScreenComponents = {\r\n\tafterDropTargetComponent: DropTargetComponent[];\r\n\tbeforeDropTargetComponent: DropTargetComponent[];\r\n\tcenterDropTargetComponent: DropTargetComponent[];\r\n\tdirection: \"row\" | \"column\";\r\n};\r\n\r\nexport type LayoutSplitScreenState = Record<\r\n\tstring,\r\n\tRecord<string, SplitScreenComponents>\r\n>;\r\n\r\nexport const layoutSplitScreenStore =\r\n\tnew BehaviorSubject<LayoutSplitScreenState>({});\r\n\r\nexport const setSplitScreen = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n\tnewComponents: SplitScreenComponents,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tconst updatedLayout = { ...(current[rootName] || {}) };\r\n\tupdatedLayout[layoutName] = newComponents;\r\n\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: updatedLayout,\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const resetRootSplitScreen = (rootName: string) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\t// rootName 아래만 초기화\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: {},\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const removeSplitScreenChild = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tif (!current[rootName]) return;\r\n\r\n\tconst updatedLayout = { ...current[rootName] };\r\n\tdelete updatedLayout[layoutName];\r\n\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: updatedLayout,\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const getCurrentSplitScreenComponents = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tif (!current[rootName]) return;\r\n\treturn current[rootName][layoutName];\r\n};\r\n\r\nexport const getSplitScreen = (rootName: string, layoutName: string) => {\r\n\treturn layoutSplitScreenStore.pipe(\r\n\t\tmap((splitScreen) => splitScreen[rootName][layoutName]),\r\n\t\tdistinctUntilChanged((prev, curr) => {\r\n\t\t\t// 이전 상태와 현재 상태를 비교하여 동일하면 필터링\r\n\t\t\tconst filterChildren = (obj: any) => {\r\n\t\t\t\t// 객체 복사 후 children 속성 제거\r\n\t\t\t\tconst { children, component, targetComponent, x, y, ...rest } =\r\n\t\t\t\t\tobj || {};\r\n\t\t\t\treturn rest;\r\n\t\t\t};\r\n\t\t\treturn equal(filterChildren(prev), filterChildren(curr));\r\n\t\t}),\r\n\t);\r\n};\r\n\r\n// 중첩된 객체 구조로 ref를 관리하는 타입\r\ntype RefStore = {\r\n\t[layoutName: string]: {\r\n\t\t[containerName: string]: RefObject<HTMLElement | null>;\r\n\t};\r\n};\r\n\r\n// 초기값으로 빈 객체를 설정한 BehaviorSubject 생성\r\nexport const flexContainerStore = new BehaviorSubject<RefStore>({});\r\n\r\nexport const flexResizePanelStore = new BehaviorSubject<RefStore>({});\r\n/**\r\n * ref를 업데이트하는 함수\r\n * - 기존: 무조건 next() → 새/이전 상태 비교 후 다를 경우에만 next()\r\n */\r\nexport const setContainerRef = <T extends HTMLElement>(\r\n\tlayoutName: string,\r\n\tcontainerName: string,\r\n\tref: RefObject<T | null> | null,\r\n) => {\r\n\tconst currentRefs = flexContainerStore.getValue();\r\n\tconst updatedLayoutRefs = { ...(currentRefs[layoutName] || {}) };\r\n\r\n\tif (ref === null) {\r\n\t\tdelete updatedLayoutRefs[containerName];\r\n\t} else {\r\n\t\tupdatedLayoutRefs[containerName] = ref;\r\n\t}\r\n\r\n\tconst newRefs: RefStore = {\r\n\t\t...currentRefs,\r\n\t\t[layoutName]: updatedLayoutRefs,\r\n\t};\r\n\r\n\tupdateRefStore(flexContainerStore, newRefs);\r\n};\r\n\r\nexport const setResizePanelRef = <T extends HTMLElement>(\r\n\tlayoutName: string,\r\n\tcontainerName: string,\r\n\tref: RefObject<T | null> | null,\r\n) => {\r\n\tconst currentRefs = flexResizePanelStore.getValue();\r\n\tconst updatedLayoutRefs = { ...(currentRefs[layoutName] || {}) };\r\n\r\n\tif (ref === null) {\r\n\t\tdelete updatedLayoutRefs[containerName];\r\n\t} else {\r\n\t\tupdatedLayoutRefs[containerName] = ref;\r\n\t}\r\n\r\n\tconst newRefs: RefStore = {\r\n\t\t...currentRefs,\r\n\t\t[layoutName]: updatedLayoutRefs,\r\n\t};\r\n\r\n\tupdateRefStore(flexResizePanelStore, newRefs);\r\n};\r\n\r\nexport const getLayoutInfos = (layoutName: string) => {\r\n\treturn combineLatest([flexContainerStore, flexResizePanelStore]).pipe(\r\n\t\tmap(([containerRefs, resizePanelRefs]) => {\r\n\t\t\t// 두 Store에서 layoutName에 해당하는 값을 병합\r\n\t\t\tconst containerData = containerRefs[layoutName] || {};\r\n\t\t\tconst resizePanelData = resizePanelRefs[layoutName] || {};\r\n\r\n\t\t\t// container와 resizePanel 데이터 합치기\r\n\t\t\treturn {\r\n\t\t\t\tcontainer: containerData,\r\n\t\t\t\tresizePanel: resizePanelData,\r\n\t\t\t};\r\n\t\t}),\r\n\t\tfilter((result) => result.container !== null), // 빈 객체 제외\r\n\t);\r\n};\r\n\r\n// 특정 containerName의 ref를 구독하는 함수\r\n// layoutName이 지정되지 않으면 전체 layout에서 해당하는 containerName의 ref를 찾음\r\nexport const getContainerRef = ({\r\n\tcontainerName,\r\n\tlayoutName,\r\n}: {\r\n\tcontainerName: string;\r\n\tlayoutName?: string;\r\n}) => {\r\n\treturn flexContainerStore.pipe(\r\n\t\tmap((refs: RefStore) => {\r\n\t\t\tif (layoutName) {\r\n\t\t\t\t// 지정된 layoutName에서 해당 containerName의 ref 반환\r\n\t\t\t\treturn refs[layoutName]?.[containerName] || null;\r\n\t\t\t} else {\r\n\t\t\t\t// 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t\treturn Object.entries(refs).find(\r\n\t\t\t\t\t([key, value]) => refs[key][containerName],\r\n\t\t\t\t)?.[1][containerName];\r\n\t\t\t}\r\n\t\t\t// else {\r\n\t\t\t// // 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t// for (const layout in refs) {\r\n\t\t\t// if (refs[layout][containerName]) {\r\n\t\t\t// return refs[layout][containerName];\r\n\t\t\t// }\r\n\t\t\t// }\r\n\t\t\t// return null;\r\n\t\t\t// }\r\n\t\t}),\r\n\t\tfilter((ref) => ref !== null),\r\n\t);\r\n};\r\n\r\nexport const getResizePanelRef = ({\r\n\tcontainerName,\r\n\tlayoutName,\r\n}: {\r\n\tcontainerName: string;\r\n\tlayoutName?: string;\r\n}) => {\r\n\treturn flexResizePanelStore.pipe(\r\n\t\tmap((refs: RefStore) => {\r\n\t\t\tif (layoutName) {\r\n\t\t\t\t// 지정된 layoutName에서 해당 containerName의 ref 반환\r\n\t\t\t\treturn refs[layoutName]?.[containerName] || null;\r\n\t\t\t} else {\r\n\t\t\t\t// 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t\treturn Object.entries(refs).find(\r\n\t\t\t\t\t([key, value]) => refs[key][containerName],\r\n\t\t\t\t)?.[1][containerName];\r\n\t\t\t}\r\n\t\t\t// else {\r\n\t\t\t// // 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t// for (const layout in refs) {\r\n\t\t\t// if (refs[layout][containerName]) {\r\n\t\t\t// return refs[layout][containerName];\r\n\t\t\t// }\r\n\t\t\t// }\r\n\t\t\t// return null;\r\n\t\t\t// }\r\n\t\t}),\r\n\t\tfilter((ref) => ref !== null),\r\n\t);\r\n};\r\n"]}
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ var FlexLayoutContainerStore = require('./FlexLayoutContainerStore');
4
+
5
+
6
+
7
+ Object.keys(FlexLayoutContainerStore).forEach(function (k) {
8
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
9
+ enumerable: true,
10
+ get: function () { return FlexLayoutContainerStore[k]; }
11
+ });
12
+ });
13
+ //# sourceMappingURL=index.cjs.map
14
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs","sourcesContent":[]}
@@ -0,0 +1 @@
1
+ export * from "./FlexLayoutContainerStore";
@@ -0,0 +1,3 @@
1
+ export * from './FlexLayoutContainerStore';
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}