@aiao/rxdb-model-angular 0.0.17 → 0.0.19

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.
@@ -1 +1 @@
1
- {"version":3,"file":"aiao-rxdb-model-angular.mjs","sources":["../../../../packages/rxdb-model-angular/src/entity-dialog/entity-dialog.component.ts","../../../../packages/rxdb-model-angular/src/entity-dialog/entity-dialog.component.html","../../../../packages/rxdb-model-angular/src/entity-form/rxdb-entity-form-angular.ts","../../../../packages/rxdb-model-angular/src/entity-table/config.ts","../../../../packages/rxdb-model-angular/src/entity-table/entity-table/entity-table.component.ts","../../../../packages/rxdb-model-angular/src/entity-table/entity-table/entity-table.component.html","../../../../packages/rxdb-model-angular/src/entity-table/query-table/query-table.component.ts","../../../../packages/rxdb-model-angular/src/entity-table/query-table/query-table.component.html","../../../../packages/rxdb-model-angular/src/query-builder/tree-select/tree-select.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/field-selector/field-selector.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/popover-select/popover-select.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/operator-selector/operator-selector.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/value-input/value-input.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/theme/default-query-builder-theme.ts","../../../../packages/rxdb-model-angular/src/query-builder/theme/query-builder-theme.token.ts","../../../../packages/rxdb-model-angular/src/query-builder/query-rule/query-rule.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/query-group/query-group.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/query-builder/query-builder.component.ts","../../../../packages/rxdb-model-angular/src/entity-list/entity-list.component.ts","../../../../packages/rxdb-model-angular/src/entity-list/entity-list.component.html","../../../../packages/rxdb-model-angular/src/entity-detail/entity-detail.ts","../../../../packages/rxdb-model-angular/src/entity-detail/entity-detail.html","../../../../packages/rxdb-model-angular/src/entity-table/index.ts","../../../../packages/rxdb-model-angular/src/query-builder/subquery-builder/subquery-builder.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/index.ts","../../../../packages/rxdb-model-angular/src/index.ts","../../../../packages/rxdb-model-angular/src/aiao-rxdb-model-angular.ts"],"sourcesContent":["import { DialogRef } from '@angular/cdk/dialog';\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n output,\n signal\n} from '@angular/core';\n\n@Component({\n selector: 'rxdb-entity-dialog',\n imports: [CdkDragHandle],\n hostDirectives: [{ directive: CdkDrag, inputs: ['cdkDragBoundary'] }],\n templateUrl: './entity-dialog.component.html',\n styleUrl: './entity-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EntityDialogComponent implements AfterViewInit {\n readonly #dialogRef = inject(DialogRef, { optional: true });\n readonly #cdkDrag = inject(CdkDrag, { optional: true, self: true });\n readonly #el = inject(ElementRef) as ElementRef<HTMLElement>;\n readonly #doc = inject(DOCUMENT);\n\n #pane: HTMLElement | null = null;\n #resizing = false;\n #savedPaneState: { left: string; top: string; width: string; height: string } | null = null;\n\n readonly title = input.required<string>();\n readonly closeRequested = output<void>();\n\n readonly isFullscreen = signal(false);\n readonly isInDialog = !!inject(DialogRef, { optional: true });\n\n constructor() {\n if (this.#cdkDrag) {\n if (this.isInDialog) {\n this.#cdkDrag.rootElementSelector = '.cdk-overlay-pane';\n this.#cdkDrag.boundaryElement = '.cdk-overlay-container';\n } else {\n this.#cdkDrag.disabled = true;\n }\n }\n }\n\n ngAfterViewInit(): void {\n if (!this.isInDialog) return;\n requestAnimationFrame(() => this.#initFixedPane());\n }\n\n close(): void {\n this.closeRequested.emit();\n this.#dialogRef?.close();\n }\n\n toggleFullscreen(): void {\n const wasFullscreen = this.isFullscreen();\n this.isFullscreen.set(!wasFullscreen);\n const fullscreen = !wasFullscreen;\n const pane = this.#pane;\n if (!pane) return;\n\n if (fullscreen) {\n this.#savedPaneState = {\n left: pane.style.left,\n top: pane.style.top,\n width: pane.style.width,\n height: pane.style.height\n };\n pane.style.left = '0';\n pane.style.top = '0';\n pane.style.width = '100vw';\n pane.style.height = '100vh';\n if (this.#cdkDrag) {\n this.#cdkDrag.disabled = true;\n this.#cdkDrag.setFreeDragPosition({ x: 0, y: 0 });\n }\n } else {\n if (this.#savedPaneState) {\n pane.style.left = this.#savedPaneState.left;\n pane.style.top = this.#savedPaneState.top;\n pane.style.width = this.#savedPaneState.width;\n pane.style.height = this.#savedPaneState.height;\n this.#savedPaneState = null;\n }\n if (this.#cdkDrag) this.#cdkDrag.disabled = false;\n }\n }\n\n startResize(e: MouseEvent, dir: string): void {\n const pane = this.#pane;\n if (!pane || this.#resizing || this.isFullscreen()) return;\n e.preventDefault();\n e.stopPropagation();\n this.#resizing = true;\n const startX = e.clientX;\n const startY = e.clientY;\n const startW = pane.offsetWidth;\n const startH = pane.offsetHeight;\n const startL = parseFloat(pane.style.left) || 0;\n const startT = parseFloat(pane.style.top) || 0;\n const minW = 400;\n const minH = 300;\n\n const onMove = (ev: MouseEvent) => {\n const dx = ev.clientX - startX;\n const dy = ev.clientY - startY;\n if (dir.includes('e')) pane.style.width = Math.max(minW, startW + dx) + 'px';\n if (dir.includes('w')) {\n const w = Math.max(minW, startW - dx);\n pane.style.width = w + 'px';\n pane.style.left = startL + startW - w + 'px';\n }\n if (dir.includes('s')) pane.style.height = Math.max(minH, startH + dy) + 'px';\n if (dir.includes('n')) {\n const h = Math.max(minH, startH - dy);\n pane.style.height = h + 'px';\n pane.style.top = startT + startH - h + 'px';\n }\n };\n const onUp = () => {\n this.#resizing = false;\n this.#doc.removeEventListener('mousemove', onMove);\n this.#doc.removeEventListener('mouseup', onUp);\n };\n this.#doc.addEventListener('mousemove', onMove);\n this.#doc.addEventListener('mouseup', onUp);\n }\n\n #initFixedPane(): void {\n const pane = this.#el.nativeElement.closest<HTMLElement>('.cdk-overlay-pane');\n if (!pane) return;\n this.#pane = pane;\n const rect = pane.getBoundingClientRect();\n if (this.#cdkDrag) this.#cdkDrag.setFreeDragPosition({ x: 0, y: 0 });\n pane.style.position = 'fixed';\n pane.style.left = rect.left + 'px';\n pane.style.top = rect.top + 'px';\n pane.style.margin = '0';\n pane.style.maxWidth = 'none';\n pane.style.maxHeight = 'none';\n }\n}\n","<!-- Resize handles -->\n@if (isInDialog) {\n <div class=\"resize-handle resize-n\" (mousedown)=\"startResize($event, 'n')\"></div>\n <div class=\"resize-handle resize-s\" (mousedown)=\"startResize($event, 's')\"></div>\n <div class=\"resize-handle resize-e\" (mousedown)=\"startResize($event, 'e')\"></div>\n <div class=\"resize-handle resize-w\" (mousedown)=\"startResize($event, 'w')\"></div>\n <div class=\"resize-handle resize-ne\" (mousedown)=\"startResize($event, 'ne')\"></div>\n <div class=\"resize-handle resize-nw\" (mousedown)=\"startResize($event, 'nw')\"></div>\n <div class=\"resize-handle resize-se\" (mousedown)=\"startResize($event, 'se')\"></div>\n <div class=\"resize-handle resize-sw\" (mousedown)=\"startResize($event, 'sw')\"></div>\n}\n\n<!-- Dialog Title Bar (drag handle + fullscreen toggle + close) -->\n@if (isInDialog) {\n <div class=\"border-base-300 flex shrink-0 items-center justify-between border-b px-4 py-2\">\n <span class=\"flex-1 cursor-grab text-base font-semibold select-none active:cursor-grabbing\" cdkDragHandle>\n {{ title() }}\n </span>\n <div class=\"flex items-center gap-1\">\n <!-- Fullscreen Toggle -->\n <button\n class=\"btn btn-ghost btn-xs btn-square\"\n [attr.aria-label]=\"isFullscreen() ? '退出全屏' : '全屏'\"\n (click)=\"toggleFullscreen()\"\n type=\"button\"\n >\n @if (isFullscreen()) {\n <svg class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\" />\n </svg>\n } @else {\n <svg class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path d=\"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7\" />\n </svg>\n }\n </button>\n <!-- Close -->\n <button class=\"btn btn-ghost btn-xs btn-square\" (click)=\"close()\" aria-label=\"关闭\" type=\"button\">\n <svg class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n}\n\n<!-- Projected content -->\n<ng-content />\n","import {\n EntityFieldType,\n type EntityFormData,\n formatEntityFieldValue,\n type FormFieldChangeEvent,\n type FormFieldConfig,\n type FormMode,\n type FormValidationResult,\n parseEntityFieldValue,\n type RelatedEntityItem,\n type RelatedEntityProvider,\n validateForm\n} from '@aiao/rxdb-model';\nimport { DatePipe, JsonPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, linkedSignal, output } from '@angular/core';\n\n@Component({\n selector: 'rxdb-entity-form',\n imports: [DatePipe, JsonPipe],\n template: `<form class=\"grid grid-cols-1 gap-4 md:grid-cols-2\" (submit)=\"$event.preventDefault(); onSubmit()\">\n @for (field of editableFields(); track field.field) {\n <fieldset\n class=\"fieldset\"\n [class.md:col-span-2]=\"field.span === 2 || field.type === 'json' || field.type === 'keyValue'\"\n >\n <legend class=\"fieldset-legend\">{{ field.displayName }}</legend>\n @if (isFieldReadonly(field)) {\n <div class=\"input input-ghost flex min-h-10 items-center\">{{ displayValueMap().get(field.field) ?? '' }}</div>\n } @else {\n @switch (field.type) {\n @case ('boolean') {\n <input\n class=\"toggle\"\n [checked]=\"!!formData()[field.field]\"\n (change)=\"onFieldChange(field, $any($event.target).checked)\"\n type=\"checkbox\"\n />\n }\n @case ('enum') {\n <select\n class=\"select\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n >\n @if (field.nullable) {\n <option value=\"\">(空)</option>\n }\n @for (val of field.enumValues ?? []; track val) {\n <option [value]=\"val\">{{ val }}</option>\n }\n </select>\n }\n @case ('date') {\n <input\n class=\"input\"\n [value]=\"formData()[field.field] ? ($any(formData()[field.field]) | date: 'yyyy-MM-ddTHH:mm') : ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n type=\"datetime-local\"\n />\n }\n @case ('number') {\n <input\n class=\"input\"\n [attr.placeholder]=\"field.placeholder ?? ''\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n step=\"any\"\n type=\"number\"\n />\n }\n @case ('integer') {\n <input\n class=\"input\"\n [attr.placeholder]=\"field.placeholder ?? ''\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n step=\"1\"\n type=\"number\"\n />\n }\n @case ('stringArray') {\n <input\n class=\"input\"\n [attr.placeholder]=\"field.placeholder ?? '逗号分隔'\"\n [value]=\"$any(formData()[field.field] ?? []).join(', ')\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n type=\"text\"\n />\n }\n @case ('numberArray') {\n <input\n class=\"input\"\n [attr.placeholder]=\"field.placeholder ?? '逗号分隔数字'\"\n [value]=\"$any(formData()[field.field] ?? []).join(', ')\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n type=\"text\"\n />\n }\n @case ('json') {\n <textarea\n class=\"textarea min-h-24\"\n [attr.placeholder]=\"field.placeholder ?? 'JSON'\"\n [value]=\"formData()[field.field] !== null ? (formData()[field.field] | json) : ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n ></textarea>\n }\n @case ('keyValue') {\n <textarea\n class=\"textarea min-h-24\"\n [attr.placeholder]=\"field.placeholder ?? 'JSON'\"\n [value]=\"formData()[field.field] !== null ? (formData()[field.field] | json) : ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n ></textarea>\n }\n @case ('oneToOne') {\n <select\n class=\"select\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n >\n <option value=\"\">(空)</option>\n @for (item of relatedItemsMap().get(field.field) ?? []; track item.id) {\n <option [value]=\"item.id\">{{ item.displayName }}</option>\n }\n </select>\n }\n @case ('manyToOne') {\n <select\n class=\"select\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n >\n <option value=\"\">(空)</option>\n @for (item of relatedItemsMap().get(field.field) ?? []; track item.id) {\n <option [value]=\"item.id\">{{ item.displayName }}</option>\n }\n </select>\n }\n @default {\n <input\n class=\"input\"\n [attr.placeholder]=\"field.placeholder ?? ''\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n type=\"text\"\n />\n }\n }\n }\n @if (field.helpText) {\n <p class=\"label\">{{ field.helpText }}</p>\n }\n </fieldset>\n }\n @if (!isReadonly() && showActions()) {\n <div class=\"flex justify-end gap-2 pt-2 md:col-span-2\">\n <button class=\"btn\" (click)=\"onCancel()\" type=\"button\">取消</button>\n <button class=\"btn btn-primary\" type=\"submit\">保存</button>\n </div>\n }\n </form>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EntityFormComponent {\n readonly fields = input.required<FormFieldConfig[]>();\n readonly data = input.required<EntityFormData>();\n readonly mode = input<FormMode>('view');\n readonly relatedEntityProvider = input<RelatedEntityProvider>();\n readonly showActions = input(true);\n\n readonly fieldChanged = output<FormFieldChangeEvent>();\n readonly formSubmitted = output<EntityFormData>();\n readonly formCancelled = output<void>();\n readonly validationErrors = output<FormValidationResult>();\n\n readonly formData = linkedSignal(() => ({ ...this.data() }));\n\n readonly editableFields = computed(() => {\n return this.fields().filter(f => !f.hidden);\n });\n\n readonly isReadonly = computed(() => this.mode() === 'view');\n\n readonly relatedItemsMap = computed(() => {\n const provider = this.relatedEntityProvider();\n const fields = this.editableFields();\n const map = new Map<string, RelatedEntityItem[]>();\n if (!provider) return map;\n for (const field of fields) {\n if (field.relatedEntityName) {\n map.set(field.field, provider(field.relatedEntityName, field.relatedNamespace));\n }\n }\n return map;\n });\n\n readonly displayValueMap = computed(() => {\n const data = this.formData();\n const fields = this.editableFields();\n const itemsMap = this.relatedItemsMap();\n const map = new Map<string, string>();\n for (const field of fields) {\n if (!this.isReadonly() && field.readonly !== true) continue;\n const value = data[field.field];\n if ((field.type === 'oneToOne' || field.type === 'manyToOne') && field.relatedEntityName) {\n const items = itemsMap.get(field.field) ?? [];\n const item = items.find(i => i.id === value);\n map.set(field.field, item?.displayName ?? formatEntityFieldValue(field.type, value));\n } else {\n map.set(field.field, formatEntityFieldValue(field.type, value));\n }\n }\n return map;\n });\n\n onFieldChange(field: FormFieldConfig, rawValue: unknown): void {\n const current = this.formData();\n const previousValue = current[field.field];\n const parsed = parseEntityFieldValue(field.type, rawValue);\n this.formData.set({ ...current, [field.field]: parsed });\n this.fieldChanged.emit({ field: field.field, type: field.type as EntityFieldType, value: parsed, previousValue });\n }\n\n onSubmit(): void {\n const currentFields = this.fields();\n const currentData = this.formData();\n const result = validateForm(currentFields, currentData);\n if (!result.valid) {\n this.validationErrors.emit(result);\n return;\n }\n this.formSubmitted.emit(currentData);\n }\n\n onCancel(): void {\n this.formData.set({ ...this.data() });\n this.formCancelled.emit();\n }\n\n isFieldReadonly(field: FormFieldConfig): boolean {\n return this.isReadonly() || field.readonly === true;\n }\n}\n","import type { EntityTableConfig } from '@aiao/rxdb-model';\nimport { InjectionToken } from '@angular/core';\n\nexport const ENTITY_TABLE_CONFIG = new InjectionToken<EntityTableConfig>('ENTITY_TABLE_CONFIG');\n","import type { BatchChangeItem, CellChangeEvent, EntityTableRecord, PendingWrite } from '@aiao/rxdb-model';\nimport {\n CellTooltipManager,\n ROW_SERIES_COL_OFFSET,\n TableClipboardManager,\n collectDeleteWrites,\n collectReorderedIds,\n completeTableEdit,\n createListTable,\n createTheme,\n getCSSVariables,\n handleTableKeydown,\n patchDragIconForReadonlyRows,\n setCellSwitchState,\n updateTableRecords,\n changeCellValue as vtChangeCellValue\n} from '@aiao/rxdb-model';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n PLATFORM_ID,\n afterNextRender,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport type { ListTableConstructorOptions } from '@visactor/vtable';\nimport * as VTable from '@visactor/vtable';\nimport { ENTITY_TABLE_CONFIG } from '../config';\n\n/**\n * 通用实体数据表格组件\n *\n * 基于 VTable 提供高性能表格渲染,支持:\n * - 单元格编辑(文本、开关、复选框、下拉)\n * - 剪贴板操作(Ctrl+C/V,TSV 格式)\n * - 拖拽排序\n * - 键盘导航(Enter 切换开关,Delete 清空单元格)\n * - 主题系统(daisyUI CSS 变量)\n * - 校验错误 tooltip\n */\n@Component({\n selector: 'rxdb-entity-table',\n imports: [],\n templateUrl: './entity-table.component.html',\n styleUrl: './entity-table.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EntityTableComponent implements OnDestroy {\n readonly #platformId = inject(PLATFORM_ID);\n readonly #config = inject(ENTITY_TABLE_CONFIG, { optional: true });\n #tableInstance: VTable.ListTable | null = null;\n #destroyed = false;\n #tableReady = signal(false);\n #prevColumns: ListTableConstructorOptions['columns'] | null = null;\n #prevRecords: EntityTableRecord[] | null = null;\n #selectedCell: { col: number; row: number } | null = null;\n #containerKeydownHandler: ((e: KeyboardEvent) => void) | null = null;\n #resizeObserver: ResizeObserver | null = null;\n readonly #cellTooltip = signal<{ x: number; y: number; content: string } | null>(null);\n readonly #headerHeight = signal(40);\n readonly #clipboard = new TableClipboardManager();\n readonly #tooltip = new CellTooltipManager();\n #container: HTMLElement | null = null;\n\n readonly tableContainer = viewChild<ElementRef<HTMLDivElement>>('tableContainer');\n\n // ── 输入 ──────────────────────────────────────────────────────────\n readonly records = input.required<EntityTableRecord[]>();\n readonly columns = input.required<ListTableConstructorOptions['columns']>();\n readonly isDarkMode = input(false);\n readonly idField = input('id');\n readonly nonClearableFields = input<ReadonlySet<string>>(new Set());\n readonly tableOptions = input<Partial<ListTableConstructorOptions>>();\n readonly cellErrorDetector = input<(record: EntityTableRecord, field: string) => string | null>();\n readonly loading = input(false);\n /** 业务层回调判断单元格是否可清空(返回 false 跳过),替代领域特定的硬编码逻辑 */\n readonly cellClearable = input<(record: Record<string, unknown>, field: string) => boolean>();\n /** 触底时加载更多数据的回调,由表格内部在滚动到底部时调用 */\n readonly loadMore = input<() => void>();\n /** 加载更多中状态(已有数据,底部小 spinner,不拦截滚动) */\n readonly loadingMore = input(false);\n\n // ── 输出 ──────────────────────────────────────────────────────────\n readonly cellChanged = output<CellChangeEvent>();\n readonly rowDeleted = output<EntityTableRecord>();\n readonly iconClicked = output<{ name: string; record: EntityTableRecord }>();\n readonly batchUpdated = output<BatchChangeItem[]>();\n readonly rowReordered = output<string[]>();\n readonly scrollNearBottom = output<void>();\n\n readonly cellTooltip = this.#cellTooltip;\n readonly headerHeight = this.#headerHeight;\n\n get tableInstance(): VTable.ListTable | null {\n return this.#tableInstance;\n }\n\n constructor() {\n if (isPlatformBrowser(this.#platformId)) {\n afterNextRender(() => {\n if (this.#destroyed) return;\n const el = this.tableContainer()?.nativeElement;\n if (el && !this.#tableInstance && this.columns()?.length) {\n this.#initTable(el);\n this.#prevColumns = this.columns();\n this.#tableReady.set(true);\n }\n });\n\n effect(() => {\n const records = this.records();\n const columns = this.columns();\n const ready = untracked(() => this.#tableReady());\n if (!this.#tableInstance) {\n if (!ready && columns?.length) {\n const el = this.tableContainer()?.nativeElement;\n if (el) {\n this.#initTable(el);\n this.#prevColumns = columns;\n this.#tableReady.set(true);\n }\n }\n return;\n }\n const columnsChanged = columns !== this.#prevColumns;\n if (columnsChanged) {\n updateTableRecords(this.#tableInstance, records, this.#prevColumns ?? columns, columns);\n this.#prevColumns = columns;\n this.#prevRecords = records;\n } else if (records !== this.#prevRecords) {\n this.#tableInstance.setRecords(records);\n this.#prevRecords = records;\n }\n });\n\n effect(() => {\n this.isDarkMode();\n this.redrawTheme();\n });\n }\n }\n /**\n * 从业务层回滚单元格值(校验失败时恢复原值)。\n * 避免外部直接访问 tableInstance。\n */\n changeCellValue(col: number, row: number, value: unknown): void {\n if (this.#tableInstance) vtChangeCellValue(this.#tableInstance, col, row, value);\n }\n\n redrawTheme(): void {\n if (this.#tableInstance) {\n this.#tableInstance.updateTheme(createTheme(this.isDarkMode(), getCSSVariables()));\n }\n }\n\n ngOnDestroy(): void {\n this.#destroyed = true;\n this.#tooltip.cleanup();\n if (this.#containerKeydownHandler) {\n this.#container?.removeEventListener('keydown', this.#containerKeydownHandler);\n this.#containerKeydownHandler = null;\n }\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = null;\n if (this.#tableInstance) {\n completeTableEdit(this.#tableInstance);\n this.#tableInstance.release();\n }\n this.#tableInstance = null;\n this.#container = null;\n this.#tableReady.set(false);\n }\n\n #initTable(container: HTMLElement): void {\n const records = this.records();\n const table = createListTable(container, records, this.columns(), this.isDarkMode(), this.tableOptions());\n this.#tableInstance = table;\n this.#prevRecords = records;\n this.#container = container;\n const h = table.getRowHeight(0);\n if (h > 0) this.#headerHeight.set(h);\n\n this.#resizeObserver = new ResizeObserver(() => table.resize());\n this.#resizeObserver.observe(container);\n table.updateTheme(createTheme(this.isDarkMode(), getCSSVariables()));\n patchDragIconForReadonlyRows(table);\n this.#bindTableEvents(table, container);\n }\n\n #bindTableEvents(table: VTable.ListTable, container: HTMLElement): void {\n table.on('change_cell_value', (args: { col: number; row: number; changedValue: string | number }) => {\n this.#handleCellChange(args.col, args.row, args.changedValue);\n });\n table.on('switch_state_change', (args: { col: number; row: number; checked: boolean }) => {\n this.#handleCellChange(args.col, args.row, args.checked);\n });\n table.on('checkbox_state_change', (args: { col: number; row: number; checked: boolean }) => {\n this.#handleCellChange(args.col, args.row, args.checked);\n });\n table.on('icon_click', (args: { name: string; col: number; row: number }) => {\n completeTableEdit(table);\n const record = table.getRecordByCell(args.col, args.row) as EntityTableRecord | undefined;\n if (!record) return;\n if (args.name === 'delete-action') this.rowDeleted.emit(record);\n else this.iconClicked.emit({ name: args.name, record });\n });\n table.on('mouseenter_cell', (args: { col: number; row: number }) => this.#showCellError(args.col, args.row));\n table.on('mouseleave_cell', () => this.#tooltip.hide(v => this.#cellTooltip.set(v)));\n table.on('selected_cell', (args: { col: number; row: number }) => {\n this.#selectedCell = { col: args.col, row: args.row };\n });\n table.on('change_header_position', () => {\n const ids = collectReorderedIds(table, this.idField());\n if (ids.length > 0) this.rowReordered.emit(ids);\n });\n table.on('scroll', (args: { scrollDirection: string; scrollRatioY?: number; dy?: number }) => {\n if (\n args.scrollDirection === 'vertical' &&\n (args.dy ?? 0) > 0 &&\n (args.scrollRatioY ?? 0) > 0.9 &&\n !this.loadingMore()\n ) {\n const fn = this.loadMore();\n if (fn) {\n fn();\n } else {\n this.scrollNearBottom.emit();\n }\n }\n });\n\n this.#containerKeydownHandler = (e: KeyboardEvent) =>\n handleTableKeydown(\n {\n getTable: () => this.#tableInstance,\n getSelectedCell: () => this.#selectedCell,\n getColDef: col => this.#getColDef(col) as { cellType?: string; field?: string },\n onCopy: () => void this.#clipboard.copy(table, this.columns() as Record<string, unknown>[]),\n onPaste: () => void this.#pasteFromClipboard(),\n onDelete: () => this.#deleteSelectedCells(),\n onCellChange: (col, row, val) => this.#handleCellChange(col, row, val)\n },\n e\n );\n container.addEventListener('keydown', this.#containerKeydownHandler);\n }\n\n #getColDef(col: number): Record<string, unknown> | undefined {\n return (this.columns() as Record<string, unknown>[])?.[col - ROW_SERIES_COL_OFFSET];\n }\n\n #handleCellChange(col: number, row: number, changedValue: unknown): void {\n const record = this.#tableInstance?.getRecordByCell(col, row) as EntityTableRecord | undefined;\n const fieldName = (this.#getColDef(col) as { field?: string })?.field;\n if (!record || !fieldName) return;\n this.cellChanged.emit({ col, row, field: fieldName, value: changedValue, record });\n }\n\n #showCellError(col: number, row: number): void {\n const table = this.#tableInstance;\n if (!table) return;\n const detector = this.cellErrorDetector();\n if (!detector) return;\n const record = table.getRecordByCell(col, row) as EntityTableRecord | undefined;\n if (!record) return;\n const field = (this.#getColDef(col) as { field?: string })?.field;\n if (!field) return;\n const content = detector(record, field);\n if (!content) return;\n this.#tooltip.showError(table, col, row, content, v => this.#cellTooltip.set(v), this.#config?.tooltipDelay);\n }\n\n /** 将 PendingWrite[] 按 idField 归并为 BatchChangeItem[] */\n #groupWrites(writes: PendingWrite[]): BatchChangeItem[] {\n const map = new Map<string, Record<string, unknown>>();\n for (const w of writes) {\n const id = String((w.record as Record<string, unknown>)[this.idField()]);\n if (!map.has(id)) map.set(id, {});\n map.get(id)![w.field] = w.value;\n }\n return [...map.entries()].map(([recordId, changes]) => ({ recordId, changes }));\n }\n\n async #pasteFromClipboard(): Promise<void> {\n if (!this.#tableInstance) return;\n const writes = await this.#clipboard.paste(this.#tableInstance, this.columns() as Record<string, unknown>[]);\n if (writes.length > 0) {\n for (const w of writes) {\n if (typeof w.value === 'boolean') {\n setCellSwitchState(this.#tableInstance, w.col, w.row, w.value);\n }\n }\n this.batchUpdated.emit(this.#groupWrites(writes));\n }\n }\n\n #deleteSelectedCells(): void {\n const table = this.#tableInstance;\n if (!table) return;\n const columns = this.columns() as { field?: string; cellType?: string | ((...a: unknown[]) => string) }[];\n const { writes, boolCells } = collectDeleteWrites(table, columns, this.nonClearableFields(), this.cellClearable());\n for (const bc of boolCells) setCellSwitchState(table, bc.col, bc.row, false);\n if (writes.length > 0) this.batchUpdated.emit(this.#groupWrites(writes));\n }\n}\n","<div class=\"relative h-full w-full overflow-hidden\">\n <div class=\"absolute inset-0\" #tableContainer></div>\n @if (records().length === 0 && !loading()) {\n <div\n class=\"text-base-content/40 absolute inset-x-0 bottom-0 flex items-center justify-center text-sm\"\n [style.top.px]=\"headerHeight()\"\n aria-label=\"暂无数据\"\n role=\"status\"\n >\n <div class=\"empty-slot\">\n <ng-content select=\"[emptyState]\"></ng-content>\n </div>\n <div class=\"empty-default flex flex-col items-center gap-3\">\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"40\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.2\"\n viewBox=\"0 0 24 24\"\n width=\"40\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"18\" rx=\"2\" width=\"18\" x=\"3\" y=\"3\" />\n <path d=\"M3 9h18\" />\n <path d=\"M9 9v12\" />\n <path d=\"M3 15h18\" />\n </svg>\n <span>暂无数据</span>\n </div>\n </div>\n }\n @if (loading()) {\n <div class=\"bg-base-100/60 absolute inset-0 z-10 flex items-center justify-center\">\n <span class=\"loading loading-spinner loading-md text-primary\"></span>\n </div>\n }\n @if (loadingMore()) {\n <div class=\"pointer-events-none absolute right-0 bottom-0 left-0 z-10 flex justify-center py-1.5\">\n <span class=\"loading loading-dots loading-sm text-primary\"></span>\n </div>\n }\n @if (cellTooltip(); as tip) {\n <div\n class=\"bg-base-300 text-base-content border-base-300 pointer-events-none fixed z-[100] max-w-xs rounded border px-2 py-1.5 text-xs shadow-lg\"\n [style.left.px]=\"tip.x\"\n [style.top.px]=\"tip.y\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n role=\"tooltip\"\n >\n {{ tip.content }}\n </div>\n }\n</div>\n","import type { BatchChangeItem, CellChangeEvent, EntityTableRecord } from '@aiao/rxdb-model';\nimport { ChangeDetectionStrategy, Component, computed, input, output, viewChild } from '@angular/core';\nimport type { ListTable, ListTableConstructorOptions } from '@visactor/vtable';\nimport { EntityTableComponent } from '../entity-table/entity-table.component';\n\n/**\n * 集成查询构建器的实体表格组件\n *\n * 在实体表格上方提供筛选区域位置(通过内容投影),\n * 将 rxdb-query-builder 的查询结果传递给底层 EntityTableComponent。\n *\n * 使用方式:\n * ```html\n * <rxdb-query-table [records]=\"filteredRecords()\" [columns]=\"columns\">\n * <div filterBar>\n * <rxdb-query-builder [fields]=\"fields\" (queryChange)=\"onQueryChange($event)\" />\n * </div>\n * <div emptyState>暂无数据</div>\n * </rxdb-query-table>\n * ```\n */\n@Component({\n selector: 'rxdb-query-table',\n imports: [EntityTableComponent],\n templateUrl: './query-table.component.html',\n styleUrl: './query-table.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QueryTableComponent {\n readonly records = input.required<EntityTableRecord[]>();\n readonly columns = input.required<ListTableConstructorOptions['columns']>();\n readonly idField = input('id');\n readonly nonClearableFields = input<ReadonlySet<string>>(new Set());\n readonly tableOptions = input<Partial<ListTableConstructorOptions>>();\n readonly cellErrorDetector = input<(record: EntityTableRecord, field: string) => string | null>();\n readonly isDarkMode = input(false);\n /** 业务层回调判断单元格是否可清空 */\n readonly cellClearable = input<(record: Record<string, unknown>, field: string) => boolean>();\n\n /** 查询条件是否激活(显示筛选状态标签) */\n readonly queryActive = input(false);\n /** 结果总数(显示在筛选状态栏中) */\n readonly totalCount = input<number>();\n /** 筛选后结果数 */\n readonly filteredCount = input<number>();\n /** 是否显示加载状态 */\n readonly loading = input(false);\n /** 加载更多中(已有数据,底部小 spinner,不拦截滚动) */\n readonly loadingMore = input(false);\n /** 触底时加载更多数据的回调,透传给 EntityTableComponent */\n readonly loadMore = input<() => void>();\n\n readonly cellChanged = output<CellChangeEvent>();\n readonly rowDeleted = output<EntityTableRecord>();\n readonly iconClicked = output<{ name: string; record: EntityTableRecord }>();\n readonly batchUpdated = output<BatchChangeItem[]>();\n readonly rowReordered = output<string[]>();\n readonly scrollNearBottom = output<void>();\n\n readonly entityTable = viewChild(EntityTableComponent);\n\n readonly statusText = computed(() => {\n const total = this.totalCount();\n const filtered = this.filteredCount();\n if (total == null) return '';\n if (filtered != null && filtered !== total) return `${filtered} / ${total}`;\n return `${total}`;\n });\n\n get tableInstance(): ListTable | null {\n return this.entityTable()?.tableInstance ?? null;\n }\n\n changeCellValue(col: number, row: number, value: unknown): void {\n this.entityTable()?.changeCellValue(col, row, value);\n }\n\n redrawTheme(): void {\n this.entityTable()?.redrawTheme();\n }\n}\n","<div class=\"flex h-full w-full flex-col overflow-hidden\">\n <!-- 筛选栏插槽 -->\n <ng-content select=\"[filterBar]\"></ng-content>\n\n <!-- 筛选状态栏 -->\n @if (queryActive() && statusText()) {\n <div class=\"text-base-content/60 flex items-center gap-2 border-b px-3 py-1 text-xs\">\n <span>{{ statusText() }}</span>\n </div>\n }\n\n <!-- 表格主体 -->\n <div class=\"min-h-0 flex-1\">\n <rxdb-entity-table\n [cellClearable]=\"cellClearable()\"\n [cellErrorDetector]=\"cellErrorDetector()\"\n [columns]=\"columns()\"\n [idField]=\"idField()\"\n [isDarkMode]=\"isDarkMode()\"\n [loading]=\"loading()\"\n [loadingMore]=\"loadingMore()\"\n [loadMore]=\"loadMore()\"\n [nonClearableFields]=\"nonClearableFields()\"\n [records]=\"records()\"\n [tableOptions]=\"tableOptions()\"\n (batchUpdated)=\"batchUpdated.emit($event)\"\n (cellChanged)=\"cellChanged.emit($event)\"\n (iconClicked)=\"iconClicked.emit($event)\"\n (rowDeleted)=\"rowDeleted.emit($event)\"\n (rowReordered)=\"rowReordered.emit($event)\"\n (scrollNearBottom)=\"scrollNearBottom.emit()\"\n >\n <ng-content select=\"[emptyState]\"></ng-content>\n </rxdb-entity-table>\n </div>\n</div>\n","import { applyPopoverPosition, findNodeByValue, getDisplayNamePath, type FieldTreeNode } from '@aiao/rxdb-model';\nimport { ActiveDescendantKeyManager, type Highlightable } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n Injector,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport {\n BracesIcon,\n CalendarIcon,\n ChevronDownIcon,\n ChevronRightIcon,\n HashIcon,\n Link2Icon,\n ListChecksIcon,\n ListIcon,\n LucideAngularModule,\n TableIcon,\n ToggleLeftIcon,\n TypeIcon\n} from 'lucide-angular';\n\nlet _uid = 0;\n\n/** 扁平化的可见树节点(用于渲染和键盘导航) */\ninterface FlatItem {\n node: FieldTreeNode;\n depth: number;\n isExpandable: boolean;\n isExpanded: boolean;\n}\n\n/**\n * 树节点 Directive,实现 CDK {@link Highlightable} 接口\n *\n * 用于 {@link ActiveDescendantKeyManager} 管理键盘导航时的激活样式。\n * `exportAs: 'rxdbTreeItem'` 允许模板中通过 `#ref=\"rxdbTreeItem\"` 访问实例。\n */\n@Directive({\n selector: '[rxdbTreeItem]',\n standalone: true,\n exportAs: 'rxdbTreeItem'\n})\nexport class TreeItemDirective implements Highlightable {\n private readonly _active = signal(false);\n readonly isActive = this._active.asReadonly();\n\n setActiveStyles(): void {\n this._active.set(true);\n }\n\n setInactiveStyles(): void {\n this._active.set(false);\n }\n}\n\n/**\n * 树形下拉选择组件\n *\n * @description\n * 基于 Popover API 和 `@angular/cdk/a11y` 的树形字段选择器:\n * - 使用原生 Popover API,在 `overflow` 容器中不被裁剪\n * - 支持关键字过滤(自动展开匹配路径)\n * - 支持展开/折叠关系节点\n * - 键盘导航:↑↓ 移动、→ 展开、← 折叠、Enter 选中、Escape 关闭\n * - 使用 CDK `ActiveDescendantKeyManager` + `aria-activedescendant` 满足 WAI-ARIA 无障碍规范\n *\n * @example\n * ```html\n * <rxdb-tree-select\n * [nodes]=\"fieldTree()\"\n * [selected]=\"selectedField()\"\n * placeholder=\"选择字段\"\n * (selectChange)=\"onFieldSelect($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'rxdb-tree-select',\n standalone: true,\n imports: [FormsModule, TreeItemDirective, LucideAngularModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- 触发按钮 -->\n <button\n class=\"select select-sm text-left\"\n #trigger\n [attr.popovertarget]=\"uid\"\n [style.min-width]=\"minWidth()\"\n aria-haspopup=\"tree\"\n type=\"button\"\n >\n @if (selectedNode(); as node) {\n <lucide-icon\n class=\"w-3.5 shrink-0\"\n [class]=\"typeColorMap[node.type] ?? defaultTypeColor\"\n [img]=\"typeIconMap[node.type] ?? defaultTypeIcon\"\n size=\"14\"\n />\n }\n <span class=\"min-w-0 grow truncate\">{{ displayValue() }}</span>\n </button>\n\n <!-- Popover 浮层 -->\n <div\n class=\"bg-base-100 text-base-content rounded-box border-base-300 border shadow-xl\"\n #popoverEl\n [id]=\"uid\"\n [style.min-width]=\"minWidth()\"\n (beforetoggle)=\"onBeforeToggle($event)\"\n (keydown)=\"onKeydown($event)\"\n (toggle)=\"onToggle($event)\"\n popover\n tabindex=\"-1\"\n >\n <!-- 过滤输入框 -->\n <div class=\"mb-1 p-1\">\n <input\n class=\"input input-sm w-full\"\n #filterInput\n [attr.aria-activedescendant]=\"activeItemId()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-expanded]=\"true\"\n [attr.aria-owns]=\"listId\"\n [ngModel]=\"filterText()\"\n (ngModelChange)=\"filterText.set($event)\"\n aria-autocomplete=\"list\"\n placeholder=\"搜索字段...\"\n role=\"combobox\"\n type=\"text\"\n />\n </div>\n\n <!-- 树形列表 -->\n <ul\n class=\"menu menu-sm max-h-60 w-full flex-nowrap overflow-y-auto px-2\"\n [attr.aria-label]=\"placeholder()\"\n [id]=\"listId\"\n role=\"tree\"\n >\n @for (item of visibleItems(); track trackItem(item)) {\n <li [style.padding-left.rem]=\"item.depth * 0.75\" role=\"none\">\n <button\n class=\"flex w-full items-center gap-1.5 text-left text-sm\"\n #treeItemRef=\"rxdbTreeItem\"\n [attr.aria-expanded]=\"item.isExpandable ? item.isExpanded : null\"\n [attr.aria-selected]=\"!item.isExpandable ? item.node.value === selected() : null\"\n [class.bg-primary/15]=\"!item.isExpandable && item.node.value === selected()\"\n [class.font-semibold]=\"!item.isExpandable && item.node.value === selected()\"\n [class.menu-focus]=\"treeItemRef.isActive()\"\n [id]=\"uid + '-item-' + item.node.value\"\n (click)=\"onItemClick(item)\"\n role=\"treeitem\"\n rxdbTreeItem\n type=\"button\"\n >\n <lucide-icon\n class=\"w-3.5 shrink-0\"\n [class]=\"typeColorMap[item.node.type] ?? defaultTypeColor\"\n [img]=\"typeIconMap[item.node.type] ?? defaultTypeIcon\"\n size=\"14\"\n />\n <span class=\"min-w-0 grow truncate\">{{ item.node.displayName || item.node.label }}</span>\n @if (!item.isExpandable && item.node.value === selected()) {\n <svg\n class=\"text-primary h-3 w-3 shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2.5\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n }\n @if (item.isExpandable) {\n <span class=\"shrink-0 text-xs opacity-40\">{{ item.node.children!.length }}</span>\n @if (item.isExpanded) {\n <lucide-icon class=\"w-3.5 shrink-0 opacity-50\" [img]=\"ChevronDownIcon\" size=\"14\" />\n } @else {\n <lucide-icon class=\"w-3.5 shrink-0 opacity-50\" [img]=\"ChevronRightIcon\" size=\"14\" />\n }\n }\n </button>\n </li>\n } @empty {\n <li class=\"px-3 py-1.5 text-sm opacity-50\">无匹配字段</li>\n }\n </ul>\n </div>\n `\n})\nexport class TreeSelectComponent {\n private readonly trigger = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n private readonly popoverEl = viewChild.required<ElementRef<HTMLElement>>('popoverEl');\n private readonly filterInput = viewChild<ElementRef<HTMLInputElement>>('filterInput');\n private readonly treeItemDirs = viewChildren(TreeItemDirective);\n private readonly expandedPaths = signal(new Set<string>());\n private readonly keyManager: ActiveDescendantKeyManager<TreeItemDirective>;\n private readonly _activeIdx = signal(-1);\n\n protected readonly uid = `rxdb-ts-${++_uid}`;\n protected readonly listId = `${this.uid}-list`;\n protected readonly filterText = signal('');\n protected readonly ChevronDownIcon = ChevronDownIcon;\n protected readonly ChevronRightIcon = ChevronRightIcon;\n protected readonly typeIconMap: Partial<Record<string, typeof ChevronDownIcon>> = {\n string: TypeIcon,\n number: HashIcon,\n boolean: ToggleLeftIcon,\n date: CalendarIcon,\n array: ListIcon,\n object: BracesIcon,\n relation: Link2Icon,\n enum: ListChecksIcon,\n keyValue: TableIcon\n };\n protected readonly typeColorMap: Partial<Record<string, string>> = {\n string: 'text-success',\n number: 'text-warning',\n boolean: 'text-info',\n date: 'text-secondary',\n array: 'text-accent',\n object: 'text-base-content/60',\n relation: 'text-primary',\n enum: 'text-warning',\n keyValue: 'text-accent'\n };\n protected readonly defaultTypeIcon = TypeIcon;\n protected readonly defaultTypeColor = 'text-base-content/40';\n\n readonly nodes = input.required<FieldTreeNode[]>();\n readonly selected = input<string>('');\n readonly placeholder = input<string>('请选择');\n readonly minWidth = input<string>('14rem');\n readonly selectChange = output<string>();\n\n readonly displayValue = computed(() => {\n const sel = this.selected();\n return sel ? getDisplayNamePath(this.nodes(), sel) || sel : this.placeholder();\n });\n\n readonly selectedNode = computed(() => {\n const sel = this.selected();\n return sel ? findNodeByValue(this.nodes(), sel) : null;\n });\n\n readonly visibleItems = computed<FlatItem[]>(() => {\n const filter = this.filterText().toLowerCase().trim();\n const expanded = this.expandedPaths();\n return filter ? buildFilteredItems(this.nodes(), filter) : buildExpandedItems(this.nodes(), expanded, 0);\n });\n\n readonly activeItemId = computed(() => {\n const idx = this._activeIdx();\n if (idx < 0) return null;\n const vis = this.visibleItems();\n return idx < vis.length ? `${this.uid}-item-${vis[idx].node.value}` : null;\n });\n\n constructor() {\n const injector = inject(Injector);\n\n // Signal 初始化必须在 injection context 内(constructor)\n this.keyManager = new ActiveDescendantKeyManager(this.treeItemDirs, injector).withWrap().withHomeAndEnd();\n\n // 同步 key manager 的激活索引到本地 signal(用于 aria-activedescendant)\n this.keyManager.change.pipe(takeUntilDestroyed()).subscribe(idx => this._activeIdx.set(idx));\n\n // 过滤文本变化时,自动高亮第一项\n effect(() => {\n this.filterText();\n untracked(() => {\n setTimeout(() => {\n this.keyManager.setFirstItemActive();\n this._activeIdx.set(this.keyManager.activeItemIndex ?? -1);\n });\n });\n });\n }\n\n onBeforeToggle(event: Event): void {\n const te = event as ToggleEvent;\n if (te.newState === 'open') {\n applyPopoverPosition(this.popoverEl().nativeElement, this.trigger().nativeElement.getBoundingClientRect());\n this.filterText.set('');\n } else {\n this._activeIdx.set(-1);\n this.keyManager.setActiveItem(-1);\n }\n }\n\n onToggle(event: Event): void {\n if ((event as ToggleEvent).newState === 'open') {\n this.filterInput()?.nativeElement.focus();\n setTimeout(() => {\n this.keyManager.setFirstItemActive();\n this._activeIdx.set(this.keyManager.activeItemIndex ?? -1);\n });\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp': {\n event.preventDefault();\n this.keyManager.onKeydown(event);\n this.scrollActiveIntoView();\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n const item = this.visibleItems()[this.keyManager.activeItemIndex ?? -1];\n if (item?.isExpandable && !item.isExpanded) this.toggleExpand(item.node.value);\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n const item = this.visibleItems()[this.keyManager.activeItemIndex ?? -1];\n if (item?.isExpandable && item.isExpanded) this.toggleExpand(item.node.value);\n break;\n }\n case 'Enter': {\n event.preventDefault();\n const item = this.visibleItems()[this.keyManager.activeItemIndex ?? -1];\n if (item) this.onItemClick(item);\n break;\n }\n case 'Escape': {\n event.preventDefault();\n this.popoverEl().nativeElement.hidePopover();\n this.trigger().nativeElement.focus();\n break;\n }\n case 'Tab': {\n this.popoverEl().nativeElement.hidePopover();\n break;\n }\n }\n }\n\n onItemClick(item: FlatItem): void {\n if (item.isExpandable) {\n this.toggleExpand(item.node.value);\n } else {\n this.selectChange.emit(item.node.value);\n this.popoverEl().nativeElement.hidePopover();\n this.trigger().nativeElement.focus();\n }\n }\n /** 追踪函数:使用 value + isExistsOption 避免重复 key */\n protected trackItem(item: FlatItem): string {\n return item.node.isExistsOption ? `${item.node.value}:exists` : item.node.value;\n }\n private scrollActiveIntoView(): void {\n const idx = this.keyManager.activeItemIndex ?? -1;\n const item = this.visibleItems()[idx];\n if (!item) return;\n document.getElementById(`${this.uid}-item-${item.node.value}`)?.scrollIntoView({ block: 'nearest' });\n }\n\n private toggleExpand(value: string): void {\n this.expandedPaths.update(prev => {\n const next = new Set(prev);\n if (next.has(value)) {\n next.delete(value);\n } else {\n next.add(value);\n }\n return next;\n });\n }\n}\n\n// ─── 辅助函数 ───────────────────────────────────────────────────────────────────\n\nfunction buildExpandedItems(nodes: FieldTreeNode[], expanded: Set<string>, depth: number): FlatItem[] {\n const result: FlatItem[] = [];\n for (const node of nodes) {\n const isExpandable = !!node.children?.length;\n const isExpanded = isExpandable && expanded.has(node.value);\n result.push({ node, depth, isExpandable, isExpanded });\n if (isExpanded) {\n result.push(...buildExpandedItems(node.children!, expanded, depth + 1));\n }\n }\n return result;\n}\n\nfunction buildFilteredItems(nodes: FieldTreeNode[], filter: string, depth = 0): FlatItem[] {\n const result: FlatItem[] = [];\n for (const node of nodes) {\n const selfMatches = nodeMatchesFilter(node, filter);\n const isExpandable = !!node.children?.length;\n const childMatches = isExpandable && hasMatchingDescendant(node.children!, filter);\n\n if (selfMatches || childMatches) {\n result.push({ node, depth, isExpandable, isExpanded: isExpandable && childMatches });\n if (isExpandable && (selfMatches || childMatches)) {\n result.push(...buildFilteredItems(node.children!, filter, depth + 1));\n }\n }\n }\n return result;\n}\n\nfunction nodeMatchesFilter(node: FieldTreeNode, filter: string): boolean {\n return (\n node.label.toLowerCase().includes(filter) ||\n node.displayName.toLowerCase().includes(filter) ||\n (node.description?.toLowerCase().includes(filter) ?? false)\n );\n}\n\nfunction hasMatchingDescendant(nodes: FieldTreeNode[], filter: string): boolean {\n return nodes.some(\n n => nodeMatchesFilter(n, filter) || (n.children?.length ? hasMatchingDescendant(n.children, filter) : false)\n );\n}\n\n/** 从树中找到节点(同 rxdb-model 的 findNodeByValue,此处作为 tree-select 内部别名) */\nexport { findNodeByValue };\n","import { buildFieldTree, type FieldMetadata } from '@aiao/rxdb-model';\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { TreeSelectComponent } from '../tree-select/tree-select.component';\n\n/**\n * 字段选择器组件\n *\n * @description\n * 使用 Popover API 展示树形字段结构,支持过滤和嵌套关系字段的展开/折叠。\n * 基于 CDK `ActiveDescendantKeyManager` 提供完整键盘导航和无障碍支持。\n * 不依赖任何第三方 UI 库。\n *\n * 支持两种使用方式:\n * 1. 直接模板使用:监听 `(fieldChange)` output 事件\n * 2. 通过 NgComponentOutlet 注入:传入 `fieldChangeFn` 回调 input\n */\n@Component({\n selector: 'rxdb-field-selector',\n standalone: true,\n imports: [TreeSelectComponent],\n template: `\n <rxdb-tree-select\n [nodes]=\"fieldTree()\"\n [placeholder]=\"placeholder()\"\n [selected]=\"selectedField()\"\n (selectChange)=\"onSelect($event)\"\n minWidth=\"14rem\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FieldSelectorComponent {\n readonly fields = input.required<FieldMetadata[]>();\n readonly selectedField = input<string>('');\n readonly placeholder = input<string>('选择字段');\n\n /** 通过 NgComponentOutlet 注入时使用的回调 input */\n readonly fieldChangeFn = input<((field: string) => void) | undefined>(undefined);\n\n /** 直接模板使用时的 output 事件 */\n readonly fieldChange = output<string>();\n\n readonly fieldTree = computed(() => buildFieldTree(this.fields()));\n\n onSelect(field: string): void {\n this.fieldChange.emit(field);\n this.fieldChangeFn()?.(field);\n }\n}\n","import { applyPopoverPosition, findOptionLabel } from '@aiao/rxdb-model';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n output,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nlet _uid = 0;\n\n/**\n * 基于 Popover API 的下拉选择组件\n *\n * @description\n * 使用浏览器原生 Popover API 渲染选项列表,在 top layer 渲染,\n * 确保在 `overflow: auto/hidden` 容器内也不会被裁剪。\n * 支持关键字过滤、键盘导航(↑↓ 移动、Enter 选中、Escape 关闭)。\n * 打开弹框自动高亮第一项,搜索后也自动高亮第一条结果。\n */\n@Component({\n selector: 'rxdb-popover-select',\n standalone: true,\n imports: [FormsModule],\n template: `\n <button\n class=\"select select-sm text-left\"\n #trigger\n [attr.popovertarget]=\"uid\"\n [style.min-width]=\"minWidth()\"\n type=\"button\"\n >\n {{ currentLabel() }}\n </button>\n <div\n class=\"bg-base-100 rounded-box border-base-300 border shadow-xl\"\n #popoverEl\n [id]=\"uid\"\n [style.min-width]=\"minWidth()\"\n (beforetoggle)=\"onBeforeToggle($event)\"\n (keydown)=\"onKeydown($event)\"\n (toggle)=\"onToggle($event)\"\n popover\n tabindex=\"-1\"\n >\n <div class=\"mb-1 p-2\">\n <input\n class=\"input input-sm w-full\"\n #filterInput\n [attr.aria-activedescendant]=\"activeItemId()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-expanded]=\"true\"\n [ngModel]=\"filterText()\"\n (ngModelChange)=\"filterText.set($event)\"\n aria-autocomplete=\"list\"\n placeholder=\"搜索...\"\n role=\"combobox\"\n type=\"text\"\n />\n </div>\n <ul class=\"menu menu-sm max-h-60 w-full flex-nowrap overflow-y-auto px-2\" [id]=\"listId\" role=\"listbox\">\n @for (option of filteredOptions(); track option.value; let i = $index) {\n <li role=\"none\">\n <button\n class=\"flex w-full items-center text-left text-sm\"\n [attr.aria-selected]=\"option.value === selected()\"\n [class.bg-primary/15]=\"option.value === selected()\"\n [class.font-semibold]=\"option.value === selected()\"\n [class.menu-focus]=\"activeIndex() === i\"\n [id]=\"uid + '-opt-' + option.value\"\n (click)=\"onSelect(option.value)\"\n role=\"option\"\n type=\"button\"\n >\n <span class=\"grow\">{{ option.label }}</span>\n @if (option.value === selected()) {\n <svg\n class=\"text-primary h-3 w-3 shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2.5\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n }\n </button>\n </li>\n } @empty {\n <li class=\"px-3 py-1.5 text-sm opacity-50\">无匹配项</li>\n }\n </ul>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopoverSelectComponent {\n private readonly trigger = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n private readonly popoverEl = viewChild.required<ElementRef<HTMLElement>>('popoverEl');\n private readonly filterInput = viewChild<ElementRef<HTMLInputElement>>('filterInput');\n\n protected readonly uid = `rxdb-ps-${++_uid}`;\n protected readonly listId = `${this.uid}-list`;\n protected readonly filterText = signal('');\n protected readonly activeIndex = signal(0);\n\n readonly options = input.required<ReadonlyArray<{ value: string; label: string }>>();\n readonly selected = input<string>('');\n readonly placeholder = input<string>('请选择');\n readonly minWidth = input<string>('8rem');\n\n readonly selectChange = output<string>();\n\n readonly currentLabel = computed(() => findOptionLabel(this.options(), this.selected(), this.placeholder()));\n\n readonly filteredOptions = computed(() => {\n const filter = this.filterText().toLowerCase().trim();\n if (!filter) return this.options();\n return this.options().filter(opt => opt.label.toLowerCase().includes(filter));\n });\n\n readonly activeItemId = computed(() => {\n const idx = this.activeIndex();\n const opts = this.filteredOptions();\n return idx >= 0 && idx < opts.length ? `${this.uid}-opt-${opts[idx].value}` : null;\n });\n\n constructor() {\n effect(() => {\n this.filteredOptions();\n untracked(() => this.activeIndex.set(0));\n });\n }\n\n onBeforeToggle(event: Event): void {\n const te = event as ToggleEvent;\n if (te.newState === 'open') {\n applyPopoverPosition(this.popoverEl().nativeElement, this.trigger().nativeElement.getBoundingClientRect());\n this.filterText.set('');\n }\n }\n\n onToggle(event: Event): void {\n if ((event as ToggleEvent).newState === 'open') {\n this.filterInput()?.nativeElement.focus();\n this.activeIndex.set(0);\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n const opts = this.filteredOptions();\n const len = opts.length;\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n if (len > 0) {\n this.activeIndex.update(i => (i + 1) % len);\n this.scrollActiveIntoView();\n }\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n if (len > 0) {\n this.activeIndex.update(i => (i - 1 + len) % len);\n this.scrollActiveIntoView();\n }\n break;\n }\n case 'Enter': {\n event.preventDefault();\n const opt = opts[this.activeIndex()];\n if (opt) this.onSelect(opt.value);\n break;\n }\n case 'Escape': {\n event.preventDefault();\n this.popoverEl().nativeElement.hidePopover();\n this.trigger().nativeElement.focus();\n break;\n }\n case 'Tab': {\n this.popoverEl().nativeElement.hidePopover();\n break;\n }\n }\n }\n\n onSelect(value: string): void {\n this.selectChange.emit(value);\n this.popoverEl().nativeElement.hidePopover();\n this.trigger().nativeElement.focus();\n }\n\n private scrollActiveIntoView(): void {\n const opts = this.filteredOptions();\n const opt = opts[this.activeIndex()];\n if (!opt) return;\n document.getElementById(`${this.uid}-opt-${opt.value}`)?.scrollIntoView({ block: 'nearest' });\n }\n}\n","import { getDefaultOperatorRegistry, type FieldMetadata, type PropertyType } from '@aiao/rxdb-model';\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { PopoverSelectComponent } from '../popover-select/popover-select.component';\n\n/**\n * 操作符选择器组件\n *\n * @description\n * 基于 {@link PopoverSelectComponent} 提供操作符选择功能,\n * 自动根据字段类型或元数据筛选可用操作符。\n * 支持搜索过滤和键盘导航。\n *\n * 支持两种使用方式:\n * 1. 直接模板使用:监听 `(operatorChange)` output 事件\n * 2. 通过 NgComponentOutlet 注入:传入 `operatorChangeFn` 回调 input\n */\n@Component({\n selector: 'rxdb-operator-selector',\n standalone: true,\n imports: [PopoverSelectComponent],\n template: `\n <rxdb-popover-select\n [options]=\"operatorOptions()\"\n [selected]=\"selectedOperator()\"\n (selectChange)=\"onOperatorChange($event)\"\n minWidth=\"8rem\"\n placeholder=\"选择操作符\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class OperatorSelectorComponent {\n private readonly registry = getDefaultOperatorRegistry();\n\n readonly operatorOptions = computed(() => {\n const metadata = this.fieldMetadata();\n const operators =\n metadata ? this.registry.getForField(metadata) : this.registry.getForType(this.fieldType() as PropertyType);\n return operators.map(op => ({ value: op.key, label: op.label }));\n });\n\n readonly fieldMetadata = input<FieldMetadata | undefined>(undefined);\n readonly fieldType = input<string>('string');\n readonly selectedOperator = input<string>('=');\n\n /** 通过 NgComponentOutlet 注入时使用的回调 input */\n readonly operatorChangeFn = input<((op: string) => void) | undefined>(undefined);\n\n /** 直接模板使用时的 output 事件 */\n readonly operatorChange = output<string>();\n\n onOperatorChange(op: string): void {\n this.operatorChange.emit(op);\n this.operatorChangeFn()?.(op);\n }\n}\n","import {\n getDefaultValueForType as coreGetDefaultValue,\n getInputType as coreGetInputType,\n parseCommaSeparatedInput,\n UUID_RE,\n type FieldMetadata,\n type QueryBuilderRuleGroup\n} from '@aiao/rxdb-model';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n computed,\n effect,\n inject,\n Injector,\n input,\n OnDestroy,\n OnInit,\n output,\n signal,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PopoverSelectComponent } from '../popover-select/popover-select.component';\n\n/**\n * 值输入组件\n *\n * @description\n * 根据字段类型和操作符显示合适的输入控件:\n * - string: 文本输入框\n * - number: 数字输入框\n * - boolean: 切换开关\n * - date: 日期选择器\n * - enum: 下拉选择器\n * - array: 逗号分隔的文本输入\n * - range: 范围输入(双输入框或范围选择器)\n * - null/notNull 操作符: 无输入\n * - exists/notExists 操作符: 子查询构建器\n */\n@Component({\n selector: 'rxdb-value-input',\n standalone: true,\n imports: [CommonModule, PopoverSelectComponent],\n template: `\n @switch (inputType()) {\n @case ('none') {\n <span class=\"text-base-content/50 px-2 text-sm italic\">无需输入值</span>\n }\n @case ('uuid') {\n <div\n [attr.data-tip]=\"uuidError() || errorMessage() || null\"\n [class.tooltip-top]=\"!!uuidError() || hasError()\"\n [class.tooltip]=\"!!uuidError() || hasError()\"\n >\n <input\n class=\"input input-sm font-mono\"\n [class.input-error]=\"hasError() || !!uuidError()\"\n [value]=\"currentValue()\"\n (input)=\"onUuidChange($any($event.target).value)\"\n placeholder=\"输入 UUID\"\n style=\"min-width: 16rem\"\n type=\"text\"\n />\n </div>\n }\n @case ('subquery') {\n <div class=\"subquery-container w-full\">\n @if (!relationFields() || relationFields().length === 0) {\n <span class=\"text-base-content/50 px-2 text-sm italic\">存在/不存在(无子条件)</span>\n } @else {\n <div #subqueryContainer></div>\n }\n </div>\n }\n @case ('boolean') {\n <input\n class=\"toggle toggle-sm\"\n [checked]=\"!!currentValue()\"\n (change)=\"onValueChange($any($event.target).checked)\"\n type=\"checkbox\"\n />\n }\n @case ('enum') {\n <rxdb-popover-select\n [options]=\"enumSelectOptions()\"\n [selected]=\"currentValue()?.toString() ?? ''\"\n (selectChange)=\"onEnumSelect($event)\"\n minWidth=\"12rem\"\n placeholder=\"选择值\"\n />\n }\n @case ('enum-array') {\n <div [attr.data-tip]=\"errorMessage() || null\" [class.tooltip-top]=\"hasError()\" [class.tooltip]=\"hasError()\">\n <select\n class=\"select select-sm\"\n [class.select-error]=\"hasError()\"\n (change)=\"onEnumArrayChange($event)\"\n multiple\n style=\"min-width: 12rem; min-height: 6rem\"\n >\n @for (opt of enumOptions(); track opt) {\n <option [selected]=\"isEnumSelected(opt)\" [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n </div>\n }\n @case ('range') {\n @if (fieldType() === 'date') {\n <div\n class=\"flex items-center gap-2\"\n [attr.data-tip]=\"errorMessage() || null\"\n [class.tooltip-top]=\"hasError()\"\n [class.tooltip]=\"hasError()\"\n >\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"dateRangeStart()\"\n (change)=\"onDateRangeStartChange($any($event.target).value)\"\n style=\"width: 9rem\"\n type=\"date\"\n />\n <span class=\"text-base-content/50\">至</span>\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"dateRangeEnd()\"\n (change)=\"onDateRangeEndChange($any($event.target).value)\"\n style=\"width: 9rem\"\n type=\"date\"\n />\n </div>\n } @else {\n <div\n class=\"flex items-center gap-2\"\n [attr.data-tip]=\"errorMessage() || null\"\n [class.tooltip-top]=\"hasError()\"\n [class.tooltip]=\"hasError()\"\n >\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"rangeMin() ?? ''\"\n (input)=\"onRangeMinChange($any($event.target).value)\"\n placeholder=\"最小值\"\n style=\"width: 7rem\"\n type=\"number\"\n />\n <span class=\"text-base-content/50\">至</span>\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"rangeMax() ?? ''\"\n (input)=\"onRangeMaxChange($any($event.target).value)\"\n placeholder=\"最大值\"\n style=\"width: 7rem\"\n type=\"number\"\n />\n </div>\n }\n }\n @case ('number') {\n <div [attr.data-tip]=\"errorMessage() || null\" [class.tooltip-top]=\"hasError()\" [class.tooltip]=\"hasError()\">\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"currentValue() ?? ''\"\n (input)=\"onNumberInputChange($any($event.target).value)\"\n placeholder=\"输入数值\"\n type=\"number\"\n />\n </div>\n }\n @case ('date') {\n <div [attr.data-tip]=\"errorMessage() || null\" [class.tooltip-top]=\"hasError()\" [class.tooltip]=\"hasError()\">\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"currentDateStr()\"\n (change)=\"onNativeDateChange($any($event.target).value)\"\n style=\"width: 10rem\"\n type=\"date\"\n />\n </div>\n }\n @case ('array') {\n <div [attr.data-tip]=\"errorMessage() || null\" [class.tooltip-top]=\"hasError()\" [class.tooltip]=\"hasError()\">\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"arrayInputValue()\"\n (input)=\"onArrayInputChange($any($event.target).value)\"\n placeholder=\"输入多个值,用逗号分隔\"\n style=\"width: 100%; min-width: 12rem\"\n type=\"text\"\n />\n </div>\n }\n @default {\n <div [attr.data-tip]=\"errorMessage() || null\" [class.tooltip-top]=\"hasError()\" [class.tooltip]=\"hasError()\">\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"currentValue() ?? ''\"\n (input)=\"onValueChange($any($event.target).value)\"\n placeholder=\"输入值\"\n style=\"width: 100%; min-width: 12rem\"\n type=\"text\"\n />\n </div>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ValueInputComponent implements OnInit, OnDestroy {\n private previousInputType: string | null = null;\n private subqueryComponentRef?: ComponentRef<any>;\n private subquerySubscription?: Subscription;\n private subqueryLoading = false;\n private readonly injector = inject(Injector);\n\n /** UUID 格式校验错误(基于 currentValue 派生,inputType 不是 uuid 时自动为空) */\n readonly uuidError = computed(() => {\n if (this.inputType() !== 'uuid') return '';\n const val = String(this.currentValue() ?? '').trim();\n return val && !UUID_RE.test(val) ? '请输入合法的 UUID 格式' : '';\n });\n\n @ViewChild('subqueryContainer', { read: ViewContainerRef })\n subqueryContainer?: ViewContainerRef;\n\n readonly fieldType = input<string>('string');\n readonly operator = input<string>('=');\n readonly value = input<unknown>('');\n readonly enumOptions = input<unknown[]>([]);\n readonly relationFields = input<FieldMetadata[]>([]);\n readonly where = input<QueryBuilderRuleGroup<Record<string, unknown>>>();\n\n readonly valueChange = output<unknown>();\n readonly whereChange = output<QueryBuilderRuleGroup<Record<string, unknown>> | undefined>();\n\n readonly errorMessage = input<string>('');\n readonly hasError = computed(() => !!this.errorMessage());\n\n readonly valueChangeFn = input<((value: unknown) => void) | undefined>(undefined);\n readonly whereChangeFn = input<\n ((where: QueryBuilderRuleGroup<Record<string, unknown>> | undefined) => void) | undefined\n >(undefined);\n\n /** 信号状态 —— 替代原先的可变类属性 */\n readonly currentValue = signal<any>('');\n readonly rangeMin = signal<any>(null);\n readonly rangeMax = signal<any>(null);\n readonly arrayInputValue = signal('');\n readonly currentDateStr = signal('');\n readonly dateRangeStart = signal('');\n readonly dateRangeEnd = signal('');\n\n readonly inputType = computed(() => coreGetInputType(this.fieldType(), this.operator(), this.enumOptions()));\n readonly enumSelectOptions = computed(() =>\n this.enumOptions().map(opt => ({ value: String(opt), label: String(opt) }))\n );\n\n constructor() {\n effect(() => {\n const currentType = this.inputType();\n if (this.previousInputType !== null && this.previousInputType !== currentType) {\n const defaultVal = coreGetDefaultValue(currentType);\n this.currentValue.set(defaultVal);\n this.valueChange.emit(defaultVal);\n this.valueChangeFn()?.(defaultVal);\n }\n this.previousInputType = currentType;\n });\n\n afterNextRender(\n () => {\n effect(\n () => {\n const isSubquery = this.inputType() === 'subquery';\n const hasRelationFields = this.relationFields().length > 0;\n if (isSubquery && hasRelationFields) {\n this.loadSubqueryComponent();\n } else {\n this.destroySubqueryComponent();\n }\n },\n { injector: this.injector }\n );\n },\n { injector: this.injector }\n );\n }\n\n ngOnDestroy(): void {\n this.destroySubqueryComponent();\n }\n\n ngOnInit(): void {\n const value = this.value();\n if (this.inputType() === 'range' && Array.isArray(value)) {\n if (this.fieldType() === 'date') {\n this.dateRangeStart.set(String(value[0] ?? ''));\n this.dateRangeEnd.set(String(value[1] ?? ''));\n } else {\n this.rangeMin.set(value[0]);\n this.rangeMax.set(value[1]);\n }\n } else if (this.inputType() === 'array' && Array.isArray(value)) {\n this.arrayInputValue.set(value.join(', '));\n } else if (this.inputType() === 'enum-array') {\n this.currentValue.set(Array.isArray(value) ? value : []);\n } else if (this.inputType() === 'date') {\n this.currentDateStr.set(typeof value === 'string' ? value : '');\n } else if (this.inputType() === 'uuid') {\n this.currentValue.set(typeof value === 'string' ? value : '');\n } else {\n this.currentValue.set(this.fieldType() === 'number' && value === '' ? null : value);\n }\n }\n\n /** 通用值变更(string / boolean…) */\n onValueChange(value: unknown): void {\n this.currentValue.set(value);\n this.valueChange.emit(value);\n this.valueChangeFn()?.(value);\n }\n\n /** UUID 值变更(带格式校验) */\n onUuidChange(value: string): void {\n this.currentValue.set(value);\n const trimmed = value.trim();\n this.valueChange.emit(trimmed.toLowerCase() || '');\n this.valueChangeFn()?.(trimmed.toLowerCase() || '');\n }\n\n /** 数字输入变更 */\n onNumberInputChange(value: string): void {\n const num = value === '' ? null : Number(value);\n this.currentValue.set(num);\n this.valueChange.emit(num);\n this.valueChangeFn()?.(num);\n }\n\n /** 枚举多选变更 */\n onEnumArrayChange(event: Event): void {\n const select = event.target as HTMLSelectElement;\n const selected = Array.from(select.selectedOptions).map(o => o.value);\n this.currentValue.set(selected);\n this.valueChange.emit(selected);\n this.valueChangeFn()?.(selected);\n }\n\n /** 枚举选项是否选中 */\n isEnumSelected(opt: unknown): boolean {\n const val = this.currentValue();\n return Array.isArray(val) && val.includes(opt);\n }\n\n /** 枚举值选中(来自 PopoverSelectComponent) */\n onEnumSelect(value: string): void {\n this.currentValue.set(value);\n this.valueChange.emit(value);\n this.valueChangeFn()?.(value);\n }\n\n /** 原生日期输入变更 */\n onNativeDateChange(value: string): void {\n this.currentDateStr.set(value);\n this.valueChange.emit(value || '');\n this.valueChangeFn()?.(value || '');\n }\n\n /** 日期范围起始变更 */\n onDateRangeStartChange(value: string): void {\n this.dateRangeStart.set(value);\n this.onDateRangePartChange();\n }\n\n /** 日期范围结束变更 */\n onDateRangeEndChange(value: string): void {\n this.dateRangeEnd.set(value);\n this.onDateRangePartChange();\n }\n\n onDateRangePartChange(): void {\n const start = this.dateRangeStart();\n const end = this.dateRangeEnd();\n if (start && end) {\n this.valueChange.emit([start, end]);\n this.valueChangeFn()?.([start, end]);\n } else {\n this.valueChange.emit([]);\n this.valueChangeFn()?.([]);\n }\n }\n\n /** 范围最小值变更 */\n onRangeMinChange(value: string): void {\n this.rangeMin.set(value === '' ? null : Number(value));\n this.onRangeChange();\n }\n\n /** 范围最大值变更 */\n onRangeMaxChange(value: string): void {\n this.rangeMax.set(value === '' ? null : Number(value));\n this.onRangeChange();\n }\n\n onRangeChange(): void {\n const min = this.rangeMin();\n const max = this.rangeMax();\n if (min != null && max != null) {\n this.valueChange.emit([min, max]);\n this.valueChangeFn()?.([min, max]);\n } else {\n this.valueChange.emit([]);\n this.valueChangeFn()?.([]);\n }\n }\n\n /** 数组输入值变更(逗号分隔字符串) */\n onArrayInputChange(value: string): void {\n this.arrayInputValue.set(value);\n const result = parseCommaSeparatedInput(value, this.fieldType());\n this.valueChange.emit(result);\n this.valueChangeFn()?.(result);\n }\n\n handleWhereChange(where: { combinator: 'and' | 'or'; rules: unknown[] } | undefined): void {\n const typedWhere = where as QueryBuilderRuleGroup<Record<string, unknown>> | undefined;\n this.whereChange.emit(typedWhere);\n this.whereChangeFn()?.(typedWhere);\n }\n\n private async loadSubqueryComponent(): Promise<void> {\n if (!this.subqueryContainer || this.subqueryComponentRef || this.subqueryLoading) return;\n this.subqueryLoading = true;\n try {\n const { SubqueryBuilderComponent } = await import('../subquery-builder/subquery-builder.component');\n this.subqueryComponentRef = this.subqueryContainer.createComponent(SubqueryBuilderComponent);\n this.subqueryComponentRef.setInput('fields', this.relationFields());\n this.subqueryComponentRef.setInput('initialQuery', this.where());\n this.subquerySubscription = this.subqueryComponentRef.instance.queryChange.subscribe(\n (query: { combinator: 'and' | 'or'; rules: unknown[] } | undefined) => {\n this.handleWhereChange(query);\n }\n );\n } catch (error) {\n console.error('[ValueInput] Failed to load SubqueryBuilderComponent:', error);\n } finally {\n this.subqueryLoading = false;\n }\n }\n\n private destroySubqueryComponent(): void {\n this.subquerySubscription?.unsubscribe();\n this.subquerySubscription = undefined;\n if (this.subqueryComponentRef) {\n this.subqueryComponentRef.destroy();\n this.subqueryComponentRef = undefined;\n }\n }\n}\n","import { FieldSelectorComponent } from '../field-selector/field-selector.component';\nimport { OperatorSelectorComponent } from '../operator-selector/operator-selector.component';\nimport { ValueInputComponent } from '../value-input/value-input.component';\nimport type { QueryBuilderTheme } from './query-builder-theme.token';\n\n/**\n * 默认主题(原生 HTML 实现)\n *\n * @description\n * 不依赖任何第三方 UI 库,使用标准 HTML 表单元素。\n * 适合轻量级场景或作为自定义主题的参考实现。\n *\n * @example\n * ```typescript\n * // 默认主题无需额外配置,开箱即用\n * imports: [QueryBuilderComponent]\n * ```\n */\nexport const DEFAULT_QUERY_BUILDER_THEME: QueryBuilderTheme = {\n fieldSelector: FieldSelectorComponent,\n operatorSelector: OperatorSelectorComponent,\n valueInput: ValueInputComponent\n};\n","import { InjectionToken, Provider, Type } from '@angular/core';\n\n/**\n * QueryBuilder 主题接口\n *\n * @description\n * 定义各 UI 插槽的组件类型,允许替换为不同的 UI 库实现\n *\n * 主题组件需遵循以下约定:\n * - 接受标准 signal inputs(字段、操作符、值等)\n * - 同时支持 output() 事件和可选的 onXxx 回调 input(供 NgComponentOutlet 使用)\n */\nexport interface QueryBuilderTheme {\n /** 字段选择器组件 */\n fieldSelector: Type<unknown>;\n /** 操作符选择器组件 */\n operatorSelector: Type<unknown>;\n /** 值输入组件 */\n valueInput: Type<unknown>;\n}\n\n/**\n * QueryBuilder 主题注入 Token\n *\n * @example\n * ```typescript\n * // 在应用根模块提供自定义主题\n * providers: [provideQueryBuilderTheme(QUERY_BUILDER_XXX_THEME)]\n * ```\n */\nexport const QUERY_BUILDER_THEME = new InjectionToken<QueryBuilderTheme>('QUERY_BUILDER_THEME');\n\n/**\n * 提供自定义主题\n */\nexport function provideQueryBuilderTheme(theme: QueryBuilderTheme): Provider {\n return { provide: QUERY_BUILDER_THEME, useValue: theme };\n}\n","import type { FieldMetadata, QueryBuilderRuleGroup, UIRule, ValidationError } from '@aiao/rxdb-model';\nimport { CommonModule, NgComponentOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked\n} from '@angular/core';\nimport { DEFAULT_QUERY_BUILDER_THEME } from '../theme/default-query-builder-theme';\nimport { QUERY_BUILDER_THEME } from '../theme/query-builder-theme.token';\n\n/**\n * 带 where 子查询的规则类型\n */\ntype UIRuleWithWhere = UIRule & {\n where?: QueryBuilderRuleGroup<Record<string, unknown>>;\n};\n\n/**\n * 单条查询规则组件\n *\n * @description\n * 显示一条查询规则的编辑界面:\n * - 字段选择器\n * - 操作符选择器\n * - 值输入框\n * - 删除按钮\n */\n@Component({\n selector: 'rxdb-query-rule',\n standalone: true,\n imports: [CommonModule, NgComponentOutlet],\n template: `\n <div class=\"rxdb-query-rule group flex flex-col rounded p-1\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <ng-container [ngComponentOutlet]=\"theme.fieldSelector\" [ngComponentOutletInputs]=\"fieldSelectorInputs()\" />\n <ng-container\n [ngComponentOutlet]=\"theme.operatorSelector\"\n [ngComponentOutletInputs]=\"operatorSelectorInputs()\"\n />\n @if (isExistsOperator()) {\n @if (!subqueryVisible()) {\n <button class=\"btn btn-ghost btn-xs\" (click)=\"onAddSubcondition()\" title=\"添加子条件\" type=\"button\">\n + 子条件(可选)\n </button>\n }\n } @else if (!isNoValueOperator()) {\n <ng-container [ngComponentOutlet]=\"theme.valueInput\" [ngComponentOutletInputs]=\"valueInputInputs()\" />\n }\n <button\n class=\"btn btn-ghost btn-xs btn-square text-base-content/30 hover:text-error ml-auto\"\n (click)=\"onRemove()\"\n title=\"删除条件\"\n type=\"button\"\n >\n ✕\n </button>\n </div>\n @if (isExistsOperator() && subqueryVisible()) {\n <ng-container [ngComponentOutlet]=\"theme.valueInput\" [ngComponentOutletInputs]=\"valueInputInputs()\" />\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QueryRuleComponent {\n private readonly existsOperators = new Set(['exists', 'notExists']);\n private readonly noValueOperators = new Set(['null', 'notNull']);\n\n /** 注入的主题(回退到默认主题) */\n protected readonly theme = inject(QUERY_BUILDER_THEME, { optional: true }) ?? DEFAULT_QUERY_BUILDER_THEME;\n\n readonly rule = input.required<UIRuleWithWhere>();\n readonly fields = input.required<FieldMetadata[]>();\n readonly errors = input<ValidationError[]>([]);\n\n readonly update = output<{ id: string; updates: Partial<UIRuleWithWhere> }>();\n readonly remove = output<void>();\n\n readonly fieldAsString = computed(() => this.rule().field);\n readonly ruleErrors = computed(() => {\n const seen = new Set<string>();\n return this.errors().filter(e => {\n if (e.field !== this.rule().field) return false;\n if (seen.has(e.message)) return false;\n seen.add(e.message);\n return true;\n });\n });\n readonly errorTooltip = computed(() =>\n this.ruleErrors()\n .map(e => e.message)\n .join(' | ')\n );\n readonly isExistsOperator = computed(() => this.existsOperators.has(this.rule().operator));\n readonly isNoValueOperator = computed(() => this.noValueOperators.has(this.rule().operator));\n\n /** 子查询面板是否展开(已有 where 规则时自动展开) */\n readonly showSubquery = signal(false);\n\n /**\n * 当规则的 where 已有内容时自动展开。\n * 使用 computed 包装监听 rule().where,在显示按钮前检查。\n */\n readonly subqueryVisible = computed(() => {\n const where = this.rule().where;\n if (where && where.rules && where.rules.length > 0) {\n return true;\n }\n return this.showSubquery();\n });\n\n readonly currentField = computed(() => {\n const fieldName = this.rule().field;\n return this.fields().find(f => f.name === fieldName);\n });\n\n readonly currentFieldType = computed(() => this.currentField()?.type ?? 'string');\n readonly currentEnumOptions = computed(() => this.currentField()?.enum ?? []);\n\n /** 当前字段的关系目标实体字段列表 */\n readonly currentRelationFields = computed(() => {\n return this.currentField()?.relationFields ?? [];\n });\n\n /** 规则的 where 子查询 */\n readonly ruleWhere = computed(() => this.rule().where);\n\n /** NgComponentOutlet inputs:字段选择器(fieldChangeCb 是 lazy 引用,声明顺序不影响运行时)*/\n readonly fieldSelectorInputs = computed(() => ({\n fields: this.fields(),\n selectedField: this.fieldAsString(),\n fieldChangeFn: this.fieldChangeCb\n }));\n\n /** NgComponentOutlet inputs:操作符选择器 */\n readonly operatorSelectorInputs = computed(() => ({\n fieldMetadata: this.currentField(),\n fieldType: this.currentFieldType(),\n selectedOperator: this.rule().operator,\n operatorChangeFn: this.operatorChangeCb\n }));\n\n /** NgComponentOutlet inputs:值输入 */\n readonly valueInputInputs = computed(() => ({\n fieldType: this.currentFieldType(),\n operator: this.rule().operator,\n value: this.rule().value,\n enumOptions: this.currentEnumOptions(),\n relationFields: this.currentRelationFields(),\n where: this.ruleWhere(),\n errorMessage: this.errorTooltip(),\n valueChangeFn: this.valueChangeCb,\n whereChangeFn: this.whereChangeCb\n }));\n\n /** 子条件清空/全部删除时自动收起面板并恢复 +子条件 按钮 */\n constructor() {\n effect(() => {\n const where = this.rule().where;\n const hasRules = where && where.rules && where.rules.length > 0;\n if (!hasRules) {\n untracked(() => this.showSubquery.set(false));\n }\n });\n }\n\n // === 公有方法 ===\n /** 字段变更 */\n onFieldChange(fieldName: string): void {\n const field = this.fields().find(f => f.name === fieldName);\n this.update.emit({\n id: this.rule().id,\n updates: {\n field: fieldName,\n operator:\n field?.isRelation ? 'exists'\n : field?.type === 'keyValue' ? 'null'\n : '=',\n value: field?.type === 'boolean' ? false : '',\n where: undefined // 重置子查询\n }\n });\n }\n\n /** 添加子条件:展开面板并创建一条默认子规则 */\n onAddSubcondition(): void {\n this.showSubquery.set(true);\n const relationFields = this.currentRelationFields();\n const firstField = relationFields[0];\n if (firstField) {\n const where: QueryBuilderRuleGroup<Record<string, unknown>> = {\n id: '',\n combinator: 'and',\n rules: [\n {\n id: '',\n field: firstField.name,\n operator:\n firstField.isRelation ? 'exists'\n : firstField.type === 'keyValue' ? 'null'\n : '=',\n value: firstField.type === 'boolean' ? false : ''\n }\n ]\n };\n this.update.emit({ id: this.rule().id, updates: { where } });\n }\n }\n\n /** 操作符变更 */\n onOperatorChange(operator: string): void {\n const updates: Partial<UIRuleWithWhere> = { operator };\n if (this.existsOperators.has(operator) || this.noValueOperators.has(operator)) {\n updates.value = null;\n }\n if (!this.existsOperators.has(operator)) {\n updates.where = undefined;\n this.showSubquery.set(false);\n }\n this.update.emit({ id: this.rule().id, updates });\n }\n\n /** 值变更 */\n onValueChange(value: unknown): void {\n this.update.emit({\n id: this.rule().id,\n updates: { value }\n });\n }\n\n /** 子查询条件变更 */\n onWhereChange(where: QueryBuilderRuleGroup<Record<string, unknown>> | undefined): void {\n this.update.emit({\n id: this.rule().id,\n updates: { where }\n });\n }\n\n /** 删除规则 */\n onRemove(): void {\n this.remove.emit();\n }\n\n // === 私有 callback 字段(computed signal 是懒求值的,this.onXxx 在调用时已初始化)===\n private readonly fieldChangeCb = (field: string) => this.onFieldChange(field);\n private readonly operatorChangeCb = (op: string) => this.onOperatorChange(op);\n private readonly valueChangeCb = (value: unknown) => this.onValueChange(value);\n private readonly whereChangeCb = (where: QueryBuilderRuleGroup<Record<string, unknown>> | undefined) =>\n this.onWhereChange(where);\n}\n","import type { FieldMetadata, UIRule, ValidationError } from '@aiao/rxdb-model';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\nimport { QueryRuleComponent } from '../query-rule/query-rule.component';\n\n/**\n * UI 规则组(宽松类型)\n */\nexport interface UIRuleGroup {\n id: string;\n combinator: 'and' | 'or';\n rules: Array<UIRule | UIRuleGroup>;\n}\n\nexport type QueryDropMode = 'before' | 'after' | 'into';\n\nexport interface QueryDragDropState {\n draggedItemId: string | null;\n targetItemId: string | null;\n dropMode: QueryDropMode | null;\n isValidTarget: boolean;\n depth?: number;\n}\n\nexport class QueryDragDropHandler {\n readonly state = signal<QueryDragDropState>({\n draggedItemId: null,\n targetItemId: null,\n dropMode: null,\n isValidTarget: false\n });\n\n constructor(private readonly moveItemFn: (itemId: string, targetGroupId: string, targetIndex: number) => void) {}\n\n start(itemId: string): void {\n this.state.set({ draggedItemId: itemId, targetItemId: null, dropMode: null, isValidTarget: false });\n }\n\n over(targetItemId: string, dropMode: QueryDropMode, isValid: boolean, depth: number): void {\n this.state.update(current => {\n if (current.depth !== undefined && depth < current.depth) return current;\n return { ...current, targetItemId, dropMode, isValidTarget: isValid, depth };\n });\n }\n\n leave(): void {\n this.state.update(s => ({ ...s, targetItemId: null, dropMode: null, isValidTarget: false, depth: undefined }));\n }\n\n drop(itemId: string, targetGroupId: string, targetIndex: number): void {\n try {\n this.moveItemFn(itemId, targetGroupId, targetIndex);\n } catch {\n // 服务层拒绝(如循环嵌套),静默忽略\n }\n this.reset();\n }\n\n end(): void {\n this.reset();\n }\n\n private reset(): void {\n this.state.set({ draggedItemId: null, targetItemId: null, dropMode: null, isValidTarget: false });\n }\n}\n\nfunction calculateDropMode(clientY: number, rect: DOMRect, isGroup: boolean): QueryDropMode {\n const ratio = (clientY - rect.top) / rect.height;\n if (isGroup) {\n if (ratio < 0.25) return 'before';\n if (ratio > 0.75) return 'after';\n return 'into';\n }\n return ratio < 0.5 ? 'before' : 'after';\n}\n\n/**\n * 查询规则组组件(递归)\n *\n * @description\n * 显示一组查询规则,支持:\n * - AND/OR 切换(Teable 风格:行内 conjunction 前缀)\n * - 添加规则/子组\n * - 删除组\n * - 递归嵌套显示\n */\n@Component({\n selector: 'rxdb-query-group',\n standalone: true,\n imports: [CommonModule, QueryRuleComponent],\n template: `\n <div class=\"rxdb-query-group border-base-300 my-1 rounded-lg border p-2\" [class.bg-base-200]=\"depth() % 2 === 1\">\n <!-- 组合器 + 操作按钮(同一行) -->\n <div class=\"flex items-center gap-2\" [class.mb-2]=\"!collapsed()\">\n <div class=\"join\">\n <button\n class=\"btn btn-xs join-item\"\n [class.btn-ghost]=\"group().combinator !== 'and'\"\n [class.btn-primary]=\"group().combinator === 'and'\"\n (click)=\"toggleCombinator('and')\"\n type=\"button\"\n >\n AND\n </button>\n <button\n class=\"btn btn-xs join-item\"\n [class.btn-ghost]=\"group().combinator !== 'or'\"\n [class.btn-primary]=\"group().combinator === 'or'\"\n (click)=\"toggleCombinator('or')\"\n type=\"button\"\n >\n OR\n </button>\n </div>\n\n @if (allowCollapse()) {\n <button\n class=\"btn btn-ghost btn-xs btn-square\"\n [title]=\"collapsed() ? '展开' : '收起'\"\n (click)=\"toggleCollapse()\"\n type=\"button\"\n >\n <svg\n class=\"h-3 w-3 transition-transform duration-200\"\n [class.-rotate-90]=\"collapsed()\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2.5\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n }\n\n <div class=\"flex-1\"></div>\n\n @if (!collapsed()) {\n <button class=\"btn btn-ghost btn-xs\" (click)=\"onAddRule()\" type=\"button\">+ 条件</button>\n\n @if (canAddGroup()) {\n <button class=\"btn btn-ghost btn-xs\" (click)=\"onAddGroup()\" type=\"button\">+ 分组</button>\n }\n\n @if (depth() > 0) {\n <button\n class=\"btn btn-ghost btn-xs btn-square text-base-content/40 hover:text-error\"\n (click)=\"onRemove()\"\n title=\"删除组\"\n type=\"button\"\n >\n ✕\n </button>\n }\n }\n </div>\n\n <!-- 规则列表 -->\n @if (!collapsed()) {\n <div class=\"space-y-1\">\n @for (item of group().rules; track trackByItem(item); let idx = $index) {\n @if (isRuleGroup(item)) {\n <div\n class=\"rxdb-drag-item\"\n [class.dragging]=\"isDragging(item.id)\"\n [class.drop-invalid]=\"isDropInvalid(item.id)\"\n [class.drop-target-after]=\"isDropTarget(item.id, 'after')\"\n [class.drop-target-before]=\"isDropTarget(item.id, 'before')\"\n [class.drop-target-into]=\"isDropTarget(item.id, 'into')\"\n (dragend)=\"onItemDragEnd()\"\n (dragleave)=\"onItemDragLeave($event)\"\n (dragover)=\"onItemDragOver($event, item, idx, true)\"\n (drop)=\"onItemDrop($event, item, idx, true)\"\n >\n <div class=\"flex items-start gap-1\">\n @if (dragDropHandler()) {\n <span\n class=\"btn btn-ghost btn-xs btn-square text-base-content/30 hover:text-base-content/60 mt-1 cursor-grab\"\n (dragstart)=\"onItemDragStart($event, item)\"\n draggable=\"true\"\n >⠿</span\n >\n }\n <div class=\"min-w-0 flex-1\">\n <rxdb-query-group\n [allowCollapse]=\"allowCollapse()\"\n [depth]=\"depth() + 1\"\n [dragDropHandler]=\"dragDropHandler()\"\n [errors]=\"errors()\"\n [fields]=\"fields()\"\n [group]=\"asRuleGroup(item)\"\n [maxDepth]=\"maxDepth()\"\n (addGroup)=\"addGroup.emit($event)\"\n (addRule)=\"addRule.emit($event)\"\n (removeItem)=\"removeItem.emit($event)\"\n (updateCombinator)=\"updateCombinator.emit($event)\"\n (updateRule)=\"updateRule.emit($event)\"\n />\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"rxdb-drag-item\"\n [class.dragging]=\"isDragging(item.id)\"\n [class.drop-invalid]=\"isDropInvalid(item.id)\"\n [class.drop-target-after]=\"isDropTarget(item.id, 'after')\"\n [class.drop-target-before]=\"isDropTarget(item.id, 'before')\"\n (dragend)=\"onItemDragEnd()\"\n (dragleave)=\"onItemDragLeave($event)\"\n (dragover)=\"onItemDragOver($event, item, idx, false)\"\n (drop)=\"onItemDrop($event, item, idx, false)\"\n >\n <div class=\"flex items-center gap-1\">\n @if (dragDropHandler()) {\n <span\n class=\"btn btn-ghost btn-xs btn-square text-base-content/30 hover:text-base-content/60 cursor-grab\"\n (dragstart)=\"onItemDragStart($event, item)\"\n draggable=\"true\"\n >⠿</span\n >\n }\n <div class=\"min-w-0 flex-1\">\n <rxdb-query-rule\n [errors]=\"errors()\"\n [fields]=\"fields()\"\n [rule]=\"asRule(item)\"\n (remove)=\"onRuleRemove(asRule(item).id)\"\n (update)=\"onRuleUpdate($event)\"\n />\n </div>\n </div>\n </div>\n }\n }\n </div>\n\n <!-- 空状态 -->\n @if (group().rules.length === 0) {\n <div class=\"text-base-content/50 py-2 text-center text-sm select-none\">暂无条件</div>\n }\n }\n </div>\n `,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n .rxdb-drag-item {\n position: relative;\n }\n .rxdb-drag-item.dragging {\n opacity: 0.4;\n }\n .rxdb-drag-item.drop-target-before::before {\n content: '';\n position: absolute;\n top: -2px;\n left: 0;\n right: 0;\n height: 3px;\n background: oklch(0.6 0.2 250);\n border-radius: 2px;\n z-index: 1;\n }\n .rxdb-drag-item.drop-target-after::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 3px;\n background: oklch(0.6 0.2 250);\n border-radius: 2px;\n z-index: 1;\n }\n .rxdb-drag-item.drop-target-into {\n outline: 2px dashed oklch(0.6 0.2 250);\n outline-offset: -2px;\n border-radius: 0.5rem;\n background: oklch(0.6 0.2 250 / 10%);\n }\n .rxdb-drag-item.drop-invalid {\n outline: 2px dashed oklch(0.6 0.2 30);\n outline-offset: -2px;\n border-radius: 0.5rem;\n }\n `\n})\nexport class QueryGroupComponent {\n readonly group = input.required<UIRuleGroup>();\n readonly fields = input.required<FieldMetadata[]>();\n readonly errors = input<ValidationError[]>([]);\n readonly depth = input<number>(0);\n readonly maxDepth = input<number>(5);\n readonly dragDropHandler = input<QueryDragDropHandler>();\n /** 是否允许展开/收起组(默认开启) */\n readonly allowCollapse = input<boolean>(true);\n\n readonly addRule = output<{ parentId: string; rule: Omit<UIRule, 'id'> }>();\n readonly addGroup = output<string>();\n readonly removeItem = output<string>();\n readonly updateRule = output<{ id: string; updates: Partial<UIRule> }>();\n readonly updateCombinator = output<{ id: string; combinator: 'and' | 'or' }>();\n\n /** 当前组是否已折叠 */\n readonly collapsed = signal(false);\n\n /** 是否可以添加子组(未达到最大深度) */\n readonly canAddGroup = computed(() => this.depth() < this.maxDepth() - 1);\n\n /** 切换折叠状态 */\n toggleCollapse(): void {\n this.collapsed.update(v => !v);\n }\n\n /** 切换组合器 */\n toggleCombinator(combinator: 'and' | 'or'): void {\n if (this.group().combinator !== combinator) {\n this.updateCombinator.emit({ id: this.group().id, combinator });\n }\n }\n\n /** 添加规则 */\n onAddRule(): void {\n const firstField = this.fields()[0];\n if (firstField) {\n this.addRule.emit({\n parentId: this.group().id,\n rule: {\n field: firstField.name,\n operator:\n firstField.isRelation ? 'exists'\n : firstField.type === 'keyValue' ? 'null'\n : '=',\n value: firstField.type === 'boolean' ? false : ''\n }\n });\n }\n }\n\n /** 添加子组 */\n onAddGroup(): void {\n this.addGroup.emit(this.group().id);\n }\n\n /** 删除此组 */\n onRemove(): void {\n this.removeItem.emit(this.group().id);\n }\n\n /** 规则更新 */\n onRuleUpdate(event: { id: string; updates: Partial<UIRule> }): void {\n this.updateRule.emit(event);\n }\n\n /** 删除规则 */\n onRuleRemove(id: string): void {\n this.removeItem.emit(id);\n }\n\n /** 类型守卫:是否为规则组 */\n isRuleGroup(item: UIRuleGroup | UIRule): item is UIRuleGroup {\n return 'combinator' in item && 'rules' in item;\n }\n\n /** 类型转换:转为规则组 */\n asRuleGroup(item: UIRuleGroup | UIRule): UIRuleGroup {\n return item as UIRuleGroup;\n }\n\n /** 类型转换:转为规则 */\n asRule(item: UIRuleGroup | UIRule): UIRule {\n return item as UIRule;\n }\n\n /** 追踪函数 */\n trackByItem(item: UIRuleGroup | UIRule): string {\n return item.id;\n }\n\n isDragging(itemId: string): boolean {\n return this.dragDropHandler()?.state().draggedItemId === itemId;\n }\n\n isDropTarget(itemId: string, mode: QueryDropMode): boolean {\n const state = this.dragDropHandler()?.state();\n return !!state && state.targetItemId === itemId && state.dropMode === mode && state.isValidTarget;\n }\n\n isDropInvalid(itemId: string): boolean {\n const state = this.dragDropHandler()?.state();\n return !!state && state.targetItemId === itemId && !state.isValidTarget && !!state.draggedItemId;\n }\n\n onItemDragStart(event: DragEvent, item: UIRule | UIRuleGroup): void {\n const handler = this.dragDropHandler();\n if (!handler || !event.dataTransfer) return;\n event.stopPropagation();\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', item.id);\n const row = (event.target as HTMLElement).closest('.rxdb-drag-item') as HTMLElement | null;\n if (row) {\n const rect = row.getBoundingClientRect();\n event.dataTransfer.setDragImage(row, event.clientX - rect.left, event.clientY - rect.top);\n }\n handler.start(item.id);\n }\n\n onItemDragOver(event: DragEvent, item: UIRule | UIRuleGroup, index: number, isGroup: boolean): void {\n event.preventDefault();\n event.stopPropagation();\n const handler = this.dragDropHandler();\n if (!handler || !event.dataTransfer) return;\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const dropMode = calculateDropMode(event.clientY, rect, isGroup);\n const draggedId = handler.state().draggedItemId;\n const isValid = !!draggedId && draggedId !== item.id && (dropMode !== 'into' || isGroup);\n event.dataTransfer.dropEffect = isValid ? 'move' : 'none';\n handler.over(item.id, dropMode, isValid, this.depth());\n }\n\n onItemDragLeave(event: DragEvent): void {\n const target = event.currentTarget as HTMLElement;\n const related = event.relatedTarget as Node | null;\n if (!related || !target.contains(related)) {\n this.dragDropHandler()?.leave();\n }\n }\n\n onItemDrop(event: DragEvent, targetItem: UIRule | UIRuleGroup, targetIndex: number, isGroup: boolean): void {\n event.preventDefault();\n event.stopPropagation();\n const handler = this.dragDropHandler();\n const state = handler?.state();\n if (!handler || !state?.draggedItemId || !state.isValidTarget || !state.dropMode) {\n handler?.end();\n return;\n }\n const dropMode = state.dropMode;\n let finalTargetGroupId: string;\n let finalTargetIndex: number;\n if (dropMode === 'into' && isGroup) {\n const subGroup = targetItem as UIRuleGroup;\n finalTargetGroupId = subGroup.id;\n const draggedInTarget = subGroup.rules.some(r => r.id === state.draggedItemId);\n finalTargetIndex = draggedInTarget ? subGroup.rules.length - 1 : subGroup.rules.length;\n } else {\n finalTargetGroupId = this.group().id;\n const rules = this.group().rules;\n const draggedIndex = rules.findIndex(r => r.id === state.draggedItemId);\n const isInSameGroup = draggedIndex !== -1;\n let adjustedIndex = targetIndex;\n if (isInSameGroup && draggedIndex < targetIndex) {\n adjustedIndex--;\n }\n finalTargetIndex = dropMode === 'before' ? adjustedIndex : adjustedIndex + 1;\n }\n handler.drop(state.draggedItemId, finalTargetGroupId, finalTargetIndex);\n }\n\n onItemDragEnd(): void {\n this.dragDropHandler()?.end();\n }\n}\n","import {\n createQueryBuilderService,\n type FieldMetadata,\n type QueryBuilderService,\n type SchemaInfo,\n type UIRule,\n type ValidationResult\n} from '@aiao/rxdb-model';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n OnDestroy,\n output,\n Signal,\n viewChild\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { QueryDragDropHandler, QueryGroupComponent, type UIRuleGroup } from '../query-group/query-group.component';\n\n/**\n * RxDB 查询输出格式\n */\nexport interface RxDBQueryOutput<T> {\n combinator: 'and' | 'or';\n rules: Array<RxDBQueryOutput<T> | { field: keyof T & string; operator: string; value: unknown }>;\n}\n\n/**\n * Angular Query Builder 主组件\n *\n * @description\n * 提供可视化的查询条件构建界面,支持:\n * - 传入 SchemaInfo 或 FieldMetadata[] 定义可用字段\n * - 拖拽重排规则和分组\n * - 嵌套分组(最大 5 层)\n * - 实时验证\n *\n * @example\n * ```html\n * <rxdb-query-builder\n * [schema]=\"schema\"\n * (queryChange)=\"onQueryChange($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'rxdb-query-builder',\n standalone: true,\n imports: [CommonModule, QueryGroupComponent],\n template: `\n <div\n class=\"rxdb-query-builder bg-base-100\"\n (keydown)=\"onKeyDown($event)\"\n aria-label=\"查询条件构建器\"\n role=\"search\"\n tabindex=\"0\"\n >\n <div class=\"overflow-y-auto\" #scrollContainer [style.max-height]=\"height()\">\n <!-- 标题栏 -->\n <div class=\"mb-4 flex items-center justify-between\">\n <h3 class=\"text-base\" id=\"query-builder-title\">查询条件</h3>\n <div class=\"flex gap-2\" aria-label=\"查询操作\" role=\"toolbar\">\n @if (hasRules()) {\n <button\n class=\"btn btn-ghost btn-sm\"\n (click)=\"clearAll()\"\n (keydown.enter)=\"clearAll()\"\n aria-label=\"清空所有查询条件\"\n title=\"清空所有查询条件 (Escape)\"\n type=\"button\"\n >\n 清空\n </button>\n }\n </div>\n </div>\n\n <!-- 空状态提示 -->\n @if (!hasRules()) {\n <div class=\"text-base-content/60 py-8 text-center\" aria-live=\"polite\" role=\"status\">\n <div class=\"mb-2 flex justify-center\" aria-hidden=\"true\">\n <svg\n class=\"size-12 opacity-40\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n </div>\n <p class=\"mb-4 min-w-md\">还没有任何查询条件</p>\n <button class=\"btn btn-sm\" (click)=\"addFirstRule()\" aria-label=\"添加第一个条件\" type=\"button\">\n 添加第一个条件\n </button>\n </div>\n } @else {\n <!-- 根规则组 -->\n <rxdb-query-group\n [allowCollapse]=\"enableCollapse()\"\n [depth]=\"0\"\n [dragDropHandler]=\"enableDrag() ? dragDropHandler : undefined\"\n [errors]=\"validationErrors()\"\n [fields]=\"fieldsComputed()\"\n [group]=\"rootGroup()!\"\n [maxDepth]=\"maxDepth()\"\n (addGroup)=\"onAddGroup($event)\"\n (addRule)=\"onAddRule($event)\"\n (removeItem)=\"onRemoveItem($event)\"\n (updateCombinator)=\"onUpdateCombinator($event)\"\n (updateRule)=\"onUpdateRule($event)\"\n role=\"region\"\n />\n }\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QueryBuilderComponent<T extends object> implements OnDestroy {\n private readonly service: QueryBuilderService<T>;\n /** 上次应用的 initialQuery 引用,用于检测是否有新查询需要加载 */\n private lastAppliedInitialQuery: unknown = undefined;\n\n private readonly scrollContainer = viewChild<ElementRef<HTMLElement>>('scrollContainer');\n\n /** 根规则组 Signal */\n private readonly rootGroupSignal: Signal<unknown>;\n\n /** 验证 Signal */\n private readonly validationSignal: Signal<ValidationResult | undefined>;\n\n /**\n * Schema 信息,包含字段定义\n */\n readonly schema = input<SchemaInfo>();\n\n /**\n * 字段列表(直接传入,优先于 schema)\n */\n readonly fields = input<FieldMetadata[]>([]);\n\n /**\n * 初始查询条件(可选)\n */\n readonly initialQuery = input<RxDBQueryOutput<T>>();\n\n /**\n * 最大嵌套层级(默认 5)\n */\n readonly maxDepth = input<number>(5);\n\n /**\n * 内容区域最大高度(超出后滚动),支持任意 CSS 长度值,如 `'400px'`、`'50vh'`\n */\n readonly height = input<string>('80vh');\n\n /**\n * 是否开启拖拽排序功能(默认开启)\n */\n readonly enableDrag = input<boolean>(true);\n\n /**\n * 是否开启分组展开/收起功能(默认开启)\n */\n readonly enableCollapse = input<boolean>(true);\n\n readonly dragDropHandler: QueryDragDropHandler;\n\n /**\n * 查询条件变更事件\n */\n readonly queryChange = output<RxDBQueryOutput<T>>();\n\n /**\n * 验证状态变更事件\n */\n readonly validationChange = output<ValidationResult>();\n\n /** 计算后的字段列表 */\n readonly fieldsComputed: Signal<FieldMetadata[]> = computed(() => {\n // 优先使用直接传入的 fields\n const directFields = this.fields();\n if (directFields && directFields.length > 0) {\n return directFields;\n }\n // 否则从 schema 获取\n const schemaInfo = this.schema();\n return schemaInfo?.fields ?? [];\n });\n\n /** 根规则组 */\n readonly rootGroup: Signal<UIRuleGroup | undefined> = computed(() => {\n return this.rootGroupSignal() as UIRuleGroup | undefined;\n });\n\n /** 验证错误列表 */\n readonly validationErrors = computed(() => {\n const validation = this.validationSignal();\n return validation?.errors ?? [];\n });\n\n /** 是否有规则 */\n readonly hasRules = computed(() => {\n const group = this.rootGroup();\n return group && group.rules.length > 0;\n });\n\n constructor() {\n // 在构造函数中初始化服务(非 reactive context)\n this.service = createQueryBuilderService<T>({\n config: {\n maxNestingLevel: this.maxDepth()\n }\n });\n\n this.dragDropHandler = new QueryDragDropHandler((itemId, targetGroupId, targetIndex) =>\n this.service.moveItem(itemId, targetGroupId, targetIndex)\n );\n\n // 转换 Observable 为 Signal(必须在 reactive context 外部)\n this.rootGroupSignal = toSignal(this.service.rootGroup$, { requireSync: true });\n this.validationSignal = toSignal(this.service.validation$, { initialValue: undefined });\n\n // 监听字段变化并同步到服务\n effect(() => {\n const fields = this.fieldsComputed();\n if (fields.length > 0) {\n this.service.setFields(fields);\n }\n });\n\n // 监听初始查询并加载(引用变化时重新加载,用户修改不影响此 signal 故不会覆盖)\n effect(() => {\n const initial = this.initialQuery();\n if (initial !== undefined && initial !== this.lastAppliedInitialQuery) {\n this.lastAppliedInitialQuery = initial;\n this.service.fromRxDBQuery(initial as any);\n }\n });\n\n // 监听查询变化并发出事件\n effect(() => {\n const group = this.rootGroup();\n if (group) {\n const query = this.service.toRxDBQuery();\n this.queryChange.emit(query as RxDBQueryOutput<T>);\n }\n });\n\n // 监听验证变化并发出事件\n effect(() => {\n const validation = this.validationSignal();\n if (validation) {\n this.validationChange.emit(validation);\n }\n });\n }\n\n /** 销毁服务 */\n ngOnDestroy(): void {\n this.service.destroy();\n }\n\n /** 添加第一个规则 */\n addFirstRule(): void {\n const firstField = this.fieldsComputed()[0];\n if (firstField) {\n this.service.addRule(undefined, {\n field: firstField.name,\n operator:\n firstField.isRelation ? 'exists'\n : firstField.type === 'keyValue' ? 'null'\n : '=',\n value: firstField.type === 'boolean' ? false : ''\n } as any);\n }\n }\n\n /** 清空所有规则 */\n clearAll(): void {\n this.service.clear();\n }\n\n /** 添加规则到指定组 */\n onAddRule(event: { parentId: string; rule: Omit<UIRule, 'id'> }): void {\n this.service.addRule(event.parentId, event.rule as any);\n this.scrollToBottom();\n }\n\n /** 添加子组到指定组 */\n onAddGroup(parentId: string): void {\n this.service.addGroup(parentId);\n this.scrollToBottom();\n }\n\n /** 删除规则或组 */\n onRemoveItem(id: string): void {\n this.service.remove(id);\n }\n\n /** 更新规则 */\n onUpdateRule(event: { id: string; updates: Partial<UIRule> }): void {\n this.service.updateRule(event.id, event.updates as any);\n }\n\n /** 更新组合器 */\n onUpdateCombinator(event: { id: string; combinator: 'and' | 'or' }): void {\n this.service.updateGroupCombinator(event.id, event.combinator);\n }\n\n /** 键盘快捷键处理 */\n onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.hasRules()) {\n event.preventDefault();\n this.clearAll();\n return;\n }\n }\n\n private scrollToBottom(): void {\n setTimeout(() => {\n const el = this.scrollContainer()?.nativeElement;\n el?.scrollTo({ top: el.scrollHeight, behavior: 'smooth' });\n }, 0);\n }\n}\n","import { getEntityMetadata, RelationKind, RxDB, type EntityType, type FindByCursorOptions } from '@aiao/rxdb';\nimport { InfiniteScrollingList } from '@aiao/rxdb-angular';\nimport {\n actionsColumn,\n buildEditableColumns,\n buildFormFields,\n extractFieldsFromMetadata,\n organizeFields,\n parsePropertyColumnValue,\n type BatchChangeItem,\n type CellChangeEvent,\n type EntityFormData,\n type EntityTableRecord,\n type FieldMetadata,\n type FormFieldConfig,\n type ModelInfo,\n type RelatedEntityProvider,\n type ValidationResult\n} from '@aiao/rxdb-model';\nimport { Dialog, DialogRef } from '@angular/cdk/dialog';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ErrorHandler,\n forwardRef,\n HostListener,\n inject,\n Injector,\n input,\n linkedSignal,\n output,\n PLATFORM_ID,\n runInInjectionContext,\n signal,\n TemplateRef,\n viewChild,\n type WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport type { ColumnsDefine } from '@visactor/vtable';\nimport { Funnel, LucideAngularModule, Redo2, Undo2 } from 'lucide-angular';\nimport type { EntityDetailDialogData } from '../entity-detail/entity-detail';\nimport { EntityDialogComponent } from '../entity-dialog/entity-dialog.component';\nimport { QueryTableComponent } from '../entity-table/query-table/query-table.component';\nimport { QueryBuilderComponent } from '../query-builder/query-builder/query-builder.component';\n\n/** RxDB 实体实例(用于 CRUD 操作) */\ntype EntityInstance = {\n [key: string]: unknown;\n readonly id: string;\n save(): Promise<void>;\n remove(): Promise<void>;\n};\n\ntype FilterQuery = { combinator: 'and' | 'or'; rules: unknown[] };\n\nconst EMPTY_FILTER: FilterQuery = { combinator: 'and', rules: [] };\n\n/**\n * 实体列表组件\n *\n * 封装了实体列表的完整 UI:工具栏(显示名称、筛选、撤销/重做、新增)+ 数据表格。\n * 通过 `namespace` 和 `name` 输入定位 RxDB 实体,实现懒加载分页和 CRUD 操作。\n *\n * @example\n * ```html\n * <rxdb-entity-list [namespace]=\"namespace()\" [name]=\"name()\" />\n * ```\n */\n@Component({\n selector: 'rxdb-entity-list',\n templateUrl: './entity-list.component.html',\n host: {\n style: 'display:flex;flex-direction:column;height:100%;overflow:hidden'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n QueryTableComponent,\n QueryBuilderComponent,\n LucideAngularModule,\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n forwardRef(() => EntityListComponent),\n forwardRef(() => EntityDialogComponent)\n ]\n})\nexport class EntityListComponent {\n #m2mDialogRef: DialogRef<unknown, unknown> | null = null;\n // ── Service injections ────────────────────────────────────────────────\n readonly #rxdb = inject(RxDB);\n readonly #injector = inject(Injector);\n readonly #dialog = inject(Dialog);\n readonly #errorHandler = inject(ErrorHandler);\n\n // ── Save coalescing ───────────────────────────────────────────────────\n readonly #pendingChanges = new Map<string, Record<string, unknown>>();\n #flushHandle = false;\n\n // ── Entity registry ───────────────────────────────────────────────────\n readonly #entityClsMap = new Map<string, EntityType>(\n this.#rxdb.config.entities.map(cls => {\n const meta = getEntityMetadata(cls);\n return [`${meta.namespace}:${meta.name}`, cls] as const;\n })\n );\n\n readonly #modelInfoMap = new Map<string, ModelInfo>(\n this.#rxdb.config.entities.map(cls => {\n const meta = getEntityMetadata(cls);\n return [\n meta.name,\n {\n name: meta.name,\n displayName: meta.displayName ?? meta.name,\n entityClass: cls as new (...args: unknown[]) => unknown,\n metadata: meta\n }\n ] as const;\n })\n );\n\n readonly #scrollListMap = new Map<string, InfiniteScrollingList<EntityType>>();\n\n readonly #columnsCache = new Map<string, ColumnsDefine>(\n this.#rxdb.config.entities.map(cls => {\n const meta = getEntityMetadata(cls);\n return [\n `${meta.namespace}:${meta.name}`,\n buildEditableColumns(meta, {\n relatedItemsProviderFactory: (fkField, relatedEntityName) => {\n const relCls = [...this.#entityClsMap.values()].find(c => {\n const m = getEntityMetadata(c);\n return m.name === relatedEntityName;\n });\n if (!relCls) return undefined;\n const relKey = (() => {\n const m = getEntityMetadata(relCls);\n return `${m.namespace}:${m.name}`;\n })();\n const list = this.#getOrCreateList(relKey, relCls);\n const strVal = (v: unknown): string | undefined => (typeof v === 'string' && v.length > 0 ? v : undefined);\n return () => {\n return (list.value() as Record<string, unknown>[]).map(inst => ({\n id: String(inst['id'] ?? ''),\n displayName: strVal(inst['displayName']) ?? strVal(inst['name']) ?? String(inst['id'] ?? '')\n }));\n };\n }\n })\n ] as const;\n })\n );\n\n readonly #vHistory = this.#rxdb.versionManager.history();\n readonly #entityKey = computed(() => `${this.namespace()}:${this.name()}`);\n readonly #currentList = signal<InfiniteScrollingList<EntityType> | undefined>(undefined);\n\n readonly #instances = computed<EntityInstance[]>(() => {\n const list = this.#currentList();\n return list ? (list.value() as EntityInstance[]) : [];\n });\n\n readonly #entityCls = computed(() => this.#entityClsMap.get(this.#entityKey()));\n\n /** 级联新增模式下本地草稿子实体(未保存到DB,由父实体级联保存) */\n readonly #localDraftItems = signal<EntityInstance[]>([]);\n\n // ── Protected view bindings ───────────────────────────────────────────\n protected readonly Undo2 = Undo2;\n protected readonly Redo2 = Redo2;\n protected readonly Funnel = Funnel;\n\n /** CDK Overlay 定位策略:优先下方右对齐,其次上方右对齐 */\n protected readonly overlayPositions = [\n {\n originX: 'end' as const,\n originY: 'bottom' as const,\n overlayX: 'end' as const,\n overlayY: 'top' as const,\n offsetY: 4\n },\n {\n originX: 'end' as const,\n originY: 'top' as const,\n overlayX: 'end' as const,\n overlayY: 'bottom' as const,\n offsetY: -4\n }\n ];\n\n protected readonly loadMore = computed(() => {\n const list = this.#currentList();\n return list ? () => list.loadMore() : undefined;\n });\n\n // ── Route inputs ──────────────────────────────────────────────────────\n readonly namespace = input.required<string>();\n readonly name = input.required<string>();\n\n /** 固定查询条件,与用户筛选条件做 AND 合并(用于关系属性过滤,如 ownerId = currentId) */\n readonly fixedQuery = input<FilterQuery | undefined>(undefined);\n\n /** 预填充的外键数据(级联新增时传递给子实体对话框) */\n readonly fixedFormData = input<EntityFormData | undefined>(undefined);\n\n /** 草稿父实体(用于级联新增场景,子实体通过关系API注册到父实体) */\n readonly draftParentEntity = input<EntityInstance | null>(null);\n\n /** 父实体上关系属性名(如 'children'),用于调用 parent.children$.add(child) */\n readonly parentRelationName = input<string | undefined>(undefined);\n\n /** 创建链路中的实体类型(namespace:name),用于阻断循环创建 */\n readonly creationChain = input<string[]>([]);\n\n /** 关系类型(MANY_TO_MANY 时启用选择模式) */\n readonly relationKind = input<RelationKind | undefined>(undefined);\n\n /** 父实体实例(用于 M2M 关系操作,包含 draft 和已保存实体) */\n readonly parentEntity = input<EntityInstance | null>(null);\n\n /** 列表模式:default=普通列表, select=选择模式(带 checkbox 列) */\n readonly mode = input<'default' | 'select'>('default');\n\n /** 已关联的实体 ID 集合(选择模式下过滤掉,不再展示) */\n readonly alreadyLinkedIds = input<Set<string>>(new Set());\n\n /** 点击「查看」按钮时触发,携带对应行记录 */\n readonly viewEntity = output<EntityTableRecord>();\n\n /** 选择模式:确认选择时触发,携带选中的实体实例 */\n readonly selectionConfirmed = output<EntityInstance[]>();\n\n /** 选择模式:取消选择时触发 */\n readonly selectionCancelled = output<void>();\n\n // ── Reactive state ────────────────────────────────────────────────────\n readonly filterQuery: WritableSignal<FilterQuery> = linkedSignal(() => {\n this.namespace();\n this.name();\n return { ...EMPTY_FILTER };\n });\n\n readonly $isFilterQuery = computed(() => this.filterQuery().rules.length > 0);\n\n readonly showFilterPopover = signal(false);\n\n readonly pendingQuery: WritableSignal<FilterQuery> = linkedSignal(() => {\n this.namespace();\n this.name();\n return { ...EMPTY_FILTER };\n });\n\n readonly pendingQueryValid = signal(true);\n\n readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n readonly displayName = computed(() => {\n const cls = this.#entityCls();\n if (!cls) return this.name();\n const meta = getEntityMetadata(cls);\n return meta.displayName ?? meta.name;\n });\n\n /** 当前实体是否存在于祖先创建链路中(循环创建检测) */\n readonly isCreateBlocked = computed(() => this.creationChain().includes(this.#entityKey()));\n\n readonly isQueryActive = computed(() => this.filterQuery().rules.length > 0);\n readonly filteredCount = computed(() => this.#instances().length + this.#localDraftItems().length);\n\n readonly isInitialLoading = computed(() => {\n const list = this.#currentList();\n return list ? list.isLoading() && list.value().length === 0 : false;\n });\n\n readonly isLoadingMore = computed(() => {\n const list = this.#currentList();\n return list ? list.isLoading() && list.value().length > 0 : false;\n });\n\n readonly undoCount = toSignal(this.#vHistory.undoCount$, { initialValue: 0 });\n readonly redoCount = toSignal(this.#vHistory.redoCount$, { initialValue: 0 });\n readonly canUndo = computed(() => this.undoCount() > 0);\n readonly canRedo = computed(() => this.redoCount() > 0);\n\n readonly queryBuilderFields = computed<FieldMetadata[]>(() => {\n const cls = this.#entityCls();\n if (!cls) return [];\n return organizeFields(extractFieldsFromMetadata(getEntityMetadata(cls), this.#modelInfoMap));\n });\n\n readonly tableRecords = computed<EntityTableRecord[]>(() => {\n const dbRecords = this.#instances().map(inst => ({ ...(inst as Record<string, unknown>) }));\n const draftRecords = this.#localDraftItems().map(inst => ({ ...(inst as Record<string, unknown>) }));\n let records: EntityTableRecord[] = [...draftRecords, ...dbRecords];\n if (this.isSelectMode()) {\n const linkedIds = this.alreadyLinkedIds();\n const selIds = this.selectedIds();\n records = records\n .filter(r => !linkedIds.has(r['id'] as string))\n .map(r => ({ ...r, __selected: selIds.has(r['id'] as string) }));\n }\n return records;\n });\n\n readonly tableColumns = computed<ColumnsDefine>(() => {\n const base = this.#columnsCache.get(this.#entityKey()) ?? [actionsColumn('操作', '删除', '查看')];\n if (this.isSelectMode()) {\n const withoutActions = base.filter(c => (c as Record<string, unknown>)['field'] !== 'actions');\n return [{ field: '__selected', title: '', cellType: 'checkbox', width: 50 }, ...withoutActions];\n }\n return base;\n });\n\n readonly createFormFieldConfigs = computed<FormFieldConfig[]>(() => {\n const cls = this.#entityCls();\n if (!cls) return [];\n const meta = getEntityMetadata(cls);\n return buildFormFields(meta, 'create');\n });\n\n // ── Select mode ───────────────────────────────────────────────────────\n readonly isSelectMode = computed(() => this.mode() === 'select');\n readonly isM2m = computed(() => this.relationKind() === RelationKind.MANY_TO_MANY);\n\n readonly m2mSelectTpl = viewChild<TemplateRef<void>>('m2mSelectTpl');\n\n readonly selectedIds = signal<Set<string>>(new Set());\n readonly selectedCount = computed(() => this.selectedIds().size);\n\n readonly m2mAlreadyLinkedIds = computed<Set<string>>(() => {\n const dbIds = this.#instances().map(e => e.id);\n const draftIds = this.#localDraftItems().map(e => e.id);\n return new Set([...dbIds, ...draftIds]);\n });\n\n // ── Constructor ───────────────────────────────────────────────────────\n\n constructor() {\n toObservable(this.#entityKey)\n .pipe(takeUntilDestroyed())\n .subscribe(key => {\n const cls = this.#entityClsMap.get(key);\n if (!cls) {\n this.#currentList.set(undefined);\n return;\n }\n this.#currentList.set(this.#getOrCreateList(key, cls));\n });\n }\n\n // ── Event handlers ────────────────────────────────────────────────────\n\n toggleFilterPopover(): void {\n this.showFilterPopover.update(v => !v);\n }\n\n applyFilter(): void {\n this.filterQuery.set({ ...this.pendingQuery() });\n this.showFilterPopover.set(false);\n }\n\n resetFilter(): void {\n this.pendingQuery.set({ ...EMPTY_FILTER });\n this.filterQuery.set({ ...EMPTY_FILTER });\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(e: KeyboardEvent): void {\n const tag = (e.target as HTMLElement)?.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return;\n if ((e.ctrlKey || e.metaKey) && e.key === 'z') {\n if (e.shiftKey) {\n if (this.canRedo()) {\n e.preventDefault();\n void this.redo();\n }\n } else {\n if (this.canUndo()) {\n e.preventDefault();\n void this.undo();\n }\n }\n }\n }\n\n onQueryChange(query: { combinator: 'and' | 'or'; rules: unknown[] } | undefined): void {\n this.pendingQuery.set(query ?? { ...EMPTY_FILTER });\n }\n\n onValidationChange(result: ValidationResult): void {\n this.pendingQueryValid.set(result.valid);\n }\n\n onCellChanged(event: CellChangeEvent): void {\n if (!event.field || event.field === 'actions') return;\n if (event.field === '__selected') {\n const id = event.record['id'] as string;\n this.selectedIds.update(set => {\n const next = new Set(set);\n if (event.value) next.add(id);\n else next.delete(id);\n return next;\n });\n return;\n }\n const id = event.record['id'] as string;\n const entityCls = this.#entityCls();\n let value = event.value;\n if (entityCls) {\n const prop = getEntityMetadata(entityCls).propertyMap.get(event.field);\n if (prop) value = parsePropertyColumnValue(prop.type, event.value);\n }\n this.#enqueue(id, { [event.field]: value });\n }\n\n undo(): void {\n this.#vHistory.undo();\n }\n\n redo(): void {\n this.#vHistory.redo();\n }\n\n async onIconClicked(event: { name: string; record: EntityTableRecord }): Promise<void> {\n if (event.name === 'view-action') {\n this.viewEntity.emit(event.record);\n return;\n }\n if (event.name !== 'delete-action') return;\n const id = event.record['id'] as string;\n\n const draftInst = this.#localDraftItems().find(i => i.id === id);\n if (draftInst) {\n this.#localDraftItems.update(items => items.filter(i => i.id !== id));\n return;\n }\n\n const inst = this.#instances().find(i => i.id === id);\n if (!inst) return;\n try {\n await inst.remove();\n } catch (e) {\n this.#errorHandler.handleError(e);\n }\n }\n\n async onRowDeleted(event: EntityTableRecord): Promise<void> {\n await this.onIconClicked({ name: 'delete-action', record: event });\n }\n\n onBatchUpdated(mutations: BatchChangeItem[]): void {\n for (const { recordId, changes } of mutations) {\n const filtered = Object.fromEntries(Object.entries(changes).filter(([k]) => k && k !== 'actions'));\n if (Object.keys(filtered).length) this.#enqueue(recordId, filtered);\n }\n }\n\n openCreateDialog(): void {\n if (this.isCreateBlocked()) return;\n\n const fields = this.createFormFieldConfigs();\n const cls = this.#entityCls();\n if (!cls || fields.length === 0) return;\n\n const meta = getEntityMetadata(cls);\n const strVal = (v: unknown): string | undefined => (typeof v === 'string' && v.length > 0 ? v : undefined);\n const draftParent = this.draftParentEntity();\n const relatedEntityProvider: RelatedEntityProvider = (entityName, namespace) => {\n const relCls = [...this.#entityClsMap.values()].find(c => {\n const m = getEntityMetadata(c);\n return m.name === entityName && (!namespace || m.namespace === namespace);\n });\n if (!relCls) return [];\n const relMeta = getEntityMetadata(relCls);\n const list = this.#getOrCreateList(`${relMeta.namespace}:${relMeta.name}`, relCls);\n const items = (list.value() as Record<string, unknown>[]).map(inst => ({\n id: String(inst['id'] ?? ''),\n displayName: strVal(inst['displayName']) ?? strVal(inst['name']) ?? String(inst['id'] ?? '')\n }));\n if (draftParent) {\n const parentMeta = getEntityMetadata((draftParent as any).constructor as EntityType);\n if (parentMeta.name === entityName && (!namespace || parentMeta.namespace === namespace)) {\n const parentId = String(draftParent.id);\n if (!items.some(i => i.id === parentId)) {\n items.push({\n id: parentId,\n displayName: strVal(draftParent['displayName']) ?? strVal(draftParent['name']) ?? parentId\n });\n }\n }\n }\n return items;\n };\n\n void import('../entity-detail/entity-detail').then(({ EntityDetailComponent }) => {\n const dialogRef = this.#dialog.open(EntityDetailComponent, {\n width: '720px',\n minWidth: '400px',\n height: '80vh',\n minHeight: '300px',\n panelClass: 'entity-detail-dialog',\n data: {\n metadata: meta,\n formFields: fields,\n formData: {},\n formMode: 'create' as const,\n relatedEntityProvider,\n fixedFormData: this.fixedFormData(),\n delegateSave: !!this.draftParentEntity(),\n creationChain: this.creationChain()\n } satisfies EntityDetailDialogData\n });\n\n dialogRef.componentInstance!.formSubmitted.subscribe((result: EntityFormData) => {\n this.#handleCreateSubmit(result);\n dialogRef.close();\n });\n\n dialogRef.closed.subscribe(result => {\n if (result === 'saved') this.#currentList()?.refresh();\n });\n });\n }\n\n // ── M2M / Select mode methods ─────────────────────────────────────────\n\n openM2mSelectDialog(): void {\n if (this.#m2mDialogRef) return;\n const tpl = this.m2mSelectTpl();\n if (!tpl) return;\n\n const ref = this.#dialog.open(tpl, {\n width: '720px',\n minWidth: '400px',\n height: '70vh',\n minHeight: '300px',\n panelClass: 'entity-m2m-select-dialog'\n });\n this.#m2mDialogRef = ref as any;\n\n ref.closed.subscribe(() => {\n this.#m2mDialogRef = null;\n });\n }\n\n onM2mSelectionConfirmed(entities: EntityInstance[]): void {\n const parent = this.parentEntity();\n const relName = this.parentRelationName();\n\n if (parent && relName) {\n const relation = (parent as Record<string, unknown>)[relName + '$'];\n if (relation && typeof (relation as Record<string, unknown>)['add'] === 'function') {\n (relation as { add(...args: unknown[]): void }).add(...entities);\n }\n\n if (!this.draftParentEntity()) {\n parent\n .save()\n .then(() => this.#currentList()?.refresh())\n .catch(e => this.#errorHandler.handleError(e));\n } else {\n this.#localDraftItems.update(items => [...items, ...entities]);\n }\n }\n\n this.#m2mDialogRef?.close();\n }\n\n m2mCancelSelection(): void {\n this.#m2mDialogRef?.close();\n }\n\n confirmSelection(): void {\n const ids = this.selectedIds();\n if (ids.size === 0) {\n this.selectionCancelled.emit();\n return;\n }\n const entities = this.#instances().filter(e => ids.has(e.id));\n this.selectionConfirmed.emit(entities);\n }\n\n cancelSelection(): void {\n this.selectionCancelled.emit();\n }\n\n // ── Private helpers ───────────────────────────────────────────────────\n\n async #handleCreateSubmit(data: EntityFormData): Promise<void> {\n const cls = this.#entityCls();\n if (!cls) return;\n\n const parent = this.draftParentEntity();\n const relName = this.parentRelationName();\n\n if (parent && relName) {\n const child = new (cls as any)(data) as EntityInstance;\n const relation = (parent as any)[relName + '$'];\n if (relation && typeof relation.add === 'function') {\n relation.add(child);\n }\n this.#localDraftItems.update(items => [...items, child]);\n return;\n }\n\n try {\n const inst = new (cls as any)(data) as EntityInstance;\n await inst.save();\n this.#currentList()?.refresh();\n } catch (e) {\n this.#errorHandler.handleError(e);\n }\n }\n\n #getOrCreateList(key: string, cls: EntityType): InfiniteScrollingList<EntityType> {\n const cached = this.#scrollListMap.get(key);\n if (cached) return cached;\n const options = computed<FindByCursorOptions<EntityType>>(() => {\n const userFilter = this.filterQuery();\n const fixed = this.fixedQuery();\n let where: FilterQuery;\n if (!fixed || fixed.rules.length === 0) {\n where = userFilter;\n } else if (userFilter.rules.length === 0) {\n where = fixed;\n } else {\n where = { combinator: 'and', rules: [...fixed.rules, ...userFilter.rules] };\n }\n return {\n where: where as never,\n orderBy: [{ field: 'id' as const, sort: 'desc' as const }]\n };\n });\n const list = runInInjectionContext(this.#injector, () => new InfiniteScrollingList(this.#rxdb, cls, options));\n this.#scrollListMap.set(key, list);\n return list;\n }\n\n #enqueue(recordId: string, changes: Record<string, unknown>): void {\n const cur = this.#pendingChanges.get(recordId) ?? {};\n this.#pendingChanges.set(recordId, { ...cur, ...changes });\n if (this.#flushHandle) return;\n this.#flushHandle = true;\n queueMicrotask(() => {\n this.#flushHandle = false;\n const snapshot = [...this.#pendingChanges.entries()];\n this.#pendingChanges.clear();\n void this.#flushPending(snapshot);\n });\n }\n\n async #flushPending(pending: [string, Record<string, unknown>][]): Promise<void> {\n if (!pending.length) return;\n const EntityClass = this.#entityCls();\n if (!EntityClass) return;\n const toUpdate = new Set<EntityInstance>();\n const prevMap = new Map<EntityInstance, Record<string, unknown>>();\n const draftUpdated = new Set<EntityInstance>();\n for (const [id, changes] of pending) {\n let inst = this.#instances().find(i => i.id === id);\n const isDraft = !inst;\n if (!inst) {\n inst = this.#localDraftItems().find(i => i.id === id);\n }\n if (!inst) continue;\n const prev: Record<string, unknown> = {};\n const actual: Record<string, unknown> = {};\n let hasChange = false;\n for (const k of Object.keys(changes)) {\n if (inst[k] !== changes[k]) {\n prev[k] = inst[k];\n actual[k] = changes[k];\n hasChange = true;\n }\n }\n if (!hasChange) continue;\n prevMap.set(inst, prev);\n Object.assign(inst as Record<string, unknown>, actual);\n if (isDraft) {\n draftUpdated.add(inst);\n } else {\n toUpdate.add(inst);\n }\n }\n\n // 草稿实体直接更新 signal 触发重渲染(不写DB)\n if (draftUpdated.size) {\n this.#localDraftItems.update(items => [...items]);\n }\n\n if (!toUpdate.size) return;\n\n const updateMap = new Map([[EntityClass, toUpdate as unknown as Set<unknown>]]);\n try {\n await this.#rxdb.entityManager.mutations({ create: new Map(), update: updateMap, remove: new Map() });\n } catch (e) {\n this.#errorHandler.handleError(e);\n for (const [inst, prev] of prevMap) Object.assign(inst as Record<string, unknown>, prev);\n }\n }\n}\n","<!-- 顶栏:实体名称 + 计数 + 筛选按钮 + 新增按钮 -->\n<div class=\"border-base-300 flex shrink-0 items-center justify-between border-b px-4 py-2\">\n <div class=\"flex items-center gap-2 text-sm\">\n <span class=\"font-medium\">{{ displayName() }}</span>\n @if ($isFilterQuery()) {\n <span class=\"badge badge-ghost badge-sm\">{{ filteredCount() }} 条记录</span>\n }\n </div>\n <div class=\"flex items-center gap-2\">\n @if (!isSelectMode()) {\n <!-- Undo / Redo -->\n <button\n class=\"btn btn-xs btn-ghost\"\n [disabled]=\"!canUndo()\"\n (click)=\"undo()\"\n aria-label=\"撤销 (Ctrl+Z)\"\n type=\"button\"\n >\n <lucide-icon class=\"h-3.5 w-3.5\" [img]=\"Undo2\" />\n @if (undoCount(); as c) {\n <span class=\"badge badge-xs\">{{ c }}</span>\n }\n </button>\n <button\n class=\"btn btn-xs btn-ghost\"\n [disabled]=\"!canRedo()\"\n (click)=\"redo()\"\n aria-label=\"重做 (Ctrl+Shift+Z)\"\n type=\"button\"\n >\n <lucide-icon class=\"h-3.5 w-3.5\" [img]=\"Redo2\" />\n @if (redoCount(); as c) {\n <span class=\"badge badge-xs\">{{ c }}</span>\n }\n </button>\n <div class=\"divider divider-horizontal mx-0.5 h-5 self-center\"></div>\n }\n <!-- 筛选 popover 触发器 -->\n <div>\n <button\n class=\"btn btn-ghost btn-sm gap-1\"\n #filterTrigger=\"cdkOverlayOrigin\"\n [class.btn-active]=\"isQueryActive()\"\n (click)=\"toggleFilterPopover()\"\n cdkOverlayOrigin\n type=\"button\"\n >\n <lucide-icon class=\"h-4 w-4\" [img]=\"Funnel\" />\n 筛选\n @if (isQueryActive()) {\n <span class=\"badge badge-primary badge-xs\">{{ filterQuery().rules.length }}</span>\n }\n </button>\n <ng-template\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOpen]=\"showFilterPopover()\"\n [cdkConnectedOverlayOrigin]=\"filterTrigger\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n (backdropClick)=\"showFilterPopover.set(false)\"\n cdkConnectedOverlay\n >\n @if (queryBuilderFields().length > 0) {\n <div\n class=\"border-base-300 bg-base-100 min-w-max rounded-lg border p-3 shadow-lg\"\n (click)=\"$event.stopPropagation()\"\n aria-hidden=\"true\"\n >\n <rxdb-query-builder\n [fields]=\"queryBuilderFields()\"\n [initialQuery]=\"$any(filterQuery())\"\n (queryChange)=\"onQueryChange($event)\"\n (validationChange)=\"onValidationChange($event)\"\n />\n <div class=\"mt-3 flex justify-end gap-2\">\n <button class=\"btn btn-ghost btn-sm\" (click)=\"resetFilter()\" type=\"button\">重置</button>\n <button\n class=\"btn btn-primary btn-sm\"\n [disabled]=\"!pendingQueryValid()\"\n (click)=\"applyFilter()\"\n type=\"button\"\n >\n 确定\n </button>\n </div>\n </div>\n }\n </ng-template>\n </div>\n @if (!isCreateBlocked()) {\n @if (isSelectMode()) {\n <button class=\"btn btn-sm btn-outline\" (click)=\"openCreateDialog()\" type=\"button\">+ 新建</button>\n } @else if (isM2m()) {\n <button class=\"btn btn-primary btn-sm\" (click)=\"openM2mSelectDialog()\" type=\"button\">+ 添加</button>\n } @else {\n <button class=\"btn btn-primary btn-sm\" (click)=\"openCreateDialog()\" type=\"button\">+ 新增</button>\n }\n }\n </div>\n</div>\n\n<!-- 表格主体 -->\n<div class=\"min-h-0 flex-1\">\n @if (isBrowser) {\n @for (key of [namespace() + ':' + name()]; track key) {\n <rxdb-query-table\n [columns]=\"tableColumns()\"\n [filteredCount]=\"filteredCount()\"\n [loading]=\"isInitialLoading()\"\n [loadingMore]=\"isLoadingMore()\"\n [loadMore]=\"loadMore()\"\n [queryActive]=\"isQueryActive()\"\n [records]=\"tableRecords()\"\n (batchUpdated)=\"onBatchUpdated($event)\"\n (cellChanged)=\"onCellChanged($event)\"\n (iconClicked)=\"onIconClicked($event)\"\n (rowDeleted)=\"onRowDeleted($event)\"\n />\n }\n }\n</div>\n\n<!-- Select mode footer -->\n@if (isSelectMode()) {\n <div class=\"border-base-300 flex shrink-0 items-center justify-between border-t px-4 py-3\">\n @if (selectedCount() > 0) {\n <span class=\"text-base-content/70 text-sm\">已选 {{ selectedCount() }} 项</span>\n } @else {\n <span class=\"text-base-content/40 text-sm\">请选择要关联的{{ displayName() }}</span>\n }\n <div class=\"flex gap-2\">\n <button class=\"btn btn-sm\" (click)=\"cancelSelection()\" type=\"button\">取消</button>\n <button\n class=\"btn btn-primary btn-sm\"\n [disabled]=\"selectedCount() === 0\"\n (click)=\"confirmSelection()\"\n type=\"button\"\n >\n 确认添加\n </button>\n </div>\n </div>\n}\n\n<!-- M2M Selection Dialog Template -->\n<ng-template #m2mSelectTpl>\n <rxdb-entity-dialog [title]=\"'添加' + displayName()\" (closeRequested)=\"m2mCancelSelection()\">\n <rxdb-entity-list\n [alreadyLinkedIds]=\"m2mAlreadyLinkedIds()\"\n [mode]=\"'select'\"\n [name]=\"name()\"\n [namespace]=\"namespace()\"\n (selectionCancelled)=\"m2mCancelSelection()\"\n (selectionConfirmed)=\"onM2mSelectionConfirmed($event)\"\n />\n </rxdb-entity-dialog>\n</ng-template>\n","import { getEntityMetadata, RelationKind, RxDB, type EntityMetadata, type EntityType } from '@aiao/rxdb';\nimport type {\n DetailTab,\n DetailTableTab,\n EntityFormData,\n FormFieldChangeEvent,\n FormFieldConfig,\n FormMode,\n FormValidationResult,\n RelatedEntityProvider\n} from '@aiao/rxdb-model';\nimport { buildDetailTabs, buildFormFields, entityToFormData, validateForm } from '@aiao/rxdb-model';\nimport { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ErrorHandler,\n inject,\n input,\n linkedSignal,\n output,\n signal\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { of, switchMap } from 'rxjs';\nimport { EntityDialogComponent } from '../entity-dialog/entity-dialog.component';\nimport { EntityFormComponent } from '../entity-form/rxdb-entity-form-angular';\nimport { EntityListComponent } from '../entity-list/entity-list.component';\n\ntype EntityInstance = { [key: string]: unknown; readonly id: string; save(): Promise<void>; remove(): Promise<void> };\n\n/** CDK Dialog 传入的数据结构 */\nexport interface EntityDetailDialogData {\n metadata: EntityMetadata;\n formFields: FormFieldConfig[];\n formData: EntityFormData;\n formMode: FormMode;\n relatedEntityProvider?: RelatedEntityProvider;\n /** 预填充的外键数据(不可编辑),用于级联新增场景 */\n fixedFormData?: EntityFormData;\n /** 委托保存:不创建草稿实体,仅 emit formSubmitted 让调用方处理 */\n delegateSave?: boolean;\n /** 创建链路中的实体类型(namespace:name),用于阻断循环创建 */\n creationChain?: string[];\n}\n\nlet nextDetailId = 0;\n\n@Component({\n selector: 'rxdb-entity-detail',\n imports: [EntityFormComponent, EntityListComponent, EntityDialogComponent],\n templateUrl: './entity-detail.html',\n styleUrl: './entity-detail.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EntityDetailComponent {\n readonly #dialogRef = inject(DialogRef, { optional: true });\n readonly #dialogData = inject(DIALOG_DATA, { optional: true }) as EntityDetailDialogData | null;\n readonly #rxdb = inject(RxDB, { optional: true }) as RxDB | null;\n readonly #errorHandler = inject(ErrorHandler);\n\n /** 创建模式下的草稿实体实例(立即创建,不保存) */\n #draftEntity: EntityInstance | null = null;\n\n // 根据 namespace + name 查找对应实体类\n readonly #entityCls = computed<EntityType | null>(() => {\n const rxdb = this.#rxdb;\n if (!rxdb) return null;\n const ns = this.namespace();\n const nm = this.name();\n if (!ns || !nm) return null;\n return (\n rxdb.config.entities.find(cls => {\n const meta = getEntityMetadata(cls);\n return meta.namespace === ns && meta.name === nm;\n }) ?? null\n );\n });\n\n /** Dialog 传入的实体类(根据 metadata 查找) */\n readonly #entityClsFromDialog = computed<EntityType | null>(() => {\n const rxdb = this.#rxdb;\n const meta = this.#dialogData?.metadata;\n if (!rxdb || !meta) return null;\n return (\n rxdb.config.entities.find(cls => {\n const m = getEntityMetadata(cls);\n return m.namespace === meta.namespace && m.name === meta.name;\n }) ?? null\n );\n });\n\n readonly #metadataFromRouteInputs = computed<EntityMetadata | null>(() => {\n const cls = this.#entityCls();\n return cls ? getEntityMetadata(cls) : null;\n });\n\n readonly #formFieldsFromRouteInputs = computed<FormFieldConfig[] | null>(() => {\n const meta = this.#metadataFromRouteInputs();\n if (!meta) return null;\n return buildFormFields(meta, this.formModeValue);\n });\n\n readonly #entityInstance = toSignal(\n toObservable(computed(() => ({ cls: this.#entityCls(), id: this.entityId() }))).pipe(\n switchMap(({ cls, id }) => {\n if (!cls || !id || !this.#rxdb) return of(null);\n return this.#rxdb.entityManager.getRepository(cls).get(id);\n })\n ),\n { initialValue: null }\n );\n\n // 路由参数输入(与 namespace/name/entityId 路由参数绑定)\n readonly namespace = input<string>();\n readonly name = input<string>();\n readonly entityId = input<string>();\n\n /** 唯一的 radio group name,避免多个 EntityDetailComponent 实例之间的 radio 冲突 */\n readonly tabGroupName = `detail-tabs-${nextDetailId++}`;\n\n // 直接绑定输入\n readonly metadata = input<EntityMetadata | undefined>(undefined);\n readonly formFields = input<FormFieldConfig[]>();\n readonly formData = input<EntityFormData>();\n readonly formMode = input<FormMode | undefined>(undefined);\n readonly relatedEntityProvider = input<RelatedEntityProvider>();\n\n readonly formSubmitted = output<EntityFormData>();\n readonly formCancelled = output<void>();\n readonly fieldChanged = output<FormFieldChangeEvent>();\n readonly validationErrors = output<FormValidationResult>();\n\n /** 是否使用外部保存模式(create 模式下,保存/取消按钮在 tabs 下面,而非 form 内) */\n readonly isCreateMode = computed(() => this.formModeValue === 'create');\n\n /** 当前表单编辑数据(create 模式下跟踪用户输入) */\n readonly draftFormData = signal<EntityFormData>({});\n\n /** 暴露草稿实体给模板(关系 tab 的 entity-list 需要) */\n readonly draftEntitySignal = signal<EntityInstance | null>(null);\n\n /** 父实体(草稿或已保存实例),用于关系 tab 的 entity-list */\n readonly parentEntityForRelation = computed<EntityInstance | null>(() => {\n return this.draftEntitySignal() ?? (this.#entityInstance() as EntityInstance | null) ?? null;\n });\n\n /** 弹框标题 */\n readonly dialogTitle = computed(() => {\n const meta = this.metadataValue;\n const mode = this.formModeValue;\n const name = meta?.displayName ?? meta?.name ?? '';\n return mode === 'create' ? `新建${name}` : name;\n });\n\n /** 创建链路:当前实体 + 祖先链路,传递给子 entity-list 以阻断循环创建 */\n readonly creationChain = computed<string[]>(() => {\n const parentChain = this.#dialogData?.creationChain ?? [];\n if (!this.isCreateMode()) return parentChain;\n const meta = this.metadataValue;\n if (!meta) return parentChain;\n const key = `${meta.namespace}:${meta.name}`;\n return parentChain.includes(key) ? parentChain : [...parentChain, key];\n });\n\n /** 当前活动关系 tab 的 relationName(用于子实体注册关系) */\n readonly activeRelationName = computed<string | undefined>(() => {\n const tab = this.activeTab();\n return tab?.type === 'table' ? (tab as DetailTableTab).relationName : undefined;\n });\n\n readonly tabs = computed(() => {\n const meta = this.metadataValue;\n if (!meta) return [];\n const chain = this.creationChain();\n return buildDetailTabs(meta).filter(tab => {\n if (tab.type !== 'table') return true;\n const t = tab as DetailTableTab;\n const key = `${t.relatedNamespace}:${t.relatedEntityName}`;\n return !chain.includes(key);\n });\n });\n readonly activeTabKey = linkedSignal<DetailTab[], string>({\n source: this.tabs,\n computation: tabs => tabs[0]?.key ?? 'basic'\n });\n\n readonly activeTab = computed(() => this.tabs().find(t => t.key === this.activeTabKey()));\n\n // 公开访问器 - 优先级:直接 input > 路由推导 > dialog data\n get metadataValue(): EntityMetadata {\n return this.metadata() ?? this.#metadataFromRouteInputs() ?? this.#dialogData!.metadata;\n }\n\n get formFieldsValue(): FormFieldConfig[] {\n const fields = this.formFields() ?? this.#formFieldsFromRouteInputs() ?? this.#dialogData!.formFields;\n const fixed = this.#dialogData?.fixedFormData;\n if (!fixed) return fields;\n return fields.map(f => (f.field in fixed ? { ...f, readonly: true } : f));\n }\n\n get formDataValue(): EntityFormData {\n if (this.isCreateMode()) {\n const draft = this.draftFormData();\n const fixed = this.#dialogData?.fixedFormData;\n return fixed ? { ...draft, ...fixed } : draft;\n }\n const inst = this.#entityInstance();\n if (inst) return entityToFormData(inst as Record<string, unknown>, this.formFieldsValue ?? []);\n const base = this.formData() ?? this.#dialogData?.formData ?? {};\n const fixed = this.#dialogData?.fixedFormData;\n return fixed ? { ...base, ...fixed } : base;\n }\n\n get formModeValue(): FormMode {\n return this.formMode() ?? this.#dialogData?.formMode ?? 'edit';\n }\n\n get relatedEntityProviderValue(): RelatedEntityProvider | undefined {\n return this.relatedEntityProvider() ?? this.#dialogData?.relatedEntityProvider;\n }\n\n constructor() {\n if (this.#dialogData?.formMode === 'create' && !this.#dialogData.delegateSave) {\n const cls = this.#entityClsFromDialog();\n if (cls) {\n const fixed = this.#dialogData.fixedFormData;\n const merged = { ...(this.#dialogData.formData || {}), ...fixed };\n this.#draftEntity = new (cls as any)(merged) as EntityInstance;\n this.draftEntitySignal.set(this.#draftEntity);\n this.draftFormData.set(\n entityToFormData(this.#draftEntity as Record<string, unknown>, this.#dialogData.formFields)\n );\n }\n }\n }\n\n selectTab(key: string): void {\n const targetTab = this.tabs().find(t => t.key === key);\n if (this.isCreateMode() && targetTab?.type === 'table') {\n const fields = this.formFieldsValue;\n const data = this.draftFormData();\n const fixed = this.#dialogData?.fixedFormData;\n const merged = fixed ? { ...data, ...fixed } : data;\n const result = validateForm(fields, merged);\n if (!result.valid) {\n this.validationErrors.emit(result);\n return;\n }\n this.#syncDraftEntity();\n }\n this.activeTabKey.set(key);\n }\n\n onFormDataChanged(data: EntityFormData): void {\n this.draftFormData.set(data);\n }\n\n onFormSubmitted(data: EntityFormData): void {\n this.formSubmitted.emit(data);\n }\n\n onFormCancelled(): void {\n this.#cleanupDraftEntity();\n this.formCancelled.emit();\n this.#dialogRef?.close();\n }\n\n onFieldChanged(event: FormFieldChangeEvent): void {\n if (this.isCreateMode()) {\n this.draftFormData.update(d => ({ ...d, [event.field]: event.value }));\n }\n this.fieldChanged.emit(event);\n }\n\n onValidationErrors(result: FormValidationResult): void {\n this.validationErrors.emit(result);\n }\n\n /** 外部保存按钮(create 模式) */\n onSave(): void {\n const fields = this.formFieldsValue;\n const data = this.draftFormData();\n const fixed = this.#dialogData?.fixedFormData;\n const merged = fixed ? { ...data, ...fixed } : data;\n const result = validateForm(fields, merged);\n if (!result.valid) {\n this.validationErrors.emit(result);\n return;\n }\n if (this.#draftEntity) {\n this.#syncDraftEntity();\n this.#draftEntity\n .save()\n .then(() => {\n this.#draftEntity = null;\n this.draftEntitySignal.set(null);\n this.#dialogRef?.close('saved');\n })\n .catch(e => this.#errorHandler.handleError(e));\n } else {\n this.formSubmitted.emit(merged);\n this.#dialogRef?.close();\n }\n }\n\n onCancel(): void {\n this.onFormCancelled();\n }\n\n buildFixedQuery(tab: DetailTableTab): { combinator: 'and'; rules: unknown[] } | undefined {\n const entityId = this.#draftEntity?.id ?? (this.formDataValue as Record<string, unknown>)['id'];\n if (!entityId) return undefined;\n\n if (tab.relationKind === RelationKind.ONE_TO_MANY && tab.foreignKeyField) {\n return { combinator: 'and', rules: [{ field: tab.foreignKeyField, operator: '=', value: entityId }] };\n }\n\n if (tab.relationKind === RelationKind.MANY_TO_MANY && tab.mappedProperty) {\n return { combinator: 'and', rules: [{ field: `${tab.mappedProperty}.id`, operator: '=', value: entityId }] };\n }\n\n return undefined;\n }\n\n buildFixedFormData(tab: DetailTableTab): EntityFormData | undefined {\n const entityId = this.#draftEntity?.id ?? (this.formDataValue as Record<string, unknown>)['id'];\n if (!entityId) return undefined;\n\n if (tab.relationKind === RelationKind.ONE_TO_MANY && tab.foreignKeyField) {\n return { [tab.foreignKeyField]: entityId };\n }\n\n return undefined;\n }\n\n /** 将表单数据同步到草稿实体 */\n #syncDraftEntity(): void {\n if (!this.#draftEntity) return;\n const data = this.draftFormData();\n const fixed = this.#dialogData?.fixedFormData;\n const merged = fixed ? { ...data, ...fixed } : data;\n Object.assign(this.#draftEntity, merged);\n }\n\n /** 清理草稿实体缓存 */\n #cleanupDraftEntity(): void {\n if (!this.#draftEntity || !this.#rxdb) return;\n this.#rxdb.entityManager.removeEntityCache(this.#draftEntity as any);\n this.#draftEntity = null;\n this.draftEntitySignal.set(null);\n }\n}\n","<rxdb-entity-dialog [title]=\"dialogTitle()\" (closeRequested)=\"onCancel()\">\n <!-- Tab Bar -->\n <div class=\"tabs tabs-border flex-1\" role=\"tablist\">\n @for (tab of tabs(); track tab.key) {\n <input\n class=\"tab\"\n [attr.aria-label]=\"tab.label\"\n [checked]=\"tab.key === activeTabKey()\"\n [name]=\"tabGroupName\"\n (change)=\"selectTab(tab.key)\"\n role=\"tab\"\n type=\"radio\"\n />\n <div\n class=\"tab-content border-base-300 bg-base-100\"\n [class.overflow-auto]=\"tab.type === 'form'\"\n [class.overflow-hidden]=\"tab.type === 'table'\"\n [class.p-4]=\"tab.type === 'form'\"\n [hidden]=\"tab.key !== activeTabKey()\"\n >\n @if (tab.type === 'form') {\n <rxdb-entity-form\n [data]=\"formDataValue\"\n [fields]=\"formFieldsValue\"\n [mode]=\"formModeValue\"\n [relatedEntityProvider]=\"relatedEntityProviderValue\"\n [showActions]=\"!isCreateMode()\"\n (fieldChanged)=\"onFieldChanged($event)\"\n (formCancelled)=\"onFormCancelled()\"\n (formSubmitted)=\"onFormSubmitted($event)\"\n (validationErrors)=\"onValidationErrors($event)\"\n />\n }\n @if (tab.type === 'table') {\n <rxdb-entity-list\n [creationChain]=\"creationChain()\"\n [draftParentEntity]=\"draftEntitySignal()\"\n [fixedFormData]=\"buildFixedFormData($any(tab))\"\n [fixedQuery]=\"buildFixedQuery($any(tab))\"\n [name]=\"$any(tab).relatedEntityName\"\n [namespace]=\"$any(tab).relatedNamespace\"\n [parentEntity]=\"parentEntityForRelation()\"\n [parentRelationName]=\"$any(tab).relationName\"\n [relationKind]=\"$any(tab).relationKind\"\n />\n }\n </div>\n }\n </div>\n\n <!-- Save/Cancel buttons for create mode (below tabs) -->\n @if (isCreateMode()) {\n <div class=\"border-base-300 flex shrink-0 justify-end gap-2 border-t px-4 py-3\">\n <button class=\"btn\" (click)=\"onCancel()\" type=\"button\">取消</button>\n <button class=\"btn btn-primary\" (click)=\"onSave()\" type=\"button\">保存</button>\n </div>\n }\n</rxdb-entity-dialog>\n","/**\n * @aiao/rxdb-model-angular\n *\n * RxDB 模型 Angular 组件库。\n * VTable 基础设施请从 `@aiao/rxdb-model` 导入。\n */\n\n// Angular 配置\nexport { ENTITY_TABLE_CONFIG } from './config';\n\n// Angular 组件\nexport { EntityTableComponent } from './entity-table/entity-table.component';\nexport { QueryTableComponent } from './query-table/query-table.component';\n\nexport * from '@aiao/rxdb-model';\n","import {\n createQueryBuilderService,\n type FieldMetadata,\n type QueryBuilderRuleGroup,\n type QueryBuilderService,\n type UIRule,\n type ValidationResult\n} from '@aiao/rxdb-model';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, input, OnDestroy, output, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { QueryGroupComponent, type UIRuleGroup } from '../query-group/query-group.component';\n\n/**\n * 子查询构建器组件\n *\n * @description\n * 用于 EXISTS/NOT EXISTS 操作符的嵌套查询条件。\n * 支持:\n * - 添加子条件\n * - 嵌套规则组\n * - 清空子条件\n */\n@Component({\n selector: 'rxdb-subquery-builder',\n standalone: true,\n imports: [CommonModule, QueryGroupComponent],\n template: `\n <div class=\"subquery-builder border-base-300 bg-base-200/50 p-2\">\n @if (!hasRules()) {\n <div class=\"text-base-content/60 flex items-center gap-2\">\n <button class=\"btn btn-ghost btn-xs\" (click)=\"handleAddFirstRule()\" type=\"button\">+ 添加子条件</button>\n <span class=\"text-xs opacity-50\">(可选)</span>\n </div>\n } @else {\n <rxdb-query-group\n [depth]=\"0\"\n [fields]=\"fields()\"\n [group]=\"rootGroup()!\"\n [maxDepth]=\"maxDepth()\"\n (addGroup)=\"onAddGroup($event)\"\n (addRule)=\"onAddRule($event)\"\n (removeItem)=\"onRemoveItem($event)\"\n (updateCombinator)=\"onUpdateCombinator($event)\"\n (updateRule)=\"onUpdateRule($event)\"\n />\n <div class=\"mt-2 flex justify-end\">\n <button class=\"btn btn-ghost btn-xs text-error\" (click)=\"handleClear()\" type=\"button\">清空</button>\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n rxdb-query-group ::ng-deep > .rxdb-query-group {\n border: 0;\n padding: 0;\n }\n `\n ]\n})\nexport class SubqueryBuilderComponent implements OnDestroy {\n private readonly service: QueryBuilderService<Record<string, unknown>>;\n /** initialQuery 是否已应用(只应用一次) */\n private initialQueryApplied = false;\n\n /** 根规则组 Signal */\n private readonly rootGroupSignal: Signal<unknown>;\n\n /** 验证 Signal */\n private readonly validationSignal: Signal<ValidationResult | undefined>;\n\n /** 字段列表 */\n readonly fields = input.required<FieldMetadata[]>();\n\n /** 初始查询 */\n readonly initialQuery = input<QueryBuilderRuleGroup<Record<string, unknown>>>();\n\n /** 最大嵌套层级 */\n readonly maxDepth = input<number>(3);\n\n /** 查询变更事件 */\n readonly queryChange = output<{ combinator: 'and' | 'or'; rules: unknown[] } | undefined>();\n\n /** 验证变更事件 */\n readonly validationChange = output<ValidationResult>();\n\n /** 根规则组 */\n readonly rootGroup: Signal<UIRuleGroup | undefined> = computed(() => {\n return this.rootGroupSignal() as UIRuleGroup | undefined;\n });\n\n /** 是否有规则 */\n readonly hasRules = computed(() => {\n const group = this.rootGroup();\n return group && group.rules.length > 0;\n });\n\n constructor() {\n // 在构造函数中初始化服务\n this.service = createQueryBuilderService<Record<string, unknown>>({\n config: {\n maxNestingLevel: this.maxDepth()\n }\n });\n\n // 转换 Observable 为 Signal\n this.rootGroupSignal = toSignal(this.service.rootGroup$, { requireSync: true });\n this.validationSignal = toSignal(this.service.validation$, { initialValue: undefined });\n\n // 监听字段变化并同步到服务\n effect(() => {\n const fields = this.fields();\n if (fields.length > 0) {\n this.service.setFields(fields);\n }\n });\n\n // 监听初始查询并加载(只应用一次,避免用户修改后被重置)\n effect(() => {\n if (!this.initialQueryApplied) {\n const initial = this.initialQuery();\n if (initial) {\n this.initialQueryApplied = true;\n this.service.fromRxDBQuery(initial as any);\n }\n }\n });\n\n // 监听查询变化并发出事件\n effect(() => {\n const group = this.rootGroup();\n if (group) {\n const query = this.service.toRxDBQuery();\n // 如果没有规则,返回 undefined 而不是空的 RuleGroup\n if (!query.rules || query.rules.length === 0) {\n this.queryChange.emit(undefined);\n } else {\n this.queryChange.emit(query);\n }\n }\n });\n\n // 监听验证变化并发出事件\n effect(() => {\n const validation = this.validationSignal();\n if (validation) {\n this.validationChange.emit(validation);\n }\n });\n\n // 同步 maxDepth 到 service\n effect(() => {\n this.service.setMaxNestingLevel(this.maxDepth());\n });\n }\n\n /** 销毁服务 */\n ngOnDestroy(): void {\n this.service.destroy();\n }\n\n /** 添加第一条规则 */\n handleAddFirstRule(): void {\n const firstField = this.fields()[0];\n if (firstField) {\n this.service.addRule(undefined, {\n field: firstField.name,\n operator:\n firstField.isRelation ? 'exists'\n : firstField.type === 'keyValue' ? 'null'\n : '=',\n value: firstField.type === 'boolean' ? false : ''\n } as any);\n }\n }\n\n /** 清空所有规则 */\n handleClear(): void {\n this.service.clear();\n }\n\n /** 添加规则到指定组 */\n onAddRule(event: { parentId: string; rule: Omit<UIRule, 'id'> }): void {\n this.service.addRule(event.parentId, event.rule as any);\n }\n\n /** 添加子组到指定组 */\n onAddGroup(parentId: string): void {\n this.service.addGroup(parentId);\n }\n\n /** 删除规则或组 */\n onRemoveItem(id: string): void {\n this.service.remove(id);\n }\n\n /** 更新规则 */\n onUpdateRule(event: { id: string; updates: Partial<UIRule> }): void {\n this.service.updateRule(event.id, event.updates as any);\n }\n\n /** 更新组合器 */\n onUpdateCombinator(event: { id: string; combinator: 'and' | 'or' }): void {\n this.service.updateGroupCombinator(event.id, event.combinator);\n }\n}\n","/**\n * @aiao/rxdb-model-angular\n *\n * Angular 查询构建器组件库\n *\n * @description\n * 提供可视化的 RxDB 查询条件构建组件,支持:\n * - 从 EntityMetadata 自动解析字段\n * - 支持多种数据类型和操作符\n * - AND/OR 条件组合\n * - 最大 5 层嵌套\n * - 实时验证\n *\n * @example\n * ```typescript\n * import { QueryBuilderComponent } from '@aiao/rxdb-model-angular';\n *\n * @Component({\n * imports: [QueryBuilderComponent],\n * template: `\n * <rxdb-query-builder\n * [entity]=\"userEntity\"\n * (queryChange)=\"onQueryChange($event)\"\n * />\n * `\n * })\n * export class MyComponent {\n * userEntity = inject(UserEntity);\n *\n * onQueryChange(query: RuleGroup<User>) {\n * console.log('Query changed:', query);\n * }\n * }\n * ```\n */\n\n// 主组件\nexport { QueryBuilderComponent } from './query-builder/query-builder.component';\n\n// 子组件(可单独使用)\nexport { FieldSelectorComponent } from './field-selector/field-selector.component';\nexport { OperatorSelectorComponent } from './operator-selector/operator-selector.component';\nexport { PopoverSelectComponent } from './popover-select/popover-select.component';\nexport { QueryGroupComponent } from './query-group/query-group.component';\nexport { QueryRuleComponent } from './query-rule/query-rule.component';\nexport { SubqueryBuilderComponent } from './subquery-builder/subquery-builder.component';\nexport { TreeItemDirective, TreeSelectComponent } from './tree-select/tree-select.component';\nexport { ValueInputComponent } from './value-input/value-input.component';\n\n// 主题注入\nexport { DEFAULT_QUERY_BUILDER_THEME } from './theme/default-query-builder-theme';\nexport { QUERY_BUILDER_THEME, provideQueryBuilderTheme } from './theme/query-builder-theme.token';\n\n// Core exports\nexport * from '@aiao/rxdb-model';\nexport type { QueryBuilderTheme } from './theme/query-builder-theme.token';\n","// Entity Detail Angular\nexport * from './entity-detail/entity-detail';\n\n// Entity Dialog Angular\nexport * from './entity-dialog/index';\n\n// Entity Form Angular\nexport * from './entity-form/rxdb-entity-form-angular';\n\n// Entity List Angular\nexport { EntityListComponent } from './entity-list/entity-list.component';\n\n// Entity Table Angular\nexport * from './entity-table/index';\n\n// Query Builder Angular\nexport * from './query-builder/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["vtChangeCellValue","_uid","i1","coreGetInputType","coreGetDefaultValue"],"mappings":"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"}
1
+ {"version":3,"file":"aiao-rxdb-model-angular.mjs","sources":["../../../../packages/rxdb-model-angular/src/entity-dialog/entity-dialog.component.ts","../../../../packages/rxdb-model-angular/src/entity-dialog/entity-dialog.component.html","../../../../packages/rxdb-model-angular/src/entity-form/rxdb-entity-form-angular.ts","../../../../packages/rxdb-model-angular/src/entity-table/config.ts","../../../../packages/rxdb-model-angular/src/entity-table/entity-table/entity-table.component.ts","../../../../packages/rxdb-model-angular/src/entity-table/entity-table/entity-table.component.html","../../../../packages/rxdb-model-angular/src/entity-table/query-table/query-table.component.ts","../../../../packages/rxdb-model-angular/src/entity-table/query-table/query-table.component.html","../../../../packages/rxdb-model-angular/src/query-builder/tree-select/tree-select.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/field-selector/field-selector.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/popover-select/popover-select.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/operator-selector/operator-selector.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/value-input/value-input.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/theme/default-query-builder-theme.ts","../../../../packages/rxdb-model-angular/src/query-builder/theme/query-builder-theme.token.ts","../../../../packages/rxdb-model-angular/src/query-builder/query-rule/query-rule.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/query-group/query-group.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/query-builder/query-builder.component.ts","../../../../packages/rxdb-model-angular/src/entity-list/entity-list.component.ts","../../../../packages/rxdb-model-angular/src/entity-list/entity-list.component.html","../../../../packages/rxdb-model-angular/src/entity-detail/entity-detail.ts","../../../../packages/rxdb-model-angular/src/entity-detail/entity-detail.html","../../../../packages/rxdb-model-angular/src/entity-table/index.ts","../../../../packages/rxdb-model-angular/src/query-builder/subquery-builder/subquery-builder.component.ts","../../../../packages/rxdb-model-angular/src/query-builder/index.ts","../../../../packages/rxdb-model-angular/src/index.ts","../../../../packages/rxdb-model-angular/src/aiao-rxdb-model-angular.ts"],"sourcesContent":["import { DialogRef } from '@angular/cdk/dialog';\nimport { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n output,\n signal\n} from '@angular/core';\n\n@Component({\n selector: 'rxdb-entity-dialog',\n imports: [CdkDragHandle],\n hostDirectives: [{ directive: CdkDrag, inputs: ['cdkDragBoundary'] }],\n templateUrl: './entity-dialog.component.html',\n styleUrl: './entity-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EntityDialogComponent implements AfterViewInit {\n readonly #dialogRef = inject(DialogRef, { optional: true });\n readonly #cdkDrag = inject(CdkDrag, { optional: true, self: true });\n readonly #el = inject(ElementRef) as ElementRef<HTMLElement>;\n readonly #doc = inject(DOCUMENT);\n\n #pane: HTMLElement | null = null;\n #resizing = false;\n #savedPaneState: { left: string; top: string; width: string; height: string } | null = null;\n\n readonly title = input.required<string>();\n readonly closeRequested = output<void>();\n\n readonly isFullscreen = signal(false);\n readonly isInDialog = !!inject(DialogRef, { optional: true });\n\n constructor() {\n if (this.#cdkDrag) {\n if (this.isInDialog) {\n this.#cdkDrag.rootElementSelector = '.cdk-overlay-pane';\n this.#cdkDrag.boundaryElement = '.cdk-overlay-container';\n } else {\n this.#cdkDrag.disabled = true;\n }\n }\n }\n\n ngAfterViewInit(): void {\n if (!this.isInDialog) return;\n requestAnimationFrame(() => this.#initFixedPane());\n }\n\n close(): void {\n this.closeRequested.emit();\n this.#dialogRef?.close();\n }\n\n toggleFullscreen(): void {\n const wasFullscreen = this.isFullscreen();\n this.isFullscreen.set(!wasFullscreen);\n const fullscreen = !wasFullscreen;\n const pane = this.#pane;\n if (!pane) return;\n\n if (fullscreen) {\n this.#savedPaneState = {\n left: pane.style.left,\n top: pane.style.top,\n width: pane.style.width,\n height: pane.style.height\n };\n pane.style.left = '0';\n pane.style.top = '0';\n pane.style.width = '100vw';\n pane.style.height = '100vh';\n if (this.#cdkDrag) {\n this.#cdkDrag.disabled = true;\n this.#cdkDrag.setFreeDragPosition({ x: 0, y: 0 });\n }\n } else {\n if (this.#savedPaneState) {\n pane.style.left = this.#savedPaneState.left;\n pane.style.top = this.#savedPaneState.top;\n pane.style.width = this.#savedPaneState.width;\n pane.style.height = this.#savedPaneState.height;\n this.#savedPaneState = null;\n }\n if (this.#cdkDrag) this.#cdkDrag.disabled = false;\n }\n }\n\n startResize(e: MouseEvent, dir: string): void {\n const pane = this.#pane;\n if (!pane || this.#resizing || this.isFullscreen()) return;\n e.preventDefault();\n e.stopPropagation();\n this.#resizing = true;\n const startX = e.clientX;\n const startY = e.clientY;\n const startW = pane.offsetWidth;\n const startH = pane.offsetHeight;\n const startL = parseFloat(pane.style.left) || 0;\n const startT = parseFloat(pane.style.top) || 0;\n const minW = 400;\n const minH = 300;\n\n const onMove = (ev: MouseEvent) => {\n const dx = ev.clientX - startX;\n const dy = ev.clientY - startY;\n if (dir.includes('e')) pane.style.width = Math.max(minW, startW + dx) + 'px';\n if (dir.includes('w')) {\n const w = Math.max(minW, startW - dx);\n pane.style.width = w + 'px';\n pane.style.left = startL + startW - w + 'px';\n }\n if (dir.includes('s')) pane.style.height = Math.max(minH, startH + dy) + 'px';\n if (dir.includes('n')) {\n const h = Math.max(minH, startH - dy);\n pane.style.height = h + 'px';\n pane.style.top = startT + startH - h + 'px';\n }\n };\n const onUp = () => {\n this.#resizing = false;\n this.#doc.removeEventListener('mousemove', onMove);\n this.#doc.removeEventListener('mouseup', onUp);\n };\n this.#doc.addEventListener('mousemove', onMove);\n this.#doc.addEventListener('mouseup', onUp);\n }\n\n #initFixedPane(): void {\n const pane = this.#el.nativeElement.closest<HTMLElement>('.cdk-overlay-pane');\n if (!pane) return;\n this.#pane = pane;\n const rect = pane.getBoundingClientRect();\n if (this.#cdkDrag) this.#cdkDrag.setFreeDragPosition({ x: 0, y: 0 });\n pane.style.position = 'fixed';\n pane.style.left = rect.left + 'px';\n pane.style.top = rect.top + 'px';\n pane.style.margin = '0';\n pane.style.maxWidth = 'none';\n pane.style.maxHeight = 'none';\n }\n}\n","<!-- Resize handles -->\n@if (isInDialog) {\n <div class=\"resize-handle resize-n\" (mousedown)=\"startResize($event, 'n')\"></div>\n <div class=\"resize-handle resize-s\" (mousedown)=\"startResize($event, 's')\"></div>\n <div class=\"resize-handle resize-e\" (mousedown)=\"startResize($event, 'e')\"></div>\n <div class=\"resize-handle resize-w\" (mousedown)=\"startResize($event, 'w')\"></div>\n <div class=\"resize-handle resize-ne\" (mousedown)=\"startResize($event, 'ne')\"></div>\n <div class=\"resize-handle resize-nw\" (mousedown)=\"startResize($event, 'nw')\"></div>\n <div class=\"resize-handle resize-se\" (mousedown)=\"startResize($event, 'se')\"></div>\n <div class=\"resize-handle resize-sw\" (mousedown)=\"startResize($event, 'sw')\"></div>\n}\n\n<!-- Dialog Title Bar (drag handle + fullscreen toggle + close) -->\n@if (isInDialog) {\n <div class=\"border-base-300 flex shrink-0 items-center justify-between border-b px-4 py-2\">\n <span class=\"flex-1 cursor-grab text-base font-semibold select-none active:cursor-grabbing\" cdkDragHandle>\n {{ title() }}\n </span>\n <div class=\"flex items-center gap-1\">\n <!-- Fullscreen Toggle -->\n <button\n class=\"btn btn-ghost btn-xs btn-square\"\n [attr.aria-label]=\"isFullscreen() ? '退出全屏' : '全屏'\"\n (click)=\"toggleFullscreen()\"\n type=\"button\"\n >\n @if (isFullscreen()) {\n <svg class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path d=\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\" />\n </svg>\n } @else {\n <svg class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path d=\"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7\" />\n </svg>\n }\n </button>\n <!-- Close -->\n <button class=\"btn btn-ghost btn-xs btn-square\" (click)=\"close()\" aria-label=\"关闭\" type=\"button\">\n <svg class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\">\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n}\n\n<!-- Projected content -->\n<ng-content />\n","import {\n EntityFieldType,\n type EntityFormData,\n formatEntityFieldValue,\n type FormFieldChangeEvent,\n type FormFieldConfig,\n type FormMode,\n type FormValidationResult,\n parseEntityFieldValue,\n type RelatedEntityItem,\n type RelatedEntityProvider,\n validateForm\n} from '@aiao/rxdb-model';\nimport { DatePipe, JsonPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, linkedSignal, output } from '@angular/core';\n\n@Component({\n selector: 'rxdb-entity-form',\n imports: [DatePipe, JsonPipe],\n template: `<form class=\"grid grid-cols-1 gap-4 md:grid-cols-2\" (submit)=\"$event.preventDefault(); onSubmit()\">\n @for (field of editableFields(); track field.field) {\n <fieldset\n class=\"fieldset\"\n [class.md:col-span-2]=\"field.span === 2 || field.type === 'json' || field.type === 'keyValue'\"\n >\n <legend class=\"fieldset-legend\">{{ field.displayName }}</legend>\n @if (isFieldReadonly(field)) {\n <div class=\"input input-ghost flex min-h-10 items-center\">{{ displayValueMap().get(field.field) ?? '' }}</div>\n } @else {\n @switch (field.type) {\n @case ('boolean') {\n <input\n class=\"toggle\"\n [checked]=\"!!formData()[field.field]\"\n (change)=\"onFieldChange(field, $any($event.target).checked)\"\n type=\"checkbox\"\n />\n }\n @case ('enum') {\n <select\n class=\"select\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n >\n @if (field.nullable) {\n <option value=\"\">(空)</option>\n }\n @for (val of field.enumValues ?? []; track val) {\n <option [value]=\"val\">{{ val }}</option>\n }\n </select>\n }\n @case ('date') {\n <input\n class=\"input\"\n [value]=\"formData()[field.field] ? ($any(formData()[field.field]) | date: 'yyyy-MM-ddTHH:mm') : ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n type=\"datetime-local\"\n />\n }\n @case ('number') {\n <input\n class=\"input\"\n [attr.placeholder]=\"field.placeholder ?? ''\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n step=\"any\"\n type=\"number\"\n />\n }\n @case ('integer') {\n <input\n class=\"input\"\n [attr.placeholder]=\"field.placeholder ?? ''\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n step=\"1\"\n type=\"number\"\n />\n }\n @case ('stringArray') {\n <input\n class=\"input\"\n [attr.placeholder]=\"field.placeholder ?? '逗号分隔'\"\n [value]=\"$any(formData()[field.field] ?? []).join(', ')\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n type=\"text\"\n />\n }\n @case ('numberArray') {\n <input\n class=\"input\"\n [attr.placeholder]=\"field.placeholder ?? '逗号分隔数字'\"\n [value]=\"$any(formData()[field.field] ?? []).join(', ')\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n type=\"text\"\n />\n }\n @case ('json') {\n <textarea\n class=\"textarea min-h-24\"\n [attr.placeholder]=\"field.placeholder ?? 'JSON'\"\n [value]=\"formData()[field.field] !== null ? (formData()[field.field] | json) : ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n ></textarea>\n }\n @case ('keyValue') {\n <textarea\n class=\"textarea min-h-24\"\n [attr.placeholder]=\"field.placeholder ?? 'JSON'\"\n [value]=\"formData()[field.field] !== null ? (formData()[field.field] | json) : ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n ></textarea>\n }\n @case ('oneToOne') {\n <select\n class=\"select\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n >\n <option value=\"\">(空)</option>\n @for (item of relatedItemsMap().get(field.field) ?? []; track item.id) {\n <option [value]=\"item.id\">{{ item.displayName }}</option>\n }\n </select>\n }\n @case ('manyToOne') {\n <select\n class=\"select\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n >\n <option value=\"\">(空)</option>\n @for (item of relatedItemsMap().get(field.field) ?? []; track item.id) {\n <option [value]=\"item.id\">{{ item.displayName }}</option>\n }\n </select>\n }\n @default {\n <input\n class=\"input\"\n [attr.placeholder]=\"field.placeholder ?? ''\"\n [value]=\"formData()[field.field] ?? ''\"\n (change)=\"onFieldChange(field, $any($event.target).value)\"\n type=\"text\"\n />\n }\n }\n }\n @if (field.helpText) {\n <p class=\"label\">{{ field.helpText }}</p>\n }\n </fieldset>\n }\n @if (!isReadonly() && showActions()) {\n <div class=\"flex justify-end gap-2 pt-2 md:col-span-2\">\n <button class=\"btn\" (click)=\"onCancel()\" type=\"button\">取消</button>\n <button class=\"btn btn-primary\" type=\"submit\">保存</button>\n </div>\n }\n </form>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EntityFormComponent {\n readonly fields = input.required<FormFieldConfig[]>();\n readonly data = input.required<EntityFormData>();\n readonly mode = input<FormMode>('view');\n readonly relatedEntityProvider = input<RelatedEntityProvider>();\n readonly showActions = input(true);\n\n readonly fieldChanged = output<FormFieldChangeEvent>();\n readonly formSubmitted = output<EntityFormData>();\n readonly formCancelled = output<void>();\n readonly validationErrors = output<FormValidationResult>();\n\n readonly formData = linkedSignal(() => ({ ...this.data() }));\n\n readonly editableFields = computed(() => {\n return this.fields().filter(f => !f.hidden);\n });\n\n readonly isReadonly = computed(() => this.mode() === 'view');\n\n readonly relatedItemsMap = computed(() => {\n const provider = this.relatedEntityProvider();\n const fields = this.editableFields();\n const map = new Map<string, RelatedEntityItem[]>();\n if (!provider) return map;\n for (const field of fields) {\n if (field.relatedEntityName) {\n map.set(field.field, provider(field.relatedEntityName, field.relatedNamespace));\n }\n }\n return map;\n });\n\n readonly displayValueMap = computed(() => {\n const data = this.formData();\n const fields = this.editableFields();\n const itemsMap = this.relatedItemsMap();\n const map = new Map<string, string>();\n for (const field of fields) {\n if (!this.isReadonly() && field.readonly !== true) continue;\n const value = data[field.field];\n if ((field.type === 'oneToOne' || field.type === 'manyToOne') && field.relatedEntityName) {\n const items = itemsMap.get(field.field) ?? [];\n const item = items.find(i => i.id === value);\n map.set(field.field, item?.displayName ?? formatEntityFieldValue(field.type, value));\n } else {\n map.set(field.field, formatEntityFieldValue(field.type, value));\n }\n }\n return map;\n });\n\n onFieldChange(field: FormFieldConfig, rawValue: unknown): void {\n const current = this.formData();\n const previousValue = current[field.field];\n const parsed = parseEntityFieldValue(field.type, rawValue);\n this.formData.set({ ...current, [field.field]: parsed });\n this.fieldChanged.emit({ field: field.field, type: field.type as EntityFieldType, value: parsed, previousValue });\n }\n\n onSubmit(): void {\n const currentFields = this.fields();\n const currentData = this.formData();\n const result = validateForm(currentFields, currentData);\n if (!result.valid) {\n this.validationErrors.emit(result);\n return;\n }\n this.formSubmitted.emit(currentData);\n }\n\n onCancel(): void {\n this.formData.set({ ...this.data() });\n this.formCancelled.emit();\n }\n\n isFieldReadonly(field: FormFieldConfig): boolean {\n return this.isReadonly() || field.readonly === true;\n }\n}\n","import type { EntityTableConfig } from '@aiao/rxdb-model';\nimport { InjectionToken } from '@angular/core';\n\nexport const ENTITY_TABLE_CONFIG = new InjectionToken<EntityTableConfig>('ENTITY_TABLE_CONFIG');\n","import type { BatchChangeItem, CellChangeEvent, EntityTableRecord, PendingWrite } from '@aiao/rxdb-model';\nimport {\n CellTooltipManager,\n ROW_SERIES_COL_OFFSET,\n TableClipboardManager,\n collectDeleteWrites,\n collectReorderedIds,\n completeTableEdit,\n createListTable,\n createTheme,\n getCSSVariables,\n handleTableKeydown,\n patchDragIconForReadonlyRows,\n setCellSwitchState,\n updateTableRecords,\n changeCellValue as vtChangeCellValue\n} from '@aiao/rxdb-model';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n PLATFORM_ID,\n afterNextRender,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport type { ListTableConstructorOptions } from '@visactor/vtable';\nimport * as VTable from '@visactor/vtable';\nimport { ENTITY_TABLE_CONFIG } from '../config';\n\n/**\n * 通用实体数据表格组件\n *\n * 基于 VTable 提供高性能表格渲染,支持:\n * - 单元格编辑(文本、开关、复选框、下拉)\n * - 剪贴板操作(Ctrl+C/V,TSV 格式)\n * - 拖拽排序\n * - 键盘导航(Enter 切换开关,Delete 清空单元格)\n * - 主题系统(daisyUI CSS 变量)\n * - 校验错误 tooltip\n */\n@Component({\n selector: 'rxdb-entity-table',\n imports: [],\n templateUrl: './entity-table.component.html',\n styleUrl: './entity-table.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EntityTableComponent implements OnDestroy {\n readonly #platformId = inject(PLATFORM_ID);\n readonly #config = inject(ENTITY_TABLE_CONFIG, { optional: true });\n #tableInstance: VTable.ListTable | null = null;\n #destroyed = false;\n #tableReady = signal(false);\n #prevColumns: ListTableConstructorOptions['columns'] | null = null;\n #prevRecords: EntityTableRecord[] | null = null;\n #selectedCell: { col: number; row: number } | null = null;\n #containerKeydownHandler: ((e: KeyboardEvent) => void) | null = null;\n #resizeObserver: ResizeObserver | null = null;\n readonly #cellTooltip = signal<{ x: number; y: number; content: string } | null>(null);\n readonly #headerHeight = signal(40);\n readonly #clipboard = new TableClipboardManager();\n readonly #tooltip = new CellTooltipManager();\n #container: HTMLElement | null = null;\n\n readonly tableContainer = viewChild<ElementRef<HTMLDivElement>>('tableContainer');\n\n // ── 输入 ──────────────────────────────────────────────────────────\n readonly records = input.required<EntityTableRecord[]>();\n readonly columns = input.required<ListTableConstructorOptions['columns']>();\n readonly isDarkMode = input(false);\n readonly idField = input('id');\n readonly nonClearableFields = input<ReadonlySet<string>>(new Set());\n readonly tableOptions = input<Partial<ListTableConstructorOptions>>();\n readonly cellErrorDetector = input<(record: EntityTableRecord, field: string) => string | null>();\n readonly loading = input(false);\n /** 业务层回调判断单元格是否可清空(返回 false 跳过),替代领域特定的硬编码逻辑 */\n readonly cellClearable = input<(record: Record<string, unknown>, field: string) => boolean>();\n /** 触底时加载更多数据的回调,由表格内部在滚动到底部时调用 */\n readonly loadMore = input<() => void>();\n /** 加载更多中状态(已有数据,底部小 spinner,不拦截滚动) */\n readonly loadingMore = input(false);\n\n // ── 输出 ──────────────────────────────────────────────────────────\n readonly cellChanged = output<CellChangeEvent>();\n readonly rowDeleted = output<EntityTableRecord>();\n readonly iconClicked = output<{ name: string; record: EntityTableRecord }>();\n readonly batchUpdated = output<BatchChangeItem[]>();\n readonly rowReordered = output<string[]>();\n readonly scrollNearBottom = output<void>();\n\n readonly cellTooltip = this.#cellTooltip;\n readonly headerHeight = this.#headerHeight;\n\n get tableInstance(): VTable.ListTable | null {\n return this.#tableInstance;\n }\n\n constructor() {\n if (isPlatformBrowser(this.#platformId)) {\n afterNextRender(() => {\n if (this.#destroyed) return;\n const el = this.tableContainer()?.nativeElement;\n if (el && !this.#tableInstance && this.columns()?.length) {\n this.#initTable(el);\n this.#prevColumns = this.columns();\n this.#tableReady.set(true);\n }\n });\n\n effect(() => {\n const records = this.records();\n const columns = this.columns();\n const ready = untracked(() => this.#tableReady());\n if (!this.#tableInstance) {\n if (!ready && columns?.length) {\n const el = this.tableContainer()?.nativeElement;\n if (el) {\n this.#initTable(el);\n this.#prevColumns = columns;\n this.#tableReady.set(true);\n }\n }\n return;\n }\n const columnsChanged = columns !== this.#prevColumns;\n if (columnsChanged) {\n updateTableRecords(this.#tableInstance, records, this.#prevColumns ?? columns, columns);\n this.#prevColumns = columns;\n this.#prevRecords = records;\n } else if (records !== this.#prevRecords) {\n this.#tableInstance.setRecords(records);\n this.#prevRecords = records;\n }\n });\n\n effect(() => {\n this.isDarkMode();\n this.redrawTheme();\n });\n }\n }\n /**\n * 从业务层回滚单元格值(校验失败时恢复原值)。\n * 避免外部直接访问 tableInstance。\n */\n changeCellValue(col: number, row: number, value: unknown): void {\n if (this.#tableInstance) vtChangeCellValue(this.#tableInstance, col, row, value);\n }\n\n redrawTheme(): void {\n if (this.#tableInstance) {\n this.#tableInstance.updateTheme(createTheme(this.isDarkMode(), getCSSVariables()));\n }\n }\n\n ngOnDestroy(): void {\n this.#destroyed = true;\n this.#tooltip.cleanup();\n if (this.#containerKeydownHandler) {\n this.#container?.removeEventListener('keydown', this.#containerKeydownHandler);\n this.#containerKeydownHandler = null;\n }\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = null;\n if (this.#tableInstance) {\n completeTableEdit(this.#tableInstance);\n this.#tableInstance.release();\n }\n this.#tableInstance = null;\n this.#container = null;\n this.#tableReady.set(false);\n }\n\n #initTable(container: HTMLElement): void {\n const records = this.records();\n const table = createListTable(container, records, this.columns(), this.isDarkMode(), this.tableOptions());\n this.#tableInstance = table;\n this.#prevRecords = records;\n this.#container = container;\n const h = table.getRowHeight(0);\n if (h > 0) this.#headerHeight.set(h);\n\n this.#resizeObserver = new ResizeObserver(() => table.resize());\n this.#resizeObserver.observe(container);\n table.updateTheme(createTheme(this.isDarkMode(), getCSSVariables()));\n patchDragIconForReadonlyRows(table);\n this.#bindTableEvents(table, container);\n }\n\n #bindTableEvents(table: VTable.ListTable, container: HTMLElement): void {\n table.on('change_cell_value', (args: { col: number; row: number; changedValue: string | number }) => {\n this.#handleCellChange(args.col, args.row, args.changedValue);\n });\n table.on('switch_state_change', (args: { col: number; row: number; checked: boolean }) => {\n this.#handleCellChange(args.col, args.row, args.checked);\n });\n table.on('checkbox_state_change', (args: { col: number; row: number; checked: boolean }) => {\n this.#handleCellChange(args.col, args.row, args.checked);\n });\n table.on('icon_click', (args: { name: string; col: number; row: number }) => {\n completeTableEdit(table);\n const record = table.getRecordByCell(args.col, args.row) as EntityTableRecord | undefined;\n if (!record) return;\n if (args.name === 'delete-action') this.rowDeleted.emit(record);\n else this.iconClicked.emit({ name: args.name, record });\n });\n table.on('mouseenter_cell', (args: { col: number; row: number }) => this.#showCellError(args.col, args.row));\n table.on('mouseleave_cell', () => this.#tooltip.hide(v => this.#cellTooltip.set(v)));\n table.on('selected_cell', (args: { col: number; row: number }) => {\n this.#selectedCell = { col: args.col, row: args.row };\n });\n table.on('change_header_position', () => {\n const ids = collectReorderedIds(table, this.idField());\n if (ids.length > 0) this.rowReordered.emit(ids);\n });\n table.on('scroll', (args: { scrollDirection: string; scrollRatioY?: number; dy?: number }) => {\n if (\n args.scrollDirection === 'vertical' &&\n (args.dy ?? 0) > 0 &&\n (args.scrollRatioY ?? 0) > 0.9 &&\n !this.loadingMore()\n ) {\n const fn = this.loadMore();\n if (fn) {\n fn();\n } else {\n this.scrollNearBottom.emit();\n }\n }\n });\n\n this.#containerKeydownHandler = (e: KeyboardEvent) =>\n handleTableKeydown(\n {\n getTable: () => this.#tableInstance,\n getSelectedCell: () => this.#selectedCell,\n getColDef: col => this.#getColDef(col) as { cellType?: string; field?: string },\n onCopy: () => void this.#clipboard.copy(table, this.columns() as Record<string, unknown>[]),\n onPaste: () => void this.#pasteFromClipboard(),\n onDelete: () => this.#deleteSelectedCells(),\n onCellChange: (col, row, val) => this.#handleCellChange(col, row, val)\n },\n e\n );\n container.addEventListener('keydown', this.#containerKeydownHandler);\n }\n\n #getColDef(col: number): Record<string, unknown> | undefined {\n return (this.columns() as Record<string, unknown>[])?.[col - ROW_SERIES_COL_OFFSET];\n }\n\n #handleCellChange(col: number, row: number, changedValue: unknown): void {\n const record = this.#tableInstance?.getRecordByCell(col, row) as EntityTableRecord | undefined;\n const fieldName = (this.#getColDef(col) as { field?: string })?.field;\n if (!record || !fieldName) return;\n this.cellChanged.emit({ col, row, field: fieldName, value: changedValue, record });\n }\n\n #showCellError(col: number, row: number): void {\n const table = this.#tableInstance;\n if (!table) return;\n const detector = this.cellErrorDetector();\n if (!detector) return;\n const record = table.getRecordByCell(col, row) as EntityTableRecord | undefined;\n if (!record) return;\n const field = (this.#getColDef(col) as { field?: string })?.field;\n if (!field) return;\n const content = detector(record, field);\n if (!content) return;\n this.#tooltip.showError(table, col, row, content, v => this.#cellTooltip.set(v), this.#config?.tooltipDelay);\n }\n\n /** 将 PendingWrite[] 按 idField 归并为 BatchChangeItem[] */\n #groupWrites(writes: PendingWrite[]): BatchChangeItem[] {\n const map = new Map<string, Record<string, unknown>>();\n for (const w of writes) {\n const id = String((w.record as Record<string, unknown>)[this.idField()]);\n if (!map.has(id)) map.set(id, {});\n map.get(id)![w.field] = w.value;\n }\n return [...map.entries()].map(([recordId, changes]) => ({ recordId, changes }));\n }\n\n async #pasteFromClipboard(): Promise<void> {\n if (!this.#tableInstance) return;\n const writes = await this.#clipboard.paste(this.#tableInstance, this.columns() as Record<string, unknown>[]);\n if (writes.length > 0) {\n for (const w of writes) {\n if (typeof w.value === 'boolean') {\n setCellSwitchState(this.#tableInstance, w.col, w.row, w.value);\n }\n }\n this.batchUpdated.emit(this.#groupWrites(writes));\n }\n }\n\n #deleteSelectedCells(): void {\n const table = this.#tableInstance;\n if (!table) return;\n const columns = this.columns() as { field?: string; cellType?: string | ((...a: unknown[]) => string) }[];\n const { writes, boolCells } = collectDeleteWrites(table, columns, this.nonClearableFields(), this.cellClearable());\n for (const bc of boolCells) setCellSwitchState(table, bc.col, bc.row, false);\n if (writes.length > 0) this.batchUpdated.emit(this.#groupWrites(writes));\n }\n}\n","<div class=\"relative h-full w-full overflow-hidden\">\n <div class=\"absolute inset-0\" #tableContainer></div>\n @if (records().length === 0 && !loading()) {\n <div\n class=\"text-base-content/40 absolute inset-x-0 bottom-0 flex items-center justify-center text-sm\"\n [style.top.px]=\"headerHeight()\"\n aria-label=\"暂无数据\"\n role=\"status\"\n >\n <div class=\"empty-slot\">\n <ng-content select=\"[emptyState]\"></ng-content>\n </div>\n <div class=\"empty-default flex flex-col items-center gap-3\">\n <svg\n aria-hidden=\"true\"\n fill=\"none\"\n height=\"40\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.2\"\n viewBox=\"0 0 24 24\"\n width=\"40\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect height=\"18\" rx=\"2\" width=\"18\" x=\"3\" y=\"3\" />\n <path d=\"M3 9h18\" />\n <path d=\"M9 9v12\" />\n <path d=\"M3 15h18\" />\n </svg>\n <span>暂无数据</span>\n </div>\n </div>\n }\n @if (loading()) {\n <div class=\"bg-base-100/60 absolute inset-0 z-10 flex items-center justify-center\">\n <span class=\"loading loading-spinner loading-md text-primary\"></span>\n </div>\n }\n @if (loadingMore()) {\n <div class=\"pointer-events-none absolute right-0 bottom-0 left-0 z-10 flex justify-center py-1.5\">\n <span class=\"loading loading-dots loading-sm text-primary\"></span>\n </div>\n }\n @if (cellTooltip(); as tip) {\n <div\n class=\"bg-base-300 text-base-content border-base-300 pointer-events-none fixed z-[100] max-w-xs rounded border px-2 py-1.5 text-xs shadow-lg\"\n [style.left.px]=\"tip.x\"\n [style.top.px]=\"tip.y\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n role=\"tooltip\"\n >\n {{ tip.content }}\n </div>\n }\n</div>\n","import type { BatchChangeItem, CellChangeEvent, EntityTableRecord } from '@aiao/rxdb-model';\nimport { ChangeDetectionStrategy, Component, computed, input, output, viewChild } from '@angular/core';\nimport type { ListTable, ListTableConstructorOptions } from '@visactor/vtable';\nimport { EntityTableComponent } from '../entity-table/entity-table.component';\n\n/**\n * 集成查询构建器的实体表格组件\n *\n * 在实体表格上方提供筛选区域位置(通过内容投影),\n * 将 rxdb-query-builder 的查询结果传递给底层 EntityTableComponent。\n *\n * 使用方式:\n * ```html\n * <rxdb-query-table [records]=\"filteredRecords()\" [columns]=\"columns\">\n * <div filterBar>\n * <rxdb-query-builder [fields]=\"fields\" (queryChange)=\"onQueryChange($event)\" />\n * </div>\n * <div emptyState>暂无数据</div>\n * </rxdb-query-table>\n * ```\n */\n@Component({\n selector: 'rxdb-query-table',\n imports: [EntityTableComponent],\n templateUrl: './query-table.component.html',\n styleUrl: './query-table.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QueryTableComponent {\n readonly records = input.required<EntityTableRecord[]>();\n readonly columns = input.required<ListTableConstructorOptions['columns']>();\n readonly idField = input('id');\n readonly nonClearableFields = input<ReadonlySet<string>>(new Set());\n readonly tableOptions = input<Partial<ListTableConstructorOptions>>();\n readonly cellErrorDetector = input<(record: EntityTableRecord, field: string) => string | null>();\n readonly isDarkMode = input(false);\n /** 业务层回调判断单元格是否可清空 */\n readonly cellClearable = input<(record: Record<string, unknown>, field: string) => boolean>();\n\n /** 查询条件是否激活(显示筛选状态标签) */\n readonly queryActive = input(false);\n /** 结果总数(显示在筛选状态栏中) */\n readonly totalCount = input<number>();\n /** 筛选后结果数 */\n readonly filteredCount = input<number>();\n /** 是否显示加载状态 */\n readonly loading = input(false);\n /** 加载更多中(已有数据,底部小 spinner,不拦截滚动) */\n readonly loadingMore = input(false);\n /** 触底时加载更多数据的回调,透传给 EntityTableComponent */\n readonly loadMore = input<() => void>();\n\n readonly cellChanged = output<CellChangeEvent>();\n readonly rowDeleted = output<EntityTableRecord>();\n readonly iconClicked = output<{ name: string; record: EntityTableRecord }>();\n readonly batchUpdated = output<BatchChangeItem[]>();\n readonly rowReordered = output<string[]>();\n readonly scrollNearBottom = output<void>();\n\n readonly entityTable = viewChild(EntityTableComponent);\n\n readonly statusText = computed(() => {\n const total = this.totalCount();\n const filtered = this.filteredCount();\n if (total == null) return '';\n if (filtered != null && filtered !== total) return `${filtered} / ${total}`;\n return `${total}`;\n });\n\n get tableInstance(): ListTable | null {\n return this.entityTable()?.tableInstance ?? null;\n }\n\n changeCellValue(col: number, row: number, value: unknown): void {\n this.entityTable()?.changeCellValue(col, row, value);\n }\n\n redrawTheme(): void {\n this.entityTable()?.redrawTheme();\n }\n}\n","<div class=\"flex h-full w-full flex-col overflow-hidden\">\n <!-- 筛选栏插槽 -->\n <ng-content select=\"[filterBar]\"></ng-content>\n\n <!-- 筛选状态栏 -->\n @if (queryActive() && statusText()) {\n <div class=\"text-base-content/60 flex items-center gap-2 border-b px-3 py-1 text-xs\">\n <span>{{ statusText() }}</span>\n </div>\n }\n\n <!-- 表格主体 -->\n <div class=\"min-h-0 flex-1\">\n <rxdb-entity-table\n [cellClearable]=\"cellClearable()\"\n [cellErrorDetector]=\"cellErrorDetector()\"\n [columns]=\"columns()\"\n [idField]=\"idField()\"\n [isDarkMode]=\"isDarkMode()\"\n [loading]=\"loading()\"\n [loadingMore]=\"loadingMore()\"\n [loadMore]=\"loadMore()\"\n [nonClearableFields]=\"nonClearableFields()\"\n [records]=\"records()\"\n [tableOptions]=\"tableOptions()\"\n (batchUpdated)=\"batchUpdated.emit($event)\"\n (cellChanged)=\"cellChanged.emit($event)\"\n (iconClicked)=\"iconClicked.emit($event)\"\n (rowDeleted)=\"rowDeleted.emit($event)\"\n (rowReordered)=\"rowReordered.emit($event)\"\n (scrollNearBottom)=\"scrollNearBottom.emit()\"\n >\n <ng-content select=\"[emptyState]\"></ng-content>\n </rxdb-entity-table>\n </div>\n</div>\n","import { applyPopoverPosition, findNodeByValue, getDisplayNamePath, type FieldTreeNode } from '@aiao/rxdb-model';\nimport { ActiveDescendantKeyManager, type Highlightable } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n Injector,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport {\n BracesIcon,\n CalendarIcon,\n ChevronDownIcon,\n ChevronRightIcon,\n HashIcon,\n Link2Icon,\n ListChecksIcon,\n ListIcon,\n LucideAngularModule,\n TableIcon,\n ToggleLeftIcon,\n TypeIcon\n} from 'lucide-angular';\n\nlet _uid = 0;\n\n/** 扁平化的可见树节点(用于渲染和键盘导航) */\ninterface FlatItem {\n node: FieldTreeNode;\n depth: number;\n isExpandable: boolean;\n isExpanded: boolean;\n}\n\n/**\n * 树节点 Directive,实现 CDK {@link Highlightable} 接口\n *\n * 用于 {@link ActiveDescendantKeyManager} 管理键盘导航时的激活样式。\n * `exportAs: 'rxdbTreeItem'` 允许模板中通过 `#ref=\"rxdbTreeItem\"` 访问实例。\n */\n@Directive({\n selector: '[rxdbTreeItem]',\n standalone: true,\n exportAs: 'rxdbTreeItem'\n})\nexport class TreeItemDirective implements Highlightable {\n private readonly _active = signal(false);\n readonly isActive = this._active.asReadonly();\n\n setActiveStyles(): void {\n this._active.set(true);\n }\n\n setInactiveStyles(): void {\n this._active.set(false);\n }\n}\n\n/**\n * 树形下拉选择组件\n *\n * @description\n * 基于 Popover API 和 `@angular/cdk/a11y` 的树形字段选择器:\n * - 使用原生 Popover API,在 `overflow` 容器中不被裁剪\n * - 支持关键字过滤(自动展开匹配路径)\n * - 支持展开/折叠关系节点\n * - 键盘导航:↑↓ 移动、→ 展开、← 折叠、Enter 选中、Escape 关闭\n * - 使用 CDK `ActiveDescendantKeyManager` + `aria-activedescendant` 满足 WAI-ARIA 无障碍规范\n *\n * @example\n * ```html\n * <rxdb-tree-select\n * [nodes]=\"fieldTree()\"\n * [selected]=\"selectedField()\"\n * placeholder=\"选择字段\"\n * (selectChange)=\"onFieldSelect($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'rxdb-tree-select',\n standalone: true,\n imports: [FormsModule, TreeItemDirective, LucideAngularModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <!-- 触发按钮 -->\n <button\n class=\"select select-sm text-left\"\n #trigger\n [attr.popovertarget]=\"uid\"\n [style.min-width]=\"minWidth()\"\n aria-haspopup=\"tree\"\n type=\"button\"\n >\n @if (selectedNode(); as node) {\n <lucide-icon\n class=\"w-3.5 shrink-0\"\n [class]=\"typeColorMap[node.type] ?? defaultTypeColor\"\n [img]=\"typeIconMap[node.type] ?? defaultTypeIcon\"\n size=\"14\"\n />\n }\n <span class=\"min-w-0 grow truncate\">{{ displayValue() }}</span>\n </button>\n\n <!-- Popover 浮层 -->\n <div\n class=\"bg-base-100 text-base-content rounded-box border-base-300 border shadow-xl\"\n #popoverEl\n [id]=\"uid\"\n [style.min-width]=\"minWidth()\"\n (beforetoggle)=\"onBeforeToggle($event)\"\n (keydown)=\"onKeydown($event)\"\n (toggle)=\"onToggle($event)\"\n popover\n tabindex=\"-1\"\n >\n <!-- 过滤输入框 -->\n <div class=\"mb-1 p-1\">\n <input\n class=\"input input-sm w-full\"\n #filterInput\n [attr.aria-activedescendant]=\"activeItemId()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-expanded]=\"true\"\n [attr.aria-owns]=\"listId\"\n [ngModel]=\"filterText()\"\n (ngModelChange)=\"filterText.set($event)\"\n aria-autocomplete=\"list\"\n placeholder=\"搜索字段...\"\n role=\"combobox\"\n type=\"text\"\n />\n </div>\n\n <!-- 树形列表 -->\n <ul\n class=\"menu menu-sm max-h-60 w-full flex-nowrap overflow-y-auto px-2\"\n [attr.aria-label]=\"placeholder()\"\n [id]=\"listId\"\n role=\"tree\"\n >\n @for (item of visibleItems(); track trackItem(item)) {\n <li [style.padding-left.rem]=\"item.depth * 0.75\" role=\"none\">\n <button\n class=\"flex w-full items-center gap-1.5 text-left text-sm\"\n #treeItemRef=\"rxdbTreeItem\"\n [attr.aria-expanded]=\"item.isExpandable ? item.isExpanded : null\"\n [attr.aria-selected]=\"!item.isExpandable ? item.node.value === selected() : null\"\n [class.bg-primary/15]=\"!item.isExpandable && item.node.value === selected()\"\n [class.font-semibold]=\"!item.isExpandable && item.node.value === selected()\"\n [class.menu-focus]=\"treeItemRef.isActive()\"\n [id]=\"uid + '-item-' + item.node.value\"\n (click)=\"onItemClick(item)\"\n role=\"treeitem\"\n rxdbTreeItem\n type=\"button\"\n >\n <lucide-icon\n class=\"w-3.5 shrink-0\"\n [class]=\"typeColorMap[item.node.type] ?? defaultTypeColor\"\n [img]=\"typeIconMap[item.node.type] ?? defaultTypeIcon\"\n size=\"14\"\n />\n <span class=\"min-w-0 grow truncate\">{{ item.node.displayName || item.node.label }}</span>\n @if (!item.isExpandable && item.node.value === selected()) {\n <svg\n class=\"text-primary h-3 w-3 shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2.5\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n }\n @if (item.isExpandable) {\n <span class=\"shrink-0 text-xs opacity-40\">{{ item.node.children!.length }}</span>\n @if (item.isExpanded) {\n <lucide-icon class=\"w-3.5 shrink-0 opacity-50\" [img]=\"ChevronDownIcon\" size=\"14\" />\n } @else {\n <lucide-icon class=\"w-3.5 shrink-0 opacity-50\" [img]=\"ChevronRightIcon\" size=\"14\" />\n }\n }\n </button>\n </li>\n } @empty {\n <li class=\"px-3 py-1.5 text-sm opacity-50\">无匹配字段</li>\n }\n </ul>\n </div>\n `\n})\nexport class TreeSelectComponent {\n private readonly trigger = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n private readonly popoverEl = viewChild.required<ElementRef<HTMLElement>>('popoverEl');\n private readonly filterInput = viewChild<ElementRef<HTMLInputElement>>('filterInput');\n private readonly treeItemDirs = viewChildren(TreeItemDirective);\n private readonly expandedPaths = signal(new Set<string>());\n private readonly keyManager: ActiveDescendantKeyManager<TreeItemDirective>;\n private readonly _activeIdx = signal(-1);\n\n protected readonly uid = `rxdb-ts-${++_uid}`;\n protected readonly listId = `${this.uid}-list`;\n protected readonly filterText = signal('');\n protected readonly ChevronDownIcon = ChevronDownIcon;\n protected readonly ChevronRightIcon = ChevronRightIcon;\n protected readonly typeIconMap: Partial<Record<string, typeof ChevronDownIcon>> = {\n string: TypeIcon,\n number: HashIcon,\n boolean: ToggleLeftIcon,\n date: CalendarIcon,\n array: ListIcon,\n object: BracesIcon,\n relation: Link2Icon,\n enum: ListChecksIcon,\n keyValue: TableIcon\n };\n protected readonly typeColorMap: Partial<Record<string, string>> = {\n string: 'text-success',\n number: 'text-warning',\n boolean: 'text-info',\n date: 'text-secondary',\n array: 'text-accent',\n object: 'text-base-content/60',\n relation: 'text-primary',\n enum: 'text-warning',\n keyValue: 'text-accent'\n };\n protected readonly defaultTypeIcon = TypeIcon;\n protected readonly defaultTypeColor = 'text-base-content/40';\n\n readonly nodes = input.required<FieldTreeNode[]>();\n readonly selected = input<string>('');\n readonly placeholder = input<string>('请选择');\n readonly minWidth = input<string>('14rem');\n readonly selectChange = output<string>();\n\n readonly displayValue = computed(() => {\n const sel = this.selected();\n return sel ? getDisplayNamePath(this.nodes(), sel) || sel : this.placeholder();\n });\n\n readonly selectedNode = computed(() => {\n const sel = this.selected();\n return sel ? findNodeByValue(this.nodes(), sel) : null;\n });\n\n readonly visibleItems = computed<FlatItem[]>(() => {\n const filter = this.filterText().toLowerCase().trim();\n const expanded = this.expandedPaths();\n return filter ? buildFilteredItems(this.nodes(), filter) : buildExpandedItems(this.nodes(), expanded, 0);\n });\n\n readonly activeItemId = computed(() => {\n const idx = this._activeIdx();\n if (idx < 0) return null;\n const vis = this.visibleItems();\n return idx < vis.length ? `${this.uid}-item-${vis[idx].node.value}` : null;\n });\n\n constructor() {\n const injector = inject(Injector);\n\n // Signal 初始化必须在 injection context 内(constructor)\n this.keyManager = new ActiveDescendantKeyManager(this.treeItemDirs, injector).withWrap().withHomeAndEnd();\n\n // 同步 key manager 的激活索引到本地 signal(用于 aria-activedescendant)\n this.keyManager.change.pipe(takeUntilDestroyed()).subscribe(idx => this._activeIdx.set(idx));\n\n // 过滤文本变化时,自动高亮第一项\n effect(() => {\n this.filterText();\n untracked(() => {\n setTimeout(() => {\n this.keyManager.setFirstItemActive();\n this._activeIdx.set(this.keyManager.activeItemIndex ?? -1);\n });\n });\n });\n }\n\n onBeforeToggle(event: Event): void {\n const te = event as ToggleEvent;\n if (te.newState === 'open') {\n applyPopoverPosition(this.popoverEl().nativeElement, this.trigger().nativeElement.getBoundingClientRect());\n this.filterText.set('');\n } else {\n this._activeIdx.set(-1);\n this.keyManager.setActiveItem(-1);\n }\n }\n\n onToggle(event: Event): void {\n if ((event as ToggleEvent).newState === 'open') {\n this.filterInput()?.nativeElement.focus();\n setTimeout(() => {\n this.keyManager.setFirstItemActive();\n this._activeIdx.set(this.keyManager.activeItemIndex ?? -1);\n });\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowUp': {\n event.preventDefault();\n this.keyManager.onKeydown(event);\n this.scrollActiveIntoView();\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n const item = this.visibleItems()[this.keyManager.activeItemIndex ?? -1];\n if (item?.isExpandable && !item.isExpanded) this.toggleExpand(item.node.value);\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n const item = this.visibleItems()[this.keyManager.activeItemIndex ?? -1];\n if (item?.isExpandable && item.isExpanded) this.toggleExpand(item.node.value);\n break;\n }\n case 'Enter': {\n event.preventDefault();\n const item = this.visibleItems()[this.keyManager.activeItemIndex ?? -1];\n if (item) this.onItemClick(item);\n break;\n }\n case 'Escape': {\n event.preventDefault();\n this.popoverEl().nativeElement.hidePopover();\n this.trigger().nativeElement.focus();\n break;\n }\n case 'Tab': {\n this.popoverEl().nativeElement.hidePopover();\n break;\n }\n }\n }\n\n onItemClick(item: FlatItem): void {\n if (item.isExpandable) {\n this.toggleExpand(item.node.value);\n } else {\n this.selectChange.emit(item.node.value);\n this.popoverEl().nativeElement.hidePopover();\n this.trigger().nativeElement.focus();\n }\n }\n /** 追踪函数:使用 value + isExistsOption 避免重复 key */\n protected trackItem(item: FlatItem): string {\n return item.node.isExistsOption ? `${item.node.value}:exists` : item.node.value;\n }\n private scrollActiveIntoView(): void {\n const idx = this.keyManager.activeItemIndex ?? -1;\n const item = this.visibleItems()[idx];\n if (!item) return;\n document.getElementById(`${this.uid}-item-${item.node.value}`)?.scrollIntoView({ block: 'nearest' });\n }\n\n private toggleExpand(value: string): void {\n this.expandedPaths.update(prev => {\n const next = new Set(prev);\n if (next.has(value)) {\n next.delete(value);\n } else {\n next.add(value);\n }\n return next;\n });\n }\n}\n\n// ─── 辅助函数 ───────────────────────────────────────────────────────────────────\n\nfunction buildExpandedItems(nodes: FieldTreeNode[], expanded: Set<string>, depth: number): FlatItem[] {\n const result: FlatItem[] = [];\n for (const node of nodes) {\n const isExpandable = !!node.children?.length;\n const isExpanded = isExpandable && expanded.has(node.value);\n result.push({ node, depth, isExpandable, isExpanded });\n if (isExpanded) {\n result.push(...buildExpandedItems(node.children!, expanded, depth + 1));\n }\n }\n return result;\n}\n\nfunction buildFilteredItems(nodes: FieldTreeNode[], filter: string, depth = 0): FlatItem[] {\n const result: FlatItem[] = [];\n for (const node of nodes) {\n const selfMatches = nodeMatchesFilter(node, filter);\n const isExpandable = !!node.children?.length;\n const childMatches = isExpandable && hasMatchingDescendant(node.children!, filter);\n\n if (selfMatches || childMatches) {\n result.push({ node, depth, isExpandable, isExpanded: isExpandable && childMatches });\n if (isExpandable && (selfMatches || childMatches)) {\n result.push(...buildFilteredItems(node.children!, filter, depth + 1));\n }\n }\n }\n return result;\n}\n\nfunction nodeMatchesFilter(node: FieldTreeNode, filter: string): boolean {\n return (\n node.label.toLowerCase().includes(filter) ||\n node.displayName.toLowerCase().includes(filter) ||\n (node.description?.toLowerCase().includes(filter) ?? false)\n );\n}\n\nfunction hasMatchingDescendant(nodes: FieldTreeNode[], filter: string): boolean {\n return nodes.some(\n n => nodeMatchesFilter(n, filter) || (n.children?.length ? hasMatchingDescendant(n.children, filter) : false)\n );\n}\n\n/** 从树中找到节点(同 rxdb-model 的 findNodeByValue,此处作为 tree-select 内部别名) */\nexport { findNodeByValue };\n","import { buildFieldTree, type FieldMetadata } from '@aiao/rxdb-model';\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { TreeSelectComponent } from '../tree-select/tree-select.component';\n\n/**\n * 字段选择器组件\n *\n * @description\n * 使用 Popover API 展示树形字段结构,支持过滤和嵌套关系字段的展开/折叠。\n * 基于 CDK `ActiveDescendantKeyManager` 提供完整键盘导航和无障碍支持。\n * 不依赖任何第三方 UI 库。\n *\n * 支持两种使用方式:\n * 1. 直接模板使用:监听 `(fieldChange)` output 事件\n * 2. 通过 NgComponentOutlet 注入:传入 `fieldChangeFn` 回调 input\n */\n@Component({\n selector: 'rxdb-field-selector',\n standalone: true,\n imports: [TreeSelectComponent],\n template: `\n <rxdb-tree-select\n [nodes]=\"fieldTree()\"\n [placeholder]=\"placeholder()\"\n [selected]=\"selectedField()\"\n (selectChange)=\"onSelect($event)\"\n minWidth=\"14rem\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FieldSelectorComponent {\n readonly fields = input.required<FieldMetadata[]>();\n readonly selectedField = input<string>('');\n readonly placeholder = input<string>('选择字段');\n\n /** 通过 NgComponentOutlet 注入时使用的回调 input */\n readonly fieldChangeFn = input<((field: string) => void) | undefined>(undefined);\n\n /** 直接模板使用时的 output 事件 */\n readonly fieldChange = output<string>();\n\n readonly fieldTree = computed(() => buildFieldTree(this.fields()));\n\n onSelect(field: string): void {\n this.fieldChange.emit(field);\n this.fieldChangeFn()?.(field);\n }\n}\n","import { applyPopoverPosition, findOptionLabel } from '@aiao/rxdb-model';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n output,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nlet _uid = 0;\n\n/**\n * 基于 Popover API 的下拉选择组件\n *\n * @description\n * 使用浏览器原生 Popover API 渲染选项列表,在 top layer 渲染,\n * 确保在 `overflow: auto/hidden` 容器内也不会被裁剪。\n * 支持关键字过滤、键盘导航(↑↓ 移动、Enter 选中、Escape 关闭)。\n * 打开弹框自动高亮第一项,搜索后也自动高亮第一条结果。\n */\n@Component({\n selector: 'rxdb-popover-select',\n standalone: true,\n imports: [FormsModule],\n template: `\n <button\n class=\"select select-sm text-left\"\n #trigger\n [attr.popovertarget]=\"uid\"\n [style.min-width]=\"minWidth()\"\n type=\"button\"\n >\n {{ currentLabel() }}\n </button>\n <div\n class=\"bg-base-100 rounded-box border-base-300 border shadow-xl\"\n #popoverEl\n [id]=\"uid\"\n [style.min-width]=\"minWidth()\"\n (beforetoggle)=\"onBeforeToggle($event)\"\n (keydown)=\"onKeydown($event)\"\n (toggle)=\"onToggle($event)\"\n popover\n tabindex=\"-1\"\n >\n <div class=\"mb-1 p-2\">\n <input\n class=\"input input-sm w-full\"\n #filterInput\n [attr.aria-activedescendant]=\"activeItemId()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-expanded]=\"true\"\n [ngModel]=\"filterText()\"\n (ngModelChange)=\"filterText.set($event)\"\n aria-autocomplete=\"list\"\n placeholder=\"搜索...\"\n role=\"combobox\"\n type=\"text\"\n />\n </div>\n <ul class=\"menu menu-sm max-h-60 w-full flex-nowrap overflow-y-auto px-2\" [id]=\"listId\" role=\"listbox\">\n @for (option of filteredOptions(); track option.value; let i = $index) {\n <li role=\"none\">\n <button\n class=\"flex w-full items-center text-left text-sm\"\n [attr.aria-selected]=\"option.value === selected()\"\n [class.bg-primary/15]=\"option.value === selected()\"\n [class.font-semibold]=\"option.value === selected()\"\n [class.menu-focus]=\"activeIndex() === i\"\n [id]=\"uid + '-opt-' + option.value\"\n (click)=\"onSelect(option.value)\"\n role=\"option\"\n type=\"button\"\n >\n <span class=\"grow\">{{ option.label }}</span>\n @if (option.value === selected()) {\n <svg\n class=\"text-primary h-3 w-3 shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2.5\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n }\n </button>\n </li>\n } @empty {\n <li class=\"px-3 py-1.5 text-sm opacity-50\">无匹配项</li>\n }\n </ul>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopoverSelectComponent {\n private readonly trigger = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\n private readonly popoverEl = viewChild.required<ElementRef<HTMLElement>>('popoverEl');\n private readonly filterInput = viewChild<ElementRef<HTMLInputElement>>('filterInput');\n\n protected readonly uid = `rxdb-ps-${++_uid}`;\n protected readonly listId = `${this.uid}-list`;\n protected readonly filterText = signal('');\n protected readonly activeIndex = signal(0);\n\n readonly options = input.required<ReadonlyArray<{ value: string; label: string }>>();\n readonly selected = input<string>('');\n readonly placeholder = input<string>('请选择');\n readonly minWidth = input<string>('8rem');\n\n readonly selectChange = output<string>();\n\n readonly currentLabel = computed(() => findOptionLabel(this.options(), this.selected(), this.placeholder()));\n\n readonly filteredOptions = computed(() => {\n const filter = this.filterText().toLowerCase().trim();\n if (!filter) return this.options();\n return this.options().filter(opt => opt.label.toLowerCase().includes(filter));\n });\n\n readonly activeItemId = computed(() => {\n const idx = this.activeIndex();\n const opts = this.filteredOptions();\n return idx >= 0 && idx < opts.length ? `${this.uid}-opt-${opts[idx].value}` : null;\n });\n\n constructor() {\n effect(() => {\n this.filteredOptions();\n untracked(() => this.activeIndex.set(0));\n });\n }\n\n onBeforeToggle(event: Event): void {\n const te = event as ToggleEvent;\n if (te.newState === 'open') {\n applyPopoverPosition(this.popoverEl().nativeElement, this.trigger().nativeElement.getBoundingClientRect());\n this.filterText.set('');\n }\n }\n\n onToggle(event: Event): void {\n if ((event as ToggleEvent).newState === 'open') {\n this.filterInput()?.nativeElement.focus();\n this.activeIndex.set(0);\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n const opts = this.filteredOptions();\n const len = opts.length;\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n if (len > 0) {\n this.activeIndex.update(i => (i + 1) % len);\n this.scrollActiveIntoView();\n }\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n if (len > 0) {\n this.activeIndex.update(i => (i - 1 + len) % len);\n this.scrollActiveIntoView();\n }\n break;\n }\n case 'Enter': {\n event.preventDefault();\n const opt = opts[this.activeIndex()];\n if (opt) this.onSelect(opt.value);\n break;\n }\n case 'Escape': {\n event.preventDefault();\n this.popoverEl().nativeElement.hidePopover();\n this.trigger().nativeElement.focus();\n break;\n }\n case 'Tab': {\n this.popoverEl().nativeElement.hidePopover();\n break;\n }\n }\n }\n\n onSelect(value: string): void {\n this.selectChange.emit(value);\n this.popoverEl().nativeElement.hidePopover();\n this.trigger().nativeElement.focus();\n }\n\n private scrollActiveIntoView(): void {\n const opts = this.filteredOptions();\n const opt = opts[this.activeIndex()];\n if (!opt) return;\n document.getElementById(`${this.uid}-opt-${opt.value}`)?.scrollIntoView({ block: 'nearest' });\n }\n}\n","import { getDefaultOperatorRegistry, type FieldMetadata, type PropertyType } from '@aiao/rxdb-model';\nimport { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { PopoverSelectComponent } from '../popover-select/popover-select.component';\n\n/**\n * 操作符选择器组件\n *\n * @description\n * 基于 {@link PopoverSelectComponent} 提供操作符选择功能,\n * 自动根据字段类型或元数据筛选可用操作符。\n * 支持搜索过滤和键盘导航。\n *\n * 支持两种使用方式:\n * 1. 直接模板使用:监听 `(operatorChange)` output 事件\n * 2. 通过 NgComponentOutlet 注入:传入 `operatorChangeFn` 回调 input\n */\n@Component({\n selector: 'rxdb-operator-selector',\n standalone: true,\n imports: [PopoverSelectComponent],\n template: `\n <rxdb-popover-select\n [options]=\"operatorOptions()\"\n [selected]=\"selectedOperator()\"\n (selectChange)=\"onOperatorChange($event)\"\n minWidth=\"8rem\"\n placeholder=\"选择操作符\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class OperatorSelectorComponent {\n private readonly registry = getDefaultOperatorRegistry();\n\n readonly operatorOptions = computed(() => {\n const metadata = this.fieldMetadata();\n const operators =\n metadata ? this.registry.getForField(metadata) : this.registry.getForType(this.fieldType() as PropertyType);\n return operators.map(op => ({ value: op.key, label: op.label }));\n });\n\n readonly fieldMetadata = input<FieldMetadata | undefined>(undefined);\n readonly fieldType = input<string>('string');\n readonly selectedOperator = input<string>('=');\n\n /** 通过 NgComponentOutlet 注入时使用的回调 input */\n readonly operatorChangeFn = input<((op: string) => void) | undefined>(undefined);\n\n /** 直接模板使用时的 output 事件 */\n readonly operatorChange = output<string>();\n\n onOperatorChange(op: string): void {\n this.operatorChange.emit(op);\n this.operatorChangeFn()?.(op);\n }\n}\n","import {\n getDefaultValueForType as coreGetDefaultValue,\n getInputType as coreGetInputType,\n parseCommaSeparatedInput,\n UUID_RE,\n type FieldMetadata,\n type QueryBuilderRuleGroup\n} from '@aiao/rxdb-model';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n computed,\n effect,\n inject,\n Injector,\n input,\n OnDestroy,\n OnInit,\n output,\n signal,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PopoverSelectComponent } from '../popover-select/popover-select.component';\n\n/**\n * 值输入组件\n *\n * @description\n * 根据字段类型和操作符显示合适的输入控件:\n * - string: 文本输入框\n * - number: 数字输入框\n * - boolean: 切换开关\n * - date: 日期选择器\n * - enum: 下拉选择器\n * - array: 逗号分隔的文本输入\n * - range: 范围输入(双输入框或范围选择器)\n * - null/notNull 操作符: 无输入\n * - exists/notExists 操作符: 子查询构建器\n */\n@Component({\n selector: 'rxdb-value-input',\n standalone: true,\n imports: [CommonModule, PopoverSelectComponent],\n template: `\n @switch (inputType()) {\n @case ('none') {\n <span class=\"text-base-content/50 px-2 text-sm italic\">无需输入值</span>\n }\n @case ('uuid') {\n <div\n [attr.data-tip]=\"uuidError() || errorMessage() || null\"\n [class.tooltip-top]=\"!!uuidError() || hasError()\"\n [class.tooltip]=\"!!uuidError() || hasError()\"\n >\n <input\n class=\"input input-sm font-mono\"\n [class.input-error]=\"hasError() || !!uuidError()\"\n [value]=\"currentValue()\"\n (input)=\"onUuidChange($any($event.target).value)\"\n placeholder=\"输入 UUID\"\n style=\"min-width: 16rem\"\n type=\"text\"\n />\n </div>\n }\n @case ('subquery') {\n <div class=\"subquery-container w-full\">\n @if (!relationFields() || relationFields().length === 0) {\n <span class=\"text-base-content/50 px-2 text-sm italic\">存在/不存在(无子条件)</span>\n } @else {\n <div #subqueryContainer></div>\n }\n </div>\n }\n @case ('boolean') {\n <input\n class=\"toggle toggle-sm\"\n [checked]=\"!!currentValue()\"\n (change)=\"onValueChange($any($event.target).checked)\"\n type=\"checkbox\"\n />\n }\n @case ('enum') {\n <rxdb-popover-select\n [options]=\"enumSelectOptions()\"\n [selected]=\"currentValue()?.toString() ?? ''\"\n (selectChange)=\"onEnumSelect($event)\"\n minWidth=\"12rem\"\n placeholder=\"选择值\"\n />\n }\n @case ('enum-array') {\n <div [attr.data-tip]=\"errorMessage() || null\" [class.tooltip-top]=\"hasError()\" [class.tooltip]=\"hasError()\">\n <select\n class=\"select select-sm\"\n [class.select-error]=\"hasError()\"\n (change)=\"onEnumArrayChange($event)\"\n multiple\n style=\"min-width: 12rem; min-height: 6rem\"\n >\n @for (opt of enumOptions(); track opt) {\n <option [selected]=\"isEnumSelected(opt)\" [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n </div>\n }\n @case ('range') {\n @if (fieldType() === 'date') {\n <div\n class=\"flex items-center gap-2\"\n [attr.data-tip]=\"errorMessage() || null\"\n [class.tooltip-top]=\"hasError()\"\n [class.tooltip]=\"hasError()\"\n >\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"dateRangeStart()\"\n (change)=\"onDateRangeStartChange($any($event.target).value)\"\n style=\"width: 9rem\"\n type=\"date\"\n />\n <span class=\"text-base-content/50\">至</span>\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"dateRangeEnd()\"\n (change)=\"onDateRangeEndChange($any($event.target).value)\"\n style=\"width: 9rem\"\n type=\"date\"\n />\n </div>\n } @else {\n <div\n class=\"flex items-center gap-2\"\n [attr.data-tip]=\"errorMessage() || null\"\n [class.tooltip-top]=\"hasError()\"\n [class.tooltip]=\"hasError()\"\n >\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"rangeMin() ?? ''\"\n (input)=\"onRangeMinChange($any($event.target).value)\"\n placeholder=\"最小值\"\n style=\"width: 7rem\"\n type=\"number\"\n />\n <span class=\"text-base-content/50\">至</span>\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"rangeMax() ?? ''\"\n (input)=\"onRangeMaxChange($any($event.target).value)\"\n placeholder=\"最大值\"\n style=\"width: 7rem\"\n type=\"number\"\n />\n </div>\n }\n }\n @case ('number') {\n <div [attr.data-tip]=\"errorMessage() || null\" [class.tooltip-top]=\"hasError()\" [class.tooltip]=\"hasError()\">\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"currentValue() ?? ''\"\n (input)=\"onNumberInputChange($any($event.target).value)\"\n placeholder=\"输入数值\"\n type=\"number\"\n />\n </div>\n }\n @case ('date') {\n <div [attr.data-tip]=\"errorMessage() || null\" [class.tooltip-top]=\"hasError()\" [class.tooltip]=\"hasError()\">\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"currentDateStr()\"\n (change)=\"onNativeDateChange($any($event.target).value)\"\n style=\"width: 10rem\"\n type=\"date\"\n />\n </div>\n }\n @case ('array') {\n <div [attr.data-tip]=\"errorMessage() || null\" [class.tooltip-top]=\"hasError()\" [class.tooltip]=\"hasError()\">\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"arrayInputValue()\"\n (input)=\"onArrayInputChange($any($event.target).value)\"\n placeholder=\"输入多个值,用逗号分隔\"\n style=\"width: 100%; min-width: 12rem\"\n type=\"text\"\n />\n </div>\n }\n @default {\n <div [attr.data-tip]=\"errorMessage() || null\" [class.tooltip-top]=\"hasError()\" [class.tooltip]=\"hasError()\">\n <input\n class=\"input input-sm\"\n [class.input-error]=\"hasError()\"\n [value]=\"currentValue() ?? ''\"\n (input)=\"onValueChange($any($event.target).value)\"\n placeholder=\"输入值\"\n style=\"width: 100%; min-width: 12rem\"\n type=\"text\"\n />\n </div>\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ValueInputComponent implements OnInit, OnDestroy {\n private previousInputType: string | null = null;\n private subqueryComponentRef?: ComponentRef<any>;\n private subquerySubscription?: Subscription;\n private subqueryLoading = false;\n private readonly injector = inject(Injector);\n\n /** UUID 格式校验错误(基于 currentValue 派生,inputType 不是 uuid 时自动为空) */\n readonly uuidError = computed(() => {\n if (this.inputType() !== 'uuid') return '';\n const val = String(this.currentValue() ?? '').trim();\n return val && !UUID_RE.test(val) ? '请输入合法的 UUID 格式' : '';\n });\n\n @ViewChild('subqueryContainer', { read: ViewContainerRef })\n subqueryContainer?: ViewContainerRef;\n\n readonly fieldType = input<string>('string');\n readonly operator = input<string>('=');\n readonly value = input<unknown>('');\n readonly enumOptions = input<unknown[]>([]);\n readonly relationFields = input<FieldMetadata[]>([]);\n readonly where = input<QueryBuilderRuleGroup<Record<string, unknown>>>();\n\n readonly valueChange = output<unknown>();\n readonly whereChange = output<QueryBuilderRuleGroup<Record<string, unknown>> | undefined>();\n\n readonly errorMessage = input<string>('');\n readonly hasError = computed(() => !!this.errorMessage());\n\n readonly valueChangeFn = input<((value: unknown) => void) | undefined>(undefined);\n readonly whereChangeFn = input<\n ((where: QueryBuilderRuleGroup<Record<string, unknown>> | undefined) => void) | undefined\n >(undefined);\n\n /** 信号状态 —— 替代原先的可变类属性 */\n readonly currentValue = signal<any>('');\n readonly rangeMin = signal<any>(null);\n readonly rangeMax = signal<any>(null);\n readonly arrayInputValue = signal('');\n readonly currentDateStr = signal('');\n readonly dateRangeStart = signal('');\n readonly dateRangeEnd = signal('');\n\n readonly inputType = computed(() => coreGetInputType(this.fieldType(), this.operator(), this.enumOptions()));\n readonly enumSelectOptions = computed(() =>\n this.enumOptions().map(opt => ({ value: String(opt), label: String(opt) }))\n );\n\n constructor() {\n effect(() => {\n const currentType = this.inputType();\n if (this.previousInputType !== null && this.previousInputType !== currentType) {\n const defaultVal = coreGetDefaultValue(currentType);\n this.currentValue.set(defaultVal);\n this.valueChange.emit(defaultVal);\n this.valueChangeFn()?.(defaultVal);\n }\n this.previousInputType = currentType;\n });\n\n afterNextRender(\n () => {\n effect(\n () => {\n const isSubquery = this.inputType() === 'subquery';\n const hasRelationFields = this.relationFields().length > 0;\n if (isSubquery && hasRelationFields) {\n this.loadSubqueryComponent();\n } else {\n this.destroySubqueryComponent();\n }\n },\n { injector: this.injector }\n );\n },\n { injector: this.injector }\n );\n }\n\n ngOnDestroy(): void {\n this.destroySubqueryComponent();\n }\n\n ngOnInit(): void {\n const value = this.value();\n if (this.inputType() === 'range' && Array.isArray(value)) {\n if (this.fieldType() === 'date') {\n this.dateRangeStart.set(String(value[0] ?? ''));\n this.dateRangeEnd.set(String(value[1] ?? ''));\n } else {\n this.rangeMin.set(value[0]);\n this.rangeMax.set(value[1]);\n }\n } else if (this.inputType() === 'array' && Array.isArray(value)) {\n this.arrayInputValue.set(value.join(', '));\n } else if (this.inputType() === 'enum-array') {\n this.currentValue.set(Array.isArray(value) ? value : []);\n } else if (this.inputType() === 'date') {\n this.currentDateStr.set(typeof value === 'string' ? value : '');\n } else if (this.inputType() === 'uuid') {\n this.currentValue.set(typeof value === 'string' ? value : '');\n } else {\n this.currentValue.set(this.fieldType() === 'number' && value === '' ? null : value);\n }\n }\n\n /** 通用值变更(string / boolean…) */\n onValueChange(value: unknown): void {\n this.currentValue.set(value);\n this.valueChange.emit(value);\n this.valueChangeFn()?.(value);\n }\n\n /** UUID 值变更(带格式校验) */\n onUuidChange(value: string): void {\n this.currentValue.set(value);\n const trimmed = value.trim();\n this.valueChange.emit(trimmed.toLowerCase() || '');\n this.valueChangeFn()?.(trimmed.toLowerCase() || '');\n }\n\n /** 数字输入变更 */\n onNumberInputChange(value: string): void {\n const num = value === '' ? null : Number(value);\n this.currentValue.set(num);\n this.valueChange.emit(num);\n this.valueChangeFn()?.(num);\n }\n\n /** 枚举多选变更 */\n onEnumArrayChange(event: Event): void {\n const select = event.target as HTMLSelectElement;\n const selected = Array.from(select.selectedOptions).map(o => o.value);\n this.currentValue.set(selected);\n this.valueChange.emit(selected);\n this.valueChangeFn()?.(selected);\n }\n\n /** 枚举选项是否选中 */\n isEnumSelected(opt: unknown): boolean {\n const val = this.currentValue();\n return Array.isArray(val) && val.includes(opt);\n }\n\n /** 枚举值选中(来自 PopoverSelectComponent) */\n onEnumSelect(value: string): void {\n this.currentValue.set(value);\n this.valueChange.emit(value);\n this.valueChangeFn()?.(value);\n }\n\n /** 原生日期输入变更 */\n onNativeDateChange(value: string): void {\n this.currentDateStr.set(value);\n this.valueChange.emit(value || '');\n this.valueChangeFn()?.(value || '');\n }\n\n /** 日期范围起始变更 */\n onDateRangeStartChange(value: string): void {\n this.dateRangeStart.set(value);\n this.onDateRangePartChange();\n }\n\n /** 日期范围结束变更 */\n onDateRangeEndChange(value: string): void {\n this.dateRangeEnd.set(value);\n this.onDateRangePartChange();\n }\n\n onDateRangePartChange(): void {\n const start = this.dateRangeStart();\n const end = this.dateRangeEnd();\n if (start && end) {\n this.valueChange.emit([start, end]);\n this.valueChangeFn()?.([start, end]);\n } else {\n this.valueChange.emit([]);\n this.valueChangeFn()?.([]);\n }\n }\n\n /** 范围最小值变更 */\n onRangeMinChange(value: string): void {\n this.rangeMin.set(value === '' ? null : Number(value));\n this.onRangeChange();\n }\n\n /** 范围最大值变更 */\n onRangeMaxChange(value: string): void {\n this.rangeMax.set(value === '' ? null : Number(value));\n this.onRangeChange();\n }\n\n onRangeChange(): void {\n const min = this.rangeMin();\n const max = this.rangeMax();\n if (min != null && max != null) {\n this.valueChange.emit([min, max]);\n this.valueChangeFn()?.([min, max]);\n } else {\n this.valueChange.emit([]);\n this.valueChangeFn()?.([]);\n }\n }\n\n /** 数组输入值变更(逗号分隔字符串) */\n onArrayInputChange(value: string): void {\n this.arrayInputValue.set(value);\n const result = parseCommaSeparatedInput(value, this.fieldType());\n this.valueChange.emit(result);\n this.valueChangeFn()?.(result);\n }\n\n handleWhereChange(where: { combinator: 'and' | 'or'; rules: unknown[] } | undefined): void {\n const typedWhere = where as QueryBuilderRuleGroup<Record<string, unknown>> | undefined;\n this.whereChange.emit(typedWhere);\n this.whereChangeFn()?.(typedWhere);\n }\n\n private async loadSubqueryComponent(): Promise<void> {\n if (!this.subqueryContainer || this.subqueryComponentRef || this.subqueryLoading) return;\n this.subqueryLoading = true;\n try {\n const { SubqueryBuilderComponent } = await import('../subquery-builder/subquery-builder.component');\n this.subqueryComponentRef = this.subqueryContainer.createComponent(SubqueryBuilderComponent);\n this.subqueryComponentRef.setInput('fields', this.relationFields());\n this.subqueryComponentRef.setInput('initialQuery', this.where());\n this.subquerySubscription = this.subqueryComponentRef.instance.queryChange.subscribe(\n (query: { combinator: 'and' | 'or'; rules: unknown[] } | undefined) => {\n this.handleWhereChange(query);\n }\n );\n } catch (error) {\n console.error('[ValueInput] Failed to load SubqueryBuilderComponent:', error);\n } finally {\n this.subqueryLoading = false;\n }\n }\n\n private destroySubqueryComponent(): void {\n this.subquerySubscription?.unsubscribe();\n this.subquerySubscription = undefined;\n if (this.subqueryComponentRef) {\n this.subqueryComponentRef.destroy();\n this.subqueryComponentRef = undefined;\n }\n }\n}\n","import { FieldSelectorComponent } from '../field-selector/field-selector.component';\nimport { OperatorSelectorComponent } from '../operator-selector/operator-selector.component';\nimport { ValueInputComponent } from '../value-input/value-input.component';\nimport type { QueryBuilderTheme } from './query-builder-theme.token';\n\n/**\n * 默认主题(原生 HTML 实现)\n *\n * @description\n * 不依赖任何第三方 UI 库,使用标准 HTML 表单元素。\n * 适合轻量级场景或作为自定义主题的参考实现。\n *\n * @example\n * ```typescript\n * // 默认主题无需额外配置,开箱即用\n * imports: [QueryBuilderComponent]\n * ```\n */\nexport const DEFAULT_QUERY_BUILDER_THEME: QueryBuilderTheme = {\n fieldSelector: FieldSelectorComponent,\n operatorSelector: OperatorSelectorComponent,\n valueInput: ValueInputComponent\n};\n","import { InjectionToken, Provider, Type } from '@angular/core';\n\n/**\n * QueryBuilder 主题接口\n *\n * @description\n * 定义各 UI 插槽的组件类型,允许替换为不同的 UI 库实现\n *\n * 主题组件需遵循以下约定:\n * - 接受标准 signal inputs(字段、操作符、值等)\n * - 同时支持 output() 事件和可选的 onXxx 回调 input(供 NgComponentOutlet 使用)\n */\nexport interface QueryBuilderTheme {\n /** 字段选择器组件 */\n fieldSelector: Type<unknown>;\n /** 操作符选择器组件 */\n operatorSelector: Type<unknown>;\n /** 值输入组件 */\n valueInput: Type<unknown>;\n}\n\n/**\n * QueryBuilder 主题注入 Token\n *\n * @example\n * ```typescript\n * // 在应用根模块提供自定义主题\n * providers: [provideQueryBuilderTheme(QUERY_BUILDER_XXX_THEME)]\n * ```\n */\nexport const QUERY_BUILDER_THEME = new InjectionToken<QueryBuilderTheme>('QUERY_BUILDER_THEME');\n\n/**\n * 提供自定义主题\n */\nexport function provideQueryBuilderTheme(theme: QueryBuilderTheme): Provider {\n return { provide: QUERY_BUILDER_THEME, useValue: theme };\n}\n","import type { FieldMetadata, QueryBuilderRuleGroup, UIRule, ValidationError } from '@aiao/rxdb-model';\nimport { CommonModule, NgComponentOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked\n} from '@angular/core';\nimport { DEFAULT_QUERY_BUILDER_THEME } from '../theme/default-query-builder-theme';\nimport { QUERY_BUILDER_THEME } from '../theme/query-builder-theme.token';\n\n/**\n * 带 where 子查询的规则类型\n */\ntype UIRuleWithWhere = UIRule & {\n where?: QueryBuilderRuleGroup<Record<string, unknown>>;\n};\n\n/**\n * 单条查询规则组件\n *\n * @description\n * 显示一条查询规则的编辑界面:\n * - 字段选择器\n * - 操作符选择器\n * - 值输入框\n * - 删除按钮\n */\n@Component({\n selector: 'rxdb-query-rule',\n standalone: true,\n imports: [CommonModule, NgComponentOutlet],\n template: `\n <div class=\"rxdb-query-rule group flex flex-col rounded p-1\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <ng-container [ngComponentOutlet]=\"theme.fieldSelector\" [ngComponentOutletInputs]=\"fieldSelectorInputs()\" />\n <ng-container\n [ngComponentOutlet]=\"theme.operatorSelector\"\n [ngComponentOutletInputs]=\"operatorSelectorInputs()\"\n />\n @if (isExistsOperator()) {\n @if (!subqueryVisible()) {\n <button class=\"btn btn-ghost btn-xs\" (click)=\"onAddSubcondition()\" title=\"添加子条件\" type=\"button\">\n + 子条件(可选)\n </button>\n }\n } @else if (!isNoValueOperator()) {\n <ng-container [ngComponentOutlet]=\"theme.valueInput\" [ngComponentOutletInputs]=\"valueInputInputs()\" />\n }\n <button\n class=\"btn btn-ghost btn-xs btn-square text-base-content/30 hover:text-error ml-auto\"\n (click)=\"onRemove()\"\n title=\"删除条件\"\n type=\"button\"\n >\n ✕\n </button>\n </div>\n @if (isExistsOperator() && subqueryVisible()) {\n <ng-container [ngComponentOutlet]=\"theme.valueInput\" [ngComponentOutletInputs]=\"valueInputInputs()\" />\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QueryRuleComponent {\n private readonly existsOperators = new Set(['exists', 'notExists']);\n private readonly noValueOperators = new Set(['null', 'notNull']);\n\n /** 注入的主题(回退到默认主题) */\n protected readonly theme = inject(QUERY_BUILDER_THEME, { optional: true }) ?? DEFAULT_QUERY_BUILDER_THEME;\n\n readonly rule = input.required<UIRuleWithWhere>();\n readonly fields = input.required<FieldMetadata[]>();\n readonly errors = input<ValidationError[]>([]);\n\n readonly update = output<{ id: string; updates: Partial<UIRuleWithWhere> }>();\n readonly remove = output<void>();\n\n readonly fieldAsString = computed(() => this.rule().field);\n readonly ruleErrors = computed(() => {\n const seen = new Set<string>();\n return this.errors().filter(e => {\n if (e.field !== this.rule().field) return false;\n if (seen.has(e.message)) return false;\n seen.add(e.message);\n return true;\n });\n });\n readonly errorTooltip = computed(() =>\n this.ruleErrors()\n .map(e => e.message)\n .join(' | ')\n );\n readonly isExistsOperator = computed(() => this.existsOperators.has(this.rule().operator));\n readonly isNoValueOperator = computed(() => this.noValueOperators.has(this.rule().operator));\n\n /** 子查询面板是否展开(已有 where 规则时自动展开) */\n readonly showSubquery = signal(false);\n\n /**\n * 当规则的 where 已有内容时自动展开。\n * 使用 computed 包装监听 rule().where,在显示按钮前检查。\n */\n readonly subqueryVisible = computed(() => {\n const where = this.rule().where;\n if (where && where.rules && where.rules.length > 0) {\n return true;\n }\n return this.showSubquery();\n });\n\n readonly currentField = computed(() => {\n const fieldName = this.rule().field;\n return this.fields().find(f => f.name === fieldName);\n });\n\n readonly currentFieldType = computed(() => this.currentField()?.type ?? 'string');\n readonly currentEnumOptions = computed(() => this.currentField()?.enum ?? []);\n\n /** 当前字段的关系目标实体字段列表 */\n readonly currentRelationFields = computed(() => {\n return this.currentField()?.relationFields ?? [];\n });\n\n /** 规则的 where 子查询 */\n readonly ruleWhere = computed(() => this.rule().where);\n\n /** NgComponentOutlet inputs:字段选择器(fieldChangeCb 是 lazy 引用,声明顺序不影响运行时)*/\n readonly fieldSelectorInputs = computed(() => ({\n fields: this.fields(),\n selectedField: this.fieldAsString(),\n fieldChangeFn: this.fieldChangeCb\n }));\n\n /** NgComponentOutlet inputs:操作符选择器 */\n readonly operatorSelectorInputs = computed(() => ({\n fieldMetadata: this.currentField(),\n fieldType: this.currentFieldType(),\n selectedOperator: this.rule().operator,\n operatorChangeFn: this.operatorChangeCb\n }));\n\n /** NgComponentOutlet inputs:值输入 */\n readonly valueInputInputs = computed(() => ({\n fieldType: this.currentFieldType(),\n operator: this.rule().operator,\n value: this.rule().value,\n enumOptions: this.currentEnumOptions(),\n relationFields: this.currentRelationFields(),\n where: this.ruleWhere(),\n errorMessage: this.errorTooltip(),\n valueChangeFn: this.valueChangeCb,\n whereChangeFn: this.whereChangeCb\n }));\n\n /** 子条件清空/全部删除时自动收起面板并恢复 +子条件 按钮 */\n constructor() {\n effect(() => {\n const where = this.rule().where;\n const hasRules = where && where.rules && where.rules.length > 0;\n if (!hasRules) {\n untracked(() => this.showSubquery.set(false));\n }\n });\n }\n\n // === 公有方法 ===\n /** 字段变更 */\n onFieldChange(fieldName: string): void {\n const field = this.fields().find(f => f.name === fieldName);\n this.update.emit({\n id: this.rule().id,\n updates: {\n field: fieldName,\n operator:\n field?.isRelation ? 'exists'\n : field?.type === 'keyValue' ? 'null'\n : '=',\n value: field?.type === 'boolean' ? false : '',\n where: undefined // 重置子查询\n }\n });\n }\n\n /** 添加子条件:展开面板并创建一条默认子规则 */\n onAddSubcondition(): void {\n this.showSubquery.set(true);\n const relationFields = this.currentRelationFields();\n const firstField = relationFields[0];\n if (firstField) {\n const where: QueryBuilderRuleGroup<Record<string, unknown>> = {\n id: '',\n combinator: 'and',\n rules: [\n {\n id: '',\n field: firstField.name,\n operator:\n firstField.isRelation ? 'exists'\n : firstField.type === 'keyValue' ? 'null'\n : '=',\n value: firstField.type === 'boolean' ? false : ''\n }\n ]\n };\n this.update.emit({ id: this.rule().id, updates: { where } });\n }\n }\n\n /** 操作符变更 */\n onOperatorChange(operator: string): void {\n const updates: Partial<UIRuleWithWhere> = { operator };\n if (this.existsOperators.has(operator) || this.noValueOperators.has(operator)) {\n updates.value = null;\n }\n if (!this.existsOperators.has(operator)) {\n updates.where = undefined;\n this.showSubquery.set(false);\n }\n this.update.emit({ id: this.rule().id, updates });\n }\n\n /** 值变更 */\n onValueChange(value: unknown): void {\n this.update.emit({\n id: this.rule().id,\n updates: { value }\n });\n }\n\n /** 子查询条件变更 */\n onWhereChange(where: QueryBuilderRuleGroup<Record<string, unknown>> | undefined): void {\n this.update.emit({\n id: this.rule().id,\n updates: { where }\n });\n }\n\n /** 删除规则 */\n onRemove(): void {\n this.remove.emit();\n }\n\n // === 私有 callback 字段(computed signal 是懒求值的,this.onXxx 在调用时已初始化)===\n private readonly fieldChangeCb = (field: string) => this.onFieldChange(field);\n private readonly operatorChangeCb = (op: string) => this.onOperatorChange(op);\n private readonly valueChangeCb = (value: unknown) => this.onValueChange(value);\n private readonly whereChangeCb = (where: QueryBuilderRuleGroup<Record<string, unknown>> | undefined) =>\n this.onWhereChange(where);\n}\n","import type { FieldMetadata, UIRule, ValidationError } from '@aiao/rxdb-model';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output, signal } from '@angular/core';\nimport { QueryRuleComponent } from '../query-rule/query-rule.component';\n\n/**\n * UI 规则组(宽松类型)\n */\nexport interface UIRuleGroup {\n id: string;\n combinator: 'and' | 'or';\n rules: Array<UIRule | UIRuleGroup>;\n}\n\nexport type QueryDropMode = 'before' | 'after' | 'into';\n\nexport interface QueryDragDropState {\n draggedItemId: string | null;\n targetItemId: string | null;\n dropMode: QueryDropMode | null;\n isValidTarget: boolean;\n depth?: number;\n}\n\nexport class QueryDragDropHandler {\n readonly state = signal<QueryDragDropState>({\n draggedItemId: null,\n targetItemId: null,\n dropMode: null,\n isValidTarget: false\n });\n\n constructor(private readonly moveItemFn: (itemId: string, targetGroupId: string, targetIndex: number) => void) {}\n\n start(itemId: string): void {\n this.state.set({ draggedItemId: itemId, targetItemId: null, dropMode: null, isValidTarget: false });\n }\n\n over(targetItemId: string, dropMode: QueryDropMode, isValid: boolean, depth: number): void {\n this.state.update(current => {\n if (current.depth !== undefined && depth < current.depth) return current;\n return { ...current, targetItemId, dropMode, isValidTarget: isValid, depth };\n });\n }\n\n leave(): void {\n this.state.update(s => ({ ...s, targetItemId: null, dropMode: null, isValidTarget: false, depth: undefined }));\n }\n\n drop(itemId: string, targetGroupId: string, targetIndex: number): void {\n try {\n this.moveItemFn(itemId, targetGroupId, targetIndex);\n } catch {\n // 服务层拒绝(如循环嵌套),静默忽略\n }\n this.reset();\n }\n\n end(): void {\n this.reset();\n }\n\n private reset(): void {\n this.state.set({ draggedItemId: null, targetItemId: null, dropMode: null, isValidTarget: false });\n }\n}\n\nfunction calculateDropMode(clientY: number, rect: DOMRect, isGroup: boolean): QueryDropMode {\n const ratio = (clientY - rect.top) / rect.height;\n if (isGroup) {\n if (ratio < 0.25) return 'before';\n if (ratio > 0.75) return 'after';\n return 'into';\n }\n return ratio < 0.5 ? 'before' : 'after';\n}\n\n/**\n * 查询规则组组件(递归)\n *\n * @description\n * 显示一组查询规则,支持:\n * - AND/OR 切换(Teable 风格:行内 conjunction 前缀)\n * - 添加规则/子组\n * - 删除组\n * - 递归嵌套显示\n */\n@Component({\n selector: 'rxdb-query-group',\n standalone: true,\n imports: [CommonModule, QueryRuleComponent],\n template: `\n <div class=\"rxdb-query-group border-base-300 my-1 rounded-lg border p-2\" [class.bg-base-200]=\"depth() % 2 === 1\">\n <!-- 组合器 + 操作按钮(同一行) -->\n <div class=\"flex items-center gap-2\" [class.mb-2]=\"!collapsed()\">\n <div class=\"join\">\n <button\n class=\"btn btn-xs join-item\"\n [class.btn-ghost]=\"group().combinator !== 'and'\"\n [class.btn-primary]=\"group().combinator === 'and'\"\n (click)=\"toggleCombinator('and')\"\n type=\"button\"\n >\n AND\n </button>\n <button\n class=\"btn btn-xs join-item\"\n [class.btn-ghost]=\"group().combinator !== 'or'\"\n [class.btn-primary]=\"group().combinator === 'or'\"\n (click)=\"toggleCombinator('or')\"\n type=\"button\"\n >\n OR\n </button>\n </div>\n\n @if (allowCollapse()) {\n <button\n class=\"btn btn-ghost btn-xs btn-square\"\n [title]=\"collapsed() ? '展开' : '收起'\"\n (click)=\"toggleCollapse()\"\n type=\"button\"\n >\n <svg\n class=\"h-3 w-3 transition-transform duration-200\"\n [class.-rotate-90]=\"collapsed()\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2.5\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n }\n\n <div class=\"flex-1\"></div>\n\n @if (!collapsed()) {\n <button class=\"btn btn-ghost btn-xs\" (click)=\"onAddRule()\" type=\"button\">+ 条件</button>\n\n @if (canAddGroup()) {\n <button class=\"btn btn-ghost btn-xs\" (click)=\"onAddGroup()\" type=\"button\">+ 分组</button>\n }\n\n @if (depth() > 0) {\n <button\n class=\"btn btn-ghost btn-xs btn-square text-base-content/40 hover:text-error\"\n (click)=\"onRemove()\"\n title=\"删除组\"\n type=\"button\"\n >\n ✕\n </button>\n }\n }\n </div>\n\n <!-- 规则列表 -->\n @if (!collapsed()) {\n <div class=\"space-y-1\">\n @for (item of group().rules; track trackByItem(item); let idx = $index) {\n @if (isRuleGroup(item)) {\n <div\n class=\"rxdb-drag-item\"\n [class.dragging]=\"isDragging(item.id)\"\n [class.drop-invalid]=\"isDropInvalid(item.id)\"\n [class.drop-target-after]=\"isDropTarget(item.id, 'after')\"\n [class.drop-target-before]=\"isDropTarget(item.id, 'before')\"\n [class.drop-target-into]=\"isDropTarget(item.id, 'into')\"\n (dragend)=\"onItemDragEnd()\"\n (dragleave)=\"onItemDragLeave($event)\"\n (dragover)=\"onItemDragOver($event, item, idx, true)\"\n (drop)=\"onItemDrop($event, item, idx, true)\"\n >\n <div class=\"flex items-start gap-1\">\n @if (dragDropHandler()) {\n <span\n class=\"btn btn-ghost btn-xs btn-square text-base-content/30 hover:text-base-content/60 mt-1 cursor-grab\"\n (dragstart)=\"onItemDragStart($event, item)\"\n draggable=\"true\"\n >⠿</span\n >\n }\n <div class=\"min-w-0 flex-1\">\n <rxdb-query-group\n [allowCollapse]=\"allowCollapse()\"\n [depth]=\"depth() + 1\"\n [dragDropHandler]=\"dragDropHandler()\"\n [errors]=\"errors()\"\n [fields]=\"fields()\"\n [group]=\"asRuleGroup(item)\"\n [maxDepth]=\"maxDepth()\"\n (addGroup)=\"addGroup.emit($event)\"\n (addRule)=\"addRule.emit($event)\"\n (removeItem)=\"removeItem.emit($event)\"\n (updateCombinator)=\"updateCombinator.emit($event)\"\n (updateRule)=\"updateRule.emit($event)\"\n />\n </div>\n </div>\n </div>\n } @else {\n <div\n class=\"rxdb-drag-item\"\n [class.dragging]=\"isDragging(item.id)\"\n [class.drop-invalid]=\"isDropInvalid(item.id)\"\n [class.drop-target-after]=\"isDropTarget(item.id, 'after')\"\n [class.drop-target-before]=\"isDropTarget(item.id, 'before')\"\n (dragend)=\"onItemDragEnd()\"\n (dragleave)=\"onItemDragLeave($event)\"\n (dragover)=\"onItemDragOver($event, item, idx, false)\"\n (drop)=\"onItemDrop($event, item, idx, false)\"\n >\n <div class=\"flex items-center gap-1\">\n @if (dragDropHandler()) {\n <span\n class=\"btn btn-ghost btn-xs btn-square text-base-content/30 hover:text-base-content/60 cursor-grab\"\n (dragstart)=\"onItemDragStart($event, item)\"\n draggable=\"true\"\n >⠿</span\n >\n }\n <div class=\"min-w-0 flex-1\">\n <rxdb-query-rule\n [errors]=\"errors()\"\n [fields]=\"fields()\"\n [rule]=\"asRule(item)\"\n (remove)=\"onRuleRemove(asRule(item).id)\"\n (update)=\"onRuleUpdate($event)\"\n />\n </div>\n </div>\n </div>\n }\n }\n </div>\n\n <!-- 空状态 -->\n @if (group().rules.length === 0) {\n <div class=\"text-base-content/50 py-2 text-center text-sm select-none\">暂无条件</div>\n }\n }\n </div>\n `,\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n .rxdb-drag-item {\n position: relative;\n }\n .rxdb-drag-item.dragging {\n opacity: 0.4;\n }\n .rxdb-drag-item.drop-target-before::before {\n content: '';\n position: absolute;\n top: -2px;\n left: 0;\n right: 0;\n height: 3px;\n background: oklch(0.6 0.2 250);\n border-radius: 2px;\n z-index: 1;\n }\n .rxdb-drag-item.drop-target-after::after {\n content: '';\n position: absolute;\n bottom: -2px;\n left: 0;\n right: 0;\n height: 3px;\n background: oklch(0.6 0.2 250);\n border-radius: 2px;\n z-index: 1;\n }\n .rxdb-drag-item.drop-target-into {\n outline: 2px dashed oklch(0.6 0.2 250);\n outline-offset: -2px;\n border-radius: 0.5rem;\n background: oklch(0.6 0.2 250 / 10%);\n }\n .rxdb-drag-item.drop-invalid {\n outline: 2px dashed oklch(0.6 0.2 30);\n outline-offset: -2px;\n border-radius: 0.5rem;\n }\n `\n})\nexport class QueryGroupComponent {\n readonly group = input.required<UIRuleGroup>();\n readonly fields = input.required<FieldMetadata[]>();\n readonly errors = input<ValidationError[]>([]);\n readonly depth = input<number>(0);\n readonly maxDepth = input<number>(5);\n readonly dragDropHandler = input<QueryDragDropHandler>();\n /** 是否允许展开/收起组(默认开启) */\n readonly allowCollapse = input<boolean>(true);\n\n readonly addRule = output<{ parentId: string; rule: Omit<UIRule, 'id'> }>();\n readonly addGroup = output<string>();\n readonly removeItem = output<string>();\n readonly updateRule = output<{ id: string; updates: Partial<UIRule> }>();\n readonly updateCombinator = output<{ id: string; combinator: 'and' | 'or' }>();\n\n /** 当前组是否已折叠 */\n readonly collapsed = signal(false);\n\n /** 是否可以添加子组(未达到最大深度) */\n readonly canAddGroup = computed(() => this.depth() < this.maxDepth() - 1);\n\n /** 切换折叠状态 */\n toggleCollapse(): void {\n this.collapsed.update(v => !v);\n }\n\n /** 切换组合器 */\n toggleCombinator(combinator: 'and' | 'or'): void {\n if (this.group().combinator !== combinator) {\n this.updateCombinator.emit({ id: this.group().id, combinator });\n }\n }\n\n /** 添加规则 */\n onAddRule(): void {\n const firstField = this.fields()[0];\n if (firstField) {\n this.addRule.emit({\n parentId: this.group().id,\n rule: {\n field: firstField.name,\n operator:\n firstField.isRelation ? 'exists'\n : firstField.type === 'keyValue' ? 'null'\n : '=',\n value: firstField.type === 'boolean' ? false : ''\n }\n });\n }\n }\n\n /** 添加子组 */\n onAddGroup(): void {\n this.addGroup.emit(this.group().id);\n }\n\n /** 删除此组 */\n onRemove(): void {\n this.removeItem.emit(this.group().id);\n }\n\n /** 规则更新 */\n onRuleUpdate(event: { id: string; updates: Partial<UIRule> }): void {\n this.updateRule.emit(event);\n }\n\n /** 删除规则 */\n onRuleRemove(id: string): void {\n this.removeItem.emit(id);\n }\n\n /** 类型守卫:是否为规则组 */\n isRuleGroup(item: UIRuleGroup | UIRule): item is UIRuleGroup {\n return 'combinator' in item && 'rules' in item;\n }\n\n /** 类型转换:转为规则组 */\n asRuleGroup(item: UIRuleGroup | UIRule): UIRuleGroup {\n return item as UIRuleGroup;\n }\n\n /** 类型转换:转为规则 */\n asRule(item: UIRuleGroup | UIRule): UIRule {\n return item as UIRule;\n }\n\n /** 追踪函数 */\n trackByItem(item: UIRuleGroup | UIRule): string {\n return item.id;\n }\n\n isDragging(itemId: string): boolean {\n return this.dragDropHandler()?.state().draggedItemId === itemId;\n }\n\n isDropTarget(itemId: string, mode: QueryDropMode): boolean {\n const state = this.dragDropHandler()?.state();\n return !!state && state.targetItemId === itemId && state.dropMode === mode && state.isValidTarget;\n }\n\n isDropInvalid(itemId: string): boolean {\n const state = this.dragDropHandler()?.state();\n return !!state && state.targetItemId === itemId && !state.isValidTarget && !!state.draggedItemId;\n }\n\n onItemDragStart(event: DragEvent, item: UIRule | UIRuleGroup): void {\n const handler = this.dragDropHandler();\n if (!handler || !event.dataTransfer) return;\n event.stopPropagation();\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', item.id);\n const row = (event.target as HTMLElement).closest('.rxdb-drag-item') as HTMLElement | null;\n if (row) {\n const rect = row.getBoundingClientRect();\n event.dataTransfer.setDragImage(row, event.clientX - rect.left, event.clientY - rect.top);\n }\n handler.start(item.id);\n }\n\n onItemDragOver(event: DragEvent, item: UIRule | UIRuleGroup, index: number, isGroup: boolean): void {\n event.preventDefault();\n event.stopPropagation();\n const handler = this.dragDropHandler();\n if (!handler || !event.dataTransfer) return;\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const dropMode = calculateDropMode(event.clientY, rect, isGroup);\n const draggedId = handler.state().draggedItemId;\n const isValid = !!draggedId && draggedId !== item.id && (dropMode !== 'into' || isGroup);\n event.dataTransfer.dropEffect = isValid ? 'move' : 'none';\n handler.over(item.id, dropMode, isValid, this.depth());\n }\n\n onItemDragLeave(event: DragEvent): void {\n const target = event.currentTarget as HTMLElement;\n const related = event.relatedTarget as Node | null;\n if (!related || !target.contains(related)) {\n this.dragDropHandler()?.leave();\n }\n }\n\n onItemDrop(event: DragEvent, targetItem: UIRule | UIRuleGroup, targetIndex: number, isGroup: boolean): void {\n event.preventDefault();\n event.stopPropagation();\n const handler = this.dragDropHandler();\n const state = handler?.state();\n if (!handler || !state?.draggedItemId || !state.isValidTarget || !state.dropMode) {\n handler?.end();\n return;\n }\n const dropMode = state.dropMode;\n let finalTargetGroupId: string;\n let finalTargetIndex: number;\n if (dropMode === 'into' && isGroup) {\n const subGroup = targetItem as UIRuleGroup;\n finalTargetGroupId = subGroup.id;\n const draggedInTarget = subGroup.rules.some(r => r.id === state.draggedItemId);\n finalTargetIndex = draggedInTarget ? subGroup.rules.length - 1 : subGroup.rules.length;\n } else {\n finalTargetGroupId = this.group().id;\n const rules = this.group().rules;\n const draggedIndex = rules.findIndex(r => r.id === state.draggedItemId);\n const isInSameGroup = draggedIndex !== -1;\n let adjustedIndex = targetIndex;\n if (isInSameGroup && draggedIndex < targetIndex) {\n adjustedIndex--;\n }\n finalTargetIndex = dropMode === 'before' ? adjustedIndex : adjustedIndex + 1;\n }\n handler.drop(state.draggedItemId, finalTargetGroupId, finalTargetIndex);\n }\n\n onItemDragEnd(): void {\n this.dragDropHandler()?.end();\n }\n}\n","import {\n createQueryBuilderService,\n type FieldMetadata,\n type QueryBuilderService,\n type SchemaInfo,\n type UIRule,\n type ValidationResult\n} from '@aiao/rxdb-model';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n OnDestroy,\n output,\n Signal,\n viewChild\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { QueryDragDropHandler, QueryGroupComponent, type UIRuleGroup } from '../query-group/query-group.component';\n\n/**\n * RxDB 查询输出格式\n */\nexport interface RxDBQueryOutput<T> {\n combinator: 'and' | 'or';\n rules: Array<RxDBQueryOutput<T> | { field: keyof T & string; operator: string; value: unknown }>;\n}\n\n/**\n * Angular Query Builder 主组件\n *\n * @description\n * 提供可视化的查询条件构建界面,支持:\n * - 传入 SchemaInfo 或 FieldMetadata[] 定义可用字段\n * - 拖拽重排规则和分组\n * - 嵌套分组(最大 5 层)\n * - 实时验证\n *\n * @example\n * ```html\n * <rxdb-query-builder\n * [schema]=\"schema\"\n * (queryChange)=\"onQueryChange($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'rxdb-query-builder',\n standalone: true,\n imports: [CommonModule, QueryGroupComponent],\n template: `\n <div\n class=\"rxdb-query-builder bg-base-100\"\n (keydown)=\"onKeyDown($event)\"\n aria-label=\"查询条件构建器\"\n role=\"search\"\n tabindex=\"0\"\n >\n <div class=\"overflow-y-auto\" #scrollContainer [style.max-height]=\"height()\">\n <!-- 标题栏 -->\n <div class=\"mb-4 flex items-center justify-between\">\n <h3 class=\"text-base\" id=\"query-builder-title\">查询条件</h3>\n <div class=\"flex gap-2\" aria-label=\"查询操作\" role=\"toolbar\">\n @if (hasRules()) {\n <button\n class=\"btn btn-ghost btn-sm\"\n (click)=\"clearAll()\"\n (keydown.enter)=\"clearAll()\"\n aria-label=\"清空所有查询条件\"\n title=\"清空所有查询条件 (Escape)\"\n type=\"button\"\n >\n 清空\n </button>\n }\n </div>\n </div>\n\n <!-- 空状态提示 -->\n @if (!hasRules()) {\n <div class=\"text-base-content/60 min-w-md py-8 text-center\" aria-live=\"polite\" role=\"status\">\n <div class=\"mb-2 flex justify-center\" aria-hidden=\"true\">\n <svg\n class=\"size-12 opacity-40\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n </div>\n <p class=\"mb-4\">还没有任何查询条件</p>\n <button class=\"btn btn-sm\" (click)=\"addFirstRule()\" aria-label=\"添加第一个条件\" type=\"button\">\n 添加第一个条件\n </button>\n </div>\n } @else {\n <!-- 根规则组 -->\n <rxdb-query-group\n [allowCollapse]=\"enableCollapse()\"\n [depth]=\"0\"\n [dragDropHandler]=\"enableDrag() ? dragDropHandler : undefined\"\n [errors]=\"validationErrors()\"\n [fields]=\"fieldsComputed()\"\n [group]=\"rootGroup()!\"\n [maxDepth]=\"maxDepth()\"\n (addGroup)=\"onAddGroup($event)\"\n (addRule)=\"onAddRule($event)\"\n (removeItem)=\"onRemoveItem($event)\"\n (updateCombinator)=\"onUpdateCombinator($event)\"\n (updateRule)=\"onUpdateRule($event)\"\n role=\"region\"\n />\n }\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QueryBuilderComponent<T extends object> implements OnDestroy {\n private readonly service: QueryBuilderService<T>;\n /** 上次应用的 initialQuery 引用,用于检测是否有新查询需要加载 */\n private lastAppliedInitialQuery: unknown = undefined;\n\n private readonly scrollContainer = viewChild<ElementRef<HTMLElement>>('scrollContainer');\n\n /** 根规则组 Signal */\n private readonly rootGroupSignal: Signal<unknown>;\n\n /** 验证 Signal */\n private readonly validationSignal: Signal<ValidationResult | undefined>;\n\n /**\n * Schema 信息,包含字段定义\n */\n readonly schema = input<SchemaInfo>();\n\n /**\n * 字段列表(直接传入,优先于 schema)\n */\n readonly fields = input<FieldMetadata[]>([]);\n\n /**\n * 初始查询条件(可选)\n */\n readonly initialQuery = input<RxDBQueryOutput<T>>();\n\n /**\n * 最大嵌套层级(默认 5)\n */\n readonly maxDepth = input<number>(5);\n\n /**\n * 内容区域最大高度(超出后滚动),支持任意 CSS 长度值,如 `'400px'`、`'50vh'`\n */\n readonly height = input<string>('80vh');\n\n /**\n * 是否开启拖拽排序功能(默认开启)\n */\n readonly enableDrag = input<boolean>(true);\n\n /**\n * 是否开启分组展开/收起功能(默认开启)\n */\n readonly enableCollapse = input<boolean>(true);\n\n readonly dragDropHandler: QueryDragDropHandler;\n\n /**\n * 查询条件变更事件\n */\n readonly queryChange = output<RxDBQueryOutput<T>>();\n\n /**\n * 验证状态变更事件\n */\n readonly validationChange = output<ValidationResult>();\n\n /** 计算后的字段列表 */\n readonly fieldsComputed: Signal<FieldMetadata[]> = computed(() => {\n // 优先使用直接传入的 fields\n const directFields = this.fields();\n if (directFields && directFields.length > 0) {\n return directFields;\n }\n // 否则从 schema 获取\n const schemaInfo = this.schema();\n return schemaInfo?.fields ?? [];\n });\n\n /** 根规则组 */\n readonly rootGroup: Signal<UIRuleGroup | undefined> = computed(() => {\n return this.rootGroupSignal() as UIRuleGroup | undefined;\n });\n\n /** 验证错误列表 */\n readonly validationErrors = computed(() => {\n const validation = this.validationSignal();\n return validation?.errors ?? [];\n });\n\n /** 是否有规则 */\n readonly hasRules = computed(() => {\n const group = this.rootGroup();\n return group && group.rules.length > 0;\n });\n\n constructor() {\n // 在构造函数中初始化服务(非 reactive context)\n this.service = createQueryBuilderService<T>({\n config: {\n maxNestingLevel: this.maxDepth()\n }\n });\n\n this.dragDropHandler = new QueryDragDropHandler((itemId, targetGroupId, targetIndex) =>\n this.service.moveItem(itemId, targetGroupId, targetIndex)\n );\n\n // 转换 Observable 为 Signal(必须在 reactive context 外部)\n this.rootGroupSignal = toSignal(this.service.rootGroup$, { requireSync: true });\n this.validationSignal = toSignal(this.service.validation$, { initialValue: undefined });\n\n // 监听字段变化并同步到服务\n effect(() => {\n const fields = this.fieldsComputed();\n if (fields.length > 0) {\n this.service.setFields(fields);\n }\n });\n\n // 监听初始查询并加载(引用变化时重新加载,用户修改不影响此 signal 故不会覆盖)\n effect(() => {\n const initial = this.initialQuery();\n if (initial !== undefined && initial !== this.lastAppliedInitialQuery) {\n this.lastAppliedInitialQuery = initial;\n this.service.fromRxDBQuery(initial as any);\n }\n });\n\n // 监听查询变化并发出事件\n effect(() => {\n const group = this.rootGroup();\n if (group) {\n const query = this.service.toRxDBQuery();\n this.queryChange.emit(query as RxDBQueryOutput<T>);\n }\n });\n\n // 监听验证变化并发出事件\n effect(() => {\n const validation = this.validationSignal();\n if (validation) {\n this.validationChange.emit(validation);\n }\n });\n }\n\n /** 销毁服务 */\n ngOnDestroy(): void {\n this.service.destroy();\n }\n\n /** 添加第一个规则 */\n addFirstRule(): void {\n const firstField = this.fieldsComputed()[0];\n if (firstField) {\n this.service.addRule(undefined, {\n field: firstField.name,\n operator:\n firstField.isRelation ? 'exists'\n : firstField.type === 'keyValue' ? 'null'\n : '=',\n value: firstField.type === 'boolean' ? false : ''\n } as any);\n }\n }\n\n /** 清空所有规则 */\n clearAll(): void {\n this.service.clear();\n }\n\n /** 添加规则到指定组 */\n onAddRule(event: { parentId: string; rule: Omit<UIRule, 'id'> }): void {\n this.service.addRule(event.parentId, event.rule as any);\n this.scrollToBottom();\n }\n\n /** 添加子组到指定组 */\n onAddGroup(parentId: string): void {\n this.service.addGroup(parentId);\n this.scrollToBottom();\n }\n\n /** 删除规则或组 */\n onRemoveItem(id: string): void {\n this.service.remove(id);\n }\n\n /** 更新规则 */\n onUpdateRule(event: { id: string; updates: Partial<UIRule> }): void {\n this.service.updateRule(event.id, event.updates as any);\n }\n\n /** 更新组合器 */\n onUpdateCombinator(event: { id: string; combinator: 'and' | 'or' }): void {\n this.service.updateGroupCombinator(event.id, event.combinator);\n }\n\n /** 键盘快捷键处理 */\n onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.hasRules()) {\n event.preventDefault();\n this.clearAll();\n return;\n }\n }\n\n private scrollToBottom(): void {\n setTimeout(() => {\n const el = this.scrollContainer()?.nativeElement;\n el?.scrollTo({ top: el.scrollHeight, behavior: 'smooth' });\n }, 0);\n }\n}\n","import { getEntityMetadata, RelationKind, RxDB, type EntityType, type FindByCursorOptions } from '@aiao/rxdb';\nimport { InfiniteScrollingList } from '@aiao/rxdb-angular';\nimport {\n actionsColumn,\n buildEditableColumns,\n buildFormFields,\n extractFieldsFromMetadata,\n organizeFields,\n parsePropertyColumnValue,\n type BatchChangeItem,\n type CellChangeEvent,\n type EntityFormData,\n type EntityTableRecord,\n type FieldMetadata,\n type FormFieldConfig,\n type ModelInfo,\n type RelatedEntityProvider,\n type ValidationResult\n} from '@aiao/rxdb-model';\nimport { Dialog, DialogRef } from '@angular/cdk/dialog';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ErrorHandler,\n forwardRef,\n HostListener,\n inject,\n Injector,\n input,\n linkedSignal,\n output,\n PLATFORM_ID,\n runInInjectionContext,\n signal,\n TemplateRef,\n viewChild,\n type WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport type { ColumnsDefine } from '@visactor/vtable';\nimport { Funnel, LucideAngularModule, Redo2, Undo2 } from 'lucide-angular';\nimport type { EntityDetailDialogData } from '../entity-detail/entity-detail';\nimport { EntityDialogComponent } from '../entity-dialog/entity-dialog.component';\nimport { QueryTableComponent } from '../entity-table/query-table/query-table.component';\nimport { QueryBuilderComponent } from '../query-builder/query-builder/query-builder.component';\n\n/** RxDB 实体实例(用于 CRUD 操作) */\ntype EntityInstance = {\n [key: string]: unknown;\n readonly id: string;\n save(): Promise<void>;\n remove(): Promise<void>;\n};\n\ntype FilterQuery = { combinator: 'and' | 'or'; rules: unknown[] };\n\nconst EMPTY_FILTER: FilterQuery = { combinator: 'and', rules: [] };\n\n/**\n * 实体列表组件\n *\n * 封装了实体列表的完整 UI:工具栏(显示名称、筛选、撤销/重做、新增)+ 数据表格。\n * 通过 `namespace` 和 `name` 输入定位 RxDB 实体,实现懒加载分页和 CRUD 操作。\n *\n * @example\n * ```html\n * <rxdb-entity-list [namespace]=\"namespace()\" [name]=\"name()\" />\n * ```\n */\n@Component({\n selector: 'rxdb-entity-list',\n templateUrl: './entity-list.component.html',\n host: {\n style: 'display:flex;flex-direction:column;height:100%;overflow:hidden'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n QueryTableComponent,\n QueryBuilderComponent,\n LucideAngularModule,\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n forwardRef(() => EntityListComponent),\n forwardRef(() => EntityDialogComponent)\n ]\n})\nexport class EntityListComponent {\n #m2mDialogRef: DialogRef<unknown, unknown> | null = null;\n // ── Service injections ────────────────────────────────────────────────\n readonly #rxdb = inject(RxDB);\n readonly #injector = inject(Injector);\n readonly #dialog = inject(Dialog);\n readonly #errorHandler = inject(ErrorHandler);\n\n // ── Save coalescing ───────────────────────────────────────────────────\n readonly #pendingChanges = new Map<string, Record<string, unknown>>();\n #flushHandle = false;\n\n // ── Entity registry ───────────────────────────────────────────────────\n readonly #entityClsMap = new Map<string, EntityType>(\n this.#rxdb.config.entities.map(cls => {\n const meta = getEntityMetadata(cls);\n return [`${meta.namespace}:${meta.name}`, cls] as const;\n })\n );\n\n readonly #modelInfoMap = new Map<string, ModelInfo>(\n this.#rxdb.config.entities.map(cls => {\n const meta = getEntityMetadata(cls);\n return [\n meta.name,\n {\n name: meta.name,\n displayName: meta.displayName ?? meta.name,\n entityClass: cls as new (...args: unknown[]) => unknown,\n metadata: meta\n }\n ] as const;\n })\n );\n\n readonly #scrollListMap = new Map<string, InfiniteScrollingList<EntityType>>();\n\n readonly #columnsCache = new Map<string, ColumnsDefine>(\n this.#rxdb.config.entities.map(cls => {\n const meta = getEntityMetadata(cls);\n return [\n `${meta.namespace}:${meta.name}`,\n buildEditableColumns(meta, {\n relatedItemsProviderFactory: (fkField, relatedEntityName) => {\n const relCls = [...this.#entityClsMap.values()].find(c => {\n const m = getEntityMetadata(c);\n return m.name === relatedEntityName;\n });\n if (!relCls) return undefined;\n const relKey = (() => {\n const m = getEntityMetadata(relCls);\n return `${m.namespace}:${m.name}`;\n })();\n const list = this.#getOrCreateList(relKey, relCls);\n const strVal = (v: unknown): string | undefined => (typeof v === 'string' && v.length > 0 ? v : undefined);\n return () => {\n return (list.value() as Record<string, unknown>[]).map(inst => ({\n id: String(inst['id'] ?? ''),\n displayName: strVal(inst['displayName']) ?? strVal(inst['name']) ?? String(inst['id'] ?? '')\n }));\n };\n }\n })\n ] as const;\n })\n );\n\n readonly #vHistory = this.#rxdb.versionManager.history();\n readonly #entityKey = computed(() => `${this.namespace()}:${this.name()}`);\n readonly #currentList = signal<InfiniteScrollingList<EntityType> | undefined>(undefined);\n\n readonly #instances = computed<EntityInstance[]>(() => {\n const list = this.#currentList();\n return list ? (list.value() as EntityInstance[]) : [];\n });\n\n readonly #entityCls = computed(() => this.#entityClsMap.get(this.#entityKey()));\n\n /** 级联新增模式下本地草稿子实体(未保存到DB,由父实体级联保存) */\n readonly #localDraftItems = signal<EntityInstance[]>([]);\n\n // ── Protected view bindings ───────────────────────────────────────────\n protected readonly Undo2 = Undo2;\n protected readonly Redo2 = Redo2;\n protected readonly Funnel = Funnel;\n\n /** CDK Overlay 定位策略:优先下方右对齐,其次上方右对齐 */\n protected readonly overlayPositions = [\n {\n originX: 'end' as const,\n originY: 'bottom' as const,\n overlayX: 'end' as const,\n overlayY: 'top' as const,\n offsetY: 4\n },\n {\n originX: 'end' as const,\n originY: 'top' as const,\n overlayX: 'end' as const,\n overlayY: 'bottom' as const,\n offsetY: -4\n }\n ];\n\n protected readonly loadMore = computed(() => {\n const list = this.#currentList();\n return list ? () => list.loadMore() : undefined;\n });\n\n // ── Route inputs ──────────────────────────────────────────────────────\n readonly namespace = input.required<string>();\n readonly name = input.required<string>();\n\n /** 固定查询条件,与用户筛选条件做 AND 合并(用于关系属性过滤,如 ownerId = currentId) */\n readonly fixedQuery = input<FilterQuery | undefined>(undefined);\n\n /** 预填充的外键数据(级联新增时传递给子实体对话框) */\n readonly fixedFormData = input<EntityFormData | undefined>(undefined);\n\n /** 草稿父实体(用于级联新增场景,子实体通过关系API注册到父实体) */\n readonly draftParentEntity = input<EntityInstance | null>(null);\n\n /** 父实体上关系属性名(如 'children'),用于调用 parent.children$.add(child) */\n readonly parentRelationName = input<string | undefined>(undefined);\n\n /** 创建链路中的实体类型(namespace:name),用于阻断循环创建 */\n readonly creationChain = input<string[]>([]);\n\n /** 关系类型(MANY_TO_MANY 时启用选择模式) */\n readonly relationKind = input<RelationKind | undefined>(undefined);\n\n /** 父实体实例(用于 M2M 关系操作,包含 draft 和已保存实体) */\n readonly parentEntity = input<EntityInstance | null>(null);\n\n /** 列表模式:default=普通列表, select=选择模式(带 checkbox 列) */\n readonly mode = input<'default' | 'select'>('default');\n\n /** 已关联的实体 ID 集合(选择模式下过滤掉,不再展示) */\n readonly alreadyLinkedIds = input<Set<string>>(new Set());\n\n /** 点击「查看」按钮时触发,携带对应行记录 */\n readonly viewEntity = output<EntityTableRecord>();\n\n /** 选择模式:确认选择时触发,携带选中的实体实例 */\n readonly selectionConfirmed = output<EntityInstance[]>();\n\n /** 选择模式:取消选择时触发 */\n readonly selectionCancelled = output<void>();\n\n // ── Reactive state ────────────────────────────────────────────────────\n readonly filterQuery: WritableSignal<FilterQuery> = linkedSignal(() => {\n this.namespace();\n this.name();\n return { ...EMPTY_FILTER };\n });\n\n readonly $isFilterQuery = computed(() => this.filterQuery().rules.length > 0);\n\n readonly showFilterPopover = signal(false);\n\n readonly pendingQuery: WritableSignal<FilterQuery> = linkedSignal(() => {\n this.namespace();\n this.name();\n return { ...EMPTY_FILTER };\n });\n\n readonly pendingQueryValid = signal(true);\n\n readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n readonly displayName = computed(() => {\n const cls = this.#entityCls();\n if (!cls) return this.name();\n const meta = getEntityMetadata(cls);\n return meta.displayName ?? meta.name;\n });\n\n /** 当前实体是否存在于祖先创建链路中(循环创建检测) */\n readonly isCreateBlocked = computed(() => this.creationChain().includes(this.#entityKey()));\n\n readonly isQueryActive = computed(() => this.filterQuery().rules.length > 0);\n readonly filteredCount = computed(() => this.#instances().length + this.#localDraftItems().length);\n\n readonly isInitialLoading = computed(() => {\n const list = this.#currentList();\n return list ? list.isLoading() && list.value().length === 0 : false;\n });\n\n readonly isLoadingMore = computed(() => {\n const list = this.#currentList();\n return list ? list.isLoading() && list.value().length > 0 : false;\n });\n\n readonly undoCount = toSignal(this.#vHistory.undoCount$, { initialValue: 0 });\n readonly redoCount = toSignal(this.#vHistory.redoCount$, { initialValue: 0 });\n readonly canUndo = computed(() => this.undoCount() > 0);\n readonly canRedo = computed(() => this.redoCount() > 0);\n\n readonly queryBuilderFields = computed<FieldMetadata[]>(() => {\n const cls = this.#entityCls();\n if (!cls) return [];\n return organizeFields(extractFieldsFromMetadata(getEntityMetadata(cls), this.#modelInfoMap));\n });\n\n readonly tableRecords = computed<EntityTableRecord[]>(() => {\n const dbRecords = this.#instances().map(inst => ({ ...(inst as Record<string, unknown>) }));\n const draftRecords = this.#localDraftItems().map(inst => ({ ...(inst as Record<string, unknown>) }));\n let records: EntityTableRecord[] = [...draftRecords, ...dbRecords];\n if (this.isSelectMode()) {\n const linkedIds = this.alreadyLinkedIds();\n const selIds = this.selectedIds();\n records = records\n .filter(r => !linkedIds.has(r['id'] as string))\n .map(r => ({ ...r, __selected: selIds.has(r['id'] as string) }));\n }\n return records;\n });\n\n readonly tableColumns = computed<ColumnsDefine>(() => {\n const base = this.#columnsCache.get(this.#entityKey()) ?? [actionsColumn('操作', '删除', '查看')];\n if (this.isSelectMode()) {\n const withoutActions = base.filter(c => (c as Record<string, unknown>)['field'] !== 'actions');\n return [{ field: '__selected', title: '', cellType: 'checkbox', width: 50 }, ...withoutActions];\n }\n return base;\n });\n\n readonly createFormFieldConfigs = computed<FormFieldConfig[]>(() => {\n const cls = this.#entityCls();\n if (!cls) return [];\n const meta = getEntityMetadata(cls);\n return buildFormFields(meta, 'create');\n });\n\n // ── Select mode ───────────────────────────────────────────────────────\n readonly isSelectMode = computed(() => this.mode() === 'select');\n readonly isM2m = computed(() => this.relationKind() === RelationKind.MANY_TO_MANY);\n\n readonly m2mSelectTpl = viewChild<TemplateRef<void>>('m2mSelectTpl');\n\n readonly selectedIds = signal<Set<string>>(new Set());\n readonly selectedCount = computed(() => this.selectedIds().size);\n\n readonly m2mAlreadyLinkedIds = computed<Set<string>>(() => {\n const dbIds = this.#instances().map(e => e.id);\n const draftIds = this.#localDraftItems().map(e => e.id);\n return new Set([...dbIds, ...draftIds]);\n });\n\n // ── Constructor ───────────────────────────────────────────────────────\n\n constructor() {\n toObservable(this.#entityKey)\n .pipe(takeUntilDestroyed())\n .subscribe(key => {\n const cls = this.#entityClsMap.get(key);\n if (!cls) {\n this.#currentList.set(undefined);\n return;\n }\n this.#currentList.set(this.#getOrCreateList(key, cls));\n });\n }\n\n // ── Event handlers ────────────────────────────────────────────────────\n\n toggleFilterPopover(): void {\n this.showFilterPopover.update(v => !v);\n }\n\n applyFilter(): void {\n this.filterQuery.set({ ...this.pendingQuery() });\n this.showFilterPopover.set(false);\n }\n\n resetFilter(): void {\n this.pendingQuery.set({ ...EMPTY_FILTER });\n this.filterQuery.set({ ...EMPTY_FILTER });\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(e: KeyboardEvent): void {\n const tag = (e.target as HTMLElement)?.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return;\n if ((e.ctrlKey || e.metaKey) && e.key === 'z') {\n if (e.shiftKey) {\n if (this.canRedo()) {\n e.preventDefault();\n void this.redo();\n }\n } else {\n if (this.canUndo()) {\n e.preventDefault();\n void this.undo();\n }\n }\n }\n }\n\n onQueryChange(query: { combinator: 'and' | 'or'; rules: unknown[] } | undefined): void {\n this.pendingQuery.set(query ?? { ...EMPTY_FILTER });\n }\n\n onValidationChange(result: ValidationResult): void {\n this.pendingQueryValid.set(result.valid);\n }\n\n onCellChanged(event: CellChangeEvent): void {\n if (!event.field || event.field === 'actions') return;\n if (event.field === '__selected') {\n const id = event.record['id'] as string;\n this.selectedIds.update(set => {\n const next = new Set(set);\n if (event.value) next.add(id);\n else next.delete(id);\n return next;\n });\n return;\n }\n const id = event.record['id'] as string;\n const entityCls = this.#entityCls();\n let value = event.value;\n if (entityCls) {\n const prop = getEntityMetadata(entityCls).propertyMap.get(event.field);\n if (prop) value = parsePropertyColumnValue(prop.type, event.value);\n }\n this.#enqueue(id, { [event.field]: value });\n }\n\n undo(): void {\n this.#vHistory.undo();\n }\n\n redo(): void {\n this.#vHistory.redo();\n }\n\n async onIconClicked(event: { name: string; record: EntityTableRecord }): Promise<void> {\n if (event.name === 'view-action') {\n this.viewEntity.emit(event.record);\n return;\n }\n if (event.name !== 'delete-action') return;\n const id = event.record['id'] as string;\n\n const draftInst = this.#localDraftItems().find(i => i.id === id);\n if (draftInst) {\n this.#localDraftItems.update(items => items.filter(i => i.id !== id));\n return;\n }\n\n const inst = this.#instances().find(i => i.id === id);\n if (!inst) return;\n try {\n await inst.remove();\n } catch (e) {\n this.#errorHandler.handleError(e);\n }\n }\n\n async onRowDeleted(event: EntityTableRecord): Promise<void> {\n await this.onIconClicked({ name: 'delete-action', record: event });\n }\n\n onBatchUpdated(mutations: BatchChangeItem[]): void {\n for (const { recordId, changes } of mutations) {\n const filtered = Object.fromEntries(Object.entries(changes).filter(([k]) => k && k !== 'actions'));\n if (Object.keys(filtered).length) this.#enqueue(recordId, filtered);\n }\n }\n\n openCreateDialog(): void {\n if (this.isCreateBlocked()) return;\n\n const fields = this.createFormFieldConfigs();\n const cls = this.#entityCls();\n if (!cls || fields.length === 0) return;\n\n const meta = getEntityMetadata(cls);\n const strVal = (v: unknown): string | undefined => (typeof v === 'string' && v.length > 0 ? v : undefined);\n const draftParent = this.draftParentEntity();\n const relatedEntityProvider: RelatedEntityProvider = (entityName, namespace) => {\n const relCls = [...this.#entityClsMap.values()].find(c => {\n const m = getEntityMetadata(c);\n return m.name === entityName && (!namespace || m.namespace === namespace);\n });\n if (!relCls) return [];\n const relMeta = getEntityMetadata(relCls);\n const list = this.#getOrCreateList(`${relMeta.namespace}:${relMeta.name}`, relCls);\n const items = (list.value() as Record<string, unknown>[]).map(inst => ({\n id: String(inst['id'] ?? ''),\n displayName: strVal(inst['displayName']) ?? strVal(inst['name']) ?? String(inst['id'] ?? '')\n }));\n if (draftParent) {\n const parentMeta = getEntityMetadata((draftParent as any).constructor as EntityType);\n if (parentMeta.name === entityName && (!namespace || parentMeta.namespace === namespace)) {\n const parentId = String(draftParent.id);\n if (!items.some(i => i.id === parentId)) {\n items.push({\n id: parentId,\n displayName: strVal(draftParent['displayName']) ?? strVal(draftParent['name']) ?? parentId\n });\n }\n }\n }\n return items;\n };\n\n void import('../entity-detail/entity-detail').then(({ EntityDetailComponent }) => {\n const dialogRef = this.#dialog.open(EntityDetailComponent, {\n width: '720px',\n minWidth: '400px',\n height: '80vh',\n minHeight: '300px',\n panelClass: 'entity-detail-dialog',\n data: {\n metadata: meta,\n formFields: fields,\n formData: {},\n formMode: 'create' as const,\n relatedEntityProvider,\n fixedFormData: this.fixedFormData(),\n delegateSave: !!this.draftParentEntity(),\n creationChain: this.creationChain()\n } satisfies EntityDetailDialogData\n });\n\n dialogRef.componentInstance!.formSubmitted.subscribe((result: EntityFormData) => {\n this.#handleCreateSubmit(result);\n dialogRef.close();\n });\n\n dialogRef.closed.subscribe(result => {\n if (result === 'saved') this.#currentList()?.refresh();\n });\n });\n }\n\n // ── M2M / Select mode methods ─────────────────────────────────────────\n\n openM2mSelectDialog(): void {\n if (this.#m2mDialogRef) return;\n const tpl = this.m2mSelectTpl();\n if (!tpl) return;\n\n const ref = this.#dialog.open(tpl, {\n width: '720px',\n minWidth: '400px',\n height: '70vh',\n minHeight: '300px',\n panelClass: 'entity-m2m-select-dialog'\n });\n this.#m2mDialogRef = ref as any;\n\n ref.closed.subscribe(() => {\n this.#m2mDialogRef = null;\n });\n }\n\n onM2mSelectionConfirmed(entities: EntityInstance[]): void {\n const parent = this.parentEntity();\n const relName = this.parentRelationName();\n\n if (parent && relName) {\n const relation = (parent as Record<string, unknown>)[relName + '$'];\n if (relation && typeof (relation as Record<string, unknown>)['add'] === 'function') {\n (relation as { add(...args: unknown[]): void }).add(...entities);\n }\n\n if (!this.draftParentEntity()) {\n parent\n .save()\n .then(() => this.#currentList()?.refresh())\n .catch(e => this.#errorHandler.handleError(e));\n } else {\n this.#localDraftItems.update(items => [...items, ...entities]);\n }\n }\n\n this.#m2mDialogRef?.close();\n }\n\n m2mCancelSelection(): void {\n this.#m2mDialogRef?.close();\n }\n\n confirmSelection(): void {\n const ids = this.selectedIds();\n if (ids.size === 0) {\n this.selectionCancelled.emit();\n return;\n }\n const entities = this.#instances().filter(e => ids.has(e.id));\n this.selectionConfirmed.emit(entities);\n }\n\n cancelSelection(): void {\n this.selectionCancelled.emit();\n }\n\n // ── Private helpers ───────────────────────────────────────────────────\n\n async #handleCreateSubmit(data: EntityFormData): Promise<void> {\n const cls = this.#entityCls();\n if (!cls) return;\n\n const parent = this.draftParentEntity();\n const relName = this.parentRelationName();\n\n if (parent && relName) {\n const child = new (cls as any)(data) as EntityInstance;\n const relation = (parent as any)[relName + '$'];\n if (relation && typeof relation.add === 'function') {\n relation.add(child);\n }\n this.#localDraftItems.update(items => [...items, child]);\n return;\n }\n\n try {\n const inst = new (cls as any)(data) as EntityInstance;\n await inst.save();\n this.#currentList()?.refresh();\n } catch (e) {\n this.#errorHandler.handleError(e);\n }\n }\n\n #getOrCreateList(key: string, cls: EntityType): InfiniteScrollingList<EntityType> {\n const cached = this.#scrollListMap.get(key);\n if (cached) return cached;\n const options = computed<FindByCursorOptions<EntityType>>(() => {\n const userFilter = this.filterQuery();\n const fixed = this.fixedQuery();\n let where: FilterQuery;\n if (!fixed || fixed.rules.length === 0) {\n where = userFilter;\n } else if (userFilter.rules.length === 0) {\n where = fixed;\n } else {\n where = { combinator: 'and', rules: [...fixed.rules, ...userFilter.rules] };\n }\n return {\n where: where as never,\n orderBy: [{ field: 'id' as const, sort: 'desc' as const }]\n };\n });\n const list = runInInjectionContext(this.#injector, () => new InfiniteScrollingList(this.#rxdb, cls, options));\n this.#scrollListMap.set(key, list);\n return list;\n }\n\n #enqueue(recordId: string, changes: Record<string, unknown>): void {\n const cur = this.#pendingChanges.get(recordId) ?? {};\n this.#pendingChanges.set(recordId, { ...cur, ...changes });\n if (this.#flushHandle) return;\n this.#flushHandle = true;\n queueMicrotask(() => {\n this.#flushHandle = false;\n const snapshot = [...this.#pendingChanges.entries()];\n this.#pendingChanges.clear();\n void this.#flushPending(snapshot);\n });\n }\n\n async #flushPending(pending: [string, Record<string, unknown>][]): Promise<void> {\n if (!pending.length) return;\n const EntityClass = this.#entityCls();\n if (!EntityClass) return;\n const toUpdate = new Set<EntityInstance>();\n const prevMap = new Map<EntityInstance, Record<string, unknown>>();\n const draftUpdated = new Set<EntityInstance>();\n for (const [id, changes] of pending) {\n let inst = this.#instances().find(i => i.id === id);\n const isDraft = !inst;\n if (!inst) {\n inst = this.#localDraftItems().find(i => i.id === id);\n }\n if (!inst) continue;\n const prev: Record<string, unknown> = {};\n const actual: Record<string, unknown> = {};\n let hasChange = false;\n for (const k of Object.keys(changes)) {\n if (inst[k] !== changes[k]) {\n prev[k] = inst[k];\n actual[k] = changes[k];\n hasChange = true;\n }\n }\n if (!hasChange) continue;\n prevMap.set(inst, prev);\n Object.assign(inst as Record<string, unknown>, actual);\n if (isDraft) {\n draftUpdated.add(inst);\n } else {\n toUpdate.add(inst);\n }\n }\n\n // 草稿实体直接更新 signal 触发重渲染(不写DB)\n if (draftUpdated.size) {\n this.#localDraftItems.update(items => [...items]);\n }\n\n if (!toUpdate.size) return;\n\n const updateMap = new Map([[EntityClass, toUpdate as unknown as Set<unknown>]]);\n try {\n await this.#rxdb.entityManager.mutations({ create: new Map(), update: updateMap, remove: new Map() });\n } catch (e) {\n this.#errorHandler.handleError(e);\n for (const [inst, prev] of prevMap) Object.assign(inst as Record<string, unknown>, prev);\n }\n }\n}\n","<!-- 顶栏:实体名称 + 计数 + 筛选按钮 + 新增按钮 -->\n<div class=\"border-base-300 flex shrink-0 items-center justify-between border-b px-4 py-2\">\n <div class=\"flex items-center gap-2 text-sm\">\n <span class=\"font-medium\">{{ displayName() }}</span>\n @if ($isFilterQuery()) {\n <span class=\"badge badge-ghost badge-sm\">{{ filteredCount() }} 条记录</span>\n }\n </div>\n <div class=\"flex items-center gap-2\">\n @if (!isSelectMode()) {\n <!-- Undo / Redo -->\n <button\n class=\"btn btn-xs btn-ghost\"\n [disabled]=\"!canUndo()\"\n (click)=\"undo()\"\n aria-label=\"撤销 (Ctrl+Z)\"\n type=\"button\"\n >\n <lucide-icon class=\"h-3.5 w-3.5\" [img]=\"Undo2\" />\n @if (undoCount(); as c) {\n <span class=\"badge badge-xs\">{{ c }}</span>\n }\n </button>\n <button\n class=\"btn btn-xs btn-ghost\"\n [disabled]=\"!canRedo()\"\n (click)=\"redo()\"\n aria-label=\"重做 (Ctrl+Shift+Z)\"\n type=\"button\"\n >\n <lucide-icon class=\"h-3.5 w-3.5\" [img]=\"Redo2\" />\n @if (redoCount(); as c) {\n <span class=\"badge badge-xs\">{{ c }}</span>\n }\n </button>\n <div class=\"divider divider-horizontal mx-0.5 h-5 self-center\"></div>\n }\n <!-- 筛选 popover 触发器 -->\n <div>\n <button\n class=\"btn btn-ghost btn-sm gap-1\"\n #filterTrigger=\"cdkOverlayOrigin\"\n [class.btn-active]=\"isQueryActive()\"\n (click)=\"toggleFilterPopover()\"\n cdkOverlayOrigin\n type=\"button\"\n >\n <lucide-icon class=\"h-4 w-4\" [img]=\"Funnel\" />\n 筛选\n @if (isQueryActive()) {\n <span class=\"badge badge-primary badge-xs\">{{ filterQuery().rules.length }}</span>\n }\n </button>\n <ng-template\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOpen]=\"showFilterPopover()\"\n [cdkConnectedOverlayOrigin]=\"filterTrigger\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n (backdropClick)=\"showFilterPopover.set(false)\"\n cdkConnectedOverlay\n >\n @if (queryBuilderFields().length > 0) {\n <div\n class=\"border-base-300 bg-base-100 rounded-lg border p-3 shadow-lg\"\n (click)=\"$event.stopPropagation()\"\n aria-hidden=\"true\"\n >\n <rxdb-query-builder\n [fields]=\"queryBuilderFields()\"\n [initialQuery]=\"$any(filterQuery())\"\n (queryChange)=\"onQueryChange($event)\"\n (validationChange)=\"onValidationChange($event)\"\n />\n <div class=\"mt-3 flex justify-end gap-2\">\n <button class=\"btn btn-ghost btn-sm\" (click)=\"resetFilter()\" type=\"button\">重置</button>\n <button\n class=\"btn btn-primary btn-sm\"\n [disabled]=\"!pendingQueryValid()\"\n (click)=\"applyFilter()\"\n type=\"button\"\n >\n 确定\n </button>\n </div>\n </div>\n }\n </ng-template>\n </div>\n @if (!isCreateBlocked()) {\n @if (isSelectMode()) {\n <button class=\"btn btn-sm btn-outline\" (click)=\"openCreateDialog()\" type=\"button\">+ 新建</button>\n } @else if (isM2m()) {\n <button class=\"btn btn-primary btn-sm\" (click)=\"openM2mSelectDialog()\" type=\"button\">+ 添加</button>\n } @else {\n <button class=\"btn btn-primary btn-sm\" (click)=\"openCreateDialog()\" type=\"button\">+ 新增</button>\n }\n }\n </div>\n</div>\n\n<!-- 表格主体 -->\n<div class=\"min-h-0 flex-1\">\n @if (isBrowser) {\n @for (key of [namespace() + ':' + name()]; track key) {\n <rxdb-query-table\n [columns]=\"tableColumns()\"\n [filteredCount]=\"filteredCount()\"\n [loading]=\"isInitialLoading()\"\n [loadingMore]=\"isLoadingMore()\"\n [loadMore]=\"loadMore()\"\n [queryActive]=\"isQueryActive()\"\n [records]=\"tableRecords()\"\n (batchUpdated)=\"onBatchUpdated($event)\"\n (cellChanged)=\"onCellChanged($event)\"\n (iconClicked)=\"onIconClicked($event)\"\n (rowDeleted)=\"onRowDeleted($event)\"\n />\n }\n }\n</div>\n\n<!-- Select mode footer -->\n@if (isSelectMode()) {\n <div class=\"border-base-300 flex shrink-0 items-center justify-between border-t px-4 py-3\">\n @if (selectedCount() > 0) {\n <span class=\"text-base-content/70 text-sm\">已选 {{ selectedCount() }} 项</span>\n } @else {\n <span class=\"text-base-content/40 text-sm\">请选择要关联的{{ displayName() }}</span>\n }\n <div class=\"flex gap-2\">\n <button class=\"btn btn-sm\" (click)=\"cancelSelection()\" type=\"button\">取消</button>\n <button\n class=\"btn btn-primary btn-sm\"\n [disabled]=\"selectedCount() === 0\"\n (click)=\"confirmSelection()\"\n type=\"button\"\n >\n 确认添加\n </button>\n </div>\n </div>\n}\n\n<!-- M2M Selection Dialog Template -->\n<ng-template #m2mSelectTpl>\n <rxdb-entity-dialog [title]=\"'添加' + displayName()\" (closeRequested)=\"m2mCancelSelection()\">\n <rxdb-entity-list\n [alreadyLinkedIds]=\"m2mAlreadyLinkedIds()\"\n [mode]=\"'select'\"\n [name]=\"name()\"\n [namespace]=\"namespace()\"\n (selectionCancelled)=\"m2mCancelSelection()\"\n (selectionConfirmed)=\"onM2mSelectionConfirmed($event)\"\n />\n </rxdb-entity-dialog>\n</ng-template>\n","import { getEntityMetadata, RelationKind, RxDB, type EntityMetadata, type EntityType } from '@aiao/rxdb';\nimport type {\n DetailTab,\n DetailTableTab,\n EntityFormData,\n FormFieldChangeEvent,\n FormFieldConfig,\n FormMode,\n FormValidationResult,\n RelatedEntityProvider\n} from '@aiao/rxdb-model';\nimport { buildDetailTabs, buildFormFields, entityToFormData, validateForm } from '@aiao/rxdb-model';\nimport { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ErrorHandler,\n inject,\n input,\n linkedSignal,\n output,\n signal\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { of, switchMap } from 'rxjs';\nimport { EntityDialogComponent } from '../entity-dialog/entity-dialog.component';\nimport { EntityFormComponent } from '../entity-form/rxdb-entity-form-angular';\nimport { EntityListComponent } from '../entity-list/entity-list.component';\n\ntype EntityInstance = { [key: string]: unknown; readonly id: string; save(): Promise<void>; remove(): Promise<void> };\n\n/** CDK Dialog 传入的数据结构 */\nexport interface EntityDetailDialogData {\n metadata: EntityMetadata;\n formFields: FormFieldConfig[];\n formData: EntityFormData;\n formMode: FormMode;\n relatedEntityProvider?: RelatedEntityProvider;\n /** 预填充的外键数据(不可编辑),用于级联新增场景 */\n fixedFormData?: EntityFormData;\n /** 委托保存:不创建草稿实体,仅 emit formSubmitted 让调用方处理 */\n delegateSave?: boolean;\n /** 创建链路中的实体类型(namespace:name),用于阻断循环创建 */\n creationChain?: string[];\n}\n\nlet nextDetailId = 0;\n\n@Component({\n selector: 'rxdb-entity-detail',\n imports: [EntityFormComponent, EntityListComponent, EntityDialogComponent],\n templateUrl: './entity-detail.html',\n styleUrl: './entity-detail.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EntityDetailComponent {\n readonly #dialogRef = inject(DialogRef, { optional: true });\n readonly #dialogData = inject(DIALOG_DATA, { optional: true }) as EntityDetailDialogData | null;\n readonly #rxdb = inject(RxDB, { optional: true }) as RxDB | null;\n readonly #errorHandler = inject(ErrorHandler);\n\n /** 创建模式下的草稿实体实例(立即创建,不保存) */\n #draftEntity: EntityInstance | null = null;\n\n // 根据 namespace + name 查找对应实体类\n readonly #entityCls = computed<EntityType | null>(() => {\n const rxdb = this.#rxdb;\n if (!rxdb) return null;\n const ns = this.namespace();\n const nm = this.name();\n if (!ns || !nm) return null;\n return (\n rxdb.config.entities.find(cls => {\n const meta = getEntityMetadata(cls);\n return meta.namespace === ns && meta.name === nm;\n }) ?? null\n );\n });\n\n /** Dialog 传入的实体类(根据 metadata 查找) */\n readonly #entityClsFromDialog = computed<EntityType | null>(() => {\n const rxdb = this.#rxdb;\n const meta = this.#dialogData?.metadata;\n if (!rxdb || !meta) return null;\n return (\n rxdb.config.entities.find(cls => {\n const m = getEntityMetadata(cls);\n return m.namespace === meta.namespace && m.name === meta.name;\n }) ?? null\n );\n });\n\n readonly #metadataFromRouteInputs = computed<EntityMetadata | null>(() => {\n const cls = this.#entityCls();\n return cls ? getEntityMetadata(cls) : null;\n });\n\n readonly #formFieldsFromRouteInputs = computed<FormFieldConfig[] | null>(() => {\n const meta = this.#metadataFromRouteInputs();\n if (!meta) return null;\n return buildFormFields(meta, this.formModeValue);\n });\n\n readonly #entityInstance = toSignal(\n toObservable(computed(() => ({ cls: this.#entityCls(), id: this.entityId() }))).pipe(\n switchMap(({ cls, id }) => {\n if (!cls || !id || !this.#rxdb) return of(null);\n return this.#rxdb.entityManager.getRepository(cls).get(id);\n })\n ),\n { initialValue: null }\n );\n\n // 路由参数输入(与 namespace/name/entityId 路由参数绑定)\n readonly namespace = input<string>();\n readonly name = input<string>();\n readonly entityId = input<string>();\n\n /** 唯一的 radio group name,避免多个 EntityDetailComponent 实例之间的 radio 冲突 */\n readonly tabGroupName = `detail-tabs-${nextDetailId++}`;\n\n // 直接绑定输入\n readonly metadata = input<EntityMetadata | undefined>(undefined);\n readonly formFields = input<FormFieldConfig[]>();\n readonly formData = input<EntityFormData>();\n readonly formMode = input<FormMode | undefined>(undefined);\n readonly relatedEntityProvider = input<RelatedEntityProvider>();\n\n readonly formSubmitted = output<EntityFormData>();\n readonly formCancelled = output<void>();\n readonly fieldChanged = output<FormFieldChangeEvent>();\n readonly validationErrors = output<FormValidationResult>();\n\n /** 是否使用外部保存模式(create 模式下,保存/取消按钮在 tabs 下面,而非 form 内) */\n readonly isCreateMode = computed(() => this.formModeValue === 'create');\n\n /** 当前表单编辑数据(create 模式下跟踪用户输入) */\n readonly draftFormData = signal<EntityFormData>({});\n\n /** 暴露草稿实体给模板(关系 tab 的 entity-list 需要) */\n readonly draftEntitySignal = signal<EntityInstance | null>(null);\n\n /** 父实体(草稿或已保存实例),用于关系 tab 的 entity-list */\n readonly parentEntityForRelation = computed<EntityInstance | null>(() => {\n return this.draftEntitySignal() ?? (this.#entityInstance() as EntityInstance | null) ?? null;\n });\n\n /** 弹框标题 */\n readonly dialogTitle = computed(() => {\n const meta = this.metadataValue;\n const mode = this.formModeValue;\n const name = meta?.displayName ?? meta?.name ?? '';\n return mode === 'create' ? `新建${name}` : name;\n });\n\n /** 创建链路:当前实体 + 祖先链路,传递给子 entity-list 以阻断循环创建 */\n readonly creationChain = computed<string[]>(() => {\n const parentChain = this.#dialogData?.creationChain ?? [];\n if (!this.isCreateMode()) return parentChain;\n const meta = this.metadataValue;\n if (!meta) return parentChain;\n const key = `${meta.namespace}:${meta.name}`;\n return parentChain.includes(key) ? parentChain : [...parentChain, key];\n });\n\n /** 当前活动关系 tab 的 relationName(用于子实体注册关系) */\n readonly activeRelationName = computed<string | undefined>(() => {\n const tab = this.activeTab();\n return tab?.type === 'table' ? (tab as DetailTableTab).relationName : undefined;\n });\n\n readonly tabs = computed(() => {\n const meta = this.metadataValue;\n if (!meta) return [];\n const chain = this.creationChain();\n return buildDetailTabs(meta).filter(tab => {\n if (tab.type !== 'table') return true;\n const t = tab as DetailTableTab;\n const key = `${t.relatedNamespace}:${t.relatedEntityName}`;\n return !chain.includes(key);\n });\n });\n readonly activeTabKey = linkedSignal<DetailTab[], string>({\n source: this.tabs,\n computation: tabs => tabs[0]?.key ?? 'basic'\n });\n\n readonly activeTab = computed(() => this.tabs().find(t => t.key === this.activeTabKey()));\n\n // 公开访问器 - 优先级:直接 input > 路由推导 > dialog data\n get metadataValue(): EntityMetadata {\n return this.metadata() ?? this.#metadataFromRouteInputs() ?? this.#dialogData!.metadata;\n }\n\n get formFieldsValue(): FormFieldConfig[] {\n const fields = this.formFields() ?? this.#formFieldsFromRouteInputs() ?? this.#dialogData!.formFields;\n const fixed = this.#dialogData?.fixedFormData;\n if (!fixed) return fields;\n return fields.map(f => (f.field in fixed ? { ...f, readonly: true } : f));\n }\n\n get formDataValue(): EntityFormData {\n if (this.isCreateMode()) {\n const draft = this.draftFormData();\n const fixed = this.#dialogData?.fixedFormData;\n return fixed ? { ...draft, ...fixed } : draft;\n }\n const inst = this.#entityInstance();\n if (inst) return entityToFormData(inst as Record<string, unknown>, this.formFieldsValue ?? []);\n const base = this.formData() ?? this.#dialogData?.formData ?? {};\n const fixed = this.#dialogData?.fixedFormData;\n return fixed ? { ...base, ...fixed } : base;\n }\n\n get formModeValue(): FormMode {\n return this.formMode() ?? this.#dialogData?.formMode ?? 'edit';\n }\n\n get relatedEntityProviderValue(): RelatedEntityProvider | undefined {\n return this.relatedEntityProvider() ?? this.#dialogData?.relatedEntityProvider;\n }\n\n constructor() {\n if (this.#dialogData?.formMode === 'create' && !this.#dialogData.delegateSave) {\n const cls = this.#entityClsFromDialog();\n if (cls) {\n const fixed = this.#dialogData.fixedFormData;\n const merged = { ...(this.#dialogData.formData || {}), ...fixed };\n this.#draftEntity = new (cls as any)(merged) as EntityInstance;\n this.draftEntitySignal.set(this.#draftEntity);\n this.draftFormData.set(\n entityToFormData(this.#draftEntity as Record<string, unknown>, this.#dialogData.formFields)\n );\n }\n }\n }\n\n selectTab(key: string): void {\n const targetTab = this.tabs().find(t => t.key === key);\n if (this.isCreateMode() && targetTab?.type === 'table') {\n const fields = this.formFieldsValue;\n const data = this.draftFormData();\n const fixed = this.#dialogData?.fixedFormData;\n const merged = fixed ? { ...data, ...fixed } : data;\n const result = validateForm(fields, merged);\n if (!result.valid) {\n this.validationErrors.emit(result);\n return;\n }\n this.#syncDraftEntity();\n }\n this.activeTabKey.set(key);\n }\n\n onFormDataChanged(data: EntityFormData): void {\n this.draftFormData.set(data);\n }\n\n onFormSubmitted(data: EntityFormData): void {\n this.formSubmitted.emit(data);\n }\n\n onFormCancelled(): void {\n this.#cleanupDraftEntity();\n this.formCancelled.emit();\n this.#dialogRef?.close();\n }\n\n onFieldChanged(event: FormFieldChangeEvent): void {\n if (this.isCreateMode()) {\n this.draftFormData.update(d => ({ ...d, [event.field]: event.value }));\n }\n this.fieldChanged.emit(event);\n }\n\n onValidationErrors(result: FormValidationResult): void {\n this.validationErrors.emit(result);\n }\n\n /** 外部保存按钮(create 模式) */\n onSave(): void {\n const fields = this.formFieldsValue;\n const data = this.draftFormData();\n const fixed = this.#dialogData?.fixedFormData;\n const merged = fixed ? { ...data, ...fixed } : data;\n const result = validateForm(fields, merged);\n if (!result.valid) {\n this.validationErrors.emit(result);\n return;\n }\n if (this.#draftEntity) {\n this.#syncDraftEntity();\n this.#draftEntity\n .save()\n .then(() => {\n this.#draftEntity = null;\n this.draftEntitySignal.set(null);\n this.#dialogRef?.close('saved');\n })\n .catch(e => this.#errorHandler.handleError(e));\n } else {\n this.formSubmitted.emit(merged);\n this.#dialogRef?.close();\n }\n }\n\n onCancel(): void {\n this.onFormCancelled();\n }\n\n buildFixedQuery(tab: DetailTableTab): { combinator: 'and'; rules: unknown[] } | undefined {\n const entityId = this.#draftEntity?.id ?? (this.formDataValue as Record<string, unknown>)['id'];\n if (!entityId) return undefined;\n\n if (tab.relationKind === RelationKind.ONE_TO_MANY && tab.foreignKeyField) {\n return { combinator: 'and', rules: [{ field: tab.foreignKeyField, operator: '=', value: entityId }] };\n }\n\n if (tab.relationKind === RelationKind.MANY_TO_MANY && tab.mappedProperty) {\n return { combinator: 'and', rules: [{ field: `${tab.mappedProperty}.id`, operator: '=', value: entityId }] };\n }\n\n return undefined;\n }\n\n buildFixedFormData(tab: DetailTableTab): EntityFormData | undefined {\n const entityId = this.#draftEntity?.id ?? (this.formDataValue as Record<string, unknown>)['id'];\n if (!entityId) return undefined;\n\n if (tab.relationKind === RelationKind.ONE_TO_MANY && tab.foreignKeyField) {\n return { [tab.foreignKeyField]: entityId };\n }\n\n return undefined;\n }\n\n /** 将表单数据同步到草稿实体 */\n #syncDraftEntity(): void {\n if (!this.#draftEntity) return;\n const data = this.draftFormData();\n const fixed = this.#dialogData?.fixedFormData;\n const merged = fixed ? { ...data, ...fixed } : data;\n Object.assign(this.#draftEntity, merged);\n }\n\n /** 清理草稿实体缓存 */\n #cleanupDraftEntity(): void {\n if (!this.#draftEntity || !this.#rxdb) return;\n this.#rxdb.entityManager.removeEntityCache(this.#draftEntity as any);\n this.#draftEntity = null;\n this.draftEntitySignal.set(null);\n }\n}\n","<rxdb-entity-dialog [title]=\"dialogTitle()\" (closeRequested)=\"onCancel()\">\n <!-- Tab Bar -->\n <div class=\"tabs tabs-border min-h-0 flex-1\" role=\"tablist\">\n @for (tab of tabs(); track tab.key) {\n <input\n class=\"tab\"\n [attr.aria-label]=\"tab.label\"\n [checked]=\"tab.key === activeTabKey()\"\n [name]=\"tabGroupName\"\n (change)=\"selectTab(tab.key)\"\n role=\"tab\"\n type=\"radio\"\n />\n <div\n class=\"tab-content border-base-300 bg-base-100 order-1 flex w-full flex-col\"\n [class.overflow-auto]=\"tab.type === 'form'\"\n [class.overflow-hidden]=\"tab.type === 'table'\"\n [class.p-4]=\"tab.type === 'form'\"\n [hidden]=\"tab.key !== activeTabKey()\"\n >\n @if (tab.type === 'form') {\n <rxdb-entity-form\n [data]=\"formDataValue\"\n [fields]=\"formFieldsValue\"\n [mode]=\"formModeValue\"\n [relatedEntityProvider]=\"relatedEntityProviderValue\"\n [showActions]=\"!isCreateMode()\"\n (fieldChanged)=\"onFieldChanged($event)\"\n (formCancelled)=\"onFormCancelled()\"\n (formSubmitted)=\"onFormSubmitted($event)\"\n (validationErrors)=\"onValidationErrors($event)\"\n />\n }\n @if (tab.type === 'table') {\n <rxdb-entity-list\n [creationChain]=\"creationChain()\"\n [draftParentEntity]=\"draftEntitySignal()\"\n [fixedFormData]=\"buildFixedFormData($any(tab))\"\n [fixedQuery]=\"buildFixedQuery($any(tab))\"\n [name]=\"$any(tab).relatedEntityName\"\n [namespace]=\"$any(tab).relatedNamespace\"\n [parentEntity]=\"parentEntityForRelation()\"\n [parentRelationName]=\"$any(tab).relationName\"\n [relationKind]=\"$any(tab).relationKind\"\n />\n }\n </div>\n }\n </div>\n\n <!-- Save/Cancel buttons for create mode (below tabs) -->\n @if (isCreateMode()) {\n <div class=\"border-base-300 flex shrink-0 justify-end gap-2 border-t px-4 py-3\">\n <button class=\"btn\" (click)=\"onCancel()\" type=\"button\">取消</button>\n <button class=\"btn btn-primary\" (click)=\"onSave()\" type=\"button\">保存</button>\n </div>\n }\n</rxdb-entity-dialog>\n","/**\n * @aiao/rxdb-model-angular\n *\n * RxDB 模型 Angular 组件库。\n * VTable 基础设施请从 `@aiao/rxdb-model` 导入。\n */\n\n// Angular 配置\nexport { ENTITY_TABLE_CONFIG } from './config';\n\n// Angular 组件\nexport { EntityTableComponent } from './entity-table/entity-table.component';\nexport { QueryTableComponent } from './query-table/query-table.component';\n\nexport * from '@aiao/rxdb-model';\n","import {\n createQueryBuilderService,\n type FieldMetadata,\n type QueryBuilderRuleGroup,\n type QueryBuilderService,\n type UIRule,\n type ValidationResult\n} from '@aiao/rxdb-model';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, input, OnDestroy, output, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { QueryGroupComponent, type UIRuleGroup } from '../query-group/query-group.component';\n\n/**\n * 子查询构建器组件\n *\n * @description\n * 用于 EXISTS/NOT EXISTS 操作符的嵌套查询条件。\n * 支持:\n * - 添加子条件\n * - 嵌套规则组\n * - 清空子条件\n */\n@Component({\n selector: 'rxdb-subquery-builder',\n standalone: true,\n imports: [CommonModule, QueryGroupComponent],\n template: `\n <div class=\"subquery-builder border-base-300 bg-base-200/50 p-2\">\n @if (!hasRules()) {\n <div class=\"text-base-content/60 flex items-center gap-2\">\n <button class=\"btn btn-ghost btn-xs\" (click)=\"handleAddFirstRule()\" type=\"button\">+ 添加子条件</button>\n <span class=\"text-xs opacity-50\">(可选)</span>\n </div>\n } @else {\n <rxdb-query-group\n [depth]=\"0\"\n [fields]=\"fields()\"\n [group]=\"rootGroup()!\"\n [maxDepth]=\"maxDepth()\"\n (addGroup)=\"onAddGroup($event)\"\n (addRule)=\"onAddRule($event)\"\n (removeItem)=\"onRemoveItem($event)\"\n (updateCombinator)=\"onUpdateCombinator($event)\"\n (updateRule)=\"onUpdateRule($event)\"\n />\n <div class=\"mt-2 flex justify-end\">\n <button class=\"btn btn-ghost btn-xs text-error\" (click)=\"handleClear()\" type=\"button\">清空</button>\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: [\n `\n rxdb-query-group ::ng-deep > .rxdb-query-group {\n border: 0;\n padding: 0;\n }\n `\n ]\n})\nexport class SubqueryBuilderComponent implements OnDestroy {\n private readonly service: QueryBuilderService<Record<string, unknown>>;\n /** initialQuery 是否已应用(只应用一次) */\n private initialQueryApplied = false;\n\n /** 根规则组 Signal */\n private readonly rootGroupSignal: Signal<unknown>;\n\n /** 验证 Signal */\n private readonly validationSignal: Signal<ValidationResult | undefined>;\n\n /** 字段列表 */\n readonly fields = input.required<FieldMetadata[]>();\n\n /** 初始查询 */\n readonly initialQuery = input<QueryBuilderRuleGroup<Record<string, unknown>>>();\n\n /** 最大嵌套层级 */\n readonly maxDepth = input<number>(3);\n\n /** 查询变更事件 */\n readonly queryChange = output<{ combinator: 'and' | 'or'; rules: unknown[] } | undefined>();\n\n /** 验证变更事件 */\n readonly validationChange = output<ValidationResult>();\n\n /** 根规则组 */\n readonly rootGroup: Signal<UIRuleGroup | undefined> = computed(() => {\n return this.rootGroupSignal() as UIRuleGroup | undefined;\n });\n\n /** 是否有规则 */\n readonly hasRules = computed(() => {\n const group = this.rootGroup();\n return group && group.rules.length > 0;\n });\n\n constructor() {\n // 在构造函数中初始化服务\n this.service = createQueryBuilderService<Record<string, unknown>>({\n config: {\n maxNestingLevel: this.maxDepth()\n }\n });\n\n // 转换 Observable 为 Signal\n this.rootGroupSignal = toSignal(this.service.rootGroup$, { requireSync: true });\n this.validationSignal = toSignal(this.service.validation$, { initialValue: undefined });\n\n // 监听字段变化并同步到服务\n effect(() => {\n const fields = this.fields();\n if (fields.length > 0) {\n this.service.setFields(fields);\n }\n });\n\n // 监听初始查询并加载(只应用一次,避免用户修改后被重置)\n effect(() => {\n if (!this.initialQueryApplied) {\n const initial = this.initialQuery();\n if (initial) {\n this.initialQueryApplied = true;\n this.service.fromRxDBQuery(initial as any);\n }\n }\n });\n\n // 监听查询变化并发出事件\n effect(() => {\n const group = this.rootGroup();\n if (group) {\n const query = this.service.toRxDBQuery();\n // 如果没有规则,返回 undefined 而不是空的 RuleGroup\n if (!query.rules || query.rules.length === 0) {\n this.queryChange.emit(undefined);\n } else {\n this.queryChange.emit(query);\n }\n }\n });\n\n // 监听验证变化并发出事件\n effect(() => {\n const validation = this.validationSignal();\n if (validation) {\n this.validationChange.emit(validation);\n }\n });\n\n // 同步 maxDepth 到 service\n effect(() => {\n this.service.setMaxNestingLevel(this.maxDepth());\n });\n }\n\n /** 销毁服务 */\n ngOnDestroy(): void {\n this.service.destroy();\n }\n\n /** 添加第一条规则 */\n handleAddFirstRule(): void {\n const firstField = this.fields()[0];\n if (firstField) {\n this.service.addRule(undefined, {\n field: firstField.name,\n operator:\n firstField.isRelation ? 'exists'\n : firstField.type === 'keyValue' ? 'null'\n : '=',\n value: firstField.type === 'boolean' ? false : ''\n } as any);\n }\n }\n\n /** 清空所有规则 */\n handleClear(): void {\n this.service.clear();\n }\n\n /** 添加规则到指定组 */\n onAddRule(event: { parentId: string; rule: Omit<UIRule, 'id'> }): void {\n this.service.addRule(event.parentId, event.rule as any);\n }\n\n /** 添加子组到指定组 */\n onAddGroup(parentId: string): void {\n this.service.addGroup(parentId);\n }\n\n /** 删除规则或组 */\n onRemoveItem(id: string): void {\n this.service.remove(id);\n }\n\n /** 更新规则 */\n onUpdateRule(event: { id: string; updates: Partial<UIRule> }): void {\n this.service.updateRule(event.id, event.updates as any);\n }\n\n /** 更新组合器 */\n onUpdateCombinator(event: { id: string; combinator: 'and' | 'or' }): void {\n this.service.updateGroupCombinator(event.id, event.combinator);\n }\n}\n","/**\n * @aiao/rxdb-model-angular\n *\n * Angular 查询构建器组件库\n *\n * @description\n * 提供可视化的 RxDB 查询条件构建组件,支持:\n * - 从 EntityMetadata 自动解析字段\n * - 支持多种数据类型和操作符\n * - AND/OR 条件组合\n * - 最大 5 层嵌套\n * - 实时验证\n *\n * @example\n * ```typescript\n * import { QueryBuilderComponent } from '@aiao/rxdb-model-angular';\n *\n * @Component({\n * imports: [QueryBuilderComponent],\n * template: `\n * <rxdb-query-builder\n * [entity]=\"userEntity\"\n * (queryChange)=\"onQueryChange($event)\"\n * />\n * `\n * })\n * export class MyComponent {\n * userEntity = inject(UserEntity);\n *\n * onQueryChange(query: RuleGroup<User>) {\n * console.log('Query changed:', query);\n * }\n * }\n * ```\n */\n\n// 主组件\nexport { QueryBuilderComponent } from './query-builder/query-builder.component';\n\n// 子组件(可单独使用)\nexport { FieldSelectorComponent } from './field-selector/field-selector.component';\nexport { OperatorSelectorComponent } from './operator-selector/operator-selector.component';\nexport { PopoverSelectComponent } from './popover-select/popover-select.component';\nexport { QueryGroupComponent } from './query-group/query-group.component';\nexport { QueryRuleComponent } from './query-rule/query-rule.component';\nexport { SubqueryBuilderComponent } from './subquery-builder/subquery-builder.component';\nexport { TreeItemDirective, TreeSelectComponent } from './tree-select/tree-select.component';\nexport { ValueInputComponent } from './value-input/value-input.component';\n\n// 主题注入\nexport { DEFAULT_QUERY_BUILDER_THEME } from './theme/default-query-builder-theme';\nexport { QUERY_BUILDER_THEME, provideQueryBuilderTheme } from './theme/query-builder-theme.token';\n\n// Core exports\nexport * from '@aiao/rxdb-model';\nexport type { QueryBuilderTheme } from './theme/query-builder-theme.token';\n","// Entity Detail Angular\nexport * from './entity-detail/entity-detail';\n\n// Entity Dialog Angular\nexport * from './entity-dialog/index';\n\n// Entity Form Angular\nexport * from './entity-form/rxdb-entity-form-angular';\n\n// Entity List Angular\nexport { EntityListComponent } from './entity-list/entity-list.component';\n\n// Entity Table Angular\nexport * from './entity-table/index';\n\n// Query Builder Angular\nexport * from './query-builder/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["vtChangeCellValue","_uid","i1","coreGetInputType","coreGetDefaultValue"],"mappings":"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"}