@tmagic/form 1.8.0-manmanyu.8 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/es/Form.vue_vue_type_script_setup_true_lang.js +88 -107
  2. package/dist/es/FormBox.vue_vue_type_script_setup_true_lang.js +21 -5
  3. package/dist/es/FormDialog.vue_vue_type_script_setup_true_lang.js +21 -5
  4. package/dist/es/FormDrawer.vue_vue_type_script_setup_true_lang.js +46 -12
  5. package/dist/es/containers/Col.vue_vue_type_script_setup_true_lang.js +6 -2
  6. package/dist/es/containers/Container.vue_vue_type_script_setup_true_lang.js +44 -47
  7. package/dist/es/containers/Fieldset.vue_vue_type_script_setup_true_lang.js +7 -1
  8. package/dist/es/containers/FlexLayout.vue_vue_type_script_setup_true_lang.js +5 -2
  9. package/dist/es/containers/FormLabel.vue_vue_type_script_setup_true_lang.js +1 -1
  10. package/dist/es/containers/GroupList.vue_vue_type_script_setup_true_lang.js +59 -22
  11. package/dist/es/containers/GroupListItem.vue_vue_type_script_setup_true_lang.js +118 -100
  12. package/dist/es/containers/Panel.vue_vue_type_script_setup_true_lang.js +8 -3
  13. package/dist/es/containers/Row.vue_vue_type_script_setup_true_lang.js +4 -1
  14. package/dist/es/containers/Step.vue_vue_type_script_setup_true_lang.js +5 -2
  15. package/dist/es/containers/Tabs.vue_vue_type_script_setup_true_lang.js +8 -1
  16. package/dist/es/containers/table/ActionsColumn.vue_vue_type_script_setup_true_lang.js +1 -1
  17. package/dist/es/containers/table/SortColumn.vue_vue_type_script_setup_true_lang.js +1 -1
  18. package/dist/es/containers/table/Table.vue_vue_type_script_setup_true_lang.js +14 -10
  19. package/dist/es/containers/table/useTableColumns.js +10 -15
  20. package/dist/es/containers/table-group-list/TableGroupList.vue_vue_type_script_setup_true_lang.js +72 -79
  21. package/dist/es/containers/table-group-list/useAdd.js +26 -16
  22. package/dist/es/containers/table-group-list/useScrollLastItemIntoView.js +72 -0
  23. package/dist/es/fields/Cascader.vue_vue_type_script_setup_true_lang.js +2 -2
  24. package/dist/es/fields/Checkbox.vue_vue_type_script_setup_true_lang.js +1 -1
  25. package/dist/es/fields/CheckboxGroup/Index.js +5 -0
  26. package/dist/es/fields/{CheckboxGroup.vue_vue_type_script_setup_true_lang.js → CheckboxGroup/Index.vue_vue_type_script_setup_true_lang.js} +6 -7
  27. package/dist/es/fields/CheckboxGroup/effect.js +8 -0
  28. package/dist/es/fields/ColorPicker.vue_vue_type_script_setup_true_lang.js +1 -1
  29. package/dist/es/fields/Date/Index.js +5 -0
  30. package/dist/es/fields/{Date.vue_vue_type_script_setup_true_lang.js → Date/Index.vue_vue_type_script_setup_true_lang.js} +5 -7
  31. package/dist/es/fields/Date/effect.js +10 -0
  32. package/dist/es/fields/DateTime/Index.js +5 -0
  33. package/dist/es/fields/{DateTime.vue_vue_type_script_setup_true_lang.js → DateTime/Index.vue_vue_type_script_setup_true_lang.js} +5 -9
  34. package/dist/es/fields/DateTime/effect.js +15 -0
  35. package/dist/es/fields/Daterange.vue_vue_type_script_setup_true_lang.js +2 -2
  36. package/dist/es/fields/Display/Index.js +5 -0
  37. package/dist/es/fields/{Display.vue_vue_type_script_setup_true_lang.js → Display/Index.vue_vue_type_script_setup_true_lang.js} +6 -7
  38. package/dist/es/fields/Display/effect.js +8 -0
  39. package/dist/es/fields/DynamicField/Index.js +5 -0
  40. package/dist/es/fields/{DynamicField.vue_vue_type_script_setup_true_lang.js → DynamicField/Index.vue_vue_type_script_setup_true_lang.js} +11 -15
  41. package/dist/es/fields/DynamicField/effect.js +40 -0
  42. package/dist/es/fields/Hidden.vue_vue_type_script_setup_true_lang.js +1 -1
  43. package/dist/es/fields/Link.vue_vue_type_script_setup_true_lang.js +4 -4
  44. package/dist/es/fields/Number.vue_vue_type_script_setup_true_lang.js +4 -2
  45. package/dist/es/fields/NumberRange/Index.js +5 -0
  46. package/dist/es/fields/{NumberRange.vue_vue_type_script_setup_true_lang.js → NumberRange/Index.vue_vue_type_script_setup_true_lang.js} +5 -6
  47. package/dist/es/fields/NumberRange/effect.js +8 -0
  48. package/dist/es/fields/RadioGroup.vue_vue_type_script_setup_true_lang.js +5 -2
  49. package/dist/es/fields/Select.vue_vue_type_script_setup_true_lang.js +14 -6
  50. package/dist/es/fields/Switch.vue_vue_type_script_setup_true_lang.js +1 -1
  51. package/dist/es/fields/Text.vue_vue_type_script_setup_true_lang.js +13 -10
  52. package/dist/es/fields/Textarea.vue_vue_type_script_setup_true_lang.js +1 -1
  53. package/dist/es/fields/Time.vue_vue_type_script_setup_true_lang.js +1 -1
  54. package/dist/es/fields/Timerange.vue_vue_type_script_setup_true_lang.js +3 -3
  55. package/dist/es/headless.js +13 -0
  56. package/dist/es/index.js +19 -12
  57. package/dist/es/plugin.js +57 -39
  58. package/dist/es/schema.js +11 -2
  59. package/dist/es/style.css +123 -3
  60. package/dist/es/submitForm.js +270 -72
  61. package/dist/es/utils/builtInFields.js +49 -0
  62. package/dist/es/utils/collectFields.js +407 -0
  63. package/dist/es/utils/config.js +4 -8
  64. package/dist/es/utils/fieldInnerConfig.js +42 -0
  65. package/dist/es/utils/fieldValueEffects.js +80 -0
  66. package/dist/es/utils/form.js +154 -19
  67. package/dist/es/utils/formStateProxy.js +111 -0
  68. package/dist/es/utils/registerField.js +158 -0
  69. package/dist/es/utils/submitHeadless.js +54 -0
  70. package/dist/es/utils/tableGroupList.js +104 -0
  71. package/dist/es/utils/typeMatch.js +532 -0
  72. package/dist/es/utils/validateError.js +57 -0
  73. package/dist/es/utils/validateValues.js +115 -0
  74. package/dist/style.css +123 -3
  75. package/dist/themes/magic-admin.css +576 -14
  76. package/dist/tmagic-form-headless.umd.cjs +4515 -0
  77. package/dist/tmagic-form.umd.cjs +3444 -983
  78. package/package.json +16 -10
  79. package/src/Form.vue +113 -129
  80. package/src/FormBox.vue +16 -4
  81. package/src/FormDialog.vue +16 -5
  82. package/src/FormDrawer.vue +41 -13
  83. package/src/containers/Col.vue +3 -0
  84. package/src/containers/Container.vue +40 -45
  85. package/src/containers/Fieldset.vue +5 -0
  86. package/src/containers/FlexLayout.vue +2 -0
  87. package/src/containers/GroupList.vue +64 -13
  88. package/src/containers/GroupListItem.vue +88 -81
  89. package/src/containers/Panel.vue +3 -0
  90. package/src/containers/Row.vue +2 -0
  91. package/src/containers/Step.vue +2 -0
  92. package/src/containers/Tabs.vue +13 -0
  93. package/src/containers/table/ActionsColumn.vue +1 -1
  94. package/src/containers/table/Table.vue +5 -3
  95. package/src/containers/table/usePagination.ts +1 -1
  96. package/src/containers/table/useSortable.ts +1 -1
  97. package/src/containers/table/useTableColumns.ts +15 -22
  98. package/src/containers/table-group-list/TableGroupList.vue +46 -72
  99. package/src/containers/table-group-list/useAdd.ts +40 -25
  100. package/src/containers/table-group-list/useScrollLastItemIntoView.ts +94 -0
  101. package/src/fields/{CheckboxGroup.vue → CheckboxGroup/Index.vue} +3 -8
  102. package/src/fields/CheckboxGroup/effect.ts +27 -0
  103. package/src/fields/{Date.vue → Date/Index.vue} +2 -5
  104. package/src/fields/Date/effect.ts +29 -0
  105. package/src/fields/{DateTime.vue → DateTime/Index.vue} +2 -16
  106. package/src/fields/DateTime/effect.ts +36 -0
  107. package/src/fields/{Display.vue → Display/Index.vue} +3 -7
  108. package/src/fields/Display/effect.ts +28 -0
  109. package/src/fields/{DynamicField.vue → DynamicField/Index.vue} +11 -11
  110. package/src/fields/DynamicField/effect.ts +74 -0
  111. package/src/fields/Link.vue +3 -4
  112. package/src/fields/Number.vue +2 -1
  113. package/src/fields/{NumberRange.vue → NumberRange/Index.vue} +2 -6
  114. package/src/fields/NumberRange/effect.ts +27 -0
  115. package/src/fields/RadioGroup.vue +13 -1
  116. package/src/fields/Select.vue +13 -4
  117. package/src/headless.ts +78 -0
  118. package/src/index.ts +46 -9
  119. package/src/plugin.ts +68 -37
  120. package/src/schema.ts +13 -2
  121. package/src/submitForm.ts +410 -131
  122. package/src/theme/fieldset.scss +1 -0
  123. package/src/theme/form-box.scss +5 -0
  124. package/src/theme/form-dialog.scss +1 -1
  125. package/src/theme/group-list.scss +143 -2
  126. package/src/theme/table.scss +11 -1
  127. package/src/theme/themes/magic-admin/index.scss +27 -16
  128. package/src/utils/builtInFields.ts +69 -0
  129. package/src/utils/collectFields.ts +561 -0
  130. package/src/utils/config.ts +7 -15
  131. package/src/utils/fieldInnerConfig.ts +127 -0
  132. package/src/utils/fieldValueEffects.ts +140 -0
  133. package/src/utils/form.ts +230 -30
  134. package/src/utils/formStateProxy.ts +149 -0
  135. package/src/utils/registerField.ts +308 -0
  136. package/src/utils/submitHeadless.ts +206 -0
  137. package/src/utils/tableGroupList.ts +147 -0
  138. package/src/utils/typeMatch.ts +948 -0
  139. package/src/utils/validateError.ts +92 -0
  140. package/src/utils/validateValues.ts +177 -0
  141. package/types/headless.d.ts +682 -0
  142. package/types/index.d.ts +900 -180
  143. package/dist/es/_virtual/_rolldown/runtime.js +0 -27
  144. package/dist/es/fields/CheckboxGroup.js +0 -5
  145. package/dist/es/fields/Date.js +0 -5
  146. package/dist/es/fields/DateTime.js +0 -5
  147. package/dist/es/fields/Display.js +0 -5
  148. package/dist/es/fields/DynamicField.js +0 -5
  149. package/dist/es/fields/NumberRange.js +0 -5
