{"version":3,"file":"components/Keyword/index.mjs","sources":["../../../src/components/Keyword/index.tsx"],"sourcesContent":["import React, { type ReactNode } from 'react';\nimport { Popover, Typography } from 'antd';\nimport { TextProps } from 'antd/es/typography/Text';\nimport styles from './style.module.scss';\n\nconst MAX_LENGTH = 40;\n\nexport const Keyword: React.FC<\n  TextProps & { text: string; keyword: string }\n> = ({ text, keyword, ...rest }) => {\n  if (!keyword) {\n    return EllipsisText({ text, rest });\n  }\n\n  const idx = text.indexOf(keyword);\n\n  if (idx === -1) {\n    return EllipsisText({ text, rest });\n  }\n\n  const els: (string | React.ReactNode)[] = [];\n\n  let str = text;\n\n  while (str.length > 0) {\n    const idx = str.indexOf(keyword);\n    if (idx > -1) {\n      if (idx !== 0) {\n        els.push(EllipsisText({ text: str, els }));\n      }\n      els.push(EllipsisText({ text: str, els, marked: true }));\n      str = str.slice(idx + keyword.length);\n    } else {\n      els.push(EllipsisText({ text: str, els, marked: true }));\n      break;\n    }\n  }\n\n  return (\n    <Typography.Text className={styles.text} {...rest}>\n      {els}\n    </Typography.Text>\n  );\n};\n\nconst EllipsisText = ({\n  text,\n  els,\n  marked = false,\n  rest,\n}: {\n  text: string;\n  els?: ReactNode[];\n  marked?: boolean;\n  rest?: Record<string, unknown>;\n}) => {\n  if (!text) return null;\n\n  const textLength = text.length;\n\n  if (textLength > MAX_LENGTH) {\n    const start = Math.floor((MAX_LENGTH - 3) / 2);\n    const end = Math.ceil((MAX_LENGTH - 3) / 2);\n\n    return (\n      <Popover content={text} placement=\"left\">\n        <div>\n          <Typography.Text className={styles.text} mark={!!marked} {...rest}>\n            {text.slice(0, start)}...{text.slice(textLength - end)}\n          </Typography.Text>\n        </div>\n      </Popover>\n    );\n  }\n\n  return (\n    <Popover content={text}>\n      <div>\n        <Typography.Text\n          className={styles.text}\n          key={els ? els.length : 0}\n          {...rest}\n        >\n          {text}\n        </Typography.Text>\n      </div>\n    </Popover>\n  );\n};\n"],"names":["MAX_LENGTH","Keyword","text","keyword","rest","EllipsisText","idx","els","str","Typography","styles","marked","textLength","start","Math","end","Popover"],"mappings":";;;;AAKA,MAAMA,aAAa;AAEZ,MAAMC,UAET,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAE,GAAGC,MAAM;IAC7B,IAAI,CAACD,SACH,OAAOE,aAAa;QAAEH;QAAME;IAAK;IAGnC,MAAME,MAAMJ,KAAK,OAAO,CAACC;IAEzB,IAAIG,AAAQ,OAARA,KACF,OAAOD,aAAa;QAAEH;QAAME;IAAK;IAGnC,MAAMG,MAAoC,EAAE;IAE5C,IAAIC,MAAMN;IAEV,MAAOM,IAAI,MAAM,GAAG,EAAG;QACrB,MAAMF,MAAME,IAAI,OAAO,CAACL;QACxB,IAAIG,MAAM,IAAI;YACZ,IAAIA,AAAQ,MAARA,KACFC,IAAI,IAAI,CAACF,aAAa;gBAAE,MAAMG;gBAAKD;YAAI;YAEzCA,IAAI,IAAI,CAACF,aAAa;gBAAE,MAAMG;gBAAKD;gBAAK,QAAQ;YAAK;YACrDC,MAAMA,IAAI,KAAK,CAACF,MAAMH,QAAQ,MAAM;QACtC,OAAO;YACLI,IAAI,IAAI,CAACF,aAAa;gBAAE,MAAMG;gBAAKD;gBAAK,QAAQ;YAAK;YACrD;QACF;IACF;IAEA,OAAO,WAAP,GACE,IAACE,WAAW,IAAI;QAAC,WAAWC,aAAAA,IAAW;QAAG,GAAGN,IAAI;kBAC9CG;;AAGP;AAEA,MAAMF,eAAe,CAAC,EACpBH,IAAI,EACJK,GAAG,EACHI,SAAS,KAAK,EACdP,IAAI,EAML;IACC,IAAI,CAACF,MAAM,OAAO;IAElB,MAAMU,aAAaV,KAAK,MAAM;IAE9B,IAAIU,aAAaZ,YAAY;QAC3B,MAAMa,QAAQC,KAAK,KAAK,CAAEd,AAAAA,CAAAA,aAAa,KAAK;QAC5C,MAAMe,MAAMD,KAAK,IAAI,CAAEd,AAAAA,CAAAA,aAAa,KAAK;QAEzC,OAAO,WAAP,GACE,IAACgB,SAAOA;YAAC,SAASd;YAAM,WAAU;sBAChC,kBAAC;0BACC,mBAACO,WAAW,IAAI;oBAAC,WAAWC,aAAAA,IAAW;oBAAE,MAAM,CAAC,CAACC;oBAAS,GAAGP,IAAI;;wBAC9DF,KAAK,KAAK,CAAC,GAAGW;wBAAO;wBAAIX,KAAK,KAAK,CAACU,aAAaG;;;;;IAK5D;IAEA,OAAO,WAAP,GACE,IAACC,SAAOA;QAAC,SAASd;kBAChB,kBAAC;sBACC,kBAACO,WAAW,IAAI;gBACd,WAAWC,aAAAA,IAAW;gBAErB,GAAGN,IAAI;0BAEPF;eAHIK,MAAMA,IAAI,MAAM,GAAG;;;AAQlC"}