@barocss/browser 0.9.0 → 0.10.1

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.es.js CHANGED
@@ -5,8 +5,12 @@ var c = class {
5
5
  let r = e.keys ??= [], i = s(r, n), a = e.styleElement.sheet;
6
6
  a && a.cssRules.length === r.length ? (a.insertRule(this.escapeCssRule(t), i), e.styles.splice(i, 0, t)) : (e.styles.splice(i, 0, t), e.styleElement.textContent = e.styles.join("\n") + "\n"), r.splice(i, 0, n);
7
7
  }
8
- constructor(e, t = 50, n = "barocss-style-partition-", r = (e) => a(e).utility?.category) {
9
- this.partitions = [], this.categoryPartitions = /* @__PURE__ */ new Map(), this.partitionCounter = 0, this.maxRulesPerPartition = 50, this.classToPartitionMap = /* @__PURE__ */ new Map(), this.classToCategoryPartitionMap = /* @__PURE__ */ new Map(), this.styleIdPrefix = "barocss-style-partition-", this.insertionPoint = e, this.maxRulesPerPartition = t, this.styleIdPrefix = n, this.getCategory = r, this.initializeDefaultPartition();
8
+ constructor(e, t = 50, n = "barocss-style-partition-", r = (e) => a(e).utility?.category, i = "") {
9
+ this.partitions = [], this.categoryPartitions = /* @__PURE__ */ new Map(), this.partitionCounter = 0, this.maxRulesPerPartition = 50, this.classToPartitionMap = /* @__PURE__ */ new Map(), this.classToCategoryPartitionMap = /* @__PURE__ */ new Map(), this.styleIdPrefix = "barocss-style-partition-", this.nonce = i, this.insertionPoint = e, this.maxRulesPerPartition = t, this.styleIdPrefix = n, this.getCategory = r, this.initializeDefaultPartition();
10
+ }
11
+ createStyleElement() {
12
+ let e = document.createElement("style");
13
+ return this.nonce && e.setAttribute("nonce", this.nonce), e;
10
14
  }
11
15
  initializeDefaultPartition() {
12
16
  this.createNewPartition();
@@ -15,7 +19,7 @@ var c = class {
15
19
  let n = {
16
20
  id: this.styleIdPrefix + `-${e}`,
17
21
  styles: [],
18
- styleElement: document.createElement("style")
22
+ styleElement: this.createStyleElement()
19
23
  };
20
24
  n.styleElement.id = n.id, n.styleElement.setAttribute("data-barocss", "partition"), n.styleElement.setAttribute("data-category", e);
21
25
  let r = this.insertionPoint.ownerDocument?.head;
@@ -25,7 +29,7 @@ var c = class {
25
29
  let e = {
26
30
  id: this.styleIdPrefix + `-${this.partitionCounter++}`,
27
31
  styles: [],
28
- styleElement: document.createElement("style")
32
+ styleElement: this.createStyleElement()
29
33
  };
30
34
  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;
31
35
  }
@@ -146,18 +150,16 @@ var c = class {
146
150
  e.styleElement.parentNode && e.styleElement.parentNode.removeChild(e.styleElement);
147
151
  }), this.partitions = [], this.categoryPartitions.clear(), this.partitionCounter = 0, this.classToPartitionMap.clear(), this.classToCategoryPartitionMap.clear();
148
152
  }
149
- };
150
- //#endregion
151
- //#region src/utils.ts
152
- function l(e) {
153
+ }, l = /[ \t\n\f\r]+/;
154
+ function u(e) {
153
155
  return e ? typeof e == "object" && typeof e.baseVal == "string" ? e.baseVal : e.toString() : "";
154
156
  }
