onairos 2.1.1 → 2.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"onairos.esm.js","mappings":"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","sources":["webpack://onairos/webpack/bootstrap","webpack://onairos/webpack/runtime/define property getters","webpack://onairos/webpack/runtime/hasOwnProperty shorthand","webpack://onairos/external module \"react\"","webpack://onairos/./node_modules/lucide-react/dist/esm/shared/src/utils.js","webpack://onairos/./node_modules/lucide-react/dist/esm/defaultAttributes.js","webpack://onairos/./node_modules/lucide-react/dist/esm/Icon.js","webpack://onairos/./node_modules/lucide-react/dist/esm/createLucideIcon.js","webpack://onairos/./node_modules/lucide-react/dist/esm/icons/mail.js","webpack://onairos/./node_modules/lucide-react/dist/esm/icons/arrow-right.js","webpack://onairos/./node_modules/lucide-react/dist/esm/icons/check.js","webpack://onairos/./src/components/EmailAuth.js","webpack://onairos/./src/components/connectors/YoutubeConnector.js","webpack://onairos/./src/components/connectors/LinkedInConnector.js","webpack://onairos/./src/components/connectors/InstagramConnector.js","webpack://onairos/./src/components/connectors/PinterestConnector.js","webpack://onairos/./src/components/connectors/RedditConnector.js","webpack://onairos/./src/components/connectors/GmailConnector.js","webpack://onairos/./src/components/UniversalOnboarding.js","webpack://onairos/./src/components/PinSetup.js","webpack://onairos/./src/components/DataRequest.js","webpack://onairos/./src/onairosButton.jsx","webpack://onairos/./src/onairos.jsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"Component\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.Component, [\"createElement\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.createElement, [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_react__[\"default\"], [\"forwardRef\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.forwardRef, [\"useEffect\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.useEffect, [\"useState\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.useState });","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => {\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"20\", height: \"16\", x: \"2\", y: \"4\", rx: \"2\", key: \"18n3k1\" }],\n [\"path\", { d: \"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\", key: \"1ocrg3\" }]\n];\nconst Mail = createLucideIcon(\"mail\", __iconNode);\n\nexport { __iconNode, Mail as default };\n//# sourceMappingURL=mail.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","import React, { useState } from 'react';\r\nimport { Mail, ArrowRight, Check } from 'lucide-react';\r\n\r\nexport default function EmailAuth({ onSuccess, testMode = true }) {\r\n const [email, setEmail] = useState('');\r\n const [code, setCode] = useState('');\r\n const [step, setStep] = useState('email'); // 'email' | 'code' | 'success'\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState('');\r\n\r\n const validateEmail = (email) => {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(email);\r\n };\r\n\r\n const handleEmailSubmit = async (e) => {\r\n e.preventDefault();\r\n setError('');\r\n\r\n if (!validateEmail(email)) {\r\n setError('Please enter a valid email address');\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n\r\n try {\r\n if (testMode) {\r\n // In test mode, skip email sending and go directly to code step\r\n setTimeout(() => {\r\n setStep('code');\r\n setIsLoading(false);\r\n }, 1000);\r\n } else {\r\n // In production, send actual email\r\n const response = await fetch('https://api2.onairos.uk/email/verify', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ email }),\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error('Failed to send verification code');\r\n }\r\n\r\n setStep('code');\r\n setIsLoading(false);\r\n }\r\n } catch (error) {\r\n setError(error.message);\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const handleCodeSubmit = async (e) => {\r\n e.preventDefault();\r\n setError('');\r\n\r\n if (testMode && code === '123456') {\r\n // Test mode - accept 123456 as valid code\r\n setStep('success');\r\n setTimeout(() => {\r\n onSuccess({ email, verified: true });\r\n }, 1000);\r\n return;\r\n }\r\n\r\n if (!testMode) {\r\n setIsLoading(true);\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/email/verify/confirm', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ email, code }),\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error('Invalid verification code');\r\n }\r\n\r\n const data = await response.json();\r\n setStep('success');\r\n setTimeout(() => {\r\n onSuccess({ email, verified: true, token: data.token });\r\n }, 1000);\r\n } catch (error) {\r\n setError(error.message);\r\n setIsLoading(false);\r\n }\r\n } else {\r\n setError('Invalid code. Use 123456 for testing.');\r\n }\r\n };\r\n\r\n const renderEmailStep = () => (\r\n <div className=\"flex flex-col items-center space-y-6 w-full\">\r\n <div className=\"flex items-center justify-center w-16 h-16 bg-blue-100 rounded-full\">\r\n <Mail className=\"w-8 h-8 text-blue-600\" />\r\n </div>\r\n \r\n <div className=\"text-center\">\r\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">Sign in to Onairos</h2>\r\n <p className=\"text-gray-600\">Enter your email address to continue</p>\r\n {testMode && (\r\n <p className=\"text-sm text-blue-600 mt-2\">Test mode: Any valid email will work</p>\r\n )}\r\n </div>\r\n\r\n <form onSubmit={handleEmailSubmit} className=\"w-full max-w-md space-y-4\">\r\n <div>\r\n <label htmlFor=\"email\" className=\"block text-sm font-medium text-gray-700 mb-1\">\r\n Email address\r\n </label>\r\n <input\r\n type=\"email\"\r\n id=\"email\"\r\n value={email}\r\n onChange={(e) => setEmail(e.target.value)}\r\n placeholder=\"Enter your email\"\r\n className=\"w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none\"\r\n required\r\n />\r\n </div>\r\n\r\n {error && (\r\n <p className=\"text-sm text-red-600\">{error}</p>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading}\r\n className=\"w-full py-3 px-4 bg-blue-600 text-white rounded-lg font-semibold hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center\"\r\n >\r\n {isLoading ? (\r\n <div className=\"animate-spin h-5 w-5 border-2 border-white rounded-full border-t-transparent\"></div>\r\n ) : (\r\n <>\r\n Continue\r\n <ArrowRight className=\"ml-2 w-4 h-4\" />\r\n </>\r\n )}\r\n </button>\r\n </form>\r\n </div>\r\n );\r\n\r\n const renderCodeStep = () => (\r\n <div className=\"flex flex-col items-center space-y-6 w-full\">\r\n <div className=\"flex items-center justify-center w-16 h-16 bg-green-100 rounded-full\">\r\n <Mail className=\"w-8 h-8 text-green-600\" />\r\n </div>\r\n \r\n <div className=\"text-center\">\r\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">Check your email</h2>\r\n <p className=\"text-gray-600\">We sent a verification code to</p>\r\n <p className=\"text-gray-900 font-medium\">{email}</p>\r\n {testMode && (\r\n <p className=\"text-sm text-blue-600 mt-2\">Test mode: Use code 123456</p>\r\n )}\r\n </div>\r\n\r\n <form onSubmit={handleCodeSubmit} className=\"w-full max-w-md space-y-4\">\r\n <div>\r\n <label htmlFor=\"code\" className=\"block text-sm font-medium text-gray-700 mb-1\">\r\n Verification code\r\n </label>\r\n <input\r\n type=\"text\"\r\n id=\"code\"\r\n value={code}\r\n onChange={(e) => setCode(e.target.value)}\r\n placeholder=\"Enter 6-digit code\"\r\n className=\"w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none text-center text-lg tracking-widest\"\r\n maxLength=\"6\"\r\n required\r\n />\r\n </div>\r\n\r\n {error && (\r\n <p className=\"text-sm text-red-600\">{error}</p>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading}\r\n className=\"w-full py-3 px-4 bg-blue-600 text-white rounded-lg font-semibold hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center\"\r\n >\r\n {isLoading ? (\r\n <div className=\"animate-spin h-5 w-5 border-2 border-white rounded-full border-t-transparent\"></div>\r\n ) : (\r\n 'Verify Code'\r\n )}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n onClick={() => setStep('email')}\r\n className=\"w-full py-2 px-4 text-gray-600 hover:text-gray-800\"\r\n >\r\n Use a different email\r\n </button>\r\n </form>\r\n </div>\r\n );\r\n\r\n const renderSuccessStep = () => (\r\n <div className=\"flex flex-col items-center space-y-6 w-full\">\r\n <div className=\"flex items-center justify-center w-16 h-16 bg-green-100 rounded-full\">\r\n <Check className=\"w-8 h-8 text-green-600\" />\r\n </div>\r\n \r\n <div className=\"text-center\">\r\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">Email verified!</h2>\r\n <p className=\"text-gray-600\">Setting up your account...</p>\r\n </div>\r\n\r\n <div className=\"w-8 h-8\">\r\n <div className=\"animate-spin h-8 w-8 border-2 border-blue-600 rounded-full border-t-transparent\"></div>\r\n </div>\r\n </div>\r\n );\r\n\r\n return (\r\n <div className=\"flex flex-col items-center space-y-6 p-6 w-full\">\r\n {step === 'email' && renderEmailStep()}\r\n {step === 'code' && renderCodeStep()}\r\n {step === 'success' && renderSuccessStep()}\r\n </div>\r\n );\r\n} ","import React, { Component } from 'react';\r\n\r\nclass YoutubeConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.youtubeConnect = this.youtubeConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('YouTube', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n // Call UpdateConnections API to remove connection\r\n this.updateConnections('Remove', 'Youtube').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('YouTube', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing YouTube connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async youtubeConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/youtube/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.youtubeURL) {\r\n // Open OAuth URL in current window\r\n window.location.href = result.youtubeURL;\r\n } else {\r\n console.error('No YouTube URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('YouTube connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your YouTube Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your YouTube Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your YouTube:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Account Info</li>\r\n <li>Liked and Watched Videos</li>\r\n <li>Subscribed Channels and Playlist Videos</li>\r\n </ul>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/compliance-google-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos\r\n </a>{' '}\r\n complies with{' '}\r\n <a href=\"https://policies.google.com/privacy\" className=\"text-blue-600 hover:underline\">\r\n Google API Services User Data Policy\r\n </a>\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.youtubeConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default YoutubeConnector; ","import React, { Component } from 'react';\r\n\r\nclass LinkedInConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.linkedinConnect = this.linkedinConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('LinkedIn', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n this.updateConnections('Remove', 'LinkedIn').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('LinkedIn', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing LinkedIn connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async linkedinConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/linkedin/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.linkedinURL) {\r\n window.location.href = result.linkedinURL;\r\n } else {\r\n console.error('No LinkedIn URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('LinkedIn connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your LinkedIn Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your LinkedIn Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your LinkedIn:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Profile Information</li>\r\n <li>Professional Experience</li>\r\n <li>Network Connections</li>\r\n <li>Posts and Activity</li>\r\n </ul>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/privacy-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos Privacy Policy\r\n </a>{' '}\r\n - Your professional data is handled with the highest security standards.\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.linkedinConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default LinkedInConnector; ","import React, { Component } from 'react';\r\n\r\nclass InstagramConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.instagramConnect = this.instagramConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Instagram', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n this.updateConnections('Remove', 'Instagram').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Instagram', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing Instagram connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async instagramConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/instagram/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.instagramURL) {\r\n window.location.href = result.instagramURL;\r\n } else {\r\n console.error('No Instagram URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('Instagram connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your Instagram Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your Instagram Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your Instagram:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Profile Information</li>\r\n <li>Posts and Stories</li>\r\n <li>Liked Content</li>\r\n <li>Following and Followers</li>\r\n </ul>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/compliance-meta-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos\r\n </a>{' '}\r\n complies with{' '}\r\n <a href=\"https://developers.facebook.com/policy\" className=\"text-blue-600 hover:underline\">\r\n Meta Platform Policy\r\n </a>\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.instagramConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default InstagramConnector; ","import React, { Component } from 'react';\r\n\r\nclass PinterestConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.pinterestConnect = this.pinterestConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Pinterest', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n this.updateConnections('Remove', 'Pinterest').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Pinterest', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing Pinterest connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async pinterestConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/pinterest/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.pinterestURL) {\r\n window.location.href = result.pinterestURL;\r\n } else {\r\n console.error('No Pinterest URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('Pinterest connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your Pinterest Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your Pinterest Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your Pinterest:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Profile Information</li>\r\n <li>Boards and Pins</li>\r\n <li>Saved and Liked Pins</li>\r\n <li>Following and Followers</li>\r\n </ul>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/privacy-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos Privacy Policy\r\n </a>{' '}\r\n - Your creative interests and preferences are securely processed.\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.pinterestConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default PinterestConnector; ","import React, { Component } from 'react';\r\n\r\nclass RedditConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.redditConnect = this.redditConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Reddit', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n this.updateConnections('Remove', 'Reddit').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Reddit', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing Reddit connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async redditConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/reddit/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.redditURL) {\r\n window.location.href = result.redditURL;\r\n } else {\r\n console.error('No Reddit URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('Reddit connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your Reddit Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your Reddit Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your Reddit:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Profile Information</li>\r\n <li>Posts and Comments</li>\r\n <li>Upvoted and Saved Content</li>\r\n <li>Subscribed Subreddits</li>\r\n </ul>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/privacy-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos Privacy Policy\r\n </a>{' '}\r\n - Your Reddit activity helps us understand your interests and preferences.\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.redditConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default RedditConnector; ","import React, { Component } from 'react';\r\n\r\nclass GmailConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.gmailConnect = this.gmailConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Gmail', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n this.updateConnections('Remove', 'Gmail').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Gmail', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing Gmail connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async gmailConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/gmail/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.gmailURL) {\r\n window.location.href = result.gmailURL;\r\n } else {\r\n console.error('No Gmail URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('Gmail connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your Gmail Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your Gmail Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your Gmail:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Account Information</li>\r\n <li>Email Metadata (subjects, dates, senders)</li>\r\n <li>Email Categories and Labels</li>\r\n <li>Communication Patterns</li>\r\n </ul>\r\n </div>\r\n \r\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-3\">\r\n <p className=\"text-yellow-800 text-sm font-medium\">\r\n <strong>Note:</strong> We do NOT read the content of your emails. Only metadata is processed.\r\n </p>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/compliance-google-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos\r\n </a>{' '}\r\n complies with{' '}\r\n <a href=\"https://policies.google.com/privacy\" className=\"text-blue-600 hover:underline\">\r\n Google API Services User Data Policy\r\n </a>\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.gmailConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default GmailConnector; ","import React, { useState, useEffect } from 'react';\r\nimport YoutubeConnector from './connectors/YoutubeConnector';\r\nimport LinkedInConnector from './connectors/LinkedInConnector';\r\nimport InstagramConnector from './connectors/InstagramConnector';\r\nimport PinterestConnector from './connectors/PinterestConnector';\r\nimport RedditConnector from './connectors/RedditConnector';\r\nimport GmailConnector from './connectors/GmailConnector';\r\n\r\nconst platforms = [\r\n { name: 'YouTube', icon: '📺', color: 'bg-red-500', connector: 'youtube' },\r\n { name: 'Reddit', icon: '🔥', color: 'bg-orange-500', connector: 'reddit' },\r\n { name: 'Instagram', icon: '📷', color: 'bg-pink-500', connector: 'instagram' },\r\n { name: 'Pinterest', icon: '📌', color: 'bg-red-600', connector: 'pinterest' },\r\n { name: 'LinkedIn', icon: '💼', color: 'bg-blue-700', connector: 'linkedin' },\r\n { name: 'Gmail', icon: '📧', color: 'bg-red-500', connector: 'gmail' }\r\n];\r\n\r\nexport default function UniversalOnboarding({ onComplete, appIcon, appName = 'App', username }) {\r\n const [connectedAccounts, setConnectedAccounts] = useState({});\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n const [activeConnector, setActiveConnector] = useState(null);\r\n\r\n const handleConnectionChange = (platformName, isConnected) => {\r\n setConnectedAccounts(prev => ({\r\n ...prev,\r\n [platformName]: isConnected\r\n }));\r\n setActiveConnector(null);\r\n };\r\n\r\n const handleToggle = async (platformName, connectorType) => {\r\n if (isConnecting) return;\r\n \r\n const isCurrentlyConnected = connectedAccounts[platformName];\r\n \r\n if (isCurrentlyConnected) {\r\n // Disconnect - call the connector's disconnect method\r\n setConnectedAccounts(prev => ({\r\n ...prev,\r\n [platformName]: false\r\n }));\r\n } else {\r\n // Connect - open the OAuth dialog\r\n setActiveConnector(connectorType);\r\n }\r\n };\r\n\r\n const handleContinue = () => {\r\n const connected = Object.entries(connectedAccounts)\r\n .filter(([platform, isConnected]) => isConnected)\r\n .map(([platform]) => platform);\r\n \r\n onComplete({\r\n connectedAccounts: connected,\r\n totalConnections: connected.length\r\n });\r\n };\r\n\r\n const connectedCount = Object.values(connectedAccounts).filter(Boolean).length;\r\n\r\n return (\r\n <div className=\"w-full max-w-md mx-auto bg-white rounded-lg shadow-xl overflow-hidden\" style={{ maxHeight: '90vh', height: 'auto' }}>\r\n <div className=\"p-4 sm:p-6 overflow-y-auto\" style={{ maxHeight: 'calc(90vh - 4rem)' }}>\r\n {/* Header with App Logo and Arrow to Onairos */}\r\n <div className=\"flex items-center justify-center mb-4 sm:mb-6\">\r\n <div className=\"flex items-center space-x-3\">\r\n <img \r\n src={appIcon || \"https://onairos.sirv.com/Images/OnairosBlack.png\"} \r\n alt={appName} \r\n className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg\"\r\n />\r\n <div className=\"flex items-center text-gray-400\">\r\n <svg className=\"w-5 h-5 sm:w-6 sm:h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M17 8l4 4m0 0l-4 4m4-4H3\" />\r\n </svg>\r\n </div>\r\n <img \r\n src=\"https://onairos.sirv.com/Images/OnairosBlack.png\" \r\n alt=\"Onairos\" \r\n className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-center mb-4 sm:mb-6\">\r\n <h2 className=\"text-lg sm:text-xl font-bold text-gray-900 mb-2\">Connect Your Accounts</h2>\r\n <p className=\"text-gray-600 text-xs sm:text-sm\">\r\n Choose which accounts to connect for a personalized experience\r\n </p>\r\n </div>\r\n\r\n {/* Privacy Notice */}\r\n <div className=\"mb-4 sm:mb-6 p-2 sm:p-3 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <p className=\"text-blue-800 text-xs sm:text-sm\">\r\n 🔒 Your data is never shared with anyone. It's only used to train your personal model and is stored securely.\r\n </p>\r\n </div>\r\n\r\n {/* Platform List - Vertical Layout with Toggles */}\r\n <div className=\"space-y-2 sm:space-y-3 mb-4 sm:mb-6\">\r\n {platforms.map((platform) => {\r\n const isConnected = connectedAccounts[platform.name] || false;\r\n \r\n return (\r\n <div \r\n key={platform.name}\r\n className=\"flex items-center justify-between p-3 sm:p-4 border rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <div className=\"flex items-center space-x-3\">\r\n <div className={`w-8 h-8 sm:w-10 sm:h-10 rounded-lg ${platform.color} flex items-center justify-center text-white text-base sm:text-lg`}>\r\n {platform.icon}\r\n </div>\r\n <div>\r\n <h3 className=\"font-medium text-gray-900 text-sm sm:text-base\">{platform.name}</h3>\r\n <p className=\"text-xs sm:text-sm text-gray-500\">\r\n {isConnected ? 'Connected' : 'Not connected'}\r\n </p>\r\n </div>\r\n </div>\r\n \r\n {/* Toggle Switch */}\r\n <button\r\n onClick={() => handleToggle(platform.name, platform.connector)}\r\n disabled={isConnecting}\r\n className={`relative inline-flex h-5 sm:h-6 w-9 sm:w-11 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 ${\r\n isConnected ? 'bg-blue-600' : 'bg-gray-200'\r\n } ${isConnecting ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\r\n >\r\n <span\r\n className={`inline-block h-3 sm:h-4 w-3 sm:w-4 transform rounded-full bg-white transition-transform ${\r\n isConnected ? 'translate-x-5 sm:translate-x-6' : 'translate-x-1'\r\n }`}\r\n />\r\n </button>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Connection Status */}\r\n {connectedCount > 0 && (\r\n <div className=\"mb-3 sm:mb-4 p-2 sm:p-3 bg-green-50 border border-green-200 rounded-lg\">\r\n <p className=\"text-green-800 text-xs sm:text-sm\">\r\n ✅ {connectedCount} account{connectedCount > 1 ? 's' : ''} connected\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* Continue Button */}\r\n <button\r\n onClick={handleContinue}\r\n disabled={connectedCount === 0}\r\n className={`w-full py-2 sm:py-3 px-4 rounded-lg font-semibold transition-colors text-sm sm:text-base ${\r\n connectedCount > 0\r\n ? 'bg-blue-600 text-white hover:bg-blue-700'\r\n : 'bg-gray-300 text-gray-500 cursor-not-allowed'\r\n }`}\r\n >\r\n Continue {connectedCount > 0 ? `with ${connectedCount} account${connectedCount > 1 ? 's' : ''}` : ''}\r\n </button>\r\n\r\n {/* Skip Option */}\r\n <button\r\n onClick={() => onComplete({ connectedAccounts: [], totalConnections: 0 })}\r\n className=\"w-full mt-2 py-2 text-gray-500 hover:text-gray-700 text-xs sm:text-sm\"\r\n >\r\n Skip for now\r\n </button>\r\n </div>\r\n\r\n {/* OAuth Connector Dialogs */}\r\n <YoutubeConnector \r\n open={activeConnector === 'youtube'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n <LinkedInConnector \r\n open={activeConnector === 'linkedin'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n <InstagramConnector \r\n open={activeConnector === 'instagram'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n <PinterestConnector \r\n open={activeConnector === 'pinterest'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n <RedditConnector \r\n open={activeConnector === 'reddit'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n <GmailConnector \r\n open={activeConnector === 'gmail'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n </div>\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\n\r\nexport default function PinSetup({ onComplete, userEmail }) {\r\n const [pin, setPin] = useState('');\r\n const [requirements, setRequirements] = useState({\r\n length: false,\r\n number: false,\r\n special: false\r\n });\r\n\r\n // Check PIN requirements (simplified)\r\n useEffect(() => {\r\n setRequirements({\r\n length: pin.length >= 8,\r\n number: /[0-9]/.test(pin),\r\n special: /[!@#$%^&*(),.?\":{}|<>]/.test(pin)\r\n });\r\n }, [pin]);\r\n\r\n const allRequirementsMet = Object.values(requirements).every(req => req);\r\n const canSubmit = allRequirementsMet && pin.length > 0;\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n if (canSubmit) {\r\n // In a real app, you would hash the PIN before storing\r\n onComplete({\r\n pin: pin, // This should be hashed in production\r\n pinCreated: true,\r\n timestamp: new Date().toISOString()\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"max-w-md mx-auto bg-white p-6\">\r\n <div className=\"text-center mb-6\">\r\n <div className=\"w-16 h-16 bg-blue-100 rounded-full flex items-center justify-center mx-auto mb-4\">\r\n <svg className=\"w-8 h-8 text-blue-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 15v2m-6 4h12a2 2 0 002-2v-1a2 2 0 00-2-2H6a2 2 0 00-2 2v1a2 2 0 002 2zM12 7V3m0 4l3-3m-3 3L9 4\" />\r\n </svg>\r\n </div>\r\n <h2 className=\"text-2xl font-bold text-gray-900 mb-2\">Create Your Secure PIN</h2>\r\n <p className=\"text-gray-600\">Your PIN will be used to securely access your data</p>\r\n </div>\r\n\r\n <form onSubmit={handleSubmit} className=\"space-y-4\">\r\n {/* PIN Input */}\r\n <div>\r\n <label htmlFor=\"pin\" className=\"block text-sm font-medium text-gray-700 mb-2\">\r\n Create PIN\r\n </label>\r\n <input\r\n type=\"password\"\r\n id=\"pin\"\r\n value={pin}\r\n onChange={(e) => setPin(e.target.value)}\r\n className=\"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\r\n placeholder=\"Enter your secure PIN\"\r\n />\r\n </div>\r\n\r\n {/* Requirements */}\r\n <div className=\"bg-gray-50 p-4 rounded-lg\">\r\n <h4 className=\"text-sm font-medium text-gray-700 mb-3\">PIN Requirements:</h4>\r\n <div className=\"space-y-2\">\r\n {Object.entries({\r\n length: 'At least 8 characters',\r\n number: 'One number (0-9)',\r\n special: 'One special character (!@#$%^&*)'\r\n }).map(([key, label]) => (\r\n <div key={key} className=\"flex items-center\">\r\n <div className={`w-4 h-4 rounded-full mr-2 flex items-center justify-center ${\r\n requirements[key] ? 'bg-green-500' : 'bg-gray-300'\r\n }`}>\r\n {requirements[key] && (\r\n <svg className=\"w-3 h-3 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n )}\r\n </div>\r\n <span className={`text-sm ${requirements[key] ? 'text-green-600' : 'text-gray-600'}`}>\r\n {label}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Submit Button */}\r\n <button\r\n type=\"submit\"\r\n disabled={!canSubmit}\r\n className={`w-full py-3 px-4 rounded-lg font-semibold transition-colors ${\r\n canSubmit\r\n ? 'bg-blue-600 text-white hover:bg-blue-700'\r\n : 'bg-gray-300 text-gray-500 cursor-not-allowed'\r\n }`}\r\n >\r\n Create PIN\r\n </button>\r\n </form>\r\n\r\n {userEmail && (\r\n <p className=\"text-center text-sm text-gray-500 mt-4\">\r\n Securing account for: <span className=\"font-medium\">{userEmail}</span>\r\n </p>\r\n )}\r\n </div>\r\n );\r\n} ","import React, { useState } from 'react';\r\n\r\nconst dataTypes = [\r\n { \r\n id: 'basic', \r\n name: 'Basic Information', \r\n description: 'Name, email, and essential account details', \r\n icon: '👤',\r\n required: true // Cannot be deselected\r\n },\r\n { \r\n id: 'memories', \r\n name: 'Memories', \r\n description: 'Preferences and interests', \r\n icon: '🧠',\r\n required: false\r\n },\r\n { \r\n id: 'social', \r\n name: 'Social Activity', \r\n description: 'Posts, likes, and social interactions', \r\n icon: '📱',\r\n required: false\r\n },\r\n { \r\n id: 'preferences', \r\n name: 'Preferences', \r\n description: 'Settings and customization choices', \r\n icon: '⚙️',\r\n required: false\r\n }\r\n];\r\n\r\nexport default function DataRequest({ \r\n onComplete, \r\n userEmail, \r\n appName = 'App', \r\n autoFetch = true \r\n}) {\r\n const [selectedData, setSelectedData] = useState({\r\n basic: true, // Always selected by default\r\n memories: false,\r\n social: false,\r\n preferences: false\r\n });\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [isLoadingApi, setIsLoadingApi] = useState(false);\r\n const [apiResponse, setApiResponse] = useState(null);\r\n const [apiError, setApiError] = useState(null);\r\n\r\n const handleDataToggle = (dataId) => {\r\n // Don't allow toggling basic information (it's required)\r\n if (dataId === 'basic') return;\r\n \r\n setSelectedData(prev => ({\r\n ...prev,\r\n [dataId]: !prev[dataId]\r\n }));\r\n };\r\n\r\n const handleRowClick = (dataId) => {\r\n // Make the entire row clickable for better UX\r\n handleDataToggle(dataId);\r\n };\r\n\r\n const generateUserHash = (email) => {\r\n // Simple hash function for user identification\r\n let hash = 0;\r\n const str = email + Date.now().toString();\r\n for (let i = 0; i < str.length; i++) {\r\n const char = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + char;\r\n hash = hash & hash; // Convert to 32-bit integer\r\n }\r\n return `user_${Math.abs(hash).toString(36)}`;\r\n };\r\n\r\n const fetchUserData = async () => {\r\n setIsLoadingApi(true);\r\n setApiError(null);\r\n \r\n try {\r\n // Create a unique user hash for this request\r\n const userHash = generateUserHash(userEmail);\r\n \r\n // Prepare the request with selected data types\r\n const requestData = {\r\n userHash,\r\n appName,\r\n requestedData: Object.entries(selectedData)\r\n .filter(([key, value]) => value)\r\n .map(([key]) => key),\r\n timestamp: new Date().toISOString()\r\n };\r\n\r\n // In a real implementation, you would make an API call here\r\n if (autoFetch) {\r\n // Simulate API call\r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n \r\n // Mock response data\r\n const mockData = {\r\n success: true,\r\n userHash,\r\n data: {\r\n basic: selectedData.basic ? { name: \"John Doe\", email: userEmail } : null,\r\n memories: selectedData.memories ? { interests: [\"technology\", \"travel\"], preferences: [\"dark mode\", \"notifications\"] } : null,\r\n social: selectedData.social ? { posts: 45, likes: 230, connections: 156 } : null,\r\n preferences: selectedData.preferences ? { theme: \"dark\", language: \"en\", notifications: true } : null\r\n }\r\n };\r\n \r\n setApiResponse(mockData);\r\n }\r\n \r\n return requestData;\r\n } catch (error) {\r\n setApiError(`Failed to fetch data: ${error.message}`);\r\n return null;\r\n } finally {\r\n setIsLoadingApi(false);\r\n }\r\n };\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n setIsSubmitting(true);\r\n \r\n try {\r\n const requestData = await fetchUserData();\r\n \r\n if (requestData) {\r\n onComplete({\r\n selectedData,\r\n requestData,\r\n apiResponse,\r\n userEmail,\r\n appName,\r\n timestamp: new Date().toISOString()\r\n });\r\n }\r\n } catch (error) {\r\n setApiError(`Submission failed: ${error.message}`);\r\n } finally {\r\n setIsSubmitting(false);\r\n }\r\n };\r\n\r\n const selectedCount = Object.values(selectedData).filter(Boolean).length;\r\n\r\n return (\r\n <div className=\"w-full max-w-md mx-auto bg-white rounded-lg shadow-xl overflow-hidden\" style={{ maxHeight: '90vh', height: 'auto' }}>\r\n <div className=\"p-4 sm:p-6 overflow-y-auto\" style={{ maxHeight: 'calc(90vh - 4rem)' }}>\r\n <div className=\"text-center mb-4 sm:mb-6\">\r\n <h2 className=\"text-lg sm:text-xl font-bold text-gray-900 mb-2\">Data Request</h2>\r\n <p className=\"text-gray-600 text-xs sm:text-sm\">\r\n Select the data types you'd like to share with <span className=\"font-medium\">{appName}</span>\r\n </p>\r\n </div>\r\n\r\n {/* Privacy Notice */}\r\n <div className=\"mb-4 sm:mb-6 p-2 sm:p-3 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <p className=\"text-blue-800 text-xs sm:text-sm\">\r\n 🔒 Your selected data will be securely processed and used only for the intended purpose.\r\n </p>\r\n </div>\r\n\r\n {/* Data Types Selection */}\r\n <div className=\"space-y-2 sm:space-y-3 mb-4 sm:mb-6\">\r\n {dataTypes.map((dataType) => {\r\n const isSelected = selectedData[dataType.id] || false;\r\n const isRequired = dataType.required;\r\n \r\n return (\r\n <div \r\n key={dataType.id}\r\n className={`flex items-center justify-between p-3 sm:p-4 border rounded-lg transition-colors ${\r\n isRequired \r\n ? 'bg-blue-50 border-blue-200' \r\n : 'hover:bg-gray-50 cursor-pointer'\r\n }`}\r\n onClick={() => handleRowClick(dataType.id)}\r\n >\r\n <div className=\"flex items-center space-x-3\">\r\n <div className=\"text-xl sm:text-2xl\">\r\n {dataType.icon}\r\n </div>\r\n <div>\r\n <h3 className=\"font-medium text-gray-900 text-sm sm:text-base\">\r\n {dataType.name}\r\n {isRequired && <span className=\"text-blue-600 ml-1\">*</span>}\r\n </h3>\r\n <p className=\"text-xs sm:text-sm text-gray-500\">{dataType.description}</p>\r\n </div>\r\n </div>\r\n \r\n {/* Toggle Switch or Required Badge */}\r\n {isRequired ? (\r\n <div className=\"px-2 py-1 bg-blue-600 text-white text-xs rounded-full\">\r\n Required\r\n </div>\r\n ) : (\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleDataToggle(dataType.id);\r\n }}\r\n className={`relative inline-flex h-5 sm:h-6 w-9 sm:w-11 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 ${\r\n isSelected ? 'bg-blue-600' : 'bg-gray-200'\r\n }`}\r\n >\r\n <span\r\n className={`inline-block h-3 sm:h-4 w-3 sm:w-4 transform rounded-full bg-white transition-transform ${\r\n isSelected ? 'translate-x-5 sm:translate-x-6' : 'translate-x-1'\r\n }`}\r\n />\r\n </button>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Selection Summary */}\r\n <div className=\"mb-3 sm:mb-4 p-2 sm:p-3 bg-green-50 border border-green-200 rounded-lg\">\r\n <p className=\"text-green-800 text-xs sm:text-sm\">\r\n ✅ {selectedCount} data type{selectedCount > 1 ? 's' : ''} selected for sharing\r\n </p>\r\n </div>\r\n\r\n {/* API Status */}\r\n {isLoadingApi && (\r\n <div className=\"mb-3 sm:mb-4 p-2 sm:p-3 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <p className=\"text-blue-800 text-xs sm:text-sm\">🔄 Processing your data request...</p>\r\n </div>\r\n )}\r\n\r\n {apiError && (\r\n <div className=\"mb-3 sm:mb-4 p-2 sm:p-3 bg-red-50 border border-red-200 rounded-lg\">\r\n <p className=\"text-red-800 text-xs sm:text-sm\">❌ {apiError}</p>\r\n </div>\r\n )}\r\n\r\n {/* Action Buttons */}\r\n <form onSubmit={handleSubmit} className=\"space-y-3\">\r\n <button\r\n type=\"submit\"\r\n disabled={isSubmitting || selectedCount === 0}\r\n className={`w-full py-2 sm:py-3 px-4 rounded-lg font-semibold transition-colors text-sm sm:text-base ${\r\n selectedCount > 0 && !isSubmitting\r\n ? 'bg-blue-600 text-white hover:bg-blue-700'\r\n : 'bg-gray-300 text-gray-500 cursor-not-allowed'\r\n }`}\r\n >\r\n {isSubmitting ? 'Processing...' : `Share ${selectedCount} data type${selectedCount > 1 ? 's' : ''}`}\r\n </button>\r\n \r\n <button\r\n type=\"button\"\r\n onClick={() => onComplete({ selectedData: {}, cancelled: true })}\r\n className=\"w-full py-2 text-gray-500 hover:text-gray-700 text-xs sm:text-sm\"\r\n >\r\n Cancel\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n} ","import React, { useEffect, useState } from 'react';\nimport EmailAuth from './components/EmailAuth.js';\nimport UniversalOnboarding from './components/UniversalOnboarding.js';\nimport PinSetup from './components/PinSetup.js';\nimport DataRequest from './components/DataRequest.js';\n\nexport function OnairosButton({\n requestData, \n webpageName, \n inferenceData = null, \n onComplete = null, \n autoFetch = true,\n proofMode = false, \n textLayout = 'below', \n textColor = 'white',\n login = false,\n buttonType = 'pill',\n loginReturn = null,\n loginType = 'signIn',\n visualType = 'full',\n appIcon = null,\n}) {\n\n const [showOverlay, setShowOverlay] = useState(false);\n const [currentFlow, setCurrentFlow] = useState('email'); // 'email' | 'onboarding' | 'pin' | 'dataRequest'\n const [userData, setUserData] = useState(null);\n const [error, setError] = useState(null);\n\n // Check for existing user session\n useEffect(() => {\n const checkExistingSession = () => {\n const savedUser = localStorage.getItem('onairosUser');\n if (savedUser) {\n try {\n const user = JSON.parse(savedUser);\n setUserData(user);\n // If user has completed onboarding and PIN setup, go directly to data request\n if (user.onboardingComplete && user.pinCreated) {\n setCurrentFlow('dataRequest');\n } else if (user.verified && !user.onboardingComplete) {\n setCurrentFlow('onboarding');\n } else if (user.onboardingComplete && !user.pinCreated) {\n setCurrentFlow('pin');\n }\n } catch (error) {\n console.error('Error parsing saved user data:', error);\n localStorage.removeItem('onairosUser');\n }\n }\n };\n\n checkExistingSession();\n }, []);\n\n const openTerminal = async () => {\n try {\n console.log('🔥 openTerminal called');\n setShowOverlay(true);\n } catch (error) {\n console.error('Error in openTerminal:', error);\n }\n };\n\n const handleCloseOverlay = () => {\n setShowOverlay(false);\n setError(null);\n };\n\n // Handle clicks on the backdrop to close modal\n const handleBackdropClick = (e) => {\n if (e.target === e.currentTarget) {\n handleCloseOverlay();\n }\n };\n\n const handleEmailAuthSuccess = (authData) => {\n console.log('Email auth successful:', authData);\n const newUserData = {\n ...authData,\n verified: true,\n onboardingComplete: false,\n pinCreated: false\n };\n setUserData(newUserData);\n localStorage.setItem('onairosUser', JSON.stringify(newUserData));\n setCurrentFlow('onboarding');\n };\n\n const handleOnboardingComplete = (onboardingData) => {\n console.log('Onboarding completed:', onboardingData);\n const updatedUserData = {\n ...userData,\n onboardingComplete: true,\n connectedAccounts: onboardingData.connectedAccounts || []\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n setCurrentFlow('pin');\n };\n\n const handlePinSetupComplete = (pinData) => {\n console.log('PIN setup completed:', pinData);\n const updatedUserData = {\n ...userData,\n ...pinData,\n pinCreated: true\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n \n // Move to data request flow within the same overlay\n setCurrentFlow('dataRequest');\n };\n\n const handleDataRequestComplete = (requestResult) => {\n console.log('🔥 OnairosButton: Data request completed:', requestResult);\n \n // Update user data with request result\n const updatedUserData = {\n ...userData,\n lastDataRequest: requestResult\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n\n // Close overlay\n setShowOverlay(false);\n\n // Call onComplete callback if provided\n console.log('🔥 Calling onComplete callback with:', requestResult);\n if (onComplete) {\n try {\n onComplete(requestResult);\n console.log('🔥 onComplete callback executed successfully');\n } catch (error) {\n console.error('🔥 Error in onComplete callback:', error);\n }\n } else {\n console.log('🔥 No onComplete callback provided');\n }\n };\n\n const renderCurrentFlow = () => {\n switch (currentFlow) {\n case 'email':\n return (\n <EmailAuth \n onSuccess={handleEmailAuthSuccess}\n testMode={true} // Set to false in production\n />\n );\n \n case 'onboarding':\n return (\n <UniversalOnboarding \n onComplete={handleOnboardingComplete}\n appIcon={appIcon || \"https://onairos.sirv.com/Images/OnairosBlack.png\"}\n appName={webpageName}\n username={userData?.email || userData?.username}\n />\n );\n \n case 'pin':\n return (\n <PinSetup \n onComplete={handlePinSetupComplete}\n userEmail={userData?.email}\n />\n );\n \n case 'dataRequest':\n return (\n <DataRequest \n onComplete={handleDataRequestComplete}\n userEmail={userData?.email}\n requestData={requestData}\n appName={webpageName}\n autoFetch={autoFetch}\n appIcon={appIcon}\n />\n );\n \n default:\n return (\n <div className=\"flex flex-col items-center space-y-4 p-6\">\n <div className=\"animate-spin h-8 w-8 border-2 border-blue-600 rounded-full border-t-transparent\"></div>\n <p className=\"text-gray-600\">Loading...</p>\n </div>\n );\n }\n };\n\n // Styling and button class based on visual type\n const buttonClass = \n `flex items-center justify-center font-bold rounded cursor-pointer ${\n buttonType === 'pill' ? 'px-4 py-2' : 'w-12 h-12'\n } bg-transparent OnairosConnect`;\n\n const buttonStyle = {\n flexDirection: textLayout === 'below' ? 'column' : 'row',\n backgroundColor: 'transparent',\n color: textColor,\n border: '1px solid transparent',\n };\n\n // Icon and text style based on the visualType\n const logoStyle = {\n width: '20px',\n height: '20px',\n marginRight: visualType === 'full' ? '12px' : '0',\n };\n\n const getText = () => {\n switch (loginType) {\n case 'signUp':\n return 'Sign Up with Onairos';\n case 'signOut':\n return 'Sign Out of Onairos';\n default:\n return 'Sign In with Onairos';\n }\n };\n\n return (\n <>\n <button\n className={buttonClass}\n onClick={openTerminal}\n style={buttonStyle}\n >\n {(visualType === 'full' || visualType === 'icon') && (\n <img\n src={login ? \"https://onairos.sirv.com/Images/OnairosWhite.png\" : \"https://onairos.sirv.com/Images/OnairosBlack.png\"}\n alt=\"Onairos Logo\"\n style={logoStyle}\n />\n )}\n {visualType !== 'icon' && (\n <span className={`${textColor === 'black' ? 'text-black' : 'text-white'} ${visualType === 'icon' ? 'sr-only' : ''} ${textLayout === 'right' ? 'ml-2' : textLayout === 'left' ? 'mr-2' : ''}`}>\n {getText()}\n </span>\n )}\n </button>\n\n {/* Full-Screen Overlay (Plaid/SendPay Style) */}\n {showOverlay && (\n <div \n className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\"\n onClick={handleBackdropClick}\n >\n <div \n className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden relative\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* Close button */}\n <button\n onClick={handleCloseOverlay}\n className=\"absolute top-4 right-4 text-gray-400 hover:text-gray-600 z-10\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n\n {/* Content */}\n <div className=\"overflow-y-auto max-h-[90vh]\">\n {renderCurrentFlow()}\n </div>\n </div>\n </div>\n )}\n </>\n );\n}\n\nexport default OnairosButton;","import React from 'react';\r\nimport { OnairosButton } from './onairosButton.jsx';\r\n\r\n// Configuration object for the Telegram SDK\r\n\r\nexport function Onairos(props) {\r\n return (\r\n <>\r\n {/* <DeepLink/> */}\r\n <OnairosButton {...props} />\r\n </>\r\n );\r\n}\r\n\r\nexport default Onairos;\r\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","y","x","d","__WEBPACK_EXTERNAL_MODULE_react__","Component","createElement","forwardRef","useEffect","useState","toPascalCase","string","camelCase","replace","match","p1","p2","toUpperCase","toLowerCase","toCamelCase","charAt","slice","mergeClasses","classes","filter","className","index","array","Boolean","trim","indexOf","join","hasA11yProp","props","startsWith","defaultAttributes","xmlns","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","Icon","color","size","absoluteStrokeWidth","children","iconNode","rest","ref","Number","map","tag","attrs","Array","isArray","createLucideIcon","iconName","displayName","Mail","rx","ArrowRight","Check","EmailAuth","_ref","onSuccess","testMode","email","setEmail","code","setCode","step","setStep","isLoading","setIsLoading","error","setError","handleEmailSubmit","async","e","preventDefault","test","validateEmail","setTimeout","fetch","method","headers","body","JSON","stringify","ok","Error","message","handleCodeSubmit","verified","response","data","json","token","React","onSubmit","htmlFor","type","id","value","onChange","target","placeholder","required","disabled","maxLength","onClick","YoutubeConnector","constructor","super","this","state","connected","open","isConnecting","handleClose","bind","handleOpen","youtubeConnect","setConnected","setDisconnected","setState","onConnectionChange","updateConnections","then","catch","console","updateType","newConnection","jsonData","session","username","localStorage","getItem","onClose","result","youtubeURL","window","location","href","render","LinkedInConnector","linkedinConnect","linkedinURL","InstagramConnector","instagramConnect","instagramURL","PinterestConnector","pinterestConnect","pinterestURL","RedditConnector","redditConnect","redditURL","GmailConnector","gmailConnect","gmailURL","platforms","name","icon","connector","UniversalOnboarding","onComplete","appIcon","appName","connectedAccounts","setConnectedAccounts","setIsConnecting","activeConnector","setActiveConnector","handleConnectionChange","platformName","isConnected","prev","_objectSpread","connectedCount","values","length","style","maxHeight","src","alt","platform","concat","connectorType","handleToggle","handleContinue","entries","_ref2","_ref3","totalConnections","PinSetup","userEmail","pin","setPin","requirements","setRequirements","number","special","canSubmit","every","req","pinCreated","timestamp","Date","toISOString","label","dataTypes","description","DataRequest","autoFetch","selectedData","setSelectedData","basic","memories","social","preferences","isSubmitting","setIsSubmitting","isLoadingApi","setIsLoadingApi","apiResponse","setApiResponse","apiError","setApiError","handleDataToggle","dataId","fetchUserData","userHash","hash","str","now","toString","i","charCodeAt","Math","abs","generateUserHash","requestData","requestedData","Promise","resolve","mockData","success","interests","posts","likes","connections","theme","language","notifications","selectedCount","dataType","isSelected","isRequired","handleRowClick","stopPropagation","cancelled","OnairosButton","webpageName","inferenceData","proofMode","textLayout","textColor","login","buttonType","loginReturn","loginType","visualType","showOverlay","setShowOverlay","currentFlow","setCurrentFlow","userData","setUserData","checkExistingSession","savedUser","user","parse","onboardingComplete","removeItem","handleCloseOverlay","handleEmailAuthSuccess","authData","log","newUserData","setItem","handleOnboardingComplete","onboardingData","updatedUserData","handlePinSetupComplete","pinData","handleDataRequestComplete","requestResult","lastDataRequest","buttonClass","buttonStyle","flexDirection","backgroundColor","border","logoStyle","marginRight","getText","currentTarget","renderCurrentFlow","Onairos"],"sourceRoot":""}
1
+ {"version":3,"file":"onairos.esm.js","mappings":"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","sources":["webpack://onairos/webpack/bootstrap","webpack://onairos/webpack/runtime/define property getters","webpack://onairos/webpack/runtime/hasOwnProperty shorthand","webpack://onairos/external module \"react\"","webpack://onairos/./node_modules/lucide-react/dist/esm/shared/src/utils.js","webpack://onairos/./node_modules/lucide-react/dist/esm/defaultAttributes.js","webpack://onairos/./node_modules/lucide-react/dist/esm/Icon.js","webpack://onairos/./node_modules/lucide-react/dist/esm/createLucideIcon.js","webpack://onairos/./node_modules/lucide-react/dist/esm/icons/mail.js","webpack://onairos/./node_modules/lucide-react/dist/esm/icons/arrow-right.js","webpack://onairos/./node_modules/lucide-react/dist/esm/icons/check.js","webpack://onairos/./src/components/EmailAuth.js","webpack://onairos/./src/components/connectors/YoutubeConnector.js","webpack://onairos/./src/components/connectors/LinkedInConnector.js","webpack://onairos/./src/components/connectors/InstagramConnector.js","webpack://onairos/./src/components/connectors/PinterestConnector.js","webpack://onairos/./src/components/connectors/RedditConnector.js","webpack://onairos/./src/components/connectors/GmailConnector.js","webpack://onairos/./src/components/UniversalOnboarding.js","webpack://onairos/./src/components/PinSetup.js","webpack://onairos/./src/components/DataRequest.js","webpack://onairos/./src/onairosButton.jsx","webpack://onairos/./src/onairos.jsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"Component\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.Component, [\"createElement\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.createElement, [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_react__[\"default\"], [\"forwardRef\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.forwardRef, [\"useEffect\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.useEffect, [\"useState\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.useState });","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => {\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"20\", height: \"16\", x: \"2\", y: \"4\", rx: \"2\", key: \"18n3k1\" }],\n [\"path\", { d: \"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\", key: \"1ocrg3\" }]\n];\nconst Mail = createLucideIcon(\"mail\", __iconNode);\n\nexport { __iconNode, Mail as default };\n//# sourceMappingURL=mail.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * @license lucide-react v0.503.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","import React, { useState } from 'react';\r\nimport { Mail, ArrowRight, Check } from 'lucide-react';\r\n\r\nexport default function EmailAuth({ onSuccess, testMode = true }) {\r\n const [email, setEmail] = useState('');\r\n const [code, setCode] = useState('');\r\n const [step, setStep] = useState('email'); // 'email' | 'code' | 'success'\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState('');\r\n\r\n const validateEmail = (email) => {\r\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return emailRegex.test(email);\r\n };\r\n\r\n const handleEmailSubmit = async (e) => {\r\n e.preventDefault();\r\n setError('');\r\n\r\n if (!validateEmail(email)) {\r\n setError('Please enter a valid email address');\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n\r\n try {\r\n if (testMode) {\r\n // In test mode, skip email sending and go directly to code step\r\n setTimeout(() => {\r\n setStep('code');\r\n setIsLoading(false);\r\n }, 1000);\r\n } else {\r\n // In production, send actual email\r\n const response = await fetch('https://api2.onairos.uk/email/verify', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ email }),\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error('Failed to send verification code');\r\n }\r\n\r\n setStep('code');\r\n setIsLoading(false);\r\n }\r\n } catch (error) {\r\n setError(error.message);\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const handleCodeSubmit = async (e) => {\r\n e.preventDefault();\r\n setError('');\r\n\r\n if (testMode && code === '123456') {\r\n // Test mode - accept 123456 as valid code\r\n setStep('success');\r\n setTimeout(() => {\r\n onSuccess({ email, verified: true });\r\n }, 1000);\r\n return;\r\n }\r\n\r\n if (!testMode) {\r\n setIsLoading(true);\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/email/verify/confirm', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({ email, code }),\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error('Invalid verification code');\r\n }\r\n\r\n const data = await response.json();\r\n setStep('success');\r\n setTimeout(() => {\r\n onSuccess({ email, verified: true, token: data.token });\r\n }, 1000);\r\n } catch (error) {\r\n setError(error.message);\r\n setIsLoading(false);\r\n }\r\n } else {\r\n setError('Invalid code. Use 123456 for testing.');\r\n }\r\n };\r\n\r\n const renderEmailStep = () => (\r\n <div className=\"flex flex-col items-center space-y-6 w-full\">\r\n <div className=\"flex items-center justify-center w-16 h-16 bg-blue-100 rounded-full\">\r\n <Mail className=\"w-8 h-8 text-blue-600\" />\r\n </div>\r\n \r\n <div className=\"text-center\">\r\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">Sign in to Onairos</h2>\r\n <p className=\"text-gray-600\">Enter your email address to continue</p>\r\n {testMode && (\r\n <p className=\"text-sm text-blue-600 mt-2\">Test mode: Any valid email will work</p>\r\n )}\r\n </div>\r\n\r\n <form onSubmit={handleEmailSubmit} className=\"w-full max-w-md space-y-4\">\r\n <div>\r\n <label htmlFor=\"email\" className=\"block text-sm font-medium text-gray-700 mb-1\">\r\n Email address\r\n </label>\r\n <input\r\n type=\"email\"\r\n id=\"email\"\r\n value={email}\r\n onChange={(e) => setEmail(e.target.value)}\r\n placeholder=\"Enter your email\"\r\n className=\"w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none\"\r\n required\r\n />\r\n </div>\r\n\r\n {error && (\r\n <p className=\"text-sm text-red-600\">{error}</p>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading}\r\n className=\"w-full py-3 px-4 bg-blue-600 text-white rounded-lg font-semibold hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center\"\r\n >\r\n {isLoading ? (\r\n <div className=\"animate-spin h-5 w-5 border-2 border-white rounded-full border-t-transparent\"></div>\r\n ) : (\r\n <>\r\n Continue\r\n <ArrowRight className=\"ml-2 w-4 h-4\" />\r\n </>\r\n )}\r\n </button>\r\n </form>\r\n </div>\r\n );\r\n\r\n const renderCodeStep = () => (\r\n <div className=\"flex flex-col items-center space-y-6 w-full\">\r\n <div className=\"flex items-center justify-center w-16 h-16 bg-green-100 rounded-full\">\r\n <Mail className=\"w-8 h-8 text-green-600\" />\r\n </div>\r\n \r\n <div className=\"text-center\">\r\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">Check your email</h2>\r\n <p className=\"text-gray-600\">We sent a verification code to</p>\r\n <p className=\"text-gray-900 font-medium\">{email}</p>\r\n {testMode && (\r\n <p className=\"text-sm text-blue-600 mt-2\">Test mode: Use code 123456</p>\r\n )}\r\n </div>\r\n\r\n <form onSubmit={handleCodeSubmit} className=\"w-full max-w-md space-y-4\">\r\n <div>\r\n <label htmlFor=\"code\" className=\"block text-sm font-medium text-gray-700 mb-1\">\r\n Verification code\r\n </label>\r\n <input\r\n type=\"text\"\r\n id=\"code\"\r\n value={code}\r\n onChange={(e) => setCode(e.target.value)}\r\n placeholder=\"Enter 6-digit code\"\r\n className=\"w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 outline-none text-center text-lg tracking-widest\"\r\n maxLength=\"6\"\r\n required\r\n />\r\n </div>\r\n\r\n {error && (\r\n <p className=\"text-sm text-red-600\">{error}</p>\r\n )}\r\n\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading}\r\n className=\"w-full py-3 px-4 bg-blue-600 text-white rounded-lg font-semibold hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center\"\r\n >\r\n {isLoading ? (\r\n <div className=\"animate-spin h-5 w-5 border-2 border-white rounded-full border-t-transparent\"></div>\r\n ) : (\r\n 'Verify Code'\r\n )}\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n onClick={() => setStep('email')}\r\n className=\"w-full py-2 px-4 text-gray-600 hover:text-gray-800\"\r\n >\r\n Use a different email\r\n </button>\r\n </form>\r\n </div>\r\n );\r\n\r\n const renderSuccessStep = () => (\r\n <div className=\"flex flex-col items-center space-y-6 w-full\">\r\n <div className=\"flex items-center justify-center w-16 h-16 bg-green-100 rounded-full\">\r\n <Check className=\"w-8 h-8 text-green-600\" />\r\n </div>\r\n \r\n <div className=\"text-center\">\r\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">Email verified!</h2>\r\n <p className=\"text-gray-600\">Setting up your account...</p>\r\n </div>\r\n\r\n <div className=\"w-8 h-8\">\r\n <div className=\"animate-spin h-8 w-8 border-2 border-blue-600 rounded-full border-t-transparent\"></div>\r\n </div>\r\n </div>\r\n );\r\n\r\n return (\r\n <div className=\"flex flex-col items-center space-y-6 p-6 w-full\">\r\n {step === 'email' && renderEmailStep()}\r\n {step === 'code' && renderCodeStep()}\r\n {step === 'success' && renderSuccessStep()}\r\n </div>\r\n );\r\n} ","import React, { Component } from 'react';\r\n\r\nclass YoutubeConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.youtubeConnect = this.youtubeConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('YouTube', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n // Call UpdateConnections API to remove connection\r\n this.updateConnections('Remove', 'Youtube').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('YouTube', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing YouTube connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async youtubeConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/youtube/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.youtubeURL) {\r\n // Open OAuth URL in current window\r\n window.location.href = result.youtubeURL;\r\n } else {\r\n console.error('No YouTube URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('YouTube connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your YouTube Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your YouTube Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your YouTube:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Account Info</li>\r\n <li>Liked and Watched Videos</li>\r\n <li>Subscribed Channels and Playlist Videos</li>\r\n </ul>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/compliance-google-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos\r\n </a>{' '}\r\n complies with{' '}\r\n <a href=\"https://policies.google.com/privacy\" className=\"text-blue-600 hover:underline\">\r\n Google API Services User Data Policy\r\n </a>\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.youtubeConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default YoutubeConnector; ","import React, { Component } from 'react';\r\n\r\nclass LinkedInConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.linkedinConnect = this.linkedinConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('LinkedIn', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n this.updateConnections('Remove', 'LinkedIn').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('LinkedIn', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing LinkedIn connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async linkedinConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/linkedin/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.linkedinURL) {\r\n window.location.href = result.linkedinURL;\r\n } else {\r\n console.error('No LinkedIn URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('LinkedIn connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your LinkedIn Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your LinkedIn Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your LinkedIn:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Profile Information</li>\r\n <li>Professional Experience</li>\r\n <li>Network Connections</li>\r\n <li>Posts and Activity</li>\r\n </ul>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/privacy-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos Privacy Policy\r\n </a>{' '}\r\n - Your professional data is handled with the highest security standards.\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.linkedinConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default LinkedInConnector; ","import React, { Component } from 'react';\r\n\r\nclass InstagramConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.instagramConnect = this.instagramConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Instagram', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n this.updateConnections('Remove', 'Instagram').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Instagram', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing Instagram connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async instagramConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/instagram/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.instagramURL) {\r\n window.location.href = result.instagramURL;\r\n } else {\r\n console.error('No Instagram URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('Instagram connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your Instagram Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your Instagram Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your Instagram:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Profile Information</li>\r\n <li>Posts and Stories</li>\r\n <li>Liked Content</li>\r\n <li>Following and Followers</li>\r\n </ul>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/compliance-meta-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos\r\n </a>{' '}\r\n complies with{' '}\r\n <a href=\"https://developers.facebook.com/policy\" className=\"text-blue-600 hover:underline\">\r\n Meta Platform Policy\r\n </a>\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.instagramConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default InstagramConnector; ","import React, { Component } from 'react';\r\n\r\nclass PinterestConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.pinterestConnect = this.pinterestConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Pinterest', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n this.updateConnections('Remove', 'Pinterest').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Pinterest', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing Pinterest connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async pinterestConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/pinterest/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.pinterestURL) {\r\n window.location.href = result.pinterestURL;\r\n } else {\r\n console.error('No Pinterest URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('Pinterest connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your Pinterest Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your Pinterest Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your Pinterest:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Profile Information</li>\r\n <li>Boards and Pins</li>\r\n <li>Saved and Liked Pins</li>\r\n <li>Following and Followers</li>\r\n </ul>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/privacy-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos Privacy Policy\r\n </a>{' '}\r\n - Your creative interests and preferences are securely processed.\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.pinterestConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default PinterestConnector; ","import React, { Component } from 'react';\r\n\r\nclass RedditConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.redditConnect = this.redditConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Reddit', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n this.updateConnections('Remove', 'Reddit').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Reddit', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing Reddit connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async redditConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/reddit/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.redditURL) {\r\n window.location.href = result.redditURL;\r\n } else {\r\n console.error('No Reddit URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('Reddit connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your Reddit Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your Reddit Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your Reddit:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Profile Information</li>\r\n <li>Posts and Comments</li>\r\n <li>Upvoted and Saved Content</li>\r\n <li>Subscribed Subreddits</li>\r\n </ul>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/privacy-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos Privacy Policy\r\n </a>{' '}\r\n - Your Reddit activity helps us understand your interests and preferences.\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.redditConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default RedditConnector; ","import React, { Component } from 'react';\r\n\r\nclass GmailConnector extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n connected: false,\r\n open: false,\r\n isConnecting: false,\r\n };\r\n this.handleClose = this.handleClose.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n this.gmailConnect = this.gmailConnect.bind(this);\r\n this.setConnected = this.setConnected.bind(this);\r\n this.setDisconnected = this.setDisconnected.bind(this);\r\n }\r\n\r\n setConnected() {\r\n this.setState({ connected: true });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Gmail', true);\r\n }\r\n this.handleClose();\r\n }\r\n\r\n setDisconnected() {\r\n this.updateConnections('Remove', 'Gmail').then(() => {\r\n this.setState({ connected: false });\r\n if (this.props.onConnectionChange) {\r\n this.props.onConnectionChange('Gmail', false);\r\n }\r\n this.handleClose();\r\n }).catch((error) => {\r\n console.error('Error removing Gmail connection:', error);\r\n });\r\n }\r\n\r\n async updateConnections(updateType, newConnection) {\r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n updateType,\r\n newConnection\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/connections/update', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n return await response.json();\r\n } catch (error) {\r\n console.error('UpdateConnections error:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n handleOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleClose() {\r\n this.setState({ open: false });\r\n if (this.props.onClose) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n async gmailConnect() {\r\n this.setState({ isConnecting: true });\r\n \r\n const jsonData = {\r\n session: {\r\n username: localStorage.getItem(\"username\") || this.props.username\r\n },\r\n };\r\n\r\n try {\r\n const response = await fetch('https://api2.onairos.uk/gmail/authorize', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(jsonData),\r\n });\r\n\r\n const result = await response.json();\r\n \r\n if (result.gmailURL) {\r\n window.location.href = result.gmailURL;\r\n } else {\r\n console.error('No Gmail URL received');\r\n this.setState({ isConnecting: false });\r\n }\r\n } catch (error) {\r\n console.error('Gmail connection error:', error);\r\n this.setState({ isConnecting: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { open = this.props.open || this.state.open } = this.props;\r\n \r\n if (!open) return null;\r\n \r\n return (\r\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\r\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden\">\r\n <div className=\"p-6\">\r\n <h2 className=\"text-xl font-bold text-gray-900 mb-4\">\r\n Grant Onairos Access to your Gmail Account?\r\n </h2>\r\n \r\n <div className=\"space-y-4 text-gray-700\">\r\n <p>\r\n Grant Permission to your Gmail Account, so we can build your Data Models.\r\n </p>\r\n \r\n <div>\r\n <p className=\"font-medium mb-2\">We will access your Gmail:</p>\r\n <ul className=\"list-disc ml-6 space-y-1\">\r\n <li>Basic Account Information</li>\r\n <li>Email Metadata (subjects, dates, senders)</li>\r\n <li>Email Categories and Labels</li>\r\n <li>Communication Patterns</li>\r\n </ul>\r\n </div>\r\n \r\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-3\">\r\n <p className=\"text-yellow-800 text-sm font-medium\">\r\n <strong>Note:</strong> We do NOT read the content of your emails. Only metadata is processed.\r\n </p>\r\n </div>\r\n \r\n <p>\r\n We will delete all the data used once your Model is Created\r\n </p>\r\n \r\n <p className=\"text-sm\">\r\n <a href=\"https://onairos.uk/compliance-google-policy\" className=\"text-blue-600 hover:underline\">\r\n Onairos\r\n </a>{' '}\r\n complies with{' '}\r\n <a href=\"https://policies.google.com/privacy\" className=\"text-blue-600 hover:underline\">\r\n Google API Services User Data Policy\r\n </a>\r\n </p>\r\n </div>\r\n \r\n <div className=\"flex space-x-3 mt-6\">\r\n <button\r\n onClick={this.handleClose}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 border border-gray-300 rounded-lg text-gray-700 hover:bg-gray-50 disabled:opacity-50\"\r\n >\r\n Disagree\r\n </button>\r\n <button\r\n onClick={this.gmailConnect}\r\n disabled={this.state.isConnecting}\r\n className=\"flex-1 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 disabled:opacity-50\"\r\n >\r\n {this.state.isConnecting ? 'Connecting...' : 'Agree'}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default GmailConnector; ","import React, { useState, useEffect } from 'react';\r\nimport YoutubeConnector from './connectors/YoutubeConnector';\r\nimport LinkedInConnector from './connectors/LinkedInConnector';\r\nimport InstagramConnector from './connectors/InstagramConnector';\r\nimport PinterestConnector from './connectors/PinterestConnector';\r\nimport RedditConnector from './connectors/RedditConnector';\r\nimport GmailConnector from './connectors/GmailConnector';\r\n\r\nconst platforms = [\r\n { name: 'YouTube', icon: '📺', color: 'bg-red-500', connector: 'youtube' },\r\n { name: 'Reddit', icon: '🔥', color: 'bg-orange-500', connector: 'reddit' },\r\n { name: 'Instagram', icon: '📷', color: 'bg-pink-500', connector: 'instagram' },\r\n { name: 'Pinterest', icon: '📌', color: 'bg-red-600', connector: 'pinterest' },\r\n { name: 'LinkedIn', icon: '💼', color: 'bg-blue-700', connector: 'linkedin' },\r\n { name: 'Gmail', icon: '📧', color: 'bg-red-500', connector: 'gmail' }\r\n];\r\n\r\nexport default function UniversalOnboarding({ onComplete, appIcon, appName = 'App', username }) {\r\n const [connectedAccounts, setConnectedAccounts] = useState({});\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n const [activeConnector, setActiveConnector] = useState(null);\r\n\r\n const handleConnectionChange = (platformName, isConnected) => {\r\n setConnectedAccounts(prev => ({\r\n ...prev,\r\n [platformName]: isConnected\r\n }));\r\n setActiveConnector(null);\r\n };\r\n\r\n const handleToggle = async (platformName, connectorType) => {\r\n if (isConnecting) return;\r\n \r\n const isCurrentlyConnected = connectedAccounts[platformName];\r\n \r\n if (isCurrentlyConnected) {\r\n // Disconnect - call the connector's disconnect method\r\n setConnectedAccounts(prev => ({\r\n ...prev,\r\n [platformName]: false\r\n }));\r\n } else {\r\n // Connect - open the OAuth dialog\r\n setActiveConnector(connectorType);\r\n }\r\n };\r\n\r\n const handleContinue = () => {\r\n const connected = Object.entries(connectedAccounts)\r\n .filter(([platform, isConnected]) => isConnected)\r\n .map(([platform]) => platform);\r\n \r\n onComplete({\r\n connectedAccounts: connected,\r\n totalConnections: connected.length\r\n });\r\n };\r\n\r\n const connectedCount = Object.values(connectedAccounts).filter(Boolean).length;\r\n\r\n return (\r\n <div className=\"w-full max-w-md mx-auto bg-white rounded-lg shadow-xl overflow-hidden\" style={{ maxHeight: '90vh', height: 'auto' }}>\r\n <div className=\"p-4 sm:p-6 overflow-y-auto\" style={{ maxHeight: 'calc(90vh - 4rem)' }}>\r\n {/* Header with App Logo and Arrow to Onairos */}\r\n <div className=\"flex items-center justify-center mb-4 sm:mb-6\">\r\n <div className=\"flex items-center space-x-3\">\r\n <img \r\n src={appIcon || \"https://onairos.sirv.com/Images/OnairosBlack.png\"} \r\n alt={appName} \r\n className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg\"\r\n />\r\n <div className=\"flex items-center text-gray-400\">\r\n <svg className=\"w-5 h-5 sm:w-6 sm:h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M17 8l4 4m0 0l-4 4m4-4H3\" />\r\n </svg>\r\n </div>\r\n <img \r\n src=\"https://onairos.sirv.com/Images/OnairosBlack.png\" \r\n alt=\"Onairos\" \r\n className=\"w-8 h-8 sm:w-10 sm:h-10 rounded-lg\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"text-center mb-4 sm:mb-6\">\r\n <h2 className=\"text-lg sm:text-xl font-bold text-gray-900 mb-2\">Connect Your Accounts</h2>\r\n <p className=\"text-gray-600 text-xs sm:text-sm\">\r\n Choose which accounts to connect for a personalized experience\r\n </p>\r\n </div>\r\n\r\n {/* Privacy Notice */}\r\n <div className=\"mb-4 sm:mb-6 p-2 sm:p-3 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <p className=\"text-blue-800 text-xs sm:text-sm\">\r\n 🔒 Your data is never shared with anyone. It's only used to train your personal model and is stored securely.\r\n </p>\r\n </div>\r\n\r\n {/* Platform List - Vertical Layout with Toggles */}\r\n <div className=\"space-y-2 sm:space-y-3 mb-4 sm:mb-6\">\r\n {platforms.map((platform) => {\r\n const isConnected = connectedAccounts[platform.name] || false;\r\n \r\n return (\r\n <div \r\n key={platform.name}\r\n className=\"flex items-center justify-between p-3 sm:p-4 border rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <div className=\"flex items-center space-x-3\">\r\n <div className={`w-8 h-8 sm:w-10 sm:h-10 rounded-lg ${platform.color} flex items-center justify-center text-white text-base sm:text-lg`}>\r\n {platform.icon}\r\n </div>\r\n <div>\r\n <h3 className=\"font-medium text-gray-900 text-sm sm:text-base\">{platform.name}</h3>\r\n <p className=\"text-xs sm:text-sm text-gray-500\">\r\n {isConnected ? 'Connected' : 'Not connected'}\r\n </p>\r\n </div>\r\n </div>\r\n \r\n {/* Toggle Switch */}\r\n <button\r\n onClick={() => handleToggle(platform.name, platform.connector)}\r\n disabled={isConnecting}\r\n className={`relative inline-flex h-5 sm:h-6 w-9 sm:w-11 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 ${\r\n isConnected ? 'bg-blue-600' : 'bg-gray-200'\r\n } ${isConnecting ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\r\n >\r\n <span\r\n className={`inline-block h-3 sm:h-4 w-3 sm:w-4 transform rounded-full bg-white transition-transform ${\r\n isConnected ? 'translate-x-5 sm:translate-x-6' : 'translate-x-1'\r\n }`}\r\n />\r\n </button>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Connection Status */}\r\n {connectedCount > 0 && (\r\n <div className=\"mb-3 sm:mb-4 p-2 sm:p-3 bg-green-50 border border-green-200 rounded-lg\">\r\n <p className=\"text-green-800 text-xs sm:text-sm\">\r\n ✅ {connectedCount} account{connectedCount > 1 ? 's' : ''} connected\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* Continue Button */}\r\n <button\r\n onClick={handleContinue}\r\n disabled={connectedCount === 0}\r\n className={`w-full py-2 sm:py-3 px-4 rounded-lg font-semibold transition-colors text-sm sm:text-base ${\r\n connectedCount > 0\r\n ? 'bg-blue-600 text-white hover:bg-blue-700'\r\n : 'bg-gray-300 text-gray-500 cursor-not-allowed'\r\n }`}\r\n >\r\n Continue {connectedCount > 0 ? `with ${connectedCount} account${connectedCount > 1 ? 's' : ''}` : ''}\r\n </button>\r\n\r\n {/* Skip Option */}\r\n <button\r\n onClick={() => onComplete({ connectedAccounts: [], totalConnections: 0 })}\r\n className=\"w-full mt-2 py-2 text-gray-500 hover:text-gray-700 text-xs sm:text-sm\"\r\n >\r\n Skip for now\r\n </button>\r\n </div>\r\n\r\n {/* OAuth Connector Dialogs */}\r\n <YoutubeConnector \r\n open={activeConnector === 'youtube'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n <LinkedInConnector \r\n open={activeConnector === 'linkedin'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n <InstagramConnector \r\n open={activeConnector === 'instagram'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n <PinterestConnector \r\n open={activeConnector === 'pinterest'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n <RedditConnector \r\n open={activeConnector === 'reddit'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n <GmailConnector \r\n open={activeConnector === 'gmail'}\r\n onClose={() => setActiveConnector(null)}\r\n onConnectionChange={handleConnectionChange}\r\n username={username}\r\n />\r\n </div>\r\n );\r\n}","import React, { useState, useEffect } from 'react';\r\n\r\nexport default function PinSetup({ onComplete, userEmail }) {\r\n const [pin, setPin] = useState('');\r\n const [requirements, setRequirements] = useState({\r\n length: false,\r\n number: false,\r\n special: false\r\n });\r\n\r\n // Check PIN requirements (simplified)\r\n useEffect(() => {\r\n setRequirements({\r\n length: pin.length >= 8,\r\n number: /[0-9]/.test(pin),\r\n special: /[!@#$%^&*(),.?\":{}|<>]/.test(pin)\r\n });\r\n }, [pin]);\r\n\r\n const allRequirementsMet = Object.values(requirements).every(req => req);\r\n const canSubmit = allRequirementsMet && pin.length > 0;\r\n\r\n const handleSubmit = (e) => {\r\n e.preventDefault();\r\n if (canSubmit) {\r\n // In a real app, you would hash the PIN before storing\r\n onComplete({\r\n pin: pin, // This should be hashed in production\r\n pinCreated: true,\r\n timestamp: new Date().toISOString()\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"max-w-md mx-auto bg-white p-6\">\r\n <div className=\"text-center mb-6\">\r\n <div className=\"w-16 h-16 bg-blue-100 rounded-full flex items-center justify-center mx-auto mb-4\">\r\n <svg className=\"w-8 h-8 text-blue-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 15v2m-6 4h12a2 2 0 002-2v-1a2 2 0 00-2-2H6a2 2 0 00-2 2v1a2 2 0 002 2zM12 7V3m0 4l3-3m-3 3L9 4\" />\r\n </svg>\r\n </div>\r\n <h2 className=\"text-2xl font-bold text-gray-900 mb-2\">Create Your Secure PIN</h2>\r\n <p className=\"text-gray-600\">Your PIN will be used to securely access your data</p>\r\n </div>\r\n\r\n <form onSubmit={handleSubmit} className=\"space-y-4\">\r\n {/* PIN Input */}\r\n <div>\r\n <label htmlFor=\"pin\" className=\"block text-sm font-medium text-gray-700 mb-2\">\r\n Create PIN\r\n </label>\r\n <input\r\n type=\"password\"\r\n id=\"pin\"\r\n value={pin}\r\n onChange={(e) => setPin(e.target.value)}\r\n className=\"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\r\n placeholder=\"Enter your secure PIN\"\r\n />\r\n </div>\r\n\r\n {/* Requirements */}\r\n <div className=\"bg-gray-50 p-4 rounded-lg\">\r\n <h4 className=\"text-sm font-medium text-gray-700 mb-3\">PIN Requirements:</h4>\r\n <div className=\"space-y-2\">\r\n {Object.entries({\r\n length: 'At least 8 characters',\r\n number: 'One number (0-9)',\r\n special: 'One special character (!@#$%^&*)'\r\n }).map(([key, label]) => (\r\n <div key={key} className=\"flex items-center\">\r\n <div className={`w-4 h-4 rounded-full mr-2 flex items-center justify-center ${\r\n requirements[key] ? 'bg-green-500' : 'bg-gray-300'\r\n }`}>\r\n {requirements[key] && (\r\n <svg className=\"w-3 h-3 text-white\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n )}\r\n </div>\r\n <span className={`text-sm ${requirements[key] ? 'text-green-600' : 'text-gray-600'}`}>\r\n {label}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Submit Button */}\r\n <button\r\n type=\"submit\"\r\n disabled={!canSubmit}\r\n className={`w-full py-3 px-4 rounded-lg font-semibold transition-colors ${\r\n canSubmit\r\n ? 'bg-blue-600 text-white hover:bg-blue-700'\r\n : 'bg-gray-300 text-gray-500 cursor-not-allowed'\r\n }`}\r\n >\r\n Create PIN\r\n </button>\r\n </form>\r\n\r\n {userEmail && (\r\n <p className=\"text-center text-sm text-gray-500 mt-4\">\r\n Securing account for: <span className=\"font-medium\">{userEmail}</span>\r\n </p>\r\n )}\r\n </div>\r\n );\r\n} ","import React, { useState } from 'react';\r\n\r\nconst dataTypes = [\r\n { \r\n id: 'basic', \r\n name: 'Basic Info', \r\n description: 'Essential profile information and account details', \r\n icon: '👤',\r\n required: false\r\n },\r\n { \r\n id: 'personality', \r\n name: 'Personality', \r\n description: 'Personality traits, behavioral patterns and insights', \r\n icon: '🧠',\r\n required: false\r\n },\r\n { \r\n id: 'preferences', \r\n name: 'Preferences', \r\n description: 'User preferences, settings and choices', \r\n icon: '⚙️',\r\n required: false\r\n }\r\n];\r\n\r\nexport default function DataRequest({ \r\n onComplete, \r\n userEmail, \r\n appName = 'App', \r\n autoFetch = false,\r\n testMode = false \r\n}) {\r\n const [selectedData, setSelectedData] = useState({\r\n basic: false, // User can choose\r\n personality: false,\r\n preferences: false\r\n });\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [isLoadingApi, setIsLoadingApi] = useState(false);\r\n const [apiResponse, setApiResponse] = useState(null);\r\n const [apiError, setApiError] = useState(null);\r\n\r\n const handleDataToggle = (dataId) => {\r\n setSelectedData(prev => ({\r\n ...prev,\r\n [dataId]: !prev[dataId]\r\n }));\r\n };\r\n\r\n const handleRowClick = (dataId) => {\r\n // Make the entire row clickable for better UX\r\n handleDataToggle(dataId);\r\n };\r\n\r\n const generateUserHash = (email) => {\r\n // Simple hash function for user identification\r\n let hash = 0;\r\n const str = email + Date.now().toString();\r\n for (let i = 0; i < str.length; i++) {\r\n const char = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + char;\r\n hash = hash & hash; // Convert to 32-bit integer\r\n }\r\n return `user_${Math.abs(hash).toString(36)}`;\r\n };\r\n\r\n const fetchUserData = async () => {\r\n setIsLoadingApi(true);\r\n setApiError(null);\r\n \r\n try {\r\n // Create a unique user hash for this request\r\n const userHash = generateUserHash(userEmail);\r\n \r\n // Get selected data types\r\n const approvedData = Object.entries(selectedData)\r\n .filter(([key, value]) => value)\r\n .map(([key]) => key);\r\n\r\n // Determine API endpoint based on test mode\r\n const apiEndpoint = testMode \r\n ? 'https://api2.onairos.uk/inferenceTest'\r\n : 'https://api2.onairos.uk/inference';\r\n \r\n // Prepare the base result\r\n const baseResult = {\r\n userHash,\r\n appName,\r\n approvedData,\r\n apiUrl: apiEndpoint,\r\n testMode,\r\n timestamp: new Date().toISOString()\r\n };\r\n\r\n if (autoFetch) {\r\n // Auto mode true: make API request and return results\r\n try {\r\n const response = await fetch(apiEndpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n approvedData,\r\n userEmail,\r\n appName,\r\n testMode,\r\n timestamp: new Date().toISOString()\r\n })\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`API call failed with status: ${response.status}`);\r\n }\r\n\r\n const apiData = await response.json();\r\n \r\n // Format response according to test mode requirements\r\n let formattedData = apiData;\r\n if (testMode && apiData) {\r\n formattedData = {\r\n InferenceResult: {\r\n output: apiData.croppedInference || apiData.output || apiData.inference,\r\n traits: apiData.traitResult || apiData.traits || apiData.personalityData\r\n }\r\n };\r\n }\r\n \r\n setApiResponse(formattedData);\r\n return {\r\n ...baseResult,\r\n apiResponse: formattedData,\r\n success: true\r\n };\r\n } catch (error) {\r\n setApiError(error.message);\r\n return {\r\n ...baseResult,\r\n apiError: error.message,\r\n success: false\r\n };\r\n }\r\n } else {\r\n // Auto mode false (default): return API endpoint URL for manual calling\r\n return {\r\n ...baseResult,\r\n success: true,\r\n message: 'Data request approved. Use the provided API URL to fetch user data.'\r\n };\r\n }\r\n } catch (error) {\r\n setApiError(`Failed to process request: ${error.message}`);\r\n return null;\r\n } finally {\r\n setIsLoadingApi(false);\r\n }\r\n };\r\n\r\n const handleSubmit = async (e) => {\r\n e.preventDefault();\r\n setIsSubmitting(true);\r\n \r\n try {\r\n const result = await fetchUserData();\r\n \r\n if (result) {\r\n onComplete(result);\r\n }\r\n } catch (error) {\r\n setApiError(`Submission failed: ${error.message}`);\r\n } finally {\r\n setIsSubmitting(false);\r\n }\r\n };\r\n\r\n const selectedCount = Object.values(selectedData).filter(Boolean).length;\r\n\r\n return (\r\n <div className=\"w-full max-w-md mx-auto bg-white rounded-lg shadow-xl overflow-hidden\" style={{ maxHeight: '90vh', height: 'auto' }}>\r\n <div className=\"p-4 sm:p-6 overflow-y-auto\" style={{ maxHeight: 'calc(90vh - 4rem)' }}>\r\n <div className=\"text-center mb-4 sm:mb-6\">\r\n <h2 className=\"text-lg sm:text-xl font-bold text-gray-900 mb-2\">Data Request</h2>\r\n <p className=\"text-gray-600 text-xs sm:text-sm\">\r\n Select the data types you'd like to share with <span className=\"font-medium\">{appName}</span>\r\n </p>\r\n </div>\r\n\r\n {/* Privacy Notice */}\r\n <div className=\"mb-4 sm:mb-6 p-2 sm:p-3 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <p className=\"text-blue-800 text-xs sm:text-sm\">\r\n 🔒 Your selected data will be securely processed and used only for the intended purpose.\r\n </p>\r\n </div>\r\n\r\n {/* Data Types Selection */}\r\n <div className=\"space-y-2 sm:space-y-3 mb-4 sm:mb-6\">\r\n {dataTypes.map((dataType) => {\r\n const isSelected = selectedData[dataType.id] || false;\r\n const isRequired = dataType.required;\r\n \r\n return (\r\n <div \r\n key={dataType.id}\r\n className={`flex items-center justify-between p-3 sm:p-4 border rounded-lg transition-colors ${\r\n isRequired \r\n ? 'bg-blue-50 border-blue-200' \r\n : 'hover:bg-gray-50 cursor-pointer'\r\n }`}\r\n onClick={() => handleRowClick(dataType.id)}\r\n >\r\n <div className=\"flex items-center space-x-3\">\r\n <div className=\"text-xl sm:text-2xl\">\r\n {dataType.icon}\r\n </div>\r\n <div>\r\n <h3 className=\"font-medium text-gray-900 text-sm sm:text-base\">\r\n {dataType.name}\r\n {isRequired && <span className=\"text-blue-600 ml-1\">*</span>}\r\n </h3>\r\n <p className=\"text-xs sm:text-sm text-gray-500\">{dataType.description}</p>\r\n </div>\r\n </div>\r\n \r\n {/* Toggle Switch or Required Badge */}\r\n {isRequired ? (\r\n <div className=\"px-2 py-1 bg-blue-600 text-white text-xs rounded-full\">\r\n Required\r\n </div>\r\n ) : (\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleDataToggle(dataType.id);\r\n }}\r\n className={`relative inline-flex h-5 sm:h-6 w-9 sm:w-11 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 ${\r\n isSelected ? 'bg-blue-600' : 'bg-gray-200'\r\n }`}\r\n >\r\n <span\r\n className={`inline-block h-3 sm:h-4 w-3 sm:w-4 transform rounded-full bg-white transition-transform ${\r\n isSelected ? 'translate-x-5 sm:translate-x-6' : 'translate-x-1'\r\n }`}\r\n />\r\n </button>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Selection Summary */}\r\n <div className=\"mb-3 sm:mb-4 p-2 sm:p-3 bg-green-50 border border-green-200 rounded-lg\">\r\n <p className=\"text-green-800 text-xs sm:text-sm\">\r\n ✅ {selectedCount} data type{selectedCount > 1 ? 's' : ''} selected for sharing\r\n </p>\r\n </div>\r\n\r\n {/* API Status */}\r\n {isLoadingApi && (\r\n <div className=\"mb-3 sm:mb-4 p-2 sm:p-3 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <p className=\"text-blue-800 text-xs sm:text-sm\">🔄 Processing your data request...</p>\r\n </div>\r\n )}\r\n\r\n {apiError && (\r\n <div className=\"mb-3 sm:mb-4 p-2 sm:p-3 bg-red-50 border border-red-200 rounded-lg\">\r\n <p className=\"text-red-800 text-xs sm:text-sm\">❌ {apiError}</p>\r\n </div>\r\n )}\r\n\r\n {/* Action Buttons */}\r\n <form onSubmit={handleSubmit} className=\"space-y-3\">\r\n <button\r\n type=\"submit\"\r\n disabled={isSubmitting || selectedCount === 0}\r\n className={`w-full py-2 sm:py-3 px-4 rounded-lg font-semibold transition-colors text-sm sm:text-base ${\r\n selectedCount > 0 && !isSubmitting\r\n ? 'bg-blue-600 text-white hover:bg-blue-700'\r\n : 'bg-gray-300 text-gray-500 cursor-not-allowed'\r\n }`}\r\n >\r\n {isSubmitting ? 'Processing...' : `Share ${selectedCount} data type${selectedCount > 1 ? 's' : ''}`}\r\n </button>\r\n \r\n <button\r\n type=\"button\"\r\n onClick={() => onComplete({ selectedData: {}, cancelled: true })}\r\n className=\"w-full py-2 text-gray-500 hover:text-gray-700 text-xs sm:text-sm\"\r\n >\r\n Cancel\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n} ","import React, { useEffect, useState } from 'react';\nimport EmailAuth from './components/EmailAuth.js';\nimport UniversalOnboarding from './components/UniversalOnboarding.js';\nimport PinSetup from './components/PinSetup.js';\nimport DataRequest from './components/DataRequest.js';\n\nexport function OnairosButton({\n requestData, \n webpageName, \n inferenceData = null, \n onComplete = null, \n autoFetch = false,\n testMode = false,\n proofMode = false, \n textLayout = 'below', \n textColor = 'white',\n login = false,\n buttonType = 'pill',\n loginReturn = null,\n loginType = 'signIn',\n visualType = 'full',\n appIcon = null,\n}) {\n\n const [showOverlay, setShowOverlay] = useState(false);\n const [currentFlow, setCurrentFlow] = useState('email'); // 'email' | 'onboarding' | 'pin' | 'dataRequest'\n const [userData, setUserData] = useState(null);\n const [error, setError] = useState(null);\n\n // Check for existing user session\n useEffect(() => {\n const checkExistingSession = () => {\n const savedUser = localStorage.getItem('onairosUser');\n if (savedUser) {\n try {\n const user = JSON.parse(savedUser);\n setUserData(user);\n // If user has completed onboarding and PIN setup, go directly to data request\n if (user.onboardingComplete && user.pinCreated) {\n setCurrentFlow('dataRequest');\n } else if (user.verified && !user.onboardingComplete) {\n setCurrentFlow('onboarding');\n } else if (user.onboardingComplete && !user.pinCreated) {\n setCurrentFlow('pin');\n }\n } catch (error) {\n console.error('Error parsing saved user data:', error);\n localStorage.removeItem('onairosUser');\n }\n }\n };\n\n checkExistingSession();\n }, []);\n\n const openTerminal = async () => {\n try {\n console.log('🔥 openTerminal called');\n setShowOverlay(true);\n } catch (error) {\n console.error('Error in openTerminal:', error);\n }\n };\n\n const handleCloseOverlay = () => {\n setShowOverlay(false);\n setError(null);\n };\n\n // Handle clicks on the backdrop to close modal\n const handleBackdropClick = (e) => {\n if (e.target === e.currentTarget) {\n handleCloseOverlay();\n }\n };\n\n const handleEmailAuthSuccess = (authData) => {\n console.log('Email auth successful:', authData);\n const newUserData = {\n ...authData,\n verified: true,\n onboardingComplete: false,\n pinCreated: false\n };\n setUserData(newUserData);\n localStorage.setItem('onairosUser', JSON.stringify(newUserData));\n setCurrentFlow('onboarding');\n };\n\n const handleOnboardingComplete = (onboardingData) => {\n console.log('Onboarding completed:', onboardingData);\n const updatedUserData = {\n ...userData,\n onboardingComplete: true,\n connectedAccounts: onboardingData.connectedAccounts || []\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n setCurrentFlow('pin');\n };\n\n const handlePinSetupComplete = (pinData) => {\n console.log('PIN setup completed:', pinData);\n const updatedUserData = {\n ...userData,\n ...pinData,\n pinCreated: true\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n \n // Move to data request flow within the same overlay\n setCurrentFlow('dataRequest');\n };\n\n const handleDataRequestComplete = (requestResult) => {\n console.log('🔥 OnairosButton: Data request completed:', requestResult);\n \n // Update user data with request result\n const updatedUserData = {\n ...userData,\n lastDataRequest: requestResult\n };\n setUserData(updatedUserData);\n localStorage.setItem('onairosUser', JSON.stringify(updatedUserData));\n\n // Close overlay\n setShowOverlay(false);\n\n // Call onComplete callback if provided\n console.log('🔥 Calling onComplete callback with:', requestResult);\n if (onComplete) {\n try {\n onComplete(requestResult);\n console.log('🔥 onComplete callback executed successfully');\n } catch (error) {\n console.error('🔥 Error in onComplete callback:', error);\n }\n } else {\n console.log('🔥 No onComplete callback provided');\n }\n };\n\n const renderCurrentFlow = () => {\n switch (currentFlow) {\n case 'email':\n return (\n <EmailAuth \n onSuccess={handleEmailAuthSuccess}\n testMode={testMode} // Use the testMode prop from initialization\n />\n );\n \n case 'onboarding':\n return (\n <UniversalOnboarding \n onComplete={handleOnboardingComplete}\n appIcon={appIcon || \"https://onairos.sirv.com/Images/OnairosBlack.png\"}\n appName={webpageName}\n username={userData?.email || userData?.username}\n />\n );\n \n case 'pin':\n return (\n <PinSetup \n onComplete={handlePinSetupComplete}\n userEmail={userData?.email}\n />\n );\n \n case 'dataRequest':\n return (\n <DataRequest \n onComplete={handleDataRequestComplete}\n userEmail={userData?.email}\n requestData={requestData}\n appName={webpageName}\n autoFetch={autoFetch}\n testMode={testMode}\n appIcon={appIcon}\n />\n );\n \n default:\n return (\n <div className=\"flex flex-col items-center space-y-4 p-6\">\n <div className=\"animate-spin h-8 w-8 border-2 border-blue-600 rounded-full border-t-transparent\"></div>\n <p className=\"text-gray-600\">Loading...</p>\n </div>\n );\n }\n };\n\n // Styling and button class based on visual type\n const buttonClass = \n `flex items-center justify-center font-bold rounded cursor-pointer ${\n buttonType === 'pill' ? 'px-4 py-2' : 'w-12 h-12'\n } bg-transparent OnairosConnect`;\n\n const buttonStyle = {\n flexDirection: textLayout === 'below' ? 'column' : 'row',\n backgroundColor: 'transparent',\n color: textColor,\n border: '1px solid transparent',\n };\n\n // Icon and text style based on the visualType\n const logoStyle = {\n width: '20px',\n height: '20px',\n marginRight: visualType === 'full' ? '12px' : '0',\n };\n\n const getText = () => {\n switch (loginType) {\n case 'signUp':\n return 'Sign Up with Onairos';\n case 'signOut':\n return 'Sign Out of Onairos';\n default:\n return 'Sign In with Onairos';\n }\n };\n\n return (\n <>\n <button\n className={buttonClass}\n onClick={openTerminal}\n style={buttonStyle}\n >\n {(visualType === 'full' || visualType === 'icon') && (\n <img\n src={login ? \"https://onairos.sirv.com/Images/OnairosWhite.png\" : \"https://onairos.sirv.com/Images/OnairosBlack.png\"}\n alt=\"Onairos Logo\"\n style={logoStyle}\n />\n )}\n {visualType !== 'icon' && (\n <span className={`${textColor === 'black' ? 'text-black' : 'text-white'} ${visualType === 'icon' ? 'sr-only' : ''} ${textLayout === 'right' ? 'ml-2' : textLayout === 'left' ? 'mr-2' : ''}`}>\n {getText()}\n </span>\n )}\n </button>\n\n {/* Full-Screen Overlay (Plaid/SendPay Style) */}\n {showOverlay && (\n <div \n className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\"\n onClick={handleBackdropClick}\n >\n <div \n className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4 max-h-[90vh] overflow-hidden relative\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* Close button */}\n <button\n onClick={handleCloseOverlay}\n className=\"absolute top-4 right-4 text-gray-400 hover:text-gray-600 z-10\"\n >\n <svg className=\"w-6 h-6\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n\n {/* Content */}\n <div className=\"overflow-y-auto max-h-[90vh]\">\n {renderCurrentFlow()}\n </div>\n </div>\n </div>\n )}\n </>\n );\n}\n\nexport default OnairosButton;","import React from 'react';\r\nimport { OnairosButton } from './onairosButton.jsx';\r\n\r\n// Configuration object for the Telegram SDK\r\n\r\nexport function Onairos(props) {\r\n return (\r\n <>\r\n {/* <DeepLink/> */}\r\n <OnairosButton {...props} />\r\n </>\r\n );\r\n}\r\n\r\nexport default Onairos;\r\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","y","x","d","__WEBPACK_EXTERNAL_MODULE_react__","Component","createElement","forwardRef","useEffect","useState","toPascalCase","string","camelCase","replace","match","p1","p2","toUpperCase","toLowerCase","toCamelCase","charAt","slice","mergeClasses","classes","filter","className","index","array","Boolean","trim","indexOf","join","hasA11yProp","props","startsWith","defaultAttributes","xmlns","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","Icon","color","size","absoluteStrokeWidth","children","iconNode","rest","ref","Number","map","tag","attrs","Array","isArray","createLucideIcon","iconName","displayName","Mail","rx","ArrowRight","Check","EmailAuth","_ref","onSuccess","testMode","email","setEmail","code","setCode","step","setStep","isLoading","setIsLoading","error","setError","handleEmailSubmit","async","e","preventDefault","test","validateEmail","setTimeout","fetch","method","headers","body","JSON","stringify","ok","Error","message","handleCodeSubmit","verified","response","data","json","token","React","onSubmit","htmlFor","type","id","value","onChange","target","placeholder","required","disabled","maxLength","onClick","YoutubeConnector","constructor","super","this","state","connected","open","isConnecting","handleClose","bind","handleOpen","youtubeConnect","setConnected","setDisconnected","setState","onConnectionChange","updateConnections","then","catch","console","updateType","newConnection","jsonData","session","username","localStorage","getItem","onClose","result","youtubeURL","window","location","href","render","LinkedInConnector","linkedinConnect","linkedinURL","InstagramConnector","instagramConnect","instagramURL","PinterestConnector","pinterestConnect","pinterestURL","RedditConnector","redditConnect","redditURL","GmailConnector","gmailConnect","gmailURL","platforms","name","icon","connector","UniversalOnboarding","onComplete","appIcon","appName","connectedAccounts","setConnectedAccounts","setIsConnecting","activeConnector","setActiveConnector","handleConnectionChange","platformName","isConnected","prev","_objectSpread","connectedCount","values","length","style","maxHeight","src","alt","platform","concat","connectorType","handleToggle","handleContinue","entries","_ref2","_ref3","totalConnections","PinSetup","userEmail","pin","setPin","requirements","setRequirements","number","special","canSubmit","every","req","pinCreated","timestamp","Date","toISOString","label","dataTypes","description","DataRequest","autoFetch","selectedData","setSelectedData","basic","personality","preferences","isSubmitting","setIsSubmitting","isLoadingApi","setIsLoadingApi","apiResponse","setApiResponse","apiError","setApiError","handleDataToggle","dataId","fetchUserData","userHash","hash","str","now","toString","i","charCodeAt","Math","abs","generateUserHash","approvedData","apiEndpoint","baseResult","apiUrl","success","status","apiData","formattedData","InferenceResult","output","croppedInference","inference","traits","traitResult","personalityData","selectedCount","dataType","isSelected","isRequired","handleRowClick","stopPropagation","cancelled","OnairosButton","requestData","webpageName","inferenceData","proofMode","textLayout","textColor","login","buttonType","loginReturn","loginType","visualType","showOverlay","setShowOverlay","currentFlow","setCurrentFlow","userData","setUserData","checkExistingSession","savedUser","user","parse","onboardingComplete","removeItem","handleCloseOverlay","handleEmailAuthSuccess","authData","log","newUserData","setItem","handleOnboardingComplete","onboardingData","updatedUserData","handlePinSetupComplete","pinData","handleDataRequestComplete","requestResult","lastDataRequest","buttonClass","buttonStyle","flexDirection","backgroundColor","border","logoStyle","marginRight","getText","currentTarget","renderCurrentFlow","Onairos"],"sourceRoot":""}