@tmagic/form 1.8.0-manmanyu.9 → 1.8.1

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
@@ -1,12 +1,13 @@
1
- import { useAddField } from "../utils/useAddField.js";
2
- import { getConfig } from "../utils/config.js";
1
+ import { getConfig } from "../../utils/config.js";
2
+ import { useAddField } from "../../utils/useAddField.js";
3
+ import { eachDynamicField } from "./effect.js";
3
4
  import { Fragment, createBlock, createElementBlock, createVNode, defineComponent, onBeforeUnmount, openBlock, reactive, renderList, unref, watch, withCtx } from "vue";
4
5
  import { TMagicForm, TMagicFormItem, TMagicInput } from "@tmagic/design";
5
- //#region packages/form/src/fields/DynamicField.vue?vue&type=script&setup=true&lang.ts
6
+ //#region packages/form/src/fields/DynamicField/Index.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = { class: "m-fields-dynamic-field" };
7
- var DynamicField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
8
+ var Index_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
9
  name: "MFormDynamicField",
9
- __name: "DynamicField",
10
+ __name: "Index",
10
11
  props: {
11
12
  config: {},
12
13
  model: {},
@@ -44,15 +45,10 @@ var DynamicField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ d
44
45
  const fields = await props.config.returnFields(props.config, props.model, request);
45
46
  fieldMap.value = {};
46
47
  fieldLabelMap.value = {};
47
- fields.forEach((v) => {
48
- if (typeof v !== "object" || v.name === void 0) return;
49
- let oldVal = props.model?.[v.name] || "";
50
- if (!oldVal && v.defaultValue !== void 0) {
51
- oldVal = v.defaultValue;
52
- emit("change", oldVal, { modifyKey: v.name });
53
- }
54
- fieldMap.value[v.name] = oldVal;
55
- fieldLabelMap.value[v.name] = v.label || "";
48
+ eachDynamicField(fields, props.model, (field, value, isDefaultApplied) => {
49
+ if (isDefaultApplied) emit("change", value, { modifyKey: field.name });
50
+ fieldMap.value[field.name] = value;
51
+ fieldLabelMap.value[field.name] = field.label || "";
56
52
  });
57
53
  };
58
54
  const unwatch = watch(() => props.model?.[props.config.dynamicKey], (val) => {
@@ -91,4 +87,4 @@ var DynamicField_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ d
91
87
  }
92
88
  });
93
89
  //#endregion
94
- export { DynamicField_vue_vue_type_script_setup_true_lang_default as default };
90
+ export { Index_vue_vue_type_script_setup_true_lang_default as default };
@@ -0,0 +1,40 @@
1
+ import { getConfig } from "../../utils/config.js";
2
+ import { setValueByKeyPath } from "@tmagic/utils";
3
+ //#region packages/form/src/fields/DynamicField/effect.ts
4
+ /**
5
+ * 遍历动态字段列表,按「原值为空且声明了 defaultValue 则取默认值」求出每个字段当前的值。
6
+ *
7
+ * `isDefaultApplied` 为真表示该值来自 `defaultValue`,需要写回表单值
8
+ * (组件通过 emit change 写回,初始化写入直接写 `values`)。
9
+ */
10
+ var eachDynamicField = (fields, model, onField) => {
11
+ for (const field of fields) {
12
+ if (typeof field !== "object" || field?.name === void 0) continue;
13
+ let value = model?.[field.name] || "";
14
+ let isDefaultApplied = false;
15
+ if (!value && field.defaultValue !== void 0) {
16
+ value = field.defaultValue;
17
+ isDefaultApplied = true;
18
+ }
19
+ onField(field, value, isDefaultApplied);
20
+ }
21
+ };
22
+ /**
23
+ * 同步 `returnFields` 的 defaultValue 按 prop 写入值根对象。
24
+ *
25
+ * 该组件读取的是同级 model,但写入走 Container 的 modifyKey 分支,落在 `${prop}.${key}`,
26
+ * 这里保持与渲染一致(含这层不对称),避免两条链路产出不同的值。
27
+ * 异步 returnFields 由组件挂载后的 watch 负责,此处不等待。
28
+ */
29
+ var effect = ({ config, model, prop, values }) => {
30
+ const { returnFields, dynamicKey } = config;
31
+ if (typeof returnFields !== "function" || !model) return;
32
+ if (model[dynamicKey] === "") return;
33
+ const result = returnFields(config, model, getConfig("request"));
34
+ if (!result || typeof result.then === "function" || !Array.isArray(result)) return;
35
+ eachDynamicField(result, model, (field, value, isDefaultApplied) => {
36
+ if (isDefaultApplied) setValueByKeyPath(`${prop}.${field.name}`, value, values || model);
37
+ });
38
+ };
39
+ //#endregion
40
+ export { eachDynamicField, effect };
@@ -1,7 +1,7 @@
1
1
  import { useAddField } from "../utils/useAddField.js";
2
2
  import { createCommentVNode, createElementBlock, defineComponent, openBlock, vModelText, withDirectives } from "vue";
3
3
  //#region packages/form/src/fields/Hidden.vue?vue&type=script&setup=true&lang.ts
4
- var Hidden_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
4
+ var Hidden_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
5
5
  name: "MFormHidden",
6
6
  __name: "Hidden",
7
7
  props: {
@@ -1,7 +1,8 @@
1
+ import { isGlobalFlat } from "../utils/config.js";
1
2
  import { useAddField } from "../utils/useAddField.js";
2
3
  import FormDialog_default from "../FormDialog.js";
3
4
  import { computed, createElementBlock, createTextVNode, createVNode, defineComponent, inject, normalizeStyle, openBlock, readonly, ref, toDisplayString, unref, withCtx } from "vue";
4
- import { TMagicButton, TMagicIcon, useTheme } from "@tmagic/design";
5
+ import { TMagicButton, TMagicIcon } from "@tmagic/design";
5
6
  import { Notebook } from "@element-plus/icons-vue";
6
7
  //#region packages/form/src/fields/Link.vue?vue&type=script&setup=true&lang.ts
7
8
  var _hoisted_1 = ["href"];
@@ -10,7 +11,7 @@ var _hoisted_3 = {
10
11
  key: 3,
11
12
  class: "m-fields-link"
12
13
  };
13
- var Link_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
14
+ var Link_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
14
15
  name: "MFormLink",
15
16
  __name: "Link",
16
17
  props: {
@@ -33,7 +34,6 @@ var Link_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
33
34
  setup(__props, { emit: __emit }) {
34
35
  const props = __props;
35
36
  const emit = __emit;
36
- const displayTheme = useTheme(props);
37
37
  useAddField(props.prop);
38
38
  const formValue = ref({});
39
39
  const editor = ref();
@@ -71,7 +71,7 @@ var Link_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
71
71
  editor.value && (editor.value.dialogVisible = false);
72
72
  };
73
73
  return (_ctx, _cache) => {
74
- return unref(displayTheme) === "magic-admin" && __props.config.href && !__props.disabled ? (openBlock(), createElementBlock("a", {
74
+ return unref(isGlobalFlat) && __props.config.href && !__props.disabled ? (openBlock(), createElementBlock("a", {
75
75
  key: 0,
76
76
  target: "_blank",
77
77
  href: href.value,
@@ -1,8 +1,9 @@
1
+ import { isGlobalFlat } from "../utils/config.js";
1
2
  import { useAddField } from "../utils/useAddField.js";
2
3
  import { createBlock, createCommentVNode, defineComponent, inject, openBlock, ref, unref, watch } from "vue";
3
4
  import { TMagicInputNumber } from "@tmagic/design";
4
5
  //#region packages/form/src/fields/Number.vue?vue&type=script&setup=true&lang.ts
5
- var Number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var Number_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
7
  name: "MFormNumber",
7
8
  __name: "Number",
8
9
  props: {
@@ -43,7 +44,7 @@ var Number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
43
44
  modelValue: value.value,
44
45
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => value.value = $event),
45
46
  clearable: "",
46
- "controls-position": "right",
47
+ "controls-position": unref(isGlobalFlat) ? "" : "right",
47
48
  size: __props.size,
48
49
  max: __props.config.max,
49
50
  min: __props.config.min,
@@ -54,6 +55,7 @@ var Number_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
54
55
  onInput: inputHandler
55
56
  }, null, 8, [
56
57
  "modelValue",
58
+ "controls-position",
57
59
  "size",
58
60
  "max",
59
61
  "min",
@@ -0,0 +1,5 @@
1
+ import Index_vue_vue_type_script_setup_true_lang_default from "./Index.vue_vue_type_script_setup_true_lang.js";
2
+ //#region packages/form/src/fields/NumberRange/Index.vue
3
+ var Index_default = Index_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { Index_default as default };
@@ -1,11 +1,11 @@
1
- import { useAddField } from "../utils/useAddField.js";
1
+ import { useAddField } from "../../utils/useAddField.js";
2
2
  import { createElementBlock, createElementVNode, createVNode, defineComponent, openBlock, ref, unref, watch } from "vue";
3
3
  import { TMagicInput } from "@tmagic/design";
4
- //#region packages/form/src/fields/NumberRange.vue?vue&type=script&setup=true&lang.ts
4
+ //#region packages/form/src/fields/NumberRange/Index.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = { class: "m-fields-number-range" };
6
- var NumberRange_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var Index_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  name: "MFormNumberRange",
8
- __name: "NumberRange",
8
+ __name: "Index",
9
9
  props: {
10
10
  config: {},
11
11
  model: {},
@@ -35,7 +35,6 @@ var NumberRange_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
35
35
  deep: true
36
36
  });
37
37
  useAddField(props.prop);
38
- if (!Array.isArray(props.model[props.name])) props.model[props.name] = [];
39
38
  const minChangeHandler = (v) => {
40
39
  emit("change", [Number(v), props.model[props.name][1]]);
41
40
  };
@@ -76,4 +75,4 @@ var NumberRange_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
76
75
  }
77
76
  });
78
77
  //#endregion
79
- export { NumberRange_vue_vue_type_script_setup_true_lang_default as default };
78
+ export { Index_vue_vue_type_script_setup_true_lang_default as default };
@@ -0,0 +1,8 @@
1
+ //#region packages/form/src/fields/NumberRange/effect.ts
2
+ /** 值不是数组时修正为空数组。 */
3
+ var effect = ({ config, model }) => {
4
+ const { name } = config;
5
+ if (model && !Array.isArray(model[name])) model[name] = [];
6
+ };
7
+ //#endregion
8
+ export { effect };
@@ -7,7 +7,7 @@ var _hoisted_2 = {
7
7
  key: 1,
8
8
  class: "m-fields-radio-group__text"
9
9
  };
10
- var RadioGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
10
+ var RadioGroup_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
11
11
  name: "MFormRadioGroup",
12
12
  __name: "RadioGroup",
13
13
  props: {
@@ -31,10 +31,12 @@ var RadioGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
31
31
  const itemComponent = computed(() => props.config.childType === "button" ? TMagicRadioButton : TMagicRadio);
32
32
  const emit = __emit;
33
33
  const clickHandler = (item) => {
34
+ if (props.disabled) return;
34
35
  emit("change", props.model[props.name] === item ? "" : item);
35
36
  };
36
37
  useAddField(props.prop);
37
38
  const iconSize = computed(() => {
39
+ if (props.config.iconSize) return props.config.iconSize;
38
40
  if (props.size === "small") return "14";
39
41
  if (props.size === "large") return "16";
40
42
  return "16";
@@ -44,7 +46,8 @@ var RadioGroup_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
44
46
  key: 0,
45
47
  "model-value": __props.model[__props.name],
46
48
  size: __props.size,
47
- disabled: __props.disabled
49
+ disabled: __props.disabled,
50
+ class: "icon-{{ iconSize }}"
48
51
  }, {
49
52
  default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.config.options, (option) => {
50
53
  return openBlock(), createBlock(resolveDynamicComponent(itemComponent.value), {
@@ -1,11 +1,11 @@
1
- import { useAddField } from "../utils/useAddField.js";
2
1
  import { getConfig } from "../utils/config.js";
2
+ import { useAddField } from "../utils/useAddField.js";
3
3
  import { Fragment, createBlock, createCommentVNode, createElementBlock, defineComponent, inject, mergeProps, nextTick, openBlock, ref, renderList, resolveDirective, resolveDynamicComponent, unref, watch, watchEffect, withCtx, withDirectives } from "vue";
4
- import { TMagicSelect, getDesignConfig } from "@tmagic/design";
5
4
  import { getValueByKeyPath } from "@tmagic/utils";
5
+ import { TMagicSelect, getDesignConfig } from "@tmagic/design";
6
6
  //#region packages/form/src/fields/Select.vue?vue&type=script&setup=true&lang.ts
7
7
  var _hoisted_1 = { key: 2 };
8
- var Select_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
8
+ var Select_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
9
9
  name: "MFormSelect",
10
10
  __name: "Select",
11
11
  props: {
@@ -199,7 +199,10 @@ var Select_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
199
199
  prop: props.prop,
200
200
  postOptions
201
201
  });
202
- let initData = getValueByKeyPath(initRoot || root, res);
202
+ let initData;
203
+ try {
204
+ initData = getValueByKeyPath(initRoot || root, res);
205
+ } catch {}
203
206
  if (initData) {
204
207
  if (!Array.isArray(initData)) initData = [initData];
205
208
  if (typeof option.item === "function") options = option.item(initData);
@@ -230,7 +233,12 @@ var Select_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
230
233
  const v = props.model[props.name];
231
234
  if (Array.isArray(v) ? !v.length : typeof v === "undefined") return;
232
235
  if (typeof v === "undefined" || hasOption(v)) return;
233
- setOptions(await getInitOption());
236
+ try {
237
+ const data = await getInitOption();
238
+ setOptions(data);
239
+ } catch {
240
+ setOptions([]);
241
+ }
234
242
  };
235
243
  watch(() => props.model?.[props.name], () => {
236
244
  initOption();
@@ -325,7 +333,7 @@ var Select_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
325
333
  }), 128)) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(options.value, (option) => {
326
334
  return openBlock(), createBlock(resolveDynamicComponent(unref(optionComponent)?.component || "el-option"), mergeProps({
327
335
  class: "tmagic-design-option",
328
- key: __props.config.valueKey ? option.value[__props.config.valueKey] : option.value
336
+ key: __props.config.valueKey ? option.value?.[__props.config.valueKey] : option.value
329
337
  }, { ref_for: true }, unref(optionComponent)?.props({
330
338
  label: option.text,
331
339
  value: option.value,
@@ -2,7 +2,7 @@ import { useAddField } from "../utils/useAddField.js";
2
2
  import { computed, createBlock, defineComponent, openBlock, unref } from "vue";
3
3
  import { TMagicSwitch } from "@tmagic/design";
4
4
  //#region packages/form/src/fields/Switch.vue?vue&type=script&setup=true&lang.ts
5
- var Switch_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var Switch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MFormSwitch",
7
7
  __name: "Switch",
8
8
  props: {
@@ -1,8 +1,8 @@
1
1
  import { useAddField } from "../utils/useAddField.js";
2
2
  import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, inject, normalizeClass, openBlock, readonly, ref, shallowRef, toDisplayString, unref, watch, withCtx, withModifiers } from "vue";
3
3
  import { debounce } from "lodash-es";
4
- import { TMagicButton, TMagicInput } from "@tmagic/design";
5
4
  import { isNumber } from "@tmagic/utils";
5
+ import { TMagicButton, TMagicInput } from "@tmagic/design";
6
6
  import { createPopper } from "@popperjs/core";
7
7
  //#region packages/form/src/fields/Text.vue?vue&type=script&setup=true&lang.ts
8
8
  var _hoisted_1 = { key: 0 };
@@ -19,7 +19,7 @@ var _hoisted_8 = { style: {
19
19
  "display": "flex",
20
20
  "justify-content": "flex-end"
21
21
  } };
22
- var Text_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
22
+ var Text_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
23
23
  name: "MFormText",
24
24
  __name: "Text",
25
25
  props: {
@@ -120,14 +120,17 @@ var Text_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
120
120
  const ctrl = navigator.platform.match("Mac") ? $event.metaKey : $event.ctrlKey;
121
121
  const shift = $event.shiftKey;
122
122
  const alt = $event.altKey;
123
- if (arrowUp) if (ctrl) num += 100;
124
- else if (alt) num = (num * 1e4 + 1e3) / 1e4;
125
- else if (shift) num = num + 10;
126
- else num += 1;
127
- else if (arrowDown) if (ctrl) num -= 100;
128
- else if (alt) num = (num * 1e4 - 1e3) / 1e4;
129
- else if (shift) num -= 10;
130
- else num -= 1;
123
+ if (arrowUp) {
124
+ if (ctrl) num += 100;
125
+ else if (alt) num = (num * 1e4 + 1e3) / 1e4;
126
+ else if (shift) num = num + 10;
127
+ else num += 1;
128
+ } else if (arrowDown) {
129
+ if (ctrl) num -= 100;
130
+ else if (alt) num = (num * 1e4 - 1e3) / 1e4;
131
+ else if (shift) num -= 10;
132
+ else num -= 1;
133
+ }
131
134
  props.model[props.name] = `${num}${unit || ""}`;
132
135
  emit("change", props.model[props.name]);
133
136
  };
@@ -2,7 +2,7 @@ import { useAddField } from "../utils/useAddField.js";
2
2
  import { createBlock, defineComponent, inject, openBlock, ref, unref, watch } from "vue";
3
3
  import { TMagicInput } from "@tmagic/design";
4
4
  //#region packages/form/src/fields/Textarea.vue?vue&type=script&setup=true&lang.ts
5
- var Textarea_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var Textarea_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MFormTextarea",
7
7
  __name: "Textarea",
8
8
  props: {
@@ -2,7 +2,7 @@ import { useAddField } from "../utils/useAddField.js";
2
2
  import { createBlock, defineComponent, openBlock, unref } from "vue";
3
3
  import { TMagicTimePicker } from "@tmagic/design";
4
4
  //#region packages/form/src/fields/Time.vue?vue&type=script&setup=true&lang.ts
5
- var Time_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var Time_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MFormTime",
7
7
  __name: "Time",
8
8
  props: {
@@ -1,10 +1,10 @@
1
- import { useAddField } from "../utils/useAddField.js";
2
1
  import { datetimeFormatter } from "../utils/form.js";
2
+ import { useAddField } from "../utils/useAddField.js";
3
3
  import { createBlock, defineComponent, onUnmounted, openBlock, ref, unref, watch } from "vue";
4
- import { TMagicTimePicker } from "@tmagic/design";
5
4
  import dayjs from "dayjs";
5
+ import { TMagicTimePicker } from "@tmagic/design";
6
6
  //#region packages/form/src/fields/Timerange.vue?vue&type=script&setup=true&lang.ts
7
- var Timerange_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
+ var Timerange_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
8
  name: "MFormTimeRange",
9
9
  __name: "Timerange",
10
10
  props: {
@@ -0,0 +1,13 @@
1
+ import { FORM_CONTEXT_KEY, FORM_DIFF_CONFIG_KEY, FORM_TYPE_MATCH_VALID_KEY } from "./schema.js";
2
+ import { isLeafFieldType } from "./utils/fieldValueEffects.js";
3
+ import { MAX_SUGGESTION_OPTIONS, clearTypeMatchRules, deleteTypeMatchRule, getTypeMatchRule, optionSuggestion, stringifyExampleValue, validateTypeMatch } from "./utils/typeMatch.js";
4
+ import { createFormStateProxy, mergeFormContexts } from "./utils/formStateProxy.js";
5
+ import { adaptFormValidator, appendProp, createFormStateBase, createObjectProp, createValues, datetimeFormatter, display, filterFunction, getDataByPage, getItemProp, getNativeRules, getRules, initValue, isValidName, resolveItemType, sortArray, sortChange } from "./utils/form.js";
6
+ import { FieldInnerConfigError, applyMountValueEffects, collectValidatableFields, isFieldInnerConfigError } from "./utils/collectFields.js";
7
+ import { formatValidateError, getTextByName } from "./utils/validateError.js";
8
+ import { createHeadlessFormState, validateValues } from "./utils/validateValues.js";
9
+ import { submitForm, validateForm } from "./utils/submitHeadless.js";
10
+ import { clearFields, getField, mergeFieldOptions, registerBuiltInFields, registerField, registerFields, unregisterField } from "./utils/registerField.js";
11
+ import { builtInFields } from "./utils/builtInFields.js";
12
+ export * from "@tmagic/form-schema";
13
+ export { FORM_CONTEXT_KEY, FORM_DIFF_CONFIG_KEY, FORM_TYPE_MATCH_VALID_KEY, FieldInnerConfigError, MAX_SUGGESTION_OPTIONS, adaptFormValidator, appendProp, applyMountValueEffects, builtInFields, clearFields, clearTypeMatchRules, collectValidatableFields, createFormStateBase, createFormStateProxy, createHeadlessFormState, createObjectProp, createValues, datetimeFormatter, deleteTypeMatchRule, display, filterFunction, formatValidateError, getDataByPage, getField as getFormField, getItemProp, getNativeRules, getRules, getTextByName, getTypeMatchRule, initValue, isFieldInnerConfigError, isLeafFieldType, isValidName, mergeFieldOptions, mergeFormContexts, optionSuggestion, registerBuiltInFields, registerField, registerFields, resolveItemType, sortArray, sortChange, stringifyExampleValue, submitForm, unregisterField, validateForm, validateTypeMatch, validateValues };
package/dist/es/index.js CHANGED
@@ -1,12 +1,17 @@
1
- import "./_virtual/_rolldown/runtime.js";
2
- import { FORM_DIFF_CONFIG_KEY } from "./schema.js";
1
+ import { FORM_CONTEXT_KEY, FORM_DIFF_CONFIG_KEY, FORM_TYPE_MATCH_VALID_KEY } from "./schema.js";
2
+ import { isLeafFieldType } from "./utils/fieldValueEffects.js";
3
+ import { MAX_SUGGESTION_OPTIONS, clearTypeMatchRules, deleteTypeMatchRule, getTypeMatchRule, optionSuggestion, stringifyExampleValue, validateTypeMatch } from "./utils/typeMatch.js";
4
+ import { createFormStateProxy, mergeFormContexts } from "./utils/formStateProxy.js";
5
+ import { adaptFormValidator, appendProp, createFormStateBase, createObjectProp, createValues, datetimeFormatter, display, filterFunction, getDataByPage, getItemProp, getNativeRules, getRules, initValue, isValidName, resolveItemType, sortArray, sortChange } from "./utils/form.js";
6
+ import { FieldInnerConfigError, applyMountValueEffects, collectValidatableFields, isFieldInnerConfigError } from "./utils/collectFields.js";
7
+ import { formatValidateError, getTextByName } from "./utils/validateError.js";
8
+ import { createHeadlessFormState, validateValues } from "./utils/validateValues.js";
3
9
  import { useAddField } from "./utils/useAddField.js";
4
10
  import Hidden_default from "./fields/Hidden.js";
5
- import { deleteField, getField, registerField } from "./utils/config.js";
6
- import { createObjectProp, createValues, datetimeFormatter, display, filterFunction, getDataByPage, getRules, initValue, sortArray, sortChange } from "./utils/form.js";
11
+ import { clearFields, getField, mergeFieldOptions, registerBuiltInFields, registerField, registerFields, unregisterField } from "./utils/registerField.js";
7
12
  import Container_default from "./containers/Container.js";
8
13
  import Form_default from "./Form.js";
9
- import { submitForm } from "./submitForm.js";
14
+ import { stripTabItemsLazy, submitForm, validateForm } from "./submitForm.js";
10
15
  import FormDialog_default from "./FormDialog.js";
11
16
  import FormDrawer_default from "./FormDrawer.js";
12
17
  import FormBox_default from "./FormBox.js";
@@ -18,25 +23,27 @@ import Tabs_default from "./containers/Tabs.js";
18
23
  import TableGroupList_default from "./containers/table-group-list/TableGroupList.js";
19
24
  import Text_default from "./fields/Text.js";
20
25
  import Number_default from "./fields/Number.js";
21
- import NumberRange_default from "./fields/NumberRange.js";
26
+ import Index_default$5 from "./fields/NumberRange/Index.js";
22
27
  import Textarea_default from "./fields/Textarea.js";
23
- import Date_default from "./fields/Date.js";
24
- import DateTime_default from "./fields/DateTime.js";
28
+ import Index_default$1 from "./fields/Date/Index.js";
29
+ import Index_default$2 from "./fields/DateTime/Index.js";
25
30
  import Time_default from "./fields/Time.js";
26
31
  import Checkbox_default from "./fields/Checkbox.js";
27
32
  import Switch_default from "./fields/Switch.js";
28
33
  import Daterange_default from "./fields/Daterange.js";
29
34
  import Timerange_default from "./fields/Timerange.js";
30
35
  import ColorPicker_default from "./fields/ColorPicker.js";
31
- import CheckboxGroup_default from "./fields/CheckboxGroup.js";
36
+ import Index_default from "./fields/CheckboxGroup/Index.js";
32
37
  import RadioGroup_default from "./fields/RadioGroup.js";
33
- import Display_default from "./fields/Display.js";
38
+ import Index_default$3 from "./fields/Display/Index.js";
34
39
  import Link_default from "./fields/Link.js";
35
40
  import Select_default from "./fields/Select.js";
36
41
  import Cascader_default from "./fields/Cascader.js";
37
- import DynamicField_default from "./fields/DynamicField.js";
42
+ import Index_default$4 from "./fields/DynamicField/Index.js";
43
+ import { builtInFields } from "./utils/builtInFields.js";
38
44
  import plugin_default from "./plugin.js";
39
45
  export * from "@tmagic/form-schema";
46
+ //#region packages/form/src/index.ts
40
47
  var createForm = (config) => config;
41
48
  //#endregion
42
- export { FORM_DIFF_CONFIG_KEY, Cascader_default as MCascader, Checkbox_default as MCheckbox, CheckboxGroup_default as MCheckboxGroup, ColorPicker_default as MColorPicker, Container_default as MContainer, Date_default as MDate, DateTime_default as MDateTime, Daterange_default as MDaterange, Display_default as MDisplay, DynamicField_default as MDynamicField, Fieldset_default as MFieldset, FlexLayout_default as MFlexLayout, Form_default as MForm, FormBox_default as MFormBox, FormDialog_default as MFormDialog, FormDrawer_default as MFormDrawer, TableGroupList_default as MGroupList, Hidden_default as MHidden, Link_default as MLink, Number_default as MNumber, NumberRange_default as MNumberRange, Panel_default as MPanel, RadioGroup_default as MRadioGroup, Row_default as MRow, Select_default as MSelect, Switch_default as MSwitch, TableGroupList_default as MTable, TableGroupList_default as MTableGroupList, Tabs_default as MTabs, Text_default as MText, Textarea_default as MTextarea, Time_default as MTime, Timerange_default as MTimerange, createForm, createObjectProp, createValues, datetimeFormatter, plugin_default as default, deleteField as deleteFormField, display, filterFunction, getDataByPage, getField as getFormField, getRules, initValue, registerField as registerFormField, sortArray, sortChange, submitForm, useAddField };
49
+ export { FORM_CONTEXT_KEY, FORM_DIFF_CONFIG_KEY, FORM_TYPE_MATCH_VALID_KEY, FieldInnerConfigError, MAX_SUGGESTION_OPTIONS, Cascader_default as MCascader, Checkbox_default as MCheckbox, Index_default as MCheckboxGroup, ColorPicker_default as MColorPicker, Container_default as MContainer, Index_default$1 as MDate, Index_default$2 as MDateTime, Daterange_default as MDaterange, Index_default$3 as MDisplay, Index_default$4 as MDynamicField, Fieldset_default as MFieldset, FlexLayout_default as MFlexLayout, Form_default as MForm, FormBox_default as MFormBox, FormDialog_default as MFormDialog, FormDrawer_default as MFormDrawer, TableGroupList_default as MGroupList, Hidden_default as MHidden, Link_default as MLink, Number_default as MNumber, Index_default$5 as MNumberRange, Panel_default as MPanel, RadioGroup_default as MRadioGroup, Row_default as MRow, Select_default as MSelect, Switch_default as MSwitch, TableGroupList_default as MTable, TableGroupList_default as MTableGroupList, Tabs_default as MTabs, Text_default as MText, Textarea_default as MTextarea, Time_default as MTime, Timerange_default as MTimerange, adaptFormValidator, appendProp, applyMountValueEffects, builtInFields, clearFields, clearTypeMatchRules, collectValidatableFields, createForm, createFormStateBase, createFormStateProxy, createHeadlessFormState, createObjectProp, createValues, datetimeFormatter, plugin_default as default, deleteTypeMatchRule, display, filterFunction, formatValidateError, getDataByPage, getField as getFormField, getItemProp, getNativeRules, getRules, getTextByName, getTypeMatchRule, initValue, isFieldInnerConfigError, isLeafFieldType, isValidName, mergeFieldOptions, mergeFormContexts, optionSuggestion, registerBuiltInFields, registerField, registerFields, resolveItemType, sortArray, sortChange, stringifyExampleValue, stripTabItemsLazy, submitForm, unregisterField, useAddField, validateForm, validateTypeMatch, validateValues };
package/dist/es/plugin.js CHANGED
@@ -1,5 +1,6 @@
1
- import Hidden_default from "./fields/Hidden.js";
2
1
  import { setConfig } from "./utils/config.js";
2
+ import Hidden_default from "./fields/Hidden.js";
3
+ import { registerBuiltInFields, registerFields } from "./utils/registerField.js";
3
4
  import Container_default from "./containers/Container.js";
4
5
  import Form_default from "./Form.js";
5
6
  import FormDialog_default from "./FormDialog.js";
@@ -12,64 +13,81 @@ import Tabs_default from "./containers/Tabs.js";
12
13
  import TableGroupList_default from "./containers/table-group-list/TableGroupList.js";
13
14
  import Text_default from "./fields/Text.js";
14
15
  import Number_default from "./fields/Number.js";
15
- import NumberRange_default from "./fields/NumberRange.js";
16
+ import Index_default from "./fields/NumberRange/Index.js";
16
17
  import Textarea_default from "./fields/Textarea.js";
17
- import Date_default from "./fields/Date.js";
18
- import DateTime_default from "./fields/DateTime.js";
18
+ import Index_default$1 from "./fields/Date/Index.js";
19
+ import Index_default$2 from "./fields/DateTime/Index.js";
19
20
  import Time_default from "./fields/Time.js";
20
21
  import Checkbox_default from "./fields/Checkbox.js";
21
22
  import Switch_default from "./fields/Switch.js";
22
23
  import Daterange_default from "./fields/Daterange.js";
23
24
  import Timerange_default from "./fields/Timerange.js";
24
25
  import ColorPicker_default from "./fields/ColorPicker.js";
25
- import CheckboxGroup_default from "./fields/CheckboxGroup.js";
26
+ import Index_default$3 from "./fields/CheckboxGroup/Index.js";
26
27
  import RadioGroup_default from "./fields/RadioGroup.js";
27
- import Display_default from "./fields/Display.js";
28
+ import Index_default$4 from "./fields/Display/Index.js";
28
29
  import Link_default from "./fields/Link.js";
29
30
  import Select_default from "./fields/Select.js";
30
31
  import Cascader_default from "./fields/Cascader.js";
31
- import DynamicField_default from "./fields/DynamicField.js";
32
+ import Index_default$5 from "./fields/DynamicField/Index.js";
33
+ import { builtInFields } from "./utils/builtInFields.js";
32
34
  import Step_default from "./containers/Step.js";
33
35
  /* empty css */
34
36
  //#region packages/form/src/plugin.ts
37
+ var builtInFieldVue = {
38
+ text: { component: Text_default },
39
+ "img-upload": { component: Text_default },
40
+ number: { component: Number_default },
41
+ "number-range": { component: Index_default },
42
+ textarea: { component: Textarea_default },
43
+ hidden: { component: Hidden_default },
44
+ date: { component: Index_default$1 },
45
+ datetime: { component: Index_default$2 },
46
+ daterange: { component: Daterange_default },
47
+ timerange: { component: Timerange_default },
48
+ time: { component: Time_default },
49
+ checkbox: { component: Checkbox_default },
50
+ switch: { component: Switch_default },
51
+ "color-picker": { component: ColorPicker_default },
52
+ "checkbox-group": { component: Index_default$3 },
53
+ "radio-group": { component: RadioGroup_default },
54
+ display: { component: Index_default$4 },
55
+ link: { component: Link_default },
56
+ select: { component: Select_default },
57
+ cascader: { component: Cascader_default },
58
+ "dynamic-field": { component: Index_default$5 },
59
+ container: { container: Container_default },
60
+ tab: { container: Tabs_default },
61
+ row: { container: Row_default },
62
+ "flex-layout": { container: FlexLayout_default },
63
+ fieldset: { container: Fieldset_default },
64
+ panel: { container: Panel_default },
65
+ step: { container: Step_default },
66
+ table: { container: TableGroupList_default },
67
+ "group-list": { container: TableGroupList_default },
68
+ "table-group-list": { container: TableGroupList_default }
69
+ };
35
70
  var defaultInstallOpt = {};
36
- var plugin_default = { install(app, opt = {}) {
37
- const option = Object.assign(defaultInstallOpt, opt);
71
+ var plugin_default = {
72
+ /**
73
+ * 安装 `@tmagic/form`:登记内置字段、挂载 `m-form` / `m-form-dialog` / `m-form-drawer`。
74
+ *
75
+ * @param app - Vue 应用
76
+ * @param [opt] - 安装选项
77
+ */
78
+ install(app, opt = {}) {
79
+ const option = {
80
+ ...defaultInstallOpt,
81
+ ...opt
82
+ };
38
83
  app.config.globalProperties.$MAGIC_FORM = option;
39
84
  setConfig(option);
85
+ registerBuiltInFields(builtInFields);
86
+ registerBuiltInFields(builtInFieldVue, app);
87
+ if (option.fields) registerFields(option.fields, app);
40
88
  app.component("m-form", Form_default);
41
89
  app.component("m-form-dialog", FormDialog_default);
42
90
  app.component("m-form-drawer", FormDrawer_default);
43
- app.component("m-form-container", Container_default);
44
- app.component("m-form-fieldset", Fieldset_default);
45
- app.component("m-form-group-list", TableGroupList_default);
46
- app.component("m-form-panel", Panel_default);
47
- app.component("m-form-row", Row_default);
48
- app.component("m-form-step", Step_default);
49
- app.component("m-form-table", TableGroupList_default);
50
- app.component("m-form-tab", Tabs_default);
51
- app.component("m-form-flex-layout", FlexLayout_default);
52
- app.component("m-fields-text", Text_default);
53
- app.component("m-fields-img-upload", Text_default);
54
- app.component("m-fields-number", Number_default);
55
- app.component("m-fields-number-range", NumberRange_default);
56
- app.component("m-fields-textarea", Textarea_default);
57
- app.component("m-fields-hidden", Hidden_default);
58
- app.component("m-fields-date", Date_default);
59
- app.component("m-fields-datetime", DateTime_default);
60
- app.component("m-fields-daterange", Daterange_default);
61
- app.component("m-fields-timerange", Timerange_default);
62
- app.component("m-fields-time", Time_default);
63
- app.component("m-fields-checkbox", Checkbox_default);
64
- app.component("m-fields-switch", Switch_default);
65
- app.component("m-fields-color-picker", ColorPicker_default);
66
- app.component("m-fields-checkbox-group", CheckboxGroup_default);
67
- app.component("m-fields-radio-group", RadioGroup_default);
68
- app.component("m-fields-display", Display_default);
69
- app.component("m-fields-link", Link_default);
70
- app.component("m-fields-select", Select_default);
71
- app.component("m-fields-cascader", Cascader_default);
72
- app.component("m-fields-dynamic-field", DynamicField_default);
73
91
  } };
74
92
  //#endregion
75
93
  export { plugin_default as default };
package/dist/es/schema.js CHANGED
@@ -1,6 +1,15 @@
1
- import "./_virtual/_rolldown/runtime.js";
2
1
  export * from "@tmagic/form-schema";
3
2
  //#region packages/form/src/schema.ts
4
3
  var FORM_DIFF_CONFIG_KEY = Symbol("mFormDiffConfig");
4
+ var FORM_TYPE_MATCH_VALID_KEY = Symbol("mFormTypeMatchValid");
5
+ /**
6
+ * 宿主业务上下文,由 `MForm`(或更外层的 Editor)通过 `provide` 下发。
7
+ *
8
+ * 嵌套表单(Link 子表单、FormBox、临时校验表单等)会自动继承最近祖先的 context,
9
+ * 无需层层透传。
10
+ *
11
+ * 配置回调统一通过 `mForm.xxx` 读取,由 formState 的读穿 Proxy 落到这里。
12
+ */
13
+ var FORM_CONTEXT_KEY = Symbol("mFormContext");
5
14
  //#endregion
6
- export { FORM_DIFF_CONFIG_KEY };
15
+ export { FORM_CONTEXT_KEY, FORM_DIFF_CONFIG_KEY, FORM_TYPE_MATCH_VALID_KEY };