@nbreak/vue 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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["EXTENSION_TYPES","extensionRegistry","SchemaFormRenderer","PropertyFieldRenderer","extensionRegistry","EXTENSION_TYPES","eventBus","extensionRegistry","EXTENSION_TYPES"],"sources":["../../src/propertyFieldRegistry.js","../../src/composables/useDataScreen.js","../../src/components/PropertyFieldRenderer.vue","../../src/components/SchemaFormRenderer.vue","../../src/plugin.js","../../src/composables/useExtensionRegistry.js","../../src/index.js"],"sourcesContent":["/**\n * @nbreak/vue - 属性字段编辑器注册表\n *\n * 管理所有属性字段类型对应的编辑器组件\n * 内置类型由 SchemaFormRenderer 默认处理,扩展类型从此注册表获取\n */\n\nimport {\n PROPERTY_FIELD_TYPES,\n EXTENSION_TYPES,\n BUILTIN_PROPERTY_FIELD_TYPES,\n} from '@nbreak/shared';\n\nclass PropertyFieldRegistry {\n constructor() {\n this.editors = new Map(); // fieldType -> { editor, options }\n this.serializers = new Map(); // fieldType -> { serialize, deserialize, defaultValue }\n }\n\n /**\n * 注册属性字段编辑器\n * @param {string} fieldType - 字段类型\n * @param {Object|Function} editor - Vue 组件\n * @param {Object} [options]\n * @param {Function} [options.defaultValue]\n * @param {Function} [options.serialize]\n * @param {Function} [options.deserialize]\n */\n register(fieldType, editor, options = {}) {\n if (this.editors.has(fieldType)) {\n console.warn(`[DataScreen] 属性字段 \"${fieldType}\" 已注册,覆盖`);\n }\n this.editors.set(fieldType, editor);\n if (options.defaultValue || options.serialize || options.deserialize) {\n this.serializers.set(fieldType, {\n defaultValue: options.defaultValue || (() => null),\n serialize: options.serialize || (v => v),\n deserialize: options.deserialize || (v => v),\n });\n }\n }\n\n /**\n * 从扩展定义注册\n */\n registerFromExtension(extension) {\n if (!extension || extension.type !== EXTENSION_TYPES.PROPERTY_FIELD) return;\n const def = extension.definition;\n if (!def) return;\n this.register(def.fieldType, def.editor, {\n defaultValue: def.defaultValue,\n serialize: def.serialize,\n deserialize: def.deserialize,\n });\n }\n\n /**\n * 获取编辑器\n */\n get(fieldType) {\n return this.editors.get(fieldType) || null;\n }\n\n /**\n * 检查是否存在\n */\n has(fieldType) {\n return this.editors.has(fieldType);\n }\n\n /**\n * 是否为内置类型\n */\n isBuiltin(fieldType) {\n return BUILTIN_PROPERTY_FIELD_TYPES.includes(fieldType);\n }\n\n /**\n * 获取序列化器\n */\n getSerializer(fieldType) {\n return this.serializers.get(fieldType) || {\n defaultValue: () => null,\n serialize: v => v,\n deserialize: v => v,\n };\n }\n\n /**\n * 获取所有已注册字段类型\n */\n getAllTypes() {\n return Array.from(this.editors.keys());\n }\n\n /**\n * 清空\n */\n clear() {\n this.editors.clear();\n this.serializers.clear();\n }\n\n /**\n * 获取数量\n */\n size() {\n return this.editors.size;\n }\n}\n\nexport { PropertyFieldRegistry };\nexport const propertyFieldRegistry = new PropertyFieldRegistry();\nexport default PropertyFieldRegistry;\n","/**\n * @nbreak/vue - useDataScreen composable\n *\n * 提供全局配置访问与扩展操作能力\n */\nimport { inject, getCurrentInstance } from 'vue';\nimport { extensionRegistry } from '@nbreak/core';\nimport { propertyFieldRegistry } from '../propertyFieldRegistry.js';\n\nexport const DATASCREEN_INJECTION_KEY = Symbol('datascreen');\n\n/**\n * 获取 DataScreen 全局配置\n */\nexport function useDataScreen() {\n const instance = getCurrentInstance();\n const config = instance?.appContext.config.globalProperties.$datascreen ||\n inject(DATASCREEN_INJECTION_KEY, null);\n\n return {\n config,\n extensionRegistry,\n propertyFieldRegistry,\n registerExtension: (ext) => extensionRegistry.register(ext),\n unregisterExtension: (name) => extensionRegistry.unregister(name),\n };\n}\n","<template>\n <div class=\"ds-property-field\">\n <component\n v-if=\"editorComponent\"\n :is=\"editorComponent\"\n :modelValue=\"innerValue\"\n :field=\"field\"\n :props=\"propsData\"\n :placeholder=\"field.placeholder || ''\"\n @update:modelValue=\"onUpdate\"\n />\n <div v-else class=\"ds-property-field-fallback\">\n <input\n :value=\"innerValue\"\n @input=\"onInputFallback\"\n :placeholder=\"field.placeholder || field.label || ''\"\n class=\"ds-property-field-input\"\n />\n <small v-if=\"!isBuiltin\" class=\"ds-property-field-warning\">\n 未知字段类型: {{ field.type }}\n </small>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, watch } from 'vue';\nimport { propertyFieldRegistry } from '../propertyFieldRegistry.js';\n\nconst props = defineProps({\n modelValue: { default: null },\n field: { type: Object, required: true },\n propsData: { type: Object, default: () => ({}) },\n});\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst innerValue = ref(props.modelValue);\n\nwatch(() => props.modelValue, (val) => {\n innerValue.value = val;\n});\n\nconst isBuiltin = computed(() => propertyFieldRegistry.isBuiltin(props.field.type));\nconst editorComponent = computed(() => propertyFieldRegistry.get(props.field.type));\n\nfunction onUpdate(val) {\n innerValue.value = val;\n emit('update:modelValue', val);\n}\n\nfunction onInputFallback(e) {\n const val = e.target.value;\n onUpdate(val);\n}\n</script>\n\n<style scoped>\n.ds-property-field {\n width: 100%;\n}\n\n.ds-property-field-fallback {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ds-property-field-input {\n width: 100%;\n padding: 4px 8px;\n border: 1px solid rgba(255,255,255,0.15);\n border-radius: 4px;\n background: rgba(0,0,0,0.15);\n color: inherit;\n font-size: 13px;\n}\n\n.ds-property-field-input:focus {\n outline: none;\n border-color: #1890ff;\n}\n\n.ds-property-field-warning {\n color: #faad14;\n font-size: 11px;\n}\n</style>\n","<template>\n <div class=\"ds-schema-form\">\n <div\n v-for=\"group in groupedFields\"\n :key=\"group.name\"\n class=\"ds-schema-form-group\"\n >\n <div class=\"ds-schema-form-group-title\">{{ group.name }}</div>\n <div class=\"ds-schema-form-group-fields\">\n <div\n v-for=\"field in group.fields\"\n :key=\"field.key\"\n v-show=\"isFieldVisible(field)\"\n class=\"ds-schema-form-field\"\n >\n <label class=\"ds-schema-form-label\">\n {{ field.label }}\n <span v-if=\"field.required\" class=\"ds-schema-form-required\">*</span>\n </label>\n <PropertyFieldRenderer\n :modelValue=\"getFieldValue(field.key)\"\n :field=\"field\"\n :propsData=\"propsData\"\n @update:modelValue=\"(val) => setFieldValue(field.key, val)\"\n />\n <small v-if=\"field.description\" class=\"ds-schema-form-description\">\n {{ field.description }}\n </small>\n <small v-if=\"errors[field.key]\" class=\"ds-schema-form-error\">\n {{ errors[field.key] }}\n </small>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, watch } from 'vue';\nimport { groupFields, getNestedValue, setNestedValue, isFieldVisible, validateField } from '@nbreak/shared';\nimport PropertyFieldRenderer from './PropertyFieldRenderer.vue';\n\nconst props = defineProps({\n schema: { type: Array, default: () => [] },\n modelValue: { type: Object, default: () => ({}) },\n propsData: { type: Object, default: () => ({}) },\n context: { type: Object, default: () => ({}) },\n});\n\nconst emit = defineEmits(['update:modelValue', 'validate']);\n\nconst errors = ref({});\n\nconst groupedFields = computed(() => groupFields(props.schema));\n\nwatch(() => props.modelValue, (val) => {\n validate(val);\n}, { deep: true });\n\nfunction getFieldValue(key) {\n return getNestedValue(props.modelValue, key);\n}\n\nfunction setFieldValue(key, value) {\n const newObj = { ...props.modelValue };\n setNestedValue(newObj, key, value);\n emit('update:modelValue', newObj);\n}\n\nfunction isFieldVisibleLocal(field) {\n return isFieldVisible(field, props.modelValue, { ...props.context, propsData: props.propsData });\n}\n\nfunction validate(data = props.modelValue) {\n const errs = {};\n for (const field of props.schema) {\n if (!isFieldVisibleLocal(field)) continue;\n const value = getFieldValue(field.key);\n const result = validateField(field, value);\n if (result !== true) {\n errs[field.key] = result;\n }\n }\n errors.value = errs;\n emit('validate', { valid: Object.keys(errs).length === 0, errors: errs });\n return Object.keys(errs).length === 0;\n}\n\ndefineExpose({ validate });\n</script>\n\n<style scoped>\n.ds-schema-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.ds-schema-form-group {\n border: 1px solid rgba(255,255,255,0.08);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.ds-schema-form-group-title {\n padding: 8px 12px;\n background: rgba(255,255,255,0.04);\n font-size: 12px;\n font-weight: 600;\n color: rgba(255,255,255,0.85);\n}\n\n.ds-schema-form-group-fields {\n padding: 8px 12px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.ds-schema-form-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ds-schema-form-label {\n font-size: 12px;\n color: rgba(255,255,255,0.75);\n}\n\n.ds-schema-form-required {\n color: #f5222d;\n margin-left: 2px;\n}\n\n.ds-schema-form-description {\n font-size: 11px;\n color: rgba(255,255,255,0.45);\n}\n\n.ds-schema-form-error {\n font-size: 11px;\n color: #f5222d;\n}\n</style>\n","/**\n * @nbreak/vue - Vue 插件主入口\n *\n * 提供 app.use(DataScreenVue, { extensions, builtin, runtime }) 集成能力\n *\n * 注意:Vue 的 app.use() 不会 await async install,因此提供:\n * 1. DataScreenVuePlugin - 同步插件(注册全局组件、注入配置)\n * 2. setupDataScreen(app, options) - 异步 setup,await 后再 mount\n *\n * 对标:\n * - DataV 嵌入式 SDK\n * - Superset 的 @superset-ui/core + @superset-ui/vue\n */\nimport { extensionRegistry, pluginSystem, eventBus } from '@nbreak/core';\nimport { EXTENSION_TYPES, EXTENSION_STATUS } from '@nbreak/shared';\nimport { propertyFieldRegistry } from './propertyFieldRegistry.js';\nimport { DATASCREEN_INJECTION_KEY } from './composables/useDataScreen.js';\nimport SchemaFormRenderer from './components/SchemaFormRenderer.vue';\nimport PropertyFieldRenderer from './components/PropertyFieldRenderer.vue';\n\n/**\n * 异步 setup:加载扩展并注册\n * 应用方应在 app.mount() 之前 await 此函数\n *\n * @param {import('vue').App} app\n * @param {Object} [options]\n * @param {Array} [options.extensions] - 静态扩展数组\n * @param {Object} [options.builtin] - 启用内置包 { components, themes, datasources }\n * @param {Object} [options.runtime] - 运行时加载配置\n * @param {boolean} [options.autoRegisterComponents=true] - 自动注册组件扩展为全局组件\n */\nexport async function setupDataScreen(app, options = {}) {\n const {\n extensions = [],\n builtin = {},\n runtime: runtimeConfig = null,\n autoRegisterComponents = true,\n } = options;\n\n const config = {\n extensions: [],\n builtin,\n runtime: runtimeConfig,\n version: '0.1.0',\n };\n app.config.globalProperties.$datascreen = config;\n app.provide(DATASCREEN_INJECTION_KEY, config);\n\n // 注册全局组件\n app.component('SchemaFormRenderer', SchemaFormRenderer);\n app.component('PropertyFieldRenderer', PropertyFieldRenderer);\n\n // 加载内置包\n if (builtin.themes) {\n try {\n const themesPkg = await import('@nbreak/themes');\n const themeExtensions = themesPkg.extensions || (themesPkg.default ? themesPkg.default.extensions || [] : []);\n for (const ext of themeExtensions) {\n await extensionRegistry.register(ext);\n }\n console.log(`[DataScreen Vue] 已加载内置主题包 (${themeExtensions.length} 个)`);\n } catch (e) {\n console.warn('[DataScreen Vue] 内置主题包加载失败:', e.message);\n }\n }\n\n if (builtin.datasources) {\n try {\n const dsPkg = await import('@nbreak/datasources');\n const dsExtensions = dsPkg.extensions || (dsPkg.default ? dsPkg.default.extensions || [] : []);\n for (const ext of dsExtensions) {\n await extensionRegistry.register(ext);\n }\n console.log(`[DataScreen Vue] 已加载内置数据源包 (${dsExtensions.length} 个)`);\n } catch (e) {\n console.warn('[DataScreen Vue] 内置数据源包加载失败:', e.message);\n }\n }\n\n if (builtin.ui || builtin.components) {\n try {\n const uiPkg = await import('@nbreak/ui');\n const uiExtensions = uiPkg.extensions || (uiPkg.default ? uiPkg.default.extensions || [] : []);\n for (const ext of uiExtensions) {\n await extensionRegistry.register(ext);\n if (autoRegisterComponents && ext.type === EXTENSION_TYPES.COMPONENT) {\n const def = ext.definition;\n if (def && def.component) {\n app.component(def.type, def.component);\n }\n }\n }\n console.log(`[DataScreen Vue] 已加载内置组件包 (${uiExtensions.length} 个)`);\n } catch (e) {\n console.warn('[DataScreen Vue] 内置组件包加载失败:', e.message);\n }\n }\n\n // 注册静态扩展\n for (const ext of extensions) {\n await extensionRegistry.register(ext);\n config.extensions.push(ext.name);\n\n if (ext.type === EXTENSION_TYPES.PROPERTY_FIELD) {\n propertyFieldRegistry.registerFromExtension(ext);\n }\n\n if (autoRegisterComponents && ext.type === EXTENSION_TYPES.COMPONENT) {\n const def = ext.definition;\n if (def && def.component) {\n app.component(def.type, def.component);\n }\n }\n }\n\n // 运行时加载\n if (runtimeConfig) {\n try {\n const { loadExtensions, setHostVersion } = await import('@nbreak/runtime-loader');\n setHostVersion(config.version);\n\n if (runtimeConfig.manifestRegistry) {\n const { manifestRegistry } = await import('@nbreak/runtime-loader');\n manifestRegistry.addSource(runtimeConfig.manifestRegistry);\n\n if (runtimeConfig.autoLoad) {\n await manifestRegistry.sync();\n const results = await loadExtensions(manifestRegistry.getAll());\n const success = results.filter(r => r.success).length;\n const failed = results.filter(r => !r.success).length;\n console.log(`[DataScreen Vue] 运行时扩展加载: ${success} 成功, ${failed} 失败`);\n\n for (const result of results) {\n if (result.success && result.extension?.type === EXTENSION_TYPES.PROPERTY_FIELD) {\n propertyFieldRegistry.registerFromExtension(result.extension);\n }\n }\n }\n }\n } catch (e) {\n console.warn('[DataScreen Vue] 运行时加载器初始化失败:', e.message);\n }\n }\n\n console.log(`[DataScreen Vue] setup 完成 (扩展: ${extensionRegistry.size()} 个)`);\n return config;\n}\n\n/**\n * 同步 Vue 插件(仅注册全局组件和注入配置,不加载扩展)\n * 如需加载扩展,请使用 setupDataScreen()\n */\nexport const DataScreenVuePlugin = {\n name: 'DataScreenVue',\n version: '0.1.0',\n\n install(app, options = {}) {\n const config = {\n extensions: [],\n builtin: options.builtin || {},\n runtime: options.runtime || null,\n version: '0.1.0',\n };\n app.config.globalProperties.$datascreen = config;\n app.provide(DATASCREEN_INJECTION_KEY, config);\n app.component('SchemaFormRenderer', SchemaFormRenderer);\n app.component('PropertyFieldRenderer', PropertyFieldRenderer);\n\n // 如果传入了 extensions,同步注册(不 await,fire-and-forget)\n if (options.extensions) {\n for (const ext of options.extensions) {\n extensionRegistry.register(ext);\n if (options.autoRegisterComponents !== false && ext.type === EXTENSION_TYPES.COMPONENT) {\n const def = ext.definition;\n if (def && def.component) {\n app.component(def.type, def.component);\n }\n }\n if (ext.type === EXTENSION_TYPES.PROPERTY_FIELD) {\n propertyFieldRegistry.registerFromExtension(ext);\n }\n }\n }\n },\n};\n\nexport default DataScreenVuePlugin;\n","/**\n * @nbreak/vue - useExtensionRegistry composable\n *\n * 提供 Vue 响应式访问扩展注册表的能力\n */\nimport { ref, computed, onUnmounted } from 'vue';\nimport { extensionRegistry, eventBus, EXTENSION_TYPES } from '@nbreak/core';\n\n/**\n * Vue 响应式访问扩展注册表\n */\nexport function useExtensionRegistry() {\n const refreshTick = ref(0);\n\n const refresh = () => { refreshTick.value++; };\n\n const unsubscribe = eventBus.on('extension:registered', refresh);\n const unsubscribe2 = eventBus.on('extension:unregistered', refresh);\n const unsubscribe3 = eventBus.on('extension:enabled', refresh);\n const unsubscribe4 = eventBus.on('extension:disabled', refresh);\n\n onUnmounted(() => {\n unsubscribe();\n unsubscribe2();\n unsubscribe3();\n unsubscribe4();\n });\n\n const allExtensions = computed(() => {\n refreshTick.value;\n return extensionRegistry.getAll();\n });\n\n const components = computed(() => {\n refreshTick.value;\n return extensionRegistry.getByType(EXTENSION_TYPES.COMPONENT);\n });\n\n const themes = computed(() => {\n refreshTick.value;\n return extensionRegistry.getByType(EXTENSION_TYPES.THEME);\n });\n\n const datasources = computed(() => {\n refreshTick.value;\n return extensionRegistry.getByType(EXTENSION_TYPES.DATASOURCE);\n });\n\n const templates = computed(() => {\n refreshTick.value;\n return extensionRegistry.getByType(EXTENSION_TYPES.TEMPLATE);\n });\n\n const actions = computed(() => {\n refreshTick.value;\n return extensionRegistry.getByType(EXTENSION_TYPES.ACTION);\n });\n\n const propertyFields = computed(() => {\n refreshTick.value;\n return extensionRegistry.getByType(EXTENSION_TYPES.PROPERTY_FIELD);\n });\n\n return {\n allExtensions,\n components,\n themes,\n datasources,\n templates,\n actions,\n propertyFields,\n getExtension: (type, name) => extensionRegistry.get(type, name),\n hasExtension: (name) => extensionRegistry.has(name),\n };\n}\n","/**\n * @nbreak/vue - 入口\n *\n * 提供:\n * - DataScreenVuePlugin(默认导出,app.use() 集成)\n * - SchemaFormRenderer(统一配置面板渲染器)\n * - PropertyFieldRenderer(字段渲染器)\n * - useExtensionRegistry / useDataScreen composables\n * - propertyFieldRegistry(字段类型注册表)\n * - re-export core 全部 API\n */\n\n// Vue 插件\nexport { DataScreenVuePlugin as default, DataScreenVuePlugin, setupDataScreen } from './plugin.js';\n\n// 组件\nexport { default as SchemaFormRenderer } from './components/SchemaFormRenderer.vue';\nexport { default as PropertyFieldRenderer } from './components/PropertyFieldRenderer.vue';\n\n// Composables\nexport { useExtensionRegistry } from './composables/useExtensionRegistry.js';\nexport { useDataScreen, DATASCREEN_INJECTION_KEY } from './composables/useDataScreen.js';\n\n// 属性字段注册表\nexport { propertyFieldRegistry, PropertyFieldRegistry } from './propertyFieldRegistry.js';\n\n// Core re-export(便于应用方一处导入)\nexport {\n extensionRegistry,\n pluginSystem,\n eventBus,\n EventBus,\n PluginSystem,\n ExtensionRegistry,\n EXTENSION_TYPES,\n EXTENSION_STATUS,\n PROPERTY_FIELD_TYPES,\n COMPONENT_CATEGORIES,\n HOOK_NAMES,\n} from '@nbreak/core';\n\n// SDK re-export\nexport {\n defineComponentExtension,\n defineThemeExtension,\n defineDataSourceExtension,\n defineTemplateExtension,\n defineActionExtension,\n definePropertyFieldExtension,\n defineExtension,\n registerExtensions,\n} from '@nbreak/sdk';\n\n// Runtime loader re-export\nexport {\n loadExtension,\n loadExtensions,\n unloadExtension,\n manifestRegistry,\n} from '@nbreak/runtime-loader';\n\n// Shared re-export\nexport {\n definePropertyField,\n definePropertyGroup,\n groupFields,\n resolveDefaults,\n getNestedValue,\n setNestedValue,\n isFieldVisible,\n validateField,\n validateManifest,\n createManifest,\n} from '@nbreak/shared';\n\n// 版本信息\nexport const VERSION = '0.1.0';\nexport const PACKAGE_NAME = '@nbreak/vue';\n"],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+
2
+ .ds-property-field[data-v-93e4a7cd] {
3
+ width: 100%;
4
+ }
5
+ .ds-property-field-fallback[data-v-93e4a7cd] {
6
+ display: flex;
7
+ flex-direction: column;
8
+ gap: 4px;
9
+ }
10
+ .ds-property-field-input[data-v-93e4a7cd] {
11
+ width: 100%;
12
+ padding: 4px 8px;
13
+ border: 1px solid rgba(255,255,255,0.15);
14
+ border-radius: 4px;
15
+ background: rgba(0,0,0,0.15);
16
+ color: inherit;
17
+ font-size: 13px;
18
+ }
19
+ .ds-property-field-input[data-v-93e4a7cd]:focus {
20
+ outline: none;
21
+ border-color: #1890ff;
22
+ }
23
+ .ds-property-field-warning[data-v-93e4a7cd] {
24
+ color: #faad14;
25
+ font-size: 11px;
26
+ }
27
+
28
+ .ds-schema-form[data-v-e5ecc246] {
29
+ display: flex;
30
+ flex-direction: column;
31
+ gap: 12px;
32
+ }
33
+ .ds-schema-form-group[data-v-e5ecc246] {
34
+ border: 1px solid rgba(255,255,255,0.08);
35
+ border-radius: 6px;
36
+ overflow: hidden;
37
+ }
38
+ .ds-schema-form-group-title[data-v-e5ecc246] {
39
+ padding: 8px 12px;
40
+ background: rgba(255,255,255,0.04);
41
+ font-size: 12px;
42
+ font-weight: 600;
43
+ color: rgba(255,255,255,0.85);
44
+ }
45
+ .ds-schema-form-group-fields[data-v-e5ecc246] {
46
+ padding: 8px 12px;
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: 10px;
50
+ }
51
+ .ds-schema-form-field[data-v-e5ecc246] {
52
+ display: flex;
53
+ flex-direction: column;
54
+ gap: 4px;
55
+ }
56
+ .ds-schema-form-label[data-v-e5ecc246] {
57
+ font-size: 12px;
58
+ color: rgba(255,255,255,0.75);
59
+ }
60
+ .ds-schema-form-required[data-v-e5ecc246] {
61
+ color: #f5222d;
62
+ margin-left: 2px;
63
+ }
64
+ .ds-schema-form-description[data-v-e5ecc246] {
65
+ font-size: 11px;
66
+ color: rgba(255,255,255,0.45);
67
+ }
68
+ .ds-schema-form-error[data-v-e5ecc246] {
69
+ font-size: 11px;
70
+ color: #f5222d;
71
+ }
72
+ /*$vite$:1*/
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@nbreak/vue",
3
+ "version": "0.1.0",
4
+ "description": "DataScreen Vue 3 集成:Vue 插件、构建块导出、SchemaFormRenderer",
5
+ "type": "module",
6
+ "main": "./dist/cjs/index.cjs",
7
+ "module": "./dist/esm/index.js",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/esm/index.js",
11
+ "require": "./dist/cjs/index.cjs"
12
+ },
13
+ "./styles.css": "./dist/esm/vue.css"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md"
18
+ ],
19
+ "dependencies": {
20
+ "@nbreak/shared": "0.1.0",
21
+ "@nbreak/core": "0.1.0",
22
+ "@nbreak/runtime-loader": "0.1.0",
23
+ "@nbreak/sdk": "0.1.0"
24
+ },
25
+ "peerDependencies": {
26
+ "vue": "^3.5.0"
27
+ },
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
31
+ "license": "SEE LICENSE IN LICENSE",
32
+ "scripts": {
33
+ "build": "rm -rf dist && BUILD_FORMAT=es vite build && BUILD_FORMAT=cjs vite build",
34
+ "dev": "vite build --watch"
35
+ }
36
+ }