@lowentry/mui 1.1.2 → 1.1.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.
Files changed (51) hide show
  1. package/DatePicker/index.js +1 -0
  2. package/DatePicker/index.js.map +1 -0
  3. package/Dialog/index.js +1 -0
  4. package/Dialog/index.js.map +1 -0
  5. package/{LeMuiUtils-ca49f11d.js → LeMuiUtils-c46ed1cc.js} +1 -0
  6. package/LeMuiUtils-c46ed1cc.js.map +1 -0
  7. package/LoadingSpinner/index.js +2 -1
  8. package/LoadingSpinner/index.js.map +1 -0
  9. package/{LoadingSpinner-cbb3bd6d.js → LoadingSpinner-2e9afd52.js} +1 -0
  10. package/LoadingSpinner-2e9afd52.js.map +1 -0
  11. package/LoadingSpinnerWidget/index.js +2 -1
  12. package/LoadingSpinnerWidget/index.js.map +1 -0
  13. package/MenuButton/index.js +1 -0
  14. package/MenuButton/index.js.map +1 -0
  15. package/MuiRoot/index.js +1 -0
  16. package/MuiRoot/index.js.map +1 -0
  17. package/NumericTextField/index.js +2 -1
  18. package/NumericTextField/index.js.map +1 -0
  19. package/RemovableNumericTextField/index.js +2 -1
  20. package/RemovableNumericTextField/index.js.map +1 -0
  21. package/RemovableTextField/index.js +2 -1
  22. package/RemovableTextField/index.js.map +1 -0
  23. package/Submittable/index.js +1 -0
  24. package/Submittable/index.js.map +1 -0
  25. package/TextField/index.js +1 -0
  26. package/TextField/index.js.map +1 -0
  27. package/_rollupPluginBabelHelpers-c0e6c03a.js +1 -0
  28. package/_rollupPluginBabelHelpers-c0e6c03a.js.map +1 -0
  29. package/index.js +2 -1
  30. package/index.js.map +1 -0
  31. package/package.json +3 -3
  32. package/src/LeMuiUtils.js +52 -0
  33. package/src/index.js +11 -0
  34. package/src/widgets/DatePicker.css +32 -0
  35. package/src/widgets/DatePicker.jsx +112 -0
  36. package/src/widgets/Dialog.jsx +30 -0
  37. package/src/widgets/LoadingSpinner/LoadingSpinner.css +9 -0
  38. package/src/widgets/LoadingSpinner/LoadingSpinner.jsx +50 -0
  39. package/src/widgets/LoadingSpinner.jsx +1 -0
  40. package/src/widgets/LoadingSpinnerWidget.jsx +1 -0
  41. package/src/widgets/MenuButton.jsx +53 -0
  42. package/src/widgets/MuiRoot.css +13 -0
  43. package/src/widgets/MuiRoot.jsx +22 -0
  44. package/src/widgets/NumericTextField.jsx +117 -0
  45. package/src/widgets/RemovableNumericTextField.jsx +41 -0
  46. package/src/widgets/RemovableTextField.jsx +48 -0
  47. package/src/widgets/Submittable.jsx +41 -0
  48. package/src/widgets/TextField.css +4 -0
  49. package/src/widgets/TextField.jsx +30 -0
  50. package/style-inject.es-1f59c1d0.js +1 -0
  51. package/style-inject.es-1f59c1d0.js.map +1 -0
