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,169 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/events/index.ts
|
|
4
|
+
var JoopSubject = class {
|
|
5
|
+
_listeners = [];
|
|
6
|
+
subscribe(listener) {
|
|
7
|
+
this._listeners.push(listener);
|
|
8
|
+
return () => {
|
|
9
|
+
this._listeners = this._listeners.filter((l) => l !== listener);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
next(value) {
|
|
13
|
+
for (const listener of this._listeners) {
|
|
14
|
+
listener(value);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
asObservable() {
|
|
18
|
+
return new JoopObservable((listener) => this.subscribe(listener));
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
var JoopBehaviorSubject = class extends JoopSubject {
|
|
22
|
+
_value;
|
|
23
|
+
constructor(initialValue) {
|
|
24
|
+
super();
|
|
25
|
+
this._value = initialValue;
|
|
26
|
+
}
|
|
27
|
+
getValue() {
|
|
28
|
+
return this._value;
|
|
29
|
+
}
|
|
30
|
+
next(value) {
|
|
31
|
+
this._value = value;
|
|
32
|
+
super.next(value);
|
|
33
|
+
}
|
|
34
|
+
subscribe(listener) {
|
|
35
|
+
listener(this._value);
|
|
36
|
+
return super.subscribe(listener);
|
|
37
|
+
}
|
|
38
|
+
asObservable() {
|
|
39
|
+
return new JoopObservable((listener) => this.subscribe(listener));
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
var JoopObservable = class {
|
|
43
|
+
constructor(_subscribeFn) {
|
|
44
|
+
this._subscribeFn = _subscribeFn;
|
|
45
|
+
}
|
|
46
|
+
_subscribeFn;
|
|
47
|
+
subscribe(listener) {
|
|
48
|
+
return this._subscribeFn(listener);
|
|
49
|
+
}
|
|
50
|
+
/** Returns the current value without subscribing (only meaningful for BehaviorSubject-backed observables). */
|
|
51
|
+
getOnce() {
|
|
52
|
+
let result;
|
|
53
|
+
const unsub = this.subscribe((v) => {
|
|
54
|
+
result = v;
|
|
55
|
+
});
|
|
56
|
+
unsub();
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// src/theme/theme.service.ts
|
|
62
|
+
var STYLE_TAG_ID = "__joop_theme__";
|
|
63
|
+
var JoopThemeService = class {
|
|
64
|
+
_themes = [];
|
|
65
|
+
_active$ = new JoopBehaviorSubject("");
|
|
66
|
+
_id$ = new JoopBehaviorSubject(0);
|
|
67
|
+
async load(themesOrUrl) {
|
|
68
|
+
if (Array.isArray(themesOrUrl)) {
|
|
69
|
+
this._themes = themesOrUrl;
|
|
70
|
+
} else {
|
|
71
|
+
const res = await fetch(themesOrUrl);
|
|
72
|
+
this._themes = await res.json();
|
|
73
|
+
}
|
|
74
|
+
return this._themes;
|
|
75
|
+
}
|
|
76
|
+
getAll() {
|
|
77
|
+
return this._themes;
|
|
78
|
+
}
|
|
79
|
+
getDefault() {
|
|
80
|
+
return this._themes.find((t) => t.isDefault) ?? this._themes[0];
|
|
81
|
+
}
|
|
82
|
+
getByName(name) {
|
|
83
|
+
return this._themes.find((t) => t.themeName === name);
|
|
84
|
+
}
|
|
85
|
+
getById(id) {
|
|
86
|
+
return this._themes.find((t) => t.id === id);
|
|
87
|
+
}
|
|
88
|
+
getMapped() {
|
|
89
|
+
return this._themes.map((t) => ({
|
|
90
|
+
id: t.id,
|
|
91
|
+
themeName: t.themeName,
|
|
92
|
+
primary: t.palettes.find((p) => p.name === "Primary")?.baseColor ?? ""
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
/** Inject a theme's palette as CSS custom properties on :root */
|
|
96
|
+
apply(theme) {
|
|
97
|
+
const resolved = typeof theme === "string" ? this.getByName(theme) : theme;
|
|
98
|
+
if (!resolved) return;
|
|
99
|
+
const vars = this._buildCssVars(resolved);
|
|
100
|
+
this._injectStyles(vars);
|
|
101
|
+
this._active$.next(resolved.themeName);
|
|
102
|
+
this._id$.next(resolved.id);
|
|
103
|
+
}
|
|
104
|
+
applyById(id) {
|
|
105
|
+
const theme = this.getById(id);
|
|
106
|
+
if (theme) this.apply(theme);
|
|
107
|
+
}
|
|
108
|
+
applyDefault() {
|
|
109
|
+
const theme = this.getDefault();
|
|
110
|
+
if (theme) this.apply(theme);
|
|
111
|
+
}
|
|
112
|
+
/** Apply arbitrary CSS custom properties to :root */
|
|
113
|
+
applyVars(vars) {
|
|
114
|
+
const css = Object.entries(vars).map(([k, v]) => ` ${k}: ${v};`).join("\n");
|
|
115
|
+
this._injectStyles(`
|
|
116
|
+
${css}
|
|
117
|
+
`);
|
|
118
|
+
}
|
|
119
|
+
getActiveName() {
|
|
120
|
+
return this._active$.getValue();
|
|
121
|
+
}
|
|
122
|
+
getActiveId() {
|
|
123
|
+
return this._id$.getValue();
|
|
124
|
+
}
|
|
125
|
+
active$() {
|
|
126
|
+
return this._active$.asObservable();
|
|
127
|
+
}
|
|
128
|
+
activeId$() {
|
|
129
|
+
return this._id$.asObservable();
|
|
130
|
+
}
|
|
131
|
+
clearStyles() {
|
|
132
|
+
document.getElementById(STYLE_TAG_ID)?.remove();
|
|
133
|
+
}
|
|
134
|
+
_buildCssVars(theme) {
|
|
135
|
+
const lines = [];
|
|
136
|
+
for (const palette of theme.palettes) {
|
|
137
|
+
const p = palette.prefix ?? palette.name.toLowerCase().slice(0, 2);
|
|
138
|
+
if (palette.baseColor) {
|
|
139
|
+
lines.push(` --joop-${p}: ${palette.baseColor};`);
|
|
140
|
+
}
|
|
141
|
+
for (const color of palette.colors) {
|
|
142
|
+
lines.push(` --joop-${p}-${color.name}: ${color.value};`);
|
|
143
|
+
if (color.contrastText) {
|
|
144
|
+
const cp = palette.contrastPrefix ?? `${p}-c`;
|
|
145
|
+
lines.push(` --joop-${cp}-${color.name}: ${color.contrastText};`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (theme.fontFamily) lines.push(` --joop-font-family: ${theme.fontFamily};`);
|
|
150
|
+
if (theme.fontSize) lines.push(` --joop-font-size: ${theme.fontSize};`);
|
|
151
|
+
return lines.join("\n");
|
|
152
|
+
}
|
|
153
|
+
_injectStyles(vars) {
|
|
154
|
+
if (typeof document === "undefined") return;
|
|
155
|
+
let tag = document.getElementById(STYLE_TAG_ID);
|
|
156
|
+
if (!tag) {
|
|
157
|
+
tag = document.createElement("style");
|
|
158
|
+
tag.id = STYLE_TAG_ID;
|
|
159
|
+
document.head.appendChild(tag);
|
|
160
|
+
}
|
|
161
|
+
tag.textContent = `:root {
|
|
162
|
+
${vars}
|
|
163
|
+
}`;
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
exports.JoopThemeService = JoopThemeService;
|
|
168
|
+
//# sourceMappingURL=index.js.map
|
|
169
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/events/index.ts","../../src/theme/theme.service.ts"],"names":[],"mappings":"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","file":"index.js","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 interface JoopThemeColor {\n name: string;\n value: string;\n contrastText?: string;\n}\n\nexport interface JoopThemePalette {\n name: string;\n prefix: string;\n contrastPrefix?: string;\n baseColor?: string;\n colors: JoopThemeColor[];\n}\n\nexport interface JoopTheme {\n id: number;\n themeName: string;\n palettes: JoopThemePalette[];\n isDefault?: boolean;\n fontFamily?: string;\n fontSize?: string;\n}\n\nexport interface JoopThemeInfo {\n id: number;\n themeName: string;\n primary: string;\n}\n\nconst STYLE_TAG_ID = '__joop_theme__';\n\nexport class JoopThemeService {\n private _themes: JoopTheme[] = [];\n private _active$ = new JoopBehaviorSubject<string>('');\n private _id$ = new JoopBehaviorSubject<number>(0);\n\n async load(themesOrUrl: JoopTheme[] | string): Promise<JoopTheme[]> {\n if (Array.isArray(themesOrUrl)) {\n this._themes = themesOrUrl;\n } else {\n const res = await fetch(themesOrUrl);\n this._themes = await res.json();\n }\n return this._themes;\n }\n\n getAll(): JoopTheme[] { return this._themes; }\n\n getDefault(): JoopTheme | undefined {\n return this._themes.find(t => t.isDefault) ?? this._themes[0];\n }\n\n getByName(name: string): JoopTheme | undefined {\n return this._themes.find(t => t.themeName === name);\n }\n\n getById(id: number): JoopTheme | undefined {\n return this._themes.find(t => t.id === id);\n }\n\n getMapped(): JoopThemeInfo[] {\n return this._themes.map(t => ({\n id: t.id,\n themeName: t.themeName,\n primary: t.palettes.find(p => p.name === 'Primary')?.baseColor ?? '',\n }));\n }\n\n /** Inject a theme's palette as CSS custom properties on :root */\n apply(theme: JoopTheme | string): void {\n const resolved = typeof theme === 'string' ? this.getByName(theme) : theme;\n if (!resolved) return;\n\n const vars = this._buildCssVars(resolved);\n this._injectStyles(vars);\n this._active$.next(resolved.themeName);\n this._id$.next(resolved.id);\n }\n\n applyById(id: number): void {\n const theme = this.getById(id);\n if (theme) this.apply(theme);\n }\n\n applyDefault(): void {\n const theme = this.getDefault();\n if (theme) this.apply(theme);\n }\n\n /** Apply arbitrary CSS custom properties to :root */\n applyVars(vars: Record<string, string>): void {\n const css = Object.entries(vars).map(([k, v]) => ` ${k}: ${v};`).join('\\n');\n this._injectStyles(`\\n${css}\\n`);\n }\n\n getActiveName(): string { return this._active$.getValue(); }\n getActiveId(): number { return this._id$.getValue(); }\n active$() { return this._active$.asObservable(); }\n activeId$() { return this._id$.asObservable(); }\n\n clearStyles(): void {\n document.getElementById(STYLE_TAG_ID)?.remove();\n }\n\n private _buildCssVars(theme: JoopTheme): string {\n const lines: string[] = [];\n for (const palette of theme.palettes) {\n const p = palette.prefix ?? palette.name.toLowerCase().slice(0, 2);\n if (palette.baseColor) {\n lines.push(` --joop-${p}: ${palette.baseColor};`);\n }\n for (const color of palette.colors) {\n lines.push(` --joop-${p}-${color.name}: ${color.value};`);\n if (color.contrastText) {\n const cp = palette.contrastPrefix ?? `${p}-c`;\n lines.push(` --joop-${cp}-${color.name}: ${color.contrastText};`);\n }\n }\n }\n if (theme.fontFamily) lines.push(` --joop-font-family: ${theme.fontFamily};`);\n if (theme.fontSize) lines.push(` --joop-font-size: ${theme.fontSize};`);\n return lines.join('\\n');\n }\n\n private _injectStyles(vars: string): void {\n if (typeof document === 'undefined') return;\n let tag = document.getElementById(STYLE_TAG_ID) as HTMLStyleElement | null;\n if (!tag) {\n tag = document.createElement('style');\n tag.id = STYLE_TAG_ID;\n document.head.appendChild(tag);\n }\n tag.textContent = `:root {\\n${vars}\\n}`;\n }\n}\n"]}
|
|
@@ -0,0 +1,167 @@
|
|
|
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/theme/theme.service.ts
|
|
60
|
+
var STYLE_TAG_ID = "__joop_theme__";
|
|
61
|
+
var JoopThemeService = class {
|
|
62
|
+
_themes = [];
|
|
63
|
+
_active$ = new JoopBehaviorSubject("");
|
|
64
|
+
_id$ = new JoopBehaviorSubject(0);
|
|
65
|
+
async load(themesOrUrl) {
|
|
66
|
+
if (Array.isArray(themesOrUrl)) {
|
|
67
|
+
this._themes = themesOrUrl;
|
|
68
|
+
} else {
|
|
69
|
+
const res = await fetch(themesOrUrl);
|
|
70
|
+
this._themes = await res.json();
|
|
71
|
+
}
|
|
72
|
+
return this._themes;
|
|
73
|
+
}
|
|
74
|
+
getAll() {
|
|
75
|
+
return this._themes;
|
|
76
|
+
}
|
|
77
|
+
getDefault() {
|
|
78
|
+
return this._themes.find((t) => t.isDefault) ?? this._themes[0];
|
|
79
|
+
}
|
|
80
|
+
getByName(name) {
|
|
81
|
+
return this._themes.find((t) => t.themeName === name);
|
|
82
|
+
}
|
|
83
|
+
getById(id) {
|
|
84
|
+
return this._themes.find((t) => t.id === id);
|
|
85
|
+
}
|
|
86
|
+
getMapped() {
|
|
87
|
+
return this._themes.map((t) => ({
|
|
88
|
+
id: t.id,
|
|
89
|
+
themeName: t.themeName,
|
|
90
|
+
primary: t.palettes.find((p) => p.name === "Primary")?.baseColor ?? ""
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
/** Inject a theme's palette as CSS custom properties on :root */
|
|
94
|
+
apply(theme) {
|
|
95
|
+
const resolved = typeof theme === "string" ? this.getByName(theme) : theme;
|
|
96
|
+
if (!resolved) return;
|
|
97
|
+
const vars = this._buildCssVars(resolved);
|
|
98
|
+
this._injectStyles(vars);
|
|
99
|
+
this._active$.next(resolved.themeName);
|
|
100
|
+
this._id$.next(resolved.id);
|
|
101
|
+
}
|
|
102
|
+
applyById(id) {
|
|
103
|
+
const theme = this.getById(id);
|
|
104
|
+
if (theme) this.apply(theme);
|
|
105
|
+
}
|
|
106
|
+
applyDefault() {
|
|
107
|
+
const theme = this.getDefault();
|
|
108
|
+
if (theme) this.apply(theme);
|
|
109
|
+
}
|
|
110
|
+
/** Apply arbitrary CSS custom properties to :root */
|
|
111
|
+
applyVars(vars) {
|
|
112
|
+
const css = Object.entries(vars).map(([k, v]) => ` ${k}: ${v};`).join("\n");
|
|
113
|
+
this._injectStyles(`
|
|
114
|
+
${css}
|
|
115
|
+
`);
|
|
116
|
+
}
|
|
117
|
+
getActiveName() {
|
|
118
|
+
return this._active$.getValue();
|
|
119
|
+
}
|
|
120
|
+
getActiveId() {
|
|
121
|
+
return this._id$.getValue();
|
|
122
|
+
}
|
|
123
|
+
active$() {
|
|
124
|
+
return this._active$.asObservable();
|
|
125
|
+
}
|
|
126
|
+
activeId$() {
|
|
127
|
+
return this._id$.asObservable();
|
|
128
|
+
}
|
|
129
|
+
clearStyles() {
|
|
130
|
+
document.getElementById(STYLE_TAG_ID)?.remove();
|
|
131
|
+
}
|
|
132
|
+
_buildCssVars(theme) {
|
|
133
|
+
const lines = [];
|
|
134
|
+
for (const palette of theme.palettes) {
|
|
135
|
+
const p = palette.prefix ?? palette.name.toLowerCase().slice(0, 2);
|
|
136
|
+
if (palette.baseColor) {
|
|
137
|
+
lines.push(` --joop-${p}: ${palette.baseColor};`);
|
|
138
|
+
}
|
|
139
|
+
for (const color of palette.colors) {
|
|
140
|
+
lines.push(` --joop-${p}-${color.name}: ${color.value};`);
|
|
141
|
+
if (color.contrastText) {
|
|
142
|
+
const cp = palette.contrastPrefix ?? `${p}-c`;
|
|
143
|
+
lines.push(` --joop-${cp}-${color.name}: ${color.contrastText};`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (theme.fontFamily) lines.push(` --joop-font-family: ${theme.fontFamily};`);
|
|
148
|
+
if (theme.fontSize) lines.push(` --joop-font-size: ${theme.fontSize};`);
|
|
149
|
+
return lines.join("\n");
|
|
150
|
+
}
|
|
151
|
+
_injectStyles(vars) {
|
|
152
|
+
if (typeof document === "undefined") return;
|
|
153
|
+
let tag = document.getElementById(STYLE_TAG_ID);
|
|
154
|
+
if (!tag) {
|
|
155
|
+
tag = document.createElement("style");
|
|
156
|
+
tag.id = STYLE_TAG_ID;
|
|
157
|
+
document.head.appendChild(tag);
|
|
158
|
+
}
|
|
159
|
+
tag.textContent = `:root {
|
|
160
|
+
${vars}
|
|
161
|
+
}`;
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
export { JoopThemeService };
|
|
166
|
+
//# sourceMappingURL=index.mjs.map
|
|
167
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/events/index.ts","../../src/theme/theme.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 interface JoopThemeColor {\n name: string;\n value: string;\n contrastText?: string;\n}\n\nexport interface JoopThemePalette {\n name: string;\n prefix: string;\n contrastPrefix?: string;\n baseColor?: string;\n colors: JoopThemeColor[];\n}\n\nexport interface JoopTheme {\n id: number;\n themeName: string;\n palettes: JoopThemePalette[];\n isDefault?: boolean;\n fontFamily?: string;\n fontSize?: string;\n}\n\nexport interface JoopThemeInfo {\n id: number;\n themeName: string;\n primary: string;\n}\n\nconst STYLE_TAG_ID = '__joop_theme__';\n\nexport class JoopThemeService {\n private _themes: JoopTheme[] = [];\n private _active$ = new JoopBehaviorSubject<string>('');\n private _id$ = new JoopBehaviorSubject<number>(0);\n\n async load(themesOrUrl: JoopTheme[] | string): Promise<JoopTheme[]> {\n if (Array.isArray(themesOrUrl)) {\n this._themes = themesOrUrl;\n } else {\n const res = await fetch(themesOrUrl);\n this._themes = await res.json();\n }\n return this._themes;\n }\n\n getAll(): JoopTheme[] { return this._themes; }\n\n getDefault(): JoopTheme | undefined {\n return this._themes.find(t => t.isDefault) ?? this._themes[0];\n }\n\n getByName(name: string): JoopTheme | undefined {\n return this._themes.find(t => t.themeName === name);\n }\n\n getById(id: number): JoopTheme | undefined {\n return this._themes.find(t => t.id === id);\n }\n\n getMapped(): JoopThemeInfo[] {\n return this._themes.map(t => ({\n id: t.id,\n themeName: t.themeName,\n primary: t.palettes.find(p => p.name === 'Primary')?.baseColor ?? '',\n }));\n }\n\n /** Inject a theme's palette as CSS custom properties on :root */\n apply(theme: JoopTheme | string): void {\n const resolved = typeof theme === 'string' ? this.getByName(theme) : theme;\n if (!resolved) return;\n\n const vars = this._buildCssVars(resolved);\n this._injectStyles(vars);\n this._active$.next(resolved.themeName);\n this._id$.next(resolved.id);\n }\n\n applyById(id: number): void {\n const theme = this.getById(id);\n if (theme) this.apply(theme);\n }\n\n applyDefault(): void {\n const theme = this.getDefault();\n if (theme) this.apply(theme);\n }\n\n /** Apply arbitrary CSS custom properties to :root */\n applyVars(vars: Record<string, string>): void {\n const css = Object.entries(vars).map(([k, v]) => ` ${k}: ${v};`).join('\\n');\n this._injectStyles(`\\n${css}\\n`);\n }\n\n getActiveName(): string { return this._active$.getValue(); }\n getActiveId(): number { return this._id$.getValue(); }\n active$() { return this._active$.asObservable(); }\n activeId$() { return this._id$.asObservable(); }\n\n clearStyles(): void {\n document.getElementById(STYLE_TAG_ID)?.remove();\n }\n\n private _buildCssVars(theme: JoopTheme): string {\n const lines: string[] = [];\n for (const palette of theme.palettes) {\n const p = palette.prefix ?? palette.name.toLowerCase().slice(0, 2);\n if (palette.baseColor) {\n lines.push(` --joop-${p}: ${palette.baseColor};`);\n }\n for (const color of palette.colors) {\n lines.push(` --joop-${p}-${color.name}: ${color.value};`);\n if (color.contrastText) {\n const cp = palette.contrastPrefix ?? `${p}-c`;\n lines.push(` --joop-${cp}-${color.name}: ${color.contrastText};`);\n }\n }\n }\n if (theme.fontFamily) lines.push(` --joop-font-family: ${theme.fontFamily};`);\n if (theme.fontSize) lines.push(` --joop-font-size: ${theme.fontSize};`);\n return lines.join('\\n');\n }\n\n private _injectStyles(vars: string): void {\n if (typeof document === 'undefined') return;\n let tag = document.getElementById(STYLE_TAG_ID) as HTMLStyleElement | null;\n if (!tag) {\n tag = document.createElement('style');\n tag.id = STYLE_TAG_ID;\n document.head.appendChild(tag);\n }\n tag.textContent = `:root {\\n${vars}\\n}`;\n }\n}\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export { d as JoopA11yService, a as JoopAlertService, e as JoopAlertType, f as JoopAriaLivePoliteness, g as JoopDialogButton, h as JoopDialogOptions, i as JoopFocusTrapOptions, j as JoopInlineAlert, k as JoopLoaderConfig, J as JoopLoaderService, l as JoopPageState, b as JoopPaginationService, n as JoopPrintOptions, c as JoopPrintService, m as JoopToastOptions } from '../a11y.service-C-DQQfgO.mjs';
|
|
2
|
+
import '../index-Dz0gOur2.mjs';
|
|
3
|
+
|
|
4
|
+
interface JoopVirtualScrollOptions {
|
|
5
|
+
itemHeight: number;
|
|
6
|
+
overscan?: number;
|
|
7
|
+
}
|
|
8
|
+
interface JoopVirtualRange {
|
|
9
|
+
start: number;
|
|
10
|
+
end: number;
|
|
11
|
+
offsetTop: number;
|
|
12
|
+
}
|
|
13
|
+
type JoopRenderFn<T> = (item: T, index: number) => HTMLElement;
|
|
14
|
+
declare class JoopVirtualScroll<T = unknown> {
|
|
15
|
+
private _container;
|
|
16
|
+
private _items;
|
|
17
|
+
private _renderFn;
|
|
18
|
+
private _opts;
|
|
19
|
+
private _scrollListener;
|
|
20
|
+
private _rangeHandlers;
|
|
21
|
+
private _innerEl;
|
|
22
|
+
private _spacerTop;
|
|
23
|
+
private _spacerBottom;
|
|
24
|
+
private _rendered;
|
|
25
|
+
private _lastRange;
|
|
26
|
+
attach(container: HTMLElement, items: T[], renderFn: JoopRenderFn<T>, opts?: Partial<JoopVirtualScrollOptions>): void;
|
|
27
|
+
detach(): void;
|
|
28
|
+
updateItems(items: T[]): void;
|
|
29
|
+
scrollTo(index: number): void;
|
|
30
|
+
getVisibleRange(): JoopVirtualRange;
|
|
31
|
+
onRangeChange(handler: (range: JoopVirtualRange) => void): () => void;
|
|
32
|
+
private _render;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type JoopKeyboardMode = 'pin' | 'amount' | 'otp' | 'numeric';
|
|
36
|
+
interface JoopBankingKeyboardConfig {
|
|
37
|
+
mode?: JoopKeyboardMode;
|
|
38
|
+
scramble?: boolean;
|
|
39
|
+
haptic?: boolean;
|
|
40
|
+
maskInput?: boolean;
|
|
41
|
+
maxLength?: number;
|
|
42
|
+
theme?: 'light' | 'dark';
|
|
43
|
+
}
|
|
44
|
+
interface JoopBankingKeyboardOptions extends JoopBankingKeyboardConfig {
|
|
45
|
+
onInput?: (value: string) => void;
|
|
46
|
+
onSubmit?: (value: string) => void;
|
|
47
|
+
onClear?: () => void;
|
|
48
|
+
}
|
|
49
|
+
declare class JoopBankingKeyboard {
|
|
50
|
+
private _container;
|
|
51
|
+
private _value;
|
|
52
|
+
private readonly _config;
|
|
53
|
+
private readonly _opts;
|
|
54
|
+
constructor(opts?: JoopBankingKeyboardOptions);
|
|
55
|
+
render(container: HTMLElement): void;
|
|
56
|
+
getValue(): string;
|
|
57
|
+
clear(): void;
|
|
58
|
+
destroy(): void;
|
|
59
|
+
private _renderDisplay;
|
|
60
|
+
private _renderKeys;
|
|
61
|
+
private _makeKey;
|
|
62
|
+
private _makeSpacer;
|
|
63
|
+
private _refresh;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export { JoopBankingKeyboard, type JoopBankingKeyboardConfig, type JoopBankingKeyboardOptions, type JoopKeyboardMode, type JoopRenderFn, type JoopVirtualRange, JoopVirtualScroll, type JoopVirtualScrollOptions };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export { d as JoopA11yService, a as JoopAlertService, e as JoopAlertType, f as JoopAriaLivePoliteness, g as JoopDialogButton, h as JoopDialogOptions, i as JoopFocusTrapOptions, j as JoopInlineAlert, k as JoopLoaderConfig, J as JoopLoaderService, l as JoopPageState, b as JoopPaginationService, n as JoopPrintOptions, c as JoopPrintService, m as JoopToastOptions } from '../a11y.service-CauEJrJe.js';
|
|
2
|
+
import '../index-Dz0gOur2.js';
|
|
3
|
+
|
|
4
|
+
interface JoopVirtualScrollOptions {
|
|
5
|
+
itemHeight: number;
|
|
6
|
+
overscan?: number;
|
|
7
|
+
}
|
|
8
|
+
interface JoopVirtualRange {
|
|
9
|
+
start: number;
|
|
10
|
+
end: number;
|
|
11
|
+
offsetTop: number;
|
|
12
|
+
}
|
|
13
|
+
type JoopRenderFn<T> = (item: T, index: number) => HTMLElement;
|
|
14
|
+
declare class JoopVirtualScroll<T = unknown> {
|
|
15
|
+
private _container;
|
|
16
|
+
private _items;
|
|
17
|
+
private _renderFn;
|
|
18
|
+
private _opts;
|
|
19
|
+
private _scrollListener;
|
|
20
|
+
private _rangeHandlers;
|
|
21
|
+
private _innerEl;
|
|
22
|
+
private _spacerTop;
|
|
23
|
+
private _spacerBottom;
|
|
24
|
+
private _rendered;
|
|
25
|
+
private _lastRange;
|
|
26
|
+
attach(container: HTMLElement, items: T[], renderFn: JoopRenderFn<T>, opts?: Partial<JoopVirtualScrollOptions>): void;
|
|
27
|
+
detach(): void;
|
|
28
|
+
updateItems(items: T[]): void;
|
|
29
|
+
scrollTo(index: number): void;
|
|
30
|
+
getVisibleRange(): JoopVirtualRange;
|
|
31
|
+
onRangeChange(handler: (range: JoopVirtualRange) => void): () => void;
|
|
32
|
+
private _render;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type JoopKeyboardMode = 'pin' | 'amount' | 'otp' | 'numeric';
|
|
36
|
+
interface JoopBankingKeyboardConfig {
|
|
37
|
+
mode?: JoopKeyboardMode;
|
|
38
|
+
scramble?: boolean;
|
|
39
|
+
haptic?: boolean;
|
|
40
|
+
maskInput?: boolean;
|
|
41
|
+
maxLength?: number;
|
|
42
|
+
theme?: 'light' | 'dark';
|
|
43
|
+
}
|
|
44
|
+
interface JoopBankingKeyboardOptions extends JoopBankingKeyboardConfig {
|
|
45
|
+
onInput?: (value: string) => void;
|
|
46
|
+
onSubmit?: (value: string) => void;
|
|
47
|
+
onClear?: () => void;
|
|
48
|
+
}
|
|
49
|
+
declare class JoopBankingKeyboard {
|
|
50
|
+
private _container;
|
|
51
|
+
private _value;
|
|
52
|
+
private readonly _config;
|
|
53
|
+
private readonly _opts;
|
|
54
|
+
constructor(opts?: JoopBankingKeyboardOptions);
|
|
55
|
+
render(container: HTMLElement): void;
|
|
56
|
+
getValue(): string;
|
|
57
|
+
clear(): void;
|
|
58
|
+
destroy(): void;
|
|
59
|
+
private _renderDisplay;
|
|
60
|
+
private _renderKeys;
|
|
61
|
+
private _makeKey;
|
|
62
|
+
private _makeSpacer;
|
|
63
|
+
private _refresh;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export { JoopBankingKeyboard, type JoopBankingKeyboardConfig, type JoopBankingKeyboardOptions, type JoopKeyboardMode, type JoopRenderFn, type JoopVirtualRange, JoopVirtualScroll, type JoopVirtualScrollOptions };
|