diff --git a/.DS_Store b/.DS_Store index db7d781..75513a3 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index 8e9c64e..8867504 100644 --- a/.gitignore +++ b/.gitignore @@ -134,3 +134,4 @@ dist node_modules/ package-lock.json .DS_Store +.env diff --git a/background/background.js b/background/background.js index 0d562d5..701d6db 100644 --- a/background/background.js +++ b/background/background.js @@ -1,4 +1,5 @@ -import { NseIndia } from 'stock-nse-india'; +//import { NseIndia } from 'stock-nse-india'; +import { createClient } from '@supabase/supabase-js' //const nseIndia = new NseIndia(); // Constants const CACHE_DURATION = 24 * 60 * 60 * 1000; // 24 hours in milliseconds @@ -9,12 +10,44 @@ const CACHE_CONFIG = { version: '1.0', maxItems: 500 // Limit cache size }; - +const supabase = createClient( + 'YOUR_SUPABASE_URL', + 'YOUR_SUPABASE_ANON_KEY' +) // Initialize extension chrome.runtime.onInstalled.addListener(async () => { console.log('Trade Call Widget installed/updated'); await initializeCache(); await cacheAllStockSymbols(); // Cache stock symbols on installation + await checkAuth(); +}); + +// Check auth state when extension opens +chrome.runtime.onStartup.addListener(async() => { + await checkAuth(); +}); + +async function checkAuth() { + const { data: { session }, error } = await supabase.auth.getSession(); + + if (error || !session) { + // If not authenticated, open auth popup + chrome.windows.create({ + url: 'auth.html', + type: 'popup', + width: 400, + height: 600 + }); + } +} + +// Listen for messages from auth popup +chrome.runtime.onMessage.addListener(async (message, sender, sendResponse) => { + if (message.type === 'AUTH_SUCCESS') { + // Close auth window and refresh main extension + chrome.windows.remove(sender.tab.windowId); + chrome.runtime.reload(); + } }); // Function to cache all stock symbols diff --git a/manifest.json b/manifest.json index d13b550..38cf056 100644 --- a/manifest.json +++ b/manifest.json @@ -16,7 +16,8 @@ "permissions": [ "storage", "clipboardWrite", - "sidePanel" + "sidePanel", + "identity" ], "web_accessible_resources": [{ "resources": ["dist/popup.css"], diff --git a/package-lock.json b/package-lock.json index 1f34949..d782d94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,12 @@ "dependencies": { "@preact/signals": "^1.3.0", "@radix-ui/react-tabs": "^1.1.1", + "@supabase/auth-ui-react": "^0.4.7", + "@supabase/auth-ui-shared": "^0.1.8", + "@supabase/supabase-js": "^2.46.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", + "dotenv-webpack": "^8.1.0", "lucide-react": "^0.460.0", "preact": "^10.24.3", "react": "npm:@preact/compat@^18.3.1", @@ -2251,7 +2255,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -2266,7 +2269,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2276,7 +2278,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -2286,7 +2287,6 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -2297,14 +2297,12 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2836,6 +2834,110 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@stitches/core": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", + "integrity": "sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==", + "license": "MIT" + }, + "node_modules/@supabase/auth-js": { + "version": "2.65.1", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.65.1.tgz", + "integrity": "sha512-IA7i2Xq2SWNCNMKxwmPlHafBQda0qtnFr8QnyyBr+KaSxoXXqEzFCnQ1dGTy6bsZjVBgXu++o3qrDypTspaAPw==", + "license": "MIT", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/auth-ui-react": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/@supabase/auth-ui-react/-/auth-ui-react-0.4.7.tgz", + "integrity": "sha512-Lp4FQGFh7BMX1Y/BFaUKidbryL7eskj1fl6Lby7BeHrTctbdvDbCMjVKS8wZ2rxuI8FtPS2iU900fSb70FHknQ==", + "dependencies": { + "@stitches/core": "^1.2.8", + "@supabase/auth-ui-shared": "0.1.8", + "prop-types": "^15.7.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "peerDependencies": { + "@supabase/supabase-js": "^2.21.0" + } + }, + "node_modules/@supabase/auth-ui-shared": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@supabase/auth-ui-shared/-/auth-ui-shared-0.1.8.tgz", + "integrity": "sha512-ouQ0DjKcEFg+0gZigFIEgu01V3e6riGZPzgVD0MJsCBNsMsiDT74+GgCEIElMUpTGkwSja3xLwdFRFgMNFKcjg==", + "license": "MIT", + "peerDependencies": { + "@supabase/supabase-js": "^2.21.0" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.4.3.tgz", + "integrity": "sha512-sOLXy+mWRyu4LLv1onYydq+10mNRQ4rzqQxNhbrKLTLTcdcmS9hbWif0bGz/NavmiQfPs4ZcmQJp4WqOXlR4AQ==", + "license": "MIT", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/node-fetch": { + "version": "2.6.15", + "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz", + "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/@supabase/postgrest-js": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.16.3.tgz", + "integrity": "sha512-HI6dsbW68AKlOPofUjDTaosiDBCtW4XAm0D18pPwxoW3zKOE2Ru13Z69Wuys9fd6iTpfDViNco5sgrtnP0666A==", + "license": "MIT", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.10.7", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.10.7.tgz", + "integrity": "sha512-OLI0hiSAqQSqRpGMTUwoIWo51eUivSYlaNBgxsXZE7PSoWh12wPRdVt0psUMaUzEonSB85K21wGc7W5jHnT6uA==", + "license": "MIT", + "dependencies": { + "@supabase/node-fetch": "^2.6.14", + "@types/phoenix": "^1.5.4", + "@types/ws": "^8.5.10", + "ws": "^8.14.2" + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.7.1.tgz", + "integrity": "sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==", + "license": "MIT", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.46.1", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.46.1.tgz", + "integrity": "sha512-HiBpd8stf7M6+tlr+/82L8b2QmCjAD8ex9YdSAKU+whB/SHXXJdus1dGlqiH9Umy9ePUuxaYmVkGd9BcvBnNvg==", + "license": "MIT", + "dependencies": { + "@supabase/auth-js": "2.65.1", + "@supabase/functions-js": "2.4.3", + "@supabase/node-fetch": "2.6.15", + "@supabase/postgrest-js": "1.16.3", + "@supabase/realtime-js": "2.10.7", + "@supabase/storage-js": "2.7.1" + } + }, "node_modules/@types/accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", @@ -2906,7 +3008,6 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "*", @@ -2917,7 +3018,6 @@ "version": "3.7.7", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, "license": "MIT", "dependencies": { "@types/eslint": "*", @@ -2928,7 +3028,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, "license": "MIT" }, "node_modules/@types/express": { @@ -3038,12 +3137,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", - "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", + "version": "22.10.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.0.tgz", + "integrity": "sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==", "license": "MIT", "dependencies": { - "undici-types": "~6.19.8" + "undici-types": "~6.20.0" } }, "node_modules/@types/node-forge": { @@ -3056,6 +3155,12 @@ "@types/node": "*" } }, + "node_modules/@types/phoenix": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.6.tgz", + "integrity": "sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==", + "license": "MIT" + }, "node_modules/@types/qs": { "version": "6.9.17", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", @@ -3156,7 +3261,6 @@ "version": "8.5.13", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -3166,7 +3270,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", @@ -3177,28 +3280,24 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", @@ -3210,14 +3309,12 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -3230,7 +3327,6 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" @@ -3240,7 +3336,6 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" @@ -3250,14 +3345,12 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -3274,7 +3367,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -3288,7 +3380,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -3301,7 +3392,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -3316,7 +3406,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -3374,14 +3463,12 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, "license": "Apache-2.0" }, "node_modules/accepts": { @@ -3401,7 +3488,6 @@ "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -4022,9 +4108,9 @@ "license": "MIT" }, "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "dev": true, "license": "MIT", "dependencies": { @@ -4064,7 +4150,6 @@ "version": "4.24.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -4121,7 +4206,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, "license": "MIT" }, "node_modules/bundle-name": { @@ -4206,10 +4290,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001680", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", - "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", - "dev": true, + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", "funding": [ { "type": "opencollective", @@ -4480,31 +4563,21 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/class-variance-authority": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", - "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", "license": "Apache-2.0", "dependencies": { - "clsx": "2.0.0" + "clsx": "^2.1.1" }, "funding": { - "url": "https://joebell.co.uk" - } - }, - "node_modules/class-variance-authority/node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", - "license": "MIT", - "engines": { - "node": ">=6" + "url": "https://polar.sh/cva" } }, "node_modules/clean-css": { @@ -4880,9 +4953,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", - "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -5328,6 +5401,39 @@ "tslib": "^2.0.3" } }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-defaults": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-2.0.2.tgz", + "integrity": "sha512-iOIzovWfsUHU91L5i8bJce3NYK5JXeAwH50Jh6+ARUdLiiGlYWfGw6UkzsYqaXZH/hjE/eCd/PlfM/qqyK0AMg==", + "license": "MIT", + "dependencies": { + "dotenv": "^8.2.0" + } + }, + "node_modules/dotenv-webpack": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.1.0.tgz", + "integrity": "sha512-owK1JcsPkIobeqjVrk6h7jPED/W6ZpdFsMPR+5ursB7/SdgDyO+VzAU+szK8C8u3qUhtENyYnj8eyXMR5kkGag==", + "license": "MIT", + "dependencies": { + "dotenv-defaults": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "webpack": "^4 || ^5" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -5342,10 +5448,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.62", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.62.tgz", - "integrity": "sha512-t8c+zLmJHa9dJy96yBZRXGQYoiCEnHYgFwn1asvSPZSUdVxnB62A4RASd7k41ytG3ErFBA0TpHlKg9D9SQBmLg==", - "dev": true, + "version": "1.5.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz", + "integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -5392,7 +5497,6 @@ "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -5470,7 +5574,6 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true, "license": "MIT" }, "node_modules/es5-ext": { @@ -5532,7 +5635,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -5561,7 +5663,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -5574,7 +5675,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -5584,7 +5684,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -5629,7 +5728,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" @@ -5705,7 +5803,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, "license": "MIT" }, "node_modules/fast-glob": { @@ -6058,7 +6155,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, "license": "BSD-2-Clause" }, "node_modules/globals": { @@ -6108,7 +6204,6 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, "license": "ISC" }, "node_modules/graphql": { @@ -6899,7 +6994,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -6914,7 +7008,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -6940,7 +7033,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -6972,7 +7064,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { @@ -7037,7 +7128,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.11.5" @@ -7137,6 +7227,18 @@ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", "license": "Apache-2.0" }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -7208,7 +7310,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, "license": "MIT" }, "node_modules/merge2": { @@ -7401,9 +7502,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -7432,7 +7533,6 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, "license": "MIT" }, "node_modules/next-tick": { @@ -7492,7 +7592,6 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true, "license": "MIT" }, "node_modules/normalize-path": { @@ -7977,7 +8076,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -8168,9 +8266,9 @@ } }, "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", - "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "dev": true, "license": "ISC", "bin": { @@ -8350,9 +8448,9 @@ "license": "MIT" }, "node_modules/preact": { - "version": "10.24.3", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.3.tgz", - "integrity": "sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==", + "version": "10.25.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.25.0.tgz", + "integrity": "sha512-6bYnzlLxXV3OSpUxLdaxBmE7PMOu0aR3pG6lryK/0jmvcDFPlcXGQAt5DpK3RITWiDrfYZRI0druyaK/S9kYLg==", "license": "MIT", "funding": { "type": "opencollective", @@ -8377,6 +8475,17 @@ "dev": true, "license": "MIT" }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -8401,7 +8510,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -8446,7 +8554,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" @@ -8496,6 +8603,12 @@ "preact": "*" } }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -8584,16 +8697,16 @@ } }, "node_modules/regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "dev": true, "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", + "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -8609,9 +8722,9 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", - "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8939,7 +9052,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" @@ -9191,7 +9303,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -9211,7 +9322,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -9546,9 +9656,9 @@ } }, "node_modules/tailwind-merge": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz", - "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.5.tgz", + "integrity": "sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==", "license": "MIT", "funding": { "type": "github", @@ -9611,7 +9721,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -9621,7 +9730,6 @@ "version": "5.36.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -9640,7 +9748,6 @@ "version": "5.3.10", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", @@ -9675,7 +9782,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -9692,7 +9798,6 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" @@ -9702,14 +9807,12 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, "license": "MIT" }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", @@ -9728,7 +9831,6 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, "license": "MIT" }, "node_modules/thenify": { @@ -9873,9 +9975,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -9972,7 +10074,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -10003,16 +10104,15 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/user-agents": { - "version": "1.1.361", - "resolved": "https://registry.npmjs.org/user-agents/-/user-agents-1.1.361.tgz", - "integrity": "sha512-JwEOGfDCGdRRKOW4mz/e4wRC60dNiahEE3+vBVV90tGXqjCUEQFyp+oCUfIf0ml/1Cr0DN0zJleH4fA8hv6deQ==", + "version": "1.1.370", + "resolved": "https://registry.npmjs.org/user-agents/-/user-agents-1.1.370.tgz", + "integrity": "sha512-0uZEBVIoigdn3vT0LsIdWgk5ddC+eSDhqc+yeQOAH+3KT/BRv4hop/ZuyK0NyCQB9hWZcngaNA7tihupLalScg==", "license": "BSD-2-Clause", "dependencies": { "lodash.clonedeep": "^4.5.0" @@ -10113,7 +10213,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dev": true, "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", @@ -10159,7 +10258,6 @@ "version": "5.96.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", - "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", @@ -10428,7 +10526,6 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, "license": "MIT", "engines": { "node": ">=10.13.0" @@ -10438,7 +10535,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -10455,7 +10551,6 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" @@ -10465,14 +10560,12 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, "license": "MIT" }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", @@ -10624,7 +10717,6 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index 7072ae4..732be73 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,12 @@ "dependencies": { "@preact/signals": "^1.3.0", "@radix-ui/react-tabs": "^1.1.1", + "@supabase/auth-ui-react": "^0.4.7", + "@supabase/auth-ui-shared": "^0.1.8", + "@supabase/supabase-js": "^2.46.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", + "dotenv-webpack": "^8.1.0", "lucide-react": "^0.460.0", "preact": "^10.24.3", "react": "npm:@preact/compat@^18.3.1", diff --git a/public/auth.html b/public/auth.html new file mode 100644 index 0000000..5281c53 --- /dev/null +++ b/public/auth.html @@ -0,0 +1,12 @@ + + + + + + + Authentication + + +
+ + \ No newline at end of file diff --git a/public/auth.js b/public/auth.js new file mode 100644 index 0000000..0f05756 --- /dev/null +++ b/public/auth.js @@ -0,0 +1,10 @@ +// src/index.js +import { h } from 'preact'; // Import h from Preact +import { render } from 'preact'; // Use render from Preact +import AuthPage from '../src/components/organisms/Auth.js'; +import './index.css'; // For Tailwind + +const container = document.getElementById('auth-root'); + +// Render the AuthPage component into the container +render(, container); \ No newline at end of file diff --git a/popup/index.html b/public/popup/index.html similarity index 84% rename from popup/index.html rename to public/popup/index.html index d314700..75df3df 100644 --- a/popup/index.html +++ b/public/popup/index.html @@ -7,15 +7,11 @@ Trade Call Widget diff --git a/popup/popup.js b/public/popup/popup.js similarity index 50% rename from popup/popup.js rename to public/popup/popup.js index 0e71e01..8622511 100644 --- a/popup/popup.js +++ b/public/popup/popup.js @@ -1,14 +1,13 @@ // popup/popup.js import { h, render } from 'preact'; -import TradeFormLayout from '../src/components/organisms/TradeForm/TradeForm.js'; -import ActiveTrades from '../src/components/organisms/ActiveTrades/ActiveTrades.js'; +import PostedTrades from '../../src/components/pages/PostedTrades.js' // Add CSS imports -import '../styles/tailwind.css' +import '../../styles/tailwind.css' const App = () => { return ( -
+
- +
); diff --git a/src/assets/data/data.js b/src/assets/data/data.js index ca664a3..7b46f5f 100644 --- a/src/assets/data/data.js +++ b/src/assets/data/data.js @@ -1,82 +1,149 @@ -export const trades = [ +const trades = [ { - id: 4, - symbol: "HDFC", type: "SELL", + symbol: "HDFC", category: "EQUITY", tradeType: "INTRADAY", - timestamp: "24 Oct 2024 11:15:45 AM" + date: "24 Oct 2024", + time: "11:15:45 AM" }, { - id: 5, - symbol: "TCS", type: "BUY", + symbol: "TCS", category: "EQUITY", tradeType: "POSITIONAL", - timestamp: "24 Oct 2024 11:30:22 AM" + date: "24 Oct 2024", + time: "11:30:22 AM" }, { - id: 6, - symbol: "ICICI", type: "SELL", + symbol: "ICICI", category: "EQUITY", tradeType: "SWING", - timestamp: "24 Oct 2024 12:05:10 PM" + date: "24 Oct 2024", + time: "12:05:10 PM" }, { - id: 7, - symbol: "BHARTIARTL", type: "BUY", + symbol: "BHARTIARTL", category: "EQUITY", tradeType: "INTRADAY", - timestamp: "24 Oct 2024 12:45:33 PM" + date: "24 Oct 2024", + time: "12:45:33 PM" }, { - id: 8, - symbol: "WIPRO", type: "SELL", + symbol: "WIPRO", category: "EQUITY", tradeType: "POSITIONAL", - timestamp: "24 Oct 2024 01:20:15 PM" + date: "24 Oct 2024", + time: "01:20:15 PM" }, { - id: 9, - symbol: "HCLTECH", type: "BUY", + symbol: "HCLTECH", category: "EQUITY", tradeType: "SWING", - timestamp: "24 Oct 2024 01:55:40 PM" + date: "24 Oct 2024", + time: "01:55:40 PM" }, { - id: 10, - symbol: "SBIN", type: "SELL", + symbol: "SBIN", category: "EQUITY", tradeType: "INTRADAY", - timestamp: "24 Oct 2024 02:10:05 PM" + date: "24 Oct 2024", + time: "02:10:05 PM" }, { - id: 11, - symbol: "INFY", type: "BUY", + symbol: "INFY", category: "EQUITY", tradeType: "POSITIONAL", - timestamp: "24 Oct 2024 02:30:18 PM" + date: "24 Oct 2024", + time: "02:30:18 PM" + }, + { + type: "SELL", + symbol: "LT", + category: "EQUITY", + tradeType: "SWING", + date: "24 Oct 2024", + time: "02:45:50 PM" + }, + { + type: "BUY", + symbol: "MARUTI", + category: "EQUITY", + tradeType: "INTRADAY", + date: "24 Oct 2024", + time: "03:15:25 PM" + }, + { + type: "SELL", + symbol: "LT", + category: "EQUITY", + tradeType: "SWING", + date: "24 Oct 2024", + time: "02:45:50 PM" + }, + { + type: "BUY", + symbol: "MARUTI", + category: "EQUITY", + tradeType: "INTRADAY", + date: "24 Oct 2024", + time: "03:15:25 PM" }, { - id: 12, + type: "SELL", symbol: "LT", + category: "EQUITY", + tradeType: "SWING", + date: "24 Oct 2024", + time: "02:45:50 PM" + }, + { + type: "BUY", + symbol: "MARUTI", + category: "EQUITY", + tradeType: "INTRADAY", + date: "24 Oct 2024", + time: "03:15:25 PM" + }, + { type: "SELL", + symbol: "LT", category: "EQUITY", tradeType: "SWING", - timestamp: "24 Oct 2024 02:45:50 PM" + date: "24 Oct 2024", + time: "02:45:50 PM" }, { - id: 13, + type: "BUY", symbol: "MARUTI", + category: "EQUITY", + tradeType: "INTRADAY", + date: "24 Oct 2024", + time: "03:15:25 PM" + }, + { + type: "SELL", + symbol: "LT", + category: "EQUITY", + tradeType: "SWING", + date: "24 Oct 2024", + time: "02:45:50 PM" + }, + { type: "BUY", + symbol: "MARUTI", category: "EQUITY", tradeType: "INTRADAY", - timestamp: "24 Oct 2024 03:15:25 PM" + date: "24 Oct 2024", + time: "03:15:25 PM" } -] \ No newline at end of file +] + + +export { trades } \ No newline at end of file diff --git a/src/components/atoms/Badge/Badge.js b/src/components/atoms/Badge/Badge.js deleted file mode 100644 index bb9d529..0000000 --- a/src/components/atoms/Badge/Badge.js +++ /dev/null @@ -1,37 +0,0 @@ -import { cva } from "class-variance-authority" -import { h } from 'preact' -import { clsx} from "clsx" -import { twMerge } from "tailwind-merge" -function cn(...inputs) { - return twMerge(clsx(inputs)) -} - - -const badgeVariants = cva( - "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", - { - variants: { - variant: { - default: - "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", - secondary: - "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", - destructive: - "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", - outline: "text-foreground", - }, - }, - defaultVariants: { - variant: "default", - }, - } -) - - -function Badge({ className, variant, ...props }) { - return ( -
- ) -} - -export { Badge, badgeVariants } diff --git a/src/components/atoms/BasicButton/BasicButton.js b/src/components/atoms/BasicButton/BasicButton.js deleted file mode 100644 index 4d51a8f..0000000 --- a/src/components/atoms/BasicButton/BasicButton.js +++ /dev/null @@ -1,50 +0,0 @@ -import { h } from 'preact' -import { forwardRef } from 'preact/compat' -import { cva } from "class-variance-authority" -import { cn } from "@/lib/utils" - -const buttonVariants = cva( - "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", - { - variants: { - variant: { - default: - "bg-primary text-primary-foreground shadow hover:bg-primary/90", - destructive: - "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", - outline: - "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", - secondary: - "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", - ghost: "hover:bg-accent hover:text-accent-foreground", - link: "text-primary underline-offset-4 hover:underline", - }, - size: { - default: "h-9 px-4 py-2", - sm: "h-8 rounded-md px-3 text-xs", - lg: "h-10 rounded-md px-8", - icon: "h-9 w-9", - }, - }, - defaultVariants: { - variant: "default", - size: "default", - }, - } -) - -const Button = forwardRef( - ({ className, variant, size, ...props }, ref) => { - return ( - -
- ); -}; - -export default Button; \ No newline at end of file diff --git a/src/components/atoms/Card/Card.js b/src/components/atoms/Card/Card.js deleted file mode 100644 index fc90665..0000000 --- a/src/components/atoms/Card/Card.js +++ /dev/null @@ -1,65 +0,0 @@ -import { h } from 'preact' -import { forwardRef } from 'preact/compat' - - - -import { clsx} from "clsx" -import { twMerge } from "tailwind-merge" -function cn(...inputs) { - return twMerge(clsx(inputs)) -} - -const Card = forwardRef(({ className, ...props }, ref) => ( -
-)) -Card.displayName = "Card" - -const CardHeader = forwardRef(({ className, ...props }, ref) => ( -
-)) -CardHeader.displayName = "CardHeader" - -const CardTitle = forwardRef(({ className, ...props }, ref) => ( -
-)) -CardTitle.displayName = "CardTitle" - -const CardDescription = forwardRef(({ className, ...props }, ref) => ( -
-)) -CardDescription.displayName = "CardDescription" - -const CardContent = forwardRef(({ className, ...props }, ref) => ( -
-)) -CardContent.displayName = "CardContent" - -const CardFooter = forwardRef(({ className, ...props }, ref) => ( -
-)) -CardFooter.displayName = "CardFooter" - -export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } \ No newline at end of file diff --git a/src/components/atoms/Header/Header.js b/src/components/atoms/Header/Header.js deleted file mode 100644 index bdce6d5..0000000 --- a/src/components/atoms/Header/Header.js +++ /dev/null @@ -1,15 +0,0 @@ -import { h } from 'preact'; -import { Button } from '../../atoms/Button/Button.js'; -import { ArrowUpRight } from 'lucide-react'; - -export const Header = () => { - return ( -
-

Posted Trades

- -
- ); -}; - diff --git a/src/components/atoms/Input/Input.js b/src/components/atoms/Input/Input.js deleted file mode 100644 index d4b9dcb..0000000 --- a/src/components/atoms/Input/Input.js +++ /dev/null @@ -1,85 +0,0 @@ -import { h } from 'preact'; -import { useState, useRef } from 'preact/hooks'; -import { ArrowLeft, CornerDownLeft } from 'lucide-react'; - -const cn = (...classes) => classes.filter(Boolean).join(' '); - -const TradeInput = ({ - macro, - onMacroTrigger, - className, - type = "text", - ...props -}) => { - const [isFocused, setIsFocused] = useState(false); - const [value, setValue] = useState(""); - const inputRef = useRef(null); - - const handleKeyDown = (e) => { - if (macro === "enter" && e.key === "Enter") { - e.preventDefault(); - onMacroTrigger?.(value); - } - if (macro === "backspace" && e.key === "Backspace" && !value) { - e.preventDefault(); - onMacroTrigger?.(value); - } - }; - - const handleChange = (e) => { - setValue(e.target.value); - props.onChange?.(e); - }; - - const showEnterIcon = macro === "enter" && isFocused; - const showBackspaceIcon = macro === "backspace" && !value && isFocused; - - return ( -
- { - setIsFocused(true); - props.onFocus?.(e); - }} - onBlur={(e) => { - setIsFocused(false); - props.onBlur?.(e); - }} - class={cn( - "w-full rounded-md border px-3 py-2 text-base", - "transition-all duration-200", - "focus:outline-none focus:ring-2 focus:ring-[#4C8C41] focus:ring-offset-0", - "placeholder:text-muted-foreground", - showEnterIcon || showBackspaceIcon ? "pr-10" : "", - className - )} - /> - {showEnterIcon && ( - - )} - {showBackspaceIcon && ( - - )} -
- ); -}; - -export default TradeInput; \ No newline at end of file diff --git a/src/components/atoms/Tabs/Tabs.js b/src/components/atoms/Tabs/Tabs.js deleted file mode 100644 index 1195c17..0000000 --- a/src/components/atoms/Tabs/Tabs.js +++ /dev/null @@ -1,50 +0,0 @@ -"use client" -import { h } from 'preact'; // Import h from Preact -import { forwardRef } from 'preact/compat'; // Import forwardRef from Preact compatibility layer -import * as TabsPrimitive from "@radix-ui/react-tabs"; -import { twMerge } from "tailwind-merge" -import { clsx} from "clsx" - - -function cn(...inputs) { - return twMerge(clsx(inputs)) -} - -export const Tabs = TabsPrimitive.Root; - -export const TabsList = forwardRef((props, ref) => ( - -)); -TabsList.displayName = TabsPrimitive.List.displayName; - -export const TabsTrigger = forwardRef((props, ref) => ( - -)); -TabsTrigger.displayName = TabsPrimitive.Trigger.displayName; - -export const TabsContent = forwardRef((props, ref) => ( - -)); -TabsContent.displayName = TabsPrimitive.Content.displayName; - diff --git a/src/components/molecules/StockSearch/StockSearch.js b/src/components/molecules/StockSearch/StockSearch.js deleted file mode 100644 index 2df6ee6..0000000 --- a/src/components/molecules/StockSearch/StockSearch.js +++ /dev/null @@ -1,128 +0,0 @@ -import { h } from 'preact'; -import { useState, useEffect, useMemo } from 'preact/hooks'; - -// Utility for class names -const cn = (...classes) => classes.filter(Boolean).join(' '); - -const HintMessage = ({ isNavigating }) => { - const [isVisible, setIsVisible] = useState(false); - const [message, setMessage] = useState(''); - - useEffect(() => { - setIsVisible(false); - - // Short delay before showing new message for smooth exit animation - const timer = setTimeout(() => { - setMessage(isNavigating ? 'Press ↵ to select' : 'Press ↑ ↓ on keyboard to highlight'); - setIsVisible(true); - }, 200); - - return () => clearTimeout(timer); - }, [isNavigating]); - - return ( -
- - {message} - -
- ); -}; - -const StockSearch = ({ - stocks = [], - searchString = '', - onSelect, - className = '' -}) => { - const [selectedIndex, setSelectedIndex] = useState(-1); - const [isNavigating, setIsNavigating] = useState(false); - - // Reset selection when search string changes - useEffect(() => { - setSelectedIndex(-1); - setIsNavigating(false); - }, [searchString]); - - // Filter stocks based on search string - const filteredStocks = useMemo(() => { - if (!searchString) return stocks; - const search = searchString.toLowerCase(); - return stocks.filter(stock => - stock.stockName.toLowerCase().includes(search) || - stock.tickerSymbol.toLowerCase().includes(search) - ); - }, [stocks, searchString]); - - // Keyboard navigation - useEffect(() => { - const handleKeyDown = (e) => { - if (filteredStocks.length === 0) return; - - if (e.key === 'ArrowDown' || e.key === 'ArrowUp') { - e.preventDefault(); - setIsNavigating(true); - setSelectedIndex(current => { - if (current === -1) return 0; - return e.key === 'ArrowDown' - ? (current + 1) % filteredStocks.length - : (current - 1 + filteredStocks.length) % filteredStocks.length; - }); - } - - if (e.key === 'Enter' && selectedIndex !== -1) { - e.preventDefault(); - onSelect(filteredStocks[selectedIndex]); - } - }; - - window.addEventListener('keydown', handleKeyDown); - return () => window.removeEventListener('keydown', handleKeyDown); - }, [filteredStocks, selectedIndex, onSelect]); - - return ( -
- {/* Search header */} -
- searching for "{searchString}"... -
- - {/* Stock list */} -
- {filteredStocks.map((stock, index) => ( -
onSelect(stock)} - class={cn( - 'p-3 cursor-pointer transition-colors duration-150', - selectedIndex === index ? 'bg-gray-100' : 'hover:bg-gray-50', - index !== filteredStocks.length - 1 && 'border-b' - )} - > -
{stock.stockName}
-
{stock.tickerSymbol}
-
- ))} - {filteredStocks.length === 0 && ( -
- No results found -
- )} -
- - {/* Hint message with animation */} -
- -
-
- ); -}; - -export default StockSearch; \ No newline at end of file diff --git a/src/components/molecules/StockSearch/stockSearch.css b/src/components/molecules/StockSearch/stockSearch.css deleted file mode 100644 index 6d8cdc7..0000000 --- a/src/components/molecules/StockSearch/stockSearch.css +++ /dev/null @@ -1,57 +0,0 @@ -/* Base styles */ -.stock-search-container { - position: relative; - width: 100%; - } - - /* Message animations */ - .hint-message { - position: relative; - height: 24px; - overflow: hidden; - } - - .hint-text { - position: absolute; - left: 0; - width: 100%; - transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); - } - - .hint-text-enter { - transform: translateY(100%); - opacity: 0; - } - - .hint-text-enter-active { - transform: translateY(0); - opacity: 1; - } - - .hint-text-exit { - transform: translateY(0); - opacity: 1; - } - - .hint-text-exit-active { - transform: translateY(-100%); - opacity: 0; - } - - /* Stock list animations */ - .stock-item { - transition: background-color 0.15s ease; - } - - .stock-item:hover { - background-color: rgba(0, 0, 0, 0.05); - } - - .stock-item.selected { - background-color: rgba(0, 0, 0, 0.075); - } - - /* Smooth scrolling */ - .stock-list { - scroll-behavior: smooth; - } \ No newline at end of file diff --git a/src/components/molecules/TabBar/TabBar.js b/src/components/molecules/TabBar/TabBar.js deleted file mode 100644 index e8ba717..0000000 --- a/src/components/molecules/TabBar/TabBar.js +++ /dev/null @@ -1,108 +0,0 @@ -import { h } from 'preact'; -import { useState, useEffect, useRef } from 'preact/hooks'; - -// Utility function to combine class names -const cn = (...classes) => classes.filter(Boolean).join(' '); - -export const TabsTrigger = ({ - value, - activeValue, - onClick, - buttonRef, - children, - autoFocus -}) => ( - -); - -export const TabBar = ({ onTabChange = () => {} }) => { - const [activeTab, setActiveTab] = useState("new"); - const tabRefs = useRef([]); - const isInitialMount = useRef(true); - - useEffect(() => { - // Focus the "New" tab on initial mount - if (isInitialMount.current) { - tabRefs.current[0]?.focus(); - isInitialMount.current = false; - } - }, []); - - const tabs = [ - { id: "new", label: "New" }, - { id: "update", label: "Update" }, - { id: "exit", label: "Exit" } - ]; - - const handleKeyNavigation = (e) => { - const currentIndex = tabs.findIndex(tab => tab.id === activeTab); - let nextIndex = currentIndex; - - switch (e.key) { - case "ArrowLeft": - e.preventDefault(); - nextIndex = (currentIndex - 1 + tabs.length) % tabs.length; - break; - case "ArrowRight": - e.preventDefault(); - nextIndex = (currentIndex + 1) % tabs.length; - break; - default: - return; - } - - const newTab = tabs[nextIndex].id; - setActiveTab(newTab); - onTabChange(newTab); - tabRefs.current[nextIndex]?.focus(); - }; - - const handleTabClick = (tabId) => { - setActiveTab(tabId); - onTabChange(tabId); - }; - - return ( -
-
- {tabs.map((tab, index) => ( - tabRefs.current[index] = el} - autoFocus={tab.id === "new"} - > - {tab.label} - - ))} -
-
- ); -}; - -export default TabBar; \ No newline at end of file diff --git a/src/components/molecules/TabHeader/TabHeader.js b/src/components/molecules/TabHeader/TabHeader.js deleted file mode 100644 index 6185dbb..0000000 --- a/src/components/molecules/TabHeader/TabHeader.js +++ /dev/null @@ -1,24 +0,0 @@ -import { h } from 'preact'; -import { TabsList, TabsTrigger } from '../../atoms/Tabs/Tabs.js'; -import { useState } from 'preact/hooks'; - -const tabStates = ["Active", "Completed"]; - -export const TabHeader = () => { - const [activeTab, setActiveTab] = useState("active"); - - return ( - - {tabStates.map((state) => ( - setActiveTab(state.toLowerCase())} - > - {state} 3 - - ))} - - ); -}; \ No newline at end of file diff --git a/src/components/molecules/TradeCard/TradeCard.js b/src/components/molecules/TradeCard/TradeCard.js index 8ffe790..5470282 100644 --- a/src/components/molecules/TradeCard/TradeCard.js +++ b/src/components/molecules/TradeCard/TradeCard.js @@ -1,58 +1,71 @@ +import { useState } from 'preact/hooks'; import { h } from 'preact'; -import { Button } from '../../atoms/Button/Button.js'; -import { Badge } from '../../atoms/Badge/Badge.js'; -import { Card } from '../../atoms/Card/Card.js'; -import { ArrowUpRight, Pencil } from 'lucide-react'; +import { Edit2, Share, ChevronRight } from 'lucide-react'; -export const TradeCard = ({ trade }) => ( - -
-
-
-
- - {trade.type} - - {trade.symbol} -
-
- - {trade.category} - - - {trade.tradeType} - + +const TradeCard = ({ type, symbol, category, tradeType, date, time }) => { + const [isHovered, setIsHovered] = useState(false); + + return ( +
setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)} + > + {/* Main Card Content */} +
+
+
+
+ + {type} + +
+
+
+

{symbol}

+
+ {category} + {tradeType} +
+
+
+
{date}
+
{time}
+
+
+
+ + {/* Right Arrow */} +
+ +
-
-
- {trade.timestamp} -
- - + + {/* Expandable Action Buttons Section */} +
+
+
+ + +
+
-
- -); + ); + }; + +export default TradeCard; \ No newline at end of file diff --git a/src/components/molecules/TradeList/TradeList.js b/src/components/molecules/TradeList/TradeList.js deleted file mode 100644 index 4e17508..0000000 --- a/src/components/molecules/TradeList/TradeList.js +++ /dev/null @@ -1,12 +0,0 @@ -import { h } from 'preact'; -import {TradeCard} from '../TradeCard/TradeCard.js'; - -export const TradesList = ({ trades }) => ( -
-
- {trades.map((trade) => ( - - ))} -
-
-); \ No newline at end of file diff --git a/src/components/organisms/ActiveTrades/ActiveTrades.js b/src/components/organisms/ActiveTrades/ActiveTrades.js deleted file mode 100644 index 5d951d0..0000000 --- a/src/components/organisms/ActiveTrades/ActiveTrades.js +++ /dev/null @@ -1,30 +0,0 @@ -// PostedTrades.js -import { h } from 'preact'; -import { Tabs , TabsContent } from '../../atoms/Tabs/Tabs.js'; -import {Header} from '../../atoms/Header/Header.js'; -import {TabHeader} from '../../molecules/TabHeader/TabHeader.js'; -import {TradesList} from '../../molecules/TradeList/TradeList.js'; -import {CompletedTab} from '../CompletedTrades/CompletedTrades.js'; -import { trades } from '../../../assets/data/data.js'; - -const ActiveTrades = () => { - return ( -
-
- - - - - - - - - - - - -
- ); -}; - -export default ActiveTrades; \ No newline at end of file diff --git a/src/components/organisms/Auth.js b/src/components/organisms/Auth.js new file mode 100644 index 0000000..dbd42cb --- /dev/null +++ b/src/components/organisms/Auth.js @@ -0,0 +1,57 @@ +import { h } from 'preact'; +import { useEffect, useState } from 'preact/hooks'; +import { createClient } from '@supabase/supabase-js'; +import { Auth } from '@supabase/auth-ui-react'; +import { ThemeSupa } from '@supabase/auth-ui-shared'; + +const supabase = createClient( + 'YOUR_SUPABASE_URL', + 'YOUR_SUPABASE_ANON_KEY' +); + +const AuthPage = () => { + const [session, setSession] = useState(null); + + useEffect(() => { + // Get initial session + supabase.auth.getSession().then(({ data: { session } }) => { + setSession(session); + }); + + // Listen for auth changes + const { + data: { subscription }, + } = supabase.auth.onAuthStateChange((_event, session) => { + setSession(session); + if (session) { + // Notify background script of successful auth + chrome.runtime.sendMessage({ type: 'AUTH_SUCCESS' }); + } + }); + + return () => subscription.unsubscribe(); + }, []); + + if (session) { + return
Authenticated! Closing window...
; + } + + return ( +
+
+

Welcome to Trade Tracker

+

Please sign in to continue

+
+ + +
+ ); +}; + +export default AuthPage; \ No newline at end of file diff --git a/src/components/organisms/CompletedTrades/CompletedTrades.js b/src/components/organisms/CompletedTrades/CompletedTrades.js deleted file mode 100644 index 36a933b..0000000 --- a/src/components/organisms/CompletedTrades/CompletedTrades.js +++ /dev/null @@ -1,11 +0,0 @@ -import { h } from 'preact'; -import { Card } from '../../atoms/Card/Card.js'; - -export const CompletedTab = () => ( - -

Under Maintenance

-

- This section is currently under maintenance. Please check back later. -

-
-); \ No newline at end of file diff --git a/src/components/organisms/TradeForm/TradeForm.js b/src/components/organisms/TradeForm/TradeForm.js deleted file mode 100644 index bdc8000..0000000 --- a/src/components/organisms/TradeForm/TradeForm.js +++ /dev/null @@ -1,46 +0,0 @@ -import { h } from 'preact'; -import { useState } from 'preact/hooks'; -import {TabBar} from '../../molecules/TabBar/TabBar'; -import {Button} from '../../atoms/Button/Button'; - -const TradeFormLayout = () => { - const [activeTab, setActiveTab] = useState('new'); - const [validFields, setValidFields] = useState(0); - const totalFields = 3; // Stock, Stoploss, Target fields - - const handleCopy = () => { - console.log('Copying trade details...'); - // Add copy logic here - }; - - return ( -
-
- {/* Top: Tab Bar */} -
- -
- - {/* Middle: Content Area */} -
- Form content will go here -
- -
- - {/* Bottom: Button */} -
- -
-
- ); -}; - -export default TradeFormLayout; \ No newline at end of file diff --git a/src/components/pages/PostedTrades.js b/src/components/pages/PostedTrades.js new file mode 100644 index 0000000..8153665 --- /dev/null +++ b/src/components/pages/PostedTrades.js @@ -0,0 +1,79 @@ +import { useState } from 'preact/hooks'; +import { h } from 'preact'; +import { Send } from 'lucide-react'; +import TradeCard from '../molecules/TradeCard/TradeCard.js' +import {trades} from '../../assets/data/data.js'; +const PostedTrades = () => { + const [activeTab, setActiveTab] = useState('active'); + + let activeTrades = trades; + let countTrades = () => { + return activeTrades.length; + } + console.log(trades) + return ( +
+
+ {/* Header */} +
+

Posted Trades

+ +
+ + {/* Tabs */} +
+
+ + +
+
+ + {/* Tab Contents */} +
+ {activeTab === 'active' && ( +
+ {activeTrades.map((trade, index) => ( + + ))} +
+ )} + {activeTab === 'completed' && ( +
+ {/* Completed trades would go here */} +
+ )} +
+
+ + {/* Footer */} +
+ +
+
+ ); +}; + +export default PostedTrades; \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index dfc01bb..8148cb0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -3,11 +3,12 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const ExtReloader = require('webpack-ext-reloader'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const Dotenv = require('dotenv-webpack'); module.exports = { mode: process.env.NODE_ENV || 'development', entry: { - popup: ['./styles/tailwind.css', './popup/popup.js'], + popup: ['./styles/tailwind.css', './public/popup/popup.js'], background: './background/background.js' }, output: { @@ -54,8 +55,9 @@ module.exports = { } }, plugins: [ + new Dotenv(), new HtmlWebpackPlugin({ - template: './popup/index.html', + template: './public/popup/index.html', filename: 'popup.html', chunks: ['popup'] }),