@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.
@@ -0,0 +1,28 @@
1
+ interface KalravConfig {
2
+ /** Your Kalrav API key */
3
+ apiKey: string;
4
+ /** Your agent/bot ID */
5
+ agentId: string;
6
+ /** Primary color for the widget (default: #4F46E5) */
7
+ primaryColor?: string;
8
+ /** Auto-load widget on initialization (default: true) */
9
+ autoLoad?: boolean;
10
+ /** Custom widget script URL (default: https://widget.kalrav.ai/routeye-widget.js) */
11
+ widgetUrl?: string;
12
+ }
13
+ interface KalravWidget {
14
+ /** Load the widget script */
15
+ load(): Promise<void>;
16
+ /** Unload the widget from the page */
17
+ unload(): void;
18
+ /** Open the chat widget */
19
+ open(): void;
20
+ /** Close the chat widget */
21
+ close(): void;
22
+ /** Check if the widget is loaded */
23
+ isLoaded(): boolean;
24
+ /** Call any widget method */
25
+ call(method: string, ...args: any[]): void;
26
+ }
27
+
28
+ export type { KalravWidget as K, KalravConfig as a };
@@ -0,0 +1,28 @@
1
+ interface KalravConfig {
2
+ /** Your Kalrav API key */
3
+ apiKey: string;
4
+ /** Your agent/bot ID */
5
+ agentId: string;
6
+ /** Primary color for the widget (default: #4F46E5) */
7
+ primaryColor?: string;
8
+ /** Auto-load widget on initialization (default: true) */
9
+ autoLoad?: boolean;
10
+ /** Custom widget script URL (default: https://widget.kalrav.ai/routeye-widget.js) */
11
+ widgetUrl?: string;
12
+ }
13
+ interface KalravWidget {
14
+ /** Load the widget script */
15
+ load(): Promise<void>;
16
+ /** Unload the widget from the page */
17
+ unload(): void;
18
+ /** Open the chat widget */
19
+ open(): void;
20
+ /** Close the chat widget */
21
+ close(): void;
22
+ /** Check if the widget is loaded */
23
+ isLoaded(): boolean;
24
+ /** Call any widget method */
25
+ call(method: string, ...args: any[]): void;
26
+ }
27
+
28
+ export type { KalravWidget as K, KalravConfig as a };
package/dist/vue.d.mts ADDED
@@ -0,0 +1,57 @@
1
+ import * as vue from 'vue';
2
+ import { PropType, Ref } from 'vue';
3
+ import { a as KalravConfig, K as KalravWidget$1 } from './types-coZ9jHpG.mjs';
4
+
5
+ declare const KalravWidget: vue.DefineComponent<vue.ExtractPropTypes<{
6
+ apiKey: {
7
+ type: PropType<string>;
8
+ required: true;
9
+ };
10
+ agentId: {
11
+ type: PropType<string>;
12
+ required: true;
13
+ };
14
+ primaryColor: {
15
+ type: PropType<string>;
16
+ default: string;
17
+ };
18
+ autoLoad: {
19
+ type: PropType<boolean>;
20
+ default: boolean;
21
+ };
22
+ widgetUrl: {
23
+ type: PropType<string>;
24
+ default: string;
25
+ };
26
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
27
+ [key: string]: any;
28
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
29
+ apiKey: {
30
+ type: PropType<string>;
31
+ required: true;
32
+ };
33
+ agentId: {
34
+ type: PropType<string>;
35
+ required: true;
36
+ };
37
+ primaryColor: {
38
+ type: PropType<string>;
39
+ default: string;
40
+ };
41
+ autoLoad: {
42
+ type: PropType<boolean>;
43
+ default: boolean;
44
+ };
45
+ widgetUrl: {
46
+ type: PropType<string>;
47
+ default: string;
48
+ };
49
+ }>> & Readonly<{}>, {
50
+ primaryColor: string;
51
+ autoLoad: boolean;
52
+ widgetUrl: string;
53
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
54
+
55
+ declare function useKalrav(config: KalravConfig): Ref<KalravWidget$1 | null>;
56
+
57
+ export { KalravConfig, KalravWidget, KalravWidget$1 as KalravWidgetInstance, useKalrav };
package/dist/vue.d.ts ADDED
@@ -0,0 +1,57 @@
1
+ import * as vue from 'vue';
2
+ import { PropType, Ref } from 'vue';
3
+ import { a as KalravConfig, K as KalravWidget$1 } from './types-coZ9jHpG.js';
4
+
5
+ declare const KalravWidget: vue.DefineComponent<vue.ExtractPropTypes<{
6
+ apiKey: {
7
+ type: PropType<string>;
8
+ required: true;
9
+ };
10
+ agentId: {
11
+ type: PropType<string>;
12
+ required: true;
13
+ };
14
+ primaryColor: {
15
+ type: PropType<string>;
16
+ default: string;
17
+ };
18
+ autoLoad: {
19
+ type: PropType<boolean>;
20
+ default: boolean;
21
+ };
22
+ widgetUrl: {
23
+ type: PropType<string>;
24
+ default: string;
25
+ };
26
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
27
+ [key: string]: any;
28
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
29
+ apiKey: {
30
+ type: PropType<string>;
31
+ required: true;
32
+ };
33
+ agentId: {
34
+ type: PropType<string>;
35
+ required: true;
36
+ };
37
+ primaryColor: {
38
+ type: PropType<string>;
39
+ default: string;
40
+ };
41
+ autoLoad: {
42
+ type: PropType<boolean>;
43
+ default: boolean;
44
+ };
45
+ widgetUrl: {
46
+ type: PropType<string>;
47
+ default: string;
48
+ };
49
+ }>> & Readonly<{}>, {
50
+ primaryColor: string;
51
+ autoLoad: boolean;
52
+ widgetUrl: string;
53
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
54
+
55
+ declare function useKalrav(config: KalravConfig): Ref<KalravWidget$1 | null>;
56
+
57
+ export { KalravConfig, KalravWidget, KalravWidget$1 as KalravWidgetInstance, useKalrav };
package/dist/vue.js ADDED
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/vue/index.ts
21
+ var vue_exports = {};
22
+ __export(vue_exports, {
23
+ KalravWidget: () => KalravWidget,
24
+ useKalrav: () => useKalrav
25
+ });
26
+ module.exports = __toCommonJS(vue_exports);
27
+
28
+ // src/vue/KalravWidget.ts
29
+ var import_vue = require("vue");
30
+
31
+ // src/core/kalrav.ts
32
+ var DEFAULT_WIDGET_URL = "https://widget.kalrav.ai/routeye-widget.js";
33
+ var DEFAULT_PRIMARY_COLOR = "#4F46E5";
34
+ var Kalrav = class {
35
+ constructor(config) {
36
+ this.loaded = false;
37
+ this.script = null;
38
+ if (!config.apiKey) {
39
+ throw new Error("Kalrav: apiKey is required");
40
+ }
41
+ if (!config.agentId) {
42
+ throw new Error("Kalrav: agentId is required");
43
+ }
44
+ this.config = {
45
+ apiKey: config.apiKey,
46
+ agentId: config.agentId,
47
+ primaryColor: config.primaryColor || DEFAULT_PRIMARY_COLOR,
48
+ autoLoad: config.autoLoad !== false,
49
+ widgetUrl: config.widgetUrl || DEFAULT_WIDGET_URL
50
+ };
51
+ if (this.config.autoLoad && typeof window !== "undefined") {
52
+ this.load().catch((err) => {
53
+ console.warn("Kalrav auto-load failed:", err);
54
+ });
55
+ }
56
+ }
57
+ /**
58
+ * Remove broken or duplicate scripts
59
+ */
60
+ removeStaleScripts() {
61
+ if (typeof document === "undefined") return;
62
+ document.querySelectorAll('script[src*="routeye-widget.js"]').forEach((s) => {
63
+ const hasAgent = !!s.getAttribute("data-agent-id");
64
+ const hasKey = !!(s.getAttribute("data-x-key") || s.dataset.xKey);
65
+ if (!hasAgent || !hasKey) {
66
+ console.warn("Kalrav: Removing stale script:", s.outerHTML);
67
+ s.remove();
68
+ }
69
+ });
70
+ }
71
+ /**
72
+ * Load the Kalrav widget
73
+ */
74
+ async load() {
75
+ if (typeof window === "undefined") {
76
+ throw new Error("Kalrav: Cannot load in non-browser environment");
77
+ }
78
+ if (typeof document === "undefined") {
79
+ throw new Error("Kalrav: Document is not available");
80
+ }
81
+ if (this.loaded) {
82
+ return Promise.resolve();
83
+ }
84
+ return new Promise((resolve, reject) => {
85
+ try {
86
+ const script = document.createElement("script");
87
+ script.src = this.config.widgetUrl;
88
+ script.setAttribute("data-agent-id", this.config.agentId);
89
+ script.setAttribute("data-x-key", this.config.apiKey);
90
+ script.setAttribute("data-primary-color", this.config.primaryColor);
91
+ script.async = false;
92
+ script.onload = () => {
93
+ this.script = script;
94
+ this.loaded = true;
95
+ console.log("\u2705 Kalrav widget loaded successfully");
96
+ resolve();
97
+ };
98
+ script.onerror = (e) => {
99
+ this.loaded = false;
100
+ console.error("\u274C Kalrav widget failed to load", e);
101
+ reject(new Error("Failed to load Kalrav widget script"));
102
+ };
103
+ document.body.appendChild(script);
104
+ this.script = script;
105
+ } catch (err) {
106
+ this.loaded = false;
107
+ reject(err);
108
+ }
109
+ });
110
+ }
111
+ /**
112
+ * Unload the widget
113
+ */
114
+ unload() {
115
+ if (this.script) {
116
+ this.script.remove();
117
+ }
118
+ this.script = null;
119
+ this.loaded = false;
120
+ if (typeof window !== "undefined") {
121
+ try {
122
+ delete window.routeyeWidget;
123
+ } catch (_) {
124
+ }
125
+ }
126
+ console.log("Kalrav widget unloaded");
127
+ }
128
+ /**
129
+ * Open the chat widget
130
+ */
131
+ open() {
132
+ if (typeof window === "undefined") return;
133
+ const w = window;
134
+ if (w.routeyeWidget?.open) {
135
+ return w.routeyeWidget.open();
136
+ }
137
+ w.dispatchEvent(new CustomEvent("kalrav:open"));
138
+ }
139
+ /**
140
+ * Close the chat widget
141
+ */
142
+ close() {
143
+ if (typeof window === "undefined") return;
144
+ const w = window;
145
+ if (w.routeyeWidget?.close) {
146
+ return w.routeyeWidget.close();
147
+ }
148
+ w.dispatchEvent(new CustomEvent("kalrav:close"));
149
+ }
150
+ /**
151
+ * Check if widget is loaded
152
+ */
153
+ isLoaded() {
154
+ return this.loaded;
155
+ }
156
+ /**
157
+ * Call any widget method
158
+ */
159
+ call(method, ...args) {
160
+ if (typeof window === "undefined") return;
161
+ const w = window;
162
+ if (w.routeyeWidget?.[method]) {
163
+ return w.routeyeWidget[method](...args);
164
+ }
165
+ w.dispatchEvent(
166
+ new CustomEvent("kalrav:call", { detail: { method, args } })
167
+ );
168
+ }
169
+ };
170
+ function createKalrav(config) {
171
+ return new Kalrav(config);
172
+ }
173
+
174
+ // src/vue/KalravWidget.ts
175
+ var KalravWidget = (0, import_vue.defineComponent)({
176
+ name: "KalravWidget",
177
+ props: {
178
+ apiKey: {
179
+ type: String,
180
+ required: true
181
+ },
182
+ agentId: {
183
+ type: String,
184
+ required: true
185
+ },
186
+ primaryColor: {
187
+ type: String,
188
+ default: "#4F46E5"
189
+ },
190
+ autoLoad: {
191
+ type: Boolean,
192
+ default: true
193
+ },
194
+ widgetUrl: {
195
+ type: String,
196
+ default: "https://widget.kalrav.ai/routeye-widget.js"
197
+ }
198
+ },
199
+ setup(props) {
200
+ const kalravInstance = (0, import_vue.ref)(null);
201
+ (0, import_vue.onMounted)(() => {
202
+ const config = {
203
+ apiKey: props.apiKey,
204
+ agentId: props.agentId,
205
+ primaryColor: props.primaryColor,
206
+ autoLoad: props.autoLoad,
207
+ widgetUrl: props.widgetUrl
208
+ };
209
+ kalravInstance.value = createKalrav(config);
210
+ });
211
+ (0, import_vue.onUnmounted)(() => {
212
+ kalravInstance.value?.unload();
213
+ kalravInstance.value = null;
214
+ });
215
+ return () => (0, import_vue.h)("div", { style: { display: "none" } });
216
+ }
217
+ });
218
+
219
+ // src/vue/useKalrav.ts
220
+ var import_vue2 = require("vue");
221
+ function useKalrav(config) {
222
+ const kalravInstance = (0, import_vue2.ref)(null);
223
+ (0, import_vue2.onMounted)(() => {
224
+ kalravInstance.value = createKalrav(config);
225
+ });
226
+ (0, import_vue2.onUnmounted)(() => {
227
+ kalravInstance.value?.unload();
228
+ kalravInstance.value = null;
229
+ });
230
+ return kalravInstance;
231
+ }
232
+ // Annotate the CommonJS export names for ESM import in node:
233
+ 0 && (module.exports = {
234
+ KalravWidget,
235
+ useKalrav
236
+ });
237
+ //# sourceMappingURL=vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vue/index.ts","../src/vue/KalravWidget.ts","../src/core/kalrav.ts","../src/vue/useKalrav.ts"],"sourcesContent":["export { KalravWidget } from './KalravWidget';\r\nexport { useKalrav } from './useKalrav';\r\nexport type { KalravConfig, KalravWidget as KalravWidgetInstance } from '../core/types';\r\n","import {\r\n defineComponent,\r\n onMounted,\r\n onUnmounted,\r\n ref,\r\n h,\r\n type PropType,\r\n} from 'vue';\r\nimport { createKalrav } from '../core/kalrav';\r\nimport type { KalravConfig, KalravWidget as KalravWidgetInstance } from '../core/types';\r\n\r\nexport const KalravWidget = defineComponent({\r\n name: 'KalravWidget',\r\n props: {\r\n apiKey: {\r\n type: String as PropType<string>,\r\n required: true,\r\n },\r\n agentId: {\r\n type: String as PropType<string>,\r\n required: true,\r\n },\r\n primaryColor: {\r\n type: String as PropType<string>,\r\n default: '#4F46E5',\r\n },\r\n autoLoad: {\r\n type: Boolean as PropType<boolean>,\r\n default: true,\r\n },\r\n widgetUrl: {\r\n type: String as PropType<string>,\r\n default: 'https://widget.kalrav.ai/routeye-widget.js',\r\n },\r\n },\r\n setup(props) {\r\n const kalravInstance = ref<KalravWidgetInstance | null>(null);\r\n\r\n onMounted(() => {\r\n const config: KalravConfig = {\r\n apiKey: props.apiKey,\r\n agentId: props.agentId,\r\n primaryColor: props.primaryColor,\r\n autoLoad: props.autoLoad,\r\n widgetUrl: props.widgetUrl,\r\n };\r\n\r\n kalravInstance.value = createKalrav(config);\r\n });\r\n\r\n onUnmounted(() => {\r\n kalravInstance.value?.unload();\r\n kalravInstance.value = null;\r\n });\r\n\r\n return () => h('div', { style: { display: 'none' } });\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 { onMounted, onUnmounted, ref, type Ref } from 'vue';\r\nimport { createKalrav } from '../core/kalrav';\r\nimport type { KalravConfig, KalravWidget } from '../core/types';\r\n\r\nexport function useKalrav(config: KalravConfig): Ref<KalravWidget | null> {\r\n const kalravInstance = ref<KalravWidget | null>(null);\r\n\r\n onMounted(() => {\r\n kalravInstance.value = createKalrav(config);\r\n });\r\n\r\n onUnmounted(() => {\r\n kalravInstance.value?.unload();\r\n kalravInstance.value = null;\r\n });\r\n\r\n return kalravInstance;\r\n}\r\n"],"mappings":"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","names":["import_vue"]}
package/dist/vue.mjs ADDED
@@ -0,0 +1,215 @@
1
+ // src/vue/KalravWidget.ts
2
+ import {
3
+ defineComponent,
4
+ onMounted,
5
+ onUnmounted,
6
+ ref,
7
+ h
8
+ } from "vue";
9
+
10
+ // src/core/kalrav.ts
11
+ var DEFAULT_WIDGET_URL = "https://widget.kalrav.ai/routeye-widget.js";
12
+ var DEFAULT_PRIMARY_COLOR = "#4F46E5";
13
+ var Kalrav = class {
14
+ constructor(config) {
15
+ this.loaded = false;
16
+ this.script = null;
17
+ if (!config.apiKey) {
18
+ throw new Error("Kalrav: apiKey is required");
19
+ }
20
+ if (!config.agentId) {
21
+ throw new Error("Kalrav: agentId is required");
22
+ }
23
+ this.config = {
24
+ apiKey: config.apiKey,
25
+ agentId: config.agentId,
26
+ primaryColor: config.primaryColor || DEFAULT_PRIMARY_COLOR,
27
+ autoLoad: config.autoLoad !== false,
28
+ widgetUrl: config.widgetUrl || DEFAULT_WIDGET_URL
29
+ };
30
+ if (this.config.autoLoad && typeof window !== "undefined") {
31
+ this.load().catch((err) => {
32
+ console.warn("Kalrav auto-load failed:", err);
33
+ });
34
+ }
35
+ }
36
+ /**
37
+ * Remove broken or duplicate scripts
38
+ */
39
+ removeStaleScripts() {
40
+ if (typeof document === "undefined") return;
41
+ document.querySelectorAll('script[src*="routeye-widget.js"]').forEach((s) => {
42
+ const hasAgent = !!s.getAttribute("data-agent-id");
43
+ const hasKey = !!(s.getAttribute("data-x-key") || s.dataset.xKey);
44
+ if (!hasAgent || !hasKey) {
45
+ console.warn("Kalrav: Removing stale script:", s.outerHTML);
46
+ s.remove();
47
+ }
48
+ });
49
+ }
50
+ /**
51
+ * Load the Kalrav widget
52
+ */
53
+ async load() {
54
+ if (typeof window === "undefined") {
55
+ throw new Error("Kalrav: Cannot load in non-browser environment");
56
+ }
57
+ if (typeof document === "undefined") {
58
+ throw new Error("Kalrav: Document is not available");
59
+ }
60
+ if (this.loaded) {
61
+ return Promise.resolve();
62
+ }
63
+ return new Promise((resolve, reject) => {
64
+ try {
65
+ const script = document.createElement("script");
66
+ script.src = this.config.widgetUrl;
67
+ script.setAttribute("data-agent-id", this.config.agentId);
68
+ script.setAttribute("data-x-key", this.config.apiKey);
69
+ script.setAttribute("data-primary-color", this.config.primaryColor);
70
+ script.async = false;
71
+ script.onload = () => {
72
+ this.script = script;
73
+ this.loaded = true;
74
+ console.log("\u2705 Kalrav widget loaded successfully");
75
+ resolve();
76
+ };
77
+ script.onerror = (e) => {
78
+ this.loaded = false;
79
+ console.error("\u274C Kalrav widget failed to load", e);
80
+ reject(new Error("Failed to load Kalrav widget script"));
81
+ };
82
+ document.body.appendChild(script);
83
+ this.script = script;
84
+ } catch (err) {
85
+ this.loaded = false;
86
+ reject(err);
87
+ }
88
+ });
89
+ }
90
+ /**
91
+ * Unload the widget
92
+ */
93
+ unload() {
94
+ if (this.script) {
95
+ this.script.remove();
96
+ }
97
+ this.script = null;
98
+ this.loaded = false;
99
+ if (typeof window !== "undefined") {
100
+ try {
101
+ delete window.routeyeWidget;
102
+ } catch (_) {
103
+ }
104
+ }
105
+ console.log("Kalrav widget unloaded");
106
+ }
107
+ /**
108
+ * Open the chat widget
109
+ */
110
+ open() {
111
+ if (typeof window === "undefined") return;
112
+ const w = window;
113
+ if (w.routeyeWidget?.open) {
114
+ return w.routeyeWidget.open();
115
+ }
116
+ w.dispatchEvent(new CustomEvent("kalrav:open"));
117
+ }
118
+ /**
119
+ * Close the chat widget
120
+ */
121
+ close() {
122
+ if (typeof window === "undefined") return;
123
+ const w = window;
124
+ if (w.routeyeWidget?.close) {
125
+ return w.routeyeWidget.close();
126
+ }
127
+ w.dispatchEvent(new CustomEvent("kalrav:close"));
128
+ }
129
+ /**
130
+ * Check if widget is loaded
131
+ */
132
+ isLoaded() {
133
+ return this.loaded;
134
+ }
135
+ /**
136
+ * Call any widget method
137
+ */
138
+ call(method, ...args) {
139
+ if (typeof window === "undefined") return;
140
+ const w = window;
141
+ if (w.routeyeWidget?.[method]) {
142
+ return w.routeyeWidget[method](...args);
143
+ }
144
+ w.dispatchEvent(
145
+ new CustomEvent("kalrav:call", { detail: { method, args } })
146
+ );
147
+ }
148
+ };
149
+ function createKalrav(config) {
150
+ return new Kalrav(config);
151
+ }
152
+
153
+ // src/vue/KalravWidget.ts
154
+ var KalravWidget = defineComponent({
155
+ name: "KalravWidget",
156
+ props: {
157
+ apiKey: {
158
+ type: String,
159
+ required: true
160
+ },
161
+ agentId: {
162
+ type: String,
163
+ required: true
164
+ },
165
+ primaryColor: {
166
+ type: String,
167
+ default: "#4F46E5"
168
+ },
169
+ autoLoad: {
170
+ type: Boolean,
171
+ default: true
172
+ },
173
+ widgetUrl: {
174
+ type: String,
175
+ default: "https://widget.kalrav.ai/routeye-widget.js"
176
+ }
177
+ },
178
+ setup(props) {
179
+ const kalravInstance = ref(null);
180
+ onMounted(() => {
181
+ const config = {
182
+ apiKey: props.apiKey,
183
+ agentId: props.agentId,
184
+ primaryColor: props.primaryColor,
185
+ autoLoad: props.autoLoad,
186
+ widgetUrl: props.widgetUrl
187
+ };
188
+ kalravInstance.value = createKalrav(config);
189
+ });
190
+ onUnmounted(() => {
191
+ kalravInstance.value?.unload();
192
+ kalravInstance.value = null;
193
+ });
194
+ return () => h("div", { style: { display: "none" } });
195
+ }
196
+ });
197
+
198
+ // src/vue/useKalrav.ts
199
+ import { onMounted as onMounted2, onUnmounted as onUnmounted2, ref as ref2 } from "vue";
200
+ function useKalrav(config) {
201
+ const kalravInstance = ref2(null);
202
+ onMounted2(() => {
203
+ kalravInstance.value = createKalrav(config);
204
+ });
205
+ onUnmounted2(() => {
206
+ kalravInstance.value?.unload();
207
+ kalravInstance.value = null;
208
+ });
209
+ return kalravInstance;
210
+ }
211
+ export {
212
+ KalravWidget,
213
+ useKalrav
214
+ };
215
+ //# sourceMappingURL=vue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/vue/KalravWidget.ts","../src/core/kalrav.ts","../src/vue/useKalrav.ts"],"sourcesContent":["import {\r\n defineComponent,\r\n onMounted,\r\n onUnmounted,\r\n ref,\r\n h,\r\n type PropType,\r\n} from 'vue';\r\nimport { createKalrav } from '../core/kalrav';\r\nimport type { KalravConfig, KalravWidget as KalravWidgetInstance } from '../core/types';\r\n\r\nexport const KalravWidget = defineComponent({\r\n name: 'KalravWidget',\r\n props: {\r\n apiKey: {\r\n type: String as PropType<string>,\r\n required: true,\r\n },\r\n agentId: {\r\n type: String as PropType<string>,\r\n required: true,\r\n },\r\n primaryColor: {\r\n type: String as PropType<string>,\r\n default: '#4F46E5',\r\n },\r\n autoLoad: {\r\n type: Boolean as PropType<boolean>,\r\n default: true,\r\n },\r\n widgetUrl: {\r\n type: String as PropType<string>,\r\n default: 'https://widget.kalrav.ai/routeye-widget.js',\r\n },\r\n },\r\n setup(props) {\r\n const kalravInstance = ref<KalravWidgetInstance | null>(null);\r\n\r\n onMounted(() => {\r\n const config: KalravConfig = {\r\n apiKey: props.apiKey,\r\n agentId: props.agentId,\r\n primaryColor: props.primaryColor,\r\n autoLoad: props.autoLoad,\r\n widgetUrl: props.widgetUrl,\r\n };\r\n\r\n kalravInstance.value = createKalrav(config);\r\n });\r\n\r\n onUnmounted(() => {\r\n kalravInstance.value?.unload();\r\n kalravInstance.value = null;\r\n });\r\n\r\n return () => h('div', { style: { display: 'none' } });\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 { onMounted, onUnmounted, ref, type Ref } from 'vue';\r\nimport { createKalrav } from '../core/kalrav';\r\nimport type { KalravConfig, KalravWidget } from '../core/types';\r\n\r\nexport function useKalrav(config: KalravConfig): Ref<KalravWidget | null> {\r\n const kalravInstance = ref<KalravWidget | null>(null);\r\n\r\n onMounted(() => {\r\n kalravInstance.value = createKalrav(config);\r\n });\r\n\r\n onUnmounted(() => {\r\n kalravInstance.value?.unload();\r\n kalravInstance.value = null;\r\n });\r\n\r\n return kalravInstance;\r\n}\r\n"],"mappings":"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","names":["onMounted","onUnmounted","ref","ref","onMounted","onUnmounted"]}