@@ -1 +1,2 @@
1
1
  import{_ as e,a as t,b as r,c as n,d as o}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import a from"react";import{LeRed as l}from"@lowentry/react-redux";import{IS_ARRAY as i}from"@lowentry/utils";import u from"dayjs";import{Button as d,Stack as c}from"@mui/material";import{DatePicker as m}from"@mui/x-date-pickers";import p from"../TextField/index.js";import s from"@mui/icons-material/ArrowBackIosNew";import f from"@mui/icons-material/ArrowForwardIos";import{s as v}from"../style-inject.es-1f59c1d0.js";v(".lowentry-mui--date-picker{padding:.5rem}.lowentry-mui--date-picker .lowentry-mui--date-picker--arrow-button{min-width:0;padding:6px 12px}.lowentry-mui--date-picker .lowentry-mui--date-picker--textfield{cursor:pointer!important;max-width:150px}.lowentry-mui--date-picker .lowentry-mui--date-picker--textfield .MuiInputBase-input{padding:10px 0;text-align:center}.lowentry-mui--date-picker .lowentry-mui--date-picker--textfield .MuiOutlinedInput-notchedOutline{border:0!important}.lowentry-mui--date-picker .lowentry-mui--date-picker--textfield *{cursor:pointer!important}");var w=["value","dateFormat","onChange","className","children"],y=l.memo((function(n){var o,c,m,s,f=l.useCallback((function(){var t,r;if(null!=n&&null!==(t=n.ownerState)&&void 0!==t&&t.open)return null;for(var o=null==n||null===(r=n.InputProps)||void 0===r||null===(r=r.endAdornment)||void 0===r?void 0:r.props;o;){var a,l;if(o.onClick)return o.onClick;if(null!==(a=o)&&void 0!==a&&a.children)o=o.children;else{if(i(o)){var u,d=!1,c=e(o);try{for(c.s();!(u=c.n()).done;){var m=u.value;null!=m&&m.props&&(o=m.props,d=!0)}}catch(e){c.e(e)}finally{c.f()}if(d)continue}o=null===(l=o)||void 0===l?void 0:l.props}}return null}),[null==n||null===(o=n.ownerState)||void 0===o?void 0:o.open,null==n||null===(c=n.InputProps)||void 0===c||null===(c=c.endAdornment)||void 0===c?void 0:c.props]),v=l.useCallback((function(e){e.target.selectionStart=e.target.selectionEnd,e.preventDefault()}),[]);return a.createElement(a.Fragment,null,a.createElement(d,{variant:"outlined",onClick:f},a.createElement(p,t({},n,{className:"lowentry-mui--date-picker--textfield "+(null!==(m=n.className)&&void 0!==m?m:""),variant:"outlined",value:u(n.value).format(null==n?void 0:n.dateFormat),InputProps:r(r({},null!==(s=n.InputProps)&&void 0!==s?s:{}),{},{readOnly:!0,endAdornment:null,onSelect:v,onSelectCapture:v,onMouseDown:v,onTouchStart:v,onTouchMove:v})}))))})),k=l.memo((function(e){var i=e.value,p=e.dateFormat,v=e.onChange,k=e.className;e.children;var x=n(e,w);p||(p="ddd, D MMM YYYY");var h=l.useHistoryState(!1),C=o(h,3),b=C[0],g=C[1],E=C[2],M=l.useCallback((function(){v&&v.apply(void 0,arguments)}),[v]);return a.createElement(a.Fragment,null,a.createElement(c,t({className:"lowentry-mui--date-picker "+(null!=k?k:""),direction:"row",justifyContent:"space-between",spacing:1},x),a.createElement(d,{className:"lowentry-mui--date-picker--arrow-button",variant:"text",color:"primary",onClick:function(){return M(u(i).subtract(1,"day"))}},a.createElement(s,null)),a.createElement(m,{open:b,onOpen:g,onClose:E,showDaysOutsideCurrentMonth:!0,views:["day"],format:"YYYY-MM-DD",label:"",isRequired:!0,value:i,onChange:M,slots:{textField:function(e){return l.createElement(y,r({dateFormat:p},e))},toolbar:function(e){return null}}}),a.createElement(d,{className:"lowentry-mui--date-picker--arrow-button",variant:"text",color:"primary",onClick:function(){return M(u(i).add(1,"day"))}},a.createElement(f,null))))}));export{k as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/widgets/DatePicker.jsx"],"sourcesContent":["import React from 'react';\nimport {LeRed} from '@lowentry/react-redux';\nimport {IS_ARRAY} from '@lowentry/utils';\nimport Dayjs from 'dayjs';\nimport {Button, Stack} from '@mui/material';\nimport {DatePicker as MuiDatePicker} from '@mui/x-date-pickers';\nimport TextField from './TextField.jsx';\nimport ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew';\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';\nimport './DatePicker.css';\n\n\nconst DatePickerTextField = LeRed.memo((props) =>\n{\n\tconst onClick = LeRed.useCallback(() =>\n\t{\n\t\tif(props?.ownerState?.open)\n\t\t{\n\t\t\treturn null;\n\t\t}\n\t\tlet propsLoop = props?.InputProps?.endAdornment?.props;\n\t\twhile(propsLoop)\n\t\t{\n\t\t\tif(propsLoop.onClick)\n\t\t\t{\n\t\t\t\treturn propsLoop.onClick;\n\t\t\t}\n\t\t\tif(propsLoop?.children)\n\t\t\t{\n\t\t\t\tpropsLoop = propsLoop.children;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif(IS_ARRAY(propsLoop))\n\t\t\t{\n\t\t\t\tlet continueLoop = false;\n\t\t\t\tfor(const propsLoopItem of propsLoop)\n\t\t\t\t{\n\t\t\t\t\tif(propsLoopItem?.props)\n\t\t\t\t\t{\n\t\t\t\t\t\tpropsLoop = propsLoopItem.props;\n\t\t\t\t\t\tcontinueLoop = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(continueLoop)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tpropsLoop = propsLoop?.props;\n\t\t}\n\t\treturn null;\n\t}, [props?.ownerState?.open, props?.InputProps?.endAdornment?.props]);\n\t\n\t\n\tconst onSelect = LeRed.useCallback((event) =>\n\t{\n\t\tevent.target.selectionStart = event.target.selectionEnd;\n\t\tevent.preventDefault();\n\t}, []);\n\t\n\t\n\treturn (<>\n\t\t<Button variant=\"outlined\" onClick={onClick}>\n\t\t\t<TextField {...props} className={'lowentry-mui--date-picker--textfield ' + (props.className ?? '')} variant=\"outlined\" value={Dayjs(props.value).format(props?.dateFormat)} InputProps={{...(props.InputProps ?? {}), readOnly:true, endAdornment:null, onSelect:onSelect, onSelectCapture:onSelect, onMouseDown:onSelect, onTouchStart:onSelect, onTouchMove:onSelect}}/>\n\t\t</Button>\n\t</>);\n});\n\n\nconst DatePicker = LeRed.memo(({value, dateFormat, onChange, className, children, ...props}) =>\n{\n\tif(!dateFormat)\n\t{\n\t\tdateFormat = 'ddd, D MMM YYYY';\n\t}\n\t\n\tconst [datepickerOpen, openDatepicker, closeDatepicker] = LeRed.useHistoryState(false);\n\t\n\t\n\tconst onChanged = LeRed.useCallback((...args) =>\n\t{\n\t\tif(onChange)\n\t\t{\n\t\t\tonChange(...args);\n\t\t}\n\t}, [onChange]);\n\t\n\t\n\treturn (<>\n\t\t<Stack className={'lowentry-mui--date-picker ' + (className ?? '')} direction=\"row\" justifyContent=\"space-between\" spacing={1} {...props}>\n\t\t\t<Button className=\"lowentry-mui--date-picker--arrow-button\" variant=\"text\" color=\"primary\" onClick={() => onChanged(Dayjs(value).subtract(1, 'day'))}><ArrowBackIosNewIcon/></Button>\n\t\t\t<MuiDatePicker\n\t\t\t\topen={datepickerOpen}\n\t\t\t\tonOpen={openDatepicker}\n\t\t\t\tonClose={closeDatepicker}\n\t\t\t\tshowDaysOutsideCurrentMonth={true}\n\t\t\t\tviews={['day']}\n\t\t\t\tformat=\"YYYY-MM-DD\"\n\t\t\t\tlabel=\"\"\n\t\t\t\tisRequired={true}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={onChanged}\n\t\t\t\tslots={{\n\t\t\t\t\ttextField:(props) => LeRed.createElement(DatePickerTextField, {dateFormat, ...props}),\n\t\t\t\t\ttoolbar: (props) => null,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<Button className=\"lowentry-mui--date-picker--arrow-button\" variant=\"text\" color=\"primary\" onClick={() => onChanged(Dayjs(value).add(1, 'day'))}><ArrowForwardIosIcon/></Button>\n\t\t</Stack>\n\t</>);\n});\nexport default DatePicker;\n"],"names":["DatePickerTextField","LeRed","memo","props","_props$ownerState2","_props$InputProps2","_props$className","_props$InputProps3","onClick","useCallback","_props$ownerState","_props$InputProps","ownerState","open","propsLoop","InputProps","endAdornment","_propsLoop","_propsLoop2","children","IS_ARRAY","_step","continueLoop","_iterator","_createForOfIteratorHelper","s","n","done","propsLoopItem","value","err","e","f","onSelect","event","target","selectionStart","selectionEnd","preventDefault","React","createElement","Fragment","Button","variant","TextField","_extends","className","Dayjs","format","dateFormat","_objectSpread","readOnly","onSelectCapture","onMouseDown","onTouchStart","onTouchMove","DatePicker","_ref","onChange","_objectWithoutProperties","_excluded","_LeRed$useHistoryStat","useHistoryState","_LeRed$useHistoryStat2","_slicedToArray","datepickerOpen","openDatepicker","closeDatepicker","onChanged","apply","arguments","Stack","direction","justifyContent","spacing","color","subtract","ArrowBackIosNewIcon","MuiDatePicker","onOpen","onClose","showDaysOutsideCurrentMonth","views","label","isRequired","slots","textField","toolbar","add","ArrowForwardIosIcon"],"mappings":"6nCAYMA,EAAsBC,EAAMC,MAAK,SAACC,GACxC,IAAAC,EAAAC,EAAAC,EAAAC,EACOC,EAAUP,EAAMQ,aAAY,WAClC,IAAAC,EAAAC,EACC,GAAGR,iBAAKO,EAALP,EAAOS,kBAAU,IAAAF,GAAjBA,EAAmBG,KAErB,OAAO,KAGR,IADA,IAAIC,EAAYX,SAAiB,QAAZQ,EAALR,EAAOY,kBAAUJ,IAAAA,WAAAA,EAAjBA,EAAmBK,oBAAY,IAAAL,OAAA,EAA/BA,EAAiCR,MAC3CW,GACN,CAAA,IAAAG,EAAAC,EACC,GAAGJ,EAAUN,QAEZ,OAAOM,EAAUN,QAElB,GAAY,QAAZS,EAAGH,SAAAG,IAASA,GAATA,EAAWE,SAEbL,EAAYA,EAAUK,aAFvB,CAKA,GAAGC,EAASN,GACZ,CACC,IACoCO,EADhCC,GAAe,EAAMC,EAAAC,EACEV,GAAS,IAApC,IAAAS,EAAAE,MAAAJ,EAAAE,EAAAG,KAAAC,MACA,CAAA,IADUC,EAAaP,EAAAQ,MAEnBD,SAAAA,EAAezB,QAEjBW,EAAYc,EAAczB,MAC1BmB,GAAe,EAEjB,CAAC,CAAA,MAAAQ,GAAAP,EAAAQ,EAAAD,EAAA,CAAA,QAAAP,EAAAS,GAAA,CACD,GAAGV,EAEF,QAEF,CACAR,UAASI,EAAGJ,SAAS,IAAAI,OAAA,EAATA,EAAWf,KAjBvB,CAkBD,CACA,OAAO,IACR,GAAG,CAACA,SAAiB,QAAZC,EAALD,EAAOS,kBAAPR,IAAiBA,OAAjBA,EAAAA,EAAmBS,KAAMV,SAAiBE,QAAZA,EAALF,EAAOY,sBAAUV,WAAAA,EAAjBA,EAAmBW,oBAAY,IAAAX,OAAA,EAA/BA,EAAiCF,QAGxD8B,EAAWhC,EAAMQ,aAAY,SAACyB,GAEnCA,EAAMC,OAAOC,eAAiBF,EAAMC,OAAOE,aAC3CH,EAAMI,gBACN,GAAE,IAGH,OAAQC,EAAAC,cAAAD,EAAAE,SAAA,KACPF,EAAAC,cAACE,EAAM,CAACC,QAAQ,WAAWnC,QAASA,GACnC+B,EAAAC,cAACI,EAASC,KAAK1C,EAAK,CAAE2C,UAAW,yCAA0D,QAAnBxC,EAAIH,EAAM2C,iBAAS,IAAAxC,EAAAA,EAAI,IAAKqC,QAAQ,WAAWd,MAAOkB,EAAM5C,EAAM0B,OAAOmB,OAAO7C,eAAAA,EAAO8C,YAAalC,WAAUmC,EAAAA,EAAA,CAAA,UAAA3C,EAAOJ,EAAMY,kBAAU,IAAAR,EAAAA,EAAI,CAAE,GAAA,CAAA,EAAA,CAAG4C,UAAS,EAAMnC,aAAa,KAAMiB,SAASA,EAAUmB,gBAAgBnB,EAAUoB,YAAYpB,EAAUqB,aAAarB,EAAUsB,YAAYtB,QAGjW,IAGMuB,EAAavD,EAAMC,MAAK,SAAAuD,GAC9B,IADgC5B,EAAK4B,EAAL5B,MAAOoB,EAAUQ,EAAVR,WAAYS,EAAQD,EAARC,SAAUZ,EAASW,EAATX,UAAmBW,EAARtC,SAAahB,IAAAA,EAAKwD,EAAAF,EAAAG,GAErFX,IAEHA,EAAa,mBAGd,IAAAY,EAA0D5D,EAAM6D,iBAAgB,GAAMC,EAAAC,EAAAH,EAAA,GAA/EI,EAAcF,EAAA,GAAEG,EAAcH,EAAA,GAAEI,EAAeJ,EAAA,GAGhDK,EAAYnE,EAAMQ,aAAY,WAEhCiD,GAEFA,EAAQW,WAAAC,EAAAA,UAEV,GAAG,CAACZ,IAGJ,OAAQnB,EAAAC,cAAAD,EAAAE,SACPF,KAAAA,EAAAC,cAAC+B,EAAK1B,EAAA,CAACC,UAAW,8BAAgCA,QAAAA,EAAa,IAAK0B,UAAU,MAAMC,eAAe,gBAAgBC,QAAS,GAAOvE,GAClIoC,EAAAC,cAACE,EAAM,CAACI,UAAU,0CAA0CH,QAAQ,OAAOgC,MAAM,UAAUnE,QAAS,WAAA,OAAM4D,EAAUrB,EAAMlB,GAAO+C,SAAS,EAAG,OAAO,GAAErC,EAAAC,cAACqC,EAAmB,OAC1KtC,EAAAC,cAACsC,EAAa,CACbjE,KAAMoD,EACNc,OAAQb,EACRc,QAASb,EACTc,6BAA6B,EAC7BC,MAAO,CAAC,OACRlC,OAAO,aACPmC,MAAM,GACNC,YAAY,EACZvD,MAAOA,EACP6B,SAAUU,EACViB,MAAO,CACNC,UAAU,SAACnF,GAAK,OAAKF,EAAMuC,cAAcxC,EAAmBkD,EAAA,CAAGD,WAAAA,GAAe9C,GAAO,EACrFoF,QAAU,SAACpF,GAAK,OAAK,IAAI,KAG3BoC,EAAAC,cAACE,EAAM,CAACI,UAAU,0CAA0CH,QAAQ,OAAOgC,MAAM,UAAUnE,QAAS,WAAA,OAAM4D,EAAUrB,EAAMlB,GAAO2D,IAAI,EAAG,OAAO,GAAEjD,EAAAC,cAACiD,EAAoB,QAGzK"}
package/Dialog/index.js CHANGED
@@ -1 +1,2 @@
1
1
  import{c as e,a as r}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import o from"react";import{LeRed as l}from"@lowentry/react-redux";import{STRING as a}from"@lowentry/utils";import{Dialog as t}from"@mui/material";var n=["onClose","children"],m=l.memo((function(m){var i=m.onClose,c=m.children,s=e(m,n),u=l.useCallback((function(e,r){a(r).toLowerCase().includes("escape")&&i&&i(e,r)}),[i]);return o.createElement(o.Fragment,null,o.createElement(t,r({onClose:u},s),c))}));export{m as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/widgets/Dialog.jsx"],"sourcesContent":["import React from 'react';\nimport {LeRed} from '@lowentry/react-redux';\nimport {STRING} from '@lowentry/utils';\nimport {Dialog as MuiDialog} from '@mui/material';\n\n\nconst Dialog = LeRed.memo(({onClose, children, ...props}) =>\n{\n\tconst onClosed = LeRed.useCallback((event, reason) =>\n\t{\n\t\tif(!STRING(reason).toLowerCase().includes('escape'))\n\t\t{\n\t\t\t// prevent closing when clicking on the backdrop, only allow escape-key closing\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(onClose)\n\t\t{\n\t\t\tonClose(event, reason);\n\t\t}\n\t}, [onClose]);\n\t\n\t\n\treturn (<>\n\t\t<MuiDialog onClose={onClosed} {...props}>\n\t\t\t{children}\n\t\t</MuiDialog>\n\t</>);\n});\nexport default Dialog;\n"],"names":["Dialog","LeRed","memo","_ref","onClose","children","props","_objectWithoutProperties","_excluded","onClosed","useCallback","event","reason","STRING","toLowerCase","includes","React","createElement","Fragment","MuiDialog","_extends"],"mappings":"oPAMMA,EAASC,EAAMC,MAAK,SAAAC,GAC1B,IAD4BC,EAAOD,EAAPC,QAASC,EAAQF,EAARE,SAAaC,EAAKC,EAAAJ,EAAAK,GAEhDC,EAAWR,EAAMS,aAAY,SAACC,EAAOC,GAEtCC,EAAOD,GAAQE,cAAcC,SAAS,WAMvCX,GAEFA,EAAQO,EAAOC,EAEjB,GAAG,CAACR,IAGJ,OAAQY,EAAAC,cAAAD,EAAAE,SACPF,KAAAA,EAAAC,cAACE,EAASC,EAAA,CAAChB,QAASK,GAAcH,GAChCD,GAGJ"}
@@ -1 +1,2 @@
1
1
  import{INT_LAX as t,STRING as e,LeUtils as n}from"@lowentry/utils";var r={onSelectEnsureMinimumOffset:function(e){return(e=Math.max(0,t(e)))<=0?function(){}:function(t){t&&t.target&&(t.target.selectionEnd<e?t.target.setSelectionRange(e,e):t.target.selectionStart<e&&t.target.setSelectionRange(e,t.target.selectionEnd))}},prependHiddenChar:function(t){return(t=e(t)).startsWith("​")?t:"​"+t},purgePrependedHiddenChar:function(t){return t=e(t),n.trimStart(t,["​"," ","\t","\r","\n"])}};export{r as L};
2
+ //# sourceMappingURL=LeMuiUtils-c46ed1cc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeMuiUtils-c46ed1cc.js","sources":["src/LeMuiUtils.js"],"sourcesContent":["import {LeUtils, STRING, INT_LAX} from '@lowentry/utils';\n\n\nconst HIDDEN_CHAR = '\\u200B';\n\n\nexport const LeMuiUtils = {\n\tonSelectEnsureMinimumOffset:\n\t\t(charactersCount) =>\n\t\t{\n\t\t\tcharactersCount = Math.max(0, INT_LAX(charactersCount));\n\t\t\tif(charactersCount <= 0)\n\t\t\t{\n\t\t\t\treturn () =>\n\t\t\t\t{\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\treturn (event) =>\n\t\t\t{\n\t\t\t\tif(event && event.target)\n\t\t\t\t{\n\t\t\t\t\tif(event.target.selectionEnd < charactersCount)\n\t\t\t\t\t{\n\t\t\t\t\t\tevent.target.setSelectionRange(charactersCount, charactersCount);\n\t\t\t\t\t}\n\t\t\t\t\telse if(event.target.selectionStart < charactersCount)\n\t\t\t\t\t{\n\t\t\t\t\t\tevent.target.setSelectionRange(charactersCount, event.target.selectionEnd);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\n\tprependHiddenChar:\n\t\t(string) =>\n\t\t{\n\t\t\tstring = STRING(string);\n\t\t\tif(string.startsWith(HIDDEN_CHAR))\n\t\t\t{\n\t\t\t\treturn string;\n\t\t\t}\n\t\t\treturn HIDDEN_CHAR + string;\n\t\t},\n\t\n\tpurgePrependedHiddenChar:\n\t\t(string) =>\n\t\t{\n\t\t\tstring = STRING(string);\n\t\t\treturn LeUtils.trimStart(string, ['\\u200B', ' ', '\\t', '\\r', '\\n']);\n\t\t},\n};\n"],"names":["LeMuiUtils","onSelectEnsureMinimumOffset","charactersCount","Math","max","INT_LAX","event","target","selectionEnd","setSelectionRange","selectionStart","prependHiddenChar","string","STRING","startsWith","purgePrependedHiddenChar","LeUtils","trimStart"],"mappings":"mEAGA,IAGaA,EAAa,CACzBC,4BACC,SAACC,GAGA,OADAA,EAAkBC,KAAKC,IAAI,EAAGC,EAAQH,MAChB,EAEd,WACP,EAIM,SAACI,GAEJA,GAASA,EAAMC,SAEdD,EAAMC,OAAOC,aAAeN,EAE9BI,EAAMC,OAAOE,kBAAkBP,EAAiBA,GAEzCI,EAAMC,OAAOG,eAAiBR,GAErCI,EAAMC,OAAOE,kBAAkBP,EAAiBI,EAAMC,OAAOC,eAIhE,EAEFG,kBACC,SAACC,GAGA,OADAA,EAASC,EAAOD,IACNE,WAnCO,KAqCTF,EArCS,IAuCIA,CACrB,EAEFG,yBACC,SAACH,GAGA,OADAA,EAASC,EAAOD,GACTI,EAAQC,UAAUL,EAAQ,CAAC,IAAU,IAAK,KAAM,KAAM,MAC9D"}
@@ -1 +1,2 @@
1
- export{L as default}from"../LoadingSpinner-cbb3bd6d.js";import"../_rollupPluginBabelHelpers-c0e6c03a.js";import"react";import"@lowentry/react-redux";import"@mui/material";import"../style-inject.es-1f59c1d0.js";
1
+ export{L as default}from"../LoadingSpinner-2e9afd52.js";import"../_rollupPluginBabelHelpers-c0e6c03a.js";import"react";import"@lowentry/react-redux";import"@mui/material";import"../style-inject.es-1f59c1d0.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +1,2 @@
1
1
  import{c as e,a as n,b as r}from"./_rollupPluginBabelHelpers-c0e6c03a.js";import t from"react";import{LeRed as i}from"@lowentry/react-redux";import{Backdrop as a,CircularProgress as l}from"@mui/material";import{s as o}from"./style-inject.es-1f59c1d0.js";o(".lowentry-mui--loading-spinner{color:hsla(0,0%,100%,.04)}.lowentry-mui--loading-spinner.lowentry-mui--loading-spinner--transparent{background:transparent}");var s=["type","className","sx","children"],m={},u=i.memo((function(e){var n=e.type;return i.useEffect((function(){return function(e){var n=e.type;m[n]=(m[n]||0)+1,1===m[n]&&i.trigger("lowentry-mui--loading-spinner--"+n)}({type:n}),function(){return function(e){var n=e.type;m[n]=(m[n]||1)-1,0===m[n]&&i.trigger("lowentry-mui--loading-spinner--"+n)}({type:n})}}),[]),null})),p=i.memo((function(o){var u=o.type,p=o.className,c=o.sx;o.children;var g=e(o,s);return i.useTriggerable("lowentry-mui--loading-spinner--"+u),t.createElement(t.Fragment,null,t.createElement(a,n({className:"lowentry-mui--loading-spinner lowentry-mui--loading-spinner--"+u+" "+(null!=p?p:""),sx:r({zIndex:function(e){return e.zIndex.drawer+1}},null!=c?c:{}),open:(m[u]||0)>0},g),t.createElement(l,{color:"inherit",size:"min(120px,30vw)"})))}));export{u as L,p as a};
2
+ //# sourceMappingURL=LoadingSpinner-2e9afd52.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingSpinner-2e9afd52.js","sources":["src/widgets/LoadingSpinner/LoadingSpinner.jsx"],"sourcesContent":["import React from 'react';\nimport {LeRed} from '@lowentry/react-redux';\nimport {Backdrop, CircularProgress} from '@mui/material';\nimport './LoadingSpinner.css';\n\n\nlet loadingSpinnerCount = {};\nlet loadingSpinnerCountNonTransparent = 0;\n\nconst LoadingSpinnerGrab = ({type}) =>\n{\n\tloadingSpinnerCount[type] = (loadingSpinnerCount[type] || 0) + 1;\n\tif(loadingSpinnerCount[type] === 1)\n\t{\n\t\tLeRed.trigger('lowentry-mui--loading-spinner--' + type);\n\t}\n};\n\nconst LoadingSpinnerRelease = ({type}) =>\n{\n\tloadingSpinnerCount[type] = (loadingSpinnerCount[type] || 1) - 1;\n\tif(loadingSpinnerCount[type] === 0)\n\t{\n\t\tLeRed.trigger('lowentry-mui--loading-spinner--' + type);\n\t}\n};\n\n\nexport const LoadingSpinner = LeRed.memo(({type}) =>\n{\n\tLeRed.useEffect(() =>\n\t{\n\t\tLoadingSpinnerGrab({type});\n\t\treturn () => LoadingSpinnerRelease({type});\n\t}, []);\n\t\n\treturn null;\n});\n\n\nexport const LoadingSpinnerWidget = LeRed.memo(({type, className, sx, children, ...props}) =>\n{\n\tLeRed.useTriggerable('lowentry-mui--loading-spinner--' + type);\n\t\n\treturn (<>\n\t\t<Backdrop className={'lowentry-mui--loading-spinner lowentry-mui--loading-spinner--' + type + ' ' + (className ?? '')} sx={{zIndex:(theme) => theme.zIndex.drawer + 1, ...(sx ?? {})}} open={(loadingSpinnerCount[type] || 0) > 0} {...props}>\n\t\t\t<CircularProgress color=\"inherit\" size=\"min(120px,30vw)\"/>\n\t\t</Backdrop>\n\t</>);\n});\n"],"names":["loadingSpinnerCount","LoadingSpinner","LeRed","memo","_ref3","type","useEffect","_ref","trigger","LoadingSpinnerGrab","_ref2","LoadingSpinnerRelease","LoadingSpinnerWidget","_ref4","className","sx","children","props","_objectWithoutProperties","_excluded","useTriggerable","React","createElement","Fragment","Backdrop","_extends","_objectSpread","zIndex","theme","drawer","open","CircularProgress","color","size"],"mappings":"ycAMIA,EAAsB,CAAA,EAsBbC,EAAiBC,EAAMC,MAAK,SAAAC,GACzC,IAD2CC,EAAID,EAAJC,KAQ1C,OANAH,EAAMI,WAAU,WAGf,OAxByB,SAAHC,GACxB,IAD6BF,EAAIE,EAAJF,KAE5BL,EAAoBK,IAASL,EAAoBK,IAAS,GAAK,EAC9B,IAA9BL,EAAoBK,IAEtBH,EAAMM,QAAQ,kCAAoCH,EAEpD,CAgBEI,CAAmB,CAACJ,KAAAA,IACb,WAAA,OAfqB,SAAHK,GAC3B,IADgCL,EAAIK,EAAJL,KAE/BL,EAAoBK,IAASL,EAAoBK,IAAS,GAAK,EAC9B,IAA9BL,EAAoBK,IAEtBH,EAAMM,QAAQ,kCAAoCH,EAEpD,CAQeM,CAAsB,CAACN,KAAAA,GAAM,CAC1C,GAAE,IAEI,IACR,IAGaO,EAAuBV,EAAMC,MAAK,SAAAU,GAC/C,IADiDR,EAAIQ,EAAJR,KAAMS,EAASD,EAATC,UAAWC,EAAEF,EAAFE,GAAYF,EAARG,SAAaC,IAAAA,EAAKC,EAAAL,EAAAM,GAIvF,OAFAjB,EAAMkB,eAAe,kCAAoCf,GAEjDgB,EAAAC,cAAAD,EAAAE,SACPF,KAAAA,EAAAC,cAACE,EAAQC,EAAA,CAACX,UAAW,gEAAkET,EAAO,KAAOS,QAAAA,EAAa,IAAKC,GAAEW,EAAA,CAAGC,OAAO,SAACC,GAAK,OAAKA,EAAMD,OAAOE,OAAS,CAAC,GAAMd,QAAAA,EAAM,IAAMe,MAAO9B,EAAoBK,IAAS,GAAK,GAAOY,GACtOI,EAAAC,cAACS,EAAgB,CAACC,MAAM,UAAUC,KAAK,qBAG1C"}
@@ -1 +1,2 @@
1
- export{a as default}from"../LoadingSpinner-cbb3bd6d.js";import"../_rollupPluginBabelHelpers-c0e6c03a.js";import"react";import"@lowentry/react-redux";import"@mui/material";import"../style-inject.es-1f59c1d0.js";
1
+ export{a as default}from"../LoadingSpinner-2e9afd52.js";import"../_rollupPluginBabelHelpers-c0e6c03a.js";import"react";import"@lowentry/react-redux";import"@mui/material";import"../style-inject.es-1f59c1d0.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +1,2 @@
1
1
  import{c as e,d as l,a as o}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import r from"react";import{LeRed as n}from"@lowentry/react-redux";import{LeUtils as a,ARRAY as i}from"@lowentry/utils";import{Button as t,Menu as c}from"@mui/material";var s=["icon","className","ref","onClick","onClose","children"],u=n.memo((function(u){var m=u.icon,p=u.className,d=u.ref,f=u.onClick,C=u.onClose,v=u.children,k=e(u,s),b=n.useRef(),y=n.useState(!1),E=l(y,2),h=E[0],w=E[1],g=n.useCallback((function(e){w(!0),f&&f(e)}),[f]),x=n.useCallback((function(e){w(!1),C&&C(e)}),[C]);return r.createElement(r.Fragment,null,r.createElement(t,o({ref:n.mergeRefs(b,d),className:"lowentry-mui--menu-button allow-mobile-hover "+(null!=p?p:""),variant:"text",color:"primary",onClick:g},k),m),r.createElement(c,{anchorEl:b.current,open:h,onClose:x},a.mapToArray(i(v),(function(e,l){var o,r;return!!e&&n.cloneElement(e,{key:l,onClick:function(){var l;w(!1),null!=e&&null!==(l=e.props)&&void 0!==l&&l.onClick&&e.props.onClick()},disabled:void 0!==(null==e||null===(o=e.props)||void 0===o?void 0:o.disabled)?e.props.disabled:!(null!=e&&null!==(r=e.props)&&void 0!==r&&r.onClick)})}))))}));export{u as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/widgets/MenuButton.jsx"],"sourcesContent":["import React from 'react';\nimport {LeRed} from '@lowentry/react-redux';\nimport {LeUtils, ARRAY} from '@lowentry/utils';\nimport {Button, Menu} from '@mui/material';\n\n\nconst MenuButton = LeRed.memo(({icon, className, ref, onClick, onClose, children, ...props}) =>\n{\n\tconst buttonRef = LeRed.useRef();\n\tconst [open, setOpen] = LeRed.useState(false);\n\t\n\t\n\tconst onClicked = LeRed.useCallback((event) =>\n\t{\n\t\tsetOpen(true);\n\t\t\n\t\tif(onClick)\n\t\t{\n\t\t\tonClick(event);\n\t\t}\n\t}, [onClick]);\n\t\n\t\n\tconst onClosed = LeRed.useCallback((event) =>\n\t{\n\t\tsetOpen(false);\n\t\t\n\t\tif(onClose)\n\t\t{\n\t\t\tonClose(event);\n\t\t}\n\t}, [onClose]);\n\t\n\t\n\treturn (<>\n\t\t<Button ref={LeRed.mergeRefs(buttonRef, ref)} className={'lowentry-mui--menu-button allow-mobile-hover ' + (className ?? '')} variant=\"text\" color=\"primary\" onClick={onClicked} {...props}>{icon}</Button>\n\t\t<Menu anchorEl={buttonRef.current} open={open} onClose={onClosed}>\n\t\t\t{LeUtils.mapToArray(ARRAY(children), (child, index) => !!child && LeRed.cloneElement(child, {\n\t\t\t\tkey: index,\n\t\t\t\tonClick: () =>\n\t\t\t\t {\n\t\t\t\t\t setOpen(false);\n\t\t\t\t\t if(child?.props?.onClick)\n\t\t\t\t\t {\n\t\t\t\t\t\t child.props.onClick();\n\t\t\t\t\t }\n\t\t\t\t },\n\t\t\t\tdisabled:(typeof child?.props?.disabled !== 'undefined') ? child.props.disabled : !child?.props?.onClick,\n\t\t\t}))}\n\t\t</Menu>\n\t</>);\n});\nexport default MenuButton;\n"],"names":["MenuButton","LeRed","memo","_ref","icon","className","ref","onClick","onClose","children","props","_objectWithoutProperties","_excluded","buttonRef","useRef","_LeRed$useState","useState","_LeRed$useState2","_slicedToArray","open","setOpen","onClicked","useCallback","event","onClosed","React","createElement","Fragment","Button","_extends","mergeRefs","variant","color","Menu","anchorEl","current","LeUtils","mapToArray","ARRAY","child","index","_child$props2","_child$props3","cloneElement","key","_child$props","disabled"],"mappings":"oTAMMA,EAAaC,EAAMC,MAAK,SAAAC,GAC9B,IADgCC,EAAID,EAAJC,KAAMC,EAASF,EAATE,UAAWC,EAAGH,EAAHG,IAAKC,EAAOJ,EAAPI,QAASC,EAAOL,EAAPK,QAASC,EAAQN,EAARM,SAAaC,EAAKC,EAAAR,EAAAS,GAEnFC,EAAYZ,EAAMa,SACxBC,EAAwBd,EAAMe,UAAS,GAAMC,EAAAC,EAAAH,EAAA,GAAtCI,EAAIF,EAAA,GAAEG,EAAOH,EAAA,GAGdI,EAAYpB,EAAMqB,aAAY,SAACC,GAEpCH,GAAQ,GAELb,GAEFA,EAAQgB,EAEV,GAAG,CAAChB,IAGEiB,EAAWvB,EAAMqB,aAAY,SAACC,GAEnCH,GAAQ,GAELZ,GAEFA,EAAQe,EAEV,GAAG,CAACf,IAGJ,OAAQiB,EAAAC,cAAAD,EAAAE,SACPF,KAAAA,EAAAC,cAACE,EAAMC,EAAA,CAACvB,IAAKL,EAAM6B,UAAUjB,EAAWP,GAAMD,UAAW,iDAAmDA,QAAAA,EAAa,IAAK0B,QAAQ,OAAOC,MAAM,UAAUzB,QAASc,GAAeX,GAAQN,GAC7LqB,EAAAC,cAACO,EAAI,CAACC,SAAUrB,EAAUsB,QAAShB,KAAMA,EAAMX,QAASgB,GACtDY,EAAQC,WAAWC,EAAM7B,IAAW,SAAC8B,EAAOC,GAAK,IAAAC,EAAAC,EAAA,QAAOH,GAAStC,EAAM0C,aAAaJ,EAAO,CAC3FK,IAASJ,EACTjC,QAAS,WACA,IAAAsC,EACCzB,GAAQ,GACLmB,iBAAKM,EAALN,EAAO7B,aAAK,IAAAmC,GAAZA,EAActC,SAEhBgC,EAAM7B,MAAMH,SAEb,EACVuC,cAA4C,KAA3BP,iBAAKE,EAALF,EAAO7B,aAAK,IAAA+B,OAAA,EAAZA,EAAcK,UAA4BP,EAAM7B,MAAMoC,WAAYP,SAAY,QAAPG,EAALH,EAAO7B,aAAPgC,IAAYA,GAAZA,EAAcnC,UAChG,KAGL"}
package/MuiRoot/index.js CHANGED
@@ -1 +1,2 @@
1
1
  import{c as e,a as r}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import t from"react";import{LeRed as o}from"@lowentry/react-redux";import{CssBaseline as m,ThemeProvider as a}from"@mui/material";import{LocalizationProvider as i}from"@mui/x-date-pickers";import{AdapterDayjs as l}from"@mui/x-date-pickers/AdapterDayjs";import{s as n}from"../style-inject.es-1f59c1d0.js";n(".lowentry-mui--mui-root{min-height:100dvh;width:100%}@media not (hover:hover),not (pointer:fine){.lowentry-mui--mui-root .MuiButtonBase-root:not(.allow-mobile-hover):hover{background-color:hsla(0,0%,100%,0)!important}}");var c=["theme","className","children"],s=o.memo((function(o){var n=o.theme,s=o.className,u=o.children,p=e(o,c);return t.createElement(t.Fragment,null,t.createElement(m,null),t.createElement(a,{theme:n},t.createElement(i,{dateAdapter:l},t.createElement("div",r({className:"lowentry-mui--mui-root "+(null!=s?s:"")},p),u))))}));export{s as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/widgets/MuiRoot.jsx"],"sourcesContent":["import React from 'react';\nimport {LeRed} from '@lowentry/react-redux';\nimport {CssBaseline, ThemeProvider} from '@mui/material';\nimport {LocalizationProvider} from '@mui/x-date-pickers';\nimport {AdapterDayjs} from '@mui/x-date-pickers/AdapterDayjs';\nimport './MuiRoot.css';\n\n\nconst MuiRoot = LeRed.memo(({theme, className, children, ...props}) =>\n{\n\treturn (<>\n\t\t<CssBaseline/>\n\t\t<ThemeProvider theme={theme}>\n\t\t\t<LocalizationProvider dateAdapter={AdapterDayjs}>\n\t\t\t\t<div className={'lowentry-mui--mui-root ' + (className ?? '')} {...props}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</LocalizationProvider>\n\t\t</ThemeProvider>\n\t</>);\n});\nexport default MuiRoot;\n"],"names":["MuiRoot","LeRed","memo","_ref","theme","className","children","props","_objectWithoutProperties","_excluded","React","createElement","Fragment","CssBaseline","ThemeProvider","LocalizationProvider","dateAdapter","AdapterDayjs","_extends"],"mappings":"2nBAQMA,EAAUC,EAAMC,MAAK,SAAAC,GAC3B,IAD6BC,EAAKD,EAALC,MAAOC,EAASF,EAATE,UAAWC,EAAQH,EAARG,SAAaC,EAAKC,EAAAL,EAAAM,GAEhE,OAAQC,EAAAC,cAAAD,EAAAE,cACPF,EAAAC,cAACE,QACDH,EAAAC,cAACG,EAAa,CAACV,MAAOA,GACrBM,EAAAC,cAACI,EAAoB,CAACC,YAAaC,GAClCP,EAAAC,cAAA,MAAAO,EAAA,CAAKb,UAAW,2BAA6BA,QAAAA,EAAa,KAASE,GACjED,KAKN"}
@@ -1 +1,2 @@
1
- import{c as e,d as a,b as t,a as r}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import l from"react";import{LeRed as n}from"@lowentry/react-redux";import{INT_LAX_ANY as i,FLOAT_LAX as o,LeUtils as u}from"@lowentry/utils";import{L as s}from"../LeMuiUtils-ca49f11d.js";import d from"../TextField/index.js";import"@mui/material";import"../style-inject.es-1f59c1d0.js";var m=["decimals","allowZero","allowNegative","value","onChange","onRenderValue","className","inputProps","children"],p=n.memo((function(p){var c=p.decimals,v=p.allowZero,f=p.allowNegative,g=p.value,h=p.onChange,w=p.onRenderValue,x=p.className,M=p.inputProps,b=p.children,C=e(p,m);void 0===v&&(v=!0),void 0===f&&(f=!0),c=i(c,2);var P=function(e){var a=o(s.purgePrependedHiddenChar(e));return f||(a=Math.abs(a)),a=a.toFixed(c),a=u.trimEnd(u.trimEnd(a,"0"),"."),v||"0"!==a||(a=""),a},j=n.useState(P(g)),y=a(j,2),E=y[0],N=y[1];n.useEffect((function(){N(P(g))}),[g]);var F=n.useCallback((function(e){var a=e.target.value,r=s.purgePrependedHiddenChar(a),l=0,n=r.includes("-");if(""!==(r=r.replace(",",".").replace(/[^0-9.]/g,""))){l=Math.abs(o(r)),f&&n&&(l=-l);var i=l.toFixed(c+1);i=i.substring(0,i.length-1),r=!r.includes(".")||c<=0?i.split(".")[0]:r.endsWith(".")?i.split(".")[0]+".":i.substring(0,i.length-Math.max(0,c-r.split(".")[1].length)),N(r)}if(h){0!==l&&(l=c>0?Math.round(l*Math.pow(10,c))/Math.pow(10,c):Math.round(l));var u=t(t({},e),{},{target:t(t({},e.target),{},{value:l,valueText:r,valueRaw:a})});h(u)}}),[h]);return l.createElement(l.Fragment,null,l.createElement(d,r({className:"lowentry-mui--numeric-textfield "+(null!=x?x:""),type:"text",inputProps:t({inputMode:"decimal"},null!=M?M:{}),value:w?w(E):E,onChange:F},C),b))}));export{p as default};
1
+ import{c as e,d as a,b as t,a as r}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import l from"react";import{LeRed as n}from"@lowentry/react-redux";import{INT_LAX_ANY as i,FLOAT_LAX as o,LeUtils as u}from"@lowentry/utils";import{L as s}from"../LeMuiUtils-c46ed1cc.js";import d from"../TextField/index.js";import"@mui/material";import"../style-inject.es-1f59c1d0.js";var m=["decimals","allowZero","allowNegative","value","onChange","onRenderValue","className","inputProps","children"],c=n.memo((function(c){var p=c.decimals,v=c.allowZero,g=c.allowNegative,h=c.value,f=c.onChange,w=c.onRenderValue,x=c.className,M=c.inputProps,b=c.children,C=e(c,m);void 0===v&&(v=!0),void 0===g&&(g=!0),p=i(p,2);var P=function(e){var a=o(s.purgePrependedHiddenChar(e));return g||(a=Math.abs(a)),a=a.toFixed(p),a=u.trimEnd(u.trimEnd(a,"0"),"."),v||"0"!==a||(a=""),a},j=n.useState(P(h)),y=a(j,2),E=y[0],N=y[1];n.useEffect((function(){N(P(h))}),[h]);var F=n.useCallback((function(e){var a=e.target.value,r=s.purgePrependedHiddenChar(a),l=0,n=r.includes("-");if(""!==(r=r.replace(",",".").replace(/[^0-9.]/g,""))){l=Math.abs(o(r)),g&&n&&(l=-l);var i=l.toFixed(p+1);i=i.substring(0,i.length-1),r=!r.includes(".")||p<=0?i.split(".")[0]:r.endsWith(".")?i.split(".")[0]+".":i.substring(0,i.length-Math.max(0,p-r.split(".")[1].length)),N(r)}if(f){0!==l&&(l=p>0?Math.round(l*Math.pow(10,p))/Math.pow(10,p):Math.round(l));var u=t(t({},e),{},{target:t(t({},e.target),{},{value:l,valueText:r,valueRaw:a})});f(u)}}),[f]);return l.createElement(l.Fragment,null,l.createElement(d,r({className:"lowentry-mui--numeric-textfield "+(null!=x?x:""),type:"text",inputProps:t({inputMode:"decimal"},null!=M?M:{}),value:w?w(E):E,onChange:F},C),b))}));export{c as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/widgets/NumericTextField.jsx"],"sourcesContent":["import React from 'react';\nimport {LeRed} from '@lowentry/react-redux';\nimport {LeUtils, FLOAT_LAX, INT_LAX_ANY} from '@lowentry/utils';\nimport {LeMuiUtils} from '../LeMuiUtils.js';\nimport TextField from './TextField.jsx';\n\n\nconst NumericTextField = LeRed.memo(({decimals, allowZero, allowNegative, value, onChange, onRenderValue, className, inputProps, children, ...props}) =>\n{\n\tif(typeof allowZero === 'undefined')\n\t{\n\t\tallowZero = true;\n\t}\n\tif(typeof allowNegative === 'undefined')\n\t{\n\t\tallowNegative = true;\n\t}\n\tdecimals = INT_LAX_ANY(decimals, 2);\n\t\n\t\n\tconst getVisualValue = (value) =>\n\t{\n\t\tlet text = FLOAT_LAX(LeMuiUtils.purgePrependedHiddenChar(value));\n\t\tif(!allowNegative)\n\t\t{\n\t\t\ttext = Math.abs(text);\n\t\t}\n\t\t\n\t\ttext = text.toFixed(decimals); // rounds it\n\t\ttext = LeUtils.trimEnd(LeUtils.trimEnd(text, '0'), '.');\n\t\tif(!allowZero && (text === '0'))\n\t\t{\n\t\t\ttext = '';\n\t\t}\n\t\treturn text;\n\t};\n\t\n\t\n\tconst [visualValue, setVisualValue] = LeRed.useState(getVisualValue(value));\n\t\n\tLeRed.useEffect(() =>\n\t{\n\t\tsetVisualValue(getVisualValue(value));\n\t}, [value]);\n\t\n\t\n\tconst onChanged = LeRed.useCallback((event) =>\n\t{\n\t\tconst originalTargetValue = event.target.value;\n\t\tconst targetValue = LeMuiUtils.purgePrependedHiddenChar(originalTargetValue);\n\t\t\n\t\tlet text = targetValue;\n\t\tlet val = 0;\n\t\t\n\t\t{// visual >>\n\t\t\tconst minus = text.includes('-');\n\t\t\ttext = text.replace(',', '.').replace(/[^0-9.]/g, '');\n\t\t\tif(text !== '')\n\t\t\t{\n\t\t\t\tval = Math.abs(FLOAT_LAX(text));\n\t\t\t\tif(allowNegative && minus)\n\t\t\t\t{\n\t\t\t\t\tval = -val;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet stringVal = val.toFixed(decimals + 1); // prevents rounding (by adding an extra digit and then cutting it off)\n\t\t\t\tstringVal = stringVal.substring(0, stringVal.length - 1);\n\t\t\t\t\n\t\t\t\tif(!text.includes('.') || (decimals <= 0))\n\t\t\t\t{\n\t\t\t\t\ttext = stringVal.split('.')[0];\n\t\t\t\t}\n\t\t\t\telse if(text.endsWith('.'))\n\t\t\t\t{\n\t\t\t\t\ttext = stringVal.split('.')[0] + '.';\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\ttext = stringVal.substring(0, stringVal.length - Math.max(0, decimals - text.split('.')[1].length));\n\t\t\t\t}\n\t\t\t\tsetVisualValue(text);\n\t\t\t}\n\t\t}// visual <<\n\t\t\n\t\tif(onChange)\n\t\t{\n\t\t\tif(val !== 0)\n\t\t\t{\n\t\t\t\tif(decimals > 0)\n\t\t\t\t{\n\t\t\t\t\tval = Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tval = Math.round(val);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconst newEvent = {\n\t\t\t\t...event,\n\t\t\t\ttarget:{\n\t\t\t\t\t...event.target,\n\t\t\t\t\tvalue: val,\n\t\t\t\t\tvalueText:text,\n\t\t\t\t\tvalueRaw: originalTargetValue,\n\t\t\t\t},\n\t\t\t};\n\t\t\tonChange(newEvent);\n\t\t}\n\t}, [onChange]);\n\t\n\t\n\treturn (<>\n\t\t<TextField className={'lowentry-mui--numeric-textfield ' + (className ?? '')} type=\"text\" inputProps={{inputMode:'decimal', ...(inputProps ?? {})}} value={!!onRenderValue ? onRenderValue(visualValue) : visualValue} onChange={onChanged} {...props}>{children}</TextField>\n\t</>);\n});\nexport default NumericTextField;\n"],"names":["NumericTextField","LeRed","memo","_ref","decimals","allowZero","allowNegative","value","onChange","onRenderValue","className","inputProps","children","props","_objectWithoutProperties","_excluded","INT_LAX_ANY","getVisualValue","text","FLOAT_LAX","LeMuiUtils","purgePrependedHiddenChar","Math","abs","toFixed","LeUtils","trimEnd","_LeRed$useState","useState","_LeRed$useState2","_slicedToArray","visualValue","setVisualValue","useEffect","onChanged","useCallback","event","originalTargetValue","target","val","minus","includes","replace","stringVal","substring","length","split","endsWith","max","round","pow","newEvent","_objectSpread","valueText","valueRaw","React","createElement","Fragment","TextField","_extends","type","inputMode"],"mappings":"qeAOMA,EAAmBC,EAAMC,MAAK,SAAAC,GACpC,IADsCC,EAAQD,EAARC,SAAUC,EAASF,EAATE,UAAWC,EAAaH,EAAbG,cAAeC,EAAKJ,EAALI,MAAOC,EAAQL,EAARK,SAAUC,EAAaN,EAAbM,cAAeC,EAASP,EAATO,UAAWC,EAAUR,EAAVQ,WAAYC,EAAQT,EAARS,SAAaC,EAAKC,EAAAX,EAAAY,QAE1H,IAAdV,IAETA,GAAY,QAEe,IAAlBC,IAETA,GAAgB,GAEjBF,EAAWY,EAAYZ,EAAU,GAGjC,IAAMa,EAAiB,SAACV,GAEvB,IAAIW,EAAOC,EAAUC,EAAWC,yBAAyBd,IAYzD,OAXID,IAEHY,EAAOI,KAAKC,IAAIL,IAGjBA,EAAOA,EAAKM,QAAQpB,GACpBc,EAAOO,EAAQC,QAAQD,EAAQC,QAAQR,EAAM,KAAM,KAC/Cb,GAAuB,MAATa,IAEjBA,EAAO,IAEDA,GAIRS,EAAsC1B,EAAM2B,SAASX,EAAeV,IAAOsB,EAAAC,EAAAH,EAAA,GAApEI,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GAElC5B,EAAMgC,WAAU,WAEfD,EAAef,EAAeV,GAC/B,GAAG,CAACA,IAGJ,IAAM2B,EAAYjC,EAAMkC,aAAY,SAACC,GAEpC,IAAMC,EAAsBD,EAAME,OAAO/B,MAGrCW,EAFgBE,EAAWC,yBAAyBgB,GAGpDE,EAAM,EAGHC,EAAQtB,EAAKuB,SAAS,KAE5B,GAAY,MADZvB,EAAOA,EAAKwB,QAAQ,IAAK,KAAKA,QAAQ,WAAY,KAElD,CACCH,EAAMjB,KAAKC,IAAIJ,EAAUD,IACtBZ,GAAiBkC,IAEnBD,GAAOA,GAGR,IAAII,EAAYJ,EAAIf,QAAQpB,EAAW,GACvCuC,EAAYA,EAAUC,UAAU,EAAGD,EAAUE,OAAS,GAIrD3B,GAFGA,EAAKuB,SAAS,MAASrC,GAAY,EAE/BuC,EAAUG,MAAM,KAAK,GAErB5B,EAAK6B,SAAS,KAEdJ,EAAUG,MAAM,KAAK,GAAK,IAI1BH,EAAUC,UAAU,EAAGD,EAAUE,OAASvB,KAAK0B,IAAI,EAAG5C,EAAWc,EAAK4B,MAAM,KAAK,GAAGD,SAE5Fb,EAAed,EAChB,CAGD,GAAGV,EACH,CACY,IAAR+B,IAIDA,EAFEnC,EAAW,EAEPkB,KAAK2B,MAAMV,EAAMjB,KAAK4B,IAAI,GAAI9C,IAAakB,KAAK4B,IAAI,GAAI9C,GAIxDkB,KAAK2B,MAAMV,IAInB,IAAMY,EAAQC,EAAAA,KACVhB,GAAK,GAAA,CACRE,OAAMc,EAAAA,EACFhB,CAAAA,EAAAA,EAAME,QAAM,GAAA,CACf/B,MAAUgC,EACVc,UAAUnC,EACVoC,SAAUjB,MAGZ7B,EAAS2C,EACV,CACD,GAAG,CAAC3C,IAGJ,OAAQ+C,EAAAC,cAAAD,EAAAE,SACPF,KAAAA,EAAAC,cAACE,EAASC,EAAA,CAACjD,UAAW,oCAAsCA,QAAAA,EAAa,IAAKkD,KAAK,OAAOjD,WAAUyC,EAAA,CAAGS,UAAU,WAAelD,QAAAA,EAAc,IAAMJ,MAASE,EAAgBA,EAAcsB,GAAeA,EAAavB,SAAU0B,GAAerB,GAAQD,GAE1P"}
@@ -1 +1,2 @@
1
- import{c as e}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import r from"react";import{LeRed as t}from"@lowentry/react-redux";import{L as l}from"../LeMuiUtils-ca49f11d.js";import n from"../NumericTextField/index.js";import"@lowentry/utils";import"../TextField/index.js";import"@mui/material";import"../style-inject.es-1f59c1d0.js";var o=["onRemove","onChange","onSelect","className","children"],a=t.memo((function(a){var i=a.onRemove,m=a.onChange,c=a.onSelect,s=a.className,u=a.children;e(a,o);var d=t.useCallback((function(e){""!==e.target.valueRaw?m&&m(e):i&&i(e)}),[i,m]),f=t.useCallback((function(e){l.onSelectEnsureMinimumOffset(1)(e),c&&c(e)}),[c]);return r.createElement(r.Fragment,null,r.createElement(n,{className:"lowentry-mui--removable-textfield lowentry-mui--removable-numeric-textfield "+(null!=s?s:""),onRenderValue:l.prependHiddenChar,onChange:d,onSelect:f},u))}));export{a as default};
1
+ import{c as e}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import r from"react";import{LeRed as t}from"@lowentry/react-redux";import{L as l}from"../LeMuiUtils-c46ed1cc.js";import n from"../NumericTextField/index.js";import"@lowentry/utils";import"../TextField/index.js";import"@mui/material";import"../style-inject.es-1f59c1d0.js";var o=["onRemove","onChange","onSelect","className","children"],a=t.memo((function(a){var i=a.onRemove,m=a.onChange,c=a.onSelect,s=a.className,u=a.children;e(a,o);var d=t.useCallback((function(e){""!==e.target.valueRaw?m&&m(e):i&&i(e)}),[i,m]),f=t.useCallback((function(e){l.onSelectEnsureMinimumOffset(1)(e),c&&c(e)}),[c]);return r.createElement(r.Fragment,null,r.createElement(n,{className:"lowentry-mui--removable-textfield lowentry-mui--removable-numeric-textfield "+(null!=s?s:""),onRenderValue:l.prependHiddenChar,onChange:d,onSelect:f},u))}));export{a as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/widgets/RemovableNumericTextField.jsx"],"sourcesContent":["import React from 'react';\nimport {LeRed} from '@lowentry/react-redux';\nimport {LeMuiUtils} from '../LeMuiUtils';\nimport NumericTextField from './NumericTextField.jsx';\n\n\nconst RemovableNumericTextField = LeRed.memo(({onRemove, onChange, onSelect, className, children, ...props}) =>\n{\n\tconst onChanged = LeRed.useCallback((event) =>\n\t{\n\t\tif(event.target.valueRaw === '')\n\t\t{\n\t\t\tif(onRemove)\n\t\t\t{\n\t\t\t\tonRemove(event);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(onChange)\n\t\t{\n\t\t\tonChange(event);\n\t\t}\n\t}, [onRemove, onChange]);\n\t\n\t\n\tconst onSelected = LeRed.useCallback((event) =>\n\t{\n\t\tLeMuiUtils.onSelectEnsureMinimumOffset(1)(event);\n\t\tif(onSelect)\n\t\t{\n\t\t\tonSelect(event);\n\t\t}\n\t}, [onSelect]);\n\t\n\t\n\treturn (<>\n\t\t<NumericTextField className={'lowentry-mui--removable-textfield lowentry-mui--removable-numeric-textfield ' + (className ?? '')} onRenderValue={LeMuiUtils.prependHiddenChar} onChange={onChanged} onSelect={onSelected}>{children}</NumericTextField>\n\t</>);\n});\nexport default RemovableNumericTextField;\n"],"names":["RemovableNumericTextField","LeRed","memo","_ref","onRemove","onChange","onSelect","className","children","_objectWithoutProperties","_excluded","onChanged","useCallback","event","target","valueRaw","onSelected","LeMuiUtils","onSelectEnsureMinimumOffset","React","createElement","Fragment","NumericTextField","onRenderValue","prependHiddenChar"],"mappings":"6YAMMA,EAA4BC,EAAMC,MAAK,SAAAC,GAC7C,IAD+CC,EAAQD,EAARC,SAAUC,EAAQF,EAARE,SAAUC,EAAQH,EAARG,SAAUC,EAASJ,EAATI,UAAWC,EAAQL,EAARK,SAAkBC,EAAAN,EAAAO,GAEzG,IAAMC,EAAYV,EAAMW,aAAY,SAACC,GAEP,KAA1BA,EAAMC,OAAOC,SASbV,GAEFA,EAASQ,GATNT,GAEFA,EAASS,EASZ,GAAG,CAACT,EAAUC,IAGRW,EAAaf,EAAMW,aAAY,SAACC,GAErCI,EAAWC,4BAA4B,EAAvCD,CAA0CJ,GACvCP,GAEFA,EAASO,EAEX,GAAG,CAACP,IAGJ,OAAQa,EAAAC,cAAAD,EAAAE,SAAA,KACPF,EAAAC,cAACE,EAAgB,CAACf,UAAW,gFAAkFA,QAAAA,EAAa,IAAKgB,cAAeN,EAAWO,kBAAmBnB,SAAUM,EAAWL,SAAUU,GAAaR,GAE5N"}
@@ -1 +1,2 @@
1
- import{c as e,b as a,a as t}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import r from"react";import{LeRed as l}from"@lowentry/react-redux";import{L as n}from"../LeMuiUtils-ca49f11d.js";import o from"../TextField/index.js";import"@lowentry/utils";import"@mui/material";import"../style-inject.es-1f59c1d0.js";var i=["className","value","onRemove","onChange","onSelect","children"],m=l.memo((function(m){var s=m.className,u=m.value,c=m.onRemove,d=m.onChange,f=m.onSelect,p=m.children,v=e(m,i),g=l.useCallback((function(e){if(""!==e.target.value){if(d){var t=a(a({},e),{},{target:a(a({},e.target),{},{value:n.purgePrependedHiddenChar(e.target.value)})});d(t)}}else c&&c(e)}),[c,d]),h=l.useCallback((function(e){n.onSelectEnsureMinimumOffset(1)(e),f&&f(e)}),[f]);return r.createElement(r.Fragment,null,r.createElement(o,t({className:"lowentry-mui--removable-textfield "+(null!=s?s:""),value:n.prependHiddenChar(u),onChange:g,onSelect:h},v),p))}));export{m as default};
1
+ import{c as e,b as a,a as t}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import r from"react";import{LeRed as l}from"@lowentry/react-redux";import{L as n}from"../LeMuiUtils-c46ed1cc.js";import o from"../TextField/index.js";import"@lowentry/utils";import"@mui/material";import"../style-inject.es-1f59c1d0.js";var i=["className","value","onRemove","onChange","onSelect","children"],m=l.memo((function(m){var c=m.className,s=m.value,u=m.onRemove,d=m.onChange,f=m.onSelect,p=m.children,v=e(m,i),g=l.useCallback((function(e){if(""!==e.target.value){if(d){var t=a(a({},e),{},{target:a(a({},e.target),{},{value:n.purgePrependedHiddenChar(e.target.value)})});d(t)}}else u&&u(e)}),[u,d]),h=l.useCallback((function(e){n.onSelectEnsureMinimumOffset(1)(e),f&&f(e)}),[f]);return r.createElement(r.Fragment,null,r.createElement(o,t({className:"lowentry-mui--removable-textfield "+(null!=c?c:""),value:n.prependHiddenChar(s),onChange:g,onSelect:h},v),p))}));export{m as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/widgets/RemovableTextField.jsx"],"sourcesContent":["import React from 'react';\nimport {LeRed} from '@lowentry/react-redux';\nimport {LeMuiUtils} from '../LeMuiUtils';\nimport TextField from './TextField.jsx';\n\n\nconst RemovableTextField = LeRed.memo(({className, value, onRemove, onChange, onSelect, children, ...props}) =>\n{\n\tconst onChanged = LeRed.useCallback((event) =>\n\t{\n\t\tif(event.target.value === '')\n\t\t{\n\t\t\tif(onRemove)\n\t\t\t{\n\t\t\t\tonRemove(event);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(onChange)\n\t\t{\n\t\t\tconst newEvent = {\n\t\t\t\t...event,\n\t\t\t\ttarget:{\n\t\t\t\t\t...event.target,\n\t\t\t\t\tvalue:LeMuiUtils.purgePrependedHiddenChar(event.target.value),\n\t\t\t\t},\n\t\t\t};\n\t\t\tonChange(newEvent);\n\t\t}\n\t}, [onRemove, onChange]);\n\t\n\t\n\tconst onSelected = LeRed.useCallback((event) =>\n\t{\n\t\tLeMuiUtils.onSelectEnsureMinimumOffset(1)(event);\n\t\tif(onSelect)\n\t\t{\n\t\t\tonSelect(event);\n\t\t}\n\t}, [onSelect]);\n\t\n\t\n\treturn (<>\n\t\t<TextField className={'lowentry-mui--removable-textfield ' + (className ?? '')} value={LeMuiUtils.prependHiddenChar(value)} onChange={onChanged} onSelect={onSelected} {...props}>{children}</TextField>\n\t</>);\n});\nexport default RemovableTextField;\n"],"names":["RemovableTextField","LeRed","memo","_ref","className","value","onRemove","onChange","onSelect","children","props","_objectWithoutProperties","_excluded","onChanged","useCallback","event","target","newEvent","_objectSpread","LeMuiUtils","purgePrependedHiddenChar","onSelected","onSelectEnsureMinimumOffset","React","createElement","Fragment","TextField","_extends","prependHiddenChar"],"mappings":"8XAMMA,EAAqBC,EAAMC,MAAK,SAAAC,GACtC,IADwCC,EAASD,EAATC,UAAWC,EAAKF,EAALE,MAAOC,EAAQH,EAARG,SAAUC,EAAQJ,EAARI,SAAUC,EAAQL,EAARK,SAAUC,EAAQN,EAARM,SAAaC,EAAKC,EAAAR,EAAAS,GAEnGC,EAAYZ,EAAMa,aAAY,SAACC,GAEpC,GAA0B,KAAvBA,EAAMC,OAAOX,OAShB,GAAGE,EACH,CACC,IAAMU,EAAQC,EAAAA,KACVH,GAAK,GAAA,CACRC,OAAME,EAAAA,EACFH,CAAAA,EAAAA,EAAMC,QAAM,GAAA,CACfX,MAAMc,EAAWC,yBAAyBL,EAAMC,OAAOX,WAGzDE,EAASU,EACV,OAjBIX,GAEFA,EAASS,EAgBZ,GAAG,CAACT,EAAUC,IAGRc,EAAapB,EAAMa,aAAY,SAACC,GAErCI,EAAWG,4BAA4B,EAAvCH,CAA0CJ,GACvCP,GAEFA,EAASO,EAEX,GAAG,CAACP,IAGJ,OAAQe,EAAAC,cAAAD,EAAAE,SACPF,KAAAA,EAAAC,cAACE,EAASC,EAAA,CAACvB,UAAW,sCAAwCA,QAAAA,EAAa,IAAKC,MAAOc,EAAWS,kBAAkBvB,GAAQE,SAAUM,EAAWL,SAAUa,GAAgBX,GAAQD,GAErL"}
@@ -1 +1,2 @@
1
1
  import{c as e}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import t from"react";import{LeRed as r}from"@lowentry/react-redux";import{Stack as l}from"@mui/material";var a=["onSubmit","disabled","sx","children"],n=r.memo((function(n){var m=n.onSubmit,o=n.disabled,i=n.sx,c=n.children,u=e(n,a),f=r.useCallback((function(e){try{e.preventDefault()}catch(e){}o&&("function"!=typeof o||o())||m&&m(e)}),[m,o]);return t.createElement(t.Fragment,null,t.createElement("form",{style:null!=i?i:{},onSubmit:f},t.createElement(l,u,c)))}));export{n as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/widgets/Submittable.jsx"],"sourcesContent":["import React from 'react';\nimport {LeRed} from '@lowentry/react-redux';\nimport {Stack} from '@mui/material';\n\n\nconst Submittable = LeRed.memo(({onSubmit, disabled, sx, children, ...props}) =>\n{\n\tconst handleSubmit = LeRed.useCallback((event) =>\n\t{\n\t\ttry\n\t\t{\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tcatch(e)\n\t\t{\n\t\t}\n\t\t\n\t\tif(disabled)\n\t\t{\n\t\t\tif(!(typeof disabled === 'function') || disabled())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(onSubmit)\n\t\t{\n\t\t\tonSubmit(event);\n\t\t}\n\t}, [onSubmit, disabled]);\n\t\n\t\n\treturn (<>\n\t\t<form style={sx ?? {}} onSubmit={handleSubmit}>\n\t\t\t<Stack {...props}>\n\t\t\t\t{children}\n\t\t\t</Stack>\n\t\t</form>\n\t</>);\n});\nexport default Submittable;\n"],"names":["Submittable","LeRed","memo","_ref","onSubmit","disabled","sx","children","props","_objectWithoutProperties","_excluded","handleSubmit","useCallback","event","preventDefault","e","React","createElement","Fragment","style","Stack"],"mappings":"oNAKMA,EAAcC,EAAMC,MAAK,SAAAC,GAC/B,IADiCC,EAAQD,EAARC,SAAUC,EAAQF,EAARE,SAAUC,EAAEH,EAAFG,GAAIC,EAAQJ,EAARI,SAAaC,EAAKC,EAAAN,EAAAO,GAEpEC,EAAeV,EAAMW,aAAY,SAACC,GAEvC,IAECA,EAAMC,gBACP,CACA,MAAMC,GAEN,CAEGV,IAEuB,mBAAbA,GAA4BA,MAMtCD,GAEFA,EAASS,EAEX,GAAG,CAACT,EAAUC,IAGd,OAAQW,EAAAC,cAAAD,EAAAE,SAAA,KACPF,EAAAC,cAAA,OAAA,CAAME,MAAOb,QAAAA,EAAM,CAAG,EAACF,SAAUO,GAChCK,EAAAC,cAACG,EAAUZ,EACTD,IAIL"}
@@ -1 +1,2 @@
1
1
  import{c as e,a as t}from"../_rollupPluginBabelHelpers-c0e6c03a.js";import r from"react";import{LeRed as a}from"@lowentry/react-redux";import{TextField as l}from"@mui/material";import{s as o}from"../style-inject.es-1f59c1d0.js";o(".lowentry-mui--textfield{cursor:auto}");var c=["className","onClick","children"],m=a.memo((function(o){var m=o.className,i=o.onClick,n=o.children,s=e(o,c),u=a.useCallback((function(e){try{e.stopPropagation()}catch(e){}i&&i(e)}),[i]);return r.createElement(r.Fragment,null,r.createElement(l,t({className:"lowentry-mui--textfield "+(null!=m?m:""),autoComplete:"off",onClick:u},s),n))}));export{m as default};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/widgets/TextField.jsx"],"sourcesContent":["import React from 'react';\nimport {LeRed} from '@lowentry/react-redux';\nimport {TextField as MuiTextField} from '@mui/material';\nimport './TextField.css';\n\n\nconst TextField = LeRed.memo(({className, onClick, children, ...props}) =>\n{\n\tconst onClicked = LeRed.useCallback((event) =>\n\t{\n\t\ttry\n\t\t{\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tcatch(e)\n\t\t{\n\t\t}\n\t\t\n\t\tif(onClick)\n\t\t{\n\t\t\tonClick(event);\n\t\t}\n\t}, [onClick]);\n\t\n\t\n\treturn (<>\n\t\t<MuiTextField className={'lowentry-mui--textfield ' + (className ?? '')} autoComplete=\"off\" onClick={onClicked} {...props}>{children}</MuiTextField>\n\t</>);\n});\nexport default TextField;\n"],"names":["TextField","LeRed","memo","_ref","className","onClick","children","props","_objectWithoutProperties","_excluded","onClicked","useCallback","event","stopPropagation","e","React","createElement","Fragment","MuiTextField","_extends","autoComplete"],"mappings":"wTAMMA,EAAYC,EAAMC,MAAK,SAAAC,GAC7B,IAD+BC,EAASD,EAATC,UAAWC,EAAOF,EAAPE,QAASC,EAAQH,EAARG,SAAaC,EAAKC,EAAAL,EAAAM,GAE9DC,EAAYT,EAAMU,aAAY,SAACC,GAEpC,IAECA,EAAMC,iBACP,CACA,MAAMC,GAEN,CAEGT,GAEFA,EAAQO,EAEV,GAAG,CAACP,IAGJ,OAAQU,EAAAC,cAAAD,EAAAE,SACPF,KAAAA,EAAAC,cAACE,EAAYC,EAAA,CAACf,UAAW,4BAA8BA,QAAAA,EAAa,IAAKgB,aAAa,MAAMf,QAASK,GAAeH,GAAQD,GAE9H"}
@@ -1 +1,2 @@
1
1
  function r(r,t){(null==t||t>r.length)&&(t=r.length);for(var e=0,n=Array(t);e<t;e++)n[e]=r[e];return n}function t(r,t){var e="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!e){if(Array.isArray(r)||(e=l(r))||t&&r&&"number"==typeof r.length){e&&(r=e);var n=0,o=function(){};return{s:o,n:function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(r){throw r},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){e=e.call(r)},n:function(){var r=e.next();return a=r.done,r},e:function(r){u=!0,i=r},f:function(){try{a||null==e.return||e.return()}finally{if(u)throw i}}}}function e(r,t,e){return(t=function(r){var t=function(r,t){if("object"!=typeof r||!r)return r;var e=r[Symbol.toPrimitive];if(void 0!==e){var n=e.call(r,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(r)}(r,"string");return"symbol"==typeof t?t:t+""}(t))in r?Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[t]=e,r}function n(){return n=Object.assign?Object.assign.bind():function(r){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var n in e)({}).hasOwnProperty.call(e,n)&&(r[n]=e[n])}return r},n.apply(null,arguments)}function o(r,t){var e=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.push.apply(e,n)}return e}function i(r){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){e(r,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(n,t))}))}return r}function a(r,t){if(null==r)return{};var e,n,o=function(r,t){if(null==r)return{};var e={};for(var n in r)if({}.hasOwnProperty.call(r,n)){if(t.indexOf(n)>=0)continue;e[n]=r[n]}return e}(r,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(r);for(n=0;n<i.length;n++)e=i[n],t.indexOf(e)>=0||{}.propertyIsEnumerable.call(r,e)&&(o[e]=r[e])}return o}function u(r,t){return function(r){if(Array.isArray(r))return r}(r)||function(r,t){var e=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=e){var n,o,i,a,u=[],l=!0,f=!1;try{if(i=(e=e.call(r)).next,0===t){if(Object(e)!==e)return;l=!1}else for(;!(l=(n=i.call(e)).done)&&(u.push(n.value),u.length!==t);l=!0);}catch(r){f=!0,o=r}finally{try{if(!l&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(f)throw o}}return u}}(r,t)||l(r,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(t,e){if(t){if("string"==typeof t)return r(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}export{t as _,n as a,i as b,a as c,u as d};
2
+ //# sourceMappingURL=_rollupPluginBabelHelpers-c0e6c03a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_rollupPluginBabelHelpers-c0e6c03a.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/index.js CHANGED
@@ -1 +1,2 @@
1
- export{default as DatePicker}from"./DatePicker/index.js";export{default as Dialog}from"./Dialog/index.js";export{L as LoadingSpinner,a as LoadingSpinnerWidget}from"./LoadingSpinner-cbb3bd6d.js";export{default as MenuButton}from"./MenuButton/index.js";export{default as MuiRoot}from"./MuiRoot/index.js";export{default as NumericTextField}from"./NumericTextField/index.js";export{default as RemovableNumericTextField}from"./RemovableNumericTextField/index.js";export{default as RemovableTextField}from"./RemovableTextField/index.js";export{default as Submittable}from"./Submittable/index.js";export{default as TextField}from"./TextField/index.js";import"./_rollupPluginBabelHelpers-c0e6c03a.js";import"react";import"@lowentry/react-redux";import"@lowentry/utils";import"dayjs";import"@mui/material";import"@mui/x-date-pickers";import"@mui/icons-material/ArrowBackIosNew";import"@mui/icons-material/ArrowForwardIos";import"./style-inject.es-1f59c1d0.js";import"@mui/x-date-pickers/AdapterDayjs";import"./LeMuiUtils-ca49f11d.js";
1
+ export{default as DatePicker}from"./DatePicker/index.js";export{default as Dialog}from"./Dialog/index.js";export{L as LoadingSpinner,a as LoadingSpinnerWidget}from"./LoadingSpinner-2e9afd52.js";export{default as MenuButton}from"./MenuButton/index.js";export{default as MuiRoot}from"./MuiRoot/index.js";export{default as NumericTextField}from"./NumericTextField/index.js";export{default as RemovableNumericTextField}from"./RemovableNumericTextField/index.js";export{default as RemovableTextField}from"./RemovableTextField/index.js";export{default as Submittable}from"./Submittable/index.js";export{default as TextField}from"./TextField/index.js";import"./_rollupPluginBabelHelpers-c0e6c03a.js";import"react";import"@lowentry/react-redux";import"@lowentry/utils";import"dayjs";import"@mui/material";import"@mui/x-date-pickers";import"@mui/icons-material/ArrowBackIosNew";import"@mui/icons-material/ArrowForwardIos";import"./style-inject.es-1f59c1d0.js";import"@mui/x-date-pickers/AdapterDayjs";import"./LeMuiUtils-c46ed1cc.js";
2
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lowentry/mui",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Provides utilities for Material UI.",
@@ -20,7 +20,7 @@
20
20
  },
21
21
  "scripts": {
22
22
  "build": "npm exec -- rollup -c",
23
- "prepublishOnly": "mv dist/* ./ && rm -r dist",
23
+ "prepublishOnly": "rm -r src && mv dist/* ./ && rm -r dist",
24
24
  "test": ""
25
25
  },
26
26
  "peerDependencies": {
@@ -43,9 +43,9 @@
43
43
  "@rollup/plugin-node-resolve": "^15.2.3",
44
44
  "@rollup/plugin-terser": "^0.4.4",
45
45
  "cssnano": "^7.0.2",
46
+ "fs-extra": "^11.2.0",
46
47
  "rollup": "^2.79.1",
47
48
  "rollup-plugin-babel": "^4.4.0",
48
- "rollup-plugin-delete": "^2.0.0",
49
49
  "rollup-plugin-peer-deps-external": "^2.2.4",
50
50
  "rollup-plugin-postcss": "^4.0.2"
51
51
  }
@@ -0,0 +1,52 @@
1
+ import {LeUtils, STRING, INT_LAX} from '@lowentry/utils';
2
+
3
+
4
+ const HIDDEN_CHAR = '\u200B';
5
+
6
+
7
+ export const LeMuiUtils = {
8
+ onSelectEnsureMinimumOffset:
9
+ (charactersCount) =>
10
+ {
11
+ charactersCount = Math.max(0, INT_LAX(charactersCount));
12
+ if(charactersCount <= 0)
13
+ {
14
+ return () =>
15
+ {
16
+ };
17
+ }
18
+
19
+ return (event) =>
20
+ {
21
+ if(event && event.target)
22
+ {
23
+ if(event.target.selectionEnd < charactersCount)
24
+ {
25
+ event.target.setSelectionRange(charactersCount, charactersCount);
26
+ }
27
+ else if(event.target.selectionStart < charactersCount)
28
+ {
29
+ event.target.setSelectionRange(charactersCount, event.target.selectionEnd);
30
+ }
31
+ }
32
+ };
33
+ },
34
+
35
+ prependHiddenChar:
36
+ (string) =>
37
+ {
38
+ string = STRING(string);
39
+ if(string.startsWith(HIDDEN_CHAR))
40
+ {
41
+ return string;
42
+ }
43
+ return HIDDEN_CHAR + string;
44
+ },
45
+
46
+ purgePrependedHiddenChar:
47
+ (string) =>
48
+ {
49
+ string = STRING(string);
50
+ return LeUtils.trimStart(string, ['\u200B', ' ', '\t', '\r', '\n']);
51
+ },
52
+ };
package/src/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export { default as DatePicker } from './widgets/DatePicker';
2
+ export { default as Dialog } from './widgets/Dialog';
3
+ export { default as LoadingSpinner } from './widgets/LoadingSpinner';
4
+ export { default as LoadingSpinnerWidget } from './widgets/LoadingSpinnerWidget';
5
+ export { default as MenuButton } from './widgets/MenuButton';
6
+ export { default as MuiRoot } from './widgets/MuiRoot';
7
+ export { default as NumericTextField } from './widgets/NumericTextField';
8
+ export { default as RemovableNumericTextField } from './widgets/RemovableNumericTextField';
9
+ export { default as RemovableTextField } from './widgets/RemovableTextField';
10
+ export { default as Submittable } from './widgets/Submittable';
11
+ export { default as TextField } from './widgets/TextField';
@@ -0,0 +1,32 @@
1
+ .lowentry-mui--date-picker
2
+ {
3
+ padding: 0.5rem;
4
+ }
5
+
6
+ .lowentry-mui--date-picker .lowentry-mui--date-picker--arrow-button
7
+ {
8
+ min-width: 0;
9
+ padding: 6px 12px;
10
+ }
11
+
12
+ .lowentry-mui--date-picker .lowentry-mui--date-picker--textfield
13
+ {
14
+ max-width: 150px;
15
+ cursor: pointer !important;
16
+ }
17
+
18
+ .lowentry-mui--date-picker .lowentry-mui--date-picker--textfield .MuiInputBase-input
19
+ {
20
+ text-align: center;
21
+ padding: 10px 0;
22
+ }
23
+
24
+ .lowentry-mui--date-picker .lowentry-mui--date-picker--textfield .MuiOutlinedInput-notchedOutline
25
+ {
26
+ border: 0 !important;
27
+ }
28
+
29
+ .lowentry-mui--date-picker .lowentry-mui--date-picker--textfield *
30
+ {
31
+ cursor: pointer !important;
32
+ }
@@ -0,0 +1,112 @@
1
+ import React from 'react';
2
+ import {LeRed} from '@lowentry/react-redux';
3
+ import {IS_ARRAY} from '@lowentry/utils';
4
+ import Dayjs from 'dayjs';
5
+ import {Button, Stack} from '@mui/material';
6
+ import {DatePicker as MuiDatePicker} from '@mui/x-date-pickers';
7
+ import TextField from './TextField.jsx';
8
+ import ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew';
9
+ import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';
10
+ import './DatePicker.css';
11
+
12
+
13
+ const DatePickerTextField = LeRed.memo((props) =>
14
+ {
15
+ const onClick = LeRed.useCallback(() =>
16
+ {
17
+ if(props?.ownerState?.open)
18
+ {
19
+ return null;
20
+ }
21
+ let propsLoop = props?.InputProps?.endAdornment?.props;
22
+ while(propsLoop)
23
+ {
24
+ if(propsLoop.onClick)
25
+ {
26
+ return propsLoop.onClick;
27
+ }
28
+ if(propsLoop?.children)
29
+ {
30
+ propsLoop = propsLoop.children;
31
+ continue;
32
+ }
33
+ if(IS_ARRAY(propsLoop))
34
+ {
35
+ let continueLoop = false;
36
+ for(const propsLoopItem of propsLoop)
37
+ {
38
+ if(propsLoopItem?.props)
39
+ {
40
+ propsLoop = propsLoopItem.props;
41
+ continueLoop = true;
42
+ }
43
+ }
44
+ if(continueLoop)
45
+ {
46
+ continue;
47
+ }
48
+ }
49
+ propsLoop = propsLoop?.props;
50
+ }
51
+ return null;
52
+ }, [props?.ownerState?.open, props?.InputProps?.endAdornment?.props]);
53
+
54
+
55
+ const onSelect = LeRed.useCallback((event) =>
56
+ {
57
+ event.target.selectionStart = event.target.selectionEnd;
58
+ event.preventDefault();
59
+ }, []);
60
+
61
+
62
+ return (<>
63
+ <Button variant="outlined" onClick={onClick}>
64
+ <TextField {...props} className={'lowentry-mui--date-picker--textfield ' + (props.className ?? '')} variant="outlined" value={Dayjs(props.value).format(props?.dateFormat)} InputProps={{...(props.InputProps ?? {}), readOnly:true, endAdornment:null, onSelect:onSelect, onSelectCapture:onSelect, onMouseDown:onSelect, onTouchStart:onSelect, onTouchMove:onSelect}}/>
65
+ </Button>
66
+ </>);
67
+ });
68
+
69
+
70
+ const DatePicker = LeRed.memo(({value, dateFormat, onChange, className, children, ...props}) =>
71
+ {
72
+ if(!dateFormat)
73
+ {
74
+ dateFormat = 'ddd, D MMM YYYY';
75
+ }
76
+
77
+ const [datepickerOpen, openDatepicker, closeDatepicker] = LeRed.useHistoryState(false);
78
+
79
+
80
+ const onChanged = LeRed.useCallback((...args) =>
81
+ {
82
+ if(onChange)
83
+ {
84
+ onChange(...args);
85
+ }
86
+ }, [onChange]);
87
+
88
+
89
+ return (<>
90
+ <Stack className={'lowentry-mui--date-picker ' + (className ?? '')} direction="row" justifyContent="space-between" spacing={1} {...props}>
91
+ <Button className="lowentry-mui--date-picker--arrow-button" variant="text" color="primary" onClick={() => onChanged(Dayjs(value).subtract(1, 'day'))}><ArrowBackIosNewIcon/></Button>
92
+ <MuiDatePicker
93
+ open={datepickerOpen}
94
+ onOpen={openDatepicker}
95
+ onClose={closeDatepicker}
96
+ showDaysOutsideCurrentMonth={true}
97
+ views={['day']}
98
+ format="YYYY-MM-DD"
99
+ label=""
100
+ isRequired={true}
101
+ value={value}
102
+ onChange={onChanged}
103
+ slots={{
104
+ textField:(props) => LeRed.createElement(DatePickerTextField, {dateFormat, ...props}),
105
+ toolbar: (props) => null,
106
+ }}
107
+ />
108
+ <Button className="lowentry-mui--date-picker--arrow-button" variant="text" color="primary" onClick={() => onChanged(Dayjs(value).add(1, 'day'))}><ArrowForwardIosIcon/></Button>
109
+ </Stack>
110
+ </>);
111
+ });
112
+ export default DatePicker;
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import {LeRed} from '@lowentry/react-redux';
3
+ import {STRING} from '@lowentry/utils';
4
+ import {Dialog as MuiDialog} from '@mui/material';
5
+
6
+
7
+ const Dialog = LeRed.memo(({onClose, children, ...props}) =>
8
+ {
9
+ const onClosed = LeRed.useCallback((event, reason) =>
10
+ {
11
+ if(!STRING(reason).toLowerCase().includes('escape'))
12
+ {
13
+ // prevent closing when clicking on the backdrop, only allow escape-key closing
14
+ return;
15
+ }
16
+
17
+ if(onClose)
18
+ {
19
+ onClose(event, reason);
20
+ }
21
+ }, [onClose]);
22
+
23
+
24
+ return (<>
25
+ <MuiDialog onClose={onClosed} {...props}>
26
+ {children}
27
+ </MuiDialog>
28
+ </>);
29
+ });
30
+ export default Dialog;
@@ -0,0 +1,9 @@
1
+ .lowentry-mui--loading-spinner
2
+ {
3
+ color: rgba(255, 255, 255, 0.04);
4
+ }
5
+
6
+ .lowentry-mui--loading-spinner.lowentry-mui--loading-spinner--transparent
7
+ {
8
+ background: rgba(0, 0, 0, 0);
9
+ }
@@ -0,0 +1,50 @@
1
+ import React from 'react';
2
+ import {LeRed} from '@lowentry/react-redux';
3
+ import {Backdrop, CircularProgress} from '@mui/material';
4
+ import './LoadingSpinner.css';
5
+
6
+
7
+ let loadingSpinnerCount = {};
8
+ let loadingSpinnerCountNonTransparent = 0;
9
+
10
+ const LoadingSpinnerGrab = ({type}) =>
11
+ {
12
+ loadingSpinnerCount[type] = (loadingSpinnerCount[type] || 0) + 1;
13
+ if(loadingSpinnerCount[type] === 1)
14
+ {
15
+ LeRed.trigger('lowentry-mui--loading-spinner--' + type);
16
+ }
17
+ };
18
+
19
+ const LoadingSpinnerRelease = ({type}) =>
20
+ {
21
+ loadingSpinnerCount[type] = (loadingSpinnerCount[type] || 1) - 1;
22
+ if(loadingSpinnerCount[type] === 0)
23
+ {
24
+ LeRed.trigger('lowentry-mui--loading-spinner--' + type);
25
+ }
26
+ };
27
+
28
+
29
+ export const LoadingSpinner = LeRed.memo(({type}) =>
30
+ {
31
+ LeRed.useEffect(() =>
32
+ {
33
+ LoadingSpinnerGrab({type});
34
+ return () => LoadingSpinnerRelease({type});
35
+ }, []);
36
+
37
+ return null;
38
+ });
39
+
40
+
41
+ export const LoadingSpinnerWidget = LeRed.memo(({type, className, sx, children, ...props}) =>
42
+ {
43
+ LeRed.useTriggerable('lowentry-mui--loading-spinner--' + type);
44
+
45
+ return (<>
46
+ <Backdrop className={'lowentry-mui--loading-spinner lowentry-mui--loading-spinner--' + type + ' ' + (className ?? '')} sx={{zIndex:(theme) => theme.zIndex.drawer + 1, ...(sx ?? {})}} open={(loadingSpinnerCount[type] || 0) > 0} {...props}>
47
+ <CircularProgress color="inherit" size="min(120px,30vw)"/>
48
+ </Backdrop>
49
+ </>);
50
+ });
@@ -0,0 +1 @@
1
+ export {LoadingSpinner as default} from './LoadingSpinner/LoadingSpinner.jsx';
@@ -0,0 +1 @@
1
+ export {LoadingSpinnerWidget as default} from './LoadingSpinner/LoadingSpinner.jsx';
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import {LeRed} from '@lowentry/react-redux';
3
+ import {LeUtils, ARRAY} from '@lowentry/utils';
4
+ import {Button, Menu} from '@mui/material';
5
+
6
+
7
+ const MenuButton = LeRed.memo(({icon, className, ref, onClick, onClose, children, ...props}) =>
8
+ {
9
+ const buttonRef = LeRed.useRef();
10
+ const [open, setOpen] = LeRed.useState(false);
11
+
12
+
13
+ const onClicked = LeRed.useCallback((event) =>
14
+ {
15
+ setOpen(true);
16
+
17
+ if(onClick)
18
+ {
19
+ onClick(event);
20
+ }
21
+ }, [onClick]);
22
+
23
+
24
+ const onClosed = LeRed.useCallback((event) =>
25
+ {
26
+ setOpen(false);
27
+
28
+ if(onClose)
29
+ {
30
+ onClose(event);
31
+ }
32
+ }, [onClose]);
33
+
34
+
35
+ return (<>
36
+ <Button ref={LeRed.mergeRefs(buttonRef, ref)} className={'lowentry-mui--menu-button allow-mobile-hover ' + (className ?? '')} variant="text" color="primary" onClick={onClicked} {...props}>{icon}</Button>
37
+ <Menu anchorEl={buttonRef.current} open={open} onClose={onClosed}>
38
+ {LeUtils.mapToArray(ARRAY(children), (child, index) => !!child && LeRed.cloneElement(child, {
39
+ key: index,
40
+ onClick: () =>
41
+ {
42
+ setOpen(false);
43
+ if(child?.props?.onClick)
44
+ {
45
+ child.props.onClick();
46
+ }
47
+ },
48
+ disabled:(typeof child?.props?.disabled !== 'undefined') ? child.props.disabled : !child?.props?.onClick,
49
+ }))}
50
+ </Menu>
51
+ </>);
52
+ });
53
+ export default MenuButton;
@@ -0,0 +1,13 @@
1
+ .lowentry-mui--mui-root
2
+ {
3
+ width: 100%;
4
+ min-height: 100dvh;
5
+ }
6
+
7
+ @media not (hover: hover), not (pointer: fine)
8
+ {
9
+ .lowentry-mui--mui-root .MuiButtonBase-root:not(.allow-mobile-hover):hover
10
+ {
11
+ background-color: rgba(255, 255, 255, 0) !important;
12
+ }
13
+ }
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import {LeRed} from '@lowentry/react-redux';
3
+ import {CssBaseline, ThemeProvider} from '@mui/material';
4
+ import {LocalizationProvider} from '@mui/x-date-pickers';
5
+ import {AdapterDayjs} from '@mui/x-date-pickers/AdapterDayjs';
6
+ import './MuiRoot.css';
7
+
8
+
9
+ const MuiRoot = LeRed.memo(({theme, className, children, ...props}) =>
10
+ {
11
+ return (<>
12
+ <CssBaseline/>
13
+ <ThemeProvider theme={theme}>
14
+ <LocalizationProvider dateAdapter={AdapterDayjs}>
15
+ <div className={'lowentry-mui--mui-root ' + (className ?? '')} {...props}>
16
+ {children}
17
+ </div>
18
+ </LocalizationProvider>
19
+ </ThemeProvider>
20
+ </>);
21
+ });
22
+ export default MuiRoot;
@@ -0,0 +1,117 @@
1
+ import React from 'react';
2
+ import {LeRed} from '@lowentry/react-redux';
3
+ import {LeUtils, FLOAT_LAX, INT_LAX_ANY} from '@lowentry/utils';
4
+ import {LeMuiUtils} from '../LeMuiUtils.js';
5
+ import TextField from './TextField.jsx';
6
+
7
+
8
+ const NumericTextField = LeRed.memo(({decimals, allowZero, allowNegative, value, onChange, onRenderValue, className, inputProps, children, ...props}) =>
9
+ {
10
+ if(typeof allowZero === 'undefined')
11
+ {
12
+ allowZero = true;
13
+ }
14
+ if(typeof allowNegative === 'undefined')
15
+ {
16
+ allowNegative = true;
17
+ }
18
+ decimals = INT_LAX_ANY(decimals, 2);
19
+
20
+
21
+ const getVisualValue = (value) =>
22
+ {
23
+ let text = FLOAT_LAX(LeMuiUtils.purgePrependedHiddenChar(value));
24
+ if(!allowNegative)
25
+ {
26
+ text = Math.abs(text);
27
+ }
28
+
29
+ text = text.toFixed(decimals); // rounds it
30
+ text = LeUtils.trimEnd(LeUtils.trimEnd(text, '0'), '.');
31
+ if(!allowZero && (text === '0'))
32
+ {
33
+ text = '';
34
+ }
35
+ return text;
36
+ };
37
+
38
+
39
+ const [visualValue, setVisualValue] = LeRed.useState(getVisualValue(value));
40
+
41
+ LeRed.useEffect(() =>
42
+ {
43
+ setVisualValue(getVisualValue(value));
44
+ }, [value]);
45
+
46
+
47
+ const onChanged = LeRed.useCallback((event) =>
48
+ {
49
+ const originalTargetValue = event.target.value;
50
+ const targetValue = LeMuiUtils.purgePrependedHiddenChar(originalTargetValue);
51
+
52
+ let text = targetValue;
53
+ let val = 0;
54
+
55
+ {// visual >>
56
+ const minus = text.includes('-');
57
+ text = text.replace(',', '.').replace(/[^0-9.]/g, '');
58
+ if(text !== '')
59
+ {
60
+ val = Math.abs(FLOAT_LAX(text));
61
+ if(allowNegative && minus)
62
+ {
63
+ val = -val;
64
+ }
65
+
66
+ let stringVal = val.toFixed(decimals + 1); // prevents rounding (by adding an extra digit and then cutting it off)
67
+ stringVal = stringVal.substring(0, stringVal.length - 1);
68
+
69
+ if(!text.includes('.') || (decimals <= 0))
70
+ {
71
+ text = stringVal.split('.')[0];
72
+ }
73
+ else if(text.endsWith('.'))
74
+ {
75
+ text = stringVal.split('.')[0] + '.';
76
+ }
77
+ else
78
+ {
79
+ text = stringVal.substring(0, stringVal.length - Math.max(0, decimals - text.split('.')[1].length));
80
+ }
81
+ setVisualValue(text);
82
+ }
83
+ }// visual <<
84
+
85
+ if(onChange)
86
+ {
87
+ if(val !== 0)
88
+ {
89
+ if(decimals > 0)
90
+ {
91
+ val = Math.round(val * Math.pow(10, decimals)) / Math.pow(10, decimals);
92
+ }
93
+ else
94
+ {
95
+ val = Math.round(val);
96
+ }
97
+ }
98
+
99
+ const newEvent = {
100
+ ...event,
101
+ target:{
102
+ ...event.target,
103
+ value: val,
104
+ valueText:text,
105
+ valueRaw: originalTargetValue,
106
+ },
107
+ };
108
+ onChange(newEvent);
109
+ }
110
+ }, [onChange]);
111
+
112
+
113
+ return (<>
114
+ <TextField className={'lowentry-mui--numeric-textfield ' + (className ?? '')} type="text" inputProps={{inputMode:'decimal', ...(inputProps ?? {})}} value={!!onRenderValue ? onRenderValue(visualValue) : visualValue} onChange={onChanged} {...props}>{children}</TextField>
115
+ </>);
116
+ });
117
+ export default NumericTextField;
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ import {LeRed} from '@lowentry/react-redux';
3
+ import {LeMuiUtils} from '../LeMuiUtils';
4
+ import NumericTextField from './NumericTextField.jsx';
5
+
6
+
7
+ const RemovableNumericTextField = LeRed.memo(({onRemove, onChange, onSelect, className, children, ...props}) =>
8
+ {
9
+ const onChanged = LeRed.useCallback((event) =>
10
+ {
11
+ if(event.target.valueRaw === '')
12
+ {
13
+ if(onRemove)
14
+ {
15
+ onRemove(event);
16
+ }
17
+ return;
18
+ }
19
+
20
+ if(onChange)
21
+ {
22
+ onChange(event);
23
+ }
24
+ }, [onRemove, onChange]);
25
+
26
+
27
+ const onSelected = LeRed.useCallback((event) =>
28
+ {
29
+ LeMuiUtils.onSelectEnsureMinimumOffset(1)(event);
30
+ if(onSelect)
31
+ {
32
+ onSelect(event);
33
+ }
34
+ }, [onSelect]);
35
+
36
+
37
+ return (<>
38
+ <NumericTextField className={'lowentry-mui--removable-textfield lowentry-mui--removable-numeric-textfield ' + (className ?? '')} onRenderValue={LeMuiUtils.prependHiddenChar} onChange={onChanged} onSelect={onSelected}>{children}</NumericTextField>
39
+ </>);
40
+ });
41
+ export default RemovableNumericTextField;
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import {LeRed} from '@lowentry/react-redux';
3
+ import {LeMuiUtils} from '../LeMuiUtils';
4
+ import TextField from './TextField.jsx';
5
+
6
+
7
+ const RemovableTextField = LeRed.memo(({className, value, onRemove, onChange, onSelect, children, ...props}) =>
8
+ {
9
+ const onChanged = LeRed.useCallback((event) =>
10
+ {
11
+ if(event.target.value === '')
12
+ {
13
+ if(onRemove)
14
+ {
15
+ onRemove(event);
16
+ }
17
+ return;
18
+ }
19
+
20
+ if(onChange)
21
+ {
22
+ const newEvent = {
23
+ ...event,
24
+ target:{
25
+ ...event.target,
26
+ value:LeMuiUtils.purgePrependedHiddenChar(event.target.value),
27
+ },
28
+ };
29
+ onChange(newEvent);
30
+ }
31
+ }, [onRemove, onChange]);
32
+
33
+
34
+ const onSelected = LeRed.useCallback((event) =>
35
+ {
36
+ LeMuiUtils.onSelectEnsureMinimumOffset(1)(event);
37
+ if(onSelect)
38
+ {
39
+ onSelect(event);
40
+ }
41
+ }, [onSelect]);
42
+
43
+
44
+ return (<>
45
+ <TextField className={'lowentry-mui--removable-textfield ' + (className ?? '')} value={LeMuiUtils.prependHiddenChar(value)} onChange={onChanged} onSelect={onSelected} {...props}>{children}</TextField>
46
+ </>);
47
+ });
48
+ export default RemovableTextField;
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ import {LeRed} from '@lowentry/react-redux';
3
+ import {Stack} from '@mui/material';
4
+
5
+
6
+ const Submittable = LeRed.memo(({onSubmit, disabled, sx, children, ...props}) =>
7
+ {
8
+ const handleSubmit = LeRed.useCallback((event) =>
9
+ {
10
+ try
11
+ {
12
+ event.preventDefault();
13
+ }
14
+ catch(e)
15
+ {
16
+ }
17
+
18
+ if(disabled)
19
+ {
20
+ if(!(typeof disabled === 'function') || disabled())
21
+ {
22
+ return;
23
+ }
24
+ }
25
+
26
+ if(onSubmit)
27
+ {
28
+ onSubmit(event);
29
+ }
30
+ }, [onSubmit, disabled]);
31
+
32
+
33
+ return (<>
34
+ <form style={sx ?? {}} onSubmit={handleSubmit}>
35
+ <Stack {...props}>
36
+ {children}
37
+ </Stack>
38
+ </form>
39
+ </>);
40
+ });
41
+ export default Submittable;
@@ -0,0 +1,4 @@
1
+ .lowentry-mui--textfield
2
+ {
3
+ cursor: auto;
4
+ }
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import {LeRed} from '@lowentry/react-redux';
3
+ import {TextField as MuiTextField} from '@mui/material';
4
+ import './TextField.css';
5
+
6
+
7
+ const TextField = LeRed.memo(({className, onClick, children, ...props}) =>
8
+ {
9
+ const onClicked = LeRed.useCallback((event) =>
10
+ {
11
+ try
12
+ {
13
+ event.stopPropagation();
14
+ }
15
+ catch(e)
16
+ {
17
+ }
18
+
19
+ if(onClick)
20
+ {
21
+ onClick(event);
22
+ }
23
+ }, [onClick]);
24
+
25
+
26
+ return (<>
27
+ <MuiTextField className={'lowentry-mui--textfield ' + (className ?? '')} autoComplete="off" onClick={onClicked} {...props}>{children}</MuiTextField>
28
+ </>);
29
+ });
30
+ export default TextField;
@@ -1 +1,2 @@
1
1
  function e(e,t){void 0===t&&(t={});var d=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css","top"===d&&n.firstChild?n.insertBefore(s,n.firstChild):n.appendChild(s),s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e))}}export{e as s};
2
+ //# sourceMappingURL=style-inject.es-1f59c1d0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-inject.es-1f59c1d0.js","sources":["../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode"],"mappings":"AAAA,SAASA,EAAYC,EAAKC,QACX,IAARA,IAAiBA,EAAM,CAAA,GAC5B,IAAIC,EAAWD,EAAIC,SAEnB,GAAKF,GAA2B,oBAAbG,SAAnB,CAEA,IAAIC,EAAOD,SAASC,MAAQD,SAASE,qBAAqB,QAAQ,GAC9DC,EAAQH,SAASI,cAAc,SACnCD,EAAME,KAAO,WAEI,QAAbN,GACEE,EAAKK,WACPL,EAAKM,aAAaJ,EAAOF,EAAKK,YAKhCL,EAAKO,YAAYL,GAGfA,EAAMM,WACRN,EAAMM,WAAWC,QAAUb,EAE3BM,EAAMK,YAAYR,SAASW,eAAed,GAnBY,CAqB1D"}