@shwfed/config 2.7.4 → 2.7.6
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.
- package/dist/mcp.mjs +25 -5
- package/dist/module.json +1 -1
- package/dist/preview/assets/{badge-BKq7Eh7r.js → badge-C-IvPZBx.js} +1 -1
- package/dist/preview/assets/{config-DD3McP6M.js → config-B7hXY5FF.js} +1 -1
- package/dist/preview/assets/{config-CXomiRuI.js → config-Bl8L6943.js} +1 -1
- package/dist/preview/assets/{config-Dg3cJb4i.js → config-C947O8za.js} +1 -1
- package/dist/preview/assets/{config-De_RAxft.js → config-DXlCQMVi.js} +1 -1
- package/dist/preview/assets/{config-DpTBe8_L.js → config-DhAntnE5.js} +1 -1
- package/dist/preview/assets/{config-DM58--pQ.js → config-Dj0rEZRq.js} +1 -1
- package/dist/preview/assets/{config-C2XmKu42.js → config-DppExb4h.js} +1 -1
- package/dist/preview/assets/{config-CnsvNcA2.js → config-_aVQvlhc.js} +1 -1
- package/dist/preview/assets/{config-C31gRv6X.js → config-l01zamcS.js} +1 -1
- package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-D-K8Bmbj.js → definition.vue_vue_type_script_setup_true_lang-BbuC0qEM.js} +1 -1
- package/dist/preview/assets/index-B0PL01fm.css +1 -0
- package/dist/preview/assets/index-BNaI1T0H.js +680 -0
- package/dist/preview/assets/index-BwoBmSxu.js +1 -0
- package/dist/preview/assets/{index-4Jigs5K_.js → index-DiC1rvCq.js} +1 -1
- package/dist/preview/assets/{item-DnUV5B-b.js → item-GFiAkFW6.js} +1 -1
- package/dist/preview/assets/{runtime-ChaoQZI9.js → runtime-5h5U6Ozr.js} +1 -1
- package/dist/preview/assets/{runtime-CG4uOgGu.js → runtime-B6dXW6zW.js} +1 -1
- package/dist/preview/assets/{runtime-BqhvXsJ-.js → runtime-BEOIc4zU.js} +1 -1
- package/dist/preview/assets/{runtime-DnlIppMg.js → runtime-BQnHKogz.js} +1 -1
- package/dist/preview/assets/{runtime-W5CcSnyo.js → runtime-Bx7G-5dR.js} +1 -1
- package/dist/preview/assets/{runtime-Dj43RjZC.js → runtime-DmV_M4B_.js} +1 -1
- package/dist/preview/assets/{runtime-Dhi2Tk84.js → runtime-TNDFpOlo.js} +1 -1
- package/dist/preview/assets/{runtime-DAfJmoV1.js → runtime-g9hb36Vh.js} +1 -1
- package/dist/preview/assets/{runtime-BCxzICuW.js → runtime-kLWO8JbC.js} +1 -1
- package/dist/preview/index.html +2 -2
- package/dist/runtime/components/block-layout-editor/index.d.vue.ts +19 -1
- package/dist/runtime/components/block-layout-editor/index.vue +131 -38
- package/dist/runtime/components/block-layout-editor/index.vue.d.ts +19 -1
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/config.d.vue.ts +4 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/config.vue.d.ts +4 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/runtime.d.vue.ts +4 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/runtime.vue.d.ts +4 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/schema.d.ts +4 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.d.vue.ts +4 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.vue.d.ts +4 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.d.vue.ts +4 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.vue.d.ts +4 -0
- package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/schema.d.ts +6 -0
- package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/runtime.vue +46 -26
- package/dist/runtime/components/config/blocks/2026-06-02/com.shwfed.block.card/schema.js +1 -1
- package/dist/runtime/components/config/config.vue +9 -1
- package/dist/runtime/components/config/index.vue +11 -1
- package/dist/runtime/components/config/schema.d.ts +25 -0
- package/dist/runtime/components/config/schema.js +8 -0
- package/dist/runtime/components/form/config.vue +49 -1
- package/dist/runtime/components/form/fields/2026-04-24/com.shwfed.form.field.actions/schema.d.ts +1 -0
- package/dist/runtime/components/form/fields/2026-04-24/com.shwfed.form.field.actions/schema.js +4 -1
- package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.list/schema.d.ts +1 -0
- package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.list/schema.js +4 -1
- package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/schema.d.ts +1 -0
- package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/schema.js +4 -1
- package/dist/runtime/components/form/fields/2026-05-20/com.shwfed.form.field.collapsible/schema.d.ts +1 -0
- package/dist/runtime/components/form/fields/2026-05-20/com.shwfed.form.field.collapsible/schema.js +4 -1
- package/dist/runtime/components/form/index.d.vue.ts +1 -0
- package/dist/runtime/components/form/index.vue +8 -0
- package/dist/runtime/components/form/index.vue.d.ts +1 -0
- package/dist/runtime/components/form/schema.d.ts +25 -0
- package/dist/runtime/components/form/schema.js +17 -0
- package/dist/runtime/components/form/unit-config.vue +32 -4
- package/dist/runtime/components/form/utils/history.d.ts +8 -0
- package/dist/runtime/components/form/utils/history.js +8 -0
- package/dist/runtime/components/form/utils/resolve.d.ts +9 -0
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +26 -26
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +26 -26
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +26 -26
- package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +26 -26
- package/dist/runtime/components/table/schema.d.ts +8 -0
- package/dist/runtime/components/ui/command/CommandItem.d.vue.ts +2 -2
- package/dist/runtime/components/ui/command/CommandItem.vue +1 -0
- package/dist/runtime/components/ui/command/CommandItem.vue.d.ts +2 -2
- package/dist/runtime/components/ui/context-menu/ContextMenuContent.d.vue.ts +0 -1
- package/dist/runtime/components/ui/context-menu/ContextMenuContent.vue +3 -4
- package/dist/runtime/components/ui/context-menu/ContextMenuContent.vue.d.ts +0 -1
- package/dist/runtime/components/ui/expression-editor/CodeMirrorInput.vue +17 -2
- package/dist/runtime/components/ui/input-group/InputGroupCombobox.d.vue.ts +2 -8
- package/dist/runtime/components/ui/input-group/InputGroupCombobox.vue +6 -5
- package/dist/runtime/components/ui/input-group/InputGroupCombobox.vue.d.ts +2 -8
- package/dist/runtime/components/ui/popover/PopoverContent.d.vue.ts +0 -1
- package/dist/runtime/components/ui/popover/PopoverContent.vue +3 -4
- package/dist/runtime/components/ui/popover/PopoverContent.vue.d.ts +0 -1
- package/dist/runtime/components/ui/tooltip/TooltipContent.d.vue.ts +0 -1
- package/dist/runtime/components/ui/tooltip/TooltipContent.vue +3 -4
- package/dist/runtime/components/ui/tooltip/TooltipContent.vue.d.ts +0 -1
- package/dist/runtime/share/event-bus.d.ts +23 -4
- package/package.json +1 -1
- package/dist/preview/assets/index-CfwL2UCH.js +0 -680
- package/dist/preview/assets/index-DNHGrCDe.css +0 -1
- package/dist/preview/assets/index-DUo1pTg2.js +0 -1
package/dist/runtime/components/form/fields/2026-05-18/com.shwfed.form.field.table/schema.js
CHANGED
|
@@ -8,7 +8,10 @@ export const metadata = {
|
|
|
8
8
|
name: "\u8868\u683C",
|
|
9
9
|
icon: "fluent:table-20-regular",
|
|
10
10
|
w: { initial: 12, min: 6, max: Infinity },
|
|
11
|
-
h: { initial: 10, min: 5, max: Infinity, grow: true }
|
|
11
|
+
h: { initial: 10, min: 5, max: Infinity, grow: true },
|
|
12
|
+
// Nested table/column editor — too complex for the fullscreen inline-config
|
|
13
|
+
// pane; keep the (fullscreen-exiting) drill-down.
|
|
14
|
+
inlineConfig: false
|
|
12
15
|
};
|
|
13
16
|
export function schema(configure) {
|
|
14
17
|
const Table = Schema.suspend(
|
package/dist/runtime/components/form/fields/2026-05-20/com.shwfed.form.field.collapsible/schema.js
CHANGED
|
@@ -7,7 +7,10 @@ export const metadata = {
|
|
|
7
7
|
name: "\u53EF\u6298\u53E0\u533A\u57DF",
|
|
8
8
|
icon: "fluent:chevron-down-20-regular",
|
|
9
9
|
w: { initial: 12, min: 4, max: Infinity },
|
|
10
|
-
h: { initial: 4, min: 2, max: Infinity, grow: true }
|
|
10
|
+
h: { initial: 4, min: 2, max: Infinity, grow: true },
|
|
11
|
+
// Hosts a nested sub-form (its own fields + layout) — too complex for the
|
|
12
|
+
// fullscreen inline-config pane; keep the (fullscreen-exiting) drill-down.
|
|
13
|
+
inlineConfig: false
|
|
11
14
|
};
|
|
12
15
|
export function schema(configure) {
|
|
13
16
|
const Unit = Schema.suspend(() => FormUnit(configure));
|
|
@@ -16,6 +16,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
|
|
|
16
16
|
validate: () => Promise<boolean>;
|
|
17
17
|
undo: () => void;
|
|
18
18
|
redo: () => void;
|
|
19
|
+
reset: () => void;
|
|
19
20
|
canUndo: import("vue").Ref<boolean, boolean>;
|
|
20
21
|
canRedo: import("vue").Ref<boolean, boolean>;
|
|
21
22
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
@@ -16,6 +16,7 @@ import { provideDerivedQuiescence, useDerived } from "./utils/derived";
|
|
|
16
16
|
import { useFormHistory } from "./utils/history";
|
|
17
17
|
import { evaluateInitial } from "./utils/initial";
|
|
18
18
|
import { provideFormValidate } from "../../share/form-validate";
|
|
19
|
+
import { provideEventTarget } from "../../share/event-bus";
|
|
19
20
|
import { provideFormReadonly } from "./utils/readonly";
|
|
20
21
|
import { provideFormState } from "./utils/state";
|
|
21
22
|
import { provideValidation } from "./utils/validation";
|
|
@@ -78,6 +79,12 @@ const validation = provideValidation({
|
|
|
78
79
|
});
|
|
79
80
|
provideFormValidate(validation.validate);
|
|
80
81
|
const formHistory = useFormHistory(state, { quiescence, seeded, dirty: formState.dirty });
|
|
82
|
+
const formInstanceId = config.value?.id ?? crypto.randomUUID();
|
|
83
|
+
provideEventTarget(formInstanceId, {
|
|
84
|
+
"undo": () => Effect.sync(formHistory.undo),
|
|
85
|
+
"redo": () => Effect.sync(formHistory.redo),
|
|
86
|
+
"reset-to-initial": () => Effect.sync(formHistory.reset)
|
|
87
|
+
});
|
|
81
88
|
defineExpose({
|
|
82
89
|
seeded,
|
|
83
90
|
flush: commitBus.flushAll,
|
|
@@ -85,6 +92,7 @@ defineExpose({
|
|
|
85
92
|
validate: validation.validate,
|
|
86
93
|
undo: formHistory.undo,
|
|
87
94
|
redo: formHistory.redo,
|
|
95
|
+
reset: formHistory.reset,
|
|
88
96
|
canUndo: formHistory.canUndo,
|
|
89
97
|
canRedo: formHistory.canRedo
|
|
90
98
|
});
|
|
@@ -16,6 +16,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
|
|
|
16
16
|
validate: () => Promise<boolean>;
|
|
17
17
|
undo: () => void;
|
|
18
18
|
redo: () => void;
|
|
19
|
+
reset: () => void;
|
|
19
20
|
canUndo: import("vue").Ref<boolean, boolean>;
|
|
20
21
|
canRedo: import("vue").Ref<boolean, boolean>;
|
|
21
22
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
@@ -7,6 +7,23 @@ export { commonFieldFields } from './utils/common.js';
|
|
|
7
7
|
export { getStructFieldTitle, getStructFieldDescription } from './utils/schema-meta.js';
|
|
8
8
|
export { Align, DEFAULT_GAP, LayoutSet, validatePlacements } from '../../share/layout.js';
|
|
9
9
|
declare const KIND = "shwfed.component.form";
|
|
10
|
+
export declare const metadata: {
|
|
11
|
+
readonly name: "表单";
|
|
12
|
+
readonly icon: "fluent:form-20-regular";
|
|
13
|
+
readonly operations: readonly [{
|
|
14
|
+
readonly id: "undo";
|
|
15
|
+
readonly name: "撤销";
|
|
16
|
+
readonly icon: "fluent:arrow-undo-20-regular";
|
|
17
|
+
}, {
|
|
18
|
+
readonly id: "redo";
|
|
19
|
+
readonly name: "重做";
|
|
20
|
+
readonly icon: "fluent:arrow-redo-20-regular";
|
|
21
|
+
}, {
|
|
22
|
+
readonly id: "reset-to-initial";
|
|
23
|
+
readonly name: "重置为初始值";
|
|
24
|
+
readonly icon: "fluent:arrow-reset-20-regular";
|
|
25
|
+
}];
|
|
26
|
+
};
|
|
10
27
|
type AnySchema = Schema.Schema<any, any, never>;
|
|
11
28
|
/**
|
|
12
29
|
* The shared body of a form — fields + layouts only, with placement
|
|
@@ -73,10 +90,12 @@ export declare function FormUnit(configure: (env: Environment) => void): Schema.
|
|
|
73
90
|
export { registerFormVariablesIfAbsent };
|
|
74
91
|
export declare function FormConfig(configure: (env: Environment) => void): Schema.refine<{
|
|
75
92
|
readonly style?: string | undefined;
|
|
93
|
+
readonly id?: string | undefined;
|
|
76
94
|
readonly initial?: {
|
|
77
95
|
readonly data: string;
|
|
78
96
|
readonly request?: string | undefined;
|
|
79
97
|
} | undefined;
|
|
98
|
+
readonly displayName?: string | undefined;
|
|
80
99
|
readonly kind: "shwfed.component.form";
|
|
81
100
|
readonly fields: readonly any[];
|
|
82
101
|
readonly layouts: readonly {
|
|
@@ -131,6 +150,8 @@ export declare function FormConfig(configure: (env: Environment) => void): Schem
|
|
|
131
150
|
}>;
|
|
132
151
|
}>>>;
|
|
133
152
|
kind: Schema.tag<"shwfed.component.form">;
|
|
153
|
+
id: Schema.optional<Schema.refine<string, typeof Schema.String>>;
|
|
154
|
+
displayName: Schema.optional<Schema.SchemaClass<string, string, never>>;
|
|
134
155
|
initial: Schema.optional<Schema.transform<Schema.Union<[Schema.Schema<string, string, never>, Schema.Struct<{
|
|
135
156
|
request: Schema.optional<Schema.Schema<string, string, never>>;
|
|
136
157
|
data: Schema.Schema<string, string, never>;
|
|
@@ -143,10 +164,12 @@ export declare function FormConfig(configure: (env: Environment) => void): Schem
|
|
|
143
164
|
}>>;
|
|
144
165
|
export declare function createFormConfig(body: Omit<Schema.Schema.Type<ReturnType<typeof FormConfig>>, 'kind'>): {
|
|
145
166
|
style?: string | undefined;
|
|
167
|
+
id?: string | undefined;
|
|
146
168
|
initial?: {
|
|
147
169
|
readonly data: string;
|
|
148
170
|
readonly request?: string | undefined;
|
|
149
171
|
} | undefined;
|
|
172
|
+
displayName?: string | undefined;
|
|
150
173
|
fields: readonly any[];
|
|
151
174
|
layouts: readonly {
|
|
152
175
|
readonly name: string;
|
|
@@ -181,6 +204,8 @@ export type FormUnitValue = Readonly<{
|
|
|
181
204
|
}>;
|
|
182
205
|
export type FormConfigValue = Readonly<{
|
|
183
206
|
kind: typeof KIND;
|
|
207
|
+
id?: string;
|
|
208
|
+
displayName?: string;
|
|
184
209
|
initial?: InitialSource;
|
|
185
210
|
readonly?: string;
|
|
186
211
|
style?: string;
|
|
@@ -11,6 +11,15 @@ export { commonFieldFields } from "./utils/common.js";
|
|
|
11
11
|
export { getStructFieldTitle, getStructFieldDescription } from "./utils/schema-meta.js";
|
|
12
12
|
export { Align, DEFAULT_GAP, LayoutSet, validatePlacements } from "../../share/layout.js";
|
|
13
13
|
const KIND = "shwfed.component.form";
|
|
14
|
+
export const metadata = {
|
|
15
|
+
name: "\u8868\u5355",
|
|
16
|
+
icon: "fluent:form-20-regular",
|
|
17
|
+
operations: [
|
|
18
|
+
{ id: "undo", name: "\u64A4\u9500", icon: "fluent:arrow-undo-20-regular" },
|
|
19
|
+
{ id: "redo", name: "\u91CD\u505A", icon: "fluent:arrow-redo-20-regular" },
|
|
20
|
+
{ id: "reset-to-initial", name: "\u91CD\u7F6E\u4E3A\u521D\u59CB\u503C", icon: "fluent:arrow-reset-20-regular" }
|
|
21
|
+
]
|
|
22
|
+
};
|
|
14
23
|
function unitFields(configure) {
|
|
15
24
|
const fieldSchemas = allFieldSchemas(configure);
|
|
16
25
|
const Field = fieldSchemas.length === 0 ? Schema.Never : fieldSchemas.length === 1 ? fieldSchemas[0] : Schema.Union(...fieldSchemas);
|
|
@@ -88,6 +97,13 @@ export function FormConfig(configure) {
|
|
|
88
97
|
);
|
|
89
98
|
return Schema.Struct({
|
|
90
99
|
kind: Schema.tag(KIND),
|
|
100
|
+
id: Schema.optional(Schema.UUID.annotations({
|
|
101
|
+
description: "\u8868\u5355\u5B9E\u4F8B\u552F\u4E00\u6807\u8BC6\uFF1B\u4F5C\u4E3A\u4E8B\u4EF6\u76EE\u6807\u88AB op-request \u5F15\u7528"
|
|
102
|
+
})),
|
|
103
|
+
displayName: Schema.optional(Schema.String.annotations({
|
|
104
|
+
title: "\u5185\u90E8\u540D\u79F0",
|
|
105
|
+
description: "\u4EC5\u5728\u914D\u7F6E\u754C\u9762\u53EF\u89C1\u7684\u8868\u5355\u540D\u79F0\uFF0C\u7528\u4E8E\u5728\u4E8B\u4EF6\u76EE\u6807\u7B49\u4F4D\u7F6E\u6807\u8BC6\u8BE5\u8868\u5355\uFF1B\u8FD0\u884C\u65F6\u4E0D\u5C55\u793A"
|
|
106
|
+
})),
|
|
91
107
|
initial: Schema.optional(Initial.annotations({
|
|
92
108
|
title: "\u521D\u59CB\u503C",
|
|
93
109
|
description: "\u8868\u5355\u521D\u59CB\u503C\u7684\u6765\u6E90\uFF1A\u53EF\u9009\u7684 HTTP \u8BF7\u6C42\uFF0C\u52A0\u4E00\u4E2A\u8FD4\u56DE\u521D\u59CB\u503C\u5BF9\u8C61\u7684 CEL \u8868\u8FBE\u5F0F"
|
|
@@ -118,6 +134,7 @@ export function createFormConfig(body) {
|
|
|
118
134
|
export function defaultFormConfig() {
|
|
119
135
|
return {
|
|
120
136
|
kind: KIND,
|
|
137
|
+
id: crypto.randomUUID(),
|
|
121
138
|
fields: [],
|
|
122
139
|
layouts: [{ name: "\u9ED8\u8BA4", layout: { columns: 1, placements: {} } }]
|
|
123
140
|
};
|
|
@@ -218,15 +218,25 @@ async function pasteFields(target) {
|
|
|
218
218
|
}
|
|
219
219
|
toast.success(`\u5DF2\u7C98\u8D34 ${pasted.length} \u4E2A\u5B57\u6BB5`);
|
|
220
220
|
}
|
|
221
|
-
function
|
|
222
|
-
const id = activeFieldId.value;
|
|
223
|
-
if (!id) return;
|
|
221
|
+
function updateField(id, next) {
|
|
224
222
|
const i = unit.value.fields.findIndex((f) => f.id === id);
|
|
225
223
|
if (i < 0) return;
|
|
226
224
|
const fields = [...unit.value.fields];
|
|
227
225
|
fields[i] = next;
|
|
228
226
|
unit.value = { ...unit.value, fields };
|
|
229
227
|
}
|
|
228
|
+
function updateActiveField(next) {
|
|
229
|
+
const id = activeFieldId.value;
|
|
230
|
+
if (!id) return;
|
|
231
|
+
updateField(id, next);
|
|
232
|
+
}
|
|
233
|
+
function fieldById(id) {
|
|
234
|
+
return unit.value.fields.find((f) => f.id === id) ?? null;
|
|
235
|
+
}
|
|
236
|
+
function fieldEntryById(id) {
|
|
237
|
+
const f = fieldById(id);
|
|
238
|
+
return f ? findField(f.type, f.compatibilityDate) ?? null : null;
|
|
239
|
+
}
|
|
230
240
|
const inheritedCEL = injectCELContext();
|
|
231
241
|
function celForMigration(expression, context) {
|
|
232
242
|
return rawCel(expression, { ...celBindings(inheritedCEL), ...context });
|
|
@@ -478,7 +488,25 @@ function isExtraActive(id) {
|
|
|
478
488
|
@delete-items="removeFields"
|
|
479
489
|
@copy-items="copyFields"
|
|
480
490
|
@paste="pasteFields"
|
|
481
|
-
|
|
491
|
+
>
|
|
492
|
+
<!-- Fullscreen inline-config pane body: render the field's own
|
|
493
|
+
config editor for a simple field opened inline, without
|
|
494
|
+
pushing the drill stack. -->
|
|
495
|
+
<template #inline-config="{ itemId }">
|
|
496
|
+
<component
|
|
497
|
+
:is="fieldEntryById(itemId).config"
|
|
498
|
+
v-if="fieldEntryById(itemId)?.config"
|
|
499
|
+
:model-value="fieldById(itemId)"
|
|
500
|
+
@update:model-value="(next) => updateField(itemId, next)"
|
|
501
|
+
/>
|
|
502
|
+
<div
|
|
503
|
+
v-else
|
|
504
|
+
class="text-sm text-red-500"
|
|
505
|
+
>
|
|
506
|
+
未注册的字段类型
|
|
507
|
+
</div>
|
|
508
|
+
</template>
|
|
509
|
+
</BlockLayoutEditor>
|
|
482
510
|
</div>
|
|
483
511
|
</div>
|
|
484
512
|
|
|
@@ -15,6 +15,14 @@ export declare function deepClone<T>(value: T): T;
|
|
|
15
15
|
export type FormHistory = {
|
|
16
16
|
undo: () => void;
|
|
17
17
|
redo: () => void;
|
|
18
|
+
/**
|
|
19
|
+
* Restore the form to its initial (post-seed, post-first-derivation)
|
|
20
|
+
* baseline — the same state `undo` can never rewind past. Written through
|
|
21
|
+
* the normal commit path (not the navigate suppression), so the reset is
|
|
22
|
+
* itself recorded as a history entry and can be undone to recover the
|
|
23
|
+
* discarded edits. A no-op until that baseline has been established.
|
|
24
|
+
*/
|
|
25
|
+
reset: () => void;
|
|
18
26
|
canUndo: Ref<boolean>;
|
|
19
27
|
canRedo: Ref<boolean>;
|
|
20
28
|
};
|
|
@@ -35,6 +35,7 @@ export function useFormHistory(state, options) {
|
|
|
35
35
|
let navigating = false;
|
|
36
36
|
let recording = false;
|
|
37
37
|
let snapshotPending = false;
|
|
38
|
+
let initialSnapshot;
|
|
38
39
|
async function scheduleSnapshot() {
|
|
39
40
|
if (snapshotPending) return;
|
|
40
41
|
snapshotPending = true;
|
|
@@ -54,6 +55,7 @@ export function useFormHistory(state, options) {
|
|
|
54
55
|
tracked.value = capture();
|
|
55
56
|
history.commit();
|
|
56
57
|
history.clear();
|
|
58
|
+
initialSnapshot = clone(tracked.value);
|
|
57
59
|
recording = true;
|
|
58
60
|
});
|
|
59
61
|
function navigate(run) {
|
|
@@ -65,9 +67,15 @@ export function useFormHistory(state, options) {
|
|
|
65
67
|
navigating = false;
|
|
66
68
|
});
|
|
67
69
|
}
|
|
70
|
+
function reset() {
|
|
71
|
+
if (!initialSnapshot) return;
|
|
72
|
+
state.value = deepClone(initialSnapshot.state);
|
|
73
|
+
dirty.value = new Set(initialSnapshot.dirty);
|
|
74
|
+
}
|
|
68
75
|
return {
|
|
69
76
|
undo: () => navigate(() => history.undo()),
|
|
70
77
|
redo: () => navigate(() => history.redo()),
|
|
78
|
+
reset,
|
|
71
79
|
canUndo: history.canUndo,
|
|
72
80
|
canRedo: history.canRedo
|
|
73
81
|
};
|
|
@@ -56,6 +56,15 @@ export type FieldMetadata = Readonly<{
|
|
|
56
56
|
icon: string;
|
|
57
57
|
w: FieldSizeRange;
|
|
58
58
|
h: FieldSizeRange;
|
|
59
|
+
/**
|
|
60
|
+
* Whether this field can be configured *inline* — in a right-docked pane —
|
|
61
|
+
* while the layout editor is in fullscreen. Absent / `true` → supported
|
|
62
|
+
* (the default for simple fields). Set `false` for fields whose config is
|
|
63
|
+
* too large or too structurally nested to fit a docked pane (list, table,
|
|
64
|
+
* actions, collapsible); those keep the drill-down behavior, which exits
|
|
65
|
+
* fullscreen. See `BlockLayoutEditor`'s inline-config pane.
|
|
66
|
+
*/
|
|
67
|
+
inlineConfig?: boolean;
|
|
59
68
|
}>;
|
|
60
69
|
/**
|
|
61
70
|
* Optional creation-time defaults factory. Returns a partial config that
|
|
@@ -33,19 +33,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
33
33
|
readonly message: string;
|
|
34
34
|
}[]] | undefined;
|
|
35
35
|
readonly readonly?: string | undefined;
|
|
36
|
-
readonly write: {
|
|
37
|
-
readonly kind: "binding";
|
|
38
|
-
readonly binding: string;
|
|
39
|
-
} | {
|
|
40
|
-
readonly onChange?: string | undefined;
|
|
41
|
-
readonly kind: "remote";
|
|
42
|
-
readonly triggers?: readonly {
|
|
43
|
-
readonly target: string;
|
|
44
|
-
readonly operation: string;
|
|
45
|
-
}[] | undefined;
|
|
46
|
-
readonly accessor: string;
|
|
47
|
-
readonly successMessage?: string | undefined;
|
|
48
|
-
};
|
|
49
36
|
readonly grow?: boolean | undefined;
|
|
50
37
|
readonly enableSorting?: boolean | undefined;
|
|
51
38
|
readonly options: {
|
|
@@ -90,6 +77,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
90
77
|
}[];
|
|
91
78
|
};
|
|
92
79
|
readonly sortKey?: string | undefined;
|
|
80
|
+
readonly write: {
|
|
81
|
+
readonly kind: "binding";
|
|
82
|
+
readonly binding: string;
|
|
83
|
+
} | {
|
|
84
|
+
readonly onChange?: string | undefined;
|
|
85
|
+
readonly kind: "remote";
|
|
86
|
+
readonly triggers?: readonly {
|
|
87
|
+
readonly target: string;
|
|
88
|
+
readonly operation: string;
|
|
89
|
+
}[] | undefined;
|
|
90
|
+
readonly accessor: string;
|
|
91
|
+
readonly successMessage?: string | undefined;
|
|
92
|
+
};
|
|
93
93
|
}) => any;
|
|
94
94
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
95
95
|
"onUpdate:modelValue"?: ((value: {
|
|
@@ -122,19 +122,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
122
122
|
readonly message: string;
|
|
123
123
|
}[]] | undefined;
|
|
124
124
|
readonly readonly?: string | undefined;
|
|
125
|
-
readonly write: {
|
|
126
|
-
readonly kind: "binding";
|
|
127
|
-
readonly binding: string;
|
|
128
|
-
} | {
|
|
129
|
-
readonly onChange?: string | undefined;
|
|
130
|
-
readonly kind: "remote";
|
|
131
|
-
readonly triggers?: readonly {
|
|
132
|
-
readonly target: string;
|
|
133
|
-
readonly operation: string;
|
|
134
|
-
}[] | undefined;
|
|
135
|
-
readonly accessor: string;
|
|
136
|
-
readonly successMessage?: string | undefined;
|
|
137
|
-
};
|
|
138
125
|
readonly grow?: boolean | undefined;
|
|
139
126
|
readonly enableSorting?: boolean | undefined;
|
|
140
127
|
readonly options: {
|
|
@@ -179,6 +166,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
179
166
|
}[];
|
|
180
167
|
};
|
|
181
168
|
readonly sortKey?: string | undefined;
|
|
169
|
+
readonly write: {
|
|
170
|
+
readonly kind: "binding";
|
|
171
|
+
readonly binding: string;
|
|
172
|
+
} | {
|
|
173
|
+
readonly onChange?: string | undefined;
|
|
174
|
+
readonly kind: "remote";
|
|
175
|
+
readonly triggers?: readonly {
|
|
176
|
+
readonly target: string;
|
|
177
|
+
readonly operation: string;
|
|
178
|
+
}[] | undefined;
|
|
179
|
+
readonly accessor: string;
|
|
180
|
+
readonly successMessage?: string | undefined;
|
|
181
|
+
};
|
|
182
182
|
}) => any) | undefined;
|
|
183
183
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
184
184
|
declare const _default: typeof __VLS_export;
|
|
@@ -33,19 +33,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
33
33
|
readonly message: string;
|
|
34
34
|
}[]] | undefined;
|
|
35
35
|
readonly readonly?: string | undefined;
|
|
36
|
-
readonly write: {
|
|
37
|
-
readonly kind: "binding";
|
|
38
|
-
readonly binding: string;
|
|
39
|
-
} | {
|
|
40
|
-
readonly onChange?: string | undefined;
|
|
41
|
-
readonly kind: "remote";
|
|
42
|
-
readonly triggers?: readonly {
|
|
43
|
-
readonly target: string;
|
|
44
|
-
readonly operation: string;
|
|
45
|
-
}[] | undefined;
|
|
46
|
-
readonly accessor: string;
|
|
47
|
-
readonly successMessage?: string | undefined;
|
|
48
|
-
};
|
|
49
36
|
readonly grow?: boolean | undefined;
|
|
50
37
|
readonly enableSorting?: boolean | undefined;
|
|
51
38
|
readonly options: {
|
|
@@ -90,6 +77,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
90
77
|
}[];
|
|
91
78
|
};
|
|
92
79
|
readonly sortKey?: string | undefined;
|
|
80
|
+
readonly write: {
|
|
81
|
+
readonly kind: "binding";
|
|
82
|
+
readonly binding: string;
|
|
83
|
+
} | {
|
|
84
|
+
readonly onChange?: string | undefined;
|
|
85
|
+
readonly kind: "remote";
|
|
86
|
+
readonly triggers?: readonly {
|
|
87
|
+
readonly target: string;
|
|
88
|
+
readonly operation: string;
|
|
89
|
+
}[] | undefined;
|
|
90
|
+
readonly accessor: string;
|
|
91
|
+
readonly successMessage?: string | undefined;
|
|
92
|
+
};
|
|
93
93
|
}) => any;
|
|
94
94
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
95
95
|
"onUpdate:modelValue"?: ((value: {
|
|
@@ -122,19 +122,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
122
122
|
readonly message: string;
|
|
123
123
|
}[]] | undefined;
|
|
124
124
|
readonly readonly?: string | undefined;
|
|
125
|
-
readonly write: {
|
|
126
|
-
readonly kind: "binding";
|
|
127
|
-
readonly binding: string;
|
|
128
|
-
} | {
|
|
129
|
-
readonly onChange?: string | undefined;
|
|
130
|
-
readonly kind: "remote";
|
|
131
|
-
readonly triggers?: readonly {
|
|
132
|
-
readonly target: string;
|
|
133
|
-
readonly operation: string;
|
|
134
|
-
}[] | undefined;
|
|
135
|
-
readonly accessor: string;
|
|
136
|
-
readonly successMessage?: string | undefined;
|
|
137
|
-
};
|
|
138
125
|
readonly grow?: boolean | undefined;
|
|
139
126
|
readonly enableSorting?: boolean | undefined;
|
|
140
127
|
readonly options: {
|
|
@@ -179,6 +166,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
179
166
|
}[];
|
|
180
167
|
};
|
|
181
168
|
readonly sortKey?: string | undefined;
|
|
169
|
+
readonly write: {
|
|
170
|
+
readonly kind: "binding";
|
|
171
|
+
readonly binding: string;
|
|
172
|
+
} | {
|
|
173
|
+
readonly onChange?: string | undefined;
|
|
174
|
+
readonly kind: "remote";
|
|
175
|
+
readonly triggers?: readonly {
|
|
176
|
+
readonly target: string;
|
|
177
|
+
readonly operation: string;
|
|
178
|
+
}[] | undefined;
|
|
179
|
+
readonly accessor: string;
|
|
180
|
+
readonly successMessage?: string | undefined;
|
|
181
|
+
};
|
|
182
182
|
}) => any) | undefined;
|
|
183
183
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
184
184
|
declare const _default: typeof __VLS_export;
|
|
@@ -33,19 +33,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
33
33
|
readonly message: string;
|
|
34
34
|
}[]] | undefined;
|
|
35
35
|
readonly readonly?: string | undefined;
|
|
36
|
-
readonly write: {
|
|
37
|
-
readonly kind: "binding";
|
|
38
|
-
readonly binding: string;
|
|
39
|
-
} | {
|
|
40
|
-
readonly onChange?: string | undefined;
|
|
41
|
-
readonly kind: "remote";
|
|
42
|
-
readonly triggers?: readonly {
|
|
43
|
-
readonly target: string;
|
|
44
|
-
readonly operation: string;
|
|
45
|
-
}[] | undefined;
|
|
46
|
-
readonly accessor: string;
|
|
47
|
-
readonly successMessage?: string | undefined;
|
|
48
|
-
};
|
|
49
36
|
readonly grow?: boolean | undefined;
|
|
50
37
|
readonly enableSorting?: boolean | undefined;
|
|
51
38
|
readonly options: {
|
|
@@ -90,6 +77,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
90
77
|
}[];
|
|
91
78
|
};
|
|
92
79
|
readonly sortKey?: string | undefined;
|
|
80
|
+
readonly write: {
|
|
81
|
+
readonly kind: "binding";
|
|
82
|
+
readonly binding: string;
|
|
83
|
+
} | {
|
|
84
|
+
readonly onChange?: string | undefined;
|
|
85
|
+
readonly kind: "remote";
|
|
86
|
+
readonly triggers?: readonly {
|
|
87
|
+
readonly target: string;
|
|
88
|
+
readonly operation: string;
|
|
89
|
+
}[] | undefined;
|
|
90
|
+
readonly accessor: string;
|
|
91
|
+
readonly successMessage?: string | undefined;
|
|
92
|
+
};
|
|
93
93
|
}) => any;
|
|
94
94
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
95
95
|
"onUpdate:modelValue"?: ((value: {
|
|
@@ -122,19 +122,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
122
122
|
readonly message: string;
|
|
123
123
|
}[]] | undefined;
|
|
124
124
|
readonly readonly?: string | undefined;
|
|
125
|
-
readonly write: {
|
|
126
|
-
readonly kind: "binding";
|
|
127
|
-
readonly binding: string;
|
|
128
|
-
} | {
|
|
129
|
-
readonly onChange?: string | undefined;
|
|
130
|
-
readonly kind: "remote";
|
|
131
|
-
readonly triggers?: readonly {
|
|
132
|
-
readonly target: string;
|
|
133
|
-
readonly operation: string;
|
|
134
|
-
}[] | undefined;
|
|
135
|
-
readonly accessor: string;
|
|
136
|
-
readonly successMessage?: string | undefined;
|
|
137
|
-
};
|
|
138
125
|
readonly grow?: boolean | undefined;
|
|
139
126
|
readonly enableSorting?: boolean | undefined;
|
|
140
127
|
readonly options: {
|
|
@@ -179,6 +166,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
179
166
|
}[];
|
|
180
167
|
};
|
|
181
168
|
readonly sortKey?: string | undefined;
|
|
169
|
+
readonly write: {
|
|
170
|
+
readonly kind: "binding";
|
|
171
|
+
readonly binding: string;
|
|
172
|
+
} | {
|
|
173
|
+
readonly onChange?: string | undefined;
|
|
174
|
+
readonly kind: "remote";
|
|
175
|
+
readonly triggers?: readonly {
|
|
176
|
+
readonly target: string;
|
|
177
|
+
readonly operation: string;
|
|
178
|
+
}[] | undefined;
|
|
179
|
+
readonly accessor: string;
|
|
180
|
+
readonly successMessage?: string | undefined;
|
|
181
|
+
};
|
|
182
182
|
}) => any) | undefined;
|
|
183
183
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
184
184
|
declare const _default: typeof __VLS_export;
|
|
@@ -33,19 +33,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
33
33
|
readonly message: string;
|
|
34
34
|
}[]] | undefined;
|
|
35
35
|
readonly readonly?: string | undefined;
|
|
36
|
-
readonly write: {
|
|
37
|
-
readonly kind: "binding";
|
|
38
|
-
readonly binding: string;
|
|
39
|
-
} | {
|
|
40
|
-
readonly onChange?: string | undefined;
|
|
41
|
-
readonly kind: "remote";
|
|
42
|
-
readonly triggers?: readonly {
|
|
43
|
-
readonly target: string;
|
|
44
|
-
readonly operation: string;
|
|
45
|
-
}[] | undefined;
|
|
46
|
-
readonly accessor: string;
|
|
47
|
-
readonly successMessage?: string | undefined;
|
|
48
|
-
};
|
|
49
36
|
readonly grow?: boolean | undefined;
|
|
50
37
|
readonly enableSorting?: boolean | undefined;
|
|
51
38
|
readonly options: {
|
|
@@ -90,6 +77,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
90
77
|
}[];
|
|
91
78
|
};
|
|
92
79
|
readonly sortKey?: string | undefined;
|
|
80
|
+
readonly write: {
|
|
81
|
+
readonly kind: "binding";
|
|
82
|
+
readonly binding: string;
|
|
83
|
+
} | {
|
|
84
|
+
readonly onChange?: string | undefined;
|
|
85
|
+
readonly kind: "remote";
|
|
86
|
+
readonly triggers?: readonly {
|
|
87
|
+
readonly target: string;
|
|
88
|
+
readonly operation: string;
|
|
89
|
+
}[] | undefined;
|
|
90
|
+
readonly accessor: string;
|
|
91
|
+
readonly successMessage?: string | undefined;
|
|
92
|
+
};
|
|
93
93
|
}) => any;
|
|
94
94
|
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
95
95
|
"onUpdate:modelValue"?: ((value: {
|
|
@@ -122,19 +122,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
122
122
|
readonly message: string;
|
|
123
123
|
}[]] | undefined;
|
|
124
124
|
readonly readonly?: string | undefined;
|
|
125
|
-
readonly write: {
|
|
126
|
-
readonly kind: "binding";
|
|
127
|
-
readonly binding: string;
|
|
128
|
-
} | {
|
|
129
|
-
readonly onChange?: string | undefined;
|
|
130
|
-
readonly kind: "remote";
|
|
131
|
-
readonly triggers?: readonly {
|
|
132
|
-
readonly target: string;
|
|
133
|
-
readonly operation: string;
|
|
134
|
-
}[] | undefined;
|
|
135
|
-
readonly accessor: string;
|
|
136
|
-
readonly successMessage?: string | undefined;
|
|
137
|
-
};
|
|
138
125
|
readonly grow?: boolean | undefined;
|
|
139
126
|
readonly enableSorting?: boolean | undefined;
|
|
140
127
|
readonly options: {
|
|
@@ -179,6 +166,19 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
|
|
|
179
166
|
}[];
|
|
180
167
|
};
|
|
181
168
|
readonly sortKey?: string | undefined;
|
|
169
|
+
readonly write: {
|
|
170
|
+
readonly kind: "binding";
|
|
171
|
+
readonly binding: string;
|
|
172
|
+
} | {
|
|
173
|
+
readonly onChange?: string | undefined;
|
|
174
|
+
readonly kind: "remote";
|
|
175
|
+
readonly triggers?: readonly {
|
|
176
|
+
readonly target: string;
|
|
177
|
+
readonly operation: string;
|
|
178
|
+
}[] | undefined;
|
|
179
|
+
readonly accessor: string;
|
|
180
|
+
readonly successMessage?: string | undefined;
|
|
181
|
+
};
|
|
182
182
|
}) => any) | undefined;
|
|
183
183
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
184
184
|
declare const _default: typeof __VLS_export;
|
|
@@ -135,10 +135,12 @@ export declare function TableConfig(configure: (env: Environment) => void): Sche
|
|
|
135
135
|
}[];
|
|
136
136
|
readonly query?: {
|
|
137
137
|
readonly style?: string | undefined;
|
|
138
|
+
readonly id?: string | undefined;
|
|
138
139
|
readonly initial?: {
|
|
139
140
|
readonly data: string;
|
|
140
141
|
readonly request?: string | undefined;
|
|
141
142
|
} | undefined;
|
|
143
|
+
readonly displayName?: string | undefined;
|
|
142
144
|
readonly kind: "shwfed.component.form";
|
|
143
145
|
readonly fields: readonly any[];
|
|
144
146
|
readonly layouts: readonly {
|
|
@@ -440,10 +442,12 @@ export declare function TableConfig(configure: (env: Environment) => void): Sche
|
|
|
440
442
|
}>>;
|
|
441
443
|
query: Schema.optional<Schema.refine<{
|
|
442
444
|
readonly style?: string | undefined;
|
|
445
|
+
readonly id?: string | undefined;
|
|
443
446
|
readonly initial?: {
|
|
444
447
|
readonly data: string;
|
|
445
448
|
readonly request?: string | undefined;
|
|
446
449
|
} | undefined;
|
|
450
|
+
readonly displayName?: string | undefined;
|
|
447
451
|
readonly kind: "shwfed.component.form";
|
|
448
452
|
readonly fields: readonly any[];
|
|
449
453
|
readonly layouts: readonly {
|
|
@@ -498,6 +502,8 @@ export declare function TableConfig(configure: (env: Environment) => void): Sche
|
|
|
498
502
|
}>;
|
|
499
503
|
}>>>;
|
|
500
504
|
kind: Schema.tag<"shwfed.component.form">;
|
|
505
|
+
id: Schema.optional<Schema.refine<string, typeof Schema.String>>;
|
|
506
|
+
displayName: Schema.optional<Schema.SchemaClass<string, string, never>>;
|
|
501
507
|
initial: Schema.optional<Schema.transform<Schema.Union<[Schema.Schema<string, string, never>, Schema.Struct<{
|
|
502
508
|
request: Schema.optional<Schema.Schema<string, string, never>>;
|
|
503
509
|
data: Schema.Schema<string, string, never>;
|
|
@@ -577,10 +583,12 @@ export declare function createTableConfig(body: Omit<Schema.Schema.Type<ReturnTy
|
|
|
577
583
|
}[];
|
|
578
584
|
query?: {
|
|
579
585
|
readonly style?: string | undefined;
|
|
586
|
+
readonly id?: string | undefined;
|
|
580
587
|
readonly initial?: {
|
|
581
588
|
readonly data: string;
|
|
582
589
|
readonly request?: string | undefined;
|
|
583
590
|
} | undefined;
|
|
591
|
+
readonly displayName?: string | undefined;
|
|
584
592
|
readonly kind: "shwfed.component.form";
|
|
585
593
|
readonly fields: readonly any[];
|
|
586
594
|
readonly layouts: readonly {
|