test-lah 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +28 -21
- package/.next/standalone/.next/app-path-routes-manifest.json +2 -1
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +21 -21
- package/.next/standalone/.next/server/app/(dashboard)/integrations/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/integrations/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/integrations/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/page.js +6 -3
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/summary/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/summary/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[projectId]/summary/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/api/e2e/route.js +131 -0
- package/.next/standalone/.next/server/app/api/e2e/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/e2e/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/generate/route.js +3 -3
- package/.next/standalone/.next/server/app/api/generate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/generate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/llm/encrypt/route.js +1 -1
- package/.next/standalone/.next/server/app/api/llm/encrypt/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/llm/encrypt/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/llm/test/route.js +3 -3
- package/.next/standalone/.next/server/app/api/llm/test/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/llm/test/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/weather/route.js +1 -1
- package/.next/standalone/.next/server/app/api/weather/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/weather/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/favicon.ico/route.js +1 -1
- package/.next/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +2 -2
- package/.next/standalone/.next/server/app/integrations.html +1 -1
- package/.next/standalone/.next/server/app/integrations.rsc +4 -4
- package/.next/standalone/.next/server/app/login/page.js +1 -1
- package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- package/.next/standalone/.next/server/app/page.js +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +1 -1
- package/.next/standalone/.next/server/app/projects.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +2 -1
- package/.next/standalone/.next/server/chunks/615.js +2 -2
- package/.next/standalone/.next/server/chunks/692.js +1 -1
- package/.next/standalone/.next/server/chunks/{984.js → 736.js} +4 -4
- package/.next/standalone/.next/server/chunks/824.js +2 -2
- package/.next/standalone/.next/server/chunks/{174.js → 845.js} +3 -3
- package/.next/standalone/.next/server/chunks/{331.js → 873.js} +3 -3
- package/.next/standalone/.next/server/chunks/917.js +1 -0
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/9OtwPzpy1ovRWzffCh95h/_buildManifest.js +1 -0
- package/.next/standalone/.next/static/chunks/246-1673b37cc8edb269.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/integrations/page-ef2f1f3c1d497f2a.js +1 -0
- package/.next/{static/chunks/app/(dashboard)/layout-897f5e42d6866a6e.js → standalone/.next/static/chunks/app/(dashboard)/layout-69e4ea7abe9faff3.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[projectId]/page-500a663fdab52791.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[projectId]/summary/{page-524594daf0494836.js → page-b69fc155f1796e19.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-f3e1d8b28a760b83.js → page-11a49918142004f5.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/api/e2e/route-ccff81cd0a5704f2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/generate/route-ccff81cd0a5704f2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/llm/encrypt/route-ccff81cd0a5704f2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/llm/test/route-ccff81cd0a5704f2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/weather/route-ccff81cd0a5704f2.js +1 -0
- package/.next/standalone/.next/static/css/0ecf0abc0513341e.css +3 -0
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
- package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
- package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/LICENSE +191 -0
- package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
- package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
- package/.next/standalone/node_modules/playwright/index.js +17 -0
- package/.next/standalone/node_modules/playwright/index.mjs +18 -0
- package/.next/standalone/node_modules/playwright/package.json +61 -0
- package/.next/standalone/node_modules/playwright-core/browsers.json +81 -0
- package/.next/standalone/node_modules/playwright-core/index.js +32 -0
- package/.next/standalone/node_modules/playwright-core/index.mjs +28 -0
- package/.next/standalone/node_modules/playwright-core/lib/coreBundle.js +69799 -0
- package/.next/standalone/node_modules/playwright-core/lib/utilsBundle.js +85418 -0
- package/.next/standalone/node_modules/playwright-core/lib/xdg-open +1066 -0
- package/.next/standalone/node_modules/playwright-core/package.json +34 -0
- package/.next/standalone/package.json +5 -2
- package/.next/static/9OtwPzpy1ovRWzffCh95h/_buildManifest.js +1 -0
- package/.next/static/chunks/246-1673b37cc8edb269.js +1 -0
- package/.next/static/chunks/app/(dashboard)/integrations/page-ef2f1f3c1d497f2a.js +1 -0
- package/.next/{standalone/.next/static/chunks/app/(dashboard)/layout-897f5e42d6866a6e.js → static/chunks/app/(dashboard)/layout-69e4ea7abe9faff3.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/projects/[projectId]/page-500a663fdab52791.js +1 -0
- package/.next/static/chunks/app/(dashboard)/projects/[projectId]/summary/{page-524594daf0494836.js → page-b69fc155f1796e19.js} +1 -1
- package/.next/static/chunks/app/(dashboard)/projects/{page-f3e1d8b28a760b83.js → page-11a49918142004f5.js} +1 -1
- package/.next/static/chunks/app/api/e2e/route-ccff81cd0a5704f2.js +1 -0
- package/.next/static/chunks/app/api/generate/route-ccff81cd0a5704f2.js +1 -0
- package/.next/static/chunks/app/api/llm/encrypt/route-ccff81cd0a5704f2.js +1 -0
- package/.next/static/chunks/app/api/llm/test/route-ccff81cd0a5704f2.js +1 -0
- package/.next/static/chunks/app/api/weather/route-ccff81cd0a5704f2.js +1 -0
- package/.next/static/css/0ecf0abc0513341e.css +3 -0
- package/package.json +4 -1
- package/.next/standalone/.next/static/3YcKKljN8y2beg2wtB7D2/_buildManifest.js +0 -1
- package/.next/standalone/.next/static/chunks/882-cc9789441250ca9d.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/integrations/page-bb73e3391f40493c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[projectId]/page-d04f72d976710ff8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/generate/route-1bebaa46eebbcd06.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/llm/encrypt/route-1bebaa46eebbcd06.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/llm/test/route-1bebaa46eebbcd06.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/weather/route-1bebaa46eebbcd06.js +0 -1
- package/.next/standalone/.next/static/css/148903621a1952c4.css +0 -3
- package/.next/static/3YcKKljN8y2beg2wtB7D2/_buildManifest.js +0 -1
- package/.next/static/chunks/882-cc9789441250ca9d.js +0 -1
- package/.next/static/chunks/app/(dashboard)/integrations/page-bb73e3391f40493c.js +0 -1
- package/.next/static/chunks/app/(dashboard)/projects/[projectId]/page-d04f72d976710ff8.js +0 -1
- package/.next/static/chunks/app/api/generate/route-1bebaa46eebbcd06.js +0 -1
- package/.next/static/chunks/app/api/llm/encrypt/route-1bebaa46eebbcd06.js +0 -1
- package/.next/static/chunks/app/api/llm/test/route-1bebaa46eebbcd06.js +0 -1
- package/.next/static/chunks/app/api/weather/route-1bebaa46eebbcd06.js +0 -1
- package/.next/static/css/148903621a1952c4.css +0 -3
- /package/.next/standalone/.next/static/{3YcKKljN8y2beg2wtB7D2 → 9OtwPzpy1ovRWzffCh95h}/_ssgManifest.js +0 -0
- /package/.next/static/{3YcKKljN8y2beg2wtB7D2 → 9OtwPzpy1ovRWzffCh95h}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "playwright-core",
|
|
3
|
+
"version": "1.60.0",
|
|
4
|
+
"description": "A high-level API to automate web browsers",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/microsoft/playwright.git"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://playwright.dev",
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=18"
|
|
12
|
+
},
|
|
13
|
+
"author": {
|
|
14
|
+
"name": "Microsoft Corporation"
|
|
15
|
+
},
|
|
16
|
+
"license": "Apache-2.0",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./index.d.ts",
|
|
20
|
+
"import": "./index.mjs",
|
|
21
|
+
"require": "./index.js",
|
|
22
|
+
"default": "./index.js"
|
|
23
|
+
},
|
|
24
|
+
"./package.json": "./package.json",
|
|
25
|
+
"./lib/bootstrap": "./lib/bootstrap.js",
|
|
26
|
+
"./lib/coreBundle": "./lib/coreBundle.js",
|
|
27
|
+
"./lib/utilsBundle": "./lib/utilsBundle.js",
|
|
28
|
+
"./lib/tools/cli-client/program": "./lib/tools/cli-client/program.js"
|
|
29
|
+
},
|
|
30
|
+
"bin": {
|
|
31
|
+
"playwright-core": "cli.js"
|
|
32
|
+
},
|
|
33
|
+
"types": "types/types.d.ts"
|
|
34
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "test-lah",
|
|
3
|
-
"version": "1.0.
|
|
2
|
+
"name": "@niamhramadhaan/test-lah",
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "QA Test Case Management — AI-powered test case generation and management",
|
|
5
5
|
"private": false,
|
|
6
6
|
"bin": {
|
|
@@ -28,9 +28,11 @@
|
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@ai-sdk/anthropic": "^3.0.81",
|
|
30
30
|
"@ai-sdk/google": "^3.0.80",
|
|
31
|
+
"@ai-sdk/groq": "^3.0.39",
|
|
31
32
|
"@ai-sdk/openai": "^3.0.68",
|
|
32
33
|
"@base-ui/react": "^1.5.0",
|
|
33
34
|
"@lottiefiles/dotlottie-web": "^0.74.0",
|
|
35
|
+
"@playwright/test": "^1.60.0",
|
|
34
36
|
"ai": "^6.0.198",
|
|
35
37
|
"canvas-confetti": "^1.9.4",
|
|
36
38
|
"class-variance-authority": "^0.7.1",
|
|
@@ -40,6 +42,7 @@
|
|
|
40
42
|
"motion": "^12.40.0",
|
|
41
43
|
"next": "^15.5.18",
|
|
42
44
|
"next-themes": "^0.4.6",
|
|
45
|
+
"playwright": "^1.60.0",
|
|
43
46
|
"react": "^18",
|
|
44
47
|
"react-dom": "^18",
|
|
45
48
|
"rough-notation": "^0.5.1",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__BUILD_MANIFEST=function(e,r,t,_){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:11,errorRate:1e-4,numBits:211,numHashes:14,bitArray:[1,0,1,e,0,e,r,r,e,e,e,r,r,e,r,e,e,e,r,e,r,r,e,e,r,r,e,e,r,r,r,r,r,r,r,e,e,e,e,r,e,e,e,e,e,e,r,r,r,e,e,e,r,r,r,r,r,r,r,e,r,e,e,e,r,e,r,e,e,r,e,r,r,r,e,e,r,e,r,e,r,r,r,r,r,e,e,r,e,r,e,e,e,e,e,r,e,e,e,r,e,e,e,e,e,e,r,r,e,e,r,r,r,r,r,e,r,e,e,r,e,r,e,e,r,e,r,e,e,e,r,r,e,e,e,e,e,e,r,e,r,r,r,r,e,r,r,e,r,e,e,e,e,e,r,r,e,e,e,e,e,e,e,e,r,e,r,r,e,e,r,r,r,r,e,e,e,e,r,r,r,e,e,e,r,e,e,r,e,r,r,r,e,e,e,e,e,r,r,r,e,e,e,e,r,e,e,r,r,r,r]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:20,numHashes:14,bitArray:[r,r,e,e,e,e,r,e,r,e,r,e,r,e,r,e,e,r,e,r]},"/_error":["static/chunks/pages/_error-cb2a52f75f2162e2.js"],sortedPages:["/_app","/_error"]}}(1,0,1e-4,14),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[246],{7065:(e,t,r)=>{r.d(t,{q:()=>a,s:()=>n});var l=r(5155),s=r(2115);function n(){let[e,t]=(0,s.useState)(null),r=(0,s.useCallback)((e,r)=>new Promise(l=>{t({type:"alert",title:e,message:r,resolve:()=>{t(null),l()}})}),[]);return{dialog:e,alert:r,confirm:(0,s.useCallback)((e,r)=>new Promise(l=>{t({type:"confirm",title:e,message:r,resolve:e=>{t(null),l(!0===e)}})}),[]),prompt:(0,s.useCallback)(function(e,r){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return new Promise(s=>{t({type:"prompt",title:e,message:r,defaultValue:l,resolve:e=>{t(null),s("string"==typeof e?e:null)}})})},[])}}function a(e){let{dialog:t}=e,[r,n]=(0,s.useState)(""),a=(0,s.useRef)(null);return((0,s.useEffect)(()=>{if((null==t?void 0:t.type)==="prompt"){var e;n(null!=(e=t.defaultValue)?e:""),setTimeout(()=>{var e;return null==(e=a.current)?void 0:e.focus()},50)}},[t]),(0,s.useEffect)(()=>{if(!t)return;let e=e=>{"Escape"===e.key&&t.resolve("prompt"===t.type&&null),"Enter"===e.key&&"prompt"!==t.type&&t.resolve("confirm"===t.type||null)};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[t]),t)?(0,l.jsx)("div",{className:"fixed inset-0 z-[400] flex items-center justify-center",style:{backgroundColor:"rgba(0,0,0,0.3)",animation:"fadeIn 150ms ease-out"},onClick:()=>t.resolve("prompt"===t.type&&null),children:(0,l.jsx)("div",{className:"relative w-full max-w-sm mx-4",onClick:e=>e.stopPropagation(),children:(0,l.jsx)("div",{className:"p-[2px] rounded-xl overflow-hidden",style:{background:"linear-gradient(135deg, #9E7AFF 0%, #FE8BBB 50%, #9E7AFF 100%)",backgroundSize:"200% 200%",animation:"borderShine 3s linear infinite"},children:(0,l.jsxs)("div",{className:"rounded-[10px] p-5",style:{backgroundColor:"var(--bg-card)",boxShadow:"var(--shadow-xl)"},children:[(0,l.jsx)("h3",{className:"text-sm font-semibold mb-2",style:{color:"var(--text-primary)"},children:t.title}),(0,l.jsx)("p",{className:"text-xs mb-4",style:{color:"var(--text-secondary)"},children:t.message}),"prompt"===t.type&&(0,l.jsx)("input",{ref:a,value:r,onChange:e=>n(e.target.value),onKeyDown:e=>{"Enter"===e.key&&t.resolve(r.trim()||null)},className:"w-full px-3 py-2 text-sm rounded-lg border outline-none transition-colors focus:border-[var(--accent)] mb-4",style:{borderColor:"var(--border)",backgroundColor:"var(--bg-secondary)",color:"var(--text-primary)"},placeholder:"Enter value..."}),(0,l.jsxs)("div",{className:"flex gap-2 justify-end",children:["alert"!==t.type&&(0,l.jsx)("button",{onClick:()=>t.resolve("prompt"===t.type&&null),className:"px-3 py-1.5 text-xs font-medium rounded-lg border transition-colors hover:bg-[var(--bg-secondary)]",style:{borderColor:"var(--border)",color:"var(--text-secondary)"},children:"Cancel"}),(0,l.jsx)("button",{onClick:()=>{"confirm"===t.type?t.resolve(!0):"prompt"===t.type?t.resolve(r.trim()||null):t.resolve(null)},className:"px-3 py-1.5 text-xs font-medium rounded-lg transition-opacity hover:opacity-80",style:{backgroundColor:"var(--accent)",color:"var(--bg-primary)"},children:"confirm"===t.type?"Confirm":"OK"})]})]})})})}):null}},7246:(e,t,r)=>{r.d(t,{q:()=>p,M:()=>f});var l=r(5155),s=r(2115);function n(e,t){let[r,l]=(0,s.useState)(()=>(function(e,t){try{let r=localStorage.getItem(e);return r?JSON.parse(r):t}catch(e){return t}})(e,t)),[n,a]=(0,s.useState)(null),o=(0,s.useRef)(null);return(0,s.useEffect)(()=>{let t=t=>{if(t.key===e&&t.newValue)try{l(JSON.parse(t.newValue))}catch(e){}};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)},[e]),[r,(0,s.useCallback)(t=>{l(r=>{let l=t instanceof Function?t(r):t;return o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{try{localStorage.setItem(e,JSON.stringify(l))}catch(e){}a(new Date().toISOString())},300),l})},[e]),n]}var a=r(8566);let o={projects:{},activeProjectId:null,selectedNodeId:null},i={name:"",bannerColor:"#64B5F6",avatarUrl:"",role:"QA Engineer"},c={baseUrl:"http://localhost:3000",browser:"chromium",headless:!0,timeout:3e4};var u=r(7065);let d=(0,s.createContext)(null);function p(e){let{children:t}=e,r=function(){var e;let[t,r,l]=n("qa-dashboard",o),i=(0,s.useCallback)(e=>{let t=crypto.randomUUID(),l={id:t,name:e,createdAt:new Date().toISOString(),flows:[],testCases:{},columnConfig:[...a._X],columnConfigs:{},edges:[],userProfile:{name:"",bannerColor:"#64B5F6"},nodeCounter:0,tcCounter:{}};return r(e=>({...e,projects:{...e.projects,[t]:l},activeProjectId:t,selectedNodeId:null})),t},[r]),c=(0,s.useCallback)(e=>{r(t=>{var r;let{[e]:l,...s}=t.projects,n=Object.keys(s);return{...t,projects:s,activeProjectId:t.activeProjectId===e?null!=(r=n[0])?r:null:t.activeProjectId,selectedNodeId:t.activeProjectId===e?null:t.selectedNodeId}})},[r]),u=(0,s.useCallback)(e=>{r(t=>({...t,activeProjectId:e,selectedNodeId:null}))},[r]),d=(0,s.useCallback)((e,t)=>{r(r=>({...r,projects:{...r.projects,[e]:{...r.projects[e],name:t}}}))},[r]),p=(0,s.useCallback)(e=>{r(t=>{let r=t.projects[e];if(!r)return t;let l=crypto.randomUUID(),s=new Date().toISOString(),n={...JSON.parse(JSON.stringify(r)),id:l,name:"".concat(r.name," (Copy)"),createdAt:s};return{...t,projects:{...t.projects,[l]:n},activeProjectId:l,selectedNodeId:null}})},[r]),f=(0,s.useCallback)(e=>{try{let t=JSON.parse(e);if(!t||"object"!=typeof t)return{ok:!1,error:"Invalid JSON"};if(!t.name||!t.flows)return{ok:!1,error:"Missing required fields (name, flows)"};let l=crypto.randomUUID(),s={id:l,name:t.name,createdAt:t.createdAt||new Date().toISOString(),flows:Array.isArray(t.flows)?t.flows:[],testCases:t.testCases&&"object"==typeof t.testCases?t.testCases:{},columnConfig:Array.isArray(t.columnConfig)?t.columnConfig:[...a._X],columnConfigs:t.columnConfigs&&"object"==typeof t.columnConfigs?t.columnConfigs:{},edges:Array.isArray(t.edges)?t.edges:[],userProfile:t.userProfile&&"object"==typeof t.userProfile?t.userProfile:{name:"",bannerColor:"#64B5F6"},nodeCounter:"number"==typeof t.nodeCounter?t.nodeCounter:0,tcCounter:t.tcCounter&&"object"==typeof t.tcCounter?t.tcCounter:{}};return r(e=>({...e,projects:{...e.projects,[l]:s},activeProjectId:l,selectedNodeId:null})),{ok:!0}}catch(e){return{ok:!1,error:"Failed to parse project file"}}},[r]),C=(0,s.useCallback)(e=>{r(t=>({...t,selectedNodeId:e}))},[r]),m=(0,s.useCallback)((e,t)=>{r(r=>({...r,projects:{...r.projects,[e]:t(r.projects[e])}}))},[r]),v=t.activeProjectId&&null!=(e=t.projects[t.activeProjectId])?e:null;return{state:t,setState:r,projects:t.projects,activeProject:v,activeProjectId:t.activeProjectId,selectedNodeId:t.selectedNodeId,createProject:i,deleteProject:c,duplicateProject:p,importProject:f,switchProject:u,renameProject:d,setSelectedNodeId:C,updateProject:m,lastSaved:l}}(),p=function(){let[e,t]=n("qa-profile",i),r=e.name.split(" ").map(e=>e[0]).filter(Boolean).slice(0,2).join("").toUpperCase()||"?";return{profile:e,setName:e=>t(t=>({...t,name:e})),setBannerColor:e=>t(t=>({...t,bannerColor:e})),setAvatarUrl:e=>t(t=>({...t,avatarUrl:e})),setRole:e=>t(t=>({...t,role:e})),initials:r}}(),f=function(e,t){let[r,l]=(0,s.useState)([]),[n,a]=(0,s.useState)(-1),o=(0,s.useRef)(!1),i=(0,s.useCallback)(t=>{if(!e||o.current){o.current=!1;return}l(r=>{let l=[...r.slice(0,n+1),{label:t,projectSnapshot:JSON.parse(JSON.stringify(e))}];return l.length>50&&l.shift(),l}),a(e=>Math.min(e+1,49))},[e,n]),c=(0,s.useCallback)(()=>{if(n<0||!e)return;let l=r[n];l&&(o.current=!0,t(e.id,()=>l.projectSnapshot),a(e=>e-1))},[r,n,e,t]),u=(0,s.useCallback)(()=>{if(n>=r.length-1||!e)return;let l=r[n+1];l&&(o.current=!0,t(e.id,()=>l.projectSnapshot),a(e=>e+1))},[r,n,e,t]),d=n>=0;return{pushState:i,undo:c,redo:u,canUndo:d,canRedo:n<r.length-1,recentActions:r.slice(-10).map(e=>e.label).reverse()}}(r.activeProject,r.updateProject),C=function(e,t,r,l){var n,o;let i=null!=(n=null==e?void 0:e.flows)?n:[],c=null!=(o=null==e?void 0:e.edges)?o:[],u=(0,s.useCallback)((r,s,n,o)=>{if(!e)return null;let i=crypto.randomUUID(),c="";return t(e.id,e=>{var t;let l=(null!=(t=e.nodeCounter)?t:0)+1,u=(s||"").trim().replace(/[^a-zA-Z0-9\s]/g,"").split(/\s+/);c=u.length>=2?u.slice(0,2).map(e=>e.charAt(0).toUpperCase()).join("")+String(l).padStart(2,"0"):u[0]&&u[0].length>=2?u[0].slice(0,3).toUpperCase()+String(l).padStart(2,"0"):"N".concat(String(l).padStart(3,"0"));let d=(0,a.IU)(i,c,s,r);n&&(d.position=n),o&&(d.direction=o);let p=[...e.flows];if(r){let e=p.findIndex(e=>e.id===r);-1!==e&&(p[e]={...p[e],children:[...p[e].children,i]})}return p.push(d),{...e,flows:p,testCases:{...e.testCases,[i]:[]},nodeCounter:l}}),l(i),i},[e,t,l]),d=(0,s.useCallback)(s=>{if(!e)return;let n=new Set,a=t=>{n.add(t);let r=e.flows.find(e=>e.id===t);null==r||r.children.forEach(a)};a(s),t(e.id,e=>{var t;let r=e.flows.filter(e=>!n.has(e.id)).map(e=>({...e,children:e.children.filter(e=>!n.has(e))})),l={...e.testCases};n.forEach(e=>delete l[e]);let s=(null!=(t=e.edges)?t:[]).filter(e=>!n.has(e.fromId)&&!n.has(e.toId));return{...e,flows:r,testCases:l,edges:s}}),n.has(null!=r?r:"")&&l(null)},[e,t,r,l]),p=(0,s.useCallback)(s=>{if(!e||0===s.length)return;let n=new Set,a=t=>{n.add(t);let r=e.flows.find(e=>e.id===t);null==r||r.children.forEach(a)};s.forEach(a),t(e.id,e=>{var t;let r=e.flows.filter(e=>!n.has(e.id)).map(e=>({...e,children:e.children.filter(e=>!n.has(e))})),l={...e.testCases};n.forEach(e=>delete l[e]);let s=(null!=(t=e.edges)?t:[]).filter(e=>!n.has(e.fromId)&&!n.has(e.toId));return{...e,flows:r,testCases:l,edges:s}}),n.has(null!=r?r:"")&&l(null)},[e,t,r,l]),f=(0,s.useCallback)((r,l)=>{e&&t(e.id,e=>({...e,flows:e.flows.map(e=>e.id===r?{...e,label:l}:e)}))},[e,t]),C=(0,s.useCallback)((r,l)=>{e&&t(e.id,e=>({...e,flows:e.flows.map(e=>e.id===r?{...e,...l}:e)}))},[e,t]),m=(0,s.useCallback)(r=>{e&&t(e.id,e=>{let t=e.flows.find(e=>e.id===r);return t&&t.parentId?{...e,flows:e.flows.map(e=>e.id===r?{...e,parentId:null}:e.id===t.parentId?{...e,children:e.children.filter(e=>e!==r)}:e)}:e})},[e,t]),v=(0,s.useCallback)(e=>{l(e)},[l]),b=(0,s.useCallback)((r,l,s)=>{if(!e)return;let n={id:crypto.randomUUID(),fromId:r,toId:l,type:s};t(e.id,e=>{var t;return{...e,edges:[...null!=(t=e.edges)?t:[],n]}})},[e,t]),g=(0,s.useCallback)(r=>{e&&t(e.id,e=>{var t;return{...e,edges:(null!=(t=e.edges)?t:[]).filter(e=>e.id!==r)}})},[e,t]);return{nodes:i,edges:c,selectedNodeId:r,addNode:u,deleteNode:d,deleteNodes:p,unlinkNode:m,renameNode:f,updateNode:C,selectNode:v,addEdge:b,deleteEdge:g,updateEdge:(0,s.useCallback)((r,l)=>{e&&t(e.id,e=>{var t;return{...e,edges:(null!=(t=e.edges)?t:[]).map(e=>e.id===r?{...e,...l}:e)}})},[e,t]),resetLayout:(0,s.useCallback)(()=>{e&&t(e.id,e=>({...e,flows:e.flows.map(e=>({...e,position:null}))}))},[e,t])}}(r.activeProject,r.updateProject,r.selectedNodeId,r.setSelectedNodeId),m=function(e,t,r){var l;let n=r&&e&&null!=(l=e.testCases[r])?l:[],o=function(e){let t=e.length,r=e.filter(e=>"pass"===e.status).length,l=e.filter(e=>"fail"===e.status).length,s=e.filter(e=>"skip"===e.status).length,n=e.filter(e=>"untested"===e.status).length,a=t-s,o=a>0?Math.round(r/a*100):0;return{total:t,pass:r,fail:l,skip:s,untested:n,passRate:o}}(n),i=(0,s.useCallback)((r,l,s,n)=>{var a,o;if(!e)return;let i=e.flows.find(e=>e.id===r),c=null!=(a=null==i?void 0:i.code)?a:"N000",u=null!=(o=e.testCases[r])?o:[],d="";t(e.id,e=>{var t,a,o;let i={...null!=(t=e.tcCounter)?t:{}},p=(null!=(a=i[r])?a:0)+1;i[r]=p,d="".concat(c,"-TC").concat(String(p).padStart(3,"0"));let f={id:crypto.randomUUID(),code:d,title:l,steps:null!=s?s:"",expected:null!=n?n:"",status:"untested",case_type:"General",notes:"",links:"",order:u.length};return{...e,testCases:{...e.testCases,[r]:[...null!=(o=e.testCases[r])?o:[],f]},tcCounter:i}})},[e,t]),c=(0,s.useCallback)((r,l,s)=>{e&&t(e.id,e=>{var t;return{...e,testCases:{...e.testCases,[r]:(null!=(t=e.testCases[r])?t:[]).map(e=>e.id===l?{...e,...s}:e)}}})},[e,t]),u=(0,s.useCallback)((r,l)=>{e&&t(e.id,e=>{var t;return{...e,testCases:{...e.testCases,[r]:(null!=(t=e.testCases[r])?t:[]).filter(e=>e.id!==l)}}})},[e,t]),d=(0,s.useCallback)((r,l)=>{if(!e||0===l.length)return;let s=new Set(l);t(e.id,e=>{var t;return{...e,testCases:{...e.testCases,[r]:(null!=(t=e.testCases[r])?t:[]).filter(e=>!s.has(e.id))}}})},[e,t]),p=(0,s.useCallback)((r,l,s)=>{if(!e||0===l.length)return;let n=new Set(l);t(e.id,e=>{var t;return{...e,testCases:{...e.testCases,[r]:(null!=(t=e.testCases[r])?t:[]).map(e=>n.has(e.id)?{...e,...s}:e)}}})},[e,t]),f=(0,s.useCallback)((r,l)=>{e&&t(e.id,e=>{var t;let s=new Map((null!=(t=e.testCases[r])?t:[]).map(e=>[e.id,e])),n=l.map((e,t)=>{let r=s.get(e);return r?{...r,order:t}:null}).filter(Boolean);return{...e,testCases:{...e.testCases,[r]:n}}})},[e,t]),C=(0,s.useCallback)((r,l,s)=>{e&&t(e.id,e=>{var t,n;let o={...null!=(t=e.columnConfigs)?t:{}},i=null!=(n=o[r])?n:[...a._X];return o[r]=i.map(e=>e.key===l?{...e,label:s}:e),{...e,columnConfigs:o}})},[e,t]),m=(0,s.useCallback)((r,l)=>{e&&t(e.id,e=>{var t,s;let n={...null!=(t=e.columnConfigs)?t:{}},o=null!=(s=n[r])?s:[...a._X];return n[r]=o.map(e=>e.key===l?{...e,visible:!e.visible}:e),{...e,columnConfigs:n}})},[e,t]),v=(0,s.useCallback)((r,l)=>{if(!e)return;let s=l.toLowerCase().replace(/\s+/g,"_");t(e.id,e=>{var t,n;let o={...null!=(t=e.columnConfigs)?t:{}},i=null!=(n=o[r])?n:[...a._X];return o[r]=[...i,{key:s,label:l,visible:!0}],{...e,columnConfigs:o}})},[e,t]);return{testCases:n,stats:o,addTestCase:i,updateTestCase:c,deleteTestCase:u,bulkDeleteTestCases:d,bulkUpdateTestCases:p,reorderTestCases:f,updateColumnConfig:C,toggleColumnVisibility:m,addColumn:v,deleteColumn:(0,s.useCallback)((r,l)=>{e&&t(e.id,e=>{var t,s;let n={...null!=(t=e.columnConfigs)?t:{}},o=null!=(s=n[r])?s:[...a._X];return n[r]=o.filter(e=>e.key!==l),{...e,columnConfigs:n}})},[e,t]),reorderColumn:(0,s.useCallback)((r,l,s)=>{e&&t(e.id,e=>{var t,n;let o={...null!=(t=e.columnConfigs)?t:{}},i=[...null!=(n=o[r])?n:[...a._X]],c=i.findIndex(e=>e.key===l);if(-1===c)return e;let u="up"===s?c-1:c+1;if(u<0||u>=i.length)return e;let d=i[c];return i[c]=i[u],i[u]=d,o[r]=i,{...e,columnConfigs:o}})},[e,t])}}(r.activeProject,r.updateProject,r.selectedNodeId),v=function(e,t){let r=null==e?void 0:e.id,l=(0,s.useMemo)(()=>(null==e?void 0:e.e2eData)||{config:c,runs:[],savedScripts:[]},[null==e?void 0:e.e2eData]),n=(0,s.useCallback)(e=>{r&&t(r,t=>({...t,e2eData:e(t.e2eData||{config:c,runs:[],savedScripts:[]})}))},[r,t]),a=(0,s.useCallback)(e=>{n(t=>({...t,config:{...t.config,...e}}))},[n]),o=(0,s.useCallback)(e=>{let t={...e,id:"run-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,8)),timestamp:new Date().toISOString()};return n(e=>({...e,runs:[t,...e.runs].slice(0,20)})),t},[n]),i=(0,s.useCallback)(e=>{n(t=>({...t,runs:t.runs.filter(t=>t.id!==e)}))},[n]),u=(0,s.useCallback)(()=>{n(e=>({...e,runs:[]}))},[n]),d=(0,s.useCallback)((e,t,l,s)=>{n(n=>{let a=n.savedScripts.findIndex(t=>t.testCaseId===e),o={id:a>=0?n.savedScripts[a].id:"script-".concat(Date.now()),projectId:r,testCaseId:e,title:t,code:l,script:s,updatedAt:new Date().toISOString()},i=[...n.savedScripts];return a>=0?i[a]=o:i.push(o),{...n,savedScripts:i}})},[r,n]),p=(0,s.useCallback)(e=>{n(t=>({...t,savedScripts:t.savedScripts.filter(t=>t.testCaseId!==e)}))},[n]),f=(0,s.useCallback)(e=>l.savedScripts.find(t=>t.testCaseId===e),[l.savedScripts]);return{config:l.config,runs:l.runs,savedScripts:l.savedScripts,saveConfig:a,saveRun:o,deleteRun:i,clearRuns:u,saveScript:d,deleteScript:p,getScript:f}}(r.activeProject,r.updateProject),b=(0,u.s)(),g=(0,s.useMemo)(()=>({projects:r.projects,activeProject:r.activeProject,activeProjectId:r.activeProjectId,selectedNodeId:r.selectedNodeId,createProject:r.createProject,deleteProject:r.deleteProject,duplicateProject:r.duplicateProject,importProject:r.importProject,switchProject:r.switchProject,renameProject:r.renameProject,setSelectedNodeId:r.setSelectedNodeId,updateProject:r.updateProject,profile:p.profile,profileInitials:p.initials,setProfileName:p.setName,setProfileBannerColor:p.setBannerColor,setProfileAvatarUrl:p.setAvatarUrl,setProfileRole:p.setRole,canUndo:f.canUndo,canRedo:f.canRedo,undo:f.undo,redo:f.redo,pushState:f.pushState,mindmap:C,testCases:m,e2e:v,dialog:b.dialog,alertDialog:b.alert,confirmDialog:b.confirm,promptDialog:b.prompt,lastSaved:r.lastSaved}),[r,p,f,C,m,v,b]);return(0,l.jsx)(d.Provider,{value:g,children:t})}function f(){let e=(0,s.useContext)(d);if(!e)throw Error("useDashboard must be used within DashboardProvider");return e}},8566:(e,t,r)=>{r.d(t,{D_:()=>s,IU:()=>a,T7:()=>n,_X:()=>l});let l=[{key:"code",label:"ID",visible:!0},{key:"title",label:"Test Case",visible:!0},{key:"steps",label:"Steps",visible:!0},{key:"expected",label:"Expected Result",visible:!0},{key:"status",label:"Status",visible:!0},{key:"case_type",label:"Case Type",visible:!1},{key:"notes",label:"Notes",visible:!0},{key:"links",label:"Links",visible:!1}],s=["General","Positive","Negative"],n=["#E57373","#F06292","#BA68C8","#9575CD","#7986CB","#64B5F6","#4FC3F7","#4DD0E1","#4DB6AC","#81C784","#AED581","#FFD54F","#FFB74D","#FF8A65","#A1887F","#90A4AE"];function a(e,t,r,l){return{id:e,code:t,label:r,parentId:l,children:[],shape:"rounded",notes:"",position:null}}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[480],{2850:(e,r,o)=>{Promise.resolve().then(o.bind(o,4071))},3362:(e,r,o)=>{"use strict";o.d(r,{Pj:()=>t});let t=Object.values({openai:{id:"openai",name:"OpenAI",type:"native",description:"GPT models powering ChatGPT. Industry-leading language understanding.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/openai.svg",keyUrl:"https://platform.openai.com/api-keys",keyPlaceholder:"sk-...",color:"#10A37F",sdkProvider:"openai",defaultModel:"gpt-4o-mini",popularModels:["gpt-4o","gpt-4o-mini","gpt-4-turbo","gpt-3.5-turbo"]},google:{id:"google",name:"Google Gemini",type:"native",description:"Google's multimodal AI with strong reasoning capabilities.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/googlegemini.svg",keyUrl:"https://aistudio.google.com/apikey",keyPlaceholder:"AIza...",color:"#4285F4",sdkProvider:"google",defaultModel:"gemini-2.5-flash",popularModels:["gemini-2.5-flash","gemini-2.5-pro","gemini-2.0-flash"]},anthropic:{id:"anthropic",name:"Anthropic",type:"native",description:"Claude models — safe, steerable, and highly capable.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/anthropic.svg",keyUrl:"https://console.anthropic.com/settings/keys",keyPlaceholder:"sk-ant-...",color:"#D97706",sdkProvider:"anthropic",defaultModel:"claude-sonnet-4-20250514",popularModels:["claude-sonnet-4-20250514","claude-haiku-4-20250514","claude-3-5-sonnet-20241022"]},deepseek:{id:"deepseek",name:"DeepSeek",type:"openai-compatible",description:"High-performance open-source models with competitive reasoning.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/deepseek.svg",keyUrl:"https://platform.deepseek.com/api_keys",keyPlaceholder:"sk-...",color:"#4D6BFE",sdkProvider:"openai",baseURL:"https://api.deepseek.com/v1",defaultModel:"deepseek-chat",popularModels:["deepseek-chat","deepseek-reasoner"]},xiaomi:{id:"xiaomi",name:"Xiaomi (MiMo)",type:"openai-compatible",description:"Xiaomi's MiMo models — OpenAI-compatible API.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/xiaomi.svg",keyUrl:"https://platform.xiaomimimo.com/",keyPlaceholder:"tp-...",color:"#FF6900",sdkProvider:"openai",baseURL:"https://token-plan-sgp.xiaomimimo.com/v1",defaultModel:"mimo-v2.5",popularModels:["mimo-v2.5","mimo-v2.5-pro"]},openrouter:{id:"openrouter",name:"OpenRouter",type:"openai-compatible",description:"Unified gateway to 200+ models — Claude, Llama, Mistral, Gemini, and more.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/openrouter.svg",keyUrl:"https://openrouter.ai/keys",keyPlaceholder:"sk-or-...",color:"#6366F1",sdkProvider:"openai",baseURL:"https://openrouter.ai/api/v1",defaultModel:"openrouter/free",popularModels:["openrouter/free","meta-llama/llama-4-maverick:free","google/gemini-2.5-flash:free","deepseek/deepseek-chat-v3-0324:free","mistralai/mistral-small-3.2-24b:free","qwen/qwen3-235b-a22b:free","microsoft/phi-4-reasoning-plus:free"]},groq:{id:"groq",name:"Groq",type:"native",description:"Ultra-fast inference with LPU hardware. Blazing speed for Llama, Mixtral, and Gemma models.",logoUrl:"https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/groq.svg",keyUrl:"https://console.groq.com/keys",keyPlaceholder:"gsk_...",color:"#F55036",sdkProvider:"groq",defaultModel:"llama-3.3-70b-versatile",popularModels:["llama-3.3-70b-versatile","llama-3.1-8b-instant","mixtral-8x7b-32768","gemma2-9b-it","meta-llama/llama-4-scout-17b-16e-instruct","qwen-qwq-32b"]},custom:{id:"custom",name:"Custom (OpenAI-compatible)",type:"openai-compatible",description:"Any OpenAI-compatible API — Ollama, LM Studio, vLLM, LiteLLM, etc.",logoUrl:"",keyUrl:"",keyPlaceholder:"sk-... or any key",color:"#6B7280",sdkProvider:"openai",defaultModel:"",popularModels:[],requiresBaseURL:!0}})},4071:(e,r,o)=>{"use strict";o.r(r),o.d(r,{default:()=>n});var t=o(5155),l=o(2115),a=o(5307),s=o(7669),i=o(3362);function n(){let{activeProviderId:e,setActiveProvider:r}=(0,s.P)(),[o,n]=(0,l.useState)(e);return(0,l.useEffect)(()=>{o||n(e)},[e]),(0,t.jsxs)("div",{className:"h-full overflow-auto relative",children:[(0,t.jsxs)("div",{className:"absolute inset-0 overflow-hidden pointer-events-none",children:[(0,t.jsx)(a.b,{width:40,height:40,x:-1,y:-1,className:"opacity-20"}),(0,t.jsx)("div",{className:"absolute inset-0",style:{background:"linear-gradient(to bottom, var(--bg-primary) 0%, transparent 20%, transparent 80%, var(--bg-primary) 100%)"}})]}),(0,t.jsxs)("div",{className:"relative p-6 max-w-4xl",children:[(0,t.jsxs)("div",{className:"mb-6",children:[(0,t.jsx)("h2",{className:"text-lg font-medium",style:{color:"var(--text-primary)"},children:"Integrations"}),(0,t.jsx)("p",{className:"text-xs mt-0.5",style:{color:"var(--text-tertiary)"},children:"Connect an AI provider to enable test case generation."})]}),(0,t.jsx)("h3",{className:"text-xs font-medium uppercase tracking-wider mb-3",style:{color:"var(--text-tertiary)"},children:"AI Providers"}),(0,t.jsx)("div",{className:"space-y-3",children:i.Pj.map(l=>(0,t.jsx)(d,{def:l,expanded:o===l.id,onToggle:()=>n(e=>e===l.id?null:l.id),isActive:e===l.id,onSetActive:()=>r(l.id)},l.id))})]})]})}function d(e){let{def:r,expanded:o,onToggle:a,isActive:i,onSetActive:n}=e,{config:d,updateProvider:p}=(0,s.P)(),m=d.providers[r.id],[u,v]=(0,l.useState)(!1),[h,x]=(0,l.useState)((null==m?void 0:m.apiKey)||""),[y,g]=(0,l.useState)((null==m?void 0:m.baseURL)||r.baseURL||""),[b,f]=(0,l.useState)(!1),[k,j]=(0,l.useState)(null),[N,C]=(0,l.useState)(null);(0,l.useEffect)(()=>{o&&m&&!m.connected&&!u&&(x(m.apiKey),g(m.baseURL||r.baseURL||""))},[o]),(0,l.useEffect)(()=>{(null==m?void 0:m.connected)&&m.apiKey&&!m.apiKey.startsWith("enc:")&&fetch("/api/llm/encrypt",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({value:m.apiKey})}).then(e=>e.json()).then(e=>{e.encrypted&&p(r.id,{apiKey:e.encrypted})}).catch(()=>{})},[]);let w=async()=>{let e=h.trim();if(e){f(!0),j(null),C(null);try{let o=await fetch("/api/llm/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:r.id,apiKey:e,baseURL:y.trim()||void 0})}),t=await o.json();j(t),t.ok&&C(e)}catch(e){j({ok:!1,error:"Network error"})}finally{f(!1)}}},U=async()=>{let e=N||h.trim();if(!e)return;if(!N)return void await w();let o=e;try{let r=await fetch("/api/llm/encrypt",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({value:e})}),t=await r.json();t.encrypted&&(o=t.encrypted)}catch(e){}p(r.id,{apiKey:o,baseURL:y.trim()||r.baseURL||"",connected:!0,models:r.popularModels,defaultModel:(null==m?void 0:m.defaultModel)||r.defaultModel||r.popularModels[0]||"",secondaryModel:(null==m?void 0:m.secondaryModel)||""}),v(!1),j(null),C(null)},M=(e,o)=>{p(r.id,{[e]:o})};if(!m)return null;let P=r.color||"#6B7280";return(0,t.jsxs)("div",{className:"rounded-xl border transition-all overflow-hidden",style:{borderColor:i?P:o?"var(--border-hover)":"var(--border)",backgroundColor:"var(--bg-card)",boxShadow:i?"0 0 0 1px ".concat(P,"20"):void 0},children:[(0,t.jsxs)("button",{onClick:a,className:"w-full px-5 py-4 flex items-center gap-3 text-left transition-colors hover:bg-[var(--bg-secondary)]",children:[(0,t.jsx)("div",{className:"w-11 h-11 rounded-lg flex items-center justify-center overflow-hidden flex-shrink-0",style:{backgroundColor:"".concat(P,"10")},children:r.logoUrl?(0,t.jsx)("img",{src:r.logoUrl,alt:r.name,width:24,height:24,className:"opacity-80",style:{filter:"brightness(0.5)"},onError:e=>{e.target.style.display="none"}}):(0,t.jsx)("span",{className:"text-xs font-bold",style:{color:P},children:"API"})}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"text-sm font-semibold",style:{color:"var(--text-primary)"},children:r.name}),i&&m.connected&&(0,t.jsx)("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{backgroundColor:"".concat(P,"15"),color:P},children:"Active"}),(0,t.jsx)("span",{className:"text-[10px] font-medium px-1.5 py-0.5 rounded-full",style:{backgroundColor:m.connected?"var(--status-pass-bg)":"var(--bg-secondary)",color:m.connected?"var(--status-pass-text)":"var(--text-tertiary)"},children:m.connected?"Connected":"Not configured"})]}),(0,t.jsx)("p",{className:"text-[11px] mt-0.5 truncate",style:{color:"var(--text-tertiary)"},children:r.description})]}),(0,t.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"var(--text-tertiary)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"flex-shrink-0 transition-transform duration-200",style:{transform:o?"rotate(180deg)":"rotate(0deg)"},children:(0,t.jsx)("polyline",{points:"6 9 12 15 18 9"})})]}),(0,t.jsx)("div",{style:{maxHeight:o?"600px":"0px",overflow:"hidden",transition:"max-height 250ms ease-out"},children:(0,t.jsxs)("div",{className:"px-5 pb-5 pt-1 space-y-3",children:[u||!m.connected?(0,t.jsxs)("div",{className:"space-y-2",children:[r.requiresBaseURL&&(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-[10px] font-medium uppercase tracking-wider block mb-1",style:{color:"var(--text-tertiary)"},children:"API Base URL"}),(0,t.jsx)("input",{type:"text",value:y,onChange:e=>{g(e.target.value),C(null),j(null)},placeholder:"https://api.example.com/v1",className:"w-full px-3 py-2 text-sm rounded-lg outline-none border transition-colors focus:border-[var(--accent)]",style:{borderColor:"var(--border)",backgroundColor:"var(--bg-primary)",color:"var(--text-primary)"}})]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)("input",{type:"password",value:h,onChange:e=>{x(e.target.value),C(null),j(null)},placeholder:r.keyPlaceholder,className:"flex-1 px-3 py-2 text-sm rounded-lg outline-none border transition-colors focus:border-[var(--accent)]",style:{borderColor:"var(--border)",backgroundColor:"var(--bg-primary)",color:"var(--text-primary)"},onKeyDown:e=>{"Enter"===e.key&&w()}}),(0,t.jsx)("button",{onClick:w,disabled:b||!h.trim(),className:"px-4 py-2 text-xs font-medium rounded-lg border transition-all hover:bg-[var(--bg-secondary)] disabled:opacity-40",style:{borderColor:"var(--border)",color:"var(--text-secondary)"},children:b?(0,t.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,t.jsx)("svg",{className:"animate-spin",width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,t.jsx)("circle",{cx:"12",cy:"12",r:"10",strokeDasharray:"30 70"})}),"Testing"]}):"Test"}),(0,t.jsx)("button",{onClick:U,disabled:!N&&!h.trim(),className:"px-4 py-2 text-xs font-medium rounded-lg transition-all hover:opacity-90 disabled:opacity-40",style:{backgroundColor:P,color:"#fff"},children:"Connect"}),u&&(0,t.jsx)("button",{onClick:()=>{v(!1),x(m.apiKey),g(m.baseURL||r.baseURL||""),C(null),j(null)},className:"px-3 py-2 text-xs font-medium rounded-lg border transition-colors hover:bg-[var(--bg-secondary)]",style:{borderColor:"var(--border)",color:"var(--text-secondary)"},children:"Cancel"})]}),k&&(0,t.jsx)("div",{className:"text-xs px-3 py-2 rounded-lg",style:{backgroundColor:k.ok?"var(--status-pass-bg)":"var(--status-fail-bg)",color:k.ok?"var(--status-pass-text)":"var(--status-fail-text)"},children:k.ok?"Connection verified! Click Connect to save.":"Failed: ".concat(k.error)}),r.keyUrl&&(0,t.jsxs)("p",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:["Get your key at"," ",(0,t.jsx)("a",{href:r.keyUrl,target:"_blank",rel:"noopener noreferrer",style:{color:P,textDecoration:"underline"},children:r.keyUrl.replace("https://","").split("/")[0]})]})]}):(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)("button",{onClick:()=>{x(m.apiKey),g(m.baseURL||r.baseURL||""),v(!0)},className:"flex-1 px-3 py-2 text-xs font-medium rounded-lg border transition-all hover:bg-[var(--bg-secondary)]",style:{borderColor:"var(--border)",color:"var(--text-secondary)"},children:"Update API Key"}),(0,t.jsx)("button",{onClick:()=>{p(r.id,{apiKey:"",connected:!1,models:[],defaultModel:"",secondaryModel:""}),x(""),g(r.baseURL||""),v(!1),j(null)},className:"px-3 py-2 text-xs font-medium rounded-lg border transition-colors hover:bg-[var(--status-fail-bg)]",style:{borderColor:"var(--border)",color:"var(--text-tertiary)"},children:"Disconnect"}),!i&&(0,t.jsx)("button",{onClick:n,className:"px-3 py-2 text-xs font-medium rounded-lg transition-all hover:opacity-90",style:{backgroundColor:P,color:"#fff"},children:"Set Active"})]}),m.connected&&(0,t.jsxs)("div",{className:"pt-3 border-t",style:{borderColor:"var(--border)"},children:[(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-[10px] font-medium uppercase tracking-wider block mb-1.5",style:{color:"var(--text-tertiary)"},children:"Default Model"}),(0,t.jsx)(c,{value:m.defaultModel,models:m.models.length>0?m.models:r.popularModels,onChange:e=>M("defaultModel",e)})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-[10px] font-medium uppercase tracking-wider block mb-1.5",style:{color:"var(--text-tertiary)"},children:"Fallback Model"}),(0,t.jsx)(c,{value:m.secondaryModel,models:m.models.length>0?m.models:r.popularModels,onChange:e=>M("secondaryModel",e),allowEmpty:!0})]})]}),i&&(0,t.jsxs)("div",{className:"mt-2 text-[10px] flex items-center gap-1.5",style:{color:"var(--text-tertiary)"},children:[(0,t.jsx)("div",{className:"w-1.5 h-1.5 rounded-full",style:{backgroundColor:P}}),"Using ",m.defaultModel,m.secondaryModel?" (fallback: ".concat(m.secondaryModel,")"):""]})]})]})})]})}function c(e){let{value:r,models:o,onChange:a,allowEmpty:s}=e,[i,n]=(0,l.useState)(!1),d=o.includes(r);return i||!d&&""!==r?(0,t.jsxs)("div",{className:"flex gap-1",children:[(0,t.jsx)("input",{type:"text",value:r,onChange:e=>a(e.target.value),placeholder:"model-id",className:"flex-1 px-2.5 py-1.5 text-xs rounded-lg border outline-none transition-colors focus:border-[var(--accent)]",style:{borderColor:"var(--border)",backgroundColor:"var(--bg-primary)",color:"var(--text-primary)"}}),o.length>0&&(0,t.jsx)("button",{onClick:()=>{n(!1),a(o[0])},className:"px-2 py-1.5 text-[10px] rounded-lg border transition-colors hover:bg-[var(--bg-secondary)]",style:{borderColor:"var(--border)",color:"var(--text-tertiary)"},title:"Switch to preset list",children:(0,t.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,t.jsx)("polyline",{points:"6 9 12 15 18 9"})})})]}):(0,t.jsxs)("div",{className:"flex gap-1",children:[(0,t.jsxs)("select",{value:r,onChange:e=>a(e.target.value),className:"flex-1 px-2.5 py-1.5 text-xs rounded-lg border outline-none transition-colors cursor-pointer",style:{borderColor:"var(--border)",backgroundColor:"var(--bg-primary)",color:"var(--text-primary)"},children:[s&&(0,t.jsx)("option",{value:"",children:"None"}),o.map(e=>(0,t.jsx)("option",{value:e,children:e},e))]}),(0,t.jsx)("button",{onClick:()=>n(!0),className:"px-2 py-1.5 text-[10px] rounded-lg border transition-colors hover:bg-[var(--bg-secondary)]",style:{borderColor:"var(--border)",color:"var(--text-tertiary)"},title:"Enter custom model ID",children:"✏️"})]})}},4269:(e,r,o)=>{"use strict";o.d(r,{cn:()=>a});var t=o(2821),l=o(5889);function a(){for(var e=arguments.length,r=Array(e),o=0;o<e;o++)r[o]=arguments[o];return(0,l.QP)((0,t.$)(r))}},5307:(e,r,o)=>{"use strict";o.d(r,{b:()=>s});var t=o(5155),l=o(2115),a=o(4269);function s(e){let{width:r=40,height:o=40,x:s=-1,y:i=-1,strokeDasharray:n="0",squares:d,className:c,...p}=e,m=(0,l.useId)();return(0,t.jsxs)("svg",{"aria-hidden":"true",className:(0,a.cn)("pointer-events-none absolute inset-0 h-full w-full fill-gray-400/30 stroke-gray-400/30",c),...p,children:[(0,t.jsx)("defs",{children:(0,t.jsx)("pattern",{id:m,width:r,height:o,patternUnits:"userSpaceOnUse",x:s,y:i,children:(0,t.jsx)("path",{d:"M.5 ".concat(o,"V.5H").concat(r),fill:"none",strokeDasharray:n})})}),(0,t.jsx)("rect",{width:"100%",height:"100%",strokeWidth:0,fill:"url(#".concat(m,")")}),d&&(0,t.jsx)("svg",{x:s,y:i,className:"overflow-visible",children:d.map(e=>{let[l,a]=e;return(0,t.jsx)("rect",{strokeWidth:"0",width:r-1,height:o-1,x:l*r+1,y:a*o+1},"".concat(l,"-").concat(a))})})]})}},7669:(e,r,o)=>{"use strict";o.d(r,{P:()=>c});var t=o(2115),l=o(3362);let a="qa-llm-config",s={apiKey:"",baseURL:"",defaultModel:"",secondaryModel:"",models:[],connected:!1};function i(){let e={};for(let r of l.Pj)e[r.id]={...s,baseURL:r.baseURL||""};return{activeProvider:null,providers:e}}function n(){try{let r=localStorage.getItem(a);if(!r)return i();let o=JSON.parse(r);if(o.provider&&o.apiKey&&!o.providers){let e=i();return{...e,activeProvider:null,providers:{...e.providers,google:{...s,apiKey:o.apiKey,connected:!0}}}}let t=i(),n={...t,...o,providers:{...t.providers}};for(let r of l.Pj){var e;let t=null==(e=o.providers)?void 0:e[r.id];n.providers[r.id]={...s,baseURL:r.baseURL||"",...t}}return n}catch(e){return i()}}function d(e){try{localStorage.setItem(a,JSON.stringify(e))}catch(e){}}function c(){let[e,r]=(0,t.useState)(i),[o,l]=(0,t.useState)(!1);(0,t.useEffect)(()=>{r(n()),l(!0)},[]);let a=(0,t.useCallback)((e,o)=>{let t=n(),l={...t,providers:{...t.providers,[e]:{...t.providers[e],...o}}};d(l),r(l)},[]),s=(0,t.useCallback)(e=>{let o={...n(),activeProvider:e};d(o),r(o)},[]),c=e.activeProvider?e.providers[e.activeProvider]:null,p=o&&!!c&&c.apiKey.length>0&&c.connected;return{config:e,loaded:o,isConnected:p,activeProvider:c,activeProviderId:e.activeProvider,updateProvider:a,setActiveProvider:s}}}},e=>{e.O(0,[909,441,255,358],()=>e(e.s=2850)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[305],{63:(e,t,r)=>{"use strict";var a=r(7260);r.o(a,"useParams")&&r.d(t,{useParams:function(){return a.useParams}}),r.o(a,"usePathname")&&r.d(t,{usePathname:function(){return a.usePathname}}),r.o(a,"useRouter")&&r.d(t,{useRouter:function(){return a.useRouter}})},265:(e,t,r)=>{"use strict";r.d(t,{Vx:()=>n,p1:()=>o});var a=r(5155),s=r(2115);let l=(0,s.createContext)(null);function o(){let e=(0,s.useContext)(l);if(!e)throw Error("useProgress must be used within ProgressProvider");return e}function n(e){let{children:t}=e,[r,o]=(0,s.useState)(0),[n,i]=(0,s.useState)(""),[c,d]=(0,s.useState)(!1),u=(0,s.useRef)(null),x=(0,s.useRef)(null),h=(0,s.useCallback)(()=>{u.current&&(clearInterval(u.current),u.current=null),x.current&&(clearTimeout(x.current),x.current=null)},[]),p=(0,s.useCallback)(()=>{d(!1),o(0),i("")},[]),m=(0,s.useCallback)(e=>{h(),o(0),i(e||""),d(!0),u.current=setInterval(()=>{o(e=>e>=90?(u.current&&clearInterval(u.current),u.current=null,90):e+15*Math.random())},300),x.current=setTimeout(()=>{p()},8e3)},[h,p]),v=(0,s.useCallback)((e,t)=>{o(Math.min(95,e)),t&&i(t)},[]),g=(0,s.useCallback)(e=>{h(),o(100),e&&i(e),setTimeout(()=>{p()},500)},[h,p]),b=(0,s.useCallback)(()=>{h(),p()},[h,p]);return(0,s.useEffect)(()=>()=>h(),[h]),(0,a.jsxs)(l.Provider,{value:{startProgress:m,updateProgress:v,completeProgress:g,cancelProgress:b,isProgressing:c},children:[t,(0,a.jsxs)("div",{className:"fixed bottom-0 left-0 right-0 z-[600] transition-all duration-300 ease-out",style:{opacity:+!!c,transform:c?"translateY(0)":"translateY(100%)",pointerEvents:c?"auto":"none"},children:[(0,a.jsx)("div",{className:"h-1 w-full",style:{backgroundColor:"var(--bg-secondary)"},children:(0,a.jsx)("div",{className:"h-full transition-all duration-200 ease-out",style:{width:"".concat(r,"%"),backgroundColor:r>=100?"var(--status-pass-text)":"var(--accent)",boxShadow:r>=100?"0 0 10px var(--status-pass-text)":"none"}})}),n&&(0,a.jsxs)("div",{className:"flex items-center justify-center py-2 px-4 text-xs font-medium cursor-pointer",onClick:b,style:{backgroundColor:"var(--bg-card)",color:r>=100?"var(--status-pass-text)":"var(--text-secondary)",borderTop:"1px solid var(--border)"},children:[r>=100&&(0,a.jsx)("svg",{className:"mr-2",width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:(0,a.jsx)("path",{d:"M2 6l3 3 5-5",stroke:"var(--status-pass-text)",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),n]})]})]})}},854:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var a=r(2115);let s="qa-auth";function l(e){try{sessionStorage.setItem(s,JSON.stringify(e))}catch(e){}}function o(){let[e,t]=(0,a.useState)({name:"",isLoggedIn:!1}),[r,o]=(0,a.useState)(!1);(0,a.useEffect)(()=>{t(function(){try{let e=sessionStorage.getItem(s);if(!e)return{name:"",isLoggedIn:!1};return JSON.parse(e)}catch(e){return{name:"",isLoggedIn:!1}}}()),o(!0)},[]);let n=(0,a.useCallback)(e=>{let r={name:e,isLoggedIn:!0};l(r),t(r)},[]),i=(0,a.useCallback)(()=>{let e={name:"",isLoggedIn:!1};l(e),t(e)},[]);return{...e,loaded:r,login:n,logout:i}}},8609:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>M});var a=r(5155),s=r(2115),l=r(63),o=r(3882),n=r(2619),i=r.n(n),c=r(854),d=r(8566);let u=["https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_11.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_12.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_13.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_14.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_15.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_16.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_17.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_18.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_19.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_20.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_21.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_22.png"],x=["https://i.pinimg.com/736x/ed/74/06/ed74063ade6d66fce2ca19acbe74babc.jpg","https://i.pinimg.com/736x/8c/6d/56/8c6d563311f0917d45d1f2ce5d7c1a2d.jpg","https://i.pinimg.com/736x/86/b8/be/86b8bea1c772cf5c540e6f01e6acce59.jpg","https://i.pinimg.com/736x/78/d4/b1/78d4b1787a4fd23c2a8d21e4fbbc016f.jpg","https://i.pinimg.com/1200x/87/de/e6/87dee6d33b04f1df28bc85702ee12d4b.jpg","https://i.pinimg.com/1200x/3b/e3/95/3be395c4a94705f95e0603afb04f9d56.jpg","https://media.licdn.com/dms/image/v2/D5603AQHBu4wrzFWoTw/profile-displayphoto-crop_800_800/B56Zq.Sy6LKsAI-/0/1764129191465?e=1782345600&v=beta&t=79y6xLivwcpvwy53sy1TuVopK4FMp6O8uAu7QxlIxDo"],h=["QA Engineer","QA Lead","Developer","Designer","Manager"];function p(e,t){let r=parseInt(e.replace("#",""),16),a=Math.min(255,(r>>16)+Math.round((255-(r>>16))*t)),s=Math.min(255,(r>>8&255)+Math.round((255-(r>>8&255))*t)),l=Math.min(255,(255&r)+Math.round((255-(255&r))*t));return"#".concat((a<<16|s<<8|l).toString(16).padStart(6,"0"))}function m(e){let{profile:t,initials:r,onSetName:l,onSetBannerColor:o,onSetAvatarUrl:n,onSetRole:i}=e,[c,m]=(0,s.useState)(!1),[v,g]=(0,s.useState)(!1),[b,f]=(0,s.useState)(!1),[j,y]=(0,s.useState)(t.name),[k,w]=(0,s.useState)(t.role||""),C=(0,s.useRef)(null),N=(0,s.useRef)(null),S=(0,s.useRef)(null);(0,s.useEffect)(()=>{let e=e=>{C.current&&!C.current.contains(e.target)&&m(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]),(0,s.useEffect)(()=>{v&&N.current&&N.current.focus()},[v]),(0,s.useEffect)(()=>{b&&S.current&&S.current.focus()},[b]);let M=()=>{l(j.trim()),g(!1)},L=()=>{i(k.trim()),f(!1)},E=!!t.avatarUrl;return(0,a.jsxs)("div",{className:"relative",ref:C,children:[(0,a.jsx)("button",{onClick:()=>m(!c),className:"w-9 h-9 rounded-full flex items-center justify-center text-xs font-medium overflow-hidden border-2 transition-all hover:scale-105",style:{borderColor:c?"var(--accent)":"transparent",boxShadow:c?"0 0 0 2px var(--accent), 0 2px 8px rgba(0,0,0,0.1)":"0 1px 3px rgba(0,0,0,0.08)"},children:E?(0,a.jsx)("img",{src:t.avatarUrl,alt:"Avatar",className:"w-full h-full object-cover"}):(0,a.jsx)("span",{className:"w-full h-full flex items-center justify-center",style:{backgroundColor:t.bannerColor,color:"#fff"},children:r})}),c&&(0,a.jsxs)("div",{className:"absolute right-0 top-full mt-2 w-80 border z-50 overflow-hidden",style:{backgroundColor:"var(--bg-card)",borderColor:"var(--border)",borderRadius:"var(--radius-lg)",boxShadow:"var(--shadow-xl)",animation:"fadeIn 150ms ease-out"},children:[(0,a.jsxs)("div",{className:"relative px-5 pt-5 pb-4",style:{background:"linear-gradient(135deg, ".concat(t.bannerColor," 0%, ").concat(p(t.bannerColor,.4)," 50%, ").concat(t.bannerColor," 100%)")},children:[(0,a.jsx)("div",{className:"absolute inset-0 opacity-10",style:{backgroundImage:"radial-gradient(circle at 20% 50%, white 1px, transparent 1px), radial-gradient(circle at 80% 20%, white 1px, transparent 1px)",backgroundSize:"30px 30px"}}),(0,a.jsxs)("div",{className:"relative flex items-end gap-4",children:[(0,a.jsxs)("div",{className:"relative group",children:[(0,a.jsx)("div",{className:"w-16 h-16 rounded-xl overflow-hidden border-3 flex-shrink-0",style:{borderColor:"rgba(255,255,255,0.3)",boxShadow:"0 4px 12px rgba(0,0,0,0.2)"},children:E?(0,a.jsx)("img",{src:t.avatarUrl,alt:"Avatar",className:"w-full h-full object-cover"}):(0,a.jsx)("div",{className:"w-full h-full flex items-center justify-center text-xl font-bold",style:{backgroundColor:t.bannerColor,color:"#fff"},children:r})}),(0,a.jsx)("div",{className:"absolute inset-0 rounded-xl flex items-center justify-center opacity-0 group-hover:opacity-100 cursor-pointer transition-opacity",style:{backgroundColor:"rgba(0,0,0,0.4)"},onClick:e=>{var t;e.stopPropagation(),null==(t=document.getElementById("avatar-gallery"))||t.scrollIntoView({behavior:"smooth"})},children:(0,a.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"white",children:(0,a.jsx)("path",{d:"M14 11V14H2V11H0V14C0 15.1.9 16 2 16H14C15.1 16 16 15.1 16 14V11H14ZM7 9L4.5 6.5L3 8L8 13L13 8L11.5 6.5L9 9V0H7V9Z"})})})]}),(0,a.jsxs)("div",{className:"flex-1 min-w-0 pb-1",children:[v?(0,a.jsx)("input",{ref:N,value:j,onChange:e=>y(e.target.value),onBlur:M,onKeyDown:e=>{"Enter"===e.key&&M(),"Escape"===e.key&&g(!1)},className:"w-full bg-white/20 backdrop-blur-sm outline-none text-white text-sm font-semibold px-2 py-1 rounded placeholder-white/50",placeholder:"Your name..."}):(0,a.jsx)("div",{className:"text-sm font-semibold text-white cursor-pointer hover:opacity-80 truncate",onClick:()=>{y(t.name),g(!0)},children:t.name||"Click to set name"}),(0,a.jsx)("div",{className:"text-[11px] mt-0.5 px-2 py-0.5 rounded-full inline-block cursor-pointer hover:opacity-80",style:{backgroundColor:"rgba(255,255,255,0.15)",color:"rgba(255,255,255,0.9)"},onClick:()=>{w(t.role||""),f(!0)},children:b?(0,a.jsx)("input",{ref:S,value:k,onChange:e=>w(e.target.value),onBlur:L,onKeyDown:e=>{"Enter"===e.key&&L(),"Escape"===e.key&&f(!1)},className:"bg-transparent outline-none text-white text-[11px] w-24 placeholder-white/50",placeholder:"Your role..."}):t.role||"Set role..."})]})]})]}),(0,a.jsxs)("div",{className:"px-4 pt-3 pb-2",children:[(0,a.jsx)("label",{className:"text-[10px] font-semibold uppercase tracking-wider block mb-2",style:{color:"var(--text-tertiary)"},children:"Role"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-1.5",children:h.map(e=>(0,a.jsx)("button",{onClick:()=>i(e),className:"px-2 py-1 text-[10px] rounded-md border transition-colors",style:{borderColor:t.role===e?"var(--accent)":"var(--border)",color:t.role===e?"var(--accent)":"var(--text-secondary)",backgroundColor:t.role===e?"var(--accent)10":"transparent",fontWeight:t.role===e?600:400},children:e},e))})]}),(0,a.jsxs)("div",{id:"avatar-gallery",className:"px-4 pt-2 pb-3",children:[(0,a.jsx)("label",{className:"text-[10px] font-semibold uppercase tracking-wider block mb-2",style:{color:"var(--text-tertiary)"},children:"Choose Avatar"}),(0,a.jsx)("div",{className:"grid grid-cols-6 gap-2",children:u.map((e,r)=>(0,a.jsx)("button",{onClick:()=>n(e),className:"w-10 h-10 rounded-lg overflow-hidden border-2 transition-all hover:scale-110 hover:shadow-md",style:{borderColor:t.avatarUrl===e?"var(--accent)":"transparent",boxShadow:t.avatarUrl===e?"0 0 0 2px var(--accent)":"none"},children:(0,a.jsx)("img",{src:e,alt:"Avatar ".concat(r+11),className:"w-full h-full object-cover",loading:"lazy"})},e))}),(0,a.jsx)("div",{className:"grid grid-cols-6 gap-2 mt-2",children:x.map((e,r)=>(0,a.jsx)("button",{onClick:()=>n(e),className:"w-10 h-10 rounded-lg overflow-hidden border-2 transition-all hover:scale-110 hover:shadow-md",style:{borderColor:t.avatarUrl===e?"var(--accent)":"transparent",boxShadow:t.avatarUrl===e?"0 0 0 2px var(--accent)":"none"},children:(0,a.jsx)("img",{src:e,alt:"Avatar ".concat(r+23),className:"w-full h-full object-cover",loading:"lazy"})},e))})]}),(0,a.jsxs)("div",{className:"px-4 pb-4",children:[(0,a.jsx)("label",{className:"text-[10px] font-semibold uppercase tracking-wider block mb-2",style:{color:"var(--text-tertiary)"},children:"Banner Color"}),(0,a.jsx)("div",{className:"grid grid-cols-8 gap-1.5",children:d.T7.map(e=>(0,a.jsx)("button",{onClick:()=>o(e),className:"w-6 h-6 rounded-full transition-transform hover:scale-110 relative overflow-hidden",style:{background:"linear-gradient(135deg, ".concat(function(e,t){let r=parseInt(e.replace("#",""),16),a=Math.max(0,(r>>16)-Math.round((r>>16)*.3)),s=Math.max(0,(r>>8&255)-Math.round((r>>8&255)*.3)),l=Math.max(0,(255&r)-Math.round((255&r)*t));return"#".concat((a<<16|s<<8|l).toString(16).padStart(6,"0"))}(e,.3)," 0%, ").concat(e," 50%, ").concat(p(e,.3)," 100%)"),outline:t.bannerColor!==e||t.avatarUrl?"none":"2px solid var(--accent)",outlineOffset:2},children:(0,a.jsx)("div",{className:"absolute inset-0",style:{background:"linear-gradient(135deg, transparent 0%, rgba(255,255,255,0.3) 50%, transparent 100%)",animation:"shimmer 2s ease-in-out infinite"}})},e))})]}),(0,a.jsxs)("div",{className:"px-4 py-2.5 border-t flex items-center justify-between",style:{borderColor:"var(--border)",backgroundColor:"var(--bg-secondary)"},children:[(0,a.jsx)("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:"Profile data stored locally"}),(0,a.jsx)("button",{onClick:()=>m(!1),className:"text-[10px] font-medium px-2 py-0.5 rounded",style:{color:"var(--accent)"},children:"Done"})]})]})]})}function v(e){let{open:t,onClose:r,profile:l,initials:o,stats:n}=e,[i,c]=(0,s.useState)(!1);if(!t)return null;let d="My Test Lah!:\n".concat(n.projects," Projects | ").concat(n.testCases," Cases | ").concat(n.passRate,"% Pass Rate"),u=async()=>{if(navigator.share)try{await navigator.share({title:"Test Lah! Stats",text:d})}catch(e){}else navigator.clipboard.writeText(d)};return(0,a.jsx)("div",{className:"fixed inset-0 z-[300] flex items-center justify-center",style:{backgroundColor:"rgba(0,0,0,0.3)",animation:"fadeIn 150ms ease-out"},onClick:r,children:(0,a.jsxs)("div",{className:"w-72 mx-4",onClick:e=>e.stopPropagation(),style:{perspective:"1000px"},children:[(0,a.jsxs)("div",{className:"relative w-full",style:{transformStyle:"preserve-3d",transform:i?"rotateY(180deg)":"rotateY(0)",transition:"transform 0.5s ease",height:"380px"},children:[(0,a.jsxs)("div",{className:"absolute inset-0 rounded-xl overflow-hidden border",style:{backfaceVisibility:"hidden",borderColor:"var(--border)",boxShadow:"var(--shadow-lg)"},children:[(0,a.jsx)("div",{className:"absolute inset-0",style:{background:"linear-gradient(160deg, ".concat(function(e,t){let r=parseInt(e.replace("#",""),16),a=Math.max(0,(r>>16)-Math.round((r>>16)*.25)),s=Math.max(0,(r>>8&255)-Math.round((r>>8&255)*t)),l=Math.max(0,(255&r)-Math.round((255&r)*t));return"#".concat((a<<16|s<<8|l).toString(16).padStart(6,"0"))}(l.bannerColor,.25)," 0%, ").concat(l.bannerColor," 50%, ").concat(function(e,t){let r=parseInt(e.replace("#",""),16),a=Math.min(255,(r>>16)+Math.round((255-(r>>16))*.2)),s=Math.min(255,(r>>8&255)+Math.round((255-(r>>8&255))*t)),l=Math.min(255,(255&r)+Math.round((255-(255&r))*t));return"#".concat((a<<16|s<<8|l).toString(16).padStart(6,"0"))}(l.bannerColor,.2)," 100%)")}}),(0,a.jsxs)("div",{className:"relative h-full flex flex-col items-center justify-center px-4",children:[(0,a.jsx)("div",{className:"w-20 h-20 rounded-xl overflow-hidden border-2 mb-3",style:{borderColor:"rgba(255,255,255,0.3)"},children:l.avatarUrl?(0,a.jsx)("img",{src:l.avatarUrl,alt:"Avatar",className:"w-full h-full object-cover"}):(0,a.jsx)("div",{className:"w-full h-full flex items-center justify-center text-2xl font-bold",style:{backgroundColor:"rgba(0,0,0,0.2)",color:"#fff"},children:o})}),(0,a.jsx)("h3",{className:"text-base font-semibold text-white drop-shadow-sm",children:l.name||"Anonymous Tester"}),(0,a.jsx)("p",{className:"text-xs mt-0.5 text-white/70",children:l.role||"No role set"}),(0,a.jsxs)("div",{className:"flex items-center gap-4 mt-4",children:[(0,a.jsx)(g,{value:n.projects,label:"Projects"}),(0,a.jsx)("div",{className:"w-px h-6 bg-white/20"}),(0,a.jsx)(g,{value:n.testCases,label:"Cases"}),(0,a.jsx)("div",{className:"w-px h-6 bg-white/20"}),(0,a.jsx)(g,{value:"".concat(n.passRate,"%"),label:"Pass"})]}),(0,a.jsx)("button",{onClick:()=>c(!0),className:"mt-5 px-4 py-1.5 text-[11px] font-medium rounded-full transition-colors",style:{backgroundColor:"rgba(255,255,255,0.2)",color:"#fff"},children:"View stats"})]})]}),(0,a.jsx)("div",{className:"absolute inset-0 rounded-xl overflow-hidden border",style:{backfaceVisibility:"hidden",transform:"rotateY(180deg)",borderColor:"var(--border)",backgroundColor:"var(--bg-card)",boxShadow:"var(--shadow-lg)"},children:(0,a.jsxs)("div",{className:"h-full flex flex-col",children:[(0,a.jsxs)("div",{className:"px-4 py-3 border-b flex items-center justify-between",style:{borderColor:"var(--border)"},children:[(0,a.jsx)("span",{className:"text-xs font-semibold",style:{color:"var(--text-primary)"},children:"Statistics"}),(0,a.jsx)("button",{onClick:()=>c(!1),className:"text-[10px] px-2 py-0.5 rounded border transition-colors hover:bg-[var(--bg-secondary)]",style:{color:"var(--text-tertiary)",borderColor:"var(--border)"},children:"Back"})]}),(0,a.jsxs)("div",{className:"flex-1 overflow-auto p-4 space-y-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-1.5",children:[(0,a.jsx)("span",{className:"text-[10px] uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"Pass Rate"}),(0,a.jsxs)("span",{className:"text-sm font-semibold",style:{color:n.passRate>=80?"var(--status-pass-text)":n.passRate>=50?"var(--status-skip-text)":"var(--status-fail-text)"},children:[n.passRate,"%"]})]}),(0,a.jsx)("div",{className:"h-1.5 rounded-full overflow-hidden",style:{backgroundColor:"var(--bg-secondary)"},children:(0,a.jsx)("div",{className:"h-full rounded-full",style:{width:"".concat(n.passRate,"%"),backgroundColor:n.passRate>=80?"var(--status-pass-text)":n.passRate>=50?"var(--status-skip-text)":"var(--status-fail-text)"}})})]}),(0,a.jsxs)("div",{className:"grid grid-cols-4 gap-1.5",children:[(0,a.jsx)(b,{label:"Pass",value:n.pass,color:"var(--status-pass-text)"}),(0,a.jsx)(b,{label:"Fail",value:n.fail,color:"var(--status-fail-text)"}),(0,a.jsx)(b,{label:"Skip",value:n.skip,color:"var(--status-skip-text)"}),(0,a.jsx)(b,{label:"New",value:n.untested})]}),(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(f,{label:"Test Cases",value:n.testCases}),(0,a.jsx)(f,{label:"Flow Nodes",value:n.nodes}),(0,a.jsx)(f,{label:"Edges",value:n.edges}),(0,a.jsx)(f,{label:"Projects",value:n.projects})]}),(0,a.jsxs)("button",{onClick:u,className:"w-full px-3 py-2 text-[11px] font-medium rounded-lg border transition-colors hover:bg-[var(--bg-secondary)] flex items-center justify-center gap-1.5",style:{borderColor:"var(--border)",color:"var(--text-secondary)"},children:[(0,a.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,a.jsx)("path",{d:"M4 12v8a2 2 0 002 2h12a2 2 0 002-2v-8"}),(0,a.jsx)("polyline",{points:"16 6 12 2 8 6"}),(0,a.jsx)("line",{x1:"12",y1:"2",x2:"12",y2:"15"})]}),"Share"]})]})]})})]}),(0,a.jsx)("button",{onClick:r,className:"w-full mt-2 px-3 py-2 text-[11px] font-medium rounded-lg border transition-colors hover:bg-[var(--bg-secondary)]",style:{borderColor:"var(--border)",color:"var(--text-secondary)",backgroundColor:"var(--bg-card)"},children:"Close"})]})})}function g(e){let{value:t,label:r}=e;return(0,a.jsxs)("div",{className:"text-center",children:[(0,a.jsx)("div",{className:"text-sm font-semibold text-white",children:t}),(0,a.jsx)("div",{className:"text-[9px] uppercase tracking-wider text-white/60",children:r})]})}function b(e){let{label:t,value:r,color:s}=e;return(0,a.jsxs)("div",{className:"py-2 rounded-lg text-center",style:{backgroundColor:"var(--bg-secondary)"},children:[(0,a.jsx)("div",{className:"text-sm font-medium",style:{color:null!=s?s:"var(--text-secondary)"},children:r}),(0,a.jsx)("div",{className:"text-[8px] uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:t})]})}function f(e){let{label:t,value:r}=e;return(0,a.jsxs)("div",{className:"flex items-center justify-between px-3 py-2 rounded-lg",style:{backgroundColor:"var(--bg-secondary)"},children:[(0,a.jsx)("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:t}),(0,a.jsx)("span",{className:"text-xs font-medium",style:{color:"var(--text-primary)"},children:r})]})}var j=r(265);function y(){let{projects:e,activeProject:t,activeProjectId:r,profile:n,profileInitials:d,setProfileName:u,setProfileBannerColor:x,setProfileAvatarUrl:h,setProfileRole:p}=(0,o.M)(),{logout:g}=(0,c.A)(),b=(0,l.useRouter)(),f=(0,l.usePathname)(),{startProgress:y,completeProgress:w}=(0,j.p1)(),[C,N]=(0,s.useState)(!1),[S,M]=(0,s.useState)(!1),L=Object.values(e),E=(0,s.useMemo)(()=>{let e=L.flatMap(e=>Object.values(e.testCases).flat()),t=e.length,r=e.filter(e=>"pass"===e.status).length,a=e.filter(e=>"fail"===e.status).length,s=e.filter(e=>"skip"===e.status).length,l=e.filter(e=>"untested"===e.status).length,o=L.reduce((e,t)=>e+t.flows.length,0),n=L.reduce((e,t)=>{var r;return e+(null!=(r=t.edges)?r:[]).length},0),i=t-s,c=i>0?Math.round(r/i*100):0;return{projects:L.length,testCases:t,passRate:c,nodes:o,edges:n,pass:r,fail:a,skip:s,untested:l}},[L]),P=f.startsWith("/integrations")?"integrations":"projects";return(0,a.jsxs)("header",{className:"flex flex-col border-b flex-shrink-0 relative",style:{backgroundColor:"var(--bg-card)",borderColor:"var(--border)"},children:[(0,a.jsx)("div",{className:"absolute inset-0 overflow-hidden flex items-center justify-center pointer-events-none group/duck",children:(0,a.jsx)("img",{src:"https://static.vecteezy.com/system/resources/thumbnails/067/162/149/small/cute-duck-meme-sticker-transparent-cute-illustration-free-png.png",alt:"",className:"h-[85%] object-contain select-none transition-all duration-300 group-hover/duck:scale-110 group-hover/duck:opacity-[0.15] cursor-pointer",style:{opacity:.09,pointerEvents:"auto"},onClick:()=>b.push("/projects"),title:"Quack! \uD83E\uDD86"})}),(0,a.jsxs)("div",{className:"relative z-10 flex items-center justify-between px-6 py-2.5",children:[(0,a.jsx)("div",{className:"flex items-center gap-3",children:(0,a.jsxs)(i(),{href:"/projects",className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:"w-8 h-8 rounded-md overflow-hidden bg-white flex-shrink-0",style:{boxShadow:"0 1px 4px rgba(0,0,0,0.08)"},children:(0,a.jsx)("img",{src:"https://static.vecteezy.com/system/resources/thumbnails/067/162/149/small/cute-duck-meme-sticker-transparent-cute-illustration-free-png.png",alt:"Logo",width:32,height:32,className:"w-full h-full object-contain"})}),(0,a.jsx)("span",{className:"shimmer-text text-sm font-bold tracking-wide select-none",style:{background:"linear-gradient(90deg, var(--text-primary) 0%, var(--text-primary) 40%, #FFD54F 50%, var(--text-primary) 60%, var(--text-primary) 100%)",backgroundSize:"200% 100%",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent",backgroundClip:"text",animation:"shimmerText 3s ease-in-out infinite"},children:"Test Lah!"})]})}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("button",{onClick:()=>N(!0),className:"hidden md:block px-3 py-1.5 text-[11px] font-medium rounded-md border transition-colors hover:bg-[var(--bg-secondary)]",style:{borderColor:"var(--border)",color:"var(--text-secondary)"},children:"My Card"}),(0,a.jsx)("div",{className:"hidden md:block w-px h-5 mx-0.5",style:{backgroundColor:"var(--border)"}}),(0,a.jsx)("div",{className:"relative z-[60]",children:(0,a.jsx)(m,{profile:n,initials:d,onSetName:u,onSetBannerColor:x,onSetAvatarUrl:h,onSetRole:p})}),(0,a.jsx)("button",{onClick:()=>{M(!0)},className:"w-8 h-8 flex items-center justify-center text-xs rounded-md border transition-colors hover:bg-[var(--bg-secondary)] hover:border-[var(--status-fail-text)]",style:{borderColor:"var(--border)",color:"var(--text-tertiary)"},title:"Logout",children:(0,a.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:(0,a.jsx)("path",{d:"M5 2H3.5A1.5 1.5 0 002 3.5v7A1.5 1.5 0 003.5 12H5M9 10l3-3-3-3M6 7h6",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"})})})]})]}),(0,a.jsxs)("div",{className:"relative z-10 flex items-center gap-1 px-6 pb-1.5",children:[(0,a.jsx)(k,{label:"All Projects",href:"/projects",icon:(0,a.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 14 14",fill:"none",children:[(0,a.jsx)("rect",{x:"1",y:"1",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.2",fill:"none"}),(0,a.jsx)("rect",{x:"8",y:"1",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.2",fill:"none"}),(0,a.jsx)("rect",{x:"1",y:"8",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.2",fill:"none"}),(0,a.jsx)("rect",{x:"8",y:"8",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.2",fill:"none"})]}),active:"projects"===P}),(0,a.jsx)(k,{label:"Integrations",href:"/integrations",icon:(0,a.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 14 14",fill:"none",children:[(0,a.jsx)("circle",{cx:"5",cy:"5",r:"2.5",stroke:"currentColor",strokeWidth:"1.2",fill:"none"}),(0,a.jsx)("circle",{cx:"9",cy:"9",r:"2.5",stroke:"currentColor",strokeWidth:"1.2",fill:"none"}),(0,a.jsx)("path",{d:"M7.5 5.5L6.5 8.5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]}),active:"integrations"===P})]}),(0,a.jsx)(v,{open:C,onClose:()=>N(!1),profile:n,initials:d,stats:E}),S&&(0,a.jsx)("div",{className:"fixed inset-0 z-[400] flex items-center justify-center",style:{backgroundColor:"rgba(0,0,0,0.3)",animation:"fadeIn 150ms ease-out"},onClick:()=>M(!1),children:(0,a.jsxs)("div",{className:"w-full max-w-sm mx-4 rounded-xl border overflow-hidden",style:{backgroundColor:"var(--bg-card)",borderColor:"var(--border)",boxShadow:"var(--shadow-lg)",animation:"fadeInUp 200ms ease-out"},onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("div",{className:"px-6 pt-6 pb-4 text-center",children:[(0,a.jsx)("div",{className:"w-14 h-14 mx-auto mb-4 rounded-full flex items-center justify-center",style:{backgroundColor:"var(--status-skip-bg)"},children:(0,a.jsxs)("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",stroke:"var(--status-skip-text)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,a.jsx)("path",{d:"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4"}),(0,a.jsx)("polyline",{points:"16 17 21 12 16 7"}),(0,a.jsx)("line",{x1:"21",y1:"12",x2:"9",y2:"12"})]})}),(0,a.jsx)("h3",{className:"text-base font-semibold mb-2",style:{color:"var(--text-primary)"},children:"Mau Keluar? Sedekahnya mana??"}),(0,a.jsx)("p",{className:"text-xs leading-relaxed",style:{color:"var(--text-tertiary)"},children:"Sebelum keluar, mungkin bisa traktir developer secangkir kopi? ☕"})]}),(0,a.jsxs)("div",{className:"px-6 pb-5 flex gap-2",children:[(0,a.jsx)("button",{onClick:()=>M(!1),className:"flex-1 px-3 py-2.5 text-xs font-medium rounded-lg border transition-colors hover:bg-[var(--bg-secondary)]",style:{borderColor:"var(--border)",color:"var(--text-secondary)"},children:"Batal"}),(0,a.jsx)("button",{onClick:()=>{M(!1),y("Logging out..."),g(),setTimeout(()=>{w("Logged out!"),b.push("/login")},500)},className:"flex-1 px-3 py-2.5 text-xs font-medium rounded-lg transition-opacity hover:opacity-80",style:{backgroundColor:"var(--status-fail-text)",color:"#fff"},children:"Keluar"})]})]})})]})}function k(e){let{label:t,icon:r,active:s,href:l,badge:o}=e;return(0,a.jsxs)(i(),{href:l,className:"flex items-center gap-2 px-3 py-2 text-xs font-medium rounded-t-md transition-colors relative",style:{color:s?"var(--accent)":"var(--text-tertiary)",backgroundColor:s?"var(--bg-secondary)":"transparent"},children:[r,t,o&&(0,a.jsx)("span",{className:"ml-1 px-1.5 py-0.5 text-[9px] font-semibold rounded-full leading-none",style:{backgroundColor:s?"var(--accent)":"var(--bg-secondary)",color:s?"#fff":"var(--text-tertiary)"},children:o}),s&&(0,a.jsx)("div",{className:"absolute bottom-0 left-2 right-2 h-0.5 rounded-t-full",style:{backgroundColor:"var(--accent)"}})]})}var w=r(7065);function C(e){let{children:t}=e,r=(0,l.useRouter)(),{isLoggedIn:o,loaded:n}=(0,c.A)();return((0,s.useEffect)(()=>{n&&!o&&r.replace("/login")},[n,o,r]),n)?o?(0,a.jsx)(a.Fragment,{children:t}):null:(0,a.jsx)("div",{className:"h-screen flex items-center justify-center",style:{backgroundColor:"var(--bg-primary)"},children:(0,a.jsx)("div",{className:"text-sm",style:{color:"var(--text-tertiary)"},children:"Loading..."})})}function N(){let{undo:e,redo:t,canUndo:r,canRedo:a}=(0,o.M)();return(0,s.useEffect)(()=>{let s=s=>{(s.ctrlKey||s.metaKey)&&"z"===s.key&&!s.shiftKey&&(s.preventDefault(),r&&e()),(s.ctrlKey||s.metaKey)&&("Z"===s.key||"z"===s.key&&s.shiftKey)&&(s.preventDefault(),a&&t()),(s.ctrlKey||s.metaKey)&&"y"===s.key&&(s.preventDefault(),a&&t())};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[e,t,r,a]),null}function S(e){let{children:t}=e,{dialog:r}=(0,o.M)();return(0,a.jsxs)(a.Fragment,{children:[t,(0,a.jsx)(w.q,{dialog:r})]})}function M(e){let{children:t}=e;return(0,a.jsx)(C,{children:(0,a.jsx)(o.q,{children:(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"h-screen flex flex-col",style:{backgroundColor:"var(--bg-primary)"},children:[(0,a.jsx)(N,{}),(0,a.jsx)(y,{}),(0,a.jsx)("div",{className:"flex-1 min-h-0",children:t})]})})})})}},9715:(e,t,r)=>{Promise.resolve().then(r.bind(r,8609))}},e=>{e.O(0,[619,882,441,255,358],()=>e(e.s=9715)),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[305],{63:(e,t,r)=>{"use strict";var a=r(7260);r.o(a,"useParams")&&r.d(t,{useParams:function(){return a.useParams}}),r.o(a,"usePathname")&&r.d(t,{usePathname:function(){return a.usePathname}}),r.o(a,"useRouter")&&r.d(t,{useRouter:function(){return a.useRouter}})},265:(e,t,r)=>{"use strict";r.d(t,{Vx:()=>n,p1:()=>o});var a=r(5155),s=r(2115);let l=(0,s.createContext)(null);function o(){let e=(0,s.useContext)(l);if(!e)throw Error("useProgress must be used within ProgressProvider");return e}function n(e){let{children:t}=e,[r,o]=(0,s.useState)(0),[n,i]=(0,s.useState)(""),[c,d]=(0,s.useState)(!1),u=(0,s.useRef)(null),x=(0,s.useRef)(null),h=(0,s.useCallback)(()=>{u.current&&(clearInterval(u.current),u.current=null),x.current&&(clearTimeout(x.current),x.current=null)},[]),p=(0,s.useCallback)(()=>{d(!1),o(0),i("")},[]),m=(0,s.useCallback)(e=>{h(),o(0),i(e||""),d(!0),u.current=setInterval(()=>{o(e=>e>=90?(u.current&&clearInterval(u.current),u.current=null,90):e+15*Math.random())},300),x.current=setTimeout(()=>{p()},8e3)},[h,p]),v=(0,s.useCallback)((e,t)=>{o(Math.min(95,e)),t&&i(t)},[]),g=(0,s.useCallback)(e=>{h(),o(100),e&&i(e),setTimeout(()=>{p()},500)},[h,p]),b=(0,s.useCallback)(()=>{h(),p()},[h,p]);return(0,s.useEffect)(()=>()=>h(),[h]),(0,a.jsxs)(l.Provider,{value:{startProgress:m,updateProgress:v,completeProgress:g,cancelProgress:b,isProgressing:c},children:[t,(0,a.jsxs)("div",{className:"fixed bottom-0 left-0 right-0 z-[600] transition-all duration-300 ease-out",style:{opacity:+!!c,transform:c?"translateY(0)":"translateY(100%)",pointerEvents:c?"auto":"none"},children:[(0,a.jsx)("div",{className:"h-1 w-full",style:{backgroundColor:"var(--bg-secondary)"},children:(0,a.jsx)("div",{className:"h-full transition-all duration-200 ease-out",style:{width:"".concat(r,"%"),backgroundColor:r>=100?"var(--status-pass-text)":"var(--accent)",boxShadow:r>=100?"0 0 10px var(--status-pass-text)":"none"}})}),n&&(0,a.jsxs)("div",{className:"flex items-center justify-center py-2 px-4 text-xs font-medium cursor-pointer",onClick:b,style:{backgroundColor:"var(--bg-card)",color:r>=100?"var(--status-pass-text)":"var(--text-secondary)",borderTop:"1px solid var(--border)"},children:[r>=100&&(0,a.jsx)("svg",{className:"mr-2",width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:(0,a.jsx)("path",{d:"M2 6l3 3 5-5",stroke:"var(--status-pass-text)",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),n]})]})]})}},854:(e,t,r)=>{"use strict";r.d(t,{A:()=>o});var a=r(2115);let s="qa-auth";function l(e){try{sessionStorage.setItem(s,JSON.stringify(e))}catch(e){}}function o(){let[e,t]=(0,a.useState)({name:"",isLoggedIn:!1}),[r,o]=(0,a.useState)(!1);(0,a.useEffect)(()=>{t(function(){try{let e=sessionStorage.getItem(s);if(!e)return{name:"",isLoggedIn:!1};return JSON.parse(e)}catch(e){return{name:"",isLoggedIn:!1}}}()),o(!0)},[]);let n=(0,a.useCallback)(e=>{let r={name:e,isLoggedIn:!0};l(r),t(r)},[]),i=(0,a.useCallback)(()=>{let e={name:"",isLoggedIn:!1};l(e),t(e)},[]);return{...e,loaded:r,login:n,logout:i}}},8609:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>M});var a=r(5155),s=r(2115),l=r(63),o=r(7246),n=r(2619),i=r.n(n),c=r(854),d=r(8566);let u=["https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_11.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_12.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_13.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_14.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_15.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_16.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_17.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_18.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_19.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_20.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_21.png","https://cdn.jsdelivr.net/gh/alohe/avatars/png/upstream_22.png"],x=["https://i.pinimg.com/736x/ed/74/06/ed74063ade6d66fce2ca19acbe74babc.jpg","https://i.pinimg.com/736x/8c/6d/56/8c6d563311f0917d45d1f2ce5d7c1a2d.jpg","https://i.pinimg.com/736x/86/b8/be/86b8bea1c772cf5c540e6f01e6acce59.jpg","https://i.pinimg.com/736x/78/d4/b1/78d4b1787a4fd23c2a8d21e4fbbc016f.jpg","https://i.pinimg.com/1200x/87/de/e6/87dee6d33b04f1df28bc85702ee12d4b.jpg","https://i.pinimg.com/1200x/3b/e3/95/3be395c4a94705f95e0603afb04f9d56.jpg","https://media.licdn.com/dms/image/v2/D5603AQHBu4wrzFWoTw/profile-displayphoto-crop_800_800/B56Zq.Sy6LKsAI-/0/1764129191465?e=1782345600&v=beta&t=79y6xLivwcpvwy53sy1TuVopK4FMp6O8uAu7QxlIxDo"],h=["QA Engineer","QA Lead","Developer","Designer","Manager"];function p(e,t){let r=parseInt(e.replace("#",""),16),a=Math.min(255,(r>>16)+Math.round((255-(r>>16))*t)),s=Math.min(255,(r>>8&255)+Math.round((255-(r>>8&255))*t)),l=Math.min(255,(255&r)+Math.round((255-(255&r))*t));return"#".concat((a<<16|s<<8|l).toString(16).padStart(6,"0"))}function m(e){let{profile:t,initials:r,onSetName:l,onSetBannerColor:o,onSetAvatarUrl:n,onSetRole:i}=e,[c,m]=(0,s.useState)(!1),[v,g]=(0,s.useState)(!1),[b,f]=(0,s.useState)(!1),[j,y]=(0,s.useState)(t.name),[k,w]=(0,s.useState)(t.role||""),C=(0,s.useRef)(null),N=(0,s.useRef)(null),S=(0,s.useRef)(null);(0,s.useEffect)(()=>{let e=e=>{C.current&&!C.current.contains(e.target)&&m(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]),(0,s.useEffect)(()=>{v&&N.current&&N.current.focus()},[v]),(0,s.useEffect)(()=>{b&&S.current&&S.current.focus()},[b]);let M=()=>{l(j.trim()),g(!1)},L=()=>{i(k.trim()),f(!1)},E=!!t.avatarUrl;return(0,a.jsxs)("div",{className:"relative",ref:C,children:[(0,a.jsx)("button",{onClick:()=>m(!c),className:"w-9 h-9 rounded-full flex items-center justify-center text-xs font-medium overflow-hidden border-2 transition-all hover:scale-105",style:{borderColor:c?"var(--accent)":"transparent",boxShadow:c?"0 0 0 2px var(--accent), 0 2px 8px rgba(0,0,0,0.1)":"0 1px 3px rgba(0,0,0,0.08)"},children:E?(0,a.jsx)("img",{src:t.avatarUrl,alt:"Avatar",className:"w-full h-full object-cover"}):(0,a.jsx)("span",{className:"w-full h-full flex items-center justify-center",style:{backgroundColor:t.bannerColor,color:"#fff"},children:r})}),c&&(0,a.jsxs)("div",{className:"absolute right-0 top-full mt-2 w-80 border z-50 overflow-hidden",style:{backgroundColor:"var(--bg-card)",borderColor:"var(--border)",borderRadius:"var(--radius-lg)",boxShadow:"var(--shadow-xl)",animation:"fadeIn 150ms ease-out"},children:[(0,a.jsxs)("div",{className:"relative px-5 pt-5 pb-4",style:{background:"linear-gradient(135deg, ".concat(t.bannerColor," 0%, ").concat(p(t.bannerColor,.4)," 50%, ").concat(t.bannerColor," 100%)")},children:[(0,a.jsx)("div",{className:"absolute inset-0 opacity-10",style:{backgroundImage:"radial-gradient(circle at 20% 50%, white 1px, transparent 1px), radial-gradient(circle at 80% 20%, white 1px, transparent 1px)",backgroundSize:"30px 30px"}}),(0,a.jsxs)("div",{className:"relative flex items-end gap-4",children:[(0,a.jsxs)("div",{className:"relative group",children:[(0,a.jsx)("div",{className:"w-16 h-16 rounded-xl overflow-hidden border-3 flex-shrink-0",style:{borderColor:"rgba(255,255,255,0.3)",boxShadow:"0 4px 12px rgba(0,0,0,0.2)"},children:E?(0,a.jsx)("img",{src:t.avatarUrl,alt:"Avatar",className:"w-full h-full object-cover"}):(0,a.jsx)("div",{className:"w-full h-full flex items-center justify-center text-xl font-bold",style:{backgroundColor:t.bannerColor,color:"#fff"},children:r})}),(0,a.jsx)("div",{className:"absolute inset-0 rounded-xl flex items-center justify-center opacity-0 group-hover:opacity-100 cursor-pointer transition-opacity",style:{backgroundColor:"rgba(0,0,0,0.4)"},onClick:e=>{var t;e.stopPropagation(),null==(t=document.getElementById("avatar-gallery"))||t.scrollIntoView({behavior:"smooth"})},children:(0,a.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"white",children:(0,a.jsx)("path",{d:"M14 11V14H2V11H0V14C0 15.1.9 16 2 16H14C15.1 16 16 15.1 16 14V11H14ZM7 9L4.5 6.5L3 8L8 13L13 8L11.5 6.5L9 9V0H7V9Z"})})})]}),(0,a.jsxs)("div",{className:"flex-1 min-w-0 pb-1",children:[v?(0,a.jsx)("input",{ref:N,value:j,onChange:e=>y(e.target.value),onBlur:M,onKeyDown:e=>{"Enter"===e.key&&M(),"Escape"===e.key&&g(!1)},className:"w-full bg-white/20 backdrop-blur-sm outline-none text-white text-sm font-semibold px-2 py-1 rounded placeholder-white/50",placeholder:"Your name..."}):(0,a.jsx)("div",{className:"text-sm font-semibold text-white cursor-pointer hover:opacity-80 truncate",onClick:()=>{y(t.name),g(!0)},children:t.name||"Click to set name"}),(0,a.jsx)("div",{className:"text-[11px] mt-0.5 px-2 py-0.5 rounded-full inline-block cursor-pointer hover:opacity-80",style:{backgroundColor:"rgba(255,255,255,0.15)",color:"rgba(255,255,255,0.9)"},onClick:()=>{w(t.role||""),f(!0)},children:b?(0,a.jsx)("input",{ref:S,value:k,onChange:e=>w(e.target.value),onBlur:L,onKeyDown:e=>{"Enter"===e.key&&L(),"Escape"===e.key&&f(!1)},className:"bg-transparent outline-none text-white text-[11px] w-24 placeholder-white/50",placeholder:"Your role..."}):t.role||"Set role..."})]})]})]}),(0,a.jsxs)("div",{className:"px-4 pt-3 pb-2",children:[(0,a.jsx)("label",{className:"text-[10px] font-semibold uppercase tracking-wider block mb-2",style:{color:"var(--text-tertiary)"},children:"Role"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-1.5",children:h.map(e=>(0,a.jsx)("button",{onClick:()=>i(e),className:"px-2 py-1 text-[10px] rounded-md border transition-colors",style:{borderColor:t.role===e?"var(--accent)":"var(--border)",color:t.role===e?"var(--accent)":"var(--text-secondary)",backgroundColor:t.role===e?"var(--accent)10":"transparent",fontWeight:t.role===e?600:400},children:e},e))})]}),(0,a.jsxs)("div",{id:"avatar-gallery",className:"px-4 pt-2 pb-3",children:[(0,a.jsx)("label",{className:"text-[10px] font-semibold uppercase tracking-wider block mb-2",style:{color:"var(--text-tertiary)"},children:"Choose Avatar"}),(0,a.jsx)("div",{className:"grid grid-cols-6 gap-2",children:u.map((e,r)=>(0,a.jsx)("button",{onClick:()=>n(e),className:"w-10 h-10 rounded-lg overflow-hidden border-2 transition-all hover:scale-110 hover:shadow-md",style:{borderColor:t.avatarUrl===e?"var(--accent)":"transparent",boxShadow:t.avatarUrl===e?"0 0 0 2px var(--accent)":"none"},children:(0,a.jsx)("img",{src:e,alt:"Avatar ".concat(r+11),className:"w-full h-full object-cover",loading:"lazy"})},e))}),(0,a.jsx)("div",{className:"grid grid-cols-6 gap-2 mt-2",children:x.map((e,r)=>(0,a.jsx)("button",{onClick:()=>n(e),className:"w-10 h-10 rounded-lg overflow-hidden border-2 transition-all hover:scale-110 hover:shadow-md",style:{borderColor:t.avatarUrl===e?"var(--accent)":"transparent",boxShadow:t.avatarUrl===e?"0 0 0 2px var(--accent)":"none"},children:(0,a.jsx)("img",{src:e,alt:"Avatar ".concat(r+23),className:"w-full h-full object-cover",loading:"lazy"})},e))})]}),(0,a.jsxs)("div",{className:"px-4 pb-4",children:[(0,a.jsx)("label",{className:"text-[10px] font-semibold uppercase tracking-wider block mb-2",style:{color:"var(--text-tertiary)"},children:"Banner Color"}),(0,a.jsx)("div",{className:"grid grid-cols-8 gap-1.5",children:d.T7.map(e=>(0,a.jsx)("button",{onClick:()=>o(e),className:"w-6 h-6 rounded-full transition-transform hover:scale-110 relative overflow-hidden",style:{background:"linear-gradient(135deg, ".concat(function(e,t){let r=parseInt(e.replace("#",""),16),a=Math.max(0,(r>>16)-Math.round((r>>16)*.3)),s=Math.max(0,(r>>8&255)-Math.round((r>>8&255)*.3)),l=Math.max(0,(255&r)-Math.round((255&r)*t));return"#".concat((a<<16|s<<8|l).toString(16).padStart(6,"0"))}(e,.3)," 0%, ").concat(e," 50%, ").concat(p(e,.3)," 100%)"),outline:t.bannerColor!==e||t.avatarUrl?"none":"2px solid var(--accent)",outlineOffset:2},children:(0,a.jsx)("div",{className:"absolute inset-0",style:{background:"linear-gradient(135deg, transparent 0%, rgba(255,255,255,0.3) 50%, transparent 100%)",animation:"shimmer 2s ease-in-out infinite"}})},e))})]}),(0,a.jsxs)("div",{className:"px-4 py-2.5 border-t flex items-center justify-between",style:{borderColor:"var(--border)",backgroundColor:"var(--bg-secondary)"},children:[(0,a.jsx)("span",{className:"text-[10px]",style:{color:"var(--text-tertiary)"},children:"Profile data stored locally"}),(0,a.jsx)("button",{onClick:()=>m(!1),className:"text-[10px] font-medium px-2 py-0.5 rounded",style:{color:"var(--accent)"},children:"Done"})]})]})]})}function v(e){let{open:t,onClose:r,profile:l,initials:o,stats:n}=e,[i,c]=(0,s.useState)(!1);if(!t)return null;let d="My Test Lah!:\n".concat(n.projects," Projects | ").concat(n.testCases," Cases | ").concat(n.passRate,"% Pass Rate"),u=async()=>{if(navigator.share)try{await navigator.share({title:"Test Lah! Stats",text:d})}catch(e){}else navigator.clipboard.writeText(d)};return(0,a.jsx)("div",{className:"fixed inset-0 z-[300] flex items-center justify-center",style:{backgroundColor:"rgba(0,0,0,0.3)",animation:"fadeIn 150ms ease-out"},onClick:r,children:(0,a.jsxs)("div",{className:"w-72 mx-4",onClick:e=>e.stopPropagation(),style:{perspective:"1000px"},children:[(0,a.jsxs)("div",{className:"relative w-full",style:{transformStyle:"preserve-3d",transform:i?"rotateY(180deg)":"rotateY(0)",transition:"transform 0.5s ease",height:"380px"},children:[(0,a.jsxs)("div",{className:"absolute inset-0 rounded-xl overflow-hidden border",style:{backfaceVisibility:"hidden",borderColor:"var(--border)",boxShadow:"var(--shadow-lg)"},children:[(0,a.jsx)("div",{className:"absolute inset-0",style:{background:"linear-gradient(160deg, ".concat(function(e,t){let r=parseInt(e.replace("#",""),16),a=Math.max(0,(r>>16)-Math.round((r>>16)*.25)),s=Math.max(0,(r>>8&255)-Math.round((r>>8&255)*t)),l=Math.max(0,(255&r)-Math.round((255&r)*t));return"#".concat((a<<16|s<<8|l).toString(16).padStart(6,"0"))}(l.bannerColor,.25)," 0%, ").concat(l.bannerColor," 50%, ").concat(function(e,t){let r=parseInt(e.replace("#",""),16),a=Math.min(255,(r>>16)+Math.round((255-(r>>16))*.2)),s=Math.min(255,(r>>8&255)+Math.round((255-(r>>8&255))*t)),l=Math.min(255,(255&r)+Math.round((255-(255&r))*t));return"#".concat((a<<16|s<<8|l).toString(16).padStart(6,"0"))}(l.bannerColor,.2)," 100%)")}}),(0,a.jsxs)("div",{className:"relative h-full flex flex-col items-center justify-center px-4",children:[(0,a.jsx)("div",{className:"w-20 h-20 rounded-xl overflow-hidden border-2 mb-3",style:{borderColor:"rgba(255,255,255,0.3)"},children:l.avatarUrl?(0,a.jsx)("img",{src:l.avatarUrl,alt:"Avatar",className:"w-full h-full object-cover"}):(0,a.jsx)("div",{className:"w-full h-full flex items-center justify-center text-2xl font-bold",style:{backgroundColor:"rgba(0,0,0,0.2)",color:"#fff"},children:o})}),(0,a.jsx)("h3",{className:"text-base font-semibold text-white drop-shadow-sm",children:l.name||"Anonymous Tester"}),(0,a.jsx)("p",{className:"text-xs mt-0.5 text-white/70",children:l.role||"No role set"}),(0,a.jsxs)("div",{className:"flex items-center gap-4 mt-4",children:[(0,a.jsx)(g,{value:n.projects,label:"Projects"}),(0,a.jsx)("div",{className:"w-px h-6 bg-white/20"}),(0,a.jsx)(g,{value:n.testCases,label:"Cases"}),(0,a.jsx)("div",{className:"w-px h-6 bg-white/20"}),(0,a.jsx)(g,{value:"".concat(n.passRate,"%"),label:"Pass"})]}),(0,a.jsx)("button",{onClick:()=>c(!0),className:"mt-5 px-4 py-1.5 text-[11px] font-medium rounded-full transition-colors",style:{backgroundColor:"rgba(255,255,255,0.2)",color:"#fff"},children:"View stats"})]})]}),(0,a.jsx)("div",{className:"absolute inset-0 rounded-xl overflow-hidden border",style:{backfaceVisibility:"hidden",transform:"rotateY(180deg)",borderColor:"var(--border)",backgroundColor:"var(--bg-card)",boxShadow:"var(--shadow-lg)"},children:(0,a.jsxs)("div",{className:"h-full flex flex-col",children:[(0,a.jsxs)("div",{className:"px-4 py-3 border-b flex items-center justify-between",style:{borderColor:"var(--border)"},children:[(0,a.jsx)("span",{className:"text-xs font-semibold",style:{color:"var(--text-primary)"},children:"Statistics"}),(0,a.jsx)("button",{onClick:()=>c(!1),className:"text-[10px] px-2 py-0.5 rounded border transition-colors hover:bg-[var(--bg-secondary)]",style:{color:"var(--text-tertiary)",borderColor:"var(--border)"},children:"Back"})]}),(0,a.jsxs)("div",{className:"flex-1 overflow-auto p-4 space-y-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-1.5",children:[(0,a.jsx)("span",{className:"text-[10px] uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:"Pass Rate"}),(0,a.jsxs)("span",{className:"text-sm font-semibold",style:{color:n.passRate>=80?"var(--status-pass-text)":n.passRate>=50?"var(--status-skip-text)":"var(--status-fail-text)"},children:[n.passRate,"%"]})]}),(0,a.jsx)("div",{className:"h-1.5 rounded-full overflow-hidden",style:{backgroundColor:"var(--bg-secondary)"},children:(0,a.jsx)("div",{className:"h-full rounded-full",style:{width:"".concat(n.passRate,"%"),backgroundColor:n.passRate>=80?"var(--status-pass-text)":n.passRate>=50?"var(--status-skip-text)":"var(--status-fail-text)"}})})]}),(0,a.jsxs)("div",{className:"grid grid-cols-4 gap-1.5",children:[(0,a.jsx)(b,{label:"Pass",value:n.pass,color:"var(--status-pass-text)"}),(0,a.jsx)(b,{label:"Fail",value:n.fail,color:"var(--status-fail-text)"}),(0,a.jsx)(b,{label:"Skip",value:n.skip,color:"var(--status-skip-text)"}),(0,a.jsx)(b,{label:"New",value:n.untested})]}),(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(f,{label:"Test Cases",value:n.testCases}),(0,a.jsx)(f,{label:"Flow Nodes",value:n.nodes}),(0,a.jsx)(f,{label:"Edges",value:n.edges}),(0,a.jsx)(f,{label:"Projects",value:n.projects})]}),(0,a.jsxs)("button",{onClick:u,className:"w-full px-3 py-2 text-[11px] font-medium rounded-lg border transition-colors hover:bg-[var(--bg-secondary)] flex items-center justify-center gap-1.5",style:{borderColor:"var(--border)",color:"var(--text-secondary)"},children:[(0,a.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,a.jsx)("path",{d:"M4 12v8a2 2 0 002 2h12a2 2 0 002-2v-8"}),(0,a.jsx)("polyline",{points:"16 6 12 2 8 6"}),(0,a.jsx)("line",{x1:"12",y1:"2",x2:"12",y2:"15"})]}),"Share"]})]})]})})]}),(0,a.jsx)("button",{onClick:r,className:"w-full mt-2 px-3 py-2 text-[11px] font-medium rounded-lg border transition-colors hover:bg-[var(--bg-secondary)]",style:{borderColor:"var(--border)",color:"var(--text-secondary)",backgroundColor:"var(--bg-card)"},children:"Close"})]})})}function g(e){let{value:t,label:r}=e;return(0,a.jsxs)("div",{className:"text-center",children:[(0,a.jsx)("div",{className:"text-sm font-semibold text-white",children:t}),(0,a.jsx)("div",{className:"text-[9px] uppercase tracking-wider text-white/60",children:r})]})}function b(e){let{label:t,value:r,color:s}=e;return(0,a.jsxs)("div",{className:"py-2 rounded-lg text-center",style:{backgroundColor:"var(--bg-secondary)"},children:[(0,a.jsx)("div",{className:"text-sm font-medium",style:{color:null!=s?s:"var(--text-secondary)"},children:r}),(0,a.jsx)("div",{className:"text-[8px] uppercase tracking-wider",style:{color:"var(--text-tertiary)"},children:t})]})}function f(e){let{label:t,value:r}=e;return(0,a.jsxs)("div",{className:"flex items-center justify-between px-3 py-2 rounded-lg",style:{backgroundColor:"var(--bg-secondary)"},children:[(0,a.jsx)("span",{className:"text-[11px]",style:{color:"var(--text-tertiary)"},children:t}),(0,a.jsx)("span",{className:"text-xs font-medium",style:{color:"var(--text-primary)"},children:r})]})}var j=r(265);function y(){let{projects:e,activeProject:t,activeProjectId:r,profile:n,profileInitials:d,setProfileName:u,setProfileBannerColor:x,setProfileAvatarUrl:h,setProfileRole:p}=(0,o.M)(),{logout:g}=(0,c.A)(),b=(0,l.useRouter)(),f=(0,l.usePathname)(),{startProgress:y,completeProgress:w}=(0,j.p1)(),[C,N]=(0,s.useState)(!1),[S,M]=(0,s.useState)(!1),L=Object.values(e),E=(0,s.useMemo)(()=>{let e=L.flatMap(e=>Object.values(e.testCases).flat()),t=e.length,r=e.filter(e=>"pass"===e.status).length,a=e.filter(e=>"fail"===e.status).length,s=e.filter(e=>"skip"===e.status).length,l=e.filter(e=>"untested"===e.status).length,o=L.reduce((e,t)=>e+t.flows.length,0),n=L.reduce((e,t)=>{var r;return e+(null!=(r=t.edges)?r:[]).length},0),i=t-s,c=i>0?Math.round(r/i*100):0;return{projects:L.length,testCases:t,passRate:c,nodes:o,edges:n,pass:r,fail:a,skip:s,untested:l}},[L]),P=f.startsWith("/integrations")?"integrations":"projects";return(0,a.jsxs)("header",{className:"flex flex-col border-b flex-shrink-0 relative",style:{backgroundColor:"var(--bg-card)",borderColor:"var(--border)"},children:[(0,a.jsx)("div",{className:"absolute inset-0 overflow-hidden flex items-center justify-center pointer-events-none group/duck",children:(0,a.jsx)("img",{src:"https://static.vecteezy.com/system/resources/thumbnails/067/162/149/small/cute-duck-meme-sticker-transparent-cute-illustration-free-png.png",alt:"",className:"h-[85%] object-contain select-none transition-all duration-300 group-hover/duck:scale-110 group-hover/duck:opacity-[0.15] cursor-pointer",style:{opacity:.09,pointerEvents:"auto"},onClick:()=>b.push("/projects"),title:"Quack! \uD83E\uDD86"})}),(0,a.jsxs)("div",{className:"relative z-10 flex items-center justify-between px-6 py-2.5",children:[(0,a.jsx)("div",{className:"flex items-center gap-3",children:(0,a.jsxs)(i(),{href:"/projects",className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:"w-8 h-8 rounded-md overflow-hidden bg-white flex-shrink-0",style:{boxShadow:"0 1px 4px rgba(0,0,0,0.08)"},children:(0,a.jsx)("img",{src:"https://static.vecteezy.com/system/resources/thumbnails/067/162/149/small/cute-duck-meme-sticker-transparent-cute-illustration-free-png.png",alt:"Logo",width:32,height:32,className:"w-full h-full object-contain"})}),(0,a.jsx)("span",{className:"shimmer-text text-sm font-bold tracking-wide select-none",style:{background:"linear-gradient(90deg, var(--text-primary) 0%, var(--text-primary) 40%, #FFD54F 50%, var(--text-primary) 60%, var(--text-primary) 100%)",backgroundSize:"200% 100%",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent",backgroundClip:"text",animation:"shimmerText 3s ease-in-out infinite"},children:"Test Lah!"})]})}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("button",{onClick:()=>N(!0),className:"hidden md:block px-3 py-1.5 text-[11px] font-medium rounded-md border transition-colors hover:bg-[var(--bg-secondary)]",style:{borderColor:"var(--border)",color:"var(--text-secondary)"},children:"My Card"}),(0,a.jsx)("div",{className:"hidden md:block w-px h-5 mx-0.5",style:{backgroundColor:"var(--border)"}}),(0,a.jsx)("div",{className:"relative z-[60]",children:(0,a.jsx)(m,{profile:n,initials:d,onSetName:u,onSetBannerColor:x,onSetAvatarUrl:h,onSetRole:p})}),(0,a.jsx)("button",{onClick:()=>{M(!0)},className:"w-8 h-8 flex items-center justify-center text-xs rounded-md border transition-colors hover:bg-[var(--bg-secondary)] hover:border-[var(--status-fail-text)]",style:{borderColor:"var(--border)",color:"var(--text-tertiary)"},title:"Logout",children:(0,a.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:(0,a.jsx)("path",{d:"M5 2H3.5A1.5 1.5 0 002 3.5v7A1.5 1.5 0 003.5 12H5M9 10l3-3-3-3M6 7h6",stroke:"currentColor",strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"})})})]})]}),(0,a.jsxs)("div",{className:"relative z-10 flex items-center gap-1 px-6 pb-1.5",children:[(0,a.jsx)(k,{label:"All Projects",href:"/projects",icon:(0,a.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 14 14",fill:"none",children:[(0,a.jsx)("rect",{x:"1",y:"1",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.2",fill:"none"}),(0,a.jsx)("rect",{x:"8",y:"1",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.2",fill:"none"}),(0,a.jsx)("rect",{x:"1",y:"8",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.2",fill:"none"}),(0,a.jsx)("rect",{x:"8",y:"8",width:"5",height:"5",rx:"1",stroke:"currentColor",strokeWidth:"1.2",fill:"none"})]}),active:"projects"===P}),(0,a.jsx)(k,{label:"Integrations",href:"/integrations",icon:(0,a.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 14 14",fill:"none",children:[(0,a.jsx)("circle",{cx:"5",cy:"5",r:"2.5",stroke:"currentColor",strokeWidth:"1.2",fill:"none"}),(0,a.jsx)("circle",{cx:"9",cy:"9",r:"2.5",stroke:"currentColor",strokeWidth:"1.2",fill:"none"}),(0,a.jsx)("path",{d:"M7.5 5.5L6.5 8.5",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round"})]}),active:"integrations"===P})]}),(0,a.jsx)(v,{open:C,onClose:()=>N(!1),profile:n,initials:d,stats:E}),S&&(0,a.jsx)("div",{className:"fixed inset-0 z-[400] flex items-center justify-center",style:{backgroundColor:"rgba(0,0,0,0.3)",animation:"fadeIn 150ms ease-out"},onClick:()=>M(!1),children:(0,a.jsxs)("div",{className:"w-full max-w-sm mx-4 rounded-xl border overflow-hidden",style:{backgroundColor:"var(--bg-card)",borderColor:"var(--border)",boxShadow:"var(--shadow-lg)",animation:"fadeInUp 200ms ease-out"},onClick:e=>e.stopPropagation(),children:[(0,a.jsxs)("div",{className:"px-6 pt-6 pb-4 text-center",children:[(0,a.jsx)("div",{className:"w-14 h-14 mx-auto mb-4 rounded-full flex items-center justify-center",style:{backgroundColor:"var(--status-skip-bg)"},children:(0,a.jsxs)("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",stroke:"var(--status-skip-text)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,a.jsx)("path",{d:"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4"}),(0,a.jsx)("polyline",{points:"16 17 21 12 16 7"}),(0,a.jsx)("line",{x1:"21",y1:"12",x2:"9",y2:"12"})]})}),(0,a.jsx)("h3",{className:"text-base font-semibold mb-2",style:{color:"var(--text-primary)"},children:"Mau Keluar? Sedekahnya mana??"}),(0,a.jsx)("p",{className:"text-xs leading-relaxed",style:{color:"var(--text-tertiary)"},children:"Sebelum keluar, mungkin bisa traktir developer secangkir kopi? ☕"})]}),(0,a.jsxs)("div",{className:"px-6 pb-5 flex gap-2",children:[(0,a.jsx)("button",{onClick:()=>M(!1),className:"flex-1 px-3 py-2.5 text-xs font-medium rounded-lg border transition-colors hover:bg-[var(--bg-secondary)]",style:{borderColor:"var(--border)",color:"var(--text-secondary)"},children:"Batal"}),(0,a.jsx)("button",{onClick:()=>{M(!1),y("Logging out..."),g(),setTimeout(()=>{w("Logged out!"),b.push("/login")},500)},className:"flex-1 px-3 py-2.5 text-xs font-medium rounded-lg transition-opacity hover:opacity-80",style:{backgroundColor:"var(--status-fail-text)",color:"#fff"},children:"Keluar"})]})]})})]})}function k(e){let{label:t,icon:r,active:s,href:l,badge:o}=e;return(0,a.jsxs)(i(),{href:l,className:"flex items-center gap-2 px-3 py-2 text-xs font-medium rounded-t-md transition-colors relative",style:{color:s?"var(--accent)":"var(--text-tertiary)",backgroundColor:s?"var(--bg-secondary)":"transparent"},children:[r,t,o&&(0,a.jsx)("span",{className:"ml-1 px-1.5 py-0.5 text-[9px] font-semibold rounded-full leading-none",style:{backgroundColor:s?"var(--accent)":"var(--bg-secondary)",color:s?"#fff":"var(--text-tertiary)"},children:o}),s&&(0,a.jsx)("div",{className:"absolute bottom-0 left-2 right-2 h-0.5 rounded-t-full",style:{backgroundColor:"var(--accent)"}})]})}var w=r(7065);function C(e){let{children:t}=e,r=(0,l.useRouter)(),{isLoggedIn:o,loaded:n}=(0,c.A)();return((0,s.useEffect)(()=>{n&&!o&&r.replace("/login")},[n,o,r]),n)?o?(0,a.jsx)(a.Fragment,{children:t}):null:(0,a.jsx)("div",{className:"h-screen flex items-center justify-center",style:{backgroundColor:"var(--bg-primary)"},children:(0,a.jsx)("div",{className:"text-sm",style:{color:"var(--text-tertiary)"},children:"Loading..."})})}function N(){let{undo:e,redo:t,canUndo:r,canRedo:a}=(0,o.M)();return(0,s.useEffect)(()=>{let s=s=>{(s.ctrlKey||s.metaKey)&&"z"===s.key&&!s.shiftKey&&(s.preventDefault(),r&&e()),(s.ctrlKey||s.metaKey)&&("Z"===s.key||"z"===s.key&&s.shiftKey)&&(s.preventDefault(),a&&t()),(s.ctrlKey||s.metaKey)&&"y"===s.key&&(s.preventDefault(),a&&t())};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[e,t,r,a]),null}function S(e){let{children:t}=e,{dialog:r}=(0,o.M)();return(0,a.jsxs)(a.Fragment,{children:[t,(0,a.jsx)(w.q,{dialog:r})]})}function M(e){let{children:t}=e;return(0,a.jsx)(C,{children:(0,a.jsx)(o.q,{children:(0,a.jsx)(S,{children:(0,a.jsxs)("div",{className:"h-screen flex flex-col",style:{backgroundColor:"var(--bg-primary)"},children:[(0,a.jsx)(N,{}),(0,a.jsx)(y,{}),(0,a.jsx)("div",{className:"flex-1 min-h-0",children:t})]})})})})}},9715:(e,t,r)=>{Promise.resolve().then(r.bind(r,8609))}},e=>{e.O(0,[619,246,441,255,358],()=>e(e.s=9715)),_N_E=e.O()}]);
|