UNPKG

@lobehub/ui

Version:

Lobe UI is an open-source UI component library for building AIGC web apps

1 lines 4.63 kB
{"version":3,"file":"Footnotes.mjs","names":["Flexbox","A","Block","Text","SearchResultCards"],"sources":["../../../src/Markdown/components/Footnotes.tsx"],"sourcesContent":["'use client';\n\nimport { type ReactNode, memo, useMemo } from 'react';\n\nimport A from '@/A';\nimport Block from '@/Block';\nimport { Flexbox } from '@/Flex';\nimport Text from '@/Text';\n\nimport SearchResultCards from './SearchResultCards';\n\ninterface FootnotesProps {\n 'children': ReactNode;\n 'data-footnote-links'?: string;\n 'data-footnotes'?: boolean;\n}\n\nconst DefaultFootnotes = memo<{ dataSource: any[] }>(({ dataSource }) => {\n const items = useMemo(\n () =>\n dataSource\n .find((child) => child?.type === 'ol')\n ?.props?.children?.map((item: any) => {\n if (typeof item === 'string' || item?.type !== 'li') return false;\n const data = item?.props?.children?.find((note: any) => note?.props?.children)?.props\n ?.children;\n if (!data || !Array.isArray(data)) return false;\n return {\n children: data[0],\n props: data[1]?.props || {},\n };\n })\n .filter(Boolean),\n [dataSource],\n );\n\n if (!Array.isArray(items)) return null;\n\n return (\n <Flexbox\n align={'flex-start'}\n as={'section'}\n className={'footnotes'}\n data-footnotes=\"true\"\n gap={'0.5em'}\n horizontal\n justify={'flex-start'}\n wrap={'wrap'}\n >\n {items.map(({ children, props }, index) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { node, href, ...rest } = props;\n const Container = href ? A : 'div';\n return (\n <Container {...(href ? { href, ...rest } : rest)} key={index}>\n <Block\n align={'stretch'}\n horizontal\n style={{ overflow: 'hidden', position: 'relative' }}\n variant={'outlined'}\n >\n <Block paddingInline={'0.66em'} style={{ borderRadius: 0 }} variant={'filled'}>\n <Text as=\"span\" code type={'secondary'}>\n {index + 1}\n </Text>\n </Block>\n <Text as=\"span\" style={{ paddingInline: '0.66em' }} type={'secondary'}>\n {children}\n </Text>\n </Block>\n </Container>\n );\n })}\n </Flexbox>\n );\n});\n\nconst Footnotes = memo<FootnotesProps>(({ children, ...rest }) => {\n const links = useMemo(() => {\n try {\n return JSON.parse(rest['data-footnote-links'] || '[]');\n } catch (error) {\n console.error('Failed to parse footnote links:', error);\n return [];\n }\n }, [rest['data-footnote-links']]);\n\n const isError = links.length === 0;\n\n if (!children) return;\n\n if (isError) {\n if (!Array.isArray(children)) return children;\n return <DefaultFootnotes dataSource={children} />;\n }\n\n return (\n <section className={'footnotes'} data-footnotes=\"true\">\n <SearchResultCards dataSource={links} />\n </section>\n );\n});\n\nFootnotes.displayName = 'Footnotes';\n\nexport default Footnotes;\n"],"mappings":";;;;;;;;;;;AAiBA,MAAM,mBAAmB,MAA6B,EAAE,iBAAiB;CACvE,MAAM,QAAQ,cAEV,WACG,MAAM,UAAU,OAAO,SAAS,KAAK,EACpC,OAAO,UAAU,KAAK,SAAc;AACpC,MAAI,OAAO,SAAS,YAAY,MAAM,SAAS,KAAM,QAAO;EAC5D,MAAM,OAAO,MAAM,OAAO,UAAU,MAAM,SAAc,MAAM,OAAO,SAAS,EAAE,OAC5E;AACJ,MAAI,CAAC,QAAQ,CAAC,MAAM,QAAQ,KAAK,CAAE,QAAO;AAC1C,SAAO;GACL,UAAU,KAAK;GACf,OAAO,KAAK,IAAI,SAAS,EAAE;GAC5B;GACD,CACD,OAAO,QAAQ,EACpB,CAAC,WAAW,CACb;AAED,KAAI,CAAC,MAAM,QAAQ,MAAM,CAAE,QAAO;AAElC,QACE,oBAACA;EACC,OAAO;EACP,IAAI;EACJ,WAAW;EACX,kBAAe;EACf,KAAK;EACL;EACA,SAAS;EACT,MAAM;YAEL,MAAM,KAAK,EAAE,UAAU,SAAS,UAAU;GAEzC,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS;AAEhC,UACE,8BAFgB,OAAOC,YAAI;IAEhB,GAAK,OAAO;KAAE;KAAM,GAAG;KAAM,GAAG;IAAO,KAAK;MACrD,qBAACC;IACC,OAAO;IACP;IACA,OAAO;KAAE,UAAU;KAAU,UAAU;KAAY;IACnD,SAAS;eAET,oBAACA;KAAM,eAAe;KAAU,OAAO,EAAE,cAAc,GAAG;KAAE,SAAS;eACnE,oBAACC;MAAK,IAAG;MAAO;MAAK,MAAM;gBACxB,QAAQ;OACJ;MACD,EACR,oBAACA;KAAK,IAAG;KAAO,OAAO,EAAE,eAAe,UAAU;KAAE,MAAM;KACvD;MACI;KACD,CACE;IAEd;GACM;EAEZ;AAEF,MAAM,YAAY,MAAsB,EAAE,UAAU,GAAG,WAAW;CAChE,MAAM,QAAQ,cAAc;AAC1B,MAAI;AACF,UAAO,KAAK,MAAM,KAAK,0BAA0B,KAAK;WAC/C,OAAO;AACd,WAAQ,MAAM,mCAAmC,MAAM;AACvD,UAAO,EAAE;;IAEV,CAAC,KAAK,uBAAuB,CAAC;CAEjC,MAAM,UAAU,MAAM,WAAW;AAEjC,KAAI,CAAC,SAAU;AAEf,KAAI,SAAS;AACX,MAAI,CAAC,MAAM,QAAQ,SAAS,CAAE,QAAO;AACrC,SAAO,oBAAC,oBAAiB,YAAY,WAAY;;AAGnD,QACE,oBAAC;EAAQ,WAAW;EAAa,kBAAe;YAC9C,oBAACC,6BAAkB,YAAY,QAAS;GAChC;EAEZ;AAEF,UAAU,cAAc;AAExB,wBAAe"}