mnfst 0.5.201 → 0.5.203

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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  (function () {
4
4
 
5
- const MANIFEST_BUILD_VERSION = '0.5.201';
5
+ const MANIFEST_BUILD_VERSION = '0.5.203';
6
6
 
7
7
  /* Manifest Data Sources - Appwrite Integration */
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  (function () {
4
4
 
5
- const MANIFEST_BUILD_VERSION = '0.5.201';
5
+ const MANIFEST_BUILD_VERSION = '0.5.203';
6
6
 
7
7
  /* Manifest Data Sources - Configuration */
8
8
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest.appwrite.auth.js": "sha384-HMJmRXnvdDBWyuteXL+DTxWM2llSCdjl4EDamEI7iHNAVlqeOCE4GDTm8ZHipPRj",
3
- "manifest.appwrite.data.js": "sha384-/pUVR3PGGMBz680dmGqubCjjs3nx3RiRi9DqJEpO6/cKEu25YxnO4Rwf38aBdcWN",
3
+ "manifest.appwrite.data.js": "sha384-GWqV1tsC6nmAReFVHu/Ks/0BGFrP/dx4kl1Us0p+c4V5JRzgt64+hRlkhqE03EKC",
4
4
  "manifest.appwrite.presences.js": "sha384-JyVDWFT69b7Svq8J8p9tNWe2v9PZNQBY5UyhtOl1vnuHFAX0CRQ3MA9SiKq5wzNh",
5
5
  "manifest.bindings.js": "sha384-lPtMf8Ykaic9gNVZKq8Scia1881ZeMAyxer3WCIkUNwwrgzGBWto1OXADUwjvORF",
6
6
  "manifest.charts.js": "sha384-qQrjhWkIDi4oU5uQrpy8DdlMjY+gfiivBuX6mssNiFdkawgkVBvKneGgp+nd3PYJ",
@@ -11,7 +11,7 @@
11
11
  "manifest.combobox.js": "sha384-SN3XHumoebxcduFQqx5zt65/Cd10y8nuf9Gkco6UnsZ42sadRd+gvVLfWPdkkuPH",
12
12
  "manifest.components.js": "sha384-DLGSqCbnGkS87AWJ8GpKoAFP4nCosgC5SFSg6C10hH/nWu/MxI+0ntHlnFEfs++u",
13
13
  "manifest.computed.js": "sha384-GYML/e81gQfN+iDbqhPUgny8bINCyL+SrbTofoGk4hlCnLLjv51mCv42JMqq+ku5",
14
- "manifest.data.js": "sha384-mNrtyjtCTK+mcv3Nfau+ccleGFEd3qUFbYCOuMMvvJp5nGA+so9GB4XZ9MYlTjmZ",
14
+ "manifest.data.js": "sha384-9g/81jTkiYnBiRW3e1s0wxmtTTUYeGcrch3ry7ki7S/Gv6B3IMEtB7F9N4zk4U9H",
15
15
  "manifest.datepicker.js": "sha384-8vTJYkLqqvgXgm1w1becuaRR/jUEpiLBjBJ6RsRbUr+ZkypvspD6EsssuDrX4SQq",
16
16
  "manifest.defer.js": "sha384-wXa60M2OHigi5rBurXQ7Oa8eyr5WTKs7EUn2GOru62KMdfs/LDyNegxCc9MNJFSe",
17
17
  "manifest.device.js": "sha384-g+txmrEszYtuOvRelTp/c1wSNR2AtllVI9rx5NPPD7DzhVUnMNughonZykv2xlBW",
@@ -28,14 +28,14 @@
28
28
  "manifest.slides.js": "sha384-3uRTkyK9XPLmnxI2+igZlpi4EyPlU/7IHj5j3BZJJ2KN455vXyk99fiXV3feO/XY",
29
29
  "manifest.status.js": "sha384-nwvUSbT+gpRMqhYx6MeBYswUMH72rY92mjgxv0vrSG7Ht7l83XYpEB6fCTbXjjfK",
30
30
  "manifest.svg.js": "sha384-qr/8H9+2cIhSXNbRWRtIdrDlTOxKlNJqwEefHvCYoiBNW/kKhPTFa109Orv/EBnb",
31
- "manifest.sw.js": "sha384-zwGxW9eipPdhlEs6dEjZkVttY/G78J2u47w0N0lVbcrekTdwkfBA/Y8U2KuSAfF8",
31
+ "manifest.sw.js": "sha384-Te2cSGBZQmK79BME5Zg5i7Hle5ncBSvJFI94CiGduupVSuDdBBTUstBTXpqp/QgY",
32
32
  "manifest.tabs.js": "sha384-OIIcyaQnGS0eNYk4zgAFEDboNYect7THvUd9D0V6nqCeDOxQcoiqLrBEmmWVTTet",
33
33
  "manifest.tailwind.js": "sha384-r/Jvqb+Piz21jUts10BbVAJoKkShOdJRVFpywyi4HPIi/OfOJq5CtPyWAPbdkMgt",
34
34
  "manifest.text.edit.js": "sha384-pfhc4IPKNJokj6ldlgD+KwGLN4UoM21CNeVf2sVq/34X1Un2PUhEuyTg5itmtsXS",
35
35
  "manifest.toasts.js": "sha384-/OV32LLMJl0Iw8NoNQJ+5lgntLxjIJq/YNj5JAKS/+nUhVx4MMB9h1FOqP7zuj2M",
36
36
  "manifest.tooltips.js": "sha384-uXVVQADl6pY2Pj9i/UaSclZN7dzbKhLkmevv7Ad0+wXR8LgqodALNFrc5jZJjlwm",
37
37
  "manifest.url.parameters.js": "sha384-J2aSVBOPsoqsbafHndrWLHEDpKb4AKJAoQnVmKA4gZh5P/8HHjFWHO/lkusmG84l",
38
- "manifest.utilities.js": "sha384-mncpPiNnQWpKojYWm7oO3cepjSQlnJQtxdxxPTyyaAsi77QnXrJQgqNPGT7j4dez",
38
+ "manifest.utilities.js": "sha384-frvYhLP8Arx+smhzQr1nCvxuVfnjRhoG+ce8pI0H0iYqJwO7km1/3QLdBYt3uKol",
39
39
  "manifest.virtual.js": "sha384-YwwmAsZNddajnAkLhBWtrK8edHMJOhD7cJkQi3qmm5o1Thg0wbtDU0dsfrCHKTIQ",
40
- "manifest.js": "sha384-+rWocB3jT+iBErwbS1ZBwt24C/jhUavBduc5EzMSu8ZZooyO52LeGpW7UscLdLYx"
40
+ "manifest.js": "sha384-z6bjoNHfkJwD3bRcjChzuzM3y/3LrWVfc8nsApLtSXcshgJc8L4+Vz7XaV3MN6N8"
41
41
  }
package/lib/manifest.js CHANGED
@@ -388,8 +388,14 @@
388
388
  return false;
389
389
  }
390
390
 
391
+ // One fetch per URL: concurrent callers share the first call's promise
392
+ const inflightScripts = new Map();
393
+
391
394
  function injectScript(url) {
392
- return new Promise((resolve, reject) => {
395
+ const shared = inflightScripts.get(url);
396
+ if (shared) return shared;
397
+
398
+ const promise = new Promise((resolve, reject) => {
393
399
  // Same src already in the DOM (author tag, prerendered HTML, second loader run)
394
400
  const existing = document.querySelector(`script[src="${url}"]`);
395
401
  if (existing) {
@@ -412,6 +418,10 @@
412
418
  script.onerror = () => { script.removeAttribute('data-mnfst-loading'); script.remove(); reject(new Error(`Failed to load ${url}`)); };
413
419
  document.head.appendChild(script);
414
420
  });
421
+
422
+ inflightScripts.set(url, promise);
423
+ promise.then(() => inflightScripts.delete(url), () => inflightScripts.delete(url)); // dedupe only while in flight
424
+ return promise;
415
425
  }
416
426
 
417
427
  // Load a plugin, falling through the CDN chain on error. A fallback insert
@@ -16,7 +16,7 @@
16
16
 
17
17
  // Build stamps the published version here; unstamped (dev) falls back to the
18
18
  // registration URL's `v`, then 'dev'.
19
- const BUILD_VERSION = '0.5.201';
19
+ const BUILD_VERSION = '0.5.203';
20
20
  const CACHE_PREFIX = 'mnfst-sw:';
21
21
  const META_CACHE = CACHE_PREFIX + 'meta';
22
22
  const SWR_CAP = 200;
@@ -1488,8 +1488,9 @@ TailwindCompiler.prototype.scanStaticClasses = async function () {
1488
1488
 
1489
1489
  // Extract classes from HTML content
1490
1490
  TailwindCompiler.prototype.extractClassesFromHTML = function (html, classSet) {
1491
- // Match class attributes: class="..." or class='...'
1492
- const classRegex = /class=["']([^"']+)["']/g;
1491
+ // Plain class attributes only — the leading boundary excludes Alpine's
1492
+ // :class / x-bind:class bindings (JS expressions, not token lists)
1493
+ const classRegex = /(?:^|[\s"'`>/])(?:[a-zA-Z][\w.-]*-)?class=["']([^"']+)["']/g;
1493
1494
  let match;
1494
1495
 
1495
1496
  while ((match = classRegex.exec(html)) !== null) {
@@ -1700,11 +1701,8 @@ TailwindCompiler.prototype.fetchThemeContent = async function () {
1700
1701
  TailwindCompiler.prototype.extractThemeVariables = function (cssText) {
1701
1702
  const variables = new Map();
1702
1703
 
1703
- // Extract ALL CSS custom properties from ANY declaration block. Terminator
1704
- // is a lookahead (`;` or `}`) rather than a consumed `;` so the last
1705
- // declaration in a block still matches when the author omits the
1706
- // trailing semicolon (valid CSS, e.g. `:root{--x:1rem}`).
1707
- const varRegex = /--([\w-]+):\s*([^;}]+)(?=[;}])/g;
1704
+ // Extract ALL CSS custom properties from ANY declaration block
1705
+ const varRegex = /--([\w-]+):\s*([^;]+);/g;
1708
1706
 
1709
1707
  let varMatch;
1710
1708
  while ((varMatch = varRegex.exec(cssText)) !== null) {
@@ -1,25 +1,5 @@
1
1
  /* manifest.utilities.node.mjs — built from scripts/utilities/ (DOM-free) */
2
2
 
3
- if (typeof globalThis.window === 'undefined') globalThis.window = globalThis;
4
- if (typeof globalThis.document === 'undefined') {
5
- const inertElement = () => ({ style: {}, textContent: '', classList: { add(){}, remove(){}, contains: () => false }, setAttribute(){}, appendChild(){}, insertBefore(){} });
6
- globalThis.document = {
7
- documentElement: { outerHTML: '' },
8
- head: { firstChild: null, lastElementChild: null, innerHTML: '', appendChild(){}, insertBefore(){} },
9
- querySelectorAll: () => [],
10
- querySelector: () => null,
11
- getElementById: () => null,
12
- getElementsByTagName: () => [],
13
- createElement: inertElement,
14
- addEventListener(){},
15
- styleSheets: []
16
- };
17
- }
18
- if (typeof globalThis.getComputedStyle === 'undefined') globalThis.getComputedStyle = () => ({ getPropertyValue: () => '' });
19
- if (typeof globalThis.localStorage === 'undefined') globalThis.localStorage = { getItem: () => null, setItem(){}, removeItem(){} };
20
- if (typeof globalThis.performance === 'undefined') globalThis.performance = { now: () => Date.now() };
21
- if (typeof globalThis.requestAnimationFrame === 'undefined') globalThis.requestAnimationFrame = (cb) => setTimeout(cb, 0);
22
-
23
3
  // Utility generators
24
4
  // Functions that generate CSS utilities from CSS variable suffixes
25
5
 
@@ -922,8 +902,9 @@ TailwindCompiler.prototype.scanStaticClasses = async function () {
922
902
 
923
903
  // Extract classes from HTML content
924
904
  TailwindCompiler.prototype.extractClassesFromHTML = function (html, classSet) {
925
- // Match class attributes: class="..." or class='...'
926
- const classRegex = /class=["']([^"']+)["']/g;
905
+ // Plain class attributes only — the leading boundary excludes Alpine's
906
+ // :class / x-bind:class bindings (JS expressions, not token lists)
907
+ const classRegex = /(?:^|[\s"'`>/])(?:[a-zA-Z][\w.-]*-)?class=["']([^"']+)["']/g;
927
908
  let match;
928
909
 
929
910
  while ((match = classRegex.exec(html)) !== null) {
@@ -1134,11 +1115,8 @@ TailwindCompiler.prototype.fetchThemeContent = async function () {
1134
1115
  TailwindCompiler.prototype.extractThemeVariables = function (cssText) {
1135
1116
  const variables = new Map();
1136
1117
 
1137
- // Extract ALL CSS custom properties from ANY declaration block. Terminator
1138
- // is a lookahead (`;` or `}`) rather than a consumed `;` so the last
1139
- // declaration in a block still matches when the author omits the
1140
- // trailing semicolon (valid CSS, e.g. `:root{--x:1rem}`).
1141
- const varRegex = /--([\w-]+):\s*([^;}]+)(?=[;}])/g;
1118
+ // Extract ALL CSS custom properties from ANY declaration block
1119
+ const varRegex = /--([\w-]+):\s*([^;]+);/g;
1142
1120
 
1143
1121
  let varMatch;
1144
1122
  while ((varMatch = varRegex.exec(cssText)) !== null) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mnfst",
3
- "version": "0.5.201",
3
+ "version": "0.5.203",
4
4
  "private": false,
5
5
  "workspaces": [
6
6
  "templates/starter",