@lax-wp/design-system 0.14.1 → 0.14.3

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),B=require("../../../../forms/currency-input/currency.constant.cjs.js"),K=require("../../../../../utils/countryFlags.cjs.js"),F=require("../../../../../_virtual/index.cjs.js"),r=require("react"),U=require("../../context.cjs.js"),m=new Map;let b=null;const O=({id:n,value:s,onChange:d,onBlur:h,currencyCode:E="USD",autoFocus:q=!1,inputStyle:M,disabled:y=!1})=>{const{openCurrencyDropdown:g,closeCurrencyDropdown:k,currencyDropdownConfig:o,setCurrencyForCell:C,getCurrencyForCell:T}=r.useContext(U.TableContext),p=T?.(n)||E||"USD",[u,v]=r.useState(p),[R,S]=r.useState(s),c=r.useRef(s),a=r.useRef(null),x=r.useRef(null),i=r.useRef(!1),w=r.useRef(d);r.useEffect(()=>{c.current=R},[R]),r.useEffect(()=>{w.current=d},[d]);const D=r.useRef(!1);r.useEffect(()=>{D.current||(S(s),c.current=s,D.current=!0)},[s]),r.useEffect(()=>{p!==u&&v(p)},[p,u]),r.useLayoutEffect(()=>{const e=a.current;if(!e)return;const t=m.get(n);t?(e.value=c.current||"",e.focus(),e.setSelectionRange(t.start,t.end)):b!==n&&(e.value=c.current||"",e.focus())},[]);const N=e=>{if(e==null||e==="")return"";const t=Number(e);return isNaN(t)?String(e):t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},I=e=>{const t=e.target.value;if(t!==""&&(Number(t)<0||!/^\d*\.?\d*$/.test(t))){e.target.value=c.current==="0"?"":c.current||"";return}m.set(n,{start:e.target.selectionStart??0,end:e.target.selectionEnd??0});const f=t===""||t===null||t===void 0?"0":t;S(f),c.current=f,d(f,u)},L=()=>{a.current&&(a.current.value=c.current||"")},P=r.useCallback(()=>{b=n,m.delete(n),a.current&&(a.current.value=N(c.current)),setTimeout(()=>{!i.current&&!o&&h?.()},150),requestAnimationFrame(()=>{b=null})},[n,h,o]),j=r.useCallback(e=>{v(e),C?.(n,e);const t=c.current,f=t===""||t===null||t===void 0?"0":t;w.current(f,e),i.current=!1},[n,C]),_=r.useCallback(e=>{if(e.stopPropagation(),e.preventDefault(),i.current=!0,o)k?.(),i.current=!1;else if(x.current&&g){const t=x.current.getBoundingClientRect();g({anchorRect:t,currentCurrency:u,onSelect:j})}},[o,g,k,u,j]);return r.useEffect(()=>{o||setTimeout(()=>{i.current=!1},100)},[o]),l.jsx("div",{className:"flex flex-col gap-0 mb-0 w-full h-full",children:l.jsxs("label",{className:"relative block w-full h-full",children:[l.jsx("span",{className:"absolute inset-y-0 left-1 flex items-center pl-3 py-1.5 text-neutral-900 dark:text-white z-10",children:B.CURRENCY_SYMBOLS[u]}),l.jsx("input",{ref:a,placeholder:"0.00",type:"text",inputMode:"decimal",className:F("pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium","text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600","border-gray-300 dark:border-black-600","disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400"),onChange:I,onFocus:L,onBlur:P,onKeyDown:e=>{e.stopPropagation(),!(e.key.length>1||e.ctrlKey||e.metaKey)&&(e.key>="0"&&e.key<="9"||e.key==="."&&!e.currentTarget.value.includes(".")||e.preventDefault())},defaultValue:N(s),id:n,style:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",...M},autoComplete:"off",autoFocus:q,disabled:y}),l.jsx("div",{ref:x,className:F("absolute inset-y-0 right-1 flex items-center h-full",y?"pointer-events-none opacity-50":"cursor-pointer"),onClick:_,onMouseDown:e=>{e.stopPropagation(),e.preventDefault(),i.current=!0},children:l.jsxs("div",{className:"px-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors",children:[K.getFlagComponent(u),l.jsx("span",{className:"font-medium",children:u}),l.jsx("svg",{className:"w-3 h-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:l.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})})]})})};exports.InlineCurrencyField=O;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),B=require("../../../../forms/currency-input/currency.constant.cjs.js"),K=require("../../../../../utils/countryFlags.cjs.js"),F=require("../../../../../_virtual/index.cjs.js"),r=require("react"),U=require("../../context.cjs.js"),m=new Map;let b=null;const O=({id:n,value:s,onChange:d,onBlur:y,currencyCode:E="USD",autoFocus:q=!1,inputStyle:M,disabled:h=!1})=>{const{openCurrencyDropdown:x,closeCurrencyDropdown:k,currencyDropdownConfig:o,setCurrencyForCell:C,getCurrencyForCell:T}=r.useContext(U.TableContext),p=T?.(n)||E||"USD",[u,v]=r.useState(p),[R,S]=r.useState(s),c=r.useRef(s),a=r.useRef(null),g=r.useRef(null),i=r.useRef(!1),w=r.useRef(d);r.useEffect(()=>{c.current=R},[R]),r.useEffect(()=>{w.current=d},[d]);const D=r.useRef(!1);r.useEffect(()=>{D.current||(S(s),c.current=s,D.current=!0)},[s]),r.useEffect(()=>{p!==u&&v(p)},[p,u]),r.useLayoutEffect(()=>{const e=a.current;if(!e)return;const t=m.get(n);t?(e.value=c.current||"",e.focus(),e.setSelectionRange(t.start,t.end)):b!==n&&(e.value=c.current||"",e.focus())},[]);const N=e=>{if(e==null||e==="")return"";const t=Number(e);return isNaN(t)?String(e):t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},I=e=>{const t=e.target.value;if(t!==""&&(Number(t)<0||!/^\d*\.?\d*$/.test(t))){e.target.value=c.current==="0"?"":c.current||"";return}m.set(n,{start:e.target.selectionStart??0,end:e.target.selectionEnd??0});const f=t===""||t===null||t===void 0?"0":t;S(f),c.current=f,d(f,u)},L=()=>{a.current&&(a.current.value=c.current||"")},P=r.useCallback(()=>{b=n,m.delete(n),a.current&&(a.current.value=N(c.current)),setTimeout(()=>{!i.current&&!o&&y?.()},150),requestAnimationFrame(()=>{b=null})},[n,y,o]),j=r.useCallback(e=>{v(e),C?.(n,e);const t=c.current,f=t===""||t===null||t===void 0?"0":t;w.current(f,e),i.current=!1},[n,C]),_=r.useCallback(e=>{if(e.stopPropagation(),e.preventDefault(),i.current=!0,o)k?.(),i.current=!1;else if(g.current&&x){const t=g.current.getBoundingClientRect();x({anchorRect:t,currentCurrency:u,onSelect:j})}},[o,x,k,u,j]);return r.useEffect(()=>{o||setTimeout(()=>{i.current=!1},100)},[o]),l.jsx("div",{className:"flex flex-col gap-0 mb-0 w-full h-full",children:l.jsxs("label",{className:"relative block w-full h-full",children:[l.jsx("span",{className:"absolute inset-y-0 left-1 flex items-center pl-3 py-1.5 text-neutral-900 dark:text-white z-10",children:B.CURRENCY_SYMBOLS[u]}),l.jsx("input",{ref:a,placeholder:"0.00",type:"text",inputMode:"decimal",className:F("pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium","text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600","border-gray-300 dark:border-black-600","disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400"),onChange:I,onFocus:L,onBlur:P,onKeyDown:e=>{e.stopPropagation(),!(e.key.length>1||e.ctrlKey||e.metaKey)&&(e.key>="0"&&e.key<="9"||e.key==="."&&!e.currentTarget.value.includes(".")||e.preventDefault())},defaultValue:N(s),id:n,style:{border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",...M},autoComplete:"off",autoFocus:q,disabled:h}),l.jsx("div",{ref:g,className:F("absolute inset-y-0 right-1 flex items-center h-full",h?"pointer-events-none opacity-50":"cursor-pointer"),onClick:_,onMouseDown:e=>{e.stopPropagation(),e.preventDefault(),i.current=!0},children:l.jsxs("div",{className:"px-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors",children:[K.getFlagComponent(u),l.jsx("span",{className:"font-medium",children:u}),l.jsx("svg",{className:"w-3 h-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:l.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})})]})})};exports.InlineCurrencyField=O;
2
2
  //# sourceMappingURL=InlineCurrencyField.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InlineCurrencyField.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineCurrencyField.tsx"],"sourcesContent":["import { CURRENCY_SYMBOLS } from '../../../../forms/currency-input/currency.constant';\nimport { getFlagComponent } from '../../../../../utils/countryFlags';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\n\ntype InlineCurrencyFieldProps = {\n id: string;\n value: string;\n onChange: (numericValue: string, currencyCode: string) => void;\n onBlur?: () => void;\n currencyCode: string;\n autoFocus?: boolean;\n inputStyle?: React.CSSProperties;\n disabled?: boolean;\n};\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\n\nexport const InlineCurrencyField: React.FC<InlineCurrencyFieldProps> = ({\n id,\n value,\n onChange,\n onBlur,\n currencyCode = 'USD',\n autoFocus = false,\n inputStyle,\n disabled = false,\n}) => {\n const { openCurrencyDropdown, closeCurrencyDropdown, currencyDropdownConfig, setCurrencyForCell, getCurrencyForCell } = useContext(TableContext);\n const contextCurrency = getCurrencyForCell?.(id);\n const effectiveCurrency = contextCurrency || currencyCode || 'USD';\n const [selectedCurrency, setSelectedCurrency] = useState<string>(effectiveCurrency);\n const [internalValue, setInternalValue] = useState(value);\n const internalValueRef = useRef(value);\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const isInteractingRef = useRef(false);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n internalValueRef.current = internalValue;\n }, [internalValue]);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const hasInitializedRef = useRef(false);\n useEffect(() => {\n if (!hasInitializedRef.current) {\n setInternalValue(value);\n internalValueRef.current = value;\n hasInitializedRef.current = true;\n }\n }, [value]);\n\n useEffect(() => {\n if (effectiveCurrency !== selectedCurrency) {\n setSelectedCurrency(effectiveCurrency);\n }\n }, [effectiveCurrency, selectedCurrency]);\n\n useLayoutEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n const cached = _cursorPositionCache.get(id);\n if (cached) {\n el.value = internalValueRef.current || '';\n el.focus();\n el.setSelectionRange(cached.start, cached.end);\n } else if (_blurringCellKey !== id) {\n el.value = internalValueRef.current || '';\n el.focus();\n }\n }, []);\n\n const formatCurrency = (targetValue: string | number | null | undefined) => {\n if (targetValue === null || targetValue === undefined || targetValue === '') return '';\n const number = Number(targetValue);\n if (isNaN(number)) return String(targetValue);\n return number.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n };\n\n const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const _value = e.target.value;\n if (_value !== '' && (Number(_value) < 0 || !/^\\d*\\.?\\d*$/.test(_value))) {\n e.target.value = internalValueRef.current === '0' ? '' : internalValueRef.current || '';\n return;\n }\n\n _cursorPositionCache.set(id, {\n start: e.target.selectionStart ?? 0,\n end: e.target.selectionEnd ?? 0,\n });\n\n const numericValue = _value === '' || _value === null || _value === undefined ? '0' : _value;\n setInternalValue(numericValue);\n internalValueRef.current = numericValue;\n onChange(numericValue, selectedCurrency);\n };\n\n const handleFocus = () => {\n if (inputRef.current) {\n inputRef.current.value = internalValueRef.current || '';\n }\n };\n\n const handleBlur = useCallback(() => {\n _blurringCellKey = id;\n _cursorPositionCache.delete(id);\n if (inputRef.current) {\n inputRef.current.value = formatCurrency(internalValueRef.current);\n }\n setTimeout(() => {\n if (!isInteractingRef.current && !currencyDropdownConfig) onBlur?.();\n }, 150);\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }, [id, onBlur, currencyDropdownConfig]);\n\n const handleCurrencySelect = useCallback(\n (newCurrency: string) => {\n setSelectedCurrency(newCurrency);\n setCurrencyForCell?.(id, newCurrency);\n const currentValue = internalValueRef.current;\n const numericValue = currentValue === '' || currentValue === null || currentValue === undefined ? '0' : currentValue;\n onChangeRef.current(numericValue, newCurrency);\n isInteractingRef.current = false;\n },\n [id, setCurrencyForCell],\n );\n\n const handleToggleDropdown = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n isInteractingRef.current = true;\n if (currencyDropdownConfig) {\n closeCurrencyDropdown?.();\n isInteractingRef.current = false;\n } else if (triggerRef.current && openCurrencyDropdown) {\n const rect = triggerRef.current.getBoundingClientRect();\n openCurrencyDropdown({ anchorRect: rect, currentCurrency: selectedCurrency, onSelect: handleCurrencySelect });\n }\n },\n [currencyDropdownConfig, openCurrencyDropdown, closeCurrencyDropdown, selectedCurrency, handleCurrencySelect],\n );\n\n useEffect(() => {\n if (!currencyDropdownConfig) {\n setTimeout(() => {\n isInteractingRef.current = false;\n }, 100);\n }\n }, [currencyDropdownConfig]);\n\n return (\n <div className='flex flex-col gap-0 mb-0 w-full h-full'>\n <label className='relative block w-full h-full'>\n <span className='absolute inset-y-0 left-1 flex items-center pl-3 py-1.5 text-neutral-900 dark:text-white z-10'>\n {CURRENCY_SYMBOLS[selectedCurrency]}\n </span>\n <input\n ref={inputRef}\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n className={cn(\n 'pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium',\n 'text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600',\n 'border-gray-300 dark:border-black-600',\n 'disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400',\n )}\n onChange={handleOnChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key.length > 1 || e.ctrlKey || e.metaKey) return;\n if (e.key >= '0' && e.key <= '9') return;\n if (e.key === '.' && !e.currentTarget.value.includes('.')) return;\n e.preventDefault();\n }}\n defaultValue={formatCurrency(value)}\n id={id}\n style={{ height: 'var(--row-height)', border: 'none', boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)', ...inputStyle }}\n autoComplete='off'\n autoFocus={autoFocus}\n disabled={disabled}\n />\n <div\n ref={triggerRef}\n className={cn('absolute inset-y-0 right-1 flex items-center h-full', disabled ? 'pointer-events-none opacity-50' : 'cursor-pointer')}\n onClick={handleToggleDropdown}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); isInteractingRef.current = true; }}\n >\n <div className='px-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors'>\n {getFlagComponent(selectedCurrency)}\n <span className='font-medium'>{selectedCurrency}</span>\n <svg className='w-3 h-3' fill='none' stroke='currentColor' viewBox='0 0 24 24'>\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M19 9l-7 7-7-7' />\n </svg>\n </div>\n </div>\n </label>\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","InlineCurrencyField","id","value","onChange","onBlur","currencyCode","autoFocus","inputStyle","disabled","openCurrencyDropdown","closeCurrencyDropdown","currencyDropdownConfig","setCurrencyForCell","getCurrencyForCell","useContext","TableContext","effectiveCurrency","selectedCurrency","setSelectedCurrency","useState","internalValue","setInternalValue","internalValueRef","useRef","inputRef","triggerRef","isInteractingRef","onChangeRef","useEffect","hasInitializedRef","useLayoutEffect","el","cached","formatCurrency","targetValue","number","handleOnChange","_value","numericValue","handleFocus","handleBlur","useCallback","handleCurrencySelect","newCurrency","currentValue","handleToggleDropdown","rect","jsxs","jsx","CURRENCY_SYMBOLS","cn","getFlagComponent"],"mappings":"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"}
1
+ {"version":3,"file":"InlineCurrencyField.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineCurrencyField.tsx"],"sourcesContent":["import { CURRENCY_SYMBOLS } from '../../../../forms/currency-input/currency.constant';\nimport { getFlagComponent } from '../../../../../utils/countryFlags';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\n\ntype InlineCurrencyFieldProps = {\n id: string;\n value: string;\n onChange: (numericValue: string, currencyCode: string) => void;\n onBlur?: () => void;\n currencyCode: string;\n autoFocus?: boolean;\n inputStyle?: React.CSSProperties;\n disabled?: boolean;\n};\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\n\nexport const InlineCurrencyField: React.FC<InlineCurrencyFieldProps> = ({\n id,\n value,\n onChange,\n onBlur,\n currencyCode = 'USD',\n autoFocus = false,\n inputStyle,\n disabled = false,\n}) => {\n const { openCurrencyDropdown, closeCurrencyDropdown, currencyDropdownConfig, setCurrencyForCell, getCurrencyForCell } = useContext(TableContext);\n const contextCurrency = getCurrencyForCell?.(id);\n const effectiveCurrency = contextCurrency || currencyCode || 'USD';\n const [selectedCurrency, setSelectedCurrency] = useState<string>(effectiveCurrency);\n const [internalValue, setInternalValue] = useState(value);\n const internalValueRef = useRef(value);\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const isInteractingRef = useRef(false);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n internalValueRef.current = internalValue;\n }, [internalValue]);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const hasInitializedRef = useRef(false);\n useEffect(() => {\n if (!hasInitializedRef.current) {\n setInternalValue(value);\n internalValueRef.current = value;\n hasInitializedRef.current = true;\n }\n }, [value]);\n\n useEffect(() => {\n if (effectiveCurrency !== selectedCurrency) {\n setSelectedCurrency(effectiveCurrency);\n }\n }, [effectiveCurrency, selectedCurrency]);\n\n useLayoutEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n const cached = _cursorPositionCache.get(id);\n if (cached) {\n el.value = internalValueRef.current || '';\n el.focus();\n el.setSelectionRange(cached.start, cached.end);\n } else if (_blurringCellKey !== id) {\n el.value = internalValueRef.current || '';\n el.focus();\n }\n }, []);\n\n const formatCurrency = (targetValue: string | number | null | undefined) => {\n if (targetValue === null || targetValue === undefined || targetValue === '') return '';\n const number = Number(targetValue);\n if (isNaN(number)) return String(targetValue);\n return number.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n };\n\n const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const _value = e.target.value;\n if (_value !== '' && (Number(_value) < 0 || !/^\\d*\\.?\\d*$/.test(_value))) {\n e.target.value = internalValueRef.current === '0' ? '' : internalValueRef.current || '';\n return;\n }\n\n _cursorPositionCache.set(id, {\n start: e.target.selectionStart ?? 0,\n end: e.target.selectionEnd ?? 0,\n });\n\n const numericValue = _value === '' || _value === null || _value === undefined ? '0' : _value;\n setInternalValue(numericValue);\n internalValueRef.current = numericValue;\n onChange(numericValue, selectedCurrency);\n };\n\n const handleFocus = () => {\n if (inputRef.current) {\n inputRef.current.value = internalValueRef.current || '';\n }\n };\n\n const handleBlur = useCallback(() => {\n _blurringCellKey = id;\n _cursorPositionCache.delete(id);\n if (inputRef.current) {\n inputRef.current.value = formatCurrency(internalValueRef.current);\n }\n setTimeout(() => {\n if (!isInteractingRef.current && !currencyDropdownConfig) onBlur?.();\n }, 150);\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }, [id, onBlur, currencyDropdownConfig]);\n\n const handleCurrencySelect = useCallback(\n (newCurrency: string) => {\n setSelectedCurrency(newCurrency);\n setCurrencyForCell?.(id, newCurrency);\n const currentValue = internalValueRef.current;\n const numericValue = currentValue === '' || currentValue === null || currentValue === undefined ? '0' : currentValue;\n onChangeRef.current(numericValue, newCurrency);\n isInteractingRef.current = false;\n },\n [id, setCurrencyForCell],\n );\n\n const handleToggleDropdown = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n isInteractingRef.current = true;\n if (currencyDropdownConfig) {\n closeCurrencyDropdown?.();\n isInteractingRef.current = false;\n } else if (triggerRef.current && openCurrencyDropdown) {\n const rect = triggerRef.current.getBoundingClientRect();\n openCurrencyDropdown({ anchorRect: rect, currentCurrency: selectedCurrency, onSelect: handleCurrencySelect });\n }\n },\n [currencyDropdownConfig, openCurrencyDropdown, closeCurrencyDropdown, selectedCurrency, handleCurrencySelect],\n );\n\n useEffect(() => {\n if (!currencyDropdownConfig) {\n setTimeout(() => {\n isInteractingRef.current = false;\n }, 100);\n }\n }, [currencyDropdownConfig]);\n\n return (\n <div className='flex flex-col gap-0 mb-0 w-full h-full'>\n <label className='relative block w-full h-full'>\n <span className='absolute inset-y-0 left-1 flex items-center pl-3 py-1.5 text-neutral-900 dark:text-white z-10'>\n {CURRENCY_SYMBOLS[selectedCurrency]}\n </span>\n <input\n ref={inputRef}\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n className={cn(\n 'pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium',\n 'text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600',\n 'border-gray-300 dark:border-black-600',\n 'disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400',\n )}\n onChange={handleOnChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key.length > 1 || e.ctrlKey || e.metaKey) return;\n if (e.key >= '0' && e.key <= '9') return;\n if (e.key === '.' && !e.currentTarget.value.includes('.')) return;\n e.preventDefault();\n }}\n defaultValue={formatCurrency(value)}\n id={id}\n style={{ border: 'none', boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)', ...inputStyle }}\n autoComplete='off'\n autoFocus={autoFocus}\n disabled={disabled}\n />\n <div\n ref={triggerRef}\n className={cn('absolute inset-y-0 right-1 flex items-center h-full', disabled ? 'pointer-events-none opacity-50' : 'cursor-pointer')}\n onClick={handleToggleDropdown}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); isInteractingRef.current = true; }}\n >\n <div className='px-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors'>\n {getFlagComponent(selectedCurrency)}\n <span className='font-medium'>{selectedCurrency}</span>\n <svg className='w-3 h-3' fill='none' stroke='currentColor' viewBox='0 0 24 24'>\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M19 9l-7 7-7-7' />\n </svg>\n </div>\n </div>\n </label>\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","InlineCurrencyField","id","value","onChange","onBlur","currencyCode","autoFocus","inputStyle","disabled","openCurrencyDropdown","closeCurrencyDropdown","currencyDropdownConfig","setCurrencyForCell","getCurrencyForCell","useContext","TableContext","effectiveCurrency","selectedCurrency","setSelectedCurrency","useState","internalValue","setInternalValue","internalValueRef","useRef","inputRef","triggerRef","isInteractingRef","onChangeRef","useEffect","hasInitializedRef","useLayoutEffect","el","cached","formatCurrency","targetValue","number","handleOnChange","_value","numericValue","handleFocus","handleBlur","useCallback","handleCurrencySelect","newCurrency","currentValue","handleToggleDropdown","rect","jsxs","jsx","CURRENCY_SYMBOLS","cn","getFlagComponent"],"mappings":"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"}
@@ -2,9 +2,9 @@ import { jsx as o, jsxs as T } from "react/jsx-runtime";
2
2
  import { CURRENCY_SYMBOLS as O } from "../../../../forms/currency-input/currency.constant.es.js";
