 
 public enum LayoutPosition {
 	
+	@available(*, deprecated: 0.10.0, message: "Use new absolute or relative position which does exactly the same thing")
 	public enum OffsetOrigin {
 		
 		case topLeft


extension LayoutPosition {
	
	public static func makeAbsolute(initialFrame: CGRect, margin: CGVector, direction: LayoutPosition.Matrical.Direction) -> LayoutPosition {
		switch direction {
		case .horizontal:
			return .matrical(.horizontallyEqualSizedAbsolute(initial: initialFrame, margin: margin))
			
		case .vertical:
			return .matrical(.verticallyEqualSizedAbsolute(initial: initialFrame, margin: margin))
		}
	}
	
	public static func makeRelative(initialFrame: CGRect, margin: CGVector, direction: LayoutPosition.Matrical.Direction) -> LayoutPosition {
		switch direction {
		case .horizontal:
			return .matrical(.horizontallyEqualSizedRelative(initial: initialFrame, margin: margin))
			
		case .vertical:
			return .matrical(.verticallyEqualSizedRelative(initial: initialFrame, margin: margin))
		}
	}
	
	public static func makeCustom(initialFrame: @escaping Matrical.SizeToFrame, firstInColFrame: @escaping Matrical.PreviousColFrameAndSizeToFrame, firstInRowFrame: @escaping Matrical.PreviousRowFrameAndSizeToFrame, restFrame: @escaping Matrical.PreviousRowColFrameAndSizeToFrame) -> LayoutPosition {

	
	public enum Individual {
		
		public typealias SizeToFrame = (CGSize) -> LayoutFrame
		public typealias FitSizeBoundSizeToFrame = (_ fitSize: CGSize, _ boundSize: CGSize) -> LayoutFrame
		public typealias SizeToPoint = (CGSize) -> CGPoint
		public typealias SizeToSize = (CGSize) -> CGSize
		public typealias SizeToFloat = (CGSize) -> CGFloat
		
		case absolute(LayoutFrame)
		case relative(LayoutFrame)
		
		case insets(UIEdgeInsets)
		
		@available(*, deprecated: 0.10.0, message: "Use new absolute or relative position which does exactly the same thing")
		case offset(value: UIOffset, from: OffsetOrigin, size: CGSize)
		
		case customByFrame(frame: SizeToFrame)
