@barocss/browser 0.10.3 → 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/cdn/barocss.js +1 -1
- package/dist/cdn/barocss.js.map +1 -1
- package/dist/cdn/barocss.umd.cjs +1 -1
- package/dist/cdn/barocss.umd.cjs.map +1 -1
- package/dist/index.cjs +10 -7
- package/dist/index.d.cts +39 -25
- package/dist/index.d.ts +39 -25
- package/dist/index.es.js +106 -105
- package/dist/index.umd.js +10 -7
- package/package.json +2 -2
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{
|
|
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(
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
private
|
|
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
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
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
|
-
|
|
458
|
-
|
|
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,
|
|
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
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
private
|
|
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
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
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
|
-
|
|
458
|
-
|
|
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,
|
|
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
|
|