@lax-wp/design-system 0.13.33 → 0.13.35

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.
Files changed (169) hide show
  1. package/dist/components/button/Button.cjs.js +5 -5
  2. package/dist/components/button/Button.cjs.js.map +1 -1
  3. package/dist/components/button/Button.es.js +18 -18
  4. package/dist/components/button/Button.es.js.map +1 -1
  5. package/dist/components/button/IconButton.cjs.js +1 -1
  6. package/dist/components/button/IconButton.cjs.js.map +1 -1
  7. package/dist/components/button/IconButton.es.js +8 -8
  8. package/dist/components/button/IconButton.es.js.map +1 -1
  9. package/dist/components/buttons/option-button/OptionButton.cjs.js +1 -1
  10. package/dist/components/buttons/option-button/OptionButton.cjs.js.map +1 -1
  11. package/dist/components/buttons/option-button/OptionButton.es.js +1 -1
  12. package/dist/components/buttons/option-button/OptionButton.es.js.map +1 -1
  13. package/dist/components/data-display/comparison/components/Header.cjs.js +1 -1
  14. package/dist/components/data-display/comparison/components/Header.cjs.js.map +1 -1
  15. package/dist/components/data-display/comparison/components/Header.es.js +13 -13
  16. package/dist/components/data-display/comparison/components/Header.es.js.map +1 -1
  17. package/dist/components/data-display/infinite-table/body/cell/CheckboxCell.cjs.js +1 -1
  18. package/dist/components/data-display/infinite-table/body/cell/CheckboxCell.cjs.js.map +1 -1
  19. package/dist/components/data-display/infinite-table/body/cell/CheckboxCell.es.js +23 -23
  20. package/dist/components/data-display/infinite-table/body/cell/CheckboxCell.es.js.map +1 -1
  21. package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js +1 -1
  22. package/dist/components/data-display/infinite-table/body/cell/DataCell.cjs.js.map +1 -1
  23. package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js +1 -1
  24. package/dist/components/data-display/infinite-table/body/cell/DataCell.es.js.map +1 -1
  25. package/dist/components/data-display/infinite-table/body/rows/index.cjs.js +1 -1
  26. package/dist/components/data-display/infinite-table/body/rows/index.cjs.js.map +1 -1
  27. package/dist/components/data-display/infinite-table/body/rows/index.es.js +104 -101
  28. package/dist/components/data-display/infinite-table/body/rows/index.es.js.map +1 -1
  29. package/dist/components/data-display/infinite-table/constants.cjs.js +1 -1
  30. package/dist/components/data-display/infinite-table/constants.cjs.js.map +1 -1
  31. package/dist/components/data-display/infinite-table/constants.d.ts +6 -0
  32. package/dist/components/data-display/infinite-table/constants.es.js +17 -16
  33. package/dist/components/data-display/infinite-table/constants.es.js.map +1 -1
  34. package/dist/components/data-display/infinite-table/head/CheckAll.cjs.js +1 -1
  35. package/dist/components/data-display/infinite-table/head/CheckAll.cjs.js.map +1 -1
  36. package/dist/components/data-display/infinite-table/head/CheckAll.es.js +4 -4
  37. package/dist/components/data-display/infinite-table/head/CheckAll.es.js.map +1 -1
  38. package/dist/components/data-display/infinite-table/head/index.cjs.js +1 -1
  39. package/dist/components/data-display/infinite-table/head/index.cjs.js.map +1 -1
  40. package/dist/components/data-display/infinite-table/head/index.es.js +5 -5
  41. package/dist/components/data-display/infinite-table/head/index.es.js.map +1 -1
  42. package/dist/components/data-display/infinite-table/index.cjs.js +1 -1
  43. package/dist/components/data-display/infinite-table/index.cjs.js.map +1 -1
  44. package/dist/components/data-display/infinite-table/index.es.js +188 -187
  45. package/dist/components/data-display/infinite-table/index.es.js.map +1 -1
  46. package/dist/components/data-display/infinite-table/useRowHeight.cjs.js +2 -0
  47. package/dist/components/data-display/infinite-table/useRowHeight.cjs.js.map +1 -0
  48. package/dist/components/data-display/infinite-table/useRowHeight.d.ts +15 -0
  49. package/dist/components/data-display/infinite-table/useRowHeight.es.js +24 -0
  50. package/dist/components/data-display/infinite-table/useRowHeight.es.js.map +1 -0
  51. package/dist/components/data-display/tag/Tag.cjs.js +1 -1
  52. package/dist/components/data-display/tag/Tag.cjs.js.map +1 -1
  53. package/dist/components/data-display/tag/Tag.es.js +11 -9
  54. package/dist/components/data-display/tag/Tag.es.js.map +1 -1
  55. package/dist/components/floating-bar/FloatingBar.cjs.js +1 -1
  56. package/dist/components/floating-bar/FloatingBar.cjs.js.map +1 -1
  57. package/dist/components/floating-bar/FloatingBar.es.js +9 -9
  58. package/dist/components/floating-bar/FloatingBar.es.js.map +1 -1
  59. package/dist/components/forms/base-input-field/BaseInputField.cjs.js +2 -2
  60. package/dist/components/forms/base-input-field/BaseInputField.cjs.js.map +1 -1
  61. package/dist/components/forms/base-input-field/BaseInputField.es.js +40 -42
  62. package/dist/components/forms/base-input-field/BaseInputField.es.js.map +1 -1
  63. package/dist/components/forms/creatable-select/CreatableSelect.cjs.js +1 -1
  64. package/dist/components/forms/creatable-select/CreatableSelect.cjs.js.map +1 -1
  65. package/dist/components/forms/creatable-select/CreatableSelect.es.js +14 -15
  66. package/dist/components/forms/creatable-select/CreatableSelect.es.js.map +1 -1
  67. package/dist/components/forms/currency-input/CurrencyInputField.cjs.js +1 -1
  68. package/dist/components/forms/currency-input/CurrencyInputField.cjs.js.map +1 -1
  69. package/dist/components/forms/currency-input/CurrencyInputField.es.js +57 -65
  70. package/dist/components/forms/currency-input/CurrencyInputField.es.js.map +1 -1
  71. package/dist/components/forms/date-time-field/DateTimeField.cjs.js +1 -1
  72. package/dist/components/forms/date-time-field/DateTimeField.cjs.js.map +1 -1
  73. package/dist/components/forms/date-time-field/DateTimeField.es.js +33 -33
  74. package/dist/components/forms/date-time-field/DateTimeField.es.js.map +1 -1
  75. package/dist/components/forms/debounce-input/DebounceInputField.cjs.js +1 -1
  76. package/dist/components/forms/debounce-input/DebounceInputField.cjs.js.map +1 -1
  77. package/dist/components/forms/debounce-input/DebounceInputField.es.js +2 -2
  78. package/dist/components/forms/debounce-input/DebounceInputField.es.js.map +1 -1
  79. package/dist/components/forms/dynamic-data-input/DynamicDataInput.cjs.js +1 -1
  80. package/dist/components/forms/dynamic-data-input/DynamicDataInput.cjs.js.map +1 -1
  81. package/dist/components/forms/dynamic-data-input/DynamicDataInput.es.js +7 -7
  82. package/dist/components/forms/dynamic-data-input/DynamicDataInput.es.js.map +1 -1
  83. package/dist/components/forms/dynamic-data-input/DynamicDataInputField.cjs.js +1 -1
  84. package/dist/components/forms/dynamic-data-input/DynamicDataInputField.cjs.js.map +1 -1
  85. package/dist/components/forms/dynamic-data-input/DynamicDataInputField.es.js +17 -19
  86. package/dist/components/forms/dynamic-data-input/DynamicDataInputField.es.js.map +1 -1
  87. package/dist/components/forms/field-options/Item.cjs.js +1 -1
  88. package/dist/components/forms/field-options/Item.cjs.js.map +1 -1
  89. package/dist/components/forms/field-options/Item.es.js +5 -5
  90. package/dist/components/forms/field-options/Item.es.js.map +1 -1
  91. package/dist/components/forms/formula-input/FormulaInput.cjs.js +1 -1
  92. package/dist/components/forms/formula-input/FormulaInput.cjs.js.map +1 -1
  93. package/dist/components/forms/formula-input/FormulaInput.es.js +10 -10
  94. package/dist/components/forms/formula-input/FormulaInput.es.js.map +1 -1
  95. package/dist/components/forms/icon-picker/IconPicker.cjs.js +1 -1
  96. package/dist/components/forms/icon-picker/IconPicker.cjs.js.map +1 -1
  97. package/dist/components/forms/icon-picker/IconPicker.es.js +42 -57
  98. package/dist/components/forms/icon-picker/IconPicker.es.js.map +1 -1
  99. package/dist/components/forms/input-field/InputField.cjs.js.map +1 -1
  100. package/dist/components/forms/input-field/InputField.es.js.map +1 -1
  101. package/dist/components/forms/master-data-input/MasterDataInputField.cjs.js +1 -1
  102. package/dist/components/forms/master-data-input/MasterDataInputField.cjs.js.map +1 -1
  103. package/dist/components/forms/master-data-input/MasterDataInputField.es.js +54 -60
  104. package/dist/components/forms/master-data-input/MasterDataInputField.es.js.map +1 -1
  105. package/dist/components/forms/md-input/RichMarkdownInput.cjs.js +3 -3
  106. package/dist/components/forms/md-input/RichMarkdownInput.cjs.js.map +1 -1
  107. package/dist/components/forms/md-input/RichMarkdownInput.es.js +63 -63
  108. package/dist/components/forms/md-input/RichMarkdownInput.es.js.map +1 -1
  109. package/dist/components/forms/number-input-field/NumberInputField.cjs.js +1 -1
  110. package/dist/components/forms/number-input-field/NumberInputField.cjs.js.map +1 -1
  111. package/dist/components/forms/number-input-field/NumberInputField.es.js +5 -5
  112. package/dist/components/forms/number-input-field/NumberInputField.es.js.map +1 -1
  113. package/dist/components/forms/percentage-input/PercentageInputField.cjs.js +2 -2
  114. package/dist/components/forms/percentage-input/PercentageInputField.cjs.js.map +1 -1
  115. package/dist/components/forms/percentage-input/PercentageInputField.es.js +20 -20
  116. package/dist/components/forms/percentage-input/PercentageInputField.es.js.map +1 -1
  117. package/dist/components/forms/search-bar/SearchBar.cjs.js +1 -1
  118. package/dist/components/forms/search-bar/SearchBar.cjs.js.map +1 -1
  119. package/dist/components/forms/search-bar/SearchBar.es.js +16 -16
  120. package/dist/components/forms/search-bar/SearchBar.es.js.map +1 -1
  121. package/dist/components/forms/select-field/SelectField.cjs.js +2 -2
  122. package/dist/components/forms/select-field/SelectField.cjs.js.map +1 -1
  123. package/dist/components/forms/select-field/SelectField.d.ts +4 -0
  124. package/dist/components/forms/select-field/SelectField.es.js +202 -203
  125. package/dist/components/forms/select-field/SelectField.es.js.map +1 -1
  126. package/dist/components/forms/text-area-field/TextAreaField.cjs.js +1 -1
  127. package/dist/components/forms/text-area-field/TextAreaField.cjs.js.map +1 -1
  128. package/dist/components/forms/text-area-field/TextAreaField.es.js +14 -14
  129. package/dist/components/forms/text-area-field/TextAreaField.es.js.map +1 -1
  130. package/dist/components/forms/toggle/Toggle.cjs.js +1 -1
  131. package/dist/components/forms/toggle/Toggle.cjs.js.map +1 -1
  132. package/dist/components/forms/toggle/Toggle.es.js +65 -59
  133. package/dist/components/forms/toggle/Toggle.es.js.map +1 -1
  134. package/dist/components/navigation/accordion/Accordion.cjs.js +1 -1
  135. package/dist/components/navigation/accordion/Accordion.cjs.js.map +1 -1
  136. package/dist/components/navigation/accordion/Accordion.es.js +5 -5
  137. package/dist/components/navigation/accordion/Accordion.es.js.map +1 -1
  138. package/dist/components/navigation/stepper/Stepper.cjs.js +1 -1
  139. package/dist/components/navigation/stepper/Stepper.cjs.js.map +1 -1
  140. package/dist/components/navigation/stepper/Stepper.es.js +1 -1
  141. package/dist/components/navigation/stepper/Stepper.es.js.map +1 -1
  142. package/dist/components/navigation/tabs/TabOptions.cjs.js +1 -1
  143. package/dist/components/navigation/tabs/TabOptions.cjs.js.map +1 -1
  144. package/dist/components/navigation/tabs/TabOptions.es.js +15 -15
  145. package/dist/components/navigation/tabs/TabOptions.es.js.map +1 -1
  146. package/dist/components/navigation/tabs/TabSwitch.cjs.js +1 -1
  147. package/dist/components/navigation/tabs/TabSwitch.cjs.js.map +1 -1
  148. package/dist/components/navigation/tabs/TabSwitch.es.js +7 -7
  149. package/dist/components/navigation/tabs/TabSwitch.es.js.map +1 -1
  150. package/dist/components/navigation/tabs/Tabs.cjs.js +1 -1
  151. package/dist/components/navigation/tabs/Tabs.cjs.js.map +1 -1
  152. package/dist/components/navigation/tabs/Tabs.es.js +1 -1
  153. package/dist/components/navigation/tabs/Tabs.es.js.map +1 -1
  154. package/dist/components/tooltip/Tooltip.cjs.js +1 -1
  155. package/dist/components/tooltip/Tooltip.cjs.js.map +1 -1
  156. package/dist/components/tooltip/Tooltip.es.js +19 -19
  157. package/dist/components/tooltip/Tooltip.es.js.map +1 -1
  158. package/dist/components/user-avatar/UserAvatar.cjs.js +1 -1
  159. package/dist/components/user-avatar/UserAvatar.cjs.js.map +1 -1
  160. package/dist/components/user-avatar/UserAvatar.d.ts +1 -1
  161. package/dist/components/user-avatar/UserAvatar.es.js +40 -38
  162. package/dist/components/user-avatar/UserAvatar.es.js.map +1 -1
  163. package/dist/components/user-avatar/constants.cjs.js +1 -1
  164. package/dist/components/user-avatar/constants.cjs.js.map +1 -1
  165. package/dist/components/user-avatar/constants.d.ts +1 -0
  166. package/dist/components/user-avatar/constants.es.js +10 -9
  167. package/dist/components/user-avatar/constants.es.js.map +1 -1
  168. package/dist/design-system.css +1 -1
  169. package/package.json +2 -3
