@zydon/common 2.8.5 → 2.8.6

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.
@@ -6,8 +6,8 @@ import T from '@mui/material/IconButton';
6
6
  import R from '@mui/material/InputAdornment';
7
7
  import { jsx } from 'react/jsx-runtime';
8
8
 
9
- var C=forwardRef(({name:M,increment:e=1,updadteForMultiple:P,allowNegative:u=!1,value:I,onChange:c,minValue:r,maxValue:o,decimalScale:p,disabled:i,tabIndex:w,labelIncrementer:B,labelDecrementer:O,placeholder:z,InputProps:y,...E},L)=>{let[N,_]=useState(`incrementer-input-${Date.now()}`),m=useRef(null),s=Number(I||0),b=()=>{m.current&&(clearTimeout(m.current),m.current=null);},$=useMemo(()=>{let n=s-e;return typeof r=="number"&&n<r?!0:i||!u&&n<0},[i,s,e,r,u]),G=useMemo(()=>{let n=s+e;return typeof o=="number"&&n>o?!0:i},[i,s,e,o]),H=useCallback(()=>{if(b(),!u&&s-e<0)return;let n=s-e,t=r!==void 0&&n<r?r:f(n,p);c(t);},[s,e,r,p,c,u]),K=n=>r!==void 0&&n<r?r:o!==void 0&&n>o?o:f(n,p),U=useCallback(()=>{b();let n=s+e,t=K(n);c(t);},[s,e,o,r,p,c]),W=useCallback(n=>{b();let t=Number(n.target.value||0);(e!==1||P)&&(t=t+e/2,t-=t%e),!u&&t<0&&(t=0),typeof r=="number"&&t<r&&(t=r),typeof o=="number"&&t>o&&(t=o),t=f(t,p),(!t||t===I)&&(m.current=setTimeout(()=>{_(`incrementer-input-${Date.now()}`);},600)),c(t);},[I,e,r,o,p,c,P,u]);return jsx(a,{ref:L,name:M,value:I,minValue:r,maxValue:o,allowNegative:u,decimalScale:p,InputProps:{...y,startAdornment:jsx(R,{position:"start",children:jsx(T,{size:"medium",onClick:H,disabled:$,"aria-label":O||"Decrementa",children:jsx(a$1,{icon:"MINUS_SIGN",width:14,height:14,color:"primary.main"})})}),endAdornment:jsx(R,{position:"end",children:jsx(T,{size:"medium",onClick:U,disabled:G,"aria-label":B||"Incrementa",children:jsx(a$1,{icon:"SIMPLE_ADD",width:14,height:14,color:"primary.main"})})}),inputProps:{...y?.inputProps,style:{...y?.inputProps?.style,textAlign:"center"}}},inputProps:{tabIndex:w},onChange:W,disabled:i,placeholder:z,...E},N)});C.displayName="Incrementer";var S=C;
9
+ var C=forwardRef(({name:M,increment:e=1,updadteForMultiple:P,allowNegative:u=!1,value:m,onChange:c,minValue:r,maxValue:o,decimalScale:p,disabled:i,tabIndex:w,labelIncrementer:B,labelDecrementer:O,placeholder:z,InputProps:y,...E},L)=>{let[N,_]=useState(`incrementer-input-${Date.now()}`),I=useRef(null),s=Number(m||0),b=()=>{I.current&&(clearTimeout(I.current),I.current=null);},$=useMemo(()=>{let n=s-e;return typeof r=="number"&&n<r?!0:i||!u&&n<0},[i,s,e,r,u]),G=useMemo(()=>{let n=s+e;return typeof o=="number"&&n>o?!0:i},[i,s,e,o]),H=useCallback(()=>{if(b(),!u&&s-e<0)return;let n=s-e,t=r!==void 0&&n<r?r:f(n,p);c(t);},[s,e,r,p,c,u]),K=n=>r!==void 0&&n<r?r:o!==void 0&&n>o?o:f(n,p),U=useCallback(()=>{b();let n=s+e,t=K(n);c(t);},[s,e,o,r,p,c]),W=useCallback(n=>{b();let t=Number(n.target.value||0);(e!==1||P)&&(t=t+e/2,t-=t%e),!u&&t<0&&(t=0),typeof r=="number"&&t<r&&(t=r),typeof o=="number"&&t>o&&(t=o),t=f(t,p),(!t||t===m)&&(I.current=setTimeout(()=>{_(`incrementer-input-${Date.now()}`);},600)),c(t);},[m,e,r,o,p,c,P,u]);return jsx(a,{ref:L,name:M,value:m,minValue:r,maxValue:o,allowNegative:u,decimalScale:p,InputProps:{...y,startAdornment:jsx(R,{position:"start",sx:{ml:-1.5},children:jsx(T,{onClick:H,disabled:$,size:"small","aria-label":O||"Decrementa",children:jsx(a$1,{icon:"MINUS_SIGN",width:14,height:14,color:"primary.main"})})}),endAdornment:jsx(R,{position:"end",sx:{mr:-1.5},children:jsx(T,{onClick:U,disabled:G,size:"small","aria-label":B||"Incrementa",children:jsx(a$1,{icon:"SIMPLE_ADD",width:14,height:14,color:"primary.main"})})}),inputProps:{...y?.inputProps,style:{...y?.inputProps?.style,textAlign:"center"},sx:{mx:-.8}}},inputProps:{tabIndex:w},onChange:W,disabled:i,placeholder:z,...E},N)});C.displayName="Incrementer";var F=C;
10
10
 
