UNPKG

@lobehub/ui

Version:

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

1 lines 5.87 kB
{"version":3,"file":"FullFeatured.mjs","names":["Flexbox","MaterialFileTypeIcon","Text","CopyButton","ActionIcon"],"sources":["../../src/Mermaid/FullFeatured.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { ReactNode, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport { bodyVariants, headerVariants, variants } from '@/Highlighter/style';\nimport MaterialFileTypeIcon from '@/MaterialFileTypeIcon';\nimport Text from '@/Text';\nimport { stopPropagation } from '@/utils/dom';\n\nimport { MermaidProps } from './type';\n\nconst MermaidHeaderLanguage = memo(\n ({\n fileName,\n language,\n showLanguage,\n }: {\n fileName?: string;\n language: string;\n showLanguage?: boolean;\n }) => {\n if (!showLanguage) return null;\n\n return (\n <Flexbox\n align={'center'}\n className={'languageTitle'}\n flex={1}\n gap={4}\n horizontal\n justify={'flex-start'}\n paddingInline={8}\n >\n <MaterialFileTypeIcon\n fallbackUnknownType={false}\n filename={fileName || language}\n size={18}\n type={'file'}\n variant={'raw'}\n />\n\n <Text ellipsis fontSize={13}>\n {fileName || 'Mermaid'}\n </Text>\n </Flexbox>\n );\n },\n (prev, next) =>\n prev.fileName === next.fileName &&\n prev.language === next.language &&\n prev.showLanguage === next.showLanguage,\n);\n\nexport interface MermaidFullFeaturedProps extends Omit<MermaidProps, 'children'> {\n children: ReactNode;\n content: string;\n}\n\nexport const MermaidFullFeatured = memo<MermaidFullFeaturedProps>(\n ({\n showLanguage,\n styles: customStyles,\n classNames,\n content,\n children,\n className,\n copyable,\n actionsRender,\n style,\n variant,\n shadow,\n language = 'mermaid',\n fileName,\n defaultExpand = true,\n ...rest\n }) => {\n const [expand, setExpand] = useState(defaultExpand);\n const contentRef = useRef(content);\n\n useEffect(() => {\n contentRef.current = content;\n }, [content]);\n\n const getContent = useCallback(() => contentRef.current, []);\n\n const originalActions = useMemo(() => {\n if (!copyable) return null;\n return <CopyButton content={getContent} size={'small'} />;\n }, [copyable, getContent]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return originalActions;\n return actionsRender({\n actionIconSize: 'small',\n content,\n getContent,\n originalNode: originalActions,\n });\n }, [actionsRender, content, getContent, originalActions]);\n\n const handleToggleExpand = useCallback(() => {\n setExpand((prev) => !prev);\n }, []);\n\n return (\n <Flexbox\n className={cx(variants({ shadow, variant }), className)}\n data-code-type=\"mermaid\"\n style={style}\n {...rest}\n >\n <Flexbox\n align={'center'}\n className={cx(headerVariants({ variant }), classNames?.header)}\n horizontal\n justify={'space-between'}\n onClick={handleToggleExpand}\n style={customStyles?.header}\n >\n <MermaidHeaderLanguage\n fileName={fileName}\n language={language}\n showLanguage={showLanguage}\n />\n <Flexbox align={'center'} flex={'none'} gap={4} horizontal onClick={stopPropagation}>\n <Flexbox align={'center'} className={'panel-actions'} flex={'none'} gap={4} horizontal>\n {actions}\n </Flexbox>\n <ActionIcon\n icon={expand ? ChevronDown : ChevronRight}\n onClick={handleToggleExpand}\n size={'small'}\n />\n </Flexbox>\n </Flexbox>\n <Flexbox\n className={cx(bodyVariants({ expand }), classNames?.body)}\n style={customStyles?.body}\n >\n {children}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default MermaidFullFeatured;\n"],"mappings":";;;;;;;;;;;;;;;AAgBA,MAAM,wBAAwB,MAC3B,EACC,UACA,UACA,mBAKI;AACJ,KAAI,CAAC,aAAc,QAAO;AAE1B,QACE,qBAACA;EACC,OAAO;EACP,WAAW;EACX,MAAM;EACN,KAAK;EACL;EACA,SAAS;EACT,eAAe;aAEf,oBAACC;GACC,qBAAqB;GACrB,UAAU,YAAY;GACtB,MAAM;GACN,MAAM;GACN,SAAS;IACT,EAEF,oBAACC;GAAK;GAAS,UAAU;aACtB,YAAY;IACR;GACC;IAGb,MAAM,SACL,KAAK,aAAa,KAAK,YACvB,KAAK,aAAa,KAAK,YACvB,KAAK,iBAAiB,KAAK,aAC9B;AAOD,MAAa,sBAAsB,MAChC,EACC,cACA,QAAQ,cACR,YACA,SACA,UACA,WACA,UACA,eACA,OACA,SACA,QACA,WAAW,WACX,UACA,gBAAgB,MAChB,GAAG,WACC;CACJ,MAAM,CAAC,QAAQ,aAAa,SAAS,cAAc;CACnD,MAAM,aAAa,OAAO,QAAQ;AAElC,iBAAgB;AACd,aAAW,UAAU;IACpB,CAAC,QAAQ,CAAC;CAEb,MAAM,aAAa,kBAAkB,WAAW,SAAS,EAAE,CAAC;CAE5D,MAAM,kBAAkB,cAAc;AACpC,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,oBAACC;GAAW,SAAS;GAAY,MAAM;IAAW;IACxD,CAAC,UAAU,WAAW,CAAC;CAE1B,MAAM,UAAU,cAAc;AAC5B,MAAI,CAAC,cAAe,QAAO;AAC3B,SAAO,cAAc;GACnB,gBAAgB;GAChB;GACA;GACA,cAAc;GACf,CAAC;IACD;EAAC;EAAe;EAAS;EAAY;EAAgB,CAAC;CAEzD,MAAM,qBAAqB,kBAAkB;AAC3C,aAAW,SAAS,CAAC,KAAK;IACzB,EAAE,CAAC;AAEN,QACE,qBAACH;EACC,WAAW,GAAG,SAAS;GAAE;GAAQ;GAAS,CAAC,EAAE,UAAU;EACvD,kBAAe;EACR;EACP,GAAI;aAEJ,qBAACA;GACC,OAAO;GACP,WAAW,GAAG,eAAe,EAAE,SAAS,CAAC,EAAE,YAAY,OAAO;GAC9D;GACA,SAAS;GACT,SAAS;GACT,OAAO,cAAc;cAErB,oBAAC;IACW;IACA;IACI;KACd,EACF,qBAACA;IAAQ,OAAO;IAAU,MAAM;IAAQ,KAAK;IAAG;IAAW,SAAS;eAClE,oBAACA;KAAQ,OAAO;KAAU,WAAW;KAAiB,MAAM;KAAQ,KAAK;KAAG;eACzE;MACO,EACV,oBAACI;KACC,MAAM,SAAS,cAAc;KAC7B,SAAS;KACT,MAAM;MACN;KACM;IACF,EACV,oBAACJ;GACC,WAAW,GAAG,aAAa,EAAE,QAAQ,CAAC,EAAE,YAAY,KAAK;GACzD,OAAO,cAAc;GAEpB;IACO;GACF;EAGf;AAED,2BAAe"}