@lorikeetai/react-native-sdk 1.1.0 → 1.2.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/dist/index.cjs CHANGED
@@ -1,12 +1,16 @@
1
1
  'use strict';
2
2
 
3
3
  var react = require('react');
4
- var lucideReactNative = require('lucide-react-native');
5
4
  var reactNative = require('react-native');
6
5
  var reactNativeSafeAreaContext = require('react-native-safe-area-context');
7
6
  var reactNativeWebview = require('react-native-webview');
7
+ var Svg = require('react-native-svg');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
9
 
10
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
+
12
+ var Svg__default = /*#__PURE__*/_interopDefault(Svg);
13
+
10
14
  var __defProp = Object.defineProperty;
11
15
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
16
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -51,6 +55,48 @@ var LorikeetClient = class {
51
55
  }
52
56
  }
53
57
  };
58
+ var MessageCirclePlusIcon = ({
59
+ size = 24,
60
+ color = "currentColor",
61
+ strokeWidth = 2
62
+ }) => {
63
+ return /* @__PURE__ */ jsxRuntime.jsxs(Svg__default.default, { fill: "none", height: size, viewBox: "0 0 24 24", width: size, children: [
64
+ /* @__PURE__ */ jsxRuntime.jsx(
65
+ Svg.Path,
66
+ {
67
+ d: "M7.9 20A9 9 0 1 0 4 16.1L2 22Z",
68
+ stroke: color,
69
+ strokeLinecap: "round",
70
+ strokeLinejoin: "round",
71
+ strokeWidth
72
+ }
73
+ ),
74
+ /* @__PURE__ */ jsxRuntime.jsx(
75
+ Svg.Line,
76
+ {
77
+ stroke: color,
78
+ strokeLinecap: "round",
79
+ strokeWidth,
80
+ x1: "12",
81
+ x2: "12",
82
+ y1: "8",
83
+ y2: "16"
84
+ }
85
+ ),
86
+ /* @__PURE__ */ jsxRuntime.jsx(
87
+ Svg.Line,
88
+ {
89
+ stroke: color,
90
+ strokeLinecap: "round",
91
+ strokeWidth,
92
+ x1: "8",
93
+ x2: "16",
94
+ y1: "12",
95
+ y2: "12"
96
+ }
97
+ )
98
+ ] });
99
+ };
54
100
  var stylesheet = reactNative.StyleSheet.create({
55
101
  root: { flex: 1, backgroundColor: "#fff" },
56
102
  container: {
@@ -105,7 +151,7 @@ LorikeetWidgetWebView.displayName = "LorikeetWidgetWebView";
105
151
  var LorikeetWidgetHeader = ({
106
152
  title,
107
153
  style,
108
- icon = /* @__PURE__ */ jsxRuntime.jsx(lucideReactNative.MessageCirclePlusIcon, { size: 16 }),
154
+ icon = /* @__PURE__ */ jsxRuntime.jsx(MessageCirclePlusIcon, { size: 16 }),
109
155
  onIconPress
110
156
  }) => {
111
157
  return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: stylesheet.header, children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/widget.tsx"],"names":["StyleSheet","forwardRef","jsx","WebView","Linking","MessageCirclePlusIcon","jsxs","View","Text","TouchableOpacity","useState","useRef","useEffect","lorikeetClient","SafeAreaView"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Customisations } from '@lorikeetai/web-sdk/types'\n\nimport type { LorikeetInitOptions } from './types'\n\nexport class LorikeetClient {\n baseUrl: string = 'https://chat.lorikeetcx.ai' // Fallback URL\n customisations: Customisations | null = null\n publicKey: string\n\n constructor({ customisations, api_base, public_key }: LorikeetInitOptions) {\n if (api_base) {\n this.baseUrl = api_base\n }\n this.publicKey = public_key\n\n if (customisations) {\n this.customisations = customisations\n }\n }\n\n getWebviewUrl = ({\n customer_email,\n customer_name,\n token,\n ticket_id,\n }: {\n customer_email?: string\n customer_name?: string\n token: string\n ticket_id?: string\n }) => {\n const url = new URL(this.baseUrl)\n\n url.pathname = ticket_id\n ? `/tickets/${this.publicKey}/${ticket_id}`\n : '/widget'\n url.searchParams.append('public_key', this.publicKey)\n\n if (customer_email) {\n url.searchParams.append('customer_email', customer_email)\n }\n if (customer_name) {\n url.searchParams.append('customer_name', customer_name)\n }\n\n url.searchParams.append('token', token)\n\n if (this.customisations) {\n url.searchParams.append(\n 'customisations',\n btoa(JSON.stringify(this.customisations)),\n )\n }\n\n return url.toString()\n }\n}\n","import { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { MessageCirclePlusIcon } from 'lucide-react-native'\nimport { Linking, StyleSheet, Text, TouchableOpacity, View } from 'react-native'\nimport { SafeAreaView } from 'react-native-safe-area-context'\nimport { WebView } from 'react-native-webview'\n\nimport { LorikeetClient } from './client'\nimport type {\n LorikeetWidgetHeaderProps,\n LorikeetWidgetViewProps,\n LorikeetWidgetWebViewProps,\n} from './types'\n\nconst stylesheet = StyleSheet.create({\n root: { flex: 1, backgroundColor: '#fff' },\n container: {\n flex: 1,\n borderRadius: 8,\n overflow: 'hidden',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 3,\n },\n header: {\n padding: 16,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n headerIcon: {\n width: 24,\n },\n headerText: {\n textAlign: 'center',\n fontSize: 16,\n },\n webView: {\n flex: 1,\n },\n})\n\nexport const LorikeetWidgetWebView = forwardRef<\n WebView,\n LorikeetWidgetWebViewProps\n>(({ uri, baseUrl = 'https://chat.lorikeetcx.ai', webviewProps = {} }, ref) => {\n return (\n <WebView\n {...webviewProps}\n onNavigationStateChange={(navState) => {\n if (navState.url.includes(baseUrl)) {\n return false\n } else {\n void Linking.openURL(navState.url)\n return false\n }\n }}\n ref={ref}\n source={{\n uri,\n }}\n style={stylesheet.webView}\n />\n )\n})\nLorikeetWidgetWebView.displayName = 'LorikeetWidgetWebView'\n\nexport const LorikeetWidgetHeader = ({\n title,\n style,\n icon = <MessageCirclePlusIcon size={16} />,\n onIconPress,\n}: LorikeetWidgetHeaderProps) => {\n return (\n <View style={stylesheet.header}>\n <View style={stylesheet.headerIcon} />\n <Text style={[stylesheet.headerText, style]}>{title}</Text>\n <TouchableOpacity onPress={onIconPress} style={stylesheet.headerIcon}>\n {icon}\n </TouchableOpacity>\n </View>\n )\n}\n\nexport function LorikeetWidgetView({\n publicKey,\n baseUrl,\n authToken,\n customisations,\n styles,\n onWebViewMessage,\n}: LorikeetWidgetViewProps) {\n const [lorikeetClient, setLorikeetClient] = useState<LorikeetClient | null>(\n null,\n )\n const [uri, setUri] = useState<string | null>(null)\n const [timestamp, setTimestamp] = useState<number>(Date.now())\n const webViewRef = useRef<WebView>(null)\n\n useEffect(() => {\n const lorikeetClient = new LorikeetClient({\n public_key: publicKey,\n api_base: baseUrl,\n customisations: {\n ...customisations,\n hideHeader:\n customisations?.hideHeader === undefined\n ? true\n : customisations.hideHeader,\n },\n })\n setLorikeetClient(lorikeetClient)\n setUri(\n lorikeetClient.getWebviewUrl({\n token: authToken,\n }),\n )\n }, [publicKey, baseUrl])\n\n if (!lorikeetClient || !uri) {\n return null\n }\n\n return (\n <SafeAreaView edges={['top', 'left', 'right']} style={stylesheet.root}>\n <View style={stylesheet.container}>\n <LorikeetWidgetHeader\n onIconPress={() => {\n setTimestamp(Date.now())\n }}\n style={styles?.header}\n title={customisations?.title ?? 'Lorikeet AI Agent'}\n />\n <LorikeetWidgetWebView\n baseUrl={lorikeetClient.baseUrl}\n key={timestamp}\n ref={webViewRef}\n uri={uri}\n webviewProps={{\n onMessage: onWebViewMessage,\n allowsInlineMediaPlayback: true,\n mediaPlaybackRequiresUserAction: false,\n scalesPageToFit: true,\n startInLoadingState: true,\n style: stylesheet.webView,\n }}\n />\n </View>\n </SafeAreaView>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/message-circle-plus-icon.tsx","../src/widget.tsx"],"names":["jsxs","Svg","jsx","Path","Line","StyleSheet","forwardRef","WebView","Linking","View","Text","TouchableOpacity","useState","useRef","useEffect","lorikeetClient","SafeAreaView"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Customisations } from '@lorikeetai/web-sdk/types'\n\nimport type { LorikeetInitOptions } from './types'\n\nexport class LorikeetClient {\n baseUrl: string = 'https://chat.lorikeetcx.ai' // Fallback URL\n customisations: Customisations | null = null\n publicKey: string\n\n constructor({ customisations, api_base, public_key }: LorikeetInitOptions) {\n if (api_base) {\n this.baseUrl = api_base\n }\n this.publicKey = public_key\n\n if (customisations) {\n this.customisations = customisations\n }\n }\n\n getWebviewUrl = ({\n customer_email,\n customer_name,\n token,\n ticket_id,\n }: {\n customer_email?: string\n customer_name?: string\n token: string\n ticket_id?: string\n }) => {\n const url = new URL(this.baseUrl)\n\n url.pathname = ticket_id\n ? `/tickets/${this.publicKey}/${ticket_id}`\n : '/widget'\n url.searchParams.append('public_key', this.publicKey)\n\n if (customer_email) {\n url.searchParams.append('customer_email', customer_email)\n }\n if (customer_name) {\n url.searchParams.append('customer_name', customer_name)\n }\n\n url.searchParams.append('token', token)\n\n if (this.customisations) {\n url.searchParams.append(\n 'customisations',\n btoa(JSON.stringify(this.customisations)),\n )\n }\n\n return url.toString()\n }\n}\n","import Svg, { Line, Path } from 'react-native-svg'\n\ninterface MessageCirclePlusIconProps {\n color?: string\n size?: number\n strokeWidth?: number\n}\n\nexport const MessageCirclePlusIcon = ({\n size = 24,\n color = 'currentColor',\n strokeWidth = 2,\n}: MessageCirclePlusIconProps) => {\n return (\n <Svg fill=\"none\" height={size} viewBox=\"0 0 24 24\" width={size}>\n <Path\n d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\"\n stroke={color}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n <Line\n stroke={color}\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n x1=\"12\"\n x2=\"12\"\n y1=\"8\"\n y2=\"16\"\n />\n <Line\n stroke={color}\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n x1=\"8\"\n x2=\"16\"\n y1=\"12\"\n y2=\"12\"\n />\n </Svg>\n )\n}\n","import { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { Linking, StyleSheet, Text, TouchableOpacity, View } from 'react-native'\nimport { SafeAreaView } from 'react-native-safe-area-context'\nimport { WebView } from 'react-native-webview'\n\nimport { LorikeetClient } from './client'\nimport { MessageCirclePlusIcon } from './message-circle-plus-icon'\nimport type {\n LorikeetWidgetHeaderProps,\n LorikeetWidgetViewProps,\n LorikeetWidgetWebViewProps,\n} from './types'\n\nconst stylesheet = StyleSheet.create({\n root: { flex: 1, backgroundColor: '#fff' },\n container: {\n flex: 1,\n borderRadius: 8,\n overflow: 'hidden',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 3,\n },\n header: {\n padding: 16,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n headerIcon: {\n width: 24,\n },\n headerText: {\n textAlign: 'center',\n fontSize: 16,\n },\n webView: {\n flex: 1,\n },\n})\n\nexport const LorikeetWidgetWebView = forwardRef<\n WebView,\n LorikeetWidgetWebViewProps\n>(({ uri, baseUrl = 'https://chat.lorikeetcx.ai', webviewProps = {} }, ref) => {\n return (\n <WebView\n {...webviewProps}\n onNavigationStateChange={(navState) => {\n if (navState.url.includes(baseUrl)) {\n return false\n } else {\n void Linking.openURL(navState.url)\n return false\n }\n }}\n ref={ref}\n source={{\n uri,\n }}\n style={stylesheet.webView}\n />\n )\n})\nLorikeetWidgetWebView.displayName = 'LorikeetWidgetWebView'\n\nexport const LorikeetWidgetHeader = ({\n title,\n style,\n icon = <MessageCirclePlusIcon size={16} />,\n onIconPress,\n}: LorikeetWidgetHeaderProps) => {\n return (\n <View style={stylesheet.header}>\n <View style={stylesheet.headerIcon} />\n <Text style={[stylesheet.headerText, style]}>{title}</Text>\n <TouchableOpacity onPress={onIconPress} style={stylesheet.headerIcon}>\n {icon}\n </TouchableOpacity>\n </View>\n )\n}\n\nexport function LorikeetWidgetView({\n publicKey,\n baseUrl,\n authToken,\n customisations,\n styles,\n onWebViewMessage,\n}: LorikeetWidgetViewProps) {\n const [lorikeetClient, setLorikeetClient] = useState<LorikeetClient | null>(\n null,\n )\n const [uri, setUri] = useState<string | null>(null)\n const [timestamp, setTimestamp] = useState<number>(Date.now())\n const webViewRef = useRef<WebView>(null)\n\n useEffect(() => {\n const lorikeetClient = new LorikeetClient({\n public_key: publicKey,\n api_base: baseUrl,\n customisations: {\n ...customisations,\n hideHeader:\n customisations?.hideHeader === undefined\n ? true\n : customisations.hideHeader,\n },\n })\n setLorikeetClient(lorikeetClient)\n setUri(\n lorikeetClient.getWebviewUrl({\n token: authToken,\n }),\n )\n }, [publicKey, baseUrl])\n\n if (!lorikeetClient || !uri) {\n return null\n }\n\n return (\n <SafeAreaView edges={['top', 'left', 'right']} style={stylesheet.root}>\n <View style={stylesheet.container}>\n <LorikeetWidgetHeader\n onIconPress={() => {\n setTimestamp(Date.now())\n }}\n style={styles?.header}\n title={customisations?.title ?? 'Lorikeet AI Agent'}\n />\n <LorikeetWidgetWebView\n baseUrl={lorikeetClient.baseUrl}\n key={timestamp}\n ref={webViewRef}\n uri={uri}\n webviewProps={{\n onMessage: onWebViewMessage,\n allowsInlineMediaPlayback: true,\n mediaPlaybackRequiresUserAction: false,\n scalesPageToFit: true,\n startInLoadingState: true,\n style: stylesheet.webView,\n }}\n />\n </View>\n </SafeAreaView>\n )\n}\n"]}
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { forwardRef, useState, useRef, useEffect } from 'react';
2
- import { MessageCirclePlusIcon } from 'lucide-react-native';
3
2
  import { StyleSheet, Linking, View, Text, TouchableOpacity } from 'react-native';
4
3
  import { SafeAreaView } from 'react-native-safe-area-context';
5
4
  import { WebView } from 'react-native-webview';
5
+ import Svg, { Path, Line } from 'react-native-svg';
6
6
  import { jsx, jsxs } from 'react/jsx-runtime';
7
7
 
8
8
  var __defProp = Object.defineProperty;
@@ -49,6 +49,48 @@ var LorikeetClient = class {
49
49
  }
50
50
  }
51
51
  };
52
+ var MessageCirclePlusIcon = ({
53
+ size = 24,
54
+ color = "currentColor",
55
+ strokeWidth = 2
56
+ }) => {
57
+ return /* @__PURE__ */ jsxs(Svg, { fill: "none", height: size, viewBox: "0 0 24 24", width: size, children: [
58
+ /* @__PURE__ */ jsx(
59
+ Path,
60
+ {
61
+ d: "M7.9 20A9 9 0 1 0 4 16.1L2 22Z",
62
+ stroke: color,
63
+ strokeLinecap: "round",
64
+ strokeLinejoin: "round",
65
+ strokeWidth
66
+ }
67
+ ),
68
+ /* @__PURE__ */ jsx(
69
+ Line,
70
+ {
71
+ stroke: color,
72
+ strokeLinecap: "round",
73
+ strokeWidth,
74
+ x1: "12",
75
+ x2: "12",
76
+ y1: "8",
77
+ y2: "16"
78
+ }
79
+ ),
80
+ /* @__PURE__ */ jsx(
81
+ Line,
82
+ {
83
+ stroke: color,
84
+ strokeLinecap: "round",
85
+ strokeWidth,
86
+ x1: "8",
87
+ x2: "16",
88
+ y1: "12",
89
+ y2: "12"
90
+ }
91
+ )
92
+ ] });
93
+ };
52
94
  var stylesheet = StyleSheet.create({
53
95
  root: { flex: 1, backgroundColor: "#fff" },
54
96
  container: {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/widget.tsx"],"names":["lorikeetClient"],"mappings":"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","file":"index.js","sourcesContent":["import type { Customisations } from '@lorikeetai/web-sdk/types'\n\nimport type { LorikeetInitOptions } from './types'\n\nexport class LorikeetClient {\n baseUrl: string = 'https://chat.lorikeetcx.ai' // Fallback URL\n customisations: Customisations | null = null\n publicKey: string\n\n constructor({ customisations, api_base, public_key }: LorikeetInitOptions) {\n if (api_base) {\n this.baseUrl = api_base\n }\n this.publicKey = public_key\n\n if (customisations) {\n this.customisations = customisations\n }\n }\n\n getWebviewUrl = ({\n customer_email,\n customer_name,\n token,\n ticket_id,\n }: {\n customer_email?: string\n customer_name?: string\n token: string\n ticket_id?: string\n }) => {\n const url = new URL(this.baseUrl)\n\n url.pathname = ticket_id\n ? `/tickets/${this.publicKey}/${ticket_id}`\n : '/widget'\n url.searchParams.append('public_key', this.publicKey)\n\n if (customer_email) {\n url.searchParams.append('customer_email', customer_email)\n }\n if (customer_name) {\n url.searchParams.append('customer_name', customer_name)\n }\n\n url.searchParams.append('token', token)\n\n if (this.customisations) {\n url.searchParams.append(\n 'customisations',\n btoa(JSON.stringify(this.customisations)),\n )\n }\n\n return url.toString()\n }\n}\n","import { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { MessageCirclePlusIcon } from 'lucide-react-native'\nimport { Linking, StyleSheet, Text, TouchableOpacity, View } from 'react-native'\nimport { SafeAreaView } from 'react-native-safe-area-context'\nimport { WebView } from 'react-native-webview'\n\nimport { LorikeetClient } from './client'\nimport type {\n LorikeetWidgetHeaderProps,\n LorikeetWidgetViewProps,\n LorikeetWidgetWebViewProps,\n} from './types'\n\nconst stylesheet = StyleSheet.create({\n root: { flex: 1, backgroundColor: '#fff' },\n container: {\n flex: 1,\n borderRadius: 8,\n overflow: 'hidden',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 3,\n },\n header: {\n padding: 16,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n headerIcon: {\n width: 24,\n },\n headerText: {\n textAlign: 'center',\n fontSize: 16,\n },\n webView: {\n flex: 1,\n },\n})\n\nexport const LorikeetWidgetWebView = forwardRef<\n WebView,\n LorikeetWidgetWebViewProps\n>(({ uri, baseUrl = 'https://chat.lorikeetcx.ai', webviewProps = {} }, ref) => {\n return (\n <WebView\n {...webviewProps}\n onNavigationStateChange={(navState) => {\n if (navState.url.includes(baseUrl)) {\n return false\n } else {\n void Linking.openURL(navState.url)\n return false\n }\n }}\n ref={ref}\n source={{\n uri,\n }}\n style={stylesheet.webView}\n />\n )\n})\nLorikeetWidgetWebView.displayName = 'LorikeetWidgetWebView'\n\nexport const LorikeetWidgetHeader = ({\n title,\n style,\n icon = <MessageCirclePlusIcon size={16} />,\n onIconPress,\n}: LorikeetWidgetHeaderProps) => {\n return (\n <View style={stylesheet.header}>\n <View style={stylesheet.headerIcon} />\n <Text style={[stylesheet.headerText, style]}>{title}</Text>\n <TouchableOpacity onPress={onIconPress} style={stylesheet.headerIcon}>\n {icon}\n </TouchableOpacity>\n </View>\n )\n}\n\nexport function LorikeetWidgetView({\n publicKey,\n baseUrl,\n authToken,\n customisations,\n styles,\n onWebViewMessage,\n}: LorikeetWidgetViewProps) {\n const [lorikeetClient, setLorikeetClient] = useState<LorikeetClient | null>(\n null,\n )\n const [uri, setUri] = useState<string | null>(null)\n const [timestamp, setTimestamp] = useState<number>(Date.now())\n const webViewRef = useRef<WebView>(null)\n\n useEffect(() => {\n const lorikeetClient = new LorikeetClient({\n public_key: publicKey,\n api_base: baseUrl,\n customisations: {\n ...customisations,\n hideHeader:\n customisations?.hideHeader === undefined\n ? true\n : customisations.hideHeader,\n },\n })\n setLorikeetClient(lorikeetClient)\n setUri(\n lorikeetClient.getWebviewUrl({\n token: authToken,\n }),\n )\n }, [publicKey, baseUrl])\n\n if (!lorikeetClient || !uri) {\n return null\n }\n\n return (\n <SafeAreaView edges={['top', 'left', 'right']} style={stylesheet.root}>\n <View style={stylesheet.container}>\n <LorikeetWidgetHeader\n onIconPress={() => {\n setTimestamp(Date.now())\n }}\n style={styles?.header}\n title={customisations?.title ?? 'Lorikeet AI Agent'}\n />\n <LorikeetWidgetWebView\n baseUrl={lorikeetClient.baseUrl}\n key={timestamp}\n ref={webViewRef}\n uri={uri}\n webviewProps={{\n onMessage: onWebViewMessage,\n allowsInlineMediaPlayback: true,\n mediaPlaybackRequiresUserAction: false,\n scalesPageToFit: true,\n startInLoadingState: true,\n style: stylesheet.webView,\n }}\n />\n </View>\n </SafeAreaView>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/message-circle-plus-icon.tsx","../src/widget.tsx"],"names":["jsx","jsxs","lorikeetClient"],"mappings":"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","file":"index.js","sourcesContent":["import type { Customisations } from '@lorikeetai/web-sdk/types'\n\nimport type { LorikeetInitOptions } from './types'\n\nexport class LorikeetClient {\n baseUrl: string = 'https://chat.lorikeetcx.ai' // Fallback URL\n customisations: Customisations | null = null\n publicKey: string\n\n constructor({ customisations, api_base, public_key }: LorikeetInitOptions) {\n if (api_base) {\n this.baseUrl = api_base\n }\n this.publicKey = public_key\n\n if (customisations) {\n this.customisations = customisations\n }\n }\n\n getWebviewUrl = ({\n customer_email,\n customer_name,\n token,\n ticket_id,\n }: {\n customer_email?: string\n customer_name?: string\n token: string\n ticket_id?: string\n }) => {\n const url = new URL(this.baseUrl)\n\n url.pathname = ticket_id\n ? `/tickets/${this.publicKey}/${ticket_id}`\n : '/widget'\n url.searchParams.append('public_key', this.publicKey)\n\n if (customer_email) {\n url.searchParams.append('customer_email', customer_email)\n }\n if (customer_name) {\n url.searchParams.append('customer_name', customer_name)\n }\n\n url.searchParams.append('token', token)\n\n if (this.customisations) {\n url.searchParams.append(\n 'customisations',\n btoa(JSON.stringify(this.customisations)),\n )\n }\n\n return url.toString()\n }\n}\n","import Svg, { Line, Path } from 'react-native-svg'\n\ninterface MessageCirclePlusIconProps {\n color?: string\n size?: number\n strokeWidth?: number\n}\n\nexport const MessageCirclePlusIcon = ({\n size = 24,\n color = 'currentColor',\n strokeWidth = 2,\n}: MessageCirclePlusIconProps) => {\n return (\n <Svg fill=\"none\" height={size} viewBox=\"0 0 24 24\" width={size}>\n <Path\n d=\"M7.9 20A9 9 0 1 0 4 16.1L2 22Z\"\n stroke={color}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={strokeWidth}\n />\n <Line\n stroke={color}\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n x1=\"12\"\n x2=\"12\"\n y1=\"8\"\n y2=\"16\"\n />\n <Line\n stroke={color}\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n x1=\"8\"\n x2=\"16\"\n y1=\"12\"\n y2=\"12\"\n />\n </Svg>\n )\n}\n","import { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { Linking, StyleSheet, Text, TouchableOpacity, View } from 'react-native'\nimport { SafeAreaView } from 'react-native-safe-area-context'\nimport { WebView } from 'react-native-webview'\n\nimport { LorikeetClient } from './client'\nimport { MessageCirclePlusIcon } from './message-circle-plus-icon'\nimport type {\n LorikeetWidgetHeaderProps,\n LorikeetWidgetViewProps,\n LorikeetWidgetWebViewProps,\n} from './types'\n\nconst stylesheet = StyleSheet.create({\n root: { flex: 1, backgroundColor: '#fff' },\n container: {\n flex: 1,\n borderRadius: 8,\n overflow: 'hidden',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 3,\n },\n header: {\n padding: 16,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n headerIcon: {\n width: 24,\n },\n headerText: {\n textAlign: 'center',\n fontSize: 16,\n },\n webView: {\n flex: 1,\n },\n})\n\nexport const LorikeetWidgetWebView = forwardRef<\n WebView,\n LorikeetWidgetWebViewProps\n>(({ uri, baseUrl = 'https://chat.lorikeetcx.ai', webviewProps = {} }, ref) => {\n return (\n <WebView\n {...webviewProps}\n onNavigationStateChange={(navState) => {\n if (navState.url.includes(baseUrl)) {\n return false\n } else {\n void Linking.openURL(navState.url)\n return false\n }\n }}\n ref={ref}\n source={{\n uri,\n }}\n style={stylesheet.webView}\n />\n )\n})\nLorikeetWidgetWebView.displayName = 'LorikeetWidgetWebView'\n\nexport const LorikeetWidgetHeader = ({\n title,\n style,\n icon = <MessageCirclePlusIcon size={16} />,\n onIconPress,\n}: LorikeetWidgetHeaderProps) => {\n return (\n <View style={stylesheet.header}>\n <View style={stylesheet.headerIcon} />\n <Text style={[stylesheet.headerText, style]}>{title}</Text>\n <TouchableOpacity onPress={onIconPress} style={stylesheet.headerIcon}>\n {icon}\n </TouchableOpacity>\n </View>\n )\n}\n\nexport function LorikeetWidgetView({\n publicKey,\n baseUrl,\n authToken,\n customisations,\n styles,\n onWebViewMessage,\n}: LorikeetWidgetViewProps) {\n const [lorikeetClient, setLorikeetClient] = useState<LorikeetClient | null>(\n null,\n )\n const [uri, setUri] = useState<string | null>(null)\n const [timestamp, setTimestamp] = useState<number>(Date.now())\n const webViewRef = useRef<WebView>(null)\n\n useEffect(() => {\n const lorikeetClient = new LorikeetClient({\n public_key: publicKey,\n api_base: baseUrl,\n customisations: {\n ...customisations,\n hideHeader:\n customisations?.hideHeader === undefined\n ? true\n : customisations.hideHeader,\n },\n })\n setLorikeetClient(lorikeetClient)\n setUri(\n lorikeetClient.getWebviewUrl({\n token: authToken,\n }),\n )\n }, [publicKey, baseUrl])\n\n if (!lorikeetClient || !uri) {\n return null\n }\n\n return (\n <SafeAreaView edges={['top', 'left', 'right']} style={stylesheet.root}>\n <View style={stylesheet.container}>\n <LorikeetWidgetHeader\n onIconPress={() => {\n setTimestamp(Date.now())\n }}\n style={styles?.header}\n title={customisations?.title ?? 'Lorikeet AI Agent'}\n />\n <LorikeetWidgetWebView\n baseUrl={lorikeetClient.baseUrl}\n key={timestamp}\n ref={webViewRef}\n uri={uri}\n webviewProps={{\n onMessage: onWebViewMessage,\n allowsInlineMediaPlayback: true,\n mediaPlaybackRequiresUserAction: false,\n scalesPageToFit: true,\n startInLoadingState: true,\n style: stylesheet.webView,\n }}\n />\n </View>\n </SafeAreaView>\n )\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lorikeetai/react-native-sdk",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "description": "LorikeetCX React Native widget for embedding the chat widget via WebView",
@@ -30,7 +30,6 @@
30
30
  }
31
31
  },
32
32
  "dependencies": {
33
- "lucide-react-native": "^0.544.0",
34
33
  "react-native-webview": "13.15.0",
35
34
  "react-native-safe-area-context": "~5.6.0",
36
35
  "react-native-svg": "^15.13.0"
@@ -46,9 +45,9 @@
46
45
  "tsup": "^8.3.5",
47
46
  "typescript": "^5.7.2",
48
47
  "@lorikeetai/eslint-config": "1.0.0",
49
- "@lorikeetai/prettier-config": "1.0.0",
50
48
  "@lorikeetai/tsconfig": "1.0.0",
51
- "@lorikeetai/web-sdk": "1.5.1"
49
+ "@lorikeetai/prettier-config": "1.0.0",
50
+ "@lorikeetai/web-sdk": "1.7.0"
52
51
  },
53
52
  "publishConfig": {
54
53
  "access": "public"