@qijenchen/design-system 0.1.0-beta.80 → 0.1.0-beta.82

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 (548) hide show
  1. package/CLAUDE.md +1 -1
  2. package/dist/components/Alert/alert.d.ts +5 -0
  3. package/dist/components/Alert/alert.d.ts.map +1 -1
  4. package/dist/components/Alert/alert.js +4 -1
  5. package/dist/components/Alert/alert.js.map +1 -1
  6. package/dist/components/AppShell/app-shell.d.ts +1 -1
  7. package/dist/components/AppShell/app-shell.js.map +1 -1
  8. package/dist/components/AspectRatio/aspect-ratio.d.ts +2 -1
  9. package/dist/components/AspectRatio/aspect-ratio.d.ts.map +1 -1
  10. package/dist/components/AspectRatio/aspect-ratio.js +1 -1
  11. package/dist/components/AspectRatio/aspect-ratio.js.map +1 -1
  12. package/dist/components/Avatar/avatar.d.ts +3 -2
  13. package/dist/components/Avatar/avatar.d.ts.map +1 -1
  14. package/dist/components/Avatar/avatar.js +8 -3
  15. package/dist/components/Avatar/avatar.js.map +1 -1
  16. package/dist/components/Badge/badge.d.ts.map +1 -1
  17. package/dist/components/Badge/badge.js +2 -1
  18. package/dist/components/Badge/badge.js.map +1 -1
  19. package/dist/components/Breadcrumb/breadcrumb.d.ts +14 -1
  20. package/dist/components/Breadcrumb/breadcrumb.d.ts.map +1 -1
  21. package/dist/components/Breadcrumb/breadcrumb.js +9 -3
  22. package/dist/components/Breadcrumb/breadcrumb.js.map +1 -1
  23. package/dist/components/BulkActionBar/bulk-action-bar.d.ts +4 -1
  24. package/dist/components/BulkActionBar/bulk-action-bar.d.ts.map +1 -1
  25. package/dist/components/BulkActionBar/bulk-action-bar.js +2 -2
  26. package/dist/components/BulkActionBar/bulk-action-bar.js.map +1 -1
  27. package/dist/components/Button/button.d.ts +4 -4
  28. package/dist/components/Button/button.d.ts.map +1 -1
  29. package/dist/components/Button/button.js +73 -44
  30. package/dist/components/Button/button.js.map +1 -1
  31. package/dist/components/Button/index.d.ts +1 -0
  32. package/dist/components/Button/index.d.ts.map +1 -1
  33. package/dist/components/Button/index.js +3 -0
  34. package/dist/components/Button/index.js.map +1 -1
  35. package/dist/components/Calendar/calendar.d.ts +3 -1
  36. package/dist/components/Calendar/calendar.d.ts.map +1 -1
  37. package/dist/components/Calendar/calendar.js +40 -17
  38. package/dist/components/Calendar/calendar.js.map +1 -1
  39. package/dist/components/Carousel/carousel.d.ts +1 -1
  40. package/dist/components/Carousel/carousel.d.ts.map +1 -1
  41. package/dist/components/Carousel/carousel.js +3 -1
  42. package/dist/components/Carousel/carousel.js.map +1 -1
  43. package/dist/components/Chart/chart.d.ts.map +1 -1
  44. package/dist/components/Chart/chart.js +1 -1
  45. package/dist/components/Chart/chart.js.map +1 -1
  46. package/dist/components/Checkbox/checkbox.d.ts +6 -3
  47. package/dist/components/Checkbox/checkbox.d.ts.map +1 -1
  48. package/dist/components/Checkbox/checkbox.js +26 -4
  49. package/dist/components/Checkbox/checkbox.js.map +1 -1
  50. package/dist/components/Checkbox/index.d.ts +1 -0
  51. package/dist/components/Checkbox/index.d.ts.map +1 -1
  52. package/dist/components/Checkbox/index.js +3 -0
  53. package/dist/components/Checkbox/index.js.map +1 -1
  54. package/dist/components/Chip/chip.d.ts +9 -3
  55. package/dist/components/Chip/chip.d.ts.map +1 -1
  56. package/dist/components/Chip/chip.js +46 -13
  57. package/dist/components/Chip/chip.js.map +1 -1
  58. package/dist/components/Coachmark/coachmark.d.ts +5 -3
  59. package/dist/components/Coachmark/coachmark.d.ts.map +1 -1
  60. package/dist/components/Coachmark/coachmark.js +10 -7
  61. package/dist/components/Coachmark/coachmark.js.map +1 -1
  62. package/dist/components/Combobox/combobox.d.ts +3 -1
  63. package/dist/components/Combobox/combobox.d.ts.map +1 -1
  64. package/dist/components/Combobox/combobox.js +11 -7
  65. package/dist/components/Combobox/combobox.js.map +1 -1
  66. package/dist/components/Command/command.d.ts +2 -2
  67. package/dist/components/Command/command.d.ts.map +1 -1
  68. package/dist/components/Command/command.js +4 -2
  69. package/dist/components/Command/command.js.map +1 -1
  70. package/dist/components/DataTable/active-editor-controller.d.ts +4 -3
  71. package/dist/components/DataTable/active-editor-controller.d.ts.map +1 -1
  72. package/dist/components/DataTable/cell-registry.d.ts.map +1 -1
  73. package/dist/components/DataTable/cell-registry.js +3 -0
  74. package/dist/components/DataTable/cell-registry.js.map +1 -1
  75. package/dist/components/DataTable/data-table-filter-panel.d.ts.map +1 -1
  76. package/dist/components/DataTable/data-table-interaction-layer.d.ts +4 -3
  77. package/dist/components/DataTable/data-table-interaction-layer.d.ts.map +1 -1
  78. package/dist/components/DataTable/data-table-interaction-layer.js.map +1 -1
  79. package/dist/components/DataTable/data-table.d.ts +38 -7
  80. package/dist/components/DataTable/data-table.d.ts.map +1 -1
  81. package/dist/components/DataTable/data-table.js +213 -63
  82. package/dist/components/DataTable/data-table.js.map +1 -1
  83. package/dist/components/DataTable/filter-tree.d.ts +5 -0
  84. package/dist/components/DataTable/filter-tree.d.ts.map +1 -1
  85. package/dist/components/DateGrid/date-grid.d.ts +3 -3
  86. package/dist/components/DateGrid/date-grid.d.ts.map +1 -1
  87. package/dist/components/DateGrid/date-grid.js +52 -6
  88. package/dist/components/DateGrid/date-grid.js.map +1 -1
  89. package/dist/components/DatePicker/date-picker.d.ts +2 -8
  90. package/dist/components/DatePicker/date-picker.d.ts.map +1 -1
  91. package/dist/components/DatePicker/date-picker.js +139 -109
  92. package/dist/components/DatePicker/date-picker.js.map +1 -1
  93. package/dist/components/DescriptionList/description-list.d.ts.map +1 -1
  94. package/dist/components/DescriptionList/description-list.js +1 -1
  95. package/dist/components/DescriptionList/description-list.js.map +1 -1
  96. package/dist/components/Dialog/dialog.d.ts +1 -1
  97. package/dist/components/Dialog/dialog.d.ts.map +1 -1
  98. package/dist/components/Dialog/dialog.js +2 -1
  99. package/dist/components/Dialog/dialog.js.map +1 -1
  100. package/dist/components/DropdownMenu/dropdown-menu.d.ts +4 -4
  101. package/dist/components/DropdownMenu/dropdown-menu.d.ts.map +1 -1
  102. package/dist/components/DropdownMenu/dropdown-menu.js +25 -8
  103. package/dist/components/DropdownMenu/dropdown-menu.js.map +1 -1
  104. package/dist/components/Empty/empty.d.ts.map +1 -1
  105. package/dist/components/Empty/empty.js +1 -1
  106. package/dist/components/Empty/empty.js.map +1 -1
  107. package/dist/components/Field/field-wrapper.d.ts +1 -0
  108. package/dist/components/Field/field-wrapper.d.ts.map +1 -1
  109. package/dist/components/Field/field-wrapper.js +27 -7
  110. package/dist/components/Field/field-wrapper.js.map +1 -1
  111. package/dist/components/Field/field.d.ts +1 -1
  112. package/dist/components/Field/field.d.ts.map +1 -1
  113. package/dist/components/Field/field.js +2 -1
  114. package/dist/components/Field/field.js.map +1 -1
  115. package/dist/components/Field/use-form-validation.d.ts +5 -1
  116. package/dist/components/Field/use-form-validation.d.ts.map +1 -1
  117. package/dist/components/Field/use-form-validation.js +31 -21
  118. package/dist/components/Field/use-form-validation.js.map +1 -1
  119. package/dist/components/FieldControlGroup/field-control-group.d.ts +3 -3
  120. package/dist/components/FieldControlGroup/field-control-group.js.map +1 -1
  121. package/dist/components/FileItem/file-item.d.ts.map +1 -1
  122. package/dist/components/FileItem/file-item.js +3 -2
  123. package/dist/components/FileItem/file-item.js.map +1 -1
  124. package/dist/components/FileUpload/file-upload.d.ts +1 -1
  125. package/dist/components/FileUpload/file-upload.d.ts.map +1 -1
  126. package/dist/components/FileUpload/file-upload.js +22 -10
  127. package/dist/components/FileUpload/file-upload.js.map +1 -1
  128. package/dist/components/FileViewer/can-render-image.d.ts +6 -0
  129. package/dist/components/FileViewer/can-render-image.d.ts.map +1 -0
  130. package/dist/components/FileViewer/can-render-image.js +11 -0
  131. package/dist/components/FileViewer/can-render-image.js.map +1 -0
  132. package/dist/components/FileViewer/file-viewer.d.ts +2 -2
  133. package/dist/components/FileViewer/file-viewer.d.ts.map +1 -1
  134. package/dist/components/FileViewer/file-viewer.js +24 -16
  135. package/dist/components/FileViewer/file-viewer.js.map +1 -1
  136. package/dist/components/FileViewer/image-renderer.d.ts +0 -5
  137. package/dist/components/FileViewer/image-renderer.d.ts.map +1 -1
  138. package/dist/components/FileViewer/image-renderer.js +1 -9
  139. package/dist/components/FileViewer/image-renderer.js.map +1 -1
  140. package/dist/components/HoverCard/hover-card.d.ts.map +1 -1
  141. package/dist/components/HoverCard/hover-card.js +3 -1
  142. package/dist/components/HoverCard/hover-card.js.map +1 -1
  143. package/dist/components/Input/input.d.ts +26 -3
  144. package/dist/components/Input/input.d.ts.map +1 -1
  145. package/dist/components/Input/input.js +12 -8
  146. package/dist/components/Input/input.js.map +1 -1
  147. package/dist/components/LinkInput/link-input.d.ts +3 -3
  148. package/dist/components/LinkInput/link-input.d.ts.map +1 -1
  149. package/dist/components/LinkInput/link-input.js +29 -28
  150. package/dist/components/LinkInput/link-input.js.map +1 -1
  151. package/dist/components/Menu/menu-item.d.ts.map +1 -1
  152. package/dist/components/Menu/menu-item.js +5 -4
  153. package/dist/components/Menu/menu-item.js.map +1 -1
  154. package/dist/components/Notice/notice.d.ts +5 -0
  155. package/dist/components/Notice/notice.d.ts.map +1 -1
  156. package/dist/components/Notice/notice.js +11 -5
  157. package/dist/components/Notice/notice.js.map +1 -1
  158. package/dist/components/NumberInput/number-input.d.ts +1 -1
  159. package/dist/components/NumberInput/number-input.d.ts.map +1 -1
  160. package/dist/components/NumberInput/number-input.js +17 -8
  161. package/dist/components/NumberInput/number-input.js.map +1 -1
  162. package/dist/components/OverflowIndicator/overflow-indicator.d.ts +1 -1
  163. package/dist/components/OverflowIndicator/overflow-indicator.d.ts.map +1 -1
  164. package/dist/components/OverflowIndicator/overflow-indicator.js +2 -1
  165. package/dist/components/OverflowIndicator/overflow-indicator.js.map +1 -1
  166. package/dist/components/Pagination/index.d.ts +2 -0
  167. package/dist/components/Pagination/index.d.ts.map +1 -0
  168. package/dist/components/Pagination/index.js +6 -0
  169. package/dist/components/Pagination/index.js.map +1 -0
  170. package/dist/components/Pagination/pagination.d.ts +49 -0
  171. package/dist/components/Pagination/pagination.d.ts.map +1 -0
  172. package/dist/components/Pagination/pagination.js +182 -0
  173. package/dist/components/Pagination/pagination.js.map +1 -0
  174. package/dist/components/PeoplePicker/people-picker.d.ts +3 -3
  175. package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -1
  176. package/dist/components/PeoplePicker/people-picker.js +38 -36
  177. package/dist/components/PeoplePicker/people-picker.js.map +1 -1
  178. package/dist/components/PeoplePicker/person-display.d.ts +4 -0
  179. package/dist/components/PeoplePicker/person-display.d.ts.map +1 -1
  180. package/dist/components/PeoplePicker/person-display.js +3 -3
  181. package/dist/components/PeoplePicker/person-display.js.map +1 -1
  182. package/dist/components/Popover/popover.d.ts.map +1 -1
  183. package/dist/components/Popover/popover.js +58 -32
  184. package/dist/components/Popover/popover.js.map +1 -1
  185. package/dist/components/ProfileCard/profile-card.d.ts +11 -3
  186. package/dist/components/ProfileCard/profile-card.d.ts.map +1 -1
  187. package/dist/components/ProfileCard/profile-card.js +14 -4
  188. package/dist/components/ProfileCard/profile-card.js.map +1 -1
  189. package/dist/components/RadioGroup/radio-group.d.ts +1 -1
  190. package/dist/components/RadioGroup/radio-group.d.ts.map +1 -1
  191. package/dist/components/RadioGroup/radio-group.js +28 -3
  192. package/dist/components/RadioGroup/radio-group.js.map +1 -1
  193. package/dist/components/Rating/rating.js +3 -3
  194. package/dist/components/Rating/rating.js.map +1 -1
  195. package/dist/components/ScrollArea/scroll-area.d.ts +1 -1
  196. package/dist/components/ScrollArea/scroll-area.js +2 -2
  197. package/dist/components/ScrollArea/scroll-area.js.map +1 -1
  198. package/dist/components/SegmentedControl/segmented-control.d.ts +2 -2
  199. package/dist/components/SegmentedControl/segmented-control.d.ts.map +1 -1
  200. package/dist/components/SegmentedControl/segmented-control.js +23 -10
  201. package/dist/components/SegmentedControl/segmented-control.js.map +1 -1
  202. package/dist/components/Select/select.d.ts +10 -4
  203. package/dist/components/Select/select.d.ts.map +1 -1
  204. package/dist/components/Select/select.js +57 -14
  205. package/dist/components/Select/select.js.map +1 -1
  206. package/dist/components/SelectMenu/index.js +4 -2
  207. package/dist/components/SelectMenu/select-menu.d.ts +31 -6
  208. package/dist/components/SelectMenu/select-menu.d.ts.map +1 -1
  209. package/dist/components/SelectMenu/select-menu.js +169 -85
  210. package/dist/components/SelectMenu/select-menu.js.map +1 -1
  211. package/dist/components/Separator/separator.js +1 -1
  212. package/dist/components/Separator/separator.js.map +1 -1
  213. package/dist/components/Sheet/sheet.d.ts +1 -1
  214. package/dist/components/Sheet/sheet.d.ts.map +1 -1
  215. package/dist/components/Sheet/sheet.js +3 -2
  216. package/dist/components/Sheet/sheet.js.map +1 -1
  217. package/dist/components/Sidebar/sidebar.d.ts +2 -2
  218. package/dist/components/Sidebar/sidebar.d.ts.map +1 -1
  219. package/dist/components/Sidebar/sidebar.js +28 -10
  220. package/dist/components/Sidebar/sidebar.js.map +1 -1
  221. package/dist/components/Skeleton/skeleton.d.ts +1 -1
  222. package/dist/components/Skeleton/skeleton.js +2 -2
  223. package/dist/components/Skeleton/skeleton.js.map +1 -1
  224. package/dist/components/Slider/slider.d.ts +1 -1
  225. package/dist/components/Slider/slider.d.ts.map +1 -1
  226. package/dist/components/Slider/slider.js +7 -3
  227. package/dist/components/Slider/slider.js.map +1 -1
  228. package/dist/components/Steps/steps.d.ts.map +1 -1
  229. package/dist/components/Steps/steps.js +6 -3
  230. package/dist/components/Steps/steps.js.map +1 -1
  231. package/dist/components/Switch/switch.d.ts +2 -2
  232. package/dist/components/Switch/switch.d.ts.map +1 -1
  233. package/dist/components/Switch/switch.js +47 -9
  234. package/dist/components/Switch/switch.js.map +1 -1
  235. package/dist/components/Tabs/tabs.d.ts +8 -5
  236. package/dist/components/Tabs/tabs.d.ts.map +1 -1
  237. package/dist/components/Tabs/tabs.js +45 -33
  238. package/dist/components/Tabs/tabs.js.map +1 -1
  239. package/dist/components/Tag/tag.d.ts.map +1 -1
  240. package/dist/components/Tag/tag.js +20 -4
  241. package/dist/components/Tag/tag.js.map +1 -1
  242. package/dist/components/Textarea/textarea.d.ts +2 -1
  243. package/dist/components/Textarea/textarea.d.ts.map +1 -1
  244. package/dist/components/Textarea/textarea.js +24 -13
  245. package/dist/components/Textarea/textarea.js.map +1 -1
  246. package/dist/components/TimePicker/time-picker.d.ts +2 -2
  247. package/dist/components/TimePicker/time-picker.d.ts.map +1 -1
  248. package/dist/components/TimePicker/time-picker.js +23 -12
  249. package/dist/components/TimePicker/time-picker.js.map +1 -1
  250. package/dist/components/Toast/toast.d.ts +1 -1
  251. package/dist/components/Toast/toast.d.ts.map +1 -1
  252. package/dist/components/Toast/toast.js +7 -3
  253. package/dist/components/Toast/toast.js.map +1 -1
  254. package/dist/components/Tooltip/tooltip.js +1 -1
  255. package/dist/components/Tooltip/tooltip.js.map +1 -1
  256. package/dist/components/TreeView/tree-view.d.ts +1 -1
  257. package/dist/components/TreeView/tree-view.d.ts.map +1 -1
  258. package/dist/components/TreeView/tree-view.js +11 -5
  259. package/dist/components/TreeView/tree-view.js.map +1 -1
  260. package/dist/hooks/use-controllable.d.ts.map +1 -1
  261. package/dist/hooks/use-controllable.js +4 -2
  262. package/dist/hooks/use-controllable.js.map +1 -1
  263. package/dist/hooks/use-is-touch-device.d.ts.map +1 -1
  264. package/dist/hooks/use-is-touch-device.js +3 -1
  265. package/dist/hooks/use-is-touch-device.js.map +1 -1
  266. package/dist/index.d.ts +2 -0
  267. package/dist/index.d.ts.map +1 -1
  268. package/dist/index.js +14 -0
  269. package/dist/index.js.map +1 -1
  270. package/dist/patterns/element-anatomy/item-anatomy.d.ts +2 -2
  271. package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -1
  272. package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -1
  273. package/dist/patterns/overlay-surface/overlay-surface.js.map +1 -1
  274. package/dist/tokens/categorical-color.d.ts +1 -1
  275. package/dist/tokens/categorical-color.js.map +1 -1
  276. package/dist/tokens/uiSize/icon-size.d.ts +2 -2
  277. package/ds-canonical/fork/governance.lock +1 -1
  278. package/ds-canonical/fork/hooks/check_opacity_token_usage.sh +10 -1
  279. package/ds-canonical/hooks/check_audit_post_report_validator.sh +13 -0
  280. package/ds-canonical/hooks/check_full_story_visual_interaction_sweep.sh +4 -3
  281. package/ds-canonical/hooks/check_opacity_token_usage.sh +10 -1
  282. package/ds-canonical/hooks/check_plugin_fork_health.sh +30 -22
  283. package/ds-canonical/hooks/check_story_invariants.sh +17 -5
  284. package/ds-canonical/hooks/check_substantive_edit_approval_preflight.sh +5 -2
  285. package/ds-canonical/references/principle-dim-map.json +100 -0
  286. package/ds-canonical/references/story-baseline-registry.json +4 -3
  287. package/ds-canonical/skills/deep-audit-cross-codex/SKILL.md +1 -1
  288. package/ds-canonical/skills/design-system-audit/SKILL.md +2 -2
  289. package/ds-story-manifest.json +41 -18
  290. package/llms-full.txt +11 -1
  291. package/llms.txt +3 -1
  292. package/package.json +1 -1
  293. package/src/components/Alert/alert.anatomy.stories.tsx +9 -6
  294. package/src/components/Alert/alert.spec.md +3 -3
  295. package/src/components/Alert/alert.tsx +9 -1
  296. package/src/components/AppShell/app-shell.anatomy.stories.tsx +3 -0
  297. package/src/components/AppShell/app-shell.spec.md +3 -2
  298. package/src/components/AppShell/app-shell.tsx +1 -1
  299. package/src/components/AspectRatio/aspect-ratio.spec.md +1 -2
  300. package/src/components/AspectRatio/aspect-ratio.tsx +3 -2
  301. package/src/components/Avatar/avatar.principles.stories.tsx +1 -1
  302. package/src/components/Avatar/avatar.spec.md +10 -30
  303. package/src/components/Avatar/avatar.stories.tsx +1 -1
  304. package/src/components/Avatar/avatar.tsx +30 -16
  305. package/src/components/Badge/badge.anatomy.stories.tsx +2 -2
  306. package/src/components/Badge/badge.spec.md +5 -4
  307. package/src/components/Badge/badge.tsx +4 -1
  308. package/src/components/Breadcrumb/breadcrumb.anatomy.stories.tsx +2 -2
  309. package/src/components/Breadcrumb/breadcrumb.principles.stories.tsx +15 -10
  310. package/src/components/Breadcrumb/breadcrumb.spec.md +5 -3
  311. package/src/components/Breadcrumb/breadcrumb.tsx +10 -4
  312. package/src/components/BulkActionBar/bulk-action-bar.anatomy.stories.tsx +3 -2
  313. package/src/components/BulkActionBar/bulk-action-bar.spec.md +15 -14
  314. package/src/components/BulkActionBar/bulk-action-bar.tsx +10 -4
  315. package/src/components/Button/button.anatomy.stories.tsx +6 -6
  316. package/src/components/Button/button.spec.md +3 -2
  317. package/src/components/Button/button.tsx +67 -27
  318. package/src/components/Button/index.ts +1 -0
  319. package/src/components/Calendar/calendar.anatomy.stories.tsx +5 -3
  320. package/src/components/Calendar/calendar.principles.stories.tsx +3 -1
  321. package/src/components/Calendar/calendar.spec.md +9 -2
  322. package/src/components/Calendar/calendar.stories.tsx +3 -1
  323. package/src/components/Calendar/calendar.tsx +53 -19
  324. package/src/components/Carousel/carousel.principles.stories.tsx +1 -1
  325. package/src/components/Carousel/carousel.tsx +4 -1
  326. package/src/components/Chart/chart.spec.md +1 -1
  327. package/src/components/Chart/chart.tsx +2 -1
  328. package/src/components/Checkbox/checkbox.principles.stories.tsx +1 -1
  329. package/src/components/Checkbox/checkbox.spec.md +1 -1
  330. package/src/components/Checkbox/checkbox.tsx +41 -7
  331. package/src/components/Checkbox/index.ts +1 -0
  332. package/src/components/Chip/chip.anatomy.stories.tsx +9 -9
  333. package/src/components/Chip/chip.principles.stories.tsx +3 -3
  334. package/src/components/Chip/chip.spec.md +7 -4
  335. package/src/components/Chip/chip.tsx +60 -15
  336. package/src/components/CircularProgress/circular-progress.anatomy.stories.tsx +1 -1
  337. package/src/components/CircularProgress/circular-progress.principles.stories.tsx +7 -5
  338. package/src/components/CircularProgress/circular-progress.spec.md +2 -0
  339. package/src/components/CircularProgress/circular-progress.stories.tsx +3 -11
  340. package/src/components/Coachmark/coachmark.anatomy.stories.tsx +2 -2
  341. package/src/components/Coachmark/coachmark.principles.stories.tsx +1 -1
  342. package/src/components/Coachmark/coachmark.spec.md +3 -3
  343. package/src/components/Coachmark/coachmark.tsx +23 -13
  344. package/src/components/Combobox/combobox.anatomy.stories.tsx +4 -4
  345. package/src/components/Combobox/combobox.spec.md +1 -1
  346. package/src/components/Combobox/combobox.tsx +30 -17
  347. package/src/components/Command/command.principles.stories.tsx +10 -12
  348. package/src/components/Command/command.spec.md +5 -5
  349. package/src/components/Command/command.stories.tsx +4 -4
  350. package/src/components/Command/command.tsx +3 -2
  351. package/src/components/DataTable/active-editor-controller.ts +4 -3
  352. package/src/components/DataTable/cell-registry.tsx +8 -0
  353. package/src/components/DataTable/data-table-filter-panel.tsx +8 -2
  354. package/src/components/DataTable/data-table-interaction-layer.tsx +8 -7
  355. package/src/components/DataTable/data-table.anatomy.stories.tsx +4 -4
  356. package/src/components/DataTable/data-table.css +2 -2
  357. package/src/components/DataTable/data-table.spec.md +72 -115
  358. package/src/components/DataTable/data-table.stories.tsx +51 -3
  359. package/src/components/DataTable/data-table.tsx +348 -63
  360. package/src/components/DataTable/filter-operators.spec.md +4 -4
  361. package/src/components/DataTable/filter-tree.ts +192 -42
  362. package/src/components/DateGrid/date-grid.anatomy.stories.tsx +1 -1
  363. package/src/components/DateGrid/date-grid.spec.md +11 -8
  364. package/src/components/DateGrid/date-grid.tsx +63 -8
  365. package/src/components/DatePicker/date-picker.principles.stories.tsx +1 -1
  366. package/src/components/DatePicker/date-picker.spec.md +1 -0
  367. package/src/components/DatePicker/date-picker.stories.tsx +19 -0
  368. package/src/components/DatePicker/date-picker.tsx +52 -15
  369. package/src/components/DescriptionList/description-list.spec.md +1 -1
  370. package/src/components/DescriptionList/description-list.tsx +3 -1
  371. package/src/components/Dialog/dialog.spec.md +1 -1
  372. package/src/components/Dialog/dialog.tsx +2 -1
  373. package/src/components/DropdownMenu/dropdown-menu.anatomy.stories.tsx +3 -1
  374. package/src/components/DropdownMenu/dropdown-menu.spec.md +8 -5
  375. package/src/components/DropdownMenu/dropdown-menu.tsx +33 -7
  376. package/src/components/Empty/empty.anatomy.stories.tsx +1 -1
  377. package/src/components/Empty/empty.spec.md +2 -2
  378. package/src/components/Empty/empty.stories.tsx +4 -15
  379. package/src/components/Empty/empty.tsx +4 -1
  380. package/src/components/Field/field-controls.spec.md +2 -1
  381. package/src/components/Field/field-wrapper.tsx +28 -8
  382. package/src/components/Field/field.anatomy.stories.tsx +7 -7
  383. package/src/components/Field/field.principles.stories.tsx +1 -1
  384. package/src/components/Field/field.spec.md +9 -7
  385. package/src/components/Field/field.tsx +2 -1
  386. package/src/components/Field/form-validation.spec.md +6 -3
  387. package/src/components/Field/use-form-validation.ts +49 -21
  388. package/src/components/FieldControlGroup/field-control-group.anatomy.stories.tsx +11 -10
  389. package/src/components/FieldControlGroup/field-control-group.principles.stories.tsx +3 -3
  390. package/src/components/FieldControlGroup/field-control-group.spec.md +3 -3
  391. package/src/components/FieldControlGroup/field-control-group.tsx +3 -3
  392. package/src/components/FileItem/file-item.anatomy.stories.tsx +6 -4
  393. package/src/components/FileItem/file-item.tsx +3 -2
  394. package/src/components/FileUpload/file-upload.anatomy.stories.tsx +1 -1
  395. package/src/components/FileUpload/file-upload.spec.md +4 -1
  396. package/src/components/FileUpload/file-upload.tsx +36 -10
  397. package/src/components/FileViewer/can-render-image.ts +15 -0
  398. package/src/components/FileViewer/file-viewer.anatomy.stories.tsx +6 -4
  399. package/src/components/FileViewer/file-viewer.spec.md +2 -2
  400. package/src/components/FileViewer/file-viewer.tsx +47 -21
  401. package/src/components/FileViewer/image-renderer.tsx +3 -8
  402. package/src/components/HoverCard/hover-card.spec.md +1 -1
  403. package/src/components/HoverCard/hover-card.tsx +3 -1
  404. package/src/components/Input/input.anatomy.stories.tsx +4 -4
  405. package/src/components/Input/input.principles.stories.tsx +1 -1
  406. package/src/components/Input/input.spec.md +1 -1
  407. package/src/components/Input/input.stories.tsx +11 -5
  408. package/src/components/Input/input.tsx +11 -9
  409. package/src/components/LinkInput/link-input.anatomy.stories.tsx +2 -0
  410. package/src/components/LinkInput/link-input.tsx +49 -34
  411. package/src/components/Menu/menu-item.anatomy.stories.tsx +1 -1
  412. package/src/components/Menu/menu-item.spec.md +4 -3
  413. package/src/components/Menu/menu-item.tsx +15 -4
  414. package/src/components/Notice/notice.anatomy.stories.tsx +10 -5
  415. package/src/components/Notice/notice.spec.md +4 -3
  416. package/src/components/Notice/notice.tsx +22 -5
  417. package/src/components/NumberInput/number-input.anatomy.stories.tsx +5 -4
  418. package/src/components/NumberInput/number-input.principles.stories.tsx +2 -1
  419. package/src/components/NumberInput/number-input.spec.md +2 -1
  420. package/src/components/NumberInput/number-input.tsx +25 -9
  421. package/src/components/OverflowIndicator/overflow-indicator.anatomy.stories.tsx +3 -3
  422. package/src/components/OverflowIndicator/overflow-indicator.spec.md +1 -1
  423. package/src/components/OverflowIndicator/overflow-indicator.tsx +2 -1
  424. package/src/components/Pagination/index.ts +5 -0
  425. package/src/components/Pagination/pagination.anatomy.stories.tsx +143 -0
  426. package/src/components/Pagination/pagination.principles.stories.tsx +81 -0
  427. package/src/components/Pagination/pagination.spec.md +150 -0
  428. package/src/components/Pagination/pagination.stories.tsx +98 -0
  429. package/src/components/Pagination/pagination.tsx +263 -0
  430. package/src/components/PeoplePicker/people-picker.anatomy.stories.tsx +1 -1
  431. package/src/components/PeoplePicker/people-picker.spec.md +4 -4
  432. package/src/components/PeoplePicker/people-picker.stories.tsx +1 -1
  433. package/src/components/PeoplePicker/people-picker.tsx +65 -55
  434. package/src/components/PeoplePicker/person-display.tsx +10 -4
  435. package/src/components/Popover/popover.anatomy.stories.tsx +2 -2
  436. package/src/components/Popover/popover.spec.md +13 -14
  437. package/src/components/Popover/popover.tsx +88 -39
  438. package/src/components/ProfileCard/profile-card.anatomy.stories.tsx +4 -4
  439. package/src/components/ProfileCard/profile-card.principles.stories.tsx +2 -2
  440. package/src/components/ProfileCard/profile-card.spec.md +1 -2
  441. package/src/components/ProfileCard/profile-card.stories.tsx +1 -1
  442. package/src/components/ProfileCard/profile-card.tsx +29 -8
  443. package/src/components/RadioGroup/radio-group.principles.stories.tsx +1 -1
  444. package/src/components/RadioGroup/radio-group.spec.md +2 -2
  445. package/src/components/RadioGroup/radio-group.stories.tsx +3 -1
  446. package/src/components/RadioGroup/radio-group.tsx +37 -3
  447. package/src/components/Rating/rating.anatomy.stories.tsx +11 -8
  448. package/src/components/Rating/rating.principles.stories.tsx +1 -1
  449. package/src/components/Rating/rating.spec.md +2 -2
  450. package/src/components/Rating/rating.stories.tsx +1 -1
  451. package/src/components/Rating/rating.tsx +3 -3
  452. package/src/components/ScrollArea/scroll-area.spec.md +1 -0
  453. package/src/components/ScrollArea/scroll-area.tsx +1 -1
  454. package/src/components/SegmentedControl/segmented-control.anatomy.stories.tsx +3 -3
  455. package/src/components/SegmentedControl/segmented-control.spec.md +7 -3
  456. package/src/components/SegmentedControl/segmented-control.tsx +29 -11
  457. package/src/components/Select/select.anatomy.stories.tsx +2 -2
  458. package/src/components/Select/select.spec.md +3 -2
  459. package/src/components/Select/select.tsx +62 -19
  460. package/src/components/SelectMenu/select-menu.anatomy.stories.tsx +1 -1
  461. package/src/components/SelectMenu/select-menu.principles.stories.tsx +1 -1
  462. package/src/components/SelectMenu/select-menu.spec.md +12 -8
  463. package/src/components/SelectMenu/select-menu.tsx +176 -20
  464. package/src/components/SelectionControl/selection-item.anatomy.stories.tsx +1 -1
  465. package/src/components/SelectionControl/selection-item.principles.stories.tsx +2 -2
  466. package/src/components/SelectionControl/selection-item.spec.md +2 -1
  467. package/src/components/SelectionControl/selection-item.stories.tsx +1 -1
  468. package/src/components/Separator/separator.anatomy.stories.tsx +2 -2
  469. package/src/components/Separator/separator.tsx +1 -1
  470. package/src/components/Sheet/sheet.spec.md +2 -1
  471. package/src/components/Sheet/sheet.tsx +4 -2
  472. package/src/components/Sidebar/sidebar.anatomy.stories.tsx +1 -1
  473. package/src/components/Sidebar/sidebar.spec.md +2 -1
  474. package/src/components/Sidebar/sidebar.stories.tsx +6 -4
  475. package/src/components/Sidebar/sidebar.tsx +41 -13
  476. package/src/components/Skeleton/skeleton.principles.stories.tsx +1 -1
  477. package/src/components/Skeleton/skeleton.spec.md +1 -2
  478. package/src/components/Skeleton/skeleton.tsx +1 -1
  479. package/src/components/Slider/slider.anatomy.stories.tsx +4 -4
  480. package/src/components/Slider/slider.spec.md +19 -85
  481. package/src/components/Slider/slider.tsx +13 -5
  482. package/src/components/Steps/steps.anatomy.stories.tsx +1 -1
  483. package/src/components/Steps/steps.spec.md +6 -4
  484. package/src/components/Steps/steps.tsx +11 -3
  485. package/src/components/Switch/switch.spec.md +4 -3
  486. package/src/components/Switch/switch.tsx +59 -10
  487. package/src/components/Tabs/tabs.anatomy.stories.tsx +7 -6
  488. package/src/components/Tabs/tabs.principles.stories.tsx +5 -3
  489. package/src/components/Tabs/tabs.spec.md +15 -48
  490. package/src/components/Tabs/tabs.tsx +70 -34
  491. package/src/components/Tag/tag.principles.stories.tsx +2 -2
  492. package/src/components/Tag/tag.spec.md +11 -43
  493. package/src/components/Tag/tag.tsx +30 -4
  494. package/src/components/Textarea/textarea.principles.stories.tsx +2 -1
  495. package/src/components/Textarea/textarea.spec.md +2 -1
  496. package/src/components/Textarea/textarea.tsx +20 -10
  497. package/src/components/TimePicker/time-picker.anatomy.stories.tsx +2 -1
  498. package/src/components/TimePicker/time-picker.spec.md +2 -2
  499. package/src/components/TimePicker/time-picker.tsx +35 -16
  500. package/src/components/Toast/toast.anatomy.stories.tsx +5 -6
  501. package/src/components/Toast/toast.principles.stories.tsx +10 -11
  502. package/src/components/Toast/toast.spec.md +5 -5
  503. package/src/components/Toast/toast.stories.tsx +5 -1
  504. package/src/components/Toast/toast.tsx +13 -7
  505. package/src/components/Tooltip/tooltip.spec.md +3 -3
  506. package/src/components/Tooltip/tooltip.tsx +1 -1
  507. package/src/components/TreeView/tree-view.anatomy.stories.tsx +6 -1
  508. package/src/components/TreeView/tree-view.principles.stories.tsx +2 -2
  509. package/src/components/TreeView/tree-view.spec.md +2 -2
  510. package/src/components/TreeView/tree-view.tsx +27 -5
  511. package/src/hooks/use-controllable.ts +7 -2
  512. package/src/hooks/use-is-touch-device.ts +8 -1
  513. package/src/index.ts +2 -1
  514. package/src/patterns/element-anatomy/element-anatomy.spec.md +3 -3
  515. package/src/patterns/element-anatomy/inline-action.spec.md +1 -1
  516. package/src/patterns/element-anatomy/item-anatomy.spec.md +5 -14
  517. package/src/patterns/element-anatomy/item-anatomy.stories.tsx +1 -0
  518. package/src/patterns/element-anatomy/item-anatomy.tsx +5 -6
  519. package/src/patterns/header-canonical/header-canonical.css +1 -2
  520. package/src/patterns/header-canonical/header-canonical.spec.md +5 -5
  521. package/src/patterns/horizontal-overflow/horizontal-overflow.spec.md +5 -4
  522. package/src/patterns/horizontal-overflow/horizontal-overflow.stories.tsx +137 -0
  523. package/src/patterns/overlay-surface/overlay-surface.spec.md +8 -7
  524. package/src/patterns/overlay-surface/overlay-surface.stories.tsx +116 -0
  525. package/src/patterns/overlay-surface/overlay-surface.tsx +5 -5
  526. package/src/patterns/resize-handle/resize-handle.spec.md +1 -1
  527. package/src/tokens/categorical-color.ts +1 -1
  528. package/src/tokens/color/color.spec.md +11 -13
  529. package/src/tokens/color/color.stories.tsx +1 -1
  530. package/src/tokens/color/primitives.css +7 -5
  531. package/src/tokens/color/semantic.css +8 -2
  532. package/src/tokens/density/density.spec.md +2 -0
  533. package/src/tokens/elevation/elevation.spec.md +1 -1
  534. package/src/tokens/layoutSpace/layoutSpace.spec.md +2 -1
  535. package/src/tokens/layoutSpace/layoutSpace.stories.tsx +3 -3
  536. package/src/tokens/motion/motion.spec.md +1 -1
  537. package/src/tokens/motion/motion.stories.tsx +142 -0
  538. package/src/tokens/opacity/opacity.spec.md +1 -1
  539. package/src/tokens/opacity/opacity.stories.tsx +7 -11
  540. package/src/tokens/radius/radius.spec.md +1 -1
  541. package/src/tokens/typography/typography.css +1 -1
  542. package/src/tokens/typography/typography.spec.md +1 -1
  543. package/src/tokens/uiSize/icon-size.ts +2 -2
  544. package/src/tokens/uiSize/uiSize.spec.md +12 -11
  545. package/src/tokens/uiSize/uiSize.stories.tsx +103 -0
  546. package/src/tokens/utility-registry.json +5 -4
  547. package/dist/node_modules/react-hook-form/dist/index.esm.js +0 -1950
  548. package/dist/node_modules/react-hook-form/dist/index.esm.js.map +0 -1
