@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,1197 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { useEffect, useState, useRef, cloneElement } from 'react';
3
+ import { dropMovementEventSubject } from '../hooks/useDrag';
4
+ import { useFlexLayoutSplitScreen } from '../hooks/useFlexLayoutSplitScreen';
5
+ import { resetRootSplitScreen, getSplitScreen, setSplitScreen, getCurrentSplitScreenComponents, removeSplitScreenChild } from '../store/FlexLayoutContainerStore';
6
+ import styles from '../styles/FlexLayout.module.css';
7
+ import FlexLayout from './FlexLayout';
8
+ import FlexLayoutContainer from './FlexLayoutContainer';
9
+ import FlexLayoutSplitScreenDragBox from './FlexLayoutSplitScreenDragBox';
10
+ import equal from 'fast-deep-equal';
11
+ import { distinctUntilChanged, take } from 'rxjs';
12
+ import FlexLayoutSplitScreenDragBoxContainer from './FlexLayoutSplitScreenDragBoxContainer';
13
+ import FlexLayoutSplitScreenDragBoxItem from './FlexLayoutSplitScreenDragBoxItem';
14
+ import FlexLayoutSplitScreenDragBoxTitleMore from './FlexLayoutSplitScreenDragBoxTitleMore';
15
+ import FlexLayoutSplitScreenScrollBox from './FlexLayoutSplitScreenScrollBox';
16
+
17
+ function isOverDrop({
18
+ x,
19
+ y,
20
+ element
21
+ }) {
22
+ const {
23
+ x: elementX,
24
+ y: elementY,
25
+ right: elementRight,
26
+ bottom: elementBottom
27
+ } = element.getBoundingClientRect();
28
+ const isElementOver = x < elementX || x > elementRight || y < elementY || y > elementBottom;
29
+ return isElementOver;
30
+ }
31
+ function isInnerDrop({
32
+ x,
33
+ y,
34
+ element
35
+ }) {
36
+ const {
37
+ x: elementX,
38
+ y: elementY,
39
+ right: elementRight,
40
+ bottom: elementBottom
41
+ } = element.getBoundingClientRect();
42
+ const isElementInner = x >= elementX && x <= elementRight && y >= elementY && y <= elementBottom;
43
+ return isElementInner;
44
+ }
45
+ const handleUpdateDropTargetComponents = ({
46
+ orderName,
47
+ parentOrderName,
48
+ containerName,
49
+ parentLayoutName,
50
+ layoutName,
51
+ dropComponent,
52
+ navigationTitle,
53
+ nextContainerName,
54
+ isUsePrefix = true,
55
+ beforeDropTargetComponent,
56
+ afterDropTargetComponent,
57
+ centerDropTargetComponent,
58
+ dropDocumentOutsideOption,
59
+ screenKey = Array.from(
60
+ window.crypto.getRandomValues(new Uint32Array(16)),
61
+ (e) => e.toString(32).padStart(2, "0")
62
+ ).join("")
63
+ }) => {
64
+ const nextContainerNameOrderName = parentOrderName ? parentOrderName : orderName;
65
+ let listMap;
66
+ let list;
67
+ let key;
68
+ if (nextContainerNameOrderName === orderName || nextContainerNameOrderName === "center") {
69
+ listMap = orderName === "before" ? { beforeDropTargetComponent } : orderName === "after" ? { afterDropTargetComponent } : {
70
+ centerDropTargetComponent: centerDropTargetComponent.filter(
71
+ (e) => !e.containerName.split("_").at(0).startsWith(
72
+ containerName.split("_").at(0)
73
+ )
74
+ )
75
+ };
76
+ } else {
77
+ listMap = nextContainerNameOrderName === "before" ? { beforeDropTargetComponent } : { afterDropTargetComponent };
78
+ }
79
+ const entries = Object.entries(listMap)[0];
80
+ key = entries[0];
81
+ list = entries[1];
82
+ const newComponent = {
83
+ containerName: `${containerName + "_" + layoutName}${isUsePrefix ? "_" + orderName + "-" + list.length : ""}`,
84
+ component: cloneElement(
85
+ dropComponent,
86
+ { key: screenKey, screenKey }
87
+ ),
88
+ navigationTitle,
89
+ dropDocumentOutsideOption,
90
+ screenKey: screenKey || Array.from(
91
+ window.crypto.getRandomValues(new Uint32Array(16)),
92
+ (e) => e.toString(32).padStart(2, "0")
93
+ ).join("")
94
+ };
95
+ let allComponents;
96
+ if (nextContainerName) {
97
+ const index = list.findIndex(
98
+ (item) => item.containerName === nextContainerName
99
+ );
100
+ if (index !== -1) {
101
+ if (nextContainerNameOrderName === orderName) {
102
+ if (orderName === "before") {
103
+ allComponents = [
104
+ ...list.slice(0, index),
105
+ newComponent,
106
+ ...list.slice(index)
107
+ ];
108
+ } else {
109
+ allComponents = [
110
+ ...list.slice(0, index + 1),
111
+ newComponent,
112
+ ...list.slice(index + 1)
113
+ ];
114
+ }
115
+ } else {
116
+ if (nextContainerNameOrderName === "after" && orderName === "before") {
117
+ allComponents = [
118
+ ...list.slice(0, index),
119
+ newComponent,
120
+ ...list.slice(index)
121
+ ];
122
+ } else if (nextContainerNameOrderName === "before" && orderName === "after") {
123
+ allComponents = [
124
+ ...list.slice(0, index + 1),
125
+ newComponent,
126
+ ...list.slice(index + 1)
127
+ ];
128
+ } else {
129
+ if (orderName === "before") {
130
+ allComponents = [
131
+ ...list.slice(0, index),
132
+ newComponent,
133
+ ...list.slice(index)
134
+ ];
135
+ } else {
136
+ allComponents = [
137
+ ...list.slice(0, index + 1),
138
+ newComponent,
139
+ ...list.slice(index + 1)
140
+ ];
141
+ }
142
+ }
143
+ }
144
+ } else {
145
+ if (nextContainerNameOrderName === "center" && orderName === "after") {
146
+ allComponents = [newComponent, ...list];
147
+ } else if (nextContainerNameOrderName === "center" && orderName === "before") {
148
+ allComponents = [...list, newComponent];
149
+ } else {
150
+ allComponents = orderName === "before" ? [newComponent, ...list] : [...list, newComponent];
151
+ }
152
+ }
153
+ } else {
154
+ allComponents = orderName === "before" ? [newComponent, ...list] : [...list, newComponent];
155
+ }
156
+ const seen = /* @__PURE__ */ new Set();
157
+ const result = allComponents.filter((item) => {
158
+ if (seen.has(item.containerName)) {
159
+ return false;
160
+ }
161
+ seen.add(item.containerName);
162
+ return true;
163
+ });
164
+ dropMovementEventSubject.next({
165
+ state: "append",
166
+ targetParentLayoutName: parentLayoutName,
167
+ targetLayoutName: layoutName,
168
+ targetContainerName: containerName,
169
+ orderName
170
+ });
171
+ return { [key]: result };
172
+ };
173
+ const handleRemove = (list, targetContainerName, orderNameSetter) => {
174
+ const result = list.filter((e) => e.containerName !== targetContainerName);
175
+ if (result.length != list.length)
176
+ orderNameSetter(list.length - result.length);
177
+ return result;
178
+ };
179
+ function getAdjacentItem(items, currentIndex) {
180
+ if (currentIndex + 1 < items.length) {
181
+ return {
182
+ adjacentItem: items[currentIndex + 1],
183
+ adjacentIndex: currentIndex + 1
184
+ };
185
+ } else if (currentIndex - 1 >= 0) {
186
+ return {
187
+ adjacentItem: items[currentIndex - 1],
188
+ adjacentIndex: currentIndex - 1
189
+ };
190
+ }
191
+ return { adjacentItem: null, adjacentIndex: currentIndex };
192
+ }
193
+ const getSelfOrderName = (containerName) => {
194
+ const result = containerName.split("_").at(-1)?.split("-").at(0)?.split("=").at(0);
195
+ if (["before", "center", "after"].some((e) => e === result)) {
196
+ return result;
197
+ } else {
198
+ return;
199
+ }
200
+ };
201
+ function FlexLayoutSplitScreen({
202
+ children,
203
+ containerName,
204
+ layoutName,
205
+ navigationTitle,
206
+ dropDocumentOutsideOption,
207
+ screenKey
208
+ }) {
209
+ const {
210
+ direction,
211
+ isSplit,
212
+ boundaryContainerSize,
213
+ afterDropTargetComponent,
214
+ beforeDropTargetComponent,
215
+ centerDropTargetComponent,
216
+ setAfterDropTargetComponent,
217
+ setBeforeDropTargetComponent,
218
+ setCenterDropTargetComponent,
219
+ layoutRef,
220
+ setIsSplit,
221
+ setDirection
222
+ } = useFlexLayoutSplitScreen({
223
+ isSplitInitial: false,
224
+ directionInitial: "row",
225
+ selfContainerName: containerName,
226
+ parentLayoutName: "",
227
+ layoutName
228
+ });
229
+ useEffect(() => {
230
+ resetRootSplitScreen(layoutName);
231
+ const subscribe = getSplitScreen(layoutName, layoutName).subscribe((layoutInfo) => {
232
+ if (layoutInfo) {
233
+ setBeforeDropTargetComponent([
234
+ ...layoutInfo.beforeDropTargetComponent
235
+ ]);
236
+ setAfterDropTargetComponent([
237
+ ...layoutInfo.afterDropTargetComponent
238
+ ]);
239
+ setCenterDropTargetComponent([
240
+ ...layoutInfo.centerDropTargetComponent
241
+ ]);
242
+ setDirection(layoutInfo.direction);
243
+ if (layoutInfo.beforeDropTargetComponent.length !== 0 || layoutInfo.afterDropTargetComponent.length !== 0) {
244
+ setIsSplit(true);
245
+ }
246
+ } else {
247
+ setSplitScreen(layoutName, layoutName, {
248
+ afterDropTargetComponent: [],
249
+ beforeDropTargetComponent: [],
250
+ centerDropTargetComponent: [
251
+ {
252
+ containerName,
253
+ component: children,
254
+ navigationTitle,
255
+ dropDocumentOutsideOption,
256
+ screenKey: screenKey ? screenKey : Array.from(
257
+ window.crypto.getRandomValues(
258
+ new Uint32Array(16)
259
+ ),
260
+ (e) => e.toString(32).padStart(2, "0")
261
+ ).join("")
262
+ }
263
+ ],
264
+ direction
265
+ });
266
+ }
267
+ });
268
+ return () => {
269
+ subscribe.unsubscribe();
270
+ resetRootSplitScreen(layoutName);
271
+ };
272
+ }, [layoutName]);
273
+ useEffect(() => {
274
+ const subscribe = dropMovementEventSubject.pipe(
275
+ distinctUntilChanged((prev, curr) => {
276
+ const filterChildren = (obj) => {
277
+ const {
278
+ children: children2,
279
+ component,
280
+ targetComponent,
281
+ x,
282
+ y,
283
+ ...rest
284
+ } = obj || {};
285
+ return rest;
286
+ };
287
+ return equal(filterChildren(prev), filterChildren(curr));
288
+ })
289
+ ).subscribe((event) => {
290
+ if (event.state === "remove") {
291
+ if (event.targetParentLayoutName === layoutName || event.targetParentLayoutName === "" && event.targetLayoutName === layoutName) {
292
+ requestAnimationFrame(() => {
293
+ let removeCallback = (removeOrderName) => {
294
+ if (event.nextContainerName && event.dropTargetComponentEvent && event.targetComponent) {
295
+ const targetComponentsMap = handleUpdateDropTargetComponents({
296
+ orderName: removeOrderName,
297
+ containerName: event.nextContainerName,
298
+ parentLayoutName: "",
299
+ layoutName,
300
+ dropComponent: event.targetComponent,
301
+ navigationTitle: event.dropTargetComponentEvent.navigationTitle,
302
+ isUsePrefix: true,
303
+ afterDropTargetComponent,
304
+ beforeDropTargetComponent,
305
+ centerDropTargetComponent,
306
+ dropDocumentOutsideOption,
307
+ screenKey: event.dropTargetComponentEvent.screenKey
308
+ });
309
+ setSplitScreen(layoutName, layoutName, {
310
+ ...getCurrentSplitScreenComponents(
311
+ layoutName,
312
+ layoutName
313
+ ) || {
314
+ afterDropTargetComponent,
315
+ beforeDropTargetComponent,
316
+ centerDropTargetComponent,
317
+ direction
318
+ },
319
+ ...targetComponentsMap
320
+ });
321
+ Promise.resolve().then(
322
+ () => event.dropEndCallback && event.dropEndCallback({
323
+ x: event.x,
324
+ y: event.y,
325
+ containerName
326
+ })
327
+ );
328
+ }
329
+ };
330
+ const currentComponents = getCurrentSplitScreenComponents(
331
+ layoutName,
332
+ layoutName
333
+ );
334
+ const afterList = handleRemove(
335
+ currentComponents?.afterDropTargetComponent || afterDropTargetComponent,
336
+ event.targetContainerName,
337
+ () => removeCallback("after")
338
+ );
339
+ const beforList = handleRemove(
340
+ currentComponents?.beforeDropTargetComponent || beforeDropTargetComponent,
341
+ event.targetContainerName,
342
+ () => removeCallback("before")
343
+ );
344
+ const centerList = handleRemove(
345
+ currentComponents?.centerDropTargetComponent || centerDropTargetComponent,
346
+ event.targetContainerName,
347
+ () => removeCallback("center")
348
+ );
349
+ setSplitScreen(layoutName, layoutName, {
350
+ afterDropTargetComponent: afterList,
351
+ beforeDropTargetComponent: beforList,
352
+ centerDropTargetComponent: centerList,
353
+ direction
354
+ });
355
+ });
356
+ }
357
+ } else if (event.state === "append") {
358
+ const {
359
+ x,
360
+ y,
361
+ dropEndCallback,
362
+ dropTargetComponentEvent,
363
+ orderName,
364
+ parentOrderName,
365
+ targetLayoutName,
366
+ targetParentLayoutName,
367
+ targetContainerName,
368
+ targetComponent,
369
+ nextContainerName
370
+ } = event;
371
+ if (layoutRef.current && orderName && x && y && targetComponent && dropTargetComponentEvent && targetLayoutName === layoutName && isInnerDrop({ x, y, element: layoutRef.current })) {
372
+ const {
373
+ direction: dropDirection,
374
+ navigationTitle: navigationTitle2,
375
+ dropDocumentOutsideOption: dropDocumentOutsideOption2
376
+ } = dropTargetComponentEvent;
377
+ const isOrderNameNotCenter = orderName !== "center";
378
+ const isOrderNameCenterAndFirstScreen = orderName === "center" && centerDropTargetComponent.length <= 1;
379
+ if (isOrderNameNotCenter || isOrderNameCenterAndFirstScreen) {
380
+ setIsSplit(true);
381
+ if (isOrderNameNotCenter) {
382
+ setDirection(dropDirection);
383
+ const targetComponentsMap = handleUpdateDropTargetComponents({
384
+ orderName,
385
+ parentOrderName,
386
+ containerName: targetContainerName,
387
+ nextContainerName,
388
+ dropComponent: targetComponent,
389
+ parentLayoutName: "",
390
+ layoutName,
391
+ navigationTitle: navigationTitle2,
392
+ isUsePrefix: true,
393
+ afterDropTargetComponent,
394
+ beforeDropTargetComponent,
395
+ centerDropTargetComponent,
396
+ dropDocumentOutsideOption: dropDocumentOutsideOption2
397
+ });
398
+ setSplitScreen(layoutName, layoutName, {
399
+ ...{
400
+ afterDropTargetComponent,
401
+ beforeDropTargetComponent,
402
+ centerDropTargetComponent,
403
+ direction: dropDirection
404
+ },
405
+ ...targetComponentsMap,
406
+ ...{ direction: dropDirection }
407
+ });
408
+ Promise.resolve().then(
409
+ () => dropEndCallback && dropEndCallback({
410
+ x: event.x,
411
+ y: event.y,
412
+ containerName
413
+ })
414
+ );
415
+ } else {
416
+ const childScreenInfo = getCurrentSplitScreenComponents(
417
+ layoutName,
418
+ `${layoutName}_center=${centerDropTargetComponent[0].screenKey}`
419
+ ) || {
420
+ afterDropTargetComponent: [],
421
+ beforeDropTargetComponent: [],
422
+ centerDropTargetComponent: [],
423
+ direction
424
+ };
425
+ setSplitScreen(
426
+ layoutName,
427
+ `${layoutName}_center=${centerDropTargetComponent[0].screenKey}`,
428
+ {
429
+ ...childScreenInfo,
430
+ ...{
431
+ centerDropTargetComponent: [
432
+ centerDropTargetComponent[0],
433
+ {
434
+ containerName: `${targetContainerName}_${layoutName}_${orderName}`,
435
+ component: targetComponent,
436
+ dropDocumentOutsideOption: dropDocumentOutsideOption2,
437
+ screenKey: centerDropTargetComponent[0].screenKey,
438
+ navigationTitle: navigationTitle2
439
+ }
440
+ ]
441
+ }
442
+ }
443
+ );
444
+ }
445
+ }
446
+ }
447
+ }
448
+ });
449
+ return () => {
450
+ subscribe.unsubscribe();
451
+ };
452
+ }, [
453
+ direction,
454
+ layoutName,
455
+ isSplit,
456
+ beforeDropTargetComponent,
457
+ afterDropTargetComponent,
458
+ centerDropTargetComponent
459
+ ]);
460
+ return /* @__PURE__ */ jsxs("div", { className: `${styles["flex-split-screen"]}`, ref: layoutRef, children: [
461
+ /* @__PURE__ */ jsxs(
462
+ FlexLayout,
463
+ {
464
+ direction,
465
+ layoutName,
466
+ "data-is_split": isSplit,
467
+ panelMovementMode: "bulldozer",
468
+ children: [
469
+ beforeDropTargetComponent.length != 0 ? /* @__PURE__ */ jsx(Fragment, { children: beforeDropTargetComponent.map(
470
+ ({
471
+ containerName: cName,
472
+ component,
473
+ navigationTitle: navigationTitle2,
474
+ dropDocumentOutsideOption: dropDocumentOutsideOption2,
475
+ screenKey: screenKey2
476
+ }, i) => /* @__PURE__ */ jsx(
477
+ FlexLayoutContainer,
478
+ {
479
+ containerName: cName,
480
+ isInitialResizable: true,
481
+ isResizePanel: true,
482
+ children: /* @__PURE__ */ jsx(
483
+ FlexLayoutSplitScreenChild,
484
+ {
485
+ parentDirection: direction,
486
+ layoutName: `${layoutName}_before`,
487
+ parentLayoutName: layoutName,
488
+ containerName: cName,
489
+ depth: 1,
490
+ rootRef: layoutRef,
491
+ screenKey: screenKey2,
492
+ initialCenterComponents: [
493
+ {
494
+ navigationTitle: navigationTitle2,
495
+ component,
496
+ containerName: cName,
497
+ dropDocumentOutsideOption: dropDocumentOutsideOption2,
498
+ screenKey: screenKey2
499
+ }
500
+ ],
501
+ rootName: layoutName
502
+ }
503
+ )
504
+ },
505
+ cName
506
+ )
507
+ ) }) : /* @__PURE__ */ jsx("div", {}),
508
+ centerDropTargetComponent.length === 0 ? /* @__PURE__ */ jsx("div", {}) : /* @__PURE__ */ jsx(
509
+ FlexLayoutContainer,
510
+ {
511
+ containerName: `${centerDropTargetComponent[0].containerName}`,
512
+ isInitialResizable: true,
513
+ isResizePanel: isSplit,
514
+ children: isSplit ? /* @__PURE__ */ jsx(
515
+ FlexLayoutSplitScreenChild,
516
+ {
517
+ parentDirection: direction,
518
+ layoutName: `${layoutName}_center`,
519
+ parentLayoutName: layoutName,
520
+ containerName: `${centerDropTargetComponent[0].containerName}`,
521
+ depth: 0,
522
+ rootRef: layoutRef,
523
+ screenKey: centerDropTargetComponent[0].screenKey,
524
+ initialCenterComponents: [
525
+ {
526
+ navigationTitle: centerDropTargetComponent[0].navigationTitle,
527
+ component: centerDropTargetComponent[0].component,
528
+ containerName: centerDropTargetComponent[0].containerName,
529
+ dropDocumentOutsideOption: centerDropTargetComponent[0].dropDocumentOutsideOption,
530
+ screenKey: centerDropTargetComponent[0].screenKey
531
+ }
532
+ ],
533
+ rootName: layoutName
534
+ }
535
+ ) : /* @__PURE__ */ jsx(
536
+ FlexLayoutSplitScreenScrollBox,
537
+ {
538
+ keyName: centerDropTargetComponent[0].containerName,
539
+ isDefaultScrollStyle: true,
540
+ children: centerDropTargetComponent[0].component
541
+ }
542
+ )
543
+ }
544
+ ),
545
+ afterDropTargetComponent.length != 0 ? /* @__PURE__ */ jsx(Fragment, { children: afterDropTargetComponent.map(
546
+ ({
547
+ containerName: cName,
548
+ component,
549
+ navigationTitle: navigationTitle2,
550
+ dropDocumentOutsideOption: dropDocumentOutsideOption2,
551
+ screenKey: screenKey2
552
+ }, i) => /* @__PURE__ */ jsx(
553
+ FlexLayoutContainer,
554
+ {
555
+ containerName: cName,
556
+ isInitialResizable: true,
557
+ isResizePanel: afterDropTargetComponent.length - 1 !== i,
558
+ children: /* @__PURE__ */ jsx(
559
+ FlexLayoutSplitScreenChild,
560
+ {
561
+ parentDirection: direction,
562
+ layoutName: `${layoutName}_after`,
563
+ parentLayoutName: layoutName,
564
+ containerName: cName,
565
+ depth: 1,
566
+ rootRef: layoutRef,
567
+ screenKey: screenKey2,
568
+ initialCenterComponents: [
569
+ {
570
+ navigationTitle: navigationTitle2,
571
+ component,
572
+ containerName: cName,
573
+ dropDocumentOutsideOption: dropDocumentOutsideOption2,
574
+ screenKey: screenKey2
575
+ }
576
+ ],
577
+ rootName: layoutName
578
+ }
579
+ )
580
+ },
581
+ cName
582
+ )
583
+ ) }) : /* @__PURE__ */ jsx("div", {})
584
+ ]
585
+ }
586
+ ),
587
+ boundaryContainerSize && /* @__PURE__ */ jsx(
588
+ "div",
589
+ {
590
+ className: `${styles["flex-split-screen-boundary-container"]}`,
591
+ style: { ...boundaryContainerSize },
592
+ children: "\u2B07\uFE0F\uB4DC\uB86D\uD558\uBA74 \uD654\uBA74\uC774 \uBD84\uD560\uB429\uB2C8\uB2E4."
593
+ }
594
+ )
595
+ ] });
596
+ }
597
+ function FlexLayoutSplitScreenChild({
598
+ containerName,
599
+ layoutName,
600
+ parentLayoutName,
601
+ parentDirection,
602
+ depth,
603
+ //isSplit: isSplitInitial,
604
+ rootRef,
605
+ rootName,
606
+ initialCenterComponents,
607
+ screenKey
608
+ }) {
609
+ const {
610
+ direction,
611
+ isSplit,
612
+ boundaryContainerSize,
613
+ afterDropTargetComponent,
614
+ beforeDropTargetComponent,
615
+ centerDropTargetComponent,
616
+ setAfterDropTargetComponent,
617
+ setBeforeDropTargetComponent,
618
+ setCenterDropTargetComponent,
619
+ layoutRef,
620
+ setIsSplit,
621
+ setDirection
622
+ } = useFlexLayoutSplitScreen({
623
+ isSplitInitial: false,
624
+ directionInitial: "row",
625
+ parentDirection,
626
+ selfContainerName: containerName,
627
+ parentLayoutName,
628
+ layoutName
629
+ });
630
+ const [isEmptyContent, setIsEmptyContent] = useState(false);
631
+ const [activeIndex, setActiveIndex] = useState(0);
632
+ const centerDropTargetComponentRef = useRef(centerDropTargetComponent);
633
+ const activeIndexRef = useRef(activeIndex);
634
+ useEffect(() => {
635
+ const subscribe = getSplitScreen(rootName, `${layoutName}=${screenKey}`).pipe(take(1)).subscribe((layoutInfo) => {
636
+ setSplitScreen(rootName, `${layoutName}=${screenKey}`, {
637
+ afterDropTargetComponent: layoutInfo?.afterDropTargetComponent || [],
638
+ beforeDropTargetComponent: layoutInfo?.beforeDropTargetComponent || [],
639
+ centerDropTargetComponent: layoutInfo?.centerDropTargetComponent || initialCenterComponents || [],
640
+ direction: layoutInfo?.direction || direction
641
+ });
642
+ });
643
+ return () => {
644
+ removeSplitScreenChild(rootName, layoutName);
645
+ subscribe.unsubscribe();
646
+ };
647
+ }, [rootName, layoutName, initialCenterComponents]);
648
+ useEffect(() => {
649
+ const subscribe = getSplitScreen(rootName, `${layoutName}=${screenKey}`).subscribe((layoutInfo) => {
650
+ if (layoutInfo) {
651
+ setBeforeDropTargetComponent([
652
+ ...layoutInfo.beforeDropTargetComponent
653
+ ]);
654
+ setAfterDropTargetComponent([
655
+ ...layoutInfo.afterDropTargetComponent
656
+ ]);
657
+ setCenterDropTargetComponent([
658
+ ...layoutInfo.centerDropTargetComponent
659
+ ]);
660
+ setDirection(layoutInfo.direction);
661
+ if (layoutInfo.beforeDropTargetComponent.length !== 0 || layoutInfo.afterDropTargetComponent.length !== 0) {
662
+ setIsSplit(true);
663
+ } else if (layoutInfo.beforeDropTargetComponent.length === 0 && layoutInfo.centerDropTargetComponent.length === 0 && layoutInfo.afterDropTargetComponent.length === 0) {
664
+ dropMovementEventSubject.next({
665
+ state: "remove",
666
+ targetContainerName: containerName,
667
+ targetParentLayoutName: "",
668
+ targetLayoutName: parentLayoutName
669
+ });
670
+ setIsEmptyContent(true);
671
+ }
672
+ }
673
+ });
674
+ return () => {
675
+ subscribe.unsubscribe();
676
+ };
677
+ }, [rootName, layoutName]);
678
+ useEffect(() => {
679
+ const subscribe = dropMovementEventSubject.pipe(
680
+ distinctUntilChanged((prev, curr) => {
681
+ const filterChildren = (obj) => {
682
+ const {
683
+ children,
684
+ component,
685
+ targetComponent,
686
+ x,
687
+ y,
688
+ ...rest
689
+ } = obj || {};
690
+ return rest;
691
+ };
692
+ return equal(filterChildren(prev), filterChildren(curr));
693
+ })
694
+ ).subscribe((event) => {
695
+ if (event.state === "remove") {
696
+ if (event.targetParentLayoutName === layoutName || event.targetParentLayoutName === "" && event.targetLayoutName === layoutName) {
697
+ requestAnimationFrame(() => {
698
+ let removeCallback = (removeOrderName) => {
699
+ if (event.nextContainerName && event.dropTargetComponentEvent && event.targetComponent) {
700
+ const targetComponentsMap = handleUpdateDropTargetComponents({
701
+ orderName: removeOrderName,
702
+ containerName: event.nextContainerName,
703
+ parentLayoutName,
704
+ layoutName,
705
+ dropComponent: event.targetComponent,
706
+ navigationTitle: event.dropTargetComponentEvent.navigationTitle,
707
+ isUsePrefix: true,
708
+ afterDropTargetComponent,
709
+ beforeDropTargetComponent,
710
+ centerDropTargetComponent,
711
+ dropDocumentOutsideOption: event.dropTargetComponentEvent?.dropDocumentOutsideOption,
712
+ screenKey: event.dropTargetComponentEvent.screenKey
713
+ });
714
+ setSplitScreen(
715
+ rootName,
716
+ `${layoutName}=${screenKey}`,
717
+ {
718
+ ...getCurrentSplitScreenComponents(
719
+ rootName,
720
+ `${layoutName}=${screenKey}`
721
+ ) || {
722
+ afterDropTargetComponent,
723
+ beforeDropTargetComponent,
724
+ centerDropTargetComponent,
725
+ direction
726
+ },
727
+ ...targetComponentsMap
728
+ }
729
+ );
730
+ Promise.resolve().then(
731
+ () => event.dropEndCallback && event.dropEndCallback({
732
+ x: event.x,
733
+ y: event.y,
734
+ containerName
735
+ })
736
+ );
737
+ }
738
+ };
739
+ const currentComponents = getCurrentSplitScreenComponents(
740
+ rootName,
741
+ `${layoutName}=${screenKey}`
742
+ );
743
+ const afterList = handleRemove(
744
+ currentComponents?.afterDropTargetComponent || afterDropTargetComponent,
745
+ event.targetContainerName,
746
+ () => removeCallback("after")
747
+ );
748
+ const beforList = handleRemove(
749
+ currentComponents?.beforeDropTargetComponent || beforeDropTargetComponent,
750
+ event.targetContainerName,
751
+ () => removeCallback("before")
752
+ );
753
+ const centerList = handleRemove(
754
+ currentComponents?.centerDropTargetComponent || centerDropTargetComponent,
755
+ event.targetContainerName,
756
+ () => removeCallback("center")
757
+ );
758
+ setSplitScreen(
759
+ rootName,
760
+ `${layoutName}=${screenKey}`,
761
+ {
762
+ afterDropTargetComponent: afterList,
763
+ beforeDropTargetComponent: beforList,
764
+ centerDropTargetComponent: centerList,
765
+ direction
766
+ }
767
+ );
768
+ });
769
+ }
770
+ } else if (event.state === "append") {
771
+ const {
772
+ x,
773
+ y,
774
+ dropEndCallback,
775
+ dropTargetComponentEvent,
776
+ orderName,
777
+ targetLayoutName,
778
+ targetParentLayoutName,
779
+ targetContainerName,
780
+ targetComponent,
781
+ nextContainerName,
782
+ parentOrderName
783
+ } = event;
784
+ if (layoutRef.current && orderName && x && y && dropTargetComponentEvent && isInnerDrop({ x, y, element: layoutRef.current })) {
785
+ const {
786
+ direction: dropDirection,
787
+ navigationTitle,
788
+ dropDocumentOutsideOption,
789
+ screenKey: containerScreenKey
790
+ } = dropTargetComponentEvent;
791
+ if (
792
+ //orderName !== 'center' &&
793
+ targetLayoutName === layoutName && targetComponent
794
+ ) {
795
+ if (dropDirection === parentDirection && orderName !== "center") {
796
+ dropMovementEventSubject.next({
797
+ state: "append",
798
+ targetContainerName,
799
+ targetParentLayoutName: "",
800
+ targetLayoutName: parentLayoutName,
801
+ targetComponent,
802
+ nextContainerName: containerName,
803
+ parentOrderName: getSelfOrderName(layoutName) || orderName,
804
+ orderName,
805
+ x,
806
+ y,
807
+ dropEndCallback,
808
+ dropTargetComponentEvent: {
809
+ navigationTitle,
810
+ dropDocumentOutsideOption,
811
+ direction: parentDirection,
812
+ screenKey
813
+ }
814
+ });
815
+ } else {
816
+ if (orderName !== "center") {
817
+ setDirection(dropDirection);
818
+ setIsSplit(true);
819
+ }
820
+ const targetComponentsMap = handleUpdateDropTargetComponents({
821
+ orderName,
822
+ parentOrderName,
823
+ containerName: targetContainerName,
824
+ nextContainerName,
825
+ parentLayoutName,
826
+ layoutName,
827
+ dropComponent: targetComponent,
828
+ navigationTitle,
829
+ isUsePrefix: orderName !== "center",
830
+ afterDropTargetComponent,
831
+ beforeDropTargetComponent,
832
+ centerDropTargetComponent,
833
+ dropDocumentOutsideOption
834
+ });
835
+ setSplitScreen(
836
+ rootName,
837
+ `${layoutName}=${screenKey}`,
838
+ {
839
+ ...getCurrentSplitScreenComponents(
840
+ rootName,
841
+ `${layoutName}=${screenKey}`
842
+ ) || {
843
+ afterDropTargetComponent,
844
+ beforeDropTargetComponent,
845
+ centerDropTargetComponent,
846
+ direction
847
+ },
848
+ ...targetComponentsMap,
849
+ ...{ direction: dropDirection }
850
+ }
851
+ );
852
+ Promise.resolve().then(
853
+ () => event.dropEndCallback && event.dropEndCallback({
854
+ x: event.x,
855
+ y: event.y,
856
+ containerName
857
+ })
858
+ );
859
+ }
860
+ }
861
+ }
862
+ }
863
+ });
864
+ return () => {
865
+ subscribe.unsubscribe();
866
+ };
867
+ }, [
868
+ direction,
869
+ parentDirection,
870
+ parentLayoutName,
871
+ layoutName,
872
+ beforeDropTargetComponent,
873
+ afterDropTargetComponent,
874
+ centerDropTargetComponent
875
+ ]);
876
+ useEffect(() => {
877
+ centerDropTargetComponentRef.current = centerDropTargetComponent;
878
+ }, [centerDropTargetComponent]);
879
+ useEffect(() => {
880
+ activeIndexRef.current = activeIndex;
881
+ }, [activeIndex]);
882
+ const [isOnlyOneScreen, setIsOnlyOneScreen] = useState(false);
883
+ return /* @__PURE__ */ jsx(Fragment, { children: !isEmptyContent && /* @__PURE__ */ jsxs(
884
+ "div",
885
+ {
886
+ className: `${styles["flex-split-screen"]}`,
887
+ ref: layoutRef,
888
+ children: [
889
+ /* @__PURE__ */ jsxs(
890
+ FlexLayout,
891
+ {
892
+ direction,
893
+ layoutName: `${layoutName}`,
894
+ panelMovementMode: "bulldozer",
895
+ children: [
896
+ beforeDropTargetComponent.length != 0 ? /* @__PURE__ */ jsx(Fragment, { children: beforeDropTargetComponent.map(
897
+ ({
898
+ containerName: cName,
899
+ component,
900
+ navigationTitle,
901
+ dropDocumentOutsideOption,
902
+ screenKey: screenKey2
903
+ }, i) => /* @__PURE__ */ jsx(
904
+ FlexLayoutContainer,
905
+ {
906
+ containerName: cName,
907
+ isInitialResizable: true,
908
+ isResizePanel: true,
909
+ children: /* @__PURE__ */ jsx(
910
+ FlexLayoutSplitScreenChild,
911
+ {
912
+ parentDirection: direction,
913
+ layoutName: `${layoutName}_before-${depth}`,
914
+ parentLayoutName: layoutName,
915
+ containerName: cName,
916
+ depth: depth + 1,
917
+ rootRef,
918
+ screenKey: screenKey2,
919
+ initialCenterComponents: [
920
+ {
921
+ navigationTitle,
922
+ component,
923
+ containerName: cName,
924
+ dropDocumentOutsideOption,
925
+ screenKey: screenKey2
926
+ }
927
+ ],
928
+ rootName
929
+ }
930
+ )
931
+ },
932
+ cName
933
+ )
934
+ ) }) : /* @__PURE__ */ jsx("div", {}),
935
+ centerDropTargetComponent.length != 0 ? /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
936
+ FlexLayoutContainer,
937
+ {
938
+ containerName: `${(centerDropTargetComponent[activeIndex] || centerDropTargetComponent[0]).containerName}`,
939
+ isInitialResizable: true,
940
+ isResizePanel: isSplit,
941
+ children: isSplit ? /* @__PURE__ */ jsx("div", { "data-key": screenKey, children: /* @__PURE__ */ jsx(
942
+ FlexLayoutSplitScreenChild,
943
+ {
944
+ parentDirection: direction,
945
+ layoutName: `${layoutName}_center-${depth}`,
946
+ parentLayoutName: layoutName,
947
+ containerName: `${(centerDropTargetComponent[activeIndex] || centerDropTargetComponent[0]).containerName}`,
948
+ depth: depth + 1,
949
+ rootRef,
950
+ initialCenterComponents: centerDropTargetComponent.map(
951
+ ({
952
+ navigationTitle,
953
+ component,
954
+ containerName: cName,
955
+ dropDocumentOutsideOption,
956
+ screenKey: centerScreenKey
957
+ }) => ({
958
+ navigationTitle,
959
+ component,
960
+ containerName: cName,
961
+ dropDocumentOutsideOption,
962
+ screenKey: centerScreenKey
963
+ })
964
+ ),
965
+ screenKey,
966
+ rootName
967
+ }
968
+ ) }) : /* @__PURE__ */ jsxs(
969
+ FlexLayoutSplitScreenScrollBox,
970
+ {
971
+ keyName: (centerDropTargetComponent[activeIndex] || centerDropTargetComponent[0]).containerName,
972
+ isDefaultScrollStyle: true,
973
+ children: [
974
+ !isOnlyOneScreen && /* @__PURE__ */ jsx(
975
+ "div",
976
+ {
977
+ className: `${styles["flex-split-screen-drag-box-title-wrapper-sticky"]}`,
978
+ children: /* @__PURE__ */ jsxs(
979
+ "div",
980
+ {
981
+ "data-is_split": isSplit,
982
+ "data-layout_name": layoutName,
983
+ "data-parent_layout_name": parentLayoutName,
984
+ "data-container_name": `${(centerDropTargetComponent[activeIndex] || centerDropTargetComponent[0]).containerName}`,
985
+ className: `${styles["flex-split-screen-drag-box-title-wrapper"]}`,
986
+ children: [
987
+ /* @__PURE__ */ jsx(
988
+ FlexLayoutSplitScreenDragBoxContainer,
989
+ {
990
+ "data-layout_name": layoutName,
991
+ layoutName,
992
+ children: centerDropTargetComponent.map(
993
+ (item, index) => /* @__PURE__ */ jsx(
994
+ FlexLayoutSplitScreenDragBoxItem,
995
+ {
996
+ onClose: (ev) => {
997
+ if (activeIndexRef.current === index && centerDropTargetComponent.length === 1) {
998
+ dropMovementEventSubject.next(
999
+ {
1000
+ state: "remove",
1001
+ targetContainerName: containerName,
1002
+ targetParentLayoutName: parentLayoutName,
1003
+ targetLayoutName: layoutName
1004
+ }
1005
+ );
1006
+ } else {
1007
+ if (centerDropTargetComponent.length === activeIndexRef.current + 1) {
1008
+ setActiveIndex(
1009
+ activeIndexRef.current - 1
1010
+ );
1011
+ }
1012
+ setCenterDropTargetComponent(
1013
+ (prev) => {
1014
+ const result = handleRemove(
1015
+ prev,
1016
+ item.containerName,
1017
+ () => {
1018
+ }
1019
+ );
1020
+ return result;
1021
+ }
1022
+ );
1023
+ }
1024
+ },
1025
+ isActive: activeIndex === index,
1026
+ children: /* @__PURE__ */ jsx(
1027
+ FlexLayoutSplitScreenDragBox,
1028
+ {
1029
+ onClick: () => {
1030
+ setActiveIndex(
1031
+ index
1032
+ );
1033
+ },
1034
+ containerName: item.containerName,
1035
+ dropDocumentOutsideOption: item.dropDocumentOutsideOption,
1036
+ targetComponent: item.component,
1037
+ navigationTitle: item.navigationTitle,
1038
+ "data-container-name": item.containerName,
1039
+ "data-layout-name": layoutName,
1040
+ "data-parent-layout-name": parentLayoutName,
1041
+ dropEndCallback: ({
1042
+ x,
1043
+ y,
1044
+ containerName: appendContainerName
1045
+ }) => {
1046
+ if (!rootRef.current || !layoutRef.current)
1047
+ return;
1048
+ const isRootOver = isOverDrop(
1049
+ {
1050
+ x,
1051
+ y,
1052
+ element: rootRef.current
1053
+ }
1054
+ );
1055
+ const isLayoutInner = isInnerDrop(
1056
+ {
1057
+ x,
1058
+ y,
1059
+ element: layoutRef.current
1060
+ }
1061
+ );
1062
+ if (!isRootOver && !isLayoutInner || !isRootOver && isLayoutInner && centerDropTargetComponentRef.current.length > 1) {
1063
+ const option = {};
1064
+ if (centerDropTargetComponentRef.current.length > 1) {
1065
+ const {
1066
+ adjacentItem,
1067
+ adjacentIndex
1068
+ } = getAdjacentItem(
1069
+ centerDropTargetComponentRef.current,
1070
+ activeIndexRef.current
1071
+ );
1072
+ if (adjacentItem && activeIndexRef.current === index) {
1073
+ Object.assign(
1074
+ option,
1075
+ {
1076
+ x,
1077
+ y,
1078
+ targetComponent: adjacentItem.component,
1079
+ nextContainerName: adjacentItem.containerName,
1080
+ orderName: "center",
1081
+ dropTargetComponentEvent: {
1082
+ navigationTitle: adjacentItem.navigationTitle,
1083
+ dropDocumentOutsideOption: adjacentItem.dropDocumentOutsideOption,
1084
+ direction,
1085
+ screenKey
1086
+ }
1087
+ }
1088
+ );
1089
+ }
1090
+ }
1091
+ if (index === 0) {
1092
+ dropMovementEventSubject.next(
1093
+ {
1094
+ state: "remove",
1095
+ targetContainerName: item.containerName,
1096
+ targetParentLayoutName: parentLayoutName,
1097
+ targetLayoutName: layoutName,
1098
+ ...option
1099
+ }
1100
+ );
1101
+ } else {
1102
+ dropMovementEventSubject.next(
1103
+ {
1104
+ state: "remove",
1105
+ targetContainerName: item.containerName,
1106
+ targetParentLayoutName: "",
1107
+ targetLayoutName: layoutName,
1108
+ ...option
1109
+ }
1110
+ );
1111
+ }
1112
+ }
1113
+ },
1114
+ children: item.navigationTitle
1115
+ }
1116
+ )
1117
+ },
1118
+ item.navigationTitle + layoutName + item.containerName
1119
+ )
1120
+ )
1121
+ },
1122
+ layoutName
1123
+ ),
1124
+ /* @__PURE__ */ jsx(FlexLayoutSplitScreenDragBoxTitleMore, {})
1125
+ ]
1126
+ }
1127
+ )
1128
+ }
1129
+ ),
1130
+ (() => {
1131
+ const target = centerDropTargetComponent[activeIndex] || centerDropTargetComponent[0];
1132
+ return target.component;
1133
+ })()
1134
+ ]
1135
+ }
1136
+ )
1137
+ },
1138
+ (centerDropTargetComponent[activeIndex] || centerDropTargetComponent[0]).containerName
1139
+ ) }) : /* @__PURE__ */ jsx("div", {}),
1140
+ afterDropTargetComponent.length != 0 ? /* @__PURE__ */ jsx(Fragment, { children: afterDropTargetComponent.map(
1141
+ ({
1142
+ containerName: cName,
1143
+ component,
1144
+ navigationTitle,
1145
+ dropDocumentOutsideOption,
1146
+ screenKey: screenKey2
1147
+ }, i) => /* @__PURE__ */ jsx(
1148
+ FlexLayoutContainer,
1149
+ {
1150
+ containerName: cName,
1151
+ isInitialResizable: true,
1152
+ isResizePanel: i !== afterDropTargetComponent.length - 1,
1153
+ children: /* @__PURE__ */ jsx(
1154
+ FlexLayoutSplitScreenChild,
1155
+ {
1156
+ parentDirection: direction,
1157
+ layoutName: `${layoutName}_after-${depth}`,
1158
+ parentLayoutName: layoutName,
1159
+ containerName: cName,
1160
+ depth: depth + 1,
1161
+ rootRef,
1162
+ screenKey: screenKey2,
1163
+ initialCenterComponents: [
1164
+ {
1165
+ navigationTitle,
1166
+ component,
1167
+ containerName: cName,
1168
+ dropDocumentOutsideOption,
1169
+ screenKey: screenKey2
1170
+ }
1171
+ ],
1172
+ rootName
1173
+ }
1174
+ )
1175
+ },
1176
+ cName
1177
+ )
1178
+ ) }) : /* @__PURE__ */ jsx("div", {})
1179
+ ]
1180
+ }
1181
+ ),
1182
+ boundaryContainerSize && /* @__PURE__ */ jsx(
1183
+ "div",
1184
+ {
1185
+ className: `${styles["flex-split-screen-boundary-container"]}`,
1186
+ style: { ...boundaryContainerSize },
1187
+ children: "\u2B07\uFE0F\uB4DC\uB86D\uD558\uBA74 \uD654\uBA74\uC774 \uBD84\uD560\uB429\uB2C8\uB2E4."
1188
+ }
1189
+ )
1190
+ ]
1191
+ }
1192
+ ) });
1193
+ }
1194
+
1195
+ export { FlexLayoutSplitScreen as default };
1196
+ //# sourceMappingURL=FlexLayoutSplitScreen.js.map
1197
+ //# sourceMappingURL=FlexLayoutSplitScreen.js.map