155
- function u(e) {
156
- return e ? l(e).split(/\s+/).filter(Boolean) : [];
157
+ function d(e) {
158
+ return e ? u(e).split(l).filter(Boolean) : [];
157
159
  }
158
160
  //#endregion
159
161
  //#region src/change-detector.ts
160
- var d = class {
162
+ var f = class {
161
163
  constructor(e, t, n = (e) => a(e).utility?.category) {
162
164
  this.observer = null, this.gc = null, this.incrementalParser = e, this.BrowserRuntime = t, this.getCategory = n;
163
165
  }
@@ -173,7 +175,7 @@ var d = class {
173
175
  if (t.forEach((t) => {
174
176
  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)) {
175
177
  let e = t.target;
176
- e.className && u(e.className).forEach((e) => {
178
+ e.className && d(e.className).forEach((e) => {
177
179
  this.incrementalParser.isProcessed(e) || n.add(e);
178
180
  });
179
181
  }
@@ -199,12 +201,12 @@ var d = class {
199
201
  }
200
202
  scanExistingClasses(e, t) {
201
203
  let n = /* @__PURE__ */ new Set(), r = e.className;
202
- r && u(r).forEach((e) => {
204
+ r && d(r).forEach((e) => {
203
205
  this.incrementalParser.isProcessed(e) || n.add(e);
204
206
  });
205
207
  let i = e.querySelectorAll("[class]");
206
208
  for (let e of i) if (e.className) {
207
- let t = u(e.className);
209
+ let t = d(e.className);
208
210
  for (let e of t) this.incrementalParser.isProcessed(e) || n.add(e);
209
211
  }
210
212
  if (n.size > 0) {
@@ -213,7 +215,7 @@ var d = class {
213
215
  } else t?.onReady?.();
214
216
  }
215
217
  processElement(e, t) {
216
- e.className && u(e.className).forEach((e) => {
218
+ e.className && d(e.className).forEach((e) => {
217
219
  this.incrementalParser.isProcessed(e) || t.add(e);
218
220
  });
219
221
  }
@@ -223,11 +225,11 @@ var d = class {
223
225
  };
224
226
  //#endregion
225
227
  //#region src/existing-classes.ts
226
- function f(e) {
228
+ function p(e) {
227
229
  return e.replace(/\\([0-9a-fA-F]{1,6})\s?|\\(.)/g, (e, t, n) => t ? String.fromCodePoint(parseInt(t, 16)) : n);
228
230
  }
229
- var p = /^\s*(?::(?:where|is)\(\s*)?\.((?:\\[0-9a-fA-F]{1,6}\s?|\\.|[\w-]|[^\x00-\x7F])+)/;
230
- function m(e) {
231
+ var m = /^\s*(?::(?:where|is)\(\s*)?\.((?:\\[0-9a-fA-F]{1,6}\s?|\\.|[\w-]|[^\x00-\x7F])+)/;
232
+ function h(e) {
231
233
  let t = [], n = 0, r = 0;
232
234
  for (let i = 0; i < e.length; i++) {
233
235
  let a = e[i];
@@ -235,32 +237,32 @@ function m(e) {
235
237
  }
236
238
  return t.push(e.slice(r)), t;
237
239
  }
238
- function h(e, t = /* @__PURE__ */ new Set()) {
240
+ function g(e, t = /* @__PURE__ */ new Set()) {
239
241
  for (let n of Array.from(e)) {
240
242
  if (n.type === 7 && typeof n.name == "string") {
241
243
  t.add(n.name);
242
244
  continue;
243
245
  }
244
246
  let e = n.cssRules;
245
- e && e.length && h(e, t);
247
+ e && e.length && g(e, t);
246
248
  }
247
249
  return t;
248
250
  }
249
- function g(e, t = /* @__PURE__ */ new Set()) {
251
+ function _(e, t = /* @__PURE__ */ new Set()) {
250
252
  for (let n of Array.from(e)) {
251
253
  let e = n.selectorText;
252
- if (typeof e == "string") for (let n of m(e)) {
253
- let e = p.exec(n);
254
- e && t.add(f(e[1]));
254
+ if (typeof e == "string") for (let n of h(e)) {
255
+ let e = m.exec(n);
256
+ e && t.add(p(e[1]));
255
257
  }
256
258
  let r = n.cssRules;
257
- r && r.length && g(r, t);
259
+ r && r.length && _(r, t);
258
260
  }
259
261
  return t;
260
262
  }
261
263
  //#endregion
262
264
  //#region src/class-gc.ts
263
- var _ = class {
265
+ var v = class {
264
266
  constructor(e, t, n, r = () => Date.now()) {
265
267
  this.host = e, this.graceMs = t, this.maxRules = n, this.now = r, this.counts = /* @__PURE__ */ new Map(), this.counted = /* @__PURE__ */ new WeakMap(), this.candidates = /* @__PURE__ */ new Map(), this.timer = null, this.root = null;
266
268
  }
@@ -276,7 +278,7 @@ var _ = class {
276
278
  this.reconcile(t), t.querySelectorAll("[class]").forEach((e) => this.reconcile(e));
277
279
  }
278
280
  reconcile(e) {
279
- let t = this.root, n = t && t.contains(e) ? Array.from(new Set(u(e.getAttribute("class")))) : [], r = this.counted.get(e);
281
+ let t = this.root, n = t && t.contains(e) ? Array.from(new Set(d(e.getAttribute("class")))) : [], r = this.counted.get(e);
280
282
  if (!r && n.length === 0) return;
281
283
  let i = new Set(r ?? []), a = new Set(n);
282
284
  for (let e of a) {
@@ -330,7 +332,7 @@ var _ = class {
330
332
  };
331
333
  //#endregion
332
334
  //#region src/shadow-root-sheet.ts
333
- function v(e) {
335
+ function y(e) {
334
336
  let t = [], n = e.replace(/\/\*[\s\S]*?\*\//g, "");
335
337
  return n = n.replace(/(?<=^|[{};])(\s*)([^{};@\s][^{};]*?)\{([^{}]*)\}/g, (e, n, r, i) => {
336
338
  let a = r.split(",").map((e) => e.trim()).filter(Boolean);
@@ -339,23 +341,24 @@ function v(e) {
339
341
  return o.length === 0 ? "" : `${n}${o.join(", ")} {${i}}`;
340
342
  }), t.length && (n += `\n@layer base {\n:host {\n ${t.join(";\n ")};\n}\n}\n`), n;
341
343
  }
342
- function y(e) {
344
+ function b(e) {
343
345
  return JSON.stringify(e, (e, t) => typeof t == "function" ? `fn:${String(t)}` : t instanceof RegExp ? `re:${t}` : t) ?? "";
344
346
  }
345
- function b(e) {
347
+ function x(e) {
346
348
  let t = 2166136261;
347
349
  for (let n = 0; n < e.length; n++) t ^= e.charCodeAt(n), t = Math.imul(t, 16777619);
348
350
  return (t >>> 0).toString(36);
349
351
  }
350
- function x() {
352
+ function S(e = "shadow") {
351
353
  try {
352
- return typeof ShadowRoot < "u" && "adoptedStyleSheets" in ShadowRoot.prototype && typeof CSSStyleSheet == "function" && typeof new CSSStyleSheet().replaceSync == "function";
354
+ let t = e === "document" ? typeof Document < "u" ? Document.prototype : void 0 : typeof ShadowRoot < "u" ? ShadowRoot.prototype : void 0;
355
+ return !!t && "adoptedStyleSheets" in t && typeof CSSStyleSheet == "function" && typeof new CSSStyleSheet().replaceSync == "function";
353
356
  } catch {
354
357
  return !1;
355
358
  }
356
359
  }
357
- var S = (e) => e.replace(/\\\//g, "\\/"), C = class {
358
- constructor(e, t, n = e) {
360
+ var C = (e) => e.replace(/\\\//g, "\\/"), w = class {
361
+ constructor(e, t, n = e, i = {}) {
359
362
  this.results = /* @__PURE__ */ new Map(), this.generations = 0, this.prologueSheet = null, this.rulesSheet = null, this.prologue = {
360
363
  preflight: "",
361
364
  vars: ""
@@ -365,7 +368,7 @@ var S = (e) => e.replace(/\\\//g, "\\/"), C = class {
365
368
  }], ["", {
366
369
  rules: [],
367
370
  keys: []
368
- }]]), this.refs = /* @__PURE__ */ new Map(), this.attached = [], this.key = e, this.fullKey = n, this.context = r(t), this.constructable = x(), this.constructable && (this.prologueSheet = new CSSStyleSheet(), this.rulesSheet = new CSSStyleSheet());
371
+ }]]), this.refs = /* @__PURE__ */ new Map(), this.attached = [], this.key = e, this.fullKey = n, this.context = i.context ?? r(t), this.constructable = S(i.target ?? "shadow"), this.constructable && (this.prologueSheet = new CSSStyleSheet(), this.rulesSheet = new CSSStyleSheet());
369
372
  }
370
373
  get rootCount() {
371
374
  return this.attached.length;
@@ -373,17 +376,18 @@ var S = (e) => e.replace(/\\\//g, "\\/"), C = class {
373
376
  get ruleCount() {
374
377
  return this.refs.size;
375
378
  }
376
- attach(e) {
379
+ attach(e, t = "") {
377
380
  if (this.attached.some((t) => t.root === e)) return;
378
381
  if (this.prologueSheet && this.rulesSheet) {
379
382
  let t = [this.prologueSheet, this.rulesSheet];
380
383
  e.adoptedStyleSheets = [...e.adoptedStyleSheets.filter((e) => !t.includes(e)), ...t], this.attached.push({ root: e });
381
384
  return;
382
385
  }
383
- let t = e.ownerDocument ?? document, n = t.createElement("style"), r = t.createElement("style");
384
- n.setAttribute("data-barocss", "root-prologue"), r.setAttribute("data-barocss", "root"), n.textContent = this.prologueText(), r.textContent = this.allRules().join("\n"), e.insertBefore(r, e.firstChild), e.insertBefore(n, r), this.attached.push({
386
+ if (e.nodeType !== 11) throw Error("[BrowserRuntime] constructable sheets are not supported for the document");
387
+ let n = e.ownerDocument ?? document, r = n.createElement("style"), i = n.createElement("style");
388
+ 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("\n"), e.insertBefore(i, e.firstChild), e.insertBefore(r, i), this.attached.push({
385
389
  root: e,
386
- styles: [n, r]
390
+ styles: [r, i]
387
391
  });
388
392
  }
389
393
  detach(e) {
@@ -447,7 +451,7 @@ var S = (e) => e.replace(/\\\//g, "\\/"), C = class {
447
451
  }
448
452
  }
449
453
  insertAt(e, t) {
450
- let n = S(e);
454
+ let n = C(e);
451
455
  if (this.rulesSheet) {
452
456
  this.rulesSheet.insertRule(n, t);
453
457
  return;
@@ -476,15 +480,15 @@ var S = (e) => e.replace(/\\\//g, "\\/"), C = class {
476
480
  cssText() {
477
481
  return [this.prologueText(), ...this.allRules()].join("\n");
478
482
  }
479
- }, w = /* @__PURE__ */ new Map();
480
- function T(e, t = b) {
481
- let n = y(e), r = w.get(n);
482
- return r || (r = new C(t(n), e, n), w.set(n, r)), r;
483
+ }, T = /* @__PURE__ */ new Map();
484
+ function E(e, t = x) {
485
+ let n = b(e), r = T.get(n);
486
+ return r || (r = new w(t(n), e, n), T.set(n, r)), r;
483
487
  }
484
- function E(e) {
485
- e.rootCount === 0 && w.get(e.fullKey) === e && w.delete(e.fullKey);
488
+ function D(e) {
489
+ e.rootCount === 0 && T.get(e.fullKey) === e && T.delete(e.fullKey);
486
490
  }
487
- var D = class extends e {
491
+ var O = class extends e {
488
492
  constructor(e) {
489
493
  super(e.context), this.shared = e;
490
494
  }
@@ -495,15 +499,15 @@ var D = class extends e {
495
499
  let n = super.processClass(e);
496
500
  return n && (this.shared.results.set(e, n), this.shared.generations++), n;
497
501
  }
498
- }, O = class {
499
- constructor(e, t, n = (e) => a(e).utility?.category) {
500
- this.shared = e, this.root = t, this.getCategory = n, this.owned = /* @__PURE__ */ new Set(), e.attach(t);
502
+ }, k = class {
503
+ constructor(e, t, n = (e) => a(e).utility?.category, r = {}) {
504
+ this.shared = e, this.root = t, this.getCategory = n, this.owned = /* @__PURE__ */ new Set(), this.scopePreflight = t.nodeType === 11, e.attach(t, r.nonce);
501
505
  }
502
506
  hasDetachedPartitions() {
503
507
  return !1;
504
508
  }
505
509
  updateRuleContent(e, t) {
506
- e === "preflight" ? this.shared.setPrologue("preflight", v(t)) : e === "css-vars" && this.shared.setPrologue("vars", t);
510
+ e === "preflight" ? this.shared.setPrologue("preflight", this.scopePreflight ? y(t) : t) : e === "css-vars" && this.shared.setPrologue("vars", t);
507
511
  }
508
512
  take(e, t) {
509
513
  return this.owned.has(e) || !this.shared.retain(e, t) ? !1 : (this.owned.add(e), !0);
@@ -540,9 +544,9 @@ var D = class extends e {
540
544
  return this.owned.size;
541
545
  }
542
546
  cleanup() {
543
- this.owned.forEach((e) => this.shared.release(e)), this.owned.clear(), this.shared.detach(this.root), E(this.shared);
547
+ this.owned.forEach((e) => this.shared.release(e)), this.owned.clear(), this.shared.detach(this.root), D(this.shared);
544
548
  }
545
- }, k = "style[data-barocss-ssr]", A = "@layer theme, base, components, utilities;", j = class {
549
+ }, A = "style[data-barocss-ssr]", j = "@layer theme, base, components, utilities;", M = class {
546
550
  constructor(t = {}) {
547
551
  this.cache = /* @__PURE__ */ new Map(), this.rootCache = /* @__PURE__ */ new Set(), this.shadowRoot = null, this.isDestroyed = !1, this.existing = null, this.existingKeyframes = /* @__PURE__ */ new Set(), this.existingSheetCount = -1, this.pinned = /* @__PURE__ */ new Set(), this.gc = null, this.reclaimedCount = 0, this.ssrRules = [], this.ssrClasses = /* @__PURE__ */ new Set(), this.observedOnce = !1, this.getCategory = (e) => a(e, this.context).utility?.category;
548
552
  let n = {};
@@ -554,14 +558,16 @@ var D = class extends e {
554
558
  skipExisting: t.skipExisting ?? !1,
555
559
  gc: t.gc ?? !0,
556
560
  gcGraceMs: t.gcGraceMs ?? 3e3,
557
- maxRules: t.maxRules ?? Infinity
561
+ maxRules: t.maxRules ?? Infinity,
562
+ nonce: t.nonce ?? "",
563
+ constructable: t.constructable ?? !1
558
564
  };
559
565
  let i = t.root;
560
566
  if (i && i.nodeType === 11 && (this.shadowRoot = i), this.shadowRoot) {
561
- let e = T(this.options.config);
562
- this.context = e.context, this.incrementalParser = new D(e);
567
+ let e = E(this.options.config);
568
+ this.context = e.context, this.incrementalParser = new O(e);
563
569
  } else this.context = r(this.options.config), this.incrementalParser = new e(this.context);
564
- this.changeDetector = new d(this.incrementalParser, this, this.getCategory), this.stylePartitionManager = this.createStyles(), this.options.gc && (this.gc = new _({
570
+ this.changeDetector = new f(this.incrementalParser, this, this.getCategory), this.stylePartitionManager = this.createStyles(), this.options.gc && (this.gc = new v({
565
571
  reclaim: (e) => this.reclaim(e),
566
572
  isPermanent: (e) => this.isPermanent(e),
567
573
  cachedCount: () => this.cache.size
@@ -569,10 +575,13 @@ var D = class extends e {
569
575
  }
570
576
  createStyles() {
571
577
  if (this.shadowRoot) {
572
- let e = this.incrementalParser.shared, t = T(this.options.config);
573
- return t !== e && (e = t, this.context = e.context, this.incrementalParser = new D(e), this.changeDetector?.setParser(this.incrementalParser)), new O(e, this.shadowRoot, this.getCategory);
578
+ let e = this.incrementalParser.shared, t = E(this.options.config);
579
+ return t !== e && (e = t, this.context = e.context, this.incrementalParser = new O(e), this.changeDetector?.setParser(this.incrementalParser)), new k(e, this.shadowRoot, this.getCategory, { nonce: this.options.nonce });
574
580
  }
575
- return new c(this.getInsertionPoint(), this.options.maxRulesPerPartition, `${this.options.styleId}-partition`, this.getCategory);
581
+ return this.options.constructable && typeof document < "u" && S("document") ? new k(new w("document", this.options.config, "document", {
582
+ context: this.context,
583
+ target: "document"
584
+ }), document, this.getCategory) : new c(this.getInsertionPoint(), this.options.maxRulesPerPartition, `${this.options.styleId}-partition`, this.getCategory, this.options.nonce);
576
585
  }
577
586
  debugLog(e, t, n) {
578
587
  i() && (console[e] || console.log)(`[BrowserRuntime:${e.toUpperCase()}] ${t}`, n || "");
@@ -584,13 +593,13 @@ var D = class extends e {
584
593
  if (typeof document > "u" || this.shadowRoot) return;
585
594
  let e = [];
586
595
  if (document.head) {
587
- for (let t of Array.from(document.head.querySelectorAll(`${k}:not([data-barocss-adopted])`))) {
596
+ for (let t of Array.from(document.head.querySelectorAll(`${A}:not([data-barocss-adopted])`))) {
588
597
  let n = t.sheet;
589
598
  if (!n) continue;
590
599
  t.setAttribute("data-barocss-adopted", "");
591
600
  let r = [];
592
601
  for (let e = n.cssRules.length - 1; e >= 0; e--) {
593
- let t = n.cssRules[e], i = g([t]);
602
+ let t = n.cssRules[e], i = _([t]);
594
603
  i.size !== 0 && (i.forEach((e) => this.ssrClasses.add(e)), r.unshift({
595
604
  css: t.cssText,
596
605
  cls: i.values().next().value
@@ -611,7 +620,7 @@ var D = class extends e {
611
620
  let e = this.options.config.preflight ?? !0;
612
621
  if (e) {
613
622
  let t = this.context.getPreflightCSS(e);
614
- this.stylePartitionManager.updateRuleContent("preflight", `${A}\n@layer base {\n${t}\n}`, !0);
623
+ this.stylePartitionManager.updateRuleContent("preflight", `${j}\n@layer base {\n${t}\n}`, !0);
615
624
  }
616
625
  }
617
626
  ensureCssVars() {
@@ -699,7 +708,7 @@ var D = class extends e {
699
708
  } catch {
700
709
  continue;
701
710
  }
702
- g(t, n), h(t, r);
711
+ _(t, n), g(t, r);
703
712
  }
704
713
  return this.existingKeyframes = r, this.existing = n, this.existingSheetCount = t.length, n;
705
714
  }
@@ -707,7 +716,7 @@ var D = class extends e {
707
716
  return this.observedOnce || (this.observedOnce = !0, this.adoptSsrSheets()), this.changeDetector.observe(e, t);
708
717
  }
709
718
  normalizeClasses(e) {
710
- return Array.isArray(e) ? e.flatMap((e) => e.split(/\s+/)) : e.split(/\s+/);
719
+ return (Array.isArray(e) ? e : [e]).flatMap(d);
711
720
  }
712
721
  has(e) {
713
722
  return this.cache.has(e);
@@ -746,8 +755,8 @@ var D = class extends e {
746
755
  let n = Array.from(this.cache.keys());
747
756
  if (this.options.config = t, this.shadowRoot) {
748
757
  this.stylePartitionManager.cleanup();
749
- let e = T(t);
750
- this.context = e.context, this.incrementalParser = new D(e);
758
+ let e = E(t);
759
+ this.context = e.context, this.incrementalParser = new O(e);
751
760
  } else this.context = r(t), this.incrementalParser = new e(this.context);
752
761
  this.changeDetector.setParser(this.incrementalParser), this.reset(), n.length > 0 && this.addClass(n);
753
762
  }
@@ -766,7 +775,8 @@ var D = class extends e {
766
775
  isDestroyed: this.isDestroyed,
767
776
  config: this.options.config,
768
777
  cacheStats: this.getCacheStats(),
769
- sharedSheet: this.shadowRoot && this.stylePartitionManager instanceof O ? {
778
+ adopted: !this.shadowRoot && this.stylePartitionManager instanceof k,
779
+ sharedSheet: this.shadowRoot && this.stylePartitionManager instanceof k ? {
770
780
  roots: this.stylePartitionManager.shared.rootCount,
771
781
  rules: this.stylePartitionManager.shared.ruleCount,
772
782
  generations: this.stylePartitionManager.shared.generations,
@@ -774,14 +784,22 @@ var D = class extends e {
774
784
  } : null
775
785
  };
776
786
  }
777
- }, M = null, N;
778
- function P(e = {}) {
779
- return !M || M.getStats().isDestroyed ? (M = new j(e), N = e.config) : e.config && e.config !== N && (M.updateConfig(e.config), N = e.config), M;
787
+ }, N = null, P, F = "", I = !1, L = !1;
788
+ function R(e = {}) {
789
+ if (!N || N.getStats().isDestroyed ? (N = new M(e), P = e.config, F = e.nonce ?? "", I = e.constructable ?? !1, L = !1) : e.config && e.config !== P && (N.updateConfig(e.config), P = e.config), !L) {
790
+ let t = e.nonce !== void 0 && e.nonce !== F, n = e.constructable !== void 0 && e.constructable !== I;
791
+ if (t || n) {
792
+ L = !0;
793
+ let e = [t && `nonce (runtime has ${F ? "a different nonce" : "none"})`, n && `constructable (runtime has ${I})`].filter(Boolean).join(" and ");
794
+ console.warn(`[BaroCSS] runtime already created with a different ${e}; the new value is ignored. Pass nonce/constructable on the first getRuntime/baroStart call.`);
795
+ }
796
+ }
797
+ return N;
780
798
  }
781
- function F({ loadingClassName: e = "baro-boot", ...t } = {}) {
782
- if (t.root && t.root.nodeType === 11) return new j(t);
799
+ function z({ loadingClassName: e = "baro-boot", ...t } = {}) {
800
+ if (t.root && t.root.nodeType === 11) return new M(t);
783
801
  if (!document.body) {
784
- document.addEventListener("DOMContentLoaded", () => F({
802
+ document.addEventListener("DOMContentLoaded", () => z({
785
803
  loadingClassName: e,
786
804
  ...t
787
805
  }), { once: !0 });
@@ -789,7 +807,7 @@ function F({ loadingClassName: e = "baro-boot", ...t } = {}) {
789
807
  }
790
808
  let n = `${e}-doing`, r = `${e}-done`;
791
809
  try {
792
- document.body.classList.add(n), P(t).observe(document.body, {
810
+ document.body.classList.add(n), R(t).observe(document.body, {
793
811
  scan: !0,
794
812
  onReady: () => {
795
813
  document.body.classList.remove(n), document.body.classList.add(r);
@@ -799,10 +817,10 @@ function F({ loadingClassName: e = "baro-boot", ...t } = {}) {
799
817
  document.body?.classList.remove(n), console.error("BaroCSS boot failed:", e);
800
818
  }
801
819
  }
802
- var I = F;
820
+ var B = z;
803
821
  //#endregion
804
822
  //#region src/json-render-preload.ts
805
- function L(e) {
823
+ function V(e) {
806
824
  if (!e || typeof e != "object" || Array.isArray(e)) return [];
807
825
  let t = e.elements;
808
826
  if (!t || typeof t != "object" || Array.isArray(t)) return [];
@@ -813,15 +831,15 @@ function L(e) {
813
831
  let i = r.props;
814
832
  if (!i || typeof i != "object" || Array.isArray(i)) continue;
815
833
  let a = i.className;
816
- if (typeof a == "string") for (let e of a.split(/\s+/)) e && n.add(e);
834
+ if (typeof a == "string") for (let e of d(a)) e && n.add(e);
817
835
  }
818
836
  return Array.from(n);
819
837
  }
820
- function R(e, t) {
821
- let n = L(e);
838
+ function H(e, t) {
839
+ let n = V(e);
822
840
  n.length > 0 && t.addClass(n);
823
841
  }
824
- var z = {
842
+ var U = {
825
843
  colors: Object.fromEntries((/* @__PURE__ */ "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})`])),
826
844
  borderRadius: {
827
845
  sm: "calc(var(--radius) - 4px)",
@@ -831,4 +849,4 @@ var z = {
831
849
  }
832
850
  };
833
851
  //#endregion
834
- export { j as BrowserRuntime, d as ChangeDetector, A as LAYER_ORDER, k as SSR_STYLE_SELECTOR, c as StylePartitionManager, F as baroBoot, I as baroStart, L as collectJsonRenderClassNames, P as getRuntime, l as normalizeClassName, u as normalizeClassNameList, R as preloadJsonRenderClasses, z as shadcnTheme };
852
+ export { M as BrowserRuntime, f as ChangeDetector, j as LAYER_ORDER, A as SSR_STYLE_SELECTOR, c as StylePartitionManager, z as baroBoot, B as baroStart, V as collectJsonRenderClassNames, R as getRuntime, u as normalizeClassName, d as normalizeClassNameList, H as preloadJsonRenderClasses, U as shadcnTheme };
package/dist/index.umd.js CHANGED
@@ -1,15 +1,15 @@
1
1
  (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("@barocss/kit")):typeof define==`function`&&define.amd?define([`exports`,`@barocss/kit`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.BaroCSSBrowser={},e.BaroCSSKit))})(this,function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var n=class{insertSorted(e,n,r){let i=e.keys??=[],a=(0,t.upperBound)(i,r),o=e.styleElement.sheet;o&&o.cssRules.length===i.length?(o.insertRule(this.escapeCssRule(n),a),e.styles.splice(a,0,n)):(e.styles.splice(a,0,n),e.styleElement.textContent=e.styles.join(`
2
2
  `)+`
3
- `),i.splice(a,0,r)}constructor(e,n=50,r=`barocss-style-partition-`,i=e=>(0,t.parseClassName)(e).utility?.category){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.insertionPoint=e,this.maxRulesPerPartition=n,this.styleIdPrefix=r,this.getCategory=i,this.initializeDefaultPartition()}initializeDefaultPartition(){this.createNewPartition()}createNewCategoryPartition(e,t=!1){let n={id:this.styleIdPrefix+`-${e}`,styles:[],styleElement:document.createElement(`style`)};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:document.createElement(`style`)};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(e){if(this.hasRule(e))return!1;let n=(0,t.ruleSortKey)(e),r=this.partitions.findIndex(e=>{let r=e.keys;return!!r&&r.length>0&&(0,t.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,e,n),this.setRuleCache(e,r),!0}catch(n){return(0,t.isDebug)()&&console.warn(`[StylePartitionManager] Failed to insert rule: ${e}`,n),!1}}addCategoryRule(e,n){if(this.hasCategoryRule(e,n))return!1;let r=this.getCategoryPartition(n);r||=this.createNewCategoryPartition(n);try{this.insertSorted(r,e,(0,t.ruleSortKey)(e))}catch(r){return(0,t.isDebug)()&&console.warn(`[StylePartitionManager] Failed to insert rule in category: ${n} ${e}`,r),!1}return this.setCategoryRuleCache(e,n),!0}addRootRules(e){let n=this.getCategoryPartition(`root`);n||=this.createNewCategoryPartition(`root`);try{let t=n.styleElement.sheet;for(let r of e)t?t.insertRule(this.escapeCssRule(r),t.cssRules.length):n.styleElement.textContent+=r+`
3
+ `),i.splice(a,0,r)}constructor(e,n=50,r=`barocss-style-partition-`,i=e=>(0,t.parseClassName)(e).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=e,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(e){if(this.hasRule(e))return!1;let n=(0,t.ruleSortKey)(e),r=this.partitions.findIndex(e=>{let r=e.keys;return!!r&&r.length>0&&(0,t.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,e,n),this.setRuleCache(e,r),!0}catch(n){return(0,t.isDebug)()&&console.warn(`[StylePartitionManager] Failed to insert rule: ${e}`,n),!1}}addCategoryRule(e,n){if(this.hasCategoryRule(e,n))return!1;let r=this.getCategoryPartition(n);r||=this.createNewCategoryPartition(n);try{this.insertSorted(r,e,(0,t.ruleSortKey)(e))}catch(r){return(0,t.isDebug)()&&console.warn(`[StylePartitionManager] Failed to insert rule in category: ${n} ${e}`,r),!1}return this.setCategoryRuleCache(e,n),!0}addRootRules(e){let n=this.getCategoryPartition(`root`);n||=this.createNewCategoryPartition(`root`);try{let t=n.styleElement.sheet;for(let r of e)t?t.insertRule(this.escapeCssRule(r),t.cssRules.length):n.styleElement.textContent+=r+`
4
4
  `}catch(n){return(0,t.isDebug)()&&console.warn(`[StylePartitionManager] Failed to insert rule in category: root ${e.join(`
5
5
  `)}`,n),{success:0,failed:e.length}}return{success:e.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(`
6
6
  `)+`
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(e,n,r=!1){let i=this.getCategoryPartition(e);if(i)i.styleElement.textContent=n;else{let i=this.createNewCategoryPartition(e,r);(0,t.isDebug)()&&console.log(`[StylePartitionManager] Created new partition for category: ${e}`),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()}};function r(e){return e?typeof e==`object`&&typeof e.baseVal==`string`?e.baseVal:e.toString():``}function i(e){return e?r(e).split(/\s+/).filter(Boolean):[]}var a=class{constructor(e,n,r=e=>(0,t.parseClassName)(e).utility?.category){this.observer=null,this.gc=null,this.incrementalParser=e,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
- `)};\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(){try{return typeof ShadowRoot<`u`&&`adoptedStyleSheets`in ShadowRoot.prototype&&typeof CSSStyleSheet==`function`&&typeof new CSSStyleSheet().replaceSync==`function`}catch{return!1}}var g=e=>e.replace(/\\\//g,`\\/`),_=class{constructor(e,n,r=e){this.results=new Map,this.generations=0,this.prologueSheet=null,this.rulesSheet=null,this.prologue={preflight:``,vars:``},this.segments=new Map([[`root`,{rules:[],keys:[]}],[``,{rules:[],keys:[]}]]),this.refs=new Map,this.attached=[],this.key=e,this.fullKey=r,this.context=(0,t.createContext)(n),this.constructable=h(),this.constructable&&(this.prologueSheet=new CSSStyleSheet,this.rulesSheet=new CSSStyleSheet)}get rootCount(){return this.attached.length}get ruleCount(){return this.refs.size}attach(e){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}let t=e.ownerDocument??document,n=t.createElement(`style`),r=t.createElement(`style`);n.setAttribute(`data-barocss`,`root-prologue`),r.setAttribute(`data-barocss`,`root`),n.textContent=this.prologueText(),r.textContent=this.allRules().join(`
9
- `),e.insertBefore(r,e.firstChild),e.insertBefore(n,r),this.attached.push({root:e,styles:[n,r]})}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)}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.preflight,this.prologue.vars].filter(Boolean).join(`
10
- `)}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(e,n){let r=this.refs.get(e);if(r!==void 0)return this.refs.set(e,r+1),!0;let i=this.segments.get(n);i||(i={rules:[],keys:[]},this.segments.set(n,i));let a=n===`root`,o=(0,t.ruleSortKey)(e),s=a?i.rules.length:(0,t.upperBound)(i.keys,o),c=this.offset(i)+s;try{this.insertAt(e,c)}catch(n){return(0,t.isDebug)()&&console.warn(`[BrowserRuntime] Failed to insert rule into shadow root sheet: ${e}`,n),!1}return i.rules.splice(s,0,e),i.keys.splice(s,0,o),this.refs.set(e,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(`
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(e,n,r=!1){let i=this.getCategoryPartition(e);if(i)i.styleElement.textContent=n;else{let i=this.createNewCategoryPartition(e,r);(0,t.isDebug)()&&console.log(`[StylePartitionManager] Created new partition for category: ${e}`),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()}},r=/[ \t\n\f\r]+/;function i(e){return e?typeof e==`object`&&typeof e.baseVal==`string`?e.baseVal:e.toString():``}function a(e){return e?i(e).split(r).filter(Boolean):[]}var o=class{constructor(e,n,r=e=>(0,t.parseClassName)(e).utility?.category){this.observer=null,this.gc=null,this.incrementalParser=e,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&&a(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&&a(r).forEach(e=>{this.incrementalParser.isProcessed(e)||n.add(e)});let i=e.querySelectorAll(`[class]`);for(let e of i)if(e.className){let t=a(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&&a(e.className).forEach(e=>{this.incrementalParser.isProcessed(e)||t.add(e)})}disconnect(){this.observer&&=(this.observer.disconnect(),null)}};function s(e){return e.replace(/\\([0-9a-fA-F]{1,6})\s?|\\(.)/g,(e,t,n)=>t?String.fromCodePoint(parseInt(t,16)):n)}var c=/^\s*(?::(?:where|is)\(\s*)?\.((?:\\[0-9a-fA-F]{1,6}\s?|\\.|[\w-]|[^\x00-\x7F])+)/;function l(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 u(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&&u(e,t)}return t}function d(e,t=new Set){for(let n of Array.from(e)){let e=n.selectorText;if(typeof e==`string`)for(let n of l(e)){let e=c.exec(n);e&&t.add(s(e[1]))}let r=n.cssRules;r&&r.length&&d(r,t)}return t}var f=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(a(e.getAttribute(`class`)))):[],r=this.counted.get(e);if(!r&&n.length===0)return;let i=new Set(r??[]),o=new Set(n);for(let e of o){if(i.has(e))continue;let t=(this.counts.get(e)??0)+1;this.counts.set(e,t),this.candidates.delete(e)}for(let e of i){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 p(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
+ `)};\n}\n}\n`),n}function m(e){return JSON.stringify(e,(e,t)=>typeof t==`function`?`fn:${String(t)}`:t instanceof RegExp?`re:${t}`:t)??``}function h(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 g(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 _=e=>e.replace(/\\\//g,`\\/`),v=class{constructor(e,n,r=e,i={}){this.results=new Map,this.generations=0,this.prologueSheet=null,this.rulesSheet=null,this.prologue={preflight:``,vars:``},this.segments=new Map([[`root`,{rules:[],keys:[]}],[``,{rules:[],keys:[]}]]),this.refs=new Map,this.attached=[],this.key=e,this.fullKey=r,this.context=i.context??(0,t.createContext)(n),this.constructable=g(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(`
9
+ `),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)}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.preflight,this.prologue.vars].filter(Boolean).join(`
10
+ `)}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(e,n){let r=this.refs.get(e);if(r!==void 0)return this.refs.set(e,r+1),!0;let i=this.segments.get(n);i||(i={rules:[],keys:[]},this.segments.set(n,i));let a=n===`root`,o=(0,t.ruleSortKey)(e),s=a?i.rules.length:(0,t.upperBound)(i.keys,o),c=this.offset(i)+s;try{this.insertAt(e,c)}catch(n){return(0,t.isDebug)()&&console.warn(`[BrowserRuntime] Failed to insert rule into shadow root sheet: ${e}`,n),!1}return i.rules.splice(s,0,e),i.keys.splice(s,0,o),this.refs.set(e,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=_(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(`
11
11
  `)}}}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(`
12
12
  `)}}cssText(){return[this.prologueText(),...this.allRules()].join(`
13
- `)}},v=new Map;function y(e,t=m){let n=p(e),r=v.get(n);return r||(r=new _(t(n),e,n),v.set(n,r)),r}function b(e){e.rootCount===0&&v.get(e.fullKey)===e&&v.delete(e.fullKey)}var x=class extends t.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}},S=class{constructor(e,n,r=e=>(0,t.parseClassName)(e).utility?.category){this.shared=e,this.root=n,this.getCategory=r,this.owned=new Set,e.attach(n)}hasDetachedPartitions(){return!1}updateRuleContent(e,t){e===`preflight`?this.shared.setPrologue(`preflight`,f(t)):e===`css-vars`&&this.shared.setPrologue(`vars`,t)}take(e,t){return this.owned.has(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),b(this.shared)}},C=`style[data-barocss-ssr]`,w=`@layer theme, base, components, utilities;`,T=class{constructor(e={}){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=e=>(0,t.parseClassName)(e,this.context).utility?.category;let n={};this.options={config:e.config||n,styleId:e.styleId||`barocss-runtime`,insertionPoint:e.insertionPoint||`head`,maxRulesPerPartition:e.maxRulesPerPartition||50,skipExisting:e.skipExisting??!1,gc:e.gc??!0,gcGraceMs:e.gcGraceMs??3e3,maxRules:e.maxRules??1/0};let r=e.root;if(r&&r.nodeType===11&&(this.shadowRoot=r),this.shadowRoot){let e=y(this.options.config);this.context=e.context,this.incrementalParser=new x(e)}else this.context=(0,t.createContext)(this.options.config),this.incrementalParser=new t.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=y(this.options.config);return t!==e&&(e=t,this.context=e.context,this.incrementalParser=new x(e),this.changeDetector?.setParser(this.incrementalParser)),new S(e,this.shadowRoot,this.getCategory)}return new n(this.getInsertionPoint(),this.options.maxRulesPerPartition,`${this.options.styleId}-partition`,this.getCategory)}debugLog(e,n,r){(0,t.isDebug)()&&(console[e]||console.log)(`[BrowserRuntime:${e.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(`${C}: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`,`${w}\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.flatMap(e=>e.split(/\s+/)):e.split(/\s+/)}has(e){return this.cache.has(e)}getCss(e){return this.cache.get(e)?.cssList.join(`
13
+ `)}},y=new Map;function b(e,t=h){let n=m(e),r=y.get(n);return r||(r=new v(t(n),e,n),y.set(n,r)),r}function x(e){e.rootCount===0&&y.get(e.fullKey)===e&&y.delete(e.fullKey)}var S=class extends t.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}},C=class{constructor(e,n,r=e=>(0,t.parseClassName)(e).utility?.category,i={}){this.shared=e,this.root=n,this.getCategory=r,this.owned=new Set,this.scopePreflight=n.nodeType===11,e.attach(n,i.nonce)}hasDetachedPartitions(){return!1}updateRuleContent(e,t){e===`preflight`?this.shared.setPrologue(`preflight`,this.scopePreflight?p(t):t):e===`css-vars`&&this.shared.setPrologue(`vars`,t)}take(e,t){return this.owned.has(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),x(this.shared)}},w=`style[data-barocss-ssr]`,T=`@layer theme, base, components, utilities;`,E=class{constructor(e={}){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=e=>(0,t.parseClassName)(e,this.context).utility?.category;let n={};this.options={config:e.config||n,styleId:e.styleId||`barocss-runtime`,insertionPoint:e.insertionPoint||`head`,maxRulesPerPartition:e.maxRulesPerPartition||50,skipExisting:e.skipExisting??!1,gc:e.gc??!0,gcGraceMs:e.gcGraceMs??3e3,maxRules:e.maxRules??1/0,nonce:e.nonce??``,constructable:e.constructable??!1};let r=e.root;if(r&&r.nodeType===11&&(this.shadowRoot=r),this.shadowRoot){let e=b(this.options.config);this.context=e.context,this.incrementalParser=new S(e)}else this.context=(0,t.createContext)(this.options.config),this.incrementalParser=new t.IncrementalParser(this.context);this.changeDetector=new o(this.incrementalParser,this,this.getCategory),this.stylePartitionManager=this.createStyles(),this.options.gc&&(this.gc=new f({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=b(this.options.config);return t!==e&&(e=t,this.context=e.context,this.incrementalParser=new S(e),this.changeDetector?.setParser(this.incrementalParser)),new C(e,this.shadowRoot,this.getCategory,{nonce:this.options.nonce})}return this.options.constructable&&typeof document<`u`&&g(`document`)?new C(new v(`document`,this.options.config,`document`,{context:this.context,target:`document`}),document,this.getCategory):new n(this.getInsertionPoint(),this.options.maxRulesPerPartition,`${this.options.styleId}-partition`,this.getCategory,this.options.nonce)}debugLog(e,n,r){(0,t.isDebug)()&&(console[e]||console.log)(`[BrowserRuntime:${e.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(`${w}: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=d([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`,`${T}\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}d(t,n),u(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(a)}has(e){return this.cache.has(e)}getCss(e){return this.cache.get(e)?.cssList.join(`
14
14
  `)}getAllCss(){return[...this.rootCache,...Array.from(this.cache.values()).flatMap(e=>e.cssList)].join(`
15
- `)}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,t.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(e){if(this.isDestroyed)return;let n=Array.from(this.cache.keys());if(this.options.config=e,this.shadowRoot){this.stylePartitionManager.cleanup();let t=y(e);this.context=t.context,this.incrementalParser=new x(t)}else this.context=(0,t.createContext)(e),this.incrementalParser=new t.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(),sharedSheet:this.shadowRoot&&this.stylePartitionManager instanceof S?{roots:this.stylePartitionManager.shared.rootCount,rules:this.stylePartitionManager.shared.ruleCount,generations:this.stylePartitionManager.shared.generations,constructable:this.stylePartitionManager.shared.constructable}:null}}},E=null,D;function O(e={}){return!E||E.getStats().isDestroyed?(E=new T(e),D=e.config):e.config&&e.config!==D&&(E.updateConfig(e.config),D=e.config),E}function k({loadingClassName:e=`baro-boot`,...t}={}){if(t.root&&t.root.nodeType===11)return new T(t);if(!document.body){document.addEventListener(`DOMContentLoaded`,()=>k({loadingClassName:e,...t}),{once:!0});return}let n=`${e}-doing`,r=`${e}-done`;try{document.body.classList.add(n),O(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 A=k;function j(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 i=r.props;if(!i||typeof i!=`object`||Array.isArray(i))continue;let a=i.className;if(typeof a==`string`)for(let e of a.split(/\s+/))e&&n.add(e)}return Array.from(n)}function M(e,t){let n=j(e);n.length>0&&t.addClass(n)}var N={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)`}};e.BrowserRuntime=T,e.ChangeDetector=a,e.LAYER_ORDER=w,e.SSR_STYLE_SELECTOR=C,e.StylePartitionManager=n,e.baroBoot=k,e.baroStart=A,e.collectJsonRenderClassNames=j,e.getRuntime=O,e.normalizeClassName=r,e.normalizeClassNameList=i,e.preloadJsonRenderClasses=M,e.shadcnTheme=N});
15
+ `)}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,t.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(e){if(this.isDestroyed)return;let n=Array.from(this.cache.keys());if(this.options.config=e,this.shadowRoot){this.stylePartitionManager.cleanup();let t=b(e);this.context=t.context,this.incrementalParser=new S(t)}else this.context=(0,t.createContext)(e),this.incrementalParser=new t.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 C,sharedSheet:this.shadowRoot&&this.stylePartitionManager instanceof C?{roots:this.stylePartitionManager.shared.rootCount,rules:this.stylePartitionManager.shared.ruleCount,generations:this.stylePartitionManager.shared.generations,constructable:this.stylePartitionManager.shared.constructable}:null}}},D=null,O,k=``,A=!1,j=!1;function M(e={}){if(!D||D.getStats().isDestroyed?(D=new E(e),O=e.config,k=e.nonce??``,A=e.constructable??!1,j=!1):e.config&&e.config!==O&&(D.updateConfig(e.config),O=e.config),!j){let t=e.nonce!==void 0&&e.nonce!==k,n=e.constructable!==void 0&&e.constructable!==A;if(t||n){j=!0;let e=[t&&`nonce (runtime has ${k?`a different nonce`:`none`})`,n&&`constructable (runtime has ${A})`].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 D}function N({loadingClassName:e=`baro-boot`,...t}={}){if(t.root&&t.root.nodeType===11)return new E(t);if(!document.body){document.addEventListener(`DOMContentLoaded`,()=>N({loadingClassName:e,...t}),{once:!0});return}let n=`${e}-doing`,r=`${e}-done`;try{document.body.classList.add(n),M(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 P=N;function F(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 i=r.props;if(!i||typeof i!=`object`||Array.isArray(i))continue;let o=i.className;if(typeof o==`string`)for(let e of a(o))e&&n.add(e)}return Array.from(n)}function I(e,t){let n=F(e);n.length>0&&t.addClass(n)}var L={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)`}};e.BrowserRuntime=E,e.ChangeDetector=o,e.LAYER_ORDER=T,e.SSR_STYLE_SELECTOR=w,e.StylePartitionManager=n,e.baroBoot=N,e.baroStart=P,e.collectJsonRenderClassNames=F,e.getRuntime=M,e.normalizeClassName=i,e.normalizeClassNameList=a,e.preloadJsonRenderClasses=I,e.shadcnTheme=L});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@barocss/browser",
3
- "version": "0.9.0",
3
+ "version": "0.10.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/barocss/barocss.git",
@@ -30,7 +30,7 @@
30
30
  "access": "public"
31
31
  },
32
32
  "dependencies": {
33
- "@barocss/kit": "0.9.0"
33
+ "@barocss/kit": "0.10.1"
34
34
  },
35
35
  "devDependencies": {
36
36
  "jsdom": "^26.1.0",