@byeolnaerim/flex-layout 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/flex-layout/components/FlexLayout.cjs +62 -28
  2. package/dist/flex-layout/components/FlexLayout.cjs.map +1 -1
  3. package/dist/flex-layout/components/FlexLayout.js +26 -11
  4. package/dist/flex-layout/components/FlexLayout.js.map +1 -1
  5. package/dist/flex-layout/components/FlexLayoutContainer.cjs +121 -55
  6. package/dist/flex-layout/components/FlexLayoutContainer.cjs.map +1 -1
  7. package/dist/flex-layout/components/FlexLayoutContainer.js +68 -25
  8. package/dist/flex-layout/components/FlexLayoutContainer.js.map +1 -1
  9. package/dist/flex-layout/components/FlexLayoutIFramePane.cjs +68 -0
  10. package/dist/flex-layout/components/FlexLayoutIFramePane.cjs.map +1 -0
  11. package/dist/flex-layout/components/FlexLayoutIFramePane.d.ts +4 -0
  12. package/dist/flex-layout/components/FlexLayoutIFramePane.js +44 -0
  13. package/dist/flex-layout/components/FlexLayoutIFramePane.js.map +1 -0
  14. package/dist/flex-layout/components/FlexLayoutResizePanel.cjs +111 -46
  15. package/dist/flex-layout/components/FlexLayoutResizePanel.cjs.map +1 -1
  16. package/dist/flex-layout/components/FlexLayoutResizePanel.d.ts +1 -1
  17. package/dist/flex-layout/components/FlexLayoutResizePanel.js +68 -27
  18. package/dist/flex-layout/components/FlexLayoutResizePanel.js.map +1 -1
  19. package/dist/flex-layout/components/FlexLayoutSplitScreen.cjs +184 -143
  20. package/dist/flex-layout/components/FlexLayoutSplitScreen.cjs.map +1 -1
  21. package/dist/flex-layout/components/FlexLayoutSplitScreen.js +71 -32
  22. package/dist/flex-layout/components/FlexLayoutSplitScreen.js.map +1 -1
  23. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.cjs +253 -60
  24. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.cjs.map +1 -1
  25. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.d.ts +1 -1
  26. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.js +215 -39
  27. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.js.map +1 -1
  28. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.cjs +40 -17
  29. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.cjs.map +1 -1
  30. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.js +7 -7
  31. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.js.map +1 -1
  32. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.cjs +44 -21
  33. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.cjs.map +1 -1
  34. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.js +7 -8
  35. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.js.map +1 -1
  36. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.cjs +40 -17
  37. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.cjs.map +1 -1
  38. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.js +5 -6
  39. package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.js.map +1 -1
  40. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.cjs +53 -29
  41. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.cjs.map +1 -1
  42. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.js +14 -10
  43. package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.js.map +1 -1
  44. package/dist/flex-layout/components/FlexLayoutStickyBox.cjs +46 -27
  45. package/dist/flex-layout/components/FlexLayoutStickyBox.cjs.map +1 -1
  46. package/dist/flex-layout/components/FlexLayoutStickyBox.d.ts +1 -0
  47. package/dist/flex-layout/components/FlexLayoutStickyBox.js +13 -8
  48. package/dist/flex-layout/components/FlexLayoutStickyBox.js.map +1 -1
  49. package/dist/flex-layout/components/index.cjs +54 -49
  50. package/dist/flex-layout/components/index.cjs.map +1 -1
  51. package/dist/flex-layout/components/index.js +16 -8
  52. package/dist/flex-layout/components/index.js.map +1 -1
  53. package/dist/flex-layout/hooks/index.cjs +23 -19
  54. package/dist/flex-layout/hooks/index.cjs.map +1 -1
  55. package/dist/flex-layout/hooks/index.js +2 -3
  56. package/dist/flex-layout/hooks/index.js.map +1 -1
  57. package/dist/flex-layout/hooks/useDrag.cjs +136 -79
  58. package/dist/flex-layout/hooks/useDrag.cjs.map +1 -1
  59. package/dist/flex-layout/hooks/useDrag.d.ts +5 -0
  60. package/dist/flex-layout/hooks/useDrag.js +86 -47
  61. package/dist/flex-layout/hooks/useDrag.js.map +1 -1
  62. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.cjs +40 -19
  63. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.cjs.map +1 -1
  64. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.js +9 -7
  65. package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.js.map +1 -1
  66. package/dist/flex-layout/hooks/useListPaging.cjs +68 -35
  67. package/dist/flex-layout/hooks/useListPaging.cjs.map +1 -1
  68. package/dist/flex-layout/hooks/useListPaging.js +34 -18
  69. package/dist/flex-layout/hooks/useListPaging.js.map +1 -1
  70. package/dist/flex-layout/hooks/useSizes.cjs +45 -23
  71. package/dist/flex-layout/hooks/useSizes.cjs.map +1 -1
  72. package/dist/flex-layout/hooks/useSizes.js +6 -6
  73. package/dist/flex-layout/hooks/useSizes.js.map +1 -1
  74. package/dist/flex-layout/index.cjs +29 -40
  75. package/dist/flex-layout/index.cjs.map +1 -1
  76. package/dist/flex-layout/index.js +5 -6
  77. package/dist/flex-layout/index.js.map +1 -1
  78. package/dist/flex-layout/providers/FlexLayoutContext.cjs +35 -12
  79. package/dist/flex-layout/providers/FlexLayoutContext.cjs.map +1 -1
  80. package/dist/flex-layout/providers/FlexLayoutContext.js +7 -6
  81. package/dist/flex-layout/providers/FlexLayoutContext.js.map +1 -1
  82. package/dist/flex-layout/providers/FlexLayoutHooks.cjs +82 -53
  83. package/dist/flex-layout/providers/FlexLayoutHooks.cjs.map +1 -1
  84. package/dist/flex-layout/providers/FlexLayoutHooks.js +33 -8
  85. package/dist/flex-layout/providers/FlexLayoutHooks.js.map +1 -1
  86. package/dist/flex-layout/providers/index.cjs +21 -12
  87. package/dist/flex-layout/providers/index.cjs.map +1 -1
  88. package/dist/flex-layout/providers/index.js +1 -2
  89. package/dist/flex-layout/providers/index.js.map +1 -1
  90. package/dist/flex-layout/store/FlexLayoutContainerStore.cjs +130 -76
  91. package/dist/flex-layout/store/FlexLayoutContainerStore.cjs.map +1 -1
  92. package/dist/flex-layout/store/FlexLayoutContainerStore.d.ts +1 -0
  93. package/dist/flex-layout/store/FlexLayoutContainerStore.js +63 -38
  94. package/dist/flex-layout/store/FlexLayoutContainerStore.js.map +1 -1
  95. package/dist/flex-layout/store/index.cjs +21 -12
  96. package/dist/flex-layout/store/index.cjs.map +1 -1
  97. package/dist/flex-layout/store/index.js +1 -2
  98. package/dist/flex-layout/store/index.js.map +1 -1
  99. package/dist/flex-layout/types/FlexDirectionTypes.cjs +16 -3
  100. package/dist/flex-layout/types/FlexDirectionTypes.cjs.map +1 -1
  101. package/dist/flex-layout/types/FlexDirectionTypes.js +0 -2
  102. package/dist/flex-layout/types/FlexDirectionTypes.js.map +1 -1
  103. package/dist/flex-layout/types/FlexLayoutTypes.cjs +16 -3
  104. package/dist/flex-layout/types/FlexLayoutTypes.cjs.map +1 -1
  105. package/dist/flex-layout/types/FlexLayoutTypes.d.ts +1 -3
  106. package/dist/flex-layout/types/FlexLayoutTypes.js +0 -2
  107. package/dist/flex-layout/types/FlexLayoutTypes.js.map +1 -1
  108. package/dist/flex-layout/utils/FlexLayoutUtils.cjs +57 -20
  109. package/dist/flex-layout/utils/FlexLayoutUtils.cjs.map +1 -1
  110. package/dist/flex-layout/utils/FlexLayoutUtils.d.ts +4 -4
  111. package/dist/flex-layout/utils/FlexLayoutUtils.js +23 -8
  112. package/dist/flex-layout/utils/FlexLayoutUtils.js.map +1 -1
  113. package/dist/flex-layout/utils/index.cjs +21 -12
  114. package/dist/flex-layout/utils/index.cjs.map +1 -1
  115. package/dist/flex-layout/utils/index.js +1 -2
  116. package/dist/flex-layout/utils/index.js.map +1 -1
  117. package/dist/index.cjs +21 -12
  118. package/dist/index.cjs.map +1 -1
  119. package/dist/index.js +1 -2
  120. package/dist/index.js.map +1 -1
  121. package/dist/metafile-cjs.json +1 -0
  122. package/dist/metafile-esm.json +1 -0
  123. package/dist/types/css.d.cjs +1 -3
  124. package/dist/types/css.d.cjs.map +1 -1
  125. package/dist/types/css.d.js +0 -2
  126. package/dist/types/css.d.js.map +1 -1
  127. package/package.json +5 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/flex-layout/components/FlexLayoutStickyBox.tsx"],"names":["useRef","useState","useEffect","jsx"],"mappings":"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","file":"FlexLayoutStickyBox.cjs","sourcesContent":["\"use client\";\r\nimport {\r\n\tCSSProperties,\r\n\tFC,\r\n\tHTMLAttributes,\r\n\tReactNode,\r\n\tRefObject,\r\n\tuseEffect,\r\n\tuseRef,\r\n\tuseState,\r\n} from \"react\";\r\n\r\ntype Edge = \"auto\" | \"top\" | \"bottom\" | \"left\" | \"right\";\r\n\r\ninterface FlexLayoutStickyBoxProps extends HTMLAttributes<HTMLDivElement> {\r\n\t/** 어느 방향으로 붙일지. 기본은 'auto' (세로 스크롤이면 top, 가로 스크롤이면 left) */\r\n\tedge?: Edge;\r\n\t/** 화면 모서리와의 여백(px). 기본 16 */\r\n\toffset?: number;\r\n\t/** 스크롤 루트. 명시 안 하면 가장 흔한 케이스인 <main> → 없으면 window(=viewport) */\r\n\tscrollRoot?: Element | null;\r\n\t/** 디버그 보조선 표시 */\r\n\tdebug?: boolean;\r\n\t/** 자식 */\r\n\tchildren: ReactNode;\r\n\r\n\tonTranslateChange?: (\r\n\t\tvalue: number,\r\n\t\trootRef: RefObject<HTMLDivElement | null>,\r\n\t\tcontentRef: RefObject<HTMLDivElement | null>,\r\n\t) => void;\r\n}\r\n\r\nfunction clamp(n: number, min: number, max: number) {\r\n\treturn Math.max(min, Math.min(max, n));\r\n}\r\n\r\nfunction pickDefaultScrollRoot(): Element | null {\r\n\tif (typeof document === \"undefined\") return null;\r\n\r\n\tlet el: Element | null = document.body;\r\n\twhile (el && el !== document.documentElement && el !== document.body) {\r\n\t\tconst style = getComputedStyle(el);\r\n\t\tconst oy = style.overflowY;\r\n\t\tconst ox = style.overflowX;\r\n\t\tconst scrollable =\r\n\t\t\toy === \"auto\" ||\r\n\t\t\toy === \"scroll\" ||\r\n\t\t\tox === \"auto\" ||\r\n\t\t\tox === \"scroll\";\r\n\t\tif (scrollable) return el;\r\n\t\tel = el.parentElement;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction isVerticalScroll(root: Element | null): boolean {\r\n\tif (typeof window == \"undefined\") return true;\r\n\tif (!root) {\r\n\t\treturn document.documentElement.scrollHeight > window.innerHeight + 1;\r\n\t}\r\n\tconst el = root as HTMLElement;\r\n\treturn el.scrollHeight > el.clientHeight + 1;\r\n}\r\n\r\nconst dpr = typeof window != \"undefined\" ? window.devicePixelRatio || 1 : 1;\r\nfunction quantizeToDevicePixel(n: number) {\r\n\treturn Math.round(n * dpr) / dpr;\r\n}\r\n\r\n/**\r\n * FlexLayoutStickyBox\r\n * 부모(실제 경계) 안에서만 움직이며, `transform`을 동적으로 부여해\r\n * “sticky처럼 보이도록” 만든다.\r\n *\r\n * 구조:\r\n * <div data-root> // 이 박스가 부모 경계 안에서 공간을 차지\r\n * <div data-content> // 이 박스가 transform으로 부드럽게 움직임\r\n * {children}\r\n * </div>\r\n * </div>\r\n */\r\nconst FlexLayoutStickyBox: FC<FlexLayoutStickyBoxProps> = ({\r\n\tedge = \"auto\",\r\n\toffset = 16,\r\n\tscrollRoot = null,\r\n\tdebug = false,\r\n\tchildren,\r\n\tstyle,\r\n\tclassName,\r\n\tonTranslateChange = () => {},\r\n\t...rest\r\n}) => {\r\n\tconst offsetRef = useRef(offset);\r\n\tconst rootRef = useRef<HTMLDivElement>(null); // 내가 들어있는 박스(부모의 자식)\r\n\tconst contentRef = useRef<HTMLDivElement>(null); // 실제 내용\r\n\tconst mutatingRef = useRef(false);\r\n\tconst lastOffsetRef = useRef(0);\r\n\tconst [resolvedEdge, setResolvedEdge] = useState<Edge>(\"top\");\r\n\tconst rafId = useRef<number | null>(null);\r\n\r\n\t// 마운트 이후에만(클라이언트에서만) 터치 스타일을 적용\r\n\tconst [contentDynamicStyle, setContentDynamicStyle] =\r\n\t\tuseState<CSSProperties>({});\r\n\tuseEffect(() => {\r\n\t\t// if (\r\n\t\t// typeof navigator !== 'undefined' &&\r\n\t\t// (navigator.maxTouchPoints ?? 0) > 0\r\n\t\t// ) {\r\n\t\tsetContentDynamicStyle({\r\n\t\t\twillChange: \"transform\",\r\n\t\t\ttransition: \"transform 50ms linear\",\r\n\t\t});\r\n\t\t// }\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\toffsetRef.current = offset;\r\n\t\tscheduleUpdate();\r\n\t}, [offset]);\r\n\tconst [ioRoot, setIoRoot] = useState<Element | null>(null);\r\n\tuseEffect(() => {\r\n\t\t// CSR로 전환된 후에 반드시 최신 scroll root를 계산\r\n\t\tconst root = scrollRoot ?? pickDefaultScrollRoot();\r\n\t\tsetResolvedEdge(\r\n\t\t\tedge === \"auto\" ? (isVerticalScroll(root) ? \"top\" : \"left\") : edge,\r\n\t\t);\r\n\r\n\t\tsetIoRoot(root);\r\n\t}, [edge, scrollRoot]);\r\n\tuseEffect(() => {\r\n\t\tif (edge !== \"auto\") {\r\n\t\t\tsetResolvedEdge(edge);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst vertical = isVerticalScroll(ioRoot);\r\n\t\tsetResolvedEdge(vertical ? \"top\" : \"left\");\r\n\t}, [edge, ioRoot]);\r\n\r\n\tuseEffect(() => {}, []);\r\n\r\n\tconst scheduleUpdate = () => {\r\n\t\tif (rafId.current != null) return;\r\n\t\trafId.current = requestAnimationFrame(() => {\r\n\t\t\trafId.current = null;\r\n\t\t\tdoUpdate();\r\n\t\t});\r\n\t};\r\n\r\n\tconst doUpdate = () => {\r\n\t\tif (mutatingRef.current) return;\r\n\t\tmutatingRef.current = true;\r\n\r\n\t\tconst rootEl = rootRef.current;\r\n\t\tconst contentEl = contentRef.current;\r\n\t\tif (!rootEl || !contentEl) {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst parentEl = rootEl.parentElement;\r\n\t\tif (!parentEl) {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst rootBounds =\r\n\t\t\tioRoot && \"getBoundingClientRect\" in ioRoot\r\n\t\t\t\t? (ioRoot as Element).getBoundingClientRect()\r\n\t\t\t\t: new DOMRect(0, 0, window.innerWidth, window.innerHeight);\r\n\r\n\t\tconst parentRect = parentEl.getBoundingClientRect();\r\n\t\tconst contentRect = contentEl.getBoundingClientRect();\r\n\r\n\t\tlet newOffset = 0;\r\n\r\n\t\tif (resolvedEdge === \"top\" || resolvedEdge === \"bottom\") {\r\n\t\t\tconst maxTranslate = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tparentRect.height - contentRect.height,\r\n\t\t\t);\r\n\t\t\tlet desiredTop = 0;\r\n\r\n\t\t\tif (resolvedEdge === \"top\") {\r\n\t\t\t\tdesiredTop =\r\n\t\t\t\t\trootBounds.top + offsetRef.current - parentRect.top;\r\n\t\t\t} else {\r\n\t\t\t\t// bottom\r\n\t\t\t\tconst targetBottomFromParentTop =\r\n\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\tparentRect.bottom,\r\n\t\t\t\t\t\trootBounds.bottom - offsetRef.current,\r\n\t\t\t\t\t) - parentRect.top;\r\n\t\t\t\tdesiredTop = targetBottomFromParentTop - contentRect.height;\r\n\t\t\t}\r\n\t\t\tnewOffset = clamp(desiredTop, 0, maxTranslate);\r\n\t\t} else {\r\n\t\t\t// left or right\r\n\t\t\tconst maxTranslate = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tparentRect.width - contentRect.width,\r\n\t\t\t);\r\n\t\t\tlet desiredLeft = 0;\r\n\r\n\t\t\tif (resolvedEdge === \"left\") {\r\n\t\t\t\tdesiredLeft =\r\n\t\t\t\t\trootBounds.left + offsetRef.current - parentRect.left;\r\n\t\t\t} else {\r\n\t\t\t\t// right\r\n\t\t\t\tconst targetRightFromParentLeft =\r\n\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\tparentRect.right,\r\n\t\t\t\t\t\trootBounds.right - offsetRef.current,\r\n\t\t\t\t\t) - parentRect.left;\r\n\t\t\t\tdesiredLeft = targetRightFromParentLeft - contentRect.width;\r\n\t\t\t}\r\n\t\t\tnewOffset = clamp(desiredLeft, 0, maxTranslate);\r\n\t\t}\r\n\r\n\t\tconst nextOffset = quantizeToDevicePixel(newOffset);\r\n\r\n\t\t// 변화가 거의 없으면 업데이트 건너뛰기 (미세한 떨림 방지)\r\n\t\tif (Math.abs(lastOffsetRef.current - nextOffset) > 0.5) {\r\n\t\t\tif (resolvedEdge === \"top\" || resolvedEdge === \"bottom\") {\r\n\t\t\t\tcontentEl.style.transform = `translateY(${nextOffset}px)`;\r\n\t\t\t} else {\r\n\t\t\t\tcontentEl.style.transform = `translateX(${nextOffset}px)`;\r\n\t\t\t}\r\n\t\t\tlastOffsetRef.current = nextOffset;\r\n\t\t\tonTranslateChange(nextOffset, rootRef, contentRef);\r\n\t\t}\r\n\r\n\t\tif (debug) {\r\n\t\t\trootEl.style.outline = \"1px dashed rgba(0,0,0,.2)\";\r\n\t\t\tcontentEl.style.outline = \"1px solid rgba(0,128,255,.35)\";\r\n\t\t}\r\n\r\n\t\tqueueMicrotask(() => {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t});\r\n\t};\r\n\r\n\t// IntersectionObserver, ResizeObserver, Event Listeners 설정\r\n\tuseEffect(() => {\r\n\t\tif (typeof window == \"undefined\") return;\r\n\t\tconst rootEl = rootRef.current;\r\n\t\tif (!rootEl) return;\r\n\r\n\t\tconst parentEl = rootEl.parentElement;\r\n\r\n\t\tconsole.log(parentEl);\r\n\t\tif (!parentEl) return;\r\n\r\n\t\tconst targets: Element[] = [parentEl];\r\n\r\n\t\tconst observerCallback = () => {\r\n\t\t\tif (!mutatingRef.current) scheduleUpdate();\r\n\t\t};\r\n\r\n\t\tconst io = new IntersectionObserver(observerCallback, {\r\n\t\t\troot: ioRoot instanceof Element ? ioRoot : null,\r\n\t\t\tthreshold: 0,\r\n\t\t\trootMargin: \"1px\",\r\n\t\t});\r\n\r\n\t\tconst ro = new ResizeObserver(observerCallback);\r\n\r\n\t\ttargets.forEach((t) => io.observe(t));\r\n\t\tro.observe(parentEl);\r\n\t\tif (contentRef.current) {\r\n\t\t\tro.observe(contentRef.current);\r\n\t\t}\r\n\r\n\t\tconst scrollTarget = ioRoot || window;\r\n\t\tscrollTarget.addEventListener(\"scroll\", scheduleUpdate, {\r\n\t\t\tpassive: true,\r\n\t\t});\r\n\t\twindow.addEventListener(\"resize\", scheduleUpdate);\r\n\r\n\t\t// 최초 1회 계산\r\n\t\tscheduleUpdate();\r\n\r\n\t\treturn () => {\r\n\t\t\tio.disconnect();\r\n\t\t\tro.disconnect();\r\n\t\t\tscrollTarget.removeEventListener(\"scroll\", scheduleUpdate);\r\n\t\t\twindow.removeEventListener(\"resize\", scheduleUpdate);\r\n\t\t\tif (rafId.current != null) {\r\n\t\t\t\tcancelAnimationFrame(rafId.current);\r\n\t\t\t\trafId.current = null;\r\n\t\t\t}\r\n\t\t};\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [ioRoot, resolvedEdge, offset, debug]);\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tref={rootRef}\r\n\t\t\tclassName={className}\r\n\t\t\tstyle={{\r\n\t\t\t\tdisplay: \"block\",\r\n\t\t\t\tminWidth: 0,\r\n\t\t\t\tminHeight: 0,\r\n\t\t\t\theight: \"100%\", // 부모 높이를 채우도록 설정\r\n\t\t\t\t...style,\r\n\t\t\t}}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t<div\r\n\t\t\t\tref={contentRef}\r\n\t\t\t\t// SSR/클라이언트 첫 렌더 동일 → 마운트 후에만 스타일 부여\r\n\t\t\t\tstyle={contentDynamicStyle}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default FlexLayoutStickyBox;\r\n"]}
