@1money/react-ui 1.16.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/AGENTS.md +393 -0
  2. package/es/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  3. package/es/components/CheckboxGroup/CheckboxGroup.js +94 -91
  4. package/es/components/CheckboxGroup/interface.d.ts +21 -15
  5. package/es/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  6. package/es/components/Form/Form.d.ts +29 -0
  7. package/es/components/Form/Form.js +188 -0
  8. package/es/components/Form/FormItem.d.ts +4 -0
  9. package/es/components/Form/FormItem.js +165 -0
  10. package/es/components/Form/FormItemContent.d.ts +18 -0
  11. package/es/components/Form/FormItemContent.js +146 -0
  12. package/es/components/Form/constants.d.ts +46 -0
  13. package/es/components/Form/constants.js +65 -0
  14. package/es/components/Form/helper.d.ts +120 -0
  15. package/es/components/Form/helper.js +284 -0
  16. package/es/components/Form/index.d.ts +20 -0
  17. package/es/components/Form/index.js +21 -0
  18. package/es/components/Form/interface.d.ts +238 -0
  19. package/es/components/Form/interface.js +2 -0
  20. package/es/components/Form/style/Form.css +1 -0
  21. package/es/components/Form/style/Form.scss +167 -0
  22. package/es/components/Form/style/css.js +2 -0
  23. package/es/components/Form/style/index.d.ts +1 -0
  24. package/es/components/Form/style/index.js +2 -0
  25. package/es/components/Form/useFormItemContext.d.ts +32 -0
  26. package/es/components/Form/useFormItemContext.js +55 -0
  27. package/es/components/Form/useFormItemWatch.d.ts +51 -0
  28. package/es/components/Form/useFormItemWatch.js +69 -0
  29. package/es/components/Form/useValidationTrigger.d.ts +40 -0
  30. package/es/components/Form/useValidationTrigger.js +74 -0
  31. package/es/components/Input/Input.js +72 -74
  32. package/es/components/Input/interface.d.ts +9 -9
  33. package/es/components/InputAmount/InputAmount.js +228 -276
  34. package/es/components/InputAmount/helper.d.ts +46 -0
  35. package/es/components/InputAmount/helper.js +115 -0
  36. package/es/components/ProForm/ProForm.d.ts +33 -0
  37. package/es/components/ProForm/ProForm.js +208 -0
  38. package/es/components/ProForm/ProFormDependency.d.ts +12 -0
  39. package/es/components/ProForm/ProFormDependency.js +61 -0
  40. package/es/components/ProForm/ProFormList.d.ts +19 -0
  41. package/es/components/ProForm/ProFormList.js +348 -0
  42. package/es/components/ProForm/Submitter.d.ts +21 -0
  43. package/es/components/ProForm/Submitter.js +76 -0
  44. package/es/components/ProForm/constants.d.ts +34 -0
  45. package/es/components/ProForm/constants.js +40 -0
  46. package/es/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  47. package/es/components/ProForm/fields/ProFormCheckbox.js +11 -0
  48. package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  49. package/es/components/ProForm/fields/ProFormCheckboxGroup.js +46 -0
  50. package/es/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  51. package/es/components/ProForm/fields/ProFormDigit.js +15 -0
  52. package/es/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  53. package/es/components/ProForm/fields/ProFormMoney.js +10 -0
  54. package/es/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  55. package/es/components/ProForm/fields/ProFormMultiSelect.js +27 -0
  56. package/es/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  57. package/es/components/ProForm/fields/ProFormPassword.js +16 -0
  58. package/es/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  59. package/es/components/ProForm/fields/ProFormRadio.js +13 -0
  60. package/es/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  61. package/es/components/ProForm/fields/ProFormSelect.js +13 -0
  62. package/es/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  63. package/es/components/ProForm/fields/ProFormSwitch.js +11 -0
  64. package/es/components/ProForm/fields/ProFormText.d.ts +6 -0
  65. package/es/components/ProForm/fields/ProFormText.js +15 -0
  66. package/es/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  67. package/es/components/ProForm/fields/ProFormTextArea.js +16 -0
  68. package/es/components/ProForm/fields/createProFormField.d.ts +43 -0
  69. package/es/components/ProForm/fields/createProFormField.js +200 -0
  70. package/es/components/ProForm/fields/index.d.ts +12 -0
  71. package/es/components/ProForm/fields/index.js +13 -0
  72. package/es/components/ProForm/index.d.ts +7 -0
  73. package/es/components/ProForm/index.js +7 -0
  74. package/es/components/ProForm/interface.d.ts +306 -0
  75. package/es/components/ProForm/interface.js +2 -0
  76. package/es/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  77. package/es/components/ProForm/layouts/DrawerForm.js +79 -0
  78. package/es/components/ProForm/layouts/ModalForm.d.ts +16 -0
  79. package/es/components/ProForm/layouts/ModalForm.js +89 -0
  80. package/es/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  81. package/es/components/ProForm/layouts/QueryFilter.js +132 -0
  82. package/es/components/ProForm/layouts/StepsForm.d.ts +13 -0
  83. package/es/components/ProForm/layouts/StepsForm.js +295 -0
  84. package/es/components/ProForm/layouts/index.d.ts +4 -0
  85. package/es/components/ProForm/layouts/index.js +5 -0
  86. package/es/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  87. package/es/components/ProForm/layouts/useOverlayForm.js +143 -0
  88. package/es/components/ProForm/style/ProForm.module.css +1 -0
  89. package/es/components/ProForm/style/ProForm.module.scss +59 -0
  90. package/es/components/ProForm/style/css.js +3 -0
  91. package/es/components/ProForm/style/index.d.ts +1 -0
  92. package/es/components/ProForm/style/index.js +3 -0
  93. package/es/components/ProForm/utils.d.ts +72 -0
  94. package/es/components/ProForm/utils.js +206 -0
  95. package/es/components/RadioGroup/RadioGroup.js +46 -23
  96. package/es/components/RadioGroup/interface.d.ts +3 -1
  97. package/es/components/Select/Select.d.ts +1 -1
  98. package/es/components/Select/Select.js +113 -106
  99. package/es/components/Select/constants.d.ts +18 -0
  100. package/es/components/Select/constants.js +19 -0
  101. package/es/components/Sidebar/Sidebar.js +21 -23
  102. package/es/components/Sidebar/SidebarLogo.d.ts +7 -0
  103. package/es/components/Sidebar/SidebarLogo.js +33 -0
  104. package/es/components/Sidebar/SimplySidebar.d.ts +2 -2
  105. package/es/components/Sidebar/SimplySidebar.js +18 -22
  106. package/es/components/Sidebar/Stepper.js +14 -14
  107. package/es/components/Sidebar/constants.d.ts +16 -0
  108. package/es/components/Sidebar/constants.js +17 -0
  109. package/es/components/Sidebar/style/Stepper.css +1 -1
  110. package/es/components/Sidebar/style/Stepper.scss +11 -1
  111. package/es/components/Switch/Switch.js +28 -25
  112. package/es/components/Switch/interface.d.ts +9 -4
  113. package/es/components/useControlledState/index.d.ts +14 -0
  114. package/es/components/useControlledState/index.js +32 -0
  115. package/es/components/useEventCallback/index.d.ts +11 -0
  116. package/es/components/useEventCallback/index.js +17 -0
  117. package/es/components/useLayoutEffect/index.d.ts +11 -0
  118. package/es/components/useLayoutEffect/index.js +17 -0
  119. package/es/components/useLayoutState/index.d.ts +13 -0
  120. package/es/components/useLayoutState/index.js +71 -0
  121. package/es/components/useMemoizedFn/index.d.ts +12 -0
  122. package/es/components/useMemoizedFn/index.js +27 -0
  123. package/es/components/usePrevious/index.d.ts +11 -0
  124. package/es/components/usePrevious/index.js +19 -0
  125. package/es/components/useSafeState/index.d.ts +12 -0
  126. package/es/components/useSafeState/index.js +24 -0
  127. package/es/components/useSyncState/index.d.ts +14 -0
  128. package/es/components/useSyncState/index.js +37 -0
  129. package/es/components/useUpdateEffect/index.d.ts +9 -0
  130. package/es/components/useUpdateEffect/index.js +19 -0
  131. package/es/index.css +1 -1
  132. package/es/index.d.ts +21 -2
  133. package/es/index.js +19 -1
  134. package/jest.setup.d.ts +1 -0
  135. package/jest.setup.ts +1 -0
  136. package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  137. package/lib/components/CheckboxGroup/CheckboxGroup.js +92 -89
  138. package/lib/components/CheckboxGroup/interface.d.ts +21 -15
  139. package/lib/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  140. package/lib/components/Form/Form.d.ts +29 -0
  141. package/lib/components/Form/Form.js +199 -0
  142. package/lib/components/Form/FormItem.d.ts +4 -0
  143. package/lib/components/Form/FormItem.js +176 -0
  144. package/lib/components/Form/FormItemContent.d.ts +18 -0
  145. package/lib/components/Form/FormItemContent.js +156 -0
  146. package/lib/components/Form/constants.d.ts +46 -0
  147. package/lib/components/Form/constants.js +71 -0
  148. package/lib/components/Form/helper.d.ts +120 -0
  149. package/lib/components/Form/helper.js +290 -0
  150. package/lib/components/Form/index.d.ts +20 -0
  151. package/lib/components/Form/index.js +45 -0
  152. package/lib/components/Form/interface.d.ts +238 -0
  153. package/lib/components/Form/interface.js +6 -0
  154. package/lib/components/Form/style/Form.css +1 -0
  155. package/lib/components/Form/style/Form.scss +167 -0
  156. package/lib/components/Form/style/css.js +4 -0
  157. package/lib/components/Form/style/index.d.ts +1 -0
  158. package/lib/components/Form/style/index.js +4 -0
  159. package/lib/components/Form/useFormItemContext.d.ts +32 -0
  160. package/lib/components/Form/useFormItemContext.js +62 -0
  161. package/lib/components/Form/useFormItemWatch.d.ts +51 -0
  162. package/lib/components/Form/useFormItemWatch.js +76 -0
  163. package/lib/components/Form/useValidationTrigger.d.ts +40 -0
  164. package/lib/components/Form/useValidationTrigger.js +81 -0
  165. package/lib/components/Input/Input.js +71 -73
  166. package/lib/components/Input/interface.d.ts +9 -9
  167. package/lib/components/InputAmount/InputAmount.js +230 -278
  168. package/lib/components/InputAmount/helper.d.ts +46 -0
  169. package/lib/components/InputAmount/helper.js +122 -0
  170. package/lib/components/ProForm/ProForm.d.ts +33 -0
  171. package/lib/components/ProForm/ProForm.js +216 -0
  172. package/lib/components/ProForm/ProFormDependency.d.ts +12 -0
  173. package/lib/components/ProForm/ProFormDependency.js +67 -0
  174. package/lib/components/ProForm/ProFormList.d.ts +19 -0
  175. package/lib/components/ProForm/ProFormList.js +355 -0
  176. package/lib/components/ProForm/Submitter.d.ts +21 -0
  177. package/lib/components/ProForm/Submitter.js +83 -0
  178. package/lib/components/ProForm/constants.d.ts +34 -0
  179. package/lib/components/ProForm/constants.js +46 -0
  180. package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  181. package/lib/components/ProForm/fields/ProFormCheckbox.js +18 -0
  182. package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  183. package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +53 -0
  184. package/lib/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  185. package/lib/components/ProForm/fields/ProFormDigit.js +22 -0
  186. package/lib/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  187. package/lib/components/ProForm/fields/ProFormMoney.js +17 -0
  188. package/lib/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  189. package/lib/components/ProForm/fields/ProFormMultiSelect.js +34 -0
  190. package/lib/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  191. package/lib/components/ProForm/fields/ProFormPassword.js +23 -0
  192. package/lib/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  193. package/lib/components/ProForm/fields/ProFormRadio.js +20 -0
  194. package/lib/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  195. package/lib/components/ProForm/fields/ProFormSelect.js +20 -0
  196. package/lib/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  197. package/lib/components/ProForm/fields/ProFormSwitch.js +18 -0
  198. package/lib/components/ProForm/fields/ProFormText.d.ts +6 -0
  199. package/lib/components/ProForm/fields/ProFormText.js +22 -0
  200. package/lib/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  201. package/lib/components/ProForm/fields/ProFormTextArea.js +23 -0
  202. package/lib/components/ProForm/fields/createProFormField.d.ts +43 -0
  203. package/lib/components/ProForm/fields/createProFormField.js +208 -0
  204. package/lib/components/ProForm/fields/index.d.ts +12 -0
  205. package/lib/components/ProForm/fields/index.js +90 -0
  206. package/lib/components/ProForm/index.d.ts +7 -0
  207. package/lib/components/ProForm/index.js +73 -0
  208. package/lib/components/ProForm/interface.d.ts +306 -0
  209. package/lib/components/ProForm/interface.js +6 -0
  210. package/lib/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  211. package/lib/components/ProForm/layouts/DrawerForm.js +86 -0
  212. package/lib/components/ProForm/layouts/ModalForm.d.ts +16 -0
  213. package/lib/components/ProForm/layouts/ModalForm.js +96 -0
  214. package/lib/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  215. package/lib/components/ProForm/layouts/QueryFilter.js +139 -0
  216. package/lib/components/ProForm/layouts/StepsForm.d.ts +13 -0
  217. package/lib/components/ProForm/layouts/StepsForm.js +302 -0
  218. package/lib/components/ProForm/layouts/index.d.ts +4 -0
  219. package/lib/components/ProForm/layouts/index.js +40 -0
  220. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  221. package/lib/components/ProForm/layouts/useOverlayForm.js +150 -0
  222. package/lib/components/ProForm/style/ProForm.module.css +1 -0
  223. package/lib/components/ProForm/style/ProForm.module.scss +59 -0
  224. package/lib/components/ProForm/style/css.js +4 -0
  225. package/lib/components/ProForm/style/index.d.ts +1 -0
  226. package/lib/components/ProForm/style/index.js +4 -0
  227. package/lib/components/ProForm/utils.d.ts +72 -0
  228. package/lib/components/ProForm/utils.js +213 -0
  229. package/lib/components/RadioGroup/RadioGroup.js +45 -22
  230. package/lib/components/RadioGroup/interface.d.ts +3 -1
  231. package/lib/components/Select/Select.d.ts +1 -1
  232. package/lib/components/Select/Select.js +114 -107
  233. package/lib/components/Select/constants.d.ts +18 -0
  234. package/lib/components/Select/constants.js +25 -0
  235. package/lib/components/Sidebar/Sidebar.js +21 -23
  236. package/lib/components/Sidebar/SidebarLogo.d.ts +7 -0
  237. package/lib/components/Sidebar/SidebarLogo.js +39 -0
  238. package/lib/components/Sidebar/SimplySidebar.d.ts +2 -2
  239. package/lib/components/Sidebar/SimplySidebar.js +17 -21
  240. package/lib/components/Sidebar/Stepper.js +14 -14
  241. package/lib/components/Sidebar/constants.d.ts +16 -0
  242. package/lib/components/Sidebar/constants.js +23 -0
  243. package/lib/components/Sidebar/style/Stepper.css +1 -1
  244. package/lib/components/Sidebar/style/Stepper.scss +11 -1
  245. package/lib/components/Switch/Switch.js +27 -24
  246. package/lib/components/Switch/interface.d.ts +9 -4
  247. package/lib/components/useControlledState/index.d.ts +14 -0
  248. package/lib/components/useControlledState/index.js +39 -0
  249. package/lib/components/useEventCallback/index.d.ts +11 -0
  250. package/lib/components/useEventCallback/index.js +24 -0
  251. package/lib/components/useLayoutEffect/index.d.ts +11 -0
  252. package/lib/components/useLayoutEffect/index.js +23 -0
  253. package/lib/components/useLayoutState/index.d.ts +13 -0
  254. package/lib/components/useLayoutState/index.js +79 -0
  255. package/lib/components/useMemoizedFn/index.d.ts +12 -0
  256. package/lib/components/useMemoizedFn/index.js +33 -0
  257. package/lib/components/usePrevious/index.d.ts +11 -0
  258. package/lib/components/usePrevious/index.js +25 -0
  259. package/lib/components/useSafeState/index.d.ts +12 -0
  260. package/lib/components/useSafeState/index.js +31 -0
  261. package/lib/components/useSyncState/index.d.ts +14 -0
  262. package/lib/components/useSyncState/index.js +44 -0
  263. package/lib/components/useUpdateEffect/index.d.ts +9 -0
  264. package/lib/components/useUpdateEffect/index.js +25 -0
  265. package/lib/index.css +1 -1
  266. package/lib/index.d.ts +21 -2
  267. package/lib/index.js +213 -1
  268. package/package.json +16 -1
