@mpen/react-basic-inputs 0.2.10 → 0.3.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.
@@ -14,15 +14,24 @@ export declare function ActionButton({ onClick, ...props }: ActionButtonProps):
14
14
 
15
15
  export declare type ActionButtonProps = RequiredKeys<ComponentPropsWithoutRef<'button'>, 'onClick'>;
16
16
 
17
- export declare function DatetimeLocalInput({ value, defaultValue, min, max, ...props }: DatetimeLocalInputProps): JSX_2.Element;
17
+ export declare function DatetimeLocalInput({ value, defaultValue, min, max, onChange, ...props }: DatetimeLocalInputProps): JSX_2.Element;
18
+
19
+ export declare type DatetimeLocalInputChangeEvent = {
20
+ isoString: string | null;
21
+ value: number | null;
22
+ date: Date | null;
23
+ };
18
24
 
19
25
  export declare type DatetimeLocalInputProps = OverrideProps<'input', {
20
- min?: number | string | Date;
21
- max?: number | string | Date;
22
- value?: number | string | Date | null;
23
- defaultValue?: number | string | Date;
26
+ min?: DateValue;
27
+ max?: DateValue;
28
+ value?: DateValue | null;
29
+ defaultValue?: DateValue;
30
+ onChange?: (ev: DatetimeLocalInputChangeEvent) => void;
24
31
  }, 'type'>;
25
32
 
33
+ export declare type DateValue = number | string | Date;
34
+
26
35
  export declare const DebouncedInput: FC<DebouncedInputProps>;
27
36
 
