1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[18],{1708:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>m});var r=a(7876),s=a(9739),i=a(7829),n=a(4232),o=a(4587),l=a.n(o);function c({images:e,categoryDescriptions:t={}}){let[a,s]=(0,n.useState)(null),[i,o]=(0,n.useState)(0),d=(0,n.useMemo)(()=>Array.from(new Set(e.map(e=>e.category))),[e]),[m,g]=(0,n.useState)(d[0]??""),u=()=>s(null),h=()=>{if(!a)return;let e=p[m]||[];o(t=>0===t?e.length-1:t-1),s(e[0===i?e.length-1:i-1])},y=()=>{if(!a)return;let e=p[m]||[];o(t=>t===e.length-1?0:t+1),s(e[i===e.length-1?0:i+1])};(0,n.useEffect)(()=>{let e=e=>{"Escape"===e.key&&u(),"ArrowLeft"===e.key&&h(),"ArrowRight"===e.key&&y()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[a,i,m]),(0,n.useEffect)(()=>{if(!a)return;let e=0,t=0,r=t=>{e=t.touches[0].clientX},s=a=>{t=a.changedTouches[0].clientX;let r=e-t;r>50&&y(),r<-50&&h()};return window.addEventListener("touchstart",r),window.addEventListener("touchend",s),()=>{window.removeEventListener("touchstart",r),window.removeEventListener("touchend",s)}},[a,i,m]);let p=(0,n.useMemo)(()=>e.reduce((e,t)=>(e[t.category]=e[t.category]||[],e[t.category].push(t),e),{}),[e]),w=t[m];return(0,r.jsxs)("section",{id:"gallery-404",children:[(0,r.jsxs)("div",{className:"cs-container",children:[(0,r.jsxs)("div",{className:"cs-content",children:[(0,r.jsx)("div",{className:"cs-flex",children:(0,r.jsx)("h2",{className:"cs-title",children:"Recent Projects"})}),(0,r.jsx)("div",{className:"cs-button-group",children:d.map(e=>(0,r.jsx)("button",{className:`cs-button${m===e?" cs-active":""}`,onClick:()=>g(e),"data-filter":e,type:"button",children:e.replace(/-/g," ")},e))})]}),w&&(0,r.jsx)("div",{className:"cs-category-description",children:w}),(0,r.jsx)("div",{className:"cs-gallery-wrapper",children:d.map(e=>{let t;return t=p[e]||[],(0,r.jsx)("div",{className:`cs-gallery ${m===e?"":"cs-hidden"}`,"data-category":e,children:t.map((t,a)=>(0,r.jsx)("div",{className:"cs-image",onClick:()=>{s(t),o(a)},style:{cursor:"pointer"},children:(0,r.jsx)(l(),{src:t.src,alt:t.alt,fill:!0,loading:"lazy",decoding:"async",sizes:"(min-width: 81.25rem) 39.375rem, (min-width: 48rem) 31.8vw, 47vw"})},`${e}-${a}`))},e)})})]}),a&&(0,r.jsx)("div",{className:"gallery-modal",onClick:u,children:(0,r.jsxs)("div",{className:"gallery-modal-content",onClick:e=>e.stopPropagation(),children:[(0,r.jsx)("button",{className:"gallery-close",onClick:u,children:"\xd7"}),(0,r.jsx)("button",{className:"gallery-arrow left",onClick:h,children:"â®"}),(0,r.jsx)("button",{className:"gallery-arrow right",onClick:y,children:"â¯"}),(0,r.jsx)(l(),{src:a.src,alt:a.alt,width:a.width??1200,height:a.height??900})]})})]})}var d=a(1903);function m(){let e={Featured:"","Custom Walnut Cabinetry":`We partnered with locally based, nationally recognized designer Lisa Staton to create the custom woodwork for this stunning remodel near Sehome Hill Arboretum in Bellingham, Washington. 2 3The project included kitchen cabinetry, floating shelves, bathroom vanities, a dining table base, and built-in closets for the primary bedroom. Because we were involved throughout nearly every room of the home, we were able to create a cohesive look that felt unified without becoming repetitive. 4 5Crafted primarily from walnut, the cabinetry and vanities offer a warm, contemporary feel, while carefully matched grain patterns allow the wood to flow seamlessly across the space. The project also included a custom oak-veneered dining table base finished in black, adding a distinctive focal point to the home.`,"Full Kitchen Remodel":"This full kitchen remodel in South Bellingham, designed in partnership with Domistyle, transformed a cramped layout into a more functional space built for a busy fam
5ily and multiple cooks. By keeping major rough-ins like the sink and range in place, the project controlled costs and freed up budget for practical upgrades, including added organization, soft-close drawers, durable laminate cabinet doors with an embossed wood-grain finish, and a custom pull-out stool for easier access to high cabinets.","Custom Craft Room":"This custom craft room, designed in-house, was created as a comfortable and highly multifunctional space with wood built-ins and paperstone countertops. The updated cabinetry includes a large desk with dimmable integrated lighting beneath the upper shelf for consistent task lighting throughout the day, while a rolling drawer bank and craft cabinet add flexible workspace that can serve as a central island in the room or be moved into other areas like the kitchen for baking and other projects."};return(0,r.jsxs)("div",{style:{width:"100%"},children:[(0,r.jsx)(s.A,{title:"Project Gallery | Custom Cabinetry & Millwork by Samish Cabinetry",description:"Browse recent Samish Cabinetry projects, including custom kitchens, walnut cabinetry, built-ins, and millwork for residential and commercial spaces.",path:"/gallery"}),(0,r.jsx)(i.A,{title:"Our Work",text:`Every project tells a story. 6 7From custom kitchens and built-in storage to commercial millwork and specialty projects, we take pride in creating cabinetry that is functional, beautiful, and built to last. 8 9Browse a selection of our recent work and see what's possible when quality craftsmanship meets thoughtful design. 10 11Have more questions about our work?`,buttonHref:"/contact#faq",buttonText:"See FAQ",imgSrc:"/images/gallery/gallery-hero.jpg",imgAlt:"shelves with drawers",firstStitch:!0,reverse:!0})," ",(0,r.jsx)(c,{images:[{src:"/images/gallery/g1-2.jpg",alt:"kitchen cabinetry",category:"Featured"},{src:"/images/gallery/g2-2.jpg",alt:"kitchen cabinetry",category:"Featured"},{src:"/images/gallery/gallery-hero.jpg",alt:"kitchen cabinetry",category:"Featured"},{src:"/images/gallery/g2.jpg",alt:"kitchen cabinetry",category:"Featured"},{src:"/images/gallery/g5.jpg",alt:"kitchen cabinetry",category:"Featured"},{src:"/images/gallery/g3.jpg",alt:"kitchen cabinetry",category:"Featured"},{src:"/images/gallery/g4.jpg",alt:"kitchen cabinetry",category:"Featured"},{src:"/images/gallery/w1.jpg",alt:"custom walnut cabinetry",category:"Custom Walnut Cabinetry"},{src:"/images/gallery/w2.jpg",alt:"custom walnut cabinetry",category:"Custom Walnut Cabinetry"},{src:"/images/gallery/w3.jpg",alt:"custom walnut cabinetry",category:"Custom Walnut Cabinetry"},{src:"/images/gallery/w4.jpg",alt:"custom walnut cabinetry",category:"Custom Walnut Cabinetry"},{src:"/images/gallery/w5.jpg",alt:"custom walnut cabinetry",category:"Custom Walnut Cabinetry"},{src:"/images/gallery/w6.jpg",alt:"custom walnut cabinetry",category:"Custom Walnut Cabinetry"},{src:"/images/gallery/k1.jpeg",alt:"custom kitchen cabinetry",category:"Full Kitchen Remodel"},{src:"/images/gallery/k2.jpeg",alt:"custom kitchen cabinetry",category:"Full Kitchen Remodel"},{src:"/images/gallery/k3.jpeg",alt:"custom kitchen cabinetry",category:"Full Kitchen Remodel"},{src:"/images/gallery/k4.jpeg",alt:"custom kitchen cabinetry",category:"Full Kitchen Remodel"},{src:"/images/gallery/k5.jpeg",alt:"custom kitchen cabinetry",category:"Full Kitchen Remodel"},{src:"/images/gallery/k6.jpeg",alt:"custom kitchen cabinetry",category:"Full Kitchen Remodel"},{src:"/images/gallery/c1.jpeg",alt:"custom craft room",category:"Custom Craft Room"},{src:"/images/gallery/c2.jpeg",alt:"custom craft room",category:"Custom Craft Room"},{src:"/images/gallery/c3.jpeg",alt:"custom craft room",category:"Custom Craft Room"},{src:"/images/gallery/c4.jpeg",alt:"custom craft room",category:"Custom Craft Room"},{src:"/images/gallery/c5.jpeg",alt:"custom craft room",category:"Custom Craft Room"}],categoryDescriptions:e}),(0,r.jsx)(d.A,{title:"Ready to Start Your Project?",buttonText:"Contact Us",buttonHref:"/contact",text:`Whether you're planning a custom kitchen, commercial build-out, or specialty millwork project, we'd love to hear about it. 12Let's talk about your goals and how Samish Cabinetry can help bring your vision to life.`,imageSrc:"/images/index/cta1.jpg",imageAlt:"kitchen",imageStyles:{objectPosition:"center 60%"}})]})}},1903:(e,t,a)=>{"use strict";a.d(t,{A:()=>l});var r=a(7876),s=a(8230),i=a.n(s),n=a(4587),o=a.n(n);function l({title:e,text:t,buttonText:a,buttonHref:s,imageSrc:n,imageAlt:c,extras:d,imageStyles:m}){return(0,r.jsxs)("section",{id:"cta-51",children:[(0,r.jsx)("div",{className:"cs-container",children:(0,r.jsxs)("div",{className:"cs-content",children:[(0,r.jsx)("h2",{className:"cs-title",children:e}),(0,r.jsx)("p",{className:"cs-text",children:t}),s&&a?(0,r.jsx)(i(),{href:s,className:"cs-button-solid",children:a}):(0,r.jsx)("div",{className:"cs-button-solid fake",children:a}),d]})}),(0,r.jsx)("div",{className:"cs-picture",children:(0,r.jsx)(o(),{src:n,alt:c,width:1920,height:1280,loading:"lazy",decoding:"async","aria-hidden":"true",style:m})})]})}},5736:(e,t,a)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/gallery",function(){return a(1708)}])},7328:(e,t,a)=>{e.exports=a(8022)},7829:(e,t,a)=>{"use strict";a.d(t,{A:()=>l});var r=a(7876),s=a(8230),i=a.n(s),n=a(4587),o=a.n(n);function l({topper:e,title:t,text:a,buttonText:s,buttonHref:n,imgSrc:c,imgAlt:d,reverse:m=!1,firstStitch:g=!1}){return(0,r.jsx)("section",{id:"sbs-2348",style:g?{paddingTop:"12rem"}:void 0,children:(0,r.jsxs)("div",{className:`cs-container${m?" cs-container-reverse":""}`,children:[(0,r.jsxs)("div",{className:"cs-content",children:[e&&(0,r.jsx)("span",{className:"cs-topper",children:e}),t&&(0,r.jsx)("h2",{className:"cs-title",children:t}),a?"string"==typeof a?(0,r.jsx)("p",{className:"cs-text",children:a}):a:null,s&&void 0!==n&&(0,r.jsx)(i(),{href:n,className:"cs-button-solid",children:s})]}),c&&d&&(0,r.jsx)("div",{className:"cs-picture",children:(0,r.jsx)(o(),{src:c,alt:d,width:1280,height:568,loading:"lazy",decoding:"async"})})]})})}},9739:(e,t,a)=>{"use strict";a.d(t,{A:()=>d});var r=a(7876),s=a(7328),i=a.n(s),n=a(9099),o=a(1850);let l=["Oak Harbor","Coupeville","Anacortes","Mount Vernon","Burlington","Stanwood"].map(e=>({"@type":"City",name:e,address:{"@type":"PostalAddress",addressLocality:e,addressRegion:"WA",addressCountry:"US"}}));function c(e){return new URL(e.replace(/^\/+/,""),o.W3).toString()}function d({title:e,description:t,path:a,ogDescription:s,ogType:m="website",ogImage:g=o.Ly,twitterCard:u="summary_large_image",noIndex:h=!1,structuredData:y}){var p;let w,j=(0,n.useRouter)(),b=(p=a??j.asPath,"/"===(w=p.split("#")[0]?.split("?")[0]??"")?"":w.replace(/^\/+|\/+$/g,"")),f=b?c(b):o.W3,x=b?b.split("/"):[],k=[{"@context":"https://schema.org","@type":"LocalBusiness",name:o.$i,url:o.W3,logo:o.VI,image:g,email:o.B5,telephone:o.R1||void 0,sameAs:[o.eR,o.Oc,o.gr,o.fm].filter(
12Boolean),address:{"@type":"PostalAddress",addressCountry:"US"},areaServed:l,description:t},{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:o.W3},...x.map((e,t)=>({"@type":"ListItem",position:t+2,name:e.replace(/-/g," ").replace(/\b\w/g,e=>e.toUpperCase()),item:c(x.slice(0,t+1).join("/"))}))]}],v=y?[...k,...Array.isArray(y)?y:[y]]:k;return(0,r.jsxs)(i(),{children:[(0,r.jsx)("title",{children:e},"title"),(0,r.jsx)("meta",{name:"description",content:t},"description"),(0,r.jsx)("meta",{name:"robots",content:h?"noindex,nofollow":"index,follow"},"robots"),(0,r.jsx)("link",{rel:"canonical",href:f},"canonical"),(0,r.jsx)("meta",{property:"og:site_name",content:o.$i},"og-site-name"),(0,r.jsx)("meta",{property:"og:title",content:e},"og-title"),(0,r.jsx)("meta",{property:"og:description",content:s||t},"og-description"),(0,r.jsx)("meta",{property:"og:type",content:m},"og-type"),(0,r.jsx)("meta",{property:"og:url",content:f},"og-url"),(0,r.jsx)("meta",{property:"og:image",content:g},"og-image"),(0,r.jsx)("meta",{property:"og:image:width",content:"1200"},"og-image-width"),(0,r.jsx)("meta",{property:"og:image:height",content:"630"},"og-image-height"),(0,r.jsx)("meta",{name:"twitter:card",content:u},"twitter-card"),(0,r.jsx)("meta",{name:"twitter:title",content:e},"twitter-title"),(0,r.jsx)("meta",{name:"twitter:description",content:s||t},"twitter-description"),(0,r.jsx)("meta",{name:"twitter:image",content:g},"twitter-image"),v.map((e,t)=>(0,r.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(e)}},`structured-data-${t}`))]})}}},e=>{e.O(0,[636,593,792],()=>e(e.s=5736)),_N_E=e.O()}]);
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.