joopjs 2.0.0
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/CHANGELOG.md +678 -0
- package/README.md +583 -0
- package/dist/a11y.service-C-DQQfgO.d.mts +143 -0
- package/dist/a11y.service-CauEJrJe.d.ts +143 -0
- package/dist/adapters-B6slG6hQ.d.mts +84 -0
- package/dist/adapters-B6slG6hQ.d.ts +84 -0
- package/dist/aes.service-CkoupAww.d.mts +95 -0
- package/dist/aes.service-CkoupAww.d.ts +95 -0
- package/dist/ai/index.d.mts +99 -0
- package/dist/ai/index.d.ts +99 -0
- package/dist/ai/index.js +307 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/index.mjs +304 -0
- package/dist/ai/index.mjs.map +1 -0
- package/dist/analytics/index.d.mts +42 -0
- package/dist/analytics/index.d.ts +42 -0
- package/dist/analytics/index.js +139 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/index.mjs +136 -0
- package/dist/analytics/index.mjs.map +1 -0
- package/dist/angular/index.d.mts +148 -0
- package/dist/angular/index.d.ts +148 -0
- package/dist/angular/index.js +122 -0
- package/dist/angular/index.js.map +1 -0
- package/dist/angular/index.mjs +101 -0
- package/dist/angular/index.mjs.map +1 -0
- package/dist/api/index.d.mts +128 -0
- package/dist/api/index.d.ts +128 -0
- package/dist/api/index.js +1358 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/index.mjs +1332 -0
- package/dist/api/index.mjs.map +1 -0
- package/dist/auth/index.d.mts +105 -0
- package/dist/auth/index.d.ts +105 -0
- package/dist/auth/index.js +989 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/index.mjs +979 -0
- package/dist/auth/index.mjs.map +1 -0
- package/dist/auth.service-DNVB-L4U.d.mts +16 -0
- package/dist/auth.service-PjUUSUIt.d.ts +16 -0
- package/dist/banking/index.d.mts +1530 -0
- package/dist/banking/index.d.ts +1530 -0
- package/dist/banking/index.js +4739 -0
- package/dist/banking/index.js.map +1 -0
- package/dist/banking/index.mjs +4661 -0
- package/dist/banking/index.mjs.map +1 -0
- package/dist/cache/index.d.mts +40 -0
- package/dist/cache/index.d.ts +40 -0
- package/dist/cache/index.js +174 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/index.mjs +172 -0
- package/dist/cache/index.mjs.map +1 -0
- package/dist/client-profile.service-BuPeXVp5.d.mts +28 -0
- package/dist/client-profile.service-D5bRRYQp.d.ts +28 -0
- package/dist/config.models-Cqg04fAQ.d.mts +84 -0
- package/dist/config.models-Cqg04fAQ.d.ts +84 -0
- package/dist/config.service-CrCvI-JS.d.ts +31 -0
- package/dist/config.service-Cz4QQLlf.d.mts +31 -0
- package/dist/core/index.d.mts +4 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.js +631 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +619 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/crypto-utils-DriNhLdx.d.mts +30 -0
- package/dist/crypto-utils-DriNhLdx.d.ts +30 -0
- package/dist/data-storage.service-DT6xaTxE.d.ts +51 -0
- package/dist/data-storage.service-LvhGRCmw.d.mts +51 -0
- package/dist/deeplink/index.d.mts +39 -0
- package/dist/deeplink/index.d.ts +39 -0
- package/dist/deeplink/index.js +268 -0
- package/dist/deeplink/index.js.map +1 -0
- package/dist/deeplink/index.mjs +265 -0
- package/dist/deeplink/index.mjs.map +1 -0
- package/dist/deeplink.service-Ctd5u243.d.mts +35 -0
- package/dist/deeplink.service-uUuTnY9_.d.ts +35 -0
- package/dist/dev/index.d.mts +20 -0
- package/dist/dev/index.d.ts +20 -0
- package/dist/dev/index.js +51 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/index.mjs +49 -0
- package/dist/dev/index.mjs.map +1 -0
- package/dist/device/index.d.mts +108 -0
- package/dist/device/index.d.ts +108 -0
- package/dist/device/index.js +960 -0
- package/dist/device/index.js.map +1 -0
- package/dist/device/index.mjs +951 -0
- package/dist/device/index.mjs.map +1 -0
- package/dist/differential-privacy-BcAv1G80.d.mts +210 -0
- package/dist/differential-privacy-C8mAUjZr.d.ts +210 -0
- package/dist/encryption/index.d.mts +75 -0
- package/dist/encryption/index.d.ts +75 -0
- package/dist/encryption/index.js +605 -0
- package/dist/encryption/index.js.map +1 -0
- package/dist/encryption/index.mjs +598 -0
- package/dist/encryption/index.mjs.map +1 -0
- package/dist/form-validator-3tkmzr_o.d.mts +72 -0
- package/dist/form-validator-3tkmzr_o.d.ts +72 -0
- package/dist/forms/index.d.mts +59 -0
- package/dist/forms/index.d.ts +59 -0
- package/dist/forms/index.js +446 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/index.mjs +442 -0
- package/dist/forms/index.mjs.map +1 -0
- package/dist/i18n/index.d.mts +37 -0
- package/dist/i18n/index.d.ts +37 -0
- package/dist/i18n/index.js +147 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/index.mjs +145 -0
- package/dist/i18n/index.mjs.map +1 -0
- package/dist/idempotency.service-_6LqhivP.d.mts +372 -0
- package/dist/idempotency.service-eOKoISRD.d.ts +372 -0
- package/dist/index-B_ksKpS1.d.mts +202 -0
- package/dist/index-CqDKWTUP.d.mts +28 -0
- package/dist/index-CqDKWTUP.d.ts +28 -0
- package/dist/index-DFqEoX_l.d.ts +202 -0
- package/dist/index-Dz0gOur2.d.mts +36 -0
- package/dist/index-Dz0gOur2.d.ts +36 -0
- package/dist/index.d.mts +1336 -0
- package/dist/index.d.ts +1336 -0
- package/dist/index.js +19464 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +19155 -0
- package/dist/index.mjs.map +1 -0
- package/dist/india/index.d.mts +75 -0
- package/dist/india/index.d.ts +75 -0
- package/dist/india/index.js +325 -0
- package/dist/india/index.js.map +1 -0
- package/dist/india/index.mjs +303 -0
- package/dist/india/index.mjs.map +1 -0
- package/dist/joop-Bx7Iwj5p.d.mts +155 -0
- package/dist/joop-CA3DMeOO.d.ts +155 -0
- package/dist/native-bridge/index.d.mts +27 -0
- package/dist/native-bridge/index.d.ts +27 -0
- package/dist/native-bridge/index.js +98 -0
- package/dist/native-bridge/index.js.map +1 -0
- package/dist/native-bridge/index.mjs +96 -0
- package/dist/native-bridge/index.mjs.map +1 -0
- package/dist/network/index.d.mts +85 -0
- package/dist/network/index.d.ts +85 -0
- package/dist/network/index.js +454 -0
- package/dist/network/index.js.map +1 -0
- package/dist/network/index.mjs +451 -0
- package/dist/network/index.mjs.map +1 -0
- package/dist/network-monitor-BIwPSXme.d.mts +179 -0
- package/dist/network-monitor-Bqp2hvZr.d.ts +179 -0
- package/dist/notification.service-Dm4fvfZf.d.mts +25 -0
- package/dist/notification.service-tEMKatWJ.d.ts +25 -0
- package/dist/observability/index.d.mts +179 -0
- package/dist/observability/index.d.ts +179 -0
- package/dist/observability/index.js +559 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/index.mjs +552 -0
- package/dist/observability/index.mjs.map +1 -0
- package/dist/oidc-client-DIJcClmB.d.mts +190 -0
- package/dist/oidc-client-DxhyE59t.d.ts +190 -0
- package/dist/platform/index.d.mts +73 -0
- package/dist/platform/index.d.ts +73 -0
- package/dist/platform/index.js +127 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/index.mjs +125 -0
- package/dist/platform/index.mjs.map +1 -0
- package/dist/pwa/index.d.mts +31 -0
- package/dist/pwa/index.d.ts +31 -0
- package/dist/pwa/index.js +247 -0
- package/dist/pwa/index.js.map +1 -0
- package/dist/pwa/index.mjs +244 -0
- package/dist/pwa/index.mjs.map +1 -0
- package/dist/react/index.d.mts +133 -0
- package/dist/react/index.d.ts +133 -0
- package/dist/react/index.js +632 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/index.mjs +630 -0
- package/dist/react/index.mjs.map +1 -0
- package/dist/router/index.d.mts +39 -0
- package/dist/router/index.d.ts +39 -0
- package/dist/router/index.js +168 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/index.mjs +166 -0
- package/dist/router/index.mjs.map +1 -0
- package/dist/security/index.d.mts +206 -0
- package/dist/security/index.d.ts +206 -0
- package/dist/security/index.js +1297 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/index.mjs +1285 -0
- package/dist/security/index.mjs.map +1 -0
- package/dist/session/index.d.mts +115 -0
- package/dist/session/index.d.ts +115 -0
- package/dist/session/index.js +297 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/index.mjs +292 -0
- package/dist/session/index.mjs.map +1 -0
- package/dist/state/index.d.mts +43 -0
- package/dist/state/index.d.ts +43 -0
- package/dist/state/index.js +156 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/index.mjs +152 -0
- package/dist/state/index.mjs.map +1 -0
- package/dist/statement-parser-BHQtXwCM.d.ts +260 -0
- package/dist/statement-parser-C2qNmb49.d.mts +260 -0
- package/dist/storage/index.d.mts +40 -0
- package/dist/storage/index.d.ts +40 -0
- package/dist/storage/index.js +256 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/index.mjs +252 -0
- package/dist/storage/index.mjs.map +1 -0
- package/dist/sync/index.d.mts +69 -0
- package/dist/sync/index.d.ts +69 -0
- package/dist/sync/index.js +330 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/index.mjs +323 -0
- package/dist/sync/index.mjs.map +1 -0
- package/dist/sync-engine-DCIMRG5s.d.ts +61 -0
- package/dist/sync-engine-DZqyKHkK.d.mts +61 -0
- package/dist/theme/index.d.mts +53 -0
- package/dist/theme/index.d.ts +53 -0
- package/dist/theme/index.js +169 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/index.mjs +167 -0
- package/dist/theme/index.mjs.map +1 -0
- package/dist/ui/index.d.mts +66 -0
- package/dist/ui/index.d.ts +66 -0
- package/dist/ui/index.js +811 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/index.mjs +803 -0
- package/dist/ui/index.mjs.map +1 -0
- package/dist/utilities/index.d.mts +199 -0
- package/dist/utilities/index.d.ts +199 -0
- package/dist/utilities/index.js +1991 -0
- package/dist/utilities/index.js.map +1 -0
- package/dist/utilities/index.mjs +1923 -0
- package/dist/utilities/index.mjs.map +1 -0
- package/dist/validation/index.d.mts +60 -0
- package/dist/validation/index.d.ts +60 -0
- package/dist/validation/index.js +460 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/index.mjs +455 -0
- package/dist/validation/index.mjs.map +1 -0
- package/dist/vue/index.d.mts +135 -0
- package/dist/vue/index.d.ts +135 -0
- package/dist/vue/index.js +621 -0
- package/dist/vue/index.js.map +1 -0
- package/dist/vue/index.mjs +619 -0
- package/dist/vue/index.mjs.map +1 -0
- package/dist/watermark.service-Detur5tq.d.ts +235 -0
- package/dist/watermark.service-QNegMeQZ.d.mts +235 -0
- package/dist/workers/index.d.mts +42 -0
- package/dist/workers/index.d.ts +42 -0
- package/dist/workers/index.js +359 -0
- package/dist/workers/index.js.map +1 -0
- package/dist/workers/index.mjs +356 -0
- package/dist/workers/index.mjs.map +1 -0
- package/dist/workflow/index.d.mts +99 -0
- package/dist/workflow/index.d.ts +99 -0
- package/dist/workflow/index.js +282 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/index.mjs +279 -0
- package/dist/workflow/index.mjs.map +1 -0
- package/package.json +226 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
// src/events/index.ts
|
|
2
|
+
var JoopSubject = class {
|
|
3
|
+
_listeners = [];
|
|
4
|
+
subscribe(listener) {
|
|
5
|
+
this._listeners.push(listener);
|
|
6
|
+
return () => {
|
|
7
|
+
this._listeners = this._listeners.filter((l) => l !== listener);
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
next(value) {
|
|
11
|
+
for (const listener of this._listeners) {
|
|
12
|
+
listener(value);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
asObservable() {
|
|
16
|
+
return new JoopObservable((listener) => this.subscribe(listener));
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
var JoopBehaviorSubject = class extends JoopSubject {
|
|
20
|
+
_value;
|
|
21
|
+
constructor(initialValue) {
|
|
22
|
+
super();
|
|
23
|
+
this._value = initialValue;
|
|
24
|
+
}
|
|
25
|
+
getValue() {
|
|
26
|
+
return this._value;
|
|
27
|
+
}
|
|
28
|
+
next(value) {
|
|
29
|
+
this._value = value;
|
|
30
|
+
super.next(value);
|
|
31
|
+
}
|
|
32
|
+
subscribe(listener) {
|
|
33
|
+
listener(this._value);
|
|
34
|
+
return super.subscribe(listener);
|
|
35
|
+
}
|
|
36
|
+
asObservable() {
|
|
37
|
+
return new JoopObservable((listener) => this.subscribe(listener));
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
var JoopObservable = class {
|
|
41
|
+
constructor(_subscribeFn) {
|
|
42
|
+
this._subscribeFn = _subscribeFn;
|
|
43
|
+
}
|
|
44
|
+
_subscribeFn;
|
|
45
|
+
subscribe(listener) {
|
|
46
|
+
return this._subscribeFn(listener);
|
|
47
|
+
}
|
|
48
|
+
/** Returns the current value without subscribing (only meaningful for BehaviorSubject-backed observables). */
|
|
49
|
+
getOnce() {
|
|
50
|
+
let result;
|
|
51
|
+
const unsub = this.subscribe((v) => {
|
|
52
|
+
result = v;
|
|
53
|
+
});
|
|
54
|
+
unsub();
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// src/pwa/service-worker.service.ts
|
|
60
|
+
var JoopServiceWorkerService = class {
|
|
61
|
+
_reg = null;
|
|
62
|
+
_state$ = new JoopBehaviorSubject("unregistered");
|
|
63
|
+
_updateHandlers = [];
|
|
64
|
+
_controllerHandlers = [];
|
|
65
|
+
_messageHandlers = [];
|
|
66
|
+
_swMessageListener = null;
|
|
67
|
+
_controllerListener = null;
|
|
68
|
+
isSupported() {
|
|
69
|
+
return "serviceWorker" in navigator;
|
|
70
|
+
}
|
|
71
|
+
isControlled() {
|
|
72
|
+
return !!navigator.serviceWorker?.controller;
|
|
73
|
+
}
|
|
74
|
+
getRegistration() {
|
|
75
|
+
return this._reg;
|
|
76
|
+
}
|
|
77
|
+
state$() {
|
|
78
|
+
return this._state$.asObservable();
|
|
79
|
+
}
|
|
80
|
+
async register(scriptUrl, options) {
|
|
81
|
+
if (!this.isSupported()) throw new Error("ServiceWorker not supported");
|
|
82
|
+
this._reg = await navigator.serviceWorker.register(scriptUrl, options);
|
|
83
|
+
this._trackState(this._reg);
|
|
84
|
+
this._listenForUpdates(this._reg);
|
|
85
|
+
this._swMessageListener = (e) => {
|
|
86
|
+
this._messageHandlers.forEach((h) => h(e.data));
|
|
87
|
+
};
|
|
88
|
+
navigator.serviceWorker.addEventListener("message", this._swMessageListener);
|
|
89
|
+
this._controllerListener = () => {
|
|
90
|
+
this._controllerHandlers.forEach((h) => h());
|
|
91
|
+
};
|
|
92
|
+
navigator.serviceWorker.addEventListener("controllerchange", this._controllerListener);
|
|
93
|
+
return this._reg;
|
|
94
|
+
}
|
|
95
|
+
async unregister() {
|
|
96
|
+
if (!this._reg) return false;
|
|
97
|
+
const result = await this._reg.unregister();
|
|
98
|
+
if (result) {
|
|
99
|
+
this._reg = null;
|
|
100
|
+
this._state$.next("unregistered");
|
|
101
|
+
}
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
async update() {
|
|
105
|
+
if (!this._reg) throw new Error("No service worker registered");
|
|
106
|
+
await this._reg.update();
|
|
107
|
+
}
|
|
108
|
+
async postMessage(data) {
|
|
109
|
+
if (!this._reg?.active) throw new Error("No active service worker");
|
|
110
|
+
this._reg.active.postMessage(data);
|
|
111
|
+
}
|
|
112
|
+
onUpdateAvailable(handler) {
|
|
113
|
+
this._updateHandlers.push(handler);
|
|
114
|
+
return () => {
|
|
115
|
+
this._updateHandlers = this._updateHandlers.filter((h) => h !== handler);
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
onControllerChange(handler) {
|
|
119
|
+
this._controllerHandlers.push(handler);
|
|
120
|
+
return () => {
|
|
121
|
+
this._controllerHandlers = this._controllerHandlers.filter((h) => h !== handler);
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
onMessage(handler) {
|
|
125
|
+
this._messageHandlers.push(handler);
|
|
126
|
+
return () => {
|
|
127
|
+
this._messageHandlers = this._messageHandlers.filter((h) => h !== handler);
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
isOnline() {
|
|
131
|
+
return navigator.onLine;
|
|
132
|
+
}
|
|
133
|
+
onlineState$() {
|
|
134
|
+
const s$ = new JoopBehaviorSubject(navigator.onLine);
|
|
135
|
+
window.addEventListener("online", () => s$.next(true));
|
|
136
|
+
window.addEventListener("offline", () => s$.next(false));
|
|
137
|
+
return s$;
|
|
138
|
+
}
|
|
139
|
+
_trackState(reg) {
|
|
140
|
+
const sw = reg.installing ?? reg.waiting ?? reg.active;
|
|
141
|
+
if (sw) this._state$.next(sw.state);
|
|
142
|
+
const track = (worker) => {
|
|
143
|
+
if (!worker) return;
|
|
144
|
+
worker.addEventListener("statechange", () => this._state$.next(worker.state));
|
|
145
|
+
};
|
|
146
|
+
track(reg.installing);
|
|
147
|
+
track(reg.waiting);
|
|
148
|
+
track(reg.active);
|
|
149
|
+
reg.addEventListener("updatefound", () => track(reg.installing));
|
|
150
|
+
}
|
|
151
|
+
_listenForUpdates(reg) {
|
|
152
|
+
reg.addEventListener("updatefound", () => {
|
|
153
|
+
const newSw = reg.installing;
|
|
154
|
+
if (!newSw) return;
|
|
155
|
+
newSw.addEventListener("statechange", () => {
|
|
156
|
+
if (newSw.state === "installed" && navigator.serviceWorker.controller) {
|
|
157
|
+
this._updateHandlers.forEach((h) => h());
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
destroy() {
|
|
163
|
+
if (this._swMessageListener) navigator.serviceWorker?.removeEventListener("message", this._swMessageListener);
|
|
164
|
+
if (this._controllerListener) navigator.serviceWorker?.removeEventListener("controllerchange", this._controllerListener);
|
|
165
|
+
this._updateHandlers = [];
|
|
166
|
+
this._controllerHandlers = [];
|
|
167
|
+
this._messageHandlers = [];
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
// src/utilities/notification.service.ts
|
|
172
|
+
var JoopNotificationService = class {
|
|
173
|
+
_permission$ = new JoopBehaviorSubject(
|
|
174
|
+
typeof Notification !== "undefined" ? Notification.permission : "default"
|
|
175
|
+
);
|
|
176
|
+
_messageHandlers = [];
|
|
177
|
+
_swReg = null;
|
|
178
|
+
isSupported() {
|
|
179
|
+
return typeof Notification !== "undefined";
|
|
180
|
+
}
|
|
181
|
+
getPermission() {
|
|
182
|
+
return this._permission$.getValue();
|
|
183
|
+
}
|
|
184
|
+
permission$() {
|
|
185
|
+
return this._permission$.asObservable();
|
|
186
|
+
}
|
|
187
|
+
async requestPermission() {
|
|
188
|
+
if (!this.isSupported()) return "denied";
|
|
189
|
+
const result = await Notification.requestPermission();
|
|
190
|
+
this._permission$.next(result);
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
async show(title, options = {}) {
|
|
194
|
+
if (this._permission$.getValue() !== "granted") {
|
|
195
|
+
const p = await this.requestPermission();
|
|
196
|
+
if (p !== "granted") return null;
|
|
197
|
+
}
|
|
198
|
+
if (this._swReg) {
|
|
199
|
+
await this._swReg.showNotification(title, options);
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
return new Notification(title, options);
|
|
203
|
+
}
|
|
204
|
+
async setServiceWorker(reg) {
|
|
205
|
+
this._swReg = reg;
|
|
206
|
+
}
|
|
207
|
+
async subscribe(vapidPublicKey) {
|
|
208
|
+
if (!this._swReg) throw new Error("JoopNotification: ServiceWorkerRegistration required");
|
|
209
|
+
const key = _urlBase64ToUint8Array(vapidPublicKey);
|
|
210
|
+
return this._swReg.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: key });
|
|
211
|
+
}
|
|
212
|
+
async unsubscribe() {
|
|
213
|
+
if (!this._swReg) return false;
|
|
214
|
+
const sub = await this._swReg.pushManager.getSubscription();
|
|
215
|
+
if (!sub) return false;
|
|
216
|
+
return sub.unsubscribe();
|
|
217
|
+
}
|
|
218
|
+
async getSubscription() {
|
|
219
|
+
if (!this._swReg) return null;
|
|
220
|
+
return this._swReg.pushManager.getSubscription();
|
|
221
|
+
}
|
|
222
|
+
onMessage(handler) {
|
|
223
|
+
this._messageHandlers.push(handler);
|
|
224
|
+
navigator.serviceWorker?.addEventListener("message", handler);
|
|
225
|
+
return () => {
|
|
226
|
+
this._messageHandlers = this._messageHandlers.filter((h) => h !== handler);
|
|
227
|
+
navigator.serviceWorker?.removeEventListener("message", handler);
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
destroy() {
|
|
231
|
+
for (const h of this._messageHandlers) navigator.serviceWorker?.removeEventListener("message", h);
|
|
232
|
+
this._messageHandlers = [];
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
function _urlBase64ToUint8Array(base64String) {
|
|
236
|
+
const padding = "=".repeat((4 - base64String.length % 4) % 4);
|
|
237
|
+
const base64 = (base64String + padding).replace(/-/g, "+").replace(/_/g, "/");
|
|
238
|
+
const raw = atob(base64);
|
|
239
|
+
return new Uint8Array(Array.from(raw, (c) => c.charCodeAt(0)));
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
export { JoopNotificationService, JoopServiceWorkerService };
|
|
243
|
+
//# sourceMappingURL=index.mjs.map
|
|
244
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/events/index.ts","../../src/pwa/service-worker.service.ts","../../src/utilities/notification.service.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["export type Unsubscribe = () => void;\nexport type Listener<T> = (value: T) => void;\n\n/**\n * Lightweight pub/sub subject — emits to all current subscribers.\n * Replaces RxJS Subject without pulling in the full RxJS dependency.\n */\nexport class JoopSubject<T> {\n private _listeners: Listener<T>[] = [];\n\n subscribe(listener: Listener<T>): Unsubscribe {\n this._listeners.push(listener);\n return () => {\n this._listeners = this._listeners.filter(l => l !== listener);\n };\n }\n\n next(value: T): void {\n for (const listener of this._listeners) {\n listener(value);\n }\n }\n\n asObservable(): JoopObservable<T> {\n return new JoopObservable<T>(listener => this.subscribe(listener));\n }\n}\n\n/**\n * Stateful subject — replays the current value to any new subscriber immediately.\n * Replaces RxJS BehaviorSubject.\n */\nexport class JoopBehaviorSubject<T> extends JoopSubject<T> {\n private _value: T;\n\n constructor(initialValue: T) {\n super();\n this._value = initialValue;\n }\n\n getValue(): T {\n return this._value;\n }\n\n override next(value: T): void {\n this._value = value;\n super.next(value);\n }\n\n override subscribe(listener: Listener<T>): Unsubscribe {\n listener(this._value);\n return super.subscribe(listener);\n }\n\n override asObservable(): JoopObservable<T> {\n return new JoopObservable<T>(listener => this.subscribe(listener));\n }\n}\n\n/**\n * Read-only observable handle returned from asObservable().\n */\nexport class JoopObservable<T> {\n constructor(private _subscribeFn: (listener: Listener<T>) => Unsubscribe) {}\n\n subscribe(listener: Listener<T>): Unsubscribe {\n return this._subscribeFn(listener);\n }\n\n /** Returns the current value without subscribing (only meaningful for BehaviorSubject-backed observables). */\n getOnce(): T | undefined {\n let result: T | undefined;\n const unsub = this.subscribe(v => { result = v; });\n unsub();\n return result;\n }\n}\n","import { JoopBehaviorSubject } from '../events';\n\nexport type JoopSwState = 'unregistered' | 'installing' | 'installed' | 'activating' | 'activated' | 'redundant';\n\nexport class JoopServiceWorkerService {\n private _reg: ServiceWorkerRegistration | null = null;\n private _state$ = new JoopBehaviorSubject<JoopSwState>('unregistered');\n private _updateHandlers: Array<() => void> = [];\n private _controllerHandlers: Array<() => void> = [];\n private _messageHandlers: Array<(data: unknown) => void> = [];\n private _swMessageListener: ((e: MessageEvent) => void) | null = null;\n private _controllerListener: (() => void) | null = null;\n\n isSupported(): boolean { return 'serviceWorker' in navigator; }\n isControlled(): boolean { return !!navigator.serviceWorker?.controller; }\n getRegistration(): ServiceWorkerRegistration | null { return this._reg; }\n state$() { return this._state$.asObservable(); }\n\n async register(scriptUrl: string, options?: RegistrationOptions): Promise<ServiceWorkerRegistration> {\n if (!this.isSupported()) throw new Error('ServiceWorker not supported');\n this._reg = await navigator.serviceWorker.register(scriptUrl, options);\n this._trackState(this._reg);\n this._listenForUpdates(this._reg);\n\n this._swMessageListener = (e: MessageEvent) => { this._messageHandlers.forEach(h => h(e.data)); };\n navigator.serviceWorker.addEventListener('message', this._swMessageListener);\n\n this._controllerListener = () => { this._controllerHandlers.forEach(h => h()); };\n navigator.serviceWorker.addEventListener('controllerchange', this._controllerListener);\n\n return this._reg;\n }\n\n async unregister(): Promise<boolean> {\n if (!this._reg) return false;\n const result = await this._reg.unregister();\n if (result) { this._reg = null; this._state$.next('unregistered'); }\n return result;\n }\n\n async update(): Promise<void> {\n if (!this._reg) throw new Error('No service worker registered');\n await this._reg.update();\n }\n\n async postMessage(data: unknown): Promise<void> {\n if (!this._reg?.active) throw new Error('No active service worker');\n this._reg.active.postMessage(data);\n }\n\n onUpdateAvailable(handler: () => void): () => void {\n this._updateHandlers.push(handler);\n return () => { this._updateHandlers = this._updateHandlers.filter(h => h !== handler); };\n }\n\n onControllerChange(handler: () => void): () => void {\n this._controllerHandlers.push(handler);\n return () => { this._controllerHandlers = this._controllerHandlers.filter(h => h !== handler); };\n }\n\n onMessage(handler: (data: unknown) => void): () => void {\n this._messageHandlers.push(handler);\n return () => { this._messageHandlers = this._messageHandlers.filter(h => h !== handler); };\n }\n\n isOnline(): boolean { return navigator.onLine; }\n\n onlineState$(): JoopBehaviorSubject<boolean> {\n const s$ = new JoopBehaviorSubject<boolean>(navigator.onLine);\n window.addEventListener('online', () => s$.next(true));\n window.addEventListener('offline', () => s$.next(false));\n return s$;\n }\n\n private _trackState(reg: ServiceWorkerRegistration): void {\n const sw = reg.installing ?? reg.waiting ?? reg.active;\n if (sw) this._state$.next(sw.state as JoopSwState);\n const track = (worker: ServiceWorker | null) => {\n if (!worker) return;\n worker.addEventListener('statechange', () => this._state$.next(worker.state as JoopSwState));\n };\n track(reg.installing); track(reg.waiting); track(reg.active);\n reg.addEventListener('updatefound', () => track(reg.installing));\n }\n\n private _listenForUpdates(reg: ServiceWorkerRegistration): void {\n reg.addEventListener('updatefound', () => {\n const newSw = reg.installing;\n if (!newSw) return;\n newSw.addEventListener('statechange', () => {\n if (newSw.state === 'installed' && navigator.serviceWorker.controller) {\n this._updateHandlers.forEach(h => h());\n }\n });\n });\n }\n\n destroy(): void {\n if (this._swMessageListener) navigator.serviceWorker?.removeEventListener('message', this._swMessageListener);\n if (this._controllerListener) navigator.serviceWorker?.removeEventListener('controllerchange', this._controllerListener);\n this._updateHandlers = []; this._controllerHandlers = []; this._messageHandlers = [];\n }\n}\n","import { JoopBehaviorSubject } from '../events';\n\nexport type JoopNotificationPermission = 'default' | 'granted' | 'denied';\n\nexport interface JoopNotificationOptions extends NotificationOptions {\n tag?: string;\n requireInteraction?: boolean;\n}\n\nexport class JoopNotificationService {\n private _permission$ = new JoopBehaviorSubject<JoopNotificationPermission>(\n typeof Notification !== 'undefined' ? Notification.permission as JoopNotificationPermission : 'default',\n );\n private _messageHandlers: Array<(event: MessageEvent) => void> = [];\n private _swReg: ServiceWorkerRegistration | null = null;\n\n isSupported(): boolean { return typeof Notification !== 'undefined'; }\n\n getPermission(): JoopNotificationPermission { return this._permission$.getValue(); }\n permission$() { return this._permission$.asObservable(); }\n\n async requestPermission(): Promise<JoopNotificationPermission> {\n if (!this.isSupported()) return 'denied';\n const result = await Notification.requestPermission() as JoopNotificationPermission;\n this._permission$.next(result);\n return result;\n }\n\n async show(title: string, options: JoopNotificationOptions = {}): Promise<Notification | null> {\n if (this._permission$.getValue() !== 'granted') {\n const p = await this.requestPermission();\n if (p !== 'granted') return null;\n }\n if (this._swReg) {\n await this._swReg.showNotification(title, options);\n return null;\n }\n return new Notification(title, options);\n }\n\n async setServiceWorker(reg: ServiceWorkerRegistration): Promise<void> {\n this._swReg = reg;\n }\n\n async subscribe(vapidPublicKey: string): Promise<PushSubscription | null> {\n if (!this._swReg) throw new Error('JoopNotification: ServiceWorkerRegistration required');\n const key = _urlBase64ToUint8Array(vapidPublicKey);\n return this._swReg.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: key });\n }\n\n async unsubscribe(): Promise<boolean> {\n if (!this._swReg) return false;\n const sub = await this._swReg.pushManager.getSubscription();\n if (!sub) return false;\n return sub.unsubscribe();\n }\n\n async getSubscription(): Promise<PushSubscription | null> {\n if (!this._swReg) return null;\n return this._swReg.pushManager.getSubscription();\n }\n\n onMessage(handler: (event: MessageEvent) => void): () => void {\n this._messageHandlers.push(handler);\n navigator.serviceWorker?.addEventListener('message', handler);\n return () => {\n this._messageHandlers = this._messageHandlers.filter(h => h !== handler);\n navigator.serviceWorker?.removeEventListener('message', handler);\n };\n }\n\n destroy(): void {\n for (const h of this._messageHandlers) navigator.serviceWorker?.removeEventListener('message', h);\n this._messageHandlers = [];\n }\n}\n\nfunction _urlBase64ToUint8Array(base64String: string): Uint8Array<ArrayBuffer> {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\n const raw = atob(base64);\n return new Uint8Array(Array.from(raw, c => c.charCodeAt(0)));\n}\n"]}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { J as JoopInstance } from '../joop-Bx7Iwj5p.mjs';
|
|
2
|
+
import { J as JoopNetworkMonitor, a as JoopKeyVault } from '../network-monitor-BIwPSXme.mjs';
|
|
3
|
+
import { J as JoopAppState, a as JoopNetworkState } from '../adapters-B6slG6hQ.mjs';
|
|
4
|
+
import { JoopThemeInfo } from '../theme/index.mjs';
|
|
5
|
+
import '../config.service-Cz4QQLlf.mjs';
|
|
6
|
+
import '../config.models-Cqg04fAQ.mjs';
|
|
7
|
+
import '../index-B_ksKpS1.mjs';
|
|
8
|
+
import '../index-Dz0gOur2.mjs';
|
|
9
|
+
import '../data-storage.service-LvhGRCmw.mjs';
|
|
10
|
+
import '../index-CqDKWTUP.mjs';
|
|
11
|
+
import '../auth.service-DNVB-L4U.mjs';
|
|
12
|
+
import '../oidc-client-DIJcClmB.mjs';
|
|
13
|
+
import '../client-profile.service-BuPeXVp5.mjs';
|
|
14
|
+
import '../idempotency.service-_6LqhivP.mjs';
|
|
15
|
+
import '../aes.service-CkoupAww.mjs';
|
|
16
|
+
import '../encryption/index.mjs';
|
|
17
|
+
import '../crypto-utils-DriNhLdx.mjs';
|
|
18
|
+
import '../session/index.mjs';
|
|
19
|
+
import '../observability/index.mjs';
|
|
20
|
+
import '../dev/index.mjs';
|
|
21
|
+
import '../statement-parser-C2qNmb49.mjs';
|
|
22
|
+
import '../i18n/index.mjs';
|
|
23
|
+
import '../a11y.service-C-DQQfgO.mjs';
|
|
24
|
+
import '../native-bridge/index.mjs';
|
|
25
|
+
import '../deeplink.service-Ctd5u243.mjs';
|
|
26
|
+
import '../cache/index.mjs';
|
|
27
|
+
import '../network/index.mjs';
|
|
28
|
+
import '../analytics/index.mjs';
|
|
29
|
+
import '../form-validator-3tkmzr_o.mjs';
|
|
30
|
+
import '../watermark.service-QNegMeQZ.mjs';
|
|
31
|
+
import '../storage/index.mjs';
|
|
32
|
+
import '../forms/index.mjs';
|
|
33
|
+
import '../notification.service-Dm4fvfZf.mjs';
|
|
34
|
+
import '../router/index.mjs';
|
|
35
|
+
import '../pwa/index.mjs';
|
|
36
|
+
import '../ai/index.mjs';
|
|
37
|
+
import '../differential-privacy-BcAv1G80.mjs';
|
|
38
|
+
import '../workers/index.mjs';
|
|
39
|
+
import '../state/index.mjs';
|
|
40
|
+
import '../sync-engine-DZqyKHkK.mjs';
|
|
41
|
+
import '../workflow/index.mjs';
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* joopjs/react — React hooks integration
|
|
45
|
+
*
|
|
46
|
+
* React 18+ is a required peer dependency. Call createJoopReact(React) once
|
|
47
|
+
* at app level and destructure the hooks you need:
|
|
48
|
+
*
|
|
49
|
+
* import React from 'react';
|
|
50
|
+
* import { createJoopReact } from 'joopjs/react';
|
|
51
|
+
* export const { JoopProvider, useJoop, useJoopNetworkMonitor } = createJoopReact(React);
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
type _Cleanup = (() => void) | void;
|
|
55
|
+
type _Deps = ReadonlyArray<unknown>;
|
|
56
|
+
interface _Ref<T> {
|
|
57
|
+
current: T;
|
|
58
|
+
}
|
|
59
|
+
interface _Context<T> {
|
|
60
|
+
_brand: T;
|
|
61
|
+
}
|
|
62
|
+
interface ReactLike {
|
|
63
|
+
useState<T>(init: T | (() => T)): [T, (value: T | ((prev: T) => T)) => void];
|
|
64
|
+
useEffect(effect: () => _Cleanup, deps?: _Deps): void;
|
|
65
|
+
useCallback<T extends (...args: never[]) => unknown>(fn: T, deps: _Deps): T;
|
|
66
|
+
useMemo<T>(factory: () => T, deps: _Deps): T;
|
|
67
|
+
useRef<T>(init: T): _Ref<T>;
|
|
68
|
+
useRef<T>(): _Ref<T | undefined>;
|
|
69
|
+
createContext<T>(defaultValue: T): _Context<T>;
|
|
70
|
+
useContext<T>(ctx: _Context<T>): T;
|
|
71
|
+
createElement(type: unknown, props?: Record<string, unknown> | null, ...children: unknown[]): unknown;
|
|
72
|
+
}
|
|
73
|
+
interface JoopNetworkHook extends JoopNetworkState {
|
|
74
|
+
monitor: JoopNetworkMonitor;
|
|
75
|
+
}
|
|
76
|
+
interface JoopLifecycleHook {
|
|
77
|
+
state: JoopAppState;
|
|
78
|
+
isActive: boolean;
|
|
79
|
+
}
|
|
80
|
+
interface JoopKeyVaultHook {
|
|
81
|
+
value: string | null;
|
|
82
|
+
loading: boolean;
|
|
83
|
+
set(value: string): Promise<void>;
|
|
84
|
+
remove(): Promise<void>;
|
|
85
|
+
refresh(): Promise<void>;
|
|
86
|
+
}
|
|
87
|
+
interface JoopAuthHook {
|
|
88
|
+
isLoggedIn: boolean;
|
|
89
|
+
user: unknown;
|
|
90
|
+
login(user: unknown): void;
|
|
91
|
+
logout(): void;
|
|
92
|
+
}
|
|
93
|
+
interface JoopThemeHook {
|
|
94
|
+
active: string;
|
|
95
|
+
themes: JoopThemeInfo[];
|
|
96
|
+
setTheme(nameOrId: string): void;
|
|
97
|
+
}
|
|
98
|
+
interface JoopI18nHook {
|
|
99
|
+
language: string;
|
|
100
|
+
direction: 'ltr' | 'rtl';
|
|
101
|
+
t(key: string, params?: Record<string, string>): string;
|
|
102
|
+
setLanguage(lang: string): void;
|
|
103
|
+
}
|
|
104
|
+
interface JoopLoaderHook {
|
|
105
|
+
isLoading: boolean;
|
|
106
|
+
show(): void;
|
|
107
|
+
hide(): void;
|
|
108
|
+
}
|
|
109
|
+
interface JoopFeatureFlagHook {
|
|
110
|
+
enabled: boolean;
|
|
111
|
+
variant: string | null;
|
|
112
|
+
}
|
|
113
|
+
declare function createJoopReact<R extends ReactLike>(react: R): {
|
|
114
|
+
JoopProvider: (props: {
|
|
115
|
+
joop: JoopInstance;
|
|
116
|
+
children: unknown;
|
|
117
|
+
}) => unknown;
|
|
118
|
+
JoopCtx: _Context<JoopInstance | null>;
|
|
119
|
+
useJoop: () => JoopInstance;
|
|
120
|
+
useJoopNetworkMonitor: () => JoopNetworkHook;
|
|
121
|
+
useJoopAppLifecycle: () => JoopLifecycleHook;
|
|
122
|
+
useJoopKeyVault: (key: string, vaultConfig?: ConstructorParameters<typeof JoopKeyVault>[0]) => JoopKeyVaultHook;
|
|
123
|
+
useJoopAuth: () => JoopAuthHook;
|
|
124
|
+
useJoopTheme: () => JoopThemeHook;
|
|
125
|
+
useJoopI18n: () => JoopI18nHook;
|
|
126
|
+
useJoopLoader: () => JoopLoaderHook;
|
|
127
|
+
useJoopConfig: <T>(key: string) => T | undefined;
|
|
128
|
+
useJoopFeatureFlag: (flagKey: string, context?: Record<string, unknown>) => JoopFeatureFlagHook;
|
|
129
|
+
useJoopStore: <S extends Record<string, unknown>, T>(selector: (state: S) => T) => T;
|
|
130
|
+
};
|
|
131
|
+
type JoopReactHooks = ReturnType<typeof createJoopReact>;
|
|
132
|
+
|
|
133
|
+
export { type JoopAuthHook, type JoopFeatureFlagHook, type JoopI18nHook, type JoopKeyVaultHook, type JoopLifecycleHook, type JoopLoaderHook, type JoopNetworkHook, type JoopReactHooks, type JoopThemeHook, type ReactLike, createJoopReact };
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { J as JoopInstance } from '../joop-CA3DMeOO.js';
|
|
2
|
+
import { J as JoopNetworkMonitor, a as JoopKeyVault } from '../network-monitor-Bqp2hvZr.js';
|
|
3
|
+
import { J as JoopAppState, a as JoopNetworkState } from '../adapters-B6slG6hQ.js';
|
|
4
|
+
import { JoopThemeInfo } from '../theme/index.js';
|
|
5
|
+
import '../config.service-CrCvI-JS.js';
|
|
6
|
+
import '../config.models-Cqg04fAQ.js';
|
|
7
|
+
import '../index-DFqEoX_l.js';
|
|
8
|
+
import '../index-Dz0gOur2.js';
|
|
9
|
+
import '../data-storage.service-DT6xaTxE.js';
|
|
10
|
+
import '../index-CqDKWTUP.js';
|
|
11
|
+
import '../auth.service-PjUUSUIt.js';
|
|
12
|
+
import '../oidc-client-DxhyE59t.js';
|
|
13
|
+
import '../client-profile.service-D5bRRYQp.js';
|
|
14
|
+
import '../idempotency.service-eOKoISRD.js';
|
|
15
|
+
import '../aes.service-CkoupAww.js';
|
|
16
|
+
import '../encryption/index.js';
|
|
17
|
+
import '../crypto-utils-DriNhLdx.js';
|
|
18
|
+
import '../session/index.js';
|
|
19
|
+
import '../observability/index.js';
|
|
20
|
+
import '../dev/index.js';
|
|
21
|
+
import '../statement-parser-BHQtXwCM.js';
|
|
22
|
+
import '../i18n/index.js';
|
|
23
|
+
import '../a11y.service-CauEJrJe.js';
|
|
24
|
+
import '../native-bridge/index.js';
|
|
25
|
+
import '../deeplink.service-uUuTnY9_.js';
|
|
26
|
+
import '../cache/index.js';
|
|
27
|
+
import '../network/index.js';
|
|
28
|
+
import '../analytics/index.js';
|
|
29
|
+
import '../form-validator-3tkmzr_o.js';
|
|
30
|
+
import '../watermark.service-Detur5tq.js';
|
|
31
|
+
import '../storage/index.js';
|
|
32
|
+
import '../forms/index.js';
|
|
33
|
+
import '../notification.service-tEMKatWJ.js';
|
|
34
|
+
import '../router/index.js';
|
|
35
|
+
import '../pwa/index.js';
|
|
36
|
+
import '../ai/index.js';
|
|
37
|
+
import '../differential-privacy-C8mAUjZr.js';
|
|
38
|
+
import '../workers/index.js';
|
|
39
|
+
import '../state/index.js';
|
|
40
|
+
import '../sync-engine-DCIMRG5s.js';
|
|
41
|
+
import '../workflow/index.js';
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* joopjs/react — React hooks integration
|
|
45
|
+
*
|
|
46
|
+
* React 18+ is a required peer dependency. Call createJoopReact(React) once
|
|
47
|
+
* at app level and destructure the hooks you need:
|
|
48
|
+
*
|
|
49
|
+
* import React from 'react';
|
|
50
|
+
* import { createJoopReact } from 'joopjs/react';
|
|
51
|
+
* export const { JoopProvider, useJoop, useJoopNetworkMonitor } = createJoopReact(React);
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
type _Cleanup = (() => void) | void;
|
|
55
|
+
type _Deps = ReadonlyArray<unknown>;
|
|
56
|
+
interface _Ref<T> {
|
|
57
|
+
current: T;
|
|
58
|
+
}
|
|
59
|
+
interface _Context<T> {
|
|
60
|
+
_brand: T;
|
|
61
|
+
}
|
|
62
|
+
interface ReactLike {
|
|
63
|
+
useState<T>(init: T | (() => T)): [T, (value: T | ((prev: T) => T)) => void];
|
|
64
|
+
useEffect(effect: () => _Cleanup, deps?: _Deps): void;
|
|
65
|
+
useCallback<T extends (...args: never[]) => unknown>(fn: T, deps: _Deps): T;
|
|
66
|
+
useMemo<T>(factory: () => T, deps: _Deps): T;
|
|
67
|
+
useRef<T>(init: T): _Ref<T>;
|
|
68
|
+
useRef<T>(): _Ref<T | undefined>;
|
|
69
|
+
createContext<T>(defaultValue: T): _Context<T>;
|
|
70
|
+
useContext<T>(ctx: _Context<T>): T;
|
|
71
|
+
createElement(type: unknown, props?: Record<string, unknown> | null, ...children: unknown[]): unknown;
|
|
72
|
+
}
|
|
73
|
+
interface JoopNetworkHook extends JoopNetworkState {
|
|
74
|
+
monitor: JoopNetworkMonitor;
|
|
75
|
+
}
|
|
76
|
+
interface JoopLifecycleHook {
|
|
77
|
+
state: JoopAppState;
|
|
78
|
+
isActive: boolean;
|
|
79
|
+
}
|
|
80
|
+
interface JoopKeyVaultHook {
|
|
81
|
+
value: string | null;
|
|
82
|
+
loading: boolean;
|
|
83
|
+
set(value: string): Promise<void>;
|
|
84
|
+
remove(): Promise<void>;
|
|
85
|
+
refresh(): Promise<void>;
|
|
86
|
+
}
|
|
87
|
+
interface JoopAuthHook {
|
|
88
|
+
isLoggedIn: boolean;
|
|
89
|
+
user: unknown;
|
|
90
|
+
login(user: unknown): void;
|
|
91
|
+
logout(): void;
|
|
92
|
+
}
|
|
93
|
+
interface JoopThemeHook {
|
|
94
|
+
active: string;
|
|
95
|
+
themes: JoopThemeInfo[];
|
|
96
|
+
setTheme(nameOrId: string): void;
|
|
97
|
+
}
|
|
98
|
+
interface JoopI18nHook {
|
|
99
|
+
language: string;
|
|
100
|
+
direction: 'ltr' | 'rtl';
|
|
101
|
+
t(key: string, params?: Record<string, string>): string;
|
|
102
|
+
setLanguage(lang: string): void;
|
|
103
|
+
}
|
|
104
|
+
interface JoopLoaderHook {
|
|
105
|
+
isLoading: boolean;
|
|
106
|
+
show(): void;
|
|
107
|
+
hide(): void;
|
|
108
|
+
}
|
|
109
|
+
interface JoopFeatureFlagHook {
|
|
110
|
+
enabled: boolean;
|
|
111
|
+
variant: string | null;
|
|
112
|
+
}
|
|
113
|
+
declare function createJoopReact<R extends ReactLike>(react: R): {
|
|
114
|
+
JoopProvider: (props: {
|
|
115
|
+
joop: JoopInstance;
|
|
116
|
+
children: unknown;
|
|
117
|
+
}) => unknown;
|
|
118
|
+
JoopCtx: _Context<JoopInstance | null>;
|
|
119
|
+
useJoop: () => JoopInstance;
|
|
120
|
+
useJoopNetworkMonitor: () => JoopNetworkHook;
|
|
121
|
+
useJoopAppLifecycle: () => JoopLifecycleHook;
|
|
122
|
+
useJoopKeyVault: (key: string, vaultConfig?: ConstructorParameters<typeof JoopKeyVault>[0]) => JoopKeyVaultHook;
|
|
123
|
+
useJoopAuth: () => JoopAuthHook;
|
|
124
|
+
useJoopTheme: () => JoopThemeHook;
|
|
125
|
+
useJoopI18n: () => JoopI18nHook;
|
|
126
|
+
useJoopLoader: () => JoopLoaderHook;
|
|
127
|
+
useJoopConfig: <T>(key: string) => T | undefined;
|
|
128
|
+
useJoopFeatureFlag: (flagKey: string, context?: Record<string, unknown>) => JoopFeatureFlagHook;
|
|
129
|
+
useJoopStore: <S extends Record<string, unknown>, T>(selector: (state: S) => T) => T;
|
|
130
|
+
};
|
|
131
|
+
type JoopReactHooks = ReturnType<typeof createJoopReact>;
|
|
132
|
+
|
|
133
|
+
export { type JoopAuthHook, type JoopFeatureFlagHook, type JoopI18nHook, type JoopKeyVaultHook, type JoopLifecycleHook, type JoopLoaderHook, type JoopNetworkHook, type JoopReactHooks, type JoopThemeHook, type ReactLike, createJoopReact };
|