oncss
Version:
A CSS framework for modern web development.
3 lines (2 loc) • 4.25 kB
JavaScript
;var j=Object.create;var k=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var T=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var M=(t,s)=>{for(var e in s)k(t,e,{get:s[e],enumerable:!0})},P=(t,s,e,y)=>{if(s&&typeof s=="object"||typeof s=="function")for(let l of V(s))!B.call(t,l)&&l!==e&&k(t,l,{get:()=>s[l],enumerable:!(y=N(s,l))||y.enumerable});return t};var z=(t,s,e)=>(e=t!=null?j(T(t)):{},P(s||!t||!t.__esModule?k(e,"default",{value:t,enumerable:!0}):e,t)),H=t=>P(k({},"__esModule",{value:!0}),t);var R={};M(R,{CSSFactory:()=>$,cssPrefix:()=>F,formatCSSProp:()=>A,formatCSSValue:()=>_,style:()=>u});module.exports=H(R);var E=z(require("youid"),1);const m=typeof window<"u"?window:global;m.Factory=m.Factory||new Map;const $=m.Factory,K=["fontWeight","font-weight","lineHeight","line-height","opacity","zIndex","z-index","flex","order","flexGrow","flex-grow","flexShrink","flex-shrink","flexBasis","flex-basis","columns","perspective","stroke-dashoffset"],A=t=>t.split(/(?=[A-Z])/).join("-").toLowerCase(),_=(t,s)=>typeof s=="number"&&!K.includes(t)?`${s}px`:s,w=["webkit","moz","ms","o"];let b;const C=new Map,F=(t,s)=>{if(s=_(t,s),t=A(t),typeof window>"u")return{prop:t,value:s};const e=b||(b=document.createElement("div").style);if(s=s?.toString(),e.setProperty(t,s),e.getPropertyValue(t)===s)return{prop:t,value:s};const y=C.get(t);if(y)return{prop:y._prop,value:`${y._vprefix}${s}`};let l=t,n=s,c="";const d=t.includes("-")?t.replace(/-([a-z])/g,(i,r)=>r.toUpperCase()):t;for(const i of w)if(e[`${i}${d}`]!==void 0){l=`-${i}-${t}`;break}if(e.setProperty(l,s),!e.getPropertyValue(l))for(const i of w){const r=`-${i}-${s}`;if(e.setProperty(l,r),e.getPropertyValue(l)===r){n=r,c=`-${i}-`;break}}return C.set(t,{_prop:l,_vprefix:c}),{prop:l,value:n}},u=(t,s,e,y=1)=>{let l,n=s;if(s){if(typeof s!="string")throw new Error(`Invalid class name: ${s}`)}else{l=JSON.stringify(t,(a,p)=>typeof p=="function"?p.toString():p);const r=$.get(l);if(r)return r.cache=!0,r;n=`${e?.classPrefix||""}x${(0,E.default)(l)}`}let c=[`${n}{`],d={},i={};for(let r in t){let a=t[r],p=r.charAt(0);if(p==="&"){let o=r.replace(/&/g,n);const f=u(a,o,e,y+1);e?.skipProps&&(i={...i,...f.skiped}),c.push(f.stack)}else if(p==="@")if(r.startsWith("@global")||r.startsWith("@keyframes")){let o="";for(let f in a){let g=u(a[f],f,e,y+1);o+=g.stack,e?.skipProps&&(i={...i,...g.skiped})}r.startsWith("@keyframes")?c.push(`${r}{${o}}`):c.push(o)}else{let o=u(a,n,e,y+1);const f=r+"{"+o.stack+"}";c.push(f),e?.skipProps&&(i={...i,...o.skiped})}else{if(e?.skipProps&&e.skipProps(r,a,y)){n in i||(i[n]=[]),i[n].push(r);continue}if(typeof a=="function"||Array.isArray(a))continue;if(typeof a=="object")for(let o in a){if(typeof a[o]=="object"||typeof a[o]=="function"||Array.isArray(a[o]))throw new Error(`Invalid css value: ${a[o]}`);let f=o;if(!!isNaN(parseInt(f)))if(e?.breakpoints&&!isNaN(parseInt(e.breakpoints[o])))f=e.breakpoints[o].toString();else throw new Error(`Invalid breakpoint prop: ${o}`);let I={[r]:a[o]},h=u(I,n,e,y),x=h.stack,S=`@media (min-width: ${f}px)`;d[S]=d[S]?d[S]+x:x,e?.skipProps&&(i={...i,...h.skiped})}else{if(e?.getProps){let f=e.getProps(r,a,t,y);if(f){let g=u(f,n,{...e,getProps:void 0});e?.skipProps&&(i={...i,...g.skiped}),c.push(g.stack);continue}}if(e?.aliases&&e.aliases[r]){let f=e.aliases[r](a);if(f){let g=u(f,n,{...e,aliases:void 0},y);g.stack=g.stack.replace(`${n}{`,"").replace("}",""),c[0]+=g.stack;continue}}e?.getValue&&(a=e.getValue(r,a,t,y));let o=F(r,a);c[0]+=`${o.prop}:${o.value};`}}}c[0]+="}",c[0]===`${n}{}`&&(c[0]=""),c=c.join("");for(let r in d)c+=`${r}{${d[r].replace(new RegExp(`}\\${n}\\{`,"g"),"")}}`;if(l){c=c.replace(new RegExp(n,"g"),`.${n}`);const r={cache:!1,cachekey:l,classname:n,css:c,cssraw:t,skiped:i,getStyleTag:()=>document?.querySelector(`[data-oncss="${n}"]`),deleteStyle:()=>{const p=document?.querySelector(`[data-oncss="${n}"]`);p&&p.remove()},toString:()=>n};if($.set(l,r),(e?.injectStyle||!0)&&typeof window<"u"&&!document.querySelector(`[data-oncss="${n}"]`)){const p=document.createElement("style");p.innerHTML=r.css,p.setAttribute("data-oncss",n),document.head.append(p)}return r}return{stack:c,skiped:i}};
//# sourceMappingURL=core.js.map