1
+ {"version":3,"sources":["../../../src/flex-layout/components/FlexLayoutStickyBox.tsx"],"sourcesContent":["\"use client\";\r\nimport {\r\n\tCSSProperties,\r\n\tFC,\r\n\tHTMLAttributes,\r\n\tReactNode,\r\n\tRefObject,\r\n\tuseEffect,\r\n\tuseRef,\r\n\tuseState,\r\n} from \"react\";\r\n\r\ntype Edge = \"auto\" | \"top\" | \"bottom\" | \"left\" | \"right\";\r\n\r\ninterface FlexLayoutStickyBoxProps extends HTMLAttributes<HTMLDivElement> {\r\n\t/** 어느 방향으로 붙일지. 기본은 'auto' (세로 스크롤이면 top, 가로 스크롤이면 left) */\r\n\tedge?: Edge;\r\n\t/** 화면 모서리와의 여백(px). 기본 16 */\r\n\toffset?: number;\r\n\t/** 스크롤 루트. 명시 안 하면 가장 흔한 케이스인 <main> → 없으면 window(=viewport) */\r\n\tscrollRoot?: Element | null;\r\n\t/** 디버그 보조선 표시 */\r\n\tdebug?: boolean;\r\n\t/** 자식 */\r\n\tchildren: ReactNode;\r\n\r\n\ttransitionDurationMs?: number;\r\n\r\n\tonTranslateChange?: (\r\n\t\tvalue: number,\r\n\t\trootRef: RefObject<HTMLDivElement | null>,\r\n\t\tcontentRef: RefObject<HTMLDivElement | null>,\r\n\t) => void;\r\n}\r\n\r\nfunction clamp(n: number, min: number, max: number) {\r\n\treturn Math.max(min, Math.min(max, n));\r\n}\r\n\r\nfunction pickDefaultScrollRoot(): Element | null {\r\n\tif (typeof document === \"undefined\") return null;\r\n\r\n\tlet el: Element | null = document.body;\r\n\twhile (el && el !== document.documentElement && el !== document.body) {\r\n\t\tconst style = getComputedStyle(el);\r\n\t\tconst oy = style.overflowY;\r\n\t\tconst ox = style.overflowX;\r\n\t\tconst scrollable =\r\n\t\t\toy === \"auto\" ||\r\n\t\t\toy === \"scroll\" ||\r\n\t\t\tox === \"auto\" ||\r\n\t\t\tox === \"scroll\";\r\n\t\tif (scrollable) return el;\r\n\t\tel = el.parentElement;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction isVerticalScroll(root: Element | null): boolean {\r\n\tif (typeof window == \"undefined\") return true;\r\n\tif (!root) {\r\n\t\treturn document.documentElement.scrollHeight > window.innerHeight + 1;\r\n\t}\r\n\tconst el = root as HTMLElement;\r\n\treturn el.scrollHeight > el.clientHeight + 1;\r\n}\r\n\r\nconst dpr = typeof window != \"undefined\" ? window.devicePixelRatio || 1 : 1;\r\nfunction quantizeToDevicePixel(n: number) {\r\n\treturn Math.round(n * dpr) / dpr;\r\n}\r\n\r\n/**\r\n * FlexLayoutStickyBox\r\n * 부모(실제 경계) 안에서만 움직이며, `transform`을 동적으로 부여해\r\n * “sticky처럼 보이도록” 만든다.\r\n *\r\n * 구조:\r\n * <div data-root> // 이 박스가 부모 경계 안에서 공간을 차지\r\n * <div data-content> // 이 박스가 transform으로 부드럽게 움직임\r\n * {children}\r\n * </div>\r\n * </div>\r\n */\r\nconst FlexLayoutStickyBox: FC<FlexLayoutStickyBoxProps> = ({\r\n\tedge = \"auto\",\r\n\toffset = 16,\r\n\tscrollRoot = null,\r\n\tdebug = false,\r\n\tchildren,\r\n\tstyle,\r\n\tclassName,\r\n\ttransitionDurationMs = 200,\r\n\tonTranslateChange = () => {},\r\n\t...rest\r\n}) => {\r\n\tconst offsetRef = useRef(offset);\r\n\tconst rootRef = useRef<HTMLDivElement>(null); // 내가 들어있는 박스(부모의 자식)\r\n\tconst contentRef = useRef<HTMLDivElement>(null); // 실제 내용\r\n\tconst mutatingRef = useRef(false);\r\n\tconst lastOffsetRef = useRef(0);\r\n\tconst [resolvedEdge, setResolvedEdge] = useState<Edge>(\"top\");\r\n\tconst rafId = useRef<number | null>(null);\r\n\r\n\t// 마운트 이후에만(클라이언트에서만) 터치 스타일을 적용\r\n\tconst [contentDynamicStyle, setContentDynamicStyle] =\r\n\t\tuseState<CSSProperties>({});\r\n\tuseEffect(() => {\r\n\t\t// if (\r\n\t\t// typeof navigator !== 'undefined' &&\r\n\t\t// (navigator.maxTouchPoints ?? 0) > 0\r\n\t\t// ) {\r\n\t\tsetContentDynamicStyle({\r\n\t\t\twillChange: \"transform\",\r\n\t\t\ttransition: `transform ${transitionDurationMs}ms linear`,\r\n\t\t});\r\n\t\t// }\r\n\t}, [transitionDurationMs]);\r\n\r\n\tuseEffect(() => {\r\n\t\toffsetRef.current = offset;\r\n\t\tscheduleUpdate();\r\n\t}, [offset]);\r\n\tconst [ioRoot, setIoRoot] = useState<Element | null>(null);\r\n\tuseEffect(() => {\r\n\t\t// CSR로 전환된 후에 반드시 최신 scroll root를 계산\r\n\t\tconst root = scrollRoot ?? pickDefaultScrollRoot();\r\n\t\tsetResolvedEdge(\r\n\t\t\tedge === \"auto\" ? (isVerticalScroll(root) ? \"top\" : \"left\") : edge,\r\n\t\t);\r\n\r\n\t\tsetIoRoot(root);\r\n\t}, [edge, scrollRoot]);\r\n\tuseEffect(() => {\r\n\t\tif (edge !== \"auto\") {\r\n\t\t\tsetResolvedEdge(edge);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst vertical = isVerticalScroll(ioRoot);\r\n\t\tsetResolvedEdge(vertical ? \"top\" : \"left\");\r\n\t}, [edge, ioRoot]);\r\n\r\n\tuseEffect(() => {}, []);\r\n\r\n\tconst scheduleUpdate = () => {\r\n\t\tif (rafId.current != null) return;\r\n\t\trafId.current = requestAnimationFrame(() => {\r\n\t\t\trafId.current = null;\r\n\t\t\tdoUpdate();\r\n\t\t});\r\n\t};\r\n\r\n\tconst doUpdate = () => {\r\n\t\tif (mutatingRef.current) return;\r\n\t\tmutatingRef.current = true;\r\n\r\n\t\tconst rootEl = rootRef.current;\r\n\t\tconst contentEl = contentRef.current;\r\n\t\tif (!rootEl || !contentEl) {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst parentEl = rootEl.parentElement;\r\n\t\tif (!parentEl) {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst rootBounds =\r\n\t\t\tioRoot && \"getBoundingClientRect\" in ioRoot\r\n\t\t\t\t? (ioRoot as Element).getBoundingClientRect()\r\n\t\t\t\t: new DOMRect(0, 0, window.innerWidth, window.innerHeight);\r\n\r\n\t\tconst parentRect = parentEl.getBoundingClientRect();\r\n\t\tconst contentRect = contentEl.getBoundingClientRect();\r\n\r\n\t\tlet newOffset = 0;\r\n\r\n\t\tif (resolvedEdge === \"top\" || resolvedEdge === \"bottom\") {\r\n\t\t\tconst maxTranslate = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tparentRect.height - contentRect.height,\r\n\t\t\t);\r\n\t\t\tlet desiredTop = 0;\r\n\r\n\t\t\tif (resolvedEdge === \"top\") {\r\n\t\t\t\tdesiredTop =\r\n\t\t\t\t\trootBounds.top + offsetRef.current - parentRect.top;\r\n\t\t\t} else {\r\n\t\t\t\t// bottom\r\n\t\t\t\tconst targetBottomFromParentTop =\r\n\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\tparentRect.bottom,\r\n\t\t\t\t\t\trootBounds.bottom - offsetRef.current,\r\n\t\t\t\t\t) - parentRect.top;\r\n\t\t\t\tdesiredTop = targetBottomFromParentTop - contentRect.height;\r\n\t\t\t}\r\n\t\t\tnewOffset = clamp(desiredTop, 0, maxTranslate);\r\n\t\t} else {\r\n\t\t\t// left or right\r\n\t\t\tconst maxTranslate = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tparentRect.width - contentRect.width,\r\n\t\t\t);\r\n\t\t\tlet desiredLeft = 0;\r\n\r\n\t\t\tif (resolvedEdge === \"left\") {\r\n\t\t\t\tdesiredLeft =\r\n\t\t\t\t\trootBounds.left + offsetRef.current - parentRect.left;\r\n\t\t\t} else {\r\n\t\t\t\t// right\r\n\t\t\t\tconst targetRightFromParentLeft =\r\n\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\tparentRect.right,\r\n\t\t\t\t\t\trootBounds.right - offsetRef.current,\r\n\t\t\t\t\t) - parentRect.left;\r\n\t\t\t\tdesiredLeft = targetRightFromParentLeft - contentRect.width;\r\n\t\t\t}\r\n\t\t\tnewOffset = clamp(desiredLeft, 0, maxTranslate);\r\n\t\t}\r\n\r\n\t\tconst nextOffset = quantizeToDevicePixel(newOffset);\r\n\r\n\t\t// 변화가 거의 없으면 업데이트 건너뛰기 (미세한 떨림 방지)\r\n\t\tif (Math.abs(lastOffsetRef.current - nextOffset) > 0.5) {\r\n\t\t\tif (resolvedEdge === \"top\" || resolvedEdge === \"bottom\") {\r\n\t\t\t\tcontentEl.style.transform = `translateY(${nextOffset}px)`;\r\n\t\t\t} else {\r\n\t\t\t\tcontentEl.style.transform = `translateX(${nextOffset}px)`;\r\n\t\t\t}\r\n\t\t\tlastOffsetRef.current = nextOffset;\r\n\t\t\tonTranslateChange(nextOffset, rootRef, contentRef);\r\n\t\t}\r\n\r\n\t\tif (debug) {\r\n\t\t\trootEl.style.outline = \"1px dashed rgba(0,0,0,.2)\";\r\n\t\t\tcontentEl.style.outline = \"1px solid rgba(0,128,255,.35)\";\r\n\t\t}\r\n\r\n\t\tqueueMicrotask(() => {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t});\r\n\t};\r\n\r\n\t// IntersectionObserver, ResizeObserver, Event Listeners 설정\r\n\tuseEffect(() => {\r\n\t\tif (typeof window == \"undefined\") return;\r\n\t\tconst rootEl = rootRef.current;\r\n\t\tif (!rootEl) return;\r\n\r\n\t\tconst parentEl = rootEl.parentElement;\r\n\r\n\t\tconsole.log(parentEl);\r\n\t\tif (!parentEl) return;\r\n\r\n\t\tconst targets: Element[] = [parentEl];\r\n\r\n\t\tconst observerCallback = () => {\r\n\t\t\tif (!mutatingRef.current) scheduleUpdate();\r\n\t\t};\r\n\r\n\t\tconst io = new IntersectionObserver(observerCallback, {\r\n\t\t\troot: ioRoot instanceof Element ? ioRoot : null,\r\n\t\t\tthreshold: 0,\r\n\t\t\trootMargin: \"1px\",\r\n\t\t});\r\n\r\n\t\tconst ro = new ResizeObserver(observerCallback);\r\n\r\n\t\ttargets.forEach((t) => io.observe(t));\r\n\t\tro.observe(parentEl);\r\n\t\tif (contentRef.current) {\r\n\t\t\tro.observe(contentRef.current);\r\n\t\t}\r\n\r\n\t\tconst scrollTarget = ioRoot || window;\r\n\t\tscrollTarget.addEventListener(\"scroll\", scheduleUpdate, {\r\n\t\t\tpassive: true,\r\n\t\t});\r\n\t\twindow.addEventListener(\"resize\", scheduleUpdate);\r\n\r\n\t\t// 최초 1회 계산\r\n\t\tscheduleUpdate();\r\n\r\n\t\treturn () => {\r\n\t\t\tio.disconnect();\r\n\t\t\tro.disconnect();\r\n\t\t\tscrollTarget.removeEventListener(\"scroll\", scheduleUpdate);\r\n\t\t\twindow.removeEventListener(\"resize\", scheduleUpdate);\r\n\t\t\tif (rafId.current != null) {\r\n\t\t\t\tcancelAnimationFrame(rafId.current);\r\n\t\t\t\trafId.current = null;\r\n\t\t\t}\r\n\t\t};\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [ioRoot, resolvedEdge, offset, debug]);\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tref={rootRef}\r\n\t\t\tclassName={className}\r\n\t\t\tstyle={{\r\n\t\t\t\tdisplay: \"block\",\r\n\t\t\t\tminWidth: 0,\r\n\t\t\t\tminHeight: 0,\r\n\t\t\t\theight: \"100%\", // 부모 높이를 채우도록 설정\r\n\t\t\t\t...style,\r\n\t\t\t}}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t<div\r\n\t\t\t\tref={contentRef}\r\n\t\t\t\t// SSR/클라이언트 첫 렌더 동일 → 마운트 후에만 스타일 부여\r\n\t\t\t\tstyle={contentDynamicStyle}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default FlexLayoutStickyBox;\r\n"],"mappings":"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","names":[]}
@@ -11,6 +11,7 @@ interface FlexLayoutStickyBoxProps extends HTMLAttributes<HTMLDivElement> {
11
11
  debug?: boolean;
12
12
  /** 자식 */
13
13
  children: ReactNode;
14
+ transitionDurationMs?: number;
14
15
  onTranslateChange?: (value: number, rootRef: RefObject<HTMLDivElement | null>, contentRef: RefObject<HTMLDivElement | null>) => void;
15
16
  }