11
- export { S as a };
11
+ export { F as a };
12
12
  //# sourceMappingURL=out.js.map
13
- //# sourceMappingURL=chunk-7WZKRHNZ.js.map
13
+ //# sourceMappingURL=chunk-XI2A5QPW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Incrementer/index.tsx"],"names":["forwardRef","useCallback","useMemo","useRef","useState","IconButton","InputAdornment","jsx","Incrementer","name","increment","updadteForMultiple","allowNegative","originalValue","onChange","minValue","maxValue","decimalScale","disabled","tabIndex","labelIncrementer","labelDecrementer","placeholder","InputProps","other","ref","inputkey","setInputKey","timer","value","clearTimer","disableDecrement","nextValue","disableIncrement","handleClickDecrement","valueMinusIncrement","newValue","fWithDecimalPlacesOrNot","getIncrementValue","handleClickIncrement","valuePlusIncrement","handleChange","e","NumberInput_default","Icon_default","Incrementer_default"],"mappings":"wHAAA,OAAS,cAAAA,EAAY,eAAAC,EAAa,WAAAC,EAAS,UAAAC,EAAQ,YAAAC,MAAgB,QACnE,OAAOC,MAAgB,2BACvB,OAAOC,MAAoB,+BAuJX,cAAAC,MAAA,oBA7IhB,IAAMC,EAAcR,EAClB,CACE,CACE,KAAAS,EACA,UAAAC,EAAY,EACZ,mBAAAC,EACA,cAAAC,EAAgB,GAChB,MAAOC,EACP,SAAAC,EACA,SAAAC,EACA,SAAAC,EACA,aAAAC,EACA,SAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,YAAAC,EACA,WAAAC,EACA,GAAGC,CACL,EACAC,IACG,CACH,GAAM,CAACC,EAAUC,CAAW,EAAIvB,EAAS,qBAAqB,KAAK,IAAI,GAAG,EACpEwB,EAAQzB,EAA6C,IAAI,EACzD0B,EAAQ,OAAOhB,GAAiB,CAAC,EAEjCiB,EAAa,IAAM,CAClBF,EAAM,UACX,aAAaA,EAAM,OAAO,EAC1BA,EAAM,QAAU,KAClB,EAEMG,EAAmB7B,EAAQ,IAAM,CACrC,IAAM8B,EAAYH,EAAQnB,EAC1B,OAAI,OAAOK,GAAa,UAAYiB,EAAYjB,EAAiB,GAC1DG,GAAa,CAACN,GAAiBoB,EAAY,CACpD,EAAG,CAACd,EAAUW,EAAOnB,EAAWK,EAAUH,CAAa,CAAC,EAElDqB,EAAmB/B,EAAQ,IAAM,CACrC,IAAM8B,EAAYH,EAAQnB,EAC1B,OAAI,OAAOM,GAAa,UAAYgB,EAAYhB,EAAiB,GAE1DE,CACT,EAAG,CAACA,EAAUW,EAAOnB,EAAWM,CAAQ,CAAC,EAEnCkB,EAAuBjC,EAAY,IAAM,CAE7C,GADA6B,EAAW,EACP,CAAClB,GAAiBiB,EAAQnB,EAAY,EAAG,OAE7C,IAAMyB,EAAsBN,EAAQnB,EAC9B0B,EACJrB,IAAa,QAAaoB,EAAsBpB,EAC5CA,EACAsB,EAAwBF,EAAqBlB,CAAY,EAE/DH,EAASsB,CAAQ,CACnB,EAAG,CAACP,EAAOnB,EAAWK,EAAUE,EAAcH,EAAUF,CAAa,CAAC,EAEhE0B,EAAqBT,GACrBd,IAAa,QAAac,EAAQd,EAC7BA,EAELC,IAAa,QAAaa,EAAQb,EAC7BA,EAEFqB,EAAwBR,EAAOZ,CAAY,EAG9CsB,EAAuBtC,EAAY,IAAM,CAC7C6B,EAAW,EACX,IAAMU,EAAqBX,EAAQnB,EAC7B0B,EAAWE,EAAkBE,CAAkB,EACrD1B,EAASsB,CAAQ,CAEnB,EAAG,CAACP,EAAOnB,EAAWM,EAAUD,EAAUE,EAAcH,CAAQ,CAAC,EAE3D2B,EAAexC,EAClByC,GAAsB,CACrBZ,EAAW,EACX,IAAIM,EAAW,OAAOM,EAAE,OAAO,OAAS,CAAC,GAErChC,IAAc,GAAKC,KACrByB,EAAWA,EAAW1B,EAAY,EAClC0B,GAAYA,EAAW1B,GAGrB,CAACE,GAAiBwB,EAAW,IAC/BA,EAAW,GAGT,OAAOrB,GAAa,UAAYqB,EAAWrB,IAC7CqB,EAAWrB,GAGT,OAAOC,GAAa,UAAYoB,EAAWpB,IAC7CoB,EAAWpB,GAGboB,EAAWC,EAAwBD,EAAUnB,CAAY,GACrD,CAACmB,GAAYA,IAAavB,KAC5Be,EAAM,QAAU,WAAW,IAAM,CAE/BD,EAAY,qBAAqB,KAAK,IAAI,GAAG,CAC/C,EAAG,GAAG,GAGRb,EAASsB,CAAQ,CAEnB,EACA,CACEvB,EACAH,EACAK,EACAC,EACAC,EACAH,EACAH,EACAC,CACF,CACF,EAEA,OACEL,EAACoC,EAAA,CAEC,IAAKlB,EACL,KAAMhB,EACN,MAAOI,EACP,SAAUE,EACV,SAAUC,EACV,cAAeJ,EACf,aAAcK,EACd,WAAY,CACV,GAAGM,EACH,eACEhB,EAACD,EAAA,CAAe,SAAS,QAAQ,GAAI,CAAE,GAAI,IAAK,EAC9C,SAAAC,EAACF,EAAA,CACC,QAAS6B,EACT,SAAUH,EACV,KAAK,QACL,aAAYV,GAAoB,aAEhC,SAAAd,EAACqC,EAAA,CACC,KAAK,aACL,MAAO,GACP,OAAQ,GACR,MAAM,eACR,EACF,EACF,EAEF,aACErC,EAACD,EAAA,CAAe,SAAS,MAAM,GAAI,CAAE,GAAI,IAAK,EAC5C,SAAAC,EAACF,EAAA,CACC,QAASkC,EACT,SAAUN,EACV,KAAK,QACL,aAAYb,GAAoB,aAEhC,SAAAb,EAACqC,EAAA,CACC,KAAK,aACL,MAAO,GACP,OAAQ,GACR,MAAM,eACR,EACF,EACF,EAEF,WAAY,CACV,GAAGrB,GAAY,WACf,MAAO,CACL,GAAGA,GAAY,YAAY,MAC3B,UAAW,QACb,EACA,GAAI,CACF,GAAI,GACN,CACF,CACF,EACA,WAAY,CAAE,SAAAJ,CAAS,EACvB,SAAUsB,EACV,SAAUvB,EACV,YAAaI,EACZ,GAAGE,GA3DCE,CA4DP,CAEJ,CACF,EAEAlB,EAAY,YAAc,cAE1B,IAAOqC,EAAQrC","sourcesContent":["import { forwardRef, useCallback, useMemo, useRef, useState } from 'react';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\n\nimport { OnChangeReturn } from 'types/numberInputProps';\nimport { fWithDecimalPlacesOrNot } from 'utils/formatNumber';\n\nimport Icon from '../Icon';\nimport NumberInput from '../NumberInput';\n\nimport { IncrementerProps } from './props';\n\nconst Incrementer = forwardRef<HTMLDivElement, IncrementerProps>(\n (\n {\n name,\n increment = 1,\n updadteForMultiple,\n allowNegative = false,\n value: originalValue,\n onChange,\n minValue,\n maxValue,\n decimalScale,\n disabled,\n tabIndex,\n labelIncrementer,\n labelDecrementer,\n placeholder,\n InputProps,\n ...other\n },\n ref,\n ) => {\n const [inputkey, setInputKey] = useState(`incrementer-input-${Date.now()}`);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const value = Number(originalValue || 0);\n\n const clearTimer = () => {\n if (!timer.current) return;\n clearTimeout(timer.current);\n timer.current = null;\n };\n\n const disableDecrement = useMemo(() => {\n const nextValue = value - increment;\n if (typeof minValue === 'number' && nextValue < minValue) return true;\n return disabled || (!allowNegative && nextValue < 0);\n }, [disabled, value, increment, minValue, allowNegative]);\n\n const disableIncrement = useMemo(() => {\n const nextValue = value + increment;\n if (typeof maxValue === 'number' && nextValue > maxValue) return true;\n\n return disabled;\n }, [disabled, value, increment, maxValue]);\n\n const handleClickDecrement = useCallback(() => {\n clearTimer();\n if (!allowNegative && value - increment < 0) return;\n\n const valueMinusIncrement = value - increment;\n const newValue =\n minValue !== undefined && valueMinusIncrement < minValue\n ? minValue\n : fWithDecimalPlacesOrNot(valueMinusIncrement, decimalScale);\n\n onChange(newValue);\n }, [value, increment, minValue, decimalScale, onChange, allowNegative]);\n\n const getIncrementValue = (value: number) => {\n if (minValue !== undefined && value < minValue) {\n return minValue;\n }\n if (maxValue !== undefined && value > maxValue) {\n return maxValue;\n }\n return fWithDecimalPlacesOrNot(value, decimalScale);\n };\n\n const handleClickIncrement = useCallback(() => {\n clearTimer();\n const valuePlusIncrement = value + increment;\n const newValue = getIncrementValue(valuePlusIncrement);\n onChange(newValue);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, increment, maxValue, minValue, decimalScale, onChange]);\n\n const handleChange = useCallback(\n (e: OnChangeReturn) => {\n clearTimer();\n let newValue = Number(e.target.value || 0);\n\n if (increment !== 1 || updadteForMultiple) {\n newValue = newValue + increment / 2;\n newValue -= newValue % increment;\n }\n\n if (!allowNegative && newValue < 0) {\n newValue = 0;\n }\n\n if (typeof minValue === 'number' && newValue < minValue) {\n newValue = minValue;\n }\n\n if (typeof maxValue === 'number' && newValue > maxValue) {\n newValue = maxValue;\n }\n\n newValue = fWithDecimalPlacesOrNot(newValue, decimalScale);\n if (!newValue || newValue === originalValue) {\n timer.current = setTimeout(() => {\n //force clean when new value is the same as original value\n setInputKey(`incrementer-input-${Date.now()}`);\n }, 600);\n }\n\n onChange(newValue);\n return;\n },\n [\n originalValue,\n increment,\n minValue,\n maxValue,\n decimalScale,\n onChange,\n updadteForMultiple,\n allowNegative,\n ],\n );\n\n return (\n <NumberInput\n key={inputkey}\n ref={ref}\n name={name}\n value={originalValue}\n minValue={minValue}\n maxValue={maxValue}\n allowNegative={allowNegative}\n decimalScale={decimalScale}\n InputProps={{\n ...InputProps,\n startAdornment: (\n <InputAdornment position=\"start\" sx={{ ml: -1.5 }}>\n <IconButton\n onClick={handleClickDecrement}\n disabled={disableDecrement}\n size=\"small\"\n aria-label={labelDecrementer || 'Decrementa'}\n >\n <Icon\n icon=\"MINUS_SIGN\"\n width={14}\n height={14}\n color=\"primary.main\"\n />\n </IconButton>\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"end\" sx={{ mr: -1.5 }}>\n <IconButton\n onClick={handleClickIncrement}\n disabled={disableIncrement}\n size=\"small\"\n aria-label={labelIncrementer || 'Incrementa'}\n >\n <Icon\n icon=\"SIMPLE_ADD\"\n width={14}\n height={14}\n color=\"primary.main\"\n />\n </IconButton>\n </InputAdornment>\n ),\n inputProps: {\n ...InputProps?.inputProps,\n style: {\n ...InputProps?.inputProps?.style,\n textAlign: 'center',\n },\n sx: {\n mx: -0.8,\n },\n },\n }}\n inputProps={{ tabIndex }}\n onChange={handleChange}\n disabled={disabled}\n placeholder={placeholder}\n {...other}\n />\n );\n },\n);\n\nIncrementer.displayName = 'Incrementer';\n\nexport default Incrementer;\n"]}
@@ -1,4 +1,4 @@
1
- export { a as default } from '../../chunk-7WZKRHNZ.js';
1
+ export { a as default } from '../../chunk-XI2A5QPW.js';
2
2
  import '../../chunk-W3CK33IH.js';