@@ -1 +1 @@
1
- {"version":3,"file":"CurrencyInputField.es.js","sources":["../../../../src/components/forms/currency-input/CurrencyInputField.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport cn from \"classnames\";\nimport { forwardRef, useEffect, useState } from \"react\";\nimport { Dropdown, Tooltip as AntTooltip } from \"antd\";\nimport { useTranslation } from 'react-i18next';\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { Label } from \"../../data-display/label/Label\";\nimport type { LabelType } from \"../../data-display/label/Label\";\nimport { CURRENCIES, CURRENCY_SYMBOLS } from \"./currency.constant\";\nimport { NoteAddOutlined, BoltOutlined } from \"@mui/icons-material\";\nimport { AIExtractedIndicator } from \"../../icons/AIExtractedIndicator\";\nimport { AIStarIcon } from \"../../icons/AIStarIcon\";\nimport { HelpIcon } from \"../../icons/HelpIcon\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport {\n getConfidenceScoreBadgeClass,\n getConfidenceScoreBadgeColor,\n getConfidenceScoreBadgeFill,\n getConfidenceScoreBadgeTextColor,\n shouldShowConfidenceScore,\n} from \"../../../utils/confidenceScoreUtils\";\nimport { SearchBar } from \"../search-bar/SearchBar\";\nimport { OptionButton } from \"../../buttons/option-button/OptionButton\";\nimport { getFlagComponent } from \"../../../utils/countryFlags\";\nimport { InputLabel } from \"../shared/InputLabel\";\nimport { formatCurrency as formatCurrencyUtils } from \"../../../utils/formatters\";\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 for risk analysis integration\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 CurrencyInputField component\n */\nexport interface CurrencyInputFieldProps {\n /** Unique identifier for the currency input */\n id: string;\n /** Label text to display above the input */\n label?: string;\n /** Current value of the input (string for compatibility) */\n value: string;\n /** Callback function called when value changes */\n onChange: (data: any, currencyCode?: string) => void;\n /** Error message to display below the input */\n errorMessage?: string;\n /** Default value for the input */\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 /** Additional CSS classes for the wrapper */\n className?: string;\n /** Whether to preserve original case in the label */\n originalCase?: boolean;\n /** Tooltip text for the help icon */\n tooltip?: string;\n /** Whether to use simple mode (inline label style) */\n simpleMode?: boolean;\n /** Additional CSS classes for the input field */\n inputFieldClassName?: string;\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 allow multi-currency selection with dropdown */\n allowMultiCurrency?: boolean;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Current currency code */\n currencyCode?: string;\n /** Inline styles for the input element */\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 input loses focus */\n onBlur?: () => void;\n /** Whether the input should auto-focus */\n autoFocus?: boolean;\n /** Whether recording is active (for pilot context) */\n isRecording?: boolean;\n /** Whether playback is active (for pilot context) */\n isPlaying?: boolean;\n /** Handler for adding GTN to document */\n onAddGTNToDocument?: (keyValuePair: { key: string; value: string }) => 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 /** 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 highly customizable currency input component with label, validation, and styling support.\n * Features currency selection, formatting, validation, GTN integration, risk analysis support,\n * and comprehensive prop support for various use cases.\n *\n * @example\n * ```tsx\n * <CurrencyInputField\n * id=\"price\"\n * label=\"Price\"\n * value={price}\n * onChange={(value, currency) => setPrice(value)}\n * currencyCode=\"USD\"\n * allowMultiCurrency\n * required\n * />\n * ```\n */\nexport const CurrencyInputField = forwardRef<\n HTMLInputElement,\n CurrencyInputFieldProps\n>(\n (\n {\n id,\n label,\n value,\n onChange,\n errorMessage,\n defaultValue,\n required = false,\n isRequiredConditional = false,\n tags,\n className,\n originalCase = false,\n tooltip,\n simpleMode = false,\n inputFieldClassName = \"\",\n isAiExtracted = false,\n confidenceScore,\n confidenceType = \"high\",\n confidenceTooltip,\n sourceMeta = [],\n onConfidenceScoreClick,\n isGTN = false,\n gtnName = null,\n allowMultiCurrency = false,\n placeholder,\n disabled = false,\n currencyCode = \"USD\",\n inputStyle,\n labelClassName,\n isLiveField = false,\n onBlur: onBlurProp,\n autoFocus = false,\n isRecording = false,\n isPlaying = false,\n onAddGTNToDocument,\n riskDetails,\n isRiskAnalysisOpen = false,\n RiskDetailsCard,\n labelExtra,\n inputEmphasis = \"default\",\n ...props\n },\n ref\n ) => {\n const { t } = useTranslation();\n const emphasisModifiedSkin = inputEmphasis === \"modified\" && !errorMessage && !(isRiskAnalysisOpen && riskDetails?.color);\n const emphasisDeletedSkin = inputEmphasis === \"deleted\" && !errorMessage && !(isRiskAnalysisOpen && riskDetails?.color);\n const emphasisSuccessSkin = inputEmphasis === \"success\" && !errorMessage && !(isRiskAnalysisOpen && riskDetails?.color);\n const [isFocused, setIsFocused] = useState(false);\n const [filteredCurrencyOptions, setFilteredCurrencyOptions] = useState<\n { label: React.ReactNode; key: string }[]\n >([]);\n const [searchKeyForCurrency, setSearchKeyForCurrency] = useState(\"\");\n const [selectedCurrency, setSelectedCurrency] = useState<string>(\n currencyCode ? currencyCode : \"USD\"\n );\n const [isHovered, setIsHovered] = useState(false);\n\n const handleAddGTNToDocument = (_value: string) => {\n if (onAddGTNToDocument) {\n const keyValuePair = {\n key: gtnName,\n value: formatCurrencyUtils(_value, selectedCurrency),\n };\n onAddGTNToDocument(keyValuePair);\n }\n };\n\n const formatCurrency = (targetValue: any): string => {\n if (targetValue === null || targetValue === undefined) return \"\";\n\n const number = Number(targetValue);\n if (isNaN(number)) return targetValue;\n\n return number?.toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n };\n\n const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const _value = e.target.value;\n const numericValue =\n _value === \"\" || _value === null || _value === undefined\n ? 0\n : Number(_value);\n onChange(numericValue, selectedCurrency);\n const element = document.getElementById(id);\n if (element) {\n element.setAttribute(\n \"data-selected-value\",\n JSON.stringify({\n value: numericValue,\n currency_code: selectedCurrency,\n })\n );\n }\n if (element && (isRecording || isPlaying)) {\n const pilotEvent = new CustomEvent(\"pilot-change\", {\n bubbles: true,\n detail: {\n selector: `#${id}`,\n value: {\n value: numericValue,\n currency_code: selectedCurrency,\n },\n type: \"change\",\n },\n });\n element.dispatchEvent(pilotEvent);\n }\n };\n\n const onFocus = () => {\n setIsFocused(true);\n };\n\n const onBlur = () => {\n setIsFocused(false);\n if (value === null || value === undefined || value === \"\") {\n handleOnChange({\n target: { value: \"0.00\" },\n } as React.ChangeEvent<HTMLInputElement>);\n }\n onBlurProp?.();\n };\n\n const getClassName = (): string => {\n const baseClasses =\n \"pl-11 border h-[32px] text-sm block w-full p-2.5 font-inter font-medium focus:outline-none focus:ring-0\";\n\n if (errorMessage) {\n return cn(baseClasses, \"rounded-md border-red-300 bg-white dark:bg-black-600\", inputFieldClassName);\n }\n if (isRiskAnalysisOpen && riskDetails?.color) {\n return cn(baseClasses, `rounded-md border-${riskDetails.color}-300 bg-${riskDetails.color}-50`, \"text-neutral-900 dark:text-black-200 disabled:bg-neutral-50 dark:disabled:!bg-black-800\", inputFieldClassName);\n }\n if (emphasisDeletedSkin) {\n return cn(baseClasses, \"rounded-lg border border-solid 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)]\", inputFieldClassName);\n }\n if (emphasisModifiedSkin) {\n return cn(baseClasses, \"rounded-lg border border-solid 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)]\", inputFieldClassName);\n }\n if (emphasisSuccessSkin) {\n return cn(baseClasses, \"rounded-lg border border-solid 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)]\", inputFieldClassName);\n }\n return cn(baseClasses, \"rounded-lg border-gray-300 dark:border-black-600 bg-white dark:bg-black-600 text-neutral-900 dark:text-black-200 disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400 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)]\", inputFieldClassName);\n };\n\n useEffect(() => {\n if (currencyCode) {\n setSelectedCurrency(currencyCode);\n }\n }, [currencyCode]);\n\n useEffect(() => {\n if (selectedCurrency) {\n const numericValue =\n value === \"\" || value === null || value === undefined\n ? 0\n : Number(value);\n if (currencyCode !== selectedCurrency) {\n onChange(numericValue, selectedCurrency);\n }\n const element = document.getElementById(id);\n if (element) {\n element.setAttribute(\n \"data-selected-value\",\n JSON.stringify({\n value: numericValue,\n currency_code: selectedCurrency,\n })\n );\n if (isRecording || isPlaying) {\n const pilotEvent = new CustomEvent(\"pilot-change\", {\n bubbles: true,\n detail: {\n selector: `#${id}`,\n value: {\n value: numericValue,\n currency_code: selectedCurrency,\n },\n type: \"change\",\n },\n });\n element.dispatchEvent(pilotEvent);\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedCurrency]);\n\n useEffect(() => {\n const currencyOptions = CURRENCIES.filter((item) =>\n (item.value + \" - \" + item.label)\n .toLowerCase()\n .includes(searchKeyForCurrency.toLowerCase())\n ).map((item) => ({\n label: (\n <OptionButton\n text={`${item.value} - ${item.label}`}\n icon={getFlagComponent(item.value)}\n showTick={selectedCurrency === item.value}\n onClick={() => setSelectedCurrency(item.value)}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: item.value,\n }));\n\n setFilteredCurrencyOptions(currencyOptions);\n }, [searchKeyForCurrency, selectedCurrency]);\n\n useEffect(() => {\n setSearchKeyForCurrency(\"\");\n }, [selectedCurrency]);\n\n // Simple mode rendering\n if (simpleMode) {\n return (\n <label\n id={id}\n className={`mb-1 text-xs font-medium text-gray-600 h-full inline-flex items-center gap-1 ${\n !originalCase ? \"capitalize\" : \"\"\n } ${labelClassName || \"\"}`}\n >\n <span className=\"absolute inset-y-0 left-1 top-0.5 flex items-center pl-3\">\n {\"$\"}\n </span>\n <input\n {...props}\n ref={ref}\n type={isFocused ? \"number\" : \"text\"}\n required={required}\n className={cn(inputFieldClassName, \"pl-8 h-[32px]\")}\n onChange={handleOnChange}\n min={0}\n onFocus={onFocus}\n onBlur={onBlur}\n value={!isFocused ? formatCurrency(value) : value}\n {...(defaultValue && !value\n ? {\n defaultValue: !isFocused\n ? formatCurrency(defaultValue)\n : defaultValue,\n }\n : {})}\n id={id || label}\n autoFocus={autoFocus}\n />\n </label>\n );\n }\n\n // Full mode rendering\n return (\n <div\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\", className)}>\n <label\n htmlFor=\"text\"\n className={`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${\n !originalCase ? \"uppercase\" : \"\"\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 <Tooltip placement=\"top\" title={tooltip}>\n <div className=\"cursor-pointer\">\n <HelpIcon />\n </div>\n </Tooltip>\n )}\n {labelExtra}\n </div>\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 && onAddGTNToDocument ? (\n <button\n id=\"btn-currency-input-add-to-document\"\n className=\"cursor-pointer\"\n onClick={() => handleAddGTNToDocument(formatCurrency(value))}\n type=\"button\"\n >\n <AntTooltip placement=\"top\" title={t(\"Add to document\")}>\n <NoteAddOutlined\n className=\"text-primary-600\"\n sx={{\n fontSize: 16\n }}\n />\n </AntTooltip>\n </button>\n ) : null}\n </div>\n </div>\n </label>\n <label className=\"relative block\">\n <span className=\"absolute inset-y-0 left-1 flex items-center pl-3 text-neutral-900 dark:text-white\">\n {CURRENCY_SYMBOLS[selectedCurrency]}\n </span>\n\n <input\n {...props}\n ref={ref}\n placeholder={placeholder}\n type={isFocused ? \"number\" : \"text\"}\n required={required}\n disabled={disabled}\n className={getClassName()}\n onChange={handleOnChange}\n min={0}\n onFocus={onFocus}\n onBlur={onBlur}\n value={!isFocused ? formatCurrency(value) : value}\n defaultValue={\n !isFocused ? formatCurrency(defaultValue) : defaultValue\n }\n id={id || label}\n style={inputStyle}\n autoComplete=\"off\"\n autoFocus={autoFocus}\n />\n <span\n className={`absolute inset-y-0 right-2 flex items-center z-[1000px] h-full cursor-pointer dark:text-black-200 ${\n allowMultiCurrency ? \"cursor-pointer\" : \"\"\n }`}\n >\n {allowMultiCurrency ? (\n <Dropdown\n menu={{\n items: [\n ...filteredCurrencyOptions,\n ],\n }}\n trigger={[\"click\"]}\n overlayClassName=\"row-option-cell\"\n placement=\"bottomRight\"\n overlayStyle={{ zIndex: 999 }}\n getPopupContainer={(trigger) =>\n trigger.parentElement as HTMLElement\n }\n popupRender={(menu) => (\n <div\n style={{\n maxHeight: \"200px\",\n width: \"330px\",\n textOverflow: \"ellipsis\",\n overflowY: \"auto\",\n zIndex: \"999px\",\n borderRadius: \"6px\",\n }}\n className=\"[&>*:nth-child(2)]:!shadow-none [&>*:nth-child(2)>*]:!px-2 flex flex-col gap-2 p-2 bg-white dark:bg-black-700 border border-solid border-neutral-200 dark:border-black-600\"\n >\n <SearchBar\n id={`search-bar-currency-input`}\n value={searchKeyForCurrency}\n onChange={(_value) =>\n setSearchKeyForCurrency(_value)\n }\n className=\"mb-2\"\n />\n {menu}\n </div>\n )}\n >\n <div className=\"pl-4 pr-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1\">\n {getFlagComponent(selectedCurrency)} {selectedCurrency}\n </div>\n </Dropdown>\n ) : (\n selectedCurrency\n )}\n </span>\n </label>\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 {isHovered &&\n riskDetails &&\n isRiskAnalysisOpen &&\n 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\nCurrencyInputField.displayName = \"CurrencyInputField\";\n"],"names":["CurrencyInputField","forwardRef","id","label","value","onChange","errorMessage","defaultValue","required","isRequiredConditional","tags","className","originalCase","tooltip","simpleMode","inputFieldClassName","isAiExtracted","confidenceScore","confidenceType","confidenceTooltip","sourceMeta","onConfidenceScoreClick","isGTN","gtnName","allowMultiCurrency","placeholder","disabled","currencyCode","inputStyle","labelClassName","isLiveField","onBlurProp","autoFocus","isRecording","isPlaying","onAddGTNToDocument","riskDetails","isRiskAnalysisOpen","RiskDetailsCard","labelExtra","inputEmphasis","props","ref","t","useTranslation","emphasisModifiedSkin","emphasisDeletedSkin","emphasisSuccessSkin","isFocused","setIsFocused","useState","filteredCurrencyOptions","setFilteredCurrencyOptions","searchKeyForCurrency","setSearchKeyForCurrency","selectedCurrency","setSelectedCurrency","isHovered","setIsHovered","handleAddGTNToDocument","_value","keyValuePair","formatCurrencyUtils","formatCurrency","targetValue","number","handleOnChange","numericValue","element","pilotEvent","onFocus","onBlur","getClassName","baseClasses","cn","useEffect","currencyOptions","CURRENCIES","item","jsx","OptionButton","getFlagComponent","jsxs","InputLabel","BoltOutlined","shouldShowConfidenceScore","AIExtractedIndicator","Label","Tooltip","HelpIcon","getConfidenceScoreBadgeClass","AIStarIcon","getConfidenceScoreBadgeColor","getConfidenceScoreBadgeFill","getConfidenceScoreBadgeTextColor","AntTooltip","NoteAddOutlined","CURRENCY_SYMBOLS","Dropdown","trigger","menu","SearchBar","Typography"],"mappings":"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"}
1
+ {"version":3,"file":"CurrencyInputField.es.js","sources":["../../../../src/components/forms/currency-input/CurrencyInputField.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport cn from \"classnames\";\nimport { forwardRef, useEffect, useState } from \"react\";\nimport { Dropdown, Tooltip as AntTooltip } from \"antd\";\nimport { useTranslation } from 'react-i18next';\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { Label } from \"../../data-display/label/Label\";\nimport type { LabelType } from \"../../data-display/label/Label\";\nimport { CURRENCIES, CURRENCY_SYMBOLS } from \"./currency.constant\";\nimport { NoteAddOutlined, BoltOutlined } from \"@mui/icons-material\";\nimport { AIExtractedIndicator } from \"../../icons/AIExtractedIndicator\";\nimport { AIStarIcon } from \"../../icons/AIStarIcon\";\nimport { HelpIcon } from \"../../icons/HelpIcon\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport {\n getConfidenceScoreBadgeClass,\n getConfidenceScoreBadgeColor,\n getConfidenceScoreBadgeFill,\n getConfidenceScoreBadgeTextColor,\n shouldShowConfidenceScore,\n} from \"../../../utils/confidenceScoreUtils\";\nimport { SearchBar } from \"../search-bar/SearchBar\";\nimport { OptionButton } from \"../../buttons/option-button/OptionButton\";\nimport { getFlagComponent } from \"../../../utils/countryFlags\";\nimport { InputLabel } from \"../shared/InputLabel\";\nimport { formatCurrency as formatCurrencyUtils } from \"../../../utils/formatters\";\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 for risk analysis integration\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 CurrencyInputField component\n */\nexport interface CurrencyInputFieldProps {\n /** Unique identifier for the currency input */\n id: string;\n /** Label text to display above the input */\n label?: string;\n /** Current value of the input (string for compatibility) */\n value: string;\n /** Callback function called when value changes */\n onChange: (data: any, currencyCode?: string) => void;\n /** Error message to display below the input */\n errorMessage?: string;\n /** Default value for the input */\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 /** Additional CSS classes for the wrapper */\n className?: string;\n /** Whether to preserve original case in the label */\n originalCase?: boolean;\n /** Tooltip text for the help icon */\n tooltip?: string;\n /** Whether to use simple mode (inline label style) */\n simpleMode?: boolean;\n /** Additional CSS classes for the input field */\n inputFieldClassName?: string;\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 allow multi-currency selection with dropdown */\n allowMultiCurrency?: boolean;\n /** Placeholder text for the input */\n placeholder?: string;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Current currency code */\n currencyCode?: string;\n /** Inline styles for the input element */\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 input loses focus */\n onBlur?: () => void;\n /** Whether the input should auto-focus */\n autoFocus?: boolean;\n /** Whether recording is active (for pilot context) */\n isRecording?: boolean;\n /** Whether playback is active (for pilot context) */\n isPlaying?: boolean;\n /** Handler for adding GTN to document */\n onAddGTNToDocument?: (keyValuePair: { key: string; value: string }) => 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 /** 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 highly customizable currency input component with label, validation, and styling support.\n * Features currency selection, formatting, validation, GTN integration, risk analysis support,\n * and comprehensive prop support for various use cases.\n *\n * @example\n * ```tsx\n * <CurrencyInputField\n * id=\"price\"\n * label=\"Price\"\n * value={price}\n * onChange={(value, currency) => setPrice(value)}\n * currencyCode=\"USD\"\n * allowMultiCurrency\n * required\n * />\n * ```\n */\nexport const CurrencyInputField = forwardRef<\n HTMLInputElement,\n CurrencyInputFieldProps\n>(\n (\n {\n id,\n label,\n value,\n onChange,\n errorMessage,\n defaultValue,\n required = false,\n isRequiredConditional = false,\n tags,\n className,\n originalCase = false,\n tooltip,\n simpleMode = false,\n inputFieldClassName = \"\",\n isAiExtracted = false,\n confidenceScore,\n confidenceType = \"high\",\n confidenceTooltip,\n sourceMeta = [],\n onConfidenceScoreClick,\n isGTN = false,\n gtnName = null,\n allowMultiCurrency = false,\n placeholder,\n disabled = false,\n currencyCode = \"USD\",\n inputStyle,\n labelClassName,\n isLiveField = false,\n onBlur: onBlurProp,\n autoFocus = false,\n isRecording = false,\n isPlaying = false,\n onAddGTNToDocument,\n riskDetails,\n isRiskAnalysisOpen = false,\n RiskDetailsCard,\n labelExtra,\n inputEmphasis = \"default\",\n ...props\n },\n ref\n ) => {\n const { t } = useTranslation();\n const emphasisModifiedSkin = inputEmphasis === \"modified\" && !errorMessage && !(isRiskAnalysisOpen && riskDetails?.color);\n const emphasisDeletedSkin = inputEmphasis === \"deleted\" && !errorMessage && !(isRiskAnalysisOpen && riskDetails?.color);\n const emphasisSuccessSkin = inputEmphasis === \"success\" && !errorMessage && !(isRiskAnalysisOpen && riskDetails?.color);\n const [isFocused, setIsFocused] = useState(false);\n const [filteredCurrencyOptions, setFilteredCurrencyOptions] = useState<\n { label: React.ReactNode; key: string }[]\n >([]);\n const [searchKeyForCurrency, setSearchKeyForCurrency] = useState(\"\");\n const [selectedCurrency, setSelectedCurrency] = useState<string>(\n currencyCode ? currencyCode : \"USD\"\n );\n const [isHovered, setIsHovered] = useState(false);\n\n const handleAddGTNToDocument = (_value: string) => {\n if (onAddGTNToDocument) {\n const keyValuePair = {\n key: gtnName,\n value: formatCurrencyUtils(_value, selectedCurrency),\n };\n onAddGTNToDocument(keyValuePair);\n }\n };\n\n const formatCurrency = (targetValue: any): string => {\n if (targetValue === null || targetValue === undefined) return \"\";\n\n const number = Number(targetValue);\n if (isNaN(number)) return targetValue;\n\n return number?.toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n };\n\n const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const _value = e.target.value;\n const numericValue =\n _value === \"\" || _value === null || _value === undefined\n ? 0\n : Number(_value);\n onChange(numericValue, selectedCurrency);\n const element = document.getElementById(id);\n if (element) {\n element.setAttribute(\n \"data-selected-value\",\n JSON.stringify({\n value: numericValue,\n currency_code: selectedCurrency,\n })\n );\n }\n if (element && (isRecording || isPlaying)) {\n const pilotEvent = new CustomEvent(\"pilot-change\", {\n bubbles: true,\n detail: {\n selector: `#${id}`,\n value: {\n value: numericValue,\n currency_code: selectedCurrency,\n },\n type: \"change\",\n },\n });\n element.dispatchEvent(pilotEvent);\n }\n };\n\n const onFocus = () => {\n setIsFocused(true);\n };\n\n const onBlur = () => {\n setIsFocused(false);\n if (value === null || value === undefined || value === \"\") {\n handleOnChange({\n target: { value: \"0.00\" },\n } as React.ChangeEvent<HTMLInputElement>);\n }\n onBlurProp?.();\n };\n\n const getClassName = (): string => {\n const baseClasses =\n \"pl-11 border h-8 text-sm block w-full p-2.5 font-inter font-medium focus:outline-none focus:ring-0\";\n\n if (errorMessage) {\n return cn(baseClasses, \"rounded-md border-red-300 bg-white dark:bg-black-600\", inputFieldClassName);\n }\n if (isRiskAnalysisOpen && riskDetails?.color) {\n return cn(baseClasses, `rounded-md border-${riskDetails.color}-300 bg-${riskDetails.color}-50`, \"text-neutral-900 dark:text-black-200 disabled:bg-neutral-50 dark:disabled:!bg-black-800\", inputFieldClassName);\n }\n if (emphasisDeletedSkin) {\n return cn(baseClasses, \"rounded-lg border border-solid 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)]\", inputFieldClassName);\n }\n if (emphasisModifiedSkin) {\n return cn(baseClasses, \"rounded-lg border border-solid 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)]\", inputFieldClassName);\n }\n if (emphasisSuccessSkin) {\n return cn(baseClasses, \"rounded-lg border border-solid 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)]\", inputFieldClassName);\n }\n return cn(baseClasses, \"rounded-lg border-gray-300 dark:border-black-600 bg-white dark:bg-black-600 text-neutral-900 dark:text-black-200 disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400 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)]\", inputFieldClassName);\n };\n\n useEffect(() => {\n if (currencyCode) {\n setSelectedCurrency(currencyCode);\n }\n }, [currencyCode]);\n\n useEffect(() => {\n if (selectedCurrency) {\n const numericValue =\n value === \"\" || value === null || value === undefined\n ? 0\n : Number(value);\n if (currencyCode !== selectedCurrency) {\n onChange(numericValue, selectedCurrency);\n }\n const element = document.getElementById(id);\n if (element) {\n element.setAttribute(\n \"data-selected-value\",\n JSON.stringify({\n value: numericValue,\n currency_code: selectedCurrency,\n })\n );\n if (isRecording || isPlaying) {\n const pilotEvent = new CustomEvent(\"pilot-change\", {\n bubbles: true,\n detail: {\n selector: `#${id}`,\n value: {\n value: numericValue,\n currency_code: selectedCurrency,\n },\n type: \"change\",\n },\n });\n element.dispatchEvent(pilotEvent);\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedCurrency]);\n\n useEffect(() => {\n const currencyOptions = CURRENCIES.filter((item) =>\n (item.value + \" - \" + item.label)\n .toLowerCase()\n .includes(searchKeyForCurrency.toLowerCase())\n ).map((item) => ({\n label: (\n <OptionButton\n text={`${item.value} - ${item.label}`}\n icon={getFlagComponent(item.value)}\n showTick={selectedCurrency === item.value}\n onClick={() => setSelectedCurrency(item.value)}\n className=\"text-black-900 dark:text-white\"\n />\n ),\n key: item.value,\n }));\n\n setFilteredCurrencyOptions(currencyOptions);\n }, [searchKeyForCurrency, selectedCurrency]);\n\n useEffect(() => {\n setSearchKeyForCurrency(\"\");\n }, [selectedCurrency]);\n\n // Simple mode rendering\n if (simpleMode) {\n return (\n <label\n id={id}\n className={`mb-1 text-xs font-medium text-gray-600 h-full inline-flex items-center gap-1 ${\n !originalCase ? \"capitalize\" : \"\"\n } ${labelClassName || \"\"}`}\n >\n <span className=\"absolute inset-y-0 left-1 top-0.5 flex items-center pl-3\">\n {\"$\"}\n </span>\n <input\n {...props}\n ref={ref}\n type={isFocused ? \"number\" : \"text\"}\n required={required}\n className={cn(inputFieldClassName, \"pl-8 h-8\")}\n onChange={handleOnChange}\n min={0}\n onFocus={onFocus}\n onBlur={onBlur}\n value={!isFocused ? formatCurrency(value) : value}\n {...(defaultValue && !value\n ? {\n defaultValue: !isFocused\n ? formatCurrency(defaultValue)\n : defaultValue,\n }\n : {})}\n id={id || label}\n autoFocus={autoFocus}\n />\n </label>\n );\n }\n\n // Full mode rendering\n return (\n <div\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=\"size-1 bg-primary-600 rounded-full animate-blink mt-1.5\" />\n ) : null}\n <div className={cn(\"w-full flex flex-col\", className)}>\n <label\n htmlFor=\"text\"\n className={`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${\n !originalCase ? \"uppercase\" : \"\"\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 <Tooltip placement=\"top\" title={tooltip}>\n <div className=\"cursor-pointer\">\n <HelpIcon className=\"w-icon-sm h-icon-sm\" />\n </div>\n </Tooltip>\n )}\n {labelExtra}\n </div>\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 && onAddGTNToDocument ? (\n <button\n id=\"btn-currency-input-add-to-document\"\n className=\"cursor-pointer\"\n onClick={() => handleAddGTNToDocument(formatCurrency(value))}\n type=\"button\"\n >\n <AntTooltip placement=\"top\" title={t(\"Add to document\")}>\n <NoteAddOutlined\n className=\"text-primary-600\"\n sx={{\n fontSize: 16\n }}\n />\n </AntTooltip>\n </button>\n ) : null}\n </div>\n </div>\n </label>\n <label className=\"relative block\">\n <span className=\"absolute inset-y-0 left-1 flex items-center pl-3 text-neutral-900 dark:text-white\">\n {CURRENCY_SYMBOLS[selectedCurrency]}\n </span>\n\n <input\n {...props}\n ref={ref}\n placeholder={placeholder}\n type={isFocused ? \"number\" : \"text\"}\n required={required}\n disabled={disabled}\n className={getClassName()}\n onChange={handleOnChange}\n min={0}\n onFocus={onFocus}\n onBlur={onBlur}\n value={!isFocused ? formatCurrency(value) : value}\n defaultValue={\n !isFocused ? formatCurrency(defaultValue) : defaultValue\n }\n id={id || label}\n style={inputStyle}\n autoComplete=\"off\"\n autoFocus={autoFocus}\n />\n <span\n className={`absolute inset-y-0 right-2 flex items-center z-[1000] h-full cursor-pointer dark:text-black-200 ${\n allowMultiCurrency ? \"cursor-pointer\" : \"\"\n }`}\n >\n {allowMultiCurrency ? (\n <Dropdown\n menu={{\n items: [\n ...filteredCurrencyOptions,\n ],\n }}\n trigger={[\"click\"]}\n overlayClassName=\"row-option-cell\"\n placement=\"bottomRight\"\n overlayStyle={{ zIndex: 999 }}\n getPopupContainer={(trigger) =>\n trigger.parentElement as HTMLElement\n }\n popupRender={(menu) => (\n <div\n className=\"[&>*:nth-child(2)]:!shadow-none [&>*:nth-child(2)>*]:!px-2 flex flex-col gap-2 p-2 bg-white dark:bg-black-700 border border-solid border-neutral-200 dark:border-black-600 max-h-[200px] w-[330px] text-ellipsis overflow-y-auto z-[999] rounded-md\"\n >\n <SearchBar\n id={`search-bar-currency-input`}\n value={searchKeyForCurrency}\n onChange={(_value) =>\n setSearchKeyForCurrency(_value)\n }\n className=\"mb-2\"\n />\n {menu}\n </div>\n )}\n >\n <div className=\"pl-4 pr-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1\">\n {getFlagComponent(selectedCurrency)} {selectedCurrency}\n </div>\n </Dropdown>\n ) : (\n selectedCurrency\n )}\n </span>\n </label>\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 {isHovered &&\n riskDetails &&\n isRiskAnalysisOpen &&\n 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\nCurrencyInputField.displayName = \"CurrencyInputField\";\n"],"names":["CurrencyInputField","forwardRef","id","label","value","onChange","errorMessage","defaultValue","required","isRequiredConditional","tags","className","originalCase","tooltip","simpleMode","inputFieldClassName","isAiExtracted","confidenceScore","confidenceType","confidenceTooltip","sourceMeta","onConfidenceScoreClick","isGTN","gtnName","allowMultiCurrency","placeholder","disabled","currencyCode","inputStyle","labelClassName","isLiveField","onBlurProp","autoFocus","isRecording","isPlaying","onAddGTNToDocument","riskDetails","isRiskAnalysisOpen","RiskDetailsCard","labelExtra","inputEmphasis","props","ref","t","useTranslation","emphasisModifiedSkin","emphasisDeletedSkin","emphasisSuccessSkin","isFocused","setIsFocused","useState","filteredCurrencyOptions","setFilteredCurrencyOptions","searchKeyForCurrency","setSearchKeyForCurrency","selectedCurrency","setSelectedCurrency","isHovered","setIsHovered","handleAddGTNToDocument","_value","keyValuePair","formatCurrencyUtils","formatCurrency","targetValue","number","handleOnChange","numericValue","element","pilotEvent","onFocus","onBlur","getClassName","baseClasses","cn","useEffect","currencyOptions","CURRENCIES","item","jsx","OptionButton","getFlagComponent","jsxs","InputLabel","BoltOutlined","shouldShowConfidenceScore","AIExtractedIndicator","Label","Tooltip","HelpIcon","getConfidenceScoreBadgeClass","AIStarIcon","getConfidenceScoreBadgeColor","getConfidenceScoreBadgeFill","getConfidenceScoreBadgeTextColor","AntTooltip","NoteAddOutlined","CURRENCY_SYMBOLS","Dropdown","trigger","menu","SearchBar","Typography"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),W=require("antd"),C=require("../../../_virtual/index.cjs.js"),qe=require("react-i18next"),o=require("dayjs"),Ve=require("dayjs/plugin/customParseFormat"),Re=require("dayjs/plugin/localeData"),Be=require("dayjs/plugin/utc"),Le=require("dayjs/plugin/weekday"),s=require("react"),Ne=require("../../data-display/typography/Typography.cjs.js"),Oe=require("../../data-display/label/Label.cjs.js"),Pe=require("../../icons/AIExtractedIndicator.cjs.js"),_e=require("../../icons/AIStarIcon.cjs.js"),Te=require("../../icons/HelpIcon.cjs.js"),ie=require("../../tooltip/Tooltip.cjs.js"),ue=require("@mui/icons-material"),we=require("../shared/InputLabel.cjs.js"),b=require("../../../utils/confidenceScoreUtils.cjs.js");o.extend(Be);o.extend(Ve);o.extend(Le);o.extend(Re);const pe="MM/DD/YYYY",j="MM/DD/YYYY - hh:mm A",de="YYYY-MM-DD",me="YYYY-MM-DDTHH:mm:ss",fe={ENTER:"Enter"},De=["MM/DD/YYYY","M/DD/YYYY","MM/D/YYYY","M/D/YYYY","MM/DD/YY","M/DD/YY","MM/D/YY","M/D/YY","YYYY-MM-DD","YYYY-MM-DDTHH:mm:ss.SSSZ","YYYY-MM-DDTHH:mm:ssZ"],Ue=["MM/DD/YYYY - hh:mm A","M/DD/YYYY - hh:mm A","MM/D/YYYY - hh:mm A","M/D/YYYY - hh:mm A","MM/DD/YYYY hh:mm A","M/DD/YYYY hh:mm A","MM/D/YYYY hh:mm A","M/D/YYYY hh:mm A","MM/DD/YYYY HH:mm","M/DD/YYYY HH:mm","MM/D/YYYY HH:mm","M/D/YYYY HH:mm","MM/DD/YY - hh:mm A","M/DD/YY - hh:mm A","MM/D/YY - hh:mm A","M/D/YY - hh:mm A","MM/DD/YY hh:mm A","M/DD/YY hh:mm A","MM/D/YY hh:mm A","M/D/YY hh:mm A","MM/DD/YY HH:mm","M/DD/YY HH:mm","MM/D/YY HH:mm","M/D/YY HH:mm",...De,"YYYY-MM-DDTHH:mm:ss.SSSZ","YYYY-MM-DDTHH:mm:ssZ"],$e=()=>Math.random().toString(36).substring(2,9),y=(u,d=!1)=>{if(!u)return null;const f=d?Ue:De;for(const Y of f){const x=o(u,Y,!0);if(x.isValid())return x}const m=o(u);return m.isValid()?m:null},Ye=(u,d)=>{const f=s.useRef(d);s.useEffect(()=>{f.current=d},[d]),s.useEffect(()=>{const m=Y=>f.current(Y);return document.addEventListener(u,m),()=>{document.removeEventListener(u,m)}},[u])},Me=s.forwardRef(({label:u,value:d,required:f,isRequiredConditional:m=!1,disabled:Y,className:x=void 0,errorMessage:p,handleOnChange:D,showTime:l=!0,tags:Ee,needConfirm:he=!1,simpleMode:be,originalCase:xe=!1,dateFormat:z=void 0,tooltip:X,isAiExtracted:ge=!1,confidenceScore:q,confidenceType:g="high",confidenceTooltip:V,sourceMeta:Se=[],onConfidenceScoreClick:ve,isGTN:R=!1,gtnName:J=null,shouldPopOnParent:ye=!1,allowTimezoneConversion:M=!0,inputStyle:Ae,labelClassName:Fe,isLiveField:Ie=!1,labelExtra:Q,inputEmphasis:B="default",riskDetails:E,isRiskAnalysisOpen:L=!1,RiskDetailsCard:G,onAddGTNToDocument:A,formatDateForGTN:N,...O},ke)=>{const{t:He}=qe.useTranslation(),P=!!(L&&E?.color),ee=B==="modified"&&!p&&!P,te=B==="deleted"&&!p&&!P,ne=B==="success"&&!p&&!P,[F,_]=s.useState(!1),[re,h]=s.useState(null),[se,T]=s.useState(null),[I,le]=s.useState(!1),c=z||(l?j:pe),a=O?.id||`date-picker-${$e()}`,S=s.useRef(null),k=s.useRef(!1);Ye("paste",e=>{document.activeElement?.id===a&&(e.preventDefault(),navigator.clipboard.readText().then(t=>{const r=y(t,l);r&&w(r)}))}),Ye("keydown",e=>{if(e.key===fe.ENTER&&document.activeElement instanceof HTMLInputElement&&document.activeElement.id===a){const t=y(document?.activeElement?.value,l);t&&w(t)}});const Ce=s.useCallback(e=>{if(!A)return;let t=e||"";if(N&&e)t=N(e,{skipTimezone:!0,withTime:l});else if(e){const i=o(e);i.isValid()&&(t=i.format(c))}A({key:J,value:t})},[A,J,N,l,c]),je=s.useCallback(()=>{const e=document.getElementsByClassName("ant-picker-footer")[0];e&&(e.style.display="none")},[]),v=s.useCallback(e=>{if(!M){const t=l?me:de;if(D(e?e.format(t):null),e){const r=document.getElementById(a);if(r){const i=new CustomEvent("pilot-date-change",{bubbles:!0,detail:{selector:`#${a}`,value:e.format?e.format(c):e,type:"date-change",elementId:a}});r.dispatchEvent(i)}}return}if(e){let t;if(l?t=o(e).utc().toISOString():t=o(e).utc().add(o(e).utcOffset(),"minute").startOf("day").toISOString(),t){D(t);const r=document.getElementById(a);if(r){const i=new CustomEvent("pilot-date-change",{bubbles:!0,detail:{selector:`#${a}`,value:e.format(c),type:"date-change",elementId:a}});r.dispatchEvent(i)}}}else D(null)},[M,D,l,a,c]),oe=s.useCallback(e=>{if(!e)return null;if(!M)try{const t=o(e);if(t.isValid())return t;const r=o(e,c);return r.isValid()?r:null}catch{return null}if(l){const t=o(e);return o(t).isValid()?t:null}else if(e?.toString()?.includes("Z")){const t=o.utc(e);return o(t).isValid()?t:null}else{const t=o(e);return o(t).isValid()?t:null}},[M,c,l]),w=s.useCallback(e=>{if(e?.isValid()||e===null){h(e);const t=l?me:de,r=M?e?.toISOString():e?e.format(t):"";if(D(r||null),e?.isValid()){const i=document.getElementById(a);if(i){const U=new CustomEvent("pilot-date-change",{bubbles:!0,detail:{selector:`#${a}`,value:e.format(c),type:"date-change",elementId:a}});i.dispatchEvent(U)}}}},[M,c,D,a,l]);s.useEffect(()=>{h(oe(d))},[d,oe]),s.useEffect(()=>{se&&T(null)},[se]),s.useEffect(()=>{const e=document.getElementById(a);if(!e)return;const t=r=>{const{value:i,type:U}=r.detail;if(U==="date-playback"&&i){const H=y(i,l);H&&H.isValid()&&(h(H),v(H),setTimeout(()=>{const $=e.querySelector("input");if($&&($.focus(),setTimeout(()=>{$.blur()},10)),S.current)try{const K=S.current;typeof K.blur=="function"&&K.blur()}catch{}setTimeout(()=>{document.querySelectorAll(".ant-picker-dropdown:not(.ant-picker-dropdown-hidden)").forEach(Z=>{Z instanceof HTMLElement&&(Z.style.display="none",Z.classList.add("ant-picker-dropdown-hidden"))})},50)},50))}};return e.addEventListener("pilot-date-playback",t),()=>{e.removeEventListener("pilot-date-playback",t)}},[a,c,v,l]);const ae=s.useCallback(e=>{if(e.key===fe.ENTER&&!I){e.preventDefault(),e.stopPropagation();const t=e.target.closest("form");if(t){const r=t.querySelector('button[type="submit"]');r?r.click():t.requestSubmit()}}},[I]),ce=s.useCallback(e=>{if(e&&k.current){k.current=!1,le(!1);return}le(e),e||(k.current=!0,requestAnimationFrame(()=>{S.current?.focus(),requestAnimationFrame(()=>{k.current=!1})}))},[]);return be?n.jsx("div",{onKeyDownCapture:ae,children:n.jsx(W.DatePicker,{...O,showTime:l,open:I,format:c,placeholder:c===j?"MM/DD/YYYY hh:mm":c,value:re,needConfirm:!1,onChange:e=>{h(e),v(e),T(e?.toISOString()||null)},className:x,showNow:!1,onFocus:je,onOpenChange:ce,onBlur:e=>{const t=e.target.value;if(t){const r=y(t,l);r&&w(r)}},ref:S,disabled:Y,id:a})}):n.jsxs("div",{ref:ke,className:C("flex gap-0.5 relative",F&&R?"border rounded-lg border-primary-100 bg-primary-50 p-1":""),onMouseEnter:()=>_(!0),onMouseLeave:()=>_(!1),children:[R&&!F?n.jsx("div",{className:"w-1 h-1 bg-primary-600 rounded-full animate-blink mt-1.5"}):null,n.jsxs("div",{className:`w-full flex flex-col font-inter ${x||""}`,onKeyDownCapture:ae,children:[u||Q?n.jsx("label",{className:`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${xe?"":"capitalize"} ${Fe||""}`,children:n.jsxs("div",{className:"grid w-full grid-cols-[minmax(0,1fr)_auto] items-start gap-x-1",children:[n.jsxs("div",{className:"inline-flex min-w-0 items-center gap-1 flex-wrap",children:[(u||f||m)&&n.jsx(we.InputLabel,{label:u||"",required:f||!1,isRequiredConditional:m||!1}),Ie&&n.jsx(ue.BoltOutlined,{sx:{fontSize:16,color:"var(--color-primary-600)",rotate:"15deg"}}),ge&&!b.shouldShowConfidenceScore(q)&&n.jsx(Pe.AIExtractedIndicator,{}),n.jsx(Oe.Label,{labels:Ee}),X&&n.jsx(ie,{placement:"top",title:X,children:n.jsx("div",{className:"cursor-pointer",children:n.jsx(Te.HelpIcon,{})})}),Q]}),n.jsxs("div",{className:"flex items-center gap-1 justify-self-end",children:[b.shouldShowConfidenceScore(q)&&g?n.jsx(ie,{placement:"top-end",title:V??"",hideTooltip:V==null,className:"cursor-pointer",children:n.jsxs("div",{className:C("inline-flex min-w-[50px] items-center gap-1 rounded-md px-1 py-0.5",b.getConfidenceScoreBadgeClass(g)),onClick:()=>ve?.(Se),children:[n.jsx(_e.AIStarIcon,{size:12,fill:b.getConfidenceScoreBadgeColor(g),fillSecondary:b.getConfidenceScoreBadgeFill(g)}),n.jsxs("span",{className:C("text-xs font-medium leading-4",b.getConfidenceScoreBadgeTextColor(g)),children:[q,"%"]})]})}):null,R&&F&&A?n.jsx("button",{id:"btn-date-field-add-to-document",className:"cursor-pointer",onClick:()=>Ce(d),type:"button",children:n.jsx(W.Tooltip,{placement:"top",title:He("Add to document"),children:n.jsx(ue.NoteAddOutlined,{className:"text-primary-600",sx:{fontSize:16}})})}):null]})]})}):null,n.jsx(W.DatePicker,{...O,showTime:l?{use12Hours:!0}:!1,open:I,format:c,placeholder:c===j?"MM/DD/YYYY - HH:MM":c,className:C("w-full h-8 text-inter font-medium dark:text-black-300",p&&"border-red-400",L&&E?.color&&`bg-${E.color}-50 border-${E.color}-300`,te&&"!border-[var(--Error-200,#FECACA)] !bg-[var(--Error-50,#FEF2F2)] !text-[#475467]",ee&&"!border-[var(--Warning-200,#FEDF89)] !bg-[var(--Warning-50,#FFFAEB)]",ne&&"!border-[var(--Success-200,#BBF7D0)] !bg-[var(--Success-50,#F0FDF4)] !text-[#101828]"),styles:{root:{...Ae,borderRadius:"7px",...te&&{borderColor:"var(--Error-200, #FECACA)",backgroundColor:"var(--Error-50, #FEF2F2)",color:"#475467"},...ee&&{borderColor:"var(--Warning-200, #FEDF89)",backgroundColor:"var(--Warning-50, #FFFAEB)"},...ne&&{borderColor:"var(--Success-200, #BBF7D0)",backgroundColor:"var(--Success-50, #F0FDF4)",color:"#101828"}}},showNow:!1,value:re,onChange:e=>{h(e),v(e),T(e?.toISOString()||null)},onBlur:e=>{const t=e.target.value;if(t){const r=y(t,l);r&&(h(r),v(r))}},needConfirm:he,ref:S,disabled:Y,inputReadOnly:!1,onOpenChange:ce,getPopupContainer:ye?e=>e.parentElement:()=>document.body,id:a,autoComplete:"off"}),p&&n.jsx(Ne.Typography,{className:"text-error-500 mt-1",appearance:"custom",size:"extra-small",variant:"medium",children:p})]}),F&&E&&L&&G&&n.jsx("div",{role:"tooltip",tabIndex:0,className:"absolute left-0 right-0 top-[95%] mt-1 z-50 bg-white dark:bg-black-600 rounded-xl",onClick:e=>e.stopPropagation(),onMouseDown:e=>e.preventDefault(),onKeyDown:e=>{e.key==="Escape"&&_(!1)},children:n.jsx(G,{riskDetails:E})})]})});Me.displayName="DateTimeField";exports.DateTimeField=Me;exports.UNIVERSAL_DATETIME_FORMAT=j;exports.UNIVERSAL_DATE_FORMAT=pe;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),W=require("antd"),C=require("../../../_virtual/index.cjs.js"),qe=require("react-i18next"),o=require("dayjs"),Ve=require("dayjs/plugin/customParseFormat"),Re=require("dayjs/plugin/localeData"),Be=require("dayjs/plugin/utc"),Le=require("dayjs/plugin/weekday"),s=require("react"),Ne=require("../../data-display/typography/Typography.cjs.js"),Oe=require("../../data-display/label/Label.cjs.js"),Pe=require("../../icons/AIExtractedIndicator.cjs.js"),_e=require("../../icons/AIStarIcon.cjs.js"),Te=require("../../icons/HelpIcon.cjs.js"),ie=require("../../tooltip/Tooltip.cjs.js"),ue=require("@mui/icons-material"),we=require("../shared/InputLabel.cjs.js"),b=require("../../../utils/confidenceScoreUtils.cjs.js");o.extend(Be);o.extend(Ve);o.extend(Le);o.extend(Re);const pe="MM/DD/YYYY",j="MM/DD/YYYY - hh:mm A",de="YYYY-MM-DD",me="YYYY-MM-DDTHH:mm:ss",fe={ENTER:"Enter"},De=["MM/DD/YYYY","M/DD/YYYY","MM/D/YYYY","M/D/YYYY","MM/DD/YY","M/DD/YY","MM/D/YY","M/D/YY","YYYY-MM-DD","YYYY-MM-DDTHH:mm:ss.SSSZ","YYYY-MM-DDTHH:mm:ssZ"],Ue=["MM/DD/YYYY - hh:mm A","M/DD/YYYY - hh:mm A","MM/D/YYYY - hh:mm A","M/D/YYYY - hh:mm A","MM/DD/YYYY hh:mm A","M/DD/YYYY hh:mm A","MM/D/YYYY hh:mm A","M/D/YYYY hh:mm A","MM/DD/YYYY HH:mm","M/DD/YYYY HH:mm","MM/D/YYYY HH:mm","M/D/YYYY HH:mm","MM/DD/YY - hh:mm A","M/DD/YY - hh:mm A","MM/D/YY - hh:mm A","M/D/YY - hh:mm A","MM/DD/YY hh:mm A","M/DD/YY hh:mm A","MM/D/YY hh:mm A","M/D/YY hh:mm A","MM/DD/YY HH:mm","M/DD/YY HH:mm","MM/D/YY HH:mm","M/D/YY HH:mm",...De,"YYYY-MM-DDTHH:mm:ss.SSSZ","YYYY-MM-DDTHH:mm:ssZ"],$e=()=>Math.random().toString(36).substring(2,9),y=(u,d=!1)=>{if(!u)return null;const f=d?Ue:De;for(const Y of f){const x=o(u,Y,!0);if(x.isValid())return x}const m=o(u);return m.isValid()?m:null},Ye=(u,d)=>{const f=s.useRef(d);s.useEffect(()=>{f.current=d},[d]),s.useEffect(()=>{const m=Y=>f.current(Y);return document.addEventListener(u,m),()=>{document.removeEventListener(u,m)}},[u])},Me=s.forwardRef(({label:u,value:d,required:f,isRequiredConditional:m=!1,disabled:Y,className:x=void 0,errorMessage:p,handleOnChange:D,showTime:l=!0,tags:he,needConfirm:Ee=!1,simpleMode:be,originalCase:xe=!1,dateFormat:z=void 0,tooltip:X,isAiExtracted:ge=!1,confidenceScore:q,confidenceType:g="high",confidenceTooltip:V,sourceMeta:Se=[],onConfidenceScoreClick:ve,isGTN:R=!1,gtnName:J=null,shouldPopOnParent:ye=!1,allowTimezoneConversion:M=!0,inputStyle:Ae,labelClassName:Fe,isLiveField:Ie=!1,labelExtra:Q,inputEmphasis:B="default",riskDetails:h,isRiskAnalysisOpen:L=!1,RiskDetailsCard:G,onAddGTNToDocument:A,formatDateForGTN:N,...O},ke)=>{const{t:He}=qe.useTranslation(),P=!!(L&&h?.color),ee=B==="modified"&&!p&&!P,te=B==="deleted"&&!p&&!P,ne=B==="success"&&!p&&!P,[F,_]=s.useState(!1),[re,E]=s.useState(null),[se,T]=s.useState(null),[I,le]=s.useState(!1),c=z||(l?j:pe),a=O?.id||`date-picker-${$e()}`,S=s.useRef(null),k=s.useRef(!1);Ye("paste",e=>{document.activeElement?.id===a&&(e.preventDefault(),navigator.clipboard.readText().then(t=>{const r=y(t,l);r&&w(r)}))}),Ye("keydown",e=>{if(e.key===fe.ENTER&&document.activeElement instanceof HTMLInputElement&&document.activeElement.id===a){const t=y(document?.activeElement?.value,l);t&&w(t)}});const Ce=s.useCallback(e=>{if(!A)return;let t=e||"";if(N&&e)t=N(e,{skipTimezone:!0,withTime:l});else if(e){const i=o(e);i.isValid()&&(t=i.format(c))}A({key:J,value:t})},[A,J,N,l,c]),je=s.useCallback(()=>{const e=document.getElementsByClassName("ant-picker-footer")[0];e&&(e.style.display="none")},[]),v=s.useCallback(e=>{if(!M){const t=l?me:de;if(D(e?e.format(t):null),e){const r=document.getElementById(a);if(r){const i=new CustomEvent("pilot-date-change",{bubbles:!0,detail:{selector:`#${a}`,value:e.format?e.format(c):e,type:"date-change",elementId:a}});r.dispatchEvent(i)}}return}if(e){let t;if(l?t=o(e).utc().toISOString():t=o(e).utc().add(o(e).utcOffset(),"minute").startOf("day").toISOString(),t){D(t);const r=document.getElementById(a);if(r){const i=new CustomEvent("pilot-date-change",{bubbles:!0,detail:{selector:`#${a}`,value:e.format(c),type:"date-change",elementId:a}});r.dispatchEvent(i)}}}else D(null)},[M,D,l,a,c]),oe=s.useCallback(e=>{if(!e)return null;if(!M)try{const t=o(e);if(t.isValid())return t;const r=o(e,c);return r.isValid()?r:null}catch{return null}if(l){const t=o(e);return o(t).isValid()?t:null}else if(e?.toString()?.includes("Z")){const t=o.utc(e);return o(t).isValid()?t:null}else{const t=o(e);return o(t).isValid()?t:null}},[M,c,l]),w=s.useCallback(e=>{if(e?.isValid()||e===null){E(e);const t=l?me:de,r=M?e?.toISOString():e?e.format(t):"";if(D(r||null),e?.isValid()){const i=document.getElementById(a);if(i){const U=new CustomEvent("pilot-date-change",{bubbles:!0,detail:{selector:`#${a}`,value:e.format(c),type:"date-change",elementId:a}});i.dispatchEvent(U)}}}},[M,c,D,a,l]);s.useEffect(()=>{E(oe(d))},[d,oe]),s.useEffect(()=>{se&&T(null)},[se]),s.useEffect(()=>{const e=document.getElementById(a);if(!e)return;const t=r=>{const{value:i,type:U}=r.detail;if(U==="date-playback"&&i){const H=y(i,l);H&&H.isValid()&&(E(H),v(H),setTimeout(()=>{const $=e.querySelector("input");if($&&($.focus(),setTimeout(()=>{$.blur()},10)),S.current)try{const K=S.current;typeof K.blur=="function"&&K.blur()}catch{}setTimeout(()=>{document.querySelectorAll(".ant-picker-dropdown:not(.ant-picker-dropdown-hidden)").forEach(Z=>{Z instanceof HTMLElement&&(Z.style.display="none",Z.classList.add("ant-picker-dropdown-hidden"))})},50)},50))}};return e.addEventListener("pilot-date-playback",t),()=>{e.removeEventListener("pilot-date-playback",t)}},[a,c,v,l]);const ae=s.useCallback(e=>{if(e.key===fe.ENTER&&!I){e.preventDefault(),e.stopPropagation();const t=e.target.closest("form");if(t){const r=t.querySelector('button[type="submit"]');r?r.click():t.requestSubmit()}}},[I]),ce=s.useCallback(e=>{if(e&&k.current){k.current=!1,le(!1);return}le(e),e||(k.current=!0,requestAnimationFrame(()=>{S.current?.focus(),requestAnimationFrame(()=>{k.current=!1})}))},[]);return be?n.jsx("div",{onKeyDownCapture:ae,children:n.jsx(W.DatePicker,{...O,showTime:l,open:I,format:c,placeholder:c===j?"MM/DD/YYYY hh:mm":c,value:re,needConfirm:!1,onChange:e=>{E(e),v(e),T(e?.toISOString()||null)},className:x,showNow:!1,onFocus:je,onOpenChange:ce,onBlur:e=>{const t=e.target.value;if(t){const r=y(t,l);r&&w(r)}},ref:S,disabled:Y,id:a})}):n.jsxs("div",{ref:ke,className:C("flex gap-0.5 relative",F&&R?"border rounded-lg border-primary-100 bg-primary-50 p-1":""),onMouseEnter:()=>_(!0),onMouseLeave:()=>_(!1),children:[R&&!F?n.jsx("div",{className:"w-1 h-1 bg-primary-600 rounded-full animate-blink mt-1.5"}):null,n.jsxs("div",{className:`w-full flex flex-col font-inter ${x||""}`,onKeyDownCapture:ae,children:[u||Q?n.jsx("label",{className:`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${xe?"":"capitalize"} ${Fe||""}`,children:n.jsxs("div",{className:"grid w-full grid-cols-[minmax(0,1fr)_auto] items-start gap-x-1",children:[n.jsxs("div",{className:"inline-flex min-w-0 items-center gap-1 flex-wrap",children:[(u||f||m)&&n.jsx(we.InputLabel,{label:u||"",required:f||!1,isRequiredConditional:m||!1}),Ie&&n.jsx(ue.BoltOutlined,{sx:{fontSize:16,color:"var(--color-primary-600)",rotate:"15deg"}}),ge&&!b.shouldShowConfidenceScore(q)&&n.jsx(Pe.AIExtractedIndicator,{}),n.jsx(Oe.Label,{labels:he}),X&&n.jsx(ie,{placement:"top",title:X,children:n.jsx("div",{className:"cursor-pointer",children:n.jsx(Te.HelpIcon,{className:"w-icon-sm h-icon-sm"})})}),Q]}),n.jsxs("div",{className:"flex items-center gap-1 justify-self-end",children:[b.shouldShowConfidenceScore(q)&&g?n.jsx(ie,{placement:"top-end",title:V??"",hideTooltip:V==null,className:"cursor-pointer",children:n.jsxs("div",{className:C("inline-flex min-w-[50px] items-center gap-1 rounded-md px-1 py-0.5",b.getConfidenceScoreBadgeClass(g)),onClick:()=>ve?.(Se),children:[n.jsx(_e.AIStarIcon,{size:12,fill:b.getConfidenceScoreBadgeColor(g),fillSecondary:b.getConfidenceScoreBadgeFill(g)}),n.jsxs("span",{className:C("text-xs font-medium leading-4",b.getConfidenceScoreBadgeTextColor(g)),children:[q,"%"]})]})}):null,R&&F&&A?n.jsx("button",{id:"btn-date-field-add-to-document",className:"cursor-pointer",onClick:()=>Ce(d),type:"button",children:n.jsx(W.Tooltip,{placement:"top",title:He("Add to document"),children:n.jsx(ue.NoteAddOutlined,{className:"text-primary-600",sx:{fontSize:16}})})}):null]})]})}):null,n.jsx(W.DatePicker,{...O,showTime:l?{use12Hours:!0}:!1,open:I,format:c,placeholder:c===j?"MM/DD/YYYY - HH:MM":c,className:C("w-full h-8 text-sm font-medium dark:text-black-300",p&&"border-red-400",L&&h?.color&&`bg-${h.color}-50 border-${h.color}-300`,te&&"!border-[var(--Error-200,#FECACA)] !bg-[var(--Error-50,#FEF2F2)] !text-[#475467]",ee&&"!border-[var(--Warning-200,#FEDF89)] !bg-[var(--Warning-50,#FFFAEB)]",ne&&"!border-[var(--Success-200,#BBF7D0)] !bg-[var(--Success-50,#F0FDF4)] !text-[#101828]"),styles:{root:{...Ae,borderRadius:"7px",...te&&{borderColor:"var(--Error-200, #FECACA)",backgroundColor:"var(--Error-50, #FEF2F2)",color:"#475467"},...ee&&{borderColor:"var(--Warning-200, #FEDF89)",backgroundColor:"var(--Warning-50, #FFFAEB)"},...ne&&{borderColor:"var(--Success-200, #BBF7D0)",backgroundColor:"var(--Success-50, #F0FDF4)",color:"#101828"}}},showNow:!1,value:re,onChange:e=>{E(e),v(e),T(e?.toISOString()||null)},onBlur:e=>{const t=e.target.value;if(t){const r=y(t,l);r&&(E(r),v(r))}},needConfirm:Ee,ref:S,disabled:Y,inputReadOnly:!1,onOpenChange:ce,getPopupContainer:ye?e=>e.parentElement:()=>document.body,id:a,autoComplete:"off"}),p&&n.jsx(Ne.Typography,{className:"text-error-500 mt-1",appearance:"custom",size:"extra-small",variant:"medium",children:p})]}),F&&h&&L&&G&&n.jsx("div",{role:"tooltip",tabIndex:0,className:"absolute left-0 right-0 top-[95%] mt-1 z-50 bg-white dark:bg-black-600 rounded-xl",onClick:e=>e.stopPropagation(),onMouseDown:e=>e.preventDefault(),onKeyDown:e=>{e.key==="Escape"&&_(!1)},children:n.jsx(G,{riskDetails:h})})]})});Me.displayName="DateTimeField";exports.DateTimeField=Me;exports.UNIVERSAL_DATETIME_FORMAT=j;exports.UNIVERSAL_DATE_FORMAT=pe;
2
2
  //# sourceMappingURL=DateTimeField.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeField.cjs.js","sources":["../../../../src/components/forms/date-time-field/DateTimeField.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Tooltip as AntTooltip } from \"antd\";\nimport { DatePicker, type DatePickerProps } from \"antd\";\nimport cn from \"classnames\";\nimport { useTranslation } from 'react-i18next';\nimport dayjs, { Dayjs } from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\nimport localeData from \"dayjs/plugin/localeData\";\nimport utc from \"dayjs/plugin/utc\";\nimport weekday from \"dayjs/plugin/weekday\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { Label } from \"../../data-display/label/Label\";\nimport type { LabelType } from \"../../data-display/label/Label\";\nimport { AIExtractedIndicator } from \"../../icons/AIExtractedIndicator\";\nimport { AIStarIcon } from \"../../icons/AIStarIcon\";\nimport { HelpIcon } from \"../../icons/HelpIcon\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport { BoltOutlined, NoteAddOutlined } from \"@mui/icons-material\";\nimport { InputLabel } from \"../shared/InputLabel\";\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\n/** Visual emphasis for the date picker surface (background + border) */\nexport type DateTimeFieldEmphasis = \"default\" | \"modified\" | \"deleted\" | \"success\";\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\ndayjs.extend(utc);\ndayjs.extend(customParseFormat);\ndayjs.extend(weekday);\ndayjs.extend(localeData);\n\n// Date format constants\nexport const UNIVERSAL_DATE_FORMAT = \"MM/DD/YYYY\";\nexport const UNIVERSAL_DATETIME_FORMAT = \"MM/DD/YYYY - hh:mm A\";\n\n// ISO-like format for internal value storage (parseable by new Date() and dayjs)\nconst ISO_DATE_FORMAT = \"YYYY-MM-DD\";\nconst ISO_DATETIME_FORMAT = \"YYYY-MM-DDTHH:mm:ss\";\n\n// Keyboard keys constant\nconst KEYBOARD_KEYS = {\n ENTER: \"Enter\",\n} as const;\n\nconst FLEXIBLE_DATE_FORMATS = [\n \"MM/DD/YYYY\",\n \"M/DD/YYYY\",\n \"MM/D/YYYY\",\n \"M/D/YYYY\",\n\n \"MM/DD/YY\",\n \"M/DD/YY\",\n \"MM/D/YY\",\n \"M/D/YY\",\n\n \"YYYY-MM-DD\",\n \"YYYY-MM-DDTHH:mm:ss.SSSZ\",\n \"YYYY-MM-DDTHH:mm:ssZ\",\n];\n\nconst FLEXIBLE_DATETIME_FORMATS = [\n \"MM/DD/YYYY - hh:mm A\",\n \"M/DD/YYYY - hh:mm A\",\n \"MM/D/YYYY - hh:mm A\",\n \"M/D/YYYY - hh:mm A\",\n \"MM/DD/YYYY hh:mm A\",\n \"M/DD/YYYY hh:mm A\",\n \"MM/D/YYYY hh:mm A\",\n \"M/D/YYYY hh:mm A\",\n \"MM/DD/YYYY HH:mm\",\n \"M/DD/YYYY HH:mm\",\n \"MM/D/YYYY HH:mm\",\n \"M/D/YYYY HH:mm\",\n\n \"MM/DD/YY - hh:mm A\",\n \"M/DD/YY - hh:mm A\",\n \"MM/D/YY - hh:mm A\",\n \"M/D/YY - hh:mm A\",\n \"MM/DD/YY hh:mm A\",\n \"M/DD/YY hh:mm A\",\n \"MM/D/YY hh:mm A\",\n \"M/D/YY hh:mm A\",\n \"MM/DD/YY HH:mm\",\n \"M/DD/YY HH:mm\",\n \"MM/D/YY HH:mm\",\n \"M/D/YY HH:mm\",\n\n ...FLEXIBLE_DATE_FORMATS,\n\n \"YYYY-MM-DDTHH:mm:ss.SSSZ\",\n \"YYYY-MM-DDTHH:mm:ssZ\",\n];\n\n/**\n * Generate a short UUID\n */\nconst generateShortUUID = (): string => {\n return Math.random().toString(36).substring(2, 9);\n};\n\n/**\n * Try to parse a date string using multiple flexible formats\n * Handles single-digit months/days and 2-digit years\n */\nconst tryParseFlexibleDate = (\n dateStr: string,\n withTime: boolean = false\n): Dayjs | null => {\n if (!dateStr) return null;\n\n const formats = withTime ? FLEXIBLE_DATETIME_FORMATS : FLEXIBLE_DATE_FORMATS;\n\n // First try with explicit formats\n for (const format of formats) {\n const parsed = dayjs(dateStr, format, true); // strict mode\n if (parsed.isValid()) {\n return parsed;\n }\n }\n\n // Fallback to dayjs default parsing (handles ISO strings, etc.)\n const defaultParsed = dayjs(dateStr);\n if (defaultParsed.isValid()) {\n return defaultParsed;\n }\n\n return null;\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 DateTimeField component\n */\nexport interface DateTimeFieldProps\n extends Omit<DatePickerProps, \"onChange\" | \"value\"> {\n /** The label text to display above the date picker */\n label?: string;\n /** Current value of the date picker (ISO string or formatted date string) */\n value?: string;\n /** Additional CSS classes for the wrapper */\n className?: 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 /** Error message to display */\n errorMessage?: string;\n /** Whether the date picker is disabled */\n disabled?: boolean;\n /** Callback function called when date changes */\n handleOnChange: (value: string | null) => void;\n /** Whether to use simple mode (minimal styling) */\n simpleMode?: boolean;\n /** Whether to show time picker */\n showTime?: boolean;\n /** Custom date format */\n dateFormat?: string;\n /** Tooltip text for the help icon */\n tooltip?: string;\n /** Tags to display with the label */\n tags?: (string | LabelType)[];\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 name for the field */\n gtnName?: any;\n /** Whether to allow timezone conversion */\n allowTimezoneConversion?: boolean;\n /** Whether to allow copying */\n allowCopy?: boolean;\n /** Unique identifier for the date picker */\n id: string;\n /** Date picker type */\n picker?: \"date\" | \"week\" | \"month\" | \"quarter\" | \"year\";\n /** Whether popup should render inside parent element */\n shouldPopOnParent?: boolean;\n /** Custom inline styles for the input */\n inputStyle?: React.CSSProperties;\n /** Additional CSS classes for the label */\n labelClassName?: string;\n /** Optional extra content in the label row (e.g. actions, badges) */\n labelExtra?: React.ReactNode;\n /** Input surface style: `'modified'` — Warning-50/Warning-200; `'deleted'` — Error-50/Error-200; `'success'` — Success-50/Success-200. */\n inputEmphasis?: DateTimeFieldEmphasis;\n /** Whether this is a live field */\n isLiveField?: boolean;\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 /** Custom format date function for GTN values */\n formatDateForGTN?: (\n value: string,\n options: { skipTimezone: boolean; withTime: boolean }\n ) => string;\n}\n\n/**\n * Hook to add event listeners\n */\nconst useEventListener = <K extends keyof DocumentEventMap>(\n eventName: K,\n handler: (event: DocumentEventMap[K]) => void\n) => {\n const savedHandler = useRef(handler);\n\n useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n\n useEffect(() => {\n const eventListener = (event: DocumentEventMap[K]) =>\n savedHandler.current(event);\n document.addEventListener(eventName, eventListener);\n return () => {\n document.removeEventListener(eventName, eventListener);\n };\n }, [eventName]);\n};\n\n/**\n * DateTimeField component - A feature-rich date/time picker with support for\n * GTN integration, risk analysis, AI extraction indicators, and more.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <DateTimeField\n * id=\"start-date\"\n * label=\"Start Date\"\n * value={startDate}\n * handleOnChange={(date) => setStartDate(date)}\n * />\n *\n * // With time picker\n * <DateTimeField\n * id=\"event-datetime\"\n * label=\"Event Date & Time\"\n * value={eventDateTime}\n * handleOnChange={(date) => setEventDateTime(date)}\n * showTime={true}\n * />\n *\n * // With GTN integration\n * <DateTimeField\n * id=\"contract-date\"\n * label=\"Contract Date\"\n * value={contractDate}\n * handleOnChange={(date) => setContractDate(date)}\n * isGTN={true}\n * gtnName=\"contract_date\"\n * onAddGTNToDocument={(kv) => dispatch(setVariableValueToEditor(kv))}\n * />\n * ```\n */\nexport const DateTimeField = forwardRef<HTMLDivElement, DateTimeFieldProps>(\n (\n {\n label,\n value,\n required,\n isRequiredConditional = false,\n disabled,\n className = undefined,\n errorMessage,\n handleOnChange,\n showTime = true,\n tags,\n needConfirm = false,\n simpleMode,\n originalCase = false,\n dateFormat = undefined,\n tooltip,\n isAiExtracted = false,\n confidenceScore,\n confidenceType = \"high\",\n confidenceTooltip,\n sourceMeta = [],\n onConfidenceScoreClick,\n isGTN = false,\n gtnName = null,\n shouldPopOnParent = false,\n allowTimezoneConversion = true,\n inputStyle,\n labelClassName,\n isLiveField = false,\n labelExtra,\n inputEmphasis = \"default\",\n riskDetails,\n isRiskAnalysisOpen = false,\n RiskDetailsCard,\n onAddGTNToDocument,\n formatDateForGTN,\n ...props\n },\n ref\n ) => {\n const { t } = useTranslation();\n\n /*** Emphasis skins ***/\n const showRiskSkin = Boolean(isRiskAnalysisOpen && riskDetails?.color);\n const emphasisModifiedSkin =\n inputEmphasis === \"modified\" && !errorMessage && !showRiskSkin;\n const emphasisDeletedSkin =\n inputEmphasis === \"deleted\" && !errorMessage && !showRiskSkin;\n const emphasisSuccessSkin =\n inputEmphasis === \"success\" && !errorMessage && !showRiskSkin;\n\n /*** States ***/\n const [isHovered, setIsHovered] = useState(false);\n const [tempDate, setTempDate] = useState<Dayjs | null>(null);\n const [lastUpdatedValue, setLastUpdatedValue] = useState<string | null>(\n null\n );\n const [isPickerOpen, setIsPickerOpen] = useState(false);\n\n /*** Constants ***/\n const finalDateFormat = dateFormat\n ? dateFormat\n : showTime\n ? UNIVERSAL_DATETIME_FORMAT\n : UNIVERSAL_DATE_FORMAT;\n const ID = props?.id || `date-picker-${generateShortUUID()}`;\n\n /*** Refs ***/\n const datePickerRef = useRef<any>(null);\n const suppressNextOpenRef = useRef(false);\n\n /*** Event Listeners ***/\n useEventListener(\"paste\", (e: ClipboardEvent) => {\n if (document.activeElement?.id === ID) {\n e.preventDefault();\n navigator.clipboard.readText().then((text) => {\n const date = tryParseFlexibleDate(text, showTime);\n if (date) {\n setDateIfValid(date);\n }\n });\n }\n });\n\n useEventListener(\"keydown\", (e: KeyboardEvent) => {\n if (\n e.key === KEYBOARD_KEYS.ENTER &&\n document.activeElement instanceof HTMLInputElement &&\n document.activeElement.id === ID\n ) {\n const date = tryParseFlexibleDate(document?.activeElement?.value, showTime);\n if (date) {\n setDateIfValid(date);\n }\n }\n });\n\n /*** Handlers ***/\n const handleAddGTNToDocument = useCallback(\n (_value: string | undefined) => {\n if (!onAddGTNToDocument) return;\n\n let formattedValue = _value || \"\";\n if (formatDateForGTN && _value) {\n formattedValue = formatDateForGTN(_value, {\n skipTimezone: true,\n withTime: showTime,\n });\n } else if (_value) {\n // Default formatting if no custom formatter provided\n const parsed = dayjs(_value);\n if (parsed.isValid()) {\n formattedValue = parsed.format(finalDateFormat);\n }\n }\n\n const keyValuePair = {\n key: gtnName,\n value: formattedValue,\n };\n\n onAddGTNToDocument(keyValuePair);\n },\n [onAddGTNToDocument, gtnName, formatDateForGTN, showTime, finalDateFormat]\n );\n\n const handleHidePickerFooter = useCallback(() => {\n const pickerFooter = document.getElementsByClassName(\n \"ant-picker-footer\"\n )[0] as HTMLElement;\n if (pickerFooter) {\n pickerFooter.style.display = \"none\";\n }\n }, []);\n\n const handleDateChange = useCallback(\n (date: Dayjs | null) => {\n if (!allowTimezoneConversion) {\n // Use ISO-like format for value storage (parseable by new Date() and dayjs)\n const isoFormat = showTime ? ISO_DATETIME_FORMAT : ISO_DATE_FORMAT;\n handleOnChange(date ? date.format(isoFormat) : null);\n // Dispatch custom pilot event for recording\n if (date) {\n const element = document.getElementById(ID);\n if (element) {\n const pilotEvent = new CustomEvent(\"pilot-date-change\", {\n bubbles: true,\n detail: {\n selector: `#${ID}`,\n value: date.format ? date.format(finalDateFormat) : date,\n type: \"date-change\",\n elementId: ID,\n },\n });\n element.dispatchEvent(pilotEvent);\n }\n }\n return;\n }\n if (date) {\n let utcDate;\n if (showTime) {\n utcDate = dayjs(date).utc().toISOString();\n } else {\n utcDate = dayjs(date)\n .utc()\n .add(dayjs(date).utcOffset(), \"minute\")\n .startOf(\"day\")\n .toISOString();\n }\n if (utcDate) {\n handleOnChange(utcDate);\n // Dispatch custom pilot event for recording\n const element = document.getElementById(ID);\n if (element) {\n const pilotEvent = new CustomEvent(\"pilot-date-change\", {\n bubbles: true,\n detail: {\n selector: `#${ID}`,\n value: date.format(finalDateFormat),\n type: \"date-change\",\n elementId: ID,\n },\n });\n element.dispatchEvent(pilotEvent);\n }\n }\n } else {\n handleOnChange(null);\n }\n },\n [allowTimezoneConversion, handleOnChange, showTime, ID, finalDateFormat]\n );\n\n const parseDate = useCallback(\n (str: any): Dayjs | null => {\n if (!str) return null;\n if (!allowTimezoneConversion) {\n try {\n // First try default dayjs parsing (handles ISO formats like \"YYYY-MM-DDTHH:mm:ss\")\n const defaultParsed = dayjs(str);\n if (defaultParsed.isValid()) {\n return defaultParsed;\n }\n // Then try parsing with display format for backward compatibility\n const parsed = dayjs(str, finalDateFormat);\n return parsed.isValid() ? parsed : null;\n } catch {\n return null;\n }\n }\n if (showTime) {\n // For time values, parse directly to preserve the local time\n const parsed = dayjs(str);\n return dayjs(parsed).isValid() ? parsed : null;\n } else {\n if (str?.toString()?.includes(\"Z\")) {\n const parsed = dayjs.utc(str);\n return dayjs(parsed).isValid() ? parsed : null;\n } else {\n const parsed = dayjs(str);\n return dayjs(parsed).isValid() ? parsed : null;\n }\n }\n },\n [allowTimezoneConversion, finalDateFormat, showTime]\n );\n\n const setDateIfValid = useCallback(\n (date: Dayjs | null) => {\n if (date?.isValid() || date === null) {\n setTempDate(date);\n // Use ISO-like format when not converting timezone (parseable by new Date() and dayjs)\n const isoFormat = showTime ? ISO_DATETIME_FORMAT : ISO_DATE_FORMAT;\n const formattedValue = allowTimezoneConversion\n ? date?.toISOString()\n : date\n ? date.format(isoFormat)\n : \"\";\n handleOnChange(formattedValue || null);\n\n // Dispatch custom pilot event for recording\n if (date?.isValid()) {\n const element = document.getElementById(ID);\n if (element) {\n const pilotEvent = new CustomEvent(\"pilot-date-change\", {\n bubbles: true,\n detail: {\n selector: `#${ID}`,\n value: date.format(finalDateFormat),\n type: \"date-change\",\n elementId: ID,\n },\n });\n element.dispatchEvent(pilotEvent);\n }\n }\n }\n },\n [allowTimezoneConversion, finalDateFormat, handleOnChange, ID, showTime]\n );\n\n /*** Effects ***/\n useEffect(() => {\n setTempDate(parseDate(value));\n }, [value, parseDate]);\n\n useEffect(() => {\n if (lastUpdatedValue) {\n setLastUpdatedValue(null);\n }\n }, [lastUpdatedValue]);\n\n // Listen for pilot playback events\n useEffect(() => {\n const element = document.getElementById(ID);\n if (!element) return;\n\n const handlePilotPlayback = (e: CustomEvent) => {\n const { value: playbackValue, type } = e.detail;\n if (type === \"date-playback\" && playbackValue) {\n const parsedDate = tryParseFlexibleDate(playbackValue, showTime);\n if (parsedDate && parsedDate.isValid()) {\n setTempDate(parsedDate);\n handleDateChange(parsedDate);\n\n setTimeout(() => {\n const pickerInput = element.querySelector(\"input\");\n if (pickerInput) {\n (pickerInput as HTMLInputElement).focus();\n setTimeout(() => {\n (pickerInput as HTMLInputElement).blur();\n }, 10);\n }\n\n if (datePickerRef.current) {\n try {\n const pickerInstance = datePickerRef.current as any;\n if (typeof pickerInstance.blur === \"function\") {\n pickerInstance.blur();\n }\n } catch {\n // Ignore errors\n }\n }\n\n setTimeout(() => {\n const openDropdowns = document.querySelectorAll(\n \".ant-picker-dropdown:not(.ant-picker-dropdown-hidden)\"\n );\n openDropdowns.forEach((dropdown) => {\n if (dropdown instanceof HTMLElement) {\n dropdown.style.display = \"none\";\n dropdown.classList.add(\"ant-picker-dropdown-hidden\");\n }\n });\n }, 50);\n }, 50);\n }\n }\n };\n\n element.addEventListener(\n \"pilot-date-playback\",\n handlePilotPlayback as EventListener\n );\n\n return () => {\n element.removeEventListener(\n \"pilot-date-playback\",\n handlePilotPlayback as EventListener\n );\n };\n }, [ID, finalDateFormat, handleDateChange, showTime]);\n\n const handleKeyDownCapture = useCallback((e: React.KeyboardEvent) => {\n if (e.key === KEYBOARD_KEYS.ENTER && !isPickerOpen) {\n e.preventDefault();\n e.stopPropagation();\n\n const form = (e.target as HTMLElement).closest('form');\n if (form) {\n const submitBtn = form.querySelector<HTMLButtonElement>('button[type=\"submit\"]');\n if (submitBtn) {\n submitBtn.click();\n } else {\n form.requestSubmit();\n }\n }\n }\n }, [isPickerOpen]);\n\n const handleOpenChange = useCallback((nextOpen: boolean) => {\n if (nextOpen && suppressNextOpenRef.current) {\n suppressNextOpenRef.current = false;\n setIsPickerOpen(false);\n return;\n }\n\n setIsPickerOpen(nextOpen);\n if (!nextOpen) {\n suppressNextOpenRef.current = true;\n requestAnimationFrame(() => {\n datePickerRef.current?.focus();\n requestAnimationFrame(() => {\n suppressNextOpenRef.current = false;\n });\n });\n }\n }, []);\n\n /*** Render ***/\n if (simpleMode) {\n return (\n <div onKeyDownCapture={handleKeyDownCapture}>\n <DatePicker\n {...props}\n showTime={showTime}\n open={isPickerOpen}\n format={finalDateFormat}\n placeholder={\n finalDateFormat === UNIVERSAL_DATETIME_FORMAT\n ? \"MM/DD/YYYY hh:mm\"\n : finalDateFormat\n }\n value={tempDate}\n needConfirm={false}\n onChange={(date) => {\n setTempDate(date);\n handleDateChange(date);\n setLastUpdatedValue(date?.toISOString() || null);\n }}\n className={className}\n showNow={false}\n onFocus={handleHidePickerFooter}\n onOpenChange={handleOpenChange}\n onBlur={(e) => {\n const inputValue = (e.target as HTMLInputElement).value;\n if (inputValue) {\n const parsedDate = tryParseFlexibleDate(inputValue, showTime);\n if (parsedDate) {\n setDateIfValid(parsedDate);\n }\n }\n }}\n ref={datePickerRef}\n disabled={disabled}\n id={ID}\n />\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\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={`w-full flex flex-col font-inter ${className || \"\"}`} onKeyDownCapture={handleKeyDownCapture}>\n {(label || labelExtra) ? (\n <label\n className={`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${!originalCase ? \"capitalize\" : \"\"} ${\n labelClassName || \"\"\n }`}\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 {(label || required || isRequiredConditional) && (\n <InputLabel label={label || \"\"} required={required || false} isRequiredConditional={isRequiredConditional || false} />\n )}\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 <Tooltip placement=\"top\" title={tooltip}>\n <div className=\"cursor-pointer\">\n <HelpIcon />\n </div>\n </Tooltip>\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 && onAddGTNToDocument ? (\n <button\n id=\"btn-date-field-add-to-document\"\n className=\"cursor-pointer\"\n onClick={() => handleAddGTNToDocument(value)}\n type=\"button\"\n >\n <AntTooltip placement=\"top\" title={t(\"Add to document\")}>\n <NoteAddOutlined\n className=\"text-primary-600\"\n sx={{\n fontSize: 16,\n }}\n />\n </AntTooltip>\n </button>\n ) : null}\n </div>\n </div>\n </label>\n ) : null}\n <DatePicker\n {...props}\n showTime={showTime ? { use12Hours: true } : false}\n open={isPickerOpen}\n format={finalDateFormat}\n placeholder={\n finalDateFormat === UNIVERSAL_DATETIME_FORMAT\n ? \"MM/DD/YYYY - HH:MM\"\n : finalDateFormat\n }\n className={cn(\n \"w-full h-8 text-inter font-medium dark:text-black-300\",\n errorMessage && \"border-red-400\",\n isRiskAnalysisOpen && riskDetails?.color && `bg-${riskDetails.color}-50 border-${riskDetails.color}-300`,\n emphasisDeletedSkin && \"!border-[var(--Error-200,#FECACA)] !bg-[var(--Error-50,#FEF2F2)] !text-[#475467]\",\n emphasisModifiedSkin && \"!border-[var(--Warning-200,#FEDF89)] !bg-[var(--Warning-50,#FFFAEB)]\",\n emphasisSuccessSkin && \"!border-[var(--Success-200,#BBF7D0)] !bg-[var(--Success-50,#F0FDF4)] !text-[#101828]\",\n )}\n styles={{\n root: {\n ...inputStyle,\n borderRadius: \"7px\",\n ...(emphasisDeletedSkin && {\n borderColor: \"var(--Error-200, #FECACA)\",\n backgroundColor: \"var(--Error-50, #FEF2F2)\",\n color: \"#475467\",\n }),\n ...(emphasisModifiedSkin && {\n borderColor: \"var(--Warning-200, #FEDF89)\",\n backgroundColor: \"var(--Warning-50, #FFFAEB)\",\n }),\n ...(emphasisSuccessSkin && {\n borderColor: \"var(--Success-200, #BBF7D0)\",\n backgroundColor: \"var(--Success-50, #F0FDF4)\",\n color: \"#101828\",\n }),\n },\n }}\n showNow={false}\n value={tempDate}\n onChange={(date) => {\n setTempDate(date);\n handleDateChange(date);\n setLastUpdatedValue(date?.toISOString() || null);\n }}\n onBlur={(e) => {\n const inputValue = (e.target as HTMLInputElement).value;\n if (inputValue) {\n const parsedDate = tryParseFlexibleDate(inputValue, showTime);\n if (parsedDate) {\n setTempDate(parsedDate);\n handleDateChange(parsedDate);\n }\n }\n }}\n needConfirm={needConfirm}\n ref={datePickerRef}\n disabled={disabled}\n inputReadOnly={false}\n onOpenChange={handleOpenChange}\n getPopupContainer={\n shouldPopOnParent\n ? (trigger) => trigger.parentElement as HTMLElement\n : () => document.body\n }\n id={ID}\n autoComplete=\"off\"\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 && riskDetails && isRiskAnalysisOpen && 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\nDateTimeField.displayName = \"DateTimeField\";\n\n"],"names":["dayjs","utc","customParseFormat","weekday","localeData","UNIVERSAL_DATE_FORMAT","UNIVERSAL_DATETIME_FORMAT","ISO_DATE_FORMAT","ISO_DATETIME_FORMAT","KEYBOARD_KEYS","FLEXIBLE_DATE_FORMATS","FLEXIBLE_DATETIME_FORMATS","generateShortUUID","tryParseFlexibleDate","dateStr","withTime","formats","format","parsed","defaultParsed","useEventListener","eventName","handler","savedHandler","useRef","useEffect","eventListener","event","DateTimeField","forwardRef","label","value","required","isRequiredConditional","disabled","className","errorMessage","handleOnChange","showTime","tags","needConfirm","simpleMode","originalCase","dateFormat","tooltip","isAiExtracted","confidenceScore","confidenceType","confidenceTooltip","sourceMeta","onConfidenceScoreClick","isGTN","gtnName","shouldPopOnParent","allowTimezoneConversion","inputStyle","labelClassName","isLiveField","labelExtra","inputEmphasis","riskDetails","isRiskAnalysisOpen","RiskDetailsCard","onAddGTNToDocument","formatDateForGTN","props","ref","t","useTranslation","showRiskSkin","emphasisModifiedSkin","emphasisDeletedSkin","emphasisSuccessSkin","isHovered","setIsHovered","useState","tempDate","setTempDate","lastUpdatedValue","setLastUpdatedValue","isPickerOpen","setIsPickerOpen","finalDateFormat","ID","datePickerRef","suppressNextOpenRef","text","date","setDateIfValid","handleAddGTNToDocument","useCallback","_value","formattedValue","handleHidePickerFooter","pickerFooter","handleDateChange","isoFormat","element","pilotEvent","utcDate","parseDate","str","handlePilotPlayback","e","playbackValue","type","parsedDate","pickerInput","pickerInstance","dropdown","handleKeyDownCapture","form","submitBtn","handleOpenChange","nextOpen","jsx","DatePicker","inputValue","jsxs","cn","InputLabel","BoltOutlined","shouldShowConfidenceScore","AIExtractedIndicator","Label","Tooltip","HelpIcon","getConfidenceScoreBadgeClass","AIStarIcon","getConfidenceScoreBadgeColor","getConfidenceScoreBadgeFill","getConfidenceScoreBadgeTextColor","AntTooltip","NoteAddOutlined","trigger","Typography"],"mappings":"uzBAuDAA,EAAM,OAAOC,EAAG,EAChBD,EAAM,OAAOE,EAAiB,EAC9BF,EAAM,OAAOG,EAAO,EACpBH,EAAM,OAAOI,EAAU,EAGhB,MAAMC,GAAwB,aACxBC,EAA4B,uBAGnCC,GAAkB,aAClBC,GAAsB,sBAGtBC,GAAgB,CACpB,MAAO,OACT,EAEMC,GAAwB,CAC5B,aACA,YACA,YACA,WAEA,WACA,UACA,UACA,SAEA,aACA,2BACA,sBACF,EAEMC,GAA4B,CAChC,uBACA,sBACA,sBACA,qBACA,qBACA,oBACA,oBACA,mBACA,mBACA,kBACA,kBACA,iBAEA,qBACA,oBACA,oBACA,mBACA,mBACA,kBACA,kBACA,iBACA,iBACA,gBACA,gBACA,eAEA,GAAGD,GAEH,2BACA,sBACF,EAKME,GAAoB,IACjB,KAAK,SAAS,SAAS,EAAE,EAAE,UAAU,EAAG,CAAC,EAO5CC,EAAuB,CAC3BC,EACAC,EAAoB,KACH,CACjB,GAAI,CAACD,EAAS,OAAO,KAErB,MAAME,EAAUD,EAAWJ,GAA4BD,GAGvD,UAAWO,KAAUD,EAAS,CAC5B,MAAME,EAASlB,EAAMc,EAASG,EAAQ,EAAI,EAC1C,GAAIC,EAAO,UACT,OAAOA,CAEX,CAGA,MAAMC,EAAgBnB,EAAMc,CAAO,EACnC,OAAIK,EAAc,UACTA,EAGF,IACT,EA6GMC,GAAmB,CACvBC,EACAC,IACG,CACH,MAAMC,EAAeC,EAAAA,OAAOF,CAAO,EAEnCG,EAAAA,UAAU,IAAM,CACdF,EAAa,QAAUD,CACzB,EAAG,CAACA,CAAO,CAAC,EAEZG,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAiBC,GACrBJ,EAAa,QAAQI,CAAK,EAC5B,gBAAS,iBAAiBN,EAAWK,CAAa,EAC3C,IAAM,CACX,SAAS,oBAAoBL,EAAWK,CAAa,CACvD,CACF,EAAG,CAACL,CAAS,CAAC,CAChB,EAqCaO,GAAgBC,EAAAA,WAC3B,CACE,CACE,MAAAC,EACA,MAAAC,EACA,SAAAC,EACA,sBAAAC,EAAwB,GACxB,SAAAC,EACA,UAAAC,EAAY,OACZ,aAAAC,EACA,eAAAC,EACA,SAAAC,EAAW,GACX,KAAAC,GACA,YAAAC,GAAc,GACd,WAAAC,GACA,aAAAC,GAAe,GACf,WAAAC,EAAa,OACb,QAAAC,EACA,cAAAC,GAAgB,GAChB,gBAAAC,EACA,eAAAC,EAAiB,OACjB,kBAAAC,EACA,WAAAC,GAAa,CAAA,EACb,uBAAAC,GACA,MAAAC,EAAQ,GACR,QAAAC,EAAU,KACV,kBAAAC,GAAoB,GACpB,wBAAAC,EAA0B,GAC1B,WAAAC,GACA,eAAAC,GACA,YAAAC,GAAc,GACd,WAAAC,EACA,cAAAC,EAAgB,UAChB,YAAAC,EACA,mBAAAC,EAAqB,GACrB,gBAAAC,EACA,mBAAAC,EACA,iBAAAC,EACA,GAAGC,CAAA,EAELC,KACG,CACH,KAAM,CAAE,EAAAC,EAAA,EAAMC,kBAAA,EAGRC,EAAe,GAAQR,GAAsBD,GAAa,OAC1DU,GACJX,IAAkB,YAAc,CAACvB,GAAgB,CAACiC,EAC9CE,GACJZ,IAAkB,WAAa,CAACvB,GAAgB,CAACiC,EAC7CG,GACJb,IAAkB,WAAa,CAACvB,GAAgB,CAACiC,EAG7C,CAACI,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAK,EAC1C,CAACC,GAAUC,CAAW,EAAIF,EAAAA,SAAuB,IAAI,EACrD,CAACG,GAAkBC,CAAmB,EAAIJ,EAAAA,SAC9C,IAAA,EAEI,CAACK,EAAcC,EAAe,EAAIN,EAAAA,SAAS,EAAK,EAGhDO,EAAkBvC,IAEpBL,EACEhC,EACAD,IACA8E,EAAKlB,GAAO,IAAM,eAAerD,IAAmB,GAGpDwE,EAAgB5D,EAAAA,OAAY,IAAI,EAChC6D,EAAsB7D,EAAAA,OAAO,EAAK,EAGxCJ,GAAiB,QAAU,GAAsB,CAC3C,SAAS,eAAe,KAAO+D,IACjC,EAAE,eAAA,EACF,UAAU,UAAU,SAAA,EAAW,KAAMG,GAAS,CAC5C,MAAMC,EAAO1E,EAAqByE,EAAMhD,CAAQ,EAC5CiD,GACFC,EAAeD,CAAI,CAEvB,CAAC,EAEL,CAAC,EAEDnE,GAAiB,UAAY,GAAqB,CAChD,GACE,EAAE,MAAQX,GAAc,OACxB,SAAS,yBAAyB,kBAClC,SAAS,cAAc,KAAO0E,EAC9B,CACA,MAAMI,EAAO1E,EAAqB,UAAU,eAAe,MAAOyB,CAAQ,EACtEiD,GACFC,EAAeD,CAAI,CAEvB,CACF,CAAC,EAGD,MAAME,GAAyBC,EAAAA,YAC5BC,GAA+B,CAC9B,GAAI,CAAC5B,EAAoB,OAEzB,IAAI6B,EAAiBD,GAAU,GAC/B,GAAI3B,GAAoB2B,EACtBC,EAAiB5B,EAAiB2B,EAAQ,CACxC,aAAc,GACd,SAAUrD,CAAA,CACX,UACQqD,EAAQ,CAEjB,MAAMzE,EAASlB,EAAM2F,CAAM,EACvBzE,EAAO,YACT0E,EAAiB1E,EAAO,OAAOgE,CAAe,EAElD,CAOAnB,EALqB,CACnB,IAAKX,EACL,MAAOwC,CAAA,CAGsB,CACjC,EACA,CAAC7B,EAAoBX,EAASY,EAAkB1B,EAAU4C,CAAe,CAAA,EAGrEW,GAAyBH,EAAAA,YAAY,IAAM,CAC/C,MAAMI,EAAe,SAAS,uBAC5B,mBAAA,EACA,CAAC,EACCA,IACFA,EAAa,MAAM,QAAU,OAEjC,EAAG,CAAA,CAAE,EAECC,EAAmBL,EAAAA,YACtBH,GAAuB,CACtB,GAAI,CAACjC,EAAyB,CAE5B,MAAM0C,EAAY1D,EAAW9B,GAAsBD,GAGnD,GAFA8B,EAAekD,EAAOA,EAAK,OAAOS,CAAS,EAAI,IAAI,EAE/CT,EAAM,CACR,MAAMU,EAAU,SAAS,eAAed,CAAE,EAC1C,GAAIc,EAAS,CACX,MAAMC,EAAa,IAAI,YAAY,oBAAqB,CACtD,QAAS,GACT,OAAQ,CACN,SAAU,IAAIf,CAAE,GAChB,MAAOI,EAAK,OAASA,EAAK,OAAOL,CAAe,EAAIK,EACpD,KAAM,cACN,UAAWJ,CAAA,CACb,CACD,EACDc,EAAQ,cAAcC,CAAU,CAClC,CACF,CACA,MACF,CACA,GAAIX,EAAM,CACR,IAAIY,EAUJ,GATI7D,EACF6D,EAAUnG,EAAMuF,CAAI,EAAE,IAAA,EAAM,YAAA,EAE5BY,EAAUnG,EAAMuF,CAAI,EACjB,IAAA,EACA,IAAIvF,EAAMuF,CAAI,EAAE,UAAA,EAAa,QAAQ,EACrC,QAAQ,KAAK,EACb,YAAA,EAEDY,EAAS,CACX9D,EAAe8D,CAAO,EAEtB,MAAMF,EAAU,SAAS,eAAed,CAAE,EAC1C,GAAIc,EAAS,CACX,MAAMC,EAAa,IAAI,YAAY,oBAAqB,CACtD,QAAS,GACT,OAAQ,CACN,SAAU,IAAIf,CAAE,GAChB,MAAOI,EAAK,OAAOL,CAAe,EAClC,KAAM,cACN,UAAWC,CAAA,CACb,CACD,EACDc,EAAQ,cAAcC,CAAU,CAClC,CACF,CACF,MACE7D,EAAe,IAAI,CAEvB,EACA,CAACiB,EAAyBjB,EAAgBC,EAAU6C,EAAID,CAAe,CAAA,EAGnEkB,GAAYV,EAAAA,YACfW,GAA2B,CAC1B,GAAI,CAACA,EAAK,OAAO,KACjB,GAAI,CAAC/C,EACH,GAAI,CAEF,MAAMnC,EAAgBnB,EAAMqG,CAAG,EAC/B,GAAIlF,EAAc,UAChB,OAAOA,EAGT,MAAMD,EAASlB,EAAMqG,EAAKnB,CAAe,EACzC,OAAOhE,EAAO,UAAYA,EAAS,IACrC,MAAQ,CACN,OAAO,IACT,CAEF,GAAIoB,EAAU,CAEZ,MAAMpB,EAASlB,EAAMqG,CAAG,EACxB,OAAOrG,EAAMkB,CAAM,EAAE,QAAA,EAAYA,EAAS,IAC5C,SACMmF,GAAK,SAAA,GAAY,SAAS,GAAG,EAAG,CAClC,MAAMnF,EAASlB,EAAM,IAAIqG,CAAG,EAC5B,OAAOrG,EAAMkB,CAAM,EAAE,QAAA,EAAYA,EAAS,IAC5C,KAAO,CACL,MAAMA,EAASlB,EAAMqG,CAAG,EACxB,OAAOrG,EAAMkB,CAAM,EAAE,QAAA,EAAYA,EAAS,IAC5C,CAEJ,EACA,CAACoC,EAAyB4B,EAAiB5C,CAAQ,CAAA,EAG/CkD,EAAiBE,EAAAA,YACpBH,GAAuB,CACtB,GAAIA,GAAM,WAAaA,IAAS,KAAM,CACpCV,EAAYU,CAAI,EAEhB,MAAMS,EAAY1D,EAAW9B,GAAsBD,GAC7CqF,EAAiBtC,EACnBiC,GAAM,YAAA,EACNA,EACEA,EAAK,OAAOS,CAAS,EACrB,GAIN,GAHA3D,EAAeuD,GAAkB,IAAI,EAGjCL,GAAM,UAAW,CACnB,MAAMU,EAAU,SAAS,eAAed,CAAE,EAC1C,GAAIc,EAAS,CACX,MAAMC,EAAa,IAAI,YAAY,oBAAqB,CACtD,QAAS,GACT,OAAQ,CACN,SAAU,IAAIf,CAAE,GAChB,MAAOI,EAAK,OAAOL,CAAe,EAClC,KAAM,cACN,UAAWC,CAAA,CACb,CACD,EACDc,EAAQ,cAAcC,CAAU,CAClC,CACF,CACF,CACF,EACA,CAAC5C,EAAyB4B,EAAiB7C,EAAgB8C,EAAI7C,CAAQ,CAAA,EAIzEb,EAAAA,UAAU,IAAM,CACdoD,EAAYuB,GAAUrE,CAAK,CAAC,CAC9B,EAAG,CAACA,EAAOqE,EAAS,CAAC,EAErB3E,EAAAA,UAAU,IAAM,CACVqD,IACFC,EAAoB,IAAI,CAE5B,EAAG,CAACD,EAAgB,CAAC,EAGrBrD,EAAAA,UAAU,IAAM,CACd,MAAMwE,EAAU,SAAS,eAAed,CAAE,EAC1C,GAAI,CAACc,EAAS,OAEd,MAAMK,EAAuBC,GAAmB,CAC9C,KAAM,CAAE,MAAOC,EAAe,KAAAC,CAAA,EAASF,EAAE,OACzC,GAAIE,IAAS,iBAAmBD,EAAe,CAC7C,MAAME,EAAa7F,EAAqB2F,EAAelE,CAAQ,EAC3DoE,GAAcA,EAAW,YAC3B7B,EAAY6B,CAAU,EACtBX,EAAiBW,CAAU,EAE3B,WAAW,IAAM,CACf,MAAMC,EAAcV,EAAQ,cAAc,OAAO,EAQjD,GAPIU,IACDA,EAAiC,MAAA,EAClC,WAAW,IAAM,CACdA,EAAiC,KAAA,CACpC,EAAG,EAAE,GAGHvB,EAAc,QAChB,GAAI,CACF,MAAMwB,EAAiBxB,EAAc,QACjC,OAAOwB,EAAe,MAAS,YACjCA,EAAe,KAAA,CAEnB,MAAQ,CAER,CAGF,WAAW,IAAM,CACO,SAAS,iBAC7B,uDAAA,EAEY,QAASC,GAAa,CAC9BA,aAAoB,cACtBA,EAAS,MAAM,QAAU,OACzBA,EAAS,UAAU,IAAI,4BAA4B,EAEvD,CAAC,CACH,EAAG,EAAE,CACP,EAAG,EAAE,EAET,CACF,EAEA,OAAAZ,EAAQ,iBACN,sBACAK,CAAA,EAGK,IAAM,CACXL,EAAQ,oBACN,sBACAK,CAAA,CAEJ,CACF,EAAG,CAACnB,EAAID,EAAiBa,EAAkBzD,CAAQ,CAAC,EAEpD,MAAMwE,GAAuBpB,cAAa,GAA2B,CACnE,GAAI,EAAE,MAAQjF,GAAc,OAAS,CAACuE,EAAc,CAClD,EAAE,eAAA,EACF,EAAE,gBAAA,EAEF,MAAM+B,EAAQ,EAAE,OAAuB,QAAQ,MAAM,EACrD,GAAIA,EAAM,CACR,MAAMC,EAAYD,EAAK,cAAiC,uBAAuB,EAC3EC,EACFA,EAAU,MAAA,EAEVD,EAAK,cAAA,CAET,CACF,CACF,EAAG,CAAC/B,CAAY,CAAC,EAEXiC,GAAmBvB,cAAawB,GAAsB,CAC1D,GAAIA,GAAY7B,EAAoB,QAAS,CAC3CA,EAAoB,QAAU,GAC9BJ,GAAgB,EAAK,EACrB,MACF,CAEAA,GAAgBiC,CAAQ,EACnBA,IACH7B,EAAoB,QAAU,GAC9B,sBAAsB,IAAM,CAC1BD,EAAc,SAAS,MAAA,EACvB,sBAAsB,IAAM,CAC1BC,EAAoB,QAAU,EAChC,CAAC,CACH,CAAC,EAEL,EAAG,CAAA,CAAE,EAGL,OAAI5C,GAEA0E,EAAAA,IAAC,MAAA,CAAI,iBAAkBL,GACrB,SAAAK,EAAAA,IAACC,EAAAA,WAAA,CACE,GAAGnD,EACJ,SAAA3B,EACA,KAAM0C,EACN,OAAQE,EACR,YACEA,IAAoB5E,EAChB,mBACA4E,EAEN,MAAON,GACP,YAAa,GACb,SAAWW,GAAS,CAClBV,EAAYU,CAAI,EAChBQ,EAAiBR,CAAI,EACrBR,EAAoBQ,GAAM,YAAA,GAAiB,IAAI,CACjD,EACA,UAAApD,EACA,QAAS,GACT,QAAS0D,GACT,aAAcoB,GACd,OAAS,GAAM,CACb,MAAMI,EAAc,EAAE,OAA4B,MAClD,GAAIA,EAAY,CACd,MAAMX,EAAa7F,EAAqBwG,EAAY/E,CAAQ,EACxDoE,GACFlB,EAAekB,CAAU,CAE7B,CACF,EACA,IAAKtB,EACL,SAAAlD,EACA,GAAIiD,CAAA,CAAA,EAER,EAKFmC,EAAAA,KAAC,MAAA,CACC,IAAApD,GACA,UAAWqD,EACT,wBACA9C,GAAatB,EACT,yDACA,EAAA,EAEN,aAAc,IAAMuB,EAAa,EAAI,EACrC,aAAc,IAAMA,EAAa,EAAK,EAErC,SAAA,CAAAvB,GAAS,CAACsB,EACT0C,MAAC,MAAA,CAAI,UAAU,2DAA2D,EACxE,KACJG,EAAAA,KAAC,OAAI,UAAW,mCAAmCnF,GAAa,EAAE,GAAI,iBAAkB2E,GACpF,SAAA,CAAAhF,GAAS4B,EACTyD,EAAAA,IAAC,QAAA,CACC,UAAW,yEAA0EzE,GAA8B,GAAf,YAAiB,IACnHc,IAAkB,EACpB,GAEA,SAAA8D,EAAAA,KAAC,MAAA,CAAI,UAAU,iEACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,mDACX,SAAA,EAAAxF,GAASE,GAAYC,IACrBkF,EAAAA,IAACK,GAAAA,WAAA,CAAW,MAAO1F,GAAS,GAAI,SAAUE,GAAY,GAAO,sBAAuBC,GAAyB,GAAO,EAErHwB,IACC0D,EAAAA,IAACM,GAAAA,aAAA,CACC,GAAI,CACF,SAAU,GACV,MAAO,2BACP,OAAQ,OAAA,CACV,CAAA,EAGH5E,IAAiB,CAAC6E,EAAAA,0BAA0B5E,CAAe,SAAM6E,GAAAA,qBAAA,EAAqB,EACvFR,EAAAA,IAACS,GAAAA,MAAA,CAAM,OAAQrF,EAAA,CAAM,EACpBK,GACCuE,EAAAA,IAACU,GAAA,CAAQ,UAAU,MAAM,MAAOjF,EAC9B,SAAAuE,EAAAA,IAAC,MAAA,CAAI,UAAU,iBACb,SAAAA,EAAAA,IAACW,YAAA,CAAA,CAAS,EACZ,EACF,EAEDpE,CAAA,EACH,EAEA4D,EAAAA,KAAC,MAAA,CAAI,UAAU,2CACX,SAAA,CAAAI,4BAA0B5E,CAAe,GAAKC,EAC9CoE,EAAAA,IAACU,GAAA,CACC,UAAU,UACV,MAAO7E,GAAqB,GAC5B,YAAgDA,GAAsB,KACtE,UAAU,iBAEV,SAAAsE,EAAAA,KAAC,MAAA,CACC,UAAWC,EACT,qEACAQ,EAAAA,6BAA6BhF,CAAc,CAAA,EAE7C,QAAS,IAAMG,KAAyBD,EAAU,EAElD,SAAA,CAAAkE,EAAAA,IAACa,GAAAA,WAAA,CACC,KAAM,GACN,KAAMC,EAAAA,6BAA6BlF,CAAc,EACjD,cAAemF,EAAAA,4BAA4BnF,CAAc,CAAA,CAAA,EAE3DuE,OAAC,QAAK,UAAWC,EAAG,gCAAiCY,mCAAiCpF,CAAc,CAAC,EAClG,SAAA,CAAAD,EAAgB,GAAA,CAAA,CACnB,CAAA,CAAA,CAAA,CACF,CAAA,EAEA,KACHK,GAASsB,GAAaV,EACrBoD,EAAAA,IAAC,SAAA,CACC,GAAG,iCACH,UAAU,iBACV,QAAS,IAAM1B,GAAuB1D,CAAK,EAC3C,KAAK,SAEL,eAACqG,UAAA,CAAW,UAAU,MAAM,MAAOjE,GAAE,iBAAiB,EACpD,SAAAgD,EAAAA,IAACkB,GAAAA,gBAAA,CACC,UAAU,mBACV,GAAI,CACF,SAAU,EAAA,CACZ,CAAA,CACF,CACF,CAAA,CAAA,EAEA,IAAA,CAAA,CACN,CAAA,CAAA,CACF,CAAA,CAAA,EAEA,KACJlB,EAAAA,IAACC,EAAAA,WAAA,CACE,GAAGnD,EACJ,SAAU3B,EAAW,CAAE,WAAY,IAAS,GAC5C,KAAM0C,EACN,OAAQE,EACR,YACEA,IAAoB5E,EAChB,qBACA4E,EAEN,UAAWqC,EACT,wDACAnF,GAAgB,iBAChByB,GAAsBD,GAAa,OAAS,MAAMA,EAAY,KAAK,cAAcA,EAAY,KAAK,OAClGW,IAAuB,mFACvBD,IAAwB,uEACxBE,IAAuB,sFAAA,EAEzB,OAAQ,CACN,KAAM,CACJ,GAAGjB,GACH,aAAc,MACd,GAAIgB,IAAuB,CACzB,YAAa,4BACb,gBAAiB,2BACjB,MAAO,SAAA,EAET,GAAID,IAAwB,CAC1B,YAAa,8BACb,gBAAiB,4BAAA,EAEnB,GAAIE,IAAuB,CACzB,YAAa,8BACb,gBAAiB,6BACjB,MAAO,SAAA,CACT,CACF,EAEF,QAAS,GACT,MAAOI,GACP,SAAWW,GAAS,CAClBV,EAAYU,CAAI,EAChBQ,EAAiBR,CAAI,EACrBR,EAAoBQ,GAAM,YAAA,GAAiB,IAAI,CACjD,EACA,OAAS,GAAM,CACb,MAAM8B,EAAc,EAAE,OAA4B,MAClD,GAAIA,EAAY,CACd,MAAMX,EAAa7F,EAAqBwG,EAAY/E,CAAQ,EACxDoE,IACF7B,EAAY6B,CAAU,EACtBX,EAAiBW,CAAU,EAE/B,CACF,EACA,YAAAlE,GACA,IAAK4C,EACL,SAAAlD,EACA,cAAe,GACf,aAAc+E,GACd,kBACE5D,GACKiF,GAAYA,EAAQ,cACrB,IAAM,SAAS,KAErB,GAAInD,EACJ,aAAa,KAAA,CAAA,EAEd/C,GACC+E,EAAAA,IAACoB,GAAAA,WAAA,CACC,UAAU,sBACV,WAAW,SACX,KAAK,cACL,QAAQ,SAEP,SAAAnG,CAAA,CAAA,CACH,EAEJ,EAECqC,GAAab,GAAeC,GAAsBC,GACjDqD,EAAAA,IAAC,MAAA,CACC,KAAK,UACL,SAAU,EACV,UAAU,oFACV,QAAU,GAAM,EAAE,gBAAA,EAClB,YAAc,GAAM,EAAE,eAAA,EACtB,UAAY,GAAM,CACZ,EAAE,MAAQ,UACZzC,EAAa,EAAK,CAEtB,EAEA,SAAAyC,EAAAA,IAACrD,GAAgB,YAAAF,CAAA,CAA0B,CAAA,CAAA,CAC7C,CAAA,CAAA,CAIR,CACF,EAEAhC,GAAc,YAAc"}
