update SelectField FormModal

This commit is contained in:
Mohamadzadeh 2026-06-21 16:32:29 +03:30
parent 5d799ce84f
commit fb23898615
5 changed files with 403 additions and 262 deletions

416
dist/form.js vendored
View File

@ -1,8 +1,9 @@
import { jsx as l, jsxs as R } from "react/jsx-runtime"; import { jsx as n, jsxs as C } from "react/jsx-runtime";
import { Input as I, Checkbox as ee, Textarea as re, RadioGroup as te, HStack as le, Radio as ne, Select as oe, Modal as ie, ModalOverlay as ce, ModalContent as ue, ModalHeader as se, ModalCloseButton as ae, ModalBody as de, VStack as fe, SimpleGrid as be, ModalFooter as pe, Button as A, FormControl as ve, FormLabel as me, FormErrorMessage as xe, useDisclosure as Fe } from "@chakra-ui/react"; import { Input as P, Checkbox as ee, Textarea as re, RadioGroup as te, HStack as le, Radio as ne, Modal as oe, ModalOverlay as ie, ModalContent as ce, ModalHeader as ue, ModalCloseButton as se, ModalBody as ae, VStack as de, SimpleGrid as fe, ModalFooter as be, Button as G, FormControl as me, FormLabel as ve, FormErrorMessage as xe, useDisclosure as pe } from "@chakra-ui/react";
import { useContext as he, useMemo as m, useRef as ge, useEffect as G, createContext as ke, useState as Se, useCallback as E } from "react"; import { Select as Fe } from "chakra-react-select";
import { Controller as P, useForm as ye, useWatch as Re } from "react-hook-form"; import { useContext as he, useMemo as p, useRef as ke, useEffect as H, createContext as ge, useState as Se, useCallback as I } from "react";
const Me = {}, y = { import { Controller as z, useForm as ye, useWatch as Re } from "react-hook-form";
const Me = {}, M = {
create: { create: {
titlePrefix: "افزودن", titlePrefix: "افزودن",
submitText: "ثبت" submitText: "ثبت"
@ -11,21 +12,21 @@ const Me = {}, y = {
titlePrefix: "ویرایش", titlePrefix: "ویرایش",
submitText: "ویرایش" submitText: "ویرایش"
} }
}, H = ke(null); }, U = ge(null);
function Ce({ item: e, mode: r }) { function Ce({ item: e, mode: r }) {
return e ? [r, e.rowId, e.entityId, e.id].filter(Boolean).join("-") : r; return e ? [r, e.rowId, e.entityId, e.id].filter(Boolean).join("-") : r;
} }
function x({ required: e, validate: r, rules: t }) { function F({ required: e, validate: r, rules: t }) {
const n = { ...t ?? {} }; const l = { ...t ?? {} };
return e && (n.required = typeof e == "string" ? e : "این فیلد الزامی است."), r && (n.validate = r), n; return e && (l.required = typeof e == "string" ? e : "این فیلد الزامی است."), r && (l.validate = r), l;
} }
function v() { function x() {
const e = he(H); const e = he(U);
if (!e) if (!e)
throw new Error("Field باید داخل FormModal استفاده شود."); throw new Error("Field باید داخل FormModal استفاده شود.");
return e; return e;
} }
function U(e = []) { function _(e = []) {
return e.map((r, t) => { return e.map((r, t) => {
if (typeof r != "object" || r === null) { if (typeof r != "object" || r === null) {
const o = String(r); const o = String(r);
@ -36,57 +37,67 @@ function U(e = []) {
disabled: !1 disabled: !1
}; };
} }
const n = r.value ?? r.id; const l = r.value ?? r.id;
return { return {
key: String(r.key ?? n ?? t), key: String(r.key ?? l ?? t),
label: r.label ?? r.name ?? n, label: r.label ?? r.name ?? l,
value: String(n), value: String(l),
disabled: !!r.disabled disabled: !!r.disabled
}; };
}); });
} }
function Ve({ options: e = [] }) { function h({ name: e, label: r, showWhen: t, children: l }) {
return e.map((r, t) => /* @__PURE__ */ l(
"option",
{
value: r.value,
disabled: r.disabled,
children: r.label
},
`${r.key}-${t}`
));
}
function F({ name: e, label: r, showWhen: t, children: n }) {
var s; var s;
const { errors: o, control: u } = v(), c = Re({ const { errors: o, control: u } = x(), c = Re({
control: u, control: u,
name: t == null ? void 0 : t.name name: t == null ? void 0 : t.name
}); });
return m(() => t ? typeof t == "function" ? t({ return p(() => t ? typeof t == "function" ? t({
value: c value: c
}) : c === t.value : !0, [t, c]) ? /* @__PURE__ */ R(ve, { isInvalid: !!o[e], children: [ }) : c === t.value : !0, [t, c]) ? /* @__PURE__ */ C(me, { isInvalid: !!o[e], children: [
r && /* @__PURE__ */ l(me, { fontSize: "sm", fontWeight: "bold", children: r }), r && /* @__PURE__ */ n(ve, { fontSize: "sm", fontWeight: "bold", children: r }),
n, l,
/* @__PURE__ */ l(xe, { children: (s = o[e]) == null ? void 0 : s.message }) /* @__PURE__ */ n(xe, { children: (s = o[e]) == null ? void 0 : s.message })
] }) : null; ] }) : null;
} }
function Be({ function Ve({
name: e, name: e,
label: r, label: r,
required: t, required: t,
validate: n, validate: l,
rules: o, rules: o,
showWhen: u, showWhen: u,
placeholder: c, placeholder: c,
...i ...i
}) { }) {
const { register: s } = v(); const { register: s } = x();
return /* @__PURE__ */ l(F, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ l( return /* @__PURE__ */ n(h, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ n(
I, P,
{ {
borderRadius: "xl", borderRadius: "xl",
placeholder: c, placeholder: c,
...s(e, x({ required: t, validate: n, rules: o })), ...s(e, F({ required: t, validate: l, rules: o })),
...i
}
) });
}
function Be({
name: e,
label: r,
required: t,
validate: l,
rules: o,
showWhen: u,
placeholder: c,
...i
}) {
const { register: s } = x();
return /* @__PURE__ */ n(h, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ n(
re,
{
borderRadius: "xl",
placeholder: c,
...s(e, F({ required: t, validate: l, rules: o })),
...i ...i
} }
) }); ) });
@ -95,20 +106,57 @@ function Ee({
name: e, name: e,
label: r, label: r,
required: t, required: t,
validate: n, validate: l,
rules: o, rules: o,
showWhen: u, showWhen: u,
placeholder: c, placeholder: c = "انتخاب کنید",
...i options: i = [],
onChange: s,
isClearable: f = !0,
...m
}) { }) {
const { register: s } = v(); const { control: b, setValue: a } = x(), S = p(() => _(i), [i]);
return /* @__PURE__ */ l(F, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ l( return /* @__PURE__ */ n(h, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ n(
re, z,
{ {
borderRadius: "xl", name: e,
placeholder: c, control: b,
...s(e, x({ required: t, validate: n, rules: o })), rules: F({ required: t, validate: l, rules: o }),
...i render: ({ field: g }) => {
const V = S.find((d) => d.value === g.value) ?? null;
return /* @__PURE__ */ n(
Fe,
{
placeholder: c,
options: S,
value: V,
isClearable: f,
isRtl: !0,
menuPlacement: "auto",
menuPosition: "fixed",
selectedOptionStyle: "check",
chakraStyles: {
control: (d) => ({
...d,
borderRadius: "var(--chakra-radii-xl)"
}),
menu: (d) => ({
...d,
zIndex: 2e3
})
},
onChange: (d) => {
const y = (d == null ? void 0 : d.value) ?? "";
g.onChange(y), s == null || s({
value: y,
option: d,
setValue: a
});
},
...m
}
);
}
} }
) }); ) });
} }
@ -116,37 +164,38 @@ function Ie({
name: e, name: e,
label: r, label: r,
required: t, required: t,
validate: n, validate: l,
rules: o, rules: o,
showWhen: u, showWhen: u,
placeholder: c = "انتخاب کنید", options: c = [],
options: i = [], onChange: i
onChange: s,
isClearable: d = !0,
...b
}) { }) {
const { control: f, setValue: a } = v(), M = m(() => U(i), [i]); const { control: s, setValue: f } = x(), m = _(c);
return /* @__PURE__ */ l(F, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ l( return /* @__PURE__ */ n(h, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ n(
P, z,
{ {
name: e, name: e,
control: f, control: s,
rules: x({ required: t, validate: n, rules: o }), rules: F({ required: t, validate: l, rules: o }),
render: ({ field: g }) => /* @__PURE__ */ l( render: ({ field: b }) => /* @__PURE__ */ n(
oe, te,
{ {
borderRadius: "xl", value: b.value,
placeholder: d ? c : void 0, onChange: (a) => {
value: g.value ?? "", b.onChange(a), i == null || i({
onChange: (C) => { value: a,
const k = C.target.value; setValue: f
g.onChange(k), s == null || s({
value: k,
setValue: a
}); });
}, },
...b, children: /* @__PURE__ */ n(le, { pt: "8px", spacing: 3, children: m.map((a) => /* @__PURE__ */ n(
children: /* @__PURE__ */ l(Ve, { options: M }) ne,
{
value: a.value,
isDisabled: a.disabled,
children: a.label
},
a.value
)) })
} }
) )
} }
@ -156,61 +205,28 @@ function Pe({
name: e, name: e,
label: r, label: r,
required: t, required: t,
validate: n, validate: l,
rules: o,
showWhen: u,
options: c = [],
onChange: i
}) {
const { control: s, setValue: d } = v(), b = U(c);
return /* @__PURE__ */ l(F, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ l(
P,
{
name: e,
control: s,
rules: x({ required: t, validate: n, rules: o }),
render: ({ field: f }) => /* @__PURE__ */ l(
te,
{
value: f.value,
onChange: (a) => {
f.onChange(a), i == null || i({
value: a,
setValue: d
});
},
children: /* @__PURE__ */ l(le, { pt: "8px", spacing: 3, children: b.map((a) => /* @__PURE__ */ l(ne, { value: a.value, children: a.label }, a.value)) })
}
)
}
) });
}
function $e({
name: e,
label: r,
required: t,
validate: n,
rules: o, rules: o,
showWhen: u, showWhen: u,
children: c, children: c,
onChange: i onChange: i
}) { }) {
const { control: s, setValue: d } = v(); const { control: s, setValue: f } = x();
return /* @__PURE__ */ l(F, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ l( return /* @__PURE__ */ n(h, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ n(
P, z,
{ {
name: e, name: e,
control: s, control: s,
rules: x({ required: t, validate: n, rules: o }), rules: F({ required: t, validate: l, rules: o }),
render: ({ field: b }) => /* @__PURE__ */ l( render: ({ field: m }) => /* @__PURE__ */ n(
ee, ee,
{ {
isChecked: !!b.value, isChecked: !!m.value,
onChange: (f) => { onChange: (b) => {
const a = f.target.checked; const a = b.target.checked;
b.onChange(a), i == null || i({ m.onChange(a), i == null || i({
value: a, value: a,
setValue: d setValue: f
}); });
}, },
children: c ?? r children: c ?? r
@ -223,18 +239,18 @@ function ze({
name: e, name: e,
label: r, label: r,
required: t, required: t,
validate: n, validate: l,
rules: o, rules: o,
showWhen: u, showWhen: u,
...c ...c
}) { }) {
const { register: i } = v(); const { register: i } = x();
return /* @__PURE__ */ l(F, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ l( return /* @__PURE__ */ n(h, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ n(
I, P,
{ {
type: "file", type: "file",
borderRadius: "xl", borderRadius: "xl",
...i(e, x({ required: t, validate: n, rules: o })), ...i(e, F({ required: t, validate: l, rules: o })),
...c ...c
} }
) }); ) });
@ -243,115 +259,115 @@ function De({
name: e, name: e,
label: r, label: r,
required: t, required: t,
validate: n, validate: l,
rules: o, rules: o,
showWhen: u, showWhen: u,
...c ...c
}) { }) {
const { register: i } = v(); const { register: i } = x();
return /* @__PURE__ */ l(F, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ l( return /* @__PURE__ */ n(h, { name: e, label: r, showWhen: u, children: /* @__PURE__ */ n(
I, P,
{ {
type: "date", type: "date",
borderRadius: "xl", borderRadius: "xl",
...i(e, x({ required: t, validate: n, rules: o })), ...i(e, F({ required: t, validate: l, rules: o })),
...c ...c
} }
) }); ) });
} }
const Ae = { const Ae = {
Input: Be, Input: Ve,
Select: Ie, Select: Ee,
Radio: Pe, Radio: Ie,
Textarea: Ee, Textarea: Be,
Check: $e, Check: Pe,
Filepicker: ze, Filepicker: ze,
Datepicker: De, Datepicker: De,
useForm: v useForm: x
}; };
function Ge({ function Ge({
isOpen: e, isOpen: e,
close: r, close: r,
item: t = null, item: t = null,
entityName: n = "آیتم", entityName: l = "آیتم",
title: o, title: o,
createTitle: u, createTitle: u,
editTitle: c, editTitle: c,
submitText: i, submitText: i,
createSubmitText: s, createSubmitText: s,
editSubmitText: d, editSubmitText: f,
defaultValues: b = Me, defaultValues: m = Me,
getDefaultValues: f, getDefaultValues: b,
resetKey: a, resetKey: a,
onSubmit: M, onSubmit: S,
transformValues: g, transformValues: g,
children: C, children: V,
isLoading: k = !1, isLoading: d = !1,
size: _ = "lg", size: y = "lg",
columns: Y = { base: 1, md: 2 } columns: Y = { base: 1, md: 2 }
}) { }) {
const p = !!t, h = p ? "edit" : "create", w = m(() => o || (p ? c ?? `${y.edit.titlePrefix} ${n}` : u ?? `${y.create.titlePrefix} ${n}`), [o, c, u, n, p]), J = m(() => i || (p ? d ?? y.edit.submitText : s ?? y.create.submitText), [i, d, s, p]), S = m(() => typeof f == "function" ? f({ const v = !!t, k = v ? "edit" : "create", w = p(() => o || (v ? c ?? `${M.edit.titlePrefix} ${l}` : u ?? `${M.create.titlePrefix} ${l}`), [o, c, u, l, v]), J = p(() => i || (v ? f ?? M.edit.submitText : s ?? M.create.submitText), [i, f, s, v]), R = p(() => typeof b == "function" ? b({
item: t, item: t,
mode: h, mode: k,
isEdit: p isEdit: v
}) : b, [f, b, t, h, p]), V = ge(S); }) : m, [b, m, t, k, v]), B = ke(R);
G(() => { H(() => {
V.current = S; B.current = R;
}, [S]); }, [R]);
const K = m(() => a || Ce({ const K = p(() => a || Ce({
item: t, item: t,
mode: h mode: k
}), [a, t, h]), Q = ye({ }), [a, t, k]), Q = ye({
defaultValues: S defaultValues: R
}), { }), {
handleSubmit: X, handleSubmit: X,
reset: B, reset: E,
register: $, register: D,
control: z, control: O,
setValue: D, setValue: L,
watch: L, watch: T,
formState: { isSubmitting: Z, errors: O } formState: { isSubmitting: Z, errors: j }
} = Q; } = Q;
G(() => { H(() => {
e && B(V.current); e && E(B.current);
}, [e, K, B]); }, [e, K, E]);
const T = () => { const $ = () => {
B(V.current), r(); E(B.current), r();
}, q = X(async (j) => { }, q = X(async (A) => {
const W = typeof g == "function" ? g({ const W = typeof g == "function" ? g({
values: j, values: A,
item: t, item: t,
mode: h, mode: k,
isEdit: p isEdit: v
}) : j; }) : A;
await M({ await S({
values: W, values: W,
item: t, item: t,
mode: h, mode: k,
isEdit: p isEdit: v
}); });
}), N = m( }), N = p(
() => ({ () => ({
register: $, register: D,
control: z, control: O,
setValue: D, setValue: L,
watch: L, watch: T,
errors: O errors: j
}), }),
[$, z, D, L, O] [D, O, L, T, j]
); );
return /* @__PURE__ */ R(ie, { isOpen: e, onClose: T, isCentered: !0, size: _, children: [ return /* @__PURE__ */ C(oe, { isOpen: e, onClose: $, isCentered: !0, size: y, children: [
/* @__PURE__ */ l(ce, { backdropFilter: "blur(6px)" }), /* @__PURE__ */ n(ie, { backdropFilter: "blur(6px)" }),
/* @__PURE__ */ R( /* @__PURE__ */ C(
ue, ce,
{ {
as: "form", as: "form",
onSubmit: q, onSubmit: q,
borderRadius: "2xl", borderRadius: "2xl",
overflow: "visible", overflow: "visible",
children: [ children: [
/* @__PURE__ */ l( /* @__PURE__ */ n(
se, ue,
{ {
bgGradient: "linear(to-l, blue.600, facebook.500)", bgGradient: "linear(to-l, blue.600, facebook.500)",
color: "white", color: "white",
@ -360,17 +376,17 @@ function Ge({
children: w children: w
} }
), ),
/* @__PURE__ */ l(ae, { color: "white" }), /* @__PURE__ */ n(se, { color: "white" }),
/* @__PURE__ */ l(de, { py: 5, children: /* @__PURE__ */ l(H.Provider, { value: N, children: /* @__PURE__ */ l(fe, { spacing: 4, alignItems: "stretch", children: /* @__PURE__ */ l(be, { columns: Y, spacing: 4, children: C }) }) }) }), /* @__PURE__ */ n(ae, { py: 5, children: /* @__PURE__ */ n(U.Provider, { value: N, children: /* @__PURE__ */ n(de, { spacing: 4, alignItems: "stretch", children: /* @__PURE__ */ n(fe, { columns: Y, spacing: 4, children: V }) }) }) }),
/* @__PURE__ */ R(pe, { gap: 2, bg: "gray.50", children: [ /* @__PURE__ */ C(be, { gap: 2, bg: "gray.50", children: [
/* @__PURE__ */ l(A, { type: "button", variant: "ghost", onClick: T, children: "انصراف" }), /* @__PURE__ */ n(G, { type: "button", variant: "ghost", onClick: $, children: "انصراف" }),
/* @__PURE__ */ l( /* @__PURE__ */ n(
A, G,
{ {
type: "submit", type: "submit",
colorScheme: "blue", colorScheme: "blue",
borderRadius: "xl", borderRadius: "xl",
isLoading: Z || k, isLoading: Z || d,
children: J children: J
} }
) )
@ -381,27 +397,27 @@ function Ge({
] }); ] });
} }
function He() { function He() {
const { isOpen: e, onOpen: r, onClose: t } = Fe(), [n, o] = Se(null), u = E(() => { const { isOpen: e, onOpen: r, onClose: t } = pe(), [l, o] = Se(null), u = I(() => {
o(null), r(); o(null), r();
}, [r]), c = E( }, [r]), c = I(
(d) => { (f) => {
o(d), r(); o(f), r();
}, },
[r] [r]
), i = E(() => { ), i = I(() => {
o(null), t(); o(null), t();
}, [t]), s = !!n; }, [t]), s = !!l;
return m( return p(
() => ({ () => ({
isOpen: e, isOpen: e,
item: n, item: l,
isEdit: s, isEdit: s,
isCreate: !s, isCreate: !s,
openCreate: u, openCreate: u,
openEdit: c, openEdit: c,
close: i close: i
}), }),
[e, n, s, u, c, i] [e, l, s, u, c, i]
); );
} }
export { export {

View File

@ -42,12 +42,14 @@
"@tanstack/react-query": "^5.0.0", "@tanstack/react-query": "^5.0.0",
"@tanstack/react-table": "^8.21.3", "@tanstack/react-table": "^8.21.3",
"axios": "^1.0.0", "axios": "^1.0.0",
"chakra-react-select": "^5.0.0",
"framer-motion": "^10.0.0 || ^11.0.0 || ^12.0.0", "framer-motion": "^10.0.0 || ^11.0.0 || ^12.0.0",
"keycloak-js": "^26.0.0", "keycloak-js": "^26.0.0",
"react": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0",
"react-dom": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0",
"react-hook-form": "^7.0.0",
"react-icons": "^5.0.0", "react-icons": "^5.0.0",
"react-hook-form": "^7.0.0" "react-select": "^5.0.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"@chakra-ui/react": { "@chakra-ui/react": {
@ -68,6 +70,9 @@
"axios": { "axios": {
"optional": true "optional": true
}, },
"chakra-react-select": {
"optional": true
},
"framer-motion": { "framer-motion": {
"optional": true "optional": true
}, },
@ -80,10 +85,13 @@
"react-dom": { "react-dom": {
"optional": true "optional": true
}, },
"react-hook-form": {
"optional": true
},
"react-icons": { "react-icons": {
"optional": true "optional": true
}, },
"react-hook-form": { "react-select": {
"optional": true "optional": true
} }
}, },
@ -95,13 +103,15 @@
"@tanstack/react-table": "^8.21.3", "@tanstack/react-table": "^8.21.3",
"@vitejs/plugin-react": "4.3.4", "@vitejs/plugin-react": "4.3.4",
"axios": "^1.17.0", "axios": "^1.17.0",
"chakra-react-select": "5",
"framer-motion": "^12.0.0", "framer-motion": "^12.0.0",
"keycloak-js": "^26.2.4", "keycloak-js": "^26.2.4",
"react": "^18.0.0", "react": "^18.0.0",
"react-dom": "^18.0.0", "react-dom": "^18.0.0",
"react-hook-form": "^7.0.0",
"react-icons": "^5.0.0", "react-icons": "^5.0.0",
"vite": "5.4.19", "react-select": "5",
"react-hook-form": "^7.0.0" "vite": "5.4.19"
}, },
"dependencies": {} "dependencies": {}
} }

View File

@ -15,11 +15,11 @@ import {
ModalOverlay, ModalOverlay,
Radio, Radio,
RadioGroup, RadioGroup,
Select,
SimpleGrid, SimpleGrid,
Textarea, Textarea,
VStack, VStack,
} from "@chakra-ui/react"; } from "@chakra-ui/react";
import { Select as ChakraReactSelect } from "chakra-react-select";
import { createContext, useContext, useEffect, useMemo, useRef } from "react"; import { createContext, useContext, useEffect, useMemo, useRef } from "react";
import { Controller, useForm, useWatch } from "react-hook-form"; import { Controller, useForm, useWatch } from "react-hook-form";
@ -95,18 +95,6 @@ function normalizeOptions(options = []) {
}); });
} }
function NativeSelectOptions({ options = [] }) {
return options.map((option, index) => (
<option
key={`${option.key}-${index}`}
value={option.value}
disabled={option.disabled}
>
{option.label}
</option>
));
}
// ----- field wrapper ----- // ----- field wrapper -----
function FieldWrapper({ name, label, showWhen, children }) { function FieldWrapper({ name, label, showWhen, children }) {
@ -219,26 +207,46 @@ function SelectField({
name={name} name={name}
control={control} control={control}
rules={getRules({ required, validate, rules })} rules={getRules({ required, validate, rules })}
render={({ field }) => ( render={({ field }) => {
<Select const selectedOption =
borderRadius="xl" normalizedOptions.find((option) => option.value === field.value) ??
placeholder={isClearable ? placeholder : undefined} null;
value={field.value ?? ""}
onChange={(event) => {
const value = event.target.value;
field.onChange(value); return (
<ChakraReactSelect
placeholder={placeholder}
options={normalizedOptions}
value={selectedOption}
isClearable={isClearable}
isRtl
menuPlacement="auto"
menuPosition="fixed"
selectedOptionStyle="check"
chakraStyles={{
control: (provided) => ({
...provided,
borderRadius: "var(--chakra-radii-xl)",
}),
menu: (provided) => ({
...provided,
zIndex: 2000,
}),
}}
onChange={(option) => {
const value = option?.value ?? "";
onChange?.({ field.onChange(value);
value,
setValue, onChange?.({
}); value,
}} option,
{...props} setValue,
> });
<NativeSelectOptions options={normalizedOptions} /> }}
</Select> {...props}
)} />
);
}}
/> />
</FieldWrapper> </FieldWrapper>
); );
@ -277,7 +285,11 @@ function RadioField({
> >
<HStack pt="8px" spacing={3}> <HStack pt="8px" spacing={3}>
{normalizedOptions.map((option) => ( {normalizedOptions.map((option) => (
<Radio key={option.value} value={option.value}> <Radio
key={option.value}
value={option.value}
isDisabled={option.disabled}
>
{option.label} {option.label}
</Radio> </Radio>
))} ))}
@ -420,8 +432,6 @@ export function FormModal({
const isEdit = Boolean(item); const isEdit = Boolean(item);
const mode = isEdit ? "edit" : "create"; const mode = isEdit ? "edit" : "create";
// ----- title -----
const resolvedTitle = useMemo(() => { const resolvedTitle = useMemo(() => {
if (title) return title; if (title) return title;
@ -436,8 +446,6 @@ export function FormModal({
); );
}, [title, editTitle, createTitle, entityName, isEdit]); }, [title, editTitle, createTitle, entityName, isEdit]);
// ----- submit text -----
const resolvedSubmitText = useMemo(() => { const resolvedSubmitText = useMemo(() => {
if (submitText) return submitText; if (submitText) return submitText;
@ -448,8 +456,6 @@ export function FormModal({
return createSubmitText ?? defaultActionLabels.create.submitText; return createSubmitText ?? defaultActionLabels.create.submitText;
}, [submitText, editSubmitText, createSubmitText, isEdit]); }, [submitText, editSubmitText, createSubmitText, isEdit]);
// ----- default values -----
const resolvedDefaultValues = useMemo(() => { const resolvedDefaultValues = useMemo(() => {
if (typeof getDefaultValues === "function") { if (typeof getDefaultValues === "function") {
return getDefaultValues({ return getDefaultValues({
@ -468,8 +474,6 @@ export function FormModal({
latestDefaultValuesRef.current = resolvedDefaultValues; latestDefaultValuesRef.current = resolvedDefaultValues;
}, [resolvedDefaultValues]); }, [resolvedDefaultValues]);
// ----- reset key -----
const resolvedResetKey = useMemo(() => { const resolvedResetKey = useMemo(() => {
if (resetKey) return resetKey; if (resetKey) return resetKey;
@ -479,8 +483,6 @@ export function FormModal({
}); });
}, [resetKey, item, mode]); }, [resetKey, item, mode]);
// ----- form -----
const methods = useForm({ const methods = useForm({
defaultValues: resolvedDefaultValues, defaultValues: resolvedDefaultValues,
}); });
@ -495,23 +497,17 @@ export function FormModal({
formState: { isSubmitting, errors }, formState: { isSubmitting, errors },
} = methods; } = methods;
// ----- reset on open -----
useEffect(() => { useEffect(() => {
if (!isOpen) return; if (!isOpen) return;
reset(latestDefaultValuesRef.current); reset(latestDefaultValuesRef.current);
}, [isOpen, resolvedResetKey, reset]); }, [isOpen, resolvedResetKey, reset]);
// ----- close -----
const handleClose = () => { const handleClose = () => {
reset(latestDefaultValuesRef.current); reset(latestDefaultValuesRef.current);
close(); close();
}; };
// ----- submit -----
const handleFormSubmit = handleSubmit(async (values) => { const handleFormSubmit = handleSubmit(async (values) => {
const finalValues = const finalValues =
typeof transformValues === "function" typeof transformValues === "function"
@ -531,8 +527,6 @@ export function FormModal({
}); });
}); });
// ----- context -----
const contextValue = useMemo( const contextValue = useMemo(
() => ({ () => ({
register, register,
@ -544,8 +538,6 @@ export function FormModal({
[register, control, setValue, watch, errors], [register, control, setValue, watch, errors],
); );
// ----- jsx -----
return ( return (
<Modal isOpen={isOpen} onClose={handleClose} isCentered size={size}> <Modal isOpen={isOpen} onClose={handleClose} isCentered size={size}>
<ModalOverlay backdropFilter="blur(6px)" /> <ModalOverlay backdropFilter="blur(6px)" />

View File

@ -21,6 +21,8 @@ const externalPackages = [
"react-icons", "react-icons",
"react-hook-form", "react-hook-form",
"react-select",
"chakra-react-select",
]; ];
export default defineConfig({ export default defineConfig({
@ -46,7 +48,8 @@ export default defineConfig({
return ( return (
externalPackages.includes(id) || externalPackages.includes(id) ||
id.startsWith("react-icons/") || id.startsWith("react-icons/") ||
id.startsWith("@emotion/") id.startsWith("@emotion/") ||
id.startsWith("react-select/")
); );
}, },

130
yarn.lock
View File

@ -130,7 +130,7 @@
dependencies: dependencies:
"@babel/helper-plugin-utils" "^7.29.7" "@babel/helper-plugin-utils" "^7.29.7"
"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3": "@babel/runtime@^7.0.0", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
version "7.29.7" version "7.29.7"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.7.tgz#12022450c45a4da6d8d8287b18a4ff2ddb23f768" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.7.tgz#12022450c45a4da6d8d8287b18a4ff2ddb23f768"
integrity sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw== integrity sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==
@ -247,7 +247,7 @@
source-map "^0.5.7" source-map "^0.5.7"
stylis "4.2.0" stylis "4.2.0"
"@emotion/cache@^11.14.0": "@emotion/cache@^11.14.0", "@emotion/cache@^11.4.0":
version "11.14.0" version "11.14.0"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76"
integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==
@ -263,12 +263,19 @@
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b"
integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==
"@emotion/is-prop-valid@^1.3.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz#e9ad47adff0b5c94c72db3669ce46de33edf28c0"
integrity sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==
dependencies:
"@emotion/memoize" "^0.9.0"
"@emotion/memoize@^0.9.0": "@emotion/memoize@^0.9.0":
version "0.9.0" version "0.9.0"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102"
integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==
"@emotion/react@^11.14.0": "@emotion/react@^11.14.0", "@emotion/react@^11.8.1":
version "11.14.0" version "11.14.0"
resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d"
integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==
@ -298,6 +305,18 @@
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c"
integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==
"@emotion/styled@^11.14.0":
version "11.14.1"
resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.14.1.tgz#8c34bed2948e83e1980370305614c20955aacd1c"
integrity sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==
dependencies:
"@babel/runtime" "^7.18.3"
"@emotion/babel-plugin" "^11.13.5"
"@emotion/is-prop-valid" "^1.3.0"
"@emotion/serialize" "^1.3.3"
"@emotion/use-insertion-effect-with-fallbacks" "^1.2.0"
"@emotion/utils" "^1.4.2"
"@emotion/unitless@^0.10.0": "@emotion/unitless@^0.10.0":
version "0.10.0" version "0.10.0"
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745"
@ -433,6 +452,26 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
"@floating-ui/core@^1.7.5":
version "1.7.5"
resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.5.tgz#d4af157a03330af5a60e69da7a4692507ada0622"
integrity sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==
dependencies:
"@floating-ui/utils" "^0.2.11"
"@floating-ui/dom@^1.0.1":
version "1.7.6"
resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.6.tgz#f915bba5abbb177e1f227cacee1b4d0634b187bf"
integrity sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==
dependencies:
"@floating-ui/core" "^1.7.5"
"@floating-ui/utils" "^0.2.11"
"@floating-ui/utils@^0.2.11":
version "0.2.11"
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.11.tgz#a269e055e40e2f45873bae9d1a2fdccbd314ea3f"
integrity sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==
"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5":
version "0.3.13" version "0.3.13"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
@ -676,6 +715,11 @@
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239"
integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==
"@types/react-transition-group@^4.4.0":
version "4.4.12"
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044"
integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==
"@vitejs/plugin-react@4.3.4": "@vitejs/plugin-react@4.3.4":
version "4.3.4" version "4.3.4"
resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz#c64be10b54c4640135a5b28a2432330e88ad7c20" resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz#c64be10b54c4640135a5b28a2432330e88ad7c20"
@ -776,6 +820,13 @@ caniuse-lite@^1.0.30001782:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz#5c909138c27f1a61219d3e092071c1cc7d32dc55" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz#5c909138c27f1a61219d3e092071c1cc7d32dc55"
integrity sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw== integrity sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==
chakra-react-select@5:
version "5.1.1"
resolved "https://registry.yarnpkg.com/chakra-react-select/-/chakra-react-select-5.1.1.tgz#e6d24ed5ceb87229e19b102df740b2fe8f08dddf"
integrity sha512-edHbC7Vnzw055f8jtAJzs7K/NXOt8q9AEqJmA/VANZzJeEPwhZ5JtjZBpXa/WORndEhiD2NSYcKrGL+73S306w==
dependencies:
react-select "^5.10.2"
color2k@^2.0.2: color2k@^2.0.2:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/color2k/-/color2k-2.0.3.tgz#a771244f6b6285541c82aa65ff0a0c624046e533" resolved "https://registry.yarnpkg.com/color2k/-/color2k-2.0.3.tgz#a771244f6b6285541c82aa65ff0a0c624046e533"
@ -838,6 +889,14 @@ detect-node-es@^1.1.0:
resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493"
integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==
dom-helpers@^5.0.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
dependencies:
"@babel/runtime" "^7.8.7"
csstype "^3.0.2"
dunder-proto@^1.0.1: dunder-proto@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
@ -953,6 +1012,15 @@ form-data@^4.0.5:
hasown "^2.0.4" hasown "^2.0.4"
mime-types "^2.1.35" mime-types "^2.1.35"
framer-motion@^12.0.0:
version "12.40.0"
resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-12.40.0.tgz#68e53aecd51c8a8a62b565f059b418bef2add0e2"
integrity sha512-uaBd3qC1v3KQqBEjwTUd183K6PbS+j0yR9w9VmEOLWA/tnUcSn8Xa3uck7t4dgpDoUss8xQTcj8W2L07lrnLFg==
dependencies:
motion-dom "^12.40.0"
motion-utils "^12.39.0"
tslib "^2.4.0"
framesync@6.1.2: framesync@6.1.2:
version "6.1.2" version "6.1.2"
resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.1.2.tgz#755eff2fb5b8f3b4d2b266dd18121b300aefea27" resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.1.2.tgz#755eff2fb5b8f3b4d2b266dd18121b300aefea27"
@ -1117,6 +1185,11 @@ math-intrinsics@^1.1.0:
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
memoize-one@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
mime-db@1.52.0: mime-db@1.52.0:
version "1.52.0" version "1.52.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
@ -1129,6 +1202,18 @@ mime-types@^2.1.35:
dependencies: dependencies:
mime-db "1.52.0" mime-db "1.52.0"
motion-dom@^12.40.0:
version "12.40.0"
resolved "https://registry.yarnpkg.com/motion-dom/-/motion-dom-12.40.0.tgz#95fb411ac72e8adbaf5f1b17b8f07783da223bee"
integrity sha512-HxU3ZaBwNPVQUBQf1xxgq+7JrPNZvjLVxgbpEZL7RrWJnsxOf0/OM+yrHG9ogLQ31Do/r57Oz2gQWPK+6q62mg==
dependencies:
motion-utils "^12.39.0"
motion-utils@^12.39.0:
version "12.39.0"
resolved "https://registry.yarnpkg.com/motion-utils/-/motion-utils-12.39.0.tgz#e1c66f0e912999804bc5e69b4630c3bc794ef29f"
integrity sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==
ms@^2.1.3: ms@^2.1.3:
version "2.1.3" version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
@ -1190,7 +1275,7 @@ postcss@^8.4.43:
picocolors "^1.1.1" picocolors "^1.1.1"
source-map-js "^1.2.1" source-map-js "^1.2.1"
prop-types@^15.6.2: prop-types@^15.6.0, prop-types@^15.6.2:
version "15.8.1" version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@ -1236,6 +1321,11 @@ react-focus-lock@^2.9.6:
use-callback-ref "^1.3.3" use-callback-ref "^1.3.3"
use-sidecar "^1.1.3" use-sidecar "^1.1.3"
react-hook-form@^7.0.0:
version "7.80.0"
resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.80.0.tgz#028e142324d592239599ab7cf1c0d82167696194"
integrity sha512-4P+fk6oXsxY+6xSj7Euhc2sumQD8zQqCuVHoJwoyp9EchP+IUW9OESB7uHFJOKsIBQ4MQqYE84INJFqUCYNoOg==
react-icons@^5.0.0: react-icons@^5.0.0:
version "5.6.0" version "5.6.0"
resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.6.0.tgz#27bcc4acbc836e762548d76041cf9b9fef4e3837" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.6.0.tgz#27bcc4acbc836e762548d76041cf9b9fef4e3837"
@ -1270,6 +1360,21 @@ react-remove-scroll@^2.5.7:
use-callback-ref "^1.3.3" use-callback-ref "^1.3.3"
use-sidecar "^1.1.3" use-sidecar "^1.1.3"
react-select@5, react-select@^5.10.2:
version "5.10.2"
resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.10.2.tgz#8dffc69dfd7d74684d9613e6eb27204e3b99e127"
integrity sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==
dependencies:
"@babel/runtime" "^7.12.0"
"@emotion/cache" "^11.4.0"
"@emotion/react" "^11.8.1"
"@floating-ui/dom" "^1.0.1"
"@types/react-transition-group" "^4.4.0"
memoize-one "^6.0.0"
prop-types "^15.6.0"
react-transition-group "^4.3.0"
use-isomorphic-layout-effect "^1.2.0"
react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: react-style-singleton@^2.2.2, react-style-singleton@^2.2.3:
version "2.2.3" version "2.2.3"
resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388" resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388"
@ -1278,6 +1383,16 @@ react-style-singleton@^2.2.2, react-style-singleton@^2.2.3:
get-nonce "^1.0.0" get-nonce "^1.0.0"
tslib "^2.0.0" tslib "^2.0.0"
react-transition-group@^4.3.0:
version "4.4.5"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1"
integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==
dependencies:
"@babel/runtime" "^7.5.5"
dom-helpers "^5.0.1"
loose-envify "^1.4.0"
prop-types "^15.6.2"
react@^18.0.0: react@^18.0.0:
version "18.3.1" version "18.3.1"
resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891"
@ -1376,7 +1491,7 @@ tslib@2.4.0:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0: tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0:
version "2.8.1" version "2.8.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
@ -1396,6 +1511,11 @@ use-callback-ref@^1.3.3:
dependencies: dependencies:
tslib "^2.0.0" tslib "^2.0.0"
use-isomorphic-layout-effect@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz#2f11a525628f56424521c748feabc2ffcc962fce"
integrity sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==
use-sidecar@^1.1.3: use-sidecar@^1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb" resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb"