@lax-wp/design-system 0.16.3 → 0.16.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js +1 -1
- package/dist/components/data-display/infinite-table/CellContextMenuPortal.es.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.es.js +1 -1
- package/dist/components/data-display/infinite-table/head/cell/index.es.js.map +1 -1
- package/dist/components/data-display/label/Label.cjs.js +1 -1
- package/dist/components/data-display/label/Label.cjs.js.map +1 -1
- package/dist/components/data-display/label/Label.es.js +2 -2
- package/dist/components/data-display/label/Label.es.js.map +1 -1
- package/dist/components/forms/base-input-field/BaseInputField.cjs.js +2 -2
- package/dist/components/forms/base-input-field/BaseInputField.cjs.js.map +1 -1
- package/dist/components/forms/base-input-field/BaseInputField.es.js +19 -19
- package/dist/components/forms/base-input-field/BaseInputField.es.js.map +1 -1
- package/dist/components/forms/currency-input/CurrencyInputField.cjs.js +1 -1
- package/dist/components/forms/currency-input/CurrencyInputField.cjs.js.map +1 -1
- package/dist/components/forms/currency-input/CurrencyInputField.es.js +13 -13
- package/dist/components/forms/currency-input/CurrencyInputField.es.js.map +1 -1
- package/dist/components/forms/percentage-input/PercentageInputField.cjs.js +1 -1
- package/dist/components/forms/percentage-input/PercentageInputField.cjs.js.map +1 -1
- package/dist/components/forms/percentage-input/PercentageInputField.es.js +46 -46
- package/dist/components/forms/percentage-input/PercentageInputField.es.js.map +1 -1
- package/dist/components/forms/text-area-field/TextAreaField.cjs.js +1 -1
- package/dist/components/forms/text-area-field/TextAreaField.cjs.js.map +1 -1
- package/dist/components/forms/text-area-field/TextAreaField.es.js +38 -39
- package/dist/components/forms/text-area-field/TextAreaField.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextAreaField.cjs.js","sources":["../../../../src/components/forms/text-area-field/TextAreaField.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport cn from \"classnames\";\nimport { forwardRef, useState } from \"react\";\nimport type { RefObject } from \"react\";\nimport { Tooltip as AntTooltip } from \"antd\";\nimport { useTranslation } from 'react-i18next';\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { HelpIcon } from \"../../icons/HelpIcon\";\nimport { Label } from \"../../data-display/label/Label\";\nimport type { LabelType } from \"../../data-display/label/Label\";\nimport { NoteAddOutlined, BoltOutlined } from \"@mui/icons-material\";\nimport { AIExtractedIndicator } from \"../../icons/AIExtractedIndicator\";\nimport { AIStarIcon } from \"../../icons/AIStarIcon\";\nimport { InputLabel } from \"../shared/InputLabel\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport {\n getConfidenceScoreBadgeClass,\n getConfidenceScoreBadgeColor,\n getConfidenceScoreBadgeFill,\n getConfidenceScoreBadgeTextColor,\n shouldShowConfidenceScore,\n} from \"../../../utils/confidenceScoreUtils\";\n\n/**\n * Confidence score type\n */\nexport type ConfidenceScoreType = \"low\" | \"medium\" | \"high\";\n\nexport type SourceMetaBBox = {\n b: number;\n l: number;\n r: number;\n t: number;\n};\n\nexport type SourceMetaItem = {\n bbox: SourceMetaBBox;\n confidence_score?: number;\n is_primary?: boolean;\n match_score?: number;\n match_type?: string;\n page_height: number;\n page_width: number;\n source_page: number;\n source_text?: string;\n};\n\n/**\n * Risk details interface\n */\nexport interface RiskDetails {\n color?: string;\n description?: string;\n hexBgColor?: string;\n hexBorderColor?: string;\n [key: string]: any;\n}\n\n/**\n * Risk details card component props - generic to allow consumer-specific risk types\n */\nexport interface RiskDetailsCardProps<T = any> {\n riskDetails: T;\n maxWidth?: string;\n showAllRisksSuggestions?: boolean;\n}\n\n/**\n * Props for the TextAreaField component\n */\nexport interface TextAreaFieldProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\" | \"maxLength\"> {\n /** The label text to display above the textarea */\n label?: string;\n /** Placeholder text for the textarea */\n placeholder: string;\n /** Current value of the textarea */\n value?: string | any;\n /** Callback function called when the textarea value changes */\n onChange: (value: string) => void;\n /** Number of visible text lines for the textarea (alias for rows) */\n row?: number;\n /** Error message to display below the textarea */\n errorMessage?: string;\n /** Default value for the textarea */\n defaultValue?: string;\n /** Whether the field is required */\n required?: boolean;\n /** Whether the required indicator shows as conditional (yellow instead of red) */\n isRequiredConditional?: boolean;\n /** Tags/labels to display next to the label */\n tags?: (string | LabelType)[];\n /** Whether the textarea is disabled */\n disabled?: boolean;\n /** Additional CSS classes for the textarea element */\n className?: string;\n /** Ref object for the textarea element */\n inputRef?: RefObject<HTMLTextAreaElement>;\n /** Maximum character length allowed */\n maxLength?: number | null;\n /** Tooltip text to display */\n tooltip?: string;\n /** Whether to preserve original case in the label */\n originalCase?: boolean;\n /** Whether the value was AI extracted */\n isAiExtracted?: boolean;\n /** Confidence percentage shown as a badge */\n confidenceScore?: number;\n /** Confidence classification for badge styling */\n confidenceType?: ConfidenceScoreType;\n /** Optional tooltip content for confidence badge */\n confidenceTooltip?: React.ReactNode;\n /** Source meta for confidence score */\n sourceMeta?: SourceMetaItem[];\n /** Handler fired when confidence score badge is clicked */\n onConfidenceScoreClick?: (sourceMeta: SourceMetaItem[]) => void;\n /** Whether this is a GTN (Global Term Name) field */\n isGTN?: boolean;\n /** GTN field name for document integration */\n gtnName?: any;\n /** Whether to remove border styling */\n noBorder?: boolean;\n /** Unique identifier for the textarea */\n id?: string;\n /** Custom inline styles for the textarea */\n inputStyle?: React.CSSProperties;\n /** Additional CSS classes for the label */\n labelClassName?: string;\n /** Whether this is a live field */\n isLiveField?: boolean;\n /** Callback function called when the textarea loses focus */\n onBlur?: () => void;\n /** Risk details data */\n riskDetails?: RiskDetails;\n /** Whether risk analysis is open */\n isRiskAnalysisOpen?: boolean;\n /** Custom risk details card component */\n RiskDetailsCard?: React.ComponentType<RiskDetailsCardProps<any>>;\n /** Handler for adding GTN to document */\n onAddGTNToDocument?: (keyValuePair: { key: string; value: string }) => void;\n /** Optional extra content in the label row (e.g. actions, badges) */\n labelExtra?: React.ReactNode;\n /** Input surface style: `'modified'` — Warning colors; `'deleted'` — Error colors, text #475467; `'success'` — Success colors, text #101828. */\n inputEmphasis?: \"default\" | \"modified\" | \"deleted\" | \"success\";\n}\n\n/**\n * A customizable textarea field component with label, validation, GTN integration,\n * risk analysis support, and styling support. Features dark mode support,\n * accessibility enhancements, and character count display.\n *\n * @example\n * ```tsx\n * <TextAreaField\n * label=\"Description\"\n * placeholder=\"Enter a description...\"\n * value={description}\n * onChange={(value) => setDescription(value)}\n * required\n * />\n *\n * <TextAreaField\n * label=\"Comments\"\n * placeholder=\"Enter comments...\"\n * value={comments}\n * onChange={(value) => setComments(value)}\n * maxLength={500}\n * isGTN\n * gtnName=\"comments_field\"\n * onAddGTNToDocument={(kv) => handleAddToDocument(kv)}\n * />\n * ```\n */\nexport const TextAreaField = forwardRef<HTMLDivElement, TextAreaFieldProps>(\n (\n {\n label,\n placeholder,\n value,\n onChange,\n row = 4,\n errorMessage,\n defaultValue,\n required,\n isRequiredConditional = false,\n tags = [],\n disabled,\n className,\n inputRef,\n maxLength = undefined,\n tooltip = \"\",\n originalCase = false,\n isAiExtracted = false,\n confidenceScore,\n confidenceType = \"high\",\n confidenceTooltip,\n sourceMeta = [],\n onConfidenceScoreClick,\n isGTN = false,\n gtnName = \"\",\n noBorder = false,\n id,\n inputStyle,\n labelClassName,\n isLiveField = false,\n onBlur,\n riskDetails,\n isRiskAnalysisOpen = false,\n RiskDetailsCard,\n onAddGTNToDocument,\n labelExtra,\n inputEmphasis = \"default\",\n ...textareaProps\n },\n ref\n ) => {\n const { t } = useTranslation();\n const [isHovered, setIsHovered] = useState(false);\n const showRiskSkin = Boolean(isRiskAnalysisOpen && riskDetails?.color);\n const emphasisModifiedSkin = inputEmphasis === \"modified\" && !errorMessage && !showRiskSkin;\n const emphasisDeletedSkin = inputEmphasis === \"deleted\" && !errorMessage && !showRiskSkin;\n const emphasisSuccessSkin = inputEmphasis === \"success\" && !errorMessage && !showRiskSkin;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n const form = (e.target as HTMLTextAreaElement).closest(\"form\");\n if (form) {\n const submitButton = form.querySelector<HTMLButtonElement>('button[type=\"submit\"]');\n if (submitButton) {\n submitButton.click();\n } else {\n form.requestSubmit();\n }\n }\n }\n textareaProps.onKeyDown?.(e);\n };\n\n const handleAddGTNToDocument = () => {\n if (onAddGTNToDocument) {\n const keyValuePair = {\n key: gtnName,\n value: value || \"\",\n };\n onAddGTNToDocument(keyValuePair);\n }\n };\n\n return (\n <div\n ref={ref}\n id={id}\n className={cn(\n \"flex gap-0.5 relative\",\n isHovered && isGTN\n ? \"border rounded-lg border-primary-100 bg-primary-50 p-1\"\n : \"\"\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {isGTN && !isHovered ? (\n <div className=\"w-1 h-1 bg-primary-600 rounded-full animate-blink mt-1.5\" />\n ) : null}\n <div className={cn(\"w-full flex flex-col\")}>\n <label\n htmlFor=\"text\"\n className={`mb-1 text-xs font-medium text-gray-600 dark:text-black-300 inline-flex items-center gap-1 ${\n !originalCase ? \"capitalize\" : \"\"\n } ${labelClassName || \"\"}`}\n >\n <div className=\"grid w-full grid-cols-[minmax(0,1fr)_auto] items-start gap-x-1\">\n <div className=\"inline-flex min-w-0 items-center gap-1 flex-wrap\">\n <InputLabel label={label || \"\"} required={required || false} isRequiredConditional={isRequiredConditional || false} />\n {isLiveField && (\n <BoltOutlined\n sx={{\n fontSize: 16,\n color: \"var(--color-primary-600)\",\n rotate: \"15deg\",\n }}\n />\n )}\n {isAiExtracted && !shouldShowConfidenceScore(confidenceScore) && <AIExtractedIndicator />}\n <Label labels={tags || []} />\n {tooltip && (\n <AntTooltip placement=\"top\" title={tooltip}>\n <div\n className=\"cursor-pointer\"\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n }\n }}\n >\n <HelpIcon className=\"w-icon-sm h-icon-sm\" />\n </div>\n </AntTooltip>\n )}\n {labelExtra}\n </div>\n\n <div className=\"flex items-center gap-1 justify-self-end\">\n {(shouldShowConfidenceScore(confidenceScore) && confidenceType) ? (\n <Tooltip\n placement=\"top-end\"\n title={confidenceTooltip ?? \"\"}\n hideTooltip={confidenceTooltip === undefined || confidenceTooltip === null}\n className=\"cursor-pointer\"\n >\n <div\n className={cn(\n \"inline-flex min-w-[50px] items-center gap-1 rounded-md px-1 py-0.5\",\n getConfidenceScoreBadgeClass(confidenceType)\n )}\n onClick={() => onConfidenceScoreClick?.(sourceMeta)}\n >\n <AIStarIcon\n size={12}\n fill={getConfidenceScoreBadgeColor(confidenceType)}\n fillSecondary={getConfidenceScoreBadgeFill(confidenceType)}\n />\n <span className={cn(\"text-xs font-medium leading-4\", getConfidenceScoreBadgeTextColor(confidenceType))}>\n {confidenceScore}%\n </span>\n </div>\n </Tooltip>\n ) : null}\n {isGTN && isHovered ? (\n <button\n id=\"btn-textarea-field-add-to-document\"\n className=\"cursor-pointer\"\n onClick={handleAddGTNToDocument}\n type=\"button\"\n >\n <AntTooltip placement=\"top\" title={t(\"Add to document\")}>\n <NoteAddOutlined\n className=\"text-primary-600\"\n sx={{ fontSize: 16 }}\n />\n </AntTooltip>\n </button>\n ) : null}\n </div>\n </div>\n </label>\n <textarea\n {...textareaProps}\n onKeyDown={handleKeyDown}\n onBlur={onBlur}\n onChange={(e) => onChange(e.target.value)}\n defaultValue={defaultValue}\n value={value}\n required={required}\n className={cn(\n \"border rounded-lg focus:outline-none focus:ring-0 block w-full py-2.5 px-3 font-inter font-medium text-sm disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400\",\n {\n \"border-red-300\": errorMessage,\n \"border-gray-300 dark:border-black-700\": !errorMessage && !emphasisModifiedSkin && !emphasisDeletedSkin && !emphasisSuccessSkin && !showRiskSkin,\n \"text-neutral-400 dark:text-neutral-500\": disabled && !emphasisDeletedSkin && !emphasisSuccessSkin,\n \"text-neutral-900 dark:text-neutral-50\": !disabled && !emphasisDeletedSkin && !emphasisSuccessSkin,\n \"border-none\": noBorder,\n \"focus:border-none\": noBorder,\n \"placeholder:text-neutral-400 dark:placeholder:text-black-300\": true,\n \"focus:border-[var(--color-primary-600)] dark:focus:border-[var(--color-primary-400)] focus:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus:shadow-[0_0_0_1.5px_var(--color-primary-950)] bg-white dark:bg-black-600\": !emphasisModifiedSkin && !emphasisDeletedSkin && !emphasisSuccessSkin && !showRiskSkin && !errorMessage,\n },\n emphasisDeletedSkin && \"border-[var(--Error-200,#FECACA)] bg-[var(--Error-50,#FEF2F2)] !text-[#475467] focus:border-[var(--Error-200,#FECACA)] focus:shadow-[0_0_0_2px_rgba(254,202,202,0.45)] dark:border-[var(--Error-200,#FECACA)] dark:bg-[var(--Error-50,#FEF2F2)] dark:!text-[#475467] disabled:!opacity-100 disabled:!bg-[var(--Error-50,#FEF2F2)]\",\n emphasisModifiedSkin && \"border-[var(--Warning-200,#FEDF89)] bg-[var(--Warning-50,#FFFAEB)] text-neutral-900 dark:text-black-100 focus:border-[var(--Warning-200,#FEDF89)] focus:shadow-[0_0_0_2px_rgba(254,223,137,0.45)] dark:border-[var(--Warning-200,#FEDF89)] dark:bg-[var(--Warning-50,#FFFAEB)] disabled:!opacity-100 disabled:!bg-[var(--Warning-50,#FFFAEB)]\",\n emphasisSuccessSkin && \"border-[var(--Success-200,#BBF7D0)] bg-[var(--Success-50,#F0FDF4)] !text-[#101828] focus:border-[var(--Success-200,#BBF7D0)] focus:shadow-[0_0_0_2px_rgba(187,247,208,0.45)] dark:border-[var(--Success-200,#BBF7D0)] dark:bg-[var(--Success-50,#F0FDF4)] dark:!text-[#101828] disabled:!opacity-100 disabled:!bg-[var(--Success-50,#F0FDF4)]\",\n className,\n showRiskSkin && `!bg-${riskDetails!.color}-50 border-${riskDetails!.color}-300`\n )}\n style={\n showRiskSkin && riskDetails\n ? {\n backgroundColor: riskDetails.hexBgColor || undefined,\n borderColor: riskDetails.hexBorderColor || undefined,\n ...inputStyle,\n }\n : inputStyle\n }\n rows={row}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxLength || undefined}\n id={id}\n ref={inputRef}\n onClick={(e) => e.stopPropagation()}\n autoComplete=\"off\"\n />\n {maxLength ? (\n <Typography\n className=\"mt-0.5 text-right text-neutral-900 dark:text-white\"\n appearance=\"custom\"\n size=\"extra-small\"\n >\n <span\n className={`${\n value?.length >= maxLength\n ? \"text-error-500\"\n : value?.length > maxLength - Math.min(50, maxLength / 5)\n ? \"text-warning-500 dark:text-warning-300\"\n : \"\"\n }`}\n >\n {value?.length || 0}{\" \"}\n </span>\n / {maxLength}\n </Typography>\n ) : null}\n\n {errorMessage && (\n <Typography\n className=\"text-error-500 mt-1\"\n appearance=\"custom\"\n size=\"extra-small\"\n variant=\"medium\"\n >\n {errorMessage}\n </Typography>\n )}\n </div>\n\n {isHovered && isRiskAnalysisOpen && riskDetails && RiskDetailsCard && (\n <div\n role=\"tooltip\"\n tabIndex={0}\n className=\"absolute left-0 right-0 top-[95%] mt-1 z-50 bg-white dark:bg-black-600 rounded-xl\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.preventDefault()}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n setIsHovered(false);\n }\n }}\n >\n <RiskDetailsCard riskDetails={riskDetails} />\n </div>\n )}\n </div>\n );\n }\n);\n\nTextAreaField.displayName = \"TextAreaField\";\n\n"],"names":["TextAreaField","forwardRef","label","placeholder","value","onChange","row","errorMessage","defaultValue","required","isRequiredConditional","tags","disabled","className","inputRef","maxLength","tooltip","originalCase","isAiExtracted","confidenceScore","confidenceType","confidenceTooltip","sourceMeta","onConfidenceScoreClick","isGTN","gtnName","noBorder","id","inputStyle","labelClassName","isLiveField","onBlur","riskDetails","isRiskAnalysisOpen","RiskDetailsCard","onAddGTNToDocument","labelExtra","inputEmphasis","textareaProps","ref","t","useTranslation","isHovered","setIsHovered","useState","showRiskSkin","emphasisModifiedSkin","emphasisDeletedSkin","emphasisSuccessSkin","handleKeyDown","e","form","submitButton","handleAddGTNToDocument","jsxs","cn","jsx","InputLabel","BoltOutlined","shouldShowConfidenceScore","AIExtractedIndicator","Label","AntTooltip","HelpIcon","Tooltip","getConfidenceScoreBadgeClass","AIStarIcon","getConfidenceScoreBadgeColor","getConfidenceScoreBadgeFill","getConfidenceScoreBadgeTextColor","NoteAddOutlined","Typography"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TextAreaField.cjs.js","sources":["../../../../src/components/forms/text-area-field/TextAreaField.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport cn from \"classnames\";\nimport { forwardRef, useState } from \"react\";\nimport type { RefObject } from \"react\";\nimport { Tooltip as AntTooltip } from \"antd\";\nimport { useTranslation } from 'react-i18next';\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { HelpIcon } from \"../../icons/HelpIcon\";\nimport { Label } from \"../../data-display/label/Label\";\nimport type { LabelType } from \"../../data-display/label/Label\";\nimport { NoteAddOutlined, BoltOutlined } from \"@mui/icons-material\";\nimport { AIExtractedIndicator } from \"../../icons/AIExtractedIndicator\";\nimport { AIStarIcon } from \"../../icons/AIStarIcon\";\nimport { InputLabel } from \"../shared/InputLabel\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport {\n getConfidenceScoreBadgeClass,\n getConfidenceScoreBadgeColor,\n getConfidenceScoreBadgeFill,\n getConfidenceScoreBadgeTextColor,\n shouldShowConfidenceScore,\n} from \"../../../utils/confidenceScoreUtils\";\n\n/**\n * Confidence score type\n */\nexport type ConfidenceScoreType = \"low\" | \"medium\" | \"high\";\n\nexport type SourceMetaBBox = {\n b: number;\n l: number;\n r: number;\n t: number;\n};\n\nexport type SourceMetaItem = {\n bbox: SourceMetaBBox;\n confidence_score?: number;\n is_primary?: boolean;\n match_score?: number;\n match_type?: string;\n page_height: number;\n page_width: number;\n source_page: number;\n source_text?: string;\n};\n\n/**\n * Risk details interface\n */\nexport interface RiskDetails {\n color?: string;\n description?: string;\n hexBgColor?: string;\n hexBorderColor?: string;\n [key: string]: any;\n}\n\n/**\n * Risk details card component props - generic to allow consumer-specific risk types\n */\nexport interface RiskDetailsCardProps<T = any> {\n riskDetails: T;\n maxWidth?: string;\n showAllRisksSuggestions?: boolean;\n}\n\n/**\n * Props for the TextAreaField component\n */\nexport interface TextAreaFieldProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\" | \"maxLength\"> {\n /** The label text to display above the textarea */\n label?: string;\n /** Placeholder text for the textarea */\n placeholder: string;\n /** Current value of the textarea */\n value?: string | any;\n /** Callback function called when the textarea value changes */\n onChange: (value: string) => void;\n /** Number of visible text lines for the textarea (alias for rows) */\n row?: number;\n /** Error message to display below the textarea */\n errorMessage?: string;\n /** Default value for the textarea */\n defaultValue?: string;\n /** Whether the field is required */\n required?: boolean;\n /** Whether the required indicator shows as conditional (yellow instead of red) */\n isRequiredConditional?: boolean;\n /** Tags/labels to display next to the label */\n tags?: (string | LabelType)[];\n /** Whether the textarea is disabled */\n disabled?: boolean;\n /** Additional CSS classes for the textarea element */\n className?: string;\n /** Ref object for the textarea element */\n inputRef?: RefObject<HTMLTextAreaElement>;\n /** Maximum character length allowed */\n maxLength?: number | null;\n /** Tooltip text to display */\n tooltip?: string;\n /** Whether to preserve original case in the label */\n originalCase?: boolean;\n /** Whether the value was AI extracted */\n isAiExtracted?: boolean;\n /** Confidence percentage shown as a badge */\n confidenceScore?: number;\n /** Confidence classification for badge styling */\n confidenceType?: ConfidenceScoreType;\n /** Optional tooltip content for confidence badge */\n confidenceTooltip?: React.ReactNode;\n /** Source meta for confidence score */\n sourceMeta?: SourceMetaItem[];\n /** Handler fired when confidence score badge is clicked */\n onConfidenceScoreClick?: (sourceMeta: SourceMetaItem[]) => void;\n /** Whether this is a GTN (Global Term Name) field */\n isGTN?: boolean;\n /** GTN field name for document integration */\n gtnName?: any;\n /** Whether to remove border styling */\n noBorder?: boolean;\n /** Unique identifier for the textarea */\n id?: string;\n /** Custom inline styles for the textarea */\n inputStyle?: React.CSSProperties;\n /** Additional CSS classes for the label */\n labelClassName?: string;\n /** Whether this is a live field */\n isLiveField?: boolean;\n /** Callback function called when the textarea loses focus */\n onBlur?: () => void;\n /** Risk details data */\n riskDetails?: RiskDetails;\n /** Whether risk analysis is open */\n isRiskAnalysisOpen?: boolean;\n /** Custom risk details card component */\n RiskDetailsCard?: React.ComponentType<RiskDetailsCardProps<any>>;\n /** Handler for adding GTN to document */\n onAddGTNToDocument?: (keyValuePair: { key: string; value: string }) => void;\n /** Optional extra content in the label row (e.g. actions, badges) */\n labelExtra?: React.ReactNode;\n /** Input surface style: `'modified'` — Warning colors; `'deleted'` — Error colors, text #475467; `'success'` — Success colors, text #101828. */\n inputEmphasis?: \"default\" | \"modified\" | \"deleted\" | \"success\";\n}\n\n/**\n * A customizable textarea field component with label, validation, GTN integration,\n * risk analysis support, and styling support. Features dark mode support,\n * accessibility enhancements, and character count display.\n *\n * @example\n * ```tsx\n * <TextAreaField\n * label=\"Description\"\n * placeholder=\"Enter a description...\"\n * value={description}\n * onChange={(value) => setDescription(value)}\n * required\n * />\n *\n * <TextAreaField\n * label=\"Comments\"\n * placeholder=\"Enter comments...\"\n * value={comments}\n * onChange={(value) => setComments(value)}\n * maxLength={500}\n * isGTN\n * gtnName=\"comments_field\"\n * onAddGTNToDocument={(kv) => handleAddToDocument(kv)}\n * />\n * ```\n */\nexport const TextAreaField = forwardRef<HTMLDivElement, TextAreaFieldProps>(\n (\n {\n label,\n placeholder,\n value,\n onChange,\n row = 4,\n errorMessage,\n defaultValue,\n required,\n isRequiredConditional = false,\n tags = [],\n disabled,\n className,\n inputRef,\n maxLength = undefined,\n tooltip = \"\",\n originalCase = false,\n isAiExtracted = false,\n confidenceScore,\n confidenceType = \"high\",\n confidenceTooltip,\n sourceMeta = [],\n onConfidenceScoreClick,\n isGTN = false,\n gtnName = \"\",\n noBorder = false,\n id,\n inputStyle,\n labelClassName,\n isLiveField = false,\n onBlur,\n riskDetails,\n isRiskAnalysisOpen = false,\n RiskDetailsCard,\n onAddGTNToDocument,\n labelExtra,\n inputEmphasis = \"default\",\n ...textareaProps\n },\n ref\n ) => {\n const { t } = useTranslation();\n const [isHovered, setIsHovered] = useState(false);\n const showRiskSkin = Boolean(isRiskAnalysisOpen && riskDetails?.color);\n const emphasisModifiedSkin = inputEmphasis === \"modified\" && !errorMessage && !showRiskSkin;\n const emphasisDeletedSkin = inputEmphasis === \"deleted\" && !errorMessage && !showRiskSkin;\n const emphasisSuccessSkin = inputEmphasis === \"success\" && !errorMessage && !showRiskSkin;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n const form = (e.target as HTMLTextAreaElement).closest(\"form\");\n if (form) {\n const submitButton = form.querySelector<HTMLButtonElement>('button[type=\"submit\"]');\n if (submitButton) {\n submitButton.click();\n } else {\n form.requestSubmit();\n }\n }\n }\n textareaProps.onKeyDown?.(e);\n };\n\n const handleAddGTNToDocument = () => {\n if (onAddGTNToDocument) {\n const keyValuePair = {\n key: gtnName,\n value: value || \"\",\n };\n onAddGTNToDocument(keyValuePair);\n }\n };\n\n return (\n <div\n ref={ref}\n id={id}\n className={cn(\n \"flex gap-0.5 relative\",\n isHovered && isGTN\n ? \"border rounded-lg border-primary-100 bg-primary-50 p-1\"\n : \"\"\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {isGTN && !isHovered ? (\n <div className=\"w-1 h-1 bg-primary-600 rounded-full animate-blink mt-1.5\" />\n ) : null}\n <div className={cn(\"w-full flex flex-col\")}>\n <label\n htmlFor=\"text\"\n className={`mb-1 text-xs font-medium text-gray-600 dark:text-black-300 inline-flex items-center gap-1 ${\n !originalCase ? \"capitalize\" : \"\"\n } ${labelClassName || \"\"}`}\n >\n <div className=\"grid w-full grid-cols-[minmax(0,1fr)_auto] items-start gap-x-1\">\n <div className=\"inline-flex min-w-0 items-center gap-1 flex-wrap\">\n <InputLabel label={label || \"\"} required={required || false} isRequiredConditional={isRequiredConditional || false} />\n {isLiveField && (\n <BoltOutlined\n sx={{\n fontSize: 16,\n color: \"var(--color-primary-600)\",\n rotate: \"15deg\",\n }}\n />\n )}\n {isAiExtracted && !shouldShowConfidenceScore(confidenceScore) && <AIExtractedIndicator />}\n <Label labels={tags || []} />\n {tooltip && (\n <AntTooltip placement=\"top\" title={tooltip}>\n <div\n className=\"cursor-pointer\"\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n }\n }}\n >\n <HelpIcon className=\"w-icon-sm h-icon-sm\" />\n </div>\n </AntTooltip>\n )}\n {labelExtra}\n </div>\n\n <div className=\"flex items-center gap-1 justify-self-end\">\n {(shouldShowConfidenceScore(confidenceScore) && confidenceType) ? (\n <Tooltip\n placement=\"top-end\"\n title={confidenceTooltip ?? \"\"}\n hideTooltip={confidenceTooltip === undefined || confidenceTooltip === null}\n className=\"cursor-pointer\"\n >\n <div\n className={cn(\n \"inline-flex min-w-[50px] items-center gap-1 rounded-md px-1 py-0.5\",\n getConfidenceScoreBadgeClass(confidenceType)\n )}\n onClick={() => onConfidenceScoreClick?.(sourceMeta)}\n >\n <AIStarIcon\n size={12}\n fill={getConfidenceScoreBadgeColor(confidenceType)}\n fillSecondary={getConfidenceScoreBadgeFill(confidenceType)}\n />\n <span className={cn(\"text-xs font-medium leading-4\", getConfidenceScoreBadgeTextColor(confidenceType))}>\n {confidenceScore}%\n </span>\n </div>\n </Tooltip>\n ) : null}\n {isGTN && isHovered ? (\n <button\n id=\"btn-textarea-field-add-to-document\"\n className=\"cursor-pointer\"\n onClick={handleAddGTNToDocument}\n type=\"button\"\n >\n <AntTooltip placement=\"top\" title={t(\"Add to document\")}>\n <NoteAddOutlined\n className=\"text-primary-600\"\n sx={{ fontSize: 16 }}\n />\n </AntTooltip>\n </button>\n ) : null}\n </div>\n </div>\n </label>\n <textarea\n {...textareaProps}\n onKeyDown={handleKeyDown}\n onBlur={onBlur}\n onChange={(e) => onChange(e.target.value)}\n defaultValue={defaultValue}\n value={value}\n required={required}\n className={cn(\n \"border rounded-lg focus:outline-none focus:ring-0 block w-full py-2.5 px-3 font-inter font-medium text-sm disabled:bg-neutral-50 dark:disabled:!bg-black-800\",\n {\n \"border-red-300\": errorMessage,\n \"border-gray-300 dark:border-black-700\": !errorMessage && !emphasisModifiedSkin && !emphasisDeletedSkin && !emphasisSuccessSkin && !showRiskSkin,\n \"text-neutral-400 dark:text-neutral-500\": disabled && !emphasisDeletedSkin && !emphasisSuccessSkin,\n \"text-neutral-900 dark:text-neutral-50\": !disabled && !emphasisDeletedSkin && !emphasisSuccessSkin,\n \"border-none\": noBorder,\n \"focus:border-none\": noBorder,\n \"focus:border-[var(--color-primary-600)] dark:focus:border-[var(--color-primary-400)] focus:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus:shadow-[0_0_0_1.5px_var(--color-primary-950)] bg-white dark:bg-black-600\": !emphasisModifiedSkin && !emphasisDeletedSkin && !emphasisSuccessSkin && !showRiskSkin && !errorMessage,\n },\n emphasisDeletedSkin && \"border-[var(--Error-200,#FECACA)] bg-[var(--Error-50,#FEF2F2)] !text-[#475467] focus:border-[var(--Error-200,#FECACA)] focus:shadow-[0_0_0_2px_rgba(254,202,202,0.45)] dark:border-[var(--Error-200,#FECACA)] dark:bg-[var(--Error-50,#FEF2F2)] dark:!text-[#475467] disabled:!opacity-100 disabled:!bg-[var(--Error-50,#FEF2F2)]\",\n emphasisModifiedSkin && \"border-[var(--Warning-200,#FEDF89)] bg-[var(--Warning-50,#FFFAEB)] text-neutral-900 dark:text-black-100 focus:border-[var(--Warning-200,#FEDF89)] focus:shadow-[0_0_0_2px_rgba(254,223,137,0.45)] dark:border-[var(--Warning-200,#FEDF89)] dark:bg-[var(--Warning-50,#FFFAEB)] disabled:!opacity-100 disabled:!bg-[var(--Warning-50,#FFFAEB)]\",\n emphasisSuccessSkin && \"border-[var(--Success-200,#BBF7D0)] bg-[var(--Success-50,#F0FDF4)] !text-[#101828] focus:border-[var(--Success-200,#BBF7D0)] focus:shadow-[0_0_0_2px_rgba(187,247,208,0.45)] dark:border-[var(--Success-200,#BBF7D0)] dark:bg-[var(--Success-50,#F0FDF4)] dark:!text-[#101828] disabled:!opacity-100 disabled:!bg-[var(--Success-50,#F0FDF4)]\",\n className,\n showRiskSkin && `!bg-${riskDetails!.color}-50 border-${riskDetails!.color}-300`\n )}\n style={\n showRiskSkin && riskDetails\n ? {\n backgroundColor: riskDetails.hexBgColor || undefined,\n borderColor: riskDetails.hexBorderColor || undefined,\n ...inputStyle,\n }\n : inputStyle\n }\n rows={row}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxLength || undefined}\n id={id}\n ref={inputRef}\n onClick={(e) => e.stopPropagation()}\n autoComplete=\"off\"\n />\n {maxLength ? (\n <Typography\n className=\"mt-0.5 text-right text-neutral-900 dark:text-white\"\n appearance=\"custom\"\n size=\"extra-small\"\n >\n <span\n className={`${\n value?.length >= maxLength\n ? \"text-error-500\"\n : value?.length > maxLength - Math.min(50, maxLength / 5)\n ? \"text-warning-500 dark:text-warning-300\"\n : \"\"\n }`}\n >\n {value?.length || 0}{\" \"}\n </span>\n / {maxLength}\n </Typography>\n ) : null}\n\n {errorMessage && (\n <Typography\n className=\"text-error-500 mt-1\"\n appearance=\"custom\"\n size=\"extra-small\"\n variant=\"medium\"\n >\n {errorMessage}\n </Typography>\n )}\n </div>\n\n {isHovered && isRiskAnalysisOpen && riskDetails && RiskDetailsCard && (\n <div\n role=\"tooltip\"\n tabIndex={0}\n className=\"absolute left-0 right-0 top-[95%] mt-1 z-50 bg-white dark:bg-black-600 rounded-xl\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.preventDefault()}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n setIsHovered(false);\n }\n }}\n >\n <RiskDetailsCard riskDetails={riskDetails} />\n </div>\n )}\n </div>\n );\n }\n);\n\nTextAreaField.displayName = \"TextAreaField\";\n\n"],"names":["TextAreaField","forwardRef","label","placeholder","value","onChange","row","errorMessage","defaultValue","required","isRequiredConditional","tags","disabled","className","inputRef","maxLength","tooltip","originalCase","isAiExtracted","confidenceScore","confidenceType","confidenceTooltip","sourceMeta","onConfidenceScoreClick","isGTN","gtnName","noBorder","id","inputStyle","labelClassName","isLiveField","onBlur","riskDetails","isRiskAnalysisOpen","RiskDetailsCard","onAddGTNToDocument","labelExtra","inputEmphasis","textareaProps","ref","t","useTranslation","isHovered","setIsHovered","useState","showRiskSkin","emphasisModifiedSkin","emphasisDeletedSkin","emphasisSuccessSkin","handleKeyDown","e","form","submitButton","handleAddGTNToDocument","jsxs","cn","jsx","InputLabel","BoltOutlined","shouldShowConfidenceScore","AIExtractedIndicator","Label","AntTooltip","HelpIcon","Tooltip","getConfidenceScoreBadgeClass","AIStarIcon","getConfidenceScoreBadgeColor","getConfidenceScoreBadgeFill","getConfidenceScoreBadgeTextColor","NoteAddOutlined","Typography"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { jsxs as o, jsx as r } from "react/jsx-runtime";
|
|
2
2
|
import m from "../../../_virtual/index.es.js";
|
|
3
|
-
import { forwardRef as oe, useState as
|
|
3
|
+
import { forwardRef as oe, useState as te } from "react";
|
|
4
4
|
import { Tooltip as D } from "antd";
|
|
5
|
-
import { useTranslation as
|
|
5
|
+
import { useTranslation as ae } from "react-i18next";
|
|
6
6
|
import { Typography as I } from "../../data-display/typography/Typography.es.js";
|
|
7
7
|
import { HelpIcon as le } from "../../icons/HelpIcon.es.js";
|
|
8
|
-
import { Label as
|
|
9
|
-
import { BoltOutlined as
|
|
10
|
-
import { AIExtractedIndicator as
|
|
11
|
-
import { AIStarIcon as
|
|
8
|
+
import { Label as ne } from "../../data-display/label/Label.es.js";
|
|
9
|
+
import { BoltOutlined as de, NoteAddOutlined as ie } from "@mui/icons-material";
|
|
10
|
+
import { AIExtractedIndicator as se } from "../../icons/AIExtractedIndicator.es.js";
|
|
11
|
+
import { AIStarIcon as ce } from "../../icons/AIStarIcon.es.js";
|
|
12
12
|
import { InputLabel as me } from "../shared/InputLabel.es.js";
|
|
13
13
|
import ue from "../../tooltip/Tooltip.es.js";
|
|
14
14
|
import { shouldShowConfidenceScore as z, getConfidenceScoreBadgeFill as fe, getConfidenceScoreBadgeColor as be, getConfidenceScoreBadgeTextColor as pe, getConfidenceScoreBadgeClass as xe } from "../../../utils/confidenceScoreUtils.es.js";
|
|
@@ -16,10 +16,10 @@ const ge = oe(
|
|
|
16
16
|
({
|
|
17
17
|
label: K,
|
|
18
18
|
placeholder: W,
|
|
19
|
-
value:
|
|
19
|
+
value: d,
|
|
20
20
|
onChange: $,
|
|
21
21
|
row: j = 4,
|
|
22
|
-
errorMessage:
|
|
22
|
+
errorMessage: t,
|
|
23
23
|
defaultValue: q,
|
|
24
24
|
required: k,
|
|
25
25
|
isRequiredConditional: H = !1,
|
|
@@ -27,7 +27,7 @@ const ge = oe(
|
|
|
27
27
|
disabled: f,
|
|
28
28
|
className: V,
|
|
29
29
|
inputRef: O,
|
|
30
|
-
maxLength:
|
|
30
|
+
maxLength: n = void 0,
|
|
31
31
|
tooltip: y = "",
|
|
32
32
|
originalCase: R = !1,
|
|
33
33
|
isAiExtracted: J = !1,
|
|
@@ -44,7 +44,7 @@ const ge = oe(
|
|
|
44
44
|
labelClassName: X,
|
|
45
45
|
isLiveField: Y = !1,
|
|
46
46
|
onBlur: Z,
|
|
47
|
-
riskDetails:
|
|
47
|
+
riskDetails: a,
|
|
48
48
|
isRiskAnalysisOpen: S = !1,
|
|
49
49
|
RiskDetailsCard: _,
|
|
50
50
|
onAddGTNToDocument: N,
|
|
@@ -52,7 +52,7 @@ const ge = oe(
|
|
|
52
52
|
inputEmphasis: g = "default",
|
|
53
53
|
...B
|
|
54
54
|
}, G) => {
|
|
55
|
-
const { t: M } =
|
|
55
|
+
const { t: M } = ae(), [u, h] = te(!1), l = !!(S && a?.color), v = g === "modified" && !t && !l, s = g === "deleted" && !t && !l, c = g === "success" && !t && !l, ee = (e) => {
|
|
56
56
|
if (e.key === "Enter" && !e.shiftKey) {
|
|
57
57
|
e.preventDefault();
|
|
58
58
|
const F = e.target.closest("form");
|
|
@@ -65,7 +65,7 @@ const ge = oe(
|
|
|
65
65
|
}, re = () => {
|
|
66
66
|
N && N({
|
|
67
67
|
key: U,
|
|
68
|
-
value:
|
|
68
|
+
value: d || ""
|
|
69
69
|
});
|
|
70
70
|
};
|
|
71
71
|
return /* @__PURE__ */ o(
|
|
@@ -91,7 +91,7 @@ const ge = oe(
|
|
|
91
91
|
/* @__PURE__ */ o("div", { className: "inline-flex min-w-0 items-center gap-1 flex-wrap", children: [
|
|
92
92
|
/* @__PURE__ */ r(me, { label: K || "", required: k || !1, isRequiredConditional: H || !1 }),
|
|
93
93
|
Y && /* @__PURE__ */ r(
|
|
94
|
-
|
|
94
|
+
de,
|
|
95
95
|
{
|
|
96
96
|
sx: {
|
|
97
97
|
fontSize: 16,
|
|
@@ -100,8 +100,8 @@ const ge = oe(
|
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
),
|
|
103
|
-
J && !z(b) && /* @__PURE__ */ r(
|
|
104
|
-
/* @__PURE__ */ r(
|
|
103
|
+
J && !z(b) && /* @__PURE__ */ r(se, {}),
|
|
104
|
+
/* @__PURE__ */ r(ne, { labels: P || [] }),
|
|
105
105
|
y && /* @__PURE__ */ r(D, { placement: "top", title: y, children: /* @__PURE__ */ r(
|
|
106
106
|
"div",
|
|
107
107
|
{
|
|
@@ -134,7 +134,7 @@ const ge = oe(
|
|
|
134
134
|
onClick: () => T?.(Q),
|
|
135
135
|
children: [
|
|
136
136
|
/* @__PURE__ */ r(
|
|
137
|
-
|
|
137
|
+
ce,
|
|
138
138
|
{
|
|
139
139
|
size: 12,
|
|
140
140
|
fill: be(i),
|
|
@@ -178,42 +178,41 @@ const ge = oe(
|
|
|
178
178
|
onBlur: Z,
|
|
179
179
|
onChange: (e) => $(e.target.value),
|
|
180
180
|
defaultValue: q,
|
|
181
|
-
value:
|
|
181
|
+
value: d,
|
|
182
182
|
required: k,
|
|
183
183
|
className: m(
|
|
184
|
-
"border rounded-lg focus:outline-none focus:ring-0 block w-full py-2.5 px-3 font-inter font-medium text-sm disabled:bg-neutral-50 dark:disabled:!bg-black-800
|
|
184
|
+
"border rounded-lg focus:outline-none focus:ring-0 block w-full py-2.5 px-3 font-inter font-medium text-sm disabled:bg-neutral-50 dark:disabled:!bg-black-800",
|
|
185
185
|
{
|
|
186
|
-
"border-red-300":
|
|
187
|
-
"border-gray-300 dark:border-black-700": !
|
|
188
|
-
"text-neutral-400 dark:text-neutral-500": f && !
|
|
189
|
-
"text-neutral-900 dark:text-neutral-50": !f && !
|
|
186
|
+
"border-red-300": t,
|
|
187
|
+
"border-gray-300 dark:border-black-700": !t && !v && !s && !c && !l,
|
|
188
|
+
"text-neutral-400 dark:text-neutral-500": f && !s && !c,
|
|
189
|
+
"text-neutral-900 dark:text-neutral-50": !f && !s && !c,
|
|
190
190
|
"border-none": w,
|
|
191
191
|
"focus:border-none": w,
|
|
192
|
-
"
|
|
193
|
-
"focus:border-[var(--color-primary-600)] dark:focus:border-[var(--color-primary-400)] focus:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus:shadow-[0_0_0_1.5px_var(--color-primary-950)] bg-white dark:bg-black-600": !v && !c && !s && !l && !a
|
|
192
|
+
"focus:border-[var(--color-primary-600)] dark:focus:border-[var(--color-primary-400)] focus:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus:shadow-[0_0_0_1.5px_var(--color-primary-950)] bg-white dark:bg-black-600": !v && !s && !c && !l && !t
|
|
194
193
|
},
|
|
195
|
-
|
|
194
|
+
s && "border-[var(--Error-200,#FECACA)] bg-[var(--Error-50,#FEF2F2)] !text-[#475467] focus:border-[var(--Error-200,#FECACA)] focus:shadow-[0_0_0_2px_rgba(254,202,202,0.45)] dark:border-[var(--Error-200,#FECACA)] dark:bg-[var(--Error-50,#FEF2F2)] dark:!text-[#475467] disabled:!opacity-100 disabled:!bg-[var(--Error-50,#FEF2F2)]",
|
|
196
195
|
v && "border-[var(--Warning-200,#FEDF89)] bg-[var(--Warning-50,#FFFAEB)] text-neutral-900 dark:text-black-100 focus:border-[var(--Warning-200,#FEDF89)] focus:shadow-[0_0_0_2px_rgba(254,223,137,0.45)] dark:border-[var(--Warning-200,#FEDF89)] dark:bg-[var(--Warning-50,#FFFAEB)] disabled:!opacity-100 disabled:!bg-[var(--Warning-50,#FFFAEB)]",
|
|
197
|
-
|
|
196
|
+
c && "border-[var(--Success-200,#BBF7D0)] bg-[var(--Success-50,#F0FDF4)] !text-[#101828] focus:border-[var(--Success-200,#BBF7D0)] focus:shadow-[0_0_0_2px_rgba(187,247,208,0.45)] dark:border-[var(--Success-200,#BBF7D0)] dark:bg-[var(--Success-50,#F0FDF4)] dark:!text-[#101828] disabled:!opacity-100 disabled:!bg-[var(--Success-50,#F0FDF4)]",
|
|
198
197
|
V,
|
|
199
|
-
l && `!bg-${
|
|
198
|
+
l && `!bg-${a.color}-50 border-${a.color}-300`
|
|
200
199
|
),
|
|
201
|
-
style: l &&
|
|
202
|
-
backgroundColor:
|
|
203
|
-
borderColor:
|
|
200
|
+
style: l && a ? {
|
|
201
|
+
backgroundColor: a.hexBgColor || void 0,
|
|
202
|
+
borderColor: a.hexBorderColor || void 0,
|
|
204
203
|
...E
|
|
205
204
|
} : E,
|
|
206
205
|
rows: j,
|
|
207
206
|
placeholder: W,
|
|
208
207
|
disabled: f,
|
|
209
|
-
maxLength:
|
|
208
|
+
maxLength: n || void 0,
|
|
210
209
|
id: C,
|
|
211
210
|
ref: O,
|
|
212
211
|
onClick: (e) => e.stopPropagation(),
|
|
213
212
|
autoComplete: "off"
|
|
214
213
|
}
|
|
215
214
|
),
|
|
216
|
-
|
|
215
|
+
n ? /* @__PURE__ */ o(
|
|
217
216
|
I,
|
|
218
217
|
{
|
|
219
218
|
className: "mt-0.5 text-right text-neutral-900 dark:text-white",
|
|
@@ -223,30 +222,30 @@ const ge = oe(
|
|
|
223
222
|
/* @__PURE__ */ o(
|
|
224
223
|
"span",
|
|
225
224
|
{
|
|
226
|
-
className: `${
|
|
225
|
+
className: `${d?.length >= n ? "text-error-500" : d?.length > n - Math.min(50, n / 5) ? "text-warning-500 dark:text-warning-300" : ""}`,
|
|
227
226
|
children: [
|
|
228
|
-
|
|
227
|
+
d?.length || 0,
|
|
229
228
|
" "
|
|
230
229
|
]
|
|
231
230
|
}
|
|
232
231
|
),
|
|
233
232
|
"/ ",
|
|
234
|
-
|
|
233
|
+
n
|
|
235
234
|
]
|
|
236
235
|
}
|
|
237
236
|
) : null,
|
|
238
|
-
|
|
237
|
+
t && /* @__PURE__ */ r(
|
|
239
238
|
I,
|
|
240
239
|
{
|
|
241
240
|
className: "text-error-500 mt-1",
|
|
242
241
|
appearance: "custom",
|
|
243
242
|
size: "extra-small",
|
|
244
243
|
variant: "medium",
|
|
245
|
-
children:
|
|
244
|
+
children: t
|
|
246
245
|
}
|
|
247
246
|
)
|
|
248
247
|
] }),
|
|
249
|
-
u && S &&
|
|
248
|
+
u && S && a && _ && /* @__PURE__ */ r(
|
|
250
249
|
"div",
|
|
251
250
|
{
|
|
252
251
|
role: "tooltip",
|
|
@@ -257,7 +256,7 @@ const ge = oe(
|
|
|
257
256
|
onKeyDown: (e) => {
|
|
258
257
|
e.key === "Escape" && h(!1);
|
|
259
258
|
},
|
|
260
|
-
children: /* @__PURE__ */ r(_, { riskDetails:
|
|
259
|
+
children: /* @__PURE__ */ r(_, { riskDetails: a })
|
|
261
260
|
}
|
|
262
261
|
)
|
|
263
262
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextAreaField.es.js","sources":["../../../../src/components/forms/text-area-field/TextAreaField.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport cn from \"classnames\";\nimport { forwardRef, useState } from \"react\";\nimport type { RefObject } from \"react\";\nimport { Tooltip as AntTooltip } from \"antd\";\nimport { useTranslation } from 'react-i18next';\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { HelpIcon } from \"../../icons/HelpIcon\";\nimport { Label } from \"../../data-display/label/Label\";\nimport type { LabelType } from \"../../data-display/label/Label\";\nimport { NoteAddOutlined, BoltOutlined } from \"@mui/icons-material\";\nimport { AIExtractedIndicator } from \"../../icons/AIExtractedIndicator\";\nimport { AIStarIcon } from \"../../icons/AIStarIcon\";\nimport { InputLabel } from \"../shared/InputLabel\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport {\n getConfidenceScoreBadgeClass,\n getConfidenceScoreBadgeColor,\n getConfidenceScoreBadgeFill,\n getConfidenceScoreBadgeTextColor,\n shouldShowConfidenceScore,\n} from \"../../../utils/confidenceScoreUtils\";\n\n/**\n * Confidence score type\n */\nexport type ConfidenceScoreType = \"low\" | \"medium\" | \"high\";\n\nexport type SourceMetaBBox = {\n b: number;\n l: number;\n r: number;\n t: number;\n};\n\nexport type SourceMetaItem = {\n bbox: SourceMetaBBox;\n confidence_score?: number;\n is_primary?: boolean;\n match_score?: number;\n match_type?: string;\n page_height: number;\n page_width: number;\n source_page: number;\n source_text?: string;\n};\n\n/**\n * Risk details interface\n */\nexport interface RiskDetails {\n color?: string;\n description?: string;\n hexBgColor?: string;\n hexBorderColor?: string;\n [key: string]: any;\n}\n\n/**\n * Risk details card component props - generic to allow consumer-specific risk types\n */\nexport interface RiskDetailsCardProps<T = any> {\n riskDetails: T;\n maxWidth?: string;\n showAllRisksSuggestions?: boolean;\n}\n\n/**\n * Props for the TextAreaField component\n */\nexport interface TextAreaFieldProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\" | \"maxLength\"> {\n /** The label text to display above the textarea */\n label?: string;\n /** Placeholder text for the textarea */\n placeholder: string;\n /** Current value of the textarea */\n value?: string | any;\n /** Callback function called when the textarea value changes */\n onChange: (value: string) => void;\n /** Number of visible text lines for the textarea (alias for rows) */\n row?: number;\n /** Error message to display below the textarea */\n errorMessage?: string;\n /** Default value for the textarea */\n defaultValue?: string;\n /** Whether the field is required */\n required?: boolean;\n /** Whether the required indicator shows as conditional (yellow instead of red) */\n isRequiredConditional?: boolean;\n /** Tags/labels to display next to the label */\n tags?: (string | LabelType)[];\n /** Whether the textarea is disabled */\n disabled?: boolean;\n /** Additional CSS classes for the textarea element */\n className?: string;\n /** Ref object for the textarea element */\n inputRef?: RefObject<HTMLTextAreaElement>;\n /** Maximum character length allowed */\n maxLength?: number | null;\n /** Tooltip text to display */\n tooltip?: string;\n /** Whether to preserve original case in the label */\n originalCase?: boolean;\n /** Whether the value was AI extracted */\n isAiExtracted?: boolean;\n /** Confidence percentage shown as a badge */\n confidenceScore?: number;\n /** Confidence classification for badge styling */\n confidenceType?: ConfidenceScoreType;\n /** Optional tooltip content for confidence badge */\n confidenceTooltip?: React.ReactNode;\n /** Source meta for confidence score */\n sourceMeta?: SourceMetaItem[];\n /** Handler fired when confidence score badge is clicked */\n onConfidenceScoreClick?: (sourceMeta: SourceMetaItem[]) => void;\n /** Whether this is a GTN (Global Term Name) field */\n isGTN?: boolean;\n /** GTN field name for document integration */\n gtnName?: any;\n /** Whether to remove border styling */\n noBorder?: boolean;\n /** Unique identifier for the textarea */\n id?: string;\n /** Custom inline styles for the textarea */\n inputStyle?: React.CSSProperties;\n /** Additional CSS classes for the label */\n labelClassName?: string;\n /** Whether this is a live field */\n isLiveField?: boolean;\n /** Callback function called when the textarea loses focus */\n onBlur?: () => void;\n /** Risk details data */\n riskDetails?: RiskDetails;\n /** Whether risk analysis is open */\n isRiskAnalysisOpen?: boolean;\n /** Custom risk details card component */\n RiskDetailsCard?: React.ComponentType<RiskDetailsCardProps<any>>;\n /** Handler for adding GTN to document */\n onAddGTNToDocument?: (keyValuePair: { key: string; value: string }) => void;\n /** Optional extra content in the label row (e.g. actions, badges) */\n labelExtra?: React.ReactNode;\n /** Input surface style: `'modified'` — Warning colors; `'deleted'` — Error colors, text #475467; `'success'` — Success colors, text #101828. */\n inputEmphasis?: \"default\" | \"modified\" | \"deleted\" | \"success\";\n}\n\n/**\n * A customizable textarea field component with label, validation, GTN integration,\n * risk analysis support, and styling support. Features dark mode support,\n * accessibility enhancements, and character count display.\n *\n * @example\n * ```tsx\n * <TextAreaField\n * label=\"Description\"\n * placeholder=\"Enter a description...\"\n * value={description}\n * onChange={(value) => setDescription(value)}\n * required\n * />\n *\n * <TextAreaField\n * label=\"Comments\"\n * placeholder=\"Enter comments...\"\n * value={comments}\n * onChange={(value) => setComments(value)}\n * maxLength={500}\n * isGTN\n * gtnName=\"comments_field\"\n * onAddGTNToDocument={(kv) => handleAddToDocument(kv)}\n * />\n * ```\n */\nexport const TextAreaField = forwardRef<HTMLDivElement, TextAreaFieldProps>(\n (\n {\n label,\n placeholder,\n value,\n onChange,\n row = 4,\n errorMessage,\n defaultValue,\n required,\n isRequiredConditional = false,\n tags = [],\n disabled,\n className,\n inputRef,\n maxLength = undefined,\n tooltip = \"\",\n originalCase = false,\n isAiExtracted = false,\n confidenceScore,\n confidenceType = \"high\",\n confidenceTooltip,\n sourceMeta = [],\n onConfidenceScoreClick,\n isGTN = false,\n gtnName = \"\",\n noBorder = false,\n id,\n inputStyle,\n labelClassName,\n isLiveField = false,\n onBlur,\n riskDetails,\n isRiskAnalysisOpen = false,\n RiskDetailsCard,\n onAddGTNToDocument,\n labelExtra,\n inputEmphasis = \"default\",\n ...textareaProps\n },\n ref\n ) => {\n const { t } = useTranslation();\n const [isHovered, setIsHovered] = useState(false);\n const showRiskSkin = Boolean(isRiskAnalysisOpen && riskDetails?.color);\n const emphasisModifiedSkin = inputEmphasis === \"modified\" && !errorMessage && !showRiskSkin;\n const emphasisDeletedSkin = inputEmphasis === \"deleted\" && !errorMessage && !showRiskSkin;\n const emphasisSuccessSkin = inputEmphasis === \"success\" && !errorMessage && !showRiskSkin;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n const form = (e.target as HTMLTextAreaElement).closest(\"form\");\n if (form) {\n const submitButton = form.querySelector<HTMLButtonElement>('button[type=\"submit\"]');\n if (submitButton) {\n submitButton.click();\n } else {\n form.requestSubmit();\n }\n }\n }\n textareaProps.onKeyDown?.(e);\n };\n\n const handleAddGTNToDocument = () => {\n if (onAddGTNToDocument) {\n const keyValuePair = {\n key: gtnName,\n value: value || \"\",\n };\n onAddGTNToDocument(keyValuePair);\n }\n };\n\n return (\n <div\n ref={ref}\n id={id}\n className={cn(\n \"flex gap-0.5 relative\",\n isHovered && isGTN\n ? \"border rounded-lg border-primary-100 bg-primary-50 p-1\"\n : \"\"\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {isGTN && !isHovered ? (\n <div className=\"w-1 h-1 bg-primary-600 rounded-full animate-blink mt-1.5\" />\n ) : null}\n <div className={cn(\"w-full flex flex-col\")}>\n <label\n htmlFor=\"text\"\n className={`mb-1 text-xs font-medium text-gray-600 dark:text-black-300 inline-flex items-center gap-1 ${\n !originalCase ? \"capitalize\" : \"\"\n } ${labelClassName || \"\"}`}\n >\n <div className=\"grid w-full grid-cols-[minmax(0,1fr)_auto] items-start gap-x-1\">\n <div className=\"inline-flex min-w-0 items-center gap-1 flex-wrap\">\n <InputLabel label={label || \"\"} required={required || false} isRequiredConditional={isRequiredConditional || false} />\n {isLiveField && (\n <BoltOutlined\n sx={{\n fontSize: 16,\n color: \"var(--color-primary-600)\",\n rotate: \"15deg\",\n }}\n />\n )}\n {isAiExtracted && !shouldShowConfidenceScore(confidenceScore) && <AIExtractedIndicator />}\n <Label labels={tags || []} />\n {tooltip && (\n <AntTooltip placement=\"top\" title={tooltip}>\n <div\n className=\"cursor-pointer\"\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n }\n }}\n >\n <HelpIcon className=\"w-icon-sm h-icon-sm\" />\n </div>\n </AntTooltip>\n )}\n {labelExtra}\n </div>\n\n <div className=\"flex items-center gap-1 justify-self-end\">\n {(shouldShowConfidenceScore(confidenceScore) && confidenceType) ? (\n <Tooltip\n placement=\"top-end\"\n title={confidenceTooltip ?? \"\"}\n hideTooltip={confidenceTooltip === undefined || confidenceTooltip === null}\n className=\"cursor-pointer\"\n >\n <div\n className={cn(\n \"inline-flex min-w-[50px] items-center gap-1 rounded-md px-1 py-0.5\",\n getConfidenceScoreBadgeClass(confidenceType)\n )}\n onClick={() => onConfidenceScoreClick?.(sourceMeta)}\n >\n <AIStarIcon\n size={12}\n fill={getConfidenceScoreBadgeColor(confidenceType)}\n fillSecondary={getConfidenceScoreBadgeFill(confidenceType)}\n />\n <span className={cn(\"text-xs font-medium leading-4\", getConfidenceScoreBadgeTextColor(confidenceType))}>\n {confidenceScore}%\n </span>\n </div>\n </Tooltip>\n ) : null}\n {isGTN && isHovered ? (\n <button\n id=\"btn-textarea-field-add-to-document\"\n className=\"cursor-pointer\"\n onClick={handleAddGTNToDocument}\n type=\"button\"\n >\n <AntTooltip placement=\"top\" title={t(\"Add to document\")}>\n <NoteAddOutlined\n className=\"text-primary-600\"\n sx={{ fontSize: 16 }}\n />\n </AntTooltip>\n </button>\n ) : null}\n </div>\n </div>\n </label>\n <textarea\n {...textareaProps}\n onKeyDown={handleKeyDown}\n onBlur={onBlur}\n onChange={(e) => onChange(e.target.value)}\n defaultValue={defaultValue}\n value={value}\n required={required}\n className={cn(\n \"border rounded-lg focus:outline-none focus:ring-0 block w-full py-2.5 px-3 font-inter font-medium text-sm disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400\",\n {\n \"border-red-300\": errorMessage,\n \"border-gray-300 dark:border-black-700\": !errorMessage && !emphasisModifiedSkin && !emphasisDeletedSkin && !emphasisSuccessSkin && !showRiskSkin,\n \"text-neutral-400 dark:text-neutral-500\": disabled && !emphasisDeletedSkin && !emphasisSuccessSkin,\n \"text-neutral-900 dark:text-neutral-50\": !disabled && !emphasisDeletedSkin && !emphasisSuccessSkin,\n \"border-none\": noBorder,\n \"focus:border-none\": noBorder,\n \"placeholder:text-neutral-400 dark:placeholder:text-black-300\": true,\n \"focus:border-[var(--color-primary-600)] dark:focus:border-[var(--color-primary-400)] focus:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus:shadow-[0_0_0_1.5px_var(--color-primary-950)] bg-white dark:bg-black-600\": !emphasisModifiedSkin && !emphasisDeletedSkin && !emphasisSuccessSkin && !showRiskSkin && !errorMessage,\n },\n emphasisDeletedSkin && \"border-[var(--Error-200,#FECACA)] bg-[var(--Error-50,#FEF2F2)] !text-[#475467] focus:border-[var(--Error-200,#FECACA)] focus:shadow-[0_0_0_2px_rgba(254,202,202,0.45)] dark:border-[var(--Error-200,#FECACA)] dark:bg-[var(--Error-50,#FEF2F2)] dark:!text-[#475467] disabled:!opacity-100 disabled:!bg-[var(--Error-50,#FEF2F2)]\",\n emphasisModifiedSkin && \"border-[var(--Warning-200,#FEDF89)] bg-[var(--Warning-50,#FFFAEB)] text-neutral-900 dark:text-black-100 focus:border-[var(--Warning-200,#FEDF89)] focus:shadow-[0_0_0_2px_rgba(254,223,137,0.45)] dark:border-[var(--Warning-200,#FEDF89)] dark:bg-[var(--Warning-50,#FFFAEB)] disabled:!opacity-100 disabled:!bg-[var(--Warning-50,#FFFAEB)]\",\n emphasisSuccessSkin && \"border-[var(--Success-200,#BBF7D0)] bg-[var(--Success-50,#F0FDF4)] !text-[#101828] focus:border-[var(--Success-200,#BBF7D0)] focus:shadow-[0_0_0_2px_rgba(187,247,208,0.45)] dark:border-[var(--Success-200,#BBF7D0)] dark:bg-[var(--Success-50,#F0FDF4)] dark:!text-[#101828] disabled:!opacity-100 disabled:!bg-[var(--Success-50,#F0FDF4)]\",\n className,\n showRiskSkin && `!bg-${riskDetails!.color}-50 border-${riskDetails!.color}-300`\n )}\n style={\n showRiskSkin && riskDetails\n ? {\n backgroundColor: riskDetails.hexBgColor || undefined,\n borderColor: riskDetails.hexBorderColor || undefined,\n ...inputStyle,\n }\n : inputStyle\n }\n rows={row}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxLength || undefined}\n id={id}\n ref={inputRef}\n onClick={(e) => e.stopPropagation()}\n autoComplete=\"off\"\n />\n {maxLength ? (\n <Typography\n className=\"mt-0.5 text-right text-neutral-900 dark:text-white\"\n appearance=\"custom\"\n size=\"extra-small\"\n >\n <span\n className={`${\n value?.length >= maxLength\n ? \"text-error-500\"\n : value?.length > maxLength - Math.min(50, maxLength / 5)\n ? \"text-warning-500 dark:text-warning-300\"\n : \"\"\n }`}\n >\n {value?.length || 0}{\" \"}\n </span>\n / {maxLength}\n </Typography>\n ) : null}\n\n {errorMessage && (\n <Typography\n className=\"text-error-500 mt-1\"\n appearance=\"custom\"\n size=\"extra-small\"\n variant=\"medium\"\n >\n {errorMessage}\n </Typography>\n )}\n </div>\n\n {isHovered && isRiskAnalysisOpen && riskDetails && RiskDetailsCard && (\n <div\n role=\"tooltip\"\n tabIndex={0}\n className=\"absolute left-0 right-0 top-[95%] mt-1 z-50 bg-white dark:bg-black-600 rounded-xl\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.preventDefault()}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n setIsHovered(false);\n }\n }}\n >\n <RiskDetailsCard riskDetails={riskDetails} />\n </div>\n )}\n </div>\n );\n }\n);\n\nTextAreaField.displayName = \"TextAreaField\";\n\n"],"names":["TextAreaField","forwardRef","label","placeholder","value","onChange","row","errorMessage","defaultValue","required","isRequiredConditional","tags","disabled","className","inputRef","maxLength","tooltip","originalCase","isAiExtracted","confidenceScore","confidenceType","confidenceTooltip","sourceMeta","onConfidenceScoreClick","isGTN","gtnName","noBorder","id","inputStyle","labelClassName","isLiveField","onBlur","riskDetails","isRiskAnalysisOpen","RiskDetailsCard","onAddGTNToDocument","labelExtra","inputEmphasis","textareaProps","ref","t","useTranslation","isHovered","setIsHovered","useState","showRiskSkin","emphasisModifiedSkin","emphasisDeletedSkin","emphasisSuccessSkin","handleKeyDown","form","submitButton","handleAddGTNToDocument","jsxs","cn","jsx","InputLabel","BoltOutlined","shouldShowConfidenceScore","AIExtractedIndicator","Label","AntTooltip","HelpIcon","Tooltip","getConfidenceScoreBadgeClass","AIStarIcon","getConfidenceScoreBadgeColor","getConfidenceScoreBadgeFill","getConfidenceScoreBadgeTextColor","NoteAddOutlined","Typography"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TextAreaField.es.js","sources":["../../../../src/components/forms/text-area-field/TextAreaField.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport cn from \"classnames\";\nimport { forwardRef, useState } from \"react\";\nimport type { RefObject } from \"react\";\nimport { Tooltip as AntTooltip } from \"antd\";\nimport { useTranslation } from 'react-i18next';\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { HelpIcon } from \"../../icons/HelpIcon\";\nimport { Label } from \"../../data-display/label/Label\";\nimport type { LabelType } from \"../../data-display/label/Label\";\nimport { NoteAddOutlined, BoltOutlined } from \"@mui/icons-material\";\nimport { AIExtractedIndicator } from \"../../icons/AIExtractedIndicator\";\nimport { AIStarIcon } from \"../../icons/AIStarIcon\";\nimport { InputLabel } from \"../shared/InputLabel\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport {\n getConfidenceScoreBadgeClass,\n getConfidenceScoreBadgeColor,\n getConfidenceScoreBadgeFill,\n getConfidenceScoreBadgeTextColor,\n shouldShowConfidenceScore,\n} from \"../../../utils/confidenceScoreUtils\";\n\n/**\n * Confidence score type\n */\nexport type ConfidenceScoreType = \"low\" | \"medium\" | \"high\";\n\nexport type SourceMetaBBox = {\n b: number;\n l: number;\n r: number;\n t: number;\n};\n\nexport type SourceMetaItem = {\n bbox: SourceMetaBBox;\n confidence_score?: number;\n is_primary?: boolean;\n match_score?: number;\n match_type?: string;\n page_height: number;\n page_width: number;\n source_page: number;\n source_text?: string;\n};\n\n/**\n * Risk details interface\n */\nexport interface RiskDetails {\n color?: string;\n description?: string;\n hexBgColor?: string;\n hexBorderColor?: string;\n [key: string]: any;\n}\n\n/**\n * Risk details card component props - generic to allow consumer-specific risk types\n */\nexport interface RiskDetailsCardProps<T = any> {\n riskDetails: T;\n maxWidth?: string;\n showAllRisksSuggestions?: boolean;\n}\n\n/**\n * Props for the TextAreaField component\n */\nexport interface TextAreaFieldProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"onChange\" | \"maxLength\"> {\n /** The label text to display above the textarea */\n label?: string;\n /** Placeholder text for the textarea */\n placeholder: string;\n /** Current value of the textarea */\n value?: string | any;\n /** Callback function called when the textarea value changes */\n onChange: (value: string) => void;\n /** Number of visible text lines for the textarea (alias for rows) */\n row?: number;\n /** Error message to display below the textarea */\n errorMessage?: string;\n /** Default value for the textarea */\n defaultValue?: string;\n /** Whether the field is required */\n required?: boolean;\n /** Whether the required indicator shows as conditional (yellow instead of red) */\n isRequiredConditional?: boolean;\n /** Tags/labels to display next to the label */\n tags?: (string | LabelType)[];\n /** Whether the textarea is disabled */\n disabled?: boolean;\n /** Additional CSS classes for the textarea element */\n className?: string;\n /** Ref object for the textarea element */\n inputRef?: RefObject<HTMLTextAreaElement>;\n /** Maximum character length allowed */\n maxLength?: number | null;\n /** Tooltip text to display */\n tooltip?: string;\n /** Whether to preserve original case in the label */\n originalCase?: boolean;\n /** Whether the value was AI extracted */\n isAiExtracted?: boolean;\n /** Confidence percentage shown as a badge */\n confidenceScore?: number;\n /** Confidence classification for badge styling */\n confidenceType?: ConfidenceScoreType;\n /** Optional tooltip content for confidence badge */\n confidenceTooltip?: React.ReactNode;\n /** Source meta for confidence score */\n sourceMeta?: SourceMetaItem[];\n /** Handler fired when confidence score badge is clicked */\n onConfidenceScoreClick?: (sourceMeta: SourceMetaItem[]) => void;\n /** Whether this is a GTN (Global Term Name) field */\n isGTN?: boolean;\n /** GTN field name for document integration */\n gtnName?: any;\n /** Whether to remove border styling */\n noBorder?: boolean;\n /** Unique identifier for the textarea */\n id?: string;\n /** Custom inline styles for the textarea */\n inputStyle?: React.CSSProperties;\n /** Additional CSS classes for the label */\n labelClassName?: string;\n /** Whether this is a live field */\n isLiveField?: boolean;\n /** Callback function called when the textarea loses focus */\n onBlur?: () => void;\n /** Risk details data */\n riskDetails?: RiskDetails;\n /** Whether risk analysis is open */\n isRiskAnalysisOpen?: boolean;\n /** Custom risk details card component */\n RiskDetailsCard?: React.ComponentType<RiskDetailsCardProps<any>>;\n /** Handler for adding GTN to document */\n onAddGTNToDocument?: (keyValuePair: { key: string; value: string }) => void;\n /** Optional extra content in the label row (e.g. actions, badges) */\n labelExtra?: React.ReactNode;\n /** Input surface style: `'modified'` — Warning colors; `'deleted'` — Error colors, text #475467; `'success'` — Success colors, text #101828. */\n inputEmphasis?: \"default\" | \"modified\" | \"deleted\" | \"success\";\n}\n\n/**\n * A customizable textarea field component with label, validation, GTN integration,\n * risk analysis support, and styling support. Features dark mode support,\n * accessibility enhancements, and character count display.\n *\n * @example\n * ```tsx\n * <TextAreaField\n * label=\"Description\"\n * placeholder=\"Enter a description...\"\n * value={description}\n * onChange={(value) => setDescription(value)}\n * required\n * />\n *\n * <TextAreaField\n * label=\"Comments\"\n * placeholder=\"Enter comments...\"\n * value={comments}\n * onChange={(value) => setComments(value)}\n * maxLength={500}\n * isGTN\n * gtnName=\"comments_field\"\n * onAddGTNToDocument={(kv) => handleAddToDocument(kv)}\n * />\n * ```\n */\nexport const TextAreaField = forwardRef<HTMLDivElement, TextAreaFieldProps>(\n (\n {\n label,\n placeholder,\n value,\n onChange,\n row = 4,\n errorMessage,\n defaultValue,\n required,\n isRequiredConditional = false,\n tags = [],\n disabled,\n className,\n inputRef,\n maxLength = undefined,\n tooltip = \"\",\n originalCase = false,\n isAiExtracted = false,\n confidenceScore,\n confidenceType = \"high\",\n confidenceTooltip,\n sourceMeta = [],\n onConfidenceScoreClick,\n isGTN = false,\n gtnName = \"\",\n noBorder = false,\n id,\n inputStyle,\n labelClassName,\n isLiveField = false,\n onBlur,\n riskDetails,\n isRiskAnalysisOpen = false,\n RiskDetailsCard,\n onAddGTNToDocument,\n labelExtra,\n inputEmphasis = \"default\",\n ...textareaProps\n },\n ref\n ) => {\n const { t } = useTranslation();\n const [isHovered, setIsHovered] = useState(false);\n const showRiskSkin = Boolean(isRiskAnalysisOpen && riskDetails?.color);\n const emphasisModifiedSkin = inputEmphasis === \"modified\" && !errorMessage && !showRiskSkin;\n const emphasisDeletedSkin = inputEmphasis === \"deleted\" && !errorMessage && !showRiskSkin;\n const emphasisSuccessSkin = inputEmphasis === \"success\" && !errorMessage && !showRiskSkin;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n const form = (e.target as HTMLTextAreaElement).closest(\"form\");\n if (form) {\n const submitButton = form.querySelector<HTMLButtonElement>('button[type=\"submit\"]');\n if (submitButton) {\n submitButton.click();\n } else {\n form.requestSubmit();\n }\n }\n }\n textareaProps.onKeyDown?.(e);\n };\n\n const handleAddGTNToDocument = () => {\n if (onAddGTNToDocument) {\n const keyValuePair = {\n key: gtnName,\n value: value || \"\",\n };\n onAddGTNToDocument(keyValuePair);\n }\n };\n\n return (\n <div\n ref={ref}\n id={id}\n className={cn(\n \"flex gap-0.5 relative\",\n isHovered && isGTN\n ? \"border rounded-lg border-primary-100 bg-primary-50 p-1\"\n : \"\"\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {isGTN && !isHovered ? (\n <div className=\"w-1 h-1 bg-primary-600 rounded-full animate-blink mt-1.5\" />\n ) : null}\n <div className={cn(\"w-full flex flex-col\")}>\n <label\n htmlFor=\"text\"\n className={`mb-1 text-xs font-medium text-gray-600 dark:text-black-300 inline-flex items-center gap-1 ${\n !originalCase ? \"capitalize\" : \"\"\n } ${labelClassName || \"\"}`}\n >\n <div className=\"grid w-full grid-cols-[minmax(0,1fr)_auto] items-start gap-x-1\">\n <div className=\"inline-flex min-w-0 items-center gap-1 flex-wrap\">\n <InputLabel label={label || \"\"} required={required || false} isRequiredConditional={isRequiredConditional || false} />\n {isLiveField && (\n <BoltOutlined\n sx={{\n fontSize: 16,\n color: \"var(--color-primary-600)\",\n rotate: \"15deg\",\n }}\n />\n )}\n {isAiExtracted && !shouldShowConfidenceScore(confidenceScore) && <AIExtractedIndicator />}\n <Label labels={tags || []} />\n {tooltip && (\n <AntTooltip placement=\"top\" title={tooltip}>\n <div\n className=\"cursor-pointer\"\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n }\n }}\n >\n <HelpIcon className=\"w-icon-sm h-icon-sm\" />\n </div>\n </AntTooltip>\n )}\n {labelExtra}\n </div>\n\n <div className=\"flex items-center gap-1 justify-self-end\">\n {(shouldShowConfidenceScore(confidenceScore) && confidenceType) ? (\n <Tooltip\n placement=\"top-end\"\n title={confidenceTooltip ?? \"\"}\n hideTooltip={confidenceTooltip === undefined || confidenceTooltip === null}\n className=\"cursor-pointer\"\n >\n <div\n className={cn(\n \"inline-flex min-w-[50px] items-center gap-1 rounded-md px-1 py-0.5\",\n getConfidenceScoreBadgeClass(confidenceType)\n )}\n onClick={() => onConfidenceScoreClick?.(sourceMeta)}\n >\n <AIStarIcon\n size={12}\n fill={getConfidenceScoreBadgeColor(confidenceType)}\n fillSecondary={getConfidenceScoreBadgeFill(confidenceType)}\n />\n <span className={cn(\"text-xs font-medium leading-4\", getConfidenceScoreBadgeTextColor(confidenceType))}>\n {confidenceScore}%\n </span>\n </div>\n </Tooltip>\n ) : null}\n {isGTN && isHovered ? (\n <button\n id=\"btn-textarea-field-add-to-document\"\n className=\"cursor-pointer\"\n onClick={handleAddGTNToDocument}\n type=\"button\"\n >\n <AntTooltip placement=\"top\" title={t(\"Add to document\")}>\n <NoteAddOutlined\n className=\"text-primary-600\"\n sx={{ fontSize: 16 }}\n />\n </AntTooltip>\n </button>\n ) : null}\n </div>\n </div>\n </label>\n <textarea\n {...textareaProps}\n onKeyDown={handleKeyDown}\n onBlur={onBlur}\n onChange={(e) => onChange(e.target.value)}\n defaultValue={defaultValue}\n value={value}\n required={required}\n className={cn(\n \"border rounded-lg focus:outline-none focus:ring-0 block w-full py-2.5 px-3 font-inter font-medium text-sm disabled:bg-neutral-50 dark:disabled:!bg-black-800\",\n {\n \"border-red-300\": errorMessage,\n \"border-gray-300 dark:border-black-700\": !errorMessage && !emphasisModifiedSkin && !emphasisDeletedSkin && !emphasisSuccessSkin && !showRiskSkin,\n \"text-neutral-400 dark:text-neutral-500\": disabled && !emphasisDeletedSkin && !emphasisSuccessSkin,\n \"text-neutral-900 dark:text-neutral-50\": !disabled && !emphasisDeletedSkin && !emphasisSuccessSkin,\n \"border-none\": noBorder,\n \"focus:border-none\": noBorder,\n \"focus:border-[var(--color-primary-600)] dark:focus:border-[var(--color-primary-400)] focus:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus:shadow-[0_0_0_1.5px_var(--color-primary-950)] bg-white dark:bg-black-600\": !emphasisModifiedSkin && !emphasisDeletedSkin && !emphasisSuccessSkin && !showRiskSkin && !errorMessage,\n },\n emphasisDeletedSkin && \"border-[var(--Error-200,#FECACA)] bg-[var(--Error-50,#FEF2F2)] !text-[#475467] focus:border-[var(--Error-200,#FECACA)] focus:shadow-[0_0_0_2px_rgba(254,202,202,0.45)] dark:border-[var(--Error-200,#FECACA)] dark:bg-[var(--Error-50,#FEF2F2)] dark:!text-[#475467] disabled:!opacity-100 disabled:!bg-[var(--Error-50,#FEF2F2)]\",\n emphasisModifiedSkin && \"border-[var(--Warning-200,#FEDF89)] bg-[var(--Warning-50,#FFFAEB)] text-neutral-900 dark:text-black-100 focus:border-[var(--Warning-200,#FEDF89)] focus:shadow-[0_0_0_2px_rgba(254,223,137,0.45)] dark:border-[var(--Warning-200,#FEDF89)] dark:bg-[var(--Warning-50,#FFFAEB)] disabled:!opacity-100 disabled:!bg-[var(--Warning-50,#FFFAEB)]\",\n emphasisSuccessSkin && \"border-[var(--Success-200,#BBF7D0)] bg-[var(--Success-50,#F0FDF4)] !text-[#101828] focus:border-[var(--Success-200,#BBF7D0)] focus:shadow-[0_0_0_2px_rgba(187,247,208,0.45)] dark:border-[var(--Success-200,#BBF7D0)] dark:bg-[var(--Success-50,#F0FDF4)] dark:!text-[#101828] disabled:!opacity-100 disabled:!bg-[var(--Success-50,#F0FDF4)]\",\n className,\n showRiskSkin && `!bg-${riskDetails!.color}-50 border-${riskDetails!.color}-300`\n )}\n style={\n showRiskSkin && riskDetails\n ? {\n backgroundColor: riskDetails.hexBgColor || undefined,\n borderColor: riskDetails.hexBorderColor || undefined,\n ...inputStyle,\n }\n : inputStyle\n }\n rows={row}\n placeholder={placeholder}\n disabled={disabled}\n maxLength={maxLength || undefined}\n id={id}\n ref={inputRef}\n onClick={(e) => e.stopPropagation()}\n autoComplete=\"off\"\n />\n {maxLength ? (\n <Typography\n className=\"mt-0.5 text-right text-neutral-900 dark:text-white\"\n appearance=\"custom\"\n size=\"extra-small\"\n >\n <span\n className={`${\n value?.length >= maxLength\n ? \"text-error-500\"\n : value?.length > maxLength - Math.min(50, maxLength / 5)\n ? \"text-warning-500 dark:text-warning-300\"\n : \"\"\n }`}\n >\n {value?.length || 0}{\" \"}\n </span>\n / {maxLength}\n </Typography>\n ) : null}\n\n {errorMessage && (\n <Typography\n className=\"text-error-500 mt-1\"\n appearance=\"custom\"\n size=\"extra-small\"\n variant=\"medium\"\n >\n {errorMessage}\n </Typography>\n )}\n </div>\n\n {isHovered && isRiskAnalysisOpen && riskDetails && RiskDetailsCard && (\n <div\n role=\"tooltip\"\n tabIndex={0}\n className=\"absolute left-0 right-0 top-[95%] mt-1 z-50 bg-white dark:bg-black-600 rounded-xl\"\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.preventDefault()}\n onKeyDown={(e) => {\n if (e.key === \"Escape\") {\n setIsHovered(false);\n }\n }}\n >\n <RiskDetailsCard riskDetails={riskDetails} />\n </div>\n )}\n </div>\n );\n }\n);\n\nTextAreaField.displayName = \"TextAreaField\";\n\n"],"names":["TextAreaField","forwardRef","label","placeholder","value","onChange","row","errorMessage","defaultValue","required","isRequiredConditional","tags","disabled","className","inputRef","maxLength","tooltip","originalCase","isAiExtracted","confidenceScore","confidenceType","confidenceTooltip","sourceMeta","onConfidenceScoreClick","isGTN","gtnName","noBorder","id","inputStyle","labelClassName","isLiveField","onBlur","riskDetails","isRiskAnalysisOpen","RiskDetailsCard","onAddGTNToDocument","labelExtra","inputEmphasis","textareaProps","ref","t","useTranslation","isHovered","setIsHovered","useState","showRiskSkin","emphasisModifiedSkin","emphasisDeletedSkin","emphasisSuccessSkin","handleKeyDown","form","submitButton","handleAddGTNToDocument","jsxs","cn","jsx","InputLabel","BoltOutlined","shouldShowConfidenceScore","AIExtractedIndicator","Label","AntTooltip","HelpIcon","Tooltip","getConfidenceScoreBadgeClass","AIStarIcon","getConfidenceScoreBadgeColor","getConfidenceScoreBadgeFill","getConfidenceScoreBadgeTextColor","NoteAddOutlined","Typography"],"mappings":"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"}
|