3
3
  import '../../chunk-OF6623HG.js';
4
4
  import '../../chunk-BID75C4Q.js';
@@ -1,4 +1,4 @@
1
- import { a } from '../../../chunk-7WZKRHNZ.js';
1
+ import { a } from '../../../chunk-XI2A5QPW.js';
2
2
  import '../../../chunk-W3CK33IH.js';
3
3
  import '../../../chunk-OF6623HG.js';
4
4
  import '../../../chunk-BID75C4Q.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zydon/common",
3
- "version": "2.8.5",
3
+ "version": "2.8.6",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Incrementer/index.tsx"],"names":["forwardRef","useCallback","useMemo","useRef","useState","IconButton","InputAdornment","jsx","Incrementer","name","increment","updadteForMultiple","allowNegative","originalValue","onChange","minValue","maxValue","decimalScale","disabled","tabIndex","labelIncrementer","labelDecrementer","placeholder","InputProps","other","ref","inputkey","setInputKey","timer","value","clearTimer","disableDecrement","nextValue","disableIncrement","handleClickDecrement","valueMinusIncrement","newValue","fWithDecimalPlacesOrNot","getIncrementValue","handleClickIncrement","valuePlusIncrement","handleChange","e","NumberInput_default","Icon_default","Incrementer_default"],"mappings":"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","sourcesContent":["import { forwardRef, useCallback, useMemo, useRef, useState } from 'react';\nimport IconButton from '@mui/material/IconButton';\nimport InputAdornment from '@mui/material/InputAdornment';\n\nimport { OnChangeReturn } from 'types/numberInputProps';\nimport { fWithDecimalPlacesOrNot } from 'utils/formatNumber';\n\nimport Icon from '../Icon';\nimport NumberInput from '../NumberInput';\n\nimport { IncrementerProps } from './props';\n\nconst Incrementer = forwardRef<HTMLDivElement, IncrementerProps>(\n (\n {\n name,\n increment = 1,\n updadteForMultiple,\n allowNegative = false,\n value: originalValue,\n onChange,\n minValue,\n maxValue,\n decimalScale,\n disabled,\n tabIndex,\n labelIncrementer,\n labelDecrementer,\n placeholder,\n InputProps,\n ...other\n },\n ref,\n ) => {\n const [inputkey, setInputKey] = useState(`incrementer-input-${Date.now()}`);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const value = Number(originalValue || 0);\n\n const clearTimer = () => {\n if (!timer.current) return;\n clearTimeout(timer.current);\n timer.current = null;\n };\n\n const disableDecrement = useMemo(() => {\n const nextValue = value - increment;\n if (typeof minValue === 'number' && nextValue < minValue) return true;\n return disabled || (!allowNegative && nextValue < 0);\n }, [disabled, value, increment, minValue, allowNegative]);\n\n const disableIncrement = useMemo(() => {\n const nextValue = value + increment;\n if (typeof maxValue === 'number' && nextValue > maxValue) return true;\n\n return disabled;\n }, [disabled, value, increment, maxValue]);\n\n const handleClickDecrement = useCallback(() => {\n clearTimer();\n if (!allowNegative && value - increment < 0) return;\n\n const valueMinusIncrement = value - increment;\n const newValue =\n minValue !== undefined && valueMinusIncrement < minValue\n ? minValue\n : fWithDecimalPlacesOrNot(valueMinusIncrement, decimalScale);\n\n onChange(newValue);\n }, [value, increment, minValue, decimalScale, onChange, allowNegative]);\n\n const getIncrementValue = (value: number) => {\n if (minValue !== undefined && value < minValue) {\n return minValue;\n }\n if (maxValue !== undefined && value > maxValue) {\n return maxValue;\n }\n return fWithDecimalPlacesOrNot(value, decimalScale);\n };\n\n const handleClickIncrement = useCallback(() => {\n clearTimer();\n const valuePlusIncrement = value + increment;\n const newValue = getIncrementValue(valuePlusIncrement);\n onChange(newValue);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, increment, maxValue, minValue, decimalScale, onChange]);\n\n const handleChange = useCallback(\n (e: OnChangeReturn) => {\n clearTimer();\n let newValue = Number(e.target.value || 0);\n\n if (increment !== 1 || updadteForMultiple) {\n newValue = newValue + increment / 2;\n newValue -= newValue % increment;\n }\n\n if (!allowNegative && newValue < 0) {\n newValue = 0;\n }\n\n if (typeof minValue === 'number' && newValue < minValue) {\n newValue = minValue;\n }\n\n if (typeof maxValue === 'number' && newValue > maxValue) {\n newValue = maxValue;\n }\n\n newValue = fWithDecimalPlacesOrNot(newValue, decimalScale);\n if (!newValue || newValue === originalValue) {\n timer.current = setTimeout(() => {\n //force clean when new value is the same as original value\n setInputKey(`incrementer-input-${Date.now()}`);\n }, 600);\n }\n\n onChange(newValue);\n return;\n },\n [\n originalValue,\n increment,\n minValue,\n maxValue,\n decimalScale,\n onChange,\n updadteForMultiple,\n allowNegative,\n ],\n );\n\n return (\n <NumberInput\n key={inputkey}\n ref={ref}\n name={name}\n value={originalValue}\n minValue={minValue}\n maxValue={maxValue}\n allowNegative={allowNegative}\n decimalScale={decimalScale}\n InputProps={{\n ...InputProps,\n startAdornment: (\n <InputAdornment position=\"start\">\n <IconButton\n size=\"medium\"\n onClick={handleClickDecrement}\n disabled={disableDecrement}\n aria-label={labelDecrementer || 'Decrementa'}\n >\n <Icon\n icon=\"MINUS_SIGN\"\n width={14}\n height={14}\n color=\"primary.main\"\n />\n </IconButton>\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"medium\"\n onClick={handleClickIncrement}\n disabled={disableIncrement}\n aria-label={labelIncrementer || 'Incrementa'}\n >\n <Icon\n icon=\"SIMPLE_ADD\"\n width={14}\n height={14}\n color=\"primary.main\"\n />\n </IconButton>\n </InputAdornment>\n ),\n inputProps: {\n ...InputProps?.inputProps,\n style: {\n ...InputProps?.inputProps?.style,\n textAlign: 'center',\n },\n },\n }}\n inputProps={{ tabIndex }}\n onChange={handleChange}\n disabled={disabled}\n placeholder={placeholder}\n {...other}\n />\n );\n },\n);\n\nIncrementer.displayName = 'Incrementer';\n\nexport default Incrementer;\n"]}