@elcrm/form 0.0.64 → 0.0.66

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.
Files changed (41) hide show
  1. package/README.md +55 -27
  2. package/dist/core/Field.d.ts +3 -2
  3. package/dist/core/Field.js +1 -1
  4. package/dist/fields/Date.d.ts +2 -11
  5. package/dist/fields/Date.js +105 -98
  6. package/dist/fields/Input.d.ts +7 -22
  7. package/dist/fields/Input.js +110 -38
  8. package/dist/fields/Mask.d.ts +1 -1
  9. package/dist/fields/Mask.js +54 -48
  10. package/dist/fields/Modal.d.ts +7 -7
  11. package/dist/fields/Modal.js +37 -30
  12. package/dist/fields/Money.d.ts +8 -29
  13. package/dist/fields/Money.js +60 -53
  14. package/dist/fields/Numeric.d.ts +1 -1
  15. package/dist/fields/Numeric.js +46 -42
  16. package/dist/fields/Options.d.ts +9 -7
  17. package/dist/fields/Options.js +38 -32
  18. package/dist/fields/Password.d.ts +1 -1
  19. package/dist/fields/Password.js +90 -37
  20. package/dist/fields/Phone.d.ts +2 -20
  21. package/dist/fields/Phone.js +58 -55
  22. package/dist/fields/Range.d.ts +1 -1
  23. package/dist/fields/Range.js +74 -72
  24. package/dist/fields/Select.d.ts +1 -1
  25. package/dist/fields/Select.js +69 -66
  26. package/dist/fields/Textarea.d.ts +2 -22
  27. package/dist/fields/Textarea.js +37 -32
  28. package/dist/fields/Time.d.ts +1 -1
  29. package/dist/fields/Time.js +65 -63
  30. package/dist/fields/type.d.ts +50 -15
  31. package/dist/fields/visibility.d.ts +6 -0
  32. package/dist/fields/visibility.js +6 -0
  33. package/dist/hooks/use.d.ts +0 -1
  34. package/dist/index.d.ts +1 -1
  35. package/dist/index.js +24 -22
  36. package/dist/loadBaseStyles.d.ts +2 -0
  37. package/dist/loadBaseStyles.js +9 -0
  38. package/dist/package.js +6 -1
  39. package/package.json +6 -1
  40. package/dist/index.umd.js +0 -2
  41. package/dist/style.css +0 -5