28
37
  export declare type DebouncedInputChangeEvent = {
@@ -1,48 +1,48 @@
1
- var $ = Object.defineProperty;
2
- var k = (e, t, r) => t in e ? $(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;
3
- var F = (e, t, r) => (k(e, typeof t != "symbol" ? t + "" : t, r), r);
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
4
  import { jsx as N, jsxs as L } from "react/jsx-runtime";
5
- import { useDebugValue as Y, useRef as g, useInsertionEffect as H, useEffect as j, useMemo as S, useCallback as _, createElement as q, forwardRef as T, useState as w, useImperativeHandle as z, useLayoutEffect as G, useId as P } from "react";
6
- const U = Object.freeze(() => {
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(() => {
7
7
  });
8
- function W(e) {
8
+ function B(e) {
9
9
  return e;
10
10
  }
11
- let p;
12
- typeof window < "u" ? p = (e) => {
11
+ let v;
12
+ typeof window < "u" ? v = (e) => {
13
13
  Y(e);
14
- const t = g(J);
15
- H(() => {
14
+ const t = x(Q);
15
+ j(() => {
16
16
  t.current = e;
17
17
  }, [e]);
18
- const r = g(null);
18
+ const r = x(null);
19
19
  return r.current || (r.current = function() {
20
20
  return t.current.apply(this, arguments);
21
21
  }), r.current;
22
- } : p = U;
23
- function B(e) {
24
- return p(e);
22
+ } : v = W;
23
+ function J(e) {
24
+ return v(e);
25
25
  }
26
- function J() {
26
+ function Q() {
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 C() {
30
- var e = g(!0);
29
+ function X() {
30
+ var e = x(!0);
31
31
  return e.current ? (e.current = !1, !0) : e.current;
32
32
  }
33
- var O = function(e, t) {
34
- var r = C();
35
- j(function() {
33
+ var w = function(e, t) {
34
+ var r = X();
35
+ q(function() {
36
36
  if (!r)
37
37
  return e();
38
38
  }, t);
39
39
  };
40
- function Q(e, ...t) {
40
+ function Z(e, ...t) {
41
41
  return typeof e == "function" ? e(...t) : e;
42
42
  }
43
- function X(e, t) {
43
+ function C(e, t) {
44
44
  if (e.uniqueKey != null)
45
- return Q(e.uniqueKey, e, t);
45
+ return Z(e.uniqueKey, e, t);
46
46
  if (typeof e.value == "string")
47
47
  return e.value;
48
48
  if (typeof e.value == "number")
@@ -55,46 +55,46 @@ function X(e, t) {
55
55
  }
56
56
  return String(t);
57
57
  }
58
- class V {
58
+ class A {
59
59
  constructor() {
60
- F(this, "usedKeys", /* @__PURE__ */ new Map());
60
+ K(this, "usedKeys", /* @__PURE__ */ new Map());
61
61
  }
62
62
  fix(t, r) {
63
- let u = X(t, r);
63
+ let n = C(t, r);
64
64
  for (; ; ) {
65
- let n = this.usedKeys.get(u);
66
- if (n === void 0) {
67
- this.usedKeys.set(u, 1);
65
+ let u = this.usedKeys.get(n);
66
+ if (u === void 0) {
67
+ this.usedKeys.set(n, 1);
68
68
  break;
69
69
  }
70
- this.usedKeys.set(u, ++n), u = `${u}(${n})`;
70
+ this.usedKeys.set(n, ++u), n = `${n}(${u})`;
71
71
  }
72
- return u;
72
+ return n;
73
73
  }
74
74
  }
75
- const Z = (e) => ({
75
+ const ee = (e) => ({
76
76
  value: e,
77
77
  text: String(e),
78
78
  disabled: !0,
79
- key: te
80
- }), ee = "3c9369b7-0a5e-46ea-93c2-e8b9fec67fdb", te = "1a53f789-77f5-4ce6-a829-b00e563f1ee8";
81
- function oe({
79
+ key: re
80
+ }), te = "3c9369b7-0a5e-46ea-93c2-e8b9fec67fdb", re = "1a53f789-77f5-4ce6-a829-b00e563f1ee8";
81
+ function de({
82
82
  options: e,
83
83
  value: t,
84
- invalidValueOption: r = Z,
85
- onChange: u,
86
- placeholder: n,
87
- ...a
84
+ invalidValueOption: r = ee,
85
+ onChange: n,
86
+ placeholder: u,
87
+ ...c
88
88
  }) {
89
- const f = t == null, l = S(() => t != null && e.some((s) => s.value == t), [e, t]), o = S(() => t == null || !r ? null : r(t), [r, t]), c = S(() => {
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
90
  if (l)
91
91
  return e;
92
92
  const s = [...e];
93
- return f ? n != null && s.unshift({ text: n, hidden: !0, value: null, key: ee }) : o && s.push(o), s;
94
- }, [l, e, f, o, n]), x = B((s) => {
95
- const I = s.target.selectedIndex, v = c[I];
96
- u == null || u({
97
- value: v.value,
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({
97
+ value: S.value,
98
98
  // option: opt,
99
99
  // event: ev,
100
100
  index: I,
@@ -102,59 +102,54 @@ function oe({
102
102
  timeStamp: s.timeStamp,
103
103
  target: s.target
104
104
  });
105
- }), i = g(null), d = _(() => {
106
- i.current && (i.current.selectedIndex < 0 || c[i.current.selectedIndex].value != t) && (i.current.selectedIndex = c.findIndex((s) => s.value == t));
107
- }, [c, t]), b = (s) => {
108
- i.current = s, d();
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();
109
109
  };
110
- O(() => {
110
+ w(() => {
111
111
  d();
112
112
  }, [d]);
113
- const m = new V();
114
- return /* @__PURE__ */ N("select", { ...a, onChange: x, ref: b, children: c.map((s, I) => {
115
- const { value: v, text: ie, uniqueKey: ce, ...R } = s, K = m.fix(s, I);
116
- return /* @__PURE__ */ q("option", { ...R, key: K, value: K }, s.text);
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);
117
117
  }) });
118
118
  }
119
- function re(e) {
119
+ function ne(e) {
120
120
  return e ? String(e).replace(/\s+/gu, " ").trim() : "";
121
121
  }
122
- function ne(e) {
122
+ function ue(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 ue(e) {
129
+ function se(e) {
130
130
  return e ? e === "∞" || e === "+∞" ? Number.POSITIVE_INFINITY : e === "-∞" ? Number.NEGATIVE_INFINITY : Number.parseFloat(e) : Number.NaN;
131
131
  }
132
- function D(e) {
133
- return Number.isNaN(e) ? "" : e === Number.POSITIVE_INFINITY ? "∞" : e === Number.NEGATIVE_INFINITY ? "-∞" : ne(e);
132
+ function V(e) {
133
+ return Number.isNaN(e) ? "" : e === Number.POSITIVE_INFINITY ? "∞" : e === Number.NEGATIVE_INFINITY ? "-∞" : ue(e);
134
134
  }
135
- function se(e) {
136
- return e ? D(Number.parseFloat(e)) : "";
135
+ function ce(e) {
136
+ return e ? V(Number.parseFloat(e)) : "";
137
137
  }
138
- function y(e, t = 2) {
138
+ function b(e, t = 2) {
139
139
  return String(e).padStart(t, "0");
140
140
  }
141
- function h(e) {
142
- const t = new Date(e);
143
- let r = `${t.getFullYear()}-${y(t.getMonth() + 1)}-${y(t.getDate())}T${y(t.getHours())}:${y(t.getMinutes())}`;
144
- return (t.getSeconds() !== 0 || t.getMilliseconds() !== 0) && (r += ":" + y(t.getSeconds()), t.getMilliseconds() !== 0 && (r += "." + y(t.getMilliseconds(), 3))), r;
145
- }
146
- const A = T(function({ value: t = "", onPaste: r, onChange: u, onInput: n, onBlur: a, formatOnChange: f = W, ...l }, o) {
147
- const [c, x] = w(t), i = g(t), d = g(!1);
148
- O(() => {
149
- x(t), d.current = !1, i.current = t;
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;
150
145
  }, [t]);
151
- const b = {
146
+ const y = {
152
147
  type: "text",
153
148
  ...l,
154
149
  ref: o,
155
- value: c,
150
+ value: a,
156
151
  onChange: (m) => {
157
- x(m.target.value);
152
+ g(m.target.value);
158
153
  },
159
154
  // TODO: fire a change event onPaste ?
160
155
  // formatOnPaste?
@@ -173,137 +168,164 @@ const A = T(function({ value: t = "", onPaste: r, onChange: u, onInput: n, onBlu
173
168
  // // setCurrentValue(formatOnChange(ev.clipboardData.getData('text/plain')))
174
169
  // },
175
170
  onInput: (m) => {
176
- d.current = !0, n == null || n(m);
171
+ d.current = !0, u == null || u(m);
177
172
  },
178
173
  onBlur: (m) => {
179
- const s = f(c);
180
- d.current && (s !== i.current && (u == null || u({
174
+ const s = i(a);
175
+ d.current && (s !== f.current && (n == null || n({
181
176
  type: "change",
182
177
  value: s,
183
178
  timeStamp: m.timeStamp,
184
179
  target: m.target
185
- }), i.current = s), s !== m.target.value && x(s)), a == null || a(m);
180
+ }), f.current = s), s !== m.target.value && g(s)), c == null || c(m);
186
181
  }
187
182
  };
188
- return /* @__PURE__ */ N("input", { ...b });
183
+ return /* @__PURE__ */ N("input", { ...y });
189
184
  });
190
- function de({ formatOnChange: e = re, ...t }) {
191
- return /* @__PURE__ */ N(A, { formatOnChange: e, ...t, type: "text" });
185
+ function me({ formatOnChange: e = ne, ...t }) {
186
+ return /* @__PURE__ */ N(p, { formatOnChange: e, ...t, type: "text" });
192
187
  }
193
- const me = T(function({
188
+ const Ne = M(function({
194
189
  onInput: t,
195
190
  style: r,
196
- initialHeight: u = "auto",
197
- ...n
198
- }, a) {
199
- const f = g(null), [l, o] = w(u), c = _(() => {
200
- const i = f.current;
201
- if (!i)
191
+ initialHeight: n = "auto",
192
+ ...u
193
+ }, c) {
194
+ const i = x(null), [l, o] = F(n), a = D(() => {
195
+ const f = i.current;
196
+ if (!f)
202
197
  return;
203
- i.style.height = u;
204
- const d = `${i.scrollHeight}px`;
205
- o(d), i.style.height = d;
206
- }, [u]);
207
- z(a, () => ({
208
- element: f.current,
209
- adjustHeight: c
210
- }), [c]);
211
- const x = p((i) => {
212
- c(), t == null || t(i);
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);
213
208
  });
214
- return G(() => {
215
- c();
216
- const i = f.current;
217
- if (!i)
209
+ return U(() => {
210
+ a();
211
+ const f = i.current;
212
+ if (!f)
218
213
  return;
219
- const d = new ResizeObserver((b) => {
220
- c();
214
+ const d = new ResizeObserver((y) => {
215
+ a();
221
216
  });
222
- return d.observe(i), () => {
223
- d.unobserve(i);
217
+ return d.observe(f), () => {
218
+ d.unobserve(f);
224
219
  };
225
- }, [c]), /* @__PURE__ */ N("textarea", { ...n, style: {
220
+ }, [a]), /* @__PURE__ */ N("textarea", { ...u, style: {
226
221
  overflow: "hidden",
227
222
  // these 2 styles aren't needed if the caller sets them in CSS.
228
223
  resize: "none",
229
224
  ...r,
230
225
  height: l
231
- }, onInput: x, ref: f });
226
+ }, onInput: g, ref: i });
232
227
  });
233
- function Ne(e) {
234
- const t = P(), r = e.name ?? t, u = e.valueEquals ?? Object.is, n = e.options ?? [], a = new V(), f = p((l) => {
235
- const o = Number(l.target.value), c = n[o];
236
- c != null && e.onChange != null && e.onChange({
237
- value: c.value,
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,
238
233
  index: o,
239
234
  type: "change",
240
235
  timeStamp: l.timeStamp,
241
236
  target: l.target
242
237
  });
243
238
  });
244
- return /* @__PURE__ */ N("ul", { className: e.className, children: n.map((l, o) => {
245
- const { value: c, text: x, key: i, itemClassName: d, labelClassName: b, inputClassName: m, textClassName: s, ...I } = l, v = a.fix(l, o);
246
- return e.value !== void 0 && (I.checked = u(c, e.value)), /* @__PURE__ */ N("li", { className: d, "aria-disabled": I.disabled, children: /* @__PURE__ */ L("label", { className: b, children: [
247
- /* @__PURE__ */ N("input", { ...I, className: m, value: o, onChange: f, name: r, type: "radio" }),
248
- /* @__PURE__ */ N("span", { className: s, children: x })
249
- ] }) }, v);
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 })
244
+ ] }) }, S);
250
245
  }) });
251
246
  }
252
- function M() {
253
- return g(null);
247
+ function $() {
248
+ return x(null);
254
249
  }
255
- function E(e) {
250
+ function O(e) {
256
251
  e.current != null && (clearTimeout(e.current), e.current = null);
257
252
  }
258
- const xe = ({
253
+ const Ie = ({
259
254
  value: e,
260
255
  onChange: t,
261
256
  debounce: r = 500,
262
- ...u
257
+ ...n
263
258
  }) => {
264
- const n = M(), a = M();
265
- O(() => {
266
- E(a), n.current != null && (n.current.value = e);
259
+ const u = $(), c = $();
260
+ w(() => {
261
+ O(c), u.current != null && (u.current.value = e);
267
262
  }, [e]);
268
- const f = () => {
269
- n.current != null && n.current.value !== e && (t == null || t({ value: n.current.value }));
263
+ const i = () => {
264
+ u.current != null && u.current.value !== e && (t == null || t({ value: u.current.value }));
270
265
  };
271
- return /* @__PURE__ */ N("input", { ...u, ref: n, defaultValue: e, onInput: () => {
272
- E(a), a.current = setTimeout(f, r);
266
+ return /* @__PURE__ */ N("input", { ...n, ref: u, defaultValue: e, onInput: () => {
267
+ O(c), c.current = setTimeout(i, r);
273
268
  }, onBlur: () => {
274
- E(a), f();
269
+ O(c), i();
275
270
  } });
276
271
  };
277
- function Ie({ onClick: e, ...t }) {
272
+ function be({ onClick: e, ...t }) {
278
273
  return t.onClick = (r) => {
279
274
  r.preventDefault(), e == null || e(r);
280
275
  }, /* @__PURE__ */ N("button", { type: "button", ...t });
281
276
  }
282
- function ge({ value: e, defaultValue: t, min: r, max: u, ...n }) {
283
- return e !== void 0 && (n.value = e === null ? "" : h(e)), t != null && (n.defaultValue = h(t)), r != null && (n.min = h(r)), u != null && (n.max = h(u)), /* @__PURE__ */ N("input", { type: "datetime-local", ...n });
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)}`;
284
+ }
285
+ return n;
286
+ }
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 }),
294
+ // isoString: date.toISOString(),
295
+ value: l.valueOf(),
296
+ date: l
297
+ });
298
+ } else
299
+ u({
300
+ // isoStringWithOffset: null,
301
+ isoString: null,
302
+ value: null,
303
+ date: null
304
+ });
305
+ }), /* @__PURE__ */ N("input", { type: "datetime-local", ...c });
284
306
  }
285
- const be = T(function({ placeholder: t, formatOnChange: r = se, onChange: u, value: n, ...a }, f) {
307
+ const ye = M(function({ placeholder: t, formatOnChange: r = ce, onChange: n, value: u, ...c }, i) {
286
308
  const l = {
287
309
  inputMode: "decimal",
288
- ...a,
310
+ ...c,
289
311
  formatOnChange: r,
290
312
  type: "number"
291
313
  };
292
- return n !== void 0 && (l.value = D(n)), t != null && (l.placeholder = String(t)), u != null && (l.onChange = (o) => {
293
- u({
314
+ return u !== void 0 && (l.value = V(u)), t != null && (l.placeholder = String(t)), n != null && (l.onChange = (o) => {
315
+ n({
294
316
  ...o,
295
- value: ue(o.value)
317
+ value: se(o.value)
296
318
  });
297
- }), /* @__PURE__ */ N(A, { ...l, ref: f });
319
+ }), /* @__PURE__ */ N(p, { ...l, ref: i });
298
320
  });
299
321
  export {
300
- Ie as ActionButton,
301
- ge as DatetimeLocalInput,
302
- xe as DebouncedInput,
303
- A as Input,
304
- be as NumberInput,
305
- Ne as RadioMenu,
306
- oe as Select,
307
- me as TextArea,
308
- de as TextInput
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
309
331
  };
@@ -1 +1 @@
1
- (function(f,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react"],i):(f=typeof globalThis<"u"?globalThis:f||self,i(f["@mpen/react-basic-inputs"]={},f.jsxRuntime,f.React))})(this,function(f,i,u){"use strict";var te=Object.defineProperty;var ne=(f,i,u)=>i in f?te(f,i,{enumerable:!0,configurable:!0,writable:!0,value:u}):f[i]=u;var F=(f,i,u)=>(ne(f,typeof i!="symbol"?i+"":i,u),u);const _=Object.freeze(()=>{});function A(e){return e}let h;typeof window<"u"?h=e=>{u.useDebugValue(e);const t=u.useRef(j);u.useInsertionEffect(()=>{t.current=e},[e]);const n=u.useRef(null);return n.current||(n.current=function(){return t.current.apply(this,arguments)}),n.current}:h=_;function V(e){return h(e)}function j(){throw new Error("INVALID_USE_EVENT_INVOCATION: the callback from useEvent cannot be invoked before the component has mounted.")}function $(){var e=u.useRef(!0);return e.current?(e.current=!1,!0):e.current}var T=function(e,t){var n=$();u.useEffect(function(){if(!n)return e()},t)};function k(e,...t){return typeof e=="function"?e(...t):e}function L(e,t){if(e.uniqueKey!=null)return k(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 M{constructor(){F(this,"usedKeys",new Map)}fix(t,n){let s=L(t,n);for(;;){let r=this.usedKeys.get(s);if(r===void 0){this.usedKeys.set(s,1);break}this.usedKeys.set(s,++r),s=`${s}(${r})`}return s}}const q=e=>({value:e,text:String(e),disabled:!0,key:H}),Y="3c9369b7-0a5e-46ea-93c2-e8b9fec67fdb",H="1a53f789-77f5-4ce6-a829-b00e563f1ee8";function z({options:e,value:t,invalidValueOption:n=q,onChange:s,placeholder:r,...d}){const m=t==null,a=u.useMemo(()=>t!=null&&e.some(c=>c.value==t),[e,t]),N=u.useMemo(()=>t==null||!n?null:n(t),[n,t]),o=u.useMemo(()=>{if(a)return e;const c=[...e];return m?r!=null&&c.unshift({text:r,hidden:!0,value:null,key:Y}):N&&c.push(N),c},[a,e,m,N,r]),y=V(c=>{const g=c.target.selectedIndex,v=o[g];s==null||s({value:v.value,index:g,type:"change",timeStamp:c.timeStamp,target:c.target})}),l=u.useRef(null),I=u.useCallback(()=>{l.current&&(l.current.selectedIndex<0||o[l.current.selectedIndex].value!=t)&&(l.current.selectedIndex=o.findIndex(c=>c.value==t))},[o,t]),x=c=>{l.current=c,I()};T(()=>{I()},[I]);const b=new M;return i.jsx("select",{...d,onChange:y,ref:x,children:o.map((c,g)=>{const{value:v,text:re,uniqueKey:ue,...ee}=c,D=b.fix(c,g);return u.createElement("option",{...ee,key:D,value:D},c.text)})})}function P(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 U(e){return e?e==="∞"||e==="+∞"?Number.POSITIVE_INFINITY:e==="-∞"?Number.NEGATIVE_INFINITY:Number.parseFloat(e):Number.NaN}function w(e){return Number.isNaN(e)?"":e===Number.POSITIVE_INFINITY?"∞":e===Number.NEGATIVE_INFINITY?"-∞":G(e)}function B(e){return e?w(Number.parseFloat(e)):""}function p(e,t=2){return String(e).padStart(t,"0")}function S(e){const t=new Date(e);let n=`${t.getFullYear()}-${p(t.getMonth()+1)}-${p(t.getDate())}T${p(t.getHours())}:${p(t.getMinutes())}`;return(t.getSeconds()!==0||t.getMilliseconds()!==0)&&(n+=":"+p(t.getSeconds()),t.getMilliseconds()!==0&&(n+="."+p(t.getMilliseconds(),3))),n}const E=u.forwardRef(function({value:t="",onPaste:n,onChange:s,onInput:r,onBlur:d,formatOnChange:m=A,...a},N){const[o,y]=u.useState(t),l=u.useRef(t),I=u.useRef(!1);T(()=>{y(t),I.current=!1,l.current=t},[t]);const x={type:"text",...a,ref:N,value:o,onChange:b=>{y(b.target.value)},onInput:b=>{I.current=!0,r==null||r(b)},onBlur:b=>{const c=m(o);I.current&&(c!==l.current&&(s==null||s({type:"change",value:c,timeStamp:b.timeStamp,target:b.target}),l.current=c),c!==b.target.value&&y(c)),d==null||d(b)}};return i.jsx("input",{...x})});function W({formatOnChange:e=P,...t}){return i.jsx(E,{formatOnChange:e,...t,type:"text"})}const C=u.forwardRef(function({onInput:t,style:n,initialHeight:s="auto",...r},d){const m=u.useRef(null),[a,N]=u.useState(s),o=u.useCallback(()=>{const l=m.current;if(!l)return;l.style.height=s;const I=`${l.scrollHeight}px`;N(I),l.style.height=I},[s]);u.useImperativeHandle(d,()=>({element:m.current,adjustHeight:o}),[o]);const y=h(l=>{o(),t==null||t(l)});return u.useLayoutEffect(()=>{o();const l=m.current;if(!l)return;const I=new ResizeObserver(x=>{o()});return I.observe(l),()=>{I.unobserve(l)}},[o]),i.jsx("textarea",{...r,style:{overflow:"hidden",resize:"none",...n,height:a},onInput:y,ref:m})});function J(e){const t=u.useId(),n=e.name??t,s=e.valueEquals??Object.is,r=e.options??[],d=new M,m=h(a=>{const N=Number(a.target.value),o=r[N];o!=null&&e.onChange!=null&&e.onChange({value:o.value,index:N,type:"change",timeStamp:a.timeStamp,target:a.target})});return i.jsx("ul",{className:e.className,children:r.map((a,N)=>{const{value:o,text:y,key:l,itemClassName:I,labelClassName:x,inputClassName:b,textClassName:c,...g}=a,v=d.fix(a,N);return e.value!==void 0&&(g.checked=s(o,e.value)),i.jsx("li",{className:I,"aria-disabled":g.disabled,children:i.jsxs("label",{className:x,children:[i.jsx("input",{...g,className:b,value:N,onChange:m,name:n,type:"radio"}),i.jsx("span",{className:c,children:y})]})},v)})})}function K(){return u.useRef(null)}function O(e){e.current!=null&&(clearTimeout(e.current),e.current=null)}const Q=({value:e,onChange:t,debounce:n=500,...s})=>{const r=K(),d=K();T(()=>{O(d),r.current!=null&&(r.current.value=e)},[e]);const m=()=>{r.current!=null&&r.current.value!==e&&(t==null||t({value:r.current.value}))};return i.jsx("input",{...s,ref:r,defaultValue:e,onInput:()=>{O(d),d.current=setTimeout(m,n)},onBlur:()=>{O(d),m()}})};function X({onClick:e,...t}){return t.onClick=n=>{n.preventDefault(),e==null||e(n)},i.jsx("button",{type:"button",...t})}function Z({value:e,defaultValue:t,min:n,max:s,...r}){return e!==void 0&&(r.value=e===null?"":S(e)),t!=null&&(r.defaultValue=S(t)),n!=null&&(r.min=S(n)),s!=null&&(r.max=S(s)),i.jsx("input",{type:"datetime-local",...r})}const R=u.forwardRef(function({placeholder:t,formatOnChange:n=B,onChange:s,value:r,...d},m){const a={inputMode:"decimal",...d,formatOnChange:n,type:"number"};return r!==void 0&&(a.value=w(r)),t!=null&&(a.placeholder=String(t)),s!=null&&(a.onChange=N=>{s({...N,value:U(N.value)})}),i.jsx(E,{...a,ref:m})});f.ActionButton=X,f.DatetimeLocalInput=Z,f.DebouncedInput=Q,f.Input=E,f.NumberInput=R,f.RadioMenu=J,f.Select=z,f.TextArea=C,f.TextInput=W,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
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"})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mpen/react-basic-inputs",
3
3
  "private": false,
4
- "version": "0.2.10",
4
+ "version": "0.3.0",
5
5
  "type": "module",
6
6
  "files": ["dist"],
7
7
  "exports": {