@elcrm/form 0.0.64 → 0.0.65

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.
@@ -2,54 +2,126 @@ import e from "../styles/Field.module.js";
2
2
  import t from "../core/Field.js";
3
3
  import { useFormFieldState as n } from "../hooks/use.js";
4
4
  import r, { asEditableClipboard as i } from "../events/onEvent.js";
5
- import "react";
6
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
+ import { isEmptyTextLike as a } from "./visibility.js";
6
+ import o from "react";
7
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
7
8
  //#region src/lib/fields/Input.tsx
8
- function s({ value: s, form: c, onValue: l, name: u = "", inputmode: d = "text", placeholder: f = "", title: p = "", label: m = "", show: h = !0, hide: g = !1, edit: _ = !0, active: v = !0, maxLength: y, onSave: b, className: x = "", spellCheck: S = !0, isReload: C = !1, after: w = "", before: T = "", error: E = "" }) {
9
- let { value: D, version: O } = n(c, u, s), k = !!(g && (D === "" || D === void 0)), A = (e) => {
9
+ function l({ value: l, form: u, onValue: d, name: f = "", placeholder: p = "", label: m = "", hidden: h = !1, disabled: g = !1, onBlur: _, className: v = "", after: y = "", before: b = "", error: x = "", inputmode: S = "text", maxLength: C, spellCheck: w = !0, native: T = !1, autoComplete: E, inputType: D = "text", id: O }) {
10
+ let { value: k, version: A } = n(u, f, l), j = !g, M = typeof k == "string" || typeof k == "number" ? String(k) : "", N = o.useRef(null);
11
+ o.useEffect(() => {
12
+ if (!T) return;
13
+ let e = N.current;
14
+ e && e.value !== M && (e.value = M);
15
+ }, [T, M]);
16
+ let P = (e) => {
10
17
  let t = {
11
18
  value: (e.target.textContent || "").trim(),
12
- name: u,
13
- reload: C
19
+ name: f
14
20
  };
15
- c && u && c.onValue(t), l && l !== c?.onValue && l(t);
16
- }, j = (e) => {
21
+ u && f && u.onValue(t), d && d !== u?.onValue && d(t);
22
+ }, F = (e) => {
23
+ let t = {
24
+ value: e.target.value,
25
+ name: f
26
+ };
27
+ u && f && u.onValue(t), d && d !== u?.onValue && d(t);
28
+ }, I = (e) => {
17
29
  let t = e.target;
18
- y && (t.textContent || "").trim().length >= y && e.key !== "Backspace" && e.preventDefault(), e.key === "Enter" && e.preventDefault();
19
- }, M = (e) => r.Paste(y || 0, i(e));
20
- if (!(_ && v) && !h || !(_ && v) && k) return "";
21
- let N = {};
22
- return f && (N.placeholder = f), _ && v && (N.edit = ""), /* @__PURE__ */ o(t, {
30
+ C && (t.textContent || "").trim().length >= C && e.key !== "Backspace" && e.preventDefault(), e.key === "Enter" && e.preventDefault();
31
+ }, L = (e) => {
32
+ e.key === "Enter" && e.preventDefault();
33
+ }, R = (e) => r.Paste(C || 0, i(e));
34
+ if (h && a(k)) return "";
35
+ let z = (e) => {
36
+ r.Blur(e), _?.({
37
+ value: (e.target.textContent || "").trim(),
38
+ name: f
39
+ });
40
+ }, B = (e) => {
41
+ _?.({
42
+ value: (e.target.value || "").trim(),
43
+ name: f
44
+ });
45
+ }, V = (e) => {
46
+ r.Focus({ target: e.currentTarget });
47
+ }, H = {};
48
+ return p && (H.placeholder = p), j && (H.edit = ""), T ? /* @__PURE__ */ c(t, {
23
49
  type: "input",
24
- title: p || m,
25
- error: E,
26
- element_blok: { className: [x] },
27
- element_input: { className: [e.w] },
50
+ label: m,
51
+ error: x,
52
+ element_blok: { className: [v || ""] },
53
+ element_input: {
54
+ className: [e.w],
55
+ props: { "data-disabled": g || !j ? "true" : void 0 }
56
+ },
28
57
  children: [
29
- T,
30
- /* @__PURE__ */ a("div", {
31
- onBlur: (e) => {
32
- r.Blur(e), b?.({
33
- value: (e.target.textContent || "").trim(),
34
- name: u
35
- });
36
- },
37
- onFocus: (e) => {
38
- r.Focus({ target: e.currentTarget });
58
+ b,
59
+ /* @__PURE__ */ s("div", {
60
+ style: {
61
+ flex: 1,
62
+ minWidth: 0,
63
+ display: "flex",
64
+ alignItems: "center"
39
65
  },
40
- onPaste: M,
41
- onInput: A,
42
- onKeyDown: j,
43
- spellCheck: S,
44
- inputMode: d || "text",
45
- contentEditable: _ && v ? "plaintext-only" : !1,
66
+ children: /* @__PURE__ */ s("input", {
67
+ id: O,
68
+ ref: N,
69
+ type: D,
70
+ name: f || void 0,
71
+ defaultValue: M,
72
+ placeholder: p,
73
+ maxLength: C,
74
+ spellCheck: w,
75
+ disabled: g,
76
+ readOnly: g,
77
+ autoComplete: E,
78
+ inputMode: S || "text",
79
+ "aria-label": m || p || "Текст",
80
+ "aria-disabled": g || !j ? !0 : void 0,
81
+ tabIndex: g ? -1 : 0,
82
+ onChange: F,
83
+ onBlur: B,
84
+ onKeyDown: L,
85
+ style: {
86
+ width: "100%",
87
+ border: "none",
88
+ outline: "none",
89
+ background: "transparent",
90
+ font: "inherit",
91
+ color: "inherit",
92
+ padding: 0,
93
+ margin: 0,
94
+ boxSizing: "border-box"
95
+ }
96
+ })
97
+ }),
98
+ y
99
+ ]
100
+ }) : /* @__PURE__ */ c(t, {
101
+ type: "input",
102
+ label: m,
103
+ error: x,
104
+ element_blok: { className: [v] },
105
+ element_input: { className: [e.w] },
106
+ children: [
107
+ b,
108
+ /* @__PURE__ */ s("div", {
109
+ id: O,
110
+ onBlur: z,
111
+ onFocus: V,
112
+ onPaste: R,
113
+ onInput: P,
114
+ onKeyDown: I,
115
+ spellCheck: w,
116
+ inputMode: S || "text",
117
+ contentEditable: j ? "plaintext-only" : !1,
46
118
  suppressContentEditableWarning: !0,
47
- ...N,
48
- children: typeof D == "string" || typeof D == "number" ? String(D) : ""
49
- }, O),
50
- w
119
+ ...H,
120
+ children: typeof k == "string" || typeof k == "number" ? String(k) : ""
121
+ }, A),
122
+ y
51
123
  ]
52
124
  });
53
125
  }
54
126
  //#endregion
55
- export { s as default };
127
+ export { l as default };
@@ -2,7 +2,7 @@ import { TInput } from './type';
2
2
  type TMask = TInput & {
3
3
  format?: string;
4
4
  };
5
- declare function MaskField({ value, form, onValue, onSave, name, format, placeholder, title, error, hide, edit, active, after, show, view, className, disabled, }: TMask): import("react/jsx-runtime").JSX.Element;
5
+ declare function MaskField({ value, form, onValue, onBlur: onBlurField, name, format, placeholder, label, error, hidden, disabled, className, after, before, inputmode, view, }: TMask): import("react/jsx-runtime").JSX.Element;
6
6
  declare namespace MaskField {
7
7
  var displayName: string;
8
8
  }
@@ -2,10 +2,11 @@ import e from "../styles/Field.module.js";
2
2
  import t from "../core/Field.js";
3
3
  import { useFormFieldState as n } from "../hooks/use.js";
4
4
  import r, { asEditableClipboard as i } from "../events/onEvent.js";
5
+ import { isEmptyTextLike as a } from "./visibility.js";
5
6
  import "react";
6
- import { Fragment as a, jsx as o } from "react/jsx-runtime";
7
+ import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
7
8
  //#region src/lib/fields/Mask.tsx
8
- function s(e) {
9
+ function l(e) {
9
10
  let t = window.getSelection();
10
11
  if (!t || t.rangeCount === 0) return 0;
11
12
  let n = t.getRangeAt(0);
@@ -13,83 +14,88 @@ function s(e) {
13
14
  let r = document.createRange();
14
15
  return r.selectNodeContents(e), r.setEnd(n.startContainer, n.startOffset), r.toString().length;
15
16
  }
16
- function c(e, t) {
17
+ function u(e, t) {
17
18
  if (t <= 0) return 0;
18
19
  let n = 0;
19
20
  for (let r = 0; r < e.length; r++) if (/\d/.test(e[r]) && (n++, n === t)) return r + 1;
20
21
  return e.length;
21
22
  }
22
- function l({ value: l = "", form: u, onValue: d, onSave: f, name: p = "", format: m = "+_(___) ___-__-__", placeholder: h = "", title: g = "", error: _ = "", hide: v = !1, edit: y = !0, active: b = !0, after: x = "", show: S = !0, view: C, className: w = "", disabled: T = !1 }) {
23
- y = y === void 0 ? !0 : y, b = b === void 0 ? !0 : b;
24
- let { value: E, version: D } = n(u, p, l);
25
- v = !!(v && (E === "" || E === void 0)) && !(y && b);
26
- let O = m, k = !0, A = 0, j = (e, t) => {
23
+ function d({ value: d = "", form: f, onValue: p, onBlur: m, name: h = "", format: g = "+_(___) ___-__-__", placeholder: _ = "", label: v = "", error: y = "", hidden: b = !1, disabled: x = !1, className: S = "", after: C = "", before: w = "", inputmode: T = "numeric", view: E }) {
24
+ let D = !x, { value: O, version: k } = n(f, h, d), A = g, j = !0, M = 0, N = (e, t) => {
27
25
  let n = t.firstChild;
28
26
  if (!n || n.nodeType !== Node.TEXT_NODE) return;
29
27
  let r = n.textContent?.length ?? 0, i = Math.max(0, Math.min(e, r)), a = document.createRange(), o = window.getSelection();
30
28
  o && (a.setStart(n, i), a.collapse(!0), o.removeAllRanges(), o.addRange(a), t.focus());
31
- }, M = (e) => r.PasteOne(i(e)), N = (e) => {
32
- O = m, k = !0, A = 0;
29
+ }, P = (e) => r.PasteOne(i(e)), F = (e) => {
30
+ A = g, j = !0, M = 0;
33
31
  let t = 0, n = "", r = e.replace(/\D/g, "");
34
- r === "" && (k = !0);
32
+ r === "" && (j = !0);
35
33
  let i = r.split(""), a = "";
36
34
  i.forEach((e) => {
37
- k && (a += e, k && (A = ("" + a).length, O = m.replace(/* @__PURE__ */ RegExp("[0-9]", "g"), "_"), n = ""), A > ("" + a).length && (k = !0, O = m.replace(/* @__PURE__ */ RegExp("[0-9]", "g"), "_"), n = ""));
35
+ j && (a += e, j && (M = ("" + a).length, A = g.replace(/* @__PURE__ */ RegExp("[0-9]", "g"), "_"), n = ""), M > ("" + a).length && (j = !0, A = g.replace(/* @__PURE__ */ RegExp("[0-9]", "g"), "_"), n = ""));
38
36
  });
39
- let o = O.replace(/\D/g, "");
37
+ let o = A.replace(/\D/g, "");
40
38
  return o.length >= r.length && (r = o), {
41
- q: O.replace(/[_\d]/g, function() {
39
+ q: A.replace(/[_\d]/g, function() {
42
40
  return r.charAt(t++) || "_";
43
41
  }),
44
42
  i: t,
45
43
  v: r,
46
44
  f: n
47
45
  };
48
- }, P = N(String(E || "")), F = (e) => {
49
- let t = e.target, n = t.textContent || "", r = s(t), i = n.slice(0, r).replace(/\D/g, "").length, a = N(n);
46
+ }, I = F(String(O || "")), L = (e) => {
47
+ let t = e.target, n = t.textContent || "", r = l(t), i = n.slice(0, r).replace(/\D/g, "").length, a = F(n);
50
48
  t.textContent = a.q;
51
- let o = c(a.q, i);
49
+ let o = u(a.q, i);
52
50
  a.q.length > 0 && queueMicrotask(() => {
53
- j(Math.min(o, a.q.length), t);
51
+ N(Math.min(o, a.q.length), t);
54
52
  });
55
- let l = {
53
+ let s = {
56
54
  value: a.q.replace(/\D/g, ""),
57
- name: p
55
+ name: h
58
56
  };
59
- u && p && u.onValue(l), d && d !== u?.onValue && d(l);
60
- }, I = (e) => {
57
+ f && h && f.onValue(s), p && p !== f?.onValue && p(s);
58
+ }, R = (e) => {
61
59
  e.key === "Enter" && e.preventDefault();
62
- }, L = (e) => {
63
- r.Blur(e), f && f({
60
+ }, z = (e) => {
61
+ r.Blur(e), m && m({
64
62
  value: (e.target.textContent ?? "").replace(/\D/g, ""),
65
- name: p
63
+ name: h
66
64
  });
67
- }, R = (e) => {
65
+ }, B = (e) => {
68
66
  r.Focus({ target: e.currentTarget });
69
- }, z = {};
70
- return h && (z.placeholder = h), v ? /* @__PURE__ */ o(a, {}) : /* @__PURE__ */ o(t, {
67
+ }, V = {};
68
+ _ && (V.placeholder = _), V.inputMode = T ?? "numeric";
69
+ let H = String(O ?? "").replace(/\D/g, "");
70
+ return b && a(H) ? /* @__PURE__ */ s(o, {}) : /* @__PURE__ */ c(t, {
71
71
  type: "input",
72
- title: g,
73
- element_blok: { className: [w] },
72
+ label: v,
73
+ error: y,
74
+ element_blok: { className: [S] },
74
75
  element_input: { className: [e.w] },
75
- children: /* @__PURE__ */ o("div", {
76
- onPaste: M,
77
- onInput: F,
78
- onKeyDown: I,
79
- onBlur: L,
80
- onFocus: R,
81
- role: "textbox",
82
- "aria-label": g || h || p || "Маска",
83
- "aria-disabled": T || !(y && b),
84
- tabIndex: T ? -1 : 0,
85
- "data-disabled": T || !(y && b),
86
- contentEditable: y && b && !T ? "plaintext-only" : !1,
87
- suppressContentEditableWarning: !0,
88
- ...z,
89
- children: P.q
90
- }, D)
76
+ children: [
77
+ w,
78
+ /* @__PURE__ */ s("div", {
79
+ onPaste: P,
80
+ onInput: L,
81
+ onKeyDown: R,
82
+ onBlur: z,
83
+ onFocus: B,
84
+ role: "textbox",
85
+ spellCheck: !1,
86
+ "aria-label": v || _ || h || "Маска",
87
+ "aria-disabled": !D,
88
+ tabIndex: x ? -1 : 0,
89
+ "data-disabled": !D,
90
+ contentEditable: D ? "plaintext-only" : !1,
91
+ suppressContentEditableWarning: !0,
92
+ ...V,
93
+ children: I.q
94
+ }, k),
95
+ C
96
+ ]
91
97
  });
92
98
  }
93
- l.displayName = "MaskField";
99
+ d.displayName = "MaskField";
94
100
  //#endregion
95
- export { l as default };
101
+ export { d as default };
@@ -1,3 +1,4 @@
1
+ import { ReactNode } from 'react';
1
2
  import { UseFormApi } from '../hooks/use';
2
3
  import { TValue } from './type';
3
4
  interface Input {
@@ -6,19 +7,18 @@ interface Input {
6
7
  onValue?: (data: TValue) => void | Promise<void>;
7
8
  name: string;
8
9
  placeholder?: string;
9
- title?: string;
10
+ label?: string;
10
11
  error?: string;
11
- hide?: boolean;
12
- edit?: boolean;
13
- show?: boolean;
14
- active?: boolean;
15
- after?: string;
12
+ hidden?: boolean;
13
+ disabled?: boolean;
14
+ after?: ReactNode;
15
+ before?: ReactNode;
16
16
  view?: string;
17
17
  className?: string;
18
18
  modal: string;
19
19
  options?: Record<string | number, unknown>;
20
20
  }
21
- declare function ModalField({ value, form, onValue, name, placeholder, title, error, hide, edit, show, active, after, view, modal, options, className, }: Input): import("react/jsx-runtime").JSX.Element;
21
+ declare function ModalField({ value, form, onValue, name, placeholder, label, error, hidden, disabled, after, before, view, modal, options, className, }: Input): import("react/jsx-runtime").JSX.Element;
22
22
  declare namespace ModalField {
23
23
  var displayName: string;
24
24
  }
@@ -1,55 +1,62 @@
1
1
  import e from "../styles/Field.module.js";
2
2
  import t from "../core/Field.js";
3
3
  import { useFormFieldState as n } from "../hooks/use.js";
4
- import { useFormInit as r } from "../FormInitContext.js";
4
+ import { isEmptyTextLike as r } from "./visibility.js";
5
+ import { useFormInit as i } from "../FormInitContext.js";
5
6
  import "react";
6
- import { Fragment as i, jsx as a } from "react/jsx-runtime";
7
+ import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
7
8
  //#region src/lib/fields/Modal.tsx
8
- function o({ value: o, form: s, onValue: c, name: l, placeholder: u = "", title: d, error: f, hide: p = !1, edit: m = !0, show: h = !0, active: g = !0, after: _ = "", view: v, modal: y, options: b, className: x }) {
9
- let { onModal: S } = r(), { value: C } = n(s, l, o), w = C, T = (e) => e ? Array.isArray(e) ? e[1] || "" : e : "", E = (e) => {
9
+ function c({ value: c, form: l, onValue: u, name: d, placeholder: f = "", label: p, error: m, hidden: h = !1, disabled: g = !1, after: _, before: v, view: y, modal: b, options: x, className: S }) {
10
+ let { onModal: C } = i(), { value: w } = n(l, d, c), T = w, E = (e) => e ? Array.isArray(e) ? e[1] || "" : e : "", D = (e) => {
10
11
  if (Array.isArray(e) && e.length >= 2) return [e[0], String(e[1] ?? "")];
11
12
  if (typeof e == "object" && e) {
12
13
  let t = e;
13
14
  if (t.id !== void 0 && t.name !== void 0) return [t.id, t.name];
14
15
  }
15
16
  return String(e ?? "");
16
- }, D = (e) => {
17
+ }, O = (e) => {
17
18
  let t = {
18
- value: E(e),
19
- name: l
19
+ value: D(e),
20
+ name: d
20
21
  };
21
- s && l && s.setValue(t), c && c !== s?.onValue && c(t);
22
- }, O = () => {
23
- if (!(m && g)) return;
24
- if (!y) return console.error("modal - empty");
25
- let e = y.split(".");
22
+ l && d && l.setValue(t), u && u !== l?.onValue && u(t);
23
+ }, k = () => {
24
+ if (g) return;
25
+ if (!b) return console.error("modal - empty");
26
+ let e = b.split(".");
26
27
  if (e.length < 2) return console.error("modal должен быть в формате 'module.name'");
27
- let t = Array.isArray(w) ? w[0] : w;
28
- S({
28
+ let t = Array.isArray(T) ? T[0] : T;
29
+ C({
29
30
  module: e[0],
30
31
  modalName: e[1],
31
- callback: D,
32
- onValue: D,
33
- options: b,
34
- fieldName: l,
32
+ callback: O,
33
+ onValue: O,
34
+ options: x,
35
+ fieldName: d,
35
36
  value: t
36
37
  });
37
- }, k = {};
38
- return u && (k.placeholder = u), p ? /* @__PURE__ */ a(i, {}) : /* @__PURE__ */ a(t, {
38
+ }, A = {};
39
+ f && (A.placeholder = f);
40
+ let j = r(E(T));
41
+ return h && j ? /* @__PURE__ */ o(a, {}) : /* @__PURE__ */ s(t, {
39
42
  type: "input",
40
- title: d,
41
- element_blok: { className: [x || ""] },
42
- error: f,
43
+ label: p,
44
+ element_blok: { className: [S || ""] },
45
+ error: m,
43
46
  element_input: {
44
47
  className: [e.w],
45
- props: { onClick: O }
48
+ props: { onClick: k }
46
49
  },
47
- children: /* @__PURE__ */ a("div", {
48
- ...k,
49
- children: T(w)
50
- })
50
+ children: [
51
+ v,
52
+ /* @__PURE__ */ o("div", {
53
+ ...A,
54
+ children: E(T)
55
+ }),
56
+ _
57
+ ]
51
58
  });
52
59
  }
53
- o.displayName = "ModalField";
60
+ c.displayName = "ModalField";
54
61
  //#endregion
55
- export { o as default };
62
+ export { c as default };
@@ -1,34 +1,13 @@
1
- import { UseFormApi } from '../hooks/use';
2
- interface Input {
3
- value?: string | number;
4
- /** Связь с useForm — подписка и синхронизация значения */
5
- form?: UseFormApi;
6
- onValue?: (payload: {
7
- value: number;
8
- name?: string;
9
- }) => void;
10
- onSave?: (payload: {
11
- value: number;
12
- name?: string;
13
- }) => void;
14
- name?: string;
15
- placeholder?: string;
16
- title?: string;
17
- label?: string;
18
- error?: string;
19
- hide?: boolean;
20
- edit?: boolean;
21
- active?: boolean;
22
- after?: string;
23
- show?: boolean;
24
- view?: string;
25
- type?: string;
26
- className?: string;
1
+ import { TInput } from './type';
2
+ type TMoney = TInput & {
3
+ /** Курс для отображения (множитель при записи в форму) */
27
4
  course?: number;
5
+ /** Кнопка очистки */
28
6
  isClear?: boolean;
29
- disabled?: boolean;
30
- }
31
- declare function MoneyField({ value, form, onValue, name, placeholder, title, error, hide, edit, active, after, show, course, view, type, onSave, className, isClear, disabled, }: Input): import("react/jsx-runtime").JSX.Element | "";
7
+ /** Режим фильтра символов при вводе */
8
+ type?: string;
9
+ };
10
+ declare function MoneyField({ value, form, onValue, name, placeholder, label, error, hidden, disabled, onBlur: onBlurField, className, after, before, inputmode, course, view, type, isClear, }: TMoney): import("react/jsx-runtime").JSX.Element | "";
32
11
  declare namespace MoneyField {
33
12
  var displayName: string;
34
13
  }