- Delete old Vite+Svelte frontend - Initialize new SvelteKit project with TypeScript - Configure Tailwind CSS v4 + DaisyUI - Implement JWT authentication with auto-refresh - Create login page with form validation (Zod) - Add protected route guards - Update Docker configuration for single-stage build - Add E2E tests with Playwright (6/11 passing) - Fix Svelte 5 reactivity with $state() runes Known issues: - 5 E2E tests failing (timing/async issues) - Token refresh implementation needs debugging - Validation error display timing
2 lines
2.2 KiB
JavaScript
2 lines
2.2 KiB
JavaScript
import{a as m,f as b}from"../chunks/pJd4F_Tq.js";import{i as j}from"../chunks/BgHfHpED.js";import{A as N,J as P,p as k,b as A,s as u,c as r,r as s,t as R,ad as T,ae as U}from"../chunks/CCV2x70u.js";import{u as q,l as z,a as B}from"../chunks/CrZRXG6z.js";import{s as E,e as F}from"../chunks/Bx__7-vK.js";import{i as y}from"../chunks/CC5oASRR.js";import{s as G,a as I}from"../chunks/JkAhLmb1.js";import{g as K}from"../chunks/DBDqKY8A.js";function O(v,o,a,n,d){var c;N&&P();var e=(c=o.$$slots)==null?void 0:c[a],i=!1;e===!0&&(e=o.children,i=!0),e===void 0||e(v,i?()=>n:n)}var Q=b('<li><a href="/team-members">Team Members</a></li> <li><a href="/projects">Projects</a></li>',1),S=b('<div class="dropdown dropdown-end"><label tabindex="0" class="btn btn-ghost btn-circle avatar"><div class="w-10 rounded-full bg-primary"><span class="text-xl"> </span></div></label> <ul tabindex="0" class="mt-3 p-2 shadow menu menu-compact dropdown-content bg-base-100 rounded-box w-52"><li><a href="/dashboard" class="justify-between">Dashboard</a></li> <!> <li><a href="/reports">Reports</a></li> <div class="divider"></div> <li><button class="text-error">Logout</button></li></ul></div>'),V=b('<a href="/login" class="btn btn-primary btn-sm">Login</a>'),W=b('<nav class="navbar bg-base-100 shadow-lg"><div class="flex-1"><a href="/" class="btn btn-ghost normal-case text-xl">Headroom</a></div> <div class="flex-none gap-2"><!></div></nav>');function X(v,o){k(o,!1);const a=()=>I(q,"$user",n),[n,d]=G();async function e(){await z(),K("/login")}j();var i=W(),c=u(r(i),2),L=r(c);{var $=l=>{var f=S(),p=r(f),g=r(p),h=r(g),C=r(h,!0);s(h),s(g),s(p);var x=u(p,2),_=u(r(x),2);{var D=t=>{var J=Q();T(2),m(t,J)};y(_,t=>{(a().role==="superuser"||a().role==="manager")&&t(D)})}var w=u(_,6),H=r(w);s(w),s(x),s(f),R(t=>E(C,t),[()=>{var t;return(t=a().email)==null?void 0:t.charAt(0).toUpperCase()}]),F("click",H,e),m(l,f)},M=l=>{var f=V();m(l,f)};y(L,l=>{a()?l($):l(M,!1)})}s(c),s(i),m(v,i),A(),d()}var Y=b('<div class="min-h-screen bg-base-200"><!> <main class="container mx-auto px-4 py-6"><!></main></div>');function ia(v,o){k(o,!1),U(()=>{B()}),j();var a=Y(),n=r(a);X(n,{});var d=u(n,2),e=r(d);O(e,o,"default",{}),s(d),s(a),m(v,a),A()}export{ia as component};
|