/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */

#ifndef WEEXV8_CONSTANTSNAME_H
#define WEEXV8_CONSTANTSNAME_H

#include <string>

namespace WeexCore {
  constexpr char DIRECTION[] = "direction";

  constexpr char FLEX[] = "flex";
  constexpr char HORIZONTAL[] = "horizontal";
  constexpr char ALIGN_ITEMS[] = "alignItems";
  constexpr char ALIGN_SELF[] = "alignSelf";
  constexpr char FLEX_DIRECTION[] = "flexDirection";
  constexpr char JUSTIFY_CONTENT[] = "justifyContent";
  constexpr char FLEX_WRAP[] = "flexWrap";

  constexpr char MIN_WIDTH[] = "minWidth";
  constexpr char MIN_HEIGHT[] = "minHeight";
  constexpr char MAX_WIDTH[] = "maxWidth";
  constexpr char MAX_HEIGHT[] = "maxHeight";

  constexpr char DEFAULT_HEIGHT[] = "defaultHeight";
  constexpr char HEIGHT[] = "height";

  constexpr char DEFAULT_WIDTH[] = "defaultWidth";
  constexpr char WIDTH[] = "width";
  constexpr char ROUND_OFF_DEVIATION[] = "roundOffDeviation";
  constexpr char SCROLL_DIRECTION[] = "scrollDirection";

  constexpr char POSITION[] = "position";

  constexpr char LEFT[] = "left";
  constexpr char TOP[] = "top";
  constexpr char RIGHT[] = "right";
  constexpr char BOTTOM[] = "bottom";

  constexpr char MARGIN[] = "margin";
  constexpr char MARGIN_LEFT[] = "marginLeft";
  constexpr char MARGIN_TOP[] = "marginTop";
  constexpr char MARGIN_RIGHT[] = "marginRight";
  constexpr char MARGIN_BOTTOM[] = "marginBottom";

  constexpr char BORDER_WIDTH[] = "borderWidth";
  constexpr char BORDER_TOP_WIDTH[] = "borderTopWidth";
  constexpr char BORDER_RIGHT_WIDTH[] = "borderRightWidth";
  constexpr char BORDER_BOTTOM_WIDTH[] = "borderBottomWidth";
  constexpr char BORDER_LEFT_WIDTH[] = "borderLeftWidth";

  constexpr char PADDING[] = "padding";
  constexpr char PADDING_LEFT[] = "paddingLeft";
  constexpr char PADDING_TOP[] = "paddingTop";
  constexpr char PADDING_RIGHT[] = "paddingRight";
  constexpr char PADDING_BOTTOM[] = "paddingBottom";

  constexpr char FONT_STYLE[] = "fontStyle";
  constexpr char COLUMN_WIDTH[] = "columnWidth";
  constexpr char COLUMN_COUNT[] = "columnCount";
  constexpr char COLUMN_GAP[] = "columnGap";
  constexpr char LEFT_GAP[] = "leftGap";
  constexpr char RIGHT_GAP[] = "rightGap";
  constexpr char SPAN_OFFSETS[] = "spanOffsets";

  constexpr char COLOR[] = "color";
  constexpr char BACKGROUND_COLOR[] = "backgroundColor";
  constexpr char APPEND[] = "append";
}

#endif //WEEXV8_CONSTANTSNAME_H
