mui-fast-start 0.1.0 → 0.1.2

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/README.md CHANGED
@@ -1,73 +1,356 @@
1
- # React + TypeScript + Vite
1
+ # Mui Fast Start
2
2
 
3
- This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
3
+ [한국어 (Korean)](./README_KR.md)
4
4
 
5
- Currently, two official plugins are available:
5
+ This library is built on [MUI](https://mui.com/) and [React](https://react.dev/), and is licensed under the MIT License.
6
6
 
7
- - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
8
- - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
7
+ It was developed for rapid development, aiming to reduce repetitive or similar code patterns.
9
8
 
10
- ## React Compiler
9
+ # Example
10
+ ### Usage
11
+ This library extends the props of MUI/React components.
12
+ You can use the original props along with the additional props defined by mui-fast-start.
11
13
 
12
- The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
14
+ For example, if MUI's TextField is used like this:
15
+ ```tsx
16
+ import TextField from '@mui/material/TextField';
17
+
18
+ <TextField
19
+ id="outlined-basic"
20
+ label="Outlined"
21
+ variant="outlined"
22
+ />
23
+ ```
24
+ With mui-fast-start's extended props (`get`, `set`), you can use it as follows while maintaining the original props syntax:
25
+ ```tsx
26
+ import { SingleText } from "mui-fast-start";
27
+
28
+ <SingleText
29
+ id="outlined-basic"
30
+ label="Outlined"
31
+ variant="outlined"
32
+ get={text} set={setText}
33
+ />
34
+ ```
13
35
 
14
- ## Expanding the ESLint configuration
15
36
 
16
- If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
17
37
 
18
- ```js
19
- export default defineConfig([
20
- globalIgnores(['dist']),
21
- {
22
- files: ['**/*.{ts,tsx}'],
23
- extends: [
24
- // Other configs...
38
+ # Doc
39
+ ## FastStartProvider
40
+ A Provider that defines default **props** to inject.
41
+ Priority order is `default values > createDefaultProps > component props`. If no props are specified, the props defined here will be applied globally.
25
42
 
26
- // Remove tseslint.configs.recommended and replace with this
27
- tseslint.configs.recommendedTypeChecked,
28
- // Alternatively, use this for stricter rules
29
- tseslint.configs.strictTypeChecked,
30
- // Optionally, add this for stylistic rules
31
- tseslint.configs.stylisticTypeChecked,
43
+ This component has MUI's ThemeProvider built-in, so be careful not to use ThemeProvider again.
32
44
 
33
- // Other configs...
34
- ],
35
- languageOptions: {
36
- parserOptions: {
37
- project: ['./tsconfig.node.json', './tsconfig.app.json'],
38
- tsconfigRootDir: import.meta.dirname,
39
- },
40
- // other options...
45
+ Example:
46
+ ```tsx
47
+ import {createTheme, CssBaseline} from "@mui/material";
48
+ import { createDefaultProps } from 'mui-fast-start/styles';
49
+ import { FastStartProvider } from 'mui-fast-start';
50
+
51
+ const theme = createTheme();
52
+ const defaultProps = createDefaultProps({
53
+ Single: {
54
+ Integer: {
55
+ variant: 'filled',
56
+ size: 'medium',
57
+ fullWidth: false,
58
+ autoComplete: 'off',
59
+ inputMode: 'numeric',
60
+ type: 'text',
61
+ step: 1,
62
+ def: 0
63
+ }
41
64
  },
42
- },
43
- ])
65
+ Obj: {
66
+ Float: {
67
+ variant: 'filled',
68
+ size: 'medium',
69
+ fullWidth: false,
70
+ autoComplete: 'off',
71
+ inputMode: 'decimal',
72
+ type: 'text',
73
+ step: 0.01,
74
+ def: 0
75
+ }
76
+ }
77
+ });
78
+
79
+ <FastStartProvider
80
+ defaultProps={defaultProps}
81
+ theme={theme}
82
+ defaultMode='dark'
83
+ >
84
+ <CssBaseline/>
85
+ <StrictMode>
86
+ <App/>
87
+ </StrictMode>
88
+ </FastStartProvider>
44
89
  ```
45
90
 
46
- You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
47
-
48
- ```js
49
- // eslint.config.js
50
- import reactX from 'eslint-plugin-react-x'
51
- import reactDom from 'eslint-plugin-react-dom'
52
-
53
- export default defineConfig([
54
- globalIgnores(['dist']),
55
- {
56
- files: ['**/*.{ts,tsx}'],
57
- extends: [
58
- // Other configs...
59
- // Enable lint rules for React
60
- reactX.configs['recommended-typescript'],
61
- // Enable lint rules for React DOM
62
- reactDom.configs.recommended,
63
- ],
64
- languageOptions: {
65
- parserOptions: {
66
- project: ['./tsconfig.node.json', './tsconfig.app.json'],
67
- tsconfigRootDir: import.meta.dirname,
68
- },
69
- // other options...
70
- },
71
- },
72
- ])
91
+ ## Single
92
+ Single components are used with a single useState.
93
+
94
+ In MUI, you would originally create value and onChange functions like this:
95
+
96
+ **MUI Example**
97
+ ```tsx
98
+ import React, { useState } from "react";
99
+ import TextField from '@mui/material/TextField';
100
+
101
+ const [text, setText] = useState<string>('');
102
+
103
+ const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {
104
+ setText(e.target.value);
105
+ }
106
+
107
+ <TextField
108
+ fullWidth={true}
109
+ autoComplete="off"
110
+ size="small"
111
+ variant="outlined"
112
+ label="Text"
113
+ value={text}
114
+ onChange={handleTextChange}
115
+ slotProps={{
116
+ htmlInput: {
117
+ maxLength: 10,
118
+ }
119
+ }}
120
+ />
121
+ ```
122
+
123
+ **mui-fast-start Example**
124
+ ```tsx
125
+ import { SingleText } from "mui-fast-start";
126
+
127
+ const [text, setText] = useState<string>('');
128
+
129
+ <SingleText
130
+ label='Text'
131
+ maxLength={10}
132
+ get={text} set={setText}
133
+ />
134
+ ```
135
+
136
+ ## Obj
137
+ The `name` prop is required and values are changed based on the name.
138
+
139
+ Components that receive an object type, where the object's key is specified as the name prop.
140
+
141
+
142
+ **MUI Example**
143
+ ```tsx
144
+ import React, { useState } from "react";
145
+ import TextField from '@mui/material/TextField';
146
+
147
+ type TempType = {
148
+ check1: boolean,
149
+ check2: boolean,
150
+ float: number,
151
+ integer: number,
152
+ tempText: string
153
+ }
154
+
155
+ const [temp, setTemp] = useState<TempType>({
156
+ check1: false,
157
+ check2: false,
158
+ float: 0,
159
+ integer: 0,
160
+ tempText: ''
161
+ });
162
+
163
+ const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {
164
+ setTemp({...temp, tempText: e.target.value});
165
+ }
166
+
167
+ <TextField
168
+ fullWidth={true}
169
+ autoComplete="off"
170
+ size="small"
171
+ variant="outlined"
172
+ label='Test'
173
+ value={temp.tempText}
174
+ onChange={handleTextChange}
175
+ />
176
+ ```
177
+
178
+ **mui-fast-start Example**
179
+ ```tsx
180
+ import React, { useState } from "react";
181
+ import { ObjText } from "mui-fast-start";
182
+
183
+ type TempType = {
184
+ check1: boolean,
185
+ check2: boolean,
186
+ float: number,
187
+ integer: number,
188
+ tempText: string
189
+ }
190
+
191
+ const [temp, setTemp] = useState<TempType>({
192
+ check1: false,
193
+ check2: false,
194
+ float: 0,
195
+ integer: 0,
196
+ tempText: ''
197
+ });
198
+
199
+ <ObjText<TempType>
200
+ label='Text'
201
+ name='tempText'
202
+ get={temp}
203
+ set={setTemp}
204
+ />
73
205
  ```
