@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.
- package/DatePicker/index.js +1 -0
- package/DatePicker/index.js.map +1 -0
- package/Dialog/index.js +1 -0
- package/Dialog/index.js.map +1 -0
- package/{LeMuiUtils-ca49f11d.js → LeMuiUtils-c46ed1cc.js} +1 -0
- package/LeMuiUtils-c46ed1cc.js.map +1 -0
- package/LoadingSpinner/index.js +2 -1
- package/LoadingSpinner/index.js.map +1 -0
- package/{LoadingSpinner-cbb3bd6d.js → LoadingSpinner-2e9afd52.js} +1 -0
- package/LoadingSpinner-2e9afd52.js.map +1 -0
- package/LoadingSpinnerWidget/index.js +2 -1
- package/LoadingSpinnerWidget/index.js.map +1 -0
- package/MenuButton/index.js +1 -0
- package/MenuButton/index.js.map +1 -0
- package/MuiRoot/index.js +1 -0
- package/MuiRoot/index.js.map +1 -0
- package/NumericTextField/index.js +2 -1
- package/NumericTextField/index.js.map +1 -0
- package/RemovableNumericTextField/index.js +2 -1
- package/RemovableNumericTextField/index.js.map +1 -0
- package/RemovableTextField/index.js +2 -1
- package/RemovableTextField/index.js.map +1 -0
- package/Submittable/index.js +1 -0
- package/Submittable/index.js.map +1 -0
- package/TextField/index.js +1 -0
- package/TextField/index.js.map +1 -0
- package/_rollupPluginBabelHelpers-c0e6c03a.js +1 -0
- package/_rollupPluginBabelHelpers-c0e6c03a.js.map +1 -0
- package/index.js +2 -1
- package/index.js.map +1 -0
- package/package.json +3 -3
- package/src/LeMuiUtils.js +52 -0
- package/src/index.js +11 -0
- package/src/widgets/DatePicker.css +32 -0
- package/src/widgets/DatePicker.jsx +112 -0
- package/src/widgets/Dialog.jsx +30 -0
- package/src/widgets/LoadingSpinner/LoadingSpinner.css +9 -0
- package/src/widgets/LoadingSpinner/LoadingSpinner.jsx +50 -0
- package/src/widgets/LoadingSpinner.jsx +1 -0
- package/src/widgets/LoadingSpinnerWidget.jsx +1 -0
- package/src/widgets/MenuButton.jsx +53 -0
- package/src/widgets/MuiRoot.css +13 -0
- package/src/widgets/MuiRoot.jsx +22 -0
- package/src/widgets/NumericTextField.jsx +117 -0
- package/src/widgets/RemovableNumericTextField.jsx +41 -0
- package/src/widgets/RemovableTextField.jsx +48 -0
- package/src/widgets/Submittable.jsx +41 -0
- package/src/widgets/TextField.css +4 -0
- package/src/widgets/TextField.jsx +30 -0
- package/style-inject.es-1f59c1d0.js +1 -0
- package/style-inject.es-1f59c1d0.js.map +1 -0
package/DatePicker/index.js
CHANGED
|
@@ -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"}
|
package/LoadingSpinner/index.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export{L as default}from"../LoadingSpinner-
|
|
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-
|
|
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":""}
|
package/MenuButton/index.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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"}
|
package/Submittable/index.js
CHANGED
|
@@ -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"}
|
package/TextField/index.js
CHANGED
|
@@ -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-
|
|
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.
|
|
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,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,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"}
|