mui-fast-start 0.1.4 → 0.2.0
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 +356 -356
- package/README_KR.md +355 -0
- package/dist/components/Obj/Checkbox/ObjCheckIcon.d.ts +3 -0
- package/dist/components/Obj/Checkbox/ObjCheckIcon.d.ts.map +1 -0
- package/dist/components/Obj/Checkbox/ObjCheckbox.d.ts +3 -0
- package/dist/components/Obj/Checkbox/ObjCheckbox.d.ts.map +1 -0
- package/dist/components/Obj/Textfield/ObjFloat.d.ts +3 -0
- package/dist/components/Obj/Textfield/ObjFloat.d.ts.map +1 -0
- package/dist/components/Obj/Textfield/ObjInteger.d.ts +3 -0
- package/dist/components/Obj/Textfield/ObjInteger.d.ts.map +1 -0
- package/dist/components/Obj/Textfield/ObjText.d.ts +3 -0
- package/dist/components/Obj/Textfield/ObjText.d.ts.map +1 -0
- package/dist/components/Single/Checkbox/SingleCheckIcon.d.ts +3 -0
- package/dist/components/Single/Checkbox/SingleCheckIcon.d.ts.map +1 -0
- package/dist/components/Single/Checkbox/SingleCheckbox.d.ts +3 -0
- package/dist/components/Single/Checkbox/SingleCheckbox.d.ts.map +1 -0
- package/dist/components/Single/TextField/SingleFloat.d.ts +3 -0
- package/dist/components/Single/TextField/SingleFloat.d.ts.map +1 -0
- package/dist/components/Single/TextField/SingleInteger.d.ts +3 -0
- package/dist/components/Single/TextField/SingleInteger.d.ts.map +1 -0
- package/dist/components/Single/TextField/SingleText.d.ts +3 -0
- package/dist/components/Single/TextField/SingleText.d.ts.map +1 -0
- package/dist/components/index.d.ts +11 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/{types/hooks → hooks}/splits/useSplitSingleNumberProps.d.ts +2 -1
- package/dist/hooks/splits/useSplitSingleNumberProps.d.ts.map +1 -0
- package/dist/{types/hooks → hooks}/splits/useSplitSingleTextProps.d.ts +2 -1
- package/dist/hooks/splits/useSplitSingleTextProps.d.ts.map +1 -0
- package/dist/{types/hooks → hooks}/state/useObjToSingle.d.ts +2 -1
- package/dist/hooks/state/useObjToSingle.d.ts.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +278 -0
- package/dist/styles/FastStartProvider.d.ts +21 -0
- package/dist/styles/FastStartProvider.d.ts.map +1 -0
- package/dist/styles/createDefaultProps.d.ts +3 -0
- package/dist/styles/createDefaultProps.d.ts.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/{types/props.d.ts → props.d.ts} +8 -1
- package/dist/types/props.d.ts.map +1 -0
- package/dist/types/{types/provider.d.ts → provider.d.ts} +2 -1
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/{types/types.d.ts → types.d.ts} +1 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/number/calculate.d.ts +7 -0
- package/dist/utils/number/calculate.d.ts.map +1 -0
- package/dist/utils/object/error.d.ts +4 -0
- package/dist/utils/object/error.d.ts.map +1 -0
- package/dist/utils/object/merge.d.ts +4 -0
- package/dist/utils/object/merge.d.ts.map +1 -0
- package/eslint.config.js +23 -0
- package/examples/basic/README.md +73 -0
- package/examples/basic/eslint.config.js +23 -0
- package/examples/basic/index.html +13 -0
- package/examples/basic/package.json +37 -0
- package/examples/basic/src/App.css +5 -0
- package/examples/basic/src/App.tsx +28 -0
- package/examples/basic/src/index.css +30 -0
- package/examples/basic/src/main.tsx +57 -0
- package/examples/basic/src/pages/ObjPage.tsx +93 -0
- package/examples/basic/src/pages/SinglePage.tsx +70 -0
- package/examples/basic/tsconfig.app.json +38 -0
- package/examples/basic/tsconfig.json +7 -0
- package/examples/basic/tsconfig.node.json +35 -0
- package/examples/basic/vite.config.ts +28 -0
- package/mui-fast-start-0.1.5.tgz +0 -0
- package/package.json +67 -85
- package/src/components/Obj/Checkbox/ObjCheckIcon.tsx +19 -0
- package/src/components/Obj/Checkbox/ObjCheckbox.tsx +19 -0
- package/src/components/Obj/Textfield/ObjFloat.tsx +22 -0
- package/src/components/Obj/Textfield/ObjInteger.tsx +22 -0
- package/src/components/Obj/Textfield/ObjText.tsx +22 -0
- package/src/components/Single/Checkbox/SingleCheckIcon.tsx +25 -0
- package/src/components/Single/Checkbox/SingleCheckbox.tsx +31 -0
- package/src/components/Single/TextField/SingleFloat.tsx +12 -0
- package/src/components/Single/TextField/SingleInteger.tsx +12 -0
- package/src/components/Single/TextField/SingleText.tsx +12 -0
- package/src/components/index.ts +13 -0
- package/src/hooks/splits/useSplitSingleNumberProps.ts +159 -0
- package/src/hooks/splits/useSplitSingleTextProps.ts +36 -0
- package/src/hooks/state/useObjToSingle.ts +23 -0
- package/src/index.ts +8 -0
- package/src/styles/FastStartProvider.tsx +26 -0
- package/src/styles/createDefaultProps.ts +45 -0
- package/src/types/props.ts +67 -0
- package/src/types/provider.ts +47 -0
- package/src/types/types.ts +9 -0
- package/src/utils/number/calculate.ts +102 -0
- package/src/utils/object/error.ts +14 -0
- package/src/utils/object/merge.ts +47 -0
- package/src.zip +0 -0
- package/tsconfig.json +34 -0
- package/tsconfig.lib.json +9 -0
- package/vite.config.ts +35 -0
- package/dist/index.cjs.js +0 -1
- package/dist/index.esm.js +0 -266
- package/dist/types/components/Obj/Checkbox/ObjCheckIcon.d.ts +0 -3
- package/dist/types/components/Obj/Checkbox/ObjCheckbox.d.ts +0 -3
- package/dist/types/components/Obj/Textfield/ObjFloat.d.ts +0 -3
- package/dist/types/components/Obj/Textfield/ObjInteger.d.ts +0 -3
- package/dist/types/components/Obj/Textfield/ObjText.d.ts +0 -3
- package/dist/types/components/Single/Checkbox/SingleCheckIcon.d.ts +0 -3
- package/dist/types/components/Single/Checkbox/SingleCheckbox.d.ts +0 -3
- package/dist/types/components/Single/TextField/SingleFloat.d.ts +0 -3
- package/dist/types/components/Single/TextField/SingleInteger.d.ts +0 -3
- package/dist/types/components/Single/TextField/SingleText.d.ts +0 -3
- package/dist/types/components/index.d.ts +0 -12
- package/dist/types/styles/FastStartProvider.d.ts +0 -20
- package/dist/types/styles/createDefaultProps.d.ts +0 -3
- package/dist/types/styles/index.d.ts +0 -2
- package/dist/types/utils/number/calculate.d.ts +0 -5
- package/dist/types/utils/object/merge.d.ts +0 -3
- /package/{dist/types/hooks/index.d.ts → src/hooks/index.ts} +0 -0
- /package/{dist/types/types/index.d.ts → src/types/index.ts} +0 -0
- /package/{dist/types/utils/index.d.ts → src/utils/index.ts} +0 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { createContext, useCallback, useContext, useMemo, useState } from "react";
|
|
2
|
+
import { Checkbox, FormControlLabel, IconButton, TextField, ThemeProvider } from "@mui/material";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
var floatCalculate = (e, c, l, u) => {
|
|
5
|
+
let d = 0;
|
|
6
|
+
if (e == null || isEmpty$1(e)) d = u;
|
|
7
|
+
else for (let c of e.split(/(?=[+-])/g)) /^[+-]?\d+\.\d+$/.test(c) ? d += parseFloat(c) : /^[+-]?\d+$/.test(c) && (d += parseInt(c, 10));
|
|
8
|
+
return d != null && (l != null && (d = Math.min(l, d)), c != null && (d = Math.min(c, d))), d;
|
|
9
|
+
}, integerCalculate = (e, c, l, u) => {
|
|
10
|
+
let d = 0;
|
|
11
|
+
if (e == null || isEmpty$1(e)) d = u;
|
|
12
|
+
else for (let c of e.split(/(?=[+-])/g)) /^[+-]?\d+$/.test(c) && (d += parseInt(c, 10));
|
|
13
|
+
return d != null && (l != null && (d = Math.min(l, d)), c != null && (d = Math.min(c, d))), d;
|
|
14
|
+
}, processFloat = (e) => {
|
|
15
|
+
let c = e.replace(/[^0-9+.-]/g, "").replace(/([+-]){2,}/g, (e, c) => c), l = "", u = "", d = !1;
|
|
16
|
+
for (let e = 0; e < c.length; e++) {
|
|
17
|
+
let f = c[e];
|
|
18
|
+
f >= "0" && f <= "9" ? u += f : f === "." ? d ||= (u === "" && (u = "0"), u += ".", !0) : (f === "+" || f === "-") && (u !== "" && (l += u), l += f, u = "", d = !1);
|
|
19
|
+
}
|
|
20
|
+
return l + u;
|
|
21
|
+
}, processInteger = (e) => e.replace(/[^0-9+-]/g, "").replace(/\./g, "").replace(/([+-]){2,}/g, (e, c) => c.charAt(0)).replace(/^([+-]{2,})/, (e) => e.charAt(0));
|
|
22
|
+
function isEmpty$1(e) {
|
|
23
|
+
return e.length === 0 || !e.trim();
|
|
24
|
+
}
|
|
25
|
+
function isPlainObject(e) {
|
|
26
|
+
return typeof e == "object" && !!e && e.constructor === Object;
|
|
27
|
+
}
|
|
28
|
+
function isEmpty(e) {
|
|
29
|
+
return Object.keys(e).length === 0;
|
|
30
|
+
}
|
|
31
|
+
function fastDeepMerge(e, c) {
|
|
32
|
+
if (e === c || !isPlainObject(c) || isEmpty(c)) return e;
|
|
33
|
+
if (!isPlainObject(e) || isEmpty(e)) return c;
|
|
34
|
+
let l = { ...e }, u = [[l, c]];
|
|
35
|
+
for (; u.length;) {
|
|
36
|
+
let [e, c] = u.pop();
|
|
37
|
+
for (let l in c) {
|
|
38
|
+
if (!Object.prototype.hasOwnProperty.call(c, l)) continue;
|
|
39
|
+
let d = c[l], f = e[l];
|
|
40
|
+
if (isPlainObject(f) && isPlainObject(d)) {
|
|
41
|
+
let c = { ...f };
|
|
42
|
+
e[l] = c, u.push([c, d]);
|
|
43
|
+
} else e[l] = d;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return l;
|
|
47
|
+
}
|
|
48
|
+
const createDefaultProps = (e) => {
|
|
49
|
+
let c = {
|
|
50
|
+
fullWidth: !0,
|
|
51
|
+
autoComplete: "off",
|
|
52
|
+
variant: "outlined",
|
|
53
|
+
size: "small"
|
|
54
|
+
}, l = Object.assign({
|
|
55
|
+
inputMode: "decimal",
|
|
56
|
+
type: "text",
|
|
57
|
+
step: .01,
|
|
58
|
+
def: 0
|
|
59
|
+
}, c), u = Object.assign({
|
|
60
|
+
inputMode: "numeric",
|
|
61
|
+
type: "text",
|
|
62
|
+
step: 1,
|
|
63
|
+
def: 0
|
|
64
|
+
}, c);
|
|
65
|
+
return fastDeepMerge({
|
|
66
|
+
Single: {
|
|
67
|
+
Float: { ...l },
|
|
68
|
+
Integer: { ...u },
|
|
69
|
+
Text: { ...c },
|
|
70
|
+
Checkbox: { size: "small" },
|
|
71
|
+
CheckIcon: { size: "small" }
|
|
72
|
+
},
|
|
73
|
+
Obj: {
|
|
74
|
+
Float: { ...l },
|
|
75
|
+
Integer: { ...u },
|
|
76
|
+
Text: { ...c },
|
|
77
|
+
Checkbox: { size: "small" },
|
|
78
|
+
CheckIcon: { size: "small" }
|
|
79
|
+
}
|
|
80
|
+
}, e);
|
|
81
|
+
};
|
|
82
|
+
var FastStartContext = createContext(createDefaultProps()), FastStartProvider = (e) => {
|
|
83
|
+
let { defaultProps: c, ...l } = e;
|
|
84
|
+
return /* @__PURE__ */ jsx(FastStartContext, {
|
|
85
|
+
value: c,
|
|
86
|
+
children: /* @__PURE__ */ jsx(ThemeProvider, { ...l })
|
|
87
|
+
});
|
|
88
|
+
}, useObjToSingle_default = (e, l, u) => [l?.[e], useCallback((c) => {
|
|
89
|
+
u((l) => {
|
|
90
|
+
let u = typeof c == "function" ? c(l?.[e]) : c;
|
|
91
|
+
return {
|
|
92
|
+
...l,
|
|
93
|
+
[e]: u
|
|
94
|
+
};
|
|
95
|
+
});
|
|
96
|
+
}, [e, u])];
|
|
97
|
+
const SingleCheckbox = (e) => {
|
|
98
|
+
let u = useContext(FastStartContext)?.Single?.Checkbox, { get: d, set: m, label: h, ...g } = fastDeepMerge(u, e), v = useCallback(() => m((e) => !e), [m]);
|
|
99
|
+
return h == null ? /* @__PURE__ */ jsx(Checkbox, {
|
|
100
|
+
checked: d,
|
|
101
|
+
onChange: v,
|
|
102
|
+
...g
|
|
103
|
+
}) : /* @__PURE__ */ jsx(FormControlLabel, {
|
|
104
|
+
checked: d,
|
|
105
|
+
label: h,
|
|
106
|
+
onChange: v,
|
|
107
|
+
control: /* @__PURE__ */ jsx(Checkbox, { ...g })
|
|
108
|
+
});
|
|
109
|
+
}, ObjCheckbox = (e) => {
|
|
110
|
+
let c = useContext(FastStartContext)?.Obj?.Checkbox, { get: u, set: d, ...f } = fastDeepMerge(c, e), [p, m] = useObjToSingle_default(f.name, u, d);
|
|
111
|
+
return /* @__PURE__ */ jsx(SingleCheckbox, {
|
|
112
|
+
get: p,
|
|
113
|
+
set: m,
|
|
114
|
+
...f
|
|
115
|
+
});
|
|
116
|
+
}, SingleCheckIcon = (e) => {
|
|
117
|
+
let u = useContext(FastStartContext)?.Single?.CheckIcon, { get: d, set: f, on: p, off: h, ...g } = fastDeepMerge(u, e);
|
|
118
|
+
return /* @__PURE__ */ jsx(IconButton, {
|
|
119
|
+
onClick: useCallback(() => f((e) => !e), [f]),
|
|
120
|
+
...g,
|
|
121
|
+
children: d ? p : h
|
|
122
|
+
});
|
|
123
|
+
}, ObjCheckIcon = (e) => {
|
|
124
|
+
let c = useContext(FastStartContext)?.Obj?.CheckIcon, { get: u, set: d, ...f } = fastDeepMerge(c, e), [p, m] = useObjToSingle_default(f.name, u, d);
|
|
125
|
+
return /* @__PURE__ */ jsx(SingleCheckIcon, {
|
|
126
|
+
get: p,
|
|
127
|
+
set: m,
|
|
128
|
+
...f
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
var useSplitSingleNumberProps = (e, l, f, p, m = []) => {
|
|
132
|
+
let [h, g] = useState(null), { get: _, set: v, errorData: y, minLength: b, maxLength: x, startAdornment: S, endAdornment: C, disappear: w, def: T, min: E, max: D, step: O, ...k } = useMemo(() => fastDeepMerge({ ...e }, l), [e, l]), A = useCallback((e) => p(e, E, D, T), [
|
|
133
|
+
p,
|
|
134
|
+
E,
|
|
135
|
+
D,
|
|
136
|
+
T
|
|
137
|
+
]), j = useCallback((e) => {
|
|
138
|
+
let { value: c, valueAsNumber: l } = e.currentTarget;
|
|
139
|
+
return isNaN(l) ? A(c) : l;
|
|
140
|
+
}, [A]), M = useCallback((e) => {
|
|
141
|
+
let c = e.currentTarget, l = f(c.value);
|
|
142
|
+
return l != c.value && (c.value = l), l;
|
|
143
|
+
}, [f]), N = useCallback(() => {
|
|
144
|
+
h ?? g(_.toString());
|
|
145
|
+
}, [h, _]), P = useCallback((e) => {
|
|
146
|
+
let c = A(M(e));
|
|
147
|
+
c != null && !isNaN(c) && _ != c && v(c), g(e.currentTarget.value);
|
|
148
|
+
}, [
|
|
149
|
+
M,
|
|
150
|
+
A,
|
|
151
|
+
_,
|
|
152
|
+
v
|
|
153
|
+
]), F = useCallback((e) => {
|
|
154
|
+
let { value: c } = e.currentTarget;
|
|
155
|
+
g(null);
|
|
156
|
+
let l = A(c);
|
|
157
|
+
_ != l && v(l);
|
|
158
|
+
}, [
|
|
159
|
+
A,
|
|
160
|
+
_,
|
|
161
|
+
v
|
|
162
|
+
]), I = useCallback((e) => {
|
|
163
|
+
if (m.includes(e.key) || O == null) {
|
|
164
|
+
e.preventDefault();
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
let c = e.currentTarget;
|
|
168
|
+
if (e.key === "ArrowUp") {
|
|
169
|
+
e.preventDefault();
|
|
170
|
+
let l = j(e);
|
|
171
|
+
if (l == null) return;
|
|
172
|
+
let u = l + O;
|
|
173
|
+
D != null && u > D ? c.value = D.toString() : c.value = digitRound(u, O).toString();
|
|
174
|
+
} else if (e.key === "ArrowDown") {
|
|
175
|
+
e.preventDefault();
|
|
176
|
+
let l = j(e);
|
|
177
|
+
if (l == null) return;
|
|
178
|
+
let u = l - O;
|
|
179
|
+
E != null && u < E ? c.value = E.toString() : c.value = digitRound(u, O).toString();
|
|
180
|
+
}
|
|
181
|
+
}, [
|
|
182
|
+
j,
|
|
183
|
+
m,
|
|
184
|
+
D,
|
|
185
|
+
E,
|
|
186
|
+
O
|
|
187
|
+
]), L = useMemo(() => h ?? _, [_, h]), R = useMemo(() => h == null && (!_ || isNaN(_)) ? {} : { shrink: !0 }, [h, _]);
|
|
188
|
+
return fastDeepMerge({
|
|
189
|
+
error: !!y,
|
|
190
|
+
helperText: y,
|
|
191
|
+
value: L,
|
|
192
|
+
onChange: P,
|
|
193
|
+
onSelect: N,
|
|
194
|
+
onBlur: F,
|
|
195
|
+
slotProps: {
|
|
196
|
+
htmlInput: {
|
|
197
|
+
step: O,
|
|
198
|
+
min: E,
|
|
199
|
+
max: D,
|
|
200
|
+
minLength: b,
|
|
201
|
+
maxLength: x,
|
|
202
|
+
onKeyDown: I
|
|
203
|
+
},
|
|
204
|
+
inputLabel: R,
|
|
205
|
+
input: {
|
|
206
|
+
startAdornment: S,
|
|
207
|
+
endAdornment: C
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}, k);
|
|
211
|
+
}, digitRound = (e, c) => {
|
|
212
|
+
if (c = Math.abs(c), c === 0) return e;
|
|
213
|
+
let l = -Math.floor(Math.log10(c));
|
|
214
|
+
return l > 0 ? Number(Math.round(e * 10 ** l) / 10 ** l) : e;
|
|
215
|
+
}, useSplitSingleFloatProps = (e, c) => useSplitSingleNumberProps(e, c, processFloat, floatCalculate), useSplitSingleIntegerProps = (e, c) => useSplitSingleNumberProps(e, c, processInteger, integerCalculate, [
|
|
216
|
+
".",
|
|
217
|
+
"e",
|
|
218
|
+
"E"
|
|
219
|
+
]), useSplitSingleTextProps_default = (e, l) => {
|
|
220
|
+
let { get: u, set: d, errorData: f, minLength: p, maxLength: m, startAdornment: h, endAdornment: g, ..._ } = fastDeepMerge({ ...e }, l), v = useCallback((e) => {
|
|
221
|
+
d(e.currentTarget.value);
|
|
222
|
+
}, [d]);
|
|
223
|
+
return fastDeepMerge({
|
|
224
|
+
error: !!f,
|
|
225
|
+
helperText: f,
|
|
226
|
+
value: u,
|
|
227
|
+
onChange: v,
|
|
228
|
+
slotProps: {
|
|
229
|
+
htmlInput: {
|
|
230
|
+
minLength: p,
|
|
231
|
+
maxLength: m
|
|
232
|
+
},
|
|
233
|
+
input: {
|
|
234
|
+
startAdornment: h,
|
|
235
|
+
endAdornment: g
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}, _);
|
|
239
|
+
};
|
|
240
|
+
const SingleFloat = (e) => {
|
|
241
|
+
let c = useContext(FastStartContext)?.Single?.Float;
|
|
242
|
+
return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleFloatProps(c, e) });
|
|
243
|
+
};
|
|
244
|
+
function errorObjectToString(e, c) {
|
|
245
|
+
return e != null && typeof c == "object" ? c[e] : void 0;
|
|
246
|
+
}
|
|
247
|
+
const ObjFloat = (e) => {
|
|
248
|
+
let c = useContext(FastStartContext)?.Obj?.Float, { get: u, set: d, errorData: f, ...p } = fastDeepMerge(c, e), [m, h] = useObjToSingle_default(p.name, u, d);
|
|
249
|
+
return /* @__PURE__ */ jsx(SingleFloat, {
|
|
250
|
+
get: m,
|
|
251
|
+
set: h,
|
|
252
|
+
errorData: errorObjectToString(p.name, f),
|
|
253
|
+
...p
|
|
254
|
+
});
|
|
255
|
+
}, SingleInteger = (e) => {
|
|
256
|
+
let c = useContext(FastStartContext)?.Single?.Integer;
|
|
257
|
+
return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleIntegerProps(c, e) });
|
|
258
|
+
}, ObjInteger = (e) => {
|
|
259
|
+
let c = useContext(FastStartContext)?.Obj?.Integer, { get: u, set: d, errorData: f, ...p } = fastDeepMerge(c, e), [m, h] = useObjToSingle_default(p.name, u, d);
|
|
260
|
+
return /* @__PURE__ */ jsx(SingleInteger, {
|
|
261
|
+
get: m,
|
|
262
|
+
set: h,
|
|
263
|
+
errorData: errorObjectToString(p.name, f),
|
|
264
|
+
...p
|
|
265
|
+
});
|
|
266
|
+
}, SingleText = (e) => {
|
|
267
|
+
let c = useContext(FastStartContext)?.Single?.Text;
|
|
268
|
+
return /* @__PURE__ */ jsx(TextField, { ...useSplitSingleTextProps_default(c, e) });
|
|
269
|
+
}, ObjText = (e) => {
|
|
270
|
+
let c = useContext(FastStartContext)?.Obj?.Text, { get: u, set: d, errorData: f, ...p } = fastDeepMerge(c, e), [m, h] = useObjToSingle_default(p.name, u, d);
|
|
271
|
+
return /* @__PURE__ */ jsx(SingleText, {
|
|
272
|
+
get: m,
|
|
273
|
+
set: h,
|
|
274
|
+
errorData: errorObjectToString(p.name, f),
|
|
275
|
+
...p
|
|
276
|
+
});
|
|
277
|
+
};
|
|
278
|
+
export { FastStartContext, FastStartProvider, ObjCheckIcon, ObjCheckbox, ObjFloat, ObjInteger, ObjText, SingleCheckIcon, SingleCheckbox, SingleFloat, SingleInteger, SingleText, createDefaultProps };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DefaultTheme } from "@mui/system";
|
|
2
|
+
import { FastStartProviderProps } from "../types";
|
|
3
|
+
declare const FastStartContext: import("react").Context<import("..").DeepPartial<{
|
|
4
|
+
Single: {
|
|
5
|
+
Float: import("..").SingleNumberProps;
|
|
6
|
+
Integer: import("..").SingleNumberProps;
|
|
7
|
+
Text: import("..").SingleTextProps;
|
|
8
|
+
Checkbox: import("..").SingleCheckboxProps;
|
|
9
|
+
CheckIcon: import("..").SingleCheckIconProps;
|
|
10
|
+
};
|
|
11
|
+
Obj: {
|
|
12
|
+
Float: import("..").ObjNumberProps<object>;
|
|
13
|
+
Integer: import("..").ObjNumberProps<object>;
|
|
14
|
+
Text: import("..").ObjTextProps<object>;
|
|
15
|
+
Checkbox: import("..").ObjCheckboxProps<object>;
|
|
16
|
+
CheckIcon: import("..").ObjCheckIconProps<object>;
|
|
17
|
+
};
|
|
18
|
+
}>>;
|
|
19
|
+
declare const FastStartProvider: <T = DefaultTheme>(props: FastStartProviderProps<T>) => import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export { FastStartContext, FastStartProvider };
|
|
21
|
+
//# sourceMappingURL=FastStartProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FastStartProvider.d.ts","sourceRoot":"","sources":["../../src/styles/FastStartProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAwB,sBAAsB,EAAC,MAAM,UAAU,CAAC;AAGvE,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;GAA6D,CAAC;AAEpF,QAAA,MAAM,iBAAiB,GAAI,CAAC,GAAG,YAAY,EAAE,OAAO,sBAAsB,CAAC,CAAC,CAAC,4CAW5E,CAAA;AAED,OAAO,EACH,gBAAgB,EAChB,iBAAiB,EACpB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDefaultProps.d.ts","sourceRoot":"","sources":["../../src/styles/createDefaultProps.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,qBAAqB,EAAC,MAAM,UAAU,CAAC;AAIhE,eAAO,MAAM,kBAAkB,GAC3B,QAAQ,qBAAqB,GAAG,SAAS,KAC1C,qBAqCF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
|
|
@@ -35,4 +35,11 @@ interface BaseNumberProps extends BaseTextProps {
|
|
|
35
35
|
max?: number;
|
|
36
36
|
step?: number;
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
interface BaseSelectProps<I> {
|
|
39
|
+
renderMenuItem?: (item: I) => React.ReactNode;
|
|
40
|
+
}
|
|
41
|
+
interface BaseSelectItemProps<I> extends BaseSelectProps<I> {
|
|
42
|
+
items: I[];
|
|
43
|
+
}
|
|
44
|
+
export type { KeysWithValue, HtmlInputType, InputLabelType, BasePropertyProps, BaseObjectProps, BaseTextProps, BaseCheckIconProps, BaseNumberProps, BaseSelectItemProps };
|
|
45
|
+
//# sourceMappingURL=props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/types/props.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAE,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAC,QAAQ,EAAE,cAAc,EAAC,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAE9D,KAAK,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC;AACzG,KAAK,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC;AAC7F,KAAK,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,MAAM,IAAI;KAC7C,CAAC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK;CACxD,CAAC,MAAM,IAAI,CAAC,CAAC;AAEd,UAAU,SAAS,CAAC,IAAI,EAAE,KAAK;IAC3B,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,KAAK,CAAC;CACrB;AAED,KAAK,iBAAiB,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAEvD,UAAU,eAAe,CAAC,IAAI,SAAS,MAAM,EAAE,MAAM,CACjD,SAAQ,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IAC/C,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;CAC9C;AAGD,UAAU,aAAa;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAClC;AAED,UAAU,kBAAkB;IACxB,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC;IACpB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,UAAU,eAAgB,SAAQ,aAAa;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAGD,UAAU,eAAe,CAAC,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;CACjD;AAED,UAAU,mBAAmB,CAAC,CAAC,CAAE,SAAQ,eAAe,CAAC,CAAC,CAAC;IACvD,KAAK,EAAE,CAAC,EAAE,CAAC;CACd;AAED,YAAY,EACR,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACtB,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CheckboxProps, IconButtonProps, TextFieldProps, ThemeProviderProps } from "@mui/material";
|
|
2
|
-
import
|
|
2
|
+
import { BaseCheckIconProps, BaseNumberProps, BaseObjectProps, BasePropertyProps, BaseTextProps } from './props';
|
|
3
3
|
import type { DeepPartial } from './types';
|
|
4
4
|
export type SingleNumberProps = TextFieldProps & BaseNumberProps & BasePropertyProps<number>;
|
|
5
5
|
export type SingleTextProps = TextFieldProps & BaseTextProps & BasePropertyProps<string>;
|
|
@@ -29,3 +29,4 @@ interface FastStartProviderProps<Theme> extends ThemeProviderProps<Theme> {
|
|
|
29
29
|
defaultProps: FastStartDefaultProps;
|
|
30
30
|
}
|
|
31
31
|
export type { FastStartDefaultProps, FastStartProviderProps, };
|
|
32
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/types/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,eAAe,EAAe,cAAc,EAAE,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACnH,OAAO,EACH,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,iBAAiB,EAEjB,aAAa,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AAEzC,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC7F,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACzF,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;AAChG,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;AAElI,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,eAAe,GAAG,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3H,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,aAAa,GAAG,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACvH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;AAC9H,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC;AAGhK,KAAK,qBAAqB,GAAG,WAAW,CAAC;IACrC,MAAM,EAAE;QACJ,KAAK,EAAE,iBAAiB,CAAC;QACzB,OAAO,EAAE,iBAAiB,CAAC;QAC3B,IAAI,EAAE,eAAe,CAAC;QACtB,QAAQ,EAAE,mBAAmB,CAAC;QAC9B,SAAS,EAAE,oBAAoB,CAAC;KACnC,CAAC;IACF,GAAG,EAAE;QACD,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAC3B,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACnC,SAAS,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;KACxC,CAAA;CACJ,CAAC,CAAC;AAEH,UAAU,sBAAsB,CAAC,KAAK,CAAE,SAAQ,kBAAkB,CAAC,KAAK,CAAC;IACrE,YAAY,EAAE,qBAAqB,CAAC;CACvC;AAED,YAAY,EACR,qBAAqB,EACrB,sBAAsB,GACzB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,CAAC,CAAC,IAAI;KACjB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAC9B,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjB,CAAC,CAAC,CAAC,CAAC;CACb,CAAC;AAEF,YAAY,EACR,WAAW,EACd,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type CalculateNumber = number | null | undefined;
|
|
2
|
+
declare const floatCalculate: (value: string | null, min: CalculateNumber, max: CalculateNumber, def: CalculateNumber) => CalculateNumber;
|
|
3
|
+
declare const integerCalculate: (value: string | null, min: CalculateNumber, max: CalculateNumber, def: CalculateNumber) => CalculateNumber;
|
|
4
|
+
declare const processFloat: (text: string) => string;
|
|
5
|
+
declare const processInteger: (text: string) => string;
|
|
6
|
+
export { floatCalculate, integerCalculate, processFloat, processInteger };
|
|
7
|
+
//# sourceMappingURL=calculate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculate.d.ts","sourceRoot":"","sources":["../../../src/utils/number/calculate.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEjD,QAAA,MAAM,cAAc,GAChB,OAAO,MAAM,GAAG,IAAI,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,KACrB,eAmBF,CAAA;AAED,QAAA,MAAM,gBAAgB,GAClB,OAAO,MAAM,GAAG,IAAI,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,KACrB,eAiBF,CAAA;AAED,QAAA,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAgCpC,CAAA;AAED,QAAA,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,MAIc,CAAC;AAMtD,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACjB,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { BaseObjectProps, KeysWithValue } from "../../types";
|
|
2
|
+
declare function errorObjectToString<Type extends object, Target>(name: KeysWithValue<Type, Target> | string | undefined, data: BaseObjectProps<Type, Target>['errorData']): string | undefined;
|
|
3
|
+
export { errorObjectToString };
|
|
4
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../src/utils/object/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,aAAa,CAAC;AAE3D,iBAAS,mBAAmB,CAAC,IAAI,SAAS,MAAM,EAAE,MAAM,EACpD,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,EACtD,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,WAAW,CAAC,GACjD,MAAM,GAAG,SAAS,CAIpB;AAED,OAAO,EACH,mBAAmB,EACtB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/utils/object/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAYxC,iBAAS,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CA6BzF;AAGD,OAAO,EACH,aAAa,EAChB,CAAA"}
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import js from '@eslint/js'
|
|
2
|
+
import globals from 'globals'
|
|
3
|
+
import reactHooks from 'eslint-plugin-react-hooks'
|
|
4
|
+
import reactRefresh from 'eslint-plugin-react-refresh'
|
|
5
|
+
import tseslint from 'typescript-eslint'
|
|
6
|
+
import { defineConfig, globalIgnores } from 'eslint/config'
|
|
7
|
+
|
|
8
|
+
export default defineConfig([
|
|
9
|
+
globalIgnores(['dist']),
|
|
10
|
+
{
|
|
11
|
+
files: ['**/*.{ts,tsx}'],
|
|
12
|
+
extends: [
|
|
13
|
+
js.configs.recommended,
|
|
14
|
+
tseslint.configs.recommended,
|
|
15
|
+
reactHooks.configs.flat.recommended,
|
|
16
|
+
reactRefresh.configs.vite,
|
|
17
|
+
],
|
|
18
|
+
languageOptions: {
|
|
19
|
+
ecmaVersion: 2020,
|
|
20
|
+
globals: globals.browser,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
])
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# React + TypeScript + Vite
|
|
2
|
+
|
|
3
|
+
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
|
|
4
|
+
|
|
5
|
+
Currently, two official plugins are available:
|
|
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
|
|
9
|
+
|
|
10
|
+
## React Compiler
|
|
11
|
+
|
|
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).
|
|
13
|
+
|
|
14
|
+
## Expanding the ESLint configuration
|
|
15
|
+
|
|
16
|
+
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
|
|
17
|
+
|
|
18
|
+
```js
|
|
19
|
+
export default defineConfig([
|
|
20
|
+
globalIgnores(['dist']),
|
|
21
|
+
{
|
|
22
|
+
files: ['**/*.{ts,tsx}'],
|
|
23
|
+
extends: [
|
|
24
|
+
// Other configs...
|
|
25
|
+
|
|
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,
|
|
32
|
+
|
|
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...
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
])
|
|
44
|
+
```
|
|
45
|
+
|
|
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
|
+
])
|
|
73
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import js from '@eslint/js'
|
|
2
|
+
import globals from 'globals'
|
|
3
|
+
import reactHooks from 'eslint-plugin-react-hooks'
|
|
4
|
+
import reactRefresh from 'eslint-plugin-react-refresh'
|
|
5
|
+
import tseslint from 'typescript-eslint'
|
|
6
|
+
import { defineConfig, globalIgnores } from 'eslint/config'
|
|
7
|
+
|
|
8
|
+
export default defineConfig([
|
|
9
|
+
globalIgnores(['dist']),
|
|
10
|
+
{
|
|
11
|
+
files: ['**/*.{ts,tsx}'],
|
|
12
|
+
extends: [
|
|
13
|
+
js.configs.recommended,
|
|
14
|
+
tseslint.configs.recommended,
|
|
15
|
+
reactHooks.configs.flat.recommended,
|
|
16
|
+
reactRefresh.configs.vite,
|
|
17
|
+
],
|
|
18
|
+
languageOptions: {
|
|
19
|
+
ecmaVersion: 2020,
|
|
20
|
+
globals: globals.browser,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
])
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>basic</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="root"></div>
|
|
11
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "basic",
|
|
3
|
+
"private": true,
|
|
4
|
+
"version": "0.0.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite",
|
|
8
|
+
"build": "tsc -b && vite build",
|
|
9
|
+
"lint": "eslint .",
|
|
10
|
+
"preview": "vite preview"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@emotion/react": "^11.14.0",
|
|
14
|
+
"@emotion/styled": "^11.14.1",
|
|
15
|
+
"@mui/material": "^7.3.5",
|
|
16
|
+
"mui-fast-start": "file:../../",
|
|
17
|
+
"react": "^19.2.0",
|
|
18
|
+
"react-dom": "^19.2.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@eslint/js": "^9.39.1",
|
|
22
|
+
"@types/node": "^24.10.1",
|
|
23
|
+
"@types/react": "^19.2.5",
|
|
24
|
+
"@types/react-dom": "^19.2.3",
|
|
25
|
+
"@vitejs/plugin-react": "^5.1.1",
|
|
26
|
+
"eslint": "^9.39.1",
|
|
27
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
28
|
+
"eslint-plugin-react-refresh": "^0.4.24",
|
|
29
|
+
"globals": "^16.5.0",
|
|
30
|
+
"typescript": "~5.9.3",
|
|
31
|
+
"typescript-eslint": "^8.46.4",
|
|
32
|
+
"vite": "npm:rolldown-vite@7.2.5"
|
|
33
|
+
},
|
|
34
|
+
"overrides": {
|
|
35
|
+
"vite": "npm:rolldown-vite@7.2.5"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Grid } from "@mui/material";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import {
|
|
4
|
+
SingleCheckIcon
|
|
5
|
+
} from "mui-fast-start";
|
|
6
|
+
import './App.css';
|
|
7
|
+
import ObjPage from "./pages/ObjPage";
|
|
8
|
+
import SinglePage from "./pages/SinglePage";
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
function App() {
|
|
13
|
+
const [checked, setChecked] = useState<boolean>(false);
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<Grid container>
|
|
17
|
+
<Grid size={12}>
|
|
18
|
+
<SingleCheckIcon
|
|
19
|
+
on={"single"} off={"obj"}
|
|
20
|
+
get={checked} set={setChecked}
|
|
21
|
+
/>
|
|
22
|
+
</Grid>
|
|
23
|
+
{checked ? <SinglePage /> : <ObjPage />}
|
|
24
|
+
</Grid>
|
|
25
|
+
)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default App
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
3
|
+
line-height: 1.5;
|
|
4
|
+
font-weight: 400;
|
|
5
|
+
|
|
6
|
+
color-scheme: light dark;
|
|
7
|
+
color: rgba(255, 255, 255, 0.87);
|
|
8
|
+
background-color: #242424;
|
|
9
|
+
|
|
10
|
+
font-synthesis: none;
|
|
11
|
+
text-rendering: optimizeLegibility;
|
|
12
|
+
-webkit-font-smoothing: antialiased;
|
|
13
|
+
-moz-osx-font-smoothing: grayscale;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
a {
|
|
17
|
+
font-weight: 500;
|
|
18
|
+
color: #646cff;
|
|
19
|
+
text-decoration: inherit;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
a:hover {
|
|
23
|
+
color: #535bf2;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
body {
|
|
27
|
+
margin: 0;
|
|
28
|
+
display: flex;
|
|
29
|
+
min-height: 100vh;
|
|
30
|
+
}
|