@vef-framework-react/components 2.1.11 → 2.2.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 (294) hide show
  1. package/dist/cjs/_base/globals.cjs +1 -0
  2. package/dist/cjs/_base/helpers/message.cjs +1 -1
  3. package/dist/cjs/_base/helpers/modal.cjs +1 -1
  4. package/dist/cjs/_base/helpers/notification.cjs +1 -1
  5. package/dist/cjs/_base/index.cjs +1 -1
  6. package/dist/cjs/border-beam/index.cjs +1 -0
  7. package/dist/cjs/config-provider/context-holder.cjs +1 -1
  8. package/dist/cjs/crud/components/scene-form.cjs +1 -1
  9. package/dist/cjs/crud/index.cjs +1 -1
  10. package/dist/cjs/file-upload/index.cjs +1 -0
  11. package/dist/cjs/form/fields/date-range-picker/index.cjs +1 -1
  12. package/dist/cjs/form/fields/time-picker/index.cjs +1 -1
  13. package/dist/cjs/form/fields/time-range-picker/index.cjs +1 -1
  14. package/dist/cjs/form/fields/upload/index.cjs +1 -1
  15. package/dist/cjs/form/form-actions.cjs +1 -1
  16. package/dist/cjs/form/helpers/create-field.cjs +1 -1
  17. package/dist/cjs/index.cjs +1 -1
  18. package/dist/cjs/split-text/index.cjs +1 -1
  19. package/dist/cjs/upload/index.cjs +1 -1
  20. package/dist/es/_base/constants/breakpoints.js +1 -1
  21. package/dist/es/_base/constants/common.js +1 -1
  22. package/dist/es/_base/constants/css-vars.js +1 -1
  23. package/dist/es/_base/constants/event.js +1 -1
  24. package/dist/es/_base/constants/index.js +1 -1
  25. package/dist/es/_base/constants/symbols.js +1 -1
  26. package/dist/es/_base/constants/theme.js +1 -0
  27. package/dist/es/_base/globals.js +16 -0
  28. package/dist/es/_base/helpers/breakpoints.js +1 -1
  29. package/dist/es/_base/helpers/color.js +1 -1
  30. package/dist/es/_base/helpers/common.js +1 -1
  31. package/dist/es/_base/helpers/event.js +1 -1
  32. package/dist/es/_base/helpers/index.js +1 -1
  33. package/dist/es/_base/helpers/message.js +20 -19
  34. package/dist/es/_base/helpers/modal.js +30 -29
  35. package/dist/es/_base/helpers/notification.js +23 -22
  36. package/dist/es/_base/helpers/props.js +1 -1
  37. package/dist/es/_base/helpers/react.js +1 -1
  38. package/dist/es/_base/hooks/index.js +1 -1
  39. package/dist/es/_base/hooks/use-theme-tokens.js +1 -1
  40. package/dist/es/_base/index.js +2 -1
  41. package/dist/es/_base/styles/common.js +1 -1
  42. package/dist/es/_base/styles/index.js +1 -1
  43. package/dist/es/_base/types/breakpoints.js +1 -1
  44. package/dist/es/_base/types/common.js +1 -1
  45. package/dist/es/_base/types/index.js +1 -1
  46. package/dist/es/action-button/index.js +1 -1
  47. package/dist/es/action-button/use-action-button.js +1 -1
  48. package/dist/es/action-group/index.js +1 -1
  49. package/dist/es/action-group/use-action-group.js +1 -1
  50. package/dist/es/action-group/use-computed-action-buttons.js +1 -1
  51. package/dist/es/affix/index.js +1 -1
  52. package/dist/es/alert/index.js +1 -1
  53. package/dist/es/anchor/index.js +1 -1
  54. package/dist/es/auto-complete/index.js +1 -1
  55. package/dist/es/avatar/index.js +1 -1
  56. package/dist/es/badge/index.js +1 -1
  57. package/dist/es/bool/index.js +1 -1
  58. package/dist/es/border-beam/index.js +3 -0
  59. package/dist/es/breadcrumb/index.js +1 -1
  60. package/dist/es/button/index.js +1 -1
  61. package/dist/es/calendar/index.js +1 -1
  62. package/dist/es/card/index.js +1 -1
  63. package/dist/es/carousel/index.js +1 -1
  64. package/dist/es/cascader/index.js +1 -1
  65. package/dist/es/center/index.js +1 -1
  66. package/dist/es/charts/chart.js +1 -1
  67. package/dist/es/charts/helpers/group.js +1 -1
  68. package/dist/es/charts/helpers/index.js +1 -1
  69. package/dist/es/charts/hooks/index.js +1 -1
  70. package/dist/es/charts/hooks/use-chart.js +1 -1
  71. package/dist/es/charts/index.js +1 -1
  72. package/dist/es/charts/themes/index.js +1 -1
  73. package/dist/es/charts/themes/walden-dark.js +1 -1
  74. package/dist/es/charts/themes/walden.js +1 -1
  75. package/dist/es/charts/themes/wonderland-dark.js +1 -1
  76. package/dist/es/charts/themes/wonderland.js +1 -1
  77. package/dist/es/checkbox/index.js +1 -1
  78. package/dist/es/code-highlighter/index.js +1 -1
  79. package/dist/es/col/index.js +1 -1
  80. package/dist/es/collapse/index.js +1 -1
  81. package/dist/es/color-picker/index.js +1 -1
  82. package/dist/es/compact/index.js +1 -1
  83. package/dist/es/config-provider/app.js +1 -1
  84. package/dist/es/config-provider/constants.js +1 -1
  85. package/dist/es/config-provider/context-holder.js +16 -15
  86. package/dist/es/config-provider/css-vars.js +1 -1
  87. package/dist/es/config-provider/dark-mode-context.js +1 -1
  88. package/dist/es/config-provider/error-fallback.js +1 -1
  89. package/dist/es/config-provider/global-style.js +1 -1
  90. package/dist/es/config-provider/index.js +1 -1
  91. package/dist/es/config-provider/theme-config.js +1 -1
  92. package/dist/es/config-provider/use-config-provider.js +1 -1
  93. package/dist/es/crud/components/action-button-group.js +1 -1
  94. package/dist/es/crud/components/index.js +1 -1
  95. package/dist/es/crud/components/main.js +1 -1
  96. package/dist/es/crud/components/mutation-holder.js +1 -1
  97. package/dist/es/crud/components/operation-button-group.js +1 -1
  98. package/dist/es/crud/components/scene-form.js +24 -23
  99. package/dist/es/crud/components/selection-indicator.js +1 -1
  100. package/dist/es/crud/components/toolbar-actions.js +1 -1
  101. package/dist/es/crud/components/toolbar.js +1 -1
  102. package/dist/es/crud/event.js +1 -1
  103. package/dist/es/crud/helpers.js +1 -1
  104. package/dist/es/crud/hooks/index.js +1 -1
  105. package/dist/es/crud/hooks/use-query-observer.js +1 -1
  106. package/dist/es/crud/hooks/use-search-values.js +1 -1
  107. package/dist/es/crud/hooks/use-selected-rows.js +1 -1
  108. package/dist/es/crud/index.js +17 -16
  109. package/dist/es/crud/store.js +1 -1
  110. package/dist/es/crud/styles.js +1 -1
  111. package/dist/es/crud-page/index.js +1 -1
  112. package/dist/es/date-picker/index.js +1 -1
  113. package/dist/es/descriptions/index.js +1 -1
  114. package/dist/es/divider/index.js +1 -1
  115. package/dist/es/drawer/index.js +1 -1
  116. package/dist/es/dropdown/index.js +1 -1
  117. package/dist/es/dynamic-icon/index.js +1 -1
  118. package/dist/es/dynamic-icon/placeholder-icon.js +1 -1
  119. package/dist/es/dynamic-icon/unknown-icon.js +1 -1
  120. package/dist/es/empty/empty.js +1 -1
  121. package/dist/es/empty/index.js +1 -1
  122. package/dist/es/file-upload/index.js +59 -0
  123. package/dist/es/flex/index.js +1 -1
  124. package/dist/es/flex-card/index.js +1 -1
  125. package/dist/es/flex-card/styles.js +1 -1
  126. package/dist/es/flip-text/index.js +1 -1
  127. package/dist/es/float-button/index.js +1 -1
  128. package/dist/es/form/components/form.js +1 -1
  129. package/dist/es/form/components/index.js +1 -1
  130. package/dist/es/form/components/reset-button.js +1 -1
  131. package/dist/es/form/components/submit-button.js +1 -1
  132. package/dist/es/form/contexts/form-context.js +1 -1
  133. package/dist/es/form/contexts/form-layout.js +1 -1
  134. package/dist/es/form/contexts/index.js +1 -1
  135. package/dist/es/form/fields/auto-complete/index.js +1 -1
  136. package/dist/es/form/fields/bool/index.js +1 -1
  137. package/dist/es/form/fields/cascader/index.js +1 -1
  138. package/dist/es/form/fields/checkbox/index.js +1 -1
  139. package/dist/es/form/fields/color-picker/index.js +1 -1
  140. package/dist/es/form/fields/date-picker/index.js +1 -1
  141. package/dist/es/form/fields/date-range-picker/index.js +13 -18
  142. package/dist/es/form/fields/index.js +1 -1
  143. package/dist/es/form/fields/input/index.js +1 -1
  144. package/dist/es/form/fields/input-number/index.js +1 -1
  145. package/dist/es/form/fields/mentions/index.js +1 -1
  146. package/dist/es/form/fields/password/index.js +1 -1
  147. package/dist/es/form/fields/radio/index.js +1 -1
  148. package/dist/es/form/fields/rate/index.js +1 -1
  149. package/dist/es/form/fields/select/index.js +1 -1
  150. package/dist/es/form/fields/slider/index.js +1 -1
  151. package/dist/es/form/fields/textarea/index.js +1 -1
  152. package/dist/es/form/fields/time-picker/index.js +2 -2
  153. package/dist/es/form/fields/time-range-picker/index.js +13 -18
  154. package/dist/es/form/fields/transfer/index.js +1 -1
  155. package/dist/es/form/fields/tree-select/index.js +1 -1
  156. package/dist/es/form/fields/upload/index.js +20 -17
  157. package/dist/es/form/form-actions.js +9 -9
  158. package/dist/es/form/form.js +1 -1
  159. package/dist/es/form/helpers/create-field.js +7 -6
  160. package/dist/es/form/helpers/index.js +1 -1
  161. package/dist/es/form/helpers/with-form-item.js +1 -1
  162. package/dist/es/form/hooks/use-form-item-props.js +1 -1
  163. package/dist/es/form/hooks/use-label-width.js +1 -1
  164. package/dist/es/form/index.js +1 -1
  165. package/dist/es/form/use-form.js +1 -1
  166. package/dist/es/form-drawer/index.js +1 -1
  167. package/dist/es/form-modal/index.js +1 -1
  168. package/dist/es/grid/context.js +1 -1
  169. package/dist/es/grid/grid-item.js +1 -1
  170. package/dist/es/grid/hooks/index.js +1 -1
  171. package/dist/es/grid/hooks/use-container-breakpoints.js +1 -1
  172. package/dist/es/grid/hooks/use-container-width.js +1 -1
  173. package/dist/es/grid/hooks/use-grid-collapsed.js +1 -1
  174. package/dist/es/grid/hooks/use-normalized-gap.js +1 -1
  175. package/dist/es/grid/hooks/use-responsive-breakpoint.js +1 -1
  176. package/dist/es/grid/hooks/use-responsive-value.js +1 -1
  177. package/dist/es/grid/index.js +1 -1
  178. package/dist/es/grid/styles.js +1 -1
  179. package/dist/es/group/index.js +1 -1
  180. package/dist/es/icon/index.js +1 -1
  181. package/dist/es/icon-button/index.js +1 -1
  182. package/dist/es/image/index.js +1 -1
  183. package/dist/es/index.js +98 -96
  184. package/dist/es/input/index.js +1 -1
  185. package/dist/es/input-number/index.js +1 -1
  186. package/dist/es/keyboard/index.js +1 -1
  187. package/dist/es/list/index.js +1 -1
  188. package/dist/es/loader/index.js +1 -1
  189. package/dist/es/logo-icon/index.js +1 -1
  190. package/dist/es/mentions/index.js +1 -1
  191. package/dist/es/menu/index.js +1 -1
  192. package/dist/es/modal/index.js +1 -1
  193. package/dist/es/modal/modal.js +1 -1
  194. package/dist/es/operation-button/index.js +1 -1
  195. package/dist/es/page/components/aside-panel.js +1 -1
  196. package/dist/es/page/components/index.js +1 -1
  197. package/dist/es/page/components/resize-handle.js +1 -1
  198. package/dist/es/page/components/scroll-content.js +1 -1
  199. package/dist/es/page/hooks/index.js +1 -1
  200. package/dist/es/page/hooks/use-page-key.js +1 -1
  201. package/dist/es/page/hooks/use-resize.js +1 -1
  202. package/dist/es/page/index.js +1 -1
  203. package/dist/es/page/styles.js +1 -1
  204. package/dist/es/page/viewport-context.js +1 -1
  205. package/dist/es/pagination/index.js +1 -1
  206. package/dist/es/permission-gate/index.js +1 -1
  207. package/dist/es/popconfirm/index.js +1 -1
  208. package/dist/es/popover/index.js +1 -1
  209. package/dist/es/pro-search/components/advanced-search-toggler.js +1 -1
  210. package/dist/es/pro-search/components/advanced-search.js +1 -1
  211. package/dist/es/pro-search/components/index.js +1 -1
  212. package/dist/es/pro-search/components/search-actions.js +1 -1
  213. package/dist/es/pro-search/index.js +1 -1
  214. package/dist/es/pro-search/styles.js +1 -1
  215. package/dist/es/pro-table/components/column-setting-item.js +1 -1
  216. package/dist/es/pro-table/components/column-settings-panel.js +1 -1
  217. package/dist/es/pro-table/components/column-settings.js +1 -1
  218. package/dist/es/pro-table/components/index.js +1 -1
  219. package/dist/es/pro-table/components/operation-button-group.js +1 -1
  220. package/dist/es/pro-table/components/ref.js +1 -1
  221. package/dist/es/pro-table/components/table-subscriber.js +1 -1
  222. package/dist/es/pro-table/components/table-summary.js +1 -1
  223. package/dist/es/pro-table/components/table-title.js +1 -1
  224. package/dist/es/pro-table/components/table.js +1 -1
  225. package/dist/es/pro-table/components/width-popover.js +1 -1
  226. package/dist/es/pro-table/context.js +1 -1
  227. package/dist/es/pro-table/event.js +1 -1
  228. package/dist/es/pro-table/hooks/index.js +1 -1
  229. package/dist/es/pro-table/hooks/use-column-settings-persistence.js +1 -1
  230. package/dist/es/pro-table/hooks/use-row-selection.js +1 -1
  231. package/dist/es/pro-table/hooks/use-table-columns.js +1 -1
  232. package/dist/es/pro-table/index.js +1 -1
  233. package/dist/es/pro-table/store.js +1 -1
  234. package/dist/es/progress/index.js +1 -1
  235. package/dist/es/qrcode/index.js +1 -1
  236. package/dist/es/radio/index.js +1 -1
  237. package/dist/es/rate/index.js +1 -1
  238. package/dist/es/result/index.js +1 -1
  239. package/dist/es/row/index.js +1 -1
  240. package/dist/es/scroll-area/index.js +1 -1
  241. package/dist/es/scroll-area/styles.js +1 -1
  242. package/dist/es/segmented/index.js +1 -1
  243. package/dist/es/select/hooks/index.js +1 -1
  244. package/dist/es/select/hooks/use-data-options-select.js +1 -1
  245. package/dist/es/select/hooks/use-dictionary-options-select.js +1 -1
  246. package/dist/es/select/index.js +1 -1
  247. package/dist/es/skeleton/index.js +1 -1
  248. package/dist/es/slider/index.js +1 -1
  249. package/dist/es/space/index.js +1 -1
  250. package/dist/es/space/space.js +1 -1
  251. package/dist/es/sparkles-text/index.js +1 -1
  252. package/dist/es/sparkles-text/sparkle.js +1 -1
  253. package/dist/es/spin/index.js +1 -1
  254. package/dist/es/split-text/index.js +65 -74
  255. package/dist/es/splitter/index.js +1 -1
  256. package/dist/es/stack/index.js +1 -1
  257. package/dist/es/statistic/index.js +1 -1
  258. package/dist/es/steps/index.js +1 -1
  259. package/dist/es/switch/index.js +1 -1
  260. package/dist/es/table/index.js +1 -1
  261. package/dist/es/table/use-pagination-props.js +1 -1
  262. package/dist/es/tabs/index.js +1 -1
  263. package/dist/es/tag/index.js +1 -1
  264. package/dist/es/time-picker/index.js +1 -1
  265. package/dist/es/timeline/index.js +1 -1
  266. package/dist/es/tooltip/index.js +1 -1
  267. package/dist/es/tour/index.js +1 -1
  268. package/dist/es/transfer/index.js +1 -1
  269. package/dist/es/tree/hooks/index.js +1 -1
  270. package/dist/es/tree/hooks/use-data-options-tree.js +1 -1
  271. package/dist/es/tree/index.js +1 -1
  272. package/dist/es/tree-select/hooks/index.js +1 -1
  273. package/dist/es/tree-select/hooks/use-data-options-tree-select.js +1 -1
  274. package/dist/es/tree-select/index.js +1 -1
  275. package/dist/es/typing-animation/index.js +1 -1
  276. package/dist/es/typography/index.js +1 -1
  277. package/dist/es/upload/index.js +4 -4
  278. package/dist/es/watermark/index.js +1 -1
  279. package/dist/types/_base/globals.d.ts +34 -0
  280. package/dist/types/_base/index.d.ts +1 -0
  281. package/dist/types/border-beam/index.d.ts +2 -0
  282. package/dist/types/crud/components/scene-form.d.ts +1 -1
  283. package/dist/types/crud/index.d.ts +1 -1
  284. package/dist/types/crud/props.d.ts +7 -1
  285. package/dist/types/dynamic-icon/index.d.ts +1 -1
  286. package/dist/types/file-upload/index.d.ts +10 -0
  287. package/dist/types/file-upload/props.d.ts +72 -0
  288. package/dist/types/form/fields/upload/props.d.ts +9 -2
  289. package/dist/types/form/helpers/create-field.d.ts +50 -28
  290. package/dist/types/form/helpers/index.d.ts +2 -2
  291. package/dist/types/form/index.d.ts +1 -1
  292. package/dist/types/index.d.ts +3 -1
  293. package/dist/types/split-text/index.d.ts +2 -2
  294. package/package.json +9 -9
