This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
Doric/doric-js/src/util/flexbox.ts
2020-04-13 14:44:32 +08:00

171 lines
3.4 KiB
TypeScript

/*
* Copyright [2019] [Doric.Pub]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Modeling } from "./types";
enum ValueType {
Undefined = 0,
Point = 1,
Percent = 2,
Auto = 3,
}
export class FlexTypedValue implements Modeling {
type: ValueType
value = 0
constructor(type: ValueType) {
this.type = type
}
static Auto = new FlexTypedValue(ValueType.Auto)
static percent(v: number) {
const ret = new FlexTypedValue(ValueType.Percent)
ret.value = v
return ret
}
static point(v: number) {
const ret = new FlexTypedValue(ValueType.Point)
ret.value = v
return ret
}
toModel() {
return {
type: this.type,
value: this.value,
}
}
}
export enum FlexDirection {
COLUMN = 0,
COLUMN_REVERSE = 1,
ROW = 2,
ROW_REVERSE = 3,
}
export enum Align {
AUTO = 0,
FLEX_START = 1,
CENTER = 2,
FLEX_END = 3,
STRETCH = 4,
BASELINE = 5,
SPACE_BETWEEN = 6,
SPACE_AROUND = 7,
}
export enum Justify {
FLEX_START = 0,
CENTER = 1,
FLEX_END = 2,
SPACE_BETWEEN = 3,
SPACE_AROUND = 4,
SPACE_EVENLY = 5,
}
export enum Direction {
INHERIT = 0,
LTR = 1,
RTL = 2,
}
export enum PositionType {
RELATIVE = 0,
ABSOLUTE = 1,
}
export enum Wrap {
NO_WRAP = 0,
WRAP = 1,
WRAP_REVERSE = 2,
}
export enum OverFlow {
VISIBLE = 0,
HIDDEN = 1,
SCROLL = 2,
}
export enum Display {
FLEX = 0,
NONE = 1,
}
export type FlexValue = FlexTypedValue | number
export interface FlexConfig {
direction?: Direction
flexDirection?: FlexDirection
justifyContent?: Justify
alignContent?: Align
alignItems?: Align
alignSelf?: Align
positionType?: PositionType
flexWrap?: Wrap
overFlow?: OverFlow
display?: Display
flex?: number
flexGrow?: number
flexShrink?: number
flexBasis?: FlexValue
marginLeft?: FlexValue
marginRight?: FlexValue
marginTop?: FlexValue
marginBottom?: FlexValue
marginStart?: FlexValue
marginEnd?: FlexValue
marginHorizontal?: FlexValue
marginVertical?: FlexValue
margin?: FlexValue
paddingLeft?: FlexValue
paddingRight?: FlexValue
paddingTop?: FlexValue
paddingBottom?: FlexValue
paddingStart?: FlexValue
paddingEnd?: FlexValue
paddingHorizontal?: FlexValue
paddingVertical?: FlexValue
padding?: FlexValue
borderLeftWidth?: number
borderRightWidth?: number
borderTopWidth?: number
borderBottomWidth?: number
borderStartWidth?: number
borderEndWidth?: number
borderWidth?: number
left?: FlexValue
right?: FlexValue
top?: FlexValue
bottom?: FlexValue
start?: FlexValue
end?: FlexValue
width?: FlexValue
height?: FlexValue
minWidth?: FlexValue
minHeight?: FlexValue
maxWidth?: FlexValue
maxHeight?: FlexValue
aspectRatio?: number
}