16
17
  /**
@@ -1,6 +1,10 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useRef, useState, useEffect } from 'react';
3
-
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import {
4
+ useEffect,
5
+ useRef,
6
+ useState
7
+ } from "react";
4
8
  function clamp(n, min, max) {
5
9
  return Math.max(min, Math.min(max, n));
6
10
  }
@@ -37,6 +41,7 @@ const FlexLayoutStickyBox = ({
37
41
  children,
38
42
  style,
39
43
  className,
44
+ transitionDurationMs = 200,
40
45
  onTranslateChange = () => {
41
46
  },
42
47
  ...rest
@@ -52,9 +57,9 @@ const FlexLayoutStickyBox = ({
52
57
  useEffect(() => {
53
58
  setContentDynamicStyle({
54
59
  willChange: "transform",
55
- transition: "transform 50ms linear"
60
+ transition: `transform ${transitionDurationMs}ms linear`
56
61
  });
57
- }, []);
62
+ }, [transitionDurationMs]);
58
63
  useEffect(() => {
59
64
  offsetRef.current = offset;
60
65
  scheduleUpdate();
@@ -218,7 +223,7 @@ const FlexLayoutStickyBox = ({
218
223
  );
219
224
  };
220
225
  var FlexLayoutStickyBox_default = FlexLayoutStickyBox;
221
-
222
- export { FlexLayoutStickyBox_default as default };
223
- //# sourceMappingURL=FlexLayoutStickyBox.js.map
226
+ export {
227
+ FlexLayoutStickyBox_default as default
228
+ };
224
229
  //# sourceMappingURL=FlexLayoutStickyBox.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/flex-layout/components/FlexLayoutStickyBox.tsx"],"names":[],"mappings":"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","file":"FlexLayoutStickyBox.js","sourcesContent":["\"use client\";\r\nimport {\r\n\tCSSProperties,\r\n\tFC,\r\n\tHTMLAttributes,\r\n\tReactNode,\r\n\tRefObject,\r\n\tuseEffect,\r\n\tuseRef,\r\n\tuseState,\r\n} from \"react\";\r\n\r\ntype Edge = \"auto\" | \"top\" | \"bottom\" | \"left\" | \"right\";\r\n\r\ninterface FlexLayoutStickyBoxProps extends HTMLAttributes<HTMLDivElement> {\r\n\t/** 어느 방향으로 붙일지. 기본은 'auto' (세로 스크롤이면 top, 가로 스크롤이면 left) */\r\n\tedge?: Edge;\r\n\t/** 화면 모서리와의 여백(px). 기본 16 */\r\n\toffset?: number;\r\n\t/** 스크롤 루트. 명시 안 하면 가장 흔한 케이스인 <main> → 없으면 window(=viewport) */\r\n\tscrollRoot?: Element | null;\r\n\t/** 디버그 보조선 표시 */\r\n\tdebug?: boolean;\r\n\t/** 자식 */\r\n\tchildren: ReactNode;\r\n\r\n\tonTranslateChange?: (\r\n\t\tvalue: number,\r\n\t\trootRef: RefObject<HTMLDivElement | null>,\r\n\t\tcontentRef: RefObject<HTMLDivElement | null>,\r\n\t) => void;\r\n}\r\n\r\nfunction clamp(n: number, min: number, max: number) {\r\n\treturn Math.max(min, Math.min(max, n));\r\n}\r\n\r\nfunction pickDefaultScrollRoot(): Element | null {\r\n\tif (typeof document === \"undefined\") return null;\r\n\r\n\tlet el: Element | null = document.body;\r\n\twhile (el && el !== document.documentElement && el !== document.body) {\r\n\t\tconst style = getComputedStyle(el);\r\n\t\tconst oy = style.overflowY;\r\n\t\tconst ox = style.overflowX;\r\n\t\tconst scrollable =\r\n\t\t\toy === \"auto\" ||\r\n\t\t\toy === \"scroll\" ||\r\n\t\t\tox === \"auto\" ||\r\n\t\t\tox === \"scroll\";\r\n\t\tif (scrollable) return el;\r\n\t\tel = el.parentElement;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction isVerticalScroll(root: Element | null): boolean {\r\n\tif (typeof window == \"undefined\") return true;\r\n\tif (!root) {\r\n\t\treturn document.documentElement.scrollHeight > window.innerHeight + 1;\r\n\t}\r\n\tconst el = root as HTMLElement;\r\n\treturn el.scrollHeight > el.clientHeight + 1;\r\n}\r\n\r\nconst dpr = typeof window != \"undefined\" ? window.devicePixelRatio || 1 : 1;\r\nfunction quantizeToDevicePixel(n: number) {\r\n\treturn Math.round(n * dpr) / dpr;\r\n}\r\n\r\n/**\r\n * FlexLayoutStickyBox\r\n * 부모(실제 경계) 안에서만 움직이며, `transform`을 동적으로 부여해\r\n * “sticky처럼 보이도록” 만든다.\r\n *\r\n * 구조:\r\n * <div data-root> // 이 박스가 부모 경계 안에서 공간을 차지\r\n * <div data-content> // 이 박스가 transform으로 부드럽게 움직임\r\n * {children}\r\n * </div>\r\n * </div>\r\n */\r\nconst FlexLayoutStickyBox: FC<FlexLayoutStickyBoxProps> = ({\r\n\tedge = \"auto\",\r\n\toffset = 16,\r\n\tscrollRoot = null,\r\n\tdebug = false,\r\n\tchildren,\r\n\tstyle,\r\n\tclassName,\r\n\tonTranslateChange = () => {},\r\n\t...rest\r\n}) => {\r\n\tconst offsetRef = useRef(offset);\r\n\tconst rootRef = useRef<HTMLDivElement>(null); // 내가 들어있는 박스(부모의 자식)\r\n\tconst contentRef = useRef<HTMLDivElement>(null); // 실제 내용\r\n\tconst mutatingRef = useRef(false);\r\n\tconst lastOffsetRef = useRef(0);\r\n\tconst [resolvedEdge, setResolvedEdge] = useState<Edge>(\"top\");\r\n\tconst rafId = useRef<number | null>(null);\r\n\r\n\t// 마운트 이후에만(클라이언트에서만) 터치 스타일을 적용\r\n\tconst [contentDynamicStyle, setContentDynamicStyle] =\r\n\t\tuseState<CSSProperties>({});\r\n\tuseEffect(() => {\r\n\t\t// if (\r\n\t\t// typeof navigator !== 'undefined' &&\r\n\t\t// (navigator.maxTouchPoints ?? 0) > 0\r\n\t\t// ) {\r\n\t\tsetContentDynamicStyle({\r\n\t\t\twillChange: \"transform\",\r\n\t\t\ttransition: \"transform 50ms linear\",\r\n\t\t});\r\n\t\t// }\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\toffsetRef.current = offset;\r\n\t\tscheduleUpdate();\r\n\t}, [offset]);\r\n\tconst [ioRoot, setIoRoot] = useState<Element | null>(null);\r\n\tuseEffect(() => {\r\n\t\t// CSR로 전환된 후에 반드시 최신 scroll root를 계산\r\n\t\tconst root = scrollRoot ?? pickDefaultScrollRoot();\r\n\t\tsetResolvedEdge(\r\n\t\t\tedge === \"auto\" ? (isVerticalScroll(root) ? \"top\" : \"left\") : edge,\r\n\t\t);\r\n\r\n\t\tsetIoRoot(root);\r\n\t}, [edge, scrollRoot]);\r\n\tuseEffect(() => {\r\n\t\tif (edge !== \"auto\") {\r\n\t\t\tsetResolvedEdge(edge);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst vertical = isVerticalScroll(ioRoot);\r\n\t\tsetResolvedEdge(vertical ? \"top\" : \"left\");\r\n\t}, [edge, ioRoot]);\r\n\r\n\tuseEffect(() => {}, []);\r\n\r\n\tconst scheduleUpdate = () => {\r\n\t\tif (rafId.current != null) return;\r\n\t\trafId.current = requestAnimationFrame(() => {\r\n\t\t\trafId.current = null;\r\n\t\t\tdoUpdate();\r\n\t\t});\r\n\t};\r\n\r\n\tconst doUpdate = () => {\r\n\t\tif (mutatingRef.current) return;\r\n\t\tmutatingRef.current = true;\r\n\r\n\t\tconst rootEl = rootRef.current;\r\n\t\tconst contentEl = contentRef.current;\r\n\t\tif (!rootEl || !contentEl) {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst parentEl = rootEl.parentElement;\r\n\t\tif (!parentEl) {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst rootBounds =\r\n\t\t\tioRoot && \"getBoundingClientRect\" in ioRoot\r\n\t\t\t\t? (ioRoot as Element).getBoundingClientRect()\r\n\t\t\t\t: new DOMRect(0, 0, window.innerWidth, window.innerHeight);\r\n\r\n\t\tconst parentRect = parentEl.getBoundingClientRect();\r\n\t\tconst contentRect = contentEl.getBoundingClientRect();\r\n\r\n\t\tlet newOffset = 0;\r\n\r\n\t\tif (resolvedEdge === \"top\" || resolvedEdge === \"bottom\") {\r\n\t\t\tconst maxTranslate = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tparentRect.height - contentRect.height,\r\n\t\t\t);\r\n\t\t\tlet desiredTop = 0;\r\n\r\n\t\t\tif (resolvedEdge === \"top\") {\r\n\t\t\t\tdesiredTop =\r\n\t\t\t\t\trootBounds.top + offsetRef.current - parentRect.top;\r\n\t\t\t} else {\r\n\t\t\t\t// bottom\r\n\t\t\t\tconst targetBottomFromParentTop =\r\n\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\tparentRect.bottom,\r\n\t\t\t\t\t\trootBounds.bottom - offsetRef.current,\r\n\t\t\t\t\t) - parentRect.top;\r\n\t\t\t\tdesiredTop = targetBottomFromParentTop - contentRect.height;\r\n\t\t\t}\r\n\t\t\tnewOffset = clamp(desiredTop, 0, maxTranslate);\r\n\t\t} else {\r\n\t\t\t// left or right\r\n\t\t\tconst maxTranslate = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tparentRect.width - contentRect.width,\r\n\t\t\t);\r\n\t\t\tlet desiredLeft = 0;\r\n\r\n\t\t\tif (resolvedEdge === \"left\") {\r\n\t\t\t\tdesiredLeft =\r\n\t\t\t\t\trootBounds.left + offsetRef.current - parentRect.left;\r\n\t\t\t} else {\r\n\t\t\t\t// right\r\n\t\t\t\tconst targetRightFromParentLeft =\r\n\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\tparentRect.right,\r\n\t\t\t\t\t\trootBounds.right - offsetRef.current,\r\n\t\t\t\t\t) - parentRect.left;\r\n\t\t\t\tdesiredLeft = targetRightFromParentLeft - contentRect.width;\r\n\t\t\t}\r\n\t\t\tnewOffset = clamp(desiredLeft, 0, maxTranslate);\r\n\t\t}\r\n\r\n\t\tconst nextOffset = quantizeToDevicePixel(newOffset);\r\n\r\n\t\t// 변화가 거의 없으면 업데이트 건너뛰기 (미세한 떨림 방지)\r\n\t\tif (Math.abs(lastOffsetRef.current - nextOffset) > 0.5) {\r\n\t\t\tif (resolvedEdge === \"top\" || resolvedEdge === \"bottom\") {\r\n\t\t\t\tcontentEl.style.transform = `translateY(${nextOffset}px)`;\r\n\t\t\t} else {\r\n\t\t\t\tcontentEl.style.transform = `translateX(${nextOffset}px)`;\r\n\t\t\t}\r\n\t\t\tlastOffsetRef.current = nextOffset;\r\n\t\t\tonTranslateChange(nextOffset, rootRef, contentRef);\r\n\t\t}\r\n\r\n\t\tif (debug) {\r\n\t\t\trootEl.style.outline = \"1px dashed rgba(0,0,0,.2)\";\r\n\t\t\tcontentEl.style.outline = \"1px solid rgba(0,128,255,.35)\";\r\n\t\t}\r\n\r\n\t\tqueueMicrotask(() => {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t});\r\n\t};\r\n\r\n\t// IntersectionObserver, ResizeObserver, Event Listeners 설정\r\n\tuseEffect(() => {\r\n\t\tif (typeof window == \"undefined\") return;\r\n\t\tconst rootEl = rootRef.current;\r\n\t\tif (!rootEl) return;\r\n\r\n\t\tconst parentEl = rootEl.parentElement;\r\n\r\n\t\tconsole.log(parentEl);\r\n\t\tif (!parentEl) return;\r\n\r\n\t\tconst targets: Element[] = [parentEl];\r\n\r\n\t\tconst observerCallback = () => {\r\n\t\t\tif (!mutatingRef.current) scheduleUpdate();\r\n\t\t};\r\n\r\n\t\tconst io = new IntersectionObserver(observerCallback, {\r\n\t\t\troot: ioRoot instanceof Element ? ioRoot : null,\r\n\t\t\tthreshold: 0,\r\n\t\t\trootMargin: \"1px\",\r\n\t\t});\r\n\r\n\t\tconst ro = new ResizeObserver(observerCallback);\r\n\r\n\t\ttargets.forEach((t) => io.observe(t));\r\n\t\tro.observe(parentEl);\r\n\t\tif (contentRef.current) {\r\n\t\t\tro.observe(contentRef.current);\r\n\t\t}\r\n\r\n\t\tconst scrollTarget = ioRoot || window;\r\n\t\tscrollTarget.addEventListener(\"scroll\", scheduleUpdate, {\r\n\t\t\tpassive: true,\r\n\t\t});\r\n\t\twindow.addEventListener(\"resize\", scheduleUpdate);\r\n\r\n\t\t// 최초 1회 계산\r\n\t\tscheduleUpdate();\r\n\r\n\t\treturn () => {\r\n\t\t\tio.disconnect();\r\n\t\t\tro.disconnect();\r\n\t\t\tscrollTarget.removeEventListener(\"scroll\", scheduleUpdate);\r\n\t\t\twindow.removeEventListener(\"resize\", scheduleUpdate);\r\n\t\t\tif (rafId.current != null) {\r\n\t\t\t\tcancelAnimationFrame(rafId.current);\r\n\t\t\t\trafId.current = null;\r\n\t\t\t}\r\n\t\t};\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [ioRoot, resolvedEdge, offset, debug]);\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tref={rootRef}\r\n\t\t\tclassName={className}\r\n\t\t\tstyle={{\r\n\t\t\t\tdisplay: \"block\",\r\n\t\t\t\tminWidth: 0,\r\n\t\t\t\tminHeight: 0,\r\n\t\t\t\theight: \"100%\", // 부모 높이를 채우도록 설정\r\n\t\t\t\t...style,\r\n\t\t\t}}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t<div\r\n\t\t\t\tref={contentRef}\r\n\t\t\t\t// SSR/클라이언트 첫 렌더 동일 → 마운트 후에만 스타일 부여\r\n\t\t\t\tstyle={contentDynamicStyle}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default FlexLayoutStickyBox;\r\n"]}