package/src/plugin.ts CHANGED
@@ -28,17 +28,17 @@ import TableGroupList from './containers/table-group-list/TableGroupList.vue';
28
28
  import Tabs from './containers/Tabs.vue';
29
29
  import Cascader from './fields/Cascader.vue';
30
30
  import Checkbox from './fields/Checkbox.vue';
31
- import CheckboxGroup from './fields/CheckboxGroup.vue';
31
+ import CheckboxGroup from './fields/CheckboxGroup/Index.vue';
32
32
  import ColorPicker from './fields/ColorPicker.vue';
33
- import Date from './fields/Date.vue';
33
+ import Date from './fields/Date/Index.vue';
34
34
  import Daterange from './fields/Daterange.vue';
35
- import DateTime from './fields/DateTime.vue';
36
- import Display from './fields/Display.vue';
37
- import DynamicField from './fields/DynamicField.vue';
35
+ import DateTime from './fields/DateTime/Index.vue';
36
+ import Display from './fields/Display/Index.vue';
37
+ import DynamicField from './fields/DynamicField/Index.vue';
38
38
  import Hidden from './fields/Hidden.vue';
39
39
  import Link from './fields/Link.vue';
40
40
  import Number from './fields/Number.vue';
41
- import NumberRange from './fields/NumberRange.vue';
41
+ import NumberRange from './fields/NumberRange/Index.vue';
42
42
  import RadioGroup from './fields/RadioGroup.vue';
