1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[388],{46577:function(e,t,n){n.d(t,{R:function(){return l}});var r=n(57437);function l(e){let{icon:t,title:n,message:l,className:a="py-12"}=e;return(0,r.jsxs)("div",{className:"flex flex-col items-center justify-center px-6 text-center ".concat(a),children:[t&&(0,r.jsx)("div",{className:"mb-3 text-muted-foreground/40",children:t}),n&&(0,r.jsx)("p",{className:"mb-1 text-sm font-semibold text-foreground",children:n}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:l})]})}},75795:function(e,t,n){n.d(t,{Z:function(){return a}});var r=n(57437),l=n(51817);function a(e){let{className:t=""}=e;return(0,r.jsx)("div",{className:"flex justify-center py-5 ".concat(t),children:(0,r.jsx)(l.Z,{className:"h-5 w-5 animate-spin text-muted-foreground/50"})})}},39703:function(e,t,n){n.d(t,{d:function(){return p}});var r=n(57437),l=n(2265),a=n(54887),s=n(64413),u=n(44794),i=n(92369),o=n(53417),c=n(48520),d=n(75795);function f(e){let{type:t,query:n,onSelect:a,onDismiss:s,productId:u,inline:i}=e,[o,f]=(0,l.useState)([]),[m,p]=(0,l.useState)(0),[g,h]=(0,l.useState)(!1),x=(0,l.useRef)(null),v=(0,l.useRef)(),y=(0,l.useCallback)(async e=>{h(!0);try{if("brand"===t){let t=await fetch("/api/brands/search?q=".concat(encodeURIComponent(e),"&limit=8"));if(t.ok){let e=await t.json();f(e.results.map(e=>({id:e.id,name:e.name,slug:e.slug,logo_url:e.logo_url})))}}else if("user"===t){let t=e.trim()||"*",n=await fetch("/api/search?q=".concat(encodeURIComponent(t),"&type=users&limit=8"));if(n.ok){let e=await n.json();f(e.results.map(e=>({id:e.id,name:e.username,slug:e.username,avatar_url:e.avatar_url,username:e.username})))}}else if("take"===t){if(!u){f([]),h(!1);return}let t=await fetch("/api/takes?product_id=".concat(u));if(t.ok){let n=(await t.json()).takes||[],r=e.trim()?n.filter(t=>{var n,r;return null===(r=t.user)||void 0===r?void 0:null===(n=r.username)||void 0===n?void 0:n.toLowerCase().includes(e.toLowerCase())}):n;f(r.slice(0,8).map(e=>{var t,n,r,l;return{id:e.id,name:(null===(t=e.user)||void 0===t?void 0:t.username)||"Unknown",slug:(null===(n=e.user)||void 0===n?void 0:n.username)||"",avatar_url:null===(r=e.user)||void 0===r?void 0:r.avatar_url,username:null===(l=e.user)||void 0===l?void 0:l.username,take_id:e.id}}))}}else{let t=e.trim()||"*",n=await fetch("/api/search?q=".concat(encodeURIComponent(t),"&type=products&limit=8"));if(n.ok){let e=await n.json();f(e.results.map(e=>({id:e.id,name:e.name,slug:e.slug,brand_slug:e.brand_slug,brand_name:e.brand_name,image_url:e.image_url})))}}}catch(e){f([])}h(!1)},[t,u]);if((0,l.useEffect)(()=>(n.trim()?(clearTimeout(v.current),v.current=setTimeout(()=>y(n),150)):y(n),()=>clearTimeout(v.current)),[n,y]),(0,l.useEffect)(()=>{p(0)},[o]),(0,l.useEffect)(()=>{let e=e=>{"Escape"===e.key?(e.preventDefault(),s()):"ArrowDown"===e.key?(e.preventDefault(),p(e=>Math.min(e+1,o.length-1))):"ArrowUp"===e.key?(e.preventDefault(),p(e=>Math.max(e-1,0))):"Enter"===e.key&&o.length>0&&(e.preventDefault(),a(o[m]))};return document.addEventListener("keydown",e,!0),()=>document.removeEventListener("keydown",e,!0)},[o,m,a,s]),!n&&0===o.length&&!g)return null;let b="brand"===t?"Brands":"user"===t?"Users":"take"===t?"Takes":"Products";return(0,r.jsxs)("div",{ref:x,className:i?"h-full":"absolute bottom-full mb-1 left-0 right-0 z-[60] bg-white/95 backdrop-blur-sm border border-border rounded-lg shadow-sm py-1",style:i?void 0:{height:280},children:[(0,r.jsx)("div",{className:"px-3 py-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wide flex-shrink-0",children:b}),(0,r.jsxs)("div",{className:"overflow-y-auto h-[calc(100%-28px)] scrollbar-hide",children:[g&&0===o.length&&(0,r.jsx)(d.Z,{className:"py-3"}),!g&&n&&0===o.length&&(0,r.jsxs)("div",{className:"px-3 py-2.5 text-sm text-muted-foreground",children:["No ",b.toLowerCase()," found"]}),o.map((e,n)=>{var l,s;return(0,r.jsxs)("button",{onMouseDown:t=>{t.preventDefault(),a(e)},className:"w-full text-left px-3 py-2.5 text-sm flex items-center gap-3 transition-colors active:bg-gray-100 ".concat(n===m?"bg-gray-100":"hover:bg-gray-50"),children:["brand"===t&&(0,r.jsx)(c.q,{url:null!==(l=e.logo_url)&&void 0!==l?l:null,username:e.name,size:28}),"product"===t&&(e.image_url?(0,r.jsx)("img",{src:e.image_url,alt:"",className:"w-7 h-7 rounded object-cover ring-1 ring-black/[0.08] flex-shrink-0"}):(0,r.jsx)("div",{className:"w-7 h-7 rounded bg-gray-100 ring-1 ring-black/[0.08] flex-shrink-0"})),("user"===t||"take"===t)&&(0,r.jsx)(c.q,{url:null!==(s=e.avatar_url)&&void 0!==s?s:null,username:e.name,size:28}),(0,r.jsxs)("div",{className:"min-w-0",children:[(0,r.jsx)("div",{className:"font-medium truncate",children:"take"===t?"".concat(e.name,"'s take"):e.name}),"product"===t&&e.brand_name&&(0,r.jsx)("div",{className:"text-xs text-muted-foreground truncate",children:e.brand_name})]})]},e.id)})]})]})}let m={brand:s.Z,product:u.Z,user:i.Z,take:o.Z};
1function p(e){let{containerRef:t,mentionMenu:n,mentionMenuIndex:s,mentionTypes:u,onMentionTypeSelect:i,onMentionMenuIndexChange:o,autocomplete:c,onEntitySelect:d,onDismiss:p,productId:g}=e,h=(0,l.useRef)(null),[x,v]=(0,l.useState)(null),y=!!(n&&!c),b=y||!!c,w=(0,l.useCallback)(()=>{let e=t.current;if(!e)return;let n=e.getBoundingClientRect();v({top:n.top>=280||n.top>window.innerHeight-n.bottom?n.top-280-4:n.bottom+4,left:n.left,width:n.width})},[t]);if((0,l.useEffect)(()=>{if(b)return w(),window.addEventListener("scroll",w,!0),window.addEventListener("resize",w),()=>{window.removeEventListener("scroll",w,!0),window.removeEventListener("resize",w)}},[b,w]),!b||!x)return null;let k={position:"fixed",top:x.top,left:x.left,width:x.width};return y?(0,a.createPortal)((0,r.jsxs)("div",{ref:h,className:"z-[200] bg-white/95 backdrop-blur-sm rounded-lg border border-border shadow-lg py-1",style:{...k,maxWidth:220,maxHeight:280},children:[(0,r.jsx)("div",{className:"px-3 py-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wide",children:"Mention"}),(0,r.jsx)("div",{className:"scrollbar-hide overflow-y-auto",style:{maxHeight:"calc(280px - 28px)"},children:u.map((e,t)=>{let n=m[e.type];return(0,r.jsxs)("button",{onMouseDown:t=>{t.preventDefault(),i(e.type)},onTouchEnd:t=>{t.preventDefault(),i(e.type)},onMouseEnter:()=>o(t),className:"w-full flex items-center gap-3 px-3 py-2.5 text-foreground transition-colors ".concat(t===s?"bg-gray-100":"hover:bg-gray-50"),children:[(0,r.jsx)(n,{className:"w-4 h-4 text-muted-foreground flex-shrink-0"}),(0,r.jsx)("span",{className:"text-sm font-medium",children:e.label})]},e.type)})})]}),document.body):(0,a.createPortal)((0,r.jsx)("div",{ref:h,className:"z-[200] bg-white/95 backdrop-blur-sm border border-border rounded-lg shadow-lg py-1",style:{...k,height:280},children:(0,r.jsx)(f,{type:c.type,query:c.query,onSelect:d,onDismiss:p,productId:g,inline:!0})}),document.body)}},49732:function(e,t,n){n.d(t,{B:function(){return i}});var r=n(57437),l=n(2265),a=n(21265),s=n(65126),u=n(39703);let i=(0,l.forwardRef)(function(e,t){let{value:n,onChange:i,placeholder:o,maxLength:c,className:d="",rows:f=4,minHeight:m="120px",maxHeight:p="300px",productId:g,onSubmit:h}=e,x=(0,l.useRef)(null),v=(0,l.useRef)(null),y=(0,a.Y8)({value:n,onChange:i,maxLength:c,productId:g,onSubmit:h});return(0,l.useImperativeHandle)(t,()=>({focus:()=>{var e;return null===(e=y.inputRef.current)||void 0===e?void 0:e.focus()},getRawBody:()=>y.buildRawBody(),getDisplayLength:()=>(0,s.DV)(y.buildRawBody())})),(0,r.jsxs)("div",{ref:x,className:"relative",children:[(0,r.jsx)(u.d,{containerRef:x,mentionMenu:y.mentionMenu,mentionMenuIndex:y.mentionMenuIndex,mentionTypes:y.mentionTypes,onMentionTypeSelect:y.handleMentionTypeSelect,onMentionMenuIndexChange:y.setMentionMenuIndex,autocomplete:y.autocomplete,onEntitySelect:y.handleEntitySelect,onDismiss:()=>y.setAutocomplete(null),productId:g}),(0,r.jsx)("div",{ref:v,className:"absolute inset-0 z-[1] pointer-events-none whitespace-pre-wrap break-words overflow-hidden ".concat(d),style:{minHeight:m},"aria-hidden":"true",children:y.styledSegments.map((e,t)=>(0,r.jsx)("span",{className:"leading-[inherit] ".concat(e.isMention?"text-[#1a6dd4]":"text-foreground"),children:e.text},t))}),(0,r.jsx)("textarea",{ref:y.inputRef,value:y.text,onChange:e=>y.handleChange(e.target.value,e.target.selectionStart),onKeyDown:y.handleKeyDown,onScroll:()=>{let e=y.inputRef.current;e&&v.current&&(v.current.scrollTop=e.scrollTop)},onBlur:y.dismissMenus,placeholder:o,rows:f,className:"relative z-[2] w-full resize-none bg-transparent text-transparent caret-foreground selection:bg-black/10 placeholder:text-muted-foreground/40 focus:outline-none ".concat(d),style:{minHeight:m,maxHeight:p},onInput:e=>{let t=e.target;t.style.height="auto",t.style.height=Math.min(t.scrollHeight,parseInt(p))+"px"}})]})})},65126:function(e,t,n){n.d(t,{DV:function(){return o},QN:function(){return a},Vt:function(){return s},XM:function(){return c},Z8:function(){return l},jw:function(){return i},kU:function(){return u}});let r=/\{\{(brand|product|user|take):([^:}]+):([^:}]+):([^:}]+?)(?::([^}]+))?\}\}/g;function l(e){let t;let n=[],l=0,a=new RegExp(r.source,r.flags);for(;null!==(t=a.exec(e));){let[r,a,s,u,i,o]=t,c=t.index;c>l&&n.push({type:"text",text:e.slice(l,c)}),n.push({type:a,text:i,id:s,path:u,imageUrl:o||void 0}),l=c+r.length}return l<e.length&&n.push({type:"text",text:e.slice(l)}),n}function a(e,t,n,r){let l="{{brand:".concat(e,":").concat(t,":").concat(n);return r?"".concat(l,":").concat(r,"}}"):"".concat(l,"}}")}function s(e,t,n,r,l){let a="{{product:".concat(e,":").concat(t,"/").concat(n,":").concat(r);return l?"".concat(a,":").concat(l,"}}"):"".concat(a,"}}")}function u(e,t,n){return"{{user:".concat(e,":").concat(t,":").concat(n,"}}
1")}function i(e,t){return"{{take:".concat(e,":").concat(e,":@").concat(t,"'s take}}")}function o(e){return e.replace(r,(e,t,n,r,l)=>l).length}function c(e){return e.replace(r,(e,t,n,r,l)=>l)}},21265:function(e,t,n){n.d(t,{Y8:function(){return i}});var r=n(2265),l=n(65126);function a(e){let t=(0,l.Z8)(e),n="",r=[];for(let e of t)if("text"===e.type)n+=e.text;else{let t;let a="@".concat(e.text),s=n.length;if(n+=a,"brand"===e.type)t=(0,l.QN)(e.id,e.path,e.text,e.imageUrl);else if("product"===e.type){let[n,r]=(e.path||"/").split("/");t=(0,l.Vt)(e.id,n,r,e.text,e.imageUrl)}else t="user"===e.type?(0,l.kU)(e.id,e.path,e.text):(0,l.jw)(e.id,e.text.replace(/'s take$/,"").replace(/^@/,""));r.push({start:s,end:s+a.length,display:a,token:t})}return{displayText:n,mentions:r}}function s(e,t){if(0===t.length)return e;let n=[...t].sort((e,t)=>e.start-t.start),r="",l=0;for(let t of n)r+=e.slice(l,t.start)+t.token,l=t.end;return r+e.slice(l)}let u=[{type:"brand",label:"Brand"},{type:"product",label:"Product"},{type:"user",label:"User"}];function i(e){let{value:t,onChange:n,maxLength:i,productId:o,singleLine:c,onSubmit:d}=e,[f,m]=(0,r.useState)(()=>t.includes("{{")?a(t).displayText:t),[p,g]=(0,r.useState)(()=>t.includes("{{")?a(t).mentions:[]),[h,x]=(0,r.useState)(null),[v,y]=(0,r.useState)(null),[b,w]=(0,r.useState)(0),k=(0,r.useRef)(null),j=(0,r.useRef)(!1),N=(0,r.useMemo)(()=>{let e=[...u];return o&&e.push({type:"take",label:"Take"}),e},[o]);(0,r.useEffect)(()=>{if(t!==f){if(t.includes("{{")){let{displayText:e,mentions:n}=a(t);m(e),g(n)}else m(t),g([])}},[t]);let M=(0,r.useCallback)(()=>s(f,p),[f,p]),_=(0,r.useMemo)(()=>{if(0===p.length)return f?[{text:f,isMention:!1}]:[];let e=[...p].sort((e,t)=>e.start-t.start),t=[],n=0;for(let r of e)r.start>n&&t.push({text:f.slice(n,r.start),isMention:!1}),t.push({text:f.slice(r.start,r.end),isMention:!0}),n=r.end;return n<f.length&&t.push({text:f.slice(n),isMention:!1}),t},[f,p]),D=(0,r.useCallback)((e,t)=>{if(c&&e.includes("\n")&&(e=e.replace(/\n/g,"")),i){let t=s(e,p);if((0,l.DV)(t)>i)return}let r=function(e,t,n){if(0===n.length)return[];if(e===t)return n;let r=0,l=Math.min(e.length,t.length);for(;r<l&&e[r]===t[r];)r++;let a=0;for(;a<e.length-r&&a<t.length-r&&e[e.length-1-a]===t[t.length-1-a];)a++;let s=e.length-a,u=t.length-e.length;return n.map(e=>e.end<=r?e:e.start>=s?{...e,start:e.start+u,end:e.end+u}:null).filter(e=>null!==e).filter(e=>!(e.end>t.length)&&t.slice(e.start,e.end)===e.display)}(f,e,p);if(e.slice(0,t).match(/(^|[\s])@$/)&&!h){y({triggerPos:t-1}),w(0),g(r),m(e),n(e,s(e,r));return}if(v){let n=v.triggerPos;if("@"===e[n]&&t>n+1){let r=e.slice(n+1,t);r.includes("\n")||r.includes(" ")?y(null):(y(null),x({type:"brand",query:r,triggerPos:n}))}else"@"!==e[n]&&y(null)}if(h){if("@"===e[h.triggerPos]&&t>h.triggerPos){let n=e.slice(h.triggerPos+1,t);n.includes("\n")?x(null):x(e=>e?{...e,query:n}:null)}else x(null)}g(r),m(e),n(e,s(e,r))},[f,p,h,v,i,c,n]),R=(0,r.useCallback)(e=>{if(!v)return;let{triggerPos:t}=v;y(null),x({type:e,query:"",triggerPos:t}),requestAnimationFrame(()=>{if(k.current){let e=t+1;k.current.focus(),k.current.setSelectionRange(e,e)}})},[v]),E=(0,r.useCallback)(e=>{var t,r;let a;if(!h)return;let{triggerPos:u,type:i}=h,o=null!==(r=null===(t=k.current)||void 0===t?void 0:t.selectionStart)&&void 0!==r?r:f.length,c=f.slice(0,u),d=f.slice(o),v="@".concat(e.name);if("brand"===i)a=(0,l.QN)(e.id,e.slug,e.name,e.logo_url||void 0);else if("user"===i)a=(0,l.kU)(e.id,e.username||e.slug,e.name);else if("take"===i){let t=e.username||e.name;a=(0,l.jw)(e.id,t),v="@".concat(t,"'s take")}else a=(0,l.Vt)(e.id,e.brand_slug||"",e.slug,e.name,e.image_url||void 0);let y=c+v+d,b={start:u,end:u+v.length,display:v,token:a},w=y.length-f.length,N=[...p.map(e=>e.start>=u?{...e,start:e.start+w,end:e.end+w}:e),b];g(N),m(y),x(null),n(y,s(y,N)),j.current=!0,requestAnimationFrame(()=>{if(k.current){let e=u+v.length;k.current.focus(),k.current.setSelectionRange(e,e)}j.current=!1})},[h,f,p,n]),S=(0,r.useCallback)(e=>{if(v&&!h){if("ArrowDown"===e.key){e.preventDefault(),w(e=>Math.min(e+1,N.length-1));return}if("ArrowUp"===e.key){e.preventDefault(),w(e=>Math.max(e-1,0));return}if("Enter"===e.key){e.preventDefault(),R(N[b].type);return}if("Escape"===e.key){e.preventDefault(),y(null);return}}if(!h&&!j.current){if("Backspace"===e.key||"Delete"===e.key){var t,r,l,a;let u=null!==(l=null===(t=k.current)||void 0===t?void 0:t.selectionStart)&&void 0!==l?l:0,i=null!==(a=null===(r=k.current)||void 0===r?void 0:r.selectionEnd)&&void 0!==a?a:u;if(u===i){let t=p.find(t=>"Backspace"===e.key?u>t.start&&u<=t.end:u>=t.start&&u<t.end);if(t){e.preventDefault();
1let r=f.slice(0,t.start)+f.slice(t.end),l=t.end-t.start,a=p.filter(e=>e!==t).map(e=>e.start>t.start?{...e,start:e.start-l,end:e.end-l}:e);g(a),m(r),n(r,s(r,a)),requestAnimationFrame(()=>{k.current&&k.current.setSelectionRange(t.start,t.start)});return}}}"Enter"===e.key&&!e.shiftKey&&d&&(e.preventDefault(),d())}},[v,h,p,f,N,b,R,n,d]),C=(0,r.useCallback)(()=>{setTimeout(()=>{y(null)},200)},[]),T=(0,r.useCallback)((e,t)=>{let r=f?"".concat(f," ").concat(t," "):"".concat(t," "),l=f?f.length+1:0,a=[...p,{start:l,end:l+t.length,display:t,token:e}];m(r),g(a),n(r,s(r,a)),requestAnimationFrame(()=>{if(k.current){k.current.focus();let e=r.length;k.current.setSelectionRange(e,e)}})},[f,p,n]);return{text:f,mentions:p,autocomplete:h,mentionMenu:v,mentionMenuIndex:b,mentionTypes:N,styledSegments:_,inputRef:k,justSelectedRef:j,handleChange:D,handleKeyDown:S,handleMentionTypeSelect:R,handleEntitySelect:E,dismissMenus:C,buildRawBody:M,insertMention:T,setAutocomplete:x,setMentionMenu:y,setMentionMenuIndex:w}}}}]);
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.