@robot-admin/naive-ui-components 0.13.6 → 0.13.7

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 (104) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +36 -1
  3. package/README_EN.md +36 -1
  4. package/dist/C_Form.base.css +174 -169
  5. package/dist/C_Form.cjs +1 -1
  6. package/dist/C_Form.css +174 -169
  7. package/dist/C_Form.d.cts +2 -2
  8. package/dist/C_Form.d.ts +2 -2
  9. package/dist/C_Form.js +1 -1
  10. package/dist/C_Form2.cjs +1 -1
  11. package/dist/C_Form2.js +1 -1
  12. package/dist/C_FormModal.css +15 -15
  13. package/dist/C_FormModal2.cjs +1 -1
  14. package/dist/C_FormModal2.js +1 -1
  15. package/dist/C_Table.base.css +174 -169
  16. package/dist/C_Table.css +174 -169
  17. package/dist/constants.d.cts +1 -1
  18. package/dist/constants.d.ts +1 -1
  19. package/dist/constants2.d.cts +4 -4
  20. package/dist/constants2.d.ts +4 -4
  21. package/dist/constants3.d.cts +1 -1
  22. package/dist/constants3.d.ts +1 -1
  23. package/dist/constants4.d.cts +4 -4
  24. package/dist/constants4.d.ts +4 -4
  25. package/dist/data.d.cts +10 -10
  26. package/dist/data.d.ts +10 -10
  27. package/dist/index.cjs +1 -1
  28. package/dist/index.d.cts +2 -2
  29. package/dist/index.d.ts +2 -2
  30. package/dist/index.js +1 -1
  31. package/dist/index.vue.d.cts +2 -2
  32. package/dist/index.vue.d.ts +2 -2
  33. package/dist/index10.vue.d.cts +1 -1
  34. package/dist/index10.vue.d.ts +1 -1
  35. package/dist/index11.vue.d.cts +1 -1
  36. package/dist/index11.vue.d.ts +2 -2
  37. package/dist/index12.vue.d.cts +2 -2
  38. package/dist/index12.vue.d.ts +1 -1
  39. package/dist/index13.vue.d.cts +1 -1
  40. package/dist/index13.vue.d.ts +5 -5
  41. package/dist/index14.vue.d.cts +5 -5
  42. package/dist/index14.vue.d.ts +3 -3
  43. package/dist/index15.vue.d.cts +3 -3
  44. package/dist/index15.vue.d.ts +1 -1
  45. package/dist/index16.vue.d.cts +1 -1
  46. package/dist/index17.vue.d.ts +1 -1
  47. package/dist/index18.vue.d.cts +1 -1
  48. package/dist/index18.vue.d.ts +3 -3
  49. package/dist/index19.vue.d.cts +3 -3
  50. package/dist/index2.vue.d.cts +1 -1
  51. package/dist/index2.vue.d.ts +1 -1
  52. package/dist/index20.vue.d.cts +1 -1
  53. package/dist/index20.vue.d.ts +1 -1
  54. package/dist/index21.vue.d.cts +3 -3
  55. package/dist/index21.vue.d.ts +3 -3
  56. package/dist/index22.vue.d.cts +2 -2
  57. package/dist/index22.vue.d.ts +2 -2
  58. package/dist/index23.vue.d.cts +1 -1
  59. package/dist/index23.vue.d.ts +1 -1
  60. package/dist/index25.vue.d.cts +3 -3
  61. package/dist/index25.vue.d.ts +3 -3
  62. package/dist/index27.vue.d.cts +3 -3
  63. package/dist/index27.vue.d.ts +3 -3
  64. package/dist/index28.vue.d.cts +4 -4
  65. package/dist/index28.vue.d.ts +4 -4
  66. package/dist/index3.vue.d.cts +2 -2
  67. package/dist/index3.vue.d.ts +2 -2
  68. package/dist/index6.vue.d.ts +2 -2
  69. package/dist/index7.vue.d.cts +2 -2
  70. package/dist/index9.vue.d.ts +1 -1
  71. package/dist/presets.d.cts +1 -1
  72. package/dist/presets.d.ts +1 -1
  73. package/dist/style.css +189 -184
  74. package/dist/useCalendarEvents.d.cts +1 -1
  75. package/dist/useCalendarEvents.d.ts +1 -1
  76. package/dist/useCollapsePanel.d.cts +2 -2
  77. package/dist/useCollapsePanel.d.ts +2 -2
  78. package/dist/useCropperCore.d.cts +6 -6
  79. package/dist/useCropperCore.d.ts +6 -6
  80. package/dist/useDraggableLayout.d.cts +5 -5
  81. package/dist/useDraggableLayout.d.ts +5 -5
  82. package/dist/useDynamicFormState.d.cts +27 -7
  83. package/dist/useDynamicFormState.d.ts +27 -7
  84. package/dist/useEdgeInteraction.d.cts +2 -2
  85. package/dist/useEdgeInteraction.d.ts +2 -2
  86. package/dist/useInfiniteScroll.d.cts +2 -2
  87. package/dist/useInfiniteScroll.d.ts +2 -2
  88. package/dist/useQRCode.d.cts +2 -2
  89. package/dist/useQRCode.d.ts +2 -2
  90. package/dist/useSearchState.d.cts +19 -19
  91. package/dist/useSearchState.d.ts +19 -19
  92. package/dist/useSignatureHistory.d.cts +2 -2
  93. package/dist/useSignatureHistory.d.ts +2 -2
  94. package/dist/useSplitResize.d.cts +4 -4
  95. package/dist/useSplitResize.d.ts +4 -4
  96. package/dist/useTableQuery.d.cts +1 -1
  97. package/dist/useTableQuery.d.ts +1 -1
  98. package/dist/useTreeOperations.d.cts +9 -9
  99. package/dist/useTreeOperations.d.ts +9 -9
  100. package/dist/useWorkflowValidation.d.cts +2 -2
  101. package/dist/useWorkflowValidation.d.ts +2 -2
  102. package/dist/verification.d.cts +2 -2
  103. package/dist/verification.d.ts +2 -2
  104. package/package.json +2 -1