43
43
  import Select from './fields/Select.vue';
44
44
  import Switch from './fields/Switch.vue';
@@ -46,58 +46,89 @@ import Text from './fields/Text.vue';
46
46
  import Textarea from './fields/Textarea.vue';
47
47
  import Time from './fields/Time.vue';
48
48
  import Timerange from './fields/Timerange.vue';
49
+ import { builtInFields } from './utils/builtInFields';
49
50
  import { setConfig } from './utils/config';
51
+ import { type FieldOptions, registerBuiltInFields, registerFields } from './utils/registerField';
50
52
  import Form from './Form.vue';
51
53
  import FormDialog from './FormDialog.vue';
52
54
  import FormDrawer from './FormDrawer.vue';
53
55
 
54
56
  import './theme/index.scss';
55
57
 
58
+ // #region FormInstallOptions
59
+ /**
60
+ * `@tmagic/form` 插件安装选项。
61
+ */
56
62
  export interface FormInstallOptions {
63
+ /** 是否启用全局 flat 模式。 */
64
+ flat?: boolean;
65
+ /**
66
+ * 自定义字段 type 的登记(叶子 / innerConfig / walk / typeMatch / component / container)。
67
+ * 与 `registerFields` 相同。
68
+ */
69
+ fields?: Record<string, FieldOptions>;
57
70
  [key: string]: any;
58
71
  }