3
3
  import { getFlagComponent as Y } from "../../../../../utils/countryFlags.es.js";
4
4
  import B from "../../../../../_virtual/index.es.js";
5
- import { useContext as q, useState as E, useRef as i, useEffect as d, useLayoutEffect as A, useCallback as b } from "react";
5
+ import { useContext as q, useState as E, useRef as i, useEffect as d, useLayoutEffect as A, useCallback as x } from "react";
6
6
  import { TableContext as W } from "../../context.es.js";
7
- const x = /* @__PURE__ */ new Map();
7
+ const h = /* @__PURE__ */ new Map();
8
8
  let y = null;
9
9
  const ee = ({
10
10
  id: r,
@@ -16,7 +16,7 @@ const ee = ({
16
16
  inputStyle: P,
17
17
  disabled: C = !1
18
18
  }) => {
19
- const { openCurrencyDropdown: g, closeCurrencyDropdown: v, currencyDropdownConfig: u, setCurrencyForCell: w, getCurrencyForCell: U } = q(W), m = U?.(r) || I || "USD", [l, S] = E(m), [D, N] = E(c), n = i(c), a = i(null), h = i(null), s = i(!1), R = i(p);
19
+ const { openCurrencyDropdown: g, closeCurrencyDropdown: v, currencyDropdownConfig: u, setCurrencyForCell: S, getCurrencyForCell: U } = q(W), m = U?.(r) || I || "USD", [l, w] = E(m), [D, N] = E(c), n = i(c), s = i(null), b = i(null), a = i(!1), R = i(p);
20
20
  d(() => {
21
21
  n.current = D;
22
22
  }, [D]), d(() => {
@@ -26,11 +26,11 @@ const ee = ({
26
26
  d(() => {
27
27
  F.current || (N(c), n.current = c, F.current = !0);
28
28
  }, [c]), d(() => {
29
- m !== l && S(m);
29
+ m !== l && w(m);
30
30
  }, [m, l]), A(() => {
31
- const e = a.current;
31
+ const e = s.current;
32
32
  if (!e) return;
33
- const t = x.get(r);
33
+ const t = h.get(r);
34
34
  t ? (e.value = n.current || "", e.focus(), e.setSelectionRange(t.start, t.end)) : y !== r && (e.value = n.current || "", e.focus());
35
35
  }, []);
36
36
  const L = (e) => {
@@ -43,33 +43,33 @@ const ee = ({
43
43
  e.target.value = n.current === "0" ? "" : n.current || "";
44
44
  return;
45
45
  }
46
- x.set(r, {
46
+ h.set(r, {
47
47
  start: e.target.selectionStart ?? 0,
48
48
  end: e.target.selectionEnd ?? 0
49
49
  });
50
50
  const f = t === "" || t === null || t === void 0 ? "0" : t;
51
51
  N(f), n.current = f, p(f, l);
52
52
  }, j = () => {
53
- a.current && (a.current.value = n.current || "");
54
- }, V = b(() => {
55
- y = r, x.delete(r), a.current && (a.current.value = L(n.current)), setTimeout(() => {
56
- !s.current && !u && k?.();
53
+ s.current && (s.current.value = n.current || "");
54
+ }, V = x(() => {
55
+ y = r, h.delete(r), s.current && (s.current.value = L(n.current)), setTimeout(() => {
56
+ !a.current && !u && k?.();
57
57
  }, 150), requestAnimationFrame(() => {
58
58
  y = null;
59
59
  });
60
- }, [r, k, u]), M = b(
60
+ }, [r, k, u]), M = x(
61
61
  (e) => {
62
- S(e), w?.(r, e);
62
+ w(e), S?.(r, e);
63
63
  const t = n.current, f = t === "" || t === null || t === void 0 ? "0" : t;
64
- R.current(f, e), s.current = !1;
64
+ R.current(f, e), a.current = !1;
65
65
  },
66
- [r, w]
67
- ), z = b(
66
+ [r, S]
67
+ ), z = x(
68
68
  (e) => {
69
- if (e.stopPropagation(), e.preventDefault(), s.current = !0, u)
70
- v?.(), s.current = !1;
71
- else if (h.current && g) {
72
- const t = h.current.getBoundingClientRect();
69
+ if (e.stopPropagation(), e.preventDefault(), a.current = !0, u)
70
+ v?.(), a.current = !1;
71
+ else if (b.current && g) {
72
+ const t = b.current.getBoundingClientRect();
73
73
  g({ anchorRect: t, currentCurrency: l, onSelect: M });
74
74
  }
75
75
  },
@@ -77,14 +77,14 @@ const ee = ({
77
77
  );
78
78
  return d(() => {
79
79
  u || setTimeout(() => {
80
- s.current = !1;
80
+ a.current = !1;
81
81
  }, 100);
82
82
  }, [u]), /* @__PURE__ */ o("div", { className: "flex flex-col gap-0 mb-0 w-full h-full", children: /* @__PURE__ */ T("label", { className: "relative block w-full h-full", children: [
83
83
  /* @__PURE__ */ o("span", { className: "absolute inset-y-0 left-1 flex items-center pl-3 py-1.5 text-neutral-900 dark:text-white z-10", children: O[l] }),
84
84
  /* @__PURE__ */ o(
85
85
  "input",
86
86
  {
87
- ref: a,
87
+ ref: s,
88
88
  placeholder: "0.00",
89
89
  type: "text",
90
90
  inputMode: "decimal",
@@ -102,7 +102,7 @@ const ee = ({
102
102
  },
103
103
  defaultValue: L(c),
104
104
  id: r,
105
- style: { height: "var(--row-height)", border: "none", boxShadow: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)", ...P },
105
+ style: { border: "none", boxShadow: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)", ...P },
106
106
  autoComplete: "off",
107
107
  autoFocus: K,
108
108
  disabled: C
@@ -111,11 +111,11 @@ const ee = ({
111
111
  /* @__PURE__ */ o(
112
112
  "div",
113
113
  {
114
- ref: h,
114
+ ref: b,
115
115
  className: B("absolute inset-y-0 right-1 flex items-center h-full", C ? "pointer-events-none opacity-50" : "cursor-pointer"),
116
116
  onClick: z,
117
117
  onMouseDown: (e) => {
118
- e.stopPropagation(), e.preventDefault(), s.current = !0;
118
+ e.stopPropagation(), e.preventDefault(), a.current = !0;
119
119
  },
120
120
  children: /* @__PURE__ */ T("div", { className: "px-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors", children: [
121
121
  Y(l),
@@ -1 +1 @@
1
- {"version":3,"file":"InlineCurrencyField.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineCurrencyField.tsx"],"sourcesContent":["import { CURRENCY_SYMBOLS } from '../../../../forms/currency-input/currency.constant';\nimport { getFlagComponent } from '../../../../../utils/countryFlags';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\n\ntype InlineCurrencyFieldProps = {\n id: string;\n value: string;\n onChange: (numericValue: string, currencyCode: string) => void;\n onBlur?: () => void;\n currencyCode: string;\n autoFocus?: boolean;\n inputStyle?: React.CSSProperties;\n disabled?: boolean;\n};\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\n\nexport const InlineCurrencyField: React.FC<InlineCurrencyFieldProps> = ({\n id,\n value,\n onChange,\n onBlur,\n currencyCode = 'USD',\n autoFocus = false,\n inputStyle,\n disabled = false,\n}) => {\n const { openCurrencyDropdown, closeCurrencyDropdown, currencyDropdownConfig, setCurrencyForCell, getCurrencyForCell } = useContext(TableContext);\n const contextCurrency = getCurrencyForCell?.(id);\n const effectiveCurrency = contextCurrency || currencyCode || 'USD';\n const [selectedCurrency, setSelectedCurrency] = useState<string>(effectiveCurrency);\n const [internalValue, setInternalValue] = useState(value);\n const internalValueRef = useRef(value);\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const isInteractingRef = useRef(false);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n internalValueRef.current = internalValue;\n }, [internalValue]);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const hasInitializedRef = useRef(false);\n useEffect(() => {\n if (!hasInitializedRef.current) {\n setInternalValue(value);\n internalValueRef.current = value;\n hasInitializedRef.current = true;\n }\n }, [value]);\n\n useEffect(() => {\n if (effectiveCurrency !== selectedCurrency) {\n setSelectedCurrency(effectiveCurrency);\n }\n }, [effectiveCurrency, selectedCurrency]);\n\n useLayoutEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n const cached = _cursorPositionCache.get(id);\n if (cached) {\n el.value = internalValueRef.current || '';\n el.focus();\n el.setSelectionRange(cached.start, cached.end);\n } else if (_blurringCellKey !== id) {\n el.value = internalValueRef.current || '';\n el.focus();\n }\n }, []);\n\n const formatCurrency = (targetValue: string | number | null | undefined) => {\n if (targetValue === null || targetValue === undefined || targetValue === '') return '';\n const number = Number(targetValue);\n if (isNaN(number)) return String(targetValue);\n return number.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n };\n\n const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const _value = e.target.value;\n if (_value !== '' && (Number(_value) < 0 || !/^\\d*\\.?\\d*$/.test(_value))) {\n e.target.value = internalValueRef.current === '0' ? '' : internalValueRef.current || '';\n return;\n }\n\n _cursorPositionCache.set(id, {\n start: e.target.selectionStart ?? 0,\n end: e.target.selectionEnd ?? 0,\n });\n\n const numericValue = _value === '' || _value === null || _value === undefined ? '0' : _value;\n setInternalValue(numericValue);\n internalValueRef.current = numericValue;\n onChange(numericValue, selectedCurrency);\n };\n\n const handleFocus = () => {\n if (inputRef.current) {\n inputRef.current.value = internalValueRef.current || '';\n }\n };\n\n const handleBlur = useCallback(() => {\n _blurringCellKey = id;\n _cursorPositionCache.delete(id);\n if (inputRef.current) {\n inputRef.current.value = formatCurrency(internalValueRef.current);\n }\n setTimeout(() => {\n if (!isInteractingRef.current && !currencyDropdownConfig) onBlur?.();\n }, 150);\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }, [id, onBlur, currencyDropdownConfig]);\n\n const handleCurrencySelect = useCallback(\n (newCurrency: string) => {\n setSelectedCurrency(newCurrency);\n setCurrencyForCell?.(id, newCurrency);\n const currentValue = internalValueRef.current;\n const numericValue = currentValue === '' || currentValue === null || currentValue === undefined ? '0' : currentValue;\n onChangeRef.current(numericValue, newCurrency);\n isInteractingRef.current = false;\n },\n [id, setCurrencyForCell],\n );\n\n const handleToggleDropdown = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n isInteractingRef.current = true;\n if (currencyDropdownConfig) {\n closeCurrencyDropdown?.();\n isInteractingRef.current = false;\n } else if (triggerRef.current && openCurrencyDropdown) {\n const rect = triggerRef.current.getBoundingClientRect();\n openCurrencyDropdown({ anchorRect: rect, currentCurrency: selectedCurrency, onSelect: handleCurrencySelect });\n }\n },\n [currencyDropdownConfig, openCurrencyDropdown, closeCurrencyDropdown, selectedCurrency, handleCurrencySelect],\n );\n\n useEffect(() => {\n if (!currencyDropdownConfig) {\n setTimeout(() => {\n isInteractingRef.current = false;\n }, 100);\n }\n }, [currencyDropdownConfig]);\n\n return (\n <div className='flex flex-col gap-0 mb-0 w-full h-full'>\n <label className='relative block w-full h-full'>\n <span className='absolute inset-y-0 left-1 flex items-center pl-3 py-1.5 text-neutral-900 dark:text-white z-10'>\n {CURRENCY_SYMBOLS[selectedCurrency]}\n </span>\n <input\n ref={inputRef}\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n className={cn(\n 'pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium',\n 'text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600',\n 'border-gray-300 dark:border-black-600',\n 'disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400',\n )}\n onChange={handleOnChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key.length > 1 || e.ctrlKey || e.metaKey) return;\n if (e.key >= '0' && e.key <= '9') return;\n if (e.key === '.' && !e.currentTarget.value.includes('.')) return;\n e.preventDefault();\n }}\n defaultValue={formatCurrency(value)}\n id={id}\n style={{ height: 'var(--row-height)', border: 'none', boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)', ...inputStyle }}\n autoComplete='off'\n autoFocus={autoFocus}\n disabled={disabled}\n />\n <div\n ref={triggerRef}\n className={cn('absolute inset-y-0 right-1 flex items-center h-full', disabled ? 'pointer-events-none opacity-50' : 'cursor-pointer')}\n onClick={handleToggleDropdown}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); isInteractingRef.current = true; }}\n >\n <div className='px-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors'>\n {getFlagComponent(selectedCurrency)}\n <span className='font-medium'>{selectedCurrency}</span>\n <svg className='w-3 h-3' fill='none' stroke='currentColor' viewBox='0 0 24 24'>\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M19 9l-7 7-7-7' />\n </svg>\n </div>\n </div>\n </label>\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","InlineCurrencyField","id","value","onChange","onBlur","currencyCode","autoFocus","inputStyle","disabled","openCurrencyDropdown","closeCurrencyDropdown","currencyDropdownConfig","setCurrencyForCell","getCurrencyForCell","useContext","TableContext","effectiveCurrency","selectedCurrency","setSelectedCurrency","useState","internalValue","setInternalValue","internalValueRef","useRef","inputRef","triggerRef","isInteractingRef","onChangeRef","useEffect","hasInitializedRef","useLayoutEffect","el","cached","formatCurrency","targetValue","number","handleOnChange","_value","numericValue","handleFocus","handleBlur","useCallback","handleCurrencySelect","newCurrency","currentValue","handleToggleDropdown","rect","jsxs","jsx","CURRENCY_SYMBOLS","cn","getFlagComponent"],"mappings":"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"}
1
+ {"version":3,"file":"InlineCurrencyField.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineCurrencyField.tsx"],"sourcesContent":["import { CURRENCY_SYMBOLS } from '../../../../forms/currency-input/currency.constant';\nimport { getFlagComponent } from '../../../../../utils/countryFlags';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\n\ntype InlineCurrencyFieldProps = {\n id: string;\n value: string;\n onChange: (numericValue: string, currencyCode: string) => void;\n onBlur?: () => void;\n currencyCode: string;\n autoFocus?: boolean;\n inputStyle?: React.CSSProperties;\n disabled?: boolean;\n};\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\n\nexport const InlineCurrencyField: React.FC<InlineCurrencyFieldProps> = ({\n id,\n value,\n onChange,\n onBlur,\n currencyCode = 'USD',\n autoFocus = false,\n inputStyle,\n disabled = false,\n}) => {\n const { openCurrencyDropdown, closeCurrencyDropdown, currencyDropdownConfig, setCurrencyForCell, getCurrencyForCell } = useContext(TableContext);\n const contextCurrency = getCurrencyForCell?.(id);\n const effectiveCurrency = contextCurrency || currencyCode || 'USD';\n const [selectedCurrency, setSelectedCurrency] = useState<string>(effectiveCurrency);\n const [internalValue, setInternalValue] = useState(value);\n const internalValueRef = useRef(value);\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const isInteractingRef = useRef(false);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n internalValueRef.current = internalValue;\n }, [internalValue]);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const hasInitializedRef = useRef(false);\n useEffect(() => {\n if (!hasInitializedRef.current) {\n setInternalValue(value);\n internalValueRef.current = value;\n hasInitializedRef.current = true;\n }\n }, [value]);\n\n useEffect(() => {\n if (effectiveCurrency !== selectedCurrency) {\n setSelectedCurrency(effectiveCurrency);\n }\n }, [effectiveCurrency, selectedCurrency]);\n\n useLayoutEffect(() => {\n const el = inputRef.current;\n if (!el) return;\n\n const cached = _cursorPositionCache.get(id);\n if (cached) {\n el.value = internalValueRef.current || '';\n el.focus();\n el.setSelectionRange(cached.start, cached.end);\n } else if (_blurringCellKey !== id) {\n el.value = internalValueRef.current || '';\n el.focus();\n }\n }, []);\n\n const formatCurrency = (targetValue: string | number | null | undefined) => {\n if (targetValue === null || targetValue === undefined || targetValue === '') return '';\n const number = Number(targetValue);\n if (isNaN(number)) return String(targetValue);\n return number.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n };\n\n const handleOnChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const _value = e.target.value;\n if (_value !== '' && (Number(_value) < 0 || !/^\\d*\\.?\\d*$/.test(_value))) {\n e.target.value = internalValueRef.current === '0' ? '' : internalValueRef.current || '';\n return;\n }\n\n _cursorPositionCache.set(id, {\n start: e.target.selectionStart ?? 0,\n end: e.target.selectionEnd ?? 0,\n });\n\n const numericValue = _value === '' || _value === null || _value === undefined ? '0' : _value;\n setInternalValue(numericValue);\n internalValueRef.current = numericValue;\n onChange(numericValue, selectedCurrency);\n };\n\n const handleFocus = () => {\n if (inputRef.current) {\n inputRef.current.value = internalValueRef.current || '';\n }\n };\n\n const handleBlur = useCallback(() => {\n _blurringCellKey = id;\n _cursorPositionCache.delete(id);\n if (inputRef.current) {\n inputRef.current.value = formatCurrency(internalValueRef.current);\n }\n setTimeout(() => {\n if (!isInteractingRef.current && !currencyDropdownConfig) onBlur?.();\n }, 150);\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }, [id, onBlur, currencyDropdownConfig]);\n\n const handleCurrencySelect = useCallback(\n (newCurrency: string) => {\n setSelectedCurrency(newCurrency);\n setCurrencyForCell?.(id, newCurrency);\n const currentValue = internalValueRef.current;\n const numericValue = currentValue === '' || currentValue === null || currentValue === undefined ? '0' : currentValue;\n onChangeRef.current(numericValue, newCurrency);\n isInteractingRef.current = false;\n },\n [id, setCurrencyForCell],\n );\n\n const handleToggleDropdown = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n isInteractingRef.current = true;\n if (currencyDropdownConfig) {\n closeCurrencyDropdown?.();\n isInteractingRef.current = false;\n } else if (triggerRef.current && openCurrencyDropdown) {\n const rect = triggerRef.current.getBoundingClientRect();\n openCurrencyDropdown({ anchorRect: rect, currentCurrency: selectedCurrency, onSelect: handleCurrencySelect });\n }\n },\n [currencyDropdownConfig, openCurrencyDropdown, closeCurrencyDropdown, selectedCurrency, handleCurrencySelect],\n );\n\n useEffect(() => {\n if (!currencyDropdownConfig) {\n setTimeout(() => {\n isInteractingRef.current = false;\n }, 100);\n }\n }, [currencyDropdownConfig]);\n\n return (\n <div className='flex flex-col gap-0 mb-0 w-full h-full'>\n <label className='relative block w-full h-full'>\n <span className='absolute inset-y-0 left-1 flex items-center pl-3 py-1.5 text-neutral-900 dark:text-white z-10'>\n {CURRENCY_SYMBOLS[selectedCurrency]}\n </span>\n <input\n ref={inputRef}\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n className={cn(\n 'pl-11 pr-24 border h-full text-sm rounded-lg block w-full px-2.5 py-1.5 font-inter font-medium',\n 'text-neutral-900 dark:text-black-200 bg-white dark:bg-black-600',\n 'border-gray-300 dark:border-black-600',\n 'disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400',\n )}\n onChange={handleOnChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key.length > 1 || e.ctrlKey || e.metaKey) return;\n if (e.key >= '0' && e.key <= '9') return;\n if (e.key === '.' && !e.currentTarget.value.includes('.')) return;\n e.preventDefault();\n }}\n defaultValue={formatCurrency(value)}\n id={id}\n style={{ border: 'none', boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)', ...inputStyle }}\n autoComplete='off'\n autoFocus={autoFocus}\n disabled={disabled}\n />\n <div\n ref={triggerRef}\n className={cn('absolute inset-y-0 right-1 flex items-center h-full', disabled ? 'pointer-events-none opacity-50' : 'cursor-pointer')}\n onClick={handleToggleDropdown}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); isInteractingRef.current = true; }}\n >\n <div className='px-2 py-1.5 text-sm text-gray-700 dark:text-black-200 flex items-center gap-1 hover:bg-neutral-100 dark:hover:bg-black-500 rounded transition-colors'>\n {getFlagComponent(selectedCurrency)}\n <span className='font-medium'>{selectedCurrency}</span>\n <svg className='w-3 h-3' fill='none' stroke='currentColor' viewBox='0 0 24 24'>\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M19 9l-7 7-7-7' />\n </svg>\n </div>\n </div>\n </label>\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","InlineCurrencyField","id","value","onChange","onBlur","currencyCode","autoFocus","inputStyle","disabled","openCurrencyDropdown","closeCurrencyDropdown","currencyDropdownConfig","setCurrencyForCell","getCurrencyForCell","useContext","TableContext","effectiveCurrency","selectedCurrency","setSelectedCurrency","useState","internalValue","setInternalValue","internalValueRef","useRef","inputRef","triggerRef","isInteractingRef","onChangeRef","useEffect","hasInitializedRef","useLayoutEffect","el","cached","formatCurrency","targetValue","number","handleOnChange","_value","numericValue","handleFocus","handleBlur","useCallback","handleCurrencySelect","newCurrency","currentValue","handleToggleDropdown","rect","jsxs","jsx","CURRENCY_SYMBOLS","cn","getFlagComponent"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),re=require("../../validateCell.cjs.js"),H=require("../../../../../constants/table.cjs.js"),ae=require("../../../../forms/date-time-field/DateTimeField.cjs.js"),ne=require("../../../../forms/select-field/SelectField.cjs.js"),oe=require("../../../../forms/toggle/Toggle.cjs.js"),ue=require("@mui/icons-material"),le=require("../../../../../_virtual/index.cjs.js"),d=require("react"),ie=require("../../context.cjs.js"),se=require("./InlineCurrencyField.cjs.js"),ce=require("./MasterDataInlineField.cjs.js"),de=require("../../../../icon/icons.generated.cjs.js"),x=new Map;let w=null,p=null;const F=t=>({target:{value:t}}),me=({cell:t,id:l,inlineEditing:v,cellRef:X,handleCellValueChange:y,registerValidation:I})=>{const{openMasterDataModal:J,selectedMasterData:k,clearSelectedMasterData:Y,getCurrencyForCell:N,getPendingEdit:M,addPendingEdit:f,onFieldOperationFlow:R,fieldOperationLoading:U}=d.useContext(ie.TableContext),Q=U===`${l}-${t?.column?.id}`,E=!!U,b=d.useCallback((a,u)=>{R&&R({value:a,fieldId:t?.column?.id,rowId:String(l),rowData:t?.row?.original,columnKey:t?.column?.key||"",flowName:t?.column?.live_field_source,isLiveField:t?.column?.is_live_field,meta:u})},[t?.column?.id,t?.column?.is_live_field,t?.column?.key,t?.column?.live_field_source,t?.row?.original,l,R]),V=()=>{const a=t?.row?.original?.__rawData,u=t?.column?.Header,r=t?.column?.key,e=u?a?.[u]?.currency_code:void 0,n=r?a?.[r]?.currency_code:void 0;return e&&e!==""?e:n&&n!==""?n:t?.column?.currencyCode||"USD"},o=t.column.key||"",_=`${l}-${o}`,W=N?.(_),z=M?.(String(l),o),[c,h]=d.useState({value:z?.value!==void 0?z.value:t.value||"",currencyCode:z?.meta?.currency_code||W||V()}),[K,D]=d.useState(null),Z=(()=>{if(v!==o)return null;const a=typeof c.value=="number"?String(c.value):c.value,u=re.validateCellValue(a,t?.column);return u.isValid?null:u.error||null})(),ee=M?.(String(l),o)?.validationError,L=K||Z||ee||null,B=d.useRef(null);d.useEffect(()=>{if(v===o&&B.current!==o){const u=N?.(`${l}-${o}`),r=M?.(String(l),o),e=r?.value!==void 0?r.value:t.value||"",n=r?.meta?.currency_code||u||V();h({value:e,currencyCode:n})}v!==o&&B.current===o&&D(null),B.current=v},[v,o,N,M,l,t.value]),d.useEffect(()=>{k&&v===o&&t?.column?.masterDataColumnName&&t?.column?.masterDataName&&(f&&f(String(l),o,{value:k.value,meta:{reference:k.reference},originalValue:t.value}),y(F(k.value)),b(k.value,{reference:k.reference}),Y?.())},[k,v,o,t?.column?.masterDataColumnName,t?.column?.masterDataName,f,l,t.value,y,b,Y]);const g=a=>t?.column?.is_required&&(a==null||a===""||typeof a=="string"&&a.trim()==="")?(D("Field required"),!1):(D(null),!0),A=a=>g(a)?a&&a.trim()!==""&&!H.REGEX.url.test(a)?(D("Invalid URL format"),!1):(D(null),!0):!1,O=a=>g(a)?a&&a.trim()!==""&&!H.REGEX.email.test(a)?(D("Email is not valid"),!1):(D(null),!0):!1,m=d.useRef(c);d.useEffect(()=>{m.current=c},[c]);const j=d.useRef(null),i=`${l}-${o}`;d.useLayoutEffect(()=>{const a=j.current;if(!a)return;const u=x.get(i);if(u){a.focus();try{a.setSelectionRange(u.start,u.end)}catch{}}else w!==i&&a.focus()},[i]);const S=d.useRef();d.useEffect(()=>()=>{S.current&&clearTimeout(S.current)},[]);const P=d.useCallback(a=>{y(F(a)),f&&f(String(l),o,{value:a,originalValue:t.value})},[y,f,l,o,t.value]),T=d.useCallback(a=>{S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{P(a)},300)},[P]),q=d.useCallback(()=>{S.current&&(clearTimeout(S.current),S.current=void 0,P(String(m.current.value??"")))},[P]),$=d.useCallback(()=>{const a=t?.column?.type?.toLowerCase(),u=m.current.value;switch(a){case"url":A(String(u??""));break;case"e-mail":O(String(u??""));break;default:g(u);break}},[t?.column?.type]),G=d.useCallback(()=>{const a=t?.column?.type?.toLowerCase(),u=m.current.value,r=m.current.currencyCode;let e=!0;switch(a){case"url":e=A(String(u??""));break;case"e-mail":e=O(String(u??""));break;default:e=g(u);break}if(!e)return{isValid:!1};let n=null;return a==="currency"&&(n={currency_code:N?.(_)||r}),{isValid:!0,value:typeof u=="number"?String(u):u,meta:n}},[t?.column?.type,_,N]);d.useEffect(()=>{I&&v===o&&I(G)},[I,G,v,o]);const te=()=>{if(t?.column?.is_master_data&&t?.column?.masterDataName&&(t?.column?.masterDataColumnName||t?.column?.masterDataFormula)){const r=M?.(String(l),o),e=k?.value??r?.value??t.value;return s.jsx("div",{onMouseDown:n=>n.stopPropagation(),className:"z-[120] h-full w-full",children:s.jsx(ce.MasterDataInlineField,{id:`master-data-cell-${l}-${t.column.id}`,value:e,onChange:(n,C)=>{y(F(n)),f&&f(String(l),o,{value:n,meta:{reference:C||null},originalValue:t.value}),b(n,{reference:C||void 0}),g(n??"")},placeholder:t.column?.Header,masterDataName:t.column.masterDataName,masterDataColumnName:t.column.masterDataColumnName,masterDataFormula:t.column.masterDataFormula,masterDataFilters:t.column.masterDataFilters,onOpenMasterDataModal:J,reference:r?.meta?.reference})})}const a=t?.column?.type?.toLowerCase(),u=o?t?.row?.original?.__cellMetadata?.[o]:void 0;switch(a){case"choice":{const r=u?.choices??t?.column?.choices;return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),children:s.jsx(ne.SelectField,{id:`select-cell-${l}-${t.column.id}`,value:c.value||null,selectOptions:r?.map(e=>({label:e,value:e}))||[],onChange:e=>{const n=e?Array.isArray(e)?e[0]?.value?.toString()||"":e?.value?.toString()||"":"";h(C=>({...C,value:n})),y(F(n)),f&&f(String(l),o,{value:n,originalValue:t.value}),b(n),g(n)},allowClear:!0,inputStyles:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},className:"z-[120]"})})}case"datetime":case"date":return s.jsx("div",{onMouseDown:r=>{r.stopPropagation(),r.target.tagName!=="INPUT"&&r.preventDefault()},children:s.jsx(ae.DateTimeField,{id:`date-cell-${l}-${t.column.id}`,value:c.value||void 0,handleOnChange:r=>{const e=r||"";h(n=>({...n,value:e})),y(F(e)),f&&f(String(l),o,{value:e,originalValue:t.value}),b(e),g(e)},showTime:a==="datetime",dateFormat:a==="date"?"MM/DD/YYYY":void 0,className:"z-[120] w-full"})});case"currency":{const r=V();return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),className:"z-[120] h-full w-full",children:s.jsx(se.InlineCurrencyField,{id:_,value:String(c.value??""),onChange:(e,n)=>{h(C=>({value:e,currencyCode:n||C.currencyCode})),y(F(e)),f&&f(String(l),o,{value:e,meta:{currency_code:n},originalValue:t.value,originalMeta:{currency_code:r}}),g(e),b(e,{currency_code:n})},currencyCode:c.currencyCode,inputStyle:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},autoFocus:!0,disabled:E})})}case"percentage":return s.jsxs("label",{className:"relative block h-full",onMouseDown:r=>r.stopPropagation(),children:[s.jsx("input",{ref:j,type:"number",defaultValue:String(c.value??""),onChange:r=>{try{x.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0})}catch{}const e=r.target.value;h(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,g(e),T(e)},onBlur:()=>{w=i,x.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},className:"border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400",id:`percentage-cell-${l}-${t.column.id}`,style:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},autoComplete:"off",disabled:E}),s.jsx("span",{className:"absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100",children:"%"})]});case"boolean":{const r=c.value===!0||c.value==="true"||c.value==="Yes"||c.value==="True"||c.value===1;return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),className:"h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]",children:s.jsx(oe.Toggle,{id:`toggle-cell-${l}-${t.column.id}`,isChecked:r,onChange:e=>{h(n=>({...n,value:e})),y(F(e)),f&&f(String(l),o,{value:e,originalValue:t.value}),b(e)},hideStatus:!1,labelDirection:"right",stopClickPropagation:!0,statusText:r?"Yes":"No"})})}case"url":return s.jsx("input",{ref:j,type:"url",defaultValue:String(c.value??""),onChange:r=>{x.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0});const e=r.target.value;h(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,K?A(e):g(e),T(e)},onBlur:()=>{w=i,x.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E});case"e-mail":return s.jsx("input",{ref:j,type:"email",defaultValue:String(c.value??""),onChange:r=>{try{x.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0})}catch{}const e=r.target.value;h(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,K?O(e):g(e),T(e)},onBlur:()=>{w=i,x.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E});default:return s.jsx("input",{ref:j,type:"text",defaultValue:String(c.value??""),onChange:r=>{x.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0});const e=r.target.value;h(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,g(e),T(e)},onBlur:()=>{w=i,x.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E})}};return s.jsxs("div",{ref:X,className:"relative h-full w-full overflow-visible",children:[s.jsx("div",{className:le("border p-0.5 rounded-lg h-full",L?"border-error-600":"border-neutral-200 dark:border-black-700",E&&"pointer-events-none opacity-70"),children:te()}),!!t?.column?.is_live_field&&s.jsx("div",{className:"absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]",children:Q?s.jsx(de.LoadingSpinnerIcon,{className:"text-primary-600 dark:text-white",size:8}):s.jsx(ue.BoltOutlined,{sx:{fontSize:12,color:"var(--color-primary-600)"}})}),L&&s.jsx("div",{className:"absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full",children:L})]})};exports.InlineEditField=me;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),re=require("../../validateCell.cjs.js"),H=require("../../../../../constants/table.cjs.js"),ae=require("../../../../forms/date-time-field/DateTimeField.cjs.js"),ne=require("../../../../forms/select-field/SelectField.cjs.js"),oe=require("../../../../forms/toggle/Toggle.cjs.js"),ue=require("@mui/icons-material"),le=require("../../../../../_virtual/index.cjs.js"),d=require("react"),ie=require("../../context.cjs.js"),se=require("./InlineCurrencyField.cjs.js"),ce=require("./MasterDataInlineField.cjs.js"),de=require("../../../../icon/icons.generated.cjs.js"),h=new Map;let w=null,p=null;const F=t=>({target:{value:t}}),me=({cell:t,id:l,inlineEditing:v,cellRef:X,handleCellValueChange:y,registerValidation:I})=>{const{openMasterDataModal:J,selectedMasterData:k,clearSelectedMasterData:Y,getCurrencyForCell:N,getPendingEdit:M,addPendingEdit:f,onFieldOperationFlow:R,fieldOperationLoading:U}=d.useContext(ie.TableContext),Q=U===`${l}-${t?.column?.id}`,E=!!U,b=d.useCallback((a,u)=>{R&&R({value:a,fieldId:t?.column?.id,rowId:String(l),rowData:t?.row?.original,columnKey:t?.column?.key||"",flowName:t?.column?.live_field_source,isLiveField:t?.column?.is_live_field,meta:u})},[t?.column?.id,t?.column?.is_live_field,t?.column?.key,t?.column?.live_field_source,t?.row?.original,l,R]),V=()=>{const a=t?.row?.original?.__rawData,u=t?.column?.Header,r=t?.column?.key,e=u?a?.[u]?.currency_code:void 0,n=r?a?.[r]?.currency_code:void 0;return e&&e!==""?e:n&&n!==""?n:t?.column?.currencyCode||"USD"},o=t.column.key||"",_=`${l}-${o}`,W=N?.(_),z=M?.(String(l),o),[c,x]=d.useState({value:z?.value!==void 0?z.value:t.value||"",currencyCode:z?.meta?.currency_code||W||V()}),[K,D]=d.useState(null),Z=(()=>{if(v!==o)return null;const a=typeof c.value=="number"?String(c.value):c.value,u=re.validateCellValue(a,t?.column);return u.isValid?null:u.error||null})(),ee=M?.(String(l),o)?.validationError,L=K||Z||ee||null,B=d.useRef(null);d.useEffect(()=>{if(v===o&&B.current!==o){const u=N?.(`${l}-${o}`),r=M?.(String(l),o),e=r?.value!==void 0?r.value:t.value||"",n=r?.meta?.currency_code||u||V();x({value:e,currencyCode:n})}v!==o&&B.current===o&&D(null),B.current=v},[v,o,N,M,l,t.value]),d.useEffect(()=>{k&&v===o&&t?.column?.masterDataColumnName&&t?.column?.masterDataName&&(f&&f(String(l),o,{value:k.value,meta:{reference:k.reference},originalValue:t.value}),y(F(k.value)),b(k.value,{reference:k.reference}),Y?.())},[k,v,o,t?.column?.masterDataColumnName,t?.column?.masterDataName,f,l,t.value,y,b,Y]);const g=a=>t?.column?.is_required&&(a==null||a===""||typeof a=="string"&&a.trim()==="")?(D("Field required"),!1):(D(null),!0),A=a=>g(a)?a&&a.trim()!==""&&!H.REGEX.url.test(a)?(D("Invalid URL format"),!1):(D(null),!0):!1,O=a=>g(a)?a&&a.trim()!==""&&!H.REGEX.email.test(a)?(D("Email is not valid"),!1):(D(null),!0):!1,m=d.useRef(c);d.useEffect(()=>{m.current=c},[c]);const j=d.useRef(null),i=`${l}-${o}`;d.useLayoutEffect(()=>{const a=j.current;if(!a)return;const u=h.get(i);if(u){a.focus();try{a.setSelectionRange(u.start,u.end)}catch{}}else w!==i&&a.focus()},[i]);const S=d.useRef();d.useEffect(()=>()=>{S.current&&clearTimeout(S.current)},[]);const P=d.useCallback(a=>{y(F(a)),f&&f(String(l),o,{value:a,originalValue:t.value})},[y,f,l,o,t.value]),T=d.useCallback(a=>{S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{P(a)},300)},[P]),q=d.useCallback(()=>{S.current&&(clearTimeout(S.current),S.current=void 0,P(String(m.current.value??"")))},[P]),$=d.useCallback(()=>{const a=t?.column?.type?.toLowerCase(),u=m.current.value;switch(a){case"url":A(String(u??""));break;case"e-mail":O(String(u??""));break;default:g(u);break}},[t?.column?.type]),G=d.useCallback(()=>{const a=t?.column?.type?.toLowerCase(),u=m.current.value,r=m.current.currencyCode;let e=!0;switch(a){case"url":e=A(String(u??""));break;case"e-mail":e=O(String(u??""));break;default:e=g(u);break}if(!e)return{isValid:!1};let n=null;return a==="currency"&&(n={currency_code:N?.(_)||r}),{isValid:!0,value:typeof u=="number"?String(u):u,meta:n}},[t?.column?.type,_,N]);d.useEffect(()=>{I&&v===o&&I(G)},[I,G,v,o]);const te=()=>{if(t?.column?.is_master_data&&t?.column?.masterDataName&&(t?.column?.masterDataColumnName||t?.column?.masterDataFormula)){const r=M?.(String(l),o),e=k?.value??r?.value??t.value;return s.jsx("div",{onMouseDown:n=>n.stopPropagation(),className:"z-[120] h-full w-full",children:s.jsx(ce.MasterDataInlineField,{id:`master-data-cell-${l}-${t.column.id}`,value:e,onChange:(n,C)=>{y(F(n)),f&&f(String(l),o,{value:n,meta:{reference:C||null},originalValue:t.value}),b(n,{reference:C||void 0}),g(n??"")},placeholder:t.column?.Header,masterDataName:t.column.masterDataName,masterDataColumnName:t.column.masterDataColumnName,masterDataFormula:t.column.masterDataFormula,masterDataFilters:t.column.masterDataFilters,onOpenMasterDataModal:J,reference:r?.meta?.reference})})}const a=t?.column?.type?.toLowerCase(),u=o?t?.row?.original?.__cellMetadata?.[o]:void 0;switch(a){case"choice":{const r=u?.choices??t?.column?.choices;return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),children:s.jsx(ne.SelectField,{id:`select-cell-${l}-${t.column.id}`,value:c.value||null,selectOptions:r?.map(e=>({label:e,value:e}))||[],onChange:e=>{const n=e?Array.isArray(e)?e[0]?.value?.toString()||"":e?.value?.toString()||"":"";x(C=>({...C,value:n})),y(F(n)),f&&f(String(l),o,{value:n,originalValue:t.value}),b(n),g(n)},allowClear:!0,inputStyles:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},className:"z-[120]"})})}case"datetime":case"date":return s.jsx("div",{onMouseDown:r=>{r.stopPropagation(),r.target.tagName!=="INPUT"&&r.preventDefault()},children:s.jsx(ae.DateTimeField,{id:`date-cell-${l}-${t.column.id}`,value:c.value||void 0,handleOnChange:r=>{const e=r||"";x(n=>({...n,value:e})),y(F(e)),f&&f(String(l),o,{value:e,originalValue:t.value}),b(e),g(e)},showTime:a==="datetime",dateFormat:a==="date"?"MM/DD/YYYY":void 0,className:"z-[120] w-full"})});case"currency":{const r=V();return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),className:"z-[120] h-full w-full",children:s.jsx(se.InlineCurrencyField,{id:_,value:String(c.value??""),onChange:(e,n)=>{x(C=>({value:e,currencyCode:n||C.currencyCode})),y(F(e)),f&&f(String(l),o,{value:e,meta:{currency_code:n},originalValue:t.value,originalMeta:{currency_code:r}}),g(e),b(e,{currency_code:n})},currencyCode:c.currencyCode,inputStyle:{border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},autoFocus:!0,disabled:E})})}case"percentage":return s.jsxs("label",{className:"relative block h-full",onMouseDown:r=>r.stopPropagation(),children:[s.jsx("input",{ref:j,type:"number",defaultValue:String(c.value??""),onChange:r=>{try{h.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0})}catch{}const e=r.target.value;x(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,g(e),T(e)},onBlur:()=>{w=i,h.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},className:"border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400",id:`percentage-cell-${l}-${t.column.id}`,style:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},autoComplete:"off",disabled:E}),s.jsx("span",{className:"absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100",children:"%"})]});case"boolean":{const r=c.value===!0||c.value==="true"||c.value==="Yes"||c.value==="True"||c.value===1;return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),className:"h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]",children:s.jsx(oe.Toggle,{id:`toggle-cell-${l}-${t.column.id}`,isChecked:r,onChange:e=>{x(n=>({...n,value:e})),y(F(e)),f&&f(String(l),o,{value:e,originalValue:t.value}),b(e)},hideStatus:!1,labelDirection:"right",stopClickPropagation:!0,statusText:r?"Yes":"No"})})}case"url":return s.jsx("input",{ref:j,type:"url",defaultValue:String(c.value??""),onChange:r=>{h.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0});const e=r.target.value;x(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,K?A(e):g(e),T(e)},onBlur:()=>{w=i,h.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E});case"e-mail":return s.jsx("input",{ref:j,type:"email",defaultValue:String(c.value??""),onChange:r=>{try{h.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0})}catch{}const e=r.target.value;x(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,K?O(e):g(e),T(e)},onBlur:()=>{w=i,h.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E});default:return s.jsx("input",{ref:j,type:"text",defaultValue:String(c.value??""),onChange:r=>{h.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0});const e=r.target.value;x(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,g(e),T(e)},onBlur:()=>{w=i,h.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E})}};return s.jsxs("div",{ref:X,className:"relative h-full w-full overflow-visible",children:[s.jsx("div",{className:le("border p-0.5 rounded-lg h-full",L?"border-error-600":"border-neutral-200 dark:border-black-700",E&&"pointer-events-none opacity-70"),children:te()}),!!t?.column?.is_live_field&&s.jsx("div",{className:"absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]",children:Q?s.jsx(de.LoadingSpinnerIcon,{className:"text-primary-600 dark:text-white",size:8}):s.jsx(ue.BoltOutlined,{sx:{fontSize:12,color:"var(--color-primary-600)"}})}),L&&s.jsx("div",{className:"absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full",children:L})]})};exports.InlineEditField=me;
2
2
  //# sourceMappingURL=InlineEditField.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InlineEditField.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineEditField.tsx"],"sourcesContent":["import type { ICell, ValidateAndSaveResult } from '../../types';\nimport { validateCellValue } from '../../validateCell';\nimport { REGEX } from '../../../../../constants/table';\nimport { DateTimeField } from '../../../../forms/date-time-field/DateTimeField';\nimport { SelectField } from '../../../../forms/select-field/SelectField';\nimport { Toggle } from '../../../../forms/toggle/Toggle';\nimport { BoltOutlined } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\nimport { InlineCurrencyField } from './InlineCurrencyField';\nimport { MasterDataInlineField } from './MasterDataInlineField';\nimport { LoadingSpinnerIcon } from '../../../../icon';\n\ntype InlineEditFieldProps = {\n cell: ICell;\n id: string | number;\n inlineEditing: string | null;\n cellRef: React.RefObject<HTMLDivElement>;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n handleUpdateCellData: (\n directValue?: string | boolean | null,\n meta?: { currency_code?: string | null; reference?: unknown | null; [key: string]: unknown | null } | null,\n ) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n};\n\ntype TSelectedOption = { label: string; value: string };\ntype TSelectedOptions = TSelectedOption | TSelectedOption[] | null;\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\nlet _pendingFieldOpCellKey: string | null = null;\n\nconst createSyntheticChangeEvent = (value: string | number | boolean | null): React.ChangeEvent<HTMLInputElement> => {\n return {\n target: { value } as HTMLInputElement,\n } as React.ChangeEvent<HTMLInputElement>;\n};\n\nexport const InlineEditField: React.FC<InlineEditFieldProps> = ({ cell, id, inlineEditing, cellRef, handleCellValueChange, registerValidation }) => {\n const {\n openMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n getCurrencyForCell,\n getPendingEdit,\n addPendingEdit,\n onFieldOperationFlow,\n fieldOperationLoading,\n } = useContext(TableContext);\n\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const isAnyFieldOperationLoading = Boolean(fieldOperationLoading);\n\n const callLiveFieldOperation = useCallback(\n (value: unknown, meta?: { reference?: unknown; currency_code?: string }) => {\n if (!onFieldOperationFlow) return;\n\n onFieldOperationFlow({\n value,\n fieldId: cell?.column?.id as string,\n rowId: String(id),\n rowData: cell?.row?.original as Record<string, unknown>,\n columnKey: (cell?.column?.key as string) || '',\n flowName: cell?.column?.live_field_source as string | undefined,\n isLiveField: cell?.column?.is_live_field as boolean | undefined,\n meta,\n });\n },\n [\n cell?.column?.id,\n cell?.column?.is_live_field,\n cell?.column?.key,\n cell?.column?.live_field_source,\n cell?.row?.original,\n id,\n onFieldOperationFlow,\n ],\n );\n\n const getCurrencyFromCell = () => {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as string | undefined;\n const columnKey = cell?.column?.key as string | undefined;\n\n const dataFromHeader = headerKey ? rawData?.[headerKey]?.currency_code : undefined;\n const dataFromKey = columnKey ? rawData?.[columnKey]?.currency_code : undefined;\n\n if (dataFromHeader && dataFromHeader !== '') {\n return dataFromHeader as string;\n }\n if (dataFromKey && dataFromKey !== '') {\n return dataFromKey as string;\n }\n\n return (cell?.column?.currencyCode as string) || 'USD';\n };\n\n const columnKey = (cell.column.key as string) || '';\n const currencyCellId = `${id}-${columnKey}`;\n const contextCurrency = getCurrencyForCell?.(currencyCellId);\n const initialPendingEdit = getPendingEdit?.(String(id), columnKey);\n\n const [fieldState, setFieldState] = useState<{ value: string | number | boolean | null; currencyCode: string }>({\n value: initialPendingEdit?.value !== undefined ? (initialPendingEdit.value as string | number | boolean | null) : ((cell.value as string | number | boolean | null) || ''),\n currencyCode: (initialPendingEdit?.meta?.currency_code as string) || contextCurrency || getCurrencyFromCell(),\n });\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const computedValidationError = (() => {\n if (inlineEditing !== columnKey) return null;\n const valueToValidate = typeof fieldState.value === 'number' ? String(fieldState.value) : fieldState.value;\n const result = validateCellValue(valueToValidate, cell?.column as { type?: string; is_required?: boolean });\n return result.isValid ? null : result.error || null;\n })();\n\n const pendingError = getPendingEdit?.(String(id), columnKey)?.validationError;\n const displayValidationError = validationError || computedValidationError || pendingError || null;\n\n const previousInlineEditingRef = useRef<string | null>(null);\n\n useEffect(() => {\n const isEnteringEditMode = inlineEditing === columnKey && previousInlineEditingRef.current !== columnKey;\n\n if (isEnteringEditMode) {\n const currencyFromContext = getCurrencyForCell?.(`${id}-${columnKey}`);\n const pendingEdit = getPendingEdit?.(String(id), columnKey);\n const initialValue = pendingEdit?.value !== undefined ? pendingEdit.value : ((cell.value as string | boolean | null) || '');\n const initialCurrency = (pendingEdit?.meta?.currency_code as string) || currencyFromContext || getCurrencyFromCell();\n\n setFieldState({\n value: initialValue as string | number | boolean | null,\n currencyCode: initialCurrency,\n });\n }\n\n if (inlineEditing !== columnKey && previousInlineEditingRef.current === columnKey) {\n setValidationError(null);\n }\n\n previousInlineEditingRef.current = inlineEditing;\n }, [inlineEditing, columnKey, getCurrencyForCell, getPendingEdit, id, cell.value]);\n\n useEffect(() => {\n if (selectedMasterData && inlineEditing === columnKey && cell?.column?.masterDataColumnName && cell?.column?.masterDataName) {\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: selectedMasterData.value as string | boolean | null,\n meta: { reference: selectedMasterData.reference },\n originalValue: cell.value,\n });\n }\n handleCellValueChange(createSyntheticChangeEvent(selectedMasterData.value as string | number | boolean | null));\n callLiveFieldOperation(selectedMasterData.value, { reference: selectedMasterData.reference });\n clearSelectedMasterData?.();\n }\n }, [\n selectedMasterData,\n inlineEditing,\n columnKey,\n cell?.column?.masterDataColumnName,\n cell?.column?.masterDataName,\n addPendingEdit,\n id,\n cell.value,\n handleCellValueChange,\n callLiveFieldOperation,\n clearSelectedMasterData,\n ]);\n\n const validateRequiredField = (value: string | number | boolean | null): boolean => {\n if (cell?.column?.is_required) {\n const isEmpty = value === null || value === undefined || value === '' || (typeof value === 'string' && value.trim() === '');\n if (isEmpty) {\n setValidationError('Field required');\n return false;\n }\n }\n setValidationError(null);\n return true;\n };\n\n const validateUrlField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.url.test(value)) {\n setValidationError('Invalid URL format');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const validateEmailField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.email.test(value)) {\n setValidationError('Email is not valid');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const fieldStateRef = useRef(fieldState);\n useEffect(() => {\n fieldStateRef.current = fieldState;\n }, [fieldState]);\n\n const textInputRef = useRef<HTMLInputElement>(null);\n const cellEditKey = `${id}-${columnKey}`;\n\n useLayoutEffect(() => {\n const el = textInputRef.current;\n if (!el) return;\n const cached = _cursorPositionCache.get(cellEditKey);\n if (cached) {\n el.focus();\n try {\n el.setSelectionRange(cached.start, cached.end);\n } catch {\n // email/number inputs may not support setSelectionRange\n }\n } else if (_blurringCellKey !== cellEditKey) {\n el.focus();\n }\n }, [cellEditKey]);\n\n const debouncedSyncTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n return () => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n };\n }, []);\n\n const syncToParent = useCallback(\n (value: string) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n },\n [handleCellValueChange, addPendingEdit, id, columnKey, cell.value],\n );\n\n const debouncedSyncToParent = useCallback(\n (value: string) => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = setTimeout(() => {\n syncToParent(value);\n }, 300);\n },\n [syncToParent],\n );\n\n const flushSyncToParent = useCallback(() => {\n if (debouncedSyncTimerRef.current) {\n clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = undefined;\n syncToParent(String(fieldStateRef.current.value ?? ''));\n }\n }, [syncToParent]);\n\n const handleBlurValidation = useCallback(() => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n\n switch (columnType) {\n case 'url':\n validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n validateEmailField(String(currentValue ?? ''));\n break;\n default:\n validateRequiredField(currentValue);\n break;\n }\n }, [cell?.column?.type]);\n\n const validateAndGetValue = useCallback((): ValidateAndSaveResult => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n const currentCurrency = fieldStateRef.current.currencyCode;\n\n let isValid = true;\n\n switch (columnType) {\n case 'url':\n isValid = validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n isValid = validateEmailField(String(currentValue ?? ''));\n break;\n default:\n isValid = validateRequiredField(currentValue);\n break;\n }\n\n if (!isValid) {\n return { isValid: false };\n }\n\n let meta: ValidateAndSaveResult['meta'] = null;\n if (columnType === 'currency') {\n const latestCurrency = getCurrencyForCell?.(currencyCellId) || currentCurrency;\n meta = { currency_code: latestCurrency };\n }\n\n return {\n isValid: true,\n value: (typeof currentValue === 'number' ? String(currentValue) : currentValue) as string | boolean | null,\n meta,\n };\n }, [cell?.column?.type, currencyCellId, getCurrencyForCell]);\n\n useEffect(() => {\n if (registerValidation && inlineEditing === columnKey) {\n registerValidation(validateAndGetValue);\n }\n }, [registerValidation, validateAndGetValue, inlineEditing, columnKey]);\n\n const renderFieldByType = () => {\n if (cell?.column?.is_master_data && cell?.column?.masterDataName && (cell?.column?.masterDataColumnName || cell?.column?.masterDataFormula)) {\n const currentPendingEdit = getPendingEdit?.(String(id), columnKey);\n const masterDataValue = selectedMasterData?.value ?? currentPendingEdit?.value ?? cell.value;\n\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <MasterDataInlineField\n id={`master-data-cell-${id}-${cell.column.id}`}\n value={masterDataValue as string | number | null}\n onChange={(value, reference) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: value as string | boolean | null,\n meta: { reference: reference || null },\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value, { reference: reference || undefined });\n validateRequiredField((value as string | boolean | null) ?? '');\n }}\n placeholder={cell.column?.Header as string | undefined}\n masterDataName={cell.column.masterDataName as string}\n masterDataColumnName={cell.column.masterDataColumnName as string}\n masterDataFormula={cell.column.masterDataFormula as string | undefined}\n masterDataFilters={cell.column.masterDataFilters as Record<string, unknown> | undefined}\n onOpenMasterDataModal={openMasterDataModal as never}\n reference={currentPendingEdit?.meta?.reference as Record<string, unknown> | undefined}\n />\n </div>\n );\n }\n\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const rowCellMeta = columnKey\n ? (cell?.row?.original?.__cellMetadata as Record<string, { choices?: string[] }> | undefined)?.[columnKey]\n : undefined;\n\n switch (columnType) {\n case 'choice': {\n const choices = rowCellMeta?.choices ?? (cell?.column?.choices as string[] | undefined);\n return (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <SelectField\n id={`select-cell-${id}-${cell.column.id}`}\n value={fieldState.value || null}\n selectOptions={\n choices?.map((choice: string) => ({\n label: choice,\n value: choice,\n })) || []\n }\n onChange={(selectedOptions: TSelectedOptions) => {\n const value = selectedOptions\n ? Array.isArray(selectedOptions)\n ? selectedOptions[0]?.value?.toString() || ''\n : selectedOptions?.value?.toString() || ''\n : '';\n setFieldState((prev) => ({ ...prev, value }));\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value);\n validateRequiredField(value);\n }}\n allowClear={true}\n inputStyles={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n className='z-[120]'\n />\n </div>\n );\n }\n\n case 'datetime':\n case 'date':\n return (\n <div\n onMouseDown={(e) => {\n e.stopPropagation();\n if ((e.target as HTMLElement).tagName !== 'INPUT') {\n e.preventDefault();\n }\n }}\n >\n <DateTimeField\n id={`date-cell-${id}-${cell.column.id}`}\n value={(fieldState.value as string | undefined) || undefined}\n handleOnChange={(value) => {\n const newValue = value || '';\n setFieldState((prev) => ({ ...prev, value: newValue }));\n handleCellValueChange(createSyntheticChangeEvent(newValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: newValue,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(newValue);\n validateRequiredField(newValue);\n }}\n showTime={columnType === 'datetime'}\n dateFormat={columnType === 'date' ? 'MM/DD/YYYY' : undefined}\n className='z-[120] w-full'\n />\n </div>\n );\n\n case 'currency': {\n const originalCurrencyCode = getCurrencyFromCell();\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <InlineCurrencyField\n id={currencyCellId}\n value={String(fieldState.value ?? '')}\n onChange={(numericValue, currency_code) => {\n setFieldState((prev) => ({\n value: numericValue,\n currencyCode: currency_code || prev.currencyCode,\n }));\n handleCellValueChange(createSyntheticChangeEvent(numericValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: numericValue,\n meta: { currency_code },\n originalValue: cell.value,\n originalMeta: { currency_code: originalCurrencyCode },\n });\n }\n validateRequiredField(numericValue);\n callLiveFieldOperation(numericValue, { currency_code });\n }}\n currencyCode={fieldState.currencyCode}\n inputStyle={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoFocus\n disabled={isAnyFieldOperationLoading}\n />\n </div>\n );\n }\n\n case 'percentage':\n return (\n <label className='relative block h-full' onMouseDown={(e) => e.stopPropagation()}>\n <input\n ref={textInputRef}\n type='number'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // number inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n className='border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400'\n id={`percentage-cell-${id}-${cell.column.id}`}\n style={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoComplete='off'\n disabled={isAnyFieldOperationLoading}\n />\n <span className='absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100'>%</span>\n </label>\n );\n\n case 'boolean': {\n const currentBoolValue =\n fieldState.value === true ||\n fieldState.value === 'true' ||\n fieldState.value === 'Yes' ||\n fieldState.value === 'True' ||\n fieldState.value === 1;\n\n return (\n <div\n onMouseDown={(e) => e.stopPropagation()}\n className='h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]'\n >\n <Toggle\n id={`toggle-cell-${id}-${cell.column.id}`}\n isChecked={currentBoolValue}\n onChange={(checked) => {\n setFieldState((prev) => ({ ...prev, value: checked }));\n handleCellValueChange(createSyntheticChangeEvent(checked));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: checked,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(checked);\n }}\n hideStatus={false}\n labelDirection='right'\n stopClickPropagation={true}\n statusText={currentBoolValue ? 'Yes' : 'No'}\n />\n </div>\n );\n }\n\n case 'url':\n return (\n <input\n ref={textInputRef}\n type='url'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateUrlField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n case 'e-mail':\n return (\n <input\n ref={textInputRef}\n type='email'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // email inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateEmailField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n default:\n return (\n <input\n ref={textInputRef}\n type='text'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n }\n };\n\n return (\n <div ref={cellRef} className='relative h-full w-full overflow-visible'>\n <div\n className={cn(\n 'border p-0.5 rounded-lg h-full',\n displayValidationError ? 'border-error-600' : 'border-neutral-200 dark:border-black-700',\n isAnyFieldOperationLoading && 'pointer-events-none opacity-70',\n )}\n >\n {renderFieldByType()}\n </div>\n {Boolean(cell?.column?.is_live_field) && (\n <div className='absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]'>\n {isFieldOperationLoading ? (\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n ) : (\n <BoltOutlined\n sx={{\n fontSize: 12,\n color: 'var(--color-primary-600)',\n }}\n />\n )}\n </div>\n )}\n {displayValidationError && (\n <div className='absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full'>\n {displayValidationError}\n </div>\n )}\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","_pendingFieldOpCellKey","createSyntheticChangeEvent","value","InlineEditField","cell","id","inlineEditing","cellRef","handleCellValueChange","registerValidation","openMasterDataModal","selectedMasterData","clearSelectedMasterData","getCurrencyForCell","getPendingEdit","addPendingEdit","onFieldOperationFlow","fieldOperationLoading","useContext","TableContext","isFieldOperationLoading","isAnyFieldOperationLoading","callLiveFieldOperation","useCallback","meta","getCurrencyFromCell","rawData","headerKey","columnKey","dataFromHeader","dataFromKey","currencyCellId","contextCurrency","initialPendingEdit","fieldState","setFieldState","useState","validationError","setValidationError","computedValidationError","valueToValidate","result","validateCellValue","pendingError","displayValidationError","previousInlineEditingRef","useRef","useEffect","currencyFromContext","pendingEdit","initialValue","initialCurrency","validateRequiredField","validateUrlField","REGEX","validateEmailField","fieldStateRef","textInputRef","cellEditKey","useLayoutEffect","el","cached","debouncedSyncTimerRef","syncToParent","debouncedSyncToParent","flushSyncToParent","handleBlurValidation","columnType","currentValue","validateAndGetValue","currentCurrency","isValid","renderFieldByType","currentPendingEdit","masterDataValue","jsx","e","MasterDataInlineField","reference","rowCellMeta","choices","SelectField","choice","selectedOptions","prev","DateTimeField","newValue","originalCurrencyCode","InlineCurrencyField","numericValue","currency_code","jsxs","currentBoolValue","Toggle","checked","cn","LoadingSpinnerIcon","BoltOutlined"],"mappings":"mqBA+BMA,MAA2B,IACjC,IAAIC,EAAkC,KAClCC,EAAwC,KAE5C,MAAMC,EAA8BC,IAC3B,CACL,OAAQ,CAAE,MAAAA,CAAA,CAAM,GAIPC,GAAkD,CAAC,CAAE,KAAAC,EAAM,GAAAC,EAAI,cAAAC,EAAe,QAAAC,EAAS,sBAAAC,EAAuB,mBAAAC,KAAyB,CAClJ,KAAM,CACJ,oBAAAC,EACA,mBAAAC,EACA,wBAAAC,EACA,mBAAAC,EACA,eAAAC,EACA,eAAAC,EACA,qBAAAC,EACA,sBAAAC,CAAA,EACEC,EAAAA,WAAWC,GAAAA,YAAY,EAErBC,EAA0BH,IAA0B,GAAGZ,CAAE,IAAID,GAAM,QAAQ,EAAE,GAC7EiB,EAA6B,EAAQJ,EAErCK,EAAyBC,EAAAA,YAC7B,CAACrB,EAAgBsB,IAA2D,CACrER,GAELA,EAAqB,CACnB,MAAAd,EACA,QAASE,GAAM,QAAQ,GACvB,MAAO,OAAOC,CAAE,EAChB,QAASD,GAAM,KAAK,SACpB,UAAYA,GAAM,QAAQ,KAAkB,GAC5C,SAAUA,GAAM,QAAQ,kBACxB,YAAaA,GAAM,QAAQ,cAC3B,KAAAoB,CAAA,CACD,CACH,EACA,CACEpB,GAAM,QAAQ,GACdA,GAAM,QAAQ,cACdA,GAAM,QAAQ,IACdA,GAAM,QAAQ,kBACdA,GAAM,KAAK,SACXC,EACAW,CAAA,CACF,EAGIS,EAAsB,IAAM,CAChC,MAAMC,EAAUtB,GAAM,KAAK,UAAU,UAC/BuB,EAAYvB,GAAM,QAAQ,OAC1BwB,EAAYxB,GAAM,QAAQ,IAE1ByB,EAAiBF,EAAYD,IAAUC,CAAS,GAAG,cAAgB,OACnEG,EAAcF,EAAYF,IAAUE,CAAS,GAAG,cAAgB,OAEtE,OAAIC,GAAkBA,IAAmB,GAChCA,EAELC,GAAeA,IAAgB,GAC1BA,EAGD1B,GAAM,QAAQ,cAA2B,KACnD,EAEMwB,EAAaxB,EAAK,OAAO,KAAkB,GAC3C2B,EAAiB,GAAG1B,CAAE,IAAIuB,CAAS,GACnCI,EAAkBnB,IAAqBkB,CAAc,EACrDE,EAAqBnB,IAAiB,OAAOT,CAAE,EAAGuB,CAAS,EAE3D,CAACM,EAAYC,CAAa,EAAIC,WAA4E,CAC9G,MAAOH,GAAoB,QAAU,OAAaA,EAAmB,MAA+C7B,EAAK,OAA8C,GACvK,aAAe6B,GAAoB,MAAM,eAA4BD,GAAmBP,EAAA,CAAoB,CAC7G,EACK,CAACY,EAAiBC,CAAkB,EAAIF,EAAAA,SAAwB,IAAI,EAEpEG,GAA2B,IAAM,CACrC,GAAIjC,IAAkBsB,EAAW,OAAO,KACxC,MAAMY,EAAkB,OAAON,EAAW,OAAU,SAAW,OAAOA,EAAW,KAAK,EAAIA,EAAW,MAC/FO,EAASC,GAAAA,kBAAkBF,EAAiBpC,GAAM,MAAkD,EAC1G,OAAOqC,EAAO,QAAU,KAAOA,EAAO,OAAS,IACjD,GAAA,EAEME,GAAe7B,IAAiB,OAAOT,CAAE,EAAGuB,CAAS,GAAG,gBACxDgB,EAAyBP,GAAmBE,GAA2BI,IAAgB,KAEvFE,EAA2BC,EAAAA,OAAsB,IAAI,EAE3DC,EAAAA,UAAU,IAAM,CAGd,GAF2BzC,IAAkBsB,GAAaiB,EAAyB,UAAYjB,EAEvE,CACtB,MAAMoB,EAAsBnC,IAAqB,GAAGR,CAAE,IAAIuB,CAAS,EAAE,EAC/DqB,EAAcnC,IAAiB,OAAOT,CAAE,EAAGuB,CAAS,EACpDsB,EAAeD,GAAa,QAAU,OAAYA,EAAY,MAAU7C,EAAK,OAAqC,GAClH+C,EAAmBF,GAAa,MAAM,eAA4BD,GAAuBvB,EAAA,EAE/FU,EAAc,CACZ,MAAOe,EACP,aAAcC,CAAA,CACf,CACH,CAEI7C,IAAkBsB,GAAaiB,EAAyB,UAAYjB,GACtEU,EAAmB,IAAI,EAGzBO,EAAyB,QAAUvC,CACrC,EAAG,CAACA,EAAesB,EAAWf,EAAoBC,EAAgBT,EAAID,EAAK,KAAK,CAAC,EAEjF2C,EAAAA,UAAU,IAAM,CACVpC,GAAsBL,IAAkBsB,GAAaxB,GAAM,QAAQ,sBAAwBA,GAAM,QAAQ,iBACvGW,GACFA,EAAe,OAAOV,CAAE,EAAGuB,EAAW,CACpC,MAAOjB,EAAmB,MAC1B,KAAM,CAAE,UAAWA,EAAmB,SAAA,EACtC,cAAeP,EAAK,KAAA,CACrB,EAEHI,EAAsBP,EAA2BU,EAAmB,KAAyC,CAAC,EAC9GW,EAAuBX,EAAmB,MAAO,CAAE,UAAWA,EAAmB,UAAW,EAC5FC,IAAA,EAEJ,EAAG,CACDD,EACAL,EACAsB,EACAxB,GAAM,QAAQ,qBACdA,GAAM,QAAQ,eACdW,EACAV,EACAD,EAAK,MACLI,EACAc,EACAV,CAAA,CACD,EAED,MAAMwC,EAAyBlD,GACzBE,GAAM,QAAQ,cACAF,GAAU,MAA+BA,IAAU,IAAO,OAAOA,GAAU,UAAYA,EAAM,KAAA,IAAW,KAEtHoC,EAAmB,gBAAgB,EAC5B,KAGXA,EAAmB,IAAI,EAChB,IAGHe,EAAoBnD,GACnBkD,EAAsBlD,CAAK,EAG5BA,GAASA,EAAM,SAAW,IAAM,CAACoD,EAAAA,MAAM,IAAI,KAAKpD,CAAK,GACvDoC,EAAmB,oBAAoB,EAChC,KAETA,EAAmB,IAAI,EAChB,IAPE,GAULiB,EAAsBrD,GACrBkD,EAAsBlD,CAAK,EAG5BA,GAASA,EAAM,SAAW,IAAM,CAACoD,EAAAA,MAAM,MAAM,KAAKpD,CAAK,GACzDoC,EAAmB,oBAAoB,EAChC,KAETA,EAAmB,IAAI,EAChB,IAPE,GAULkB,EAAgBV,EAAAA,OAAOZ,CAAU,EACvCa,EAAAA,UAAU,IAAM,CACdS,EAAc,QAAUtB,CAC1B,EAAG,CAACA,CAAU,CAAC,EAEf,MAAMuB,EAAeX,EAAAA,OAAyB,IAAI,EAC5CY,EAAc,GAAGrD,CAAE,IAAIuB,CAAS,GAEtC+B,EAAAA,gBAAgB,IAAM,CACpB,MAAMC,EAAKH,EAAa,QACxB,GAAI,CAACG,EAAI,OACT,MAAMC,EAAS/D,EAAqB,IAAI4D,CAAW,EACnD,GAAIG,EAAQ,CACVD,EAAG,MAAA,EACH,GAAI,CACFA,EAAG,kBAAkBC,EAAO,MAAOA,EAAO,GAAG,CAC/C,MAAQ,CAER,CACF,MAAW9D,IAAqB2D,GAC9BE,EAAG,MAAA,CAEP,EAAG,CAACF,CAAW,CAAC,EAEhB,MAAMI,EAAwBhB,EAAAA,OAAA,EAE9BC,EAAAA,UAAU,IACD,IAAM,CACPe,EAAsB,SAAS,aAAaA,EAAsB,OAAO,CAC/E,EACC,CAAA,CAAE,EAEL,MAAMC,EAAexC,EAAAA,YAClBrB,GAAkB,CACjBM,EAAsBP,EAA2BC,CAAK,CAAC,EACnDa,GACFA,EAAe,OAAOV,CAAE,EAAGuB,EAAW,CACpC,MAAA1B,EACA,cAAeE,EAAK,KAAA,CACrB,CAEL,EACA,CAACI,EAAuBO,EAAgBV,EAAIuB,EAAWxB,EAAK,KAAK,CAAA,EAG7D4D,EAAwBzC,EAAAA,YAC3BrB,GAAkB,CACb4D,EAAsB,SAAS,aAAaA,EAAsB,OAAO,EAC7EA,EAAsB,QAAU,WAAW,IAAM,CAC/CC,EAAa7D,CAAK,CACpB,EAAG,GAAG,CACR,EACA,CAAC6D,CAAY,CAAA,EAGTE,EAAoB1C,EAAAA,YAAY,IAAM,CACtCuC,EAAsB,UACxB,aAAaA,EAAsB,OAAO,EAC1CA,EAAsB,QAAU,OAChCC,EAAa,OAAOP,EAAc,QAAQ,OAAS,EAAE,CAAC,EAE1D,EAAG,CAACO,CAAY,CAAC,EAEXG,EAAuB3C,EAAAA,YAAY,IAAM,CAC7C,MAAM4C,EAAc/D,GAAM,QAAQ,MAA6B,YAAA,EACzDgE,EAAeZ,EAAc,QAAQ,MAE3C,OAAQW,EAAA,CACN,IAAK,MACHd,EAAiB,OAAOe,GAAgB,EAAE,CAAC,EAC3C,MACF,IAAK,SACHb,EAAmB,OAAOa,GAAgB,EAAE,CAAC,EAC7C,MACF,QACEhB,EAAsBgB,CAAY,EAClC,KAAA,CAEN,EAAG,CAAChE,GAAM,QAAQ,IAAI,CAAC,EAEjBiE,EAAsB9C,EAAAA,YAAY,IAA6B,CACnE,MAAM4C,EAAc/D,GAAM,QAAQ,MAA6B,YAAA,EACzDgE,EAAeZ,EAAc,QAAQ,MACrCc,EAAkBd,EAAc,QAAQ,aAE9C,IAAIe,EAAU,GAEd,OAAQJ,EAAA,CACN,IAAK,MACHI,EAAUlB,EAAiB,OAAOe,GAAgB,EAAE,CAAC,EACrD,MACF,IAAK,SACHG,EAAUhB,EAAmB,OAAOa,GAAgB,EAAE,CAAC,EACvD,MACF,QACEG,EAAUnB,EAAsBgB,CAAY,EAC5C,KAAA,CAGJ,GAAI,CAACG,EACH,MAAO,CAAE,QAAS,EAAA,EAGpB,IAAI/C,EAAsC,KAC1C,OAAI2C,IAAe,aAEjB3C,EAAO,CAAE,cADcX,IAAqBkB,CAAc,GAAKuC,CACvC,GAGnB,CACL,QAAS,GACT,MAAQ,OAAOF,GAAiB,SAAW,OAAOA,CAAY,EAAIA,EAClE,KAAA5C,CAAA,CAEJ,EAAG,CAACpB,GAAM,QAAQ,KAAM2B,EAAgBlB,CAAkB,CAAC,EAE3DkC,EAAAA,UAAU,IAAM,CACVtC,GAAsBH,IAAkBsB,GAC1CnB,EAAmB4D,CAAmB,CAE1C,EAAG,CAAC5D,EAAoB4D,EAAqB/D,EAAesB,CAAS,CAAC,EAEtE,MAAM4C,GAAoB,IAAM,CAC9B,GAAIpE,GAAM,QAAQ,gBAAkBA,GAAM,QAAQ,iBAAmBA,GAAM,QAAQ,sBAAwBA,GAAM,QAAQ,mBAAoB,CAC3I,MAAMqE,EAAqB3D,IAAiB,OAAOT,CAAE,EAAGuB,CAAS,EAC3D8C,EAAkB/D,GAAoB,OAAS8D,GAAoB,OAASrE,EAAK,MAEvF,OACEuE,MAAC,OAAI,YAAcC,GAAMA,EAAE,kBAAmB,UAAU,wBACtD,SAAAD,EAAAA,IAACE,GAAAA,sBAAA,CACC,GAAI,oBAAoBxE,CAAE,IAAID,EAAK,OAAO,EAAE,GAC5C,MAAOsE,EACP,SAAU,CAACxE,EAAO4E,IAAc,CAC9BtE,EAAsBP,EAA2BC,CAAK,CAAC,EACnDa,GACFA,EAAe,OAAOV,CAAE,EAAGuB,EAAW,CACpC,MAAA1B,EACA,KAAM,CAAE,UAAW4E,GAAa,IAAA,EAChC,cAAe1E,EAAK,KAAA,CACrB,EAEHkB,EAAuBpB,EAAO,CAAE,UAAW4E,GAAa,OAAW,EACnE1B,EAAuBlD,GAAqC,EAAE,CAChE,EACA,YAAaE,EAAK,QAAQ,OAC1B,eAAgBA,EAAK,OAAO,eAC5B,qBAAsBA,EAAK,OAAO,qBAClC,kBAAmBA,EAAK,OAAO,kBAC/B,kBAAmBA,EAAK,OAAO,kBAC/B,sBAAuBM,EACvB,UAAW+D,GAAoB,MAAM,SAAA,CAAA,EAEzC,CAEJ,CAEA,MAAMN,EAAc/D,GAAM,QAAQ,MAA6B,YAAA,EACzD2E,EAAcnD,EACfxB,GAAM,KAAK,UAAU,iBAAwEwB,CAAS,EACvG,OAEJ,OAAQuC,EAAA,CACN,IAAK,SAAU,CACb,MAAMa,EAAUD,GAAa,SAAY3E,GAAM,QAAQ,QACvD,aACG,MAAA,CAAI,YAAc,GAAM,EAAE,kBACzB,SAAAuE,EAAAA,IAACM,GAAAA,YAAA,CACC,GAAI,eAAe5E,CAAE,IAAID,EAAK,OAAO,EAAE,GACvC,MAAO8B,EAAW,OAAS,KAC3B,cACE8C,GAAS,IAAKE,IAAoB,CAChC,MAAOA,EACP,MAAOA,CAAA,EACP,GAAK,CAAA,EAET,SAAWC,GAAsC,CAC/C,MAAMjF,EAAQiF,EACV,MAAM,QAAQA,CAAe,EAC3BA,EAAgB,CAAC,GAAG,OAAO,YAAc,GACzCA,GAAiB,OAAO,SAAA,GAAc,GACxC,GACJhD,EAAeiD,IAAU,CAAE,GAAGA,EAAM,MAAAlF,GAAQ,EAC5CM,EAAsBP,EAA2BC,CAAK,CAAC,EACnDa,GACFA,EAAe,OAAOV,CAAE,EAAGuB,EAAW,CACpC,MAAA1B,EACA,cAAeE,EAAK,KAAA,CACrB,EAEHkB,EAAuBpB,CAAK,EAC5BkD,EAAsBlD,CAAK,CAC7B,EACA,WAAY,GACZ,YAAa,CACX,OAAQ,oBACR,OAAQ,OACR,UAAW,qEAAA,EAEb,UAAU,SAAA,CAAA,EAEd,CAEJ,CAEA,IAAK,WACL,IAAK,OACH,OACEyE,EAAAA,IAAC,MAAA,CACC,YAAcC,GAAM,CAClBA,EAAE,gBAAA,EACGA,EAAE,OAAuB,UAAY,SACxCA,EAAE,eAAA,CAEN,EAEA,SAAAD,EAAAA,IAACU,GAAAA,cAAA,CACC,GAAI,aAAahF,CAAE,IAAID,EAAK,OAAO,EAAE,GACrC,MAAQ8B,EAAW,OAAgC,OACnD,eAAiBhC,GAAU,CACzB,MAAMoF,EAAWpF,GAAS,GAC1BiC,EAAeiD,IAAU,CAAE,GAAGA,EAAM,MAAOE,GAAW,EACtD9E,EAAsBP,EAA2BqF,CAAQ,CAAC,EACtDvE,GACFA,EAAe,OAAOV,CAAE,EAAGuB,EAAW,CACpC,MAAO0D,EACP,cAAelF,EAAK,KAAA,CACrB,EAEHkB,EAAuBgE,CAAQ,EAC/BlC,EAAsBkC,CAAQ,CAChC,EACA,SAAUnB,IAAe,WACzB,WAAYA,IAAe,OAAS,aAAe,OACnD,UAAU,gBAAA,CAAA,CACZ,CAAA,EAIN,IAAK,WAAY,CACf,MAAMoB,EAAuB9D,EAAA,EAC7B,OACEkD,MAAC,OAAI,YAAc,GAAM,EAAE,kBAAmB,UAAU,wBACtD,SAAAA,EAAAA,IAACa,GAAAA,oBAAA,CACC,GAAIzD,EACJ,MAAO,OAAOG,EAAW,OAAS,EAAE,EACpC,SAAU,CAACuD,EAAcC,IAAkB,CACzCvD,EAAeiD,IAAU,CACvB,MAAOK,EACP,aAAcC,GAAiBN,EAAK,YAAA,EACpC,EACF5E,EAAsBP,EAA2BwF,CAAY,CAAC,EAC1D1E,GACFA,EAAe,OAAOV,CAAE,EAAGuB,EAAW,CACpC,MAAO6D,EACP,KAAM,CAAE,cAAAC,CAAA,EACR,cAAetF,EAAK,MACpB,aAAc,CAAE,cAAemF,CAAA,CAAqB,CACrD,EAEHnC,EAAsBqC,CAAY,EAClCnE,EAAuBmE,EAAc,CAAE,cAAAC,EAAe,CACxD,EACA,aAAcxD,EAAW,aACzB,WAAY,CACV,OAAQ,oBACR,OAAQ,OACR,UAAW,qEAAA,EAEb,UAAS,GACT,SAAUb,CAAA,CAAA,EAEd,CAEJ,CAEA,IAAK,aACH,OACEsE,OAAC,SAAM,UAAU,wBAAwB,YAAcf,GAAMA,EAAE,gBAAA,EAC7D,SAAA,CAAAD,EAAAA,IAAC,QAAA,CACC,IAAKlB,EACL,KAAK,SACL,aAAc,OAAOvB,EAAW,OAAS,EAAE,EAC3C,SAAW0C,GAAM,CACf,GAAI,CACF9E,EAAqB,IAAI4D,EAAa,CAAE,MAAOkB,EAAE,OAAO,gBAAkB,EAAG,IAAKA,EAAE,OAAO,cAAgB,EAAG,CAChH,MAAQ,CAER,CACA,MAAM1E,EAAQ0E,EAAE,OAAO,MACvBzC,EAAeiD,IAAU,CAAE,GAAGA,EAAM,MAAAlF,GAAQ,EAC5CsD,EAAc,QAAU,CAAE,GAAGA,EAAc,QAAS,MAAAtD,CAAA,EACpDF,EAAyB0D,EACzBN,EAAsBlD,CAAK,EAC3B8D,EAAsB9D,CAAK,CAC7B,EACA,OAAQ,IAAM,CACZH,EAAmB2D,EACnB5D,EAAqB,OAAO4D,CAAW,EACvCO,EAAA,EACAC,EAAA,EACIlE,IAA2B0D,IAC7B1D,EAAyB,KACzBsB,EAAuBkC,EAAc,QAAQ,KAAK,GAEpD,sBAAsB,IAAM,CAC1BzD,EAAmB,IACrB,CAAC,CACH,EACA,UAAY6E,GAAM,CAChBA,EAAE,gBAAA,CACJ,EACA,UAAU,0UACV,GAAI,mBAAmBvE,CAAE,IAAID,EAAK,OAAO,EAAE,GAC3C,MAAO,CACL,OAAQ,oBACR,OAAQ,OACR,UAAW,qEAAA,EAEb,aAAa,MACb,SAAUiB,CAAA,CAAA,EAEZsD,EAAAA,IAAC,OAAA,CAAK,UAAU,8FAA8F,SAAA,GAAA,CAAC,CAAA,EACjH,EAGJ,IAAK,UAAW,CACd,MAAMiB,EACJ1D,EAAW,QAAU,IACrBA,EAAW,QAAU,QACrBA,EAAW,QAAU,OACrBA,EAAW,QAAU,QACrBA,EAAW,QAAU,EAEvB,OACEyC,EAAAA,IAAC,MAAA,CACC,YAAc,GAAM,EAAE,gBAAA,EACtB,UAAU,uKAEV,SAAAA,EAAAA,IAACkB,GAAAA,OAAA,CACC,GAAI,eAAexF,CAAE,IAAID,EAAK,OAAO,EAAE,GACvC,UAAWwF,EACX,SAAWE,GAAY,CACrB3D,EAAeiD,IAAU,CAAE,GAAGA,EAAM,MAAOU,GAAU,EACrDtF,EAAsBP,EAA2B6F,CAAO,CAAC,EACrD/E,GACFA,EAAe,OAAOV,CAAE,EAAGuB,EAAW,CACpC,MAAOkE,EACP,cAAe1F,EAAK,KAAA,CACrB,EAEHkB,EAAuBwE,CAAO,CAChC,EACA,WAAY,GACZ,eAAe,QACf,qBAAsB,GACtB,WAAYF,EAAmB,MAAQ,IAAA,CAAA,CACzC,CAAA,CAGN,CAEA,IAAK,MACH,OACEjB,EAAAA,IAAC,QAAA,CACC,IAAKlB,EACL,KAAK,MACL,aAAc,OAAOvB,EAAW,OAAS,EAAE,EAC3C,SAAW0C,GAAM,CACf9E,EAAqB,IAAI4D,EAAa,CAAE,MAAOkB,EAAE,OAAO,gBAAkB,EAAG,IAAKA,EAAE,OAAO,cAAgB,EAAG,EAC9G,MAAM1E,EAAQ0E,EAAE,OAAO,MACvBzC,EAAeiD,IAAU,CAAE,GAAGA,EAAM,MAAAlF,GAAQ,EAC5CsD,EAAc,QAAU,CAAE,GAAGA,EAAc,QAAS,MAAAtD,CAAA,EACpDF,EAAyB0D,EACrBrB,EACFgB,EAAiBnD,CAAK,EAEtBkD,EAAsBlD,CAAK,EAE7B8D,EAAsB9D,CAAK,CAC7B,EACA,OAAQ,IAAM,CACZH,EAAmB2D,EACnB5D,EAAqB,OAAO4D,CAAW,EACvCO,EAAA,EACAC,EAAA,EACIlE,IAA2B0D,IAC7B1D,EAAyB,KACzBsB,EAAuBkC,EAAc,QAAQ,KAAK,GAEpD,sBAAsB,IAAM,CAC1BzD,EAAmB,IACrB,CAAC,CACH,EACA,UAAY6E,GAAM,CAChBA,EAAE,gBAAA,CACJ,EACA,YAAcA,GAAMA,EAAE,gBAAA,EACtB,UAAU,uSACV,MAAO,CACL,OAAQ,mBAAA,EAEV,SAAUvD,CAAA,CAAA,EAIhB,IAAK,SACH,OACEsD,EAAAA,IAAC,QAAA,CACC,IAAKlB,EACL,KAAK,QACL,aAAc,OAAOvB,EAAW,OAAS,EAAE,EAC3C,SAAW0C,GAAM,CACf,GAAI,CACF9E,EAAqB,IAAI4D,EAAa,CAAE,MAAOkB,EAAE,OAAO,gBAAkB,EAAG,IAAKA,EAAE,OAAO,cAAgB,EAAG,CAChH,MAAQ,CAER,CACA,MAAM1E,EAAQ0E,EAAE,OAAO,MACvBzC,EAAeiD,IAAU,CAAE,GAAGA,EAAM,MAAAlF,GAAQ,EAC5CsD,EAAc,QAAU,CAAE,GAAGA,EAAc,QAAS,MAAAtD,CAAA,EACpDF,EAAyB0D,EACrBrB,EACFkB,EAAmBrD,CAAK,EAExBkD,EAAsBlD,CAAK,EAE7B8D,EAAsB9D,CAAK,CAC7B,EACA,OAAQ,IAAM,CACZH,EAAmB2D,EACnB5D,EAAqB,OAAO4D,CAAW,EACvCO,EAAA,EACAC,EAAA,EACIlE,IAA2B0D,IAC7B1D,EAAyB,KACzBsB,EAAuBkC,EAAc,QAAQ,KAAK,GAEpD,sBAAsB,IAAM,CAC1BzD,EAAmB,IACrB,CAAC,CACH,EACA,UAAY6E,GAAM,CAChBA,EAAE,gBAAA,CACJ,EACA,YAAcA,GAAMA,EAAE,gBAAA,EACtB,UAAU,uSACV,MAAO,CACL,OAAQ,mBAAA,EAEV,SAAUvD,CAAA,CAAA,EAIhB,QACE,OACEsD,EAAAA,IAAC,QAAA,CACC,IAAKlB,EACL,KAAK,OACL,aAAc,OAAOvB,EAAW,OAAS,EAAE,EAC3C,SAAW0C,GAAM,CACf9E,EAAqB,IAAI4D,EAAa,CAAE,MAAOkB,EAAE,OAAO,gBAAkB,EAAG,IAAKA,EAAE,OAAO,cAAgB,EAAG,EAC9G,MAAM1E,EAAQ0E,EAAE,OAAO,MACvBzC,EAAeiD,IAAU,CAAE,GAAGA,EAAM,MAAAlF,GAAQ,EAC5CsD,EAAc,QAAU,CAAE,GAAGA,EAAc,QAAS,MAAAtD,CAAA,EACpDF,EAAyB0D,EACzBN,EAAsBlD,CAAK,EAC3B8D,EAAsB9D,CAAK,CAC7B,EACA,OAAQ,IAAM,CACZH,EAAmB2D,EACnB5D,EAAqB,OAAO4D,CAAW,EACvCO,EAAA,EACAC,EAAA,EACIlE,IAA2B0D,IAC7B1D,EAAyB,KACzBsB,EAAuBkC,EAAc,QAAQ,KAAK,GAEpD,sBAAsB,IAAM,CAC1BzD,EAAmB,IACrB,CAAC,CACH,EACA,UAAY6E,GAAM,CAChBA,EAAE,gBAAA,CACJ,EACA,YAAcA,GAAMA,EAAE,gBAAA,EACtB,UAAU,uSACV,MAAO,CACL,OAAQ,mBAAA,EAEV,SAAUvD,CAAA,CAAA,CACZ,CAGR,EAEA,OACEsE,EAAAA,KAAC,MAAA,CAAI,IAAKpF,EAAS,UAAU,0CAC3B,SAAA,CAAAoE,EAAAA,IAAC,MAAA,CACC,UAAWoB,GACT,iCACAnD,EAAyB,mBAAqB,2CAC9CvB,GAA8B,gCAAA,EAG/B,SAAAmD,GAAA,CAAkB,CAAA,EAEpB,EAAQpE,GAAM,QAAQ,qBACpB,MAAA,CAAI,UAAU,oLACZ,SAAAgB,QACE4E,GAAAA,mBAAA,CAAmB,UAAU,mCAAmC,KAAM,EAAG,EAE1ErB,EAAAA,IAACsB,GAAAA,aAAA,CACC,GAAI,CACF,SAAU,GACV,MAAO,0BAAA,CACT,CAAA,EAGN,EAEDrD,GACC+B,EAAAA,IAAC,MAAA,CAAI,UAAU,yIACZ,SAAA/B,CAAA,CACH,CAAA,EAEJ,CAEJ"}
1
+ {"version":3,"file":"InlineEditField.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineEditField.tsx"],"sourcesContent":["import type { ICell, ValidateAndSaveResult } from '../../types';\nimport { validateCellValue } from '../../validateCell';\nimport { REGEX } from '../../../../../constants/table';\nimport { DateTimeField } from '../../../../forms/date-time-field/DateTimeField';\nimport { SelectField } from '../../../../forms/select-field/SelectField';\nimport { Toggle } from '../../../../forms/toggle/Toggle';\nimport { BoltOutlined } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\nimport { InlineCurrencyField } from './InlineCurrencyField';\nimport { MasterDataInlineField } from './MasterDataInlineField';\nimport { LoadingSpinnerIcon } from '../../../../icon';\n\ntype InlineEditFieldProps = {\n cell: ICell;\n id: string | number;\n inlineEditing: string | null;\n cellRef: React.RefObject<HTMLDivElement>;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n handleUpdateCellData: (\n directValue?: string | boolean | null,\n meta?: { currency_code?: string | null; reference?: unknown | null; [key: string]: unknown | null } | null,\n ) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n};\n\ntype TSelectedOption = { label: string; value: string };\ntype TSelectedOptions = TSelectedOption | TSelectedOption[] | null;\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\nlet _pendingFieldOpCellKey: string | null = null;\n\nconst createSyntheticChangeEvent = (value: string | number | boolean | null): React.ChangeEvent<HTMLInputElement> => {\n return {\n target: { value } as HTMLInputElement,\n } as React.ChangeEvent<HTMLInputElement>;\n};\n\nexport const InlineEditField: React.FC<InlineEditFieldProps> = ({ cell, id, inlineEditing, cellRef, handleCellValueChange, registerValidation }) => {\n const {\n openMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n getCurrencyForCell,\n getPendingEdit,\n addPendingEdit,\n onFieldOperationFlow,\n fieldOperationLoading,\n } = useContext(TableContext);\n\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const isAnyFieldOperationLoading = Boolean(fieldOperationLoading);\n\n const callLiveFieldOperation = useCallback(\n (value: unknown, meta?: { reference?: unknown; currency_code?: string }) => {\n if (!onFieldOperationFlow) return;\n\n onFieldOperationFlow({\n value,\n fieldId: cell?.column?.id as string,\n rowId: String(id),\n rowData: cell?.row?.original as Record<string, unknown>,\n columnKey: (cell?.column?.key as string) || '',\n flowName: cell?.column?.live_field_source as string | undefined,\n isLiveField: cell?.column?.is_live_field as boolean | undefined,\n meta,\n });\n },\n [\n cell?.column?.id,\n cell?.column?.is_live_field,\n cell?.column?.key,\n cell?.column?.live_field_source,\n cell?.row?.original,\n id,\n onFieldOperationFlow,\n ],\n );\n\n const getCurrencyFromCell = () => {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as string | undefined;\n const columnKey = cell?.column?.key as string | undefined;\n\n const dataFromHeader = headerKey ? rawData?.[headerKey]?.currency_code : undefined;\n const dataFromKey = columnKey ? rawData?.[columnKey]?.currency_code : undefined;\n\n if (dataFromHeader && dataFromHeader !== '') {\n return dataFromHeader as string;\n }\n if (dataFromKey && dataFromKey !== '') {\n return dataFromKey as string;\n }\n\n return (cell?.column?.currencyCode as string) || 'USD';\n };\n\n const columnKey = (cell.column.key as string) || '';\n const currencyCellId = `${id}-${columnKey}`;\n const contextCurrency = getCurrencyForCell?.(currencyCellId);\n const initialPendingEdit = getPendingEdit?.(String(id), columnKey);\n\n const [fieldState, setFieldState] = useState<{ value: string | number | boolean | null; currencyCode: string }>({\n value: initialPendingEdit?.value !== undefined ? (initialPendingEdit.value as string | number | boolean | null) : ((cell.value as string | number | boolean | null) || ''),\n currencyCode: (initialPendingEdit?.meta?.currency_code as string) || contextCurrency || getCurrencyFromCell(),\n });\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const computedValidationError = (() => {\n if (inlineEditing !== columnKey) return null;\n const valueToValidate = typeof fieldState.value === 'number' ? String(fieldState.value) : fieldState.value;\n const result = validateCellValue(valueToValidate, cell?.column as { type?: string; is_required?: boolean });\n return result.isValid ? null : result.error || null;\n })();\n\n const pendingError = getPendingEdit?.(String(id), columnKey)?.validationError;\n const displayValidationError = validationError || computedValidationError || pendingError || null;\n\n const previousInlineEditingRef = useRef<string | null>(null);\n\n useEffect(() => {\n const isEnteringEditMode = inlineEditing === columnKey && previousInlineEditingRef.current !== columnKey;\n\n if (isEnteringEditMode) {\n const currencyFromContext = getCurrencyForCell?.(`${id}-${columnKey}`);\n const pendingEdit = getPendingEdit?.(String(id), columnKey);\n const initialValue = pendingEdit?.value !== undefined ? pendingEdit.value : ((cell.value as string | boolean | null) || '');\n const initialCurrency = (pendingEdit?.meta?.currency_code as string) || currencyFromContext || getCurrencyFromCell();\n\n setFieldState({\n value: initialValue as string | number | boolean | null,\n currencyCode: initialCurrency,\n });\n }\n\n if (inlineEditing !== columnKey && previousInlineEditingRef.current === columnKey) {\n setValidationError(null);\n }\n\n previousInlineEditingRef.current = inlineEditing;\n }, [inlineEditing, columnKey, getCurrencyForCell, getPendingEdit, id, cell.value]);\n\n useEffect(() => {\n if (selectedMasterData && inlineEditing === columnKey && cell?.column?.masterDataColumnName && cell?.column?.masterDataName) {\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: selectedMasterData.value as string | boolean | null,\n meta: { reference: selectedMasterData.reference },\n originalValue: cell.value,\n });\n }\n handleCellValueChange(createSyntheticChangeEvent(selectedMasterData.value as string | number | boolean | null));\n callLiveFieldOperation(selectedMasterData.value, { reference: selectedMasterData.reference });\n clearSelectedMasterData?.();\n }\n }, [\n selectedMasterData,\n inlineEditing,\n columnKey,\n cell?.column?.masterDataColumnName,\n cell?.column?.masterDataName,\n addPendingEdit,\n id,\n cell.value,\n handleCellValueChange,\n callLiveFieldOperation,\n clearSelectedMasterData,\n ]);\n\n const validateRequiredField = (value: string | number | boolean | null): boolean => {\n if (cell?.column?.is_required) {\n const isEmpty = value === null || value === undefined || value === '' || (typeof value === 'string' && value.trim() === '');\n if (isEmpty) {\n setValidationError('Field required');\n return false;\n }\n }\n setValidationError(null);\n return true;\n };\n\n const validateUrlField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.url.test(value)) {\n setValidationError('Invalid URL format');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const validateEmailField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.email.test(value)) {\n setValidationError('Email is not valid');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const fieldStateRef = useRef(fieldState);\n useEffect(() => {\n fieldStateRef.current = fieldState;\n }, [fieldState]);\n\n const textInputRef = useRef<HTMLInputElement>(null);\n const cellEditKey = `${id}-${columnKey}`;\n\n useLayoutEffect(() => {\n const el = textInputRef.current;\n if (!el) return;\n const cached = _cursorPositionCache.get(cellEditKey);\n if (cached) {\n el.focus();\n try {\n el.setSelectionRange(cached.start, cached.end);\n } catch {\n // email/number inputs may not support setSelectionRange\n }\n } else if (_blurringCellKey !== cellEditKey) {\n el.focus();\n }\n }, [cellEditKey]);\n\n const debouncedSyncTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n return () => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n };\n }, []);\n\n const syncToParent = useCallback(\n (value: string) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n },\n [handleCellValueChange, addPendingEdit, id, columnKey, cell.value],\n );\n\n const debouncedSyncToParent = useCallback(\n (value: string) => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = setTimeout(() => {\n syncToParent(value);\n }, 300);\n },\n [syncToParent],\n );\n\n const flushSyncToParent = useCallback(() => {\n if (debouncedSyncTimerRef.current) {\n clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = undefined;\n syncToParent(String(fieldStateRef.current.value ?? ''));\n }\n }, [syncToParent]);\n\n const handleBlurValidation = useCallback(() => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n\n switch (columnType) {\n case 'url':\n validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n validateEmailField(String(currentValue ?? ''));\n break;\n default:\n validateRequiredField(currentValue);\n break;\n }\n }, [cell?.column?.type]);\n\n const validateAndGetValue = useCallback((): ValidateAndSaveResult => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n const currentCurrency = fieldStateRef.current.currencyCode;\n\n let isValid = true;\n\n switch (columnType) {\n case 'url':\n isValid = validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n isValid = validateEmailField(String(currentValue ?? ''));\n break;\n default:\n isValid = validateRequiredField(currentValue);\n break;\n }\n\n if (!isValid) {\n return { isValid: false };\n }\n\n let meta: ValidateAndSaveResult['meta'] = null;\n if (columnType === 'currency') {\n const latestCurrency = getCurrencyForCell?.(currencyCellId) || currentCurrency;\n meta = { currency_code: latestCurrency };\n }\n\n return {\n isValid: true,\n value: (typeof currentValue === 'number' ? String(currentValue) : currentValue) as string | boolean | null,\n meta,\n };\n }, [cell?.column?.type, currencyCellId, getCurrencyForCell]);\n\n useEffect(() => {\n if (registerValidation && inlineEditing === columnKey) {\n registerValidation(validateAndGetValue);\n }\n }, [registerValidation, validateAndGetValue, inlineEditing, columnKey]);\n\n const renderFieldByType = () => {\n if (cell?.column?.is_master_data && cell?.column?.masterDataName && (cell?.column?.masterDataColumnName || cell?.column?.masterDataFormula)) {\n const currentPendingEdit = getPendingEdit?.(String(id), columnKey);\n const masterDataValue = selectedMasterData?.value ?? currentPendingEdit?.value ?? cell.value;\n\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <MasterDataInlineField\n id={`master-data-cell-${id}-${cell.column.id}`}\n value={masterDataValue as string | number | null}\n onChange={(value, reference) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: value as string | boolean | null,\n meta: { reference: reference || null },\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value, { reference: reference || undefined });\n validateRequiredField((value as string | boolean | null) ?? '');\n }}\n placeholder={cell.column?.Header as string | undefined}\n masterDataName={cell.column.masterDataName as string}\n masterDataColumnName={cell.column.masterDataColumnName as string}\n masterDataFormula={cell.column.masterDataFormula as string | undefined}\n masterDataFilters={cell.column.masterDataFilters as Record<string, unknown> | undefined}\n onOpenMasterDataModal={openMasterDataModal as never}\n reference={currentPendingEdit?.meta?.reference as Record<string, unknown> | undefined}\n />\n </div>\n );\n }\n\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const rowCellMeta = columnKey\n ? (cell?.row?.original?.__cellMetadata as Record<string, { choices?: string[] }> | undefined)?.[columnKey]\n : undefined;\n\n switch (columnType) {\n case 'choice': {\n const choices = rowCellMeta?.choices ?? (cell?.column?.choices as string[] | undefined);\n return (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <SelectField\n id={`select-cell-${id}-${cell.column.id}`}\n value={fieldState.value || null}\n selectOptions={\n choices?.map((choice: string) => ({\n label: choice,\n value: choice,\n })) || []\n }\n onChange={(selectedOptions: TSelectedOptions) => {\n const value = selectedOptions\n ? Array.isArray(selectedOptions)\n ? selectedOptions[0]?.value?.toString() || ''\n : selectedOptions?.value?.toString() || ''\n : '';\n setFieldState((prev) => ({ ...prev, value }));\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value);\n validateRequiredField(value);\n }}\n allowClear={true}\n inputStyles={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n className='z-[120]'\n />\n </div>\n );\n }\n\n case 'datetime':\n case 'date':\n return (\n <div\n onMouseDown={(e) => {\n e.stopPropagation();\n if ((e.target as HTMLElement).tagName !== 'INPUT') {\n e.preventDefault();\n }\n }}\n >\n <DateTimeField\n id={`date-cell-${id}-${cell.column.id}`}\n value={(fieldState.value as string | undefined) || undefined}\n handleOnChange={(value) => {\n const newValue = value || '';\n setFieldState((prev) => ({ ...prev, value: newValue }));\n handleCellValueChange(createSyntheticChangeEvent(newValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: newValue,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(newValue);\n validateRequiredField(newValue);\n }}\n showTime={columnType === 'datetime'}\n dateFormat={columnType === 'date' ? 'MM/DD/YYYY' : undefined}\n className='z-[120] w-full'\n />\n </div>\n );\n\n case 'currency': {\n const originalCurrencyCode = getCurrencyFromCell();\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <InlineCurrencyField\n id={currencyCellId}\n value={String(fieldState.value ?? '')}\n onChange={(numericValue, currency_code) => {\n setFieldState((prev) => ({\n value: numericValue,\n currencyCode: currency_code || prev.currencyCode,\n }));\n handleCellValueChange(createSyntheticChangeEvent(numericValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: numericValue,\n meta: { currency_code },\n originalValue: cell.value,\n originalMeta: { currency_code: originalCurrencyCode },\n });\n }\n validateRequiredField(numericValue);\n callLiveFieldOperation(numericValue, { currency_code });\n }}\n currencyCode={fieldState.currencyCode}\n inputStyle={{\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoFocus\n disabled={isAnyFieldOperationLoading}\n />\n </div>\n );\n }\n\n case 'percentage':\n return (\n <label className='relative block h-full' onMouseDown={(e) => e.stopPropagation()}>\n <input\n ref={textInputRef}\n type='number'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // number inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n className='border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400'\n id={`percentage-cell-${id}-${cell.column.id}`}\n style={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoComplete='off'\n disabled={isAnyFieldOperationLoading}\n />\n <span className='absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100'>%</span>\n </label>\n );\n\n case 'boolean': {\n const currentBoolValue =\n fieldState.value === true ||\n fieldState.value === 'true' ||\n fieldState.value === 'Yes' ||\n fieldState.value === 'True' ||\n fieldState.value === 1;\n\n return (\n <div\n onMouseDown={(e) => e.stopPropagation()}\n className='h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]'\n >\n <Toggle\n id={`toggle-cell-${id}-${cell.column.id}`}\n isChecked={currentBoolValue}\n onChange={(checked) => {\n setFieldState((prev) => ({ ...prev, value: checked }));\n handleCellValueChange(createSyntheticChangeEvent(checked));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: checked,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(checked);\n }}\n hideStatus={false}\n labelDirection='right'\n stopClickPropagation={true}\n statusText={currentBoolValue ? 'Yes' : 'No'}\n />\n </div>\n );\n }\n\n case 'url':\n return (\n <input\n ref={textInputRef}\n type='url'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateUrlField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n case 'e-mail':\n return (\n <input\n ref={textInputRef}\n type='email'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // email inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateEmailField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n default:\n return (\n <input\n ref={textInputRef}\n type='text'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n }\n };\n\n return (\n <div ref={cellRef} className='relative h-full w-full overflow-visible'>\n <div\n className={cn(\n 'border p-0.5 rounded-lg h-full',\n displayValidationError ? 'border-error-600' : 'border-neutral-200 dark:border-black-700',\n isAnyFieldOperationLoading && 'pointer-events-none opacity-70',\n )}\n >\n {renderFieldByType()}\n </div>\n {Boolean(cell?.column?.is_live_field) && (\n <div className='absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]'>\n {isFieldOperationLoading ? (\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n ) : (\n <BoltOutlined\n sx={{\n fontSize: 12,\n color: 'var(--color-primary-600)',\n }}\n />\n )}\n </div>\n )}\n {displayValidationError && (\n <div className='absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full'>\n {displayValidationError}\n </div>\n )}\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","_pendingFieldOpCellKey","createSyntheticChangeEvent","value","InlineEditField","cell","id","inlineEditing","cellRef","handleCellValueChange","registerValidation","openMasterDataModal","selectedMasterData","clearSelectedMasterData","getCurrencyForCell","getPendingEdit","addPendingEdit","onFieldOperationFlow","fieldOperationLoading","useContext","TableContext","isFieldOperationLoading","isAnyFieldOperationLoading","callLiveFieldOperation","useCallback","meta","getCurrencyFromCell","rawData","headerKey","columnKey","dataFromHeader","dataFromKey","currencyCellId","contextCurrency","initialPendingEdit","fieldState","setFieldState","useState","validationError","setValidationError","computedValidationError","valueToValidate","result","validateCellValue","pendingError","displayValidationError","previousInlineEditingRef","useRef","useEffect","currencyFromContext","pendingEdit","initialValue","initialCurrency","validateRequiredField","validateUrlField","REGEX","validateEmailField","fieldStateRef","textInputRef","cellEditKey","useLayoutEffect","el","cached","debouncedSyncTimerRef","syncToParent","debouncedSyncToParent","flushSyncToParent","handleBlurValidation","columnType","currentValue","validateAndGetValue","currentCurrency","isValid","renderFieldByType","currentPendingEdit","masterDataValue","jsx","e","MasterDataInlineField","reference","rowCellMeta","choices","SelectField","choice","selectedOptions","prev","DateTimeField","newValue","originalCurrencyCode","InlineCurrencyField","numericValue","currency_code","jsxs","currentBoolValue","Toggle","checked","cn","LoadingSpinnerIcon","BoltOutlined"],"mappings":"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"}
@@ -265,7 +265,6 @@ const C = (t) => ({
265
265
  },
266
266
  currencyCode: c.currencyCode,
267
267
  inputStyle: {
268
- height: "var(--row-height)",
269
268
  border: "none",
270
269
  boxShadow: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"
271
270
  },
@@ -1 +1 @@
1
- {"version":3,"file":"InlineEditField.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineEditField.tsx"],"sourcesContent":["import type { ICell, ValidateAndSaveResult } from '../../types';\nimport { validateCellValue } from '../../validateCell';\nimport { REGEX } from '../../../../../constants/table';\nimport { DateTimeField } from '../../../../forms/date-time-field/DateTimeField';\nimport { SelectField } from '../../../../forms/select-field/SelectField';\nimport { Toggle } from '../../../../forms/toggle/Toggle';\nimport { BoltOutlined } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\nimport { InlineCurrencyField } from './InlineCurrencyField';\nimport { MasterDataInlineField } from './MasterDataInlineField';\nimport { LoadingSpinnerIcon } from '../../../../icon';\n\ntype InlineEditFieldProps = {\n cell: ICell;\n id: string | number;\n inlineEditing: string | null;\n cellRef: React.RefObject<HTMLDivElement>;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n handleUpdateCellData: (\n directValue?: string | boolean | null,\n meta?: { currency_code?: string | null; reference?: unknown | null; [key: string]: unknown | null } | null,\n ) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n};\n\ntype TSelectedOption = { label: string; value: string };\ntype TSelectedOptions = TSelectedOption | TSelectedOption[] | null;\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\nlet _pendingFieldOpCellKey: string | null = null;\n\nconst createSyntheticChangeEvent = (value: string | number | boolean | null): React.ChangeEvent<HTMLInputElement> => {\n return {\n target: { value } as HTMLInputElement,\n } as React.ChangeEvent<HTMLInputElement>;\n};\n\nexport const InlineEditField: React.FC<InlineEditFieldProps> = ({ cell, id, inlineEditing, cellRef, handleCellValueChange, registerValidation }) => {\n const {\n openMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n getCurrencyForCell,\n getPendingEdit,\n addPendingEdit,\n onFieldOperationFlow,\n fieldOperationLoading,\n } = useContext(TableContext);\n\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const isAnyFieldOperationLoading = Boolean(fieldOperationLoading);\n\n const callLiveFieldOperation = useCallback(\n (value: unknown, meta?: { reference?: unknown; currency_code?: string }) => {\n if (!onFieldOperationFlow) return;\n\n onFieldOperationFlow({\n value,\n fieldId: cell?.column?.id as string,\n rowId: String(id),\n rowData: cell?.row?.original as Record<string, unknown>,\n columnKey: (cell?.column?.key as string) || '',\n flowName: cell?.column?.live_field_source as string | undefined,\n isLiveField: cell?.column?.is_live_field as boolean | undefined,\n meta,\n });\n },\n [\n cell?.column?.id,\n cell?.column?.is_live_field,\n cell?.column?.key,\n cell?.column?.live_field_source,\n cell?.row?.original,\n id,\n onFieldOperationFlow,\n ],\n );\n\n const getCurrencyFromCell = () => {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as string | undefined;\n const columnKey = cell?.column?.key as string | undefined;\n\n const dataFromHeader = headerKey ? rawData?.[headerKey]?.currency_code : undefined;\n const dataFromKey = columnKey ? rawData?.[columnKey]?.currency_code : undefined;\n\n if (dataFromHeader && dataFromHeader !== '') {\n return dataFromHeader as string;\n }\n if (dataFromKey && dataFromKey !== '') {\n return dataFromKey as string;\n }\n\n return (cell?.column?.currencyCode as string) || 'USD';\n };\n\n const columnKey = (cell.column.key as string) || '';\n const currencyCellId = `${id}-${columnKey}`;\n const contextCurrency = getCurrencyForCell?.(currencyCellId);\n const initialPendingEdit = getPendingEdit?.(String(id), columnKey);\n\n const [fieldState, setFieldState] = useState<{ value: string | number | boolean | null; currencyCode: string }>({\n value: initialPendingEdit?.value !== undefined ? (initialPendingEdit.value as string | number | boolean | null) : ((cell.value as string | number | boolean | null) || ''),\n currencyCode: (initialPendingEdit?.meta?.currency_code as string) || contextCurrency || getCurrencyFromCell(),\n });\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const computedValidationError = (() => {\n if (inlineEditing !== columnKey) return null;\n const valueToValidate = typeof fieldState.value === 'number' ? String(fieldState.value) : fieldState.value;\n const result = validateCellValue(valueToValidate, cell?.column as { type?: string; is_required?: boolean });\n return result.isValid ? null : result.error || null;\n })();\n\n const pendingError = getPendingEdit?.(String(id), columnKey)?.validationError;\n const displayValidationError = validationError || computedValidationError || pendingError || null;\n\n const previousInlineEditingRef = useRef<string | null>(null);\n\n useEffect(() => {\n const isEnteringEditMode = inlineEditing === columnKey && previousInlineEditingRef.current !== columnKey;\n\n if (isEnteringEditMode) {\n const currencyFromContext = getCurrencyForCell?.(`${id}-${columnKey}`);\n const pendingEdit = getPendingEdit?.(String(id), columnKey);\n const initialValue = pendingEdit?.value !== undefined ? pendingEdit.value : ((cell.value as string | boolean | null) || '');\n const initialCurrency = (pendingEdit?.meta?.currency_code as string) || currencyFromContext || getCurrencyFromCell();\n\n setFieldState({\n value: initialValue as string | number | boolean | null,\n currencyCode: initialCurrency,\n });\n }\n\n if (inlineEditing !== columnKey && previousInlineEditingRef.current === columnKey) {\n setValidationError(null);\n }\n\n previousInlineEditingRef.current = inlineEditing;\n }, [inlineEditing, columnKey, getCurrencyForCell, getPendingEdit, id, cell.value]);\n\n useEffect(() => {\n if (selectedMasterData && inlineEditing === columnKey && cell?.column?.masterDataColumnName && cell?.column?.masterDataName) {\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: selectedMasterData.value as string | boolean | null,\n meta: { reference: selectedMasterData.reference },\n originalValue: cell.value,\n });\n }\n handleCellValueChange(createSyntheticChangeEvent(selectedMasterData.value as string | number | boolean | null));\n callLiveFieldOperation(selectedMasterData.value, { reference: selectedMasterData.reference });\n clearSelectedMasterData?.();\n }\n }, [\n selectedMasterData,\n inlineEditing,\n columnKey,\n cell?.column?.masterDataColumnName,\n cell?.column?.masterDataName,\n addPendingEdit,\n id,\n cell.value,\n handleCellValueChange,\n callLiveFieldOperation,\n clearSelectedMasterData,\n ]);\n\n const validateRequiredField = (value: string | number | boolean | null): boolean => {\n if (cell?.column?.is_required) {\n const isEmpty = value === null || value === undefined || value === '' || (typeof value === 'string' && value.trim() === '');\n if (isEmpty) {\n setValidationError('Field required');\n return false;\n }\n }\n setValidationError(null);\n return true;\n };\n\n const validateUrlField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.url.test(value)) {\n setValidationError('Invalid URL format');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const validateEmailField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.email.test(value)) {\n setValidationError('Email is not valid');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const fieldStateRef = useRef(fieldState);\n useEffect(() => {\n fieldStateRef.current = fieldState;\n }, [fieldState]);\n\n const textInputRef = useRef<HTMLInputElement>(null);\n const cellEditKey = `${id}-${columnKey}`;\n\n useLayoutEffect(() => {\n const el = textInputRef.current;\n if (!el) return;\n const cached = _cursorPositionCache.get(cellEditKey);\n if (cached) {\n el.focus();\n try {\n el.setSelectionRange(cached.start, cached.end);\n } catch {\n // email/number inputs may not support setSelectionRange\n }\n } else if (_blurringCellKey !== cellEditKey) {\n el.focus();\n }\n }, [cellEditKey]);\n\n const debouncedSyncTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n return () => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n };\n }, []);\n\n const syncToParent = useCallback(\n (value: string) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n },\n [handleCellValueChange, addPendingEdit, id, columnKey, cell.value],\n );\n\n const debouncedSyncToParent = useCallback(\n (value: string) => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = setTimeout(() => {\n syncToParent(value);\n }, 300);\n },\n [syncToParent],\n );\n\n const flushSyncToParent = useCallback(() => {\n if (debouncedSyncTimerRef.current) {\n clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = undefined;\n syncToParent(String(fieldStateRef.current.value ?? ''));\n }\n }, [syncToParent]);\n\n const handleBlurValidation = useCallback(() => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n\n switch (columnType) {\n case 'url':\n validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n validateEmailField(String(currentValue ?? ''));\n break;\n default:\n validateRequiredField(currentValue);\n break;\n }\n }, [cell?.column?.type]);\n\n const validateAndGetValue = useCallback((): ValidateAndSaveResult => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n const currentCurrency = fieldStateRef.current.currencyCode;\n\n let isValid = true;\n\n switch (columnType) {\n case 'url':\n isValid = validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n isValid = validateEmailField(String(currentValue ?? ''));\n break;\n default:\n isValid = validateRequiredField(currentValue);\n break;\n }\n\n if (!isValid) {\n return { isValid: false };\n }\n\n let meta: ValidateAndSaveResult['meta'] = null;\n if (columnType === 'currency') {\n const latestCurrency = getCurrencyForCell?.(currencyCellId) || currentCurrency;\n meta = { currency_code: latestCurrency };\n }\n\n return {\n isValid: true,\n value: (typeof currentValue === 'number' ? String(currentValue) : currentValue) as string | boolean | null,\n meta,\n };\n }, [cell?.column?.type, currencyCellId, getCurrencyForCell]);\n\n useEffect(() => {\n if (registerValidation && inlineEditing === columnKey) {\n registerValidation(validateAndGetValue);\n }\n }, [registerValidation, validateAndGetValue, inlineEditing, columnKey]);\n\n const renderFieldByType = () => {\n if (cell?.column?.is_master_data && cell?.column?.masterDataName && (cell?.column?.masterDataColumnName || cell?.column?.masterDataFormula)) {\n const currentPendingEdit = getPendingEdit?.(String(id), columnKey);\n const masterDataValue = selectedMasterData?.value ?? currentPendingEdit?.value ?? cell.value;\n\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <MasterDataInlineField\n id={`master-data-cell-${id}-${cell.column.id}`}\n value={masterDataValue as string | number | null}\n onChange={(value, reference) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: value as string | boolean | null,\n meta: { reference: reference || null },\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value, { reference: reference || undefined });\n validateRequiredField((value as string | boolean | null) ?? '');\n }}\n placeholder={cell.column?.Header as string | undefined}\n masterDataName={cell.column.masterDataName as string}\n masterDataColumnName={cell.column.masterDataColumnName as string}\n masterDataFormula={cell.column.masterDataFormula as string | undefined}\n masterDataFilters={cell.column.masterDataFilters as Record<string, unknown> | undefined}\n onOpenMasterDataModal={openMasterDataModal as never}\n reference={currentPendingEdit?.meta?.reference as Record<string, unknown> | undefined}\n />\n </div>\n );\n }\n\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const rowCellMeta = columnKey\n ? (cell?.row?.original?.__cellMetadata as Record<string, { choices?: string[] }> | undefined)?.[columnKey]\n : undefined;\n\n switch (columnType) {\n case 'choice': {\n const choices = rowCellMeta?.choices ?? (cell?.column?.choices as string[] | undefined);\n return (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <SelectField\n id={`select-cell-${id}-${cell.column.id}`}\n value={fieldState.value || null}\n selectOptions={\n choices?.map((choice: string) => ({\n label: choice,\n value: choice,\n })) || []\n }\n onChange={(selectedOptions: TSelectedOptions) => {\n const value = selectedOptions\n ? Array.isArray(selectedOptions)\n ? selectedOptions[0]?.value?.toString() || ''\n : selectedOptions?.value?.toString() || ''\n : '';\n setFieldState((prev) => ({ ...prev, value }));\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value);\n validateRequiredField(value);\n }}\n allowClear={true}\n inputStyles={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n className='z-[120]'\n />\n </div>\n );\n }\n\n case 'datetime':\n case 'date':\n return (\n <div\n onMouseDown={(e) => {\n e.stopPropagation();\n if ((e.target as HTMLElement).tagName !== 'INPUT') {\n e.preventDefault();\n }\n }}\n >\n <DateTimeField\n id={`date-cell-${id}-${cell.column.id}`}\n value={(fieldState.value as string | undefined) || undefined}\n handleOnChange={(value) => {\n const newValue = value || '';\n setFieldState((prev) => ({ ...prev, value: newValue }));\n handleCellValueChange(createSyntheticChangeEvent(newValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: newValue,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(newValue);\n validateRequiredField(newValue);\n }}\n showTime={columnType === 'datetime'}\n dateFormat={columnType === 'date' ? 'MM/DD/YYYY' : undefined}\n className='z-[120] w-full'\n />\n </div>\n );\n\n case 'currency': {\n const originalCurrencyCode = getCurrencyFromCell();\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <InlineCurrencyField\n id={currencyCellId}\n value={String(fieldState.value ?? '')}\n onChange={(numericValue, currency_code) => {\n setFieldState((prev) => ({\n value: numericValue,\n currencyCode: currency_code || prev.currencyCode,\n }));\n handleCellValueChange(createSyntheticChangeEvent(numericValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: numericValue,\n meta: { currency_code },\n originalValue: cell.value,\n originalMeta: { currency_code: originalCurrencyCode },\n });\n }\n validateRequiredField(numericValue);\n callLiveFieldOperation(numericValue, { currency_code });\n }}\n currencyCode={fieldState.currencyCode}\n inputStyle={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoFocus\n disabled={isAnyFieldOperationLoading}\n />\n </div>\n );\n }\n\n case 'percentage':\n return (\n <label className='relative block h-full' onMouseDown={(e) => e.stopPropagation()}>\n <input\n ref={textInputRef}\n type='number'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // number inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n className='border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400'\n id={`percentage-cell-${id}-${cell.column.id}`}\n style={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoComplete='off'\n disabled={isAnyFieldOperationLoading}\n />\n <span className='absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100'>%</span>\n </label>\n );\n\n case 'boolean': {\n const currentBoolValue =\n fieldState.value === true ||\n fieldState.value === 'true' ||\n fieldState.value === 'Yes' ||\n fieldState.value === 'True' ||\n fieldState.value === 1;\n\n return (\n <div\n onMouseDown={(e) => e.stopPropagation()}\n className='h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]'\n >\n <Toggle\n id={`toggle-cell-${id}-${cell.column.id}`}\n isChecked={currentBoolValue}\n onChange={(checked) => {\n setFieldState((prev) => ({ ...prev, value: checked }));\n handleCellValueChange(createSyntheticChangeEvent(checked));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: checked,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(checked);\n }}\n hideStatus={false}\n labelDirection='right'\n stopClickPropagation={true}\n statusText={currentBoolValue ? 'Yes' : 'No'}\n />\n </div>\n );\n }\n\n case 'url':\n return (\n <input\n ref={textInputRef}\n type='url'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateUrlField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n case 'e-mail':\n return (\n <input\n ref={textInputRef}\n type='email'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // email inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateEmailField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n default:\n return (\n <input\n ref={textInputRef}\n type='text'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n }\n };\n\n return (\n <div ref={cellRef} className='relative h-full w-full overflow-visible'>\n <div\n className={cn(\n 'border p-0.5 rounded-lg h-full',\n displayValidationError ? 'border-error-600' : 'border-neutral-200 dark:border-black-700',\n isAnyFieldOperationLoading && 'pointer-events-none opacity-70',\n )}\n >\n {renderFieldByType()}\n </div>\n {Boolean(cell?.column?.is_live_field) && (\n <div className='absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]'>\n {isFieldOperationLoading ? (\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n ) : (\n <BoltOutlined\n sx={{\n fontSize: 12,\n color: 'var(--color-primary-600)',\n }}\n />\n )}\n </div>\n )}\n {displayValidationError && (\n <div className='absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full'>\n {displayValidationError}\n </div>\n )}\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","_pendingFieldOpCellKey","createSyntheticChangeEvent","value","InlineEditField","cell","id","inlineEditing","cellRef","handleCellValueChange","registerValidation","openMasterDataModal","selectedMasterData","clearSelectedMasterData","getCurrencyForCell","getPendingEdit","addPendingEdit","onFieldOperationFlow","fieldOperationLoading","useContext","TableContext","isFieldOperationLoading","isAnyFieldOperationLoading","callLiveFieldOperation","useCallback","meta","getCurrencyFromCell","rawData","headerKey","columnKey","dataFromHeader","dataFromKey","currencyCellId","contextCurrency","initialPendingEdit","fieldState","setFieldState","useState","validationError","setValidationError","computedValidationError","valueToValidate","result","validateCellValue","pendingError","displayValidationError","previousInlineEditingRef","useRef","useEffect","currencyFromContext","pendingEdit","initialValue","initialCurrency","validateRequiredField","validateUrlField","REGEX","validateEmailField","fieldStateRef","textInputRef","cellEditKey","useLayoutEffect","el","cached","debouncedSyncTimerRef","syncToParent","debouncedSyncToParent","flushSyncToParent","handleBlurValidation","columnType","currentValue","validateAndGetValue","currentCurrency","isValid","renderFieldByType","currentPendingEdit","masterDataValue","jsx","e","MasterDataInlineField","reference","rowCellMeta","choices","SelectField","choice","selectedOptions","prev","DateTimeField","newValue","originalCurrencyCode","InlineCurrencyField","numericValue","currency_code","jsxs","currentBoolValue","Toggle","checked","cn","LoadingSpinnerIcon","BoltOutlined"],"mappings":"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"}
1
+ {"version":3,"file":"InlineEditField.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineEditField.tsx"],"sourcesContent":["import type { ICell, ValidateAndSaveResult } from '../../types';\nimport { validateCellValue } from '../../validateCell';\nimport { REGEX } from '../../../../../constants/table';\nimport { DateTimeField } from '../../../../forms/date-time-field/DateTimeField';\nimport { SelectField } from '../../../../forms/select-field/SelectField';\nimport { Toggle } from '../../../../forms/toggle/Toggle';\nimport { BoltOutlined } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\nimport { InlineCurrencyField } from './InlineCurrencyField';\nimport { MasterDataInlineField } from './MasterDataInlineField';\nimport { LoadingSpinnerIcon } from '../../../../icon';\n\ntype InlineEditFieldProps = {\n cell: ICell;\n id: string | number;\n inlineEditing: string | null;\n cellRef: React.RefObject<HTMLDivElement>;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n handleUpdateCellData: (\n directValue?: string | boolean | null,\n meta?: { currency_code?: string | null; reference?: unknown | null; [key: string]: unknown | null } | null,\n ) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n};\n\ntype TSelectedOption = { label: string; value: string };\ntype TSelectedOptions = TSelectedOption | TSelectedOption[] | null;\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\nlet _pendingFieldOpCellKey: string | null = null;\n\nconst createSyntheticChangeEvent = (value: string | number | boolean | null): React.ChangeEvent<HTMLInputElement> => {\n return {\n target: { value } as HTMLInputElement,\n } as React.ChangeEvent<HTMLInputElement>;\n};\n\nexport const InlineEditField: React.FC<InlineEditFieldProps> = ({ cell, id, inlineEditing, cellRef, handleCellValueChange, registerValidation }) => {\n const {\n openMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n getCurrencyForCell,\n getPendingEdit,\n addPendingEdit,\n onFieldOperationFlow,\n fieldOperationLoading,\n } = useContext(TableContext);\n\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const isAnyFieldOperationLoading = Boolean(fieldOperationLoading);\n\n const callLiveFieldOperation = useCallback(\n (value: unknown, meta?: { reference?: unknown; currency_code?: string }) => {\n if (!onFieldOperationFlow) return;\n\n onFieldOperationFlow({\n value,\n fieldId: cell?.column?.id as string,\n rowId: String(id),\n rowData: cell?.row?.original as Record<string, unknown>,\n columnKey: (cell?.column?.key as string) || '',\n flowName: cell?.column?.live_field_source as string | undefined,\n isLiveField: cell?.column?.is_live_field as boolean | undefined,\n meta,\n });\n },\n [\n cell?.column?.id,\n cell?.column?.is_live_field,\n cell?.column?.key,\n cell?.column?.live_field_source,\n cell?.row?.original,\n id,\n onFieldOperationFlow,\n ],\n );\n\n const getCurrencyFromCell = () => {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as string | undefined;\n const columnKey = cell?.column?.key as string | undefined;\n\n const dataFromHeader = headerKey ? rawData?.[headerKey]?.currency_code : undefined;\n const dataFromKey = columnKey ? rawData?.[columnKey]?.currency_code : undefined;\n\n if (dataFromHeader && dataFromHeader !== '') {\n return dataFromHeader as string;\n }\n if (dataFromKey && dataFromKey !== '') {\n return dataFromKey as string;\n }\n\n return (cell?.column?.currencyCode as string) || 'USD';\n };\n\n const columnKey = (cell.column.key as string) || '';\n const currencyCellId = `${id}-${columnKey}`;\n const contextCurrency = getCurrencyForCell?.(currencyCellId);\n const initialPendingEdit = getPendingEdit?.(String(id), columnKey);\n\n const [fieldState, setFieldState] = useState<{ value: string | number | boolean | null; currencyCode: string }>({\n value: initialPendingEdit?.value !== undefined ? (initialPendingEdit.value as string | number | boolean | null) : ((cell.value as string | number | boolean | null) || ''),\n currencyCode: (initialPendingEdit?.meta?.currency_code as string) || contextCurrency || getCurrencyFromCell(),\n });\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const computedValidationError = (() => {\n if (inlineEditing !== columnKey) return null;\n const valueToValidate = typeof fieldState.value === 'number' ? String(fieldState.value) : fieldState.value;\n const result = validateCellValue(valueToValidate, cell?.column as { type?: string; is_required?: boolean });\n return result.isValid ? null : result.error || null;\n })();\n\n const pendingError = getPendingEdit?.(String(id), columnKey)?.validationError;\n const displayValidationError = validationError || computedValidationError || pendingError || null;\n\n const previousInlineEditingRef = useRef<string | null>(null);\n\n useEffect(() => {\n const isEnteringEditMode = inlineEditing === columnKey && previousInlineEditingRef.current !== columnKey;\n\n if (isEnteringEditMode) {\n const currencyFromContext = getCurrencyForCell?.(`${id}-${columnKey}`);\n const pendingEdit = getPendingEdit?.(String(id), columnKey);\n const initialValue = pendingEdit?.value !== undefined ? pendingEdit.value : ((cell.value as string | boolean | null) || '');\n const initialCurrency = (pendingEdit?.meta?.currency_code as string) || currencyFromContext || getCurrencyFromCell();\n\n setFieldState({\n value: initialValue as string | number | boolean | null,\n currencyCode: initialCurrency,\n });\n }\n\n if (inlineEditing !== columnKey && previousInlineEditingRef.current === columnKey) {\n setValidationError(null);\n }\n\n previousInlineEditingRef.current = inlineEditing;\n }, [inlineEditing, columnKey, getCurrencyForCell, getPendingEdit, id, cell.value]);\n\n useEffect(() => {\n if (selectedMasterData && inlineEditing === columnKey && cell?.column?.masterDataColumnName && cell?.column?.masterDataName) {\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: selectedMasterData.value as string | boolean | null,\n meta: { reference: selectedMasterData.reference },\n originalValue: cell.value,\n });\n }\n handleCellValueChange(createSyntheticChangeEvent(selectedMasterData.value as string | number | boolean | null));\n callLiveFieldOperation(selectedMasterData.value, { reference: selectedMasterData.reference });\n clearSelectedMasterData?.();\n }\n }, [\n selectedMasterData,\n inlineEditing,\n columnKey,\n cell?.column?.masterDataColumnName,\n cell?.column?.masterDataName,\n addPendingEdit,\n id,\n cell.value,\n handleCellValueChange,\n callLiveFieldOperation,\n clearSelectedMasterData,\n ]);\n\n const validateRequiredField = (value: string | number | boolean | null): boolean => {\n if (cell?.column?.is_required) {\n const isEmpty = value === null || value === undefined || value === '' || (typeof value === 'string' && value.trim() === '');\n if (isEmpty) {\n setValidationError('Field required');\n return false;\n }\n }\n setValidationError(null);\n return true;\n };\n\n const validateUrlField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.url.test(value)) {\n setValidationError('Invalid URL format');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const validateEmailField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.email.test(value)) {\n setValidationError('Email is not valid');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const fieldStateRef = useRef(fieldState);\n useEffect(() => {\n fieldStateRef.current = fieldState;\n }, [fieldState]);\n\n const textInputRef = useRef<HTMLInputElement>(null);\n const cellEditKey = `${id}-${columnKey}`;\n\n useLayoutEffect(() => {\n const el = textInputRef.current;\n if (!el) return;\n const cached = _cursorPositionCache.get(cellEditKey);\n if (cached) {\n el.focus();\n try {\n el.setSelectionRange(cached.start, cached.end);\n } catch {\n // email/number inputs may not support setSelectionRange\n }\n } else if (_blurringCellKey !== cellEditKey) {\n el.focus();\n }\n }, [cellEditKey]);\n\n const debouncedSyncTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n return () => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n };\n }, []);\n\n const syncToParent = useCallback(\n (value: string) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n },\n [handleCellValueChange, addPendingEdit, id, columnKey, cell.value],\n );\n\n const debouncedSyncToParent = useCallback(\n (value: string) => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = setTimeout(() => {\n syncToParent(value);\n }, 300);\n },\n [syncToParent],\n );\n\n const flushSyncToParent = useCallback(() => {\n if (debouncedSyncTimerRef.current) {\n clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = undefined;\n syncToParent(String(fieldStateRef.current.value ?? ''));\n }\n }, [syncToParent]);\n\n const handleBlurValidation = useCallback(() => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n\n switch (columnType) {\n case 'url':\n validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n validateEmailField(String(currentValue ?? ''));\n break;\n default:\n validateRequiredField(currentValue);\n break;\n }\n }, [cell?.column?.type]);\n\n const validateAndGetValue = useCallback((): ValidateAndSaveResult => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n const currentCurrency = fieldStateRef.current.currencyCode;\n\n let isValid = true;\n\n switch (columnType) {\n case 'url':\n isValid = validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n isValid = validateEmailField(String(currentValue ?? ''));\n break;\n default:\n isValid = validateRequiredField(currentValue);\n break;\n }\n\n if (!isValid) {\n return { isValid: false };\n }\n\n let meta: ValidateAndSaveResult['meta'] = null;\n if (columnType === 'currency') {\n const latestCurrency = getCurrencyForCell?.(currencyCellId) || currentCurrency;\n meta = { currency_code: latestCurrency };\n }\n\n return {\n isValid: true,\n value: (typeof currentValue === 'number' ? String(currentValue) : currentValue) as string | boolean | null,\n meta,\n };\n }, [cell?.column?.type, currencyCellId, getCurrencyForCell]);\n\n useEffect(() => {\n if (registerValidation && inlineEditing === columnKey) {\n registerValidation(validateAndGetValue);\n }\n }, [registerValidation, validateAndGetValue, inlineEditing, columnKey]);\n\n const renderFieldByType = () => {\n if (cell?.column?.is_master_data && cell?.column?.masterDataName && (cell?.column?.masterDataColumnName || cell?.column?.masterDataFormula)) {\n const currentPendingEdit = getPendingEdit?.(String(id), columnKey);\n const masterDataValue = selectedMasterData?.value ?? currentPendingEdit?.value ?? cell.value;\n\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <MasterDataInlineField\n id={`master-data-cell-${id}-${cell.column.id}`}\n value={masterDataValue as string | number | null}\n onChange={(value, reference) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: value as string | boolean | null,\n meta: { reference: reference || null },\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value, { reference: reference || undefined });\n validateRequiredField((value as string | boolean | null) ?? '');\n }}\n placeholder={cell.column?.Header as string | undefined}\n masterDataName={cell.column.masterDataName as string}\n masterDataColumnName={cell.column.masterDataColumnName as string}\n masterDataFormula={cell.column.masterDataFormula as string | undefined}\n masterDataFilters={cell.column.masterDataFilters as Record<string, unknown> | undefined}\n onOpenMasterDataModal={openMasterDataModal as never}\n reference={currentPendingEdit?.meta?.reference as Record<string, unknown> | undefined}\n />\n </div>\n );\n }\n\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const rowCellMeta = columnKey\n ? (cell?.row?.original?.__cellMetadata as Record<string, { choices?: string[] }> | undefined)?.[columnKey]\n : undefined;\n\n switch (columnType) {\n case 'choice': {\n const choices = rowCellMeta?.choices ?? (cell?.column?.choices as string[] | undefined);\n return (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <SelectField\n id={`select-cell-${id}-${cell.column.id}`}\n value={fieldState.value || null}\n selectOptions={\n choices?.map((choice: string) => ({\n label: choice,\n value: choice,\n })) || []\n }\n onChange={(selectedOptions: TSelectedOptions) => {\n const value = selectedOptions\n ? Array.isArray(selectedOptions)\n ? selectedOptions[0]?.value?.toString() || ''\n : selectedOptions?.value?.toString() || ''\n : '';\n setFieldState((prev) => ({ ...prev, value }));\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value);\n validateRequiredField(value);\n }}\n allowClear={true}\n inputStyles={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n className='z-[120]'\n />\n </div>\n );\n }\n\n case 'datetime':\n case 'date':\n return (\n <div\n onMouseDown={(e) => {\n e.stopPropagation();\n if ((e.target as HTMLElement).tagName !== 'INPUT') {\n e.preventDefault();\n }\n }}\n >\n <DateTimeField\n id={`date-cell-${id}-${cell.column.id}`}\n value={(fieldState.value as string | undefined) || undefined}\n handleOnChange={(value) => {\n const newValue = value || '';\n setFieldState((prev) => ({ ...prev, value: newValue }));\n handleCellValueChange(createSyntheticChangeEvent(newValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: newValue,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(newValue);\n validateRequiredField(newValue);\n }}\n showTime={columnType === 'datetime'}\n dateFormat={columnType === 'date' ? 'MM/DD/YYYY' : undefined}\n className='z-[120] w-full'\n />\n </div>\n );\n\n case 'currency': {\n const originalCurrencyCode = getCurrencyFromCell();\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <InlineCurrencyField\n id={currencyCellId}\n value={String(fieldState.value ?? '')}\n onChange={(numericValue, currency_code) => {\n setFieldState((prev) => ({\n value: numericValue,\n currencyCode: currency_code || prev.currencyCode,\n }));\n handleCellValueChange(createSyntheticChangeEvent(numericValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: numericValue,\n meta: { currency_code },\n originalValue: cell.value,\n originalMeta: { currency_code: originalCurrencyCode },\n });\n }\n validateRequiredField(numericValue);\n callLiveFieldOperation(numericValue, { currency_code });\n }}\n currencyCode={fieldState.currencyCode}\n inputStyle={{\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoFocus\n disabled={isAnyFieldOperationLoading}\n />\n </div>\n );\n }\n\n case 'percentage':\n return (\n <label className='relative block h-full' onMouseDown={(e) => e.stopPropagation()}>\n <input\n ref={textInputRef}\n type='number'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // number inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n className='border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400'\n id={`percentage-cell-${id}-${cell.column.id}`}\n style={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoComplete='off'\n disabled={isAnyFieldOperationLoading}\n />\n <span className='absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100'>%</span>\n </label>\n );\n\n case 'boolean': {\n const currentBoolValue =\n fieldState.value === true ||\n fieldState.value === 'true' ||\n fieldState.value === 'Yes' ||\n fieldState.value === 'True' ||\n fieldState.value === 1;\n\n return (\n <div\n onMouseDown={(e) => e.stopPropagation()}\n className='h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]'\n >\n <Toggle\n id={`toggle-cell-${id}-${cell.column.id}`}\n isChecked={currentBoolValue}\n onChange={(checked) => {\n setFieldState((prev) => ({ ...prev, value: checked }));\n handleCellValueChange(createSyntheticChangeEvent(checked));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: checked,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(checked);\n }}\n hideStatus={false}\n labelDirection='right'\n stopClickPropagation={true}\n statusText={currentBoolValue ? 'Yes' : 'No'}\n />\n </div>\n );\n }\n\n case 'url':\n return (\n <input\n ref={textInputRef}\n type='url'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateUrlField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n case 'e-mail':\n return (\n <input\n ref={textInputRef}\n type='email'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // email inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateEmailField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n default:\n return (\n <input\n ref={textInputRef}\n type='text'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n }\n };\n\n return (\n <div ref={cellRef} className='relative h-full w-full overflow-visible'>\n <div\n className={cn(\n 'border p-0.5 rounded-lg h-full',\n displayValidationError ? 'border-error-600' : 'border-neutral-200 dark:border-black-700',\n isAnyFieldOperationLoading && 'pointer-events-none opacity-70',\n )}\n >\n {renderFieldByType()}\n </div>\n {Boolean(cell?.column?.is_live_field) && (\n <div className='absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]'>\n {isFieldOperationLoading ? (\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n ) : (\n <BoltOutlined\n sx={{\n fontSize: 12,\n color: 'var(--color-primary-600)',\n }}\n />\n )}\n </div>\n )}\n {displayValidationError && (\n <div className='absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full'>\n {displayValidationError}\n </div>\n )}\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","_pendingFieldOpCellKey","createSyntheticChangeEvent","value","InlineEditField","cell","id","inlineEditing","cellRef","handleCellValueChange","registerValidation","openMasterDataModal","selectedMasterData","clearSelectedMasterData","getCurrencyForCell","getPendingEdit","addPendingEdit","onFieldOperationFlow","fieldOperationLoading","useContext","TableContext","isFieldOperationLoading","isAnyFieldOperationLoading","callLiveFieldOperation","useCallback","meta","getCurrencyFromCell","rawData","headerKey","columnKey","dataFromHeader","dataFromKey","currencyCellId","contextCurrency","initialPendingEdit","fieldState","setFieldState","useState","validationError","setValidationError","computedValidationError","valueToValidate","result","validateCellValue","pendingError","displayValidationError","previousInlineEditingRef","useRef","useEffect","currencyFromContext","pendingEdit","initialValue","initialCurrency","validateRequiredField","validateUrlField","REGEX","validateEmailField","fieldStateRef","textInputRef","cellEditKey","useLayoutEffect","el","cached","debouncedSyncTimerRef","syncToParent","debouncedSyncToParent","flushSyncToParent","handleBlurValidation","columnType","currentValue","validateAndGetValue","currentCurrency","isValid","renderFieldByType","currentPendingEdit","masterDataValue","jsx","e","MasterDataInlineField","reference","rowCellMeta","choices","SelectField","choice","selectedOptions","prev","DateTimeField","newValue","originalCurrencyCode","InlineCurrencyField","numericValue","currency_code","jsxs","currentBoolValue","Toggle","checked","cn","LoadingSpinnerIcon","BoltOutlined"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lax-wp/design-system",
3
3
  "private": false,
4
- "version": "0.14.1",
4
+ "version": "0.14.3",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",
7
7
  "module": "dist/index.es.js",