@tenoxui/moxie
Version:
Very lightweight utility-first CSS engine for style generation
2 lines (1 loc) • 8.28 kB
JavaScript
var __tenoxui_moxie__=function(x){"use strict";function R(h){return h.replace(/^(\d)/,"\\3$1 ").replace(/([#{}.:;?%&,@+*~'"!^$[\]()=>|/])/g,"\\$1")}function b(h){if(/^(webkit|moz|ms|o)[A-Z]/.test(h)){const s=h.match(/^(webkit|moz|ms|o)/);if(s){const e=s[0];return`-${e}${h.slice(e.length).replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}`}}return h.replace(/[A-Z]/g,s=>`-${s.toLowerCase()}`)}function j(h,s,e,t,l,n){return`${h?`${h}:`:""}${s}${e?"-":""}${e}${t}${l?`/${l}${n}`:""}`}function _(h){return h.replace(/[.*+?^${}()|[\]\\/\\-]/g,"\\$&")}function w(h){if(!h)return[];const s=new Set;return Object.entries(h).forEach(([e,t])=>{t&&typeof t=="object"&&Object.keys(t).forEach(l=>{s.add(l)})}),Array.from(s)}function Z({safelist:h=[],property:s={},classes:e={}}={}){const t=e,l=Object.keys(s);if(!t)return[...l,...h].sort((c,a)=>a.length-c.length);const o=[...w(t)];return[...l,...o,...h].sort((c,a)=>a.length-c.length)}function v({inputPrefixChars:h=[],safelist:s=[],property:e={},classes:t={}}={}){let l=Z({safelist:s,property:e,classes:t}).map(_);l.length>0&&(l=l.join("|")+"|");const n="\\[[^\\]]+\\]",o="\\([^()]*(?:\\([^()]*\\)[^()]*)*\\)",c="\\{[^{}]*(?:\\{[^{}]*\\}[^{}]*)*\\}",a=`[${["a-zA-Z0-9_\\-",...h].join("")}]`,r=a+"+|"+a+"+(?:-(?:"+n+"|"+o+"|"+c+"))|"+a+"+(?:-(?:"+n+"|"+o+"|"+c+"))?(?:\\/[a-zA-Z0-9_\\-]+)|"+n+"|"+o+"|"+c,d=`(${l}\\[[^\\]]+\\])`,i="(?:-)",$="(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+n+"|"+c+"|"+o+"|(?:\\$[^\\s\\/]+))",A="([a-zA-Z%]*)",p="(?:\\/(-?(?:\\d+(?:\\.\\d+)?)|(?:[a-zA-Z0-9_]+(?:-[a-zA-Z0-9_]+)*(?:-[a-zA-Z0-9_]+)*)|(?:#[0-9a-fA-F]+)|"+n+"|"+c+"|"+o+"|(?:\\$[^\\s\\/]+))([a-zA-Z%]*))?";return{prefix:r,type:d,separator:i,value:$,unit:A,secondValuePattern:p,all:"^(?:("+r+"):)?"+d+i+$+A+p+"$"}}class V{constructor({property:s={},values:e={},classes:t={},prefixChars:l=[]}={}){this.property=s,this.values=e,this.classes=t,this.prefixChars=l.map(_)}regexp(s){return v({safelist:s,property:this.property,classes:this.classes,inputPrefixChars:this.prefixChars})}parse(s,e){const t=this.regexp(e),l=s.match(new RegExp(t.all));if(l){const[,o,c,a,r,d,i]=l;return[o,c,a,r||"",d,i]}const n=s.match(new RegExp(`^(?:(${t.prefix}):)?${t.type}$`));return n?[n[1],n[2],"","",void 0,void 0]:null}processValue(s,e,t){if(!s)return"";const l=n=>n.replace(/\{([^}]+)\}/g,(o,c)=>{const a=this.values,r=a!==null?typeof a[t]=="object"?a[t][c]:a[c]:void 0;return typeof r=="string"?r:o});if(typeof this.values=="object"&&this.values!==null&&(this.values[t]&&typeof this.values[t]=="object"&&this.values[t][s]||this.values[s]))return typeof this.values[t]=="object"&&this.values[t]!==null?this.values[t][s]:this.values[s];if(s.startsWith("$"))return`var(--${s.slice(1)})`;if(s.startsWith("[")&&s.endsWith("]")||s.startsWith("(")&&s.endsWith(")")){const n=s.slice(1,-1).replace(/\\\_/g,"m0x13c55").replace(/\_/g," ").replace(/m0x13c55/g,"_");return n.includes("{")?l(n):n.startsWith("--")?`var(${n})`:n}return s+(e||"")}processShorthand(s="",e="",t="",l,n="",o="",c="",a){const r=this.property[s];if(typeof r=="object"&&!Array.isArray(r)&&!("property"in r))return null;const d=/^(?:\(|\[)([^:]+):(.+)(?:\)|\])$/;let i=null,$=e||"";const A=$.match(d);if(A&&(i=A[1].trim(),$=A[2].trim()),(typeof r=="string"&&!r.includes(":")||Array.isArray(r))&&(!e||e.includes(i+":")||n))return null;let p;e.includes(i+":")?p=e.startsWith("(")?`(${$})`:`[${$}]`:p=e;const y=this.processValue(p,t,s),g=this.processValue(n,o,s);if(s.startsWith("[")&&s.endsWith("]")){if(!e||n)return null;const u=s.slice(1,-1).split(",").map(C=>C.trim().startsWith("--")?String(C.trim()):b(String(C.trim())));return{className:j(l,s,e,t),cssRules:u.length===1?u[0]:u,value:y,prefix:l}}if(r){if(typeof r=="object"&&"property"in r){const C=r.group&&this.values[r.group][y]?this.values[r.group][y]:t?e:y,f=typeof r.property=="function"?r.property({value:e.startsWith("[")?y:C,unit:e.startsWith("[")?"":t,secondValue:e.startsWith("[")?"":o?n:g,secondUnit:e.startsWith("[")?"":o,key:i,raw:a}):r.property;if(f&&typeof f=="object"&&!Array.isArray(f)&&"cssRules"in f){const{className:W,cssRules:S=null,value:z=null,prefix:E}=f;return{className:W||c,cssRules:S,value:z,prefix:E||l,isCustom:!!W}}const m=r.value||"{0}";let P;if(typeof m=="function")P=m({value:C,unit:t,secondValue:o?n:g,secondUnit:o,key:i,raw:a});else if(typeof m=="string"){const W=r.group||s,S=this.processValue(p,t,W);this.values[W]&&typeof this.values[W]=="object"&&this.values[W][p]?P=this.values[W][p]:m.includes("{")?P=this.parseValuePattern(W,m,S,"",g,""):typeof m=="string"&&!m.includes("{")?P=m:P=y}else if(Array.isArray(m)){if(!m.includes(e+t)||n)return null;P=e+t}else P=null;return(typeof r.property=="string"||Array.isArray(r.property))&&typeof m=="string"&&(e.includes(i+":")||!m.includes("{1")&&n)||(typeof r.property=="string"||Array.isArray(r.property))&&m===null||typeof r.property=="string"&&r.property.includes(":")&&e||(typeof r.property=="string"||Array.isArray(r.property))&&typeof r.value=="string"&&!r.value.includes("{")&&e?null:{className:j(l,s,e,t,n,o),cssRules:f?Array.isArray(f)?f:typeof f=="string"&&(f.includes(":")||f.includes("value:"))&&f.includes("value:")?f.slice(6):b(String(f)):null,value:m===null||f===null||f.includes(":")||f.includes("value:")?null:e.startsWith("[")?y:P,prefix:l}}const u=typeof r=="function"?r({value:e.startsWith("[")?y:t?e:y,unit:e.startsWith("[")?"":t,secondValue:e.startsWith("[")?"":o?n:g,secondUnit:e.startsWith("[")?"":o,key:i,raw:a}):r;if(u&&typeof u=="object"&&!Array.isArray(u)&&"cssRules"in u){const{className:C,cssRules:f=null,value:m=null,prefix:P}=u;return{className:C||c,cssRules:f,value:m,prefix:P||l,isCustom:!!C}}return{className:j(l,s,e,t,n,o),cssRules:u?Array.isArray(u)?u:typeof u=="string"&&(u.includes(":")||u.startsWith("value:"))&&u.startsWith("value:")?u.slice(6):b(String(u)):null,value:typeof u=="string"&&u.includes(":")?null:y,prefix:l}}return null}parseValuePattern(s,e,t,l,n,o){if(!e.includes("{0}")&&!e.includes("{1")&&!e.includes("||"))return e;const[c,a]=e.split("||").map(i=>i.trim()),r=this.processValue(t,l,s),d=this.processValue(n,o,s);if(e.includes("{0}")&&e.includes("{1")||e.includes("{1")){let i=c;if(t&&(i=i.replace(/\{0\}/g,r)),e.includes("{1")){e.includes("{1}")&&(n?i=n.startsWith("[")?d:i.replace(/\{1\}/g,d):i=a||c);const $=/\{1([^}]*)\}/g;let A;for(;(A=$.exec(i))!==null;){const p=A[0],y=A[1].trim();let g=d;!g&&y.includes("|")?g=y.split("|")[1].trim():g||(g=""),i=t.startsWith("[")?r:i.replace(p,g)}}return t?i:a||c}else return t?t.startsWith("[")?r:c.replace(/\{0\}/g,r):a||c}getParentClass(s){return Object.keys(this.classes).filter(e=>Object.prototype.hasOwnProperty.call(this.classes[e],s))}processCustomClass(s,e="",t="",l="",n="",o=""){if(!s)return null;const c=this.getParentClass(s),a=e&&s.endsWith(`-${e}${t}`);if(c.length>0){const r=c.map(d=>{const i=this.classes[d];if(!i||e&&!a&&i[s]&&!i[s].includes("{0}")&&!i[s].includes("|"))return null;const $=this.parseValuePattern(s,i[s]||"",e,t,n,o);return`${b(String(d))}: ${$}`}).filter(Boolean).join("; ");return{className:a?s:j(l,s,e,t,n,o),cssRules:r,value:null,prefix:l}}return null}process(s){try{const e=Array.isArray(s)?s:s.split(/\s+/),t=[];for(const l of e)try{if(!l)continue;const n=this.parse(l);if(!n)continue;const[o,c,a,r,d,i]=n;if(!c)continue;const $=[...n,j(o,c,a,r,d,i)],A=this.getParentClass(`${c}-${a}`).length>0?`${c}-${a}`:c;try{const p=this.processCustomClass(A,a,r,o,d,i);if(p){const{className:y,cssRules:g,prefix:u}=p;if(!g||g==="null")continue;t.push({className:R(y),cssRules:g,value:null,prefix:u,raw:$});continue}}catch(p){console.warn(`Error processing custom class "${l}":`,p)}try{const p=this.processShorthand(c,a,r,o,d,i,l,$);if(p){const{className:y,cssRules:g,value:u,prefix:C,isCustom:f}=p;if(!g||g==="null")continue;t.push({className:f?y:R(y),cssRules:g,value:u,prefix:C,raw:$})}}catch(p){console.warn(`Error processing shorthand "${l}":`,p)}}catch(n){console.warn(`Failed to process class \`${l}\`:`,n)}return t}catch(e){return console.error("Critical error in process method:",e),[]}}}return x.TenoxUI=V,x.constructRaw=j,x.default=V,x.escapeCSSSelector=R,x.regexp=v,x.toKebabCase=b,Object.defineProperties(x,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),x}({});