react-grid-layout 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +97 -25
- package/css/styles.css +0 -1
- package/dist/{ResponsiveGridLayout-D6lFRE3f.d.mts → ResponsiveGridLayout-BkHF9YHa.d.mts} +10 -1
- package/dist/{ResponsiveGridLayout-CH4s0tKj.d.ts → ResponsiveGridLayout-CLn16-X3.d.ts} +10 -1
- package/dist/{calculate-CwYDW8na.d.mts → calculate-DsVTldEE.d.ts} +30 -2
- package/dist/{calculate-mgLpNJ5O.d.ts → calculate-DwbL1D06.d.mts} +30 -2
- package/dist/{chunk-4HNUMWQK.mjs → chunk-2O3ZME4Q.mjs} +178 -297
- package/dist/chunk-2O3ZME4Q.mjs.map +1 -0
- package/dist/chunk-526JND3R.mjs +3 -0
- package/dist/{chunk-ZWN22PS2.mjs.map → chunk-526JND3R.mjs.map} +1 -1
- package/dist/chunk-7ELO5FRW.js +4 -0
- package/dist/{chunk-PBQSHIID.js.map → chunk-7ELO5FRW.js.map} +1 -1
- package/dist/chunk-AWM66AWF.mjs +422 -0
- package/dist/chunk-AWM66AWF.mjs.map +1 -0
- package/dist/chunk-BJFPTW5Q.js +449 -0
- package/dist/chunk-BJFPTW5Q.js.map +1 -0
- package/dist/{chunk-3WO4SAYB.js → chunk-FN6MIZ24.js} +221 -345
- package/dist/chunk-FN6MIZ24.js.map +1 -0
- package/dist/{chunk-H5KMDLY3.js → chunk-GPZBANOK.js} +40 -39
- package/dist/chunk-GPZBANOK.js.map +1 -0
- package/dist/{chunk-ZCXE6SR5.mjs → chunk-LWF5EYMO.mjs} +4 -3
- package/dist/chunk-LWF5EYMO.mjs.map +1 -0
- package/dist/{chunk-R35HZZTA.mjs → chunk-MXXN7GUE.mjs} +170 -62
- package/dist/chunk-MXXN7GUE.mjs.map +1 -0
- package/dist/{chunk-BFTKGAP3.js → chunk-QRW3ND4U.js} +230 -122
- package/dist/chunk-QRW3ND4U.js.map +1 -0
- package/dist/core.d.mts +159 -6
- package/dist/core.d.ts +159 -6
- package/dist/core.js +141 -85
- package/dist/core.mjs +3 -3
- package/dist/extras.d.mts +133 -3
- package/dist/extras.d.ts +133 -3
- package/dist/extras.js +373 -2
- package/dist/extras.js.map +1 -1
- package/dist/extras.mjs +367 -2
- package/dist/extras.mjs.map +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +64 -64
- package/dist/index.mjs +5 -5
- package/dist/legacy.d.mts +2 -2
- package/dist/legacy.d.ts +2 -2
- package/dist/legacy.js +26 -25
- package/dist/legacy.js.map +1 -1
- package/dist/legacy.mjs +16 -15
- package/dist/legacy.mjs.map +1 -1
- package/dist/{position-Dk2b4ZMS.d.ts → position-C8a5g6bb.d.mts} +11 -6
- package/dist/{position-BmN1z36J.d.mts → position-H8tBL91b.d.ts} +11 -6
- package/dist/react.d.mts +11 -5
- package/dist/react.d.ts +11 -5
- package/dist/react.js +38 -38
- package/dist/react.mjs +5 -5
- package/dist/{responsive-CJxefsYw.d.mts → responsive-BB5d98xz.d.mts} +1 -1
- package/dist/{responsive-C4L1ESlm.d.ts → responsive-BXI-GCXG.d.ts} +1 -1
- package/dist/{types-Cxf4nHNr.d.mts → types-CokovIMH.d.mts} +98 -4
- package/dist/{types-Cxf4nHNr.d.ts → types-CokovIMH.d.ts} +98 -4
- package/index-dev.js +16 -0
- package/package.json +2 -1
- package/dist/chunk-2KUHNJXF.mjs +0 -90
- package/dist/chunk-2KUHNJXF.mjs.map +0 -1
- package/dist/chunk-3WO4SAYB.js.map +0 -1
- package/dist/chunk-4HNUMWQK.mjs.map +0 -1
- package/dist/chunk-BFTKGAP3.js.map +0 -1
- package/dist/chunk-F6NQPYKT.js +0 -98
- package/dist/chunk-F6NQPYKT.js.map +0 -1
- package/dist/chunk-H5KMDLY3.js.map +0 -1
- package/dist/chunk-PBQSHIID.js +0 -4
- package/dist/chunk-R35HZZTA.mjs.map +0 -1
- package/dist/chunk-ZCXE6SR5.mjs.map +0 -1
- package/dist/chunk-ZWN22PS2.mjs +0 -3
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/react/hooks/useContainerWidth.ts","../src/react/hooks/useGridLayout.ts","../src/react/hooks/useResponsiveLayout.ts"],"names":["useState","useRef","useCallback","useEffect","useMemo","getCompactor","correctBounds","cloneLayout","compact","deepEqual","getLayoutItem","cloneLayoutItem","moveElement","bottom","sortBreakpoints","getBreakpointFromWidth","getColsFromBreakpoint","layout","findOrGenerateResponsiveLayout"],"mappings":"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","file":"chunk-H5KMDLY3.js","sourcesContent":["/**\n * useContainerWidth hook\n *\n * Observes container width using ResizeObserver and provides\n * reactive width updates for responsive layouts.\n */\n\nimport {\n useState,\n useEffect,\n useRef,\n useCallback,\n type RefObject\n} from \"react\";\n\nexport interface UseContainerWidthOptions {\n /**\n * If true, delays initial render until width is measured.\n * Useful for SSR or when you need accurate initial measurements.\n */\n measureBeforeMount?: boolean;\n\n /**\n * Initial width to use before measurement.\n * Defaults to 1280.\n */\n initialWidth?: number;\n}\n\nexport interface UseContainerWidthResult {\n /**\n * Current container width in pixels.\n */\n width: number;\n\n /**\n * Whether the container has been measured at least once.\n */\n mounted: boolean;\n\n /**\n * Ref to attach to the container element.\n */\n containerRef: RefObject<HTMLDivElement | null>;\n\n /**\n * Manually trigger a width measurement.\n * Useful when the container size might change without a resize event.\n */\n measureWidth: () => void;\n}\n\n/**\n * Hook to observe and track container width.\n *\n * Replaces the WidthProvider HOC with a more composable approach.\n *\n * @example\n * ```tsx\n * function MyGrid() {\n * const { width, containerRef, mounted } = useContainerWidth();\n *\n * return (\n * <div ref={containerRef}>\n * {mounted && <GridLayout width={width} {...props} />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useContainerWidth(\n options: UseContainerWidthOptions = {}\n): UseContainerWidthResult {\n const { measureBeforeMount = false, initialWidth = 1280 } = options;\n\n const [width, setWidth] = useState(initialWidth);\n const [mounted, setMounted] = useState(!measureBeforeMount);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const measureWidth = useCallback(() => {\n const node = containerRef.current;\n if (node) {\n const newWidth = node.offsetWidth;\n setWidth(newWidth);\n if (!mounted) {\n setMounted(true);\n }\n }\n }, [mounted]);\n\n useEffect(() => {\n const node = containerRef.current;\n if (!node) return;\n\n // Initial measurement\n measureWidth();\n\n // Set up ResizeObserver\n if (typeof ResizeObserver !== \"undefined\") {\n observerRef.current = new ResizeObserver(entries => {\n const entry = entries[0];\n if (entry) {\n // Use contentRect.width for consistent measurements\n const newWidth = entry.contentRect.width;\n setWidth(newWidth);\n }\n });\n\n observerRef.current.observe(node);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n };\n }, [measureWidth]);\n\n return {\n width,\n mounted,\n containerRef,\n measureWidth\n };\n}\n\nexport default useContainerWidth;\n","/**\n * useGridLayout hook\n *\n * Core hook for managing grid layout state, including drag, resize, and drop operations.\n * This extracts the state management logic from ReactGridLayout into a reusable hook.\n */\n\nimport { useState, useCallback, useMemo, useRef, useEffect } from \"react\";\nimport { deepEqual } from \"fast-equals\";\nimport type {\n Layout,\n LayoutItem,\n CompactType,\n DroppingPosition,\n Compactor,\n Mutable\n} from \"../../core/types.js\";\nimport {\n cloneLayout,\n cloneLayoutItem,\n moveElement,\n correctBounds,\n bottom,\n getLayoutItem\n} from \"../../core/layout.js\";\nimport { compact } from \"../../core/compact-compat.js\";\nimport { getCompactor } from \"../../core/compactors.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DragState {\n /** Currently dragging item placeholder */\n activeDrag: LayoutItem | null;\n /** Original item before drag started */\n oldDragItem: LayoutItem | null;\n /** Layout before drag started */\n oldLayout: Layout | null;\n}\n\nexport interface ResizeState {\n /** Whether a resize is in progress */\n resizing: boolean;\n /** Original item before resize started */\n oldResizeItem: LayoutItem | null;\n /** Layout before resize started */\n oldLayout: Layout | null;\n}\n\nexport interface DropState {\n /** DOM node for the dropping placeholder */\n droppingDOMNode: React.ReactElement | null;\n /** Current drop position */\n droppingPosition: DroppingPosition | null;\n}\n\nexport interface UseGridLayoutOptions {\n /** Initial layout */\n layout: Layout;\n /** Number of columns */\n cols: number;\n /** Compaction type: 'vertical', 'horizontal', or null */\n compactType?: CompactType;\n /** Allow items to overlap */\n allowOverlap?: boolean;\n /** Prevent collisions when moving items */\n preventCollision?: boolean;\n /** Called when layout changes */\n onLayoutChange?: (layout: Layout) => void;\n}\n\nexport interface UseGridLayoutResult {\n /** Current layout */\n layout: Layout;\n /** Set layout directly */\n setLayout: (layout: Layout) => void;\n /** Drag state */\n dragState: DragState;\n /** Resize state */\n resizeState: ResizeState;\n /** Drop state */\n dropState: DropState;\n /** Start dragging an item */\n onDragStart: (itemId: string, x: number, y: number) => LayoutItem | null;\n /** Update drag position */\n onDrag: (itemId: string, x: number, y: number) => void;\n /** Stop dragging */\n onDragStop: (itemId: string, x: number, y: number) => void;\n /** Start resizing an item */\n onResizeStart: (itemId: string) => LayoutItem | null;\n /** Update resize dimensions */\n onResize: (\n itemId: string,\n w: number,\n h: number,\n x?: number,\n y?: number\n ) => void;\n /** Stop resizing */\n onResizeStop: (itemId: string, w: number, h: number) => void;\n /** Start dropping (external drag-in) */\n onDropDragOver: (\n droppingItem: LayoutItem,\n position: DroppingPosition\n ) => void;\n /** Update drop position */\n onDropDragLeave: () => void;\n /** Complete drop */\n onDrop: (droppingItem: LayoutItem) => void;\n /** Container height in rows */\n containerHeight: number;\n /** Whether any drag/resize is active */\n isInteracting: boolean;\n /** Get the compactor being used */\n compactor: Compactor;\n}\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\n/**\n * Hook for managing grid layout state.\n *\n * Handles all layout state including drag, resize, and drop operations.\n * Uses immutable updates and provides callbacks for all interactions.\n *\n * @example\n * ```tsx\n * function MyGrid() {\n * const {\n * layout,\n * onDragStart,\n * onDrag,\n * onDragStop,\n * containerHeight\n * } = useGridLayout({\n * layout: initialLayout,\n * cols: 12,\n * compactType: 'vertical'\n * });\n *\n * return (\n * <div style={{ height: containerHeight }}>\n * {layout.map(item => (\n * <GridItem\n * key={item.i}\n * {...item}\n * onDragStart={() => onDragStart(item.i, item.x, item.y)}\n * />\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useGridLayout(\n options: UseGridLayoutOptions\n): UseGridLayoutResult {\n const {\n layout: propsLayout,\n cols,\n compactType = \"vertical\",\n allowOverlap = false,\n preventCollision = false,\n onLayoutChange\n } = options;\n\n // Get the appropriate compactor\n const compactor = useMemo(\n () => getCompactor(compactType, allowOverlap),\n [compactType, allowOverlap]\n );\n\n // Track if we're currently dragging to block prop updates\n const isDraggingRef = useRef(false);\n\n // Initialize layout with compaction\n const [layout, setLayoutState] = useState<Layout>(() => {\n const corrected = correctBounds(cloneLayout(propsLayout), { cols });\n return compact(corrected, compactType, cols, allowOverlap);\n });\n\n // Drag state\n const [dragState, setDragState] = useState<DragState>({\n activeDrag: null,\n oldDragItem: null,\n oldLayout: null\n });\n\n // Resize state\n const [resizeState, setResizeState] = useState<ResizeState>({\n resizing: false,\n oldResizeItem: null,\n oldLayout: null\n });\n\n // Drop state\n const [dropState, setDropState] = useState<DropState>({\n droppingDOMNode: null,\n droppingPosition: null\n });\n\n // Track previous layout for change detection\n const prevLayoutRef = useRef<Layout>(layout);\n\n // Set layout with optional compaction\n const setLayout = useCallback(\n (newLayout: Layout) => {\n const corrected = correctBounds(cloneLayout(newLayout), { cols });\n const compacted = compact(corrected, compactType, cols, allowOverlap);\n setLayoutState(compacted);\n },\n [cols, compactType, allowOverlap]\n );\n\n // Sync layout from props when not dragging\n useEffect(() => {\n if (isDraggingRef.current) return;\n\n if (!deepEqual(propsLayout, prevLayoutRef.current)) {\n setLayout(propsLayout);\n }\n }, [propsLayout, setLayout]);\n\n // Notify layout changes\n useEffect(() => {\n if (!deepEqual(layout, prevLayoutRef.current)) {\n prevLayoutRef.current = layout;\n onLayoutChange?.(layout);\n }\n }, [layout, onLayoutChange]);\n\n // ============================================================================\n // Drag Handlers\n // ============================================================================\n\n const onDragStart = useCallback(\n (itemId: string, x: number, y: number): LayoutItem | null => {\n const item = getLayoutItem(layout, itemId);\n if (!item) return null;\n\n isDraggingRef.current = true;\n\n const placeholder: LayoutItem = {\n ...cloneLayoutItem(item),\n x,\n y,\n static: false,\n moved: false\n };\n\n setDragState({\n activeDrag: placeholder,\n oldDragItem: cloneLayoutItem(item),\n oldLayout: cloneLayout(layout)\n });\n\n return placeholder;\n },\n [layout]\n );\n\n const onDrag = useCallback(\n (itemId: string, x: number, y: number) => {\n const item = getLayoutItem(layout, itemId);\n if (!item) return;\n\n // Update placeholder position\n setDragState(prev => ({\n ...prev,\n activeDrag: prev.activeDrag ? { ...prev.activeDrag, x, y } : null\n }));\n\n // Move element and update layout\n const newLayout = moveElement(\n layout,\n item,\n x,\n y,\n true, // isUserAction\n preventCollision,\n compactType,\n cols,\n allowOverlap\n );\n\n // Compact layout\n const compacted = allowOverlap\n ? newLayout\n : compact(newLayout, compactType, cols);\n\n setLayoutState(compacted);\n },\n [layout, cols, compactType, preventCollision, allowOverlap]\n );\n\n const onDragStop = useCallback(\n (itemId: string, x: number, y: number) => {\n const item = getLayoutItem(layout, itemId);\n if (!item) return;\n\n // Final move\n const newLayout = moveElement(\n layout,\n item,\n x,\n y,\n true,\n preventCollision,\n compactType,\n cols,\n allowOverlap\n );\n\n // Compact and finalize\n const compacted = compact(newLayout, compactType, cols, allowOverlap);\n\n isDraggingRef.current = false;\n\n setDragState({\n activeDrag: null,\n oldDragItem: null,\n oldLayout: null\n });\n\n setLayoutState(compacted);\n },\n [layout, cols, compactType, preventCollision, allowOverlap]\n );\n\n // ============================================================================\n // Resize Handlers\n // ============================================================================\n\n const onResizeStart = useCallback(\n (itemId: string): LayoutItem | null => {\n const item = getLayoutItem(layout, itemId);\n if (!item) return null;\n\n setResizeState({\n resizing: true,\n oldResizeItem: cloneLayoutItem(item),\n oldLayout: cloneLayout(layout)\n });\n\n return item;\n },\n [layout]\n );\n\n const onResize = useCallback(\n (itemId: string, w: number, h: number, x?: number, y?: number) => {\n const newLayout = layout.map(item => {\n if (item.i === itemId) {\n const updated: LayoutItem = {\n ...item,\n w,\n h\n };\n if (x !== undefined) (updated as Mutable<LayoutItem>).x = x;\n if (y !== undefined) (updated as Mutable<LayoutItem>).y = y;\n return updated;\n }\n return item;\n });\n\n // Correct bounds and compact\n const corrected = correctBounds(newLayout, { cols });\n const compacted = compact(corrected, compactType, cols, allowOverlap);\n\n setLayoutState(compacted);\n },\n [layout, cols, compactType, allowOverlap]\n );\n\n const onResizeStop = useCallback(\n (itemId: string, w: number, h: number) => {\n // Apply final resize\n onResize(itemId, w, h);\n\n setResizeState({\n resizing: false,\n oldResizeItem: null,\n oldLayout: null\n });\n },\n [onResize]\n );\n\n // ============================================================================\n // Drop Handlers\n // ============================================================================\n\n const onDropDragOver = useCallback(\n (droppingItem: LayoutItem, position: DroppingPosition) => {\n // Check if item already exists in layout\n const existingItem = getLayoutItem(layout, droppingItem.i);\n\n if (!existingItem) {\n // Add dropping item to layout\n const newLayout = [...layout, droppingItem];\n const corrected = correctBounds(newLayout, { cols });\n const compacted = compact(corrected, compactType, cols, allowOverlap);\n setLayoutState(compacted);\n }\n\n setDropState({\n droppingDOMNode: null, // Will be set by component\n droppingPosition: position\n });\n },\n [layout, cols, compactType, allowOverlap]\n );\n\n const onDropDragLeave = useCallback(() => {\n // Remove dropping placeholder from layout\n const newLayout = layout.filter(item => item.i !== \"__dropping-elem__\");\n setLayoutState(newLayout);\n\n setDropState({\n droppingDOMNode: null,\n droppingPosition: null\n });\n }, [layout]);\n\n const onDrop = useCallback(\n (droppingItem: LayoutItem) => {\n // Replace placeholder with actual item\n const newLayout = layout.map(item => {\n if (item.i === \"__dropping-elem__\") {\n return {\n ...item,\n i: droppingItem.i,\n static: false\n };\n }\n return item;\n });\n\n const corrected = correctBounds(newLayout, { cols });\n const compacted = compact(corrected, compactType, cols, allowOverlap);\n setLayoutState(compacted);\n\n setDropState({\n droppingDOMNode: null,\n droppingPosition: null\n });\n },\n [layout, cols, compactType, allowOverlap]\n );\n\n // ============================================================================\n // Computed Values\n // ============================================================================\n\n const containerHeight = useMemo(() => bottom(layout), [layout]);\n\n const isInteracting =\n dragState.activeDrag !== null ||\n resizeState.resizing ||\n dropState.droppingPosition !== null;\n\n return {\n layout,\n setLayout,\n dragState,\n resizeState,\n dropState,\n onDragStart,\n onDrag,\n onDragStop,\n onResizeStart,\n onResize,\n onResizeStop,\n onDropDragOver,\n onDropDragLeave,\n onDrop,\n containerHeight,\n isInteracting,\n compactor\n };\n}\n\nexport default useGridLayout;\n","/**\n * useResponsiveLayout hook\n *\n * Manages responsive breakpoints and layout generation for different screen sizes.\n * Extracts state management from ResponsiveReactGridLayout into a reusable hook.\n */\n\nimport { useState, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { deepEqual } from \"fast-equals\";\nimport type {\n Layout,\n Breakpoint,\n Breakpoints,\n ResponsiveLayouts,\n CompactType\n} from \"../../core/types.js\";\nimport { cloneLayout } from \"../../core/layout.js\";\nimport {\n getBreakpointFromWidth,\n getColsFromBreakpoint,\n findOrGenerateResponsiveLayout,\n sortBreakpoints\n} from \"../../core/responsive.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Default breakpoint names */\nexport type DefaultBreakpoints = \"lg\" | \"md\" | \"sm\" | \"xs\" | \"xxs\";\n\n/** Default breakpoint widths */\nexport const DEFAULT_BREAKPOINTS: Breakpoints<DefaultBreakpoints> = {\n lg: 1200,\n md: 996,\n sm: 768,\n xs: 480,\n xxs: 0\n};\n\n/** Default column counts per breakpoint */\nexport const DEFAULT_COLS: Breakpoints<DefaultBreakpoints> = {\n lg: 12,\n md: 10,\n sm: 6,\n xs: 4,\n xxs: 2\n};\n\nexport interface UseResponsiveLayoutOptions<\n B extends Breakpoint = DefaultBreakpoints\n> {\n /** Current container width */\n width: number;\n /** Breakpoint definitions (name → min-width) */\n breakpoints?: Breakpoints<B>;\n /** Column counts per breakpoint */\n cols?: Breakpoints<B>;\n /** Layouts for each breakpoint */\n layouts?: ResponsiveLayouts<B>;\n /** Compaction type */\n compactType?: CompactType;\n /** Called when breakpoint changes */\n onBreakpointChange?: (newBreakpoint: B, cols: number) => void;\n /** Called when layout changes */\n onLayoutChange?: (layout: Layout, layouts: ResponsiveLayouts<B>) => void;\n /** Called when width changes */\n onWidthChange?: (\n width: number,\n margin: readonly [number, number],\n cols: number,\n containerPadding: readonly [number, number] | null\n ) => void;\n}\n\nexport interface UseResponsiveLayoutResult<\n B extends Breakpoint = DefaultBreakpoints\n> {\n /** Current layout for the active breakpoint */\n layout: Layout;\n /** All layouts by breakpoint */\n layouts: ResponsiveLayouts<B>;\n /** Current active breakpoint */\n breakpoint: B;\n /** Column count for the current breakpoint */\n cols: number;\n /** Update layouts for a specific breakpoint */\n setLayoutForBreakpoint: (breakpoint: B, layout: Layout) => void;\n /** Update all layouts */\n setLayouts: (layouts: ResponsiveLayouts<B>) => void;\n /** Sorted array of breakpoint names (smallest to largest) */\n sortedBreakpoints: B[];\n}\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\n/**\n * Hook for managing responsive grid layouts.\n *\n * Automatically selects the appropriate layout based on container width\n * and generates layouts for new breakpoints from existing ones.\n *\n * @example\n * ```tsx\n * function MyResponsiveGrid() {\n * const { width, containerRef } = useContainerWidth();\n * const { layout, breakpoint, cols } = useResponsiveLayout({\n * width,\n * layouts: {\n * lg: [...],\n * md: [...],\n * sm: [...]\n * }\n * });\n *\n * return (\n * <div ref={containerRef}>\n * <GridLayout\n * width={width}\n * cols={cols}\n * layout={layout}\n * />\n * </div>\n * );\n * }\n * ```\n */\nexport function useResponsiveLayout<B extends Breakpoint = DefaultBreakpoints>(\n options: UseResponsiveLayoutOptions<B>\n): UseResponsiveLayoutResult<B> {\n const {\n width,\n breakpoints = DEFAULT_BREAKPOINTS as unknown as Breakpoints<B>,\n cols: colsConfig = DEFAULT_COLS as unknown as Breakpoints<B>,\n layouts: propsLayouts = {} as ResponsiveLayouts<B>,\n compactType = \"vertical\",\n onBreakpointChange,\n onLayoutChange,\n onWidthChange\n } = options;\n\n // Sorted breakpoints for consistent ordering\n const sortedBreakpoints = useMemo(\n () => sortBreakpoints(breakpoints),\n [breakpoints]\n );\n\n // Calculate initial breakpoint and cols\n const initialBreakpoint = useMemo(\n () => getBreakpointFromWidth(breakpoints, width),\n // Only calculate on mount, not on width changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const initialCols = useMemo(\n () => getColsFromBreakpoint(initialBreakpoint, colsConfig),\n [initialBreakpoint, colsConfig]\n );\n\n // State\n const [breakpoint, setBreakpoint] = useState<B>(initialBreakpoint);\n const [cols, setCols] = useState<number>(initialCols);\n const [layouts, setLayoutsState] = useState<ResponsiveLayouts<B>>(() => {\n // Clone initial layouts\n const cloned = {} as ResponsiveLayouts<B>;\n for (const bp of sortedBreakpoints) {\n const layout = propsLayouts[bp];\n if (layout) {\n (cloned as Record<B, Layout>)[bp] = cloneLayout(layout);\n }\n }\n return cloned;\n });\n\n // Track previous values for change detection\n const prevWidthRef = useRef(width);\n const prevBreakpointRef = useRef(breakpoint);\n const prevLayoutsRef = useRef(layouts);\n\n // Current layout for the active breakpoint\n const layout = useMemo(() => {\n return findOrGenerateResponsiveLayout(\n layouts,\n breakpoints,\n breakpoint,\n prevBreakpointRef.current,\n cols,\n compactType\n );\n }, [layouts, breakpoints, breakpoint, cols, compactType]);\n\n // Set layout for a specific breakpoint\n const setLayoutForBreakpoint = useCallback((bp: B, newLayout: Layout) => {\n setLayoutsState((prev: ResponsiveLayouts<B>) => ({\n ...prev,\n [bp]: cloneLayout(newLayout)\n }));\n }, []);\n\n // Set all layouts\n const setLayouts = useCallback((newLayouts: ResponsiveLayouts<B>) => {\n const cloned = {} as ResponsiveLayouts<B>;\n for (const bp of Object.keys(newLayouts) as B[]) {\n const layoutForBp = newLayouts[bp];\n if (layoutForBp) {\n (cloned as Record<B, Layout>)[bp] = cloneLayout(layoutForBp);\n }\n }\n setLayoutsState(cloned);\n }, []);\n\n // Handle width changes\n useEffect(() => {\n if (prevWidthRef.current === width) return;\n prevWidthRef.current = width;\n\n // Determine new breakpoint\n const newBreakpoint = getBreakpointFromWidth(breakpoints, width);\n const newCols = getColsFromBreakpoint(newBreakpoint, colsConfig);\n\n // Notify width change\n onWidthChange?.(width, [10, 10], newCols, null);\n\n // Check if breakpoint changed\n if (newBreakpoint !== breakpoint) {\n // Generate layout for new breakpoint\n const newLayout = findOrGenerateResponsiveLayout(\n layouts,\n breakpoints,\n newBreakpoint,\n breakpoint,\n newCols,\n compactType\n );\n\n // Update layouts with the new breakpoint layout\n const updatedLayouts: ResponsiveLayouts<B> = {\n ...layouts,\n [newBreakpoint]: newLayout\n };\n\n setLayoutsState(updatedLayouts);\n setBreakpoint(newBreakpoint);\n setCols(newCols);\n\n // Notify breakpoint change\n onBreakpointChange?.(newBreakpoint, newCols);\n\n prevBreakpointRef.current = newBreakpoint;\n }\n }, [\n width,\n breakpoints,\n colsConfig,\n breakpoint,\n layouts,\n compactType,\n onBreakpointChange,\n onWidthChange\n ]);\n\n // Sync with prop layouts when they change\n useEffect(() => {\n if (!deepEqual(propsLayouts, prevLayoutsRef.current)) {\n setLayouts(propsLayouts);\n prevLayoutsRef.current = propsLayouts;\n }\n }, [propsLayouts, setLayouts]);\n\n // Notify layout changes\n useEffect(() => {\n if (!deepEqual(layouts, prevLayoutsRef.current)) {\n prevLayoutsRef.current = layouts;\n onLayoutChange?.(layout, layouts);\n }\n }, [layout, layouts, onLayoutChange]);\n\n return {\n layout,\n layouts,\n breakpoint,\n cols,\n setLayoutForBreakpoint,\n setLayouts,\n sortedBreakpoints\n };\n}\n\nexport default useResponsiveLayout;\n"]}
|
package/dist/chunk-PBQSHIID.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/react/components/GridItem.tsx","../src/react/components/GridLayout.tsx","../src/react/components/ResponsiveGridLayout.tsx"],"names":["pos","resizeHandle","React","useMemo","useState","useRef","useEffect","useCallback","jsx","clsx","noop","synchronizeLayoutWithChildren","deepEqual","currentMargin"],"mappings":"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","file":"chunk-R35HZZTA.mjs","sourcesContent":["/**\n * GridItem component\n *\n * An individual item within a grid layout. Handles dragging and resizing.\n */\n\nimport React, {\n useRef,\n useState,\n useCallback,\n useEffect,\n useMemo,\n type ReactElement,\n type CSSProperties\n} from \"react\";\nimport { DraggableCore, type DraggableEventHandler } from \"react-draggable\";\nimport { Resizable } from \"react-resizable\";\nimport clsx from \"clsx\";\n\nimport type {\n Position,\n DroppingPosition,\n ResizeHandleAxis,\n GridDragEvent,\n GridResizeEvent\n} from \"../../core/types.js\";\nimport type { PositionParams } from \"../../core/calculate.js\";\nimport {\n calcGridItemPosition,\n calcGridItemWHPx,\n calcGridColWidth,\n calcXY,\n calcWH,\n clamp\n} from \"../../core/calculate.js\";\nimport {\n setTransform,\n setTopLeft,\n perc,\n resizeItemInDirection\n} from \"../../core/position.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype PartialPosition = { top: number; left: number };\n\nexport type GridItemCallback<Data extends GridDragEvent | GridResizeEvent> = (\n i: string,\n w: number,\n h: number,\n data: Data\n) => void;\n\nexport type ResizeHandle =\n | ReactElement\n | ((\n resizeHandleAxis: ResizeHandleAxis,\n ref: React.Ref<HTMLElement>\n ) => ReactElement);\n\n// Internal callback data type with typed handle\ninterface ResizeCallbackData {\n node: HTMLElement;\n size: { width: number; height: number };\n handle: ResizeHandleAxis;\n}\n\n// react-resizable callback type (handle is string)\ntype ReactResizableCallback = (\n e: React.SyntheticEvent,\n data: {\n node: HTMLElement;\n size: { width: number; height: number };\n handle: string;\n }\n) => void;\n\nexport interface GridItemProps {\n /** Child element to render */\n children: ReactElement;\n /** Number of columns in the grid */\n cols: number;\n /** Width of the container in pixels */\n containerWidth: number;\n /** Margin between items [x, y] */\n margin: readonly [number, number];\n /** Padding inside the container [x, y] */\n containerPadding: readonly [number, number];\n /** Height of each row in pixels */\n rowHeight: number;\n /** Maximum number of rows */\n maxRows: number;\n /** Whether the item can be dragged */\n isDraggable: boolean;\n /** Whether the item can be resized */\n isResizable: boolean;\n /** Whether the item is bounded within the container */\n isBounded: boolean;\n /** Whether the item is static (can't be moved/resized) */\n static?: boolean;\n /** Use CSS transforms instead of top/left */\n useCSSTransforms?: boolean;\n /** Use percentage widths for server rendering */\n usePercentages?: boolean;\n /** Scale factor for transforms */\n transformScale?: number;\n /** Current position of a dropping element */\n droppingPosition?: DroppingPosition;\n\n /** Additional class name */\n className?: string;\n /** Additional styles */\n style?: CSSProperties;\n\n /** CSS selector for draggable handle */\n handle?: string;\n /** CSS selector for cancel handle */\n cancel?: string;\n\n /** X position in grid units */\n x: number;\n /** Y position in grid units */\n y: number;\n /** Width in grid units */\n w: number;\n /** Height in grid units */\n h: number;\n\n /** Minimum width in grid units */\n minW?: number;\n /** Maximum width in grid units */\n maxW?: number;\n /** Minimum height in grid units */\n minH?: number;\n /** Maximum height in grid units */\n maxH?: number;\n\n /** Unique identifier */\n i: string;\n\n /** Which resize handles to show */\n resizeHandles?: ResizeHandleAxis[];\n /** Custom resize handle */\n resizeHandle?: ResizeHandle;\n\n /** Called when drag starts */\n onDragStart?: GridItemCallback<GridDragEvent>;\n /** Called during drag */\n onDrag?: GridItemCallback<GridDragEvent>;\n /** Called when drag stops */\n onDragStop?: GridItemCallback<GridDragEvent>;\n /** Called when resize starts */\n onResizeStart?: GridItemCallback<GridResizeEvent>;\n /** Called during resize */\n onResize?: GridItemCallback<GridResizeEvent>;\n /** Called when resize stops */\n onResizeStop?: GridItemCallback<GridResizeEvent>;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * GridItem - An individual item within a grid layout.\n *\n * Wraps a child element with drag and resize functionality.\n */\nexport function GridItem(props: GridItemProps): ReactElement {\n const {\n children,\n cols,\n containerWidth,\n margin,\n containerPadding,\n rowHeight,\n maxRows,\n isDraggable,\n isResizable,\n isBounded,\n static: isStatic,\n useCSSTransforms = true,\n usePercentages = false,\n transformScale = 1,\n droppingPosition,\n className = \"\",\n style,\n handle = \"\",\n cancel = \"\",\n x,\n y,\n w,\n h,\n minW = 1,\n maxW = Infinity,\n minH = 1,\n maxH = Infinity,\n i,\n resizeHandles,\n resizeHandle,\n onDragStart: onDragStartProp,\n onDrag: onDragProp,\n onDragStop: onDragStopProp,\n onResizeStart: onResizeStartProp,\n onResize: onResizeProp,\n onResizeStop: onResizeStopProp\n } = props;\n\n // State\n const [dragging, setDragging] = useState(false);\n const [resizing, setResizing] = useState(false);\n\n // Refs for position tracking (avoid state for React 18 batching)\n const elementRef = useRef<HTMLDivElement>(null);\n const dragPositionRef = useRef<PartialPosition>({ left: 0, top: 0 });\n const resizePositionRef = useRef<Position>({\n top: 0,\n left: 0,\n width: 0,\n height: 0\n });\n\n // Previous dropping position for comparison\n const prevDroppingPositionRef = useRef<DroppingPosition | undefined>(\n undefined\n );\n\n // Position parameters\n const positionParams: PositionParams = useMemo(\n () => ({\n cols,\n containerPadding: containerPadding as [number, number],\n containerWidth,\n margin: margin as [number, number],\n maxRows,\n rowHeight\n }),\n [cols, containerPadding, containerWidth, margin, maxRows, rowHeight]\n );\n\n // ============================================================================\n // Style Creation\n // ============================================================================\n\n const createStyle = useCallback(\n (pos: Position): CSSProperties => {\n if (useCSSTransforms) {\n return setTransform(pos) as CSSProperties;\n }\n\n const styleObj = setTopLeft(pos) as CSSProperties;\n\n if (usePercentages) {\n return {\n ...styleObj,\n left: perc(pos.left / containerWidth),\n width: perc(pos.width / containerWidth)\n };\n }\n\n return styleObj;\n },\n [useCSSTransforms, usePercentages, containerWidth]\n );\n\n // ============================================================================\n // Drag Handlers\n // ============================================================================\n\n const onDragStart: DraggableEventHandler = useCallback(\n (e, { node }) => {\n if (!onDragStartProp) return;\n\n const { offsetParent } = node;\n if (!offsetParent) return;\n\n const parentRect = offsetParent.getBoundingClientRect();\n const clientRect = node.getBoundingClientRect();\n\n const cLeft = clientRect.left / transformScale;\n const pLeft = parentRect.left / transformScale;\n const cTop = clientRect.top / transformScale;\n const pTop = parentRect.top / transformScale;\n\n const newPosition: PartialPosition = {\n left: cLeft - pLeft + offsetParent.scrollLeft,\n top: cTop - pTop + offsetParent.scrollTop\n };\n\n dragPositionRef.current = newPosition;\n setDragging(true);\n\n const { x: newX, y: newY } = calcXY(\n positionParams,\n newPosition.top,\n newPosition.left,\n w,\n h\n );\n\n onDragStartProp(i, newX, newY, {\n e: e as unknown as Event,\n node,\n newPosition\n });\n },\n [onDragStartProp, transformScale, positionParams, w, h, i]\n );\n\n const onDrag: DraggableEventHandler = useCallback(\n (e, { node, deltaX, deltaY }) => {\n if (!onDragProp || !dragging) return;\n\n let top = dragPositionRef.current.top + deltaY;\n let left = dragPositionRef.current.left + deltaX;\n\n // Boundary calculations\n if (isBounded) {\n const { offsetParent } = node;\n if (offsetParent) {\n const bottomBoundary =\n offsetParent.clientHeight -\n calcGridItemWHPx(h, rowHeight, margin[1]);\n top = clamp(top, 0, bottomBoundary);\n\n const colWidth = calcGridColWidth(positionParams);\n const rightBoundary =\n containerWidth - calcGridItemWHPx(w, colWidth, margin[0]);\n left = clamp(left, 0, rightBoundary);\n }\n }\n\n const newPosition: PartialPosition = { top, left };\n dragPositionRef.current = newPosition;\n\n const { x: newX, y: newY } = calcXY(positionParams, top, left, w, h);\n onDragProp(i, newX, newY, {\n e: e as unknown as Event,\n node,\n newPosition\n });\n },\n [\n onDragProp,\n dragging,\n isBounded,\n h,\n rowHeight,\n margin,\n positionParams,\n containerWidth,\n w,\n i\n ]\n );\n\n const onDragStop: DraggableEventHandler = useCallback(\n (e, { node }) => {\n if (!onDragStopProp || !dragging) return;\n\n const { left, top } = dragPositionRef.current;\n const newPosition: PartialPosition = { top, left };\n\n setDragging(false);\n dragPositionRef.current = { left: 0, top: 0 };\n\n const { x: newX, y: newY } = calcXY(positionParams, top, left, w, h);\n onDragStopProp(i, newX, newY, {\n e: e as unknown as Event,\n node,\n newPosition\n });\n },\n [onDragStopProp, dragging, positionParams, w, h, i]\n );\n\n // ============================================================================\n // Resize Handlers\n // ============================================================================\n\n const onResizeHandler = useCallback(\n (\n e: React.SyntheticEvent,\n { node, size, handle: resizeHandle }: ResizeCallbackData,\n position: Position,\n handlerName: \"onResizeStart\" | \"onResize\" | \"onResizeStop\"\n ) => {\n const handler =\n handlerName === \"onResizeStart\"\n ? onResizeStartProp\n : handlerName === \"onResize\"\n ? onResizeProp\n : onResizeStopProp;\n\n if (!handler) return;\n\n // Sizing based on resize direction\n let updatedSize: Position;\n if (node) {\n updatedSize = resizeItemInDirection(\n resizeHandle,\n position,\n size as Position,\n containerWidth\n );\n } else {\n updatedSize = {\n ...size,\n top: position.top,\n left: position.left\n } as Position;\n }\n\n resizePositionRef.current = updatedSize;\n\n // Calculate new grid dimensions\n let { w: newW, h: newH } = calcWH(\n positionParams,\n updatedSize.width,\n updatedSize.height,\n x,\n y,\n resizeHandle\n );\n\n // Min/max capping\n newW = clamp(newW, Math.max(minW, 1), maxW);\n newH = clamp(newH, minH, maxH);\n\n handler(i, newW, newH, {\n e: e.nativeEvent,\n node,\n size: updatedSize,\n handle: resizeHandle\n });\n },\n [\n onResizeStartProp,\n onResizeProp,\n onResizeStopProp,\n containerWidth,\n positionParams,\n x,\n y,\n minW,\n maxW,\n minH,\n maxH,\n i\n ]\n );\n\n const handleResizeStart: ReactResizableCallback = useCallback(\n (e, data) => {\n setResizing(true);\n const pos = calcGridItemPosition(positionParams, x, y, w, h);\n const typedData: ResizeCallbackData = {\n ...data,\n handle: data.handle as ResizeHandleAxis\n };\n onResizeHandler(e, typedData, pos, \"onResizeStart\");\n },\n [onResizeHandler, positionParams, x, y, w, h]\n );\n\n const handleResize: ReactResizableCallback = useCallback(\n (e, data) => {\n const pos = calcGridItemPosition(positionParams, x, y, w, h);\n const typedData: ResizeCallbackData = {\n ...data,\n handle: data.handle as ResizeHandleAxis\n };\n onResizeHandler(e, typedData, pos, \"onResize\");\n },\n [onResizeHandler, positionParams, x, y, w, h]\n );\n\n const handleResizeStop: ReactResizableCallback = useCallback(\n (e, data) => {\n setResizing(false);\n resizePositionRef.current = { top: 0, left: 0, width: 0, height: 0 };\n const pos = calcGridItemPosition(positionParams, x, y, w, h);\n const typedData: ResizeCallbackData = {\n ...data,\n handle: data.handle as ResizeHandleAxis\n };\n onResizeHandler(e, typedData, pos, \"onResizeStop\");\n },\n [onResizeHandler, positionParams, x, y, w, h]\n );\n\n // ============================================================================\n // Dropping Item Support\n // ============================================================================\n\n useEffect(() => {\n if (!droppingPosition) return;\n\n const node = elementRef.current;\n if (!node) return;\n\n const prevDroppingPosition = prevDroppingPositionRef.current || {\n left: 0,\n top: 0\n };\n\n const shouldDrag =\n dragging &&\n (droppingPosition.left !== prevDroppingPosition.left ||\n droppingPosition.top !== prevDroppingPosition.top);\n\n if (!dragging) {\n // Start drag - simulate the draggable callback data\n const fakeData = {\n node,\n deltaX: droppingPosition.left,\n deltaY: droppingPosition.top,\n lastX: 0,\n lastY: 0,\n x: droppingPosition.left,\n y: droppingPosition.top\n };\n onDragStart(droppingPosition.e as unknown as MouseEvent, fakeData);\n } else if (shouldDrag) {\n // Continue drag\n const deltaX = droppingPosition.left - dragPositionRef.current.left;\n const deltaY = droppingPosition.top - dragPositionRef.current.top;\n\n const fakeData = {\n node,\n deltaX,\n deltaY,\n lastX: dragPositionRef.current.left,\n lastY: dragPositionRef.current.top,\n x: droppingPosition.left,\n y: droppingPosition.top\n };\n onDrag(droppingPosition.e as unknown as MouseEvent, fakeData);\n }\n\n prevDroppingPositionRef.current = droppingPosition;\n }, [droppingPosition, dragging, onDragStart, onDrag]);\n\n // ============================================================================\n // Render\n // ============================================================================\n\n const pos = calcGridItemPosition(\n positionParams,\n x,\n y,\n w,\n h,\n dragging ? dragPositionRef.current : null,\n resizing ? resizePositionRef.current : null\n );\n\n const child = React.Children.only(children);\n\n // Calculate constraints for resizing\n const maxWidth = calcGridItemPosition(positionParams, 0, 0, cols, 0).width;\n const mins = calcGridItemPosition(positionParams, 0, 0, minW, minH);\n const maxes = calcGridItemPosition(positionParams, 0, 0, maxW, maxH);\n const minConstraints: [number, number] = [mins.width, mins.height];\n const maxConstraints: [number, number] = [\n Math.min(maxes.width, maxWidth),\n Math.min(maxes.height, Infinity)\n ];\n\n // Get child props safely\n const childProps = (child as ReactElement<Record<string, unknown>>).props;\n const childClassName = childProps[\"className\"] as string | undefined;\n const childStyle = childProps[\"style\"] as CSSProperties | undefined;\n\n // Create the child element with updated props\n let newChild: ReactElement = React.cloneElement(child, {\n ref: elementRef,\n className: clsx(\"react-grid-item\", childClassName, className, {\n static: isStatic,\n resizing,\n \"react-draggable\": isDraggable,\n \"react-draggable-dragging\": dragging,\n dropping: Boolean(droppingPosition),\n cssTransforms: useCSSTransforms\n }),\n style: {\n ...style,\n ...childStyle,\n ...createStyle(pos)\n }\n } as Record<string, unknown>);\n\n // Wrap with Resizable\n // Cast resizeHandle to match react-resizable's expected type (string instead of ResizeHandleAxis)\n const resizableHandle = resizeHandle as\n | ReactElement\n | ((axis: string, ref: React.Ref<HTMLElement>) => ReactElement)\n | undefined;\n\n newChild = (\n <Resizable\n draggableOpts={{ disabled: !isResizable }}\n className={isResizable ? undefined : \"react-resizable-hide\"}\n width={pos.width}\n height={pos.height}\n minConstraints={minConstraints}\n maxConstraints={maxConstraints}\n onResizeStart={handleResizeStart}\n onResize={handleResize}\n onResizeStop={handleResizeStop}\n transformScale={transformScale}\n resizeHandles={resizeHandles}\n handle={resizableHandle}\n >\n {newChild}\n </Resizable>\n );\n\n // Wrap with DraggableCore\n newChild = (\n <DraggableCore\n disabled={!isDraggable}\n onStart={onDragStart}\n onDrag={onDrag}\n onStop={onDragStop}\n handle={handle}\n cancel={\".react-resizable-handle\" + (cancel ? \",\" + cancel : \"\")}\n scale={transformScale}\n nodeRef={elementRef}\n >\n {newChild}\n </DraggableCore>\n );\n\n return newChild;\n}\n\nexport default GridItem;\n","/**\n * GridLayout component\n *\n * A reactive, fluid grid layout with draggable, resizable components.\n */\n\nimport React, {\n useState,\n useCallback,\n useEffect,\n useRef,\n useMemo,\n type ReactElement,\n type CSSProperties,\n type DragEvent as ReactDragEvent\n} from \"react\";\nimport { deepEqual } from \"fast-equals\";\nimport clsx from \"clsx\";\n\nimport type {\n Layout,\n LayoutItem,\n CompactType,\n DroppingPosition,\n GridDragEvent,\n GridResizeEvent,\n Mutable,\n GridConfig,\n DragConfig,\n ResizeConfig,\n DropConfig,\n PositionStrategy,\n Compactor\n} from \"../../core/types.js\";\nimport {\n defaultGridConfig,\n defaultDragConfig,\n defaultResizeConfig,\n defaultDropConfig\n} from \"../../core/types.js\";\nimport type { PositionParams } from \"../../core/calculate.js\";\nimport {\n bottom,\n cloneLayoutItem,\n getLayoutItem,\n moveElement,\n withLayoutItem,\n correctBounds\n} from \"../../core/layout.js\";\nimport { getAllCollisions } from \"../../core/collision.js\";\nimport { compact } from \"../../core/compact-compat.js\";\nimport { getCompactor } from \"../../core/compactors.js\";\nimport { calcXY } from \"../../core/calculate.js\";\nimport { defaultPositionStrategy } from \"../../core/position.js\";\n\nimport { GridItem, type ResizeHandle } from \"./GridItem.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type EventCallback = (\n layout: Layout,\n oldItem: LayoutItem | null,\n newItem: LayoutItem | null,\n placeholder: LayoutItem | null,\n event: Event,\n element?: HTMLElement\n) => void;\n\nexport interface GridLayoutProps {\n // ===========================================================================\n // Required Props\n // ===========================================================================\n\n /** Child elements to render in the grid */\n children: React.ReactNode;\n\n /** Width of the container in pixels */\n width: number;\n\n // ===========================================================================\n // Composable Configuration Interfaces (v2 API)\n // ===========================================================================\n\n /**\n * Grid measurement configuration.\n * @see GridConfig\n */\n gridConfig?: Partial<GridConfig>;\n\n /**\n * Drag behavior configuration.\n * @see DragConfig\n */\n dragConfig?: Partial<DragConfig>;\n\n /**\n * Resize behavior configuration.\n * @see ResizeConfig\n */\n resizeConfig?: Partial<ResizeConfig>;\n\n /**\n * External drop configuration.\n * @see DropConfig\n */\n dropConfig?: Partial<DropConfig>;\n\n /**\n * CSS positioning strategy.\n * Use transformStrategy (default), absoluteStrategy, or createScaledStrategy(scale).\n * @see PositionStrategy\n */\n positionStrategy?: PositionStrategy;\n\n /**\n * Layout compaction strategy.\n * Use verticalCompactor (default), horizontalCompactor, or noCompactor.\n * @see Compactor\n */\n compactor?: Compactor;\n\n // ===========================================================================\n // Layout Data\n // ===========================================================================\n\n /** Layout definition */\n layout?: Layout;\n\n /** Item to use when dropping from outside */\n droppingItem?: LayoutItem;\n\n // ===========================================================================\n // Container Props\n // ===========================================================================\n\n /** Whether to auto-size the container height */\n autoSize?: boolean;\n\n /** Additional class name */\n className?: string;\n\n /** Additional styles */\n style?: CSSProperties;\n\n /** Ref to the container element */\n innerRef?: React.Ref<HTMLDivElement>;\n\n // ===========================================================================\n // Callbacks\n // ===========================================================================\n\n /** Called when layout changes */\n onLayoutChange?: (layout: Layout) => void;\n\n /** Called when drag starts */\n onDragStart?: EventCallback;\n\n /** Called during drag */\n onDrag?: EventCallback;\n\n /** Called when drag stops */\n onDragStop?: EventCallback;\n\n /** Called when resize starts */\n onResizeStart?: EventCallback;\n\n /** Called during resize */\n onResize?: EventCallback;\n\n /** Called when resize stops */\n onResizeStop?: EventCallback;\n\n /** Called when an item is dropped from outside */\n onDrop?: (layout: Layout, item: LayoutItem | undefined, e: Event) => void;\n\n /** Called when dragging over the grid */\n onDropDragOver?: (\n e: ReactDragEvent\n ) => { w?: number; h?: number } | false | void;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\nconst noop = () => {};\n\nconst layoutClassName = \"react-grid-layout\";\n\n// Check for Firefox\nlet isFirefox = false;\ntry {\n isFirefox = /firefox/i.test(navigator.userAgent);\n} catch {\n /* Ignore */\n}\n\n/**\n * Compare children arrays for equality\n */\nfunction childrenEqual(a: React.ReactNode, b: React.ReactNode): boolean {\n const aArr = React.Children.toArray(a);\n const bArr = React.Children.toArray(b);\n\n if (aArr.length !== bArr.length) return false;\n\n for (let i = 0; i < aArr.length; i++) {\n const aChild = aArr[i] as ReactElement;\n const bChild = bArr[i] as ReactElement;\n if (aChild?.key !== bChild?.key) return false;\n }\n\n return true;\n}\n\n/**\n * Synchronize layout with children\n */\nfunction synchronizeLayoutWithChildren(\n initialLayout: Layout,\n children: React.ReactNode,\n cols: number,\n compactType: CompactType,\n allowOverlap: boolean\n): Layout {\n const layout: LayoutItem[] = [];\n const childKeys = new Set<string>();\n\n React.Children.forEach(children, child => {\n if (!React.isValidElement(child) || child.key === null) return;\n const key = String(child.key);\n childKeys.add(key);\n\n // Find existing layout item\n const existingItem = initialLayout.find(l => l.i === key);\n\n if (existingItem) {\n layout.push(cloneLayoutItem(existingItem));\n } else {\n // Create new layout item from child data-grid prop\n const childProps = child.props as { \"data-grid\"?: Partial<LayoutItem> };\n const dataGrid = childProps[\"data-grid\"];\n\n if (dataGrid) {\n layout.push({\n i: key,\n x: dataGrid.x ?? 0,\n y: dataGrid.y ?? 0,\n w: dataGrid.w ?? 1,\n h: dataGrid.h ?? 1,\n minW: dataGrid.minW,\n maxW: dataGrid.maxW,\n minH: dataGrid.minH,\n maxH: dataGrid.maxH,\n static: dataGrid.static,\n isDraggable: dataGrid.isDraggable,\n isResizable: dataGrid.isResizable,\n resizeHandles: dataGrid.resizeHandles,\n isBounded: dataGrid.isBounded\n });\n } else {\n // Create default layout item\n layout.push({\n i: key,\n x: 0,\n y: bottom(layout),\n w: 1,\n h: 1\n });\n }\n }\n });\n\n // Correct bounds and compact\n const corrected = correctBounds(layout, { cols });\n return compact(corrected, compactType, cols, allowOverlap);\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * GridLayout - A reactive, fluid grid layout with draggable, resizable components.\n */\nexport function GridLayout(props: GridLayoutProps): ReactElement {\n const {\n // Required\n children,\n width,\n\n // Composable config interfaces\n gridConfig: gridConfigProp,\n dragConfig: dragConfigProp,\n resizeConfig: resizeConfigProp,\n dropConfig: dropConfigProp,\n positionStrategy = defaultPositionStrategy,\n compactor: compactorProp,\n\n // Layout data\n layout: propsLayout = [],\n droppingItem: droppingItemProp,\n\n // Container props\n autoSize = true,\n className = \"\",\n style = {},\n innerRef,\n\n // Callbacks\n onLayoutChange = noop,\n onDragStart: onDragStartProp = noop,\n onDrag: onDragProp = noop,\n onDragStop: onDragStopProp = noop,\n onResizeStart: onResizeStartProp = noop,\n onResize: onResizeProp = noop,\n onResizeStop: onResizeStopProp = noop,\n onDrop: onDropProp = noop,\n onDropDragOver: onDropDragOverProp = noop\n } = props;\n\n // Resolve config interfaces with defaults\n const gridConfig: GridConfig = useMemo(\n () => ({ ...defaultGridConfig, ...gridConfigProp }),\n [gridConfigProp]\n );\n const dragConfig: DragConfig = useMemo(\n () => ({ ...defaultDragConfig, ...dragConfigProp }),\n [dragConfigProp]\n );\n const resizeConfig: ResizeConfig = useMemo(\n () => ({ ...defaultResizeConfig, ...resizeConfigProp }),\n [resizeConfigProp]\n );\n const dropConfig: DropConfig = useMemo(\n () => ({ ...defaultDropConfig, ...dropConfigProp }),\n [dropConfigProp]\n );\n\n // Destructure resolved configs for convenience\n const { cols, rowHeight, maxRows, margin, containerPadding } = gridConfig;\n const {\n enabled: isDraggable,\n bounded: isBounded,\n handle: draggableHandle,\n cancel: draggableCancel\n } = dragConfig;\n const {\n enabled: isResizable,\n handles: resizeHandles,\n handleComponent: resizeHandle\n } = resizeConfig;\n const { enabled: isDroppable, defaultItem: defaultDropItem } = dropConfig;\n\n // Get compactor (use provided or get from type)\n const compactor = compactorProp ?? getCompactor(\"vertical\");\n const compactType = compactor.type;\n const allowOverlap = compactor.allowOverlap;\n const preventCollision = compactor.preventCollision ?? false;\n\n // Resolve dropping item - memoized to avoid unstable reference in useCallback dependencies\n const droppingItem = useMemo(\n () =>\n droppingItemProp ?? {\n i: \"__dropping-elem__\",\n ...defaultDropItem\n },\n [droppingItemProp, defaultDropItem]\n );\n\n // Position strategy values\n const useCSSTransforms = positionStrategy.type === \"transform\";\n const transformScale = positionStrategy.scale;\n\n const effectiveContainerPadding = containerPadding ?? margin;\n\n // State\n const [mounted, setMounted] = useState(false);\n const [layout, setLayout] = useState<Layout>(() =>\n synchronizeLayoutWithChildren(\n propsLayout,\n children,\n cols,\n compactType,\n allowOverlap\n )\n );\n const [activeDrag, setActiveDrag] = useState<LayoutItem | null>(null);\n const [resizing, setResizing] = useState(false);\n const [droppingDOMNode, setDroppingDOMNode] = useState<ReactElement | null>(\n null\n );\n const [droppingPosition, setDroppingPosition] = useState<\n DroppingPosition | undefined\n >();\n\n // Refs for tracking previous state\n const oldDragItemRef = useRef<LayoutItem | null>(null);\n const oldResizeItemRef = useRef<LayoutItem | null>(null);\n const oldLayoutRef = useRef<Layout | null>(null);\n const dragEnterCounterRef = useRef(0);\n const prevLayoutRef = useRef<Layout>(layout);\n const prevPropsLayoutRef = useRef<Layout>(propsLayout);\n const prevChildrenRef = useRef<React.ReactNode>(children);\n const prevCompactTypeRef = useRef<CompactType>(compactType);\n\n // Mount effect - call onLayoutChange with initial layout if it differs from props\n useEffect(() => {\n setMounted(true);\n // Possibly call back with layout on mount. This should be done after correcting the layout width\n // to ensure we don't rerender with the wrong width.\n if (!deepEqual(layout, propsLayout)) {\n onLayoutChange(layout);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // Only run on mount\n\n // Sync layout from props\n useEffect(() => {\n if (activeDrag) return; // Don't update during drag\n\n const layoutChanged = !deepEqual(propsLayout, prevPropsLayoutRef.current);\n const childrenChanged = !childrenEqual(children, prevChildrenRef.current);\n const compactTypeChanged = compactType !== prevCompactTypeRef.current;\n\n if (layoutChanged || childrenChanged || compactTypeChanged) {\n const baseLayout = layoutChanged ? propsLayout : layout;\n const newLayout = synchronizeLayoutWithChildren(\n baseLayout,\n children,\n cols,\n compactType,\n allowOverlap\n );\n setLayout(newLayout);\n }\n\n prevPropsLayoutRef.current = propsLayout;\n prevChildrenRef.current = children;\n prevCompactTypeRef.current = compactType;\n }, [\n propsLayout,\n children,\n cols,\n compactType,\n allowOverlap,\n activeDrag,\n layout\n ]);\n\n // Layout change callback\n useEffect(() => {\n if (!activeDrag && !deepEqual(layout, prevLayoutRef.current)) {\n prevLayoutRef.current = layout;\n onLayoutChange(layout);\n }\n }, [layout, activeDrag, onLayoutChange]);\n\n // ============================================================================\n // Container Height\n // ============================================================================\n\n const containerHeight = useMemo((): string | undefined => {\n if (!autoSize) return undefined;\n const nbRow = bottom(layout);\n const containerPaddingY = effectiveContainerPadding[1];\n return (\n nbRow * rowHeight + (nbRow - 1) * margin[1] + containerPaddingY * 2 + \"px\"\n );\n }, [autoSize, layout, rowHeight, margin, effectiveContainerPadding]);\n\n // ============================================================================\n // Drag Handlers\n // ============================================================================\n\n const onDragStart = useCallback(\n (i: string, _x: number, _y: number, data: GridDragEvent) => {\n const l = getLayoutItem(layout, i);\n if (!l) return;\n\n const placeholder: LayoutItem = {\n w: l.w,\n h: l.h,\n x: l.x,\n y: l.y,\n i\n };\n\n oldDragItemRef.current = cloneLayoutItem(l);\n oldLayoutRef.current = layout;\n setActiveDrag(placeholder);\n\n onDragStartProp(layout, l, l, null, data.e, data.node);\n },\n [layout, onDragStartProp]\n );\n\n const onDrag = useCallback(\n (i: string, x: number, y: number, data: GridDragEvent) => {\n const oldDragItem = oldDragItemRef.current;\n const l = getLayoutItem(layout, i);\n if (!l) return;\n\n const placeholder: LayoutItem = {\n w: l.w,\n h: l.h,\n x: l.x,\n y: l.y,\n i\n };\n\n // Move the element\n const newLayout = moveElement(\n layout,\n l,\n x,\n y,\n true,\n preventCollision,\n compactType,\n cols,\n allowOverlap\n );\n\n onDragProp(newLayout, oldDragItem, l, placeholder, data.e, data.node);\n\n setLayout(\n allowOverlap ? newLayout : compact(newLayout, compactType, cols)\n );\n setActiveDrag(placeholder);\n },\n [layout, preventCollision, compactType, cols, allowOverlap, onDragProp]\n );\n\n const onDragStop = useCallback(\n (i: string, x: number, y: number, data: GridDragEvent) => {\n if (!activeDrag) return;\n\n const oldDragItem = oldDragItemRef.current;\n const l = getLayoutItem(layout, i);\n if (!l) return;\n\n const newLayout = moveElement(\n layout,\n l,\n x,\n y,\n true,\n preventCollision,\n compactType,\n cols,\n allowOverlap\n );\n\n const finalLayout = allowOverlap\n ? newLayout\n : compact(newLayout, compactType, cols);\n\n onDragStopProp(finalLayout, oldDragItem, l, null, data.e, data.node);\n\n const oldLayout = oldLayoutRef.current;\n oldDragItemRef.current = null;\n oldLayoutRef.current = null;\n setActiveDrag(null);\n setLayout(finalLayout);\n\n if (oldLayout && !deepEqual(oldLayout, finalLayout)) {\n onLayoutChange(finalLayout);\n }\n },\n [\n activeDrag,\n layout,\n preventCollision,\n compactType,\n cols,\n allowOverlap,\n onDragStopProp,\n onLayoutChange\n ]\n );\n\n // ============================================================================\n // Resize Handlers\n // ============================================================================\n\n const onResizeStart = useCallback(\n (i: string, _w: number, _h: number, data: GridResizeEvent) => {\n const l = getLayoutItem(layout, i);\n if (!l) return;\n\n oldResizeItemRef.current = cloneLayoutItem(l);\n oldLayoutRef.current = layout;\n setResizing(true);\n\n onResizeStartProp(layout, l, l, null, data.e, data.node);\n },\n [layout, onResizeStartProp]\n );\n\n const onResize = useCallback(\n (i: string, w: number, h: number, data: GridResizeEvent) => {\n const oldResizeItem = oldResizeItemRef.current;\n const { handle } = data;\n\n let shouldMoveItem = false;\n let newX: number | undefined;\n let newY: number | undefined;\n\n const [newLayout, l] = withLayoutItem(layout, i, item => {\n newX = item.x;\n newY = item.y;\n\n // Handle corner/edge resizing that affects position\n if ([\"sw\", \"w\", \"nw\", \"n\", \"ne\"].includes(handle)) {\n if ([\"sw\", \"nw\", \"w\"].includes(handle)) {\n newX = item.x + (item.w - w);\n w = item.x !== newX && newX < 0 ? item.w : w;\n newX = newX < 0 ? 0 : newX;\n }\n\n if ([\"ne\", \"n\", \"nw\"].includes(handle)) {\n newY = item.y + (item.h - h);\n h = item.y !== newY && newY < 0 ? item.h : h;\n newY = newY < 0 ? 0 : newY;\n }\n\n shouldMoveItem = true;\n }\n\n // Check for collisions if preventCollision is enabled\n if (preventCollision && !allowOverlap) {\n const collisions = getAllCollisions(layout, {\n ...item,\n w,\n h,\n x: newX ?? item.x,\n y: newY ?? item.y\n }).filter(layoutItem => layoutItem.i !== item.i);\n\n if (collisions.length > 0) {\n newY = item.y;\n h = item.h;\n newX = item.x;\n w = item.w;\n shouldMoveItem = false;\n }\n }\n\n (item as Mutable<LayoutItem>).w = w;\n (item as Mutable<LayoutItem>).h = h;\n\n return item;\n });\n\n if (!l) return;\n\n let finalLayout = newLayout;\n if (shouldMoveItem && newX !== undefined && newY !== undefined) {\n finalLayout = moveElement(\n newLayout,\n l,\n newX,\n newY,\n true,\n preventCollision,\n compactType,\n cols,\n allowOverlap\n );\n }\n\n const placeholder: LayoutItem = {\n w: l.w,\n h: l.h,\n x: l.x,\n y: l.y,\n i,\n static: true\n };\n\n onResizeProp(\n finalLayout,\n oldResizeItem,\n l,\n placeholder,\n data.e,\n data.node\n );\n\n setLayout(\n allowOverlap ? finalLayout : compact(finalLayout, compactType, cols)\n );\n setActiveDrag(placeholder);\n },\n [layout, preventCollision, allowOverlap, compactType, cols, onResizeProp]\n );\n\n const onResizeStop = useCallback(\n (i: string, _w: number, _h: number, data: GridResizeEvent) => {\n const oldResizeItem = oldResizeItemRef.current;\n const l = getLayoutItem(layout, i);\n\n const finalLayout = allowOverlap\n ? layout\n : compact(layout, compactType, cols);\n\n onResizeStopProp(\n finalLayout,\n oldResizeItem,\n l ?? null,\n null,\n data.e,\n data.node\n );\n\n const oldLayout = oldLayoutRef.current;\n oldResizeItemRef.current = null;\n oldLayoutRef.current = null;\n setActiveDrag(null);\n setResizing(false);\n setLayout(finalLayout);\n\n if (oldLayout && !deepEqual(oldLayout, finalLayout)) {\n onLayoutChange(finalLayout);\n }\n },\n [layout, allowOverlap, compactType, cols, onResizeStopProp, onLayoutChange]\n );\n\n // ============================================================================\n // Drop Handlers\n // ============================================================================\n\n const removeDroppingPlaceholder = useCallback(() => {\n const newLayout = compact(\n layout.filter(l => l.i !== droppingItem.i),\n compactType,\n cols,\n allowOverlap\n );\n\n setLayout(newLayout);\n setDroppingDOMNode(null);\n setActiveDrag(null);\n setDroppingPosition(undefined);\n }, [layout, droppingItem.i, compactType, cols, allowOverlap]);\n\n const handleDragOver = useCallback(\n (e: ReactDragEvent): void | false => {\n e.preventDefault();\n e.stopPropagation();\n\n // Firefox hack\n if (\n isFirefox &&\n !(e.nativeEvent.target as HTMLElement)?.classList.contains(\n layoutClassName\n )\n ) {\n return false;\n }\n\n const onDragOverResult = onDropDragOverProp(e);\n if (onDragOverResult === false) {\n if (droppingDOMNode) {\n removeDroppingPlaceholder();\n }\n return false;\n }\n\n const finalDroppingItem = { ...droppingItem, ...onDragOverResult };\n const gridRect = e.currentTarget.getBoundingClientRect();\n const layerX = e.clientX - gridRect.left;\n const layerY = e.clientY - gridRect.top;\n\n const newDroppingPosition: DroppingPosition = {\n left: layerX / transformScale,\n top: layerY / transformScale,\n e: e.nativeEvent\n };\n\n if (!droppingDOMNode) {\n const positionParams: PositionParams = {\n cols,\n margin: margin as [number, number],\n maxRows,\n rowHeight,\n containerWidth: width,\n containerPadding: effectiveContainerPadding as [number, number]\n };\n\n const calculatedPosition = calcXY(\n positionParams,\n layerY,\n layerX,\n finalDroppingItem.w,\n finalDroppingItem.h\n );\n\n setDroppingDOMNode(<div key={finalDroppingItem.i} />);\n setDroppingPosition(newDroppingPosition);\n setLayout([\n ...layout,\n {\n ...finalDroppingItem,\n x: calculatedPosition.x,\n y: calculatedPosition.y,\n static: false,\n isDraggable: true\n }\n ]);\n } else if (droppingPosition) {\n const shouldUpdate =\n droppingPosition.left !== layerX || droppingPosition.top !== layerY;\n if (shouldUpdate) {\n setDroppingPosition(newDroppingPosition);\n }\n }\n },\n [\n droppingDOMNode,\n droppingPosition,\n droppingItem,\n onDropDragOverProp,\n removeDroppingPlaceholder,\n transformScale,\n cols,\n margin,\n maxRows,\n rowHeight,\n width,\n effectiveContainerPadding,\n layout\n ]\n );\n\n const handleDragLeave = useCallback(\n (e: ReactDragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragEnterCounterRef.current--;\n\n if (dragEnterCounterRef.current === 0) {\n removeDroppingPlaceholder();\n }\n },\n [removeDroppingPlaceholder]\n );\n\n const handleDragEnter = useCallback((e: ReactDragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragEnterCounterRef.current++;\n }, []);\n\n const handleDrop = useCallback(\n (e: ReactDragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const item = layout.find(l => l.i === droppingItem.i);\n dragEnterCounterRef.current = 0;\n removeDroppingPlaceholder();\n onDropProp(layout, item, e.nativeEvent);\n },\n [layout, droppingItem.i, removeDroppingPlaceholder, onDropProp]\n );\n\n // ============================================================================\n // Render Helpers\n // ============================================================================\n\n const processGridItem = useCallback(\n (\n child: ReactElement,\n isDroppingItem?: boolean\n ): ReactElement | null | undefined => {\n if (!child || !child.key) return null;\n\n const l = getLayoutItem(layout, String(child.key));\n if (!l) return null;\n\n const draggable =\n typeof l.isDraggable === \"boolean\"\n ? l.isDraggable\n : !l.static && isDraggable;\n const resizable =\n typeof l.isResizable === \"boolean\"\n ? l.isResizable\n : !l.static && isResizable;\n const resizeHandlesOptions = l.resizeHandles || [...resizeHandles];\n const bounded = draggable && isBounded && l.isBounded !== false;\n\n // Cast resize handle to expected type (function signature is compatible)\n const resizeHandleElement = resizeHandle as ResizeHandle | undefined;\n\n return (\n <GridItem\n key={l.i}\n containerWidth={width}\n cols={cols}\n margin={margin}\n containerPadding={effectiveContainerPadding}\n maxRows={maxRows}\n rowHeight={rowHeight}\n cancel={draggableCancel}\n handle={draggableHandle}\n onDragStart={onDragStart}\n onDrag={onDrag}\n onDragStop={onDragStop}\n onResizeStart={onResizeStart}\n onResize={onResize}\n onResizeStop={onResizeStop}\n isDraggable={draggable}\n isResizable={resizable}\n isBounded={bounded}\n useCSSTransforms={useCSSTransforms && mounted}\n usePercentages={!mounted}\n transformScale={transformScale}\n w={l.w}\n h={l.h}\n x={l.x}\n y={l.y}\n i={l.i}\n minH={l.minH}\n minW={l.minW}\n maxH={l.maxH}\n maxW={l.maxW}\n static={l.static}\n droppingPosition={isDroppingItem ? droppingPosition : undefined}\n resizeHandles={resizeHandlesOptions}\n resizeHandle={resizeHandleElement}\n >\n {child}\n </GridItem>\n );\n },\n [\n layout,\n width,\n cols,\n margin,\n effectiveContainerPadding,\n maxRows,\n rowHeight,\n draggableCancel,\n draggableHandle,\n onDragStart,\n onDrag,\n onDragStop,\n onResizeStart,\n onResize,\n onResizeStop,\n isDraggable,\n isResizable,\n isBounded,\n useCSSTransforms,\n mounted,\n transformScale,\n droppingPosition,\n resizeHandles,\n resizeHandle\n ]\n );\n\n const renderPlaceholder = (): ReactElement | null => {\n if (!activeDrag) return null;\n\n return (\n <GridItem\n w={activeDrag.w}\n h={activeDrag.h}\n x={activeDrag.x}\n y={activeDrag.y}\n i={activeDrag.i}\n className={`react-grid-placeholder ${resizing ? \"placeholder-resizing\" : \"\"}`}\n containerWidth={width}\n cols={cols}\n margin={margin}\n containerPadding={effectiveContainerPadding}\n maxRows={maxRows}\n rowHeight={rowHeight}\n isDraggable={false}\n isResizable={false}\n isBounded={false}\n useCSSTransforms={useCSSTransforms}\n transformScale={transformScale}\n >\n <div />\n </GridItem>\n );\n };\n\n // ============================================================================\n // Render\n // ============================================================================\n\n const mergedClassName = clsx(layoutClassName, className);\n const mergedStyle: CSSProperties = {\n height: containerHeight,\n ...style\n };\n\n return (\n <div\n ref={innerRef}\n className={mergedClassName}\n style={mergedStyle}\n onDrop={isDroppable ? handleDrop : undefined}\n onDragLeave={isDroppable ? handleDragLeave : undefined}\n onDragEnter={isDroppable ? handleDragEnter : undefined}\n onDragOver={isDroppable ? handleDragOver : undefined}\n >\n {React.Children.map(children, child => {\n if (!React.isValidElement(child)) return null;\n return processGridItem(child);\n })}\n {isDroppable && droppingDOMNode && processGridItem(droppingDOMNode, true)}\n {renderPlaceholder()}\n </div>\n );\n}\n\nexport default GridLayout;\n","/**\n * ResponsiveGridLayout component\n *\n * A responsive grid layout that automatically adjusts to container width.\n */\n\nimport React, {\n useState,\n useEffect,\n useRef,\n useMemo,\n useCallback,\n type ReactElement\n} from \"react\";\nimport { deepEqual } from \"fast-equals\";\n\nimport type {\n Layout,\n LayoutItem,\n Breakpoint,\n Breakpoints,\n ResponsiveLayouts,\n CompactType,\n Compactor\n} from \"../../core/types.js\";\nimport { cloneLayout, correctBounds } from \"../../core/layout.js\";\nimport {\n getBreakpointFromWidth,\n getColsFromBreakpoint,\n findOrGenerateResponsiveLayout,\n getIndentationValue\n} from \"../../core/responsive.js\";\nimport { compact } from \"../../core/compact-compat.js\";\nimport { getCompactor } from \"../../core/compactors.js\";\nimport { bottom } from \"../../core/layout.js\";\n\nimport { GridLayout, type GridLayoutProps } from \"./GridLayout.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ResponsiveGridLayoutProps<\n B extends Breakpoint = string\n> extends Omit<GridLayoutProps, \"gridConfig\" | \"layout\" | \"onLayoutChange\"> {\n /** Current breakpoint (optional, auto-detected from width) */\n breakpoint?: B;\n /** Breakpoint definitions (name → min-width) */\n breakpoints?: Breakpoints<B>;\n /** Column counts per breakpoint */\n cols?: Breakpoints<B>;\n /** Layouts for each breakpoint */\n layouts?: ResponsiveLayouts<B>;\n /** Row height (default: 150) */\n rowHeight?: number;\n /** Maximum rows (default: Infinity) */\n maxRows?: number;\n /** Margin between items - can be fixed or per-breakpoint */\n margin?:\n | readonly [number, number]\n | Partial<Record<B, readonly [number, number]>>;\n /** Container padding - can be fixed or per-breakpoint */\n containerPadding?:\n | readonly [number, number]\n | Partial<Record<B, readonly [number, number] | null>>\n | null;\n /** Compactor for layout compaction */\n compactor?: Compactor;\n /** Called when breakpoint changes */\n onBreakpointChange?: (newBreakpoint: B, cols: number) => void;\n /** Called when layout changes */\n onLayoutChange?: (layout: Layout, layouts: ResponsiveLayouts<B>) => void;\n /** Called when width changes */\n onWidthChange?: (\n containerWidth: number,\n margin: readonly [number, number],\n cols: number,\n containerPadding: readonly [number, number] | null\n ) => void;\n}\n\n// ============================================================================\n// Default Values\n// ============================================================================\n\nconst DEFAULT_BREAKPOINTS: Breakpoints<string> = {\n lg: 1200,\n md: 996,\n sm: 768,\n xs: 480,\n xxs: 0\n};\n\nconst DEFAULT_COLS: Breakpoints<string> = {\n lg: 12,\n md: 10,\n sm: 6,\n xs: 4,\n xxs: 2\n};\n\nconst noop = () => {};\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Synchronize layout with children\n */\nfunction synchronizeLayoutWithChildren(\n initialLayout: Layout,\n children: React.ReactNode,\n cols: number,\n compactType: CompactType,\n allowOverlap: boolean\n): Layout {\n const layout: LayoutItem[] = [];\n\n React.Children.forEach(children, child => {\n if (!React.isValidElement(child) || child.key === null) return;\n const key = String(child.key);\n\n // Find existing layout item\n const existingItem = initialLayout.find(l => l.i === key);\n\n if (existingItem) {\n layout.push({\n ...existingItem,\n i: key\n });\n } else {\n // Create new layout item from child data-grid prop\n const childProps = child.props as { \"data-grid\"?: Partial<LayoutItem> };\n const dataGrid = childProps[\"data-grid\"];\n\n if (dataGrid) {\n layout.push({\n i: key,\n x: dataGrid.x ?? 0,\n y: dataGrid.y ?? 0,\n w: dataGrid.w ?? 1,\n h: dataGrid.h ?? 1,\n minW: dataGrid.minW,\n maxW: dataGrid.maxW,\n minH: dataGrid.minH,\n maxH: dataGrid.maxH,\n static: dataGrid.static,\n isDraggable: dataGrid.isDraggable,\n isResizable: dataGrid.isResizable,\n resizeHandles: dataGrid.resizeHandles,\n isBounded: dataGrid.isBounded\n });\n } else {\n // Create default layout item\n layout.push({\n i: key,\n x: 0,\n y: bottom(layout),\n w: 1,\n h: 1\n });\n }\n }\n });\n\n // Correct bounds and compact\n const corrected = correctBounds(layout, { cols });\n return compact(corrected, compactType, cols, allowOverlap);\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\n/**\n * ResponsiveGridLayout - A responsive grid layout that adjusts to container width.\n */\nexport function ResponsiveGridLayout<B extends Breakpoint = string>(\n props: ResponsiveGridLayoutProps<B>\n): ReactElement {\n const {\n children,\n width,\n breakpoint: propBreakpoint,\n breakpoints = DEFAULT_BREAKPOINTS as Breakpoints<B>,\n cols: colsConfig = DEFAULT_COLS as Breakpoints<B>,\n layouts: propsLayouts = {} as ResponsiveLayouts<B>,\n rowHeight = 150,\n maxRows = Infinity,\n margin: propMargin = [10, 10] as readonly [number, number],\n containerPadding: propContainerPadding = null,\n compactor: compactorProp,\n onBreakpointChange = noop,\n onLayoutChange = noop,\n onWidthChange = noop,\n ...restProps\n } = props;\n\n // Get compactor (use provided or default to vertical)\n const compactor = compactorProp ?? getCompactor(\"vertical\");\n const compactType = compactor.type;\n const allowOverlap = compactor.allowOverlap;\n\n // Calculate initial state\n const initialBreakpoint = useMemo(() => {\n return propBreakpoint ?? getBreakpointFromWidth(breakpoints, width);\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const initialCols = useMemo(() => {\n return getColsFromBreakpoint(initialBreakpoint, colsConfig);\n }, [initialBreakpoint, colsConfig]);\n\n const initialLayout = useMemo(() => {\n return findOrGenerateResponsiveLayout(\n propsLayouts,\n breakpoints,\n initialBreakpoint,\n initialBreakpoint,\n initialCols,\n compactType\n );\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // State\n const [breakpoint, setBreakpoint] = useState<B>(initialBreakpoint);\n const [cols, setCols] = useState<number>(initialCols);\n const [layout, setLayout] = useState<Layout>(initialLayout);\n const [layouts, setLayouts] = useState<ResponsiveLayouts<B>>(propsLayouts);\n\n // Refs for tracking changes\n const prevWidthRef = useRef(width);\n const prevBreakpointRef = useRef(propBreakpoint);\n const prevBreakpointsRef = useRef(breakpoints);\n const prevColsRef = useRef(colsConfig);\n const prevLayoutsRef = useRef(propsLayouts);\n const prevCompactTypeRef = useRef(compactType);\n\n // Sync layouts from props\n useEffect(() => {\n if (!deepEqual(propsLayouts, prevLayoutsRef.current)) {\n const newLayout = findOrGenerateResponsiveLayout(\n propsLayouts,\n breakpoints,\n breakpoint,\n breakpoint,\n cols,\n compactType\n );\n setLayout(newLayout);\n setLayouts(propsLayouts);\n prevLayoutsRef.current = propsLayouts;\n }\n }, [propsLayouts, breakpoints, breakpoint, cols, compactType]);\n\n // Handle compactType changes\n useEffect(() => {\n if (compactType !== prevCompactTypeRef.current) {\n // Re-compact the current layout with the new compactType\n const newLayout = compact(\n cloneLayout(layout),\n compactType,\n cols,\n allowOverlap\n );\n const newLayouts = {\n ...layouts,\n [breakpoint]: newLayout\n } as ResponsiveLayouts<B>;\n\n setLayout(newLayout);\n setLayouts(newLayouts);\n onLayoutChange(newLayout, newLayouts);\n prevCompactTypeRef.current = compactType;\n }\n }, [\n compactType,\n layout,\n cols,\n allowOverlap,\n layouts,\n breakpoint,\n onLayoutChange\n ]);\n\n // Handle width changes\n useEffect(() => {\n const widthChanged = width !== prevWidthRef.current;\n const breakpointPropChanged = propBreakpoint !== prevBreakpointRef.current;\n const breakpointsChanged = !deepEqual(\n breakpoints,\n prevBreakpointsRef.current\n );\n const colsChanged = !deepEqual(colsConfig, prevColsRef.current);\n\n if (\n widthChanged ||\n breakpointPropChanged ||\n breakpointsChanged ||\n colsChanged\n ) {\n const newBreakpoint =\n propBreakpoint ?? getBreakpointFromWidth(breakpoints, width);\n const newCols = getColsFromBreakpoint(newBreakpoint, colsConfig);\n const lastBreakpoint = breakpoint;\n\n // Breakpoint change\n if (\n lastBreakpoint !== newBreakpoint ||\n breakpointsChanged ||\n colsChanged\n ) {\n const newLayouts = { ...layouts } as ResponsiveLayouts<B>;\n\n // Preserve current layout if not in new layouts\n if (!newLayouts[lastBreakpoint]) {\n (newLayouts as Record<B, Layout>)[lastBreakpoint] =\n cloneLayout(layout);\n }\n\n // Find or generate new layout\n let newLayout = findOrGenerateResponsiveLayout(\n newLayouts,\n breakpoints,\n newBreakpoint,\n lastBreakpoint,\n newCols,\n compactType\n );\n\n // Sync with children\n newLayout = synchronizeLayoutWithChildren(\n newLayout,\n children,\n newCols,\n compactType,\n allowOverlap\n );\n\n // Store new layout\n (newLayouts as Record<B, Layout>)[newBreakpoint] = newLayout;\n\n // Update state\n setBreakpoint(newBreakpoint);\n setCols(newCols);\n setLayout(newLayout);\n setLayouts(newLayouts);\n\n // Callbacks\n onBreakpointChange(newBreakpoint, newCols);\n onLayoutChange(newLayout, newLayouts);\n }\n\n // Get margin and padding for callback\n const currentMargin = getIndentationValue(\n propMargin as Parameters<typeof getIndentationValue>[0],\n newBreakpoint\n );\n const currentPadding = propContainerPadding\n ? getIndentationValue(\n propContainerPadding as Parameters<typeof getIndentationValue>[0],\n newBreakpoint\n )\n : null;\n\n // Width change callback\n onWidthChange(width, currentMargin, newCols, currentPadding);\n\n // Update refs\n prevWidthRef.current = width;\n prevBreakpointRef.current = propBreakpoint;\n prevBreakpointsRef.current = breakpoints;\n prevColsRef.current = colsConfig;\n }\n }, [\n width,\n propBreakpoint,\n breakpoints,\n colsConfig,\n breakpoint,\n cols,\n layout,\n layouts,\n children,\n compactType,\n allowOverlap,\n propMargin,\n propContainerPadding,\n onBreakpointChange,\n onLayoutChange,\n onWidthChange\n ]);\n\n // Handle layout change from GridLayout\n const handleLayoutChange = useCallback(\n (newLayout: Layout) => {\n const newLayouts = {\n ...layouts,\n [breakpoint]: newLayout\n } as ResponsiveLayouts<B>;\n\n setLayout(newLayout);\n setLayouts(newLayouts);\n onLayoutChange(newLayout, newLayouts);\n },\n [layouts, breakpoint, onLayoutChange]\n );\n\n // Get margin and padding for current breakpoint\n const currentMargin = useMemo(() => {\n return getIndentationValue(\n propMargin as Parameters<typeof getIndentationValue>[0],\n breakpoint\n );\n }, [propMargin, breakpoint]);\n\n const currentContainerPadding = useMemo(() => {\n if (propContainerPadding === null) return null;\n return getIndentationValue(\n propContainerPadding as Parameters<typeof getIndentationValue>[0],\n breakpoint\n );\n }, [propContainerPadding, breakpoint]);\n\n // Build grid config for current breakpoint\n const gridConfig = useMemo(\n () => ({\n cols,\n rowHeight,\n maxRows,\n margin: currentMargin,\n containerPadding: currentContainerPadding\n }),\n [cols, rowHeight, maxRows, currentMargin, currentContainerPadding]\n );\n\n return (\n <GridLayout\n {...restProps}\n width={width}\n gridConfig={gridConfig}\n compactor={compactor}\n onLayoutChange={handleLayoutChange}\n layout={layout}\n >\n {children}\n </GridLayout>\n );\n}\n\nexport default ResponsiveGridLayout;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/react/hooks/useContainerWidth.ts","../src/react/hooks/useGridLayout.ts","../src/react/hooks/useResponsiveLayout.ts"],"names":["useRef","useState","useCallback","useEffect","useMemo","layout","deepEqual"],"mappings":"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","file":"chunk-ZCXE6SR5.mjs","sourcesContent":["/**\n * useContainerWidth hook\n *\n * Observes container width using ResizeObserver and provides\n * reactive width updates for responsive layouts.\n */\n\nimport {\n useState,\n useEffect,\n useRef,\n useCallback,\n type RefObject\n} from \"react\";\n\nexport interface UseContainerWidthOptions {\n /**\n * If true, delays initial render until width is measured.\n * Useful for SSR or when you need accurate initial measurements.\n */\n measureBeforeMount?: boolean;\n\n /**\n * Initial width to use before measurement.\n * Defaults to 1280.\n */\n initialWidth?: number;\n}\n\nexport interface UseContainerWidthResult {\n /**\n * Current container width in pixels.\n */\n width: number;\n\n /**\n * Whether the container has been measured at least once.\n */\n mounted: boolean;\n\n /**\n * Ref to attach to the container element.\n */\n containerRef: RefObject<HTMLDivElement | null>;\n\n /**\n * Manually trigger a width measurement.\n * Useful when the container size might change without a resize event.\n */\n measureWidth: () => void;\n}\n\n/**\n * Hook to observe and track container width.\n *\n * Replaces the WidthProvider HOC with a more composable approach.\n *\n * @example\n * ```tsx\n * function MyGrid() {\n * const { width, containerRef, mounted } = useContainerWidth();\n *\n * return (\n * <div ref={containerRef}>\n * {mounted && <GridLayout width={width} {...props} />}\n * </div>\n * );\n * }\n * ```\n */\nexport function useContainerWidth(\n options: UseContainerWidthOptions = {}\n): UseContainerWidthResult {\n const { measureBeforeMount = false, initialWidth = 1280 } = options;\n\n const [width, setWidth] = useState(initialWidth);\n const [mounted, setMounted] = useState(!measureBeforeMount);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const measureWidth = useCallback(() => {\n const node = containerRef.current;\n if (node) {\n const newWidth = node.offsetWidth;\n setWidth(newWidth);\n if (!mounted) {\n setMounted(true);\n }\n }\n }, [mounted]);\n\n useEffect(() => {\n const node = containerRef.current;\n if (!node) return;\n\n // Initial measurement\n measureWidth();\n\n // Set up ResizeObserver\n if (typeof ResizeObserver !== \"undefined\") {\n observerRef.current = new ResizeObserver(entries => {\n const entry = entries[0];\n if (entry) {\n // Use contentRect.width for consistent measurements\n const newWidth = entry.contentRect.width;\n setWidth(newWidth);\n }\n });\n\n observerRef.current.observe(node);\n }\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n };\n }, [measureWidth]);\n\n return {\n width,\n mounted,\n containerRef,\n measureWidth\n };\n}\n\nexport default useContainerWidth;\n","/**\n * useGridLayout hook\n *\n * Core hook for managing grid layout state, including drag, resize, and drop operations.\n * This extracts the state management logic from ReactGridLayout into a reusable hook.\n */\n\nimport { useState, useCallback, useMemo, useRef, useEffect } from \"react\";\nimport { deepEqual } from \"fast-equals\";\nimport type {\n Layout,\n LayoutItem,\n CompactType,\n DroppingPosition,\n Compactor,\n Mutable\n} from \"../../core/types.js\";\nimport {\n cloneLayout,\n cloneLayoutItem,\n moveElement,\n correctBounds,\n bottom,\n getLayoutItem\n} from \"../../core/layout.js\";\nimport { compact } from \"../../core/compact-compat.js\";\nimport { getCompactor } from \"../../core/compactors.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DragState {\n /** Currently dragging item placeholder */\n activeDrag: LayoutItem | null;\n /** Original item before drag started */\n oldDragItem: LayoutItem | null;\n /** Layout before drag started */\n oldLayout: Layout | null;\n}\n\nexport interface ResizeState {\n /** Whether a resize is in progress */\n resizing: boolean;\n /** Original item before resize started */\n oldResizeItem: LayoutItem | null;\n /** Layout before resize started */\n oldLayout: Layout | null;\n}\n\nexport interface DropState {\n /** DOM node for the dropping placeholder */\n droppingDOMNode: React.ReactElement | null;\n /** Current drop position */\n droppingPosition: DroppingPosition | null;\n}\n\nexport interface UseGridLayoutOptions {\n /** Initial layout */\n layout: Layout;\n /** Number of columns */\n cols: number;\n /** Compaction type: 'vertical', 'horizontal', or null */\n compactType?: CompactType;\n /** Allow items to overlap */\n allowOverlap?: boolean;\n /** Prevent collisions when moving items */\n preventCollision?: boolean;\n /** Called when layout changes */\n onLayoutChange?: (layout: Layout) => void;\n}\n\nexport interface UseGridLayoutResult {\n /** Current layout */\n layout: Layout;\n /** Set layout directly */\n setLayout: (layout: Layout) => void;\n /** Drag state */\n dragState: DragState;\n /** Resize state */\n resizeState: ResizeState;\n /** Drop state */\n dropState: DropState;\n /** Start dragging an item */\n onDragStart: (itemId: string, x: number, y: number) => LayoutItem | null;\n /** Update drag position */\n onDrag: (itemId: string, x: number, y: number) => void;\n /** Stop dragging */\n onDragStop: (itemId: string, x: number, y: number) => void;\n /** Start resizing an item */\n onResizeStart: (itemId: string) => LayoutItem | null;\n /** Update resize dimensions */\n onResize: (\n itemId: string,\n w: number,\n h: number,\n x?: number,\n y?: number\n ) => void;\n /** Stop resizing */\n onResizeStop: (itemId: string, w: number, h: number) => void;\n /** Start dropping (external drag-in) */\n onDropDragOver: (\n droppingItem: LayoutItem,\n position: DroppingPosition\n ) => void;\n /** Update drop position */\n onDropDragLeave: () => void;\n /** Complete drop */\n onDrop: (droppingItem: LayoutItem) => void;\n /** Container height in rows */\n containerHeight: number;\n /** Whether any drag/resize is active */\n isInteracting: boolean;\n /** Get the compactor being used */\n compactor: Compactor;\n}\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\n/**\n * Hook for managing grid layout state.\n *\n * Handles all layout state including drag, resize, and drop operations.\n * Uses immutable updates and provides callbacks for all interactions.\n *\n * @example\n * ```tsx\n * function MyGrid() {\n * const {\n * layout,\n * onDragStart,\n * onDrag,\n * onDragStop,\n * containerHeight\n * } = useGridLayout({\n * layout: initialLayout,\n * cols: 12,\n * compactType: 'vertical'\n * });\n *\n * return (\n * <div style={{ height: containerHeight }}>\n * {layout.map(item => (\n * <GridItem\n * key={item.i}\n * {...item}\n * onDragStart={() => onDragStart(item.i, item.x, item.y)}\n * />\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useGridLayout(\n options: UseGridLayoutOptions\n): UseGridLayoutResult {\n const {\n layout: propsLayout,\n cols,\n compactType = \"vertical\",\n allowOverlap = false,\n preventCollision = false,\n onLayoutChange\n } = options;\n\n // Get the appropriate compactor\n const compactor = useMemo(\n () => getCompactor(compactType, allowOverlap),\n [compactType, allowOverlap]\n );\n\n // Track if we're currently dragging to block prop updates\n const isDraggingRef = useRef(false);\n\n // Initialize layout with compaction\n const [layout, setLayoutState] = useState<Layout>(() => {\n const corrected = correctBounds(cloneLayout(propsLayout), { cols });\n return compact(corrected, compactType, cols, allowOverlap);\n });\n\n // Drag state\n const [dragState, setDragState] = useState<DragState>({\n activeDrag: null,\n oldDragItem: null,\n oldLayout: null\n });\n\n // Resize state\n const [resizeState, setResizeState] = useState<ResizeState>({\n resizing: false,\n oldResizeItem: null,\n oldLayout: null\n });\n\n // Drop state\n const [dropState, setDropState] = useState<DropState>({\n droppingDOMNode: null,\n droppingPosition: null\n });\n\n // Track previous layout for change detection\n const prevLayoutRef = useRef<Layout>(layout);\n\n // Set layout with optional compaction\n const setLayout = useCallback(\n (newLayout: Layout) => {\n const corrected = correctBounds(cloneLayout(newLayout), { cols });\n const compacted = compact(corrected, compactType, cols, allowOverlap);\n setLayoutState(compacted);\n },\n [cols, compactType, allowOverlap]\n );\n\n // Sync layout from props when not dragging\n useEffect(() => {\n if (isDraggingRef.current) return;\n\n if (!deepEqual(propsLayout, prevLayoutRef.current)) {\n setLayout(propsLayout);\n }\n }, [propsLayout, setLayout]);\n\n // Notify layout changes\n useEffect(() => {\n if (!deepEqual(layout, prevLayoutRef.current)) {\n prevLayoutRef.current = layout;\n onLayoutChange?.(layout);\n }\n }, [layout, onLayoutChange]);\n\n // ============================================================================\n // Drag Handlers\n // ============================================================================\n\n const onDragStart = useCallback(\n (itemId: string, x: number, y: number): LayoutItem | null => {\n const item = getLayoutItem(layout, itemId);\n if (!item) return null;\n\n isDraggingRef.current = true;\n\n const placeholder: LayoutItem = {\n ...cloneLayoutItem(item),\n x,\n y,\n static: false,\n moved: false\n };\n\n setDragState({\n activeDrag: placeholder,\n oldDragItem: cloneLayoutItem(item),\n oldLayout: cloneLayout(layout)\n });\n\n return placeholder;\n },\n [layout]\n );\n\n const onDrag = useCallback(\n (itemId: string, x: number, y: number) => {\n const item = getLayoutItem(layout, itemId);\n if (!item) return;\n\n // Update placeholder position\n setDragState(prev => ({\n ...prev,\n activeDrag: prev.activeDrag ? { ...prev.activeDrag, x, y } : null\n }));\n\n // Move element and update layout\n const newLayout = moveElement(\n layout,\n item,\n x,\n y,\n true, // isUserAction\n preventCollision,\n compactType,\n cols,\n allowOverlap\n );\n\n // Compact layout\n const compacted = allowOverlap\n ? newLayout\n : compact(newLayout, compactType, cols);\n\n setLayoutState(compacted);\n },\n [layout, cols, compactType, preventCollision, allowOverlap]\n );\n\n const onDragStop = useCallback(\n (itemId: string, x: number, y: number) => {\n const item = getLayoutItem(layout, itemId);\n if (!item) return;\n\n // Final move\n const newLayout = moveElement(\n layout,\n item,\n x,\n y,\n true,\n preventCollision,\n compactType,\n cols,\n allowOverlap\n );\n\n // Compact and finalize\n const compacted = compact(newLayout, compactType, cols, allowOverlap);\n\n isDraggingRef.current = false;\n\n setDragState({\n activeDrag: null,\n oldDragItem: null,\n oldLayout: null\n });\n\n setLayoutState(compacted);\n },\n [layout, cols, compactType, preventCollision, allowOverlap]\n );\n\n // ============================================================================\n // Resize Handlers\n // ============================================================================\n\n const onResizeStart = useCallback(\n (itemId: string): LayoutItem | null => {\n const item = getLayoutItem(layout, itemId);\n if (!item) return null;\n\n setResizeState({\n resizing: true,\n oldResizeItem: cloneLayoutItem(item),\n oldLayout: cloneLayout(layout)\n });\n\n return item;\n },\n [layout]\n );\n\n const onResize = useCallback(\n (itemId: string, w: number, h: number, x?: number, y?: number) => {\n const newLayout = layout.map(item => {\n if (item.i === itemId) {\n const updated: LayoutItem = {\n ...item,\n w,\n h\n };\n if (x !== undefined) (updated as Mutable<LayoutItem>).x = x;\n if (y !== undefined) (updated as Mutable<LayoutItem>).y = y;\n return updated;\n }\n return item;\n });\n\n // Correct bounds and compact\n const corrected = correctBounds(newLayout, { cols });\n const compacted = compact(corrected, compactType, cols, allowOverlap);\n\n setLayoutState(compacted);\n },\n [layout, cols, compactType, allowOverlap]\n );\n\n const onResizeStop = useCallback(\n (itemId: string, w: number, h: number) => {\n // Apply final resize\n onResize(itemId, w, h);\n\n setResizeState({\n resizing: false,\n oldResizeItem: null,\n oldLayout: null\n });\n },\n [onResize]\n );\n\n // ============================================================================\n // Drop Handlers\n // ============================================================================\n\n const onDropDragOver = useCallback(\n (droppingItem: LayoutItem, position: DroppingPosition) => {\n // Check if item already exists in layout\n const existingItem = getLayoutItem(layout, droppingItem.i);\n\n if (!existingItem) {\n // Add dropping item to layout\n const newLayout = [...layout, droppingItem];\n const corrected = correctBounds(newLayout, { cols });\n const compacted = compact(corrected, compactType, cols, allowOverlap);\n setLayoutState(compacted);\n }\n\n setDropState({\n droppingDOMNode: null, // Will be set by component\n droppingPosition: position\n });\n },\n [layout, cols, compactType, allowOverlap]\n );\n\n const onDropDragLeave = useCallback(() => {\n // Remove dropping placeholder from layout\n const newLayout = layout.filter(item => item.i !== \"__dropping-elem__\");\n setLayoutState(newLayout);\n\n setDropState({\n droppingDOMNode: null,\n droppingPosition: null\n });\n }, [layout]);\n\n const onDrop = useCallback(\n (droppingItem: LayoutItem) => {\n // Replace placeholder with actual item\n const newLayout = layout.map(item => {\n if (item.i === \"__dropping-elem__\") {\n return {\n ...item,\n i: droppingItem.i,\n static: false\n };\n }\n return item;\n });\n\n const corrected = correctBounds(newLayout, { cols });\n const compacted = compact(corrected, compactType, cols, allowOverlap);\n setLayoutState(compacted);\n\n setDropState({\n droppingDOMNode: null,\n droppingPosition: null\n });\n },\n [layout, cols, compactType, allowOverlap]\n );\n\n // ============================================================================\n // Computed Values\n // ============================================================================\n\n const containerHeight = useMemo(() => bottom(layout), [layout]);\n\n const isInteracting =\n dragState.activeDrag !== null ||\n resizeState.resizing ||\n dropState.droppingPosition !== null;\n\n return {\n layout,\n setLayout,\n dragState,\n resizeState,\n dropState,\n onDragStart,\n onDrag,\n onDragStop,\n onResizeStart,\n onResize,\n onResizeStop,\n onDropDragOver,\n onDropDragLeave,\n onDrop,\n containerHeight,\n isInteracting,\n compactor\n };\n}\n\nexport default useGridLayout;\n","/**\n * useResponsiveLayout hook\n *\n * Manages responsive breakpoints and layout generation for different screen sizes.\n * Extracts state management from ResponsiveReactGridLayout into a reusable hook.\n */\n\nimport { useState, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { deepEqual } from \"fast-equals\";\nimport type {\n Layout,\n Breakpoint,\n Breakpoints,\n ResponsiveLayouts,\n CompactType\n} from \"../../core/types.js\";\nimport { cloneLayout } from \"../../core/layout.js\";\nimport {\n getBreakpointFromWidth,\n getColsFromBreakpoint,\n findOrGenerateResponsiveLayout,\n sortBreakpoints\n} from \"../../core/responsive.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Default breakpoint names */\nexport type DefaultBreakpoints = \"lg\" | \"md\" | \"sm\" | \"xs\" | \"xxs\";\n\n/** Default breakpoint widths */\nexport const DEFAULT_BREAKPOINTS: Breakpoints<DefaultBreakpoints> = {\n lg: 1200,\n md: 996,\n sm: 768,\n xs: 480,\n xxs: 0\n};\n\n/** Default column counts per breakpoint */\nexport const DEFAULT_COLS: Breakpoints<DefaultBreakpoints> = {\n lg: 12,\n md: 10,\n sm: 6,\n xs: 4,\n xxs: 2\n};\n\nexport interface UseResponsiveLayoutOptions<\n B extends Breakpoint = DefaultBreakpoints\n> {\n /** Current container width */\n width: number;\n /** Breakpoint definitions (name → min-width) */\n breakpoints?: Breakpoints<B>;\n /** Column counts per breakpoint */\n cols?: Breakpoints<B>;\n /** Layouts for each breakpoint */\n layouts?: ResponsiveLayouts<B>;\n /** Compaction type */\n compactType?: CompactType;\n /** Called when breakpoint changes */\n onBreakpointChange?: (newBreakpoint: B, cols: number) => void;\n /** Called when layout changes */\n onLayoutChange?: (layout: Layout, layouts: ResponsiveLayouts<B>) => void;\n /** Called when width changes */\n onWidthChange?: (\n width: number,\n margin: readonly [number, number],\n cols: number,\n containerPadding: readonly [number, number] | null\n ) => void;\n}\n\nexport interface UseResponsiveLayoutResult<\n B extends Breakpoint = DefaultBreakpoints\n> {\n /** Current layout for the active breakpoint */\n layout: Layout;\n /** All layouts by breakpoint */\n layouts: ResponsiveLayouts<B>;\n /** Current active breakpoint */\n breakpoint: B;\n /** Column count for the current breakpoint */\n cols: number;\n /** Update layouts for a specific breakpoint */\n setLayoutForBreakpoint: (breakpoint: B, layout: Layout) => void;\n /** Update all layouts */\n setLayouts: (layouts: ResponsiveLayouts<B>) => void;\n /** Sorted array of breakpoint names (smallest to largest) */\n sortedBreakpoints: B[];\n}\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\n/**\n * Hook for managing responsive grid layouts.\n *\n * Automatically selects the appropriate layout based on container width\n * and generates layouts for new breakpoints from existing ones.\n *\n * @example\n * ```tsx\n * function MyResponsiveGrid() {\n * const { width, containerRef } = useContainerWidth();\n * const { layout, breakpoint, cols } = useResponsiveLayout({\n * width,\n * layouts: {\n * lg: [...],\n * md: [...],\n * sm: [...]\n * }\n * });\n *\n * return (\n * <div ref={containerRef}>\n * <GridLayout\n * width={width}\n * cols={cols}\n * layout={layout}\n * />\n * </div>\n * );\n * }\n * ```\n */\nexport function useResponsiveLayout<B extends Breakpoint = DefaultBreakpoints>(\n options: UseResponsiveLayoutOptions<B>\n): UseResponsiveLayoutResult<B> {\n const {\n width,\n breakpoints = DEFAULT_BREAKPOINTS as unknown as Breakpoints<B>,\n cols: colsConfig = DEFAULT_COLS as unknown as Breakpoints<B>,\n layouts: propsLayouts = {} as ResponsiveLayouts<B>,\n compactType = \"vertical\",\n onBreakpointChange,\n onLayoutChange,\n onWidthChange\n } = options;\n\n // Sorted breakpoints for consistent ordering\n const sortedBreakpoints = useMemo(\n () => sortBreakpoints(breakpoints),\n [breakpoints]\n );\n\n // Calculate initial breakpoint and cols\n const initialBreakpoint = useMemo(\n () => getBreakpointFromWidth(breakpoints, width),\n // Only calculate on mount, not on width changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const initialCols = useMemo(\n () => getColsFromBreakpoint(initialBreakpoint, colsConfig),\n [initialBreakpoint, colsConfig]\n );\n\n // State\n const [breakpoint, setBreakpoint] = useState<B>(initialBreakpoint);\n const [cols, setCols] = useState<number>(initialCols);\n const [layouts, setLayoutsState] = useState<ResponsiveLayouts<B>>(() => {\n // Clone initial layouts\n const cloned = {} as ResponsiveLayouts<B>;\n for (const bp of sortedBreakpoints) {\n const layout = propsLayouts[bp];\n if (layout) {\n (cloned as Record<B, Layout>)[bp] = cloneLayout(layout);\n }\n }\n return cloned;\n });\n\n // Track previous values for change detection\n const prevWidthRef = useRef(width);\n const prevBreakpointRef = useRef(breakpoint);\n const prevLayoutsRef = useRef(layouts);\n\n // Current layout for the active breakpoint\n const layout = useMemo(() => {\n return findOrGenerateResponsiveLayout(\n layouts,\n breakpoints,\n breakpoint,\n prevBreakpointRef.current,\n cols,\n compactType\n );\n }, [layouts, breakpoints, breakpoint, cols, compactType]);\n\n // Set layout for a specific breakpoint\n const setLayoutForBreakpoint = useCallback((bp: B, newLayout: Layout) => {\n setLayoutsState((prev: ResponsiveLayouts<B>) => ({\n ...prev,\n [bp]: cloneLayout(newLayout)\n }));\n }, []);\n\n // Set all layouts\n const setLayouts = useCallback((newLayouts: ResponsiveLayouts<B>) => {\n const cloned = {} as ResponsiveLayouts<B>;\n for (const bp of Object.keys(newLayouts) as B[]) {\n const layoutForBp = newLayouts[bp];\n if (layoutForBp) {\n (cloned as Record<B, Layout>)[bp] = cloneLayout(layoutForBp);\n }\n }\n setLayoutsState(cloned);\n }, []);\n\n // Handle width changes\n useEffect(() => {\n if (prevWidthRef.current === width) return;\n prevWidthRef.current = width;\n\n // Determine new breakpoint\n const newBreakpoint = getBreakpointFromWidth(breakpoints, width);\n const newCols = getColsFromBreakpoint(newBreakpoint, colsConfig);\n\n // Notify width change\n onWidthChange?.(width, [10, 10], newCols, null);\n\n // Check if breakpoint changed\n if (newBreakpoint !== breakpoint) {\n // Generate layout for new breakpoint\n const newLayout = findOrGenerateResponsiveLayout(\n layouts,\n breakpoints,\n newBreakpoint,\n breakpoint,\n newCols,\n compactType\n );\n\n // Update layouts with the new breakpoint layout\n const updatedLayouts: ResponsiveLayouts<B> = {\n ...layouts,\n [newBreakpoint]: newLayout\n };\n\n setLayoutsState(updatedLayouts);\n setBreakpoint(newBreakpoint);\n setCols(newCols);\n\n // Notify breakpoint change\n onBreakpointChange?.(newBreakpoint, newCols);\n\n prevBreakpointRef.current = newBreakpoint;\n }\n }, [\n width,\n breakpoints,\n colsConfig,\n breakpoint,\n layouts,\n compactType,\n onBreakpointChange,\n onWidthChange\n ]);\n\n // Sync with prop layouts when they change\n useEffect(() => {\n if (!deepEqual(propsLayouts, prevLayoutsRef.current)) {\n setLayouts(propsLayouts);\n prevLayoutsRef.current = propsLayouts;\n }\n }, [propsLayouts, setLayouts]);\n\n // Notify layout changes\n useEffect(() => {\n if (!deepEqual(layouts, prevLayoutsRef.current)) {\n prevLayoutsRef.current = layouts;\n onLayoutChange?.(layout, layouts);\n }\n }, [layout, layouts, onLayoutChange]);\n\n return {\n layout,\n layouts,\n breakpoint,\n cols,\n setLayoutForBreakpoint,\n setLayouts,\n sortedBreakpoints\n };\n}\n\nexport default useResponsiveLayout;\n"]}
|
package/dist/chunk-ZWN22PS2.mjs
DELETED