@irisidea/kalrav-ai 1.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/LICENSE +21 -0
- package/README.md +600 -0
- package/dist/angular.d.mts +28 -0
- package/dist/angular.d.ts +28 -0
- package/dist/angular.js +321 -0
- package/dist/angular.js.map +1 -0
- package/dist/angular.mjs +295 -0
- package/dist/angular.mjs.map +1 -0
- package/dist/index.d.mts +48 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.js +175 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +147 -0
- package/dist/index.mjs.map +1 -0
- package/dist/nextjs.d.mts +10 -0
- package/dist/nextjs.d.ts +10 -0
- package/dist/nextjs.js +216 -0
- package/dist/nextjs.js.map +1 -0
- package/dist/nextjs.mjs +188 -0
- package/dist/nextjs.mjs.map +1 -0
- package/dist/react.d.mts +10 -0
- package/dist/react.d.ts +10 -0
- package/dist/react.js +205 -0
- package/dist/react.js.map +1 -0
- package/dist/react.mjs +177 -0
- package/dist/react.mjs.map +1 -0
- package/dist/routeye-widget.js +1 -0
- package/dist/types-coZ9jHpG.d.mts +28 -0
- package/dist/types-coZ9jHpG.d.ts +28 -0
- package/dist/vue.d.mts +57 -0
- package/dist/vue.d.ts +57 -0
- package/dist/vue.js +237 -0
- package/dist/vue.js.map +1 -0
- package/dist/vue.mjs +215 -0
- package/dist/vue.mjs.map +1 -0
- package/package.json +108 -0
package/dist/angular.js
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
|
|
8
|
+
var __typeError = (msg) => {
|
|
9
|
+
throw TypeError(msg);
|
|
10
|
+
};
|
|
11
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
12
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
13
|
+
var __export = (target, all) => {
|
|
14
|
+
for (var name in all)
|
|
15
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
16
|
+
};
|
|
17
|
+
var __copyProps = (to, from, except, desc) => {
|
|
18
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
19
|
+
for (let key of __getOwnPropNames(from))
|
|
20
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
21
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
22
|
+
}
|
|
23
|
+
return to;
|
|
24
|
+
};
|
|
25
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
26
|
+
var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
|
|
27
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
28
|
+
var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
29
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
|
|
30
|
+
var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
|
|
31
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
32
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
|
|
33
|
+
return value;
|
|
34
|
+
};
|
|
35
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
36
|
+
var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
|
|
37
|
+
var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
|
|
38
|
+
var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
|
|
39
|
+
var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
|
|
40
|
+
return __privateGet(this, extra);
|
|
41
|
+
}, set [name](x) {
|
|
42
|
+
return __privateSet(this, extra, x);
|
|
43
|
+
} }, name));
|
|
44
|
+
k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
|
|
45
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
46
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
47
|
+
if (k) {
|
|
48
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
|
|
49
|
+
if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
|
|
50
|
+
if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
|
|
51
|
+
}
|
|
52
|
+
it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
|
|
53
|
+
if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
|
|
54
|
+
else if (typeof it !== "object" || it === null) __typeError("Object expected");
|
|
55
|
+
else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
|
|
56
|
+
}
|
|
57
|
+
return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
|
|
58
|
+
};
|
|
59
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
60
|
+
var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
|
|
61
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
62
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
63
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
64
|
+
|
|
65
|
+
// src/angular/index.ts
|
|
66
|
+
var angular_exports = {};
|
|
67
|
+
__export(angular_exports, {
|
|
68
|
+
KalravModule: () => KalravModule,
|
|
69
|
+
KalravService: () => KalravService,
|
|
70
|
+
KalravWidget: () => KalravWidget
|
|
71
|
+
});
|
|
72
|
+
module.exports = __toCommonJS(angular_exports);
|
|
73
|
+
|
|
74
|
+
// src/angular/KalravModule.ts
|
|
75
|
+
var import_core2 = require("@angular/core");
|
|
76
|
+
var import_common = require("@angular/common");
|
|
77
|
+
|
|
78
|
+
// src/angular/KalravWidget.ts
|
|
79
|
+
var import_core = require("@angular/core");
|
|
80
|
+
|
|
81
|
+
// src/core/kalrav.ts
|
|
82
|
+
var DEFAULT_WIDGET_URL = "https://widget.kalrav.ai/routeye-widget.js";
|
|
83
|
+
var DEFAULT_PRIMARY_COLOR = "#4F46E5";
|
|
84
|
+
var Kalrav = class {
|
|
85
|
+
constructor(config) {
|
|
86
|
+
this.loaded = false;
|
|
87
|
+
this.script = null;
|
|
88
|
+
if (!config.apiKey) {
|
|
89
|
+
throw new Error("Kalrav: apiKey is required");
|
|
90
|
+
}
|
|
91
|
+
if (!config.agentId) {
|
|
92
|
+
throw new Error("Kalrav: agentId is required");
|
|
93
|
+
}
|
|
94
|
+
this.config = {
|
|
95
|
+
apiKey: config.apiKey,
|
|
96
|
+
agentId: config.agentId,
|
|
97
|
+
primaryColor: config.primaryColor || DEFAULT_PRIMARY_COLOR,
|
|
98
|
+
autoLoad: config.autoLoad !== false,
|
|
99
|
+
widgetUrl: config.widgetUrl || DEFAULT_WIDGET_URL
|
|
100
|
+
};
|
|
101
|
+
if (this.config.autoLoad && typeof window !== "undefined") {
|
|
102
|
+
this.load().catch((err) => {
|
|
103
|
+
console.warn("Kalrav auto-load failed:", err);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Remove broken or duplicate scripts
|
|
109
|
+
*/
|
|
110
|
+
removeStaleScripts() {
|
|
111
|
+
if (typeof document === "undefined") return;
|
|
112
|
+
document.querySelectorAll('script[src*="routeye-widget.js"]').forEach((s) => {
|
|
113
|
+
const hasAgent = !!s.getAttribute("data-agent-id");
|
|
114
|
+
const hasKey = !!(s.getAttribute("data-x-key") || s.dataset.xKey);
|
|
115
|
+
if (!hasAgent || !hasKey) {
|
|
116
|
+
console.warn("Kalrav: Removing stale script:", s.outerHTML);
|
|
117
|
+
s.remove();
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Load the Kalrav widget
|
|
123
|
+
*/
|
|
124
|
+
async load() {
|
|
125
|
+
if (typeof window === "undefined") {
|
|
126
|
+
throw new Error("Kalrav: Cannot load in non-browser environment");
|
|
127
|
+
}
|
|
128
|
+
if (typeof document === "undefined") {
|
|
129
|
+
throw new Error("Kalrav: Document is not available");
|
|
130
|
+
}
|
|
131
|
+
if (this.loaded) {
|
|
132
|
+
return Promise.resolve();
|
|
133
|
+
}
|
|
134
|
+
return new Promise((resolve, reject) => {
|
|
135
|
+
try {
|
|
136
|
+
const script = document.createElement("script");
|
|
137
|
+
script.src = this.config.widgetUrl;
|
|
138
|
+
script.setAttribute("data-agent-id", this.config.agentId);
|
|
139
|
+
script.setAttribute("data-x-key", this.config.apiKey);
|
|
140
|
+
script.setAttribute("data-primary-color", this.config.primaryColor);
|
|
141
|
+
script.async = false;
|
|
142
|
+
script.onload = () => {
|
|
143
|
+
this.script = script;
|
|
144
|
+
this.loaded = true;
|
|
145
|
+
console.log("\u2705 Kalrav widget loaded successfully");
|
|
146
|
+
resolve();
|
|
147
|
+
};
|
|
148
|
+
script.onerror = (e) => {
|
|
149
|
+
this.loaded = false;
|
|
150
|
+
console.error("\u274C Kalrav widget failed to load", e);
|
|
151
|
+
reject(new Error("Failed to load Kalrav widget script"));
|
|
152
|
+
};
|
|
153
|
+
document.body.appendChild(script);
|
|
154
|
+
this.script = script;
|
|
155
|
+
} catch (err) {
|
|
156
|
+
this.loaded = false;
|
|
157
|
+
reject(err);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Unload the widget
|
|
163
|
+
*/
|
|
164
|
+
unload() {
|
|
165
|
+
if (this.script) {
|
|
166
|
+
this.script.remove();
|
|
167
|
+
}
|
|
168
|
+
this.script = null;
|
|
169
|
+
this.loaded = false;
|
|
170
|
+
if (typeof window !== "undefined") {
|
|
171
|
+
try {
|
|
172
|
+
delete window.routeyeWidget;
|
|
173
|
+
} catch (_) {
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
console.log("Kalrav widget unloaded");
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Open the chat widget
|
|
180
|
+
*/
|
|
181
|
+
open() {
|
|
182
|
+
if (typeof window === "undefined") return;
|
|
183
|
+
const w = window;
|
|
184
|
+
if (w.routeyeWidget?.open) {
|
|
185
|
+
return w.routeyeWidget.open();
|
|
186
|
+
}
|
|
187
|
+
w.dispatchEvent(new CustomEvent("kalrav:open"));
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Close the chat widget
|
|
191
|
+
*/
|
|
192
|
+
close() {
|
|
193
|
+
if (typeof window === "undefined") return;
|
|
194
|
+
const w = window;
|
|
195
|
+
if (w.routeyeWidget?.close) {
|
|
196
|
+
return w.routeyeWidget.close();
|
|
197
|
+
}
|
|
198
|
+
w.dispatchEvent(new CustomEvent("kalrav:close"));
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Check if widget is loaded
|
|
202
|
+
*/
|
|
203
|
+
isLoaded() {
|
|
204
|
+
return this.loaded;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Call any widget method
|
|
208
|
+
*/
|
|
209
|
+
call(method, ...args) {
|
|
210
|
+
if (typeof window === "undefined") return;
|
|
211
|
+
const w = window;
|
|
212
|
+
if (w.routeyeWidget?.[method]) {
|
|
213
|
+
return w.routeyeWidget[method](...args);
|
|
214
|
+
}
|
|
215
|
+
w.dispatchEvent(
|
|
216
|
+
new CustomEvent("kalrav:call", { detail: { method, args } })
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
function createKalrav(config) {
|
|
221
|
+
return new Kalrav(config);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// src/angular/KalravWidget.ts
|
|
225
|
+
var _widgetUrl_dec, _autoLoad_dec, _primaryColor_dec, _agentId_dec, _apiKey_dec, _KalravWidget_decorators, _init;
|
|
226
|
+
_KalravWidget_decorators = [(0, import_core.Component)({
|
|
227
|
+
selector: "kalrav-widget",
|
|
228
|
+
template: '<div style="display:none"></div>',
|
|
229
|
+
standalone: true
|
|
230
|
+
})], _apiKey_dec = [(0, import_core.Input)()], _agentId_dec = [(0, import_core.Input)()], _primaryColor_dec = [(0, import_core.Input)()], _autoLoad_dec = [(0, import_core.Input)()], _widgetUrl_dec = [(0, import_core.Input)()];
|
|
231
|
+
var KalravWidget = class {
|
|
232
|
+
constructor() {
|
|
233
|
+
this.apiKey = __runInitializers(_init, 8, this), __runInitializers(_init, 11, this);
|
|
234
|
+
this.agentId = __runInitializers(_init, 12, this), __runInitializers(_init, 15, this);
|
|
235
|
+
this.primaryColor = __runInitializers(_init, 16, this, "#4F46E5"), __runInitializers(_init, 19, this);
|
|
236
|
+
this.autoLoad = __runInitializers(_init, 20, this, true), __runInitializers(_init, 23, this);
|
|
237
|
+
this.widgetUrl = __runInitializers(_init, 24, this, "https://widget.kalrav.ai/routeye-widget.js"), __runInitializers(_init, 27, this);
|
|
238
|
+
this.kalravInstance = null;
|
|
239
|
+
}
|
|
240
|
+
ngOnInit() {
|
|
241
|
+
if (!this.apiKey || !this.agentId) {
|
|
242
|
+
console.error("Kalrav: apiKey and agentId are required");
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
this.kalravInstance = createKalrav({
|
|
246
|
+
apiKey: this.apiKey,
|
|
247
|
+
agentId: this.agentId,
|
|
248
|
+
primaryColor: this.primaryColor,
|
|
249
|
+
autoLoad: this.autoLoad,
|
|
250
|
+
widgetUrl: this.widgetUrl
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
ngOnDestroy() {
|
|
254
|
+
this.kalravInstance?.unload();
|
|
255
|
+
this.kalravInstance = null;
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
_init = __decoratorStart(null);
|
|
259
|
+
__decorateElement(_init, 5, "apiKey", _apiKey_dec, KalravWidget);
|
|
260
|
+
__decorateElement(_init, 5, "agentId", _agentId_dec, KalravWidget);
|
|
261
|
+
__decorateElement(_init, 5, "primaryColor", _primaryColor_dec, KalravWidget);
|
|
262
|
+
__decorateElement(_init, 5, "autoLoad", _autoLoad_dec, KalravWidget);
|
|
263
|
+
__decorateElement(_init, 5, "widgetUrl", _widgetUrl_dec, KalravWidget);
|
|
264
|
+
KalravWidget = __decorateElement(_init, 0, "KalravWidget", _KalravWidget_decorators, KalravWidget);
|
|
265
|
+
__runInitializers(_init, 1, KalravWidget);
|
|
266
|
+
|
|
267
|
+
// src/angular/KalravModule.ts
|
|
268
|
+
var _KalravModule_decorators, _init2;
|
|
269
|
+
_KalravModule_decorators = [(0, import_core2.NgModule)({
|
|
270
|
+
imports: [import_common.CommonModule, KalravWidget],
|
|
271
|
+
exports: [KalravWidget]
|
|
272
|
+
})];
|
|
273
|
+
var KalravModule = class {
|
|
274
|
+
};
|
|
275
|
+
_init2 = __decoratorStart(null);
|
|
276
|
+
KalravModule = __decorateElement(_init2, 0, "KalravModule", _KalravModule_decorators, KalravModule);
|
|
277
|
+
__runInitializers(_init2, 1, KalravModule);
|
|
278
|
+
|
|
279
|
+
// src/angular/KalravService.ts
|
|
280
|
+
var import_core3 = require("@angular/core");
|
|
281
|
+
var _KalravService_decorators, _init3;
|
|
282
|
+
_KalravService_decorators = [(0, import_core3.Injectable)({
|
|
283
|
+
providedIn: "root"
|
|
284
|
+
})];
|
|
285
|
+
var KalravService = class {
|
|
286
|
+
constructor() {
|
|
287
|
+
this.kalravInstance = null;
|
|
288
|
+
}
|
|
289
|
+
initialize(config) {
|
|
290
|
+
if (this.kalravInstance) {
|
|
291
|
+
this.kalravInstance.unload();
|
|
292
|
+
}
|
|
293
|
+
this.kalravInstance = createKalrav(config);
|
|
294
|
+
}
|
|
295
|
+
getWidget() {
|
|
296
|
+
return this.kalravInstance;
|
|
297
|
+
}
|
|
298
|
+
open() {
|
|
299
|
+
this.kalravInstance?.open();
|
|
300
|
+
}
|
|
301
|
+
close() {
|
|
302
|
+
this.kalravInstance?.close();
|
|
303
|
+
}
|
|
304
|
+
isLoaded() {
|
|
305
|
+
return this.kalravInstance?.isLoaded() ?? false;
|
|
306
|
+
}
|
|
307
|
+
unload() {
|
|
308
|
+
this.kalravInstance?.unload();
|
|
309
|
+
this.kalravInstance = null;
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
_init3 = __decoratorStart(null);
|
|
313
|
+
KalravService = __decorateElement(_init3, 0, "KalravService", _KalravService_decorators, KalravService);
|
|
314
|
+
__runInitializers(_init3, 1, KalravService);
|
|
315
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
316
|
+
0 && (module.exports = {
|
|
317
|
+
KalravModule,
|
|
318
|
+
KalravService,
|
|
319
|
+
KalravWidget
|
|
320
|
+
});
|
|
321
|
+
//# sourceMappingURL=angular.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/angular/index.ts","../src/angular/KalravModule.ts","../src/angular/KalravWidget.ts","../src/core/kalrav.ts","../src/angular/KalravService.ts"],"sourcesContent":["export { KalravModule } from './KalravModule';\r\nexport { KalravWidget } from './KalravWidget';\r\nexport { KalravService } from './KalravService';\r\nexport type { KalravConfig, KalravWidget as KalravWidgetInstance } from '../core/types';\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { KalravWidget } from './KalravWidget';\r\n\r\n@NgModule({\r\n imports: [CommonModule, KalravWidget],\r\n exports: [KalravWidget]\r\n})\r\nexport class KalravModule {}\r\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\r\nimport { createKalrav } from '../core/kalrav';\r\nimport type { KalravWidget as KalravWidgetInstance } from '../core/types';\r\n\r\n@Component({\r\n selector: 'kalrav-widget',\r\n template: '<div style=\"display:none\"></div>',\r\n standalone: true\r\n})\r\nexport class KalravWidget implements OnInit, OnDestroy {\r\n @Input() apiKey!: string;\r\n @Input() agentId!: string;\r\n @Input() primaryColor: string = '#4F46E5';\r\n @Input() autoLoad: boolean = true;\r\n @Input() widgetUrl: string = 'https://widget.kalrav.ai/routeye-widget.js';\r\n\r\n private kalravInstance: KalravWidgetInstance | null = null;\r\n\r\n ngOnInit(): void {\r\n if (!this.apiKey || !this.agentId) {\r\n console.error('Kalrav: apiKey and agentId are required');\r\n return;\r\n }\r\n\r\n this.kalravInstance = createKalrav({\r\n apiKey: this.apiKey,\r\n agentId: this.agentId,\r\n primaryColor: this.primaryColor,\r\n autoLoad: this.autoLoad,\r\n widgetUrl: this.widgetUrl,\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.kalravInstance?.unload();\r\n this.kalravInstance = null;\r\n }\r\n}\r\n","import type { KalravConfig, KalravWidget } from './types';\r\n// @ts-ignore - ConfigManager is JS file\r\nimport { ConfigManager } from '../config-manager.js';\r\n\r\nconst DEFAULT_WIDGET_URL = 'https://widget.kalrav.ai/routeye-widget.js'; // Production widget CDN\r\nconst DEFAULT_PRIMARY_COLOR = '#4F46E5';\r\n\r\n/**\r\n * Kalrav AI Widget Core Implementation\r\n * \r\n * This is the core vanilla JS/TS implementation that works across all frameworks.\r\n * Enhanced version of the original kalravPureJs.js with TypeScript support.\r\n */\r\nexport class Kalrav implements KalravWidget {\r\n private loaded: boolean = false;\r\n private script: HTMLScriptElement | null = null;\r\n private config: Required<KalravConfig>;\r\n\r\n constructor(config: KalravConfig) {\r\n if (!config.apiKey) {\r\n throw new Error('Kalrav: apiKey is required');\r\n }\r\n if (!config.agentId) {\r\n throw new Error('Kalrav: agentId is required');\r\n }\r\n\r\n this.config = {\r\n apiKey: config.apiKey,\r\n agentId: config.agentId,\r\n primaryColor: config.primaryColor || DEFAULT_PRIMARY_COLOR,\r\n autoLoad: config.autoLoad !== false,\r\n widgetUrl: config.widgetUrl || DEFAULT_WIDGET_URL,\r\n };\r\n\r\n // Auto-load if enabled\r\n if (this.config.autoLoad && typeof window !== 'undefined') {\r\n this.load().catch((err) => {\r\n console.warn('Kalrav auto-load failed:', err);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Remove broken or duplicate scripts\r\n */\r\n private removeStaleScripts(): void {\r\n if (typeof document === 'undefined') return;\r\n\r\n document.querySelectorAll('script[src*=\"routeye-widget.js\"]').forEach((s) => {\r\n const hasAgent = !!s.getAttribute('data-agent-id');\r\n const hasKey = !!(s.getAttribute('data-x-key') || (s as HTMLElement).dataset.xKey);\r\n\r\n if (!hasAgent || !hasKey) {\r\n console.warn('Kalrav: Removing stale script:', s.outerHTML);\r\n s.remove();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Load the Kalrav widget\r\n */\r\n public async load(): Promise<void> {\r\n if (typeof window === 'undefined') {\r\n throw new Error('Kalrav: Cannot load in non-browser environment');\r\n }\r\n\r\n if (typeof document === 'undefined') {\r\n throw new Error('Kalrav: Document is not available');\r\n }\r\n\r\n // Check if already loaded\r\n if (this.loaded) {\r\n return Promise.resolve();\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // 🎨 UI customization config will be fetched by widget.js itself\r\n // We just need to create a script tag with the agent credentials\r\n \r\n const script = document.createElement('script');\r\n \r\n // Use configured widget URL (can be CDN or local)\r\n script.src = this.config.widgetUrl;\r\n \r\n script.setAttribute('data-agent-id', this.config.agentId);\r\n script.setAttribute('data-x-key', this.config.apiKey);\r\n script.setAttribute('data-primary-color', this.config.primaryColor);\r\n script.async = false;\r\n\r\n script.onload = () => {\r\n this.script = script;\r\n this.loaded = true;\r\n console.log('✅ Kalrav widget loaded successfully');\r\n resolve();\r\n };\r\n\r\n script.onerror = (e) => {\r\n this.loaded = false;\r\n console.error('❌ Kalrav widget failed to load', e);\r\n reject(new Error('Failed to load Kalrav widget script'));\r\n };\r\n\r\n document.body.appendChild(script);\r\n this.script = script;\r\n } catch (err) {\r\n this.loaded = false;\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Unload the widget\r\n */\r\n public unload(): void {\r\n if (this.script) {\r\n this.script.remove();\r\n }\r\n\r\n this.script = null;\r\n this.loaded = false;\r\n\r\n // Optional cleanup\r\n if (typeof window !== 'undefined') {\r\n try {\r\n delete (window as any).routeyeWidget;\r\n } catch (_) {\r\n // Ignore errors\r\n }\r\n }\r\n\r\n console.log('Kalrav widget unloaded');\r\n }\r\n\r\n /**\r\n * Open the chat widget\r\n */\r\n public open(): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const w = window as any;\r\n if (w.routeyeWidget?.open) {\r\n return w.routeyeWidget.open();\r\n }\r\n\r\n w.dispatchEvent(new CustomEvent('kalrav:open'));\r\n }\r\n\r\n /**\r\n * Close the chat widget\r\n */\r\n public close(): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const w = window as any;\r\n if (w.routeyeWidget?.close) {\r\n return w.routeyeWidget.close();\r\n }\r\n\r\n w.dispatchEvent(new CustomEvent('kalrav:close'));\r\n }\r\n\r\n /**\r\n * Check if widget is loaded\r\n */\r\n public isLoaded(): boolean {\r\n return this.loaded;\r\n }\r\n\r\n /**\r\n * Call any widget method\r\n */\r\n public call(method: string, ...args: any[]): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const w = window as any;\r\n if (w.routeyeWidget?.[method]) {\r\n return w.routeyeWidget[method](...args);\r\n }\r\n\r\n w.dispatchEvent(\r\n new CustomEvent('kalrav:call', { detail: { method, args } })\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new Kalrav instance\r\n */\r\nexport function createKalrav(config: KalravConfig): KalravWidget {\r\n return new Kalrav(config);\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { createKalrav } from '../core/kalrav';\r\nimport type { KalravConfig, KalravWidget } from '../core/types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class KalravService {\r\n private kalravInstance: KalravWidget | null = null;\r\n\r\n initialize(config: KalravConfig): void {\r\n if (this.kalravInstance) {\r\n this.kalravInstance.unload();\r\n }\r\n this.kalravInstance = createKalrav(config);\r\n }\r\n\r\n getWidget(): KalravWidget | null {\r\n return this.kalravInstance;\r\n }\r\n\r\n open(): void {\r\n this.kalravInstance?.open();\r\n }\r\n\r\n close(): void {\r\n this.kalravInstance?.close();\r\n }\r\n\r\n isLoaded(): boolean {\r\n return this.kalravInstance?.isLoaded() ?? false;\r\n }\r\n\r\n unload(): void {\r\n this.kalravInstance?.unload();\r\n this.kalravInstance = null;\r\n }\r\n}\r\n"],"mappings":"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","names":["import_core","_init","import_core","_init"]}
|
package/dist/angular.mjs
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
|
|
5
|
+
var __typeError = (msg) => {
|
|
6
|
+
throw TypeError(msg);
|
|
7
|
+
};
|
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
10
|
+
var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
|
|
11
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
12
|
+
var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
13
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
|
|
14
|
+
var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
|
|
15
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
16
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
|
|
17
|
+
return value;
|
|
18
|
+
};
|
|
19
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
20
|
+
var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
|
|
21
|
+
var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
|
|
22
|
+
var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
|
|
23
|
+
var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
|
|
24
|
+
return __privateGet(this, extra);
|
|
25
|
+
}, set [name](x) {
|
|
26
|
+
return __privateSet(this, extra, x);
|
|
27
|
+
} }, name));
|
|
28
|
+
k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
|
|
29
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
30
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
31
|
+
if (k) {
|
|
32
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
|
|
33
|
+
if (k ^ 3) access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
|
|
34
|
+
if (k > 2) access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
|
|
35
|
+
}
|
|
36
|
+
it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
|
|
37
|
+
if (k ^ 4 || it === void 0) __expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
|
|
38
|
+
else if (typeof it !== "object" || it === null) __typeError("Object expected");
|
|
39
|
+
else __expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
|
|
40
|
+
}
|
|
41
|
+
return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
|
|
42
|
+
};
|
|
43
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
44
|
+
var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
|
|
45
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
46
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
47
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
48
|
+
|
|
49
|
+
// src/angular/KalravModule.ts
|
|
50
|
+
import { NgModule } from "@angular/core";
|
|
51
|
+
import { CommonModule } from "@angular/common";
|
|
52
|
+
|
|
53
|
+
// src/angular/KalravWidget.ts
|
|
54
|
+
import { Component, Input } from "@angular/core";
|
|
55
|
+
|
|
56
|
+
// src/core/kalrav.ts
|
|
57
|
+
var DEFAULT_WIDGET_URL = "https://widget.kalrav.ai/routeye-widget.js";
|
|
58
|
+
var DEFAULT_PRIMARY_COLOR = "#4F46E5";
|
|
59
|
+
var Kalrav = class {
|
|
60
|
+
constructor(config) {
|
|
61
|
+
this.loaded = false;
|
|
62
|
+
this.script = null;
|
|
63
|
+
if (!config.apiKey) {
|
|
64
|
+
throw new Error("Kalrav: apiKey is required");
|
|
65
|
+
}
|
|
66
|
+
if (!config.agentId) {
|
|
67
|
+
throw new Error("Kalrav: agentId is required");
|
|
68
|
+
}
|
|
69
|
+
this.config = {
|
|
70
|
+
apiKey: config.apiKey,
|
|
71
|
+
agentId: config.agentId,
|
|
72
|
+
primaryColor: config.primaryColor || DEFAULT_PRIMARY_COLOR,
|
|
73
|
+
autoLoad: config.autoLoad !== false,
|
|
74
|
+
widgetUrl: config.widgetUrl || DEFAULT_WIDGET_URL
|
|
75
|
+
};
|
|
76
|
+
if (this.config.autoLoad && typeof window !== "undefined") {
|
|
77
|
+
this.load().catch((err) => {
|
|
78
|
+
console.warn("Kalrav auto-load failed:", err);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove broken or duplicate scripts
|
|
84
|
+
*/
|
|
85
|
+
removeStaleScripts() {
|
|
86
|
+
if (typeof document === "undefined") return;
|
|
87
|
+
document.querySelectorAll('script[src*="routeye-widget.js"]').forEach((s) => {
|
|
88
|
+
const hasAgent = !!s.getAttribute("data-agent-id");
|
|
89
|
+
const hasKey = !!(s.getAttribute("data-x-key") || s.dataset.xKey);
|
|
90
|
+
if (!hasAgent || !hasKey) {
|
|
91
|
+
console.warn("Kalrav: Removing stale script:", s.outerHTML);
|
|
92
|
+
s.remove();
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Load the Kalrav widget
|
|
98
|
+
*/
|
|
99
|
+
async load() {
|
|
100
|
+
if (typeof window === "undefined") {
|
|
101
|
+
throw new Error("Kalrav: Cannot load in non-browser environment");
|
|
102
|
+
}
|
|
103
|
+
if (typeof document === "undefined") {
|
|
104
|
+
throw new Error("Kalrav: Document is not available");
|
|
105
|
+
}
|
|
106
|
+
if (this.loaded) {
|
|
107
|
+
return Promise.resolve();
|
|
108
|
+
}
|
|
109
|
+
return new Promise((resolve, reject) => {
|
|
110
|
+
try {
|
|
111
|
+
const script = document.createElement("script");
|
|
112
|
+
script.src = this.config.widgetUrl;
|
|
113
|
+
script.setAttribute("data-agent-id", this.config.agentId);
|
|
114
|
+
script.setAttribute("data-x-key", this.config.apiKey);
|
|
115
|
+
script.setAttribute("data-primary-color", this.config.primaryColor);
|
|
116
|
+
script.async = false;
|
|
117
|
+
script.onload = () => {
|
|
118
|
+
this.script = script;
|
|
119
|
+
this.loaded = true;
|
|
120
|
+
console.log("\u2705 Kalrav widget loaded successfully");
|
|
121
|
+
resolve();
|
|
122
|
+
};
|
|
123
|
+
script.onerror = (e) => {
|
|
124
|
+
this.loaded = false;
|
|
125
|
+
console.error("\u274C Kalrav widget failed to load", e);
|
|
126
|
+
reject(new Error("Failed to load Kalrav widget script"));
|
|
127
|
+
};
|
|
128
|
+
document.body.appendChild(script);
|
|
129
|
+
this.script = script;
|
|
130
|
+
} catch (err) {
|
|
131
|
+
this.loaded = false;
|
|
132
|
+
reject(err);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Unload the widget
|
|
138
|
+
*/
|
|
139
|
+
unload() {
|
|
140
|
+
if (this.script) {
|
|
141
|
+
this.script.remove();
|
|
142
|
+
}
|
|
143
|
+
this.script = null;
|
|
144
|
+
this.loaded = false;
|
|
145
|
+
if (typeof window !== "undefined") {
|
|
146
|
+
try {
|
|
147
|
+
delete window.routeyeWidget;
|
|
148
|
+
} catch (_) {
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
console.log("Kalrav widget unloaded");
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Open the chat widget
|
|
155
|
+
*/
|
|
156
|
+
open() {
|
|
157
|
+
if (typeof window === "undefined") return;
|
|
158
|
+
const w = window;
|
|
159
|
+
if (w.routeyeWidget?.open) {
|
|
160
|
+
return w.routeyeWidget.open();
|
|
161
|
+
}
|
|
162
|
+
w.dispatchEvent(new CustomEvent("kalrav:open"));
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Close the chat widget
|
|
166
|
+
*/
|
|
167
|
+
close() {
|
|
168
|
+
if (typeof window === "undefined") return;
|
|
169
|
+
const w = window;
|
|
170
|
+
if (w.routeyeWidget?.close) {
|
|
171
|
+
return w.routeyeWidget.close();
|
|
172
|
+
}
|
|
173
|
+
w.dispatchEvent(new CustomEvent("kalrav:close"));
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Check if widget is loaded
|
|
177
|
+
*/
|
|
178
|
+
isLoaded() {
|
|
179
|
+
return this.loaded;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Call any widget method
|
|
183
|
+
*/
|
|
184
|
+
call(method, ...args) {
|
|
185
|
+
if (typeof window === "undefined") return;
|
|
186
|
+
const w = window;
|
|
187
|
+
if (w.routeyeWidget?.[method]) {
|
|
188
|
+
return w.routeyeWidget[method](...args);
|
|
189
|
+
}
|
|
190
|
+
w.dispatchEvent(
|
|
191
|
+
new CustomEvent("kalrav:call", { detail: { method, args } })
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
function createKalrav(config) {
|
|
196
|
+
return new Kalrav(config);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// src/angular/KalravWidget.ts
|
|
200
|
+
var _widgetUrl_dec, _autoLoad_dec, _primaryColor_dec, _agentId_dec, _apiKey_dec, _KalravWidget_decorators, _init;
|
|
201
|
+
_KalravWidget_decorators = [Component({
|
|
202
|
+
selector: "kalrav-widget",
|
|
203
|
+
template: '<div style="display:none"></div>',
|
|
204
|
+
standalone: true
|
|
205
|
+
})], _apiKey_dec = [Input()], _agentId_dec = [Input()], _primaryColor_dec = [Input()], _autoLoad_dec = [Input()], _widgetUrl_dec = [Input()];
|
|
206
|
+
var KalravWidget = class {
|
|
207
|
+
constructor() {
|
|
208
|
+
this.apiKey = __runInitializers(_init, 8, this), __runInitializers(_init, 11, this);
|
|
209
|
+
this.agentId = __runInitializers(_init, 12, this), __runInitializers(_init, 15, this);
|
|
210
|
+
this.primaryColor = __runInitializers(_init, 16, this, "#4F46E5"), __runInitializers(_init, 19, this);
|
|
211
|
+
this.autoLoad = __runInitializers(_init, 20, this, true), __runInitializers(_init, 23, this);
|
|
212
|
+
this.widgetUrl = __runInitializers(_init, 24, this, "https://widget.kalrav.ai/routeye-widget.js"), __runInitializers(_init, 27, this);
|
|
213
|
+
this.kalravInstance = null;
|
|
214
|
+
}
|
|
215
|
+
ngOnInit() {
|
|
216
|
+
if (!this.apiKey || !this.agentId) {
|
|
217
|
+
console.error("Kalrav: apiKey and agentId are required");
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
this.kalravInstance = createKalrav({
|
|
221
|
+
apiKey: this.apiKey,
|
|
222
|
+
agentId: this.agentId,
|
|
223
|
+
primaryColor: this.primaryColor,
|
|
224
|
+
autoLoad: this.autoLoad,
|
|
225
|
+
widgetUrl: this.widgetUrl
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
ngOnDestroy() {
|
|
229
|
+
this.kalravInstance?.unload();
|
|
230
|
+
this.kalravInstance = null;
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
_init = __decoratorStart(null);
|
|
234
|
+
__decorateElement(_init, 5, "apiKey", _apiKey_dec, KalravWidget);
|
|
235
|
+
__decorateElement(_init, 5, "agentId", _agentId_dec, KalravWidget);
|
|
236
|
+
__decorateElement(_init, 5, "primaryColor", _primaryColor_dec, KalravWidget);
|
|
237
|
+
__decorateElement(_init, 5, "autoLoad", _autoLoad_dec, KalravWidget);
|
|
238
|
+
__decorateElement(_init, 5, "widgetUrl", _widgetUrl_dec, KalravWidget);
|
|
239
|
+
KalravWidget = __decorateElement(_init, 0, "KalravWidget", _KalravWidget_decorators, KalravWidget);
|
|
240
|
+
__runInitializers(_init, 1, KalravWidget);
|
|
241
|
+
|
|
242
|
+
// src/angular/KalravModule.ts
|
|
243
|
+
var _KalravModule_decorators, _init2;
|
|
244
|
+
_KalravModule_decorators = [NgModule({
|
|
245
|
+
imports: [CommonModule, KalravWidget],
|
|
246
|
+
exports: [KalravWidget]
|
|
247
|
+
})];
|
|
248
|
+
var KalravModule = class {
|
|
249
|
+
};
|
|
250
|
+
_init2 = __decoratorStart(null);
|
|
251
|
+
KalravModule = __decorateElement(_init2, 0, "KalravModule", _KalravModule_decorators, KalravModule);
|
|
252
|
+
__runInitializers(_init2, 1, KalravModule);
|
|
253
|
+
|
|
254
|
+
// src/angular/KalravService.ts
|
|
255
|
+
import { Injectable } from "@angular/core";
|
|
256
|
+
var _KalravService_decorators, _init3;
|
|
257
|
+
_KalravService_decorators = [Injectable({
|
|
258
|
+
providedIn: "root"
|
|
259
|
+
})];
|
|
260
|
+
var KalravService = class {
|
|
261
|
+
constructor() {
|
|
262
|
+
this.kalravInstance = null;
|
|
263
|
+
}
|
|
264
|
+
initialize(config) {
|
|
265
|
+
if (this.kalravInstance) {
|
|
266
|
+
this.kalravInstance.unload();
|
|
267
|
+
}
|
|
268
|
+
this.kalravInstance = createKalrav(config);
|
|
269
|
+
}
|
|
270
|
+
getWidget() {
|
|
271
|
+
return this.kalravInstance;
|
|
272
|
+
}
|
|
273
|
+
open() {
|
|
274
|
+
this.kalravInstance?.open();
|
|
275
|
+
}
|
|
276
|
+
close() {
|
|
277
|
+
this.kalravInstance?.close();
|
|
278
|
+
}
|
|
279
|
+
isLoaded() {
|
|
280
|
+
return this.kalravInstance?.isLoaded() ?? false;
|
|
281
|
+
}
|
|
282
|
+
unload() {
|
|
283
|
+
this.kalravInstance?.unload();
|
|
284
|
+
this.kalravInstance = null;
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
_init3 = __decoratorStart(null);
|
|
288
|
+
KalravService = __decorateElement(_init3, 0, "KalravService", _KalravService_decorators, KalravService);
|
|
289
|
+
__runInitializers(_init3, 1, KalravService);
|
|
290
|
+
export {
|
|
291
|
+
KalravModule,
|
|
292
|
+
KalravService,
|
|
293
|
+
KalravWidget
|
|
294
|
+
};
|
|
295
|
+
//# sourceMappingURL=angular.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/angular/KalravModule.ts","../src/angular/KalravWidget.ts","../src/core/kalrav.ts","../src/angular/KalravService.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { KalravWidget } from './KalravWidget';\r\n\r\n@NgModule({\r\n imports: [CommonModule, KalravWidget],\r\n exports: [KalravWidget]\r\n})\r\nexport class KalravModule {}\r\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\r\nimport { createKalrav } from '../core/kalrav';\r\nimport type { KalravWidget as KalravWidgetInstance } from '../core/types';\r\n\r\n@Component({\r\n selector: 'kalrav-widget',\r\n template: '<div style=\"display:none\"></div>',\r\n standalone: true\r\n})\r\nexport class KalravWidget implements OnInit, OnDestroy {\r\n @Input() apiKey!: string;\r\n @Input() agentId!: string;\r\n @Input() primaryColor: string = '#4F46E5';\r\n @Input() autoLoad: boolean = true;\r\n @Input() widgetUrl: string = 'https://widget.kalrav.ai/routeye-widget.js';\r\n\r\n private kalravInstance: KalravWidgetInstance | null = null;\r\n\r\n ngOnInit(): void {\r\n if (!this.apiKey || !this.agentId) {\r\n console.error('Kalrav: apiKey and agentId are required');\r\n return;\r\n }\r\n\r\n this.kalravInstance = createKalrav({\r\n apiKey: this.apiKey,\r\n agentId: this.agentId,\r\n primaryColor: this.primaryColor,\r\n autoLoad: this.autoLoad,\r\n widgetUrl: this.widgetUrl,\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.kalravInstance?.unload();\r\n this.kalravInstance = null;\r\n }\r\n}\r\n","import type { KalravConfig, KalravWidget } from './types';\r\n// @ts-ignore - ConfigManager is JS file\r\nimport { ConfigManager } from '../config-manager.js';\r\n\r\nconst DEFAULT_WIDGET_URL = 'https://widget.kalrav.ai/routeye-widget.js'; // Production widget CDN\r\nconst DEFAULT_PRIMARY_COLOR = '#4F46E5';\r\n\r\n/**\r\n * Kalrav AI Widget Core Implementation\r\n * \r\n * This is the core vanilla JS/TS implementation that works across all frameworks.\r\n * Enhanced version of the original kalravPureJs.js with TypeScript support.\r\n */\r\nexport class Kalrav implements KalravWidget {\r\n private loaded: boolean = false;\r\n private script: HTMLScriptElement | null = null;\r\n private config: Required<KalravConfig>;\r\n\r\n constructor(config: KalravConfig) {\r\n if (!config.apiKey) {\r\n throw new Error('Kalrav: apiKey is required');\r\n }\r\n if (!config.agentId) {\r\n throw new Error('Kalrav: agentId is required');\r\n }\r\n\r\n this.config = {\r\n apiKey: config.apiKey,\r\n agentId: config.agentId,\r\n primaryColor: config.primaryColor || DEFAULT_PRIMARY_COLOR,\r\n autoLoad: config.autoLoad !== false,\r\n widgetUrl: config.widgetUrl || DEFAULT_WIDGET_URL,\r\n };\r\n\r\n // Auto-load if enabled\r\n if (this.config.autoLoad && typeof window !== 'undefined') {\r\n this.load().catch((err) => {\r\n console.warn('Kalrav auto-load failed:', err);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Remove broken or duplicate scripts\r\n */\r\n private removeStaleScripts(): void {\r\n if (typeof document === 'undefined') return;\r\n\r\n document.querySelectorAll('script[src*=\"routeye-widget.js\"]').forEach((s) => {\r\n const hasAgent = !!s.getAttribute('data-agent-id');\r\n const hasKey = !!(s.getAttribute('data-x-key') || (s as HTMLElement).dataset.xKey);\r\n\r\n if (!hasAgent || !hasKey) {\r\n console.warn('Kalrav: Removing stale script:', s.outerHTML);\r\n s.remove();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Load the Kalrav widget\r\n */\r\n public async load(): Promise<void> {\r\n if (typeof window === 'undefined') {\r\n throw new Error('Kalrav: Cannot load in non-browser environment');\r\n }\r\n\r\n if (typeof document === 'undefined') {\r\n throw new Error('Kalrav: Document is not available');\r\n }\r\n\r\n // Check if already loaded\r\n if (this.loaded) {\r\n return Promise.resolve();\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n try {\r\n // 🎨 UI customization config will be fetched by widget.js itself\r\n // We just need to create a script tag with the agent credentials\r\n \r\n const script = document.createElement('script');\r\n \r\n // Use configured widget URL (can be CDN or local)\r\n script.src = this.config.widgetUrl;\r\n \r\n script.setAttribute('data-agent-id', this.config.agentId);\r\n script.setAttribute('data-x-key', this.config.apiKey);\r\n script.setAttribute('data-primary-color', this.config.primaryColor);\r\n script.async = false;\r\n\r\n script.onload = () => {\r\n this.script = script;\r\n this.loaded = true;\r\n console.log('✅ Kalrav widget loaded successfully');\r\n resolve();\r\n };\r\n\r\n script.onerror = (e) => {\r\n this.loaded = false;\r\n console.error('❌ Kalrav widget failed to load', e);\r\n reject(new Error('Failed to load Kalrav widget script'));\r\n };\r\n\r\n document.body.appendChild(script);\r\n this.script = script;\r\n } catch (err) {\r\n this.loaded = false;\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Unload the widget\r\n */\r\n public unload(): void {\r\n if (this.script) {\r\n this.script.remove();\r\n }\r\n\r\n this.script = null;\r\n this.loaded = false;\r\n\r\n // Optional cleanup\r\n if (typeof window !== 'undefined') {\r\n try {\r\n delete (window as any).routeyeWidget;\r\n } catch (_) {\r\n // Ignore errors\r\n }\r\n }\r\n\r\n console.log('Kalrav widget unloaded');\r\n }\r\n\r\n /**\r\n * Open the chat widget\r\n */\r\n public open(): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const w = window as any;\r\n if (w.routeyeWidget?.open) {\r\n return w.routeyeWidget.open();\r\n }\r\n\r\n w.dispatchEvent(new CustomEvent('kalrav:open'));\r\n }\r\n\r\n /**\r\n * Close the chat widget\r\n */\r\n public close(): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const w = window as any;\r\n if (w.routeyeWidget?.close) {\r\n return w.routeyeWidget.close();\r\n }\r\n\r\n w.dispatchEvent(new CustomEvent('kalrav:close'));\r\n }\r\n\r\n /**\r\n * Check if widget is loaded\r\n */\r\n public isLoaded(): boolean {\r\n return this.loaded;\r\n }\r\n\r\n /**\r\n * Call any widget method\r\n */\r\n public call(method: string, ...args: any[]): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const w = window as any;\r\n if (w.routeyeWidget?.[method]) {\r\n return w.routeyeWidget[method](...args);\r\n }\r\n\r\n w.dispatchEvent(\r\n new CustomEvent('kalrav:call', { detail: { method, args } })\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new Kalrav instance\r\n */\r\nexport function createKalrav(config: KalravConfig): KalravWidget {\r\n return new Kalrav(config);\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { createKalrav } from '../core/kalrav';\r\nimport type { KalravConfig, KalravWidget } from '../core/types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class KalravService {\r\n private kalravInstance: KalravWidget | null = null;\r\n\r\n initialize(config: KalravConfig): void {\r\n if (this.kalravInstance) {\r\n this.kalravInstance.unload();\r\n }\r\n this.kalravInstance = createKalrav(config);\r\n }\r\n\r\n getWidget(): KalravWidget | null {\r\n return this.kalravInstance;\r\n }\r\n\r\n open(): void {\r\n this.kalravInstance?.open();\r\n }\r\n\r\n close(): void {\r\n this.kalravInstance?.close();\r\n }\r\n\r\n isLoaded(): boolean {\r\n return this.kalravInstance?.isLoaded() ?? false;\r\n }\r\n\r\n unload(): void {\r\n this.kalravInstance?.unload();\r\n this.kalravInstance = null;\r\n }\r\n}\r\n"],"mappings":"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","names":["_init","_init"]}
|