@fencyai/react 0.1.4 → 0.1.6
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 +11 -15
- package/dist/FencyProvider.d.ts +8 -0
- package/dist/FencyProvider.d.ts.map +1 -0
- package/dist/FencyProvider.js +34 -0
- package/dist/index.d.ts +3 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/types.d.ts +24 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/useFency.d.ts +6 -0
- package/dist/useFency.d.ts.map +1 -0
- package/dist/useFency.js +12 -0
- package/package.json +1 -3
package/README.md
CHANGED
|
@@ -13,35 +13,31 @@ npm install @fencyai/react
|
|
|
13
13
|
### Basic Usage
|
|
14
14
|
|
|
15
15
|
```jsx
|
|
16
|
-
import {
|
|
16
|
+
import { FencyProvider, useFency } from '@fencyai/react';
|
|
17
|
+
import { loadFency } from '@fencyai/js';
|
|
18
|
+
|
|
19
|
+
// Make sure to call `loadFency` outside of a component's render to avoid
|
|
20
|
+
// recreating the Fency object on every render.
|
|
21
|
+
const fencyPromise = loadFency('pk_test_your_publishable_key_here');
|
|
17
22
|
|
|
18
23
|
function App() {
|
|
19
24
|
return (
|
|
20
|
-
<
|
|
21
|
-
<
|
|
22
|
-
</
|
|
25
|
+
<FencyProvider fency={fencyPromise}>
|
|
26
|
+
<MyComponent />
|
|
27
|
+
</FencyProvider>
|
|
23
28
|
);
|
|
24
29
|
}
|
|
25
30
|
|
|
26
|
-
function
|
|
27
|
-
const { fency, loading, error
|
|
31
|
+
function MyComponent() {
|
|
32
|
+
const { fency, loading, error } = useFency();
|
|
28
33
|
|
|
29
34
|
if (loading) return <div>Loading Fency...</div>;
|
|
30
35
|
if (error) return <div>Error: {error.message}</div>;
|
|
31
36
|
|
|
32
|
-
const handleSendMessage = async () => {
|
|
33
|
-
try {
|
|
34
|
-
await sendMessage("Hello, how are you?");
|
|
35
|
-
} catch (err) {
|
|
36
|
-
console.error('Failed to send message:', err);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
37
|
return (
|
|
41
38
|
<div>
|
|
42
39
|
<p>Fency loaded: {fency.publishableKey}</p>
|
|
43
40
|
<p>Version: {fency.version}</p>
|
|
44
|
-
<button onClick={handleSendMessage}>Send Message</button>
|
|
45
41
|
</div>
|
|
46
42
|
);
|
|
47
43
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FencyContext, FencyProviderProps } from './types';
|
|
2
|
+
export declare const FencyContextValue: import("react").Context<FencyContext | undefined>;
|
|
3
|
+
/**
|
|
4
|
+
* Provider component that provides Fency instance to child components
|
|
5
|
+
* Expects a promise that resolves to a Fency instance
|
|
6
|
+
*/
|
|
7
|
+
export declare function FencyProvider({ fency, children }: FencyProviderProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
//# sourceMappingURL=FencyProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FencyProvider.d.ts","sourceRoot":"","sources":["../src/FencyProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAiB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG/E,eAAO,MAAM,iBAAiB,mDAAqD,CAAC;AAEpF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,kDAiCpE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useEffect, useState } from 'react';
|
|
3
|
+
// Create the context
|
|
4
|
+
export const FencyContextValue = createContext(undefined);
|
|
5
|
+
/**
|
|
6
|
+
* Provider component that provides Fency instance to child components
|
|
7
|
+
* Expects a promise that resolves to a Fency instance
|
|
8
|
+
*/
|
|
9
|
+
export function FencyProvider({ fency, children }) {
|
|
10
|
+
const [fencyInstance, setFencyInstance] = useState(null);
|
|
11
|
+
const [loading, setLoading] = useState(true);
|
|
12
|
+
const [error, setError] = useState(null);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
fency
|
|
15
|
+
.then((instance) => {
|
|
16
|
+
setFencyInstance(instance);
|
|
17
|
+
setLoading(false);
|
|
18
|
+
})
|
|
19
|
+
.catch((err) => {
|
|
20
|
+
setError(err);
|
|
21
|
+
setLoading(false);
|
|
22
|
+
});
|
|
23
|
+
}, [fency]);
|
|
24
|
+
// Only render children and provide context when fency is loaded
|
|
25
|
+
if (!fencyInstance) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const value = {
|
|
29
|
+
fency: fencyInstance,
|
|
30
|
+
loading,
|
|
31
|
+
error,
|
|
32
|
+
};
|
|
33
|
+
return (_jsx(FencyContextValue.Provider, { value: value, children: children }));
|
|
34
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,29 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* Context for Fency instance
|
|
5
|
-
*/
|
|
6
|
-
interface FencyContext {
|
|
7
|
-
fency: FencyInstance;
|
|
8
|
-
loading: boolean;
|
|
9
|
-
error: Error | null;
|
|
10
|
-
}
|
|
11
|
-
declare const FencyContext: import("react").Context<FencyContext | undefined>;
|
|
12
|
-
/**
|
|
13
|
-
* Props for FencyProvider
|
|
14
|
-
*/
|
|
15
|
-
interface FencyProviderProps {
|
|
16
|
-
publishableKey: string;
|
|
17
|
-
options?: Omit<FencyOptions, 'publishableKey'>;
|
|
18
|
-
children: ReactNode;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Provider component that loads and provides Fency instance to child components
|
|
22
|
-
*/
|
|
23
|
-
export declare function FencyProvider({ publishableKey, options, children }: FencyProviderProps): import("react/jsx-runtime").JSX.Element | null;
|
|
24
|
-
/**
|
|
25
|
-
* Hook to access Fency instance and loading state
|
|
26
|
-
*/
|
|
27
|
-
export declare function useFency(): FencyContext;
|
|
28
|
-
export type { FencyInstance, FencyOptions } from '@fencyai/js';
|
|
1
|
+
export { FencyProvider } from './FencyProvider';
|
|
2
|
+
export { useFency } from './useFency';
|
|
3
|
+
export type { FencyContext, FencyInstance, FencyOptions, FencyProviderProps } from './types';
|
|
29
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var G=Object.create;var O=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var Q=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var _=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Z=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of K(t))!X.call(e,o)&&o!==r&&O(e,o,{get:()=>t[o],enumerable:!(n=J(t,o))||n.enumerable});return e};var m=(e,t,r)=>(r=e!=null?G(Q(e)):{},Z(t||!e||!e.__esModule?O(r,"default",{value:e,enumerable:!0}):r,e));var A=_(u=>{"use strict";var d=Symbol.for("react.element"),ee=Symbol.for("react.portal"),te=Symbol.for("react.fragment"),re=Symbol.for("react.strict_mode"),ne=Symbol.for("react.profiler"),oe=Symbol.for("react.provider"),ue=Symbol.for("react.context"),ce=Symbol.for("react.forward_ref"),se=Symbol.for("react.suspense"),ie=Symbol.for("react.memo"),fe=Symbol.for("react.lazy"),$=Symbol.iterator;function le(e){return e===null||typeof e!="object"?null:(e=$&&e[$]||e["@@iterator"],typeof e=="function"?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},V=Object.assign,q={};function y(e,t,r){this.props=e,this.context=t,this.refs=q,this.updater=r||g}y.prototype.isReactComponent={};y.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function N(){}N.prototype=y.prototype;function F(e,t,r){this.props=e,this.context=t,this.refs=q,this.updater=r||g}var w=F.prototype=new N;w.constructor=F;V(w,y.prototype);w.isPureReactComponent=!0;var j=Array.isArray,D=Object.prototype.hasOwnProperty,k={current:null},T={key:!0,ref:!0,__self:!0,__source:!0};function L(e,t,r){var n,o={},c=null,s=null;if(t!=null)for(n in t.ref!==void 0&&(s=t.ref),t.key!==void 0&&(c=""+t.key),t)D.call(t,n)&&!T.hasOwnProperty(n)&&(o[n]=t[n]);var f=arguments.length-2;if(f===1)o.children=r;else if(1<f){for(var i=Array(f),l=0;l<f;l++)i[l]=arguments[l+2];o.children=i}if(e&&e.defaultProps)for(n in f=e.defaultProps,f)o[n]===void 0&&(o[n]=f[n]);return{$$typeof:d,type:e,key:c,ref:s,props:o,_owner:k.current}}function pe(e,t){return{$$typeof:d,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function P(e){return typeof e=="object"&&e!==null&&e.$$typeof===d}function ae(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(r){return t[r]})}var I=/\/+/g;function C(e,t){return typeof e=="object"&&e!==null&&e.key!=null?ae(""+e.key):t.toString(36)}function h(e,t,r,n,o){var c=typeof e;(c==="undefined"||c==="boolean")&&(e=null);var s=!1;if(e===null)s=!0;else switch(c){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case d:case ee:s=!0}}if(s)return s=e,o=o(s),e=n===""?"."+C(s,0):n,j(o)?(r="",e!=null&&(r=e.replace(I,"$&/")+"/"),h(o,t,r,"",function(l){return l})):o!=null&&(P(o)&&(o=pe(o,r+(!o.key||s&&s.key===o.key?"":(""+o.key).replace(I,"$&/")+"/")+e)),t.push(o)),1;if(s=0,n=n===""?".":n+":",j(e))for(var f=0;f<e.length;f++){c=e[f];var i=n+C(c,f);s+=h(c,t,r,i,o)}else if(i=le(e),typeof i=="function")for(e=i.call(e),f=0;!(c=e.next()).done;)c=c.value,i=n+C(c,f++),s+=h(c,t,r,i,o);else if(c==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return s}function v(e,t,r){if(e==null)return e;var n=[],o=0;return h(e,n,"","",function(c){return t.call(r,c,o++)}),n}function ye(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(r){(e._status===0||e._status===-1)&&(e._status=1,e._result=r)},function(r){(e._status===0||e._status===-1)&&(e._status=2,e._result=r)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var p={current:null},E={transition:null},de={ReactCurrentDispatcher:p,ReactCurrentBatchConfig:E,ReactCurrentOwner:k};function U(){throw Error("act(...) is not supported in production builds of React.")}u.Children={map:v,forEach:function(e,t,r){v(e,function(){t.apply(this,arguments)},r)},count:function(e){var t=0;return v(e,function(){t++}),t},toArray:function(e){return v(e,function(t){return t})||[]},only:function(e){if(!P(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};u.Component=y;u.Fragment=te;u.Profiler=ne;u.PureComponent=F;u.StrictMode=re;u.Suspense=se;u.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=de;u.act=U;u.cloneElement=function(e,t,r){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var n=V({},e.props),o=e.key,c=e.ref,s=e._owner;if(t!=null){if(t.ref!==void 0&&(c=t.ref,s=k.current),t.key!==void 0&&(o=""+t.key),e.type&&e.type.defaultProps)var f=e.type.defaultProps;for(i in t)D.call(t,i)&&!T.hasOwnProperty(i)&&(n[i]=t[i]===void 0&&f!==void 0?f[i]:t[i])}var i=arguments.length-2;if(i===1)n.children=r;else if(1<i){f=Array(i);for(var l=0;l<i;l++)f[l]=arguments[l+2];n.children=f}return{$$typeof:d,type:e.type,key:o,ref:c,props:n,_owner:s}};u.createContext=function(e){return e={$$typeof:ue,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:oe,_context:e},e.Consumer=e};u.createElement=L;u.createFactory=function(e){var t=L.bind(null,e);return t.type=e,t};u.createRef=function(){return{current:null}};u.forwardRef=function(e){return{$$typeof:ce,render:e}};u.isValidElement=P;u.lazy=function(e){return{$$typeof:fe,_payload:{_status:-1,_result:e},_init:ye}};u.memo=function(e,t){return{$$typeof:ie,type:e,compare:t===void 0?null:t}};u.startTransition=function(e){var t=E.transition;E.transition={};try{e()}finally{E.transition=t}};u.unstable_act=U;u.useCallback=function(e,t){return p.current.useCallback(e,t)};u.useContext=function(e){return p.current.useContext(e)};u.useDebugValue=function(){};u.useDeferredValue=function(e){return p.current.useDeferredValue(e)};u.useEffect=function(e,t){return p.current.useEffect(e,t)};u.useId=function(){return p.current.useId()};u.useImperativeHandle=function(e,t,r){return p.current.useImperativeHandle(e,t,r)};u.useInsertionEffect=function(e,t){return p.current.useInsertionEffect(e,t)};u.useLayoutEffect=function(e,t){return p.current.useLayoutEffect(e,t)};u.useMemo=function(e,t){return p.current.useMemo(e,t)};u.useReducer=function(e,t,r){return p.current.useReducer(e,t,r)};u.useRef=function(e){return p.current.useRef(e)};u.useState=function(e){return p.current.useState(e)};u.useSyncExternalStore=function(e,t,r){return p.current.useSyncExternalStore(e,t,r)};u.useTransition=function(){return p.current.useTransition()};u.version="18.3.1"});var S=_((ke,M)=>{"use strict";M.exports=A()});var z=_(x=>{"use strict";var _e=S(),me=Symbol.for("react.element"),ve=Symbol.for("react.fragment"),he=Object.prototype.hasOwnProperty,Ee=_e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Se={key:!0,ref:!0,__self:!0,__source:!0};function B(e,t,r){var n,o={},c=null,s=null;r!==void 0&&(c=""+r),t.key!==void 0&&(c=""+t.key),t.ref!==void 0&&(s=t.ref);for(n in t)he.call(t,n)&&!Se.hasOwnProperty(n)&&(o[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps,t)o[n]===void 0&&(o[n]=t[n]);return{$$typeof:me,type:e,key:c,ref:s,props:o,_owner:Ee.current}}x.Fragment=ve;x.jsx=B;x.jsxs=B});var R=_((Re,H)=>{"use strict";H.exports=z()});var a=m(S(),1),W=m(R(),1),b=(0,a.createContext)(void 0);function xe({fency:e,children:t}){let[r,n]=(0,a.useState)(null),[o,c]=(0,a.useState)(!0),[s,f]=(0,a.useState)(null);if((0,a.useEffect)(()=>{e.then(l=>{n(l),c(!1)}).catch(l=>{f(l),c(!1)})},[e]),!r)return null;let i={fency:r,loading:o,error:s};return(0,W.jsx)(b.Provider,{value:i,children:t})}var Y=m(S(),1);function Ce(){let e=(0,Y.useContext)(b);if(e===void 0)throw new Error("useFency must be used within a FencyProvider");return e}export{xe as FencyProvider,Ce as useFency};
|
|
2
2
|
/*! Bundled license information:
|
|
3
3
|
|
|
4
4
|
react/cjs/react.production.min.js:
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface FencyInstance {
|
|
2
|
+
publishableKey: string;
|
|
3
|
+
endpoint: string;
|
|
4
|
+
}
|
|
5
|
+
export interface FencyOptions {
|
|
6
|
+
publishableKey: string;
|
|
7
|
+
endpoint?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Context for Fency instance
|
|
11
|
+
*/
|
|
12
|
+
export interface FencyContext {
|
|
13
|
+
fency: FencyInstance;
|
|
14
|
+
loading: boolean;
|
|
15
|
+
error: Error | null;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Props for FencyProvider
|
|
19
|
+
*/
|
|
20
|
+
export interface FencyProviderProps {
|
|
21
|
+
fency: Promise<FencyInstance>;
|
|
22
|
+
children: React.ReactNode;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFency.d.ts","sourceRoot":"","sources":["../src/useFency.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C;;GAEG;AACH,wBAAgB,QAAQ,IAAI,YAAY,CAMvC"}
|
package/dist/useFency.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { FencyContextValue } from './FencyProvider';
|
|
3
|
+
/**
|
|
4
|
+
* Hook to access Fency instance and loading state
|
|
5
|
+
*/
|
|
6
|
+
export function useFency() {
|
|
7
|
+
const context = useContext(FencyContextValue);
|
|
8
|
+
if (context === undefined) {
|
|
9
|
+
throw new Error('useFency must be used within a FencyProvider');
|
|
10
|
+
}
|
|
11
|
+
return context;
|
|
12
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fencyai/react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "React components for Fency integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -44,11 +44,9 @@
|
|
|
44
44
|
"author": "",
|
|
45
45
|
"license": "MIT",
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@fencyai/js": "^0.1.2",
|
|
48
47
|
"react": "^18.0.0"
|
|
49
48
|
},
|
|
50
49
|
"devDependencies": {
|
|
51
|
-
"@fencyai/js": "^0.1.4",
|
|
52
50
|
"@types/node": "^20.10.0",
|
|
53
51
|
"@types/react": "^18.0.0",
|
|
54
52
|
"esbuild": "^0.19.0",
|