1
+ {"version":3,"file":"DateTimeField.cjs.js","sources":["../../../../src/components/forms/date-time-field/DateTimeField.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Tooltip as AntTooltip } from \"antd\";\nimport { DatePicker, type DatePickerProps } from \"antd\";\nimport cn from \"classnames\";\nimport { useTranslation } from 'react-i18next';\nimport dayjs, { Dayjs } from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\nimport localeData from \"dayjs/plugin/localeData\";\nimport utc from \"dayjs/plugin/utc\";\nimport weekday from \"dayjs/plugin/weekday\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { Label } from \"../../data-display/label/Label\";\nimport type { LabelType } from \"../../data-display/label/Label\";\nimport { AIExtractedIndicator } from \"../../icons/AIExtractedIndicator\";\nimport { AIStarIcon } from \"../../icons/AIStarIcon\";\nimport { HelpIcon } from \"../../icons/HelpIcon\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport { BoltOutlined, NoteAddOutlined } from \"@mui/icons-material\";\nimport { InputLabel } from \"../shared/InputLabel\";\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\n/** Visual emphasis for the date picker surface (background + border) */\nexport type DateTimeFieldEmphasis = \"default\" | \"modified\" | \"deleted\" | \"success\";\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\ndayjs.extend(utc);\ndayjs.extend(customParseFormat);\ndayjs.extend(weekday);\ndayjs.extend(localeData);\n\n// Date format constants\nexport const UNIVERSAL_DATE_FORMAT = \"MM/DD/YYYY\";\nexport const UNIVERSAL_DATETIME_FORMAT = \"MM/DD/YYYY - hh:mm A\";\n\n// ISO-like format for internal value storage (parseable by new Date() and dayjs)\nconst ISO_DATE_FORMAT = \"YYYY-MM-DD\";\nconst ISO_DATETIME_FORMAT = \"YYYY-MM-DDTHH:mm:ss\";\n\n// Keyboard keys constant\nconst KEYBOARD_KEYS = {\n ENTER: \"Enter\",\n} as const;\n\nconst FLEXIBLE_DATE_FORMATS = [\n \"MM/DD/YYYY\",\n \"M/DD/YYYY\",\n \"MM/D/YYYY\",\n \"M/D/YYYY\",\n\n \"MM/DD/YY\",\n \"M/DD/YY\",\n \"MM/D/YY\",\n \"M/D/YY\",\n\n \"YYYY-MM-DD\",\n \"YYYY-MM-DDTHH:mm:ss.SSSZ\",\n \"YYYY-MM-DDTHH:mm:ssZ\",\n];\n\nconst FLEXIBLE_DATETIME_FORMATS = [\n \"MM/DD/YYYY - hh:mm A\",\n \"M/DD/YYYY - hh:mm A\",\n \"MM/D/YYYY - hh:mm A\",\n \"M/D/YYYY - hh:mm A\",\n \"MM/DD/YYYY hh:mm A\",\n \"M/DD/YYYY hh:mm A\",\n \"MM/D/YYYY hh:mm A\",\n \"M/D/YYYY hh:mm A\",\n \"MM/DD/YYYY HH:mm\",\n \"M/DD/YYYY HH:mm\",\n \"MM/D/YYYY HH:mm\",\n \"M/D/YYYY HH:mm\",\n\n \"MM/DD/YY - hh:mm A\",\n \"M/DD/YY - hh:mm A\",\n \"MM/D/YY - hh:mm A\",\n \"M/D/YY - hh:mm A\",\n \"MM/DD/YY hh:mm A\",\n \"M/DD/YY hh:mm A\",\n \"MM/D/YY hh:mm A\",\n \"M/D/YY hh:mm A\",\n \"MM/DD/YY HH:mm\",\n \"M/DD/YY HH:mm\",\n \"MM/D/YY HH:mm\",\n \"M/D/YY HH:mm\",\n\n ...FLEXIBLE_DATE_FORMATS,\n\n \"YYYY-MM-DDTHH:mm:ss.SSSZ\",\n \"YYYY-MM-DDTHH:mm:ssZ\",\n];\n\n/**\n * Generate a short UUID\n */\nconst generateShortUUID = (): string => {\n return Math.random().toString(36).substring(2, 9);\n};\n\n/**\n * Try to parse a date string using multiple flexible formats\n * Handles single-digit months/days and 2-digit years\n */\nconst tryParseFlexibleDate = (\n dateStr: string,\n withTime: boolean = false\n): Dayjs | null => {\n if (!dateStr) return null;\n\n const formats = withTime ? FLEXIBLE_DATETIME_FORMATS : FLEXIBLE_DATE_FORMATS;\n\n // First try with explicit formats\n for (const format of formats) {\n const parsed = dayjs(dateStr, format, true); // strict mode\n if (parsed.isValid()) {\n return parsed;\n }\n }\n\n // Fallback to dayjs default parsing (handles ISO strings, etc.)\n const defaultParsed = dayjs(dateStr);\n if (defaultParsed.isValid()) {\n return defaultParsed;\n }\n\n return null;\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 DateTimeField component\n */\nexport interface DateTimeFieldProps\n extends Omit<DatePickerProps, \"onChange\" | \"value\"> {\n /** The label text to display above the date picker */\n label?: string;\n /** Current value of the date picker (ISO string or formatted date string) */\n value?: string;\n /** Additional CSS classes for the wrapper */\n className?: 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 /** Error message to display */\n errorMessage?: string;\n /** Whether the date picker is disabled */\n disabled?: boolean;\n /** Callback function called when date changes */\n handleOnChange: (value: string | null) => void;\n /** Whether to use simple mode (minimal styling) */\n simpleMode?: boolean;\n /** Whether to show time picker */\n showTime?: boolean;\n /** Custom date format */\n dateFormat?: string;\n /** Tooltip text for the help icon */\n tooltip?: string;\n /** Tags to display with the label */\n tags?: (string | LabelType)[];\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 name for the field */\n gtnName?: any;\n /** Whether to allow timezone conversion */\n allowTimezoneConversion?: boolean;\n /** Whether to allow copying */\n allowCopy?: boolean;\n /** Unique identifier for the date picker */\n id: string;\n /** Date picker type */\n picker?: \"date\" | \"week\" | \"month\" | \"quarter\" | \"year\";\n /** Whether popup should render inside parent element */\n shouldPopOnParent?: boolean;\n /** Custom inline styles for the input */\n inputStyle?: React.CSSProperties;\n /** Additional CSS classes for the label */\n labelClassName?: string;\n /** Optional extra content in the label row (e.g. actions, badges) */\n labelExtra?: React.ReactNode;\n /** Input surface style: `'modified'` — Warning-50/Warning-200; `'deleted'` — Error-50/Error-200; `'success'` — Success-50/Success-200. */\n inputEmphasis?: DateTimeFieldEmphasis;\n /** Whether this is a live field */\n isLiveField?: boolean;\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 /** Custom format date function for GTN values */\n formatDateForGTN?: (\n value: string,\n options: { skipTimezone: boolean; withTime: boolean }\n ) => string;\n}\n\n/**\n * Hook to add event listeners\n */\nconst useEventListener = <K extends keyof DocumentEventMap>(\n eventName: K,\n handler: (event: DocumentEventMap[K]) => void\n) => {\n const savedHandler = useRef(handler);\n\n useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n\n useEffect(() => {\n const eventListener = (event: DocumentEventMap[K]) =>\n savedHandler.current(event);\n document.addEventListener(eventName, eventListener);\n return () => {\n document.removeEventListener(eventName, eventListener);\n };\n }, [eventName]);\n};\n\n/**\n * DateTimeField component - A feature-rich date/time picker with support for\n * GTN integration, risk analysis, AI extraction indicators, and more.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <DateTimeField\n * id=\"start-date\"\n * label=\"Start Date\"\n * value={startDate}\n * handleOnChange={(date) => setStartDate(date)}\n * />\n *\n * // With time picker\n * <DateTimeField\n * id=\"event-datetime\"\n * label=\"Event Date & Time\"\n * value={eventDateTime}\n * handleOnChange={(date) => setEventDateTime(date)}\n * showTime={true}\n * />\n *\n * // With GTN integration\n * <DateTimeField\n * id=\"contract-date\"\n * label=\"Contract Date\"\n * value={contractDate}\n * handleOnChange={(date) => setContractDate(date)}\n * isGTN={true}\n * gtnName=\"contract_date\"\n * onAddGTNToDocument={(kv) => dispatch(setVariableValueToEditor(kv))}\n * />\n * ```\n */\nexport const DateTimeField = forwardRef<HTMLDivElement, DateTimeFieldProps>(\n (\n {\n label,\n value,\n required,\n isRequiredConditional = false,\n disabled,\n className = undefined,\n errorMessage,\n handleOnChange,\n showTime = true,\n tags,\n needConfirm = false,\n simpleMode,\n originalCase = false,\n dateFormat = undefined,\n tooltip,\n isAiExtracted = false,\n confidenceScore,\n confidenceType = \"high\",\n confidenceTooltip,\n sourceMeta = [],\n onConfidenceScoreClick,\n isGTN = false,\n gtnName = null,\n shouldPopOnParent = false,\n allowTimezoneConversion = true,\n inputStyle,\n labelClassName,\n isLiveField = false,\n labelExtra,\n inputEmphasis = \"default\",\n riskDetails,\n isRiskAnalysisOpen = false,\n RiskDetailsCard,\n onAddGTNToDocument,\n formatDateForGTN,\n ...props\n },\n ref\n ) => {\n const { t } = useTranslation();\n\n /*** Emphasis skins ***/\n const showRiskSkin = Boolean(isRiskAnalysisOpen && riskDetails?.color);\n const emphasisModifiedSkin =\n inputEmphasis === \"modified\" && !errorMessage && !showRiskSkin;\n const emphasisDeletedSkin =\n inputEmphasis === \"deleted\" && !errorMessage && !showRiskSkin;\n const emphasisSuccessSkin =\n inputEmphasis === \"success\" && !errorMessage && !showRiskSkin;\n\n /*** States ***/\n const [isHovered, setIsHovered] = useState(false);\n const [tempDate, setTempDate] = useState<Dayjs | null>(null);\n const [lastUpdatedValue, setLastUpdatedValue] = useState<string | null>(\n null\n );\n const [isPickerOpen, setIsPickerOpen] = useState(false);\n\n /*** Constants ***/\n const finalDateFormat = dateFormat\n ? dateFormat\n : showTime\n ? UNIVERSAL_DATETIME_FORMAT\n : UNIVERSAL_DATE_FORMAT;\n const ID = props?.id || `date-picker-${generateShortUUID()}`;\n\n /*** Refs ***/\n const datePickerRef = useRef<any>(null);\n const suppressNextOpenRef = useRef(false);\n\n /*** Event Listeners ***/\n useEventListener(\"paste\", (e: ClipboardEvent) => {\n if (document.activeElement?.id === ID) {\n e.preventDefault();\n navigator.clipboard.readText().then((text) => {\n const date = tryParseFlexibleDate(text, showTime);\n if (date) {\n setDateIfValid(date);\n }\n });\n }\n });\n\n useEventListener(\"keydown\", (e: KeyboardEvent) => {\n if (\n e.key === KEYBOARD_KEYS.ENTER &&\n document.activeElement instanceof HTMLInputElement &&\n document.activeElement.id === ID\n ) {\n const date = tryParseFlexibleDate(document?.activeElement?.value, showTime);\n if (date) {\n setDateIfValid(date);\n }\n }\n });\n\n /*** Handlers ***/\n const handleAddGTNToDocument = useCallback(\n (_value: string | undefined) => {\n if (!onAddGTNToDocument) return;\n\n let formattedValue = _value || \"\";\n if (formatDateForGTN && _value) {\n formattedValue = formatDateForGTN(_value, {\n skipTimezone: true,\n withTime: showTime,\n });\n } else if (_value) {\n // Default formatting if no custom formatter provided\n const parsed = dayjs(_value);\n if (parsed.isValid()) {\n formattedValue = parsed.format(finalDateFormat);\n }\n }\n\n const keyValuePair = {\n key: gtnName,\n value: formattedValue,\n };\n\n onAddGTNToDocument(keyValuePair);\n },\n [onAddGTNToDocument, gtnName, formatDateForGTN, showTime, finalDateFormat]\n );\n\n const handleHidePickerFooter = useCallback(() => {\n const pickerFooter = document.getElementsByClassName(\n \"ant-picker-footer\"\n )[0] as HTMLElement;\n if (pickerFooter) {\n pickerFooter.style.display = \"none\";\n }\n }, []);\n\n const handleDateChange = useCallback(\n (date: Dayjs | null) => {\n if (!allowTimezoneConversion) {\n // Use ISO-like format for value storage (parseable by new Date() and dayjs)\n const isoFormat = showTime ? ISO_DATETIME_FORMAT : ISO_DATE_FORMAT;\n handleOnChange(date ? date.format(isoFormat) : null);\n // Dispatch custom pilot event for recording\n if (date) {\n const element = document.getElementById(ID);\n if (element) {\n const pilotEvent = new CustomEvent(\"pilot-date-change\", {\n bubbles: true,\n detail: {\n selector: `#${ID}`,\n value: date.format ? date.format(finalDateFormat) : date,\n type: \"date-change\",\n elementId: ID,\n },\n });\n element.dispatchEvent(pilotEvent);\n }\n }\n return;\n }\n if (date) {\n let utcDate;\n if (showTime) {\n utcDate = dayjs(date).utc().toISOString();\n } else {\n utcDate = dayjs(date)\n .utc()\n .add(dayjs(date).utcOffset(), \"minute\")\n .startOf(\"day\")\n .toISOString();\n }\n if (utcDate) {\n handleOnChange(utcDate);\n // Dispatch custom pilot event for recording\n const element = document.getElementById(ID);\n if (element) {\n const pilotEvent = new CustomEvent(\"pilot-date-change\", {\n bubbles: true,\n detail: {\n selector: `#${ID}`,\n value: date.format(finalDateFormat),\n type: \"date-change\",\n elementId: ID,\n },\n });\n element.dispatchEvent(pilotEvent);\n }\n }\n } else {\n handleOnChange(null);\n }\n },\n [allowTimezoneConversion, handleOnChange, showTime, ID, finalDateFormat]\n );\n\n const parseDate = useCallback(\n (str: any): Dayjs | null => {\n if (!str) return null;\n if (!allowTimezoneConversion) {\n try {\n // First try default dayjs parsing (handles ISO formats like \"YYYY-MM-DDTHH:mm:ss\")\n const defaultParsed = dayjs(str);\n if (defaultParsed.isValid()) {\n return defaultParsed;\n }\n // Then try parsing with display format for backward compatibility\n const parsed = dayjs(str, finalDateFormat);\n return parsed.isValid() ? parsed : null;\n } catch {\n return null;\n }\n }\n if (showTime) {\n // For time values, parse directly to preserve the local time\n const parsed = dayjs(str);\n return dayjs(parsed).isValid() ? parsed : null;\n } else {\n if (str?.toString()?.includes(\"Z\")) {\n const parsed = dayjs.utc(str);\n return dayjs(parsed).isValid() ? parsed : null;\n } else {\n const parsed = dayjs(str);\n return dayjs(parsed).isValid() ? parsed : null;\n }\n }\n },\n [allowTimezoneConversion, finalDateFormat, showTime]\n );\n\n const setDateIfValid = useCallback(\n (date: Dayjs | null) => {\n if (date?.isValid() || date === null) {\n setTempDate(date);\n // Use ISO-like format when not converting timezone (parseable by new Date() and dayjs)\n const isoFormat = showTime ? ISO_DATETIME_FORMAT : ISO_DATE_FORMAT;\n const formattedValue = allowTimezoneConversion\n ? date?.toISOString()\n : date\n ? date.format(isoFormat)\n : \"\";\n handleOnChange(formattedValue || null);\n\n // Dispatch custom pilot event for recording\n if (date?.isValid()) {\n const element = document.getElementById(ID);\n if (element) {\n const pilotEvent = new CustomEvent(\"pilot-date-change\", {\n bubbles: true,\n detail: {\n selector: `#${ID}`,\n value: date.format(finalDateFormat),\n type: \"date-change\",\n elementId: ID,\n },\n });\n element.dispatchEvent(pilotEvent);\n }\n }\n }\n },\n [allowTimezoneConversion, finalDateFormat, handleOnChange, ID, showTime]\n );\n\n /*** Effects ***/\n useEffect(() => {\n setTempDate(parseDate(value));\n }, [value, parseDate]);\n\n useEffect(() => {\n if (lastUpdatedValue) {\n setLastUpdatedValue(null);\n }\n }, [lastUpdatedValue]);\n\n // Listen for pilot playback events\n useEffect(() => {\n const element = document.getElementById(ID);\n if (!element) return;\n\n const handlePilotPlayback = (e: CustomEvent) => {\n const { value: playbackValue, type } = e.detail;\n if (type === \"date-playback\" && playbackValue) {\n const parsedDate = tryParseFlexibleDate(playbackValue, showTime);\n if (parsedDate && parsedDate.isValid()) {\n setTempDate(parsedDate);\n handleDateChange(parsedDate);\n\n setTimeout(() => {\n const pickerInput = element.querySelector(\"input\");\n if (pickerInput) {\n (pickerInput as HTMLInputElement).focus();\n setTimeout(() => {\n (pickerInput as HTMLInputElement).blur();\n }, 10);\n }\n\n if (datePickerRef.current) {\n try {\n const pickerInstance = datePickerRef.current as any;\n if (typeof pickerInstance.blur === \"function\") {\n pickerInstance.blur();\n }\n } catch {\n // Ignore errors\n }\n }\n\n setTimeout(() => {\n const openDropdowns = document.querySelectorAll(\n \".ant-picker-dropdown:not(.ant-picker-dropdown-hidden)\"\n );\n openDropdowns.forEach((dropdown) => {\n if (dropdown instanceof HTMLElement) {\n dropdown.style.display = \"none\";\n dropdown.classList.add(\"ant-picker-dropdown-hidden\");\n }\n });\n }, 50);\n }, 50);\n }\n }\n };\n\n element.addEventListener(\n \"pilot-date-playback\",\n handlePilotPlayback as EventListener\n );\n\n return () => {\n element.removeEventListener(\n \"pilot-date-playback\",\n handlePilotPlayback as EventListener\n );\n };\n }, [ID, finalDateFormat, handleDateChange, showTime]);\n\n const handleKeyDownCapture = useCallback((e: React.KeyboardEvent) => {\n if (e.key === KEYBOARD_KEYS.ENTER && !isPickerOpen) {\n e.preventDefault();\n e.stopPropagation();\n\n const form = (e.target as HTMLElement).closest('form');\n if (form) {\n const submitBtn = form.querySelector<HTMLButtonElement>('button[type=\"submit\"]');\n if (submitBtn) {\n submitBtn.click();\n } else {\n form.requestSubmit();\n }\n }\n }\n }, [isPickerOpen]);\n\n const handleOpenChange = useCallback((nextOpen: boolean) => {\n if (nextOpen && suppressNextOpenRef.current) {\n suppressNextOpenRef.current = false;\n setIsPickerOpen(false);\n return;\n }\n\n setIsPickerOpen(nextOpen);\n if (!nextOpen) {\n suppressNextOpenRef.current = true;\n requestAnimationFrame(() => {\n datePickerRef.current?.focus();\n requestAnimationFrame(() => {\n suppressNextOpenRef.current = false;\n });\n });\n }\n }, []);\n\n /*** Render ***/\n if (simpleMode) {\n return (\n <div onKeyDownCapture={handleKeyDownCapture}>\n <DatePicker\n {...props}\n showTime={showTime}\n open={isPickerOpen}\n format={finalDateFormat}\n placeholder={\n finalDateFormat === UNIVERSAL_DATETIME_FORMAT\n ? \"MM/DD/YYYY hh:mm\"\n : finalDateFormat\n }\n value={tempDate}\n needConfirm={false}\n onChange={(date) => {\n setTempDate(date);\n handleDateChange(date);\n setLastUpdatedValue(date?.toISOString() || null);\n }}\n className={className}\n showNow={false}\n onFocus={handleHidePickerFooter}\n onOpenChange={handleOpenChange}\n onBlur={(e) => {\n const inputValue = (e.target as HTMLInputElement).value;\n if (inputValue) {\n const parsedDate = tryParseFlexibleDate(inputValue, showTime);\n if (parsedDate) {\n setDateIfValid(parsedDate);\n }\n }\n }}\n ref={datePickerRef}\n disabled={disabled}\n id={ID}\n />\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\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={`w-full flex flex-col font-inter ${className || \"\"}`} onKeyDownCapture={handleKeyDownCapture}>\n {(label || labelExtra) ? (\n <label\n className={`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${!originalCase ? \"capitalize\" : \"\"} ${\n labelClassName || \"\"\n }`}\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 {(label || required || isRequiredConditional) && (\n <InputLabel label={label || \"\"} required={required || false} isRequiredConditional={isRequiredConditional || false} />\n )}\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 <Tooltip placement=\"top\" title={tooltip}>\n <div className=\"cursor-pointer\">\n <HelpIcon className=\"w-icon-sm h-icon-sm\" />\n </div>\n </Tooltip>\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 && onAddGTNToDocument ? (\n <button\n id=\"btn-date-field-add-to-document\"\n className=\"cursor-pointer\"\n onClick={() => handleAddGTNToDocument(value)}\n type=\"button\"\n >\n <AntTooltip placement=\"top\" title={t(\"Add to document\")}>\n <NoteAddOutlined\n className=\"text-primary-600\"\n sx={{\n fontSize: 16,\n }}\n />\n </AntTooltip>\n </button>\n ) : null}\n </div>\n </div>\n </label>\n ) : null}\n <DatePicker\n {...props}\n showTime={showTime ? { use12Hours: true } : false}\n open={isPickerOpen}\n format={finalDateFormat}\n placeholder={\n finalDateFormat === UNIVERSAL_DATETIME_FORMAT\n ? \"MM/DD/YYYY - HH:MM\"\n : finalDateFormat\n }\n className={cn(\n \"w-full h-8 text-sm font-medium dark:text-black-300\",\n errorMessage && \"border-red-400\",\n isRiskAnalysisOpen && riskDetails?.color && `bg-${riskDetails.color}-50 border-${riskDetails.color}-300`,\n emphasisDeletedSkin && \"!border-[var(--Error-200,#FECACA)] !bg-[var(--Error-50,#FEF2F2)] !text-[#475467]\",\n emphasisModifiedSkin && \"!border-[var(--Warning-200,#FEDF89)] !bg-[var(--Warning-50,#FFFAEB)]\",\n emphasisSuccessSkin && \"!border-[var(--Success-200,#BBF7D0)] !bg-[var(--Success-50,#F0FDF4)] !text-[#101828]\",\n )}\n styles={{\n root: {\n ...inputStyle,\n borderRadius: \"7px\",\n ...(emphasisDeletedSkin && {\n borderColor: \"var(--Error-200, #FECACA)\",\n backgroundColor: \"var(--Error-50, #FEF2F2)\",\n color: \"#475467\",\n }),\n ...(emphasisModifiedSkin && {\n borderColor: \"var(--Warning-200, #FEDF89)\",\n backgroundColor: \"var(--Warning-50, #FFFAEB)\",\n }),\n ...(emphasisSuccessSkin && {\n borderColor: \"var(--Success-200, #BBF7D0)\",\n backgroundColor: \"var(--Success-50, #F0FDF4)\",\n color: \"#101828\",\n }),\n },\n }}\n showNow={false}\n value={tempDate}\n onChange={(date) => {\n setTempDate(date);\n handleDateChange(date);\n setLastUpdatedValue(date?.toISOString() || null);\n }}\n onBlur={(e) => {\n const inputValue = (e.target as HTMLInputElement).value;\n if (inputValue) {\n const parsedDate = tryParseFlexibleDate(inputValue, showTime);\n if (parsedDate) {\n setTempDate(parsedDate);\n handleDateChange(parsedDate);\n }\n }\n }}\n needConfirm={needConfirm}\n ref={datePickerRef}\n disabled={disabled}\n inputReadOnly={false}\n onOpenChange={handleOpenChange}\n getPopupContainer={\n shouldPopOnParent\n ? (trigger) => trigger.parentElement as HTMLElement\n : () => document.body\n }\n id={ID}\n autoComplete=\"off\"\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 && riskDetails && isRiskAnalysisOpen && 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\nDateTimeField.displayName = \"DateTimeField\";\n\n"],"names":["dayjs","utc","customParseFormat","weekday","localeData","UNIVERSAL_DATE_FORMAT","UNIVERSAL_DATETIME_FORMAT","ISO_DATE_FORMAT","ISO_DATETIME_FORMAT","KEYBOARD_KEYS","FLEXIBLE_DATE_FORMATS","FLEXIBLE_DATETIME_FORMATS","generateShortUUID","tryParseFlexibleDate","dateStr","withTime","formats","format","parsed","defaultParsed","useEventListener","eventName","handler","savedHandler","useRef","useEffect","eventListener","event","DateTimeField","forwardRef","label","value","required","isRequiredConditional","disabled","className","errorMessage","handleOnChange","showTime","tags","needConfirm","simpleMode","originalCase","dateFormat","tooltip","isAiExtracted","confidenceScore","confidenceType","confidenceTooltip","sourceMeta","onConfidenceScoreClick","isGTN","gtnName","shouldPopOnParent","allowTimezoneConversion","inputStyle","labelClassName","isLiveField","labelExtra","inputEmphasis","riskDetails","isRiskAnalysisOpen","RiskDetailsCard","onAddGTNToDocument","formatDateForGTN","props","ref","t","useTranslation","showRiskSkin","emphasisModifiedSkin","emphasisDeletedSkin","emphasisSuccessSkin","isHovered","setIsHovered","useState","tempDate","setTempDate","lastUpdatedValue","setLastUpdatedValue","isPickerOpen","setIsPickerOpen","finalDateFormat","ID","datePickerRef","suppressNextOpenRef","text","date","setDateIfValid","handleAddGTNToDocument","useCallback","_value","formattedValue","handleHidePickerFooter","pickerFooter","handleDateChange","isoFormat","element","pilotEvent","utcDate","parseDate","str","handlePilotPlayback","e","playbackValue","type","parsedDate","pickerInput","pickerInstance","dropdown","handleKeyDownCapture","form","submitBtn","handleOpenChange","nextOpen","jsx","DatePicker","inputValue","jsxs","cn","InputLabel","BoltOutlined","shouldShowConfidenceScore","AIExtractedIndicator","Label","Tooltip","HelpIcon","getConfidenceScoreBadgeClass","AIStarIcon","getConfidenceScoreBadgeColor","getConfidenceScoreBadgeFill","getConfidenceScoreBadgeTextColor","AntTooltip","NoteAddOutlined","trigger","Typography"],"mappings":"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"}