Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/ui/design-tokens/air/ |
Upload File : |
const fs=require("fs");const path=require("path");const specialHexTokens=["backgrounds/state/bg-state-hover-default","backgrounds/state/bg-state-click-default","backgrounds/state/bg-state-hover-alt","backgrounds/state/bg-state-click-alt","backgrounds/state/bg-state-hover-default-overlay","backgrounds/state/bg-state-click-default-overlay","backgrounds/state/bg-state-hover-alt-overlay","backgrounds/state/bg-state-click-alt-overlay"];function applyCustomRules(e,t){if(e.type==="number"&&e.name.toLowerCase().includes("opacity")){return(e.value/100).toString()}return t}function shouldIgnoreToken(e,t){const n=e.split("/");for(const e of n){if(t.includes(e)){return true}}return false}function transformTokenName(e,t){const n=e.split("/");let s=n[n.length-1];s=s.replace(/\s+/g,"-").toLowerCase();const o=t==="color"?"color-":"";return`ui-${o}${s}`}function buildTokenLookup(e,t,n){const s={};e.forEach((e=>{if(n.length>0&&!n.includes(e.name)){return}const o=e.name;if(!s[o]){s[o]={}}e.modes.forEach((e=>{if(Array.isArray(e.variables)){e.variables.forEach((e=>{if(shouldIgnoreToken(e.name,t)){return}const n=transformTokenName(e.name,e.type);s[o][e.name]=n}))}}))}));return s}function generateCssVariables(e,t,n){let s="";e.forEach((e=>{if(shouldIgnoreToken(e.name,n)){return}const o=transformTokenName(e.name,e.type);if(specialHexTokens.includes(e.name)){const t=e.value;if(t&&t[0]==="#"&&t.length===9){const e=t.slice(0,7);const n=t.slice(7);const r=Math.round(parseInt(n,16)/255*100);s+=` --${o}-hex: ${e};\n`;s+=` --${o}-opacity: ${r}%;\n`}else{s+=` --${o}: ${e.value};\n`}s+=` --${o}: ${e.value};\n`;return}let r="";if(e.isAlias&&typeof e.value==="object"){const n=e.value.collection;const s=e.value.name;if(t[n]&&t[n][s]){const e=t[n][s];r=`var(--${e})`}else{console.error(`Alias target token not found: collection "${n}", name "${s}"`);r="undefined"}}else{if(e.type==="number"){const t=`${e.value}px`;r=applyCustomRules(e,t)}else{r=e.value}}if(e.name.toLowerCase().includes("blur")){if(e.isAlias&&typeof e.value==="object"){}else if(e.type==="number"){if(e.value===0){r="none"}else{const t=`${e.value}px`;const n=applyCustomRules(e,t);r=`blur(${n})`}}else{r=`blur(${r})`}}s+=` --${o}: ${r};\n`}));return s}function generateCss(e,t,n){const s=`/**\n * Do not edit directly\n * Generated on ${(new Date).toUTCString()}\n */\n\n`;const{collections:o}=e;const r=new Set;o.forEach((e=>{if(n.length>0&&!n.includes(e.name))return;e.modes.forEach((e=>{e.variables.forEach((e=>{if(!shouldIgnoreToken(e.name,t)&&e.name.toLowerCase().includes("bg-blur")){const t=transformTokenName(e.name,e.type);r.add(t)}}))}))}));const a=buildTokenLookup(o,t,n);let l=s;o.forEach((e=>{if(n.length>0&&!n.includes(e.name)){return}if(e.modes.length===1){const n=e.modes[0];l+=`:root {\n`;l+=generateCssVariables(n.variables,a,t);l+=`}\n\n`}else{const n=e.modes[0];const s=`--ui-context-${n.name.toLowerCase().replace(/\s+/g,"-")}`;l+=`:root, .${s} {\n`;l+=generateCssVariables(n.variables,a,t);l+=`}\n\n`;e.modes.forEach((e=>{if(e.name.toLowerCase()===n.name.toLowerCase()){return}const s=`--ui-context-${e.name.toLowerCase().replace(/\s+/g,"-")}`;l+=`.${s} {\n`;l+=generateCssVariables(e.variables,a,t);l+=`}\n\n`}))}}));if(r.size>0){l+=`.--ui-reset-bg-blur {\n`;r.forEach((e=>{l+=` --${e}: none;\n`}));l+=`}\n\n`}return l}function parseArgs(){const e="./src/figma-tokens.json";const t="./dist/air-design-tokens.css";const n=process.argv.slice(2);let s=e;let o=t;let r=["legacy","chat","stage","space","opacity","size","radius","component"];let a=["design","fixed"];n.forEach((e=>{if(e.startsWith("--input=")){s=e.split("=")[1]}else if(e.startsWith("--output=")){o=e.split("=")[1]}else if(e.startsWith("--exclude=")){r=e.split("=")[1].split(",").map((e=>e.trim()))}else if(e.startsWith("--collections=")){a=e.split("=")[1].split(",").map((e=>e.trim()))}}));return{input:path.resolve(s),output:path.resolve(o),exclude:r,collections:a}}function main(){const e=parseArgs();let t;try{const n=fs.readFileSync(e.input,"utf8");t=JSON.parse(n)}catch(e){console.error("Error reading or parsing JSON file:",e);process.exit(1)}let n="";try{const e=path.join(__dirname,"src","hoverable.css");n=fs.readFileSync(e,"utf8")}catch(e){console.error("Error reading hoverable.css:",e);process.exit(1)}const s=generateCss(t,e.exclude,e.collections);const o=`${s}${n}`;try{fs.writeFileSync(e.output,o,"utf8");console.log(`CSS file successfully generated: ${e.output}`)}catch(e){console.error("Error writing CSS file:",e);process.exit(1)}}main(); //# sourceMappingURL=tokens-converter.map.js