@dartcom/ui-kit 2.7.1 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/cjs/components/drag-list/drag-list.js +1 -1
  2. package/dist/cjs/components/drag-list/drag-list.js.map +1 -1
  3. package/dist/cjs/components/drag-list/draggable/draggable.js +1 -0
  4. package/dist/cjs/components/drag-list/draggable/draggable.js.map +1 -1
  5. package/dist/cjs/components/form/form.js +20 -10
  6. package/dist/cjs/components/form/form.js.map +1 -1
  7. package/dist/cjs/components/input/input.js +23 -1
  8. package/dist/cjs/components/input/input.js.map +1 -1
  9. package/dist/cjs/components/list/list.js +7 -7
  10. package/dist/cjs/components/list/list.js.map +1 -1
  11. package/dist/cjs/node_modules/react-hook-form/dist/index.esm.js +118 -0
  12. package/dist/cjs/node_modules/react-hook-form/dist/index.esm.js.map +1 -1
  13. package/dist/esm/components/drag-list/drag-list.js +1 -1
  14. package/dist/esm/components/drag-list/drag-list.js.map +1 -1
  15. package/dist/esm/components/drag-list/draggable/draggable.js +1 -1
  16. package/dist/esm/components/drag-list/draggable/draggable.js.map +1 -1
  17. package/dist/esm/components/form/form.js +1 -1
  18. package/dist/esm/components/form/form.js.map +1 -1
  19. package/dist/esm/components/input/input.js +1 -1
  20. package/dist/esm/components/input/input.js.map +1 -1
  21. package/dist/esm/components/list/list.js +1 -1
  22. package/dist/esm/components/list/list.js.map +1 -1
  23. package/dist/esm/node_modules/react-hook-form/dist/index.esm.js +1 -1
  24. package/dist/esm/node_modules/react-hook-form/dist/index.esm.js.map +1 -1
  25. package/dist/esm/types/components/drag-list/drag-list.d.ts.map +1 -1
  26. package/dist/esm/types/components/drag-list/drag-list.stories.d.ts.map +1 -1
  27. package/dist/esm/types/components/drag-list/draggable/draggable.d.ts.map +1 -1
  28. package/dist/esm/types/components/drag-list/draggable/types.d.ts +2 -2
  29. package/dist/esm/types/components/drag-list/draggable/types.d.ts.map +1 -1
  30. package/dist/esm/types/components/form/form.d.ts +14 -3
  31. package/dist/esm/types/components/form/form.d.ts.map +1 -1
  32. package/dist/esm/types/components/form/form.stories.d.ts.map +1 -1
  33. package/dist/esm/types/components/input/input.d.ts +2 -2
  34. package/dist/esm/types/components/input/input.d.ts.map +1 -1
  35. package/dist/esm/types/components/input/types.d.ts +1 -1
  36. package/dist/esm/types/components/input/types.d.ts.map +1 -1
  37. package/dist/esm/types/components/list/list.d.ts +1 -2
  38. package/dist/esm/types/components/list/list.d.ts.map +1 -1
  39. package/package.json +1 -1
@@ -23,7 +23,7 @@ function DragList({ items, getItem, getId, onDragEnd, sx, title, draggableSx, })
23
23
  }, children: jsxRuntime.jsx(sortable_esm.SortableContext, { items: items.map(getId), strategy: sortable_esm.verticalListSortingStrategy, children: jsxRuntime.jsx(list["default"], { items: items, sx: sx, title: title, getKey: getId, getContent: (item, index) => {
24
24
  const id = getId(item);
25
25
  return (jsxRuntime.jsx(draggable["default"], { id: id, sx: draggableSx, children: getItem(item, index) }, id));
26
- }, isEmptyExtreme: true }) }) }));
26
+ } }) }) }));
27
27
  }
28
28
 
29
29
  exports["default"] = DragList;
