PageSourceSearch

https://shapeandshift.dev/assets/Kontakt-DjqKhT5y.js

js shapeandshift.dev collected 2026-10-07 16:42:48 UTC 16,723 bytes, 11 lines download raw bytes

1import{j as e,P as j,a as P,u as S,f as R,d as J,q as Y,r as X,s as C,t as Q,b as ee,v as te,w as se}from"./vendor-ui-Cx1YbPMj.js";import{r as l}from"./vendor-react-Cd8qmh8g.js";import{f as A,g as y,u as re,L as ae,S as ne,J as ie,B as oe,i as k}from"./index-C7y5JMA0.js";import{a as le}from"./vendor-utils-Cr9J_SmA.js";import{s as ce}from"./client-hnENvbvo.js";/**
2 * @license lucide-react v0.462.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 de=A("Circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/**
7 * @license lucide-react v0.462.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 ue=A("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]),w=l.forwardRef(({className:r,type:n,...t},d)=>e.jsx("input",{type:n,className:y("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground 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",r),ref:d,...t}));w.displayName="Input";const I=l.forwardRef(({className:r,...n},t)=>e.jsx("textarea",{className:y("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm r
11ing-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",r),ref:t,...n}));I.displayName="Textarea";var me="Label",D=l.forwardRef((r,n)=>e.jsx(j.label,{...r,ref:n,onMouseDown:t=>{var a;t.target.closest("button, input, select, textarea")||((a=r.onMouseDown)==null||a.call(r,t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));D.displayName=me;var F=D;const pe=le("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),x=l.forwardRef(({className:r,...n},t)=>e.jsx(F,{ref:t,className:y(pe(),r),...n}));x.displayName=F.displayName;var E="Radio",[he,G]=P(E),[fe,ge]=he(E),T=l.forwardRef((r,n)=>{const{__scopeRadio:t,name:d,checked:a=!1,required:u,disabled:s,value:f="on",onCheck:i,form:c,...p}=r,[h,g]=l.useState(null),o=S(n,v=>g(v)),m=l.useRef(!1),b=h?c||!!h.closest("form"):!0;return e.jsxs(fe,{scope:t,checked:a,disabled:s,children:[e.jsx(j.button,{type:"button",role:"radio","aria-checked":a,"data-state":L(a),"data-disabled":s?"":void 0,disabled:s,value:f,...p,ref:o,onClick:R(r.onClick,v=>{a||i==null||i(),b&&(m.current=v.isPropagationStopped(),m.current||v.stopPropagation())})}),b&&e.jsx(W,{control:h,bubbles:!m.current,name:d,value:f,checked:a,required:u,disabled:s,form:c,style:{transform:"translateX(-100%)"}})]})});T.displayName=E;var M="RadioIndicator",_=l.forwardRef((r,n)=>{const{__scopeRadio:t,forceMount:d,...a}=r,u=ge(M,t);return e.jsx(J,{present:d||u.checked,children:e.jsx(j.span,{"data-state":L(u.checked),"data-disabled":u.disabled?"":void 0,...a,ref:n})})});_.displayName=M;var xe="RadioBubbleInput",W=l.forwardRef(({__scopeRadio:r,control:n,checked:t,bubbles:d=!0,...a},u)=>{const s=l.useRef(null),f=S(s,u),i=Y(t),c=X(n);return l.useEffect(()=>{const p=s.current;if(!p)return;const h=window.HTMLInputElement.prototype,o=Object.getOwnPropertyDescriptor(h,"checked").set;if(i!==t&&o){const m=new Event("click",{bubbles:d});o.call(p,t),p.dispatchEvent(m)}},[i,t,d]),e.jsx(j.input,{type:"radio","aria-hidden":!0,defaultChecked:t,...a,tabIndex:-1,ref:f,style:{...a.style,...c,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});W.displayName=xe;function L(r){return r?"checked":"unchecked"}var be=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],N="RadioGroup",[ve,Ce]=P(N,[C,G]),q=C(),z=G(),[je,ye]=ve(N),B=l.forwardRef((r,n)=>{const{__scopeRadioGroup:t,name:d,defaultValue:a,value:u,required:s=!1,disabled:f=!1,orientation:i,dir:c,loop:p=!0,onValueChange:h,...g}=r,o=q(t),m=Q(c),[b,v]=ee({prop:u,defaultProp:a??null,onChange:h,caller:N});return e.jsx(je,{scope:t,name:d,required:s,disabled:f,value:b,onValueChange:v,children:e.jsx(te,{asChild:!0,...o,orientation:i,dir:m,loop:p,children:e.jsx(j.div,{role:"radiogroup","aria-required":s,"aria-orientation":i,"data-disabled":f?"":void 0,dir:m,...g,ref:n})})})});B.displayName=N;var O="RadioGroupItem",K=l.forwardRef((r,n)=>{const{__scopeRadioGroup:t,disabled:d,...a}=r,u=ye(O,t),s=u.disabled||d,f=q(t),i=z(t),c=l.useRef(null),p=S(n,c),h=u.value===a.value,g=l.useRef(!1);return l.useEffect(()=>{const o=b=>{be.includes(b.key)&&(g.current=!0)},m=()=>g.current=!1;return document.addEventListener("keydown",o),document.addEventListener("keyup",m),()=>{document.removeEventListener("keydown",o),document.removeEventListener("keyup",m)}},[]),e.jsx(se,{asChild:!0,...f,focusable:!s,active:h,children:e.jsx(T,{disabled:s,required:u.required,checked:h,...i,...a,name:u.name,ref:p,onCheck:()=>u.onValueChange(a.value),onKeyDown:R(o=>{o.key==="Enter"&&o.preventDefault()}),onFocus:R(a.onFocus,()=>{var o;g.current&&((o=c.current)==null||o.click())})})})});K.displayName=O;var we="RadioGroupIndicator",V=l.forwardRef((r,n)=>{const{__scopeRadioGroup:t,...d}=r,a=z(t);return e.jsx(_,{...a,...d,ref:n})});V.displayName=we;var U=B,Z=K,Ne=V;const H=l.forwardRef(({className:r,...n},t)=>e.jsx(U,{className:y("grid gap-2",r),...n,ref:t}));H.displayName=U.displayName;const $=l.forwardRef(({className:r,...n},t)=>
11e.jsx(Z,{ref:t,className:y("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",r),...n,children:e.jsx(Ne,{className:"flex items-center justify-center",children:e.jsx(de,{className:"h-2.5 w-2.5 fill-current text-current"})})}));$.displayName=Z.displayName;function Ae(){const{t:r,language:n}=re(),t=n==="en",[d,a]=l.useState(!1),u=t?[{value:"new",label:"New Shopware Project"},{value:"migration",label:"Migration to Shopware 6"},{value:"maintenance",label:"Maintenance & SLA"},{value:"optimization",label:"Optimisation & Further Development"},{value:"plugins",label:"Plugin/Payment Development"},{value:"consultation",label:"Initial Consultation"}]:[{value:"new",label:"Neues Shopware-Projekt"},{value:"migration",label:"Migration auf Shopware 6"},{value:"maintenance",label:"Wartung & SLA"},{value:"optimization",label:"Optimierung & Weiterentwicklung"},{value:"plugins",label:"Plugin-/Payment-Entwicklung"},{value:"consultation",label:"Erstberatung"}],s=t?{meta:{title:"Contact | Check Project Fit | shape & shift",description:"We do not work with every project. Before investing time, we check if requirements, decision paths, and collaboration fit our setup."},hero:{title:"Does Your Project Fit Our Approach?",subtitle:"We do not work with every project. Before investing time, we check if requirements, decision paths, and collaboration fit our setup. This saves both sides unnecessary loops."},whenFits:{title:"When a Conversation Makes Sense",items:["Shopware 6 is strategically set, not experimental","There is a clear technical contact person","Decisions can be made promptly","Long-term development is planned"]},whenNot:{title:"When It Probably Does Not Fit",items:["Requirements are deliberately kept open","Technical decisions are regularly postponed","Collaboration should mainly run through formal alignment rounds","Shopware 6 is only intended as a short-term interim solution"],note:"This assessment is not an exclusion, but a realistic estimate from project experience."},expectation:{title:"What to Expect in the First Conversation",text:"The first conversation is not a sales call. We clarify project context, technical framework, and collaboration. At the end, it is clear whether a joint path makes sense or not."},form:{intro:"Describe your project as concretely as possible. The clearer the context, the better we can assess if it fits.",concern:"Your Enquiry",name:"Name",email:"Email",company:"Company (optional)",message:"Message",placeholder:"Project scope, current systems, decision structure, desired timeline",submit:"Request Project Fit Check",submitting:"Sending..."},sidebar:{directContact:"Direct Contact",email:"Email",responseTitle:"Our Approach",responseText:"Not every project fits our approach. Clarifying this early is part of our standard."},success:"Thank you for your enquiry! We will review the fit and get back to you."}:{meta:{title:"Kontakt | Projekt-Fit prüfen | shape & shift",description:"Wir arbeiten nicht mit jedem Projekt. Bevor wir Zeit investieren, prüfen wir, ob Anforderungen, Entscheidungswege und Zusammenarbeit zu unserem Setup passen."},hero:{title:"Passt Ihr Projekt zu unserer Arbeitsweise?",subtitle:"Wir arbeiten nicht mit jedem Projekt. Bevor wir Zeit investieren, prüfen wir, ob Anforderungen, Entscheidungswege und Zusammenarbeit zu unserem Setup passen. Das spart beiden Seiten unnötige Schleifen."},whenFits:{title:"Wann ein Gespräch sinnvoll ist",items:["Shopware 6 ist strategisch gesetzt, nicht experimentell","Es gibt einen klaren technischen Ansprechpartner","Entscheidungen können zeitnah getroffen werden","Eine langfristige Weiterentwicklung ist geplant"]},whenNot:{title:"Wann es vermutlich nicht passt",items:["Anforderungen sollen bewusst offen bleiben","Technische Entscheidungen werden regelmäßig vertagt","Zusammenarbeit soll hauptsächlich über formale Abstimmungsrunden laufen","Shopware 6 ist nur als kurzfristige Übergangslösung gedacht"],note:"Diese Einordnung ist kein Ausschluss, sondern eine realistische Einschätzung aus Projekterfahrung."},expectation:{title:"Was Sie im ersten Gespräch erwartet",text:"Das erste Gespräch ist kein Verkaufsgespräch. Wir klären Projektkontext, technische Rahmenbedingungen und Zusammenarbeit. Am Ende ist klar, ob ein gemeinsamer Weg sinnvoll ist oder nicht."},form:{intro:"Beschreiben Sie Ihr Vorhaben so konkret wie möglich. Je klarer der Kontext, desto besser können wir einschätzen, ob es passt.",concern:"Ihr Anliegen",name:"Name",email:"E-Mail",company:"Unternehmen (optional)",message:"Nachricht",placeholder:"Projektumfang, aktuelle Systeme, Entscheidungsstruktur, gewünschter Zeitrahmen",submit:"Projekt-Fit anfragen",submitting:"Wird gesendet..."},sidebar:{directContact:"Direkter Kontakt",email:"E-Mail",responseTitle:"Unser Anspruch",responseText:"Nicht jedes Projekt passt zu unserer Arbeitsweise. Das früh zu klären ist Teil unseres Anspruchs."},success:"Vielen Dank für Ihre Anfrage! Wir prüfen den Fit und melden uns bei Ihnen."},f=async i=>{var g;i.preventDefault(),a(!0);const c=new FormData(i.target),p=c.get("concern")||"consultation",h=((g=u.find(o=>o.value===p))==null?void 0:g.label)||p;try{const{data:o,error:m}=await ce.functions.invoke("send-contact-email",{body:{name:c.get("name"),email:c.get("email"),company:c.get("company")||"",concern:p,concernLabel:h,message:c.get("message"),language:t?"en":"de"}});if(m){console.error("Error sending email:",m),k.error(t?"Failed to send message. Please try again.":"Nachricht konnte nicht gesendet werden. Bitte versuchen Sie es erneut."),a(!1);return}typeof window<"u"&&window.plausible&&window.plausible("Contact Form Submitted",{props:{concern:h,language:t?"en":"de"}}),k.success(s.success),i.target.reset()}catch(o){console.error("Error:",o),k.error(t?"Failed to send message. Please try again.":"Nachricht konnte nicht gesendet werden. Bitte versuchen Sie es erneut.")}finally{a(!1)}};
11return e.jsxs(ae,{children:[e.jsx(ne,{title:s.meta.title,description:s.meta.description}),e.jsx(ie,{type:"breadcrumb",items:[{name:t?"Home":"Start",url:"/"},{name:t?"Contact":"Kontakt",url:t?"/en/contact":"/kontakt"}]}),e.jsx("section",{className:"section-padding gradient-subtle",children:e.jsx("div",{className:"container-wide",children:e.jsxs("div",{className:"max-w-3xl",children:[e.jsx("h1",{className:"font-display text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold text-foreground leading-[1.15] tracking-tight",children:s.hero.title}),e.jsx("p",{className:"mt-6 text-xl text-muted-foreground leading-relaxed",children:s.hero.subtitle})]})})}),e.jsx("section",{className:"py-16 md:py-20 bg-background border-b border-border/40",children:e.jsx("div",{className:"container-wide",children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-12 lg:gap-16 max-w-4xl",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"font-display text-xl md:text-2xl font-bold text-foreground mb-6",children:s.whenFits.title}),e.jsx("ul",{className:"space-y-3",children:s.whenFits.items.map((i,c)=>e.jsxs("li",{className:"flex items-start gap-3 text-muted-foreground",children:[e.jsx("span",{className:"text-primary mt-1",children:"•"}),e.jsx("span",{children:i})]},c))})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"font-display text-xl md:text-2xl font-bold text-foreground mb-6",children:s.whenNot.title}),e.jsx("ul",{className:"space-y-3",children:s.whenNot.items.map((i,c)=>e.jsxs("li",{className:"flex items-start gap-3 text-muted-foreground",children:[e.jsx("span",{className:"text-muted-foreground/50 mt-1",children:"•"}),e.jsx("span",{children:i})]},c))}),e.jsx("p",{className:"mt-6 text-sm text-muted-foreground/70",children:s.whenNot.note})]})]})})}),e.jsx("section",{className:"py-12 md:py-16 bg-muted/30",children:e.jsx("div",{className:"container-wide",children:e.jsxs("div",{className:"max-w-2xl",children:[e.jsx("h2",{className:"font-display text-xl md:text-2xl font-bold text-foreground mb-4",children:s.expectation.title}),e.jsx("p",{className:"text-muted-foreground leading-relaxed",children:s.expectation.text})]})})}),e.jsx("section",{className:"section-padding bg-background",children:e.jsx("div",{className:"container-wide",children:e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-5 gap-12 lg:gap-16",children:[e.jsxs("div",{className:"lg:col-span-3",children:[e.jsx("p",{className:"text-muted-foreground leading-relaxed mb-8",children:s.form.intro}),e.jsxs("form",{onSubmit:f,className:"space-y-8",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx(x,{className:"text-base font-medium",children:s.form.concern}),e.jsx(H,{name:"concern",defaultValue:"consultation",className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:u.map(i=>e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx($,{value:i.value,id:i.value}),e.jsx(x,{htmlFor:i.value,className:"font-normal cursor-pointer",children:i.label})]},i.value))})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(x,{htmlFor:"name",children:s.form.name}),e.jsx(w,{id:"name",name:"name",required:!0})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(x,{htmlFor:"email",children:s.form.email}),e.jsx(w,{id:"email",name:"email",type:"email",required:!0})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(x,{htmlFor:"company",children:s.form.company}),e.jsx(w,{id:"company",name:"company"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(x,{htmlFor:"message",children:s.form.message}),e.jsx(I,{id:"message",name:"message",rows:6,placeholder:s.form.placeholder,required:!0})]}),e.jsx(oe,{type:"submit",size:"lg",disabled:d,children:d?s.form.submitting:s.form.submit})]})]}),e.jsx("div",{className:"lg:col-span-2",children:e.jsxs("div",{className:"sticky top-28 space-y-8",children:[e.jsxs("div",{className:"p-8 bg-card rounded-lg border border-border shadow-card",children:[e.jsx("h3",{className:"font-display text-xl font-semibold text-foreground mb-6",children:s.sidebar.directContact}),e.jsx("div",{className:"space-y-6",children:e.jsxs("div",{className:"flex items-start gap-4",children:[e.jsx("div",{className:"w-10 h-10 rounded-full bg-secondary flex items-center justify-center flex-shrink-0",children:e.jsx(ue,{className:"h-5 w-5 text-foreground"})}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-foreground",children:s.sidebar.email}),e.jsx("a",{href:"mailto:[email protected]",className:"text-muted-foreground hover:text-foreground transition-colors",children:"[email protected]"})]})]})})]}),e.jsxs("div",{className:"p-8 bg-secondary rounded-lg",children:[e.jsx("h3",{className:"font-display text-lg font-semibold text-foreground mb-3",children:s.sidebar.responseTitle}),e.jsx("p",{className:"text-muted-foreground text-sm leading-relaxed",children:s.sidebar.responseText})]})]})})]})})})]})}export{Ae as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.