UNPKG

@builder.io/mitosis

Version:

Write components once, run everywhere. Compiles to Vue, React, Solid, and Liquid. Import code from Figma and Builder.io

65 lines (64 loc) 3.26 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.collectStyledComponents = void 0; const lodash_1 = require("lodash"); const legacy_1 = __importDefault(require("neotraverse/legacy")); const object_hash_1 = __importDefault(require("object-hash")); const capitalize_1 = require("../capitalize"); const is_mitosis_node_1 = require("../is-mitosis-node"); const is_upper_case_1 = require("../is-upper-case"); const collect_css_1 = require("./collect-css"); const helpers_1 = require("./helpers"); const collectStyledComponents = (json) => { let styledComponentsCode = ''; const componentIndexes = {}; const componentHashes = {}; (0, legacy_1.default)(json).forEach(function (item) { var _a; if ((0, is_mitosis_node_1.isMitosisNode)(item)) { if ((0, helpers_1.nodeHasCss)(item)) { const value = (0, helpers_1.parseCssObject)((_a = item.bindings.css) === null || _a === void 0 ? void 0 : _a.code); delete item.bindings.css; const normalizedNameProperty = item.properties.$name ? (0, capitalize_1.capitalize)((0, lodash_1.camelCase)((0, collect_css_1.normalizeName)(item.properties.$name))) : null; const componentName = normalizedNameProperty ? normalizedNameProperty : /^h\d$/.test(item.name || '') ? item.name : (0, capitalize_1.capitalize)((0, lodash_1.camelCase)((0, collect_css_1.normalizeName)(item.name) || 'div')); const index = (componentIndexes[componentName] = (componentIndexes[componentName] || 0) + 1); const className = `${componentName}${componentName !== item.name && index === 1 ? '' : index}`; let str = ''; const styles = (0, helpers_1.getStylesOnly)(value); const stylesHash = (0, object_hash_1.default)(styles); if (stylesHash === componentHashes[componentName]) { return; } if (!componentHashes[componentName]) { componentHashes[componentName] = stylesHash; } str += `${(0, helpers_1.styleMapToCss)(styles)}\n`; const nestedSelectors = (0, helpers_1.getNestedSelectors)(value); for (const nestedSelector in nestedSelectors) { const value = nestedSelectors[nestedSelector]; str += `${nestedSelector} { ${(0, helpers_1.styleMapToCss)(value)} }`; } const prefix = (0, is_upper_case_1.isUpperCase)(item.name[0]) ? `styled(${item.name})\`` : `styled.${item.name}\``; item.name = className; styledComponentsCode += ` const ${className} = ${prefix}${str}\`; `; } delete item.bindings.css; } }); return styledComponentsCode; }; exports.collectStyledComponents = collectStyledComponents;