@@ -1 +1 @@
1
- {"version":3,"file":"drag-list.js","sources":["../../../../src/components/drag-list/drag-list.tsx"],"sourcesContent":["import {\r\n closestCenter,\r\n DndContext,\r\n PointerSensor,\r\n useSensor,\r\n useSensors,\r\n} from '@dnd-kit/core';\r\nimport {\r\n arrayMove,\r\n SortableContext,\r\n verticalListSortingStrategy,\r\n} from '@dnd-kit/sortable';\r\n\r\nimport { List } from '../list';\r\n\r\nimport Draggable from './draggable';\r\nimport { DragListProps } from './types';\r\n\r\nfunction DragList<T>({\r\n items,\r\n getItem,\r\n getId,\r\n onDragEnd,\r\n sx,\r\n title,\r\n draggableSx,\r\n}: DragListProps<T>) {\r\n const sensors = useSensors(\r\n useSensor(PointerSensor, {\r\n activationConstraint: {\r\n distance: 8,\r\n },\r\n }),\r\n );\r\n\r\n return (\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={(event) => {\r\n const { active, over } = event;\r\n\r\n const oldIndex = items.findIndex((item) => getId(item) === active.id);\r\n const newIndex = items.findIndex((item) => getId(item) === over?.id);\r\n\r\n const newItems = arrayMove(items, oldIndex, newIndex);\r\n\r\n onDragEnd(newItems);\r\n }}>\r\n <SortableContext\r\n items={items.map(getId)}\r\n strategy={verticalListSortingStrategy}>\r\n <List\r\n items={items}\r\n sx={sx}\r\n title={title}\r\n getKey={getId}\r\n getContent={(item, index) => {\r\n const id = getId(item);\r\n\r\n return (\r\n <Draggable key={id} id={id} sx={draggableSx}>\r\n {getItem(item, index)}\r\n </Draggable>\r\n );\r\n }}\r\n isEmptyExtreme\r\n />\r\n </SortableContext>\r\n </DndContext>\r\n );\r\n}\r\n\r\nexport default DragList;\r\n"],"names":["useSensors","useSensor","PointerSensor","_jsx","DndContext","closestCenter","arrayMove","SortableContext","verticalListSortingStrategy","List","Draggable"],"mappings":";;;;;;;;;;AAkBA,SAAS,QAAQ,CAAI,EACnB,KAAK,EACL,OAAO,EACP,KAAK,EACL,SAAS,EACT,EAAE,EACF,KAAK,EACL,WAAW,GACM,EAAA;AACjB,IAAA,MAAM,OAAO,GAAGA,mBAAU,CACxBC,kBAAS,CAACC,sBAAa,EAAE;AACvB,QAAA,oBAAoB,EAAE;AACpB,YAAA,QAAQ,EAAE,CAAC;AACZ,SAAA;AACF,KAAA,CAAC,CACH,CAAC;AAEF,IAAA,QACEC,cAAC,CAAAC,mBAAU,EACT,EAAA,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAEC,sBAAa,EACjC,SAAS,EAAE,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;YAE/B,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;YAErE,MAAM,QAAQ,GAAGC,sBAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEtD,SAAS,CAAC,QAAQ,CAAC,CAAC;AACtB,SAAC,YACDH,cAAC,CAAAI,4BAAe,IACd,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EACvB,QAAQ,EAAEC,wCAA2B,EACrC,QAAA,EAAAL,cAAA,CAACM,eAAI,EACH,EAAA,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,EACb,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,KAAI;AAC1B,oBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;oBAEvB,QACEN,eAACO,oBAAS,EAAA,EAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,YACxC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EADP,EAAA,EAAE,CAEN,EACZ;AACJ,iBAAC,EACD,cAAc,EAAA,IAAA,EAAA,CACd,EACc,CAAA,EAAA,CACP,EACb;AACJ;;;;"}
1
+ {"version":3,"file":"drag-list.js","sources":["../../../../src/components/drag-list/drag-list.tsx"],"sourcesContent":["import {\r\n closestCenter,\r\n DndContext,\r\n PointerSensor,\r\n useSensor,\r\n useSensors,\r\n} from '@dnd-kit/core';\r\nimport {\r\n arrayMove,\r\n SortableContext,\r\n verticalListSortingStrategy,\r\n} from '@dnd-kit/sortable';\r\n\r\nimport { List } from '../list';\r\n\r\nimport Draggable from './draggable';\r\nimport { DragListProps } from './types';\r\n\r\nfunction DragList<T>({\r\n items,\r\n getItem,\r\n getId,\r\n onDragEnd,\r\n sx,\r\n title,\r\n draggableSx,\r\n}: DragListProps<T>) {\r\n const sensors = useSensors(\r\n useSensor(PointerSensor, {\r\n activationConstraint: {\r\n distance: 8,\r\n },\r\n }),\r\n );\r\n\r\n return (\r\n <DndContext\r\n sensors={sensors}\r\n collisionDetection={closestCenter}\r\n onDragEnd={(event) => {\r\n const { active, over } = event;\r\n\r\n const oldIndex = items.findIndex((item) => getId(item) === active.id);\r\n const newIndex = items.findIndex((item) => getId(item) === over?.id);\r\n\r\n const newItems = arrayMove(items, oldIndex, newIndex);\r\n\r\n onDragEnd(newItems);\r\n }}>\r\n <SortableContext\r\n items={items.map(getId)}\r\n strategy={verticalListSortingStrategy}>\r\n <List\r\n items={items}\r\n sx={sx}\r\n title={title}\r\n getKey={getId}\r\n getContent={(item, index) => {\r\n const id = getId(item);\r\n\r\n return (\r\n <Draggable key={id} id={id} sx={draggableSx}>\r\n {getItem(item, index)}\r\n </Draggable>\r\n );\r\n }}\r\n />\r\n </SortableContext>\r\n </DndContext>\r\n );\r\n}\r\n\r\nexport default DragList;\r\n"],"names":["useSensors","useSensor","PointerSensor","_jsx","DndContext","closestCenter","arrayMove","SortableContext","verticalListSortingStrategy","List","Draggable"],"mappings":";;;;;;;;;;AAkBA,SAAS,QAAQ,CAAI,EACnB,KAAK,EACL,OAAO,EACP,KAAK,EACL,SAAS,EACT,EAAE,EACF,KAAK,EACL,WAAW,GACM,EAAA;AACjB,IAAA,MAAM,OAAO,GAAGA,mBAAU,CACxBC,kBAAS,CAACC,sBAAa,EAAE;AACvB,QAAA,oBAAoB,EAAE;AACpB,YAAA,QAAQ,EAAE,CAAC;AACZ,SAAA;AACF,KAAA,CAAC,CACH,CAAC;AAEF,IAAA,QACEC,cAAC,CAAAC,mBAAU,EACT,EAAA,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAEC,sBAAa,EACjC,SAAS,EAAE,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;YAE/B,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;YAErE,MAAM,QAAQ,GAAGC,sBAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEtD,SAAS,CAAC,QAAQ,CAAC,CAAC;AACtB,SAAC,YACDH,cAAC,CAAAI,4BAAe,IACd,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EACvB,QAAQ,EAAEC,wCAA2B,EACrC,QAAA,EAAAL,cAAA,CAACM,eAAI,EACH,EAAA,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,EACb,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,KAAI;AAC1B,oBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;oBAEvB,QACEN,eAACO,oBAAS,EAAA,EAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,YACxC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EADP,EAAA,EAAE,CAEN,EACZ;AACJ,iBAAC,EACD,CAAA,EAAA,CACc,EACP,CAAA,EACb;AACJ;;;;"}
@@ -25,6 +25,7 @@ const Draggable = ({ id, sx, children, }) => {
25
25
  ...(isDragging ? sx?.dragging : {}),
26
26
  transform: utilities_esm.CSS.Translate.toString(transform),
27
27
  transition,
28
+ cursor: 'pointer',
28
29
  };