@@ -1,1950 +0,0 @@
1
- import React__default from "react";
2
- var isCheckBoxInput = (element) => element.type === "checkbox";
3
- var isDateObject = (value) => value instanceof Date;
4
- var isNullOrUndefined = (value) => value == null;
5
- const isObjectType = (value) => typeof value === "object";
6
- var isObject = (value) => !isNullOrUndefined(value) && !Array.isArray(value) && isObjectType(value) && !isDateObject(value);
7
- var getEventValue = (event) => isObject(event) && event.target ? isCheckBoxInput(event.target) ? event.target.checked : event.target.value : event;
8
- var isNameInFieldArray = (names, name) => name.split(".").some((part, index, arr) => !isNaN(Number(part)) && names.has(arr.slice(0, index).join(".")));
9
- var isPlainObject = (tempObject) => {
10
- const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;
11
- return isObject(prototypeCopy) && prototypeCopy.hasOwnProperty("isPrototypeOf");
12
- };
13
- var isWeb = typeof window !== "undefined" && typeof window.HTMLElement !== "undefined" && typeof document !== "undefined";
14
- function cloneObject(data) {
15
- if (data instanceof Date) {
16
- return new Date(data);
17
- }
18
- const isFileListInstance = typeof FileList !== "undefined" && data instanceof FileList;
19
- if (isWeb && (data instanceof Blob || isFileListInstance)) {
20
- return data;
21
- }
22
- const isArray = Array.isArray(data);
23
- if (!isArray && !(isObject(data) && isPlainObject(data))) {
24
- return data;
25
- }
26
- const copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));
27
- for (const key in data) {
28
- if (Object.prototype.hasOwnProperty.call(data, key)) {
29
- copy[key] = cloneObject(data[key]);
30
- }
31
- }
32
- return copy;
33
- }
34
- const EVENTS = {
35
- BLUR: "blur",
36
- FOCUS_OUT: "focusout",
37
- SUBMIT: "submit",
38
- TRIGGER: "trigger",
39
- VALID: "valid"
40
- };
41
- const VALIDATION_MODE = {
42
- onBlur: "onBlur",
43
- onChange: "onChange",
44
- onSubmit: "onSubmit",
45
- onTouched: "onTouched",
46
- all: "all"
47
- };
48
- const INPUT_VALIDATION_RULES = {
49
- max: "max",
50
- min: "min",
51
- maxLength: "maxLength",
52
- minLength: "minLength",
53
- pattern: "pattern",
54
- required: "required",
55
- validate: "validate"
56
- };
57
- const ROOT_ERROR_TYPE = "root";
58
- const PROTOTYPE_KEYWORDS = ["__proto__", "constructor", "prototype"];
59
- const IS_KEY_RE = /^\w*$/;
60
- var isKey = (value) => IS_KEY_RE.test(value);
61
- var isUndefined = (val) => val === void 0;
62
- const FIELD_PATH_RE = /[.[\]'"]/;
63
- var stringToPath = (input) => input.split(FIELD_PATH_RE).filter(Boolean);
64
- var get = (object, path, defaultValue) => {
65
- if (!path || !isObject(object)) {
66
- return defaultValue;
67
- }
68
- const paths = isKey(path) ? [path] : stringToPath(path);
69
- if (paths.some((key) => PROTOTYPE_KEYWORDS.includes(key))) {
70
- return defaultValue;
71
- }
72
- const result = paths.reduce((result2, key) => {
73
- return isNullOrUndefined(result2) ? void 0 : result2[key];
74
- }, object);
75
- return isUndefined(result) || result === object ? isUndefined(object[path]) ? defaultValue : object[path] : result;
76
- };
77
- var isBoolean = (value) => typeof value === "boolean";
78
- var isFunction = (value) => typeof value === "function";
79
- var set = (object, path, value) => {
80
- let index = -1;
81
- const tempPath = isKey(path) ? [path] : stringToPath(path);
82
- const length = tempPath.length;
83
- const lastIndex = length - 1;
84
- while (++index < length) {
85
- const key = tempPath[index];
86
- let newValue = value;
87
- if (index !== lastIndex) {
88
- const objValue = object[key];
89
- newValue = isObject(objValue) || Array.isArray(objValue) ? objValue : !isNaN(+tempPath[index + 1]) ? [] : {};
90
- }
91
- if (PROTOTYPE_KEYWORDS.includes(key)) {
92
- return;
93
- }
94
- object[key] = newValue;
95
- object = object[key];
96
- }
97
- };
98
- const HookFormControlContext = React__default.createContext(null);
99
- HookFormControlContext.displayName = "HookFormControlContext";
100
- var getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {
101
- const result = {};
102
- for (const key in formState) {
103
- Object.defineProperty(result, key, {
104
- get: () => {
105
- const _key = key;
106
- if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {
107
- control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;
108
- }
109
- return formState[_key];
110
- }
111
- });
112
- }
113
- return result;
114
- };
115
- const useIsomorphicLayoutEffect = isWeb ? React__default.useLayoutEffect : React__default.useEffect;
116
- var isString = (value) => typeof value === "string";
117
- var generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {
118
- if (isString(names)) {
119
- isGlobal && _names.watch.add(names);
120
- return get(formValues, names, defaultValue);
121
- }
122
- if (Array.isArray(names)) {
123
- return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName), get(formValues, fieldName)));
124
- }
125
- isGlobal && (_names.watchAll = true);
126
- return formValues;
127
- };
128
- var isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);
129
- const isEmptyObjectWithCustomPrototype = (object, keys) => keys.length === 0 && !Array.isArray(object) && !isPlainObject(object);
130
- function deepEqual(object1, object2, visited = /* @__PURE__ */ new WeakMap()) {
131
- if (object1 === object2) {
132
- return true;
133
- }
134
- if (isPrimitive(object1) || isPrimitive(object2)) {
135
- return Object.is(object1, object2);
136
- }
137
- if (isDateObject(object1) && isDateObject(object2)) {
138
- return Object.is(object1.getTime(), object2.getTime());
139
- }
140
- const keys1 = Object.keys(object1);
141
- const keys2 = Object.keys(object2);
142
- if (keys1.length !== keys2.length) {
143
- return false;
144
- }
145
- if (isEmptyObjectWithCustomPrototype(object1, keys1) || isEmptyObjectWithCustomPrototype(object2, keys2)) {
146
- return Object.is(object1, object2);
147
- }
148
- if (!keys1.length && Array.isArray(object1) !== Array.isArray(object2)) {
149
- return false;
150
- }
151
- const visitedPairs = visited.get(object1);
152
- if (visitedPairs && visitedPairs.has(object2)) {
153
- return true;
154
- }
155
- if (visitedPairs) {
156
- visitedPairs.add(object2);
157
- } else {
158
- const ws = /* @__PURE__ */ new WeakSet();
159
- ws.add(object2);
160
- visited.set(object1, ws);
161
- }
162
- for (const key of keys1) {
163
- const val1 = object1[key];
164
- if (!(key in object2)) {
165
- return false;
166
- }
167
- if (key !== "ref") {
168
- const val2 = object2[key];
169
- if (isDateObject(val1) && isDateObject(val2) || (isObject(val1) || Array.isArray(val1)) && (isObject(val2) || Array.isArray(val2)) ? !deepEqual(val1, val2, visited) : !Object.is(val1, val2)) {
170
- return false;
171
- }
172
- }
173
- }
174
- return true;
175
- }
176
- const HookFormContext = React__default.createContext(null);
177
- HookFormContext.displayName = "HookFormContext";
178
- var appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria ? {
179
- ...errors[name],
180
- types: {
181
- ...errors[name] && errors[name].types ? errors[name].types : {},
182
- [type]: message || true
183
- }
184
- } : {};
185
- var compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];
186
- var convertToArrayPayload = (value) => Array.isArray(value) ? value : [value];
187
- var createSubject = () => {
188
- let _observers = [];
189
- const next = (value) => {
190
- for (const observer of _observers) {
191
- observer.next && observer.next(value);
192
- }
193
- };
194
- const subscribe = (observer) => {
195
- _observers.push(observer);
196
- return {
197
- unsubscribe: () => {
198
- _observers = _observers.filter((o) => o !== observer);
199
- }
200
- };
201
- };
202
- const unsubscribe = () => {
203
- _observers = [];
204
- };
205
- return {
206
- get observers() {
207
- return _observers;
208
- },
209
- next,
210
- subscribe,
211
- unsubscribe
212
- };
213
- };
214
- function extractFormValues(fieldsState, formValues) {
215
- const values = {};
216
- for (const key in fieldsState) {
217
- if (fieldsState.hasOwnProperty(key)) {
218
- const fieldState = fieldsState[key];
219
- const fieldValue = formValues[key];
220
- if (fieldState && isObject(fieldState) && fieldValue) {
221
- const nestedFieldsState = extractFormValues(fieldState, fieldValue);
222
- if (isObject(nestedFieldsState)) {
223
- values[key] = nestedFieldsState;
224
- }
225
- } else if (fieldsState[key]) {
226
- values[key] = fieldValue;
227
- }
228
- }
229
- }
230
- return values;
231
- }
232
- var isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;
233
- var isFileInput = (element) => element.type === "file";
234
- var isHTMLElement = (value) => {
235
- if (!isWeb) {
236
- return false;
237
- }
238
- const owner = value ? value.ownerDocument : 0;
239
- return value instanceof (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement);
240
- };
241
- var isMultipleSelect = (element) => element.type === `select-multiple`;
242
- var isRadioInput = (element) => element.type === "radio";
243
- var isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);
244
- var live = (ref) => isHTMLElement(ref) && ref.isConnected;
245
- function baseGet(object, updatePath) {
246
- const length = updatePath.slice(0, -1).length;
247
- let index = 0;
248
- while (index < length) {
249
- if (isNullOrUndefined(object)) {
250
- object = void 0;
251
- break;
252
- }
253
- object = object[updatePath[index]];
254
- index++;
255
- }
256
- return object;
257
- }
258
- function isEmptyArray(obj) {
259
- for (const key in obj) {
260
- if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {
261
- return false;
262
- }
263
- }
264
- return true;
265
- }
266
- function unset(object, path) {
267
- if (isString(path) && Object.prototype.hasOwnProperty.call(object, path)) {
268
- delete object[path];
269
- return object;
270
- }
271
- const paths = Array.isArray(path) ? path : isKey(path) ? [path] : stringToPath(path);
272
- const childObject = paths.length === 1 ? object : baseGet(object, paths);
273
- const index = paths.length - 1;
274
- const key = paths[index];
275
- if (childObject) {
276
- delete childObject[key];
277
- }
278
- if (index !== 0 && (isObject(childObject) && isEmptyObject(childObject) || Array.isArray(childObject) && isEmptyArray(childObject))) {
279
- unset(object, paths.slice(0, -1));
280
- }
281
- return object;
282
- }
283
- var objectHasFunction = (data) => {
284
- for (const key in data) {
285
- if (isFunction(data[key])) {
286
- return true;
287
- }
288
- }
289
- return false;
290
- };
291
- function isTraversable(value) {
292
- return Array.isArray(value) || isObject(value) && !objectHasFunction(value);
293
- }
294
- function markFieldsDirty(data, fields = {}) {
295
- for (const key in data) {
296
- const value = data[key];
297
- if (isTraversable(value)) {
298
- fields[key] = Array.isArray(value) ? [] : {};
299
- markFieldsDirty(value, fields[key]);
300
- } else if (!isUndefined(value)) {
301
- fields[key] = true;
302
- }
303
- }
304
- return fields;
305
- }
306
- function pruneDirtyFields(value) {
307
- if (value === false) {
308
- return void 0;
309
- }
310
- if (value === true) {
311
- return true;
312
- }
313
- if (Array.isArray(value)) {
314
- const result = value.map((value2) => pruneDirtyFields(value2));
315
- return result.some((value2) => value2 !== void 0) ? result : void 0;
316
- }
317
- if (isObject(value)) {
318
- const result = {};
319
- for (const key in value) {
320
- const pruned = pruneDirtyFields(value[key]);
321
- if (!isUndefined(pruned)) {
322
- result[key] = pruned;
323
- }
324
- }
325
- return Object.keys(result).length ? result : void 0;
326
- }
327
- return void 0;
328
- }
329
- function getDirtyFields(data, formValues, dirtyFieldsFromValues) {
330
- if (!dirtyFieldsFromValues) {
331
- dirtyFieldsFromValues = markFieldsDirty(formValues);
332
- }
333
- for (const key in data) {
334
- const value = data[key];
335
- if (isTraversable(value)) {
336
- if (isUndefined(formValues) || isPrimitive(dirtyFieldsFromValues[key])) {
337
- dirtyFieldsFromValues[key] = markFieldsDirty(value, Array.isArray(value) ? [] : {});
338
- } else {
339
- getDirtyFields(value, isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);
340
- }
341
- } else {
342
- const formValue = formValues[key];
343
- dirtyFieldsFromValues[key] = !deepEqual(value, formValue);
344
- }
345
- }
346
- return pruneDirtyFields(dirtyFieldsFromValues) || {};
347
- }
348
- const defaultResult = {
349
- value: false,
350
- isValid: false
351
- };
352
- const validResult = { value: true, isValid: true };
353
- var getCheckboxValue = (options) => {
354
- if (Array.isArray(options)) {
355
- if (options.length > 1) {
356
- const values = options.filter((option) => option && option.checked && !option.disabled).map((option) => option.value);
357
- return { value: values, isValid: !!values.length };
358
- }
359
- return options[0].checked && !options[0].disabled ? (
360
- // @ts-expect-error expected to work in the browser
361
- options[0].attributes && !isUndefined(options[0].attributes.value) ? isUndefined(options[0].value) || options[0].value === "" ? validResult : { value: options[0].value, isValid: true } : validResult
362
- ) : defaultResult;
363
- }
364
- return defaultResult;
365
- };
366
- var getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value) ? value : valueAsNumber ? value === "" ? NaN : value ? +value : value : valueAsDate && isString(value) ? new Date(value) : setValueAs ? setValueAs(value) : value;
367
- const defaultReturn = {
368
- isValid: false,
369
- value: null
370
- };
371
- var getRadioValue = (options) => Array.isArray(options) ? options.reduce((previous, option) => option && option.checked && !option.disabled ? {
372
- isValid: true,
373
- value: option.value
374
- } : previous, defaultReturn) : defaultReturn;
375
- function getFieldValue(_f) {
376
- const ref = _f.ref;
377
- if (isFileInput(ref)) {
378
- return ref.files;
379
- }
380
- if (isRadioInput(ref)) {
381
- return getRadioValue(_f.refs).value;
382
- }
383
- if (isMultipleSelect(ref)) {
384
- return [...ref.selectedOptions].map(({ value }) => value);
385
- }
386
- if (isCheckBoxInput(ref)) {
387
- return getCheckboxValue(_f.refs).value;
388
- }
389
- return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);
390
- }
391
- var getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {
392
- const fields = {};
393
- for (const name of fieldsNames) {
394
- const field = get(_fields, name);
395
- field && set(fields, name, field._f);
396
- }
397
- return {
398
- criteriaMode,
399
- names: [...fieldsNames],
400
- fields,
401
- shouldUseNativeValidation
402
- };
403
- };
404
- var isRegex = (value) => value instanceof RegExp;
405
- var getRuleValue = (rule) => isUndefined(rule) ? rule : isRegex(rule) ? rule.source : isObject(rule) ? isRegex(rule.value) ? rule.value.source : rule.value : rule;
406
- var getValidationModes = (mode) => ({
407
- isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,
408
- isOnBlur: mode === VALIDATION_MODE.onBlur,
409
- isOnChange: mode === VALIDATION_MODE.onChange,
410
- isOnAll: mode === VALIDATION_MODE.all,
411
- isOnTouch: mode === VALIDATION_MODE.onTouched
412
- });
413
- const ASYNC_FUNCTION = "AsyncFunction";
414
- var hasPromiseValidation = (fieldReference) => {
415
- if (!fieldReference || !fieldReference.validate)
416
- return false;
417
- if (isFunction(fieldReference.validate)) {
418
- return fieldReference.validate.constructor.name === ASYNC_FUNCTION;
419
- }
420
- if (isObject(fieldReference.validate)) {
421
- for (const key in fieldReference.validate) {
422
- if (fieldReference.validate[key].constructor.name === ASYNC_FUNCTION) {
423
- return true;
424
- }
425
- }
426
- }
427
- return false;
428
- };
429
- var hasValidation = (options) => options.mount && (options.required || options.min || options.max || options.maxLength || options.minLength || options.pattern || options.validate);
430
- var isWatched = (name, _names, isBlurEvent) => {
431
- if (isBlurEvent)
432
- return false;
433
- if (_names.watchAll || _names.watch.has(name))
434
- return true;
435
- for (const watchName of _names.watch) {
436
- if (name.startsWith(watchName) && name.charAt(watchName.length) === ".")
437
- return true;
438
- }
439
- return false;
440
- };
441
- const iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {
442
- for (const key of fieldsNames || Object.keys(fields)) {
443
- const field = get(fields, key);
444
- if (field) {
445
- const { _f, ...currentField } = field;
446
- if (_f) {
447
- if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {
448
- return true;
449
- } else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {
450
- return true;
451
- } else {
452
- if (iterateFieldsByAction(currentField, action)) {
453
- break;
454
- }
455
- }
456
- } else if (isObject(currentField)) {
457
- if (iterateFieldsByAction(currentField, action)) {
458
- break;
459
- }
460
- }
461
- }
462
- }
463
- return;
464
- };
465
- function schemaErrorLookup(errors, _fields, name) {
466
- const error = get(errors, name);
467
- if (error || isKey(name)) {
468
- return {
469
- error,
470
- name
471
- };
472
- }
473
- const names = name.split(".");
474
- while (names.length) {
475
- const fieldName = names.join(".");
476
- const field = get(_fields, fieldName);
477
- const foundError = get(errors, fieldName);
478
- if (field && !Array.isArray(field) && name !== fieldName) {
479
- return { name };
480
- }
481
- if (foundError && foundError.type) {
482
- return {
483
- name: fieldName,
484
- error: foundError
485
- };
486
- }
487
- if (foundError && foundError.root && foundError.root.type) {
488
- return {
489
- name: `${fieldName}.root`,
490
- error: foundError.root
491
- };
492
- }
493
- names.pop();
494
- }
495
- return {
496
- name
497
- };
498
- }
499
- var shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {
500
- updateFormState(formStateData);
501
- const { name, ...formState } = formStateData;
502
- const keys = Object.keys(formState);
503
- return !keys.length || isRoot && keys.length >= Object.keys(_proxyFormState).length || keys.find((key) => _proxyFormState[key] === (!isRoot || VALIDATION_MODE.all));
504
- };
505
- var shouldSubscribeByName = (name, signalName, exact) => !name || !signalName || name === signalName || convertToArrayPayload(name).some((currentName) => currentName && (exact ? currentName === signalName : currentName.startsWith(signalName) || signalName.startsWith(currentName)));
506
- var skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {
507
- if (mode.isOnAll) {
508
- return false;
509
- } else if (!isSubmitted && mode.isOnTouch) {
510
- return !(isTouched || isBlurEvent);
511
- } else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {
512
- return !isBlurEvent;
513
- } else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {
514
- return isBlurEvent;
515
- }
516
- return true;
517
- };
518
- var unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);
519
- var updateFieldArrayRootError = (errors, error, name) => {
520
- const existingErrors = get(errors, name);
521
- const fieldArrayErrors = Array.isArray(existingErrors) ? existingErrors : [];
522
- set(fieldArrayErrors, ROOT_ERROR_TYPE, error[name]);
523
- set(errors, name, fieldArrayErrors);
524
- return errors;
525
- };
526
- function getValidateError(result, ref, type = "validate") {
527
- if (isString(result) || Array.isArray(result) && result.every(isString) || isBoolean(result) && !result) {
528
- return {
529
- type,
530
- message: isString(result) ? result : "",
531
- ref
532
- };
533
- }
534
- }
535
- var getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData) ? validationData : {
536
- value: validationData,
537
- message: ""
538
- };
539
- var validateField = async (field, disabledFieldNames, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {
540
- const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount } = field._f;
541
- const inputValue = get(formValues, name);
542
- if (!mount || disabledFieldNames.has(name)) {
543
- return {};
544
- }
545
- const inputRef = refs ? refs[0] : ref;
546
- const setCustomValidity = (message) => {
547
- if (shouldUseNativeValidation && inputRef.reportValidity) {
548
- const validityMessage = isBoolean(message) ? "" : message || "";
549
- if (refs) {
550
- refs.forEach((ref2) => ref2.setCustomValidity(validityMessage));
551
- } else {
552
- inputRef.setCustomValidity(validityMessage);
553
- }
554
- inputRef.reportValidity();
555
- }
556
- };
557
- const error = {};
558
- const isRadio = isRadioInput(ref);
559
- const isCheckBox = isCheckBoxInput(ref);
560
- const isRadioOrCheckbox2 = isRadio || isCheckBox;
561
- const isEmpty = (valueAsNumber || isFileInput(ref)) && isUndefined(ref.value) && isUndefined(inputValue) || isHTMLElement(ref) && ref.value === "" || inputValue === "" || Array.isArray(inputValue) && !inputValue.length;
562
- const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);
563
- const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {
564
- const message = exceedMax ? maxLengthMessage : minLengthMessage;
565
- error[name] = {
566
- type: exceedMax ? maxType : minType,
567
- message,
568
- ref,
569
- ...appendErrorsCurry(exceedMax ? maxType : minType, message)
570
- };
571
- };
572
- if (isFieldArray ? !Array.isArray(inputValue) || !inputValue.length : required && (!isRadioOrCheckbox2 && (isEmpty || isNullOrUndefined(inputValue)) || isBoolean(inputValue) && !inputValue || isCheckBox && !getCheckboxValue(refs).isValid || isRadio && !getRadioValue(refs).isValid)) {
573
- const { value, message } = isString(required) ? { value: !!required, message: required } : getValueAndMessage(required);
574
- if (value) {
575
- error[name] = {
576
- type: INPUT_VALIDATION_RULES.required,
577
- message,
578
- ref: inputRef,
579
- ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message)
580
- };
581
- if (!validateAllFieldCriteria) {
582
- setCustomValidity(message);
583
- return error;
584
- }
585
- }
586
- }
587
- if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {
588
- let exceedMax;
589
- let exceedMin;
590
- const maxOutput = getValueAndMessage(max);
591
- const minOutput = getValueAndMessage(min);
592
- if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {
593
- const valueNumber = ref.valueAsNumber || (inputValue ? +inputValue : inputValue);
594
- if (!isNullOrUndefined(maxOutput.value)) {
595
- exceedMax = valueNumber > maxOutput.value;
596
- }
597
- if (!isNullOrUndefined(minOutput.value)) {
598
- exceedMin = valueNumber < minOutput.value;
599
- }
600
- } else {
601
- const valueDate = ref.valueAsDate || new Date(inputValue);
602
- const convertTimeToDate = (time) => /* @__PURE__ */ new Date((/* @__PURE__ */ new Date()).toDateString() + " " + time);
603
- const isTime = ref.type == "time";
604
- const isWeek = ref.type == "week";
605
- if (isString(maxOutput.value) && inputValue) {
606
- exceedMax = isTime ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value) : isWeek ? inputValue > maxOutput.value : valueDate > new Date(maxOutput.value);
607
- }
608
- if (isString(minOutput.value) && inputValue) {
609
- exceedMin = isTime ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value) : isWeek ? inputValue < minOutput.value : valueDate < new Date(minOutput.value);
610
- }
611
- }
612
- if (exceedMax || exceedMin) {
613
- getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);
614
- if (!validateAllFieldCriteria) {
615
- setCustomValidity(error[name].message);
616
- return error;
617
- }
618
- }
619
- }
620
- if ((maxLength || minLength) && !isEmpty && (isString(inputValue) || isFieldArray && Array.isArray(inputValue))) {
621
- const maxLengthOutput = getValueAndMessage(maxLength);
622
- const minLengthOutput = getValueAndMessage(minLength);
623
- const exceedMax = !isNullOrUndefined(maxLengthOutput.value) && inputValue.length > +maxLengthOutput.value;
624
- const exceedMin = !isNullOrUndefined(minLengthOutput.value) && inputValue.length < +minLengthOutput.value;
625
- if (exceedMax || exceedMin) {
626
- getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);
627
- if (!validateAllFieldCriteria) {
628
- setCustomValidity(error[name].message);
629
- return error;
630
- }
631
- }
632
- }
633
- if (pattern && !isEmpty && isString(inputValue)) {
634
- const { value: patternValue, message } = getValueAndMessage(pattern);
635
- if (isRegex(patternValue) && !inputValue.match(patternValue)) {
636
- error[name] = {
637
- type: INPUT_VALIDATION_RULES.pattern,
638
- message,
639
- ref,
640
- ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message)
641
- };
642
- if (!validateAllFieldCriteria) {
643
- setCustomValidity(message);
644
- return error;
645
- }
646
- }
647
- }
648
- if (validate) {
649
- if (isFunction(validate)) {
650
- const result = await validate(inputValue, formValues);
651
- const validateError = getValidateError(result, inputRef);
652
- if (validateError) {
653
- error[name] = {
654
- ...validateError,
655
- ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message)
656
- };
657
- if (!validateAllFieldCriteria) {
658
- setCustomValidity(validateError.message);
659
- return error;
660
- }
661
- }
662
- } else if (isObject(validate)) {
663
- let validationResult = {};
664
- for (const key in validate) {
665
- if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {
666
- break;
667
- }
668
- const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);
669
- if (validateError) {
670
- validationResult = {
671
- ...validateError,
672
- ...appendErrorsCurry(key, validateError.message)
673
- };
674
- setCustomValidity(validateError.message);
675
- if (validateAllFieldCriteria) {
676
- error[name] = validationResult;
677
- }
678
- }
679
- }
680
- if (!isEmptyObject(validationResult)) {
681
- error[name] = {
682
- ref: inputRef,
683
- ...validationResult
684
- };
685
- if (!validateAllFieldCriteria) {
686
- return error;
687
- }
688
- }
689
- }
690
- }
691
- setCustomValidity(true);
692
- return error;
693
- };
694
- const defaultOptions = {
695
- mode: VALIDATION_MODE.onSubmit,
696
- reValidateMode: VALIDATION_MODE.onChange,
697
- shouldFocusError: true
698
- };
699
- const FORM_ERROR_TYPE = "form";
700
- const DEFAULT_FORM_STATE = {
701
- submitCount: 0,
702
- isDirty: false,
703
- isReady: false,
704
- isValidating: false,
705
- isSubmitted: false,
706
- isSubmitting: false,
707
- isSubmitSuccessful: false,
708
- isValid: false,
709
- touchedFields: {},
710
- dirtyFields: {},
711
- validatingFields: {}
712
- };
713
- function createFormControl(props = {}) {
714
- let _options = {
715
- ...defaultOptions,
716
- ...props
717
- };
718
- let _formState = {
719
- ...cloneObject(DEFAULT_FORM_STATE),
720
- isLoading: isFunction(_options.defaultValues),
721
- errors: _options.errors || {},
722
- disabled: _options.disabled || false
723
- };
724
- let _fields = {};
725
- let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values) ? cloneObject(_options.defaultValues || _options.values) || {} : {};
726
- let _formValues = _options.shouldUnregister ? {} : cloneObject(_defaultValues);
727
- let _state = {
728
- action: false,
729
- mount: false,
730
- watch: false,
731
- keepIsValid: false
732
- };
733
- let _names = {
734
- mount: /* @__PURE__ */ new Set(),
735
- disabled: /* @__PURE__ */ new Set(),
736
- unMount: /* @__PURE__ */ new Set(),
737
- array: /* @__PURE__ */ new Set(),
738
- watch: /* @__PURE__ */ new Set(),
739
- registerName: /* @__PURE__ */ new Set()
740
- };
741
- let delayErrorCallback;
742
- let timer = 0;
743
- let _valuesSubscriberCount = 0;
744
- let _validationModeBeforeSubmit = getValidationModes(_options.mode);
745
- let _validationModeAfterSubmit = getValidationModes(_options.reValidateMode);
746
- const defaultProxyFormState = {
747
- isDirty: false,
748
- dirtyFields: false,
749
- validatingFields: false,
750
- touchedFields: false,
751
- isValidating: false,
752
- isValid: false,
753
- errors: false
754
- };
755
- const _proxyFormState = {
756
- ...defaultProxyFormState
757
- };
758
- let _proxySubscribeFormState = {
759
- ..._proxyFormState
760
- };
761
- const _subjects = {
762
- array: createSubject(),
763
- state: createSubject()
764
- };
765
- const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;
766
- const debounce = (callback) => (wait) => {
767
- clearTimeout(timer);
768
- timer = setTimeout(callback, wait);
769
- };
770
- const _setValid = async (shouldUpdateValid) => {
771
- if (_state.keepIsValid) {
772
- return;
773
- }
774
- if (!_options.disabled && (_proxyFormState.isValid || _proxySubscribeFormState.isValid || shouldUpdateValid)) {
775
- let isValid;
776
- if (_options.resolver) {
777
- isValid = isEmptyObject((await _runSchema()).errors);
778
- _updateIsValidating();
779
- } else {
780
- isValid = await executeBuiltInValidation({
781
- fields: _fields,
782
- onlyCheckValid: true,
783
- eventType: EVENTS.VALID
784
- });
785
- }
786
- if (isValid !== _formState.isValid) {
787
- _subjects.state.next({
788
- isValid
789
- });
790
- }
791
- }
792
- };
793
- const _updateIsValidating = (names, isValidating) => {
794
- if (!_options.disabled && (_proxyFormState.isValidating || _proxyFormState.validatingFields || _proxySubscribeFormState.isValidating || _proxySubscribeFormState.validatingFields)) {
795
- (names || Array.from(_names.mount)).forEach((name) => {
796
- if (name) {
797
- isValidating ? set(_formState.validatingFields, name, isValidating) : unset(_formState.validatingFields, name);
798
- }
799
- });
800
- _subjects.state.next({
801
- validatingFields: _formState.validatingFields,
802
- isValidating: !isEmptyObject(_formState.validatingFields)
803
- });
804
- }
805
- };
806
- const _updateDirtyFields = () => {
807
- _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);
808
- };
809
- const _setFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {
810
- if (args && method && !_options.disabled) {
811
- _state.action = true;
812
- if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {
813
- const fieldValues = method(get(_fields, name), args.argA, args.argB);
814
- shouldSetValues && set(_fields, name, fieldValues);
815
- }
816
- if (shouldUpdateFieldsAndState && Array.isArray(get(_formState.errors, name))) {
817
- const errors = method(get(_formState.errors, name), args.argA, args.argB);
818
- shouldSetValues && set(_formState.errors, name, errors);
819
- unsetEmptyArray(_formState.errors, name);
820
- }
821
- if ((_proxyFormState.touchedFields || _proxySubscribeFormState.touchedFields) && shouldUpdateFieldsAndState && Array.isArray(get(_formState.touchedFields, name))) {
822
- const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);
823
- shouldSetValues && set(_formState.touchedFields, name, touchedFields);
824
- }
825
- if (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) {
826
- _updateDirtyFields();
827
- }
828
- _subjects.state.next({
829
- name,
830
- isDirty: _getDirty(name, values),
831
- dirtyFields: _formState.dirtyFields,
832
- errors: _formState.errors,
833
- isValid: _formState.isValid
834
- });
835
- } else {
836
- set(_formValues, name, values);
837
- }
838
- };
839
- const updateErrors = (name, error) => {
840
- set(_formState.errors, name, error);
841
- _formState.errors = { ..._formState.errors };
842
- _subjects.state.next({
843
- errors: _formState.errors
844
- });
845
- };
846
- const _setErrors = (errors) => {
847
- _formState.errors = errors;
848
- _subjects.state.next({
849
- errors: _formState.errors,
850
- isValid: false
851
- });
852
- };
853
- const hasExplicitNullIntermediate = (name) => {
854
- const segments = isKey(name) ? [name] : stringToPath(name);
855
- let formValues = _formValues;
856
- let defaultValues = _defaultValues;
857
- for (let i = 0; i < segments.length - 1; i++) {
858
- const key = segments[i];
859
- formValues = isNullOrUndefined(formValues) ? formValues : formValues[key];
860
- defaultValues = isNullOrUndefined(defaultValues) ? defaultValues : defaultValues[key];
861
- if (formValues === null && defaultValues !== null) {
862
- return true;
863
- }
864
- }
865
- return false;
866
- };
867
- const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {
868
- const field = get(_fields, name);
869
- if (field) {
870
- if (hasExplicitNullIntermediate(name)) {
871
- return;
872
- }
873
- const wasUnsetInFormValues = isUndefined(get(_formValues, name));
874
- const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);
875
- isUndefined(defaultValue) || ref && ref.defaultChecked || shouldSkipSetValueAs ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f)) : setFieldValue(name, defaultValue);
876
- if (_state.mount && !_state.action) {
877
- _setValid();
878
- if (wasUnsetInFormValues && _formState.isDirty && (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty)) {
879
- const isDirty = _getDirty();
880
- if (!isDirty) {
881
- _formState.isDirty = false;
882
- _subjects.state.next({ ..._formState });
883
- }
884
- }
885
- if (props.shouldUnregister && wasUnsetInFormValues && !isUndefined(get(_formValues, name)) && isWatched(name, _names)) {
886
- _state.watch = true;
887
- }
888
- }
889
- }
890
- };
891
- const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {
892
- let shouldUpdateField = false;
893
- let isPreviousDirty = false;
894
- const output = {
895
- name
896
- };
897
- if (!_options.disabled) {
898
- if (!isBlurEvent || shouldDirty) {
899
- const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);
900
- if (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty) {
901
- isPreviousDirty = _formState.isDirty;
902
- _formState.isDirty = output.isDirty = !isCurrentFieldPristine || _getDirty();
903
- shouldUpdateField = isPreviousDirty !== output.isDirty;
904
- }
905
- isPreviousDirty = !!get(_formState.dirtyFields, name);
906
- if (isCurrentFieldPristine !== _formState.isDirty) {
907
- _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);
908
- } else {
909
- isCurrentFieldPristine ? unset(_formState.dirtyFields, name) : set(_formState.dirtyFields, name, true);
910
- }
911
- output.dirtyFields = _formState.dirtyFields;
912
- shouldUpdateField = shouldUpdateField || (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) && isPreviousDirty !== !isCurrentFieldPristine;
913
- }
914
- if (isBlurEvent) {
915
- const isPreviousFieldTouched = get(_formState.touchedFields, name);
916
- if (!isPreviousFieldTouched) {
917
- set(_formState.touchedFields, name, isBlurEvent);
918
- output.touchedFields = _formState.touchedFields;
919
- shouldUpdateField = shouldUpdateField || (_proxyFormState.touchedFields || _proxySubscribeFormState.touchedFields) && isPreviousFieldTouched !== isBlurEvent;
920
- }
921
- }
922
- shouldUpdateField && shouldRender && _subjects.state.next(output);
923
- }
924
- return shouldUpdateField ? output : {};
925
- };
926
- const shouldRenderByError = (name, isValid, error, fieldState) => {
927
- const previousFieldError = get(_formState.errors, name);
928
- const shouldUpdateValid = (_proxyFormState.isValid || _proxySubscribeFormState.isValid) && isBoolean(isValid) && _formState.isValid !== isValid;
929
- if (_options.delayError && error) {
930
- delayErrorCallback = debounce(() => updateErrors(name, error));
931
- delayErrorCallback(_options.delayError);
932
- } else {
933
- clearTimeout(timer);
934
- delayErrorCallback = null;
935
- error ? set(_formState.errors, name, error) : unset(_formState.errors, name);
936
- _formState.errors = { ..._formState.errors };
937
- }
938
- if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) || !isEmptyObject(fieldState) || shouldUpdateValid) {
939
- const updatedFormState = {
940
- ...fieldState,
941
- ...shouldUpdateValid && isBoolean(isValid) ? { isValid } : {},
942
- errors: _formState.errors,
943
- name
944
- };
945
- _formState = {
946
- ..._formState,
947
- ...updatedFormState
948
- };
949
- _subjects.state.next(updatedFormState);
950
- }
951
- };
952
- const _runSchema = async (name) => {
953
- _updateIsValidating(name, true);
954
- return await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));
955
- };
956
- const executeSchemaAndUpdateState = async (names) => {
957
- const { errors } = await _runSchema(names);
958
- _updateIsValidating(names);
959
- if (names) {
960
- for (const name of names) {
961
- const error = get(errors, name);
962
- error ? _names.array.has(name) && isObject(error) && !Object.keys(error).some((key) => !Number.isNaN(Number(key))) ? updateFieldArrayRootError(_formState.errors, { [name]: error }, name) : set(_formState.errors, name, error) : unset(_formState.errors, name);
963
- }
964
- _formState.errors = { ..._formState.errors };
965
- } else {
966
- _formState.errors = errors;
967
- }
968
- return errors;
969
- };
970
- const validateForm = async ({ name, eventType }) => {
971
- if (props.validate) {
972
- const result = await props.validate({
973
- formValues: _formValues,
974
- formState: _formState,
975
- name,
976
- eventType
977
- });
978
- if (isObject(result)) {
979
- for (const key in result) {
980
- const error = result[key];
981
- if (error) {
982
- setError(`${FORM_ERROR_TYPE}.${key}`, {
983
- message: isString(error.message) ? error.message : "",
984
- type: error.type || INPUT_VALIDATION_RULES.validate
985
- });
986
- }
987
- }
988
- } else if (isString(result) || !result) {
989
- setError(FORM_ERROR_TYPE, {
990
- message: result || "",
991
- type: INPUT_VALIDATION_RULES.validate
992
- });
993
- } else {
994
- clearErrors(FORM_ERROR_TYPE);
995
- }
996
- return result;
997
- }
998
- return true;
999
- };
1000
- const executeBuiltInValidation = async ({ fields, onlyCheckValid, name, eventType, context = {
1001
- valid: true,
1002
- runRootValidation: false
1003
- } }) => {
1004
- if (props.validate) {
1005
- context.runRootValidation = true;
1006
- const result = await validateForm({
1007
- name,
1008
- eventType
1009
- });
1010
- if (!result) {
1011
- context.valid = false;
1012
- if (onlyCheckValid) {
1013
- return context.valid;
1014
- }
1015
- }
1016
- }
1017
- for (const name2 in fields) {
1018
- const field = fields[name2];
1019
- if (field) {
1020
- const { _f, ...fieldValue } = field;
1021
- if (_f) {
1022
- const isFieldArrayRoot = _names.array.has(_f.name);
1023
- const isPromiseFunction = field._f && hasPromiseValidation(field._f);
1024
- const shouldTrackIsValidatingState = _proxyFormState.validatingFields || _proxyFormState.isValidating || _proxySubscribeFormState.validatingFields || _proxySubscribeFormState.isValidating;
1025
- if (isPromiseFunction && shouldTrackIsValidatingState) {
1026
- _updateIsValidating([_f.name], true);
1027
- }
1028
- const fieldError = await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !onlyCheckValid, isFieldArrayRoot);
1029
- if (isPromiseFunction && shouldTrackIsValidatingState) {
1030
- _updateIsValidating([_f.name]);
1031
- }
1032
- if (fieldError[_f.name]) {
1033
- context.valid = false;
1034
- if (onlyCheckValid) {
1035
- break;
1036
- }
1037
- }
1038
- !onlyCheckValid && (get(fieldError, _f.name) ? isFieldArrayRoot ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name) : set(_formState.errors, _f.name, fieldError[_f.name]) : unset(_formState.errors, _f.name));
1039
- if (props.shouldUseNativeValidation && fieldError[_f.name]) {
1040
- break;
1041
- }
1042
- }
1043
- !isEmptyObject(fieldValue) && await executeBuiltInValidation({
1044
- context,
1045
- onlyCheckValid,
1046
- fields: fieldValue,
1047
- name: name2,
1048
- eventType
1049
- });
1050
- }
1051
- }
1052
- return context.valid;
1053
- };
1054
- const _removeUnmounted = () => {
1055
- for (const name of _names.unMount) {
1056
- const field = get(_fields, name);
1057
- field && (field._f.refs ? field._f.refs.every((ref) => !live(ref)) : !live(field._f.ref)) && unregister(name);
1058
- }
1059
- _names.unMount = /* @__PURE__ */ new Set();
1060
- };
1061
- const _getDirty = (name, data) => !_options.disabled && (name && data && set(_formValues, name, data), !deepEqual(_state.mount ? _formValues : _defaultValues, _defaultValues));
1062
- const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {
1063
- ..._state.mount ? _formValues : isUndefined(defaultValue) ? _defaultValues : isString(names) ? { [names]: defaultValue } : defaultValue
1064
- }, isGlobal, defaultValue);
1065
- const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, _options.shouldUnregister ? get(_defaultValues, name, []) : []));
1066
- const setFieldValue = (name, value, options = {}, skipClone = false, skipRender = false) => {
1067
- const field = get(_fields, name);
1068
- let fieldValue = value;
1069
- if (field) {
1070
- const fieldReference = field._f;
1071
- if (fieldReference) {
1072
- !fieldReference.disabled && set(_formValues, name, getFieldValueAs(value, fieldReference));
1073
- fieldValue = isHTMLElement(fieldReference.ref) && isNullOrUndefined(value) ? "" : value;
1074
- if (isMultipleSelect(fieldReference.ref)) {
1075
- [...fieldReference.ref.options].forEach((optionRef) => optionRef.selected = fieldValue.includes(optionRef.value));
1076
- } else if (fieldReference.refs) {
1077
- if (isCheckBoxInput(fieldReference.ref)) {
1078
- fieldReference.refs.forEach((checkboxRef) => {
1079
- if (!checkboxRef.defaultChecked || !checkboxRef.disabled) {
1080
- if (Array.isArray(fieldValue)) {
1081
- checkboxRef.checked = !!fieldValue.find((data) => data === checkboxRef.value);
1082
- } else {
1083
- checkboxRef.checked = fieldValue === checkboxRef.value || !!fieldValue;
1084
- }
1085
- }
1086
- });
1087
- } else {
1088
- fieldReference.refs.forEach((radioRef) => radioRef.checked = radioRef.value === fieldValue);
1089
- }
1090
- } else if (isFileInput(fieldReference.ref)) {
1091
- fieldReference.ref.value = "";
1092
- } else {
1093
- fieldReference.ref.value = fieldValue;
1094
- if (!fieldReference.ref.type && !skipRender) {
1095
- _subjects.state.next({
1096
- name,
1097
- values: skipClone ? _formValues : cloneObject(_formValues)
1098
- });
1099
- }
1100
- }
1101
- }
1102
- }
1103
- (options.shouldDirty || options.shouldTouch) && updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, !skipRender);
1104
- options.shouldValidate && trigger(name);
1105
- };
1106
- const setFieldValues = (name, value, options, skipClone = false, skipRender = false) => {
1107
- for (const fieldKey in value) {
1108
- if (!value.hasOwnProperty(fieldKey)) {
1109
- return;
1110
- }
1111
- const fieldValue = value[fieldKey];
1112
- const fieldName = name + "." + fieldKey;
1113
- const field = get(_fields, fieldName);
1114
- (_names.array.has(name) || isObject(fieldValue) || field && !field._f) && !isDateObject(fieldValue) ? setFieldValues(fieldName, fieldValue, options, skipClone, skipRender) : setFieldValue(fieldName, fieldValue, options, skipClone, skipRender);
1115
- }
1116
- };
1117
- const _setValue = (name, value, options, skipClone, skipStateEmit = false) => {
1118
- const field = get(_fields, name);
1119
- const isFieldArray = _names.array.has(name);
1120
- const cloneValue = skipClone ? value : cloneObject(value);
1121
- const previousValue = get(_formValues, name);
1122
- const isValueUnchanged = deepEqual(previousValue, cloneValue);
1123
- if (!isValueUnchanged) {
1124
- set(_formValues, name, cloneValue);
1125
- }
1126
- if (isFieldArray) {
1127
- _subjects.array.next({
1128
- name,
1129
- values: skipClone ? _formValues : cloneObject(_formValues)
1130
- });
1131
- if ((_proxyFormState.isDirty || _proxyFormState.dirtyFields || _proxySubscribeFormState.isDirty || _proxySubscribeFormState.dirtyFields) && options.shouldDirty) {
1132
- _updateDirtyFields();
1133
- if (!skipStateEmit) {
1134
- _subjects.state.next({
1135
- name,
1136
- dirtyFields: _formState.dirtyFields,
1137
- isDirty: _getDirty(name, cloneValue)
1138
- });
1139
- }
1140
- }
1141
- } else {
1142
- const isEmpty = Array.isArray(cloneValue) && !cloneValue.length || isEmptyObject(cloneValue);
1143
- if (!field || field._f || isNullOrUndefined(cloneValue) || isEmpty) {
1144
- setFieldValue(name, cloneValue, options, skipClone, skipStateEmit);
1145
- } else {
1146
- setFieldValues(name, cloneValue, options, skipClone, skipStateEmit);
1147
- }
1148
- }
1149
- if (!isValueUnchanged && !skipStateEmit) {
1150
- const watched = isWatched(name, _names);
1151
- const values = skipClone ? _formValues : cloneObject(_formValues);
1152
- _subjects.state.next({
1153
- ...watched && _formState,
1154
- name: _state.mount || watched ? name : void 0,
1155
- values
1156
- });
1157
- }
1158
- };
1159
- const setValue = (name, value, options = {}) => _setValue(name, value, options, false);
1160
- const setValues = (formValues, options = {}) => {
1161
- const updatedFormValues = isFunction(formValues) ? formValues(_formValues) : formValues;
1162
- if (!deepEqual(_formValues, updatedFormValues)) {
1163
- _formValues = {
1164
- ..._formValues,
1165
- ...updatedFormValues
1166
- };
1167
- for (const fieldName of _names.mount) {
1168
- _setValue(fieldName, get(updatedFormValues, fieldName), options, true, true);
1169
- }
1170
- _subjects.state.next({
1171
- ..._formState,
1172
- name: void 0,
1173
- type: void 0,
1174
- ..._valuesSubscriberCount ? { values: _formValues } : {}
1175
- });
1176
- if (options.shouldValidate) {
1177
- _setValid();
1178
- }
1179
- }
1180
- };
1181
- const onChange = async (event) => {
1182
- _state.mount = true;
1183
- const target = event.target;
1184
- let name = target.name;
1185
- let isFieldValueUpdated = true;
1186
- const field = get(_fields, name);
1187
- const _updateIsFieldValueUpdated = (fieldValue) => {
1188
- isFieldValueUpdated = Number.isNaN(fieldValue) || isDateObject(fieldValue) && isNaN(fieldValue.getTime()) || deepEqual(fieldValue, get(_formValues, name, fieldValue));
1189
- };
1190
- if (field) {
1191
- let error;
1192
- let isValid;
1193
- const fieldValue = target.type ? getFieldValue(field._f) : getEventValue(event);
1194
- const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;
1195
- const hasNoValidationEffect = !hasValidation(field._f) && !props.validate && !_options.resolver && !get(_formState.errors, name) && !field._f.deps;
1196
- const shouldSkipValidation = hasNoValidationEffect || skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, _validationModeAfterSubmit, _validationModeBeforeSubmit);
1197
- const watched = isWatched(name, _names, isBlurEvent);
1198
- set(_formValues, name, fieldValue);
1199
- if (isBlurEvent) {
1200
- if (!target || !target.readOnly) {
1201
- field._f.onBlur && field._f.onBlur(event);
1202
- delayErrorCallback && delayErrorCallback(0);
1203
- }
1204
- } else if (field._f.onChange) {
1205
- field._f.onChange(event);
1206
- }
1207
- const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent);
1208
- const shouldRender = !isEmptyObject(fieldState) || watched;
1209
- !isBlurEvent && _subjects.state.next({
1210
- name,
1211
- type: event.type,
1212
- ..._valuesSubscriberCount ? { values: cloneObject(_formValues) } : {}
1213
- });
1214
- if (shouldSkipValidation) {
1215
- if ((!hasNoValidationEffect || !_formState.isValid) && (_proxyFormState.isValid || _proxySubscribeFormState.isValid)) {
1216
- if (_options.mode === "onBlur") {
1217
- if (isBlurEvent) {
1218
- _setValid();
1219
- }
1220
- } else if (!isBlurEvent) {
1221
- _setValid();
1222
- }
1223
- }
1224
- return shouldRender && _subjects.state.next({ name, ...watched ? {} : fieldState });
1225
- }
1226
- if (!_options.resolver && props.validate) {
1227
- await validateForm({
1228
- name,
1229
- eventType: event.type
1230
- });
1231
- }
1232
- !isBlurEvent && watched && _subjects.state.next({ ..._formState });
1233
- if (_options.resolver) {
1234
- const { errors } = await _runSchema([name]);
1235
- _updateIsValidating([name]);
1236
- _updateIsFieldValueUpdated(fieldValue);
1237
- if (!isFieldValueUpdated) {
1238
- !isEmptyObject(fieldState) && _subjects.state.next(fieldState);
1239
- return;
1240
- }
1241
- const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);
1242
- const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);
1243
- error = errorLookupResult.error;
1244
- name = errorLookupResult.name;
1245
- isValid = isEmptyObject(errors);
1246
- } else {
1247
- _updateIsValidating([name], true);
1248
- error = (await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];
1249
- _updateIsValidating([name]);
1250
- _updateIsFieldValueUpdated(fieldValue);
1251
- if (isFieldValueUpdated) {
1252
- if (error) {
1253
- isValid = false;
1254
- } else if (_proxyFormState.isValid || _proxySubscribeFormState.isValid) {
1255
- isValid = await executeBuiltInValidation({
1256
- fields: _fields,
1257
- onlyCheckValid: true,
1258
- name,
1259
- eventType: event.type
1260
- });
1261
- }
1262
- }
1263
- }
1264
- if (isFieldValueUpdated) {
1265
- field._f.deps && (!Array.isArray(field._f.deps) || field._f.deps.length > 0) && trigger(field._f.deps);
1266
- shouldRenderByError(name, isValid, error, fieldState);
1267
- }
1268
- }
1269
- };
1270
- const _focusInput = (ref, key) => {
1271
- if (get(_formState.errors, key) && ref.focus) {
1272
- ref.focus();
1273
- return 1;
1274
- }
1275
- return;
1276
- };
1277
- const trigger = async (name, options = {}) => {
1278
- let isValid;
1279
- let validationResult;
1280
- const fieldNames = convertToArrayPayload(name);
1281
- if (_options.resolver) {
1282
- const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);
1283
- isValid = isEmptyObject(errors);
1284
- validationResult = name ? !fieldNames.some((name2) => get(errors, name2)) : isValid;
1285
- } else if (name) {
1286
- validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {
1287
- const field = get(_fields, fieldName);
1288
- return await executeBuiltInValidation({
1289
- fields: field && field._f ? { [fieldName]: field } : field,
1290
- eventType: EVENTS.TRIGGER
1291
- });
1292
- }))).every(Boolean);
1293
- !(!validationResult && !_formState.isValid) && _setValid();
1294
- } else {
1295
- validationResult = isValid = await executeBuiltInValidation({
1296
- fields: _fields,
1297
- name,
1298
- eventType: EVENTS.TRIGGER
1299
- });
1300
- }
1301
- _subjects.state.next({
1302
- ...!isString(name) || (_proxyFormState.isValid || _proxySubscribeFormState.isValid) && isValid !== _formState.isValid ? {} : { name },
1303
- ..._options.resolver || !name ? { isValid } : {},
1304
- errors: _formState.errors
1305
- });
1306
- options.shouldFocus && !validationResult && iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);
1307
- return validationResult;
1308
- };
1309
- const getValues = (fieldNames, config) => {
1310
- let values = {
1311
- ..._state.mount ? _formValues : _defaultValues
1312
- };
1313
- if (config) {
1314
- values = extractFormValues(config.dirtyFields ? _formState.dirtyFields : _formState.touchedFields, values);
1315
- }
1316
- return isUndefined(fieldNames) ? values : isString(fieldNames) ? get(values, fieldNames) : fieldNames.map((name) => get(values, name));
1317
- };
1318
- const getFieldState = (name, formState) => ({
1319
- invalid: !!get((formState || _formState).errors, name),
1320
- isDirty: !!get((formState || _formState).dirtyFields, name),
1321
- error: get((formState || _formState).errors, name),
1322
- isValidating: !!get(_formState.validatingFields, name),
1323
- isTouched: !!get((formState || _formState).touchedFields, name)
1324
- });
1325
- const clearErrors = (name) => {
1326
- const names = name ? convertToArrayPayload(name) : void 0;
1327
- names === null || names === void 0 ? void 0 : names.forEach((inputName) => unset(_formState.errors, inputName));
1328
- if (names) {
1329
- names.forEach((inputName) => {
1330
- _subjects.state.next({
1331
- name: inputName,
1332
- errors: _formState.errors
1333
- });
1334
- });
1335
- } else {
1336
- _subjects.state.next({
1337
- errors: {}
1338
- });
1339
- }
1340
- };
1341
- const setError = (name, error, options) => {
1342
- const ref = (get(_fields, name, { _f: {} })._f || {}).ref;
1343
- const currentError = get(_formState.errors, name) || {};
1344
- const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;
1345
- set(_formState.errors, name, {
1346
- ...restOfErrorTree,
1347
- ...error,
1348
- ref
1349
- });
1350
- _subjects.state.next({
1351
- name,
1352
- errors: _formState.errors,
1353
- isValid: false
1354
- });
1355
- options && options.shouldFocus && ref && ref.focus && ref.focus();
1356
- };
1357
- const watch = (name, defaultValue) => {
1358
- if (isFunction(name)) {
1359
- _valuesSubscriberCount++;
1360
- const { unsubscribe } = _subjects.state.subscribe({
1361
- next: (payload) => "values" in payload && name(payload.values || _getWatch(void 0, defaultValue), payload)
1362
- });
1363
- let called = false;
1364
- return {
1365
- unsubscribe: () => {
1366
- if (called) {
1367
- return;
1368
- }
1369
- called = true;
1370
- _valuesSubscriberCount--;
1371
- unsubscribe();
1372
- }
1373
- };
1374
- }
1375
- return _getWatch(name, defaultValue, true);
1376
- };
1377
- const _subscribe = (props2) => {
1378
- var _a;
1379
- const needsValues = !!((_a = props2.formState) === null || _a === void 0 ? void 0 : _a.values);
1380
- if (needsValues) {
1381
- _valuesSubscriberCount++;
1382
- }
1383
- const { unsubscribe } = _subjects.state.subscribe({
1384
- next: (formState) => {
1385
- if (shouldSubscribeByName(props2.name, formState.name, props2.exact) && shouldRenderFormState(formState, props2.formState || _proxyFormState, _setFormState, props2.reRenderRoot)) {
1386
- const snapshot = { ..._formValues };
1387
- props2.callback({
1388
- values: snapshot,
1389
- ..._formState,
1390
- ...formState,
1391
- defaultValues: _defaultValues
1392
- });
1393
- }
1394
- }
1395
- });
1396
- if (!needsValues) {
1397
- return unsubscribe;
1398
- }
1399
- let called = false;
1400
- return () => {
1401
- if (called) {
1402
- return;
1403
- }
1404
- called = true;
1405
- _valuesSubscriberCount--;
1406
- unsubscribe();
1407
- };
1408
- };
1409
- const subscribe = (props2) => {
1410
- _state.mount = true;
1411
- _proxySubscribeFormState = {
1412
- ..._proxySubscribeFormState,
1413
- ...props2.formState
1414
- };
1415
- return _subscribe({
1416
- ...props2,
1417
- formState: {
1418
- ...defaultProxyFormState,
1419
- ...props2.formState
1420
- }
1421
- });
1422
- };
1423
- const unregister = (name, options = {}) => {
1424
- for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {
1425
- _names.mount.delete(fieldName);
1426
- _names.array.delete(fieldName);
1427
- if (!options.keepValue) {
1428
- unset(_fields, fieldName);
1429
- unset(_formValues, fieldName);
1430
- }
1431
- !options.keepError && unset(_formState.errors, fieldName);
1432
- !options.keepDirty && unset(_formState.dirtyFields, fieldName);
1433
- !options.keepTouched && unset(_formState.touchedFields, fieldName);
1434
- !options.keepIsValidating && unset(_formState.validatingFields, fieldName);
1435
- !_options.shouldUnregister && !options.keepDefaultValue && unset(_defaultValues, fieldName);
1436
- }
1437
- _subjects.state.next({
1438
- values: cloneObject(_formValues)
1439
- });
1440
- _subjects.state.next({
1441
- ..._formState,
1442
- ...!options.keepDirty ? {} : { isDirty: _getDirty() }
1443
- });
1444
- !options.keepIsValid && _setValid();
1445
- };
1446
- const _setDisabledField = ({ disabled, name }) => {
1447
- if (isBoolean(disabled) && _state.mount || !!disabled || _names.disabled.has(name)) {
1448
- const wasDisabled = _names.disabled.has(name);
1449
- const isDisabled = !!disabled;
1450
- const disabledStateChanged = wasDisabled !== isDisabled;
1451
- disabled ? _names.disabled.add(name) : _names.disabled.delete(name);
1452
- disabledStateChanged && _state.mount && !_state.action && _setValid();
1453
- }
1454
- };
1455
- const register = (name, options = {}) => {
1456
- let field = get(_fields, name);
1457
- const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);
1458
- const shouldRevalidateRemount = !_names.registerName.has(name) && field && field._f && !field._f.mount;
1459
- set(_fields, name, {
1460
- ...field || {},
1461
- _f: {
1462
- ...field && field._f ? field._f : { ref: { name } },
1463
- name,
1464
- mount: true,
1465
- ...options
1466
- }
1467
- });
1468
- _names.mount.add(name);
1469
- if (field && !shouldRevalidateRemount) {
1470
- _setDisabledField({
1471
- disabled: isBoolean(options.disabled) ? options.disabled : _options.disabled,
1472
- name
1473
- });
1474
- } else {
1475
- updateValidAndValue(name, true, options.value);
1476
- }
1477
- return {
1478
- ...disabledIsDefined ? { disabled: options.disabled || _options.disabled } : {},
1479
- ..._options.progressive ? {
1480
- required: !!options.required,
1481
- min: getRuleValue(options.min),
1482
- max: getRuleValue(options.max),
1483
- minLength: getRuleValue(options.minLength),
1484
- maxLength: getRuleValue(options.maxLength),
1485
- pattern: getRuleValue(options.pattern)
1486
- } : {},
1487
- name,
1488
- onChange,
1489
- onBlur: onChange,
1490
- ref: (ref) => {
1491
- if (ref) {
1492
- _names.registerName.add(name);
1493
- register(name, options);
1494
- _names.registerName.delete(name);
1495
- field = get(_fields, name);
1496
- const fieldRef = isUndefined(ref.value) ? ref.querySelectorAll ? ref.querySelectorAll("input,select,textarea")[0] || ref : ref : ref;
1497
- const radioOrCheckbox = isRadioOrCheckbox(fieldRef);
1498
- const refs = field._f.refs || [];
1499
- if (radioOrCheckbox ? refs.find((option) => option === fieldRef) : fieldRef === field._f.ref) {
1500
- return;
1501
- }
1502
- set(_fields, name, {
1503
- _f: {
1504
- ...field._f,
1505
- ...radioOrCheckbox ? {
1506
- refs: [
1507
- ...refs.filter(live),
1508
- fieldRef,
1509
- ...Array.isArray(get(_defaultValues, name)) ? [{}] : []
1510
- ],
1511
- ref: { type: fieldRef.type, name }
1512
- } : { ref: fieldRef }
1513
- }
1514
- });
1515
- updateValidAndValue(name, false, void 0, fieldRef);
1516
- } else {
1517
- field = get(_fields, name, {});
1518
- if (field._f) {
1519
- field._f.mount = false;
1520
- }
1521
- (_options.shouldUnregister || options.shouldUnregister) && !(isNameInFieldArray(_names.array, name) && _state.action) && _names.unMount.add(name);
1522
- }
1523
- }
1524
- };
1525
- };
1526
- const _focusError = () => _options.shouldFocusError && !_options.shouldUseNativeValidation && iterateFieldsByAction(_fields, _focusInput, _names.mount);
1527
- const _disableForm = (disabled) => {
1528
- if (isBoolean(disabled)) {
1529
- _subjects.state.next({ disabled });
1530
- iterateFieldsByAction(_fields, (ref, name) => {
1531
- const currentField = get(_fields, name);
1532
- if (currentField) {
1533
- ref.disabled = currentField._f.disabled || disabled;
1534
- if (Array.isArray(currentField._f.refs)) {
1535
- currentField._f.refs.forEach((inputRef) => {
1536
- inputRef.disabled = currentField._f.disabled || disabled;
1537
- });
1538
- }
1539
- }
1540
- }, 0, false);
1541
- }
1542
- };
1543
- const handleSubmit = (onValid, onInvalid) => async (e) => {
1544
- let onValidError = void 0;
1545
- if (e) {
1546
- e.preventDefault && e.preventDefault();
1547
- e.persist && e.persist();
1548
- }
1549
- let fieldValues = cloneObject(_formValues);
1550
- _subjects.state.next({
1551
- isSubmitting: true
1552
- });
1553
- if (_options.resolver) {
1554
- const { errors, values } = await _runSchema();
1555
- _updateIsValidating();
1556
- _formState.errors = errors;
1557
- fieldValues = cloneObject(values);
1558
- } else {
1559
- await executeBuiltInValidation({
1560
- fields: _fields,
1561
- eventType: EVENTS.SUBMIT
1562
- });
1563
- }
1564
- if (_names.disabled.size) {
1565
- for (const name of _names.disabled) {
1566
- unset(fieldValues, name);
1567
- }
1568
- }
1569
- unset(_formState.errors, ROOT_ERROR_TYPE);
1570
- if (isEmptyObject(_formState.errors)) {
1571
- _subjects.state.next({
1572
- errors: {}
1573
- });
1574
- try {
1575
- await onValid(fieldValues, e);
1576
- } catch (error) {
1577
- onValidError = error;
1578
- }
1579
- } else {
1580
- if (onInvalid) {
1581
- await onInvalid({ ..._formState.errors }, e);
1582
- }
1583
- _focusError();
1584
- setTimeout(_focusError);
1585
- }
1586
- _subjects.state.next({
1587
- isSubmitted: true,
1588
- isSubmitting: false,
1589
- isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,
1590
- submitCount: _formState.submitCount + 1,
1591
- errors: _formState.errors
1592
- });
1593
- if (onValidError) {
1594
- throw onValidError;
1595
- }
1596
- };
1597
- const resetField = (name, options = {}) => {
1598
- if (get(_fields, name)) {
1599
- if (isUndefined(options.defaultValue)) {
1600
- setValue(name, cloneObject(get(_defaultValues, name)));
1601
- } else {
1602
- setValue(name, options.defaultValue);
1603
- set(_defaultValues, name, cloneObject(options.defaultValue));
1604
- }
1605
- if (!options.keepTouched) {
1606
- unset(_formState.touchedFields, name);
1607
- }
1608
- if (!options.keepDirty) {
1609
- unset(_formState.dirtyFields, name);
1610
- _formState.isDirty = options.defaultValue ? _getDirty(name, cloneObject(get(_defaultValues, name))) : _getDirty();
1611
- }
1612
- if (!options.keepError) {
1613
- unset(_formState.errors, name);
1614
- _proxyFormState.isValid && _setValid();
1615
- }
1616
- _subjects.state.next({ ..._formState });
1617
- }
1618
- };
1619
- const _reset = (formValues, keepStateOptions = {}) => {
1620
- const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;
1621
- const cloneUpdatedValues = cloneObject(updatedValues);
1622
- const isEmptyResetValues = isEmptyObject(formValues);
1623
- const values = cloneUpdatedValues;
1624
- if (!keepStateOptions.keepDefaultValues) {
1625
- _defaultValues = updatedValues;
1626
- }
1627
- if (!keepStateOptions.keepValues) {
1628
- if (keepStateOptions.keepDirtyValues) {
1629
- const fieldsToCheck = /* @__PURE__ */ new Set([
1630
- ..._names.mount,
1631
- ...Object.keys(getDirtyFields(_defaultValues, _formValues))
1632
- ]);
1633
- for (const fieldName of Array.from(fieldsToCheck)) {
1634
- const isDirty = get(_formState.dirtyFields, fieldName);
1635
- const existingValue = get(_formValues, fieldName);
1636
- const newValue = get(values, fieldName);
1637
- if (isDirty && !isUndefined(existingValue)) {
1638
- set(values, fieldName, existingValue);
1639
- } else if (!isDirty && !isUndefined(newValue)) {
1640
- setValue(fieldName, newValue);
1641
- }
1642
- }
1643
- } else {
1644
- if (isWeb && isUndefined(formValues)) {
1645
- for (const name of _names.mount) {
1646
- const field = get(_fields, name);
1647
- if (field && field._f) {
1648
- const fieldReference = Array.isArray(field._f.refs) ? field._f.refs[0] : field._f.ref;
1649
- if (isHTMLElement(fieldReference)) {
1650
- const form = fieldReference.closest("form");
1651
- if (form) {
1652
- form.reset();
1653
- break;
1654
- }
1655
- }
1656
- }
1657
- }
1658
- }
1659
- if (keepStateOptions.keepFieldsRef) {
1660
- for (const fieldName of _names.mount) {
1661
- setValue(fieldName, get(values, fieldName));
1662
- }
1663
- } else {
1664
- _fields = {};
1665
- }
1666
- }
1667
- if (_options.shouldUnregister) {
1668
- _formValues = keepStateOptions.keepDefaultValues ? cloneObject(_defaultValues) : {};
1669
- if (keepStateOptions.keepFieldsRef) {
1670
- for (const fieldName of _names.mount) {
1671
- set(_formValues, fieldName, get(values, fieldName));
1672
- }
1673
- }
1674
- } else {
1675
- _formValues = cloneObject(values);
1676
- }
1677
- _subjects.array.next({
1678
- values: { ...values }
1679
- });
1680
- _subjects.state.next({
1681
- values: { ...values }
1682
- });
1683
- }
1684
- _names = {
1685
- mount: keepStateOptions.keepDirtyValues ? _names.mount : /* @__PURE__ */ new Set(),
1686
- unMount: /* @__PURE__ */ new Set(),
1687
- array: /* @__PURE__ */ new Set(),
1688
- registerName: /* @__PURE__ */ new Set(),
1689
- disabled: /* @__PURE__ */ new Set(),
1690
- watch: /* @__PURE__ */ new Set(),
1691
- watchAll: false,
1692
- focus: ""
1693
- };
1694
- _state.mount = !_proxyFormState.isValid || !!keepStateOptions.keepIsValid || !!keepStateOptions.keepDirtyValues || !_options.shouldUnregister && !isEmptyObject(values);
1695
- _state.watch = !!_options.shouldUnregister;
1696
- _state.keepIsValid = !!keepStateOptions.keepIsValid;
1697
- _state.action = false;
1698
- if (!keepStateOptions.keepErrors) {
1699
- _formState.errors = {};
1700
- }
1701
- _subjects.state.next({
1702
- submitCount: keepStateOptions.keepSubmitCount ? _formState.submitCount : 0,
1703
- isDirty: isEmptyResetValues ? false : keepStateOptions.keepDirty ? _formState.isDirty : keepStateOptions.keepValues ? _getDirty() : !!(keepStateOptions.keepDefaultValues && !deepEqual(formValues, _defaultValues)),
1704
- isSubmitted: keepStateOptions.keepIsSubmitted ? _formState.isSubmitted : false,
1705
- dirtyFields: isEmptyResetValues ? {} : keepStateOptions.keepDirtyValues ? keepStateOptions.keepDefaultValues && _formValues ? getDirtyFields(_defaultValues, _formValues) : _formState.dirtyFields : keepStateOptions.keepDefaultValues && formValues ? getDirtyFields(_defaultValues, formValues) : keepStateOptions.keepDirty ? _formState.dirtyFields : {},
1706
- touchedFields: keepStateOptions.keepTouched ? _formState.touchedFields : {},
1707
- errors: keepStateOptions.keepErrors ? _formState.errors : {},
1708
- isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful ? _formState.isSubmitSuccessful : false,
1709
- isSubmitting: false,
1710
- defaultValues: _defaultValues
1711
- });
1712
- };
1713
- const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues) ? formValues(_formValues) : formValues, { ..._options.resetOptions, ...keepStateOptions });
1714
- const setFocus = (name, options = {}) => {
1715
- const field = get(_fields, name);
1716
- const fieldReference = field && field._f;
1717
- if (fieldReference) {
1718
- const fieldRef = fieldReference.refs ? fieldReference.refs[0] : fieldReference.ref;
1719
- if (fieldRef.focus) {
1720
- setTimeout(() => {
1721
- fieldRef.focus();
1722
- options.shouldSelect && isFunction(fieldRef.select) && fieldRef.select();
1723
- });
1724
- }
1725
- }
1726
- };
1727
- const _setFormState = (updatedFormState) => {
1728
- _formState = {
1729
- ..._formState,
1730
- ...updatedFormState
1731
- };
1732
- };
1733
- const _resetDefaultValues = () => isFunction(_options.defaultValues) && _options.defaultValues().then((values) => {
1734
- reset(values, _options.resetOptions);
1735
- _subjects.state.next({
1736
- isLoading: false
1737
- });
1738
- });
1739
- const resetDefaultValues = (values, options = {}) => {
1740
- _defaultValues = cloneObject(values);
1741
- if (!options.keepDirty) {
1742
- const newDirtyFields = getDirtyFields(_defaultValues, _formValues);
1743
- _formState.dirtyFields = newDirtyFields;
1744
- _formState.isDirty = !isEmptyObject(newDirtyFields);
1745
- }
1746
- if (!options.keepIsValid) {
1747
- _setValid();
1748
- }
1749
- _subjects.state.next({
1750
- ..._formState,
1751
- defaultValues: _defaultValues
1752
- });
1753
- };
1754
- const methods = {
1755
- control: {
1756
- register,
1757
- unregister,
1758
- getFieldState,
1759
- handleSubmit,
1760
- setError,
1761
- _subscribe,
1762
- _runSchema,
1763
- _updateIsValidating,
1764
- _focusError,
1765
- _getWatch,
1766
- _getDirty,
1767
- _setValid,
1768
- _setFieldArray,
1769
- _setDisabledField,
1770
- _setErrors,
1771
- _getFieldArray,
1772
- _reset,
1773
- _resetDefaultValues,
1774
- _removeUnmounted,
1775
- _disableForm,
1776
- _subjects,
1777
- _proxyFormState,
1778
- get _fields() {
1779
- return _fields;
1780
- },
1781
- get _formValues() {
1782
- return _formValues;
1783
- },
1784
- get _state() {
1785
- return _state;
1786
- },
1787
- set _state(value) {
1788
- _state = value;
1789
- },
1790
- get _defaultValues() {
1791
- return _defaultValues;
1792
- },
1793
- get _names() {
1794
- return _names;
1795
- },
1796
- set _names(value) {
1797
- _names = value;
1798
- },
1799
- get _formState() {
1800
- return _formState;
1801
- },
1802
- get _options() {
1803
- return _options;
1804
- },
1805
- set _options(value) {
1806
- _options = {
1807
- ..._options,
1808
- ...value
1809
- };
1810
- _validationModeBeforeSubmit = getValidationModes(_options.mode);
1811
- _validationModeAfterSubmit = getValidationModes(_options.reValidateMode);
1812
- }
1813
- },
1814
- subscribe,
1815
- trigger,
1816
- register,
1817
- handleSubmit,
1818
- watch,
1819
- setValue,
1820
- setValues,
1821
- getValues,
1822
- reset,
1823
- resetField,
1824
- resetDefaultValues,
1825
- clearErrors,
1826
- unregister,
1827
- setError,
1828
- setFocus,
1829
- getFieldState
1830
- };
1831
- return {
1832
- ...methods,
1833
- formControl: methods
1834
- };
1835
- }
1836
- function useForm(props = {}) {
1837
- const _formControl = React__default.useRef(void 0);
1838
- const _values = React__default.useRef(void 0);
1839
- const _formControlProp = React__default.useRef(props.formControl);
1840
- const [formState, updateFormState] = React__default.useState(() => ({
1841
- ...cloneObject(DEFAULT_FORM_STATE),
1842
- isLoading: isFunction(props.defaultValues),
1843
- errors: props.errors || {},
1844
- disabled: props.disabled || false,
1845
- defaultValues: isFunction(props.defaultValues) ? void 0 : props.defaultValues
1846
- }));
1847
- if (!_formControl.current || props.formControl && _formControlProp.current !== props.formControl) {
1848
- _formControlProp.current = props.formControl;
1849
- if (props.formControl) {
1850
- _formControl.current = {
1851
- ...props.formControl,
1852
- formState
1853
- };
1854
- if (props.defaultValues && !isFunction(props.defaultValues)) {
1855
- props.formControl.reset(props.defaultValues, props.resetOptions);
1856
- }
1857
- } else {
1858
- const { formControl, ...rest } = createFormControl(props);
1859
- _formControl.current = {
1860
- ...rest,
1861
- formState
1862
- };
1863
- }
1864
- }
1865
- const control = _formControl.current.control;
1866
- control._options = props;
1867
- useIsomorphicLayoutEffect(() => {
1868
- const sub = control._subscribe({
1869
- formState: control._proxyFormState,
1870
- callback: () => updateFormState({
1871
- ...control._formState,
1872
- defaultValues: control._defaultValues
1873
- }),
1874
- reRenderRoot: true
1875
- });
1876
- updateFormState((data) => ({
1877
- ...data,
1878
- isReady: true
1879
- }));
1880
- control._formState.isReady = true;
1881
- return sub;
1882
- }, [control]);
1883
- React__default.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);
1884
- React__default.useEffect(() => {
1885
- if (props.mode) {
1886
- control._options.mode = props.mode;
1887
- }
1888
- if (props.reValidateMode) {
1889
- control._options.reValidateMode = props.reValidateMode;
1890
- }
1891
- }, [control, props.mode, props.reValidateMode]);
1892
- React__default.useEffect(() => {
1893
- if (props.errors) {
1894
- control._setErrors(props.errors);
1895
- control._focusError();
1896
- }
1897
- }, [control, props.errors]);
1898
- React__default.useEffect(() => {
1899
- props.shouldUnregister && control._subjects.state.next({
1900
- values: control._getWatch()
1901
- });
1902
- }, [control, props.shouldUnregister]);
1903
- React__default.useEffect(() => {
1904
- if (control._proxyFormState.isDirty) {
1905
- const isDirty = control._getDirty();
1906
- if (isDirty !== formState.isDirty) {
1907
- control._subjects.state.next({
1908
- isDirty
1909
- });
1910
- }
1911
- }
1912
- }, [control, formState.isDirty]);
1913
- React__default.useEffect(() => {
1914
- var _a;
1915
- if (props.values && !deepEqual(props.values, _values.current)) {
1916
- control._reset(props.values, {
1917
- keepFieldsRef: true,
1918
- ...control._options.resetOptions
1919
- });
1920
- if (!((_a = control._options.resetOptions) === null || _a === void 0 ? void 0 : _a.keepIsValid)) {
1921
- control._setValid();
1922
- }
1923
- _values.current = props.values;
1924
- updateFormState((state) => ({ ...state }));
1925
- } else {
1926
- control._resetDefaultValues();
1927
- }
1928
- }, [control, props.values]);
1929
- React__default.useEffect(() => {
1930
- if (!control._state.mount) {
1931
- control._setValid();
1932
- control._state.mount = true;
1933
- }
1934
- if (control._state.watch) {
1935
- control._state.watch = false;
1936
- control._subjects.state.next({ ...control._formState });
1937
- }
1938
- control._removeUnmounted();
1939
- });
1940
- _formControl.current.formState = React__default.useMemo(() => getProxyFormState(formState, control), [control, formState]);
1941
- return _formControl.current;
1942
- }
1943
- export {
1944
- appendErrors,
1945
- createFormControl,
1946
- get,
1947
- set,
1948
- useForm
1949
- };
1950
- //# sourceMappingURL=index.esm.js.map