72
+ // #endregion FormInstallOptions
73
+
74
+ const builtInFieldVue: Record<string, Pick<FieldOptions, 'component' | 'container'>> = {
75
+ text: { component: Text },
76
+ 'img-upload': { component: Text },
77
+ number: { component: Number },
78
+ 'number-range': { component: NumberRange },
79
+ textarea: { component: Textarea },
80
+ hidden: { component: Hidden },
81
+ date: { component: Date },
82
+ datetime: { component: DateTime },
83
+ daterange: { component: Daterange },
84
+ timerange: { component: Timerange },
85
+ time: { component: Time },
86
+ checkbox: { component: Checkbox },
87
+ switch: { component: Switch },
88
+ 'color-picker': { component: ColorPicker },
89
+ 'checkbox-group': { component: CheckboxGroup },
90
+ 'radio-group': { component: RadioGroup },
91
+ display: { component: Display },
92
+ link: { component: Link },
93
+ select: { component: Select },
94
+ cascader: { component: Cascader },
95
+ 'dynamic-field': { component: DynamicField },
96
+ container: { container: Container },
97
+ tab: { container: Tabs },
98
+ row: { container: Row },
99
+ 'flex-layout': { container: FlexLayout },
100
+ fieldset: { container: Fieldset },
101
+ panel: { container: Panel },
102
+ step: { container: MStep },
103
+ table: { container: TableGroupList },
104
+ 'group-list': { container: TableGroupList },
105
+ 'table-group-list': { container: TableGroupList },
106
+ };
59
107
 
60
108
  const defaultInstallOpt: FormInstallOptions = {};
61
109
 