@@ -1,61 +1,75 @@
1
- import { DeepKeys, DeepValue, FieldAsyncValidateOrFn, FieldValidateOrFn, FieldValidators } from '@tanstack/react-form';
1
+ import { DeepKeys, DeepValue, FieldAsyncValidateOrFn, FieldValidateOrFn, UseFieldOptionsBound } from '@tanstack/react-form';
2
2
  import { AnyObject, MaybeUndefined } from '@vef-framework-react/shared';
3
3
  import { ReactNode } from 'react';
4
4
  import { fieldComponents } from '../fields';
5
5
  type MaybeFieldSync<T, N extends DeepKeys<T>> = MaybeUndefined<FieldValidateOrFn<T, N, DeepValue<T, N>>>;
6
6
  type MaybeFieldAsync<T, N extends DeepKeys<T>> = MaybeUndefined<FieldAsyncValidateOrFn<T, N, DeepValue<T, N>>>;
7
7
  /**
8
- * Simplified `FieldValidators` with all `TOn*` slots widened to their upper bounds.
9
- * Accepts zod schemas, validator functions, or `undefined` for each lifecycle event.
8
+ * Bound `<form.AppField>` props for a known field name, with all `TOn*`
9
+ * validator slots widened to their upper bounds. The `name` field is omitted
10
+ * because `createField` takes it as the first argument.
10
11
  */