29
30
  return (jsxRuntime.jsx(Box["default"], { ref: setNodeRef, style: style, ...listeners, ...attributes, children: children }));
30
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"draggable.js","sources":["../../../../../src/components/drag-list/draggable/draggable.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { useDraggable } from '@dnd-kit/core';\r\nimport { useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';\r\nimport { CSS } from '@dnd-kit/utilities';\r\nimport { Box } from '@mui/material';\r\n\r\nimport { DraggableProps } from './types';\r\n\r\nconst Draggable: React.FC<React.PropsWithChildren<DraggableProps>> = ({\r\n id,\r\n sx,\r\n children,\r\n}) => {\r\n const { isDragging } = useDraggable({\r\n id,\r\n });\r\n\r\n const { attributes, listeners, setNodeRef, transform, transition } =\r\n useSortable({\r\n id,\r\n strategy: verticalListSortingStrategy,\r\n transition: {\r\n duration: 300,\r\n easing: 'cubic-bezier(0.25, 1, 0.5, 1)',\r\n },\r\n });\r\n\r\n const style: React.CSSProperties = {\r\n ...sx?.default,\r\n ...(isDragging ? sx?.dragging : {}),\r\n transform: CSS.Translate.toString(transform),\r\n transition,\r\n };\r\n\r\n return (\r\n <Box ref={setNodeRef} style={style} {...listeners} {...attributes}>\r\n {children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Draggable;\r\n"],"names":["useDraggable","useSortable","verticalListSortingStrategy","CSS","_jsx","Box"],"mappings":";;;;;;;;;;AAQM,MAAA,SAAS,GAAsD,CAAC,EACpE,EAAE,EACF,EAAE,EACF,QAAQ,GACT,KAAI;AACH,IAAA,MAAM,EAAE,UAAU,EAAE,GAAGA,qBAAY,CAAC;QAClC,EAAE;AACH,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,GAChEC,wBAAW,CAAC;QACV,EAAE;AACF,QAAA,QAAQ,EAAEC,wCAA2B;AACrC,QAAA,UAAU,EAAE;AACV,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,MAAM,EAAE,+BAA+B;AACxC,SAAA;AACF,KAAA,CAAC,CAAC;AAEL,IAAA,MAAM,KAAK,GAAwB;QACjC,GAAG,EAAE,EAAE,OAAO;AACd,QAAA,IAAI,UAAU,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,CAAC;QACnC,SAAS,EAAEC,iBAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5C,UAAU;KACX,CAAC;AAEF,IAAA,QACEC,cAAC,CAAAC,cAAG,IAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAA,GAAM,SAAS,EAAM,GAAA,UAAU,YAC9D,QAAQ,EAAA,CACL,EACN;AACJ;;;;"}
1
+ {"version":3,"file":"draggable.js","sources":["../../../../../src/components/drag-list/draggable/draggable.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { useDraggable } from '@dnd-kit/core';\r\nimport { useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';\r\nimport { CSS } from '@dnd-kit/utilities';\r\nimport { Box } from '@mui/material';\r\n\r\nimport { DraggableProps } from './types';\r\n\r\nconst Draggable: React.FC<React.PropsWithChildren<DraggableProps>> = ({\r\n id,\r\n sx,\r\n children,\r\n}) => {\r\n const { isDragging } = useDraggable({\r\n id,\r\n });\r\n\r\n const { attributes, listeners, setNodeRef, transform, transition } =\r\n useSortable({\r\n id,\r\n strategy: verticalListSortingStrategy,\r\n transition: {\r\n duration: 300,\r\n easing: 'cubic-bezier(0.25, 1, 0.5, 1)',\r\n },\r\n });\r\n\r\n const style = {\r\n ...sx?.default,\r\n ...(isDragging ? sx?.dragging : {}),\r\n transform: CSS.Translate.toString(transform),\r\n transition,\r\n cursor: 'pointer',\r\n } as React.CSSProperties;\r\n\r\n return (\r\n <Box ref={setNodeRef} style={style} {...listeners} {...attributes}>\r\n {children}\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Draggable;\r\n"],"names":["useDraggable","useSortable","verticalListSortingStrategy","CSS","_jsx","Box"],"mappings":";;;;;;;;;;AAQM,MAAA,SAAS,GAAsD,CAAC,EACpE,EAAE,EACF,EAAE,EACF,QAAQ,GACT,KAAI;AACH,IAAA,MAAM,EAAE,UAAU,EAAE,GAAGA,qBAAY,CAAC;QAClC,EAAE;AACH,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,GAChEC,wBAAW,CAAC;QACV,EAAE;AACF,QAAA,QAAQ,EAAEC,wCAA2B;AACrC,QAAA,UAAU,EAAE;AACV,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,MAAM,EAAE,+BAA+B;AACxC,SAAA;AACF,KAAA,CAAC,CAAC;AAEL,IAAA,MAAM,KAAK,GAAG;QACZ,GAAG,EAAE,EAAE,OAAO;AACd,QAAA,IAAI,UAAU,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,CAAC;QACnC,SAAS,EAAEC,iBAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5C,UAAU;AACV,QAAA,MAAM,EAAE,SAAS;KACK,CAAC;AAEzB,IAAA,QACEC,cAAC,CAAAC,cAAG,IAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAA,GAAM,SAAS,EAAM,GAAA,UAAU,YAC9D,QAAQ,EAAA,CACL,EACN;AACJ;;;;"}
@@ -17,16 +17,26 @@ var Box = require('../../node_modules/@mui/material/esm/Box/Box.js');
17
17
  *
18
18
  * @returns {JSX.Element} The rendered form component with form context.
19
19
  */
