@mpen/react-basic-inputs 0.3.0 → 0.3.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.
|
@@ -17,7 +17,6 @@ export declare type ActionButtonProps = RequiredKeys<ComponentPropsWithoutRef<'b
|
|
|
17
17
|
export declare function DatetimeLocalInput({ value, defaultValue, min, max, onChange, ...props }: DatetimeLocalInputProps): JSX_2.Element;
|
|
18
18
|
|
|
19
19
|
export declare type DatetimeLocalInputChangeEvent = {
|
|
20
|
-
isoString: string | null;
|
|
21
20
|
value: number | null;
|
|
22
21
|
date: Date | null;
|
|
23
22
|
};
|
|
@@ -30,7 +29,21 @@ export declare type DatetimeLocalInputProps = OverrideProps<'input', {
|
|
|
30
29
|
onChange?: (ev: DatetimeLocalInputChangeEvent) => void;
|
|
31
30
|
}, 'type'>;
|
|
32
31
|
|
|
33
|
-
export declare
|
|
32
|
+
export declare function DatetimeOffsetInput({ value, defaultValue, min, max, onChange, ...props }: DatetimeOffsetInputProps): JSX_2.Element;
|
|
33
|
+
|
|
34
|
+
export declare type DatetimeOffsetInputChangeEvent = {
|
|
35
|
+
value: string;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export declare type DatetimeOffsetInputProps = {
|
|
39
|
+
min?: DateValue;
|
|
40
|
+
max?: DateValue;
|
|
41
|
+
value?: DateValue | null;
|
|
42
|
+
defaultValue?: DateValue;
|
|
43
|
+
onChange?: (ev: DatetimeOffsetInputChangeEvent) => void;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
declare type DateValue = number | string | Date;
|
|
34
47
|
|
|
35
48
|
export declare const DebouncedInput: FC<DebouncedInputProps>;
|
|
36
49
|
|
|
@@ -1,155 +1,155 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { jsx as
|
|
5
|
-
import { useDebugValue as
|
|
6
|
-
const
|
|
1
|
+
var C = Object.defineProperty;
|
|
2
|
+
var q = (e, t, n) => t in e ? C(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
|
|
3
|
+
var P = (e, t, n) => (q(e, typeof t != "symbol" ? t + "" : t, n), n);
|
|
4
|
+
import { jsx as v, jsxs as L } from "react/jsx-runtime";
|
|
5
|
+
import { useDebugValue as G, useRef as h, useInsertionEffect as Z, useEffect as H, useMemo as F, useCallback as T, createElement as W, forwardRef as k, useState as D, useImperativeHandle as B, useLayoutEffect as J, useId as X } from "react";
|
|
6
|
+
const Q = Object.freeze(() => {
|
|
7
7
|
});
|
|
8
|
-
function
|
|
8
|
+
function ee(e) {
|
|
9
9
|
return e;
|
|
10
10
|
}
|
|
11
|
-
let
|
|
12
|
-
typeof window < "u" ?
|
|
13
|
-
|
|
14
|
-
const t =
|
|
15
|
-
|
|
11
|
+
let _;
|
|
12
|
+
typeof window < "u" ? _ = (e) => {
|
|
13
|
+
G(e);
|
|
14
|
+
const t = h(ne);
|
|
15
|
+
Z(() => {
|
|
16
16
|
t.current = e;
|
|
17
17
|
}, [e]);
|
|
18
|
-
const
|
|
19
|
-
return
|
|
18
|
+
const n = h(null);
|
|
19
|
+
return n.current || (n.current = function() {
|
|
20
20
|
return t.current.apply(this, arguments);
|
|
21
|
-
}),
|
|
22
|
-
} :
|
|
23
|
-
function
|
|
24
|
-
return
|
|
21
|
+
}), n.current;
|
|
22
|
+
} : _ = Q;
|
|
23
|
+
function te(e) {
|
|
24
|
+
return _(e);
|
|
25
25
|
}
|
|
26
|
-
function
|
|
26
|
+
function ne() {
|
|
27
27
|
throw new Error("INVALID_USE_EVENT_INVOCATION: the callback from useEvent cannot be invoked before the component has mounted.");
|
|
28
28
|
}
|
|
29
|
-
function
|
|
30
|
-
var e =
|
|
29
|
+
function ue() {
|
|
30
|
+
var e = h(!0);
|
|
31
31
|
return e.current ? (e.current = !1, !0) : e.current;
|
|
32
32
|
}
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
|
|
36
|
-
if (!
|
|
33
|
+
var R = function(e, t) {
|
|
34
|
+
var n = ue();
|
|
35
|
+
H(function() {
|
|
36
|
+
if (!n)
|
|
37
37
|
return e();
|
|
38
38
|
}, t);
|
|
39
39
|
};
|
|
40
|
-
function
|
|
40
|
+
function re(e, ...t) {
|
|
41
41
|
return typeof e == "function" ? e(...t) : e;
|
|
42
42
|
}
|
|
43
|
-
function
|
|
43
|
+
function se(e, t) {
|
|
44
44
|
if (e.uniqueKey != null)
|
|
45
|
-
return
|
|
45
|
+
return re(e.uniqueKey, e, t);
|
|
46
46
|
if (typeof e.value == "string")
|
|
47
47
|
return e.value;
|
|
48
48
|
if (typeof e.value == "number")
|
|
49
49
|
return String(e.value);
|
|
50
50
|
try {
|
|
51
|
-
const
|
|
52
|
-
if (
|
|
53
|
-
return
|
|
51
|
+
const n = JSON.stringify(e.value);
|
|
52
|
+
if (n !== void 0)
|
|
53
|
+
return n;
|
|
54
54
|
} catch {
|
|
55
55
|
}
|
|
56
56
|
return String(t);
|
|
57
57
|
}
|
|
58
|
-
class
|
|
58
|
+
class Y {
|
|
59
59
|
constructor() {
|
|
60
|
-
|
|
60
|
+
P(this, "_usedKeys", /* @__PURE__ */ new Map());
|
|
61
61
|
}
|
|
62
|
-
fix(t,
|
|
63
|
-
let
|
|
62
|
+
fix(t, n) {
|
|
63
|
+
let u = se(t, n);
|
|
64
64
|
for (; ; ) {
|
|
65
|
-
let
|
|
66
|
-
if (
|
|
67
|
-
this.
|
|
65
|
+
let r = this._usedKeys.get(u);
|
|
66
|
+
if (r === void 0) {
|
|
67
|
+
this._usedKeys.set(u, 1);
|
|
68
68
|
break;
|
|
69
69
|
}
|
|
70
|
-
this.
|
|
70
|
+
this._usedKeys.set(u, ++r), u = `${u}(${r})`;
|
|
71
71
|
}
|
|
72
|
-
return
|
|
72
|
+
return u;
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
-
const
|
|
75
|
+
const ce = (e) => ({
|
|
76
76
|
value: e,
|
|
77
77
|
text: String(e),
|
|
78
78
|
disabled: !0,
|
|
79
|
-
key:
|
|
80
|
-
}),
|
|
81
|
-
function
|
|
79
|
+
key: ae
|
|
80
|
+
}), le = "3c9369b7-0a5e-46ea-93c2-e8b9fec67fdb", ae = "1a53f789-77f5-4ce6-a829-b00e563f1ee8";
|
|
81
|
+
function fe({
|
|
82
82
|
options: e,
|
|
83
83
|
value: t,
|
|
84
|
-
invalidValueOption:
|
|
85
|
-
onChange:
|
|
86
|
-
placeholder:
|
|
87
|
-
...
|
|
84
|
+
invalidValueOption: n = ce,
|
|
85
|
+
onChange: u,
|
|
86
|
+
placeholder: r,
|
|
87
|
+
...s
|
|
88
88
|
}) {
|
|
89
|
-
const
|
|
90
|
-
if (
|
|
89
|
+
const l = t == null, a = F(() => t != null && e.some((c) => c.value == t), [e, t]), o = F(() => t == null || !n ? null : n(t), [n, t]), f = F(() => {
|
|
90
|
+
if (a)
|
|
91
91
|
return e;
|
|
92
|
-
const
|
|
93
|
-
return
|
|
94
|
-
}, [
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
value:
|
|
92
|
+
const c = [...e];
|
|
93
|
+
return l ? r != null && c.unshift({ text: r, hidden: !0, value: null, key: le }) : o && c.push(o), c;
|
|
94
|
+
}, [a, e, l, o, r]), d = te((c) => {
|
|
95
|
+
const g = c.target.selectedIndex, O = f[g];
|
|
96
|
+
u == null || u({
|
|
97
|
+
value: O.value,
|
|
98
98
|
// option: opt,
|
|
99
99
|
// event: ev,
|
|
100
|
-
index:
|
|
100
|
+
index: g,
|
|
101
101
|
type: "change",
|
|
102
|
-
timeStamp:
|
|
103
|
-
target:
|
|
102
|
+
timeStamp: c.timeStamp,
|
|
103
|
+
target: c.target
|
|
104
104
|
});
|
|
105
|
-
}),
|
|
106
|
-
|
|
107
|
-
}, [
|
|
108
|
-
|
|
105
|
+
}), i = h(null), m = T(() => {
|
|
106
|
+
i.current && (i.current.selectedIndex < 0 || f[i.current.selectedIndex].value != t) && (i.current.selectedIndex = f.findIndex((c) => c.value == t));
|
|
107
|
+
}, [f, t]), N = (c) => {
|
|
108
|
+
i.current = c, m();
|
|
109
109
|
};
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}, [
|
|
113
|
-
const
|
|
114
|
-
return /* @__PURE__ */
|
|
115
|
-
const { value:
|
|
116
|
-
return /* @__PURE__ */
|
|
110
|
+
R(() => {
|
|
111
|
+
m();
|
|
112
|
+
}, [m]);
|
|
113
|
+
const x = new Y();
|
|
114
|
+
return /* @__PURE__ */ v("select", { ...s, onChange: d, ref: N, children: f.map((c, g) => {
|
|
115
|
+
const { value: O, text: b, uniqueKey: S, ...y } = c, V = x.fix(c, g);
|
|
116
|
+
return /* @__PURE__ */ W("option", { ...y, key: V, value: V }, c.text);
|
|
117
117
|
}) });
|
|
118
118
|
}
|
|
119
|
-
function
|
|
119
|
+
function ie(e) {
|
|
120
120
|
return e ? String(e).replace(/\s+/gu, " ").trim() : "";
|
|
121
121
|
}
|
|
122
|
-
function
|
|
122
|
+
function oe(e) {
|
|
123
123
|
try {
|
|
124
124
|
return e.toLocaleString("en-US", { useGrouping: !1, maximumFractionDigits: 20 });
|
|
125
125
|
} catch {
|
|
126
126
|
return e.toFixed(14).replace(/\.?0+$/, "");
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
function
|
|
129
|
+
function de(e) {
|
|
130
130
|
return e ? e === "∞" || e === "+∞" ? Number.POSITIVE_INFINITY : e === "-∞" ? Number.NEGATIVE_INFINITY : Number.parseFloat(e) : Number.NaN;
|
|
131
131
|
}
|
|
132
|
-
function
|
|
133
|
-
return Number.isNaN(e) ? "" : e === Number.POSITIVE_INFINITY ? "∞" : e === Number.NEGATIVE_INFINITY ? "-∞" :
|
|
132
|
+
function j(e) {
|
|
133
|
+
return Number.isNaN(e) ? "" : e === Number.POSITIVE_INFINITY ? "∞" : e === Number.NEGATIVE_INFINITY ? "-∞" : oe(e);
|
|
134
134
|
}
|
|
135
|
-
function
|
|
136
|
-
return e ?
|
|
135
|
+
function me(e) {
|
|
136
|
+
return e ? j(Number.parseFloat(e)) : "";
|
|
137
137
|
}
|
|
138
|
-
function
|
|
138
|
+
function I(e, t = 2) {
|
|
139
139
|
return String(e).padStart(t, "0");
|
|
140
140
|
}
|
|
141
|
-
const
|
|
142
|
-
const [
|
|
143
|
-
|
|
144
|
-
|
|
141
|
+
const z = k(function({ value: t = "", onPaste: n, onChange: u, onInput: r, onBlur: s, formatOnChange: l = ee, ...a }, o) {
|
|
142
|
+
const [f, d] = D(t), i = h(t), m = h(!1);
|
|
143
|
+
R(() => {
|
|
144
|
+
d(t), m.current = !1, i.current = t;
|
|
145
145
|
}, [t]);
|
|
146
|
-
const
|
|
146
|
+
const N = {
|
|
147
147
|
type: "text",
|
|
148
|
-
...
|
|
148
|
+
...a,
|
|
149
149
|
ref: o,
|
|
150
|
-
value:
|
|
151
|
-
onChange: (
|
|
152
|
-
|
|
150
|
+
value: f,
|
|
151
|
+
onChange: (x) => {
|
|
152
|
+
d(x.target.value);
|
|
153
153
|
},
|
|
154
154
|
// TODO: fire a change event onPaste ?
|
|
155
155
|
// formatOnPaste?
|
|
@@ -167,165 +167,353 @@ const p = M(function({ value: t = "", onPaste: r, onChange: n, onInput: u, onBlu
|
|
|
167
167
|
// // ev.preventDefault()
|
|
168
168
|
// // setCurrentValue(formatOnChange(ev.clipboardData.getData('text/plain')))
|
|
169
169
|
// },
|
|
170
|
-
onInput: (
|
|
171
|
-
|
|
170
|
+
onInput: (x) => {
|
|
171
|
+
m.current = !0, r == null || r(x);
|
|
172
172
|
},
|
|
173
|
-
onBlur: (
|
|
174
|
-
const
|
|
175
|
-
|
|
173
|
+
onBlur: (x) => {
|
|
174
|
+
const c = l(f);
|
|
175
|
+
m.current && (c !== i.current && (u == null || u({
|
|
176
176
|
type: "change",
|
|
177
|
-
value:
|
|
178
|
-
timeStamp:
|
|
179
|
-
target:
|
|
180
|
-
}),
|
|
177
|
+
value: c,
|
|
178
|
+
timeStamp: x.timeStamp,
|
|
179
|
+
target: x.target
|
|
180
|
+
}), i.current = c), c !== x.target.value && d(c)), s == null || s(x);
|
|
181
181
|
}
|
|
182
182
|
};
|
|
183
|
-
return /* @__PURE__ */
|
|
183
|
+
return /* @__PURE__ */ v("input", { ...N });
|
|
184
184
|
});
|
|
185
|
-
function
|
|
186
|
-
return /* @__PURE__ */
|
|
185
|
+
function Oe({ formatOnChange: e = ie, ...t }) {
|
|
186
|
+
return /* @__PURE__ */ v(z, { formatOnChange: e, ...t, type: "text" });
|
|
187
187
|
}
|
|
188
|
-
const
|
|
188
|
+
const Se = k(function({
|
|
189
189
|
onInput: t,
|
|
190
|
-
style:
|
|
191
|
-
initialHeight:
|
|
192
|
-
...
|
|
193
|
-
},
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
if (!
|
|
190
|
+
style: n,
|
|
191
|
+
initialHeight: u = "auto",
|
|
192
|
+
...r
|
|
193
|
+
}, s) {
|
|
194
|
+
const l = h(null), [a, o] = D(u), f = T(() => {
|
|
195
|
+
const i = l.current;
|
|
196
|
+
if (!i)
|
|
197
197
|
return;
|
|
198
|
-
|
|
199
|
-
const
|
|
200
|
-
o(
|
|
201
|
-
}, [
|
|
202
|
-
|
|
203
|
-
element:
|
|
204
|
-
adjustHeight:
|
|
205
|
-
}), [
|
|
206
|
-
const
|
|
207
|
-
|
|
198
|
+
i.style.height = u;
|
|
199
|
+
const m = `${i.scrollHeight}px`;
|
|
200
|
+
o(m), i.style.height = m;
|
|
201
|
+
}, [u]);
|
|
202
|
+
B(s, () => ({
|
|
203
|
+
element: l.current,
|
|
204
|
+
adjustHeight: f
|
|
205
|
+
}), [f]);
|
|
206
|
+
const d = _((i) => {
|
|
207
|
+
f(), t == null || t(i);
|
|
208
208
|
});
|
|
209
|
-
return
|
|
210
|
-
|
|
211
|
-
const
|
|
212
|
-
if (!
|
|
209
|
+
return J(() => {
|
|
210
|
+
f();
|
|
211
|
+
const i = l.current;
|
|
212
|
+
if (!i)
|
|
213
213
|
return;
|
|
214
|
-
const
|
|
215
|
-
|
|
214
|
+
const m = new ResizeObserver((N) => {
|
|
215
|
+
f();
|
|
216
216
|
});
|
|
217
|
-
return
|
|
218
|
-
|
|
217
|
+
return m.observe(i), () => {
|
|
218
|
+
m.unobserve(i);
|
|
219
219
|
};
|
|
220
|
-
}, [
|
|
220
|
+
}, [f]), /* @__PURE__ */ v("textarea", { ...r, style: {
|
|
221
221
|
overflow: "hidden",
|
|
222
222
|
// these 2 styles aren't needed if the caller sets them in CSS.
|
|
223
223
|
resize: "none",
|
|
224
|
-
...
|
|
225
|
-
height:
|
|
226
|
-
}, onInput:
|
|
224
|
+
...n,
|
|
225
|
+
height: a
|
|
226
|
+
}, onInput: d, ref: l });
|
|
227
227
|
});
|
|
228
|
-
function
|
|
229
|
-
const t =
|
|
230
|
-
const o = Number(
|
|
231
|
-
|
|
232
|
-
value:
|
|
228
|
+
function Ee(e) {
|
|
229
|
+
const t = X(), n = e.name ?? t, u = e.valueEquals ?? Object.is, r = e.options ?? [], s = new Y(), l = _((a) => {
|
|
230
|
+
const o = Number(a.target.value), f = r[o];
|
|
231
|
+
f != null && e.onChange != null && e.onChange({
|
|
232
|
+
value: f.value,
|
|
233
233
|
index: o,
|
|
234
234
|
type: "change",
|
|
235
|
-
timeStamp:
|
|
236
|
-
target:
|
|
235
|
+
timeStamp: a.timeStamp,
|
|
236
|
+
target: a.target
|
|
237
237
|
});
|
|
238
238
|
});
|
|
239
|
-
return /* @__PURE__ */
|
|
240
|
-
const { value:
|
|
241
|
-
return e.value !== void 0 && (
|
|
242
|
-
/* @__PURE__ */
|
|
243
|
-
/* @__PURE__ */
|
|
244
|
-
] }) },
|
|
239
|
+
return /* @__PURE__ */ v("ul", { className: e.className, children: r.map((a, o) => {
|
|
240
|
+
const { value: f, text: d, key: i, itemClassName: m, labelClassName: N, inputClassName: x, textClassName: c, ...g } = a, O = s.fix(a, o);
|
|
241
|
+
return e.value !== void 0 && (g.checked = u(f, e.value)), /* @__PURE__ */ v("li", { className: m, "aria-disabled": g.disabled, children: /* @__PURE__ */ L("label", { className: N, children: [
|
|
242
|
+
/* @__PURE__ */ v("input", { ...g, className: x, value: o, onChange: l, name: n, type: "radio" }),
|
|
243
|
+
/* @__PURE__ */ v("span", { className: c, children: d })
|
|
244
|
+
] }) }, O);
|
|
245
245
|
}) });
|
|
246
246
|
}
|
|
247
|
-
function
|
|
248
|
-
return
|
|
247
|
+
function U() {
|
|
248
|
+
return h(null);
|
|
249
249
|
}
|
|
250
|
-
function
|
|
250
|
+
function A(e) {
|
|
251
251
|
e.current != null && (clearTimeout(e.current), e.current = null);
|
|
252
252
|
}
|
|
253
|
-
const
|
|
253
|
+
const De = ({
|
|
254
254
|
value: e,
|
|
255
255
|
onChange: t,
|
|
256
|
-
debounce:
|
|
257
|
-
...
|
|
256
|
+
debounce: n = 500,
|
|
257
|
+
...u
|
|
258
258
|
}) => {
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
|
|
259
|
+
const r = U(), s = U();
|
|
260
|
+
R(() => {
|
|
261
|
+
A(s), r.current != null && (r.current.value = e);
|
|
262
262
|
}, [e]);
|
|
263
|
-
const
|
|
264
|
-
|
|
263
|
+
const l = () => {
|
|
264
|
+
r.current != null && r.current.value !== e && (t == null || t({ value: r.current.value }));
|
|
265
265
|
};
|
|
266
|
-
return /* @__PURE__ */
|
|
267
|
-
|
|
266
|
+
return /* @__PURE__ */ v("input", { ...u, ref: r, defaultValue: e, onInput: () => {
|
|
267
|
+
A(s), s.current = setTimeout(l, n);
|
|
268
268
|
}, onBlur: () => {
|
|
269
|
-
|
|
269
|
+
A(s), l();
|
|
270
270
|
} });
|
|
271
271
|
};
|
|
272
|
-
function
|
|
273
|
-
return t.onClick = (
|
|
274
|
-
|
|
275
|
-
}, /* @__PURE__ */
|
|
272
|
+
function _e({ onClick: e, ...t }) {
|
|
273
|
+
return t.onClick = (n) => {
|
|
274
|
+
n.preventDefault(), e == null || e(n);
|
|
275
|
+
}, /* @__PURE__ */ v("button", { type: "button", ...t });
|
|
276
|
+
}
|
|
277
|
+
function E(e, t) {
|
|
278
|
+
const n = e instanceof Date ? e : new Date(e);
|
|
279
|
+
let u = `${n.getFullYear()}-${I(n.getMonth() + 1)}-${I(n.getDate())}T${I(n.getHours())}:${I(n.getMinutes())}`;
|
|
280
|
+
const r = (t == null ? void 0 : t.milliseconds) || (t == null ? void 0 : t.milliseconds) == null && n.getMilliseconds() !== 0;
|
|
281
|
+
return ((t == null ? void 0 : t.seconds) || (t == null ? void 0 : t.seconds) == null && (n.getSeconds() !== 0 || r)) && (u += `:${I(n.getSeconds())}`, r && (u += `.${I(n.getMilliseconds(), 3)}`)), t != null && t.offset && (u += p(-n.getTimezoneOffset())), u;
|
|
282
|
+
}
|
|
283
|
+
function p(e) {
|
|
284
|
+
if (e == null)
|
|
285
|
+
return "";
|
|
286
|
+
if (e === 0)
|
|
287
|
+
return "Z";
|
|
288
|
+
const t = e > 0 ? "+" : "-", n = Math.floor(Math.abs(e) / 60), u = Math.abs(e) % 60;
|
|
289
|
+
return `${t}${I(n)}:${I(u)}`;
|
|
290
|
+
}
|
|
291
|
+
const xe = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?)(Z|[+-]\d{2}:\d{2})?$/, ve = { offset: !1, seconds: !1, milliseconds: !1 };
|
|
292
|
+
function Ne(e) {
|
|
293
|
+
return e == null || Number.isNaN(e) || e === "" || Number.isNaN(+new Date(e));
|
|
276
294
|
}
|
|
277
|
-
function
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
const i = -r.getTimezoneOffset(), l = i >= 0 ? "+" : "-", o = Math.floor(Math.abs(i) / 60), a = Math.abs(i) % 60;
|
|
283
|
-
n += `${l}${b(o)}:${b(a)}`;
|
|
295
|
+
function M(e) {
|
|
296
|
+
if (typeof e == "string") {
|
|
297
|
+
const t = e.match(xe);
|
|
298
|
+
if (t)
|
|
299
|
+
return t[1];
|
|
284
300
|
}
|
|
285
|
-
return
|
|
301
|
+
return Ne(e) ? "" : E(e, ve);
|
|
286
302
|
}
|
|
287
|
-
const
|
|
288
|
-
function
|
|
289
|
-
return e !== void 0 && (
|
|
290
|
-
if (
|
|
291
|
-
const
|
|
292
|
-
|
|
293
|
-
|
|
303
|
+
const w = { offset: !1 };
|
|
304
|
+
function Me({ value: e, defaultValue: t, min: n, max: u, onChange: r, ...s }) {
|
|
305
|
+
return e !== void 0 && (s.value = e === null ? "" : E(e, w)), t != null && (s.defaultValue = E(t, w)), n != null && (s.min = E(n, w)), u != null && (s.max = E(u, w)), r != null && (s.onChange = (l) => {
|
|
306
|
+
if (l.currentTarget.value.length) {
|
|
307
|
+
const a = new Date(l.currentTarget.valueAsNumber);
|
|
308
|
+
r({
|
|
309
|
+
// TODO: undo this, "date time local" should in fact be local (no time zone)
|
|
310
|
+
// isoString: toIsoDateString(date,{offset:true}),
|
|
294
311
|
// isoString: date.toISOString(),
|
|
295
|
-
value:
|
|
296
|
-
date:
|
|
312
|
+
value: a.valueOf(),
|
|
313
|
+
date: a
|
|
297
314
|
});
|
|
298
315
|
} else
|
|
299
|
-
|
|
316
|
+
r({
|
|
300
317
|
// isoStringWithOffset: null,
|
|
301
|
-
isoString: null,
|
|
318
|
+
// isoString: null,
|
|
302
319
|
value: null,
|
|
303
320
|
date: null
|
|
304
321
|
});
|
|
305
|
-
}), /* @__PURE__ */
|
|
322
|
+
}), /* @__PURE__ */ v("input", { type: "datetime-local", ...s });
|
|
323
|
+
}
|
|
324
|
+
function ge(e) {
|
|
325
|
+
const t = h(e);
|
|
326
|
+
return t.current = e, t;
|
|
327
|
+
}
|
|
328
|
+
function be(e, t) {
|
|
329
|
+
const n = h(e), u = ge(t);
|
|
330
|
+
return H(() => {
|
|
331
|
+
Object.is(n.current, e) || (u.current(), n.current = e);
|
|
332
|
+
}, [u, e]), T((r) => {
|
|
333
|
+
n.current = r;
|
|
334
|
+
}, []);
|
|
335
|
+
}
|
|
336
|
+
const he = [
|
|
337
|
+
// United States Minor Outlying Islands
|
|
338
|
+
{ value: -12 * 60, text: "-12:00" },
|
|
339
|
+
// New Zealand, United States
|
|
340
|
+
{ value: -11 * 60, text: "-11:00" },
|
|
341
|
+
// United States, French Polynesia, New Zealand
|
|
342
|
+
{ value: -10 * 60, text: "-10:00" },
|
|
343
|
+
// France (Marquesas Islands)
|
|
344
|
+
{ value: -9.5 * 60, text: "-09:30" },
|
|
345
|
+
// United States, Canada, Mexico
|
|
346
|
+
{ value: -9 * 60, text: "-09:00" },
|
|
347
|
+
// United States, Canada, Mexico, UK (Pitcairn Islands)
|
|
348
|
+
{ value: -8 * 60, text: "-08:00" },
|
|
349
|
+
// United States, Canada, Mexico
|
|
350
|
+
{ value: -7 * 60, text: "-07:00" },
|
|
351
|
+
// United States, Canada, Mexico, Central America
|
|
352
|
+
{ value: -6 * 60, text: "-06:00" },
|
|
353
|
+
// United States, Canada, Cuba, South America
|
|
354
|
+
{ value: -5 * 60, text: "-05:00" },
|
|
355
|
+
// Canada, Caribbean, South America
|
|
356
|
+
{ value: -4 * 60, text: "-04:00" },
|
|
357
|
+
// Canada (Newfoundland)
|
|
358
|
+
{ value: -3.5 * 60, text: "-03:30" },
|
|
359
|
+
// Argentina, Brazil, Chile
|
|
360
|
+
{ value: -3 * 60, text: "-03:00" },
|
|
361
|
+
// Brazil (Fernando de Noronha), South Georgia
|
|
362
|
+
{ value: -2 * 60, text: "-02:00" },
|
|
363
|
+
// Cape Verde
|
|
364
|
+
{ value: -1 * 60, text: "-01:00" },
|
|
365
|
+
// UK, Portugal, Iceland
|
|
366
|
+
{ value: 0, text: "±00:00" },
|
|
367
|
+
// Central Europe
|
|
368
|
+
{ value: 1 * 60, text: "+01:00" },
|
|
369
|
+
// Eastern Europe, Egypt
|
|
370
|
+
{ value: 2 * 60, text: "+02:00" },
|
|
371
|
+
// East Africa, Middle East
|
|
372
|
+
{ value: 3 * 60, text: "+03:00" },
|
|
373
|
+
// Iran
|
|
374
|
+
{ value: 3.5 * 60, text: "+03:30" },
|
|
375
|
+
// UAE, Russia (Moscow)
|
|
376
|
+
{ value: 4 * 60, text: "+04:00" },
|
|
377
|
+
// Afghanistan
|
|
378
|
+
{ value: 4.5 * 60, text: "+04:30" },
|
|
379
|
+
// Pakistan
|
|
380
|
+
{ value: 5 * 60, text: "+05:00" },
|
|
381
|
+
// India, Sri Lanka
|
|
382
|
+
{ value: 5.5 * 60, text: "+05:30" },
|
|
383
|
+
// Nepal
|
|
384
|
+
{ value: 5.75 * 60, text: "+05:45" },
|
|
385
|
+
// Bangladesh, Bhutan
|
|
386
|
+
{ value: 6 * 60, text: "+06:00" },
|
|
387
|
+
// Myanmar
|
|
388
|
+
{ value: 6.5 * 60, text: "+06:30" },
|
|
389
|
+
// Thailand, Vietnam
|
|
390
|
+
{ value: 7 * 60, text: "+07:00" },
|
|
391
|
+
// China, Singapore
|
|
392
|
+
{ value: 8 * 60, text: "+08:00" },
|
|
393
|
+
// Australia (Western)
|
|
394
|
+
{ value: 8.75 * 60, text: "+08:45" },
|
|
395
|
+
// Japan, South Korea
|
|
396
|
+
{ value: 9 * 60, text: "+09:00" },
|
|
397
|
+
// Australia (Central)
|
|
398
|
+
{ value: 9.5 * 60, text: "+09:30" },
|
|
399
|
+
// Australia (Eastern)
|
|
400
|
+
{ value: 10 * 60, text: "+10:00" },
|
|
401
|
+
// Australia (Lord Howe Island)
|
|
402
|
+
{ value: 10.5 * 60, text: "+10:30" },
|
|
403
|
+
// Solomon Islands, Vanuatu
|
|
404
|
+
{ value: 11 * 60, text: "+11:00" },
|
|
405
|
+
// Fiji, New Zealand
|
|
406
|
+
{ value: 12 * 60, text: "+12:00" },
|
|
407
|
+
// New Zealand (Chatham Islands)
|
|
408
|
+
{ value: 12.75 * 60, text: "+12:45" },
|
|
409
|
+
// Tonga, Samoa
|
|
410
|
+
{ value: 13 * 60, text: "+13:00" },
|
|
411
|
+
// Kiribati
|
|
412
|
+
{ value: 14 * 60, text: "+14:00" }
|
|
413
|
+
];
|
|
414
|
+
function $(e) {
|
|
415
|
+
if (typeof e != "string" || e === "")
|
|
416
|
+
return null;
|
|
417
|
+
const t = e.match(/([+-])(\d{2}):(\d{2})|Z$/);
|
|
418
|
+
if (!t)
|
|
419
|
+
return null;
|
|
420
|
+
if (t[0] === "Z")
|
|
421
|
+
return 0;
|
|
422
|
+
const [, n, u, r] = t, s = Number(u) * 60 + Number(r);
|
|
423
|
+
return n === "+" ? s : -s;
|
|
424
|
+
}
|
|
425
|
+
function K(e) {
|
|
426
|
+
return e === "" ? null : -new Date(e).getTimezoneOffset();
|
|
427
|
+
}
|
|
428
|
+
function we({
|
|
429
|
+
value: e,
|
|
430
|
+
defaultValue: t,
|
|
431
|
+
min: n,
|
|
432
|
+
max: u,
|
|
433
|
+
onChange: r,
|
|
434
|
+
...s
|
|
435
|
+
}) {
|
|
436
|
+
const [l, a] = D(() => $(e ?? t) !== null), [o, f] = D(() => $(e ?? t)), [d, i] = D(() => M(e ?? t)), m = be(e, () => {
|
|
437
|
+
a($(e) !== null), f($(e)), i(M(e));
|
|
438
|
+
}), N = T((b) => {
|
|
439
|
+
m(b), r == null || r({
|
|
440
|
+
value: b
|
|
441
|
+
});
|
|
442
|
+
}, [r, m]);
|
|
443
|
+
n != null && (s.min = M(n)), u != null && (s.max = M(u));
|
|
444
|
+
const x = l ? o : K(d), c = T(
|
|
445
|
+
(b) => {
|
|
446
|
+
const S = b.currentTarget.value;
|
|
447
|
+
i(S), N(S + p(x));
|
|
448
|
+
},
|
|
449
|
+
[N, x]
|
|
450
|
+
), g = T(
|
|
451
|
+
(b) => {
|
|
452
|
+
f(b.value), N(d + p(b.value));
|
|
453
|
+
},
|
|
454
|
+
[N, d]
|
|
455
|
+
), O = T(
|
|
456
|
+
(b) => {
|
|
457
|
+
const S = b.currentTarget.checked;
|
|
458
|
+
a(S);
|
|
459
|
+
let y;
|
|
460
|
+
S ? d && o === null ? (y = K(d), f(y)) : y = o : y = K(d), N(d + p(y));
|
|
461
|
+
},
|
|
462
|
+
[o, d, N]
|
|
463
|
+
);
|
|
464
|
+
return /* @__PURE__ */ L("span", { children: [
|
|
465
|
+
/* @__PURE__ */ v(
|
|
466
|
+
"input",
|
|
467
|
+
{
|
|
468
|
+
type: "datetime-local",
|
|
469
|
+
...s,
|
|
470
|
+
value: d,
|
|
471
|
+
onChange: c
|
|
472
|
+
}
|
|
473
|
+
),
|
|
474
|
+
/* @__PURE__ */ v(
|
|
475
|
+
"input",
|
|
476
|
+
{
|
|
477
|
+
type: "checkbox",
|
|
478
|
+
title: l ? "Use UTC offset from this device" : "Enable UTC offset selection",
|
|
479
|
+
checked: l,
|
|
480
|
+
onChange: O
|
|
481
|
+
}
|
|
482
|
+
),
|
|
483
|
+
/* @__PURE__ */ v(
|
|
484
|
+
fe,
|
|
485
|
+
{
|
|
486
|
+
value: x,
|
|
487
|
+
onChange: g,
|
|
488
|
+
disabled: !l,
|
|
489
|
+
options: he
|
|
490
|
+
}
|
|
491
|
+
)
|
|
492
|
+
] });
|
|
306
493
|
}
|
|
307
|
-
const
|
|
308
|
-
const
|
|
494
|
+
const $e = k(function({ placeholder: t, formatOnChange: n = me, onChange: u, value: r, ...s }, l) {
|
|
495
|
+
const a = {
|
|
309
496
|
inputMode: "decimal",
|
|
310
|
-
...
|
|
311
|
-
formatOnChange:
|
|
497
|
+
...s,
|
|
498
|
+
formatOnChange: n,
|
|
312
499
|
type: "number"
|
|
313
500
|
};
|
|
314
|
-
return
|
|
315
|
-
|
|
501
|
+
return r !== void 0 && (a.value = j(r)), t != null && (a.placeholder = String(t)), u != null && (a.onChange = (o) => {
|
|
502
|
+
u({
|
|
316
503
|
...o,
|
|
317
|
-
value:
|
|
504
|
+
value: de(o.value)
|
|
318
505
|
});
|
|
319
|
-
}), /* @__PURE__ */
|
|
506
|
+
}), /* @__PURE__ */ v(z, { ...a, ref: l });
|
|
320
507
|
});
|
|
321
508
|
export {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
509
|
+
_e as ActionButton,
|
|
510
|
+
Me as DatetimeLocalInput,
|
|
511
|
+
we as DatetimeOffsetInput,
|
|
512
|
+
De as DebouncedInput,
|
|
513
|
+
z as Input,
|
|
514
|
+
$e as NumberInput,
|
|
515
|
+
Ee as RadioMenu,
|
|
516
|
+
fe as Select,
|
|
517
|
+
Se as TextArea,
|
|
518
|
+
Oe as TextInput
|
|
331
519
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(o,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react"],c):(o=typeof globalThis<"u"?globalThis:o||self,c(o["@mpen/react-basic-inputs"]={},o.jsxRuntime,o.React))})(this,function(o,c,s){"use strict";var re=Object.defineProperty;var ne=(o,c,s)=>c in o?re(o,c,{enumerable:!0,configurable:!0,writable:!0,value:s}):o[c]=s;var $=(o,c,s)=>(ne(o,typeof c!="symbol"?c+"":c,s),s);const p=Object.freeze(()=>{});function F(e){return e}let S;typeof window<"u"?S=e=>{s.useDebugValue(e);const t=s.useRef(j);s.useInsertionEffect(()=>{t.current=e},[e]);const r=s.useRef(null);return r.current||(r.current=function(){return t.current.apply(this,arguments)}),r.current}:S=p;function V(e){return S(e)}function j(){throw new Error("INVALID_USE_EVENT_INVOCATION: the callback from useEvent cannot be invoked before the component has mounted.")}function k(){var e=s.useRef(!0);return e.current?(e.current=!1,!0):e.current}var O=function(e,t){var r=k();s.useEffect(function(){if(!r)return e()},t)};function L(e,...t){return typeof e=="function"?e(...t):e}function q(e,t){if(e.uniqueKey!=null)return L(e.uniqueKey,e,t);if(typeof e.value=="string")return e.value;if(typeof e.value=="number")return String(e.value);try{const r=JSON.stringify(e.value);if(r!==void 0)return r}catch{}return String(t)}class D{constructor(){$(this,"usedKeys",new Map)}fix(t,r){let n=q(t,r);for(;;){let u=this.usedKeys.get(n);if(u===void 0){this.usedKeys.set(n,1);break}this.usedKeys.set(n,++u),n=`${n}(${u})`}return n}}const H=e=>({value:e,text:String(e),disabled:!0,key:P}),Y="3c9369b7-0a5e-46ea-93c2-e8b9fec67fdb",P="1a53f789-77f5-4ce6-a829-b00e563f1ee8";function z({options:e,value:t,invalidValueOption:r=H,onChange:n,placeholder:u,...l}){const a=t==null,i=s.useMemo(()=>t!=null&&e.some(f=>f.value==t),[e,t]),N=s.useMemo(()=>t==null||!r?null:r(t),[r,t]),d=s.useMemo(()=>{if(i)return e;const f=[...e];return a?u!=null&&f.unshift({text:u,hidden:!0,value:null,key:Y}):N&&f.push(N),f},[i,e,a,N,u]),g=V(f=>{const x=f.target.selectedIndex,E=d[x];n==null||n({value:E.value,index:x,type:"change",timeStamp:f.timeStamp,target:f.target})}),m=s.useRef(null),I=s.useCallback(()=>{m.current&&(m.current.selectedIndex<0||d[m.current.selectedIndex].value!=t)&&(m.current.selectedIndex=d.findIndex(f=>f.value==t))},[d,t]),h=f=>{m.current=f,I()};O(()=>{I()},[I]);const b=new D;return c.jsx("select",{...l,onChange:g,ref:h,children:d.map((f,x)=>{const{value:E,text:ue,uniqueKey:se,...te}=f,K=b.fix(f,x);return s.createElement("option",{...te,key:K,value:K},f.text)})})}function U(e){return e?String(e).replace(/\s+/gu," ").trim():""}function G(e){try{return e.toLocaleString("en-US",{useGrouping:!1,maximumFractionDigits:20})}catch{return e.toFixed(14).replace(/\.?0+$/,"")}}function B(e){return e?e==="∞"||e==="+∞"?Number.POSITIVE_INFINITY:e==="-∞"?Number.NEGATIVE_INFINITY:Number.parseFloat(e):Number.NaN}function _(e){return Number.isNaN(e)?"":e===Number.POSITIVE_INFINITY?"∞":e===Number.NEGATIVE_INFINITY?"-∞":G(e)}function W(e){return e?_(Number.parseFloat(e)):""}function y(e,t=2){return String(e).padStart(t,"0")}const M=s.forwardRef(function({value:t="",onPaste:r,onChange:n,onInput:u,onBlur:l,formatOnChange:a=F,...i},N){const[d,g]=s.useState(t),m=s.useRef(t),I=s.useRef(!1);O(()=>{g(t),I.current=!1,m.current=t},[t]);const h={type:"text",...i,ref:N,value:d,onChange:b=>{g(b.target.value)},onInput:b=>{I.current=!0,u==null||u(b)},onBlur:b=>{const f=a(d);I.current&&(f!==m.current&&(n==null||n({type:"change",value:f,timeStamp:b.timeStamp,target:b.target}),m.current=f),f!==b.target.value&&g(f)),l==null||l(b)}};return c.jsx("input",{...h})});function J({formatOnChange:e=U,...t}){return c.jsx(M,{formatOnChange:e,...t,type:"text"})}const C=s.forwardRef(function({onInput:t,style:r,initialHeight:n="auto",...u},l){const a=s.useRef(null),[i,N]=s.useState(n),d=s.useCallback(()=>{const m=a.current;if(!m)return;m.style.height=n;const I=`${m.scrollHeight}px`;N(I),m.style.height=I},[n]);s.useImperativeHandle(l,()=>({element:a.current,adjustHeight:d}),[d]);const g=S(m=>{d(),t==null||t(m)});return s.useLayoutEffect(()=>{d();const m=a.current;if(!m)return;const I=new ResizeObserver(h=>{d()});return I.observe(m),()=>{I.unobserve(m)}},[d]),c.jsx("textarea",{...u,style:{overflow:"hidden",resize:"none",...r,height:i},onInput:g,ref:a})});function Q(e){const t=s.useId(),r=e.name??t,n=e.valueEquals??Object.is,u=e.options??[],l=new D,a=S(i=>{const N=Number(i.target.value),d=u[N];d!=null&&e.onChange!=null&&e.onChange({value:d.value,index:N,type:"change",timeStamp:i.timeStamp,target:i.target})});return c.jsx("ul",{className:e.className,children:u.map((i,N)=>{const{value:d,text:g,key:m,itemClassName:I,labelClassName:h,inputClassName:b,textClassName:f,...x}=i,E=l.fix(i,N);return e.value!==void 0&&(x.checked=n(d,e.value)),c.jsx("li",{className:I,"aria-disabled":x.disabled,children:c.jsxs("label",{className:h,children:[c.jsx("input",{...x,className:b,value:N,onChange:a,name:r,type:"radio"}),c.jsx("span",{className:f,children:g})]})},E)})})}function A(){return s.useRef(null)}function w(e){e.current!=null&&(clearTimeout(e.current),e.current=null)}const X=({value:e,onChange:t,debounce:r=500,...n})=>{const u=A(),l=A();O(()=>{w(l),u.current!=null&&(u.current.value=e)},[e]);const a=()=>{u.current!=null&&u.current.value!==e&&(t==null||t({value:u.current.value}))};return c.jsx("input",{...n,ref:u,defaultValue:e,onInput:()=>{w(l),l.current=setTimeout(a,r)},onBlur:()=>{w(l),a()}})};function Z({onClick:e,...t}){return t.onClick=r=>{r.preventDefault(),e==null||e(r)},c.jsx("button",{type:"button",...t})}function v(e,t){const r=new Date(e);let n=`${r.getFullYear()}-${y(r.getMonth()+1)}-${y(r.getDate())}T${y(r.getHours())}:${y(r.getMinutes())}`;const u=(t==null?void 0:t.milliseconds)||(t==null?void 0:t.milliseconds)==null&&r.getMilliseconds()!==0;if(((t==null?void 0:t.seconds)||(t==null?void 0:t.seconds)==null&&(r.getSeconds()!==0||u))&&(n+=`:${y(r.getSeconds())}`,u&&(n+=`.${y(r.getMilliseconds(),3)}`)),t!=null&&t.offset){const a=-r.getTimezoneOffset(),i=a>=0?"+":"-",N=Math.floor(Math.abs(a)/60),d=Math.abs(a)%60;n+=`${i}${y(N)}:${y(d)}`}return n}const T={offset:!1};function R({value:e,defaultValue:t,min:r,max:n,onChange:u,...l}){return e!==void 0&&(l.value=e===null?"":v(e,T)),t!=null&&(l.defaultValue=v(t,T)),r!=null&&(l.min=v(r,T)),n!=null&&(l.max=v(n,T)),u!=null&&(l.onChange=a=>{if(a.currentTarget.value.length){const i=new Date(a.currentTarget.valueAsNumber);u({isoString:v(i,{offset:!0}),value:i.valueOf(),date:i})}else u({isoString:null,value:null,date:null})}),c.jsx("input",{type:"datetime-local",...l})}const ee=s.forwardRef(function({placeholder:t,formatOnChange:r=W,onChange:n,value:u,...l},a){const i={inputMode:"decimal",...l,formatOnChange:r,type:"number"};return u!==void 0&&(i.value=_(u)),t!=null&&(i.placeholder=String(t)),n!=null&&(i.onChange=N=>{n({...N,value:B(N.value)})}),c.jsx(M,{...i,ref:a})});o.ActionButton=Z,o.DatetimeLocalInput=R,o.DebouncedInput=X,o.Input=M,o.NumberInput=ee,o.RadioMenu=Q,o.Select=z,o.TextArea=C,o.TextInput=J,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(x,f){typeof exports=="object"&&typeof module<"u"?f(exports,require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react"],f):(x=typeof globalThis<"u"?globalThis:x||self,f(x["@mpen/react-basic-inputs"]={},x.jsxRuntime,x.React))})(this,function(x,f,r){"use strict";var ve=Object.defineProperty;var be=(x,f,r)=>f in x?ve(x,f,{enumerable:!0,configurable:!0,writable:!0,value:r}):x[f]=r;var L=(x,f,r)=>(be(x,typeof f!="symbol"?f+"":f,r),r);const U=Object.freeze(()=>{});function q(e){return e}let E;typeof window<"u"?E=e=>{r.useDebugValue(e);const t=r.useRef(Y);r.useInsertionEffect(()=>{t.current=e},[e]);const n=r.useRef(null);return n.current||(n.current=function(){return t.current.apply(this,arguments)}),n.current}:E=U;function H(e){return E(e)}function Y(){throw new Error("INVALID_USE_EVENT_INVOCATION: the callback from useEvent cannot be invoked before the component has mounted.")}function z(){var e=r.useRef(!0);return e.current?(e.current=!1,!0):e.current}var p=function(e,t){var n=z();r.useEffect(function(){if(!n)return e()},t)};function G(e,...t){return typeof e=="function"?e(...t):e}function Z(e,t){if(e.uniqueKey!=null)return G(e.uniqueKey,e,t);if(typeof e.value=="string")return e.value;if(typeof e.value=="number")return String(e.value);try{const n=JSON.stringify(e.value);if(n!==void 0)return n}catch{}return String(t)}class K{constructor(){L(this,"_usedKeys",new Map)}fix(t,n){let u=Z(t,n);for(;;){let s=this._usedKeys.get(u);if(s===void 0){this._usedKeys.set(u,1);break}this._usedKeys.set(u,++s),u=`${u}(${s})`}return u}}const B=e=>({value:e,text:String(e),disabled:!0,key:J}),W="3c9369b7-0a5e-46ea-93c2-e8b9fec67fdb",J="1a53f789-77f5-4ce6-a829-b00e563f1ee8";function C({options:e,value:t,invalidValueOption:n=B,onChange:u,placeholder:s,...l}){const a=t==null,i=r.useMemo(()=>t!=null&&e.some(c=>c.value==t),[e,t]),m=r.useMemo(()=>t==null||!n?null:n(t),[n,t]),o=r.useMemo(()=>{if(i)return e;const c=[...e];return a?s!=null&&c.unshift({text:s,hidden:!0,value:null,key:W}):m&&c.push(m),c},[i,e,a,m,s]),v=H(c=>{const g=c.target.selectedIndex,S=o[g];u==null||u({value:S.value,index:g,type:"change",timeStamp:c.timeStamp,target:c.target})}),d=r.useRef(null),b=r.useCallback(()=>{d.current&&(d.current.selectedIndex<0||o[d.current.selectedIndex].value!=t)&&(d.current.selectedIndex=o.findIndex(c=>c.value==t))},[o,t]),I=c=>{d.current=c,b()};p(()=>{b()},[b]);const N=new K;return f.jsx("select",{...l,onChange:v,ref:I,children:o.map((c,g)=>{const{value:S,text:h,uniqueKey:O,...T}=c,P=N.fix(c,g);return r.createElement("option",{...T,key:P,value:P},c.text)})})}function X(e){return e?String(e).replace(/\s+/gu," ").trim():""}function Q(e){try{return e.toLocaleString("en-US",{useGrouping:!1,maximumFractionDigits:20})}catch{return e.toFixed(14).replace(/\.?0+$/,"")}}function R(e){return e?e==="∞"||e==="+∞"?Number.POSITIVE_INFINITY:e==="-∞"?Number.NEGATIVE_INFINITY:Number.parseFloat(e):Number.NaN}function V(e){return Number.isNaN(e)?"":e===Number.POSITIVE_INFINITY?"∞":e===Number.NEGATIVE_INFINITY?"-∞":Q(e)}function ee(e){return e?V(Number.parseFloat(e)):""}function y(e,t=2){return String(e).padStart(t,"0")}const $=r.forwardRef(function({value:t="",onPaste:n,onChange:u,onInput:s,onBlur:l,formatOnChange:a=q,...i},m){const[o,v]=r.useState(t),d=r.useRef(t),b=r.useRef(!1);p(()=>{v(t),b.current=!1,d.current=t},[t]);const I={type:"text",...i,ref:m,value:o,onChange:N=>{v(N.target.value)},onInput:N=>{b.current=!0,s==null||s(N)},onBlur:N=>{const c=a(o);b.current&&(c!==d.current&&(u==null||u({type:"change",value:c,timeStamp:N.timeStamp,target:N.target}),d.current=c),c!==N.target.value&&v(c)),l==null||l(N)}};return f.jsx("input",{...I})});function te({formatOnChange:e=X,...t}){return f.jsx($,{formatOnChange:e,...t,type:"text"})}const ne=r.forwardRef(function({onInput:t,style:n,initialHeight:u="auto",...s},l){const a=r.useRef(null),[i,m]=r.useState(u),o=r.useCallback(()=>{const d=a.current;if(!d)return;d.style.height=u;const b=`${d.scrollHeight}px`;m(b),d.style.height=b},[u]);r.useImperativeHandle(l,()=>({element:a.current,adjustHeight:o}),[o]);const v=E(d=>{o(),t==null||t(d)});return r.useLayoutEffect(()=>{o();const d=a.current;if(!d)return;const b=new ResizeObserver(I=>{o()});return b.observe(d),()=>{b.unobserve(d)}},[o]),f.jsx("textarea",{...s,style:{overflow:"hidden",resize:"none",...n,height:i},onInput:v,ref:a})});function ue(e){const t=r.useId(),n=e.name??t,u=e.valueEquals??Object.is,s=e.options??[],l=new K,a=E(i=>{const m=Number(i.target.value),o=s[m];o!=null&&e.onChange!=null&&e.onChange({value:o.value,index:m,type:"change",timeStamp:i.timeStamp,target:i.target})});return f.jsx("ul",{className:e.className,children:s.map((i,m)=>{const{value:o,text:v,key:d,itemClassName:b,labelClassName:I,inputClassName:N,textClassName:c,...g}=i,S=l.fix(i,m);return e.value!==void 0&&(g.checked=u(o,e.value)),f.jsx("li",{className:b,"aria-disabled":g.disabled,children:f.jsxs("label",{className:I,children:[f.jsx("input",{...g,className:N,value:m,onChange:a,name:n,type:"radio"}),f.jsx("span",{className:c,children:v})]})},S)})})}function j(){return r.useRef(null)}function A(e){e.current!=null&&(clearTimeout(e.current),e.current=null)}const re=({value:e,onChange:t,debounce:n=500,...u})=>{const s=j(),l=j();p(()=>{A(l),s.current!=null&&(s.current.value=e)},[e]);const a=()=>{s.current!=null&&s.current.value!==e&&(t==null||t({value:s.current.value}))};return f.jsx("input",{...u,ref:s,defaultValue:e,onInput:()=>{A(l),l.current=setTimeout(a,n)},onBlur:()=>{A(l),a()}})};function se({onClick:e,...t}){return t.onClick=n=>{n.preventDefault(),e==null||e(n)},f.jsx("button",{type:"button",...t})}function D(e,t){const n=e instanceof Date?e:new Date(e);let u=`${n.getFullYear()}-${y(n.getMonth()+1)}-${y(n.getDate())}T${y(n.getHours())}:${y(n.getMinutes())}`;const s=(t==null?void 0:t.milliseconds)||(t==null?void 0:t.milliseconds)==null&&n.getMilliseconds()!==0;return((t==null?void 0:t.seconds)||(t==null?void 0:t.seconds)==null&&(n.getSeconds()!==0||s))&&(u+=`:${y(n.getSeconds())}`,s&&(u+=`.${y(n.getMilliseconds(),3)}`)),t!=null&&t.offset&&(u+=M(-n.getTimezoneOffset())),u}function M(e){if(e==null)return"";if(e===0)return"Z";const t=e>0?"+":"-",n=Math.floor(Math.abs(e)/60),u=Math.abs(e)%60;return`${t}${y(n)}:${y(u)}`}const le=/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?)(Z|[+-]\d{2}:\d{2})?$/,fe={offset:!1,seconds:!1,milliseconds:!1};function ce(e){return e==null||Number.isNaN(e)||e===""||Number.isNaN(+new Date(e))}function _(e){if(typeof e=="string"){const t=e.match(le);if(t)return t[1]}return ce(e)?"":D(e,fe)}const w={offset:!1};function ae({value:e,defaultValue:t,min:n,max:u,onChange:s,...l}){return e!==void 0&&(l.value=e===null?"":D(e,w)),t!=null&&(l.defaultValue=D(t,w)),n!=null&&(l.min=D(n,w)),u!=null&&(l.max=D(u,w)),s!=null&&(l.onChange=a=>{if(a.currentTarget.value.length){const i=new Date(a.currentTarget.valueAsNumber);s({value:i.valueOf(),date:i})}else s({value:null,date:null})}),f.jsx("input",{type:"datetime-local",...l})}function ie(e){const t=r.useRef(e);return t.current=e,t}function oe(e,t){const n=r.useRef(e),u=ie(t);return r.useEffect(()=>{Object.is(n.current,e)||(u.current(),n.current=e)},[u,e]),r.useCallback(s=>{n.current=s},[])}const de=[{value:-12*60,text:"-12:00"},{value:-11*60,text:"-11:00"},{value:-10*60,text:"-10:00"},{value:-9.5*60,text:"-09:30"},{value:-9*60,text:"-09:00"},{value:-8*60,text:"-08:00"},{value:-7*60,text:"-07:00"},{value:-6*60,text:"-06:00"},{value:-5*60,text:"-05:00"},{value:-4*60,text:"-04:00"},{value:-3.5*60,text:"-03:30"},{value:-3*60,text:"-03:00"},{value:-2*60,text:"-02:00"},{value:-1*60,text:"-01:00"},{value:0,text:"±00:00"},{value:1*60,text:"+01:00"},{value:2*60,text:"+02:00"},{value:3*60,text:"+03:00"},{value:3.5*60,text:"+03:30"},{value:4*60,text:"+04:00"},{value:4.5*60,text:"+04:30"},{value:5*60,text:"+05:00"},{value:5.5*60,text:"+05:30"},{value:5.75*60,text:"+05:45"},{value:6*60,text:"+06:00"},{value:6.5*60,text:"+06:30"},{value:7*60,text:"+07:00"},{value:8*60,text:"+08:00"},{value:8.75*60,text:"+08:45"},{value:9*60,text:"+09:00"},{value:9.5*60,text:"+09:30"},{value:10*60,text:"+10:00"},{value:10.5*60,text:"+10:30"},{value:11*60,text:"+11:00"},{value:12*60,text:"+12:00"},{value:12.75*60,text:"+12:45"},{value:13*60,text:"+13:00"},{value:14*60,text:"+14:00"}];function k(e){if(typeof e!="string"||e==="")return null;const t=e.match(/([+-])(\d{2}):(\d{2})|Z$/);if(!t)return null;if(t[0]==="Z")return 0;const[,n,u,s]=t,l=Number(u)*60+Number(s);return n==="+"?l:-l}function F(e){return e===""?null:-new Date(e).getTimezoneOffset()}function xe({value:e,defaultValue:t,min:n,max:u,onChange:s,...l}){const[a,i]=r.useState(()=>k(e??t)!==null),[m,o]=r.useState(()=>k(e??t)),[v,d]=r.useState(()=>_(e??t)),b=oe(e,()=>{i(k(e)!==null),o(k(e)),d(_(e))}),I=r.useCallback(h=>{b(h),s==null||s({value:h})},[s,b]);n!=null&&(l.min=_(n)),u!=null&&(l.max=_(u));const N=a?m:F(v),c=r.useCallback(h=>{const O=h.currentTarget.value;d(O),I(O+M(N))},[I,N]),g=r.useCallback(h=>{o(h.value),I(v+M(h.value))},[I,v]),S=r.useCallback(h=>{const O=h.currentTarget.checked;i(O);let T;O?v&&m===null?(T=F(v),o(T)):T=m:T=F(v),I(v+M(T))},[m,v,I]);return f.jsxs("span",{children:[f.jsx("input",{type:"datetime-local",...l,value:v,onChange:c}),f.jsx("input",{type:"checkbox",title:a?"Use UTC offset from this device":"Enable UTC offset selection",checked:a,onChange:S}),f.jsx(C,{value:N,onChange:g,disabled:!a,options:de})]})}const me=r.forwardRef(function({placeholder:t,formatOnChange:n=ee,onChange:u,value:s,...l},a){const i={inputMode:"decimal",...l,formatOnChange:n,type:"number"};return s!==void 0&&(i.value=V(s)),t!=null&&(i.placeholder=String(t)),u!=null&&(i.onChange=m=>{u({...m,value:R(m.value)})}),f.jsx($,{...i,ref:a})});x.ActionButton=se,x.DatetimeLocalInput=ae,x.DatetimeOffsetInput=xe,x.DebouncedInput=re,x.Input=$,x.NumberInput=me,x.RadioMenu=ue,x.Select=C,x.TextArea=ne,x.TextInput=te,Object.defineProperty(x,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mpen/react-basic-inputs",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.2",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"files": [
|
|
6
|
+
"files": [
|
|
7
|
+
"dist"
|
|
8
|
+
],
|
|
7
9
|
"exports": {
|
|
8
10
|
".": {
|
|
9
11
|
"import": "./dist/react-basic-inputs.js",
|
|
@@ -21,7 +23,8 @@
|
|
|
21
23
|
"preview": "bun run --bun vite preview",
|
|
22
24
|
"_prepublishOnly": "bun run --bun build",
|
|
23
25
|
"_publish": "npm publish --access=public",
|
|
24
|
-
"build:docs": "typedoc && hg addremove docs"
|
|
26
|
+
"build:docs": "typedoc && hg addremove docs",
|
|
27
|
+
"bump": "npm version patch && bun.exe run build && npm publish"
|
|
25
28
|
},
|
|
26
29
|
"peerDependencies": {
|
|
27
30
|
"react": "^18.2.0"
|