@asteby/metacore-pwa 0.6.11 → 0.6.13
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/components/install-prompt.d.ts.map +1 -1
- package/dist/components/install-prompt.js +16 -1
- package/dist/components/install-prompt.js.map +1 -1
- package/dist/components/notification-permission-prompt.d.ts.map +1 -1
- package/dist/components/notification-permission-prompt.js +17 -2
- package/dist/components/notification-permission-prompt.js.map +1 -1
- package/dist/components/update-prompt.d.ts.map +1 -1
- package/dist/components/update-prompt.js +13 -1
- package/dist/components/update-prompt.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/use-modal-open.d.ts +9 -0
- package/dist/use-modal-open.d.ts.map +1 -0
- package/dist/use-modal-open.js +25 -0
- package/dist/use-modal-open.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-prompt.d.ts","sourceRoot":"","sources":["../../src/components/install-prompt.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install-prompt.d.ts","sourceRoot":"","sources":["../../src/components/install-prompt.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,qBAAqB,CAAA;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AASD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAgB,EAAE,GAAE,kBAAuB,QAgDvF"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
import { showNotificationToast } from '@asteby/metacore-notifications';
|
|
3
|
+
import { toast } from 'sonner';
|
|
3
4
|
import { usePWAContext } from '../provider';
|
|
5
|
+
import { useModalOpen } from '../use-modal-open';
|
|
4
6
|
const DEFAULTS = {
|
|
5
7
|
title: 'Instalar App',
|
|
6
8
|
description: 'Instala la app para acceso rápido y funcionalidad offline',
|
|
@@ -16,12 +18,25 @@ export function PWAInstallPrompt({ messages, duration = 10000 } = {}) {
|
|
|
16
18
|
const { isInstallable, installApp } = usePWAContext();
|
|
17
19
|
const msgs = { ...DEFAULTS, ...messages };
|
|
18
20
|
const shown = useRef(false);
|
|
21
|
+
const shownAt = useRef(0);
|
|
22
|
+
// Never float over an open dialog: hold back (or retract) while one is open.
|
|
23
|
+
const modalOpen = useModalOpen();
|
|
19
24
|
useEffect(() => {
|
|
25
|
+
if (modalOpen) {
|
|
26
|
+
if (shown.current) {
|
|
27
|
+
toast.dismiss('sys:pwa-install');
|
|
28
|
+
// Only offer it again if it was still on screen (not already timed out).
|
|
29
|
+
if (Date.now() - shownAt.current < duration)
|
|
30
|
+
shown.current = false;
|
|
31
|
+
}
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
20
34
|
if (!isInstallable || shown.current)
|
|
21
35
|
return;
|
|
22
36
|
if (typeof localStorage !== 'undefined' && localStorage.getItem('pwa-install-dismissed'))
|
|
23
37
|
return;
|
|
24
38
|
shown.current = true;
|
|
39
|
+
shownAt.current = Date.now();
|
|
25
40
|
showNotificationToast({
|
|
26
41
|
id: 'sys:pwa-install',
|
|
27
42
|
title: msgs.title,
|
|
@@ -45,7 +60,7 @@ export function PWAInstallPrompt({ messages, duration = 10000 } = {}) {
|
|
|
45
60
|
},
|
|
46
61
|
});
|
|
47
62
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
48
|
-
}, [isInstallable]);
|
|
63
|
+
}, [isInstallable, modalOpen]);
|
|
49
64
|
return null;
|
|
50
65
|
}
|
|
51
66
|
//# sourceMappingURL=install-prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-prompt.js","sourceRoot":"","sources":["../../src/components/install-prompt.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"install-prompt.js","sourceRoot":"","sources":["../../src/components/install-prompt.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAehD,MAAM,QAAQ,GAAoC;IAChD,KAAK,EAAE,cAAc;IACrB,WAAW,EAAE,2DAA2D;IACxE,YAAY,EAAE,UAAU;IACxB,YAAY,EAAE,UAAU;CACzB,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,KAAyB,EAAE;IACtF,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE,CAAA;IACrD,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACzB,6EAA6E;IAC7E,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;gBAChC,yEAAyE;gBACzE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,QAAQ;oBAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAA;YACpE,CAAC;YACD,OAAM;QACR,CAAC;QACD,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO;YAAE,OAAM;QAC3C,IAAI,OAAO,YAAY,KAAK,WAAW,IAAI,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC;YAAE,OAAM;QAChG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;QACpB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE5B,qBAAqB,CAAC;YACpB,EAAE,EAAE,iBAAiB;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,WAAW;YACtB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,QAAQ;YACR,MAAM,EAAE;gBACN,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,UAAU,EAAE,CAAA;gBACnB,CAAC;aACF;YACD,MAAM,EAAE;gBACN,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;wBACxC,YAAY,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAA;oBACvD,CAAC;gBACH,CAAC;aACF;SACF,CAAC,CAAA;QACF,uDAAuD;IACzD,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAA;IAE9B,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-permission-prompt.d.ts","sourceRoot":"","sources":["../../src/components/notification-permission-prompt.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"notification-permission-prompt.d.ts","sourceRoot":"","sources":["../../src/components/notification-permission-prompt.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,oCAAoC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,EAAE,oCAAoC,CAAA;IAC/C,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mEAAmE;IACnE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B;AAcD,eAAO,MAAM,wBAAwB,wBAAwB,CAAA;AA8B7D;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,EAC3C,QAAQ,EACR,eAAsB,EACtB,aAAoB,EACpB,OAAkC,GACnC,GAAE,iCAAsC,QAqFxC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
import { showNotificationToast } from '@asteby/metacore-notifications';
|
|
3
3
|
import { toast } from 'sonner';
|
|
4
|
+
import { useModalOpen } from '../use-modal-open';
|
|
4
5
|
const DEFAULTS = {
|
|
5
6
|
title: 'Activar Notificaciones',
|
|
6
7
|
description: 'Recibe alertas cuando te envíen mensajes nuevos. Puedes desactivarlas cuando quieras.',
|
|
@@ -48,6 +49,17 @@ function snooze() {
|
|
|
48
49
|
export function NotificationPermissionPrompt({ messages, autoShowDelayMs = 2000, reloadOnGrant = true, toastId = PUSH_PERMISSION_TOAST_ID, } = {}) {
|
|
49
50
|
const msgs = { ...DEFAULTS, ...messages };
|
|
50
51
|
const offeredRef = useRef(false);
|
|
52
|
+
const modalOpen = useModalOpen();
|
|
53
|
+
const modalOpenRef = useRef(modalOpen);
|
|
54
|
+
modalOpenRef.current = modalOpen;
|
|
55
|
+
// The permission card is sticky: when a dialog opens, retract it and let it
|
|
56
|
+
// be offered again once the dialog closes (it was not dismissed by the user).
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (modalOpen && offeredRef.current) {
|
|
59
|
+
toast.dismiss(toastId);
|
|
60
|
+
offeredRef.current = false;
|
|
61
|
+
}
|
|
62
|
+
}, [modalOpen, toastId]);
|
|
51
63
|
const handleAllow = async () => {
|
|
52
64
|
snooze();
|
|
53
65
|
try {
|
|
@@ -77,6 +89,9 @@ export function NotificationPermissionPrompt({ messages, autoShowDelayMs = 2000,
|
|
|
77
89
|
return;
|
|
78
90
|
if (isSnoozed() || offeredRef.current)
|
|
79
91
|
return;
|
|
92
|
+
// Never over an open dialog: retry once it closes (see effect below).
|
|
93
|
+
if (modalOpenRef.current)
|
|
94
|
+
return;
|
|
80
95
|
offeredRef.current = true;
|
|
81
96
|
showNotificationToast({
|
|
82
97
|
id: toastId,
|
|
@@ -100,12 +115,12 @@ export function NotificationPermissionPrompt({ messages, autoShowDelayMs = 2000,
|
|
|
100
115
|
return;
|
|
101
116
|
if (!('Notification' in window) || Notification.permission !== 'default')
|
|
102
117
|
return;
|
|
103
|
-
if (isSnoozed())
|
|
118
|
+
if (isSnoozed() || modalOpen)
|
|
104
119
|
return;
|
|
105
120
|
const timer = setTimeout(show, autoShowDelayMs);
|
|
106
121
|
return () => clearTimeout(timer);
|
|
107
122
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
108
|
-
}, [autoShowDelayMs]);
|
|
123
|
+
}, [autoShowDelayMs, modalOpen]);
|
|
109
124
|
useEffect(() => {
|
|
110
125
|
if (typeof window === 'undefined')
|
|
111
126
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification-permission-prompt.js","sourceRoot":"","sources":["../../src/components/notification-permission-prompt.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"notification-permission-prompt.js","sourceRoot":"","sources":["../../src/components/notification-permission-prompt.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-prompt.d.ts","sourceRoot":"","sources":["../../src/components/update-prompt.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-prompt.d.ts","sourceRoot":"","sources":["../../src/components/update-prompt.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B;AASD,4DAA4D;AAC5D,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AAEnD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,QAAY,EACZ,OAA6B,GAC9B,GAAE,iBAAsB,QAuCxB"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
import { showNotificationToast } from '@asteby/metacore-notifications';
|
|
3
|
+
import { toast } from 'sonner';
|
|
3
4
|
import { usePWAContext } from '../provider';
|
|
5
|
+
import { useModalOpen } from '../use-modal-open';
|
|
4
6
|
const DEFAULTS = {
|
|
5
7
|
title: 'Actualización disponible',
|
|
6
8
|
description: 'Hay una nueva versión disponible',
|
|
@@ -18,7 +20,17 @@ export function PWAUpdatePrompt({ messages, duration = 0, toastId = PWA_UPDATE_T
|
|
|
18
20
|
const { needRefresh, updateApp, closeUpdatePrompt } = usePWAContext();
|
|
19
21
|
const msgs = { ...DEFAULTS, ...messages };
|
|
20
22
|
const shown = useRef(false);
|
|
23
|
+
// The sticky update card used to sit over open dialogs and hide their fields
|
|
24
|
+
// and buttons: retract it while a modal is open, bring it back afterwards.
|
|
25
|
+
const modalOpen = useModalOpen();
|
|
21
26
|
useEffect(() => {
|
|
27
|
+
if (modalOpen) {
|
|
28
|
+
if (shown.current) {
|
|
29
|
+
toast.dismiss(toastId);
|
|
30
|
+
shown.current = false;
|
|
31
|
+
}
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
22
34
|
if (!needRefresh || shown.current)
|
|
23
35
|
return;
|
|
24
36
|
shown.current = true;
|
|
@@ -39,7 +51,7 @@ export function PWAUpdatePrompt({ messages, duration = 0, toastId = PWA_UPDATE_T
|
|
|
39
51
|
},
|
|
40
52
|
});
|
|
41
53
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42
|
-
}, [needRefresh]);
|
|
54
|
+
}, [needRefresh, modalOpen]);
|
|
43
55
|
return null;
|
|
44
56
|
}
|
|
45
57
|
//# sourceMappingURL=update-prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-prompt.js","sourceRoot":"","sources":["../../src/components/update-prompt.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"update-prompt.js","sourceRoot":"","sources":["../../src/components/update-prompt.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAoBhD,MAAM,QAAQ,GAAmC;IAC/C,KAAK,EAAE,0BAA0B;IACjC,WAAW,EAAE,kCAAkC;IAC/C,WAAW,EAAE,YAAY;IACzB,YAAY,EAAE,SAAS;CACxB,CAAA;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAA;AAEnD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,QAAQ,GAAG,CAAC,EACZ,OAAO,GAAG,mBAAmB,MACR,EAAE;IACvB,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,aAAa,EAAE,CAAA;IACrE,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAA;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,6EAA6E;IAC7E,2EAA2E;IAC3E,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACtB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAA;YACvB,CAAC;YACD,OAAM;QACR,CAAC;QACD,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO;YAAE,OAAM;QACzC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;QAEpB,qBAAqB,CAAC;YACpB,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,WAAW;YACtB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,QAAQ,IAAI,QAAQ;YAC9B,MAAM,EAAE;gBACN,KAAK,EAAE,IAAI,CAAC,WAAW;gBACvB,OAAO,EAAE,SAAS;aACnB;YACD,MAAM,EAAE;gBACN,KAAK,EAAE,IAAI,CAAC,YAAY;gBACxB,OAAO,EAAE,iBAAiB;aAC3B;SACF,CAAC,CAAA;QACF,uDAAuD;IACzD,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAA;IAE5B,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,5 +6,6 @@ export { PushNotificationService, } from './push-service';
|
|
|
6
6
|
export type { PushApiClient, PushServiceOptions } from './push-service';
|
|
7
7
|
export { NotificationManager, notificationManager, } from './notification-manager';
|
|
8
8
|
export type { NotificationOptions, NotificationManagerOptions } from './notification-manager';
|
|
9
|
+
export { useModalOpen, hasOpenModal } from './use-modal-open';
|
|
9
10
|
export { PWAInstallPrompt, PWAUpdatePrompt, OfflineIndicator, NotificationPermissionPrompt, } from './components';
|
|
10
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACvD,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAClD,YAAY,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAErD,OAAO,EACL,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEvE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAE7F,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACvD,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAClD,YAAY,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAErD,OAAO,EACL,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEvE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAE7F,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE7D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,cAAc,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@ export { PWAProvider, usePWAContext } from './provider';
|
|
|
2
2
|
export { usePWA, useNotifications } from './hooks';
|
|
3
3
|
export { PushNotificationService, } from './push-service';
|
|
4
4
|
export { NotificationManager, notificationManager, } from './notification-manager';
|
|
5
|
+
export { useModalOpen, hasOpenModal } from './use-modal-open';
|
|
5
6
|
export { PWAInstallPrompt, PWAUpdatePrompt, OfflineIndicator, NotificationPermissionPrompt, } from './components';
|
|
6
7
|
// `metacorePWA` lives in the dedicated `@asteby/metacore-pwa/vite-plugin`
|
|
7
8
|
// sub-export. Re-exporting it from the root would drag `vite-plugin-pwa`
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAOvD,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAGlD,OAAO,EACL,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,cAAc,CAAA;AAErB,0EAA0E;AAC1E,yEAAyE;AACzE,kEAAkE;AAClE,yEAAyE;AACzE,uBAAuB;AACvB,EAAE;AACF,mEAAmE"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAOvD,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAGlD,OAAO,EACL,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE7D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,cAAc,CAAA;AAErB,0EAA0E;AAC1E,yEAAyE;AACzE,kEAAkE;AAClE,yEAAyE;AACzE,uBAAuB;AACvB,EAAE;AACF,mEAAmE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** True when a Radix dialog / alert dialog is currently open in the document. */
|
|
2
|
+
export declare function hasOpenModal(root?: ParentNode | undefined): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Tracks whether any modal is open. System prompts (install, update, news,
|
|
5
|
+
* push permission) must not float over a form the user is filling in: they
|
|
6
|
+
* hold back while this is true and come back when the modal closes.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useModalOpen(): boolean;
|
|
9
|
+
//# sourceMappingURL=use-modal-open.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-modal-open.d.ts","sourceRoot":"","sources":["../src/use-modal-open.ts"],"names":[],"mappings":"AAIA,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,IAAI,GAAE,UAAU,GAAG,SAAkE,GAAG,OAAO,CAE3H;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAWtC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
const OPEN_MODAL = '[role="dialog"][data-state="open"], [role="alertdialog"][data-state="open"]';
|
|
3
|
+
/** True when a Radix dialog / alert dialog is currently open in the document. */
|
|
4
|
+
export function hasOpenModal(root = typeof document === 'undefined' ? undefined : document) {
|
|
5
|
+
return !!root?.querySelector(OPEN_MODAL);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Tracks whether any modal is open. System prompts (install, update, news,
|
|
9
|
+
* push permission) must not float over a form the user is filling in: they
|
|
10
|
+
* hold back while this is true and come back when the modal closes.
|
|
11
|
+
*/
|
|
12
|
+
export function useModalOpen() {
|
|
13
|
+
const [open, setOpen] = useState(() => hasOpenModal());
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (typeof document === 'undefined' || typeof MutationObserver === 'undefined')
|
|
16
|
+
return;
|
|
17
|
+
const sync = () => setOpen(hasOpenModal());
|
|
18
|
+
sync();
|
|
19
|
+
const obs = new MutationObserver(sync);
|
|
20
|
+
obs.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['data-state'] });
|
|
21
|
+
return () => obs.disconnect();
|
|
22
|
+
}, []);
|
|
23
|
+
return open;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=use-modal-open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-modal-open.js","sourceRoot":"","sources":["../src/use-modal-open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C,MAAM,UAAU,GAAG,6EAA6E,CAAA;AAEhG,iFAAiF;AACjF,MAAM,UAAU,YAAY,CAAC,OAA+B,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;IAChH,OAAO,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAA;IACtD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,gBAAgB,KAAK,WAAW;YAAE,OAAM;QACtF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;QAC1C,IAAI,EAAE,CAAA;QACN,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACtC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;QACjH,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAA;IACN,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asteby/metacore-pwa",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.13",
|
|
4
4
|
"description": "Metacore PWA helpers — vite plugin wrapper, install/update prompts, push notifications, offline indicator",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"lucide-react": "^1.0.0",
|
|
52
|
-
"@asteby/metacore-notifications": "
|
|
52
|
+
"@asteby/metacore-notifications": "36.0.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@types/react": "^19.0.0",
|