/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ 784: /***/ ((__unused_webpack_module, exports) => { /** * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.errorMap = void 0; exports.errorMap = new Map([ ["fileError", "Visual file is damaged"], ["versionError", "Version number of visual file does not match"], ["modelError", "Visual model in visual file is damaged"], ["codegenError", "Codegen hml and css failed"], ]); /***/ }), /***/ 117: /***/ ((__unused_webpack_module, exports) => { /** * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ASTNode = void 0; class ASTNode { accept(v) { return v.visit(this); } } exports.ASTNode = ASTNode; /***/ }), /***/ 862: /***/ ((__unused_webpack_module, exports) => { /** * Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Cache = void 0; // There is no way pass value by reference with JS and TS, but object // This Cache is used to store output code temporarily class Cache { /** * @description: constructor for Cache * @param INDENT the IDENT string you want to use, such as 4 spaces */ constructor(INDENT) { this.value = ""; this.indent = 0; this.flag = true; this.INDENT = INDENT; } /** * @description: when flag is true, there should be some indents * @return void */ indentOn() { this.flag = true; } /** * @description: when flag is false, there should be no indents * @return void */ indentOff() { this.flag = false; } /** * @description: increase indent * @return void */ incIndent() { this.indent++; } /** * @description: decrease indent * @return void */ decIndent() { this.indent--; } /** * @description: check whether indent is LT 0 * @return boolean value representing whether indent is LT 0 */ checkIndent() { return this.indent < 0; } /** * @description: get indent * @return indents */ getIndents() { if (this.flag) { let indents = ""; for (let i = 0; i < this.indent; i++) { indents += this.INDENT; } return indents; } else { return ""; } } /** * @description: concat indents and HML/CSS code * @param strings means HML/CSS code * @return HML/CSS code after indents are set */ concat(...strings) { this.value += this.getIndents(); this.value = this.value.concat(...strings); return String(this.value); } /** * @description: concat indents and HML/CSS code * @return HML/CSS code */ toString() { return this.value; } } exports.Cache = Cache; /***/ }), /***/ 243: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { /* * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Style = exports.Tag = void 0; const ASTNode_1 = __webpack_require__(117); class Tag extends ASTNode_1.ASTNode { /** * @description: constructor for Tag * @param tagName is name of component * @param attributes is attributes of component * @param content is child elements or innerHtml of component */ constructor(tagName, attributes, content) { super(); this.tagName = tagName; this.attributes = attributes; this.content = content; } } exports.Tag = Tag; class Style extends ASTNode_1.ASTNode { /** * @description: constructor for Style * @param kind distinguishes id and class * @param name is name of id or class * @param content is style name and value of component */ constructor(kind, name, content, mediaQuery) { super(); this.mediaQuery = undefined; this.kind = kind; this.name = name; this.content = content; this.mediaQuery = mediaQuery; } } exports.Style = Style; /***/ }), /***/ 573: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { /* * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ASTNodeGenerator = void 0; const AST_1 = __webpack_require__(243); const Token_1 = __webpack_require__(334); class ASTNodeGenerator { /** * @description: constructor for BridgeVisitor * @param reference is cache for Harmony FA code */ constructor(reference) { this.cache = reference; } /** * @description: visitor mode dispatcher * @param t Node in AST */ visit(t) { if (t instanceof AST_1.Tag) { this.genTag(t); } else if (t instanceof AST_1.Style) { this.genStyle(t); } } /** * @description: code generator * @param ref is cache for code * @return ast node generator */ static getMethodGen(ref) { if (ASTNodeGenerator.instance === undefined) { ASTNodeGenerator.instance = new ASTNodeGenerator(ref); } else { ASTNodeGenerator.instance.setCache(ref); } return ASTNodeGenerator.instance; } /** * @description: cache for code * @param ref is cache for code * @return void */ setCache(ref) { this.cache = ref; } /** * @description: parse Tag in AST and generate code for Tag in cache * @param t Tag in AST * @return void */ genTag(t) { this.cache.concat(Token_1.TokenClass.TAG_START, t.tagName); this.cache.indentOff(); t.attributes.forEach((value, key) => { let valueBK = ""; for (const char of value) { valueBK += (char === "\"" ? """ : (char === "\n" ? " " : char)); } this.cache.concat(Token_1.TokenClass.SPACE, key, Token_1.TokenClass.ASSIGN, Token_1.TokenClass.LQUOTE, valueBK, Token_1.TokenClass.RQUOTE); }); if (t.content === null) { this.cache.concat(Token_1.TokenClass.EMPTY_TAG_END); } else { this.cache.concat(Token_1.TokenClass.TAG_END); if (typeof t.content === "string") { let contentBK = ""; for (const char of t.content) { contentBK += (char === "<" ? "<" : char); } this.cache.concat(contentBK); } else if (t.content.length !== 0) { this.cache.concat(Token_1.TokenClass.NEW_LINE); this.cache.indentOn(); this.cache.incIndent(); t.content.forEach((tag) => { tag.accept(this); this.cache.indentOff(); this.cache.concat(Token_1.TokenClass.NEW_LINE); this.cache.indentOn(); }); this.cache.decIndent(); this.cache.indentOn(); } this.cache.concat(Token_1.TokenClass.END_TAG_START, t.tagName, Token_1.TokenClass.TAG_END); } } /** * @description: parse Style in AST and generate code for Style in cache * @param s Style in AST * @return void */ genStyle(s) { if (s.mediaQuery !== undefined) { this.cache.concat("@media"); this.cache.indentOff(); this.cache.concat(Token_1.TokenClass.SPACE, s.mediaQuery, Token_1.TokenClass.SPACE, Token_1.TokenClass.LBRA, Token_1.TokenClass.NEW_LINE); this.cache.indentOn(); this.cache.incIndent(); } if (s.kind === "IDStyle") { this.cache.concat(Token_1.TokenClass.ID_STYLE_START); this.cache.indentOff(); } this.cache.concat(s.name, Token_1.TokenClass.SPACE, Token_1.TokenClass.LBRA, Token_1.TokenClass.NEW_LINE); this.cache.indentOn(); this.cache.incIndent(); s.content.forEach((value, key) => { this.cache.concat(key, Token_1.TokenClass.COLON, Token_1.TokenClass.SPACE, value, Token_1.TokenClass.SEMICOLON, Token_1.TokenClass.NEW_LINE); }); this.cache.decIndent(); this.cache.concat(Token_1.TokenClass.RBRA, Token_1.TokenClass.NEW_LINE); if (s.mediaQuery !== undefined) { this.cache.decIndent(); this.cache.concat(Token_1.TokenClass.RBRA, Token_1.TokenClass.NEW_LINE); } this.cache.concat(Token_1.TokenClass.NEW_LINE); } } exports.ASTNodeGenerator = ASTNodeGenerator; ASTNodeGenerator.instance = undefined; /***/ }), /***/ 844: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { /* * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CSSBridge = exports.HMLBridge = void 0; const AST_1 = __webpack_require__(243); const PropertySet_1 = __webpack_require__(571); class HMLBridge { constructor() { this.errors = 0; } /** * @description: generate error message * @param msg is error message to show up in console */ error(msg) { console.error("Code generating error: " + msg); this.errors += 1; } /** * @description: get error number * @return error number */ getErrorCount() { return this.errors; } /** * @description: visitor guidance method for contents, * sort out incoming type and guide to matching code generator * @param visualModel is a object with Model or Container or CharUI primitive types to be generated * @return a code tree representing input object */ visit(visualModel) { const attributes = new Map([["id", visualModel.id]]); let content = ""; for (let [key, val] of visualModel.property) { if (PropertySet_1.isAttribute(key)) { if (typeof val !== "string") { val = JSON.stringify(val); } attributes.set(key, val); } else if (PropertySet_1.isContent(key)) { content = val; } } if (visualModel.type === "list") { attributes.set("itemscale", "false"); } if (visualModel.children.length > 0) { content = []; for (const visualChild of visualModel.children) { content.push(visualChild.accept(this)); } } return new AST_1.Tag(visualModel.type, attributes, content); } } exports.HMLBridge = HMLBridge; class CSSBridge { constructor() { this.errors = 0; this.styles = []; } /** * @description: generate error message * @param msg is error message to show up in console */ error(msg) { console.error("Code generating error: " + msg); this.errors += 1; } /** * @description: get error number * @return error number */ getErrorCount() { return this.errors; } /** * @description: code generator for ID Style, which is CSS type in AST in IR * @param visualModel is a object with CSS type to be generated * @return a code tree representing Harmony FA CSS code */ genIDStyle(visualModel) { var _a; const getStyleMap = (property) => { const styles = new Map(); for (const prop of PropertySet_1.styleSet) { if (property.has(prop) && PropertySet_1.isStyle(prop)) { styles.set(prop, property.get(prop)); } } return styles; }; const styles = getStyleMap(visualModel.property); if (styles.size > 0) { this.styles.push(new AST_1.Style("IDStyle", visualModel.id, styles)); } ((_a = visualModel.mediaProperty) !== null && _a !== void 0 ? _a : new Map()).forEach((value, key) => { const queryStyles = getStyleMap(value); if (queryStyles.size > 0) { this.styles.push(new AST_1.Style("IDStyle", visualModel.id, queryStyles, key)); } }); for (const visualChild of visualModel.children) { visualChild.accept(this); } } /** * @description: visitor guidance method for contents, * sort out incoming type and guide to matching code generator * @param obj is a object with Model or Container or CharUI primitive types to be generated * @return a code tree representing input object */ visit(obj) { this.genIDStyle(obj); return this.styles; } } exports.CSSBridge = CSSBridge; /***/ }), /***/ 55: /***/ ((__unused_webpack_module, exports, __webpack_require__) => { /* * @Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.genFACSS = exports.genFAHML = void 0; const ASTNodeVisitor_1 = __webpack_require__(573); const Cache_1 = __webpack_require__(862); /** * @description: generate HML * @param t is Tag in AST * @return HML code */ function genFAHML(t) { const generator = ASTNodeVisitor_1.ASTNodeGenerator.getMethodGen(new Cache_1.Cache(" ")); t.accept(generator); return generator.cache.toString(); } exports.genFAHML = genFAHML; /** * @description: generate CSS * @param t is Style in AST * @return CSS code */ function genFACSS(t) { const generator = ASTNodeVisitor_1.ASTNodeGenerator.getMethodGen(new Cache_1.Cache(" ")); t.forEach((value) => { value.accept(generator); }); return generator.cache.toString(); } exports.genFACSS = genFACSS; /***/ }), /***/ 571: /***/ ((__unused_webpack_module, exports) => { /* * @Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isEvent = exports.isData = exports.isUnknown = exports.isContent = exports.isAttribute = exports.isStyle = exports.styleSet = void 0; // Unlike the property list in ComponentList, this one is only used to tell a property is a style or an attribute const SizeStyle = ["width", "height", "min-width", "min-height", "max-width", "max-height"]; const FlexStyle = ["flex", "flex-grow", "flex-shrink", "flex-basis"]; const BackgroundImageStyle = ["background", "background-image", "background-size", "background-position", "background-repeat"]; const BackgroundStyle = ["background-color", ...BackgroundImageStyle]; const PositionStyle = ["position", "display", "top", "right", "bottom", "left"]; const PaddingStyle = ["padding", "padding-start", "padding-end", "padding-top", "padding-right", "padding-bottom", "padding-left"]; const MarginStyle = ["margin", "margin-start", "margin-end", "margin-top", "margin-right", "margin-bottom", "margin-left"]; const BorderStyle = ["border-width", "border-style", "border-color", "border-radius", "border-top-width", "border-top-style", "border-top-color", "border-top-left-radius", "border-right-width", "border-right-style", "border-right-color", "border-top-right-radius", "border-bottom-width", "border-bottom-style", "border-bottom-color", "border-bottom-right-radius", "border-left-width", "border-left-style", "border-left-color", "border-bottom-left-radius"]; const gridStyle = ["grid-template-columns", "grid-template-rows", "grid-row-start", "grid-row-end", "grid-column-start", "grid-column-end", "grid-gap", "grid-columns-gap", "grid-rows-gap"]; const DisplayStyle = ["display", "opacity", "visibility"]; const AtomicLayoutStyle = ["display-index", "flex-weight", "aspect-ratio"]; const commonStyle = [...SizeStyle, ...PaddingStyle, ...MarginStyle, ...BorderStyle, ...BackgroundStyle, ...DisplayStyle, ...FlexStyle, ...PositionStyle, ...AtomicLayoutStyle]; const FlexSizeStyle = ["flex-wrap", "justify-content", "align-items", "align-content"]; const FontStyle = ["font-size", "font-family", "font-style", "font-weight"]; const divStyle = ["flex-direction", ...FlexSizeStyle]; const textStyle = ["text-align", "line-height", "text-decoration", "letter-spacing", "max-lines", "text-overflow", "allow-scale", "min-font-size", "max-font-size", "font-size-step", "prefer-font-sizes", ...FontStyle]; const imageStyle = ["object-fit", "match-text-direction", "fit-original-size"]; const dividerStyle = ["stroke-width", "line-cap"]; const spanStyle = ["allow-scale", "text-decoration", "color", ...FontStyle]; const buttonStyle = ["text-color", "allow-scale", "icon-width", "icon-height", "radius", ...FontStyle]; const switchStyle = ["texton-color", "textoff-color", "text-padding", "allow-scale", ...FontStyle]; const inputStyle = ["font-size", "font-family", "font-weight", "color", "placeholder-color", "allow-scale"]; const refreshStyle = ["progress-color"]; const chartStyle = ["stroke-width", "radius", "start-angle", "total-angle", "center-x", "center-y", "colors", "weights"]; const swiperStyle = ["indicator-color", "indicator-selected-color", "indicator-size", "indicator-top", "indicator-right", "indicator-bottom", "indicator-left"]; const pickerStyle = ["column-height", "text-color", "allow-scale", "letter-spacing", "text-decoration", "line-height", "opacity", ...FontStyle]; const sliderStyle = ["color", "selected-color", "block-color"]; const listStyle = ["flex-direction", "columns", "item-extent", "fade-color"]; const listItemStyle = ["column-span"]; const progressStyle = ["color", "stroke-width", "background-color", "secondary-color", "scale-width", "scale-number", "start-angle", "total-angle", "center-x", "center-y", "radius"]; exports.styleSet = new Set([ ...commonStyle, ...divStyle, ...textStyle, ...imageStyle, ...spanStyle, ...inputStyle, ...buttonStyle, ...switchStyle, ...refreshStyle, ...dividerStyle, ...chartStyle, ...pickerStyle, ...sliderStyle, ...swiperStyle, ...listStyle, ...listItemStyle, ...progressStyle, ...gridStyle, ]); const commonAttribute = ["id", "ref", "disabled", "focusable", "data", "if", "for"]; const imageAttribute = ["src", "alt"]; const buttonAttribute = ["type", "value", "icon", "waiting"]; const switchAttribute = ["checked", "showtext", "texton", "textoff"]; const inputAttribute = ["type", "checked", "name", "value", "placeholder", "maxlength", "enterkeytype", "headericon"]; const refreshAttribute = ["offset", "refreshing", "type", "lasttime", "friction"]; const optionAttribute = ["value"]; const chartAttribute = ["percent", "datasets", "options"]; const swiperAttribute = ["index", "autoplay", "interval", "indicator", "digital", "indicatordisabled", "loop", "duration", "vertical"]; const pickerAttribute = ["range", "selected", "start", "end", "lunar", "lunarSwitch", "columns", "hours", "containSecond"]; const sliderAttribute = ["min", "max", "step", "showtips", "showsteps", "mode"]; const menuAttribute = ["target", "title"]; const clockAttribute = ["clockconfig", "showdigit", "hourswest"]; const dividerAttribute = ["vertical"]; const listAttribute = ["scrollpage", "cachedcount", "scrollbar", "scrolleffect", "shapemode", "indexer", "itemscale", "itemcenter", "updateeffect", "scrollvibrate", "initialindex", "initialoffset"]; const listItemAttribute = ["type", "primary", "section", "sticky", "stickyradius", "clickeffect"]; const progressAttribute = ["type", "percent", "secondarypercent", "clockwise"]; const commonEvent = ["ontouchstart", "ontouchmove", "ontouchcancel", "ontouchend", "onclick", "onlongpress", "onfocus", "onblur", "onkey", "onswipe"]; const imageEvent = ["oncomplete", "onerror"]; const selectEvent = ["onchange"]; const inputEvent = ["onchange", "onenterkeyclick"]; const refreshEvent = ["onrefresh", "onpulldown"]; const listEvent = ["onindexerchange", "onscroll", "onscrollbottom", "onscrolltop", "onscrollend", "onscrolltouchup", "onrequestitem"]; const listItemEvent = ["onsticky"]; const swiperEvent = ["change", "onrotation"]; const menuEvent = ["onselected", "oncancel"]; const pickerEvent = ["oncolumnchange"]; const dataSet = new Set([ ...commonAttribute, ...imageAttribute, ...buttonAttribute, ...refreshAttribute, ...inputAttribute, ...switchAttribute, ...optionAttribute, ...chartAttribute, ...pickerAttribute, ...sliderAttribute, ...dividerAttribute, ...listAttribute, ...listItemAttribute, ...swiperAttribute, ...progressAttribute, ...menuAttribute, ...clockAttribute, ]); const eventSet = new Set([ ...commonEvent, ...imageEvent, ...inputEvent, ...selectEvent, ...refreshEvent, ...swiperEvent, ...listEvent, ...listItemEvent, ...menuEvent, ...pickerEvent, ]); function isStyle(s) { return exports.styleSet.has(s); } exports.isStyle = isStyle; function isAttribute(s) { return dataSet.has(s) || eventSet.has(s); } exports.isAttribute = isAttribute; function isContent(s) { return s === "content"; } exports.isContent = isContent; function isUnknown(s) { return !isStyle(s) && !isAttribute(s); } exports.isUnknown = isUnknown; function isData(s) { return dataSet.has(s); } exports.isData = isData; function isEvent(s) { return eventSet.has(s); } exports.isEvent = isEvent; /***/ }), /***/ 334: /***/ ((__unused_webpack_module, exports) => { /** * Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.TokenClass = void 0; var TokenClass; (function (TokenClass) { TokenClass[TokenClass["IDENTIFIER"] = 0] = "IDENTIFIER"; // literals TokenClass[TokenClass["STRING_LITERAL"] = 1] = "STRING_LITERAL"; TokenClass[TokenClass["NUMBER"] = 2] = "NUMBER"; TokenClass[TokenClass["CHARACTER"] = 3] = "CHARACTER"; // special tokens TokenClass[TokenClass["EOF"] = 4] = "EOF"; TokenClass[TokenClass["INVALID"] = 5] = "INVALID"; TokenClass["EMPTY_DATA"] = "empty"; TokenClass["ASSIGN"] = "="; // Escape character TokenClass["NEW_LINE"] = "\n"; TokenClass["CARRIAGE_RETURN"] = "\r"; TokenClass["INDENT"] = " "; // delimiters TokenClass["SPACE"] = " "; TokenClass["LQUOTE"] = "\""; TokenClass["RQUOTE"] = "\""; TokenClass["TAG_START"] = "<"; TokenClass["TAG_END"] = ">"; TokenClass["EMPTY_TAG_END"] = "/>"; TokenClass["END_TAG_START"] = ""; TokenClass["ID_STYLE_START"] = "#"; TokenClass["CLASS_STYLE_START"] = "."; TokenClass["LBRA"] = "{"; TokenClass["RBRA"] = "}"; TokenClass["SEMICOLON"] = ";"; TokenClass["COLON"] = ":"; })(TokenClass = exports.TokenClass || (exports.TokenClass = {})); /***/ }), /***/ 282: /***/ ((__unused_webpack_module, exports) => { /* * @Copyright (c) Huawei Technologies Co., Ltd. 2020-2021. All rights reserved. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.TagTypeMap = void 0; /** *