feat(navigation): add prominent validation quickstart action

This commit is contained in:
Schubert Ferenc 2026-07-11 18:02:53 +02:00
parent 0bbcaba211
commit 9c6b184e39
28614 changed files with 4356173 additions and 23 deletions

View file

@ -0,0 +1 @@
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,33525,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"warnOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},18967,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={DecodeError:function(){return P},MiddlewareNotFoundError:function(){return O},MissingStaticPage:function(){return h},NormalizeError:function(){return E},PageNotFoundError:function(){return b},SP:function(){return m},ST:function(){return y},WEB_VITALS:function(){return i},execOnce:function(){return u},getDisplayName:function(){return l},getLocationOrigin:function(){return c},getURL:function(){return f},isAbsoluteUrl:function(){return a},isResSent:function(){return d},loadGetInitialProps:function(){return g},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return N}};for(var o in n)Object.defineProperty(t,o,{enumerable:!0,get:n[o]});let i=["CLS","FCP","FID","INP","LCP","TTFB"];function u(e){let r,t=!1;return(...n)=>(t||(t=!0,r=e(...n)),r)}let s=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,a=e=>s.test(e);function c(){let{protocol:e,hostname:r,port:t}=window.location;return`${e}//${r}${t?":"+t:""}`}function f(){let{href:e}=window.location,r=c();return e.substring(r.length)}function l(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function d(e){return e.finished||e.headersSent}function p(e){let r=e.split("?");return r[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(r[1]?`?${r.slice(1).join("?")}`:"")}async function g(e,r){let t=r.res||r.ctx&&r.ctx.res;if(!e.getInitialProps)return r.ctx&&r.Component?{pageProps:await g(r.Component,r.ctx)}:{};let n=await e.getInitialProps(r);if(t&&d(t))return n;if(!n)throw Object.defineProperty(Error(`"${l(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return n}let m="u">typeof performance,y=m&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class P extends Error{}class E extends Error{}class b extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class h extends Error{constructor(e,r){super(),this.message=`Failed to load static file for page: ${e} ${r}`}}class O extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function N(e){return JSON.stringify({message:e.message,stack:e.stack})}},98183,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={assign:function(){return a},searchParamsToUrlQuery:function(){return i},urlQueryToSearchParams:function(){return s}};for(var o in n)Object.defineProperty(t,o,{enumerable:!0,get:n[o]});function i(e){let r={};for(let[t,n]of e.entries()){let e=r[t];void 0===e?r[t]=n:Array.isArray(e)?e.push(n):r[t]=[e,n]}return r}function u(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function s(e){let r=new URLSearchParams;for(let[t,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)r.append(t,u(e));else r.set(t,u(n));return r}function a(e,...r){for(let t of r){for(let r of t.keys())e.delete(r);for(let[r,n]of t.entries())e.append(r,n)}return e}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,54858,e=>{"use strict";let s="/api/v1";async function t(e,s){let t=await e.text();if(!t)return s;try{let e=JSON.parse(t);return e.detail??e.message??t}catch{return t}}async function r(e,s){let t=await fetch("/api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,password:s}),credentials:"include"});if(!t.ok){let e=Error(await t.text()||`HTTP ${t.status}`);throw e.status=t.status,e}return t.json()}async function a(e,t){let r=await fetch(`${s}${e}`,{cache:"no-store",credentials:"include"});if(!r.ok)throw Error(`API request failed: ${r.status}`);return r.json()}async function n(e,r,a,n){let i=await fetch(`${s}${e}`,{method:a,headers:{"Content-Type":"application/json"},body:JSON.stringify(n),credentials:"include"});if(!i.ok)throw Error(await t(i,`API request failed: ${i.status}`));return i.json()}async function i(e,r){let a=await fetch(`${s}${e}`,{method:"DELETE",credentials:"include"});if(!a.ok)throw Error(await t(a,`API request failed: ${a.status}`))}async function o(e,r,a){let n=await fetch(`${s}${e}`,{...a,headers:{"Content-Type":"application/json",...a?.headers??{}},credentials:"include"});if(!n.ok)throw Error(await t(n,`API request failed: ${n.status}`));return n.json()}e.s(["API_BASE",0,s,"apiDelete",0,i,"apiFetch",0,o,"apiGet",0,a,"apiSend",0,n,"login",0,r,"normalizeValidationPayload",0,function(e){return{...e,...Object.fromEntries(["contact_id","examiner_id"].map(s=>[s,e[s]||null]))}}])},53155,e=>{"use strict";var s=e.i(43476),t=e.i(94814);let r=(0,e.i(75254).default)("KeyRound",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);var a=e.i(71645),n=e.i(53145),i=e.i(50270),o=e.i(28779),l=e.i(54858);let d=i.z.object({current_password:i.z.string().min(1,"Aktuelles Passwort erforderlich"),new_password:i.z.string().min(12,"Mindestens 12 Zeichen"),new_password_confirmation:i.z.string().min(12,"Mindestens 12 Zeichen")}).refine(e=>e.new_password===e.new_password_confirmation,{path:["new_password_confirmation"],message:"Die neuen Passwoerter stimmen nicht ueberein"});e.s(["default",0,function(){let{token:e,refreshUser:i}=(0,o.useAuth)(),[c,u]=(0,a.useState)(""),h=(0,n.useForm)({resolver:(0,t.zodResolver)(d),defaultValues:{current_password:"",new_password:"",new_password_confirmation:""}});async function m(s){await (0,l.apiFetch)("/auth/change-password",e??"",{method:"POST",body:JSON.stringify(s)}),u("Passwort erfolgreich geaendert"),h.reset(),i()}return(0,s.jsxs)("div",{className:"mx-auto max-w-xl",children:[(0,s.jsxs)("header",{className:"mb-6",children:[(0,s.jsx)("h1",{className:"text-3xl font-semibold text-text",children:"Sicherheit"}),(0,s.jsx)("p",{className:"mt-2 text-text-light",children:"Hier aenderst du dein Passwort."})]}),(0,s.jsxs)("form",{onSubmit:h.handleSubmit(m),className:"space-y-4 rounded-lg border border-border bg-surface p-6 shadow-soft",children:[(0,s.jsxs)("label",{className:"block",children:[(0,s.jsx)("span",{className:"text-sm font-medium",children:"Aktuelles Passwort"}),(0,s.jsx)("input",{type:"password",...h.register("current_password"),className:"mt-2 h-12 w-full rounded-lg border border-border px-4"})]}),(0,s.jsxs)("label",{className:"block",children:[(0,s.jsx)("span",{className:"text-sm font-medium",children:"Neues Passwort"}),(0,s.jsx)("input",{type:"password",...h.register("new_password"),className:"mt-2 h-12 w-full rounded-lg border border-border px-4"})]}),(0,s.jsxs)("label",{className:"block",children:[(0,s.jsx)("span",{className:"text-sm font-medium",children:"Neues Passwort wiederholen"}),(0,s.jsx)("input",{type:"password",...h.register("new_password_confirmation"),className:"mt-2 h-12 w-full rounded-lg border border-border px-4"})]}),c&&(0,s.jsx)("div",{className:"rounded-lg border border-success/30 bg-white p-3 text-sm text-success shadow-soft",children:c}),(0,s.jsx)("div",{className:"flex justify-end",children:(0,s.jsxs)("button",{type:"submit",className:"btn btn-primary h-12",children:[(0,s.jsx)(r,{className:"h-4 w-4"})," Passwort ändern"]})})]})]})}],53155)}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,31 @@
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,42732,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HeadManagerContext",{enumerable:!0,get:function(){return n}});let n=e.r(55682)._(e.r(71645)).default.createContext({})},18576,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={WarningIcon:function(){return d},errorStyles:function(){return l},errorThemeCss:function(){return a}};for(var o in n)Object.defineProperty(t,o,{enumerable:!0,get:n[o]});e.r(55682);let i=e.r(43476);e.r(71645);let l={container:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",display:"flex",alignItems:"center",justifyContent:"center"},card:{marginTop:"-32px",maxWidth:"325px",padding:"32px 28px",textAlign:"left"},icon:{marginBottom:"24px"},title:{fontSize:"24px",fontWeight:500,letterSpacing:"-0.02em",lineHeight:"32px",margin:"0 0 12px 0",color:"var(--next-error-title)"},message:{fontSize:"14px",fontWeight:400,lineHeight:"21px",margin:"0 0 20px 0",color:"var(--next-error-message)"},form:{margin:0},buttonGroup:{display:"flex",gap:"8px",alignItems:"center"},button:{display:"inline-flex",alignItems:"center",justifyContent:"center",height:"32px",padding:"0 12px",fontSize:"14px",fontWeight:500,lineHeight:"20px",borderRadius:"6px",cursor:"pointer",color:"var(--next-error-btn-text)",background:"var(--next-error-btn-bg)",border:"var(--next-error-btn-border)"},buttonSecondary:{display:"inline-flex",alignItems:"center",justifyContent:"center",height:"32px",padding:"0 12px",fontSize:"14px",fontWeight:500,lineHeight:"20px",borderRadius:"6px",cursor:"pointer",color:"var(--next-error-btn-secondary-text)",background:"var(--next-error-btn-secondary-bg)",border:"var(--next-error-btn-secondary-border)"},digestFooter:{position:"fixed",bottom:"32px",left:"0",right:"0",textAlign:"center",fontFamily:'ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace',fontSize:"12px",lineHeight:"18px",fontWeight:400,margin:"0",color:"var(--next-error-digest)"}},a=`
:root {
--next-error-bg: #fff;
--next-error-text: #171717;
--next-error-title: #171717;
--next-error-message: #171717;
--next-error-digest: #666666;
--next-error-btn-text: #fff;
--next-error-btn-bg: #171717;
--next-error-btn-border: none;
--next-error-btn-secondary-text: #171717;
--next-error-btn-secondary-bg: transparent;
--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);
}
@media (prefers-color-scheme: dark) {
:root {
--next-error-bg: #0a0a0a;
--next-error-text: #ededed;
--next-error-title: #ededed;
--next-error-message: #ededed;
--next-error-digest: #a0a0a0;
--next-error-btn-text: #0a0a0a;
--next-error-btn-bg: #ededed;
--next-error-btn-border: none;
--next-error-btn-secondary-text: #ededed;
--next-error-btn-secondary-bg: transparent;
--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);
}
}
body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }
`.replace(/\n\s*/g,"");function d(){return(0,i.jsx)("svg",{width:"32",height:"32",viewBox:"-0.2 -1.5 32 32",fill:"none",style:l.icon,children:(0,i.jsx)("path",{d:"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z",fill:"var(--next-error-title)"})})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),r.exports=t.default)},68027,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return l}}),e.r(55682);let n=e.r(43476);e.r(71645);let o=e.r(12354),i=e.r(18576),l=function({error:e}){let r=e?.digest,t=!!r;return(0,o.handleISRError)({error:e}),(0,n.jsxs)("html",{id:"__next_error__",children:[(0,n.jsx)("head",{children:(0,n.jsx)("style",{dangerouslySetInnerHTML:{__html:i.errorThemeCss}})}),(0,n.jsxs)("body",{children:[(0,n.jsx)("div",{style:i.errorStyles.container,children:(0,n.jsxs)("div",{style:i.errorStyles.card,children:[(0,n.jsx)(i.WarningIcon,{}),(0,n.jsx)("h1",{style:i.errorStyles.title,children:"This page couldnt load"}),(0,n.jsx)("p",{style:i.errorStyles.message,children:t?"A server error occurred. Reload to try again.":"Reload to try again, or go back."}),(0,n.jsxs)("div",{style:i.errorStyles.buttonGroup,children:[(0,n.jsx)("form",{style:i.errorStyles.form,children:(0,n.jsx)("button",{type:"submit",style:i.errorStyles.button,children:"Reload"})}),!t&&(0,n.jsx)("button",{type:"button",style:i.errorStyles.buttonSecondary,onClick:()=>{window.history.length>1?window.history.back():window.location.href="/"},children:"Back"})]})]})}),r&&(0,n.jsxs)("p",{style:i.errorStyles.digestFooter,children:["ERROR ",r]})]})]})};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),r.exports=t.default)}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,54858,e=>{"use strict";let t="/api/v1";async function a(e,t){let a=await e.text();if(!a)return t;try{let e=JSON.parse(a);return e.detail??e.message??a}catch{return a}}async function r(e,t){let a=await fetch("/api/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,password:t}),credentials:"include"});if(!a.ok){let e=Error(await a.text()||`HTTP ${a.status}`);throw e.status=a.status,e}return a.json()}async function i(e,a){let r=await fetch(`${t}${e}`,{cache:"no-store",credentials:"include"});if(!r.ok)throw Error(`API request failed: ${r.status}`);return r.json()}async function n(e,r,i,n){let s=await fetch(`${t}${e}`,{method:i,headers:{"Content-Type":"application/json"},body:JSON.stringify(n),credentials:"include"});if(!s.ok)throw Error(await a(s,`API request failed: ${s.status}`));return s.json()}async function s(e,r){let i=await fetch(`${t}${e}`,{method:"DELETE",credentials:"include"});if(!i.ok)throw Error(await a(i,`API request failed: ${i.status}`))}async function o(e,r,i){let n=await fetch(`${t}${e}`,{...i,headers:{"Content-Type":"application/json",...i?.headers??{}},credentials:"include"});if(!n.ok)throw Error(await a(n,`API request failed: ${n.status}`));return n.json()}e.s(["API_BASE",0,t,"apiDelete",0,s,"apiFetch",0,o,"apiGet",0,i,"apiSend",0,n,"login",0,r,"normalizeValidationPayload",0,function(e){return{...e,...Object.fromEntries(["contact_id","examiner_id"].map(t=>[t,e[t]||null]))}}])},40160,e=>{"use strict";let t=(0,e.i(75254).default)("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);e.s(["Download",0,t],40160)},69216,e=>{"use strict";var t=e.i(43476);let a=(0,e.i(75254).default)("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);var r=e.i(40160),i=e.i(22016),n=e.i(18566),s=e.i(71645),o=e.i(28779),l=e.i(54858);e.s(["default",0,function(){let{token:e}=(0,o.useAuth)(),c=(0,n.useParams)(),[d,h]=(0,s.useState)(""),[u,f]=(0,s.useState)("Vorschau wird geladen."),[w,p]=(0,s.useState)("");async function m(){let t=await fetch(`${l.API_BASE}/validations/${c.id}/report.pdf`,{headers:{Authorization:`Bearer ${e}`}});if(!t.ok){let e=await t.json().catch(()=>null);p(e?.detail??"PDF konnte nicht erzeugt werden.");return}let a=await t.blob(),r=URL.createObjectURL(a),i=document.createElement("a");i.href=r,i.download="validierungsbericht.pdf",i.click(),URL.revokeObjectURL(r)}return(0,s.useEffect)(()=>{e&&c.id&&fetch(`${l.API_BASE}/validations/${c.id}/report.html`,{headers:{Authorization:`Bearer ${e}`}}).then(async e=>{if(!e.ok)throw Error(await e.text());return e.text()}).then(e=>{h(e),f("")}).catch(()=>f("Vorschau konnte nicht geladen werden."))},[c.id,e]),(0,t.jsxs)("div",{className:"space-y-5",children:[(0,t.jsxs)("header",{className:"flex flex-col justify-between gap-3 sm:flex-row sm:items-center",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{className:"text-3xl font-semibold",children:"HTML-Vorschau"}),(0,t.jsx)("p",{className:"mt-2 text-text-light",children:"Authentifiziert gerenderter Orion-Bericht."})]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsxs)(i.default,{href:"/validations",className:"btn btn-secondary h-12",children:[(0,t.jsx)(a,{className:"h-4 w-4"})," Zurueck"]}),(0,t.jsxs)("button",{type:"button",onClick:m,className:"btn btn-primary h-12",children:[(0,t.jsx)(r.Download,{className:"h-4 w-4"})," PDF herunterladen"]})]})]}),w&&(0,t.jsx)("div",{className:"fixed right-4 top-4 z-50 max-w-md rounded-lg border border-danger/30 bg-white p-4 text-sm text-danger shadow-soft",children:w}),u?(0,t.jsx)("div",{className:"rounded-lg border border-border bg-surface p-6 shadow-soft",children:u}):(0,t.jsx)("iframe",{title:"Validierungsbericht",srcDoc:d,className:"h-[78vh] w-full rounded-lg border border-border bg-white shadow-soft"})]})}],69216)}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long