1import{c as Ne,j as e,r as o,ad as he,b2 as pe}from"./vendor-modules-BMePLMax.js";import{e as Pe,aU as be,B as re,f as ie,w as De,ay as ce,bf as ve,L as Ae,aq as me,J as Ee,bu as Me,P as Ie,bv as ge}from"./app-shared-DjqVeOr4.js";import{W as Te}from"./WithFetchData-CSsTz98d.js";import"./index-CC3hM6nt.js";import{S as Fe}from"./index-CGozH6Zu.js";import"./dashboard-KTfsd660.js";import"./logo_light-Cy3AxcnD.js";import"./ProductHandler-B--vKqcc.js";/* empty css */import"./index-D3Fjt_jg.js";const Re=(n,i)=>{const u=new FormData;return u.append("data",n),be.post(`/data_fetch/api/company_keywords/${i}`,u,{headers:{"Content-Type":"multipart/form-data"},needAuth:!1})},$e=n=>Pe.get(`keyword?q=${n}`),M=Ne(n=>({loading:!1,data:[],error:null,add_column_data:{},keyword_from_ai:null,searchRequest:async(i,u)=>{n({loading:!0,error:null,data:[]});try{const c=(await Re(i,u)).data;c.status==="OK"?n({loading:!1,data:Array.isArray(c.data)?c.data:[],error:null,add_column_data:c.add_column_data||{}}):n({loading:!1,error:c.error,data:[]})}catch(x){n({loading:!1,error:x,data:[]})}},getAIKeywordsRequest:async i=>{n({keyword_from_ai:null});try{const x=(await $e(i)).data;x.status==="success"?n({keyword_from_ai:x.data}):n({keyword_from_ai:null})}catch{n({keyword_from_ai:null})}},clearData:()=>n({loading:!1,error:null,data:[],add_column_data:{},keyword_from_ai:null})})),fe={company_info:[{show:"å
¬å¸ç°¡ä»",prompt:"å
¬å¸ç°¡ä»"}]},xe=[{name:"å°å©ç",value:"ai_chat"},{name:"å
¬å¸ç°¡ä»",value:"company_info"},{name:"éå稿",value:"transcript"}],le="keyword_search_type",we=[{label:"è¿ 2 æ¥æ¼²å¹
",value:"DailyPriceChange_Percent_2D"},{label:"è¿ 3 æ¥æ¼²å¹
",value:"DailyPriceChange_Percent_3D"},{label:"è¿ 5 æ¥æ¼²å¹
",value:"DailyPriceChange_Percent_5D"},{label:"è¿ 10 æ¥æ¼²å¹
",value:"DailyPriceChange_Percent_10D"},{label:"è¿ 15 æ¥æ¼²å¹
",value:"DailyPriceChange_Percent_15D"},{label:"è¿ 1 ææ¼²å¹
",value:"DailyPriceChange_Percent_1M"},{label:"è¿ 3 ææ¼²å¹
",value:"DailyPriceChange_Percent_3M"},{label:"è¿ 6 ææ¼²å¹
",value:"DailyPriceChange_Percent_6M"},{label:"è¿ 12 ææ¼²å¹
",value:"DailyPriceChange_Percent_12M"}],Ke=90,Le="è«è¼¸å
¥ééµå",Oe=we.filter(n=>["DailyPriceChange_Percent_2D","DailyPriceChange_Percent_3D","DailyPriceChange_Percent_5D","DailyPriceChange_Percent_10D","DailyPriceChange_Percent_15D","DailyPriceChange_Percent_1M"].includes(n.value)),qe=we.filter(n=>["DailyPriceChange_Percent_1M","DailyPriceChange_Percent_3M","DailyPriceChange_Percent_6M","DailyPriceChange_Percent_12M"].includes(n.value)),Be=({leftField:n,rightField:i,onLeftFieldChange:u,onRightFieldChange:x,isMobile:c})=>e.jsxs("div",{className:"keywords-search-table-header",children:[c?null:e.jsx("div",{className:"header-cell header-name",children:e.jsx("span",{className:"header-text",children:"å稱"})}),c?null:e.jsx("div",{className:"header-cell header-code",children:e.jsx("span",{className:"header-text",children:"è¡ç¥¨ä»£è"})}),e.jsx("div",{className:"header-cell header-price-change",children:e.jsxs("div",{className:"select-wrapper",children:[e.jsx("select",{value:n,onChange:g=>u(g.target.value),className:"price-change-select",title:"鏿æéåé",children:Oe.map(g=>e.jsx("option",{value:g.value,children:g.label},g.value))}),e.jsx("div",{className:"ua-triangle"})]})}),e.jsx("div",{className:"header-cell header-price-change",children:e.jsxs("div",{className:"select-wrapper",children:[e.jsx("select",{value:i,onChange:g=>x(g.target.value),className:"price-change-select",title:"鏿æéåé",children:qe.map(g=>e.jsx("option",{value:g.value,children:g.label},g.value))}),e.jsx("div",{className:"ua-triangle"})]})}),c?null:e.jsx("div",{className:"header-cell header-content",children:e.jsx("span",{className:"header-text",children:"æå°çµæ"})})]}),_e=n=>{if(n==null||n==="")return"--";const i=parseFloat(n);return isNaN(i)?"--":(i>=0?"+":"")+i.toFixed(2)+"%"},ye=n=>{if(n==null||n==="")return"";const i=parseFloat(n);return isNaN(i)?"":i>0?"text-red":i<0?"text-green":""},He=({add_column_data:n,code:i,leftField:u,rightField:x})=>{if(!n||!n[i])return e.jsxs("div",{className:"price-change-container",children:[e.jsx("div",{className:"price-change-item",children:e.jsx("span",{className:"price-change-value",children:"--"})}),e.jsx("div",{className:"price-change-item",children:e.jsx("span",{className:"price-change-value",children:"--"})})]});const c=n[i],g=c[u],C=c[x];return e.jsxs("div",{className:"price-change-container",children:[e.jsx("div",{className:"price-change-item",children:e.jsx("span",{className:`price-change-value ${ye(g)}`,children:_e(g)})}),e.jsx("div",{className:"price-change-item",children:e.jsx("span",{className:`price-change-value ${ye(C)}`,children:_e(C)})})]})},je="輸å
¥ééµåå¨é¸æç¯å䏿å°ï¼ä¹å¯è¼¸å
¥å¤ééµåï¼ä»¥ç©ºæ ¼åéï¼ï¼ä¾å¦ä¸æ¬¡è¼¸å
¥ï¼ä¼ºæå¨ä¾ä¸ææ± 缺貨",Ve=n=>{const i=M(t=>t.loading),u=M(t=>t.data)??[],x=M(t=>t.error),c=M(t=>t.keyword_from_ai),g=M(t=>t.add_column_data),C=M(t=>t.searchRequest),I=M(t=>t.getAIKeywordsRequest),D=M(t=>t.clearData),T=re(t=>t.stock_pool),F=re(t=>t.setStock),k=re(t=>t.recordStockRequest),[B,ae]=o.useState([]),[U,K]=o.useState({}
1),[L,R]=o.useState(!1),[_,z]=o.useState([]),[X,H]=o.useState({}),[V,se]=o.useState("DailyPriceChange_Percent_3D"),[J,Y]=o.useState("DailyPriceChange_Percent_1M");o.useEffect(()=>()=>{D()},[D]);const N=!i&&!x&&Array.isArray(u)&&u.length>0,l=o.useMemo(()=>T.reduce((t,p)=>(t[p.stock_code]=p.stock_name,t),{}),[T]),r=o.useCallback(t=>{const p=t?.trim()||"";p.length!==0&&I(p)},[I]),s=o.useCallback(t=>{const p=t?.trim()||"";if(p.length===0)return;const v=p.split(" ").map(S=>S.trim()).filter(S=>S.length>0);ae(v),R(!0),K({}),H({}),ie.getState().setPager("keywords-search",0);const oe=_.join(","),Z=v.join(" ");C(Z,oe)},[_]),m=o.useCallback(t=>()=>K(p=>({...p,[t]:!p[t]})),[]),h=o.useCallback(t=>()=>{let p;_.includes(t)?p=_.filter(v=>v!==t):p=[..._,t],z(p)},[_]),f=o.useCallback((t,p)=>e.jsx("div",{role:"button",tabIndex:0,className:`keywords-search-input-type__btn-i${_.includes(t.value)?" active":""}`,onClick:h(t.value),onKeyDown:h(t.value),children:t.name},p),[_,h]);o.useEffect(()=>{x&&De.SmallBox({title:`<i class='fa fa-exclamation-triangle' aria-hidden='true'></i> ${x}`,content:"",timeout:2e3})},[x]),o.useEffect(()=>{B.length===0&&(R(!1),D(),ie.getState().setPager("keywords-search",0))},[B,D]),o.useEffect(()=>{c&&c.length>0&&s(c)},[c,s]),o.useEffect(()=>{ce.get(le)?z(ce.get(le)):z(["ai_chat","company_info"])},[]),o.useEffect(()=>{ce.set(le,_,{path:"/",maxAge:3600*24*31,sameSite:"Lax",secure:!0})},[_]);const j=o.useCallback((t,p)=>()=>{F({stock_code:t,stock_name:p}),k(t)},[F,k]),y=window.innerWidth<=520||ve();return e.jsx("div",{className:"keywords-search-container",children:e.jsx(Fe,{...n,children:e.jsxs("div",{className:`keywords-search ${N?"has-data":""}`,children:[e.jsxs("div",{className:"keywords-search-input",children:[e.jsx(Qe,{onSearch:r,loading:i}),y?null:e.jsx("div",{className:"keywords-search-input-type",children:e.jsx("div",{className:"keywords-search-input-type__btn",children:xe.map(f)})})]}),y?e.jsxs("div",{className:"keywords-search-info",children:[e.jsx("div",{className:"keywords-search__rules",children:je}),e.jsx("div",{className:"keywords-search-input-type",children:e.jsx("div",{className:"keywords-search-input-type__btn",children:xe.map(f)})})]}):e.jsx("div",{className:"keywords-search__rules",children:je}),i&&e.jsx(Ae,{}),x&&e.jsx(me,{}),L&&!i&&!x&&Array.isArray(u)&&u.length===0&&e.jsx(me,{}),N&&e.jsx(Ge,{data:u,expandedItems:U,toggleExpand:m,stockMap:l,keywords:B,selectedSources:X,setSelectedSources:H,handleStockSwitch:j,add_column_data:g,leftPriceField:V,rightPriceField:J,onLeftPriceFieldChange:se,onRightPriceFieldChange:Y})]})})})},We=Te(Ve);We.displayName="KeywordsSingle";const Qe=({onSearch:n,loading:i})=>{const[u,x]=o.useState(""),[c,g]=o.useState(!1),C=k=>{x(k.target.value)},I=o.useCallback(k=>{k.key==="Enter"&&!i&&!c&&(k.preventDefault(),n(u))},[u,n,i,c]),D=o.useCallback(()=>{n(u)},[u,n]),T=()=>{g(!0)},F=()=>{g(!1)};return e.jsx("div",{className:"search-input-box",children:e.jsxs("div",{className:"search-input",children:[e.jsx("div",{className:"ua-autosuggest__container",children:e.jsx("input",{type:"text",value:u,onChange:C,onKeyDown:I,onCompositionStart:T,onCompositionEnd:F,placeholder:Le,className:"ua-autosuggest__input"})}),e.jsx("button",{className:"bg-transparent",onClick:D,disabled:i,children:e.jsx("i",{className:"fa fa-search"})})]})})},Ge=({data:n,expandedItems:i,toggleExpand:u,stockMap:x,keywords:c,selectedSources:g,setSelectedSources:C,handleStockSwitch:I,add_column_data:D,leftPriceField:T,rightPriceField:F,onLeftPriceFieldChange:k,onRightPriceFieldChange:B})=>{const ae=l=>{const r=/ï¼ä¾æºï¼([^ï¼]+)ï¼/g;let s=l;const h=Array.from(l.matchAll(r)).map(f=>f[1].trim());return s=s.replace(r,"").trim(),{content:s,sources:[...new Set(h)]}},U=l=>{if(ge.default){const r=ge.default.find(s=>s.prompt===l);if(r)return r}if(fe.company_info){const r=fe.company_info.find(s=>s.prompt===l);if(r)return r}return null},K=(l,r)=>{if(!l||!r?.length)return 0;const s=l.toLowerCase();let m=0;return r.forEach(h=>{const f=h.toLowerCase(),j=s.split(f).length-1;m+=j}),m},L=o.useCallback((l,r,s)=>l.filter(m=>{if(m.includes("éå稿"))return!0;const h=U(m);if(!h)return!1;if(h.show==="ä¾éåæ"){const f=r.filter(y=>y.sources.includes(m)).map(y=>y.content).join(" ");return K(f,s)>1}return!0}),[]),R=o.useCallback((l,r,s)=>l.sort((m,h)=>{const f=r(m),j=r(h);return K(j,s)-K(f,s)}),[]),_=o.useMemo(()=>n.reduce((l,r)=>{const s=Object.keys(r)[0],m=r[s],h=ae(m);return l[s]?l[s].children.push({content:h.content,sources:h.sources}):l[s]={code:s,children:[{content:h.content,sources:h.sources}]},l},{}),[n]);o.useEffect(()=>{const l=Object.values(_);if(l.length>0){const r={};l.forEach(s=>{const m=s.code,h=s.children,f=h.flatMap(t=>t.sources).filter(t=>t),j=f.filter((t,p)=>f.indexOf(t)===p),y=L(j,h,c);if(y.length>0){const t=R(y,p=>h.filter(v=>v.sources.includes(p)).map(v=>v.content).join(" "),c);r[m]=t[0]}}),C(r)}},[_,c,L,R,C]);const X=R(Object.values(_),l=>l.children.map(r=>r.content).join(" "),c).filter(l=>{const r=l.children,s=r.flatMap(f=>f.sources).filter(f=>f),m=s.filter((f,j)=>s.indexOf(f)===j);return L(m,r,c).length>0}),H=ie(l=>l.pager["keywords-search"])||0,V=50,se=X.slice(V*H,V*(H+1)),J=Math.ceil(X.length/V),Y=(l,r)=>()=>{C(s=>({...s,[l]:r}))},N=window.innerWidth<=520||ve();return e.jsxs("div",{className:"results-container",children:[e.jsx(Be,{leftField:T,rightField:F,onLeftFieldChange:k,onRightFieldChange:B,isMobile:N}),se.map((l,r)=>{const s=l.code,m=l.children,h=m.flatMap(d=>d.sources).filter(d=>d),f=h.filter((d,a)=>h.indexOf(d)===a),j=L(f,m,c),y=R(j,d=>m.filter(a=>a.sources.includes(d)).map(a=>a.content).join(" "),c);let t=g[s];!t&&y.length>0&&(t=y[0]);const v=(t?m.filter(d=>d.sources.includes(t)):m).map(d=>d.content).join(` 2 3`).replace(/[ï¼(]以ä¸å½æ´[^ï¼)]*[ï¼)]\s*/g,""),Z=(d=>{let a=d;return a=a.replace(/<span[^>]*>(.*?)<\/span>/gi,"$1"),a=a.replace(/<ol[^>]*>/gi,` 4 5`),a=a.replace(/<\/ol>/gi,` 6 7`),a=a.replace(/<ul[^>]*>/gi,` 8 9`),a=a.replace(/<\/ul>/gi,` 10 11`),a=a.replace(/<li[^>]*>/gi,"- "),a=a.replace(/<\/li>/gi,` 12`),a=a.replace(/<br\s*\/?>/gi,` 13`),a=a.replace(/<\/p>\s*<p>/gi,` 14 15`),a=a.replace(/<p[^>]*>/gi,""),a=a.replace(/<\/p>/gi,` 16 17`),a=a.replace(/<strong>(.*?)<\/strong>/gi,"**$1**"),a=a.replace(/<b>(.*?)<\/b>/gi,"**$1**"),a=a.replace(/<em>(.*?)<\/em>/gi,"*$1*"),a=a.replace(/<i>(.*?)<\/i>/gi,"*$1*"),a=a.replace(/\n{3,}/g,` 18 19`),a.trim()})(v),S=i[r],W=x[s],de=(d,a,O=10,te=400)=>{if(!a)return d.replace(/\s+/g," ").trim();for(let Q=0;Q<a.length;Q++){const A=a[Q],$=d.replace(/<[^>]*>/g,"").replace(/\s+/g," ").trim(),w=$.toLowerCase().indexOf(A.toLowerCase());if(w===-1)return $.slice(0,O+te);const E=Math.max(w-O,0),P=Math.min(w+A.length+te,$.length);let q=$.slice(E,P);return E>0&&(q="... "+q),P<$.length&&(q+=" ..."),q}},ne=(d,a,O=!1,te=!1)=>
19{if(!a||!d)return d;const Q=O;let A=d;const $=/(?:\*\*å註\*\*|å註ï¼)(?:(?!\*\*å註\*\*|å註ï¼)[\s\S])*?(?=\*\*å註\*\*|å註ï¼|$)/g,w=[];let E=0,P;for(;(P=$.exec(A))!==null;)P.index>E&&w.push({text:A.slice(E,P.index),isRemark:!1}),w.push({text:P[0],isRemark:!0}),E=P.index+P[0].length;E<A.length&&w.push({text:A.slice(E),isRemark:!1}),w.length===0&&w.push({text:A,isRemark:!1}),te&&w.forEach(b=>{b.text=b.text.replace(/#+\s?/g,"").replace(/\*\*/g,"").replace(/\[\[/g,"").replace(/\]\]/g,"").replace(/<</g,"").replace(/>>/g,"")});const q=[...new Set(a)].filter(b=>b&&b.trim().length>0);return w.map(b=>{if(b.isRemark)return b.text;{let G=b.text;return q.forEach(Se=>{const ke=Se.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),ue=new RegExp(`(${ke})`,"gi");Q?G=G.replace(ue,'<span class="bg-orange">$1</span>'):G=G.replace(ue,"==$1==")}),G}}).join("")},Ce=(d,a)=>{const O=U(d);return e.jsx("div",{role:"button",tabIndex:0,className:`keywords-search-sources__btn${t===d?" active":""}`,onClick:Y(s,d),onKeyDown:Y(s,d),children:d.includes("éå稿")?d:O.show},a)},ee=e.jsx("div",{className:"keywords-search-sources",children:y.map(Ce)});return W?e.jsxs("div",{className:"result-item",children:[e.jsxs("div",{className:`content-box${S?"":" flex"}`,children:[e.jsxs("div",{className:"title-box",children:[e.jsx(Ee,{stock:{stock_code:s,stock_name:W}}),e.jsxs(he,{to:`/lab/dashboard/lynch-tengrower/38364?stock=${s}`,className:"title",target:"_blank",rel:"noopener noreferrer",onClick:I(s,W),children:[W,N?e.jsx("span",{className:"code",children:s}):null]}),N?null:e.jsx(he,{className:"code",to:`/lab/dashboard/lynch-tengrower/38364?stock=${s}`,target:"_blank",rel:"noopener noreferrer",onClick:I(s,W),children:s}),e.jsx(He,{add_column_data:D,code:s,leftField:T,rightField:F}),S&&!N?ee:null]}),S&&N?ee:null,S?e.jsx("div",{className:"content-preview",children:e.jsx(Me,{children:ne(Z,c,!1,!1)})}):N?e.jsxs(e.Fragment,{children:[ee,e.jsx("div",{className:"overflow-hidden",children:e.jsx("div",{className:"content-preview content-truncate",dangerouslySetInnerHTML:{__html:pe.sanitize(ne(de(v,c),c,!0,!0))}})})]}):e.jsxs("div",{className:"overflow-hidden",children:[ee,e.jsx("div",{className:"content-preview content-truncate",dangerouslySetInnerHTML:{__html:pe.sanitize(ne(de(v,c),c,!0,!0))}})]})]}),Z.length>Ke&&e.jsx("button",{className:"expand-button",title:S?"æ¶èµ·":"å±éæ´å¤",onClick:u(r),children:e.jsx("i",{className:`fas fa-chevron-${S?"up":"down"}`})})]},r):null}),J>1&&e.jsx(Ie,{pagerID:"keywords-search",pages:J})]})};export{We 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.