@cnrai/pave 0.11.83 → 0.11.102

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.
Files changed (76) hide show
  1. package/package.json +1 -1
  2. package/pave.js +1 -2
  3. package/sandbox/permission.js +1 -1
  4. package/web/apple-touch-icon.png +0 -0
  5. package/web/assets/abnfDiagram-VCTEODGH-9I7swegc.js +0 -1
  6. package/web/assets/arc-DyVWQdpx.js +0 -1
  7. package/web/assets/architectureDiagram-5GKGNRK7-Bu33Fevc.js +0 -36
  8. package/web/assets/blockDiagram-NRAW4CY4-BjSrG4Gi.js +0 -129
  9. package/web/assets/c4Diagram-UCG6FXSJ-DKW76ufa.js +0 -38
  10. package/web/assets/channel-lYoL_8ok.js +0 -1
  11. package/web/assets/chunk-2Q5K7J3B-DWiA9qEw.js +0 -1
  12. package/web/assets/chunk-5VM5RSS4-BxwBK-a7.js +0 -15
  13. package/web/assets/chunk-F27PBJKO-55JB7WtZ.js +0 -1
  14. package/web/assets/chunk-G27WJ6UU-BYcYIibk.js +0 -231
  15. package/web/assets/chunk-JWPE2WC7-D-kqXy5w.js +0 -1
  16. package/web/assets/chunk-LCL6LL3I-D7ezi85E.js +0 -206
  17. package/web/assets/chunk-POPQ4Y6H-B-1wHMit.js +0 -1
  18. package/web/assets/chunk-SVP7TREG-BUGEg5xN.js +0 -88
  19. package/web/assets/chunk-XXDRQBXY-Cb0f4fIf.js +0 -1
  20. package/web/assets/classDiagram-DTDB5LWJ-C5UXAo_j.js +0 -1
  21. package/web/assets/classDiagram-v2-JRS7N3AN-C5UXAo_j.js +0 -1
  22. package/web/assets/cose-bilkent-JH36ORCC-CAWDvLIh.js +0 -1
  23. package/web/assets/cynefin-OW5HDTMX-Cosp1kQ3.js +0 -178
  24. package/web/assets/cynefinDiagram-5FMLGOSQ-DNbene_1.js +0 -62
  25. package/web/assets/cytoscape.esm-Dz9tvMTw.js +0 -331
  26. package/web/assets/dagre-3AP2YEHR-CP2z1R4J.js +0 -4
  27. package/web/assets/defaultLocale-DX6XiGOO.js +0 -1
  28. package/web/assets/diagram-S7CK7UJ4-Bq6kE3Qo.js +0 -30
  29. package/web/assets/diagram-UQ7AKVKN-BjhawDgz.js +0 -41
  30. package/web/assets/diagram-VSXAHHWV-k-uyl7kx.js +0 -3
  31. package/web/assets/diagram-VX7I27RA-CvQYwC6D.js +0 -24
  32. package/web/assets/diagram-Z3DM3KII-ClEsZ-KM.js +0 -24
  33. package/web/assets/ebnfDiagram-PWID7BFC-DM6ZbS6R.js +0 -1
  34. package/web/assets/erDiagram-SSCWMZ5O-CYaU_Nw-.js +0 -99
  35. package/web/assets/flowDiagram-A5DVABFB-C5Rbw9x2.js +0 -168
  36. package/web/assets/ganttDiagram-EL5Y4UJY-1uZXMEyg.js +0 -292
  37. package/web/assets/gitGraphDiagram-WWUBYQGX-Be1ZzKab.js +0 -106
  38. package/web/assets/index-C5qeLycK.css +0 -10
  39. package/web/assets/index-CV--Typp.js +0 -122
  40. package/web/assets/infoDiagram-RXCK75RN-C910kEri.js +0 -2
  41. package/web/assets/init-Gi6I4Gst.js +0 -1
  42. package/web/assets/ishikawaDiagram-5VMMS53U-CqIAX_4U.js +0 -70
  43. package/web/assets/journeyDiagram-EYS64GPL-BJH2T6Oe.js +0 -139
  44. package/web/assets/kanban-definition-3QL26DDD-D4MwIQqo.js +0 -89
  45. package/web/assets/katex-C5jXJg4s.js +0 -257
  46. package/web/assets/layout-E0MZ6Vxs.js +0 -1
  47. package/web/assets/linear-BUHqk8Cw.js +0 -1
  48. package/web/assets/mermaid.core-AbOCDXp6.js +0 -310
  49. package/web/assets/mindmap-definition-FBJOCRG2-BAJfUJuW.js +0 -96
  50. package/web/assets/ordinal-Cboi1Yqb.js +0 -1
  51. package/web/assets/ort-wasm-simd-threaded.jsep-B0T3yYHD.wasm +0 -0
  52. package/web/assets/pegDiagram-XKGWAZYB-5bYvRIwo.js +0 -1
  53. package/web/assets/pieDiagram-E7YTZNPT-D2yDVdcL.js +0 -39
  54. package/web/assets/quadrantDiagram-AXDQQJYC-BnD6S8YV.js +0 -7
  55. package/web/assets/railroadDiagram-O6MQD6OU-DQR3NMJt.js +0 -1
  56. package/web/assets/requirementDiagram-EFPCY7ZU-B6ZQEd81.js +0 -84
  57. package/web/assets/sankeyDiagram-P5KCCOFB-gujp6WSF.js +0 -40
  58. package/web/assets/sequenceDiagram-WJ2MYXX4-hohjJ8lb.js +0 -162
  59. package/web/assets/sizeCapture-X5ZJPWSS-nn3k8g1M.js +0 -1
  60. package/web/assets/stateDiagram-HBIQ2CUA-k17nzvdJ.js +0 -1
  61. package/web/assets/stateDiagram-v2-4QOOHH4V-D5-Y44AB.js +0 -1
  62. package/web/assets/swimlanes-XN3QIQJK-T7GDnOeh.js +0 -1
  63. package/web/assets/swimlanesDiagram-VK2B7HYN-BmhKCblm.js +0 -8
  64. package/web/assets/timeline-definition-24CTP7MA-CrjmBowP.js +0 -120
  65. package/web/assets/transformers.web-aWUkeYjZ.js +0 -2896
  66. package/web/assets/vennDiagram-4TSXK5OY-t0JqhJnA.js +0 -34
  67. package/web/assets/wardleyDiagram-VM6X3IG4-DKYd1Jnq.js +0 -78
  68. package/web/assets/whisper-worker-Dtk1MkQa.js +0 -1
  69. package/web/assets/xychartDiagram-S5SC5T6Z-CH7Mipdq.js +0 -7
  70. package/web/assets/zh-TW-DNKt7XlL.js +0 -1
  71. package/web/favicon-32x32.png +0 -0
  72. package/web/index.html +0 -16
  73. package/web/manifest.json +0 -21
  74. package/web/pave-logo-dark.png +0 -0
  75. package/web/pave-logo-light.png +0 -0
  76. package/web/sw.js +0 -164