206
+
207
+
208
+ # Props
209
+ ### SingleFloat
210
+ Extended props: [TextFieldProps](https://mui.com/material-ui/api/text-field/)
211
+
212
+ | Name | Type | Default | Description |
213
+ |:-:|:-:|:-:|:-:|
214
+ | get | number | (required) | First value of useState |
215
+ | set | Dispatch<SetStateAction<number>> | (required) | Second value of useState |
216
+ | label | React.ReactNode | - | Label content |
217
+ | errorData | string | - | Error message |
218
+ | minLength | number | - | Minimum input length |
219
+ | maxLength | number | - | Maximum input length |
220
+ | startAdornment | React.ReactNode | - | Start InputAdornment |
221
+ | endAdornment | React.ReactNode | - | End InputAdornment |
222
+ | def | number | 0 | Default value when input format is invalid |
223
+ | min | number | - | Minimum value |
224
+ | max | number | - | Maximum value |
225
+ | step | number | 0.01 | Step increment size |
226
+
227
+ ### SingleInteger
228
+ Extended props: [TextFieldProps](https://mui.com/material-ui/api/text-field/)
229
+
230
+ | Name | Type | Default | Description |
231
+ |:-:|:-:|:-:|:-:|
232
+ | get | number | (required) | First value of useState |
233
+ | set | Dispatch<SetStateAction<number>> | (required) | Second value of useState |
234
+ | label | React.ReactNode | - | Label content |
235
+ | errorData | string | - | Error message |
236
+ | minLength | number | - | Minimum input length |
237
+ | maxLength | number | - | Maximum input length |
238
+ | startAdornment | React.ReactNode | - | Start InputAdornment |
239
+ | endAdornment | React.ReactNode | - | End InputAdornment |
240
+ | def | number | 0 | Default value when input format is invalid |
241
+ | min | number | - | Minimum value |
242
+ | max | number | - | Maximum value |
243
+ | step | number | 1 | Step increment size |
244
+
245
+
246
+ ### SingleText
247
+ Extended props: [TextFieldProps](https://mui.com/material-ui/api/text-field/)
248
+
249
+ | Name | Type | Default | Description |
250
+ |:-:|:-:|:-:|:-:|
251
+ | get | string | (required) | First value of useState |
252
+ | set | Dispatch<SetStateAction<string>> | (required) | Second value of useState |
253
+ | label | React.ReactNode | - | Label content |
254
+ | errorData | string | - | Error message |
255
+ | minLength | number | - | Minimum input length |
256
+ | maxLength | number | - | Maximum input length |
257
+ | startAdornment | React.ReactNode | - | Start InputAdornment |
258
+ | endAdornment | React.ReactNode | - | End InputAdornment |
259
+
260
+ ### SingleCheckbox
261
+ Extended props: [CheckboxProps](https://mui.com/material-ui/api/checkbox/)
262
+
263
+ | Name | Type | Default | Description |
264
+ |:-:|:-:|:-:|:-:|
265
+ | get | boolean | (required) | First value of useState |
266
+ | set | Dispatch<SetStateAction<boolean>> | (required) | Second value of useState |
267
+ | label | React.ReactNode | - | Label content |
268
+
269
+ ### SingleCheckIcon
270
+ Extended props: [IconButtonProps](https://mui.com/material-ui/api/icon-button/)
271
+
272
+ | Name | Type | Default | Description |
273
+ |:-:|:-:|:-:|:-:|
274
+ | get | boolean | (required) | First value of useState |
275
+ | set | Dispatch<SetStateAction<boolean>> | (required) | Second value of useState |
276
+ | on | React.ReactNode | (required) | Node displayed when true |
277
+ | off | React.ReactNode | (required) | Node displayed when false |
278
+
279
+
280
+ ----
281
+
282
+
283
+ ### ObjFloat
284
+ Extended props: [TextFieldProps](https://mui.com/material-ui/api/text-field/)
285
+
286
+ | Name | Type | Default | Description |
287
+ |:-:|:-:|:-:|:-:|
288
+ | get | object | (required) | First value of useState |
289
+ | set | Dispatch<SetStateAction<object>> | (required) | Second value of useState |
290
+ | name | string | (required) | Object key name |
291
+ | label | React.ReactNode | - | Label content |
292
+ | errorData | object | - | Error message |
293
+ | minLength | number | - | Minimum input length |
294
+ | maxLength | number | - | Maximum input length |
295
+ | startAdornment | React.ReactNode | - | Start InputAdornment |
296
+ | endAdornment | React.ReactNode | - | End InputAdornment |
297
+ | def | number | 0 | Default value when input format is invalid |
298
+ | min | number | - | Minimum value |
299
+ | max | number | - | Maximum value |
300
+ | step | number | 0.01 | Step increment size |
301
+
302
+ ### ObjInteger
303
+ Extended props: [TextFieldProps](https://mui.com/material-ui/api/text-field/)
304
+
305
+ | Name | Type | Default | Description |
306
+ |:-:|:-:|:-:|:-:|
307
+ | get | object | (required) | First value of useState |
308
+ | set | Dispatch<SetStateAction<object>> | (required) | Second value of useState |
309
+ | name | string | (required) | Object key name |
310
+ | label | React.ReactNode | - | Label content |
311
+ | errorData | object | - | Error message |
312
+ | minLength | number | - | Minimum input length |
313
+ | maxLength | number | - | Maximum input length |
314
+ | startAdornment | React.ReactNode | - | Start InputAdornment |
315
+ | endAdornment | React.ReactNode | - | End InputAdornment |
316
+ | def | number | 0 | Default value when input format is invalid |
317
+ | min | number | - | Minimum value |
318
+ | max | number | - | Maximum value |
319
+ | step | number | 1 | Step increment size |
320
+
321
+ ### ObjText
322
+ Extended props: [TextFieldProps](https://mui.com/material-ui/api/text-field/)
323
+
324
+ | Name | Type | Default | Description |
325
+ |:-:|:-:|:-:|:-:|
326
+ | get | object | (required) | First value of useState |
327
+ | set | Dispatch<SetStateAction<object>> | (required) | Second value of useState |
328
+ | name | string | (required) | Object key name |
329
+ | label | React.ReactNode | - | Label content |
330
+ | errorData | object | - | Error message |
331
+ | minLength | number | - | Minimum input length |
332
+ | maxLength | number | - | Maximum input length |
333
+ | startAdornment | React.ReactNode | - | Start InputAdornment |
334
+ | endAdornment | React.ReactNode | - | End InputAdornment |
335
+
336
+ ### ObjCheckbox
337
+ Extended props: [CheckboxProps](https://mui.com/material-ui/api/checkbox/)
338
+
339
+ | Name | Type | Default | Description |
340
+ |:-:|:-:|:-:|:-:|
341
+ | get | object | (required) | First value of useState |
342
+ | set | Dispatch<SetStateAction<object>> | (required) | Second value of useState |
343
+ | name | string | (required) | Object key name |
344
+ | label | React.ReactNode | - | Label content |
345
+
346
+ ### ObjCheckIcon
347
+ Extended props: [IconButtonProps](https://mui.com/material-ui/api/icon-button/)
348
+
349
+ | Name | Type | Default | Description |
350
+ |:-:|:-:|:-:|:-:|
351
+ | get | object | (required) | First value of useState |
352
+ | set | Dispatch<SetStateAction<object>> | (required) | Second value of useState |
353
+ | name | string | (required) | Object key name |
354
+ | on | React.ReactNode | (required) | Node displayed when true |
355
+ | off | React.ReactNode | (required) | Node displayed when false |
356
+
package/dist/index.cjs.js CHANGED
@@ -1 +1 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`react`);c=s(c);let l=require(`@mui/material`),u=require(`react/jsx-runtime`);var d=(e,t,n,r)=>{let i=0;if(e==null||h(e))i=r;else for(let t of e.split(/(?=[+-])/g))/^[+-]?\d+\.\d+$/.test(t)?i+=parseFloat(t):/^[+-]?\d+$/.test(t)&&(i+=parseInt(t,10));return n!=null&&(i=Math.min(n,i)),t!=null&&(i=Math.max(t,i)),i},f=(e,t,n,r)=>{let i=0;if(e==null||h(e))i=r;else for(let t of e.split(/(?=[+-])/g))/^[+-]?\d+$/.test(t)&&(i+=parseInt(t,10));return n!=null&&(i=Math.min(n,i)),t!=null&&(i=Math.max(t,i)),i},p=e=>{let t=e.replace(/[^0-9+.-]/g,``).replace(/([+-]){2,}/g,(e,t)=>t),n=``,r=``,i=!1;for(let e=0;e<t.length;e++){let a=t[e];a>=`0`&&a<=`9`?r+=a:a===`.`?i||=(r===``&&(r=`0`),r+=`.`,!0):(a===`+`||a===`-`)&&(r!==``&&(n+=r),n+=a,r=``,i=!1)}return n+r},m=e=>e.replace(/[^0-9+-]/g,``).replace(/\./g,``).replace(/([+-]){2,}/g,(e,t)=>t.charAt(0)).replace(/^([+-]{2,})/,e=>e.charAt(0));function h(e){return e.length===0||!e.trim()}function g(e){return typeof e==`object`&&!!e&&e.constructor===Object}function _(e){return Object.keys(e).length===0}function v(e,t){if(e===t||!g(t)||_(t))return e;if(!g(e)||_(e))return t;let n={...e},r=[[n,t]];for(;r.length;){let[e,t]=r.pop();for(let n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let i=t[n],a=e[n];if(g(a)&&g(i)){let t={...a};e[n]=t,r.push([t,i])}else e[n]=i}}return n}var y=e=>{let t={fullWidth:!0,autoComplete:`off`,variant:`outlined`,size:`small`},n=Object.assign({inputMode:`decimal`,type:`text`,step:.01,def:0},t),r=Object.assign({inputMode:`numeric`,type:`text`,step:1,def:0},t);return v({Single:{Float:{...n},Integer:{...r},Text:{...t},Checkbox:{size:`small`},CheckIcon:{size:`small`}},Obj:{Float:{...n},Integer:{...r},Text:{...t},Checkbox:{size:`small`},CheckIcon:{size:`small`}}},e)},b=y;const x=(0,c.createContext)(b());var S=(e,t,n)=>[t?.[e],(0,c.useCallback)(t=>{n(n=>({...n,[e]:typeof t==`function`?t(n?.[e]):t}))},[e,n])],C=S,w=e=>{let t=(0,c.useContext)(x).Obj.Checkbox,{get:n,set:r,...i}=v(t,e),[a,o]=C(i.name,n,r);return(0,u.jsx)(G,{get:a,set:o,...i})},T=w,E=e=>{let t=(0,c.useContext)(x).Obj.CheckIcon,{get:n,set:r,...i}=v(t,e),[a,o]=C(i.name,n,r);return(0,u.jsx)(q,{get:a,set:o,...i})},D=E,O=e=>{let t=(0,c.useContext)(x).Obj.Float,{get:n,set:r,...i}=v(t,e),[a,o]=C(i.name,n,r);return(0,u.jsx)(Y,{get:a,set:o,...i})},k=O,A=(e,t,n,r,i=[])=>{let[a,o]=(0,c.useState)(null),{get:s,set:l,errorData:u,minLength:d,maxLength:f,startAdornment:p,endAdornment:m,disappear:h,def:g,min:_,max:y,step:b,...x}=(0,c.useMemo)(()=>v({...e},t),[e,t]),S=(0,c.useCallback)(e=>r(e,_,y,g),[r,_,y,g]),C=(0,c.useCallback)(e=>{let{value:t,valueAsNumber:n}=e.currentTarget;return isNaN(n)?S(t):n},[S]),w=(0,c.useCallback)(e=>{let t=e.currentTarget,r=n(t.value);return r!=t.value&&(t.value=r),r},[n]),T=(0,c.useCallback)(()=>{a??o(s.toString())},[a,s]),E=(0,c.useCallback)(e=>{let t=S(w(e));!isNaN(t)&&s!=t&&l(t),o(e.currentTarget.value)},[w,S,l,s]),D=(0,c.useCallback)(e=>{let{value:t}=e.currentTarget;o(null);let n=S(t);s!=n&&l(n)},[S,s,l]),O=(0,c.useCallback)(e=>{if(i.includes(e.key)){e.preventDefault();return}let t=e.currentTarget;if(e.key===`ArrowUp`){e.preventDefault();let n=C(e)+b;y!=null&&n>y?t.value=y.toString():t.value=j(n,b).toString()}else if(e.key===`ArrowDown`){e.preventDefault();let n=C(e)-b;_!=null&&n<_?t.value=_.toString():t.value=j(n,b).toString()}},[C,y,_,b]),k=(0,c.useMemo)(()=>a??s,[s,a]),A=(0,c.useMemo)(()=>a==null&&(s==null||isNaN(s))?{}:{shrink:!0},[a,s]);return v({error:!!u,helperText:u,value:k,onChange:E,onSelect:T,onBlur:D,slotProps:{htmlInput:{step:b,min:_,max:y,minLength:d,maxLength:f,onKeyDown:O},inputLabel:A,input:{startAdornment:p,endAdornment:m}}},x)},j=(e,t)=>{if(t=Math.abs(t),t===0)return e;let n=-Math.floor(Math.log10(t));return n>0?Number(Math.round(e*10**n)/10**n):e},M=(e,t)=>A(e,t,p,d),N=(e,t)=>A(e,t,m,f,[`.`,`e`,`E`]),P=(e,t)=>{let{get:n,set:r,errorData:i,minLength:a,maxLength:o,startAdornment:s,endAdornment:l,...u}=v({...e},t),d=(0,c.useCallback)(e=>{r(e.currentTarget.value)},[r]);return v({error:!!i,helperText:i,value:n,onChange:d,slotProps:{htmlInput:{minLength:a,maxLength:o},input:{startAdornment:s,endAdornment:l}}},u)},F=P,I=e=>{let t=(0,c.useContext)(x).Single.Integer;return(0,u.jsx)(l.TextField,{...N(t,e)})},L=I,R=e=>{let t=(0,c.useContext)(x).Obj.Integer,{get:n,set:r,...i}=v(t,e),[a,o]=C(i.name,n,r);return(0,u.jsx)(L,{get:a,set:o,...i})},z=R,B=e=>{let t=(0,c.useContext)(x).Single.Text;return(0,u.jsx)(l.TextField,{...F(t,e)})},V=B,H=e=>{let t=(0,c.useContext)(x).Obj.Text,{get:n,set:r,...i}=v(t,e),[a,o]=C(i.name,n,r);return(0,u.jsx)(V,{get:a,set:o,...i})},U=H,W=e=>{let t=(0,c.useContext)(x).Single.Checkbox,{get:n,set:r,label:i,...a}=v(t,e),o=(0,c.useCallback)(()=>r(e=>!e),[r]);return i==null?(0,u.jsx)(l.Checkbox,{checked:n,onChange:o,...a}):(0,u.jsx)(l.FormControlLabel,{checked:n,label:i,onChange:o,control:(0,u.jsx)(l.Checkbox,{...a})})},G=W,K=e=>{let t=(0,c.useContext)(x).Single.CheckIcon,{get:n,set:r,on:i,off:a,...o}=v(t,e);return(0,u.jsx)(l.IconButton,{onClick:(0,c.useCallback)(()=>r(e=>!e),[r]),...o,children:n?i:a})},q=K,J=e=>{let t=(0,c.useContext)(x).Single.Float;return(0,u.jsx)(l.TextField,{...M(t,e)})},Y=J;exports.ObjCheckIcon=D,exports.ObjCheckbox=T,exports.ObjFloat=k,exports.ObjInteger=z,exports.ObjText=U,exports.SingleCheckIcon=q,exports.SingleCheckbox=G,exports.SingleFloat=Y,exports.SingleInteger=L,exports.SingleText=V;
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`react`);c=s(c);let l=require(`@mui/material`),u=require(`react/jsx-runtime`);var d=(e,t,n,r)=>{let i=0;if(e==null||h(e))i=r;else for(let t of e.split(/(?=[+-])/g))/^[+-]?\d+\.\d+$/.test(t)?i+=parseFloat(t):/^[+-]?\d+$/.test(t)&&(i+=parseInt(t,10));return n!=null&&(i=Math.min(n,i)),t!=null&&(i=Math.max(t,i)),i},f=(e,t,n,r)=>{let i=0;if(e==null||h(e))i=r;else for(let t of e.split(/(?=[+-])/g))/^[+-]?\d+$/.test(t)&&(i+=parseInt(t,10));return n!=null&&(i=Math.min(n,i)),t!=null&&(i=Math.max(t,i)),i},p=e=>{let t=e.replace(/[^0-9+.-]/g,``).replace(/([+-]){2,}/g,(e,t)=>t),n=``,r=``,i=!1;for(let e=0;e<t.length;e++){let a=t[e];a>=`0`&&a<=`9`?r+=a:a===`.`?i||=(r===``&&(r=`0`),r+=`.`,!0):(a===`+`||a===`-`)&&(r!==``&&(n+=r),n+=a,r=``,i=!1)}return n+r},m=e=>e.replace(/[^0-9+-]/g,``).replace(/\./g,``).replace(/([+-]){2,}/g,(e,t)=>t.charAt(0)).replace(/^([+-]{2,})/,e=>e.charAt(0));function h(e){return e.length===0||!e.trim()}function g(e){return typeof e==`object`&&!!e&&e.constructor===Object}function _(e){return Object.keys(e).length===0}function v(e,t){if(e===t||!g(t)||_(t))return e;if(!g(e)||_(e))return t;let n={...e},r=[[n,t]];for(;r.length;){let[e,t]=r.pop();for(let n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let i=t[n],a=e[n];if(g(a)&&g(i)){let t={...a};e[n]=t,r.push([t,i])}else e[n]=i}}return n}var y=e=>{let t={fullWidth:!0,autoComplete:`off`,variant:`outlined`,size:`small`},n=Object.assign({inputMode:`decimal`,type:`text`,step:.01,def:0},t),r=Object.assign({inputMode:`numeric`,type:`text`,step:1,def:0},t);return v({Single:{Float:{...n},Integer:{...r},Text:{...t},Checkbox:{size:`small`},CheckIcon:{size:`small`}},Obj:{Float:{...n},Integer:{...r},Text:{...t},Checkbox:{size:`small`},CheckIcon:{size:`small`}}},e)},b=y;const x=(0,c.createContext)(b());var S=e=>{let{defaultProps:t,...n}=e;return(0,u.jsx)(x,{value:t,children:(0,u.jsx)(l.ThemeProvider,{...n})})},C=S,w=(e,t,n)=>[t?.[e],(0,c.useCallback)(t=>{n(n=>({...n,[e]:typeof t==`function`?t(n?.[e]):t}))},[e,n])],T=w,E=e=>{let t=(0,c.useContext)(x).Obj.Checkbox,{get:n,set:r,...i}=v(t,e),[a,o]=T(i.name,n,r);return(0,u.jsx)(q,{get:a,set:o,...i})},D=E,O=e=>{let t=(0,c.useContext)(x).Obj.CheckIcon,{get:n,set:r,...i}=v(t,e),[a,o]=T(i.name,n,r);return(0,u.jsx)(Y,{get:a,set:o,...i})},k=O,A=e=>{let t=(0,c.useContext)(x).Obj.Float,{get:n,set:r,...i}=v(t,e),[a,o]=T(i.name,n,r);return(0,u.jsx)(Z,{get:a,set:o,...i})},j=A,M=(e,t,n,r,i=[])=>{let[a,o]=(0,c.useState)(null),{get:s,set:l,errorData:u,minLength:d,maxLength:f,startAdornment:p,endAdornment:m,disappear:h,def:g,min:_,max:y,step:b,...x}=(0,c.useMemo)(()=>v({...e},t),[e,t]),S=(0,c.useCallback)(e=>r(e,_,y,g),[r,_,y,g]),C=(0,c.useCallback)(e=>{let{value:t,valueAsNumber:n}=e.currentTarget;return isNaN(n)?S(t):n},[S]),w=(0,c.useCallback)(e=>{let t=e.currentTarget,r=n(t.value);return r!=t.value&&(t.value=r),r},[n]),T=(0,c.useCallback)(()=>{a??o(s.toString())},[a,s]),E=(0,c.useCallback)(e=>{let t=S(w(e));!isNaN(t)&&s!=t&&l(t),o(e.currentTarget.value)},[w,S,l,s]),D=(0,c.useCallback)(e=>{let{value:t}=e.currentTarget;o(null);let n=S(t);s!=n&&l(n)},[S,s,l]),O=(0,c.useCallback)(e=>{if(i.includes(e.key)){e.preventDefault();return}let t=e.currentTarget;if(e.key===`ArrowUp`){e.preventDefault();let n=C(e)+b;y!=null&&n>y?t.value=y.toString():t.value=N(n,b).toString()}else if(e.key===`ArrowDown`){e.preventDefault();let n=C(e)-b;_!=null&&n<_?t.value=_.toString():t.value=N(n,b).toString()}},[C,y,_,b]),k=(0,c.useMemo)(()=>a??s,[s,a]),A=(0,c.useMemo)(()=>a==null&&(s==null||isNaN(s))?{}:{shrink:!0},[a,s]);return v({error:!!u,helperText:u,value:k,onChange:E,onSelect:T,onBlur:D,slotProps:{htmlInput:{step:b,min:_,max:y,minLength:d,maxLength:f,onKeyDown:O},inputLabel:A,input:{startAdornment:p,endAdornment:m}}},x)},N=(e,t)=>{if(t=Math.abs(t),t===0)return e;let n=-Math.floor(Math.log10(t));return n>0?Number(Math.round(e*10**n)/10**n):e},P=(e,t)=>M(e,t,p,d),F=(e,t)=>M(e,t,m,f,[`.`,`e`,`E`]),I=(e,t)=>{let{get:n,set:r,errorData:i,minLength:a,maxLength:o,startAdornment:s,endAdornment:l,...u}=v({...e},t),d=(0,c.useCallback)(e=>{r(e.currentTarget.value)},[r]);return v({error:!!i,helperText:i,value:n,onChange:d,slotProps:{htmlInput:{minLength:a,maxLength:o},input:{startAdornment:s,endAdornment:l}}},u)},L=I,R=e=>{let t=(0,c.useContext)(x).Single.Integer;return(0,u.jsx)(l.TextField,{...F(t,e)})},z=R,B=e=>{let t=(0,c.useContext)(x).Obj.Integer,{get:n,set:r,...i}=v(t,e),[a,o]=T(i.name,n,r);return(0,u.jsx)(z,{get:a,set:o,...i})},V=B,H=e=>{let t=(0,c.useContext)(x).Single.Text;return(0,u.jsx)(l.TextField,{...L(t,e)})},U=H,W=e=>{let t=(0,c.useContext)(x).Obj.Text,{get:n,set:r,...i}=v(t,e),[a,o]=T(i.name,n,r);return(0,u.jsx)(U,{get:a,set:o,...i})},G=W,K=e=>{let t=(0,c.useContext)(x).Single.Checkbox,{get:n,set:r,label:i,...a}=v(t,e),o=(0,c.useCallback)(()=>r(e=>!e),[r]);return i==null?(0,u.jsx)(l.Checkbox,{checked:n,onChange:o,...a}):(0,u.jsx)(l.FormControlLabel,{checked:n,label:i,onChange:o,control:(0,u.jsx)(l.Checkbox,{...a})})},q=K,J=e=>{let t=(0,c.useContext)(x).Single.CheckIcon,{get:n,set:r,on:i,off:a,...o}=v(t,e);return(0,u.jsx)(l.IconButton,{onClick:(0,c.useCallback)(()=>r(e=>!e),[r]),...o,children:n?i:a})},Y=J,X=e=>{let t=(0,c.useContext)(x).Single.Float;return(0,u.jsx)(l.TextField,{...P(t,e)})},Z=X;exports.FastStartContext=x,exports.FastStartProvider=C,exports.ObjCheckIcon=k,exports.ObjCheckbox=D,exports.ObjFloat=j,exports.ObjInteger=V,exports.ObjText=G,exports.SingleCheckIcon=Y,exports.SingleCheckbox=q,exports.SingleFloat=Z,exports.SingleInteger=z,exports.SingleText=U;
package/dist/index.esm.js CHANGED
@@ -1,254 +1,260 @@
1
1
  import { createContext, useCallback, useContext, useMemo, useState } from "react";
2
- import { Checkbox, FormControlLabel, IconButton, TextField } from "@mui/material";
2
+ import { Checkbox, FormControlLabel, IconButton, TextField, ThemeProvider } from "@mui/material";
3
3
  import { jsx } from "react/jsx-runtime";
4
- var floatCalculate = (n, i, a, o) => {
5
- let s = 0;
6
- if (n == null || isEmpty$1(n)) s = o;
7
- else for (let i of n.split(/(?=[+-])/g)) /^[+-]?\d+\.\d+$/.test(i) ? s += parseFloat(i) : /^[+-]?\d+$/.test(i) && (s += parseInt(i, 10));
8
- return a != null && (s = Math.min(a, s)), i != null && (s = Math.max(i, s)), s;
9
- }, integerCalculate = (n, i, a, o) => {
10
- let s = 0;
11
- if (n == null || isEmpty$1(n)) s = o;
12
- else for (let i of n.split(/(?=[+-])/g)) /^[+-]?\d+$/.test(i) && (s += parseInt(i, 10));
13
- return a != null && (s = Math.min(a, s)), i != null && (s = Math.max(i, s)), s;
14
- }, processFloat = (n) => {
15
- let i = n.replace(/[^0-9+.-]/g, "").replace(/([+-]){2,}/g, (n, i) => i), a = "", o = "", s = !1;
16
- for (let n = 0; n < i.length; n++) {
17
- let c = i[n];
18
- c >= "0" && c <= "9" ? o += c : c === "." ? s ||= (o === "" && (o = "0"), o += ".", !0) : (c === "+" || c === "-") && (o !== "" && (a += o), a += c, o = "", s = !1);
4
+ var floatCalculate = (t, o, s, c) => {
5
+ let l = 0;
6
+ if (t == null || isEmpty$1(t)) l = c;
7
+ else for (let o of t.split(/(?=[+-])/g)) /^[+-]?\d+\.\d+$/.test(o) ? l += parseFloat(o) : /^[+-]?\d+$/.test(o) && (l += parseInt(o, 10));
8
+ return s != null && (l = Math.min(s, l)), o != null && (l = Math.max(o, l)), l;
9
+ }, integerCalculate = (t, o, s, c) => {
10
+ let l = 0;
11
+ if (t == null || isEmpty$1(t)) l = c;
12
+ else for (let o of t.split(/(?=[+-])/g)) /^[+-]?\d+$/.test(o) && (l += parseInt(o, 10));
13
+ return s != null && (l = Math.min(s, l)), o != null && (l = Math.max(o, l)), l;
14
+ }, processFloat = (t) => {
15
+ let o = t.replace(/[^0-9+.-]/g, "").replace(/([+-]){2,}/g, (t, o) => o), s = "", c = "", l = !1;
16
+ for (let t = 0; t < o.length; t++) {
17
+ let u = o[t];
18
+ u >= "0" && u <= "9" ? c += u : u === "." ? l ||= (c === "" && (c = "0"), c += ".", !0) : (u === "+" || u === "-") && (c !== "" && (s += c), s += u, c = "", l = !1);
19
19
  }
20
- return a + o;
21
- }, processInteger = (n) => n.replace(/[^0-9+-]/g, "").replace(/\./g, "").replace(/([+-]){2,}/g, (n, i) => i.charAt(0)).replace(/^([+-]{2,})/, (n) => n.charAt(0));
22
- function isEmpty$1(n) {
23
- return n.length === 0 || !n.trim();
20
+ return s + c;
21
+ }, processInteger = (t) => t.replace(/[^0-9+-]/g, "").replace(/\./g, "").replace(/([+-]){2,}/g, (t, o) => o.charAt(0)).replace(/^([+-]{2,})/, (t) => t.charAt(0));
22
+ function isEmpty$1(t) {
23
+ return t.length === 0 || !t.trim();
24
24
  }
25
- function isPlainObject(n) {
26
- return typeof n == "object" && !!n && n.constructor === Object;
25
+ function isPlainObject(t) {
26
+ return typeof t == "object" && !!t && t.constructor === Object;
27
27
  }
28
- function isEmpty(n) {
29
- return Object.keys(n).length === 0;
28
+ function isEmpty(t) {
29
+ return Object.keys(t).length === 0;
30
30
  }
31
- function fastDeepMerge(n, i) {
32
- if (n === i || !isPlainObject(i) || isEmpty(i)) return n;
33
- if (!isPlainObject(n) || isEmpty(n)) return i;
34
- let a = { ...n }, o = [[a, i]];
35
- for (; o.length;) {
36
- let [n, i] = o.pop();
37
- for (let a in i) {
38
- if (!Object.prototype.hasOwnProperty.call(i, a)) continue;
39
- let s = i[a], c = n[a];
40
- if (isPlainObject(c) && isPlainObject(s)) {
41
- let i = { ...c };
42
- n[a] = i, o.push([i, s]);
43
- } else n[a] = s;
31
+ function fastDeepMerge(t, o) {
32
+ if (t === o || !isPlainObject(o) || isEmpty(o)) return t;
33
+ if (!isPlainObject(t) || isEmpty(t)) return o;
34
+ let s = { ...t }, c = [[s, o]];
35
+ for (; c.length;) {
36
+ let [t, o] = c.pop();
37
+ for (let s in o) {
38
+ if (!Object.prototype.hasOwnProperty.call(o, s)) continue;
39
+ let l = o[s], u = t[s];
40
+ if (isPlainObject(u) && isPlainObject(l)) {
41
+ let o = { ...u };
42
+ t[s] = o, c.push([o, l]);
43
+ } else t[s] = l;
44
44
  }
45
45
  }
46
- return a;
46
+ return s;
47
47
  }
48
- const FastStartContext = createContext(((n) => {
49
- let i = {
48
+ const FastStartContext = createContext(((t) => {
49
+ let o = {
50
50
  fullWidth: !0,
51
51
  autoComplete: "off",
52
52
  variant: "outlined",
53
53
  size: "small"
54
- }, a = Object.assign({
54
+ }, s = Object.assign({
55
55
  inputMode: "decimal",
56
56
  type: "text",
57
57
  step: .01,
58
58
  def: 0
59
- }, i), o = Object.assign({
59
+ }, o), c = Object.assign({
60
60
  inputMode: "numeric",
61
61
  type: "text",
62
62
  step: 1,
63
63
  def: 0
64
- }, i);
64
+ }, o);
65
65
  return fastDeepMerge({
66
66
  Single: {
67
- Float: { ...a },
68
- Integer: { ...o },
69
- Text: { ...i },
67
+ Float: { ...s },
68
+ Integer: { ...c },
69
+ Text: { ...o },
70
70
  Checkbox: { size: "small" },
71
71
  CheckIcon: { size: "small" }
72
72
  },
73
73
  Obj: {
74
- Float: { ...a },
75
- Integer: { ...o },
76
- Text: { ...i },
74
+ Float: { ...s },
75
+ Integer: { ...c },
76
+ Text: { ...o },
77
77
  Checkbox: { size: "small" },
78
78
  CheckIcon: { size: "small" }
79
79
  }
80
- }, n);
80
+ }, t);
81
81
  })());
82
- var useObjToSingle_default = (n, a, o) => [a?.[n], useCallback((i) => {
83
- o((a) => ({
84
- ...a,
85
- [n]: typeof i == "function" ? i(a?.[n]) : i
82
+ var FastStartProvider_default = (t) => {
83
+ let { defaultProps: o, ...s } = t;
84
+ return /* @__PURE__ */ jsx(FastStartContext, {
85
+ value: o,
86
+ children: /* @__PURE__ */ jsx(ThemeProvider, { ...s })
87
+ });
88
+ }, useObjToSingle_default = (t, s, c) => [s?.[t], useCallback((o) => {
89
+ c((s) => ({
90
+ ...s,
91
+ [t]: typeof o == "function" ? o(s?.[t]) : o
86
92
  }));
87
- }, [n, o])], ObjCheckbox_default = (n) => {
88
- let i = useContext(FastStartContext).Obj.Checkbox, { get: o, set: s, ...c } = fastDeepMerge(i, n), [l, u] = useObjToSingle_default(c.name, o, s);
93
+ }, [t, c])], ObjCheckbox_default = (t) => {
94
+ let o = useContext(FastStartContext).Obj.Checkbox, { get: c, set: l, ...u } = fastDeepMerge(o, t), [d, f] = useObjToSingle_default(u.name, c, l);
89
95
  return /* @__PURE__ */ jsx(SingleCheckbox_default, {
90
- get: l,
91
- set: u,
92
- ...c
96
+ get: d,
97
+ set: f,
98
+ ...u
93
99
  });
94
- }, ObjCheckIcon_default = (n) => {
95
- let i = useContext(FastStartContext).Obj.CheckIcon, { get: o, set: s, ...c } = fastDeepMerge(i, n), [l, u] = useObjToSingle_default(c.name, o, s);
100
+ }, ObjCheckIcon_default = (t) => {
101
+ let o = useContext(FastStartContext).Obj.CheckIcon, { get: c, set: l, ...u } = fastDeepMerge(o, t), [d, f] = useObjToSingle_default(u.name, c, l);
96
102
  return /* @__PURE__ */ jsx(SingleCheckIcon_default, {
97
- get: l,
98
- set: u,
99
- ...c
103
+ get: d,
104
+ set: f,
105
+ ...u
100
106
  });
101
- }, ObjFloat_default = (n) => {
102
- let i = useContext(FastStartContext).Obj.Float, { get: o, set: s, ...c } = fastDeepMerge(i, n), [l, u] = useObjToSingle_default(c.name, o, s);
107
+ }, ObjFloat_default = (t) => {
108
+ let o = useContext(FastStartContext).Obj.Float, { get: c, set: l, ...u } = fastDeepMerge(o, t), [d, f] = useObjToSingle_default(u.name, c, l);
103
109
  return /* @__PURE__ */ jsx(SingleFloat_default, {
104
- get: l,
105
- set: u,
106
- ...c
110
+ get: d,
111
+ set: f,
112
+ ...u
107
113
  });
108
- }, useSplitSingleNumberProps = (n, a, c, l, u = []) => {
109
- let [d, f] = useState(null), { get: p, set: m, errorData: h, minLength: g, maxLength: _, startAdornment: v, endAdornment: y, disappear: b, def: x, min: S, max: C, step: w, ...T } = useMemo(() => fastDeepMerge({ ...n }, a), [n, a]), E = useCallback((n) => l(n, S, C, x), [
110
- l,
111
- S,
112
- C,
113
- x
114
- ]), D = useCallback((n) => {
115
- let { value: i, valueAsNumber: a } = n.currentTarget;
116
- return isNaN(a) ? E(i) : a;
117
- }, [E]), O = useCallback((n) => {
118
- let i = n.currentTarget, a = c(i.value);
119
- return a != i.value && (i.value = a), a;
120
- }, [c]), k = useCallback(() => {
121
- d ?? f(p.toString());
122
- }, [d, p]), A = useCallback((n) => {
123
- let i = E(O(n));
124
- !isNaN(i) && p != i && m(i), f(n.currentTarget.value);
114
+ }, useSplitSingleNumberProps = (t, s, u, d, f = []) => {
115
+ let [p, m] = useState(null), { get: h, set: g, errorData: _, minLength: v, maxLength: y, startAdornment: b, endAdornment: x, disappear: S, def: C, min: w, max: T, step: E, ...D } = useMemo(() => fastDeepMerge({ ...t }, s), [t, s]), O = useCallback((t) => d(t, w, T, C), [
116
+ d,
117
+ w,
118
+ T,
119
+ C
120
+ ]), k = useCallback((t) => {
121
+ let { value: o, valueAsNumber: s } = t.currentTarget;
122
+ return isNaN(s) ? O(o) : s;
123
+ }, [O]), A = useCallback((t) => {
124
+ let o = t.currentTarget, s = u(o.value);
125
+ return s != o.value && (o.value = s), s;
126
+ }, [u]), j = useCallback(() => {
127
+ p ?? m(h.toString());
128
+ }, [p, h]), M = useCallback((t) => {
129
+ let o = O(A(t));
130
+ !isNaN(o) && h != o && g(o), m(t.currentTarget.value);
125
131
  }, [
132
+ A,
126
133
  O,
127
- E,
128
- m,
129
- p
130
- ]), j = useCallback((n) => {
131
- let { value: i } = n.currentTarget;
132
- f(null);
133
- let a = E(i);
134
- p != a && m(a);
134
+ g,
135
+ h
136
+ ]), N = useCallback((t) => {
137
+ let { value: o } = t.currentTarget;
138
+ m(null);
139
+ let s = O(o);
140
+ h != s && g(s);
135
141
  }, [
136
- E,
137
- p,
138
- m
139
- ]), M = useCallback((n) => {
140
- if (u.includes(n.key)) {
141
- n.preventDefault();
142
+ O,
143
+ h,
144
+ g
145
+ ]), P = useCallback((t) => {
146
+ if (f.includes(t.key)) {
147
+ t.preventDefault();
142
148
  return;
143
149
  }
144
- let i = n.currentTarget;
145
- if (n.key === "ArrowUp") {
146
- n.preventDefault();
147
- let a = D(n) + w;
148
- C != null && a > C ? i.value = C.toString() : i.value = digitRound(a, w).toString();
149
- } else if (n.key === "ArrowDown") {
150
- n.preventDefault();
151
- let a = D(n) - w;
152
- S != null && a < S ? i.value = S.toString() : i.value = digitRound(a, w).toString();
150
+ let o = t.currentTarget;
151
+ if (t.key === "ArrowUp") {
152
+ t.preventDefault();
153
+ let s = k(t) + E;
154
+ T != null && s > T ? o.value = T.toString() : o.value = digitRound(s, E).toString();
155
+ } else if (t.key === "ArrowDown") {
156
+ t.preventDefault();
157
+ let s = k(t) - E;
158
+ w != null && s < w ? o.value = w.toString() : o.value = digitRound(s, E).toString();
153
159
  }
154
160
  }, [
155
- D,
156
- C,
157
- S,
158
- w
159
- ]), N = useMemo(() => d ?? p, [p, d]), P = useMemo(() => d == null && (p == null || isNaN(p)) ? {} : { shrink: !0 }, [d, p]);
161
+ k,
162
+ T,
163
+ w,
164
+ E
165
+ ]), F = useMemo(() => p ?? h, [h, p]), I = useMemo(() => p == null && (h == null || isNaN(h)) ? {} : { shrink: !0 }, [p, h]);
160
166
  return fastDeepMerge({
161
- error: !!h,
162
- helperText: h,
163
- value: N,
164
- onChange: A,
165
- onSelect: k,
166
- onBlur: j,
167
+ error: !!_,
168
+ helperText: _,
169
+ value: F,
170
+ onChange: M,
171
+ onSelect: j,
172
+ onBlur: N,
167
173
  slotProps: {
168
174
  htmlInput: {
169
- step: w,
170
- min: S,
171
- max: C,
172
- minLength: g,
173
- maxLength: _,
174
- onKeyDown: M
175
+ step: E,
176
+ min: w,
177
+ max: T,
178
+ minLength: v,
179
+ maxLength: y,
180
+ onKeyDown: P
175
181
  },
176
- inputLabel: P,
182
+ inputLabel: I,
177
183
  input: {
178
- startAdornment: v,
179
- endAdornment: y
184
+ startAdornment: b,
185
+ endAdornment: x
180
186
  }
181
187
  }
182
- }, T);
183
- }, digitRound = (n, i) => {
184
- if (i = Math.abs(i), i === 0) return n;
185
- let a = -Math.floor(Math.log10(i));
186
- return a > 0 ? Number(Math.round(n * 10 ** a) / 10 ** a) : n;
187
- }, useSplitSingleFloatProps = (n, i) => useSplitSingleNumberProps(n, i, processFloat, floatCalculate), useSplitSingleIntegerProps = (n, i) => useSplitSingleNumberProps(n, i, processInteger, integerCalculate, [
188
+ }, D);
189
+ }, digitRound = (t, o) => {
190
+ if (o = Math.abs(o), o === 0) return t;
191
+ let s = -Math.floor(Math.log10(o));
192
+ return s > 0 ? Number(Math.round(t * 10 ** s) / 10 ** s) : t;
193
+ }, useSplitSingleFloatProps = (t, o) => useSplitSingleNumberProps(t, o, processFloat, floatCalculate), useSplitSingleIntegerProps = (t, o) => useSplitSingleNumberProps(t, o, processInteger, integerCalculate, [
188
194
  ".",
189
195
  "e",
190
196
  "E"
191
- ]), useSplitSingleTextProps_default = (n, a) => {
192
- let { get: o, set: s, errorData: c, minLength: l, maxLength: u, startAdornment: d, endAdornment: f, ...p } = fastDeepMerge({ ...n }, a), m = useCallback((n) => {
193
- s(n.currentTarget.value);
194
- }, [s]);
197
+ ]), useSplitSingleTextProps_default = (t, s) => {
198
+ let { get: c, set: l, errorData: u, minLength: d, maxLength: f, startAdornment: p, endAdornment: m, ...h } = fastDeepMerge({ ...t }, s), g = useCallback((t) => {
199
+ l(t.currentTarget.value);
200
+ }, [l]);
195
201
  return fastDeepMerge({
196
- error: !!c,
197
- helperText: c,
198
- value: o,
199
- onChange: m,
202
+ error: !!u,
203
+ helperText: u,
204
+ value: c,
205
+ onChange: g,
200
206
  slotProps: {
201
207
  htmlInput: {
202
- minLength: l,
203
- maxLength: u
208
+ minLength: d,
209
+ maxLength: f
204
210
  },
205
211
  input: {
206
- startAdornment: d,
207
- endAdornment: f
212
+ startAdornment: p,
213
+ endAdornment: m
208
214
  }
209
215
  }
210
- }, p);
211
- }, SingleInteger_default = (n) => {
212
- let i = useContext(FastStartContext).Single.Integer;
213
- return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleIntegerProps(i, n) });
214
- }, ObjInteger_default = (n) => {
215
- let i = useContext(FastStartContext).Obj.Integer, { get: o, set: s, ...c } = fastDeepMerge(i, n), [l, u] = useObjToSingle_default(c.name, o, s);
216
+ }, h);
217
+ }, SingleInteger_default = (t) => {
218
+ let o = useContext(FastStartContext).Single.Integer;
219
+ return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleIntegerProps(o, t) });
220
+ }, ObjInteger_default = (t) => {
221
+ let o = useContext(FastStartContext).Obj.Integer, { get: c, set: l, ...u } = fastDeepMerge(o, t), [d, f] = useObjToSingle_default(u.name, c, l);
216
222
  return /* @__PURE__ */ jsx(SingleInteger_default, {
217
- get: l,
218
- set: u,
219
- ...c
223
+ get: d,
224
+ set: f,
225
+ ...u
220
226
  });
221
- }, SingleText_default = (n) => {
222
- let i = useContext(FastStartContext).Single.Text;
223
- return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleTextProps_default(i, n) });
224
- }, ObjText_default = (n) => {
225
- let i = useContext(FastStartContext).Obj.Text, { get: o, set: s, ...c } = fastDeepMerge(i, n), [l, u] = useObjToSingle_default(c.name, o, s);
227
+ }, SingleText_default = (t) => {
228
+ let o = useContext(FastStartContext).Single.Text;
229
+ return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleTextProps_default(o, t) });
230
+ }, ObjText_default = (t) => {
231
+ let o = useContext(FastStartContext).Obj.Text, { get: c, set: l, ...u } = fastDeepMerge(o, t), [d, f] = useObjToSingle_default(u.name, c, l);
226
232
  return /* @__PURE__ */ jsx(SingleText_default, {
227
- get: l,
228
- set: u,
229
- ...c
233
+ get: d,
234
+ set: f,
235
+ ...u
230
236
  });
231
- }, SingleCheckbox_default = (n) => {
232
- let o = useContext(FastStartContext).Single.Checkbox, { get: s, set: u, label: d, ...p } = fastDeepMerge(o, n), m = useCallback(() => u((n) => !n), [u]);
233
- return d == null ? /* @__PURE__ */ jsx(Checkbox, {
234
- checked: s,
235
- onChange: m,
236
- ...p
237
+ }, SingleCheckbox_default = (t) => {
238
+ let c = useContext(FastStartContext).Single.Checkbox, { get: l, set: f, label: p, ...m } = fastDeepMerge(c, t), g = useCallback(() => f((t) => !t), [f]);
239
+ return p == null ? /* @__PURE__ */ jsx(Checkbox, {
240
+ checked: l,
241
+ onChange: g,
242
+ ...m
237
243
  }) : /* @__PURE__ */ jsx(FormControlLabel, {
238
- checked: s,
239
- label: d,
240
- onChange: m,
241
- control: /* @__PURE__ */ jsx(Checkbox, { ...p })
244
+ checked: l,
245
+ label: p,
246
+ onChange: g,
247
+ control: /* @__PURE__ */ jsx(Checkbox, { ...m })
242
248
  });
243
- }, SingleCheckIcon_default = (n) => {
244
- let o = useContext(FastStartContext).Single.CheckIcon, { get: s, set: c, on: l, off: d, ...p } = fastDeepMerge(o, n);
249
+ }, SingleCheckIcon_default = (t) => {
250
+ let c = useContext(FastStartContext).Single.CheckIcon, { get: l, set: u, on: d, off: p, ...m } = fastDeepMerge(c, t);
245
251
  return /* @__PURE__ */ jsx(IconButton, {
246
- onClick: useCallback(() => c((n) => !n), [c]),
247
- ...p,
248
- children: s ? l : d
252
+ onClick: useCallback(() => u((t) => !t), [u]),
253
+ ...m,
254
+ children: l ? d : p
249
255
  });
250
- }, SingleFloat_default = (n) => {
251
- let i = useContext(FastStartContext).Single.Float;
252
- return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleFloatProps(i, n) });
256
+ }, SingleFloat_default = (t) => {
257
+ let o = useContext(FastStartContext).Single.Float;
258
+ return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleFloatProps(o, t) });
253
259
  };
254
- export { ObjCheckIcon_default as ObjCheckIcon, ObjCheckbox_default as ObjCheckbox, ObjFloat_default as ObjFloat, ObjInteger_default as ObjInteger, ObjText_default as ObjText, SingleCheckIcon_default as SingleCheckIcon, SingleCheckbox_default as SingleCheckbox, SingleFloat_default as SingleFloat, SingleInteger_default as SingleInteger, SingleText_default as SingleText };
260
+ export { FastStartContext, FastStartProvider_default as FastStartProvider, ObjCheckIcon_default as ObjCheckIcon, ObjCheckbox_default as ObjCheckbox, ObjFloat_default as ObjFloat, ObjInteger_default as ObjInteger, ObjText_default as ObjText, SingleCheckIcon_default as SingleCheckIcon, SingleCheckbox_default as SingleCheckbox, SingleFloat_default as SingleFloat, SingleInteger_default as SingleInteger, SingleText_default as SingleText };
@@ -1,4 +1,5 @@
1
- export type { SingleNumberProps, SingleTextProps, SingleCheckboxProps, SingleCheckIconProps } from '../types';
1
+ export type { SingleNumberProps, SingleTextProps, SingleCheckboxProps, SingleCheckIconProps, FastStartDefaultProps, FastStartProviderProps } from '../types';
2
+ export { FastStartProvider, FastStartContext } from '../styles';
2
3
  export { default as ObjCheckbox } from './Obj/Checkbox/ObjCheckbox';
3
4
  export { default as ObjCheckIcon } from './Obj/Checkbox/ObjCheckIcon';
4
5
  export { default as ObjFloat } from './Obj/Textfield/ObjFloat';
@@ -1,5 +1,5 @@
1
1
  import type { FastStartProviderProps } from "../types";
2
- import { type Theme } from "@mui/material";
2
+ import type { DefaultTheme } from "@mui/system";
3
3
  export declare const FastStartContext: import("react").Context<import("../types").DeepPartial<{
4
4
  Single: {
5
5
  Float: import("../types").SingleNumberProps;
@@ -16,5 +16,5 @@ export declare const FastStartContext: import("react").Context<import("../types"
16
16
  CheckIcon: import("../types").ObjCheckIconProps<object>;
17
17
  };
18
18
  }>>;
19
- declare const FastStartProvider: <T = Theme>(props: FastStartProviderProps<T>) => import("react/jsx-runtime").JSX.Element;
19
+ declare const FastStartProvider: <T = DefaultTheme>(props: FastStartProviderProps<T>) => import("react/jsx-runtime").JSX.Element;
20
20
  export default FastStartProvider;
@@ -0,0 +1,2 @@
1
+ export { default as FastStartProvider, FastStartContext } from './FastStartProvider';
2
+ export { default as createDefaultProps } from './createDefaultProps';
package/package.json CHANGED
@@ -1,8 +1,14 @@
1
1
  {
2
2
  "name": "mui-fast-start",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Fast and easy-to-use MUI components for React",
5
- "keywords": ["mui", "material-ui", "react", "components", "form"],
5
+ "keywords": [
6
+ "mui",
7
+ "material-ui",
8
+ "react",
9
+ "components",
10
+ "form"
11
+ ],
6
12
  "author": "PersesTitan",
7
13
  "license": "MIT",
8
14
  "repository": {
@@ -20,7 +26,7 @@
20
26
  "sideEffects": false,
21
27
  "scripts": {
22
28
  "dev": "vite",
23
- "build": "vite build && tsc -p tsconfig.lib.json",
29
+ "build": "vite build && tsc -p tsconfig.lib.json && tsc-alias -p tsconfig.lib.json",
24
30
  "lint": "eslint .",
25
31
  "preview": "vite preview",
26
32
  "prepublishOnly": "npm run build"
@@ -30,14 +36,29 @@
30
36
  "import": "./dist/index.esm.js",
31
37
  "require": "./dist/index.cjs.js",
32
38
  "types": "./dist/types/components/index.d.ts"
39
+ },
40
+ "./styles": {
41
+ "import": "./dist/index.esm.js",
42
+ "require": "./dist/index.cjs.js",
43
+ "types": "./dist/types/styles/index.d.ts"
44
+ },
45
+ "./hooks": {
46
+ "import": "./dist/index.esm.js",
47
+ "require": "./dist/index.cjs.js",
48
+ "types": "./dist/types/hooks/index.d.ts"
49
+ },
50
+ "./types": {
51
+ "import": "./dist/index.esm.js",
52
+ "require": "./dist/index.cjs.js",
53
+ "types": "./dist/types/types/index.d.ts"
33
54
  }
34
55
  },
35
56
  "peerDependencies": {
36
- "react": ">=18",
37
- "react-dom": ">=18",
38
- "@mui/material": ">=6",
39
57
  "@emotion/react": ">=11",
40
- "@emotion/styled": ">=11"
58
+ "@emotion/styled": ">=11",
59
+ "@mui/material": ">=6",
60
+ "react": ">=18",
61
+ "react-dom": ">=18"
41
62
  },
42
63
  "devDependencies": {
43
64
  "@emotion/react": "^11.14.0",
@@ -54,6 +75,7 @@
54
75
  "globals": "^16.5.0",
55
76
  "react": "^19.2.0",
56
77
  "react-dom": "^19.2.0",
78
+ "tsc-alias": "^1.8.16",
57
79
  "typescript": "~5.9.3",
58
80
  "typescript-eslint": "^8.46.4",
59
81
  "vite": "npm:rolldown-vite@7.2.5"