@mpen/react-basic-inputs 0.3.0 → 0.3.1

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.
@@ -30,8 +30,24 @@ export declare type DatetimeLocalInputProps = OverrideProps<'input', {
30
30
  onChange?: (ev: DatetimeLocalInputChangeEvent) => void;
31
31
  }, 'type'>;
32
32
 
33
+ export declare function DatetimeOffsetInput({ value, defaultValue, min, max, onChange, ...props }: DatetimeOffsetInputProps): JSX_2.Element;
34
+
35
+ export declare type DatetimeOffsetInputChangeEvent = {
36
+ value: string;
37
+ };
38
+
39
+ export declare type DatetimeOffsetInputProps = {
40
+ min?: DateValue_2;
41
+ max?: DateValue_2;
42
+ value?: DateValue_2 | null;
43
+ defaultValue?: DateValue_2;
44
+ onChange?: (ev: DatetimeOffsetInputChangeEvent) => void;
45
+ };
46
+
33
47
  export declare type DateValue = number | string | Date;
34
48
 
49
+ declare type DateValue_2 = number | string | Date;
50
+
35
51
  export declare const DebouncedInput: FC<DebouncedInputProps>;
36
52
 
37
53
  export declare type DebouncedInputChangeEvent = {
@@ -1,155 +1,155 @@
1
- var k = Object.defineProperty;
2
- var H = (e, t, r) => t in e ? k(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;
3
- var K = (e, t, r) => (H(e, typeof t != "symbol" ? t + "" : t, r), r);
4
- import { jsx as N, jsxs as L } from "react/jsx-runtime";
5
- import { useDebugValue as Y, useRef as x, useInsertionEffect as j, useEffect as q, useMemo as E, useCallback as D, createElement as z, forwardRef as M, useState as F, useImperativeHandle as P, useLayoutEffect as U, useId as G } from "react";
6
- const W = Object.freeze(() => {
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 B(e) {
8
+ function ee(e) {
9
9
  return e;
10
10
  }
11
- let v;
12
- typeof window < "u" ? v = (e) => {
13
- Y(e);
14
- const t = x(Q);
15
- j(() => {
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 r = x(null);
19
- return r.current || (r.current = function() {
18
+ const n = h(null);
19
+ return n.current || (n.current = function() {
20
20
  return t.current.apply(this, arguments);
21
- }), r.current;
22
- } : v = W;
23
- function J(e) {
24
- return v(e);
21
+ }), n.current;
22
+ } : _ = Q;
23
+ function te(e) {
24
+ return _(e);
25
25
  }
26
- function Q() {
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 X() {
30
- var e = x(!0);
29
+ function ue() {
30
+ var e = h(!0);
31
31
  return e.current ? (e.current = !1, !0) : e.current;
32
32
  }
33
- var w = function(e, t) {
34
- var r = X();
35
- q(function() {
36
- if (!r)
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 Z(e, ...t) {
40
+ function re(e, ...t) {
41
41
  return typeof e == "function" ? e(...t) : e;
42
42
  }
43
- function C(e, t) {
43
+ function se(e, t) {
44
44
  if (e.uniqueKey != null)
45
- return Z(e.uniqueKey, e, t);
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 r = JSON.stringify(e.value);
52
- if (r !== void 0)
53
- return r;
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 A {
58
+ class Y {
59
59
  constructor() {
60
- K(this, "usedKeys", /* @__PURE__ */ new Map());
60
+ P(this, "_usedKeys", /* @__PURE__ */ new Map());
61
61
  }
62
- fix(t, r) {
63
- let n = C(t, r);
62
+ fix(t, n) {
63
+ let u = se(t, n);
64
64
  for (; ; ) {
65
- let u = this.usedKeys.get(n);
66
- if (u === void 0) {
67
- this.usedKeys.set(n, 1);
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.usedKeys.set(n, ++u), n = `${n}(${u})`;
70
+ this._usedKeys.set(u, ++r), u = `${u}(${r})`;
71
71
  }
72
- return n;
72
+ return u;
73
73
  }
74
74
  }
75
- const ee = (e) => ({
75
+ const le = (e) => ({
76
76
  value: e,
77
77
  text: String(e),
78
78
  disabled: !0,
79
- key: re
80
- }), te = "3c9369b7-0a5e-46ea-93c2-e8b9fec67fdb", re = "1a53f789-77f5-4ce6-a829-b00e563f1ee8";
81
- function de({
79
+ key: ae
80
+ }), ce = "3c9369b7-0a5e-46ea-93c2-e8b9fec67fdb", ae = "1a53f789-77f5-4ce6-a829-b00e563f1ee8";
81
+ function ie({
82
82
  options: e,
83
83
  value: t,
84
- invalidValueOption: r = ee,
85
- onChange: n,
86
- placeholder: u,
87
- ...c
84
+ invalidValueOption: n = le,
85
+ onChange: u,
86
+ placeholder: r,
87
+ ...s
88
88
  }) {
89
- const i = t == null, l = E(() => t != null && e.some((s) => s.value == t), [e, t]), o = E(() => t == null || !r ? null : r(t), [r, t]), a = E(() => {
90
- if (l)
89
+ const a = t == null, c = F(() => t != null && e.some((l) => l.value == t), [e, t]), o = F(() => t == null || !n ? null : n(t), [n, t]), i = F(() => {
90
+ if (c)
91
91
  return e;
92
- const s = [...e];
93
- return i ? u != null && s.unshift({ text: u, hidden: !0, value: null, key: te }) : o && s.push(o), s;
94
- }, [l, e, i, o, u]), g = J((s) => {
95
- const I = s.target.selectedIndex, S = a[I];
96
- n == null || n({
92
+ const l = [...e];
93
+ return a ? r != null && l.unshift({ text: r, hidden: !0, value: null, key: ce }) : o && l.push(o), l;
94
+ }, [c, e, a, o, r]), d = te((l) => {
95
+ const g = l.target.selectedIndex, S = i[g];
96
+ u == null || u({
97
97
  value: S.value,
98
98
  // option: opt,
99
99
  // event: ev,
100
- index: I,
100
+ index: g,
101
101
  type: "change",
102
- timeStamp: s.timeStamp,
103
- target: s.target
102
+ timeStamp: l.timeStamp,
103
+ target: l.target
104
104
  });
105
- }), f = x(null), d = D(() => {
106
- f.current && (f.current.selectedIndex < 0 || a[f.current.selectedIndex].value != t) && (f.current.selectedIndex = a.findIndex((s) => s.value == t));
107
- }, [a, t]), y = (s) => {
108
- f.current = s, d();
105
+ }), f = h(null), m = T(() => {
106
+ f.current && (f.current.selectedIndex < 0 || i[f.current.selectedIndex].value != t) && (f.current.selectedIndex = i.findIndex((l) => l.value == t));
107
+ }, [i, t]), N = (l) => {
108
+ f.current = l, m();
109
109
  };
110
- w(() => {
111
- d();
112
- }, [d]);
113
- const m = new A();
114
- return /* @__PURE__ */ N("select", { ...c, onChange: g, ref: y, children: a.map((s, I) => {
115
- const { value: S, text: le, uniqueKey: ie, ...R } = s, _ = m.fix(s, I);
116
- return /* @__PURE__ */ z("option", { ...R, key: _, value: _ }, s.text);
110
+ R(() => {
111
+ m();
112
+ }, [m]);
113
+ const x = new Y();
114
+ return /* @__PURE__ */ v("select", { ...s, onChange: d, ref: N, children: i.map((l, g) => {
115
+ const { value: S, text: b, uniqueKey: O, ...y } = l, V = x.fix(l, g);
116
+ return /* @__PURE__ */ W("option", { ...y, key: V, value: V }, l.text);
117
117
  }) });
118
118
  }
119
- function ne(e) {
119
+ function fe(e) {
120
120
  return e ? String(e).replace(/\s+/gu, " ").trim() : "";
121
121
  }
122
- function ue(e) {
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 se(e) {
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 V(e) {
133
- return Number.isNaN(e) ? "" : e === Number.POSITIVE_INFINITY ? "∞" : e === Number.NEGATIVE_INFINITY ? "-∞" : ue(e);
132
+ function j(e) {
133
+ return Number.isNaN(e) ? "" : e === Number.POSITIVE_INFINITY ? "∞" : e === Number.NEGATIVE_INFINITY ? "-∞" : oe(e);
134
134
  }
135
- function ce(e) {
136
- return e ? V(Number.parseFloat(e)) : "";
135
+ function me(e) {
136
+ return e ? j(Number.parseFloat(e)) : "";
137
137
  }
138
- function b(e, t = 2) {
138
+ function I(e, t = 2) {
139
139
  return String(e).padStart(t, "0");
140
140
  }
141
- const p = M(function({ value: t = "", onPaste: r, onChange: n, onInput: u, onBlur: c, formatOnChange: i = B, ...l }, o) {
142
- const [a, g] = F(t), f = x(t), d = x(!1);
143
- w(() => {
144
- g(t), d.current = !1, f.current = t;
141
+ const z = k(function({ value: t = "", onPaste: n, onChange: u, onInput: r, onBlur: s, formatOnChange: a = ee, ...c }, o) {
142
+ const [i, d] = D(t), f = h(t), m = h(!1);
143
+ R(() => {
144
+ d(t), m.current = !1, f.current = t;
145
145
  }, [t]);
146
- const y = {
146
+ const N = {
147
147
  type: "text",
148
- ...l,
148
+ ...c,
149
149
  ref: o,
150
- value: a,
151
- onChange: (m) => {
152
- g(m.target.value);
150
+ value: i,
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: (m) => {
171
- d.current = !0, u == null || u(m);
170
+ onInput: (x) => {
171
+ m.current = !0, r == null || r(x);
172
172
  },
173
- onBlur: (m) => {
174
- const s = i(a);
175
- d.current && (s !== f.current && (n == null || n({
173
+ onBlur: (x) => {
174
+ const l = a(i);
175
+ m.current && (l !== f.current && (u == null || u({
176
176
  type: "change",
177
- value: s,
178
- timeStamp: m.timeStamp,
179
- target: m.target
180
- }), f.current = s), s !== m.target.value && g(s)), c == null || c(m);
177
+ value: l,
178
+ timeStamp: x.timeStamp,
179
+ target: x.target
180
+ }), f.current = l), l !== x.target.value && d(l)), s == null || s(x);
181
181
  }
182
182
  };
183
- return /* @__PURE__ */ N("input", { ...y });
183
+ return /* @__PURE__ */ v("input", { ...N });
184
184
  });
185
- function me({ formatOnChange: e = ne, ...t }) {
186
- return /* @__PURE__ */ N(p, { formatOnChange: e, ...t, type: "text" });
185
+ function Se({ formatOnChange: e = fe, ...t }) {
186
+ return /* @__PURE__ */ v(z, { formatOnChange: e, ...t, type: "text" });
187
187
  }
188
- const Ne = M(function({
188
+ const Oe = k(function({
189
189
  onInput: t,
190
- style: r,
191
- initialHeight: n = "auto",
192
- ...u
193
- }, c) {
194
- const i = x(null), [l, o] = F(n), a = D(() => {
195
- const f = i.current;
190
+ style: n,
191
+ initialHeight: u = "auto",
192
+ ...r
193
+ }, s) {
194
+ const a = h(null), [c, o] = D(u), i = T(() => {
195
+ const f = a.current;
196
196
  if (!f)
197
197
  return;
198
- f.style.height = n;
199
- const d = `${f.scrollHeight}px`;
200
- o(d), f.style.height = d;
201
- }, [n]);
202
- P(c, () => ({
203
- element: i.current,
204
- adjustHeight: a
205
- }), [a]);
206
- const g = v((f) => {
207
- a(), t == null || t(f);
198
+ f.style.height = u;
199
+ const m = `${f.scrollHeight}px`;
200
+ o(m), f.style.height = m;
201
+ }, [u]);
202
+ B(s, () => ({
203
+ element: a.current,
204
+ adjustHeight: i
205
+ }), [i]);
206
+ const d = _((f) => {
207
+ i(), t == null || t(f);
208
208
  });
209
- return U(() => {
210
- a();
211
- const f = i.current;
209
+ return J(() => {
210
+ i();
211
+ const f = a.current;
212
212
  if (!f)
213
213
  return;
214
- const d = new ResizeObserver((y) => {
215
- a();
214
+ const m = new ResizeObserver((N) => {
215
+ i();
216
216
  });
217
- return d.observe(f), () => {
218
- d.unobserve(f);
217
+ return m.observe(f), () => {
218
+ m.unobserve(f);
219
219
  };
220
- }, [a]), /* @__PURE__ */ N("textarea", { ...u, style: {
220
+ }, [i]), /* @__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
- ...r,
225
- height: l
226
- }, onInput: g, ref: i });
224
+ ...n,
225
+ height: c
226
+ }, onInput: d, ref: a });
227
227
  });
228
- function ge(e) {
229
- const t = G(), r = e.name ?? t, n = e.valueEquals ?? Object.is, u = e.options ?? [], c = new A(), i = v((l) => {
230
- const o = Number(l.target.value), a = u[o];
231
- a != null && e.onChange != null && e.onChange({
232
- value: a.value,
228
+ function Ee(e) {
229
+ const t = X(), n = e.name ?? t, u = e.valueEquals ?? Object.is, r = e.options ?? [], s = new Y(), a = _((c) => {
230
+ const o = Number(c.target.value), i = r[o];
231
+ i != null && e.onChange != null && e.onChange({
232
+ value: i.value,
233
233
  index: o,
234
234
  type: "change",
235
- timeStamp: l.timeStamp,
236
- target: l.target
235
+ timeStamp: c.timeStamp,
236
+ target: c.target
237
237
  });
238
238
  });
239
- return /* @__PURE__ */ N("ul", { className: e.className, children: u.map((l, o) => {
240
- const { value: a, text: g, key: f, itemClassName: d, labelClassName: y, inputClassName: m, textClassName: s, ...I } = l, S = c.fix(l, o);
241
- return e.value !== void 0 && (I.checked = n(a, e.value)), /* @__PURE__ */ N("li", { className: d, "aria-disabled": I.disabled, children: /* @__PURE__ */ L("label", { className: y, children: [
242
- /* @__PURE__ */ N("input", { ...I, className: m, value: o, onChange: i, name: r, type: "radio" }),
243
- /* @__PURE__ */ N("span", { className: s, children: g })
239
+ return /* @__PURE__ */ v("ul", { className: e.className, children: r.map((c, o) => {
240
+ const { value: i, text: d, key: f, itemClassName: m, labelClassName: N, inputClassName: x, textClassName: l, ...g } = c, S = s.fix(c, o);
241
+ return e.value !== void 0 && (g.checked = u(i, 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: a, name: n, type: "radio" }),
243
+ /* @__PURE__ */ v("span", { className: l, children: d })
244
244
  ] }) }, S);
245
245
  }) });
246
246
  }
247
- function $() {
248
- return x(null);
247
+ function U() {
248
+ return h(null);
249
249
  }
250
- function O(e) {
250
+ function A(e) {
251
251
  e.current != null && (clearTimeout(e.current), e.current = null);
252
252
  }
253
- const Ie = ({
253
+ const De = ({
254
254
  value: e,
255
255
  onChange: t,
256
- debounce: r = 500,
257
- ...n
256
+ debounce: n = 500,
257
+ ...u
258
258
  }) => {
259
- const u = $(), c = $();
260
- w(() => {
261
- O(c), u.current != null && (u.current.value = e);
259
+ const r = U(), s = U();
260
+ R(() => {
261
+ A(s), r.current != null && (r.current.value = e);
262
262
  }, [e]);
263
- const i = () => {
264
- u.current != null && u.current.value !== e && (t == null || t({ value: u.current.value }));
263
+ const a = () => {
264
+ r.current != null && r.current.value !== e && (t == null || t({ value: r.current.value }));
265
265
  };
266
- return /* @__PURE__ */ N("input", { ...n, ref: u, defaultValue: e, onInput: () => {
267
- O(c), c.current = setTimeout(i, r);
266
+ return /* @__PURE__ */ v("input", { ...u, ref: r, defaultValue: e, onInput: () => {
267
+ A(s), s.current = setTimeout(a, n);
268
268
  }, onBlur: () => {
269
- O(c), i();
269
+ A(s), a();
270
270
  } });
271
271
  };
272
- function be({ onClick: e, ...t }) {
273
- return t.onClick = (r) => {
274
- r.preventDefault(), e == null || e(r);
275
- }, /* @__PURE__ */ N("button", { type: "button", ...t });
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 h(e, t) {
278
- const r = new Date(e);
279
- let n = `${r.getFullYear()}-${b(r.getMonth() + 1)}-${b(r.getDate())}T${b(r.getHours())}:${b(r.getMinutes())}`;
280
- const u = (t == null ? void 0 : t.milliseconds) || (t == null ? void 0 : t.milliseconds) == null && r.getMilliseconds() !== 0;
281
- if (((t == null ? void 0 : t.seconds) || (t == null ? void 0 : t.seconds) == null && (r.getSeconds() !== 0 || u)) && (n += `:${b(r.getSeconds())}`, u && (n += `.${b(r.getMilliseconds(), 3)}`)), t != null && t.offset) {
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 n;
301
+ return Ne(e) ? "" : E(e, ve);
286
302
  }
287
- const T = { offset: !1 };
288
- function xe({ value: e, defaultValue: t, min: r, max: n, onChange: u, ...c }) {
289
- return e !== void 0 && (c.value = e === null ? "" : h(e, T)), t != null && (c.defaultValue = h(t, T)), r != null && (c.min = h(r, T)), n != null && (c.max = h(n, T)), u != null && (c.onChange = (i) => {
290
- if (i.currentTarget.value.length) {
291
- const l = new Date(i.currentTarget.valueAsNumber);
292
- u({
293
- isoString: h(l, { offset: !0 }),
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 = (a) => {
306
+ if (a.currentTarget.value.length) {
307
+ const c = new Date(a.currentTarget.valueAsNumber);
308
+ r({
309
+ // TODO: undo this, "date time local" should in fact be local (no time zone)
310
+ isoString: E(c, { offset: !0 }),
294
311
  // isoString: date.toISOString(),
295
- value: l.valueOf(),
296
- date: l
312
+ value: c.valueOf(),
313
+ date: c
297
314
  });
298
315
  } else
299
- u({
316
+ r({
300
317
  // isoStringWithOffset: null,
301
318
  isoString: null,
302
319
  value: null,
303
320
  date: null
304
321
  });
305
- }), /* @__PURE__ */ N("input", { type: "datetime-local", ...c });
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
+ }, []);
306
335
  }
307
- const ye = M(function({ placeholder: t, formatOnChange: r = ce, onChange: n, value: u, ...c }, i) {
308
- const l = {
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 [a, c] = D(() => $(e ?? t) !== null), [o, i] = D(() => $(e ?? t)), [d, f] = D(() => M(e ?? t)), m = be(e, () => {
437
+ c($(e) !== null), i($(e)), f(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 = a ? o : K(d), l = T(
445
+ (b) => {
446
+ const O = b.currentTarget.value;
447
+ f(O), N(O + p(x));
448
+ },
449
+ [N, x]
450
+ ), g = T(
451
+ (b) => {
452
+ i(b.value), N(d + p(b.value));
453
+ },
454
+ [N, d]
455
+ ), S = T(
456
+ (b) => {
457
+ const O = b.currentTarget.checked;
458
+ c(O);
459
+ let y;
460
+ O ? d && o === null ? (y = K(d), i(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: l
472
+ }
473
+ ),
474
+ /* @__PURE__ */ v(
475
+ "input",
476
+ {
477
+ type: "checkbox",
478
+ title: a ? "Use UTC offset from this device" : "Enable UTC offset selection",
479
+ checked: a,
480
+ onChange: S
481
+ }
482
+ ),
483
+ /* @__PURE__ */ v(
484
+ ie,
485
+ {
486
+ value: x,
487
+ onChange: g,
488
+ disabled: !a,
489
+ options: he
490
+ }
491
+ )
492
+ ] });
493
+ }
494
+ const $e = k(function({ placeholder: t, formatOnChange: n = me, onChange: u, value: r, ...s }, a) {
495
+ const c = {
309
496
  inputMode: "decimal",
310
- ...c,
311
- formatOnChange: r,
497
+ ...s,
498
+ formatOnChange: n,
312
499
  type: "number"
313
500
  };
314
- return u !== void 0 && (l.value = V(u)), t != null && (l.placeholder = String(t)), n != null && (l.onChange = (o) => {
315
- n({
501
+ return r !== void 0 && (c.value = j(r)), t != null && (c.placeholder = String(t)), u != null && (c.onChange = (o) => {
502
+ u({
316
503
  ...o,
317
- value: se(o.value)
504
+ value: de(o.value)
318
505
  });
319
- }), /* @__PURE__ */ N(p, { ...l, ref: i });
506
+ }), /* @__PURE__ */ v(z, { ...c, ref: a });
320
507
  });
321
508
  export {
322
- be as ActionButton,
323
- xe as DatetimeLocalInput,
324
- Ie as DebouncedInput,
325
- p as Input,
326
- ye as NumberInput,
327
- ge as RadioMenu,
328
- de as Select,
329
- Ne as TextArea,
330
- me as TextInput
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
+ ie as Select,
517
+ Oe as TextArea,
518
+ Se 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 D;typeof window<"u"?D=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}:D=U;function H(e){return D(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,O=o[g];u==null||u({value:O.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:O,text:h,uniqueKey:E,...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=D(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=D(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,O=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})]})},O)})})}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 S(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)?"":S(e,fe)}const w={offset:!1};function ie({value:e,defaultValue:t,min:n,max:u,onChange:s,...l}){return e!==void 0&&(l.value=e===null?"":S(e,w)),t!=null&&(l.defaultValue=S(t,w)),n!=null&&(l.min=S(n,w)),u!=null&&(l.max=S(u,w)),s!=null&&(l.onChange=a=>{if(a.currentTarget.value.length){const i=new Date(a.currentTarget.valueAsNumber);s({isoString:S(i,{offset:!0}),value:i.valueOf(),date:i})}else s({isoString:null,value:null,date:null})}),f.jsx("input",{type:"datetime-local",...l})}function ae(e){const t=r.useRef(e);return t.current=e,t}function oe(e,t){const n=r.useRef(e),u=ae(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 E=h.currentTarget.value;d(E),I(E+M(N))},[I,N]),g=r.useCallback(h=>{o(h.value),I(v+M(h.value))},[I,v]),O=r.useCallback(h=>{const E=h.currentTarget.checked;i(E);let T;E?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:O}),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=ie,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,7 +1,7 @@
1
1
  {
2
2
  "name": "@mpen/react-basic-inputs",
3
3
  "private": false,
4
- "version": "0.3.0",
4
+ "version": "0.3.1",
5
5
  "type": "module",
6
6
  "files": ["dist"],
7
7
  "exports": {