package/web/sw.js DELETED
@@ -1,164 +0,0 @@
1
- /* eslint-env serviceworker */
2
- /**
3
- * PAVE Service Worker — Web Push Notifications
4
- *
5
- * Handles push events for iOS Safari PWA and desktop browsers.
6
- * When the app is in the background or the device is locked, the Service
7
- * Worker receives the push and displays a system notification.
8
- *
9
- * On notification click, focuses or opens the PWA and navigates to the
10
- * relevant session.
11
- */
12
-
13
- // ─── Push Event ───────────────────────────────────────────────────
14
-
15
- self.addEventListener('push', (event) => {
16
- let payload;
17
- try {
18
- payload = event.data ? event.data.json() : {};
19
- } catch (e) {
20
- payload = { title: 'PAVE', body: event.data ? event.data.text() : 'New notification' };
21
- }
22
-
23
- const title = payload.title || 'PAVE';
24
- const options = {
25
- body: payload.body || '',
26
- icon: payload.icon || '/pave-logo-light.png',
27
- badge: '/pave-logo-light.png',
28
- tag: payload.tag || 'pave-notification',
29
- data: {
30
- url: payload.url || '/',
31
- sessionId: payload.sessionId || null,
32
- },
33
- // vibrate on mobile if supported
34
- vibrate: [100],
35
- };
36
-
37
- event.waitUntil(
38
- self.registration.showNotification(title, options),
39
- );
40
- });
41
-
42
- // ─── Notification Click ───────────────────────────────────────────
43
-
44
- /**
45
- * Write sessionId to IndexedDB as a backup communication channel.
46
- * On iOS PWA, postMessage to a backgrounded client is lost — the page's
47
- * JS thread is suspended. IndexedDB is available from the SW and persists
48
- * until the page reads and clears it on visibilitychange. (#1375)
49
- */
50
- function writePendingNav(sessionId) {
51
- return new Promise((resolve) => {
52
- if (!sessionId) return resolve();
53
- try {
54
- const req = indexedDB.open('pave-sw', 1);
55
- req.onupgradeneeded = function () {
56
- req.result.createObjectStore('pave-pending-nav');
57
- };
58
- req.onsuccess = function () {
59
- const db = req.result;
60
- const tx = db.transaction('pave-pending-nav', 'readwrite');
61
- tx.objectStore('pave-pending-nav').put(sessionId, 'sessionId');
62
- tx.oncomplete = function () { db.close(); resolve(); };
63
- tx.onerror = function () { db.close(); resolve(); };
64
- };
65
- req.onerror = function () { resolve(); };
66
- } catch (e) {
67
- resolve(); // non-fatal
68
- }
69
- });
70
- }
71
-
72
- self.addEventListener('notificationclick', (event) => {
73
- event.notification.close();
74
-
75
- const notifData = (event.notification && event.notification.data) || {};
76
- let targetUrl = notifData.url || '/';
77
- const sessionId = notifData.sessionId || null;
78
-
79
- // Issue #1208: If sessionId is present, ensure the URL targets that session.
80
- // The server already includes the session in the url, but this provides
81
- // a fallback in case the url was overridden or missing.
82
- if (sessionId && targetUrl.indexOf('session=') === -1) {
83
- targetUrl = '/?session=' + sessionId;
84
- }
85
-
86
- // Resolve URL relative to the SW scope
87
- if (targetUrl.charAt(0) === '/') {
88
- targetUrl = self.registration.scope + targetUrl.replace(/^\//, '');
89
- }
90
-
91
- // Issue #1217: Build a relaxed origin+path for matching existing clients.
92
- // The exact targetUrl includes ?session= which existing client URLs won't have.
93
- let targetPath;
94
- try {
95
- targetPath = new URL(targetUrl).pathname;
96
- } catch {
97
- targetPath = '/';
98
- }
99
-
100
- event.waitUntil(
101
- // #1375: Write to IndexedDB FIRST — this is the reliable backup channel
102
- // for iOS PWA where postMessage is lost on suspended pages.
103
- writePendingNav(sessionId).then(() =>
104
- self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clientList) => {
105
- // Issue #1217: Use relaxed URL matching — compare origin+path, not the
106
- // full URL with query params. Existing client URLs rarely have ?session=.
107
- for (let i = 0; i < clientList.length; i++) {
108
- const client = clientList[i];
109
- try {
110
- const clientUrl = new URL(client.url);
111
- if (clientUrl.pathname === targetPath && 'focus' in client) {
112
- // Issue #1377: postMessage unconditionally — when the PWA is already
113
- // foregrounded, focus() rejects (already focused) and .catch()
114
- // swallows it, so postMessage inside .then() never executes.
115
- // The IndexedDB path (#1375) handles the backgrounded case.
116
- if (sessionId) {
117
- client.postMessage({ type: 'navigate-session', sessionId });
118
- }
119
- return client.focus().catch(() => {});
120
- }
121
- } catch {
122
- // URL parse failure — skip this client
123
- }
124
- }
125
- // Try to find any PAVE window and navigate it
126
- for (let j = 0; j < clientList.length; j++) {
127
- const c = clientList[j];
128
- if ('focus' in c && 'navigate' in c) {
129
- c.navigate(targetUrl);
130
- return c.focus().catch(() => {});
131
- }
132
- }
133
- // Issue #1217: iOS Safari PWA fallback — navigate() is unavailable.
134
- // postMessage the first available window to switch sessions.
135
- if (sessionId && clientList.length > 0) {
136
- for (let k = 0; k < clientList.length; k++) {
137
- if ('focus' in clientList[k]) {
138
- // Issue #1377: postMessage unconditionally (see above).
139
- if (sessionId) {
140
- clientList[k].postMessage({ type: 'navigate-session', sessionId });
141
- }
142
- return clientList[k].focus().catch(() => {});
143
- }
144
- }
145
- }
146
- // No existing window — open a new one
147
- if (self.clients.openWindow) {
148
- return self.clients.openWindow(targetUrl);
149
- }
150
- })),
151
- );
152
- });
153
-
154
- // ─── Install / Activate ───────────────────────────────────────────
155
-
156
- self.addEventListener('install', (event) => {
157
- // Skip waiting so the SW activates immediately on first install
158
- self.skipWaiting();
159
- });
160
-
161
- self.addEventListener('activate', (event) => {
162
- // Take control of all clients immediately
163
- event.waitUntil(self.clients.claim());
164
- });