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 +342 -59
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +189 -183
- package/dist/types/components/index.d.ts +2 -1
- package/dist/types/styles/FastStartProvider.d.ts +2 -2
- package/dist/types/styles/index.d.ts +2 -0
- package/package.json +29 -7
package/README.md
CHANGED
|
@@ -1,73 +1,356 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Mui Fast Start
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[한국어 (Korean)](./README_KR.md)
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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])],
|
|
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 = (
|
|
5
|
-
let
|
|
6
|
-
if (
|
|
7
|
-
else for (let
|
|
8
|
-
return
|
|
9
|
-
}, integerCalculate = (
|
|
10
|
-
let
|
|
11
|
-
if (
|
|
12
|
-
else for (let
|
|
13
|
-
return
|
|
14
|
-
}, processFloat = (
|
|
15
|
-
let
|
|
16
|
-
for (let
|
|
17
|
-
let
|
|
18
|
-
|
|
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
|
|
21
|
-
}, processInteger = (
|
|
22
|
-
function isEmpty$1(
|
|
23
|
-
return
|
|
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(
|
|
26
|
-
return typeof
|
|
25
|
+
function isPlainObject(t) {
|
|
26
|
+
return typeof t == "object" && !!t && t.constructor === Object;
|
|
27
27
|
}
|
|
28
|
-
function isEmpty(
|
|
29
|
-
return Object.keys(
|
|
28
|
+
function isEmpty(t) {
|
|
29
|
+
return Object.keys(t).length === 0;
|
|
30
30
|
}
|
|
31
|
-
function fastDeepMerge(
|
|
32
|
-
if (
|
|
33
|
-
if (!isPlainObject(
|
|
34
|
-
let
|
|
35
|
-
for (;
|
|
36
|
-
let [
|
|
37
|
-
for (let
|
|
38
|
-
if (!Object.prototype.hasOwnProperty.call(
|
|
39
|
-
let
|
|
40
|
-
if (isPlainObject(
|
|
41
|
-
let
|
|
42
|
-
|
|
43
|
-
} else
|
|
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
|
|
46
|
+
return s;
|
|
47
47
|
}
|
|
48
|
-
const FastStartContext = createContext(((
|
|
49
|
-
let
|
|
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
|
-
},
|
|
54
|
+
}, s = Object.assign({
|
|
55
55
|
inputMode: "decimal",
|
|
56
56
|
type: "text",
|
|
57
57
|
step: .01,
|
|
58
58
|
def: 0
|
|
59
|
-
},
|
|
59
|
+
}, o), c = Object.assign({
|
|
60
60
|
inputMode: "numeric",
|
|
61
61
|
type: "text",
|
|
62
62
|
step: 1,
|
|
63
63
|
def: 0
|
|
64
|
-
},
|
|
64
|
+
}, o);
|
|
65
65
|
return fastDeepMerge({
|
|
66
66
|
Single: {
|
|
67
|
-
Float: { ...
|
|
68
|
-
Integer: { ...
|
|
69
|
-
Text: { ...
|
|
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: { ...
|
|
75
|
-
Integer: { ...
|
|
76
|
-
Text: { ...
|
|
74
|
+
Float: { ...s },
|
|
75
|
+
Integer: { ...c },
|
|
76
|
+
Text: { ...o },
|
|
77
77
|
Checkbox: { size: "small" },
|
|
78
78
|
CheckIcon: { size: "small" }
|
|
79
79
|
}
|
|
80
|
-
},
|
|
80
|
+
}, t);
|
|
81
81
|
})());
|
|
82
|
-
var
|
|
83
|
-
o
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
}, [
|
|
88
|
-
let
|
|
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:
|
|
91
|
-
set:
|
|
92
|
-
...
|
|
96
|
+
get: d,
|
|
97
|
+
set: f,
|
|
98
|
+
...u
|
|
93
99
|
});
|
|
94
|
-
}, ObjCheckIcon_default = (
|
|
95
|
-
let
|
|
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:
|
|
98
|
-
set:
|
|
99
|
-
...
|
|
103
|
+
get: d,
|
|
104
|
+
set: f,
|
|
105
|
+
...u
|
|
100
106
|
});
|
|
101
|
-
}, ObjFloat_default = (
|
|
102
|
-
let
|
|
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:
|
|
105
|
-
set:
|
|
106
|
-
...
|
|
110
|
+
get: d,
|
|
111
|
+
set: f,
|
|
112
|
+
...u
|
|
107
113
|
});
|
|
108
|
-
}, useSplitSingleNumberProps = (
|
|
109
|
-
let [
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
]),
|
|
115
|
-
let { value:
|
|
116
|
-
return isNaN(
|
|
117
|
-
}, [
|
|
118
|
-
let
|
|
119
|
-
return
|
|
120
|
-
}, [
|
|
121
|
-
|
|
122
|
-
}, [
|
|
123
|
-
let
|
|
124
|
-
!isNaN(
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
]),
|
|
140
|
-
if (
|
|
141
|
-
|
|
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
|
|
145
|
-
if (
|
|
146
|
-
|
|
147
|
-
let
|
|
148
|
-
|
|
149
|
-
} else if (
|
|
150
|
-
|
|
151
|
-
let
|
|
152
|
-
|
|
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
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
]),
|
|
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: !!
|
|
162
|
-
helperText:
|
|
163
|
-
value:
|
|
164
|
-
onChange:
|
|
165
|
-
onSelect:
|
|
166
|
-
onBlur:
|
|
167
|
+
error: !!_,
|
|
168
|
+
helperText: _,
|
|
169
|
+
value: F,
|
|
170
|
+
onChange: M,
|
|
171
|
+
onSelect: j,
|
|
172
|
+
onBlur: N,
|
|
167
173
|
slotProps: {
|
|
168
174
|
htmlInput: {
|
|
169
|
-
step:
|
|
170
|
-
min:
|
|
171
|
-
max:
|
|
172
|
-
minLength:
|
|
173
|
-
maxLength:
|
|
174
|
-
onKeyDown:
|
|
175
|
+
step: E,
|
|
176
|
+
min: w,
|
|
177
|
+
max: T,
|
|
178
|
+
minLength: v,
|
|
179
|
+
maxLength: y,
|
|
180
|
+
onKeyDown: P
|
|
175
181
|
},
|
|
176
|
-
inputLabel:
|
|
182
|
+
inputLabel: I,
|
|
177
183
|
input: {
|
|
178
|
-
startAdornment:
|
|
179
|
-
endAdornment:
|
|
184
|
+
startAdornment: b,
|
|
185
|
+
endAdornment: x
|
|
180
186
|
}
|
|
181
187
|
}
|
|
182
|
-
},
|
|
183
|
-
}, digitRound = (
|
|
184
|
-
if (
|
|
185
|
-
let
|
|
186
|
-
return
|
|
187
|
-
}, useSplitSingleFloatProps = (
|
|
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 = (
|
|
192
|
-
let { get:
|
|
193
|
-
|
|
194
|
-
}, [
|
|
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: !!
|
|
197
|
-
helperText:
|
|
198
|
-
value:
|
|
199
|
-
onChange:
|
|
202
|
+
error: !!u,
|
|
203
|
+
helperText: u,
|
|
204
|
+
value: c,
|
|
205
|
+
onChange: g,
|
|
200
206
|
slotProps: {
|
|
201
207
|
htmlInput: {
|
|
202
|
-
minLength:
|
|
203
|
-
maxLength:
|
|
208
|
+
minLength: d,
|
|
209
|
+
maxLength: f
|
|
204
210
|
},
|
|
205
211
|
input: {
|
|
206
|
-
startAdornment:
|
|
207
|
-
endAdornment:
|
|
212
|
+
startAdornment: p,
|
|
213
|
+
endAdornment: m
|
|
208
214
|
}
|
|
209
215
|
}
|
|
210
|
-
},
|
|
211
|
-
}, SingleInteger_default = (
|
|
212
|
-
let
|
|
213
|
-
return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleIntegerProps(
|
|
214
|
-
}, ObjInteger_default = (
|
|
215
|
-
let
|
|
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:
|
|
218
|
-
set:
|
|
219
|
-
...
|
|
223
|
+
get: d,
|
|
224
|
+
set: f,
|
|
225
|
+
...u
|
|
220
226
|
});
|
|
221
|
-
}, SingleText_default = (
|
|
222
|
-
let
|
|
223
|
-
return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleTextProps_default(
|
|
224
|
-
}, ObjText_default = (
|
|
225
|
-
let
|
|
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:
|
|
228
|
-
set:
|
|
229
|
-
...
|
|
233
|
+
get: d,
|
|
234
|
+
set: f,
|
|
235
|
+
...u
|
|
230
236
|
});
|
|
231
|
-
}, SingleCheckbox_default = (
|
|
232
|
-
let
|
|
233
|
-
return
|
|
234
|
-
checked:
|
|
235
|
-
onChange:
|
|
236
|
-
...
|
|
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:
|
|
239
|
-
label:
|
|
240
|
-
onChange:
|
|
241
|
-
control: /* @__PURE__ */ jsx(Checkbox, { ...
|
|
244
|
+
checked: l,
|
|
245
|
+
label: p,
|
|
246
|
+
onChange: g,
|
|
247
|
+
control: /* @__PURE__ */ jsx(Checkbox, { ...m })
|
|
242
248
|
});
|
|
243
|
-
}, SingleCheckIcon_default = (
|
|
244
|
-
let
|
|
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(() =>
|
|
247
|
-
...
|
|
248
|
-
children:
|
|
252
|
+
onClick: useCallback(() => u((t) => !t), [u]),
|
|
253
|
+
...m,
|
|
254
|
+
children: l ? d : p
|
|
249
255
|
});
|
|
250
|
-
}, SingleFloat_default = (
|
|
251
|
-
let
|
|
252
|
-
return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleFloatProps(
|
|
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 {
|
|
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 =
|
|
19
|
+
declare const FastStartProvider: <T = DefaultTheme>(props: FastStartProviderProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
20
20
|
export default FastStartProvider;
|
package/package.json
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mui-fast-start",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Fast and easy-to-use MUI components for React",
|
|
5
|
-
"keywords": [
|
|
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"
|