obi-sdk 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../node_modules/react/cjs/react.production.min.js","../../node_modules/react/index.js","../../src/integration/react/hooks.ts","../../src/integration/react/components.tsx","../../src/index.ts"],"sourcesContent":["/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)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,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","// This is a mock import to satisfy TypeScript without React installed\n// When consuming this SDK with React, the actual React package will be used\n// React is defined as a peer dependency\ndeclare module \"react\" {\n export function useState<T>(initialState: T): [T, (newState: T) => void]\n export function useEffect(effect: () => void | (() => void), deps?: any[]): void\n}\n\nimport { useEffect, useState } from \"react\"\n\nimport { EventType, ObiSDKConfig, SDKState } from \"../../core/types\"\nimport { ObiSDK } from \"../../core/sdk\"\nimport { ObiError } from \"../../core/types\"\n\n// React hook for using the Obi SDK\nexport function useObiSDK(config?: Partial<ObiSDKConfig>) {\n const [sdk, setSDK] = useState<ObiSDK | null>(null)\n const [state, setState] = useState<SDKState>(SDKState.READY)\n const [error, setError] = useState<ObiError | null>(null)\n\n useEffect(() => {\n const newSDK = new ObiSDK(config)\n\n setSDK(newSDK)\n\n // Initialize SDK\n newSDK.init().catch((err: any) => {\n console.error(\"Failed to initialize Obi SDK:\", err)\n })\n\n // Set up event listeners\n newSDK.on(EventType.STATE_CHANGE, (newState: SDKState) => {\n setState(newState)\n })\n\n newSDK.on(EventType.ERROR, (err: ObiError) => {\n setError(err)\n })\n\n return () => {\n newSDK.dispose()\n }\n }, [])\n\n const startVoiceRecording = async () => {\n if (sdk) {\n return sdk.startVoiceRecording()\n }\n }\n\n const stopVoiceRecording = async () => {\n if (sdk) {\n return sdk.stopVoiceRecording()\n }\n return { transcript: undefined }\n }\n\n const startScreenCapture = async () => {\n if (sdk) {\n return sdk.startScreenCapture()\n }\n }\n\n const stopScreenCapture = async () => {\n if (sdk) {\n return sdk.stopScreenCapture()\n }\n return { screenshot: undefined }\n }\n\n return {\n sdk,\n state,\n error,\n startVoiceRecording,\n stopVoiceRecording,\n startScreenCapture,\n stopScreenCapture,\n isReady: state === SDKState.READY,\n isActive: state !== SDKState.READY,\n isError: state === SDKState.ERROR,\n }\n}\n","import React from \"react\"\n\nimport { SDKState } from \"../../core/types\"\nimport \"../../ui/components/status-widget\"\nimport \"../../ui/components/control-panel\"\nimport { useObiSDK } from \"./hooks\"\n\n// Ensure the web components are properly typed\ndeclare global {\n namespace JSX {\n interface IntrinsicElements {\n \"obi-status-widget\": React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLElement> & { state?: SDKState },\n HTMLElement\n >\n \"obi-control-panel\": React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLElement> & {\n state?: SDKState\n voiceEnabled?: boolean\n screenEnabled?: boolean\n onvoicestart?: (e: Event) => void\n onscreenstart?: (e: Event) => void\n onstop?: (e: Event) => void\n },\n HTMLElement\n >\n }\n }\n}\n\nexport interface ObiStatusWidgetProps {\n state?: SDKState\n className?: string\n}\n\nexport function ObiStatusWidgetReact({ state = SDKState.READY, className }: ObiStatusWidgetProps) {\n return <obi-status-widget state={state} className={className} />\n}\n\nexport interface ObiControlPanelProps {\n state?: SDKState\n voiceEnabled?: boolean\n screenEnabled?: boolean\n onVoiceStart?: () => void\n onScreenStart?: () => void\n onStop?: () => void\n className?: string\n}\n\nexport function ObiControlPanelReact({\n state = SDKState.READY,\n voiceEnabled = true,\n screenEnabled = true,\n onVoiceStart,\n onScreenStart,\n onStop,\n className,\n}: ObiControlPanelProps) {\n const handleVoiceStart = () => {\n if (onVoiceStart) onVoiceStart()\n }\n\n const handleScreenStart = () => {\n if (onScreenStart) onScreenStart()\n }\n\n const handleStop = () => {\n if (onStop) onStop()\n }\n\n return (\n <obi-control-panel\n state={state}\n voiceEnabled={voiceEnabled}\n screenEnabled={screenEnabled}\n onvoicestart={handleVoiceStart}\n onscreenstart={handleScreenStart}\n onstop={handleStop}\n className={className}\n />\n )\n}\n\n// A ready-to-use React component that combines the SDK and UI\nexport function ObiWidget() {\n const {\n state,\n startVoiceRecording,\n startScreenCapture,\n stopVoiceRecording,\n stopScreenCapture,\n isActive,\n } = useObiSDK()\n\n const handleVoiceStart = () => {\n startVoiceRecording()\n }\n\n const handleScreenStart = () => {\n startScreenCapture()\n }\n\n const handleStop = () => {\n if (isActive) {\n stopVoiceRecording()\n stopScreenCapture()\n }\n }\n\n return (\n <div className=\"obi-widget\">\n <ObiStatusWidgetReact state={state} />\n <ObiControlPanelReact\n state={state}\n onVoiceStart={handleVoiceStart}\n onScreenStart={handleScreenStart}\n onStop={handleStop}\n />\n </div>\n )\n}\n","export * from \"./core\"\nexport { ObiWidget } from \"./ui/components/obi-widget\"\nexport * from \"./integration\"\n\nexport const VERSION = \"0.1.0\"\n\nexport { ObiSDK } from \"./core/sdk\"\nexport { ObiAssistant } from \"./core/assistant\"\nexport type { ObiSession } from \"./core/session\"\nexport type { ObiAssistantConfig } from \"./core/assistant\"\nexport { EventType, SDKState } from \"./core/types\"\n\n// Include UI components\nexport * from \"./ui/components\"\n\n// Add a lightweight session factory that dynamically imports the heavy session implementation\nexport const createSession = async (options = {}) => {\n // Dynamically import the session module only when needed\n const { ObiSession } = await import(\"./core/session\")\n return new ObiSession(options)\n}\n"],"names":["A","C","D","b","e","d","c","g","f","N","O","a","reactModule","require$$0","useState","useEffect","n"],"mappings":";;;;;;;;;;;AASa,IAAI,IAAE,OAAO,IAAI,eAAe,GAAE,IAAE,OAAO,IAAI,cAAc,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAE,IAAE,OAAO,IAAI,mBAAmB,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAE,IAAE,OAAO,IAAI,eAAe,GAAE,IAAE,OAAO,IAAI,mBAAmB,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAE,IAAE,OAAO,IAAI,YAAY,GAAE,IAAE,OAAO,IAAI,YAAY,GAAE,IAAE,OAAO;AAAS,SAASA,GAAE,GAAE;AAAC,MAAG,SAAO,KAAG,aAAW,OAAO;AAAE,WAAO;AAAK,MAAE,KAAG,EAAE,CAAC,KAAG,EAAE,YAAY;AAAE,SAAM,eAAa,OAAO,IAAE,IAAE;AAAI;AAC1e,IAAI,IAAE,EAAC,WAAU,WAAU;AAAC,SAAM;AAAE,GAAE,oBAAmB,WAAU;AAAA,GAAG,qBAAoB,WAAU;AAAA,GAAG,iBAAgB,WAAU;AAAA,EAAE,GAAEC,KAAE,OAAO,QAAOC,KAAE,CAAA;AAAG,SAAS,EAAE,GAAEC,IAAEC,IAAE;AAAC,OAAK,QAAM;AAAE,OAAK,UAAQD;AAAE,OAAK,OAAKD;AAAE,OAAK,UAAQE,MAAG;AAAC;AAAC,EAAE,UAAU,mBAAiB;AACnQ,EAAE,UAAU,WAAS,SAAS,GAAED,IAAE;AAAC,MAAG,aAAW,OAAO,KAAG,eAAa,OAAO,KAAG,QAAM;AAAE,UAAM,MAAM,uHAAuH;AAAE,OAAK,QAAQ,gBAAgB,MAAK,GAAEA,IAAE,UAAU;AAAC;AAAE,EAAE,UAAU,cAAY,SAAS,GAAE;AAAC,OAAK,QAAQ,mBAAmB,MAAK,GAAE,aAAa;AAAC;AAAE,SAAS,IAAG;AAAA;AAAE,EAAE,YAAU,EAAE;AAAU,SAAS,EAAE,GAAEA,IAAEC,IAAE;AAAC,OAAK,QAAM;AAAE,OAAK,UAAQD;AAAE,OAAK,OAAKD;AAAE,OAAK,UAAQE,MAAG;AAAC;AAAC,IAAI,IAAE,EAAE,YAAU,IAAI;AACrf,EAAE,cAAY;AAAEH,GAAE,GAAE,EAAE,SAAS;AAAE,EAAE,uBAAqB;AAAG,IAAI,IAAE,MAAM,SAAQ,IAAE,OAAO,UAAU,gBAAe,IAAE,EAAC,SAAQ,KAAI,GAAE,IAAE,EAAC,KAAI,MAAG,KAAI,MAAG,QAAO,MAAG,UAAS,KAAE;AACxK,SAAS,EAAE,GAAEE,IAAEC,IAAE;AAAC,MAAIC,IAAEC,KAAE,CAAA,GAAG,IAAE,MAAK,IAAE;AAAK,MAAG,QAAMH;AAAE,SAAIE,MAAK,WAASF,GAAE,QAAM,IAAEA,GAAE,MAAK,WAASA,GAAE,QAAM,IAAE,KAAGA,GAAE,MAAKA;AAAE,QAAE,KAAKA,IAAEE,EAAC,KAAG,CAAC,EAAE,eAAeA,EAAC,MAAIC,GAAED,EAAC,IAAEF,GAAEE,EAAC;AAAG,MAAIE,KAAE,UAAU,SAAO;AAAE,MAAG,MAAIA;AAAE,IAAAD,GAAE,WAASF;AAAA,WAAU,IAAEG,IAAE;AAAC,aAAQC,KAAE,MAAMD,EAAC,GAAE,IAAE,GAAE,IAAEA,IAAE;AAAI,MAAAC,GAAE,CAAC,IAAE,UAAU,IAAE,CAAC;AAAE,IAAAF,GAAE,WAASE;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE;AAAa,SAAIH,MAAKE,KAAE,EAAE,cAAaA;AAAE,iBAASD,GAAED,EAAC,MAAIC,GAAED,EAAC,IAAEE,GAAEF,EAAC;AAAG,SAAM,EAAC,UAAS,GAAE,MAAK,GAAE,KAAI,GAAE,KAAI,GAAE,OAAMC,IAAE,QAAO,EAAE,QAAO;AAAC;AAC7a,SAASG,GAAE,GAAEN,IAAE;AAAC,SAAM,EAAC,UAAS,GAAE,MAAK,EAAE,MAAK,KAAIA,IAAE,KAAI,EAAE,KAAI,OAAM,EAAE,OAAM,QAAO,EAAE,OAAM;AAAC;AAAC,SAASO,GAAE,GAAE;AAAC,SAAM,aAAW,OAAO,KAAG,SAAO,KAAG,EAAE,aAAW;AAAC;AAAC,SAAS,OAAO,GAAE;AAAC,MAAIP,KAAE,EAAC,KAAI,MAAK,KAAI,KAAI;AAAE,SAAM,MAAI,EAAE,QAAQ,SAAQ,SAASQ,IAAE;AAAC,WAAOR,GAAEQ,EAAC;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,IAAE;AAAO,SAAS,EAAE,GAAER,IAAE;AAAC,SAAM,aAAW,OAAO,KAAG,SAAO,KAAG,QAAM,EAAE,MAAI,OAAO,KAAG,EAAE,GAAG,IAAEA,GAAE,SAAS,EAAE;AAAC;AAC/W,SAAS,EAAE,GAAEA,IAAEC,IAAEC,IAAEC,IAAE;AAAC,MAAI,IAAE,OAAO;AAAE,MAAG,gBAAc,KAAG,cAAY;AAAE,QAAE;AAAK,MAAI,IAAE;AAAG,MAAG,SAAO;AAAE,QAAE;AAAA;AAAQ,YAAO,GAAC;AAAA,MAAE,KAAK;AAAA,MAAS,KAAK;AAAS,YAAE;AAAG;AAAA,MAAM,KAAK;AAAS,gBAAO,EAAE,UAAU;AAAA,UAAA,KAAK;AAAA,UAAE,KAAK;AAAE,gBAAE;AAAA,QAAE;AAAA,IAAC;AAAC,MAAG;AAAE,WAAO,IAAE,GAAEA,KAAEA,GAAE,CAAC,GAAE,IAAE,OAAKD,KAAE,MAAI,EAAE,GAAE,CAAC,IAAEA,IAAE,EAAEC,EAAC,KAAGF,KAAE,IAAG,QAAM,MAAIA,KAAE,EAAE,QAAQ,GAAE,KAAK,IAAE,MAAK,EAAEE,IAAEH,IAAEC,IAAE,IAAG,SAASO,IAAE;AAAC,aAAOA;AAAA,IAAC,CAAC,KAAG,QAAML,OAAII,GAAEJ,EAAC,MAAIA,KAAEG,GAAEH,IAAEF,MAAG,CAACE,GAAE,OAAK,KAAG,EAAE,QAAMA,GAAE,MAAI,MAAI,KAAGA,GAAE,KAAK,QAAQ,GAAE,KAAK,IAAE,OAAK,CAAC,IAAGH,GAAE,KAAKG,EAAC,IAAG;AAAE,MAAE;AAAE,EAAAD,KAAE,OAAKA,KAAE,MAAIA,KAAE;AAAI,MAAG,EAAE,CAAC;AAAE,aAAQE,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,UACrf,EAAEA,EAAC;AAAE,UAAIC,KAAEH,KAAE,EAAE,GAAEE,EAAC;AAAE,WAAG,EAAE,GAAEJ,IAAEC,IAAEI,IAAEF,EAAC;AAAA,IAAC;AAAA,WAASE,KAAER,GAAE,CAAC,GAAE,eAAa,OAAOQ;AAAE,SAAI,IAAEA,GAAE,KAAK,CAAC,GAAED,KAAE,GAAE,EAAE,IAAE,EAAE,QAAQ;AAAM,UAAE,EAAE,OAAMC,KAAEH,KAAE,EAAE,GAAEE,IAAG,GAAE,KAAG,EAAE,GAAEJ,IAAEC,IAAEI,IAAEF,EAAC;AAAA,WAAU,aAAW;AAAE,UAAMH,KAAE,OAAO,CAAC,GAAE,MAAM,qDAAmD,sBAAoBA,KAAE,uBAAqB,OAAO,KAAK,CAAC,EAAE,KAAK,IAAI,IAAE,MAAIA,MAAG,2EAA2E;AAAE,SAAO;AAAC;AACzZ,SAAS,EAAE,GAAEA,IAAEC,IAAE;AAAC,MAAG,QAAM;AAAE,WAAO;AAAE,MAAIC,KAAE,CAAE,GAACC,KAAE;AAAE,IAAE,GAAED,IAAE,IAAG,IAAG,SAASM,IAAE;AAAC,WAAOR,GAAE,KAAKC,IAAEO,IAAEL,IAAG;AAAA,EAAC,CAAC;AAAE,SAAOD;AAAC;AAAC,SAAS,EAAE,GAAE;AAAC,MAAG,OAAK,EAAE,SAAQ;AAAC,QAAIF,KAAE,EAAE;AAAQ,IAAAA,KAAEA,GAAG;AAAC,IAAAA,GAAE,KAAK,SAASA,IAAE;AAAC,UAAG,MAAI,EAAE,WAAS,OAAK,EAAE;AAAQ,UAAE,UAAQ,GAAE,EAAE,UAAQA;AAAA,IAAC,GAAE,SAASA,IAAE;AAAC,UAAG,MAAI,EAAE,WAAS,OAAK,EAAE;AAAQ,UAAE,UAAQ,GAAE,EAAE,UAAQA;AAAA,IAAC,CAAC;AAAE,WAAK,EAAE,YAAU,EAAE,UAAQ,GAAE,EAAE,UAAQA;AAAA,EAAE;AAAC,MAAG,MAAI,EAAE;AAAQ,WAAO,EAAE,QAAQ;AAAQ,QAAM,EAAE;AAAQ;AAC5Z,IAAI,IAAE,EAAC,SAAQ,KAAI,GAAE,IAAE,EAAC,YAAW,KAAI,GAAE,IAAE,EAAC,wBAAuB,GAAE,yBAAwB,GAAE,mBAAkB,EAAC;AAAE,SAAS,IAAG;AAAC,QAAM,MAAM,0DAA0D;AAAE;AACzM,qBAAA,WAAiB,EAAC,KAAI,GAAE,SAAQ,SAAS,GAAEA,IAAEC,IAAE;AAAC,IAAE,GAAE,WAAU;AAAC,IAAAD,GAAE,MAAM,MAAK,SAAS;AAAA,EAAC,GAAEC,EAAC;AAAC,GAAE,OAAM,SAAS,GAAE;AAAC,MAAID,KAAE;AAAE,IAAE,GAAE,WAAU;AAAC,IAAAA;AAAA,EAAG,CAAC;AAAE,SAAOA;AAAC,GAAE,SAAQ,SAAS,GAAE;AAAC,SAAO,EAAE,GAAE,SAASQ,IAAE;AAAC,WAAOA;AAAA,EAAC,CAAC,KAAG;AAAE,GAAE,MAAK,SAAS,GAAE;AAAC,MAAG,CAACD,GAAE,CAAC;AAAE,UAAM,MAAM,uEAAuE;AAAE,SAAO;AAAC,EAAC;AAAE,qBAAA,YAAkB;AAAE,qBAAA,WAAiB;AAAkB,qBAAA,WAAC;AAAuB,qBAAA,gBAAC;AAAoB,qBAAA,aAAC;AAAkB,qBAAA,WAAC;AAClc,qBAAA,qDAA2D;AAAa,qBAAA,MAAC;AACrD,qBAAA,eAAC,SAAS,GAAEP,IAAEC,IAAE;AAAC,MAAG,SAAO,KAAG,WAAS;AAAE,UAAM,MAAM,mFAAiF,IAAE,GAAG;AAAE,MAAIC,KAAEJ,GAAE,CAAA,GAAG,EAAE,KAAK,GAAEK,KAAE,EAAE,KAAI,IAAE,EAAE,KAAI,IAAE,EAAE;AAAO,MAAG,QAAMH,IAAE;AAAC,eAASA,GAAE,QAAM,IAAEA,GAAE,KAAI,IAAE,EAAE;AAAS,eAASA,GAAE,QAAMG,KAAE,KAAGH,GAAE;AAAK,QAAG,EAAE,QAAM,EAAE,KAAK;AAAa,UAAII,KAAE,EAAE,KAAK;AAAa,SAAIC,MAAKL;AAAE,QAAE,KAAKA,IAAEK,EAAC,KAAG,CAAC,EAAE,eAAeA,EAAC,MAAIH,GAAEG,EAAC,IAAE,WAASL,GAAEK,EAAC,KAAG,WAASD,KAAEA,GAAEC,EAAC,IAAEL,GAAEK,EAAC;AAAA,EAAE;AAAC,MAAIA,KAAE,UAAU,SAAO;AAAE,MAAG,MAAIA;AAAE,IAAAH,GAAE,WAASD;AAAA,WAAU,IAAEI,IAAE;AAAC,IAAAD,KAAE,MAAMC,EAAC;AACtf,aAAQ,IAAE,GAAE,IAAEA,IAAE;AAAI,MAAAD,GAAE,CAAC,IAAE,UAAU,IAAE,CAAC;AAAE,IAAAF,GAAE,WAASE;AAAA,EAAC;AAAC,SAAM,EAAC,UAAS,GAAE,MAAK,EAAE,MAAK,KAAID,IAAE,KAAI,GAAE,OAAMD,IAAE,QAAO,EAAC;AAAC;AAAE,qBAAA,gBAAsB,SAAS,GAAE;AAAC,MAAE,EAAC,UAAS,GAAE,eAAc,GAAE,gBAAe,GAAE,cAAa,GAAE,UAAS,MAAK,UAAS,MAAK,eAAc,MAAK,aAAY,KAAI;AAAE,IAAE,WAAS,EAAC,UAAS,GAAE,UAAS,EAAC;AAAE,SAAO,EAAE,WAAS;AAAC;AAAuB,qBAAA,gBAAC;qCAAwB,SAAS,GAAE;AAAC,MAAIF,KAAE,EAAE,KAAK,MAAK,CAAC;AAAE,EAAAA,GAAE,OAAK;AAAE,SAAOA;AAAC;AAAmB,qBAAA,YAAC,WAAU;AAAC,SAAM,EAAC,SAAQ,KAAI;AAAC;AAC9d,qBAAA,aAAmB,SAAS,GAAE;AAAC,SAAM,EAAC,UAAS,GAAE,QAAO,EAAC;AAAC;AAAE,qBAAA,iBAAuBO;AAAc,qBAAA,OAAC,SAAS,GAAE;AAAC,SAAM,EAAC,UAAS,GAAE,UAAS,EAAC,SAAQ,IAAG,SAAQ,EAAC,GAAE,OAAM,EAAC;AAAC;AAAE,qBAAA,OAAa,SAAS,GAAEP,IAAE;AAAC,SAAM,EAAC,UAAS,GAAE,MAAK,GAAE,SAAQ,WAASA,KAAE,OAAKA,GAAC;AAAC;AAAE,qBAAA,kBAAwB,SAAS,GAAE;AAAC,MAAIA,KAAE,EAAE;AAAW,IAAE,aAAW;AAAG,MAAG;AAAC;EAAG,UAAC;AAAQ,MAAE,aAAWA;AAAA,EAAC;AAAC;AAAsB,qBAAA,eAAC;mCAAsB,SAAS,GAAEA,IAAE;AAAC,SAAO,EAAE,QAAQ,YAAY,GAAEA,EAAC;AAAC;AAAoB,qBAAA,aAAC,SAAS,GAAE;AAAC,SAAO,EAAE,QAAQ,WAAW,CAAC;AAAC;AACte,qBAAA,gBAAC,WAAU;AAAG;AAAA,qBAAA,mBAAyB,SAAS,GAAE;AAAC,SAAO,EAAE,QAAQ,iBAAiB,CAAC;AAAC;AAAmB,qBAAA,YAAC,SAAS,GAAEA,IAAE;AAAC,SAAO,EAAE,QAAQ,UAAU,GAAEA,EAAC;AAAC;AAAe,qBAAA,QAAC,WAAU;AAAC,SAAO,EAAE,QAAQ,MAAO;AAAA;AAAE,qBAAA,sBAA4B,SAAS,GAAEA,IAAEC,IAAE;AAAC,SAAO,EAAE,QAAQ,oBAAoB,GAAED,IAAEC,EAAC;AAAC;AAAE,qBAAA,qBAA2B,SAAS,GAAED,IAAE;AAAC,SAAO,EAAE,QAAQ,mBAAmB,GAAEA,EAAC;AAAC;AAAyB,qBAAA,kBAAC,SAAS,GAAEA,IAAE;AAAC,SAAO,EAAE,QAAQ,gBAAgB,GAAEA,EAAC;AAAC;AAC1c,qBAAA,UAAC,SAAS,GAAEA,IAAE;AAAC,SAAO,EAAE,QAAQ,QAAQ,GAAEA,EAAC;AAAC;AAAoB,qBAAA,aAAC,SAAS,GAAEA,IAAEC,IAAE;AAAC,SAAO,EAAE,QAAQ,WAAW,GAAED,IAAEC,EAAC;AAAC;AAAgB,qBAAA,SAAC,SAAS,GAAE;AAAC,SAAO,EAAE,QAAQ,OAAO,CAAC;AAAC;AAAkB,qBAAA,WAAC,SAAS,GAAE;AAAC,SAAO,EAAE,QAAQ,SAAS,CAAC;AAAC;AAAE,qBAAA,uBAA6B,SAAS,GAAED,IAAEC,IAAE;AAAC,SAAO,EAAE,QAAQ,qBAAqB,GAAED,IAAEC,EAAC;AAAC;AAAE,qBAAA,gBAAsB,WAAU;AAAC,SAAO,EAAE,QAAQ,cAAe;AAAA;AAAiB,qBAAA,UAAC;ACvBzX;AACzCQ,QAAA,UAAiBC;AACnB;;;ACWO,SAAS,UAAU,QAAgC;AACxD,QAAM,CAAC,KAAK,MAAM,IAAIC,sBAAwB,IAAI;AAClD,QAAM,CAAC,OAAO,QAAQ,IAAIA,aAAAA,SAAmB,SAAS,KAAK;AAC3D,QAAM,CAAC,OAAO,QAAQ,IAAIA,sBAA0B,IAAI;AAExDC,eAAAA,UAAU,MAAM;AACR,UAAA,SAAS,IAAI,OAAO,MAAM;AAEhC,WAAO,MAAM;AAGb,WAAO,KAAK,EAAE,MAAM,CAAC,QAAa;AACxB,cAAA,MAAM,iCAAiC,GAAG;AAAA,IAAA,CACnD;AAGD,WAAO,GAAG,UAAU,cAAc,CAAC,aAAuB;AACxD,eAAS,QAAQ;AAAA,IAAA,CAClB;AAED,WAAO,GAAG,UAAU,OAAO,CAAC,QAAkB;AAC5C,eAAS,GAAG;AAAA,IAAA,CACb;AAED,WAAO,MAAM;AACX,aAAO,QAAQ;AAAA,IAAA;AAAA,EAEnB,GAAG,CAAE,CAAA;AAEL,QAAM,sBAAsB,YAAY;AACtC,QAAI,KAAK;AACP,aAAO,IAAI;IACb;AAAA,EAAA;AAGF,QAAM,qBAAqB,YAAY;AACrC,QAAI,KAAK;AACP,aAAO,IAAI;IACb;AACO,WAAA,EAAE,YAAY;EAAU;AAGjC,QAAM,qBAAqB,YAAY;AACrC,QAAI,KAAK;AACP,aAAO,IAAI;IACb;AAAA,EAAA;AAGF,QAAM,oBAAoB,YAAY;AACpC,QAAI,KAAK;AACP,aAAO,IAAI;IACb;AACO,WAAA,EAAE,YAAY;EAAU;AAG1B,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,UAAU,SAAS;AAAA,IAC5B,UAAU,UAAU,SAAS;AAAA,IAC7B,SAAS,UAAU,SAAS;AAAA,EAAA;AAEhC;AC/CO,SAAS,qBAAqB,EAAE,QAAQ,SAAS,OAAO,aAAmC;AACzF,SAAA,sBAAA,cAAC,qBAAkB,EAAA,OAAc,UAAsB,CAAA;AAChE;AAYO,SAAS,qBAAqB;AAAA,EACnC,QAAQ,SAAS;AAAA,EACjB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,QAAM,mBAAmB,MAAM;AACzB,QAAA;AAA2B;EAAA;AAGjC,QAAM,oBAAoB,MAAM;AAC1B,QAAA;AAA6B;EAAA;AAGnC,QAAM,aAAa,MAAM;AACnB,QAAA;AAAe;EAAA;AAInB,SAAA,sBAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc;AAAA,MACd,eAAe;AAAA,MACf,QAAQ;AAAA,MACR;AAAA,IAAA;AAAA,EAAA;AAGN;AC7EO,MAAM,UAAU;AAYhB,MAAM,gBAAgB,OAAO,UAAU,OAAO;AAEnD,QAAM,EAAE,WAAA,IAAe,MAAM,OAAO,8BAAgB,EAAA,KAAA,CAAAC,OAAAA,GAAA,CAAA;AAC7C,SAAA,IAAI,WAAW,OAAO;AAC/B;","x_google_ignoreList":[0,1]}
@@ -0,0 +1,252 @@
1
+ import { i, n, a as i$1, S as SDKState, x } from "./chunks/obi-widget-9c0306f4.js";
2
+ import { A, C, d, e, D, N, b, O, c } from "./chunks/obi-widget-9c0306f4.js";
3
+ var __defProp$1 = Object.defineProperty;
4
+ var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
5
+ var __decorateClass$1 = (decorators, target, key, kind) => {
6
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target;
7
+ for (var i2 = decorators.length - 1, decorator; i2 >= 0; i2--)
8
+ if (decorator = decorators[i2])
9
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
10
+ if (kind && result)
11
+ __defProp$1(target, key, result);
12
+ return result;
13
+ };
14
+ class ObiStatusWidget extends i$1 {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.state = SDKState.READY;
18
+ }
19
+ render() {
20
+ return x`
21
+ <div class="status-container">
22
+ <div class="status-indicator ${this.state}"></div>
23
+ <div class="status-text">${this.getStatusText()}</div>
24
+ </div>
25
+ `;
26
+ }
27
+ getStatusText() {
28
+ switch (this.state) {
29
+ case SDKState.READY:
30
+ return "Ready";
31
+ case SDKState.ERROR:
32
+ return "Error";
33
+ default:
34
+ return "Unknown";
35
+ }
36
+ }
37
+ }
38
+ ObiStatusWidget.styles = i`
39
+ :host {
40
+ display: inline-block;
41
+ font-family: Arial, sans-serif;
42
+ }
43
+
44
+ .status-container {
45
+ display: flex;
46
+ align-items: center;
47
+ padding: 8px 12px;
48
+ border-radius: 16px;
49
+ background-color: #f3f4f6;
50
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
51
+ }
52
+
53
+ .status-indicator {
54
+ width: 10px;
55
+ height: 10px;
56
+ border-radius: 50%;
57
+ margin-right: 8px;
58
+ }
59
+
60
+ .ready {
61
+ background-color: #10b981;
62
+ }
63
+
64
+ .active {
65
+ background-color: #3b82f6;
66
+ }
67
+
68
+ .error {
69
+ background-color: #ef4444;
70
+ }
71
+
72
+ .status-text {
73
+ font-size: 14px;
74
+ font-weight: 500;
75
+ color: #1f2937;
76
+ }
77
+ `;
78
+ __decorateClass$1([
79
+ n({ type: String })
80
+ ], ObiStatusWidget.prototype, "state", 2);
81
+ if (!customElements.get("obi-status-widget")) {
82
+ customElements.define("obi-status-widget", ObiStatusWidget);
83
+ }
84
+ const statusWidget = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
85
+ __proto__: null,
86
+ ObiStatusWidget
87
+ }, Symbol.toStringTag, { value: "Module" }));
88
+ var __defProp = Object.defineProperty;
89
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
90
+ var __decorateClass = (decorators, target, key, kind) => {
91
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
92
+ for (var i2 = decorators.length - 1, decorator; i2 >= 0; i2--)
93
+ if (decorator = decorators[i2])
94
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
95
+ if (kind && result)
96
+ __defProp(target, key, result);
97
+ return result;
98
+ };
99
+ class ObiControlPanel extends i$1 {
100
+ constructor() {
101
+ super(...arguments);
102
+ this.state = SDKState.READY;
103
+ this.voiceEnabled = true;
104
+ this.screenEnabled = true;
105
+ }
106
+ render() {
107
+ const isActive = this.state === SDKState.AGENT_SPEAKING;
108
+ const isReady = this.state === SDKState.READY;
109
+ return x`
110
+ <div class="control-container">
111
+ <div class="control-header">Obi Controls</div>
112
+ <div class="control-buttons">
113
+ <button
114
+ class="btn-voice"
115
+ ?disabled=${!isReady || !this.voiceEnabled}
116
+ @click=${this.handleVoiceClick}
117
+ >
118
+ Start Voice
119
+ </button>
120
+
121
+ <button
122
+ class="btn-screen"
123
+ ?disabled=${!isReady || !this.screenEnabled}
124
+ @click=${this.handleScreenClick}
125
+ >
126
+ Capture Screen
127
+ </button>
128
+
129
+ <button class="btn-stop" ?disabled=${!isActive} @click=${this.handleStopClick}>
130
+ Stop
131
+ </button>
132
+ </div>
133
+ </div>
134
+ `;
135
+ }
136
+ handleVoiceClick() {
137
+ this.dispatchEvent(new CustomEvent("voice-start"));
138
+ }
139
+ handleScreenClick() {
140
+ this.dispatchEvent(new CustomEvent("screen-start"));
141
+ }
142
+ handleStopClick() {
143
+ this.dispatchEvent(new CustomEvent("stop"));
144
+ }
145
+ }
146
+ ObiControlPanel.styles = i`
147
+ :host {
148
+ display: block;
149
+ font-family: Arial, sans-serif;
150
+ --obi-primary: #3b82f6;
151
+ --obi-danger: #ef4444;
152
+ --obi-gray: #6b7280;
153
+ }
154
+
155
+ .control-container {
156
+ display: flex;
157
+ flex-direction: column;
158
+ padding: 16px;
159
+ border-radius: 8px;
160
+ background-color: #ffffff;
161
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
162
+ max-width: 300px;
163
+ }
164
+
165
+ .control-header {
166
+ margin-bottom: 16px;
167
+ font-size: 16px;
168
+ font-weight: 600;
169
+ color: #111827;
170
+ }
171
+
172
+ .control-buttons {
173
+ display: flex;
174
+ gap: 8px;
175
+ margin-bottom: 16px;
176
+ }
177
+
178
+ button {
179
+ padding: 8px 12px;
180
+ border: none;
181
+ border-radius: 4px;
182
+ font-size: 14px;
183
+ font-weight: 500;
184
+ cursor: pointer;
185
+ transition:
186
+ background-color 0.2s,
187
+ opacity 0.2s;
188
+ }
189
+
190
+ button:disabled {
191
+ opacity: 0.5;
192
+ cursor: not-allowed;
193
+ }
194
+
195
+ .btn-voice {
196
+ background-color: var(--obi-primary);
197
+ color: white;
198
+ }
199
+
200
+ .btn-screen {
201
+ background-color: var(--obi-primary);
202
+ color: white;
203
+ }
204
+
205
+ .btn-stop {
206
+ background-color: var(--obi-danger);
207
+ color: white;
208
+ }
209
+ `;
210
+ __decorateClass([
211
+ n({ type: String })
212
+ ], ObiControlPanel.prototype, "state", 2);
213
+ __decorateClass([
214
+ n({ type: Boolean })
215
+ ], ObiControlPanel.prototype, "voiceEnabled", 2);
216
+ __decorateClass([
217
+ n({ type: Boolean })
218
+ ], ObiControlPanel.prototype, "screenEnabled", 2);
219
+ if (!customElements.get("obi-control-panel")) {
220
+ customElements.define("obi-control-panel", ObiControlPanel);
221
+ }
222
+ const controlPanel = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
223
+ __proto__: null,
224
+ ObiControlPanel
225
+ }, Symbol.toStringTag, { value: "Module" }));
226
+ function defineCustomElements() {
227
+ Promise.resolve().then(() => statusWidget);
228
+ Promise.resolve().then(() => controlPanel);
229
+ import("./chunks/obi-widget-9c0306f4.js").then((n2) => n2.p);
230
+ import("./chunks/obi-widget-9c0306f4.js").then((n2) => n2.m);
231
+ import("./chunks/obi-widget-9c0306f4.js").then((n2) => n2.o);
232
+ import("./chunks/obi-widget-9c0306f4.js").then((n2) => n2.h);
233
+ import("./chunks/obi-widget-9c0306f4.js").then((n2) => n2.j);
234
+ import("./chunks/obi-widget-9c0306f4.js").then((n2) => n2.s);
235
+ import("./chunks/obi-widget-9c0306f4.js").then((n2) => n2.k);
236
+ import("./chunks/obi-widget-9c0306f4.js").then((n2) => n2.l);
237
+ }
238
+ export {
239
+ A as AudioEqualizer,
240
+ C as Course,
241
+ d as CourseList,
242
+ e as CourseModal,
243
+ D as DotLoader,
244
+ N as NavIcon,
245
+ b as NavigationBar,
246
+ ObiControlPanel,
247
+ ObiStatusWidget,
248
+ O as ObiWidget,
249
+ c as SearchingLoader,
250
+ defineCustomElements
251
+ };
252
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sources":["../../src/ui/components/status-widget.ts","../../src/ui/components/control-panel.ts","../../src/ui/components/index.ts"],"sourcesContent":["import { LitElement, html, css } from \"lit\"\nimport { property } from \"lit/decorators.js\"\n\nimport { SDKState } from \"../../core/types\"\n\nexport class ObiStatusWidget extends LitElement {\n @property({ type: String })\n state: SDKState = SDKState.READY\n\n static styles = css`\n :host {\n display: inline-block;\n font-family: Arial, sans-serif;\n }\n\n .status-container {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n border-radius: 16px;\n background-color: #f3f4f6;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n }\n\n .status-indicator {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n margin-right: 8px;\n }\n\n .ready {\n background-color: #10b981;\n }\n\n .active {\n background-color: #3b82f6;\n }\n\n .error {\n background-color: #ef4444;\n }\n\n .status-text {\n font-size: 14px;\n font-weight: 500;\n color: #1f2937;\n }\n `\n\n render() {\n return html`\n <div class=\"status-container\">\n <div class=\"status-indicator ${this.state}\"></div>\n <div class=\"status-text\">${this.getStatusText()}</div>\n </div>\n `\n }\n\n private getStatusText(): string {\n switch (this.state) {\n case SDKState.READY:\n return \"Ready\"\n case SDKState.ERROR:\n return \"Error\"\n default:\n return \"Unknown\"\n }\n }\n}\n\nif (!customElements.get(\"obi-status-widget\")) {\n customElements.define(\"obi-status-widget\", ObiStatusWidget)\n}\n","import { LitElement, html, css } from \"lit\"\nimport { property } from \"lit/decorators.js\"\n\nimport { SDKState } from \"../../core/types\"\n\nexport class ObiControlPanel extends LitElement {\n @property({ type: String })\n state: SDKState = SDKState.READY\n\n @property({ type: Boolean })\n voiceEnabled: boolean = true\n\n @property({ type: Boolean })\n screenEnabled: boolean = true\n\n static styles = css`\n :host {\n display: block;\n font-family: Arial, sans-serif;\n --obi-primary: #3b82f6;\n --obi-danger: #ef4444;\n --obi-gray: #6b7280;\n }\n\n .control-container {\n display: flex;\n flex-direction: column;\n padding: 16px;\n border-radius: 8px;\n background-color: #ffffff;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n max-width: 300px;\n }\n\n .control-header {\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: 600;\n color: #111827;\n }\n\n .control-buttons {\n display: flex;\n gap: 8px;\n margin-bottom: 16px;\n }\n\n button {\n padding: 8px 12px;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition:\n background-color 0.2s,\n opacity 0.2s;\n }\n\n button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-voice {\n background-color: var(--obi-primary);\n color: white;\n }\n\n .btn-screen {\n background-color: var(--obi-primary);\n color: white;\n }\n\n .btn-stop {\n background-color: var(--obi-danger);\n color: white;\n }\n `\n\n render() {\n const isActive = this.state === SDKState.AGENT_SPEAKING\n const isReady = this.state === SDKState.READY\n\n return html`\n <div class=\"control-container\">\n <div class=\"control-header\">Obi Controls</div>\n <div class=\"control-buttons\">\n <button\n class=\"btn-voice\"\n ?disabled=${!isReady || !this.voiceEnabled}\n @click=${this.handleVoiceClick}\n >\n Start Voice\n </button>\n\n <button\n class=\"btn-screen\"\n ?disabled=${!isReady || !this.screenEnabled}\n @click=${this.handleScreenClick}\n >\n Capture Screen\n </button>\n\n <button class=\"btn-stop\" ?disabled=${!isActive} @click=${this.handleStopClick}>\n Stop\n </button>\n </div>\n </div>\n `\n }\n\n private handleVoiceClick() {\n this.dispatchEvent(new CustomEvent(\"voice-start\"))\n }\n\n private handleScreenClick() {\n this.dispatchEvent(new CustomEvent(\"screen-start\"))\n }\n\n private handleStopClick() {\n this.dispatchEvent(new CustomEvent(\"stop\"))\n }\n}\n\nif (!customElements.get(\"obi-control-panel\")) {\n customElements.define(\"obi-control-panel\", ObiControlPanel)\n}\n","export * from \"./status-widget\"\nexport * from \"./control-panel\"\nexport * from \"./obi-widget\"\nexport * from \"./audio-equalizer\"\nexport * from \"./dot-loader\"\nexport * from \"./nav-icon\"\nexport * from \"./navigation-bar\"\nexport * from \"./searching-loader\"\nexport * from \"./courses/courses\"\nexport * from \"./courses/course-modal\"\n\n// Function to define all custom elements at once for development\nexport function defineCustomElements() {\n // Import all components to ensure they're registered\n // This is primarily useful for development\n import(\"./status-widget\")\n import(\"./control-panel\")\n import(\"./obi-widget\")\n import(\"./audio-equalizer\")\n import(\"./dot-loader\")\n import(\"./nav-icon\")\n import(\"./navigation-bar\")\n import(\"./searching-loader\")\n import(\"./courses/courses\")\n import(\"./courses/course-modal\")\n}\n"],"names":["LitElement","html","css","__decorateClass","property","n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var ObiWidgetLoader=function(n){"use strict";const r="https://www.iamobi.ai/api/",d={position:"bottom-right",autoInit:!0};class s{constructor(t={}){this.config={...d,...t},this.widget=null,this.config.autoInit!==!1&&this.init()}async init(){try{await this.loadScript(),this.createWidget(),this.initializeSDK()}catch(t){console.error("Failed to initialize Obi Widget:",t)}}async loadScript(){return new Promise((t,e)=>{if(document.querySelector("script[data-obi-sdk]")){t();return}this.fetchLatestVersion().then(i=>{const o=document.createElement("script");o.type="text/javascript";const c=`https://unpkg.com/obi-sdk@${i||"latest"}/dist/obi-sdk.standalone.iife.js`;o.src=c,o.dataset.obiSdk="true",o.onload=()=>t(),o.onerror=()=>e(new Error("Failed to load Obi SDK script")),document.head.appendChild(o)}).catch(()=>{const i=document.createElement("script");i.type="text/javascript",i.src="https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js",i.dataset.obiSdk="true",i.onload=()=>t(),i.onerror=()=>e(new Error("Failed to load Obi SDK script")),document.head.appendChild(i)})})}async fetchLatestVersion(){try{const t=await fetch("https://registry.npmjs.org/obi-sdk/latest");return t.ok?(await t.json()).version:null}catch(t){return console.warn("Failed to fetch latest version:",t),null}}createWidget(){if(document.querySelector("obi-widget")){this.widget=document.querySelector("obi-widget");return}if(!customElements.get("obi-widget")){console.warn("Obi Widget component not registered - import the component before using the loader");return}const t=document.createElement("obi-widget");this.config.apiKey&&t.setAttribute("api-key",this.config.apiKey),t.setAttribute("api-base-url",r),this.config.position&&t.setAttribute("position",this.config.position),this.config.user&&t.setAttribute("user",JSON.stringify(this.config.user)),document.body.appendChild(t),this.widget=t,console.log("Widget created and added to DOM")}initializeSDK(){if(typeof window.ObiSDK<"u"){const t={apiKey:this.config.apiKey,apiBaseUrl:r};try{const e=new window.ObiSDK(t);window.obiSDKInstance=e}catch(e){console.error("Failed to initialize SDK:",e)}}}initialize(){this.init()}getWidget(){return this.widget}}return document.addEventListener("DOMContentLoaded",()=>{const a=window.obiWidgetConfig||{};new s(a)}),n.ObiWidgetLoader=s,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),n}({});
2
+ //# sourceMappingURL=obi-loader.iife.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obi-loader.iife.js","sources":["../src/loader.ts"],"sourcesContent":["/**\n * Obi Widget Loader Script\n *\n * This script dynamically loads the Obi Widget web component on any webpage\n * with a simple script tag inclusion.\n */\n\n// Configuration with defaults that can be overridden\ninterface ObiWidgetConfig {\n // Position options\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n // API key for authentication\n apiKey?: string\n // Auto-initialize the widget\n autoInit?: boolean\n // User information\n user?: {\n id: string\n email?: string\n metadata?: any\n }\n}\n\n// API Base URL constant\nconst API_BASE_URL = \"https://www.iamobi.ai/api/\"\n\n// Default configuration\nconst DEFAULT_CONFIG: ObiWidgetConfig = {\n position: \"bottom-right\",\n autoInit: true,\n}\n\nclass ObiWidgetLoader {\n private config: ObiWidgetConfig\n private widget: HTMLElement | null\n\n constructor(config: ObiWidgetConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n this.widget = null\n\n // Only auto-initialize if autoInit is true\n if (this.config.autoInit !== false) {\n this.init()\n }\n }\n\n private async init() {\n try {\n await this.loadScript()\n\n // Create and mount the widget\n this.createWidget()\n\n // Initialize the SDK\n this.initializeSDK()\n } catch (error) {\n console.error(\"Failed to initialize Obi Widget:\", error)\n }\n }\n\n private async loadScript() {\n return new Promise<void>((resolve, reject) => {\n // Check if already loaded\n if (document.querySelector(\"script[data-obi-sdk]\")) {\n resolve()\n return\n }\n\n // First fetch the latest version number from npm registry\n this.fetchLatestVersion()\n .then((version) => {\n const script = document.createElement(\"script\")\n // Use a regular script tag (not module) for the IIFE build\n script.type = \"text/javascript\"\n\n // Use the specific version for better caching\n const versionToUse = version || \"latest\"\n const cdnUrl = `https://unpkg.com/obi-sdk@${versionToUse}/dist/obi-sdk.standalone.iife.js`\n\n script.src = cdnUrl\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n\n document.head.appendChild(script)\n })\n .catch(() => {\n // If fetching version fails, fallback to latest\n const script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.src = \"https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js\"\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n document.head.appendChild(script)\n })\n })\n }\n\n // Fetch the latest version from npm registry\n private async fetchLatestVersion(): Promise<string | null> {\n try {\n const response = await fetch(\"https://registry.npmjs.org/obi-sdk/latest\")\n if (response.ok) {\n const data = await response.json()\n return data.version\n }\n return null\n } catch (error) {\n console.warn(\"Failed to fetch latest version:\", error)\n return null\n }\n }\n\n private createWidget() {\n // Don't create multiple widgets\n if (document.querySelector(\"obi-widget\")) {\n this.widget = document.querySelector(\"obi-widget\")\n return\n }\n\n // Check if the component is registered\n if (!customElements.get(\"obi-widget\")) {\n console.warn(\n \"Obi Widget component not registered - import the component before using the loader\"\n )\n return\n }\n\n const widget = document.createElement(\"obi-widget\")\n\n // Pass API key if provided\n if (this.config.apiKey) {\n widget.setAttribute(\"api-key\", this.config.apiKey)\n }\n\n // Set API base URL\n widget.setAttribute(\"api-base-url\", API_BASE_URL)\n\n // Set position attribute\n if (this.config.position) {\n widget.setAttribute(\"position\", this.config.position)\n }\n\n // Set user information if provided\n if (this.config.user) {\n widget.setAttribute(\"user\", JSON.stringify(this.config.user))\n }\n\n // Append to body\n document.body.appendChild(widget)\n this.widget = widget\n console.log(\"Widget created and added to DOM\")\n }\n\n private initializeSDK() {\n // Initialize SDK with config\n if (typeof (window as any).ObiSDK !== \"undefined\") {\n // Define a basic type for the SDK\n type SDKInstance = {\n // Add known properties/methods of your SDK here\n [key: string]: any\n }\n\n // Create the SDK instance with API key only\n const config = {\n apiKey: this.config.apiKey,\n apiBaseUrl: API_BASE_URL,\n }\n\n try {\n const sdk: SDKInstance = new (window as any).ObiSDK(config)\n // Store SDK instance on window for debugging\n ;(window as any).obiSDKInstance = sdk\n } catch (error) {\n console.error(\"Failed to initialize SDK:\", error)\n }\n }\n }\n\n // Public method to manually initialize the widget\n public initialize(): void {\n this.init()\n }\n\n // Add a public method to get the widget element\n public getWidget(): HTMLElement | null {\n return this.widget\n }\n}\n\n// Auto-initialize if config is provided in window.obiWidgetConfig\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const config = (window as any).obiWidgetConfig || {}\n new ObiWidgetLoader(config)\n})\n\n// Export the loader for manual initialization\nexport { ObiWidgetLoader }\n"],"names":["API_BASE_URL","DEFAULT_CONFIG","ObiWidgetLoader","config","error","resolve","reject","version","script","cdnUrl","response","widget","sdk"],"mappings":"6CAwBA,MAAMA,EAAe,6BAGfC,EAAkC,CACtC,SAAU,eACV,SAAU,EACZ,EAEA,MAAMC,CAAgB,CAIpB,YAAYC,EAA0B,GAAI,CACxC,KAAK,OAAS,CAAE,GAAGF,EAAgB,GAAGE,CAAO,EAC7C,KAAK,OAAS,KAGV,KAAK,OAAO,WAAa,IAC3B,KAAK,KAAK,CAEd,CAEA,MAAc,MAAO,CACf,GAAA,CACF,MAAM,KAAK,aAGX,KAAK,aAAa,EAGlB,KAAK,cAAc,QACZC,EAAO,CACN,QAAA,MAAM,mCAAoCA,CAAK,CACzD,CACF,CAEA,MAAc,YAAa,CACzB,OAAO,IAAI,QAAc,CAACC,EAASC,IAAW,CAExC,GAAA,SAAS,cAAc,sBAAsB,EAAG,CAC1CD,IACR,MACF,CAGA,KAAK,mBAAmB,EACrB,KAAME,GAAY,CACX,MAAAC,EAAS,SAAS,cAAc,QAAQ,EAE9CA,EAAO,KAAO,kBAIR,MAAAC,EAAS,6BADMF,GAAW,QACwB,mCAExDC,EAAO,IAAMC,EACbD,EAAO,QAAQ,OAAS,OACjBA,EAAA,OAAS,IAAMH,IACtBG,EAAO,QAAU,IAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,EAE/D,SAAA,KAAK,YAAYE,CAAM,CAAA,CACjC,EACA,MAAM,IAAM,CAEL,MAAAA,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,KAAO,kBACdA,EAAO,IAAM,mEACbA,EAAO,QAAQ,OAAS,OACjBA,EAAA,OAAS,IAAMH,IACtBG,EAAO,QAAU,IAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,EAC/D,SAAA,KAAK,YAAYE,CAAM,CAAA,CACjC,CAAA,CACJ,CACH,CAGA,MAAc,oBAA6C,CACrD,GAAA,CACI,MAAAE,EAAW,MAAM,MAAM,2CAA2C,EACxE,OAAIA,EAAS,IACE,MAAMA,EAAS,QAChB,QAEP,WACAN,EAAO,CACN,eAAA,KAAK,kCAAmCA,CAAK,EAC9C,IACT,CACF,CAEQ,cAAe,CAEjB,GAAA,SAAS,cAAc,YAAY,EAAG,CACnC,KAAA,OAAS,SAAS,cAAc,YAAY,EACjD,MACF,CAGA,GAAI,CAAC,eAAe,IAAI,YAAY,EAAG,CAC7B,QAAA,KACN,oFAAA,EAEF,MACF,CAEM,MAAAO,EAAS,SAAS,cAAc,YAAY,EAG9C,KAAK,OAAO,QACdA,EAAO,aAAa,UAAW,KAAK,OAAO,MAAM,EAI5CA,EAAA,aAAa,eAAgBX,CAAY,EAG5C,KAAK,OAAO,UACdW,EAAO,aAAa,WAAY,KAAK,OAAO,QAAQ,EAIlD,KAAK,OAAO,MACdA,EAAO,aAAa,OAAQ,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC,EAIrD,SAAA,KAAK,YAAYA,CAAM,EAChC,KAAK,OAASA,EACd,QAAQ,IAAI,iCAAiC,CAC/C,CAEQ,eAAgB,CAElB,GAAA,OAAQ,OAAe,OAAW,IAAa,CAQjD,MAAMR,EAAS,CACb,OAAQ,KAAK,OAAO,OACpB,WAAYH,CAAA,EAGV,GAAA,CACF,MAAMY,EAAmB,IAAK,OAAe,OAAOT,CAAM,EAExD,OAAe,eAAiBS,QAC3BR,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAClD,CACF,CACF,CAGO,YAAmB,CACxB,KAAK,KAAK,CACZ,CAGO,WAAgC,CACrC,OAAO,KAAK,MACd,CACF,CAGA,gBAAS,iBAAiB,mBAAoB,IAAM,CAC5C,MAAAD,EAAU,OAAe,iBAAmB,GAClD,IAAID,EAAgBC,CAAM,CAC5B,CAAC"}
@@ -0,0 +1,86 @@
1
+ const s = "https://www.iamobi.ai/api/", a = {
2
+ position: "bottom-right",
3
+ autoInit: !0
4
+ };
5
+ class c {
6
+ constructor(t = {}) {
7
+ this.config = { ...a, ...t }, this.widget = null, this.config.autoInit !== !1 && this.init();
8
+ }
9
+ async init() {
10
+ try {
11
+ await this.loadScript(), this.createWidget(), this.initializeSDK();
12
+ } catch (t) {
13
+ console.error("Failed to initialize Obi Widget:", t);
14
+ }
15
+ }
16
+ async loadScript() {
17
+ return new Promise((t, e) => {
18
+ if (document.querySelector("script[data-obi-sdk]")) {
19
+ t();
20
+ return;
21
+ }
22
+ this.fetchLatestVersion().then((i) => {
23
+ const o = document.createElement("script");
24
+ o.type = "text/javascript";
25
+ const r = `https://unpkg.com/obi-sdk@${i || "latest"}/dist/obi-sdk.standalone.iife.js`;
26
+ o.src = r, o.dataset.obiSdk = "true", o.onload = () => t(), o.onerror = () => e(new Error("Failed to load Obi SDK script")), document.head.appendChild(o);
27
+ }).catch(() => {
28
+ const i = document.createElement("script");
29
+ i.type = "text/javascript", i.src = "https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js", i.dataset.obiSdk = "true", i.onload = () => t(), i.onerror = () => e(new Error("Failed to load Obi SDK script")), document.head.appendChild(i);
30
+ });
31
+ });
32
+ }
33
+ // Fetch the latest version from npm registry
34
+ async fetchLatestVersion() {
35
+ try {
36
+ const t = await fetch("https://registry.npmjs.org/obi-sdk/latest");
37
+ return t.ok ? (await t.json()).version : null;
38
+ } catch (t) {
39
+ return console.warn("Failed to fetch latest version:", t), null;
40
+ }
41
+ }
42
+ createWidget() {
43
+ if (document.querySelector("obi-widget")) {
44
+ this.widget = document.querySelector("obi-widget");
45
+ return;
46
+ }
47
+ if (!customElements.get("obi-widget")) {
48
+ console.warn(
49
+ "Obi Widget component not registered - import the component before using the loader"
50
+ );
51
+ return;
52
+ }
53
+ const t = document.createElement("obi-widget");
54
+ this.config.apiKey && t.setAttribute("api-key", this.config.apiKey), t.setAttribute("api-base-url", s), this.config.position && t.setAttribute("position", this.config.position), this.config.user && t.setAttribute("user", JSON.stringify(this.config.user)), document.body.appendChild(t), this.widget = t, console.log("Widget created and added to DOM");
55
+ }
56
+ initializeSDK() {
57
+ if (typeof window.ObiSDK < "u") {
58
+ const t = {
59
+ apiKey: this.config.apiKey,
60
+ apiBaseUrl: s
61
+ };
62
+ try {
63
+ const e = new window.ObiSDK(t);
64
+ window.obiSDKInstance = e;
65
+ } catch (e) {
66
+ console.error("Failed to initialize SDK:", e);
67
+ }
68
+ }
69
+ }
70
+ // Public method to manually initialize the widget
71
+ initialize() {
72
+ this.init();
73
+ }
74
+ // Add a public method to get the widget element
75
+ getWidget() {
76
+ return this.widget;
77
+ }
78
+ }
79
+ document.addEventListener("DOMContentLoaded", () => {
80
+ const n = window.obiWidgetConfig || {};
81
+ new c(n);
82
+ });
83
+ export {
84
+ c as ObiWidgetLoader
85
+ };
86
+ //# sourceMappingURL=obi-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obi-loader.js","sources":["../src/loader.ts"],"sourcesContent":["/**\n * Obi Widget Loader Script\n *\n * This script dynamically loads the Obi Widget web component on any webpage\n * with a simple script tag inclusion.\n */\n\n// Configuration with defaults that can be overridden\ninterface ObiWidgetConfig {\n // Position options\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n // API key for authentication\n apiKey?: string\n // Auto-initialize the widget\n autoInit?: boolean\n // User information\n user?: {\n id: string\n email?: string\n metadata?: any\n }\n}\n\n// API Base URL constant\nconst API_BASE_URL = \"https://www.iamobi.ai/api/\"\n\n// Default configuration\nconst DEFAULT_CONFIG: ObiWidgetConfig = {\n position: \"bottom-right\",\n autoInit: true,\n}\n\nclass ObiWidgetLoader {\n private config: ObiWidgetConfig\n private widget: HTMLElement | null\n\n constructor(config: ObiWidgetConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n this.widget = null\n\n // Only auto-initialize if autoInit is true\n if (this.config.autoInit !== false) {\n this.init()\n }\n }\n\n private async init() {\n try {\n await this.loadScript()\n\n // Create and mount the widget\n this.createWidget()\n\n // Initialize the SDK\n this.initializeSDK()\n } catch (error) {\n console.error(\"Failed to initialize Obi Widget:\", error)\n }\n }\n\n private async loadScript() {\n return new Promise<void>((resolve, reject) => {\n // Check if already loaded\n if (document.querySelector(\"script[data-obi-sdk]\")) {\n resolve()\n return\n }\n\n // First fetch the latest version number from npm registry\n this.fetchLatestVersion()\n .then((version) => {\n const script = document.createElement(\"script\")\n // Use a regular script tag (not module) for the IIFE build\n script.type = \"text/javascript\"\n\n // Use the specific version for better caching\n const versionToUse = version || \"latest\"\n const cdnUrl = `https://unpkg.com/obi-sdk@${versionToUse}/dist/obi-sdk.standalone.iife.js`\n\n script.src = cdnUrl\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n\n document.head.appendChild(script)\n })\n .catch(() => {\n // If fetching version fails, fallback to latest\n const script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.src = \"https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js\"\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n document.head.appendChild(script)\n })\n })\n }\n\n // Fetch the latest version from npm registry\n private async fetchLatestVersion(): Promise<string | null> {\n try {\n const response = await fetch(\"https://registry.npmjs.org/obi-sdk/latest\")\n if (response.ok) {\n const data = await response.json()\n return data.version\n }\n return null\n } catch (error) {\n console.warn(\"Failed to fetch latest version:\", error)\n return null\n }\n }\n\n private createWidget() {\n // Don't create multiple widgets\n if (document.querySelector(\"obi-widget\")) {\n this.widget = document.querySelector(\"obi-widget\")\n return\n }\n\n // Check if the component is registered\n if (!customElements.get(\"obi-widget\")) {\n console.warn(\n \"Obi Widget component not registered - import the component before using the loader\"\n )\n return\n }\n\n const widget = document.createElement(\"obi-widget\")\n\n // Pass API key if provided\n if (this.config.apiKey) {\n widget.setAttribute(\"api-key\", this.config.apiKey)\n }\n\n // Set API base URL\n widget.setAttribute(\"api-base-url\", API_BASE_URL)\n\n // Set position attribute\n if (this.config.position) {\n widget.setAttribute(\"position\", this.config.position)\n }\n\n // Set user information if provided\n if (this.config.user) {\n widget.setAttribute(\"user\", JSON.stringify(this.config.user))\n }\n\n // Append to body\n document.body.appendChild(widget)\n this.widget = widget\n console.log(\"Widget created and added to DOM\")\n }\n\n private initializeSDK() {\n // Initialize SDK with config\n if (typeof (window as any).ObiSDK !== \"undefined\") {\n // Define a basic type for the SDK\n type SDKInstance = {\n // Add known properties/methods of your SDK here\n [key: string]: any\n }\n\n // Create the SDK instance with API key only\n const config = {\n apiKey: this.config.apiKey,\n apiBaseUrl: API_BASE_URL,\n }\n\n try {\n const sdk: SDKInstance = new (window as any).ObiSDK(config)\n // Store SDK instance on window for debugging\n ;(window as any).obiSDKInstance = sdk\n } catch (error) {\n console.error(\"Failed to initialize SDK:\", error)\n }\n }\n }\n\n // Public method to manually initialize the widget\n public initialize(): void {\n this.init()\n }\n\n // Add a public method to get the widget element\n public getWidget(): HTMLElement | null {\n return this.widget\n }\n}\n\n// Auto-initialize if config is provided in window.obiWidgetConfig\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const config = (window as any).obiWidgetConfig || {}\n new ObiWidgetLoader(config)\n})\n\n// Export the loader for manual initialization\nexport { ObiWidgetLoader }\n"],"names":["API_BASE_URL","DEFAULT_CONFIG","ObiWidgetLoader","config","error","resolve","reject","version","script","cdnUrl","response","widget","sdk"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ (function(o,n){typeof exports=="object"&&typeof module<"u"?n(exports):typeof define=="function"&&define.amd?define(["exports"],n):(o=typeof globalThis<"u"?globalThis:o||self,n(o.ObiWidgetLoader={}))})(this,function(o){"use strict";const n="https://www.iamobi.ai/api/",a={position:"bottom-right",autoInit:!0};class r{constructor(t={}){this.config={...a,...t},this.widget=null,this.config.autoInit!==!1&&this.init()}async init(){try{await this.loadScript(),this.createWidget(),this.initializeSDK()}catch(t){console.error("Failed to initialize Obi Widget:",t)}}async loadScript(){return new Promise((t,i)=>{if(document.querySelector("script[data-obi-sdk]")){t();return}this.fetchLatestVersion().then(e=>{const s=document.createElement("script");s.type="text/javascript";const c=`https://unpkg.com/obi-sdk@${e||"latest"}/dist/obi-sdk.standalone.iife.js`;s.src=c,s.dataset.obiSdk="true",s.onload=()=>t(),s.onerror=()=>i(new Error("Failed to load Obi SDK script")),document.head.appendChild(s)}).catch(()=>{const e=document.createElement("script");e.type="text/javascript",e.src="https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js",e.dataset.obiSdk="true",e.onload=()=>t(),e.onerror=()=>i(new Error("Failed to load Obi SDK script")),document.head.appendChild(e)})})}async fetchLatestVersion(){try{const t=await fetch("https://registry.npmjs.org/obi-sdk/latest");return t.ok?(await t.json()).version:null}catch(t){return console.warn("Failed to fetch latest version:",t),null}}createWidget(){if(document.querySelector("obi-widget")){this.widget=document.querySelector("obi-widget");return}if(!customElements.get("obi-widget")){console.warn("Obi Widget component not registered - import the component before using the loader");return}const t=document.createElement("obi-widget");this.config.apiKey&&t.setAttribute("api-key",this.config.apiKey),t.setAttribute("api-base-url",n),this.config.position&&t.setAttribute("position",this.config.position),this.config.user&&t.setAttribute("user",JSON.stringify(this.config.user)),document.body.appendChild(t),this.widget=t,console.log("Widget created and added to DOM")}initializeSDK(){if(typeof window.ObiSDK<"u"){const t={apiKey:this.config.apiKey,apiBaseUrl:n};try{const i=new window.ObiSDK(t);window.obiSDKInstance=i}catch(i){console.error("Failed to initialize SDK:",i)}}}initialize(){this.init()}getWidget(){return this.widget}}document.addEventListener("DOMContentLoaded",()=>{const d=window.obiWidgetConfig||{};new r(d)}),o.ObiWidgetLoader=r,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
2
+ //# sourceMappingURL=obi-loader.umd.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obi-loader.umd.cjs","sources":["../src/loader.ts"],"sourcesContent":["/**\n * Obi Widget Loader Script\n *\n * This script dynamically loads the Obi Widget web component on any webpage\n * with a simple script tag inclusion.\n */\n\n// Configuration with defaults that can be overridden\ninterface ObiWidgetConfig {\n // Position options\n position?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\"\n // API key for authentication\n apiKey?: string\n // Auto-initialize the widget\n autoInit?: boolean\n // User information\n user?: {\n id: string\n email?: string\n metadata?: any\n }\n}\n\n// API Base URL constant\nconst API_BASE_URL = \"https://www.iamobi.ai/api/\"\n\n// Default configuration\nconst DEFAULT_CONFIG: ObiWidgetConfig = {\n position: \"bottom-right\",\n autoInit: true,\n}\n\nclass ObiWidgetLoader {\n private config: ObiWidgetConfig\n private widget: HTMLElement | null\n\n constructor(config: ObiWidgetConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n this.widget = null\n\n // Only auto-initialize if autoInit is true\n if (this.config.autoInit !== false) {\n this.init()\n }\n }\n\n private async init() {\n try {\n await this.loadScript()\n\n // Create and mount the widget\n this.createWidget()\n\n // Initialize the SDK\n this.initializeSDK()\n } catch (error) {\n console.error(\"Failed to initialize Obi Widget:\", error)\n }\n }\n\n private async loadScript() {\n return new Promise<void>((resolve, reject) => {\n // Check if already loaded\n if (document.querySelector(\"script[data-obi-sdk]\")) {\n resolve()\n return\n }\n\n // First fetch the latest version number from npm registry\n this.fetchLatestVersion()\n .then((version) => {\n const script = document.createElement(\"script\")\n // Use a regular script tag (not module) for the IIFE build\n script.type = \"text/javascript\"\n\n // Use the specific version for better caching\n const versionToUse = version || \"latest\"\n const cdnUrl = `https://unpkg.com/obi-sdk@${versionToUse}/dist/obi-sdk.standalone.iife.js`\n\n script.src = cdnUrl\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n\n document.head.appendChild(script)\n })\n .catch(() => {\n // If fetching version fails, fallback to latest\n const script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.src = \"https://unpkg.com/obi-sdk@latest/dist/obi-sdk.standalone.iife.js\"\n script.dataset.obiSdk = \"true\"\n script.onload = () => resolve()\n script.onerror = () => reject(new Error(\"Failed to load Obi SDK script\"))\n document.head.appendChild(script)\n })\n })\n }\n\n // Fetch the latest version from npm registry\n private async fetchLatestVersion(): Promise<string | null> {\n try {\n const response = await fetch(\"https://registry.npmjs.org/obi-sdk/latest\")\n if (response.ok) {\n const data = await response.json()\n return data.version\n }\n return null\n } catch (error) {\n console.warn(\"Failed to fetch latest version:\", error)\n return null\n }\n }\n\n private createWidget() {\n // Don't create multiple widgets\n if (document.querySelector(\"obi-widget\")) {\n this.widget = document.querySelector(\"obi-widget\")\n return\n }\n\n // Check if the component is registered\n if (!customElements.get(\"obi-widget\")) {\n console.warn(\n \"Obi Widget component not registered - import the component before using the loader\"\n )\n return\n }\n\n const widget = document.createElement(\"obi-widget\")\n\n // Pass API key if provided\n if (this.config.apiKey) {\n widget.setAttribute(\"api-key\", this.config.apiKey)\n }\n\n // Set API base URL\n widget.setAttribute(\"api-base-url\", API_BASE_URL)\n\n // Set position attribute\n if (this.config.position) {\n widget.setAttribute(\"position\", this.config.position)\n }\n\n // Set user information if provided\n if (this.config.user) {\n widget.setAttribute(\"user\", JSON.stringify(this.config.user))\n }\n\n // Append to body\n document.body.appendChild(widget)\n this.widget = widget\n console.log(\"Widget created and added to DOM\")\n }\n\n private initializeSDK() {\n // Initialize SDK with config\n if (typeof (window as any).ObiSDK !== \"undefined\") {\n // Define a basic type for the SDK\n type SDKInstance = {\n // Add known properties/methods of your SDK here\n [key: string]: any\n }\n\n // Create the SDK instance with API key only\n const config = {\n apiKey: this.config.apiKey,\n apiBaseUrl: API_BASE_URL,\n }\n\n try {\n const sdk: SDKInstance = new (window as any).ObiSDK(config)\n // Store SDK instance on window for debugging\n ;(window as any).obiSDKInstance = sdk\n } catch (error) {\n console.error(\"Failed to initialize SDK:\", error)\n }\n }\n }\n\n // Public method to manually initialize the widget\n public initialize(): void {\n this.init()\n }\n\n // Add a public method to get the widget element\n public getWidget(): HTMLElement | null {\n return this.widget\n }\n}\n\n// Auto-initialize if config is provided in window.obiWidgetConfig\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const config = (window as any).obiWidgetConfig || {}\n new ObiWidgetLoader(config)\n})\n\n// Export the loader for manual initialization\nexport { ObiWidgetLoader }\n"],"names":["API_BASE_URL","DEFAULT_CONFIG","ObiWidgetLoader","config","error","resolve","reject","version","script","cdnUrl","response","widget","sdk"],"mappings":"uOAwBA,MAAMA,EAAe,6BAGfC,EAAkC,CACtC,SAAU,eACV,SAAU,EACZ,EAEA,MAAMC,CAAgB,CAIpB,YAAYC,EAA0B,GAAI,CACxC,KAAK,OAAS,CAAE,GAAGF,EAAgB,GAAGE,CAAO,EAC7C,KAAK,OAAS,KAGV,KAAK,OAAO,WAAa,IAC3B,KAAK,KAAK,CAEd,CAEA,MAAc,MAAO,CACf,GAAA,CACF,MAAM,KAAK,aAGX,KAAK,aAAa,EAGlB,KAAK,cAAc,QACZC,EAAO,CACN,QAAA,MAAM,mCAAoCA,CAAK,CACzD,CACF,CAEA,MAAc,YAAa,CACzB,OAAO,IAAI,QAAc,CAACC,EAASC,IAAW,CAExC,GAAA,SAAS,cAAc,sBAAsB,EAAG,CAC1CD,IACR,MACF,CAGA,KAAK,mBAAmB,EACrB,KAAME,GAAY,CACX,MAAAC,EAAS,SAAS,cAAc,QAAQ,EAE9CA,EAAO,KAAO,kBAIR,MAAAC,EAAS,6BADMF,GAAW,QACwB,mCAExDC,EAAO,IAAMC,EACbD,EAAO,QAAQ,OAAS,OACjBA,EAAA,OAAS,IAAMH,IACtBG,EAAO,QAAU,IAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,EAE/D,SAAA,KAAK,YAAYE,CAAM,CAAA,CACjC,EACA,MAAM,IAAM,CAEL,MAAAA,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,KAAO,kBACdA,EAAO,IAAM,mEACbA,EAAO,QAAQ,OAAS,OACjBA,EAAA,OAAS,IAAMH,IACtBG,EAAO,QAAU,IAAMF,EAAO,IAAI,MAAM,+BAA+B,CAAC,EAC/D,SAAA,KAAK,YAAYE,CAAM,CAAA,CACjC,CAAA,CACJ,CACH,CAGA,MAAc,oBAA6C,CACrD,GAAA,CACI,MAAAE,EAAW,MAAM,MAAM,2CAA2C,EACxE,OAAIA,EAAS,IACE,MAAMA,EAAS,QAChB,QAEP,WACAN,EAAO,CACN,eAAA,KAAK,kCAAmCA,CAAK,EAC9C,IACT,CACF,CAEQ,cAAe,CAEjB,GAAA,SAAS,cAAc,YAAY,EAAG,CACnC,KAAA,OAAS,SAAS,cAAc,YAAY,EACjD,MACF,CAGA,GAAI,CAAC,eAAe,IAAI,YAAY,EAAG,CAC7B,QAAA,KACN,oFAAA,EAEF,MACF,CAEM,MAAAO,EAAS,SAAS,cAAc,YAAY,EAG9C,KAAK,OAAO,QACdA,EAAO,aAAa,UAAW,KAAK,OAAO,MAAM,EAI5CA,EAAA,aAAa,eAAgBX,CAAY,EAG5C,KAAK,OAAO,UACdW,EAAO,aAAa,WAAY,KAAK,OAAO,QAAQ,EAIlD,KAAK,OAAO,MACdA,EAAO,aAAa,OAAQ,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC,EAIrD,SAAA,KAAK,YAAYA,CAAM,EAChC,KAAK,OAASA,EACd,QAAQ,IAAI,iCAAiC,CAC/C,CAEQ,eAAgB,CAElB,GAAA,OAAQ,OAAe,OAAW,IAAa,CAQjD,MAAMR,EAAS,CACb,OAAQ,KAAK,OAAO,OACpB,WAAYH,CAAA,EAGV,GAAA,CACF,MAAMY,EAAmB,IAAK,OAAe,OAAOT,CAAM,EAExD,OAAe,eAAiBS,QAC3BR,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAClD,CACF,CACF,CAGO,YAAmB,CACxB,KAAK,KAAK,CACZ,CAGO,WAAgC,CACrC,OAAO,KAAK,MACd,CACF,CAGA,SAAS,iBAAiB,mBAAoB,IAAM,CAC5C,MAAAD,EAAU,OAAe,iBAAmB,GAClD,IAAID,EAAgBC,CAAM,CAC5B,CAAC"}