UNPKG

@lobehub/ui

Version:

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

1 lines 3.95 kB
{"version":3,"file":"EditableText.mjs","names":["useControlledState","Flexbox"],"sources":["../../src/EditableText/EditableText.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { Edit3 } from 'lucide-react';\nimport { memo, useMemo } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport useControlledState from 'use-merge-value';\n\nimport ActionIcon from '@/ActionIcon';\nimport { Flexbox } from '@/Flex';\n\nimport ControlInput from './ControlInput';\nimport type { EditableTextProps } from './type';\n\nconst EditableText = memo<EditableTextProps>(\n ({\n value,\n showEditIcon = true,\n onChange,\n editing,\n onEditingChange,\n onChangeEnd,\n onFocus,\n onBlur,\n className,\n inputProps,\n onValueChanging,\n gap = 8,\n style,\n size = 'small',\n styles,\n classNames,\n variant = 'borderless',\n ...rest\n }) => {\n const [edited, setEdited] = useControlledState(false, {\n onChange: onEditingChange,\n value: editing,\n });\n\n useHotkeys(\n 'esc',\n () => {\n setEdited(false);\n },\n {\n enableOnFormTags: true,\n enabled: edited,\n preventDefault: true,\n },\n );\n\n const height = useMemo(() => {\n if (!size) return 32;\n switch (size) {\n case 'large': {\n return 40;\n }\n case 'middle': {\n return 32;\n }\n case 'small': {\n return 24;\n }\n }\n }, [size]);\n\n const input = (\n <ControlInput\n className={cx(className, classNames?.input)}\n size={size}\n value={value as string}\n variant={variant}\n style={{\n height,\n ...style,\n ...styles?.input,\n }}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n onValueChanging={onValueChanging}\n onChangeEnd={(v) => {\n onChangeEnd?.(v);\n setEdited(false);\n }}\n {...inputProps}\n />\n );\n\n const content = (\n <>\n <span>{value}</span>\n {showEditIcon && (\n <ActionIcon\n icon={Edit3}\n size=\"small\"\n title={'Edit'}\n onClick={() => {\n setEdited(!edited);\n }}\n />\n )}\n </>\n );\n\n return (\n <Flexbox\n horizontal\n align={'center'}\n className={cx(className, classNames?.container)}\n gap={gap}\n style={{\n height,\n width: '100%',\n ...style,\n ...styles?.container,\n }}\n {...rest}\n >\n {edited ? input : content}\n </Flexbox>\n );\n },\n);\n\nEditableText.displayName = 'EditableText';\n\nexport default EditableText;\n"],"mappings":";;;;;;;;;;;AAcA,MAAM,eAAe,MAClB,EACC,OACA,eAAe,MACf,UACA,SACA,iBACA,aACA,SACA,QACA,WACA,YACA,iBACA,MAAM,GACN,OACA,OAAO,SACP,QACA,YACA,UAAU,cACV,GAAG,WACC;CACJ,MAAM,CAAC,QAAQ,aAAaA,cAAmB,OAAO;EACpD,UAAU;EACV,OAAO;CACT,CAAC;CAED,WACE,aACM;EACJ,UAAU,KAAK;CACjB,GACA;EACE,kBAAkB;EAClB,SAAS;EACT,gBAAgB;CAClB,CACF;CAEA,MAAM,SAAS,cAAc;EAC3B,IAAI,CAAC,MAAM,OAAO;EAClB,QAAQ,MAAR;GACE,KAAK,SACH,OAAO;GAET,KAAK,UACH,OAAO;GAET,KAAK,SACH,OAAO;EAEX;CACF,GAAG,CAAC,IAAI,CAAC;CAET,MAAM,QACJ,oBAAC,cAAD;EACE,WAAW,GAAG,WAAW,YAAY,KAAK;EACpC;EACC;EACE;EACT,OAAO;GACL;GACA,GAAG;GACH,GAAG,QAAQ;EACb;EACQ;EACE;EACD;EACQ;EACjB,cAAc,MAAM;GAClB,cAAc,CAAC;GACf,UAAU,KAAK;EACjB;EACA,GAAI;CACL,CAAA;CAGH,MAAM,UACJ,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,QAAD,EAAA,UAAO,MAAY,CAAA,GAClB,gBACC,oBAAC,YAAD;EACE,MAAM;EACN,MAAK;EACL,OAAO;EACP,eAAe;GACb,UAAU,CAAC,MAAM;EACnB;CACD,CAAA,CAEH,EAAA,CAAA;CAGJ,OACE,oBAACC,mBAAD;EACE,YAAA;EACA,OAAO;EACP,WAAW,GAAG,WAAW,YAAY,SAAS;EACzC;EACL,OAAO;GACL;GACA,OAAO;GACP,GAAG;GACH,GAAG,QAAQ;EACb;EACA,GAAI;YAEH,SAAS,QAAQ;CACX,CAAA;AAEb,CACF;AAEA,aAAa,cAAc"}