@teacss/directives 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -80,7 +80,7 @@ declare function generateEntry(entryCss: string, options: GenerateEntryOptions):
80
80
  * Produce the final stylesheet from an entry CSS file and the generated layers:
81
81
  *
82
82
  * - `@teacss;` → replaced by `layers`
83
- * - `@preset` / `@source` / `@custom {}` → stripped (consumed)
83
+ * - `@preset` / `@source` / `@shortcut` / `@custom {}` → stripped (consumed)
84
84
  * - native `@charset` / `@import` → hoisted in CSS-required order
85
85
  * - everything else (plain rules, comments, `@media`, …) → kept in place
86
86
  *
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as e,i as t,n,o as r,r as i,s as a,t as o}from"./screen-core-WpBOgdSr.js";import{createGenerator as s,expandVariantGroup as c,isCssId as l,splitClassTokens as u,toArray as d}from"@teacss/core";import{generate as f,parse as p,walk as m}from"css-tree";import{hasIconFn as h,hasThemeFn as g}from"@teacss/rule-helpers";import{customToTheme as _,diagnoseCustom as v,parseEntry as y,resolveEntryConfig as b,resolvePresets as x,scanTopLevelAtRules as S}from"@teacss/config";import{generateSources as C}from"@teacss/runtime/source-generation";async function w(e,t,n){let r=[],i=[],a=!1;for(let o of t.block.children)if(o.type===`Raw`)await n(o.value,o.loc.start.offset);else{let n=await T(e,t,o);if(!n)continue;r.push(n.consumedRange),i.push(...n.standaloneCss),a||=n.hasInlineUtility}let o=e.code.original,s=t.block.loc.start.offset+1,c=!1;for(let[e,t]of r){if(o.slice(s,e).trim()){c=!0;break}s=t}c||=!!o.slice(s,t.block.loc.end.offset-1).trim(),!a&&!c&&r.length>0&&e.code.remove(t.loc.start.offset,t.loc.end.offset);for(let n of i)e.code.appendLeft(t.loc.end.offset,n)}async function T({code:n,generator:o,applyVariable:s,options:l,filename:d},p,m){let h=n.original,g;if(m.type===`Atrule`&&m.name===`apply`&&m.prelude&&m.prelude.type===`Raw`)g=E(m.prelude.value.trim());else if(m.type===`Declaration`&&s.includes(m.property)&&(m.value.type===`Value`||m.value.type===`Raw`)){let e=h.slice(m.value.loc.start.offset,m.value.loc.end.offset).trim();e=E(e),g=u(e).map(e=>E(e)).join(` `)}if(!g)return;g=D(g);let _=await a(u(c(g)),o),v=t(_);if(v.length&&(l.throwOnMissing??!0))throw Error(`${i(v)}${d?` in ${d}`:``}`);let y=e(_,o.parentOrders),b=+(h[m.loc.end.offset]===`;`),x=[m.loc.start.offset,m.loc.end.offset+b];if(!y.length)return n.remove(...x),{consumedRange:x,hasInlineUtility:!1,standaloneCss:[]};let S,C=!1,w=[];for(let e of y)if(e.kind===`top-level`)w.push(e.body);else if(e.kind===`standalone`){if(!S){let e=p.prelude;S={prelude:e,selector:f(e),replacementSelector:n.slice(p.prelude.loc.start.offset,p.prelude.loc.end.offset)}}let t=r(S,e);w.push(t)}else C=!0,n.appendLeft(m.loc.start.offset,e.body);return x[1]=m.loc.end.offset+b,n.remove(...x),{consumedRange:x,hasInlineUtility:C,standaloneCss:w}}function E(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}function D(e){return e.replace(/\/\*[\s\S]*?\*\//g,``)}async function O({code:e,generator:t,options:r},i){let a=await n(t,i,(t,n)=>e.slice(t,n),r.throwOnMissing??!0);a!==void 0&&e.overwrite(i.loc.start.offset,i.loc.end.offset,a)}const k=/(@screen [^{]+).+/g;function A({code:e,generator:t},n){if(n.prelude?.type!==`Raw`)return;let r=o(n.prelude.value,t.config.theme);if(!r)return;let i=n.loc.start.offset,a=e.original.slice(i,n.loc.end.offset);for(let t of a.matchAll(k))e.overwrite(i+t.index,i+t.index+t[1].length,`@media ${r}`)}async function j(e,t,n,r,i,a){let{applyVariable:o}=n,s=n.varStyle;o===void 0&&(o=s===void 0?[`--at-apply`]:s?[`${s}apply`]:[]),o=d(o||[]);let c=e=>e.includes(`@apply`)||o.some(t=>e.includes(t)),l=i||e.original,u=c(l),f=l.includes(`@screen`),_=g(l)||h(l);if(!u&&!_&&!f)return;let v=p(l,{parseCustomProperty:!0,parseAtrulePrelude:!1,positions:!0,filename:r,offset:a});if(v.type!==`StyleSheet`)return;let y=[],b=new WeakSet,x=new WeakSet,S={options:n,applyVariable:o,generator:t,code:e,filename:r,offset:a},C=(i,a)=>j(e,t,n,r,i,a),T=async e=>{for(let t of e.block.children)t.type===`Raw`&&await C(t.value,t.loc.start.offset)};m(v,function(t){if(f&&t.type===`Atrule`&&t.name===`screen`)A(S,t);else if(_&&t.type===`Function`&&(t.name===`theme`||t.name===`icon`))return y.push(O(S,t)),this.skip;else u&&t.type===`Rule`&&c(e.original.slice(t.loc.start.offset,t.loc.end.offset))?(b.add(t),y.push(w(S,t,C))):t.type===`Raw`&&this.rule&&!b.has(this.rule)&&!x.has(this.rule)&&(x.add(this.rule),y.push(T(this.rule)))}),await Promise.all(y)}async function M(e,t){let{base:n,readSources:r,contents:i}=t,a=await b(e,n),o=await s(a.config),c=[],l=[];for(let e of a.config.content?.filesystem??[])e.startsWith(`!`)?l.push(e.slice(1)):c.push(e);let{files:u,sources:d}=i?{files:[],sources:i}:r?await r(c,l):{files:[],sources:[]},f=await C(o,u,d);return{layers:f.getLayers()||``,files:u,unknown:a.unknown,matched:f.matched.size,hasTeacss:a.hasTeacss,hasPreset:!!a.config.presets?.length}}function N(e,t){let n=[],r=[],i=[];for(let a of S(e))a.name===`charset`&&a.terminator===`;`?(n.push(e.slice(a.start,a.end)),i.push({start:a.start,end:a.end,replacement:``})):a.name===`import`&&a.terminator===`;`?(r.push(e.slice(a.start,a.end)),i.push({start:a.start,end:a.end,replacement:``})):(a.name===`preset`||a.name===`source`)&&a.terminator===`;`||a.name===`custom`&&a.terminator===`block`?i.push({start:a.start,end:a.end,replacement:``}):a.name===`teacss`&&a.prelude===``&&a.terminator!==`block`&&i.push({start:a.start,end:a.end,replacement:t});i.sort((e,t)=>e.start-t.start);let a=``,o=0;for(let t of i)a+=e.slice(o,t.start)+t.replacement,o=t.end;a+=e.slice(o);let s=a.startsWith(``)?``:``;s&&(a=a.slice(1));let c=[...n,...r];return s+(c.length?`${c.join(`
2
- `)}\n`:``)+a}function P(e={}){return{name:`@teacss/directives`,enforce:e.enforce,idFilter:l,transform:(t,n,r)=>j(t,r.generator,e,n)}}export{_ as customToTheme,P as default,v as diagnoseCustom,M as generateEntry,y as parseEntry,x as resolvePresets,N as spliceEntry,j as transformDirectives};
1
+ import{a as e,i as t,n,o as r,r as i,s as a,t as o}from"./screen-core-WpBOgdSr.js";import{createGenerator as s,expandVariantGroup as c,isCssId as l,splitClassTokens as u,toArray as d}from"@teacss/core";import{generate as f,parse as p,walk as m}from"css-tree";import{hasIconFn as h,hasThemeFn as g,transformThemeFn as _}from"@teacss/rule-helpers";import{customToTheme as v,diagnoseCustom as y,parseEntry as b,resolveEntryConfig as x,resolvePresets as S,scanTopLevelAtRules as C}from"@teacss/config";import{generateSources as w}from"@teacss/runtime/source-generation";async function T(e,t,n){let r=[],i=[],a=!1;for(let o of t.block.children)if(o.type===`Raw`)await n(o.value,o.loc.start.offset);else{let n=await E(e,t,o);if(!n)continue;r.push(n.consumedRange),i.push(...n.standaloneCss),a||=n.hasInlineUtility}let o=e.code.original,s=t.block.loc.start.offset+1,c=!1;for(let[e,t]of r){if(o.slice(s,e).trim()){c=!0;break}s=t}c||=!!o.slice(s,t.block.loc.end.offset-1).trim(),!a&&!c&&r.length>0&&e.code.remove(t.loc.start.offset,t.loc.end.offset);for(let n of i)e.code.appendLeft(t.loc.end.offset,n)}async function E({code:n,generator:o,applyVariable:s,options:l,filename:d},p,m){let h=n.original,g;if(m.type===`Atrule`&&m.name===`apply`&&m.prelude&&m.prelude.type===`Raw`)g=D(m.prelude.value.trim());else if(m.type===`Declaration`&&s.includes(m.property)&&(m.value.type===`Value`||m.value.type===`Raw`)){let e=h.slice(m.value.loc.start.offset,m.value.loc.end.offset).trim();e=D(e),g=u(e).map(e=>D(e)).join(` `)}if(!g)return;g=O(g),g=_(g,o.config.theme,l.throwOnMissing??!0);let v=await a(u(c(g)),o),y=t(v);if(y.length&&(l.throwOnMissing??!0))throw Error(`${i(y)}${d?` in ${d}`:``}`);let b=e(v,o.parentOrders),x=+(h[m.loc.end.offset]===`;`),S=[m.loc.start.offset,m.loc.end.offset+x];if(!b.length)return n.remove(...S),{consumedRange:S,hasInlineUtility:!1,standaloneCss:[]};let C,w=!1,T=[];for(let e of b)if(e.kind===`top-level`)T.push(e.body);else if(e.kind===`standalone`){if(!C){let e=p.prelude;C={prelude:e,selector:f(e),replacementSelector:n.slice(p.prelude.loc.start.offset,p.prelude.loc.end.offset)}}let t=r(C,e);T.push(t)}else w=!0,n.appendLeft(m.loc.start.offset,e.body);return S[1]=m.loc.end.offset+x,n.remove(...S),{consumedRange:S,hasInlineUtility:w,standaloneCss:T}}function D(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}function O(e){return e.replace(/\/\*[\s\S]*?\*\//g,``)}async function k({code:e,generator:t,options:r},i){let a=await n(t,i,(t,n)=>e.slice(t,n),r.throwOnMissing??!0);a!==void 0&&e.overwrite(i.loc.start.offset,i.loc.end.offset,a)}const A=/(@screen [^{]+).+/g;function j({code:e,generator:t},n){if(n.prelude?.type!==`Raw`)return;let r=o(n.prelude.value,t.config.theme);if(!r)return;let i=n.loc.start.offset,a=e.original.slice(i,n.loc.end.offset);for(let t of a.matchAll(A))e.overwrite(i+t.index,i+t.index+t[1].length,`@media ${r}`)}async function M(e,t,n,r,i,a){let{applyVariable:o}=n,s=n.varStyle;o===void 0&&(o=s===void 0?[`--at-apply`]:s?[`${s}apply`]:[]),o=d(o||[]);let c=e=>e.includes(`@apply`)||o.some(t=>e.includes(t)),l=i||e.original,u=c(l),f=l.includes(`@screen`),_=g(l)||h(l);if(!u&&!_&&!f)return;let v=p(l,{parseCustomProperty:!0,parseAtrulePrelude:!1,positions:!0,filename:r,offset:a});if(v.type!==`StyleSheet`)return;let y=[],b=new WeakSet,x=new WeakSet,S={options:n,applyVariable:o,generator:t,code:e,filename:r,offset:a},C=(i,a)=>M(e,t,n,r,i,a),w=async e=>{for(let t of e.block.children)t.type===`Raw`&&await C(t.value,t.loc.start.offset)};m(v,function(t){if(f&&t.type===`Atrule`&&t.name===`screen`)j(S,t);else if(_&&t.type===`Function`&&(t.name===`theme`||t.name===`icon`))return y.push(k(S,t)),this.skip;else u&&t.type===`Rule`&&c(e.original.slice(t.loc.start.offset,t.loc.end.offset))?(b.add(t),y.push(T(S,t,C))):t.type===`Raw`&&this.rule&&!b.has(this.rule)&&!x.has(this.rule)&&(x.add(this.rule),y.push(w(this.rule)))}),await Promise.all(y)}async function N(e,t){let{base:n,readSources:r,contents:i}=t,a=await x(e,n),o=await s(a.config),c=[],l=[];for(let e of a.config.content?.filesystem??[])e.startsWith(`!`)?l.push(e.slice(1)):c.push(e);let{files:u,sources:d}=i?{files:[],sources:i}:r?await r(c,l):{files:[],sources:[]},f=await w(o,u,d);return{layers:f.getLayers()||``,files:u,unknown:a.unknown,matched:f.matched.size,hasTeacss:a.hasTeacss,hasPreset:!!a.config.presets?.length}}function P(e,t){let n=[],r=[],i=[];for(let a of C(e))a.name===`charset`&&a.terminator===`;`?(n.push(e.slice(a.start,a.end)),i.push({start:a.start,end:a.end,replacement:``})):a.name===`import`&&a.terminator===`;`?(r.push(e.slice(a.start,a.end)),i.push({start:a.start,end:a.end,replacement:``})):(a.name===`preset`||a.name===`source`||a.name===`shortcut`)&&a.terminator===`;`||a.name===`custom`&&a.terminator===`block`?i.push({start:a.start,end:a.end,replacement:``}):a.name===`teacss`&&a.prelude===``&&a.terminator!==`block`&&i.push({start:a.start,end:a.end,replacement:t});i.sort((e,t)=>e.start-t.start);let a=``,o=0;for(let t of i)a+=e.slice(o,t.start)+t.replacement,o=t.end;a+=e.slice(o);let s=a.startsWith(``)?``:``;s&&(a=a.slice(1));let c=[...n,...r];return s+(c.length?`${c.join(`
2
+ `)}\n`:``)+a}function F(e={}){return{name:`@teacss/directives`,enforce:e.enforce,idFilter:l,transform:(t,n,r)=>M(t,r.generator,e,n)}}export{v as customToTheme,F as default,y as diagnoseCustom,N as generateEntry,b as parseEntry,S as resolvePresets,P as spliceEntry,M as transformDirectives};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teacss/directives",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Build-time CSS directive transformer for TeaCSS — @apply, theme(), icon(), and @screen.",
5
5
  "homepage": "https://css.teasim.com",
6
6
  "funding": "https://github.com/sponsors/billgo",
@@ -23,16 +23,16 @@
23
23
  "dev": "tsdown --watch"
24
24
  },
25
25
  "dependencies": {
26
- "@teacss/config": "0.3.1",
27
- "@teacss/core": "0.3.1",
28
- "@teacss/rule-helpers": "0.3.1",
29
- "@teacss/runtime": "0.3.1",
26
+ "@teacss/config": "0.3.3",
27
+ "@teacss/core": "0.3.3",
28
+ "@teacss/rule-helpers": "0.3.3",
29
+ "@teacss/runtime": "0.3.3",
30
30
  "@types/css-tree": "^2.3.11",
31
31
  "css-tree": "^3.2.1"
32
32
  },
33
33
  "devDependencies": {
34
- "@teacss/preset-icons": "0.3.1",
35
- "@teacss/preset-standard": "0.3.1",
34
+ "@teacss/preset-icons": "0.3.3",
35
+ "@teacss/preset-standard": "0.3.3",
36
36
  "magic-string": "^1.1.0"
37
37
  },
38
38
  "engines": {