@sparqjs/schema-designer 0.1.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.
- package/README.md +40 -0
- package/dist/app/root.d.ts +63 -0
- package/dist/app/root.d.ts.map +1 -0
- package/dist/app/toolbar.d.ts +36 -0
- package/dist/app/toolbar.d.ts.map +1 -0
- package/dist/canvas/adapter.d.ts +47 -0
- package/dist/canvas/adapter.d.ts.map +1 -0
- package/dist/canvas/canvas.d.ts +20 -0
- package/dist/canvas/canvas.d.ts.map +1 -0
- package/dist/canvas/node-frame.d.ts +121 -0
- package/dist/canvas/node-frame.d.ts.map +1 -0
- package/dist/canvas/sortable-list.d.ts +44 -0
- package/dist/canvas/sortable-list.d.ts.map +1 -0
- package/dist/dialogs/dialogs.d.ts +58 -0
- package/dist/dialogs/dialogs.d.ts.map +1 -0
- package/dist/dialogs/resource-tree-model.d.ts +62 -0
- package/dist/dialogs/resource-tree-model.d.ts.map +1 -0
- package/dist/extensions/context.d.ts +76 -0
- package/dist/extensions/context.d.ts.map +1 -0
- package/dist/extensions/instance.d.ts +56 -0
- package/dist/extensions/instance.d.ts.map +1 -0
- package/dist/extensions/material.d.ts +49 -0
- package/dist/extensions/material.d.ts.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10190 -0
- package/dist/index.js.map +1 -0
- package/dist/inspector/boolean-checkbox.d.ts +26 -0
- package/dist/inspector/boolean-checkbox.d.ts.map +1 -0
- package/dist/inspector/capabilities/adapters.d.ts +16 -0
- package/dist/inspector/capabilities/adapters.d.ts.map +1 -0
- package/dist/inspector/capabilities/cards/color-palette.d.ts +4 -0
- package/dist/inspector/capabilities/cards/color-palette.d.ts.map +1 -0
- package/dist/inspector/capabilities/cards/component-settings.d.ts +8 -0
- package/dist/inspector/capabilities/cards/component-settings.d.ts.map +1 -0
- package/dist/inspector/capabilities/cards/input-slots.d.ts +4 -0
- package/dist/inspector/capabilities/cards/input-slots.d.ts.map +1 -0
- package/dist/inspector/capabilities/cards/interaction-rules.d.ts +4 -0
- package/dist/inspector/capabilities/cards/interaction-rules.d.ts.map +1 -0
- package/dist/inspector/capabilities/cards/option-source.d.ts +4 -0
- package/dist/inspector/capabilities/cards/option-source.d.ts.map +1 -0
- package/dist/inspector/capabilities/cards/validation-rules.d.ts +4 -0
- package/dist/inspector/capabilities/cards/validation-rules.d.ts.map +1 -0
- package/dist/inspector/capabilities/cards/value-strategy.d.ts +4 -0
- package/dist/inspector/capabilities/cards/value-strategy.d.ts.map +1 -0
- package/dist/inspector/capabilities/index.d.ts +5 -0
- package/dist/inspector/capabilities/index.d.ts.map +1 -0
- package/dist/inspector/capabilities/keys.d.ts +20 -0
- package/dist/inspector/capabilities/keys.d.ts.map +1 -0
- package/dist/inspector/capabilities/register-built-ins.d.ts +4 -0
- package/dist/inspector/capabilities/register-built-ins.d.ts.map +1 -0
- package/dist/inspector/capabilities/registry.d.ts +7 -0
- package/dist/inspector/capabilities/registry.d.ts.map +1 -0
- package/dist/inspector/capabilities/types.d.ts +44 -0
- package/dist/inspector/capabilities/types.d.ts.map +1 -0
- package/dist/inspector/color-palette-editor.d.ts +10 -0
- package/dist/inspector/color-palette-editor.d.ts.map +1 -0
- package/dist/inspector/commands/component-migration.d.ts +25 -0
- package/dist/inspector/commands/component-migration.d.ts.map +1 -0
- package/dist/inspector/commands/field-property.d.ts +51 -0
- package/dist/inspector/commands/field-property.d.ts.map +1 -0
- package/dist/inspector/commands/form-property.d.ts +25 -0
- package/dist/inspector/commands/form-property.d.ts.map +1 -0
- package/dist/inspector/component-settings-editor.d.ts +37 -0
- package/dist/inspector/component-settings-editor.d.ts.map +1 -0
- package/dist/inspector/computed-expression-editor.d.ts +20 -0
- package/dist/inspector/computed-expression-editor.d.ts.map +1 -0
- package/dist/inspector/condition-editor-model.d.ts +63 -0
- package/dist/inspector/condition-editor-model.d.ts.map +1 -0
- package/dist/inspector/condition-visual-editor.d.ts +30 -0
- package/dist/inspector/condition-visual-editor.d.ts.map +1 -0
- package/dist/inspector/container-items-editor.d.ts +42 -0
- package/dist/inspector/container-items-editor.d.ts.map +1 -0
- package/dist/inspector/date-time-format-editor.d.ts +30 -0
- package/dist/inspector/date-time-format-editor.d.ts.map +1 -0
- package/dist/inspector/default-value-editor.d.ts +30 -0
- package/dist/inspector/default-value-editor.d.ts.map +1 -0
- package/dist/inspector/field-property-view.d.ts +44 -0
- package/dist/inspector/field-property-view.d.ts.map +1 -0
- package/dist/inspector/field-schema/build-sections.d.ts +9 -0
- package/dist/inspector/field-schema/build-sections.d.ts.map +1 -0
- package/dist/inspector/field-schema/component-options.d.ts +14 -0
- package/dist/inspector/field-schema/component-options.d.ts.map +1 -0
- package/dist/inspector/field-schema/fields.d.ts +21 -0
- package/dist/inspector/field-schema/fields.d.ts.map +1 -0
- package/dist/inspector/field-schema/index.d.ts +5 -0
- package/dist/inspector/field-schema/index.d.ts.map +1 -0
- package/dist/inspector/field-schema/keys.d.ts +15 -0
- package/dist/inspector/field-schema/keys.d.ts.map +1 -0
- package/dist/inspector/field-schema/registry.d.ts +99 -0
- package/dist/inspector/field-schema/registry.d.ts.map +1 -0
- package/dist/inspector/field-schema/types.d.ts +113 -0
- package/dist/inspector/field-schema/types.d.ts.map +1 -0
- package/dist/inspector/form-property-view.d.ts +14 -0
- package/dist/inspector/form-property-view.d.ts.map +1 -0
- package/dist/inspector/form-schema.d.ts +64 -0
- package/dist/inspector/form-schema.d.ts.map +1 -0
- package/dist/inspector/input-slots-editor.d.ts +11 -0
- package/dist/inspector/input-slots-editor.d.ts.map +1 -0
- package/dist/inspector/inspector.d.ts +34 -0
- package/dist/inspector/inspector.d.ts.map +1 -0
- package/dist/inspector/interaction-rules-editor.d.ts +24 -0
- package/dist/inspector/interaction-rules-editor.d.ts.map +1 -0
- package/dist/inspector/option-source-editor.d.ts +35 -0
- package/dist/inspector/option-source-editor.d.ts.map +1 -0
- package/dist/inspector/option-source-summary.d.ts +4 -0
- package/dist/inspector/option-source-summary.d.ts.map +1 -0
- package/dist/inspector/property-commit.d.ts +23 -0
- package/dist/inspector/property-commit.d.ts.map +1 -0
- package/dist/inspector/property-section.d.ts +4 -0
- package/dist/inspector/property-section.d.ts.map +1 -0
- package/dist/inspector/property-ui-adapter.d.ts +4 -0
- package/dist/inspector/property-ui-adapter.d.ts.map +1 -0
- package/dist/inspector/required-validation.d.ts +16 -0
- package/dist/inspector/required-validation.d.ts.map +1 -0
- package/dist/inspector/validation-rule-editor.d.ts +25 -0
- package/dist/inspector/validation-rule-editor.d.ts.map +1 -0
- package/dist/inspector/value-strategy-editor.d.ts +31 -0
- package/dist/inspector/value-strategy-editor.d.ts.map +1 -0
- package/dist/services/registry.d.ts +68 -0
- package/dist/services/registry.d.ts.map +1 -0
- package/dist/shared/clone.d.ts +8 -0
- package/dist/shared/clone.d.ts.map +1 -0
- package/dist/shared/component-registry.d.ts +10 -0
- package/dist/shared/component-registry.d.ts.map +1 -0
- package/dist/shared/icons.d.ts +8 -0
- package/dist/shared/icons.d.ts.map +1 -0
- package/dist/shared/object-path.d.ts +14 -0
- package/dist/shared/object-path.d.ts.map +1 -0
- package/dist/shared/ui-adapter.d.ts +12 -0
- package/dist/shared/ui-adapter.d.ts.map +1 -0
- package/dist/shared/view-node.d.ts +9 -0
- package/dist/shared/view-node.d.ts.map +1 -0
- package/dist/sidebar/components.d.ts +24 -0
- package/dist/sidebar/components.d.ts.map +1 -0
- package/dist/sidebar/sidebar.d.ts +25 -0
- package/dist/sidebar/sidebar.d.ts.map +1 -0
- package/dist/state/component-config.d.ts +41 -0
- package/dist/state/component-config.d.ts.map +1 -0
- package/dist/state/create-state.d.ts +8 -0
- package/dist/state/create-state.d.ts.map +1 -0
- package/dist/state/draft.d.ts +12 -0
- package/dist/state/draft.d.ts.map +1 -0
- package/dist/state/field.d.ts +10 -0
- package/dist/state/field.d.ts.map +1 -0
- package/dist/state/form-actions.d.ts +17 -0
- package/dist/state/form-actions.d.ts.map +1 -0
- package/dist/state/form-view.d.ts +6 -0
- package/dist/state/form-view.d.ts.map +1 -0
- package/dist/state/history.d.ts +16 -0
- package/dist/state/history.d.ts.map +1 -0
- package/dist/state/node-actions.d.ts +66 -0
- package/dist/state/node-actions.d.ts.map +1 -0
- package/dist/state/node-permissions.d.ts +17 -0
- package/dist/state/node-permissions.d.ts.map +1 -0
- package/dist/state/output.d.ts +5 -0
- package/dist/state/output.d.ts.map +1 -0
- package/dist/state/schema.d.ts +10 -0
- package/dist/state/schema.d.ts.map +1 -0
- package/dist/state/tree.d.ts +28 -0
- package/dist/state/tree.d.ts.map +1 -0
- package/dist/state/types.d.ts +81 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/visibility.d.ts +17 -0
- package/dist/state/visibility.d.ts.map +1 -0
- package/package.json +46 -0
- package/src/style.css +2129 -0
package/README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# @sparqjs/schema-designer
|
|
2
|
+
|
|
3
|
+
`@sparqjs/schema-designer` 提供业务无关的 Schema 可视化设计器。宿主负责加载 Schema、实现设计期服务并决定保存和发布流程;Designer 只维护当前实例的草稿、画布、属性检查器和输出。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @sparqjs/schema-designer @sparqjs/schema-vue @sparqjs/schema-ui-element-plus element-plus vue
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 使用
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { createApp, h } from 'vue'
|
|
15
|
+
import { SparqDesigner } from '@sparqjs/schema-designer'
|
|
16
|
+
import '@sparqjs/schema-designer/style.css'
|
|
17
|
+
import '@sparqjs/schema-vue/style.css'
|
|
18
|
+
import '@sparqjs/schema-ui-element-plus/style.css'
|
|
19
|
+
import 'element-plus/dist/index.css'
|
|
20
|
+
|
|
21
|
+
const app = createApp({
|
|
22
|
+
render: () =>
|
|
23
|
+
h(SparqDesigner, {
|
|
24
|
+
schema,
|
|
25
|
+
onSave: async (nextSchema) => {
|
|
26
|
+
await saveDraft(nextSchema)
|
|
27
|
+
},
|
|
28
|
+
}),
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
app.mount('#app')
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`schema` 必须是 `@sparqjs/schema-protocol` 定义的 `SchemaResource`。`onSave` 只表示宿主接受当前输出;校验、发布、权限和失败反馈仍由宿主负责。
|
|
35
|
+
|
|
36
|
+
## 扩展边界
|
|
37
|
+
|
|
38
|
+
`DesignerExtension` 可以为单个 Designer 实例提供物料、运行时组件、属性配置、能力卡和设计期服务。扩展不写入全局注册表,同一页面可以挂载不同配置的多个 Designer。
|
|
39
|
+
|
|
40
|
+
Designer 不包含 Admin transport、认证、路由、Schema Draft API 或业务模块工作流。CMS、Settings 等模块应持有自己的加载、保存和发布状态,只把 Schema 与稳定扩展传入 `SparqDesigner`。
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import type { SchemaResource } from '@sparqjs/schema-protocol';
|
|
3
|
+
import type { RootProps } from '../state/types';
|
|
4
|
+
/**
|
|
5
|
+
* 设计器根组件。
|
|
6
|
+
*
|
|
7
|
+
* 它负责实例扩展解析、草稿状态生命周期和三栏工作区编排,不承载具体属性业务规则。
|
|
8
|
+
*/
|
|
9
|
+
export declare const Shell: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
10
|
+
schema: {
|
|
11
|
+
type: PropType<SchemaResource>;
|
|
12
|
+
required: true;
|
|
13
|
+
};
|
|
14
|
+
view: {
|
|
15
|
+
type: StringConstructor;
|
|
16
|
+
default: string;
|
|
17
|
+
};
|
|
18
|
+
services: PropType<RootProps["services"]>;
|
|
19
|
+
components: PropType<RootProps["components"]>;
|
|
20
|
+
icons: PropType<RootProps["icons"]>;
|
|
21
|
+
richTextEditors: PropType<RootProps["richTextEditors"]>;
|
|
22
|
+
extensions: PropType<RootProps["extensions"]>;
|
|
23
|
+
materialKeys: PropType<RootProps["materialKeys"]>;
|
|
24
|
+
nodePermissions: PropType<RootProps["nodePermissions"]>;
|
|
25
|
+
outputScope: {
|
|
26
|
+
type: PropType<NonNullable<RootProps["outputScope"]>>;
|
|
27
|
+
default: string;
|
|
28
|
+
};
|
|
29
|
+
features: PropType<RootProps["features"]>;
|
|
30
|
+
onSave: PropType<RootProps["onSave"]>;
|
|
31
|
+
onSaveError: PropType<RootProps["onSaveError"]>;
|
|
32
|
+
onChange: PropType<RootProps["onChange"]>;
|
|
33
|
+
onDirtyChange: PropType<RootProps["onDirtyChange"]>;
|
|
34
|
+
}>, () => JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
35
|
+
schema: {
|
|
36
|
+
type: PropType<SchemaResource>;
|
|
37
|
+
required: true;
|
|
38
|
+
};
|
|
39
|
+
view: {
|
|
40
|
+
type: StringConstructor;
|
|
41
|
+
default: string;
|
|
42
|
+
};
|
|
43
|
+
services: PropType<RootProps["services"]>;
|
|
44
|
+
components: PropType<RootProps["components"]>;
|
|
45
|
+
icons: PropType<RootProps["icons"]>;
|
|
46
|
+
richTextEditors: PropType<RootProps["richTextEditors"]>;
|
|
47
|
+
extensions: PropType<RootProps["extensions"]>;
|
|
48
|
+
materialKeys: PropType<RootProps["materialKeys"]>;
|
|
49
|
+
nodePermissions: PropType<RootProps["nodePermissions"]>;
|
|
50
|
+
outputScope: {
|
|
51
|
+
type: PropType<NonNullable<RootProps["outputScope"]>>;
|
|
52
|
+
default: string;
|
|
53
|
+
};
|
|
54
|
+
features: PropType<RootProps["features"]>;
|
|
55
|
+
onSave: PropType<RootProps["onSave"]>;
|
|
56
|
+
onSaveError: PropType<RootProps["onSaveError"]>;
|
|
57
|
+
onChange: PropType<RootProps["onChange"]>;
|
|
58
|
+
onDirtyChange: PropType<RootProps["onDirtyChange"]>;
|
|
59
|
+
}>> & Readonly<{}>, {
|
|
60
|
+
view: string;
|
|
61
|
+
outputScope: NonNullable<import("..").DesignerOutputScope | undefined>;
|
|
62
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
63
|
+
//# sourceMappingURL=root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../src/app/root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyE,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAA;AAC1G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAM9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAoB/C;;;;GAIG;AACH,eAAO,MAAM,KAAK;;cAIU,QAAQ,CAAC,cAAc,CAAC;;;;;;;cAOf,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACtC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;WACtC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;qBAClB,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;kBAC/B,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;qBAC7B,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;;cAE/C,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;;;cAG/C,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC/B,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;iBACxB,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;cACrC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;mBAC1B,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;;;cAtB3C,QAAQ,CAAC,cAAc,CAAC;;;;;;;cAOf,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACtC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;WACtC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;qBAClB,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;kBAC/B,QAAQ,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;qBAC7B,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;;cAE/C,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;;;cAG/C,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC/B,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;iBACxB,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;cACrC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;mBAC1B,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;;;;4EAuMrE,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import type { DraftState } from '../state/types';
|
|
3
|
+
import { type ResolvedDesignerFeatures } from '../extensions/instance';
|
|
4
|
+
/** 打开完整预览并锁定入口,直到 PreviewDialog 完成运行时挂载。 */
|
|
5
|
+
export declare function openDesignerPreview(state: DraftState): boolean;
|
|
6
|
+
/** 设计器顶部命令栏,统一触发保存、导入导出、预览和历史操作。 */
|
|
7
|
+
export declare const Toolbar: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
8
|
+
state: {
|
|
9
|
+
type: PropType<DraftState>;
|
|
10
|
+
required: true;
|
|
11
|
+
};
|
|
12
|
+
features: {
|
|
13
|
+
type: PropType<ResolvedDesignerFeatures>;
|
|
14
|
+
default: () => Required<import("..").DesignerFeatureOptions>;
|
|
15
|
+
};
|
|
16
|
+
}>, () => JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
17
|
+
save: () => true;
|
|
18
|
+
export: () => true;
|
|
19
|
+
import: () => true;
|
|
20
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
21
|
+
state: {
|
|
22
|
+
type: PropType<DraftState>;
|
|
23
|
+
required: true;
|
|
24
|
+
};
|
|
25
|
+
features: {
|
|
26
|
+
type: PropType<ResolvedDesignerFeatures>;
|
|
27
|
+
default: () => Required<import("..").DesignerFeatureOptions>;
|
|
28
|
+
};
|
|
29
|
+
}>> & Readonly<{
|
|
30
|
+
onImport?: (() => any) | undefined;
|
|
31
|
+
onExport?: (() => any) | undefined;
|
|
32
|
+
onSave?: (() => any) | undefined;
|
|
33
|
+
}>, {
|
|
34
|
+
features: Required<import("..").DesignerFeatureOptions>;
|
|
35
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
36
|
+
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../src/app/toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EAA2B,KAAK,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAI/F,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAO9D;AAED,oCAAoC;AACpC,eAAO,MAAM,OAAO;;cAIQ,QAAQ,CAAC,UAAU,CAAC;;;;cAIpB,QAAQ,CAAC,wBAAwB,CAAC;;;;;;;;;cAJlC,QAAQ,CAAC,UAAU,CAAC;;;;cAIpB,QAAQ,CAAC,wBAAwB,CAAC;;;;;;;;;4EAgJ5D,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type VNodeChild } from 'vue';
|
|
2
|
+
import type { RuntimeViewNode } from '@sparqjs/schema-core';
|
|
3
|
+
import { type SchemaFormState, type SchemaUiAdapter } from '@sparqjs/schema-vue';
|
|
4
|
+
import type Sortable from 'sortablejs';
|
|
5
|
+
import type { DraftState } from '../state/types';
|
|
6
|
+
import { type NodeMoveContext } from '../state/visibility';
|
|
7
|
+
/** Canvas adapter 组合真实表单状态、草稿状态和可选基础渲染器所需输入。 */
|
|
8
|
+
export interface AdapterOptions {
|
|
9
|
+
state: DraftState;
|
|
10
|
+
form?: SchemaFormState;
|
|
11
|
+
base?: SchemaUiAdapter;
|
|
12
|
+
selectedNodeIds?: ReadonlySet<string>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 创建画布专用 Schema UI adapter。
|
|
16
|
+
*
|
|
17
|
+
* 它复用真实 UI 渲染结果,并在字段和布局外包裹选中、拖放、复制和删除交互。
|
|
18
|
+
*/
|
|
19
|
+
export declare function createCanvasAdapter(options: AdapterOptions): SchemaUiAdapter;
|
|
20
|
+
/** 渲染设计器 section,并把其 children 区域转换为可接收节点的嵌套拖放区。 */
|
|
21
|
+
export declare function renderDesignerSection(state: DraftState, node: RuntimeViewNode, children: VNodeChild[] | undefined, form?: SchemaFormState): VNodeChild;
|
|
22
|
+
/** 创建共享同一草稿拖拽会话的 Sortable 配置,供根级与嵌套放置区复用。 */
|
|
23
|
+
export declare function createSortableOptions(state: DraftState, parentId: string | undefined, context?: NodeMoveContext): {
|
|
24
|
+
group: {
|
|
25
|
+
name: string;
|
|
26
|
+
pull: boolean;
|
|
27
|
+
put: boolean;
|
|
28
|
+
};
|
|
29
|
+
handle: string;
|
|
30
|
+
draggable: string;
|
|
31
|
+
ghostClass: string;
|
|
32
|
+
chosenClass: string;
|
|
33
|
+
emptyInsertThreshold: number;
|
|
34
|
+
swapThreshold: number;
|
|
35
|
+
invertSwap: boolean;
|
|
36
|
+
onStart(event: Sortable.SortableEvent): void;
|
|
37
|
+
onMove(event: Sortable.MoveEvent): boolean;
|
|
38
|
+
onAdd(event: Sortable.SortableEvent): void;
|
|
39
|
+
onEnd(event: Sortable.SortableEvent): void;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* 将可见节点索引转换为真实 siblings 索引。
|
|
43
|
+
*
|
|
44
|
+
* 条件隐藏节点仍保留在 schema 中,拖放不能因为它们不可见而插入到错误位置。
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveCanvasDropIndex(state: DraftState, parentId: string | undefined, visibleIndex: number | undefined, context?: NodeMoveContext, movingNodeId?: string): number;
|
|
47
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/canvas/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAKH,KAAK,eAAe,EAEpB,KAAK,eAAe,EACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAA;AAItC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAkBhD,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAK9E,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACxC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,CAuB5E;AAoED,mDAAmD;AACnD,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,UAAU,EAAE,GAAG,SAAS,EAClC,IAAI,CAAC,EAAE,eAAe,GACvB,UAAU,CAmBZ;AA+CD,6CAA6C;AAC7C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,GAAE,eAAoB;;;;;;;;;;;;;mBAc7F,QAAQ,CAAC,aAAa;kBAGvB,QAAQ,CAAC,SAAS;iBAyBnB,QAAQ,CAAC,aAAa;iBAkBtB,QAAQ,CAAC,aAAa;EAsB1C;AAcD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,GAAE,eAAoB,EAC7B,YAAY,CAAC,EAAE,MAAM,GACtB,MAAM,CAoBR"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import { type SchemaComponentRegistry, type SparqRichTextRegistry } from '@sparqjs/schema-vue';
|
|
3
|
+
import type { DraftState } from '../state/types';
|
|
4
|
+
/** 使用真实 schema renderer 展示草稿,并叠加设计器节点交互和拖放能力。 */
|
|
5
|
+
export declare const Canvas: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
6
|
+
state: {
|
|
7
|
+
type: PropType<DraftState>;
|
|
8
|
+
required: true;
|
|
9
|
+
};
|
|
10
|
+
components: PropType<SchemaComponentRegistry>;
|
|
11
|
+
richTextEditors: PropType<SparqRichTextRegistry>;
|
|
12
|
+
}>, () => JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
13
|
+
state: {
|
|
14
|
+
type: PropType<DraftState>;
|
|
15
|
+
required: true;
|
|
16
|
+
};
|
|
17
|
+
components: PropType<SchemaComponentRegistry>;
|
|
18
|
+
richTextEditors: PropType<SparqRichTextRegistry>;
|
|
19
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
20
|
+
//# sourceMappingURL=canvas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../src/canvas/canvas.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwD,KAAK,QAAQ,EAAmB,MAAM,KAAK,CAAA;AAE1G,OAAO,EAIH,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC7B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGhD,iDAAiD;AACjD,eAAO,MAAM,MAAM;;cAIS,QAAQ,CAAC,UAAU,CAAC;;;gBAGlB,QAAQ,CAAC,uBAAuB,CAAC;qBAC5B,QAAQ,CAAC,qBAAqB,CAAC;;;cAJtC,QAAQ,CAAC,UAAU,CAAC;;;gBAGlB,QAAQ,CAAC,uBAAuB,CAAC;qBAC5B,QAAQ,CAAC,qBAAqB,CAAC;iGAyEhE,CAAA"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { type PropType, type VNodeChild } from 'vue';
|
|
2
|
+
import type { RuntimeViewNode } from '@sparqjs/schema-core';
|
|
3
|
+
/** 包裹单个画布节点,提供选中边框、拖动手柄和节点快捷操作。 */
|
|
4
|
+
export declare const NodeFrame: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
5
|
+
node: {
|
|
6
|
+
type: PropType<RuntimeViewNode>;
|
|
7
|
+
required: true;
|
|
8
|
+
};
|
|
9
|
+
selectedNodeIds: PropType<ReadonlySet<string>>;
|
|
10
|
+
selected: {
|
|
11
|
+
type: BooleanConstructor;
|
|
12
|
+
default: boolean;
|
|
13
|
+
};
|
|
14
|
+
path: {
|
|
15
|
+
type: StringConstructor;
|
|
16
|
+
required: true;
|
|
17
|
+
};
|
|
18
|
+
content: {
|
|
19
|
+
type: PropType<VNodeChild>;
|
|
20
|
+
default: undefined;
|
|
21
|
+
};
|
|
22
|
+
span: NumberConstructor;
|
|
23
|
+
canMoveUp: {
|
|
24
|
+
type: BooleanConstructor;
|
|
25
|
+
default: boolean;
|
|
26
|
+
};
|
|
27
|
+
canMoveDown: {
|
|
28
|
+
type: BooleanConstructor;
|
|
29
|
+
default: boolean;
|
|
30
|
+
};
|
|
31
|
+
selectable: {
|
|
32
|
+
type: BooleanConstructor;
|
|
33
|
+
default: boolean;
|
|
34
|
+
};
|
|
35
|
+
editable: {
|
|
36
|
+
type: BooleanConstructor;
|
|
37
|
+
default: boolean;
|
|
38
|
+
};
|
|
39
|
+
movable: {
|
|
40
|
+
type: BooleanConstructor;
|
|
41
|
+
default: boolean;
|
|
42
|
+
};
|
|
43
|
+
copyable: {
|
|
44
|
+
type: BooleanConstructor;
|
|
45
|
+
default: boolean;
|
|
46
|
+
};
|
|
47
|
+
deletable: {
|
|
48
|
+
type: BooleanConstructor;
|
|
49
|
+
default: boolean;
|
|
50
|
+
};
|
|
51
|
+
}>, () => JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
52
|
+
select: (_path: string) => true;
|
|
53
|
+
copy: () => true;
|
|
54
|
+
up: () => true;
|
|
55
|
+
down: () => true;
|
|
56
|
+
remove: () => true;
|
|
57
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
58
|
+
node: {
|
|
59
|
+
type: PropType<RuntimeViewNode>;
|
|
60
|
+
required: true;
|
|
61
|
+
};
|
|
62
|
+
selectedNodeIds: PropType<ReadonlySet<string>>;
|
|
63
|
+
selected: {
|
|
64
|
+
type: BooleanConstructor;
|
|
65
|
+
default: boolean;
|
|
66
|
+
};
|
|
67
|
+
path: {
|
|
68
|
+
type: StringConstructor;
|
|
69
|
+
required: true;
|
|
70
|
+
};
|
|
71
|
+
content: {
|
|
72
|
+
type: PropType<VNodeChild>;
|
|
73
|
+
default: undefined;
|
|
74
|
+
};
|
|
75
|
+
span: NumberConstructor;
|
|
76
|
+
canMoveUp: {
|
|
77
|
+
type: BooleanConstructor;
|
|
78
|
+
default: boolean;
|
|
79
|
+
};
|
|
80
|
+
canMoveDown: {
|
|
81
|
+
type: BooleanConstructor;
|
|
82
|
+
default: boolean;
|
|
83
|
+
};
|
|
84
|
+
selectable: {
|
|
85
|
+
type: BooleanConstructor;
|
|
86
|
+
default: boolean;
|
|
87
|
+
};
|
|
88
|
+
editable: {
|
|
89
|
+
type: BooleanConstructor;
|
|
90
|
+
default: boolean;
|
|
91
|
+
};
|
|
92
|
+
movable: {
|
|
93
|
+
type: BooleanConstructor;
|
|
94
|
+
default: boolean;
|
|
95
|
+
};
|
|
96
|
+
copyable: {
|
|
97
|
+
type: BooleanConstructor;
|
|
98
|
+
default: boolean;
|
|
99
|
+
};
|
|
100
|
+
deletable: {
|
|
101
|
+
type: BooleanConstructor;
|
|
102
|
+
default: boolean;
|
|
103
|
+
};
|
|
104
|
+
}>> & Readonly<{
|
|
105
|
+
onSelect?: ((_path: string) => any) | undefined;
|
|
106
|
+
onRemove?: (() => any) | undefined;
|
|
107
|
+
onCopy?: (() => any) | undefined;
|
|
108
|
+
onUp?: (() => any) | undefined;
|
|
109
|
+
onDown?: (() => any) | undefined;
|
|
110
|
+
}>, {
|
|
111
|
+
selectable: boolean;
|
|
112
|
+
editable: boolean;
|
|
113
|
+
movable: boolean;
|
|
114
|
+
copyable: boolean;
|
|
115
|
+
deletable: boolean;
|
|
116
|
+
selected: boolean;
|
|
117
|
+
content: VNodeChild;
|
|
118
|
+
canMoveUp: boolean;
|
|
119
|
+
canMoveDown: boolean;
|
|
120
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
121
|
+
//# sourceMappingURL=node-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-frame.d.ts","sourceRoot":"","sources":["../../src/canvas/node-frame.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAG3D,mCAAmC;AACnC,eAAO,MAAM,SAAS;;cAIM,QAAQ,CAAC,eAAe,CAAC;;;qBAGlB,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;;;;;;;;;cAU3B,QAAQ,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAkCjC,MAAM;;;;;;;cA/CF,QAAQ,CAAC,eAAe,CAAC;;;qBAGlB,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;;;;;;;;;cAU3B,QAAQ,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EAiJvD,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import Sortable, { type SortableOptions } from 'sortablejs';
|
|
2
|
+
import { type PropType, type VNode } from 'vue';
|
|
3
|
+
/** 管理 SortableJS 实例生命周期,并把 Vue children 渲染为稳定拖放容器。 */
|
|
4
|
+
export declare const SortableList: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
5
|
+
options: {
|
|
6
|
+
type: PropType<SortableOptions>;
|
|
7
|
+
required: true;
|
|
8
|
+
};
|
|
9
|
+
tag: {
|
|
10
|
+
type: StringConstructor;
|
|
11
|
+
default: string;
|
|
12
|
+
};
|
|
13
|
+
optionsKey: {
|
|
14
|
+
type: StringConstructor;
|
|
15
|
+
default: string;
|
|
16
|
+
};
|
|
17
|
+
}>, () => VNode, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
18
|
+
sort: (_event: Sortable.SortableEvent) => boolean;
|
|
19
|
+
add: (_event: Sortable.SortableEvent) => true;
|
|
20
|
+
start: (_event: Sortable.SortableEvent) => true;
|
|
21
|
+
end: (_event: Sortable.SortableEvent) => true;
|
|
22
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
23
|
+
options: {
|
|
24
|
+
type: PropType<SortableOptions>;
|
|
25
|
+
required: true;
|
|
26
|
+
};
|
|
27
|
+
tag: {
|
|
28
|
+
type: StringConstructor;
|
|
29
|
+
default: string;
|
|
30
|
+
};
|
|
31
|
+
optionsKey: {
|
|
32
|
+
type: StringConstructor;
|
|
33
|
+
default: string;
|
|
34
|
+
};
|
|
35
|
+
}>> & Readonly<{
|
|
36
|
+
onSort?: ((_event: Sortable.SortableEvent) => any) | undefined;
|
|
37
|
+
onAdd?: ((_event: Sortable.SortableEvent) => any) | undefined;
|
|
38
|
+
onStart?: ((_event: Sortable.SortableEvent) => any) | undefined;
|
|
39
|
+
onEnd?: ((_event: Sortable.SortableEvent) => any) | undefined;
|
|
40
|
+
}>, {
|
|
41
|
+
tag: string;
|
|
42
|
+
optionsKey: string;
|
|
43
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
44
|
+
//# sourceMappingURL=sortable-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortable-list.d.ts","sourceRoot":"","sources":["../../src/canvas/sortable-list.tsx"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAA8D,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,KAAK,CAAA;AAE3G,sDAAsD;AACtD,eAAO,MAAM,YAAY;;cAIG,QAAQ,CAAC,eAAe,CAAC;;;;;;;;;;;UA8DpC,KAAK;mBAjDC,QAAQ,CAAC,aAAa;kBACvB,QAAQ,CAAC,aAAa;oBACpB,QAAQ,CAAC,aAAa;kBACxB,QAAQ,CAAC,aAAa;;;cAhBhB,QAAQ,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;4EAgEnD,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import { type SchemaRuntime } from '@sparqjs/schema-core';
|
|
3
|
+
import { type SchemaComponentRegistry, type SchemaRenderer, type SparqRichTextRegistry, type SchemaUiAdapter, type UiKit } from '@sparqjs/schema-vue';
|
|
4
|
+
import type { DraftState } from '../state/types';
|
|
5
|
+
/** 展示当前草稿 JSON,只提供检查能力,不直接编辑或写回 schema。 */
|
|
6
|
+
export declare const JsonDialog: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
7
|
+
state: {
|
|
8
|
+
type: PropType<DraftState>;
|
|
9
|
+
required: true;
|
|
10
|
+
};
|
|
11
|
+
}>, () => import("vue").VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
12
|
+
state: {
|
|
13
|
+
type: PropType<DraftState>;
|
|
14
|
+
required: true;
|
|
15
|
+
};
|
|
16
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
17
|
+
/** 使用宿主真实渲染上下文预览草稿,并跟随设计器设备模式调整画布宽度。 */
|
|
18
|
+
export declare const PreviewDialog: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
19
|
+
state: {
|
|
20
|
+
type: PropType<DraftState>;
|
|
21
|
+
required: true;
|
|
22
|
+
};
|
|
23
|
+
components: PropType<SchemaComponentRegistry>;
|
|
24
|
+
richTextEditors: PropType<SparqRichTextRegistry>;
|
|
25
|
+
}>, () => import("vue").VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
26
|
+
state: {
|
|
27
|
+
type: PropType<DraftState>;
|
|
28
|
+
required: true;
|
|
29
|
+
};
|
|
30
|
+
components: PropType<SchemaComponentRegistry>;
|
|
31
|
+
richTextEditors: PropType<SparqRichTextRegistry>;
|
|
32
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
33
|
+
interface PreviewRenderContextInput {
|
|
34
|
+
renderer?: Pick<SchemaRenderer, 'runtime' | 'uiAdapter' | 'uiKit'>;
|
|
35
|
+
runtime?: SchemaRuntime;
|
|
36
|
+
uiAdapter?: SchemaUiAdapter;
|
|
37
|
+
uiKit?: UiKit;
|
|
38
|
+
}
|
|
39
|
+
/** Preview 优先复用宿主渲染上下文,仅在 Designer 独立运行时创建本地兜底。 */
|
|
40
|
+
export declare function resolvePreviewRenderContext(input: PreviewRenderContextInput): {
|
|
41
|
+
runtime: SchemaRuntime;
|
|
42
|
+
uiAdapter: SchemaUiAdapter;
|
|
43
|
+
uiKit: UiKit;
|
|
44
|
+
};
|
|
45
|
+
/** 以树结构展示并调整当前表单节点层级,移动操作仍通过统一 DraftState 事务提交。 */
|
|
46
|
+
export declare const ResourceTreeDialog: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
47
|
+
state: {
|
|
48
|
+
type: PropType<DraftState>;
|
|
49
|
+
required: true;
|
|
50
|
+
};
|
|
51
|
+
}>, () => import("vue").VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
52
|
+
state: {
|
|
53
|
+
type: PropType<DraftState>;
|
|
54
|
+
required: true;
|
|
55
|
+
};
|
|
56
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=dialogs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialogs.d.ts","sourceRoot":"","sources":["../../src/dialogs/dialogs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqE,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAA;AACtG,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAMH,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,KAAK,EACb,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAgChD,2CAA2C;AAC3C,eAAO,MAAM,UAAU;;cAIK,QAAQ,CAAC,UAAU,CAAC;;;;;cAApB,QAAQ,CAAC,UAAU,CAAC;;;iGA2B9C,CAAA;AAEF,wCAAwC;AACxC,eAAO,MAAM,aAAa;;cAIE,QAAQ,CAAC,UAAU,CAAC;;;gBAGlB,QAAQ,CAAC,uBAAuB,CAAC;qBAC5B,QAAQ,CAAC,qBAAqB,CAAC;;;cAJtC,QAAQ,CAAC,UAAU,CAAC;;;gBAGlB,QAAQ,CAAC,uBAAuB,CAAC;qBAC5B,QAAQ,CAAC,qBAAqB,CAAC;iGAoHhE,CAAA;AAEF,UAAU,yBAAyB;IAC/B,QAAQ,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC,CAAA;IAClE,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAA;CAChB;AAED,mDAAmD;AACnD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,yBAAyB,GAAG;IAC3E,OAAO,EAAE,aAAa,CAAA;IACtB,SAAS,EAAE,eAAe,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAA;CACf,CAMA;AAED,mDAAmD;AACnD,eAAO,MAAM,kBAAkB;;cAIH,QAAQ,CAAC,UAAU,CAAC;;;;;cAApB,QAAQ,CAAC,UAAU,CAAC;;;iGA0H9C,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { ResourceField, ViewNode } from '@sparqjs/schema-protocol';
|
|
2
|
+
/** 资源树使用的节点语义分类,不替代 ViewNode.type。 */
|
|
3
|
+
export type ResourceTreeNodeKind = 'field' | 'container' | 'layout' | 'view';
|
|
4
|
+
/** 拖放命中位置;inner 表示改变父级,其余表示兄弟排序。 */
|
|
5
|
+
export type ResourceTreeDropPosition = 'before' | 'after' | 'inner';
|
|
6
|
+
/** 资源树展示模型,组合协议信息与当前可执行移动状态。 */
|
|
7
|
+
export interface ResourceTreeItem {
|
|
8
|
+
id: string;
|
|
9
|
+
nodeId?: string;
|
|
10
|
+
label: string;
|
|
11
|
+
type: string;
|
|
12
|
+
kind: ResourceTreeNodeKind;
|
|
13
|
+
name?: string;
|
|
14
|
+
dataType?: string;
|
|
15
|
+
component?: string;
|
|
16
|
+
multiple?: boolean;
|
|
17
|
+
virtual?: boolean;
|
|
18
|
+
conditional?: boolean;
|
|
19
|
+
childCount?: number;
|
|
20
|
+
parentId?: string;
|
|
21
|
+
index?: number;
|
|
22
|
+
canMoveUp?: boolean;
|
|
23
|
+
canMoveDown?: boolean;
|
|
24
|
+
canMoveIn?: boolean;
|
|
25
|
+
canMoveOut?: boolean;
|
|
26
|
+
selectable?: boolean;
|
|
27
|
+
editable?: boolean;
|
|
28
|
+
movable?: boolean;
|
|
29
|
+
copyable?: boolean;
|
|
30
|
+
deletable?: boolean;
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
children?: ResourceTreeItem[];
|
|
33
|
+
}
|
|
34
|
+
/** 将 ViewNode、字段元数据和移动状态组合成资源树展示模型。 */
|
|
35
|
+
export declare function createResourceTreeItem(input: {
|
|
36
|
+
node: ViewNode;
|
|
37
|
+
index: number;
|
|
38
|
+
label: string;
|
|
39
|
+
field?: ResourceField;
|
|
40
|
+
parentId?: string;
|
|
41
|
+
canMoveUp: boolean;
|
|
42
|
+
canMoveDown: boolean;
|
|
43
|
+
canMoveIn?: boolean;
|
|
44
|
+
canMoveOut?: boolean;
|
|
45
|
+
selectable?: boolean;
|
|
46
|
+
editable?: boolean;
|
|
47
|
+
movable?: boolean;
|
|
48
|
+
copyable?: boolean;
|
|
49
|
+
deletable?: boolean;
|
|
50
|
+
children?: ResourceTreeItem[];
|
|
51
|
+
}): ResourceTreeItem;
|
|
52
|
+
/** 判断父子节点协议是否允许嵌套,tabs 和 collapse 只接受各自的专用子节点。 */
|
|
53
|
+
export declare function canNestResourceTreeNode(parent: Pick<ResourceTreeItem, 'type'>, child: Pick<ResourceTreeItem, 'type'>): boolean;
|
|
54
|
+
/** 校验资源树拖放位置;跨父级移动必须使用 inner,兄弟排序必须保持同一父级。 */
|
|
55
|
+
export declare function canDropResourceTreeItem(dragging: ResourceTreeItem | undefined, drop: ResourceTreeItem | undefined, position: ResourceTreeDropPosition): boolean;
|
|
56
|
+
/** 判断节点能否成为指定父级的直接子节点,根级拒绝 tab 和 collapse-item。 */
|
|
57
|
+
export declare function canContainResourceTreeChild(parent: Pick<ResourceTreeItem, 'type'> | undefined, child: Pick<ResourceTreeItem, 'type'>): boolean;
|
|
58
|
+
/** 将协议节点类型归为资源树使用的字段、容器、布局或视图类别。 */
|
|
59
|
+
export declare function resolveResourceTreeNodeKind(node: Pick<ViewNode, 'type'>): ResourceTreeNodeKind;
|
|
60
|
+
/** 返回资源树节点类别的用户可读中文标签。 */
|
|
61
|
+
export declare function resolveResourceTreeKindLabel(kind: ResourceTreeNodeKind): string;
|
|
62
|
+
//# sourceMappingURL=resource-tree-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-tree-model.d.ts","sourceRoot":"","sources":["../../src/dialogs/resource-tree-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { type SchemaComponent, type SchemaComponentRegistry, type SparqIconRegistry } from '@sparqjs/schema-vue';
|
|
2
|
+
import { type DesignerCapabilityCard, type DesignerCapabilityCardKey } from '../inspector/capabilities';
|
|
3
|
+
import { type DesignerComponentOption, type DesignerComponentPropertyConfig } from '../inspector/field-schema';
|
|
4
|
+
import { type DesignerServiceProvider, type DesignerServiceRegistry } from '../services/registry';
|
|
5
|
+
import type { DesignerMaterial, DesignerMaterialCategory } from './material';
|
|
6
|
+
import { type DesignerNodePermissionResolver, type DesignerNodePermissionPolicy } from './instance';
|
|
7
|
+
/** 当前 Designer 扩展上下文需要解析的宿主实例配置。 */
|
|
8
|
+
export interface DesignerExtensionContextOptions {
|
|
9
|
+
materialKeys?: readonly string[];
|
|
10
|
+
nodePermissions?: DesignerNodePermissionResolver;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 设计器插件的稳定贡献描述。
|
|
14
|
+
*
|
|
15
|
+
* 扩展只声明当前设计器需要的物料、运行时组件、属性配置、能力卡和设计期服务;插件发现、权限和远程加载由宿主负责。
|
|
16
|
+
*/
|
|
17
|
+
export interface DesignerExtension {
|
|
18
|
+
/** 扩展稳定标识,同时作为重复贡献诊断中的 owner。 */
|
|
19
|
+
key: string;
|
|
20
|
+
/** 扩展实际提供的运行时组件,不应包含 renderer 的完整默认 registry。 */
|
|
21
|
+
components?: Readonly<Record<string, SchemaComponent>>;
|
|
22
|
+
/** 声明可从 Sidebar 拖入当前设计器实例的字段或节点物料。 */
|
|
23
|
+
materials?: readonly DesignerMaterial[];
|
|
24
|
+
/** 声明字段组件在 Inspector 中允许编辑的属性和迁移规则。 */
|
|
25
|
+
componentProperties?: readonly DesignerComponentPropertyConfig[];
|
|
26
|
+
/** 声明复杂配置的摘要、编辑器和写回边界。 */
|
|
27
|
+
capabilityCards?: readonly DesignerCapabilityCard[];
|
|
28
|
+
/** 设计期查询或动作服务;鉴权、缓存和错误归一化由 provider 自己处理。 */
|
|
29
|
+
services?: readonly DesignerServiceProvider[];
|
|
30
|
+
}
|
|
31
|
+
/** 扩展冲突和完整性检查的稳定诊断代码。 */
|
|
32
|
+
export type DesignerExtensionDiagnosticCode = 'duplicate-extension-key' | 'duplicate-component-property' | 'duplicate-capability-card' | 'duplicate-runtime-component' | 'duplicate-material' | 'duplicate-service-provider' | 'missing-component-renderer' | 'missing-capability-editor';
|
|
33
|
+
/** 扩展安装和完整性检查产生的可定位诊断。 */
|
|
34
|
+
export interface DesignerExtensionDiagnostic {
|
|
35
|
+
code: DesignerExtensionDiagnosticCode;
|
|
36
|
+
extension: string;
|
|
37
|
+
key: string;
|
|
38
|
+
message: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 当前设计器实例解析后的扩展快照。
|
|
42
|
+
*
|
|
43
|
+
* Sidebar、Canvas、Preview、Inspector 和属性命令共享该对象,避免同一扩展在不同区域得到不一致结果。
|
|
44
|
+
*/
|
|
45
|
+
export interface DesignerExtensionContext {
|
|
46
|
+
/** 合并内置、插件和宿主覆盖后的运行时组件。 */
|
|
47
|
+
components: SchemaComponentRegistry;
|
|
48
|
+
/** 当前实例画布、预览和 Inspector 共用的宿主图标注册表。 */
|
|
49
|
+
icons?: SparqIconRegistry;
|
|
50
|
+
/** 当前实例统一使用的节点权限;UI 和命令层必须读取同一结果。 */
|
|
51
|
+
nodePermissions: DesignerNodePermissionPolicy;
|
|
52
|
+
/** 合并内置、插件和宿主覆盖后的设计期服务。 */
|
|
53
|
+
services: DesignerServiceProvider[];
|
|
54
|
+
diagnostics: DesignerExtensionDiagnostic[];
|
|
55
|
+
/** 按稳定 key 解析当前实例生效的物料。 */
|
|
56
|
+
getMaterial: (key: string) => DesignerMaterial | undefined;
|
|
57
|
+
/** 列出当前实例物料;传入分类时只返回对应 Sidebar 分组。 */
|
|
58
|
+
listMaterials: (category?: DesignerMaterialCategory) => DesignerMaterial[];
|
|
59
|
+
/** 按稳定 key 解析当前实例生效的设计期服务。 */
|
|
60
|
+
getServiceProvider: (key: string) => DesignerServiceProvider | undefined;
|
|
61
|
+
/** 列出当前实例最终生效的设计期服务。 */
|
|
62
|
+
listServiceProviders: () => DesignerServiceProvider[];
|
|
63
|
+
getComponentPropertyConfig: (component: string | undefined) => DesignerComponentPropertyConfig | undefined;
|
|
64
|
+
hasExtensionComponentProperty: (component: string | undefined) => boolean;
|
|
65
|
+
listComponentPropertyConfigs: () => DesignerComponentPropertyConfig[];
|
|
66
|
+
listComponentOptions: (group?: string) => DesignerComponentOption[];
|
|
67
|
+
getCapabilityCard: (key: DesignerCapabilityCardKey) => DesignerCapabilityCard | undefined;
|
|
68
|
+
listCapabilityCards: (keys?: DesignerCapabilityCardKey[]) => DesignerCapabilityCard[];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 将内置能力、宿主组件和 DesignerExtension 解析为实例级扩展快照。
|
|
72
|
+
*
|
|
73
|
+
* 每次调用都会创建隔离的 FrontendKernel,不会让同页多个设计器或测试用例共享注册状态。
|
|
74
|
+
*/
|
|
75
|
+
export declare function createDesignerExtensionContext(extensions?: DesignerExtension[], hostComponents?: SchemaComponentRegistry, hostServices?: DesignerServiceProvider[] | DesignerServiceRegistry, icons?: SparqIconRegistry, options?: DesignerExtensionContextOptions): DesignerExtensionContext;
|
|
76
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/extensions/context.ts"],"names":[],"mappings":"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"}
|