@aiao/rxdb-model 0.0.17
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/LICENSE +21 -0
- package/README.md +11 -0
- package/dist/entity-detail/detail-tabs.d.ts +4 -0
- package/dist/entity-detail/detail-tabs.d.ts.map +1 -0
- package/dist/entity-detail/index.d.ts +3 -0
- package/dist/entity-detail/index.d.ts.map +1 -0
- package/dist/entity-detail/interfaces.d.ts +23 -0
- package/dist/entity-detail/interfaces.d.ts.map +1 -0
- package/dist/entity-field.utils.d.ts +24 -0
- package/dist/entity-field.utils.d.ts.map +1 -0
- package/dist/entity-form/form-data.d.ts +5 -0
- package/dist/entity-form/form-data.d.ts.map +1 -0
- package/dist/entity-form/form-fields.d.ts +6 -0
- package/dist/entity-form/form-fields.d.ts.map +1 -0
- package/dist/entity-form/form-validation.d.ts +5 -0
- package/dist/entity-form/form-validation.d.ts.map +1 -0
- package/dist/entity-form/index.d.ts +5 -0
- package/dist/entity-form/index.d.ts.map +1 -0
- package/dist/entity-form/interfaces.d.ts +45 -0
- package/dist/entity-form/interfaces.d.ts.map +1 -0
- package/dist/entity-table/columns/build-editable-columns.d.ts +30 -0
- package/dist/entity-table/columns/build-editable-columns.d.ts.map +1 -0
- package/dist/entity-table/columns/column-utils.d.ts +123 -0
- package/dist/entity-table/columns/column-utils.d.ts.map +1 -0
- package/dist/entity-table/editors/date-editor.d.ts +19 -0
- package/dist/entity-table/editors/date-editor.d.ts.map +1 -0
- package/dist/entity-table/editors/enum-editor.d.ts +38 -0
- package/dist/entity-table/editors/enum-editor.d.ts.map +1 -0
- package/dist/entity-table/editors/global-overlay-editor.d.ts +74 -0
- package/dist/entity-table/editors/global-overlay-editor.d.ts.map +1 -0
- package/dist/entity-table/editors/icon-list-editor.d.ts +37 -0
- package/dist/entity-table/editors/icon-list-editor.d.ts.map +1 -0
- package/dist/entity-table/editors/json-editor.d.ts +19 -0
- package/dist/entity-table/editors/json-editor.d.ts.map +1 -0
- package/dist/entity-table/editors/key-value-editor.d.ts +21 -0
- package/dist/entity-table/editors/key-value-editor.d.ts.map +1 -0
- package/dist/entity-table/editors/lucide-svg.d.ts +11 -0
- package/dist/entity-table/editors/lucide-svg.d.ts.map +1 -0
- package/dist/entity-table/editors/multiselect-editor.d.ts +26 -0
- package/dist/entity-table/editors/multiselect-editor.d.ts.map +1 -0
- package/dist/entity-table/editors/number-editor.d.ts +12 -0
- package/dist/entity-table/editors/number-editor.d.ts.map +1 -0
- package/dist/entity-table/editors/relation-editor.d.ts +23 -0
- package/dist/entity-table/editors/relation-editor.d.ts.map +1 -0
- package/dist/entity-table/editors/safe-list-editor.d.ts +10 -0
- package/dist/entity-table/editors/safe-list-editor.d.ts.map +1 -0
- package/dist/entity-table/editors/tags-editor.d.ts +24 -0
- package/dist/entity-table/editors/tags-editor.d.ts.map +1 -0
- package/dist/entity-table/editors/uuid-editor.d.ts +13 -0
- package/dist/entity-table/editors/uuid-editor.d.ts.map +1 -0
- package/dist/entity-table/index.d.ts +22 -0
- package/dist/entity-table/index.d.ts.map +1 -0
- package/dist/entity-table/interfaces.d.ts +54 -0
- package/dist/entity-table/interfaces.d.ts.map +1 -0
- package/dist/entity-table/vtable/table-clipboard.d.ts +55 -0
- package/dist/entity-table/vtable/table-clipboard.d.ts.map +1 -0
- package/dist/entity-table/vtable/table-factory.d.ts +18 -0
- package/dist/entity-table/vtable/table-factory.d.ts.map +1 -0
- package/dist/entity-table/vtable/table-keyboard.d.ts +20 -0
- package/dist/entity-table/vtable/table-keyboard.d.ts.map +1 -0
- package/dist/entity-table/vtable/table-operations.d.ts +20 -0
- package/dist/entity-table/vtable/table-operations.d.ts.map +1 -0
- package/dist/entity-table/vtable/table-theme.d.ts +17 -0
- package/dist/entity-table/vtable/table-theme.d.ts.map +1 -0
- package/dist/entity-table/vtable/table-tooltip.d.ts +21 -0
- package/dist/entity-table/vtable/table-tooltip.d.ts.map +1 -0
- package/dist/entity-table/vtable/vtable-compat.d.ts +24 -0
- package/dist/entity-table/vtable/vtable-compat.d.ts.map +1 -0
- package/dist/entity-value.utils.d.ts +10 -0
- package/dist/entity-value.utils.d.ts.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64510 -0
- package/dist/query-builder/models/config.interface.d.ts +28 -0
- package/dist/query-builder/models/config.interface.d.ts.map +1 -0
- package/dist/query-builder/models/index.d.ts +8 -0
- package/dist/query-builder/models/index.d.ts.map +1 -0
- package/dist/query-builder/models/operator.interface.d.ts +42 -0
- package/dist/query-builder/models/operator.interface.d.ts.map +1 -0
- package/dist/query-builder/models/query-builder-state.d.ts +159 -0
- package/dist/query-builder/models/query-builder-state.d.ts.map +1 -0
- package/dist/query-builder/models/validation.interface.d.ts +88 -0
- package/dist/query-builder/models/validation.interface.d.ts.map +1 -0
- package/dist/query-builder/services/index.d.ts +9 -0
- package/dist/query-builder/services/index.d.ts.map +1 -0
- package/dist/query-builder/services/operator-registry.service.d.ts +132 -0
- package/dist/query-builder/services/operator-registry.service.d.ts.map +1 -0
- package/dist/query-builder/services/query-builder.service.d.ts +162 -0
- package/dist/query-builder/services/query-builder.service.d.ts.map +1 -0
- package/dist/query-builder/services/query-converter.service.d.ts +72 -0
- package/dist/query-builder/services/query-converter.service.d.ts.map +1 -0
- package/dist/query-builder/services/schema-parser.service.d.ts +84 -0
- package/dist/query-builder/services/schema-parser.service.d.ts.map +1 -0
- package/dist/query-builder/services/validation.service.d.ts +67 -0
- package/dist/query-builder/services/validation.service.d.ts.map +1 -0
- package/dist/query-builder/utils/date.d.ts +3 -0
- package/dist/query-builder/utils/date.d.ts.map +1 -0
- package/dist/query-builder/utils/field-tree.d.ts +135 -0
- package/dist/query-builder/utils/field-tree.d.ts.map +1 -0
- package/dist/query-builder/utils/id.d.ts +9 -0
- package/dist/query-builder/utils/id.d.ts.map +1 -0
- package/dist/query-builder/utils/index.d.ts +12 -0
- package/dist/query-builder/utils/index.d.ts.map +1 -0
- package/dist/query-builder/utils/metadata-field-extractor.d.ts +149 -0
- package/dist/query-builder/utils/metadata-field-extractor.d.ts.map +1 -0
- package/dist/query-builder/utils/popover-position.d.ts +25 -0
- package/dist/query-builder/utils/popover-position.d.ts.map +1 -0
- package/dist/query-builder/utils/schema-factory.d.ts +60 -0
- package/dist/query-builder/utils/schema-factory.d.ts.map +1 -0
- package/dist/query-builder/utils/structural-equal.d.ts +2 -0
- package/dist/query-builder/utils/structural-equal.d.ts.map +1 -0
- package/dist/query-builder/utils/value-input.d.ts +11 -0
- package/dist/query-builder/utils/value-input.d.ts.map +1 -0
- package/dist/structural-equal.d.ts +7 -0
- package/dist/structural-equal.d.ts.map +1 -0
- package/package.json +33 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Aiao Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detail-tabs.d.ts","sourceRoot":"","sources":["../../src/entity-detail/detail-tabs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,KAAK,EAAiB,SAAS,EAAkB,MAAM,iBAAiB,CAAC;AAEhF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,EAAE,CAgCrE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity-detail/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { RelationKind } from '../../packages/rxdb/src/index.ts';
|
|
2
|
+
export type DetailTabType = 'form' | 'table';
|
|
3
|
+
export interface DetailTabBase {
|
|
4
|
+
key: string;
|
|
5
|
+
label: string;
|
|
6
|
+
type: DetailTabType;
|
|
7
|
+
}
|
|
8
|
+
export interface DetailFormTab extends DetailTabBase {
|
|
9
|
+
type: 'form';
|
|
10
|
+
}
|
|
11
|
+
export interface DetailTableTab extends DetailTabBase {
|
|
12
|
+
type: 'table';
|
|
13
|
+
relationName: string;
|
|
14
|
+
relatedEntityName: string;
|
|
15
|
+
relatedNamespace: string;
|
|
16
|
+
relationKind: RelationKind;
|
|
17
|
+
/** ONE_TO_MANY: 关联实体中指向当前实体的外键字段,如 'ownerId' */
|
|
18
|
+
foreignKeyField?: string;
|
|
19
|
+
/** MANY_TO_MANY: 关联实体中指向当前实体的关系属性名,如 'orderItems' */
|
|
20
|
+
mappedProperty?: string;
|
|
21
|
+
}
|
|
22
|
+
export type DetailTab = DetailFormTab | DetailTableTab;
|
|
23
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/entity-detail/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,cAAc,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EntityMetadata, PropertyType } from '../packages/rxdb/src/index.ts';
|
|
2
|
+
export type EntityFieldType = PropertyType | `${PropertyType.boolean}` | `${PropertyType.date}` | `${PropertyType.enum}` | `${PropertyType.integer}` | `${PropertyType.number}` | `${PropertyType.string}` | `${PropertyType.uuid}` | `${PropertyType.numberArray}` | `${PropertyType.stringArray}` | `${PropertyType.keyValue}` | `${PropertyType.json}` | 'oneToOne' | 'manyToOne' | 'computed';
|
|
3
|
+
export interface KeyValueSchemaEntry {
|
|
4
|
+
label?: string;
|
|
5
|
+
type?: 'string' | 'number' | 'integer' | 'boolean' | 'date';
|
|
6
|
+
required?: boolean;
|
|
7
|
+
nullable?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface EntityFieldConfig {
|
|
10
|
+
field: string;
|
|
11
|
+
displayName: string;
|
|
12
|
+
type: EntityFieldType;
|
|
13
|
+
readonly?: boolean;
|
|
14
|
+
nullable?: boolean;
|
|
15
|
+
required?: boolean;
|
|
16
|
+
unique?: boolean;
|
|
17
|
+
enumValues?: readonly string[];
|
|
18
|
+
keyValueSchema?: Record<string, KeyValueSchemaEntry>;
|
|
19
|
+
relatedEntityName?: string;
|
|
20
|
+
relatedNamespace?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function extractEntityFields(metadata: EntityMetadata): EntityFieldConfig[];
|
|
23
|
+
export declare function extractSystemFields(metadata: EntityMetadata): EntityFieldConfig[];
|
|
24
|
+
//# sourceMappingURL=entity-field.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-field.utils.d.ts","sourceRoot":"","sources":["../src/entity-field.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACL,YAAY,EAKb,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,GAAG,YAAY,CAAC,OAAO,EAAE,GACzB,GAAG,YAAY,CAAC,IAAI,EAAE,GACtB,GAAG,YAAY,CAAC,IAAI,EAAE,GACtB,GAAG,YAAY,CAAC,OAAO,EAAE,GACzB,GAAG,YAAY,CAAC,MAAM,EAAE,GACxB,GAAG,YAAY,CAAC,MAAM,EAAE,GACxB,GAAG,YAAY,CAAC,IAAI,EAAE,GACtB,GAAG,YAAY,CAAC,WAAW,EAAE,GAC7B,GAAG,YAAY,CAAC,WAAW,EAAE,GAC7B,GAAG,YAAY,CAAC,QAAQ,EAAE,GAC1B,GAAG,YAAY,CAAC,IAAI,EAAE,GACtB,UAAU,GACV,WAAW,GACX,UAAU,CAAC;AAEf,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AA6CD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,iBAAiB,EAAE,CAsBjF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,iBAAiB,EAAE,CAiBjF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { EntityFormData, FormFieldConfig } from './interfaces.js';
|
|
2
|
+
export declare function entityToFormData(entity: Record<string, unknown>, fields: FormFieldConfig[]): EntityFormData;
|
|
3
|
+
export declare function formDataToEntityChanges(original: Record<string, unknown>, formData: EntityFormData, fields: FormFieldConfig[]): Record<string, unknown>;
|
|
4
|
+
export declare function createDefaultFormData(fields: FormFieldConfig[]): EntityFormData;
|
|
5
|
+
//# sourceMappingURL=form-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-data.d.ts","sourceRoot":"","sources":["../../src/entity-form/form-data.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,cAAc,CAM3G;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,eAAe,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWzB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,cAAc,CAqB/E"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { EntityMetadata } from '../../packages/rxdb/src/index.ts';
|
|
2
|
+
import { FormFieldConfig, FormMode } from './interfaces.js';
|
|
3
|
+
export declare function buildFormFields(metadata: EntityMetadata, mode: FormMode): FormFieldConfig[];
|
|
4
|
+
export declare function sortFormFields(fields: FormFieldConfig[]): FormFieldConfig[];
|
|
5
|
+
export declare function filterVisibleFields(fields: FormFieldConfig[]): FormFieldConfig[];
|
|
6
|
+
//# sourceMappingURL=form-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-fields.d.ts","sourceRoot":"","sources":["../../src/entity-form/form-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEjE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG,eAAe,EAAE,CAY3F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAE3E;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAEhF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { FieldValidationError } from '../entity-value.utils.js';
|
|
2
|
+
import { EntityFormData, FormFieldConfig, FormValidationResult } from './interfaces.js';
|
|
3
|
+
export declare function validateField(field: FormFieldConfig, value: unknown): FieldValidationError | null;
|
|
4
|
+
export declare function validateForm(fields: FormFieldConfig[], data: EntityFormData): FormValidationResult;
|
|
5
|
+
//# sourceMappingURL=form-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-validation.d.ts","sourceRoot":"","sources":["../../src/entity-form/form-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE7F,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAEjG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG,oBAAoB,CAQlG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity-form/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { EntityFieldType, KeyValueSchemaEntry } from '../entity-field.utils.js';
|
|
2
|
+
export type FormMode = 'view' | 'edit' | 'create';
|
|
3
|
+
export interface FormFieldConfig {
|
|
4
|
+
field: string;
|
|
5
|
+
displayName: string;
|
|
6
|
+
type: EntityFieldType;
|
|
7
|
+
readonly?: boolean;
|
|
8
|
+
nullable?: boolean;
|
|
9
|
+
required?: boolean;
|
|
10
|
+
unique?: boolean;
|
|
11
|
+
enumValues?: readonly string[];
|
|
12
|
+
keyValueSchema?: Record<string, KeyValueSchemaEntry>;
|
|
13
|
+
relatedEntityName?: string;
|
|
14
|
+
relatedNamespace?: string;
|
|
15
|
+
hidden?: boolean;
|
|
16
|
+
order?: number;
|
|
17
|
+
placeholder?: string;
|
|
18
|
+
helpText?: string;
|
|
19
|
+
span?: 1 | 2;
|
|
20
|
+
}
|
|
21
|
+
export interface FormFieldChangeEvent {
|
|
22
|
+
field: string;
|
|
23
|
+
type: EntityFieldType;
|
|
24
|
+
value: unknown;
|
|
25
|
+
previousValue: unknown;
|
|
26
|
+
}
|
|
27
|
+
export interface EntityFormData {
|
|
28
|
+
[field: string]: unknown;
|
|
29
|
+
}
|
|
30
|
+
export interface FormValidationResult {
|
|
31
|
+
valid: boolean;
|
|
32
|
+
errors: FormFieldValidationError[];
|
|
33
|
+
}
|
|
34
|
+
export interface FormFieldValidationError {
|
|
35
|
+
field: string;
|
|
36
|
+
message: string;
|
|
37
|
+
}
|
|
38
|
+
export interface RelatedEntityProvider {
|
|
39
|
+
(entityName: string, namespace?: string): RelatedEntityItem[];
|
|
40
|
+
}
|
|
41
|
+
export interface RelatedEntityItem {
|
|
42
|
+
id: string;
|
|
43
|
+
displayName: string;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/entity-form/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAErF,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,wBAAwB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;CAC/D;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { EntityMetadata } from '../../../packages/rxdb/src/index.ts';
|
|
2
|
+
import { ColumnDefine } from '@visactor/vtable/es/ts-types/index.js';
|
|
3
|
+
import { RelatedEntityItem } from '../../entity-form/interfaces.js';
|
|
4
|
+
/** 仅展示(不可编辑)的系统字段 */
|
|
5
|
+
export declare const DISPLAY_ONLY_FIELDS: Set<string>;
|
|
6
|
+
/** 跳过(不显示为独立列)的系统字段 */
|
|
7
|
+
export declare const SKIP_FIELDS: Set<string>;
|
|
8
|
+
/** 关联实体候选 provider 工厂:根据外键字段和关联实体名返回 provider 函数 */
|
|
9
|
+
export type RelatedItemsProviderFactory = (fkField: string, relatedEntityName: string) => (() => RelatedEntityItem[]) | undefined;
|
|
10
|
+
export interface BuildEditableColumnsOptions {
|
|
11
|
+
relatedItemsProviderFactory?: RelatedItemsProviderFactory;
|
|
12
|
+
actionsTitle?: string;
|
|
13
|
+
deleteLabel?: string;
|
|
14
|
+
viewLabel?: string;
|
|
15
|
+
createdAtTitle?: string;
|
|
16
|
+
updatedAtTitle?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 根据 EntityMetadata 构建可编辑的 VTable 列定义
|
|
20
|
+
*
|
|
21
|
+
* 按照以下顺序排列列:
|
|
22
|
+
* 1. ID 列
|
|
23
|
+
* 2. 普通属性列(跳过 SKIP_FIELDS 和 DISPLAY_ONLY_FIELDS)
|
|
24
|
+
* 3. 计算属性列
|
|
25
|
+
* 4. 外键关系列
|
|
26
|
+
* 5. createdAt / updatedAt 系统时间列
|
|
27
|
+
* 6. 操作列(查看 + 删除)
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildEditableColumns(metadata: EntityMetadata, options?: BuildEditableColumnsOptions): ColumnDefine[];
|
|
30
|
+
//# sourceMappingURL=build-editable-columns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-editable-columns.d.ts","sourceRoot":"","sources":["../../../src/entity-table/columns/build-editable-columns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkD,MAAM,YAAY,CAAC;AAEjG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGzE,qBAAqB;AACrB,eAAO,MAAM,mBAAmB,aAAsC,CAAC;AAEvE,uBAAuB;AACvB,eAAO,MAAM,WAAW,aAA4C,CAAC;AAErE,oDAAoD;AACpD,MAAM,MAAM,2BAA2B,GAAG,CACxC,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,KACtB,CAAC,MAAM,iBAAiB,EAAE,CAAC,GAAG,SAAS,CAAC;AAE7C,MAAM,WAAW,2BAA2B;IAC1C,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,2BAAgC,GACxC,YAAY,EAAE,CA+EhB"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { ColumnDefine, StylePropertyFunctionArg } from '@visactor/vtable/es/ts-types/index.js';
|
|
2
|
+
import { RelatedEntityItem } from '../../entity-form/interfaces.js';
|
|
3
|
+
import { EnumItem } from '../editors/enum-editor.js';
|
|
4
|
+
/** 删除图标默认颜色 */
|
|
5
|
+
export declare const DELETE_COLOR = "var(--entity-table-delete, #ef4444)";
|
|
6
|
+
/**
|
|
7
|
+
* 实体属性类型字符串字面量
|
|
8
|
+
* 与 `@aiao/rxdb` 的 `PropertyType` 枚举值一一对应,另扩展关系类型与计算属性
|
|
9
|
+
*/
|
|
10
|
+
export type PropertyTypeString = 'uuid' | 'string' | 'enum' | 'number' | 'integer' | 'boolean' | 'date' | 'stringArray' | 'numberArray' | 'keyValue' | 'json'
|
|
11
|
+
/** 一对一关系:存外键 ID,显示关联实体 displayName,可搜索下拉编辑 */
|
|
12
|
+
| 'oneToOne'
|
|
13
|
+
/** 多对一关系:存外键 ID,显示关联实体 displayName,可搜索下拉编辑 */
|
|
14
|
+
| 'manyToOne'
|
|
15
|
+
/** 计算属性:只读显示,无编辑器 */
|
|
16
|
+
| 'computed';
|
|
17
|
+
/**
|
|
18
|
+
* 构建属性列所需的配置
|
|
19
|
+
*/
|
|
20
|
+
export interface PropertyColumnConfig {
|
|
21
|
+
/** 字段名(record 中的键) */
|
|
22
|
+
field: string;
|
|
23
|
+
/** 列标题(默认用 field) */
|
|
24
|
+
title?: string;
|
|
25
|
+
/** 属性类型 */
|
|
26
|
+
type: PropertyTypeString | string;
|
|
27
|
+
/** 属性级只读(整列不可编辑) */
|
|
28
|
+
readonly?: boolean;
|
|
29
|
+
/** 枚举值列表(type=enum 时使用,不含图标/i18n 时的简短形式) */
|
|
30
|
+
enumValues?: readonly string[];
|
|
31
|
+
/** 枚举项完整定义(type=enum 时使用,支持 text 国际化、icon 图标;优先级高于 enumValues) */
|
|
32
|
+
enumItems?: readonly EnumItem[];
|
|
33
|
+
/** 是否允许 null(type=enum 时使用) */
|
|
34
|
+
nullable?: boolean;
|
|
35
|
+
/** 列宽(默认 'auto',uuid 类型默认 320) */
|
|
36
|
+
width?: number | 'auto';
|
|
37
|
+
/** 是否启用排序 */
|
|
38
|
+
sort?: boolean;
|
|
39
|
+
/** keyValue 属性 Schema—定义允许的键以及对应的值类型 */
|
|
40
|
+
keyValueSchema?: Record<string, KVSchemaEntry>;
|
|
41
|
+
/**
|
|
42
|
+
* 关联实体候选列表(oneToOne / manyToOne 类型使用)
|
|
43
|
+
*
|
|
44
|
+
* 每项包含 `id`(外键值)和 `displayName`(单元格显示文本)。
|
|
45
|
+
* 列更新时重新传入新列表即可刷新编辑器选项。
|
|
46
|
+
*/
|
|
47
|
+
relatedItems?: RelatedEntityItem[];
|
|
48
|
+
/**
|
|
49
|
+
* 关联实体候选动态 provider(优先级高于 relatedItems)
|
|
50
|
+
*
|
|
51
|
+
* 每次单元格渲染或编辑器打开时调用,可返回最新的候选列表。
|
|
52
|
+
* 适合业务层需要运行时动态查询关联实体的场景。
|
|
53
|
+
*/
|
|
54
|
+
relatedItemsProvider?: () => RelatedEntityItem[];
|
|
55
|
+
}
|
|
56
|
+
/** keyValue 模式中单个键的属性描述 */
|
|
57
|
+
export interface KVSchemaEntry {
|
|
58
|
+
/** 显示标签(默认用键名) */
|
|
59
|
+
label?: string;
|
|
60
|
+
/** 值类型(用于输入验证) */
|
|
61
|
+
type?: 'string' | 'number' | 'integer' | 'boolean' | 'date';
|
|
62
|
+
/** 是否必填 */
|
|
63
|
+
required?: boolean;
|
|
64
|
+
/** 是否可以为 null */
|
|
65
|
+
nullable?: boolean;
|
|
66
|
+
}
|
|
67
|
+
/** 格式化日期值为本地字符串 */
|
|
68
|
+
export declare function formatDateValue(v: unknown): string;
|
|
69
|
+
/**
|
|
70
|
+
* 构建编辑器函数:非只读行使用指定编辑器名称,只读行返回 undefined
|
|
71
|
+
*
|
|
72
|
+
* 用于 ColumnDefine.editor,以便在行级别区分只读/可编辑状态。
|
|
73
|
+
*/
|
|
74
|
+
export declare function makeEditorForReadonly(editorName: string): ColumnDefine['editor'];
|
|
75
|
+
/** 各属性类型的默认列宽及最小/最大宽度 */
|
|
76
|
+
export declare const DEFAULT_COLUMN_SIZES: Record<string, {
|
|
77
|
+
width: number;
|
|
78
|
+
minWidth?: number;
|
|
79
|
+
maxWidth?: number;
|
|
80
|
+
}>;
|
|
81
|
+
/**
|
|
82
|
+
* 根据属性类型配置构建 VTable ColumnDefine
|
|
83
|
+
*
|
|
84
|
+
* 处理全部 11 种 PropertyType:
|
|
85
|
+
* - uuid / string / number / integer → 文本显示 + input-editor(非只读时)
|
|
86
|
+
* - enum → 文本显示 + list-editor 下拉框(非只读时)
|
|
87
|
+
* - boolean → switch cellType
|
|
88
|
+
* - date → 本地时间格式化 + date-editor 日期时间选择器(非只读时)
|
|
89
|
+
* - stringArray → 逗号分隔显示 + tags-editor 标签输入(非只读时)
|
|
90
|
+
* - numberArray → 逗号分隔显示 + number-tags-editor 数字标签输入(非只读时)
|
|
91
|
+
* - keyValue → JSON 字符串显示 + key-value-editor 键值对编辑器(非只读时)
|
|
92
|
+
* - json → JSON 字符串显示 + json-editor 文本区域(非只读时)
|
|
93
|
+
*/
|
|
94
|
+
export declare function buildPropertyColumn(config: PropertyColumnConfig): ColumnDefine;
|
|
95
|
+
/**
|
|
96
|
+
* 将 input-editor 输入的字符串值解析回属性原始类型
|
|
97
|
+
*
|
|
98
|
+
* 在 cellChanged 事件处理器中调用此函数,将用户输入转成正确的 JS 类型后再保存。
|
|
99
|
+
*/
|
|
100
|
+
export declare function parsePropertyColumnValue(type: PropertyTypeString | string, raw: unknown): unknown;
|
|
101
|
+
type ColumnRecord = Record<string, unknown> & {
|
|
102
|
+
_readonly?: boolean;
|
|
103
|
+
_isAddRow?: boolean;
|
|
104
|
+
};
|
|
105
|
+
/** 通过 VTable 回调参数安全获取当前行记录 */
|
|
106
|
+
export declare const getCellRecord: (args: StylePropertyFunctionArg) => ColumnRecord | undefined;
|
|
107
|
+
export type SwitchDisableCallback = (args: StylePropertyFunctionArg) => boolean;
|
|
108
|
+
/** 检查记录是否为只读行 */
|
|
109
|
+
export declare const isReadonly: (record: unknown) => boolean;
|
|
110
|
+
/** 检查记录是否为只读行或新增模板行 */
|
|
111
|
+
export declare const isReadonlyOrAddRow: (record: unknown) => boolean;
|
|
112
|
+
/** 生成查看按钮的图标选项(仅 SVG,避免 text 撑满剩余宽度) */
|
|
113
|
+
export declare function makeViewIcons(): unknown[];
|
|
114
|
+
/** 生成删除按钮的图标选项 */
|
|
115
|
+
export declare function makeDeleteIcons(label: string): unknown[];
|
|
116
|
+
/** 不可编辑的行:禁用 editor */
|
|
117
|
+
export declare const disabledEditorForReadonly: ColumnDefine["editor"];
|
|
118
|
+
/** 禁用 switch:只读行不可操作 */
|
|
119
|
+
export declare const switchDisabledForReadonly: SwitchDisableCallback;
|
|
120
|
+
/** 操作列:可选包含查看(view)和删除按钮,只读行不显示操作 */
|
|
121
|
+
export declare function actionsColumn(title: string, deleteLabel: string, viewLabel?: string): ColumnDefine;
|
|
122
|
+
export {};
|
|
123
|
+
//# sourceMappingURL=column-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-utils.d.ts","sourceRoot":"","sources":["../../../src/entity-table/columns/column-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { EditContext, IEditor } from '@visactor/vtable-editors';
|
|
2
|
+
/**
|
|
3
|
+
* 日期时间选择编辑器
|
|
4
|
+
*
|
|
5
|
+
* 直接覆盖单元格显示原生 datetime-local 输入框。
|
|
6
|
+
* - Enter / Tab:确认
|
|
7
|
+
* - Escape:取消(恢复原始值)
|
|
8
|
+
* - 点击外部:确认并关闭
|
|
9
|
+
* - 「清除」按钮:将值设为 null
|
|
10
|
+
*/
|
|
11
|
+
export declare class DateEditor implements IEditor<unknown> {
|
|
12
|
+
#private;
|
|
13
|
+
readonly editorType = "date-editor";
|
|
14
|
+
onStart(ctx: EditContext<unknown>): void;
|
|
15
|
+
getValue(): Date | null;
|
|
16
|
+
onEnd(): void;
|
|
17
|
+
isEditorElement(el: HTMLElement | EventTarget): boolean;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=date-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-editor.d.ts","sourceRoot":"","sources":["../../../src/entity-table/editors/date-editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKrE;;;;;;;;GAQG;AACH,qBAAa,UAAW,YAAW,OAAO,CAAC,OAAO,CAAC;;IAOjD,QAAQ,CAAC,UAAU,iBAAiB;IAEpC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IAuGxC,QAAQ,IAAI,IAAI,GAAG,IAAI;IAIvB,KAAK,IAAI,IAAI;IAIb,eAAe,CAAC,EAAE,EAAE,WAAW,GAAG,WAAW,GAAG,OAAO;CA6BxD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { GlobalOverlayEditor } from './global-overlay-editor.js';
|
|
2
|
+
import { IconData } from './lucide-svg.js';
|
|
3
|
+
/** 枚举选项配置 */
|
|
4
|
+
export interface EnumItem {
|
|
5
|
+
/** 存储值 */
|
|
6
|
+
value: string;
|
|
7
|
+
/** 显示文本(默认等于 value) */
|
|
8
|
+
text?: string;
|
|
9
|
+
/** Lucide 图标数据(可选,配合 color 使用) */
|
|
10
|
+
icon?: IconData;
|
|
11
|
+
/** 图标描边颜色(可选,配合 icon 使用) */
|
|
12
|
+
color?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 枚举下拉选择编辑器
|
|
16
|
+
*
|
|
17
|
+
* 从列定义的 `menuList` 动态读取可选项,支持键盘导航。
|
|
18
|
+
* - ↑ ↓:移动选中项
|
|
19
|
+
* - Enter / 点击:确认选中并关闭
|
|
20
|
+
* - Delete / Backspace:清空值并关闭
|
|
21
|
+
* - Escape:取消,恢复原始值
|
|
22
|
+
*
|
|
23
|
+
* 未来可扩展 icon、i18n 等字段通过 menuList 传入。
|
|
24
|
+
*/
|
|
25
|
+
export declare class EnumEditor extends GlobalOverlayEditor {
|
|
26
|
+
#private;
|
|
27
|
+
protected get initialFocusIndex(): number;
|
|
28
|
+
protected get itemCount(): number;
|
|
29
|
+
readonly editorType = "enum-editor";
|
|
30
|
+
constructor(presetItems?: EnumItem[]);
|
|
31
|
+
onStart(ctx: Parameters<GlobalOverlayEditor['onStart']>[0]): void;
|
|
32
|
+
getValue(): string;
|
|
33
|
+
protected onDeleteKey(): void;
|
|
34
|
+
protected buildRows(panel: HTMLDivElement): void;
|
|
35
|
+
protected onRowClick(idx: number): void;
|
|
36
|
+
protected onFocusChange(idx: number, prev: number): void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=enum-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum-editor.d.ts","sourceRoot":"","sources":["../../../src/entity-table/editors/enum-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEjE,aAAa;AACb,MAAM,WAAW,QAAQ;IACvB,UAAU;IACV,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,SAAQ,mBAAmB;;IAKjD,SAAS,KAAK,iBAAiB,IAAI,MAAM,CAExC;IAED,SAAS,KAAK,SAAS,IAAI,MAAM,CAEhC;IAED,QAAQ,CAAC,UAAU,iBAAiB;gBAExB,WAAW,CAAC,EAAE,QAAQ,EAAE;IAK3B,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IA4BjE,QAAQ,IAAI,MAAM;cAIR,WAAW,IAAI,IAAI;IAQtC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IA8ChD,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOvC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CASzD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { EditContext, IEditor, RectProps } from '@visactor/vtable-editors';
|
|
2
|
+
/** daisyUI v5 主题色引用(CSS 变量,主题自适应) */
|
|
3
|
+
export declare const DAISY_COLORS: {
|
|
4
|
+
readonly bg: "var(--color-base-100)";
|
|
5
|
+
readonly hover: "var(--color-base-200)";
|
|
6
|
+
readonly border: "var(--color-base-300)";
|
|
7
|
+
readonly text: "var(--color-base-content)";
|
|
8
|
+
readonly primary: "var(--color-primary)";
|
|
9
|
+
readonly primaryContent: "var(--color-primary-content)";
|
|
10
|
+
readonly error: "var(--color-error)";
|
|
11
|
+
readonly errorContent: "var(--color-error-content)";
|
|
12
|
+
readonly selectedBg: "color-mix(in srgb, var(--color-primary) 15%, transparent)";
|
|
13
|
+
readonly focusBg: "color-mix(in srgb, var(--color-primary) 30%, var(--color-base-100))";
|
|
14
|
+
};
|
|
15
|
+
/** 延迟执行编辑器初始化(注册外部点击监听 + 聚焦),避免 VTable 事件干扰 */
|
|
16
|
+
export declare function scheduleEditorSetup(fn: () => void): void;
|
|
17
|
+
/** 编辑结束后将焦点还给 VTable root element(tabindex=0 的 .vtable div = ctx.container = table.getElement()),使方向键导航继续工作 */
|
|
18
|
+
export declare function refocusTable(container: HTMLElement | null | undefined): void;
|
|
19
|
+
/** 将浮层面板定位到单元格下方(空间不足时翻转到上方) */
|
|
20
|
+
export declare function positionOverlayPanel(panel: HTMLElement, rect: {
|
|
21
|
+
left: number;
|
|
22
|
+
top: number;
|
|
23
|
+
width?: number;
|
|
24
|
+
height?: number;
|
|
25
|
+
}, container: HTMLElement | null | undefined, estimatedHeight: number, options?: {
|
|
26
|
+
maxRight?: number;
|
|
27
|
+
minWidth?: number;
|
|
28
|
+
}): void;
|
|
29
|
+
/**
|
|
30
|
+
* 全局浮层列表编辑器抽象基类
|
|
31
|
+
*
|
|
32
|
+
* 提供通用基础设施,子类只需关注内容渲染与选择逻辑:
|
|
33
|
+
* - `document.body` 固定浮层 + 智能上下翻转定位
|
|
34
|
+
* - 点击外部关闭、Escape 关闭
|
|
35
|
+
* - 键盘导航(↑ ↓ Enter)
|
|
36
|
+
* - 鼠标悬停高亮(通过 `data-idx` 自动委托)
|
|
37
|
+
* - `refocusTable` 焦点还原
|
|
38
|
+
*
|
|
39
|
+
* ### 子类实现要求
|
|
40
|
+
* 1. 声明 `readonly editorType: string`
|
|
41
|
+
* 2. 实现 `buildRows(panel)` — 将行渲染到面板,行必须设置 `data-idx`
|
|
42
|
+
* 3. 实现 `get itemCount()` — 总行数
|
|
43
|
+
* 4. 实现 `onRowClick(idx)` — 点击/Enter 触发
|
|
44
|
+
* 5. 实现 `onFocusChange(idx, prev)` — 更新行视觉高亮
|
|
45
|
+
* 6. 实现 `getValue()` — 返回最终值
|
|
46
|
+
*/
|
|
47
|
+
export declare abstract class GlobalOverlayEditor implements IEditor<string> {
|
|
48
|
+
#private;
|
|
49
|
+
protected container: HTMLElement | null;
|
|
50
|
+
protected table: {
|
|
51
|
+
getCellOriginValue(col: number, row: number): unknown;
|
|
52
|
+
} | null;
|
|
53
|
+
protected editCol: number;
|
|
54
|
+
protected editRow: number;
|
|
55
|
+
protected abstract get initialFocusIndex(): number;
|
|
56
|
+
protected abstract get itemCount(): number;
|
|
57
|
+
protected get focusedIndex(): number;
|
|
58
|
+
abstract readonly editorType: string;
|
|
59
|
+
constructor();
|
|
60
|
+
onStart(ctx: EditContext<string>): void;
|
|
61
|
+
onEnd(): void;
|
|
62
|
+
abstract getValue(): string;
|
|
63
|
+
isEditorElement(target: HTMLElement): boolean;
|
|
64
|
+
adjustPosition(rect: RectProps): void;
|
|
65
|
+
protected abstract buildRows(panel: HTMLDivElement): void;
|
|
66
|
+
protected abstract onRowClick(idx: number): void;
|
|
67
|
+
protected abstract onFocusChange(idx: number, prev: number): void;
|
|
68
|
+
protected rowAt(idx: number): HTMLElement | null;
|
|
69
|
+
protected setFocused(idx: number): void;
|
|
70
|
+
protected onDeleteKey(): void;
|
|
71
|
+
protected close(): void;
|
|
72
|
+
protected refocusTable(): void;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=global-overlay-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-overlay-editor.d.ts","sourceRoot":"","sources":["../../../src/entity-table/editors/global-overlay-editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAEhF,qCAAqC;AACrC,eAAO,MAAM,YAAY;;;;;;;;;;;CAWf,CAAC;AAKX,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAExD;AAED,+GAA+G;AAC/G,wBAAgB,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAE5E;AAED,gCAAgC;AAChC,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACpE,SAAS,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACzC,eAAe,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,IAAI,CAkBN;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,8BAAsB,mBAAoB,YAAW,OAAO,CAAC,MAAM,CAAC;;IAQlE,SAAS,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAAQ;IAC/C,SAAS,CAAC,KAAK,EAAE;QAAE,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAQ;IACzF,SAAS,CAAC,OAAO,SAAK;IACtB,SAAS,CAAC,OAAO,SAAK;IAEtB,SAAS,CAAC,QAAQ,KAAK,iBAAiB,IAAI,MAAM,CAAC;IACnD,SAAS,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC;IAE3C,SAAS,KAAK,YAAY,IAAI,MAAM,CAEnC;IAED,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;;IAuCrC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;IAkCvC,KAAK,IAAI,IAAI;IAUb,QAAQ,CAAC,QAAQ,IAAI,MAAM;IAE3B,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO;IAI7C,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAIrC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IACzD,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAChD,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAEjE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAIhD,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOvC,SAAS,CAAC,WAAW,IAAI,IAAI;IAI7B,SAAS,CAAC,KAAK,IAAI,IAAI;IAKvB,SAAS,CAAC,YAAY,IAAI,IAAI;CA0C/B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { GlobalOverlayEditor } from './global-overlay-editor.js';
|
|
2
|
+
import { IconData } from './lucide-svg.js';
|
|
3
|
+
/**
|
|
4
|
+
* 带图标的列表条目
|
|
5
|
+
* @deprecated 请改用 `EnumItem`,`EnumEditor` 已原生支持 icon 和 color 字段。
|
|
6
|
+
*/
|
|
7
|
+
export interface IconLabeledItem {
|
|
8
|
+
text: string;
|
|
9
|
+
value: string;
|
|
10
|
+
icon?: IconData;
|
|
11
|
+
color?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 支持图标 + 文字的单选列表编辑器
|
|
15
|
+
*
|
|
16
|
+
* @deprecated 请改用 `EnumEditor`,传入包含 `icon` / `color` 字段的 `EnumItem` 数组。
|
|
17
|
+
* `IconListEditor` 将在未来版本移除。
|
|
18
|
+
*
|
|
19
|
+
* 每项包含 lucide SVG 图标和本地化标签。
|
|
20
|
+
* ↑ ↓ 移动焦点,Enter / 点击选中并关闭,Esc 取消。
|
|
21
|
+
*/
|
|
22
|
+
export declare class IconListEditor extends GlobalOverlayEditor {
|
|
23
|
+
#private;
|
|
24
|
+
protected get initialFocusIndex(): number;
|
|
25
|
+
protected get itemCount(): number;
|
|
26
|
+
readonly editorType = "icon-list";
|
|
27
|
+
constructor(config: {
|
|
28
|
+
values: IconLabeledItem[];
|
|
29
|
+
});
|
|
30
|
+
onStart(ctx: Parameters<GlobalOverlayEditor['onStart']>[0]): void;
|
|
31
|
+
getValue(): string;
|
|
32
|
+
protected onDeleteKey(): void;
|
|
33
|
+
protected buildRows(panel: HTMLDivElement): void;
|
|
34
|
+
protected onRowClick(idx: number): void;
|
|
35
|
+
protected onFocusChange(idx: number, prev: number): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=icon-list-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-list-editor.d.ts","sourceRoot":"","sources":["../../../src/entity-table/editors/icon-list-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEjE;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,mBAAmB;;IAIrD,SAAS,KAAK,iBAAiB,IAAI,MAAM,CAExC;IAED,SAAS,KAAK,SAAS,IAAI,MAAM,CAEhC;IAED,QAAQ,CAAC,UAAU,eAAe;gBAEtB,MAAM,EAAE;QAAE,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE;IAKxC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAajE,QAAQ,IAAI,MAAM;cAIR,WAAW,IAAI,IAAI;IAKtC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAqChD,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOvC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CASzD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { EditContext, IEditor } from '@visactor/vtable-editors';
|
|
2
|
+
/**
|
|
3
|
+
* JSON / KeyValue 编辑器
|
|
4
|
+
*
|
|
5
|
+
* 浮层显示带语法提示的 textarea,适合编辑 json 和 keyValue 类型。
|
|
6
|
+
* - Ctrl+Enter:验证并提交
|
|
7
|
+
* - Escape:取消(恢复原始值)
|
|
8
|
+
* - 点击外部:best-effort 提交(JSON 合法则提交,否则保持原始值)
|
|
9
|
+
* - 实时显示 JSON 格式错误
|
|
10
|
+
*/
|
|
11
|
+
export declare class JsonEditor implements IEditor<unknown> {
|
|
12
|
+
#private;
|
|
13
|
+
readonly editorType = "json-editor";
|
|
14
|
+
onStart(ctx: EditContext<unknown>): void;
|
|
15
|
+
getValue(): unknown;
|
|
16
|
+
onEnd(): void;
|
|
17
|
+
isEditorElement(el: HTMLElement | EventTarget): boolean;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=json-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-editor.d.ts","sourceRoot":"","sources":["../../../src/entity-table/editors/json-editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKrE;;;;;;;;GAQG;AACH,qBAAa,UAAW,YAAW,OAAO,CAAC,OAAO,CAAC;;IASjD,QAAQ,CAAC,UAAU,iBAAiB;IAEpC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IAiIxC,QAAQ,IAAI,OAAO;IAInB,KAAK,IAAI,IAAI;IAIb,eAAe,CAAC,EAAE,EAAE,WAAW,GAAG,WAAW,GAAG,OAAO;CA4CxD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { EditContext, IEditor } from '@visactor/vtable-editors';
|
|
2
|
+
import { KVSchemaEntry } from '../columns/column-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* KeyValue (Record<string, unknown>) editor — Schema mode only
|
|
5
|
+
*
|
|
6
|
+
* - Key is always a dropdown derived from schema definition
|
|
7
|
+
* - Value input type adapts to the key's schema type
|
|
8
|
+
* - Per-row inline error hints; global summary shown at bottom
|
|
9
|
+
* - Ctrl+Enter / confirm button: validate & commit
|
|
10
|
+
* - Escape / cancel button: revert to original value
|
|
11
|
+
*/
|
|
12
|
+
export declare class KeyValueEditor implements IEditor<unknown> {
|
|
13
|
+
#private;
|
|
14
|
+
readonly editorType = "key-value-editor";
|
|
15
|
+
constructor(schema?: Record<string, KVSchemaEntry> | null);
|
|
16
|
+
onStart(ctx: EditContext<unknown>): void;
|
|
17
|
+
getValue(): Record<string, unknown>;
|
|
18
|
+
onEnd(): void;
|
|
19
|
+
isEditorElement(el: HTMLElement | EventTarget): boolean;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=key-value-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-value-editor.d.ts","sourceRoot":"","sources":["../../../src/entity-table/editors/key-value-editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAahE;;;;;;;;GAQG;AACH,qBAAa,cAAe,YAAW,OAAO,CAAC,OAAO,CAAC;;IAYrD,QAAQ,CAAC,UAAU,sBAAsB;gBAE7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI;IAIzD,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IA2JxC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAInC,KAAK,IAAI,IAAI;IAIb,eAAe,CAAC,EAAE,EAAE,WAAW,GAAG,WAAW,GAAG,OAAO;CAoWxD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Lucide 图标数据 — [tagName, attributes] 元组数组 */
|
|
2
|
+
export type IconData = readonly (readonly [string, Record<string, unknown>])[];
|
|
3
|
+
/**
|
|
4
|
+
* 将 `LucideIconData` 转为内联 SVG HTML 字符串
|
|
5
|
+
*
|
|
6
|
+
* @param icon - lucide 图标数据
|
|
7
|
+
* @param color - stroke 颜色(不合法时回退 currentColor)
|
|
8
|
+
* @param size - 宽高像素,默认 13
|
|
9
|
+
*/
|
|
10
|
+
export declare function lucideToSvgHtml(icon: IconData, color: string, size?: number): string;
|
|
11
|
+
//# sourceMappingURL=lucide-svg.d.ts.map
|