{"version":3,"sources":["../../src/components/TextTruncator.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, useState } from 'react';\nimport { Link, Typography, styled } from '@mui/material';\nimport type { TypographyProps } from '@mui/material/Typography';\nimport { useThemeProps } from '@mui/material/styles';\n\nconst ELLIPSIS = '…';\n\nexport interface TextTruncatorProps extends TypographyProps {\n    children: string;\n    charLimit?: number;\n    showMore?: string;\n    showLess?: string;\n    expandedByDefault?: boolean;\n}\n\nconst TextTruncatorRoot = styled(Typography, {\n    name: 'MuiTextTruncator',\n    slot: 'root',\n})({});\n\nexport const TextTruncator = forwardRef<HTMLElement, TextTruncatorProps>(\n    function TextTruncator(inProps, ref) {\n        const props = useThemeProps({ props: inProps, name: 'MuiTextTruncator' });\n        const {\n            children: text,\n            charLimit = 200,\n            showMore = 'Expand',\n            showLess = 'Collapse',\n            expandedByDefault,\n            ...typographyProps\n        } = props;\n        const [showFullText, setShowFullText] = useState(expandedByDefault);\n\n        if (charLimit >= text.length) {\n            return (\n                <TextTruncatorRoot ref={ref} {...typographyProps}>\n                    {text}\n                </TextTruncatorRoot>\n            );\n        }\n\n        const substringEnd = showFullText\n            ? text.length\n            : text.substring(0, charLimit - ELLIPSIS.length).search(/ [^ ]*$/);\n        return (\n            <TextTruncatorRoot ref={ref} {...typographyProps}>\n                {text.substring(0, substringEnd)}\n                {!showFullText ? ELLIPSIS : null}\n                &nbsp;\n                <Link\n                    component=\"button\"\n                    variant={typographyProps.variant}\n                    onClick={() => {\n                        setShowFullText(!showFullText);\n                    }}\n                    sx={{ verticalAlign: 'top' }}>\n                    {showFullText ? showLess : showMore}\n                </Link>\n            </TextTruncatorRoot>\n        );\n    }\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAqC;AACrC,sBAAyC;AAEzC,oBAA8B;AAgCd;AA9BhB,IAAM,WAAW;AAUjB,IAAM,wBAAoB,wBAAO,4BAAY;AAAA,EACzC,MAAM;AAAA,EACN,MAAM;AACV,CAAC,EAAE,CAAC,CAAC;AAEE,IAAM,oBAAgB;AAAA,EACzB,SAASA,eAAc,SAAS,KAAK;AACjC,UAAM,YAAQ,6BAAc,EAAE,OAAO,SAAS,MAAM,mBAAmB,CAAC;AACxE,UAAM;AAAA,MACF,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,MACX;AAAA,MACA,GAAG;AAAA,IACP,IAAI;AACJ,UAAM,CAAC,cAAc,eAAe,QAAI,uBAAS,iBAAiB;AAElE,QAAI,aAAa,KAAK,QAAQ;AAC1B,aACI,4CAAC,qBAAkB,KAAW,GAAG,iBAC5B,gBACL;AAAA,IAER;AAEA,UAAM,eAAe,eACf,KAAK,SACL,KAAK,UAAU,GAAG,YAAY,SAAS,MAAM,EAAE,OAAO,SAAS;AACrE,WACI,6CAAC,qBAAkB,KAAW,GAAG,iBAC5B;AAAA,WAAK,UAAU,GAAG,YAAY;AAAA,MAC9B,CAAC,eAAe,WAAW;AAAA,MAAK;AAAA,MAEjC;AAAA,QAAC;AAAA;AAAA,UACG,WAAU;AAAA,UACV,SAAS,gBAAgB;AAAA,UACzB,SAAS,MAAM;AACX,4BAAgB,CAAC,YAAY;AAAA,UACjC;AAAA,UACA,IAAI,EAAE,eAAe,MAAM;AAAA,UAC1B,yBAAe,WAAW;AAAA;AAAA,MAC/B;AAAA,OACJ;AAAA,EAER;AACJ;","names":["TextTruncator"]}