@barocss/browser 0.10.2 → 0.11.0

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.cjs CHANGED
@@ -1,16 +1,19 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@barocss/kit");var t=class{insertSorted(t,n,r){let i=t.keys??=[],a=(0,e.upperBound)(i,r),o=t.styleElement.sheet;o&&o.cssRules.length===i.length?(o.insertRule(this.escapeCssRule(n),a),t.styles.splice(a,0,n)):(t.styles.splice(a,0,n),t.styleElement.textContent=t.styles.join(`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@barocss/kit");var t=class{constructor(t,n=50,r=`barocss-style-partition-`,i=t=>(0,e.parseClassName)(t).utility?.category,a=``){this.segments=[],this.specialPartitions=new Map,this.ruleSegment=new Map,this.partitionCounter=0,this.maxRulesPerPartition=50,this.styleIdPrefix=`barocss-style-partition-`,this.nonce=a,this.insertionPoint=t,this.maxRulesPerPartition=n,this.styleIdPrefix=r,this.getCategory=i,this.segments.push(this.createSegment(void 0,null))}createStyleElement(){let e=document.createElement(`style`);return this.nonce&&e.setAttribute(`nonce`,this.nonce),e}createSegment(e,t){let n=this.createStyleElement(),r={id:e===void 0?this.styleIdPrefix+`-${this.partitionCounter++}`:this.styleIdPrefix+`-${e}`,styles:[],keys:[],styleElement:n,category:e};n.id=r.id,n.setAttribute(`data-barocss`,`partition`),e===void 0?n.setAttribute(`data-partition-index`,this.partitionCounter.toString()):n.setAttribute(`data-category`,e);let i=t?t.styleElement:null,a=this.segments[0]?.styleElement;return i?.parentNode?i.parentNode.insertBefore(n,i.nextSibling):!t&&a?.parentNode?a.parentNode.insertBefore(n,a):this.insertionPoint.appendChild(n),r}createSpecialPartition(e,t=!1){let n={id:this.styleIdPrefix+`-${e}`,styles:[],styleElement:this.createStyleElement()};n.styleElement.id=n.id,n.styleElement.setAttribute(`data-barocss`,`partition`),n.styleElement.setAttribute(`data-category`,e);let r=this.insertionPoint.ownerDocument?.head;return t&&r?r.insertBefore(n.styleElement,r.firstChild):this.insertionPoint.appendChild(n.styleElement),this.specialPartitions.set(e,n),n}get currentPartition(){return this.segments[this.segments.length-1]}getCategoryPartition(e){return this.specialPartitions.get(e)??this.segments.find(t=>t.category===e)}hasDetachedPartitions(){return[...this.segments,...this.specialPartitions.values()].some(e=>!e.styleElement.isConnected)}escapeCssRule(e){return e.replace(/\\\//g,`\\/`)}insertAt(e,t,n,r){let i=e.keys??=[],a=e.styleElement.sheet;a&&a.cssRules.length===i.length?(a.insertRule(this.escapeCssRule(n),t),e.styles.splice(t,0,n)):(e.styles.splice(t,0,n),e.styleElement.textContent=e.styles.join(`
2
2
  `)+`
3
- `),i.splice(a,0,r)}constructor(t,n=50,r=`barocss-style-partition-`,i=t=>(0,e.parseClassName)(t).utility?.category,a=``){this.partitions=[],this.categoryPartitions=new Map,this.partitionCounter=0,this.maxRulesPerPartition=50,this.classToPartitionMap=new Map,this.classToCategoryPartitionMap=new Map,this.styleIdPrefix=`barocss-style-partition-`,this.nonce=a,this.insertionPoint=t,this.maxRulesPerPartition=n,this.styleIdPrefix=r,this.getCategory=i,this.initializeDefaultPartition()}createStyleElement(){let e=document.createElement(`style`);return this.nonce&&e.setAttribute(`nonce`,this.nonce),e}initializeDefaultPartition(){this.createNewPartition()}createNewCategoryPartition(e,t=!1){let n={id:this.styleIdPrefix+`-${e}`,styles:[],styleElement:this.createStyleElement()};n.styleElement.id=n.id,n.styleElement.setAttribute(`data-barocss`,`partition`),n.styleElement.setAttribute(`data-category`,e);let r=this.insertionPoint.ownerDocument?.head;return t&&r?r.insertBefore(n.styleElement,r.firstChild):this.insertionPoint.appendChild(n.styleElement),this.categoryPartitions.set(e,n),n}createNewPartition(){let e={id:this.styleIdPrefix+`-${this.partitionCounter++}`,styles:[],styleElement:this.createStyleElement()};return this.partitions.push(e),e.styleElement.id=e.id,e.styleElement.setAttribute(`data-barocss`,`partition`),e.styleElement.setAttribute(`data-partition-index`,this.partitionCounter.toString()),this.insertionPoint.appendChild(e.styleElement),e}hasRule(e){return this.classToPartitionMap.has(e)}hasCategoryRule(e,t){return this.classToCategoryPartitionMap.get(e)===t}setRuleCache(e,t){this.classToPartitionMap.set(e,t)}setCategoryRuleCache(e,t){this.classToCategoryPartitionMap.set(e,t)}get currentPartition(){return this.partitions[this.partitions.length-1]}getCategoryPartition(e){return this.categoryPartitions.get(e)}hasDetachedPartitions(){return[...this.partitions,...this.categoryPartitions.values()].some(e=>!e.styleElement.isConnected)}escapeCssRule(e){return e.replace(/\\\//g,`\\/`)}addRule(t){if(this.hasRule(t))return!1;let n=(0,e.ruleSortKey)(t),r=this.partitions.findIndex(t=>{let r=t.keys;return!!r&&r.length>0&&(0,e.compareKeys)(r[r.length-1],n)>0});r===-1&&(this.currentPartition.styles.length>=this.maxRulesPerPartition&&this.createNewPartition(),r=this.partitions.length-1);let i=this.partitions[r];try{return this.insertSorted(i,t,n),this.setRuleCache(t,r),!0}catch(n){return(0,e.isDebug)()&&console.warn(`[StylePartitionManager] Failed to insert rule: ${t}`,n),!1}}addCategoryRule(t,n){if(this.hasCategoryRule(t,n))return!1;let r=this.getCategoryPartition(n);r||=this.createNewCategoryPartition(n);try{this.insertSorted(r,t,(0,e.ruleSortKey)(t))}catch(r){return(0,e.isDebug)()&&console.warn(`[StylePartitionManager] Failed to insert rule in category: ${n} ${t}`,r),!1}return this.setCategoryRuleCache(t,n),!0}addRootRules(t){let n=this.getCategoryPartition(`root`);n||=this.createNewCategoryPartition(`root`);try{let e=n.styleElement.sheet;for(let r of t)e?e.insertRule(this.escapeCssRule(r),e.cssRules.length):n.styleElement.textContent+=r+`
4
- `}catch(n){return(0,e.isDebug)()&&console.warn(`[StylePartitionManager] Failed to insert rule in category: root ${t.join(`
5
- `)}`,n),{success:0,failed:t.length}}return{success:t.length,failed:0}}addRules(e){let t=0,n=0;for(let r of e){let e=this.getCategory(r.cls);if(e)for(let t of r.cssList)this.addCategoryRule(t,e);else for(let e of r.cssList)this.addRule(e)?t++:n++}return{success:t,failed:n}}removeRule(e,t){let n;if(t){if(this.classToCategoryPartitionMap.get(e)!==t)return!1;n=this.categoryPartitions.get(t)}else{let t=this.classToPartitionMap.get(e);n=t===void 0?void 0:this.partitions[t]}if(!n)return!1;let r=n.styles.indexOf(e);if(r===-1)return!1;let i=n.styleElement.sheet,a=!!i&&i.cssRules.length===n.styles.length;return n.styles.splice(r,1),n.keys?.splice(r,1),a&&i?i.deleteRule(r):n.styleElement.textContent=n.styles.length?n.styles.join(`
3
+ `),i.splice(t,0,r),this.ruleSegment.set(n,e)}split(e,t){let n=this.segments[e],r=this.createSegment(n.category,n);this.segments.splice(e+1,0,r);let i=n.styles.splice(t),a=n.keys.splice(t),o=n.styleElement.sheet;if(o&&o.cssRules.length===n.styles.length+i.length)for(let e=o.cssRules.length-1;e>=t;e--)o.deleteRule(e);else n.styleElement.textContent=n.styles.length?n.styles.join(`
6
4
  `)+`
7
- `:``,t?this.classToCategoryPartitionMap.delete(e):this.classToPartitionMap.delete(e),!0}get ruleCount(){return this.classToPartitionMap.size+this.classToCategoryPartitionMap.size}findRulePartition(e){let t=this.classToPartitionMap.get(e);if(t!==void 0&&this.partitions[t])return this.partitions[t];let n=this.classToCategoryPartitionMap.get(e);return n===void 0?null:this.categoryPartitions.get(n)||null}updateRuleContent(t,n,r=!1){let i=this.getCategoryPartition(t);if(i)i.styleElement.textContent=n;else{let i=this.createNewCategoryPartition(t,r);(0,e.isDebug)()&&console.log(`[StylePartitionManager] Created new partition for category: ${t}`),i.styleElement.textContent=n}}cleanup(){this.partitions.forEach(e=>{e.styleElement.parentNode&&e.styleElement.parentNode.removeChild(e.styleElement)}),this.categoryPartitions.forEach(e=>{e.styleElement.parentNode&&e.styleElement.parentNode.removeChild(e.styleElement)}),this.partitions=[],this.categoryPartitions.clear(),this.partitionCounter=0,this.classToPartitionMap.clear(),this.classToCategoryPartitionMap.clear()}},n=/[ \t\n\f\r]+/;function r(e){return e?typeof e==`object`&&typeof e.baseVal==`string`?e.baseVal:e.toString():``}function i(e){return e?r(e).split(n).filter(Boolean):[]}var a=class{constructor(t,n,r=t=>(0,e.parseClassName)(t).utility?.category){this.observer=null,this.gc=null,this.incrementalParser=t,this.BrowserRuntime=n,this.getCategory=r}setGc(e){this.gc=e}setParser(e){this.incrementalParser=e}observe(e=document.body,t){return typeof window>`u`?new MutationObserver(()=>{}):(this.observer&&this.observer.disconnect(),this.gc?.setRoot(e),this.observer=new MutationObserver(t=>{let n=new Set,r=this.gc;if(t.forEach(t=>{if(r&&(t.type===`attributes`?r.reconcile(t.target):t.type===`childList`&&(t.removedNodes.forEach(e=>r.reconcileTree(e)),t.addedNodes.forEach(e=>r.reconcileTree(e)))),t.type===`attributes`&&t.attributeName===`class`&&e.contains(t.target)){let e=t.target;e.className&&i(e.className).forEach(e=>{this.incrementalParser.isProcessed(e)||n.add(e)})}t.type===`childList`&&t.addedNodes.forEach(t=>{if(t.nodeType===Node.ELEMENT_NODE&&e.contains(t)){let e=t;this.processElement(e,n),e.querySelectorAll(`[class]`).forEach(e=>{this.processElement(e,n)})}})}),n.size>0){let e=Array.from(n),t=this.incrementalParser.processClasses(e);this.BrowserRuntime?.applyParseResults(t)}else this.BrowserRuntime?.applyParseResults([]);r?.afterBatch()}),this.observer.observe(e,{attributes:!0,subtree:!0,attributeFilter:[`class`],childList:!0}),t?.scan&&this.scanExistingClasses(e,t),this.observer)}scanExistingClasses(e,t){let n=new Set,r=e.className;r&&i(r).forEach(e=>{this.incrementalParser.isProcessed(e)||n.add(e)});let a=e.querySelectorAll(`[class]`);for(let e of a)if(e.className){let t=i(e.className);for(let e of t)this.incrementalParser.isProcessed(e)||n.add(e)}if(n.size>0){let e=Array.from(n),r=this.incrementalParser.processClasses(e),i=r.filter(e=>this.getCategory(e.cls)===`layout`),a=r.filter(e=>this.getCategory(e.cls)!==`layout`);this.BrowserRuntime?.applyParseResults(i),t?.onReady?.(),this.BrowserRuntime?.applyParseResults(a)}else t?.onReady?.()}processElement(e,t){e.className&&i(e.className).forEach(e=>{this.incrementalParser.isProcessed(e)||t.add(e)})}disconnect(){this.observer&&=(this.observer.disconnect(),null)}};function o(e){return e.replace(/\\([0-9a-fA-F]{1,6})\s?|\\(.)/g,(e,t,n)=>t?String.fromCodePoint(parseInt(t,16)):n)}var s=/^\s*(?::(?:where|is)\(\s*)?\.((?:\\[0-9a-fA-F]{1,6}\s?|\\.|[\w-]|[^\x00-\x7F])+)/;function c(e){let t=[],n=0,r=0;for(let i=0;i<e.length;i++){let a=e[i];a===`\\`?i++:a===`(`||a===`[`?n++:a===`)`||a===`]`?n--:a===`,`&&n===0&&(t.push(e.slice(r,i)),r=i+1)}return t.push(e.slice(r)),t}function l(e,t=new Set){for(let n of Array.from(e)){if(n.type===7&&typeof n.name==`string`){t.add(n.name);continue}let e=n.cssRules;e&&e.length&&l(e,t)}return t}function u(e,t=new Set){for(let n of Array.from(e)){let e=n.selectorText;if(typeof e==`string`)for(let n of c(e)){let e=s.exec(n);e&&t.add(o(e[1]))}let r=n.cssRules;r&&r.length&&u(r,t)}return t}var d=class{constructor(e,t,n,r=()=>Date.now()){this.host=e,this.graceMs=t,this.maxRules=n,this.now=r,this.counts=new Map,this.counted=new WeakMap,this.candidates=new Map,this.timer=null,this.root=null}setRoot(e){this.counts.clear(),this.counted=new WeakMap,this.candidates.clear(),this.cancel(),this.root=e,e.nodeType===1?this.reconcileTree(e):e.querySelectorAll(`[class]`).forEach(e=>this.reconcile(e))}count(e){return this.counts.get(e)??0}reconcileTree(e){if(e.nodeType!==1)return;let t=e;this.reconcile(t),t.querySelectorAll(`[class]`).forEach(e=>this.reconcile(e))}reconcile(e){let t=this.root,n=t&&t.contains(e)?Array.from(new Set(i(e.getAttribute(`class`)))):[],r=this.counted.get(e);if(!r&&n.length===0)return;let a=new Set(r??[]),o=new Set(n);for(let e of o){if(a.has(e))continue;let t=(this.counts.get(e)??0)+1;this.counts.set(e,t),this.candidates.delete(e)}for(let e of a){if(o.has(e))continue;let t=(this.counts.get(e)??0)-1;t>0?this.counts.set(e,t):(this.counts.delete(e),this.candidates.delete(e),this.candidates.set(e,this.now()))}n.length?this.counted.set(e,n):this.counted.delete(e)}afterBatch(){this.candidates.size!==0&&(this.host.cachedCount()>this.maxRules?this.schedule(0):this.schedule(this.graceMs))}schedule(e){if(this.timer!==null){if(e>0)return;clearTimeout(this.timer)}this.timer=setTimeout(()=>{this.timer=null,this.sweep()},e)}sweep(){let e=this.now(),t=Math.max(0,this.host.cachedCount()-this.maxRules),n=[],r=0;for(let[i,a]of this.candidates){let o=e-a>=this.graceMs;!o&&r>=t||(this.candidates.delete(i),!(this.count(i)>0||this.inDom(i)||this.host.isPermanent(i))&&(n.push(i),o||r++))}n.length&&this.host.reclaim(n),this.candidates.size&&this.schedule(this.graceMs)}inDom(e){let t=this.root;if(!t)return!1;if(t.nodeType!==1)return Array.from(t.querySelectorAll(`[class]`)).some(t=>t.classList.contains(e));let n=t.ownerDocument??document;return t.classList.contains(e)||n.documentElement.classList.contains(e)||n.getElementsByClassName(e).length>0}cancel(){this.timer!==null&&clearTimeout(this.timer),this.timer=null}stats(){return{trackedClasses:this.counts.size,candidates:this.candidates.size}}};function f(e){let t=[],n=e.replace(/\/\*[\s\S]*?\*\//g,``);return n=n.replace(/(?<=^|[{};])(\s*)([^{};@\s][^{};]*?)\{([^{}]*)\}/g,(e,n,r,i)=>{let a=r.split(`,`).map(e=>e.trim()).filter(Boolean);if(a.includes(`body`))for(let e of i.split(`;`).map(e=>e.trim()).filter(Boolean))/^(min-height|scroll-behavior)\s*:/.test(e)||t.push(e);let o=Array.from(new Set(a.filter(e=>e!==`body`).map(e=>e===`html`||e===`:root`?`:host`:e)));return o.length===0?``:`${n}${o.join(`, `)} {${i}}`}),t.length&&(n+=`\n@layer base {\n:host {\n ${t.join(`;
5
+ `:``;r.styles=i,r.keys=a,r.styleElement.textContent=i.length?i.join(`
6
+ `)+`
7
+ `:``;for(let e of i)this.ruleSegment.set(e,r);return r}hasRoom(e){return e.styles.length<this.maxRulesPerPartition}place(t,n,r){if(this.ruleSegment.has(t))return!1;let i=(0,e.ruleSortKey)(t,r),a=this.segments.findIndex(t=>{let n=t.keys;return n.length>0&&(0,e.compareKeys)(n[n.length-1],i)>0});a===-1&&(a=this.segments.length);let o=a<this.segments.length?(0,e.upperBound)(this.segments[a].keys,i):0,s=this.segments.some(e=>e.category===n);if(o>0){let e=this.segments[a];if(s&&this.hasRoom(e)||(this.split(a,o),s))return this.insertAt(e,o,t,i),!0;let r=this.createSegment(n,e);return this.segments.splice(a+1,0,r),this.insertAt(r,0,t,i),!0}let c=a-1;for(;c>0&&this.segments[c].styles.length===0;)c--;let l=[];if(s)for(let e=Math.max(c,0);e<=a&&e<this.segments.length;e++)this.hasRoom(this.segments[e])&&l.push(e);let u=l.find(e=>this.segments[e].category===n)??l[0];if(u!==void 0){let e=this.segments[u];return this.insertAt(e,u===a?0:e.styles.length,t,i),!0}let d=a>0?this.segments[a-1]:null,f=this.createSegment(n,d);return this.segments.splice(a,0,f),this.insertAt(f,0,t,i),!0}hasRule(e){return this.ruleSegment.has(e)}hasCategoryRule(e,t){return this.ruleSegment.has(e)}addRule(e,t){return this.tryPlace(e,void 0,t)}addCategoryRule(e,t,n){return this.tryPlace(e,t,n)}tryPlace(t,n,r){try{return this.place(t,n,r)}catch(r){return(0,e.isDebug)()&&console.warn(`[StylePartitionManager] Failed to insert rule${n?` in category: ${n}`:``}: ${t}`,r),!1}}addRootRules(t){let n=this.specialPartitions.get(`root`)??this.createSpecialPartition(`root`),r=n.styleElement.sheet,i=0,a=0;for(let o of t)if(o&&o.trim())try{r?r.insertRule(this.escapeCssRule(o),r.cssRules.length):n.styleElement.textContent+=o+`
8
+ `,i++}catch(t){a++,(0,e.isDebug)()&&console.warn(`[StylePartitionManager] Failed to insert rule in category: root ${o}`,t)}return{success:i,failed:a}}addRules(e){let t=0,n=0;for(let r of e){let e=this.getCategory(r.cls);for(let i of r.cssList)e?this.addCategoryRule(i,e,r.cls):this.addRule(i,r.cls)?t++:n++}return{success:t,failed:n}}removeRule(e,t){let n=this.ruleSegment.get(e);if(!n)return!1;let r=n.styles.indexOf(e);if(r===-1)return!1;let i=n.styleElement.sheet,a=!!i&&i.cssRules.length===n.styles.length;return n.styles.splice(r,1),n.keys?.splice(r,1),a&&i?i.deleteRule(r):n.styleElement.textContent=n.styles.length?n.styles.join(`
9
+ `)+`
10
+ `:``,this.ruleSegment.delete(e),!0}get ruleCount(){return this.ruleSegment.size}findRulePartition(e){return this.ruleSegment.get(e)??null}updateRuleContent(t,n,r=!1){let i=this.specialPartitions.get(t);if(i)i.styleElement.textContent=n;else{let i=this.createSpecialPartition(t,r);(0,e.isDebug)()&&console.log(`[StylePartitionManager] Created new partition for category: ${t}`),i.styleElement.textContent=n}}cleanup(){for(let e of[...this.segments,...this.specialPartitions.values()])e.styleElement.parentNode?.removeChild(e.styleElement);this.segments=[],this.specialPartitions.clear(),this.partitionCounter=0,this.ruleSegment.clear()}},n=/[ \t\n\f\r]+/;function r(e){return e?typeof e==`object`&&typeof e.baseVal==`string`?e.baseVal:e.toString():``}function i(e){return e?r(e).split(n).filter(Boolean):[]}var a=class{constructor(t,n,r=t=>(0,e.parseClassName)(t).utility?.category){this.observer=null,this.gc=null,this.incrementalParser=t,this.BrowserRuntime=n,this.getCategory=r}setGc(e){this.gc=e}setParser(e){this.incrementalParser=e}observe(e=document.body,t){return typeof window>`u`?new MutationObserver(()=>{}):(this.observer&&this.observer.disconnect(),this.gc?.setRoot(e),this.observer=new MutationObserver(t=>{let n=new Set,r=this.gc;if(t.forEach(t=>{if(r&&(t.type===`attributes`?r.reconcile(t.target):t.type===`childList`&&(t.removedNodes.forEach(e=>r.reconcileTree(e)),t.addedNodes.forEach(e=>r.reconcileTree(e)))),t.type===`attributes`&&t.attributeName===`class`&&e.contains(t.target)){let e=t.target;e.className&&i(e.className).forEach(e=>{this.incrementalParser.isProcessed(e)||n.add(e)})}t.type===`childList`&&t.addedNodes.forEach(t=>{if(t.nodeType===Node.ELEMENT_NODE&&e.contains(t)){let e=t;this.processElement(e,n),e.querySelectorAll(`[class]`).forEach(e=>{this.processElement(e,n)})}})}),n.size>0){let e=Array.from(n),t=this.incrementalParser.processClasses(e);this.BrowserRuntime?.applyParseResults(t)}else this.BrowserRuntime?.applyParseResults([]);r?.afterBatch()}),this.observer.observe(e,{attributes:!0,subtree:!0,attributeFilter:[`class`],childList:!0}),t?.scan&&this.scanExistingClasses(e,t),this.observer)}scanExistingClasses(e,t){let n=new Set,r=e.className;r&&i(r).forEach(e=>{this.incrementalParser.isProcessed(e)||n.add(e)});let a=e.querySelectorAll(`[class]`);for(let e of a)if(e.className){let t=i(e.className);for(let e of t)this.incrementalParser.isProcessed(e)||n.add(e)}if(n.size>0){let e=Array.from(n),r=this.incrementalParser.processClasses(e),i=r.filter(e=>this.getCategory(e.cls)===`layout`),a=r.filter(e=>this.getCategory(e.cls)!==`layout`);this.BrowserRuntime?.applyParseResults(i),t?.onReady?.(),this.BrowserRuntime?.applyParseResults(a)}else t?.onReady?.()}processElement(e,t){e.className&&i(e.className).forEach(e=>{this.incrementalParser.isProcessed(e)||t.add(e)})}disconnect(){this.observer&&=(this.observer.disconnect(),null)}};function o(e){return e.replace(/\\([0-9a-fA-F]{1,6})\s?|\\(.)/g,(e,t,n)=>t?String.fromCodePoint(parseInt(t,16)):n)}var s=/^\s*(?::(?:where|is)\(\s*)?\.((?:\\[0-9a-fA-F]{1,6}\s?|\\.|[\w-]|[^\x00-\x7F])+)/;function c(e){let t=[],n=0,r=0;for(let i=0;i<e.length;i++){let a=e[i];a===`\\`?i++:a===`(`||a===`[`?n++:a===`)`||a===`]`?n--:a===`,`&&n===0&&(t.push(e.slice(r,i)),r=i+1)}return t.push(e.slice(r)),t}function l(e,t=new Set){for(let n of Array.from(e)){if(n.type===7&&typeof n.name==`string`){t.add(n.name);continue}let e=n.cssRules;e&&e.length&&l(e,t)}return t}function u(e,t=new Set){for(let n of Array.from(e)){let e=n.selectorText;if(typeof e==`string`)for(let n of c(e)){let e=s.exec(n);e&&t.add(o(e[1]))}let r=n.cssRules;r&&r.length&&u(r,t)}return t}var d=class{constructor(e,t,n,r=()=>Date.now()){this.host=e,this.graceMs=t,this.maxRules=n,this.now=r,this.counts=new Map,this.counted=new WeakMap,this.candidates=new Map,this.timer=null,this.root=null}setRoot(e){this.counts.clear(),this.counted=new WeakMap,this.candidates.clear(),this.cancel(),this.root=e,e.nodeType===1?this.reconcileTree(e):e.querySelectorAll(`[class]`).forEach(e=>this.reconcile(e))}count(e){return this.counts.get(e)??0}reconcileTree(e){if(e.nodeType!==1)return;let t=e;this.reconcile(t),t.querySelectorAll(`[class]`).forEach(e=>this.reconcile(e))}reconcile(e){let t=this.root,n=t&&t.contains(e)?Array.from(new Set(i(e.getAttribute(`class`)))):[],r=this.counted.get(e);if(!r&&n.length===0)return;let a=new Set(r??[]),o=new Set(n);for(let e of o){if(a.has(e))continue;let t=(this.counts.get(e)??0)+1;this.counts.set(e,t),this.candidates.delete(e)}for(let e of a){if(o.has(e))continue;let t=(this.counts.get(e)??0)-1;t>0?this.counts.set(e,t):(this.counts.delete(e),this.candidates.delete(e),this.candidates.set(e,this.now()))}n.length?this.counted.set(e,n):this.counted.delete(e)}afterBatch(){this.candidates.size!==0&&(this.host.cachedCount()>this.maxRules?this.schedule(0):this.schedule(this.graceMs))}schedule(e){if(this.timer!==null){if(e>0)return;clearTimeout(this.timer)}this.timer=setTimeout(()=>{this.timer=null,this.sweep()},e)}sweep(){let e=this.now(),t=Math.max(0,this.host.cachedCount()-this.maxRules),n=[],r=0;for(let[i,a]of this.candidates){let o=e-a>=this.graceMs;!o&&r>=t||(this.candidates.delete(i),!(this.count(i)>0||this.inDom(i)||this.host.isPermanent(i))&&(n.push(i),o||r++))}n.length&&this.host.reclaim(n),this.candidates.size&&this.schedule(this.graceMs)}inDom(e){let t=this.root;if(!t)return!1;if(t.nodeType!==1)return Array.from(t.querySelectorAll(`[class]`)).some(t=>t.classList.contains(e));let n=t.ownerDocument??document;return t.classList.contains(e)||n.documentElement.classList.contains(e)||n.getElementsByClassName(e).length>0}cancel(){this.timer!==null&&clearTimeout(this.timer),this.timer=null}stats(){return{trackedClasses:this.counts.size,candidates:this.candidates.size}}};function f(e){let t=[],n=e.replace(/\/\*[\s\S]*?\*\//g,``);return n=n.replace(/(?<=^|[{};])(\s*)([^{};@\s][^{};]*?)\{([^{}]*)\}/g,(e,n,r,i)=>{let a=r.split(`,`).map(e=>e.trim()).filter(Boolean);if(a.includes(`body`))for(let e of i.split(`;`).map(e=>e.trim()).filter(Boolean))/^(min-height|scroll-behavior)\s*:/.test(e)||t.push(e);let o=Array.from(new Set(a.filter(e=>e!==`body`).map(e=>e===`html`||e===`:root`?`:host`:e)));return o.length===0?``:`${n}${o.join(`, `)} {${i}}`}),t.length&&(n+=`\n@layer base {\n:host {\n ${t.join(`;
8
11
  `)};\n}\n}\n`),n}function p(e){return JSON.stringify(e,(e,t)=>typeof t==`function`?`fn:${String(t)}`:t instanceof RegExp?`re:${t}`:t)??``}function m(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(36)}function h(e=`shadow`){try{let t=e===`document`?typeof Document<`u`?Document.prototype:void 0:typeof ShadowRoot<`u`?ShadowRoot.prototype:void 0;return!!t&&`adoptedStyleSheets`in t&&typeof CSSStyleSheet==`function`&&typeof new CSSStyleSheet().replaceSync==`function`}catch{return!1}}var g=e=>e.replace(/\\\//g,`\\/`),_=/^\s*@property\s/,v=null;function y(t,n,r={}){let i=n.filter(e=>_.test(e));if(i.length===0)return!0;try{if(!t)return!1;if(!v||v.doc!==t||v.style&&!v.style.isConnected){let e={doc:t,rules:new Set};if(r.constructable&&h(`document`))e.sheet=new CSSStyleSheet,t.adoptedStyleSheets=[...t.adoptedStyleSheets,e.sheet];else{let n=t.head??t.documentElement;if(!n)return!1;let i=t.createElement(`style`);i.setAttribute(`data-barocss`,`document-properties`),r.nonce&&i.setAttribute(`nonce`,r.nonce),n.appendChild(i),e.style=i}v=e}let e=v;for(let t of i){if(e.rules.has(t))continue;let n=e.sheet??e.style?.sheet??null;n?n.insertRule(g(t),n.cssRules.length):e.style&&(e.style.textContent+=`${t}\n`),e.rules.add(t)}return!0}catch(t){return(0,e.isDebug)()&&console.warn(`[BrowserRuntime] could not register @property rules in the document; using :host initial values`,t),!1}}function b(e){let t=[];for(let n of e){let e=/^\s*@property\s+(--[\w-]+)/.exec(n)?.[1],r=/initial-value\s*:\s*([^;}]*)/.exec(n)?.[1]?.trim();e&&r&&t.push(`${e}: ${r}`)}return t.length===0?``:`@layer properties {\n:host, *, ::before, ::after, ::backdrop {\n ${t.join(`;
9
12
  `)};\n}\n}`}var x=class{constructor(t,n,r=t,i={}){this.results=new Map,this.generations=0,this.prologueSheet=null,this.rulesSheet=null,this.prologue={props:``,preflight:``,vars:``},this.fallbackProps=new Set,this.segments=new Map([[`root`,{rules:[],keys:[]}],[``,{rules:[],keys:[]}]]),this.refs=new Map,this.attached=[],this.key=t,this.fullKey=r,this.context=i.context??(0,e.createContext)(n),this.constructable=h(i.target??`shadow`),this.constructable&&(this.prologueSheet=new CSSStyleSheet,this.rulesSheet=new CSSStyleSheet)}get rootCount(){return this.attached.length}get ruleCount(){return this.refs.size}attach(e,t=``){if(this.attached.some(t=>t.root===e))return;if(this.prologueSheet&&this.rulesSheet){let t=[this.prologueSheet,this.rulesSheet];e.adoptedStyleSheets=[...e.adoptedStyleSheets.filter(e=>!t.includes(e)),...t],this.attached.push({root:e});return}if(e.nodeType!==11)throw Error(`[BrowserRuntime] constructable sheets are not supported for the document`);let n=e.ownerDocument??document,r=n.createElement(`style`),i=n.createElement(`style`);t&&(r.setAttribute(`nonce`,t),i.setAttribute(`nonce`,t)),r.setAttribute(`data-barocss`,`root-prologue`),i.setAttribute(`data-barocss`,`root`),r.textContent=this.prologueText(),i.textContent=this.allRules().join(`
10
13
  `),e.insertBefore(i,e.firstChild),e.insertBefore(r,i),this.attached.push({root:e,styles:[r,i]})}detach(e){let t=this.attached.findIndex(t=>t.root===e);if(t===-1)return;let[n]=this.attached.splice(t,1);n.styles?n.styles.forEach(e=>e.remove()):e.adoptedStyleSheets&&=e.adoptedStyleSheets.filter(e=>e!==this.prologueSheet&&e!==this.rulesSheet)}addPropertyFallback(e){let t=this.fallbackProps.size;for(let t of e)_.test(t)&&this.fallbackProps.add(t);this.fallbackProps.size!==t&&this.setPrologue(`props`,b(Array.from(this.fallbackProps)))}setPrologue(e,t){if(this.prologue[e]===t)return;this.prologue[e]=t;let n=this.prologueText();this.prologueSheet&&this.prologueSheet.replaceSync(n);for(let e of this.attached)e.styles&&(e.styles[0].textContent=n)}prologueText(){return[this.prologue.props,this.prologue.preflight,this.prologue.vars].filter(Boolean).join(`
11
- `)}allRules(){return Array.from(this.segments.values()).flatMap(e=>e.rules)}offset(e){let t=0;for(let n of this.segments.values()){if(n===e)return t;t+=n.rules.length}return t}retain(t,n){let r=this.refs.get(t);if(r!==void 0)return this.refs.set(t,r+1),!0;let i=this.segments.get(n);i||(i={rules:[],keys:[]},this.segments.set(n,i));let a=n===`root`,o=(0,e.ruleSortKey)(t),s=a?i.rules.length:(0,e.upperBound)(i.keys,o),c=this.offset(i)+s;try{this.insertAt(t,c)}catch(n){return(0,e.isDebug)()&&console.warn(`[BrowserRuntime] Failed to insert rule into shadow root sheet: ${t}`,n),!1}return i.rules.splice(s,0,t),i.keys.splice(s,0,o),this.refs.set(t,1),!0}release(e){let t=this.refs.get(e);if(t!==void 0){if(t>1){this.refs.set(e,t-1);return}this.refs.delete(e);for(let t of this.segments.values()){let n=t.rules.indexOf(e);if(n===-1)continue;let r=this.offset(t)+n;t.rules.splice(n,1),t.keys.splice(n,1),this.deleteAt(r);return}}}insertAt(e,t){let n=g(e);if(this.rulesSheet){this.rulesSheet.insertRule(n,t);return}let r=this.allRules().length;for(let i of this.attached){let a=i.styles[1],o=a.sheet;if(o&&o.cssRules.length===r)o.insertRule(n,t);else{let n=this.allRules();n.splice(t,0,e),a.textContent=n.join(`
14
+ `)}allRules(){return Array.from(this.segments.values()).flatMap(e=>e.rules)}offset(e){let t=0;for(let n of this.segments.values()){if(n===e)return t;t+=n.rules.length}return t}retain(t,n,r){let i=this.refs.get(t);if(i!==void 0)return this.refs.set(t,i+1),!0;let a=this.segments.get(n);a||(a={rules:[],keys:[]},this.segments.set(n,a));let o=n===`root`,s=(0,e.ruleSortKey)(t,r),c=o?a.rules.length:(0,e.upperBound)(a.keys,s),l=this.offset(a)+c;try{this.insertAt(t,l)}catch(n){return(0,e.isDebug)()&&console.warn(`[BrowserRuntime] Failed to insert rule into shadow root sheet: ${t}`,n),!1}return a.rules.splice(c,0,t),a.keys.splice(c,0,s),this.refs.set(t,1),!0}release(e){let t=this.refs.get(e);if(t!==void 0){if(t>1){this.refs.set(e,t-1);return}this.refs.delete(e);for(let t of this.segments.values()){let n=t.rules.indexOf(e);if(n===-1)continue;let r=this.offset(t)+n;t.rules.splice(n,1),t.keys.splice(n,1),this.deleteAt(r);return}}}insertAt(e,t){let n=g(e);if(this.rulesSheet){this.rulesSheet.insertRule(n,t);return}let r=this.allRules().length;for(let i of this.attached){let a=i.styles[1],o=a.sheet;if(o&&o.cssRules.length===r)o.insertRule(n,t);else{let n=this.allRules();n.splice(t,0,e),a.textContent=n.join(`
12
15
  `)}}}deleteAt(e){if(this.rulesSheet){this.rulesSheet.deleteRule(e);return}let t=this.allRules().length;for(let n of this.attached){let r=n.styles[1],i=r.sheet;i&&i.cssRules.length===t+1?i.deleteRule(e):r.textContent=this.allRules().join(`
13
16
  `)}}cssText(){return[this.prologueText(),...this.allRules()].join(`
14
- `)}},S=new Map;function C(e,t=m){let n=p(e),r=S.get(n);return r||(r=new x(t(n),e,n),S.set(n,r)),r}function w(e){e.rootCount===0&&S.get(e.fullKey)===e&&S.delete(e.fullKey)}var T=class extends e.IncrementalParser{constructor(e){super(e.context),this.shared=e}processClass(e){if(this.isProcessed(e))return null;let t=this.shared.results.get(e);if(t)return this.markProcessed(e),t;let n=super.processClass(e);return n&&(this.shared.results.set(e,n),this.shared.generations++),n}},E=class{constructor(t,n,r=t=>(0,e.parseClassName)(t).utility?.category,i={}){this.shared=t,this.root=n,this.getCategory=r,this.opts=i,this.owned=new Set,this.scopePreflight=n.nodeType===11,t.attach(n,i.nonce)}hasDetachedPartitions(){return!1}updateRuleContent(e,t){e===`preflight`?this.shared.setPrologue(`preflight`,this.scopePreflight?f(t):t):e===`css-vars`&&this.shared.setPrologue(`vars`,t)}take(e,t){return this.owned.has(e)||(this.root.nodeType===11&&_.test(e)&&(y(this.root.ownerDocument??(typeof document<`u`?document:null),[e],this.opts)||this.shared.addPropertyFallback([e])),!this.shared.retain(e,t))?!1:(this.owned.add(e),!0)}addRule(e){return this.take(e,``)}addCategoryRule(e,t){return this.take(e,`c:${t}`)}addRootRules(e){let t=0;for(let n of e)this.take(n,`root`)&&t++;return{success:t,failed:e.length-t}}addRules(e){let t=0,n=0;for(let r of e){let e=this.getCategory(r.cls);for(let i of r.cssList)(e?this.addCategoryRule(i,e):this.addRule(i))?t++:n++}return{success:t,failed:n}}removeRule(e,t){return this.owned.delete(e)?(this.shared.release(e),!0):!1}get ruleCount(){return this.owned.size}cleanup(){this.owned.forEach(e=>this.shared.release(e)),this.owned.clear(),this.shared.detach(this.root),w(this.shared)}},D=`style[data-barocss-ssr]`,O=`@layer theme, base, components, utilities;`,k=class{constructor(t={}){this.cache=new Map,this.rootCache=new Set,this.shadowRoot=null,this.isDestroyed=!1,this.existing=null,this.existingKeyframes=new Set,this.existingSheetCount=-1,this.pinned=new Set,this.gc=null,this.reclaimedCount=0,this.ssrRules=[],this.ssrClasses=new Set,this.observedOnce=!1,this.getCategory=t=>(0,e.parseClassName)(t,this.context).utility?.category;let n={};this.options={config:t.config||n,styleId:t.styleId||`barocss-runtime`,insertionPoint:t.insertionPoint||`head`,maxRulesPerPartition:t.maxRulesPerPartition||50,skipExisting:t.skipExisting??!1,gc:t.gc??!0,gcGraceMs:t.gcGraceMs??3e3,maxRules:t.maxRules??1/0,nonce:t.nonce??``,constructable:t.constructable??!1};let r=t.root;if(r&&r.nodeType===11&&(this.shadowRoot=r),this.shadowRoot){let e=C(this.options.config);this.context=e.context,this.incrementalParser=new T(e)}else this.context=(0,e.createContext)(this.options.config),this.incrementalParser=new e.IncrementalParser(this.context);this.changeDetector=new a(this.incrementalParser,this,this.getCategory),this.stylePartitionManager=this.createStyles(),this.options.gc&&(this.gc=new d({reclaim:e=>this.reclaim(e),isPermanent:e=>this.isPermanent(e),cachedCount:()=>this.cache.size},this.options.gcGraceMs,this.options.maxRules),this.changeDetector.setGc(this.gc)),this.init(),this.shadowRoot&&this.observe(this.shadowRoot,{scan:!0})}createStyles(){if(this.shadowRoot){let e=this.incrementalParser.shared,t=C(this.options.config);return t!==e&&(e=t,this.context=e.context,this.incrementalParser=new T(e),this.changeDetector?.setParser(this.incrementalParser)),new E(e,this.shadowRoot,this.getCategory,{nonce:this.options.nonce,constructable:this.options.constructable})}return this.options.constructable&&typeof document<`u`&&h(`document`)?new E(new x(`document`,this.options.config,`document`,{context:this.context,target:`document`}),document,this.getCategory):new t(this.getInsertionPoint(),this.options.maxRulesPerPartition,`${this.options.styleId}-partition`,this.getCategory,this.options.nonce)}debugLog(t,n,r){(0,e.isDebug)()&&(console[t]||console.log)(`[BrowserRuntime:${t.toUpperCase()}] ${n}`,r||``)}init(){this.debugLog(`debug`,`init`),this.injectPreflightCSS(),this.ensureCssVars(),this.adoptSsrSheets()}adoptSsrSheets(){if(typeof document>`u`||this.shadowRoot)return;let e=[];if(document.head){for(let t of Array.from(document.head.querySelectorAll(`${D}:not([data-barocss-adopted])`))){let n=t.sheet;if(!n)continue;t.setAttribute(`data-barocss-adopted`,``);let r=[];for(let e=n.cssRules.length-1;e>=0;e--){let t=n.cssRules[e],i=u([t]);i.size!==0&&(i.forEach(e=>this.ssrClasses.add(e)),r.unshift({css:t.cssText,cls:i.values().next().value}),n.deleteRule(e))}e.push(...r)}e.length!==0&&(this.ssrRules.push(...e),this.insertSsrRules(e))}}insertSsrRules(e){for(let{css:t,cls:n}of e){let e=this.getCategory(n);e?this.stylePartitionManager.addCategoryRule(t,e):this.stylePartitionManager.addRule(t)}}injectPreflightCSS(){let e=this.options.config.preflight??!0;if(e){let t=this.context.getPreflightCSS(e);this.stylePartitionManager.updateRuleContent(`preflight`,`${O}\n@layer base {\n${t}\n}`,!0)}}ensureCssVars(){if(this.isDestroyed)return;let e=this.context.themeToCssVars?this.context.themeToCssVars():`:root { /* CSS Variables will be generated here */ }`;this.stylePartitionManager.updateRuleContent(`css-vars`,e)}getInsertionPoint(){if(typeof this.options.insertionPoint!=`string`)return this.options.insertionPoint;switch(this.options.insertionPoint){case`body`:return document.body||document.head;default:return document.head}}addClass(e){if(this.isDestroyed)return;let t=this.normalizeClasses(e).filter(Boolean);t.forEach(e=>this.pinned.add(e)),this.processClasses(t)}processClasses(e){this.processClassesIncremental(e)}processClassesIncremental(e){let t=typeof window<`u`,n=this.incrementalParser.processClasses(e);this.debugLog(`debug`,`results`,{results:n,classList:e}),this.applyParseResults(n,{isBrowser:t})}applyParseResults(e,t){if(this.isDestroyed)return;if(!this.shadowRoot&&this.getInsertionPoint().isConnected&&this.stylePartitionManager.hasDetachedPartitions()){let t=Array.from(this.cache.values());this.reset(),e=[...t,...e],e.forEach(e=>this.incrementalParser.markProcessed(e.cls))}if(this.ssrClasses.size>0&&(e=e.filter(e=>!this.ssrClasses.has(e.cls))),this.options.skipExisting&&e.length>0&&typeof document<`u`){let t=this.getExistingClasses();e=e.filter(e=>!t.has(e.cls))}if(e.length===0)return;let n=[],r=[],i=this.options.skipExisting&&typeof document<`u`?(this.getExistingClasses(),this.existingKeyframes):null;for(let t of e)if(t.css&&Array.isArray(t.cssList)&&(n.push(t),this.cache.set(t.cls,t)),t.rootCss&&Array.isArray(t.rootCssList))for(let e of t.rootCssList){if(i?.size){let t=/^\s*@keyframes\s+([^\s{]+)/.exec(e)?.[1];if(t&&i.has(t))continue}this.rootCache.has(e)||(this.rootCache.add(e),r.push(e))}r.length>0&&this.stylePartitionManager.addRootRules(r.filter(Boolean)),n.length>0&&this.stylePartitionManager.addRules(n),this.debugLog(`info`,`Applied ${e.length} parser results`,{cssRuleCount:n.length,rootCssCount:r.length})}isPermanent(e){return this.pinned.has(e)||this.ssrClasses.has(e)?!0:this.shadowRoot?!1:typeof document>`u`||this.getExistingClasses().has(e)}reclaim(e){if(this.isDestroyed)return;let t=e.filter(e=>this.cache.has(e));if(t.length===0)return;let n=t.map(e=>this.cache.get(e));t.forEach(e=>{this.cache.delete(e),this.incrementalParser.unmarkProcessed(e)});let r=new Set;for(let e of this.cache.values())e.cssList.forEach(e=>r.add(e));for(let e of n){let t=this.getCategory(e.cls);for(let n of e.cssList)r.has(n)||this.stylePartitionManager.removeRule(n,t)}this.reclaimedCount+=t.length}getExistingClasses(){let e=new Set(Array.from(document.querySelectorAll(`style[data-barocss]`),e=>e.sheet)),t=Array.from(document.styleSheets).filter(t=>{if(e.has(t))return!1;let n=t.ownerNode;return!(n&&typeof n.hasAttribute==`function`&&(n.hasAttribute(`data-barocss`)||(n.id||``).startsWith(this.options.styleId)))});if(this.existing&&t.length===this.existingSheetCount)return this.existing;let n=new Set,r=new Set;for(let e of t){let t;try{t=e.cssRules}catch{continue}u(t,n),l(t,r)}return this.existingKeyframes=r,this.existing=n,this.existingSheetCount=t.length,n}observe(e=this.shadowRoot??document.body,t){return this.observedOnce||(this.observedOnce=!0,this.adoptSsrSheets()),this.changeDetector.observe(e,t)}normalizeClasses(e){return(Array.isArray(e)?e:[e]).flatMap(i)}has(e){return this.cache.has(e)}getCss(e){return this.cache.get(e)?.cssList.join(`
17
+ `)}},S=new Map;function C(e,t=m){let n=p(e),r=S.get(n);return r||(r=new x(t(n),e,n),S.set(n,r)),r}function w(e){e.rootCount===0&&S.get(e.fullKey)===e&&S.delete(e.fullKey)}var T=class extends e.IncrementalParser{constructor(e){super(e.context),this.shared=e}processClass(e){if(this.isProcessed(e))return null;let t=this.shared.results.get(e);if(t)return this.markProcessed(e),t;let n=super.processClass(e);return n&&(this.shared.results.set(e,n),this.shared.generations++),n}},E=class{constructor(t,n,r=t=>(0,e.parseClassName)(t).utility?.category,i={}){this.shared=t,this.root=n,this.getCategory=r,this.opts=i,this.owned=new Set,this.scopePreflight=n.nodeType===11,t.attach(n,i.nonce)}hasDetachedPartitions(){return!1}updateRuleContent(e,t){e===`preflight`?this.shared.setPrologue(`preflight`,this.scopePreflight?f(t):t):e===`css-vars`&&this.shared.setPrologue(`vars`,t)}take(e,t,n){return this.owned.has(e)||(this.root.nodeType===11&&_.test(e)&&(y(this.root.ownerDocument??(typeof document<`u`?document:null),[e],this.opts)||this.shared.addPropertyFallback([e])),!this.shared.retain(e,t,n))?!1:(this.owned.add(e),!0)}addRule(e,t){return this.take(e,``,t)}addCategoryRule(e,t,n){return this.take(e,``,n)}addRootRules(e){let t=0;for(let n of e)this.take(n,`root`)&&t++;return{success:t,failed:e.length-t}}addRules(e){let t=0,n=0;for(let r of e){let e=this.getCategory(r.cls);for(let i of r.cssList)(e?this.addCategoryRule(i,e,r.cls):this.addRule(i,r.cls))?t++:n++}return{success:t,failed:n}}removeRule(e,t){return this.owned.delete(e)?(this.shared.release(e),!0):!1}get ruleCount(){return this.owned.size}cleanup(){this.owned.forEach(e=>this.shared.release(e)),this.owned.clear(),this.shared.detach(this.root),w(this.shared)}},D=`style[data-barocss-ssr]`,O=`@layer theme, base, components, utilities;`,k=class{constructor(t={}){this.cache=new Map,this.rootCache=new Set,this.shadowRoot=null,this.isDestroyed=!1,this.existing=null,this.existingKeyframes=new Set,this.existingSheetCount=-1,this.pinned=new Set,this.gc=null,this.reclaimedCount=0,this.ssrRules=[],this.ssrClasses=new Set,this.observedOnce=!1,this.getCategory=t=>(0,e.parseClassName)(t,this.context).utility?.category;let n={};this.options={config:t.config||n,styleId:t.styleId||`barocss-runtime`,insertionPoint:t.insertionPoint||`head`,maxRulesPerPartition:t.maxRulesPerPartition||50,skipExisting:t.skipExisting??!1,gc:t.gc??!0,gcGraceMs:t.gcGraceMs??3e3,maxRules:t.maxRules??1/0,nonce:t.nonce??``,constructable:t.constructable??!1};let r=t.root;if(r&&r.nodeType===11&&(this.shadowRoot=r),this.shadowRoot){let e=C(this.options.config);this.context=e.context,this.incrementalParser=new T(e)}else this.context=(0,e.createContext)(this.options.config),this.incrementalParser=new e.IncrementalParser(this.context);this.changeDetector=new a(this.incrementalParser,this,this.getCategory),this.stylePartitionManager=this.createStyles(),this.options.gc&&(this.gc=new d({reclaim:e=>this.reclaim(e),isPermanent:e=>this.isPermanent(e),cachedCount:()=>this.cache.size},this.options.gcGraceMs,this.options.maxRules),this.changeDetector.setGc(this.gc)),this.init(),this.shadowRoot&&this.observe(this.shadowRoot,{scan:!0})}createStyles(){if(this.shadowRoot){let e=this.incrementalParser.shared,t=C(this.options.config);return t!==e&&(e=t,this.context=e.context,this.incrementalParser=new T(e),this.changeDetector?.setParser(this.incrementalParser)),new E(e,this.shadowRoot,this.getCategory,{nonce:this.options.nonce,constructable:this.options.constructable})}return this.options.constructable&&typeof document<`u`&&h(`document`)?new E(new x(`document`,this.options.config,`document`,{context:this.context,target:`document`}),document,this.getCategory):new t(this.getInsertionPoint(),this.options.maxRulesPerPartition,`${this.options.styleId}-partition`,this.getCategory,this.options.nonce)}debugLog(t,n,r){(0,e.isDebug)()&&(console[t]||console.log)(`[BrowserRuntime:${t.toUpperCase()}] ${n}`,r||``)}init(){this.debugLog(`debug`,`init`),this.injectPreflightCSS(),this.ensureCssVars(),this.adoptSsrSheets()}adoptSsrSheets(){if(typeof document>`u`||this.shadowRoot)return;let e=[];if(document.head){for(let t of Array.from(document.head.querySelectorAll(`${D}:not([data-barocss-adopted])`))){let n=t.sheet;if(!n)continue;t.setAttribute(`data-barocss-adopted`,``);let r=[];for(let e=n.cssRules.length-1;e>=0;e--){let t=n.cssRules[e],i=u([t]);i.size!==0&&(i.forEach(e=>this.ssrClasses.add(e)),r.unshift({css:t.cssText,cls:i.values().next().value}),n.deleteRule(e))}e.push(...r)}e.length!==0&&(this.ssrRules.push(...e),this.insertSsrRules(e))}}insertSsrRules(e){for(let{css:t,cls:n}of e){let e=this.getCategory(n);e?this.stylePartitionManager.addCategoryRule(t,e,n):this.stylePartitionManager.addRule(t,n)}}injectPreflightCSS(){let e=this.options.config.preflight??!0;if(e){let t=this.context.getPreflightCSS(e);this.stylePartitionManager.updateRuleContent(`preflight`,`${O}\n@layer base {\n${t}\n}`,!0)}}ensureCssVars(){if(this.isDestroyed)return;let e=this.context.themeToCssVars?this.context.themeToCssVars():`:root { /* CSS Variables will be generated here */ }`;this.stylePartitionManager.updateRuleContent(`css-vars`,e)}getInsertionPoint(){if(typeof this.options.insertionPoint!=`string`)return this.options.insertionPoint;switch(this.options.insertionPoint){case`body`:return document.body||document.head;default:return document.head}}addClass(e){if(this.isDestroyed)return;let t=this.normalizeClasses(e).filter(Boolean);t.forEach(e=>this.pinned.add(e)),this.processClasses(t)}processClasses(e){this.processClassesIncremental(e)}processClassesIncremental(e){let t=typeof window<`u`,n=this.incrementalParser.processClasses(e);this.debugLog(`debug`,`results`,{results:n,classList:e}),this.applyParseResults(n,{isBrowser:t})}applyParseResults(e,t){if(this.isDestroyed)return;if(!this.shadowRoot&&this.getInsertionPoint().isConnected&&this.stylePartitionManager.hasDetachedPartitions()){let t=Array.from(this.cache.values());this.reset(),e=[...t,...e],e.forEach(e=>this.incrementalParser.markProcessed(e.cls))}if(this.ssrClasses.size>0&&(e=e.filter(e=>!this.ssrClasses.has(e.cls))),this.options.skipExisting&&e.length>0&&typeof document<`u`){let t=this.getExistingClasses();e=e.filter(e=>!t.has(e.cls))}if(e.length===0)return;let n=[],r=[],i=this.options.skipExisting&&typeof document<`u`?(this.getExistingClasses(),this.existingKeyframes):null;for(let t of e)if(t.css&&Array.isArray(t.cssList)&&(n.push(t),this.cache.set(t.cls,t)),t.rootCss&&Array.isArray(t.rootCssList))for(let e of t.rootCssList){if(i?.size){let t=/^\s*@keyframes\s+([^\s{]+)/.exec(e)?.[1];if(t&&i.has(t))continue}this.rootCache.has(e)||(this.rootCache.add(e),r.push(e))}r.length>0&&this.stylePartitionManager.addRootRules(r.filter(Boolean)),n.length>0&&this.stylePartitionManager.addRules(n),this.debugLog(`info`,`Applied ${e.length} parser results`,{cssRuleCount:n.length,rootCssCount:r.length})}isPermanent(e){return this.pinned.has(e)||this.ssrClasses.has(e)?!0:this.shadowRoot?!1:typeof document>`u`||this.getExistingClasses().has(e)}reclaim(e){if(this.isDestroyed)return;let t=e.filter(e=>this.cache.has(e));if(t.length===0)return;let n=t.map(e=>this.cache.get(e));t.forEach(e=>{this.cache.delete(e),this.incrementalParser.unmarkProcessed(e)});let r=new Set;for(let e of this.cache.values())e.cssList.forEach(e=>r.add(e));for(let e of n){let t=this.getCategory(e.cls);for(let n of e.cssList)r.has(n)||this.stylePartitionManager.removeRule(n,t)}this.reclaimedCount+=t.length}getExistingClasses(){let e=new Set(Array.from(document.querySelectorAll(`style[data-barocss]`),e=>e.sheet)),t=Array.from(document.styleSheets).filter(t=>{if(e.has(t))return!1;let n=t.ownerNode;return!(n&&typeof n.hasAttribute==`function`&&(n.hasAttribute(`data-barocss`)||(n.id||``).startsWith(this.options.styleId)))});if(this.existing&&t.length===this.existingSheetCount)return this.existing;let n=new Set,r=new Set;for(let e of t){let t;try{t=e.cssRules}catch{continue}u(t,n),l(t,r)}return this.existingKeyframes=r,this.existing=n,this.existingSheetCount=t.length,n}observe(e=this.shadowRoot??document.body,t){return this.observedOnce||(this.observedOnce=!0,this.adoptSsrSheets()),this.changeDetector.observe(e,t)}normalizeClasses(e){return(Array.isArray(e)?e:[e]).flatMap(i)}has(e){return this.cache.has(e)}getCss(e){return this.cache.get(e)?.cssList.join(`
15
18
  `)}getAllCss(){return[...this.rootCache,...Array.from(this.cache.values()).flatMap(e=>e.cssList)].join(`
16
19
  `)}getClasses(){return Array.from(this.cache.keys())}getCacheStats(){let e=this.incrementalParser.getStats();return{runtime:{cachedClasses:this.cache.size,rootCacheSize:this.rootCache.size,ruleCount:this.stylePartitionManager.ruleCount,reclaimedClasses:this.reclaimedCount,gc:this.gc?.stats()??null},ast:e.cacheStats.ast,incremental:e}}clearCaches(){this.isDestroyed||(this.cache.clear(),this.rootCache.clear(),(0,e.clearAstCache)(this.context),this.incrementalParser.clearProcessed(),this.stylePartitionManager.cleanup(),this.stylePartitionManager=this.createStyles(),this.injectPreflightCSS(),this.ensureCssVars(),this.insertSsrRules(this.ssrRules))}reset(){this.isDestroyed||(this.cache.clear(),this.rootCache.clear(),this.incrementalParser.clearProcessed(),this.stylePartitionManager.cleanup(),this.stylePartitionManager=this.createStyles(),this.injectPreflightCSS(),this.ensureCssVars(),this.insertSsrRules(this.ssrRules))}updateConfig(t){if(this.isDestroyed)return;let n=Array.from(this.cache.keys());if(this.options.config=t,this.shadowRoot){this.stylePartitionManager.cleanup();let e=C(t);this.context=e.context,this.incrementalParser=new T(e)}else this.context=(0,e.createContext)(t),this.incrementalParser=new e.IncrementalParser(this.context);this.changeDetector.setParser(this.incrementalParser),this.reset(),n.length>0&&this.addClass(n)}removeClass(e){if(this.isDestroyed)return;let t=new Set(this.normalizeClasses(e)),n=Array.from(this.cache.values()).filter(e=>!t.has(e.cls));n.length!==this.cache.size&&(this.reset(),n.forEach(e=>this.incrementalParser.markProcessed(e.cls)),this.applyParseResults(n))}destroy(){this.isDestroyed||=(this.changeDetector.disconnect(),this.gc?.cancel(),this.stylePartitionManager.cleanup(),this.cache.clear(),this.rootCache.clear(),!0)}getStats(){return{cachedClasses:this.cache.size,styleElementId:this.options.styleId,isDestroyed:this.isDestroyed,config:this.options.config,cacheStats:this.getCacheStats(),adopted:!this.shadowRoot&&this.stylePartitionManager instanceof E,sharedSheet:this.shadowRoot&&this.stylePartitionManager instanceof E?{roots:this.stylePartitionManager.shared.rootCount,rules:this.stylePartitionManager.shared.ruleCount,generations:this.stylePartitionManager.shared.generations,constructable:this.stylePartitionManager.shared.constructable}:null}}},A=null,j,M=``,N=!1,P=!1;function F(e={}){if(!A||A.getStats().isDestroyed?(A=new k(e),j=e.config,M=e.nonce??``,N=e.constructable??!1,P=!1):e.config&&e.config!==j&&(A.updateConfig(e.config),j=e.config),!P){let t=e.nonce!==void 0&&e.nonce!==M,n=e.constructable!==void 0&&e.constructable!==N;if(t||n){P=!0;let e=[t&&`nonce (runtime has ${M?`a different nonce`:`none`})`,n&&`constructable (runtime has ${N})`].filter(Boolean).join(` and `);console.warn(`[BaroCSS] runtime already created with a different ${e}; the new value is ignored. Pass nonce/constructable on the first getRuntime/baroStart call.`)}}return A}function I({loadingClassName:e=`baro-boot`,...t}={}){if(t.root&&t.root.nodeType===11)return new k(t);if(!document.body){document.addEventListener(`DOMContentLoaded`,()=>I({loadingClassName:e,...t}),{once:!0});return}let n=`${e}-doing`,r=`${e}-done`;try{document.body.classList.add(n),F(t).observe(document.body,{scan:!0,onReady:()=>{document.body.classList.remove(n),document.body.classList.add(r)}})}catch(e){document.body?.classList.remove(n),console.error(`BaroCSS boot failed:`,e)}}var L=I;function R(e){if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e.elements;if(!t||typeof t!=`object`||Array.isArray(t))return[];let n=new Set;for(let e of Object.keys(t)){let r=t[e];if(!r||typeof r!=`object`||Array.isArray(r))continue;let a=r.props;if(!a||typeof a!=`object`||Array.isArray(a))continue;let o=a.className;if(typeof o==`string`)for(let e of i(o))e&&n.add(e)}return Array.from(n)}function z(e,t){let n=R(e);n.length>0&&t.addClass(n)}var B={colors:Object.fromEntries(`background.foreground.card.card-foreground.popover.popover-foreground.primary.primary-foreground.secondary.secondary-foreground.muted.muted-foreground.accent.accent-foreground.destructive.border.input.ring.chart-1.chart-2.chart-3.chart-4.chart-5.sidebar.sidebar-foreground.sidebar-primary.sidebar-primary-foreground.sidebar-accent.sidebar-accent-foreground.sidebar-border.sidebar-ring`.split(`.`).map(e=>[e,`var(--${e})`])),borderRadius:{sm:`calc(var(--radius) - 4px)`,md:`calc(var(--radius) - 2px)`,lg:`var(--radius)`,xl:`calc(var(--radius) + 4px)`}};exports.BrowserRuntime=k,exports.ChangeDetector=a,exports.LAYER_ORDER=O,exports.SSR_STYLE_SELECTOR=D,exports.StylePartitionManager=t,exports.baroBoot=I,exports.baroStart=L,exports.collectJsonRenderClassNames=R,exports.getRuntime=F,exports.normalizeClassName=r,exports.normalizeClassNameList=i,exports.preloadJsonRenderClasses=z,exports.shadcnTheme=B;
package/dist/index.d.cts CHANGED
@@ -416,21 +416,19 @@ export declare interface StylePartition {
416
416
  styleElement: HTMLStyleElement;
417
417
  /** Sort keys parallel to `styles` / the sheet's cssRules (#254). */
418
418
  keys?: RuleKey[];
419
+ /** Utility category of a segment; undefined for an uncategorised chunk (#401). */
420
+ category?: string;
419
421
  }
420
422
 
421
423
  export declare class StylePartitionManager {
422
- /**
423
- * Insert `rule` at its Tailwind variant position within `partition` (#254):
424
- * one insertRule at a binary-searched index, no sheet rewrite.
425
- */
426
- private insertSorted;
427
- private partitions;
428
- private categoryPartitions;
424
+ /** Utility segments in document order (#401). */
425
+ private segments;
426
+ /** preflight / css-vars / root. */
427
+ private specialPartitions;
428
+ private ruleSegment;
429
429
  private partitionCounter;
430
430
  private maxRulesPerPartition;
431
431
  private insertionPoint;
432
- private classToPartitionMap;
433
- private classToCategoryPartitionMap;
434
432
  private styleIdPrefix;
435
433
  private getCategory;
436
434
  /** #347: CSP nonce set on every `<style>` this manager creates (empty = none). */
@@ -438,14 +436,15 @@ export declare class StylePartitionManager {
438
436
  constructor(insertionPoint: HTMLElement, maxRulesPerPartition?: number, styleIdPrefix?: string, getCategory?: (cls: string) => string | undefined, nonce?: string);
439
437
  /** A new `<style>`, carrying the #347 CSP nonce when one is configured. */
440
438
  private createStyleElement;
441
- private initializeDefaultPartition;
442
- private createNewCategoryPartition;
443
- private createNewPartition;
444
- hasRule(rule: string): boolean;
445
- hasCategoryRule(rule: string, category: string): boolean;
446
- setRuleCache(rule: string, partitionIndex: number): void;
447
- setCategoryRuleCache(rule: string, category: string): void;
439
+ /**
440
+ * A new utility segment whose element goes right after `after`'s (or first, before every current
441
+ * segment, when `after` is null and segments exist; appended to the insertion point otherwise).
442
+ * The caller splices it into `segments`.
443
+ */
444
+ private createSegment;
445
+ private createSpecialPartition;
448
446
  get currentPartition(): StylePartition;
447
+ /** The first segment of `category` (or a special partition). */
449
448
  getCategoryPartition(category: string): StylePartition | undefined;
450
449
  hasDetachedPartitions(): boolean;
451
450
  /**
@@ -454,8 +453,27 @@ export declare class StylePartitionManager {
454
453
  * - Prevent CSS syntax errors
455
454
  */
456
455
  private escapeCssRule;
457
- addRule(rule: string): boolean;
458
- addCategoryRule(rule: string, category: string): boolean;
456
+ /** Insert `rule` at `index` of `segment`: one insertRule, or a text rebuild when the sheet isn't in sync. */
457
+ private insertAt;
458
+ /** Move `segment`'s rules from `from` on into a new segment of the same category right after it. */
459
+ private split;
460
+ private hasRoom;
461
+ /**
462
+ * Put `rule` at its global position (#401). The position decides the cascade; the segment only
463
+ * decides which `<style>` holds it. A category's first rule opens a segment of that category (split
464
+ * at the position when it falls inside another segment); later rules join the segment at their
465
+ * position, preferring one of their own category at a boundary. Every segment holds at most
466
+ * `maxRulesPerPartition` rules (a full one is split at the position), which bounds the number of
467
+ * `<style>` elements by categories + rules / max instead of by category changes in the sorted order.
468
+ */
469
+ private place;
470
+ hasRule(rule: string): boolean;
471
+ /** #401: a segment's category is a label, not a guarantee, so any held rule counts. */
472
+ hasCategoryRule(rule: string, _category: string): boolean;
473
+ /** `cls` (the rule's class) is the sort's name tiebreak; it defaults to the selector's first class. */
474
+ addRule(rule: string, cls?: string): boolean;
475
+ addCategoryRule(rule: string, category: string, cls?: string): boolean;
476
+ private tryPlace;
459
477
  addRootRules(rules: string[]): {
460
478
  success: number;
461
479
  failed: number;
@@ -470,17 +488,13 @@ export declare class StylePartitionManager {
470
488
  * rebuild when the sheet isn't solely ours / has no CSSOM. Returns whether
471
489
  * the rule was found.
472
490
  */
473
- removeRule(rule: string, category?: string): boolean;
491
+ removeRule(rule: string, _category?: string): boolean;
474
492
  /** Number of generated (non-root, non-preflight) rules currently held. */
475
493
  get ruleCount(): number;
476
- /**
477
- * 특정 규칙이 어느 파티션에 있는지 찾기
478
- */
494
+ /** The partition holding `rule`, if any. */
479
495
  findRulePartition(rule: string): StylePartition | null;
480
496
  updateRuleContent(category: string, ruleContent: string, atDocumentStart?: boolean): void;
481
- /**
482
- * 모든 파티션 정리
483
- */
497
+ /** Remove every partition element and reset state. */
484
498
  cleanup(): void;
485
499
  }
486
500
 
package/dist/index.d.ts CHANGED
@@ -416,21 +416,19 @@ export declare interface StylePartition {
416
416
  styleElement: HTMLStyleElement;
417
417
  /** Sort keys parallel to `styles` / the sheet's cssRules (#254). */
418
418
  keys?: RuleKey[];
419
+ /** Utility category of a segment; undefined for an uncategorised chunk (#401). */
420
+ category?: string;
419
421
  }
420
422
 
421
423
  export declare class StylePartitionManager {
422
- /**
423
- * Insert `rule` at its Tailwind variant position within `partition` (#254):
424
- * one insertRule at a binary-searched index, no sheet rewrite.
425
- */
426
- private insertSorted;
427
- private partitions;
428
- private categoryPartitions;
424
+ /** Utility segments in document order (#401). */
425
+ private segments;
426
+ /** preflight / css-vars / root. */
427
+ private specialPartitions;
428
+ private ruleSegment;
429
429
  private partitionCounter;
430
430
  private maxRulesPerPartition;
431
431
  private insertionPoint;
432
- private classToPartitionMap;
433
- private classToCategoryPartitionMap;
434
432
  private styleIdPrefix;
435
433
  private getCategory;
436
434
  /** #347: CSP nonce set on every `<style>` this manager creates (empty = none). */
@@ -438,14 +436,15 @@ export declare class StylePartitionManager {
438
436
  constructor(insertionPoint: HTMLElement, maxRulesPerPartition?: number, styleIdPrefix?: string, getCategory?: (cls: string) => string | undefined, nonce?: string);
439
437
  /** A new `<style>`, carrying the #347 CSP nonce when one is configured. */
440
438
  private createStyleElement;
441
- private initializeDefaultPartition;
442
- private createNewCategoryPartition;
443
- private createNewPartition;
444
- hasRule(rule: string): boolean;
445
- hasCategoryRule(rule: string, category: string): boolean;
446
- setRuleCache(rule: string, partitionIndex: number): void;
447
- setCategoryRuleCache(rule: string, category: string): void;
439
+ /**
440
+ * A new utility segment whose element goes right after `after`'s (or first, before every current
441
+ * segment, when `after` is null and segments exist; appended to the insertion point otherwise).
442
+ * The caller splices it into `segments`.
443
+ */
444
+ private createSegment;
445
+ private createSpecialPartition;
448
446
  get currentPartition(): StylePartition;
447
+ /** The first segment of `category` (or a special partition). */
449
448
  getCategoryPartition(category: string): StylePartition | undefined;
450
449
  hasDetachedPartitions(): boolean;
451
450
  /**
@@ -454,8 +453,27 @@ export declare class StylePartitionManager {
454
453
  * - Prevent CSS syntax errors
455
454
  */
456
455
  private escapeCssRule;
457
- addRule(rule: string): boolean;
458
- addCategoryRule(rule: string, category: string): boolean;
456
+ /** Insert `rule` at `index` of `segment`: one insertRule, or a text rebuild when the sheet isn't in sync. */
457
+ private insertAt;
458
+ /** Move `segment`'s rules from `from` on into a new segment of the same category right after it. */
459
+ private split;
460
+ private hasRoom;
461
+ /**
462
+ * Put `rule` at its global position (#401). The position decides the cascade; the segment only
463
+ * decides which `<style>` holds it. A category's first rule opens a segment of that category (split
464
+ * at the position when it falls inside another segment); later rules join the segment at their
465
+ * position, preferring one of their own category at a boundary. Every segment holds at most
466
+ * `maxRulesPerPartition` rules (a full one is split at the position), which bounds the number of
467
+ * `<style>` elements by categories + rules / max instead of by category changes in the sorted order.
468
+ */
469
+ private place;
470
+ hasRule(rule: string): boolean;
471
+ /** #401: a segment's category is a label, not a guarantee, so any held rule counts. */
472
+ hasCategoryRule(rule: string, _category: string): boolean;
473
+ /** `cls` (the rule's class) is the sort's name tiebreak; it defaults to the selector's first class. */
474
+ addRule(rule: string, cls?: string): boolean;
475
+ addCategoryRule(rule: string, category: string, cls?: string): boolean;
476
+ private tryPlace;
459
477
  addRootRules(rules: string[]): {
460
478
  success: number;
461
479
  failed: number;
@@ -470,17 +488,13 @@ export declare class StylePartitionManager {
470
488
  * rebuild when the sheet isn't solely ours / has no CSSOM. Returns whether
471
489
  * the rule was found.
472
490
  */
473
- removeRule(rule: string, category?: string): boolean;
491
+ removeRule(rule: string, _category?: string): boolean;
474
492
  /** Number of generated (non-root, non-preflight) rules currently held. */
475
493
  get ruleCount(): number;
476
- /**
477
- * 특정 규칙이 어느 파티션에 있는지 찾기
478
- */
494
+ /** The partition holding `rule`, if any. */
479
495
  findRulePartition(rule: string): StylePartition | null;
480
496
  updateRuleContent(category: string, ruleContent: string, atDocumentStart?: boolean): void;
481
- /**
482
- * 모든 파티션 정리
483
- */
497
+ /** Remove every partition element and reset state. */
484
498
  cleanup(): void;
485
499
  }
486
500