mnfst 0.5.250 → 0.5.251

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.250';
5
+ const MANIFEST_BUILD_VERSION = '0.5.251';
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.250';
5
+ const MANIFEST_BUILD_VERSION = '0.5.251';
6
6
 
7
7
  /* Manifest Data Sources - Configuration */
8
8
 
@@ -16,13 +16,24 @@ function manifestNativePlugin(name) {
16
16
  return (cap && cap.Plugins && cap.Plugins[name]) || null;
17
17
  }
18
18
  // Whether a plugin exposes a native method. Bundled apps get a registerPlugin
19
- // Proxy where every property is a function, so prefer the native header.
19
+ // Proxy where every property is a function, so prefer the native header; a
20
+ // header list without this plugin means it isn't installed natively.
20
21
  function manifestNativeHas(name, plugin, method) {
21
22
  const headers = window.Capacitor && window.Capacitor.PluginHeaders;
22
- const h = Array.isArray(headers) && headers.find(x => x && x.name === name);
23
- if (h && Array.isArray(h.methods)) return h.methods.some(m => m && m.name === method);
23
+ if (Array.isArray(headers)) {
24
+ const h = headers.find(x => x && x.name === name);
25
+ if (!h) return false;
26
+ if (Array.isArray(h.methods)) return h.methods.some(m => m && m.name === method);
27
+ }
24
28
  return !!plugin && typeof plugin[method] === 'function';
25
29
  }
