@lorikeetai/react-native-sdk 1.0.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/README.md +2 -0
- package/dist/index.cjs +77 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +75 -17
- package/dist/index.js.map +1 -1
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -49,6 +49,8 @@ Header component for the widget.
|
|
|
49
49
|
|
|
50
50
|
- `title` (required): The title text to display
|
|
51
51
|
- `style` (optional): Style for the header text
|
|
52
|
+
- `icon` (optional): Clickable icon to be rendered on the right side of the header. Defaults to a new chat icon
|
|
53
|
+
- `onIconPress` (optional): Callback when the header icon is pressed.
|
|
52
54
|
|
|
53
55
|
### LorikeetWidgetWebView
|
|
54
56
|
|
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: {
|
|
@@ -65,7 +111,12 @@ var stylesheet = reactNative.StyleSheet.create({
|
|
|
65
111
|
},
|
|
66
112
|
header: {
|
|
67
113
|
padding: 16,
|
|
68
|
-
|
|
114
|
+
display: "flex",
|
|
115
|
+
flexDirection: "row",
|
|
116
|
+
justifyContent: "space-between"
|
|
117
|
+
},
|
|
118
|
+
headerIcon: {
|
|
119
|
+
width: 24
|
|
69
120
|
},
|
|
70
121
|
headerText: {
|
|
71
122
|
textAlign: "center",
|
|
@@ -75,11 +126,7 @@ var stylesheet = reactNative.StyleSheet.create({
|
|
|
75
126
|
flex: 1
|
|
76
127
|
}
|
|
77
128
|
});
|
|
78
|
-
var LorikeetWidgetWebView = ({
|
|
79
|
-
uri,
|
|
80
|
-
baseUrl = "https://chat.lorikeetcx.ai",
|
|
81
|
-
webviewProps = {}
|
|
82
|
-
}) => {
|
|
129
|
+
var LorikeetWidgetWebView = react.forwardRef(({ uri, baseUrl = "https://chat.lorikeetcx.ai", webviewProps = {} }, ref) => {
|
|
83
130
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
84
131
|
reactNativeWebview.WebView,
|
|
85
132
|
{
|
|
@@ -92,21 +139,25 @@ var LorikeetWidgetWebView = ({
|
|
|
92
139
|
return false;
|
|
93
140
|
}
|
|
94
141
|
},
|
|
142
|
+
ref,
|
|
95
143
|
source: {
|
|
96
144
|
uri
|
|
97
145
|
},
|
|
98
146
|
style: stylesheet.webView
|
|
99
147
|
}
|
|
100
148
|
);
|
|
101
|
-
};
|
|
149
|
+
});
|
|
150
|
+
LorikeetWidgetWebView.displayName = "LorikeetWidgetWebView";
|
|
102
151
|
var LorikeetWidgetHeader = ({
|
|
103
152
|
title,
|
|
104
153
|
style,
|
|
105
|
-
icon = /* @__PURE__ */ jsxRuntime.jsx(
|
|
154
|
+
icon = /* @__PURE__ */ jsxRuntime.jsx(MessageCirclePlusIcon, { size: 16 }),
|
|
155
|
+
onIconPress
|
|
106
156
|
}) => {
|
|
107
157
|
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: stylesheet.header, children: [
|
|
158
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: stylesheet.headerIcon }),
|
|
108
159
|
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [stylesheet.headerText, style], children: title }),
|
|
109
|
-
icon
|
|
160
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.TouchableOpacity, { onPress: onIconPress, style: stylesheet.headerIcon, children: icon })
|
|
110
161
|
] });
|
|
111
162
|
};
|
|
112
163
|
function LorikeetWidgetView({
|
|
@@ -121,6 +172,9 @@ function LorikeetWidgetView({
|
|
|
121
172
|
const [lorikeetClient, setLorikeetClient] = react.useState(
|
|
122
173
|
null
|
|
123
174
|
);
|
|
175
|
+
const [uri, setUri] = react.useState(null);
|
|
176
|
+
const [timestamp, setTimestamp] = react.useState(Date.now());
|
|
177
|
+
const webViewRef = react.useRef(null);
|
|
124
178
|
react.useEffect(() => {
|
|
125
179
|
const lorikeetClient2 = new LorikeetClient({
|
|
126
180
|
public_key: publicKey,
|
|
@@ -131,14 +185,22 @@ function LorikeetWidgetView({
|
|
|
131
185
|
}
|
|
132
186
|
});
|
|
133
187
|
setLorikeetClient(lorikeetClient2);
|
|
188
|
+
setUri(
|
|
189
|
+
lorikeetClient2.getWebviewUrl({
|
|
190
|
+
token: authToken
|
|
191
|
+
})
|
|
192
|
+
);
|
|
134
193
|
}, [publicKey, baseUrl]);
|
|
135
|
-
if (!lorikeetClient) {
|
|
194
|
+
if (!lorikeetClient || !uri) {
|
|
136
195
|
return null;
|
|
137
196
|
}
|
|
138
197
|
return /* @__PURE__ */ jsxRuntime.jsx(reactNativeSafeAreaContext.SafeAreaView, { edges: ["top", "left", "right"], style: stylesheet.root, children: /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: stylesheet.container, children: [
|
|
139
198
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
140
199
|
LorikeetWidgetHeader,
|
|
141
200
|
{
|
|
201
|
+
onIconPress: () => {
|
|
202
|
+
setTimestamp(Date.now());
|
|
203
|
+
},
|
|
142
204
|
style: styles == null ? void 0 : styles.header,
|
|
143
205
|
title: (_a = customisations == null ? void 0 : customisations.title) != null ? _a : "Lorikeet AI Agent"
|
|
144
206
|
}
|
|
@@ -147,9 +209,8 @@ function LorikeetWidgetView({
|
|
|
147
209
|
LorikeetWidgetWebView,
|
|
148
210
|
{
|
|
149
211
|
baseUrl: lorikeetClient.baseUrl,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}),
|
|
212
|
+
ref: webViewRef,
|
|
213
|
+
uri,
|
|
153
214
|
webviewProps: {
|
|
154
215
|
onMessage: onWebViewMessage,
|
|
155
216
|
allowsInlineMediaPlayback: true,
|
|
@@ -158,7 +219,8 @@ function LorikeetWidgetView({
|
|
|
158
219
|
startInLoadingState: true,
|
|
159
220
|
style: stylesheet.webView
|
|
160
221
|
}
|
|
161
|
-
}
|
|
222
|
+
},
|
|
223
|
+
timestamp
|
|
162
224
|
)
|
|
163
225
|
] }) });
|
|
164
226
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts","../src/widget.tsx"],"names":["StyleSheet","jsx","WebView","Linking","MessageCirclePlusIcon","jsxs","View","Text","useState","useEffect","lorikeetClient","SafeAreaView"],"mappings":";;;;;;;;;;;;;;AAIO,IAAM,iBAAN,MAAqB;AAAA,EAK1B,WAAY,CAAA,EAAE,cAAgB,EAAA,QAAA,EAAU,YAAmC,EAAA;AAJ3E,IAAkB,aAAA,CAAA,IAAA,EAAA,SAAA,EAAA,4BAAA,CAAA,CAAA;AAClB;AAAA,IAAwC,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,CAAA;AACxC,IAAA,aAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AAaA,IAAA,aAAA,CAAA,IAAA,EAAA,eAAA,EAAgB,CAAC;AAAA,MACf,cAAA;AAAA,MACA,aAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,KAMI,KAAA;AACJ,MAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAEhC,MAAA,GAAA,CAAI,WAAW,SACX,GAAA,CAAA,SAAA,EAAY,KAAK,SAAS,CAAA,CAAA,EAAI,SAAS,CACvC,CAAA,GAAA,SAAA,CAAA;AACJ,MAAA,GAAA,CAAI,YAAa,CAAA,MAAA,CAAO,YAAc,EAAA,IAAA,CAAK,SAAS,CAAA,CAAA;AAEpD,MAAA,IAAI,cAAgB,EAAA;AAClB,QAAI,GAAA,CAAA,YAAA,CAAa,MAAO,CAAA,gBAAA,EAAkB,cAAc,CAAA,CAAA;AAAA,OAC1D;AACA,MAAA,IAAI,aAAe,EAAA;AACjB,QAAI,GAAA,CAAA,YAAA,CAAa,MAAO,CAAA,eAAA,EAAiB,aAAa,CAAA,CAAA;AAAA,OACxD;AAEA,MAAI,GAAA,CAAA,YAAA,CAAa,MAAO,CAAA,OAAA,EAAS,KAAK,CAAA,CAAA;AAEtC,MAAA,IAAI,KAAK,cAAgB,EAAA;AACvB,QAAA,GAAA,CAAI,YAAa,CAAA,MAAA;AAAA,UACf,gBAAA;AAAA,UACA,IAAK,CAAA,IAAA,CAAK,SAAU,CAAA,IAAA,CAAK,cAAc,CAAC,CAAA;AAAA,SAC1C,CAAA;AAAA,OACF;AAEA,MAAA,OAAO,IAAI,QAAS,EAAA,CAAA;AAAA,KACtB,CAAA,CAAA;AA7CE,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,IAAA,CAAK,OAAU,GAAA,QAAA,CAAA;AAAA,KACjB;AACA,IAAA,IAAA,CAAK,SAAY,GAAA,UAAA,CAAA;AAEjB,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,IAAA,CAAK,cAAiB,GAAA,cAAA,CAAA;AAAA,KACxB;AAAA,GACF;AAsCF,EAAA;AC1CA,IAAM,UAAA,GAAaA,uBAAW,MAAO,CAAA;AAAA,EACnC,IAAM,EAAA,EAAE,IAAM,EAAA,CAAA,EAAG,iBAAiB,MAAO,EAAA;AAAA,EACzC,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,CAAA;AAAA,IACN,YAAc,EAAA,CAAA;AAAA,IACd,QAAU,EAAA,QAAA;AAAA,IACV,WAAa,EAAA,MAAA;AAAA,IACb,YAAc,EAAA,EAAE,KAAO,EAAA,CAAA,EAAG,QAAQ,CAAE,EAAA;AAAA,IACpC,aAAe,EAAA,GAAA;AAAA,IACf,YAAc,EAAA,CAAA;AAAA,IACd,SAAW,EAAA,CAAA;AAAA,GACb;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,IACT,cAAgB,EAAA,QAAA;AAAA,GAClB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,SAAW,EAAA,QAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,GACZ;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,CAAA;AAAA,GACR;AACF,CAAC,CAAA,CAAA;AAEM,IAAM,wBAAwB,CAAC;AAAA,EACpC,GAAA;AAAA,EACA,OAAU,GAAA,4BAAA;AAAA,EACV,eAAe,EAAC;AAClB,CAAkC,KAAA;AAChC,EACE,uBAAAC,cAAA;AAAA,IAACC,0BAAA;AAAA,IAAA;AAAA,MACE,GAAG,YAAA;AAAA,MACJ,uBAAA,EAAyB,CAAC,QAAa,KAAA;AACrC,QAAA,IAAI,QAAS,CAAA,GAAA,CAAI,QAAS,CAAA,OAAO,CAAG,EAAA;AAClC,UAAO,OAAA,KAAA,CAAA;AAAA,SACF,MAAA;AACL,UAAK,KAAAC,mBAAA,CAAQ,OAAQ,CAAA,QAAA,CAAS,GAAG,CAAA,CAAA;AACjC,UAAO,OAAA,KAAA,CAAA;AAAA,SACT;AAAA,OACF;AAAA,MACA,MAAQ,EAAA;AAAA,QACN,GAAA;AAAA,OACF;AAAA,MACA,OAAO,UAAW,CAAA,OAAA;AAAA,KAAA;AAAA,GACpB,CAAA;AAEJ,EAAA;AAEO,IAAM,uBAAuB,CAAC;AAAA,EACnC,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,kCAAQC,uCAAsB,EAAA,EAAA,CAAA;AAChC,CAAiC,KAAA;AAC/B,EAAA,uBACGC,eAAA,CAAAC,gBAAA,EAAA,EAAK,KAAO,EAAA,UAAA,CAAW,MACtB,EAAA,QAAA,EAAA;AAAA,oBAAAL,cAAA,CAACM,oBAAK,KAAO,EAAA,CAAC,WAAW,UAAY,EAAA,KAAK,GAAI,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,IACnD,IAAA;AAAA,GACH,EAAA,CAAA,CAAA;AAEJ,EAAA;AAEO,SAAS,kBAAmB,CAAA;AAAA,EACjC,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA;AACF,CAA4B,EAAA;AAnF5B,EAAA,IAAA,EAAA,CAAA;AAoFE,EAAM,MAAA,CAAC,cAAgB,EAAA,iBAAiB,CAAI,GAAAC,cAAA;AAAA,IAC1C,IAAA;AAAA,GACF,CAAA;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAMC,MAAAA,eAAAA,GAAiB,IAAI,cAAe,CAAA;AAAA,MACxC,UAAY,EAAA,SAAA;AAAA,MACZ,QAAU,EAAA,OAAA;AAAA,MACV,cAAgB,EAAA;AAAA,QACd,GAAG,cAAA;AAAA,QACH,UACE,EAAA,CAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,UAAe,MAAA,KAAA,CAAA,GAC3B,OACA,cAAe,CAAA,UAAA;AAAA,OACvB;AAAA,KACD,CAAA,CAAA;AACD,IAAA,iBAAA,CAAkBA,eAAc,CAAA,CAAA;AAAA,GAC/B,EAAA,CAAC,SAAW,EAAA,OAAO,CAAC,CAAA,CAAA;AAEvB,EAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,uBACGT,cAAA,CAAAU,uCAAA,EAAA,EAAa,KAAO,EAAA,CAAC,OAAO,MAAQ,EAAA,OAAO,CAAG,EAAA,KAAA,EAAO,WAAW,IAC/D,EAAA,QAAA,kBAAAN,eAAA,CAACC,gBAAK,EAAA,EAAA,KAAA,EAAO,WAAW,SACtB,EAAA,QAAA,EAAA;AAAA,oBAAAL,cAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,OAAO,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,MAAA;AAAA,QACf,KAAA,EAAA,CAAO,EAAgB,GAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,KAAA,KAAhB,IAAyB,GAAA,EAAA,GAAA,mBAAA;AAAA,OAAA;AAAA,KAClC;AAAA,oBACAA,cAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACC,SAAS,cAAe,CAAA,OAAA;AAAA,QACxB,GAAA,EAAK,eAAe,aAAc,CAAA;AAAA,UAChC,KAAO,EAAA,SAAA;AAAA,SACR,CAAA;AAAA,QACD,YAAc,EAAA;AAAA,UACZ,SAAW,EAAA,gBAAA;AAAA,UACX,yBAA2B,EAAA,IAAA;AAAA,UAC3B,+BAAiC,EAAA,KAAA;AAAA,UACjC,eAAiB,EAAA,IAAA;AAAA,UACjB,mBAAqB,EAAA,IAAA;AAAA,UACrB,OAAO,UAAW,CAAA,OAAA;AAAA,SACpB;AAAA,OAAA;AAAA,KACF;AAAA,GAAA,EACF,CACF,EAAA,CAAA,CAAA;AAEJ","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 { useEffect, useState } from 'react'\n\nimport { MessageCirclePlusIcon } from 'lucide-react-native'\nimport { Linking, StyleSheet, Text, 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 justifyContent: 'center',\n },\n headerText: {\n textAlign: 'center',\n fontSize: 16,\n },\n webView: {\n flex: 1,\n },\n})\n\nexport const LorikeetWidgetWebView = ({\n uri,\n baseUrl = 'https://chat.lorikeetcx.ai',\n webviewProps = {},\n}: LorikeetWidgetWebViewProps) => {\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 source={{\n uri,\n }}\n style={stylesheet.webView}\n />\n )\n}\n\nexport const LorikeetWidgetHeader = ({\n title,\n style,\n icon = <MessageCirclePlusIcon />,\n}: LorikeetWidgetHeaderProps) => {\n return (\n <View style={stylesheet.header}>\n <Text style={[stylesheet.headerText, style]}>{title}</Text>\n {icon}\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\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 }, [publicKey, baseUrl])\n\n if (!lorikeetClient) {\n return null\n }\n\n return (\n <SafeAreaView edges={['top', 'left', 'right']} style={stylesheet.root}>\n <View style={stylesheet.container}>\n <LorikeetWidgetHeader\n style={styles?.header}\n title={customisations?.title ?? 'Lorikeet AI Agent'}\n />\n <LorikeetWidgetWebView\n baseUrl={lorikeetClient.baseUrl}\n uri={lorikeetClient.getWebviewUrl({\n token: authToken,\n })}\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.d.cts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as react from 'react';
|
|
3
|
+
import { WebViewProps, WebViewMessageEvent, WebView } from 'react-native-webview';
|
|
2
4
|
import { Customisations } from '@lorikeetai/web-sdk/types';
|
|
3
5
|
import { StyleProp, TextStyle } from 'react-native';
|
|
4
|
-
import { WebViewProps, WebViewMessageEvent } from 'react-native-webview';
|
|
5
6
|
|
|
6
7
|
interface LorikeetInitOptions {
|
|
7
8
|
api_base?: string;
|
|
@@ -17,6 +18,7 @@ type LorikeetWidgetHeaderProps = {
|
|
|
17
18
|
title: string;
|
|
18
19
|
style?: StyleProp<TextStyle>;
|
|
19
20
|
icon?: React.ReactNode;
|
|
21
|
+
onIconPress?: () => void;
|
|
20
22
|
};
|
|
21
23
|
type LorikeetWidgetViewProps = {
|
|
22
24
|
publicKey: string;
|
|
@@ -29,8 +31,8 @@ type LorikeetWidgetViewProps = {
|
|
|
29
31
|
};
|
|
30
32
|
};
|
|
31
33
|
|
|
32
|
-
declare const LorikeetWidgetWebView:
|
|
33
|
-
declare const LorikeetWidgetHeader: ({ title, style, icon, }: LorikeetWidgetHeaderProps) => react_jsx_runtime.JSX.Element;
|
|
34
|
+
declare const LorikeetWidgetWebView: react.ForwardRefExoticComponent<LorikeetWidgetWebViewProps & react.RefAttributes<WebView<{}>>>;
|
|
35
|
+
declare const LorikeetWidgetHeader: ({ title, style, icon, onIconPress, }: LorikeetWidgetHeaderProps) => react_jsx_runtime.JSX.Element;
|
|
34
36
|
declare function LorikeetWidgetView({ publicKey, baseUrl, authToken, customisations, styles, onWebViewMessage, }: LorikeetWidgetViewProps): react_jsx_runtime.JSX.Element | null;
|
|
35
37
|
|
|
36
38
|
declare class LorikeetClient {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as react from 'react';
|
|
3
|
+
import { WebViewProps, WebViewMessageEvent, WebView } from 'react-native-webview';
|
|
2
4
|
import { Customisations } from '@lorikeetai/web-sdk/types';
|
|
3
5
|
import { StyleProp, TextStyle } from 'react-native';
|
|
4
|
-
import { WebViewProps, WebViewMessageEvent } from 'react-native-webview';
|
|
5
6
|
|
|
6
7
|
interface LorikeetInitOptions {
|
|
7
8
|
api_base?: string;
|
|
@@ -17,6 +18,7 @@ type LorikeetWidgetHeaderProps = {
|
|
|
17
18
|
title: string;
|
|
18
19
|
style?: StyleProp<TextStyle>;
|
|
19
20
|
icon?: React.ReactNode;
|
|
21
|
+
onIconPress?: () => void;
|
|
20
22
|
};
|
|
21
23
|
type LorikeetWidgetViewProps = {
|
|
22
24
|
publicKey: string;
|
|
@@ -29,8 +31,8 @@ type LorikeetWidgetViewProps = {
|
|
|
29
31
|
};
|
|
30
32
|
};
|
|
31
33
|
|
|
32
|
-
declare const LorikeetWidgetWebView:
|
|
33
|
-
declare const LorikeetWidgetHeader: ({ title, style, icon, }: LorikeetWidgetHeaderProps) => react_jsx_runtime.JSX.Element;
|
|
34
|
+
declare const LorikeetWidgetWebView: react.ForwardRefExoticComponent<LorikeetWidgetWebViewProps & react.RefAttributes<WebView<{}>>>;
|
|
35
|
+
declare const LorikeetWidgetHeader: ({ title, style, icon, onIconPress, }: LorikeetWidgetHeaderProps) => react_jsx_runtime.JSX.Element;
|
|
34
36
|
declare function LorikeetWidgetView({ publicKey, baseUrl, authToken, customisations, styles, onWebViewMessage, }: LorikeetWidgetViewProps): react_jsx_runtime.JSX.Element | null;
|
|
35
37
|
|
|
36
38
|
declare class LorikeetClient {
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { useState, useEffect } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import { StyleSheet, Linking, View, Text } from 'react-native';
|
|
1
|
+
import { forwardRef, useState, useRef, useEffect } from 'react';
|
|
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: {
|
|
@@ -63,7 +105,12 @@ var stylesheet = StyleSheet.create({
|
|
|
63
105
|
},
|
|
64
106
|
header: {
|
|
65
107
|
padding: 16,
|
|
66
|
-
|
|
108
|
+
display: "flex",
|
|
109
|
+
flexDirection: "row",
|
|
110
|
+
justifyContent: "space-between"
|
|
111
|
+
},
|
|
112
|
+
headerIcon: {
|
|
113
|
+
width: 24
|
|
67
114
|
},
|
|
68
115
|
headerText: {
|
|
69
116
|
textAlign: "center",
|
|
@@ -73,11 +120,7 @@ var stylesheet = StyleSheet.create({
|
|
|
73
120
|
flex: 1
|
|
74
121
|
}
|
|
75
122
|
});
|
|
76
|
-
var LorikeetWidgetWebView = ({
|
|
77
|
-
uri,
|
|
78
|
-
baseUrl = "https://chat.lorikeetcx.ai",
|
|
79
|
-
webviewProps = {}
|
|
80
|
-
}) => {
|
|
123
|
+
var LorikeetWidgetWebView = forwardRef(({ uri, baseUrl = "https://chat.lorikeetcx.ai", webviewProps = {} }, ref) => {
|
|
81
124
|
return /* @__PURE__ */ jsx(
|
|
82
125
|
WebView,
|
|
83
126
|
{
|
|
@@ -90,21 +133,25 @@ var LorikeetWidgetWebView = ({
|
|
|
90
133
|
return false;
|
|
91
134
|
}
|
|
92
135
|
},
|
|
136
|
+
ref,
|
|
93
137
|
source: {
|
|
94
138
|
uri
|
|
95
139
|
},
|
|
96
140
|
style: stylesheet.webView
|
|
97
141
|
}
|
|
98
142
|
);
|
|
99
|
-
};
|
|
143
|
+
});
|
|
144
|
+
LorikeetWidgetWebView.displayName = "LorikeetWidgetWebView";
|
|
100
145
|
var LorikeetWidgetHeader = ({
|
|
101
146
|
title,
|
|
102
147
|
style,
|
|
103
|
-
icon = /* @__PURE__ */ jsx(MessageCirclePlusIcon, {})
|
|
148
|
+
icon = /* @__PURE__ */ jsx(MessageCirclePlusIcon, { size: 16 }),
|
|
149
|
+
onIconPress
|
|
104
150
|
}) => {
|
|
105
151
|
return /* @__PURE__ */ jsxs(View, { style: stylesheet.header, children: [
|
|
152
|
+
/* @__PURE__ */ jsx(View, { style: stylesheet.headerIcon }),
|
|
106
153
|
/* @__PURE__ */ jsx(Text, { style: [stylesheet.headerText, style], children: title }),
|
|
107
|
-
icon
|
|
154
|
+
/* @__PURE__ */ jsx(TouchableOpacity, { onPress: onIconPress, style: stylesheet.headerIcon, children: icon })
|
|
108
155
|
] });
|
|
109
156
|
};
|
|
110
157
|
function LorikeetWidgetView({
|
|
@@ -119,6 +166,9 @@ function LorikeetWidgetView({
|
|
|
119
166
|
const [lorikeetClient, setLorikeetClient] = useState(
|
|
120
167
|
null
|
|
121
168
|
);
|
|
169
|
+
const [uri, setUri] = useState(null);
|
|
170
|
+
const [timestamp, setTimestamp] = useState(Date.now());
|
|
171
|
+
const webViewRef = useRef(null);
|
|
122
172
|
useEffect(() => {
|
|
123
173
|
const lorikeetClient2 = new LorikeetClient({
|
|
124
174
|
public_key: publicKey,
|
|
@@ -129,14 +179,22 @@ function LorikeetWidgetView({
|
|
|
129
179
|
}
|
|
130
180
|
});
|
|
131
181
|
setLorikeetClient(lorikeetClient2);
|
|
182
|
+
setUri(
|
|
183
|
+
lorikeetClient2.getWebviewUrl({
|
|
184
|
+
token: authToken
|
|
185
|
+
})
|
|
186
|
+
);
|
|
132
187
|
}, [publicKey, baseUrl]);
|
|
133
|
-
if (!lorikeetClient) {
|
|
188
|
+
if (!lorikeetClient || !uri) {
|
|
134
189
|
return null;
|
|
135
190
|
}
|
|
136
191
|
return /* @__PURE__ */ jsx(SafeAreaView, { edges: ["top", "left", "right"], style: stylesheet.root, children: /* @__PURE__ */ jsxs(View, { style: stylesheet.container, children: [
|
|
137
192
|
/* @__PURE__ */ jsx(
|
|
138
193
|
LorikeetWidgetHeader,
|
|
139
194
|
{
|
|
195
|
+
onIconPress: () => {
|
|
196
|
+
setTimestamp(Date.now());
|
|
197
|
+
},
|
|
140
198
|
style: styles == null ? void 0 : styles.header,
|
|
141
199
|
title: (_a = customisations == null ? void 0 : customisations.title) != null ? _a : "Lorikeet AI Agent"
|
|
142
200
|
}
|
|
@@ -145,9 +203,8 @@ function LorikeetWidgetView({
|
|
|
145
203
|
LorikeetWidgetWebView,
|
|
146
204
|
{
|
|
147
205
|
baseUrl: lorikeetClient.baseUrl,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}),
|
|
206
|
+
ref: webViewRef,
|
|
207
|
+
uri,
|
|
151
208
|
webviewProps: {
|
|
152
209
|
onMessage: onWebViewMessage,
|
|
153
210
|
allowsInlineMediaPlayback: true,
|
|
@@ -156,7 +213,8 @@ function LorikeetWidgetView({
|
|
|
156
213
|
startInLoadingState: true,
|
|
157
214
|
style: stylesheet.webView
|
|
158
215
|
}
|
|
159
|
-
}
|
|
216
|
+
},
|
|
217
|
+
timestamp
|
|
160
218
|
)
|
|
161
219
|
] }) });
|
|
162
220
|
}
|
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 { useEffect, useState } from 'react'\n\nimport { MessageCirclePlusIcon } from 'lucide-react-native'\nimport { Linking, StyleSheet, Text, 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 justifyContent: 'center',\n },\n headerText: {\n textAlign: 'center',\n fontSize: 16,\n },\n webView: {\n flex: 1,\n },\n})\n\nexport const LorikeetWidgetWebView = ({\n uri,\n baseUrl = 'https://chat.lorikeetcx.ai',\n webviewProps = {},\n}: LorikeetWidgetWebViewProps) => {\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 source={{\n uri,\n }}\n style={stylesheet.webView}\n />\n )\n}\n\nexport const LorikeetWidgetHeader = ({\n title,\n style,\n icon = <MessageCirclePlusIcon />,\n}: LorikeetWidgetHeaderProps) => {\n return (\n <View style={stylesheet.header}>\n <Text style={[stylesheet.headerText, style]}>{title}</Text>\n {icon}\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\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 }, [publicKey, baseUrl])\n\n if (!lorikeetClient) {\n return null\n }\n\n return (\n <SafeAreaView edges={['top', 'left', 'right']} style={stylesheet.root}>\n <View style={stylesheet.container}>\n <LorikeetWidgetHeader\n style={styles?.header}\n title={customisations?.title ?? 'Lorikeet AI Agent'}\n />\n <LorikeetWidgetWebView\n baseUrl={lorikeetClient.baseUrl}\n uri={lorikeetClient.getWebviewUrl({\n token: authToken,\n })}\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":";;;;;;;;;;;;AAIO,IAAM,iBAAN,MAAqB;AAAA,EAK1B,WAAY,CAAA,EAAE,cAAgB,EAAA,QAAA,EAAU,YAAmC,EAAA;AAJ3E,IAAkB,aAAA,CAAA,IAAA,EAAA,SAAA,EAAA,4BAAA,CAAA,CAAA;AAClB;AAAA,IAAwC,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAA,IAAA,CAAA,CAAA;AACxC,IAAA,aAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AAaA,IAAA,aAAA,CAAA,IAAA,EAAA,eAAA,EAAgB,CAAC;AAAA,MACf,cAAA;AAAA,MACA,aAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,KAMI,KAAA;AACJ,MAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAEhC,MAAA,GAAA,CAAI,WAAW,SACX,GAAA,CAAA,SAAA,EAAY,KAAK,SAAS,CAAA,CAAA,EAAI,SAAS,CACvC,CAAA,GAAA,SAAA,CAAA;AACJ,MAAA,GAAA,CAAI,YAAa,CAAA,MAAA,CAAO,YAAc,EAAA,IAAA,CAAK,SAAS,CAAA,CAAA;AAEpD,MAAA,IAAI,cAAgB,EAAA;AAClB,QAAI,GAAA,CAAA,YAAA,CAAa,MAAO,CAAA,gBAAA,EAAkB,cAAc,CAAA,CAAA;AAAA,OAC1D;AACA,MAAA,IAAI,aAAe,EAAA;AACjB,QAAI,GAAA,CAAA,YAAA,CAAa,MAAO,CAAA,eAAA,EAAiB,aAAa,CAAA,CAAA;AAAA,OACxD;AAEA,MAAI,GAAA,CAAA,YAAA,CAAa,MAAO,CAAA,OAAA,EAAS,KAAK,CAAA,CAAA;AAEtC,MAAA,IAAI,KAAK,cAAgB,EAAA;AACvB,QAAA,GAAA,CAAI,YAAa,CAAA,MAAA;AAAA,UACf,gBAAA;AAAA,UACA,IAAK,CAAA,IAAA,CAAK,SAAU,CAAA,IAAA,CAAK,cAAc,CAAC,CAAA;AAAA,SAC1C,CAAA;AAAA,OACF;AAEA,MAAA,OAAO,IAAI,QAAS,EAAA,CAAA;AAAA,KACtB,CAAA,CAAA;AA7CE,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,IAAA,CAAK,OAAU,GAAA,QAAA,CAAA;AAAA,KACjB;AACA,IAAA,IAAA,CAAK,SAAY,GAAA,UAAA,CAAA;AAEjB,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,IAAA,CAAK,cAAiB,GAAA,cAAA,CAAA;AAAA,KACxB;AAAA,GACF;AAsCF,EAAA;AChDO,IAAM,wBAAwB,CAAC;AAAA,EACpC,IAAO,GAAA,EAAA;AAAA,EACP,KAAQ,GAAA,cAAA;AAAA,EACR,WAAc,GAAA,CAAA;AAChB,CAAkC,KAAA;AAChC,EACE,uBAAA,IAAA,CAAC,OAAI,IAAK,EAAA,MAAA,EAAO,QAAQ,IAAM,EAAA,OAAA,EAAQ,WAAY,EAAA,KAAA,EAAO,IACxD,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,CAAE,EAAA,gCAAA;AAAA,QACF,MAAQ,EAAA,KAAA;AAAA,QACR,aAAc,EAAA,OAAA;AAAA,QACd,cAAe,EAAA,OAAA;AAAA,QACf,WAAA;AAAA,OAAA;AAAA,KACF;AAAA,oBACA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,MAAQ,EAAA,KAAA;AAAA,QACR,aAAc,EAAA,OAAA;AAAA,QACd,WAAA;AAAA,QACA,EAAG,EAAA,IAAA;AAAA,QACH,EAAG,EAAA,IAAA;AAAA,QACH,EAAG,EAAA,GAAA;AAAA,QACH,EAAG,EAAA,IAAA;AAAA,OAAA;AAAA,KACL;AAAA,oBACA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,MAAQ,EAAA,KAAA;AAAA,QACR,aAAc,EAAA,OAAA;AAAA,QACd,WAAA;AAAA,QACA,EAAG,EAAA,GAAA;AAAA,QACH,EAAG,EAAA,IAAA;AAAA,QACH,EAAG,EAAA,IAAA;AAAA,QACH,EAAG,EAAA,IAAA;AAAA,OAAA;AAAA,KACL;AAAA,GACF,EAAA,CAAA,CAAA;AAEJ,CAAA,CAAA;AC5BA,IAAM,UAAA,GAAa,WAAW,MAAO,CAAA;AAAA,EACnC,IAAM,EAAA,EAAE,IAAM,EAAA,CAAA,EAAG,iBAAiB,MAAO,EAAA;AAAA,EACzC,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,CAAA;AAAA,IACN,YAAc,EAAA,CAAA;AAAA,IACd,QAAU,EAAA,QAAA;AAAA,IACV,WAAa,EAAA,MAAA;AAAA,IACb,YAAc,EAAA,EAAE,KAAO,EAAA,CAAA,EAAG,QAAQ,CAAE,EAAA;AAAA,IACpC,aAAe,EAAA,GAAA;AAAA,IACf,YAAc,EAAA,CAAA;AAAA,IACd,SAAW,EAAA,CAAA;AAAA,GACb;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,IACT,OAAS,EAAA,MAAA;AAAA,IACT,aAAe,EAAA,KAAA;AAAA,IACf,cAAgB,EAAA,eAAA;AAAA,GAClB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,KAAO,EAAA,EAAA;AAAA,GACT;AAAA,EACA,UAAY,EAAA;AAAA,IACV,SAAW,EAAA,QAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,GACZ;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,CAAA;AAAA,GACR;AACF,CAAC,CAAA,CAAA;AAEY,IAAA,qBAAA,GAAwB,UAGnC,CAAA,CAAC,EAAE,GAAA,EAAK,OAAU,GAAA,4BAAA,EAA8B,YAAe,GAAA,EAAG,EAAA,EAAG,GAAQ,KAAA;AAC7E,EAAA,uBACEA,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACE,GAAG,YAAA;AAAA,MACJ,uBAAA,EAAyB,CAAC,QAAa,KAAA;AACrC,QAAA,IAAI,QAAS,CAAA,GAAA,CAAI,QAAS,CAAA,OAAO,CAAG,EAAA;AAClC,UAAO,OAAA,KAAA,CAAA;AAAA,SACF,MAAA;AACL,UAAK,KAAA,OAAA,CAAQ,OAAQ,CAAA,QAAA,CAAS,GAAG,CAAA,CAAA;AACjC,UAAO,OAAA,KAAA,CAAA;AAAA,SACT;AAAA,OACF;AAAA,MACA,GAAA;AAAA,MACA,MAAQ,EAAA;AAAA,QACN,GAAA;AAAA,OACF;AAAA,MACA,OAAO,UAAW,CAAA,OAAA;AAAA,KAAA;AAAA,GACpB,CAAA;AAEJ,CAAC,EAAA;AACD,qBAAA,CAAsB,WAAc,GAAA,uBAAA,CAAA;AAE7B,IAAM,uBAAuB,CAAC;AAAA,EACnC,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAO,mBAAAA,GAAC,CAAA,qBAAA,EAAA,EAAsB,MAAM,EAAI,EAAA,CAAA;AAAA,EACxC,WAAA;AACF,CAAiC,KAAA;AAC/B,EAAA,uBACEC,IAAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,WAAW,MACtB,EAAA,QAAA,EAAA;AAAA,oBAAAD,GAAC,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,UAAA,CAAW,UAAY,EAAA,CAAA;AAAA,oBACpCA,IAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,UAAW,CAAA,UAAA,EAAY,KAAK,CAAA,EAAI,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,oBACpDA,IAAC,gBAAiB,EAAA,EAAA,OAAA,EAAS,aAAa,KAAO,EAAA,UAAA,CAAW,YACvD,QACH,EAAA,IAAA,EAAA,CAAA;AAAA,GACF,EAAA,CAAA,CAAA;AAEJ,EAAA;AAEO,SAAS,kBAAmB,CAAA;AAAA,EACjC,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA;AACF,CAA4B,EAAA;AA7F5B,EAAA,IAAA,EAAA,CAAA;AA8FE,EAAM,MAAA,CAAC,cAAgB,EAAA,iBAAiB,CAAI,GAAA,QAAA;AAAA,IAC1C,IAAA;AAAA,GACF,CAAA;AACA,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAwB,IAAI,CAAA,CAAA;AAClD,EAAA,MAAM,CAAC,SAAW,EAAA,YAAY,IAAI,QAAiB,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAC7D,EAAM,MAAA,UAAA,GAAa,OAAgB,IAAI,CAAA,CAAA;AAEvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAME,MAAAA,eAAAA,GAAiB,IAAI,cAAe,CAAA;AAAA,MACxC,UAAY,EAAA,SAAA;AAAA,MACZ,QAAU,EAAA,OAAA;AAAA,MACV,cAAgB,EAAA;AAAA,QACd,GAAG,cAAA;AAAA,QACH,UACE,EAAA,CAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,UAAe,MAAA,KAAA,CAAA,GAC3B,OACA,cAAe,CAAA,UAAA;AAAA,OACvB;AAAA,KACD,CAAA,CAAA;AACD,IAAA,iBAAA,CAAkBA,eAAc,CAAA,CAAA;AAChC,IAAA,MAAA;AAAA,MACEA,gBAAe,aAAc,CAAA;AAAA,QAC3B,KAAO,EAAA,SAAA;AAAA,OACR,CAAA;AAAA,KACH,CAAA;AAAA,GACC,EAAA,CAAC,SAAW,EAAA,OAAO,CAAC,CAAA,CAAA;AAEvB,EAAI,IAAA,CAAC,cAAkB,IAAA,CAAC,GAAK,EAAA;AAC3B,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,uBACEF,GAAC,CAAA,YAAA,EAAA,EAAa,KAAO,EAAA,CAAC,OAAO,MAAQ,EAAA,OAAO,CAAG,EAAA,KAAA,EAAO,WAAW,IAC/D,EAAA,QAAA,kBAAAC,KAAC,IAAK,EAAA,EAAA,KAAA,EAAO,WAAW,SACtB,EAAA,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,aAAa,MAAM;AACjB,UAAa,YAAA,CAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AAAA,SACzB;AAAA,QACA,OAAO,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,MAAA;AAAA,QACf,KAAA,EAAA,CAAO,EAAgB,GAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,KAAA,KAAhB,IAAyB,GAAA,EAAA,GAAA,mBAAA;AAAA,OAAA;AAAA,KAClC;AAAA,oBACAA,GAAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACC,SAAS,cAAe,CAAA,OAAA;AAAA,QAExB,GAAK,EAAA,UAAA;AAAA,QACL,GAAA;AAAA,QACA,YAAc,EAAA;AAAA,UACZ,SAAW,EAAA,gBAAA;AAAA,UACX,yBAA2B,EAAA,IAAA;AAAA,UAC3B,+BAAiC,EAAA,KAAA;AAAA,UACjC,eAAiB,EAAA,IAAA;AAAA,UACjB,mBAAqB,EAAA,IAAA;AAAA,UACrB,OAAO,UAAW,CAAA,OAAA;AAAA,SACpB;AAAA,OAAA;AAAA,MAVK,SAAA;AAAA,KAWP;AAAA,GAAA,EACF,CACF,EAAA,CAAA,CAAA;AAEJ","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.
|
|
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"
|
|
@@ -45,10 +44,10 @@
|
|
|
45
44
|
"rimraf": "^6.0.1",
|
|
46
45
|
"tsup": "^8.3.5",
|
|
47
46
|
"typescript": "^5.7.2",
|
|
48
|
-
"@lorikeetai/prettier-config": "1.0.0",
|
|
49
47
|
"@lorikeetai/eslint-config": "1.0.0",
|
|
50
48
|
"@lorikeetai/tsconfig": "1.0.0",
|
|
51
|
-
"@lorikeetai/
|
|
49
|
+
"@lorikeetai/prettier-config": "1.0.0",
|
|
50
|
+
"@lorikeetai/web-sdk": "1.7.0"
|
|
52
51
|
},
|
|
53
52
|
"publishConfig": {
|
|
54
53
|
"access": "public"
|