11
- type FieldValidatorsFor<T, N extends DeepKeys<T>> = FieldValidators<T, N, DeepValue<T, N>, MaybeFieldSync<T, N>, MaybeFieldSync<T, N>, MaybeFieldAsync<T, N>, MaybeFieldSync<T, N>, MaybeFieldAsync<T, N>, MaybeFieldSync<T, N>, MaybeFieldAsync<T, N>, MaybeFieldSync<T, N>, MaybeFieldAsync<T, N>>;
12
- declare const ErasedValidatorBrand: unique symbol;
12
+ type AppFieldOptionsFor<T, N extends DeepKeys<T>> = Omit<UseFieldOptionsBound<T, N, DeepValue<T, N>, MaybeFieldSync<T, N>, MaybeFieldSync<T, N>, MaybeFieldAsync<T, N>, MaybeFieldSync<T, N>, MaybeFieldAsync<T, N>, MaybeFieldSync<T, N>, MaybeFieldAsync<T, N>, MaybeFieldSync<T, N>, MaybeFieldAsync<T, N>>, "name">;
13
+ declare const ErasedFieldOptionsBrand: unique symbol;
13
14
  /**
14
- * Opaque wrapper for type-erased field validators. Retains `TFormData`
15
- * association but hides the specific field name. Cannot be constructed
16
- * directly — use `createField` to produce values of this type.
15
+ * Opaque wrapper for type-erased `<form.AppField>` options. Retains the
16
+ * `TFormData` association while hiding the specific field name. Cannot be
17
+ * constructed directly — use `createField` to produce values of this type.
17
18
  */
