@qin-ui/element-plus-pro 1.0.5 → 1.0.7

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/AI-CONTEXT.md CHANGED
@@ -27,7 +27,7 @@ npm install @qin-ui/element-plus-pro element-plus vue
27
27
 
28
28
  每个字段支持:`path`, `label`, `component`, `hidden`, `disabled`, `rules`, `valueFormatter`, `fields`, `grid`, `slots`, `componentStyle`, `componentClass`, `componentContainer`, `formItemStyle`, `formItemClass`, `formItemContainer`, `modelProp`
29
29
 
30
- 内置组件:input, textarea, input-search, input-password, input-number, select, cascader, date-picker, range-picker, time-picker, checkbox-group, radio-group, switch, slider, tree-select, transfer, custom
30
+ 内置组件:input, input-number, autocomplete, select, cascader, date-picker, time-picker, time-select, checkbox-group, radio-group, switch, slider, tree-select, transfer, custom
31
31
 
32
32
  ## 表格列配置(Column)
33
33
 
package/api.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-06-04T09:03:47.369Z",
2
+ "generatedAt": "2026-06-08T06:46:58.908Z",
3
3
  "name": "@qin-ui/element-plus-pro",
4
4
  "api": [
5
5
  {
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * @qin-ui/* AI 上下文初始化 CLI 工具
5
+ *
6
+ * 遵循 Agentic Collaboration Standard (ACS),
7
+ * 在消费方项目中自动生成统一的 .agents 规范配置文件。
8
+ *
9
+ * 用法:
10
+ * npx @qin-ui/element-plus-pro init-ai
11
+ */
12
+
13
+ import fs from 'node:fs';
14
+ import path from 'node:path';
15
+ import { fileURLToPath } from 'node:url';
16
+
17
+ // ==================== 常量 ====================
18
+
19
+ const __filename = fileURLToPath(import.meta.url);
20
+ const __dirname = path.dirname(__filename);
21
+ const PKG_ROOT = path.resolve(__dirname, '..');
22
+
23
+ const PKG_JSON = JSON.parse(
24
+ fs.readFileSync(path.join(PKG_ROOT, 'package.json'), 'utf-8')
25
+ );
26
+ const PKG_NAME = PKG_JSON.name;
27
+ const PKG_SHORT = PKG_NAME.replace(/^@qin-ui\//, '');
28
+
29
+ // ==================== 终端颜色 ====================
30
+
31
+ const green = (s) => `\x1b[32m${s}\x1b[0m`;
32
+ const cyan = (s) => `\x1b[36m${s}\x1b[0m`;
33
+ const bold = (s) => `\x1b[1m${s}\x1b[0m`;
34
+ const red = (s) => `\x1b[31m${s}\x1b[0m`;
35
+
36
+ // ==================== 内容生成 ====================
37
+
38
+ function getAiContextContent() {
39
+ const filePath = path.join(PKG_ROOT, 'AI-CONTEXT.md');
40
+ if (fs.existsSync(filePath)) {
41
+ return fs.readFileSync(filePath, 'utf-8').trim();
42
+ }
43
+ return `# ${PKG_NAME}\n\n> 基于 Vue 3 的配置驱动组件库。`;
44
+ }
45
+
46
+ function getUnifiedAgentContent() {
47
+ const aiContext = getAiContextContent();
48
+ const core = [
49
+ aiContext,
50
+ '',
51
+ '## 完整 API 参考',
52
+ '',
53
+ `使用 \`${PKG_NAME}\` 时,请阅读以下文件获取完整的 API 定义、类型签名和使用示例:`,
54
+ `- \`node_modules/${PKG_NAME}/README.md\` — 详细使用文档和代码示例`,
55
+ `- \`node_modules/${PKG_NAME}/api.json\` — 结构化 API 元数据(组件、Hook、类型的签名和 JSDoc 示例)`,
56
+ '',
57
+ ].join('\n');
58
+
59
+ // 包含兼容性的 Frontmatter(如 Cursor 支持的 globs 等)
60
+ return [
61
+ '---',
62
+ `description: "${PKG_NAME} 组件库使用规范"`,
63
+ 'globs: ["**/*.vue", "**/*.ts", "**/*.tsx"]',
64
+ 'alwaysApply: false',
65
+ '---',
66
+ '',
67
+ core,
68
+ ].join('\n');
69
+ }
70
+
71
+ // ==================== 文件写入 ====================
72
+
73
+ function ensureDir(dirPath) {
74
+ if (!fs.existsSync(dirPath)) {
75
+ fs.mkdirSync(dirPath, { recursive: true });
76
+ }
77
+ }
78
+
79
+ // ==================== CLI 入口 ====================
80
+
81
+ function printHelp() {
82
+ console.log(`
83
+ ${bold(`${PKG_NAME} CLI`)}
84
+
85
+ ${bold('用法:')}
86
+ npx ${PKG_NAME} init-ai
87
+
88
+ ${bold('命令:')}
89
+ init-ai 在当前项目中生成统一的 .agents 规范配置文件
90
+
91
+ ${bold('选项:')}
92
+ --help 显示帮助信息
93
+
94
+ ${bold('说明:')}
95
+ 该命令将采用统一的 Agentic 标准,在项目的 .agents/rules/ 目录下
96
+ 生成上下文文件。兼容支持读取 .agents 的主流 AI IDE 和 CLI 工具。
97
+ `);
98
+ }
99
+
100
+ function main() {
101
+ const args = process.argv.slice(2);
102
+ const subcommand = args.find((a) => !a.startsWith('-'));
103
+ const flags = args.filter((a) => a.startsWith('-'));
104
+
105
+ if (!subcommand || flags.includes('--help') || flags.includes('-h')) {
106
+ printHelp();
107
+ process.exit(0);
108
+ }
109
+
110
+ if (subcommand !== 'init-ai') {
111
+ console.error(red(`\n 未知命令: ${subcommand}\n`));
112
+ printHelp();
113
+ process.exit(1);
114
+ }
115
+
116
+ console.log('');
117
+ console.log(bold(`📦 ${PKG_NAME} — AI 上下文初始化 (ACS 标准)`));
118
+ console.log('');
119
+
120
+ const content = getUnifiedAgentContent();
121
+ const dirPath = '.agents/rules';
122
+ const fileName = `${PKG_SHORT}.md`;
123
+
124
+ const fullDir = path.join(process.cwd(), dirPath);
125
+ const fullPath = path.join(fullDir, fileName);
126
+
127
+ ensureDir(fullDir);
128
+ fs.writeFileSync(fullPath, content, 'utf-8');
129
+
130
+ const relPath = path.join(dirPath, fileName);
131
+ console.log(` ${green('✔')} ${cyan(relPath)} ${green('[created/updated]')}`);
132
+
133
+ console.log('');
134
+ console.log(green('✅ 完成!已生成统一标准规则文件。'));
135
+ console.log('');
136
+ console.log(`${bold('下一步:')}`);
137
+ console.log(
138
+ ` 将 ${cyan(dirPath)} 目录提交到 Git,团队即可自动享受 AI 增强\n`
139
+ );
140
+ }
141
+
142
+ main();
@@ -1,16 +1,16 @@
1
1
  [class*='-form-item'] [class*='-form-item'][data-v-1dd9fcdd] {
2
2
  margin-bottom: 18px;
3
3
  }
4
- .pro-table_search-form[data-v-157833fb] [class*='-form-item'] {
4
+ .pro-table_search-form[data-v-70679e47] [class*='-form-item'] {
5
5
  margin: 0;
6
6
  }
7
- .pro-table_search-form_expand-toggle-button[data-v-157833fb] {
7
+ .pro-table_search-form_expand-toggle-button[data-v-70679e47] {
8
8
  display: flex;
9
9
  align-items: center;
10
10
  padding: 0;
11
11
  padding-left: 4px;
12
12
  }
13
- .pro-table_search-form .transition[data-v-157833fb] {
13
+ .pro-table_search-form .transition[data-v-70679e47] {
14
14
  transition: all 0.25s;
15
15
  }
16
16
  .pro-table_search-form-container[data-v-45e627f4] {
package/es/index.d.ts CHANGED
@@ -1017,9 +1017,11 @@ declare type SearchFormProps = {
1017
1017
  form: Form;
1018
1018
  layout?: 'grid' | 'inline';
1019
1019
  expand?: boolean | Expand;
1020
- searchButton?: Component<ButtonProps> | DefineComponent<ButtonProps>;
1021
- resetButton?: Component<ButtonProps> | DefineComponent<ButtonProps>;
1022
- expandButton?: Component<ExpandButtonProps> | DefineComponent<ExpandButtonProps>;
1020
+ searchButton?: Component<ButtonProps> | DefineComponent<ButtonProps> | false;
1021
+ resetButton?: Component<ButtonProps> | DefineComponent<ButtonProps> | false;
1022
+ expandButton?: Component<ExpandButtonProps> | DefineComponent<ExpandButtonProps> | false;
1023
+ rowGap?: number;
1024
+ columnGap?: number;
1023
1025
  } & /* @vue-ignore */ _FormProps & AllowedComponentProps;
1024
1026
 
1025
1027
  declare type SetColumn<T extends Data = Data, C extends BaseColumn<T> = BaseColumn<T>> = (key: Path<T>, column: C | ((pre: Readonly<C>) => C), options?: {
package/es/table/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createElementBlock, openBlock, createElementVNode, defineComponent, ref, computed, watch, watchEffect, createBlock, unref, mergeProps, withKeys, withCtx, createVNode, renderSlot, resolveDynamicComponent, createTextVNode, createCommentVNode, Fragment, toDisplayString, normalizeStyle, useModel, renderList, withModifiers, mergeModels, inject, useAttrs, useSlots, onMounted, resolveDirective, normalizeClass, withDirectives, createSlots, normalizeProps, guardReactiveProps, nextTick } from "vue";
1
+ import { createElementBlock, openBlock, createElementVNode, defineComponent, ref, computed, watch, watchEffect, createBlock, unref, mergeProps, withKeys, withCtx, createVNode, renderSlot, createCommentVNode, Fragment, resolveDynamicComponent, createTextVNode, toDisplayString, normalizeStyle, useModel, renderList, withModifiers, mergeModels, inject, useAttrs, useSlots, onMounted, resolveDirective, normalizeClass, withDirectives, createSlots, normalizeProps, guardReactiveProps, nextTick } from "vue";
2
2
  import { ElSpace, ElButton, ElDropdown, ElDropdownMenu, ElDropdownItem, ElCheckbox, ElTableColumn, ElTable, ElPagination } from "element-plus";
3
3
  import { _ as _export_sfc, a as _sfc_main$a, t as tableProps, p as paginationProps, b as _sfc_main$b } from "../form/index-D8btGgqa.js";
4
4
  import { I as INJECT_CONFIG } from "../component-provider/index-Bmx9Q9Q-.js";
@@ -27,9 +27,11 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
27
27
  form: {},
28
28
  layout: { default: "grid" },
29
29
  expand: { type: [Boolean, Object], default: true },
30
- searchButton: { type: [Object, Function], default: void 0 },
31
- resetButton: { type: [Object, Function], default: void 0 },
32
- expandButton: { type: [Object, Function], default: void 0 },
30
+ searchButton: { type: [Object, Function, Boolean], default: void 0 },
31
+ resetButton: { type: [Object, Function, Boolean], default: void 0 },
32
+ expandButton: { type: [Object, Function, Boolean], default: void 0 },
33
+ rowGap: { default: 16 },
34
+ columnGap: { default: 24 },
33
35
  class: {},
34
36
  style: {}
35
37
  },
@@ -39,8 +41,6 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
39
41
  const proFormHeight = ref("unset");
40
42
  const collapseHeight = ref(0);
41
43
  let rowHeight = 32;
42
- const rowGap = 16;
43
- const columnGap = 24;
44
44
  const computedExpand = computed(() => {
45
45
  if (!__props.expand) return false;
46
46
  if (__props.expand === true) return { minExpandRows: 2, expandStatus: false };
@@ -106,7 +106,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
106
106
  if (__props.layout === "grid" && computedExpand.value) {
107
107
  const { minExpandRows } = computedExpand.value;
108
108
  collapseHeight.value = Math.min(
109
- minExpandRows * rowHeight + (minExpandRows - 1) * rowGap,
109
+ minExpandRows * rowHeight + (minExpandRows - 1) * __props.rowGap,
110
110
  +proFormHeight.value
111
111
  );
112
112
  showExpandToggle.value = +proFormHeight.value - collapseHeight.value > 1;
@@ -122,13 +122,13 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
122
122
  const layoutProps = computed(
123
123
  () => __props.layout === "grid" ? {
124
124
  grid: {
125
- gutter: columnGap,
126
- style: { rowGap: `${rowGap}px` }
125
+ gutter: __props.columnGap,
126
+ style: { rowGap: `${__props.rowGap}px` }
127
127
  },
128
128
  style: {
129
129
  display: "flex",
130
130
  overflow: "hidden",
131
- columnGap: `${columnGap}px`,
131
+ columnGap: `${__props.columnGap}px`,
132
132
  height: `${expandStatus.value ? proFormHeight.value : collapseHeight.value}px`
133
133
  }
134
134
  } : {
@@ -136,7 +136,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
136
136
  style: {
137
137
  display: "flex",
138
138
  flexWrap: "wrap",
139
- gap: `${rowGap}px ${columnGap}px`
139
+ gap: `${__props.rowGap}px ${__props.columnGap}px`
140
140
  },
141
141
  grid: false
142
142
  }
@@ -160,39 +160,43 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
160
160
  }, {
161
161
  default: withCtx(() => [
162
162
  renderSlot(_ctx.$slots, "reset-button", { onClick: onReset }, () => [
163
- __props.resetButton ? (openBlock(), createBlock(resolveDynamicComponent(__props.resetButton), {
164
- key: 0,
165
- onClick: onReset
166
- })) : (openBlock(), createBlock(unref(ElButton), {
167
- key: 1,
168
- class: "pro-table_search-form_reset-button",
169
- onClick: onReset
170
- }, {
171
- default: withCtx(() => [..._cache[0] || (_cache[0] = [
172
- createTextVNode("重置", -1)
173
- ])]),
174
- _: 1
175
- }))
163
+ __props.resetButton !== false ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
164
+ __props.resetButton ? (openBlock(), createBlock(resolveDynamicComponent(__props.resetButton), {
165
+ key: 0,
166
+ onClick: onReset
167
+ })) : (openBlock(), createBlock(unref(ElButton), {
168
+ key: 1,
169
+ class: "pro-table_search-form_reset-button",
170
+ onClick: onReset
171
+ }, {
172
+ default: withCtx(() => [..._cache[0] || (_cache[0] = [
173
+ createTextVNode("重置", -1)
174
+ ])]),
175
+ _: 1
176
+ }))
177
+ ], 64)) : createCommentVNode("", true)
176
178
  ], true),
177
179
  renderSlot(_ctx.$slots, "search-button", { onClick: onSearch }, () => [
178
- __props.searchButton ? (openBlock(), createBlock(resolveDynamicComponent(__props.searchButton), {
179
- key: 0,
180
- onClick: onSearch
181
- })) : (openBlock(), createBlock(unref(ElButton), {
182
- key: 1,
183
- class: "pro-table_search-form_search-button",
184
- type: "primary",
185
- "native-type": "submit",
186
- onClick: onSearch
187
- }, {
188
- default: withCtx(() => [..._cache[1] || (_cache[1] = [
189
- createTextVNode(" 查询 ", -1)
190
- ])]),
191
- _: 1
192
- }))
180
+ __props.searchButton !== false ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
181
+ __props.searchButton ? (openBlock(), createBlock(resolveDynamicComponent(__props.searchButton), {
182
+ key: 0,
183
+ onClick: onSearch
184
+ })) : (openBlock(), createBlock(unref(ElButton), {
185
+ key: 1,
186
+ class: "pro-table_search-form_search-button",
187
+ type: "primary",
188
+ "native-type": "submit",
189
+ onClick: onSearch
190
+ }, {
191
+ default: withCtx(() => [..._cache[1] || (_cache[1] = [
192
+ createTextVNode(" 查询 ", -1)
193
+ ])]),
194
+ _: 1
195
+ }))
196
+ ], 64)) : createCommentVNode("", true)
193
197
  ], true),
194
198
  renderSlot(_ctx.$slots, "expand-button", { onClick: changeExpandStatus }, () => [
195
- showExpandToggle.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
199
+ __props.expandButton !== false && showExpandToggle.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
196
200
  __props.expandButton ? (openBlock(), createBlock(resolveDynamicComponent(__props.expandButton), {
197
201
  key: 0,
198
202
  "expand-status": expandStatus.value,
@@ -223,7 +227,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
223
227
  };
224
228
  }
225
229
  });
226
- const SearchForm = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-157833fb"]]);
230
+ const SearchForm = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-70679e47"]]);
227
231
  const _sfc_main$7 = {};
228
232
  const _hoisted_1$4 = { class: "pro-table_search-form-container" };
229
233
  function _sfc_render$3(_ctx, _cache) {
package/package.json CHANGED
@@ -1,7 +1,10 @@
1
1
  {
2
2
  "name": "@qin-ui/element-plus-pro",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "基于 element-plus 的二次封装组件",
5
+ "bin": {
6
+ "element-plus-pro": "./bin/init-ai.mjs"
7
+ },
5
8
  "type": "module",
6
9
  "module": "es/index.js",
7
10
  "types": "es/index.d.ts",
@@ -14,6 +17,7 @@
14
17
  },
15
18
  "files": [
16
19
  "es",
20
+ "bin",
17
21
  "README.md",
18
22
  "LICENSE",
19
23
  "api.json",