@tapflowio/relay 0.16.0 → 0.17.0
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/dist/RelayServer.d.ts.map +1 -1
- package/dist/RelayServer.js +53 -3
- package/dist/RelayServer.js.map +1 -1
- package/dist/SessionManager.d.ts +2 -1
- package/dist/SessionManager.d.ts.map +1 -1
- package/dist/SessionManager.js +2 -1
- package/dist/SessionManager.js.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/public/assets/{AppCenter-DHKav0MA.js → AppCenter-BRmG2FEm.js} +2 -2
- package/public/assets/AppCenter-BRmG2FEm.js.br +0 -0
- package/public/assets/{Default-FOVo8D6L.js → Default-DTr0wqds.js} +1 -1
- package/public/assets/Default-DTr0wqds.js.br +0 -0
- package/public/assets/{Invite-DdjwJ4DV.js → Invite-DKsNh2GB.js} +1 -1
- package/public/assets/Invite-DKsNh2GB.js.br +0 -0
- package/public/assets/{MacResources-Dl1w6E1h.js → MacResources-CLDdcibL.js} +1 -1
- package/public/assets/MacResources-CLDdcibL.js.br +0 -0
- package/public/assets/{NotFound-BMUavI-G.js → NotFound-BtKq2uv6.js} +1 -1
- package/public/assets/NotFound-BtKq2uv6.js.br +0 -0
- package/public/assets/QASession-B_5aJ67l.js +130 -0
- package/public/assets/QASession-B_5aJ67l.js.br +0 -0
- package/public/assets/{ResetPassword-Yn2hnB_M.js → ResetPassword-gp6hVQrf.js} +1 -1
- package/public/assets/ResetPassword-gp6hVQrf.js.br +0 -0
- package/public/assets/{Setup-BaGV0xx6.js → Setup-DiG4Nbs7.js} +1 -1
- package/public/assets/Setup-DiG4Nbs7.js.br +0 -0
- package/public/assets/{Team-BOwoos5_.js → Team-D1iwg2vL.js} +2 -2
- package/public/assets/Team-D1iwg2vL.js.br +0 -0
- package/public/assets/{Tokens-Bu1FtE_n.js → Tokens-DGtE4Xcy.js} +1 -1
- package/public/assets/Tokens-DGtE4Xcy.js.br +0 -0
- package/public/assets/alert-dialog-CXwkFlF3.js +1 -0
- package/public/assets/alert-dialog-CXwkFlF3.js.br +0 -0
- package/public/assets/{badge-CNtq_oBK.js → badge-CavXTq2x.js} +1 -1
- package/public/assets/badge-CavXTq2x.js.br +0 -0
- package/public/assets/{build-format-D6egYX-U.js → build-format-BZV6gt41.js} +1 -1
- package/public/assets/build-format-BZV6gt41.js.br +0 -0
- package/public/assets/dialog-JbKwqqS0.js +11 -0
- package/public/assets/dialog-JbKwqqS0.js.br +0 -0
- package/public/assets/index-CBnxiD7-.js +274 -0
- package/public/assets/index-CBnxiD7-.js.br +0 -0
- package/public/assets/index-Ctx3_cYz.css +1 -0
- package/public/assets/index-Ctx3_cYz.css.br +0 -0
- package/public/assets/{pencil-CzKUUBmE.js → pencil-BGrOEXS6.js} +1 -1
- package/public/assets/pencil-BGrOEXS6.js.br +0 -0
- package/public/assets/{table-CU0HMyju.js → table-CqOA0Bb1.js} +1 -1
- package/public/assets/table-CqOA0Bb1.js.br +0 -0
- package/public/assets/tabs-BVBbhCFG.js +1 -0
- package/public/assets/tabs-BVBbhCFG.js.br +0 -0
- package/public/assets/{trash-2-Bw_edyHa.js → trash-2-CwlFrbEF.js} +1 -1
- package/public/assets/trash-2-CwlFrbEF.js.br +0 -0
- package/public/index.html +2 -2
- package/public/index.html.br +0 -0
- package/public/assets/AppCenter-DHKav0MA.js.br +0 -0
- package/public/assets/Default-FOVo8D6L.js.br +0 -0
- package/public/assets/Invite-DdjwJ4DV.js.br +0 -0
- package/public/assets/MacResources-Dl1w6E1h.js.br +0 -0
- package/public/assets/NotFound-BMUavI-G.js.br +0 -0
- package/public/assets/QASession-BzfWUo9F.js +0 -130
- package/public/assets/QASession-BzfWUo9F.js.br +0 -0
- package/public/assets/ResetPassword-Yn2hnB_M.js.br +0 -0
- package/public/assets/Setup-BaGV0xx6.js.br +0 -0
- package/public/assets/Team-BOwoos5_.js.br +0 -0
- package/public/assets/Tokens-Bu1FtE_n.js.br +0 -0
- package/public/assets/alert-dialog-dsCcQ1NM.js +0 -1
- package/public/assets/alert-dialog-dsCcQ1NM.js.br +0 -0
- package/public/assets/badge-CNtq_oBK.js.br +0 -0
- package/public/assets/build-format-D6egYX-U.js.br +0 -0
- package/public/assets/dialog-Blqnc3tq.js +0 -11
- package/public/assets/dialog-Blqnc3tq.js.br +0 -0
- package/public/assets/index-BI7E3MD-.css +0 -1
- package/public/assets/index-BI7E3MD-.css.br +0 -0
- package/public/assets/index-IvDXNTVd.js +0 -274
- package/public/assets/index-IvDXNTVd.js.br +0 -0
- package/public/assets/pencil-CzKUUBmE.js.br +0 -0
- package/public/assets/table-CU0HMyju.js.br +0 -0
- package/public/assets/tabs-C9nZOMC5.js +0 -1
- package/public/assets/tabs-C9nZOMC5.js.br +0 -0
- package/public/assets/trash-2-Bw_edyHa.js.br +0 -0
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-standard-normal-BwkfbSeq.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-standard-normal-DpK-iCPk.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 98%;--foreground: 0 0% 9%;--card: 0 0% 100%;--card-foreground: 0 0% 9%;--popover: 0 0% 100%;--popover-foreground: 0 0% 9%;--primary: 0 0% 9%;--primary-foreground: 0 0% 100%;--secondary: 0 0% 96%;--secondary-foreground: 0 0% 9%;--muted: 0 0% 96%;--muted-foreground: 0 0% 53%;--accent: 0 0% 96%;--accent-foreground: 0 0% 9%;--destructive: 0 100% 47%;--destructive-foreground: 0 0% 100%;--border: 0 0% 92%;--input: 0 0% 92%;--ring: 0 0% 9%;--radius: .5rem;--avatar-1-bg: 353 90% 82%;--avatar-1-fg: 353 80% 28%;--avatar-2-bg: 25 100% 76%;--avatar-2-fg: 25 90% 25%;--avatar-3-bg: 48 100% 72%;--avatar-3-fg: 31 85% 25%;--avatar-4-bg: 151 70% 70%;--avatar-4-fg: 151 80% 18%;--avatar-5-bg: 216 90% 78%;--avatar-5-fg: 216 85% 25%;--avatar-6-bg: 278 75% 84%;--avatar-6-fg: 278 75% 28%;--sidebar-background: 0 0% 98%;--sidebar-foreground: 0 0% 30%;--sidebar-primary: 0 0% 9%;--sidebar-primary-foreground: 0 0% 100%;--sidebar-accent: 0 0% 96%;--sidebar-accent-foreground: 0 0% 9%;--sidebar-border: 0 0% 92%;--sidebar-ring: 211 100% 48%;--chart-1: 216 85% 55%;--chart-2: 262 65% 58%;--chart-3: 30 80% 55%;--chart-4: 151 65% 45%;--chart-5: 340 75% 55%}.dark{--background: 0 0% 9%;--foreground: 0 0% 98%;--card: 0 0% 11%;--card-foreground: 0 0% 98%;--popover: 0 0% 11%;--popover-foreground: 0 0% 98%;--primary: 0 0% 98%;--primary-foreground: 0 0% 9%;--secondary: 0 0% 15%;--secondary-foreground: 0 0% 98%;--muted: 0 0% 15%;--muted-foreground: 0 0% 65%;--accent: 0 0% 15%;--accent-foreground: 0 0% 98%;--destructive: 0 70% 62%;--destructive-foreground: 0 0% 98%;--border: 0 0% 18%;--input: 0 0% 18%;--ring: 0 0% 98%;--avatar-1-bg: 353 40% 32%;--avatar-1-fg: 353 60% 78%;--avatar-2-bg: 25 42% 32%;--avatar-2-fg: 25 65% 78%;--avatar-3-bg: 48 42% 32%;--avatar-3-fg: 48 65% 78%;--avatar-4-bg: 151 36% 28%;--avatar-4-fg: 151 50% 72%;--avatar-5-bg: 216 42% 32%;--avatar-5-fg: 216 60% 78%;--avatar-6-bg: 278 38% 32%;--avatar-6-fg: 278 55% 78%;--sidebar-background: 0 0% 7%;--sidebar-foreground: 0 0% 80%;--sidebar-primary: 0 0% 98%;--sidebar-primary-foreground: 0 0% 9%;--sidebar-accent: 0 0% 13%;--sidebar-accent-foreground: 0 0% 98%;--sidebar-border: 0 0% 18%;--sidebar-ring: 211 100% 48%;--chart-1: 216 80% 65%;--chart-2: 262 60% 68%;--chart-3: 30 75% 65%;--chart-4: 151 60% 55%;--chart-5: 340 70% 65%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-feature-settings:"ss01","ss02";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button:not([aria-haspopup]):not(:disabled),[role=button]:not([aria-haspopup]):not(:disabled){transition-property:color,background-color,border-color,transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.12s}button:active:not([aria-haspopup]):not(:disabled),[role=button]:active:not([aria-haspopup]):not(:disabled){transform:translateY(1px)}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-20{z-index:20}.z-50,.z-\[50\]{z-index:50}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3\.5{margin-left:.875rem;margin-right:.875rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-ml-1{margin-left:-.25rem}.-mr-4{margin-right:-1rem}.-mt-1{margin-top:-.25rem}.mb-1{margin-bottom:.25rem}.ml-0\.5{margin-left:.125rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1px\]{height:1px}.h-\[220px\]{height:220px}.h-\[32px\]{height:32px}.h-\[52px\]{height:52px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.max-h-48{max-height:12rem}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[var\(--radix-dropdown-menu-content-available-height\)\]{max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-0{min-height:0px}.min-h-16{min-height:4rem}.min-h-\[100px\]{min-height:100px}.min-h-\[80px\]{min-height:80px}.min-h-full{min-height:100%}.min-h-svh{min-height:100svh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[--sidebar-width\]{width:var(--sidebar-width)}.w-\[1px\]{width:1px}.w-\[300px\]{width:300px}.w-\[500px\]{width:500px}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-5{min-width:1.25rem}.min-w-6{min-width:1.5rem}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-\[--skeleton-width\]{max-width:var(--skeleton-width)}.max-w-\[500px\]{max-width:500px}.max-w-\[900px\]{max-width:900px}.max-w-lg{max-width:32rem}.max-w-sm{max-width:24rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\[--radix-dropdown-menu-content-transform-origin\]{transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.origin-\[--radix-tooltip-content-transform-origin\]{transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-px{--tw-translate-x: 1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-16{gap:4rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-\[12px\]{gap:12px}.gap-\[4px\]{gap:4px}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.\!rounded-\[18px\]{border-radius:18px!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-pill{border-radius:100px}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-border{border-color:hsl(var(--border))}.border-input{border-color:hsl(var(--input))}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-background\/90{background-color:hsl(var(--background) / .9)}.bg-black\/80{background-color:#000c}.bg-blue-400{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-emerald-400{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-foreground\/85{background-color:hsl(var(--foreground) / .85)}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground\/40{background-color:hsl(var(--muted-foreground) / .4)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-sky-50{--tw-bg-opacity: 1;background-color:rgb(240 249 255 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-violet-400{--tw-bg-opacity: 1;background-color:rgb(167 139 250 / var(--tw-bg-opacity, 1))}.bg-zinc-100{--tw-bg-opacity: 1;background-color:rgb(244 244 245 / var(--tw-bg-opacity, 1))}.bg-zinc-700{--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity, 1))}.fill-current{fill:currentColor}.fill-muted-foreground{fill:hsl(var(--muted-foreground))}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-\[10px\]{padding:10px}.p-\[1px\]{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.px-\[7px\]{padding-left:7px;padding-right:7px}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-\[1px\]{padding-bottom:1px}.pl-1{padding-left:.25rem}.pl-8{padding-left:2rem}.pl-\[4px\]{padding-left:4px}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace}.font-sans{font-family:Inter,ui-sans-serif,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-display-md{letter-spacing:-.96px}.tracking-display-sm{letter-spacing:-.6px}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-background{color:hsl(var(--background))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/70{color:hsl(var(--foreground) / .7)}.text-foreground\/75{color:hsl(var(--foreground) / .75)}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/40{color:hsl(var(--muted-foreground) / .4)}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.text-sidebar-foreground{color:hsl(var(--sidebar-foreground))}.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground) / .7)}.text-sky-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-zinc-600{--tw-text-opacity: 1;color:rgb(82 82 91 / var(--tw-text-opacity, 1))}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-card-1{--tw-shadow: inset 0 0 0 1px rgba(0,0,0,.08);--tw-shadow-colored: inset 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-card-2{--tw-shadow: 0px 1px 1px rgba(0,0,0,.02), 0px 2px 2px rgba(0,0,0,.04), inset 0 0 0 1px rgba(0,0,0,.08);--tw-shadow-colored: 0px 1px 1px var(--tw-shadow-color), 0px 2px 2px var(--tw-shadow-color), inset 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-card-3{--tw-shadow: 0px 2px 2px rgba(0,0,0,.04), 0px 8px 8px -8px rgba(0,0,0,.04), inset 0 0 0 1px rgba(0,0,0,.08);--tw-shadow-colored: 0px 2px 2px var(--tw-shadow-color), 0px 8px 8px -8px var(--tw-shadow-color), inset 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-card-4{--tw-shadow: 0px 2px 2px rgba(0,0,0,.04), 0px 8px 16px -4px rgba(0,0,0,.04), inset 0 0 0 1px rgba(0,0,0,.08);--tw-shadow-colored: 0px 2px 2px var(--tw-shadow-color), 0px 8px 16px -4px var(--tw-shadow-color), inset 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-sidebar-ring{--tw-ring-color: hsl(var(--sidebar-ring))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert: invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);top:-.5rem;right:-.5rem;bottom:-.5rem;left:-.5rem}.after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.first\:pt-0:first-child{padding-top:0}.last\:pb-0:last-child{padding-bottom:0}.focus-within\:outline-none:focus-within{outline:2px solid transparent;outline-offset:2px}.focus-within\:ring-2:focus-within{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-within\:ring-ring:focus-within{--tw-ring-color: hsl(var(--ring))}.focus-within\:ring-offset-2:focus-within{--tw-ring-offset-width: 2px}.hover\:border-primary:hover{border-color:hsl(var(--primary))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-accent\/50:hover{background-color:hsl(var(--accent) / .5)}.hover\:bg-destructive\/20:hover{background-color:hsl(var(--destructive) / .2)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-transparent:hover{background-color:transparent}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:\!opacity-100:hover{opacity:1!important}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-destructive:focus{color:hsl(var(--destructive))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-0:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color: hsl(var(--sidebar-ring))}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width: 0px}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100{opacity:1}.group\/menu-item:hover .group-hover\/menu-item\:opacity-100{opacity:1}.group:hover .group-hover\:opacity-50{opacity:.5}.group.toaster .group-\[\.toaster\]\:border-border{border-color:hsl(var(--border))}.group.toast .group-\[\.toast\]\:bg-muted{background-color:hsl(var(--muted))}.group.toast .group-\[\.toast\]\:bg-primary{background-color:hsl(var(--primary))}.group.toaster .group-\[\.toaster\]\:bg-background{background-color:hsl(var(--background))}.group.toast .group-\[\.toast\]\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group.toast .group-\[\.toast\]\:text-primary-foreground{color:hsl(var(--primary-foreground))}.group.toaster .group-\[\.toaster\]\:text-foreground{color:hsl(var(--foreground))}.group.toaster .group-\[\.toaster\]\:shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer\/menu-button:hover~.peer-hover\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8{padding-right:2rem}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[active\=true\]\:font-medium[data-active=true]{font-weight:500}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state=open]{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state=open]{color:hsl(var(--sidebar-accent-foreground))}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]{left:calc(var(--sidebar-width) * -1)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]{right:calc(var(--sidebar-width) * -1)}.group[data-side=left] .group-data-\[side\=left\]\:-right-4{right:-1rem}.group[data-side=right] .group-data-\[side\=right\]\:left-0{left:0}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:-mt-8{margin-top:-2rem}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:hidden{display:none}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!size-8{width:2rem!important;height:2rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\]{width:var(--sidebar-width-icon)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\]{width:calc(var(--sidebar-width-icon) + 1rem)}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\]{width:calc(var(--sidebar-width-icon) + 1rem + 2px)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:w-0{width:0px}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-side=right] .group-data-\[side\=right\]\:rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:justify-center{justify-content:center}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:overflow-hidden{overflow:hidden}.group[data-variant=floating] .group-data-\[variant\=floating\]\:rounded-lg{border-radius:var(--radius)}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border{border-width:1px}.group[data-side=left] .group-data-\[side\=left\]\:border-r{border-right-width:1px}.group[data-side=right] .group-data-\[side\=right\]\:border-l{border-left-width:1px}.group[data-variant=floating] .group-data-\[variant\=floating\]\:border-sidebar-border{border-color:hsl(var(--sidebar-border))}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-0{padding:0!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:\!p-2{padding:.5rem!important}.group[data-collapsible=icon] .group-data-\[collapsible\=icon\]\:opacity-0{opacity:0}.group[data-variant=floating] .group-data-\[variant\=floating\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:after\:left-full:after{content:var(--tw-content);left:100%}.group[data-collapsible=offcanvas] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover{background-color:hsl(var(--sidebar-background))}.peer\/menu-button[data-size=default]~.peer-data-\[size\=default\]\/menu-button\:top-1\.5{top:.375rem}.peer\/menu-button[data-size=lg]~.peer-data-\[size\=lg\]\/menu-button\:top-2\.5{top:.625rem}.peer\/menu-button[data-size=sm]~.peer-data-\[size\=sm\]\/menu-button\:top-1{top:.25rem}.peer\/menu-button[data-active=true]~.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground{color:hsl(var(--sidebar-accent-foreground))}.dark\:-rotate-90:is(.dark *){--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:rotate-0:is(.dark *){--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:scale-0:is(.dark *){--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:scale-100:is(.dark *){--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.dark\:bg-blue-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(23 37 84 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(2 44 34 / var(--tw-bg-opacity, 1))}.dark\:bg-green-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(5 46 22 / var(--tw-bg-opacity, 1))}.dark\:bg-red-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity, 1))}.dark\:bg-sky-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(8 47 73 / var(--tw-bg-opacity, 1))}.dark\:bg-zinc-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-sky-300:is(.dark *){--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.dark\:text-zinc-400:is(.dark *){--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}@media(min-width:640px){.sm\:mt-0{margin-top:0}.sm\:flex{display:flex}.sm\:max-w-\[440px\]{max-width:440px}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2\.5{gap:.625rem}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}@media(min-width:768px){.md\:block{display:block}.md\:flex{display:flex}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:opacity-0{opacity:0}.after\:md\:hidden:after{content:var(--tw-content);display:none}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:m-2{margin:.5rem}.peer[data-state=collapsed][data-variant=inset]~.md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2{margin-left:.5rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:ml-0{margin-left:0}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:rounded-xl{border-radius:.75rem}.peer[data-variant=inset]~.md\:peer-data-\[variant\=inset\]\:shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:1536px){.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:h-3\.5>svg{height:.875rem}.\[\&\>svg\]\:w-3\.5>svg{width:.875rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem;height:.75rem}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:-.5rem}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:-.5rem}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/20{background-color:hsl(var(--background) / .2)}[data-slot=tooltip-content] .\[\[data-slot\=tooltip-content\]_\&\]\:text-background{color:hsl(var(--background))}[data-slot=tooltip-content] .dark\:\[\[data-slot\=tooltip-content\]_\&\]\:bg-background\/10:is(.dark *){background-color:hsl(var(--background) / .1)}
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a6 as o,a3 as t,J as l}from"./index-CBnxiD7-.js";const r=o.forwardRef(({className:a,...e},s)=>t.jsx("div",{className:"relative w-full overflow-auto",children:t.jsx("table",{ref:s,className:l("w-full caption-bottom text-sm",a),...e})}));r.displayName="Table";const d=o.forwardRef(({className:a,...e},s)=>t.jsx("thead",{ref:s,className:l("[&_tr]:border-b",a),...e}));d.displayName="TableHeader";const m=o.forwardRef(({className:a,...e},s)=>t.jsx("tbody",{ref:s,className:l("[&_tr:last-child]:border-0",a),...e}));m.displayName="TableBody";const b=o.forwardRef(({className:a,...e},s)=>t.jsx("tfoot",{ref:s,className:l("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",a),...e}));b.displayName="TableFooter";const c=o.forwardRef(({className:a,...e},s)=>t.jsx("tr",{ref:s,className:l("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",a),...e}));c.displayName="TableRow";const f=o.forwardRef(({className:a,...e},s)=>t.jsx("th",{ref:s,className:l("h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",a),...e}));f.displayName="TableHead";const i=o.forwardRef(({className:a,...e},s)=>t.jsx("td",{ref:s,className:l("p-4 align-middle [&:has([role=checkbox])]:pr-0",a),...e}));i.displayName="TableCell";const n=o.forwardRef(({className:a,...e},s)=>t.jsx("caption",{ref:s,className:l("mt-4 text-sm text-muted-foreground",a),...e}));n.displayName="TableCaption";export{r as T,m as a,i as b,f as c,d,c as e};
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a6 as c,a3 as g,u as S,t as p,q as j,K as m,s as A,Z as N,O as P,af as k,ae as L,ai as M,J as x}from"./index-CBnxiD7-.js";const $=location.protocol==="https:"?"wss:":"ws:",D=`${$}//${location.host}`,F=2e3;function ee(t,e){const a=c.useRef(null),[f,n]=c.useState(!1),o=c.useRef(t);o.current=t;const u=c.useRef(e);return u.current=e,c.useEffect(()=>{let d=!1;const b=()=>{if(d)return;const l=new WebSocket(D);l.binaryType="arraybuffer",a.current=l,l.onopen=()=>n(!0),l.onclose=()=>{n(!1),d||setTimeout(b,F)},l.onmessage=i=>{var s;if(i.data instanceof ArrayBuffer){(s=u.current)==null||s.call(u,i.data);return}try{o.current(JSON.parse(i.data))}catch{}}};return b(),()=>{var l;d=!0,(l=a.current)==null||l.close()}},[]),{send:c.useCallback(d=>{var b;((b=a.current)==null?void 0:b.readyState)===WebSocket.OPEN&&a.current.send(JSON.stringify(d))},[]),connected:f}}var O=Object.defineProperty,T=(t,e)=>O(t,"name",{value:e,configurable:!0}),y="Tabs",[V]=P(y,[N]),w=N(),[G,C]=V(y),K=c.forwardRef(T(function(e,a){const{__scopeTabs:f,value:n,onValueChange:o,defaultValue:u,orientation:r="horizontal",dir:d,activationMode:b="automatic",...l}=e,i=k(d),[s,v]=L({prop:n,onChange:o,defaultProp:u??"",caller:y});return g.jsx(G,{scope:f,baseId:M(),value:s,onValueChange:v,orientation:r,dir:i,activationMode:b,children:g.jsx(p.div,{dir:i,"data-orientation":r,...l,ref:a})})},"Tabs")),J="TabsList",q=c.forwardRef(T(function(e,a){const{__scopeTabs:f,loop:n=!0,...o}=e,u=C(J,f),r=w(f);return g.jsx(S,{asChild:!0,...r,orientation:u.orientation,dir:u.dir,loop:n,children:g.jsx(p.div,{role:"tablist","aria-orientation":u.orientation,...o,ref:a})})},"TabsList")),W="TabsTrigger",Y=c.forwardRef(T(function(e,a){const{__scopeTabs:f,value:n,disabled:o=!1,...u}=e,r=C(W,f),d=w(f),b=R(r.baseId,n),l=h(r.baseId,n),i=n===r.value;return g.jsx(j,{asChild:!0,...d,focusable:!o,active:i,children:g.jsx(p.button,{type:"button",role:"tab","aria-selected":i,"aria-controls":l,"data-state":i?"active":"inactive","data-disabled":o?"":void 0,disabled:o,id:b,...u,ref:a,onMouseDown:m(e.onMouseDown,s=>{!o&&s.button===0&&s.ctrlKey===!1?r.onValueChange(n):s.preventDefault()}),onKeyDown:m(e.onKeyDown,s=>{o||s.target!==s.currentTarget||[" ","Enter"].includes(s.key)&&r.onValueChange(n)}),onFocus:m(e.onFocus,()=>{const s=r.activationMode!=="manual";!i&&!o&&s&&r.onValueChange(n)})})})},"TabsTrigger")),z="TabsContent",B=c.forwardRef(T(function(e,a){const{__scopeTabs:f,value:n,forceMount:o,children:u,...r}=e,d=C(z,f),b=R(d.baseId,n),l=h(d.baseId,n),i=n===d.value,s=c.useRef(i);return c.useEffect(()=>{const v=requestAnimationFrame(()=>s.current=!1);return()=>cancelAnimationFrame(v)},[]),g.jsx(A,{present:o||i,children:({present:v})=>g.jsx(p.div,{"data-state":i?"active":"inactive","data-orientation":d.orientation,role:"tabpanel","aria-labelledby":b,hidden:!v,id:l,tabIndex:0,...r,ref:a,style:{...e.style,animationDuration:s.current?"0s":void 0},children:v&&u})})},"TabsContent"));function R(t,e){return`${t}-trigger-${e}`}T(R,"makeTriggerId");function h(t,e){return`${t}-content-${e}`}T(h,"makeContentId");var H=K,_=q,I=Y,E=B;const te=H,U=c.forwardRef(({className:t,...e},a)=>g.jsx(_,{ref:a,className:x("inline-flex h-9 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",t),...e}));U.displayName=_.displayName;const Z=c.forwardRef(({className:t,...e},a)=>g.jsx(I,{ref:a,className:x("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",t),...e}));Z.displayName=I.displayName;const Q=c.forwardRef(({className:t,...e},a)=>g.jsx(E,{ref:a,className:x("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",t),...e}));Q.displayName=E.displayName;export{te as T,Q as a,U as b,Z as c,ee as u};
|
|
Binary file
|
|
Binary file
|
package/public/index.html
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
|
7
7
|
<title>tapflow</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-CBnxiD7-.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Ctx3_cYz.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|
package/public/index.html.br
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import{Y as J,a7 as o,am as en,a4 as n,K as q,z as Ct,T as ve,E as we,B as ee,y as Se,S as tn,s as Kn,a9 as at,ae as Fe,ag as Gn,u as Ie,t as bt,Q as nn,N as Ue,ad as qe,ak as qn,U as Jn,x as Zn,g as Qn,af as er,an as tr,al as nr,ac as rr,L as sr}from"./index-IvDXNTVd.js";import{f as or,a as ar,P as rn,c as $t,S as ir,b as cr}from"./build-format-D6egYX-U.js";import{u as sn,T as lr,b as ur,c as Bt,a as zt}from"./tabs-C9nZOMC5.js";import{D as on,a as an,d as dr,e as cn,b as fr,c as hr,k as pr,u as mr,S as gr,i as xr,j as br,g as yr,h as Ot}from"./dialog-Blqnc3tq.js";import{B as vr}from"./badge-CNtq_oBK.js";/**
|
|
2
|
-
* @license lucide-react v0.577.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const wr=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],Sr=J("arrow-left",wr);/**
|
|
7
|
-
* @license lucide-react v0.577.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const Rr=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],jr=J("arrow-up",Rr);/**
|
|
12
|
-
* @license lucide-react v0.577.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const kr=[["path",{d:"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",key:"18u6gg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]],Cr=J("camera",kr);/**
|
|
17
|
-
* @license lucide-react v0.577.0 - ISC
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the ISC license.
|
|
20
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const Er=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],Nr=J("download",Er);/**
|
|
22
|
-
* @license lucide-react v0.577.0 - ISC
|
|
23
|
-
*
|
|
24
|
-
* This source code is licensed under the ISC license.
|
|
25
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
26
|
-
*/const _r=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M7 3v18",key:"bbkbws"}],["path",{d:"M3 7.5h4",key:"zfgn84"}],["path",{d:"M3 12h18",key:"1i2n21"}],["path",{d:"M3 16.5h4",key:"1230mu"}],["path",{d:"M17 3v18",key:"in4fa5"}],["path",{d:"M17 7.5h4",key:"myr1c1"}],["path",{d:"M17 16.5h4",key:"go4c1d"}]],Tr=J("film",_r);/**
|
|
27
|
-
* @license lucide-react v0.577.0 - ISC
|
|
28
|
-
*
|
|
29
|
-
* This source code is licensed under the ISC license.
|
|
30
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
31
|
-
*/const Pr=[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]],ln=J("house",Pr);/**
|
|
32
|
-
* @license lucide-react v0.577.0 - ISC
|
|
33
|
-
*
|
|
34
|
-
* This source code is licensed under the ISC license.
|
|
35
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
36
|
-
*/const Ar=[["path",{d:"M16 5h6",key:"1vod17"}],["path",{d:"M19 2v6",key:"4bpg5p"}],["path",{d:"M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5",key:"1ue2ih"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}]],Dr=J("image-plus",Ar);/**
|
|
37
|
-
* @license lucide-react v0.577.0 - ISC
|
|
38
|
-
*
|
|
39
|
-
* This source code is licensed under the ISC license.
|
|
40
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
41
|
-
*/const Lr=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],Mr=J("info",Lr);/**
|
|
42
|
-
* @license lucide-react v0.577.0 - ISC
|
|
43
|
-
*
|
|
44
|
-
* This source code is licensed under the ISC license.
|
|
45
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
46
|
-
*/const Hr=[["path",{d:"M10 8h.01",key:"1r9ogq"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M14 8h.01",key:"1primd"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"M18 8h.01",key:"emo2bl"}],["path",{d:"M6 8h.01",key:"x9i8wu"}],["path",{d:"M7 16h10",key:"wp8him"}],["path",{d:"M8 12h.01",key:"czm47f"}],["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}]],Ur=J("keyboard",Hr);/**
|
|
47
|
-
* @license lucide-react v0.577.0 - ISC
|
|
48
|
-
*
|
|
49
|
-
* This source code is licensed under the ISC license.
|
|
50
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
51
|
-
*/const Fr=[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]],un=J("link-2",Fr);/**
|
|
52
|
-
* @license lucide-react v0.577.0 - ISC
|
|
53
|
-
*
|
|
54
|
-
* This source code is licensed under the ISC license.
|
|
55
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
56
|
-
*/const Ir=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],pt=J("loader-circle",Ir);/**
|
|
57
|
-
* @license lucide-react v0.577.0 - ISC
|
|
58
|
-
*
|
|
59
|
-
* This source code is licensed under the ISC license.
|
|
60
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
61
|
-
*/const $r=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],Br=J("message-square",$r);/**
|
|
62
|
-
* @license lucide-react v0.577.0 - ISC
|
|
63
|
-
*
|
|
64
|
-
* This source code is licensed under the ISC license.
|
|
65
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
66
|
-
*/const zr=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],Or=J("power",zr);/**
|
|
67
|
-
* @license lucide-react v0.577.0 - ISC
|
|
68
|
-
*
|
|
69
|
-
* This source code is licensed under the ISC license.
|
|
70
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
71
|
-
*/const Wr=[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]],Vr=J("rotate-cw",Wr);/**
|
|
72
|
-
* @license lucide-react v0.577.0 - ISC
|
|
73
|
-
*
|
|
74
|
-
* This source code is licensed under the ISC license.
|
|
75
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
76
|
-
*/const Xr=[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["path",{d:"M7 12h10",key:"b7w52i"}]],Yr=J("scan-line",Xr);/**
|
|
77
|
-
* @license lucide-react v0.577.0 - ISC
|
|
78
|
-
*
|
|
79
|
-
* This source code is licensed under the ISC license.
|
|
80
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
81
|
-
*/const Kr=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],Gr=J("square",Kr);/**
|
|
82
|
-
* @license lucide-react v0.577.0 - ISC
|
|
83
|
-
*
|
|
84
|
-
* This source code is licensed under the ISC license.
|
|
85
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
86
|
-
*/const qr=[["path",{d:"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5",key:"ftymec"}],["rect",{x:"2",y:"6",width:"14",height:"12",rx:"2",key:"158x01"}]],Jr=J("video",qr);/**
|
|
87
|
-
* @license lucide-react v0.577.0 - ISC
|
|
88
|
-
*
|
|
89
|
-
* This source code is licensed under the ISC license.
|
|
90
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
91
|
-
*/const Zr=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]],Qr=J("volume-2",Zr);/**
|
|
92
|
-
* @license lucide-react v0.577.0 - ISC
|
|
93
|
-
*
|
|
94
|
-
* This source code is licensed under the ISC license.
|
|
95
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
96
|
-
*/const es=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}]],ts=J("volume-1",es);function ns(e){const[t,r]=o.useState(null);return o.useEffect(()=>{e&&or(e).then(r)},[e]),{build:t}}function rs(e){const[t,r]=o.useState([]),[s,a]=o.useState(null),[i,c]=o.useState(null),[h,d]=o.useState(""),[m,p]=o.useState(!1),[x,u]=o.useState(""),b=o.useCallback(D=>{D.type==="agents:listed"&&r(D.sessions),D.type==="session:joined"&&(p(!1),u("Connected")),D.type==="error"&&(p(!1),u(`Error: ${D.message}`))},[]),{send:k,connected:L}=sn(b);o.useEffect(()=>{if(!L)return;k({type:"agents:list"});const D=setInterval(()=>k({type:"agents:list"}),5e3);return()=>clearInterval(D)},[L,k]);const C=o.useRef({sessionId:i,deviceId:h});o.useEffect(()=>{C.current={sessionId:i,deviceId:h}},[i,h]),o.useEffect(()=>()=>{const{sessionId:D,deviceId:B}=C.current;D&&B&&k({type:"device:shutdown",sessionId:D,payload:{deviceId:B}})},[k]);const N=t.filter(D=>D.devices.some(B=>B.platform===e)),j=o.useCallback(D=>{d(D.id),p(!0),u("Booting…"),c(D.sessionId)},[]),A=o.useCallback(()=>d(""),[]),_=o.useCallback(()=>{const{sessionId:D,deviceId:B}=C.current;D&&B&&k({type:"device:shutdown",sessionId:D,payload:{deviceId:B}}),c(null),p(!1),u("")},[k]),F=o.useCallback(()=>{const{sessionId:D,deviceId:B}=C.current;D&&B&&k({type:"device:shutdown",sessionId:D,payload:{deviceId:B}}),c(null),a(null),p(!1),u("")},[k]);return{sessions:t,selectedAgent:s,setSelectedAgent:a,activeSessionId:i,deviceId:h,booting:m,status:x,send:k,connected:L,agentGroups:N,startDevice:j,resetDevice:A,handleBack:_,handleBackToMacs:F}}function ss(e,t){const[r,s]=o.useState(""),[a,i]=o.useState(""),[c,h]=o.useState("app-only"),d=(e==null?void 0:e.devices.filter(x=>x.platform===t))??[],m=[...new Set(d.map(x=>x.osVersion).filter(Boolean))].sort((x,u)=>{const b=C=>C.replace(/^[^\d]*/,"").split(".").map(Number),[k,L]=[b(x),b(u)];for(let C=0;C<Math.max(k.length,L.length);C++){const N=(L[C]??0)-(k[C]??0);if(N!==0)return N}return 0}),p=(r?d.filter(x=>x.osVersion===r):d).filter(x=>!a||x.name.toLowerCase().includes(a.toLowerCase()));return{filteredDevices:d,osVersions:m,osVersion:r,setOsVersion:s,deviceSearch:a,setDeviceSearch:i,versionedDevices:p,resetMode:c,setResetMode:h}}function os(){const[e]=en(),t=e.get("perf")==="1",[r,s]=o.useState(t);return o.useEffect(()=>{if(!t){s(!1);return}s(!0);const a=i=>{i.ctrlKey&&i.shiftKey&&i.key==="P"&&s(c=>!c)};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[t]),{perfMode:t,visible:r}}const as=["video/mp4;codecs=avc1","video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function dn({sessionId:e,buildId:t,onRecordingUploaded:r}){const[s,a]=o.useState("idle"),i=o.useRef(null),c=o.useRef(r);o.useEffect(()=>{c.current=r},[r]);const h=o.useRef(!1),d=o.useRef(null),m=o.useRef([]),p=o.useRef(""),x=o.useRef(0),u=o.useRef(null),b=o.useCallback(()=>{var C;h.current&&((C=u.current)==null||C.call(u),x.current=requestAnimationFrame(b))},[]),k=o.useCallback(C=>{const N=i.current;if(!N)return;const j=N.getContext("2d");j&&(j.fillStyle="#000",j.fillRect(0,0,N.width,N.height));const A=as.find(F=>MediaRecorder.isTypeSupported(F))??"";if(!A)return;p.current=A,m.current=[];const _=new MediaRecorder(N.captureStream(30),{mimeType:A});_.ondataavailable=F=>{F.data.size>0&&m.current.push(F.data)},d.current=_,_.start(1e3),u.current=C,h.current=!0,x.current=requestAnimationFrame(b),a("recording")},[b]),L=o.useCallback(async()=>{var F;a("uploading"),h.current=!1,cancelAnimationFrame(x.current);const C=d.current;if(!C){a("idle");return}await new Promise(D=>{const B=setTimeout(D,5e3);C.onstop=()=>{clearTimeout(B),D()};try{C.stop()}catch{clearTimeout(B),D()}}),d.current=null;const N=p.current,j=N.includes("mp4")?".mp4":".webm",A=new Blob(m.current,{type:N});m.current=[];const _=new FormData;_.append("file",A,`tapflow-${Date.now()}${j}`);try{const D=new URLSearchParams({sessionId:e});t&&D.set("buildId",String(t));const B=await fetch(`/api/v1/recordings/upload?${D}`,{method:"POST",credentials:"include",body:_}),X=await B.json();if(B.ok&&X.url){const I=document.createElement("a");I.href=X.url,I.download="",I.click(),(F=c.current)==null||F.call(c),a("done"),setTimeout(()=>a("idle"),2e3)}else a("idle")}catch{a("idle")}},[e,t]);return o.useEffect(()=>{if(s!=="recording")return;const C=()=>{document.visibilityState==="hidden"&&L()};return document.addEventListener("visibilitychange",C),()=>{var N;document.removeEventListener("visibilitychange",C),h.current&&(h.current=!1,cancelAnimationFrame(x.current),(N=d.current)==null||N.stop(),d.current=null)}},[s,L]),{recordState:s,recordCanvasRef:i,startClientRecording:k,stopClientRecording:L}}function fn(){const e=o.useRef(0),[t,r]=o.useState(0);return o.useEffect(()=>{const s=setInterval(()=>{r(e.current),e.current=0},1e3);return()=>clearInterval(s)},[]),{fps:t,frameCount:e}}function Ge({className:e,...t}){return n.jsx("kbd",{"data-slot":"kbd",className:q("bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 select-none items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium","[&_svg:not([class*='size-'])]:size-3","[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10",e),...t})}function Et({className:e,...t}){return n.jsx("kbd",{"data-slot":"kbd-group",className:q("inline-flex items-center gap-1",e),...t})}function rt({label:e,keys:t}){return n.jsxs("span",{className:"flex items-center gap-3",children:[e,n.jsx(Et,{children:t.map(r=>n.jsx(Ge,{children:r},r))})]})}function hn({joined:e,onScreenshot:t,onRecordToggle:r,recordState:s,onRotate:a,onDeepLink:i,platformSlot:c,launchSlot:h}){return e?n.jsx(Ct,{delayDuration:400,children:n.jsxs("div",{className:"flex flex-col items-center gap-0.5 rounded-2xl border bg-background/90 backdrop-blur-sm px-1.5 py-2.5 shrink-0 mt-3",children:[h,c,n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:i,children:n.jsx(un,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:n.jsx(rt,{label:"Deeplink",keys:["⌘","K"]})})]}),n.jsx("div",{className:"w-4 h-px bg-border my-1"}),n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:t,children:n.jsx(Cr,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:n.jsx(rt,{label:"Screenshot",keys:["⌘","S"]})})]}),n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:q("h-8 w-8",s==="recording"&&"text-red-500 hover:text-red-500"),disabled:s==="uploading"||s==="done",onClick:r,children:s==="uploading"?n.jsx(pt,{className:"h-4 w-4 animate-spin"}):s==="recording"?n.jsx(Gr,{className:"h-4 w-4 fill-current"}):n.jsx(Jr,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:s==="idle"?n.jsx(rt,{label:"Start recording",keys:["⌘","⇧","Y"]}):s==="recording"?n.jsx(rt,{label:"Stop recording",keys:["⌘","⇧","Y"]}):"Processing…"})]}),n.jsx("div",{className:"w-4 h-px bg-border my-1"}),n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:a,children:n.jsx(Vr,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:n.jsx(rt,{label:"Rotate",keys:["⌘","⇧","O"]})})]})]})}):null}class Nt{constructor(t){this.bytes=t,this.bitPos=0}get position(){return this.bitPos}bit(){const t=this.bitPos>>3,r=7-(this.bitPos&7);return this.bitPos++,t>=this.bytes.length?0:this.bytes[t]>>r&1}bits(t){let r=0;for(let s=0;s<t;s++)r=r<<1|this.bit();return r>>>0}flag(){return this.bit()===1}ue(){let t=0;for(;this.bit()===0&&t<32;)t++;return t===0?0:(1<<t)-1+this.bits(t)}se(){const t=this.ue();return t&1?Math.ceil(t/2):-Math.ceil(t/2)}}class is{constructor(){this.bitsArr=[]}bit(t){this.bitsArr.push(t&1)}ue(t){const r=t+1,s=Math.floor(Math.log2(r));for(let a=0;a<s;a++)this.bit(0);for(let a=s;a>=0;a--)this.bit(r>>a&1)}toBytes(){const t=[];for(let r=0;r<this.bitsArr.length;r+=8){let s=0;for(let a=0;a<8;a++)s=s<<1|(this.bitsArr[r+a]??0);t.push(s)}return new Uint8Array(t)}}function pn(e){const t=[];let r=0;for(let s=1;s<e.length;s++){const a=e[s];if(r>=2&&a===3){r=0;continue}t.push(a),r=a===0?r+1:0}return new Uint8Array(t)}function cs(e){const t=[];let r=0;for(const s of e)r>=2&&s<=3&&(t.push(3),r=0),t.push(s),r=s===0?r+1:0;return new Uint8Array(t)}const ls=new Set([100,110,122,244,44,83,86,118,128,138,139,134,135]);function Wt(e){const t=e.ue()+1;e.bits(4),e.bits(4);for(let r=0;r<t;r++)e.ue(),e.ue(),e.flag();e.bits(5),e.bits(5),e.bits(5),e.bits(5)}function mn(e){const t=e.bits(8);e.bits(8);const r=e.bits(8);if(e.ue(),ls.has(t)){const x=e.ue();if(x===3&&e.flag(),e.ue(),e.ue(),e.flag(),e.flag()){const u=x!==3?8:12;for(let b=0;b<u;b++)if(e.flag()){const k=b<6?16:64;let L=8,C=8;for(let N=0;N<k;N++)C!==0&&(C=(L+e.se()+256)%256),L=C===0?L:C}}}e.ue();const s=e.ue();if(s===0)e.ue();else if(s===1){e.flag(),e.se(),e.se();const x=e.ue();for(let u=0;u<x;u++)e.se()}const a=e.ue();e.flag(),e.ue(),e.ue(),e.flag()||e.flag(),e.flag(),e.flag()&&(e.ue(),e.ue(),e.ue(),e.ue());const i={profileIdc:t,levelIdc:r,numRefFrames:a,bitstreamRestriction:!1,maxNumReorderFrames:null,maxDecFrameBuffering:null};if(!e.flag())return{...i,vuiPresent:!1,restrictionFlagPos:-1};e.flag()&&e.bits(8)===255&&(e.bits(16),e.bits(16)),e.flag()&&e.flag(),e.flag()&&(e.bits(3),e.flag(),e.flag()&&(e.bits(8),e.bits(8),e.bits(8))),e.flag()&&(e.ue(),e.ue()),e.flag()&&(e.bits(32),e.bits(32),e.flag());const h=e.flag();h&&Wt(e);const d=e.flag();d&&Wt(e),(h||d)&&e.flag(),e.flag();const m=e.position;return e.flag()?(e.flag(),e.ue(),e.ue(),e.ue(),e.ue(),{...i,vuiPresent:!0,bitstreamRestriction:!0,maxNumReorderFrames:e.ue(),maxDecFrameBuffering:e.ue(),restrictionFlagPos:m}):{...i,vuiPresent:!0,restrictionFlagPos:m}}function us(e){const t=mn(new Nt(pn(e)));return{profileIdc:t.profileIdc,levelIdc:t.levelIdc,vuiPresent:t.vuiPresent,bitstreamRestriction:t.bitstreamRestriction,maxNumReorderFrames:t.maxNumReorderFrames,maxDecFrameBuffering:t.maxDecFrameBuffering}}function ds(e){const t=pn(e),r=mn(new Nt(t));if(!r.vuiPresent||r.restrictionFlagPos<0||r.bitstreamRestriction)return null;const s=new is,a=new Nt(t);for(let i=0;i<r.restrictionFlagPos;i++)s.bit(a.bit());return s.bit(1),s.bit(1),s.ue(0),s.ue(0),s.ue(0),s.ue(0),s.ue(0),s.ue(r.numRefFrames),s.bit(1),Uint8Array.from([e[0],...cs(s.toBytes())])}function fs(e){const t=[],r=e.length;let s=-1,a=0;for(;a+2<r;){const i=a+3<r&&e[a]===0&&e[a+1]===0&&e[a+2]===0&&e[a+3]===1,c=e[a]===0&&e[a+1]===0&&e[a+2]===1;i||c?(s>=0&&t.push(e.subarray(s,a)),a+=i?4:3,s=a):a++}return s>=0&&t.push(e.subarray(s,r)),t}class hs{constructor(t){this.onFrame=t,this.decoder=null,this.sps=null,this.pps=null,this.frameCount=0,this.submitAt=new Map,this.spsLogged=!1}setDecodeSampler(t){this.decodeSampler=t}decode(t){const r=[];let s=!1;for(const m of fs(new Uint8Array(t))){const p=m[0]&31;if(p===7){const x=!this.sps||m.length!==this.sps.length||m.some((u,b)=>u!==this.sps[b]);this.sps=m,x&&this.decoder&&(this.decoder.close(),this.decoder=null)}else p===8?this.pps=m:p>=1&&p<=5&&(p===5&&(s=!0),r.push(m))}if(s&&this.sps&&this.pps&&!this.decoder&&this.initDecoder(this.sps,this.pps),!this.decoder||r.length===0)return;let a=0;for(const m of r)a+=4+m.length;const i=new Uint8Array(a),c=new DataView(i.buffer);let h=0;for(const m of r)c.setUint32(h,m.length,!1),h+=4,i.set(m,h),h+=m.length;const d=Math.round(this.frameCount++*(1e6/30));if(this.decodeSampler&&(this.submitAt.set(d,performance.now()),this.submitAt.size>120)){const m=this.submitAt.keys().next().value;m!==void 0&&this.submitAt.delete(m)}try{this.decoder.decode(new EncodedVideoChunk({type:s?"key":"delta",timestamp:d,data:i}))}catch{}}sampleDecode(t){var s;if(!this.decodeSampler)return;const r=this.submitAt.get(t.timestamp);r!==void 0&&(this.submitAt.delete(t.timestamp),this.decodeSampler({decodeMs:performance.now()-r,queueSize:((s=this.decoder)==null?void 0:s.decodeQueueSize)??0}))}close(){var t;(t=this.decoder)==null||t.close(),this.decoder=null}logSpsVui(t){if(!(this.spsLogged||!this.decodeSampler)){this.spsLogged=!0;try{console.log("[sps-vui]",JSON.stringify(us(t)))}catch(r){console.warn("[sps-vui] parse failed",r)}}}initDecoder(t,r){this.logSpsVui(t);const s=ds(t)??t,a=s[0]===0?s.subarray(4):s,i=`avc1.${a[1].toString(16).padStart(2,"0")}${a[2].toString(16).padStart(2,"0")}${a[3].toString(16).padStart(2,"0")}`,c=this.buildAVCC(s,r);this.decoder=new VideoDecoder({output:h=>{this.sampleDecode(h),this.onFrame(h)},error:h=>console.error("[WebCodecsCore]",h)}),this.decoder.configure({codec:i,description:c,optimizeForLatency:!0})}buildAVCC(t,r){const s=t[0]===0?t.subarray(4):t,a=r[0]===0?r.subarray(4):r,i=new Uint8Array(8+s.length+1+2+a.length);let c=0;return i[c++]=1,i[c++]=s[1],i[c++]=s[2],i[c++]=s[3],i[c++]=255,i[c++]=225,i[c++]=s.length>>8&255,i[c++]=s.length&255,i.set(s,c),c+=s.length,i[c++]=1,i[c++]=a.length>>8&255,i[c++]=a.length&255,i.set(a,c),i}}const ps=`#version 300 es
|
|
97
|
-
in vec2 a_pos;
|
|
98
|
-
out vec2 v_uv;
|
|
99
|
-
void main() {
|
|
100
|
-
v_uv = vec2(a_pos.x * 0.5 + 0.5, 0.5 - a_pos.y * 0.5);
|
|
101
|
-
gl_Position = vec4(a_pos, 0.0, 1.0);
|
|
102
|
-
}`,ms=`#version 300 es
|
|
103
|
-
precision mediump float;
|
|
104
|
-
in vec2 v_uv;
|
|
105
|
-
uniform sampler2D u_tex;
|
|
106
|
-
out vec4 out_color;
|
|
107
|
-
void main() {
|
|
108
|
-
out_color = texture(u_tex, v_uv);
|
|
109
|
-
}`;function gs(e){const t=e.getContext("webgl2",{alpha:!1,antialias:!1,powerPreference:"high-performance",preserveDrawingBuffer:!0});if(!t)return null;const r=(p,x)=>{const u=t.createShader(p);return t.shaderSource(u,x),t.compileShader(u),u},s=t.createProgram(),a=r(t.VERTEX_SHADER,ps),i=r(t.FRAGMENT_SHADER,ms);t.attachShader(s,a),t.attachShader(s,i),t.linkProgram(s),t.deleteShader(a),t.deleteShader(i),t.useProgram(s);const c=t.createVertexArray();t.bindVertexArray(c);const h=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),t.STATIC_DRAW);const d=t.getAttribLocation(s,"a_pos");t.enableVertexAttribArray(d),t.vertexAttribPointer(d,2,t.FLOAT,!1,0,0),t.bindVertexArray(null);const m=t.createTexture();return t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,m),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.uniform1i(t.getUniformLocation(s,"u_tex"),0),{gl:t,program:s,tex:m,vao:c}}class xs{constructor(t){this.canvas=t,this.state=null}init(){return this.state=gs(this.canvas),this.state!==null}drawFrame(t){const r=this.state;if(!r)return t.close(),null;const s=t.displayWidth,a=t.displayHeight;try{return(this.canvas.width!==s||this.canvas.height!==a)&&(this.canvas.width=s,this.canvas.height=a,r.gl.viewport(0,0,s,a)),r.gl.activeTexture(r.gl.TEXTURE0),r.gl.bindTexture(r.gl.TEXTURE_2D,r.tex),r.gl.texImage2D(r.gl.TEXTURE_2D,0,r.gl.RGBA,r.gl.RGBA,r.gl.UNSIGNED_BYTE,t),r.gl.bindVertexArray(r.vao),r.gl.drawArrays(r.gl.TRIANGLES,0,6),r.gl.bindVertexArray(null),r.gl.bindTexture(r.gl.TEXTURE_2D,null),{width:s,height:a}}finally{t.close()}}dispose(){const t=this.state;t&&(t.gl.deleteTexture(t.tex),t.gl.deleteVertexArray(t.vao),t.gl.deleteProgram(t.program),this.state=null)}}function bs(e){const t=new xs(e);return t.init(),t}class ys{constructor(t=bs){this._size=null,this.canvas=document.createElement("canvas"),this.renderer=t(this.canvas),this.core=new hs(r=>this.render(r))}get surface(){return this.canvas}get size(){return this._size}onResize(t){this.resizeCb=t}onDecodedFrame(t){this.decodedCb=t,this.core.setDecodeSampler(r=>{this.lastSample=r})}decode(t){this.core.decode(t)}close(){this.core.close(),this.renderer.dispose()}render(t){var s,a;const r=this.renderer.drawFrame(t);r&&((s=this.decodedCb)==null||s.call(this,performance.now(),this.lastSample),this.lastSample=void 0,(!this._size||this._size.width!==r.width||this._size.height!==r.height)&&(this._size=r,(a=this.resizeCb)==null||a.call(this,r)))}}const vs=`#version 300 es
|
|
110
|
-
in vec2 a_pos;
|
|
111
|
-
out vec2 v_uv;
|
|
112
|
-
void main() {
|
|
113
|
-
v_uv = vec2(a_pos.x * 0.5 + 0.5, 0.5 - a_pos.y * 0.5);
|
|
114
|
-
gl_Position = vec4(a_pos, 0.0, 1.0);
|
|
115
|
-
}`,ws=`#version 300 es
|
|
116
|
-
precision mediump float;
|
|
117
|
-
in vec2 v_uv;
|
|
118
|
-
uniform sampler2D u_texY;
|
|
119
|
-
uniform sampler2D u_texU;
|
|
120
|
-
uniform sampler2D u_texV;
|
|
121
|
-
out vec4 out_color;
|
|
122
|
-
void main() {
|
|
123
|
-
float Y = (texture(u_texY, v_uv).r - 0.0627451) * 1.1643836; // (y-16/255)*255/219
|
|
124
|
-
float U = (texture(u_texU, v_uv).r - 0.5019608) * 1.1383929; // (u-128/255)*255/224
|
|
125
|
-
float V = (texture(u_texV, v_uv).r - 0.5019608) * 1.1383929;
|
|
126
|
-
float r = Y + 1.5748 * V;
|
|
127
|
-
float g = Y - 0.1873 * U - 0.4681 * V;
|
|
128
|
-
float b = Y + 1.8556 * U;
|
|
129
|
-
out_color = vec4(r, g, b, 1.0);
|
|
130
|
-
}`;function Rt(e,t,r,s){const a=e.createTexture();return e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,a),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.uniform1i(e.getUniformLocation(s,r),t),a}function Ss(e){const t=e.getContext("webgl2",{alpha:!1,antialias:!1,powerPreference:"high-performance",preserveDrawingBuffer:!0});if(!t)return null;const r=(u,b)=>{const k=t.createShader(u);return t.shaderSource(k,b),t.compileShader(k),k},s=t.createProgram(),a=r(t.VERTEX_SHADER,vs),i=r(t.FRAGMENT_SHADER,ws);t.attachShader(s,a),t.attachShader(s,i),t.linkProgram(s),t.deleteShader(a),t.deleteShader(i),t.useProgram(s);const c=t.createVertexArray();t.bindVertexArray(c);const h=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),t.STATIC_DRAW);const d=t.getAttribLocation(s,"a_pos");t.enableVertexAttribArray(d),t.vertexAttribPointer(d,2,t.FLOAT,!1,0,0),t.bindVertexArray(null),t.pixelStorei(t.UNPACK_ALIGNMENT,1);const m=Rt(t,0,"u_texY",s),p=Rt(t,1,"u_texU",s),x=Rt(t,2,"u_texV",s);return{gl:t,program:s,texY:m,texU:p,texV:x,vao:c}}class Rs{constructor(t){this.canvas=t,this.state=null}init(){return this.state=Ss(this.canvas),this.state!==null}drawI420(t,r,s){const a=this.state;if(!a)return null;const{gl:i}=a,c=r+1>>1,h=s+1>>1,d=r*s,m=c*h,p=t.subarray(0,d),x=t.subarray(d,d+m),u=t.subarray(d+m,d+2*m);(this.canvas.width!==r||this.canvas.height!==s)&&(this.canvas.width=r,this.canvas.height=s,i.viewport(0,0,r,s));const b=(k,L,C,N,j)=>{i.activeTexture(i.TEXTURE0+k),i.bindTexture(i.TEXTURE_2D,L),i.texImage2D(i.TEXTURE_2D,0,i.R8,C,N,0,i.RED,i.UNSIGNED_BYTE,j)};return b(0,a.texY,r,s,p),b(1,a.texU,c,h,x),b(2,a.texV,c,h,u),i.bindVertexArray(a.vao),i.drawArrays(i.TRIANGLES,0,6),i.bindVertexArray(null),{width:r,height:s}}dispose(){const t=this.state;t&&(t.gl.deleteTexture(t.texY),t.gl.deleteTexture(t.texU),t.gl.deleteTexture(t.texV),t.gl.deleteVertexArray(t.vao),t.gl.deleteProgram(t.program),this.state=null)}}const js=0;function ks(e){const t=new Rs(e);return t.init(),t}function Cs(){return new Worker(new URL("/assets/tinyh264.worker-DiJ50Hai.js",import.meta.url),{type:"module"})}class Es{constructor(t=ks,r=Cs){this.ready=!1,this.pending=[],this._size=null,this.canvas=document.createElement("canvas"),this.renderer=t(this.canvas),this.worker=r(),this.worker.onmessage=s=>this.onMessage(s.data)}get surface(){return this.canvas}get size(){return this._size}onResize(t){this.resizeCb=t}onDecodedFrame(t){this.decodedCb=t}decode(t){if(!this.ready){this.pending.push(t);return}this.post(t)}close(){this.worker.terminate(),this.renderer.dispose()}post(t){this.worker.postMessage({type:"decode",data:t,offset:0,length:t.byteLength,renderStateId:js},[t])}onMessage(t){var s,a;if(t.type==="decoderReady"){this.ready=!0;for(const i of this.pending)this.post(i);this.pending.length=0;return}const r=this.renderer.drawI420(new Uint8Array(t.data),t.width,t.height);r&&((s=this.decodedCb)==null||s.call(this,performance.now()),(!this._size||this._size.width!==r.width||this._size.height!==r.height)&&(this._size=r,(a=this.resizeCb)==null||a.call(this,r)))}}function Tt(){const e=typeof window<"u";let t=!1;try{t=!!document.createElement("canvas").getContext("webgl2")}catch{t=!1}return{secureContext:e&&window.isSecureContext===!0,webCodecs:e&&"VideoDecoder"in window,webgl2:t,wasm:typeof WebAssembly<"u"&&typeof Worker<"u"}}function Ns(e=Tt()){return e.secureContext&&e.webCodecs&&e.webgl2?new ys:e.wasm&&e.webgl2?new Es:null}function _s(e=Tt()){return e.secureContext&&e.webCodecs&&e.webgl2||e.wasm&&e.webgl2}function Ts(e=Tt()){return e.secureContext&&e.webCodecs&&e.webgl2?"high":e.wasm&&e.webgl2?"standard":"unsupported"}const Vt="tapflow.perfModeNoticeDismissed",Ps="https://www.tapflow.dev/reference/configuration#https-secure-context";function As(e,t){return e==="standard"&&!t}function Ds({open:e,onOpenChange:t}){return n.jsx(on,{open:e,onOpenChange:t,children:n.jsxs(an,{className:"sm:max-w-[440px]",children:[n.jsxs(dr,{children:[n.jsx(cn,{children:"Streaming in Standard mode"}),n.jsxs(fr,{className:"space-y-3 pt-1",children:[n.jsx("span",{className:"block",children:"This screen is running in Standard mode. For a faster, smoother picture, switch to Smooth."}),n.jsx("span",{className:"block",children:"Smooth needs the relay served over HTTPS. If you didn't set up tapflow, ask whoever did."})]})]}),n.jsxs(hr,{children:[n.jsx(ee,{variant:"outline",onClick:()=>window.open(Ps,"_blank","noopener,noreferrer"),children:"How to enable"}),n.jsx(ee,{onClick:()=>t(!1),children:"Got it"})]})]})})}const Ls={high:"Smooth",standard:"Standard",unsupported:null};function Ms(e){const{connected:t,joined:r,bootError:s,deviceReady:a,installing:i,installError:c}=e;return t?r?s?`Boot failed: ${s.length>40?s.slice(0,40)+"…":s}`:a?i?"Installing app…":c?`Install failed: ${c}`:null:"Starting device…":"Joining session…":"Connecting…"}function Pt(e){const{joined:t,fps:r,keyboardActive:s}=e,a=Ms(e),i=r>15,c=i?"#10b981":"#94a3b8",h=i?"Active":"Idle",d=o.useMemo(()=>Ts(),[]),m=Ls[d],[p,x]=o.useState(!1);o.useEffect(()=>{let b=!1;try{b=localStorage.getItem(Vt)==="1"}catch{}As(d,b)&&x(!0)},[d]);const u=b=>{if(x(b),!b)try{localStorage.setItem(Vt,"1")}catch{}};return n.jsxs("div",{className:"w-[300px] shrink-0 mt-3 rounded-xl border bg-background px-4 py-4 flex flex-col gap-3",children:[n.jsxs("div",{className:q("flex items-center",s?"text-emerald-500":"text-muted-foreground"),style:{gap:6},children:[n.jsx(Yr,{className:"h-3.5 w-3.5 shrink-0"}),n.jsx("span",{className:"text-[12px] font-medium",children:"Focus"})]}),t&&n.jsxs("div",{className:"flex items-center gap-[12px]",children:[n.jsxs("div",{className:"flex items-center gap-[4px]",children:[n.jsx("span",{className:"h-2 w-2 rounded-full shrink-0 mr-1",style:{background:c}}),n.jsx("span",{className:"text-[12px] font-mono text-foreground/75",children:r}),n.jsx("span",{className:"text-[12px] text-muted-foreground",children:"fps"}),n.jsx("span",{className:"text-[11px] text-muted-foreground/60",children:"·"}),n.jsx("span",{className:q("text-[11px]",i?"text-emerald-500":"text-muted-foreground/60"),children:h})]}),m&&n.jsxs(n.Fragment,{children:[n.jsx(tn,{orientation:"vertical",className:"h-3"}),d==="standard"?n.jsx("button",{type:"button",onClick:()=>x(!0),className:"text-[11px] text-foreground/70 hover:text-foreground underline-offset-2 hover:underline",children:m}):n.jsx("span",{className:"text-[11px] text-muted-foreground",children:m})]})]}),a&&n.jsx("p",{className:"text-[12px] text-muted-foreground leading-relaxed break-all",children:a}),n.jsx(Ds,{open:p,onOpenChange:u})]})}function gn({open:e,onOpenChange:t,sessionId:r,send:s}){const[a,i]=o.useState(""),c=o.useRef(null);o.useEffect(()=>{e?setTimeout(()=>{var d;return(d=c.current)==null?void 0:d.focus()},0):i("")},[e]);const h=()=>{a.trim()&&(s({type:"open-url",sessionId:r,payload:{url:a.trim()}}),t(!1))};return n.jsx(on,{open:e,onOpenChange:t,children:n.jsxs(an,{className:"w-[500px] max-w-[500px] h-[52px] !rounded-[18px] p-[10px] border border-border bg-background shadow-lg overflow-hidden [&>button]:hidden","aria-describedby":void 0,children:[n.jsx(cn,{className:"sr-only",children:"Open Deeplink"}),n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsxs("div",{className:"flex-1 h-[32px] flex items-center gap-2 pl-[4px] pb-[1px]",children:[n.jsx(ar,{className:"h-4 w-4 text-muted-foreground shrink-0"}),n.jsx("input",{ref:c,className:"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground min-w-0",placeholder:"myapp://home...",value:a,onChange:d=>i(d.target.value),onKeyDown:d=>{d.key==="Enter"&&h()}})]}),n.jsx(ee,{size:"sm",disabled:!a.trim(),onClick:h,className:"shrink-0 rounded-xl h-8 px-4",children:"Open"})]})]})})}function Hs(e,t,r,s,a,i){const{x:c,y:h,width:d,height:m}=a;let p,x;if(i){const u=(e.x-t.left)/t.width;p=(1-(e.y-t.top)/t.height)*r,x=u*s}else p=(e.x-t.left)*(r/t.width),x=(e.y-t.top)*(s/t.height);return p<c||p>c+d||x<h||x>h+m?null:{x:(p-c)/d,y:(x-h)/m}}function Us(e,t,r){const s=(e.x-t.left)/t.width,a=(e.y-t.top)/t.height;return s<0||s>1||a<0||a>1?null:r?{x:a,y:1-s}:{x:s,y:a}}function xn(e){return{f0:{x:1-e.x,y:1-e.y},f1:e}}function Fs(e,t){return e>0?Math.min(1,t/e):1}const _t=22,Xt=[84,70,70,69],Is=1,$s=0,mt=1,bn=2,Bs=1,zs=2,Os=4;function Ws(e){if(e.byteLength<_t)return null;const t=new DataView(e);for(let a=0;a<Xt.length;a++)if(t.getUint8(a)!==Xt[a])return null;if(t.getUint8(4)!==Is)return null;const r=t.getUint8(5),s=r&Os?bn:r&Bs?mt:$s;return{capturedAt:Number(t.getBigUint64(6)),relayedAt:Number(t.getBigUint64(14)),codec:s,keyframe:s===mt&&(r&zs)!==0}}function yn(e){const{binaryFrameHandlerRef:t,perfHookRef:r,frameCount:s}=e,a=o.useRef(e);a.current=e,o.useEffect(()=>{let i=null,c=!1,h=!1,d;const m=()=>{if(i)return i;if(c)return null;const p=Ns();return p?(i=p,p.onResize(x=>a.current.onResize(x)),d=a.current.onDecoderReady(p),p):(c=!0,a.current.onUnsupported(),console.warn("[decoder] none available — set up HTTPS or use a supported browser"),null)};return t.current=(p,x)=>{const u=a.current.onJpegFrame;if(u&&(x==null?void 0:x.codec)!==mt){u(p,x);return}const b=m();if(b){if(!h){if(!(x!=null&&x.keyframe))return;h=!0}b.decode(p),s.current+=1}},()=>{t.current=void 0,typeof d=="function"&&d(),i==null||i.close(),i==null||i.surface.remove(),i=null}},[t,r,s])}const Ee=13,Ye=8,Yt=16,Vs=.02,Xs=100;function Ys({sessionId:e,buildId:t,send:r,connected:s,joined:a,deviceReady:i,installing:c,installed:h,installError:d,bootError:m,launching:p,setLaunching:x,chrome:u,binaryFrameHandlerRef:b,onRecordingUploaded:k,swKeyboardVisible:L,swKeyboardPending:C,onKbdToggle:N,perfHookRef:j}){const A=o.useRef(null),_=o.useRef(null),F=o.useRef(null),{fps:D,frameCount:B}=fn(),X=o.useRef(0),{recordState:I,recordCanvasRef:O,startClientRecording:Z,stopClientRecording:Re}=dn({sessionId:e,buildId:t,onRecordingUploaded:k}),fe=o.useRef(0),[ne,je]=o.useState(!1),[De,re]=o.useState(!1),[E,V]=o.useState(!1),[Y,ce]=o.useState(!1),[ke,se]=o.useState(null),[U,z]=o.useState(null),[le,Q]=o.useState(!1),[K,be]=o.useState(null),he=o.useRef(K);o.useEffect(()=>{he.current=K},[K]);const oe=o.useRef(null),ue=o.useRef(null),ae=o.useRef(!1),ie=o.useRef(!1),pe=o.useRef(0),te=o.useRef(null),me=o.useRef(null),Ce=o.useRef("idle"),_e=o.useRef(null),$e=o.useRef(null),Le=o.useRef(null);o.useEffect(()=>{Le.current=u},[u]),o.useEffect(()=>{const l=new Image;l.onload=()=>{$e.current=l},l.src=`data:image/png;base64,${u.framePng}`},[u.framePng]),yn({binaryFrameHandlerRef:b,perfHookRef:j,frameCount:B,onUnsupported:()=>{},onResize:l=>{const g=A.current;if(g&&(g.width!==l.width||g.height!==l.height)&&(g.width=l.width,g.height=l.height,!Le.current)){const f=O.current;f&&(f.width=l.width,f.height=l.height)}re(!0)},onDecoderReady:l=>{var y;const g=l.surface,f=A.current;g.style.position="absolute",f&&(g.style.left=f.style.left,g.style.top=f.style.top,g.style.width=f.style.width,g.style.height=f.style.height,g.style.borderRadius=f.style.borderRadius),g.style.objectFit="fill",g.style.zIndex="3",g.style.pointerEvents="none",(y=_.current)==null||y.appendChild(g);let S=null;const R=()=>{const P=A.current,M=P==null?void 0:P.getContext("2d");if(P&&M&&l.size)try{M.drawImage(l.surface,0,0,P.width,P.height)}catch{}S=requestAnimationFrame(R)};return S=requestAnimationFrame(R),()=>{S!==null&&cancelAnimationFrame(S)}},onJpegFrame:l=>{const g=performance.now();X.current&&g-X.current,X.current=g;const f=fe.current;createImageBitmap(new Blob([l],{type:"image/jpeg"})).then(S=>{if(performance.now()-g,fe.current!==f){S.close();return}const R=A.current,y=R==null?void 0:R.getContext("2d");if(!R||!y){S.close();return}if((R.width!==S.width||R.height!==S.height)&&(R.width=S.width,R.height=S.height,!Le.current)){const M=O.current;M&&(M.width=S.width,M.height=S.height)}const P=performance.now();y.drawImage(S,0,0),performance.now()-P,S.close(),re(!0),B.current+=1}).catch(()=>{})}}),o.useEffect(()=>{const l=O.current,g=_.current;l&&g&&(l.width=g.clientWidth,l.height=g.clientHeight)},[u]);const tt=o.useCallback(()=>{const l=O.current,g=A.current;if(!l||!g)return;const f=l.getContext("2d");if(!f)return;const S=Le.current;if(f.clearRect(0,0,l.width,l.height),S){$e.current&&f.drawImage($e.current,0,0,l.width,l.height);const P=Math.round(S.screenCornerRadius/2*(l.height/(S.compositeHeight/2)));f.save(),f.beginPath(),P>0?f.roundRect(g.offsetLeft,g.offsetTop,g.clientWidth,g.clientHeight,P):f.rect(g.offsetLeft,g.offsetTop,g.clientWidth,g.clientHeight),f.clip(),f.drawImage(g,g.offsetLeft,g.offsetTop,g.clientWidth,g.clientHeight),f.restore()}else f.drawImage(g,0,0,l.width,l.height);const R=he.current;if(R)for(const P of[R.f0,R.f1]){const M=S?g.offsetLeft+P.x*g.clientWidth:P.x*l.width,W=S?g.offsetTop+P.y*g.clientHeight:P.y*l.height;ae.current?(f.beginPath(),f.arc(M,W,Ye,0,Math.PI*2),f.fillStyle="rgba(255,255,255,0.92)",f.fill(),f.strokeStyle="rgba(0,0,0,0.2)",f.lineWidth=1,f.stroke()):(f.beginPath(),f.arc(M,W,Ee,0,Math.PI*2),f.strokeStyle="rgba(0,0,0,0.3)",f.lineWidth=3,f.stroke(),f.beginPath(),f.arc(M,W,Ee,0,Math.PI*2),f.strokeStyle="rgba(255,255,255,0.65)",f.lineWidth=1.5,f.stroke())}const y=me.current;if(y){const P=Ce.current,M=_e.current;if(f.save(),P==="down")f.beginPath(),f.arc(y.x,y.y,Ye,0,Math.PI*2),f.fillStyle="rgba(255,255,255,0.92)",f.fill(),f.strokeStyle="rgba(0,0,0,0.2)",f.lineWidth=1,f.stroke();else if(P==="release"&&M){const W=Math.min((performance.now()-M.startTime)/350,1);f.beginPath(),f.arc(y.x,y.y,Ye+26*W,0,Math.PI*2),f.strokeStyle=`rgba(255,255,255,${(1-W)*.55})`,f.lineWidth=1.5,f.stroke(),W>=1&&(Ce.current="idle",_e.current=null)}else f.beginPath(),f.arc(y.x,y.y,Ee,0,Math.PI*2),f.strokeStyle="rgba(0,0,0,0.3)",f.lineWidth=3,f.stroke(),f.beginPath(),f.arc(y.x,y.y,Ee,0,Math.PI*2),f.strokeStyle="rgba(255,255,255,0.65)",f.lineWidth=1.5,f.stroke();f.restore()}},[]),Be=o.useCallback(()=>{const l=A.current;if(!l)return;const g=document.createElement("canvas"),f=g.getContext("2d");f&&(g.width=l.width,g.height=l.height,f.drawImage(l,0,0),g.toBlob(S=>{if(!S)return;const R=URL.createObjectURL(S),y=document.createElement("a");y.href=R,y.download=`tapflow-${Date.now()}.png`,y.click(),URL.revokeObjectURL(R)},"image/png"))},[]),ye=o.useCallback(()=>{if(I==="idle"){const l=O.current;if(!l)return;const g=_.current;if(g&&g.clientWidth>0)l.width=g.clientWidth,l.height=g.clientHeight;else{const f=A.current;if(f&&f.width>0)l.width=f.width,l.height=f.height;else return}Z(tt)}else I==="recording"&&Re()},[I,Z,Re,tt]),Te=o.useCallback(()=>{r({type:"input:rotate",sessionId:e}),V(l=>!l)},[r,e]),it=o.useRef(E);o.useEffect(()=>{it.current=E},[E]),o.useEffect(()=>()=>{it.current&&r({type:"input:rotate",sessionId:e})},[]),o.useEffect(()=>{const l=new Set(["ShiftLeft","ShiftRight","ControlLeft","ControlRight","MetaLeft","MetaRight"]),g=y=>{if(y.code==="AltLeft"||y.code==="AltRight"){ie.current=!0;return}if(y.metaKey){const M=document.activeElement;if(!M||M.tagName!=="INPUT"&&M.tagName!=="TEXTAREA"){if(!y.shiftKey&&y.code==="KeyK"){y.preventDefault(),je(!0);return}if(!y.shiftKey&&y.code==="KeyS"){y.preventDefault(),Be();return}if(y.shiftKey&&y.code==="KeyY"){y.preventDefault(),ye();return}if(y.shiftKey&&y.code==="KeyO"){y.preventDefault(),Te();return}if(y.shiftKey&&y.code==="KeyU"){y.preventDefault(),r({type:"input:button",sessionId:e,payload:{name:"home"}});return}if(y.shiftKey&&y.code==="KeyK"){y.preventDefault(),C||N();return}}}if(!Y||l.has(y.code))return;y.preventDefault();const P=(y.shiftKey?2:0)|(y.ctrlKey?1:0)|(y.metaKey?8:0);r({type:"input:key",sessionId:e,payload:{code:y.code,modifiers:P}})},f=()=>{ae.current&&(ae.current=!1,Q(!1),r({type:"input:pinch:end",sessionId:e})),ie.current=!1,be(null)},S=y=>{(y.code==="AltLeft"||y.code==="AltRight")&&f()},R=()=>{ie.current&&f()};return window.addEventListener("keydown",g),window.addEventListener("keyup",S),window.addEventListener("blur",R),()=>{window.removeEventListener("keydown",g),window.removeEventListener("keyup",S),window.removeEventListener("blur",R)}},[Y,r,e,Be,ye,Te,N,C]),o.useEffect(()=>{if(!Y)return;const l=g=>{const f=_.current??A.current;f&&!f.contains(g.target)&&ce(!1)};return document.addEventListener("pointerdown",l),()=>document.removeEventListener("pointerdown",l)},[Y]);const Pe=o.useCallback(l=>{const g=(E?F.current:null)??_.current;if(!g)return null;const f=g.getBoundingClientRect(),S=u.compositeWidth/2,R=u.compositeHeight/2,y=u.screenRect.x/2,P=u.screenRect.y/2,M=u.screenRect.width/2,W=u.screenRect.height/2;return Hs({x:l.clientX,y:l.clientY},f,S,R,{x:y,y:P,width:M,height:W},E)},[u,E]),ze=o.useCallback(l=>{const g=Pe(l);return g?xn(g):null},[Pe]),Je=o.useCallback(l=>{const g=E?F.current:_.current;if(!g)return null;const f=g.getBoundingClientRect();let S,R;if(E){const P=f.height-(l.clientY-f.top),M=l.clientX-f.left;S=P*(u.compositeWidth/f.height),R=M*(u.compositeHeight/f.width)}else S=(l.clientX-f.left)*(u.compositeWidth/f.width),R=(l.clientY-f.top)*(u.compositeHeight/f.height);const y=u.screenRect;if(S>=y.x&&S<=y.x+y.width&&R>=y.y&&R<=y.y+y.height)return null;for(const P of u.buttons){const M=S-P.normalOffset.x,W=R-P.normalOffset.y;if(M*M+W*W<Xs**2)return P.name}return null},[u,E]),Oe=o.useCallback(l=>{const g=A.current,f=O.current;return g&&g.clientWidth>0?{x:g.offsetLeft+l.x*g.clientWidth,y:g.offsetTop+l.y*g.clientHeight}:{x:l.x*((f==null?void 0:f.width)??1),y:l.y*((f==null?void 0:f.height)??1)}},[]),ge=o.useCallback(l=>{if(ce(!0),ie.current){const y=ze(l);if(!y)return;ae.current=!0,Q(!0),l.target.setPointerCapture(l.pointerId),be(y),r({type:"input:pinch:start",sessionId:e,payload:y});return}const g=Je(l);if(g){oe.current=g,se(g),l.target.setPointerCapture(l.pointerId),r({type:"input:button",sessionId:e,payload:{name:g,phase:"down"}});return}const f=Pe(l);if(!f)return;ue.current=f,l.target.setPointerCapture(l.pointerId),me.current=Oe(f),Ce.current="down",_e.current=null;const S=l.currentTarget.getBoundingClientRect(),R=te.current;R&&(R.style.display="block",R.style.left=`${l.clientX-S.left}px`,R.style.top=`${l.clientY-S.top}px`,R.style.width=`${Ye*2}px`,R.style.height=`${Ye*2}px`,R.style.background="rgba(255,255,255,0.92)",R.style.border="1.5px solid rgba(0,0,0,0.2)",R.style.boxShadow="0 0 0 1px rgba(0,0,0,0.15), 0 0 8px rgba(255,255,255,0.25)"),r({type:"input:touch:start",sessionId:e,payload:f})},[Je,Pe,ze,Oe,r,e]),ct=o.useCallback(l=>{if(l.buttons===0){if(z(Je(l)),ie.current){be(ze(l)),me.current=null;const P=te.current;P&&(P.style.display="none")}else{be(null);const P=Pe(l);me.current=P?Oe(P):null,Ce.current!=="down"&&(Ce.current="idle");const M=te.current;if(M)if(P){const W=l.currentTarget.getBoundingClientRect();M.style.display="block",M.style.left=`${l.clientX-W.left}px`,M.style.top=`${l.clientY-W.top}px`,M.style.width=`${Ee*2}px`,M.style.height=`${Ee*2}px`,M.style.background="transparent",M.style.border="1.5px solid rgba(255,255,255,0.6)",M.style.boxShadow="0 0 0 1px rgba(0,0,0,0.3)"}else M.style.display="none"}return}if(ae.current){const P=ze(l);if(!P)return;const M=performance.now();if(M-pe.current<Yt)return;pe.current=M,be(P),r({type:"input:pinch:move",sessionId:e,payload:P});return}if(oe.current||!ue.current)return;const g=Pe(l);if(!g)return;const f=g.x-ue.current.x,S=g.y-ue.current.y;if(Math.sqrt(f*f+S*S)<Vs)return;const R=performance.now();if(R-pe.current<Yt)return;pe.current=R,me.current=Oe(g);const y=te.current;if(y&&y.style.display!=="none"){const P=l.currentTarget.getBoundingClientRect();y.style.left=`${l.clientX-P.left}px`,y.style.top=`${l.clientY-P.top}px`}r({type:"input:touch:move",sessionId:e,payload:g})},[Je,Pe,ze,Oe,r,e]),Me=o.useCallback(()=>{if(ae.current){ae.current=!1,Q(!1),be(null),r({type:"input:pinch:end",sessionId:e});return}if(ue.current=null,oe.current){r({type:"input:button",sessionId:e,payload:{name:oe.current,phase:"up"}}),oe.current=null,setTimeout(()=>se(null),100);return}Ce.current="release",_e.current={startTime:performance.now()};const l=te.current;l&&(l.style.width=`${Ee*2}px`,l.style.height=`${Ee*2}px`,l.style.background="transparent",l.style.border="1.5px solid rgba(255,255,255,0.6)",l.style.boxShadow="0 0 0 1px rgba(0,0,0,0.3)"),r({type:"input:touch:end",sessionId:e})},[r,e]),We=o.useCallback(()=>{if(ae.current){ae.current=!1,Q(!1),be(null),r({type:"input:pinch:end",sessionId:e});return}if(ue.current=null,oe.current){r({type:"input:button",sessionId:e,payload:{name:oe.current,phase:"up"}}),oe.current=null,se(null);return}Ce.current="release",_e.current={startTime:performance.now()},r({type:"input:touch:end",sessionId:e})},[r,e]),St=o.useCallback(()=>{z(null),be(null),me.current=null;const l=te.current;l&&(l.style.display="none")},[]),He=u.compositeWidth/2,lt=u.compositeHeight/2,Ze=Fs(lt,750),Ve=Math.round(He*Ze),Xe=Math.round(lt*Ze),Qe=u.screenRect.x/u.compositeWidth*100,v=u.screenRect.y/u.compositeHeight*100,T=u.screenRect.width/u.compositeWidth*100,$=u.screenRect.height/u.compositeHeight*100,w=Math.round(u.screenCornerRadius/2*Ze),G=n.jsxs(n.Fragment,{children:[n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>r({type:"input:button",sessionId:e,payload:{name:"home"}}),children:n.jsx(ln,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:n.jsxs("span",{className:"flex items-center gap-3",children:["Home ",n.jsxs(Et,{children:[n.jsx(Ge,{children:"⌘"}),n.jsx(Ge,{children:"⇧"}),n.jsx(Ge,{children:"U"})]})]})})]}),n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",disabled:C,onClick:N,"data-active":L,children:C?n.jsx(pt,{className:"h-4 w-4 animate-spin"}):n.jsx(Ur,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:n.jsxs("span",{className:"flex items-center gap-3",children:["Software keyboard ",n.jsxs(Et,{children:[n.jsx(Ge,{children:"⌘"}),n.jsx(Ge,{children:"⇧"}),n.jsx(Ge,{children:"K"})]})]})})]})]}),H=h&&t?n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",disabled:p,onClick:()=>{x(!0),r({type:"app:launch",sessionId:e,buildId:t})},children:p?n.jsx(pt,{className:"h-4 w-4 animate-spin"}):n.jsx(rn,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:p?"Launching…":"Launch app"})]}):null;return n.jsxs("div",{className:"flex items-start justify-center gap-16",children:[n.jsx("canvas",{ref:O,style:{display:"none"}}),n.jsx(gn,{open:ne,onOpenChange:je,sessionId:e,send:r}),n.jsx(hn,{joined:a,onDeepLink:()=>je(!0),onScreenshot:Be,onRecordToggle:ye,recordState:I,onRotate:Te,platformSlot:G,launchSlot:H}),n.jsxs("div",{className:"flex items-start gap-8",children:[n.jsxs("div",{ref:F,style:{width:E?Xe:Ve,height:E?Ve:Xe,position:"relative",flexShrink:0},children:[n.jsxs("div",{ref:_,className:`relative ${U?"cursor-pointer":"cursor-default"}`,style:{width:Ve,height:Xe,...E?{position:"absolute",top:(Ve-Xe)/2,left:(Xe-Ve)/2,transform:"rotate(-90deg)",transformOrigin:"center center"}:{}},onPointerDown:ge,onPointerMove:ct,onPointerUp:Me,onPointerCancel:We,onPointerLeave:St,children:[n.jsx("img",{src:`data:image/png;base64,${u.framePng}`,style:{position:"absolute",top:0,left:0,zIndex:2,width:"100%",height:"100%",display:"block",pointerEvents:"none",userSelect:"none"},draggable:!1,alt:""}),n.jsx("canvas",{ref:A,style:{position:"absolute",zIndex:3,left:`${Qe}%`,top:`${v}%`,width:`${T}%`,height:`${$}%`,borderRadius:w>0?`${w}px`:void 0,backgroundColor:"#010101",cursor:"none",visibility:De?"visible":"hidden"}}),!De&&n.jsx("div",{className:"absolute animate-pulse bg-zinc-700",style:{zIndex:3,left:`${Qe}%`,top:`${v}%`,width:`${T}%`,height:`${$}%`,borderRadius:w>0?`${w}px`:void 0}}),K&&(()=>{const l=Qe/100,g=v/100,f=T/100,S=$/100,R=(y,P)=>({left:`${(l+y*f)*100}%`,top:`${(g+P*S)*100}%`});return n.jsx(n.Fragment,{children:[K.f0,K.f1].map((y,P)=>n.jsx("div",{style:{position:"absolute",zIndex:10,borderRadius:"50%",transform:"translate(-50%, -50%)",pointerEvents:"none",transition:"width 0.1s ease, height 0.1s ease, background 0.1s ease",...le?{width:Ye*2,height:Ye*2,background:"rgba(255,255,255,0.92)",border:"1.5px solid rgba(0,0,0,0.2)",boxShadow:"0 0 0 1px rgba(0,0,0,0.15), 0 0 8px rgba(255,255,255,0.25)"}:{width:Ee*2,height:Ee*2,background:"transparent",border:"1.5px solid rgba(255,255,255,0.6)",boxShadow:"0 0 0 1px rgba(0,0,0,0.3)"},...R(y.x,y.y)}},P))})})(),a&&D===0&&n.jsx("div",{style:{position:"absolute",zIndex:8,left:`${Qe}%`,top:`${v}%`,width:`${T}%`,height:`${$}%`,display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"none"},children:n.jsx("span",{style:{color:"white",fontSize:"0.875rem"},children:"Waiting for first frame..."})}),u.buttons.map(l=>{const g=ke===l.name,f=U===l.name,S=l.anchor==="bottom",R=l.anchor==="top",y=S?(l.normalOffset.y-l.buttonH/2)/u.compositeHeight*100:R?l.rolloverOffset.y/u.compositeHeight*100:(l.normalOffset.y-l.buttonH/2)/u.compositeHeight*100,P=l.buttonH/u.compositeHeight*100,M=l.buttonW/u.compositeWidth*100,W=l.buttonW/2,de=(l.rolloverOffset.x-W)/u.compositeWidth*100,Ae=(2*l.rolloverOffset.x-l.normalOffset.x-W)/u.compositeWidth*100,ut=l.rolloverOffset.x/u.compositeWidth*100,nt=S?(l.normalOffset.y-l.buttonH/2)/u.compositeHeight*100:R?l.rolloverOffset.y/u.compositeHeight*100:(l.normalOffset.y-l.buttonH/2)/u.compositeHeight*100,It=R?(2*l.rolloverOffset.y-l.normalOffset.y)/u.compositeHeight*100:0,Yn=l.onTop?4:1;return n.jsxs(o.Fragment,{children:[l.buttonPng&&n.jsx("img",{src:`data:image/png;base64,${l.buttonPng}`,style:{position:"absolute",zIndex:Yn,top:`${R&&f?It:y}%`,left:`${R?de:f?Ae:de}%`,width:`${M}%`,height:`${P}%`,transition:R?"top 0.15s ease":"left 0.15s ease",pointerEvents:"none",userSelect:"none"},draggable:!1,alt:""}),g&&l.pressedPng&&l.pressedRect&&n.jsx("img",{src:`data:image/png;base64,${l.pressedPng}`,style:{position:"absolute",zIndex:l.onTop?3:1,left:`${R?de:f?Ae:de}%`,top:`${R&&f?It:y}%`,width:`${l.pressedRect.width/u.compositeWidth*100}%`,height:`${l.pressedRect.height/u.compositeHeight*100}%`,pointerEvents:"none",userSelect:"none"},draggable:!1,alt:""}),f&&n.jsx("div",{className:"bg-foreground/85 text-background text-[11px] px-[7px] py-1.5 rounded-lg whitespace-nowrap pointer-events-none",style:{position:"absolute",zIndex:5,left:`${ut}%`,top:`${nt}%`,transform:"translate(-50%, calc(-100% - 8px))"},children:l.accessibilityTitle})]},l.name)})]}),n.jsx("div",{ref:te,style:{display:"none",position:"absolute",zIndex:20,borderRadius:"50%",transform:"translate(-50%, -50%)",pointerEvents:"none",transition:"width 0.1s ease, height 0.1s ease, background 0.1s ease, box-shadow 0.1s ease"}})]}),n.jsx(Pt,{joined:a,fps:D,connected:s,deviceReady:i,bootError:m,installing:c,installError:d,keyboardActive:Y})]})]})}const Ke=13,st=8,Kt=16,Ks=.02,jt=720;function Gs({sessionId:e,buildId:t,send:r,connected:s,joined:a,deviceReady:i,installing:c,installed:h,installError:d,bootError:m,launching:p,setLaunching:x,androidButtons:u,binaryFrameHandlerRef:b,onRecordingUploaded:k,screenWidth:L,screenHeight:C,cornerRadius:N,perfHookRef:j}){const A=o.useRef(null),_=o.useRef(null),F=o.useRef(null),{fps:D,frameCount:B}=fn(),{recordState:X,recordCanvasRef:I,startClientRecording:O,stopClientRecording:Z}=dn({sessionId:e,buildId:t,onRecordingUploaded:k}),[Re,fe]=o.useState(!1),[ne,je]=o.useState(!1),[De,re]=o.useState(!1),E=o.useRef(null),[V,Y]=o.useState(null),[ce,ke]=o.useState(!1),[se,U]=o.useState(!1),[z,le]=o.useState(!1),[Q,K]=o.useState(null),be=o.useRef(Q);o.useEffect(()=>{be.current=Q},[Q]);const he=o.useRef(!1),oe=o.useRef(!1),ue=o.useRef(null),ae=o.useRef(0),ie=o.useRef(null),pe=o.useRef(null),te=o.useRef("idle"),me=o.useRef(null);yn({binaryFrameHandlerRef:b,perfHookRef:j,frameCount:B,onUnsupported:()=>re(!0),onResize:v=>{je(!0);const T=E.current;(!T||T.width!==v.width||T.height!==v.height)&&(E.current=v,Y(v))},onDecoderReady:v=>{var $;F.current=v;const T=v.surface;T.style.display="block",T.style.width="100%",T.style.height="100%",T.style.objectFit="fill",($=A.current)==null||$.appendChild(T)}});const Ce=o.useCallback(()=>{var M;const v=I.current,T=(M=F.current)==null?void 0:M.surface,$=E.current;if(!v||!T||!$)return;const w=v.getContext("2d");if(!w)return;const G=$.width,H=$.height,l=v.width>v.height!=G>H;w.save(),l&&(w.translate(v.width,0),w.rotate(Math.PI/2)),w.drawImage(T,0,0,G,H);const g=Math.max(G,H),f=g>jt?g/jt:1,S=Ke*f,R=st*f,y=be.current;if(y)for(const W of[y.f0,y.f1]){const de=W.x*G,Ae=W.y*H;he.current?(w.beginPath(),w.arc(de,Ae,R,0,Math.PI*2),w.fillStyle="rgba(255,255,255,0.92)",w.fill(),w.strokeStyle="rgba(0,0,0,0.2)",w.lineWidth=f,w.stroke()):(w.beginPath(),w.arc(de,Ae,S,0,Math.PI*2),w.strokeStyle="rgba(0,0,0,0.3)",w.lineWidth=3*f,w.stroke(),w.beginPath(),w.arc(de,Ae,S,0,Math.PI*2),w.strokeStyle="rgba(255,255,255,0.65)",w.lineWidth=1.5*f,w.stroke())}const P=pe.current;if(P){const W=P.x*G,de=P.y*H,Ae=te.current,ut=me.current;if(Ae==="down")w.beginPath(),w.arc(W,de,R,0,Math.PI*2),w.fillStyle="rgba(255,255,255,0.92)",w.fill(),w.strokeStyle="rgba(0,0,0,0.2)",w.lineWidth=f,w.stroke();else if(Ae==="release"&&ut){const nt=Math.min((performance.now()-ut.startTime)/350,1);w.beginPath(),w.arc(W,de,R+26*f*nt,0,Math.PI*2),w.strokeStyle=`rgba(255,255,255,${(1-nt)*.55})`,w.lineWidth=1.5*f,w.stroke(),nt>=1&&(te.current="idle",me.current=null)}else w.beginPath(),w.arc(W,de,S,0,Math.PI*2),w.strokeStyle="rgba(0,0,0,0.3)",w.lineWidth=3*f,w.stroke(),w.beginPath(),w.arc(W,de,S,0,Math.PI*2),w.strokeStyle="rgba(255,255,255,0.65)",w.lineWidth=1.5*f,w.stroke()}w.restore()},[]),_e=o.useCallback(()=>{var G;const v=(G=F.current)==null?void 0:G.surface,T=E.current;if(!v||!T)return;const $=document.createElement("canvas"),w=$.getContext("2d");w&&($.width=T.width,$.height=T.height,w.drawImage(v,0,0,T.width,T.height),$.toBlob(H=>{if(!H)return;const l=URL.createObjectURL(H),g=document.createElement("a");g.href=l,g.download=`tapflow-${Date.now()}.png`,g.click(),URL.revokeObjectURL(l)},"image/png"))},[]),$e=o.useCallback(()=>{if(X==="idle"){const v=I.current;if(!v)return;const T=E.current;if(!T)return;const $=Be.current;v.width=$?T.height:T.width,v.height=$?T.width:T.height,O(Ce)}else X==="recording"&&Z()},[X,O,Z,Ce]),Le=o.useCallback(()=>{r({type:"input:rotate",sessionId:e}),ke(v=>!v)},[r,e]),tt=o.useRef(ce);o.useEffect(()=>{tt.current=ce},[ce]),o.useEffect(()=>()=>{tt.current&&r({type:"input:rotate",sessionId:e})},[]),o.useEffect(()=>{const v=new Set(["ShiftLeft","ShiftRight","ControlLeft","ControlRight","MetaLeft","MetaRight"]),T=H=>{if(H.code==="AltLeft"||H.code==="AltRight"){oe.current=!0;return}if(H.metaKey){const g=document.activeElement;if(!g||g.tagName!=="INPUT"&&g.tagName!=="TEXTAREA"){if(!H.shiftKey&&H.code==="KeyK"){H.preventDefault(),fe(!0);return}if(!H.shiftKey&&H.code==="KeyS"){H.preventDefault(),_e();return}if(H.shiftKey&&H.code==="KeyY"){H.preventDefault(),$e();return}if(H.shiftKey&&H.code==="KeyO"){H.preventDefault(),Le();return}}}if(!se||v.has(H.code))return;H.preventDefault();const l=(H.shiftKey?2:0)|(H.ctrlKey?1:0)|(H.metaKey?8:0);r({type:"input:key",sessionId:e,payload:{code:H.code,modifiers:l}})},$=()=>{he.current&&(he.current=!1,le(!1),r({type:"input:pinch:end",sessionId:e})),oe.current=!1,K(null)},w=H=>{(H.code==="AltLeft"||H.code==="AltRight")&&$()},G=()=>{oe.current&&$()};return window.addEventListener("keydown",T),window.addEventListener("keyup",w),window.addEventListener("blur",G),()=>{window.removeEventListener("keydown",T),window.removeEventListener("keyup",w),window.removeEventListener("blur",G)}},[se,r,e,_e,$e,Le]),o.useEffect(()=>{if(!se)return;const v=T=>{const $=_.current??A.current;$&&!$.contains(T.target)&&U(!1)};return document.addEventListener("pointerdown",v),()=>document.removeEventListener("pointerdown",v)},[se]);const Be=o.useRef(!1),ye=o.useCallback(v=>{const T=A.current;if(!T)return null;const $=T.getBoundingClientRect();return Us({x:v.clientX,y:v.clientY},$,Be.current)},[]),Te=o.useCallback(v=>{const T=ye(v);return T?xn(T):null},[ye]),it=o.useCallback(v=>{if(oe.current){const G=Te(v);if(!G)return;he.current=!0,le(!0),v.target.setPointerCapture(v.pointerId);const H=ie.current;H&&(H.style.display="none"),K(G),r({type:"input:pinch:start",sessionId:e,payload:G});return}const T=ye(v);if(!T)return;U(!0),ue.current=T,v.target.setPointerCapture(v.pointerId);const $=v.currentTarget.getBoundingClientRect();pe.current=T,te.current="down",me.current=null;const w=ie.current;w&&(w.style.display="block",w.style.left=`${v.clientX-$.left}px`,w.style.top=`${v.clientY-$.top}px`,w.style.width=`${st*2}px`,w.style.height=`${st*2}px`,w.style.background="rgba(255,255,255,0.92)",w.style.border="1.5px solid rgba(0,0,0,0.2)",w.style.boxShadow="0 0 0 1px rgba(0,0,0,0.15), 0 0 8px rgba(255,255,255,0.25)"),r({type:"input:touch:start",sessionId:e,payload:T})},[ye,Te,r,e]),Pe=o.useCallback(v=>{if(v.buttons===0){if(oe.current){K(Te(v)),pe.current=null;const R=ie.current;R&&(R.style.display="none");return}const g=ye(v),f=v.currentTarget.getBoundingClientRect(),S=ie.current;g?(pe.current=g,te.current!=="down"&&(te.current="idle"),S&&(S.style.display="block",S.style.left=`${v.clientX-f.left}px`,S.style.top=`${v.clientY-f.top}px`,S.style.width=`${Ke*2}px`,S.style.height=`${Ke*2}px`,S.style.background="transparent",S.style.border="1.5px solid rgba(255,255,255,0.6)",S.style.boxShadow="0 0 0 1px rgba(0,0,0,0.3)")):(pe.current=null,S&&(S.style.display="none"));return}if(he.current){const g=Te(v);if(!g)return;const f=performance.now();if(f-ae.current<Kt)return;ae.current=f,K(g),r({type:"input:pinch:move",sessionId:e,payload:g});return}if(!ue.current)return;const T=ye(v);if(!T)return;const $=T.x-ue.current.x,w=T.y-ue.current.y;if(Math.sqrt($*$+w*w)<Ks)return;const G=performance.now();if(G-ae.current<Kt)return;ae.current=G;const H=v.currentTarget.getBoundingClientRect();pe.current=T;const l=ie.current;l&&l.style.display!=="none"&&(l.style.left=`${v.clientX-H.left}px`,l.style.top=`${v.clientY-H.top}px`),r({type:"input:touch:move",sessionId:e,payload:T})},[ye,Te,r,e]),ze=o.useCallback(()=>{if(he.current){he.current=!1,le(!1),K(null),r({type:"input:pinch:end",sessionId:e});return}ue.current=null,te.current="release",me.current={startTime:performance.now()};const v=ie.current;v&&(v.style.width=`${Ke*2}px`,v.style.height=`${Ke*2}px`,v.style.background="transparent",v.style.border="1.5px solid rgba(255,255,255,0.6)",v.style.boxShadow="0 0 0 1px rgba(0,0,0,0.3)"),r({type:"input:touch:end",sessionId:e})},[r,e]),Je=o.useCallback(()=>{if(he.current){he.current=!1,le(!1),K(null),r({type:"input:pinch:end",sessionId:e});return}ue.current=null,te.current="release",me.current={startTime:performance.now()},r({type:"input:touch:end",sessionId:e})},[r,e]),Oe=o.useCallback(()=>{K(null),pe.current=null;const v=ie.current;v&&(v.style.display="none")},[]),ge=V??(L&&C?{width:L,height:C}:null),ct=ge?Math.min(1,jt/Math.max(ge.width,ge.height)):.3,Me=ge?Math.round(ge.width*ct):324,We=ge?Math.round(ge.height*ct):720,St=ge?ge.width>ge.height:!1,He=ce&&!St;o.useLayoutEffect(()=>{Be.current=He},[He]);const lt=He?We:Me,Ft=He?Me:We,Ze=N!=null?Math.round(N*Me):22,Ve=He?{position:"absolute",width:Me,height:We,top:(Me-We)/2,left:(We-Me)/2,transform:"rotate(90deg)",transformOrigin:"center center",visibility:ne?"visible":"hidden",cursor:"none"}:{visibility:ne?"visible":"hidden",cursor:"none"},Xe=n.jsx(n.Fragment,{children:u==null?void 0:u.map(v=>n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>r({type:"input:button",sessionId:e,payload:{name:v.name}}),children:v.name==="back"?n.jsx(Sr,{className:"h-4 w-4"}):v.name==="recent_apps"?n.jsx(Kn,{className:"h-4 w-4"}):v.name==="volume_up"?n.jsx(Qr,{className:"h-4 w-4"}):v.name==="volume_down"?n.jsx(ts,{className:"h-4 w-4"}):v.name==="power"?n.jsx(Or,{className:"h-4 w-4"}):n.jsx(ln,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:v.accessibilityTitle})]},v.name))}),Qe=h&&t?n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",disabled:p||c,onClick:()=>{x(!0),r({type:"app:launch",sessionId:e,buildId:t})},children:p?n.jsx(pt,{className:"h-4 w-4 animate-spin"}):n.jsx(rn,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:p?"Launching…":c?"Installing…":"Launch app"})]}):null;return n.jsxs("div",{className:"flex items-start justify-center gap-16",children:[n.jsx("canvas",{ref:I,style:{display:"none"}}),n.jsx(gn,{open:Re,onOpenChange:fe,sessionId:e,send:r}),n.jsx(hn,{joined:a,onDeepLink:()=>fe(!0),onScreenshot:_e,onRecordToggle:$e,recordState:X,onRotate:Le,platformSlot:Xe,launchSlot:Qe}),n.jsxs("div",{className:"flex items-start gap-8",children:[n.jsx("div",{style:{background:"#1c1c1e",borderRadius:`${Ze+12}px`,padding:"12px",flexShrink:0,boxShadow:"0 8px 32px rgba(0,0,0,0.45), inset 0 1px 0 rgba(255,255,255,0.06)"},children:n.jsx("div",{ref:_,className:"relative",style:{width:lt,height:Ft,backgroundColor:"#010101",borderRadius:`${Ze}px`,overflow:"hidden"},children:De?n.jsx("div",{className:"absolute inset-0 flex items-center justify-center p-4 text-center",children:n.jsxs("span",{style:{color:"rgba(255,255,255,0.6)",fontSize:"0.875rem"},children:["이 환경에서는 스트리밍을 표시할 수 없습니다.",n.jsx("br",{}),"Chrome/Edge 또는 HTTPS 환경에서 다시 시도해 주세요."]})}):n.jsxs(n.Fragment,{children:[n.jsx("div",{ref:A,className:He?void 0:"block w-full h-full",style:Ve,onPointerDown:it,onPointerMove:Pe,onPointerUp:ze,onPointerCancel:Je,onPointerLeave:Oe}),!ne&&n.jsx("div",{className:"absolute inset-0 animate-pulse bg-zinc-700"}),!ne&&i&&n.jsx("div",{className:"absolute inset-0 flex items-center justify-center pointer-events-none",children:n.jsx("span",{style:{color:"rgba(255,255,255,0.6)",fontSize:"0.875rem"},children:"Waiting for stream…"})}),n.jsx("div",{ref:ie,style:{display:"none",position:"absolute",zIndex:20,borderRadius:"50%",transform:"translate(-50%, -50%)",pointerEvents:"none",transition:"width 0.1s ease, height 0.1s ease, background 0.1s ease, box-shadow 0.1s ease"}}),Q&&n.jsx(n.Fragment,{children:[Q.f0,Q.f1].map((v,T)=>n.jsx("div",{style:{position:"absolute",zIndex:10,borderRadius:"50%",transform:"translate(-50%, -50%)",pointerEvents:"none",transition:"width 0.1s ease, height 0.1s ease, background 0.1s ease",left:`${v.x*100}%`,top:`${v.y*100}%`,...z?{width:st*2,height:st*2,background:"rgba(255,255,255,0.92)",border:"1.5px solid rgba(0,0,0,0.2)",boxShadow:"0 0 0 1px rgba(0,0,0,0.15), 0 0 8px rgba(255,255,255,0.25)"}:{width:Ke*2,height:Ke*2,background:"transparent",border:"1.5px solid rgba(255,255,255,0.6)",boxShadow:"0 0 0 1px rgba(0,0,0,0.3)"}}},T))})]})})}),n.jsx(Pt,{joined:a,fps:D,connected:s,deviceReady:i,bootError:m,installing:c,installError:d,keyboardActive:se})]})]})}function qs(e,t){const r=new DataView(e),s=Math.floor(e.byteLength/2),a=Math.floor(s/t),i=[];for(let c=0;c<t;c++)i.push(new Float32Array(a));for(let c=0;c<a;c++)for(let h=0;h<t;h++){const d=r.getInt16((c*t+h)*2,!0);i[h][c]=d/32768}return i}const Js=44100,kt=2,Gt=.06,Zs=.3;function Qs(){const e=o.useRef(null),t=o.useRef(0),r=o.useCallback(()=>{if(e.current)return e.current;const a=window.AudioContext??window.webkitAudioContext;return a?(e.current=new a,e.current):null},[]),s=o.useCallback(a=>{var u;const i=r();if(!i)return;i.state==="suspended"&&i.resume();const c=qs(a,kt),h=((u=c[0])==null?void 0:u.length)??0;if(h===0)return;const d=i.createBuffer(kt,h,Js);for(let b=0;b<kt;b++)d.getChannelData(b).set(c[b]);const m=i.createBufferSource();m.buffer=d,m.connect(i.destination);const p=i.currentTime;let x=t.current;(x<p+.005||x>p+Zs+Gt)&&(x=p+Gt),m.start(x),t.current=x+d.duration},[r]);return o.useEffect(()=>()=>{var a;(a=e.current)==null||a.close(),e.current=null},[]),{pushFrame:s}}function eo({sessionId:e,deviceId:t,buildId:r,resetMode:s,onRecordingUploaded:a}){const i=o.useRef(()=>{});os();const c=o.useRef(null),h=o.useRef(null),d=o.useRef([]);o.useRef({onFrameBegin:()=>{var U;return(U=c.current)==null?void 0:U.onFrameBegin()},onFrameEnd:U=>{var Q,K;const z=d.current.shift()??null,le=z?{...U,capturedAt:z.capturedAt,relayedAt:z.relayedAt}:U;(Q=c.current)==null||Q.onFrameEnd(le),(K=h.current)==null||K.call(h,le)}});const[m,p]=o.useState(!1),[x,u]=o.useState(!1),[b,k]=o.useState(null),[L,C]=o.useState(!1),[N,j]=o.useState(!1),[A,_]=o.useState(null),[F,D]=o.useState(null),[B,X]=o.useState(!1),[I,O]=o.useState(!1),[Z,Re]=o.useState(!1),fe=o.useRef(void 0),{pushFrame:ne}=Qs(),je=o.useCallback(U=>{if(U.type==="session:joined"&&(p(!0),i.current({type:"device:boot",sessionId:e,payload:{deviceId:t,resetMode:s,acceptH264:_s(),secureContext:window.isSecureContext}})),U.type==="device:boot-error"&&D(U.message),U.type==="device:booting"&&(u(!1),C(!1),j(!1),_(null),D(null),k(null)),U.type==="device:ready"&&(u(!0),r&&(C(!0),i.current({type:"app:install",sessionId:e,buildId:r}))),U.type==="app:install-done"&&(C(!1),j(!0)),U.type==="app:install-error"&&(C(!1),_(U.message)),U.type==="app:launch-done"&&X(!1),U.type==="app:launch-error"&&X(!1),U.type==="session:chrome"&&k(U.payload),U.type==="keyboard:toggled"){const{visible:z}=U.payload;O(z),Re(!1)}U.type==="open-url:done"&&at.success("Deeplink opened"),U.type==="open-url:error"&&at.error(U.message),U.type==="error"&&U.message==="Agent resources exhausted"&&at.error("Could not start session — this Mac is currently overloaded.",{description:"Go back and select a different Mac."})},[e,t,r]),De=o.useCallback(U=>{var K;const z=Ws(U);if(z&&z.codec===bn){ne(U.slice(_t));return}z&&z.codec===mt||d.current.push(z);const le=z?U.slice(_t):U,Q=z?{codec:z.codec,keyframe:z.keyframe,capturedAt:z.capturedAt,relayedAt:z.relayedAt}:void 0;(K=fe.current)==null||K.call(fe,le,Q)},[ne]),{send:re,connected:E}=sn(je,De);o.useLayoutEffect(()=>{i.current=re}),o.useEffect(()=>{E&&re({type:"session:start",sessionId:e})},[E,re,e]);const V=b!==null&&"framePng"in b?b:null,Y=b!==null&&!("framePng"in b)?b:null,ke={sessionId:e,buildId:r,send:re,connected:E,joined:m,deviceReady:x,installing:L,installed:N,installError:A,bootError:F,launching:B,setLaunching:X,binaryFrameHandlerRef:fe,onRecordingUploaded:a,swKeyboardVisible:I,swKeyboardPending:Z,onKbdToggle:()=>{Re(!0),re({type:"input:keyboard:toggle",sessionId:e})}};if(!V&&!Y)return n.jsxs("div",{className:"flex items-start justify-center gap-16",children:[n.jsx("div",{className:"flex flex-col items-center gap-0.5 rounded-2xl border bg-background/90 px-1.5 py-2.5 shrink-0 mt-3 opacity-40",children:Array.from({length:5}).map((U,z)=>n.jsx("div",{className:"h-8 w-8 rounded-md bg-muted animate-pulse"},z))}),n.jsxs("div",{className:"flex items-start gap-8",children:[n.jsx("div",{style:{background:"#1c1c1e",borderRadius:"34px",padding:"12px",flexShrink:0},children:n.jsx("div",{className:"animate-pulse bg-zinc-700",style:{width:324,height:720,borderRadius:"22px"}})}),n.jsx(Pt,{joined:m,fps:0,connected:E,deviceReady:x,bootError:F,installing:L,installError:A,keyboardActive:!1})]})]});const se=void 0;return n.jsxs(n.Fragment,{children:[V&&n.jsx(Ys,{...ke,chrome:V,perfHookRef:se}),Y&&n.jsx(Gs,{...ke,androidButtons:Y.buttons,screenWidth:Y.screenWidth,screenHeight:Y.screenHeight,cornerRadius:Y.cornerRadius,perfHookRef:se}),!1]})}const vn=o.forwardRef(({className:e,...t},r)=>n.jsx("textarea",{className:q("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:r,...t}));vn.displayName="Textarea";function to(e,t){return o.useReducer((r,s)=>t[r][s]??r,e)}var At="ScrollArea",[wn]=nn(At),[no,xe]=wn(At),Sn=o.forwardRef((e,t)=>{const{__scopeScrollArea:r,type:s="hover",dir:a,scrollHideDelay:i=600,...c}=e,[h,d]=o.useState(null),[m,p]=o.useState(null),[x,u]=o.useState(null),[b,k]=o.useState(null),[L,C]=o.useState(null),[N,j]=o.useState(0),[A,_]=o.useState(0),[F,D]=o.useState(!1),[B,X]=o.useState(!1),I=Fe(t,d),O=Gn(a);return n.jsx(no,{scope:r,type:s,dir:O,scrollHideDelay:i,scrollArea:h,viewport:m,onViewportChange:p,content:x,onContentChange:u,scrollbarX:b,onScrollbarXChange:k,scrollbarXEnabled:F,onScrollbarXEnabledChange:D,scrollbarY:L,onScrollbarYChange:C,scrollbarYEnabled:B,onScrollbarYEnabledChange:X,onCornerWidthChange:j,onCornerHeightChange:_,children:n.jsx(Ie.div,{dir:O,...c,ref:I,style:{position:"relative","--radix-scroll-area-corner-width":N+"px","--radix-scroll-area-corner-height":A+"px",...e.style}})})});Sn.displayName=At;var Rn="ScrollAreaViewport",jn=o.forwardRef((e,t)=>{const{__scopeScrollArea:r,children:s,nonce:a,...i}=e,c=xe(Rn,r),h=o.useRef(null),d=Fe(t,h,c.onViewportChange);return n.jsxs(n.Fragment,{children:[n.jsx(ro,{nonce:a}),n.jsx(Ie.div,{"data-radix-scroll-area-viewport":"",...i,ref:d,style:{overflowX:c.scrollbarXEnabled?"scroll":"hidden",overflowY:c.scrollbarYEnabled?"scroll":"hidden",...e.style},children:n.jsx("div",{ref:c.onContentChange,style:{minWidth:"100%",display:"table"},children:s})})]})});jn.displayName=Rn;var ro=o.memo(({nonce:e})=>n.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:e}),(e,t)=>e.nonce===t.nonce),Ne="ScrollAreaScrollbar",Dt=o.forwardRef((e,t)=>{const{forceMount:r,...s}=e,a=xe(Ne,e.__scopeScrollArea),{onScrollbarXEnabledChange:i,onScrollbarYEnabledChange:c}=a,h=e.orientation==="horizontal";return o.useEffect(()=>(h?i(!0):c(!0),()=>{h?i(!1):c(!1)}),[h,i,c]),a.type==="hover"?n.jsx(so,{...s,ref:t,forceMount:r}):a.type==="scroll"?n.jsx(oo,{...s,ref:t,forceMount:r}):a.type==="auto"?n.jsx(kn,{...s,ref:t,forceMount:r}):a.type==="always"?n.jsx(Lt,{...s,ref:t,"data-state":"visible"}):null});Dt.displayName=Ne;var so=o.forwardRef((e,t)=>{const{forceMount:r,...s}=e,a=xe(Ne,e.__scopeScrollArea),[i,c]=o.useState(!1);return o.useEffect(()=>{const h=a.scrollArea;let d=0;if(h){const m=()=>{window.clearTimeout(d),c(!0)},p=()=>{d=window.setTimeout(()=>c(!1),a.scrollHideDelay)};return h.addEventListener("pointerenter",m),h.addEventListener("pointerleave",p),()=>{window.clearTimeout(d),h.removeEventListener("pointerenter",m),h.removeEventListener("pointerleave",p)}}},[a.scrollArea,a.scrollHideDelay]),n.jsx(bt,{present:r||i,children:n.jsx(kn,{"data-state":i?"visible":"hidden",...s,ref:t})})}),oo=o.forwardRef((e,t)=>{const{forceMount:r,...s}=e,a=xe(Ne,e.__scopeScrollArea),i=e.orientation==="horizontal",c=vt(()=>d("SCROLL_END"),100),[h,d]=to("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return o.useEffect(()=>{if(h==="idle"){const m=window.setTimeout(()=>d("HIDE"),a.scrollHideDelay);return()=>window.clearTimeout(m)}},[h,a.scrollHideDelay,d]),o.useEffect(()=>{const m=a.viewport,p=i?"scrollLeft":"scrollTop";if(m){let x=m[p];const u=()=>{const b=m[p];x!==b&&(d("SCROLL"),c()),x=b};return m.addEventListener("scroll",u),()=>m.removeEventListener("scroll",u)}},[a.viewport,i,d,c]),n.jsx(bt,{present:r||h!=="hidden",children:n.jsx(Lt,{"data-state":h==="hidden"?"hidden":"visible",...s,ref:t,onPointerEnter:Ue(e.onPointerEnter,()=>d("POINTER_ENTER")),onPointerLeave:Ue(e.onPointerLeave,()=>d("POINTER_LEAVE"))})})}),kn=o.forwardRef((e,t)=>{const r=xe(Ne,e.__scopeScrollArea),{forceMount:s,...a}=e,[i,c]=o.useState(!1),h=e.orientation==="horizontal",d=vt(()=>{if(r.viewport){const m=r.viewport.offsetWidth<r.viewport.scrollWidth,p=r.viewport.offsetHeight<r.viewport.scrollHeight;c(h?m:p)}},10);return et(r.viewport,d),et(r.content,d),n.jsx(bt,{present:s||i,children:n.jsx(Lt,{"data-state":i?"visible":"hidden",...a,ref:t})})}),Lt=o.forwardRef((e,t)=>{const{orientation:r="vertical",...s}=e,a=xe(Ne,e.__scopeScrollArea),i=o.useRef(null),c=o.useRef(0),[h,d]=o.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),m=Tn(h.viewport,h.content),p={...s,sizes:h,onSizesChange:d,hasThumb:m>0&&m<1,onThumbChange:u=>i.current=u,onThumbPointerUp:()=>c.current=0,onThumbPointerDown:u=>c.current=u};function x(u,b){return fo(u,c.current,h,b)}return r==="horizontal"?n.jsx(ao,{...p,ref:t,onThumbPositionChange:()=>{if(a.viewport&&i.current){const u=a.viewport.scrollLeft,b=qt(u,h,a.dir);i.current.style.transform=`translate3d(${b}px, 0, 0)`}},onWheelScroll:u=>{a.viewport&&(a.viewport.scrollLeft=u)},onDragScroll:u=>{a.viewport&&(a.viewport.scrollLeft=x(u,a.dir))}}):r==="vertical"?n.jsx(io,{...p,ref:t,onThumbPositionChange:()=>{if(a.viewport&&i.current){const u=a.viewport.scrollTop,b=qt(u,h);i.current.style.transform=`translate3d(0, ${b}px, 0)`}},onWheelScroll:u=>{a.viewport&&(a.viewport.scrollTop=u)},onDragScroll:u=>{a.viewport&&(a.viewport.scrollTop=x(u))}}):null}),ao=o.forwardRef((e,t)=>{const{sizes:r,onSizesChange:s,...a}=e,i=xe(Ne,e.__scopeScrollArea),[c,h]=o.useState(),d=o.useRef(null),m=Fe(t,d,i.onScrollbarXChange);return o.useEffect(()=>{d.current&&h(getComputedStyle(d.current))},[d]),n.jsx(En,{"data-orientation":"horizontal",...a,ref:m,sizes:r,style:{bottom:0,left:i.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:i.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":yt(r)+"px",...e.style},onThumbPointerDown:p=>e.onThumbPointerDown(p.x),onDragScroll:p=>e.onDragScroll(p.x),onWheelScroll:(p,x)=>{if(i.viewport){const u=i.viewport.scrollLeft+p.deltaX;e.onWheelScroll(u),An(u,x)&&p.preventDefault()}},onResize:()=>{d.current&&i.viewport&&c&&s({content:i.viewport.scrollWidth,viewport:i.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:xt(c.paddingLeft),paddingEnd:xt(c.paddingRight)}})}})}),io=o.forwardRef((e,t)=>{const{sizes:r,onSizesChange:s,...a}=e,i=xe(Ne,e.__scopeScrollArea),[c,h]=o.useState(),d=o.useRef(null),m=Fe(t,d,i.onScrollbarYChange);return o.useEffect(()=>{d.current&&h(getComputedStyle(d.current))},[d]),n.jsx(En,{"data-orientation":"vertical",...a,ref:m,sizes:r,style:{top:0,right:i.dir==="ltr"?0:void 0,left:i.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":yt(r)+"px",...e.style},onThumbPointerDown:p=>e.onThumbPointerDown(p.y),onDragScroll:p=>e.onDragScroll(p.y),onWheelScroll:(p,x)=>{if(i.viewport){const u=i.viewport.scrollTop+p.deltaY;e.onWheelScroll(u),An(u,x)&&p.preventDefault()}},onResize:()=>{d.current&&i.viewport&&c&&s({content:i.viewport.scrollHeight,viewport:i.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:xt(c.paddingTop),paddingEnd:xt(c.paddingBottom)}})}})}),[co,Cn]=wn(Ne),En=o.forwardRef((e,t)=>{const{__scopeScrollArea:r,sizes:s,hasThumb:a,onThumbChange:i,onThumbPointerUp:c,onThumbPointerDown:h,onThumbPositionChange:d,onDragScroll:m,onWheelScroll:p,onResize:x,...u}=e,b=xe(Ne,r),[k,L]=o.useState(null),C=Fe(t,L),N=o.useRef(null),j=o.useRef(""),A=b.viewport,_=s.content-s.viewport,F=qe(p),D=qe(d),B=vt(x,10);function X(I){if(N.current){const O=I.clientX-N.current.left,Z=I.clientY-N.current.top;m({x:O,y:Z})}}return o.useEffect(()=>{const I=O=>{const Z=O.target;(k==null?void 0:k.contains(Z))&&F(O,_)};return document.addEventListener("wheel",I,{passive:!1}),()=>document.removeEventListener("wheel",I,{passive:!1})},[A,k,_,F]),o.useEffect(D,[s,D]),et(k,B),et(b.content,B),n.jsx(co,{scope:r,scrollbar:k,hasThumb:a,onThumbChange:qe(i),onThumbPointerUp:qe(c),onThumbPositionChange:D,onThumbPointerDown:qe(h),children:n.jsx(Ie.div,{...u,ref:C,style:{position:"absolute",...u.style},onPointerDown:Ue(e.onPointerDown,I=>{I.button===0&&(I.target.setPointerCapture(I.pointerId),N.current=k.getBoundingClientRect(),j.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",b.viewport&&(b.viewport.style.scrollBehavior="auto"),X(I))}),onPointerMove:Ue(e.onPointerMove,X),onPointerUp:Ue(e.onPointerUp,I=>{const O=I.target;O.hasPointerCapture(I.pointerId)&&O.releasePointerCapture(I.pointerId),document.body.style.webkitUserSelect=j.current,b.viewport&&(b.viewport.style.scrollBehavior=""),N.current=null})})})}),gt="ScrollAreaThumb",Nn=o.forwardRef((e,t)=>{const{forceMount:r,...s}=e,a=Cn(gt,e.__scopeScrollArea);return n.jsx(bt,{present:r||a.hasThumb,children:n.jsx(lo,{ref:t,...s})})}),lo=o.forwardRef((e,t)=>{const{__scopeScrollArea:r,style:s,...a}=e,i=xe(gt,r),c=Cn(gt,r),{onThumbPositionChange:h}=c,d=Fe(t,c.onThumbChange),m=o.useRef(void 0),p=vt(()=>{m.current&&(m.current(),m.current=void 0)},100);return o.useEffect(()=>{const x=i.viewport;if(x){const u=()=>{if(p(),!m.current){const b=ho(x,h);m.current=b,h()}};return h(),x.addEventListener("scroll",u),()=>x.removeEventListener("scroll",u)}},[i.viewport,p,h]),n.jsx(Ie.div,{"data-state":c.hasThumb?"visible":"hidden",...a,ref:d,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...s},onPointerDownCapture:Ue(e.onPointerDownCapture,x=>{const b=x.target.getBoundingClientRect(),k=x.clientX-b.left,L=x.clientY-b.top;c.onThumbPointerDown({x:k,y:L})}),onPointerUp:Ue(e.onPointerUp,c.onThumbPointerUp)})});Nn.displayName=gt;var Mt="ScrollAreaCorner",_n=o.forwardRef((e,t)=>{const r=xe(Mt,e.__scopeScrollArea),s=!!(r.scrollbarX&&r.scrollbarY);return r.type!=="scroll"&&s?n.jsx(uo,{...e,ref:t}):null});_n.displayName=Mt;var uo=o.forwardRef((e,t)=>{const{__scopeScrollArea:r,...s}=e,a=xe(Mt,r),[i,c]=o.useState(0),[h,d]=o.useState(0),m=!!(i&&h),{onCornerWidthChange:p,onCornerHeightChange:x}=a;return et(a.scrollbarX,()=>{var b;const u=((b=a.scrollbarX)==null?void 0:b.offsetHeight)||0;a.onCornerHeightChange(u),d(u)}),et(a.scrollbarY,()=>{var b;const u=((b=a.scrollbarY)==null?void 0:b.offsetWidth)||0;a.onCornerWidthChange(u),c(u)}),o.useEffect(()=>()=>{p(0),x(0)},[p,x]),m?n.jsx(Ie.div,{...s,ref:t,style:{width:i,height:h,position:"absolute",right:a.dir==="ltr"?0:void 0,left:a.dir==="rtl"?0:void 0,bottom:0,...e.style}}):null});function xt(e){return e?parseInt(e,10):0}function Tn(e,t){const r=e/t;return isNaN(r)?0:r}function yt(e){const t=Tn(e.viewport,e.content),r=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,s=(e.scrollbar.size-r)*t;return Math.max(s,18)}function fo(e,t,r,s="ltr"){const a=yt(r),i=a/2,c=t||i,h=a-c,d=r.scrollbar.paddingStart+c,m=r.scrollbar.size-r.scrollbar.paddingEnd-h,p=r.content-r.viewport,x=s==="ltr"?[0,p]:[p*-1,0];return Pn([d,m],x)(e)}function qt(e,t,r="ltr"){const s=yt(t),a=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,i=t.scrollbar.size-a,c=t.content-t.viewport,h=i-s,d=r==="ltr"?[0,c]:[c*-1,0],m=pr(e,d);return Pn([0,c],[0,h])(m)}function Pn(e,t){return r=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const s=(t[1]-t[0])/(e[1]-e[0]);return t[0]+s*(r-e[0])}}function An(e,t){return e>0&&e<t}var ho=(e,t=()=>{})=>{let r={left:e.scrollLeft,top:e.scrollTop},s=0;return(function a(){const i={left:e.scrollLeft,top:e.scrollTop},c=r.left!==i.left,h=r.top!==i.top;(c||h)&&t(),r=i,s=window.requestAnimationFrame(a)})(),()=>window.cancelAnimationFrame(s)};function vt(e,t){const r=qe(e),s=o.useRef(0);return o.useEffect(()=>()=>window.clearTimeout(s.current),[]),o.useCallback(()=>{window.clearTimeout(s.current),s.current=window.setTimeout(r,t)},[r,t])}function et(e,t){const r=qe(t);qn(()=>{let s=0;if(e){const a=new ResizeObserver(()=>{cancelAnimationFrame(s),s=window.requestAnimationFrame(r)});return a.observe(e),()=>{window.cancelAnimationFrame(s),a.unobserve(e)}}},[e,r])}var Dn=Sn,po=jn,mo=_n;const Ln=o.forwardRef(({className:e,children:t,...r},s)=>n.jsxs(Dn,{ref:s,className:q("relative overflow-hidden",e),...r,children:[n.jsx(po,{className:"h-full w-full rounded-[inherit]",children:t}),n.jsx(Mn,{}),n.jsx(mo,{})]}));Ln.displayName=Dn.displayName;const Mn=o.forwardRef(({className:e,orientation:t="vertical",...r},s)=>n.jsx(Dt,{ref:s,orientation:t,className:q("flex touch-none select-none transition-colors",t==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",t==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",e),...r,children:n.jsx(Nn,{className:"relative flex-1 rounded-full bg-border"})}));Mn.displayName=Dt.displayName;function Hn(e){return/[Zz]|[+-]\d{2}/.test(e)?new Date(e):new Date(e.replace(" ","T")+"Z")}function go(e){const t=new Map;for(const a of e){const i=Hn(a.created_at).toDateString();t.has(i)||t.set(i,[]),t.get(i).push(a)}const r=new Date().toDateString(),s=new Date(Date.now()-864e5).toDateString();return Array.from(t.entries()).map(([a,i])=>{let c;if(a===r)c="Today";else if(a===s)c="Yesterday";else{const h=new Date(a);c=h.toLocaleDateString(void 0,{month:"short",day:"numeric",...h.getFullYear()!==new Date().getFullYear()?{year:"numeric"}:{}})}return{label:c,items:i}})}function xo(e){return Hn(e).toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"})}const bo=5*1024*1024,yo=["image/png","image/jpeg","image/webp"];function vo({buildId:e}){const[t,r]=o.useState([]),[s,a]=o.useState(""),[i,c]=o.useState(null),[h,d]=o.useState(!1),[m,p]=o.useState(""),x=o.useRef(null),u=o.useRef({});function b(){fetch(`/api/v1/comments?build_id=${e}`,{credentials:"include"}).then(j=>j.ok?j.json():[]).then(r)}o.useEffect(()=>{b()},[e]),o.useEffect(()=>{const j=window.location.hash;if(!j.startsWith("#comment-"))return;const A=Number(j.replace("#comment-","")),_=u.current[A];if(!_)return;_.scrollIntoView({behavior:"smooth"});const F=document.documentElement.classList.contains("dark");_.style.backgroundColor=F?"rgb(0 112 243 / 0.18)":"#d3e5ff",setTimeout(()=>{_.style.backgroundColor=""},2e3)},[t]);function k(j){const A=`${location.origin}${location.pathname}${location.search}#comment-${j}`;navigator.clipboard.writeText(A).then(()=>at.success("Link copied")).catch(()=>at.error("Could not copy link"))}function L(j){if(p(""),!yo.includes(j.type)){p("Only png, jpg, webp allowed");return}if(j.size>bo){p("Max 5MB");return}c(j)}async function C(j){if(j.preventDefault(),!s.trim()&&!i)return;d(!0);const A=new FormData;A.append("build_id",String(e)),A.append("body",s),i&&A.append("attachment",i),(await fetch("/api/v1/comments",{method:"POST",credentials:"include",body:A})).ok&&(a(""),c(null),b()),d(!1)}const N=go(t);return n.jsxs("div",{className:"flex h-full flex-col gap-3 px-1",children:[n.jsx(Ln,{className:"flex-1 rounded-md border",children:n.jsx("div",{className:"p-3",children:t.length===0?n.jsx("p",{className:"text-sm text-muted-foreground text-center py-8",children:"No comments yet."}):n.jsx("div",{className:"flex flex-col",children:N.map(({label:j,items:A})=>n.jsxs("div",{children:[n.jsxs("div",{className:"flex items-center gap-2 py-3",children:[n.jsx("div",{className:"h-px flex-1 bg-border"}),n.jsx("span",{className:"text-[11px] font-medium text-muted-foreground px-1 select-none",children:j}),n.jsx("div",{className:"h-px flex-1 bg-border"})]}),n.jsx("div",{className:"flex flex-col gap-4",children:A.map(_=>n.jsxs("div",{id:`comment-${_.id}`,ref:F=>{u.current[_.id]=F},className:"group flex gap-2.5 rounded-md px-2 py-1.5 transition-all",children:[n.jsx("div",{className:"mt-0.5 shrink-0",children:n.jsx(Jn,{name:_.author,avatarUrl:_.authorAvatarUrl,size:28})}),n.jsxs("div",{className:"flex-1 min-w-0",children:[n.jsxs("div",{className:"flex items-center gap-1.5",children:[n.jsx("span",{className:"text-sm font-semibold leading-none",children:_.author}),n.jsx("span",{className:"text-[11px] text-muted-foreground leading-none",children:xo(_.created_at)}),n.jsx(ee,{variant:"ghost",size:"icon",className:"h-4 w-4 ml-0.5 opacity-0 group-hover:opacity-50 hover:!opacity-100 transition-opacity",onClick:()=>k(_.id),children:n.jsx(un,{className:"h-3 w-3"})})]}),n.jsx("p",{className:"text-sm leading-relaxed whitespace-pre-wrap mt-1",children:_.body}),_.attachments.map(F=>n.jsx("a",{href:F.file_path,target:"_blank",rel:"noreferrer",className:"mt-1.5 block",children:n.jsx("img",{src:F.file_path,alt:"attachment",className:"max-h-48 rounded border object-contain"})},F.id))]})]},_.id))})]},j))})})}),n.jsx("div",{className:"pb-1",children:n.jsx("form",{onSubmit:C,children:n.jsxs("div",{className:"rounded-xl border border-input bg-background ring-offset-background transition-shadow focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2",children:[n.jsx(vn,{placeholder:"Leave a comment…",value:s,onChange:j=>a(j.target.value),className:"min-h-16 resize-none border-0 bg-transparent shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 text-sm"}),(i||m)&&n.jsxs("div",{className:"px-3 -mt-1 pb-1",children:[i&&n.jsx("p",{className:"text-xs text-muted-foreground",children:i.name}),m&&n.jsx("p",{className:"text-xs text-destructive",children:m})]}),n.jsxs("div",{className:"flex items-center gap-2 px-2 py-2",children:[n.jsx(ee,{type:"button",variant:"ghost",size:"icon",className:"h-7 w-7 text-muted-foreground",onClick:()=>{var j;return(j=x.current)==null?void 0:j.click()},children:n.jsx(Dr,{className:"h-4 w-4"})}),n.jsx("input",{ref:x,type:"file",accept:"image/png,image/jpeg,image/webp",className:"hidden",onChange:j=>{var _;const A=(_=j.target.files)==null?void 0:_[0];A&&L(A)}}),n.jsx("div",{className:"flex-1"}),n.jsx(ee,{type:"submit",size:"icon",className:"h-7 w-7 rounded-full",disabled:h||!s.trim()&&!i,children:n.jsx(jr,{className:"h-3.5 w-3.5"})})]})]})})})]})}function wo(e){return e<1024*1024?`${(e/1024).toFixed(0)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function So(e){return new Date(e).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function Ro(e){const t=new Date(e).getTime()-Date.now();if(t<=0)return{label:"Expired",urgent:!0};const r=Math.floor(t/36e5);return r<1?{label:"< 1 hour left",urgent:!0}:r<24?{label:`Expires in ${r}h`,urgent:r<6}:{label:`Expires in ${Math.floor(r/24)}d`,urgent:!1}}function jo({buildId:e,refreshKey:t}){const[r,s]=o.useState([]),[a,i]=o.useState(!0),[c,h]=o.useState(!1);return o.useEffect(()=>{i(!0),h(!1);const d=setTimeout(()=>h(!0),250);return fetch(`/api/v1/recordings?buildId=${e}`,{credentials:"include"}).then(m=>m.ok?m.json():[]).then(m=>s(m)).catch(()=>s([])).finally(()=>{clearTimeout(d),i(!1)}),()=>clearTimeout(d)},[e,t]),a?c?n.jsx("p",{className:"text-xs text-muted-foreground",children:"Loading recordings…"}):null:r.length===0?n.jsx("p",{className:"py-8 text-center text-sm text-muted-foreground",children:"No recordings yet."}):n.jsx("div",{className:"flex flex-col gap-2",children:r.map(d=>{const m=Ro(d.expiresAt);return n.jsxs("div",{className:"flex items-center justify-between rounded-md border border-border px-3 py-2 text-sm",children:[n.jsxs("div",{className:"flex flex-col gap-0.5 min-w-0",children:[n.jsx("span",{className:"text-xs font-medium truncate",children:So(d.createdAt)}),n.jsxs("span",{className:`text-xs ${m.urgent?"text-destructive":"text-muted-foreground"}`,children:[m.label," · ",wo(d.fileSize)]})]}),n.jsx(ee,{variant:"ghost",size:"icon",className:"h-7 w-7 shrink-0 ml-2",title:"Download",onClick:()=>{const p=document.createElement("a");p.href=d.url,p.download="",p.click()},children:n.jsx(Nr,{className:"h-3.5 w-3.5"})})]},d.id)})})}function ko({buildId:e,recordingsRefreshKey:t=0}){return n.jsxs(lr,{defaultValue:"comments",className:"flex h-full flex-col",children:[n.jsx("div",{className:"shrink-0 px-1",children:n.jsxs(ur,{className:"w-full",children:[n.jsxs(Bt,{value:"comments",className:"flex-1 gap-1.5",children:[n.jsx(Br,{className:"h-3.5 w-3.5"}),"Comments"]}),n.jsxs(Bt,{value:"recordings",className:"flex-1 gap-1.5",children:[n.jsx(Tr,{className:"h-3.5 w-3.5"}),"Recordings"]})]})}),n.jsx(zt,{value:"comments",className:"mt-3 min-h-0 flex-1 overflow-hidden",children:n.jsx(vo,{buildId:e})}),n.jsx(zt,{value:"recordings",className:"mt-3 min-h-0 flex-1 overflow-y-auto",children:n.jsx(jo,{buildId:e,refreshKey:t})})]})}const Un=o.forwardRef(({...e},t)=>n.jsx("nav",{ref:t,"aria-label":"breadcrumb",...e}));Un.displayName="Breadcrumb";const Fn=o.forwardRef(({className:e,...t},r)=>n.jsx("ol",{ref:r,className:q("flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",e),...t}));Fn.displayName="BreadcrumbList";const ot=o.forwardRef(({className:e,...t},r)=>n.jsx("li",{ref:r,className:q("inline-flex items-center gap-1.5",e),...t}));ot.displayName="BreadcrumbItem";const dt=o.forwardRef(({asChild:e,className:t,...r},s)=>{const a=e?Zn:"a";return n.jsx(a,{ref:s,className:q("transition-colors hover:text-foreground cursor-pointer",t),...r})});dt.displayName="BreadcrumbLink";const ft=o.forwardRef(({className:e,...t},r)=>n.jsx("span",{ref:r,role:"link","aria-disabled":"true","aria-current":"page",className:q("font-medium text-foreground",e),...t}));ft.displayName="BreadcrumbPage";const ht=({children:e,className:t,...r})=>n.jsx("li",{role:"presentation","aria-hidden":"true",className:q("[&>svg]:h-3.5 [&>svg]:w-3.5",t),...r,children:e??n.jsx(Qn,{})});ht.displayName="BreadcrumbSeparator";var wt="Switch",[Co]=nn(wt),[Eo,Ht]=Co(wt);function No(e){const{__scopeSwitch:t,checked:r,children:s,defaultChecked:a,disabled:i,form:c,name:h,onCheckedChange:d,required:m,value:p="on",internal_do_not_use_render:x}=e,[u,b]=er({prop:r,defaultProp:a??!1,onChange:d,caller:wt}),[k,L]=o.useState(null),[C,N]=o.useState(null),j=o.useRef(!1),A=k?!!c||!!k.closest("form"):!0,_={checked:u,setChecked:b,disabled:i,control:k,setControl:L,name:h,form:c,value:p,hasConsumerStoppedPropagationRef:j,required:m,defaultChecked:a,isFormControl:A,bubbleInput:C,setBubbleInput:N};return n.jsx(Eo,{scope:t,..._,children:_o(x)?x(_):s})}var In="SwitchTrigger",$n=o.forwardRef(({__scopeSwitch:e,onClick:t,...r},s)=>{const{control:a,form:i,value:c,disabled:h,checked:d,required:m,setControl:p,setChecked:x,hasConsumerStoppedPropagationRef:u,isFormControl:b,bubbleInput:k}=Ht(In,e),L=Fe(s,p),C=o.useRef(d);return o.useEffect(()=>{const N=i?a==null?void 0:a.ownerDocument.getElementById(i):a==null?void 0:a.form;if(N instanceof HTMLFormElement){const j=()=>x(C.current);return N.addEventListener("reset",j),()=>N.removeEventListener("reset",j)}},[a,i,x]),n.jsx(Ie.button,{type:"button",role:"switch","aria-checked":d,"aria-required":m,"data-state":Vn(d),"data-disabled":h?"":void 0,disabled:h,value:c,...r,ref:L,onClick:Ue(t,N=>{x(j=>!j),k&&b&&(u.current=N.isPropagationStopped(),u.current||N.stopPropagation())})})});$n.displayName=In;var Ut=o.forwardRef((e,t)=>{const{__scopeSwitch:r,name:s,checked:a,defaultChecked:i,required:c,disabled:h,value:d,onCheckedChange:m,form:p,...x}=e;return n.jsx(No,{__scopeSwitch:r,checked:a,defaultChecked:i,disabled:h,required:c,onCheckedChange:m,name:s,form:p,value:d,internal_do_not_use_render:({isFormControl:u})=>n.jsxs(n.Fragment,{children:[n.jsx($n,{...x,ref:t,__scopeSwitch:r}),u&&n.jsx(Wn,{__scopeSwitch:r})]})})});Ut.displayName=wt;var Bn="SwitchThumb",zn=o.forwardRef((e,t)=>{const{__scopeSwitch:r,...s}=e,a=Ht(Bn,r);return n.jsx(Ie.span,{"data-state":Vn(a.checked),"data-disabled":a.disabled?"":void 0,...s,ref:t})});zn.displayName=Bn;var On="SwitchBubbleInput",Wn=o.forwardRef(({__scopeSwitch:e,...t},r)=>{const{control:s,hasConsumerStoppedPropagationRef:a,checked:i,defaultChecked:c,required:h,disabled:d,name:m,value:p,form:x,bubbleInput:u,setBubbleInput:b}=Ht(On,e),k=Fe(r,b),L=mr(i),C=tr(s);o.useEffect(()=>{const j=u;if(!j)return;const A=window.HTMLInputElement.prototype,F=Object.getOwnPropertyDescriptor(A,"checked").set,D=!a.current;if(L!==i&&F){const B=new Event("click",{bubbles:D});F.call(j,i),j.dispatchEvent(B)}},[u,L,i,a]);const N=o.useRef(i);return n.jsx(Ie.input,{type:"checkbox","aria-hidden":!0,defaultChecked:c??N.current,required:h,disabled:d,name:m,value:p,form:x,...t,tabIndex:-1,ref:k,style:{...t.style,...C,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});Wn.displayName=On;function _o(e){return typeof e=="function"}function Vn(e){return e?"checked":"unchecked"}const Xn=o.forwardRef(({className:e,...t},r)=>n.jsx(Ut,{className:q("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",e),...t,ref:r,children:n.jsx(zn,{className:q("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})}));Xn.displayName=Ut.displayName;const Jt=70,Zt=80;function To(e,t){if(!e||t)return"unknown";const r=e.memUsedMB/e.memTotalMB*100;return e.cpuPercent>Zt||r>Zt?"overloaded":e.cpuPercent>=Jt||r>=Jt?"warning":"healthy"}function Uo(){const[e]=en(),t=nr(),r=e.get("id"),{build:s}=ns(r),[a,i]=o.useState(0),c=(s==null?void 0:s.platform)??"ios",{sessions:h,selectedAgent:d,setSelectedAgent:m,activeSessionId:p,deviceId:x,booting:u,status:b,connected:k,agentGroups:L,startDevice:C,resetDevice:N,handleBack:j,handleBackToMacs:A}=rs(c),_=L.find(E=>E.agentName===d),{osVersions:F,osVersion:D,setOsVersion:B,deviceSearch:X,setDeviceSearch:I,versionedDevices:O,resetMode:Z,setResetMode:Re}=ss(_,c),ne=h.flatMap(E=>E.devices).find(E=>E.id===x),je=ne?`${ne.name}${ne.osVersion?` · ${ne.osVersion}`:""}`:"",De=o.useCallback(()=>i(E=>E+1),[]),{setNode:re}=rr();return o.useEffect(()=>{if(s)return re(n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsx(Un,{children:n.jsxs(Fn,{children:[n.jsx(ot,{children:n.jsx(dt,{asChild:!0,children:n.jsx("button",{onClick:()=>t(`/app-center?appId=${s.app_id}`),children:s.name})})}),n.jsx(ht,{}),n.jsx(ot,{children:d?n.jsx(dt,{asChild:!0,children:n.jsx("button",{onClick:A,children:$t(s)})}):n.jsx(ft,{children:$t(s)})}),d&&n.jsxs(n.Fragment,{children:[n.jsx(ht,{}),n.jsx(ot,{children:p?n.jsx(dt,{asChild:!0,children:n.jsx("button",{onClick:j,children:d})}):n.jsx(ft,{children:d})})]}),p&&n.jsxs(n.Fragment,{children:[n.jsx(ht,{}),n.jsx(ot,{children:n.jsx(ft,{children:je})})]})]})}),!d&&s.status_label&&n.jsx(vr,{tone:ir[s.status_label],children:s.status_label})]})),()=>re(null)},[s,d,p,je,t,j,A,re]),n.jsxs("div",{className:"flex h-full min-h-0 gap-6 p-6",children:[n.jsx("div",{className:"flex flex-col gap-3 flex-1 min-w-0 min-h-0",children:n.jsx("div",{className:"flex-1 min-h-0 overflow-auto -ml-1 pl-1 -mr-4 pr-4",children:p?n.jsx("div",{className:"min-h-full flex items-center justify-center py-6 px-8 min-w-max",children:n.jsx(eo,{sessionId:p,deviceId:x,buildId:s==null?void 0:s.id,resetMode:Z,onRecordingUploaded:De})}):d?n.jsxs("div",{className:"flex flex-col gap-5",children:[n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsx("button",{onClick:A,className:"text-sm text-muted-foreground hover:text-foreground transition-colors",children:"← All Macs"}),n.jsx("h1",{className:"text-xl font-semibold tracking-tight",children:"Select device"})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx(cr,{placeholder:"Search device…",value:X,onChange:I}),F.length>0&&n.jsxs(gr,{value:D||"__all__",onValueChange:E=>{B(E==="__all__"?"":E),N()},children:[n.jsx(xr,{className:"h-8 w-36 shrink-0",children:n.jsx(br,{})}),n.jsxs(yr,{children:[n.jsx(Ot,{value:"__all__",children:"Any version"}),F.map(E=>n.jsx(Ot,{value:E,children:E},E))]})]}),n.jsx(Ct,{children:n.jsxs(ve,{children:[n.jsxs("div",{className:"ml-auto flex items-center gap-2 shrink-0",children:[n.jsx(we,{asChild:!0,children:n.jsxs(sr,{htmlFor:"reset-mode",className:"flex items-center gap-1 text-sm cursor-pointer whitespace-nowrap",children:[n.jsx(Mr,{className:"h-3.5 w-3.5 text-muted-foreground"}),"Full reset"]})}),n.jsx(Xn,{id:"reset-mode",checked:Z==="full-erase",onCheckedChange:E=>Re(E?"full-erase":"app-only")})]}),n.jsx(Se,{children:Z==="full-erase"?"Erase all data before booting":"Keep existing data"})]})})]}),O.length===0?n.jsx("p",{className:"text-sm text-muted-foreground",children:k?"No devices available for this OS.":"Connecting to relay…"}):n.jsx("div",{className:"grid grid-cols-1 lg:grid-cols-2 2xl:grid-cols-3 gap-2",children:O.map(E=>{const V=E.status==="booted",Y=E.busy,ce=Y?"In use":V?"Booted":"Available",ke=Y?"bg-amber-400":V?"bg-emerald-400":"bg-muted-foreground/40";return n.jsxs("button",{disabled:Y||u||!k,onClick:()=>C(E),className:q("flex flex-col gap-3 rounded-lg border p-3 text-left transition-colors min-h-[100px]","hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50"),children:[n.jsx("span",{className:"text-sm font-medium leading-tight",children:E.name}),E.osVersion&&n.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:E.osVersion}),n.jsxs("span",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[n.jsx("span",{className:q("inline-block h-1.5 w-1.5 rounded-full",ke)}),ce]})]},E.id)})}),b&&n.jsx("p",{className:"text-sm text-muted-foreground",children:b})]}):n.jsxs("div",{className:"flex flex-col gap-5",children:[n.jsx("h1",{className:"text-xl font-semibold tracking-tight",children:"Select Mac"}),L.length===0?n.jsx("p",{className:"text-sm text-muted-foreground",children:k?`No agents available for ${c}.`:"Connecting to relay…"}):n.jsx("div",{className:"grid grid-cols-1 lg:grid-cols-2 2xl:grid-cols-3 gap-2",children:L.map(E=>{const V=E.resources,Y=V?Date.now()-V.reportedAt>3e4:!1,ce=E.devices.filter(le=>le.platform===c).length,ke=(V==null?void 0:V.cpuPercent)??0,se=V?V.memUsedMB/V.memTotalMB*100:0,U=To(V,Y),z=U==="overloaded";return n.jsx(Ct,{children:n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx("span",{tabIndex:z?0:void 0,className:z?"cursor-not-allowed":void 0,children:n.jsxs("button",{disabled:z,"aria-disabled":z,onClick:()=>m(E.agentName??null),className:q("flex flex-col gap-3 rounded-lg border p-3 text-left transition-colors min-h-[100px] w-full",z?"pointer-events-none":"hover:bg-accent"),children:[n.jsxs("div",{className:"flex items-start justify-between gap-2",children:[n.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[n.jsx(Po,{health:U}),n.jsx("span",{className:"text-sm font-medium leading-tight truncate",children:E.agentName??"Unknown"})]}),Y&&n.jsx("span",{className:"shrink-0 text-[10px] font-medium text-amber-500",children:"Stale"})]}),n.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[n.jsxs("span",{children:[ce," device",ce!==1?"s":""]}),V&&n.jsxs(n.Fragment,{children:[n.jsx("span",{children:"·"}),n.jsxs("span",{children:[V.slotsAvailable,"/",V.slotsTotal," slots"]})]})]}),V&&!Y&&n.jsxs("div",{className:"flex flex-col gap-1.5 w-full",children:[n.jsx(Qt,{label:"CPU",percent:ke,colorClass:"bg-blue-400"}),n.jsx(Qt,{label:"RAM",percent:se,colorClass:"bg-violet-400"})]})]})})}),z&&n.jsx(Se,{children:"This Mac is currently overloaded. Try again later."})]})},E.agentName)})})]})})}),r&&n.jsxs(n.Fragment,{children:[n.jsx(tn,{orientation:"vertical",className:"h-auto"}),n.jsx("div",{className:"w-80 shrink-0 h-full",children:n.jsx(ko,{buildId:Number(r),recordingsRefreshKey:a})})]})]})}function Po({health:e}){const t={unknown:"bg-muted-foreground/40",healthy:"bg-emerald-400",warning:"bg-amber-400",overloaded:"bg-red-500"}[e];return n.jsx("span",{"data-testid":"resource-health-dot",className:q("inline-block h-2 w-2 shrink-0 rounded-full",t)})}function Qt({label:e,percent:t,colorClass:r}){return n.jsxs("div",{className:"flex flex-col gap-0.5",children:[n.jsxs("div",{className:"flex justify-between text-[10px] text-muted-foreground",children:[n.jsx("span",{children:e}),n.jsxs("span",{children:[t.toFixed(0),"%"]})]}),n.jsx("div",{className:"h-1 w-full rounded-full bg-muted overflow-hidden",children:n.jsx("div",{className:q("h-full rounded-full transition-all",r),style:{width:`${Math.min(100,t)}%`}})})]})}export{Uo as QASession};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|