{"version":3,"file":"Text.mjs","names":[],"sources":["../../../src/base-ui/Text/Text.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { type CSSProperties, memo, type ReactNode, type RefObject, useRef } from 'react';\n\nimport Tooltip from '@/base-ui/Tooltip';\nimport { useTextOverflow } from '@/hooks/useTextOverflow';\n\nimport { variants } from './style';\nimport { type TextBaseProps, type TextProps } from './type';\n\ntype InternalTextProps = TextBaseProps & {\n  shiny?: boolean;\n  shinyDuration?: CSSProperties['animationDuration'];\n};\n\nconst InternalText = memo<InternalTextProps>(\n  ({\n    align,\n    as: Container = 'div',\n    children,\n    className,\n    classNames,\n    code,\n    color,\n    delete: deleteStyle,\n    disabled,\n    ellipsis,\n    fontSize,\n    italic,\n    lineClamp,\n    lineHeight,\n    mark,\n    noWrap,\n    ref,\n    shiny,\n    shinyDuration,\n    strong,\n    style,\n    styles: customStyles,\n    textDecoration,\n    textTransform,\n    type,\n    underline,\n    weight,\n    whiteSpace,\n    wordBreak,\n    ...rest\n  }) => {\n    const innerRef = useRef<HTMLElement>(null);\n    const isOverflow = useTextOverflow(innerRef, ellipsis, children);\n\n    const isMultiEllipsis = typeof ellipsis === 'object' && !!ellipsis.rows && ellipsis.rows > 1;\n    const tooltipWhenOverflow = typeof ellipsis === 'object' && ellipsis.tooltipWhenOverflow;\n\n    const setNodeRef = (node: HTMLElement | null) => {\n      innerRef.current = node;\n      if (typeof ref === 'function') ref(node as HTMLDivElement);\n      else if (ref) (ref as RefObject<HTMLDivElement | null>).current = node as HTMLDivElement;\n    };\n\n    const textStyle: CSSProperties = {\n      ...(color && { color }),\n      ...(weight && { fontWeight: weight }),\n      ...(lineHeight && { lineHeight }),\n      ...(textTransform && { textTransform }),\n      ...(textDecoration && { textDecoration }),\n      ...(wordBreak && { wordBreak }),\n      ...(typeof ellipsis === 'object' &&\n        ellipsis.rows && {\n          WebkitLineClamp: ellipsis.rows,\n        }),\n      ...(!ellipsis &&\n        !!lineClamp && {\n          WebkitBoxOrient: 'vertical',\n          WebkitLineClamp: lineClamp,\n          display: '-webkit-box',\n          overflow: 'hidden',\n          textOverflow: 'ellipsis',\n        }),\n      ...(shiny && shinyDuration && { '--shiny-duration': shinyDuration }),\n      ...(fontSize && { fontSize }),\n      ...(align && { textAlign: align }),\n      ...(!isMultiEllipsis && noWrap && { whiteSpace: 'nowrap' as const }),\n      ...(whiteSpace && { whiteSpace }),\n      ...style,\n      ...customStyles?.root,\n    };\n\n    const content = (\n      <Container\n        {...rest}\n        ref={setNodeRef}\n        style={textStyle}\n        className={cx(\n          variants({\n            as: ['h1', 'h2', 'h3', 'h4', 'h5', 'p'].includes(Container as string)\n              ? (Container as 'h1')\n              : undefined,\n            code,\n            delete: deleteStyle,\n            disabled,\n            ellipsis: ellipsis\n              ? typeof ellipsis === 'object' && ellipsis.rows\n                ? 'multi'\n                : true\n              : undefined,\n            italic,\n            mark,\n            shiny,\n            strong,\n            type,\n            underline,\n          }),\n          className,\n          classNames?.root,\n        )}\n      >\n        {children}\n      </Container>\n    );\n\n    if (\n      ellipsis &&\n      typeof ellipsis === 'object' &&\n      (ellipsis.tooltip || ellipsis.tooltipWhenOverflow)\n    ) {\n      if (tooltipWhenOverflow && !isOverflow) return content;\n\n      const title = typeof ellipsis.tooltip === 'string' ? ellipsis.tooltip : children;\n      if (ellipsis.tooltip && typeof ellipsis.tooltip === 'object')\n        return (\n          <Tooltip {...ellipsis.tooltip} title={ellipsis.tooltip?.title || title}>\n            {content}\n          </Tooltip>\n        );\n      return <Tooltip title={title}>{content}</Tooltip>;\n    }\n\n    return content;\n  },\n);\n\nInternalText.displayName = 'Text';\n\nexport interface IText {\n  <Shiny extends boolean = boolean>(props: TextProps<Shiny>): ReactNode;\n}\n\nconst Text = InternalText as unknown as IText;\n\nexport default Text;\n"],"mappings":";;;;;;;;AAgBA,MAAM,eAAe,MAClB,EACC,OACA,IAAI,YAAY,OAChB,UACA,WACA,YACA,MACA,OACA,QAAQ,aACR,UACA,UACA,UACA,QACA,WACA,YACA,MACA,QACA,KACA,OACA,eACA,QACA,OACA,QAAQ,cACR,gBACA,eACA,MACA,WACA,QACA,YACA,WACA,GAAG,WACC;CACJ,MAAM,WAAW,OAAoB,IAAI;CACzC,MAAM,aAAa,gBAAgB,UAAU,UAAU,QAAQ;CAE/D,MAAM,kBAAkB,OAAO,aAAa,YAAY,CAAC,CAAC,SAAS,QAAQ,SAAS,OAAO;CAC3F,MAAM,sBAAsB,OAAO,aAAa,YAAY,SAAS;CAErE,MAAM,cAAc,SAA6B;EAC/C,SAAS,UAAU;EACnB,IAAI,OAAO,QAAQ,YAAY,IAAI,IAAsB;OACpD,IAAI,KAAK,IAA0C,UAAU;CACpE;CAEA,MAAM,YAA2B;EAC/B,GAAI,SAAS,EAAE,MAAM;EACrB,GAAI,UAAU,EAAE,YAAY,OAAO;EACnC,GAAI,cAAc,EAAE,WAAW;EAC/B,GAAI,iBAAiB,EAAE,cAAc;EACrC,GAAI,kBAAkB,EAAE,eAAe;EACvC,GAAI,aAAa,EAAE,UAAU;EAC7B,GAAI,OAAO,aAAa,YACtB,SAAS,QAAQ,EACf,iBAAiB,SAAS,KAC5B;EACF,GAAI,CAAC,YACH,CAAC,CAAC,aAAa;GACb,iBAAiB;GACjB,iBAAiB;GACjB,SAAS;GACT,UAAU;GACV,cAAc;EAChB;EACF,GAAI,SAAS,iBAAiB,EAAE,oBAAoB,cAAc;EAClE,GAAI,YAAY,EAAE,SAAS;EAC3B,GAAI,SAAS,EAAE,WAAW,MAAM;EAChC,GAAI,CAAC,mBAAmB,UAAU,EAAE,YAAY,SAAkB;EAClE,GAAI,cAAc,EAAE,WAAW;EAC/B,GAAG;EACH,GAAG,cAAc;CACnB;CAEA,MAAM,UACJ,oBAAC,WAAD;EACE,GAAI;EACJ,KAAK;EACL,OAAO;EACP,WAAW,GACT,SAAS;GACP,IAAI;IAAC;IAAM;IAAM;IAAM;IAAM;IAAM;GAAG,CAAC,CAAC,SAAS,SAAmB,IAC/D,YACD,KAAA;GACJ;GACA,QAAQ;GACR;GACA,UAAU,WACN,OAAO,aAAa,YAAY,SAAS,OACvC,UACA,OACF,KAAA;GACJ;GACA;GACA;GACA;GACA;GACA;EACF,CAAC,GACD,WACA,YAAY,IACd;EAEC;CACQ,CAAA;CAGb,IACE,YACA,OAAO,aAAa,aACnB,SAAS,WAAW,SAAS,sBAC9B;EACA,IAAI,uBAAuB,CAAC,YAAY,OAAO;EAE/C,MAAM,QAAQ,OAAO,SAAS,YAAY,WAAW,SAAS,UAAU;EACxE,IAAI,SAAS,WAAW,OAAO,SAAS,YAAY,UAClD,OACE,oBAAC,SAAD;GAAS,GAAI,SAAS;GAAS,OAAO,SAAS,SAAS,SAAS;GAC9D,UAAA;EACM,CAAA;EAEb,OAAO,oBAAC,SAAD;GAAgB;GAAQ,UAAA;EAAiB,CAAA;CAClD;CAEA,OAAO;AACT,CACF;AAEA,aAAa,cAAc;AAM3B,MAAM,OAAO"}