PageSourceSearch

https://gwangju-morning.onrender.com/assets/LivingInfoSection-8Anzu3XB.js

js gwangju-morning.onrender.com collected 2026-10-03 11:40:41 UTC 6,176 bytes, 1 lines download raw bytes

1import{r as g,g as j,f as u,j as e,C as N,a as v,b as I,F as w}from"./index-B5vA2KtO.js";import{H as C}from"./heart-DxmoF3gA.js";const E={복지:{icon:e.jsx(C,{size:13}),color:"oklch(0.38 0.12 150)",label:"복지 신청"},교육:{icon:e.jsx(w,{size:13}),color:"oklch(0.38 0.12 230)",label:"교육·문화"},안전:{icon:e.jsx(I,{size:13}),color:"oklch(0.45 0.18 25)",label:"안전·재난"},교통:{icon:e.jsx(v,{size:13}),color:"oklch(0.38 0.12 230)",label:"교통·생활"}},y=["복지","교육","안전","교통"],A=new Set(y),x=/성료|마쳤|마무리|개최했다|열렸다|진행했다|기념식|협약식|간담회/,R=/모집|신청|접수|지원|공고|안내|예방|대비|주의|점검|운영|보급|변경|시행/,L=[{id:"living-extra-1",category:"복지",categoryColor:"oklch(0.38 0.12 150)",tag:"생활정보",title:"동구 '책 읽는 동구' 구민도서지원 — 주민이면 책 1권 무료",summary:"광주 동구 주민·학생·직장인·사업자 누구나 책 1권 무료 지원. 동구 도서관 홈페이지에서 신청.",body:["광주 동구가 '2026 책 읽는 동구' 구민도서지원사업 신청을 받고 있다. 동구 주민, 학생, 직장인, 사업자 누구든 책 1권을 무료로 지원받을 수 있다.","신청 방법: 동구 도서관 홈페이지 또는 지정 서점 방문. 지원 도서 목록은 동구 도서관 홈페이지에서 확인 가능하다."],source:"광주광역시 동구청",sourceUrl:"#",publishedAt:"05. 15",region:"광주광역시 동구",relatedLinks:[{label:"동구 도서관 신청 안내",url:"#"}]},{id:"living-extra-2",category:"안전",categoryColor:"oklch(0.45 0.18 25)",tag:"생활정보",title:"여름철 산사태 국민행동요령 — 5/15~10/15 집중 대비",summary:"여름철 집중호우·태풍으로 인한 산사태 피해 예방. 산사태정보시스템(sansatai.forest.go.kr)에서 위험 지역 확인 가능.",body:["광주 동구가 5월 15일부터 10월 15일까지 여름철 집중호우·태풍으로 인한 산사태 피해 예방을 위한 국민행동요령을 안내하고 있다.","산사태 위험 지역은 산사태정보시스템(sansatai.forest.go.kr)에서 확인할 수 있으며, 위험 징후 발견 시 즉시 119에 신고해야 한다."],source:"광주광역시 동구청",sourceUrl:"#",publishedAt:"05. 15",region:"광주광역시 동구",relatedLinks:[{label:"산사태정보시스템",url:"https://sansatai.forest.go.kr"}]},{id:"living-extra-3",category:"교통",categoryColor:"oklch(0.38 0.12 230)",tag:"생활정보",title:"교통약자 이동편의 설문조사 — 광주 지하철 서비스 개선 의견 수렴",summary:"광주도시철도공사가 교통약자 이동편의 설문조사를 진행 중이다. 장애인·노인·임산부 등 교통약자의 의견을 반영해 서비스를 개선한다.",body:["광주도시철도공사가 더 편리하고 안전한 광주 지하철을 만들기 위해 교통약자 이동편의 설문조사를 진행하고 있다.","장애인, 노인, 임산부 등 교통약자라면 누구나 참여할 수 있으며, 조사 결과는 서비스 개선에 반영된다."],source:"광주도시철도공사",sourceUrl:"#",publishedAt:"05. 19",region:"광주광역시"}];function b(t){if(x.test(t.title))return!1;const r=`${t.title} ${t.summary} ${t.body.join(" ")}`;return!x.test(r)||R.test(r)}function S(t,r){const i=u(r).filter(b);if(t.length===0)return i;const m=new Set(t.map(a=>a.category)),f=i.filter(a=>!m.has(a.category));return[...t,...f]}function F({region:t,onArticleClick:r}){const[i,m]=g.useState([]),a=[...j(),...L],k=u(i).filter(b),p=S(k,a);g.useEffect(()=>{let l=!1;async function s(){const o=new URLSearchParams({kind:"living",region:t}),h=await fetch(`/api/news-feed?${o.toString()}`,{cache:"no-store"});if(!l)try{if(h.ok){const c=await h.json();Array.isArray(c.articles)&&c.articles.length>0&&m(c.articles)}}catch(c){console.warn("[living-info] keeping fallback data:",c)}}s();const d=setInterval(()=>void s(),600*1e3);return()=>{l=!0,clearInterval(d)}},[t]);const n={};return p.forEach(l=>{const s=l.category;A.has(s)&&(n[s]||(n[s]=[]),n[s].push(l))}),e.jsxs("div",{className:"news-card animate-card-enter overflow-hidden",children:[e.jsxs("div",{className:"px-5 py-2.5 flex items-center justify-between",style:{borderBottom:"2px s
1olid oklch(0.18 0.04 250)"},children:[e.jsxs("div",{children:[e.jsx("div",{className:"section-label",children:"LIVING INFO"}),e.jsx("div",{className:"text-xl font-black mt-0.5",style:{fontFamily:"Noto Sans KR, sans-serif",color:"oklch(0.13 0.05 255)"},children:"생활정보"})]}),e.jsx("span",{className:"text-sm font-medium",style:{color:"oklch(0.55 0.01 240)"},children:"복지 · 교육 · 안전 · 교통 공지"})]}),e.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 divide-x",style:{borderColor:"oklch(0.93 0.003 240)"},children:y.map(l=>{const s=E[l],d=(n[l]??[]).slice(0,3);return e.jsxs("div",{className:"p-5",children:[e.jsxs("div",{className:"flex items-center gap-1.5 mb-3",children:[e.jsx("span",{style:{color:s.color},children:s.icon}),e.jsx("span",{className:"text-sm font-bold",style:{color:s.color},children:s.label})]}),e.jsxs("div",{className:"flex flex-col gap-3",children:[d.length===0&&e.jsx("p",{className:"text-sm",style:{color:"oklch(0.65 0.01 240)"},children:"해당 정보 없음"}),d.map(o=>e.jsxs("button",{onClick:()=>r(o),className:"text-left group w-full",children:[e.jsx("p",{className:"text-base font-bold mb-1 leading-snug group-hover:underline",style:{fontFamily:"Noto Sans KR, sans-serif",color:"oklch(0.13 0.05 255)",lineHeight:"1.55",textDecorationColor:s.color},children:o.title}),e.jsx("p",{className:"text-sm mb-1.5",style:{color:"oklch(0.45 0.01 240)",fontFamily:"Noto Sans KR, sans-serif",lineHeight:"1.6",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:o.summary}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("span",{className:"text-xs",style:{color:"oklch(0.62 0.01 240)"},children:["출처: ",o.source]}),e.jsx(N,{size:11,style:{color:"oklch(0.72 0.01 240)"}})]})]},o.id))]})]},l)})})]})}export{F 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.