1
+ {"version":3,"sources":["../../../src/flex-layout/components/FlexLayoutStickyBox.tsx"],"sourcesContent":["\"use client\";\r\nimport {\r\n\tCSSProperties,\r\n\tFC,\r\n\tHTMLAttributes,\r\n\tReactNode,\r\n\tRefObject,\r\n\tuseEffect,\r\n\tuseRef,\r\n\tuseState,\r\n} from \"react\";\r\n\r\ntype Edge = \"auto\" | \"top\" | \"bottom\" | \"left\" | \"right\";\r\n\r\ninterface FlexLayoutStickyBoxProps extends HTMLAttributes<HTMLDivElement> {\r\n\t/** 어느 방향으로 붙일지. 기본은 'auto' (세로 스크롤이면 top, 가로 스크롤이면 left) */\r\n\tedge?: Edge;\r\n\t/** 화면 모서리와의 여백(px). 기본 16 */\r\n\toffset?: number;\r\n\t/** 스크롤 루트. 명시 안 하면 가장 흔한 케이스인 <main> → 없으면 window(=viewport) */\r\n\tscrollRoot?: Element | null;\r\n\t/** 디버그 보조선 표시 */\r\n\tdebug?: boolean;\r\n\t/** 자식 */\r\n\tchildren: ReactNode;\r\n\r\n\ttransitionDurationMs?: number;\r\n\r\n\tonTranslateChange?: (\r\n\t\tvalue: number,\r\n\t\trootRef: RefObject<HTMLDivElement | null>,\r\n\t\tcontentRef: RefObject<HTMLDivElement | null>,\r\n\t) => void;\r\n}\r\n\r\nfunction clamp(n: number, min: number, max: number) {\r\n\treturn Math.max(min, Math.min(max, n));\r\n}\r\n\r\nfunction pickDefaultScrollRoot(): Element | null {\r\n\tif (typeof document === \"undefined\") return null;\r\n\r\n\tlet el: Element | null = document.body;\r\n\twhile (el && el !== document.documentElement && el !== document.body) {\r\n\t\tconst style = getComputedStyle(el);\r\n\t\tconst oy = style.overflowY;\r\n\t\tconst ox = style.overflowX;\r\n\t\tconst scrollable =\r\n\t\t\toy === \"auto\" ||\r\n\t\t\toy === \"scroll\" ||\r\n\t\t\tox === \"auto\" ||\r\n\t\t\tox === \"scroll\";\r\n\t\tif (scrollable) return el;\r\n\t\tel = el.parentElement;\r\n\t}\r\n\treturn null;\r\n}\r\n\r\nfunction isVerticalScroll(root: Element | null): boolean {\r\n\tif (typeof window == \"undefined\") return true;\r\n\tif (!root) {\r\n\t\treturn document.documentElement.scrollHeight > window.innerHeight + 1;\r\n\t}\r\n\tconst el = root as HTMLElement;\r\n\treturn el.scrollHeight > el.clientHeight + 1;\r\n}\r\n\r\nconst dpr = typeof window != \"undefined\" ? window.devicePixelRatio || 1 : 1;\r\nfunction quantizeToDevicePixel(n: number) {\r\n\treturn Math.round(n * dpr) / dpr;\r\n}\r\n\r\n/**\r\n * FlexLayoutStickyBox\r\n * 부모(실제 경계) 안에서만 움직이며, `transform`을 동적으로 부여해\r\n * “sticky처럼 보이도록” 만든다.\r\n *\r\n * 구조:\r\n * <div data-root> // 이 박스가 부모 경계 안에서 공간을 차지\r\n * <div data-content> // 이 박스가 transform으로 부드럽게 움직임\r\n * {children}\r\n * </div>\r\n * </div>\r\n */\r\nconst FlexLayoutStickyBox: FC<FlexLayoutStickyBoxProps> = ({\r\n\tedge = \"auto\",\r\n\toffset = 16,\r\n\tscrollRoot = null,\r\n\tdebug = false,\r\n\tchildren,\r\n\tstyle,\r\n\tclassName,\r\n\ttransitionDurationMs = 200,\r\n\tonTranslateChange = () => {},\r\n\t...rest\r\n}) => {\r\n\tconst offsetRef = useRef(offset);\r\n\tconst rootRef = useRef<HTMLDivElement>(null); // 내가 들어있는 박스(부모의 자식)\r\n\tconst contentRef = useRef<HTMLDivElement>(null); // 실제 내용\r\n\tconst mutatingRef = useRef(false);\r\n\tconst lastOffsetRef = useRef(0);\r\n\tconst [resolvedEdge, setResolvedEdge] = useState<Edge>(\"top\");\r\n\tconst rafId = useRef<number | null>(null);\r\n\r\n\t// 마운트 이후에만(클라이언트에서만) 터치 스타일을 적용\r\n\tconst [contentDynamicStyle, setContentDynamicStyle] =\r\n\t\tuseState<CSSProperties>({});\r\n\tuseEffect(() => {\r\n\t\t// if (\r\n\t\t// typeof navigator !== 'undefined' &&\r\n\t\t// (navigator.maxTouchPoints ?? 0) > 0\r\n\t\t// ) {\r\n\t\tsetContentDynamicStyle({\r\n\t\t\twillChange: \"transform\",\r\n\t\t\ttransition: `transform ${transitionDurationMs}ms linear`,\r\n\t\t});\r\n\t\t// }\r\n\t}, [transitionDurationMs]);\r\n\r\n\tuseEffect(() => {\r\n\t\toffsetRef.current = offset;\r\n\t\tscheduleUpdate();\r\n\t}, [offset]);\r\n\tconst [ioRoot, setIoRoot] = useState<Element | null>(null);\r\n\tuseEffect(() => {\r\n\t\t// CSR로 전환된 후에 반드시 최신 scroll root를 계산\r\n\t\tconst root = scrollRoot ?? pickDefaultScrollRoot();\r\n\t\tsetResolvedEdge(\r\n\t\t\tedge === \"auto\" ? (isVerticalScroll(root) ? \"top\" : \"left\") : edge,\r\n\t\t);\r\n\r\n\t\tsetIoRoot(root);\r\n\t}, [edge, scrollRoot]);\r\n\tuseEffect(() => {\r\n\t\tif (edge !== \"auto\") {\r\n\t\t\tsetResolvedEdge(edge);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst vertical = isVerticalScroll(ioRoot);\r\n\t\tsetResolvedEdge(vertical ? \"top\" : \"left\");\r\n\t}, [edge, ioRoot]);\r\n\r\n\tuseEffect(() => {}, []);\r\n\r\n\tconst scheduleUpdate = () => {\r\n\t\tif (rafId.current != null) return;\r\n\t\trafId.current = requestAnimationFrame(() => {\r\n\t\t\trafId.current = null;\r\n\t\t\tdoUpdate();\r\n\t\t});\r\n\t};\r\n\r\n\tconst doUpdate = () => {\r\n\t\tif (mutatingRef.current) return;\r\n\t\tmutatingRef.current = true;\r\n\r\n\t\tconst rootEl = rootRef.current;\r\n\t\tconst contentEl = contentRef.current;\r\n\t\tif (!rootEl || !contentEl) {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst parentEl = rootEl.parentElement;\r\n\t\tif (!parentEl) {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst rootBounds =\r\n\t\t\tioRoot && \"getBoundingClientRect\" in ioRoot\r\n\t\t\t\t? (ioRoot as Element).getBoundingClientRect()\r\n\t\t\t\t: new DOMRect(0, 0, window.innerWidth, window.innerHeight);\r\n\r\n\t\tconst parentRect = parentEl.getBoundingClientRect();\r\n\t\tconst contentRect = contentEl.getBoundingClientRect();\r\n\r\n\t\tlet newOffset = 0;\r\n\r\n\t\tif (resolvedEdge === \"top\" || resolvedEdge === \"bottom\") {\r\n\t\t\tconst maxTranslate = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tparentRect.height - contentRect.height,\r\n\t\t\t);\r\n\t\t\tlet desiredTop = 0;\r\n\r\n\t\t\tif (resolvedEdge === \"top\") {\r\n\t\t\t\tdesiredTop =\r\n\t\t\t\t\trootBounds.top + offsetRef.current - parentRect.top;\r\n\t\t\t} else {\r\n\t\t\t\t// bottom\r\n\t\t\t\tconst targetBottomFromParentTop =\r\n\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\tparentRect.bottom,\r\n\t\t\t\t\t\trootBounds.bottom - offsetRef.current,\r\n\t\t\t\t\t) - parentRect.top;\r\n\t\t\t\tdesiredTop = targetBottomFromParentTop - contentRect.height;\r\n\t\t\t}\r\n\t\t\tnewOffset = clamp(desiredTop, 0, maxTranslate);\r\n\t\t} else {\r\n\t\t\t// left or right\r\n\t\t\tconst maxTranslate = Math.max(\r\n\t\t\t\t0,\r\n\t\t\t\tparentRect.width - contentRect.width,\r\n\t\t\t);\r\n\t\t\tlet desiredLeft = 0;\r\n\r\n\t\t\tif (resolvedEdge === \"left\") {\r\n\t\t\t\tdesiredLeft =\r\n\t\t\t\t\trootBounds.left + offsetRef.current - parentRect.left;\r\n\t\t\t} else {\r\n\t\t\t\t// right\r\n\t\t\t\tconst targetRightFromParentLeft =\r\n\t\t\t\t\tMath.min(\r\n\t\t\t\t\t\tparentRect.right,\r\n\t\t\t\t\t\trootBounds.right - offsetRef.current,\r\n\t\t\t\t\t) - parentRect.left;\r\n\t\t\t\tdesiredLeft = targetRightFromParentLeft - contentRect.width;\r\n\t\t\t}\r\n\t\t\tnewOffset = clamp(desiredLeft, 0, maxTranslate);\r\n\t\t}\r\n\r\n\t\tconst nextOffset = quantizeToDevicePixel(newOffset);\r\n\r\n\t\t// 변화가 거의 없으면 업데이트 건너뛰기 (미세한 떨림 방지)\r\n\t\tif (Math.abs(lastOffsetRef.current - nextOffset) > 0.5) {\r\n\t\t\tif (resolvedEdge === \"top\" || resolvedEdge === \"bottom\") {\r\n\t\t\t\tcontentEl.style.transform = `translateY(${nextOffset}px)`;\r\n\t\t\t} else {\r\n\t\t\t\tcontentEl.style.transform = `translateX(${nextOffset}px)`;\r\n\t\t\t}\r\n\t\t\tlastOffsetRef.current = nextOffset;\r\n\t\t\tonTranslateChange(nextOffset, rootRef, contentRef);\r\n\t\t}\r\n\r\n\t\tif (debug) {\r\n\t\t\trootEl.style.outline = \"1px dashed rgba(0,0,0,.2)\";\r\n\t\t\tcontentEl.style.outline = \"1px solid rgba(0,128,255,.35)\";\r\n\t\t}\r\n\r\n\t\tqueueMicrotask(() => {\r\n\t\t\tmutatingRef.current = false;\r\n\t\t});\r\n\t};\r\n\r\n\t// IntersectionObserver, ResizeObserver, Event Listeners 설정\r\n\tuseEffect(() => {\r\n\t\tif (typeof window == \"undefined\") return;\r\n\t\tconst rootEl = rootRef.current;\r\n\t\tif (!rootEl) return;\r\n\r\n\t\tconst parentEl = rootEl.parentElement;\r\n\r\n\t\tconsole.log(parentEl);\r\n\t\tif (!parentEl) return;\r\n\r\n\t\tconst targets: Element[] = [parentEl];\r\n\r\n\t\tconst observerCallback = () => {\r\n\t\t\tif (!mutatingRef.current) scheduleUpdate();\r\n\t\t};\r\n\r\n\t\tconst io = new IntersectionObserver(observerCallback, {\r\n\t\t\troot: ioRoot instanceof Element ? ioRoot : null,\r\n\t\t\tthreshold: 0,\r\n\t\t\trootMargin: \"1px\",\r\n\t\t});\r\n\r\n\t\tconst ro = new ResizeObserver(observerCallback);\r\n\r\n\t\ttargets.forEach((t) => io.observe(t));\r\n\t\tro.observe(parentEl);\r\n\t\tif (contentRef.current) {\r\n\t\t\tro.observe(contentRef.current);\r\n\t\t}\r\n\r\n\t\tconst scrollTarget = ioRoot || window;\r\n\t\tscrollTarget.addEventListener(\"scroll\", scheduleUpdate, {\r\n\t\t\tpassive: true,\r\n\t\t});\r\n\t\twindow.addEventListener(\"resize\", scheduleUpdate);\r\n\r\n\t\t// 최초 1회 계산\r\n\t\tscheduleUpdate();\r\n\r\n\t\treturn () => {\r\n\t\t\tio.disconnect();\r\n\t\t\tro.disconnect();\r\n\t\t\tscrollTarget.removeEventListener(\"scroll\", scheduleUpdate);\r\n\t\t\twindow.removeEventListener(\"resize\", scheduleUpdate);\r\n\t\t\tif (rafId.current != null) {\r\n\t\t\t\tcancelAnimationFrame(rafId.current);\r\n\t\t\t\trafId.current = null;\r\n\t\t\t}\r\n\t\t};\r\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\r\n\t}, [ioRoot, resolvedEdge, offset, debug]);\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tref={rootRef}\r\n\t\t\tclassName={className}\r\n\t\t\tstyle={{\r\n\t\t\t\tdisplay: \"block\",\r\n\t\t\t\tminWidth: 0,\r\n\t\t\t\tminHeight: 0,\r\n\t\t\t\theight: \"100%\", // 부모 높이를 채우도록 설정\r\n\t\t\t\t...style,\r\n\t\t\t}}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t<div\r\n\t\t\t\tref={contentRef}\r\n\t\t\t\t// SSR/클라이언트 첫 렌더 동일 → 마운트 후에만 스타일 부여\r\n\t\t\t\tstyle={contentDynamicStyle}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nexport default FlexLayoutStickyBox;\r\n"],"mappings":"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","names":[]}
@@ -1,52 +1,57 @@
1
- 'use strict';
2
-
3
- var FlexLayout = require('./FlexLayout');
4
- var FlexLayoutContainer = require('./FlexLayoutContainer');
5
- var FlexLayoutResizePanel = require('./FlexLayoutResizePanel');
6
- var FlexLayoutSplitScreen = require('./FlexLayoutSplitScreen');
7
- var FlexLayoutSplitScreenDragBox = require('./FlexLayoutSplitScreenDragBox');
8
- var FlexLayoutSplitScreenScrollBox = require('./FlexLayoutSplitScreenScrollBox');
9
- var FlexLayoutStickyBox = require('./FlexLayoutStickyBox');
10
-
11
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
-
13
- var FlexLayout__default = /*#__PURE__*/_interopDefault(FlexLayout);
14
- var FlexLayoutContainer__default = /*#__PURE__*/_interopDefault(FlexLayoutContainer);
15
- var FlexLayoutResizePanel__default = /*#__PURE__*/_interopDefault(FlexLayoutResizePanel);
16
- var FlexLayoutSplitScreen__default = /*#__PURE__*/_interopDefault(FlexLayoutSplitScreen);
17
- var FlexLayoutSplitScreenDragBox__default = /*#__PURE__*/_interopDefault(FlexLayoutSplitScreenDragBox);
18
- var FlexLayoutSplitScreenScrollBox__default = /*#__PURE__*/_interopDefault(FlexLayoutSplitScreenScrollBox);
19
- var FlexLayoutStickyBox__default = /*#__PURE__*/_interopDefault(FlexLayoutStickyBox);
20
-
21
-
22
-
23
- Object.defineProperty(exports, "FlexLayout", {
24
- enumerable: true,
25
- get: function () { return FlexLayout__default.default; }
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var components_exports = {};
30
+ __export(components_exports, {
31
+ FlexLayout: () => import_FlexLayout.default,
32
+ FlexLayoutContainer: () => import_FlexLayoutContainer.default,
33
+ FlexLayoutResizePanel: () => import_FlexLayoutResizePanel.default,
34
+ FlexLayoutSplitScreen: () => import_FlexLayoutSplitScreen.default,
35
+ FlexLayoutSplitScreenDragBox: () => import_FlexLayoutSplitScreenDragBox.default,
36
+ FlexLayoutSplitScreenScrollBox: () => import_FlexLayoutSplitScreenScrollBox.default,
37
+ FlexLayoutStickyBox: () => import_FlexLayoutStickyBox.default
26
38
  });
27
- Object.defineProperty(exports, "FlexLayoutContainer", {
28
- enumerable: true,
29
- get: function () { return FlexLayoutContainer__default.default; }
39
+ module.exports = __toCommonJS(components_exports);
40
+ var import_FlexLayout = __toESM(require("./FlexLayout"), 1);
41
+ var import_FlexLayoutContainer = __toESM(require("./FlexLayoutContainer"), 1);
42
+ var import_FlexLayoutResizePanel = __toESM(require("./FlexLayoutResizePanel"), 1);
43
+ var import_FlexLayoutSplitScreen = __toESM(require("./FlexLayoutSplitScreen"), 1);
44
+ var import_FlexLayoutSplitScreenDragBox = __toESM(require("./FlexLayoutSplitScreenDragBox"), 1);
45
+ var import_FlexLayoutSplitScreenScrollBox = __toESM(require("./FlexLayoutSplitScreenScrollBox"), 1);
46
+ var import_FlexLayoutStickyBox = __toESM(require("./FlexLayoutStickyBox"), 1);
47
+ // Annotate the CommonJS export names for ESM import in node:
48
+ 0 && (module.exports = {
49
+ FlexLayout,
50
+ FlexLayoutContainer,
51
+ FlexLayoutResizePanel,
52
+ FlexLayoutSplitScreen,
53
+ FlexLayoutSplitScreenDragBox,
54
+ FlexLayoutSplitScreenScrollBox,
55
+ FlexLayoutStickyBox
30
56
  });
31
- Object.defineProperty(exports, "FlexLayoutResizePanel", {
32
- enumerable: true,
33
- get: function () { return FlexLayoutResizePanel__default.default; }
34
- });
35
- Object.defineProperty(exports, "FlexLayoutSplitScreen", {
36
- enumerable: true,
37
- get: function () { return FlexLayoutSplitScreen__default.default; }
38
- });
39
- Object.defineProperty(exports, "FlexLayoutSplitScreenDragBox", {
40
- enumerable: true,
41
- get: function () { return FlexLayoutSplitScreenDragBox__default.default; }
42
- });
43
- Object.defineProperty(exports, "FlexLayoutSplitScreenScrollBox", {
44
- enumerable: true,
45
- get: function () { return FlexLayoutSplitScreenScrollBox__default.default; }
46
- });
47
- Object.defineProperty(exports, "FlexLayoutStickyBox", {
48
- enumerable: true,
49
- get: function () { return FlexLayoutStickyBox__default.default; }
50
- });
51
- //# sourceMappingURL=index.cjs.map
52
57
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs","sourcesContent":[]}
1
+ {"version":3,"sources":["../../../src/flex-layout/components/index.ts"],"sourcesContent":["// src/flex-layout/components/index.ts\r\n\r\nexport { default as FlexLayout } from \"./FlexLayout\";\r\nexport { default as FlexLayoutContainer } from \"./FlexLayoutContainer\";\r\nexport { default as FlexLayoutResizePanel } from \"./FlexLayoutResizePanel\";\r\nexport { default as FlexLayoutSplitScreen } from \"./FlexLayoutSplitScreen\";\r\nexport { default as FlexLayoutSplitScreenDragBox } from \"./FlexLayoutSplitScreenDragBox\";\r\nexport { default as FlexLayoutSplitScreenScrollBox } from \"./FlexLayoutSplitScreenScrollBox\";\r\nexport { default as FlexLayoutStickyBox } from \"./FlexLayoutStickyBox\";\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,wBAAsC;AACtC,iCAA+C;AAC/C,mCAAiD;AACjD,mCAAiD;AACjD,0CAAwD;AACxD,4CAA0D;AAC1D,iCAA+C;","names":[]}
@@ -1,9 +1,17 @@
1
- export { default as FlexLayout } from './FlexLayout';
2
- export { default as FlexLayoutContainer } from './FlexLayoutContainer';
3
- export { default as FlexLayoutResizePanel } from './FlexLayoutResizePanel';
4
- export { default as FlexLayoutSplitScreen } from './FlexLayoutSplitScreen';
5
- export { default as FlexLayoutSplitScreenDragBox } from './FlexLayoutSplitScreenDragBox';
6
- export { default as FlexLayoutSplitScreenScrollBox } from './FlexLayoutSplitScreenScrollBox';
7
- export { default as FlexLayoutStickyBox } from './FlexLayoutStickyBox';
8
- //# sourceMappingURL=index.js.map
1
+ import { default as default2 } from "./FlexLayout";
2
+ import { default as default3 } from "./FlexLayoutContainer";
3
+ import { default as default4 } from "./FlexLayoutResizePanel";
4
+ import { default as default5 } from "./FlexLayoutSplitScreen";
5
+ import { default as default6 } from "./FlexLayoutSplitScreenDragBox";
6
+ import { default as default7 } from "./FlexLayoutSplitScreenScrollBox";
7
+ import { default as default8 } from "./FlexLayoutStickyBox";
8
+ export {
9
+ default2 as FlexLayout,
10
+ default3 as FlexLayoutContainer,
11
+ default4 as FlexLayoutResizePanel,
12
+ default5 as FlexLayoutSplitScreen,
13
+ default6 as FlexLayoutSplitScreenDragBox,
14
+ default7 as FlexLayoutSplitScreenScrollBox,
15
+ default8 as FlexLayoutStickyBox
16
+ };
9
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
1
+ {"version":3,"sources":["../../../src/flex-layout/components/index.ts"],"sourcesContent":["// src/flex-layout/components/index.ts\r\n\r\nexport { default as FlexLayout } from \"./FlexLayout\";\r\nexport { default as FlexLayoutContainer } from \"./FlexLayoutContainer\";\r\nexport { default as FlexLayoutResizePanel } from \"./FlexLayoutResizePanel\";\r\nexport { default as FlexLayoutSplitScreen } from \"./FlexLayoutSplitScreen\";\r\nexport { default as FlexLayoutSplitScreenDragBox } from \"./FlexLayoutSplitScreenDragBox\";\r\nexport { default as FlexLayoutSplitScreenScrollBox } from \"./FlexLayoutSplitScreenScrollBox\";\r\nexport { default as FlexLayoutStickyBox } from \"./FlexLayoutStickyBox\";\r\n"],"mappings":"AAEA,SAAoB,WAAXA,gBAA6B;AACtC,SAAoB,WAAXA,gBAAsC;AAC/C,SAAoB,WAAXA,gBAAwC;AACjD,SAAoB,WAAXA,gBAAwC;AACjD,SAAoB,WAAXA,gBAA+C;AACxD,SAAoB,WAAXA,gBAAiD;AAC1D,SAAoB,WAAXA,gBAAsC;","names":["default"]}
@@ -1,21 +1,25 @@
1
- 'use strict';
2
-
3
- var useDrag = require('./useDrag');
4
- var useListPaging = require('./useListPaging');
5
-
6
-
7
-
8
- Object.keys(useDrag).forEach(function (k) {
9
- if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
10
- enumerable: true,
11
- get: function () { return useDrag[k]; }
12
- });
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var hooks_exports = {};
17
+ module.exports = __toCommonJS(hooks_exports);
18
+ __reExport(hooks_exports, require("./useDrag"), module.exports);
19
+ __reExport(hooks_exports, require("./useListPaging"), module.exports);
20
+ // Annotate the CommonJS export names for ESM import in node:
21
+ 0 && (module.exports = {
22
+ ...require("./useDrag"),
23
+ ...require("./useListPaging")
13
24
  });
14
- Object.keys(useListPaging).forEach(function (k) {
15
- if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
16
- enumerable: true,
17
- get: function () { return useListPaging[k]; }
18
- });
19
- });
20
- //# sourceMappingURL=index.cjs.map
21
25
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs","sourcesContent":[]}
1
+ {"version":3,"sources":["../../../src/flex-layout/hooks/index.ts"],"sourcesContent":["export * from \"./useDrag\";\r\nexport * from \"./useListPaging\";\r\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,sBAAd;AACA,0BAAc,4BADd;","names":[]}
@@ -1,4 +1,3 @@
1
- export * from './useDrag';
2
- export * from './useListPaging';
3
- //# sourceMappingURL=index.js.map
1
+ export * from "./useDrag";
2
+ export * from "./useListPaging";
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
1
+ {"version":3,"sources":["../../../src/flex-layout/hooks/index.ts"],"sourcesContent":["export * from \"./useDrag\";\r\nexport * from \"./useListPaging\";\r\n"],"mappings":"AAAA,cAAc;AACd,cAAc;","names":[]}