open Stacks_hooks open Stacks_utils open Stacks_externals open Stacks_types module Stack = Stacks_component_Stack module Box = Stacks_component_Box @react.component @gentype let make = ( // Tiles props ~columns=?, ~space=?, ~empty: option>=?, // Box props ~padding=?, ~paddingX=?, ~paddingY=?, ~paddingTop=?, ~paddingBottom=?, ~paddingLeft=?, ~paddingRight=?, ~paddingEnd=?, ~paddingStart=?, ~margin=?, ~marginX=?, ~marginY=?, ~marginTop=?, ~marginBottom=?, ~marginLeft=?, ~marginRight=?, ~marginEnd=?, ~marginStart=?, // View props ~accessibilityActions=?, ~accessibilityElementsHidden=?, ~accessibilityHint=?, ~accessibilityIgnoresInvertColors=?, ~accessibilityLabel=?, ~accessibilityLiveRegion=?, ~accessibilityRole=?, ~accessibilityState=?, ~accessibilityValue=?, ~accessibilityViewIsModal=?, ~accessible=?, ~collapsable=?, ~hitSlop=?, ~importantForAccessibility=?, ~nativeID=?, ~needsOffscreenAlphaCompositing=?, ~onAccessibilityEscape=?, ~onAccessibilityTap=?, ~onLayout=?, ~onMagicTap=?, ~onMoveShouldSetResponder=?, ~onMoveShouldSetResponderCapture=?, ~onResponderEnd=?, ~onResponderGrant=?, ~onResponderMove=?, ~onResponderReject=?, ~onResponderRelease=?, ~onResponderStart=?, ~onResponderTerminate=?, ~onResponderTerminationRequest=?, ~onStartShouldSetResponder=?, ~onStartShouldSetResponderCapture=?, ~pointerEvents=?, ~removeClippedSubviews=?, ~renderToHardwareTextureAndroid=?, ~shouldRasterizeIOS=?, ~style=?, ~testID=?, ~viewRef=?, ~children, // React Native Web props ~onMouseDown=?, ~onMouseEnter=?, ~onMouseLeave=?, ~onMouseMove=?, ~onMouseOver=?, ~onMouseOut=?, ~onMouseUp=?, ) => { let resolveResponsiveProp = useResponsiveProp() let columns = columns ->resolveResponsiveProp ->Belt.Option.mapWithDefaultU(1, (. value) => value < 1 ? 1 : value) let children = children->React.Children.toArray->splitEvery(columns) let negativeSpace = negateSpace(space) let isEmpty = empty->coerce->resolveResponsiveProp->coerce->Belt.Option.getWithDefault(true) {children ->Belt.Array.mapWithIndexU((. index, arr) => { let arr = Belt.Array.makeByU(columns, (. index) => arr->Belt.Array.get(index)->Belt.Option.getWithDefault(React.null) ) {arr ->Belt.Array.mapWithIndexU((. index, child) => { let isValidOrEmpty = isValidElement(child) || coerce(isEmpty) isValidOrEmpty ? child : React.null }) ->React.array} }) ->React.array} }