20
- function CustomForm({ children, form, sx = {}, onSubmit, }) {
21
- const { handleSubmit } = form;
22
- return (jsxRuntime.jsx(index_esm.FormProvider, { ...form, children: jsxRuntime.jsx(Box["default"], { component: "form", sx: {
23
- display: 'grid',
24
- alignContent: 'flex-start',
25
- gap: '15px',
26
- ...sx,
27
- }, onSubmit: () => {
28
- handleSubmit(onSubmit);
29
- }, children: children }) }));
20
+ function CustomForm({ form, sx = {}, fields, buttons, observers, onSubmit, }) {
21
+ const { control } = form;
22
+ return (jsxRuntime.jsx(index_esm.FormProvider, { ...form, children: jsxRuntime.jsxs(index_esm.Form, { control: control, onSubmit: onSubmit, style: {
23
+ width: '100%',
24
+ height: '100%',
25
+ }, children: [jsxRuntime.jsxs(Box["default"], { sx: {
26
+ display: 'grid',
27
+ alignContent: 'flex-start',
28
+ gap: '15px',
29
+ ...sx,
30
+ }, children: [jsxRuntime.jsx(Box["default"], { sx: {
31
+ display: 'grid',
32
+ gap: '15px',
33
+ ...fields.sx,
34
+ }, children: fields.content }), buttons?.content ? (jsxRuntime.jsx(Box["default"], { sx: {
35
+ display: 'flex',
36
+ alignItems: 'center',
37
+ gap: '15px',
38
+ ...buttons.sx,
39
+ }, children: buttons.content })) : null] }), observers?.content] }) }));
30
40
  }
31
41
 
32
42
  exports["default"] = CustomForm;
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","sources":["../../../../src/components/form/form.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { Box, SxProps } from '@mui/material';\r\nimport {\r\n FieldValues,\r\n FormProvider,\r\n SubmitHandler,\r\n UseFormReturn,\r\n} from 'react-hook-form';\r\n\r\ninterface CustomFormProp<T extends FieldValues> {\r\n form: UseFormReturn<T>;\r\n\r\n onSubmit: SubmitHandler<T>;\r\n\r\n sx?: SxProps;\r\n}\r\n\r\n/**\r\n * Используем этот компонент как основную обертку для формы\r\n * Все поля должны хранится при инициализации формы и быть доступны через контекст формы\r\n * @template T - Интрефейс данных формы.\r\n * @param {React.ReactNode} children - Все компоненты, которым нужен контекст фор.\r\n * @param {UseFormReturn<T>} form - Форма useForm, которая содержит все поля.\r\n * @param {SxProps} [sx={}] - Опциональные стили самой формы.\r\n * @param {SubmitHandler<T>} onSubmit - Функция обработки отправки формы.\r\n *\r\n * @returns {JSX.Element} The rendered form component with form context.\r\n */\r\nfunction CustomForm<T extends FieldValues>({\r\n children,\r\n form,\r\n sx = {},\r\n onSubmit,\r\n}: React.PropsWithChildren<CustomFormProp<T>>) {\r\n const { handleSubmit } = form;\r\n\r\n return (\r\n <FormProvider {...form}>\r\n <Box\r\n component=\"form\"\r\n sx={{\r\n display: 'grid',\r\n\r\n alignContent: 'flex-start',\r\n\r\n gap: '15px',\r\n\r\n ...sx,\r\n }}\r\n onSubmit={() => {\r\n handleSubmit(onSubmit);\r\n }}>\r\n {children}\r\n </Box>\r\n </FormProvider>\r\n );\r\n}\r\n\r\nexport default CustomForm;\r\n"],"names":["_jsx","FormProvider","Box"],"mappings":";;;;;;;;AAiBA;;;;;;;;;;AAUG;AACH,SAAS,UAAU,CAAwB,EACzC,QAAQ,EACR,IAAI,EACJ,EAAE,GAAG,EAAE,EACP,QAAQ,GACmC,EAAA;AAC3C,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;AAE9B,IAAA,QACEA,cAAA,CAACC,sBAAY,EAAA,EAAA,GAAK,IAAI,EACpB,QAAA,EAAAD,cAAA,CAACE,cAAG,EAAA,EACF,SAAS,EAAC,MAAM,EAChB,EAAE,EAAE;AACF,gBAAA,OAAO,EAAE,MAAM;AAEf,gBAAA,YAAY,EAAE,YAAY;AAE1B,gBAAA,GAAG,EAAE,MAAM;AAEX,gBAAA,GAAG,EAAE;aACN,EACD,QAAQ,EAAE,MAAK;gBACb,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzB,aAAC,EACA,QAAA,EAAA,QAAQ,EACL,CAAA,EAAA,CACO,EACf;AACJ;;;;"}
1
+ {"version":3,"file":"form.js","sources":["../../../../src/components/form/form.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { Box, SxProps } from '@mui/material';\r\nimport {\r\n FieldValues,\r\n Form,\r\n FormProvider,\r\n FormSubmitHandler,\r\n UseFormReturn,\r\n} from 'react-hook-form';\r\n\r\ninterface CustomFormProp<T extends FieldValues> {\r\n form: UseFormReturn<T>;\r\n\r\n onSubmit: FormSubmitHandler<T>;\r\n\r\n sx?: SxProps;\r\n\r\n fields: {\r\n content: React.ReactNode;\r\n sx?: SxProps;\r\n };\r\n\r\n buttons?: {\r\n content?: React.ReactNode;\r\n sx?: SxProps;\r\n };\r\n\r\n observers?: {\r\n content?: React.ReactNode;\r\n };\r\n}\r\n\r\n/**\r\n * Используем этот компонент как основную обертку для формы\r\n * Все поля должны хранится при инициализации формы и быть доступны через контекст формы\r\n * @template T - Интрефейс данных формы.\r\n * @param {React.ReactNode} children - Все компоненты, которым нужен контекст фор.\r\n * @param {UseFormReturn<T>} form - Форма useForm, которая содержит все поля.\r\n * @param {SxProps} [sx={}] - Опциональные стили самой формы.\r\n * @param {SubmitHandler<T>} onSubmit - Функция обработки отправки формы.\r\n *\r\n * @returns {JSX.Element} The rendered form component with form context.\r\n */\r\nfunction CustomForm<T extends FieldValues>({\r\n form,\r\n sx = {},\r\n fields,\r\n buttons,\r\n observers,\r\n onSubmit,\r\n}: CustomFormProp<T>) {\r\n const { control } = form;\r\n\r\n return (\r\n <FormProvider {...form}>\r\n <Form\r\n control={control}\r\n onSubmit={onSubmit}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n }}>\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n\r\n alignContent: 'flex-start',\r\n\r\n gap: '15px',\r\n\r\n ...sx,\r\n }}>\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n\r\n gap: '15px',\r\n\r\n ...fields.sx,\r\n }}>\r\n {fields.content}\r\n </Box>\r\n\r\n {buttons?.content ? (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n\r\n alignItems: 'center',\r\n\r\n gap: '15px',\r\n\r\n ...buttons.sx,\r\n }}>\r\n {buttons.content}\r\n </Box>\r\n ) : null}\r\n </Box>\r\n\r\n {observers?.content}\r\n </Form>\r\n </FormProvider>\r\n );\r\n}\r\n\r\nexport default CustomForm;\r\n"],"names":["_jsx","FormProvider","_jsxs","Form","Box"],"mappings":";;;;;;;;AAgCA;;;;;;;;;;AAUG;AACH,SAAS,UAAU,CAAwB,EACzC,IAAI,EACJ,EAAE,GAAG,EAAE,EACP,MAAM,EACN,OAAO,EACP,SAAS,EACT,QAAQ,GACU,EAAA;AAClB,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;AAEzB,IAAA,QACEA,cAAC,CAAAC,sBAAY,OAAK,IAAI,EAAA,QAAA,EACpBC,gBAACC,cAAI,EAAA,EACH,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,MAAM,EAAE,MAAM;AACf,aAAA,EAAA,QAAA,EAAA,CACDD,eAAC,CAAAE,cAAG,EACF,EAAA,EAAE,EAAE;AACF,wBAAA,OAAO,EAAE,MAAM;AAEf,wBAAA,YAAY,EAAE,YAAY;AAE1B,wBAAA,GAAG,EAAE,MAAM;AAEX,wBAAA,GAAG,EAAE;AACN,qBAAA,EAAA,QAAA,EAAA,CACDJ,cAAC,CAAAI,cAAG,EACF,EAAA,EAAE,EAAE;AACF,gCAAA,OAAO,EAAE,MAAM;AAEf,gCAAA,GAAG,EAAE,MAAM;gCAEX,GAAG,MAAM,CAAC,EAAE;AACb,6BAAA,EAAA,QAAA,EACA,MAAM,CAAC,OAAO,EACX,CAAA,EAEL,OAAO,EAAE,OAAO,IACfJ,cAAA,CAACI,cAAG,EAAA,EACF,EAAE,EAAE;AACF,gCAAA,OAAO,EAAE,MAAM;AAEf,gCAAA,UAAU,EAAE,QAAQ;AAEpB,gCAAA,GAAG,EAAE,MAAM;gCAEX,GAAG,OAAO,CAAC,EAAE;AACd,6BAAA,EAAA,QAAA,EACA,OAAO,CAAC,OAAO,EACZ,CAAA,IACJ,IAAI,CAAA,EAAA,CACJ,EAEL,SAAS,EAAE,OAAO,CACd,EAAA,CAAA,EAAA,CACM,EACf;AACJ;;;;"}
@@ -3,14 +3,36 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
+ var React = require('react');
6
7
  var index_esm = require('../../node_modules/react-hook-form/dist/index.esm.js');
7
8
  var TextField = require('../../node_modules/@mui/material/esm/TextField/TextField.js');
8
9
 
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n["default"] = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
29
+
9
30
  function CustomInput(props) {
10
31
  const { name } = props;
32
+ const textFieldId = React__namespace.useId();
11
33
  const { control } = index_esm.useFormContext();
12
34
  return (jsxRuntime.jsx(index_esm.Controller, { name: name, control: control, render: ({ field }) => {
13
- return jsxRuntime.jsx(TextField["default"], { ...props, ...field, size: "small" });
35
+ return (jsxRuntime.jsx(TextField["default"], { id: textFieldId, ...props, ...field, size: "small" }));
14
36
  } }));
15
37
  }
16
38
 
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sources":["../../../../src/components/input/input.tsx"],"sourcesContent":["import { TextField } from '@mui/material';\r\nimport { Controller, useFormContext } from 'react-hook-form';\r\n\r\nimport { InputProps } from './types';\r\n\r\nfunction CustomInput<T>(props: InputProps<T>) {\r\n const { name } = props;\r\n\r\n const { control } = useFormContext();\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field }) => {\r\n return <TextField {...props} {...field} size=\"small\" />;\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport default CustomInput;\r\n"],"names":["useFormContext","_jsx","Controller","TextField"],"mappings":";;;;;;;;AAKA,SAAS,WAAW,CAAI,KAAoB,EAAA;AAC1C,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;AAEvB,IAAA,MAAM,EAAE,OAAO,EAAE,GAAGA,wBAAc,EAAE,CAAC;AAErC,IAAA,QACEC,cAAC,CAAAC,oBAAU,IACT,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAI;YACpB,OAAOD,cAAA,CAACE,oBAAS,EAAA,EAAA,GAAK,KAAK,EAAA,GAAM,KAAK,EAAE,IAAI,EAAC,OAAO,EAAA,CAAG,CAAC;SACzD,EAAA,CACD,EACF;AACJ;;;;"}
1
+ {"version":3,"file":"input.js","sources":["../../../../src/components/input/input.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { TextField } from '@mui/material';\r\nimport { Controller, useFormContext } from 'react-hook-form';\r\n\r\nimport { CustomInputProps } from './types';\r\n\r\nfunction CustomInput<T>(props: CustomInputProps<T>) {\r\n const { name } = props;\r\n\r\n const textFieldId = React.useId();\r\n\r\n const { control } = useFormContext();\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field }) => {\r\n return (\r\n <TextField id={textFieldId} {...props} {...field} size=\"small\" />\r\n );\r\n }}\r\n />\r\n );\r\n}\r\n\r\nexport default CustomInput;\r\n"],"names":["React","useFormContext","_jsx","Controller","TextField"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,SAAS,WAAW,CAAI,KAA0B,EAAA;AAChD,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;AAEvB,IAAA,MAAM,WAAW,GAAGA,gBAAK,CAAC,KAAK,EAAE,CAAC;AAElC,IAAA,MAAM,EAAE,OAAO,EAAE,GAAGC,wBAAc,EAAE,CAAC;AAErC,IAAA,QACEC,cAAC,CAAAC,oBAAU,IACT,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAI;AACpB,YAAA,QACED,cAAC,CAAAE,oBAAS,EAAC,EAAA,EAAE,EAAE,WAAW,EAAA,GAAM,KAAK,EAAA,GAAM,KAAK,EAAE,IAAI,EAAC,OAAO,EAAA,CAAG,EACjE;SACH,EAAA,CACD,EACF;AACJ;;;;"}
@@ -9,7 +9,7 @@ var Typography = require('../../node_modules/@mui/material/esm/Typography/Typogr
9
9
  var List = require('../../node_modules/@mui/material/esm/List/List.js');
10
10
  var ListItem = require('../../node_modules/@mui/material/esm/ListItem/ListItem.js');
11
11
 
12
- function CustomList({ items, columnsCount = 1, getContent, title, getKey, onClick, sx, isEmptyExtreme = false, }) {
12
+ function CustomList({ items, columnsCount = 1, getContent, title, getKey, onClick, sx, }) {
13
13
  const isNoData = items.length === 0;
14
14
  return (jsxRuntime.jsxs(Box["default"], { sx: {
15
15
  display: 'grid',
@@ -18,16 +18,16 @@ function CustomList({ items, columnsCount = 1, getContent, title, getKey, onClic
18
18
  }, children: [title ? (jsxRuntime.jsx(Typography["default"], { variant: "h6", noWrap: true, sx: {
19
19
  textAlign: 'center',
20
20
  fontWeight: 700,
21
- }, children: title })) : null, isNoData ? (jsxRuntime.jsx(noData["default"], {})) : (jsxRuntime.jsxs(List["default"], { sx: {
21
+ }, children: title })) : null, isNoData ? (jsxRuntime.jsx(noData["default"], {})) : (jsxRuntime.jsx(List["default"], { sx: {
22
22
  display: 'grid',
23
23
  gridTemplateColumns: `repeat(${columnsCount}, 1fr)`,
24
24
  gap: '15px',
25
25
  ...sx?.list,
26
- }, disablePadding: true, children: [isEmptyExtreme ? jsxRuntime.jsx(ListItem["default"], {}) : null, items.map((item, index) => (jsxRuntime.jsx(ListItem["default"], { onClick: () => {
27
- onClick?.(item, index);
28
- }, sx: {
29
- ...sx?.item,
30
- }, disablePadding: true, children: getContent(item, index) }, getKey(item, index)))), isEmptyExtreme ? jsxRuntime.jsx(ListItem["default"], {}) : null] }))] }));
26
+ }, disablePadding: true, children: items.map((item, index) => (jsxRuntime.jsx(ListItem["default"], { onClick: () => {
27
+ onClick?.(item, index);
28
+ }, sx: {
29
+ ...sx?.item,
30
+ }, disablePadding: true, children: getContent(item, index) }, getKey(item, index)))) }))] }));
31
31
  }
