PageSourceSearch

https://simmerism.vercel.app/_next/static/chunks/app/search/page-d6b49b17dbb38b94.js

js simmerism.vercel.app collected 2026-10-03 07:42:55 UTC 21,192 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[959],{955:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>j});var a=s(5155),r=s(8916);let l=(0,s(9946).A)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);var n=s(4416);function i(e){let{value:t,onChange:s,onSearch:r}=e;return(0,a.jsxs)("form",{onSubmit:r,className:"flex flex-row items-center w-full max-w-2xl mx-auto",children:[(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)("div",{className:"absolute inset-y-0 left-0 flex items-center pl-3",children:(0,a.jsx)(l,{className:"text-gray-400"})}),t&&(0,a.jsx)("button",{type:"button",onClick:()=>s(""),className:"absolute inset-y-0 right-3 flex items-center text-gray-500 hover:text-black",children:(0,a.jsx)(n.A,{size:18})}),(0,a.jsx)("input",{type:"text",value:t,onChange:e=>s(e.target.value),placeholder:"搜尋食譜...",className:"w-full border border-gray-300 py-3 pl-10 pr-4 rounded-l"})]}),(0,a.jsx)("button",{type:"submit",className:"bg-[#1E49CF] text-white px-6 py-3 rounded-r neo-button whitespace-nowrap",children:"搜尋"})]})}var d=s(2115);let o=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],s=new Set(t);return e.forEach(e=>{var t;null==(t=e.ingredients)||t.forEach(e=>{var t;(null==(t=e.name)?void 0:t.zh)&&s.add(e.name.zh)})}),Array.from(s).sort()},c=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],s=new Set(t);return e.forEach(e=>{var t;null==(t=e.equipment)||t.forEach(e=>{e.zh&&s.add(e.zh)})}),Array.from(s).sort()},u=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=new Set;return e.forEach(e=>{var s,a;null==(s=e.dishTypes)||s.forEach(e=>e.zh&&t.add(e.zh)),null==(a=e.diets)||a.forEach(e=>e.zh&&t.add(e.zh))}),Array.from(t).sort()},h={ingredients:[],tools:[],time:null,servings:null,tags:[]};function b(e){let{isOpen:t,onClose:s,onApply:r,initialFilters:l,recipes:i=[]}=e,[b,x]=(0,d.useState)(l||h),[m,g]=(0,d.useState)(!1),[p,f]=(0,d.useState)(!1),[v,j]=(0,d.useState)(!1);(0,d.useEffect)(()=>{l&&x(l)},[l]);let y=o(i,["雞肉","豬肉","牛肉","魚","蝦","蛋","豆腐","米飯","麵條","蔬菜"]),N=c(i,["電鍋","平底鍋","炒鍋","烤箱","氣炸鍋","微波爐","電子壓力鍋","慢燉鍋"]),w=u(i),k=m?y:y.slice(0,10),z=p?N:N.slice(0,10),C=v?w:w.slice(0,10),A=e=>{x(t=>({...t,ingredients:t.ingredients.includes(e)?t.ingredients.filter(t=>t!==e):[...t.ingredients,e]}))},S=e=>{x(t=>({...t,tools:t.tools.includes(e)?t.tools.filter(t=>t!==e):[...t.tools,e]}))},E=e=>{x(t=>({...t,tags:t.tags.includes(e)?t.tags.filter(t=>t!==e):[...t.tags,e]}))};return t?(0,a.jsx)("div",{className:"fixed inset-0 bg-black bg-opacity-50 z-50 flex items-center justify-center p-4",children:(0,a.jsxs)("div",{className:"relative bg-white rounded-lg w-full max-w-4xl max-h-[90vh] overflow-y-auto",children:[(0,a.jsxs)("div",{className:"sticky top-0 bg-white border-b border-gray-200 p-4 flex justify-between items-center z-10",children:[(0,a.jsx)("h2",{className:"text-xl font-bold",children:"更多篩選條件"}),(0,a.jsx)("button",{onClick:s,className:"p-2 hover:bg-gray-100 rounded-full neo-button",children:(0,a.jsx)(n.A,{size:24})})]}),(0,a.jsxs)("div",{className:"p-6 space-y-8",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-bold mb-3",children:"食材"}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[k.map(e=>(0,a.jsx)("button",{onClick:()=>A(e),className:"px-3 py-1 rounded border ".concat(b.ingredients.includes(e)?"bg-[#5a9a8e] text-white border-[#5a9a8e] neo-button":"bg-white border-gray-300"),children:e},e)),y.length>10&&(0,a.jsx)("button",{onClick:()=>g(!m),className:"px-3 py-1 rounded border border-gray-400 bg-gray-50 text-gray-600 hover:bg-gray-100",children:m?"收起 (".concat(y.length-10,")"):"更多 (".concat(y.length-10,")")})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-bold mb-3",children:"器具"}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[z.map(e=>(0,a.jsx)("button",{onClick:()=>S(e),className:"px-3 py-1 rounded border ".concat(b.tools.includes(e)?"bg-[#5a9a8e] text-white border-[#5a9a8e] neo-button":"bg-white border-gray-300"),children:e},e)),N.length>10&&(0,a.jsx)("button",{onClick:()=>f(!p),className:"px-3 py-1 rounded border border-gray-400 bg-gray-50 text-gray-600 hover:bg-gray-100",children:p?"收起 (".concat(N.length-10,")"):"更多 (".concat(N.length-10,")")})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-bold mb-3",children:"烹飪時間"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:[{label:"15分鐘內",value:15},{label:"30分鐘內",value:30},{label:"1小時內",value:60},{label:"2小時以上",value:120}].map(e=>(0,a.jsx)("button",{onClick:()=>x(t=>({...t,time:t.time===e.value?null:e.value})),className:"px-3 py-1 rounded border ".concat(b.time===e.value?"bg-[#5a9a8e] text-white border-[#5a9a8e] neo-button":"bg-white border-gray-300"),children:e.label},e.label))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-bold mb-3",children:"適合人數"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:[{label:"1人",value:1},{label:"2人",value:2},{label:"4人",value:4},{label:"6人以上",value:6}].map(e=>(0,a.jsx)("button",{onClick:()=>x(t=>({...t,servings:t.servings===e.value?null:e.value})),className:"px-3 py-1 rounded border ".concat(b.servings===e.value?"bg-[#5a9a8e] text-white border-[#5a9a8e] neo-button":"bg-white border-gray-300"),children:e.label},e.label))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-bold mb-3",children:"標籤"}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[C.map(e=>(0,a.jsx)("button",{onClick:()=>E(e),className:"px-3 py-1 rounded border ".concat(b.tags.includes(e)?"bg-[#5a9a8e] text-white border-[#5a9a8e] neo-button":"bg-white border-gray-300"),children:e},e)),w.length>10&&(0,a.jsx)("button",{onClick:()=>j(!v),className:"px-3 py-1 rounded border border-gray-400 bg-gray-50 text-gray-600 hover:bg-gray-100",children:v?"收起 (".concat(w.length-10,")"):"更多 (".concat(w.length-10,")")})]})]})]}),(0,a.jsxs)("div",{className:"sticky bottom-0 bg-white border-t border-gray-200 p-4 flex justify-between",children:[(0,a.jsx)("button",{onClick:()=>{x(h),g(!1),f(!1),j(!1)},className:"px-6 py-2 border border-gray-300 rounded neo-button",children:"重置"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)("button",{onClick:s,className:"px-6 py-2 border border-gray-300 rounded neo-button",children:"取消"}),(0,a.jsx)("button",{onClick:()=>{r(b),s()},className:"px-6 py-2 bg-[#5a9a8e] text-white border border-[#5a9a8e] rounded neo-button",children:"套用篩選"})]})]})]})}):null}var x=s(2355),m=s(3052);function g(e){let{currentPage:t,totalPages:s,onPageChange:r}=e,l=(()=>
1{if(s<=5)return Array.from({length:s},(e,t)=>t+1);let e=[1];return t>3&&e.push("..."),e.push(...[t-1,t,t+1].filter(e=>e>1&&e<s)),t<s-2&&e.push("..."),e.push(s),e})();return(0,a.jsxs)("div",{className:"flex justify-center items-center mt-8",children:[(0,a.jsxs)("div",{className:"sm:hidden flex items-center justify-center gap-2 mt-8",children:[(0,a.jsx)("button",{onClick:()=>r(t-1),disabled:1===t,className:"w-9 h-9 flex items-center justify-center border-2 border-black text-black bg-[#FB7659] hover:bg-orange-600 disabled:opacity-40","aria-label":"上一頁",children:(0,a.jsx)(x.A,{size:18})}),(0,a.jsxs)("span",{className:"text-sm font-bold border-2 border-black px-3 py-1 text-center bg-[#519181] text-white",children:["第 ",t," / ",s," 頁"]}),(0,a.jsx)("button",{onClick:()=>r(t+1),disabled:t===s,className:"w-9 h-9 flex items-center justify-center border-2 border-black text-black bg-[#FB7659] hover:bg-orange-600 disabled:opacity-40","aria-label":"下一頁",children:(0,a.jsx)(m.A,{size:18})})]}),(0,a.jsxs)("div",{className:"hidden sm:flex flex-wrap justify-center gap-2 px-4",children:[(0,a.jsx)("button",{onClick:()=>r(t-1),disabled:1===t,className:"p-2 border-2 border-black bg-[#FB7659] text-black font-bold hover:bg-orange-600 disabled:opacity-50 flex items-center justify-center","aria-label":"上一頁",children:(0,a.jsx)(x.A,{size:18})}),l.map((e,s)=>"string"==typeof e?(0,a.jsx)("span",{className:"px-2 font-bold",children:"..."},s):(0,a.jsx)("button",{onClick:()=>r(e),className:"px-3 py-1 text-sm font-bold border-2 border-black ".concat(t===e?"bg-[#519181] text-white":"bg-[#FB7659] text-black hover:bg-orange-600"),children:e},s)),(0,a.jsx)("button",{onClick:()=>r(t+1),disabled:t===s,className:"p-2 border-2 border-black bg-[#FB7659] text-black font-bold hover:bg-orange-600 disabled:opacity-50 flex items-center justify-center","aria-label":"下一頁",children:(0,a.jsx)(m.A,{size:18})})]})]})}var p=s(6932),f=s(1542),v=s(3479);function j(){let[e,t]=(0,d.useState)(""),[s,l]=(0,d.useState)(""),[o,c]=(0,d.useState)("全部"),[u,h]=(0,d.useState)(!1),{favorites:x,toggleFavorite:m}=(0,v.A)(),[j,y]=(0,d.useState)(1),[N,w]=(0,d.useState)({ingredients:[],tools:[],time:null,servings:null,tags:[]}),{recipes:k}=(0,f.Z)(),z=N.ingredients.length+N.tools.length+ +!!N.time+ +!!N.servings+N.tags.length,C=t=>{t.preventDefault(),l(e),y(1)},A=(e,t)=>{w(s=>"time"===e||"servings"===e?{...s,[e]:null}:Array.isArray(s[e])?{...s,[e]:s[e].filter(e=>e!==t)}:s)},S={全部:"",主菜:"主菜",甜點:"甜點",湯品:"湯品",小菜:"小菜"},E=k.filter(e=>{var t,a,r,l,n,i,d;let c=s.toLowerCase(),u=e=>"string"==typeof e?e.toLowerCase().includes(c):!!e&&"object"==typeof e&&"zh"in e&&"string"==typeof e.zh&&e.zh.toLowerCase().includes(c),h=(null==(t=e.dishTypes)?void 0:t.map(e=>e.zh).join(" "))||"",b=(null==(a=e.diets)?void 0:a.map(e=>e.zh).join(" "))||"",x=(null==(r=e.equipment)?void 0:r.map(e=>e.zh).join(" "))||"",m=(null==(l=e.ingredients)?void 0:l.map(e=>e.name.zh).join(" "))||"",g=(null==(n=e.readyInMinutes)?void 0:n.toString())||"",p=(null==(i=e.servings)?void 0:i.toString())||"",f=!s||u(null==(d=e.title)?void 0:d.zh)||u(h)||u(b)||u(x)||u(m)||u(g)||u(p),v=S[o],j="全部"===o||(e.dishTypes||[]).some(e=>e.zh.includes(v)),y=0===N.ingredients.length||N.ingredients.every(t=>{var s;return null==(s=e.ingredients)?void 0:s.some(e=>e.name.zh.includes(t))}),w=0===N.tools.length||N.tools.every(t=>{var s;return null==(s=e.equipment)?void 0:s.some(e=>e.zh.includes(t))}),k=!N.servings||Number(e.servings)===Number(N.servings),z=!N.time||Number(e.readyInMinutes)<=Number(N.time),C=[...e.dishTypes||[],...e.diets||[]].map(e=>e.zh),A=0===N.tags.length||N.tags.every(e=>C.includes(e));return f&&j&&y&&w&&k&&z&&A}),I=Math.ceil(E.length/12),M=E.slice((j-1)*12,12*j);return(0,a.jsx)("div",{className:"bg-[#f9f5f1] min-h-screen py-8",children:(0,a.jsxs)("div",{className:"container mx-auto px-4",children:[(0,a.jsxs)("div",{className:"mb-8",children:[(0,a.jsx)("div",{className:"hidden sm:flex justify-center mb-4",children:(0,a.jsx)(i,{value:e,onChange:t,onSearch:C})}),(0,a.jsx)("div",{className:"sm:hidden mb-4 px-2",children:(0,a.jsx)(i,{value:e,onCh
1ange:t,onSearch:C})}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-center sm:justify-between gap-2",children:[(0,a.jsx)("div",{className:"flex overflow-x-auto sm:overflow-visible gap-2 flex-nowrap sm:flex-wrap",children:["全部","主菜","甜點","湯品","小菜"].map(t=>(0,a.jsx)("button",{className:"border border-gray-800 rounded px-4 py-1 whitespace-nowrap neo-button bg-white ".concat(o===t?"bg-gray-200":""),onClick:()=>{c(t),l(e)},children:t},t))}),(0,a.jsx)("div",{className:"ml-auto",children:(0,a.jsxs)("button",{className:"border border-gray-800 rounded px-4 py-1 flex items-center gap-1 whitespace-nowrap neo-button ".concat(z>0?"bg-[#5a9a8e] text-white":"bg-white"),onClick:()=>h(!0),children:[(0,a.jsx)(p.A,{size:16}),"更多篩選",z>0&&(0,a.jsxs)("span",{className:"ml-1",children:["(",z,")"]})]})})]})]}),z>0&&(0,a.jsx)("div",{className:"mb-6",children:(0,a.jsxs)("div",{className:"flex flex-wrap gap-2 items-center",children:[(0,a.jsx)("span",{className:"text-sm font-medium",children:"已選擇:"}),N.ingredients.map(e=>(0,a.jsxs)("div",{className:"bg-[#5a9a8e] text-white text-sm px-2 py-1 rounded-full flex items-center",children:[(0,a.jsxs)("span",{children:["食材: ",e]}),(0,a.jsx)("button",{onClick:()=>A("ingredients",e),className:"ml-1 p-0.5 hover:bg-[#4a8a7e] rounded-full",children:(0,a.jsx)(n.A,{size:14})})]},"ingredient-".concat(e))),N.tools.map(e=>(0,a.jsxs)("div",{className:"bg-[#5a9a8e] text-white text-sm px-2 py-1 rounded-full flex items-center",children:[(0,a.jsxs)("span",{children:["器具: ",e]}),(0,a.jsx)("button",{onClick:()=>A("tools",e),className:"ml-1 p-0.5 hover:bg-[#4a8a7e] rounded-full",children:(0,a.jsx)(n.A,{size:14})})]},"tool-".concat(e))),N.time&&(0,a.jsxs)("div",{className:"bg-[#5a9a8e] text-white text-sm px-2 py-1 rounded-full flex items-center",children:[(0,a.jsxs)("span",{children:["時間: ",N.time,"分鐘內"]}),(0,a.jsx)("button",{onClick:()=>A("time",N.time),className:"ml-1 p-0.5 hover:bg-[#4a8a7e] rounded-full",children:(0,a.jsx)(n.A,{size:14})})]}),N.servings&&(0,a.jsxs)("div",{className:"bg-[#5a9a8e] text-white text-sm px-2 py-1 rounded-full flex items-center",children:[(0,a.jsxs)("span",{children:["人數: ",N.servings,"人"]}),(0,a.jsx)("button",{onClick:()=>A("servings",N.servings),className:"ml-1 p-0.5 hover:bg-[#4a8a7e] rounded-full",children:(0,a.jsx)(n.A,{size:14})})]}),N.tags.map(e=>(0,a.jsxs)("div",{className:"bg-[#5a9a8e] text-white text-sm px-2 py-1 rounded-full flex items-center",children:[(0,a.jsxs)("span",{children:["標籤: ",e]}),(0,a.jsx)("button",{onClick:()=>A("tags",e),className:"ml-1 p-0.5 hover:bg-[#4a8a7e] rounded-full",children:(0,a.jsx)(n.A,{size:14})})]},"tag-".concat(e))),(0,a.jsx)("button",{onClick:()=>{w({ingredients:[],tools:[],time:null,servings:null,tags:[]})},className:"text-sm text-gray-600 underline hover:text-gray-800",children:"清除全部"})]})}),(0,a.jsx)(b,{isOpen:u,onClose:()=>h(!1),onApply:e=>{w(e),y(1)},initialFilters:N,recipes:k}),(0,a.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-2 lg:grid-cols-4 gap-3 md:gap-6",children:M.map(e=>(0,a.jsx)(r.A,{id:e.id,title:e.title,image:e.image,liked:x.includes(e.id.toString()),readyInMinutes:e.readyInMinutes,dishTypes:e.dishTypes,diets:e.diets,onLike:()=>m(e)},e.id))}),(0,a.jsx)("div",{className:"mt-10 flex justify-center",children:(0,a.jsx)(g,{currentPage:j,totalPages:I,onPageChange:e=>y(e)})})]})})}},1542:(e,t,s)=>{"use strict";s.d(t,{Z:()=>n});var a=s(2115),r=s(5317),l=s(6104);function n(){let[e,t]=(0,a.useState)([]),[s,n]=(0,a.useState)(!0);return(0,a.useEffect)(()=>{!async function(){try{let e=(await (0,r.GG)((0,r.rJ)(l.db,"recipes"))).docs.map(e=>{var t,s;let a=e.data(),r=e=>({zh:(null==e?void 0:e.zh)||"",en:(null==e?void 0:e.en)||""}),l=e=>(e||[]).map(r),n=[];if(a.ingredients&&"object"==typeof a.ingredients){let e=a.ingredients.zh;Array.isArray(e)&&(n=e.map(e=>({name:r(e.name),amount:r(e.amount)})))}return{id:e.id,title:r(a.title),summary:r(a.summary),image:a.image||"",ingredients:n,instructions:r(a.instructions),equipment:l(a.equipment),liked:!1,readyInMinutes:(null==(t=a.readyInMinutes)?void 0:t.toString())||"",servings:(null==(s=a.servings)?void 0:s.toString())||"",dishTypes:l(a.dishTypes),diets:l(a.diets)}});t(e)}catch(e){}finally{n(!1)}}()},[]),{recipes:e,loading:s}}},1976:(e,t,s)=>{"use strict";s.d(t,{A:()=>a});let a=(0,s(9946).A)("heart",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}]])},2355:(e,t,s)=>{"use strict";s.d(t,{A:()=>a});let a=(0,s(9946).A)("chevron-left",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]])},3052:(e,t,s)=>{"use strict";s.d(t,{A:()=>a});let a=(0,s(9946).A)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]])},3479:(e,t,s)=>{"use strict";s.d(t,{A:()=>i});var a=s(5317),r=s(6104),l=s(2115),n=s(9462);let i=()=>{let e=(0,n.n)(e=>e.user),[t,s]=(0,l.useState)([]),[i,d]=(0,l.useState)([]),[o,c]=(0,l.useState)(!1),u=async l=>{if(!e)return;c(!0);let n=(0,a.H9)(r.db,"users",e.uid,"favorites",l.id.toString());t.includes(l.id.toString())?(await (0,a.kd)(n),s(t.filter(e=>e!==l.id.toString())),d(i.filter(e=>e.id!==l.id))):(await (0,a.BN)(n,{id:l.id,title:l.title,image:l.image,readyInMinutes:l.readyInMinutes,dishTypes:l.dishTypes,diets:l.diets,liked:l.liked}),s([...t,l.id.toString()]),d([...i,l])),c(!1)},h=(0,l.useCallback)(async()=>
1{if(!e){s([]),d([]);return}c(!0);try{let t=(0,a.rJ)(r.db,"users",e.uid,"favorites"),l=(await (0,a.GG)(t)).docs.map(e=>e.data());s(l.map(e=>e.id.toString())),d(l)}catch(e){}finally{c(!1)}},[e]);return(0,l.useEffect)(()=>{h()},[e,h]),{favorites:t,favoriteDetails:i,toggleFavorite:u,loadFavorites:h,loading:o}}},4416:(e,t,s)=>{"use strict";s.d(t,{A:()=>a});let a=(0,s(9946).A)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},5176:(e,t,s)=>{Promise.resolve().then(s.bind(s,955))},5453:(e,t,s)=>{"use strict";s.d(t,{v:()=>d});var a=s(2115);let r=e=>{let t,s=new Set,a=(e,a)=>{let r="function"==typeof e?e(t):e;if(!Object.is(r,t)){let e=t;t=(null!=a?a:"object"!=typeof r||null===r)?r:Object.assign({},t,r),s.forEach(s=>s(t,e))}},r=()=>t,l={setState:a,getState:r,getInitialState:()=>n,subscribe:e=>(s.add(e),()=>s.delete(e))},n=t=e(a,r,l);return l},l=e=>e?r(e):r,n=e=>e,i=e=>{let t=l(e),s=e=>(function(e,t=n){let s=a.useSyncExternalStore(e.subscribe,()=>t(e.getState()),()=>t(e.getInitialState()));return a.useDebugValue(s),s})(t,e);return Object.assign(s,t),s},d=e=>e?i(e):i},5695:(e,t,s)=>{"use strict";var a=s(8999);s.o(a,"useParams")&&s.d(t,{useParams:function(){return a.useParams}}),s.o(a,"usePathname")&&s.d(t,{usePathname:function(){return a.usePathname}}),s.o(a,"useRouter")&&s.d(t,{useRouter:function(){return a.useRouter}})},6104:(e,t,s)=>{"use strict";let a;s.d(t,{db:()=>o,h:()=>u,j:()=>c});var r=s(3915),l=s(5317),n=s(6203);let i={apiKey:"AIzaSyBadB2_1phUlojMiip1c9NjmlvDpau47l8",authDomain:"simmerism-78454.firebaseapp.com",projectId:"simmerism-78454",storageBucket:"simmerism-78454.firebasestorage.app",messagingSenderId:"211979005399",appId:"1:211979005399:web:2b4b1f05c8831798c1af92",measurementId:"G-EGN3WCLT4T"},d=["apiKey","projectId","appId"].filter(e=>!i[e]);if(d.length>0)throw Error("Firebase 配置不完整,缺失: ".concat(d.join(", ")));try{a=(0,r.Wp)(i)}catch(e){throw e instanceof Error,e}let o=(0,l.aU)(a),c=(0,n.xI)(a),u=new n.HF},6932:(e,t,s)=>{"use strict";s.d(t,{A:()=>a});let a=(0,s(9946).A)("funnel",[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]])},8916:(e,t,s)=>{"use strict";s.d(t,{A:()=>d});var a=s(5155),r=s(1976),l=s(6766),n=s(2115),i=s(5695);function d(e){let{id:t,title:s,image:d,liked:o=!1,dishTypes:c=[],diets:u=[],readyInMinutes:h,onLike:b}=e,x=(0,i.useRouter)(),[m,g]=(0,n.useState)(!1),[p,f]=(0,n.useState)(5),v=[...c.map(e=>e.zh),...u.map(e=>e.zh)];(0,n.useEffect)(()=>{let e=()=>{let e=window.innerWidth;e<640?f(1):e<1024?f(3):f(4)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let j=m?v:v.slice(0,p),y=v.length-p;return(0,a.jsxs)("div",{className:"flex flex-col h-fit border-2 border-black rounded overflow-hidden hover:neo-card transition-all cursor-pointer",onClick:()=>x.push("/recipe/".concat(t)),children:[(0,a.jsx)("div",{className:"bg-gray-200 relative w-full aspect-[4/3]",children:(0,a.jsx)(l.default,{src:d||"/placeholder.svg",alt:s.zh,fill:!0,className:"object-cover"})}),(0,a.jsxs)("div",{className:"bg-[#ffc278] p-2 flex flex-col gap-2 flex-grow",children:[(0,a.jsxs)("div",{className:"flex justify-between items-start gap-2",children:[(0,a.jsx)("h3",{className:"font-bold text-sm sm:text-base lg:text-lg truncate",title:s.zh,children:s.zh}),(0,a.jsx)("button",{onClick:e=>{e.stopPropagation(),null==b||b(t)},className:"text-black hover:scale-105 transition-transform","aria-label":"收藏這道食譜",children:(0,a.jsx)(r.A,{className:o?"fill-black":"",size:20})})]}),(0,a.jsxs)("p",{className:"text-xs",children:[h," 分鐘"]}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-1",children:[j.map((e,t)=>(0,a.jsx)("span",{className:"text-xs border border-black rounded px-1 whitespace-nowrap",children:e},t)),y>0&&!m&&(0,a.jsxs)("button",{onClick:e=>{e.stopPropagation(),g(!0)},className:"text-xs border border-black rounded px-1 bg-[#519181] text-white hover:bg-[#417366]",children:["+",y," 更多"]}),m&&y>0&&(0,a.jsx)("button",{onClick:e=>{e.stopPropagation(),g(!1)},className:"text-xs border border-black rounded px-1 bg-[#519181] text-white hover:bg-[#417366]",children:"收起"})]})]})]})}},9462:(e,t,s)=>{"use strict";s.d(t,{n:()=>n});var a=s(5453),r=s(6203),l=s(6104);let n=(0,a.v)(e=>({user:null,loading:!0,setUser:t=>e({user:t}
1),setLoading:t=>e({loading:t}),logout:async()=>{await (0,r.CI)(l.j),e({user:null})}}))}},e=>{var t=t=>e(e.s=t);e.O(0,[992,965,646,766,441,684,358],()=>t(5176)),_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.