@@ -0,0 +1,167 @@
1
+ @use '../../../variable.scss' as *;
2
+
3
+ // Intentionally token-level SCSS (no global tag selectors): spacing/typography/
4
+ // opacity values are centralized as component CSS variables for predictable BEM output.
5
+ $component: 'form';
6
+ $cls: #{$prefix}-#{$component};
7
+
8
+ @mixin om-form-token-vars {
9
+ --om-form-spacing-xs: 4px;
10
+ --om-form-spacing-sm: 8px;
11
+ --om-form-spacing-md: 12px;
12
+ --om-form-spacing-lg: 16px;
13
+ --om-form-control-height: 44px;
14
+ --om-form-font-size-base: 14px;
15
+ --om-form-line-height-base: 20px;
16
+ --om-form-font-size-help: 12px;
17
+ --om-form-line-height-help: 18px;
18
+ --om-form-opacity-disabled: 0.6;
19
+ }
20
+
21
+ .#{$cls} {
22
+ @include om-form-token-vars;
23
+
24
+ &-root {
25
+ width: 100%;
26
+
27
+ @include om-form-token-vars;
28
+ }
29
+
30
+ &-layout-horizontal .#{$prefix}-form-item-root {
31
+ display: flex;
32
+ align-items: flex-start;
33
+ }
34
+
35
+ &-layout-vertical .#{$prefix}-form-item-root {
36
+ display: flex;
37
+ flex-direction: column;
38
+ }
39
+
40
+ &-layout-inline {
41
+ display: flex;
42
+ flex-wrap: wrap;
43
+ gap: var(--om-form-spacing-lg);
44
+ }
45
+
46
+ &-label-left .#{$prefix}-form-item-label {
47
+ text-align: left;
48
+ }
49
+ }
50
+
51
+ $item: 'form-item';
52
+ $item-cls: #{$prefix}-#{$item};
53
+
54
+ .#{$item-cls} {
55
+ @include om-form-token-vars;
56
+
57
+ &-root {
58
+ width: 100%;
59
+ margin-bottom: var(--om-form-spacing-lg);
60
+
61
+ @include om-form-token-vars;
62
+ }
63
+
64
+ &-label {
65
+ display: flex;
66
+ flex: 0 0 var(--om-form-label-width, 25%);
67
+ align-items: center;
68
+ justify-content: flex-end;
69
+ min-width: fit-content;
70
+ min-height: var(--om-form-control-height);
71
+ padding-right: var(--om-form-spacing-md);
72
+ color: $color-primary-black;
73
+ font-size: var(--om-form-font-size-base);
74
+ line-height: var(--om-form-line-height-base);
75
+ white-space: nowrap;
76
+ text-align: right;
77
+ }
78
+
79
+ &-label-required::before {
80
+ margin-right: var(--om-form-spacing-xs);
81
+ color: $color-negative;
82
+ content: '*';
83
+ }
84
+
85
+ &-colon {
86
+ margin-left: var(--om-form-spacing-xs);
87
+ }
88
+
89
+ &-control {
90
+ flex: 1 1 auto;
91
+ max-width: var(--om-form-wrapper-width, 75%);
92
+ }
93
+
94
+ &-content {
95
+ display: flex;
96
+ flex-direction: column;
97
+ gap: var(--om-form-spacing-sm);
98
+ }
99
+
100
+ &-content-disabled {
101
+ opacity: var(--om-form-opacity-disabled);
102
+ }
103
+
104
+ &-help {
105
+ color: $color-grey-midnight;
106
+ font-size: var(--om-form-font-size-help);
107
+ line-height: var(--om-form-line-height-help);
108
+ }
109
+
110
+ &-help-error {
111
+ color: $color-negative;
112
+ }
113
+
114
+ &-help-warning {
115
+ color: $color-warning-dark;
116
+ }
117
+
118
+ &-help-success {
119
+ color: $color-success;
120
+ }
121
+
122
+ &-content-error {
123
+ --om-form-item-status-color: #{$color-negative};
124
+ }
125
+
126
+ &-content-warning {
127
+ --om-form-item-status-color: #{$color-warning-dark};
128
+ }
129
+
130
+ &-content-success {
131
+ --om-form-item-status-color: #{$color-success};
132
+ }
133
+
134
+ &-content-validating {
135
+ --om-form-item-status-color: #{$color-info};
136
+ }
137
+
138
+ &-extra {
139
+ color: $color-grey-dark;
140
+ font-size: var(--om-form-font-size-help);
141
+ line-height: var(--om-form-line-height-help);
142
+ }
143
+ }
144
+
145
+ .#{$prefix}-form-layout-vertical {
146
+ .#{$item-cls}-label {
147
+ flex: 0 0 auto;
148
+ justify-content: flex-start;
149
+ min-width: 0;
150
+ min-height: auto;
151
+ margin-bottom: var(--om-form-spacing-sm);
152
+ padding-right: 0;
153
+ white-space: normal;
154
+ text-align: left;
155
+ }
156
+
157
+ .#{$item-cls}-control {
158
+ max-width: 100%;
159
+ }
160
+ }
161
+
162
+ .#{$prefix}-form-layout-inline {
163
+ .#{$item-cls}-root {
164
+ width: auto;
165
+ margin-bottom: 0;
166
+ }
167
+ }
@@ -0,0 +1,2 @@
1
+ import './Form.css';
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvRm9ybS9zcmMvY29tcG9uZW50cy9Gb3JtL3N0eWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sYUFBYSIsImZpbGUiOiJjb21wb25lbnRzL0Zvcm0vc3R5bGUvY3NzLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -0,0 +1 @@
1
+ import './Form.scss';
@@ -0,0 +1,2 @@
1
+ import './Form.scss';
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvRm9ybS9zcmMvY29tcG9uZW50cy9Gb3JtL3N0eWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sYUFBYSIsImZpbGUiOiJjb21wb25lbnRzL0Zvcm0vc3R5bGUvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,32 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { FieldValues, UseFormReturn } from 'react-hook-form';
3
+ interface FallbackFormProviderProps {
4
+ children: ReactNode;
5
+ }
6
+ /**
7
+ * Lazily creates form methods only when mounted.
8
+ *
9
+ * Use this provider when rendering form-aware components outside `<Form>`.
10
+ */
11
+ export declare function FallbackFormProvider({ children }: FallbackFormProviderProps): import("react").FunctionComponentElement<import("react").ProviderProps<UseFormReturn<FieldValues> | null>>;
12
+ /**
13
+ * Resolves form context for a `<FormItem>`.
14
+ *
15
+ * When rendered inside a `<Form>`, this hook uses the context-provided
16
+ * `react-hook-form` methods. Otherwise it reads methods from
17
+ * {@link FallbackFormProvider}, which creates a local `useForm()` instance.
18
+ *
19
+ * A development-only console warning is emitted (once per field name) when
20
+ * a `name` prop is set but no parent `<Form>` context is found.
21
+ *
22
+ * @template TFieldValues - The shape of the form values.
23
+ * @param name - The field name, used for the missing-context warning check.
24
+ * @returns An object with `ctx` (form context or `null`), `methods`, `control`, and `trigger`.
25
+ */
26
+ export declare function useFormItemContext<TFieldValues extends FieldValues = FieldValues>(name?: string): {
27
+ ctx: import("./interface").FormContextValue | null;
28
+ methods: UseFormReturn<TFieldValues>;
29
+ control: import("react-hook-form").Control<TFieldValues, any, TFieldValues>;
30
+ trigger: import("react-hook-form").UseFormTrigger<TFieldValues>;
31
+ };
32
+ export {};
@@ -0,0 +1,55 @@
1
+ import { createContext, createElement, useContext, useEffect, useRef } from 'react';
2
+ import { useForm } from 'react-hook-form';
3
+ import { FormContext } from './Form';
4
+ var FallbackFormContext = /*#__PURE__*/createContext(null);
5
+ /**
6
+ * Lazily creates form methods only when mounted.
7
+ *
8
+ * Use this provider when rendering form-aware components outside `<Form>`.
9
+ */
10
+ export function FallbackFormProvider(_ref) {
11
+ var children = _ref.children;
12
+ var methods = useForm();
13
+ return /*#__PURE__*/createElement(FallbackFormContext.Provider, {
14
+ value: methods
15
+ }, children);
16
+ }
17
+ /**
18
+ * Resolves form context for a `<FormItem>`.
19
+ *
20
+ * When rendered inside a `<Form>`, this hook uses the context-provided
21
+ * `react-hook-form` methods. Otherwise it reads methods from
22
+ * {@link FallbackFormProvider}, which creates a local `useForm()` instance.
23
+ *
24
+ * A development-only console warning is emitted (once per field name) when
25
+ * a `name` prop is set but no parent `<Form>` context is found.
26
+ *
27
+ * @template TFieldValues - The shape of the form values.
28
+ * @param name - The field name, used for the missing-context warning check.
29
+ * @returns An object with `ctx` (form context or `null`), `methods`, `control`, and `trigger`.
30
+ */
31
+ export function useFormItemContext(name) {
32
+ var _a;
33
+ var ctx = useContext(FormContext);
34
+ var fallbackMethods = useContext(FallbackFormContext);
35
+ var warnedRef = useRef(new Set());
36
+ var methods = (_a = ctx === null || ctx === void 0 ? void 0 : ctx.methods) !== null && _a !== void 0 ? _a : fallbackMethods;
37
+ if (!methods) {
38
+ throw new Error('[FormItem] No form control found. Wrap with <Form> or mount inside <FallbackFormProvider>.');
39
+ }
40
+ var control = methods.control;
41
+ var trigger = methods.trigger;
42
+ useEffect(function () {
43
+ if (name && !(ctx === null || ctx === void 0 ? void 0 : ctx.methods) && !warnedRef.current.has(name)) {
44
+ warnedRef.current.add(name);
45
+ console.warn('[FormItem] `name` prop is set but no form control found. Wrap FormItem inside a <Form> component.');
46
+ }
47
+ }, [name, ctx === null || ctx === void 0 ? void 0 : ctx.methods]);
48
+ return {
49
+ ctx: ctx,
50
+ methods: methods,
51
+ control: control,
52
+ trigger: trigger
53
+ };
54
+ }
55
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvRm9ybS91c2VGb3JtSXRlbUNvbnRleHQudHMiLCJjb21wb25lbnRzL0Zvcm0vdXNlRm9ybUl0ZW1Db250ZXh0LmpzIl0sIm5hbWVzIjpbImNyZWF0ZUNvbnRleHQiLCJjcmVhdGVFbGVtZW50IiwidXNlQ29udGV4dCIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZUZvcm0iLCJGb3JtQ29udGV4dCIsIkZhbGxiYWNrRm9ybUNvbnRleHQiLCJGYWxsYmFja0Zvcm1Qcm92aWRlciIsIl9yZWYiLCJjaGlsZHJlbiIsIm1ldGhvZHMiLCJQcm92aWRlciIsInZhbHVlIiwidXNlRm9ybUl0ZW1Db250ZXh0IiwibmFtZSIsIl9hIiwiY3R4IiwiZmFsbGJhY2tNZXRob2RzIiwid2FybmVkUmVmIiwiU2V0IiwiRXJyb3IiLCJjb250cm9sIiwidHJpZ2dlciIsImN1cnJlbnQiLCJoYXMiLCJhZGQiLCJjb25zb2xlIiwid2FybiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsYUFBYSxFQUFFQyxhQUFhLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxNQUFNLFFBQVEsT0FBTztBQUNuRixTQUFTQyxPQUFPLFFBQVEsaUJBQWlCO0FBR3pDLFNBQVNDLFdBQVcsUUFBUSxRQUFRO0FBRXBDLElBQU1DLG1CQUFtQixnQkFBR1AsYUFBYSxDQUFvQyxJQUFJLENBQUM7QUFNbEY7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBRFNBLE9BQU0sU0FBVVEsb0JBQW9CQSxDQUFBQyxJQUFBLEVBQXdDO0VBQUEsSUFBckNDLFFBQVEsR0FBQUQsSUFBQSxDQUFSQyxRQUFRO0VBQzdDLElBQU1DLE9BQU8sR0FBR04sT0FBTyxDQUFBLENBQWU7RUFDdEMsb0JBQU9KLGFBQWEsQ0FBQ00sbUJBQW1CLENBQUNLLFFBQVEsRUFBRTtJQUFFQyxLQUFLLEVBQUVGO0VBQU8sQ0FBRSxFQUFFRCxRQUFRLENBQUM7QUFDbEY7QUFFQTtBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FEVUEsT0FBTSxTQUFVSSxrQkFBa0JBLENBQWlEQyxJQUFhLEVBQUE7RUNSNUYsSUFBSUMsRUFBRTtFRFNSLElBQU1DLEdBQUcsR0FBR2YsVUFBVSxDQUFDSSxXQUFXLENBQUM7RUFDbkMsSUFBTVksZUFBZSxHQUFHaEIsVUFBVSxDQUFDSyxtQkFBbUIsQ0FBQztFQUN2RCxJQUFNWSxTQUFTLEdBQUdmLE1BQU0sQ0FBYyxJQUFJZ0IsR0FBRyxDQUFBLENBQUUsQ0FBQztFQUNoRCxJQUFNVCxPQUFPLEdBQUcsQ0FBQUssRUFBQSxHQUFDQyxHQUFHLEtBQUEsSUFBQSxJQUFIQSxHQUFHLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUhBLEdBQUcsQ0FBRU4sT0FBbUQsTUFBQSxJQUFBLElBQUFLLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUNuRUUsZUFBc0Q7RUFFNUQsSUFBSSxDQUFDUCxPQUFPLEVBQUU7SUFDWixNQUFNLElBQUlVLEtBQUssQ0FDYiw0RkFBNEYsQ0FDN0Y7RUFDSDtFQUVBLElBQU1DLE9BQU8sR0FBR1gsT0FBTyxDQUFDVyxPQUFPO0VBQy9CLElBQU1DLE9BQU8sR0FBR1osT0FBTyxDQUFDWSxPQUFPO0VBRS9CcEIsU0FBUyxDQUFDLFlBQUs7SUFDYixJQUFJWSxJQUFJLElBQUksRUFBQ0UsR0FBRyxLQUFBLElBQUEsSUFBSEEsR0FBRyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFIQSxHQUFHLENBQUVOLE9BQU8sQ0FBQSxJQUFJLENBQUNRLFNBQVMsQ0FBQ0ssT0FBTyxDQUFDQyxHQUFHLENBQUNWLElBQUksQ0FBQyxFQUFFO01BQ3pESSxTQUFTLENBQUNLLE9BQU8sQ0FBQ0UsR0FBRyxDQUFDWCxJQUFJLENBQUM7TUFDM0JZLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLG1HQUFtRyxDQUFDO0lBQ25IO0VBQ0YsQ0FBQyxFQUFFLENBQUNiLElBQUksRUFBRUUsR0FBRyxLQUFBLElBQUEsSUFBSEEsR0FBRyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFIQSxHQUFHLENBQUVOLE9BQU8sQ0FBQyxDQUFDO0VBRXhCLE9BQU87SUFBRU0sR0FBRyxFQUFIQSxHQUFHO0lBQUVOLE9BQU8sRUFBUEEsT0FBTztJQUFFVyxPQUFPLEVBQVBBLE9BQU87SUFBRUMsT0FBTyxFQUFQQTtFQUFPLENBQUU7QUFDM0MiLCJmaWxlIjoiY29tcG9uZW50cy9Gb3JtL3VzZUZvcm1JdGVtQ29udGV4dC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgY3JlYXRlRWxlbWVudCwgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCB7IEZvcm1Db250ZXh0IH0gZnJvbSAnLi9Gb3JtJztcbmNvbnN0IEZhbGxiYWNrRm9ybUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpO1xuLyoqXG4gKiBMYXppbHkgY3JlYXRlcyBmb3JtIG1ldGhvZHMgb25seSB3aGVuIG1vdW50ZWQuXG4gKlxuICogVXNlIHRoaXMgcHJvdmlkZXIgd2hlbiByZW5kZXJpbmcgZm9ybS1hd2FyZSBjb21wb25lbnRzIG91dHNpZGUgYDxGb3JtPmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBGYWxsYmFja0Zvcm1Qcm92aWRlcih7IGNoaWxkcmVuIH0pIHtcbiAgICBjb25zdCBtZXRob2RzID0gdXNlRm9ybSgpO1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KEZhbGxiYWNrRm9ybUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IG1ldGhvZHMgfSwgY2hpbGRyZW4pO1xufVxuLyoqXG4gKiBSZXNvbHZlcyBmb3JtIGNvbnRleHQgZm9yIGEgYDxGb3JtSXRlbT5gLlxuICpcbiAqIFdoZW4gcmVuZGVyZWQgaW5zaWRlIGEgYDxGb3JtPmAsIHRoaXMgaG9vayB1c2VzIHRoZSBjb250ZXh0LXByb3ZpZGVkXG4gKiBgcmVhY3QtaG9vay1mb3JtYCBtZXRob2RzLiBPdGhlcndpc2UgaXQgcmVhZHMgbWV0aG9kcyBmcm9tXG4gKiB7QGxpbmsgRmFsbGJhY2tGb3JtUHJvdmlkZXJ9LCB3aGljaCBjcmVhdGVzIGEgbG9jYWwgYHVzZUZvcm0oKWAgaW5zdGFuY2UuXG4gKlxuICogQSBkZXZlbG9wbWVudC1vbmx5IGNvbnNvbGUgd2FybmluZyBpcyBlbWl0dGVkIChvbmNlIHBlciBmaWVsZCBuYW1lKSB3aGVuXG4gKiBhIGBuYW1lYCBwcm9wIGlzIHNldCBidXQgbm8gcGFyZW50IGA8Rm9ybT5gIGNvbnRleHQgaXMgZm91bmQuXG4gKlxuICogQHRlbXBsYXRlIFRGaWVsZFZhbHVlcyAtIFRoZSBzaGFwZSBvZiB0aGUgZm9ybSB2YWx1ZXMuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBmaWVsZCBuYW1lLCB1c2VkIGZvciB0aGUgbWlzc2luZy1jb250ZXh0IHdhcm5pbmcgY2hlY2suXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBgY3R4YCAoZm9ybSBjb250ZXh0IG9yIGBudWxsYCksIGBtZXRob2RzYCwgYGNvbnRyb2xgLCBhbmQgYHRyaWdnZXJgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRm9ybUl0ZW1Db250ZXh0KG5hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChGb3JtQ29udGV4dCk7XG4gICAgY29uc3QgZmFsbGJhY2tNZXRob2RzID0gdXNlQ29udGV4dChGYWxsYmFja0Zvcm1Db250ZXh0KTtcbiAgICBjb25zdCB3YXJuZWRSZWYgPSB1c2VSZWYobmV3IFNldCgpKTtcbiAgICBjb25zdCBtZXRob2RzID0gKF9hID0gY3R4ID09PSBudWxsIHx8IGN0eCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3R4Lm1ldGhvZHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbGxiYWNrTWV0aG9kcztcbiAgICBpZiAoIW1ldGhvZHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbRm9ybUl0ZW1dIE5vIGZvcm0gY29udHJvbCBmb3VuZC4gV3JhcCB3aXRoIDxGb3JtPiBvciBtb3VudCBpbnNpZGUgPEZhbGxiYWNrRm9ybVByb3ZpZGVyPi4nKTtcbiAgICB9XG4gICAgY29uc3QgY29udHJvbCA9IG1ldGhvZHMuY29udHJvbDtcbiAgICBjb25zdCB0cmlnZ2VyID0gbWV0aG9kcy50cmlnZ2VyO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChuYW1lICYmICEoY3R4ID09PSBudWxsIHx8IGN0eCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3R4Lm1ldGhvZHMpICYmICF3YXJuZWRSZWYuY3VycmVudC5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHdhcm5lZFJlZi5jdXJyZW50LmFkZChuYW1lKTtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW0Zvcm1JdGVtXSBgbmFtZWAgcHJvcCBpcyBzZXQgYnV0IG5vIGZvcm0gY29udHJvbCBmb3VuZC4gV3JhcCBGb3JtSXRlbSBpbnNpZGUgYSA8Rm9ybT4gY29tcG9uZW50LicpO1xuICAgICAgICB9XG4gICAgfSwgW25hbWUsIGN0eCA9PT0gbnVsbCB8fCBjdHggPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN0eC5tZXRob2RzXSk7XG4gICAgcmV0dXJuIHsgY3R4LCBtZXRob2RzLCBjb250cm9sLCB0cmlnZ2VyIH07XG59Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,51 @@
1
+ import type { Control, FieldPath, FieldValues, UseFormReturn } from 'react-hook-form';
2
+ import type { FormItemProps } from './interface';
3
+ /**
4
+ * Return type of {@link useFormItemWatch}.
5
+ *
6
+ * @template TFieldValues - The shape of the form values.
7
+ */
8
+ interface UseFormItemWatchResult<TFieldValues extends FieldValues> {
9
+ /** Current snapshot of all form values. */
10
+ allValues: TFieldValues;
11
+ /** Watched dependency values (array when multiple, single value otherwise). */
12
+ depValues: unknown;
13
+ /** Whether the FormItem should render based on `shouldUpdate` evaluation. */
14
+ shouldRender: boolean;
15
+ }
16
+ /**
17
+ * Arguments for {@link useFormItemWatch}.
18
+ *
19
+ * @template TFieldValues - The shape of the form values.
20
+ */
21
+ interface UseFormItemWatchArgs<TFieldValues extends FieldValues> {
22
+ /** The `react-hook-form` `Control` instance. */
23
+ control: Control<TFieldValues>;
24
+ /** The `react-hook-form` methods instance. */
25
+ methods: UseFormReturn<TFieldValues>;
26
+ /** Field paths that trigger re-validation when their values change. */
27
+ dependencies?: FormItemProps<TFieldValues>['dependencies'];
28
+ /** Additional field paths to watch for re-render. */
29
+ watchNames?: FormItemProps<TFieldValues>['watchNames'];
30
+ /** Controls when the FormItem re-renders. */
31
+ shouldUpdate?: FormItemProps<TFieldValues>['shouldUpdate'];
32
+ /** The field path for this FormItem. */
33
+ name?: FieldPath<TFieldValues>;
34
+ }
35
+ /**
36
+ * Consolidates the three `useWatch` subscriptions (dependencies, all values,
37
+ * and named watches) along with `allValues` derivation and `shouldRender`
38
+ * gating into a single hook.
39
+ *
40
+ * This hook manages:
41
+ * 1. Watching dependency fields for cross-field re-validation.
42
+ * 2. Watching all values when `shouldUpdate` requires a full-form comparison.
43
+ * 3. Watching named fields specified via `watchNames`.
44
+ * 4. Computing `shouldRender` based on the `shouldUpdate` prop.
45
+ *
46
+ * @template TFieldValues - The shape of the form values.
47
+ * @param args - {@link UseFormItemWatchArgs}
48
+ * @returns {@link UseFormItemWatchResult} containing current values and render gate.
49
+ */
50
+ export declare function useFormItemWatch<TFieldValues extends FieldValues = FieldValues>({ control, methods, dependencies, watchNames, shouldUpdate, name, }: UseFormItemWatchArgs<TFieldValues>): UseFormItemWatchResult<TFieldValues>;
51
+ export {};
@@ -0,0 +1,69 @@
1
+ import { useMemo } from 'react';
2
+ import { useWatch } from 'react-hook-form';
3
+ import usePrevious from '../usePrevious';
4
+ // Module-level constant to avoid recreating empty array on each render.
5
+ var EMPTY_NAMES = [];
6
+ /**
7
+ * Consolidates the three `useWatch` subscriptions (dependencies, all values,
8
+ * and named watches) along with `allValues` derivation and `shouldRender`
9
+ * gating into a single hook.
10
+ *
11
+ * This hook manages:
12
+ * 1. Watching dependency fields for cross-field re-validation.
13
+ * 2. Watching all values when `shouldUpdate` requires a full-form comparison.
14
+ * 3. Watching named fields specified via `watchNames`.
15
+ * 4. Computing `shouldRender` based on the `shouldUpdate` prop.
16
+ *
17
+ * @template TFieldValues - The shape of the form values.
18
+ * @param args - {@link UseFormItemWatchArgs}
19
+ * @returns {@link UseFormItemWatchResult} containing current values and render gate.
20
+ */
21
+ export function useFormItemWatch(_ref) {
22
+ var control = _ref.control,
23
+ methods = _ref.methods,
24
+ dependencies = _ref.dependencies,
25
+ watchNames = _ref.watchNames,
26
+ shouldUpdate = _ref.shouldUpdate,
27
+ name = _ref.name;
28
+ var shouldWatchAllValues = shouldUpdate === true || typeof shouldUpdate === 'function';
29
+ var depNames = (dependencies === null || dependencies === void 0 ? void 0 : dependencies.length) ? dependencies : EMPTY_NAMES;
30
+ var shouldWatchDeps = !!(name && depNames.length);
31
+ var watchNamesList = (watchNames === null || watchNames === void 0 ? void 0 : watchNames.length) ? watchNames : EMPTY_NAMES;
32
+ var shouldWatchNames = !!(watchNames === null || watchNames === void 0 ? void 0 : watchNames.length);
33
+ var depValues = useWatch({
34
+ control: control,
35
+ name: depNames,
36
+ disabled: !shouldWatchDeps
37
+ });
38
+ var watchedAllValues = useWatch({
39
+ control: control,
40
+ disabled: !shouldWatchAllValues
41
+ });
42
+ var watchedNamesValues = useWatch({
43
+ control: control,
44
+ name: watchNamesList,
45
+ disabled: !shouldWatchNames
46
+ });
47
+ var allValues = useMemo(function () {
48
+ var getValues = methods.getValues;
49
+ if (!getValues) return {};
50
+ if (shouldWatchAllValues) return watchedAllValues !== null && watchedAllValues !== void 0 ? watchedAllValues : getValues();
51
+ return getValues();
52
+ }, [methods, shouldWatchAllValues, watchedAllValues,
53
+ // Intentionally unused in useMemo body: this dependency forces `allValues`
54
+ // to recompute via methods.getValues() when watched names change while
55
+ // `shouldWatchAllValues` is false.
56
+ watchedNamesValues]);
57
+ var prevValues = usePrevious(allValues);
58
+ var shouldRender = useMemo(function () {
59
+ if (!shouldUpdate || shouldUpdate === true) return true;
60
+ if (prevValues === undefined) return true;
61
+ return shouldUpdate(prevValues, allValues);
62
+ }, [allValues, prevValues, shouldUpdate]);
63
+ return {
64
+ allValues: allValues,
65
+ depValues: depValues,
66
+ shouldRender: shouldRender
67
+ };
68
+ }
69
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvRm9ybS91c2VGb3JtSXRlbVdhdGNoLnRzIiwiY29tcG9uZW50cy9Gb3JtL3VzZUZvcm1JdGVtV2F0Y2guanMiXSwibmFtZXMiOlsidXNlTWVtbyIsInVzZVdhdGNoIiwidXNlUHJldmlvdXMiLCJFTVBUWV9OQU1FUyIsInVzZUZvcm1JdGVtV2F0Y2giLCJfcmVmIiwiY29udHJvbCIsIm1ldGhvZHMiLCJkZXBlbmRlbmNpZXMiLCJ3YXRjaE5hbWVzIiwic2hvdWxkVXBkYXRlIiwibmFtZSIsInNob3VsZFdhdGNoQWxsVmFsdWVzIiwiZGVwTmFtZXMiLCJsZW5ndGgiLCJzaG91bGRXYXRjaERlcHMiLCJ3YXRjaE5hbWVzTGlzdCIsInNob3VsZFdhdGNoTmFtZXMiLCJkZXBWYWx1ZXMiLCJkaXNhYmxlZCIsIndhdGNoZWRBbGxWYWx1ZXMiLCJ3YXRjaGVkTmFtZXNWYWx1ZXMiLCJhbGxWYWx1ZXMiLCJnZXRWYWx1ZXMiLCJwcmV2VmFsdWVzIiwic2hvdWxkUmVuZGVyIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxPQUFPLFFBQVEsT0FBTztBQUMvQixTQUFTQyxRQUFRLFFBQVEsaUJBQWlCO0FBQzFDLE9BQU9DLFdBQVcsTUFBTSxnQkFBZ0I7QUFzQ3hDO0FBQ0EsSUFBTUMsV0FBVyxHQUFZLEVBQUU7QUFFL0I7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBRHVDQSxPQUFNLFNBQVVDLGdCQUFnQkEsQ0FBQUMsSUFBQSxFQU9LO0VBQUEsSUFObkNDLE9BQU8sR0FBQUQsSUFBQSxDQUFQQyxPQUFPO0lBQ1BDLE9BQU8sR0FBQUYsSUFBQSxDQUFQRSxPQUFPO0lBQ1BDLFlBQVksR0FBQUgsSUFBQSxDQUFaRyxZQUFZO0lBQ1pDLFVBQVUsR0FBQUosSUFBQSxDQUFWSSxVQUFVO0lBQ1ZDLFlBQVksR0FBQUwsSUFBQSxDQUFaSyxZQUFZO0lBQ1pDLElBQUksR0FBQU4sSUFBQSxDQUFKTSxJQUFJO0VBRUosSUFBTUMsb0JBQW9CLEdBQUdGLFlBQVksS0FBSyxJQUFJLElBQUksT0FBT0EsWUFBWSxLQUFLLFVBQVU7RUFDeEYsSUFBTUcsUUFBUSxHQUFJLENBQUFMLFlBQVksS0FBQSxJQUFBLElBQVpBLFlBQVksS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBWkEsWUFBWSxDQUFFTSxNQUFNLElBQUdOLFlBQVksR0FBR0wsV0FBeUM7RUFDakcsSUFBTVksZUFBZSxHQUFHLENBQUMsRUFBRUosSUFBSSxJQUFJRSxRQUFRLENBQUNDLE1BQU0sQ0FBQztFQUNuRCxJQUFNRSxjQUFjLEdBQUksQ0FBQVAsVUFBVSxLQUFBLElBQUEsSUFBVkEsVUFBVSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFWQSxVQUFVLENBQUVLLE1BQU0sSUFBR0wsVUFBVSxHQUFHTixXQUF5QztFQUNuRyxJQUFNYyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUNSLFVBQVUsS0FBQSxJQUFBLElBQVZBLFVBQVUsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBVkEsVUFBVSxDQUFFSyxNQUFNLENBQUE7RUFFN0MsSUFBTUksU0FBUyxHQUFHakIsUUFBUSxDQUFDO0lBQUVLLE9BQU8sRUFBUEEsT0FBTztJQUFFSyxJQUFJLEVBQUVFLFFBQVE7SUFBRU0sUUFBUSxFQUFFLENBQUNKO0VBQWUsQ0FBRSxDQUFDO0VBQ25GLElBQU1LLGdCQUFnQixHQUFHbkIsUUFBUSxDQUFDO0lBQUVLLE9BQU8sRUFBUEEsT0FBTztJQUFFYSxRQUFRLEVBQUUsQ0FBQ1A7RUFBb0IsQ0FBRSxDQUFDO0VBQy9FLElBQU1TLGtCQUFrQixHQUFHcEIsUUFBUSxDQUFDO0lBQ2xDSyxPQUFPLEVBQVBBLE9BQU87SUFDUEssSUFBSSxFQUFFSyxjQUFjO0lBQ3BCRyxRQUFRLEVBQUUsQ0FBQ0Y7RUM3Q1gsQ0Q4Q0QsQ0FBQztFQUVGLElBQU1LLFNBQVMsR0FBR3RCLE9BQU8sQ0FBQyxZQUFLO0lBQzdCLElBQU11QixTQUFTLEdBQUdoQixPQUFPLENBQUNnQixTQUFTO0lBQ25DLElBQUksQ0FBQ0EsU0FBUyxFQUFFLE9BQU8sQ0FBQSxDQUFrQjtJQUN6QyxJQUFJWCxvQkFBb0IsRUFBRSxPQUFRUSxnQkFBZ0IsS0FBQSxJQUFBLElBQWhCQSxnQkFBZ0IsS0FBQSxLQUFBLENBQUEsR0FBaEJBLGdCQUFnQixHQUFJRyxTQUFTLENBQUEsQ0FBRTtJQUNqRSxPQUFPQSxTQUFTLENBQUEsQ0FBRTtFQUNwQixDQUFDLEVBQUUsQ0FDRGhCLE9BQU8sRUFDUEssb0JBQW9CLEVBQ3BCUSxnQkFBZ0I7RUFDaEI7RUFDQTtFQUNBO0VBQ0FDLGtCQUFrQixDQUNuQixDQUFDO0VBRUYsSUFBTUcsVUFBVSxHQUFHdEIsV0FBVyxDQUFDb0IsU0FBUyxDQUFDO0VBRXpDLElBQU1HLFlBQVksR0FBR3pCLE9BQU8sQ0FBQyxZQUFLO0lBQ2hDLElBQUksQ0FBQ1UsWUFBWSxJQUFJQSxZQUFZLEtBQUssSUFBSSxFQUFFLE9BQU8sSUFBSTtJQUN2RCxJQUFJYyxVQUFVLEtBQUtFLFNBQVMsRUFBRSxPQUFPLElBQUk7SUFDekMsT0FBT2hCLFlBQVksQ0FBQ2MsVUFBVSxFQUFFRixTQUFTLENBQUM7RUFDNUMsQ0FBQyxFQUFFLENBQUNBLFNBQVMsRUFBRUUsVUFBVSxFQUFFZCxZQUFZLENBQUMsQ0FBQztFQUV6QyxPQUFPO0lBQUVZLFNBQVMsRUFBVEEsU0FBUztJQUFFSixTQUFTLEVBQVRBLFNBQVM7SUFBRU8sWUFBWSxFQUFaQTtFQUFZLENBQUU7QUFDL0MiLCJmaWxlIjoiY29tcG9uZW50cy9Gb3JtL3VzZUZvcm1JdGVtV2F0Y2guanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VXYXRjaCB9IGZyb20gJ3JlYWN0LWhvb2stZm9ybSc7XG5pbXBvcnQgdXNlUHJldmlvdXMgZnJvbSAnLi4vdXNlUHJldmlvdXMnO1xuLy8gTW9kdWxlLWxldmVsIGNvbnN0YW50IHRvIGF2b2lkIHJlY3JlYXRpbmcgZW1wdHkgYXJyYXkgb24gZWFjaCByZW5kZXIuXG5jb25zdCBFTVBUWV9OQU1FUyA9IFtdO1xuLyoqXG4gKiBDb25zb2xpZGF0ZXMgdGhlIHRocmVlIGB1c2VXYXRjaGAgc3Vic2NyaXB0aW9ucyAoZGVwZW5kZW5jaWVzLCBhbGwgdmFsdWVzLFxuICogYW5kIG5hbWVkIHdhdGNoZXMpIGFsb25nIHdpdGggYGFsbFZhbHVlc2AgZGVyaXZhdGlvbiBhbmQgYHNob3VsZFJlbmRlcmBcbiAqIGdhdGluZyBpbnRvIGEgc2luZ2xlIGhvb2suXG4gKlxuICogVGhpcyBob29rIG1hbmFnZXM6XG4gKiAxLiBXYXRjaGluZyBkZXBlbmRlbmN5IGZpZWxkcyBmb3IgY3Jvc3MtZmllbGQgcmUtdmFsaWRhdGlvbi5cbiAqIDIuIFdhdGNoaW5nIGFsbCB2YWx1ZXMgd2hlbiBgc2hvdWxkVXBkYXRlYCByZXF1aXJlcyBhIGZ1bGwtZm9ybSBjb21wYXJpc29uLlxuICogMy4gV2F0Y2hpbmcgbmFtZWQgZmllbGRzIHNwZWNpZmllZCB2aWEgYHdhdGNoTmFtZXNgLlxuICogNC4gQ29tcHV0aW5nIGBzaG91bGRSZW5kZXJgIGJhc2VkIG9uIHRoZSBgc2hvdWxkVXBkYXRlYCBwcm9wLlxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgc2hhcGUgb2YgdGhlIGZvcm0gdmFsdWVzLlxuICogQHBhcmFtIGFyZ3MgLSB7QGxpbmsgVXNlRm9ybUl0ZW1XYXRjaEFyZ3N9XG4gKiBAcmV0dXJucyB7QGxpbmsgVXNlRm9ybUl0ZW1XYXRjaFJlc3VsdH0gY29udGFpbmluZyBjdXJyZW50IHZhbHVlcyBhbmQgcmVuZGVyIGdhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VGb3JtSXRlbVdhdGNoKHsgY29udHJvbCwgbWV0aG9kcywgZGVwZW5kZW5jaWVzLCB3YXRjaE5hbWVzLCBzaG91bGRVcGRhdGUsIG5hbWUsIH0pIHtcbiAgICBjb25zdCBzaG91bGRXYXRjaEFsbFZhbHVlcyA9IHNob3VsZFVwZGF0ZSA9PT0gdHJ1ZSB8fCB0eXBlb2Ygc2hvdWxkVXBkYXRlID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0IGRlcE5hbWVzID0gKChkZXBlbmRlbmNpZXMgPT09IG51bGwgfHwgZGVwZW5kZW5jaWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZXBlbmRlbmNpZXMubGVuZ3RoKSA/IGRlcGVuZGVuY2llcyA6IEVNUFRZX05BTUVTKTtcbiAgICBjb25zdCBzaG91bGRXYXRjaERlcHMgPSAhIShuYW1lICYmIGRlcE5hbWVzLmxlbmd0aCk7XG4gICAgY29uc3Qgd2F0Y2hOYW1lc0xpc3QgPSAoKHdhdGNoTmFtZXMgPT09IG51bGwgfHwgd2F0Y2hOYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2F0Y2hOYW1lcy5sZW5ndGgpID8gd2F0Y2hOYW1lcyA6IEVNUFRZX05BTUVTKTtcbiAgICBjb25zdCBzaG91bGRXYXRjaE5hbWVzID0gISEod2F0Y2hOYW1lcyA9PT0gbnVsbCB8fCB3YXRjaE5hbWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3YXRjaE5hbWVzLmxlbmd0aCk7XG4gICAgY29uc3QgZGVwVmFsdWVzID0gdXNlV2F0Y2goeyBjb250cm9sLCBuYW1lOiBkZXBOYW1lcywgZGlzYWJsZWQ6ICFzaG91bGRXYXRjaERlcHMgfSk7XG4gICAgY29uc3Qgd2F0Y2hlZEFsbFZhbHVlcyA9IHVzZVdhdGNoKHsgY29udHJvbCwgZGlzYWJsZWQ6ICFzaG91bGRXYXRjaEFsbFZhbHVlcyB9KTtcbiAgICBjb25zdCB3YXRjaGVkTmFtZXNWYWx1ZXMgPSB1c2VXYXRjaCh7XG4gICAgICAgIGNvbnRyb2wsXG4gICAgICAgIG5hbWU6IHdhdGNoTmFtZXNMaXN0LFxuICAgICAgICBkaXNhYmxlZDogIXNob3VsZFdhdGNoTmFtZXMsXG4gICAgfSk7XG4gICAgY29uc3QgYWxsVmFsdWVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdldFZhbHVlcyA9IG1ldGhvZHMuZ2V0VmFsdWVzO1xuICAgICAgICBpZiAoIWdldFZhbHVlcylcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgaWYgKHNob3VsZFdhdGNoQWxsVmFsdWVzKVxuICAgICAgICAgICAgcmV0dXJuICh3YXRjaGVkQWxsVmFsdWVzICE9PSBudWxsICYmIHdhdGNoZWRBbGxWYWx1ZXMgIT09IHZvaWQgMCA/IHdhdGNoZWRBbGxWYWx1ZXMgOiBnZXRWYWx1ZXMoKSk7XG4gICAgICAgIHJldHVybiBnZXRWYWx1ZXMoKTtcbiAgICB9LCBbXG4gICAgICAgIG1ldGhvZHMsXG4gICAgICAgIHNob3VsZFdhdGNoQWxsVmFsdWVzLFxuICAgICAgICB3YXRjaGVkQWxsVmFsdWVzLFxuICAgICAgICAvLyBJbnRlbnRpb25hbGx5IHVudXNlZCBpbiB1c2VNZW1vIGJvZHk6IHRoaXMgZGVwZW5kZW5jeSBmb3JjZXMgYGFsbFZhbHVlc2BcbiAgICAgICAgLy8gdG8gcmVjb21wdXRlIHZpYSBtZXRob2RzLmdldFZhbHVlcygpIHdoZW4gd2F0Y2hlZCBuYW1lcyBjaGFuZ2Ugd2hpbGVcbiAgICAgICAgLy8gYHNob3VsZFdhdGNoQWxsVmFsdWVzYCBpcyBmYWxzZS5cbiAgICAgICAgd2F0Y2hlZE5hbWVzVmFsdWVzLFxuICAgIF0pO1xuICAgIGNvbnN0IHByZXZWYWx1ZXMgPSB1c2VQcmV2aW91cyhhbGxWYWx1ZXMpO1xuICAgIGNvbnN0IHNob3VsZFJlbmRlciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoIXNob3VsZFVwZGF0ZSB8fCBzaG91bGRVcGRhdGUgPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHByZXZWYWx1ZXMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gc2hvdWxkVXBkYXRlKHByZXZWYWx1ZXMsIGFsbFZhbHVlcyk7XG4gICAgfSwgW2FsbFZhbHVlcywgcHJldlZhbHVlcywgc2hvdWxkVXBkYXRlXSk7XG4gICAgcmV0dXJuIHsgYWxsVmFsdWVzLCBkZXBWYWx1ZXMsIHNob3VsZFJlbmRlciB9O1xufSJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,40 @@
1
+ import type { FieldPath, FieldValues } from 'react-hook-form';
2
+ import type { FormItemProps } from './interface';
3
+ /**
4
+ * Arguments for {@link useValidationTrigger}.
5
+ *
6
+ * @template TFieldValues - The shape of the form values.
7
+ */
8
+ interface UseValidationTriggerArgs<TFieldValues extends FieldValues> {
9
+ /** The field path to validate. When `undefined`, validation is skipped. */
10
+ name?: FieldPath<TFieldValues>;
11
+ /** The `trigger` function from `react-hook-form` for imperative validation. */
12
+ trigger: (name: FieldPath<TFieldValues>) => Promise<boolean>;
13
+ /** Event(s) that should trigger validation (`'onChange'`, `'onBlur'`, or both). */
14
+ validateTrigger?: FormItemProps<TFieldValues>['validateTrigger'];
15
+ /** Debounce delay in milliseconds for triggered validation. */
16
+ validateDebounce?: number;
17
+ /** Field paths whose changes should re-trigger this field's validation. */
18
+ dependencies?: FormItemProps<TFieldValues>['dependencies'];
19
+ /** Current watched dependency values used to detect changes. */
20
+ depValues: unknown;
21
+ }
22
+ /**
23
+ * Encapsulates validation trigger logic for a single form field.
24
+ *
25
+ * Responsibilities:
26
+ * - Normalizes the `validateTrigger` prop into an array of trigger modes.
27
+ * - Provides a `withTrigger` wrapper that composes event handlers (onChange/onBlur)
28
+ * with conditional validation calls.
29
+ * - Applies optional debounce to validation triggers.
30
+ * - Re-validates the field when dependency values change (cross-field validation).
31
+ * - Cleans up debounce timers on unmount.
32
+ *
33
+ * @template TFieldValues - The shape of the form values.
34
+ * @param args - {@link UseValidationTriggerArgs}
35
+ * @returns An object containing the `withTrigger` function.
36
+ */
37
+ export declare function useValidationTrigger<TFieldValues extends FieldValues = FieldValues>({ name, trigger, validateTrigger, validateDebounce, dependencies, depValues, }: UseValidationTriggerArgs<TFieldValues>): {
38
+ withTrigger: (mode: "onBlur" | "onChange", fn?: ((...args: unknown[]) => void) | undefined) => (...args: unknown[]) => void;
39
+ };
40
+ export {};
@@ -0,0 +1,74 @@
1
+ import { useEffect, useMemo, useRef } from 'react';
2
+ import useMemoizedFn from '../useMemoizedFn';
3
+ import { DEBOUNCE_MIN } from './constants';
4
+ import { normalizeValidateTrigger, shallowEqualArray } from './helper';
5
+ /**
6
+ * Encapsulates validation trigger logic for a single form field.
7
+ *
8
+ * Responsibilities:
9
+ * - Normalizes the `validateTrigger` prop into an array of trigger modes.
10
+ * - Provides a `withTrigger` wrapper that composes event handlers (onChange/onBlur)
11
+ * with conditional validation calls.
12
+ * - Applies optional debounce to validation triggers.
13
+ * - Re-validates the field when dependency values change (cross-field validation).
14
+ * - Cleans up debounce timers on unmount.
15
+ *
16
+ * @template TFieldValues - The shape of the form values.
17
+ * @param args - {@link UseValidationTriggerArgs}
18
+ * @returns An object containing the `withTrigger` function.
19
+ */
20
+ export function useValidationTrigger(_ref) {
21
+ var name = _ref.name,
22
+ trigger = _ref.trigger,
23
+ validateTrigger = _ref.validateTrigger,
24
+ validateDebounce = _ref.validateDebounce,
25
+ dependencies = _ref.dependencies,
26
+ depValues = _ref.depValues;
27
+ var triggerTimerRef = useRef(null);
28
+ var prevDepValuesRef = useRef(null);
29
+ var triggerModes = useMemo(function () {
30
+ return normalizeValidateTrigger(validateTrigger);
31
+ }, [validateTrigger]);
32
+ var triggerValidation = useMemoizedFn(function () {
33
+ if (!name) return;
34
+ var run = function run() {
35
+ void trigger(name);
36
+ };
37
+ if (validateDebounce && validateDebounce > DEBOUNCE_MIN) {
38
+ if (triggerTimerRef.current) clearTimeout(triggerTimerRef.current);
39
+ triggerTimerRef.current = setTimeout(run, validateDebounce);
40
+ return;
41
+ }
42
+ run();
43
+ });
44
+ useEffect(function () {
45
+ if (!name || !(dependencies === null || dependencies === void 0 ? void 0 : dependencies.length)) return;
46
+ var nextDeps = Array.isArray(depValues) ? depValues : [depValues];
47
+ var prevDeps = prevDepValuesRef.current;
48
+ if (!prevDeps) {
49
+ prevDepValuesRef.current = nextDeps;
50
+ return;
51
+ }
52
+ if (shallowEqualArray(prevDeps, nextDeps)) return;
53
+ prevDepValuesRef.current = nextDeps;
54
+ triggerValidation();
55
+ }, [depValues, dependencies === null || dependencies === void 0 ? void 0 : dependencies.length, name, triggerValidation]);
56
+ useEffect(function () {
57
+ return function () {
58
+ if (triggerTimerRef.current) clearTimeout(triggerTimerRef.current);
59
+ };
60
+ }, []);
61
+ var shouldTrigger = useMemoizedFn(function (mode) {
62
+ return triggerModes.includes(mode);
63
+ });
64
+ var withTrigger = useMemoizedFn(function (mode, fn) {
65
+ return function () {
66
+ fn === null || fn === void 0 ? void 0 : fn.apply(void 0, arguments);
67
+ if (name && shouldTrigger(mode)) triggerValidation();
68
+ };
69
+ });
70
+ return {
71
+ withTrigger: withTrigger
72
+ };
73
+ }
74
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvRm9ybS91c2VWYWxpZGF0aW9uVHJpZ2dlci50cyIsImNvbXBvbmVudHMvRm9ybS91c2VWYWxpZGF0aW9uVHJpZ2dlci5qcyJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlTWVtb2l6ZWRGbiIsIkRFQk9VTkNFX01JTiIsIm5vcm1hbGl6ZVZhbGlkYXRlVHJpZ2dlciIsInNoYWxsb3dFcXVhbEFycmF5IiwidXNlVmFsaWRhdGlvblRyaWdnZXIiLCJfcmVmIiwibmFtZSIsInRyaWdnZXIiLCJ2YWxpZGF0ZVRyaWdnZXIiLCJ2YWxpZGF0ZURlYm91bmNlIiwiZGVwZW5kZW5jaWVzIiwiZGVwVmFsdWVzIiwidHJpZ2dlclRpbWVyUmVmIiwicHJldkRlcFZhbHVlc1JlZiIsInRyaWdnZXJNb2RlcyIsInRyaWdnZXJWYWxpZGF0aW9uIiwicnVuIiwiY3VycmVudCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJsZW5ndGgiLCJuZXh0RGVwcyIsIkFycmF5IiwiaXNBcnJheSIsInByZXZEZXBzIiwic2hvdWxkVHJpZ2dlciIsIm1vZGUiLCJpbmNsdWRlcyIsIndpdGhUcmlnZ2VyIiwiZm4iLCJhcHBseSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sUUFBUSxPQUFPO0FBQ2xELE9BQU9DLGFBQWEsTUFBTSxrQkFBa0I7QUFFNUMsU0FBU0MsWUFBWSxRQUFzQyxhQUFhO0FBQ3hFLFNBQVNDLHdCQUF3QixFQUFFQyxpQkFBaUIsUUFBUSxVQUFVO0FBdUJ0RTtBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FEd0JBLE9BQU0sU0FBVUMsb0JBQW9CQSxDQUFBQyxJQUFBLEVBT0s7RUFBQSxJQU52Q0MsSUFBSSxHQUFBRCxJQUFBLENB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QUFFWCxpQkFBaUIsQ0FBQSxDQUFFO0lBQ3RELENBQUM7RUFBQSxFQUNKO0VBRUQsT0FBTztJQUFFYSxXQUFXLEVBQVhBO0VBQVcsQ0FBRTtBQUN4QiIsImZpbGUiOiJjb21wb25lbnRzL0Zvcm0vdXNlVmFsaWRhdGlvblRyaWdnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnLi4vdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyBERUJPVU5DRV9NSU4gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBub3JtYWxpemVWYWxpZGF0ZVRyaWdnZXIsIHNoYWxsb3dFcXVhbEFycmF5IH0gZnJvbSAnLi9oZWxwZXInO1xuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgdmFsaWRhdGlvbiB0cmlnZ2VyIGxvZ2ljIGZvciBhIHNpbmdsZSBmb3JtIGZpZWxkLlxuICpcbiAqIFJlc3BvbnNpYmlsaXRpZXM6XG4gKiAtIE5vcm1hbGl6ZXMgdGhlIGB2YWxpZGF0ZVRyaWdnZXJgIHByb3AgaW50byBhbiBhcnJheSBvZiB0cmlnZ2VyIG1vZGVzLlxuICogLSBQcm92aWRlcyBhIGB3aXRoVHJpZ2dlcmAgd3JhcHBlciB0aGF0IGNvbXBvc2VzIGV2ZW50IGhhbmRsZXJzIChvbkNoYW5nZS9vbkJsdXIpXG4gKiAgIHdpdGggY29uZGl0aW9uYWwgdmFsaWRhdGlvbiBjYWxscy5cbiAqIC0gQXBwbGllcyBvcHRpb25hbCBkZWJvdW5jZSB0byB2YWxpZGF0aW9uIHRyaWdnZXJzLlxuICogLSBSZS12YWxpZGF0ZXMgdGhlIGZpZWxkIHdoZW4gZGVwZW5kZW5jeSB2YWx1ZXMgY2hhbmdlIChjcm9zcy1maWVsZCB2YWxpZGF0aW9uKS5cbiAqIC0gQ2xlYW5zIHVwIGRlYm91bmNlIHRpbWVycyBvbiB1bm1vdW50LlxuICpcbiAqIEB0ZW1wbGF0ZSBURmllbGRWYWx1ZXMgLSBUaGUgc2hhcGUgb2YgdGhlIGZvcm0gdmFsdWVzLlxuICogQHBhcmFtIGFyZ3MgLSB7QGxpbmsgVXNlVmFsaWRhdGlvblRyaWdnZXJBcmdzfVxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGB3aXRoVHJpZ2dlcmAgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VWYWxpZGF0aW9uVHJpZ2dlcih7IG5hbWUsIHRyaWdnZXIsIHZhbGlkYXRlVHJpZ2dlciwgdmFsaWRhdGVEZWJvdW5jZSwgZGVwZW5kZW5jaWVzLCBkZXBWYWx1ZXMsIH0pIHtcbiAgICBjb25zdCB0cmlnZ2VyVGltZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgcHJldkRlcFZhbHVlc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCB0cmlnZ2VyTW9kZXMgPSB1c2VNZW1vKCgpID0+IG5vcm1hbGl6ZVZhbGlkYXRlVHJpZ2dlcih2YWxpZGF0ZVRyaWdnZXIpLCBbdmFsaWRhdGVUcmlnZ2VyXSk7XG4gICAgY29uc3QgdHJpZ2dlclZhbGlkYXRpb24gPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgICAgICB2b2lkIHRyaWdnZXIobmFtZSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh2YWxpZGF0ZURlYm91bmNlICYmIHZhbGlkYXRlRGVib3VuY2UgPiBERUJPVU5DRV9NSU4pIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyVGltZXJSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgdHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KHJ1biwgdmFsaWRhdGVEZWJvdW5jZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcnVuKCk7XG4gICAgfSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFuYW1lIHx8ICEoZGVwZW5kZW5jaWVzID09PSBudWxsIHx8IGRlcGVuZGVuY2llcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwZW5kZW5jaWVzLmxlbmd0aCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5leHREZXBzID0gQXJyYXkuaXNBcnJheShkZXBWYWx1ZXMpID8gZGVwVmFsdWVzIDogW2RlcFZhbHVlc107XG4gICAgICAgIGNvbnN0IHByZXZEZXBzID0gcHJldkRlcFZhbHVlc1JlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIXByZXZEZXBzKSB7XG4gICAgICAgICAgICBwcmV2RGVwVmFsdWVzUmVmLmN1cnJlbnQgPSBuZXh0RGVwcztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hhbGxvd0VxdWFsQXJyYXkocHJldkRlcHMsIG5leHREZXBzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcHJldkRlcFZhbHVlc1JlZi5jdXJyZW50ID0gbmV4dERlcHM7XG4gICAgICAgIHRyaWdnZXJWYWxpZGF0aW9uKCk7XG4gICAgfSwgW2RlcFZhbHVlcywgZGVwZW5kZW5jaWVzID09PSBudWxsIHx8IGRlcGVuZGVuY2llcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVwZW5kZW5jaWVzLmxlbmd0aCwgbmFtZSwgdHJpZ2dlclZhbGlkYXRpb25dKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4gKCkgPT4ge1xuICAgICAgICBpZiAodHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQpXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodHJpZ2dlclRpbWVyUmVmLmN1cnJlbnQpO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBzaG91bGRUcmlnZ2VyID0gdXNlTWVtb2l6ZWRGbigobW9kZSkgPT4gdHJpZ2dlck1vZGVzLmluY2x1ZGVzKG1vZGUpKTtcbiAgICBjb25zdCB3aXRoVHJpZ2dlciA9IHVzZU1lbW9pemVkRm4oKG1vZGUsIGZuKSA9PiAoLi4uYXJncykgPT4ge1xuICAgICAgICBmbiA9PT0gbnVsbCB8fCBmbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZm4oLi4uYXJncyk7XG4gICAgICAgIGlmIChuYW1lICYmIHNob3VsZFRyaWdnZXIobW9kZSkpXG4gICAgICAgICAgICB0cmlnZ2VyVmFsaWRhdGlvbigpO1xuICAgIH0pO1xuICAgIHJldHVybiB7IHdpdGhUcmlnZ2VyIH07XG59Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==