32
32
 
33
33
  exports["default"] = CustomList;
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sources":["../../../../src/components/list/list.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { Box, List, ListItem, SxProps, Typography } from '@mui/material';\r\n\r\nimport { NoData } from '../no-data';\r\n\r\ninterface CustomListProps<T> {\r\n items: T[];\r\n columnsCount?: number;\r\n title?: string;\r\n\r\n getContent: (item: T, index: number) => React.JSX.Element;\r\n getKey: (item: T, index: number) => string | number;\r\n onClick?: (item: T, index: number) => void;\r\n\r\n sx?: {\r\n list?: SxProps;\r\n item?: SxProps;\r\n };\r\n\r\n isEmptyExtreme?: boolean;\r\n}\r\n\r\nfunction CustomList<T>({\r\n items,\r\n columnsCount = 1,\r\n getContent,\r\n title,\r\n getKey,\r\n onClick,\r\n sx,\r\n isEmptyExtreme = false,\r\n}: CustomListProps<T>) {\r\n const isNoData = items.length === 0;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n\r\n gridTemplateColumns: '1fr',\r\n\r\n gap: '15px',\r\n }}>\r\n {title ? (\r\n <Typography\r\n variant=\"h6\"\r\n noWrap\r\n sx={{\r\n textAlign: 'center',\r\n\r\n fontWeight: 700,\r\n }}>\r\n {title}\r\n </Typography>\r\n ) : null}\r\n\r\n {isNoData ? (\r\n <NoData />\r\n ) : (\r\n <List\r\n sx={{\r\n display: 'grid',\r\n\r\n gridTemplateColumns: `repeat(${columnsCount}, 1fr)`,\r\n\r\n gap: '15px',\r\n\r\n ...sx?.list,\r\n }}\r\n disablePadding>\r\n {isEmptyExtreme ? <ListItem /> : null}\r\n\r\n {items.map((item, index) => (\r\n <ListItem\r\n key={getKey(item, index)}\r\n onClick={() => {\r\n onClick?.(item, index);\r\n }}\r\n sx={{\r\n ...sx?.item,\r\n }}\r\n disablePadding>\r\n {getContent(item, index)}\r\n </ListItem>\r\n ))}\r\n\r\n {isEmptyExtreme ? <ListItem /> : null}\r\n </List>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default CustomList;\r\n"],"names":["_jsxs","Box","_jsx","Typography","NoData","List","ListItem"],"mappings":";;;;;;;;;;;AAsBA,SAAS,UAAU,CAAI,EACrB,KAAK,EACL,YAAY,GAAG,CAAC,EAChB,UAAU,EACV,KAAK,EACL,MAAM,EACN,OAAO,EACP,EAAE,EACF,cAAc,GAAG,KAAK,GACH,EAAA;AACnB,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;AAEpC,IAAA,QACEA,eAAA,CAACC,cAAG,EAAA,EACF,EAAE,EAAE;AACF,YAAA,OAAO,EAAE,MAAM;AAEf,YAAA,mBAAmB,EAAE,KAAK;AAE1B,YAAA,GAAG,EAAE,MAAM;AACZ,SAAA,EAAA,QAAA,EAAA,CACA,KAAK,IACJC,cAAC,CAAAC,qBAAU,EACT,EAAA,OAAO,EAAC,IAAI,EACZ,MAAM,EAAA,IAAA,EACN,EAAE,EAAE;AACF,oBAAA,SAAS,EAAE,QAAQ;AAEnB,oBAAA,UAAU,EAAE,GAAG;iBAChB,EACA,QAAA,EAAA,KAAK,EACK,CAAA,IACX,IAAI,EAEP,QAAQ,IACPD,cAAC,CAAAE,iBAAM,EAAG,EAAA,CAAA,KAEVJ,eAAC,CAAAK,eAAI,EACH,EAAA,EAAE,EAAE;AACF,oBAAA,OAAO,EAAE,MAAM;oBAEf,mBAAmB,EAAE,CAAU,OAAA,EAAA,YAAY,CAAQ,MAAA,CAAA;AAEnD,oBAAA,GAAG,EAAE,MAAM;oBAEX,GAAG,EAAE,EAAE,IAAI;AACZ,iBAAA,EACD,cAAc,EAAA,IAAA,EAAA,QAAA,EAAA,CACb,cAAc,GAAGH,cAAA,CAACI,mBAAQ,EAAA,EAAA,CAAG,GAAG,IAAI,EAEpC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MACrBJ,cAAA,CAACI,mBAAQ,EAAA,EAEP,OAAO,EAAE,MAAK;AACZ,4BAAA,OAAO,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;yBACxB,EACD,EAAE,EAAE;4BACF,GAAG,EAAE,EAAE,IAAI;AACZ,yBAAA,EACD,cAAc,EAAA,IAAA,EAAA,QAAA,EACb,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA,EARnB,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CASf,CACZ,CAAC,EAED,cAAc,GAAGJ,eAACI,mBAAQ,EAAA,EAAA,CAAG,GAAG,IAAI,CAAA,EAAA,CAChC,CACR,CAAA,EAAA,CACG,EACN;AACJ;;;;"}
1
+ {"version":3,"file":"list.js","sources":["../../../../src/components/list/list.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { Box, List, ListItem, SxProps, Typography } from '@mui/material';\r\n\r\nimport { NoData } from '../no-data';\r\n\r\ninterface CustomListProps<T> {\r\n items: T[];\r\n columnsCount?: number;\r\n title?: string;\r\n\r\n getContent: (item: T, index: number) => React.JSX.Element;\r\n getKey: (item: T, index: number) => string | number;\r\n onClick?: (item: T, index: number) => void;\r\n\r\n sx?: {\r\n list?: SxProps;\r\n item?: SxProps;\r\n };\r\n}\r\n\r\nfunction CustomList<T>({\r\n items,\r\n columnsCount = 1,\r\n getContent,\r\n title,\r\n getKey,\r\n onClick,\r\n sx,\r\n}: CustomListProps<T>) {\r\n const isNoData = items.length === 0;\r\n\r\n return (\r\n <Box\r\n sx={{\r\n display: 'grid',\r\n\r\n gridTemplateColumns: '1fr',\r\n\r\n gap: '15px',\r\n }}>\r\n {title ? (\r\n <Typography\r\n variant=\"h6\"\r\n noWrap\r\n sx={{\r\n textAlign: 'center',\r\n\r\n fontWeight: 700,\r\n }}>\r\n {title}\r\n </Typography>\r\n ) : null}\r\n\r\n {isNoData ? (\r\n <NoData />\r\n ) : (\r\n <List\r\n sx={{\r\n display: 'grid',\r\n\r\n gridTemplateColumns: `repeat(${columnsCount}, 1fr)`,\r\n\r\n gap: '15px',\r\n\r\n ...sx?.list,\r\n }}\r\n disablePadding>\r\n {items.map((item, index) => (\r\n <ListItem\r\n key={getKey(item, index)}\r\n onClick={() => {\r\n onClick?.(item, index);\r\n }}\r\n sx={{\r\n ...sx?.item,\r\n }}\r\n disablePadding>\r\n {getContent(item, index)}\r\n </ListItem>\r\n ))}\r\n </List>\r\n )}\r\n </Box>\r\n );\r\n}\r\n\r\nexport default CustomList;\r\n"],"names":["_jsxs","Box","_jsx","Typography","NoData","List","ListItem"],"mappings":";;;;;;;;;;;AAoBA,SAAS,UAAU,CAAI,EACrB,KAAK,EACL,YAAY,GAAG,CAAC,EAChB,UAAU,EACV,KAAK,EACL,MAAM,EACN,OAAO,EACP,EAAE,GACiB,EAAA;AACnB,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;AAEpC,IAAA,QACEA,eAAA,CAACC,cAAG,EAAA,EACF,EAAE,EAAE;AACF,YAAA,OAAO,EAAE,MAAM;AAEf,YAAA,mBAAmB,EAAE,KAAK;AAE1B,YAAA,GAAG,EAAE,MAAM;AACZ,SAAA,EAAA,QAAA,EAAA,CACA,KAAK,IACJC,cAAC,CAAAC,qBAAU,EACT,EAAA,OAAO,EAAC,IAAI,EACZ,MAAM,EAAA,IAAA,EACN,EAAE,EAAE;AACF,oBAAA,SAAS,EAAE,QAAQ;AAEnB,oBAAA,UAAU,EAAE,GAAG;iBAChB,EACA,QAAA,EAAA,KAAK,EACK,CAAA,IACX,IAAI,EAEP,QAAQ,IACPD,cAAC,CAAAE,iBAAM,EAAG,EAAA,CAAA,KAEVF,cAAC,CAAAG,eAAI,EACH,EAAA,EAAE,EAAE;AACF,oBAAA,OAAO,EAAE,MAAM;oBAEf,mBAAmB,EAAE,CAAU,OAAA,EAAA,YAAY,CAAQ,MAAA,CAAA;AAEnD,oBAAA,GAAG,EAAE,MAAM;oBAEX,GAAG,EAAE,EAAE,IAAI;iBACZ,EACD,cAAc,kBACb,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MACrBH,cAAC,CAAAI,mBAAQ,IAEP,OAAO,EAAE,MAAK;AACZ,wBAAA,OAAO,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;qBACxB,EACD,EAAE,EAAE;wBACF,GAAG,EAAE,EAAE,IAAI;qBACZ,EACD,cAAc,kBACb,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA,EARnB,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CASf,CACZ,CAAC,EACG,CAAA,CACR,CACG,EAAA,CAAA,EACN;AACJ;;;;"}
@@ -573,7 +573,125 @@ function useController(props) {
573
573
  */
574
574
  const Controller = (props) => props.render(useController(props));
575
575
 
576
+ const flatten = (obj) => {
577
+ const output = {};
578
+ for (const key of Object.keys(obj)) {
579
+ if (isObjectType(obj[key]) && obj[key] !== null) {
580
+ const nested = flatten(obj[key]);
581
+ for (const nestedKey of Object.keys(nested)) {
582
+ output[`${key}.${nestedKey}`] = nested[nestedKey];
583
+ }
584
+ }
585
+ else {
586
+ output[key] = obj[key];
587
+ }
588
+ }
589
+ return output;
590
+ };
591
+
592
+ const POST_REQUEST = 'post';
593
+ /**
594
+ * Form component to manage submission.
595
+ *
596
+ * @param props - to setup submission detail. {@link FormProps}
597
+ *
598
+ * @returns form component or headless render prop.
599
+ *
600
+ * @example
601
+ * ```tsx
602
+ * function App() {
603
+ * const { control, formState: { errors } } = useForm();
604
+ *
605
+ * return (
606
+ * <Form action="/api" control={control}>
607
+ * <input {...register("name")} />
608
+ * <p>{errors?.root?.server && 'Server error'}</p>
609
+ * <button>Submit</button>
610
+ * </Form>
611
+ * );
612
+ * }
613
+ * ```
614
+ */
615
+ function Form(props) {
616
+ const methods = useFormContext();
617
+ const [mounted, setMounted] = React__default["default"].useState(false);
618
+ const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;
619
+ const submit = async (event) => {
620
+ let hasError = false;
621
+ let type = '';
622
+ await control.handleSubmit(async (data) => {
623
+ const formData = new FormData();
624
+ let formDataJson = '';
625
+ try {
626
+ formDataJson = JSON.stringify(data);
627
+ }
628
+ catch (_a) { }
629
+ const flattenFormValues = flatten(control._formValues);
630
+ for (const key in flattenFormValues) {
631
+ formData.append(key, flattenFormValues[key]);
632
+ }
633
+ if (onSubmit) {
634
+ await onSubmit({
635
+ data,
636
+ event,
637
+ method,
638
+ formData,
639
+ formDataJson,
640
+ });
641
+ }
642
+ if (action) {
643
+ try {
644
+ const shouldStringifySubmissionData = [
645
+ headers && headers['Content-Type'],
646
+ encType,
647
+ ].some((value) => value && value.includes('json'));
648
+ const response = await fetch(String(action), {
649
+ method,
650
+ headers: {
651
+ ...headers,
652
+ ...(encType && encType !== 'multipart/form-data'
653
+ ? { 'Content-Type': encType }
654
+ : {}),
655
+ },
656
+ body: shouldStringifySubmissionData ? formDataJson : formData,
657
+ });
658
+ if (response &&
659
+ (validateStatus
660
+ ? !validateStatus(response.status)
661
+ : response.status < 200 || response.status >= 300)) {
662
+ hasError = true;
663
+ onError && onError({ response });
664
+ type = String(response.status);
665
+ }
666
+ else {
667
+ onSuccess && onSuccess({ response });
668
+ }
669
+ }
670
+ catch (error) {
671
+ hasError = true;
672
+ onError && onError({ error });
673
+ }
674
+ }
675
+ })(event);
676
+ if (hasError && props.control) {
677
+ props.control._subjects.state.next({
678
+ isSubmitSuccessful: false,
679
+ });
680
+ props.control.setError('root.server', {
681
+ type,
682
+ });
683
+ }
684
+ };
685
+ React__default["default"].useEffect(() => {
686
+ setMounted(true);
687
+ }, []);
688
+ return render ? (React__default["default"].createElement(React__default["default"].Fragment, null, render({
689
+ submit,
690
+ }))) : (React__default["default"].createElement("form", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));
691
+ }
692
+
576
693
  exports.Controller = Controller;
694
+ exports.Form = Form;
577
695
  exports.FormProvider = FormProvider;
578
696
  exports.get = get;
579
697
  exports.set = set;