@@ -66,8 +66,8 @@ declare const __VLS_export: vue.DefineComponent<CalendarProps, CalendarExpose, {
66
66
  }) => any) | undefined;
67
67
  "onEvent-dropped"?: ((event: Partial<CalendarEvent>) => any) | undefined;
68
68
  }>, {
69
- editable: boolean;
70
69
  initialView: CalendarViewType;
70
+ editable: boolean;
71
71
  events: CalendarEvent[];
72
72
  showAddDialog: boolean;
73
73
  showEditDialog: boolean;
@@ -66,8 +66,8 @@ declare const __VLS_export: vue.DefineComponent<CalendarProps, CalendarExpose, {
66
66
  }) => any) | undefined;
67
67
  "onEvent-dropped"?: ((event: Partial<CalendarEvent>) => any) | undefined;
68
68
  }>, {
69
- editable: boolean;
70
69
  initialView: CalendarViewType;
70
+ editable: boolean;
71
71
  events: CalendarEvent[];
72
72
  showAddDialog: boolean;
73
73
  showEditDialog: boolean;
@@ -71,14 +71,14 @@ declare var __VLS_7: `header-${string}`, __VLS_8: {
71
71
  type __VLS_Slots = {} & { [K in NonNullable<typeof __VLS_7>]?: (props: typeof __VLS_8) => any } & { [K in NonNullable<typeof __VLS_16>]?: (props: typeof __VLS_17) => any } & { [K in NonNullable<typeof __VLS_31>]?: (props: typeof __VLS_32) => any };
72
72
  declare const __VLS_base: vue.DefineComponent<Props, CollapsePanelExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
73
73
  change: (activeKeys: string[]) => any;
74
- "update:activeKeys": (keys: string[]) => any;
75
74
  expand: (key: string) => any;
76
75
  collapse: (key: string) => any;
76
+ "update:activeKeys": (keys: string[]) => any;
77
77
  }, string, vue.PublicProps, Readonly<Props> & Readonly<{
78
78
  onChange?: ((activeKeys: string[]) => any) | undefined;
79
- "onUpdate:activeKeys"?: ((keys: string[]) => any) | undefined;
80
79
  onExpand?: ((key: string) => any) | undefined;
81
80
  onCollapse?: ((key: string) => any) | undefined;
81
+ "onUpdate:activeKeys"?: ((keys: string[]) => any) | undefined;
82
82
  }>, {
83
83
  bordered: boolean;
84
84
  activeKeys: string[];
@@ -71,14 +71,14 @@ declare var __VLS_7: `header-${string}`, __VLS_8: {
71
71
  type __VLS_Slots = {} & { [K in NonNullable<typeof __VLS_7>]?: (props: typeof __VLS_8) => any } & { [K in NonNullable<typeof __VLS_16>]?: (props: typeof __VLS_17) => any } & { [K in NonNullable<typeof __VLS_31>]?: (props: typeof __VLS_32) => any };
72
72
  declare const __VLS_base: vue.DefineComponent<Props, CollapsePanelExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
73
73
  change: (activeKeys: string[]) => any;
74
- "update:activeKeys": (keys: string[]) => any;
75
74
  expand: (key: string) => any;
76
75
  collapse: (key: string) => any;
76
+ "update:activeKeys": (keys: string[]) => any;
77
77
  }, string, vue.PublicProps, Readonly<Props> & Readonly<{
78
78
  onChange?: ((activeKeys: string[]) => any) | undefined;
79
- "onUpdate:activeKeys"?: ((keys: string[]) => any) | undefined;
80
79
  onExpand?: ((key: string) => any) | undefined;
81
80
  onCollapse?: ((key: string) => any) | undefined;
81
+ "onUpdate:activeKeys"?: ((keys: string[]) => any) | undefined;
82
82
  }>, {
83
83
  bordered: boolean;
84
84
  activeKeys: string[];
@@ -53,27 +53,27 @@ interface ImageCropperEmits {
53
53
  declare const __VLS_export: vue.DefineComponent<ImageCropperProps, ImageCropperExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
54
54
  error: (error: Error) => any;
55
55
  cancel: () => any;
56
- confirm: (result: CropResult) => any;
57
56
  ready: () => any;
57
+ confirm: (result: CropResult) => any;
58
58
  crop: (result: CropResult) => any;
59
59
  }, string, vue.PublicProps, Readonly<ImageCropperProps> & Readonly<{
60
60
  onError?: ((error: Error) => any) | undefined;
61
61
  onCancel?: (() => any) | undefined;
62
- onConfirm?: ((result: CropResult) => any) | undefined;
63
62
  onReady?: (() => any) | undefined;
63
+ onConfirm?: ((result: CropResult) => any) | undefined;
64
64
  onCrop?: ((result: CropResult) => any) | undefined;
65
65
  }>, {
66
- height: string | number;
67
66
  disabled: boolean;
68
- modalTitle: string;
67
+ height: string | number;
68
+ showPreview: boolean;
69
69
  aspectRatio: number;
70
+ showToolbar: boolean;
70
71
  src: string;
72
+ modalTitle: string;
71
73
  outputFormat: CropOutputFormat;
72
74
  outputQuality: number;
73
75
  maxOutputWidth: number;
74
76
  maxOutputHeight: number;
75
- showPreview: boolean;
76
- showToolbar: boolean;
77
77
  circular: boolean;
78
78
  modal: boolean;
79
79
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -53,27 +53,27 @@ interface ImageCropperEmits {
53
53
  declare const __VLS_export: vue.DefineComponent<ImageCropperProps, ImageCropperExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
54
54
  error: (error: Error) => any;
55
55
  cancel: () => any;
56
- confirm: (result: CropResult) => any;
57
56
  ready: () => any;
57
+ confirm: (result: CropResult) => any;
58
58
  crop: (result: CropResult) => any;
59
59
  }, string, vue.PublicProps, Readonly<ImageCropperProps> & Readonly<{
60
60
  onError?: ((error: Error) => any) | undefined;
61
61
  onCancel?: (() => any) | undefined;
62
- onConfirm?: ((result: CropResult) => any) | undefined;
63
62
  onReady?: (() => any) | undefined;
63
+ onConfirm?: ((result: CropResult) => any) | undefined;
64
64
  onCrop?: ((result: CropResult) => any) | undefined;
65
65
  }>, {
66
- height: string | number;
67
66
  disabled: boolean;
68
- modalTitle: string;
67
+ height: string | number;
68
+ showPreview: boolean;
69
69
  aspectRatio: number;
70
+ showToolbar: boolean;
70
71
  src: string;
72
+ modalTitle: string;
71
73
  outputFormat: CropOutputFormat;
72
74
  outputQuality: number;
73
75
  maxOutputWidth: number;
74
76
  maxOutputHeight: number;
75
- showPreview: boolean;
76
- showToolbar: boolean;
77
77
  circular: boolean;
78
78
  modal: boolean;
79
79
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -118,12 +118,13 @@ declare const __VLS_base: vue.DefineComponent<DraggableProps, {
118
118
  }>, {
119
119
  sort: boolean;
120
120
  modelValue: DraggableItem[];
121
- justifyContent: JustifyContent;
122
121
  disabled: boolean;
123
- layout: LayoutMode;
124
122
  direction: "vertical" | "horizontal";
125
- group: string | GroupOptions;
123
+ emptyText: string;
124
+ itemClass: string;
126
125
  animation: number;
126
+ layout: LayoutMode;
127
+ group: string | GroupOptions;
127
128
  delay: number;
128
129
  handle: string;
129
130
  showHandle: boolean;
@@ -132,15 +133,14 @@ declare const __VLS_base: vue.DefineComponent<DraggableProps, {
132
133
  dragClass: string;
133
134
  wrapperClass: string;
134
135
  listClass: string;
135
- itemClass: string;
136
136
  showEmptyState: boolean;
137
- emptyText: string;
138
137
  swapThreshold: number;
139
138
  invertSwap: boolean;
140
139
  gridColumns: number;
141
140
  gridRows: number;
142
141
  gap: string | number;
143
142
  flexWrap: boolean;
143
+ justifyContent: JustifyContent;
144
144
  alignItems: AlignItems;
145
145
  customStyles: Record<string, string | number>;
146
146
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -118,12 +118,13 @@ declare const __VLS_base: vue.DefineComponent<DraggableProps, {
118
118
  }>, {
119
119
  sort: boolean;
120
120
  modelValue: DraggableItem[];
121
- justifyContent: JustifyContent;
122
121
  disabled: boolean;
123
- layout: LayoutMode;
124
122
  direction: "vertical" | "horizontal";
125
- group: string | GroupOptions;
123
+ emptyText: string;
124
+ itemClass: string;
126
125
  animation: number;
126
+ layout: LayoutMode;
127
+ group: string | GroupOptions;
127
128
  delay: number;
128
129
  handle: string;
129
130
  showHandle: boolean;
@@ -132,15 +133,14 @@ declare const __VLS_base: vue.DefineComponent<DraggableProps, {
132
133
  dragClass: string;
133
134
  wrapperClass: string;
134
135
  listClass: string;
135
- itemClass: string;
136
136
  showEmptyState: boolean;
137
- emptyText: string;
138
137
  swapThreshold: number;
139
138
  invertSwap: boolean;
140
139
  gridColumns: number;
141
140
  gridRows: number;
142
141
  gap: string | number;
143
142
  flexWrap: boolean;
143
+ justifyContent: JustifyContent;
144
144
  alignItems: AlignItems;
145
145
  customStyles: Record<string, string | number>;
146
146
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -3,8 +3,18 @@ import * as vue from "vue";
3
3
  import { CSSProperties, Component, ComputedRef, DeepReadonly, InjectionKey, MaybeRefOrGetter, Ref, Slots, VNode } from "vue";
4
4
  import { FormInst, FormItemInst, FormItemRule, FormRules } from "naive-ui";
5
5
  import * as naive_ui_es_form_src_interface0 from "naive-ui/es/form/src/interface";
6
+ import { NAIVE_COMBOS, NaiveRule, PRESET_RULES, RuleSpec, RuleSpec as RuleSpec$1, SPEC_RULES } from "@robot-admin/form-validate";
6
7
  import * as _vue_shared0 from "@vue/shared";
7
8
 
9
+ //#region src/components/C_Form/utils/formValidation.d.ts
10
+ /** 原生规则、验证库规则和框架无关规则均可直接作为字段配置。 */
11
+ type FormValidationRule = FormItemRule | NaiveRule | RuleSpec;
12
+ type NativePresetRule = FormItemRule & Pick<NaiveRule, 'trigger' | 'validator' | 'required' | 'message'>;
13
+ type NativeRuleFactories<T> = { readonly [Key in keyof T]: T[Key] extends ((...args: infer Args) => infer Result) ? (...args: Args) => Result extends readonly NaiveRule[] ? NativePresetRule[] : Result extends NaiveRule ? NativePresetRule : Result : T[Key] };
14
+ /** 运行时保持验证库的工厂对象,只有公开类型在组件包内统一适配。 */
15
+ declare const PRESET_RULES$1: NativeRuleFactories<typeof PRESET_RULES>;
16
+ declare const NAIVE_COMBOS$1: NativeRuleFactories<typeof NAIVE_COMBOS>;
17
+ //#endregion
8
18
  //#region src/components/C_Form/types.d.ts
9
19
  type MaybePromise<T> = T | Promise<T>;
10
20
  type FormRecord = Record<string, unknown>;
@@ -52,6 +62,10 @@ interface FormErrorContext {
52
62
  source: 'initialize' | 'async-options' | 'callback' | 'render' | 'submit';
53
63
  field?: string;
54
64
  }
65
+ /** 组件卸载时取消当前提交,业务请求可直接使用 signal。 */
66
+ interface FormSubmitContext {
67
+ signal: AbortSignal;
68
+ }
55
69
  /**
56
70
  * 标签页配置接口
57
71
  * @description 用于标签页布局的单个标签页配置
@@ -106,7 +120,7 @@ interface DynamicFieldConfig {
106
120
  layout?: {
107
121
  span?: number;
108
122
  };
109
- rules?: FormItemRule[];
123
+ rules?: readonly FormValidationRule[];
110
124
  }
111
125
  /**
112
126
  * 表单项布局配置
@@ -251,7 +265,7 @@ interface FormOption<T extends object = FormRecord> {
251
265
  label?: string;
252
266
  value?: unknown;
253
267
  placeholder?: string;
254
- rules?: FormItemRule[];
268
+ rules?: readonly FormValidationRule[];
255
269
  attrs?: Record<string, unknown>;
256
270
  children?: OptionItem[];
257
271
  show?: boolean;
@@ -269,7 +283,7 @@ interface FormOption<T extends object = FormRecord> {
269
283
  /** 异步数据源:select / cascader / checkbox / radio 的远程选项加载 */
270
284
  asyncOptions?: (formModel: FormModel<T>, context?: AsyncOptionsContext) => Promise<readonly OptionItem[]>;
271
285
  /** 联动校验规则:根据表单数据动态返回校验规则 */
272
- rulesWhen?: (formModel: FormModel<T>) => FormItemRule[];
286
+ rulesWhen?: (formModel: FormModel<T>) => readonly FormValidationRule[];
273
287
  /** 跨字段校验:需要引用多个字段值的验证函数,返回错误消息或 null */
274
288
  crossFieldValidator?: (formModel: FormModel<T>) => MaybePromise<string | null>;
275
289
  }
@@ -361,6 +375,8 @@ interface FormSlots<T extends object = FormRecord> {
361
375
  /** Field-specific named slots are intentionally open-ended. */
362
376
  [slotName: string]: ((props: any) => unknown) | undefined;
363
377
  action?: (props: FormActionSlotProps<T>) => unknown;
378
+ /** 增加业务按钮,保留组件默认的提交、重置和加载管理。 */
379
+ 'action-extra'?: (props: FormActionSlotProps<T>) => unknown;
364
380
  'tab-actions'?: (props: FormTabActionsSlotProps) => unknown;
365
381
  'step-actions'?: (props: FormStepActionsSlotProps) => unknown;
366
382
  }
@@ -436,7 +452,7 @@ interface LayoutCallbacks<T extends object = FormRecord> {
436
452
  onGroupToggle?: (groupKey: string, collapsed: boolean) => void;
437
453
  onGroupReset?: (groupKey: string) => void;
438
454
  onFieldsChange?: (fields: FormOption<T>[]) => void;
439
- onSubmit?: (payload: SubmitEventPayload<T>) => MaybePromise<void>;
455
+ onSubmit?: (payload: SubmitEventPayload<T>, context?: FormSubmitContext) => MaybePromise<void>;
440
456
  onError?: (error: unknown, context: FormErrorContext) => void;
441
457
  }
442
458
  /**
@@ -469,6 +485,10 @@ interface FormConfig<T extends object = FormRecord> extends LayoutCallbacks<T> {
469
485
  submitText?: string;
470
486
  /** 默认重置按钮文案 */
471
487
  resetText?: string;
488
+ /** 提交完成后的提示;默认不显示,由业务明确配置。 */
489
+ submitSuccessText?: string;
490
+ /** 重置完成后的提示;默认不显示。 */
491
+ resetSuccessText?: string;
472
492
  /** 表单模式:create = 新建(默认),edit = 编辑(配合 initialValues 实现回填 + 脏检查) */
473
493
  mode?: FormMode;
474
494
  /** 编辑模式初始值:设置后自动作为脏检查基准 */
@@ -585,8 +605,8 @@ declare const __VLS_export: <T extends object = FormRecord>(__VLS_props: NonNull
585
605
  config?: FormConfig<T>; /** 当前表单实例的自定义渲染器,不污染全局注册表 */
586
606
  renderers?: Record<string, FormRenderer>;
587
607
  } & {
588
- "onUpdate:modelValue"?: ((model: T) => any) | undefined;
589
608
  onSubmit?: ((payload: SubmitEventPayload<T>) => any) | undefined;
609
+ "onUpdate:modelValue"?: ((model: T) => any) | undefined;
590
610
  "onValidate-success"?: ((model: T) => any) | undefined;
591
611
  "onValidate-error"?: ((errors: unknown) => any) | undefined;
592
612
  }> & (typeof globalThis extends {
@@ -631,7 +651,7 @@ declare const __VLS_export: <T extends object = FormRecord>(__VLS_props: NonNull
631
651
  }>) => void;
632
652
  attrs: any;
633
653
  slots: FormSlots<T>;
634
- emit: ((evt: "update:modelValue", model: T) => void) & ((evt: "submit", payload: SubmitEventPayload<T>) => void) & ((evt: "validate-success", model: T) => void) & ((evt: "validate-error", errors: unknown) => void);
654
+ emit: ((evt: "submit", payload: SubmitEventPayload<T>) => void) & ((evt: "update:modelValue", model: T) => void) & ((evt: "validate-success", model: T) => void) & ((evt: "validate-error", errors: unknown) => void);
635
655
  }>) => vue.VNode & {
636
656
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
637
657
  };
@@ -761,4 +781,4 @@ type DynamicFormStateType = DynamicFormController;
761
781
  */
762
782
  declare const DYNAMIC_FORM_STATE_KEY: unique symbol;
763
783
  //#endregion
764
- export { LabelPlacement as $, useFormGlobalConfig as A, FieldPathValue as B, FormConfig as C, mergeFormConfig as D, ResolvedFormConfig as E, DynamicFieldConfig as F, FormModel as G, FormErrorContext as H, DynamicFormConfig as I, FormSlots as J, FormOption as K, DynamicFormController as L, CardLayoutConfig as M, ComponentType as N, resolveFormConfig as O, CustomLayoutConfig as P, InlineLayoutConfig as Q, DynamicFormState as R, FORM_GLOBAL_CONFIG_KEY as S, LayoutCallbacks as T, FormInstance as U, FormActionSlotProps as V, FormMode as W, FormTabActionsSlotProps as X, FormStepActionsSlotProps as Y, GridLayoutConfig as Z, UseFormRendererOptions as _, UseFormDirtyReturn as a, SubmitEventPayload as at, useFormRenderer as b, UseCFormOptions as c, useCForm as d, LayoutConfig as et, _default as f, RendererProps as g, FormRendererContext as h, useDynamicFormState as i, StepsLayoutConfig as it, AsyncOptionsContext as j, shouldShowActions as k, defineFormConfig as l, FormRenderer as m, DynamicFormStateType as n, MaybePromise as nt, useFormDirty as o, TabsLayoutConfig as ot, ComponentMap as p, FormRecord as q, FIELD_TYPE_OPTIONS as r, OptionItem as rt, useFormState as s, DYNAMIC_FORM_STATE_KEY as t, LayoutType as tt, defineFormOptions as u, registerRenderer as v, LAYOUTS_WITH_OWN_CONTROLS as w, FORM_DEFAULTS as x, unregisterRenderer as y, FieldPath as z };
784
+ export { InlineLayoutConfig as $, useFormGlobalConfig as A, FieldPathValue as B, FormConfig as C, mergeFormConfig as D, ResolvedFormConfig as E, DynamicFieldConfig as F, FormModel as G, FormErrorContext as H, DynamicFormConfig as I, FormSlots as J, FormOption as K, DynamicFormController as L, CardLayoutConfig as M, ComponentType as N, resolveFormConfig as O, CustomLayoutConfig as P, GridLayoutConfig as Q, DynamicFormState as R, FORM_GLOBAL_CONFIG_KEY as S, LayoutCallbacks as T, FormInstance as U, FormActionSlotProps as V, FormMode as W, FormSubmitContext as X, FormStepActionsSlotProps as Y, FormTabActionsSlotProps as Z, UseFormRendererOptions as _, UseFormDirtyReturn as a, StepsLayoutConfig as at, useFormRenderer as b, UseCFormOptions as c, FormValidationRule as ct, useCForm as d, RuleSpec$1 as dt, LabelPlacement as et, _default as f, SPEC_RULES as ft, RendererProps as g, FormRendererContext as h, useDynamicFormState as i, OptionItem as it, AsyncOptionsContext as j, shouldShowActions as k, defineFormConfig as l, NAIVE_COMBOS$1 as lt, FormRenderer as m, DynamicFormStateType as n, LayoutType as nt, useFormDirty as o, SubmitEventPayload as ot, ComponentMap as p, FormRecord as q, FIELD_TYPE_OPTIONS as r, MaybePromise as rt, useFormState as s, TabsLayoutConfig as st, DYNAMIC_FORM_STATE_KEY as t, LayoutConfig as tt, defineFormOptions as u, PRESET_RULES$1 as ut, registerRenderer as v, LAYOUTS_WITH_OWN_CONTROLS as w, FORM_DEFAULTS as x, unregisterRenderer as y, FieldPath as z };
@@ -2,9 +2,19 @@ import { i as ComponentLocale, r as ComponentFeedback } from "./config.js";
2
2
  import * as vue from "vue";
3
3
  import { CSSProperties, Component, ComputedRef, DeepReadonly, InjectionKey, MaybeRefOrGetter, Ref, Slots, VNode } from "vue";
4
4
  import { FormInst, FormItemInst, FormItemRule, FormRules } from "naive-ui";
5
+ import { NAIVE_COMBOS, NaiveRule, PRESET_RULES, RuleSpec, RuleSpec as RuleSpec$1, SPEC_RULES } from "@robot-admin/form-validate";
5
6
  import * as naive_ui_es_form_src_interface0 from "naive-ui/es/form/src/interface";
6
7
  import * as _vue_shared0 from "@vue/shared";
7
8
 
9
+ //#region src/components/C_Form/utils/formValidation.d.ts
10
+ /** 原生规则、验证库规则和框架无关规则均可直接作为字段配置。 */
11
+ type FormValidationRule = FormItemRule | NaiveRule | RuleSpec;
12
+ type NativePresetRule = FormItemRule & Pick<NaiveRule, 'trigger' | 'validator' | 'required' | 'message'>;
13
+ type NativeRuleFactories<T> = { readonly [Key in keyof T]: T[Key] extends ((...args: infer Args) => infer Result) ? (...args: Args) => Result extends readonly NaiveRule[] ? NativePresetRule[] : Result extends NaiveRule ? NativePresetRule : Result : T[Key] };
14
+ /** 运行时保持验证库的工厂对象,只有公开类型在组件包内统一适配。 */
15
+ declare const PRESET_RULES$1: NativeRuleFactories<typeof PRESET_RULES>;
16
+ declare const NAIVE_COMBOS$1: NativeRuleFactories<typeof NAIVE_COMBOS>;
17
+ //#endregion
8
18
  //#region src/components/C_Form/types.d.ts
9
19
  type MaybePromise<T> = T | Promise<T>;
10
20
  type FormRecord = Record<string, unknown>;
@@ -52,6 +62,10 @@ interface FormErrorContext {
52
62
  source: 'initialize' | 'async-options' | 'callback' | 'render' | 'submit';
53
63
  field?: string;
54
64
  }
65
+ /** 组件卸载时取消当前提交,业务请求可直接使用 signal。 */
66
+ interface FormSubmitContext {
67
+ signal: AbortSignal;
68
+ }
55
69
  /**
56
70
  * 标签页配置接口
57
71
  * @description 用于标签页布局的单个标签页配置
@@ -106,7 +120,7 @@ interface DynamicFieldConfig {
106
120
  layout?: {
107
121
  span?: number;
108
122
  };
109
- rules?: FormItemRule[];
123
+ rules?: readonly FormValidationRule[];
110
124
  }
111
125
  /**
112
126
  * 表单项布局配置
@@ -251,7 +265,7 @@ interface FormOption<T extends object = FormRecord> {
251
265
  label?: string;
252
266
  value?: unknown;
253
267
  placeholder?: string;
254
- rules?: FormItemRule[];
268
+ rules?: readonly FormValidationRule[];
255
269
  attrs?: Record<string, unknown>;
256
270
  children?: OptionItem[];
257
271
  show?: boolean;
@@ -269,7 +283,7 @@ interface FormOption<T extends object = FormRecord> {
269
283
  /** 异步数据源:select / cascader / checkbox / radio 的远程选项加载 */
270
284
  asyncOptions?: (formModel: FormModel<T>, context?: AsyncOptionsContext) => Promise<readonly OptionItem[]>;
271
285
  /** 联动校验规则:根据表单数据动态返回校验规则 */
272
- rulesWhen?: (formModel: FormModel<T>) => FormItemRule[];
286
+ rulesWhen?: (formModel: FormModel<T>) => readonly FormValidationRule[];
273
287
  /** 跨字段校验:需要引用多个字段值的验证函数,返回错误消息或 null */
274
288
  crossFieldValidator?: (formModel: FormModel<T>) => MaybePromise<string | null>;
275
289
  }
@@ -361,6 +375,8 @@ interface FormSlots<T extends object = FormRecord> {
361
375
  /** Field-specific named slots are intentionally open-ended. */
362
376
  [slotName: string]: ((props: any) => unknown) | undefined;
363
377
  action?: (props: FormActionSlotProps<T>) => unknown;
378
+ /** 增加业务按钮,保留组件默认的提交、重置和加载管理。 */
379
+ 'action-extra'?: (props: FormActionSlotProps<T>) => unknown;
364
380
  'tab-actions'?: (props: FormTabActionsSlotProps) => unknown;
365
381
  'step-actions'?: (props: FormStepActionsSlotProps) => unknown;
366
382
  }
@@ -436,7 +452,7 @@ interface LayoutCallbacks<T extends object = FormRecord> {
436
452
  onGroupToggle?: (groupKey: string, collapsed: boolean) => void;
437
453
  onGroupReset?: (groupKey: string) => void;
438
454
  onFieldsChange?: (fields: FormOption<T>[]) => void;
439
- onSubmit?: (payload: SubmitEventPayload<T>) => MaybePromise<void>;
455
+ onSubmit?: (payload: SubmitEventPayload<T>, context?: FormSubmitContext) => MaybePromise<void>;
440
456
  onError?: (error: unknown, context: FormErrorContext) => void;
441
457
  }
442
458
  /**
@@ -469,6 +485,10 @@ interface FormConfig<T extends object = FormRecord> extends LayoutCallbacks<T> {
469
485
  submitText?: string;
470
486
  /** 默认重置按钮文案 */
471
487
  resetText?: string;
488
+ /** 提交完成后的提示;默认不显示,由业务明确配置。 */
489
+ submitSuccessText?: string;
490
+ /** 重置完成后的提示;默认不显示。 */
491
+ resetSuccessText?: string;
472
492
  /** 表单模式:create = 新建(默认),edit = 编辑(配合 initialValues 实现回填 + 脏检查) */
473
493
  mode?: FormMode;
474
494
  /** 编辑模式初始值:设置后自动作为脏检查基准 */
@@ -585,8 +605,8 @@ declare const __VLS_export: <T extends object = FormRecord>(__VLS_props: NonNull
585
605
  config?: FormConfig<T>; /** 当前表单实例的自定义渲染器,不污染全局注册表 */
586
606
  renderers?: Record<string, FormRenderer>;
587
607
  } & {
588
- "onUpdate:modelValue"?: ((model: T) => any) | undefined;
589
608
  onSubmit?: ((payload: SubmitEventPayload<T>) => any) | undefined;
609
+ "onUpdate:modelValue"?: ((model: T) => any) | undefined;
590
610
  "onValidate-success"?: ((model: T) => any) | undefined;
591
611
  "onValidate-error"?: ((errors: unknown) => any) | undefined;
592
612
  }> & (typeof globalThis extends {
@@ -631,7 +651,7 @@ declare const __VLS_export: <T extends object = FormRecord>(__VLS_props: NonNull
631
651
  }>) => void;
632
652
  attrs: any;
633
653
  slots: FormSlots<T>;
634
- emit: ((evt: "update:modelValue", model: T) => void) & ((evt: "submit", payload: SubmitEventPayload<T>) => void) & ((evt: "validate-success", model: T) => void) & ((evt: "validate-error", errors: unknown) => void);
654
+ emit: ((evt: "submit", payload: SubmitEventPayload<T>) => void) & ((evt: "update:modelValue", model: T) => void) & ((evt: "validate-success", model: T) => void) & ((evt: "validate-error", errors: unknown) => void);
635
655
  }>) => vue.VNode & {
636
656
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
637
657
  };
@@ -761,4 +781,4 @@ type DynamicFormStateType = DynamicFormController;
761
781
  */
762
782
  declare const DYNAMIC_FORM_STATE_KEY: unique symbol;
763
783
  //#endregion
764
- export { LabelPlacement as $, useFormGlobalConfig as A, FieldPathValue as B, FormConfig as C, mergeFormConfig as D, ResolvedFormConfig as E, DynamicFieldConfig as F, FormModel as G, FormErrorContext as H, DynamicFormConfig as I, FormSlots as J, FormOption as K, DynamicFormController as L, CardLayoutConfig as M, ComponentType as N, resolveFormConfig as O, CustomLayoutConfig as P, InlineLayoutConfig as Q, DynamicFormState as R, FORM_GLOBAL_CONFIG_KEY as S, LayoutCallbacks as T, FormInstance as U, FormActionSlotProps as V, FormMode as W, FormTabActionsSlotProps as X, FormStepActionsSlotProps as Y, GridLayoutConfig as Z, UseFormRendererOptions as _, UseFormDirtyReturn as a, SubmitEventPayload as at, useFormRenderer as b, UseCFormOptions as c, useCForm as d, LayoutConfig as et, _default as f, RendererProps as g, FormRendererContext as h, useDynamicFormState as i, StepsLayoutConfig as it, AsyncOptionsContext as j, shouldShowActions as k, defineFormConfig as l, FormRenderer as m, DynamicFormStateType as n, MaybePromise as nt, useFormDirty as o, TabsLayoutConfig as ot, ComponentMap as p, FormRecord as q, FIELD_TYPE_OPTIONS as r, OptionItem as rt, useFormState as s, DYNAMIC_FORM_STATE_KEY as t, LayoutType as tt, defineFormOptions as u, registerRenderer as v, LAYOUTS_WITH_OWN_CONTROLS as w, FORM_DEFAULTS as x, unregisterRenderer as y, FieldPath as z };
784
+ export { InlineLayoutConfig as $, useFormGlobalConfig as A, FieldPathValue as B, FormConfig as C, mergeFormConfig as D, ResolvedFormConfig as E, DynamicFieldConfig as F, FormModel as G, FormErrorContext as H, DynamicFormConfig as I, FormSlots as J, FormOption as K, DynamicFormController as L, CardLayoutConfig as M, ComponentType as N, resolveFormConfig as O, CustomLayoutConfig as P, GridLayoutConfig as Q, DynamicFormState as R, FORM_GLOBAL_CONFIG_KEY as S, LayoutCallbacks as T, FormInstance as U, FormActionSlotProps as V, FormMode as W, FormSubmitContext as X, FormStepActionsSlotProps as Y, FormTabActionsSlotProps as Z, UseFormRendererOptions as _, UseFormDirtyReturn as a, StepsLayoutConfig as at, useFormRenderer as b, UseCFormOptions as c, FormValidationRule as ct, useCForm as d, RuleSpec$1 as dt, LabelPlacement as et, _default as f, SPEC_RULES as ft, RendererProps as g, FormRendererContext as h, useDynamicFormState as i, OptionItem as it, AsyncOptionsContext as j, shouldShowActions as k, defineFormConfig as l, NAIVE_COMBOS$1 as lt, FormRenderer as m, DynamicFormStateType as n, LayoutType as nt, useFormDirty as o, SubmitEventPayload as ot, ComponentMap as p, FormRecord as q, FIELD_TYPE_OPTIONS as r, MaybePromise as rt, useFormState as s, TabsLayoutConfig as st, DYNAMIC_FORM_STATE_KEY as t, LayoutConfig as tt, defineFormOptions as u, PRESET_RULES$1 as ut, registerRenderer as v, LAYOUTS_WITH_OWN_CONTROLS as w, FORM_DEFAULTS as x, unregisterRenderer as y, FieldPath as z };
@@ -259,11 +259,11 @@ declare const __VLS_export: vue.DefineComponent<Props, {
259
259
  onReady?: ((graph: Graph) => any) | undefined;
260
260
  "onData-change"?: ((data: DiagramData) => any) | undefined;
261
261
  }>, {
262
- height: string | number;
263
262
  theme: "light" | "dark";
263
+ height: string | number;
264
+ showToolbar: boolean;
264
265
  width: string | number;
265
266
  readonly: boolean;
266
- showToolbar: boolean;
267
267
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
268
268
  declare const _default: typeof __VLS_export;
269
269
  //#endregion
@@ -259,11 +259,11 @@ declare const __VLS_export: vue.DefineComponent<Props, {
259
259
  onReady?: ((graph: Graph) => any) | undefined;
260
260
  "onData-change"?: ((data: DiagramData) => any) | undefined;
261
261
  }>, {
262
- height: string | number;
263
262
  theme: "light" | "dark";
263
+ height: string | number;
264
+ showToolbar: boolean;
264
265
  width: string | number;
265
266
  readonly: boolean;
266
- showToolbar: boolean;
267
267
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
268
268
  declare const _default: typeof __VLS_export;
269
269
  //#endregion
@@ -79,13 +79,13 @@ type __VLS_Slots = {} & {
79
79
  footer?: (props: typeof __VLS_5) => any;
80
80
  };
81
81
  declare const __VLS_base: vue.DefineComponent<WaterFallProps, WaterFallExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
82
- "load-more": () => any;
83
82
  "item-click": (item: WaterFallItem, index: number) => any;
83
+ "load-more": () => any;
84
84
  "image-loaded": (item: WaterFallItem) => any;
85
85
  "image-error": (item: WaterFallItem) => any;
86
86
  }, string, vue.PublicProps, Readonly<WaterFallProps> & Readonly<{
87
- "onLoad-more"?: (() => any) | undefined;
88
87
  "onItem-click"?: ((item: WaterFallItem, index: number) => any) | undefined;
88
+ "onLoad-more"?: (() => any) | undefined;
89
89
  "onImage-loaded"?: ((item: WaterFallItem) => any) | undefined;
90
90
  "onImage-error"?: ((item: WaterFallItem) => any) | undefined;
91
91
  }>, {
@@ -79,13 +79,13 @@ type __VLS_Slots = {} & {
79
79
  footer?: (props: typeof __VLS_5) => any;
80
80
  };
81
81
  declare const __VLS_base: vue.DefineComponent<WaterFallProps, WaterFallExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
82
- "load-more": () => any;
83
82
  "item-click": (item: WaterFallItem, index: number) => any;
83
+ "load-more": () => any;
84
84
  "image-loaded": (item: WaterFallItem) => any;
85
85
  "image-error": (item: WaterFallItem) => any;
86
86
  }, string, vue.PublicProps, Readonly<WaterFallProps> & Readonly<{
87
- "onLoad-more"?: (() => any) | undefined;
88
87
  "onItem-click"?: ((item: WaterFallItem, index: number) => any) | undefined;
88
+ "onLoad-more"?: (() => any) | undefined;
89
89
  "onImage-loaded"?: ((item: WaterFallItem) => any) | undefined;
90
90
  "onImage-error"?: ((item: WaterFallItem) => any) | undefined;
91
91
  }>, {
@@ -50,13 +50,13 @@ declare const __VLS_export: vue.DefineComponent<Props, QRCodeExpose, {}, {}, {},
50
50
  }, string, vue.PublicProps, Readonly<Props> & Readonly<{
51
51
  onError?: ((error: Error) => any) | undefined;
52
52
  }>, {
53
- color: string;
54
53
  size: number;
54
+ color: string;
55
55
  label: string;
56
56
  mode: RenderMode;
57
+ margin: number;
57
58
  bgColor: string;
58
59
  errorCorrectionLevel: ErrorCorrectionLevel;
59
- margin: number;
60
60
  logo: LogoOptions;
61
61
  showBorder: boolean;
62
62
  showLabel: boolean;
@@ -50,13 +50,13 @@ declare const __VLS_export: vue.DefineComponent<Props, QRCodeExpose, {}, {}, {},
50
50
  }, string, vue.PublicProps, Readonly<Props> & Readonly<{
51
51
  onError?: ((error: Error) => any) | undefined;
52
52
  }>, {
53
- color: string;
54
53
  size: number;
54
+ color: string;
55
55
  label: string;
56
56
  mode: RenderMode;
57
+ margin: number;
57
58
  bgColor: string;
58
59
  errorCorrectionLevel: ErrorCorrectionLevel;
59
- margin: number;
60
60
  logo: LogoOptions;
61
61
  showBorder: boolean;
62
62
  showLabel: boolean;
@@ -93,8 +93,8 @@ declare const __VLS_export: vue.DefineComponent<FormSearchProps, {
93
93
  onReset?: (() => any) | undefined;
94
94
  "onChange-params"?: ((params: SearchFormParams) => any) | undefined;
95
95
  }>, {
96
- size: "small" | "medium" | "large";
97
96
  loading: boolean;
97
+ size: "small" | "medium" | "large";
98
98
  bordered: boolean;
99
99
  formItemList: SearchFormItem[];
100
100
  formParams: SearchFormParams;
@@ -164,7 +164,13 @@ declare function useSearchState(emits: {
164
164
  rules?: {
165
165
  type?: async_validator0.RuleType | undefined;
166
166
  required?: boolean | undefined;
167
+ pattern?: (RegExp | string) | undefined;
168
+ min?: number | undefined;
167
169
  max?: number | undefined;
170
+ len?: number | undefined;
171
+ enum?: Array<string | number | boolean | null | undefined> | undefined;
172
+ whitespace?: boolean | undefined;
173
+ fields?: Record<string, async_validator0.Rule> | undefined;
168
174
  options?: {
169
175
  suppressWarning?: boolean | undefined;
170
176
  suppressValidatorError?: boolean | undefined;
@@ -220,12 +226,6 @@ declare function useSearchState(emits: {
220
226
  keys?: string[] | undefined;
221
227
  error?: ((rule: async_validator0.InternalRuleItem, message: string) => async_validator0.ValidateError) | undefined;
222
228
  } | undefined;
223
- pattern?: (RegExp | string) | undefined;
224
- min?: number | undefined;
225
- len?: number | undefined;
226
- enum?: Array<string | number | boolean | null | undefined> | undefined;
227
- whitespace?: boolean | undefined;
228
- fields?: Record<string, async_validator0.Rule> | undefined;
229
229
  defaultField?: {
230
230
  type?: async_validator0.RuleType | undefined;
231
231
  required?: boolean | undefined;
@@ -395,7 +395,13 @@ declare function useSearchState(emits: {
395
395
  rules?: {
396
396
  type?: async_validator0.RuleType | undefined;
397
397
  required?: boolean | undefined;
398
+ pattern?: (RegExp | string) | undefined;
399
+ min?: number | undefined;
398
400
  max?: number | undefined;
401
+ len?: number | undefined;
402
+ enum?: Array<string | number | boolean | null | undefined> | undefined;
403
+ whitespace?: boolean | undefined;
404
+ fields?: Record<string, async_validator0.Rule> | undefined;
399
405
  options?: {
400
406
  suppressWarning?: boolean | undefined;
401
407
  suppressValidatorError?: boolean | undefined;
@@ -451,12 +457,6 @@ declare function useSearchState(emits: {
451
457
  keys?: string[] | undefined;
452
458
  error?: ((rule: async_validator0.InternalRuleItem, message: string) => async_validator0.ValidateError) | undefined;
453
459
  } | undefined;
454
- pattern?: (RegExp | string) | undefined;
455
- min?: number | undefined;
456
- len?: number | undefined;
457
- enum?: Array<string | number | boolean | null | undefined> | undefined;
458
- whitespace?: boolean | undefined;
459
- fields?: Record<string, async_validator0.Rule> | undefined;
460
460
  defaultField?: {
461
461
  type?: async_validator0.RuleType | undefined;
462
462
  required?: boolean | undefined;
@@ -638,7 +638,13 @@ declare function useSearchState(emits: {
638
638
  rules?: {
639
639
  type?: async_validator0.RuleType | undefined;
640
640
  required?: boolean | undefined;
641
+ pattern?: (RegExp | string) | undefined;
642
+ min?: number | undefined;
641
643
  max?: number | undefined;
644
+ len?: number | undefined;
645
+ enum?: Array<string | number | boolean | null | undefined> | undefined;
646
+ whitespace?: boolean | undefined;
647
+ fields?: Record<string, async_validator0.Rule> | undefined;
642
648
  options?: {
643
649
  suppressWarning?: boolean | undefined;
644
650
  suppressValidatorError?: boolean | undefined;
@@ -694,12 +700,6 @@ declare function useSearchState(emits: {
694
700
  keys?: string[] | undefined;
695
701
  error?: ((rule: async_validator0.InternalRuleItem, message: string) => async_validator0.ValidateError) | undefined;
696
702
  } | undefined;
697
- pattern?: (RegExp | string) | undefined;
698
- min?: number | undefined;
699
- len?: number | undefined;
700
- enum?: Array<string | number | boolean | null | undefined> | undefined;
701
- whitespace?: boolean | undefined;
702
- fields?: Record<string, async_validator0.Rule> | undefined;
703
703
  defaultField?: {
704
704
  type?: async_validator0.RuleType | undefined;
705
705
  required?: boolean | undefined;