@@ -2,46 +2,51 @@ 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/Textarea.tsx
8
- function s({ value: s, form: c, onValue: l, name: u, placeholder: d = "", title: f = "", label: p = "", hide: m = !1, edit: h = !0, active: g = !0, after: _ = "", show: v = !0, maxLength: y, error: b = "", onSave: x, className: S = "", isCopy: C = !0 }) {
9
- let { value: w, version: T } = n(c, u || "", s), E = (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 }) {
10
+ let { value: T, version: E } = n(u, f || "", l), D = !g, O = (e) => {
10
11
  let t = {
11
12
  value: e.currentTarget.innerText,
12
- name: u || ""
13
+ name: f || ""
13
14
  };
14
- c && u && c.onValue(t), l && l !== c?.onValue && l(t);
15
- }, D = (e) => {
15
+ u && f && u.onValue(t), d && d !== u?.onValue && d(t);
16
+ }, k = (e) => {
16
17
  let t = (e.currentTarget.textContent ?? "").trim();
17
- y && t.length >= y && e.key !== "Backspace" && e.preventDefault(), e.key === "Enter" && !e.shiftKey && e.preventDefault();
18
- }, O = (e) => r.Paste(y || 0, i(e));
19
- if (m) return /* @__PURE__ */ o(a, {});
20
- if (!(h && g) && !v) return "";
21
- let k = {};
22
- return d && (k.placeholder = d), h && g && (k.edit = ""), /* @__PURE__ */ o(t, {
18
+ C && t.length >= C && e.key !== "Backspace" && e.preventDefault(), e.key === "Enter" && !e.shiftKey && e.preventDefault();
19
+ }, A = (e) => r.Paste(C || 0, i(e));
20
+ if (h && a(T)) return /* @__PURE__ */ s(o, {});
21
+ let j = {};
22
+ return p && (j.placeholder = p), D && (j.edit = ""), j.inputMode = S || "text", /* @__PURE__ */ c(t, {
23
23
  type: "note",
24
- title: f || p,
25
- error: b,
26
- element_blok: { className: [S || ""] },
24
+ label: m,
25
+ error: x,
26
+ element_blok: { className: [v || ""] },
27
27
  element_input: { className: [e.n] },
28
- children: /* @__PURE__ */ o("div", {
29
- onPaste: O,
30
- onInput: E,
31
- onBlur: (e) => {
32
- r.Blur(e), x?.({
33
- value: (e.currentTarget.textContent ?? "").trim(),
34
- name: u || ""
35
- });
36
- },
37
- onKeyDown: D,
38
- contentEditable: h && g ? "plaintext-only" : !1,
39
- suppressContentEditableWarning: !0,
40
- ...k,
41
- children: w
42
- }, T)
28
+ children: [
29
+ b,
30
+ /* @__PURE__ */ s("div", {
31
+ onPaste: A,
32
+ onInput: O,
33
+ onBlur: (e) => {
34
+ r.Blur(e), _?.({
35
+ value: (e.currentTarget.textContent ?? "").trim(),
36
+ name: f || ""
37
+ });
38
+ },
39
+ onKeyDown: k,
40
+ spellCheck: w,
41
+ contentEditable: D ? "plaintext-only" : !1,
42
+ suppressContentEditableWarning: !0,
43
+ ...j,
44
+ children: T
45
+ }, E),
46
+ y
47
+ ]
43
48
  });
44
49
  }
45
- s.displayName = "TextareaField";
50
+ l.displayName = "TextareaField";
46
51
  //#endregion
47
- export { s as default };
52
+ export { l as default };
@@ -19,7 +19,7 @@ export type TTime = TInput & {
19
19
  * Пока фокус в группе — в DOM только введённые цифры без ведущих нулей; в форму значение
20
20
  * уходит при уходе фокуса с группы (snap минут, clamp, формат `HH:mm`).
21
21
  */
22
- declare function TimeField({ value, form, onValue: _onValue, onSave, name, title, label, error, placeholder, step, min, max, edit, active, disabled, className, isReload, id, spellCheck, align, }: TTime): import("react/jsx-runtime").JSX.Element;
22
+ declare function TimeField({ value, form, onValue: _onValue, onBlur: onBlurField, name, placeholder, label, hidden, disabled, error, className, after, before, step, min, max, id, spellCheck, align, }: TTime): import("react/jsx-runtime").JSX.Element | null;
23
23
  declare namespace TimeField {
24
24
  var displayName: string;
25
25
  }
@@ -82,8 +82,8 @@ function _(e, t, n) {
82
82
  }
83
83
  return p(Math.floor(i / 60), i % 60);
84
84
  }
85
- function v({ value: h = "", form: v, onValue: ee, onSave: y, name: b = "", title: x = "", label: S = "", error: C = "", placeholder: w = "", step: T = 60, min: E, max: D, edit: te = !0, active: O = !0, disabled: k = !1, className: A = "", isReload: j = !1, id: ne, spellCheck: M = !1, align: N = "start" }) {
86
- let { value: P, version: F } = n(v, b, h), I = d(P), L = te && O && !k, R = i.useRef(null), z = i.useRef(null), B = i.useRef(null), [V, H] = i.useState(!1);
85
+ function v({ value: h = "", form: v, onValue: ee, onBlur: y, name: b = "", placeholder: x = "", label: S = "", hidden: C = !1, disabled: w = !1, error: T = "", className: E = "", after: D = "", before: te = "", step: O = 60, min: k, max: A, id: j, spellCheck: M = !1, align: N = "start" }) {
86
+ let { value: P, version: F } = n(v, b, h), I = d(P), L = !w, R = i.useRef(null), z = i.useRef(null), B = i.useRef(null), [V, H] = i.useState(!1);
87
87
  i.useLayoutEffect(() => {
88
88
  if (!V || !L) return;
89
89
  let { h: e, m: t } = f(I), n = (e, t) => {
@@ -102,11 +102,11 @@ function v({ value: h = "", form: v, onValue: ee, onSave: y, name: b = "", title
102
102
  let n = p(e, t);
103
103
  if (!n) return "";
104
104
  let { h: r, m: i } = f(n);
105
- return i !== null && (n = p(r, g(i, T))), n &&= _(n, E, D), n || "";
105
+ return i !== null && (n = p(r, g(i, O))), n &&= _(n, k, A), n || "";
106
106
  }, [
107
- E,
108
- D,
109
- T
107
+ k,
108
+ A,
109
+ O
110
110
  ]), W = (e) => (t) => {
111
111
  if (t.preventDefault(), !L) return;
112
112
  let n = u(t.clipboardData?.getData("text/plain") ?? ""), r = e === "hour" ? 23 : 59;
@@ -167,8 +167,7 @@ function v({ value: h = "", form: v, onValue: ee, onSave: y, name: b = "", title
167
167
  let r = U();
168
168
  v && b && v.setValue({
169
169
  name: b,
170
- value: r,
171
- reload: j
170
+ value: r
172
171
  }), y && b && y({
173
172
  value: r,
174
173
  name: b
@@ -179,72 +178,75 @@ function v({ value: h = "", form: v, onValue: ee, onSave: y, name: b = "", title
179
178
  v,
180
179
  b,
181
180
  y,
182
- E,
183
- D,
184
- T,
185
- j,
181
+ k,
182
+ A,
183
+ O,
186
184
  U
187
185
  ]);
188
186
  let { h: Z, m: Q } = f(I), $ = {};
189
- return w && ($.placeholder = w), L && ($.edit = ""), /* @__PURE__ */ a(t, {
187
+ return x && ($.placeholder = x), L && ($.edit = ""), C && I === "" ? null : /* @__PURE__ */ o(t, {
190
188
  type: "time",
191
- title: x || S,
192
- error: C,
193
- element_blok: { className: [A || ""] },
189
+ label: S,
190
+ error: T,
191
+ element_blok: { className: [E || ""] },
194
192
  element_input: {
195
193
  className: [
196
194
  e.w,
197
195
  e.time,
198
196
  N === "center" ? e.timeAlignCenter : ""
199
197
  ].filter(Boolean),
200
- props: { "data-disabled": k || !L ? "true" : void 0 }
198
+ props: { "data-disabled": w || !L ? "true" : void 0 }
201
199
  },
202
- children: /* @__PURE__ */ o("div", {
203
- ref: B,
204
- className: e.timeInner,
205
- role: "group",
206
- "aria-label": x || S || "Время",
207
- children: [
208
- /* @__PURE__ */ a("div", {
209
- id: ne,
210
- ref: R,
211
- className: e.timePart,
212
- contentEditable: L ? "plaintext-only" : !1,
213
- suppressContentEditableWarning: !0,
214
- spellCheck: M,
215
- inputMode: "numeric",
216
- onPaste: W("hour"),
217
- onInput: G,
218
- onKeyDown: q,
219
- onFocus: Y,
220
- onBlur: X,
221
- "aria-label": "Часы, 0–23",
222
- ...$,
223
- children: !L || !V ? Z === null ? "" : l(Z) : null
224
- }),
225
- /* @__PURE__ */ a("span", {
226
- className: e.timeSep,
227
- "aria-hidden": "true",
228
- children: ":"
229
- }),
230
- /* @__PURE__ */ a("div", {
231
- ref: z,
232
- className: e.timePart,
233
- contentEditable: L ? "plaintext-only" : !1,
234
- suppressContentEditableWarning: !0,
235
- spellCheck: M,
236
- inputMode: "numeric",
237
- onPaste: W("minute"),
238
- onInput: K,
239
- onKeyDown: J,
240
- onFocus: Y,
241
- onBlur: X,
242
- "aria-label": "Минуты, 0–59",
243
- ...$,
244
- children: !L || !V ? Q === null ? "" : l(Q) : null
245
- })
246
- ]
247
- }, F)
200
+ children: [
201
+ te,
202
+ /* @__PURE__ */ o("div", {
203
+ ref: B,
204
+ className: e.timeInner,
205
+ role: "group",
206
+ "aria-label": S || "Время",
207
+ children: [
208
+ /* @__PURE__ */ a("div", {
209
+ id: j,
210
+ ref: R,
211
+ className: e.timePart,
212
+ contentEditable: L ? "plaintext-only" : !1,
213
+ suppressContentEditableWarning: !0,
214
+ spellCheck: M,
215
+ inputMode: "numeric",
216
+ onPaste: W("hour"),
217
+ onInput: G,
218
+ onKeyDown: q,
219
+ onFocus: Y,
220
+ onBlur: X,
221
+ "aria-label": "Часы, 0–23",
222
+ ...$,
223
+ children: !L || !V ? Z === null ? "" : l(Z) : null
224
+ }),
225
+ /* @__PURE__ */ a("span", {
226
+ className: e.timeSep,
227
+ "aria-hidden": "true",
228
+ children: ":"
229
+ }),
230
+ /* @__PURE__ */ a("div", {
231
+ ref: z,
232
+ className: e.timePart,
233
+ contentEditable: L ? "plaintext-only" : !1,
234
+ suppressContentEditableWarning: !0,
235
+ spellCheck: M,
236
+ inputMode: "numeric",
237
+ onPaste: W("minute"),
238
+ onInput: K,
239
+ onKeyDown: J,
240
+ onFocus: Y,
241
+ onBlur: X,
242
+ "aria-label": "Минуты, 0–59",
243
+ ...$,
244
+ children: !L || !V ? Q === null ? "" : l(Q) : null
245
+ })
246
+ ]
247
+ }, F),
248
+ D
249
+ ]
248
250
  });
249
251
  }
250
252
  v.displayName = "TimeField";
@@ -1,42 +1,77 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { UseFormApi } from '../hooks/use';
3
- export type TInput = {
3
+ /** Связь с формой и колбэки значения */
4
+ export type TFieldFormBindings = {
4
5
  value?: unknown;
5
6
  form?: UseFormApi;
6
7
  onValue?: (data: TValue) => void | Promise<void>;
7
- onSave?: (data: TValue) => void | Promise<void>;
8
+ /** Колбэк при потере фокуса (коммит значения), не нативный `FocusEvent` */
9
+ onBlur?: (data: TValue) => void | Promise<void>;
8
10
  name?: string;
9
- placeholder?: string;
10
- title?: string;
11
+ };
12
+ /** Подпись, доступность, видимость */
13
+ export type TFieldPresentation = {
14
+ /** Подпись поля (визуально в `<dt>`) */
11
15
  label?: string;
16
+ placeholder?: string;
17
+ /** true — только просмотр, без ввода (аналог нативного disabled) */
12
18
  disabled?: boolean;
19
+ /**
20
+ * true — если значение поля **пустое**, поле не рендерится;
21
+ * при непустом значении поле показывается.
22
+ */
23
+ hidden?: boolean;
13
24
  error?: string;
14
- hide?: boolean;
15
- edit?: boolean;
16
- active?: boolean;
17
25
  after?: ReactNode;
18
26
  before?: ReactNode;
19
- show?: boolean;
20
27
  view?: string;
21
28
  id?: string;
22
29
  className?: string;
23
30
  isCopy?: boolean;
24
31
  maxLength?: number;
25
- isReload?: boolean;
32
+ /**
33
+ * Проверка орфографии для **текстового** ввода (`Input`, `Textarea`).
34
+ * Для полей только с цифрами в компонентах выставляется **`false`**.
35
+ */
26
36
  spellCheck?: boolean;
37
+ /**
38
+ * Подсказка клавиатуры на мобильных (`inputMode`).
39
+ * Для **чисел** — `numeric`, для **денег** — `decimal`, **телефон** — `tel` (по умолчанию в полях).
40
+ */
27
41
  inputmode?: "text" | "email" | "none" | "tel" | "url" | "search" | "numeric" | "decimal";
42
+ /**
43
+ * Нативный `<input>` вместо **contentEditable** (`StringField`).
44
+ * Нужен для **автозаполнения логина/почты** (менеджеры паролей работают с нативными полями).
45
+ * У **`PasswordField`** свой проп **`native`** (см. **`TPasswordField`**).
46
+ */
47
+ native?: boolean;
48
+ /**
49
+ * Атрибут **`autocomplete`** (например **`username`**, **`email`**, **`off`**).
50
+ * Осмысленно при **`native`**; у `contentEditable` браузеры почти не применяют автозаполнение.
51
+ */
52
+ autoComplete?: string;
53
+ /**
54
+ * Тип нативного поля при **`native`** (по умолчанию **`text`**).
55
+ * Для почты удобно **`email`** + **`autoComplete="email"`**.
56
+ */
57
+ inputType?: "text" | "email" | "search" | "tel" | "url";
28
58
  };
59
+ /** Базовые пропы текстовых и составных полей */
60
+ export type TInput = TFieldFormBindings & TFieldPresentation;
29
61
  export type TValue = {
30
62
  value: unknown;
31
63
  name: string;
32
- reload?: boolean;
33
64
  id?: string;
34
65
  };
35
- /** Поле пароля: расширение TInput (иконки «глаз», нативный режим отключён) */
36
- export type TPasswordField = TInput & {
66
+ /**
67
+ * Поле пароля: **`native`** из `TInput` убран — здесь свой **`native`** = «не рендерить поле».
68
+ */
69
+ export type TPasswordField = Omit<TInput, "native"> & {
70
+ /** true — компонент не рендерится (пустая строка), пароль отдаётся нативному `<input>` снаружи */
37
71
  native?: boolean;
38
- /** Начальное состояние «показать пароль» */
39
- isShow?: boolean;
40
- /** [скрыть, показать]ReactNode для переключателя */
72
+ /**
73
+ * Свои иконки переключателя **[показать пароль, скрыть пароль]** (когда ввод скрыт / виден).
74
+ * Если не задано используются встроенные SVG.
75
+ */
41
76
  eyes?: [React.ReactNode?, React.ReactNode?];
42
77
  };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Проверка «пустого» значения для режима **`hidden`**:
3
+ * при **`hidden === true`** поле не рендерится только если значение пустое.
4
+ */
5
+ /** Строки и необработанный ввод (в т.ч. `contentEditable`) */
6
+ export declare function isEmptyTextLike(value: unknown): boolean;
@@ -0,0 +1,6 @@
1
+ //#region src/lib/fields/visibility.ts
2
+ function e(e) {
3
+ return e == null ? !0 : typeof e == "string" ? e.trim() === "" : !1;
4
+ }
5
+ //#endregion
6
+ export { e as isEmptyTextLike };
@@ -4,7 +4,6 @@ export type FormValues = Record<string, unknown>;
4
4
  type FormChange = {
5
5
  name?: string;
6
6
  value?: unknown;
7
- reload?: boolean;
8
7
  };
9
8
  type Listener = () => void;
10
9
  export type UseFormApi = {
package/dist/index.d.ts CHANGED
@@ -14,7 +14,7 @@ export { default as SelectField } from './fields/Select';
14
14
  export { default as ModalField } from './fields/Modal';
15
15
  export { default as PasswordField } from './fields/Password';
16
16
  export { useForm, useFormField, useFormFieldState } from './hooks/use';
17
- export type { TInput, TValue, TPasswordField } from './fields/type';
17
+ export type { TInput, TValue, TPasswordField, TFieldFormBindings, TFieldPresentation, } from './fields/type';
18
18
  export type { TRange, TProgress } from './fields/Range';
19
19
  export type { TTime } from './fields/Time';
20
20
  export type { FormValues, UseFormApi, UseFormFieldStateResult, } from './hooks/use';
package/dist/index.js CHANGED
@@ -1,26 +1,28 @@
1
- import e from "./package.js";
2
- import { useForm as t, useFormField as n, useFormFieldState as r } from "./hooks/use.js";
3
- import i from "./fields/Range.js";
4
- import { asEditableClipboard as a } from "./events/onEvent.js";
5
- import o from "./fields/Money.js";
6
- import s from "./fields/Mask.js";
7
- import c from "./fields/Date.js";
8
- import l from "./fields/Time.js";
9
- import u from "./fields/Textarea.js";
10
- import { useFormInit as d } from "./FormInitContext.js";
11
- import f from "./fields/Phone.js";
12
- import p from "./fields/Input.js";
13
- import m from "./fields/Numeric.js";
14
- import h from "./fields/Options.js";
15
- import g from "./fields/Select.js";
16
- import _ from "./fields/Modal.js";
17
- import v from "./fields/Password.js";
18
- import { Form as y } from "./Form.js";
1
+ import { markBaseStylesLoaded as e } from "./loadBaseStyles.js";
2
+ import t from "./package.js";
3
+ import { useForm as n, useFormField as r, useFormFieldState as i } from "./hooks/use.js";
4
+ import a from "./fields/Range.js";
5
+ import { asEditableClipboard as o } from "./events/onEvent.js";
6
+ import s from "./fields/Money.js";
7
+ import c from "./fields/Mask.js";
8
+ import l from "./fields/Date.js";
9
+ import u from "./fields/Time.js";
10
+ import d from "./fields/Textarea.js";
11
+ import { useFormInit as f } from "./FormInitContext.js";
12
+ import p from "./fields/Phone.js";
13
+ import m from "./fields/Input.js";
14
+ import h from "./fields/Numeric.js";
15
+ import g from "./fields/Options.js";
16
+ import _ from "./fields/Select.js";
17
+ import v from "./fields/Modal.js";
18
+ import y from "./fields/Password.js";
19
+ import { Form as b } from "./Form.js";
19
20
  //#region src/lib/index.ts
20
- function b() {
21
+ e();
22
+ function x() {
21
23
  return typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof self < "u" ? self : {};
22
24
  }
23
- var x = b();
24
- x.elcrm ||= {}, Object.assign(x.elcrm, { form: e.version });
25
+ var S = x();
26
+ S.elcrm ||= {}, Object.assign(S.elcrm, { form: t.version });
25
27
  //#endregion
26
- export { c as DateField, y as Form, s as MaskField, _ as ModalField, o as MoneyField, m as NumberField, h as OptionsField, v as PasswordField, f as PhoneField, i as ProgressField, i as RangeField, g as SelectField, p as StringField, u as TextareaField, l as TimeField, a as asEditableClipboard, t as useForm, n as useFormField, r as useFormFieldState, d as useFormInit };
28
+ export { l as DateField, b as Form, c as MaskField, v as ModalField, s as MoneyField, h as NumberField, g as OptionsField, y as PasswordField, p as PhoneField, a as ProgressField, a as RangeField, _ as SelectField, m as StringField, d as TextareaField, u as TimeField, o as asEditableClipboard, n as useForm, r as useFormField, i as useFormFieldState, f as useFormInit };
@@ -0,0 +1,2 @@
1
+ /** Вызывается из `index.ts` при загрузке пакета с корня */
2
+ export declare function markBaseStylesLoaded(): true;
@@ -0,0 +1,9 @@
1
+ import e from "./styles/Field.module.js";
2
+ import t from "./styles/Form.module.js";
3
+ import n from "./styles/Select.module.js";
4
+ //#region src/lib/loadBaseStyles.ts
5
+ function r() {
6
+ return e.l, t.o, n.f, !0;
7
+ }
8
+ //#endregion
9
+ export { r as markBaseStylesLoaded };
package/dist/package.js CHANGED
@@ -1,6 +1,6 @@
1
1
  var e = {
2
2
  name: "@elcrm/form",
3
- version: "0.0.64",
3
+ version: "0.0.66",
4
4
  description: "React-компоненты полей формы и хук useForm для elCRM: текст, даты, маски, деньги, селект, связка с формой по имени поля (tree-shakeable ESM).",
5
5
  type: "module",
6
6
  author: "MaSkal <dev@elcrm.online>",
@@ -11,6 +11,11 @@ var e = {
11
11
  "form",
12
12
  "react"
13
13
  ],
14
+ sideEffects: [
15
+ "**/*.css",
16
+ "**/*.scss",
17
+ "**/*.module.scss"
18
+ ],
14
19
  main: "./dist/index.umd.js",
15
20
  module: "./dist/index.js",
16
21
  types: "./dist/index.d.ts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elcrm/form",
3
- "version": "0.0.64",
3
+ "version": "0.0.66",
4
4
  "description": "React-компоненты полей формы и хук useForm для elCRM: текст, даты, маски, деньги, селект, связка с формой по имени поля (tree-shakeable ESM).",
5
5
  "type": "module",
6
6
  "author": "MaSkal <dev@elcrm.online>",
@@ -14,6 +14,11 @@
14
14
  "form",
15
15
  "react"
16
16
  ],
17
+ "sideEffects": [
18
+ "**/*.css",
19
+ "**/*.scss",
20
+ "**/*.module.scss"
21
+ ],
17
22
  "main": "./dist/index.umd.js",
18
23
  "module": "./dist/index.js",
19
24
  "types": "./dist/index.d.ts",