18
- export interface ErasedValidators<TFormData> {
19
- readonly [ErasedValidatorBrand]: TFormData;
19
+ export interface ErasedFieldOptions<TFormData> {
20
+ readonly [ErasedFieldOptionsBrand]: TFormData;
20
21
  }
21
22
  /**
22
- * Restore erased validators to their specific field type at the render site.
23
+ * Restore erased field options to their specific field type at the render
24
+ * site. Always returns an object (never undefined), so the result can be
25
+ * spread onto `<form.AppField>` without an extra null check.
23
26
  *
24
27
  * @example
25
28
  * ```tsx
26
29
  * items.map(item => (
27
30
  * <form.AppField
31
+ * key={item.name}
28
32
  * name={item.name}
29
- * validators={restoreValidators(item.validators)}
33
+ * {...restoreFieldOptions(item.fieldOptions)}
30
34
  * >
31
35
  * {item.render}
32
36
  * </form.AppField>
33
37
  * ));
34
38
  * ```
35
39
  */
36
- export declare function restoreValidators<T, N extends DeepKeys<T>>(validators: MaybeUndefined<ErasedValidators<T>>): MaybeUndefined<FieldValidatorsFor<T, N>>;
37
- interface FormFieldOptions<T, N extends DeepKeys<T>, TMeta extends AnyObject = AnyObject> {
38
- validators?: FieldValidatorsFor<T, N>;
40
+ export declare function restoreFieldOptions<T, N extends DeepKeys<T>>(options: MaybeUndefined<ErasedFieldOptions<T>>): AppFieldOptionsFor<T, N>;
41
+ /**
42
+ * Field definition input accepted by `createField`. Extends every bound
43
+ * `<form.AppField>` prop (validators, listeners, defaultValue, asyncDebounceMs,
44
+ * mode, defaultMeta, …) and adds two project-specific slots:
45
+ *
46
+ * - `render`: the render-prop body, scoped to the injected field components.
47
+ * - `renderMeta`: arbitrary metadata consumed by the surrounding map (e.g.
48
+ * layout span, visibility). Named `renderMeta` to avoid confusion with
49
+ * TanStack's `defaultMeta`, which seeds `FieldMeta` state.
50
+ */
51
+ type FormFieldOptions<T, N extends DeepKeys<T>, TMeta extends AnyObject = AnyObject> = AppFieldOptionsFor<T, N> & {
39
52
  render: (field: typeof fieldComponents) => ReactNode;
40
- meta?: TMeta;
41
- }
53
+ renderMeta?: TMeta;
54
+ };
42
55
  /**
43
- * Type-erased form field item for homogeneous array storage.
44
- * Type checking is performed at the `createField` call site; the erased
45
- * representation is safe to iterate, filter, and reorder without losing safety.
56
+ * Type-erased form field item for homogeneous array storage. Type checking
57
+ * happens at the `createField` call site; the erased representation is safe
58
+ * to iterate, filter, and reorder without losing safety.
46
59
  *
47
- * Validators use an opaque branded type (`ErasedValidators`) instead of `any`.
48
- * Use `restoreValidators(item.validators)` at the render site to pass them
49
- * to `<AppField>`.
60
+ * Field-name-dependent options live inside `fieldOptions` as an opaque
61
+ * branded value (`ErasedFieldOptions`). Use `restoreFieldOptions(item.fieldOptions)`
62
+ * at the render site to spread them onto `<form.AppField>`.
50
63
  *
51
64
  * `TMeta` allows attaching arbitrary typed metadata (e.g. layout, visibility)
52
- * to each field item. Defaults to `AnyObject` for zero-overhead when unused.
65
+ * to each field item via `renderMeta`. Defaults to `AnyObject` for zero
66
+ * overhead when unused.
53
67
  */
54
68
  export interface FormFieldItem<TFormData, TMeta extends AnyObject = AnyObject> {
55
69
  name: DeepKeys<TFormData>;
56
- validators?: ErasedValidators<TFormData>;
70
+ fieldOptions?: ErasedFieldOptions<TFormData>;
57
71
  render: (field: typeof fieldComponents) => ReactNode;
58
- meta?: TMeta;
72
+ renderMeta?: TMeta;
59
73
  }
60
74
  /**
61
75
  * Type-safe field definition factory scoped to a specific form data type.
@@ -68,15 +82,23 @@ export interface FormFieldItem<TFormData, TMeta extends AnyObject = AnyObject> {
68
82
  *
69
83
  * const items: FormFieldItem<StaffParams, FieldMeta>[] = [
70
84
  * createField("name", {
71
- * meta: { span: 12 },
72
85
  * validators: { onBlur: z.string("required").max(32) },
86
+ * listeners: {
87
+ * onChange: ({ value }) => track("staff_name_changed", { value }),
88
+ * },
89
+ * defaultValue: "",
90
+ * renderMeta: { span: 12 },
73
91
  * render: field => <field.Input required label="Name" />,
74
92
  * }),
75
93
  * ];
76
94
  *
77
95
  * // Render:
78
96
  * items.map(item => (
79
- * <AppField name={item.name} validators={restoreValidators(item.validators)}>
97
+ * <AppField
98
+ * key={item.name}
99
+ * name={item.name}
100
+ * {...restoreFieldOptions(item.fieldOptions)}
101
+ * >
80
102
  * {item.render}
81
103
  * </AppField>
82
104
  * ));
@@ -1,3 +1,3 @@
1
- export { createField, restoreValidators } from './create-field';
2
- export type { CreateFieldFn, ErasedValidators, FormFieldItem } from './create-field';
1
+ export { createField, restoreFieldOptions } from './create-field';
2
+ export type { CreateFieldFn, ErasedFieldOptions, FormFieldItem } from './create-field';
3
3
  export { withFormItem } from './with-form-item';
@@ -2,7 +2,7 @@ export type * from './components';
2
2
  export type * from './fields';
3
3
  export { createFormOptions, useFormContext, useFormStore, withFieldGroup, withForm } from './form';
4
4
  export { DefaultResetButton, DefaultSubmitButton, FormActions, type FormActionsProps } from './form-actions';
5
- export { restoreValidators } from './helpers';
5
+ export { restoreFieldOptions } from './helpers';
6
6
  export type { FormFieldItem } from './helpers';
7
7
  export type * from './types';
8
8
  export { useForm } from './use-form';
@@ -8,6 +8,7 @@ export { AutoComplete, type AutoCompleteOption, type AutoCompleteProps } from '.
8
8
  export { Avatar, type AvatarGroupProps, type AvatarProps } from './avatar';
9
9
  export { Badge, type BadgeProps, type BadgeRibbonProps } from './badge';
10
10
  export { Bool, type BoolProps, type BoolVariant } from './bool';
11
+ export { BorderBeam, type BorderBeamColor, type BorderBeamGradient, type BorderBeamProps } from './border-beam';
11
12
  export { Breadcrumb, type BreadcrumbItem, type BreadcrumbItemType, type BreadcrumbProps, type BreadcrumbSeparatorType } from './breadcrumb';
12
13
  export { Button, type ButtonProps } from './button';
13
14
  export { Calendar, type CalendarProps } from './calendar';
@@ -33,11 +34,12 @@ export { Drawer, type DrawerProps } from './drawer';
33
34
  export { Dropdown, type DropdownButtonProps, type DropdownButtonType, type DropdownMenuProps, type DropdownProps } from './dropdown';
34
35
  export { DynamicIcon, type DynamicIconName, type DynamicIconProps } from './dynamic-icon';
35
36
  export { Empty, type EmptyProps } from './empty';
37
+ export { FileUpload, type FileUploadProps, type UploadedFileMeta } from './file-upload';
36
38
  export { Flex, type FlexProps } from './flex';
37
39
  export { FlexCard, type FlexCardProps } from './flex-card';
38
40
  export { FlipText, type FlipTextProps } from './flip-text';
39
41
  export { FloatButton, type FloatButtonProps } from './float-button';
40
- export { createFormOptions, restoreValidators, useForm, useFormContext, useFormStore, withFieldGroup, withForm } from './form';
42
+ export { createFormOptions, restoreFieldOptions, useForm, useFormContext, useFormStore, withFieldGroup, withForm } from './form';
41
43
  export type * from './form';
42
44
  export { FormDrawer, type FormDrawerProps } from './form-drawer';
43
45
  export { FormModal, type FormModalProps } from './form-modal';
@@ -1,4 +1,4 @@
1
- import { ReactElement } from 'react';
1
+ import { FC } from 'react';
2
2
  import { SplitTextProps } from './props';
3
- export declare function SplitText(props: SplitTextProps): ReactElement;
3
+ export declare const SplitText: FC<SplitTextProps>;
4
4
  export { type SplitTextProps } from './props';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vef-framework-react/components",
3
3
  "type": "module",
4
- "version": "2.1.11",
4
+ "version": "2.2.0",
5
5
  "private": false,
6
6
  "description": "Components for VEF Framework",
7
7
  "author": {
@@ -50,31 +50,31 @@
50
50
  },
51
51
  "dependencies": {
52
52
  "@ant-design/cssinjs": "^2.1.2",
53
- "@ant-design/icons": "^6.1.1",
53
+ "@ant-design/icons": "^6.2.2",
54
54
  "@emotion/cache": "^11.14.0",
55
55
  "@emotion/react": "^11.14.0",
56
56
  "@emotion/serialize": "^1.3.3",
57
57
  "@gsap/react": "^2.1.2",
58
- "@lucide/icons": "^1.9.0",
58
+ "@lucide/icons": "^1.16.0",
59
59
  "@radix-ui/react-scroll-area": "^1.2.10",
60
60
  "@tanstack/react-form": "^1.29.1",
61
- "antd": "^6.3.6",
61
+ "antd": "^6.4.2",
62
62
  "antd-img-crop": "^4.30.0",
63
63
  "echarts": "^6.0.0",
64
64
  "echarts-for-react": "^3.0.6",
65
65
  "gsap": "^3.15.0",
66
- "lucide-react": "^1.9.0",
66
+ "lucide-react": "^1.16.0",
67
67
  "modern-normalize": "^3.0.1",
68
68
  "react-error-boundary": "^6.1.1",
69
69
  "react-syntax-highlighter": "^16.1.1",
70
70
  "tslib": "^2.8.1",
71
- "@vef-framework-react/core": "2.1.11",
72
- "@vef-framework-react/shared": "2.1.11",
73
- "@vef-framework-react/hooks": "2.1.11"
71
+ "@vef-framework-react/core": "2.2.0",
72
+ "@vef-framework-react/shared": "2.2.0",
73
+ "@vef-framework-react/hooks": "2.2.0"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/react-syntax-highlighter": "^15.5.13",
77
- "react": "^19.2.5"
77
+ "react": "^19.2.6"
78
78
  },
79
79
  "scripts": {
80
80
  "clean": "rimraf dist",