30
+ // A plugin with a native method, or null. Web builds use Manifest's own fallbacks,
31
+ // not plugin web stubs, so bundled and plain web builds behave the same.
32
+ function manifestNativeUse(name, method) {
33
+ if (!manifestNativeIsNative()) return null;
34
+ const plugin = manifestNativePlugin(name);
35
+ return plugin && manifestNativeHas(name, plugin, method) ? plugin : null;
36
+ }
26
37
  function manifestNativePlatform() {
27
38
  const cap = window.Capacitor;
28
39
  if (cap && typeof cap.getPlatform === 'function') { try { return cap.getPlatform(); } catch (e) {} }
@@ -104,7 +115,7 @@ function manifestShareWeb(payload) {
104
115
  }
105
116
  function manifestShare(opts) {
106
117
  const payload = opts || {};
107
- const Share = manifestNativePlugin('Share');
118
+ const Share = manifestNativeUse('Share', 'share');
108
119
  if (Share) {
109
120
  // When the native sheet is present, never fall through to the web sheet
110
121
  // (that would double-prompt); report the native outcome instead.
@@ -136,7 +147,7 @@ function manifestNativeApplyOnline(connected) {
136
147
  } catch (e) {}
137
148
  }
138
149
  function initManifestNativeNetwork() {
139
- const Network = manifestNativePlugin('Network');
150
+ const Network = manifestNativeUse('Network', 'getStatus');
140
151
  if (!Network) return;
141
152
  try { Network.getStatus().then(s => manifestNativeApplyOnline(s && s.connected)).catch(() => {}); } catch (e) {}
142
153
  try { Network.addListener('networkStatusChange', s => manifestNativeApplyOnline(s && s.connected)); } catch (e) {}
@@ -288,7 +299,7 @@ function initManifestLinks() {
288
299
  get last() { const s = window.Alpine.store('links'); return s ? s.last : null; }
289
300
  }));
290
301
 
291
- const App = manifestNativePlugin('App');
302
+ const App = manifestNativeUse('App', 'getLaunchUrl');
292
303
  if (App) {
293
304
  try { App.addListener('appUrlOpen', (data) => { if (data && data.url) manifestHandleUrl(data.url); }); } catch (e) {}
294
305
  try { App.getLaunchUrl().then(r => { if (r && r.url) manifestHandleUrl(r.url); }).catch(() => {}); } catch (e) {}
@@ -335,7 +346,7 @@ function initManifestPush() {
335
346
  window.Alpine.store('push', store);
336
347
  }
337
348
 
338
- const Push = manifestNativePlugin('PushNotifications');
349
+ const Push = manifestNativeUse('PushNotifications', 'register');
339
350
  if (Push) {
340
351
  try { Push.addListener('registration', t => { store.token = t && t.value; _manifestPushTokenHandlers.forEach(fn => { try { fn(store.token); } catch (e) {} }); }); } catch (e) {}
341
352
  try { Push.addListener('pushNotificationReceived', n => { _manifestPushReceiveHandlers.forEach(fn => { try { fn(n); } catch (e) {} }); }); } catch (e) {}
@@ -344,13 +355,13 @@ function initManifestPush() {
344
355
 
345
356
  window.Alpine.magic('push', () => ({
346
357
  async request() {
347
- const P = manifestNativePlugin('PushNotifications');
358
+ const P = manifestNativeUse('PushNotifications', 'requestPermissions');
348
359
  if (P) { try { const r = await P.requestPermissions(); const p = manifestPushMapPermission(r && r.receive); window.Alpine.store('push').permission = p; return p; } catch (e) { return 'denied'; } }
349
360
  if (typeof Notification !== 'undefined' && Notification.requestPermission) { try { const p = manifestPushMapPermission(await Notification.requestPermission()); window.Alpine.store('push').permission = p; return p; } catch (e) { return 'denied'; } }
350
361
  return 'unsupported';
351
362
  },
352
363
  async register() {
353
- const P = manifestNativePlugin('PushNotifications');
364
+ const P = manifestNativeUse('PushNotifications', 'register');
354
365
  if (P) { try { await P.register(); } catch (e) {} }
355
366
  },
356
367
  onToken(fn) { if (typeof fn === 'function') _manifestPushTokenHandlers.push(fn); },
@@ -378,7 +389,7 @@ function initManifestApp() {
378
389
  const visible = (typeof document !== 'undefined') ? document.visibilityState !== 'hidden' : true;
379
390
  if (!window.Alpine.store('app')) window.Alpine.store('app', { active: visible });
380
391
 
381
- const App = manifestNativePlugin('App');
392
+ const App = manifestNativeUse('App', 'getState');
382
393
  if (App) {
383
394
  try { App.addListener('appStateChange', s => manifestAppSetActive(s && s.isActive)); } catch (e) {}
384
395
  } else if (typeof document !== 'undefined') {
@@ -406,22 +417,22 @@ function manifestVibrate(pattern) {
406
417
  function initManifestHaptics() {
407
418
  window.Alpine.magic('haptics', () => ({
408
419
  impact(style) {
409
- const H = manifestNativePlugin('Haptics');
420
+ const H = manifestNativeUse('Haptics', 'impact');
410
421
  if (H) { try { return H.impact({ style: style || 'MEDIUM' }); } catch (e) {} }
411
422
  manifestVibrate(10); return Promise.resolve();
412
423
  },
413
424
  notification(type) {
414
- const H = manifestNativePlugin('Haptics');
425
+ const H = manifestNativeUse('Haptics', 'notification');
415
426
  if (H) { try { return H.notification({ type: type || 'SUCCESS' }); } catch (e) {} }
416
427
  manifestVibrate([10, 40, 10]); return Promise.resolve();
417
428
  },
418
429
  selection() {
419
- const H = manifestNativePlugin('Haptics');
430
+ const H = manifestNativeUse('Haptics', 'selectionChanged');
420
431
  if (H) { try { return H.selectionChanged(); } catch (e) {} }
421
432
  manifestVibrate(5); return Promise.resolve();
422
433
  },
423
434
  vibrate(ms) {
424
- const H = manifestNativePlugin('Haptics');
435
+ const H = manifestNativeUse('Haptics', 'vibrate');
425
436
  if (H) { try { return H.vibrate({ duration: ms || 300 }); } catch (e) {} }
426
437
  manifestVibrate(ms || 300); return Promise.resolve();
427
438
  }
@@ -532,7 +543,7 @@ function manifestCameraWeb(opts) {
532
543
 
533
544
  function manifestCameraPhoto(opts) {
534
545
  const o = opts || {};
535
- const Cam = manifestNativePlugin('Camera');
546
+ const Cam = manifestNativeUse('Camera', 'getPhoto');
536
547
  if (Cam) {
537
548
  return Cam.getPhoto({ resultType: 'dataUrl', source: o.source === 'photos' ? 'PHOTOS' : 'CAMERA', quality: o.quality || 90 })
538
549
  .then(r => ({ dataUrl: r && (r.dataUrl || r.webPath), format: r && r.format }))
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "manifest.appwrite.auth.js": "sha384-dsIWnH0qCAGSzAXMGrd8fvOrVl4tOIE6j5tC35JPTrQXZ56qLD36ARyvhR7vi3Id",
3
- "manifest.appwrite.data.js": "sha384-7n9o9oibFpnpHDDJ8oYPtiIPddMZyKmmQfXVSwPvTQQw5kK4hz6QNxjmDqjPbbgU",
3
+ "manifest.appwrite.data.js": "sha384-ctnqsfCC4EDugNArRonGeZMTQn2iwksugU0309QM6l0uh6JJZOaU/Gsvvp8JrmZ3",
4
4
  "manifest.appwrite.presences.js": "sha384-JyVDWFT69b7Svq8J8p9tNWe2v9PZNQBY5UyhtOl1vnuHFAX0CRQ3MA9SiKq5wzNh",
5
5
  "manifest.bindings.js": "sha384-lPtMf8Ykaic9gNVZKq8Scia1881ZeMAyxer3WCIkUNwwrgzGBWto1OXADUwjvORF",
6
6
  "manifest.charts.js": "sha384-G+huD7UvjF9zDovdVVlh4I5X1Mq4oNnJfoFg4NnGdP3R/4Skq9hy5cGuHNYLxDYm",
@@ -11,24 +11,24 @@
11
11
  "manifest.combobox.js": "sha384-MILTkrgsTzsYUjGo4ZuADqV85Xs4GmfB4xexfe9vbJMIoQTZ42W4zs+DTaVSPEsx",
12
12
  "manifest.components.js": "sha384-BUFA8h+G5Plr82sV7bKzO42pPoiRZwRQcKj1lt2ROFiKjjlkayU/vmkAFqEsdBA+",
13
13
  "manifest.computed.js": "sha384-GYML/e81gQfN+iDbqhPUgny8bINCyL+SrbTofoGk4hlCnLLjv51mCv42JMqq+ku5",
14
- "manifest.data.js": "sha384-E3eYfLsWJzw3OjoBBG/tcJPnvEq8guDOBCtnro7hMHA73LcCjlKIjMDFLzpnmUSn",
14
+ "manifest.data.js": "sha384-ryR3dpYNybgJ8GONlEhkB0myOYz7fhGdnjEpXvKXcCQJUjZQaZbX7J8caPWv7UsN",
15
15
  "manifest.datepicker.js": "sha384-2XwFFnS4Bg5FDvG/v8x6KUvrjcBQEOYyTxynX2K/D/Qb3PI6+Y04lEwCnVDJLzwL",
16
16
  "manifest.defer.js": "sha384-pMRGqQKiEoJhpUcD40QeM4jEHau7sz9Xn/YCpiUamT1T4xJBZDSiYX+xnVrSWoq+",
17
- "manifest.device.js": "sha384-LseLVXfne1wPR8xXM1jqSqylUxekRF3v26TIEaEICE3a4vxjdXoxOJ3wsLAU0zq+",
17
+ "manifest.device.js": "sha384-cm59lFxLFOu+DzQGkTUax0lfjZIeEz21vnk26c6nN0+/7irQwzVGt9u545BQjgzM",
18
18
  "manifest.dropdowns.js": "sha384-acufUps7R9WjqB4XXW5JLACqniuHJGM4CNTb2rF4B2Q/jv7ZRmsAwfr2McanOz3s",
19
19
  "manifest.edit.js": "sha384-MOgQNdNLeHijhR0u2W6ntoOulKFglsATCFDqkinesOU15tHoILk/JNzHKkGi5dUG",
20
20
  "manifest.export.js": "sha384-Rx6XvqBZc4apzP/FwcDr6yIln4/zNa08Q4ZqBZcEqUz1aNZQfl4h0+Ae7mqCQyuG",
21
21
  "manifest.icons.js": "sha384-kKOINpX70YzNO3FvkV6umrmO3f0KIu0DNbwB+ej55a7y/lhU7v/myQtXL0bwCTbt",
22
22
  "manifest.localization.js": "sha384-EImsIw8Z3l13V5eH9ZJF/yfsOfIvR1oPRNSArANkPji7V8O3IRf6zMwsNiAGj3Hk",
23
23
  "manifest.markdown.js": "sha384-heyDR40LXHaAmAuA+fa381uFwShk1oAqpFFY6E2Qq4T3VN0TQfRqyc++MF40K5Hj",
24
- "manifest.native.js": "sha384-LseLVXfne1wPR8xXM1jqSqylUxekRF3v26TIEaEICE3a4vxjdXoxOJ3wsLAU0zq+",
24
+ "manifest.native.js": "sha384-cm59lFxLFOu+DzQGkTUax0lfjZIeEz21vnk26c6nN0+/7irQwzVGt9u545BQjgzM",
25
25
  "manifest.payments.js": "sha384-8pofk2zhxtapPMpwnFyTelPMrYhShNhDCE722uQh/EYFvZFuPLmSdgunqsarVQjv",
26
26
  "manifest.rich.text.js": "sha384-ZBV9jXmu2nmprEHicddRE/m7nR4RPZtVc969Jte0+EJYBcVph7itkjcgN/61PyeC",
27
27
  "manifest.router.js": "sha384-JcKnEb0E9azl6DVSN1DQMysyZOpGkskSQREjD947sMEs87nFEeZpCigB0iq8psz5",
28
28
  "manifest.slides.js": "sha384-3uRTkyK9XPLmnxI2+igZlpi4EyPlU/7IHj5j3BZJJ2KN455vXyk99fiXV3feO/XY",
29
29
  "manifest.status.js": "sha384-MBO345ab7H6Uq1X2dZLt4Ge1Gcra+Z2qYApvlAeIV8CJhDDJrz2FPXpp+Kcp8zcM",
30
30
  "manifest.svg.js": "sha384-qr/8H9+2cIhSXNbRWRtIdrDlTOxKlNJqwEefHvCYoiBNW/kKhPTFa109Orv/EBnb",
31
- "manifest.sw.js": "sha384-3uO0YGmWHY8tHYrkFf+yAVtEwzM+HIbtCZLKR5suOfKWOL7dd8Yul9+kiB2UM1X4",
31
+ "manifest.sw.js": "sha384-9+0Y6SDUeQcjS5w5yr2OjMbyuM2uc3U4htcj+f+GUHBFL4X7zxm4u7fekQwAzyxI",
32
32
  "manifest.tabs.js": "sha384-OIIcyaQnGS0eNYk4zgAFEDboNYect7THvUd9D0V6nqCeDOxQcoiqLrBEmmWVTTet",
33
33
  "manifest.tailwind.js": "sha384-r/Jvqb+Piz21jUts10BbVAJoKkShOdJRVFpywyi4HPIi/OfOJq5CtPyWAPbdkMgt",
34
34
  "manifest.toasts.js": "sha384-3zkWxzw693pxg3QDFsoYCA3CqYaLKmBaMArULXODD66Utolpewl0OAeTB92aWUVv",
@@ -16,13 +16,24 @@ function manifestNativePlugin(name) {
16
16
  return (cap && cap.Plugins && cap.Plugins[name]) || null;
17
17
  }
18
18
  // Whether a plugin exposes a native method. Bundled apps get a registerPlugin
19
- // Proxy where every property is a function, so prefer the native header.
19
+ // Proxy where every property is a function, so prefer the native header; a
20
+ // header list without this plugin means it isn't installed natively.
20
21
  function manifestNativeHas(name, plugin, method) {
21
22
  const headers = window.Capacitor && window.Capacitor.PluginHeaders;
22
- const h = Array.isArray(headers) && headers.find(x => x && x.name === name);
23
- if (h && Array.isArray(h.methods)) return h.methods.some(m => m && m.name === method);
23
+ if (Array.isArray(headers)) {
24
+ const h = headers.find(x => x && x.name === name);
25
+ if (!h) return false;
26
+ if (Array.isArray(h.methods)) return h.methods.some(m => m && m.name === method);
27
+ }
24
28
  return !!plugin && typeof plugin[method] === 'function';
25
29
  }
30
+ // A plugin with a native method, or null. Web builds use Manifest's own fallbacks,
31
+ // not plugin web stubs, so bundled and plain web builds behave the same.
32
+ function manifestNativeUse(name, method) {
33
+ if (!manifestNativeIsNative()) return null;
34
+ const plugin = manifestNativePlugin(name);
35
+ return plugin && manifestNativeHas(name, plugin, method) ? plugin : null;
36
+ }
26
37
  function manifestNativePlatform() {
27
38
  const cap = window.Capacitor;
28
39
  if (cap && typeof cap.getPlatform === 'function') { try { return cap.getPlatform(); } catch (e) {} }
@@ -104,7 +115,7 @@ function manifestShareWeb(payload) {
104
115
  }
105
116
  function manifestShare(opts) {
106
117
  const payload = opts || {};
107
- const Share = manifestNativePlugin('Share');
118
+ const Share = manifestNativeUse('Share', 'share');
108
119
  if (Share) {
109
120
  // When the native sheet is present, never fall through to the web sheet
110
121
  // (that would double-prompt); report the native outcome instead.
@@ -136,7 +147,7 @@ function manifestNativeApplyOnline(connected) {
136
147
  } catch (e) {}
137
148
  }
138
149
  function initManifestNativeNetwork() {
139
- const Network = manifestNativePlugin('Network');
150
+ const Network = manifestNativeUse('Network', 'getStatus');
140
151
  if (!Network) return;
141
152
  try { Network.getStatus().then(s => manifestNativeApplyOnline(s && s.connected)).catch(() => {}); } catch (e) {}
142
153
  try { Network.addListener('networkStatusChange', s => manifestNativeApplyOnline(s && s.connected)); } catch (e) {}
@@ -288,7 +299,7 @@ function initManifestLinks() {
288
299
  get last() { const s = window.Alpine.store('links'); return s ? s.last : null; }
289
300
  }));
290
301
 
291
- const App = manifestNativePlugin('App');
302
+ const App = manifestNativeUse('App', 'getLaunchUrl');
292
303
  if (App) {
293
304
  try { App.addListener('appUrlOpen', (data) => { if (data && data.url) manifestHandleUrl(data.url); }); } catch (e) {}
294
305
  try { App.getLaunchUrl().then(r => { if (r && r.url) manifestHandleUrl(r.url); }).catch(() => {}); } catch (e) {}
@@ -335,7 +346,7 @@ function initManifestPush() {
335
346
  window.Alpine.store('push', store);
336
347
  }
337
348
 
338
- const Push = manifestNativePlugin('PushNotifications');
349
+ const Push = manifestNativeUse('PushNotifications', 'register');
339
350
  if (Push) {
340
351
  try { Push.addListener('registration', t => { store.token = t && t.value; _manifestPushTokenHandlers.forEach(fn => { try { fn(store.token); } catch (e) {} }); }); } catch (e) {}
341
352
  try { Push.addListener('pushNotificationReceived', n => { _manifestPushReceiveHandlers.forEach(fn => { try { fn(n); } catch (e) {} }); }); } catch (e) {}
@@ -344,13 +355,13 @@ function initManifestPush() {
344
355
 
345
356
  window.Alpine.magic('push', () => ({
346
357
  async request() {
347
- const P = manifestNativePlugin('PushNotifications');
358
+ const P = manifestNativeUse('PushNotifications', 'requestPermissions');
348
359
  if (P) { try { const r = await P.requestPermissions(); const p = manifestPushMapPermission(r && r.receive); window.Alpine.store('push').permission = p; return p; } catch (e) { return 'denied'; } }
349
360
  if (typeof Notification !== 'undefined' && Notification.requestPermission) { try { const p = manifestPushMapPermission(await Notification.requestPermission()); window.Alpine.store('push').permission = p; return p; } catch (e) { return 'denied'; } }
350
361
  return 'unsupported';
351
362
  },
352
363
  async register() {
353
- const P = manifestNativePlugin('PushNotifications');
364
+ const P = manifestNativeUse('PushNotifications', 'register');
354
365
  if (P) { try { await P.register(); } catch (e) {} }
355
366
  },
356
367
  onToken(fn) { if (typeof fn === 'function') _manifestPushTokenHandlers.push(fn); },
@@ -378,7 +389,7 @@ function initManifestApp() {
378
389
  const visible = (typeof document !== 'undefined') ? document.visibilityState !== 'hidden' : true;
379
390
  if (!window.Alpine.store('app')) window.Alpine.store('app', { active: visible });
380
391
 
381
- const App = manifestNativePlugin('App');
392
+ const App = manifestNativeUse('App', 'getState');
382
393
  if (App) {
383
394
  try { App.addListener('appStateChange', s => manifestAppSetActive(s && s.isActive)); } catch (e) {}
384
395
  } else if (typeof document !== 'undefined') {
@@ -406,22 +417,22 @@ function manifestVibrate(pattern) {
406
417
  function initManifestHaptics() {
407
418
  window.Alpine.magic('haptics', () => ({
408
419
  impact(style) {
409
- const H = manifestNativePlugin('Haptics');
420
+ const H = manifestNativeUse('Haptics', 'impact');
410
421
  if (H) { try { return H.impact({ style: style || 'MEDIUM' }); } catch (e) {} }
411
422
  manifestVibrate(10); return Promise.resolve();
412
423
  },
413
424
  notification(type) {
414
- const H = manifestNativePlugin('Haptics');
425
+ const H = manifestNativeUse('Haptics', 'notification');
415
426
  if (H) { try { return H.notification({ type: type || 'SUCCESS' }); } catch (e) {} }
416
427
  manifestVibrate([10, 40, 10]); return Promise.resolve();
417
428
  },
418
429
  selection() {
419
- const H = manifestNativePlugin('Haptics');
430
+ const H = manifestNativeUse('Haptics', 'selectionChanged');
420
431
  if (H) { try { return H.selectionChanged(); } catch (e) {} }
421
432
  manifestVibrate(5); return Promise.resolve();
422
433
  },
423
434
  vibrate(ms) {
424
- const H = manifestNativePlugin('Haptics');
435
+ const H = manifestNativeUse('Haptics', 'vibrate');
425
436
  if (H) { try { return H.vibrate({ duration: ms || 300 }); } catch (e) {} }
426
437
  manifestVibrate(ms || 300); return Promise.resolve();
427
438
  }
@@ -532,7 +543,7 @@ function manifestCameraWeb(opts) {
532
543
 
533
544
  function manifestCameraPhoto(opts) {
534
545
  const o = opts || {};
535
- const Cam = manifestNativePlugin('Camera');
546
+ const Cam = manifestNativeUse('Camera', 'getPhoto');
536
547
  if (Cam) {
537
548
  return Cam.getPhoto({ resultType: 'dataUrl', source: o.source === 'photos' ? 'PHOTOS' : 'CAMERA', quality: o.quality || 90 })
538
549
  .then(r => ({ dataUrl: r && (r.dataUrl || r.webPath), format: r && r.format }))
@@ -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.250';
19
+ const BUILD_VERSION = '0.5.251';
20
20
  const CACHE_PREFIX = 'mnfst-sw:';
21
21
  const META_CACHE = CACHE_PREFIX + 'meta';
22
22
  // Sized to hold a full precache.json warm-up (PRECACHE_MAX_ENTRIES server-side)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mnfst",
3
- "version": "0.5.250",
3
+ "version": "0.5.251",
4
4
  "private": false,
5
5
  "workspaces": [
6
6
  "templates/starter",