62
110
  export default {
111
+ /**
112
+ * 安装 `@tmagic/form`:登记内置字段、挂载 `m-form` / `m-form-dialog` / `m-form-drawer`。
113
+ *
114
+ * @param app - Vue 应用
115
+ * @param [opt] - 安装选项
116
+ */
63
117
  install(app: App, opt: FormInstallOptions = {}) {
64
- const option = Object.assign(defaultInstallOpt, opt);
118
+ const option = { ...defaultInstallOpt, ...opt };
65
119
 
66
120
  app.config.globalProperties.$MAGIC_FORM = option;
67
121
  setConfig(option);
68
122
 
123
+ registerBuiltInFields(builtInFields);
124
+ registerBuiltInFields(builtInFieldVue, app);
125
+
126
+ if (option.fields) {
127
+ registerFields(option.fields, app);
128
+ }
129
+
69
130
  app.component('m-form', Form);
70
131
  app.component('m-form-dialog', FormDialog);
71
132
  app.component('m-form-drawer', FormDrawer);
72
- app.component('m-form-container', Container);
73
- app.component('m-form-fieldset', Fieldset);
74
- app.component('m-form-group-list', TableGroupList);
75
- app.component('m-form-panel', Panel);
76
- app.component('m-form-row', Row);
77
- app.component('m-form-step', MStep);
78
- app.component('m-form-table', TableGroupList);
79
- app.component('m-form-tab', Tabs);
80
- app.component('m-form-flex-layout', FlexLayout);
81
- app.component('m-fields-text', Text);
82
- app.component('m-fields-img-upload', Text);
83
- app.component('m-fields-number', Number);
84
- app.component('m-fields-number-range', NumberRange);
85
- app.component('m-fields-textarea', Textarea);
86
- app.component('m-fields-hidden', Hidden);
87
- app.component('m-fields-date', Date);
88
- app.component('m-fields-datetime', DateTime);
89
- app.component('m-fields-daterange', Daterange);
90
- app.component('m-fields-timerange', Timerange);
91
- app.component('m-fields-time', Time);
92
- app.component('m-fields-checkbox', Checkbox);
93
- app.component('m-fields-switch', Switch);
94
- app.component('m-fields-color-picker', ColorPicker);
95
- app.component('m-fields-checkbox-group', CheckboxGroup);
96
- app.component('m-fields-radio-group', RadioGroup);
97
- app.component('m-fields-display', Display);
98
- app.component('m-fields-link', Link);
99
- app.component('m-fields-select', Select);
100
- app.component('m-fields-cascader', Cascader);
101
- app.component('m-fields-dynamic-field', DynamicField);
102
133
  },
103
134
  };
package/src/schema.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { InjectionKey } from 'vue';
1
+ import type { ComputedRef, InjectionKey } from 'vue';
2
2
 
3
- import type { FormItemConfig } from '@tmagic/form-schema';
3
+ import type { FormContext, FormItemConfig } from '@tmagic/form-schema';
4
4
 
5
5
  export * from '@tmagic/form-schema';
6
6
 
@@ -27,6 +27,17 @@ export interface FormDiffConfig {
27
27
  }
28
28
 
29
29
  export const FORM_DIFF_CONFIG_KEY: InjectionKey<FormDiffConfig> = Symbol('mFormDiffConfig');
30
+ export const FORM_TYPE_MATCH_VALID_KEY: InjectionKey<ComputedRef<boolean>> = Symbol('mFormTypeMatchValid');
31
+
32
+ /**
33
+ * 宿主业务上下文,由 `MForm`(或更外层的 Editor)通过 `provide` 下发。
34
+ *
35
+ * 嵌套表单(Link 子表单、FormBox、临时校验表单等)会自动继承最近祖先的 context,
36
+ * 无需层层透传。
37
+ *
38
+ * 配置回调统一通过 `mForm.xxx` 读取,由 formState 的读穿 Proxy 落到这里。
39
+ */
40
+ export const FORM_CONTEXT_KEY: InjectionKey<ComputedRef<FormContext>> = Symbol('mFormContext');
30
41
 
31
42
  export interface ValidateError {
32
43
  message: string;