@aiao/rxdb-model 0.0.26 → 0.0.28
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/cn.d.ts +1 -1
- package/dist/entity-capabilities.d.ts +1 -7
- package/dist/entity-detail/detail-tabs.d.ts +2 -7
- package/dist/entity-detail/interfaces.d.ts +1 -5
- package/dist/entity-field.utils.d.ts +1 -7
- package/dist/entity-form/form-data.d.ts +1 -1
- package/dist/entity-form/form-fields.d.ts +2 -7
- package/dist/entity-form/form-validation.d.ts +2 -7
- package/dist/entity-form/interfaces.d.ts +2 -6
- package/dist/entity-list/manual-order-list.d.ts +2 -9
- package/dist/entity-list/types.d.ts +25 -0
- package/dist/entity-list/types.d.ts.map +1 -0
- package/dist/entity-table/columns/build-editable-columns.d.ts +4 -4
- package/dist/entity-table/columns/column-utils.d.ts +4 -4
- package/dist/entity-table/editors/color-editor.d.ts +1 -1
- package/dist/entity-table/editors/date-editor.d.ts +1 -1
- package/dist/entity-table/editors/enum-editor.d.ts +1 -1
- package/dist/entity-table/editors/global-overlay-editor.d.ts +1 -1
- package/dist/entity-table/editors/icon-list-editor.d.ts +1 -1
- package/dist/entity-table/editors/json-editor.d.ts +1 -1
- package/dist/entity-table/editors/key-value-editor.d.ts +3 -3
- package/dist/entity-table/editors/number-editor.d.ts +1 -1
- package/dist/entity-table/editors/relation-editor.d.ts +2 -2
- package/dist/entity-table/editors/tags-editor.d.ts +1 -1
- package/dist/entity-table/editors/text-format-editor.d.ts +1 -1
- package/dist/entity-table/editors/uuid-editor.d.ts +1 -1
- package/dist/entity-table/interfaces.d.ts +25 -0
- package/dist/entity-table/interfaces.d.ts.map +1 -1
- package/dist/entity-table/vtable/table-clipboard.d.ts +1 -1
- package/dist/entity-table/vtable/table-factory.d.ts +2 -2
- package/dist/entity-table/vtable/table-operations.d.ts +2 -2
- package/dist/entity-table/vtable/table-row-move.d.ts +1 -1
- package/dist/entity-value.utils.d.ts +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/query-builder/models/config.interface.d.ts +2 -2
- package/dist/query-builder/models/operator.interface.d.ts +2 -2
- package/dist/query-builder/models/validation.interface.d.ts +2 -2
- package/dist/query-builder/services/operator-registry.service.d.ts +3 -7
- package/dist/query-builder/services/query-builder.service.d.ts +4 -8
- package/dist/query-builder/services/query-converter.service.d.ts +2 -6
- package/dist/query-builder/services/schema-parser.service.d.ts +2 -6
- package/dist/query-builder/services/schema-parser.service.d.ts.map +1 -1
- package/dist/query-builder/services/validation.service.d.ts +2 -6
- package/dist/query-builder/utils/field-tree.d.ts +1 -7
- package/dist/query-builder/utils/metadata-field-extractor.d.ts +2 -3
- package/dist/query-builder/utils/popover-position.d.ts.map +1 -1
- package/dist/query-builder/utils/schema-factory.d.ts +3 -7
- package/dist/query-builder/utils/value-input.d.ts +1 -1
- package/package.json +5 -5
- package/src/entity-list/types.ts +22 -0
- package/src/entity-table/editors/key-value-editor.ts +1 -1
- package/src/entity-table/interfaces.ts +28 -0
- package/src/index.ts +1 -0
- package/src/query-builder/services/schema-parser.service.ts +5 -2
- package/src/query-builder/utils/popover-position.ts +5 -1
package/dist/cn.d.ts
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* @fileoverview 实体界面能力派生(US-027)
|
|
3
|
-
*
|
|
4
|
-
* 实体管理界面的「新增 / 编辑 / 删除」入口只读这一份结论,结论只来自实体的 `permissions` 声明:
|
|
5
|
-
* 是不是系统表、在哪个命名空间都不参与——系统表已经显式声明三项都为 `'system'`。
|
|
6
|
-
*/
|
|
7
|
-
import { type EntityMetadata } from '@aiao/rxdb';
|
|
1
|
+
import { EntityMetadata } from '@aiao/rxdb';
|
|
8
2
|
/**
|
|
9
3
|
* 实体在公开写入口上允许的界面操作
|
|
10
4
|
*/
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* 根据实体元数据生成详情页标签配置
|
|
4
|
-
* @module entity-detail/detail-tabs
|
|
5
|
-
*/
|
|
6
|
-
import { type EntityMetadata } from '@aiao/rxdb';
|
|
7
|
-
import type { DetailTab } from './interfaces.js';
|
|
1
|
+
import { EntityMetadata } from '@aiao/rxdb';
|
|
2
|
+
import { DetailTab } from './interfaces.js';
|
|
8
3
|
/**
|
|
9
4
|
* 根据实体元数据构建详情页标签列表
|
|
10
5
|
* @remarks 基本信息表单标签固定排在首位,其后为每个一对多 / 多对多关系生成一个表格标签
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* RxDB Model 实体字段工具模块
|
|
3
|
-
* 提供实体字段值的解析、格式化、验证等功能
|
|
4
|
-
* @module entity-field.utils
|
|
5
|
-
*/
|
|
6
|
-
import type { EntityMetadata } from '@aiao/rxdb';
|
|
7
|
-
import { PropertyType, type FieldFormat, type FieldOptions } from '@aiao/rxdb';
|
|
1
|
+
import { EntityMetadata, PropertyType, FieldFormat, FieldOptions } from '@aiao/rxdb';
|
|
8
2
|
/**
|
|
9
3
|
* 实体字段类型
|
|
10
4
|
* @remarks 兼容 PropertyType 枚举值及其字符串字面量形式,并包含关系字段(oneToOne / manyToOne)与计算字段(computed)的标识
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* 根据实体元数据与表单模式生成、排序与过滤表单字段
|
|
4
|
-
* @module entity-form/form-fields
|
|
5
|
-
*/
|
|
6
|
-
import type { EntityMetadata } from '@aiao/rxdb';
|
|
7
|
-
import type { FormFieldConfig, FormMode } from './interfaces.js';
|
|
1
|
+
import { EntityMetadata } from '@aiao/rxdb';
|
|
2
|
+
import { FormFieldConfig, FormMode } from './interfaces.js';
|
|
8
3
|
/**
|
|
9
4
|
* 根据实体元数据和表单模式构建表单字段列表
|
|
10
5
|
* @remarks 创建模式排除计算字段且不含系统字段;编辑模式追加只读的系统字段;查看模式全部字段设为只读
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* 基于字段配置校验单个字段值与整份表单数据
|
|
4
|
-
* @module entity-form/form-validation
|
|
5
|
-
*/
|
|
6
|
-
import { type FieldValidationError } from '../entity-value.utils.js';
|
|
7
|
-
import type { EntityFormData, FormFieldConfig, FormValidationResult } from './interfaces.js';
|
|
1
|
+
import { FieldValidationError } from '../entity-value.utils.js';
|
|
2
|
+
import { EntityFormData, FormFieldConfig, FormValidationResult } from './interfaces.js';
|
|
8
3
|
/**
|
|
9
4
|
* 校验单个表单字段值
|
|
10
5
|
* @param field - 表单字段配置
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* @module entity-form/interfaces
|
|
4
|
-
*/
|
|
5
|
-
import type { FieldFormat, FieldOptions } from '@aiao/rxdb';
|
|
6
|
-
import type { EntityFieldType, KeyValueSchemaEntry } from '../entity-field.utils.js';
|
|
1
|
+
import { FieldFormat, FieldOptions } from '@aiao/rxdb';
|
|
2
|
+
import { EntityFieldType, KeyValueSchemaEntry } from '../entity-field.utils.js';
|
|
7
3
|
/**
|
|
8
4
|
* 表单模式
|
|
9
5
|
*/
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* 列表只在「看到的行就是一条完整排序域」时允许拖拽:邻居才是真邻居,
|
|
5
|
-
* `Repository.reorder()` 才能按 `{ prevId, nextId }` 落到用户看到的位置。
|
|
6
|
-
* 三端 `EntityList` 共用这一份判定与协调,框架层只负责收集状态和接线。
|
|
7
|
-
*/
|
|
8
|
-
import { type EntityMetadata, type OrderBy } from '@aiao/rxdb';
|
|
9
|
-
import type { RowMoveEvent } from '../entity-table/vtable/table-row-move.js';
|
|
1
|
+
import { EntityMetadata, OrderBy } from '@aiao/rxdb';
|
|
2
|
+
import { RowMoveEvent } from '../entity-table/vtable/table-row-move.js';
|
|
10
3
|
/** 列表排序判定需要的实体元数据 */
|
|
11
4
|
export type ManualOrderListMetadata = Pick<EntityMetadata, 'manualOrder' | 'propertyMap'>;
|
|
12
5
|
/** 列表的固定查询(详情页关系标签传入),结构同查询构建器的规则组 */
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 实体列表共享类型。
|
|
3
|
+
*
|
|
4
|
+
* @module entity-list/types
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* RxDB 实体实例(用于 CRUD 操作)。
|
|
8
|
+
*
|
|
9
|
+
* 三端组件库(Angular / React / Vue)此前各自内联了同形副本,现收敛到核心包
|
|
10
|
+
* 统一透传:Angular / Vue 经包根 `export *` 链、React 经 entity-list 模块显式再导出。
|
|
11
|
+
*/
|
|
12
|
+
export type EntityInstance = {
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
readonly id: string;
|
|
15
|
+
save(): Promise<void>;
|
|
16
|
+
remove(): Promise<void>;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* 筛选查询结构(与用户筛选条件做 AND 合并)。
|
|
20
|
+
*/
|
|
21
|
+
export type FilterQuery = {
|
|
22
|
+
combinator: 'and' | 'or';
|
|
23
|
+
rules: unknown[];
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/entity-list/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,UAAU,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
1
|
+
import { EntityMetadata, EntityPropertyMetadata } from '@aiao/rxdb';
|
|
2
|
+
import { ColumnDefine } from '@visactor/vtable/es/ts-types/index.js';
|
|
3
|
+
import { RelatedEntityItem } from '../../entity-form/interfaces.js';
|
|
4
|
+
import { KVSchemaEntry } from './column-utils.js';
|
|
5
5
|
/** 仅展示(不可编辑)的系统字段 */
|
|
6
6
|
export declare const DISPLAY_ONLY_FIELDS: Set<string>;
|
|
7
7
|
/** 跳过(不显示为独立列)的系统字段 */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
1
|
+
import { FieldFormat, FieldOptions } from '@aiao/rxdb';
|
|
2
|
+
import { ColumnDefine, StylePropertyFunctionArg } from '@visactor/vtable/es/ts-types/index.js';
|
|
3
|
+
import { RelatedEntityItem } from '../../entity-form/interfaces.js';
|
|
4
|
+
import { EnumItem } from '../editors/enum-editor.js';
|
|
5
5
|
/** 删除图标默认颜色 */
|
|
6
6
|
export declare const DELETE_COLOR = "var(--entity-table-delete, #ef4444)";
|
|
7
7
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { EditContext, IEditor, RectProps } from '@visactor/vtable-editors';
|
|
2
2
|
/** daisyUI v5 主题色引用(CSS 变量,主题自适应) */
|
|
3
3
|
export declare const DAISY_COLORS: {
|
|
4
4
|
readonly bg: "var(--color-base-100)";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { EditContext, IEditor } from '@visactor/vtable-editors';
|
|
2
|
+
import { KVSchemaEntry } from '../columns/column-utils.js';
|
|
3
3
|
/**
|
|
4
|
-
* KeyValue
|
|
4
|
+
* KeyValue(`Record<string, unknown>`)editor — Schema mode only
|
|
5
5
|
*
|
|
6
6
|
* - Key is always a dropdown derived from schema definition
|
|
7
7
|
* - Value input type adapts to the key's schema type
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { EditContext, IEditor, RectProps } from '@visactor/vtable-editors';
|
|
2
|
+
import { RelatedEntityItem } from '../../entity-form/interfaces.js';
|
|
3
3
|
/** 关联实体选项项 */
|
|
4
4
|
export { type RelatedEntityItem };
|
|
5
5
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { EditContext, IEditor, RectProps } from '@visactor/vtable-editors';
|
|
2
2
|
import { UUID_RE } from '../../entity-value.utils.js';
|
|
3
3
|
/** UUID 格式正则(re-export,定义见 entity-value.utils) */
|
|
4
4
|
export { UUID_RE };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ListTable } from '@visactor/vtable';
|
|
1
2
|
/**
|
|
2
3
|
* 通用实体表记录基础接口
|
|
3
4
|
*
|
|
@@ -64,4 +65,28 @@ export interface EntityTableConfig {
|
|
|
64
65
|
/** 单元格错误 tooltip 延迟(毫秒),默认 800 */
|
|
65
66
|
tooltipDelay?: number;
|
|
66
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* 实体表格的命令面:三端 `EntityTable` 组件对外暴露的同一组命令。
|
|
70
|
+
*
|
|
71
|
+
* @remarks
|
|
72
|
+
* React 经 `ref`(`forwardRef` + `useImperativeHandle`)、Vue 经 `defineExpose`、Angular 即组件实例
|
|
73
|
+
* 本身(`EntityTableComponent implements EntityTableHandle`)。三端各自另有的公开成员(Angular 的
|
|
74
|
+
* input / output、Vue 暴露给内部父组件的状态)不在契约内,按本类型写的调用方与 mock 三端通用。
|
|
75
|
+
*/
|
|
76
|
+
export interface EntityTableHandle {
|
|
77
|
+
/** 当前 VTable 表格实例;未初始化时为 `null`。 */
|
|
78
|
+
readonly tableInstance: ListTable | null;
|
|
79
|
+
/** 从业务层回滚单元格值(校验失败时恢复原值)。 */
|
|
80
|
+
changeCellValue(col: number, row: number, value: unknown): void;
|
|
81
|
+
/** 用当前暗色模式与 CSS 变量重绘主题。 */
|
|
82
|
+
redrawTheme(): void;
|
|
83
|
+
/** 把行恢复成最近一次交给表格的顺序(拖放被拒或落库失败时调用)。 */
|
|
84
|
+
restoreRecords(): void;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 查询表格的命令面:成员与 {@link EntityTableHandle} 相同,全部委托给内部实体表格。
|
|
88
|
+
*
|
|
89
|
+
* @remarks 三端 `QueryTable` 组件的暴露方式同 {@link EntityTableHandle}。
|
|
90
|
+
*/
|
|
91
|
+
export type QueryTableHandle = EntityTableHandle;
|
|
67
92
|
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/entity-table/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,qBAAqB;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa;IACb,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/B,qBAAqB;IACrB,cAAc,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CACxC;AAED,cAAc;AACd,MAAM,WAAW,eAAe;IAC9B,cAAc;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,cAAc;IACd,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,YAAY;AACZ,MAAM,WAAW,eAAe;IAC9B,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,YAAY;AACZ,MAAM,WAAW,cAAc;IAC7B,cAAc;IACd,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,YAAY;AACZ,MAAM,WAAW,eAAe;IAC9B,oBAAoB;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAqB;AACrB,MAAM,WAAW,YAAY;IAC3B,YAAY;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,WAAW;AACX,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/entity-table/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,qBAAqB;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa;IACb,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/B,qBAAqB;IACrB,cAAc,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CACxC;AAED,cAAc;AACd,MAAM,WAAW,eAAe;IAC9B,cAAc;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,cAAc;IACd,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,YAAY;AACZ,MAAM,WAAW,eAAe;IAC9B,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,YAAY;AACZ,MAAM,WAAW,cAAc;IAC7B,cAAc;IACd,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,YAAY;AACZ,MAAM,WAAW,eAAe;IAC9B,oBAAoB;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAqB;AACrB,MAAM,WAAW,YAAY;IAC3B,YAAY;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,WAAW;AACX,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,QAAQ,CAAC,aAAa,EAAE,SAAS,GAAG,IAAI,CAAC;IACzC,6BAA6B;IAC7B,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAChE,2BAA2B;IAC3B,WAAW,IAAI,IAAI,CAAC;IACpB,sCAAsC;IACtC,cAAc,IAAI,IAAI,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ListTableConstructorOptions } from '@visactor/vtable';
|
|
2
|
+
import { EntityTableRecord } from '../interfaces.js';
|
|
2
3
|
import * as VTable from '@visactor/vtable';
|
|
3
|
-
import type { EntityTableRecord } from '../interfaces.js';
|
|
4
4
|
/** 注册 VTable 基础编辑器(全局单例,重复调用仅注册一次) */
|
|
5
5
|
export declare function ensureBaseEditorRegistered(): void;
|
|
6
6
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { ListTableConstructorOptions } from '@visactor/vtable';
|
|
2
|
+
import { EntityTableRecord } from '../interfaces.js';
|
|
1
3
|
import type * as VTable from '@visactor/vtable';
|
|
2
|
-
import type { ListTableConstructorOptions } from '@visactor/vtable';
|
|
3
|
-
import type { EntityTableRecord } from '../interfaces.js';
|
|
4
4
|
/**
|
|
5
5
|
* HACK: VTable 不提供禁用特定行拖拽的 API,通过 monkey-patch 内部属性实现
|
|
6
6
|
*
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { EntityTableRecord } from '../interfaces.js';
|
|
1
2
|
/**
|
|
2
3
|
* @fileoverview 表格单行拖动的读取与动态开关(US-028 阶段 B)
|
|
3
4
|
*
|
|
@@ -6,7 +7,6 @@
|
|
|
6
7
|
* {@link setRowDragEnabled} 记下的开关在 `patchDragIconForReadonlyRows` 打的补丁里收掉手柄。
|
|
7
8
|
*/
|
|
8
9
|
import type * as VTable from '@visactor/vtable';
|
|
9
|
-
import type { EntityTableRecord } from '../interfaces.js';
|
|
10
10
|
/**
|
|
11
11
|
* 单行拖放的结果:被拖行与它落点前后的邻居
|
|
12
12
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { FieldFormat } from '@aiao/rxdb';
|
|
2
|
+
import { EntityFieldConfig, EntityFieldType } from './entity-field.utils.js';
|
|
3
3
|
/**
|
|
4
4
|
* RxDB Model 实体值处理工具模块
|
|
5
5
|
* 提供实体字段值的解析、格式化、验证等功能
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export * from './cn.js';
|
|
|
11
11
|
export * from './entity-detail/detail-tabs.js';
|
|
12
12
|
export * from './entity-detail/interfaces.js';
|
|
13
13
|
export * from './entity-list/manual-order-list.js';
|
|
14
|
+
export * from './entity-list/types.js';
|
|
14
15
|
export * from './entity-form/form-data.js';
|
|
15
16
|
export * from './entity-form/form-fields.js';
|
|
16
17
|
export * from './entity-form/form-validation.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,SAAS,CAAC;AAGxB,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAG9C,cAAc,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,SAAS,CAAC;AAGxB,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAG9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AAGvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAG5C,cAAc,kDAAkD,CAAC;AACjE,cAAc,wCAAwC,CAAC;AACvD,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iDAAiD,CAAC;AAChE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,uCAAuC,CAAC;AACtD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,sCAAsC,CAAC;AACrD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0CAA0C,CAAC;AACzD,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AAGvD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3486,20 +3486,20 @@ function En() {
|
|
|
3486
3486
|
return Tn ||= new Cn(), Tn;
|
|
3487
3487
|
}
|
|
3488
3488
|
//#endregion
|
|
3489
|
-
//#region ../../node_modules/.pnpm/uuid@14.0.
|
|
3489
|
+
//#region ../../node_modules/.pnpm/uuid@14.0.3/node_modules/uuid/dist/stringify.js
|
|
3490
3490
|
var Z = [];
|
|
3491
3491
|
for (let e = 0; e < 256; ++e) Z.push((e + 256).toString(16).slice(1));
|
|
3492
3492
|
function Dn(e, t = 0) {
|
|
3493
3493
|
return (Z[e[t + 0]] + Z[e[t + 1]] + Z[e[t + 2]] + Z[e[t + 3]] + "-" + Z[e[t + 4]] + Z[e[t + 5]] + "-" + Z[e[t + 6]] + Z[e[t + 7]] + "-" + Z[e[t + 8]] + Z[e[t + 9]] + "-" + Z[e[t + 10]] + Z[e[t + 11]] + Z[e[t + 12]] + Z[e[t + 13]] + Z[e[t + 14]] + Z[e[t + 15]]).toLowerCase();
|
|
3494
3494
|
}
|
|
3495
3495
|
//#endregion
|
|
3496
|
-
//#region ../../node_modules/.pnpm/uuid@14.0.
|
|
3496
|
+
//#region ../../node_modules/.pnpm/uuid@14.0.3/node_modules/uuid/dist/rng.js
|
|
3497
3497
|
var On = /* @__PURE__ */ new Uint8Array(16);
|
|
3498
3498
|
function kn() {
|
|
3499
3499
|
return crypto.getRandomValues(On);
|
|
3500
3500
|
}
|
|
3501
3501
|
//#endregion
|
|
3502
|
-
//#region ../../node_modules/.pnpm/uuid@14.0.
|
|
3502
|
+
//#region ../../node_modules/.pnpm/uuid@14.0.3/node_modules/uuid/dist/v7.js
|
|
3503
3503
|
var An = {};
|
|
3504
3504
|
function jn(e, t, n) {
|
|
3505
3505
|
let r;
|
|
@@ -4123,7 +4123,7 @@ var rr = {
|
|
|
4123
4123
|
json: "object"
|
|
4124
4124
|
};
|
|
4125
4125
|
function ir(e, t) {
|
|
4126
|
-
return t?.displayName ? t.displayName : e.replace(/([A-Z])/g, " $1").replace(/^./, (e) => e.toUpperCase()).trim();
|
|
4126
|
+
return t?.displayName ? t.displayName : e.replace(/(?<=[A-Z])(?=[A-Z][a-z])/g, " ").replace(/([a-z\d])([A-Z])/g, "$1 $2").replace(/^./, (e) => e.toUpperCase()).trim();
|
|
4127
4127
|
}
|
|
4128
4128
|
var ar = class e {
|
|
4129
4129
|
options;
|
|
@@ -4375,7 +4375,9 @@ function br(e, t = 2, n = 120) {
|
|
|
4375
4375
|
}
|
|
4376
4376
|
function xr(e, t, n = 2, r = 120) {
|
|
4377
4377
|
let i = br(t, n, r);
|
|
4378
|
-
e.style.position = "fixed", e.style.margin = "0", e.style.inset = "unset", e.style.minWidth = `${i.minWidth}px
|
|
4378
|
+
e.style.position = "fixed", e.style.margin = "0", e.style.inset = "unset", e.style.minWidth = `${i.minWidth}px`;
|
|
4379
|
+
let a = e.offsetWidth > 0 ? e.offsetWidth : i.minWidth, o = Math.max(8, Math.min(i.left, window.innerWidth - a - 8));
|
|
4380
|
+
e.style.left = `${o}px`, i.top == null ? (e.style.top = "unset", e.style.bottom = `${i.bottom}px`) : (e.style.top = `${i.top}px`, e.style.bottom = "unset");
|
|
4379
4381
|
}
|
|
4380
4382
|
function Sr(e, t, n) {
|
|
4381
4383
|
return e.find((e) => e.value === t)?.label ?? n;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { OperatorDefinition } from './operator.interface.js';
|
|
2
|
+
import { QueryBuilderRuleGroup, SchemaInfo } from './query-builder-state.js';
|
|
3
3
|
/**
|
|
4
4
|
* 查询构建器配置
|
|
5
5
|
*/
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
import type { OperatorName } from '@aiao/rxdb';
|
|
6
|
-
import { type OperatorDefinition } from '../models/operator.interface.js';
|
|
7
|
-
import type { FieldMetadata, PropertyType } from '../models/query-builder-state.js';
|
|
1
|
+
import { OperatorName } from '@aiao/rxdb';
|
|
2
|
+
import { OperatorDefinition } from '../models/operator.interface.js';
|
|
3
|
+
import { FieldMetadata, PropertyType } from '../models/query-builder-state.js';
|
|
8
4
|
/**
|
|
9
5
|
* 操作符注册表选项
|
|
10
6
|
*/
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
* @fileoverview QueryBuilder 核心服务
|
|
3
|
-
* 提供 RxJS 响应式状态管理,支持规则增删改和双向转换
|
|
4
|
-
*/
|
|
5
|
-
import type { RuleGroup } from '@aiao/rxdb';
|
|
1
|
+
import { RuleGroup } from '@aiao/rxdb';
|
|
6
2
|
import { Observable } from 'rxjs';
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
3
|
+
import { QueryBuilderConfig } from '../models/config.interface.js';
|
|
4
|
+
import { FieldMetadata, QueryBuilderRuleGroup, QueryBuilderState, UIRule } from '../models/query-builder-state.js';
|
|
5
|
+
import { ValidationResult } from '../models/validation.interface.js';
|
|
10
6
|
import { OperatorRegistry } from './operator-registry.service.js';
|
|
11
7
|
import { QueryConverter } from './query-converter.service.js';
|
|
12
8
|
import { ValidationService } from './validation.service.js';
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* 在 QueryBuilder 状态和 RxDB Query 之间进行双向转换
|
|
4
|
-
*/
|
|
5
|
-
import type { RuleGroup } from '@aiao/rxdb';
|
|
6
|
-
import type { QueryBuilderState } from '../models/query-builder-state.js';
|
|
1
|
+
import { RuleGroup } from '@aiao/rxdb';
|
|
2
|
+
import { QueryBuilderState } from '../models/query-builder-state.js';
|
|
7
3
|
/**
|
|
8
4
|
* 转换选项
|
|
9
5
|
*/
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* 从 EntityMetadata 解析字段元数据,用于 QueryBuilder 组件
|
|
4
|
-
*/
|
|
5
|
-
import type { EntityMetadata } from '@aiao/rxdb';
|
|
6
|
-
import type { FieldMetadata } from '../models/query-builder-state.js';
|
|
1
|
+
import { EntityMetadata } from '@aiao/rxdb';
|
|
2
|
+
import { FieldMetadata } from '../models/query-builder-state.js';
|
|
7
3
|
/**
|
|
8
4
|
* 解析器配置选项
|
|
9
5
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-parser.service.d.ts","sourceRoot":"","sources":["../../../src/query-builder/services/schema-parser.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAA0C,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAqBtE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAEhD;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IAEhD;;OAEG;IACH,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;CAC3F;
|
|
1
|
+
{"version":3,"file":"schema-parser.service.d.ts","sourceRoot":"","sources":["../../../src/query-builder/services/schema-parser.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAA0C,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAqBtE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAEhD;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;IAEhD;;OAEG;IACH,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;CAC3F;AA+BD;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAEtB;IAEF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsC;IAE1E,4CAA4C;gBAChC,OAAO,GAAE,mBAAwB;IAW7C;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,EAAE;IAwDhD;;;;;OAKG;IACH,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAUjF;;OAEG;IACH,OAAO,CAAC,aAAa;IA8CrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,aAAa;CAsCtB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,CAE9E"}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* 提供规则值的即时校验功能
|
|
4
|
-
*/
|
|
5
|
-
import type { FieldMetadata, QueryBuilderRule, UIRule } from '../models/query-builder-state.js';
|
|
6
|
-
import type { ValidationResult, ValidationRule } from '../models/validation.interface.js';
|
|
1
|
+
import { FieldMetadata, QueryBuilderRule, UIRule } from '../models/query-builder-state.js';
|
|
2
|
+
import { ValidationResult, ValidationRule } from '../models/validation.interface.js';
|
|
7
3
|
import { OperatorRegistry } from './operator-registry.service.js';
|
|
8
4
|
/**
|
|
9
5
|
* 单条校验规则输入(兼容 QueryBuilderRule 与 UIRule)
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* @fileoverview 字段树工具函数
|
|
3
|
-
*
|
|
4
|
-
* 提供 Angular/React/Vue 共享的字段树构建和查找功能。
|
|
5
|
-
* 用于将扁平的 FieldMetadata[] 转换为 CascadeSelect 组件所需的树形结构。
|
|
6
|
-
*/
|
|
7
|
-
import type { FieldMetadata, PropertyType } from '../models/query-builder-state.js';
|
|
1
|
+
import { FieldMetadata, PropertyType } from '../models/query-builder-state.js';
|
|
8
2
|
/**
|
|
9
3
|
* 字段树节点(用于 CascadeSelect)
|
|
10
4
|
*
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { PropertyType } from '
|
|
3
|
-
import type { FieldMetadata, PropertyType as QBPropertyType } from '../models/query-builder-state.js';
|
|
1
|
+
import { EntityMetadata, EntityRelationMetadata, KeyValuePropertyMetadata, PropertyType } from '@aiao/rxdb';
|
|
2
|
+
import { FieldMetadata, PropertyType as QBPropertyType } from '../models/query-builder-state.js';
|
|
4
3
|
/**
|
|
5
4
|
* 模型信息接口
|
|
6
5
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover-position.d.ts","sourceRoot":"","sources":["../../../src/query-builder/utils/popover-position.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,OAAO,EACpB,GAAG,SAAI,EACP,aAAa,SAAM,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAMnE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,SAAI,EAAE,aAAa,SAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"popover-position.d.ts","sourceRoot":"","sources":["../../../src/query-builder/utils/popover-position.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,OAAO,EACpB,GAAG,SAAI,EACP,aAAa,SAAM,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAMnE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,SAAI,EAAE,aAAa,SAAM,GAAG,IAAI,CAkB9G;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,aAAa,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EACxD,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
import type { EntityMetadata } from '@aiao/rxdb';
|
|
6
|
-
import type { FieldMetadata } from '../models/query-builder-state.js';
|
|
7
|
-
import { type SchemaParserOptions } from '../services/schema-parser.service.js';
|
|
1
|
+
import { EntityMetadata } from '@aiao/rxdb';
|
|
2
|
+
import { FieldMetadata } from '../models/query-builder-state.js';
|
|
3
|
+
import { SchemaParserOptions } from '../services/schema-parser.service.js';
|
|
8
4
|
/**
|
|
9
5
|
* 从 EntityMetadata 创建字段元数据
|
|
10
6
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UUID_RE } from '../../entity-value.utils.js';
|
|
2
|
-
import
|
|
2
|
+
import { OperatorRegistry } from '../services/operator-registry.service.js';
|
|
3
3
|
/** 标准 UUID 格式正则(8-4-4-4-12 十六进制,忽略大小写),重新导出供校验使用 */
|
|
4
4
|
export { UUID_RE };
|
|
5
5
|
/**
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiao/rxdb-model",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.28",
|
|
4
4
|
"description": "Framework-agnostic entity model core for Aiao RxDB: metadata-driven forms, details, editable tables and query builder.",
|
|
5
|
-
"homepage": "https://rxdb.
|
|
5
|
+
"homepage": "https://rxdb.aiao.io/docs",
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/aiao-io/rxdb/issues"
|
|
8
8
|
},
|
|
@@ -47,11 +47,11 @@
|
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"clsx": "^2.1.1",
|
|
49
49
|
"rxjs": "^7.8.2",
|
|
50
|
-
"uuid": "^14.0.
|
|
51
|
-
"@aiao/rxdb": "0.0.26"
|
|
50
|
+
"uuid": "^14.0.3"
|
|
52
51
|
},
|
|
53
52
|
"peerDependencies": {
|
|
54
53
|
"@visactor/vtable": "~1.26.5",
|
|
55
|
-
"@visactor/vtable-editors": "~1.26.5"
|
|
54
|
+
"@visactor/vtable-editors": "~1.26.5",
|
|
55
|
+
"@aiao/rxdb": "^0.0.28"
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 实体列表共享类型。
|
|
3
|
+
*
|
|
4
|
+
* @module entity-list/types
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* RxDB 实体实例(用于 CRUD 操作)。
|
|
8
|
+
*
|
|
9
|
+
* 三端组件库(Angular / React / Vue)此前各自内联了同形副本,现收敛到核心包
|
|
10
|
+
* 统一透传:Angular / Vue 经包根 `export *` 链、React 经 entity-list 模块显式再导出。
|
|
11
|
+
*/
|
|
12
|
+
export type EntityInstance = {
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
readonly id: string;
|
|
15
|
+
save(): Promise<void>;
|
|
16
|
+
remove(): Promise<void>;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* 筛选查询结构(与用户筛选条件做 AND 合并)。
|
|
21
|
+
*/
|
|
22
|
+
export type FilterQuery = { combinator: 'and' | 'or'; rules: unknown[] };
|
|
@@ -13,7 +13,7 @@ interface SchemaRow {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
* KeyValue
|
|
16
|
+
* KeyValue(`Record<string, unknown>`)editor — Schema mode only
|
|
17
17
|
*
|
|
18
18
|
* - Key is always a dropdown derived from schema definition
|
|
19
19
|
* - Value input type adapts to the key's schema type
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { ListTable } from '@visactor/vtable';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* 通用实体表记录基础接口
|
|
3
5
|
*
|
|
@@ -70,3 +72,29 @@ export interface EntityTableConfig {
|
|
|
70
72
|
/** 单元格错误 tooltip 延迟(毫秒),默认 800 */
|
|
71
73
|
tooltipDelay?: number;
|
|
72
74
|
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* 实体表格的命令面:三端 `EntityTable` 组件对外暴露的同一组命令。
|
|
78
|
+
*
|
|
79
|
+
* @remarks
|
|
80
|
+
* React 经 `ref`(`forwardRef` + `useImperativeHandle`)、Vue 经 `defineExpose`、Angular 即组件实例
|
|
81
|
+
* 本身(`EntityTableComponent implements EntityTableHandle`)。三端各自另有的公开成员(Angular 的
|
|
82
|
+
* input / output、Vue 暴露给内部父组件的状态)不在契约内,按本类型写的调用方与 mock 三端通用。
|
|
83
|
+
*/
|
|
84
|
+
export interface EntityTableHandle {
|
|
85
|
+
/** 当前 VTable 表格实例;未初始化时为 `null`。 */
|
|
86
|
+
readonly tableInstance: ListTable | null;
|
|
87
|
+
/** 从业务层回滚单元格值(校验失败时恢复原值)。 */
|
|
88
|
+
changeCellValue(col: number, row: number, value: unknown): void;
|
|
89
|
+
/** 用当前暗色模式与 CSS 变量重绘主题。 */
|
|
90
|
+
redrawTheme(): void;
|
|
91
|
+
/** 把行恢复成最近一次交给表格的顺序(拖放被拒或落库失败时调用)。 */
|
|
92
|
+
restoreRecords(): void;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* 查询表格的命令面:成员与 {@link EntityTableHandle} 相同,全部委托给内部实体表格。
|
|
97
|
+
*
|
|
98
|
+
* @remarks 三端 `QueryTable` 组件的暴露方式同 {@link EntityTableHandle}。
|
|
99
|
+
*/
|
|
100
|
+
export type QueryTableHandle = EntityTableHandle;
|
package/src/index.ts
CHANGED
|
@@ -83,9 +83,12 @@ function defaultDisplayNameGenerator(fieldName: string, metadata?: { displayName
|
|
|
83
83
|
if (metadata?.displayName) {
|
|
84
84
|
return metadata.displayName;
|
|
85
85
|
}
|
|
86
|
-
// camelCase
|
|
86
|
+
// 先切开缩写与普通单词,再切开普通 camelCase。
|
|
87
|
+
// 只用零宽断言定位「缩写末字母 + 大写单词首字母」的边界:没有任何带量词的
|
|
88
|
+
// 消费式片段,对任意输入都是线性时间(CodeQL 多项式正则告警)。
|
|
87
89
|
return fieldName
|
|
88
|
-
.replace(/([A-Z])/g, '
|
|
90
|
+
.replace(/(?<=[A-Z])(?=[A-Z][a-z])/g, ' ')
|
|
91
|
+
.replace(/([a-z\d])([A-Z])/g, '$1 $2')
|
|
89
92
|
.replace(/^./, str => str.toUpperCase())
|
|
90
93
|
.trim();
|
|
91
94
|
}
|
|
@@ -32,7 +32,11 @@ export function applyPopoverPosition(el: HTMLElement, triggerRect: DOMRect, gap
|
|
|
32
32
|
el.style.margin = '0';
|
|
33
33
|
el.style.inset = 'unset';
|
|
34
34
|
el.style.minWidth = `${pos.minWidth}px`;
|
|
35
|
-
|
|
35
|
+
// 水平夹回:右缘不超出视口(留 8px),左缘最多贴到视口左 8px。
|
|
36
|
+
// 窄屏(如移动端详情页靠右的字段选择)下浮层向右溢出会被截断。
|
|
37
|
+
const width = el.offsetWidth > 0 ? el.offsetWidth : pos.minWidth;
|
|
38
|
+
const clampedLeft = Math.max(8, Math.min(pos.left, window.innerWidth - width - 8));
|
|
39
|
+
el.style.left = `${clampedLeft}px`;
|
|
36
40
|
if (pos.top != null) {
|
|
37
41
|
el.style.top = `${pos.top}px`;
|
|
38
42
|
el.style.bottom = 'unset';
|