@filbert-js/stylesheet
Version:
> A StyleSheet for css-in-js libraries
2 lines (1 loc) • 1.32 kB
JavaScript
var e=require("@filbert-js/types");exports.StyleSheet=function(t){var r,S=t.getRoot,n=t.createElement,s=t.findElementByStyleId,a=t.cssParser,d=t.css||((r={})[e.TYPES_GLOBAL]={},r[e.TYPES_CSS]={},r[e.TYPES_KEYFRAMES]={},r),i=S();function l(e,t,r){var S=n("style");return[["data-type","styled-css"],["id",e],["styled-type",t],["styled-component-type",r]].forEach(function(e){var t=e[1];return t&&S.setAttribute(e[0],t)}),S}return{getStyles:function(){return{root:i,css:d}},createStyles:function(t,r,S,n){if(d[e.TYPES_CSS][t]){var s=i.getChildById(t),E=i.getChildById(S);S&&i.isBeforeChild(s,E)&&i.insertBefore(s,E)}else{var o=l(t,e.TYPES_CSS,n),y=a({css:r,namespace:"."+t});o.append(y),d[e.TYPES_CSS][t]=y,S?i.insertBefore(o,i.getChildById(S)):i.append(o)}},createKeyframes:function(t){if(!d[e.TYPES_KEYFRAMES][t]){var r=l(t,e.TYPES_KEYFRAMES),S="@keyframes "+t+" {"+t[e.RAW]+"}";r.append(S),i.append(r),d[e.TYPES_KEYFRAMES][t]=S}},createGlobalStyles:function(t,r){if(d[e.TYPES_GLOBAL][t]){var S=i.getChildById(t),n=r.trim();S.append(n),d[e.TYPES_GLOBAL][t]=n}else{var s=l(t,e.TYPES_GLOBAL),a=r.trim();s.append(a),d[e.TYPES_GLOBAL][t]=a,i.append(s)}},removeStyles:function(t,r){e.TYPES_CSS===r&&d[r][t]?s(t)||(delete d[r][t],i.getChildById(t).remove()):e.TYPES_GLOBAL===r&&(delete d[r][t],i.getChildById(t).remove())}}};