brd-ui-kit 0.1.84 → 0.1.86
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.
- package/dist/components/approval-log/approval-log.d.ts +1 -1
- package/dist/components/approval-log/index.d.ts +1 -1
- package/dist/components/card-info/card-info.d.ts +3 -2
- package/dist/components/forms/form-Input-phone.d.ts +10 -0
- package/dist/components/forms/form-avatar-uploader.d.ts +9 -0
- package/dist/components/forms/form-contact-input.d.ts +9 -0
- package/dist/components/forms/form-files-uploader.d.ts +9 -0
- package/dist/components/forms/form-input-password.d.ts +9 -0
- package/dist/components/forms/form-input.d.ts +9 -0
- package/dist/components/forms/form-select-calendar.d.ts +9 -0
- package/dist/components/forms/form-select.d.ts +18 -0
- package/dist/components/forms/form-textarea.d.ts +9 -0
- package/dist/components/forms/form-toggle-group.d.ts +13 -0
- package/dist/components/forms/form.d.ts +12 -0
- package/dist/components/forms/from-checkbox.d.ts +8 -0
- package/dist/components/forms/index.d.ts +12 -0
- package/dist/components/forms.d.ts +2 -0
- package/dist/components/input-contact/input-contact.d.ts +1 -0
- package/dist/components/story-drawer/index.d.ts +1 -1
- package/dist/components/story-drawer/story-drawer.d.ts +2 -2
- package/dist/components-approval-log-approval-log.cjs.map +1 -1
- package/dist/components-approval-log-approval-log.js.map +1 -1
- package/dist/components-card-info-card-info.cjs +1 -1
- package/dist/components-card-info-card-info.cjs.map +1 -1
- package/dist/components-card-info-card-info.js +15 -14
- package/dist/components-card-info-card-info.js.map +1 -1
- package/dist/components-forms-form-Input-phone.cjs +2 -0
- package/dist/components-forms-form-Input-phone.cjs.map +1 -0
- package/dist/components-forms-form-Input-phone.js +63 -0
- package/dist/components-forms-form-Input-phone.js.map +1 -0
- package/dist/components-forms-form-avatar-uploader.cjs +2 -0
- package/dist/components-forms-form-avatar-uploader.cjs.map +1 -0
- package/dist/components-forms-form-avatar-uploader.js +26 -0
- package/dist/components-forms-form-avatar-uploader.js.map +1 -0
- package/dist/components-forms-form-contact-input.cjs +2 -0
- package/dist/components-forms-form-contact-input.cjs.map +1 -0
- package/dist/components-forms-form-contact-input.js +66 -0
- package/dist/components-forms-form-contact-input.js.map +1 -0
- package/dist/components-forms-form-files-uploader.cjs +13 -0
- package/dist/components-forms-form-files-uploader.cjs.map +1 -0
- package/dist/components-forms-form-files-uploader.js +3060 -0
- package/dist/components-forms-form-files-uploader.js.map +1 -0
- package/dist/components-forms-form-input-password.cjs +30 -0
- package/dist/components-forms-form-input-password.cjs.map +1 -0
- package/dist/components-forms-form-input-password.js +377 -0
- package/dist/components-forms-form-input-password.js.map +1 -0
- package/dist/components-forms-form-input.cjs +2 -0
- package/dist/components-forms-form-input.cjs.map +1 -0
- package/dist/components-forms-form-input.js +46 -0
- package/dist/components-forms-form-input.js.map +1 -0
- package/dist/components-forms-form-select-calendar.cjs +2 -0
- package/dist/components-forms-form-select-calendar.cjs.map +1 -0
- package/dist/components-forms-form-select-calendar.js +28 -0
- package/dist/components-forms-form-select-calendar.js.map +1 -0
- package/dist/components-forms-form-select.cjs +2 -0
- package/dist/components-forms-form-select.cjs.map +1 -0
- package/dist/components-forms-form-select.js +83 -0
- package/dist/components-forms-form-select.js.map +1 -0
- package/dist/components-forms-form-textarea.cjs +2 -0
- package/dist/components-forms-form-textarea.cjs.map +1 -0
- package/dist/components-forms-form-textarea.js +42 -0
- package/dist/components-forms-form-textarea.js.map +1 -0
- package/dist/components-forms-form-toggle-group.cjs +2 -0
- package/dist/components-forms-form-toggle-group.cjs.map +1 -0
- package/dist/components-forms-form-toggle-group.js +27 -0
- package/dist/components-forms-form-toggle-group.js.map +1 -0
- package/dist/components-forms-form.cjs +2 -0
- package/dist/components-forms-form.cjs.map +1 -0
- package/dist/components-forms-form.js +24 -0
- package/dist/components-forms-form.js.map +1 -0
- package/dist/components-forms-from-checkbox.cjs +2 -0
- package/dist/components-forms-from-checkbox.cjs.map +1 -0
- package/dist/components-forms-from-checkbox.js +43 -0
- package/dist/components-forms-from-checkbox.js.map +1 -0
- package/dist/components-forms.cjs +2 -0
- package/dist/components-forms.cjs.map +1 -0
- package/dist/components-forms.js +27 -0
- package/dist/components-forms.js.map +1 -0
- package/dist/components-input-contact-input-contact.cjs.map +1 -1
- package/dist/components-input-contact-input-contact.js.map +1 -1
- package/dist/components-story-drawer-story-drawer.cjs.map +1 -1
- package/dist/components-story-drawer-story-drawer.js.map +1 -1
- package/dist/components-ui-typography-typography.styles-C6G6MFUq.js +105 -0
- package/dist/components-ui-typography-typography.styles-C6G6MFUq.js.map +1 -0
- package/dist/components-ui-typography-typography.styles-CMzY_pXl.cjs +2 -0
- package/dist/components-ui-typography-typography.styles-CMzY_pXl.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +27 -25
- package/dist/index.esm-CFsbc_Iq.js +1328 -0
- package/dist/index.esm-CFsbc_Iq.js.map +1 -0
- package/dist/index.esm-ZdO9UZ3G.cjs +2 -0
- package/dist/index.esm-ZdO9UZ3G.cjs.map +1 -0
- package/dist/index.js +102 -76
- package/dist/index.js.map +1 -1
- package/dist/types/error.d.ts +13 -0
- package/dist/types-error.cjs +2 -0
- package/dist/types-error.cjs.map +1 -0
- package/dist/types-error.js +2 -0
- package/dist/types-error.js.map +1 -0
- package/dist/utils/get-validation-state.d.ts +1 -0
- package/dist/utils-get-validation-state.cjs +2 -0
- package/dist/utils-get-validation-state.cjs.map +1 -0
- package/dist/utils-get-validation-state.js +14 -0
- package/dist/utils-get-validation-state.js.map +1 -0
- package/package.json +12 -2
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { a as s, C as c } from "./index.esm-CFsbc_Iq.js";
|
|
3
|
+
import { SelectCalendarMenu as C } from "./components-ui-select-calendar-menu-select-calendar-menu.js";
|
|
4
|
+
const f = ({ name: r, rules: o, disabled: t, ...n }) => {
|
|
5
|
+
const { control: a } = s();
|
|
6
|
+
return /* @__PURE__ */ e(
|
|
7
|
+
c,
|
|
8
|
+
{
|
|
9
|
+
name: r,
|
|
10
|
+
rules: o,
|
|
11
|
+
control: a,
|
|
12
|
+
render: ({ field: { onChange: l, value: m } }) => /* @__PURE__ */ e(
|
|
13
|
+
C,
|
|
14
|
+
{
|
|
15
|
+
...n,
|
|
16
|
+
onValueChange: l,
|
|
17
|
+
value: m,
|
|
18
|
+
className: "text-secondary-text",
|
|
19
|
+
disabled: t
|
|
20
|
+
}
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
export {
|
|
26
|
+
f as FormSelectCalendar
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=components-forms-form-select-calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms-form-select-calendar.js","sources":["../src/components/forms/form-select-calendar.tsx"],"sourcesContent":["import { Controller, useFormContext, type RegisterOptions } from \"react-hook-form\";\nimport {\n SelectCalendarMenu,\n type SelectCalendarMenuProps,\n} from \"../ui/select-calendar-menu\";\n\ntype Props = {\n name: string;\n rules?: RegisterOptions;\n disabled?: boolean;\n} & SelectCalendarMenuProps;\n\nexport const FormSelectCalendar = ({ name, rules, disabled, ...rest }: Props) => {\n const { control } = useFormContext();\n\n return (\n <Controller\n name={name}\n rules={rules}\n control={control}\n render={({ field: { onChange, value } }) => {\n return (\n <SelectCalendarMenu\n {...rest}\n onValueChange={onChange}\n value={value}\n className=\"text-secondary-text\"\n disabled={disabled}\n />\n );\n }}\n />\n );\n};\n"],"names":["FormSelectCalendar","name","rules","disabled","rest","control","useFormContext","jsx","Controller","onChange","value","SelectCalendarMenu"],"mappings":";;;AAYO,MAAMA,IAAqB,CAAC,EAAE,MAAAC,GAAM,OAAAC,GAAO,UAAAC,GAAU,GAAGC,QAAkB;AAC/E,QAAM,EAAE,SAAAC,EAAA,IAAYC,EAAA;AAEpB,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAP;AAAA,MACA,OAAAC;AAAA,MACA,SAAAG;AAAA,MACA,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAAI,GAAU,OAAAC,EAAA,QAE1B,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACE,GAAGP;AAAA,UACJ,eAAeK;AAAA,UACf,OAAAC;AAAA,UACA,WAAU;AAAA,UACV,UAAAP;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),q=require("./utils-get-validation-state.cjs"),S=require("./index.esm-ZdO9UZ3G.cjs"),F=require("./components-select-field-select-field.cjs"),h=require("./components-select-groups-select-groups.cjs"),y=(t,l)=>{const n=(Array.isArray(t)?t:t==null?[]:[t]).map(e=>{if(typeof e=="string")return e.trim();if(typeof e=="number"||typeof e=="boolean")return String(e);if(typeof e=="object"&&"value"in e){const r=e.value;if(typeof r=="string")return r.trim();if(typeof r=="number"||typeof r=="boolean")return String(r)}return""}).filter(Boolean),o=Array.from(new Set(n));return l?o:o[0]??""},v=({name:t,rules:l,disabled:n,selectField:o="field",...e})=>{const{formState:{errors:r,touchedFields:g,isSubmitted:m},control:b}=S.useFormContext(),i=o==="field"&&!!e.multiple;return a.jsx(S.Controller,{name:t,rules:l,control:b,render:({field:{onChange:s,onBlur:j,value:f}},...x)=>{const V=c=>{s(y(c,i))},_=c=>{i||s(c.currentTarget.value)},u=o==="field"?y(f??(i?[]:""),i):f,[p,d]=q.getValidationState(t,u,r,g,m);return o==="groups"?a.jsx(h.SelectGroups,{...e,name:t,onChange:s,value:u,isValid:p,description:d,disabled:n}):a.jsx(F.SelectField,{...x,...e,onChange:V,onInput:_,onBlur:j,value:u,isValid:p,description:d,disabled:n})}})};exports.FormSelect=v;
|
|
2
|
+
//# sourceMappingURL=components-forms-form-select.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms-form-select.cjs","sources":["../src/components/forms/form-select.tsx"],"sourcesContent":["import { getValidationState } from \"@/utils/get-validation-state\";\n\nimport {\n Controller,\n useFormContext,\n type ControllerRenderProps,\n type RegisterOptions,\n} from \"react-hook-form\";\nimport { SelectField, type SelectProps } from \"../select-field\";\nimport { SelectGroups, type SelectGroupsProps } from \"../select-groups\";\n\ntype BaseProps = {\n name: string;\n rules?: RegisterOptions;\n disabled?: boolean;\n selectField?: \"field\" | \"groups\";\n};\n\ntype FieldProps = BaseProps & { selectField?: \"field\" } & Omit<\n SelectProps,\n keyof ControllerRenderProps\n >;\ntype GroupsProps = BaseProps & { selectField?: \"groups\" } & SelectGroupsProps;\ntype Props = FieldProps | GroupsProps;\n\ntype FormSelectValue = Parameters<NonNullable<SelectProps[\"onChange\"]>>[0];\n\nconst normalizeSelectValue = (\n value: FormSelectValue,\n isMultiple: boolean,\n): string | string[] => {\n const list = (Array.isArray(value) ? value : value == null ? [] : [value])\n .map((item) => {\n if (typeof item === \"string\") return item.trim();\n if (typeof item === \"number\" || typeof item === \"boolean\") return String(item);\n if (typeof item === \"object\" && \"value\" in item) {\n const optionValue = (item as { value?: unknown }).value;\n if (typeof optionValue === \"string\") return optionValue.trim();\n if (typeof optionValue === \"number\" || typeof optionValue === \"boolean\") {\n return String(optionValue);\n }\n }\n return \"\";\n })\n .filter(Boolean);\n const values = Array.from(new Set(list));\n\n return isMultiple ? values : (values[0] ?? \"\");\n};\n\nexport const FormSelect = ({\n name,\n rules,\n disabled,\n selectField = \"field\",\n ...rest\n}: Props) => {\n const {\n formState: { errors, touchedFields, isSubmitted },\n control,\n } = useFormContext();\n const isMultiple = selectField === \"field\" && Boolean((rest as FieldProps).multiple);\n\n return (\n <Controller\n name={name}\n rules={rules}\n control={control}\n render={({ field: { onChange, onBlur, value } }, ...fields) => {\n const handleSelectChange = (nextValue: FormSelectValue) => {\n onChange(normalizeSelectValue(nextValue, isMultiple));\n };\n\n const handleInput = (event: React.SyntheticEvent<HTMLInputElement>) => {\n if (!isMultiple) onChange(event.currentTarget.value);\n };\n\n const currentValue =\n selectField === \"field\"\n ? normalizeSelectValue(\n (value ?? (isMultiple ? [] : \"\")) as FormSelectValue,\n isMultiple,\n )\n : value;\n const [isValid, errorMsg] = getValidationState(\n name,\n currentValue,\n errors,\n touchedFields,\n isSubmitted,\n );\n\n if (selectField === \"groups\") {\n return (\n <SelectGroups\n {...(rest as GroupsProps)}\n name={name}\n onChange={onChange}\n value={currentValue}\n isValid={isValid}\n description={errorMsg}\n disabled={disabled}\n />\n );\n }\n\n return (\n <SelectField\n {...fields}\n {...(rest as FieldProps)}\n onChange={handleSelectChange}\n onInput={handleInput}\n onBlur={onBlur}\n value={currentValue}\n isValid={isValid}\n description={errorMsg}\n disabled={disabled}\n />\n );\n }}\n />\n );\n};\n"],"names":["normalizeSelectValue","value","isMultiple","list","item","optionValue","values","FormSelect","name","rules","disabled","selectField","rest","errors","touchedFields","isSubmitted","control","useFormContext","jsx","Controller","onChange","onBlur","fields","handleSelectChange","nextValue","handleInput","event","currentValue","isValid","errorMsg","getValidationState","SelectGroups","SelectField"],"mappings":"2TA2BMA,EAAuB,CAC3BC,EACAC,IACsB,CACtB,MAAMC,GAAQ,MAAM,QAAQF,CAAK,EAAIA,EAAQA,GAAS,KAAO,CAAA,EAAK,CAACA,CAAK,GACrE,IAAKG,GAAS,CACb,GAAI,OAAOA,GAAS,SAAU,OAAOA,EAAK,KAAA,EAC1C,GAAI,OAAOA,GAAS,UAAY,OAAOA,GAAS,UAAW,OAAO,OAAOA,CAAI,EAC7E,GAAI,OAAOA,GAAS,UAAY,UAAWA,EAAM,CAC/C,MAAMC,EAAeD,EAA6B,MAClD,GAAI,OAAOC,GAAgB,SAAU,OAAOA,EAAY,KAAA,EACxD,GAAI,OAAOA,GAAgB,UAAY,OAAOA,GAAgB,UAC5D,OAAO,OAAOA,CAAW,CAE7B,CACA,MAAO,EACT,CAAC,EACA,OAAO,OAAO,EACXC,EAAS,MAAM,KAAK,IAAI,IAAIH,CAAI,CAAC,EAEvC,OAAOD,EAAaI,EAAUA,EAAO,CAAC,GAAK,EAC7C,EAEaC,EAAa,CAAC,CACzB,KAAAC,EACA,MAAAC,EACA,SAAAC,EACA,YAAAC,EAAc,QACd,GAAGC,CACL,IAAa,CACX,KAAM,CACJ,UAAW,CAAE,OAAAC,EAAQ,cAAAC,EAAe,YAAAC,CAAA,EACpC,QAAAC,CAAA,EACEC,iBAAA,EACEf,EAAaS,IAAgB,SAAW,EAASC,EAAoB,SAE3E,OACEM,EAAAA,IAACC,EAAAA,WAAA,CACC,KAAAX,EACA,MAAAC,EACA,QAAAO,EACA,OAAQ,CAAC,CAAE,MAAO,CAAE,SAAAI,EAAU,OAAAC,EAAQ,MAAApB,CAAA,MAAcqB,IAAW,CAC7D,MAAMC,EAAsBC,GAA+B,CACzDJ,EAASpB,EAAqBwB,EAAWtB,CAAU,CAAC,CACtD,EAEMuB,EAAeC,GAAkD,CAChExB,GAAYkB,EAASM,EAAM,cAAc,KAAK,CACrD,EAEMC,EACJhB,IAAgB,QACZX,EACGC,IAAUC,EAAa,CAAA,EAAK,IAC7BA,CAAA,EAEFD,EACA,CAAC2B,EAASC,CAAQ,EAAIC,EAAAA,mBAC1BtB,EACAmB,EACAd,EACAC,EACAC,CAAA,EAGF,OAAIJ,IAAgB,SAEhBO,EAAAA,IAACa,EAAAA,aAAA,CACE,GAAInB,EACL,KAAAJ,EACA,SAAAY,EACA,MAAOO,EACP,QAAAC,EACA,YAAaC,EACb,SAAAnB,CAAA,CAAA,EAMJQ,EAAAA,IAACc,EAAAA,YAAA,CACE,GAAGV,EACH,GAAIV,EACL,SAAUW,EACV,QAASE,EACT,OAAAJ,EACA,MAAOM,EACP,QAAAC,EACA,YAAaC,EACb,SAAAnB,CAAA,CAAA,CAGN,CAAA,CAAA,CAGN"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsx as p } from "react/jsx-runtime";
|
|
2
|
+
import { getValidationState as A } from "./utils-get-validation-state.js";
|
|
3
|
+
import { a as C, C as j } from "./index.esm-CFsbc_Iq.js";
|
|
4
|
+
import { SelectField as v } from "./components-select-field-select-field.js";
|
|
5
|
+
import { SelectGroups as B } from "./components-select-groups-select-groups.js";
|
|
6
|
+
const d = (t, l) => {
|
|
7
|
+
const n = (Array.isArray(t) ? t : t == null ? [] : [t]).map((r) => {
|
|
8
|
+
if (typeof r == "string") return r.trim();
|
|
9
|
+
if (typeof r == "number" || typeof r == "boolean") return String(r);
|
|
10
|
+
if (typeof r == "object" && "value" in r) {
|
|
11
|
+
const o = r.value;
|
|
12
|
+
if (typeof o == "string") return o.trim();
|
|
13
|
+
if (typeof o == "number" || typeof o == "boolean")
|
|
14
|
+
return String(o);
|
|
15
|
+
}
|
|
16
|
+
return "";
|
|
17
|
+
}).filter(Boolean), e = Array.from(new Set(n));
|
|
18
|
+
return l ? e : e[0] ?? "";
|
|
19
|
+
}, G = ({
|
|
20
|
+
name: t,
|
|
21
|
+
rules: l,
|
|
22
|
+
disabled: n,
|
|
23
|
+
selectField: e = "field",
|
|
24
|
+
...r
|
|
25
|
+
}) => {
|
|
26
|
+
const {
|
|
27
|
+
formState: { errors: o, touchedFields: S, isSubmitted: y },
|
|
28
|
+
control: g
|
|
29
|
+
} = C(), i = e === "field" && !!r.multiple;
|
|
30
|
+
return /* @__PURE__ */ p(
|
|
31
|
+
j,
|
|
32
|
+
{
|
|
33
|
+
name: t,
|
|
34
|
+
rules: l,
|
|
35
|
+
control: g,
|
|
36
|
+
render: ({ field: { onChange: u, onBlur: b, value: a } }, ...V) => {
|
|
37
|
+
const h = (s) => {
|
|
38
|
+
u(d(s, i));
|
|
39
|
+
}, x = (s) => {
|
|
40
|
+
i || u(s.currentTarget.value);
|
|
41
|
+
}, f = e === "field" ? d(
|
|
42
|
+
a ?? (i ? [] : ""),
|
|
43
|
+
i
|
|
44
|
+
) : a, [c, m] = A(
|
|
45
|
+
t,
|
|
46
|
+
f,
|
|
47
|
+
o,
|
|
48
|
+
S,
|
|
49
|
+
y
|
|
50
|
+
);
|
|
51
|
+
return e === "groups" ? /* @__PURE__ */ p(
|
|
52
|
+
B,
|
|
53
|
+
{
|
|
54
|
+
...r,
|
|
55
|
+
name: t,
|
|
56
|
+
onChange: u,
|
|
57
|
+
value: f,
|
|
58
|
+
isValid: c,
|
|
59
|
+
description: m,
|
|
60
|
+
disabled: n
|
|
61
|
+
}
|
|
62
|
+
) : /* @__PURE__ */ p(
|
|
63
|
+
v,
|
|
64
|
+
{
|
|
65
|
+
...V,
|
|
66
|
+
...r,
|
|
67
|
+
onChange: h,
|
|
68
|
+
onInput: x,
|
|
69
|
+
onBlur: b,
|
|
70
|
+
value: f,
|
|
71
|
+
isValid: c,
|
|
72
|
+
description: m,
|
|
73
|
+
disabled: n
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
};
|
|
80
|
+
export {
|
|
81
|
+
G as FormSelect
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=components-forms-form-select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms-form-select.js","sources":["../src/components/forms/form-select.tsx"],"sourcesContent":["import { getValidationState } from \"@/utils/get-validation-state\";\n\nimport {\n Controller,\n useFormContext,\n type ControllerRenderProps,\n type RegisterOptions,\n} from \"react-hook-form\";\nimport { SelectField, type SelectProps } from \"../select-field\";\nimport { SelectGroups, type SelectGroupsProps } from \"../select-groups\";\n\ntype BaseProps = {\n name: string;\n rules?: RegisterOptions;\n disabled?: boolean;\n selectField?: \"field\" | \"groups\";\n};\n\ntype FieldProps = BaseProps & { selectField?: \"field\" } & Omit<\n SelectProps,\n keyof ControllerRenderProps\n >;\ntype GroupsProps = BaseProps & { selectField?: \"groups\" } & SelectGroupsProps;\ntype Props = FieldProps | GroupsProps;\n\ntype FormSelectValue = Parameters<NonNullable<SelectProps[\"onChange\"]>>[0];\n\nconst normalizeSelectValue = (\n value: FormSelectValue,\n isMultiple: boolean,\n): string | string[] => {\n const list = (Array.isArray(value) ? value : value == null ? [] : [value])\n .map((item) => {\n if (typeof item === \"string\") return item.trim();\n if (typeof item === \"number\" || typeof item === \"boolean\") return String(item);\n if (typeof item === \"object\" && \"value\" in item) {\n const optionValue = (item as { value?: unknown }).value;\n if (typeof optionValue === \"string\") return optionValue.trim();\n if (typeof optionValue === \"number\" || typeof optionValue === \"boolean\") {\n return String(optionValue);\n }\n }\n return \"\";\n })\n .filter(Boolean);\n const values = Array.from(new Set(list));\n\n return isMultiple ? values : (values[0] ?? \"\");\n};\n\nexport const FormSelect = ({\n name,\n rules,\n disabled,\n selectField = \"field\",\n ...rest\n}: Props) => {\n const {\n formState: { errors, touchedFields, isSubmitted },\n control,\n } = useFormContext();\n const isMultiple = selectField === \"field\" && Boolean((rest as FieldProps).multiple);\n\n return (\n <Controller\n name={name}\n rules={rules}\n control={control}\n render={({ field: { onChange, onBlur, value } }, ...fields) => {\n const handleSelectChange = (nextValue: FormSelectValue) => {\n onChange(normalizeSelectValue(nextValue, isMultiple));\n };\n\n const handleInput = (event: React.SyntheticEvent<HTMLInputElement>) => {\n if (!isMultiple) onChange(event.currentTarget.value);\n };\n\n const currentValue =\n selectField === \"field\"\n ? normalizeSelectValue(\n (value ?? (isMultiple ? [] : \"\")) as FormSelectValue,\n isMultiple,\n )\n : value;\n const [isValid, errorMsg] = getValidationState(\n name,\n currentValue,\n errors,\n touchedFields,\n isSubmitted,\n );\n\n if (selectField === \"groups\") {\n return (\n <SelectGroups\n {...(rest as GroupsProps)}\n name={name}\n onChange={onChange}\n value={currentValue}\n isValid={isValid}\n description={errorMsg}\n disabled={disabled}\n />\n );\n }\n\n return (\n <SelectField\n {...fields}\n {...(rest as FieldProps)}\n onChange={handleSelectChange}\n onInput={handleInput}\n onBlur={onBlur}\n value={currentValue}\n isValid={isValid}\n description={errorMsg}\n disabled={disabled}\n />\n );\n }}\n />\n );\n};\n"],"names":["normalizeSelectValue","value","isMultiple","list","item","optionValue","values","FormSelect","name","rules","disabled","selectField","rest","errors","touchedFields","isSubmitted","control","useFormContext","jsx","Controller","onChange","onBlur","fields","handleSelectChange","nextValue","handleInput","event","currentValue","isValid","errorMsg","getValidationState","SelectGroups","SelectField"],"mappings":";;;;;AA2BA,MAAMA,IAAuB,CAC3BC,GACAC,MACsB;AACtB,QAAMC,KAAQ,MAAM,QAAQF,CAAK,IAAIA,IAAQA,KAAS,OAAO,CAAA,IAAK,CAACA,CAAK,GACrE,IAAI,CAACG,MAAS;AACb,QAAI,OAAOA,KAAS,SAAU,QAAOA,EAAK,KAAA;AAC1C,QAAI,OAAOA,KAAS,YAAY,OAAOA,KAAS,UAAW,QAAO,OAAOA,CAAI;AAC7E,QAAI,OAAOA,KAAS,YAAY,WAAWA,GAAM;AAC/C,YAAMC,IAAeD,EAA6B;AAClD,UAAI,OAAOC,KAAgB,SAAU,QAAOA,EAAY,KAAA;AACxD,UAAI,OAAOA,KAAgB,YAAY,OAAOA,KAAgB;AAC5D,eAAO,OAAOA,CAAW;AAAA,IAE7B;AACA,WAAO;AAAA,EACT,CAAC,EACA,OAAO,OAAO,GACXC,IAAS,MAAM,KAAK,IAAI,IAAIH,CAAI,CAAC;AAEvC,SAAOD,IAAaI,IAAUA,EAAO,CAAC,KAAK;AAC7C,GAEaC,IAAa,CAAC;AAAA,EACzB,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,GAAGC;AACL,MAAa;AACX,QAAM;AAAA,IACJ,WAAW,EAAE,QAAAC,GAAQ,eAAAC,GAAe,aAAAC,EAAA;AAAA,IACpC,SAAAC;AAAA,EAAA,IACEC,EAAA,GACEf,IAAaS,MAAgB,WAAW,EAASC,EAAoB;AAE3E,SACE,gBAAAM;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAX;AAAA,MACA,OAAAC;AAAA,MACA,SAAAO;AAAA,MACA,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAAI,GAAU,QAAAC,GAAQ,OAAApB,EAAA,QAAcqB,MAAW;AAC7D,cAAMC,IAAqB,CAACC,MAA+B;AACzD,UAAAJ,EAASpB,EAAqBwB,GAAWtB,CAAU,CAAC;AAAA,QACtD,GAEMuB,IAAc,CAACC,MAAkD;AACrE,UAAKxB,KAAYkB,EAASM,EAAM,cAAc,KAAK;AAAA,QACrD,GAEMC,IACJhB,MAAgB,UACZX;AAAA,UACGC,MAAUC,IAAa,CAAA,IAAK;AAAA,UAC7BA;AAAA,QAAA,IAEFD,GACA,CAAC2B,GAASC,CAAQ,IAAIC;AAAA,UAC1BtB;AAAA,UACAmB;AAAA,UACAd;AAAA,UACAC;AAAA,UACAC;AAAA,QAAA;AAGF,eAAIJ,MAAgB,WAEhB,gBAAAO;AAAA,UAACa;AAAA,UAAA;AAAA,YACE,GAAInB;AAAA,YACL,MAAAJ;AAAA,YACA,UAAAY;AAAA,YACA,OAAOO;AAAA,YACP,SAAAC;AAAA,YACA,aAAaC;AAAA,YACb,UAAAnB;AAAA,UAAA;AAAA,QAAA,IAMJ,gBAAAQ;AAAA,UAACc;AAAA,UAAA;AAAA,YACE,GAAGV;AAAA,YACH,GAAIV;AAAA,YACL,UAAUW;AAAA,YACV,SAASE;AAAA,YACT,QAAAJ;AAAA,YACA,OAAOM;AAAA,YACP,SAAAC;AAAA,YACA,aAAaC;AAAA,YACb,UAAAnB;AAAA,UAAA;AAAA,QAAA;AAAA,MAGN;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),F=require("./utils-get-validation-state.cjs"),o=require("./index.esm-ZdO9UZ3G.cjs"),S=require("./components-textarea-field-textarea-field.cjs"),g=({name:e,rules:i,...s})=>{const{formState:{errors:n,touchedFields:a,isSubmitted:d},control:l}=o.useFormContext();return r.jsx(o.Controller,{name:e,rules:i,control:l,render:({field:{onChange:c,onBlur:u,value:t=""}})=>{const[x,m]=F.getValidationState(e,t,n,a,d);return r.jsx(S.TextareaField,{...s,onChange:c,onBlur:u,value:t,isValid:x,description:m})}})};exports.FormTextarea=g;
|
|
2
|
+
//# sourceMappingURL=components-forms-form-textarea.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms-form-textarea.cjs","sources":["../src/components/forms/form-textarea.tsx"],"sourcesContent":["import { getValidationState } from \"@/utils/get-validation-state\";\n\nimport {\n Controller,\n useFormContext,\n type ControllerRenderProps,\n type RegisterOptions,\n} from \"react-hook-form\";\nimport { TextareaField, type TextareaFieldProps } from \"../textarea-field\";\n\ntype Props = Omit<TextareaFieldProps, keyof ControllerRenderProps> & {\n name: string;\n rules?: RegisterOptions;\n disabled?: boolean;\n};\n\nexport const FormTextarea = ({ name, rules, ...rest }: Props) => {\n const {\n formState: { errors, touchedFields, isSubmitted },\n control,\n } = useFormContext();\n\n return (\n <Controller\n name={name}\n rules={rules}\n control={control}\n render={({ field: { onChange, onBlur, value = \"\" } }) => {\n const [isValid, errorMsg] = getValidationState(\n name,\n value,\n errors,\n touchedFields,\n isSubmitted,\n );\n\n return (\n <TextareaField\n {...rest}\n onChange={onChange}\n onBlur={onBlur}\n value={value}\n isValid={isValid}\n description={errorMsg}\n />\n );\n }}\n />\n );\n};\n"],"names":["FormTextarea","name","rules","rest","errors","touchedFields","isSubmitted","control","useFormContext","jsx","Controller","onChange","onBlur","value","isValid","errorMsg","getValidationState","TextareaField"],"mappings":"qQAgBaA,EAAe,CAAC,CAAE,KAAAC,EAAM,MAAAC,EAAO,GAAGC,KAAkB,CAC/D,KAAM,CACJ,UAAW,CAAE,OAAAC,EAAQ,cAAAC,EAAe,YAAAC,CAAA,EACpC,QAAAC,CAAA,EACEC,iBAAA,EAEJ,OACEC,EAAAA,IAACC,EAAAA,WAAA,CACC,KAAAT,EACA,MAAAC,EACA,QAAAK,EACA,OAAQ,CAAC,CAAE,MAAO,CAAE,SAAAI,EAAU,OAAAC,EAAQ,MAAAC,EAAQ,EAAA,KAAW,CACvD,KAAM,CAACC,EAASC,CAAQ,EAAIC,EAAAA,mBAC1Bf,EACAY,EACAT,EACAC,EACAC,CAAA,EAGF,OACEG,EAAAA,IAACQ,EAAAA,cAAA,CACE,GAAGd,EACJ,SAAAQ,EACA,OAAAC,EACA,MAAAC,EACA,QAAAC,EACA,YAAaC,CAAA,CAAA,CAGnB,CAAA,CAAA,CAGN"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { getValidationState as p } from "./utils-get-validation-state.js";
|
|
3
|
+
import { a as x, C as u } from "./index.esm-CFsbc_Iq.js";
|
|
4
|
+
import { TextareaField as F } from "./components-textarea-field-textarea-field.js";
|
|
5
|
+
const V = ({ name: r, rules: e, ...i }) => {
|
|
6
|
+
const {
|
|
7
|
+
formState: { errors: s, touchedFields: m, isSubmitted: a },
|
|
8
|
+
control: n
|
|
9
|
+
} = x();
|
|
10
|
+
return /* @__PURE__ */ o(
|
|
11
|
+
u,
|
|
12
|
+
{
|
|
13
|
+
name: r,
|
|
14
|
+
rules: e,
|
|
15
|
+
control: n,
|
|
16
|
+
render: ({ field: { onChange: d, onBlur: l, value: t = "" } }) => {
|
|
17
|
+
const [c, f] = p(
|
|
18
|
+
r,
|
|
19
|
+
t,
|
|
20
|
+
s,
|
|
21
|
+
m,
|
|
22
|
+
a
|
|
23
|
+
);
|
|
24
|
+
return /* @__PURE__ */ o(
|
|
25
|
+
F,
|
|
26
|
+
{
|
|
27
|
+
...i,
|
|
28
|
+
onChange: d,
|
|
29
|
+
onBlur: l,
|
|
30
|
+
value: t,
|
|
31
|
+
isValid: c,
|
|
32
|
+
description: f
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
};
|
|
39
|
+
export {
|
|
40
|
+
V as FormTextarea
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=components-forms-form-textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms-form-textarea.js","sources":["../src/components/forms/form-textarea.tsx"],"sourcesContent":["import { getValidationState } from \"@/utils/get-validation-state\";\n\nimport {\n Controller,\n useFormContext,\n type ControllerRenderProps,\n type RegisterOptions,\n} from \"react-hook-form\";\nimport { TextareaField, type TextareaFieldProps } from \"../textarea-field\";\n\ntype Props = Omit<TextareaFieldProps, keyof ControllerRenderProps> & {\n name: string;\n rules?: RegisterOptions;\n disabled?: boolean;\n};\n\nexport const FormTextarea = ({ name, rules, ...rest }: Props) => {\n const {\n formState: { errors, touchedFields, isSubmitted },\n control,\n } = useFormContext();\n\n return (\n <Controller\n name={name}\n rules={rules}\n control={control}\n render={({ field: { onChange, onBlur, value = \"\" } }) => {\n const [isValid, errorMsg] = getValidationState(\n name,\n value,\n errors,\n touchedFields,\n isSubmitted,\n );\n\n return (\n <TextareaField\n {...rest}\n onChange={onChange}\n onBlur={onBlur}\n value={value}\n isValid={isValid}\n description={errorMsg}\n />\n );\n }}\n />\n );\n};\n"],"names":["FormTextarea","name","rules","rest","errors","touchedFields","isSubmitted","control","useFormContext","jsx","Controller","onChange","onBlur","value","isValid","errorMsg","getValidationState","TextareaField"],"mappings":";;;;AAgBO,MAAMA,IAAe,CAAC,EAAE,MAAAC,GAAM,OAAAC,GAAO,GAAGC,QAAkB;AAC/D,QAAM;AAAA,IACJ,WAAW,EAAE,QAAAC,GAAQ,eAAAC,GAAe,aAAAC,EAAA;AAAA,IACpC,SAAAC;AAAA,EAAA,IACEC,EAAA;AAEJ,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAT;AAAA,MACA,OAAAC;AAAA,MACA,SAAAK;AAAA,MACA,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAAI,GAAU,QAAAC,GAAQ,OAAAC,IAAQ,GAAA,QAAW;AACvD,cAAM,CAACC,GAASC,CAAQ,IAAIC;AAAA,UAC1Bf;AAAA,UACAY;AAAA,UACAT;AAAA,UACAC;AAAA,UACAC;AAAA,QAAA;AAGF,eACE,gBAAAG;AAAA,UAACQ;AAAA,UAAA;AAAA,YACE,GAAGd;AAAA,YACJ,UAAAQ;AAAA,YACA,QAAAC;AAAA,YACA,OAAAC;AAAA,YACA,SAAAC;AAAA,YACA,aAAaC;AAAA,UAAA;AAAA,QAAA;AAAA,MAGnB;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("./index.esm-ZdO9UZ3G.cjs"),i=require("./components-ui-toggle-group-toggle-group.cjs"),c=({name:r,rules:t,kind:n,...u})=>{const{control:g}=o.useFormContext();return e.jsx(o.Controller,{name:r,rules:t,control:g,render:({field:{onChange:l,value:s}})=>e.jsx(i.ToggleGroup,{...u,kind:n,value:s,onValueChange:l})})};exports.FormToggleGroup=c;
|
|
2
|
+
//# sourceMappingURL=components-forms-form-toggle-group.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms-form-toggle-group.cjs","sources":["../src/components/forms/form-toggle-group.tsx"],"sourcesContent":["import { Controller, useFormContext, type RegisterOptions } from \"react-hook-form\";\nimport { ToggleGroup } from \"../ui/toggle-group\";\n\ntype ToggleGroupProps = React.ComponentProps<typeof ToggleGroup>;\n\ntype BaseProps = {\n name: string;\n rules?: RegisterOptions;\n disabled?: boolean;\n kind?: string;\n type?: \"single\" | \"multiple\";\n};\n\ntype Props = BaseProps & ToggleGroupProps;\n\nexport const FormToggleGroup = ({ name, rules, kind, ...rest }: Props) => {\n const { control } = useFormContext();\n\n return (\n <Controller\n name={name}\n rules={rules}\n control={control}\n render={({ field: { onChange, value } }) => {\n return (\n <ToggleGroup\n {...rest}\n kind={kind}\n value={value}\n onValueChange={onChange}\n />\n );\n }}\n />\n );\n};\n"],"names":["FormToggleGroup","name","rules","kind","rest","control","useFormContext","jsx","Controller","onChange","value","ToggleGroup"],"mappings":"sNAeaA,EAAkB,CAAC,CAAE,KAAAC,EAAM,MAAAC,EAAO,KAAAC,EAAM,GAAGC,KAAkB,CACxE,KAAM,CAAE,QAAAC,CAAA,EAAYC,iBAAA,EAEpB,OACEC,EAAAA,IAACC,EAAAA,WAAA,CACC,KAAAP,EACA,MAAAC,EACA,QAAAG,EACA,OAAQ,CAAC,CAAE,MAAO,CAAE,SAAAI,EAAU,MAAAC,CAAA,KAE1BH,EAAAA,IAACI,EAAAA,YAAA,CACE,GAAGP,EACJ,KAAAD,EACA,MAAAO,EACA,cAAeD,CAAA,CAAA,CAGrB,CAAA,CAGN"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { a as s, C as u } from "./index.esm-CFsbc_Iq.js";
|
|
3
|
+
import { ToggleGroup as a } from "./components-ui-toggle-group-toggle-group.js";
|
|
4
|
+
const C = ({ name: r, rules: e, kind: t, ...n }) => {
|
|
5
|
+
const { control: m } = s();
|
|
6
|
+
return /* @__PURE__ */ o(
|
|
7
|
+
u,
|
|
8
|
+
{
|
|
9
|
+
name: r,
|
|
10
|
+
rules: e,
|
|
11
|
+
control: m,
|
|
12
|
+
render: ({ field: { onChange: l, value: p } }) => /* @__PURE__ */ o(
|
|
13
|
+
a,
|
|
14
|
+
{
|
|
15
|
+
...n,
|
|
16
|
+
kind: t,
|
|
17
|
+
value: p,
|
|
18
|
+
onValueChange: l
|
|
19
|
+
}
|
|
20
|
+
)
|
|
21
|
+
}
|
|
22
|
+
);
|
|
23
|
+
};
|
|
24
|
+
export {
|
|
25
|
+
C as FormToggleGroup
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=components-forms-form-toggle-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms-form-toggle-group.js","sources":["../src/components/forms/form-toggle-group.tsx"],"sourcesContent":["import { Controller, useFormContext, type RegisterOptions } from \"react-hook-form\";\nimport { ToggleGroup } from \"../ui/toggle-group\";\n\ntype ToggleGroupProps = React.ComponentProps<typeof ToggleGroup>;\n\ntype BaseProps = {\n name: string;\n rules?: RegisterOptions;\n disabled?: boolean;\n kind?: string;\n type?: \"single\" | \"multiple\";\n};\n\ntype Props = BaseProps & ToggleGroupProps;\n\nexport const FormToggleGroup = ({ name, rules, kind, ...rest }: Props) => {\n const { control } = useFormContext();\n\n return (\n <Controller\n name={name}\n rules={rules}\n control={control}\n render={({ field: { onChange, value } }) => {\n return (\n <ToggleGroup\n {...rest}\n kind={kind}\n value={value}\n onValueChange={onChange}\n />\n );\n }}\n />\n );\n};\n"],"names":["FormToggleGroup","name","rules","kind","rest","control","useFormContext","jsx","Controller","onChange","value","ToggleGroup"],"mappings":";;;AAeO,MAAMA,IAAkB,CAAC,EAAE,MAAAC,GAAM,OAAAC,GAAO,MAAAC,GAAM,GAAGC,QAAkB;AACxE,QAAM,EAAE,SAAAC,EAAA,IAAYC,EAAA;AAEpB,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAP;AAAA,MACA,OAAAC;AAAA,MACA,SAAAG;AAAA,MACA,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAAI,GAAU,OAAAC,EAAA,QAE1B,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACE,GAAGP;AAAA,UACJ,MAAAD;AAAA,UACA,OAAAO;AAAA,UACA,eAAeD;AAAA,QAAA;AAAA,MAAA;AAAA,IAGrB;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),h=require("react"),n=require("./index.esm-ZdO9UZ3G.cjs"),b=s=>{const{onSubmit:i,children:u,defaultValues:c,formControls:m,apiErrors:r,...d}=s,l=n.useForm({defaultValues:c,mode:"onBlur"}),e=m??l;h.useEffect(()=>{r?.length&&r.forEach(({field:o,message:f})=>{e.setError(o,{message:f})})},[r,e]);const a=o=>{e.handleSubmit(i)(o)};return t.jsx(n.FormProvider,{...e,children:t.jsx("form",{...d,onSubmit:a,children:u})})};exports.Form=b;
|
|
2
|
+
//# sourceMappingURL=components-forms-form.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms-form.cjs","sources":["../src/components/forms/form.tsx"],"sourcesContent":["import type { ApiValidationError } from \"@/types/error\";\nimport { useEffect, type ComponentPropsWithRef, type PropsWithChildren } from \"react\";\nimport {\n FormProvider,\n useForm,\n type DefaultValues,\n type FieldValues,\n type Path,\n type UseFormReturn,\n} from \"react-hook-form\";\n\ntype FormProps<T extends FieldValues> = {\n apiErrors?: ApiValidationError[];\n onSubmit: (values: T) => void | Promise<void>;\n defaultValues?: DefaultValues<T>;\n formControls?: UseFormReturn<T>;\n};\ntype Props<T extends FieldValues> = Omit<\n ComponentPropsWithRef<\"form\">,\n keyof FormProps<T>\n> &\n PropsWithChildren<FormProps<T>>;\n\nconst Form = <T extends FieldValues>(props: Props<T>) => {\n const { onSubmit, children, defaultValues, formControls, apiErrors, ...restProps } =\n props;\n const internalMethods = useForm<T>({ defaultValues, mode: \"onBlur\" });\n const methods = formControls ?? internalMethods;\n\n useEffect(() => {\n if (!apiErrors?.length) return;\n\n apiErrors.forEach(({ field, message }) => {\n methods.setError(field as Path<T>, { message });\n });\n }, [apiErrors, methods]);\n\n const handleSubmit: ComponentPropsWithRef<\"form\">[\"onSubmit\"] = (event) => {\n void methods.handleSubmit(onSubmit)(event);\n };\n\n return (\n <FormProvider {...methods}>\n <form\n {...restProps}\n onSubmit={handleSubmit}\n >\n {children}\n </form>\n </FormProvider>\n );\n};\n\nexport { Form };\n"],"names":["Form","props","onSubmit","children","defaultValues","formControls","apiErrors","restProps","internalMethods","useForm","methods","useEffect","field","message","handleSubmit","event","jsx","FormProvider"],"mappings":"8KAuBMA,EAA+BC,GAAoB,CACvD,KAAM,CAAE,SAAAC,EAAU,SAAAC,EAAU,cAAAC,EAAe,aAAAC,EAAc,UAAAC,EAAW,GAAGC,GACrEN,EACIO,EAAkBC,EAAAA,QAAW,CAAE,cAAAL,EAAe,KAAM,SAAU,EAC9DM,EAAUL,GAAgBG,EAEhCG,EAAAA,UAAU,IAAM,CACTL,GAAW,QAEhBA,EAAU,QAAQ,CAAC,CAAE,MAAAM,EAAO,QAAAC,KAAc,CACxCH,EAAQ,SAASE,EAAkB,CAAE,QAAAC,CAAA,CAAS,CAChD,CAAC,CACH,EAAG,CAACP,EAAWI,CAAO,CAAC,EAEvB,MAAMI,EAA2DC,GAAU,CACpEL,EAAQ,aAAaR,CAAQ,EAAEa,CAAK,CAC3C,EAEA,OACEC,EAAAA,IAACC,EAAAA,aAAA,CAAc,GAAGP,EAChB,SAAAM,EAAAA,IAAC,OAAA,CACE,GAAGT,EACJ,SAAUO,EAET,SAAAX,CAAA,CAAA,EAEL,CAEJ"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect as f } from "react";
|
|
3
|
+
import { u as c, F as h } from "./index.esm-CFsbc_Iq.js";
|
|
4
|
+
const F = (n) => {
|
|
5
|
+
const { onSubmit: m, children: s, defaultValues: i, formControls: u, apiErrors: o, ...d } = n, l = c({ defaultValues: i, mode: "onBlur" }), r = u ?? l;
|
|
6
|
+
return f(() => {
|
|
7
|
+
o?.length && o.forEach(({ field: t, message: a }) => {
|
|
8
|
+
r.setError(t, { message: a });
|
|
9
|
+
});
|
|
10
|
+
}, [o, r]), /* @__PURE__ */ e(h, { ...r, children: /* @__PURE__ */ e(
|
|
11
|
+
"form",
|
|
12
|
+
{
|
|
13
|
+
...d,
|
|
14
|
+
onSubmit: (t) => {
|
|
15
|
+
r.handleSubmit(m)(t);
|
|
16
|
+
},
|
|
17
|
+
children: s
|
|
18
|
+
}
|
|
19
|
+
) });
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
F as Form
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=components-forms-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms-form.js","sources":["../src/components/forms/form.tsx"],"sourcesContent":["import type { ApiValidationError } from \"@/types/error\";\nimport { useEffect, type ComponentPropsWithRef, type PropsWithChildren } from \"react\";\nimport {\n FormProvider,\n useForm,\n type DefaultValues,\n type FieldValues,\n type Path,\n type UseFormReturn,\n} from \"react-hook-form\";\n\ntype FormProps<T extends FieldValues> = {\n apiErrors?: ApiValidationError[];\n onSubmit: (values: T) => void | Promise<void>;\n defaultValues?: DefaultValues<T>;\n formControls?: UseFormReturn<T>;\n};\ntype Props<T extends FieldValues> = Omit<\n ComponentPropsWithRef<\"form\">,\n keyof FormProps<T>\n> &\n PropsWithChildren<FormProps<T>>;\n\nconst Form = <T extends FieldValues>(props: Props<T>) => {\n const { onSubmit, children, defaultValues, formControls, apiErrors, ...restProps } =\n props;\n const internalMethods = useForm<T>({ defaultValues, mode: \"onBlur\" });\n const methods = formControls ?? internalMethods;\n\n useEffect(() => {\n if (!apiErrors?.length) return;\n\n apiErrors.forEach(({ field, message }) => {\n methods.setError(field as Path<T>, { message });\n });\n }, [apiErrors, methods]);\n\n const handleSubmit: ComponentPropsWithRef<\"form\">[\"onSubmit\"] = (event) => {\n void methods.handleSubmit(onSubmit)(event);\n };\n\n return (\n <FormProvider {...methods}>\n <form\n {...restProps}\n onSubmit={handleSubmit}\n >\n {children}\n </form>\n </FormProvider>\n );\n};\n\nexport { Form };\n"],"names":["Form","props","onSubmit","children","defaultValues","formControls","apiErrors","restProps","internalMethods","useForm","methods","useEffect","field","message","jsx","FormProvider","event"],"mappings":";;;AAuBA,MAAMA,IAAO,CAAwBC,MAAoB;AACvD,QAAM,EAAE,UAAAC,GAAU,UAAAC,GAAU,eAAAC,GAAe,cAAAC,GAAc,WAAAC,GAAW,GAAGC,MACrEN,GACIO,IAAkBC,EAAW,EAAE,eAAAL,GAAe,MAAM,UAAU,GAC9DM,IAAUL,KAAgBG;AAEhC,SAAAG,EAAU,MAAM;AACd,IAAKL,GAAW,UAEhBA,EAAU,QAAQ,CAAC,EAAE,OAAAM,GAAO,SAAAC,QAAc;AACxC,MAAAH,EAAQ,SAASE,GAAkB,EAAE,SAAAC,EAAA,CAAS;AAAA,IAChD,CAAC;AAAA,EACH,GAAG,CAACP,GAAWI,CAAO,CAAC,GAOrB,gBAAAI,EAACC,GAAA,EAAc,GAAGL,GAChB,UAAA,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGP;AAAA,MACJ,UAR0D,CAACS,MAAU;AACzE,QAAKN,EAAQ,aAAaR,CAAQ,EAAEc,CAAK;AAAA,MAC3C;AAAA,MAQO,UAAAb;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),h=require("./utils-get-validation-state.cjs"),r=require("./index.esm-ZdO9UZ3G.cjs"),C=require("./components-basic-checkbox-basic-checkbox.cjs"),k=({name:e,rules:i,...c})=>{const{formState:{errors:s,touchedFields:n,isSubmitted:d},control:u}=r.useFormContext();return o.jsx(r.Controller,{name:e,rules:i,control:u,render:({field:{onChange:a,onBlur:l,value:t=void 0}},...b)=>{const[x]=h.getValidationState(e,t,s,n,d);return o.jsx(C.BasicCheckbox,{...b,name:e,checked:t,...c,isValid:x,onCheckedChange:a,onBlur:l})}})};exports.FormCheckbox=k;
|
|
2
|
+
//# sourceMappingURL=components-forms-from-checkbox.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms-from-checkbox.cjs","sources":["../src/components/forms/from-checkbox.tsx"],"sourcesContent":["import { getValidationState } from \"@/utils/get-validation-state\";\nimport {\n Controller,\n useFormContext,\n type ControllerRenderProps,\n type RegisterOptions,\n} from \"react-hook-form\";\nimport { BasicCheckbox, type CheckboxProps } from \"../basic-checkbox\";\n\ntype Props = Omit<CheckboxProps, keyof ControllerRenderProps> & {\n name: string;\n rules?: RegisterOptions;\n};\n\nexport const FormCheckbox = ({ name, rules, ...rest }: Props) => {\n const {\n formState: { errors, touchedFields, isSubmitted },\n control,\n } = useFormContext();\n\n return (\n <Controller\n name={name}\n rules={rules}\n control={control}\n render={({ field: { onChange, onBlur, value = undefined } }, ...fields) => {\n const [isValid] = getValidationState(\n name,\n value,\n errors,\n touchedFields,\n isSubmitted,\n );\n\n return (\n <BasicCheckbox\n {...fields}\n name={name}\n checked={value}\n {...rest}\n isValid={isValid}\n onCheckedChange={onChange}\n onBlur={onBlur}\n />\n );\n }}\n />\n );\n};\n"],"names":["FormCheckbox","name","rules","rest","errors","touchedFields","isSubmitted","control","useFormContext","jsx","Controller","onChange","onBlur","value","fields","isValid","getValidationState","BasicCheckbox"],"mappings":"qQAcaA,EAAe,CAAC,CAAE,KAAAC,EAAM,MAAAC,EAAO,GAAGC,KAAkB,CAC/D,KAAM,CACJ,UAAW,CAAE,OAAAC,EAAQ,cAAAC,EAAe,YAAAC,CAAA,EACpC,QAAAC,CAAA,EACEC,iBAAA,EAEJ,OACEC,EAAAA,IAACC,EAAAA,WAAA,CACC,KAAAT,EACA,MAAAC,EACA,QAAAK,EACA,OAAQ,CAAC,CAAE,MAAO,CAAE,SAAAI,EAAU,OAAAC,EAAQ,MAAAC,EAAQ,MAAA,MAAkBC,IAAW,CACzE,KAAM,CAACC,CAAO,EAAIC,EAAAA,mBAChBf,EACAY,EACAT,EACAC,EACAC,CAAA,EAGF,OACEG,EAAAA,IAACQ,EAAAA,cAAA,CACE,GAAGH,EACJ,KAAAb,EACA,QAASY,EACR,GAAGV,EACJ,QAAAY,EACA,gBAAiBJ,EACjB,OAAAC,CAAA,CAAA,CAGN,CAAA,CAAA,CAGN"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { getValidationState as h } from "./utils-get-validation-state.js";
|
|
3
|
+
import { a as l, C as p } from "./index.esm-CFsbc_Iq.js";
|
|
4
|
+
import { BasicCheckbox as x } from "./components-basic-checkbox-basic-checkbox.js";
|
|
5
|
+
const S = ({ name: o, rules: e, ...i }) => {
|
|
6
|
+
const {
|
|
7
|
+
formState: { errors: s, touchedFields: c, isSubmitted: d },
|
|
8
|
+
control: m
|
|
9
|
+
} = l();
|
|
10
|
+
return /* @__PURE__ */ t(
|
|
11
|
+
p,
|
|
12
|
+
{
|
|
13
|
+
name: o,
|
|
14
|
+
rules: e,
|
|
15
|
+
control: m,
|
|
16
|
+
render: ({ field: { onChange: n, onBlur: a, value: r = void 0 } }, ...C) => {
|
|
17
|
+
const [f] = h(
|
|
18
|
+
o,
|
|
19
|
+
r,
|
|
20
|
+
s,
|
|
21
|
+
c,
|
|
22
|
+
d
|
|
23
|
+
);
|
|
24
|
+
return /* @__PURE__ */ t(
|
|
25
|
+
x,
|
|
26
|
+
{
|
|
27
|
+
...C,
|
|
28
|
+
name: o,
|
|
29
|
+
checked: r,
|
|
30
|
+
...i,
|
|
31
|
+
isValid: f,
|
|
32
|
+
onCheckedChange: n,
|
|
33
|
+
onBlur: a
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
export {
|
|
41
|
+
S as FormCheckbox
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=components-forms-from-checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms-from-checkbox.js","sources":["../src/components/forms/from-checkbox.tsx"],"sourcesContent":["import { getValidationState } from \"@/utils/get-validation-state\";\nimport {\n Controller,\n useFormContext,\n type ControllerRenderProps,\n type RegisterOptions,\n} from \"react-hook-form\";\nimport { BasicCheckbox, type CheckboxProps } from \"../basic-checkbox\";\n\ntype Props = Omit<CheckboxProps, keyof ControllerRenderProps> & {\n name: string;\n rules?: RegisterOptions;\n};\n\nexport const FormCheckbox = ({ name, rules, ...rest }: Props) => {\n const {\n formState: { errors, touchedFields, isSubmitted },\n control,\n } = useFormContext();\n\n return (\n <Controller\n name={name}\n rules={rules}\n control={control}\n render={({ field: { onChange, onBlur, value = undefined } }, ...fields) => {\n const [isValid] = getValidationState(\n name,\n value,\n errors,\n touchedFields,\n isSubmitted,\n );\n\n return (\n <BasicCheckbox\n {...fields}\n name={name}\n checked={value}\n {...rest}\n isValid={isValid}\n onCheckedChange={onChange}\n onBlur={onBlur}\n />\n );\n }}\n />\n );\n};\n"],"names":["FormCheckbox","name","rules","rest","errors","touchedFields","isSubmitted","control","useFormContext","jsx","Controller","onChange","onBlur","value","fields","isValid","getValidationState","BasicCheckbox"],"mappings":";;;;AAcO,MAAMA,IAAe,CAAC,EAAE,MAAAC,GAAM,OAAAC,GAAO,GAAGC,QAAkB;AAC/D,QAAM;AAAA,IACJ,WAAW,EAAE,QAAAC,GAAQ,eAAAC,GAAe,aAAAC,EAAA;AAAA,IACpC,SAAAC;AAAA,EAAA,IACEC,EAAA;AAEJ,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAT;AAAA,MACA,OAAAC;AAAA,MACA,SAAAK;AAAA,MACA,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAAI,GAAU,QAAAC,GAAQ,OAAAC,IAAQ,OAAA,QAAkBC,MAAW;AACzE,cAAM,CAACC,CAAO,IAAIC;AAAA,UAChBf;AAAA,UACAY;AAAA,UACAT;AAAA,UACAC;AAAA,UACAC;AAAA,QAAA;AAGF,eACE,gBAAAG;AAAA,UAACQ;AAAA,UAAA;AAAA,YACE,GAAGH;AAAA,YACJ,MAAAb;AAAA,YACA,SAASY;AAAA,YACR,GAAGV;AAAA,YACJ,SAAAY;AAAA,YACA,iBAAiBJ;AAAA,YACjB,QAAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MAGN;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./components-forms-form.cjs"),r=require("./components-forms-form-avatar-uploader.cjs"),e=require("./components-forms-form-contact-input.cjs"),m=require("./components-forms-form-files-uploader.cjs"),t=require("./components-forms-form-input.cjs"),n=require("./components-forms-form-input-password.cjs"),s=require("./components-forms-form-Input-phone.cjs"),c=require("./components-forms-form-select.cjs"),p=require("./components-forms-form-select-calendar.cjs"),a=require("./components-forms-form-textarea.cjs"),u=require("./components-forms-form-toggle-group.cjs"),F=require("./components-forms-from-checkbox.cjs");exports.Form=o.Form;exports.FormAvatar=r.FormAvatar;exports.FormContactInput=e.FormContactInput;exports.FormFilesUploader=m.FormFilesUploader;exports.FormInput=t.FormInput;exports.FormInputPassword=n.FormInputPassword;exports.FormInputPhone=s.FormInputPhone;exports.FormSelect=c.FormSelect;exports.FormSelectCalendar=p.FormSelectCalendar;exports.FormTextarea=a.FormTextarea;exports.FormToggleGroup=u.FormToggleGroup;exports.FormCheckbox=F.FormCheckbox;
|
|
2
|
+
//# sourceMappingURL=components-forms.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Form as e } from "./components-forms-form.js";
|
|
2
|
+
import { FormAvatar as t } from "./components-forms-form-avatar-uploader.js";
|
|
3
|
+
import { FormContactInput as x } from "./components-forms-form-contact-input.js";
|
|
4
|
+
import { FormFilesUploader as f } from "./components-forms-form-files-uploader.js";
|
|
5
|
+
import { FormInput as n } from "./components-forms-form-input.js";
|
|
6
|
+
import { FormInputPassword as u } from "./components-forms-form-input-password.js";
|
|
7
|
+
import { FormInputPhone as I } from "./components-forms-form-Input-phone.js";
|
|
8
|
+
import { FormSelect as s } from "./components-forms-form-select.js";
|
|
9
|
+
import { FormSelectCalendar as g } from "./components-forms-form-select-calendar.js";
|
|
10
|
+
import { FormTextarea as P } from "./components-forms-form-textarea.js";
|
|
11
|
+
import { FormToggleGroup as T } from "./components-forms-form-toggle-group.js";
|
|
12
|
+
import { FormCheckbox as i } from "./components-forms-from-checkbox.js";
|
|
13
|
+
export {
|
|
14
|
+
e as Form,
|
|
15
|
+
t as FormAvatar,
|
|
16
|
+
i as FormCheckbox,
|
|
17
|
+
x as FormContactInput,
|
|
18
|
+
f as FormFilesUploader,
|
|
19
|
+
n as FormInput,
|
|
20
|
+
u as FormInputPassword,
|
|
21
|
+
I as FormInputPhone,
|
|
22
|
+
s as FormSelect,
|
|
23
|
+
g as FormSelectCalendar,
|
|
24
|
+
P as FormTextarea,
|
|
25
|
+
T as FormToggleGroup
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=components-forms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-forms.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components-input-contact-input-contact.cjs","sources":["../src/constants/contact-input.ts","../src/components/input-contact/input-contact.tsx"],"sourcesContent":["import type { TOption } from \"@/components/input-contact/input-contact\";\n\nexport const OPTIONS: TOption[] = [\n {\n label: \"Мобильный\",\n icon: \"phone\",\n },\n {\n label: \"Telegram\",\n icon: \"telegram-logo\",\n },\n {\n label: \"WhatsApp\",\n icon: \"whats-app-logo-filled\",\n },\n {\n label: \"Max\",\n icon: \"max-logo\",\n },\n {\n label: \"E-mail\",\n icon: \"envelope-simple\",\n },\n];\n","import { OPTIONS } from \"@/constants/contact-input\";\nimport { CaretDown } from \"@/components/icons/CaretDown\";\nimport { CaretUp } from \"@/components/icons/CaretUp\";\nimport { EnvelopeSimple } from \"@/components/icons/EnvelopeSimple\";\nimport { MaxLogo } from \"@/components/icons/MaxLogo\";\nimport { Phone } from \"@/components/icons/Phone\";\nimport { StrokeIcon, type StrokeIconComponent } from \"@/components/icons/stroke-icon\";\nimport { TelegramLogo } from \"@/components/icons/TelegramLogo\";\nimport { WhatsAppLogoFilled } from \"@/components/icons/WhatsAppLogoFilled\";\nimport {\n Button,\n InputField,\n InputPhone,\n cn,\n usePopupControls,\n type InputPhoneProps,\n} from \"@/index\";\nimport { useEffect, useRef, useState } from \"react\";\n\nexport type TOption = {\n label: string;\n icon: TypesChange;\n};\n\ntype TypesChange =\n | \"phone\"\n | \"telegram-logo\"\n | \"whats-app-logo-filled\"\n | \"max-logo\"\n | \"envelope-simple\";\n\nconst contactIcons: Record<TypesChange, StrokeIconComponent> = {\n phone: Phone,\n \"telegram-logo\": TelegramLogo,\n \"whats-app-logo-filled\": WhatsAppLogoFilled,\n \"max-logo\": MaxLogo,\n \"envelope-simple\": EnvelopeSimple,\n};\n\ntype Props = {\n isValid?: boolean;\n label?: string;\n description?: string;\n classes?: {\n fieldset?: string;\n fieldgroup?: string;\n field?: string;\n container?: string;\n };\n value?: string;\n name?: string;\n onTypeChange?: (type: TypesChange) => void;\n inputProps: React.ComponentPropsWithRef<\"input\">;\n inputPhoneProps: InputPhoneProps;\n};\n\n// TODO: заменить цвета\nconst iconStyles = (icon: TypesChange) => {\n switch (icon) {\n case \"max-logo\":\n return {\n bgColor: \"bg-[linear-gradient(135deg,#9933DD_0%,#2831B9_50%,#44CCFF_100%)]\",\n };\n\n case \"telegram-logo\":\n return {\n bgColor: \"bg-[#289AD2]\",\n };\n\n case \"whats-app-logo-filled\":\n return {\n bgColor: \"bg-[#00C202]\",\n textColor: \"text-primary-inverse-text\",\n };\n\n default:\n return {};\n }\n};\n\nconst getContactIconClasses = (icon: TypesChange) => ({\n wrapper: cn(\n `flex h-5.5 w-5.5 shrink-0 items-center justify-center rounded-sm\n ${iconStyles(icon).bgColor ?? \"bg-primary-inverse-hover-bg\"}\n ${iconStyles(icon).textColor ?? \"text-primary-inverse-text\"}`,\n ),\n icon: \"size-5 shrink-0\",\n});\n\nexport const InputContact = (props: Props) => {\n const { inputProps, inputPhoneProps, onTypeChange, ...rest } = props;\n\n const [type, setType] = useState<TypesChange>(\"phone\");\n const { isOpened, openPopup, closePopup } = usePopupControls();\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target as Node)) {\n closePopup();\n }\n };\n\n if (isOpened) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpened, closePopup]);\n\n const getPlaceholder = (type: TypesChange): string => {\n switch (type) {\n case \"phone\":\n return \"+7 (999) 999-99-99\";\n case \"telegram-logo\":\n return \"@username\";\n case \"whats-app-logo-filled\":\n return \"+7 (999) 999-99-99\";\n case \"max-logo\":\n return \"ID пользователя Max\";\n case \"envelope-simple\":\n return \"example@mail.com\";\n default:\n return \"Введите значение\";\n }\n };\n\n const handleTypeChange = (type: TypesChange) => {\n return () => {\n setType(type);\n onTypeChange?.(type);\n closePopup();\n };\n };\n\n const SelectedIcon = contactIcons[type];\n const ToggleIcon = isOpened ? CaretUp : CaretDown;\n\n return (\n <div className={cn(\"relative\", props.classes?.container)}>\n {[\"telegram-logo\", \"max-logo\", \"envelope-simple\"].includes(type) ? (\n <InputField\n {...inputProps}\n {...rest}\n date={[\n {\n id: \"0\",\n position: \"inline-start\",\n component: (\n <StrokeIcon\n icon={SelectedIcon}\n size=\"medium\"\n classes={getContactIconClasses(type)}\n />\n ),\n },\n {\n id: \"1\",\n position: \"inline-end\",\n component: (\n <StrokeIcon\n icon={ToggleIcon}\n size=\"medium\"\n className=\"cursor-pointer\"\n onClick={openPopup}\n />\n ),\n },\n ]}\n placeholder={getPlaceholder(type)}\n />\n ) : (\n <InputPhone\n {...inputPhoneProps}\n {...rest}\n date={[\n {\n id: \"0\",\n position: \"inline-start\",\n component: (\n <StrokeIcon\n icon={SelectedIcon}\n size=\"medium\"\n classes={getContactIconClasses(type)}\n />\n ),\n },\n {\n id: \"1\",\n position: \"inline-end\",\n component: (\n <StrokeIcon\n icon={ToggleIcon}\n size=\"medium\"\n className=\"cursor-pointer\"\n onClick={openPopup}\n />\n ),\n },\n ]}\n placeholder={getPlaceholder(type)}\n />\n )}\n\n {isOpened && (\n <div\n className=\"border-inp-hover-border bg-primary-bg absolute z-100 my-2 flex w-full\n flex-col rounded-xl border\"\n ref={wrapperRef}\n >\n {OPTIONS.map(({ label, icon }) => {\n const OptionIcon = contactIcons[icon];\n\n return (\n <Button\n key={label}\n variant=\"ghost\"\n className=\"flex w-full justify-start\"\n type=\"button\"\n onClick={handleTypeChange(icon)}\n >\n <StrokeIcon\n icon={OptionIcon}\n size=\"medium\"\n className=\"text-primary-inverse-text\"\n classes={getContactIconClasses(icon)}\n />\n\n {label}\n </Button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nexport type { Props as InputContactProps, TypesChange };\n"],"names":["OPTIONS","contactIcons","Phone","TelegramLogo","WhatsAppLogoFilled","MaxLogo","EnvelopeSimple","iconStyles","icon","getContactIconClasses","cn","InputContact","props","inputProps","inputPhoneProps","onTypeChange","rest","type","setType","useState","isOpened","openPopup","closePopup","usePopupControls","wrapperRef","useRef","useEffect","handleClickOutside","event","getPlaceholder","handleTypeChange","SelectedIcon","ToggleIcon","CaretUp","CaretDown","jsxs","jsx","InputField","StrokeIcon","InputPhone","label","OptionIcon","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components-input-contact-input-contact.cjs","sources":["../src/constants/contact-input.ts","../src/components/input-contact/input-contact.tsx"],"sourcesContent":["import type { TOption } from \"@/components/input-contact/input-contact\";\n\nexport const OPTIONS: TOption[] = [\n {\n label: \"Мобильный\",\n icon: \"phone\",\n },\n {\n label: \"Telegram\",\n icon: \"telegram-logo\",\n },\n {\n label: \"WhatsApp\",\n icon: \"whats-app-logo-filled\",\n },\n {\n label: \"Max\",\n icon: \"max-logo\",\n },\n {\n label: \"E-mail\",\n icon: \"envelope-simple\",\n },\n];\n","import { CaretDown } from \"@/components/icons/CaretDown\";\nimport { CaretUp } from \"@/components/icons/CaretUp\";\nimport { EnvelopeSimple } from \"@/components/icons/EnvelopeSimple\";\nimport { MaxLogo } from \"@/components/icons/MaxLogo\";\nimport { Phone } from \"@/components/icons/Phone\";\nimport { StrokeIcon, type StrokeIconComponent } from \"@/components/icons/stroke-icon\";\nimport { TelegramLogo } from \"@/components/icons/TelegramLogo\";\nimport { WhatsAppLogoFilled } from \"@/components/icons/WhatsAppLogoFilled\";\nimport { OPTIONS } from \"@/constants/contact-input\";\nimport {\n Button,\n InputField,\n InputPhone,\n cn,\n usePopupControls,\n type InputPhoneProps,\n} from \"@/index\";\nimport { useEffect, useRef, useState } from \"react\";\n\nexport type TOption = {\n label: string;\n icon: TypesChange;\n};\n\ntype TypesChange =\n | \"phone\"\n | \"telegram-logo\"\n | \"whats-app-logo-filled\"\n | \"max-logo\"\n | \"envelope-simple\";\n\nconst contactIcons: Record<TypesChange, StrokeIconComponent> = {\n phone: Phone,\n \"telegram-logo\": TelegramLogo,\n \"whats-app-logo-filled\": WhatsAppLogoFilled,\n \"max-logo\": MaxLogo,\n \"envelope-simple\": EnvelopeSimple,\n};\n\ntype Props = {\n isValid?: boolean;\n label?: string;\n description?: string;\n classes?: {\n fieldset?: string;\n fieldgroup?: string;\n field?: string;\n container?: string;\n };\n value?: string;\n name?: string;\n onTypeChange?: (type: TypesChange) => void;\n inputProps: React.ComponentPropsWithRef<\"input\">;\n inputPhoneProps: InputPhoneProps;\n disabled?: boolean;\n};\n\n// TODO: заменить цвета\nconst iconStyles = (icon: TypesChange) => {\n switch (icon) {\n case \"max-logo\":\n return {\n bgColor: \"bg-[linear-gradient(135deg,#9933DD_0%,#2831B9_50%,#44CCFF_100%)]\",\n };\n\n case \"telegram-logo\":\n return {\n bgColor: \"bg-[#289AD2]\",\n };\n\n case \"whats-app-logo-filled\":\n return {\n bgColor: \"bg-[#00C202]\",\n textColor: \"text-primary-inverse-text\",\n };\n\n default:\n return {};\n }\n};\n\nconst getContactIconClasses = (icon: TypesChange) => ({\n wrapper: cn(\n `flex h-5.5 w-5.5 shrink-0 items-center justify-center rounded-sm\n ${iconStyles(icon).bgColor ?? \"bg-primary-inverse-hover-bg\"}\n ${iconStyles(icon).textColor ?? \"text-primary-inverse-text\"}`,\n ),\n icon: \"size-5 shrink-0\",\n});\n\nexport const InputContact = (props: Props) => {\n const { inputProps, inputPhoneProps, onTypeChange, ...rest } = props;\n\n const [type, setType] = useState<TypesChange>(\"phone\");\n const { isOpened, openPopup, closePopup } = usePopupControls();\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target as Node)) {\n closePopup();\n }\n };\n\n if (isOpened) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpened, closePopup]);\n\n const getPlaceholder = (type: TypesChange): string => {\n switch (type) {\n case \"phone\":\n return \"+7 (999) 999-99-99\";\n case \"telegram-logo\":\n return \"@username\";\n case \"whats-app-logo-filled\":\n return \"+7 (999) 999-99-99\";\n case \"max-logo\":\n return \"ID пользователя Max\";\n case \"envelope-simple\":\n return \"example@mail.com\";\n default:\n return \"Введите значение\";\n }\n };\n\n const handleTypeChange = (type: TypesChange) => {\n return () => {\n setType(type);\n onTypeChange?.(type);\n closePopup();\n };\n };\n\n const SelectedIcon = contactIcons[type];\n const ToggleIcon = isOpened ? CaretUp : CaretDown;\n\n return (\n <div className={cn(\"relative\", props.classes?.container)}>\n {[\"telegram-logo\", \"max-logo\", \"envelope-simple\"].includes(type) ? (\n <InputField\n {...inputProps}\n {...rest}\n date={[\n {\n id: \"0\",\n position: \"inline-start\",\n component: (\n <StrokeIcon\n icon={SelectedIcon}\n size=\"medium\"\n classes={getContactIconClasses(type)}\n />\n ),\n },\n {\n id: \"1\",\n position: \"inline-end\",\n component: (\n <StrokeIcon\n icon={ToggleIcon}\n size=\"medium\"\n className=\"cursor-pointer\"\n onClick={openPopup}\n />\n ),\n },\n ]}\n placeholder={getPlaceholder(type)}\n />\n ) : (\n <InputPhone\n {...inputPhoneProps}\n {...rest}\n date={[\n {\n id: \"0\",\n position: \"inline-start\",\n component: (\n <StrokeIcon\n icon={SelectedIcon}\n size=\"medium\"\n classes={getContactIconClasses(type)}\n />\n ),\n },\n {\n id: \"1\",\n position: \"inline-end\",\n component: (\n <StrokeIcon\n icon={ToggleIcon}\n size=\"medium\"\n className=\"cursor-pointer\"\n onClick={openPopup}\n />\n ),\n },\n ]}\n placeholder={getPlaceholder(type)}\n />\n )}\n\n {isOpened && (\n <div\n className=\"border-inp-hover-border bg-primary-bg absolute z-100 my-2 flex w-full\n flex-col rounded-xl border\"\n ref={wrapperRef}\n >\n {OPTIONS.map(({ label, icon }) => {\n const OptionIcon = contactIcons[icon];\n\n return (\n <Button\n key={label}\n variant=\"ghost\"\n className=\"flex w-full justify-start\"\n type=\"button\"\n onClick={handleTypeChange(icon)}\n >\n <StrokeIcon\n icon={OptionIcon}\n size=\"medium\"\n className=\"text-primary-inverse-text\"\n classes={getContactIconClasses(icon)}\n />\n\n {label}\n </Button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nexport type { Props as InputContactProps, TypesChange };\n"],"names":["OPTIONS","contactIcons","Phone","TelegramLogo","WhatsAppLogoFilled","MaxLogo","EnvelopeSimple","iconStyles","icon","getContactIconClasses","cn","InputContact","props","inputProps","inputPhoneProps","onTypeChange","rest","type","setType","useState","isOpened","openPopup","closePopup","usePopupControls","wrapperRef","useRef","useEffect","handleClickOutside","event","getPlaceholder","handleTypeChange","SelectedIcon","ToggleIcon","CaretUp","CaretDown","jsxs","jsx","InputField","StrokeIcon","InputPhone","label","OptionIcon","Button"],"mappings":"2wGAEO,MAAMA,EAAqB,CAChC,CACE,MAAO,YACP,KAAM,OAAA,EAER,CACE,MAAO,WACP,KAAM,eAAA,EAER,CACE,MAAO,WACP,KAAM,uBAAA,EAER,CACE,MAAO,MACP,KAAM,UAAA,EAER,CACE,MAAO,SACP,KAAM,iBAAA,CAEV,ECQMC,EAAyD,CAC7D,MAAOC,EAAAA,MACP,gBAAiBC,EAAAA,aACjB,wBAAyBC,EAAAA,mBACzB,WAAYC,EAAAA,QACZ,kBAAmBC,EAAAA,cACrB,EAqBMC,EAAcC,GAAsB,CACxC,OAAQA,EAAA,CACN,IAAK,WACH,MAAO,CACL,QAAS,kEAAA,EAGb,IAAK,gBACH,MAAO,CACL,QAAS,cAAA,EAGb,IAAK,wBACH,MAAO,CACL,QAAS,eACT,UAAW,2BAAA,EAGf,QACE,MAAO,CAAA,CAAC,CAEd,EAEMC,EAAyBD,IAAuB,CACpD,QAASE,EAAAA,GACP;AAAA,MACEH,EAAWC,CAAI,EAAE,SAAW,6BAA6B;AAAA,MACzDD,EAAWC,CAAI,EAAE,WAAa,2BAA2B,EAAA,EAE7D,KAAM,iBACR,GAEaG,EAAgBC,GAAiB,CAC5C,KAAM,CAAE,WAAAC,EAAY,gBAAAC,EAAiB,aAAAC,EAAc,GAAGC,GAASJ,EAEzD,CAACK,EAAMC,CAAO,EAAIC,EAAAA,SAAsB,OAAO,EAC/C,CAAE,SAAAC,EAAU,UAAAC,EAAW,WAAAC,CAAA,EAAeC,EAAAA,iBAAA,EACtCC,EAAaC,EAAAA,OAAuB,IAAI,EAE9CC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAsBC,GAAsB,CAC5CJ,EAAW,SAAW,CAACA,EAAW,QAAQ,SAASI,EAAM,MAAc,GACzEN,EAAA,CAEJ,EAEA,OAAIF,GACF,SAAS,iBAAiB,YAAaO,CAAkB,EAGpD,IAAM,CACX,SAAS,oBAAoB,YAAaA,CAAkB,CAC9D,CACF,EAAG,CAACP,EAAUE,CAAU,CAAC,EAEzB,MAAMO,EAAkBZ,GAA8B,CACpD,OAAQA,EAAAA,CACN,IAAK,QACH,MAAO,qBACT,IAAK,gBACH,MAAO,YACT,IAAK,wBACH,MAAO,qBACT,IAAK,WACH,MAAO,sBACT,IAAK,kBACH,MAAO,mBACT,QACE,MAAO,kBAAA,CAEb,EAEMa,EAAoBb,GACjB,IAAM,CACXC,EAAQD,CAAI,EACZF,IAAeE,CAAI,EACnBK,EAAA,CACF,EAGIS,EAAe9B,EAAagB,CAAI,EAChCe,EAAaZ,EAAWa,EAAAA,QAAUC,EAAAA,UAExC,OACEC,OAAC,OAAI,UAAWzB,EAAAA,GAAG,WAAYE,EAAM,SAAS,SAAS,EACpD,SAAA,CAAA,CAAC,gBAAiB,WAAY,iBAAiB,EAAE,SAASK,CAAI,EAC7DmB,EAAAA,IAACC,EAAAA,WAAA,CACE,GAAGxB,EACH,GAAGG,EACJ,KAAM,CACJ,CACE,GAAI,IACJ,SAAU,eACV,UACEoB,EAAAA,IAACE,EAAAA,WAAA,CACC,KAAMP,EACN,KAAK,SACL,QAAStB,EAAsBQ,CAAI,CAAA,CAAA,CACrC,EAGJ,CACE,GAAI,IACJ,SAAU,aACV,UACEmB,EAAAA,IAACE,EAAAA,WAAA,CACC,KAAMN,EACN,KAAK,SACL,UAAU,iBACV,QAASX,CAAA,CAAA,CACX,CAEJ,EAEF,YAAaQ,EAAeZ,CAAI,CAAA,CAAA,EAGlCmB,EAAAA,IAACG,EAAAA,WAAA,CACE,GAAGzB,EACH,GAAGE,EACJ,KAAM,CACJ,CACE,GAAI,IACJ,SAAU,eACV,UACEoB,EAAAA,IAACE,EAAAA,WAAA,CACC,KAAMP,EACN,KAAK,SACL,QAAStB,EAAsBQ,CAAI,CAAA,CAAA,CACrC,EAGJ,CACE,GAAI,IACJ,SAAU,aACV,UACEmB,EAAAA,IAACE,EAAAA,WAAA,CACC,KAAMN,EACN,KAAK,SACL,UAAU,iBACV,QAASX,CAAA,CAAA,CACX,CAEJ,EAEF,YAAaQ,EAAeZ,CAAI,CAAA,CAAA,EAInCG,GACCgB,EAAAA,IAAC,MAAA,CACC,UAAU;AAAA,wCAEV,IAAKZ,EAEJ,WAAQ,IAAI,CAAC,CAAE,MAAAgB,EAAO,KAAAhC,KAAW,CAChC,MAAMiC,EAAaxC,EAAaO,CAAI,EAEpC,OACE2B,EAAAA,KAACO,EAAAA,OAAA,CAEC,QAAQ,QACR,UAAU,4BACV,KAAK,SACL,QAASZ,EAAiBtB,CAAI,EAE9B,SAAA,CAAA4B,EAAAA,IAACE,EAAAA,WAAA,CACC,KAAMG,EACN,KAAK,SACL,UAAU,4BACV,QAAShC,EAAsBD,CAAI,CAAA,CAAA,EAGpCgC,CAAA,CAAA,EAbIA,CAAA,CAgBX,CAAC,CAAA,CAAA,CACH,EAEJ,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components-input-contact-input-contact.js","sources":["../src/constants/contact-input.ts","../src/components/input-contact/input-contact.tsx"],"sourcesContent":["import type { TOption } from \"@/components/input-contact/input-contact\";\n\nexport const OPTIONS: TOption[] = [\n {\n label: \"Мобильный\",\n icon: \"phone\",\n },\n {\n label: \"Telegram\",\n icon: \"telegram-logo\",\n },\n {\n label: \"WhatsApp\",\n icon: \"whats-app-logo-filled\",\n },\n {\n label: \"Max\",\n icon: \"max-logo\",\n },\n {\n label: \"E-mail\",\n icon: \"envelope-simple\",\n },\n];\n","import { OPTIONS } from \"@/constants/contact-input\";\nimport { CaretDown } from \"@/components/icons/CaretDown\";\nimport { CaretUp } from \"@/components/icons/CaretUp\";\nimport { EnvelopeSimple } from \"@/components/icons/EnvelopeSimple\";\nimport { MaxLogo } from \"@/components/icons/MaxLogo\";\nimport { Phone } from \"@/components/icons/Phone\";\nimport { StrokeIcon, type StrokeIconComponent } from \"@/components/icons/stroke-icon\";\nimport { TelegramLogo } from \"@/components/icons/TelegramLogo\";\nimport { WhatsAppLogoFilled } from \"@/components/icons/WhatsAppLogoFilled\";\nimport {\n Button,\n InputField,\n InputPhone,\n cn,\n usePopupControls,\n type InputPhoneProps,\n} from \"@/index\";\nimport { useEffect, useRef, useState } from \"react\";\n\nexport type TOption = {\n label: string;\n icon: TypesChange;\n};\n\ntype TypesChange =\n | \"phone\"\n | \"telegram-logo\"\n | \"whats-app-logo-filled\"\n | \"max-logo\"\n | \"envelope-simple\";\n\nconst contactIcons: Record<TypesChange, StrokeIconComponent> = {\n phone: Phone,\n \"telegram-logo\": TelegramLogo,\n \"whats-app-logo-filled\": WhatsAppLogoFilled,\n \"max-logo\": MaxLogo,\n \"envelope-simple\": EnvelopeSimple,\n};\n\ntype Props = {\n isValid?: boolean;\n label?: string;\n description?: string;\n classes?: {\n fieldset?: string;\n fieldgroup?: string;\n field?: string;\n container?: string;\n };\n value?: string;\n name?: string;\n onTypeChange?: (type: TypesChange) => void;\n inputProps: React.ComponentPropsWithRef<\"input\">;\n inputPhoneProps: InputPhoneProps;\n};\n\n// TODO: заменить цвета\nconst iconStyles = (icon: TypesChange) => {\n switch (icon) {\n case \"max-logo\":\n return {\n bgColor: \"bg-[linear-gradient(135deg,#9933DD_0%,#2831B9_50%,#44CCFF_100%)]\",\n };\n\n case \"telegram-logo\":\n return {\n bgColor: \"bg-[#289AD2]\",\n };\n\n case \"whats-app-logo-filled\":\n return {\n bgColor: \"bg-[#00C202]\",\n textColor: \"text-primary-inverse-text\",\n };\n\n default:\n return {};\n }\n};\n\nconst getContactIconClasses = (icon: TypesChange) => ({\n wrapper: cn(\n `flex h-5.5 w-5.5 shrink-0 items-center justify-center rounded-sm\n ${iconStyles(icon).bgColor ?? \"bg-primary-inverse-hover-bg\"}\n ${iconStyles(icon).textColor ?? \"text-primary-inverse-text\"}`,\n ),\n icon: \"size-5 shrink-0\",\n});\n\nexport const InputContact = (props: Props) => {\n const { inputProps, inputPhoneProps, onTypeChange, ...rest } = props;\n\n const [type, setType] = useState<TypesChange>(\"phone\");\n const { isOpened, openPopup, closePopup } = usePopupControls();\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target as Node)) {\n closePopup();\n }\n };\n\n if (isOpened) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpened, closePopup]);\n\n const getPlaceholder = (type: TypesChange): string => {\n switch (type) {\n case \"phone\":\n return \"+7 (999) 999-99-99\";\n case \"telegram-logo\":\n return \"@username\";\n case \"whats-app-logo-filled\":\n return \"+7 (999) 999-99-99\";\n case \"max-logo\":\n return \"ID пользователя Max\";\n case \"envelope-simple\":\n return \"example@mail.com\";\n default:\n return \"Введите значение\";\n }\n };\n\n const handleTypeChange = (type: TypesChange) => {\n return () => {\n setType(type);\n onTypeChange?.(type);\n closePopup();\n };\n };\n\n const SelectedIcon = contactIcons[type];\n const ToggleIcon = isOpened ? CaretUp : CaretDown;\n\n return (\n <div className={cn(\"relative\", props.classes?.container)}>\n {[\"telegram-logo\", \"max-logo\", \"envelope-simple\"].includes(type) ? (\n <InputField\n {...inputProps}\n {...rest}\n date={[\n {\n id: \"0\",\n position: \"inline-start\",\n component: (\n <StrokeIcon\n icon={SelectedIcon}\n size=\"medium\"\n classes={getContactIconClasses(type)}\n />\n ),\n },\n {\n id: \"1\",\n position: \"inline-end\",\n component: (\n <StrokeIcon\n icon={ToggleIcon}\n size=\"medium\"\n className=\"cursor-pointer\"\n onClick={openPopup}\n />\n ),\n },\n ]}\n placeholder={getPlaceholder(type)}\n />\n ) : (\n <InputPhone\n {...inputPhoneProps}\n {...rest}\n date={[\n {\n id: \"0\",\n position: \"inline-start\",\n component: (\n <StrokeIcon\n icon={SelectedIcon}\n size=\"medium\"\n classes={getContactIconClasses(type)}\n />\n ),\n },\n {\n id: \"1\",\n position: \"inline-end\",\n component: (\n <StrokeIcon\n icon={ToggleIcon}\n size=\"medium\"\n className=\"cursor-pointer\"\n onClick={openPopup}\n />\n ),\n },\n ]}\n placeholder={getPlaceholder(type)}\n />\n )}\n\n {isOpened && (\n <div\n className=\"border-inp-hover-border bg-primary-bg absolute z-100 my-2 flex w-full\n flex-col rounded-xl border\"\n ref={wrapperRef}\n >\n {OPTIONS.map(({ label, icon }) => {\n const OptionIcon = contactIcons[icon];\n\n return (\n <Button\n key={label}\n variant=\"ghost\"\n className=\"flex w-full justify-start\"\n type=\"button\"\n onClick={handleTypeChange(icon)}\n >\n <StrokeIcon\n icon={OptionIcon}\n size=\"medium\"\n className=\"text-primary-inverse-text\"\n classes={getContactIconClasses(icon)}\n />\n\n {label}\n </Button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nexport type { Props as InputContactProps, TypesChange };\n"],"names":["OPTIONS","contactIcons","Phone","TelegramLogo","WhatsAppLogoFilled","MaxLogo","EnvelopeSimple","iconStyles","icon","getContactIconClasses","cn","InputContact","props","inputProps","inputPhoneProps","onTypeChange","rest","type","setType","useState","isOpened","openPopup","closePopup","usePopupControls","wrapperRef","useRef","useEffect","handleClickOutside","event","getPlaceholder","handleTypeChange","SelectedIcon","ToggleIcon","CaretUp","CaretDown","jsxs","jsx","InputField","StrokeIcon","InputPhone","label","OptionIcon","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components-input-contact-input-contact.js","sources":["../src/constants/contact-input.ts","../src/components/input-contact/input-contact.tsx"],"sourcesContent":["import type { TOption } from \"@/components/input-contact/input-contact\";\n\nexport const OPTIONS: TOption[] = [\n {\n label: \"Мобильный\",\n icon: \"phone\",\n },\n {\n label: \"Telegram\",\n icon: \"telegram-logo\",\n },\n {\n label: \"WhatsApp\",\n icon: \"whats-app-logo-filled\",\n },\n {\n label: \"Max\",\n icon: \"max-logo\",\n },\n {\n label: \"E-mail\",\n icon: \"envelope-simple\",\n },\n];\n","import { CaretDown } from \"@/components/icons/CaretDown\";\nimport { CaretUp } from \"@/components/icons/CaretUp\";\nimport { EnvelopeSimple } from \"@/components/icons/EnvelopeSimple\";\nimport { MaxLogo } from \"@/components/icons/MaxLogo\";\nimport { Phone } from \"@/components/icons/Phone\";\nimport { StrokeIcon, type StrokeIconComponent } from \"@/components/icons/stroke-icon\";\nimport { TelegramLogo } from \"@/components/icons/TelegramLogo\";\nimport { WhatsAppLogoFilled } from \"@/components/icons/WhatsAppLogoFilled\";\nimport { OPTIONS } from \"@/constants/contact-input\";\nimport {\n Button,\n InputField,\n InputPhone,\n cn,\n usePopupControls,\n type InputPhoneProps,\n} from \"@/index\";\nimport { useEffect, useRef, useState } from \"react\";\n\nexport type TOption = {\n label: string;\n icon: TypesChange;\n};\n\ntype TypesChange =\n | \"phone\"\n | \"telegram-logo\"\n | \"whats-app-logo-filled\"\n | \"max-logo\"\n | \"envelope-simple\";\n\nconst contactIcons: Record<TypesChange, StrokeIconComponent> = {\n phone: Phone,\n \"telegram-logo\": TelegramLogo,\n \"whats-app-logo-filled\": WhatsAppLogoFilled,\n \"max-logo\": MaxLogo,\n \"envelope-simple\": EnvelopeSimple,\n};\n\ntype Props = {\n isValid?: boolean;\n label?: string;\n description?: string;\n classes?: {\n fieldset?: string;\n fieldgroup?: string;\n field?: string;\n container?: string;\n };\n value?: string;\n name?: string;\n onTypeChange?: (type: TypesChange) => void;\n inputProps: React.ComponentPropsWithRef<\"input\">;\n inputPhoneProps: InputPhoneProps;\n disabled?: boolean;\n};\n\n// TODO: заменить цвета\nconst iconStyles = (icon: TypesChange) => {\n switch (icon) {\n case \"max-logo\":\n return {\n bgColor: \"bg-[linear-gradient(135deg,#9933DD_0%,#2831B9_50%,#44CCFF_100%)]\",\n };\n\n case \"telegram-logo\":\n return {\n bgColor: \"bg-[#289AD2]\",\n };\n\n case \"whats-app-logo-filled\":\n return {\n bgColor: \"bg-[#00C202]\",\n textColor: \"text-primary-inverse-text\",\n };\n\n default:\n return {};\n }\n};\n\nconst getContactIconClasses = (icon: TypesChange) => ({\n wrapper: cn(\n `flex h-5.5 w-5.5 shrink-0 items-center justify-center rounded-sm\n ${iconStyles(icon).bgColor ?? \"bg-primary-inverse-hover-bg\"}\n ${iconStyles(icon).textColor ?? \"text-primary-inverse-text\"}`,\n ),\n icon: \"size-5 shrink-0\",\n});\n\nexport const InputContact = (props: Props) => {\n const { inputProps, inputPhoneProps, onTypeChange, ...rest } = props;\n\n const [type, setType] = useState<TypesChange>(\"phone\");\n const { isOpened, openPopup, closePopup } = usePopupControls();\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target as Node)) {\n closePopup();\n }\n };\n\n if (isOpened) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isOpened, closePopup]);\n\n const getPlaceholder = (type: TypesChange): string => {\n switch (type) {\n case \"phone\":\n return \"+7 (999) 999-99-99\";\n case \"telegram-logo\":\n return \"@username\";\n case \"whats-app-logo-filled\":\n return \"+7 (999) 999-99-99\";\n case \"max-logo\":\n return \"ID пользователя Max\";\n case \"envelope-simple\":\n return \"example@mail.com\";\n default:\n return \"Введите значение\";\n }\n };\n\n const handleTypeChange = (type: TypesChange) => {\n return () => {\n setType(type);\n onTypeChange?.(type);\n closePopup();\n };\n };\n\n const SelectedIcon = contactIcons[type];\n const ToggleIcon = isOpened ? CaretUp : CaretDown;\n\n return (\n <div className={cn(\"relative\", props.classes?.container)}>\n {[\"telegram-logo\", \"max-logo\", \"envelope-simple\"].includes(type) ? (\n <InputField\n {...inputProps}\n {...rest}\n date={[\n {\n id: \"0\",\n position: \"inline-start\",\n component: (\n <StrokeIcon\n icon={SelectedIcon}\n size=\"medium\"\n classes={getContactIconClasses(type)}\n />\n ),\n },\n {\n id: \"1\",\n position: \"inline-end\",\n component: (\n <StrokeIcon\n icon={ToggleIcon}\n size=\"medium\"\n className=\"cursor-pointer\"\n onClick={openPopup}\n />\n ),\n },\n ]}\n placeholder={getPlaceholder(type)}\n />\n ) : (\n <InputPhone\n {...inputPhoneProps}\n {...rest}\n date={[\n {\n id: \"0\",\n position: \"inline-start\",\n component: (\n <StrokeIcon\n icon={SelectedIcon}\n size=\"medium\"\n classes={getContactIconClasses(type)}\n />\n ),\n },\n {\n id: \"1\",\n position: \"inline-end\",\n component: (\n <StrokeIcon\n icon={ToggleIcon}\n size=\"medium\"\n className=\"cursor-pointer\"\n onClick={openPopup}\n />\n ),\n },\n ]}\n placeholder={getPlaceholder(type)}\n />\n )}\n\n {isOpened && (\n <div\n className=\"border-inp-hover-border bg-primary-bg absolute z-100 my-2 flex w-full\n flex-col rounded-xl border\"\n ref={wrapperRef}\n >\n {OPTIONS.map(({ label, icon }) => {\n const OptionIcon = contactIcons[icon];\n\n return (\n <Button\n key={label}\n variant=\"ghost\"\n className=\"flex w-full justify-start\"\n type=\"button\"\n onClick={handleTypeChange(icon)}\n >\n <StrokeIcon\n icon={OptionIcon}\n size=\"medium\"\n className=\"text-primary-inverse-text\"\n classes={getContactIconClasses(icon)}\n />\n\n {label}\n </Button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nexport type { Props as InputContactProps, TypesChange };\n"],"names":["OPTIONS","contactIcons","Phone","TelegramLogo","WhatsAppLogoFilled","MaxLogo","EnvelopeSimple","iconStyles","icon","getContactIconClasses","cn","InputContact","props","inputProps","inputPhoneProps","onTypeChange","rest","type","setType","useState","isOpened","openPopup","closePopup","usePopupControls","wrapperRef","useRef","useEffect","handleClickOutside","event","getPlaceholder","handleTypeChange","SelectedIcon","ToggleIcon","CaretUp","CaretDown","jsxs","jsx","InputField","StrokeIcon","InputPhone","label","OptionIcon","Button"],"mappings":"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"}
|