@ai-table/grid 0.0.17 → 0.0.18
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/components/field-menu/field-menu.component.mjs +3 -3
- package/esm2022/core/coordinate.mjs +2 -2
- package/esm2022/dom-grid.component.mjs +2 -2
- package/esm2022/grid-base.component.mjs +4 -5
- package/esm2022/grid.component.mjs +10 -6
- package/esm2022/renderer/components/add-field-column.component.mjs +14 -7
- package/esm2022/renderer/renderer.component.mjs +9 -5
- package/esm2022/services/field.service.mjs +2 -1
- package/esm2022/types/component-config.mjs +1 -1
- package/esm2022/types/grid.mjs +1 -1
- package/esm2022/utils/build.mjs +3 -3
- package/fesm2022/ai-table-grid.mjs +40 -26
- package/fesm2022/ai-table-grid.mjs.map +1 -1
- package/grid-base.component.d.ts +4 -5
- package/grid-base.component.d.ts.map +1 -1
- package/grid.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/renderer/components/add-field-column.component.d.ts.map +1 -1
- package/renderer/renderer.component.d.ts +2 -0
- package/renderer/renderer.component.d.ts.map +1 -1
- package/services/field.service.d.ts.map +1 -1
- package/types/component-config.d.ts +1 -0
- package/types/component-config.d.ts.map +1 -1
- package/types/grid.d.ts +1 -0
- package/types/grid.d.ts.map +1 -1
- package/utils/build.d.ts +1 -1
- package/utils/build.d.ts.map +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ai-table-grid.mjs","sources":["../../../packages/grid/src/constants/colors.ts","../../../packages/grid/src/core/types/ai-table.ts","../../../packages/grid/src/core/types/core.ts","../../../packages/grid/src/core/constants/field.ts","../../../packages/grid/src/types/avatar.ts","../../../packages/grid/src/types/component-config.ts","../../../packages/grid/src/types/grid.ts","../../../packages/grid/src/types/row.ts","../../../packages/grid/src/core/coordinate.ts","../../../packages/grid/src/core/utils/id-creator.ts","../../../packages/grid/src/core/utils/field.ts","../../../packages/grid/src/core/utils/common.ts","../../../packages/grid/src/core/utils/queries.ts","../../../packages/grid/src/core/context.ts","../../../packages/grid/src/components/cell-editors/abstract-cell-editor.component.ts","../../../packages/grid/src/components/cell-editors/date/date-editor.component.ts","../../../packages/grid/src/components/cell-editors/link/edit-link/edit-link.component.ts","../../../packages/grid/src/components/cell-editors/link/edit-link/edit-link.component.html","../../../packages/grid/src/components/cell-editors/link/link-editor.component.ts","../../../packages/grid/src/components/cell-editors/link/link-editor.component.html","../../../packages/grid/src/components/cell-editors/number/number-editor.component.ts","../../../packages/grid/src/components/cell-editors/progress/progress-editor.component.ts","../../../packages/grid/src/components/cell-editors/rating/rating-editor.component.ts","../../../packages/grid/src/pipes/grid.pipe.ts","../../../packages/grid/src/components/cell-views/select/option.component.ts","../../../packages/grid/src/components/cell-views/select/option.component.html","../../../packages/grid/src/components/cell-editors/select/select-editor.component.ts","../../../packages/grid/src/components/cell-editors/select/select-editor.component.html","../../../packages/grid/src/components/cell-editors/text/text-editor.component.ts","../../../packages/grid/src/components/field-property-editor/field-property-editor.component.ts","../../../packages/grid/src/components/field-property-editor/field-property-editor.component.html","../../../packages/grid/src/constants/editor.ts","../../../packages/grid/src/constants/table.ts","../../../packages/grid/src/constants/grid.ts","../../../packages/grid/src/constants/icon.ts","../../../packages/grid/src/constants/text.ts","../../../packages/grid/src/components/field-menu/field-menu.component.ts","../../../packages/grid/src/components/field-menu/field-menu.component.html","../../../packages/grid/src/utils/build.ts","../../../packages/grid/src/services/field.service.ts","../../../packages/grid/src/services/selection.service.ts","../../../packages/grid/src/utils/cell.ts","../../../packages/grid/src/utils/common.ts","../../../packages/grid/src/utils/get-placeholder-cells.ts","../../../packages/grid/src/utils/get-text-width.ts","../../../packages/grid/src/utils/image-cache.ts","../../../packages/grid/src/utils/os.ts","../../../packages/grid/src/utils/visible-range.ts","../../../packages/grid/src/utils/position.ts","../../../packages/grid/src/utils/style.ts","../../../packages/grid/src/utils/text-measure.ts","../../../packages/grid/src/services/event.service.ts","../../../packages/grid/src/grid-base.component.ts","../../../packages/grid/src/dom-grid.component.ts","../../../packages/grid/src/dom-grid.component.html","../../../packages/grid/src/angular-konva/components/container.token.ts","../../../packages/grid/src/angular-konva/utils/update-picture.ts","../../../packages/grid/src/angular-konva/utils/apply-node-props.ts","../../../packages/grid/src/angular-konva/utils/common.ts","../../../packages/grid/src/angular-konva/components/shape.component.ts","../../../packages/grid/src/angular-konva/components/container.component.ts","../../../packages/grid/src/angular-konva/components/stage.component.ts","../../../packages/grid/src/angular-konva/interfaces/component.ts","../../../packages/grid/src/angular-konva/interfaces/shape.ts","../../../packages/grid/src/renderer/components/icon.component.ts","../../../packages/grid/src/renderer/components/add-field-column.component.ts","../../../packages/grid/src/renderer/drawers/drawer.ts","../../../packages/grid/src/renderer/drawers/layout-drawer.ts","../../../packages/grid/src/renderer/drawers/add-row-layout-drawer.ts","../../../packages/grid/src/renderer/drawers/cell-drawer.ts","../../../packages/grid/src/renderer/drawers/record-row-layout-drawer.ts","../../../packages/grid/src/renderer/creations/create-cells.ts","../../../packages/grid/src/renderer/components/cells.component.ts","../../../packages/grid/src/renderer/components/field-icon.component.ts","../../../packages/grid/src/renderer/components/text.component.ts","../../../packages/grid/src/renderer/components/field-head.component.ts","../../../packages/grid/src/renderer/components/frozen-cells.component.ts","../../../packages/grid/src/renderer/creations/create-heads.ts","../../../packages/grid/src/renderer/components/frozen-heads.component.ts","../../../packages/grid/src/renderer/components/frozen-placeholder-cells.component.ts","../../../packages/grid/src/renderer/components/heads.component.ts","../../../packages/grid/src/renderer/components/hover-row-heads.component.ts","../../../packages/grid/src/renderer/components/other-rows.component.ts","../../../packages/grid/src/renderer/components/placeholder-cells.component.ts","../../../packages/grid/src/renderer/creations/create-active-cell-border.ts","../../../packages/grid/src/renderer/renderer.component.ts","../../../packages/grid/src/renderer/renderer.component.html","../../../packages/grid/src/grid.component.ts","../../../packages/grid/src/grid.component.html","../../../packages/grid/src/ai-table-grid.ts"],"sourcesContent":["export const Colors = {\n primary: '#6698FF',\n gray100: '#f5f5f5',\n gray200: '#eee',\n gray300: '#ddd',\n gray800: '#333',\n gray600: '#999',\n gray700: '#666',\n white: '#fff',\n black: '#000',\n transparent: 'transparent',\n gray80: '#fafafa',\n headSelectedBgColor: '#EAEFFA',\n itemActiveBgColor: '#6698ff1a',\n waring: '#ffcd5d',\n success: '#73d897'\n};\n","import { Signal, WritableSignal } from '@angular/core';\nimport { Colors } from '../../constants/colors';\nimport { AITableSelection } from '../../types';\nimport { RendererContext } from '../context';\nimport { AITableField, AITableFields, AITableRecord, AITableRecords } from './core';\n\nexport interface AITable {\n records: WritableSignal<AITableRecords>;\n fields: WritableSignal<AITableFields>;\n context?: RendererContext;\n selection: WritableSignal<AITableSelection>;\n recordsMap: Signal<{ [kay: string]: AITableRecord }>;\n fieldsMap: Signal<{ [kay: string]: AITableField }>;\n recordsWillHidden: WritableSignal<string[]>;\n recordsWillMove: WritableSignal<string[]>\n}\n\nexport type AIPlugin = (aiTable: AITable) => AITable;\n\nexport const AITable = {\n getColors() {\n return Colors;\n },\n getVisibleFields(aiTable: AITable) {\n return aiTable.fields().filter((field) => !field.hidden);\n },\n getVisibleRows(aiTable: AITable) {\n return aiTable.records();\n },\n getActiveCell(aiTable: AITable): { recordId: string; fieldId: string } | null {\n const selection = aiTable.selection();\n let selectedCells = [];\n for (let [recordId, fieldIds] of selection.selectedCells.entries()) {\n for (let fieldId of Object.keys(fieldIds)) {\n if ((fieldIds as { [key: string]: boolean })[fieldId]) {\n selectedCells.push({\n recordId,\n fieldId\n });\n }\n }\n }\n return selectedCells ? selectedCells[0] : null;\n },\n isCellVisible(aiTable: AITable, cell: { recordId: string; fieldId: string }) {\n const visibleRowIndexMap = aiTable.context!.visibleRowsIndexMap();\n const visibleColumnIndexMap = aiTable.context!.visibleColumnsMap();\n return visibleRowIndexMap!.has(cell.recordId) && visibleColumnIndexMap.has(cell.fieldId);\n },\n getCellIndex(aiTable: AITable, cell: { recordId: string; fieldId: string }): { rowIndex: number; columnIndex: number } | null {\n const visibleRowIndexMap = aiTable.context!.visibleRowsIndexMap();\n const visibleColumnIndexMap = aiTable.context!.visibleColumnsMap();\n if (AITable.isCellVisible(aiTable, cell)) {\n return {\n rowIndex: visibleRowIndexMap!.get(cell.recordId)!,\n columnIndex: visibleColumnIndexMap.get(cell.fieldId)!\n };\n }\n return null;\n }\n};\n","import { Id } from 'ngx-tethys/types';\n\nexport enum AITableFieldType {\n text = 'text', // 包含多行文本\n richText = 'rich_text', // 包含多行文本\n select = 'select', // 包含单选和多选\n number = 'number',\n date = 'date',\n member = 'member', // 包含单个和多个\n // cascadeSelect = 'cascade_select', // 包含单选和多选,参数复杂后续再进行设计\n progress = 'progress',\n rate = 'rate',\n link = 'link',\n createdAt = 'created_at',\n updatedAt = 'updated_at',\n createdBy = 'created_by',\n updatedBy = 'updated_by'\n}\n\nexport type SystemFieldTypes =\n | AITableFieldType.createdAt\n | AITableFieldType.createdBy\n | AITableFieldType.updatedAt\n | AITableFieldType.updatedBy;\n\nexport enum AITableStatType {\n None = 0,\n CountAll = 1,\n Empty = 2,\n Filled = 3,\n Unique = 4,\n PercentEmpty = 5,\n PercentFilled = 6,\n PercentUnique = 7,\n Sum = 8,\n Average = 9,\n Max = 10,\n Min = 11,\n DateRangeOfDays = 12,\n DateRangeOfMonths = 13,\n Checked = 14,\n UnChecked = 15,\n PercentChecked = 16,\n PercentUnChecked = 17\n}\n\nexport interface AITableFieldOption {\n name: string;\n type: AITableFieldType;\n icon: string;\n width: number;\n settings?: AITableFieldSettings;\n}\n\nexport interface AITableField {\n _id: string;\n name: string;\n type: AITableFieldType;\n icon?: string;\n width?: number;\n hidden?: boolean;\n frozen?: boolean;\n stat_type?: AITableStatType;\n settings?: AITableFieldSettings;\n}\n\nexport type AITableFieldSettings = TextSettings | RichTextSettings | SelectSettings | MemberSettings;\n\nexport interface TextSettings {}\n\nexport interface RichTextSettings {}\n\nexport interface SelectSettings extends IsMultiple {\n option_style?: AITableSelectOptionStyle;\n options: AITableSelectOption[];\n}\n\nexport interface MemberSettings extends IsMultiple {}\n\nexport interface IsMultiple {\n is_multiple?: boolean;\n}\n\nexport interface AITableSelectOption {\n _id: string;\n text: string;\n icon?: string;\n color?: string;\n bg_color?: string;\n}\n\nexport enum AITableSelectOptionStyle {\n text = 1,\n tag = 2,\n dot = 3,\n piece = 4\n}\n\nexport type TextFieldValue = string;\n\nexport type SelectFieldValue = Id[]; // 数字\n\nexport type NumberFieldValue = number;\n\nexport type DateFieldValue = { timestamp: number }; // 时间戳\n\nexport type MemberFieldValue = Id[];\n\nexport type ProgressFieldValue = number; // [0,1]\n\nexport type RateFieldValue = 1 | 2 | 3 | 4 | 5;\n\nexport type FieldValue =\n | TextFieldValue\n | SelectFieldValue\n | NumberFieldValue\n | DateFieldValue\n | MemberFieldValue\n | ProgressFieldValue\n | RateFieldValue\n | any;\n\nexport interface TrackableEntity {\n created_at: NumberFieldValue;\n created_by: string;\n updated_at: NumberFieldValue;\n updated_by: string;\n}\n\nexport interface UpdateTrackableEntity {\n updated_at: NumberFieldValue;\n updated_by: string;\n}\n\nexport interface AITableRecord {\n _id: string;\n created_at: NumberFieldValue;\n created_by: string;\n updated_at: NumberFieldValue;\n updated_by: string;\n values: Record<string, FieldValue>;\n}\n\nexport interface AITableRecordUpdatedInfo {\n updated_at: number;\n updated_by: string;\n}\n\nexport type AITableRecords = AITableRecord[];\n\nexport type AITableFields = AITableField[];\n\nexport interface AITableValue {\n records: AITableRecords;\n fields: AITableFields;\n}\n\nexport enum Direction {\n before = 'before',\n after = 'after'\n}\n\nexport interface AddRecordOptions {\n originId: string;\n direction?: Direction;\n isDuplicate?: boolean;\n count?: number;\n}\n\nexport interface AddFieldOptions {\n originId: string;\n defaultValue: Partial<AITableField>;\n direction?: Direction;\n isDuplicate?: boolean;\n count?: number;\n}\n\nexport interface UpdateFieldValueOptions<T = unknown> {\n value: T;\n path: AIFieldValueIdPath;\n}\n\nexport interface SetFieldOptions<T = unknown> {\n field: AITableField;\n path: IdPath;\n}\n\nexport type NumberPath = [number];\n\nexport type IdPath = [string];\n\nexport type AIFieldValueIdPath = [string, string];\n\nexport type Path = NumberPath | IdPath | AIFieldValueIdPath;\n","import { AITableFieldOption, AITableFieldType } from '../types';\n\nexport const FieldOptions: AITableFieldOption[] = [\n {\n type: AITableFieldType.text,\n name: '单行文本',\n icon: 'font',\n width: 300\n },\n // 多行文本\n {\n type: AITableFieldType.select,\n name: '单选',\n icon: 'check-circle',\n width: 200\n },\n {\n type: AITableFieldType.select,\n name: '多选',\n icon: 'list-check',\n width: 200,\n settings: {\n is_multiple: true\n }\n },\n {\n type: AITableFieldType.number,\n name: '数字',\n icon: 'hashtag',\n width: 200\n },\n {\n type: AITableFieldType.date,\n name: '日期',\n icon: 'calendar',\n width: 200\n },\n {\n type: AITableFieldType.member,\n name: '成员',\n icon: 'user',\n width: 200,\n settings: {\n is_multiple: true\n }\n },\n // 级联单选\n // 级联多选\n {\n type: AITableFieldType.progress,\n name: '进度',\n icon: 'progress',\n width: 200\n },\n {\n type: AITableFieldType.rate,\n name: '评分',\n icon: 'star-circle',\n width: 200\n },\n {\n type: AITableFieldType.link,\n name: '链接',\n icon: 'link-insert',\n width: 300\n },\n {\n type: AITableFieldType.createdBy,\n name: '创建人',\n icon: 'user',\n width: 200\n },\n {\n type: AITableFieldType.createdAt,\n name: '创建时间',\n icon: 'calendar',\n width: 200\n },\n {\n type: AITableFieldType.updatedBy,\n name: '更新人',\n icon: 'user',\n width: 200\n },\n {\n type: AITableFieldType.updatedAt,\n name: '更新时间',\n icon: 'calendar',\n width: 200\n }\n];","export enum AITableAvatarSize {\n size16 = 16,\n size20 = 22,\n size24 = 24,\n size28 = 28,\n size32 = 32,\n size36 = 36,\n size44 = 44,\n size48 = 48,\n size68 = 68,\n size110 = 110,\n size160 = 160\n}\n\nexport enum AITableAvatarType {\n member,\n space,\n team\n}\n\nexport enum AITableMemberType {\n team = 1,\n role = 2,\n member = 3\n}\n","import Konva from 'konva';\nimport { AITable, AITableField, Coordinate } from '../core';\nimport { AITablePointPosition } from './grid';\n\nexport interface AITableIconConfig extends Konva.ShapeConfig {\n size?: number;\n}\n\nexport interface AITableFieldTypeIconConfig {\n field: AITableField;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n fill?: string;\n}\n\nexport interface AITableFieldHeadConfig {\n x?: number;\n y?: number;\n width: number;\n height: number;\n field: AITableField;\n stroke?: string;\n iconVisible?: boolean;\n isSelected?: boolean;\n isHoverIcon?: boolean;\n}\n\nexport interface AITableColumnHeadsConfig {\n aiTable: AITable;\n coordinate: Coordinate;\n columnStartIndex: number;\n columnStopIndex: number;\n pointPosition: AITablePointPosition;\n}\n\nexport interface AITableAddFieldConfig {\n aiTable: AITable;\n coordinate: Coordinate;\n fields: AITableField[];\n columnStopIndex: number;\n pointPosition: AITablePointPosition;\n}\n\nexport interface AITableTargetNameOptions {\n targetName: string;\n fieldId?: string;\n recordId?: string;\n mouseStyle?: string;\n}\n\nexport interface AITableTargetNameDetail {\n targetName: string | null;\n fieldId?: string | null;\n recordId?: string | null;\n mouseStyle?: string | null;\n}\n\nexport enum AITableMouseDownType {\n Left,\n Center,\n Right\n}\n","import { Signal, WritableSignal } from '@angular/core';\nimport { Dictionary } from 'ngx-tethys/types';\nimport { AITable, AITableField, AITableFieldType, AITableRecord, Coordinate, FieldValue, UpdateFieldValueOptions } from '../core';\nimport { AITableFieldMenuItem } from './field';\nimport { AITableLinearRow } from './row';\n\nexport interface AITableGridCellRenderSchema {\n editor?: any;\n transform?: (field: AITableField, value: FieldValue) => any;\n}\n\nexport interface AITableGridData {\n type: 'grid';\n fields: AITableField[];\n records: AITableRecord[];\n}\n\nexport interface AITableSelection {\n selectedRecords: Map<string, boolean>;\n selectedFields: Map<string, boolean>;\n selectedCells: Map<string, {}>;\n}\n\nexport interface AIFieldConfig {\n fieldRenderers?: Partial<Record<AITableFieldType, AITableGridCellRenderSchema>>;\n fieldPropertyEditor?: any;\n fieldMenus?: AITableFieldMenuItem[];\n}\n\nexport interface AITableUserInfo {\n uid?: string;\n display_name?: string;\n avatar?: string;\n}\n\nexport interface AITableReferences {\n members: Dictionary<AITableUserInfo>;\n}\n\nexport interface AITableRendererConfig {\n aiTable: AITable;\n container: HTMLDivElement;\n coordinate: Coordinate;\n containerWidth: number;\n containerHeight: number;\n references: AITableReferences;\n}\n\nexport enum AITableRowColumnType {\n row = 'row',\n column = 'column'\n}\n\nexport type AITableSizeMap = Record<number, number>;\n\nexport interface AITableCoordinate {\n rowCount: number;\n columnCount: number;\n container: HTMLDivElement;\n rowHeight: number;\n rowInitSize?: number;\n rowIndicesMap: AITableSizeMap;\n columnIndicesMap: AITableSizeMap;\n columnInitSize?: number;\n frozenColumnCount?: number;\n}\n\nexport enum AITableCheckType {\n checked = 'checked',\n unchecked = 'unchecked'\n}\n\nexport interface AITableScrollState {\n scrollTop: number;\n scrollLeft: number;\n isScrolling: boolean;\n}\n\nexport interface ScrollActionOptions {\n deltaX: number;\n deltaY: number;\n shiftKey: boolean;\n callback?: () => void;\n}\n\nexport enum AITableAreaType {\n grid = 'grid',\n none = 'none'\n}\n\nexport type AITablePointPosition = {\n x: number;\n y: number;\n areaType: AITableAreaType;\n targetName: string;\n realTargetName: string;\n rowIndex: number;\n columnIndex: number;\n offsetTop: number;\n offsetLeft: number;\n};\n\nexport interface AITableEditPosition {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface AITableOpenEditOptions {\n recordId: string;\n fieldId: string;\n coordinate: Coordinate;\n container?: HTMLDivElement;\n isHoverEdit?: boolean;\n updateFieldValue: (options: UpdateFieldValueOptions<any>) => void;\n}\n\nexport interface AITableContext {\n linearRows: Signal<AITableLinearRow[]>;\n pointPosition: WritableSignal<AITablePointPosition>;\n scrollState: WritableSignal<AITableScrollState>;\n scrollAction: (options: ScrollActionOptions) => void;\n visibleColumnsMap: Signal<Map<string, number>>;\n visibleRowsIndexMap: Signal<Map<string, number>>;\n}\n","import { AITable, Coordinate } from '../core';\n\nexport enum AITableRowType {\n add = 'add',\n record = 'record'\n}\n\nexport type AITableCellMetaData = {\n size: number;\n offset: number;\n};\n\nexport type AITableCellMetaDataMap = Record<number, AITableCellMetaData>;\n\nexport type AITableLinearRowAdd = {\n _id: string;\n type: AITableRowType.add;\n};\n\nexport type AITableLinearRowRecord = {\n _id: string;\n type: AITableRowType.record;\n displayIndex: number;\n};\n\nexport type AITableLinearRow = AITableLinearRowAdd | AITableLinearRowRecord;\n\nexport interface AITableRowHeadsConfig {\n coordinate: Coordinate;\n rowStartIndex: number;\n rowStopIndex: number;\n aiTable: AITable;\n}\n","import { AITableCellMetaData, AITableCoordinate, AITableRowColumnType, AITableSizeMap } from '../types';\n\n/**\n * 用于构建 Canvas 基础坐标系,后续的绘制工作以此为基础\n */\nexport class Coordinate {\n protected _rowHeight: number;\n public rowCount: number;\n public columnCount: number;\n public container: HTMLDivElement;\n public containerWidth: number;\n public containerHeight: number;\n // 用 index 映射 每一行的 高度\n public rowIndicesMap: AITableSizeMap = {};\n // 用 index 映射 每一列 的 宽度\n public columnIndicesMap: AITableSizeMap = {};\n // 除去表头和编号列真正单元格绘制的初始值 x\n public rowInitSize: number;\n // 除去表头和编号列真正单元格绘制的初始值 y\n public columnInitSize: number;\n // 行坐标集中最后一行的索引\n public lastRowIndex = -1;\n // 列坐标集中最后一列的索引\n public lastColumnIndex = -1;\n public rowMetaDataMap: Record<number, AITableCellMetaData> = {};\n public columnMetaDataMap: Record<number, AITableCellMetaData> = {};\n public frozenColumnCount: number;\n\n constructor({\n rowHeight,\n rowCount,\n columnCount,\n container,\n rowIndicesMap = {},\n columnIndicesMap = {},\n rowInitSize = 0,\n columnInitSize = 0,\n frozenColumnCount = 0\n }: AITableCoordinate) {\n this._rowHeight = rowHeight;\n this.rowCount = rowCount;\n this.columnCount = columnCount;\n this.rowInitSize = rowInitSize;\n this.columnInitSize = columnInitSize;\n this.containerWidth = container.offsetWidth;\n this.rowIndicesMap = rowIndicesMap;\n this.columnIndicesMap = columnIndicesMap;\n this.containerHeight = container.offsetHeight;\n this.frozenColumnCount = frozenColumnCount;\n this.container = container;\n }\n\n public get rowHeight() {\n return this._rowHeight;\n }\n\n public set rowHeight(height: number) {\n this._rowHeight = height;\n }\n\n /**\n * 总宽度\n */\n public get totalWidth() {\n const { offset, size } = this.getCellMetaData(this.columnCount - 1, AITableRowColumnType.column);\n return offset + size;\n }\n\n /**\n * 总高度\n */\n public get totalHeight() {\n const { offset, size } = this.getCellMetaData(this.rowCount - 1, AITableRowColumnType.row);\n return offset + size;\n }\n\n /**\n * 根据 rowIndex 获取对应行高\n */\n public getRowHeight(index: number) {\n return this.rowIndicesMap[index] ?? this.rowHeight;\n }\n\n /**\n * 根据 columnIndex 获取对应列宽\n */\n public getColumnWidth(index: number) {\n return this.columnIndicesMap[index];\n }\n\n /**\n * 获取每个 cell 垂直/水平方向的坐标信息\n */\n protected getCellMetaData(index: number, itemType: AITableRowColumnType): AITableCellMetaData {\n let cellMetadataMap, lastMeasuredIndex, offset;\n const isColumnType = itemType === AITableRowColumnType.column;\n if (isColumnType) {\n offset = this.columnInitSize;\n lastMeasuredIndex = this.lastColumnIndex;\n cellMetadataMap = this.columnMetaDataMap;\n } else {\n offset = this.rowInitSize;\n lastMeasuredIndex = this.lastRowIndex;\n cellMetadataMap = this.rowMetaDataMap;\n }\n if (index > lastMeasuredIndex) {\n if (lastMeasuredIndex >= 0) {\n const itemMetadata = cellMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (let i = lastMeasuredIndex + 1; i <= index; i++) {\n const size = isColumnType ? this.columnIndicesMap[i] : this.rowIndicesMap[i] ?? this.rowHeight;\n\n cellMetadataMap[i] = {\n offset,\n size\n };\n offset += size;\n }\n if (isColumnType) {\n this.lastColumnIndex = index;\n } else {\n this.lastRowIndex = index;\n }\n }\n return cellMetadataMap[index] || { size: 0, offset: 0 };\n }\n\n /**\n * 查找最近的单元格索引\n * 性能较差,但无论如何都可以找到\n */\n private _findNearestCellIndex(index: number, offset: number, itemType: AITableRowColumnType) {\n const itemCount = itemType === AITableRowColumnType.column ? this.columnCount : this.rowCount;\n let interval = 1;\n\n while (index < itemCount && this.getCellMetaData(index, itemType).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return this._findNearestCellIndexByBinary(offset, Math.floor(index / 2), Math.min(index, itemCount - 1), itemType);\n }\n\n /**\n * 二分法查找最近的单元格索引\n * 性能更佳,但需要加载数据\n */\n private _findNearestCellIndexByBinary(offset: number, low: number, high: number, itemType: AITableRowColumnType) {\n while (low <= high) {\n const middle = low + Math.floor((high - low) / 2);\n const currentOffset = this.getCellMetaData(middle, itemType).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n return low > -1 ? low - 1 : 0;\n }\n\n /**\n * 根据偏移量查找最近的单元格索引\n */\n public findNearestCellIndex(offset: number, itemType: AITableRowColumnType) {\n let lastIndex;\n if (itemType === AITableRowColumnType.column) {\n lastIndex = this.lastColumnIndex;\n } else {\n lastIndex = this.lastRowIndex;\n }\n const cellOffset = this.getCellMetaData(lastIndex, itemType).offset;\n const lastMeasuredItemOffset = lastIndex > 0 ? cellOffset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n return this._findNearestCellIndexByBinary(offset, 0, lastIndex, itemType);\n }\n return this._findNearestCellIndex(Math.max(0, lastIndex), offset, itemType);\n }\n\n /**\n * 根据垂直偏移量找到起始单元格的索引\n */\n public getRowStartIndex(offset: number) {\n return this.findNearestCellIndex(offset, AITableRowColumnType.row);\n }\n\n /**\n * 根据垂直起始单元格的索引查找结束单元格的索引\n */\n public getRowStopIndex(startIndex: number, scrollTop: number) {\n const itemMetadata = this.getCellMetaData(startIndex, AITableRowColumnType.row);\n const maxOffset = scrollTop + this.containerHeight;\n let offset = itemMetadata.offset + itemMetadata.size;\n let stopIndex = startIndex;\n\n while (stopIndex < this.rowCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += this.getCellMetaData(stopIndex, AITableRowColumnType.row).size;\n }\n return stopIndex;\n }\n\n /**\n * 根据水平偏移量找到起始单元格的索引\n */\n public getColumnStartIndex(offset: number) {\n return this.findNearestCellIndex(offset, AITableRowColumnType.column);\n }\n\n /**\n * 根据水平起始单元格的索引查找结束单元格的索引\n */\n public getColumnStopIndex(startIndex: number, scrollLeft: number) {\n const itemMetadata = this.getCellMetaData(startIndex, AITableRowColumnType.column);\n const maxOffset = scrollLeft + this.containerWidth;\n let offset = itemMetadata.offset + itemMetadata.size;\n let stopIndex = startIndex;\n\n while (stopIndex < this.columnCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += this.getCellMetaData(stopIndex, AITableRowColumnType.column).size;\n }\n return stopIndex;\n }\n\n /**\n * 根据 rowIndex 获取垂直偏移量\n */\n public getRowOffset(rowIndex: number) {\n return this.getCellMetaData(rowIndex, AITableRowColumnType.row).offset;\n }\n\n /**\n * 根据 columnIndex 获取水平偏移量\n */\n public getColumnOffset(columnIndex: number) {\n return this.getCellMetaData(columnIndex, AITableRowColumnType.column).offset;\n }\n\n /**\n * 冻结区域宽度\n */\n get frozenColumnWidth() {\n return this.getColumnOffset(this.frozenColumnCount) - this.columnInitSize;\n }\n\n /**\n * 根据 rowIndex, columnIndex 获取单元格坐标信息\n */\n public getCellRect(rowIndex: number, columnIndex: number) {\n const { size: height, offset: y } = this.getCellMetaData(rowIndex, AITableRowColumnType.row);\n const { size: width, offset: x } = this.getCellMetaData(columnIndex, AITableRowColumnType.column);\n return {\n x,\n y,\n width,\n height\n };\n }\n}\n","import ObjectID from 'bson-objectid';\n\nexport function idCreator() {\n return ObjectID().toHexString();\n}\n","import { FieldOptions } from '../constants/field';\nimport { AITable, AITableField, AITableFieldOption, AITableFieldType, IsMultiple } from '../types';\nimport { idCreator } from './id-creator';\n\nexport const isArrayField = (field: AITableField) => {\n return (\n [AITableFieldType.member, AITableFieldType.createdBy, AITableFieldType.updatedBy].includes(field.type) ||\n AITableFieldType.select === field.type\n );\n};\n\nexport const isSystemField = (field: AITableField) => {\n return [AITableFieldType.createdAt, AITableFieldType.createdBy, AITableFieldType.updatedAt, AITableFieldType.updatedBy].includes(\n field.type\n );\n};\n\nexport const isNumberFiled = (field: AITableField) => {\n return [AITableFieldType.number, AITableFieldType.progress, AITableFieldType.rate].includes(field.type);\n};\n\nexport function getDefaultFieldValue(field: AITableField) {\n if (isArrayField(field)) {\n return [];\n }\n if (isNumberFiled(field)) {\n return 0;\n }\n return '';\n}\n\nexport function createDefaultFieldName(aiTable: AITable, field: AITableFieldOption) {\n const fieldOption = getFieldOptionByField(field);\n if (fieldOption) {\n const count = aiTable.fields().filter((item) => {\n return isSameFieldOption(field, item);\n }).length;\n return count === 0 ? fieldOption.name : fieldOption.name + ' ' + count;\n }\n return FieldOptions[0].name;\n}\n\nexport function getFieldOptionByField(field: Partial<AITableField>) {\n return FieldOptions.find((item) => isSameFieldOption(item, field));\n}\n\nexport function isSameFieldOption(fieldOption: AITableFieldOption, field: Partial<AITableField>): boolean {\n return (\n fieldOption.type === field.type &&\n (fieldOption.type === AITableFieldType.select\n ? !!(fieldOption.settings as IsMultiple)?.is_multiple === !!(field.settings as IsMultiple)?.is_multiple\n : true)\n );\n}\n\nexport function createDefaultField(aiTable: AITable, type: AITableFieldType = AITableFieldType.text) {\n const fieldOption = FieldOptions.find((item) => item.type === type)!;\n return { _id: idCreator(), type, name: createDefaultFieldName(aiTable, fieldOption) };\n}\n","import { WritableSignal, computed, signal } from '@angular/core';\nimport { AITable, AITableField, AITableFields, AITableRecord, AITableRecords } from '../types';\n\nexport function createAITable(records: WritableSignal<AITableRecords>, fields: WritableSignal<AITableFields>): AITable {\n const aiTable: AITable = {\n records,\n fields,\n selection: signal({\n selectedRecords: new Map(),\n selectedFields: new Map(),\n selectedCells: new Map()\n }),\n recordsMap: computed(() => {\n return records().reduce(\n (object, item) => {\n object[item._id] = item;\n return object;\n },\n {} as { [kay: string]: AITableRecord }\n );\n }),\n fieldsMap: computed(() => {\n return fields().reduce(\n (object, item) => {\n object[item._id] = item;\n return object;\n },\n {} as { [kay: string]: AITableField }\n );\n }),\n recordsWillHidden: signal([]),\n recordsWillMove: signal([])\n };\n return aiTable;\n}\n","import { isUndefinedOrNull } from 'ngx-tethys/util';\nimport {\n AITable,\n AITableField,\n AITableRecord,\n AIFieldValueIdPath,\n IdPath,\n NumberPath,\n AITableFieldType,\n SystemFieldTypes,\n DateFieldValue,\n MemberFieldValue\n} from '../types';\nimport { isSystemField } from './field';\n\nexport const AITableQueries = {\n findRecordPath(aiTable: AITable, record: AITableRecord) {\n const recordIndex = record && aiTable.records().indexOf(record);\n if (!isUndefinedOrNull(recordIndex) && recordIndex > -1) {\n return [recordIndex] as NumberPath;\n }\n throw new Error(`can not find the record path: ${JSON.stringify({ ...(record || {}) })}`);\n },\n findFieldPath(aiTable: AITable, field: AITableField) {\n const fieldIndex = field && aiTable.fields().indexOf(field);\n if (!isUndefinedOrNull(fieldIndex) && fieldIndex > -1) {\n return [fieldIndex] as NumberPath;\n }\n throw new Error(`can not find the field path: ${JSON.stringify({ ...(field || {}) })}`);\n },\n getFieldValue(aiTable: AITable, path: AIFieldValueIdPath): any {\n if (!aiTable) {\n throw new Error(`aiTable does not exist`);\n }\n if (!aiTable.records()) {\n throw new Error(`aiTable has no records`);\n }\n if (!aiTable.fields()) {\n throw new Error(`aiTable has no fields`);\n }\n if (!path) {\n throw new Error(`path does not exist as path [${path}]`);\n }\n const record = aiTable.recordsMap()[path[0]];\n if (!record) {\n throw new Error(`can not find record at path [${path}]`);\n }\n const field = aiTable.fieldsMap()[path[1]];\n if (!field) {\n throw new Error(`can not find field at path [${path}]`);\n }\n if (isSystemField(field)) {\n return AITableQueries.getSystemFieldValue(record, field.type as SystemFieldTypes);\n }\n return record.values[path[1]];\n },\n getSystemFieldValue(record: AITableRecord, type: SystemFieldTypes) {\n const value = record[type];\n if (type === AITableFieldType.createdAt || type === AITableFieldType.updatedAt) {\n return { timestamp: value } as DateFieldValue;\n }\n if (type === AITableFieldType.createdBy || type === AITableFieldType.updatedBy) {\n return [value] as MemberFieldValue;\n }\n throw new Error(`unexpected ${type}`);\n },\n getField(aiTable: AITable, path: IdPath): AITableField | undefined {\n if (!aiTable) {\n throw new Error(`aiTable does not exist`);\n }\n if (!path) {\n throw new Error(`path does not exist as path [${path}]`);\n }\n return aiTable.fields().find((item) => item._id === path[0]);\n },\n\n getRecord(aiTable: AITable, path: NumberPath): AITableRecord {\n if (!aiTable) {\n throw new Error(`aiTable does not exist`);\n }\n if (!path) {\n throw new Error(`path does not exist as path [${path}]`);\n }\n return aiTable.records()[path[0]];\n }\n};\n","import { Signal, WritableSignal } from '@angular/core';\nimport { AITableContext, AITableLinearRow, AITablePointPosition, AITableScrollState, ScrollActionOptions } from '../types';\n\nexport class RendererContext {\n linearRows: Signal<AITableLinearRow[]>;\n pointPosition: WritableSignal<AITablePointPosition>;\n scrollState: WritableSignal<AITableScrollState>;\n visibleColumnsMap: Signal<Map<string, number>>;\n visibleRowsIndexMap: Signal<Map<string, number>>;\n scrollAction: (options: ScrollActionOptions) => void;\n\n constructor(options: AITableContext) {\n const { linearRows, pointPosition, scrollState, visibleColumnsMap, visibleRowsIndexMap, scrollAction } = options;\n this.linearRows = linearRows;\n this.pointPosition = pointPosition;\n this.scrollState = scrollState;\n this.scrollAction = scrollAction;\n this.visibleColumnsMap = visibleColumnsMap;\n this.visibleRowsIndexMap = visibleRowsIndexMap;\n }\n\n setPointPosition(position: Partial<AITablePointPosition>) {\n const oldPosition = this.pointPosition();\n if (\n oldPosition.areaType !== position.areaType ||\n oldPosition.rowIndex !== position.rowIndex ||\n oldPosition.columnIndex !== position.columnIndex ||\n oldPosition.targetName !== position.targetName\n ) {\n const newPosition = { ...oldPosition, ...position };\n this.pointPosition.set(newPosition);\n }\n }\n\n setScrollState(scrollState: Partial<AITableScrollState>) {\n this.scrollState.set({ ...this.scrollState(), ...scrollState });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, Input, OnInit, output } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { AITable, AITableField, AITableQueries, UpdateFieldValueOptions } from '../../core';\n\n@Component({\n selector: 'abstract-edit-cell',\n template: ``,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport abstract class AbstractEditCellEditor<TValue, TFieldType extends AITableField = AITableField> implements OnInit {\n @Input({ required: true }) aiTable!: AITable;\n\n @Input({ required: true }) fieldId!: string;\n\n @Input({ required: true }) recordId!: string;\n\n updateFieldValue = output<UpdateFieldValueOptions<TValue>>();\n\n modelValue!: TValue;\n\n field = computed(() => {\n return this.aiTable.fieldsMap()[this.fieldId] as TFieldType;\n });\n\n record = computed(() => {\n return this.aiTable.recordsMap()[this.recordId];\n });\n\n elementRef: ElementRef<HTMLElement> = inject(ElementRef<HTMLElement>);\n\n protected thyPopoverRef = inject(ThyPopoverRef<AbstractEditCellEditor<TValue>>, { optional: true });\n\n ngOnInit(): void {\n this.modelValue = computed(() => {\n return AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id]);\n })();\n }\n\n update() {\n if (this.modelValue === AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id])) {\n return;\n }\n this.updateFieldValue.emit({\n value: this.modelValue,\n path: [this.record()._id, this.field()._id]\n });\n }\n\n closePopover() {\n this.thyPopoverRef?.close();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyDatePicker } from 'ngx-tethys/date-picker';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\nimport { ThyTimePickerModule } from 'ngx-tethys/time-picker';\nimport { AITableQueries, DateFieldValue } from '../../../core';\n\n@Component({\n selector: 'date-cell-editor',\n template: `\n <thy-date-picker\n class=\"h-100\"\n thyTimestampPrecision=\"seconds\"\n thyPlaceHolder=\"选择时间\"\n [ngModel]=\"modelValue.timestamp\"\n (ngModelChange)=\"updateValue($event)\"\n (thyOpenChange)=\"thyOpenChange($event)\"\n [thyAllowClear]=\"true\"\n [thyShowShortcut]=\"true\"\n [thyHasBackdrop]=\"false\"\n [thyShowTime]=\"false\"\n [thyOpen]=\"true\"\n thyFormat=\"yyyy-MM-dd\"\n >\n </thy-date-picker>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, ThyDatePicker, ThyTimePickerModule],\n host: {\n class: 'date-cell-editor'\n }\n})\nexport class DateCellEditorComponent extends AbstractEditCellEditor<DateFieldValue> {\n override ngOnInit(): void {\n this.modelValue = computed(() => {\n const value = AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id]);\n if (!value) {\n return {\n timestamp: 0\n };\n }\n return value;\n })();\n }\n\n updateValue(value: number) {\n this.updateFieldValue.emit({\n value: { timestamp: value },\n path: [this.record()._id, this.field()._id]\n });\n this.closePopover();\n }\n\n thyOpenChange(isOpen: Boolean) {\n if (!isOpen) {\n this.closePopover();\n }\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButton } from 'ngx-tethys/button';\nimport {\n ThyFormDirective,\n ThyFormGroup,\n ThyFormGroupFooter,\n ThyFormModule,\n ThyFormSubmitDirective,\n ThyFormValidatorLoader\n} from 'ngx-tethys/form';\nimport { ThyInputDirective } from 'ngx-tethys/input';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyAutofocusDirective, ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { SafeAny } from 'ngx-tethys/types';\n\nexport const LINK_URL_REGEX = /^http(s)?:\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- .\\/?%&=]*)?/;\n\n/**\n * @private\n */\n@Component({\n selector: 'link-edit',\n templateUrl: './edit-link.component.html',\n standalone: true,\n imports: [\n FormsModule,\n ThyStopPropagationDirective,\n ThyInputDirective,\n ThyAutofocusDirective,\n ThyButton,\n ThyFormSubmitDirective,\n ThyFormModule\n ]\n})\nexport class LinkEditComponent implements OnInit {\n @Input() url = '';\n\n @Input() text = '';\n\n @Output() confirm = new EventEmitter<{ url: string; text: string }>();\n\n public URLRegex = LINK_URL_REGEX;\n\n validatorConfig = {\n validationMessages: {\n url: {\n pattern: '链接格式不正确'\n }\n }\n };\n\n constructor(public thyPopoverRef: ThyPopoverRef<SafeAny>) {}\n\n ngOnInit() {}\n\n close() {\n this.thyPopoverRef.close();\n }\n\n apply(form: ThyFormDirective) {\n if (this.text && !this.url) {\n form.validator.setElementErrorMessage('url', '链接不能为空');\n return;\n }\n\n this.close();\n const text = this.text.trim();\n const url = this.url.trim();\n const link = url ? { text: text || url, url: url } : undefined;\n this.confirm.emit(link);\n }\n}\n","<form\n thyLayout=\"vertical\"\n thyStopPropagation\n thyForm\n #linkForm=\"thyForm\"\n [thyFormValidatorConfig]=\"validatorConfig\"\n name=\"linkForm\"\n class=\"p-5\"\n>\n <thy-form-group thyLabelText=\"文本\">\n <input thyInput placeholder=\"输入文本\" name=\"text\" [(ngModel)]=\"text\" thyAutofocus type=\"text\" />\n </thy-form-group>\n <thy-form-group thyLabelText=\"链接\">\n <input name=\"url\" thyInput placeholder=\"输入链接\" [pattern]=\"URLRegex\" type=\"text\" [(ngModel)]=\"url\" />\n </thy-form-group>\n <thy-form-group-footer thyAlign=\"right\">\n <div class=\"btn-pair\">\n <button thyStopPropagation thyButton=\"link-secondary\" thySize=\"sm\" (click)=\"close()\">取消</button>\n <button thyStopPropagation thyButton=\"primary\" thySize=\"sm\" (thyFormSubmit)=\"apply(linkForm)\">应用</button>\n </div>\n </thy-form-group-footer>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, ElementRef, inject, OnInit, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyAutofocusDirective, ThyEnterDirective } from 'ngx-tethys/shared';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\nimport { ThyInputGroup, ThyInputModule } from 'ngx-tethys/input';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { ThyAction } from 'ngx-tethys/action';\nimport { ThyFlexibleTextModule } from 'ngx-tethys/flexible-text';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { LINK_URL_REGEX, LinkEditComponent } from './edit-link/edit-link.component';\nimport * as _ from 'lodash';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\n\n@Component({\n selector: 'link-cell-editor',\n templateUrl: `./link-editor.component.html`,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n ThyAutofocusDirective,\n ThyEnterDirective,\n ThyInputGroup,\n ThyTooltipModule,\n ThyAction,\n ThyInputModule,\n ThyFlexibleTextModule,\n LinkEditComponent\n ],\n host: {\n class: 'ai-table-link-editor'\n }\n})\nexport class LinkCellEditorComponent extends AbstractEditCellEditor<{ text: string; url: string }> implements OnInit {\n @ViewChild('inputElement', { static: false })\n inputElement!: ElementRef;\n\n text = '';\n\n url = '';\n\n originValue = {};\n\n thyPopover = inject(ThyPopover);\n\n cdr = inject(ChangeDetectorRef);\n\n notifyService = inject(ThyNotifyService);\n\n isOpened = false;\n\n isValidLink(link: { text: string; url: string }) {\n if (!link?.text?.trim()) {\n return true;\n }\n if (!link.url) {\n return LINK_URL_REGEX.test(link.text);\n }\n return true;\n }\n\n createLinkValue(link: { text: string; url: string }) {\n const text = link?.text?.trim();\n if (!text) {\n return { url: '', text: '' };\n } else {\n const url = link.url?.trim();\n return { url: url || text, text: text || url };\n }\n }\n\n public blur(event: FocusEvent) {\n const action = this.elementRef.nativeElement.querySelector('.edit-icon');\n if (!(event.relatedTarget as HTMLElement)?.contains(action)) {\n this.updateValue();\n }\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.originValue = this.modelValue;\n this.text = this.modelValue.text ?? '';\n this.url = this.modelValue.url ?? '';\n }\n\n updateValue() {\n if (!this.isValidLink({ text: this.text, url: this.url ?? '' })) {\n this.notifyService.error(undefined, '链接格式不正确');\n return;\n }\n this.modelValue = this.createLinkValue({ text: this.text, url: this.url ?? '' });\n if (!_.isEqual(this.originValue, this.modelValue)) {\n super.update()\n this.originValue = this.modelValue;\n }\n }\n\n openEdit() {\n this.isOpened = true;\n const popoverRef = this.thyPopover.open(LinkEditComponent, {\n origin: this.elementRef.nativeElement,\n originActiveClass: 'editing',\n placement: 'bottomLeft',\n minWidth: '320px',\n width: this.elementRef.nativeElement.clientWidth + 'px',\n initialState: {\n url: this.url ?? '',\n text: this.text ?? ''\n }\n });\n\n if (popoverRef) {\n popoverRef.componentInstance.confirm.subscribe((value: { url: string; text: string }) => {\n this.text = value.text;\n this.url = value.url;\n this.updateValue();\n });\n\n popoverRef.beforeClosed().subscribe(() => {\n this.isOpened = false;\n this.cdr.markForCheck();\n });\n }\n }\n}\n","<thy-input-group class=\"link-input-group h-100\" thySize=\"lg\">\n <input\n #inputElement\n class=\"h-100\"\n class=\"link-input\"\n thyInput\n thySize=\"md\"\n [thyAutofocus]=\"true\"\n [(ngModel)]=\"text\"\n (blur)=\"blur($event)\"\n (thyEnter)=\"updateValue()\"\n />\n <ng-template #suffix>\n <a\n thyAction\n thyIcon=\"link-insert\"\n thyTooltip=\"链接\"\n class=\"font-size-base edit-icon\"\n [class.active]=\"isOpened\"\n href=\"javascript:;\"\n (click)=\"openEdit()\"\n ></a>\n </ng-template>\n</thy-input-group>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyInputNumber } from 'ngx-tethys/input-number';\nimport { ThyAutofocusDirective, ThyEnterDirective } from 'ngx-tethys/shared';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\n\n@Component({\n selector: 'number-cell-editor',\n template: `<thy-input-number\n class=\"h-100\"\n [thyAutoFocus]=\"true\"\n [(ngModel)]=\"modelValue\"\n (thyEnter)=\"updateValue()\"\n (thyBlur)=\"updateValue()\"\n /> `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, ThyAutofocusDirective, ThyEnterDirective, ThyInputNumber],\n host: {\n class: 'number-cell-editor'\n }\n})\nexport class NumberCellEditorComponent extends AbstractEditCellEditor<number> {\n updateValue() {\n super.update();\n this.closePopover();\n }\n}\n","import { ChangeDetectionStrategy, Component, HostListener } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThySlider, ThySliderSize, ThySliderType } from 'ngx-tethys/slider';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\n\nexport interface AITableProgressConfig {\n max?: number;\n min?: number;\n step?: number;\n progressType?: ThySliderType;\n suffix?: string;\n size?: ThySliderSize;\n}\n\n@Component({\n selector: 'progress-editor',\n template: `\n <thy-slider\n [(ngModel)]=\"modelValue\"\n [thyMax]=\"config?.max || 100\"\n [thyMin]=\"config?.min || 0\"\n [thyStep]=\"config?.step || 1\"\n [thyType]=\"config?.progressType || 'success'\"\n [thySize]=\"config?.size || 'md'\"\n (ngModelChange)=\"update()\"\n (mousedown)=\"sliderMousedownHandler($event)\"\n ></thy-slider>\n <span class=\"progress-text\">{{ modelValue }}{{ config?.suffix || '%' }}</span>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, ThySlider],\n host: {\n class: 'grid-cell progress-editor',\n '[attr.type]': 'field().type',\n '[attr.fieldId]': 'field()._id',\n '[attr.recordId]': 'record()._id'\n }\n})\nexport class ProgressEditorComponent extends AbstractEditCellEditor<number> {\n config: Partial<AITableProgressConfig | undefined> = {\n max: 100,\n min: 0,\n step: 1,\n progressType: 'success',\n suffix: '%',\n size: 'md'\n };\n\n @HostListener('mousedown', ['$event'])\n mousedownHandler(event: Event) {\n event.preventDefault();\n }\n\n sliderMousedownHandler(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyRate } from 'ngx-tethys/rate';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\n\n@Component({\n selector: 'rating-cell-editor',\n template: ` <thy-rate [(ngModel)]=\"modelValue\" (ngModelChange)=\"update()\"></thy-rate> `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, ThyRate],\n host: {\n class: 'd-flex align-items-center h-100 rating-cell-editor'\n }\n})\nexport class RatingCellEditorComponent extends AbstractEditCellEditor<number> {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AITableFieldSettings, AITableSelectOption, MemberSettings, SelectSettings } from '../core';\nimport { AITableReferences, AITableSelection } from '../types';\n\n@Pipe({\n name: 'selectOption',\n standalone: true\n})\nexport class SelectOptionPipe implements PipeTransform {\n transform(_id: string, options: AITableSelectOption[]) {\n return options?.length && options.find((item) => item._id === _id);\n }\n}\n\n@Pipe({\n name: 'selectOptions',\n standalone: true\n})\nexport class SelectOptionsPipe implements PipeTransform {\n transform(ids: string[], options: AITableSelectOption[] = []) {\n return (\n (ids?.length &&\n ids.map((id: string) => {\n return options.find((item) => item._id === id);\n })) ||\n []\n );\n }\n}\n\n@Pipe({\n name: 'isSelectRecord',\n standalone: true\n})\nexport class IsSelectRecordPipe implements PipeTransform {\n transform(recordId: string, selection: AITableSelection) {\n return selection.selectedRecords.has(recordId);\n }\n}\n\n@Pipe({\n name: 'user',\n standalone: true\n})\nexport class UserPipe implements PipeTransform {\n transform(values: string[], references: AITableReferences) {\n return (\n (values.length &&\n values.map((item) => {\n return references.members[item] || {};\n })) ||\n []\n );\n }\n}\n\n@Pipe({\n name: 'selectSetting',\n standalone: true\n})\nexport class SelectSettingPipe implements PipeTransform {\n transform(settings: AITableFieldSettings) {\n return settings as SelectSettings;\n }\n}\n\n@Pipe({\n name: 'memberSetting',\n standalone: true\n})\nexport class MemberSettingPipe implements PipeTransform {\n transform(settings: AITableFieldSettings) {\n return settings as MemberSettings;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { ThyDot } from 'ngx-tethys/dot';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyTag } from 'ngx-tethys/tag';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { AITableField, AITableSelectOption, AITableSelectOptionStyle } from '../../../core';\nimport { AITableSelectField } from '../../../types';\n@Component({\n selector: 'select-option',\n templateUrl: './option.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'select-option thy-text',\n '[class.select-option-tag]': 'optionStyle === AITableSelectOptionStyle.tag'\n },\n imports: [ThyTag, ThyIcon, ThyTooltipModule, ThyDot, ThyFlexibleText]\n})\nexport class SelectOptionComponent {\n field = input.required<AITableField>();\n\n displayOption = input.required<AITableSelectOption>();\n\n optionStyle = computed(() => {\n return (this.field() as AITableSelectField).settings.option_style || AITableSelectOptionStyle.text;\n });\n\n AITableSelectOptionStyle = AITableSelectOptionStyle;\n}\n","@if (displayOption(); as displayOption) {\n @switch (optionStyle()) {\n @case (AITableSelectOptionStyle.dot) {\n @if (displayOption.bg_color || displayOption.color; as color) {\n <thy-dot [thyColor]=\"color\" [thySize]=\"'md'\" class=\"mr-2\"></thy-dot>\n }\n <span thyFlexibleText [thyTooltipContent]=\"displayOption.text\">{{ displayOption.text }}</span>\n }\n @case (AITableSelectOptionStyle.tag) {\n @if (displayOption.bg_color || displayOption.color || 'default'; as color) {\n <thy-tag thyTheme=\"fill\" thyShape=\"pill\" [thyColor]=\"color\">\n @if (displayOption['icon']) {\n <thy-icon class=\"text-white\" [thyIconName]=\"displayOption['icon']\"></thy-icon>\n }\n <span thyFlexibleText [thyTooltipContent]=\"displayOption.text\">{{ displayOption.text }}</span>\n </thy-tag>\n }\n }\n @case (AITableSelectOptionStyle.piece) {\n @if (displayOption.bg_color || displayOption.color; as color) {\n <thy-dot thyShape=\"square\" [thyColor]=\"color\" [thySize]=\"'md'\" class=\"mr-2\"></thy-dot>\n }\n <span thyFlexibleText [thyTooltipContent]=\"displayOption.text\">{{ displayOption.text }}</span>\n }\n @default {\n @if (displayOption['icon']) {\n <thy-icon [thyIconName]=\"displayOption['icon']\" [style.color]=\"displayOption.color\"></thy-icon>\n }\n <span thyFlexibleText [thyTooltipContent]=\"displayOption.text\">{{ displayOption.text }}</span>\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyDot } from 'ngx-tethys/dot';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThySelect } from 'ngx-tethys/select';\nimport { ThyOption } from 'ngx-tethys/shared';\nimport { ThyTag } from 'ngx-tethys/tag';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { AITableQueries, AITableSelectOptionStyle } from '../../../core';\nimport { SelectOptionPipe } from '../../../pipes';\nimport { AITableSelectField } from '../../../types';\nimport { SelectOptionComponent } from '../../cell-views/select/option.component';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\n\n@Component({\n selector: 'select-cell-editor',\n templateUrl: './select-editor.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'd-block h-100 select-cell-editor'\n },\n imports: [\n FormsModule,\n NgTemplateOutlet,\n ThySelect,\n ThyOption,\n ThyTag,\n ThyIcon,\n ThyTooltipModule,\n ThyDot,\n ThyFlexibleText,\n SelectOptionPipe,\n SelectOptionComponent,\n ThyEmptyModule\n ]\n})\nexport class SelectCellEditorComponent extends AbstractEditCellEditor<string[] | string, AITableSelectField> {\n selectOptions = computed(() => {\n return this.field().settings.options;\n });\n\n preset = computed(() => {\n return this.field().settings.is_multiple && this.field().settings.option_style === AITableSelectOptionStyle.tag ? 'tag' : '';\n });\n\n get isMultiple() {\n return !!this.field().settings.is_multiple;\n }\n\n constructor() {\n super();\n }\n\n override ngOnInit(): void {\n this.modelValue = computed(() => {\n const value = AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id]);\n if (!this.isMultiple) {\n return value[0];\n }\n return value || [];\n })();\n }\n\n updateValue(value: boolean) {\n if (!value) {\n const value = this.isMultiple ? this.modelValue : (this.modelValue && ([this.modelValue] as string[])) || [];\n this.updateFieldValue.emit({\n value: value,\n path: [this.record()._id, this.field()._id]\n });\n this.closePopover();\n }\n }\n}\n","<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"true\"\n [thyAllowClear]=\"true\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (thyOnExpandStatusChange)=\"updateValue($event)\"\n>\n <ng-template #selectedDisplay let-option>\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </ng-template>\n @for (option of selectOptions(); track option._id) {\n <thy-option [thyValue]=\"option._id\" [thyRawValue]=\"option\" [thyShowOptionCustom]=\"true\" [thyLabelText]=\"option.text\">\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </thy-option>\n }\n</thy-select>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, inject, Renderer2 } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyInputDirective } from 'ngx-tethys/input';\nimport { ThyAutofocusDirective, ThyEnterDirective } from 'ngx-tethys/shared';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\n\n@Component({\n selector: 'text-cell-editor',\n template: `\n <textarea\n placeholder=\"\"\n rows=\"1\"\n thyInput\n [thyAutofocus]=\"true\"\n [(ngModel)]=\"modelValue\"\n (ngModelChange)=\"valueChange()\"\n (thyEnter)=\"updateValue()\"\n (blur)=\"updateValue()\"\n ></textarea>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, ThyAutofocusDirective, ThyInputDirective, ThyEnterDirective],\n host: {\n class: 'text-cell-editor'\n }\n})\nexport class TextCellEditorComponent extends AbstractEditCellEditor<string> implements AfterViewInit {\n private render2 = inject(Renderer2);\n\n private maxHeight = 148;\n\n constructor() {\n super();\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.updateStyle();\n });\n }\n\n updateStyle() {\n const textarea = this.elementRef.nativeElement.querySelector('textarea');\n if (textarea) {\n const height = textarea.scrollHeight < this.maxHeight ? textarea.scrollHeight : this.maxHeight;\n this.render2.setStyle(textarea, 'max-height', `${this.maxHeight}px`);\n this.render2.setStyle(textarea, 'height', `${height}px`);\n this.render2.setStyle(textarea, 'resize', 'none');\n }\n }\n\n valueChange() {\n this.updateStyle();\n }\n\n updateValue() {\n super.update();\n this.closePopover();\n }\n}\n","import { NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, TemplateRef, booleanAttribute, computed, inject, model, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButton } from 'ngx-tethys/button';\nimport {\n ThyDropdownDirective,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemNameDirective\n} from 'ngx-tethys/dropdown';\nimport { ThyConfirmValidatorDirective, ThyFormModule, ThyFormValidatorConfig, ThyUniqueCheckValidator } from 'ngx-tethys/form';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyInput, ThyInputCount, ThyInputDirective, ThyInputGroup } from 'ngx-tethys/input';\nimport { ThyListItem } from 'ngx-tethys/list';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyAutofocusDirective } from 'ngx-tethys/shared';\nimport { of } from 'rxjs';\nimport {\n AITable,\n AITableField,\n AITableFieldOption,\n FieldOptions,\n createDefaultFieldName,\n getFieldOptionByField,\n SetFieldOptions\n} from '../../core';\n\n@Component({\n selector: 'ai-table-field-property-editor',\n templateUrl: './field-property-editor.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgIf,\n NgForOf,\n FormsModule,\n ThyIcon,\n ThyInput,\n ThyInputGroup,\n ThyInputCount,\n ThyInputDirective,\n ThyConfirmValidatorDirective,\n ThyUniqueCheckValidator,\n ThyDropdownDirective,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemNameDirective,\n ThyDropdownMenuItemIconDirective,\n ThyButton,\n ThyFormModule,\n ThyListItem,\n NgTemplateOutlet,\n ThyAutofocusDirective\n ],\n host: {\n class: 'field-property-editor d-block pl-5 pr-5 pb-5 pt-4'\n },\n styles: [\n `\n :host {\n width: 350px;\n }\n `\n ]\n})\nexport class AITableFieldPropertyEditor {\n aiEditField = model.required<AITableField>();\n\n @Input({ required: true }) aiTable!: AITable;\n\n @Input() aiExternalTemplate: TemplateRef<any> | null = null;\n\n @Input({ transform: booleanAttribute }) isUpdate!: boolean;\n\n addField = output<AITableField>();\n\n setField = output<SetFieldOptions>();\n\n selectedFieldOption = computed(() => {\n return getFieldOptionByField(this.aiEditField())!;\n });\n\n fieldMaxLength = 32;\n\n validatorConfig: ThyFormValidatorConfig = {\n validationMessages: {\n fieldName: {\n required: '列名不能为空',\n thyUniqueCheck: '列名已存在'\n }\n }\n };\n\n fieldOptions = FieldOptions;\n\n protected thyPopoverRef = inject(ThyPopoverRef<AITableFieldPropertyEditor>);\n\n checkUniqueName = (fieldName: string) => {\n fieldName = fieldName?.trim();\n return of(!!this.aiTable.fields()?.find((field) => field.name === fieldName && this.aiEditField()?._id !== field._id));\n };\n\n selectFieldType(field: AITableFieldOption) {\n this.aiEditField.update((item) => {\n const width = item.width ?? field.width;\n const settings = field.settings || {};\n const name = createDefaultFieldName(this.aiTable, field);\n return { ...item, ...field, width, name, ...settings };\n });\n }\n\n editFieldProperty() {\n if (this.isUpdate) {\n this.setField.emit({\n field: this.aiEditField(),\n path: [this.aiEditField()._id]\n });\n } else {\n this.addField.emit(this.aiEditField());\n }\n this.thyPopoverRef.close();\n }\n\n cancel() {\n this.thyPopoverRef.close();\n }\n}\n","<form thyForm name=\"createPropertyForm\" [thyFormValidatorConfig]=\"validatorConfig\" thyLayout=\"vertical\">\n <thy-form-group thyLabelRequired thyLabelText=\"表格列名\">\n <thy-input-group>\n <input\n thyInput\n [thyAutofocus]=\"true\"\n name=\"fieldName\"\n [maxlength]=\"fieldMaxLength\"\n [(ngModel)]=\"aiEditField().name\"\n required\n placeholder=\"输入列名称\"\n [thyUniqueCheck]=\"checkUniqueName\"\n />\n <ng-template #suffix>\n <thy-input-count></thy-input-count>\n </ng-template>\n </thy-input-group>\n </thy-form-group>\n <thy-form-group thyLabelText=\"列类型\">\n <div class=\"ml-n5 mr-n5\">\n <thy-list-item [thyDropdown]=\"menu\" thyTrigger=\"hover\" thyPlacement=\"right\" class=\"justify-content-between\">\n <span>\n <thy-icon [thyIconName]=\"selectedFieldOption().icon\" class=\"text-desc mr-2\"></thy-icon>\n <span>{{ selectedFieldOption().name }}</span>\n </span>\n <thy-icon thyIconName=\"angle-right\" class=\"text-desc\"></thy-icon>\n </thy-list-item>\n </div>\n </thy-form-group>\n <ng-container *ngIf=\"aiExternalTemplate; else defaultTemplate\">\n <ng-container *ngTemplateOutlet=\"aiExternalTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultTemplate>\n <!-- TODO: 内部属性渲染 -->\n </ng-template>\n <thy-form-group-footer thyAlign=\"right\">\n <button thyButton=\"link-secondary\" (click)=\"cancel()\" thySize=\"sm\">取消</button>\n <button thyButton=\"primary\" (thyFormSubmit)=\"editFieldProperty()\" thySize=\"sm\">确定</button>\n </thy-form-group-footer>\n</form>\n\n<thy-dropdown-menu #menu>\n @for (item of fieldOptions; track $index) {\n <a thyDropdownMenuItem href=\"javascript:;\" (click)=\"selectFieldType(item)\">\n <thy-icon [thyIconName]=\"item.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n </a>\n }\n</thy-dropdown-menu>\n","import {\n DateCellEditorComponent,\n LinkCellEditorComponent,\n NumberCellEditorComponent,\n ProgressEditorComponent,\n RatingCellEditorComponent,\n SelectCellEditorComponent,\n TextCellEditorComponent\n} from '../components';\nimport { AITableFieldType } from '../core';\n\nexport const GRID_CELL_EDITOR_MAP: Partial<Record<AITableFieldType, any>> = {\n [AITableFieldType.text]: TextCellEditorComponent,\n [AITableFieldType.richText]: TextCellEditorComponent,\n [AITableFieldType.select]: SelectCellEditorComponent,\n [AITableFieldType.number]: NumberCellEditorComponent,\n [AITableFieldType.date]: DateCellEditorComponent,\n [AITableFieldType.rate]: RatingCellEditorComponent,\n [AITableFieldType.link]: LinkCellEditorComponent,\n [AITableFieldType.progress]: ProgressEditorComponent\n};\n","export const AI_TABLE_ACTION_COMMON_SIZE = 32; // 表格图标action背景的通用尺寸\nexport const AI_TABLE_DEFAULT_COLUMN_WIDTH = 200; // 默认列宽\nexport const AI_TABLE_SCROLL_BAR_PADDING = 3; // 单元格滑动容器的滚动条宽度\nexport const AI_TABLE_OFFSET = 0.5; // 边框线偏移值\nexport const AI_TABLE_TEXT_GAP = 8; // 文本间距\n\nexport const AI_TABLE_ROW_HEAD = 'AI_TABLE_ROW_HEAD'; // 行头\nexport const AI_TABLE_ROW_HEAD_WIDTH = 44; // 表格行头 checkbox 列的宽度\nexport const AI_TABLE_ROW_HEAD_SIZE = 16; // 添加行按钮的尺寸\nexport const AI_TABLE_ROW_ADD_BUTTON = 'AI_TABLE_ROW_ADD_BUTTON'; // 添加行名称\nexport const AI_TABLE_BLANK = 'AI_TABLE_BLANK'; // 空白区域\n\nexport const AI_TABLE_FIELD_HEAD = 'AI_TABLE_FIELD_HEAD'; // 属性列头标识\nexport const AI_TABLE_FIELD_HEAD_HEIGHT = 44; // 表格字段列头的高度\nexport const AI_TABLE_ROW_BLANK_HEIGHT = 43; // 减去边框后真实的行高\nexport const AI_TABLE_ROW_HEIGHT = 44; // 默认行高基准\nexport const AI_TABLE_CELL_ACTIVE_BORDER_WIDTH = 2; // 选中单元格的边框宽度\nexport const AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH = 30; // 字段列头文本的最小宽度\nexport const AI_TABLE_ROW_SELECT_CHECKBOX = 'AI_TABLE_ROW_SELECT_CHECKBOX'; // 行 checkbox\nexport const AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX = 'AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX'; // 表头 checkbox 标识\nexport const AI_TABLE_FIELD_ADD_BUTTON = 'AI_TABLE_FIELD_ADD_BUTTON'; // 添加列名称\nexport const AI_TABLE_FIELD_ADD_BUTTON_WIDTH = 100; // 添加列宽度\nexport const AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE = 8; // 字段表列头图标的间距\nexport const AI_TABLE_FIELD_HEAD_MORE = 'AI_TABLE_FIELD_HEAD_MORE'; // 更多图标名称\n\nexport const AI_TABLE_ICON_COMMON_SIZE = 16; // 表格图标的通用尺寸\nexport const AI_TABLE_CELL = 'AI_TABLE_CELL'; // 单元格标识\n// 因为 dom 的边距 12 是不包含 边框的,所以加上边框 2px 才能跟 编辑里面的内容对其;\nexport const AI_TABLE_CELL_PADDING = 14; // 单元格内容的内边距\nexport const AI_TABLE_CELL_BORDER = 2; // 单元格边框宽度\nexport const AI_TABLE_CELL_MULTI_PADDING_TOP = 10;\nexport const AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP = 4;\nexport const AI_TABLE_CELL_MULTI_PADDING_LEFT = 4;\n// 最少显示文字宽度,一个文字+ 三个点\nexport const AI_TABLE_MIN_TEXT_WIDTH = 24;\nexport const AI_TABLE_CELL_MULTI_DOT_RADIUS = 4;\nexport const AI_TABLE_CELL_MULTI_ITEM_MARGIN_LEFT = 8;\nexport const AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE = 8; // 选项删除按钮的宽度\nexport const AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET = 12; // 选项字段删除按钮大小的偏移量\nexport const AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH = 36; // 选项字段项的最小宽度\nexport const AI_TABLE_CELL_MAX_ROW_COUNT = 1; // 默认单元格展示的最大行数\nexport const AI_TABLE_CELL_EMOJI_SIZE = 18;\nexport const AI_TABLE_CELL_EMOJI_PADDING = 8;\nexport const AI_TABLE_CELL_MEMBER_MAX_HEIGHT = 130; // 成员字段项最大高度\nexport const AI_TABLE_CELL_MEMBER_ITEM_HEIGHT = 24; // 成员字段项高度\nexport const AI_TABLE_CELL_MEMBER_ITEM_PADDING = 4; // 多个成员头像间距\nexport const AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE = 22; // 成员/选项/链接字段的新按钮大小\n\nexport const AI_TABLE_MEMBER_AVATAR_SIZE = 24; // 成员头像大小\nexport const AI_TABLE_MEMBER_ITEM_PADDING_RIGHT = 8; // 成员字段项右边距\nexport const AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT = 8; // 成员头像与成员名之间的间距\n\nexport const AI_TABLE_OPTION_ITEM_PADDING = 10; // 选项按钮间距\nexport const AI_TABLE_OPTION_ITEM_HEIGHT = 24;\nexport const AI_TABLE_OPTION_ITEM_FONT_SIZE = 14;\nexport const AI_TABLE_OPTION_ITEM_RADIUS = 18;\nexport const AI_TABLE_TAG_PADDING = 12;\nexport const AI_TABLE_TAG_FONT_SIZE = 12;\n\nexport const AI_TABLE_PIECE_WIDTH = 10;\nexport const AI_TABLE_PIECE_RADIUS = 2;\nexport const AI_TABLE_COMMON_FONT_SIZE = 14;\nexport const AI_TABLE_DOT_RADIUS = 5;\n\nexport const AI_TABLE_PROGRESS_BAR_HEIGHT = 10;\nexport const AI_TABLE_PROGRESS_BAR_RADIUS = 5;\nexport const AI_TABLE_PROGRESS_TEXT_Width = 46;\nexport const AI_TABLE_POPOVER_LEFT_OFFSET = 4;\n","import { AITableFieldType } from '../core';\nimport { AITableAreaType } from '../types';\nimport { AI_TABLE_BLANK } from './table';\n\nexport const MIN_COLUMN_WIDTH = 80;\n\nexport const DBL_CLICK_EDIT_TYPE = [\n AITableFieldType.text,\n AITableFieldType.number,\n AITableFieldType.select,\n AITableFieldType.date,\n AITableFieldType.member,\n AITableFieldType.link\n];\n\nexport const MOUSEOVER_EDIT_TYPE = [AITableFieldType.progress, AITableFieldType.rate];\n\nexport const RowHeight = {\n Short: 32,\n Medium: 57,\n Tall: 104,\n ExtraTall: 152\n};\n\nexport const DEFAULT_POINT_POSITION = {\n areaType: AITableAreaType.none,\n targetName: AI_TABLE_BLANK,\n realTargetName: AI_TABLE_BLANK,\n rowIndex: -1,\n columnIndex: -1,\n x: 0,\n y: 0,\n offsetTop: 0,\n offsetLeft: 0\n};\n\nexport const DEFAULT_SCROLL_STATE = {\n scrollTop: 0,\n scrollLeft: 0,\n isScrolling: false\n};\n","export const DEFAULT_ICON_SHAPE = 'square';\nexport const DEFAULT_ICON_SIZE = 16;\n\nexport const Check = `\n M15,1H3C1.9,1,1,1.9,1,3v12c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V3C17,1.9,16.1,1,15,1z M14,6.6l-5.7,5.7\n c-0.2,0.2-0.4,0.3-0.6,0.3s-0.4-0.1-0.6-0.3L4.6,9.8c-0.3-0.3-0.3-0.9,0-1.2s0.9-0.3,1.2,0l1.9,1.9l5.1-5.1\n c0.3-0.3,0.9-0.3,1.2,0C14.3,5.7,14.3,6.3,14,6.6z\n `;\n\nexport const Unchecked = `\n M15,1H3C1.9,1,1,1.9,1,3v12c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V3C17,1.9,16.1,1,15,1z\n M15.7,3.3v11.4c0,0.5-0.5,1-1,1H3.3c-0.5,0-1-0.5-1-1V3.3c0-0.5,0.5-1,1-1h11.4C15.2,2.3,15.7,2.8,15.7,3.3z\n `;\n\nexport const ColumnTextFilledPath = `M7.268 8.674l-2.076-4.86-2.076 4.86h4.152zm0.513 1.2H2.603l-1.294 3.03L0 12.902L4.49 2.4H5.894l4.484 10.486-1.31 0.002-1.287-3.014zm2.86 1.111c0-1.423 1.246-2.193 4.21-2.49 0-0.89-0.235-1.72-1.362-1.72-0.772 0-1.484 0.356-2.017 0.711l-0.475-0.771c0.653-0.415 1.602-0.889 2.669-0.889 1.602 0 2.313 1.127 2.313 2.787v4.151h-0.948l-0.12-0.83h-0.06c-0.651 0.534-1.422 0.949-2.252 0.949-1.127 0-1.957-0.652-1.957-1.898zm4.113-1.778c-2.253 0.296-3.024 0.83-3.024 1.72 0 0.77 0.534 1.067 1.186 1.067 0.652 0 1.186-0.297 1.838-0.89V9.207z`;\n\nexport const ColumnSelectFilledPath = `M8 16A8 8 0 1 1 8 0a8 8 0 0 1 0 16zm0-1.2A6.8 6.8 0 1 0 8 1.2a6.8 6.8 0 0 0 0 13.6zM5.666 7.207l1.8 1.845 3.482-3.554.857.84-4.34 4.43-2.658-2.723.86-.838z`;\n\nexport const ColumnMultipleFillPath = `M2 2.551L3.576.976l.848.848L2 4.25.576 2.824l.848-.848L2 2.55zm0 5.425L3.576 6.4l.848.849L2 9.673.576 8.249l.848-.849.576.576zm0 5.4L3.576 11.8l.848.849L2 15.073.576 13.649l.848-.849.576.576zM5.663 2.6a.6.6 0 1 1 0-1.2H15.4a.6.6 0 0 1 0 1.2H5.663zm0 11.8a.6.6 0 0 1 0-1.2H15.4a.6.6 0 0 1 0 1.2H5.663zm0-6.2a.6.6 0 1 1 0-1.2H15.4a.6.6 0 0 1 0 1.2H5.663z`;\n\nexport const ColumnCalendarFilledPath = `M10.9 3.2H5.1v1.6H3.9V3.2H1.2v3.2h13.6V3.2h-2.7v1.6h-1.2V3.2zM12.1 2H15a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h2.9V.4h1.2V2h5.8V.4h1.2V2zm2.7 5.6H1.2v7.2h13.6V7.6z`;\n\nexport const ColumnNumberFilledPath = `M4.236 9.9l.422-3.8H2.6a.6.6 0 1 1 0-1.2h2.19l.372-3.347a.6.6 0 1 1 1.192.133L5.998 4.9h4.793l.37-3.347a.6.6 0 0 1 1.193.133L11.998 4.9h2.459a.6.6 0 0 1 0 1.2h-2.592l-.421 3.8h2.013a.6.6 0 0 1 0 1.2H11.31l-.374 3.368a.6.6 0 0 1-1.192-.132l.358-3.236H5.311l-.374 3.368a.6.6 0 0 1-1.192-.132l.358-3.236H1.6a.6.6 0 0 1 0-1.2h2.636zm1.208 0h4.792l.422-3.8H5.865l-.421 3.8z`;\n\nexport const ColumnLinkOutlinedPath = `M10.4238543,5.91643446 C11.7563563,7.48802206 11.6811634,9.84553933 10.1982756,11.3284271 L7.22842712,14.2982756 C5.66632996,15.8603728 3.13367004,15.8603728 1.57157288,14.2982756 C0.00947570825,12.7361784 0.00947570825,10.2035185 1.57157288,8.64142136 L2.387,7.82495116 L3.236,8.67395116 L2.42010101,9.48994949 C1.37219416,10.5378563 1.32853138,12.2097205 2.28911266,13.3096237 L2.42010101,13.4497475 C3.51356903,14.5432155 5.28643097,14.5432155 6.37989899,13.4497475 L9.34974747,10.479899 C10.3636395,9.46600698 10.4374244,7.86800734 9.57110232,6.76909967 L10.4238543,5.91643446 Z M14.4436815,1.67157288 C16.0057786,3.23367004 16.0057786,5.76632996 14.4436815,7.32842712 L13.5744058,8.198 L12.7254058,7.349 L13.5951533,6.47989899 C14.6430602,5.43199214 14.6867229,3.76012802 13.7261417,2.66022473 L13.5951533,2.52010101 C12.5016853,1.426633 10.7288234,1.426633 9.63535534,2.52010101 L6.66550686,5.48994949 C5.62228095,6.5331754 5.57434734,8.19479666 6.52170603,9.29485 L5.67236452,10.1460046 C4.25646867,8.57570748 4.3046734,6.15372668 5.81697872,4.64142136 L8.7868272,1.67157288 C10.3489244,0.109475708 12.8815843,0.109475708 14.4436815,1.67157288 Z`;\n\nexport const ColumnRatingFilledPath = `M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0zm0 1.2a6.8 6.8 0 1 0 0 13.6A6.8 6.8 0 0 0 8 1.2zm.945 2.906l.077.106.064.112.03.069.564 1.46 1.646.1c.952.092 1.365 1.264.752 1.893l-.086.078-1.315 1.056.431 1.533c.295 1.031-.848 1.858-1.643 1.34l-.087-.063-1.315-.85-.006.001-1.309.842c-.85.567-1.903-.163-1.79-1.054l.019-.108.45-1.601-1.321-1.035c-.632-.633-.372-1.673.462-1.973l.123-.038.124-.026 1.571-.094.602-1.55c.364-.793 1.44-.836 1.957-.198zm-.91.815l-.809 2.085-2.253.134L6.8 8.571l-.602 2.139 1.44-.927.71-.087 1.569 1.016-.61-2.172 1.75-1.402-2.219-.134-.803-2.083z`;\n\nexport const ColumnMemberFilledPath = `M10.212 8.416A6.603 6.603 0 0 1 14.5 14.6a.6.6 0 0 1-1.2 0 5.4 5.4 0 0 0-10.8 0 .6.6 0 0 1-1.2 0 6.602 6.602 0 0 1 4.159-6.134 4.1 4.1 0 1 1 4.753-.05zM7.8 8a2.9 2.9 0 1 0 0-5.8 2.9 2.9 0 0 0 0 5.8z`;\n\nexport const ColumnProgressFilledPath = `M11.5 3.5a4.5 4.5 0 1 1 0 9h-7a4.5 4.5 0 1 1 0-9h7zm0 1.2h-7a3.3 3.3 0 0 0 0 6.6h7a3.3 3.3 0 1 0 0-6.6zM8 7.2v1.5H3.75a.75.75 0 0 1 0-1.5H8z`;\n\nexport const AddOutlinedPath = `M8.578 7.383V1.602a.601.601 0 1 0-1.2 0v5.781H1.6a.601.601 0 0 0 0 1.203h5.777v5.812a.601.601 0 1 0 1.2 0V8.586H14.4a.601.601 0 0 0 0-1.203H8.578z`;\n\nexport const MoreStandOutlinedPath = `M6.5 2.5C6.5 3.32843 7.17157 4 8 4C8.82843 4 9.5 3.32843 9.5 2.5C9.5 1.67157 8.82843 1 8 1C7.17157 1 6.5 1.67157 6.5 2.5ZM6.5 8C6.5 8.82843 7.17157 9.5 8 9.5C8.82843 9.5 9.5 8.82843 9.5 8C9.5 7.17157 8.82843 6.5 8 6.5C7.17157 6.5 6.5 7.17157 6.5 8ZM6.5 13.5C6.5 14.3284 7.17157 15 8 15C8.82843 15 9.5 14.3284 9.5 13.5C9.5 12.6716 8.82843 12 8 12C7.17157 12 6.5 12.6716 6.5 13.5Z`;\n\nexport const StarFill = `M9.186 2.12l1.02 2.769c.073.292.365.437.656.437l2.915.146c1.166.073 1.676 1.53.73 2.26l-2.26 1.821c-.219.146-.291.51-.219.729l.73 2.842c.29 1.093-.948 2.04-1.896 1.384l-2.477-1.603a.79.79 0 0 0-.802 0l-2.478 1.676c-.947.583-2.186-.291-1.894-1.457l.728-2.842c.073-.292 0-.583-.218-.729L1.46 7.731c-.874-.729-.437-2.186.73-2.259l2.914-.146c.292 0 .51-.218.656-.437l1.093-2.77c.365-1.092 1.895-1.092 2.332 0z`;\n\nexport const WebOutlinedPath = `M1 8C1 4.13401 4.13401 1 8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8ZM6.04798 2.85646C4.19852 3.55874 2.82616 5.22986 2.55071 7.25H5.26373C5.31861 5.76009 5.53564 4.40148 5.87147 3.352C5.92605 3.18143 5.98481 3.0157 6.04798 2.85646ZM5.87147 12.648C5.53564 11.5985 5.31861 10.2399 5.26373 8.75H2.55071C2.82616 10.7701 4.19852 12.4413 6.04798 13.1435C5.98481 12.9843 5.92605 12.8186 5.87147 12.648ZM10.1285 12.648C10.0739 12.8186 10.0152 12.9843 9.95202 13.1435C11.8015 12.4413 13.1738 10.7701 13.4493 8.75H10.7363C10.6814 10.2399 10.4644 11.5985 10.1285 12.648ZM8.6999 12.1908C8.98163 11.3104 9.18095 10.1118 9.23518 8.75H6.76482C6.81905 10.1118 7.01837 11.3104 7.3001 12.1908C7.46768 12.7145 7.65131 13.0839 7.81962 13.3063C7.90746 13.4224 7.9686 13.4711 8 13.4906C8.0314 13.4711 8.09254 13.4224 8.18038 13.3063C8.34869 13.0839 8.53232 12.7145 8.6999 12.1908ZM7.3001 3.80916C7.01837 4.68959 6.81905 5.88818 6.76482 7.25H9.23518C9.18095 5.88818 8.98163 4.68959 8.6999 3.80916C8.53232 3.28548 8.34869 2.91612 8.18038 2.69367C8.09254 2.57756 8.0314 2.52893 8 2.50944C7.9686 2.52893 7.90746 2.57756 7.81962 2.69367C7.65131 2.91612 7.46768 3.28548 7.3001 3.80916ZM10.1285 3.352C10.4644 4.40148 10.6814 5.76009 10.7363 7.25H13.4493C13.1738 5.22986 11.8015 3.55874 9.95203 2.85646C10.0152 3.0157 10.0739 3.18143 10.1285 3.352Z`;\n\nexport const DepartmentOutlinedPath = `M3 5.5C3 3.567 4.567 2 6.5 2C8.433 2 10 3.567 10 5.5C10 6.49548 9.5844 7.3939 8.91724 8.0312C10.7204 8.86779 12.017 10.6115 12.2217 12.6767C12.2976 13.4424 11.6682 14 11 14H2C1.33185 14 0.702358 13.4424 0.778277 12.6767C0.983033 10.6115 2.27961 8.86779 4.08276 8.0312C3.4156 7.3939 3 6.49548 3 5.5ZM8.5 5.5C8.5 4.39543 7.60457 3.5 6.5 3.5C5.39543 3.5 4.5 4.39543 4.5 5.5C4.5 6.60457 5.39543 7.5 6.5 7.5C7.60457 7.5 8.5 6.60457 8.5 5.5ZM2.31585 12.5H10.6841C10.3303 10.5108 8.59114 9 6.5 9C4.40886 9 2.66975 10.5108 2.31585 12.5Z', 'M11 3C10.5858 3 10.25 3.33579 10.25 3.75C10.25 4.16421 10.5858 4.5 11 4.5C11.6904 4.5 12.25 5.05964 12.25 5.75C12.25 6.44036 11.6904 7 11 7C10.5858 7 10.25 7.33579 10.25 7.75C10.25 8.16421 10.5858 8.5 11 8.5C12.6569 8.5 14 9.84315 14 11.5C14 11.9142 14.3358 12.25 14.75 12.25C15.1642 12.25 15.5 11.9142 15.5 11.5C15.5 9.77473 14.5291 8.27622 13.1038 7.52106C13.507 7.0426 13.75 6.42467 13.75 5.75C13.75 4.23122 12.5188 3 11 3Z`;\n","import { Colors } from '../constants';\n\nexport const DEFAULT_FONT_SIZE = 14;\nexport const DEFAULT_FONT_FAMILY =\n '-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Helvetica Neue,Noto Sans,Noto Sans CJK SC,Microsoft Yahei,Arial,Hiragino Sans GB,sans-serif';\nexport const DEFAULT_FONT_STYLE = 'normal';\nexport const DEFAULT_TEXT_LINE_HEIGHT = 24;\nexport const DEFAULT_TEXT_FILL = Colors.gray800;\nexport const DEFAULT_FONT_WEIGHT = 'normal';\nexport const DEFAULT_TEXT_WRAP = 'none';\nexport const DEFAULT_TEXT_TRANSFORMS_ENABLED = 'position';\nexport const DEFAULT_TEXT_ELLIPSIS = true;\nexport const DEFAULT_TEXT_LISTENING = false;\nexport const DEFAULT_TEXT_ALIGN_LEFT = 'left';\nexport const DEFAULT_TEXT_ALIGN_CENTER = 'center';\nexport const DEFAULT_TEXT_ALIGN_RIGHT = 'right';\nexport const DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE = 'middle';\nexport const DEFAULT_TEXT_MAX_HEIGHT = 130;\nexport const DEFAULT_WRAP_TEXT_MAX_ROW = 1;\nexport const DEFAULT_TEXT_VERTICAL_ALIGN_TOP = 'top';\nexport const DEFAULT_TEXT_DECORATION = 'none';\nexport const DEFAULT_TEXT_SCALE = 1;\nexport const DEFAULT_TEXT_MAX_CACHE = 500;\nexport const FONT_SIZE_SM = 12;\n","import { ChangeDetectionStrategy, Component, ElementRef, Input, computed } from '@angular/core';\nimport { ThyDivider } from 'ngx-tethys/divider';\nimport {\n ThyDropdownAbstractMenu,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemNameDirective\n} from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { AITable } from '../../core';\nimport { AITableFieldMenuItem } from '../../types/field';\n\n@Component({\n selector: 'field-menu',\n templateUrl: './field-menu.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ThyIcon,\n ThyDivider,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemNameDirective,\n ThyDropdownMenuItemIconDirective\n ]\n})\nexport class FieldMenu extends ThyDropdownAbstractMenu {\n @Input({ required: true }) fieldId!: string;\n\n @Input({ required: true }) aiTable!: AITable;\n\n @Input({ required: true }) fieldMenus!: AITableFieldMenuItem[];\n\n @Input() origin!: HTMLElement | ElementRef<any>;\n\n @Input() position!: { x: number; y: number };\n\n field = computed(() => {\n return this.aiTable.fields().find((item) => item._id === this.fieldId)!;\n });\n\n execute(menu: AITableFieldMenuItem) {\n if ((menu.disabled && !menu.disabled(this.aiTable, this.field)) || !menu.disabled) {\n menu.exec && menu.exec(this.aiTable, this.field, this.origin, this.position);\n }\n }\n}\n","@for (menu of fieldMenus; track index; let index = $index) {\n @if (menu.type === 'divider') {\n <thy-divider [thyStyle]=\"'solid'\"></thy-divider>\n } @else {\n @if ((menu.hidden && !menu.hidden(aiTable, field)) || !menu.hidden) {\n <a thyDropdownMenuItem href=\"javascript:;\" (click)=\"execute(menu)\">\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name! }}</span>\n </a>\n }\n }\n}\n","import { AITableFields, AITableRecords, FieldOptions } from '../core';\nimport { AITableGridData, AITableLinearRow } from '../types';\nimport { AITableRowType } from '../types/row';\n\nexport const buildGridLinearRows = (visibleRecords: AITableRecords): AITableLinearRow[] => {\n const linearRows: AITableLinearRow[] = [];\n let displayRowIndex = 0;\n [...visibleRecords, { _id: '' }].forEach((row) => {\n if (row._id) {\n displayRowIndex++;\n linearRows.push({\n type: AITableRowType.record,\n _id: row._id,\n displayIndex: displayRowIndex\n });\n }\n if (!row._id) {\n linearRows.push({\n type: AITableRowType.add,\n _id: ''\n });\n }\n });\n return linearRows;\n};\n\nexport const buildGridData = (recordValue: AITableRecords, fieldsValue: AITableFields): AITableGridData => {\n const fields = fieldsValue.map((value) => {\n const fieldOption = FieldOptions.find((item) => item.type === value.type)!;\n return {\n ...value,\n icon: value.icon || fieldOption.icon,\n width: value.width || fieldOption.width\n };\n });\n return {\n type: 'grid',\n fields,\n records: recordValue\n };\n};\n","import { Injectable } from '@angular/core';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { AITableFieldPropertyEditor } from '../components';\nimport { FieldMenu } from '../components/field-menu/field-menu.component';\nimport { AITable } from '../core';\nimport { AIFieldConfig, AITableEditFieldOptions, AITableFieldMenuOptions } from '../types';\n\nexport const AI_TABLE_GRID_FIELD_SERVICE_MAP = new WeakMap<AITable, AITableGridFieldService>();\n\n@Injectable()\nexport class AITableGridFieldService {\n aiFieldConfig: AIFieldConfig | undefined;\n\n constructor(private thyPopover: ThyPopover) {}\n\n initAIFieldConfig(aiFieldConfig: AIFieldConfig | undefined) {\n this.aiFieldConfig = aiFieldConfig;\n }\n\n editFieldProperty(aiTable: AITable, options: AITableEditFieldOptions) {\n const { field, isUpdate, origin, position } = options;\n const component = this.aiFieldConfig?.fieldPropertyEditor ?? AITableFieldPropertyEditor;\n return this.thyPopover.open(component, {\n origin,\n originPosition: position,\n placement: 'bottomLeft',\n originActiveClass: undefined,\n initialState: {\n aiTable,\n aiEditField: field,\n isUpdate\n }\n });\n }\n\n openFieldMenu(aiTable: AITable, options: AITableFieldMenuOptions) {\n const { origin, editOrigin, position, fieldId, fieldMenus } = options;\n const ref = this.thyPopover.open(FieldMenu, {\n origin,\n originPosition: position,\n placement: 'bottomLeft',\n originActiveClass: undefined,\n initialState: {\n origin: editOrigin,\n position: options.editFieldPosition,\n aiTable,\n fieldId,\n fieldMenus\n }\n });\n return ref;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AITable } from '../core';\n\n@Injectable()\nexport class AITableGridSelectionService {\n aiTable!: AITable;\n\n constructor() {}\n\n initialize(aiTable: AITable) {\n this.aiTable = aiTable;\n }\n\n clearSelection() {\n this.aiTable.selection.set({\n selectedRecords: new Map(),\n selectedFields: new Map(),\n selectedCells: new Map()\n });\n }\n\n selectCell(recordId: string, fieldId: string) {\n const fields = this.aiTable.selection().selectedCells.get(recordId);\n if (fields?.hasOwnProperty(fieldId)) {\n return;\n }\n this.clearSelection();\n this.aiTable.selection().selectedCells.set(recordId, { [fieldId]: true });\n }\n\n selectField(fieldId: string) {\n if (this.aiTable.selection().selectedFields.has(fieldId)) {\n return;\n }\n this.clearSelection();\n this.aiTable.selection().selectedFields.set(fieldId, true);\n }\n\n selectRecord(recordId: string) {\n if (this.aiTable.selection().selectedRecords.has(recordId)) {\n this.aiTable.selection().selectedRecords.delete(recordId);\n } else {\n this.aiTable.selection().selectedRecords.set(recordId, true);\n }\n this.aiTable.selection.set({\n selectedRecords: this.aiTable.selection().selectedRecords,\n selectedFields: new Map(),\n selectedCells: new Map()\n });\n }\n\n toggleSelectAll(checked: boolean) {\n this.clearSelection();\n if (checked) {\n this.aiTable.records().forEach((item) => {\n this.selectRecord(item._id);\n });\n }\n }\n\n updateSelect(event: MouseEvent) {\n const target = event?.target as HTMLElement;\n if (!target) {\n return;\n }\n const cellDom = target.closest('.grid-cell');\n const colDom = target.closest('.grid-field');\n const checkbox = target.tagName === 'INPUT' && (target as HTMLInputElement).type === 'checkbox' && target.closest('.grid-checkbox');\n const fieldAction = target.closest('.grid-field-action');\n if (cellDom) {\n const fieldId = cellDom.getAttribute('fieldId');\n const recordId = cellDom.getAttribute('recordId');\n fieldId && recordId && this.selectCell(recordId, fieldId);\n }\n if (colDom && !fieldAction) {\n const fieldId = colDom.getAttribute('fieldId');\n fieldId && this.selectField(fieldId);\n }\n if (!cellDom && !colDom && !checkbox) {\n this.clearSelection();\n }\n }\n}\n","import { AITable, AITableField, AITableFieldOption, FieldValue, getFieldOptionByField } from '../core';\nimport { AI_TABLE_GRID_FIELD_SERVICE_MAP } from '../services';\nimport { AITableSizeMap } from '../types';\n\nexport function getColumnIndicesMap(fields: AITableField[]) {\n const columnIndicesMap: AITableSizeMap = {};\n fields?.forEach((field, index) => {\n columnIndicesMap[index] = field.width ?? (getFieldOptionByField(field) as AITableFieldOption).width;\n });\n return columnIndicesMap;\n}\n\n/**\n * 获取单元格位置\n * 根据单元格是否是第一列/最后一列确定单元格所在的位置\n */\nexport function getCellHorizontalPosition(options: { columnWidth: number; columnIndex: number; columnCount: number }) {\n const { columnWidth } = options;\n return { width: columnWidth, offset: 0 };\n}\n\nexport function transformCellValue<T = any>(aiTable: AITable, field: AITableField, cellValue: FieldValue): T {\n const fieldService = AI_TABLE_GRID_FIELD_SERVICE_MAP.get(aiTable);\n\n if (!fieldService) {\n return cellValue;\n }\n\n const fieldRenderers = fieldService.aiFieldConfig?.fieldRenderers;\n if (!fieldRenderers) {\n return cellValue;\n }\n\n const cellTransform = fieldRenderers[field.type]?.transform;\n if (!cellTransform) {\n return cellValue;\n }\n\n const cellText = cellTransform(field, cellValue);\n\n if (cellText == null) {\n return cellValue;\n }\n\n return cellText;\n}\n\n/**\n * `\\u4e00`: https://www.compart.com/en/unicode/U+4E00\n * `\\u9fa5`: https://www.compart.com/en/unicode/U+9FA5\n */\nconst UNIFIED_IDEOGRAPHS_REGEX = /^[\\u4e00-\\u9fa5]+$/;\n\nconst SET_OF_LETTERS_REGEX = /^[a-zA-Z\\/ ]+$/;\n\nexport function getAvatarShortName(name: string | null | undefined): string {\n if (!name) {\n return '';\n }\n\n name = name.trim();\n\n if (UNIFIED_IDEOGRAPHS_REGEX.test(name) && name.length > 2) {\n return name.slice(name.length - 2);\n }\n\n if (SET_OF_LETTERS_REGEX.test(name) && name.indexOf(' ') > 0) {\n const words: string[] = name.split(' ');\n return (words[0].slice(0, 1) + words[1].slice(0, 1)).toUpperCase();\n }\n\n return name.length > 2 ? name.slice(0, 2).toUpperCase() : name.toUpperCase();\n}\n\nexport function getAvatarBgColor(name: string) {\n if (!name) {\n return;\n }\n const colors = ['#56abfb', '#5dcfff', '#84e17e', '#73d897', '#ff9f73', '#fa8888', '#fb7fb7', '#9a7ef4', '#868af6'];\n const nameArray: string[] = name.split('');\n const code: number =\n name && name.length > 0\n ? nameArray.reduce(\n function (result, item) {\n result.value += item.charCodeAt(0);\n return result;\n },\n { value: 0 }\n ).value\n : 0;\n return colors[code % 9];\n}\n","import { AI_TABLE_BLANK } from '../constants';\nimport { AITableTargetNameDetail, AITableTargetNameOptions } from '../types';\n\n/**\n * 生成目标名称\n */\nexport const generateTargetName = ({ targetName, fieldId, recordId, mouseStyle }: AITableTargetNameOptions) => {\n const flag = '$';\n return `${targetName}.${fieldId || flag}.${recordId || flag}.${mouseStyle || flag}`;\n};\n\n/**\n * 取目标名称\n */\nexport const getTargetName = (targetName?: string | null) => {\n if (targetName == null || targetName === '') return AI_TABLE_BLANK;\n return targetName.split('.')[0];\n};\n\n/**\n * Parse targetName for built-in information\n */\nexport const getDetailByTargetName = (_targetName: string | null): AITableTargetNameDetail => {\n if (_targetName == null) {\n return {\n targetName: null,\n fieldId: null,\n recordId: null,\n mouseStyle: null\n };\n }\n\n const flag = '$';\n const [targetName, fieldId, recordId, mouseStyle] = _targetName.split('.');\n return {\n targetName,\n fieldId: fieldId === flag ? null : fieldId,\n recordId: recordId === flag ? null : recordId,\n mouseStyle: mouseStyle === flag ? null : mouseStyle\n };\n};\n\n/**\n * 转换为字符串\n * @param value\n * @returns\n */\nexport const castToString = (value: string): string | null => {\n if (value == null) {\n return null;\n }\n return typeof value !== 'string' ? String(value) : value;\n};\n","import { AI_TABLE_CELL, AI_TABLE_OFFSET, Colors } from '../constants';\nimport { AITable } from '../core';\nimport { AITableCellsConfig, AITableRowType } from '../types';\nimport { getCellHorizontalPosition } from './cell';\nimport { generateTargetName } from './common';\n\nexport function getPlaceHolderCellsConfigs(options: AITableCellsConfig) {\n const { aiTable, coordinate, columnStartIndex, columnStopIndex, rowStartIndex, rowStopIndex } = options;\n const { linearRows } = aiTable.context!;\n const { rowHeight, columnCount, rowCount } = coordinate;\n const visibleColumns = AITable.getVisibleFields(aiTable);\n\n let configs = [];\n for (let columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n // 当前列索引超出总列数范围,返回空\n if (columnIndex > columnCount - 1) {\n return [];\n }\n const field = visibleColumns[columnIndex];\n const fieldId = field._id;\n\n // 当前列不存在,返回空\n if (field == null) {\n return [];\n }\n\n // 当前列的 X 轴偏移量和列宽度\n const x = coordinate.getColumnOffset(columnIndex) + AI_TABLE_OFFSET;\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n\n for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n // 当前行索引是否超出总行数范围,超出则退出循环\n if (rowIndex > rowCount - 1) {\n break;\n }\n\n const row = linearRows()[rowIndex];\n const { _id: recordId, type } = row;\n if (type !== AITableRowType.record) {\n continue;\n }\n\n // 当前行的 Y 轴偏移量,并根据列宽和列索引获取单元格的水平位置(宽度和偏移量)\n const y = coordinate.getRowOffset(rowIndex) + AI_TABLE_OFFSET;\n const { width, offset } = getCellHorizontalPosition({\n columnWidth,\n columnIndex,\n columnCount\n });\n\n const height = rowHeight;\n configs.unshift({\n key: `placeholder-cell-${fieldId}-${recordId}`,\n name: generateTargetName({\n targetName: AI_TABLE_CELL,\n fieldId,\n recordId\n }),\n x: x + offset,\n y,\n width,\n height,\n fill: Colors.transparent,\n strokeEnabled: false,\n hitStrokeWidth: 0,\n transformsEnabled: 'position',\n perfectDrawEnabled: false,\n shadowEnabled: false\n });\n }\n }\n return configs;\n}\n","import { LRUCache } from 'lru-cache';\nimport { DEFAULT_TEXT_MAX_CACHE } from '../constants';\nimport { AITableWrapTextResult } from '../types';\n\nconst fontCache: { [key: string]: LRUCache<string, number> } = {};\nexport const textDataCache = new LRUCache<string, AITableWrapTextResult>({\n max: DEFAULT_TEXT_MAX_CACHE\n});\n\n/**\n * 计算给定文本在指定字体和 Canvas 环境下的宽度。\n * 它通过缓存机制来优化性能,避免重复计算相同文本的宽度\n */\nexport const getTextWidth = (ctx: CanvasRenderingContext2D, text: string, font: string) => {\n let width: number | undefined = 0;\n if (!text || typeof text !== 'string') {\n return width;\n }\n let cacheOfFont = fontCache[font];\n if (!cacheOfFont) {\n cacheOfFont = fontCache[font] = new LRUCache({\n max: 500\n });\n }\n width = cacheOfFont.get(text);\n if (width == null) {\n ctx.font = font;\n width = ctx!.measureText(text).width;\n cacheOfFont.set(text, width);\n }\n\n return width;\n};\n","interface AITableImageOption {\n crossOrigin?: boolean;\n}\n\nexport const imageCache = (() => {\n const imageMap: {\n [name: string]: {\n img: HTMLImageElement;\n success: boolean;\n };\n } = {};\n const imgPromises: any = [];\n\n function loadImage(name: string, src: string, option?: AITableImageOption) {\n imgPromises.push(\n new Promise((resolve, reject) => {\n const img = new Image();\n\n img.src = src;\n img.referrerPolicy = 'no-referrer';\n\n if (!option?.crossOrigin) {\n img.crossOrigin = 'Anonymous';\n }\n\n imageMap[name] = {\n img,\n success: false\n };\n\n try {\n img.onload = () => {\n imageMap[name] = {\n img,\n success: true\n };\n resolve({\n name,\n img\n });\n };\n } catch (err) {\n imageMap[name] = {\n img,\n success: false\n };\n reject(err);\n }\n })\n );\n }\n\n function imageMapOnload(callback: any) {\n Promise.all(imgPromises).then(callback);\n }\n\n function getImage(name: string) {\n const imgInfo = imageMap[name];\n\n if (imgInfo == null) {\n return null;\n }\n\n const { img, success } = imgInfo;\n\n if (!success) return false;\n return img;\n }\n\n return {\n loadImage,\n getImage,\n imageMapOnload,\n imageMap\n };\n})();\n","export const isWindowsOS = () => {\n const agent = navigator.userAgent.toLowerCase();\n if (agent.indexOf('win32') >= 0 || agent.indexOf('wow32') >= 0) {\n return true;\n }\n if (agent.indexOf('win64') >= 0 || agent.indexOf('wow64') >= 0) {\n return true;\n }\n return false;\n};\n\nexport const isWindows = isWindowsOS();\n\n\nexport const isMac = () => {\n const agent = navigator.userAgent;\n return /macintosh/i.test(agent);\n};\n","import { AI_TABLE_ROW_HEAD_WIDTH } from '../constants';\nimport { AITableField, AITableFieldOption, Coordinate, getFieldOptionByField } from '../core';\nimport { AITableScrollState } from '../types';\n\nexport const getVisibleRangeInfo = (coordinate: Coordinate, scrollState: AITableScrollState) => {\n const { scrollTop, scrollLeft } = scrollState;\n const { rowCount, columnCount, frozenColumnCount } = coordinate;\n\n // 获取要渲染的垂直可见区域\n const getVerticalRangeInfo = () => {\n const startIndex = coordinate.getRowStartIndex(scrollTop);\n const stopIndex = coordinate.getRowStopIndex(startIndex, scrollTop);\n\n return {\n rowStartIndex: Math.max(0, startIndex - 1),\n rowStopIndex: Math.max(0, Math.min(rowCount - 1, stopIndex + 1))\n };\n };\n\n // 获取要渲染的水平可见区域\n const getHorizontalRangeInfo = () => {\n const startIndex = coordinate.getColumnStartIndex(scrollLeft);\n const stopIndex = coordinate.getColumnStopIndex(startIndex, scrollLeft);\n\n return {\n columnStartIndex: Math.max(frozenColumnCount - 1, startIndex),\n columnStopIndex: Math.max(frozenColumnCount - 1, Math.min(columnCount - 1, stopIndex))\n };\n };\n\n const { rowStartIndex, rowStopIndex } = getVerticalRangeInfo();\n const { columnStartIndex, columnStopIndex } = getHorizontalRangeInfo();\n return {\n rowStartIndex,\n rowStopIndex,\n columnStartIndex,\n columnStopIndex\n };\n};\n\nexport const scrollMax = (coordinate: Coordinate, visibleColumns: AITableField[]) => {\n const scrollMaxWidth = visibleColumns.reduce(\n (pre, cur) => pre + (getFieldOptionByField(cur) as AITableFieldOption)?.width,\n AI_TABLE_ROW_HEAD_WIDTH\n );\n const scrollMaxHeight = coordinate.getRowOffset(coordinate.rowCount - 1) + 32;\n return { scrollMaxWidth, scrollMaxHeight };\n};\n","import { AI_TABLE_BLANK, AI_TABLE_CELL_ACTIVE_BORDER_WIDTH, AI_TABLE_OFFSET, AI_TABLE_ROW_HEAD_WIDTH } from '../constants';\nimport { AITableField, Coordinate, RendererContext } from '../core';\nimport { AITableAreaType } from '../types';\nimport { getTargetName } from './common';\nimport { scrollMax } from './visible-range';\n\nexport const getMousePosition = (\n x: number,\n y: number,\n coordinate: Coordinate,\n fields: AITableField[],\n context: RendererContext,\n _targetName?: string\n) => {\n const { scrollTop, scrollLeft } = context.scrollState();\n const { scrollMaxWidth, scrollMaxHeight } = scrollMax(coordinate, fields);\n const offsetTop = scrollTop + y;\n const rowIndex = coordinate.getRowStartIndex(offsetTop);\n const offsetLeft = isWithinFrozenColumnBoundary(x, coordinate.frozenColumnWidth) ? x : scrollLeft + x;\n const columnIndex = coordinate.getColumnStartIndex(offsetLeft);\n const areaType = offsetLeft <= scrollMaxWidth && offsetTop <= scrollMaxHeight ? AITableAreaType.grid : AITableAreaType.none;\n const targetName = getTargetName(_targetName);\n return {\n areaType,\n targetName, // As a simple operational identifier, with prefix name only\n realTargetName: _targetName || AI_TABLE_BLANK, // Real name\n rowIndex,\n columnIndex,\n offsetTop,\n offsetLeft,\n x,\n y\n };\n};\n\nexport const isWithinFrozenColumnBoundary = (x: number, frozenColumnWidth: number) => {\n const max = AI_TABLE_ROW_HEAD_WIDTH + frozenColumnWidth;\n const min = AI_TABLE_ROW_HEAD_WIDTH;\n return x > min && x < max;\n};\n\nexport const getEditorSpace = (widthOrHeight: number) => {\n return widthOrHeight + AI_TABLE_OFFSET * 2;\n};\n\nexport const getEditorBoxOffset = () => {\n return -AI_TABLE_OFFSET;\n};\n\nexport const getCellEditorBorderSpace = () => {\n return AI_TABLE_CELL_ACTIVE_BORDER_WIDTH * 2 - AI_TABLE_OFFSET * 2;\n};\n\nexport const getHoverEditorSpace = (widthOrHeight: number) => {\n const borderSpace = getCellEditorBorderSpace();\n return widthOrHeight - borderSpace;\n};\n\nexport const getHoverEditorBoxOffset = () => {\n const borderSpace = getCellEditorBorderSpace();\n return borderSpace / 2;\n};","import {\n AI_TABLE_FIELD_ADD_BUTTON,\n AI_TABLE_FIELD_HEAD_MORE,\n AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX,\n AI_TABLE_ROW_ADD_BUTTON,\n AI_TABLE_ROW_SELECT_CHECKBOX\n} from '../constants';\nimport { AITableAreaType } from '../types';\nimport { getDetailByTargetName } from './common';\n\nexport const handleMouseStyle = (realTargetName: string, areaType: AITableAreaType = AITableAreaType.grid, container: HTMLDivElement) => {\n const { targetName, mouseStyle } = getDetailByTargetName(realTargetName);\n if (mouseStyle) return setMouseStyle(mouseStyle, container);\n if (areaType === AITableAreaType.none) return setMouseStyle('default', container);\n switch (targetName) {\n case AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX:\n case AI_TABLE_FIELD_HEAD_MORE:\n case AI_TABLE_ROW_SELECT_CHECKBOX:\n case AI_TABLE_ROW_ADD_BUTTON:\n case AI_TABLE_FIELD_ADD_BUTTON: {\n return setMouseStyle('pointer', container);\n }\n default:\n return setMouseStyle('default', container);\n }\n};\n\nexport const setMouseStyle = (mouseStyle: string, container: HTMLDivElement) => {\n container.style.cursor = mouseStyle;\n};\n","import {\n DEFAULT_FONT_FAMILY,\n DEFAULT_FONT_SIZE,\n DEFAULT_FONT_STYLE,\n DEFAULT_FONT_WEIGHT,\n DEFAULT_TEXT_LINE_HEIGHT,\n DEFAULT_TEXT_SCALE\n} from '../constants';\nimport { castToString } from './common';\n\nexport interface AITableTextMeasureOptions {\n fontFamily?: string;\n fontSize?: number;\n fontWeight?: string;\n fontStyle?: string;\n lineHeight?: number;\n scale?: number;\n}\n\n/**\n * 在 Canvas 上测量文本的宽度和高度,以便在显示文本时能够动态调整布局或限制文本的显示区域\n * @param defaults\n * @returns\n */\nexport const TextMeasure = (defaults: AITableTextMeasureOptions = {}) => {\n const {\n fontFamily = DEFAULT_FONT_FAMILY,\n fontSize = DEFAULT_FONT_SIZE,\n fontWeight = DEFAULT_FONT_WEIGHT,\n fontStyle = DEFAULT_FONT_STYLE,\n lineHeight = DEFAULT_TEXT_LINE_HEIGHT,\n scale = DEFAULT_TEXT_SCALE\n } = defaults;\n const o: Required<AITableTextMeasureOptions> = {\n fontFamily,\n fontSize,\n fontWeight,\n fontStyle,\n lineHeight,\n scale\n };\n const canvas = document.createElement('canvas');\n const context = canvas ? canvas.getContext('2d') : null;\n\n const normalizeFontFamily = (fontFamily: string) => {\n return fontFamily\n .split(',')\n .map((family) => {\n family = family.trim();\n const hasSpace = family.indexOf(' ') >= 0;\n const hasQuotes = family.indexOf('\"') >= 0 || family.indexOf(\"'\") >= 0;\n if (hasSpace && !hasQuotes) {\n family = `\"${family}\"`;\n }\n return family;\n })\n .join(', ');\n };\n\n // 可以在运行时动态调整字体样式,从而影响后续的文本测量\n const setFont = (options: AITableTextMeasureOptions = {}) => {\n for (const key in options) {\n (o as any)[key] = (options as any)[key] ?? (o as any)[key];\n }\n if (context) {\n context.font = `${o.fontWeight} ${o.fontSize * o.scale}px ${normalizeFontFamily(o.fontFamily)}`;\n }\n };\n\n // 根据指定的最大宽度和行数来计算文本的显示方式。如果文本太长,它会自动换行或截断,并返回是否发生溢出的信息\n const getWidthOfLongestText = (text: string | null, maxWidth?: number, maxLineCount?: number) => {\n let width = 0;\n let height = 0;\n let lineCount = 0;\n if (text == null) {\n return { width, height, lastLineWidth: 0 };\n }\n const lines = text.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n const lineWidth = context?.measureText(line).width ?? 0;\n width = Math.max(width, lineWidth);\n lineCount = maxWidth != null ? Math.ceil(lineWidth / maxWidth) || 1 : 1;\n height += o.lineHeight * lineCount;\n }\n if (maxWidth == null || maxLineCount === 1 || (maxLineCount && lineCount <= maxLineCount)) {\n return {\n width: Math.ceil(width),\n height: Math.ceil(height),\n text,\n isOverflow: Boolean(maxLineCount && lineCount > maxLineCount),\n lastLineWidth: Math.ceil(width)\n };\n }\n\n const arrText = text.split('');\n let rowCount = 0; // 总行数\n let textHeight = 0; // 文本最终占用的高度\n let showText = ''; // 每行展示的文本\n let totalText = '';\n let isLimitRow = false;\n const textLength = arrText.length;\n\n for (let n = 0; n < textLength; n++) {\n const singleText = arrText[n]!;\n const composeText = showText + singleText;\n // 如果没有超过 maxLineCount,就会继续换行\n isLimitRow = maxLineCount ? rowCount === maxLineCount - 1 : false;\n const measureText = isLimitRow ? composeText + '…' : composeText;\n totalText += singleText;\n const textWidth = context?.measureText(measureText).width ?? 0;\n const isLineBreak = ['\\n', '\\r'].includes(singleText);\n if (((maxWidth && textWidth > maxWidth) || isLineBreak) && (maxLineCount == null || rowCount < maxLineCount)) {\n showText = isLineBreak ? '' : singleText;\n textHeight += lineHeight;\n rowCount++;\n if (isLimitRow) {\n if (n < textLength - 1) {\n totalText = totalText.substring(0, totalText.length - 1) + '…';\n }\n break;\n }\n } else {\n showText = composeText;\n }\n }\n return {\n width: Math.ceil(width),\n height: Math.ceil(maxLineCount == null || rowCount < maxLineCount ? textHeight + lineHeight : textHeight),\n text: totalText,\n isOverflow: isLimitRow,\n lastLineWidth: context?.measureText(showText).width ?? 0\n };\n };\n\n // 测量给定文本的宽度和高度。\n // 支持指定最大宽度 (maxWidth) 和最大行数 (maxLineCount),从而能够处理多行文本的自动换行和截断(例如在文本超过行数限制时添加省略号 \"…\")\n const measureText = (text: string, maxWidth?: number, maxLineCount?: number) => {\n return getWidthOfLongestText(castToString(text), maxWidth, maxLineCount);\n };\n\n // 可以将字体样式重置为初始默认配置\n const reset = () => setFont(defaults);\n\n setFont(o);\n\n return {\n context,\n measureText,\n setFont,\n reset\n };\n};\n","import { FlexibleConnectedPositionStrategy } from '@angular/cdk/overlay';\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ThyAbstractInternalOverlayRef } from 'ngx-tethys/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { debounceTime, fromEvent, Subject } from 'rxjs';\nimport { AbstractEditCellEditor } from '../components';\nimport { GRID_CELL_EDITOR_MAP } from '../constants';\nimport { AITable, AITableFieldType } from '../core';\nimport { AITableGridCellRenderSchema, AITableOpenEditOptions } from '../types';\nimport { getCellHorizontalPosition, getEditorBoxOffset, getEditorSpace, getHoverEditorBoxOffset, getHoverEditorSpace } from '../utils';\n\n@Injectable()\nexport class AITableGridEventService {\n aiTable!: AITable;\n\n aiFieldRenderers?: Partial<Record<AITableFieldType, AITableGridCellRenderSchema>>;\n\n dblClickEvent$ = new Subject<MouseEvent>();\n\n mousedownEvent$ = new Subject<MouseEvent>();\n\n mouseoverEvent$ = new Subject<MouseEvent>();\n\n globalMouseoverEvent$ = new Subject<MouseEvent>();\n\n globalMousedownEvent$ = new Subject<MouseEvent>();\n\n private cellEditorPopoverRef!: ThyPopoverRef<AbstractEditCellEditor<any>> | null;\n\n private destroyRef = inject(DestroyRef);\n\n private thyPopover = inject(ThyPopover);\n\n initialize(aiTable: AITable, aiFieldRenderers?: Partial<Record<AITableFieldType, AITableGridCellRenderSchema>>) {\n this.aiTable = aiTable;\n this.aiFieldRenderers = aiFieldRenderers;\n }\n\n registerEvents(element: HTMLElement) {\n fromEvent<MouseEvent>(element, 'dblclick', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.dblClickEvent$.next(event);\n });\n\n fromEvent<MouseEvent>(element, 'mouseover', { passive: true })\n .pipe(debounceTime(80), takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.mouseoverEvent$.next(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseover', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.globalMouseoverEvent$.next(event);\n });\n\n fromEvent<MouseEvent>(element, 'mousedown', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.mousedownEvent$.next(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousedown', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.globalMousedownEvent$.next(event as MouseEvent);\n });\n }\n\n private getEditorComponent(type: AITableFieldType) {\n if (this.aiFieldRenderers && this.aiFieldRenderers[type]) {\n return this.aiFieldRenderers[type]!.editor;\n }\n return GRID_CELL_EDITOR_MAP[type];\n }\n\n openEdit(cellDom: HTMLElement) {\n const { x, y, width, height } = cellDom.getBoundingClientRect();\n const fieldId = cellDom.getAttribute('fieldId')!;\n const recordId = cellDom.getAttribute('recordId')!;\n const component = this.getEditorComponent(this.aiTable.fieldsMap()[fieldId].type);\n const ref = this.thyPopover.open(component, {\n origin: cellDom,\n originPosition: {\n x: x - 1,\n y: y + 1,\n width: width + 2,\n height: height + 2\n },\n width: width + 1 + 'px',\n height: height + 2 + 'px',\n placement: 'top',\n offset: -(height + 4),\n minWidth: width,\n initialState: {\n fieldId: fieldId,\n recordId: recordId,\n aiTable: this.aiTable\n },\n panelClass: 'grid-cell-editor',\n outsideClosable: false,\n hasBackdrop: false,\n manualClosure: true,\n animationDisabled: true,\n autoAdaptive: true\n });\n return ref;\n }\n\n getOriginPosition(aiTable: AITable, options: AITableOpenEditOptions) {\n const { container, coordinate, recordId, fieldId, isHoverEdit } = options;\n const { scrollState } = aiTable.context!;\n const { rowHeight, columnCount } = coordinate;\n const { rowIndex, columnIndex } = AITable.getCellIndex(aiTable, { recordId, fieldId })!;\n const originX = coordinate.getColumnOffset(columnIndex);\n const originY = coordinate.getRowOffset(rowIndex);\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n const { width: originWidth, offset: originOffset } = getCellHorizontalPosition({\n columnWidth,\n columnIndex,\n columnCount\n });\n const originRect = container!.getBoundingClientRect();\n const originPosition = {\n x: originX + originOffset - scrollState().scrollLeft + originRect.x,\n y: originY - scrollState().scrollTop + originRect.y,\n width: originWidth,\n height: rowHeight\n };\n let x = originPosition.x + getEditorBoxOffset();\n let y = originPosition.y + getEditorBoxOffset();\n let width = getEditorSpace(originPosition.width);\n let height = getEditorSpace(originPosition.height);\n // hover 编辑组件无边框\n if (isHoverEdit) {\n x = originPosition.x + getHoverEditorBoxOffset();\n y = originPosition.y + getHoverEditorBoxOffset();\n width = getHoverEditorSpace(originPosition.width);\n height = getHoverEditorSpace(originPosition.height);\n }\n return {\n ...originPosition,\n x: x,\n y: y,\n width: width,\n height: height\n };\n }\n\n openCellEditor(aiTable: AITable, options: AITableOpenEditOptions) {\n const { container, recordId, fieldId, isHoverEdit } = options;\n const component = this.getEditorComponent(this.aiTable.fieldsMap()[fieldId].type);\n const offsetOriginPosition = this.getOriginPosition(aiTable, options);\n this.cellEditorPopoverRef = this.thyPopover.open(component, {\n origin: container!,\n originPosition: offsetOriginPosition,\n width: offsetOriginPosition.width + 'px',\n height: offsetOriginPosition.height + 'px',\n minWidth: offsetOriginPosition.width + 'px',\n placement: 'bottom',\n offset: -offsetOriginPosition.height,\n initialState: {\n fieldId: fieldId,\n recordId: recordId,\n aiTable: aiTable\n },\n panelClass: 'grid-cell-editor',\n outsideClosable: false,\n hasBackdrop: false,\n manualClosure: true,\n animationDisabled: true,\n autoAdaptive: true\n });\n\n if (this.cellEditorPopoverRef) {\n const wheelEvent = fromEvent<WheelEvent>(\n this.cellEditorPopoverRef.componentInstance.elementRef.nativeElement,\n 'wheel'\n ).subscribe((event: WheelEvent) => {\n event.preventDefault();\n this.aiTable.context?.scrollAction({\n deltaX: event.deltaX,\n deltaY: event.deltaY,\n shiftKey: event.shiftKey,\n callback: () => {\n const originPosition = this.getOriginPosition(aiTable, options);\n const positionStrategy = (this.cellEditorPopoverRef as ThyAbstractInternalOverlayRef<any, any, any>)\n .getOverlayRef()\n .getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n positionStrategy.setOrigin(originPosition);\n positionStrategy.apply();\n }\n });\n });\n this.cellEditorPopoverRef.afterClosed().subscribe(() => {\n wheelEvent.unsubscribe();\n this.cellEditorPopoverRef = null;\n });\n (this.cellEditorPopoverRef.componentInstance as AbstractEditCellEditor<any>).updateFieldValue.subscribe((value) => {\n options.updateFieldValue(value);\n });\n }\n return this.cellEditorPopoverRef;\n }\n\n closeCellEditor() {\n if (this.cellEditorPopoverRef) {\n this.cellEditorPopoverRef.close();\n this.cellEditorPopoverRef = null;\n }\n }\n\n getCurrentEditCell() {\n if (this.cellEditorPopoverRef) {\n const recordId = this.cellEditorPopoverRef.componentInstance?.recordId;\n const fieldId = this.cellEditorPopoverRef.componentInstance?.fieldId;\n\n if (recordId && fieldId) {\n return {\n recordId,\n fieldId\n };\n }\n return null;\n }\n return null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n model,\n NgZone,\n OnInit,\n output\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { mergeWith } from 'rxjs';\nimport { DBL_CLICK_EDIT_TYPE, MOUSEOVER_EDIT_TYPE } from './constants';\nimport {\n AddFieldOptions,\n AddRecordOptions,\n AIPlugin,\n AITable,\n AITableFields,\n AITableFieldType,\n AITableRecords,\n AITableSelectOptionStyle,\n AITableValue,\n createAITable,\n createDefaultField,\n UpdateFieldValueOptions\n} from './core';\nimport { AITableGridEventService } from './services/event.service';\nimport { AI_TABLE_GRID_FIELD_SERVICE_MAP, AITableGridFieldService } from './services/field.service';\nimport { AITableGridSelectionService } from './services/selection.service';\nimport { AIFieldConfig, AITableFieldMenuItem, AITableReferences } from './types';\nimport { AITableFieldPropertyEditor } from './components';\n\n@Component({\n selector: 'ai-table-grid-base',\n template: '',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableGridBase implements OnInit {\n aiRecords = model.required<AITableRecords>();\n\n aiFields = model.required<AITableFields>();\n\n aiFieldConfig = input<AIFieldConfig>();\n\n aiReadonly = input<boolean>();\n\n aiPlugins = input<AIPlugin[]>();\n\n aiReferences = input.required<AITableReferences>();\n\n aiBuildRenderDataFn = input<(aiTable: AITable) => AITableValue>();\n\n AITableFieldType = AITableFieldType;\n\n AITableSelectOptionStyle = AITableSelectOptionStyle;\n\n aiTable!: AITable;\n\n isSelectedAll = computed(() => {\n return this.aiTable.selection().selectedRecords.size === this.aiRecords().length;\n });\n\n aiTableInitialized = output<AITable>();\n\n aiAddRecord = output<AddRecordOptions>();\n\n aiAddField = output<AddFieldOptions>();\n\n aiUpdateFieldValue = output<UpdateFieldValueOptions>();\n\n fieldMenus!: AITableFieldMenuItem[];\n\n mouseoverRef!: ThyPopoverRef<any>;\n\n gridData = computed(() => {\n if (this.aiBuildRenderDataFn && this.aiBuildRenderDataFn() && this.aiTable) {\n return this.aiBuildRenderDataFn()!(this.aiTable);\n }\n return {\n records: this.aiRecords(),\n fields: this.aiFields()\n };\n });\n\n protected ngZone = inject(NgZone);\n protected elementRef = inject(ElementRef);\n protected destroyRef = inject(DestroyRef);\n protected aiTableGridFieldService = inject(AITableGridFieldService);\n protected aiTableGridEventService = inject(AITableGridEventService);\n protected aiTableGridSelectionService = inject(AITableGridSelectionService);\n\n ngOnInit(): void {\n this.initAITable();\n this.initService();\n this.buildFieldMenus();\n }\n\n initAITable() {\n this.aiTable = createAITable(this.aiRecords, this.aiFields);\n this.aiPlugins()?.forEach((plugin) => {\n this.aiTable = plugin(this.aiTable);\n });\n this.aiTableInitialized.emit(this.aiTable);\n }\n\n initService() {\n this.aiTableGridEventService.initialize(this.aiTable, this.aiFieldConfig()?.fieldPropertyEditor);\n this.aiTableGridSelectionService.initialize(this.aiTable);\n this.aiTableGridEventService.registerEvents(this.elementRef.nativeElement);\n this.aiTableGridFieldService.initAIFieldConfig(this.aiFieldConfig());\n AI_TABLE_GRID_FIELD_SERVICE_MAP.set(this.aiTable, this.aiTableGridFieldService);\n }\n\n buildFieldMenus() {\n this.fieldMenus = this.aiFieldConfig()?.fieldMenus || [];\n }\n\n addRecord() {\n const records = this.gridData().records;\n const recordCount = records.length;\n this.aiAddRecord.emit({\n originId: recordCount > 0 ? records[records.length - 1]._id : ''\n });\n }\n\n selectRecord(recordId: string) {\n this.aiTableGridSelectionService.selectRecord(recordId);\n }\n\n toggleSelectAll(checked: boolean) {\n this.aiTableGridSelectionService.toggleSelectAll(checked);\n }\n\n addField(gridColumnBlank?: HTMLElement, position?: { x: number; y: number }) {\n const field = createDefaultField(this.aiTable, AITableFieldType.text);\n const popoverRef = this.aiTableGridFieldService.editFieldProperty(this.aiTable, {\n field,\n isUpdate: false,\n origin: gridColumnBlank!,\n position\n });\n if (popoverRef && !this.aiFieldConfig()?.fieldPropertyEditor) {\n (popoverRef.componentInstance as AITableFieldPropertyEditor).addField.subscribe((defaultValue) => {\n const fields = this.gridData().fields;\n const fieldCount = fields.length;\n this.aiAddField.emit({\n originId: fieldCount > 0 ? fields[fields.length - 1]._id : '',\n defaultValue\n });\n });\n }\n }\n\n public subscribeEvents() {\n this.ngZone.runOutsideAngular(() => {\n this.aiTableGridEventService.dblClickEvent$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n this.dblClick(event);\n });\n this.aiTableGridEventService.mousedownEvent$\n .pipe(mergeWith(this.aiTableGridEventService.globalMousedownEvent$), takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.aiTableGridSelectionService.updateSelect(event);\n });\n\n this.aiTableGridEventService.mouseoverEvent$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n this.mouseoverHandle(event);\n });\n this.aiTableGridEventService.globalMouseoverEvent$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n this.closeHoverCellEditor(event);\n });\n });\n }\n\n private dblClick(event: MouseEvent) {\n const cellDom = (event.target as HTMLElement).closest('.grid-cell') as HTMLElement;\n const type = cellDom && (cellDom.getAttribute('type')! as AITableFieldType);\n if (type && DBL_CLICK_EDIT_TYPE.includes(type)) {\n this.aiTableGridEventService.openEdit(cellDom);\n }\n }\n\n private mouseoverHandle(event: MouseEvent) {\n if (this.mouseoverRef) {\n this.mouseoverRef?.close();\n }\n const cellDom = (event.target as HTMLElement).closest('.grid-cell') as HTMLElement;\n const type = cellDom && (cellDom.getAttribute('type')! as AITableFieldType);\n if (type && MOUSEOVER_EDIT_TYPE.includes(type)) {\n this.mouseoverRef = this.aiTableGridEventService.openEdit(cellDom);\n }\n }\n\n private closeHoverCellEditor(e: MouseEvent) {\n if (this.mouseoverRef) {\n const hasGrid = e.target && (e.target as HTMLElement).closest('.ai-table-grid');\n const hasCellEditor = e.target && (e.target as HTMLElement).closest('.grid-cell-editor');\n if (!hasGrid && !hasCellEditor) {\n this.mouseoverRef.close();\n }\n }\n }\n}\n","import { CommonModule, NgClass, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyAction } from 'ngx-tethys/action';\nimport { ThyAvatarModule } from 'ngx-tethys/avatar';\nimport { ThyCheckboxModule } from 'ngx-tethys/checkbox';\nimport { ThyDatePickerFormatPipe } from 'ngx-tethys/date-picker';\nimport { ThyDropdownDirective, ThyDropdownMenuComponent } from 'ngx-tethys/dropdown';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\nimport { ThyProgress } from 'ngx-tethys/progress';\nimport { ThyRate } from 'ngx-tethys/rate';\nimport { ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { ThyTag } from 'ngx-tethys/tag';\nimport { ProgressEditorComponent, SelectOptionComponent } from './components';\nimport { FieldMenu } from './components/field-menu/field-menu.component';\nimport { AITableFieldPropertyEditor } from './components/field-property-editor/field-property-editor.component';\nimport { AITableField } from './core';\nimport { AITableGridBase } from './grid-base.component';\nimport { IsSelectRecordPipe, MemberSettingPipe, SelectOptionPipe, SelectOptionsPipe, SelectSettingPipe, UserPipe } from './pipes/grid.pipe';\nimport { AITableGridEventService } from './services/event.service';\nimport { AITableGridFieldService } from './services/field.service';\nimport { AITableGridSelectionService } from './services/selection.service';\nimport { buildGridData } from './utils';\n\n@Component({\n selector: 'ai-table-dom-grid',\n templateUrl: './dom-grid.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ai-table-grid ai-table-dom-grid'\n },\n imports: [\n NgClass,\n NgComponentOutlet,\n CommonModule,\n FormsModule,\n SelectOptionPipe,\n SelectOptionsPipe,\n ThyTag,\n ThyPopoverModule,\n ThyIcon,\n ThyRate,\n ThyProgress,\n AITableFieldPropertyEditor,\n ThyDatePickerFormatPipe,\n ThyFlexibleText,\n ThyStopPropagationDirective,\n FieldMenu,\n ThyAction,\n ThyDropdownDirective,\n ThyDropdownMenuComponent,\n ThyCheckboxModule,\n ProgressEditorComponent,\n ThyAvatarModule,\n NgTemplateOutlet,\n IsSelectRecordPipe,\n ProgressEditorComponent,\n SelectOptionComponent,\n UserPipe,\n SelectSettingPipe,\n MemberSettingPipe\n ],\n providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService]\n})\nexport class AITableDomGrid extends AITableGridBase implements OnInit {\n override ngOnInit(): void {\n super.ngOnInit();\n this.subscribeEvents();\n }\n\n openFieldMenu(e: Event, field: AITableField, fieldAction: HTMLElement) {\n const moreBtn = (e.target as HTMLElement)!.closest('.grid-field-action');\n this.aiTableGridFieldService.openFieldMenu(this.aiTable, {\n origin: moreBtn,\n editOrigin: fieldAction,\n fieldId: field._id,\n fieldMenus: this.fieldMenus\n });\n }\n}\n","<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n href=\"javascript:;\"\n class=\"grid-field-action\"\n thyAction\n thyIcon=\"more-vertical\"\n (click)=\"openFieldMenu($event, field, fieldAction)\"\n >\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n #cell\n class=\"grid-cell\"\n [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @let fieldValue = record.values[field._id];\n @let settings = field.settings! | selectSetting;\n @let options = settings['options'];\n @let optionStyle = settings['option_style'] || AITableSelectOptionStyle.tag;\n @let isTagStyle = optionStyle === AITableSelectOptionStyle.tag;\n\n @if (!settings['is_multiple'] && fieldValue | selectOption: options; as selectedOption) {\n @if (isTagStyle) {\n <select-option class=\"mb-1 mr-1\" [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n </div>\n }\n } @else {\n @let maxShowCount = 2;\n\n <div class=\"d-flex\">\n @if (fieldValue | selectOptions: options; as selectedOptions) {\n @for (option of selectedOptions; track option!._id; let i = $index) {\n @if (i + 1 <= maxShowCount) {\n @if (isTagStyle) {\n <select-option\n class=\"mb-1 mr-1\"\n [field]=\"field\"\n [displayOption]=\"option!\"\n ></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"option!\"></select-option>\n </div>\n }\n }\n }\n\n @let selectedLength = selectedOptions.length || 0;\n @if (selectedOptions && maxShowCount < selectedLength) {\n @let shape = isTagStyle ? 'pill' : 'rectangle';\n @let isHidden = maxShowCount >= selectedLength;\n\n <thy-tag\n class=\"cursor-pointer\"\n [class.multi-property-value-hidden]=\"isHidden\"\n [thyShape]=\"shape\"\n >\n <span class=\"text-truncate\"> +{{ selectedLength - maxShowCount }} </span>\n </thy-tag>\n }\n }\n </div>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id].timestamp | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id] || 0\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] || 0 }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @let settings = field.settings! | memberSetting;\n\n @if (!settings!['is_multiple']) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n } @else {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of recordValues; track $index) {\n <thy-avatar [thyName]=\"item.display_name!\" [thySrc]=\"item.avatar!\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @case (AITableFieldType.updatedBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>\n","import { InjectionToken } from '@angular/core';\n\nexport const KO_CONTAINER_TOKEN = new InjectionToken<any>('KO_CONTAINER_TOKEN');\n","import Konva from 'konva';\nimport Node = Konva.Node;\n\nexport default function updatePicture(node: Node) {\n const drawingNode = node.getLayer() || node.getStage();\n if (drawingNode) {\n drawingNode.batchDraw();\n }\n}\n","// adapted FROM: https://github.com/lavrton/react-konva/blob/master/src/react-konva-fiber.js\n\nimport { KonvaEventObject } from 'konva/lib/Node';\nimport { KoComponent } from '../interfaces/component';\nimport { KoEventObject } from '../interfaces/event-object';\nimport { KoPropsType } from './types';\nimport updatePicture from './update-picture';\n\nexport default function applyNodeProps(component: KoComponent, props: KoPropsType = {}, oldProps: KoPropsType = {}): void {\n if ('id' in props) {\n const message = `You are using \"id\" attribute for Konva node. In some very rare cases it may produce bugs. Currently we recommend not to use it and use \"name\" attribute instead.`;\n console.warn(message);\n }\n\n const instance = component.getNode();\n const updatedProps: KoPropsType = {};\n let hasUpdates = false;\n\n Object.keys(oldProps).forEach((key) => {\n const isEvent = key.slice(0, 2) === 'ko';\n const propChanged = oldProps[key] !== props[key];\n if (isEvent && propChanged) {\n let eventName = key.slice(2).toLowerCase();\n if (eventName.slice(0, 7) === 'content') {\n eventName = 'content' + eventName.slice(7, 8).toUpperCase() + eventName.slice(8);\n }\n instance.off(eventName, oldProps[key]);\n }\n const toRemove = !Object.hasOwn(props, key);\n if (toRemove) {\n instance.setAttr(key, undefined);\n }\n });\n Object.keys(props).forEach((key) => {\n const isEvent = key.slice(0, 2) === 'ko';\n const toAdd = oldProps[key] !== props[key];\n if (isEvent && toAdd) {\n let eventName = key.slice(2).toLowerCase();\n if (eventName.slice(0, 7) === 'content') {\n eventName = 'content' + eventName.slice(7, 8).toUpperCase() + eventName.slice(8);\n }\n if (props[key]) {\n instance.off(eventName);\n instance.on(eventName, (event: KonvaEventObject<unknown>) => {\n props[key]({\n angularComponent: component,\n event\n } as KoEventObject<unknown>);\n });\n }\n }\n if (!isEvent && (props[key] !== oldProps[key] || props[key] !== instance.getAttr(key))) {\n hasUpdates = true;\n updatedProps[key] = props[key];\n }\n });\n\n if (hasUpdates) {\n instance.setAttrs(updatedProps);\n updatePicture(instance);\n let val;\n Object.keys(updatedProps).forEach((prop) => {\n val = updatedProps[prop];\n if (val instanceof Image && !val.complete) {\n const node = instance;\n val.addEventListener('load', function () {\n const layer = node.getLayer();\n if (layer) {\n layer.batchDraw();\n }\n });\n }\n });\n }\n}\n","import { EventEmitter } from '@angular/core';\nimport { KoComponent } from '../interfaces/component';\nimport applyNodeProps from './apply-node-props';\nimport { KoListenerRecord } from './types';\nimport updatePicture from './update-picture';\n\nfunction camelize(str: string): string {\n return str\n .replace(/^\\w|[A-Z]|\\b\\w/g, function (letter, index) {\n return index == 0 ? letter.toLowerCase() : letter.toUpperCase();\n })\n .replace(/\\s+/g, '');\n}\n\nfunction capitalizeFirstLetter(string: string): string {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function getName(componentTag: string): string {\n return capitalizeFirstLetter(camelize(componentTag.slice(3).replace('-', ' ')));\n}\n\nexport function createListener(instance: KoComponent): KoListenerRecord {\n const output: KoListenerRecord = {};\n [\n 'koMouseover',\n 'koMousemove',\n 'koMouseout',\n 'koMouseenter',\n 'koMouseleave',\n 'koMousedown',\n 'koMouseup',\n 'koWheel',\n 'koContextmenu',\n 'koClick',\n 'koDblclick',\n 'koTouchstart',\n 'koTouchmove',\n 'koTouchend',\n 'koTap',\n 'koDbltap',\n 'koDragstart',\n 'koDragmove',\n 'koDragend'\n ].forEach((eventName) => {\n const name: keyof KoComponent = <keyof KoComponent>eventName;\n\n const eventEmitter: EventEmitter<unknown> = <EventEmitter<unknown>>instance[name];\n if (eventEmitter.observed) {\n output[eventName] = eventEmitter.emit.bind(eventEmitter);\n }\n });\n return output;\n}\n\nexport { applyNodeProps, updatePicture };\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n OnDestroy,\n OnInit,\n Output,\n effect,\n inject,\n input\n} from '@angular/core';\nimport Konva from 'konva';\nimport { FastLayer } from 'konva/lib/FastLayer';\nimport { Group } from 'konva/lib/Group';\nimport { Layer } from 'konva/lib/Layer';\nimport { Shape } from 'konva/lib/Shape';\nimport { Arc } from 'konva/lib/shapes/Arc';\nimport { Arrow } from 'konva/lib/shapes/Arrow';\nimport { Circle } from 'konva/lib/shapes/Circle';\nimport { Ellipse } from 'konva/lib/shapes/Ellipse';\nimport { Image } from 'konva/lib/shapes/Image';\nimport { Label, Tag } from 'konva/lib/shapes/Label';\nimport { Line } from 'konva/lib/shapes/Line';\nimport { Path } from 'konva/lib/shapes/Path';\nimport { Rect } from 'konva/lib/shapes/Rect';\nimport { RegularPolygon } from 'konva/lib/shapes/RegularPolygon';\nimport { Ring } from 'konva/lib/shapes/Ring';\nimport { Sprite, SpriteConfig } from 'konva/lib/shapes/Sprite';\nimport { Star } from 'konva/lib/shapes/Star';\nimport { Text } from 'konva/lib/shapes/Text';\nimport { TextPath } from 'konva/lib/shapes/TextPath';\nimport { Transformer } from 'konva/lib/shapes/Transformer';\nimport { Wedge } from 'konva/lib/shapes/Wedge';\nimport { KoComponent, KoEventObject, KoShapeConfigTypes, KoShapeTypes } from '../interfaces';\nimport { applyNodeProps, createListener, getName, updatePicture } from '../utils';\nimport { KO_CONTAINER_TOKEN } from './container.token';\n\n@Component({\n selector:\n 'ko-shape, ko-circle, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer',\n standalone: true,\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KoShape implements OnInit, AfterViewInit, OnDestroy, KoComponent {\n config = input<KoShapeConfigTypes>();\n\n @Output() koMouseover = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMousemove = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseout = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseenter = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseleave = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMousedown = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseup = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koWheel = new EventEmitter<KoEventObject<WheelEvent>>();\n\n @Output() koContextmenu = new EventEmitter<KoEventObject<PointerEvent>>();\n\n @Output() koClick = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDblclick = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koTouchstart = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTouchmove = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTouchend = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTap = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koDbltap = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koDragstart = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDragmove = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDragend = new EventEmitter<KoEventObject<MouseEvent>>();\n\n private elementRef = inject(ElementRef<HTMLElement>);\n\n private container = inject(KO_CONTAINER_TOKEN, { skipSelf: true });\n\n private cacheProps: KoShapeConfigTypes = {};\n\n private nameNode: keyof typeof KoShapeTypes | 'Shape' | 'Sprite' = getName(this.elementRef.nativeElement.localName) as\n | keyof typeof KoShapeTypes\n | 'Shape'\n | 'Sprite';\n\n private _node!:\n | Shape\n | Arc\n | Arrow\n | Circle\n | Ellipse\n | Image\n | Label\n | Tag\n | Line\n | Path\n | Rect\n | RegularPolygon\n | Ring\n | Sprite\n | Star\n | Text\n | TextPath\n | Transformer\n | Wedge\n | Group\n | Layer\n | FastLayer;\n\n constructor() {\n effect(() => {\n if (this.config()) {\n this.updateNode(this.config()!);\n }\n });\n }\n\n public getNode():\n | Shape\n | Arc\n | Arrow\n | Circle\n | Ellipse\n | Image\n | Label\n | Tag\n | Line\n | Path\n | Rect\n | RegularPolygon\n | Ring\n | Sprite\n | Star\n | Text\n | TextPath\n | Transformer\n | Wedge\n | Group\n | Layer\n | FastLayer {\n return this._node;\n }\n\n ngOnInit(): void {\n this.initKonva();\n }\n\n private initKonva(): void {\n if (!this._node) {\n this._node = new Shape();\n }\n if (this.nameNode === 'Shape') {\n this._node = new Shape();\n } else if (this.nameNode === 'Sprite') {\n this._node = new Sprite(this.config() as SpriteConfig);\n } else {\n this._node = new Konva[this.nameNode](undefined);\n }\n\n const animationStage = this._node.to.bind(this._node);\n this._node.to = (newConfig: KoShapeConfigTypes): void => {\n animationStage(newConfig);\n setTimeout(() => {\n Object.keys(this._node.attrs).forEach((key) => {\n if (typeof this._node.attrs[key] !== 'function') {\n this.config()![key] = this._node.attrs[key];\n }\n });\n }, 200);\n };\n\n if (this.config()) {\n this.updateNode(this.config()!);\n }\n }\n\n private updateNode(config: KoShapeConfigTypes): void {\n if (!this._node) return;\n const props = {\n ...config,\n ...createListener(this)\n };\n applyNodeProps(this, props, this.cacheProps);\n this.cacheProps = props;\n }\n\n ngAfterViewInit(): void {\n const container = this.container.getNode();\n container.add(<Layer>this.getNode());\n updatePicture(this.container.getNode());\n }\n\n ngOnDestroy(): void {\n this._node?.destroy();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { KO_CONTAINER_TOKEN } from './container.token';\nimport { KoShape } from './shape.component';\n\n@Component({\n selector: 'ko-layer, ko-fastlayer, ko-group',\n standalone: true,\n template: `<ng-content></ng-content>`,\n providers: [\n {\n provide: KO_CONTAINER_TOKEN,\n useExisting: KoContainer\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KoContainer extends KoShape {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n OnDestroy,\n OnInit,\n Output,\n effect,\n inject,\n input\n} from '@angular/core';\nimport { ContainerConfig } from 'konva/lib/Container';\nimport { Stage } from 'konva/lib/Stage';\nimport { KoEventObject, KoShapeConfigTypes } from '../interfaces';\nimport { KoComponent } from '../interfaces/component';\nimport { applyNodeProps, createListener } from '../utils';\nimport { KO_CONTAINER_TOKEN } from './container.token';\n\n@Component({\n selector: 'ko-stage',\n standalone: true,\n template: `<ng-content></ng-content>`,\n providers: [\n {\n provide: KO_CONTAINER_TOKEN,\n useExisting: KoStage\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KoStage implements KoComponent, OnInit, OnDestroy {\n config = input<ContainerConfig>();\n\n @Output() koMouseover = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMousemove = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseout = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseenter = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseleave = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMousedown = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseup = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koWheel = new EventEmitter<KoEventObject<WheelEvent>>();\n\n @Output() koContextmenu = new EventEmitter<KoEventObject<PointerEvent>>();\n\n @Output() koClick = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDblclick = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koTouchstart = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTouchmove = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTouchend = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTap = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koDbltap = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koDragstart = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDragmove = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDragend = new EventEmitter<KoEventObject<MouseEvent>>();\n\n private _stage!: Stage;\n\n private cacheProps: KoShapeConfigTypes = {};\n\n private nodeContainer = inject(ElementRef).nativeElement;\n\n constructor() {\n effect(() => {\n if (this.config()) {\n if (!this._stage) {\n this.initStage();\n }\n this.updateNode(this.config()!);\n }\n });\n }\n\n ngOnInit() {\n this.initStage();\n }\n\n public getNode(): Stage {\n return this._stage;\n }\n\n private initStage(): void {\n this._stage = new Stage({\n ...this.config(),\n container: this.nodeContainer\n });\n }\n\n private updateNode(config: ContainerConfig): void {\n const props = {\n ...config,\n ...createListener(this)\n };\n applyNodeProps(this, props, this.cacheProps);\n this.cacheProps = props;\n }\n\n ngOnDestroy(): void {\n this._stage?.destroy();\n }\n}\n","import { Component, EventEmitter } from '@angular/core';\nimport { FastLayer } from 'konva/lib/FastLayer';\nimport { Group } from 'konva/lib/Group';\nimport { Layer } from 'konva/lib/Layer';\nimport { Shape } from 'konva/lib/Shape';\nimport { Arc } from 'konva/lib/shapes/Arc';\nimport { Arrow } from 'konva/lib/shapes/Arrow';\nimport { Circle } from 'konva/lib/shapes/Circle';\nimport { Ellipse } from 'konva/lib/shapes/Ellipse';\nimport { Image } from 'konva/lib/shapes/Image';\nimport { Label, Tag } from 'konva/lib/shapes/Label';\nimport { Line } from 'konva/lib/shapes/Line';\nimport { Path } from 'konva/lib/shapes/Path';\nimport { Rect } from 'konva/lib/shapes/Rect';\nimport { RegularPolygon } from 'konva/lib/shapes/RegularPolygon';\nimport { Ring } from 'konva/lib/shapes/Ring';\nimport { Sprite } from 'konva/lib/shapes/Sprite';\nimport { Star } from 'konva/lib/shapes/Star';\nimport { Text } from 'konva/lib/shapes/Text';\nimport { TextPath } from 'konva/lib/shapes/TextPath';\nimport { Transformer } from 'konva/lib/shapes/Transformer';\nimport { Wedge } from 'konva/lib/shapes/Wedge';\nimport { Stage } from 'konva/lib/Stage';\nimport { KoShapeConfigTypes } from './config';\nimport { KoEventObject } from './event-object';\n\nexport abstract class KoComponent extends Component {\n config!: KoShapeConfigTypes;\n\n koMouseover?: EventEmitter<KoEventObject<MouseEvent>>;\n koMousemove?: EventEmitter<KoEventObject<MouseEvent>>;\n koMouseout?: EventEmitter<KoEventObject<MouseEvent>>;\n koMouseenter?: EventEmitter<KoEventObject<MouseEvent>>;\n koMouseleave?: EventEmitter<KoEventObject<MouseEvent>>;\n koMousedown?: EventEmitter<KoEventObject<MouseEvent>>;\n koMouseup?: EventEmitter<KoEventObject<MouseEvent>>;\n koWheel?: EventEmitter<KoEventObject<WheelEvent>>;\n koContextmenu?: EventEmitter<KoEventObject<PointerEvent>>;\n koClick?: EventEmitter<KoEventObject<MouseEvent>>;\n koDblclick?: EventEmitter<KoEventObject<MouseEvent>>;\n koTouchstart?: EventEmitter<KoEventObject<TouchEvent>>;\n koTouchmove?: EventEmitter<KoEventObject<TouchEvent>>;\n koTouchend?: EventEmitter<KoEventObject<TouchEvent>>;\n koTap?: EventEmitter<KoEventObject<TouchEvent>>;\n koDbltap?: EventEmitter<KoEventObject<TouchEvent>>;\n koDragstart?: EventEmitter<KoEventObject<MouseEvent>>;\n koDragmove?: EventEmitter<KoEventObject<MouseEvent>>;\n koDragend?: EventEmitter<KoEventObject<MouseEvent>>;\n\n getNode!: () =>\n | Stage\n | Shape\n | Arc\n | Arrow\n | Circle\n | Ellipse\n | Image\n | Label\n | Tag\n | Line\n | Path\n | Rect\n | RegularPolygon\n | Ring\n | Sprite\n | Star\n | Text\n | TextPath\n | Transformer\n | Wedge\n | Group\n | Layer\n | FastLayer;\n}\n","import { FastLayer } from 'konva/lib/FastLayer';\nimport { Group } from 'konva/lib/Group';\nimport { Layer } from 'konva/lib/Layer';\nimport { Arc } from 'konva/lib/shapes/Arc';\nimport { Arrow } from 'konva/lib/shapes/Arrow';\nimport { Circle } from 'konva/lib/shapes/Circle';\nimport { Ellipse } from 'konva/lib/shapes/Ellipse';\nimport { Image } from 'konva/lib/shapes/Image';\nimport { Label, Tag } from 'konva/lib/shapes/Label';\nimport { Line } from 'konva/lib/shapes/Line';\nimport { Path } from 'konva/lib/shapes/Path';\nimport { Rect } from 'konva/lib/shapes/Rect';\nimport { RegularPolygon } from 'konva/lib/shapes/RegularPolygon';\nimport { Ring } from 'konva/lib/shapes/Ring';\nimport { Star } from 'konva/lib/shapes/Star';\nimport { Text } from 'konva/lib/shapes/Text';\nimport { TextPath } from 'konva/lib/shapes/TextPath';\nimport { Transformer } from 'konva/lib/shapes/Transformer';\nimport { Wedge } from 'konva/lib/shapes/Wedge';\n\nexport const KoShapeTypes = {\n Arc,\n Arrow,\n Circle,\n Ellipse,\n Image,\n Label,\n Tag,\n Line,\n Path,\n Rect,\n RegularPolygon,\n Ring,\n Star,\n Text,\n TextPath,\n Transformer,\n Wedge,\n Group,\n Layer,\n FastLayer\n};\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { StageConfig } from 'konva/lib/Stage';\nimport { KoContainer } from '../../angular-konva';\nimport { KoShape } from '../../angular-konva/components/shape.component';\nimport { Check, Colors, DEFAULT_ICON_SIZE, Unchecked } from '../../constants';\nimport { AITableCheckType, AITableIconConfig } from '../../types';\n\n@Component({\n selector: 'ai-table-icon',\n template: `\n <ko-group [config]=\"groupConfig()\">\n <ko-rect [config]=\"squareShapeConfig()\"></ko-rect>\n <ko-path [config]=\"iconConfig()\"></ko-path>\n </ko-group>\n `,\n standalone: true,\n imports: [KoContainer, KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableIcon {\n config = input.required<AITableIconConfig>();\n\n groupConfig = computed<Partial<StageConfig>>(() => {\n const { x, y, listening } = this.config();\n return { x, y, listening };\n });\n\n squareShapeConfig = computed(() => {\n const {\n name,\n backgroundWidth,\n backgroundHeight,\n size = DEFAULT_ICON_SIZE,\n strokeWidth = 1,\n background,\n cornerRadius,\n opacity\n } = this.config();\n return {\n name,\n width: backgroundWidth || size,\n height: backgroundHeight || size,\n strokeWidth: strokeWidth,\n fill: background || Colors.transparent,\n cornerRadius,\n opacity\n };\n });\n\n iconConfig = computed(() => {\n const {\n type,\n data,\n backgroundWidth,\n backgroundHeight,\n size = DEFAULT_ICON_SIZE,\n stroke,\n strokeWidth = 1,\n scaleX,\n scaleY,\n offsetX,\n offsetY,\n rotation,\n fill = Colors.gray600,\n transformsEnabled = 'position'\n } = this.config();\n\n let pathData = data;\n\n switch (type) {\n case AITableCheckType.checked:\n pathData = Check;\n break;\n case AITableCheckType.unchecked:\n pathData = Unchecked;\n break;\n }\n\n return {\n x: backgroundWidth && (backgroundWidth - size * (scaleX || 1)) / 2,\n y: backgroundHeight && (backgroundHeight - size * (scaleY || 1)) / 2,\n data: pathData,\n width: size,\n height: size,\n fill,\n offsetX,\n offsetY,\n scaleX,\n scaleY,\n rotation,\n stroke,\n strokeWidth,\n transformsEnabled,\n perfectDrawEnabled: false,\n listening: false\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { StageConfig } from 'konva/lib/Stage';\nimport { KoContainer, KoShape } from '../../angular-konva';\nimport {\n AddOutlinedPath,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_ADD_BUTTON,\n AI_TABLE_FIELD_ADD_BUTTON_WIDTH,\n AI_TABLE_ICON_COMMON_SIZE,\n AI_TABLE_OFFSET,\n Colors\n} from '../../constants';\nimport { AITableAddFieldConfig, AITableIconConfig } from '../../types';\nimport { generateTargetName } from '../../utils';\nimport { AITableIcon } from './icon.component';\n\n@Component({\n selector: 'ai-table-add-field',\n template: `\n <ko-group [config]=\"{ x: x() }\">\n <ko-group>\n <ko-rect [config]=\"rectConfig()\"></ko-rect>\n </ko-group>\n <ko-group>\n <ai-table-icon [config]=\"addIconConfig()\"></ai-table-icon>\n </ko-group>\n </ko-group>\n `,\n standalone: true,\n imports: [KoContainer, KoShape, AITableIcon],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableAddField {\n config = input.required<AITableAddFieldConfig>();\n\n btnWidth = AI_TABLE_FIELD_ADD_BUTTON_WIDTH;\n\n x = computed(() => {\n const lastColumnWidth = this.config().coordinate.getColumnWidth(this.config().columnStopIndex);\n const lastColumnOffset = this.config().coordinate.getColumnOffset(this.config().columnStopIndex);\n return lastColumnWidth + lastColumnOffset;\n });\n\n rectConfig = computed<Partial<StageConfig>>(() => {\n const { targetName } = this.config().pointPosition;\n const fill = targetName === AI_TABLE_FIELD_ADD_BUTTON ? Colors.gray80 : Colors.white;\n return {\n name: generateTargetName({\n targetName: AI_TABLE_FIELD_ADD_BUTTON,\n fieldId: this.config().fields[this.config().columnStopIndex]._id,\n mouseStyle: 'pointer'\n }),\n x: AI_TABLE_OFFSET,\n y: AI_TABLE_OFFSET,\n width:\n this.config().coordinate.containerWidth - this.x() < this.btnWidth\n ? this.btnWidth\n : this.config().coordinate.containerWidth - this.x(),\n height: this.config().coordinate.rowInitSize,\n stroke: Colors.gray200,\n strokeWidth: 1,\n listening: true,\n fill\n };\n });\n\n addIconConfig = computed<AITableIconConfig>(() => {\n const offsetY = (this.config().coordinate.rowInitSize - AI_TABLE_ICON_COMMON_SIZE) / 2;\n return {\n x: AI_TABLE_CELL_PADDING,\n y: offsetY,\n data: AddOutlinedPath,\n fill: Colors.gray600,\n listening: false\n };\n });\n}\n","import GraphemeSplitter from 'grapheme-splitter';\nimport {\n AI_TABLE_OFFSET,\n AI_TABLE_TAG_FONT_SIZE,\n AI_TABLE_TAG_PADDING,\n DEFAULT_FONT_FAMILY,\n DEFAULT_FONT_SIZE,\n DEFAULT_FONT_WEIGHT,\n DEFAULT_TEXT_ALIGN_CENTER,\n DEFAULT_TEXT_ALIGN_LEFT,\n DEFAULT_TEXT_DECORATION,\n DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n DEFAULT_TEXT_VERTICAL_ALIGN_TOP,\n DEFAULT_WRAP_TEXT_MAX_ROW,\n FONT_SIZE_SM,\n WebOutlinedPath\n} from '../../constants';\nimport { AITable } from '../../core';\nimport {\n AITableArc,\n AITableAvatarSize,\n AITableAvatarType,\n AITableCtxStyle,\n AITableImage,\n AITableLabel,\n AITableLine,\n AITableRect,\n AITableText,\n AITableTextEllipsis,\n AITableWrapText,\n AITableWrapTextData\n} from '../../types';\nimport { getTextWidth, imageCache, textDataCache, TextMeasure } from '../../utils';\n\n// 用于正确地分割字符串,包括表情符号\nexport const graphemeSplitter = new GraphemeSplitter();\n\n/**\n * 用于在 Canvas 上进行的各种绘图操作,包含了文本绘制、矩形绘制、路径绘制以及一些几何计算等功能\n */\nexport class Drawer {\n ctx: CanvasRenderingContext2D = TextMeasure().context!;\n needDraw = false;\n colors = AITable.getColors();\n\n public initCtx(ctx: CanvasRenderingContext2D) {\n this.needDraw = Boolean(ctx);\n this.ctx = ctx || TextMeasure().context!;\n /**\n * textBaseline 指定为 middle,兼容浏览器差异\n */\n this.ctx.textBaseline = DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE;\n }\n\n // 设置样式\n public setStyle(options: AITableCtxStyle) {\n const { fontSize, fontWeight, fillStyle, strokeStyle } = options;\n\n if (fontSize || fontWeight) {\n this.ctx.font = `${fontWeight || DEFAULT_FONT_WEIGHT} ${fontSize || DEFAULT_FONT_SIZE}px ${DEFAULT_FONT_FAMILY}`;\n }\n if (fillStyle) {\n this.ctx.fillStyle = fillStyle;\n }\n if (strokeStyle) {\n this.ctx.strokeStyle = strokeStyle;\n }\n }\n\n // 文本省略\n public textEllipsis(options: AITableTextEllipsis) {\n const { text, maxWidth, fontSize = DEFAULT_FONT_SIZE, fontWeight = DEFAULT_FONT_WEIGHT } = options;\n\n if (text == null)\n return {\n text: '',\n textWidth: 0,\n isEllipsis: false\n };\n const fontStyle = `${fontWeight} ${fontSize}px ${DEFAULT_FONT_FAMILY}`;\n\n if (!maxWidth) {\n return {\n text,\n textWidth: getTextWidth(this.ctx, text, fontStyle),\n isEllipsis: false\n };\n }\n\n const ellipsis = '…';\n const textSize = text.length;\n // 预先确定传入文本的阈值宽度\n let guessSize = Math.ceil(maxWidth / fontSize);\n let guessText = text.substr(0, guessSize);\n let guessWidth = getTextWidth(this.ctx, guessText, fontStyle);\n\n while (guessWidth <= maxWidth) {\n if (textSize <= guessSize) {\n return {\n text,\n textWidth: guessWidth,\n isEllipsis: false\n };\n }\n guessSize++;\n guessText = text.substr(0, guessSize);\n guessWidth = getTextWidth(this.ctx, guessText, fontStyle);\n }\n\n const ellipsisWidth = getTextWidth(this.ctx, ellipsis, fontStyle);\n while (guessSize >= 0 && guessWidth + ellipsisWidth > maxWidth) {\n guessSize--;\n guessText = text.substr(0, guessSize);\n guessWidth = getTextWidth(this.ctx, guessText, fontStyle);\n }\n\n return {\n text: `${guessText || text[0]}${ellipsis}`,\n textWidth: maxWidth,\n isEllipsis: true\n };\n }\n\n // 绘制线段\n public line(options: AITableLine) {\n const { x, y, points, stroke, closed = false } = options;\n const length = points.length;\n\n this.ctx.save();\n this.ctx.beginPath();\n if (stroke) this.ctx.strokeStyle = stroke;\n this.ctx.lineWidth = 1;\n this.ctx.translate(x, y);\n this.ctx.moveTo(points[0], points[1]);\n\n for (let n = 2; n < length; n += 2) {\n this.ctx.lineTo(points[n], points[n + 1]);\n }\n\n if (closed) {\n this.ctx.closePath();\n }\n this.ctx.stroke();\n this.ctx.restore();\n }\n\n // 绘制圆\n public arc(options: AITableArc) {\n const { x, y, stroke, fill, radius } = options;\n this.ctx.beginPath();\n if (fill) this.setStyle({ fillStyle: fill });\n if (stroke) this.setStyle({ strokeStyle: stroke });\n this.ctx.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (fill) {\n this.ctx.fill();\n }\n if (stroke) {\n this.ctx.stroke();\n }\n }\n\n // 绘制矩形\n public rect(options: AITableRect) {\n const { x, y, width, height, radius, fill, stroke } = options;\n\n this.ctx.beginPath();\n if (fill) this.setStyle({ fillStyle: fill });\n if (stroke) this.setStyle({ strokeStyle: stroke });\n\n if (!radius) {\n this.ctx.rect(x, y, width, height);\n } else {\n let topLeft = 0;\n let topRight = 0;\n let bottomLeft = 0;\n let bottomRight = 0;\n\n if (typeof radius === 'number') {\n topLeft = topRight = bottomLeft = bottomRight = Math.min(radius, width / 2, height / 2);\n } else {\n topLeft = Math.min(radius[0] || 0, width / 2, height / 2);\n topRight = Math.min(radius[1] || 0, width / 2, height / 2);\n bottomRight = Math.min(radius[2] || 0, width / 2, height / 2);\n bottomLeft = Math.min(radius[3] || 0, width / 2, height / 2);\n }\n\n this.ctx.moveTo(x + topLeft, y);\n this.ctx.lineTo(x + width - topRight, y);\n this.ctx.arc(x + width - topRight, y + topRight, topRight, (Math.PI * 3) / 2, 0, false);\n this.ctx.lineTo(x + width, y + height - bottomRight);\n this.ctx.arc(x + width - bottomRight, y + height - bottomRight, bottomRight, 0, Math.PI / 2, false);\n this.ctx.lineTo(x + bottomLeft, y + height);\n this.ctx.arc(x + bottomLeft, y + height - bottomLeft, bottomLeft, Math.PI / 2, Math.PI, false);\n this.ctx.lineTo(x, y + topLeft);\n this.ctx.arc(x + topLeft, y + topLeft, topLeft, Math.PI, (Math.PI * 3) / 2, false);\n }\n\n this.ctx.closePath();\n\n if (fill) {\n this.ctx.fill();\n }\n if (stroke) {\n this.ctx.stroke();\n }\n }\n\n public customRect(options: AITableRect) {\n const { x, y, width, height, fill, strokes } = options;\n if (fill) this.setStyle({ fillStyle: fill });\n this.ctx.fillRect(x, y, width, height);\n if (strokes) {\n const { top, right, bottom, left } = strokes;\n // 上边框\n this.ctx.beginPath();\n this.setStyle({ strokeStyle: top ?? this.colors.transparent });\n this.ctx.moveTo(x, y);\n this.ctx.lineTo(x + width, y);\n this.ctx.stroke();\n // 右边框\n this.ctx.beginPath();\n this.setStyle({ strokeStyle: right ?? this.colors.transparent });\n this.ctx.moveTo(x + width, y);\n this.ctx.lineTo(x + width, y + height);\n this.ctx.stroke();\n // 下边框\n this.ctx.beginPath();\n this.setStyle({ strokeStyle: bottom ?? this.colors.transparent });\n this.ctx.moveTo(x, y + height);\n this.ctx.lineTo(x + width, y + height);\n this.ctx.stroke();\n // 左边框\n this.ctx.beginPath();\n this.setStyle({ strokeStyle: left ?? this.colors.transparent });\n this.ctx.moveTo(x, y);\n this.ctx.lineTo(x, y + height);\n this.ctx.stroke();\n }\n }\n\n // 换行文本绘制\n public wrapText(options: AITableWrapText) {\n const {\n x,\n y,\n text,\n maxWidth,\n lineHeight,\n maxRow = DEFAULT_WRAP_TEXT_MAX_ROW,\n fontSize = DEFAULT_FONT_SIZE,\n fillStyle = this.colors.gray800,\n textAlign = DEFAULT_TEXT_ALIGN_LEFT,\n verticalAlign = DEFAULT_TEXT_VERTICAL_ALIGN_TOP,\n fontWeight = DEFAULT_FONT_WEIGHT,\n textDecoration = DEFAULT_TEXT_DECORATION,\n fieldType,\n needDraw = false\n } = options;\n let offsetX = 0;\n let offsetY = 0;\n const baselineOffset = verticalAlign === DEFAULT_TEXT_VERTICAL_ALIGN_TOP ? fontSize / 2 : 0;\n const fontStyle = `${fontWeight}-${fontSize}px`;\n const isUnderline = textDecoration === 'underline';\n const textRenderer = (textDataList: any[]) => {\n textDataList.forEach((data) => {\n const { offsetX, offsetY, text, width, linkUrl } = data;\n this.ctx.fillText(text, x + offsetX, y + offsetY + baselineOffset);\n if (linkUrl || isUnderline) {\n this.line({\n x: x + offsetX,\n y: y + offsetY + AI_TABLE_OFFSET,\n points: [0, fontSize, width, fontSize],\n stroke: fillStyle\n });\n }\n });\n };\n\n if (fillStyle) this.setStyle({ fillStyle });\n this.ctx.textAlign = textAlign;\n\n const cacheKey = `${fontStyle}-${maxRow}-${maxWidth || 0}-${fieldType}-${text}`;\n const cacheTextData = textDataCache.get(cacheKey);\n if (cacheTextData) {\n if (this.needDraw && needDraw) {\n textRenderer(cacheTextData.data);\n }\n return cacheTextData;\n }\n\n const resultData: AITableWrapTextData = [];\n // 准确切分包含表情符号的字符串\n const arrText = graphemeSplitter.splitGraphemes(text);\n const textLength = arrText.length;\n const ellipsisWidth = this.ctx.measureText('…').width;\n let showText = ''; // 每个片段显示的文本\n let showTextWidth = 0; // 每段的宽度\n let showLineWidth = 0; // 当前每行显示文字的宽度\n let rowCount = 0;\n\n const isEllipsis = this.textEllipsis({ text, maxWidth: maxWidth }).isEllipsis;\n\n for (let n = 0; n < textLength; n++) {\n const curText = arrText[n];\n const isLineBreak = ['\\n', '\\r'].includes(curText);\n const singleText = isLineBreak ? '' : curText;\n const composeText = showText + singleText;\n const isLimitRow = maxRow ? rowCount >= maxRow - 1 : false;\n const singleTextWidth = isLineBreak ? 0 : this.ctx.measureText(singleText).width;\n showLineWidth += singleTextWidth;\n const diffWidth = isLimitRow ? showLineWidth + (isEllipsis ? ellipsisWidth : 0) : showLineWidth;\n const isLineEnd = diffWidth > maxWidth;\n\n // 遇到换行符或行尾\n if ((isLineEnd || isLineBreak) && rowCount < maxRow) {\n const isLastLetter = n === arrText.length - 1;\n resultData.push({\n offsetX,\n offsetY,\n width: Math.ceil(showTextWidth),\n text: isLimitRow ? (isLastLetter ? composeText : `${showText}…`) : showText\n });\n showText = singleText;\n offsetX = 0;\n showTextWidth = singleTextWidth;\n showLineWidth = singleTextWidth;\n\n if (isLimitRow) {\n showText = '';\n break;\n }\n rowCount++;\n offsetY += lineHeight;\n continue;\n }\n\n showText = composeText;\n showTextWidth += singleTextWidth;\n }\n\n if (showText) {\n resultData.push({\n offsetX,\n offsetY,\n width: Math.ceil(showTextWidth),\n text: showText\n });\n }\n\n if (this.needDraw && needDraw) {\n textRenderer(resultData);\n }\n\n const res = {\n height: rowCount < maxRow ? offsetY + lineHeight : offsetY,\n data: resultData\n };\n\n textDataCache.set(cacheKey, res);\n return res;\n }\n\n // 绘制单行文本\n public text(options: AITableText) {\n const {\n x,\n y,\n text,\n fontSize = DEFAULT_FONT_SIZE,\n fillStyle = this.colors.gray800,\n textAlign = DEFAULT_TEXT_ALIGN_LEFT,\n verticalAlign = DEFAULT_TEXT_VERTICAL_ALIGN_TOP,\n fontWeight = DEFAULT_FONT_WEIGHT,\n textDecoration = DEFAULT_TEXT_DECORATION\n } = options;\n\n const fontStyle = `${fontWeight} ${fontSize}px ${DEFAULT_FONT_FAMILY}`;\n\n if (textDecoration === 'underline') {\n const textWidth = getTextWidth(this.ctx, text, fontStyle);\n this.line({\n x: x,\n y: y + AI_TABLE_OFFSET,\n points: [0, fontSize, textWidth, fontSize],\n stroke: fillStyle\n });\n }\n\n const baselineOffset = verticalAlign === DEFAULT_TEXT_VERTICAL_ALIGN_TOP ? fontSize / 2 : 0;\n if (fillStyle) this.setStyle({ fillStyle });\n this.ctx.textAlign = textAlign;\n this.ctx.font = fontStyle;\n this.ctx.fillText(text, x, y + baselineOffset);\n }\n\n // 绘制标签\n public tag(options: AITableLabel): { width: number; height: number } {\n const {\n x,\n y,\n width,\n height,\n text,\n radius,\n background,\n color = this.colors.gray800,\n fontSize = AI_TABLE_TAG_FONT_SIZE,\n fontWeight = DEFAULT_FONT_WEIGHT,\n stroke\n } = options;\n\n // 背景\n this.rect({\n x,\n y,\n width,\n height,\n radius,\n fill: background,\n stroke\n });\n\n this.text({\n x: x + AI_TABLE_TAG_PADDING,\n y: y + (height - fontSize) / 2,\n text,\n fillStyle: color,\n fontSize,\n fontWeight\n });\n\n return {\n width,\n height\n };\n }\n\n public image(options: AITableImage, crossOrigin?: boolean, allowDefault?: boolean) {\n const { x, y, url, width, height, opacity = 1, clipFunc } = options;\n const colors = AITable.getColors();\n if (!url) {\n return;\n }\n const image = imageCache.getImage(url);\n // Not loaded successfully\n if (image === false) {\n if (allowDefault) {\n this.path({\n x,\n y: y + 2,\n data: WebOutlinedPath,\n size: 16,\n fill: colors.gray600\n });\n }\n return;\n }\n // Unloaded\n if (image == null) {\n return imageCache.loadImage(url, url, { crossOrigin });\n }\n const isOrigin = opacity === 1;\n\n if (!clipFunc && isOrigin) {\n return this.ctx.drawImage(image, x, y, width, height);\n }\n\n if (!clipFunc && !isOrigin) {\n this.ctx.save();\n this.ctx.globalAlpha = opacity;\n this.ctx.drawImage(image, x, y, width, height);\n this.ctx.restore();\n return;\n }\n\n if (clipFunc) {\n this.ctx.save();\n this.ctx.beginPath();\n clipFunc(this.ctx);\n this.ctx.clip();\n this.ctx.globalAlpha = opacity;\n this.ctx.drawImage(image, x, y, width, height);\n this.ctx.restore();\n }\n }\n\n public avatar(options: {\n x: number;\n y: number;\n url: string;\n id: string;\n title: string;\n type?: AITableAvatarType;\n size?: AITableAvatarSize;\n opacity?: number;\n bgColor?: string;\n }) {\n const {\n x = 0,\n y = 0,\n id,\n url,\n title,\n bgColor = this.colors.white,\n size = AITableAvatarSize.size36,\n type = AITableAvatarType.member,\n opacity = 1\n } = options;\n\n if (title == null || id == null) return null;\n const colors = AITable.getColors();\n const avatarSrc = url || '';\n const avatarName = title;\n const avatarBg = avatarSrc ? colors.white : bgColor;\n\n switch (type) {\n case AITableAvatarType.member: {\n const radius = size / 2;\n if (!avatarSrc) {\n this.ctx.fillStyle = avatarBg;\n this.ctx.beginPath();\n this.ctx.arc(x + radius, y + radius, radius, 0, Math.PI * 2, false);\n this.ctx.closePath();\n this.ctx.fill();\n return this.text({\n x: x + radius,\n y: y + radius,\n text: avatarName,\n textAlign: DEFAULT_TEXT_ALIGN_CENTER,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n fontSize: FONT_SIZE_SM,\n fillStyle: colors.white\n });\n }\n return this.image({\n name: avatarSrc,\n x,\n y,\n url: avatarSrc,\n width: size,\n height: size,\n clipFunc: (ctx) => {\n ctx.fillStyle = avatarBg;\n ctx.arc(x + radius, y + radius, radius, 0, Math.PI * 2, false);\n ctx.fill();\n },\n opacity\n });\n }\n }\n }\n\n /**\n * 方法将椭圆弧的端点参数化形式转换为中心参数化形式\n * 接受弧线的端点参数,并计算出弧线的中心点坐标、起始角度、终止角度等参数\n * 返回值:一个包含中心点坐标、半径、旋转角度、起始角度以及角度差的对象,这些参数可以直接用于绘制椭圆弧\n * @returns [cx, cy, rx, ry, theta, dTheta, psi, fs]\n */\n private convertEndpointToCenterParameterization(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n fa: any,\n fs: number,\n rx: number,\n ry: number,\n psiDeg: number\n ) {\n const psi = psiDeg * (Math.PI / 180.0);\n const xp = (Math.cos(psi) * (x1 - x2)) / 2.0 + (Math.sin(psi) * (y1 - y2)) / 2.0;\n const yp = (-1 * Math.sin(psi) * (x1 - x2)) / 2.0 + (Math.cos(psi) * (y1 - y2)) / 2.0;\n\n const lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n let f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) / (rx * rx * (yp * yp) + ry * ry * (xp * xp)));\n\n if (fa === fs) {\n f *= -1;\n }\n if (isNaN(f)) {\n f = 0;\n }\n\n const cxp = (f * rx * yp) / ry;\n const cyp = (f * -ry * xp) / rx;\n\n const cx = (x1 + x2) / 2.0 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;\n const cy = (y1 + y2) / 2.0 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;\n\n const vMag = function (v: number[]) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n };\n const vRatio = function (u: number[], v: number[]) {\n return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n };\n const vAngle = function (u: number[], v: number[]) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n };\n const theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);\n const u = [(xp - cxp) / rx, (yp - cyp) / ry];\n const v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n let dTheta = vAngle(u, v);\n\n if (vRatio(u, v) <= -1) {\n dTheta = Math.PI;\n }\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n if (fs === 0 && dTheta > 0) {\n dTheta = dTheta - 2 * Math.PI;\n }\n if (fs === 1 && dTheta < 0) {\n dTheta = dTheta + 2 * Math.PI;\n }\n return [cx, cy, rx, ry, theta, dTheta, psi, fs];\n }\n\n /**\n * 计算两个点 (x1, y1) 和 (x2, y2) 之间的直线距离\n * @returns 两个点 (x1, y1) 和 (x2, y2) 之间的直线距离,单位与输入的坐标值相同\n */\n private getLineLength(x1: number, y1: number, x2: number, y2: number) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n }\n\n /**\n * 计算三次贝塞尔曲线上给定参数 t 对应的点的坐标.\n * 可以在指定的 t 参数下计算出曲线上精确的一个点,这个点可以用于绘制平滑曲线的一部分\n * @param pct - 0 到 1 之间的参数,用于指定曲线上的点的位置\n * @param P1x - 曲线的起点 x 坐标\n * @param P1y - 曲线的起点 y 坐标\n * @param P2x - 曲线的第一个控制点 x 坐标\n * @param P2y - 曲线的第一个控制点 y 坐标\n * @param P3x - 曲线的第二个控制点 x 坐标\n * @param P3y - 曲线的第二个控制点 y 坐标\n * @param P4x - 曲线的终点 x 坐标\n * @param P4y - 曲线的终点 y 坐标\n * @returns\n */\n private getPointOnCubicBezier(\n pct: number,\n P1x: number,\n P1y: number,\n P2x: number,\n P2y: number,\n P3x: number,\n P3y: number,\n P4x: number,\n P4y: number\n ) {\n function CB1(t: number) {\n return t * t * t;\n }\n\n function CB2(t: number) {\n return 3 * t * t * (1 - t);\n }\n\n function CB3(t: number) {\n return 3 * t * (1 - t) * (1 - t);\n }\n\n function CB4(t: number) {\n return (1 - t) * (1 - t) * (1 - t);\n }\n\n const x = P4x * CB1(pct) + P3x * CB2(pct) + P2x * CB3(pct) + P1x * CB4(pct);\n const y = P4y * CB1(pct) + P3y * CB2(pct) + P2y * CB3(pct) + P1y * CB4(pct);\n\n return {\n x: x,\n y: y\n };\n }\n\n /**\n * 计算二次贝塞尔曲线上给定参数 t 对应的点的坐标\n * @param pct - 0 到 1 之间的参数,用于指定曲线上的点的位置\n * @param P1x - 曲线的起点 x 坐标\n * @param P1y - 曲线的起点 y 坐标\n * @param P2x - 曲线的控制点 x 坐标\n * @param P2y - 曲线的控制点 y 坐标\n * @param P3x - 曲线的终点 x 坐标\n * @param P3y - 曲线的终点 y 坐标\n * @returns\n */\n private getPointOnQuadraticBezier(pct: number, P1x: number, P1y: number, P2x: number, P2y: number, P3x: number, P3y: number) {\n function QB1(t: number) {\n return t * t;\n }\n\n function QB2(t: number) {\n return 2 * t * (1 - t);\n }\n\n function QB3(t: number) {\n return (1 - t) * (1 - t);\n }\n\n const x = P3x * QB1(pct) + P2x * QB2(pct) + P1x * QB3(pct);\n const y = P3y * QB1(pct) + P2y * QB2(pct) + P1y * QB3(pct);\n\n return {\n x: x,\n y: y\n };\n }\n\n /**\n * 计算椭圆弧上给定角度 θ 对应的点的坐标\n * @param cx - 椭圆的中心点 x 坐标\n * @param cy - 椭圆的中心点 y 坐标\n * @param rx - 椭圆的 x 轴半径\n * @param ry - 椭圆的 y 轴半径\n * @param theta - 椭圆弧的起始角度\n * @param psi - 椭圆弧的旋转角度\n * @returns\n */\n private getPointOnEllipticalArc(cx: number, cy: number, rx: number, ry: number, theta: number, psi: number) {\n const cosPsi = Math.cos(psi);\n const sinPsi = Math.sin(psi);\n const pt = {\n x: rx * Math.cos(theta),\n y: ry * Math.sin(theta)\n };\n return {\n x: cx + (pt.x * cosPsi - pt.y * sinPsi),\n y: cy + (pt.x * sinPsi + pt.y * cosPsi)\n };\n }\n\n /**\n * 计算基于不同路径命令的长度\n * @param x - 起点 x 坐标\n * @param y - 起点 y 坐标\n * @param cmd - 路径命令\n * @param points - 与路径命令相关的点的坐标或控制参数\n * @returns\n */\n private calcLength(x: number, y: number, cmd: string, points: number[]) {\n let len, p1, p2, t;\n\n switch (cmd) {\n case 'L':\n return this.getLineLength(x, y, points[0], points[1]);\n case 'C':\n len = 0.0;\n p1 = this.getPointOnCubicBezier(0, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnCubicBezier(t, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n return len;\n case 'Q':\n len = 0.0;\n p1 = this.getPointOnQuadraticBezier(0, x, y, points[0], points[1], points[2], points[3]);\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnQuadraticBezier(t, x, y, points[0], points[1], points[2], points[3]);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n return len;\n case 'A':\n len = 0.0;\n const start = points[4];\n const dTheta = points[5];\n const end = points[4] + dTheta;\n let inc = Math.PI / 180.0;\n if (Math.abs(start - end) < inc) {\n inc = Math.abs(start - end);\n }\n p1 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], start, 0);\n if (dTheta < 0) {\n for (t = start - inc; t > end; t -= inc) {\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n } else {\n for (t = start + inc; t < end; t += inc) {\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n }\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], end, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n return len;\n }\n return 0;\n }\n\n /**\n * 解析 SVG 路径数据字符串,将其转换为一个包含路径命令和坐标点的数组对象\n * @param data - SVG 路径数据字符串\n * @returns\n */\n private parsePathData(data: string) {\n if (!data) {\n return [];\n }\n\n let cs = data;\n const cc = ['m', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z', 'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'];\n\n cs = cs.replace(new RegExp(' ', 'g'), ',');\n for (let n = 0; n < cc.length; n++) {\n cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);\n }\n const arr = cs.split('|');\n const ca: any = [];\n const coords: any = [];\n let cpx = 0;\n let cpy = 0;\n\n const re = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:e[-+]?\\d+)?)/gi;\n let match: RegExpExecArray | null;\n for (let n = 1; n < arr.length; n++) {\n let str = arr[n];\n let c = str.charAt(0);\n str = str.slice(1);\n\n coords.length = 0;\n while ((match = re.exec(str))) {\n coords.push(match[0]);\n }\n\n const p: any = [];\n\n for (let j = 0, jlen = coords.length; j < jlen; j++) {\n if (coords[j] === '00') {\n p.push(0, 0);\n continue;\n }\n const parsed = parseFloat(coords[j]);\n if (!isNaN(parsed)) {\n p.push(parsed);\n } else {\n p.push(0);\n }\n }\n\n while (p.length > 0) {\n if (isNaN(p[0])) {\n break;\n }\n\n let cmd: string | null = null;\n let points: any = [];\n const startX = cpx;\n const startY = cpy;\n let prevCmd, ctlPtx, ctlPty;\n let rx, ry, psi, fa, fs, x1, y1;\n\n switch (c) {\n case 'l':\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'L':\n cpx = p.shift();\n cpy = p.shift();\n points.push(cpx, cpy);\n break;\n case 'm':\n const dx = p.shift();\n const dy = p.shift();\n cpx += dx;\n cpy += dy;\n cmd = 'M';\n if (ca.length > 2 && ca[ca.length - 1].command === 'z') {\n for (let idx = ca.length - 2; idx >= 0; idx--) {\n if (ca[idx].command === 'M') {\n cpx = ca[idx].points[0] + dx;\n cpy = ca[idx].points[1] + dy;\n break;\n }\n }\n }\n points.push(cpx, cpy);\n c = 'l';\n break;\n case 'M':\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'M';\n points.push(cpx, cpy);\n c = 'L';\n break;\n\n case 'h':\n cpx += p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'H':\n cpx = p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'v':\n cpy += p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'V':\n cpy = p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'C':\n points.push(p.shift(), p.shift(), p.shift(), p.shift());\n cpx = p.shift();\n cpy = p.shift();\n points.push(cpx, cpy);\n break;\n case 'c':\n points.push(cpx + p.shift(), cpy + p.shift(), cpx + p.shift(), cpy + p.shift());\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'C';\n points.push(cpx, cpy);\n break;\n case 'S':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'C') {\n ctlPtx = cpx + (cpx - prevCmd.points[2]);\n ctlPty = cpy + (cpy - prevCmd.points[3]);\n }\n points.push(ctlPtx, ctlPty, p.shift(), p.shift());\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'C';\n points.push(cpx, cpy);\n break;\n case 's':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'C') {\n ctlPtx = cpx + (cpx - prevCmd.points[2]);\n ctlPty = cpy + (cpy - prevCmd.points[3]);\n }\n points.push(ctlPtx, ctlPty, cpx + p.shift(), cpy + p.shift());\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'C';\n points.push(cpx, cpy);\n break;\n case 'Q':\n points.push(p.shift(), p.shift());\n cpx = p.shift();\n cpy = p.shift();\n points.push(cpx, cpy);\n break;\n case 'q':\n points.push(cpx + p.shift(), cpy + p.shift());\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'Q';\n points.push(cpx, cpy);\n break;\n case 'T':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'Q') {\n ctlPtx = cpx + (cpx - prevCmd.points[0]);\n ctlPty = cpy + (cpy - prevCmd.points[1]);\n }\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'Q';\n points.push(ctlPtx, ctlPty, cpx, cpy);\n break;\n case 't':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'Q') {\n ctlPtx = cpx + (cpx - prevCmd.points[0]);\n ctlPty = cpy + (cpy - prevCmd.points[1]);\n }\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'Q';\n points.push(ctlPtx, ctlPty, cpx, cpy);\n break;\n case 'A':\n rx = p.shift();\n ry = p.shift();\n psi = p.shift();\n fa = p.shift();\n fs = p.shift();\n x1 = cpx;\n y1 = cpy;\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'A';\n points = this.convertEndpointToCenterParameterization(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);\n break;\n case 'a':\n rx = p.shift();\n ry = p.shift();\n psi = p.shift();\n fa = p.shift();\n fs = p.shift();\n x1 = cpx;\n y1 = cpy;\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'A';\n points = this.convertEndpointToCenterParameterization(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);\n break;\n }\n\n ca.push({\n command: cmd || c,\n points: points,\n start: {\n x: startX,\n y: startY\n },\n pathLength: this.calcLength(startX, startY, cmd || c, points)\n });\n }\n\n if (c === 'z' || c === 'Z') {\n ca.push({\n command: 'z',\n points: [],\n start: undefined,\n pathLength: 0\n });\n }\n }\n\n return ca;\n }\n\n /**\n * 根据传入的路径数据 data 在画布上绘制路径\n * @param options\n */\n public path(options: { x: number; y: number; data: string; size?: number; scaleX?: number; scaleY?: number; fill: string }) {\n const { x, y, scaleX = 1, scaleY = 1, data, fill } = options;\n const dataArray = this.parsePathData(data);\n\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.fillStyle = fill;\n this.ctx.translate(x, y);\n this.ctx.scale(scaleX, scaleY);\n let isClosed = false;\n for (let n = 0; n < dataArray.length; n++) {\n const c = dataArray[n].command;\n const p = dataArray[n].points;\n switch (c) {\n case 'L':\n this.ctx.lineTo(p[0], p[1]);\n break;\n case 'M':\n this.ctx.moveTo(p[0], p[1]);\n break;\n case 'C':\n this.ctx.bezierCurveTo(p[0], p[1], p[2], p[3], p[4], p[5]);\n break;\n case 'Q':\n this.ctx.quadraticCurveTo(p[0], p[1], p[2], p[3]);\n break;\n case 'A':\n const cx = p[0];\n const cy = p[1];\n const rx = p[2];\n const ry = p[3];\n const theta = p[4];\n const dTheta = p[5];\n const psi = p[6];\n const fs = p[7];\n const r = rx > ry ? rx : ry;\n const scaleX = rx > ry ? 1 : rx / ry;\n const scaleY = rx > ry ? ry / rx : 1;\n\n this.ctx.translate(cx, cy);\n this.ctx.rotate(psi);\n this.ctx.scale(scaleX, scaleY);\n this.ctx.arc(0, 0, r, theta, theta + dTheta, (1 - fs) as any);\n this.ctx.scale(1 / scaleX, 1 / scaleY);\n this.ctx.rotate(-psi);\n this.ctx.translate(-cx, -cy);\n\n break;\n case 'z':\n isClosed = true;\n this.ctx.closePath();\n break;\n }\n }\n\n if (!isClosed) {\n this.ctx.stroke();\n } else {\n this.ctx.fill();\n }\n this.ctx.restore();\n }\n}\n\nexport const drawer = new Drawer();\n","import { AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_OFFSET } from '../../constants/table';\nimport { AITableCell, AITableLayout } from '../../types';\nimport { Drawer } from './drawer';\n\n/**\n * 用于处理表格行或单元格的布局和绘制。\n * 它提供了基本的布局信息(如位置、大小等),并定义了常用的绘图方法(如渲染缩进区域、添加新字段的空白区域等)。\n * 该类继承自 Drawer,并被其他更具体的布局类(如 RecordRowLayout)扩展和使用\n */\nexport class Layout extends Drawer {\n // 定义当前单元格或行的位置\n protected x = 0;\n protected y = 0;\n // 行高\n protected rowHeight = 0;\n // 列宽\n protected columnWidth = 0;\n // 行索引\n protected rowIndex = 0;\n // 列索引\n protected columnIndex = 0;\n // 列数\n protected columnCount = 0;\n\n protected containerWidth = 0;\n\n // 用于初始化或重置布局的基本属性。这个方法通常在每次渲染新的一行或单元格时调用,确保布局信息是最新的\n init({ x, y, rowIndex, columnIndex, rowHeight, columnWidth, columnCount, containerWidth }: AITableLayout) {\n this.x = x;\n this.y = y;\n this.rowIndex = rowIndex;\n this.columnIndex = columnIndex;\n this.rowHeight = rowHeight;\n this.columnWidth = columnWidth;\n this.columnCount = columnCount;\n this.containerWidth = containerWidth;\n }\n\n // 当前单元格是否是行的第一列\n protected get isFirst() {\n return this.columnIndex === 0;\n }\n\n // 当前单元格是否是行的最后一列\n protected get isLast() {\n return this.columnIndex === this.columnCount - 1;\n }\n\n protected renderAddFieldBlank({ style, isHoverRow }: Pick<AITableCell, 'isHoverRow' | 'style'>) {\n const rowHeight = this.rowHeight;\n const fill = style?.fill || (isHoverRow ? this.colors.gray80 : this.colors.transparent);\n const addFieldBlankX = this.x + this.columnWidth + AI_TABLE_OFFSET;\n this.rect({\n x: addFieldBlankX,\n y: this.y + AI_TABLE_OFFSET,\n width:\n this.containerWidth - addFieldBlankX < AI_TABLE_FIELD_ADD_BUTTON_WIDTH\n ? AI_TABLE_FIELD_ADD_BUTTON_WIDTH\n : this.containerWidth - addFieldBlankX,\n height: rowHeight,\n fill\n });\n }\n}\n","import {\n AddOutlinedPath,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_ADD_BUTTON_WIDTH,\n AI_TABLE_ICON_COMMON_SIZE,\n AI_TABLE_OFFSET,\n AI_TABLE_ROW_HEAD_SIZE,\n AI_TABLE_ROW_HEAD_WIDTH\n} from '../../constants';\nimport { AITableCell } from '../../types';\nimport { Layout } from './layout-drawer';\n\nexport class AddRowLayout extends Layout {\n override renderAddFieldBlank({ isHoverRow }: Pick<AITableCell, 'isHoverRow'>) {\n super.renderAddFieldBlank({ isHoverRow });\n const rowHeight = this.rowHeight;\n const defaultWidth = AI_TABLE_FIELD_ADD_BUTTON_WIDTH;\n const width = this.containerWidth - this.x < defaultWidth ? defaultWidth : this.containerWidth - this.x;\n this.line({\n x: this.x + this.columnWidth,\n y: this.y,\n points: [0, rowHeight, width, rowHeight],\n stroke: this.colors.gray200\n });\n }\n\n private renderCell({ width, isHoverRow }: Pick<AITableCell, 'width' | 'isHoverRow'>) {\n const x = this.x;\n const y = this.y;\n const rowHeight = this.rowHeight;\n const fill = isHoverRow ? this.colors.gray80 : this.colors.transparent;\n\n this.rect({\n x,\n y: y + AI_TABLE_OFFSET,\n width: width as number,\n height: rowHeight,\n fill\n });\n this.line({\n x,\n y: y + rowHeight,\n points: [0, 0, width as number, 0],\n stroke: this.colors.gray200\n });\n }\n\n private renderFirstCell({ isHoverRow }: Pick<AITableCell, 'isHoverRow'>) {\n if (!this.isFirst) return;\n const y = this.y;\n const rowHeight = this.rowHeight;\n const columnWidth = this.columnWidth;\n const frozenOffset = AI_TABLE_OFFSET;\n const fill = isHoverRow ? this.colors.gray80 : this.colors.transparent;\n\n this.rect({\n x: frozenOffset,\n y: y + AI_TABLE_OFFSET,\n width: columnWidth + AI_TABLE_ROW_HEAD_WIDTH - frozenOffset + 1,\n height: rowHeight,\n fill\n });\n this.line({\n x: frozenOffset,\n y,\n points: [0, rowHeight, columnWidth + AI_TABLE_ROW_HEAD_WIDTH - frozenOffset + 1, rowHeight],\n stroke: this.colors.gray200\n });\n\n this.path({\n x: AI_TABLE_CELL_PADDING,\n y: y + (rowHeight - AI_TABLE_ICON_COMMON_SIZE) / 2 - AI_TABLE_OFFSET,\n data: AddOutlinedPath,\n size: AI_TABLE_ROW_HEAD_SIZE,\n fill: this.colors.gray600\n });\n }\n\n private renderLastCell({ isHoverRow }: Pick<AITableCell, 'isHoverRow'>) {\n if (!this.isLast) return;\n const width = this.columnWidth;\n if (!this.isFirst) {\n this.renderCell({\n width,\n isHoverRow\n });\n }\n this.renderAddFieldBlank({ isHoverRow });\n }\n\n private renderCommonCell({ isHoverRow }: Pick<AITableCell, 'isHoverRow'>) {\n if (this.isFirst || this.isLast) return;\n this.renderCell({\n width: this.columnWidth,\n isHoverRow\n });\n }\n\n render({ isHoverRow }: Pick<AITableCell, 'isHoverRow'>) {\n this.renderFirstCell({\n isHoverRow\n });\n this.renderCommonCell({\n isHoverRow\n });\n this.renderLastCell({\n isHoverRow\n });\n }\n}\n\nexport const addRowLayout = new AddRowLayout();\n","import _ from 'lodash';\nimport {\n AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE,\n AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE,\n AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET,\n AI_TABLE_CELL_EMOJI_PADDING,\n AI_TABLE_CELL_EMOJI_SIZE,\n AI_TABLE_CELL_MAX_ROW_COUNT,\n AI_TABLE_CELL_MEMBER_ITEM_HEIGHT,\n AI_TABLE_CELL_MEMBER_ITEM_PADDING,\n AI_TABLE_CELL_MULTI_DOT_RADIUS,\n AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP,\n AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH,\n AI_TABLE_CELL_MULTI_PADDING_LEFT,\n AI_TABLE_CELL_MULTI_PADDING_TOP,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_COMMON_FONT_SIZE,\n AI_TABLE_DOT_RADIUS,\n AI_TABLE_MEMBER_AVATAR_SIZE,\n AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT,\n AI_TABLE_MEMBER_ITEM_PADDING_RIGHT,\n AI_TABLE_MIN_TEXT_WIDTH,\n AI_TABLE_OFFSET,\n AI_TABLE_OPTION_ITEM_FONT_SIZE,\n AI_TABLE_OPTION_ITEM_HEIGHT,\n AI_TABLE_OPTION_ITEM_PADDING,\n AI_TABLE_OPTION_ITEM_RADIUS,\n AI_TABLE_PIECE_RADIUS,\n AI_TABLE_PIECE_WIDTH,\n AI_TABLE_PROGRESS_BAR_HEIGHT,\n AI_TABLE_PROGRESS_BAR_RADIUS,\n AI_TABLE_PROGRESS_TEXT_Width,\n AI_TABLE_ROW_BLANK_HEIGHT,\n AI_TABLE_TAG_FONT_SIZE,\n AI_TABLE_TAG_PADDING,\n AI_TABLE_TEXT_GAP,\n Colors,\n DEFAULT_FONT_FAMILY,\n DEFAULT_FONT_SIZE,\n DEFAULT_FONT_WEIGHT,\n DEFAULT_TEXT_ALIGN_LEFT,\n DEFAULT_TEXT_ALIGN_RIGHT,\n DEFAULT_TEXT_DECORATION,\n DEFAULT_TEXT_LINE_HEIGHT,\n DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n FONT_SIZE_SM,\n StarFill\n} from '../../constants';\nimport { AITable, AITableField, AITableFieldType, AITableSelectOptionStyle, MemberSettings, RateFieldValue } from '../../core';\nimport { AITableAvatarSize, AITableAvatarType, AITableMemberType, AITableRender, AITableSelectField } from '../../types';\nimport { getAvatarBgColor, getAvatarShortName, getTextWidth } from '../../utils';\nimport { Drawer } from './drawer';\n\n/**\n * 处理和渲染表格单元格的内容\n */\nexport class CellDrawer extends Drawer {\n // 样式初始化\n public initStyle(field: AITableField, styleProps: { fontWeight: any }): void | null {\n const { type: fieldType } = field;\n const { fontWeight = DEFAULT_FONT_WEIGHT } = styleProps;\n\n switch (fieldType) {\n case AITableFieldType.text:\n case AITableFieldType.date:\n case AITableFieldType.createdAt:\n case AITableFieldType.updatedAt:\n case AITableFieldType.rate:\n case AITableFieldType.progress:\n case AITableFieldType.member:\n case AITableFieldType.createdBy:\n case AITableFieldType.updatedBy:\n return this.setStyle({ fontSize: DEFAULT_FONT_SIZE, fontWeight });\n default:\n return null;\n }\n }\n\n // 单元格渲染\n public renderCell(render: AITableRender, ctx?: CanvasRenderingContext2D | undefined) {\n const { field } = render;\n const fieldType = field.type;\n\n switch (fieldType) {\n case AITableFieldType.text:\n case AITableFieldType.number:\n case AITableFieldType.link:\n return this.renderCellText(render, ctx);\n case AITableFieldType.select:\n return this.renderCellSelect(render, ctx);\n case AITableFieldType.date:\n case AITableFieldType.createdAt:\n case AITableFieldType.updatedAt:\n return this.renderCellDate(render, ctx);\n case AITableFieldType.rate:\n return this.renderCellRate(render, ctx);\n case AITableFieldType.progress:\n return this.renderCellProgress(render, ctx);\n case AITableFieldType.member:\n case AITableFieldType.createdBy:\n case AITableFieldType.updatedBy:\n return this.renderCellMember(render, ctx);\n default:\n return null;\n }\n }\n\n private renderCellText(render: AITableRender, ctx?: any) {\n const { x, y, transformValue, field, columnWidth, style } = render;\n const fieldType = field.type;\n let renderText: string | null = fieldType === AITableFieldType.link ? transformValue.text : transformValue;\n if (renderText == null) {\n return;\n }\n const isSingleLine = !columnWidth;\n const isTextField = fieldType === AITableFieldType.text;\n const isNumberField = fieldType === AITableFieldType.number;\n\n if (isTextField && isSingleLine) {\n renderText = renderText.replace(/\\r|\\n/g, ' ');\n }\n\n const color = style?.color || this.colors.gray800;\n const textAlign = style?.textAlign || DEFAULT_TEXT_ALIGN_LEFT;\n const fontWeight = style?.fontWeight;\n const textMaxWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING;\n const renderX = textAlign === DEFAULT_TEXT_ALIGN_RIGHT ? x + columnWidth - AI_TABLE_CELL_PADDING : x + AI_TABLE_CELL_PADDING;\n const renderY = y + AI_TABLE_ROW_BLANK_HEIGHT / 2;\n const textDecoration = DEFAULT_TEXT_DECORATION;\n\n if (isNumberField) {\n renderText = String(renderText);\n const { text } = this.textEllipsis({\n text: renderText,\n maxWidth: columnWidth && textMaxWidth,\n fontWeight\n });\n if (ctx) {\n let pureText = text;\n this.text({\n x: renderX,\n y: renderY,\n text: pureText,\n textAlign,\n fillStyle: color,\n fontWeight,\n textDecoration,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE\n });\n }\n } else {\n this.wrapText({\n x: renderX,\n y: renderY,\n text: renderText,\n maxWidth: textMaxWidth,\n maxRow: AI_TABLE_CELL_MAX_ROW_COUNT,\n lineHeight: DEFAULT_TEXT_LINE_HEIGHT,\n textAlign,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n fillStyle: fieldType === AITableFieldType.link ? Colors.primary : color,\n fontWeight,\n textDecoration,\n fieldType,\n needDraw: true\n });\n }\n }\n\n private renderCellSelect(render: AITableRender, ctx?: any) {\n const { field } = render;\n if ((field as AITableSelectField).settings?.is_multiple) {\n this.renderCellMultiSelect(render, ctx);\n } else {\n this.renderSingleSelectCell(render, ctx);\n }\n }\n\n private renderCellMultiSelect(render: AITableRender, ctx?: any) {\n const { x, y, field, transformValue, columnWidth } = render;\n if (!transformValue?.length || !Array.isArray(transformValue)) return;\n let currentX = x + AI_TABLE_CELL_PADDING;\n const maxContainerWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING;\n const optionStyle = (field as AITableSelectField).settings.option_style;\n const fontStyle = `${DEFAULT_FONT_WEIGHT} ${AI_TABLE_OPTION_ITEM_FONT_SIZE}px ${DEFAULT_FONT_FAMILY}`;\n const isDotOrPiece = optionStyle === AITableSelectOptionStyle.dot || optionStyle === AITableSelectOptionStyle.piece;\n\n let totalWidth = 0;\n const cellItemInfoMap = new Map();\n let drawableIndex = 0;\n transformValue.forEach((optionId, index) => {\n const item = (field as AITableSelectField).settings.options?.find((option) => option._id === optionId);\n const textWidth = getTextWidth(ctx, item?.text as string, fontStyle);\n totalWidth += textWidth + 2 * AI_TABLE_CELL_PADDING;\n if (index < transformValue.length - 1) {\n totalWidth += AI_TABLE_CELL_MULTI_PADDING_LEFT;\n }\n if (isDotOrPiece) {\n totalWidth += AI_TABLE_CELL_MULTI_DOT_RADIUS * 2 + AI_TABLE_CELL_MULTI_PADDING_LEFT;\n }\n if (totalWidth < maxContainerWidth || totalWidth === maxContainerWidth) {\n drawableIndex = index;\n }\n cellItemInfoMap.set(optionId, { textWidth, item, offset: totalWidth });\n });\n\n const baseWidth = AI_TABLE_MIN_TEXT_WIDTH + AI_TABLE_CELL_PADDING * 2;\n const minWidth = isDotOrPiece ? baseWidth + AI_TABLE_CELL_MULTI_DOT_RADIUS * 2 + AI_TABLE_CELL_MULTI_PADDING_LEFT : baseWidth;\n\n if (transformValue[drawableIndex + 1]) {\n const { offset: currentOffset } = cellItemInfoMap.get(transformValue[drawableIndex]);\n const canDrawerNext = maxContainerWidth - currentOffset > minWidth;\n drawableIndex = canDrawerNext ? drawableIndex + 1 : drawableIndex;\n // 上面过程是 没有 +数字 的情况下最大能放几个;\n const number = transformValue.length - (drawableIndex + 1);\n\n if (number > 0) {\n // 说明有 +数字,重新计算\n const circleWidth = getTextWidth(ctx, `+{number}`, fontStyle) + 2 * AI_TABLE_CELL_PADDING;\n const max = maxContainerWidth - AI_TABLE_CELL_MULTI_PADDING_LEFT - circleWidth;\n // 如果当前已经超出了,看是否能容下当前的,不能就减去 1;\n const currentItemHasOver = currentOffset > max;\n if (currentItemHasOver) {\n const lastOffset = drawableIndex === 0 ? 0 : cellItemInfoMap.get(transformValue[drawableIndex - 1]);\n drawableIndex = max - lastOffset > minWidth ? drawableIndex : drawableIndex - 1;\n } else {\n // 还有剩余空间, 看是否能多渲染一个\n drawableIndex = max - currentOffset > minWidth ? drawableIndex + 1 : drawableIndex;\n }\n }\n }\n\n const circleText = `+${transformValue.length - (drawableIndex + 1)}`;\n const circleWidth =\n transformValue.length - (drawableIndex + 1) > 0 ? getTextWidth(ctx, circleText, fontStyle) + 2 * AI_TABLE_CELL_PADDING : 0;\n // 剩余空间\n let remainSpace = maxContainerWidth - circleWidth - (circleWidth > 0 ? AI_TABLE_CELL_MULTI_PADDING_LEFT : 0);\n\n for (let index = 0; index < transformValue.length; index++) {\n const optionId = transformValue[index];\n const bgConfig = {\n x: currentX,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_HEIGHT) / 2,\n height: AI_TABLE_OPTION_ITEM_HEIGHT,\n radius: AI_TABLE_PIECE_RADIUS,\n fill: Colors.gray100,\n width: 0\n };\n\n const commonItem = (optionStyle: AITableSelectOptionStyle, shape: string) => {\n const baseWidth = isDotOrPiece\n ? AI_TABLE_CELL_MULTI_DOT_RADIUS * 2 + AI_TABLE_CELL_MULTI_PADDING_LEFT + AI_TABLE_CELL_PADDING * 2\n : AI_TABLE_CELL_PADDING * 2;\n if (remainSpace < minWidth) {\n return;\n }\n const { textWidth, item } = cellItemInfoMap.get(optionId);\n const completeWidth = baseWidth + textWidth;\n if (index !== transformValue.length - 1) {\n remainSpace -= AI_TABLE_CELL_MULTI_PADDING_LEFT;\n }\n const bgWidth = remainSpace > completeWidth ? completeWidth : remainSpace;\n bgConfig.width = bgWidth;\n if (isDotOrPiece) {\n this.rect(bgConfig);\n if (shape === 'rect') {\n this.rect({\n x: bgConfig.x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_CELL_MULTI_DOT_RADIUS * 2) / 2,\n width: AI_TABLE_CELL_MULTI_DOT_RADIUS * 2,\n height: AI_TABLE_CELL_MULTI_DOT_RADIUS * 2,\n radius: AI_TABLE_PIECE_RADIUS,\n fill: item?.bg_color ?? item?.color ?? Colors.primary\n });\n } else if (shape === 'arc') {\n this.arc({\n x: bgConfig.x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_CELL_MULTI_DOT_RADIUS * 2) / 2 + AI_TABLE_CELL_MULTI_DOT_RADIUS,\n radius: AI_TABLE_CELL_MULTI_DOT_RADIUS,\n fill: item?.bg_color ?? item?.color ?? Colors.primary\n });\n }\n\n this.text({\n x: bgConfig.x + AI_TABLE_CELL_PADDING + AI_TABLE_CELL_MULTI_DOT_RADIUS * 2 + AI_TABLE_CELL_MULTI_PADDING_LEFT,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_FONT_SIZE) / 2,\n text: this.textEllipsis({\n text: item.text,\n maxWidth: bgWidth - baseWidth,\n fontSize: AI_TABLE_OPTION_ITEM_FONT_SIZE\n }).text,\n fillStyle: Colors.gray700,\n fontSize: AI_TABLE_OPTION_ITEM_FONT_SIZE\n });\n } else if (optionStyle === AITableSelectOptionStyle.tag) {\n this.tag({\n x: bgConfig.x,\n y: bgConfig.y,\n width: bgConfig.width,\n text: this.textEllipsis({\n text: item.text,\n maxWidth: bgWidth - baseWidth,\n fontSize: AI_TABLE_TAG_FONT_SIZE\n }).text,\n radius: AI_TABLE_OPTION_ITEM_RADIUS,\n fontSize: AI_TABLE_TAG_FONT_SIZE,\n height: bgConfig.height,\n color: Colors.white,\n padding: AI_TABLE_CELL_PADDING,\n background: item?.bg_color ?? item?.color ?? Colors.primary\n });\n } else {\n this.rect(bgConfig);\n this.text({\n x: bgConfig.x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_TAG_FONT_SIZE) / 2,\n text: this.textEllipsis({\n text: item.text,\n maxWidth: bgWidth - baseWidth,\n fontSize: AI_TABLE_TAG_FONT_SIZE\n }).text,\n fillStyle: Colors.gray700,\n fontSize: AI_TABLE_TAG_FONT_SIZE\n });\n }\n const currentWidth = bgConfig.width;\n remainSpace -= currentWidth;\n currentX += currentWidth + AI_TABLE_CELL_MULTI_PADDING_LEFT;\n };\n\n switch (optionStyle) {\n case AITableSelectOptionStyle.dot:\n commonItem(AITableSelectOptionStyle.dot, 'arc');\n break;\n case AITableSelectOptionStyle.piece:\n commonItem(AITableSelectOptionStyle.piece, 'rect');\n break;\n case AITableSelectOptionStyle.tag:\n commonItem(AITableSelectOptionStyle.tag, '');\n break;\n default:\n commonItem(AITableSelectOptionStyle.text, '');\n break;\n }\n }\n\n if (circleWidth > 0) {\n if (optionStyle === AITableSelectOptionStyle.tag) {\n this.tag({\n x: currentX,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_HEIGHT) / 2,\n width: circleWidth,\n height: AI_TABLE_OPTION_ITEM_HEIGHT,\n text: circleText,\n background: Colors.gray100,\n color: Colors.gray700,\n radius: AI_TABLE_OPTION_ITEM_RADIUS,\n padding: AI_TABLE_CELL_PADDING,\n fontSize: AI_TABLE_TAG_FONT_SIZE\n });\n } else {\n this.rect({\n x: currentX,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_HEIGHT) / 2,\n width: circleWidth,\n height: AI_TABLE_OPTION_ITEM_HEIGHT,\n fill: Colors.gray100,\n radius: AI_TABLE_PIECE_RADIUS\n });\n this.text({\n x: currentX + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_TAG_FONT_SIZE) / 2,\n text: circleText,\n fillStyle: Colors.gray700,\n fontSize: AI_TABLE_TAG_FONT_SIZE\n });\n }\n }\n }\n\n private renderSingleSelectCell(render: AITableRender, ctx?: any) {\n const { x, y, transformValue, field, columnWidth, isActive } = render;\n const isValid = transformValue && Array.isArray(transformValue);\n if (!isValid || transformValue.length === 0) {\n return;\n }\n if (!transformValue[0]) {\n console.warn(`single select field unexpected value: ${transformValue[0]}`);\n }\n const isOperating = isActive;\n const item = (field as AITableSelectField).settings.options?.find((option) => option._id === transformValue[0]);\n const itemName = item?.text || '';\n const getTextEllipsis = (maxTextWidth: number, fontSize: number = AI_TABLE_COMMON_FONT_SIZE) => {\n maxTextWidth -= isOperating ? AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE - AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET : 0;\n return this.textEllipsis({\n text: itemName,\n maxWidth: columnWidth && maxTextWidth,\n fontSize: fontSize\n });\n };\n if (ctx) {\n ctx.save();\n ctx.globalAlpha = 1;\n const colors = AITable.getColors();\n const optionStyle = (field as AITableSelectField).settings.option_style;\n let background = item?.bg_color ?? item?.color ?? colors.primary;\n const dotMaxTextWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING - AI_TABLE_PIECE_WIDTH - AI_TABLE_TEXT_GAP;\n const borderWidth = 1;\n switch (optionStyle) {\n case AITableSelectOptionStyle.dot:\n // 这里的 AI_TABLE_OFFSET 偏移不确定是为啥(包括 piece 的),只是为了保持和编辑组件中的对齐\n this.arc({\n x: x + AI_TABLE_CELL_PADDING + AI_TABLE_DOT_RADIUS,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_PIECE_WIDTH) / 2 + AI_TABLE_DOT_RADIUS - AI_TABLE_OFFSET,\n radius: AI_TABLE_DOT_RADIUS,\n fill: background\n });\n this.text({\n x: x + AI_TABLE_PIECE_WIDTH + AI_TABLE_TEXT_GAP + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_FONT_SIZE) / 2,\n text: getTextEllipsis(dotMaxTextWidth).text,\n fillStyle: colors.gray800\n });\n break;\n case AITableSelectOptionStyle.piece:\n this.rect({\n x: x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_PIECE_WIDTH) / 2 - AI_TABLE_OFFSET,\n width: AI_TABLE_PIECE_WIDTH,\n height: AI_TABLE_PIECE_WIDTH,\n radius: AI_TABLE_PIECE_RADIUS,\n fill: background\n });\n this.text({\n x: x + AI_TABLE_PIECE_WIDTH + AI_TABLE_TEXT_GAP + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_FONT_SIZE) / 2,\n text: getTextEllipsis(dotMaxTextWidth).text,\n fillStyle: colors.gray800\n });\n break;\n\n case AITableSelectOptionStyle.tag:\n const maxTextWidth = columnWidth - 2 * (AI_TABLE_CELL_PADDING + AI_TABLE_TAG_PADDING);\n const { textWidth, text } = getTextEllipsis(maxTextWidth, AI_TABLE_TAG_FONT_SIZE);\n const width = Math.max(textWidth + 2 * AI_TABLE_TAG_PADDING, AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH);\n this.tag({\n x: x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_HEIGHT) / 2,\n width,\n height: AI_TABLE_OPTION_ITEM_HEIGHT,\n text,\n background,\n color: colors.white,\n radius: AI_TABLE_OPTION_ITEM_RADIUS,\n padding: AI_TABLE_OPTION_ITEM_PADDING,\n fontSize: AI_TABLE_TAG_FONT_SIZE,\n stroke: background\n });\n break;\n default:\n const textMaxTextWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING;\n this.text({\n x: x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_FONT_SIZE) / 2,\n text: getTextEllipsis(textMaxTextWidth).text,\n fillStyle: colors.gray800\n });\n break;\n }\n\n ctx.restore();\n }\n }\n\n private renderCellDate(render: AITableRender, ctx?: any) {\n const { x, y, transformValue, columnWidth, style } = render;\n const colors = AITable.getColors();\n let cellText = transformValue;\n\n if (cellText == null || !_.isString(cellText)) {\n return;\n }\n\n const textMaxWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING;\n const { text } = this.textEllipsis({ text: cellText, maxWidth: columnWidth && textMaxWidth });\n if (ctx) {\n const color = style?.color || colors.gray800;\n this.text({\n x: x + AI_TABLE_CELL_PADDING,\n y: y + AI_TABLE_ROW_BLANK_HEIGHT / 2,\n text,\n fillStyle: color,\n fontWeight: style?.fontWeight,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE\n });\n }\n }\n\n private renderCellRate(render: AITableRender, ctx?: CanvasRenderingContext2D | undefined) {\n const { x, y, transformValue: _cellValue } = render;\n const max = 5;\n const cellValue = (_cellValue as RateFieldValue) || 0;\n const size = AI_TABLE_CELL_EMOJI_SIZE;\n\n return [...Array(max).keys()].map((item, index) => {\n const value = index + 1;\n const checked = value <= cellValue;\n const iconX = index * size + AI_TABLE_CELL_PADDING + index * AI_TABLE_CELL_EMOJI_PADDING;\n const iconY = (AI_TABLE_ROW_BLANK_HEIGHT - size) / 2;\n\n if (ctx && checked) {\n this.path({\n x: x + iconX,\n y: y + iconY,\n size: 22,\n data: StarFill,\n fill: this.colors.waring,\n scaleX: 1.14,\n scaleY: 1.14\n });\n }\n });\n }\n\n private renderCellProgress(render: AITableRender, ctx?: any) {\n const { x, y, transformValue, columnWidth, style } = render;\n const colors = AITable.getColors();\n const cellText = transformValue;\n\n if (cellText == null || !_.isNumber(cellText)) {\n return;\n }\n\n const width = columnWidth - 2 * AI_TABLE_CELL_PADDING - AI_TABLE_PROGRESS_TEXT_Width;\n const height = AI_TABLE_PROGRESS_BAR_HEIGHT;\n const textHeight = AI_TABLE_COMMON_FONT_SIZE;\n const offsetX = AI_TABLE_CELL_PADDING;\n const offsetY = (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_PROGRESS_BAR_HEIGHT) / 2;\n const textOffsetY = (AI_TABLE_ROW_BLANK_HEIGHT - textHeight) / 2;\n\n // 绘制背景\n this.rect({\n x: x + offsetX,\n y: y + offsetY,\n width,\n height,\n radius: AI_TABLE_PROGRESS_BAR_RADIUS,\n fill: colors.gray200\n });\n\n // 计算并绘制进度\n const progressWidth = (transformValue / 100) * width;\n this.rect({\n x: x + offsetX,\n y: y + offsetY,\n width: progressWidth,\n height,\n radius: AI_TABLE_PROGRESS_BAR_RADIUS,\n fill: colors.success\n });\n\n this.text({\n x: x + offsetX + width + AI_TABLE_TEXT_GAP,\n y: y + textOffsetY,\n text: `${transformValue}%`,\n fillStyle: colors.gray800\n });\n }\n\n private renderCellMember(render: AITableRender, ctx?: CanvasRenderingContext2D | undefined) {\n const { references, x, y, field, transformValue: _cellValue, rowHeight, columnWidth, isActive } = render;\n const cellValue = _cellValue;\n\n if (!cellValue?.length || !references) {\n return;\n }\n const settings = field.settings as MemberSettings;\n const avatarSize = AI_TABLE_MEMBER_AVATAR_SIZE;\n const itemHeight = AI_TABLE_CELL_MEMBER_ITEM_HEIGHT;\n const isOperating = isActive;\n const isMulti = settings?.is_multiple;\n\n let currentX = AI_TABLE_CELL_PADDING;\n let currentY = (AI_TABLE_ROW_BLANK_HEIGHT - avatarSize) / 2;\n const itemOtherWidth = avatarSize + AI_TABLE_MEMBER_ITEM_PADDING_RIGHT + AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT;\n const maxHeight = isActive ? 130 - AI_TABLE_CELL_MULTI_PADDING_TOP : rowHeight - AI_TABLE_CELL_MULTI_PADDING_TOP;\n const maxTextWidth = isOperating\n ? columnWidth - 2 * AI_TABLE_CELL_PADDING - itemOtherWidth - AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE - 12\n : columnWidth - 2 * AI_TABLE_CELL_PADDING - itemOtherWidth;\n\n const listCount = cellValue.length;\n let isOverflow = false;\n\n for (let index = 0; index < listCount; index++) {\n const userInfo = references?.members[cellValue[index]];\n if (!userInfo) continue;\n\n const { uid, display_name, avatar } = userInfo;\n const type = AITableMemberType.member;\n const itemWidth = AITableAvatarSize.size24 + (isMulti ? AI_TABLE_CELL_MEMBER_ITEM_PADDING : 0);\n\n currentX = AI_TABLE_CELL_PADDING + index * itemWidth;\n\n let realMaxTextWidth = maxTextWidth < 0 ? 0 : maxTextWidth;\n if (index === 0 && isOperating) {\n const operatingMaxWidth = maxTextWidth - (AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE + 4);\n // item No space to display, then perform a line feed\n if (operatingMaxWidth <= 20) {\n currentX = AI_TABLE_CELL_PADDING;\n currentY += AI_TABLE_OPTION_ITEM_HEIGHT + AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP;\n } else {\n realMaxTextWidth = operatingMaxWidth;\n }\n }\n\n let isMore = currentX + itemWidth > columnWidth - 2 * AI_TABLE_CELL_PADDING;\n if (columnWidth != null) {\n // 在非活动状态下,当超出列宽时,不会渲染后续内容\n if (!isActive && currentX >= columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n break;\n }\n // 如果不是非活动状态的最后一行,则换行渲染溢出内容\n if (!isActive && currentX > columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n }\n if (isActive && currentX + itemWidth > columnWidth - AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n currentY += itemHeight;\n }\n if (isActive && currentY >= maxHeight) {\n isOverflow = true;\n }\n }\n\n if (ctx && !isActive) {\n this.avatar({\n x: x + currentX,\n y: y + currentY,\n url: avatar!,\n id: uid!,\n title: getAvatarShortName(display_name),\n bgColor: getAvatarBgColor(display_name!),\n type: AITableAvatarType.member,\n size: AITableAvatarSize.size24\n });\n\n if (isMore) {\n ctx.save();\n ctx.globalAlpha = 0.3;\n this.rect({\n x: x + currentX,\n y: y + currentY,\n width: AITableAvatarSize.size24,\n height: AITableAvatarSize.size24,\n radius: 24,\n fill: this.colors.black\n });\n ctx.restore();\n this.text({\n x: x + currentX + FONT_SIZE_SM / 2,\n y: y + AI_TABLE_ROW_BLANK_HEIGHT / 2,\n fillStyle: this.colors.white,\n fontSize: FONT_SIZE_SM,\n text: `+${listCount - index - 1}`,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE\n });\n }\n }\n }\n }\n}\n\nexport const cellDrawer = new CellDrawer();\n","import {\n AI_TABLE_FIELD_ADD_BUTTON_WIDTH,\n AI_TABLE_FIELD_HEAD_HEIGHT,\n AI_TABLE_OFFSET,\n AI_TABLE_ROW_HEAD_WIDTH,\n DEFAULT_FONT_SIZE\n} from '../../constants';\nimport { DEFAULT_TEXT_ALIGN_CENTER, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE } from '../../constants/text';\nimport { AITable } from '../../core';\nimport { AITableCell } from '../../types';\nimport { Layout } from './layout-drawer';\n\n/**\n * 绘制行的布局,通过直接操作 Canvas 提供高效的渲染方法。\n * 它继承自 Layout 类,包含了用于绘制行中单元格(尤其是首列和尾列)的几个方法\n */\nexport class RecordRowLayout extends Layout {\n // 首列\n private renderFirstCell({ row, style, isHoverRow, isCheckedRow }: AITableCell) {\n if (!this.isFirst) return;\n\n const { fill } = style;\n const y = this.y;\n const rowHeight = this.rowHeight;\n const columnWidth = this.columnWidth;\n const colors = AITable.getColors();\n // 编号的上下边框\n let fillBg = colors.transparent;\n if (isCheckedRow) {\n fillBg = colors.itemActiveBgColor;\n } else if (isHoverRow) {\n fillBg = colors.gray80;\n }\n this.customRect({\n x: AI_TABLE_OFFSET,\n y,\n width: AI_TABLE_ROW_HEAD_WIDTH - AI_TABLE_OFFSET,\n height: rowHeight,\n fill: fillBg,\n strokes: {\n right: colors.gray200,\n bottom: colors.gray200\n }\n });\n // 第一列单元格\n this.rect({\n x: AI_TABLE_ROW_HEAD_WIDTH,\n y,\n width: columnWidth + AI_TABLE_OFFSET,\n height: rowHeight,\n fill: fill,\n stroke: colors.gray200\n });\n\n if (!isCheckedRow && !isHoverRow) {\n // 设置字体样式,居中绘制行号\n this.setStyle({ fontSize: DEFAULT_FONT_SIZE });\n this.text({\n x: AI_TABLE_ROW_HEAD_WIDTH / 2,\n y: y + AI_TABLE_FIELD_HEAD_HEIGHT / 2,\n text: String(row.displayIndex),\n textAlign: DEFAULT_TEXT_ALIGN_CENTER,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE\n });\n }\n }\n\n // 尾列\n private renderLastCell({ style, isHoverRow }: Pick<AITableCell, 'style' | 'isHoverRow'>) {\n if (!this.isLast || this.isFirst) return;\n\n const { fill, stroke } = style;\n const colors = AITable.getColors();\n\n // 背景、边框\n this.rect({\n x: this.x,\n y: this.y,\n width: this.columnWidth,\n height: this.rowHeight,\n fill: fill || colors.white,\n stroke: stroke || colors.gray200\n });\n\n // 延伸到 FIELD_ADD_BUTTON\n super.renderAddFieldBlank({ style, isHoverRow });\n const rowHeight = this.rowHeight;\n const startX = this.x + this.columnWidth;\n const lineWidth =\n this.containerWidth - startX < AI_TABLE_FIELD_ADD_BUTTON_WIDTH ? AI_TABLE_FIELD_ADD_BUTTON_WIDTH : this.containerWidth - startX;\n this.line({\n x: startX,\n y: this.y,\n points: [0, rowHeight, lineWidth, rowHeight],\n stroke: this.colors.gray200\n });\n }\n\n // 绘制中间的普通单元格\n private renderCommonCell({ style }: Pick<AITableCell, 'style'>) {\n if (this.isFirst || this.isLast) return;\n\n const { fill, stroke } = style;\n const colors = AITable.getColors();\n\n // 背景、边框\n this.rect({\n x: this.x,\n y: this.y,\n width: this.columnWidth,\n height: this.rowHeight,\n fill: fill || colors.white,\n stroke: stroke || colors.gray200\n });\n }\n\n render(config: AITableCell) {\n const { row, style, isCheckedRow, isHoverRow } = config;\n this.renderFirstCell({ row, style, isCheckedRow, isHoverRow });\n this.renderCommonCell({ style });\n this.renderLastCell({ style, isHoverRow });\n }\n}\n\nexport const recordRowLayout = new RecordRowLayout();\n","import {\n AI_TABLE_FIELD_HEAD,\n AI_TABLE_FIELD_HEAD_HEIGHT,\n AI_TABLE_OFFSET,\n AI_TABLE_ROW_ADD_BUTTON,\n DEFAULT_FONT_STYLE\n} from '../../constants';\nimport { AITable, AITableQueries, RendererContext } from '../../core';\nimport { AITableAreaType, AITableCellsDrawerConfig, AITableRender, AITableRowType } from '../../types';\nimport { getCellHorizontalPosition, transformCellValue } from '../../utils';\nimport { addRowLayout } from '../drawers/add-row-layout-drawer';\nimport { cellDrawer } from '../drawers/cell-drawer';\nimport { recordRowLayout } from '../drawers/record-row-layout-drawer';\n\n/**\n * 绘制单元格内容的函数\n * 利用 Canvas API 绘制每个单元格的背景颜色、文本以及其他可能的样式。这个函数通常用于自定义表格渲染,尤其是在处理大量数据时,通过直接操作 Canvas 来提高渲染性能\n * @param config\n */\nexport const createCells = (config: AITableCellsDrawerConfig) => {\n const { aiTable, coordinate, references, ctx, rowStartIndex, rowStopIndex, columnStartIndex, columnStopIndex } = config;\n const context = aiTable.context as RendererContext;\n const { rowHeight, columnCount, rowCount } = coordinate;\n const colors = AITable.getColors();\n const visibleColumns = AITable.getVisibleFields(aiTable);\n\n // 初始化绘图上下文, 为后续的绘制操作做准备\n cellDrawer.initCtx(ctx as CanvasRenderingContext2D);\n addRowLayout.initCtx(ctx as CanvasRenderingContext2D);\n recordRowLayout.initCtx(ctx as CanvasRenderingContext2D);\n\n // 遍历列, 确定在哪些列上绘制单元格\n for (let columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n if (columnIndex > columnCount - 1) break;\n\n // 获取该列对应的 field,如果 field 不再展示范围,则跳过该列\n const field = visibleColumns[columnIndex];\n if (field == null) continue;\n\n // 获取该列对应的宽度\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n const x = coordinate.getColumnOffset(columnIndex) + AI_TABLE_OFFSET;\n const isLastColumn = columnIndex === aiTable.fields.length - 1;\n\n if (columnIndex === 1) {\n cellDrawer.initStyle(field, { fontWeight: DEFAULT_FONT_STYLE });\n }\n\n // 遍历行, 从 rowStartIndex 到 rowStopIndex 的所有行,决定将在哪些行上绘制单元格\n for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n if (rowIndex > rowCount - 1) break;\n const row = context.linearRows()[rowIndex];\n const { _id: recordId, type } = row;\n const y = coordinate.getRowOffset(rowIndex) + AI_TABLE_OFFSET;\n const { rowIndex: pointRowIndex, targetName } = context.pointPosition();\n const isHover = pointRowIndex === rowIndex;\n\n switch (type) {\n case AITableRowType.add: {\n const isHoverRow = isHover && targetName === AI_TABLE_ROW_ADD_BUTTON;\n addRowLayout.init({\n x,\n y,\n rowIndex,\n columnIndex,\n columnWidth,\n rowHeight: AI_TABLE_FIELD_HEAD_HEIGHT,\n columnCount,\n containerWidth: coordinate.containerWidth\n });\n addRowLayout.render({\n isHoverRow\n });\n break;\n }\n case AITableRowType.record: {\n let background = colors.white;\n const isCheckedRow = aiTable.selection().selectedRecords.has(row._id);\n const isSelected = aiTable.selection().selectedFields.has(field._id);\n const isHoverRow = isHover && targetName !== AI_TABLE_FIELD_HEAD;\n if (isCheckedRow || isSelected) {\n background = colors.itemActiveBgColor;\n } else if (isHoverRow) {\n background = colors.gray80;\n }\n recordRowLayout.init({\n x,\n y,\n rowIndex,\n columnIndex,\n columnWidth,\n rowHeight,\n columnCount,\n containerWidth: coordinate.containerWidth\n });\n recordRowLayout.render({\n row,\n style: { fill: background },\n isHoverRow,\n isCheckedRow\n });\n const { width, offset } = getCellHorizontalPosition({\n columnIndex,\n columnWidth,\n columnCount\n });\n const realX = x + offset + AI_TABLE_OFFSET;\n const realY = y + AI_TABLE_OFFSET;\n const style = { fontWeight: DEFAULT_FONT_STYLE };\n const cellValue = AITableQueries.getFieldValue(aiTable, [recordId, field._id]);\n const transformValue = transformCellValue(aiTable, field, cellValue);\n const render = {\n aiTable,\n x: realX,\n y: realY,\n columnWidth: width,\n rowHeight,\n recordId: recordId,\n field,\n cellValue,\n transformValue,\n references,\n isActive: isSelected,\n style,\n colors\n };\n\n cellDrawer.initStyle(field, style);\n // 最后一列,且单元格内容存在,需要裁剪内容,以防止文本溢出单元格边界\n // 然后,根据计算好的样式和布局绘制单元格内容\n if (isLastColumn && cellValue != null) {\n ctx.save();\n ctx.rect(realX, realY, width, rowHeight);\n ctx.clip();\n cellDrawer.renderCell(render as AITableRender, ctx as CanvasRenderingContext2D);\n ctx.restore();\n } else {\n cellDrawer.renderCell(render as AITableRender, ctx as CanvasRenderingContext2D);\n }\n }\n }\n }\n }\n};\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport Konva from 'konva';\nimport { KoShape } from '../../angular-konva';\nimport { AITableCellsConfig } from '../../types';\nimport { createCells } from '../creations/create-cells';\n\n@Component({\n selector: 'ai-table-cells',\n template: ` <ko-shape [config]=\"cellsShapeConfig()\"></ko-shape> `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableCells {\n config = input.required<AITableCellsConfig>();\n\n cellsShapeConfig = computed(() => {\n const { coordinate, columnStartIndex } = this.config();\n const { frozenColumnCount } = coordinate;\n return {\n listening: false,\n perfectDrawEnabled: false,\n sceneFunc: (ctx: Konva.Context) =>\n createCells({\n ...this.config(),\n ctx,\n columnStartIndex: Math.max(columnStartIndex, frozenColumnCount)\n })\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport {\n ColumnCalendarFilledPath,\n ColumnLinkOutlinedPath,\n ColumnMemberFilledPath,\n ColumnMultipleFillPath,\n ColumnNumberFilledPath,\n ColumnProgressFilledPath,\n ColumnRatingFilledPath,\n ColumnSelectFilledPath,\n ColumnTextFilledPath\n} from '../../constants';\nimport { AITableFieldType, SelectSettings } from '../../core';\nimport { AITableFieldTypeIconConfig } from '../../types';\nimport { AITableIcon } from './icon.component';\n\n@Component({\n selector: 'ai-table-field-icon',\n template: ` <ai-table-icon [config]=\"iconConfig()\"></ai-table-icon> `,\n standalone: true,\n imports: [AITableIcon],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableFieldIcon {\n config = input.required<AITableFieldTypeIconConfig>();\n\n iconConfig = computed(() => {\n const { field, x, y, width, height, fill } = this.config();\n let data = null;\n switch (field.type) {\n case AITableFieldType.text:\n data = ColumnTextFilledPath;\n break;\n case AITableFieldType.select:\n data = (field.settings as SelectSettings)?.is_multiple ? ColumnMultipleFillPath : ColumnSelectFilledPath;\n break;\n case AITableFieldType.date:\n case AITableFieldType.createdAt:\n case AITableFieldType.updatedAt:\n data = ColumnCalendarFilledPath;\n break;\n case AITableFieldType.number:\n data = ColumnNumberFilledPath;\n break;\n case AITableFieldType.link:\n data = ColumnLinkOutlinedPath;\n break;\n case AITableFieldType.rate:\n data = ColumnRatingFilledPath;\n break;\n case AITableFieldType.member:\n case AITableFieldType.createdBy:\n case AITableFieldType.updatedBy:\n data = ColumnMemberFilledPath;\n break;\n case AITableFieldType.progress:\n data = ColumnProgressFilledPath;\n break;\n }\n return {\n x,\n y,\n size: width,\n backgroundHeight: height,\n listening: false,\n data,\n fill\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport Konva from 'konva';\nimport { KoShape } from '../../angular-konva/components/shape.component';\nimport {\n DEFAULT_FONT_FAMILY,\n DEFAULT_FONT_SIZE,\n DEFAULT_FONT_STYLE,\n DEFAULT_TEXT_ALIGN_LEFT,\n DEFAULT_TEXT_ELLIPSIS,\n DEFAULT_TEXT_FILL,\n DEFAULT_TEXT_LISTENING,\n DEFAULT_TEXT_TRANSFORMS_ENABLED,\n DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n DEFAULT_TEXT_WRAP\n} from '../../constants';\n\n@Component({\n selector: 'ai-table-text',\n template: ` <ko-text [config]=\"textConfig()\"></ko-text> `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableText {\n config = input.required<Konva.ShapeConfig>();\n\n textConfig = computed(() => {\n const {\n x,\n y,\n width,\n height,\n text,\n padding,\n align = DEFAULT_TEXT_ALIGN_LEFT,\n verticalAlign = DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n fill = DEFAULT_TEXT_FILL,\n textDecoration,\n fontSize = DEFAULT_FONT_SIZE,\n fontStyle = DEFAULT_FONT_STYLE,\n ellipsis = DEFAULT_TEXT_ELLIPSIS,\n wrap = DEFAULT_TEXT_WRAP,\n transformsEnabled = DEFAULT_TEXT_TRANSFORMS_ENABLED,\n listening = DEFAULT_TEXT_LISTENING,\n fontFamily = DEFAULT_FONT_FAMILY,\n ...rest\n } = this.config();\n return {\n x,\n y,\n width,\n height,\n text,\n padding,\n align,\n verticalAlign,\n fill,\n textDecoration,\n fontSize,\n fontStyle,\n ellipsis,\n wrap,\n transformsEnabled,\n listening,\n fontFamily,\n ...rest\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { StageConfig } from 'konva/lib/Stage';\nimport { KoContainer, KoShape, KoStage } from '../../angular-konva';\nimport {\n AI_TABLE_ACTION_COMMON_SIZE,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_HEAD,\n AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE,\n AI_TABLE_FIELD_HEAD_MORE,\n AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH,\n AI_TABLE_ICON_COMMON_SIZE,\n AI_TABLE_OFFSET,\n Colors,\n DEFAULT_FONT_SIZE,\n MoreStandOutlinedPath\n} from '../../constants';\nimport { AITableFieldHeadConfig } from '../../types';\nimport { generateTargetName, TextMeasure } from '../../utils';\nimport { AITableFieldIcon } from './field-icon.component';\nimport { AITableIcon } from './icon.component';\nimport { AITableText } from './text.component';\n\n@Component({\n selector: 'ai-table-field-head',\n template: `\n <ko-group [config]=\"groupConfig()\">\n <ko-rect [config]=\"bgConfig()\"></ko-rect>\n <ko-group>\n <ai-table-field-icon [config]=\"fieldIconConfig()\"></ai-table-field-icon>\n <ai-table-text [config]=\"textConfig()\"></ai-table-text>\n @if (config().iconVisible) {\n <ai-table-icon [config]=\"moreIconConfig()\"></ai-table-icon>\n }\n </ko-group>\n </ko-group>\n `,\n standalone: true,\n imports: [KoContainer, KoShape, AITableFieldIcon, AITableText, AITableIcon],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableFieldHead {\n config = input.required<AITableFieldHeadConfig>();\n\n textOffset = AI_TABLE_CELL_PADDING + AI_TABLE_ICON_COMMON_SIZE + AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE;\n\n textMeasure = TextMeasure();\n\n availableTextWidth = computed(() => {\n const { width, iconVisible } = this.config();\n return (\n width -\n (iconVisible\n ? 2 * (AI_TABLE_CELL_PADDING + AI_TABLE_ICON_COMMON_SIZE + AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE)\n : 2 * AI_TABLE_CELL_PADDING + AI_TABLE_ICON_COMMON_SIZE + AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE)\n );\n });\n\n textData = computed(() => {\n const fieldName = this.config().field.name.replace(/\\r|\\n/g, ' ');\n this.textMeasure.setFont({ fontSize: DEFAULT_FONT_SIZE });\n const { width, height, isOverflow } = this.textMeasure.measureText(fieldName, this.availableTextWidth(), 1);\n return {\n width: Math.min(width, this.availableTextWidth()),\n height,\n isOverflow\n };\n });\n\n groupConfig = computed<Partial<StageConfig>>(() => {\n return {\n x: this.config().x,\n y: this.config().y\n };\n });\n\n bgConfig = computed(() => {\n const { field, width, height, stroke, isSelected, iconVisible } = this.config();\n return {\n x: AI_TABLE_OFFSET,\n y: AI_TABLE_OFFSET,\n name: generateTargetName({\n targetName: AI_TABLE_FIELD_HEAD,\n fieldId: field._id\n }),\n width: width,\n height: height,\n fill: isSelected ? Colors.headSelectedBgColor : iconVisible ? Colors.gray80 : Colors.white,\n stroke: stroke || Colors.gray200,\n strokeWidth: 1,\n opacity: 1\n };\n });\n\n fieldIconConfig = computed(() => {\n const { field, height } = this.config();\n return {\n field: field,\n x: AI_TABLE_CELL_PADDING,\n y: (height - AI_TABLE_ICON_COMMON_SIZE) / 2,\n width: AI_TABLE_ICON_COMMON_SIZE,\n height: AI_TABLE_ICON_COMMON_SIZE,\n fill: Colors.gray600\n };\n });\n\n textConfig = computed(() => {\n const { field, height } = this.config();\n return {\n x: this.textOffset,\n y: undefined,\n width: Math.max(this.textData().width, AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH),\n height: height + 2,\n text: field.name,\n lineHeight: 1.84\n };\n });\n\n moreIconConfig = computed(() => {\n const { field, width, height, isHoverIcon, isSelected } = this.config();\n const commonIconOffsetY = (height - AI_TABLE_ACTION_COMMON_SIZE) / 2;\n return {\n name: generateTargetName({\n targetName: AI_TABLE_FIELD_HEAD_MORE,\n fieldId: field._id\n }),\n x: width - AI_TABLE_ACTION_COMMON_SIZE,\n y: commonIconOffsetY,\n data: MoreStandOutlinedPath,\n fill: isHoverIcon ? Colors.primary : Colors.gray600,\n background: Colors.transparent,\n backgroundWidth: AI_TABLE_ACTION_COMMON_SIZE,\n backgroundHeight: AI_TABLE_ACTION_COMMON_SIZE,\n cornerRadius: 4\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport Konva from 'konva';\nimport { KoShape } from '../../angular-konva';\nimport { AITableCellsConfig } from '../../types';\nimport { createCells } from '../creations/create-cells';\n\n@Component({\n selector: 'ai-table-frozen-cells',\n template: `<ko-shape [config]=\"frozenCellsConfig()\"></ko-shape>`,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableFrozenCells {\n config = input.required<AITableCellsConfig>();\n\n frozenCellsConfig = computed(() => {\n const { coordinate } = this.config();\n const { frozenColumnCount } = coordinate;\n return {\n listening: false,\n perfectDrawEnabled: false,\n sceneFunc: (ctx: Konva.Context) =>\n createCells({\n ...this.config(),\n ctx,\n columnStartIndex: 0,\n columnStopIndex: frozenColumnCount - 1\n })\n };\n });\n}\n","import { AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_MORE, Colors } from '../../constants';\nimport { AITableColumnHeadsConfig, AITableFieldHeadConfig } from '../../types';\n\nexport const createColumnHeads = (config: AITableColumnHeadsConfig) => {\n const { coordinate, columnStartIndex, columnStopIndex, pointPosition, aiTable } = config;\n const colors = Colors;\n const { columnCount, rowInitSize: fieldHeadHeight } = coordinate;\n const { columnIndex: pointColumnIndex, targetName: pointTargetName } = pointPosition;\n const { fields } = aiTable;\n\n const getFieldHeadStatus = (fieldId: string) => {\n const iconVisible =\n [AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_MORE].includes(pointTargetName) && fields()[pointColumnIndex]?._id === fieldId;\n const isHoverIcon = pointTargetName === AI_TABLE_FIELD_HEAD_MORE && fields()[pointColumnIndex]?._id === fieldId;\n const isSelected = aiTable.selection().selectedFields.has(fieldId);\n return {\n iconVisible,\n isSelected,\n isHoverIcon\n };\n };\n\n const fieldHeads: AITableFieldHeadConfig[] = [];\n for (let columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n if (columnIndex > columnCount - 1) break;\n if (columnIndex < 0) continue;\n const field = fields()[columnIndex];\n if (field == null) continue;\n const x = coordinate.getColumnOffset(columnIndex);\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n const { iconVisible, isSelected, isHoverIcon } = getFieldHeadStatus(field._id);\n const fieldHead = {\n x,\n y: 0,\n width: columnWidth,\n height: fieldHeadHeight,\n field,\n stroke: columnIndex === 0 ? colors.transparent : undefined,\n iconVisible,\n isSelected,\n isHoverIcon\n };\n\n fieldHeads.push(fieldHead);\n }\n return fieldHeads;\n};\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { StageConfig } from 'konva/lib/Stage';\nimport { KoShape, KoContainer } from '../../angular-konva';\nimport {\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX,\n AI_TABLE_ICON_COMMON_SIZE,\n AI_TABLE_OFFSET,\n AI_TABLE_ROW_HEAD_WIDTH,\n Colors\n} from '../../constants';\nimport { AITableCheckType, AITableColumnHeadsConfig } from '../../types';\nimport { createColumnHeads } from '../creations/create-heads';\nimport { AITableFieldHead } from './field-head.component';\nimport { AITableIcon } from './icon.component';\n\n@Component({\n selector: 'ai-table-frozen-column-heads',\n template: `\n <ko-rect [config]=\"numberHeadBgConfig()\"></ko-rect>\n <ko-line [config]=\"topLineConfig\"></ko-line>\n <ko-line [config]=\"bottomLineConfig()\"></ko-line>\n <ko-group>\n <ai-table-icon [config]=\"iconConfig()\"></ai-table-icon>\n </ko-group>\n @for (config of headConfigs(); track $index) {\n <ai-table-field-head [config]=\"config\"></ai-table-field-head>\n }\n <ko-rect [config]=\"headBgConfig()\"></ko-rect>\n `,\n standalone: true,\n imports: [KoShape, AITableFieldHead, AITableIcon, KoContainer],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableFrozenColumnHeads {\n config = input.required<AITableColumnHeadsConfig>();\n\n coordinate = computed(() => {\n return this.config().coordinate;\n });\n\n isChecked = computed(() => {\n const { selection, records } = this.config().aiTable;\n return selection().selectedRecords.size === records().length;\n });\n\n fieldHeadHeight = computed(() => {\n return this.coordinate().rowInitSize;\n });\n\n headConfigs = computed(() => {\n return createColumnHeads({\n ...this.config(),\n columnStartIndex: 0,\n columnStopIndex: this.coordinate().frozenColumnCount - 1\n });\n });\n\n numberHeadBgConfig = computed<Partial<StageConfig>>(() => {\n return {\n x: AI_TABLE_OFFSET,\n y: AI_TABLE_OFFSET,\n width: AI_TABLE_ROW_HEAD_WIDTH,\n height: this.fieldHeadHeight(),\n fill: Colors.white,\n listening: false\n };\n });\n\n topLineConfig = {\n x: AI_TABLE_OFFSET,\n y: AI_TABLE_OFFSET,\n points: [0, 0, AI_TABLE_ROW_HEAD_WIDTH, 0],\n stroke: Colors.gray200,\n strokeWidth: 1,\n listening: false\n };\n\n bottomLineConfig = computed(() => {\n return {\n x: AI_TABLE_OFFSET,\n y: AI_TABLE_OFFSET,\n points: [AI_TABLE_ROW_HEAD_WIDTH, this.fieldHeadHeight(), 0, this.fieldHeadHeight()],\n stroke: Colors.gray200,\n strokeWidth: 1,\n listening: false\n };\n });\n\n iconConfig = computed(() => {\n return {\n name: AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX,\n x: AI_TABLE_CELL_PADDING,\n y: (this.fieldHeadHeight() - AI_TABLE_ICON_COMMON_SIZE) / 2,\n type: this.isChecked() ? AITableCheckType.checked : AITableCheckType.unchecked,\n fill:\n this.isChecked() || (this.config().pointPosition.targetName === AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX && !this.isChecked())\n ? Colors.primary\n : Colors.gray300\n };\n });\n\n headBgConfig = computed(() => {\n const { frozenColumnWidth } = this.coordinate();\n return {\n x: AI_TABLE_ROW_HEAD_WIDTH,\n y: AI_TABLE_OFFSET,\n width: frozenColumnWidth + AI_TABLE_OFFSET,\n height: this.fieldHeadHeight(),\n stroke: Colors.gray200,\n strokeWidth: 1,\n fill: Colors.transparent,\n listening: false\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { KoShape } from '../../angular-konva';\nimport { AITableCellsConfig } from '../../types';\nimport { getPlaceHolderCellsConfigs } from '../../utils';\n\n@Component({\n selector: 'ai-table-frozen-placeholder-cells',\n template: `\n @for (item of frozenPlaceHolderCellsConfig(); track $index) {\n <ko-rect [config]=\"item\"></ko-rect>\n }\n `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableFrozenPlaceholderCells {\n config = input.required<AITableCellsConfig>();\n\n frozenPlaceHolderCellsConfig = computed(() => {\n const { coordinate } = this.config();\n return getPlaceHolderCellsConfigs({\n ...this.config(),\n columnStartIndex: 0,\n columnStopIndex: coordinate.frozenColumnCount - 1\n });\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { AITableColumnHeadsConfig } from '../../types';\nimport { createColumnHeads } from '../creations/create-heads';\nimport { AITableFieldHead } from './field-head.component';\n\n@Component({\n selector: 'ai-table-column-heads',\n template: `\n @for (config of headConfigs(); track $index) {\n <ai-table-field-head [config]=\"config\"></ai-table-field-head>\n }\n `,\n standalone: true,\n imports: [AITableFieldHead],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableColumnHeads {\n config = input.required<AITableColumnHeadsConfig>();\n\n headConfigs = computed(() => {\n const { coordinate, columnStartIndex } = this.config();\n const { frozenColumnCount } = coordinate;\n return createColumnHeads({\n ...this.config(),\n columnStartIndex: Math.max(columnStartIndex, frozenColumnCount)\n });\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { KoContainer, KoShape } from '../../angular-konva';\nimport {\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_HEAD,\n AI_TABLE_FIELD_HEAD_HEIGHT,\n AI_TABLE_ROW_HEAD,\n AI_TABLE_ROW_HEAD_WIDTH,\n AI_TABLE_ROW_SELECT_CHECKBOX,\n Colors\n} from '../../constants';\nimport { RendererContext } from '../../core';\nimport { AITableAreaType, AITableCheckType, AITablePointPosition, AITableRowHeadsConfig, AITableRowType } from '../../types';\nimport { generateTargetName } from '../../utils';\nimport { AITableIcon } from './icon.component';\n\n@Component({\n selector: 'ai-table-hover-row-heads',\n template: `\n @for (config of headConfigs(); track config.recordId) {\n <ko-group [config]=\"{ x: 0, y: config.y, name: 'hover-heads' }\">\n @if (config.bgConfig) {\n <ko-rect [config]=\"config.bgConfig\"></ko-rect>\n }\n @if (config.iconConfig) {\n <ai-table-icon [config]=\"config.iconConfig\"></ai-table-icon>\n }\n </ko-group>\n }\n `,\n standalone: true,\n imports: [KoContainer, KoShape, AITableIcon],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableHoverRowHeads {\n config = input.required<AITableRowHeadsConfig>();\n\n pointPosition = computed(() => {\n return this.config().aiTable.context!.pointPosition();\n });\n\n headConfigs = computed(() => {\n return this.createHoverRowHeads(this.pointPosition());\n });\n\n createHoverRowHeads = (pointPosition: AITablePointPosition) => {\n const { coordinate, rowStartIndex, rowStopIndex, aiTable } = this.config();\n const context = aiTable.context as RendererContext;\n const headConfigs: any[] = [];\n\n for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n if (rowIndex > coordinate.rowCount - 1) {\n break;\n }\n\n const row = context.linearRows()[rowIndex];\n if (row == null) {\n continue;\n }\n\n const { type, _id: recordId } = row;\n if (type !== AITableRowType.record || recordId == null) {\n continue;\n }\n\n const isCheckedRow = aiTable.selection().selectedRecords.has(recordId);\n const { areaType, rowIndex: pointRowIndex, targetName } = pointPosition;\n\n if (!isCheckedRow && areaType === AITableAreaType.none) {\n continue;\n }\n\n let isHoverRow;\n if (pointRowIndex > -1) {\n const { type: pointRowType, _id: pointRecordId } = context.linearRows()[pointRowIndex];\n isHoverRow = recordId === pointRecordId && pointRowType === AITableRowType.record && targetName !== AI_TABLE_FIELD_HEAD;\n }\n\n let operationGroup: { recordId: string; y: number; bgConfig: any; iconConfig?: any };\n\n operationGroup = {\n recordId,\n y: coordinate.getRowOffset(rowIndex),\n bgConfig: {\n name: generateTargetName({ targetName: AI_TABLE_ROW_HEAD, recordId }),\n width: AI_TABLE_ROW_HEAD_WIDTH + 1,\n height: coordinate.rowHeight,\n fill: Colors.transparent\n }\n };\n\n if (isCheckedRow || isHoverRow) {\n const iconOffsetY = (AI_TABLE_FIELD_HEAD_HEIGHT - 16) / 2;\n operationGroup.iconConfig = {\n name: generateTargetName({\n targetName: AI_TABLE_ROW_SELECT_CHECKBOX,\n recordId\n }),\n x: AI_TABLE_CELL_PADDING,\n y: iconOffsetY,\n type: isCheckedRow ? AITableCheckType.checked : AITableCheckType.unchecked,\n fill: isCheckedRow || (targetName === AI_TABLE_ROW_SELECT_CHECKBOX && !isCheckedRow) ? Colors.primary : Colors.gray300\n };\n headConfigs.push(operationGroup);\n }\n }\n\n return headConfigs;\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { KoShape } from '../../angular-konva';\nimport { AI_TABLE_ROW_ADD_BUTTON } from '../../constants';\nimport { RendererContext } from '../../core';\nimport { AITableRowHeadsConfig, AITableRowType } from '../../types';\n\n@Component({\n selector: 'ai-table-other-rows',\n template: `\n @for (config of otherConfigs(); track $index) {\n @switch (config.type) {\n @case (AITableRowType.add) {\n <ko-rect [config]=\"config.addBtnConfig\"></ko-rect>\n }\n }\n }\n `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableOtherRows {\n config = input.required<AITableRowHeadsConfig>();\n\n AITableRowType = AITableRowType;\n\n otherConfigs = computed(() => {\n return this.createOtherRows(this.config());\n });\n\n createOtherRows = (config: AITableRowHeadsConfig) => {\n const { coordinate, rowStartIndex, rowStopIndex, aiTable } = config;\n const otherRowConfigs = [];\n for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n if (rowIndex > coordinate.rowCount - 1) break;\n const { _id, type } = (aiTable.context as RendererContext).linearRows()[rowIndex];\n if (type === AITableRowType.record) continue;\n const y = coordinate.getRowOffset(rowIndex);\n const curHeight = coordinate.getRowHeight(rowIndex);\n\n otherRowConfigs.push({\n type,\n addBtnConfig: {\n key: `row-add-${_id}`,\n y: y + 1,\n name: AI_TABLE_ROW_ADD_BUTTON,\n width: coordinate.containerWidth,\n height: curHeight - 1,\n fill: 'transparent'\n }\n });\n }\n return otherRowConfigs;\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { KoShape } from '../../angular-konva';\nimport { AITableCellsConfig } from '../../types';\nimport { getPlaceHolderCellsConfigs } from '../../utils';\n\n@Component({\n selector: 'ai-table-placeholder-cells',\n template: `\n @for (item of frozenPlaceHolderCellsConfig(); track $index) {\n <ko-rect [config]=\"item\"></ko-rect>\n }\n `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITablePlaceholderCells {\n config = input.required<AITableCellsConfig>();\n\n frozenPlaceHolderCellsConfig = computed(() => {\n return getPlaceHolderCellsConfigs(this.config());\n });\n}\n","import { RectConfig } from 'konva/lib/shapes/Rect';\nimport { AI_TABLE_CELL_BORDER, AI_TABLE_OFFSET } from '../../constants';\nimport { AITable } from '../../core';\nimport { AITableCellsConfig, AITableRowType } from '../../types';\nimport { getCellHorizontalPosition } from '../../utils';\n\nexport const createActiveCellBorder = (config: AITableCellsConfig) => {\n const { aiTable, coordinate, columnStartIndex, columnStopIndex, rowStartIndex, rowStopIndex } = config;\n const { linearRows } = aiTable.context!;\n const { rowHeight, frozenColumnCount } = coordinate;\n const colors = AITable.getColors();\n const visibleColumns = AITable.getVisibleFields(aiTable);\n const activeCell = AITable.getActiveCell(aiTable);\n const totalColumnCount = visibleColumns.length;\n\n let activeCellBorder: RectConfig | null = null;\n let frozenActiveCellBorder: RectConfig | null = null;\n\n if (activeCell != null) {\n const { fieldId } = activeCell;\n const { rowIndex, columnIndex } = AITable.getCellIndex(aiTable, activeCell)!;\n\n const checkIsVisible = (rowIndex: number, columnIndex: number) => {\n if (columnIndex < frozenColumnCount) {\n return true;\n }\n return (\n rowIndex >= rowStartIndex && rowIndex <= rowStopIndex && columnIndex >= columnStartIndex && columnIndex <= columnStopIndex\n );\n };\n\n if (rowIndex != null && columnIndex != null && checkIsVisible(rowIndex, columnIndex)) {\n const { type } = linearRows()[rowIndex];\n\n if (type === AITableRowType.record) {\n const activeField = visibleColumns.find((field) => field._id === fieldId);\n if (activeField == null) {\n return {\n activeCellBorder,\n frozenActiveCellBorder\n };\n }\n\n const x = coordinate.getColumnOffset(columnIndex);\n const y = coordinate.getRowOffset(rowIndex);\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n const isFrozenColumn = columnIndex < frozenColumnCount;\n const { offset, width } = getCellHorizontalPosition({\n columnWidth,\n columnIndex,\n columnCount: totalColumnCount\n });\n // active 外边界和非 active 外边界 box 大小保持一致\n const currentConfig = {\n x: x + offset + AI_TABLE_OFFSET,\n y: y + AI_TABLE_OFFSET,\n width: width - AI_TABLE_CELL_BORDER / 2,\n height: rowHeight - AI_TABLE_CELL_BORDER / 2,\n strokeWidth: AI_TABLE_CELL_BORDER,\n stroke: colors.primary,\n fillEnabled: false,\n listening: false\n };\n\n if (isFrozenColumn) {\n frozenActiveCellBorder = currentConfig;\n } else {\n activeCellBorder = currentConfig;\n }\n }\n }\n }\n\n return {\n activeCellBorder,\n frozenActiveCellBorder\n };\n};\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport Konva from 'konva';\nimport { StageConfig } from 'konva/lib/Stage';\nimport { KoContainer, KoEventObject, KoShape, KoStage } from '../angular-konva';\nimport { AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_ROW_HEAD_WIDTH } from '../constants';\nimport { AITable } from '../core';\nimport { AITableRendererConfig } from '../types';\nimport { getVisibleRangeInfo } from '../utils';\nimport {\n AITableAddField,\n AITableCells,\n AITableColumnHeads,\n AITableFieldHead,\n AITableFrozenCells,\n AITableFrozenColumnHeads,\n AITableFrozenPlaceholderCells,\n AITableHoverRowHeads,\n AITableIcon,\n AITableOtherRows,\n AITablePlaceholderCells\n} from './components';\nimport { createActiveCellBorder } from './creations/create-active-cell-border';\n\nKonva.pixelRatio = 2;\n\n@Component({\n selector: 'ai-table-renderer',\n templateUrl: './renderer.component.html',\n standalone: true,\n imports: [\n KoContainer,\n KoStage,\n KoShape,\n AITableColumnHeads,\n AITableFrozenColumnHeads,\n AITableCells,\n AITableFrozenCells,\n AITableFrozenPlaceholderCells,\n AITablePlaceholderCells,\n AITableAddField,\n AITableHoverRowHeads,\n AITableOtherRows\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableRenderer {\n config = input.required<AITableRendererConfig>();\n\n koMousemove = output<KoEventObject<MouseEvent>>();\n\n koMousedown = output<KoEventObject<MouseEvent>>();\n\n koWheel = output<KoEventObject<WheelEvent>>();\n\n koClick = output<KoEventObject<MouseEvent>>();\n\n koDblclick = output<KoEventObject<MouseEvent>>();\n\n fields = computed(() => {\n return AITable.getVisibleFields(this.config().aiTable);\n });\n\n coordinate = computed(() => {\n return this.config()?.coordinate;\n });\n\n containerWidth = computed<number>(() => {\n return this.config().containerWidth;\n });\n\n containerHeight = computed<number>(() => {\n return this.config().containerHeight;\n });\n\n scrollState = computed(() => {\n return this.config()?.aiTable!.context!.scrollState();\n });\n\n visibleRangeInfo = computed(() => {\n return getVisibleRangeInfo(this.coordinate()!, this.scrollState()!);\n });\n\n frozenAreaWidth = computed(() => {\n return AI_TABLE_ROW_HEAD_WIDTH + this.coordinate()!.frozenColumnWidth!;\n });\n\n lastColumnWidth = computed(() => {\n return this.coordinate()!.getColumnWidth(this.visibleRangeInfo().columnStopIndex);\n });\n\n lastColumnOffset = computed(() => {\n return this.coordinate()!.getColumnOffset(this.visibleRangeInfo().columnStopIndex);\n });\n\n cellGroupClipWidth = computed(() => {\n return this.containerWidth() - this.frozenAreaWidth();\n });\n\n stageConfig = computed<Partial<StageConfig>>(() => {\n const { isScrolling } = this.scrollState()!;\n return {\n width: this.containerWidth(),\n height: this.containerHeight(),\n listening: isScrolling ? false : true\n };\n });\n\n gridGroupConfig = computed<Partial<StageConfig>>(() => {\n return {\n clipX: 0,\n clipY: 0,\n clipWidth: this.containerWidth(),\n clipHeight: this.containerHeight()\n };\n });\n\n commonGroupConfig = computed<Partial<StageConfig>>(() => {\n return {\n clipX: this.frozenAreaWidth() + 1,\n clipY: 0,\n clipWidth: this.cellGroupClipWidth(),\n clipHeight: this.containerHeight()\n };\n });\n\n attachGroupConfig = computed<Partial<StageConfig>>(() => {\n return {\n clipX: this.frozenAreaWidth() - 1,\n clipY: this.coordinate()!.rowInitSize - 1,\n clipWidth: this.containerWidth() - this.frozenAreaWidth(),\n clipHeight: this.containerHeight() - this.coordinate()!.rowInitSize\n };\n });\n\n frozenAttachGroupConfig = computed<Partial<StageConfig>>(() => {\n return {\n clipX: 0,\n clipY: this.coordinate()!.rowInitSize - 1,\n clipWidth: this.frozenAreaWidth() + 4,\n clipHeight: this.containerHeight() - this.coordinate()!.rowInitSize\n };\n });\n\n offsetYConfig = computed<Partial<StageConfig>>(() => {\n const { scrollTop } = this.scrollState()!;\n return {\n offsetY: scrollTop\n };\n });\n\n offsetXConfig = computed<Partial<StageConfig>>(() => {\n const { scrollLeft } = this.scrollState()!;\n return {\n offsetX: scrollLeft\n };\n });\n\n offsetConfig = computed<Partial<StageConfig>>(() => {\n const { scrollLeft, scrollTop } = this.scrollState()!;\n return {\n offsetX: scrollLeft,\n offsetY: scrollTop\n };\n });\n\n columnHeadOrAddFieldConfig = computed(() => {\n const { columnStartIndex, columnStopIndex } = this.visibleRangeInfo();\n const { aiTable, coordinate } = this.config();\n const { pointPosition } = aiTable.context!;\n const fields = this.fields();\n return {\n aiTable,\n coordinate,\n fields,\n columnStartIndex,\n columnStopIndex,\n pointPosition: pointPosition()\n };\n });\n\n cellsConfig = computed(() => {\n const { aiTable, coordinate, references } = this.config();\n const { rowStartIndex, rowStopIndex, columnStartIndex, columnStopIndex } = this.visibleRangeInfo();\n return {\n aiTable,\n coordinate,\n references,\n rowStartIndex,\n rowStopIndex,\n columnStartIndex,\n columnStopIndex\n };\n });\n\n activeCellBorderConfig = computed(() => {\n return createActiveCellBorder(this.cellsConfig());\n });\n\n stageMousemove(e: KoEventObject<MouseEvent>) {\n this.koMousemove.emit(e as KoEventObject<MouseEvent>);\n }\n\n stageMousedown(e: KoEventObject<MouseEvent>) {\n this.koMousedown.emit(e as KoEventObject<MouseEvent>);\n }\n\n stageClick(e: KoEventObject<MouseEvent>) {\n this.koClick.emit(e as KoEventObject<MouseEvent>);\n }\n\n stageDblclick(e: KoEventObject<MouseEvent>) {\n this.koDblclick.emit(e as KoEventObject<MouseEvent>);\n }\n}\n","<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field\n [config]=\"columnHeadOrAddFieldConfig()\"\n ></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n OnDestroy,\n OnInit,\n Signal,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent } from 'rxjs';\nimport { KoEventObject } from './angular-konva';\nimport {\n AI_TABLE_CELL,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_ADD_BUTTON,\n AI_TABLE_FIELD_ADD_BUTTON_WIDTH,\n AI_TABLE_FIELD_HEAD,\n AI_TABLE_FIELD_HEAD_HEIGHT,\n AI_TABLE_FIELD_HEAD_MORE,\n AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX,\n AI_TABLE_POPOVER_LEFT_OFFSET,\n AI_TABLE_ROW_ADD_BUTTON,\n AI_TABLE_ROW_HEAD_WIDTH,\n AI_TABLE_ROW_SELECT_CHECKBOX,\n DBL_CLICK_EDIT_TYPE,\n DEFAULT_POINT_POSITION,\n DEFAULT_SCROLL_STATE,\n MOUSEOVER_EDIT_TYPE\n} from './constants';\nimport { AITable, Coordinate, RendererContext, UpdateFieldValueOptions } from './core';\nimport { AITableGridBase } from './grid-base.component';\nimport { AITableRenderer } from './renderer/renderer.component';\nimport { AITableGridEventService } from './services/event.service';\nimport { AITableGridFieldService } from './services/field.service';\nimport { AITableGridSelectionService } from './services/selection.service';\nimport { AITableMouseDownType, AITableRendererConfig, ScrollActionOptions } from './types';\nimport { buildGridLinearRows, getColumnIndicesMap, getDetailByTargetName, handleMouseStyle, isWindows } from './utils';\nimport { getMousePosition } from './utils/position';\n\n@Component({\n selector: 'ai-table-grid',\n templateUrl: './grid.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ai-table-grid'\n },\n imports: [AITableRenderer],\n providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService]\n})\nexport class AITableGrid extends AITableGridBase implements OnInit, OnDestroy {\n timer!: number | null;\n\n resizeObserver!: ResizeObserver;\n\n fieldHeadHeight = AI_TABLE_FIELD_HEAD_HEIGHT;\n\n containerRect = signal({ width: 0, height: 0 });\n\n hasContainerRect = computed(() => {\n return this.containerRect().width > 0 && this.containerRect().height > 0;\n });\n\n container = viewChild<ElementRef>('container');\n\n verticalBarRef = viewChild<ElementRef>('verticalBar');\n\n horizontalBarRef = viewChild<ElementRef>('horizontalBar');\n\n linearRows = computed(() => {\n return buildGridLinearRows(this.gridData().records);\n });\n\n visibleColumnsMap = computed(() => {\n const columns = AITable.getVisibleFields(this.aiTable);\n return new Map(columns?.map((item, index) => [item._id, index]));\n });\n\n visibleRowsIndexMap = computed(() => {\n return new Map(this.linearRows().map((row, index) => [row._id, index]));\n });\n\n containerElement = computed(() => {\n return this.container()!.nativeElement;\n });\n\n rendererConfig: Signal<AITableRendererConfig> = computed(() => {\n const fields = AITable.getVisibleFields(this.aiTable);\n const coordinate = new Coordinate({\n container: this.containerElement(),\n rowHeight: AI_TABLE_FIELD_HEAD_HEIGHT,\n rowCount: this.linearRows().length,\n columnCount: fields.length,\n rowInitSize: AI_TABLE_FIELD_HEAD_HEIGHT,\n columnInitSize: AI_TABLE_ROW_HEAD_WIDTH,\n rowIndicesMap: {},\n columnIndicesMap: getColumnIndicesMap(fields),\n frozenColumnCount: 1\n });\n return {\n aiTable: this.aiTable,\n container: this.containerElement(),\n coordinate: coordinate,\n containerWidth: this.containerRect().width,\n containerHeight: this.containerRect().height,\n references: this.aiReferences()\n };\n });\n\n coordinate = computed(() => {\n return this.rendererConfig().coordinate;\n });\n\n scrollTotalHeight = computed(() => {\n return Math.max(this.coordinate().totalHeight, this.containerRect().height - this.fieldHeadHeight);\n });\n\n scrollbarWidth = computed(() => {\n return this.coordinate().totalWidth + AI_TABLE_FIELD_ADD_BUTTON_WIDTH;\n });\n\n constructor() {\n super();\n afterNextRender(() => {\n this.setContainerRect();\n this.bindGlobalMousedown();\n this.containerResizeListener();\n this.bindWheel();\n });\n effect(() => {\n if (this.hasContainerRect() && this.horizontalBarRef() && this.verticalBarRef()) {\n this.bindScrollBarScroll();\n }\n });\n effect(() => {\n if (this.aiTable.context?.pointPosition()) {\n this.toggleHoverCellEditor();\n }\n });\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.initContext();\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n private initContext() {\n this.aiTable.context = new RendererContext({\n linearRows: this.linearRows,\n visibleColumnsMap: this.visibleColumnsMap,\n visibleRowsIndexMap: this.visibleRowsIndexMap,\n pointPosition: signal(DEFAULT_POINT_POSITION),\n scrollState: signal(DEFAULT_SCROLL_STATE),\n scrollAction: this.scrollAction\n });\n }\n\n stageMousemove(e: KoEventObject<MouseEvent>) {\n if (this.timer) {\n cancelAnimationFrame(this.timer);\n }\n this.timer = requestAnimationFrame(() => {\n const targetName = e.event.target.name();\n const gridStage = e.event.currentTarget.getStage();\n const pos = gridStage?.getPointerPosition();\n if (pos == null) return;\n const { context } = this.aiTable;\n const { x, y } = pos;\n const curMousePosition = getMousePosition(\n x,\n y,\n this.coordinate(),\n AITable.getVisibleFields(this.aiTable),\n context!,\n targetName\n );\n handleMouseStyle(curMousePosition.realTargetName, curMousePosition.areaType, this.containerElement());\n context!.setPointPosition(curMousePosition);\n this.timer = null;\n });\n }\n\n stageMousedown(e: KoEventObject<MouseEvent>) {\n const mouseEvent = e.event.evt;\n const _targetName = e.event.target.name();\n\n const { targetName, fieldId, recordId } = getDetailByTargetName(_targetName);\n switch (targetName) {\n case AI_TABLE_FIELD_HEAD:\n mouseEvent.preventDefault();\n if (!fieldId) return;\n this.aiTableGridSelectionService.selectField(fieldId);\n return;\n case AI_TABLE_CELL:\n if (!recordId || !fieldId) return;\n this.aiTableGridEventService.closeCellEditor();\n this.aiTableGridSelectionService.selectCell(recordId, fieldId);\n return;\n case AI_TABLE_ROW_ADD_BUTTON:\n case AI_TABLE_FIELD_ADD_BUTTON:\n case AI_TABLE_ROW_SELECT_CHECKBOX:\n case AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX:\n return;\n default:\n this.aiTableGridSelectionService.clearSelection();\n }\n }\n\n stageClick(e: KoEventObject<MouseEvent>) {\n const mouseEvent = e.event.evt;\n mouseEvent.preventDefault();\n const { context } = this.aiTable;\n const { targetName, rowIndex: pointRowIndex } = context!.pointPosition();\n if (mouseEvent.button !== AITableMouseDownType.Left) return;\n switch (targetName) {\n case AI_TABLE_ROW_ADD_BUTTON: {\n this.aiTableGridSelectionService.clearSelection();\n this.addRecord();\n return;\n }\n case AI_TABLE_ROW_SELECT_CHECKBOX: {\n const pointRecordId = context!.linearRows()[pointRowIndex]?._id;\n this.selectRecord(pointRecordId);\n return;\n }\n case AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX: {\n const isChecked = this.aiTable.selection().selectedRecords.size === this.aiTable.records().length;\n this.toggleSelectAll(!isChecked);\n return;\n }\n case AI_TABLE_FIELD_ADD_BUTTON: {\n this.aiTableGridSelectionService.clearSelection();\n const fieldGroupRect = e.event.target.getParent()?.getClientRect()!;\n const containerRect = this.containerElement().getBoundingClientRect();\n this.addField(this.containerElement(), {\n x: fieldGroupRect.x + containerRect.x,\n y: containerRect.y + fieldGroupRect.y + fieldGroupRect.height\n });\n return;\n }\n case AI_TABLE_FIELD_HEAD_MORE:\n mouseEvent.preventDefault();\n const _targetName = e.event.target.name();\n const { fieldId } = getDetailByTargetName(_targetName);\n if (fieldId) {\n const moreRect = e.event.target.getClientRect();\n const fieldGroupRect = e.event.target.getParent()?.getParent()?.getClientRect()!;\n const containerRect = this.containerElement().getBoundingClientRect();\n\n const position = {\n x: containerRect.x + moreRect.x,\n y: containerRect.y + moreRect.y + moreRect.height\n };\n const editFieldPosition = {\n x: containerRect.x + fieldGroupRect.x - AI_TABLE_CELL_PADDING,\n y: containerRect.y + fieldGroupRect.y + fieldGroupRect.height\n };\n\n const editOrigin = this.containerElement().querySelector('.konvajs-content') as HTMLElement;\n this.aiTableGridFieldService.openFieldMenu(this.aiTable, {\n fieldId: fieldId,\n fieldMenus: this.fieldMenus,\n origin: this.containerElement(),\n position,\n editOrigin: editOrigin,\n editFieldPosition\n });\n }\n return;\n }\n }\n\n stageDblclick(e: KoEventObject<MouseEvent>) {\n const _targetName = e.event.target.name();\n const { fieldId, recordId } = getDetailByTargetName(_targetName);\n if (!recordId || !fieldId) {\n return;\n }\n const field = this.aiTable.fieldsMap()[fieldId];\n const fieldType = field.type;\n if (!DBL_CLICK_EDIT_TYPE.includes(fieldType)) {\n return;\n }\n setTimeout(() => {\n this.aiTableGridEventService.openCellEditor(this.aiTable, {\n container: this.containerElement(),\n coordinate: this.coordinate(),\n fieldId: fieldId!,\n recordId: recordId!,\n updateFieldValue: (value: UpdateFieldValueOptions<any>) => {\n this.aiUpdateFieldValue.emit(value);\n }\n });\n }, 0);\n }\n\n private bindWheel() {\n fromEvent<WheelEvent>(this.containerElement(), 'wheel', { passive: false })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((e: WheelEvent) => {\n e.preventDefault();\n this.aiTableGridEventService.closeCellEditor();\n this.scrollAction({ deltaX: e.deltaX, deltaY: e.deltaY, shiftKey: e.shiftKey });\n });\n }\n\n scrollAction = (options: ScrollActionOptions) => {\n if (this.timer) {\n cancelAnimationFrame(this.timer);\n }\n this.timer = requestAnimationFrame(() => {\n const { deltaX, deltaY, shiftKey } = options;\n const fixedDeltaY = shiftKey && isWindows ? 0 : deltaY;\n const fixedDeltaX = shiftKey && isWindows ? deltaY : deltaX;\n const horizontalBar = this.horizontalBarRef()?.nativeElement;\n const verticalBar = this.verticalBarRef()?.nativeElement;\n if (horizontalBar) {\n horizontalBar.scrollLeft = horizontalBar.scrollLeft + fixedDeltaX;\n }\n if (verticalBar) {\n verticalBar.scrollTop = verticalBar.scrollTop + fixedDeltaY;\n }\n options.callback && options.callback();\n this.timer = null;\n });\n };\n\n private bindScrollBarScroll() {\n fromEvent<WheelEvent>(this.horizontalBarRef()!.nativeElement, 'scroll', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((e) => {\n this.horizontalScroll(e);\n });\n\n fromEvent<WheelEvent>(this.verticalBarRef()!.nativeElement, 'scroll', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((e) => {\n this.verticalScroll(e);\n });\n }\n\n private bindGlobalMousedown() {\n fromEvent<MouseEvent>(document, 'mousedown', { passive: true })\n .pipe(\n filter((e) => e.target instanceof Element && !this.containerElement().contains(e.target)),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.aiTableGridSelectionService.clearSelection();\n });\n }\n\n private resetScrolling = () => {\n this.aiTable.context!.setScrollState({\n isScrolling: false\n });\n };\n\n private horizontalScroll = (e: any) => {\n const { scrollLeft } = e.target;\n this.aiTable.context!.setScrollState({\n scrollLeft,\n isScrolling: true\n });\n this.resetScrolling();\n };\n\n private verticalScroll(e: any) {\n const { scrollTop } = e.target;\n this.aiTable.context!.setScrollState({\n scrollTop,\n isScrolling: true\n });\n this.resetScrolling();\n }\n\n private setContainerRect() {\n this.containerRect.set({\n width: this.containerElement().offsetWidth,\n height: this.containerElement().offsetHeight\n });\n }\n\n private containerResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n const containerWidth = this.containerElement().offsetWidth;\n const totalWidth = this.coordinate().totalWidth + AI_TABLE_FIELD_ADD_BUTTON_WIDTH;\n this.setContainerRect();\n if (containerWidth >= totalWidth) {\n this.aiTable.context!.setScrollState({ scrollLeft: 0 });\n return;\n }\n });\n this.resizeObserver.observe(this.containerElement());\n }\n\n private toggleHoverCellEditor() {\n const { realTargetName } = this.aiTable.context?.pointPosition()!;\n const { targetName, fieldId, recordId } = getDetailByTargetName(realTargetName!);\n const editingCell = this.aiTableGridEventService.getCurrentEditCell();\n\n if (targetName === AI_TABLE_CELL && recordId && fieldId) {\n const field = this.aiTable.fieldsMap()[fieldId];\n\n if (!field) {\n return;\n }\n\n const fieldType = field.type;\n const editingFieldType = editingCell ? this.aiTable.fieldsMap()[editingCell.fieldId].type : null;\n const isEditingFieldTypeHovered = editingFieldType ? MOUSEOVER_EDIT_TYPE.includes(editingFieldType) : false;\n const isFieldTypeHovered = MOUSEOVER_EDIT_TYPE.includes(fieldType);\n\n if (editingCell && isEditingFieldTypeHovered) {\n this.aiTableGridEventService.closeCellEditor();\n }\n\n if (!editingCell && !isFieldTypeHovered) {\n this.aiTableGridEventService.closeCellEditor();\n return;\n }\n\n if (editingCell && ((!isEditingFieldTypeHovered && isFieldTypeHovered) || !isFieldTypeHovered)) {\n return;\n }\n\n setTimeout(() => {\n this.aiTableGridEventService.openCellEditor(this.aiTable, {\n container: this.containerElement(),\n coordinate: this.coordinate(),\n fieldId: fieldId!,\n recordId: recordId!,\n isHoverEdit: true,\n updateFieldValue: (value: UpdateFieldValueOptions<any>) => {\n this.aiUpdateFieldValue.emit(value);\n }\n });\n });\n } else {\n // 鼠标位于非单元格区域时,如果当前有 mouseover 编辑元素,则结束编辑\n if (editingCell && MOUSEOVER_EDIT_TYPE.includes(this.aiTable.fieldsMap()[editingCell.fieldId].type)) {\n this.aiTableGridEventService.closeCellEditor();\n }\n }\n }\n}\n","<div #container class=\"ai-table-grid-view\">\n @if (hasContainerRect()) {\n <ai-table-renderer\n [config]=\"rendererConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n >\n <div #horizontalBar class=\"ai-table-horizontal-scroll-bar-wrapper\" [style.width.px]=\"containerRect().width\">\n <div class=\"ai-table-scroll-bar-inner\" [style.width.px]=\"scrollbarWidth()\"></div>\n </div>\n <div\n #verticalBar\n class=\"ai-table-vertical-scroll-bar-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n <div class=\"ai-table-scroll-bar-inner\" [style.height.px]=\"scrollTotalHeight()\"></div>\n </div>\n </ai-table-renderer>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i2","Image","_"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAa,MAAA,MAAM,GAAG;AAClB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,mBAAmB,EAAE,SAAS;AAC9B,IAAA,iBAAiB,EAAE,WAAW;AAC9B,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,OAAO,EAAE,SAAS;;;ACIT,MAAA,OAAO,GAAG;IACnB,SAAS,GAAA;AACL,QAAA,OAAO,MAAM,CAAC;KACjB;AACD,IAAA,gBAAgB,CAAC,OAAgB,EAAA;AAC7B,QAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC5D;AACD,IAAA,cAAc,CAAC,OAAgB,EAAA;AAC3B,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;KAC5B;AACD,IAAA,aAAa,CAAC,OAAgB,EAAA;AAC1B,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,aAAa,GAAG,EAAE,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE;YAChE,KAAK,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACvC,gBAAA,IAAK,QAAuC,CAAC,OAAO,CAAC,EAAE;oBACnD,aAAa,CAAC,IAAI,CAAC;wBACf,QAAQ;wBACR,OAAO;AACV,qBAAA,CAAC,CAAC;iBACN;aACJ;SACJ;AACD,QAAA,OAAO,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;KAClD;IACD,aAAa,CAAC,OAAgB,EAAE,IAA2C,EAAA;QACvE,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAQ,CAAC,mBAAmB,EAAE,CAAC;QAClE,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAQ,CAAC,iBAAiB,EAAE,CAAC;AACnE,QAAA,OAAO,kBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC5F;IACD,YAAY,CAAC,OAAgB,EAAE,IAA2C,EAAA;QACtE,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAQ,CAAC,mBAAmB,EAAE,CAAC;QAClE,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAQ,CAAC,iBAAiB,EAAE,CAAC;QACnE,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACtC,OAAO;gBACH,QAAQ,EAAE,kBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAE;gBACjD,WAAW,EAAE,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAE;aACxD,CAAC;SACL;AACD,QAAA,OAAO,IAAI,CAAC;KACf;;;ICzDO,iBAeX;AAfD,CAAA,UAAY,gBAAgB,EAAA;AACxB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,WAAsB,CAAA;AACtB,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;;AAEjB,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,YAAwB,CAAA;AACxB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,YAAwB,CAAA;AACxB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,YAAwB,CAAA;AACxB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,YAAwB,CAAA;AAC5B,CAAC,EAfW,gBAAgB,KAAhB,gBAAgB,GAe3B,EAAA,CAAA,CAAA,CAAA;IAQW,gBAmBX;AAnBD,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,eAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,eAAA,CAAA,eAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACZ,IAAA,eAAA,CAAA,eAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,eAAA,CAAA,eAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;AAChB,IAAA,eAAA,CAAA,eAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB,CAAA;AACjB,IAAA,eAAA,CAAA,eAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB,CAAA;AACjB,IAAA,eAAA,CAAA,eAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,eAAA,CAAA,eAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,eAAA,CAAA,eAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAQ,CAAA;AACR,IAAA,eAAA,CAAA,eAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAQ,CAAA;AACR,IAAA,eAAA,CAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,iBAAoB,CAAA;AACpB,IAAA,eAAA,CAAA,eAAA,CAAA,mBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,mBAAsB,CAAA;AACtB,IAAA,eAAA,CAAA,eAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAY,CAAA;AACZ,IAAA,eAAA,CAAA,eAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAc,CAAA;AACd,IAAA,eAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,gBAAmB,CAAA;AACnB,IAAA,eAAA,CAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,kBAAqB,CAAA;AACzB,CAAC,EAnBW,eAAe,KAAf,eAAe,GAmB1B,EAAA,CAAA,CAAA,CAAA;IA+CW,yBAKX;AALD,CAAA,UAAY,wBAAwB,EAAA;AAChC,IAAA,wBAAA,CAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,wBAAA,CAAA,wBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,wBAAA,CAAA,wBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,wBAAA,CAAA,wBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACb,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,GAKnC,EAAA,CAAA,CAAA,CAAA;IA6DW,UAGX;AAHD,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACnB,CAAC,EAHW,SAAS,KAAT,SAAS,GAGpB,EAAA,CAAA,CAAA;;AC9JY,MAAA,YAAY,GAAyB;AAC9C,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,IAAI;AAC3B,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,GAAG;AACb,KAAA;;AAED,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,MAAM;AAC7B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,KAAK,EAAE,GAAG;AACb,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,MAAM;AAC7B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,QAAQ,EAAE;AACN,YAAA,WAAW,EAAE,IAAI;AACpB,SAAA;AACJ,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,MAAM;AAC7B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,KAAK,EAAE,GAAG;AACb,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,IAAI;AAC3B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,KAAK,EAAE,GAAG;AACb,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,MAAM;AAC7B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,QAAQ,EAAE;AACN,YAAA,WAAW,EAAE,IAAI;AACpB,SAAA;AACJ,KAAA;;;AAGD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,QAAQ;AAC/B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,KAAK,EAAE,GAAG;AACb,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,IAAI;AAC3B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,KAAK,EAAE,GAAG;AACb,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,IAAI;AAC3B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,KAAK,EAAE,GAAG;AACb,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,SAAS;AAChC,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,GAAG;AACb,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,SAAS;AAChC,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,KAAK,EAAE,GAAG;AACb,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,SAAS;AAChC,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,GAAG;AACb,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,SAAS;AAChC,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,KAAK,EAAE,GAAG;AACb,KAAA;;;ICzFO,kBAYX;AAZD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW,CAAA;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW,CAAA;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW,CAAA;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW,CAAA;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW,CAAA;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW,CAAA;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW,CAAA;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW,CAAA;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW,CAAA;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,SAAa,CAAA;AACb,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,SAAa,CAAA;AACjB,CAAC,EAZW,iBAAiB,KAAjB,iBAAiB,GAY5B,EAAA,CAAA,CAAA,CAAA;IAEW,kBAIX;AAJD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN,IAAA,iBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACR,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAI5B,EAAA,CAAA,CAAA,CAAA;IAEW,kBAIX;AAJD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACd,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAI5B,EAAA,CAAA,CAAA;;ICmCW,qBAIX;AAJD,CAAA,UAAY,oBAAoB,EAAA;AAC5B,IAAA,oBAAA,CAAA,oBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACJ,IAAA,oBAAA,CAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;AACN,IAAA,oBAAA,CAAA,oBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACT,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,GAI/B,EAAA,CAAA,CAAA;;ICfW,qBAGX;AAHD,CAAA,UAAY,oBAAoB,EAAA;AAC5B,IAAA,oBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACrB,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,GAG/B,EAAA,CAAA,CAAA,CAAA;IAgBW,iBAGX;AAHD,CAAA,UAAY,gBAAgB,EAAA;AACxB,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AAC3B,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,GAG3B,EAAA,CAAA,CAAA,CAAA;IAeW,gBAGX;AAHD,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACjB,CAAC,EAHW,eAAe,KAAf,eAAe,GAG1B,EAAA,CAAA,CAAA;;ICtFW,eAGX;AAHD,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACrB,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA;;ACHD;;AAEG;MACU,UAAU,CAAA;AAuBnB,IAAA,WAAA,CAAY,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,EACT,aAAa,GAAG,EAAE,EAClB,gBAAgB,GAAG,EAAE,EACrB,WAAW,GAAG,CAAC,EACf,cAAc,GAAG,CAAC,EAClB,iBAAiB,GAAG,CAAC,EACL,EAAA;;QAzBb,IAAa,CAAA,aAAA,GAAmB,EAAE,CAAC;;QAEnC,IAAgB,CAAA,gBAAA,GAAmB,EAAE,CAAC;;QAMtC,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC,CAAC;;QAElB,IAAe,CAAA,eAAA,GAAG,CAAC,CAAC,CAAC;QACrB,IAAc,CAAA,cAAA,GAAwC,EAAE,CAAC;QACzD,IAAiB,CAAA,iBAAA,GAAwC,EAAE,CAAC;AAc/D,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AACrC,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC;AAC5C,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AACzC,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC;AAC9C,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC9B;AAED,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IAED,IAAW,SAAS,CAAC,MAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;KAC5B;AAED;;AAEG;AACH,IAAA,IAAW,UAAU,GAAA;QACjB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjG,OAAO,MAAM,GAAG,IAAI,CAAC;KACxB;AAED;;AAEG;AACH,IAAA,IAAW,WAAW,GAAA;QAClB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC3F,OAAO,MAAM,GAAG,IAAI,CAAC;KACxB;AAED;;AAEG;AACI,IAAA,YAAY,CAAC,KAAa,EAAA;QAC7B,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;KACtD;AAED;;AAEG;AACI,IAAA,cAAc,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KACvC;AAED;;AAEG;IACO,eAAe,CAAC,KAAa,EAAE,QAA8B,EAAA;AACnE,QAAA,IAAI,eAAe,EAAE,iBAAiB,EAAE,MAAM,CAAC;AAC/C,QAAA,MAAM,YAAY,GAAG,QAAQ,KAAK,oBAAoB,CAAC,MAAM,CAAC;QAC9D,IAAI,YAAY,EAAE;AACd,YAAA,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;AAC7B,YAAA,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC;AACzC,YAAA,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC;SAC5C;aAAM;AACH,YAAA,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1B,YAAA,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC;AACtC,YAAA,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC;SACzC;AACD,QAAA,IAAI,KAAK,GAAG,iBAAiB,EAAE;AAC3B,YAAA,IAAI,iBAAiB,IAAI,CAAC,EAAE;AACxB,gBAAA,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;gBACxD,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;aACpD;AAED,YAAA,KAAK,IAAI,CAAC,GAAG,iBAAiB,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;gBAE/F,eAAe,CAAC,CAAC,CAAC,GAAG;oBACjB,MAAM;oBACN,IAAI;iBACP,CAAC;gBACF,MAAM,IAAI,IAAI,CAAC;aAClB;YACD,IAAI,YAAY,EAAE;AACd,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;aAChC;iBAAM;AACH,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;aAC7B;SACJ;AACD,QAAA,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;KAC3D;AAED;;;AAGG;AACK,IAAA,qBAAqB,CAAC,KAAa,EAAE,MAAc,EAAE,QAA8B,EAAA;AACvF,QAAA,MAAM,SAAS,GAAG,QAAQ,KAAK,oBAAoB,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9F,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,QAAA,OAAO,KAAK,GAAG,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE;YAC/E,KAAK,IAAI,QAAQ,CAAC;YAClB,QAAQ,IAAI,CAAC,CAAC;SACjB;AAED,QAAA,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;KACtH;AAED;;;AAGG;AACK,IAAA,6BAA6B,CAAC,MAAc,EAAE,GAAW,EAAE,IAAY,EAAE,QAA8B,EAAA;AAC3G,QAAA,OAAO,GAAG,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AAClD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC;AAEpE,YAAA,IAAI,aAAa,KAAK,MAAM,EAAE;AAC1B,gBAAA,OAAO,MAAM,CAAC;aACjB;AAAM,iBAAA,IAAI,aAAa,GAAG,MAAM,EAAE;AAC/B,gBAAA,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;aACpB;AAAM,iBAAA,IAAI,aAAa,GAAG,MAAM,EAAE;AAC/B,gBAAA,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;aACrB;SACJ;AACD,QAAA,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;KACjC;AAED;;AAEG;IACI,oBAAoB,CAAC,MAAc,EAAE,QAA8B,EAAA;AACtE,QAAA,IAAI,SAAS,CAAC;AACd,QAAA,IAAI,QAAQ,KAAK,oBAAoB,CAAC,MAAM,EAAE;AAC1C,YAAA,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;SACpC;aAAM;AACH,YAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;SACjC;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC;AACpE,QAAA,MAAM,sBAAsB,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;AAE9D,QAAA,IAAI,sBAAsB,IAAI,MAAM,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;SAC7E;AACD,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;KAC/E;AAED;;AAEG;AACI,IAAA,gBAAgB,CAAC,MAAc,EAAA;QAClC,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;KACtE;AAED;;AAEG;IACI,eAAe,CAAC,UAAkB,EAAE,SAAiB,EAAA;AACxD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAChF,QAAA,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;QACnD,IAAI,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;QACrD,IAAI,SAAS,GAAG,UAAU,CAAC;AAE3B,QAAA,OAAO,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,MAAM,GAAG,SAAS,EAAE;AACxD,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;SAC5E;AACD,QAAA,OAAO,SAAS,CAAC;KACpB;AAED;;AAEG;AACI,IAAA,mBAAmB,CAAC,MAAc,EAAA;QACrC,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;KACzE;AAED;;AAEG;IACI,kBAAkB,CAAC,UAAkB,EAAE,UAAkB,EAAA;AAC5D,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACnF,QAAA,MAAM,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC;QACnD,IAAI,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC;QACrD,IAAI,SAAS,GAAG,UAAU,CAAC;AAE3B,QAAA,OAAO,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,MAAM,GAAG,SAAS,EAAE;AAC3D,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;SAC/E;AACD,QAAA,OAAO,SAAS,CAAC;KACpB;AAED;;AAEG;AACI,IAAA,YAAY,CAAC,QAAgB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;KAC1E;AAED;;AAEG;AACI,IAAA,eAAe,CAAC,WAAmB,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;KAChF;AAED;;AAEG;AACH,IAAA,IAAI,iBAAiB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;KAC7E;AAED;;AAEG;IACI,WAAW,CAAC,QAAgB,EAAE,WAAmB,EAAA;QACpD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC7F,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAClG,OAAO;YACH,CAAC;YACD,CAAC;YACD,KAAK;YACL,MAAM;SACT,CAAC;KACL;AACJ;;SCtQe,SAAS,GAAA;AACrB,IAAA,OAAO,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC;;ACAa,MAAA,YAAY,GAAG,CAAC,KAAmB,KAAI;IAChD,QACI,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AACtG,QAAA,gBAAgB,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,EACxC;AACN,EAAE;AAEW,MAAA,aAAa,GAAG,CAAC,KAAmB,KAAI;IACjD,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAC5H,KAAK,CAAC,IAAI,CACb,CAAC;AACN,EAAE;AAEW,MAAA,aAAa,GAAG,CAAC,KAAmB,KAAI;IACjD,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5G,EAAE;AAEI,SAAU,oBAAoB,CAAC,KAAmB,EAAA;AACpD,IAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACrB,QAAA,OAAO,EAAE,CAAC;KACb;AACD,IAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,CAAC,CAAC;KACZ;AACD,IAAA,OAAO,EAAE,CAAC;AACd,CAAC;AAEe,SAAA,sBAAsB,CAAC,OAAgB,EAAE,KAAyB,EAAA;AAC9E,IAAA,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,WAAW,EAAE;AACb,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC3C,YAAA,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SACzC,CAAC,CAAC,MAAM,CAAC;AACV,QAAA,OAAO,KAAK,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC;KAC1E;AACD,IAAA,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,CAAC;AAEK,SAAU,qBAAqB,CAAC,KAA4B,EAAA;AAC9D,IAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AACvE,CAAC;AAEe,SAAA,iBAAiB,CAAC,WAA+B,EAAE,KAA4B,EAAA;AAC3F,IAAA,QACI,WAAW,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;AAC/B,SAAC,WAAW,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM;AACzC,cAAE,CAAC,CAAE,WAAW,CAAC,QAAuB,EAAE,WAAW,KAAK,CAAC,CAAE,KAAK,CAAC,QAAuB,EAAE,WAAW;AACvG,cAAE,IAAI,CAAC,EACb;AACN,CAAC;AAEK,SAAU,kBAAkB,CAAC,OAAgB,EAAE,IAAyB,GAAA,gBAAgB,CAAC,IAAI,EAAA;AAC/F,IAAA,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAE,CAAC;AACrE,IAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,sBAAsB,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;AAC1F;;ACvDgB,SAAA,aAAa,CAAC,OAAuC,EAAE,MAAqC,EAAA;AACxG,IAAA,MAAM,OAAO,GAAY;QACrB,OAAO;QACP,MAAM;QACN,SAAS,EAAE,MAAM,CAAC;YACd,eAAe,EAAE,IAAI,GAAG,EAAE;YAC1B,cAAc,EAAE,IAAI,GAAG,EAAE;YACzB,aAAa,EAAE,IAAI,GAAG,EAAE;SAC3B,CAAC;AACF,QAAA,UAAU,EAAE,QAAQ,CAAC,MAAK;YACtB,OAAO,OAAO,EAAE,CAAC,MAAM,CACnB,CAAC,MAAM,EAAE,IAAI,KAAI;AACb,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACxB,gBAAA,OAAO,MAAM,CAAC;aACjB,EACD,EAAsC,CACzC,CAAC;AACN,SAAC,CAAC;AACF,QAAA,SAAS,EAAE,QAAQ,CAAC,MAAK;YACrB,OAAO,MAAM,EAAE,CAAC,MAAM,CAClB,CAAC,MAAM,EAAE,IAAI,KAAI;AACb,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACxB,gBAAA,OAAO,MAAM,CAAC;aACjB,EACD,EAAqC,CACxC,CAAC;AACN,SAAC,CAAC;AACF,QAAA,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC;AAC7B,QAAA,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;KAC9B,CAAC;AACF,IAAA,OAAO,OAAO,CAAC;AACnB;;ACnBa,MAAA,cAAc,GAAG;IAC1B,cAAc,CAAC,OAAgB,EAAE,MAAqB,EAAA;AAClD,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE;YACrD,OAAO,CAAC,WAAW,CAAe,CAAC;SACtC;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC,CAAC;KAC7F;IACD,aAAa,CAAC,OAAgB,EAAE,KAAmB,EAAA;AAC/C,QAAA,MAAM,UAAU,GAAG,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,EAAE;YACnD,OAAO,CAAC,UAAU,CAAe,CAAC;SACrC;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC,CAAC;KAC3F;IACD,aAAa,CAAC,OAAgB,EAAE,IAAwB,EAAA;QACpD,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC,CAAC;SAC7C;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC,CAAC;SAC7C;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,CAAuB,CAAC,CAAC;SAC5C;QACD,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAA,CAAA,CAAG,CAAC,CAAC;SAC5D;AACD,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAA,CAAA,CAAG,CAAC,CAAC;SAC5D;AACD,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAA,CAAA,CAAG,CAAC,CAAC;SAC3D;AACD,QAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;YACtB,OAAO,cAAc,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAwB,CAAC,CAAC;SACrF;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACjC;IACD,mBAAmB,CAAC,MAAqB,EAAE,IAAsB,EAAA;AAC7D,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,IAAI,KAAK,gBAAgB,CAAC,SAAS,IAAI,IAAI,KAAK,gBAAgB,CAAC,SAAS,EAAE;AAC5E,YAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAoB,CAAC;SACjD;AACD,QAAA,IAAI,IAAI,KAAK,gBAAgB,CAAC,SAAS,IAAI,IAAI,KAAK,gBAAgB,CAAC,SAAS,EAAE;YAC5E,OAAO,CAAC,KAAK,CAAqB,CAAC;SACtC;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAA,CAAE,CAAC,CAAC;KACzC;IACD,QAAQ,CAAC,OAAgB,EAAE,IAAY,EAAA;QACnC,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC,CAAC;SAC7C;QACD,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAA,CAAA,CAAG,CAAC,CAAC;SAC5D;QACD,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAChE;IAED,SAAS,CAAC,OAAgB,EAAE,IAAgB,EAAA;QACxC,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC,CAAC;SAC7C;QACD,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAA,CAAA,CAAG,CAAC,CAAC;SAC5D;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACrC;;;MCjFQ,eAAe,CAAA;AAQxB,IAAA,WAAA,CAAY,OAAuB,EAAA;AAC/B,QAAA,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;AACjH,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC3C,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;KAClD;AAED,IAAA,gBAAgB,CAAC,QAAuC,EAAA;AACpD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACzC,QAAA,IACI,WAAW,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;AAC1C,YAAA,WAAW,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;AAC1C,YAAA,WAAW,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW;AAChD,YAAA,WAAW,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,EAChD;YACE,MAAM,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;SACvC;KACJ;AAED,IAAA,cAAc,CAAC,WAAwC,EAAA;AACnD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;KACnE;AACJ;;MC3BqB,sBAAsB,CAAA;AAN5C,IAAA,WAAA,GAAA;QAaI,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAAmC,CAAC;AAI7D,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YAClB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO,CAAe,CAAC;AAChE,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;YACnB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpD,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,UAAU,GAA4B,MAAM,EAAC,UAAuB,EAAC,CAAC;AAE5D,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,EAAC,aAA6C,GAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAqBvG,KAAA;IAnBG,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAK;YAC5B,OAAO,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5F,CAAC,EAAE,CAAC;KACR;IAED,MAAM,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;YACvG,OAAO;SACV;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,UAAU;AACtB,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;AAC9C,SAAA,CAAC,CAAC;KACN;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;KAC/B;8GAzCiB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,2MAJ9B,CAAE,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAIM,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,CAAE,CAAA;AACZ,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;8BAE8B,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAEE,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAEE,QAAQ,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;;;ACkBvB,MAAO,uBAAwB,SAAQ,sBAAsC,CAAA;IACtE,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAK;YAC5B,MAAM,KAAK,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAChG,IAAI,CAAC,KAAK,EAAE;gBACR,OAAO;AACH,oBAAA,SAAS,EAAE,CAAC;iBACf,CAAC;aACL;AACD,YAAA,OAAO,KAAK,CAAC;SAChB,CAAC,EAAE,CAAC;KACR;AAED,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACvB,YAAA,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;AAC3B,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;AAC9C,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;AAED,IAAA,aAAa,CAAC,MAAe,EAAA;QACzB,IAAI,CAAC,MAAM,EAAE;YACT,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;KACJ;8GAzBQ,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAxBtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;AAgBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGS,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAKhD,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA1BnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;AAgBT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,mBAAmB,CAAC;AAC1D,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,kBAAkB;AAC5B,qBAAA;AACJ,iBAAA,CAAA;;;AChBM,MAAM,cAAc,GAAG,oDAAoD,CAAC;AAEnF;;AAEG;MAeU,iBAAiB,CAAA;AAiB1B,IAAA,WAAA,CAAmB,aAAqC,EAAA;QAArC,IAAa,CAAA,aAAA,GAAb,aAAa,CAAwB;QAhB/C,IAAG,CAAA,GAAA,GAAG,EAAE,CAAC;QAET,IAAI,CAAA,IAAA,GAAG,EAAE,CAAC;AAET,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAiC,CAAC;QAE/D,IAAQ,CAAA,QAAA,GAAG,cAAc,CAAC;AAEjC,QAAA,IAAA,CAAA,eAAe,GAAG;AACd,YAAA,kBAAkB,EAAE;AAChB,gBAAA,GAAG,EAAE;AACD,oBAAA,OAAO,EAAE,SAAS;AACrB,iBAAA;AACJ,aAAA;SACJ,CAAC;KAE0D;AAE5D,IAAA,QAAQ,MAAK;IAEb,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KAC9B;AAED,IAAA,KAAK,CAAC,IAAsB,EAAA;QACxB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACxB,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACvD,OAAO;SACV;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;AAC/D,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3B;8GApCQ,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,ECnC9B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,s/BAsBA,EDIQ,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,isCACX,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,iBAAiB,EAAA,QAAA,EAAA,uDAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,qBAAqB,EACrB,QAAA,EAAA,4CAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,EACT,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,SAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,yGACtB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,wBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,0BAAA,EAAA,kBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGR,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAd7B,SAAS;+BACI,WAAW,EAAA,UAAA,EAET,IAAI,EACP,OAAA,EAAA;wBACL,WAAW;wBACX,2BAA2B;wBAC3B,iBAAiB;wBACjB,qBAAqB;wBACrB,SAAS;wBACT,sBAAsB;wBACtB,aAAa;AAChB,qBAAA,EAAA,QAAA,EAAA,s/BAAA,EAAA,CAAA;oFAGQ,GAAG,EAAA,CAAA;sBAAX,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEI,OAAO,EAAA,CAAA;sBAAhB,MAAM;;;AEPL,MAAO,uBAAwB,SAAQ,sBAAqD,CAAA;AApBlG,IAAA,WAAA,GAAA;;QAwBI,IAAI,CAAA,IAAA,GAAG,EAAE,CAAC;QAEV,IAAG,CAAA,GAAA,GAAG,EAAE,CAAC;QAET,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;AAEjB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAEhC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEhC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAEzC,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AA2EpB,KAAA;AAzEG,IAAA,WAAW,CAAC,IAAmC,EAAA;QAC3C,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC;SACf;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACX,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzC;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,eAAe,CAAC,IAAmC,EAAA;QAC/C,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;SAChC;aAAM;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAC7B,YAAA,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;SAClD;KACJ;AAEM,IAAA,IAAI,CAAC,KAAiB,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACzE,IAAI,CAAE,KAAK,CAAC,aAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;YACzD,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;KACJ;IAEQ,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC;KACxC;IAED,WAAW,GAAA;QACP,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE;YAC7D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/C,OAAO;SACV;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;YAC/C,KAAK,CAAC,MAAM,EAAE,CAAA;AACd,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;SACtC;KACJ;IAED,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACvD,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa;AACrC,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI;AACvD,YAAA,YAAY,EAAE;AACV,gBAAA,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;AACnB,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;AACxB,aAAA;AACJ,SAAA,CAAC,CAAC;QAEH,IAAI,UAAU,EAAE;YACZ,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAoC,KAAI;AACpF,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACvB,gBAAA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;gBACrB,IAAI,CAAC,WAAW,EAAE,CAAC;AACvB,aAAC,CAAC,CAAC;AAEH,YAAA,UAAU,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,MAAK;AACrC,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC5B,aAAC,CAAC,CAAC;SACN;KACJ;8GA1FQ,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,mQCjCpC,0rBAwBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDLQ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,qBAAqB,EACrB,QAAA,EAAA,4CAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EACjB,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,8KACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,2BAAA,EAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,SAAS,EACT,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,iMACd,qBAAqB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAOhB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBApBnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAEhB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,WAAW;wBACX,qBAAqB;wBACrB,iBAAiB;wBACjB,aAAa;wBACb,gBAAgB;wBAChB,SAAS;wBACT,cAAc;wBACd,qBAAqB;wBACrB,iBAAiB;qBACpB,EACK,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE,sBAAsB;AAChC,qBAAA,EAAA,QAAA,EAAA,0rBAAA,EAAA,CAAA;8BAID,YAAY,EAAA,CAAA;sBADX,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;;;AEZ1C,MAAO,yBAA0B,SAAQ,sBAA8B,CAAA;IACzE,WAAW,GAAA;QACP,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;8GAJQ,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAdxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;AAMN,OAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGM,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAyB,iBAAiB,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,cAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAKtE,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAhBrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,CAAA;;;;;;AAMN,OAAA,CAAA;AACJ,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,WAAW,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,CAAC;AAChF,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,oBAAoB;AAC9B,qBAAA;AACJ,iBAAA,CAAA;;;ACkBK,MAAO,uBAAwB,SAAQ,sBAA8B,CAAA;AAzB3E,IAAA,WAAA,GAAA;;AA0BI,QAAA,IAAA,CAAA,MAAM,GAA+C;AACjD,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,IAAI,EAAE,IAAI;SACb,CAAC;AAWL,KAAA;AARG,IAAA,gBAAgB,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;AAED,IAAA,sBAAsB,CAAC,KAAY,EAAA;QAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;KAC3B;8GAlBQ,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAvBtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,0BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,2BAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;KAYT,EAGS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,+VAAE,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAQvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAzBnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;AAYT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;AACjC,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,2BAA2B;AAClC,wBAAA,aAAa,EAAE,cAAc;AAC7B,wBAAA,gBAAgB,EAAE,aAAa;AAC/B,wBAAA,iBAAiB,EAAE,cAAc;AACpC,qBAAA;AACJ,iBAAA,CAAA;8BAYG,gBAAgB,EAAA,CAAA;sBADf,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AClCnC,MAAO,yBAA0B,SAAQ,sBAA8B,CAAA;8GAAhE,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EARxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oDAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,2EAAA,CAA6E,EAG7E,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,+VAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAKrB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAVrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,CAA6E,2EAAA,CAAA;AACvF,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC;AAC/B,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,oDAAoD;AAC9D,qBAAA;AACJ,iBAAA,CAAA;;;MCNY,gBAAgB,CAAA;IACzB,SAAS,CAAC,GAAW,EAAE,OAA8B,EAAA;AACjD,QAAA,OAAO,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;KACtE;8GAHQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;;MAWY,iBAAiB,CAAA;AAC1B,IAAA,SAAS,CAAC,GAAa,EAAE,OAAA,GAAiC,EAAE,EAAA;AACxD,QAAA,QACI,CAAC,GAAG,EAAE,MAAM;AACR,YAAA,GAAG,CAAC,GAAG,CAAC,CAAC,EAAU,KAAI;AACnB,gBAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;AACnD,aAAC,CAAC;AACN,YAAA,EAAE,EACJ;KACL;8GATQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA,EAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;;MAiBY,kBAAkB,CAAA;IAC3B,SAAS,CAAC,QAAgB,EAAE,SAA2B,EAAA;QACnD,OAAO,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KAClD;8GAHQ,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA,EAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;;MAWY,QAAQ,CAAA;IACjB,SAAS,CAAC,MAAgB,EAAE,UAA6B,EAAA;AACrD,QAAA,QACI,CAAC,MAAM,CAAC,MAAM;AACV,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBAChB,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1C,aAAC,CAAC;AACN,YAAA,EAAE,EACJ;KACL;8GATQ,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAJpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;;MAiBY,iBAAiB,CAAA;AAC1B,IAAA,SAAS,CAAC,QAA8B,EAAA;AACpC,QAAA,OAAO,QAA0B,CAAC;KACrC;8GAHQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA,EAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;;MAWY,iBAAiB,CAAA;AAC1B,IAAA,SAAS,CAAC,QAA8B,EAAA;AACpC,QAAA,OAAO,QAA0B,CAAC;KACrC;8GAHQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA,EAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;;;MClDY,qBAAqB,CAAA;AAXlC,IAAA,WAAA,GAAA;AAYI,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAgB,CAAC;AAEvC,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAuB,CAAC;AAEtD,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,OAAQ,IAAI,CAAC,KAAK,EAAyB,CAAC,QAAQ,CAAC,YAAY,IAAI,wBAAwB,CAAC,IAAI,CAAC;AACvG,SAAC,CAAC,CAAC;QAEH,IAAwB,CAAA,wBAAA,GAAG,wBAAwB,CAAC;AACvD,KAAA;8GAVY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,8CAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBlC,0qDAgCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDfc,MAAM,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAE3D,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAXjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAEb,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE,wBAAwB;AAC/B,wBAAA,2BAA2B,EAAE,8CAA8C;qBAC9E,EACQ,OAAA,EAAA,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,0qDAAA,EAAA,CAAA;;;AEuBnE,MAAO,yBAA0B,SAAQ,sBAA6D,CAAA;AASxG,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC9C;AAED,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE,CAAC;AAbZ,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;YAC1B,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;AACzC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACnB,YAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,YAAY,KAAK,wBAAwB,CAAC,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;AACjI,SAAC,CAAC,CAAC;KAQF;IAEQ,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAK;YAC5B,MAAM,KAAK,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAChG,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,gBAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;aACnB;YACD,OAAO,KAAK,IAAI,EAAE,CAAC;SACtB,CAAC,EAAE,CAAC;KACR;AAED,IAAA,WAAW,CAAC,KAAc,EAAA;QACtB,IAAI,CAAC,KAAK,EAAE;YACR,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAK,CAAC,IAAI,CAAC,UAAU,CAAc,KAAK,EAAE,CAAC;AAC7G,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACvB,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC;AAC9C,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;KACJ;8GApCQ,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,ECxCtC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kCAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,0uBAiBA,EDSQ,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAEX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,EACT,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,qBAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,EAGT,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAIhB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,6FACrB,cAAc,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGT,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAvBrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAElB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE,kCAAkC;qBAC5C,EACQ,OAAA,EAAA;wBACL,WAAW;wBACX,gBAAgB;wBAChB,SAAS;wBACT,SAAS;wBACT,MAAM;wBACN,OAAO;wBACP,gBAAgB;wBAChB,MAAM;wBACN,eAAe;wBACf,gBAAgB;wBAChB,qBAAqB;wBACrB,cAAc;AACjB,qBAAA,EAAA,QAAA,EAAA,0uBAAA,EAAA,CAAA;;;AEXC,MAAO,uBAAwB,SAAQ,sBAA8B,CAAA;AAKvE,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE,CAAC;AALJ,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAE5B,IAAS,CAAA,SAAA,GAAG,GAAG,CAAC;KAIvB;IAED,eAAe,GAAA;QACX,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,WAAW,EAAE,CAAC;AACvB,SAAC,CAAC,CAAC;KACN;IAED,WAAW,GAAA;AACP,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,QAAQ,EAAE;YACV,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;AAC/F,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA,EAAA,CAAI,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SACrD;KACJ;IAED,WAAW,GAAA;QACP,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAED,WAAW,GAAA;QACP,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;8GAhCQ,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAnBtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;AAWT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGS,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EAAE,QAAA,EAAA,4CAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,+IAAE,iBAAiB,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAKzE,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBArBnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;AAWT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,WAAW,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,CAAC;AACnF,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,kBAAkB;AAC5B,qBAAA;AACJ,iBAAA,CAAA;;;MCwCY,0BAA0B,CAAA;AAtCvC,IAAA,WAAA,GAAA;AAuCI,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAgB,CAAC;QAIpC,IAAkB,CAAA,kBAAA,GAA4B,IAAI,CAAC;QAI5D,IAAQ,CAAA,QAAA,GAAG,MAAM,EAAgB,CAAC;QAElC,IAAQ,CAAA,QAAA,GAAG,MAAM,EAAmB,CAAC;AAErC,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAE,CAAC;AACtD,SAAC,CAAC,CAAC;QAEH,IAAc,CAAA,cAAA,GAAG,EAAE,CAAC;AAEpB,QAAA,IAAA,CAAA,eAAe,GAA2B;AACtC,YAAA,kBAAkB,EAAE;AAChB,gBAAA,SAAS,EAAE;AACP,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,cAAc,EAAE,OAAO;AAC1B,iBAAA;AACJ,aAAA;SACJ,CAAC;QAEF,IAAY,CAAA,YAAA,GAAG,YAAY,CAAC;AAElB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,EAAC,aAAyC,EAAC,CAAC;AAE5E,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,SAAiB,KAAI;AACpC,YAAA,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;AAC9B,YAAA,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3H,SAAC,CAAC;AA0BL,KAAA;AAxBG,IAAA,eAAe,CAAC,KAAyB,EAAA;QACrC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;AACxC,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,YAAA,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;AAC3D,SAAC,CAAC,CAAC;KACN;IAED,iBAAiB,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACf,gBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE;gBACzB,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;AACjC,aAAA,CAAC,CAAC;SACN;aAAM;YACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;SAC1C;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KAC9B;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KAC9B;8GA5DQ,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAOf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,gBAAgB,ECzExC,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mDAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,8wEAiDA,8EDfQ,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEJ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,OAAO,EAEP,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EACb,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,4BAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,kFACb,iBAAiB,EAAA,QAAA,EAAA,uDAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEjB,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,oBAAoB,EACpB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,EACxB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,4BAA4B,sGAC5B,gCAAgC,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEhC,SAAS,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,SAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACT,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,wBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,0BAAA,EAAA,kBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,EACX,QAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,oJAChB,qBAAqB,EAAA,QAAA,EAAA,4CAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAahB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAtCtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,cAE9B,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,IAAI;wBACJ,OAAO;wBACP,WAAW;wBACX,OAAO;wBACP,QAAQ;wBACR,aAAa;wBACb,aAAa;wBACb,iBAAiB;wBACjB,4BAA4B;wBAC5B,uBAAuB;wBACvB,oBAAoB;wBACpB,wBAAwB;wBACxB,4BAA4B;wBAC5B,gCAAgC;wBAChC,gCAAgC;wBAChC,SAAS;wBACT,aAAa;wBACb,WAAW;wBACX,gBAAgB;wBAChB,qBAAqB;qBACxB,EACK,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE,mDAAmD;AAC7D,qBAAA,EAAA,QAAA,EAAA,8wEAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,CAAA;8BAY0B,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAEhB,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEkC,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;;;AE9D7B,MAAA,oBAAoB,GAA2C;AACxE,IAAA,CAAC,gBAAgB,CAAC,IAAI,GAAG,uBAAuB;AAChD,IAAA,CAAC,gBAAgB,CAAC,QAAQ,GAAG,uBAAuB;AACpD,IAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG,yBAAyB;AACpD,IAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG,yBAAyB;AACpD,IAAA,CAAC,gBAAgB,CAAC,IAAI,GAAG,uBAAuB;AAChD,IAAA,CAAC,gBAAgB,CAAC,IAAI,GAAG,yBAAyB;AAClD,IAAA,CAAC,gBAAgB,CAAC,IAAI,GAAG,uBAAuB;AAChD,IAAA,CAAC,gBAAgB,CAAC,QAAQ,GAAG,uBAAuB;;;ACnB3C,MAAA,2BAA2B,GAAG,GAAG;AACjC,MAAA,6BAA6B,GAAG,IAAI;AACpC,MAAA,2BAA2B,GAAG,EAAE;AAChC,MAAA,eAAe,GAAG,IAAI;AACtB,MAAA,iBAAiB,GAAG,EAAE;AAEtB,MAAA,iBAAiB,GAAG,oBAAoB;AACxC,MAAA,uBAAuB,GAAG,GAAG;AAC7B,MAAA,sBAAsB,GAAG,GAAG;AAC5B,MAAA,uBAAuB,GAAG,0BAA0B;AACpD,MAAA,cAAc,GAAG,iBAAiB;AAElC,MAAA,mBAAmB,GAAG,sBAAsB;AAC5C,MAAA,0BAA0B,GAAG,GAAG;AAChC,MAAA,yBAAyB,GAAG,GAAG;AAC/B,MAAA,mBAAmB,GAAG,GAAG;AACzB,MAAA,iCAAiC,GAAG,EAAE;AACtC,MAAA,kCAAkC,GAAG,GAAG;AACxC,MAAA,4BAA4B,GAAG,+BAA+B;AAC9D,MAAA,mCAAmC,GAAG,sCAAsC;AAC5E,MAAA,yBAAyB,GAAG,4BAA4B;AACxD,MAAA,+BAA+B,GAAG,IAAI;AACtC,MAAA,iCAAiC,GAAG,EAAE;AACtC,MAAA,wBAAwB,GAAG,2BAA2B;AAEtD,MAAA,yBAAyB,GAAG,GAAG;AAC/B,MAAA,aAAa,GAAG,gBAAgB;AAC7C;AACa,MAAA,qBAAqB,GAAG,GAAG;AAC3B,MAAA,oBAAoB,GAAG,EAAE;AAC/B,MAAM,+BAA+B,GAAG,GAAG;AAC3C,MAAM,mCAAmC,GAAG,EAAE;AAC9C,MAAM,gCAAgC,GAAG,EAAE;AAClD;AACO,MAAM,uBAAuB,GAAG,GAAG;AACnC,MAAM,8BAA8B,GAAG,EAAE;AACzC,MAAM,oCAAoC,GAAG,EAAE;AACzC,MAAA,qCAAqC,GAAG,EAAE;AAC1C,MAAA,4CAA4C,GAAG,GAAG;AAClD,MAAA,kCAAkC,GAAG,GAAG;AACxC,MAAA,2BAA2B,GAAG,EAAE;AACtC,MAAM,wBAAwB,GAAG,GAAG;AACpC,MAAM,2BAA2B,GAAG,EAAE;AAChC,MAAA,+BAA+B,GAAG,IAAI;AACtC,MAAA,gCAAgC,GAAG,GAAG;AACtC,MAAA,iCAAiC,GAAG,EAAE;AACtC,MAAA,kCAAkC,GAAG,GAAG;AAExC,MAAA,2BAA2B,GAAG,GAAG;AACjC,MAAA,kCAAkC,GAAG,EAAE;AACvC,MAAA,wCAAwC,GAAG,EAAE;AAE7C,MAAA,4BAA4B,GAAG,GAAG;AACxC,MAAM,2BAA2B,GAAG,GAAG;AACvC,MAAM,8BAA8B,GAAG,GAAG;AAC1C,MAAM,2BAA2B,GAAG,GAAG;AACvC,MAAM,oBAAoB,GAAG,GAAG;AAChC,MAAM,sBAAsB,GAAG,GAAG;AAElC,MAAM,oBAAoB,GAAG,GAAG;AAChC,MAAM,qBAAqB,GAAG,EAAE;AAChC,MAAM,yBAAyB,GAAG,GAAG;AACrC,MAAM,mBAAmB,GAAG,EAAE;AAE9B,MAAM,4BAA4B,GAAG,GAAG;AACxC,MAAM,4BAA4B,GAAG,EAAE;AACvC,MAAM,4BAA4B,GAAG,GAAG;AACxC,MAAM,4BAA4B,GAAG;;AC/DrC,MAAM,gBAAgB,GAAG,GAAG;AAEtB,MAAA,mBAAmB,GAAG;AAC/B,IAAA,gBAAgB,CAAC,IAAI;AACrB,IAAA,gBAAgB,CAAC,MAAM;AACvB,IAAA,gBAAgB,CAAC,MAAM;AACvB,IAAA,gBAAgB,CAAC,IAAI;AACrB,IAAA,gBAAgB,CAAC,MAAM;AACvB,IAAA,gBAAgB,CAAC,IAAI;EACvB;AAEK,MAAM,mBAAmB,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,IAAI,EAAE;AAEzE,MAAA,SAAS,GAAG;AACrB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,SAAS,EAAE,GAAG;EAChB;AAEW,MAAA,sBAAsB,GAAG;IAClC,QAAQ,EAAE,eAAe,CAAC,IAAI;AAC9B,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,cAAc,EAAE,cAAc;IAC9B,QAAQ,EAAE,CAAC,CAAC;IACZ,WAAW,EAAE,CAAC,CAAC;AACf,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,UAAU,EAAE,CAAC;EACf;AAEW,MAAA,oBAAoB,GAAG;AAChC,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE,KAAK;;;ACvCf,MAAM,kBAAkB,GAAG,SAAS;AACpC,MAAM,iBAAiB,GAAG,GAAG;AAEvB,MAAA,KAAK,GAAG,CAAA;;;;IAIjB;AAES,MAAA,SAAS,GAAG,CAAA;;;IAGrB;AAEG,MAAM,oBAAoB,GAAG,qhBAAqhB;AAEljB,MAAM,sBAAsB,GAAG,8JAA8J;AAE7L,MAAM,sBAAsB,GAAG,mWAAmW;AAElY,MAAM,wBAAwB,GAAG,8LAA8L;AAE/N,MAAM,sBAAsB,GAAG,mXAAmX;AAElZ,MAAM,sBAAsB,GAAG,moCAAmoC;AAElqC,MAAM,sBAAsB,GAAG,qjBAAqjB;AAEplB,MAAM,sBAAsB,GAAG,yMAAyM;AAExO,MAAM,wBAAwB,GAAG,+IAA+I;AAEhL,MAAM,eAAe,GAAG,qJAAqJ;AAE7K,MAAM,qBAAqB,GAAG,6XAA6X;AAE3Z,MAAM,QAAQ,GAAG,wZAAwZ;AAEza,MAAM,eAAe,GAAG,40CAA40C;AAEp2C,MAAM,sBAAsB,GAAG;;ACtC/B,MAAM,iBAAiB,GAAG,GAAG;AAC7B,MAAM,mBAAmB,GAC5B,2JAA2J;AACxJ,MAAM,kBAAkB,GAAG,SAAS;AACpC,MAAM,wBAAwB,GAAG,GAAG;AAC9B,MAAA,iBAAiB,GAAG,MAAM,CAAC,QAAQ;AACzC,MAAM,mBAAmB,GAAG,SAAS;AACrC,MAAM,iBAAiB,GAAG,OAAO;AACjC,MAAM,+BAA+B,GAAG,WAAW;AACnD,MAAM,qBAAqB,GAAG,KAAK;AACnC,MAAM,sBAAsB,GAAG,MAAM;AACrC,MAAM,uBAAuB,GAAG,OAAO;AACvC,MAAM,yBAAyB,GAAG,SAAS;AAC3C,MAAM,wBAAwB,GAAG,QAAQ;AACzC,MAAM,kCAAkC,GAAG,SAAS;AACpD,MAAM,uBAAuB,GAAG,IAAI;AACpC,MAAM,yBAAyB,GAAG,EAAE;AACpC,MAAM,+BAA+B,GAAG,MAAM;AAC9C,MAAM,uBAAuB,GAAG,OAAO;AACvC,MAAM,kBAAkB,GAAG,EAAE;AAC7B,MAAM,sBAAsB,GAAG,IAAI;AACnC,MAAM,YAAY,GAAG;;ACItB,MAAO,SAAU,SAAQ,uBAAuB,CAAA;AAdtD,IAAA,WAAA,GAAA;;AAyBI,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YAClB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAE,CAAC;AAC5E,SAAC,CAAC,CAAC;AAON,KAAA;AALG,IAAA,OAAO,CAAC,IAA0B,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC/E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAChF;KACJ;8GAnBQ,SAAS,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAT,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,mNC3BtB,8eAYA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDOQ,OAAO,EACP,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAU,qJAEV,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAKvB,SAAS,EAAA,UAAA,EAAA,CAAA;kBAdrB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cAEV,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,OAAO;wBACP,UAAU;wBACV,wBAAwB;wBACxB,4BAA4B;wBAC5B,gCAAgC;wBAChC,gCAAgC;AACnC,qBAAA,EAAA,QAAA,EAAA,8eAAA,EAAA,CAAA;8BAG0B,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAEE,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAEE,UAAU,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAEhB,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;AEhCG,MAAA,mBAAmB,GAAG,CAAC,cAA8B,KAAwB;IACtF,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,IAAI,eAAe,GAAG,CAAC,CAAC;AACxB,IAAA,CAAC,GAAG,cAAc,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC7C,QAAA,IAAI,GAAG,CAAC,GAAG,EAAE;AACT,YAAA,eAAe,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,cAAc,CAAC,MAAM;gBAC3B,GAAG,EAAE,GAAG,CAAC,GAAG;AACZ,gBAAA,YAAY,EAAE,eAAe;AAChC,aAAA,CAAC,CAAC;SACN;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;YACV,UAAU,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,cAAc,CAAC,GAAG;AACxB,gBAAA,GAAG,EAAE,EAAE;AACV,aAAA,CAAC,CAAC;SACN;AACL,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,UAAU,CAAC;AACtB,EAAE;MAEW,aAAa,GAAG,CAAC,WAA2B,EAAE,WAA0B,KAAqB;IACtG,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;AACrC,QAAA,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAE,CAAC;QAC3E,OAAO;AACH,YAAA,GAAG,KAAK;AACR,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI;AACpC,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK;SAC1C,CAAC;AACN,KAAC,CAAC,CAAC;IACH,OAAO;AACH,QAAA,IAAI,EAAE,MAAM;QACZ,MAAM;AACN,QAAA,OAAO,EAAE,WAAW;KACvB,CAAC;AACN;;ACjCa,MAAA,+BAA+B,GAAG,IAAI,OAAO,GAAqC;MAGlF,uBAAuB,CAAA;AAGhC,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;KAAI;AAE9C,IAAA,iBAAiB,CAAC,aAAwC,EAAA;AACtD,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;KACtC;IAED,iBAAiB,CAAC,OAAgB,EAAE,OAAgC,EAAA;QAChE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,mBAAmB,IAAI,0BAA0B,CAAC;AACxF,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;YACnC,MAAM;AACN,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,YAAY,EAAE;gBACV,OAAO;AACP,gBAAA,WAAW,EAAE,KAAK;gBAClB,QAAQ;AACX,aAAA;AACJ,SAAA,CAAC,CAAC;KACN;IAED,aAAa,CAAC,OAAgB,EAAE,OAAgC,EAAA;AAC5D,QAAA,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QACtE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;YACxC,MAAM;AACN,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,YAAY,EAAE;AACV,gBAAA,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,OAAO,CAAC,iBAAiB;gBACnC,OAAO;gBACP,OAAO;gBACP,UAAU;AACb,aAAA;AACJ,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,GAAG,CAAC;KACd;8GAzCQ,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAvB,uBAAuB,EAAA,CAAA,CAAA,EAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;;;MCLE,2BAA2B,CAAA;AAGpC,IAAA,WAAA,GAAA,GAAgB;AAEhB,IAAA,UAAU,CAAC,OAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KAC1B;IAED,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;YACvB,eAAe,EAAE,IAAI,GAAG,EAAE;YAC1B,cAAc,EAAE,IAAI,GAAG,EAAE;YACzB,aAAa,EAAE,IAAI,GAAG,EAAE;AAC3B,SAAA,CAAC,CAAC;KACN;IAED,UAAU,CAAC,QAAgB,EAAE,OAAe,EAAA;AACxC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpE,QAAA,IAAI,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE;YACjC,OAAO;SACV;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;KAC7E;AAED,IAAA,WAAW,CAAC,OAAe,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACtD,OAAO;SACV;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KAC9D;AAED,IAAA,YAAY,CAAC,QAAgB,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACxD,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SAC7D;aAAM;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAChE;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;YACvB,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe;YACzD,cAAc,EAAE,IAAI,GAAG,EAAE;YACzB,aAAa,EAAE,IAAI,GAAG,EAAE;AAC3B,SAAA,CAAC,CAAC;KACN;AAED,IAAA,eAAe,CAAC,OAAgB,EAAA;QAC5B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACpC,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC,aAAC,CAAC,CAAC;SACN;KACJ;AAED,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,KAAK,EAAE,MAAqB,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE;YACT,OAAO;SACV;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,KAAK,OAAO,IAAK,MAA2B,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACpI,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE;YACT,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAClD,OAAO,IAAI,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SAC7D;AACD,QAAA,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE;YACxB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAC/C,YAAA,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SACxC;QACD,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB;KACJ;8GA7EQ,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAA3B,2BAA2B,EAAA,CAAA,CAAA,EAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;;;ACCL,SAAU,mBAAmB,CAAC,MAAsB,EAAA;IACtD,MAAM,gBAAgB,GAAmB,EAAE,CAAC;IAC5C,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC7B,QAAA,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,IAAK,qBAAqB,CAAC,KAAK,CAAwB,CAAC,KAAK,CAAC;AACxG,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,gBAAgB,CAAC;AAC5B,CAAC;AAED;;;AAGG;AACG,SAAU,yBAAyB,CAAC,OAA0E,EAAA;AAChH,IAAA,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAChC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAC7C,CAAC;SAEe,kBAAkB,CAAU,OAAgB,EAAE,KAAmB,EAAE,SAAqB,EAAA;IACpG,MAAM,YAAY,GAAG,+BAA+B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAElE,IAAI,CAAC,YAAY,EAAE;AACf,QAAA,OAAO,SAAS,CAAC;KACpB;AAED,IAAA,MAAM,cAAc,GAAG,YAAY,CAAC,aAAa,EAAE,cAAc,CAAC;IAClE,IAAI,CAAC,cAAc,EAAE;AACjB,QAAA,OAAO,SAAS,CAAC;KACpB;IAED,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC5D,IAAI,CAAC,aAAa,EAAE;AAChB,QAAA,OAAO,SAAS,CAAC;KACpB;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAEjD,IAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClB,QAAA,OAAO,SAAS,CAAC;KACpB;AAED,IAAA,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;;AAGG;AACH,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAEtD,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAExC,SAAU,kBAAkB,CAAC,IAA+B,EAAA;IAC9D,IAAI,CAAC,IAAI,EAAE;AACP,QAAA,OAAO,EAAE,CAAC;KACb;AAED,IAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAEnB,IAAA,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACxD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACtC;AAED,IAAA,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC1D,MAAM,KAAK,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxC,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;KACtE;IAED,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACjF,CAAC;AAEK,SAAU,gBAAgB,CAAC,IAAY,EAAA;IACzC,IAAI,CAAC,IAAI,EAAE;QACP,OAAO;KACV;IACD,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACnH,MAAM,SAAS,GAAa,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,IAAI,GACN,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;UACjB,SAAS,CAAC,MAAM,CACZ,UAAU,MAAM,EAAE,IAAI,EAAA;YAClB,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACnC,YAAA,OAAO,MAAM,CAAC;SACjB,EACD,EAAE,KAAK,EAAE,CAAC,EAAE,CACf,CAAC,KAAK;UACP,CAAC,CAAC;AACZ,IAAA,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AAC5B;;ACxFA;;AAEG;AACI,MAAM,kBAAkB,GAAG,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAA4B,KAAI;IAC1G,MAAM,IAAI,GAAG,GAAG,CAAC;AACjB,IAAA,OAAO,CAAG,EAAA,UAAU,CAAI,CAAA,EAAA,OAAO,IAAI,IAAI,CAAA,CAAA,EAAI,QAAQ,IAAI,IAAI,CAAI,CAAA,EAAA,UAAU,IAAI,IAAI,EAAE,CAAC;AACxF,EAAE;AAEF;;AAEG;AACU,MAAA,aAAa,GAAG,CAAC,UAA0B,KAAI;AACxD,IAAA,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,EAAE;AAAE,QAAA,OAAO,cAAc,CAAC;IACnE,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,EAAE;AAEF;;AAEG;AACU,MAAA,qBAAqB,GAAG,CAAC,WAA0B,KAA6B;AACzF,IAAA,IAAI,WAAW,IAAI,IAAI,EAAE;QACrB,OAAO;AACH,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,UAAU,EAAE,IAAI;SACnB,CAAC;KACL;IAED,MAAM,IAAI,GAAG,GAAG,CAAC;AACjB,IAAA,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3E,OAAO;QACH,UAAU;QACV,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,OAAO;QAC1C,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI,GAAG,QAAQ;QAC7C,UAAU,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,GAAG,UAAU;KACtD,CAAC;AACN,EAAE;AAEF;;;;AAIG;AACU,MAAA,YAAY,GAAG,CAAC,KAAa,KAAmB;AACzD,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAC7D;;AC9CM,SAAU,0BAA0B,CAAC,OAA2B,EAAA;AAClE,IAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;AACxG,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,OAAQ,CAAC;IACxC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;IACxD,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEzD,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB,IAAA,KAAK,IAAI,WAAW,GAAG,gBAAgB,EAAE,WAAW,IAAI,eAAe,EAAE,WAAW,EAAE,EAAE;;AAEpF,QAAA,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC,EAAE;AAC/B,YAAA,OAAO,EAAE,CAAC;SACb;AACD,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;AAC1C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;;AAG1B,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,OAAO,EAAE,CAAC;SACb;;QAGD,MAAM,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC;QACpE,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAE3D,QAAA,KAAK,IAAI,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,EAAE,EAAE;;AAErE,YAAA,IAAI,QAAQ,GAAG,QAAQ,GAAG,CAAC,EAAE;gBACzB,MAAM;aACT;AAED,YAAA,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;AACpC,YAAA,IAAI,IAAI,KAAK,cAAc,CAAC,MAAM,EAAE;gBAChC,SAAS;aACZ;;YAGD,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC;AAC9D,YAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,yBAAyB,CAAC;gBAChD,WAAW;gBACX,WAAW;gBACX,WAAW;AACd,aAAA,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,SAAS,CAAC;YACzB,OAAO,CAAC,OAAO,CAAC;AACZ,gBAAA,GAAG,EAAE,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAE,CAAA;gBAC9C,IAAI,EAAE,kBAAkB,CAAC;AACrB,oBAAA,UAAU,EAAE,aAAa;oBACzB,OAAO;oBACP,QAAQ;iBACX,CAAC;gBACF,CAAC,EAAE,CAAC,GAAG,MAAM;gBACb,CAAC;gBACD,KAAK;gBACL,MAAM;gBACN,IAAI,EAAE,MAAM,CAAC,WAAW;AACxB,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,cAAc,EAAE,CAAC;AACjB,gBAAA,iBAAiB,EAAE,UAAU;AAC7B,gBAAA,kBAAkB,EAAE,KAAK;AACzB,gBAAA,aAAa,EAAE,KAAK;AACvB,aAAA,CAAC,CAAC;SACN;KACJ;AACD,IAAA,OAAO,OAAO,CAAC;AACnB;;ACpEA,MAAM,SAAS,GAAgD,EAAE,CAAC;AACrD,MAAA,aAAa,GAAG,IAAI,QAAQ,CAAgC;AACrE,IAAA,GAAG,EAAE,sBAAsB;AAC9B,CAAA,EAAE;AAEH;;;AAGG;AACU,MAAA,YAAY,GAAG,CAAC,GAA6B,EAAE,IAAY,EAAE,IAAY,KAAI;IACtF,IAAI,KAAK,GAAuB,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACnC,QAAA,OAAO,KAAK,CAAC;KAChB;AACD,IAAA,IAAI,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,WAAW,EAAE;QACd,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC;AACzC,YAAA,GAAG,EAAE,GAAG;AACX,SAAA,CAAC,CAAC;KACN;AACD,IAAA,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,QAAA,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,KAAK,GAAG,GAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AACrC,QAAA,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAChC;AAED,IAAA,OAAO,KAAK,CAAC;AACjB;;AC5Ba,MAAA,UAAU,GAAG,CAAC,MAAK;IAC5B,MAAM,QAAQ,GAKV,EAAE,CAAC;IACP,MAAM,WAAW,GAAQ,EAAE,CAAC;AAE5B,IAAA,SAAS,SAAS,CAAC,IAAY,EAAE,GAAW,EAAE,MAA2B,EAAA;QACrE,WAAW,CAAC,IAAI,CACZ,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC5B,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AAExB,YAAA,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AACd,YAAA,GAAG,CAAC,cAAc,GAAG,aAAa,CAAC;AAEnC,YAAA,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;AACtB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;aACjC;YAED,QAAQ,CAAC,IAAI,CAAC,GAAG;gBACb,GAAG;AACH,gBAAA,OAAO,EAAE,KAAK;aACjB,CAAC;AAEF,YAAA,IAAI;AACA,gBAAA,GAAG,CAAC,MAAM,GAAG,MAAK;oBACd,QAAQ,CAAC,IAAI,CAAC,GAAG;wBACb,GAAG;AACH,wBAAA,OAAO,EAAE,IAAI;qBAChB,CAAC;AACF,oBAAA,OAAO,CAAC;wBACJ,IAAI;wBACJ,GAAG;AACN,qBAAA,CAAC,CAAC;AACP,iBAAC,CAAC;aACL;YAAC,OAAO,GAAG,EAAE;gBACV,QAAQ,CAAC,IAAI,CAAC,GAAG;oBACb,GAAG;AACH,oBAAA,OAAO,EAAE,KAAK;iBACjB,CAAC;gBACF,MAAM,CAAC,GAAG,CAAC,CAAC;aACf;SACJ,CAAC,CACL,CAAC;KACL;IAED,SAAS,cAAc,CAAC,QAAa,EAAA;QACjC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC3C;IAED,SAAS,QAAQ,CAAC,IAAY,EAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE/B,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC;SACf;AAED,QAAA,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;AAEjC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK,CAAC;AAC3B,QAAA,OAAO,GAAG,CAAC;KACd;IAED,OAAO;QACH,SAAS;QACT,QAAQ;QACR,cAAc;QACd,QAAQ;KACX,CAAC;AACN,CAAC;;AC3EM,MAAM,WAAW,GAAG,MAAK;IAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAChD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC5D,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC5D,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;AAEW,MAAA,SAAS,GAAG,WAAW,GAAG;AAGhC,MAAM,KAAK,GAAG,MAAK;AACtB,IAAA,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC;AAClC,IAAA,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC;;MCba,mBAAmB,GAAG,CAAC,UAAsB,EAAE,WAA+B,KAAI;AAC3F,IAAA,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC;IAC9C,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAC;;IAGhE,MAAM,oBAAoB,GAAG,MAAK;QAC9B,MAAM,UAAU,GAAG,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,UAAU,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAEpE,OAAO;YACH,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;AAC1C,YAAA,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;SACnE,CAAC;AACN,KAAC,CAAC;;IAGF,MAAM,sBAAsB,GAAG,MAAK;QAChC,MAAM,UAAU,GAAG,UAAU,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,UAAU,CAAC,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAExE,OAAO;YACH,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAC,EAAE,UAAU,CAAC;AAC7D,YAAA,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;SACzF,CAAC;AACN,KAAC,CAAC;IAEF,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAC/D,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,sBAAsB,EAAE,CAAC;IACvE,OAAO;QACH,aAAa;QACb,YAAY;QACZ,gBAAgB;QAChB,eAAe;KAClB,CAAC;AACN,EAAE;MAEW,SAAS,GAAG,CAAC,UAAsB,EAAE,cAA8B,KAAI;IAChF,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CACxC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAI,qBAAqB,CAAC,GAAG,CAAwB,EAAE,KAAK,EAC7E,uBAAuB,CAC1B,CAAC;AACF,IAAA,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AAC9E,IAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAC/C;;ACzCa,MAAA,gBAAgB,GAAG,CAC5B,CAAS,EACT,CAAS,EACT,UAAsB,EACtB,MAAsB,EACtB,OAAwB,EACxB,WAAoB,KACpB;IACA,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;AACxD,IAAA,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC1E,IAAA,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,4BAA4B,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;IACtG,MAAM,WAAW,GAAG,UAAU,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,UAAU,IAAI,cAAc,IAAI,SAAS,IAAI,eAAe,GAAG,eAAe,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;AAC5H,IAAA,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,OAAO;QACH,QAAQ;AACR,QAAA,UAAU;AACV,QAAA,cAAc,EAAE,WAAW,IAAI,cAAc;QAC7C,QAAQ;QACR,WAAW;QACX,SAAS;QACT,UAAU;QACV,CAAC;QACD,CAAC;KACJ,CAAC;AACN,EAAE;MAEW,4BAA4B,GAAG,CAAC,CAAS,EAAE,iBAAyB,KAAI;AACjF,IAAA,MAAM,GAAG,GAAG,uBAAuB,GAAG,iBAAiB,CAAC;IACxD,MAAM,GAAG,GAAG,uBAAuB,CAAC;AACpC,IAAA,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AAC9B,EAAE;AAEW,MAAA,cAAc,GAAG,CAAC,aAAqB,KAAI;AACpD,IAAA,OAAO,aAAa,GAAG,eAAe,GAAG,CAAC,CAAC;AAC/C,EAAE;AAEK,MAAM,kBAAkB,GAAG,MAAK;IACnC,OAAO,CAAC,eAAe,CAAC;AAC5B,EAAE;AAEK,MAAM,wBAAwB,GAAG,MAAK;AACzC,IAAA,OAAO,iCAAiC,GAAG,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC;AACvE,EAAE;AAEW,MAAA,mBAAmB,GAAG,CAAC,aAAqB,KAAI;AACzD,IAAA,MAAM,WAAW,GAAG,wBAAwB,EAAE,CAAC;IAC/C,OAAO,aAAa,GAAG,WAAW,CAAC;AACvC,EAAE;AAEK,MAAM,uBAAuB,GAAG,MAAK;AACxC,IAAA,MAAM,WAAW,GAAG,wBAAwB,EAAE,CAAC;IAC/C,OAAO,WAAW,GAAG,CAAC,CAAC;AAC3B;;ACnDO,MAAM,gBAAgB,GAAG,CAAC,cAAsB,EAAE,QAA4B,GAAA,eAAe,CAAC,IAAI,EAAE,SAAyB,KAAI;IACpI,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;AACzE,IAAA,IAAI,UAAU;AAAE,QAAA,OAAO,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC5D,IAAA,IAAI,QAAQ,KAAK,eAAe,CAAC,IAAI;AAAE,QAAA,OAAO,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClF,QAAQ,UAAU;AACd,QAAA,KAAK,mCAAmC,CAAC;AACzC,QAAA,KAAK,wBAAwB,CAAC;AAC9B,QAAA,KAAK,4BAA4B,CAAC;AAClC,QAAA,KAAK,uBAAuB,CAAC;QAC7B,KAAK,yBAAyB,EAAE;AAC5B,YAAA,OAAO,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SAC9C;AACD,QAAA;AACI,YAAA,OAAO,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;KAClD;AACL,EAAE;MAEW,aAAa,GAAG,CAAC,UAAkB,EAAE,SAAyB,KAAI;AAC3E,IAAA,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;AACxC;;ACVA;;;;AAIG;MACU,WAAW,GAAG,CAAC,QAAsC,GAAA,EAAE,KAAI;IACpE,MAAM,EACF,UAAU,GAAG,mBAAmB,EAChC,QAAQ,GAAG,iBAAiB,EAC5B,UAAU,GAAG,mBAAmB,EAChC,SAAS,GAAG,kBAAkB,EAC9B,UAAU,GAAG,wBAAwB,EACrC,KAAK,GAAG,kBAAkB,EAC7B,GAAG,QAAQ,CAAC;AACb,IAAA,MAAM,CAAC,GAAwC;QAC3C,UAAU;QACV,QAAQ;QACR,UAAU;QACV,SAAS;QACT,UAAU;QACV,KAAK;KACR,CAAC;IACF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChD,IAAA,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAExD,IAAA,MAAM,mBAAmB,GAAG,CAAC,UAAkB,KAAI;AAC/C,QAAA,OAAO,UAAU;aACZ,KAAK,CAAC,GAAG,CAAC;AACV,aAAA,GAAG,CAAC,CAAC,MAAM,KAAI;AACZ,YAAA,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1C,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvE,YAAA,IAAI,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,gBAAA,MAAM,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG,CAAC;aAC1B;AACD,YAAA,OAAO,MAAM,CAAC;AAClB,SAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,KAAC,CAAC;;AAGF,IAAA,MAAM,OAAO,GAAG,CAAC,OAAqC,GAAA,EAAE,KAAI;AACxD,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACtB,YAAA,CAAS,CAAC,GAAG,CAAC,GAAI,OAAe,CAAC,GAAG,CAAC,IAAK,CAAS,CAAC,GAAG,CAAC,CAAC;SAC9D;QACD,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,IAAI,GAAG,CAAA,EAAG,CAAC,CAAC,UAAU,CAAI,CAAA,EAAA,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAA,GAAA,EAAM,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA,CAAE,CAAC;SACnG;AACL,KAAC,CAAC;;IAGF,MAAM,qBAAqB,GAAG,CAAC,IAAmB,EAAE,QAAiB,EAAE,YAAqB,KAAI;QAC5F,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;SAC9C;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;AACvB,YAAA,MAAM,SAAS,GAAG,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACxD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACnC,SAAS,GAAG,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxE,YAAA,MAAM,IAAI,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC;SACtC;AACD,QAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,YAAY,KAAK,CAAC,KAAK,YAAY,IAAI,SAAS,IAAI,YAAY,CAAC,EAAE;YACvF,OAAO;AACH,gBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzB,IAAI;gBACJ,UAAU,EAAE,OAAO,CAAC,YAAY,IAAI,SAAS,GAAG,YAAY,CAAC;AAC7D,gBAAA,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;aAClC,CAAC;SACL;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC/B,QAAA,IAAI,QAAQ,GAAG,CAAC,CAAC;AACjB,QAAA,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;AAElC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;AAC/B,YAAA,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;;AAE1C,YAAA,UAAU,GAAG,YAAY,GAAG,QAAQ,KAAK,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC;AAClE,YAAA,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,CAAC;YACjE,SAAS,IAAI,UAAU,CAAC;AACxB,YAAA,MAAM,SAAS,GAAG,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAC/D,YAAA,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC,QAAQ,IAAI,SAAS,GAAG,QAAQ,KAAK,WAAW,MAAM,YAAY,IAAI,IAAI,IAAI,QAAQ,GAAG,YAAY,CAAC,EAAE;gBAC1G,QAAQ,GAAG,WAAW,GAAG,EAAE,GAAG,UAAU,CAAC;gBACzC,UAAU,IAAI,UAAU,CAAC;AACzB,gBAAA,QAAQ,EAAE,CAAC;gBACX,IAAI,UAAU,EAAE;AACZ,oBAAA,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE;AACpB,wBAAA,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;qBAClE;oBACD,MAAM;iBACT;aACJ;iBAAM;gBACH,QAAQ,GAAG,WAAW,CAAC;aAC1B;SACJ;QACD,OAAO;AACH,YAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACvB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AACzG,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,UAAU,EAAE,UAAU;YACtB,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC;SAC3D,CAAC;AACN,KAAC,CAAC;;;IAIF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,QAAiB,EAAE,YAAqB,KAAI;QAC3E,OAAO,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;AAC7E,KAAC,CAAC;;IAGF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEtC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEX,OAAO;QACH,OAAO;QACP,WAAW;QACX,OAAO;QACP,KAAK;KACR,CAAC;AACN;;MC3Ia,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAMI,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAc,CAAC;AAE3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAc,CAAC;AAE5C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAc,CAAC;AAE5C,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,OAAO,EAAc,CAAC;AAElD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,OAAO,EAAc,CAAC;AAI1C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAEhC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAqM3C,KAAA;IAnMG,UAAU,CAAC,OAAgB,EAAE,gBAAiF,EAAA;AAC1G,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;KAC5C;AAED,IAAA,cAAc,CAAC,OAAoB,EAAA;QAC/B,SAAS,CAAa,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;QAEP,SAAS,CAAa,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzD,aAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3D,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,SAAC,CAAC,CAAC;QAEP,SAAS,CAAa,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1D,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C,SAAC,CAAC,CAAC;QAEP,SAAS,CAAa,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,SAAC,CAAC,CAAC;QAEP,SAAS,CAAa,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1D,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAmB,CAAC,CAAC;AACzD,SAAC,CAAC,CAAC;KACV;AAEO,IAAA,kBAAkB,CAAC,IAAsB,EAAA;QAC7C,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YACtD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAE,CAAC,MAAM,CAAC;SAC9C;AACD,QAAA,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;KACrC;AAED,IAAA,QAAQ,CAAC,OAAoB,EAAA;AACzB,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAChE,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAE,CAAC;AACnD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;QAClF,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;AACxC,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,cAAc,EAAE;gBACZ,CAAC,EAAE,CAAC,GAAG,CAAC;gBACR,CAAC,EAAE,CAAC,GAAG,CAAC;gBACR,KAAK,EAAE,KAAK,GAAG,CAAC;gBAChB,MAAM,EAAE,MAAM,GAAG,CAAC;AACrB,aAAA;AACD,YAAA,KAAK,EAAE,KAAK,GAAG,CAAC,GAAG,IAAI;AACvB,YAAA,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;AACzB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,MAAM,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AACrB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,YAAY,EAAE;AACV,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,IAAI,CAAC,OAAO;AACxB,aAAA;AACD,YAAA,UAAU,EAAE,kBAAkB;AAC9B,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,YAAY,EAAE,IAAI;AACrB,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,GAAG,CAAC;KACd;IAED,iBAAiB,CAAC,OAAgB,EAAE,OAA+B,EAAA;AAC/D,QAAA,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;AAC1E,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAQ,CAAC;AACzC,QAAA,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;AAC9C,QAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAE,CAAC;QACxF,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,yBAAyB,CAAC;YAC3E,WAAW;YACX,WAAW;YACX,WAAW;AACd,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,UAAU,GAAG,SAAU,CAAC,qBAAqB,EAAE,CAAC;AACtD,QAAA,MAAM,cAAc,GAAG;AACnB,YAAA,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,WAAW,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;YACnE,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC;AACnD,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,MAAM,EAAE,SAAS;SACpB,CAAC;QACF,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAChD,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAChD,IAAI,KAAK,GAAG,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;;QAEnD,IAAI,WAAW,EAAE;AACb,YAAA,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,uBAAuB,EAAE,CAAC;AACjD,YAAA,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,uBAAuB,EAAE,CAAC;AACjD,YAAA,KAAK,GAAG,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAClD,YAAA,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;SACvD;QACD,OAAO;AACH,YAAA,GAAG,cAAc;AACjB,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,MAAM;SACjB,CAAC;KACL;IAED,cAAc,CAAC,OAAgB,EAAE,OAA+B,EAAA;QAC5D,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;AAC9D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;QAClF,MAAM,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;AACxD,YAAA,MAAM,EAAE,SAAU;AAClB,YAAA,cAAc,EAAE,oBAAoB;AACpC,YAAA,KAAK,EAAE,oBAAoB,CAAC,KAAK,GAAG,IAAI;AACxC,YAAA,MAAM,EAAE,oBAAoB,CAAC,MAAM,GAAG,IAAI;AAC1C,YAAA,QAAQ,EAAE,oBAAoB,CAAC,KAAK,GAAG,IAAI;AAC3C,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,MAAM,EAAE,CAAC,oBAAoB,CAAC,MAAM;AACpC,YAAA,YAAY,EAAE;AACV,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,OAAO,EAAE,OAAO;AACnB,aAAA;AACD,YAAA,UAAU,EAAE,kBAAkB;AAC9B,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,YAAY,EAAE,IAAI;AACrB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,MAAM,UAAU,GAAG,SAAS,CACxB,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,UAAU,CAAC,aAAa,EACpE,OAAO,CACV,CAAC,SAAS,CAAC,CAAC,KAAiB,KAAI;gBAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC;oBAC/B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,QAAQ,EAAE,MAAK;wBACX,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAChE,wBAAA,MAAM,gBAAgB,GAAI,IAAI,CAAC,oBAAqE;AAC/F,6BAAA,aAAa,EAAE;6BACf,SAAS,EAAE,CAAC,gBAAqD,CAAC;AACvE,wBAAA,gBAAgB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;wBAC3C,gBAAgB,CAAC,KAAK,EAAE,CAAC;qBAC5B;AACJ,iBAAA,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;YACH,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAK;gBACnD,UAAU,CAAC,WAAW,EAAE,CAAC;AACzB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACrC,aAAC,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,oBAAoB,CAAC,iBAAiD,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC9G,gBAAA,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACpC,aAAC,CAAC,CAAC;SACN;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC;KACpC;IAED,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;SACpC;KACJ;IAED,kBAAkB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,QAAQ,CAAC;YACvE,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,CAAC;AAErE,YAAA,IAAI,QAAQ,IAAI,OAAO,EAAE;gBACrB,OAAO;oBACH,QAAQ;oBACR,OAAO;iBACV,CAAC;aACL;AACD,YAAA,OAAO,IAAI,CAAC;SACf;AACD,QAAA,OAAO,IAAI,CAAC;KACf;8GAvNQ,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAvB,uBAAuB,EAAA,CAAA,CAAA,EAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;;;MC+BE,eAAe,CAAA;AAN5B,IAAA,WAAA,GAAA;AAOI,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAkB,CAAC;AAE7C,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAiB,CAAC;QAE3C,IAAa,CAAA,aAAA,GAAG,KAAK,EAAiB,CAAC;QAEvC,IAAU,CAAA,UAAA,GAAG,KAAK,EAAW,CAAC;QAE9B,IAAS,CAAA,SAAA,GAAG,KAAK,EAAc,CAAC;AAEhC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAqB,CAAC;QAEnD,IAAmB,CAAA,mBAAA,GAAG,KAAK,EAAsC,CAAC;QAElE,IAAgB,CAAA,gBAAA,GAAG,gBAAgB,CAAC;QAEpC,IAAwB,CAAA,wBAAA,GAAG,wBAAwB,CAAC;AAIpD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC1B,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;AACrF,SAAC,CAAC,CAAC;QAEH,IAAkB,CAAA,kBAAA,GAAG,MAAM,EAAW,CAAC;QAEvC,IAAW,CAAA,WAAA,GAAG,MAAM,EAAoB,CAAC;QAEzC,IAAU,CAAA,UAAA,GAAG,MAAM,EAAmB,CAAC;QAEvC,IAAkB,CAAA,kBAAA,GAAG,MAAM,EAA2B,CAAC;AAMvD,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACrB,YAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;gBACxE,OAAO,IAAI,CAAC,mBAAmB,EAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACpD;YACD,OAAO;AACH,gBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE;AACzB,gBAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE;aAC1B,CAAC;AACN,SAAC,CAAC,CAAC;AAEO,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAChC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAChC,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAC1D,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAC1D,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;AAgH/E,KAAA;IA9GG,QAAQ,GAAA;QACJ,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC,MAAM,KAAI;YACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC9C;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,mBAAmB,CAAC,CAAC;QACjG,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC3E,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACrE,+BAA+B,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;KACnF;IAED,eAAe,GAAA;QACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,UAAU,IAAI,EAAE,CAAC;KAC5D;IAED,SAAS,GAAA;QACL,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;AACxC,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAClB,QAAQ,EAAE,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;AACnE,SAAA,CAAC,CAAC;KACN;AAED,IAAA,YAAY,CAAC,QAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;KAC3D;AAED,IAAA,eAAe,CAAC,OAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,2BAA2B,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;KAC7D;IAED,QAAQ,CAAC,eAA6B,EAAE,QAAmC,EAAA;AACvE,QAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE;YAC5E,KAAK;AACL,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,MAAM,EAAE,eAAgB;YACxB,QAAQ;AACX,SAAA,CAAC,CAAC;QACH,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,mBAAmB,EAAE;YACzD,UAAU,CAAC,iBAAgD,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,YAAY,KAAI;gBAC7F,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;AACtC,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;AACjC,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBACjB,QAAQ,EAAE,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;oBAC7D,YAAY;AACf,iBAAA,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;SACN;KACJ;IAEM,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YAC/B,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACtG,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;YACH,IAAI,CAAC,uBAAuB,CAAC,eAAe;AACvC,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxG,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,gBAAA,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACzD,aAAC,CAAC,CAAC;YAEP,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACvG,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,aAAC,CAAC,CAAC;YACH,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC7G,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACrC,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,QAAQ,CAAC,KAAiB,EAAA;QAC9B,MAAM,OAAO,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,YAAY,CAAgB,CAAC;QACnF,MAAM,IAAI,GAAG,OAAO,IAAK,OAAO,CAAC,YAAY,CAAC,MAAM,CAAuB,CAAC;QAC5E,IAAI,IAAI,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAClD;KACJ;AAEO,IAAA,eAAe,CAAC,KAAiB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;SAC9B;QACD,MAAM,OAAO,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,YAAY,CAAgB,CAAC;QACnF,MAAM,IAAI,GAAG,OAAO,IAAK,OAAO,CAAC,YAAY,CAAC,MAAM,CAAuB,CAAC;QAC5E,IAAI,IAAI,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SACtE;KACJ;AAEO,IAAA,oBAAoB,CAAC,CAAa,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,IAAK,CAAC,CAAC,MAAsB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAChF,YAAA,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,IAAK,CAAC,CAAC,MAAsB,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACzF,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;AAC5B,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;aAC7B;SACJ;KACJ;8GAnKQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,uvCAJd,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAIH,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;ACyBK,MAAO,cAAe,SAAQ,eAAe,CAAA;IACtC,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;AAED,IAAA,aAAa,CAAC,CAAQ,EAAE,KAAmB,EAAE,WAAwB,EAAA;QACjE,MAAM,OAAO,GAAI,CAAC,CAAC,MAAuB,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACzE,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE;AACrD,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,UAAU,EAAE,WAAW;YACvB,OAAO,EAAE,KAAK,CAAC,GAAG;YAClB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC9B,SAAA,CAAC,CAAC;KACN;8GAdQ,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iCAAA,EAAA,EAAA,SAAA,EAFZ,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjE9F,w/XA2NA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxLQ,OAAO,EAEP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,gBAAgB,gDAChB,iBAAiB,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,MAAM,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACN,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,OAAO,EACP,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EACP,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,EAEX,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,uBAAuB,4DACvB,eAAe,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAE3B,SAAS,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGT,iBAAiB,EAEjB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EAEf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,kBAAkB,EAElB,IAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,yFACrB,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACR,iBAAiB,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACjB,iBAAiB,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAIZ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAzC1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAEjB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE,iCAAiC;qBAC3C,EACQ,OAAA,EAAA;wBACL,OAAO;wBACP,iBAAiB;wBACjB,YAAY;wBACZ,WAAW;wBACX,gBAAgB;wBAChB,iBAAiB;wBACjB,MAAM;wBACN,gBAAgB;wBAChB,OAAO;wBACP,OAAO;wBACP,WAAW;wBACX,0BAA0B;wBAC1B,uBAAuB;wBACvB,eAAe;wBACf,2BAA2B;wBAC3B,SAAS;wBACT,SAAS;wBACT,oBAAoB;wBACpB,wBAAwB;wBACxB,iBAAiB;wBACjB,uBAAuB;wBACvB,eAAe;wBACf,gBAAgB;wBAChB,kBAAkB;wBAClB,uBAAuB;wBACvB,qBAAqB;wBACrB,QAAQ;wBACR,iBAAiB;wBACjB,iBAAiB;AACpB,qBAAA,EAAA,SAAA,EACU,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAA,QAAA,EAAA,w/XAAA,EAAA,CAAA;;;AE/DvF,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAAM,oBAAoB,CAAC;;ACCvD,SAAA,aAAa,CAAC,IAAU,EAAA;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IACvD,IAAI,WAAW,EAAE;QACb,WAAW,CAAC,SAAS,EAAE,CAAC;KAC3B;AACL;;ACRA;AAQc,SAAU,cAAc,CAAC,SAAsB,EAAE,KAAqB,GAAA,EAAE,EAAE,QAAA,GAAwB,EAAE,EAAA;AAC9G,IAAA,IAAI,IAAI,IAAI,KAAK,EAAE;QACf,MAAM,OAAO,GAAG,CAAA,gKAAA,CAAkK,CAAC;AACnL,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACzB;AAED,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,YAAY,GAAgB,EAAE,CAAC;IACrC,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAClC,QAAA,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;QACzC,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;AACjD,QAAA,IAAI,OAAO,IAAI,WAAW,EAAE;YACxB,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE;gBACrC,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACpF;YACD,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1C;QACD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE;AACV,YAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;SACpC;AACL,KAAC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC/B,QAAA,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,IAAI,OAAO,IAAI,KAAK,EAAE;YAClB,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE;gBACrC,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACpF;AACD,YAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;AACZ,gBAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACxB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAgC,KAAI;oBACxD,KAAK,CAAC,GAAG,CAAC,CAAC;AACP,wBAAA,gBAAgB,EAAE,SAAS;wBAC3B,KAAK;AACkB,qBAAA,CAAC,CAAC;AACjC,iBAAC,CAAC,CAAC;aACN;SACJ;QACD,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;YACpF,UAAU,GAAG,IAAI,CAAC;YAClB,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;SAClC;AACL,KAAC,CAAC,CAAC;IAEH,IAAI,UAAU,EAAE;AACZ,QAAA,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAChC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACxB,QAAA,IAAI,GAAG,CAAC;QACR,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACvC,YAAA,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,GAAG,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACvC,MAAM,IAAI,GAAG,QAAQ,CAAC;AACtB,gBAAA,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAA;AACzB,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC9B,IAAI,KAAK,EAAE;wBACP,KAAK,CAAC,SAAS,EAAE,CAAC;qBACrB;AACL,iBAAC,CAAC,CAAC;aACN;AACL,SAAC,CAAC,CAAC;KACN;AACL;;ACpEA,SAAS,QAAQ,CAAC,GAAW,EAAA;AACzB,IAAA,OAAO,GAAG;AACL,SAAA,OAAO,CAAC,iBAAiB,EAAE,UAAU,MAAM,EAAE,KAAK,EAAA;AAC/C,QAAA,OAAO,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;AACpE,KAAC,CAAC;AACD,SAAA,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc,EAAA;AACzC,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAEK,SAAU,OAAO,CAAC,YAAoB,EAAA;AACxC,IAAA,OAAO,qBAAqB,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACpF,CAAC;AAEK,SAAU,cAAc,CAAC,QAAqB,EAAA;IAChD,MAAM,MAAM,GAAqB,EAAE,CAAC;AACpC,IAAA;QACI,aAAa;QACb,aAAa;QACb,YAAY;QACZ,cAAc;QACd,cAAc;QACd,aAAa;QACb,WAAW;QACX,SAAS;QACT,eAAe;QACf,SAAS;QACT,YAAY;QACZ,cAAc;QACd,aAAa;QACb,YAAY;QACZ,OAAO;QACP,UAAU;QACV,aAAa;QACb,YAAY;QACZ,WAAW;AACd,KAAA,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;QACpB,MAAM,IAAI,GAAyC,SAAS,CAAC;AAE7D,QAAA,MAAM,YAAY,GAAiD,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClF,QAAA,IAAI,YAAY,CAAC,QAAQ,EAAE;AACvB,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC5D;AACL,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,MAAM,CAAC;AAClB;;MCPa,OAAO,CAAA;AA4EhB,IAAA,WAAA,GAAA;QA3EA,IAAM,CAAA,MAAA,GAAG,KAAK,EAAsB,CAAC;AAE3B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE5D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE5D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE3D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE7D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE7D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE5D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE1D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAA6B,CAAC;AAExD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA+B,CAAC;AAEhE,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAA6B,CAAC;AAExD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE3D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE7D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE5D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE3D,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAA6B,CAAC;AAEtD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAA6B,CAAC;AAEzD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE5D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE3D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE5D,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC,CAAC;QAE7C,IAAS,CAAA,SAAA,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3D,IAAU,CAAA,UAAA,GAAuB,EAAE,CAAC;QAEpC,IAAQ,CAAA,QAAA,GAAmD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAGpG,CAAC;QA2BX,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAG,CAAC,CAAC;aACnC;AACL,SAAC,CAAC,CAAC;KACN;IAEM,OAAO,GAAA;QAuBV,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAED,QAAQ,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;IAEO,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;SAC5B;AACD,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;SAC5B;AAAM,aAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACnC,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAkB,CAAC,CAAC;SAC1D;aAAM;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;SACpD;AAED,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,SAA6B,KAAU;YACpD,cAAc,CAAC,SAAS,CAAC,CAAC;YAC1B,UAAU,CAAC,MAAK;AACZ,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC1C,oBAAA,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE;AAC7C,wBAAA,IAAI,CAAC,MAAM,EAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;qBAC/C;AACL,iBAAC,CAAC,CAAC;aACN,EAAE,GAAG,CAAC,CAAC;AACZ,SAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAG,CAAC,CAAC;SACnC;KACJ;AAEO,IAAA,UAAU,CAAC,MAA0B,EAAA;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;AACxB,QAAA,MAAM,KAAK,GAAG;AACV,YAAA,GAAG,MAAM;YACT,GAAG,cAAc,CAAC,IAAI,CAAC;SAC1B,CAAC;QACF,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAC3B;IAED,eAAe,GAAA;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC3C,SAAS,CAAC,GAAG,CAAQ,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACrC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;KAC3C;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;KACzB;8GAjKQ,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAO,s4BAHN,CAA2B,yBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAG5B,OAAO,EAAA,UAAA,EAAA,CAAA;kBAPnB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EACJ,4MAA4M;AAChN,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAA2B,yBAAA,CAAA;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;wDAIa,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAEG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAEG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,KAAK,EAAA,CAAA;sBAAd,MAAM;gBAEG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;ACrEL,MAAO,WAAY,SAAQ,OAAO,CAAA;8GAA3B,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EART,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,WAAW;AAC3B,aAAA;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EANS,CAA2B,yBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAS5B,WAAW,EAAA,UAAA,EAAA,CAAA;kBAZvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAA2B,yBAAA,CAAA;AACrC,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAa,WAAA;AAC3B,yBAAA;AACJ,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MCgBY,OAAO,CAAA;AA+ChB,IAAA,WAAA,GAAA;QA9CA,IAAM,CAAA,MAAA,GAAG,KAAK,EAAmB,CAAC;AAExB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE5D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE5D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE3D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE7D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE7D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE5D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE1D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAA6B,CAAC;AAExD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA+B,CAAC;AAEhE,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAA6B,CAAC;AAExD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE3D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE7D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE5D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE3D,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAA6B,CAAC;AAEtD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAA6B,CAAC;AAEzD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE5D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B,CAAC;AAE3D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAA6B,CAAC;QAI5D,IAAU,CAAA,UAAA,GAAuB,EAAE,CAAC;AAEpC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC;QAGrD,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACf,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,SAAS,EAAE,CAAC;iBACpB;gBACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAG,CAAC,CAAC;aACnC;AACL,SAAC,CAAC,CAAC;KACN;IAED,QAAQ,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;IAEM,OAAO,GAAA;QACV,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAEO,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC;YACpB,GAAG,IAAI,CAAC,MAAM,EAAE;YAChB,SAAS,EAAE,IAAI,CAAC,aAAa;AAChC,SAAA,CAAC,CAAC;KACN;AAEO,IAAA,UAAU,CAAC,MAAuB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG;AACV,YAAA,GAAG,MAAM;YACT,GAAG,cAAc,CAAC,IAAI,CAAC;SAC1B,CAAC;QACF,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KAC3B;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;KAC1B;8GApFQ,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAO,EARL,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,OAAO;AACvB,aAAA;AACJ,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EANS,CAA2B,yBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAS5B,OAAO,EAAA,UAAA,EAAA,CAAA;kBAZnB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,CAA2B,yBAAA,CAAA;AACrC,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAS,OAAA;AACvB,yBAAA;AACJ,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;wDAIa,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAEG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAEG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,KAAK,EAAA,CAAA;sBAAd,MAAM;gBAEG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAEG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;AC5CL,MAAgB,WAAY,SAAQ,SAAS,CAAA;AA+ClD;;ACrDM,MAAM,YAAY,GAAG;IACxB,GAAG;IACH,KAAK;IACL,MAAM;IACN,OAAO;WACPE,OAAK;IACL,KAAK;IACL,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,cAAc;IACd,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,WAAW;IACX,KAAK;IACL,KAAK;IACL,KAAK;IACL,SAAS;CACZ;;MCtBY,WAAW,CAAA;AAZxB,IAAA,WAAA,GAAA;AAaI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAqB,CAAC;AAE7C,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAuB,MAAK;AAC9C,YAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC1C,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;AAC/B,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YAC9B,MAAM,EACF,IAAI,EACJ,eAAe,EACf,gBAAgB,EAChB,IAAI,GAAG,iBAAiB,EACxB,WAAW,GAAG,CAAC,EACf,UAAU,EACV,YAAY,EACZ,OAAO,EACV,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO;gBACH,IAAI;gBACJ,KAAK,EAAE,eAAe,IAAI,IAAI;gBAC9B,MAAM,EAAE,gBAAgB,IAAI,IAAI;AAChC,gBAAA,WAAW,EAAE,WAAW;AACxB,gBAAA,IAAI,EAAE,UAAU,IAAI,MAAM,CAAC,WAAW;gBACtC,YAAY;gBACZ,OAAO;aACV,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YACvB,MAAM,EACF,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,gBAAgB,EAChB,IAAI,GAAG,iBAAiB,EACxB,MAAM,EACN,WAAW,GAAG,CAAC,EACf,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,QAAQ,EACR,IAAI,GAAG,MAAM,CAAC,OAAO,EACrB,iBAAiB,GAAG,UAAU,EACjC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAElB,IAAI,QAAQ,GAAG,IAAI,CAAC;YAEpB,QAAQ,IAAI;gBACR,KAAK,gBAAgB,CAAC,OAAO;oBACzB,QAAQ,GAAG,KAAK,CAAC;oBACjB,MAAM;gBACV,KAAK,gBAAgB,CAAC,SAAS;oBAC3B,QAAQ,GAAG,SAAS,CAAC;oBACrB,MAAM;aACb;YAED,OAAO;AACH,gBAAA,CAAC,EAAE,eAAe,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;AAClE,gBAAA,CAAC,EAAE,gBAAgB,IAAI,CAAC,gBAAgB,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;AACpE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,MAAM,EAAE,IAAI;gBACZ,IAAI;gBACJ,OAAO;gBACP,OAAO;gBACP,MAAM;gBACN,MAAM;gBACN,QAAQ;gBACR,MAAM;gBACN,WAAW;gBACX,iBAAiB;AACjB,gBAAA,kBAAkB,EAAE,KAAK;AACzB,gBAAA,SAAS,EAAE,KAAK;aACnB,CAAC;AACN,SAAC,CAAC,CAAC;AACN,KAAA;8GA9EY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAVV,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;KAKT,EAES,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,6EAAE,OAAO,EAAA,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGrB,WAAW,EAAA,UAAA,EAAA,CAAA;kBAZvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,CAAA;;;;;AAKT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC;oBAC/B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MCcY,eAAe,CAAA;AAhB5B,IAAA,WAAA,GAAA;AAiBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAyB,CAAC;QAEjD,IAAQ,CAAA,QAAA,GAAG,+BAA+B,CAAC;AAE3C,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAAK;AACd,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC;AAC/F,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC;YACjG,OAAO,eAAe,GAAG,gBAAgB,CAAC;AAC9C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAuB,MAAK;YAC7C,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC;AACnD,YAAA,MAAM,IAAI,GAAG,UAAU,KAAK,yBAAyB,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;YACrF,OAAO;gBACH,IAAI,EAAE,kBAAkB,CAAC;AACrB,oBAAA,UAAU,EAAE,yBAAyB;AACrC,oBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,CAAC,GAAG;AAChE,oBAAA,UAAU,EAAE,SAAS;iBACxB,CAAC;AACF,gBAAA,CAAC,EAAE,eAAe;AAClB,gBAAA,CAAC,EAAE,eAAe;AAClB,gBAAA,KAAK,EACD,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ;sBAC5D,IAAI,CAAC,QAAQ;AACf,sBAAE,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,EAAE;gBAC5D,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW;gBAC5C,MAAM,EAAE,MAAM,CAAC,OAAO;AACtB,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,SAAS,EAAE,IAAI;gBACf,IAAI;aACP,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAoB,MAAK;AAC7C,YAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,GAAG,yBAAyB,IAAI,CAAC,CAAC;YACvF,OAAO;AACH,gBAAA,CAAC,EAAE,qBAAqB;AACxB,gBAAA,CAAC,EAAE,OAAO;AACV,gBAAA,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,MAAM,CAAC,OAAO;AACpB,gBAAA,SAAS,EAAE,KAAK;aACnB,CAAC;AACN,SAAC,CAAC,CAAC;AACN,KAAA;8GA5CY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAdd,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;AAST,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,WAAW,EAAA,QAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGlC,eAAe,EAAA,UAAA,EAAA,CAAA;kBAhB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;AAST,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC;oBAC5C,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;ACGD;AACO,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEvD;;AAEG;MACU,MAAM,CAAA;AAAnB,IAAA,WAAA,GAAA;AACI,QAAA,IAAA,CAAA,GAAG,GAA6B,WAAW,EAAE,CAAC,OAAQ,CAAC;QACvD,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AACjB,QAAA,IAAA,CAAA,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;KAmjChC;AAjjCU,IAAA,OAAO,CAAC,GAA6B,EAAA;AACxC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC,OAAQ,CAAC;AACzC;;AAEG;AACH,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,kCAAkC,CAAC;KAC9D;;AAGM,IAAA,QAAQ,CAAC,OAAwB,EAAA;QACpC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;AAEjE,QAAA,IAAI,QAAQ,IAAI,UAAU,EAAE;AACxB,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,UAAU,IAAI,mBAAmB,CAAA,CAAA,EAAI,QAAQ,IAAI,iBAAiB,CAAM,GAAA,EAAA,mBAAmB,EAAE,CAAC;SACpH;QACD,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;SAClC;QACD,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;SACtC;KACJ;;AAGM,IAAA,YAAY,CAAC,OAA4B,EAAA;AAC5C,QAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,iBAAiB,EAAE,UAAU,GAAG,mBAAmB,EAAE,GAAG,OAAO,CAAC;QAEnG,IAAI,IAAI,IAAI,IAAI;YACZ,OAAO;AACH,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,SAAS,EAAE,CAAC;AACZ,gBAAA,UAAU,EAAE,KAAK;aACpB,CAAC;QACN,MAAM,SAAS,GAAG,CAAG,EAAA,UAAU,IAAI,QAAQ,CAAA,GAAA,EAAM,mBAAmB,CAAA,CAAE,CAAC;QAEvE,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;gBACH,IAAI;gBACJ,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;AAClD,gBAAA,UAAU,EAAE,KAAK;aACpB,CAAC;SACL;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;;QAE7B,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;QAC/C,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC1C,QAAA,IAAI,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAE9D,QAAA,OAAO,UAAU,IAAI,QAAQ,EAAE;AAC3B,YAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;gBACvB,OAAO;oBACH,IAAI;AACJ,oBAAA,SAAS,EAAE,UAAU;AACrB,oBAAA,UAAU,EAAE,KAAK;iBACpB,CAAC;aACL;AACD,YAAA,SAAS,EAAE,CAAC;YACZ,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACtC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SAC7D;AAED,QAAA,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClE,OAAO,SAAS,IAAI,CAAC,IAAI,UAAU,GAAG,aAAa,GAAG,QAAQ,EAAE;AAC5D,YAAA,SAAS,EAAE,CAAC;YACZ,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACtC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;SAC7D;QAED,OAAO;YACH,IAAI,EAAE,CAAG,EAAA,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAG,EAAA,QAAQ,CAAE,CAAA;AAC1C,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,UAAU,EAAE,IAAI;SACnB,CAAC;KACL;;AAGM,IAAA,IAAI,CAAC,OAAoB,EAAA;AAC5B,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;AACzD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAE7B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACrB,QAAA,IAAI,MAAM;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC;AAC1C,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC7C;QAED,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;SACxB;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;KACtB;;AAGM,IAAA,GAAG,CAAC,OAAmB,EAAA;AAC1B,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;AAC/C,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACrB,QAAA,IAAI,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,QAAA,IAAI,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACnB;QACD,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;SACrB;KACJ;;AAGM,IAAA,IAAI,CAAC,OAAoB,EAAA;AAC5B,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;AAE9D,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACrB,QAAA,IAAI,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,QAAA,IAAI,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnD,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACtC;aAAM;YACH,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC5B,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;aAC3F;iBAAM;gBACH,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC1D,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC3D,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC9D,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;aAChE;YAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACxF,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,WAAW,EAAE,CAAC,GAAG,MAAM,GAAG,WAAW,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AACpG,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,MAAM,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/F,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;SACtF;AAED,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAErB,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACnB;QACD,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;SACrB;KACJ;AAEM,IAAA,UAAU,CAAC,OAAoB,EAAA;AAClC,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;AACvD,QAAA,IAAI,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,OAAO,EAAE;YACT,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;;AAE7C,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;;AAElB,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACjE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;;AAElB,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;;AAElB,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;SACrB;KACJ;;AAGM,IAAA,QAAQ,CAAC,OAAwB,EAAA;QACpC,MAAM,EACF,CAAC,EACD,CAAC,EACD,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,MAAM,GAAG,yBAAyB,EAClC,QAAQ,GAAG,iBAAiB,EAC5B,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAC/B,SAAS,GAAG,uBAAuB,EACnC,aAAa,GAAG,+BAA+B,EAC/C,UAAU,GAAG,mBAAmB,EAChC,cAAc,GAAG,uBAAuB,EACxC,SAAS,EACT,QAAQ,GAAG,KAAK,EACnB,GAAG,OAAO,CAAC;QACZ,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,QAAA,MAAM,cAAc,GAAG,aAAa,KAAK,+BAA+B,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5F,QAAA,MAAM,SAAS,GAAG,CAAA,EAAG,UAAU,CAAI,CAAA,EAAA,QAAQ,IAAI,CAAC;AAChD,QAAA,MAAM,WAAW,GAAG,cAAc,KAAK,WAAW,CAAC;AACnD,QAAA,MAAM,YAAY,GAAG,CAAC,YAAmB,KAAI;AACzC,YAAA,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC1B,gBAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;AACxD,gBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,GAAG,cAAc,CAAC,CAAC;AACnE,gBAAA,IAAI,OAAO,IAAI,WAAW,EAAE;oBACxB,IAAI,CAAC,IAAI,CAAC;wBACN,CAAC,EAAE,CAAC,GAAG,OAAO;AACd,wBAAA,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,eAAe;wBAChC,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC;AACtC,wBAAA,MAAM,EAAE,SAAS;AACpB,qBAAA,CAAC,CAAC;iBACN;AACL,aAAC,CAAC,CAAC;AACP,SAAC,CAAC;AAEF,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;AAE/B,QAAA,MAAM,QAAQ,GAAG,CAAG,EAAA,SAAS,IAAI,MAAM,CAAA,CAAA,EAAI,QAAQ,IAAI,CAAC,CAAI,CAAA,EAAA,SAAS,CAAI,CAAA,EAAA,IAAI,EAAE,CAAC;QAChF,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,aAAa,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;AAC3B,gBAAA,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aACpC;AACD,YAAA,OAAO,aAAa,CAAC;SACxB;QAED,MAAM,UAAU,GAAwB,EAAE,CAAC;;QAE3C,MAAM,OAAO,GAAG,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACtD,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;AAClC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACtD,QAAA,IAAI,QAAQ,GAAG,EAAE,CAAC;AAClB,QAAA,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,QAAA,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC;AAE9E,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3B,YAAA,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC;AAC9C,YAAA,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC1C,YAAA,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,IAAI,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;YAC3D,MAAM,eAAe,GAAG,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;YACjF,aAAa,IAAI,eAAe,CAAC;YACjC,MAAM,SAAS,GAAG,UAAU,GAAG,aAAa,IAAI,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC;AAChG,YAAA,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;;YAGvC,IAAI,CAAC,SAAS,IAAI,WAAW,KAAK,QAAQ,GAAG,MAAM,EAAE;gBACjD,MAAM,YAAY,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC9C,UAAU,CAAC,IAAI,CAAC;oBACZ,OAAO;oBACP,OAAO;AACP,oBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;oBAC/B,IAAI,EAAE,UAAU,IAAI,YAAY,GAAG,WAAW,GAAG,CAAG,EAAA,QAAQ,GAAG,IAAI,QAAQ;AAC9E,iBAAA,CAAC,CAAC;gBACH,QAAQ,GAAG,UAAU,CAAC;gBACtB,OAAO,GAAG,CAAC,CAAC;gBACZ,aAAa,GAAG,eAAe,CAAC;gBAChC,aAAa,GAAG,eAAe,CAAC;gBAEhC,IAAI,UAAU,EAAE;oBACZ,QAAQ,GAAG,EAAE,CAAC;oBACd,MAAM;iBACT;AACD,gBAAA,QAAQ,EAAE,CAAC;gBACX,OAAO,IAAI,UAAU,CAAC;gBACtB,SAAS;aACZ;YAED,QAAQ,GAAG,WAAW,CAAC;YACvB,aAAa,IAAI,eAAe,CAAC;SACpC;QAED,IAAI,QAAQ,EAAE;YACV,UAAU,CAAC,IAAI,CAAC;gBACZ,OAAO;gBACP,OAAO;AACP,gBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AAC/B,gBAAA,IAAI,EAAE,QAAQ;AACjB,aAAA,CAAC,CAAC;SACN;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;YAC3B,YAAY,CAAC,UAAU,CAAC,CAAC;SAC5B;AAED,QAAA,MAAM,GAAG,GAAG;AACR,YAAA,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO;AAC1D,YAAA,IAAI,EAAE,UAAU;SACnB,CAAC;AAEF,QAAA,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACjC,QAAA,OAAO,GAAG,CAAC;KACd;;AAGM,IAAA,IAAI,CAAC,OAAoB,EAAA;AAC5B,QAAA,MAAM,EACF,CAAC,EACD,CAAC,EACD,IAAI,EACJ,QAAQ,GAAG,iBAAiB,EAC5B,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAC/B,SAAS,GAAG,uBAAuB,EACnC,aAAa,GAAG,+BAA+B,EAC/C,UAAU,GAAG,mBAAmB,EAChC,cAAc,GAAG,uBAAuB,EAC3C,GAAG,OAAO,CAAC;QAEZ,MAAM,SAAS,GAAG,CAAG,EAAA,UAAU,IAAI,QAAQ,CAAA,GAAA,EAAM,mBAAmB,CAAA,CAAE,CAAC;AAEvE,QAAA,IAAI,cAAc,KAAK,WAAW,EAAE;AAChC,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC;AACN,gBAAA,CAAC,EAAE,CAAC;gBACJ,CAAC,EAAE,CAAC,GAAG,eAAe;gBACtB,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;AAC1C,gBAAA,MAAM,EAAE,SAAS;AACpB,aAAA,CAAC,CAAC;SACN;AAED,QAAA,MAAM,cAAc,GAAG,aAAa,KAAK,+BAA+B,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5F,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC;KAClD;;AAGM,IAAA,GAAG,CAAC,OAAqB,EAAA;AAC5B,QAAA,MAAM,EACF,CAAC,EACD,CAAC,EACD,KAAK,EACL,MAAM,EACN,IAAI,EACJ,MAAM,EACN,UAAU,EACV,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAC3B,QAAQ,GAAG,sBAAsB,EACjC,UAAU,GAAG,mBAAmB,EAChC,MAAM,EACT,GAAG,OAAO,CAAC;;QAGZ,IAAI,CAAC,IAAI,CAAC;YACN,CAAC;YACD,CAAC;YACD,KAAK;YACL,MAAM;YACN,MAAM;AACN,YAAA,IAAI,EAAE,UAAU;YAChB,MAAM;AACT,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC;YACN,CAAC,EAAE,CAAC,GAAG,oBAAoB;YAC3B,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,IAAI,CAAC;YAC9B,IAAI;AACJ,YAAA,SAAS,EAAE,KAAK;YAChB,QAAQ;YACR,UAAU;AACb,SAAA,CAAC,CAAC;QAEH,OAAO;YACH,KAAK;YACL,MAAM;SACT,CAAC;KACL;AAEM,IAAA,KAAK,CAAC,OAAqB,EAAE,WAAqB,EAAE,YAAsB,EAAA;AAC7E,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;AACpE,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,GAAG,EAAE;YACN,OAAO;SACV;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;;AAEvC,QAAA,IAAI,KAAK,KAAK,KAAK,EAAE;YACjB,IAAI,YAAY,EAAE;gBACd,IAAI,CAAC,IAAI,CAAC;oBACN,CAAC;oBACD,CAAC,EAAE,CAAC,GAAG,CAAC;AACR,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,IAAI,EAAE,EAAE;oBACR,IAAI,EAAE,MAAM,CAAC,OAAO;AACvB,iBAAA,CAAC,CAAC;aACN;YACD,OAAO;SACV;;AAED,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,OAAO,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;SAC1D;AACD,QAAA,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,CAAC;AAE/B,QAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SACzD;AAED,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAChB,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;SACV;QAED,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAChB,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACrB,YAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAChB,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACtB;KACJ;AAEM,IAAA,MAAM,CAAC,OAUb,EAAA;AACG,QAAA,MAAM,EACF,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,EACL,EAAE,EACF,GAAG,EACH,KAAK,EACL,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAC3B,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAC/B,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAC/B,OAAO,GAAG,CAAC,EACd,GAAG,OAAO,CAAC;AAEZ,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC7C,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;AACnC,QAAA,MAAM,SAAS,GAAG,GAAG,IAAI,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC;AACzB,QAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;QAEpD,QAAQ,IAAI;AACR,YAAA,KAAK,iBAAiB,CAAC,MAAM,EAAE;AAC3B,gBAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,SAAS,EAAE;AACZ,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC9B,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;oBACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AACpE,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACrB,oBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;oBAChB,OAAO,IAAI,CAAC,IAAI,CAAC;wBACb,CAAC,EAAE,CAAC,GAAG,MAAM;wBACb,CAAC,EAAE,CAAC,GAAG,MAAM;AACb,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,SAAS,EAAE,yBAAyB;AACpC,wBAAA,aAAa,EAAE,kCAAkC;AACjD,wBAAA,QAAQ,EAAE,YAAY;wBACtB,SAAS,EAAE,MAAM,CAAC,KAAK;AAC1B,qBAAA,CAAC,CAAC;iBACN;gBACD,OAAO,IAAI,CAAC,KAAK,CAAC;AACd,oBAAA,IAAI,EAAE,SAAS;oBACf,CAAC;oBACD,CAAC;AACD,oBAAA,GAAG,EAAE,SAAS;AACd,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,MAAM,EAAE,IAAI;AACZ,oBAAA,QAAQ,EAAE,CAAC,GAAG,KAAI;AACd,wBAAA,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;wBACzB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;wBAC/D,GAAG,CAAC,IAAI,EAAE,CAAC;qBACd;oBACD,OAAO;AACV,iBAAA,CAAC,CAAC;aACN;SACJ;KACJ;AAED;;;;;AAKG;AACK,IAAA,uCAAuC,CAC3C,EAAU,EACV,EAAU,EACV,EAAU,EACV,EAAU,EACV,EAAO,EACP,EAAU,EACV,EAAU,EACV,EAAU,EACV,MAAc,EAAA;QAEd,MAAM,GAAG,GAAG,MAAM,IAAI,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;AACvC,QAAA,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC;AACjF,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC;QAEtF,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAE7D,QAAA,IAAI,MAAM,GAAG,CAAC,EAAE;AACZ,YAAA,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,YAAA,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC3B;AAED,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAEnI,QAAA,IAAI,EAAE,KAAK,EAAE,EAAE;YACX,CAAC,IAAI,CAAC,CAAC,CAAC;SACX;AACD,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;YACV,CAAC,GAAG,CAAC,CAAC;SACT;QAED,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC/B,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QAEhC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACvE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAEvE,MAAM,IAAI,GAAG,UAAU,CAAW,EAAA;YAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,SAAC,CAAC;AACF,QAAA,MAAM,MAAM,GAAG,UAAU,CAAW,EAAE,CAAW,EAAA;AAC7C,YAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,SAAC,CAAC;AACF,QAAA,MAAM,MAAM,GAAG,UAAU,CAAW,EAAE,CAAW,EAAA;AAC7C,YAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1E,SAAC,CAAC;AACF,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AACjE,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;QACvD,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1B,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;AACpB,YAAA,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;SACpB;QACD,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;YACnB,MAAM,GAAG,CAAC,CAAC;SACd;QACD,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;YACxB,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;SACjC;QACD,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;YACxB,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;SACjC;AACD,QAAA,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;KACnD;AAED;;;AAGG;AACK,IAAA,aAAa,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAA;AAChE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;KACnE;AAED;;;;;;;;;;;;;AAaG;AACK,IAAA,qBAAqB,CACzB,GAAW,EACX,GAAW,EACX,GAAW,EACX,GAAW,EACX,GAAW,EACX,GAAW,EACX,GAAW,EACX,GAAW,EACX,GAAW,EAAA;QAEX,SAAS,GAAG,CAAC,CAAS,EAAA;AAClB,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACpB;QAED,SAAS,GAAG,CAAC,CAAS,EAAA;YAClB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SAC9B;QAED,SAAS,GAAG,CAAC,CAAS,EAAA;AAClB,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACpC;QAED,SAAS,GAAG,CAAC,CAAS,EAAA;AAClB,YAAA,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACtC;AAED,QAAA,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5E,QAAA,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAE5E,OAAO;AACH,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;SACP,CAAC;KACL;AAED;;;;;;;;;;AAUG;AACK,IAAA,yBAAyB,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW,EAAA;QACvH,SAAS,GAAG,CAAC,CAAS,EAAA;YAClB,OAAO,CAAC,GAAG,CAAC,CAAC;SAChB;QAED,SAAS,GAAG,CAAC,CAAS,EAAA;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1B;QAED,SAAS,GAAG,CAAC,CAAS,EAAA;YAClB,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5B;QAED,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAE3D,OAAO;AACH,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;SACP,CAAC;KACL;AAED;;;;;;;;;AASG;IACK,uBAAuB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,KAAa,EAAE,GAAW,EAAA;QACtG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,MAAM,EAAE,GAAG;YACP,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;SAC1B,CAAC;QACF,OAAO;AACH,YAAA,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;AACvC,YAAA,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;SAC1C,CAAC;KACL;AAED;;;;;;;AAOG;AACK,IAAA,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,GAAW,EAAE,MAAgB,EAAA;AAClE,QAAA,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAEnB,QAAQ,GAAG;AACP,YAAA,KAAK,GAAG;AACJ,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,YAAA,KAAK,GAAG;gBACJ,GAAG,GAAG,GAAG,CAAC;AACV,gBAAA,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3G,gBAAA,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;AAC9B,oBAAA,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3G,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBAClD,EAAE,GAAG,EAAE,CAAC;iBACX;AACD,gBAAA,OAAO,GAAG,CAAC;AACf,YAAA,KAAK,GAAG;gBACJ,GAAG,GAAG,GAAG,CAAC;AACV,gBAAA,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,gBAAA,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;AAC9B,oBAAA,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzF,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBAClD,EAAE,GAAG,EAAE,CAAC;iBACX;AACD,gBAAA,OAAO,GAAG,CAAC;AACf,YAAA,KAAK,GAAG;gBACJ,GAAG,GAAG,GAAG,CAAC;AACV,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAC/B,gBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;gBAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE;oBAC7B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;iBAC/B;AACD,gBAAA,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACxF,gBAAA,IAAI,MAAM,GAAG,CAAC,EAAE;AACZ,oBAAA,KAAK,CAAC,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE;AACrC,wBAAA,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACpF,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;wBAClD,EAAE,GAAG,EAAE,CAAC;qBACX;iBACJ;qBAAM;AACH,oBAAA,KAAK,CAAC,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE;AACrC,wBAAA,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACpF,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;wBAClD,EAAE,GAAG,EAAE,CAAC;qBACX;iBACJ;AACD,gBAAA,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACtF,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAClD,gBAAA,OAAO,GAAG,CAAC;SAClB;AACD,QAAA,OAAO,CAAC,CAAC;KACZ;AAED;;;;AAIG;AACK,IAAA,aAAa,CAAC,IAAY,EAAA;QAC9B,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,OAAO,EAAE,CAAC;SACb;QAED,IAAI,EAAE,GAAG,IAAI,CAAC;AACd,QAAA,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEhH,QAAA,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAChC,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SACxD;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAQ,EAAE,CAAC;QACnB,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,GAAG,GAAG,CAAC,CAAC;QAEZ,MAAM,EAAE,GAAG,qDAAqD,CAAC;AACjE,QAAA,IAAI,KAA6B,CAAC;AAClC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnB,YAAA,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAClB,QAAQ,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;gBAC3B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACzB;YAED,MAAM,CAAC,GAAQ,EAAE,CAAC;AAElB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AACjD,gBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AACpB,oBAAA,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACb,SAAS;iBACZ;gBACD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAChB,oBAAA,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAClB;qBAAM;AACH,oBAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACb;aACJ;AAED,YAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjB,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBACb,MAAM;iBACT;gBAED,IAAI,GAAG,GAAkB,IAAI,CAAC;gBAC9B,IAAI,MAAM,GAAQ,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,GAAG,CAAC;gBACnB,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,gBAAA,IAAI,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;AAC5B,gBAAA,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;gBAEhC,QAAQ,CAAC;AACL,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACjB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;wBACjB,GAAG,GAAG,GAAG,CAAC;AACV,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;AACJ,wBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACrB,wBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;wBACrB,GAAG,IAAI,EAAE,CAAC;wBACV,GAAG,IAAI,EAAE,CAAC;wBACV,GAAG,GAAG,GAAG,CAAC;AACV,wBAAA,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,EAAE;AACpD,4BAAA,KAAK,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE;gCAC3C,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,GAAG,EAAE;AACzB,oCAAA,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC7B,oCAAA,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;oCAC7B,MAAM;iCACT;6BACJ;yBACJ;AACD,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,CAAC,GAAG,GAAG,CAAC;wBACR,MAAM;AACV,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC;AACV,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,CAAC,GAAG,GAAG,CAAC;wBACR,MAAM;AAEV,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;wBACjB,GAAG,GAAG,GAAG,CAAC;AACV,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC;AACV,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;wBACjB,GAAG,GAAG,GAAG,CAAC;AACV,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC;AACV,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;wBACJ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACxD,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;AACJ,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAChF,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACjB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;wBACjB,GAAG,GAAG,GAAG,CAAC;AACV,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG,CAAC;wBACb,MAAM,GAAG,GAAG,CAAC;wBACb,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5B,wBAAA,IAAI,OAAO,CAAC,OAAO,KAAK,GAAG,EAAE;AACzB,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC5C;AACD,wBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAClD,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC;AACV,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG,CAAC;wBACb,MAAM,GAAG,GAAG,CAAC;wBACb,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5B,wBAAA,IAAI,OAAO,CAAC,OAAO,KAAK,GAAG,EAAE;AACzB,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC5C;wBACD,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9D,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACjB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;wBACjB,GAAG,GAAG,GAAG,CAAC;AACV,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;AACJ,wBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAClC,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;AACJ,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9C,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACjB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;wBACjB,GAAG,GAAG,GAAG,CAAC;AACV,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtB,MAAM;AACV,oBAAA,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG,CAAC;wBACb,MAAM,GAAG,GAAG,CAAC;wBACb,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5B,wBAAA,IAAI,OAAO,CAAC,OAAO,KAAK,GAAG,EAAE;AACzB,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC5C;AACD,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC;wBACV,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtC,MAAM;AACV,oBAAA,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG,CAAC;wBACb,MAAM,GAAG,GAAG,CAAC;wBACb,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5B,wBAAA,IAAI,OAAO,CAAC,OAAO,KAAK,GAAG,EAAE;AACzB,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC5C;AACD,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACjB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;wBACjB,GAAG,GAAG,GAAG,CAAC;wBACV,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBACtC,MAAM;AACV,oBAAA,KAAK,GAAG;AACJ,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACf,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACf,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACf,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;wBACf,EAAE,GAAG,GAAG,CAAC;wBACT,EAAE,GAAG,GAAG,CAAC;AACT,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;wBAChB,GAAG,GAAG,GAAG,CAAC;wBACV,MAAM,GAAG,IAAI,CAAC,uCAAuC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;wBAC7F,MAAM;AACV,oBAAA,KAAK,GAAG;AACJ,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACf,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACf,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAChB,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACf,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;wBACf,EAAE,GAAG,GAAG,CAAC;wBACT,EAAE,GAAG,GAAG,CAAC;AACT,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACjB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;wBACjB,GAAG,GAAG,GAAG,CAAC;wBACV,MAAM,GAAG,IAAI,CAAC,uCAAuC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;wBAC7F,MAAM;iBACb;gBAED,EAAE,CAAC,IAAI,CAAC;oBACJ,OAAO,EAAE,GAAG,IAAI,CAAC;AACjB,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,KAAK,EAAE;AACH,wBAAA,CAAC,EAAE,MAAM;AACT,wBAAA,CAAC,EAAE,MAAM;AACZ,qBAAA;AACD,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC;AAChE,iBAAA,CAAC,CAAC;aACN;YAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE;gBACxB,EAAE,CAAC,IAAI,CAAC;AACJ,oBAAA,OAAO,EAAE,GAAG;AACZ,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,UAAU,EAAE,CAAC;AAChB,iBAAA,CAAC,CAAC;aACN;SACJ;AAED,QAAA,OAAO,EAAE,CAAC;KACb;AAED;;;AAGG;AACI,IAAA,IAAI,CAAC,OAA8G,EAAA;AACtH,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAE3C,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9B,QAAQ,CAAC;AACL,gBAAA,KAAK,GAAG;AACJ,oBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAM;AACV,gBAAA,KAAK,GAAG;AACJ,oBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAM;AACV,gBAAA,KAAK,GAAG;AACJ,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3D,MAAM;AACV,gBAAA,KAAK,GAAG;oBACJ,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClD,MAAM;AACV,gBAAA,KAAK,GAAG;AACJ,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChB,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChB,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChB,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChB,oBAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,oBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,oBAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChB,oBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC5B,oBAAA,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AACrC,oBAAA,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBAErC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3B,oBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,EAAS,CAAC;AAC9D,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;oBACvC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;oBACtB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;oBAE7B,MAAM;AACV,gBAAA,KAAK,GAAG;oBACJ,QAAQ,GAAG,IAAI,CAAC;AAChB,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;oBACrB,MAAM;aACb;SACJ;QAED,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;SACrB;aAAM;AACH,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACnB;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;KACtB;AACJ,CAAA;AAEM,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE;;AC5lClC;;;;AAIG;AACG,MAAO,MAAO,SAAQ,MAAM,CAAA;AAAlC,IAAA,WAAA,GAAA;;;QAEc,IAAC,CAAA,CAAA,GAAG,CAAC,CAAC;QACN,IAAC,CAAA,CAAA,GAAG,CAAC,CAAC;;QAEN,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;;QAEd,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;;QAEhB,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;;QAEb,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;;QAEhB,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;QAEhB,IAAc,CAAA,cAAA,GAAG,CAAC,CAAC;KAuChC;;AApCG,IAAA,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAiB,EAAA;AACpG,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;KACxC;;AAGD,IAAA,IAAc,OAAO,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC;KACjC;;AAGD,IAAA,IAAc,MAAM,GAAA;QAChB,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;KACpD;AAES,IAAA,mBAAmB,CAAC,EAAE,KAAK,EAAE,UAAU,EAA6C,EAAA;AAC1F,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,KAAK,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxF,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC;AACN,YAAA,CAAC,EAAE,cAAc;AACjB,YAAA,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,eAAe;AAC3B,YAAA,KAAK,EACD,IAAI,CAAC,cAAc,GAAG,cAAc,GAAG,+BAA+B;AAClE,kBAAE,+BAA+B;AACjC,kBAAE,IAAI,CAAC,cAAc,GAAG,cAAc;AAC9C,YAAA,MAAM,EAAE,SAAS;YACjB,IAAI;AACP,SAAA,CAAC,CAAC;KACN;AACJ;;ACnDK,MAAO,YAAa,SAAQ,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,UAAU,EAAmC,EAAA;AACxE,QAAA,KAAK,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;AAC1C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,YAAY,GAAG,+BAA+B,CAAC;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,GAAG,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,IAAI,CAAC;AACN,YAAA,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW;YAC5B,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC9B,SAAA,CAAC,CAAC;KACN;AAEO,IAAA,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAA6C,EAAA;AAC/E,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACjB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACjB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACjC,QAAA,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAEvE,IAAI,CAAC,IAAI,CAAC;YACN,CAAC;YACD,CAAC,EAAE,CAAC,GAAG,eAAe;AACtB,YAAA,KAAK,EAAE,KAAe;AACtB,YAAA,MAAM,EAAE,SAAS;YACjB,IAAI;AACP,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC;YACN,CAAC;YACD,CAAC,EAAE,CAAC,GAAG,SAAS;YAChB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAe,EAAE,CAAC,CAAC;AAClC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC9B,SAAA,CAAC,CAAC;KACN;IAEO,eAAe,CAAC,EAAE,UAAU,EAAmC,EAAA;QACnE,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;AAC1B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACjB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACjC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,MAAM,YAAY,GAAG,eAAe,CAAC;AACrC,QAAA,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAEvE,IAAI,CAAC,IAAI,CAAC;AACN,YAAA,CAAC,EAAE,YAAY;YACf,CAAC,EAAE,CAAC,GAAG,eAAe;AACtB,YAAA,KAAK,EAAE,WAAW,GAAG,uBAAuB,GAAG,YAAY,GAAG,CAAC;AAC/D,YAAA,MAAM,EAAE,SAAS;YACjB,IAAI;AACP,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC;AACN,YAAA,CAAC,EAAE,YAAY;YACf,CAAC;AACD,YAAA,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,GAAG,uBAAuB,GAAG,YAAY,GAAG,CAAC,EAAE,SAAS,CAAC;AAC3F,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC9B,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC;AACN,YAAA,CAAC,EAAE,qBAAqB;YACxB,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,yBAAyB,IAAI,CAAC,GAAG,eAAe;AACpE,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,IAAI,EAAE,sBAAsB;AAC5B,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC5B,SAAA,CAAC,CAAC;KACN;IAEO,cAAc,CAAC,EAAE,UAAU,EAAmC,EAAA;QAClE,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;AACzB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,UAAU,CAAC;gBACZ,KAAK;gBACL,UAAU;AACb,aAAA,CAAC,CAAC;SACN;AACD,QAAA,IAAI,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;KAC5C;IAEO,gBAAgB,CAAC,EAAE,UAAU,EAAmC,EAAA;AACpE,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxC,IAAI,CAAC,UAAU,CAAC;YACZ,KAAK,EAAE,IAAI,CAAC,WAAW;YACvB,UAAU;AACb,SAAA,CAAC,CAAC;KACN;IAED,MAAM,CAAC,EAAE,UAAU,EAAmC,EAAA;QAClD,IAAI,CAAC,eAAe,CAAC;YACjB,UAAU;AACb,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC;YAClB,UAAU;AACb,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC;YAChB,UAAU;AACb,SAAA,CAAC,CAAC;KACN;AACJ,CAAA;AAEM,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE;;AC1D9C;;AAEG;AACG,MAAO,UAAW,SAAQ,MAAM,CAAA;;IAE3B,SAAS,CAAC,KAAmB,EAAE,UAA+B,EAAA;AACjE,QAAA,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;AAClC,QAAA,MAAM,EAAE,UAAU,GAAG,mBAAmB,EAAE,GAAG,UAAU,CAAC;QAExD,QAAQ,SAAS;YACb,KAAK,gBAAgB,CAAC,IAAI,CAAC;YAC3B,KAAK,gBAAgB,CAAC,IAAI,CAAC;YAC3B,KAAK,gBAAgB,CAAC,SAAS,CAAC;YAChC,KAAK,gBAAgB,CAAC,SAAS,CAAC;YAChC,KAAK,gBAAgB,CAAC,IAAI,CAAC;YAC3B,KAAK,gBAAgB,CAAC,QAAQ,CAAC;YAC/B,KAAK,gBAAgB,CAAC,MAAM,CAAC;YAC7B,KAAK,gBAAgB,CAAC,SAAS,CAAC;YAChC,KAAK,gBAAgB,CAAC,SAAS;AAC3B,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC;AACtE,YAAA;AACI,gBAAA,OAAO,IAAI,CAAC;SACnB;KACJ;;IAGM,UAAU,CAAC,MAAqB,EAAE,GAA0C,EAAA;AAC/E,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AACzB,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAE7B,QAAQ,SAAS;YACb,KAAK,gBAAgB,CAAC,IAAI,CAAC;YAC3B,KAAK,gBAAgB,CAAC,MAAM,CAAC;YAC7B,KAAK,gBAAgB,CAAC,IAAI;gBACtB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC5C,KAAK,gBAAgB,CAAC,MAAM;gBACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC9C,KAAK,gBAAgB,CAAC,IAAI,CAAC;YAC3B,KAAK,gBAAgB,CAAC,SAAS,CAAC;YAChC,KAAK,gBAAgB,CAAC,SAAS;gBAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC5C,KAAK,gBAAgB,CAAC,IAAI;gBACtB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC5C,KAAK,gBAAgB,CAAC,QAAQ;gBAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAChD,KAAK,gBAAgB,CAAC,MAAM,CAAC;YAC7B,KAAK,gBAAgB,CAAC,SAAS,CAAC;YAChC,KAAK,gBAAgB,CAAC,SAAS;gBAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC9C,YAAA;AACI,gBAAA,OAAO,IAAI,CAAC;SACnB;KACJ;IAEO,cAAc,CAAC,MAAqB,EAAE,GAAS,EAAA;AACnD,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AACnE,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,UAAU,GAAkB,SAAS,KAAK,gBAAgB,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC;AAC3G,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;YACpB,OAAO;SACV;AACD,QAAA,MAAM,YAAY,GAAG,CAAC,WAAW,CAAC;AAClC,QAAA,MAAM,WAAW,GAAG,SAAS,KAAK,gBAAgB,CAAC,IAAI,CAAC;AACxD,QAAA,MAAM,aAAa,GAAG,SAAS,KAAK,gBAAgB,CAAC,MAAM,CAAC;AAE5D,QAAA,IAAI,WAAW,IAAI,YAAY,EAAE;YAC7B,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;SAClD;QAED,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAClD,QAAA,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,uBAAuB,CAAC;AAC9D,QAAA,MAAM,UAAU,GAAG,KAAK,EAAE,UAAU,CAAC;AACrC,QAAA,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,CAAC;AAC7D,QAAA,MAAM,OAAO,GAAG,SAAS,KAAK,wBAAwB,GAAG,CAAC,GAAG,WAAW,GAAG,qBAAqB,GAAG,CAAC,GAAG,qBAAqB,CAAC;AAC7H,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,yBAAyB,GAAG,CAAC,CAAC;QAClD,MAAM,cAAc,GAAG,uBAAuB,CAAC;QAE/C,IAAI,aAAa,EAAE;AACf,YAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAChC,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,gBAAA,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,WAAW,IAAI,YAAY;gBACrC,UAAU;AACb,aAAA,CAAC,CAAC;YACH,IAAI,GAAG,EAAE;gBACL,IAAI,QAAQ,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC;AACN,oBAAA,CAAC,EAAE,OAAO;AACV,oBAAA,CAAC,EAAE,OAAO;AACV,oBAAA,IAAI,EAAE,QAAQ;oBACd,SAAS;AACT,oBAAA,SAAS,EAAE,KAAK;oBAChB,UAAU;oBACV,cAAc;AACd,oBAAA,aAAa,EAAE,kCAAkC;AACpD,iBAAA,CAAC,CAAC;aACN;SACJ;aAAM;YACH,IAAI,CAAC,QAAQ,CAAC;AACV,gBAAA,CAAC,EAAE,OAAO;AACV,gBAAA,CAAC,EAAE,OAAO;AACV,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,QAAQ,EAAE,YAAY;AACtB,gBAAA,MAAM,EAAE,2BAA2B;AACnC,gBAAA,UAAU,EAAE,wBAAwB;gBACpC,SAAS;AACT,gBAAA,aAAa,EAAE,kCAAkC;AACjD,gBAAA,SAAS,EAAE,SAAS,KAAK,gBAAgB,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK;gBACvE,UAAU;gBACV,cAAc;gBACd,SAAS;AACT,gBAAA,QAAQ,EAAE,IAAI;AACjB,aAAA,CAAC,CAAC;SACN;KACJ;IAEO,gBAAgB,CAAC,MAAqB,EAAE,GAAS,EAAA;AACrD,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AACzB,QAAA,IAAK,KAA4B,CAAC,QAAQ,EAAE,WAAW,EAAE;AACrD,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SAC3C;aAAM;AACH,YAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;SAC5C;KACJ;IAEO,qBAAqB,CAAC,MAAqB,EAAE,GAAS,EAAA;AAC1D,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;QAC5D,IAAI,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;YAAE,OAAO;AACtE,QAAA,IAAI,QAAQ,GAAG,CAAC,GAAG,qBAAqB,CAAC;AACzC,QAAA,MAAM,iBAAiB,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,CAAC;AAClE,QAAA,MAAM,WAAW,GAAI,KAA4B,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxE,MAAM,SAAS,GAAG,CAAG,EAAA,mBAAmB,IAAI,8BAA8B,CAAA,GAAA,EAAM,mBAAmB,CAAA,CAAE,CAAC;AACtG,QAAA,MAAM,YAAY,GAAG,WAAW,KAAK,wBAAwB,CAAC,GAAG,IAAI,WAAW,KAAK,wBAAwB,CAAC,KAAK,CAAC;QAEpH,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,QAAA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAI;YACvC,MAAM,IAAI,GAAI,KAA4B,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC;AACvG,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,IAAc,EAAE,SAAS,CAAC,CAAC;AACrE,YAAA,UAAU,IAAI,SAAS,GAAG,CAAC,GAAG,qBAAqB,CAAC;YACpD,IAAI,KAAK,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,UAAU,IAAI,gCAAgC,CAAC;aAClD;YACD,IAAI,YAAY,EAAE;AACd,gBAAA,UAAU,IAAI,8BAA8B,GAAG,CAAC,GAAG,gCAAgC,CAAC;aACvF;YACD,IAAI,UAAU,GAAG,iBAAiB,IAAI,UAAU,KAAK,iBAAiB,EAAE;gBACpE,aAAa,GAAG,KAAK,CAAC;aACzB;AACD,YAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3E,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,SAAS,GAAG,uBAAuB,GAAG,qBAAqB,GAAG,CAAC,CAAC;AACtE,QAAA,MAAM,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,8BAA8B,GAAG,CAAC,GAAG,gCAAgC,GAAG,SAAS,CAAC;AAE9H,QAAA,IAAI,cAAc,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE;AACnC,YAAA,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;AACrF,YAAA,MAAM,aAAa,GAAG,iBAAiB,GAAG,aAAa,GAAG,QAAQ,CAAC;AACnE,YAAA,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC;;YAElE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;AAE3D,YAAA,IAAI,MAAM,GAAG,CAAC,EAAE;;AAEZ,gBAAA,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,EAAE,CAAA,SAAA,CAAW,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC;AAC1F,gBAAA,MAAM,GAAG,GAAG,iBAAiB,GAAG,gCAAgC,GAAG,WAAW,CAAC;;AAE/E,gBAAA,MAAM,kBAAkB,GAAG,aAAa,GAAG,GAAG,CAAC;gBAC/C,IAAI,kBAAkB,EAAE;oBACpB,MAAM,UAAU,GAAG,aAAa,KAAK,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;AACpG,oBAAA,aAAa,GAAG,GAAG,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,GAAG,aAAa,GAAG,CAAC,CAAC;iBACnF;qBAAM;;AAEH,oBAAA,aAAa,GAAG,GAAG,GAAG,aAAa,GAAG,QAAQ,GAAG,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC;iBACtF;aACJ;SACJ;AAED,QAAA,MAAM,UAAU,GAAG,CAAI,CAAA,EAAA,cAAc,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;AACrE,QAAA,MAAM,WAAW,GACb,cAAc,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,qBAAqB,GAAG,CAAC,CAAC;;AAE/H,QAAA,IAAI,WAAW,GAAG,iBAAiB,GAAG,WAAW,IAAI,WAAW,GAAG,CAAC,GAAG,gCAAgC,GAAG,CAAC,CAAC,CAAC;AAE7G,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACxD,YAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AACvC,YAAA,MAAM,QAAQ,GAAG;AACb,gBAAA,CAAC,EAAE,QAAQ;gBACX,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,2BAA2B,IAAI,CAAC;AACpE,gBAAA,MAAM,EAAE,2BAA2B;AACnC,gBAAA,MAAM,EAAE,qBAAqB;gBAC7B,IAAI,EAAE,MAAM,CAAC,OAAO;AACpB,gBAAA,KAAK,EAAE,CAAC;aACX,CAAC;AAEF,YAAA,MAAM,UAAU,GAAG,CAAC,WAAqC,EAAE,KAAa,KAAI;gBACxE,MAAM,SAAS,GAAG,YAAY;sBACxB,8BAA8B,GAAG,CAAC,GAAG,gCAAgC,GAAG,qBAAqB,GAAG,CAAC;AACnG,sBAAE,qBAAqB,GAAG,CAAC,CAAC;AAChC,gBAAA,IAAI,WAAW,GAAG,QAAQ,EAAE;oBACxB,OAAO;iBACV;AACD,gBAAA,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1D,gBAAA,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;gBAC5C,IAAI,KAAK,KAAK,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrC,WAAW,IAAI,gCAAgC,CAAC;iBACnD;AACD,gBAAA,MAAM,OAAO,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC;AAC1E,gBAAA,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC;gBACzB,IAAI,YAAY,EAAE;AACd,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpB,oBAAA,IAAI,KAAK,KAAK,MAAM,EAAE;wBAClB,IAAI,CAAC,IAAI,CAAC;AACN,4BAAA,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,qBAAqB;4BACrC,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,8BAA8B,GAAG,CAAC,IAAI,CAAC;4BAC3E,KAAK,EAAE,8BAA8B,GAAG,CAAC;4BACzC,MAAM,EAAE,8BAA8B,GAAG,CAAC;AAC1C,4BAAA,MAAM,EAAE,qBAAqB;4BAC7B,IAAI,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,OAAO;AACxD,yBAAA,CAAC,CAAC;qBACN;AAAM,yBAAA,IAAI,KAAK,KAAK,KAAK,EAAE;wBACxB,IAAI,CAAC,GAAG,CAAC;AACL,4BAAA,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,qBAAqB;AACrC,4BAAA,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,8BAA8B,GAAG,CAAC,IAAI,CAAC,GAAG,8BAA8B;AAC5G,4BAAA,MAAM,EAAE,8BAA8B;4BACtC,IAAI,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,OAAO;AACxD,yBAAA,CAAC,CAAC;qBACN;oBAED,IAAI,CAAC,IAAI,CAAC;wBACN,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,qBAAqB,GAAG,8BAA8B,GAAG,CAAC,GAAG,gCAAgC;wBAC7G,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,8BAA8B,IAAI,CAAC;AACvE,wBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;4BACpB,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,QAAQ,EAAE,OAAO,GAAG,SAAS;AAC7B,4BAAA,QAAQ,EAAE,8BAA8B;AAC3C,yBAAA,CAAC,CAAC,IAAI;wBACP,SAAS,EAAE,MAAM,CAAC,OAAO;AACzB,wBAAA,QAAQ,EAAE,8BAA8B;AAC3C,qBAAA,CAAC,CAAC;iBACN;AAAM,qBAAA,IAAI,WAAW,KAAK,wBAAwB,CAAC,GAAG,EAAE;oBACrD,IAAI,CAAC,GAAG,CAAC;wBACL,CAAC,EAAE,QAAQ,CAAC,CAAC;wBACb,CAAC,EAAE,QAAQ,CAAC,CAAC;wBACb,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,wBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;4BACpB,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,QAAQ,EAAE,OAAO,GAAG,SAAS;AAC7B,4BAAA,QAAQ,EAAE,sBAAsB;AACnC,yBAAA,CAAC,CAAC,IAAI;AACP,wBAAA,MAAM,EAAE,2BAA2B;AACnC,wBAAA,QAAQ,EAAE,sBAAsB;wBAChC,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,wBAAA,OAAO,EAAE,qBAAqB;wBAC9B,UAAU,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,OAAO;AAC9D,qBAAA,CAAC,CAAC;iBACN;qBAAM;AACH,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACpB,IAAI,CAAC,IAAI,CAAC;AACN,wBAAA,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,qBAAqB;wBACrC,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,sBAAsB,IAAI,CAAC;AAC/D,wBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;4BACpB,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,QAAQ,EAAE,OAAO,GAAG,SAAS;AAC7B,4BAAA,QAAQ,EAAE,sBAAsB;AACnC,yBAAA,CAAC,CAAC,IAAI;wBACP,SAAS,EAAE,MAAM,CAAC,OAAO;AACzB,wBAAA,QAAQ,EAAE,sBAAsB;AACnC,qBAAA,CAAC,CAAC;iBACN;AACD,gBAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC;gBACpC,WAAW,IAAI,YAAY,CAAC;AAC5B,gBAAA,QAAQ,IAAI,YAAY,GAAG,gCAAgC,CAAC;AAChE,aAAC,CAAC;YAEF,QAAQ,WAAW;gBACf,KAAK,wBAAwB,CAAC,GAAG;AAC7B,oBAAA,UAAU,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAChD,MAAM;gBACV,KAAK,wBAAwB,CAAC,KAAK;AAC/B,oBAAA,UAAU,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBACnD,MAAM;gBACV,KAAK,wBAAwB,CAAC,GAAG;AAC7B,oBAAA,UAAU,CAAC,wBAAwB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC7C,MAAM;AACV,gBAAA;AACI,oBAAA,UAAU,CAAC,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC9C,MAAM;aACb;SACJ;AAED,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;AACjB,YAAA,IAAI,WAAW,KAAK,wBAAwB,CAAC,GAAG,EAAE;gBAC9C,IAAI,CAAC,GAAG,CAAC;AACL,oBAAA,CAAC,EAAE,QAAQ;oBACX,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,2BAA2B,IAAI,CAAC;AACpE,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,MAAM,EAAE,2BAA2B;AACnC,oBAAA,IAAI,EAAE,UAAU;oBAChB,UAAU,EAAE,MAAM,CAAC,OAAO;oBAC1B,KAAK,EAAE,MAAM,CAAC,OAAO;AACrB,oBAAA,MAAM,EAAE,2BAA2B;AACnC,oBAAA,OAAO,EAAE,qBAAqB;AAC9B,oBAAA,QAAQ,EAAE,sBAAsB;AACnC,iBAAA,CAAC,CAAC;aACN;iBAAM;gBACH,IAAI,CAAC,IAAI,CAAC;AACN,oBAAA,CAAC,EAAE,QAAQ;oBACX,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,2BAA2B,IAAI,CAAC;AACpE,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,MAAM,EAAE,2BAA2B;oBACnC,IAAI,EAAE,MAAM,CAAC,OAAO;AACpB,oBAAA,MAAM,EAAE,qBAAqB;AAChC,iBAAA,CAAC,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC;oBACN,CAAC,EAAE,QAAQ,GAAG,qBAAqB;oBACnC,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,sBAAsB,IAAI,CAAC;AAC/D,oBAAA,IAAI,EAAE,UAAU;oBAChB,SAAS,EAAE,MAAM,CAAC,OAAO;AACzB,oBAAA,QAAQ,EAAE,sBAAsB;AACnC,iBAAA,CAAC,CAAC;aACN;SACJ;KACJ;IAEO,sBAAsB,CAAC,MAAqB,EAAE,GAAS,EAAA;AAC3D,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QACtE,MAAM,OAAO,GAAG,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YACzC,OAAO;SACV;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,CAAC,IAAI,CAAC,CAAyC,sCAAA,EAAA,cAAc,CAAC,CAAC,CAAC,CAAE,CAAA,CAAC,CAAC;SAC9E;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC;QAC7B,MAAM,IAAI,GAAI,KAA4B,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAChH,QAAA,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,CAAC,YAAoB,EAAE,QAAmB,GAAA,yBAAyB,KAAI;AAC3F,YAAA,YAAY,IAAI,WAAW,GAAG,qCAAqC,GAAG,4CAA4C,GAAG,CAAC,CAAC;YACvH,OAAO,IAAI,CAAC,YAAY,CAAC;AACrB,gBAAA,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,WAAW,IAAI,YAAY;AACrC,gBAAA,QAAQ,EAAE,QAAQ;AACrB,aAAA,CAAC,CAAC;AACP,SAAC,CAAC;QACF,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,IAAI,EAAE,CAAC;AACX,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;AACpB,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;AACnC,YAAA,MAAM,WAAW,GAAI,KAA4B,CAAC,QAAQ,CAAC,YAAY,CAAC;AACxE,YAAA,IAAI,UAAU,GAAG,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC;YACjE,MAAM,eAAe,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;YAC3G,MAAM,WAAW,GAAG,CAAC,CAAC;YACtB,QAAQ,WAAW;gBACf,KAAK,wBAAwB,CAAC,GAAG;;oBAE7B,IAAI,CAAC,GAAG,CAAC;AACL,wBAAA,CAAC,EAAE,CAAC,GAAG,qBAAqB,GAAG,mBAAmB;AAClD,wBAAA,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,oBAAoB,IAAI,CAAC,GAAG,mBAAmB,GAAG,eAAe;AACrG,wBAAA,MAAM,EAAE,mBAAmB;AAC3B,wBAAA,IAAI,EAAE,UAAU;AACnB,qBAAA,CAAC,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC;AACN,wBAAA,CAAC,EAAE,CAAC,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,qBAAqB;wBACvE,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,8BAA8B,IAAI,CAAC;AACvE,wBAAA,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,IAAI;wBAC3C,SAAS,EAAE,MAAM,CAAC,OAAO;AAC5B,qBAAA,CAAC,CAAC;oBACH,MAAM;gBACV,KAAK,wBAAwB,CAAC,KAAK;oBAC/B,IAAI,CAAC,IAAI,CAAC;wBACN,CAAC,EAAE,CAAC,GAAG,qBAAqB;wBAC5B,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,oBAAoB,IAAI,CAAC,GAAG,eAAe;AAC/E,wBAAA,KAAK,EAAE,oBAAoB;AAC3B,wBAAA,MAAM,EAAE,oBAAoB;AAC5B,wBAAA,MAAM,EAAE,qBAAqB;AAC7B,wBAAA,IAAI,EAAE,UAAU;AACnB,qBAAA,CAAC,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC;AACN,wBAAA,CAAC,EAAE,CAAC,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,qBAAqB;wBACvE,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,8BAA8B,IAAI,CAAC;AACvE,wBAAA,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,IAAI;wBAC3C,SAAS,EAAE,MAAM,CAAC,OAAO;AAC5B,qBAAA,CAAC,CAAC;oBACH,MAAM;gBAEV,KAAK,wBAAwB,CAAC,GAAG;oBAC7B,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,IAAI,qBAAqB,GAAG,oBAAoB,CAAC,CAAC;AACtF,oBAAA,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;AAClF,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,oBAAoB,EAAE,kCAAkC,CAAC,CAAC;oBACjG,IAAI,CAAC,GAAG,CAAC;wBACL,CAAC,EAAE,CAAC,GAAG,qBAAqB;wBAC5B,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,2BAA2B,IAAI,CAAC;wBACpE,KAAK;AACL,wBAAA,MAAM,EAAE,2BAA2B;wBACnC,IAAI;wBACJ,UAAU;wBACV,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,wBAAA,MAAM,EAAE,2BAA2B;AACnC,wBAAA,OAAO,EAAE,4BAA4B;AACrC,wBAAA,QAAQ,EAAE,sBAAsB;AAChC,wBAAA,MAAM,EAAE,UAAU;AACrB,qBAAA,CAAC,CAAC;oBACH,MAAM;AACV,gBAAA;AACI,oBAAA,MAAM,gBAAgB,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,CAAC;oBACjE,IAAI,CAAC,IAAI,CAAC;wBACN,CAAC,EAAE,CAAC,GAAG,qBAAqB;wBAC5B,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,GAAG,8BAA8B,IAAI,CAAC;AACvE,wBAAA,IAAI,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC,IAAI;wBAC5C,SAAS,EAAE,MAAM,CAAC,OAAO;AAC5B,qBAAA,CAAC,CAAC;oBACH,MAAM;aACb;YAED,GAAG,CAAC,OAAO,EAAE,CAAC;SACjB;KACJ;IAEO,cAAc,CAAC,MAAqB,EAAE,GAAS,EAAA;AACnD,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AAC5D,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,QAAQ,GAAG,cAAc,CAAC;AAE9B,QAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,CAACC,UAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC3C,OAAO;SACV;AAED,QAAA,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,CAAC;QAC7D,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,IAAI,YAAY,EAAE,CAAC,CAAC;QAC9F,IAAI,GAAG,EAAE;YACL,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC;gBACN,CAAC,EAAE,CAAC,GAAG,qBAAqB;AAC5B,gBAAA,CAAC,EAAE,CAAC,GAAG,yBAAyB,GAAG,CAAC;gBACpC,IAAI;AACJ,gBAAA,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,KAAK,EAAE,UAAU;AAC7B,gBAAA,aAAa,EAAE,kCAAkC;AACpD,aAAA,CAAC,CAAC;SACN;KACJ;IAEO,cAAc,CAAC,MAAqB,EAAE,GAA0C,EAAA;QACpF,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;QACpD,MAAM,GAAG,GAAG,CAAC,CAAC;AACd,QAAA,MAAM,SAAS,GAAI,UAA6B,IAAI,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,wBAAwB,CAAC;AAEtC,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC9C,YAAA,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;AACxB,YAAA,MAAM,OAAO,GAAG,KAAK,IAAI,SAAS,CAAC;YACnC,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,qBAAqB,GAAG,KAAK,GAAG,2BAA2B,CAAC;YACzF,MAAM,KAAK,GAAG,CAAC,yBAAyB,GAAG,IAAI,IAAI,CAAC,CAAC;AAErD,YAAA,IAAI,GAAG,IAAI,OAAO,EAAE;gBAChB,IAAI,CAAC,IAAI,CAAC;oBACN,CAAC,EAAE,CAAC,GAAG,KAAK;oBACZ,CAAC,EAAE,CAAC,GAAG,KAAK;AACZ,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;AACxB,oBAAA,MAAM,EAAE,IAAI;AACZ,oBAAA,MAAM,EAAE,IAAI;AACf,iBAAA,CAAC,CAAC;aACN;AACL,SAAC,CAAC,CAAC;KACN;IAEO,kBAAkB,CAAC,MAAqB,EAAE,GAAS,EAAA;AACvD,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;AAC5D,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,cAAc,CAAC;AAEhC,QAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,CAACA,UAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC3C,OAAO;SACV;QAED,MAAM,KAAK,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,GAAG,4BAA4B,CAAC;QACrF,MAAM,MAAM,GAAG,4BAA4B,CAAC;QAC5C,MAAM,UAAU,GAAG,yBAAyB,CAAC;QAC7C,MAAM,OAAO,GAAG,qBAAqB,CAAC;QACtC,MAAM,OAAO,GAAG,CAAC,yBAAyB,GAAG,4BAA4B,IAAI,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,CAAC,yBAAyB,GAAG,UAAU,IAAI,CAAC,CAAC;;QAGjE,IAAI,CAAC,IAAI,CAAC;YACN,CAAC,EAAE,CAAC,GAAG,OAAO;YACd,CAAC,EAAE,CAAC,GAAG,OAAO;YACd,KAAK;YACL,MAAM;AACN,YAAA,MAAM,EAAE,4BAA4B;YACpC,IAAI,EAAE,MAAM,CAAC,OAAO;AACvB,SAAA,CAAC,CAAC;;QAGH,MAAM,aAAa,GAAG,CAAC,cAAc,GAAG,GAAG,IAAI,KAAK,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC;YACN,CAAC,EAAE,CAAC,GAAG,OAAO;YACd,CAAC,EAAE,CAAC,GAAG,OAAO;AACd,YAAA,KAAK,EAAE,aAAa;YACpB,MAAM;AACN,YAAA,MAAM,EAAE,4BAA4B;YACpC,IAAI,EAAE,MAAM,CAAC,OAAO;AACvB,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC;AACN,YAAA,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,KAAK,GAAG,iBAAiB;YAC1C,CAAC,EAAE,CAAC,GAAG,WAAW;YAClB,IAAI,EAAE,CAAG,EAAA,cAAc,CAAG,CAAA,CAAA;YAC1B,SAAS,EAAE,MAAM,CAAC,OAAO;AAC5B,SAAA,CAAC,CAAC;KACN;IAEO,gBAAgB,CAAC,MAAqB,EAAE,GAA0C,EAAA;QACtF,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QACzG,MAAM,SAAS,GAAG,UAAU,CAAC;QAE7B,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YACnC,OAAO;SACV;AACD,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAA0B,CAAC;QAClD,MAAM,UAAU,GAAG,2BAA2B,CAAC;QAC/C,MAAM,UAAU,GAAG,gCAAgC,CAAC;QACpD,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,QAAA,MAAM,OAAO,GAAG,QAAQ,EAAE,WAAW,CAAC;QAEtC,IAAI,QAAQ,GAAG,qBAAqB,CAAC;QACrC,IAAI,QAAQ,GAAG,CAAC,yBAAyB,GAAG,UAAU,IAAI,CAAC,CAAC;AAC5D,QAAA,MAAM,cAAc,GAAG,UAAU,GAAG,kCAAkC,GAAG,wCAAwC,CAAC;AAClH,QAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,GAAG,GAAG,+BAA+B,GAAG,SAAS,GAAG,+BAA+B,CAAC;QACjH,MAAM,YAAY,GAAG,WAAW;cAC1B,WAAW,GAAG,CAAC,GAAG,qBAAqB,GAAG,cAAc,GAAG,qCAAqC,GAAG,EAAE;cACrG,WAAW,GAAG,CAAC,GAAG,qBAAqB,GAAG,cAAc,CAAC;AAE/D,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;QACnC,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE;YAC5C,MAAM,QAAQ,GAAG,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,QAAQ;gBAAE,SAAS;YAExB,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;AAC/C,YAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC;AACtC,YAAA,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,IAAI,OAAO,GAAG,iCAAiC,GAAG,CAAC,CAAC,CAAC;AAE/F,YAAA,QAAQ,GAAG,qBAAqB,GAAG,KAAK,GAAG,SAAS,CAAC;AAErD,YAAA,IAAI,gBAAgB,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;AAC3D,YAAA,IAAI,KAAK,KAAK,CAAC,IAAI,WAAW,EAAE;gBAC5B,MAAM,iBAAiB,GAAG,YAAY,IAAI,kCAAkC,GAAG,CAAC,CAAC,CAAC;;AAElF,gBAAA,IAAI,iBAAiB,IAAI,EAAE,EAAE;oBACzB,QAAQ,GAAG,qBAAqB,CAAC;AACjC,oBAAA,QAAQ,IAAI,2BAA2B,GAAG,mCAAmC,CAAC;iBACjF;qBAAM;oBACH,gBAAgB,GAAG,iBAAiB,CAAC;iBACxC;aACJ;YAED,IAAI,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,CAAC;AAC5E,YAAA,IAAI,WAAW,IAAI,IAAI,EAAE;;gBAErB,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,WAAW,GAAG,CAAC,GAAG,qBAAqB,EAAE;oBAClE,MAAM;iBACT;;gBAED,IAAI,CAAC,QAAQ,IAAI,QAAQ,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,EAAE;oBACjE,QAAQ,GAAG,qBAAqB,CAAC;iBACpC;gBACD,IAAI,QAAQ,IAAI,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,qBAAqB,EAAE;oBACxE,QAAQ,GAAG,qBAAqB,CAAC;oBACjC,QAAQ,IAAI,UAAU,CAAC;iBAC1B;AACD,gBAAA,IAAI,QAAQ,IAAI,QAAQ,IAAI,SAAS,EAAE;oBACnC,UAAU,GAAG,IAAI,CAAC;iBACrB;aACJ;AAED,YAAA,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,MAAM,CAAC;oBACR,CAAC,EAAE,CAAC,GAAG,QAAQ;oBACf,CAAC,EAAE,CAAC,GAAG,QAAQ;AACf,oBAAA,GAAG,EAAE,MAAO;AACZ,oBAAA,EAAE,EAAE,GAAI;AACR,oBAAA,KAAK,EAAE,kBAAkB,CAAC,YAAY,CAAC;AACvC,oBAAA,OAAO,EAAE,gBAAgB,CAAC,YAAa,CAAC;oBACxC,IAAI,EAAE,iBAAiB,CAAC,MAAM;oBAC9B,IAAI,EAAE,iBAAiB,CAAC,MAAM;AACjC,iBAAA,CAAC,CAAC;gBAEH,IAAI,MAAM,EAAE;oBACR,GAAG,CAAC,IAAI,EAAE,CAAC;AACX,oBAAA,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;oBACtB,IAAI,CAAC,IAAI,CAAC;wBACN,CAAC,EAAE,CAAC,GAAG,QAAQ;wBACf,CAAC,EAAE,CAAC,GAAG,QAAQ;wBACf,KAAK,EAAE,iBAAiB,CAAC,MAAM;wBAC/B,MAAM,EAAE,iBAAiB,CAAC,MAAM;AAChC,wBAAA,MAAM,EAAE,EAAE;AACV,wBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AAC1B,qBAAA,CAAC,CAAC;oBACH,GAAG,CAAC,OAAO,EAAE,CAAC;oBACd,IAAI,CAAC,IAAI,CAAC;AACN,wBAAA,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,YAAY,GAAG,CAAC;AAClC,wBAAA,CAAC,EAAE,CAAC,GAAG,yBAAyB,GAAG,CAAC;AACpC,wBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;AAC5B,wBAAA,QAAQ,EAAE,YAAY;AACtB,wBAAA,IAAI,EAAE,CAAI,CAAA,EAAA,SAAS,GAAG,KAAK,GAAG,CAAC,CAAE,CAAA;AACjC,wBAAA,aAAa,EAAE,kCAAkC;AACpD,qBAAA,CAAC,CAAC;iBACN;aACJ;SACJ;KACJ;AACJ,CAAA;AAEM,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE;;ACppB1C;;;AAGG;AACG,MAAO,eAAgB,SAAQ,MAAM,CAAA;;IAE/B,eAAe,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAe,EAAA;QACzE,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;AAE1B,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;AACvB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACjB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACjC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;;AAEnC,QAAA,IAAI,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;QAChC,IAAI,YAAY,EAAE;AACd,YAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;SACrC;aAAM,IAAI,UAAU,EAAE;AACnB,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;SAC1B;QACD,IAAI,CAAC,UAAU,CAAC;AACZ,YAAA,CAAC,EAAE,eAAe;YAClB,CAAC;YACD,KAAK,EAAE,uBAAuB,GAAG,eAAe;AAChD,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE;gBACL,KAAK,EAAE,MAAM,CAAC,OAAO;gBACrB,MAAM,EAAE,MAAM,CAAC,OAAO;AACzB,aAAA;AACJ,SAAA,CAAC,CAAC;;QAEH,IAAI,CAAC,IAAI,CAAC;AACN,YAAA,CAAC,EAAE,uBAAuB;YAC1B,CAAC;YACD,KAAK,EAAE,WAAW,GAAG,eAAe;AACpC,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,MAAM,CAAC,OAAO;AACzB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE;;YAE9B,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC;gBACN,CAAC,EAAE,uBAAuB,GAAG,CAAC;AAC9B,gBAAA,CAAC,EAAE,CAAC,GAAG,0BAA0B,GAAG,CAAC;AACrC,gBAAA,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;AAC9B,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,aAAa,EAAE,kCAAkC;AACpD,aAAA,CAAC,CAAC;SACN;KACJ;;AAGO,IAAA,cAAc,CAAC,EAAE,KAAK,EAAE,UAAU,EAA6C,EAAA;AACnF,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;AAEzC,QAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;AAC/B,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;;QAGnC,IAAI,CAAC,IAAI,CAAC;YACN,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,KAAK,EAAE,IAAI,CAAC,WAAW;YACvB,MAAM,EAAE,IAAI,CAAC,SAAS;AACtB,YAAA,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,KAAK;AAC1B,YAAA,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,OAAO;AACnC,SAAA,CAAC,CAAC;;QAGH,KAAK,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AACjD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACzC,MAAM,SAAS,GACX,IAAI,CAAC,cAAc,GAAG,MAAM,GAAG,+BAA+B,GAAG,+BAA+B,GAAG,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QACpI,IAAI,CAAC,IAAI,CAAC;AACN,YAAA,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AAC5C,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC9B,SAAA,CAAC,CAAC;KACN;;IAGO,gBAAgB,CAAC,EAAE,KAAK,EAA8B,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;AAExC,QAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;AAC/B,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;;QAGnC,IAAI,CAAC,IAAI,CAAC;YACN,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,KAAK,EAAE,IAAI,CAAC,WAAW;YACvB,MAAM,EAAE,IAAI,CAAC,SAAS;AACtB,YAAA,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,KAAK;AAC1B,YAAA,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,OAAO;AACnC,SAAA,CAAC,CAAC;KACN;AAED,IAAA,MAAM,CAAC,MAAmB,EAAA;QACtB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;AACxD,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;KAC9C;AACJ,CAAA;AAEM,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE;;AC9GpD;;;;AAIG;AACU,MAAA,WAAW,GAAG,CAAC,MAAgC,KAAI;AAC5D,IAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;AACxH,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAA0B,CAAC;IACnD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;AACxD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACnC,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;;AAGzD,IAAA,UAAU,CAAC,OAAO,CAAC,GAA+B,CAAC,CAAC;AACpD,IAAA,YAAY,CAAC,OAAO,CAAC,GAA+B,CAAC,CAAC;AACtD,IAAA,eAAe,CAAC,OAAO,CAAC,GAA+B,CAAC,CAAC;;AAGzD,IAAA,KAAK,IAAI,WAAW,GAAG,gBAAgB,EAAE,WAAW,IAAI,eAAe,EAAE,WAAW,EAAE,EAAE;AACpF,QAAA,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC;YAAE,MAAM;;AAGzC,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,KAAK,IAAI,IAAI;YAAE,SAAS;;QAG5B,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC;QACpE,MAAM,YAAY,GAAG,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAE/D,QAAA,IAAI,WAAW,KAAK,CAAC,EAAE;YACnB,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC;SACnE;;AAGD,QAAA,KAAK,IAAI,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,EAAE,EAAE;AACrE,YAAA,IAAI,QAAQ,GAAG,QAAQ,GAAG,CAAC;gBAAE,MAAM;YACnC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;YACpC,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC;AAC9D,YAAA,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;AACxE,YAAA,MAAM,OAAO,GAAG,aAAa,KAAK,QAAQ,CAAC;YAE3C,QAAQ,IAAI;AACR,gBAAA,KAAK,cAAc,CAAC,GAAG,EAAE;AACrB,oBAAA,MAAM,UAAU,GAAG,OAAO,IAAI,UAAU,KAAK,uBAAuB,CAAC;oBACrE,YAAY,CAAC,IAAI,CAAC;wBACd,CAAC;wBACD,CAAC;wBACD,QAAQ;wBACR,WAAW;wBACX,WAAW;AACX,wBAAA,SAAS,EAAE,0BAA0B;wBACrC,WAAW;wBACX,cAAc,EAAE,UAAU,CAAC,cAAc;AAC5C,qBAAA,CAAC,CAAC;oBACH,YAAY,CAAC,MAAM,CAAC;wBAChB,UAAU;AACb,qBAAA,CAAC,CAAC;oBACH,MAAM;iBACT;AACD,gBAAA,KAAK,cAAc,CAAC,MAAM,EAAE;AACxB,oBAAA,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9B,oBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtE,oBAAA,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrE,oBAAA,MAAM,UAAU,GAAG,OAAO,IAAI,UAAU,KAAK,mBAAmB,CAAC;AACjE,oBAAA,IAAI,YAAY,IAAI,UAAU,EAAE;AAC5B,wBAAA,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;qBACzC;yBAAM,IAAI,UAAU,EAAE;AACnB,wBAAA,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;qBAC9B;oBACD,eAAe,CAAC,IAAI,CAAC;wBACjB,CAAC;wBACD,CAAC;wBACD,QAAQ;wBACR,WAAW;wBACX,WAAW;wBACX,SAAS;wBACT,WAAW;wBACX,cAAc,EAAE,UAAU,CAAC,cAAc;AAC5C,qBAAA,CAAC,CAAC;oBACH,eAAe,CAAC,MAAM,CAAC;wBACnB,GAAG;AACH,wBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;wBAC3B,UAAU;wBACV,YAAY;AACf,qBAAA,CAAC,CAAC;AACH,oBAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,yBAAyB,CAAC;wBAChD,WAAW;wBACX,WAAW;wBACX,WAAW;AACd,qBAAA,CAAC,CAAC;AACH,oBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,eAAe,CAAC;AAC3C,oBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC;AAClC,oBAAA,MAAM,KAAK,GAAG,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;AACjD,oBAAA,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC/E,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACrE,oBAAA,MAAM,MAAM,GAAG;wBACX,OAAO;AACP,wBAAA,CAAC,EAAE,KAAK;AACR,wBAAA,CAAC,EAAE,KAAK;AACR,wBAAA,WAAW,EAAE,KAAK;wBAClB,SAAS;AACT,wBAAA,QAAQ,EAAE,QAAQ;wBAClB,KAAK;wBACL,SAAS;wBACT,cAAc;wBACd,UAAU;AACV,wBAAA,QAAQ,EAAE,UAAU;wBACpB,KAAK;wBACL,MAAM;qBACT,CAAC;AAEF,oBAAA,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;;;AAGnC,oBAAA,IAAI,YAAY,IAAI,SAAS,IAAI,IAAI,EAAE;wBACnC,GAAG,CAAC,IAAI,EAAE,CAAC;wBACX,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;wBACzC,GAAG,CAAC,IAAI,EAAE,CAAC;AACX,wBAAA,UAAU,CAAC,UAAU,CAAC,MAAuB,EAAE,GAA+B,CAAC,CAAC;wBAChF,GAAG,CAAC,OAAO,EAAE,CAAC;qBACjB;yBAAM;AACH,wBAAA,UAAU,CAAC,UAAU,CAAC,MAAuB,EAAE,GAA+B,CAAC,CAAC;qBACnF;iBACJ;aACJ;SACJ;KACJ;AACL;;MClIa,YAAY,CAAA;AAPzB,IAAA,WAAA,GAAA;AAQI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAsB,CAAC;AAE9C,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;YAC7B,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACvD,YAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAC;YACzC,OAAO;AACH,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,kBAAkB,EAAE,KAAK;AACzB,gBAAA,SAAS,EAAE,CAAC,GAAkB,KAC1B,WAAW,CAAC;oBACR,GAAG,IAAI,CAAC,MAAM,EAAE;oBAChB,GAAG;oBACH,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;iBAClE,CAAC;aACT,CAAC;AACN,SAAC,CAAC,CAAC;AACN,KAAA;8GAjBY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALX,CAAuD,qDAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEvD,OAAO,EAAA,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGR,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,CAAuD,qDAAA,CAAA;AACjE,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MCWY,gBAAgB,CAAA;AAP7B,IAAA,WAAA,GAAA;AAQI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA8B,CAAC;AAEtD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3D,IAAI,IAAI,GAAG,IAAI,CAAC;AAChB,YAAA,QAAQ,KAAK,CAAC,IAAI;gBACd,KAAK,gBAAgB,CAAC,IAAI;oBACtB,IAAI,GAAG,oBAAoB,CAAC;oBAC5B,MAAM;gBACV,KAAK,gBAAgB,CAAC,MAAM;AACxB,oBAAA,IAAI,GAAI,KAAK,CAAC,QAA2B,EAAE,WAAW,GAAG,sBAAsB,GAAG,sBAAsB,CAAC;oBACzG,MAAM;gBACV,KAAK,gBAAgB,CAAC,IAAI,CAAC;gBAC3B,KAAK,gBAAgB,CAAC,SAAS,CAAC;gBAChC,KAAK,gBAAgB,CAAC,SAAS;oBAC3B,IAAI,GAAG,wBAAwB,CAAC;oBAChC,MAAM;gBACV,KAAK,gBAAgB,CAAC,MAAM;oBACxB,IAAI,GAAG,sBAAsB,CAAC;oBAC9B,MAAM;gBACV,KAAK,gBAAgB,CAAC,IAAI;oBACtB,IAAI,GAAG,sBAAsB,CAAC;oBAC9B,MAAM;gBACV,KAAK,gBAAgB,CAAC,IAAI;oBACtB,IAAI,GAAG,sBAAsB,CAAC;oBAC9B,MAAM;gBACV,KAAK,gBAAgB,CAAC,MAAM,CAAC;gBAC7B,KAAK,gBAAgB,CAAC,SAAS,CAAC;gBAChC,KAAK,gBAAgB,CAAC,SAAS;oBAC3B,IAAI,GAAG,sBAAsB,CAAC;oBAC9B,MAAM;gBACV,KAAK,gBAAgB,CAAC,QAAQ;oBAC1B,IAAI,GAAG,wBAAwB,CAAC;oBAChC,MAAM;aACb;YACD,OAAO;gBACH,CAAC;gBACD,CAAC;AACD,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,gBAAgB,EAAE,MAAM;AACxB,gBAAA,SAAS,EAAE,KAAK;gBAChB,IAAI;gBACJ,IAAI;aACP,CAAC;AACN,SAAC,CAAC,CAAC;AACN,KAAA;8GA9CY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALf,CAA2D,yDAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAE3D,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGZ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,CAA2D,yDAAA,CAAA;AACrE,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,WAAW,CAAC;oBACtB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MCCY,WAAW,CAAA;AAPxB,IAAA,WAAA,GAAA;AAQI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAqB,CAAC;AAE7C,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,MAAM,EACF,CAAC,EACD,CAAC,EACD,KAAK,EACL,MAAM,EACN,IAAI,EACJ,OAAO,EACP,KAAK,GAAG,uBAAuB,EAC/B,aAAa,GAAG,kCAAkC,EAClD,IAAI,GAAG,iBAAiB,EACxB,cAAc,EACd,QAAQ,GAAG,iBAAiB,EAC5B,SAAS,GAAG,kBAAkB,EAC9B,QAAQ,GAAG,qBAAqB,EAChC,IAAI,GAAG,iBAAiB,EACxB,iBAAiB,GAAG,+BAA+B,EACnD,SAAS,GAAG,sBAAsB,EAClC,UAAU,GAAG,mBAAmB,EAChC,GAAG,IAAI,EACV,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO;gBACH,CAAC;gBACD,CAAC;gBACD,KAAK;gBACL,MAAM;gBACN,IAAI;gBACJ,OAAO;gBACP,KAAK;gBACL,aAAa;gBACb,IAAI;gBACJ,cAAc;gBACd,QAAQ;gBACR,SAAS;gBACT,QAAQ;gBACR,IAAI;gBACJ,iBAAiB;gBACjB,SAAS;gBACT,UAAU;AACV,gBAAA,GAAG,IAAI;aACV,CAAC;AACN,SAAC,CAAC,CAAC;AACN,KAAA;8GA7CY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALV,CAA+C,6CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAE/C,OAAO,EAAA,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGR,WAAW,EAAA,UAAA,EAAA,CAAA;kBAPvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,CAA+C,6CAAA,CAAA;AACzD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MCkBY,gBAAgB,CAAA;AAlB7B,IAAA,WAAA,GAAA;AAmBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA0B,CAAC;AAElD,QAAA,IAAA,CAAA,UAAU,GAAG,qBAAqB,GAAG,yBAAyB,GAAG,iCAAiC,CAAC;QAEnG,IAAW,CAAA,WAAA,GAAG,WAAW,EAAE,CAAC;AAE5B,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;YAC/B,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7C,YAAA,QACI,KAAK;AACL,iBAAC,WAAW;sBACN,CAAC,IAAI,qBAAqB,GAAG,yBAAyB,GAAG,iCAAiC,CAAC;sBAC3F,CAAC,GAAG,qBAAqB,GAAG,yBAAyB,GAAG,iCAAiC,CAAC,EAClG;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACrB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAClE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAC1D,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5G,OAAO;gBACH,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACjD,MAAM;gBACN,UAAU;aACb,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAuB,MAAK;YAC9C,OAAO;AACH,gBAAA,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAClB,gBAAA,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;aACrB,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACrB,YAAA,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAChF,OAAO;AACH,gBAAA,CAAC,EAAE,eAAe;AAClB,gBAAA,CAAC,EAAE,eAAe;gBAClB,IAAI,EAAE,kBAAkB,CAAC;AACrB,oBAAA,UAAU,EAAE,mBAAmB;oBAC/B,OAAO,EAAE,KAAK,CAAC,GAAG;iBACrB,CAAC;AACF,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,mBAAmB,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK;AAC1F,gBAAA,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,OAAO;AAChC,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,OAAO,EAAE,CAAC;aACb,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YAC5B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxC,OAAO;AACH,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,CAAC,EAAE,qBAAqB;AACxB,gBAAA,CAAC,EAAE,CAAC,MAAM,GAAG,yBAAyB,IAAI,CAAC;AAC3C,gBAAA,KAAK,EAAE,yBAAyB;AAChC,gBAAA,MAAM,EAAE,yBAAyB;gBACjC,IAAI,EAAE,MAAM,CAAC,OAAO;aACvB,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YACvB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxC,OAAO;gBACH,CAAC,EAAE,IAAI,CAAC,UAAU;AAClB,gBAAA,CAAC,EAAE,SAAS;AACZ,gBAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,kCAAkC,CAAC;gBAC1E,MAAM,EAAE,MAAM,GAAG,CAAC;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,gBAAA,UAAU,EAAE,IAAI;aACnB,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC3B,YAAA,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxE,MAAM,iBAAiB,GAAG,CAAC,MAAM,GAAG,2BAA2B,IAAI,CAAC,CAAC;YACrE,OAAO;gBACH,IAAI,EAAE,kBAAkB,CAAC;AACrB,oBAAA,UAAU,EAAE,wBAAwB;oBACpC,OAAO,EAAE,KAAK,CAAC,GAAG;iBACrB,CAAC;gBACF,CAAC,EAAE,KAAK,GAAG,2BAA2B;AACtC,gBAAA,CAAC,EAAE,iBAAiB;AACpB,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;gBACnD,UAAU,EAAE,MAAM,CAAC,WAAW;AAC9B,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,gBAAgB,EAAE,2BAA2B;AAC7C,gBAAA,YAAY,EAAE,CAAC;aAClB,CAAC;AACN,SAAC,CAAC,CAAC;AACN,KAAA;8GA/FY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAhBf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;KAWT,EAES,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,6EAAE,OAAO,EAAA,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAE,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,8EAAE,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGjE,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAlB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;AAWT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,CAAC;oBAC3E,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MC1BY,kBAAkB,CAAA;AAP/B,IAAA,WAAA,GAAA;AAQI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAsB,CAAC;AAE9C,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YAC9B,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACrC,YAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAC;YACzC,OAAO;AACH,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,kBAAkB,EAAE,KAAK;AACzB,gBAAA,SAAS,EAAE,CAAC,GAAkB,KAC1B,WAAW,CAAC;oBACR,GAAG,IAAI,CAAC,MAAM,EAAE;oBAChB,GAAG;AACH,oBAAA,gBAAgB,EAAE,CAAC;oBACnB,eAAe,EAAE,iBAAiB,GAAG,CAAC;iBACzC,CAAC;aACT,CAAC;AACN,SAAC,CAAC,CAAC;AACN,KAAA;8GAlBY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALjB,CAAsD,oDAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEtD,OAAO,EAAA,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGR,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,CAAsD,oDAAA,CAAA;AAChE,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;ACTM,MAAM,iBAAiB,GAAG,CAAC,MAAgC,KAAI;AAClE,IAAA,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IACzF,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC;IACjE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,aAAa,CAAC;AACrF,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;AAE3B,IAAA,MAAM,kBAAkB,GAAG,CAAC,OAAe,KAAI;QAC3C,MAAM,WAAW,GACb,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;AAC7H,QAAA,MAAM,WAAW,GAAG,eAAe,KAAK,wBAAwB,IAAI,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;AAChH,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnE,OAAO;YACH,WAAW;YACX,UAAU;YACV,WAAW;SACd,CAAC;AACN,KAAC,CAAC;IAEF,MAAM,UAAU,GAA6B,EAAE,CAAC;AAChD,IAAA,KAAK,IAAI,WAAW,GAAG,gBAAgB,EAAE,WAAW,IAAI,eAAe,EAAE,WAAW,EAAE,EAAE;AACpF,QAAA,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC;YAAE,MAAM;QACzC,IAAI,WAAW,GAAG,CAAC;YAAE,SAAS;AAC9B,QAAA,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,KAAK,IAAI,IAAI;YAAE,SAAS;QAC5B,MAAM,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAC3D,QAAA,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/E,QAAA,MAAM,SAAS,GAAG;YACd,CAAC;AACD,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,MAAM,EAAE,eAAe;YACvB,KAAK;AACL,YAAA,MAAM,EAAE,WAAW,KAAK,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,SAAS;YAC1D,WAAW;YACX,UAAU;YACV,WAAW;SACd,CAAC;AAEF,QAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC9B;AACD,IAAA,OAAO,UAAU,CAAC;AACtB,CAAC;;MCZY,wBAAwB,CAAA;AAlBrC,IAAA,WAAA,GAAA;AAmBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA4B,CAAC;AAEpD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC;AACpC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACtB,YAAA,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC;YACrD,OAAO,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,MAAM,CAAC;AACjE,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC;AACzC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,OAAO,iBAAiB,CAAC;gBACrB,GAAG,IAAI,CAAC,MAAM,EAAE;AAChB,gBAAA,gBAAgB,EAAE,CAAC;gBACnB,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB,GAAG,CAAC;AAC3D,aAAA,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAuB,MAAK;YACrD,OAAO;AACH,gBAAA,CAAC,EAAE,eAAe;AAClB,gBAAA,CAAC,EAAE,eAAe;AAClB,gBAAA,KAAK,EAAE,uBAAuB;AAC9B,gBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE;gBAC9B,IAAI,EAAE,MAAM,CAAC,KAAK;AAClB,gBAAA,SAAS,EAAE,KAAK;aACnB,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,aAAa,GAAG;AACZ,YAAA,CAAC,EAAE,eAAe;AAClB,YAAA,CAAC,EAAE,eAAe;YAClB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAC1C,MAAM,EAAE,MAAM,CAAC,OAAO;AACtB,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,SAAS,EAAE,KAAK;SACnB,CAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;YAC7B,OAAO;AACH,gBAAA,CAAC,EAAE,eAAe;AAClB,gBAAA,CAAC,EAAE,eAAe;AAClB,gBAAA,MAAM,EAAE,CAAC,uBAAuB,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;gBACpF,MAAM,EAAE,MAAM,CAAC,OAAO;AACtB,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,SAAS,EAAE,KAAK;aACnB,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YACvB,OAAO;AACH,gBAAA,IAAI,EAAE,mCAAmC;AACzC,gBAAA,CAAC,EAAE,qBAAqB;gBACxB,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,yBAAyB,IAAI,CAAC;AAC3D,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,gBAAgB,CAAC,OAAO,GAAG,gBAAgB,CAAC,SAAS;gBAC9E,IAAI,EACA,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,UAAU,KAAK,mCAAmC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;sBACnH,MAAM,CAAC,OAAO;sBACd,MAAM,CAAC,OAAO;aAC3B,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YACzB,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAChD,OAAO;AACH,gBAAA,CAAC,EAAE,uBAAuB;AAC1B,gBAAA,CAAC,EAAE,eAAe;gBAClB,KAAK,EAAE,iBAAiB,GAAG,eAAe;AAC1C,gBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE;gBAC9B,MAAM,EAAE,MAAM,CAAC,OAAO;AACtB,gBAAA,WAAW,EAAE,CAAC;gBACd,IAAI,EAAE,MAAM,CAAC,WAAW;AACxB,gBAAA,SAAS,EAAE,KAAK;aACnB,CAAC;AACN,SAAC,CAAC,CAAC;AACN,KAAA;8GAjFY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAhBvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;AAWT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,OAAO,EAAE,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,8EAAE,WAAW,EAAA,QAAA,EAAA,kCAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGpD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlBpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;AAWT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,CAAC;oBAC9D,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MCjBY,6BAA6B,CAAA;AAX1C,IAAA,WAAA,GAAA;AAYI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAsB,CAAC;AAE9C,QAAA,IAAA,CAAA,4BAA4B,GAAG,QAAQ,CAAC,MAAK;YACzC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACrC,YAAA,OAAO,0BAA0B,CAAC;gBAC9B,GAAG,IAAI,CAAC,MAAM,EAAE;AAChB,gBAAA,gBAAgB,EAAE,CAAC;AACnB,gBAAA,eAAe,EAAE,UAAU,CAAC,iBAAiB,GAAG,CAAC;AACpD,aAAA,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACN,KAAA;8GAXY,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAT5B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,OAAO,EAAA,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGR,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAXzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mCAAmC;AAC7C,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MCCY,kBAAkB,CAAA;AAX/B,IAAA,WAAA,GAAA;AAYI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA4B,CAAC;AAEpD,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACxB,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACvD,YAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAC;AACzC,YAAA,OAAO,iBAAiB,CAAC;gBACrB,GAAG,IAAI,CAAC,MAAM,EAAE;gBAChB,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;AAClE,aAAA,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACN,KAAA;8GAXY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EATjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,gBAAgB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGjB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAX9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MCmBY,oBAAoB,CAAA;AAlBjC,IAAA,WAAA,GAAA;AAmBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAyB,CAAC;AAEjD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;YAC1B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAQ,CAAC,aAAa,EAAE,CAAC;AAC1D,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACxB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AAC1D,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,mBAAmB,GAAG,CAAC,aAAmC,KAAI;AAC1D,YAAA,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC3E,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAA0B,CAAC;YACnD,MAAM,WAAW,GAAU,EAAE,CAAC;AAE9B,YAAA,KAAK,IAAI,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,EAAE,EAAE;gBACrE,IAAI,QAAQ,GAAG,UAAU,CAAC,QAAQ,GAAG,CAAC,EAAE;oBACpC,MAAM;iBACT;gBAED,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC3C,gBAAA,IAAI,GAAG,IAAI,IAAI,EAAE;oBACb,SAAS;iBACZ;gBAED,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;gBACpC,IAAI,IAAI,KAAK,cAAc,CAAC,MAAM,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpD,SAAS;iBACZ;AAED,gBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACvE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC;gBAExE,IAAI,CAAC,YAAY,IAAI,QAAQ,KAAK,eAAe,CAAC,IAAI,EAAE;oBACpD,SAAS;iBACZ;AAED,gBAAA,IAAI,UAAU,CAAC;AACf,gBAAA,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE;AACpB,oBAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC;AACvF,oBAAA,UAAU,GAAG,QAAQ,KAAK,aAAa,IAAI,YAAY,KAAK,cAAc,CAAC,MAAM,IAAI,UAAU,KAAK,mBAAmB,CAAC;iBAC3H;AAED,gBAAA,IAAI,cAAgF,CAAC;AAErF,gBAAA,cAAc,GAAG;oBACb,QAAQ;AACR,oBAAA,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;AACpC,oBAAA,QAAQ,EAAE;wBACN,IAAI,EAAE,kBAAkB,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;wBACrE,KAAK,EAAE,uBAAuB,GAAG,CAAC;wBAClC,MAAM,EAAE,UAAU,CAAC,SAAS;wBAC5B,IAAI,EAAE,MAAM,CAAC,WAAW;AAC3B,qBAAA;iBACJ,CAAC;AAEF,gBAAA,IAAI,YAAY,IAAI,UAAU,EAAE;oBAC5B,MAAM,WAAW,GAAG,CAAC,0BAA0B,GAAG,EAAE,IAAI,CAAC,CAAC;oBAC1D,cAAc,CAAC,UAAU,GAAG;wBACxB,IAAI,EAAE,kBAAkB,CAAC;AACrB,4BAAA,UAAU,EAAE,4BAA4B;4BACxC,QAAQ;yBACX,CAAC;AACF,wBAAA,CAAC,EAAE,qBAAqB;AACxB,wBAAA,CAAC,EAAE,WAAW;AACd,wBAAA,IAAI,EAAE,YAAY,GAAG,gBAAgB,CAAC,OAAO,GAAG,gBAAgB,CAAC,SAAS;wBAC1E,IAAI,EAAE,YAAY,KAAK,UAAU,KAAK,4BAA4B,IAAI,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;qBACzH,CAAC;AACF,oBAAA,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBACpC;aACJ;AAED,YAAA,OAAO,WAAW,CAAC;AACvB,SAAC,CAAC;AACL,KAAA;8GA3EY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAhBnB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;AAWT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,WAAW,EAAA,QAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGlC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAlBhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;AAWT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC;oBAC5C,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MCZY,gBAAgB,CAAA;AAf7B,IAAA,WAAA,GAAA;AAgBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAyB,CAAC;QAEjD,IAAc,CAAA,cAAA,GAAG,cAAc,CAAC;AAEhC,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YACzB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,MAA6B,KAAI;YAChD,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;YACpE,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,YAAA,KAAK,IAAI,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,EAAE,EAAE;AACrE,gBAAA,IAAI,QAAQ,GAAG,UAAU,CAAC,QAAQ,GAAG,CAAC;oBAAE,MAAM;AAC9C,gBAAA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAI,OAAO,CAAC,OAA2B,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;AAClF,gBAAA,IAAI,IAAI,KAAK,cAAc,CAAC,MAAM;oBAAE,SAAS;gBAC7C,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAEpD,eAAe,CAAC,IAAI,CAAC;oBACjB,IAAI;AACJ,oBAAA,YAAY,EAAE;wBACV,GAAG,EAAE,CAAW,QAAA,EAAA,GAAG,CAAE,CAAA;wBACrB,CAAC,EAAE,CAAC,GAAG,CAAC;AACR,wBAAA,IAAI,EAAE,uBAAuB;wBAC7B,KAAK,EAAE,UAAU,CAAC,cAAc;wBAChC,MAAM,EAAE,SAAS,GAAG,CAAC;AACrB,wBAAA,IAAI,EAAE,aAAa;AACtB,qBAAA;AACJ,iBAAA,CAAC,CAAC;aACN;AACD,YAAA,OAAO,eAAe,CAAC;AAC3B,SAAC,CAAC;AACL,KAAA;8GAjCY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAbf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;AAQT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,OAAO,EAAA,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGR,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAf5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;AAQT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;MCJY,uBAAuB,CAAA;AAXpC,IAAA,WAAA,GAAA;AAYI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAsB,CAAC;AAE9C,QAAA,IAAA,CAAA,4BAA4B,GAAG,QAAQ,CAAC,MAAK;AACzC,YAAA,OAAO,0BAA0B,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACrD,SAAC,CAAC,CAAC;AACN,KAAA;8GANY,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EATtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,OAAO,EAAA,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGR,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAXnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAClD,iBAAA,CAAA;;;ACTY,MAAA,sBAAsB,GAAG,CAAC,MAA0B,KAAI;AACjE,IAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;AACvG,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,OAAQ,CAAC;AACxC,IAAA,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,UAAU,CAAC;AACpD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACnC,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAClD,IAAA,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC;IAE/C,IAAI,gBAAgB,GAAsB,IAAI,CAAC;IAC/C,IAAI,sBAAsB,GAAsB,IAAI,CAAC;AAErD,IAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACpB,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;AAC/B,QAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAE,CAAC;AAE7E,QAAA,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,WAAmB,KAAI;AAC7D,YAAA,IAAI,WAAW,GAAG,iBAAiB,EAAE;AACjC,gBAAA,OAAO,IAAI,CAAC;aACf;AACD,YAAA,QACI,QAAQ,IAAI,aAAa,IAAI,QAAQ,IAAI,YAAY,IAAI,WAAW,IAAI,gBAAgB,IAAI,WAAW,IAAI,eAAe,EAC5H;AACN,SAAC,CAAC;AAEF,QAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,IAAI,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE;YAClF,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;AAExC,YAAA,IAAI,IAAI,KAAK,cAAc,CAAC,MAAM,EAAE;AAChC,gBAAA,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC;AAC1E,gBAAA,IAAI,WAAW,IAAI,IAAI,EAAE;oBACrB,OAAO;wBACH,gBAAgB;wBAChB,sBAAsB;qBACzB,CAAC;iBACL;gBAED,MAAM,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;gBAClD,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC5C,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAC3D,gBAAA,MAAM,cAAc,GAAG,WAAW,GAAG,iBAAiB,CAAC;AACvD,gBAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,yBAAyB,CAAC;oBAChD,WAAW;oBACX,WAAW;AACX,oBAAA,WAAW,EAAE,gBAAgB;AAChC,iBAAA,CAAC,CAAC;;AAEH,gBAAA,MAAM,aAAa,GAAG;AAClB,oBAAA,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,eAAe;oBAC/B,CAAC,EAAE,CAAC,GAAG,eAAe;AACtB,oBAAA,KAAK,EAAE,KAAK,GAAG,oBAAoB,GAAG,CAAC;AACvC,oBAAA,MAAM,EAAE,SAAS,GAAG,oBAAoB,GAAG,CAAC;AAC5C,oBAAA,WAAW,EAAE,oBAAoB;oBACjC,MAAM,EAAE,MAAM,CAAC,OAAO;AACtB,oBAAA,WAAW,EAAE,KAAK;AAClB,oBAAA,SAAS,EAAE,KAAK;iBACnB,CAAC;gBAEF,IAAI,cAAc,EAAE;oBAChB,sBAAsB,GAAG,aAAa,CAAC;iBAC1C;qBAAM;oBACH,gBAAgB,GAAG,aAAa,CAAC;iBACpC;aACJ;SACJ;KACJ;IAED,OAAO;QACH,gBAAgB;QAChB,sBAAsB;KACzB,CAAC;AACN;;ACtDA,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;MAsBR,eAAe,CAAA;AApB5B,IAAA,WAAA,GAAA;AAqBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAyB,CAAC;QAEjD,IAAW,CAAA,WAAA,GAAG,MAAM,EAA6B,CAAC;QAElD,IAAW,CAAA,WAAA,GAAG,MAAM,EAA6B,CAAC;QAElD,IAAO,CAAA,OAAA,GAAG,MAAM,EAA6B,CAAC;QAE9C,IAAO,CAAA,OAAA,GAAG,MAAM,EAA6B,CAAC;QAE9C,IAAU,CAAA,UAAA,GAAG,MAAM,EAA6B,CAAC;AAEjD,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;YACnB,OAAO,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;AAC3D,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC;AACrC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAS,MAAK;AACnC,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,cAAc,CAAC;AACxC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAS,MAAK;AACpC,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC;AACzC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACxB,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,OAAQ,CAAC,OAAQ,CAAC,WAAW,EAAE,CAAC;AAC1D,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAG,EAAE,IAAI,CAAC,WAAW,EAAG,CAAC,CAAC;AACxE,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YAC5B,OAAO,uBAAuB,GAAG,IAAI,CAAC,UAAU,EAAG,CAAC,iBAAkB,CAAC;AAC3E,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,OAAO,IAAI,CAAC,UAAU,EAAG,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,CAAC;AACtF,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,OAAO,IAAI,CAAC,UAAU,EAAG,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,CAAC;AACvF,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;YAC/B,OAAO,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1D,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAuB,MAAK;YAC9C,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,EAAG,CAAC;YAC5C,OAAO;AACH,gBAAA,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE;AAC5B,gBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE;gBAC9B,SAAS,EAAE,WAAW,GAAG,KAAK,GAAG,IAAI;aACxC,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAuB,MAAK;YAClD,OAAO;AACH,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE;AAChC,gBAAA,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE;aACrC,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAuB,MAAK;YACpD,OAAO;AACH,gBAAA,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC;AACjC,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE;AACpC,gBAAA,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE;aACrC,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAuB,MAAK;YACpD,OAAO;AACH,gBAAA,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAG,CAAC,WAAW,GAAG,CAAC;gBACzC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;gBACzD,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,UAAU,EAAG,CAAC,WAAW;aACtE,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,uBAAuB,GAAG,QAAQ,CAAuB,MAAK;YAC1D,OAAO;AACH,gBAAA,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,IAAI,CAAC,UAAU,EAAG,CAAC,WAAW,GAAG,CAAC;AACzC,gBAAA,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC;gBACrC,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,UAAU,EAAG,CAAC,WAAW;aACtE,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAuB,MAAK;YAChD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,EAAG,CAAC;YAC1C,OAAO;AACH,gBAAA,OAAO,EAAE,SAAS;aACrB,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAuB,MAAK;YAChD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,EAAG,CAAC;YAC3C,OAAO;AACH,gBAAA,OAAO,EAAE,UAAU;aACtB,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAuB,MAAK;YAC/C,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,EAAG,CAAC;YACtD,OAAO;AACH,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,OAAO,EAAE,SAAS;aACrB,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,0BAA0B,GAAG,QAAQ,CAAC,MAAK;YACvC,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC9C,YAAA,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,OAAQ,CAAC;AAC3C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO;gBACH,OAAO;gBACP,UAAU;gBACV,MAAM;gBACN,gBAAgB;gBAChB,eAAe;gBACf,aAAa,EAAE,aAAa,EAAE;aACjC,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC1D,YAAA,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnG,OAAO;gBACH,OAAO;gBACP,UAAU;gBACV,UAAU;gBACV,aAAa;gBACb,YAAY;gBACZ,gBAAgB;gBAChB,eAAe;aAClB,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,OAAO,sBAAsB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACtD,SAAC,CAAC,CAAC;AAiBN,KAAA;AAfG,IAAA,cAAc,CAAC,CAA4B,EAAA;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAA8B,CAAC,CAAC;KACzD;AAED,IAAA,cAAc,CAAC,CAA4B,EAAA;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAA8B,CAAC,CAAC;KACzD;AAED,IAAA,UAAU,CAAC,CAA4B,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAA8B,CAAC,CAAC;KACrD;AAED,IAAA,aAAa,CAAC,CAA4B,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAA8B,CAAC,CAAC;KACxD;8GAvKQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7C5B,o6EAsDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxBQ,WAAW,EAAA,QAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,OAAO,EACP,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EACP,QAAA,EAAA,4MAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,6FACxB,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,kBAAkB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,6BAA6B,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,uBAAuB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,eAAe,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,oBAAoB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,gBAAgB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAIX,eAAe,EAAA,UAAA,EAAA,CAAA;kBApB3B,SAAS;+BACI,mBAAmB,EAAA,UAAA,EAEjB,IAAI,EACP,OAAA,EAAA;wBACL,WAAW;wBACX,OAAO;wBACP,OAAO;wBACP,kBAAkB;wBAClB,wBAAwB;wBACxB,YAAY;wBACZ,kBAAkB;wBAClB,6BAA6B;wBAC7B,uBAAuB;wBACvB,eAAe;wBACf,oBAAoB;wBACpB,gBAAgB;qBACnB,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,o6EAAA,EAAA,CAAA;;;AEY7C,MAAO,WAAY,SAAQ,eAAe,CAAA;AAuE5C,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE,CAAC;QAnEZ,IAAe,CAAA,eAAA,GAAG,0BAA0B,CAAC;AAE7C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAEhD,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7E,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAa,WAAW,CAAC,CAAC;AAE/C,QAAA,IAAA,CAAA,cAAc,GAAG,SAAS,CAAa,aAAa,CAAC,CAAC;AAEtD,QAAA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAa,eAAe,CAAC,CAAC;AAE1D,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YACvB,OAAO,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;AACxD,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACrE,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;YAChC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5E,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,OAAO,IAAI,CAAC,SAAS,EAAG,CAAC,aAAa,CAAC;AAC3C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,cAAc,GAAkC,QAAQ,CAAC,MAAK;YAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtD,YAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;AAC9B,gBAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAClC,gBAAA,SAAS,EAAE,0BAA0B;AACrC,gBAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM;gBAClC,WAAW,EAAE,MAAM,CAAC,MAAM;AAC1B,gBAAA,WAAW,EAAE,0BAA0B;AACvC,gBAAA,cAAc,EAAE,uBAAuB;AACvC,gBAAA,aAAa,EAAE,EAAE;AACjB,gBAAA,gBAAgB,EAAE,mBAAmB,CAAC,MAAM,CAAC;AAC7C,gBAAA,iBAAiB,EAAE,CAAC;AACvB,aAAA,CAAC,CAAC;YACH,OAAO;gBACH,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,gBAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAClC,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK;AAC1C,gBAAA,eAAe,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM;AAC5C,gBAAA,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;aAClC,CAAC;AACN,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,UAAU,CAAC;AAC5C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;AACvG,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YAC3B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,GAAG,+BAA+B,CAAC;AAC1E,SAAC,CAAC,CAAC;AA+LH,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,OAA4B,KAAI;AAC5C,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,gBAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACpC;AACD,YAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAK;gBACpC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;AAC7C,gBAAA,MAAM,WAAW,GAAG,QAAQ,IAAI,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC;AACvD,gBAAA,MAAM,WAAW,GAAG,QAAQ,IAAI,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;gBAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa,CAAC;gBAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC;gBACzD,IAAI,aAAa,EAAE;oBACf,aAAa,CAAC,UAAU,GAAG,aAAa,CAAC,UAAU,GAAG,WAAW,CAAC;iBACrE;gBACD,IAAI,WAAW,EAAE;oBACb,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC;iBAC/D;AACD,gBAAA,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;AACvC,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,aAAC,CAAC,CAAC;AACP,SAAC,CAAC;QA2BM,IAAc,CAAA,cAAA,GAAG,MAAK;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,cAAc,CAAC;AACjC,gBAAA,WAAW,EAAE,KAAK;AACrB,aAAA,CAAC,CAAC;AACP,SAAC,CAAC;AAEM,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,CAAM,KAAI;AAClC,YAAA,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;AAChC,YAAA,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,cAAc,CAAC;gBACjC,UAAU;AACV,gBAAA,WAAW,EAAE,IAAI;AACpB,aAAA,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1B,SAAC,CAAC;QAtPE,eAAe,CAAC,MAAK;YACjB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;gBAC7E,IAAI,CAAC,mBAAmB,EAAE,CAAC;aAC9B;AACL,SAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAK;YACR,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE;gBACvC,IAAI,CAAC,qBAAqB,EAAE,CAAC;aAChC;AACL,SAAC,CAAC,CAAC;KACN;IAEQ,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC;KACrC;IAEO,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC;YACvC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;AAC7C,YAAA,aAAa,EAAE,MAAM,CAAC,sBAAsB,CAAC;AAC7C,YAAA,WAAW,EAAE,MAAM,CAAC,oBAAoB,CAAC;YACzC,YAAY,EAAE,IAAI,CAAC,YAAY;AAClC,SAAA,CAAC,CAAC;KACN;AAED,IAAA,cAAc,CAAC,CAA4B,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpC;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAK;YACpC,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;AACnD,YAAA,MAAM,GAAG,GAAG,SAAS,EAAE,kBAAkB,EAAE,CAAC;YAC5C,IAAI,GAAG,IAAI,IAAI;gBAAE,OAAO;AACxB,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AACjC,YAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;YACrB,MAAM,gBAAgB,GAAG,gBAAgB,CACrC,CAAC,EACD,CAAC,EACD,IAAI,CAAC,UAAU,EAAE,EACjB,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EACtC,OAAQ,EACR,UAAU,CACb,CAAC;AACF,YAAA,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACtG,YAAA,OAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACtB,SAAC,CAAC,CAAC;KACN;AAED,IAAA,cAAc,CAAC,CAA4B,EAAA;AACvC,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAC/B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAE1C,QAAA,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC7E,QAAQ,UAAU;AACd,YAAA,KAAK,mBAAmB;gBACpB,UAAU,CAAC,cAAc,EAAE,CAAC;AAC5B,gBAAA,IAAI,CAAC,OAAO;oBAAE,OAAO;AACrB,gBAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBACtD,OAAO;AACX,YAAA,KAAK,aAAa;AACd,gBAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;oBAAE,OAAO;AAClC,gBAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,CAAC;gBAC/C,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/D,OAAO;AACX,YAAA,KAAK,uBAAuB,CAAC;AAC7B,YAAA,KAAK,yBAAyB,CAAC;AAC/B,YAAA,KAAK,4BAA4B,CAAC;AAClC,YAAA,KAAK,mCAAmC;gBACpC,OAAO;AACX,YAAA;AACI,gBAAA,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE,CAAC;SACzD;KACJ;AAED,IAAA,UAAU,CAAC,CAA4B,EAAA;AACnC,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAC/B,UAAU,CAAC,cAAc,EAAE,CAAC;AAC5B,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAQ,CAAC,aAAa,EAAE,CAAC;AACzE,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,oBAAoB,CAAC,IAAI;YAAE,OAAO;QAC5D,QAAQ,UAAU;YACd,KAAK,uBAAuB,EAAE;AAC1B,gBAAA,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE,CAAC;gBAClD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,OAAO;aACV;YACD,KAAK,4BAA4B,EAAE;gBAC/B,MAAM,aAAa,GAAG,OAAQ,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC;AAChE,gBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;gBACjC,OAAO;aACV;YACD,KAAK,mCAAmC,EAAE;gBACtC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;AAClG,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC;gBACjC,OAAO;aACV;YACD,KAAK,yBAAyB,EAAE;AAC5B,gBAAA,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE,CAAC;AAClD,gBAAA,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,aAAa,EAAG,CAAC;gBACpE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,qBAAqB,EAAE,CAAC;AACtE,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACnC,oBAAA,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;oBACrC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM;AAChE,iBAAA,CAAC,CAAC;gBACH,OAAO;aACV;AACD,YAAA,KAAK,wBAAwB;gBACzB,UAAU,CAAC,cAAc,EAAE,CAAC;gBAC5B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1C,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;gBACvD,IAAI,OAAO,EAAE;oBACT,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;AAChD,oBAAA,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,aAAa,EAAG,CAAC;oBACjF,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,qBAAqB,EAAE,CAAC;AAEtE,oBAAA,MAAM,QAAQ,GAAG;AACb,wBAAA,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;wBAC/B,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM;qBACpD,CAAC;AACF,oBAAA,MAAM,iBAAiB,GAAG;wBACtB,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,qBAAqB;wBAC7D,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM;qBAChE,CAAC;oBAEF,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAgB,CAAC;oBAC5F,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE;AACrD,wBAAA,OAAO,EAAE,OAAO;wBAChB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,wBAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE;wBAC/B,QAAQ;AACR,wBAAA,UAAU,EAAE,UAAU;wBACtB,iBAAiB;AACpB,qBAAA,CAAC,CAAC;iBACN;gBACD,OAAO;SACd;KACJ;AAED,IAAA,aAAa,CAAC,CAA4B,EAAA;QACtC,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;YACvB,OAAO;SACV;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;AAChD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC1C,OAAO;SACV;QACD,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE;AACtD,gBAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAClC,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,gBAAA,OAAO,EAAE,OAAQ;AACjB,gBAAA,QAAQ,EAAE,QAAS;AACnB,gBAAA,gBAAgB,EAAE,CAAC,KAAmC,KAAI;AACtD,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACvC;AACJ,aAAA,CAAC,CAAC;SACN,EAAE,CAAC,CAAC,CAAC;KACT;IAEO,SAAS,GAAA;AACb,QAAA,SAAS,CAAa,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACtE,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,CAAa,KAAI;YACzB,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,CAAC;YAC/C,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACpF,SAAC,CAAC,CAAC;KACV;IAuBO,mBAAmB,GAAA;AACvB,QAAA,SAAS,CAAa,IAAI,CAAC,gBAAgB,EAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACrF,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACb,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC7B,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,cAAc,EAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnF,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACb,YAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAC,CAAC,CAAC;KACV;IAEO,mBAAmB,GAAA;QACvB,SAAS,CAAa,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1D,aAAA,IAAI,CACD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,YAAY,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EACzF,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACtC;aACA,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE,CAAC;AACtD,SAAC,CAAC,CAAC;KACV;AAiBO,IAAA,cAAc,CAAC,CAAM,EAAA;AACzB,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,cAAc,CAAC;YACjC,SAAS;AACT,YAAA,WAAW,EAAE,IAAI;AACpB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;IAEO,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;AACnB,YAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY;AAC/C,SAAA,CAAC,CAAC;KACN;IAEO,uBAAuB,GAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;YAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,CAAC;YAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,GAAG,+BAA+B,CAAC;YAClF,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,YAAA,IAAI,cAAc,IAAI,UAAU,EAAE;AAC9B,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;gBACxD,OAAO;aACV;AACL,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;KACxD;IAEO,qBAAqB,GAAA;AACzB,QAAA,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAG,CAAC;AAClE,QAAA,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,cAAe,CAAC,CAAC;QACjF,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,EAAE,CAAC;QAEtE,IAAI,UAAU,KAAK,aAAa,IAAI,QAAQ,IAAI,OAAO,EAAE;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;YAEhD,IAAI,CAAC,KAAK,EAAE;gBACR,OAAO;aACV;AAED,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;YAC7B,MAAM,gBAAgB,GAAG,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;AACjG,YAAA,MAAM,yBAAyB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;YAC5G,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAEnE,YAAA,IAAI,WAAW,IAAI,yBAAyB,EAAE;AAC1C,gBAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,CAAC;aAClD;AAED,YAAA,IAAI,CAAC,WAAW,IAAI,CAAC,kBAAkB,EAAE;AACrC,gBAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,CAAC;gBAC/C,OAAO;aACV;AAED,YAAA,IAAI,WAAW,KAAK,CAAC,CAAC,yBAAyB,IAAI,kBAAkB,KAAK,CAAC,kBAAkB,CAAC,EAAE;gBAC5F,OAAO;aACV;YAED,UAAU,CAAC,MAAK;gBACZ,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE;AACtD,oBAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAClC,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,oBAAA,OAAO,EAAE,OAAQ;AACjB,oBAAA,QAAQ,EAAE,QAAS;AACnB,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,gBAAgB,EAAE,CAAC,KAAmC,KAAI;AACtD,wBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACvC;AACJ,iBAAA,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;SACN;aAAM;;YAEH,IAAI,WAAW,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE;AACjG,gBAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,CAAC;aAClD;SACJ;KACJ;8GA9YQ,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAFT,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrD9F,yhCAuBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED6Bc,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGhB,WAAW,EAAA,UAAA,EAAA,CAAA;kBAXvB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAEb,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE,eAAe;qBACzB,EACQ,OAAA,EAAA,CAAC,eAAe,CAAC,EACf,SAAA,EAAA,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAA,QAAA,EAAA,yhCAAA,EAAA,CAAA;;;AErD9F;;AAEG;;;;"}
|
1
|
+
{"version":3,"file":"ai-table-grid.mjs","sources":["../../../packages/grid/src/constants/colors.ts","../../../packages/grid/src/core/types/ai-table.ts","../../../packages/grid/src/core/types/core.ts","../../../packages/grid/src/core/constants/field.ts","../../../packages/grid/src/types/avatar.ts","../../../packages/grid/src/types/component-config.ts","../../../packages/grid/src/types/grid.ts","../../../packages/grid/src/types/row.ts","../../../packages/grid/src/core/coordinate.ts","../../../packages/grid/src/core/utils/id-creator.ts","../../../packages/grid/src/core/utils/field.ts","../../../packages/grid/src/core/utils/common.ts","../../../packages/grid/src/core/utils/queries.ts","../../../packages/grid/src/core/context.ts","../../../packages/grid/src/components/cell-editors/abstract-cell-editor.component.ts","../../../packages/grid/src/components/cell-editors/date/date-editor.component.ts","../../../packages/grid/src/components/cell-editors/link/edit-link/edit-link.component.ts","../../../packages/grid/src/components/cell-editors/link/edit-link/edit-link.component.html","../../../packages/grid/src/components/cell-editors/link/link-editor.component.ts","../../../packages/grid/src/components/cell-editors/link/link-editor.component.html","../../../packages/grid/src/components/cell-editors/number/number-editor.component.ts","../../../packages/grid/src/components/cell-editors/progress/progress-editor.component.ts","../../../packages/grid/src/components/cell-editors/rating/rating-editor.component.ts","../../../packages/grid/src/pipes/grid.pipe.ts","../../../packages/grid/src/components/cell-views/select/option.component.ts","../../../packages/grid/src/components/cell-views/select/option.component.html","../../../packages/grid/src/components/cell-editors/select/select-editor.component.ts","../../../packages/grid/src/components/cell-editors/select/select-editor.component.html","../../../packages/grid/src/components/cell-editors/text/text-editor.component.ts","../../../packages/grid/src/components/field-property-editor/field-property-editor.component.ts","../../../packages/grid/src/components/field-property-editor/field-property-editor.component.html","../../../packages/grid/src/constants/editor.ts","../../../packages/grid/src/constants/table.ts","../../../packages/grid/src/constants/grid.ts","../../../packages/grid/src/constants/icon.ts","../../../packages/grid/src/constants/text.ts","../../../packages/grid/src/components/field-menu/field-menu.component.ts","../../../packages/grid/src/components/field-menu/field-menu.component.html","../../../packages/grid/src/utils/build.ts","../../../packages/grid/src/services/field.service.ts","../../../packages/grid/src/services/selection.service.ts","../../../packages/grid/src/utils/cell.ts","../../../packages/grid/src/utils/common.ts","../../../packages/grid/src/utils/get-placeholder-cells.ts","../../../packages/grid/src/utils/get-text-width.ts","../../../packages/grid/src/utils/image-cache.ts","../../../packages/grid/src/utils/os.ts","../../../packages/grid/src/utils/visible-range.ts","../../../packages/grid/src/utils/position.ts","../../../packages/grid/src/utils/style.ts","../../../packages/grid/src/utils/text-measure.ts","../../../packages/grid/src/services/event.service.ts","../../../packages/grid/src/grid-base.component.ts","../../../packages/grid/src/dom-grid.component.ts","../../../packages/grid/src/dom-grid.component.html","../../../packages/grid/src/angular-konva/components/container.token.ts","../../../packages/grid/src/angular-konva/utils/update-picture.ts","../../../packages/grid/src/angular-konva/utils/apply-node-props.ts","../../../packages/grid/src/angular-konva/utils/common.ts","../../../packages/grid/src/angular-konva/components/shape.component.ts","../../../packages/grid/src/angular-konva/components/container.component.ts","../../../packages/grid/src/angular-konva/components/stage.component.ts","../../../packages/grid/src/angular-konva/interfaces/component.ts","../../../packages/grid/src/angular-konva/interfaces/shape.ts","../../../packages/grid/src/renderer/components/icon.component.ts","../../../packages/grid/src/renderer/components/add-field-column.component.ts","../../../packages/grid/src/renderer/drawers/drawer.ts","../../../packages/grid/src/renderer/drawers/layout-drawer.ts","../../../packages/grid/src/renderer/drawers/add-row-layout-drawer.ts","../../../packages/grid/src/renderer/drawers/cell-drawer.ts","../../../packages/grid/src/renderer/drawers/record-row-layout-drawer.ts","../../../packages/grid/src/renderer/creations/create-cells.ts","../../../packages/grid/src/renderer/components/cells.component.ts","../../../packages/grid/src/renderer/components/field-icon.component.ts","../../../packages/grid/src/renderer/components/text.component.ts","../../../packages/grid/src/renderer/components/field-head.component.ts","../../../packages/grid/src/renderer/components/frozen-cells.component.ts","../../../packages/grid/src/renderer/creations/create-heads.ts","../../../packages/grid/src/renderer/components/frozen-heads.component.ts","../../../packages/grid/src/renderer/components/frozen-placeholder-cells.component.ts","../../../packages/grid/src/renderer/components/heads.component.ts","../../../packages/grid/src/renderer/components/hover-row-heads.component.ts","../../../packages/grid/src/renderer/components/other-rows.component.ts","../../../packages/grid/src/renderer/components/placeholder-cells.component.ts","../../../packages/grid/src/renderer/creations/create-active-cell-border.ts","../../../packages/grid/src/renderer/renderer.component.ts","../../../packages/grid/src/renderer/renderer.component.html","../../../packages/grid/src/grid.component.ts","../../../packages/grid/src/grid.component.html","../../../packages/grid/src/ai-table-grid.ts"],"sourcesContent":["export const Colors = {\n primary: '#6698FF',\n gray100: '#f5f5f5',\n gray200: '#eee',\n gray300: '#ddd',\n gray800: '#333',\n gray600: '#999',\n gray700: '#666',\n white: '#fff',\n black: '#000',\n transparent: 'transparent',\n gray80: '#fafafa',\n headSelectedBgColor: '#EAEFFA',\n itemActiveBgColor: '#6698ff1a',\n waring: '#ffcd5d',\n success: '#73d897'\n};\n","import { Signal, WritableSignal } from '@angular/core';\nimport { Colors } from '../../constants/colors';\nimport { AITableSelection } from '../../types';\nimport { RendererContext } from '../context';\nimport { AITableField, AITableFields, AITableRecord, AITableRecords } from './core';\n\nexport interface AITable {\n records: WritableSignal<AITableRecords>;\n fields: WritableSignal<AITableFields>;\n context?: RendererContext;\n selection: WritableSignal<AITableSelection>;\n recordsMap: Signal<{ [kay: string]: AITableRecord }>;\n fieldsMap: Signal<{ [kay: string]: AITableField }>;\n recordsWillHidden: WritableSignal<string[]>;\n recordsWillMove: WritableSignal<string[]>\n}\n\nexport type AIPlugin = (aiTable: AITable) => AITable;\n\nexport const AITable = {\n getColors() {\n return Colors;\n },\n getVisibleFields(aiTable: AITable) {\n return aiTable.fields().filter((field) => !field.hidden);\n },\n getVisibleRows(aiTable: AITable) {\n return aiTable.records();\n },\n getActiveCell(aiTable: AITable): { recordId: string; fieldId: string } | null {\n const selection = aiTable.selection();\n let selectedCells = [];\n for (let [recordId, fieldIds] of selection.selectedCells.entries()) {\n for (let fieldId of Object.keys(fieldIds)) {\n if ((fieldIds as { [key: string]: boolean })[fieldId]) {\n selectedCells.push({\n recordId,\n fieldId\n });\n }\n }\n }\n return selectedCells ? selectedCells[0] : null;\n },\n isCellVisible(aiTable: AITable, cell: { recordId: string; fieldId: string }) {\n const visibleRowIndexMap = aiTable.context!.visibleRowsIndexMap();\n const visibleColumnIndexMap = aiTable.context!.visibleColumnsMap();\n return visibleRowIndexMap!.has(cell.recordId) && visibleColumnIndexMap.has(cell.fieldId);\n },\n getCellIndex(aiTable: AITable, cell: { recordId: string; fieldId: string }): { rowIndex: number; columnIndex: number } | null {\n const visibleRowIndexMap = aiTable.context!.visibleRowsIndexMap();\n const visibleColumnIndexMap = aiTable.context!.visibleColumnsMap();\n if (AITable.isCellVisible(aiTable, cell)) {\n return {\n rowIndex: visibleRowIndexMap!.get(cell.recordId)!,\n columnIndex: visibleColumnIndexMap.get(cell.fieldId)!\n };\n }\n return null;\n }\n};\n","import { Id } from 'ngx-tethys/types';\n\nexport enum AITableFieldType {\n text = 'text', // 包含多行文本\n richText = 'rich_text', // 包含多行文本\n select = 'select', // 包含单选和多选\n number = 'number',\n date = 'date',\n member = 'member', // 包含单个和多个\n // cascadeSelect = 'cascade_select', // 包含单选和多选,参数复杂后续再进行设计\n progress = 'progress',\n rate = 'rate',\n link = 'link',\n createdAt = 'created_at',\n updatedAt = 'updated_at',\n createdBy = 'created_by',\n updatedBy = 'updated_by'\n}\n\nexport type SystemFieldTypes =\n | AITableFieldType.createdAt\n | AITableFieldType.createdBy\n | AITableFieldType.updatedAt\n | AITableFieldType.updatedBy;\n\nexport enum AITableStatType {\n None = 0,\n CountAll = 1,\n Empty = 2,\n Filled = 3,\n Unique = 4,\n PercentEmpty = 5,\n PercentFilled = 6,\n PercentUnique = 7,\n Sum = 8,\n Average = 9,\n Max = 10,\n Min = 11,\n DateRangeOfDays = 12,\n DateRangeOfMonths = 13,\n Checked = 14,\n UnChecked = 15,\n PercentChecked = 16,\n PercentUnChecked = 17\n}\n\nexport interface AITableFieldOption {\n name: string;\n type: AITableFieldType;\n icon: string;\n width: number;\n settings?: AITableFieldSettings;\n}\n\nexport interface AITableField {\n _id: string;\n name: string;\n type: AITableFieldType;\n icon?: string;\n width?: number;\n hidden?: boolean;\n frozen?: boolean;\n stat_type?: AITableStatType;\n settings?: AITableFieldSettings;\n}\n\nexport type AITableFieldSettings = TextSettings | RichTextSettings | SelectSettings | MemberSettings;\n\nexport interface TextSettings {}\n\nexport interface RichTextSettings {}\n\nexport interface SelectSettings extends IsMultiple {\n option_style?: AITableSelectOptionStyle;\n options: AITableSelectOption[];\n}\n\nexport interface MemberSettings extends IsMultiple {}\n\nexport interface IsMultiple {\n is_multiple?: boolean;\n}\n\nexport interface AITableSelectOption {\n _id: string;\n text: string;\n icon?: string;\n color?: string;\n bg_color?: string;\n}\n\nexport enum AITableSelectOptionStyle {\n text = 1,\n tag = 2,\n dot = 3,\n piece = 4\n}\n\nexport type TextFieldValue = string;\n\nexport type SelectFieldValue = Id[]; // 数字\n\nexport type NumberFieldValue = number;\n\nexport type DateFieldValue = { timestamp: number }; // 时间戳\n\nexport type MemberFieldValue = Id[];\n\nexport type ProgressFieldValue = number; // [0,1]\n\nexport type RateFieldValue = 1 | 2 | 3 | 4 | 5;\n\nexport type FieldValue =\n | TextFieldValue\n | SelectFieldValue\n | NumberFieldValue\n | DateFieldValue\n | MemberFieldValue\n | ProgressFieldValue\n | RateFieldValue\n | any;\n\nexport interface TrackableEntity {\n created_at: NumberFieldValue;\n created_by: string;\n updated_at: NumberFieldValue;\n updated_by: string;\n}\n\nexport interface UpdateTrackableEntity {\n updated_at: NumberFieldValue;\n updated_by: string;\n}\n\nexport interface AITableRecord {\n _id: string;\n created_at: NumberFieldValue;\n created_by: string;\n updated_at: NumberFieldValue;\n updated_by: string;\n values: Record<string, FieldValue>;\n}\n\nexport interface AITableRecordUpdatedInfo {\n updated_at: number;\n updated_by: string;\n}\n\nexport type AITableRecords = AITableRecord[];\n\nexport type AITableFields = AITableField[];\n\nexport interface AITableValue {\n records: AITableRecords;\n fields: AITableFields;\n}\n\nexport enum Direction {\n before = 'before',\n after = 'after'\n}\n\nexport interface AddRecordOptions {\n originId: string;\n direction?: Direction;\n isDuplicate?: boolean;\n count?: number;\n}\n\nexport interface AddFieldOptions {\n originId: string;\n defaultValue: Partial<AITableField>;\n direction?: Direction;\n isDuplicate?: boolean;\n count?: number;\n}\n\nexport interface UpdateFieldValueOptions<T = unknown> {\n value: T;\n path: AIFieldValueIdPath;\n}\n\nexport interface SetFieldOptions<T = unknown> {\n field: AITableField;\n path: IdPath;\n}\n\nexport type NumberPath = [number];\n\nexport type IdPath = [string];\n\nexport type AIFieldValueIdPath = [string, string];\n\nexport type Path = NumberPath | IdPath | AIFieldValueIdPath;\n","import { AITableFieldOption, AITableFieldType } from '../types';\n\nexport const FieldOptions: AITableFieldOption[] = [\n {\n type: AITableFieldType.text,\n name: '单行文本',\n icon: 'font',\n width: 300\n },\n // 多行文本\n {\n type: AITableFieldType.select,\n name: '单选',\n icon: 'check-circle',\n width: 200\n },\n {\n type: AITableFieldType.select,\n name: '多选',\n icon: 'list-check',\n width: 200,\n settings: {\n is_multiple: true\n }\n },\n {\n type: AITableFieldType.number,\n name: '数字',\n icon: 'hashtag',\n width: 200\n },\n {\n type: AITableFieldType.date,\n name: '日期',\n icon: 'calendar',\n width: 200\n },\n {\n type: AITableFieldType.member,\n name: '成员',\n icon: 'user',\n width: 200,\n settings: {\n is_multiple: true\n }\n },\n // 级联单选\n // 级联多选\n {\n type: AITableFieldType.progress,\n name: '进度',\n icon: 'progress',\n width: 200\n },\n {\n type: AITableFieldType.rate,\n name: '评分',\n icon: 'star-circle',\n width: 200\n },\n {\n type: AITableFieldType.link,\n name: '链接',\n icon: 'link-insert',\n width: 300\n },\n {\n type: AITableFieldType.createdBy,\n name: '创建人',\n icon: 'user',\n width: 200\n },\n {\n type: AITableFieldType.createdAt,\n name: '创建时间',\n icon: 'calendar',\n width: 200\n },\n {\n type: AITableFieldType.updatedBy,\n name: '更新人',\n icon: 'user',\n width: 200\n },\n {\n type: AITableFieldType.updatedAt,\n name: '更新时间',\n icon: 'calendar',\n width: 200\n }\n];","export enum AITableAvatarSize {\n size16 = 16,\n size20 = 22,\n size24 = 24,\n size28 = 28,\n size32 = 32,\n size36 = 36,\n size44 = 44,\n size48 = 48,\n size68 = 68,\n size110 = 110,\n size160 = 160\n}\n\nexport enum AITableAvatarType {\n member,\n space,\n team\n}\n\nexport enum AITableMemberType {\n team = 1,\n role = 2,\n member = 3\n}\n","import Konva from 'konva';\nimport { AITable, AITableField, Coordinate } from '../core';\nimport { AITablePointPosition } from './grid';\n\nexport interface AITableIconConfig extends Konva.ShapeConfig {\n size?: number;\n}\n\nexport interface AITableFieldTypeIconConfig {\n field: AITableField;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n fill?: string;\n}\n\nexport interface AITableFieldHeadConfig {\n x?: number;\n y?: number;\n width: number;\n height: number;\n field: AITableField;\n stroke?: string;\n iconVisible?: boolean;\n isSelected?: boolean;\n isHoverIcon?: boolean;\n}\n\nexport interface AITableColumnHeadsConfig {\n aiTable: AITable;\n coordinate: Coordinate;\n columnStartIndex: number;\n columnStopIndex: number;\n pointPosition: AITablePointPosition;\n}\n\nexport interface AITableAddFieldConfig {\n aiTable: AITable;\n coordinate: Coordinate;\n fields: AITableField[];\n columnStopIndex: number;\n pointPosition: AITablePointPosition;\n readonly?: boolean;\n}\n\nexport interface AITableTargetNameOptions {\n targetName: string;\n fieldId?: string;\n recordId?: string;\n mouseStyle?: string;\n}\n\nexport interface AITableTargetNameDetail {\n targetName: string | null;\n fieldId?: string | null;\n recordId?: string | null;\n mouseStyle?: string | null;\n}\n\nexport enum AITableMouseDownType {\n Left,\n Center,\n Right\n}\n","import { Signal, WritableSignal } from '@angular/core';\nimport { Dictionary } from 'ngx-tethys/types';\nimport { AITable, AITableField, AITableFieldType, AITableRecord, Coordinate, FieldValue, UpdateFieldValueOptions } from '../core';\nimport { AITableFieldMenuItem } from './field';\nimport { AITableLinearRow } from './row';\n\nexport interface AITableGridCellRenderSchema {\n editor?: any;\n transform?: (field: AITableField, value: FieldValue) => any;\n}\n\nexport interface AITableGridData {\n type: 'grid';\n fields: AITableField[];\n records: AITableRecord[];\n}\n\nexport interface AITableSelection {\n selectedRecords: Map<string, boolean>;\n selectedFields: Map<string, boolean>;\n selectedCells: Map<string, {}>;\n}\n\nexport interface AIFieldConfig {\n fieldRenderers?: Partial<Record<AITableFieldType, AITableGridCellRenderSchema>>;\n fieldPropertyEditor?: any;\n fieldMenus?: AITableFieldMenuItem[];\n}\n\nexport interface AITableUserInfo {\n uid?: string;\n display_name?: string;\n avatar?: string;\n}\n\nexport interface AITableReferences {\n members: Dictionary<AITableUserInfo>;\n}\n\nexport interface AITableRendererConfig {\n aiTable: AITable;\n container: HTMLDivElement;\n coordinate: Coordinate;\n containerWidth: number;\n containerHeight: number;\n references: AITableReferences;\n readonly?: boolean;\n}\n\nexport enum AITableRowColumnType {\n row = 'row',\n column = 'column'\n}\n\nexport type AITableSizeMap = Record<number, number>;\n\nexport interface AITableCoordinate {\n rowCount: number;\n columnCount: number;\n container: HTMLDivElement;\n rowHeight: number;\n rowInitSize?: number;\n rowIndicesMap: AITableSizeMap;\n columnIndicesMap: AITableSizeMap;\n columnInitSize?: number;\n frozenColumnCount?: number;\n}\n\nexport enum AITableCheckType {\n checked = 'checked',\n unchecked = 'unchecked'\n}\n\nexport interface AITableScrollState {\n scrollTop: number;\n scrollLeft: number;\n isScrolling: boolean;\n}\n\nexport interface ScrollActionOptions {\n deltaX: number;\n deltaY: number;\n shiftKey: boolean;\n callback?: () => void;\n}\n\nexport enum AITableAreaType {\n grid = 'grid',\n none = 'none'\n}\n\nexport type AITablePointPosition = {\n x: number;\n y: number;\n areaType: AITableAreaType;\n targetName: string;\n realTargetName: string;\n rowIndex: number;\n columnIndex: number;\n offsetTop: number;\n offsetLeft: number;\n};\n\nexport interface AITableEditPosition {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface AITableOpenEditOptions {\n recordId: string;\n fieldId: string;\n coordinate: Coordinate;\n container?: HTMLDivElement;\n isHoverEdit?: boolean;\n updateFieldValue: (options: UpdateFieldValueOptions<any>) => void;\n}\n\nexport interface AITableContext {\n linearRows: Signal<AITableLinearRow[]>;\n pointPosition: WritableSignal<AITablePointPosition>;\n scrollState: WritableSignal<AITableScrollState>;\n scrollAction: (options: ScrollActionOptions) => void;\n visibleColumnsMap: Signal<Map<string, number>>;\n visibleRowsIndexMap: Signal<Map<string, number>>;\n}\n","import { AITable, Coordinate } from '../core';\n\nexport enum AITableRowType {\n add = 'add',\n record = 'record'\n}\n\nexport type AITableCellMetaData = {\n size: number;\n offset: number;\n};\n\nexport type AITableCellMetaDataMap = Record<number, AITableCellMetaData>;\n\nexport type AITableLinearRowAdd = {\n _id: string;\n type: AITableRowType.add;\n};\n\nexport type AITableLinearRowRecord = {\n _id: string;\n type: AITableRowType.record;\n displayIndex: number;\n};\n\nexport type AITableLinearRow = AITableLinearRowAdd | AITableLinearRowRecord;\n\nexport interface AITableRowHeadsConfig {\n coordinate: Coordinate;\n rowStartIndex: number;\n rowStopIndex: number;\n aiTable: AITable;\n}\n","import { AITableCellMetaData, AITableCoordinate, AITableRowColumnType, AITableSizeMap } from '../types';\n\n/**\n * 用于构建 Canvas 基础坐标系,后续的绘制工作以此为基础\n */\nexport class Coordinate {\n protected _rowHeight: number;\n public rowCount: number;\n public columnCount: number;\n public container: HTMLDivElement;\n public containerWidth: number;\n public containerHeight: number;\n // 用 index 映射 每一行的 高度\n public rowIndicesMap: AITableSizeMap = {};\n // 用 index 映射 每一列 的 宽度\n public columnIndicesMap: AITableSizeMap = {};\n // 除去表头和编号列真正单元格绘制的初始值 x\n public rowInitSize: number;\n // 除去表头和编号列真正单元格绘制的初始值 y\n public columnInitSize: number;\n // 行坐标集中最后一行的索引\n public lastRowIndex = -1;\n // 列坐标集中最后一列的索引\n public lastColumnIndex = -1;\n public rowMetaDataMap: Record<number, AITableCellMetaData> = {};\n public columnMetaDataMap: Record<number, AITableCellMetaData> = {};\n public frozenColumnCount: number;\n\n constructor({\n rowHeight,\n rowCount,\n columnCount,\n container,\n rowIndicesMap = {},\n columnIndicesMap = {},\n rowInitSize = 0,\n columnInitSize = 0,\n frozenColumnCount = 0\n }: AITableCoordinate) {\n this._rowHeight = rowHeight;\n this.rowCount = rowCount;\n this.columnCount = columnCount;\n this.rowInitSize = rowInitSize;\n this.columnInitSize = columnInitSize;\n this.containerWidth = container.offsetWidth;\n this.rowIndicesMap = rowIndicesMap;\n this.columnIndicesMap = columnIndicesMap;\n this.containerHeight = container.offsetHeight;\n this.frozenColumnCount = frozenColumnCount;\n this.container = container;\n }\n\n public get rowHeight() {\n return this._rowHeight;\n }\n\n public set rowHeight(height: number) {\n this._rowHeight = height;\n }\n\n /**\n * 总宽度\n */\n public get totalWidth() {\n const { offset, size } = this.getCellMetaData(this.columnCount - 1, AITableRowColumnType.column);\n return offset + size;\n }\n\n /**\n * 总高度\n */\n public get totalHeight() {\n const { offset, size } = this.getCellMetaData(this.rowCount - 1, AITableRowColumnType.row);\n return offset + size;\n }\n\n /**\n * 根据 rowIndex 获取对应行高\n */\n public getRowHeight(index: number) {\n return this.rowIndicesMap[index] ?? this.rowHeight;\n }\n\n /**\n * 根据 columnIndex 获取对应列宽\n */\n public getColumnWidth(index: number) {\n return this.columnIndicesMap[index];\n }\n\n /**\n * 获取每个 cell 垂直/水平方向的坐标信息\n */\n protected getCellMetaData(index: number, itemType: AITableRowColumnType): AITableCellMetaData {\n let cellMetadataMap, lastMeasuredIndex, offset;\n const isColumnType = itemType === AITableRowColumnType.column;\n if (isColumnType) {\n offset = this.columnInitSize;\n lastMeasuredIndex = this.lastColumnIndex;\n cellMetadataMap = this.columnMetaDataMap;\n } else {\n offset = this.rowInitSize;\n lastMeasuredIndex = this.lastRowIndex;\n cellMetadataMap = this.rowMetaDataMap;\n }\n if (index > lastMeasuredIndex) {\n if (lastMeasuredIndex >= 0) {\n const itemMetadata = cellMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (let i = lastMeasuredIndex + 1; i <= index; i++) {\n const size = isColumnType ? this.columnIndicesMap[i] : (this.rowIndicesMap[i] ?? this.rowHeight);\n\n cellMetadataMap[i] = {\n offset,\n size\n };\n offset += size;\n }\n if (isColumnType) {\n this.lastColumnIndex = index;\n } else {\n this.lastRowIndex = index;\n }\n }\n return cellMetadataMap[index] || { size: 0, offset: 0 };\n }\n\n /**\n * 查找最近的单元格索引\n * 性能较差,但无论如何都可以找到\n */\n private _findNearestCellIndex(index: number, offset: number, itemType: AITableRowColumnType) {\n const itemCount = itemType === AITableRowColumnType.column ? this.columnCount : this.rowCount;\n let interval = 1;\n\n while (index < itemCount && this.getCellMetaData(index, itemType).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return this._findNearestCellIndexByBinary(offset, Math.floor(index / 2), Math.min(index, itemCount - 1), itemType);\n }\n\n /**\n * 二分法查找最近的单元格索引\n * 性能更佳,但需要加载数据\n */\n private _findNearestCellIndexByBinary(offset: number, low: number, high: number, itemType: AITableRowColumnType) {\n while (low <= high) {\n const middle = low + Math.floor((high - low) / 2);\n const currentOffset = this.getCellMetaData(middle, itemType).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n return low > -1 ? low - 1 : 0;\n }\n\n /**\n * 根据偏移量查找最近的单元格索引\n */\n public findNearestCellIndex(offset: number, itemType: AITableRowColumnType) {\n let lastIndex;\n if (itemType === AITableRowColumnType.column) {\n lastIndex = this.lastColumnIndex;\n } else {\n lastIndex = this.lastRowIndex;\n }\n const cellOffset = this.getCellMetaData(lastIndex, itemType).offset;\n const lastMeasuredItemOffset = lastIndex > 0 ? cellOffset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n return this._findNearestCellIndexByBinary(offset, 0, lastIndex, itemType);\n }\n return this._findNearestCellIndex(Math.max(0, lastIndex), offset, itemType);\n }\n\n /**\n * 根据垂直偏移量找到起始单元格的索引\n */\n public getRowStartIndex(offset: number) {\n return this.findNearestCellIndex(offset, AITableRowColumnType.row);\n }\n\n /**\n * 根据垂直起始单元格的索引查找结束单元格的索引\n */\n public getRowStopIndex(startIndex: number, scrollTop: number) {\n const itemMetadata = this.getCellMetaData(startIndex, AITableRowColumnType.row);\n const maxOffset = scrollTop + this.containerHeight;\n let offset = itemMetadata.offset + itemMetadata.size;\n let stopIndex = startIndex;\n\n while (stopIndex < this.rowCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += this.getCellMetaData(stopIndex, AITableRowColumnType.row).size;\n }\n return stopIndex;\n }\n\n /**\n * 根据水平偏移量找到起始单元格的索引\n */\n public getColumnStartIndex(offset: number) {\n return this.findNearestCellIndex(offset, AITableRowColumnType.column);\n }\n\n /**\n * 根据水平起始单元格的索引查找结束单元格的索引\n */\n public getColumnStopIndex(startIndex: number, scrollLeft: number) {\n const itemMetadata = this.getCellMetaData(startIndex, AITableRowColumnType.column);\n const maxOffset = scrollLeft + this.containerWidth;\n let offset = itemMetadata.offset + itemMetadata.size;\n let stopIndex = startIndex;\n\n while (stopIndex < this.columnCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += this.getCellMetaData(stopIndex, AITableRowColumnType.column).size;\n }\n return stopIndex;\n }\n\n /**\n * 根据 rowIndex 获取垂直偏移量\n */\n public getRowOffset(rowIndex: number) {\n return this.getCellMetaData(rowIndex, AITableRowColumnType.row).offset;\n }\n\n /**\n * 根据 columnIndex 获取水平偏移量\n */\n public getColumnOffset(columnIndex: number) {\n return this.getCellMetaData(columnIndex, AITableRowColumnType.column).offset;\n }\n\n /**\n * 冻结区域宽度\n */\n get frozenColumnWidth() {\n return this.getColumnOffset(this.frozenColumnCount) - this.columnInitSize;\n }\n\n /**\n * 根据 rowIndex, columnIndex 获取单元格坐标信息\n */\n public getCellRect(rowIndex: number, columnIndex: number) {\n const { size: height, offset: y } = this.getCellMetaData(rowIndex, AITableRowColumnType.row);\n const { size: width, offset: x } = this.getCellMetaData(columnIndex, AITableRowColumnType.column);\n return {\n x,\n y,\n width,\n height\n };\n }\n}\n","import ObjectID from 'bson-objectid';\n\nexport function idCreator() {\n return ObjectID().toHexString();\n}\n","import { FieldOptions } from '../constants/field';\nimport { AITable, AITableField, AITableFieldOption, AITableFieldType, IsMultiple } from '../types';\nimport { idCreator } from './id-creator';\n\nexport const isArrayField = (field: AITableField) => {\n return (\n [AITableFieldType.member, AITableFieldType.createdBy, AITableFieldType.updatedBy].includes(field.type) ||\n AITableFieldType.select === field.type\n );\n};\n\nexport const isSystemField = (field: AITableField) => {\n return [AITableFieldType.createdAt, AITableFieldType.createdBy, AITableFieldType.updatedAt, AITableFieldType.updatedBy].includes(\n field.type\n );\n};\n\nexport const isNumberFiled = (field: AITableField) => {\n return [AITableFieldType.number, AITableFieldType.progress, AITableFieldType.rate].includes(field.type);\n};\n\nexport function getDefaultFieldValue(field: AITableField) {\n if (isArrayField(field)) {\n return [];\n }\n if (isNumberFiled(field)) {\n return 0;\n }\n return '';\n}\n\nexport function createDefaultFieldName(aiTable: AITable, field: AITableFieldOption) {\n const fieldOption = getFieldOptionByField(field);\n if (fieldOption) {\n const count = aiTable.fields().filter((item) => {\n return isSameFieldOption(field, item);\n }).length;\n return count === 0 ? fieldOption.name : fieldOption.name + ' ' + count;\n }\n return FieldOptions[0].name;\n}\n\nexport function getFieldOptionByField(field: Partial<AITableField>) {\n return FieldOptions.find((item) => isSameFieldOption(item, field));\n}\n\nexport function isSameFieldOption(fieldOption: AITableFieldOption, field: Partial<AITableField>): boolean {\n return (\n fieldOption.type === field.type &&\n (fieldOption.type === AITableFieldType.select\n ? !!(fieldOption.settings as IsMultiple)?.is_multiple === !!(field.settings as IsMultiple)?.is_multiple\n : true)\n );\n}\n\nexport function createDefaultField(aiTable: AITable, type: AITableFieldType = AITableFieldType.text) {\n const fieldOption = FieldOptions.find((item) => item.type === type)!;\n return { _id: idCreator(), type, name: createDefaultFieldName(aiTable, fieldOption) };\n}\n","import { WritableSignal, computed, signal } from '@angular/core';\nimport { AITable, AITableField, AITableFields, AITableRecord, AITableRecords } from '../types';\n\nexport function createAITable(records: WritableSignal<AITableRecords>, fields: WritableSignal<AITableFields>): AITable {\n const aiTable: AITable = {\n records,\n fields,\n selection: signal({\n selectedRecords: new Map(),\n selectedFields: new Map(),\n selectedCells: new Map()\n }),\n recordsMap: computed(() => {\n return records().reduce(\n (object, item) => {\n object[item._id] = item;\n return object;\n },\n {} as { [kay: string]: AITableRecord }\n );\n }),\n fieldsMap: computed(() => {\n return fields().reduce(\n (object, item) => {\n object[item._id] = item;\n return object;\n },\n {} as { [kay: string]: AITableField }\n );\n }),\n recordsWillHidden: signal([]),\n recordsWillMove: signal([])\n };\n return aiTable;\n}\n","import { isUndefinedOrNull } from 'ngx-tethys/util';\nimport {\n AITable,\n AITableField,\n AITableRecord,\n AIFieldValueIdPath,\n IdPath,\n NumberPath,\n AITableFieldType,\n SystemFieldTypes,\n DateFieldValue,\n MemberFieldValue\n} from '../types';\nimport { isSystemField } from './field';\n\nexport const AITableQueries = {\n findRecordPath(aiTable: AITable, record: AITableRecord) {\n const recordIndex = record && aiTable.records().indexOf(record);\n if (!isUndefinedOrNull(recordIndex) && recordIndex > -1) {\n return [recordIndex] as NumberPath;\n }\n throw new Error(`can not find the record path: ${JSON.stringify({ ...(record || {}) })}`);\n },\n findFieldPath(aiTable: AITable, field: AITableField) {\n const fieldIndex = field && aiTable.fields().indexOf(field);\n if (!isUndefinedOrNull(fieldIndex) && fieldIndex > -1) {\n return [fieldIndex] as NumberPath;\n }\n throw new Error(`can not find the field path: ${JSON.stringify({ ...(field || {}) })}`);\n },\n getFieldValue(aiTable: AITable, path: AIFieldValueIdPath): any {\n if (!aiTable) {\n throw new Error(`aiTable does not exist`);\n }\n if (!aiTable.records()) {\n throw new Error(`aiTable has no records`);\n }\n if (!aiTable.fields()) {\n throw new Error(`aiTable has no fields`);\n }\n if (!path) {\n throw new Error(`path does not exist as path [${path}]`);\n }\n const record = aiTable.recordsMap()[path[0]];\n if (!record) {\n throw new Error(`can not find record at path [${path}]`);\n }\n const field = aiTable.fieldsMap()[path[1]];\n if (!field) {\n throw new Error(`can not find field at path [${path}]`);\n }\n if (isSystemField(field)) {\n return AITableQueries.getSystemFieldValue(record, field.type as SystemFieldTypes);\n }\n return record.values[path[1]];\n },\n getSystemFieldValue(record: AITableRecord, type: SystemFieldTypes) {\n const value = record[type];\n if (type === AITableFieldType.createdAt || type === AITableFieldType.updatedAt) {\n return { timestamp: value } as DateFieldValue;\n }\n if (type === AITableFieldType.createdBy || type === AITableFieldType.updatedBy) {\n return [value] as MemberFieldValue;\n }\n throw new Error(`unexpected ${type}`);\n },\n getField(aiTable: AITable, path: IdPath): AITableField | undefined {\n if (!aiTable) {\n throw new Error(`aiTable does not exist`);\n }\n if (!path) {\n throw new Error(`path does not exist as path [${path}]`);\n }\n return aiTable.fields().find((item) => item._id === path[0]);\n },\n\n getRecord(aiTable: AITable, path: NumberPath): AITableRecord {\n if (!aiTable) {\n throw new Error(`aiTable does not exist`);\n }\n if (!path) {\n throw new Error(`path does not exist as path [${path}]`);\n }\n return aiTable.records()[path[0]];\n }\n};\n","import { Signal, WritableSignal } from '@angular/core';\nimport { AITableContext, AITableLinearRow, AITablePointPosition, AITableScrollState, ScrollActionOptions } from '../types';\n\nexport class RendererContext {\n linearRows: Signal<AITableLinearRow[]>;\n pointPosition: WritableSignal<AITablePointPosition>;\n scrollState: WritableSignal<AITableScrollState>;\n visibleColumnsMap: Signal<Map<string, number>>;\n visibleRowsIndexMap: Signal<Map<string, number>>;\n scrollAction: (options: ScrollActionOptions) => void;\n\n constructor(options: AITableContext) {\n const { linearRows, pointPosition, scrollState, visibleColumnsMap, visibleRowsIndexMap, scrollAction } = options;\n this.linearRows = linearRows;\n this.pointPosition = pointPosition;\n this.scrollState = scrollState;\n this.scrollAction = scrollAction;\n this.visibleColumnsMap = visibleColumnsMap;\n this.visibleRowsIndexMap = visibleRowsIndexMap;\n }\n\n setPointPosition(position: Partial<AITablePointPosition>) {\n const oldPosition = this.pointPosition();\n if (\n oldPosition.areaType !== position.areaType ||\n oldPosition.rowIndex !== position.rowIndex ||\n oldPosition.columnIndex !== position.columnIndex ||\n oldPosition.targetName !== position.targetName\n ) {\n const newPosition = { ...oldPosition, ...position };\n this.pointPosition.set(newPosition);\n }\n }\n\n setScrollState(scrollState: Partial<AITableScrollState>) {\n this.scrollState.set({ ...this.scrollState(), ...scrollState });\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, Input, OnInit, output } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { AITable, AITableField, AITableQueries, UpdateFieldValueOptions } from '../../core';\n\n@Component({\n selector: 'abstract-edit-cell',\n template: ``,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport abstract class AbstractEditCellEditor<TValue, TFieldType extends AITableField = AITableField> implements OnInit {\n @Input({ required: true }) aiTable!: AITable;\n\n @Input({ required: true }) fieldId!: string;\n\n @Input({ required: true }) recordId!: string;\n\n updateFieldValue = output<UpdateFieldValueOptions<TValue>>();\n\n modelValue!: TValue;\n\n field = computed(() => {\n return this.aiTable.fieldsMap()[this.fieldId] as TFieldType;\n });\n\n record = computed(() => {\n return this.aiTable.recordsMap()[this.recordId];\n });\n\n elementRef: ElementRef<HTMLElement> = inject(ElementRef<HTMLElement>);\n\n protected thyPopoverRef = inject(ThyPopoverRef<AbstractEditCellEditor<TValue>>, { optional: true });\n\n ngOnInit(): void {\n this.modelValue = computed(() => {\n return AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id]);\n })();\n }\n\n update() {\n if (this.modelValue === AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id])) {\n return;\n }\n this.updateFieldValue.emit({\n value: this.modelValue,\n path: [this.record()._id, this.field()._id]\n });\n }\n\n closePopover() {\n this.thyPopoverRef?.close();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyDatePicker } from 'ngx-tethys/date-picker';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\nimport { ThyTimePickerModule } from 'ngx-tethys/time-picker';\nimport { AITableQueries, DateFieldValue } from '../../../core';\n\n@Component({\n selector: 'date-cell-editor',\n template: `\n <thy-date-picker\n class=\"h-100\"\n thyTimestampPrecision=\"seconds\"\n thyPlaceHolder=\"选择时间\"\n [ngModel]=\"modelValue.timestamp\"\n (ngModelChange)=\"updateValue($event)\"\n (thyOpenChange)=\"thyOpenChange($event)\"\n [thyAllowClear]=\"true\"\n [thyShowShortcut]=\"true\"\n [thyHasBackdrop]=\"false\"\n [thyShowTime]=\"false\"\n [thyOpen]=\"true\"\n thyFormat=\"yyyy-MM-dd\"\n >\n </thy-date-picker>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, ThyDatePicker, ThyTimePickerModule],\n host: {\n class: 'date-cell-editor'\n }\n})\nexport class DateCellEditorComponent extends AbstractEditCellEditor<DateFieldValue> {\n override ngOnInit(): void {\n this.modelValue = computed(() => {\n const value = AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id]);\n if (!value) {\n return {\n timestamp: 0\n };\n }\n return value;\n })();\n }\n\n updateValue(value: number) {\n this.updateFieldValue.emit({\n value: { timestamp: value },\n path: [this.record()._id, this.field()._id]\n });\n this.closePopover();\n }\n\n thyOpenChange(isOpen: Boolean) {\n if (!isOpen) {\n this.closePopover();\n }\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButton } from 'ngx-tethys/button';\nimport {\n ThyFormDirective,\n ThyFormGroup,\n ThyFormGroupFooter,\n ThyFormModule,\n ThyFormSubmitDirective,\n ThyFormValidatorLoader\n} from 'ngx-tethys/form';\nimport { ThyInputDirective } from 'ngx-tethys/input';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyAutofocusDirective, ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { SafeAny } from 'ngx-tethys/types';\n\nexport const LINK_URL_REGEX = /^http(s)?:\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- .\\/?%&=]*)?/;\n\n/**\n * @private\n */\n@Component({\n selector: 'link-edit',\n templateUrl: './edit-link.component.html',\n standalone: true,\n imports: [\n FormsModule,\n ThyStopPropagationDirective,\n ThyInputDirective,\n ThyAutofocusDirective,\n ThyButton,\n ThyFormSubmitDirective,\n ThyFormModule\n ]\n})\nexport class LinkEditComponent implements OnInit {\n @Input() url = '';\n\n @Input() text = '';\n\n @Output() confirm = new EventEmitter<{ url: string; text: string }>();\n\n public URLRegex = LINK_URL_REGEX;\n\n validatorConfig = {\n validationMessages: {\n url: {\n pattern: '链接格式不正确'\n }\n }\n };\n\n constructor(public thyPopoverRef: ThyPopoverRef<SafeAny>) {}\n\n ngOnInit() {}\n\n close() {\n this.thyPopoverRef.close();\n }\n\n apply(form: ThyFormDirective) {\n if (this.text && !this.url) {\n form.validator.setElementErrorMessage('url', '链接不能为空');\n return;\n }\n\n this.close();\n const text = this.text.trim();\n const url = this.url.trim();\n const link = url ? { text: text || url, url: url } : undefined;\n this.confirm.emit(link);\n }\n}\n","<form\n thyLayout=\"vertical\"\n thyStopPropagation\n thyForm\n #linkForm=\"thyForm\"\n [thyFormValidatorConfig]=\"validatorConfig\"\n name=\"linkForm\"\n class=\"p-5\"\n>\n <thy-form-group thyLabelText=\"文本\">\n <input thyInput placeholder=\"输入文本\" name=\"text\" [(ngModel)]=\"text\" thyAutofocus type=\"text\" />\n </thy-form-group>\n <thy-form-group thyLabelText=\"链接\">\n <input name=\"url\" thyInput placeholder=\"输入链接\" [pattern]=\"URLRegex\" type=\"text\" [(ngModel)]=\"url\" />\n </thy-form-group>\n <thy-form-group-footer thyAlign=\"right\">\n <div class=\"btn-pair\">\n <button thyStopPropagation thyButton=\"link-secondary\" thySize=\"sm\" (click)=\"close()\">取消</button>\n <button thyStopPropagation thyButton=\"primary\" thySize=\"sm\" (thyFormSubmit)=\"apply(linkForm)\">应用</button>\n </div>\n </thy-form-group-footer>\n</form>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, ElementRef, inject, OnInit, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyAutofocusDirective, ThyEnterDirective } from 'ngx-tethys/shared';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\nimport { ThyInputGroup, ThyInputModule } from 'ngx-tethys/input';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { ThyAction } from 'ngx-tethys/action';\nimport { ThyFlexibleTextModule } from 'ngx-tethys/flexible-text';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { LINK_URL_REGEX, LinkEditComponent } from './edit-link/edit-link.component';\nimport * as _ from 'lodash';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\n\n@Component({\n selector: 'link-cell-editor',\n templateUrl: `./link-editor.component.html`,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n ThyAutofocusDirective,\n ThyEnterDirective,\n ThyInputGroup,\n ThyTooltipModule,\n ThyAction,\n ThyInputModule,\n ThyFlexibleTextModule,\n LinkEditComponent\n ],\n host: {\n class: 'ai-table-link-editor'\n }\n})\nexport class LinkCellEditorComponent extends AbstractEditCellEditor<{ text: string; url: string }> implements OnInit {\n @ViewChild('inputElement', { static: false })\n inputElement!: ElementRef;\n\n text = '';\n\n url = '';\n\n originValue = {};\n\n thyPopover = inject(ThyPopover);\n\n cdr = inject(ChangeDetectorRef);\n\n notifyService = inject(ThyNotifyService);\n\n isOpened = false;\n\n isValidLink(link: { text: string; url: string }) {\n if (!link?.text?.trim()) {\n return true;\n }\n if (!link.url) {\n return LINK_URL_REGEX.test(link.text);\n }\n return true;\n }\n\n createLinkValue(link: { text: string; url: string }) {\n const text = link?.text?.trim();\n if (!text) {\n return { url: '', text: '' };\n } else {\n const url = link.url?.trim();\n return { url: url || text, text: text || url };\n }\n }\n\n public blur(event: FocusEvent) {\n const action = this.elementRef.nativeElement.querySelector('.edit-icon');\n if (!(event.relatedTarget as HTMLElement)?.contains(action)) {\n this.updateValue();\n }\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.originValue = this.modelValue;\n this.text = this.modelValue.text ?? '';\n this.url = this.modelValue.url ?? '';\n }\n\n updateValue() {\n if (!this.isValidLink({ text: this.text, url: this.url ?? '' })) {\n this.notifyService.error(undefined, '链接格式不正确');\n return;\n }\n this.modelValue = this.createLinkValue({ text: this.text, url: this.url ?? '' });\n if (!_.isEqual(this.originValue, this.modelValue)) {\n super.update()\n this.originValue = this.modelValue;\n }\n }\n\n openEdit() {\n this.isOpened = true;\n const popoverRef = this.thyPopover.open(LinkEditComponent, {\n origin: this.elementRef.nativeElement,\n originActiveClass: 'editing',\n placement: 'bottomLeft',\n minWidth: '320px',\n width: this.elementRef.nativeElement.clientWidth + 'px',\n initialState: {\n url: this.url ?? '',\n text: this.text ?? ''\n }\n });\n\n if (popoverRef) {\n popoverRef.componentInstance.confirm.subscribe((value: { url: string; text: string }) => {\n this.text = value.text;\n this.url = value.url;\n this.updateValue();\n });\n\n popoverRef.beforeClosed().subscribe(() => {\n this.isOpened = false;\n this.cdr.markForCheck();\n });\n }\n }\n}\n","<thy-input-group class=\"link-input-group h-100\" thySize=\"lg\">\n <input\n #inputElement\n class=\"h-100\"\n class=\"link-input\"\n thyInput\n thySize=\"md\"\n [thyAutofocus]=\"true\"\n [(ngModel)]=\"text\"\n (blur)=\"blur($event)\"\n (thyEnter)=\"updateValue()\"\n />\n <ng-template #suffix>\n <a\n thyAction\n thyIcon=\"link-insert\"\n thyTooltip=\"链接\"\n class=\"font-size-base edit-icon\"\n [class.active]=\"isOpened\"\n href=\"javascript:;\"\n (click)=\"openEdit()\"\n ></a>\n </ng-template>\n</thy-input-group>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyInputNumber } from 'ngx-tethys/input-number';\nimport { ThyAutofocusDirective, ThyEnterDirective } from 'ngx-tethys/shared';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\n\n@Component({\n selector: 'number-cell-editor',\n template: `<thy-input-number\n class=\"h-100\"\n [thyAutoFocus]=\"true\"\n [(ngModel)]=\"modelValue\"\n (thyEnter)=\"updateValue()\"\n (thyBlur)=\"updateValue()\"\n /> `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, ThyAutofocusDirective, ThyEnterDirective, ThyInputNumber],\n host: {\n class: 'number-cell-editor'\n }\n})\nexport class NumberCellEditorComponent extends AbstractEditCellEditor<number> {\n updateValue() {\n super.update();\n this.closePopover();\n }\n}\n","import { ChangeDetectionStrategy, Component, HostListener } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThySlider, ThySliderSize, ThySliderType } from 'ngx-tethys/slider';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\n\nexport interface AITableProgressConfig {\n max?: number;\n min?: number;\n step?: number;\n progressType?: ThySliderType;\n suffix?: string;\n size?: ThySliderSize;\n}\n\n@Component({\n selector: 'progress-editor',\n template: `\n <thy-slider\n [(ngModel)]=\"modelValue\"\n [thyMax]=\"config?.max || 100\"\n [thyMin]=\"config?.min || 0\"\n [thyStep]=\"config?.step || 1\"\n [thyType]=\"config?.progressType || 'success'\"\n [thySize]=\"config?.size || 'md'\"\n (ngModelChange)=\"update()\"\n (mousedown)=\"sliderMousedownHandler($event)\"\n ></thy-slider>\n <span class=\"progress-text\">{{ modelValue }}{{ config?.suffix || '%' }}</span>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, ThySlider],\n host: {\n class: 'grid-cell progress-editor',\n '[attr.type]': 'field().type',\n '[attr.fieldId]': 'field()._id',\n '[attr.recordId]': 'record()._id'\n }\n})\nexport class ProgressEditorComponent extends AbstractEditCellEditor<number> {\n config: Partial<AITableProgressConfig | undefined> = {\n max: 100,\n min: 0,\n step: 1,\n progressType: 'success',\n suffix: '%',\n size: 'md'\n };\n\n @HostListener('mousedown', ['$event'])\n mousedownHandler(event: Event) {\n event.preventDefault();\n }\n\n sliderMousedownHandler(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyRate } from 'ngx-tethys/rate';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\n\n@Component({\n selector: 'rating-cell-editor',\n template: ` <thy-rate [(ngModel)]=\"modelValue\" (ngModelChange)=\"update()\"></thy-rate> `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, ThyRate],\n host: {\n class: 'd-flex align-items-center h-100 rating-cell-editor'\n }\n})\nexport class RatingCellEditorComponent extends AbstractEditCellEditor<number> {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AITableFieldSettings, AITableSelectOption, MemberSettings, SelectSettings } from '../core';\nimport { AITableReferences, AITableSelection } from '../types';\n\n@Pipe({\n name: 'selectOption',\n standalone: true\n})\nexport class SelectOptionPipe implements PipeTransform {\n transform(_id: string, options: AITableSelectOption[]) {\n return options?.length && options.find((item) => item._id === _id);\n }\n}\n\n@Pipe({\n name: 'selectOptions',\n standalone: true\n})\nexport class SelectOptionsPipe implements PipeTransform {\n transform(ids: string[], options: AITableSelectOption[] = []) {\n return (\n (ids?.length &&\n ids.map((id: string) => {\n return options.find((item) => item._id === id);\n })) ||\n []\n );\n }\n}\n\n@Pipe({\n name: 'isSelectRecord',\n standalone: true\n})\nexport class IsSelectRecordPipe implements PipeTransform {\n transform(recordId: string, selection: AITableSelection) {\n return selection.selectedRecords.has(recordId);\n }\n}\n\n@Pipe({\n name: 'user',\n standalone: true\n})\nexport class UserPipe implements PipeTransform {\n transform(values: string[], references: AITableReferences) {\n return (\n (values.length &&\n values.map((item) => {\n return references.members[item] || {};\n })) ||\n []\n );\n }\n}\n\n@Pipe({\n name: 'selectSetting',\n standalone: true\n})\nexport class SelectSettingPipe implements PipeTransform {\n transform(settings: AITableFieldSettings) {\n return settings as SelectSettings;\n }\n}\n\n@Pipe({\n name: 'memberSetting',\n standalone: true\n})\nexport class MemberSettingPipe implements PipeTransform {\n transform(settings: AITableFieldSettings) {\n return settings as MemberSettings;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { ThyDot } from 'ngx-tethys/dot';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyTag } from 'ngx-tethys/tag';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { AITableField, AITableSelectOption, AITableSelectOptionStyle } from '../../../core';\nimport { AITableSelectField } from '../../../types';\n@Component({\n selector: 'select-option',\n templateUrl: './option.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'select-option thy-text',\n '[class.select-option-tag]': 'optionStyle === AITableSelectOptionStyle.tag'\n },\n imports: [ThyTag, ThyIcon, ThyTooltipModule, ThyDot, ThyFlexibleText]\n})\nexport class SelectOptionComponent {\n field = input.required<AITableField>();\n\n displayOption = input.required<AITableSelectOption>();\n\n optionStyle = computed(() => {\n return (this.field() as AITableSelectField).settings.option_style || AITableSelectOptionStyle.text;\n });\n\n AITableSelectOptionStyle = AITableSelectOptionStyle;\n}\n","@if (displayOption(); as displayOption) {\n @switch (optionStyle()) {\n @case (AITableSelectOptionStyle.dot) {\n @if (displayOption.bg_color || displayOption.color; as color) {\n <thy-dot [thyColor]=\"color\" [thySize]=\"'md'\" class=\"mr-2\"></thy-dot>\n }\n <span thyFlexibleText [thyTooltipContent]=\"displayOption.text\">{{ displayOption.text }}</span>\n }\n @case (AITableSelectOptionStyle.tag) {\n @if (displayOption.bg_color || displayOption.color || 'default'; as color) {\n <thy-tag thyTheme=\"fill\" thyShape=\"pill\" [thyColor]=\"color\">\n @if (displayOption['icon']) {\n <thy-icon class=\"text-white\" [thyIconName]=\"displayOption['icon']\"></thy-icon>\n }\n <span thyFlexibleText [thyTooltipContent]=\"displayOption.text\">{{ displayOption.text }}</span>\n </thy-tag>\n }\n }\n @case (AITableSelectOptionStyle.piece) {\n @if (displayOption.bg_color || displayOption.color; as color) {\n <thy-dot thyShape=\"square\" [thyColor]=\"color\" [thySize]=\"'md'\" class=\"mr-2\"></thy-dot>\n }\n <span thyFlexibleText [thyTooltipContent]=\"displayOption.text\">{{ displayOption.text }}</span>\n }\n @default {\n @if (displayOption['icon']) {\n <thy-icon [thyIconName]=\"displayOption['icon']\" [style.color]=\"displayOption.color\"></thy-icon>\n }\n <span thyFlexibleText [thyTooltipContent]=\"displayOption.text\">{{ displayOption.text }}</span>\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyDot } from 'ngx-tethys/dot';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThySelect } from 'ngx-tethys/select';\nimport { ThyOption } from 'ngx-tethys/shared';\nimport { ThyTag } from 'ngx-tethys/tag';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { AITableQueries, AITableSelectOptionStyle } from '../../../core';\nimport { SelectOptionPipe } from '../../../pipes';\nimport { AITableSelectField } from '../../../types';\nimport { SelectOptionComponent } from '../../cell-views/select/option.component';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\n\n@Component({\n selector: 'select-cell-editor',\n templateUrl: './select-editor.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'd-block h-100 select-cell-editor'\n },\n imports: [\n FormsModule,\n NgTemplateOutlet,\n ThySelect,\n ThyOption,\n ThyTag,\n ThyIcon,\n ThyTooltipModule,\n ThyDot,\n ThyFlexibleText,\n SelectOptionPipe,\n SelectOptionComponent,\n ThyEmptyModule\n ]\n})\nexport class SelectCellEditorComponent extends AbstractEditCellEditor<string[] | string, AITableSelectField> {\n selectOptions = computed(() => {\n return this.field().settings.options;\n });\n\n preset = computed(() => {\n return this.field().settings.is_multiple && this.field().settings.option_style === AITableSelectOptionStyle.tag ? 'tag' : '';\n });\n\n get isMultiple() {\n return !!this.field().settings.is_multiple;\n }\n\n constructor() {\n super();\n }\n\n override ngOnInit(): void {\n this.modelValue = computed(() => {\n const value = AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id]);\n if (!this.isMultiple) {\n return value[0];\n }\n return value || [];\n })();\n }\n\n updateValue(value: boolean) {\n if (!value) {\n const value = this.isMultiple ? this.modelValue : (this.modelValue && ([this.modelValue] as string[])) || [];\n this.updateFieldValue.emit({\n value: value,\n path: [this.record()._id, this.field()._id]\n });\n this.closePopover();\n }\n }\n}\n","<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"true\"\n [thyAllowClear]=\"true\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (thyOnExpandStatusChange)=\"updateValue($event)\"\n>\n <ng-template #selectedDisplay let-option>\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </ng-template>\n @for (option of selectOptions(); track option._id) {\n <thy-option [thyValue]=\"option._id\" [thyRawValue]=\"option\" [thyShowOptionCustom]=\"true\" [thyLabelText]=\"option.text\">\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </thy-option>\n }\n</thy-select>\n","import { AfterViewInit, ChangeDetectionStrategy, Component, inject, Renderer2 } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyInputDirective } from 'ngx-tethys/input';\nimport { ThyAutofocusDirective, ThyEnterDirective } from 'ngx-tethys/shared';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\n\n@Component({\n selector: 'text-cell-editor',\n template: `\n <textarea\n placeholder=\"\"\n rows=\"1\"\n thyInput\n [thyAutofocus]=\"true\"\n [(ngModel)]=\"modelValue\"\n (ngModelChange)=\"valueChange()\"\n (thyEnter)=\"updateValue()\"\n (blur)=\"updateValue()\"\n ></textarea>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FormsModule, ThyAutofocusDirective, ThyInputDirective, ThyEnterDirective],\n host: {\n class: 'text-cell-editor'\n }\n})\nexport class TextCellEditorComponent extends AbstractEditCellEditor<string> implements AfterViewInit {\n private render2 = inject(Renderer2);\n\n private maxHeight = 148;\n\n constructor() {\n super();\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.updateStyle();\n });\n }\n\n updateStyle() {\n const textarea = this.elementRef.nativeElement.querySelector('textarea');\n if (textarea) {\n const height = textarea.scrollHeight < this.maxHeight ? textarea.scrollHeight : this.maxHeight;\n this.render2.setStyle(textarea, 'max-height', `${this.maxHeight}px`);\n this.render2.setStyle(textarea, 'height', `${height}px`);\n this.render2.setStyle(textarea, 'resize', 'none');\n }\n }\n\n valueChange() {\n this.updateStyle();\n }\n\n updateValue() {\n super.update();\n this.closePopover();\n }\n}\n","import { NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, TemplateRef, booleanAttribute, computed, inject, model, output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButton } from 'ngx-tethys/button';\nimport {\n ThyDropdownDirective,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemNameDirective\n} from 'ngx-tethys/dropdown';\nimport { ThyConfirmValidatorDirective, ThyFormModule, ThyFormValidatorConfig, ThyUniqueCheckValidator } from 'ngx-tethys/form';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyInput, ThyInputCount, ThyInputDirective, ThyInputGroup } from 'ngx-tethys/input';\nimport { ThyListItem } from 'ngx-tethys/list';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { ThyAutofocusDirective } from 'ngx-tethys/shared';\nimport { of } from 'rxjs';\nimport {\n AITable,\n AITableField,\n AITableFieldOption,\n FieldOptions,\n createDefaultFieldName,\n getFieldOptionByField,\n SetFieldOptions\n} from '../../core';\n\n@Component({\n selector: 'ai-table-field-property-editor',\n templateUrl: './field-property-editor.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgIf,\n NgForOf,\n FormsModule,\n ThyIcon,\n ThyInput,\n ThyInputGroup,\n ThyInputCount,\n ThyInputDirective,\n ThyConfirmValidatorDirective,\n ThyUniqueCheckValidator,\n ThyDropdownDirective,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemNameDirective,\n ThyDropdownMenuItemIconDirective,\n ThyButton,\n ThyFormModule,\n ThyListItem,\n NgTemplateOutlet,\n ThyAutofocusDirective\n ],\n host: {\n class: 'field-property-editor d-block pl-5 pr-5 pb-5 pt-4'\n },\n styles: [\n `\n :host {\n width: 350px;\n }\n `\n ]\n})\nexport class AITableFieldPropertyEditor {\n aiEditField = model.required<AITableField>();\n\n @Input({ required: true }) aiTable!: AITable;\n\n @Input() aiExternalTemplate: TemplateRef<any> | null = null;\n\n @Input({ transform: booleanAttribute }) isUpdate!: boolean;\n\n addField = output<AITableField>();\n\n setField = output<SetFieldOptions>();\n\n selectedFieldOption = computed(() => {\n return getFieldOptionByField(this.aiEditField())!;\n });\n\n fieldMaxLength = 32;\n\n validatorConfig: ThyFormValidatorConfig = {\n validationMessages: {\n fieldName: {\n required: '列名不能为空',\n thyUniqueCheck: '列名已存在'\n }\n }\n };\n\n fieldOptions = FieldOptions;\n\n protected thyPopoverRef = inject(ThyPopoverRef<AITableFieldPropertyEditor>);\n\n checkUniqueName = (fieldName: string) => {\n fieldName = fieldName?.trim();\n return of(!!this.aiTable.fields()?.find((field) => field.name === fieldName && this.aiEditField()?._id !== field._id));\n };\n\n selectFieldType(field: AITableFieldOption) {\n this.aiEditField.update((item) => {\n const width = item.width ?? field.width;\n const settings = field.settings || {};\n const name = createDefaultFieldName(this.aiTable, field);\n return { ...item, ...field, width, name, ...settings };\n });\n }\n\n editFieldProperty() {\n if (this.isUpdate) {\n this.setField.emit({\n field: this.aiEditField(),\n path: [this.aiEditField()._id]\n });\n } else {\n this.addField.emit(this.aiEditField());\n }\n this.thyPopoverRef.close();\n }\n\n cancel() {\n this.thyPopoverRef.close();\n }\n}\n","<form thyForm name=\"createPropertyForm\" [thyFormValidatorConfig]=\"validatorConfig\" thyLayout=\"vertical\">\n <thy-form-group thyLabelRequired thyLabelText=\"表格列名\">\n <thy-input-group>\n <input\n thyInput\n [thyAutofocus]=\"true\"\n name=\"fieldName\"\n [maxlength]=\"fieldMaxLength\"\n [(ngModel)]=\"aiEditField().name\"\n required\n placeholder=\"输入列名称\"\n [thyUniqueCheck]=\"checkUniqueName\"\n />\n <ng-template #suffix>\n <thy-input-count></thy-input-count>\n </ng-template>\n </thy-input-group>\n </thy-form-group>\n <thy-form-group thyLabelText=\"列类型\">\n <div class=\"ml-n5 mr-n5\">\n <thy-list-item [thyDropdown]=\"menu\" thyTrigger=\"hover\" thyPlacement=\"right\" class=\"justify-content-between\">\n <span>\n <thy-icon [thyIconName]=\"selectedFieldOption().icon\" class=\"text-desc mr-2\"></thy-icon>\n <span>{{ selectedFieldOption().name }}</span>\n </span>\n <thy-icon thyIconName=\"angle-right\" class=\"text-desc\"></thy-icon>\n </thy-list-item>\n </div>\n </thy-form-group>\n <ng-container *ngIf=\"aiExternalTemplate; else defaultTemplate\">\n <ng-container *ngTemplateOutlet=\"aiExternalTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultTemplate>\n <!-- TODO: 内部属性渲染 -->\n </ng-template>\n <thy-form-group-footer thyAlign=\"right\">\n <button thyButton=\"link-secondary\" (click)=\"cancel()\" thySize=\"sm\">取消</button>\n <button thyButton=\"primary\" (thyFormSubmit)=\"editFieldProperty()\" thySize=\"sm\">确定</button>\n </thy-form-group-footer>\n</form>\n\n<thy-dropdown-menu #menu>\n @for (item of fieldOptions; track $index) {\n <a thyDropdownMenuItem href=\"javascript:;\" (click)=\"selectFieldType(item)\">\n <thy-icon [thyIconName]=\"item.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n </a>\n }\n</thy-dropdown-menu>\n","import {\n DateCellEditorComponent,\n LinkCellEditorComponent,\n NumberCellEditorComponent,\n ProgressEditorComponent,\n RatingCellEditorComponent,\n SelectCellEditorComponent,\n TextCellEditorComponent\n} from '../components';\nimport { AITableFieldType } from '../core';\n\nexport const GRID_CELL_EDITOR_MAP: Partial<Record<AITableFieldType, any>> = {\n [AITableFieldType.text]: TextCellEditorComponent,\n [AITableFieldType.richText]: TextCellEditorComponent,\n [AITableFieldType.select]: SelectCellEditorComponent,\n [AITableFieldType.number]: NumberCellEditorComponent,\n [AITableFieldType.date]: DateCellEditorComponent,\n [AITableFieldType.rate]: RatingCellEditorComponent,\n [AITableFieldType.link]: LinkCellEditorComponent,\n [AITableFieldType.progress]: ProgressEditorComponent\n};\n","export const AI_TABLE_ACTION_COMMON_SIZE = 32; // 表格图标action背景的通用尺寸\nexport const AI_TABLE_DEFAULT_COLUMN_WIDTH = 200; // 默认列宽\nexport const AI_TABLE_SCROLL_BAR_PADDING = 3; // 单元格滑动容器的滚动条宽度\nexport const AI_TABLE_OFFSET = 0.5; // 边框线偏移值\nexport const AI_TABLE_TEXT_GAP = 8; // 文本间距\n\nexport const AI_TABLE_ROW_HEAD = 'AI_TABLE_ROW_HEAD'; // 行头\nexport const AI_TABLE_ROW_HEAD_WIDTH = 44; // 表格行头 checkbox 列的宽度\nexport const AI_TABLE_ROW_HEAD_SIZE = 16; // 添加行按钮的尺寸\nexport const AI_TABLE_ROW_ADD_BUTTON = 'AI_TABLE_ROW_ADD_BUTTON'; // 添加行名称\nexport const AI_TABLE_BLANK = 'AI_TABLE_BLANK'; // 空白区域\n\nexport const AI_TABLE_FIELD_HEAD = 'AI_TABLE_FIELD_HEAD'; // 属性列头标识\nexport const AI_TABLE_FIELD_HEAD_HEIGHT = 44; // 表格字段列头的高度\nexport const AI_TABLE_ROW_BLANK_HEIGHT = 43; // 减去边框后真实的行高\nexport const AI_TABLE_ROW_HEIGHT = 44; // 默认行高基准\nexport const AI_TABLE_CELL_ACTIVE_BORDER_WIDTH = 2; // 选中单元格的边框宽度\nexport const AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH = 30; // 字段列头文本的最小宽度\nexport const AI_TABLE_ROW_SELECT_CHECKBOX = 'AI_TABLE_ROW_SELECT_CHECKBOX'; // 行 checkbox\nexport const AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX = 'AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX'; // 表头 checkbox 标识\nexport const AI_TABLE_FIELD_ADD_BUTTON = 'AI_TABLE_FIELD_ADD_BUTTON'; // 添加列名称\nexport const AI_TABLE_FIELD_ADD_BUTTON_WIDTH = 100; // 添加列宽度\nexport const AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE = 8; // 字段表列头图标的间距\nexport const AI_TABLE_FIELD_HEAD_MORE = 'AI_TABLE_FIELD_HEAD_MORE'; // 更多图标名称\n\nexport const AI_TABLE_ICON_COMMON_SIZE = 16; // 表格图标的通用尺寸\nexport const AI_TABLE_CELL = 'AI_TABLE_CELL'; // 单元格标识\n// 因为 dom 的边距 12 是不包含 边框的,所以加上边框 2px 才能跟 编辑里面的内容对其;\nexport const AI_TABLE_CELL_PADDING = 14; // 单元格内容的内边距\nexport const AI_TABLE_CELL_BORDER = 2; // 单元格边框宽度\nexport const AI_TABLE_CELL_MULTI_PADDING_TOP = 10;\nexport const AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP = 4;\nexport const AI_TABLE_CELL_MULTI_PADDING_LEFT = 4;\n// 最少显示文字宽度,一个文字+ 三个点\nexport const AI_TABLE_MIN_TEXT_WIDTH = 24;\nexport const AI_TABLE_CELL_MULTI_DOT_RADIUS = 4;\nexport const AI_TABLE_CELL_MULTI_ITEM_MARGIN_LEFT = 8;\nexport const AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE = 8; // 选项删除按钮的宽度\nexport const AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET = 12; // 选项字段删除按钮大小的偏移量\nexport const AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH = 36; // 选项字段项的最小宽度\nexport const AI_TABLE_CELL_MAX_ROW_COUNT = 1; // 默认单元格展示的最大行数\nexport const AI_TABLE_CELL_EMOJI_SIZE = 18;\nexport const AI_TABLE_CELL_EMOJI_PADDING = 8;\nexport const AI_TABLE_CELL_MEMBER_MAX_HEIGHT = 130; // 成员字段项最大高度\nexport const AI_TABLE_CELL_MEMBER_ITEM_HEIGHT = 24; // 成员字段项高度\nexport const AI_TABLE_CELL_MEMBER_ITEM_PADDING = 4; // 多个成员头像间距\nexport const AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE = 22; // 成员/选项/链接字段的新按钮大小\n\nexport const AI_TABLE_MEMBER_AVATAR_SIZE = 24; // 成员头像大小\nexport const AI_TABLE_MEMBER_ITEM_PADDING_RIGHT = 8; // 成员字段项右边距\nexport const AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT = 8; // 成员头像与成员名之间的间距\n\nexport const AI_TABLE_OPTION_ITEM_PADDING = 10; // 选项按钮间距\nexport const AI_TABLE_OPTION_ITEM_HEIGHT = 24;\nexport const AI_TABLE_OPTION_ITEM_FONT_SIZE = 14;\nexport const AI_TABLE_OPTION_ITEM_RADIUS = 18;\nexport const AI_TABLE_TAG_PADDING = 12;\nexport const AI_TABLE_TAG_FONT_SIZE = 12;\n\nexport const AI_TABLE_PIECE_WIDTH = 10;\nexport const AI_TABLE_PIECE_RADIUS = 2;\nexport const AI_TABLE_COMMON_FONT_SIZE = 14;\nexport const AI_TABLE_DOT_RADIUS = 5;\n\nexport const AI_TABLE_PROGRESS_BAR_HEIGHT = 10;\nexport const AI_TABLE_PROGRESS_BAR_RADIUS = 5;\nexport const AI_TABLE_PROGRESS_TEXT_Width = 46;\nexport const AI_TABLE_POPOVER_LEFT_OFFSET = 4;\n","import { AITableFieldType } from '../core';\nimport { AITableAreaType } from '../types';\nimport { AI_TABLE_BLANK } from './table';\n\nexport const MIN_COLUMN_WIDTH = 80;\n\nexport const DBL_CLICK_EDIT_TYPE = [\n AITableFieldType.text,\n AITableFieldType.number,\n AITableFieldType.select,\n AITableFieldType.date,\n AITableFieldType.member,\n AITableFieldType.link\n];\n\nexport const MOUSEOVER_EDIT_TYPE = [AITableFieldType.progress, AITableFieldType.rate];\n\nexport const RowHeight = {\n Short: 32,\n Medium: 57,\n Tall: 104,\n ExtraTall: 152\n};\n\nexport const DEFAULT_POINT_POSITION = {\n areaType: AITableAreaType.none,\n targetName: AI_TABLE_BLANK,\n realTargetName: AI_TABLE_BLANK,\n rowIndex: -1,\n columnIndex: -1,\n x: 0,\n y: 0,\n offsetTop: 0,\n offsetLeft: 0\n};\n\nexport const DEFAULT_SCROLL_STATE = {\n scrollTop: 0,\n scrollLeft: 0,\n isScrolling: false\n};\n","export const DEFAULT_ICON_SHAPE = 'square';\nexport const DEFAULT_ICON_SIZE = 16;\n\nexport const Check = `\n M15,1H3C1.9,1,1,1.9,1,3v12c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V3C17,1.9,16.1,1,15,1z M14,6.6l-5.7,5.7\n c-0.2,0.2-0.4,0.3-0.6,0.3s-0.4-0.1-0.6-0.3L4.6,9.8c-0.3-0.3-0.3-0.9,0-1.2s0.9-0.3,1.2,0l1.9,1.9l5.1-5.1\n c0.3-0.3,0.9-0.3,1.2,0C14.3,5.7,14.3,6.3,14,6.6z\n `;\n\nexport const Unchecked = `\n M15,1H3C1.9,1,1,1.9,1,3v12c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V3C17,1.9,16.1,1,15,1z\n M15.7,3.3v11.4c0,0.5-0.5,1-1,1H3.3c-0.5,0-1-0.5-1-1V3.3c0-0.5,0.5-1,1-1h11.4C15.2,2.3,15.7,2.8,15.7,3.3z\n `;\n\nexport const ColumnTextFilledPath = `M7.268 8.674l-2.076-4.86-2.076 4.86h4.152zm0.513 1.2H2.603l-1.294 3.03L0 12.902L4.49 2.4H5.894l4.484 10.486-1.31 0.002-1.287-3.014zm2.86 1.111c0-1.423 1.246-2.193 4.21-2.49 0-0.89-0.235-1.72-1.362-1.72-0.772 0-1.484 0.356-2.017 0.711l-0.475-0.771c0.653-0.415 1.602-0.889 2.669-0.889 1.602 0 2.313 1.127 2.313 2.787v4.151h-0.948l-0.12-0.83h-0.06c-0.651 0.534-1.422 0.949-2.252 0.949-1.127 0-1.957-0.652-1.957-1.898zm4.113-1.778c-2.253 0.296-3.024 0.83-3.024 1.72 0 0.77 0.534 1.067 1.186 1.067 0.652 0 1.186-0.297 1.838-0.89V9.207z`;\n\nexport const ColumnSelectFilledPath = `M8 16A8 8 0 1 1 8 0a8 8 0 0 1 0 16zm0-1.2A6.8 6.8 0 1 0 8 1.2a6.8 6.8 0 0 0 0 13.6zM5.666 7.207l1.8 1.845 3.482-3.554.857.84-4.34 4.43-2.658-2.723.86-.838z`;\n\nexport const ColumnMultipleFillPath = `M2 2.551L3.576.976l.848.848L2 4.25.576 2.824l.848-.848L2 2.55zm0 5.425L3.576 6.4l.848.849L2 9.673.576 8.249l.848-.849.576.576zm0 5.4L3.576 11.8l.848.849L2 15.073.576 13.649l.848-.849.576.576zM5.663 2.6a.6.6 0 1 1 0-1.2H15.4a.6.6 0 0 1 0 1.2H5.663zm0 11.8a.6.6 0 0 1 0-1.2H15.4a.6.6 0 0 1 0 1.2H5.663zm0-6.2a.6.6 0 1 1 0-1.2H15.4a.6.6 0 0 1 0 1.2H5.663z`;\n\nexport const ColumnCalendarFilledPath = `M10.9 3.2H5.1v1.6H3.9V3.2H1.2v3.2h13.6V3.2h-2.7v1.6h-1.2V3.2zM12.1 2H15a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h2.9V.4h1.2V2h5.8V.4h1.2V2zm2.7 5.6H1.2v7.2h13.6V7.6z`;\n\nexport const ColumnNumberFilledPath = `M4.236 9.9l.422-3.8H2.6a.6.6 0 1 1 0-1.2h2.19l.372-3.347a.6.6 0 1 1 1.192.133L5.998 4.9h4.793l.37-3.347a.6.6 0 0 1 1.193.133L11.998 4.9h2.459a.6.6 0 0 1 0 1.2h-2.592l-.421 3.8h2.013a.6.6 0 0 1 0 1.2H11.31l-.374 3.368a.6.6 0 0 1-1.192-.132l.358-3.236H5.311l-.374 3.368a.6.6 0 0 1-1.192-.132l.358-3.236H1.6a.6.6 0 0 1 0-1.2h2.636zm1.208 0h4.792l.422-3.8H5.865l-.421 3.8z`;\n\nexport const ColumnLinkOutlinedPath = `M10.4238543,5.91643446 C11.7563563,7.48802206 11.6811634,9.84553933 10.1982756,11.3284271 L7.22842712,14.2982756 C5.66632996,15.8603728 3.13367004,15.8603728 1.57157288,14.2982756 C0.00947570825,12.7361784 0.00947570825,10.2035185 1.57157288,8.64142136 L2.387,7.82495116 L3.236,8.67395116 L2.42010101,9.48994949 C1.37219416,10.5378563 1.32853138,12.2097205 2.28911266,13.3096237 L2.42010101,13.4497475 C3.51356903,14.5432155 5.28643097,14.5432155 6.37989899,13.4497475 L9.34974747,10.479899 C10.3636395,9.46600698 10.4374244,7.86800734 9.57110232,6.76909967 L10.4238543,5.91643446 Z M14.4436815,1.67157288 C16.0057786,3.23367004 16.0057786,5.76632996 14.4436815,7.32842712 L13.5744058,8.198 L12.7254058,7.349 L13.5951533,6.47989899 C14.6430602,5.43199214 14.6867229,3.76012802 13.7261417,2.66022473 L13.5951533,2.52010101 C12.5016853,1.426633 10.7288234,1.426633 9.63535534,2.52010101 L6.66550686,5.48994949 C5.62228095,6.5331754 5.57434734,8.19479666 6.52170603,9.29485 L5.67236452,10.1460046 C4.25646867,8.57570748 4.3046734,6.15372668 5.81697872,4.64142136 L8.7868272,1.67157288 C10.3489244,0.109475708 12.8815843,0.109475708 14.4436815,1.67157288 Z`;\n\nexport const ColumnRatingFilledPath = `M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0zm0 1.2a6.8 6.8 0 1 0 0 13.6A6.8 6.8 0 0 0 8 1.2zm.945 2.906l.077.106.064.112.03.069.564 1.46 1.646.1c.952.092 1.365 1.264.752 1.893l-.086.078-1.315 1.056.431 1.533c.295 1.031-.848 1.858-1.643 1.34l-.087-.063-1.315-.85-.006.001-1.309.842c-.85.567-1.903-.163-1.79-1.054l.019-.108.45-1.601-1.321-1.035c-.632-.633-.372-1.673.462-1.973l.123-.038.124-.026 1.571-.094.602-1.55c.364-.793 1.44-.836 1.957-.198zm-.91.815l-.809 2.085-2.253.134L6.8 8.571l-.602 2.139 1.44-.927.71-.087 1.569 1.016-.61-2.172 1.75-1.402-2.219-.134-.803-2.083z`;\n\nexport const ColumnMemberFilledPath = `M10.212 8.416A6.603 6.603 0 0 1 14.5 14.6a.6.6 0 0 1-1.2 0 5.4 5.4 0 0 0-10.8 0 .6.6 0 0 1-1.2 0 6.602 6.602 0 0 1 4.159-6.134 4.1 4.1 0 1 1 4.753-.05zM7.8 8a2.9 2.9 0 1 0 0-5.8 2.9 2.9 0 0 0 0 5.8z`;\n\nexport const ColumnProgressFilledPath = `M11.5 3.5a4.5 4.5 0 1 1 0 9h-7a4.5 4.5 0 1 1 0-9h7zm0 1.2h-7a3.3 3.3 0 0 0 0 6.6h7a3.3 3.3 0 1 0 0-6.6zM8 7.2v1.5H3.75a.75.75 0 0 1 0-1.5H8z`;\n\nexport const AddOutlinedPath = `M8.578 7.383V1.602a.601.601 0 1 0-1.2 0v5.781H1.6a.601.601 0 0 0 0 1.203h5.777v5.812a.601.601 0 1 0 1.2 0V8.586H14.4a.601.601 0 0 0 0-1.203H8.578z`;\n\nexport const MoreStandOutlinedPath = `M6.5 2.5C6.5 3.32843 7.17157 4 8 4C8.82843 4 9.5 3.32843 9.5 2.5C9.5 1.67157 8.82843 1 8 1C7.17157 1 6.5 1.67157 6.5 2.5ZM6.5 8C6.5 8.82843 7.17157 9.5 8 9.5C8.82843 9.5 9.5 8.82843 9.5 8C9.5 7.17157 8.82843 6.5 8 6.5C7.17157 6.5 6.5 7.17157 6.5 8ZM6.5 13.5C6.5 14.3284 7.17157 15 8 15C8.82843 15 9.5 14.3284 9.5 13.5C9.5 12.6716 8.82843 12 8 12C7.17157 12 6.5 12.6716 6.5 13.5Z`;\n\nexport const StarFill = `M9.186 2.12l1.02 2.769c.073.292.365.437.656.437l2.915.146c1.166.073 1.676 1.53.73 2.26l-2.26 1.821c-.219.146-.291.51-.219.729l.73 2.842c.29 1.093-.948 2.04-1.896 1.384l-2.477-1.603a.79.79 0 0 0-.802 0l-2.478 1.676c-.947.583-2.186-.291-1.894-1.457l.728-2.842c.073-.292 0-.583-.218-.729L1.46 7.731c-.874-.729-.437-2.186.73-2.259l2.914-.146c.292 0 .51-.218.656-.437l1.093-2.77c.365-1.092 1.895-1.092 2.332 0z`;\n\nexport const WebOutlinedPath = `M1 8C1 4.13401 4.13401 1 8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8ZM6.04798 2.85646C4.19852 3.55874 2.82616 5.22986 2.55071 7.25H5.26373C5.31861 5.76009 5.53564 4.40148 5.87147 3.352C5.92605 3.18143 5.98481 3.0157 6.04798 2.85646ZM5.87147 12.648C5.53564 11.5985 5.31861 10.2399 5.26373 8.75H2.55071C2.82616 10.7701 4.19852 12.4413 6.04798 13.1435C5.98481 12.9843 5.92605 12.8186 5.87147 12.648ZM10.1285 12.648C10.0739 12.8186 10.0152 12.9843 9.95202 13.1435C11.8015 12.4413 13.1738 10.7701 13.4493 8.75H10.7363C10.6814 10.2399 10.4644 11.5985 10.1285 12.648ZM8.6999 12.1908C8.98163 11.3104 9.18095 10.1118 9.23518 8.75H6.76482C6.81905 10.1118 7.01837 11.3104 7.3001 12.1908C7.46768 12.7145 7.65131 13.0839 7.81962 13.3063C7.90746 13.4224 7.9686 13.4711 8 13.4906C8.0314 13.4711 8.09254 13.4224 8.18038 13.3063C8.34869 13.0839 8.53232 12.7145 8.6999 12.1908ZM7.3001 3.80916C7.01837 4.68959 6.81905 5.88818 6.76482 7.25H9.23518C9.18095 5.88818 8.98163 4.68959 8.6999 3.80916C8.53232 3.28548 8.34869 2.91612 8.18038 2.69367C8.09254 2.57756 8.0314 2.52893 8 2.50944C7.9686 2.52893 7.90746 2.57756 7.81962 2.69367C7.65131 2.91612 7.46768 3.28548 7.3001 3.80916ZM10.1285 3.352C10.4644 4.40148 10.6814 5.76009 10.7363 7.25H13.4493C13.1738 5.22986 11.8015 3.55874 9.95203 2.85646C10.0152 3.0157 10.0739 3.18143 10.1285 3.352Z`;\n\nexport const DepartmentOutlinedPath = `M3 5.5C3 3.567 4.567 2 6.5 2C8.433 2 10 3.567 10 5.5C10 6.49548 9.5844 7.3939 8.91724 8.0312C10.7204 8.86779 12.017 10.6115 12.2217 12.6767C12.2976 13.4424 11.6682 14 11 14H2C1.33185 14 0.702358 13.4424 0.778277 12.6767C0.983033 10.6115 2.27961 8.86779 4.08276 8.0312C3.4156 7.3939 3 6.49548 3 5.5ZM8.5 5.5C8.5 4.39543 7.60457 3.5 6.5 3.5C5.39543 3.5 4.5 4.39543 4.5 5.5C4.5 6.60457 5.39543 7.5 6.5 7.5C7.60457 7.5 8.5 6.60457 8.5 5.5ZM2.31585 12.5H10.6841C10.3303 10.5108 8.59114 9 6.5 9C4.40886 9 2.66975 10.5108 2.31585 12.5Z', 'M11 3C10.5858 3 10.25 3.33579 10.25 3.75C10.25 4.16421 10.5858 4.5 11 4.5C11.6904 4.5 12.25 5.05964 12.25 5.75C12.25 6.44036 11.6904 7 11 7C10.5858 7 10.25 7.33579 10.25 7.75C10.25 8.16421 10.5858 8.5 11 8.5C12.6569 8.5 14 9.84315 14 11.5C14 11.9142 14.3358 12.25 14.75 12.25C15.1642 12.25 15.5 11.9142 15.5 11.5C15.5 9.77473 14.5291 8.27622 13.1038 7.52106C13.507 7.0426 13.75 6.42467 13.75 5.75C13.75 4.23122 12.5188 3 11 3Z`;\n","import { Colors } from '../constants';\n\nexport const DEFAULT_FONT_SIZE = 14;\nexport const DEFAULT_FONT_FAMILY =\n '-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Helvetica Neue,Noto Sans,Noto Sans CJK SC,Microsoft Yahei,Arial,Hiragino Sans GB,sans-serif';\nexport const DEFAULT_FONT_STYLE = 'normal';\nexport const DEFAULT_TEXT_LINE_HEIGHT = 24;\nexport const DEFAULT_TEXT_FILL = Colors.gray800;\nexport const DEFAULT_FONT_WEIGHT = 'normal';\nexport const DEFAULT_TEXT_WRAP = 'none';\nexport const DEFAULT_TEXT_TRANSFORMS_ENABLED = 'position';\nexport const DEFAULT_TEXT_ELLIPSIS = true;\nexport const DEFAULT_TEXT_LISTENING = false;\nexport const DEFAULT_TEXT_ALIGN_LEFT = 'left';\nexport const DEFAULT_TEXT_ALIGN_CENTER = 'center';\nexport const DEFAULT_TEXT_ALIGN_RIGHT = 'right';\nexport const DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE = 'middle';\nexport const DEFAULT_TEXT_MAX_HEIGHT = 130;\nexport const DEFAULT_WRAP_TEXT_MAX_ROW = 1;\nexport const DEFAULT_TEXT_VERTICAL_ALIGN_TOP = 'top';\nexport const DEFAULT_TEXT_DECORATION = 'none';\nexport const DEFAULT_TEXT_SCALE = 1;\nexport const DEFAULT_TEXT_MAX_CACHE = 500;\nexport const FONT_SIZE_SM = 12;\n","import { ChangeDetectionStrategy, Component, ElementRef, Input, computed } from '@angular/core';\nimport { ThyDivider } from 'ngx-tethys/divider';\nimport {\n ThyDropdownAbstractMenu,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemNameDirective\n} from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { AITable } from '../../core';\nimport { AITableFieldMenuItem } from '../../types/field';\n\n@Component({\n selector: 'field-menu',\n templateUrl: './field-menu.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ThyIcon,\n ThyDivider,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemNameDirective,\n ThyDropdownMenuItemIconDirective\n ]\n})\nexport class FieldMenu extends ThyDropdownAbstractMenu {\n @Input({ required: true }) fieldId!: string;\n\n @Input({ required: true }) aiTable!: AITable;\n\n @Input({ required: true }) fieldMenus!: AITableFieldMenuItem[];\n\n @Input() origin!: HTMLElement | ElementRef<any>;\n\n @Input() position!: { x: number; y: number };\n\n field = computed(() => {\n return this.aiTable.fields().find((item) => item._id === this.fieldId)!;\n });\n\n execute(menu: AITableFieldMenuItem) {\n if ((menu.disabled && !menu.disabled(this.aiTable, this.field)) || !menu.disabled) {\n menu.exec && menu.exec(this.aiTable, this.field, this.origin, this.position);\n }\n }\n}\n","@for (menu of fieldMenus; track index; let index = $index) {\n @if ((menu.hidden && !menu.hidden(aiTable, field)) || !menu.hidden) {\n @if (menu.type === 'divider') {\n <thy-divider [thyStyle]=\"'solid'\"></thy-divider>\n } @else {\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"!!(menu.disabled && menu.disabled(aiTable, field))\"\n >\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name! }}</span>\n </a>\n }\n }\n}\n","import { AITableFields, AITableRecords, FieldOptions } from '../core';\nimport { AITableGridData, AITableLinearRow } from '../types';\nimport { AITableRowType } from '../types/row';\n\nexport const buildGridLinearRows = (visibleRecords: AITableRecords, isAddingVisible: boolean = true): AITableLinearRow[] => {\n const linearRows: AITableLinearRow[] = [];\n let displayRowIndex = 0;\n [...visibleRecords, { _id: '' }].forEach((row) => {\n if (row._id) {\n displayRowIndex++;\n linearRows.push({\n type: AITableRowType.record,\n _id: row._id,\n displayIndex: displayRowIndex\n });\n }\n if (isAddingVisible && !row._id) {\n linearRows.push({\n type: AITableRowType.add,\n _id: ''\n });\n }\n });\n return linearRows;\n};\n\nexport const buildGridData = (recordValue: AITableRecords, fieldsValue: AITableFields): AITableGridData => {\n const fields = fieldsValue.map((value) => {\n const fieldOption = FieldOptions.find((item) => item.type === value.type)!;\n return {\n ...value,\n icon: value.icon || fieldOption.icon,\n width: value.width || fieldOption.width\n };\n });\n return {\n type: 'grid',\n fields,\n records: recordValue\n };\n};\n","import { Injectable } from '@angular/core';\nimport { ThyPopover } from 'ngx-tethys/popover';\nimport { AITableFieldPropertyEditor } from '../components';\nimport { FieldMenu } from '../components/field-menu/field-menu.component';\nimport { AITable } from '../core';\nimport { AIFieldConfig, AITableEditFieldOptions, AITableFieldMenuOptions } from '../types';\n\nexport const AI_TABLE_GRID_FIELD_SERVICE_MAP = new WeakMap<AITable, AITableGridFieldService>();\n\n@Injectable()\nexport class AITableGridFieldService {\n aiFieldConfig: AIFieldConfig | undefined;\n\n constructor(private thyPopover: ThyPopover) {}\n\n initAIFieldConfig(aiFieldConfig: AIFieldConfig | undefined) {\n this.aiFieldConfig = aiFieldConfig;\n }\n\n editFieldProperty(aiTable: AITable, options: AITableEditFieldOptions) {\n const { field, isUpdate, origin, position } = options;\n const component = this.aiFieldConfig?.fieldPropertyEditor ?? AITableFieldPropertyEditor;\n return this.thyPopover.open(component, {\n origin,\n originPosition: position,\n placement: 'bottomLeft',\n manualClosure: true,\n originActiveClass: undefined,\n initialState: {\n aiTable,\n aiEditField: field,\n isUpdate\n }\n });\n }\n\n openFieldMenu(aiTable: AITable, options: AITableFieldMenuOptions) {\n const { origin, editOrigin, position, fieldId, fieldMenus } = options;\n const ref = this.thyPopover.open(FieldMenu, {\n origin,\n originPosition: position,\n placement: 'bottomLeft',\n originActiveClass: undefined,\n initialState: {\n origin: editOrigin,\n position: options.editFieldPosition,\n aiTable,\n fieldId,\n fieldMenus\n }\n });\n return ref;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AITable } from '../core';\n\n@Injectable()\nexport class AITableGridSelectionService {\n aiTable!: AITable;\n\n constructor() {}\n\n initialize(aiTable: AITable) {\n this.aiTable = aiTable;\n }\n\n clearSelection() {\n this.aiTable.selection.set({\n selectedRecords: new Map(),\n selectedFields: new Map(),\n selectedCells: new Map()\n });\n }\n\n selectCell(recordId: string, fieldId: string) {\n const fields = this.aiTable.selection().selectedCells.get(recordId);\n if (fields?.hasOwnProperty(fieldId)) {\n return;\n }\n this.clearSelection();\n this.aiTable.selection().selectedCells.set(recordId, { [fieldId]: true });\n }\n\n selectField(fieldId: string) {\n if (this.aiTable.selection().selectedFields.has(fieldId)) {\n return;\n }\n this.clearSelection();\n this.aiTable.selection().selectedFields.set(fieldId, true);\n }\n\n selectRecord(recordId: string) {\n if (this.aiTable.selection().selectedRecords.has(recordId)) {\n this.aiTable.selection().selectedRecords.delete(recordId);\n } else {\n this.aiTable.selection().selectedRecords.set(recordId, true);\n }\n this.aiTable.selection.set({\n selectedRecords: this.aiTable.selection().selectedRecords,\n selectedFields: new Map(),\n selectedCells: new Map()\n });\n }\n\n toggleSelectAll(checked: boolean) {\n this.clearSelection();\n if (checked) {\n this.aiTable.records().forEach((item) => {\n this.selectRecord(item._id);\n });\n }\n }\n\n updateSelect(event: MouseEvent) {\n const target = event?.target as HTMLElement;\n if (!target) {\n return;\n }\n const cellDom = target.closest('.grid-cell');\n const colDom = target.closest('.grid-field');\n const checkbox = target.tagName === 'INPUT' && (target as HTMLInputElement).type === 'checkbox' && target.closest('.grid-checkbox');\n const fieldAction = target.closest('.grid-field-action');\n if (cellDom) {\n const fieldId = cellDom.getAttribute('fieldId');\n const recordId = cellDom.getAttribute('recordId');\n fieldId && recordId && this.selectCell(recordId, fieldId);\n }\n if (colDom && !fieldAction) {\n const fieldId = colDom.getAttribute('fieldId');\n fieldId && this.selectField(fieldId);\n }\n if (!cellDom && !colDom && !checkbox) {\n this.clearSelection();\n }\n }\n}\n","import { AITable, AITableField, AITableFieldOption, FieldValue, getFieldOptionByField } from '../core';\nimport { AI_TABLE_GRID_FIELD_SERVICE_MAP } from '../services';\nimport { AITableSizeMap } from '../types';\n\nexport function getColumnIndicesMap(fields: AITableField[]) {\n const columnIndicesMap: AITableSizeMap = {};\n fields?.forEach((field, index) => {\n columnIndicesMap[index] = field.width ?? (getFieldOptionByField(field) as AITableFieldOption).width;\n });\n return columnIndicesMap;\n}\n\n/**\n * 获取单元格位置\n * 根据单元格是否是第一列/最后一列确定单元格所在的位置\n */\nexport function getCellHorizontalPosition(options: { columnWidth: number; columnIndex: number; columnCount: number }) {\n const { columnWidth } = options;\n return { width: columnWidth, offset: 0 };\n}\n\nexport function transformCellValue<T = any>(aiTable: AITable, field: AITableField, cellValue: FieldValue): T {\n const fieldService = AI_TABLE_GRID_FIELD_SERVICE_MAP.get(aiTable);\n\n if (!fieldService) {\n return cellValue;\n }\n\n const fieldRenderers = fieldService.aiFieldConfig?.fieldRenderers;\n if (!fieldRenderers) {\n return cellValue;\n }\n\n const cellTransform = fieldRenderers[field.type]?.transform;\n if (!cellTransform) {\n return cellValue;\n }\n\n const cellText = cellTransform(field, cellValue);\n\n if (cellText == null) {\n return cellValue;\n }\n\n return cellText;\n}\n\n/**\n * `\\u4e00`: https://www.compart.com/en/unicode/U+4E00\n * `\\u9fa5`: https://www.compart.com/en/unicode/U+9FA5\n */\nconst UNIFIED_IDEOGRAPHS_REGEX = /^[\\u4e00-\\u9fa5]+$/;\n\nconst SET_OF_LETTERS_REGEX = /^[a-zA-Z\\/ ]+$/;\n\nexport function getAvatarShortName(name: string | null | undefined): string {\n if (!name) {\n return '';\n }\n\n name = name.trim();\n\n if (UNIFIED_IDEOGRAPHS_REGEX.test(name) && name.length > 2) {\n return name.slice(name.length - 2);\n }\n\n if (SET_OF_LETTERS_REGEX.test(name) && name.indexOf(' ') > 0) {\n const words: string[] = name.split(' ');\n return (words[0].slice(0, 1) + words[1].slice(0, 1)).toUpperCase();\n }\n\n return name.length > 2 ? name.slice(0, 2).toUpperCase() : name.toUpperCase();\n}\n\nexport function getAvatarBgColor(name: string) {\n if (!name) {\n return;\n }\n const colors = ['#56abfb', '#5dcfff', '#84e17e', '#73d897', '#ff9f73', '#fa8888', '#fb7fb7', '#9a7ef4', '#868af6'];\n const nameArray: string[] = name.split('');\n const code: number =\n name && name.length > 0\n ? nameArray.reduce(\n function (result, item) {\n result.value += item.charCodeAt(0);\n return result;\n },\n { value: 0 }\n ).value\n : 0;\n return colors[code % 9];\n}\n","import { AI_TABLE_BLANK } from '../constants';\nimport { AITableTargetNameDetail, AITableTargetNameOptions } from '../types';\n\n/**\n * 生成目标名称\n */\nexport const generateTargetName = ({ targetName, fieldId, recordId, mouseStyle }: AITableTargetNameOptions) => {\n const flag = '$';\n return `${targetName}.${fieldId || flag}.${recordId || flag}.${mouseStyle || flag}`;\n};\n\n/**\n * 取目标名称\n */\nexport const getTargetName = (targetName?: string | null) => {\n if (targetName == null || targetName === '') return AI_TABLE_BLANK;\n return targetName.split('.')[0];\n};\n\n/**\n * Parse targetName for built-in information\n */\nexport const getDetailByTargetName = (_targetName: string | null): AITableTargetNameDetail => {\n if (_targetName == null) {\n return {\n targetName: null,\n fieldId: null,\n recordId: null,\n mouseStyle: null\n };\n }\n\n const flag = '$';\n const [targetName, fieldId, recordId, mouseStyle] = _targetName.split('.');\n return {\n targetName,\n fieldId: fieldId === flag ? null : fieldId,\n recordId: recordId === flag ? null : recordId,\n mouseStyle: mouseStyle === flag ? null : mouseStyle\n };\n};\n\n/**\n * 转换为字符串\n * @param value\n * @returns\n */\nexport const castToString = (value: string): string | null => {\n if (value == null) {\n return null;\n }\n return typeof value !== 'string' ? String(value) : value;\n};\n","import { AI_TABLE_CELL, AI_TABLE_OFFSET, Colors } from '../constants';\nimport { AITable } from '../core';\nimport { AITableCellsConfig, AITableRowType } from '../types';\nimport { getCellHorizontalPosition } from './cell';\nimport { generateTargetName } from './common';\n\nexport function getPlaceHolderCellsConfigs(options: AITableCellsConfig) {\n const { aiTable, coordinate, columnStartIndex, columnStopIndex, rowStartIndex, rowStopIndex } = options;\n const { linearRows } = aiTable.context!;\n const { rowHeight, columnCount, rowCount } = coordinate;\n const visibleColumns = AITable.getVisibleFields(aiTable);\n\n let configs = [];\n for (let columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n // 当前列索引超出总列数范围,返回空\n if (columnIndex > columnCount - 1) {\n return [];\n }\n const field = visibleColumns[columnIndex];\n const fieldId = field._id;\n\n // 当前列不存在,返回空\n if (field == null) {\n return [];\n }\n\n // 当前列的 X 轴偏移量和列宽度\n const x = coordinate.getColumnOffset(columnIndex) + AI_TABLE_OFFSET;\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n\n for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n // 当前行索引是否超出总行数范围,超出则退出循环\n if (rowIndex > rowCount - 1) {\n break;\n }\n\n const row = linearRows()[rowIndex];\n const { _id: recordId, type } = row;\n if (type !== AITableRowType.record) {\n continue;\n }\n\n // 当前行的 Y 轴偏移量,并根据列宽和列索引获取单元格的水平位置(宽度和偏移量)\n const y = coordinate.getRowOffset(rowIndex) + AI_TABLE_OFFSET;\n const { width, offset } = getCellHorizontalPosition({\n columnWidth,\n columnIndex,\n columnCount\n });\n\n const height = rowHeight;\n configs.unshift({\n key: `placeholder-cell-${fieldId}-${recordId}`,\n name: generateTargetName({\n targetName: AI_TABLE_CELL,\n fieldId,\n recordId\n }),\n x: x + offset,\n y,\n width,\n height,\n fill: Colors.transparent,\n strokeEnabled: false,\n hitStrokeWidth: 0,\n transformsEnabled: 'position',\n perfectDrawEnabled: false,\n shadowEnabled: false\n });\n }\n }\n return configs;\n}\n","import { LRUCache } from 'lru-cache';\nimport { DEFAULT_TEXT_MAX_CACHE } from '../constants';\nimport { AITableWrapTextResult } from '../types';\n\nconst fontCache: { [key: string]: LRUCache<string, number> } = {};\nexport const textDataCache = new LRUCache<string, AITableWrapTextResult>({\n max: DEFAULT_TEXT_MAX_CACHE\n});\n\n/**\n * 计算给定文本在指定字体和 Canvas 环境下的宽度。\n * 它通过缓存机制来优化性能,避免重复计算相同文本的宽度\n */\nexport const getTextWidth = (ctx: CanvasRenderingContext2D, text: string, font: string) => {\n let width: number | undefined = 0;\n if (!text || typeof text !== 'string') {\n return width;\n }\n let cacheOfFont = fontCache[font];\n if (!cacheOfFont) {\n cacheOfFont = fontCache[font] = new LRUCache({\n max: 500\n });\n }\n width = cacheOfFont.get(text);\n if (width == null) {\n ctx.font = font;\n width = ctx!.measureText(text).width;\n cacheOfFont.set(text, width);\n }\n\n return width;\n};\n","interface AITableImageOption {\n crossOrigin?: boolean;\n}\n\nexport const imageCache = (() => {\n const imageMap: {\n [name: string]: {\n img: HTMLImageElement;\n success: boolean;\n };\n } = {};\n const imgPromises: any = [];\n\n function loadImage(name: string, src: string, option?: AITableImageOption) {\n imgPromises.push(\n new Promise((resolve, reject) => {\n const img = new Image();\n\n img.src = src;\n img.referrerPolicy = 'no-referrer';\n\n if (!option?.crossOrigin) {\n img.crossOrigin = 'Anonymous';\n }\n\n imageMap[name] = {\n img,\n success: false\n };\n\n try {\n img.onload = () => {\n imageMap[name] = {\n img,\n success: true\n };\n resolve({\n name,\n img\n });\n };\n } catch (err) {\n imageMap[name] = {\n img,\n success: false\n };\n reject(err);\n }\n })\n );\n }\n\n function imageMapOnload(callback: any) {\n Promise.all(imgPromises).then(callback);\n }\n\n function getImage(name: string) {\n const imgInfo = imageMap[name];\n\n if (imgInfo == null) {\n return null;\n }\n\n const { img, success } = imgInfo;\n\n if (!success) return false;\n return img;\n }\n\n return {\n loadImage,\n getImage,\n imageMapOnload,\n imageMap\n };\n})();\n","export const isWindowsOS = () => {\n const agent = navigator.userAgent.toLowerCase();\n if (agent.indexOf('win32') >= 0 || agent.indexOf('wow32') >= 0) {\n return true;\n }\n if (agent.indexOf('win64') >= 0 || agent.indexOf('wow64') >= 0) {\n return true;\n }\n return false;\n};\n\nexport const isWindows = isWindowsOS();\n\n\nexport const isMac = () => {\n const agent = navigator.userAgent;\n return /macintosh/i.test(agent);\n};\n","import { AI_TABLE_ROW_HEAD_WIDTH } from '../constants';\nimport { AITableField, AITableFieldOption, Coordinate, getFieldOptionByField } from '../core';\nimport { AITableScrollState } from '../types';\n\nexport const getVisibleRangeInfo = (coordinate: Coordinate, scrollState: AITableScrollState) => {\n const { scrollTop, scrollLeft } = scrollState;\n const { rowCount, columnCount, frozenColumnCount } = coordinate;\n\n // 获取要渲染的垂直可见区域\n const getVerticalRangeInfo = () => {\n const startIndex = coordinate.getRowStartIndex(scrollTop);\n const stopIndex = coordinate.getRowStopIndex(startIndex, scrollTop);\n\n return {\n rowStartIndex: Math.max(0, startIndex - 1),\n rowStopIndex: Math.max(0, Math.min(rowCount - 1, stopIndex + 1))\n };\n };\n\n // 获取要渲染的水平可见区域\n const getHorizontalRangeInfo = () => {\n const startIndex = coordinate.getColumnStartIndex(scrollLeft);\n const stopIndex = coordinate.getColumnStopIndex(startIndex, scrollLeft);\n\n return {\n columnStartIndex: Math.max(frozenColumnCount - 1, startIndex),\n columnStopIndex: Math.max(frozenColumnCount - 1, Math.min(columnCount - 1, stopIndex))\n };\n };\n\n const { rowStartIndex, rowStopIndex } = getVerticalRangeInfo();\n const { columnStartIndex, columnStopIndex } = getHorizontalRangeInfo();\n return {\n rowStartIndex,\n rowStopIndex,\n columnStartIndex,\n columnStopIndex\n };\n};\n\nexport const scrollMax = (coordinate: Coordinate, visibleColumns: AITableField[]) => {\n const scrollMaxWidth = visibleColumns.reduce(\n (pre, cur) => pre + (getFieldOptionByField(cur) as AITableFieldOption)?.width,\n AI_TABLE_ROW_HEAD_WIDTH\n );\n const scrollMaxHeight = coordinate.getRowOffset(coordinate.rowCount - 1) + 32;\n return { scrollMaxWidth, scrollMaxHeight };\n};\n","import { AI_TABLE_BLANK, AI_TABLE_CELL_ACTIVE_BORDER_WIDTH, AI_TABLE_OFFSET, AI_TABLE_ROW_HEAD_WIDTH } from '../constants';\nimport { AITableField, Coordinate, RendererContext } from '../core';\nimport { AITableAreaType } from '../types';\nimport { getTargetName } from './common';\nimport { scrollMax } from './visible-range';\n\nexport const getMousePosition = (\n x: number,\n y: number,\n coordinate: Coordinate,\n fields: AITableField[],\n context: RendererContext,\n _targetName?: string\n) => {\n const { scrollTop, scrollLeft } = context.scrollState();\n const { scrollMaxWidth, scrollMaxHeight } = scrollMax(coordinate, fields);\n const offsetTop = scrollTop + y;\n const rowIndex = coordinate.getRowStartIndex(offsetTop);\n const offsetLeft = isWithinFrozenColumnBoundary(x, coordinate.frozenColumnWidth) ? x : scrollLeft + x;\n const columnIndex = coordinate.getColumnStartIndex(offsetLeft);\n const areaType = offsetLeft <= scrollMaxWidth && offsetTop <= scrollMaxHeight ? AITableAreaType.grid : AITableAreaType.none;\n const targetName = getTargetName(_targetName);\n return {\n areaType,\n targetName, // As a simple operational identifier, with prefix name only\n realTargetName: _targetName || AI_TABLE_BLANK, // Real name\n rowIndex,\n columnIndex,\n offsetTop,\n offsetLeft,\n x,\n y\n };\n};\n\nexport const isWithinFrozenColumnBoundary = (x: number, frozenColumnWidth: number) => {\n const max = AI_TABLE_ROW_HEAD_WIDTH + frozenColumnWidth;\n const min = AI_TABLE_ROW_HEAD_WIDTH;\n return x > min && x < max;\n};\n\nexport const getEditorSpace = (widthOrHeight: number) => {\n return widthOrHeight + AI_TABLE_OFFSET * 2;\n};\n\nexport const getEditorBoxOffset = () => {\n return -AI_TABLE_OFFSET;\n};\n\nexport const getCellEditorBorderSpace = () => {\n return AI_TABLE_CELL_ACTIVE_BORDER_WIDTH * 2 - AI_TABLE_OFFSET * 2;\n};\n\nexport const getHoverEditorSpace = (widthOrHeight: number) => {\n const borderSpace = getCellEditorBorderSpace();\n return widthOrHeight - borderSpace;\n};\n\nexport const getHoverEditorBoxOffset = () => {\n const borderSpace = getCellEditorBorderSpace();\n return borderSpace / 2;\n};","import {\n AI_TABLE_FIELD_ADD_BUTTON,\n AI_TABLE_FIELD_HEAD_MORE,\n AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX,\n AI_TABLE_ROW_ADD_BUTTON,\n AI_TABLE_ROW_SELECT_CHECKBOX\n} from '../constants';\nimport { AITableAreaType } from '../types';\nimport { getDetailByTargetName } from './common';\n\nexport const handleMouseStyle = (realTargetName: string, areaType: AITableAreaType = AITableAreaType.grid, container: HTMLDivElement) => {\n const { targetName, mouseStyle } = getDetailByTargetName(realTargetName);\n if (mouseStyle) return setMouseStyle(mouseStyle, container);\n if (areaType === AITableAreaType.none) return setMouseStyle('default', container);\n switch (targetName) {\n case AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX:\n case AI_TABLE_FIELD_HEAD_MORE:\n case AI_TABLE_ROW_SELECT_CHECKBOX:\n case AI_TABLE_ROW_ADD_BUTTON:\n case AI_TABLE_FIELD_ADD_BUTTON: {\n return setMouseStyle('pointer', container);\n }\n default:\n return setMouseStyle('default', container);\n }\n};\n\nexport const setMouseStyle = (mouseStyle: string, container: HTMLDivElement) => {\n container.style.cursor = mouseStyle;\n};\n","import {\n DEFAULT_FONT_FAMILY,\n DEFAULT_FONT_SIZE,\n DEFAULT_FONT_STYLE,\n DEFAULT_FONT_WEIGHT,\n DEFAULT_TEXT_LINE_HEIGHT,\n DEFAULT_TEXT_SCALE\n} from '../constants';\nimport { castToString } from './common';\n\nexport interface AITableTextMeasureOptions {\n fontFamily?: string;\n fontSize?: number;\n fontWeight?: string;\n fontStyle?: string;\n lineHeight?: number;\n scale?: number;\n}\n\n/**\n * 在 Canvas 上测量文本的宽度和高度,以便在显示文本时能够动态调整布局或限制文本的显示区域\n * @param defaults\n * @returns\n */\nexport const TextMeasure = (defaults: AITableTextMeasureOptions = {}) => {\n const {\n fontFamily = DEFAULT_FONT_FAMILY,\n fontSize = DEFAULT_FONT_SIZE,\n fontWeight = DEFAULT_FONT_WEIGHT,\n fontStyle = DEFAULT_FONT_STYLE,\n lineHeight = DEFAULT_TEXT_LINE_HEIGHT,\n scale = DEFAULT_TEXT_SCALE\n } = defaults;\n const o: Required<AITableTextMeasureOptions> = {\n fontFamily,\n fontSize,\n fontWeight,\n fontStyle,\n lineHeight,\n scale\n };\n const canvas = document.createElement('canvas');\n const context = canvas ? canvas.getContext('2d') : null;\n\n const normalizeFontFamily = (fontFamily: string) => {\n return fontFamily\n .split(',')\n .map((family) => {\n family = family.trim();\n const hasSpace = family.indexOf(' ') >= 0;\n const hasQuotes = family.indexOf('\"') >= 0 || family.indexOf(\"'\") >= 0;\n if (hasSpace && !hasQuotes) {\n family = `\"${family}\"`;\n }\n return family;\n })\n .join(', ');\n };\n\n // 可以在运行时动态调整字体样式,从而影响后续的文本测量\n const setFont = (options: AITableTextMeasureOptions = {}) => {\n for (const key in options) {\n (o as any)[key] = (options as any)[key] ?? (o as any)[key];\n }\n if (context) {\n context.font = `${o.fontWeight} ${o.fontSize * o.scale}px ${normalizeFontFamily(o.fontFamily)}`;\n }\n };\n\n // 根据指定的最大宽度和行数来计算文本的显示方式。如果文本太长,它会自动换行或截断,并返回是否发生溢出的信息\n const getWidthOfLongestText = (text: string | null, maxWidth?: number, maxLineCount?: number) => {\n let width = 0;\n let height = 0;\n let lineCount = 0;\n if (text == null) {\n return { width, height, lastLineWidth: 0 };\n }\n const lines = text.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n const lineWidth = context?.measureText(line).width ?? 0;\n width = Math.max(width, lineWidth);\n lineCount = maxWidth != null ? Math.ceil(lineWidth / maxWidth) || 1 : 1;\n height += o.lineHeight * lineCount;\n }\n if (maxWidth == null || maxLineCount === 1 || (maxLineCount && lineCount <= maxLineCount)) {\n return {\n width: Math.ceil(width),\n height: Math.ceil(height),\n text,\n isOverflow: Boolean(maxLineCount && lineCount > maxLineCount),\n lastLineWidth: Math.ceil(width)\n };\n }\n\n const arrText = text.split('');\n let rowCount = 0; // 总行数\n let textHeight = 0; // 文本最终占用的高度\n let showText = ''; // 每行展示的文本\n let totalText = '';\n let isLimitRow = false;\n const textLength = arrText.length;\n\n for (let n = 0; n < textLength; n++) {\n const singleText = arrText[n]!;\n const composeText = showText + singleText;\n // 如果没有超过 maxLineCount,就会继续换行\n isLimitRow = maxLineCount ? rowCount === maxLineCount - 1 : false;\n const measureText = isLimitRow ? composeText + '…' : composeText;\n totalText += singleText;\n const textWidth = context?.measureText(measureText).width ?? 0;\n const isLineBreak = ['\\n', '\\r'].includes(singleText);\n if (((maxWidth && textWidth > maxWidth) || isLineBreak) && (maxLineCount == null || rowCount < maxLineCount)) {\n showText = isLineBreak ? '' : singleText;\n textHeight += lineHeight;\n rowCount++;\n if (isLimitRow) {\n if (n < textLength - 1) {\n totalText = totalText.substring(0, totalText.length - 1) + '…';\n }\n break;\n }\n } else {\n showText = composeText;\n }\n }\n return {\n width: Math.ceil(width),\n height: Math.ceil(maxLineCount == null || rowCount < maxLineCount ? textHeight + lineHeight : textHeight),\n text: totalText,\n isOverflow: isLimitRow,\n lastLineWidth: context?.measureText(showText).width ?? 0\n };\n };\n\n // 测量给定文本的宽度和高度。\n // 支持指定最大宽度 (maxWidth) 和最大行数 (maxLineCount),从而能够处理多行文本的自动换行和截断(例如在文本超过行数限制时添加省略号 \"…\")\n const measureText = (text: string, maxWidth?: number, maxLineCount?: number) => {\n return getWidthOfLongestText(castToString(text), maxWidth, maxLineCount);\n };\n\n // 可以将字体样式重置为初始默认配置\n const reset = () => setFont(defaults);\n\n setFont(o);\n\n return {\n context,\n measureText,\n setFont,\n reset\n };\n};\n","import { FlexibleConnectedPositionStrategy } from '@angular/cdk/overlay';\nimport { DestroyRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ThyAbstractInternalOverlayRef } from 'ngx-tethys/core';\nimport { ThyPopover, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { debounceTime, fromEvent, Subject } from 'rxjs';\nimport { AbstractEditCellEditor } from '../components';\nimport { GRID_CELL_EDITOR_MAP } from '../constants';\nimport { AITable, AITableFieldType } from '../core';\nimport { AITableGridCellRenderSchema, AITableOpenEditOptions } from '../types';\nimport { getCellHorizontalPosition, getEditorBoxOffset, getEditorSpace, getHoverEditorBoxOffset, getHoverEditorSpace } from '../utils';\n\n@Injectable()\nexport class AITableGridEventService {\n aiTable!: AITable;\n\n aiFieldRenderers?: Partial<Record<AITableFieldType, AITableGridCellRenderSchema>>;\n\n dblClickEvent$ = new Subject<MouseEvent>();\n\n mousedownEvent$ = new Subject<MouseEvent>();\n\n mouseoverEvent$ = new Subject<MouseEvent>();\n\n globalMouseoverEvent$ = new Subject<MouseEvent>();\n\n globalMousedownEvent$ = new Subject<MouseEvent>();\n\n private cellEditorPopoverRef!: ThyPopoverRef<AbstractEditCellEditor<any>> | null;\n\n private destroyRef = inject(DestroyRef);\n\n private thyPopover = inject(ThyPopover);\n\n initialize(aiTable: AITable, aiFieldRenderers?: Partial<Record<AITableFieldType, AITableGridCellRenderSchema>>) {\n this.aiTable = aiTable;\n this.aiFieldRenderers = aiFieldRenderers;\n }\n\n registerEvents(element: HTMLElement) {\n fromEvent<MouseEvent>(element, 'dblclick', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.dblClickEvent$.next(event);\n });\n\n fromEvent<MouseEvent>(element, 'mouseover', { passive: true })\n .pipe(debounceTime(80), takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.mouseoverEvent$.next(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseover', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.globalMouseoverEvent$.next(event);\n });\n\n fromEvent<MouseEvent>(element, 'mousedown', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.mousedownEvent$.next(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousedown', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.globalMousedownEvent$.next(event as MouseEvent);\n });\n }\n\n private getEditorComponent(type: AITableFieldType) {\n if (this.aiFieldRenderers && this.aiFieldRenderers[type]) {\n return this.aiFieldRenderers[type]!.editor;\n }\n return GRID_CELL_EDITOR_MAP[type];\n }\n\n openEdit(cellDom: HTMLElement) {\n const { x, y, width, height } = cellDom.getBoundingClientRect();\n const fieldId = cellDom.getAttribute('fieldId')!;\n const recordId = cellDom.getAttribute('recordId')!;\n const component = this.getEditorComponent(this.aiTable.fieldsMap()[fieldId].type);\n const ref = this.thyPopover.open(component, {\n origin: cellDom,\n originPosition: {\n x: x - 1,\n y: y + 1,\n width: width + 2,\n height: height + 2\n },\n width: width + 1 + 'px',\n height: height + 2 + 'px',\n placement: 'top',\n offset: -(height + 4),\n minWidth: width,\n initialState: {\n fieldId: fieldId,\n recordId: recordId,\n aiTable: this.aiTable\n },\n panelClass: 'grid-cell-editor',\n outsideClosable: false,\n hasBackdrop: false,\n manualClosure: true,\n animationDisabled: true,\n autoAdaptive: true\n });\n return ref;\n }\n\n getOriginPosition(aiTable: AITable, options: AITableOpenEditOptions) {\n const { container, coordinate, recordId, fieldId, isHoverEdit } = options;\n const { scrollState } = aiTable.context!;\n const { rowHeight, columnCount } = coordinate;\n const { rowIndex, columnIndex } = AITable.getCellIndex(aiTable, { recordId, fieldId })!;\n const originX = coordinate.getColumnOffset(columnIndex);\n const originY = coordinate.getRowOffset(rowIndex);\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n const { width: originWidth, offset: originOffset } = getCellHorizontalPosition({\n columnWidth,\n columnIndex,\n columnCount\n });\n const originRect = container!.getBoundingClientRect();\n const originPosition = {\n x: originX + originOffset - scrollState().scrollLeft + originRect.x,\n y: originY - scrollState().scrollTop + originRect.y,\n width: originWidth,\n height: rowHeight\n };\n let x = originPosition.x + getEditorBoxOffset();\n let y = originPosition.y + getEditorBoxOffset();\n let width = getEditorSpace(originPosition.width);\n let height = getEditorSpace(originPosition.height);\n // hover 编辑组件无边框\n if (isHoverEdit) {\n x = originPosition.x + getHoverEditorBoxOffset();\n y = originPosition.y + getHoverEditorBoxOffset();\n width = getHoverEditorSpace(originPosition.width);\n height = getHoverEditorSpace(originPosition.height);\n }\n return {\n ...originPosition,\n x: x,\n y: y,\n width: width,\n height: height\n };\n }\n\n openCellEditor(aiTable: AITable, options: AITableOpenEditOptions) {\n const { container, recordId, fieldId, isHoverEdit } = options;\n const component = this.getEditorComponent(this.aiTable.fieldsMap()[fieldId].type);\n const offsetOriginPosition = this.getOriginPosition(aiTable, options);\n this.cellEditorPopoverRef = this.thyPopover.open(component, {\n origin: container!,\n originPosition: offsetOriginPosition,\n width: offsetOriginPosition.width + 'px',\n height: offsetOriginPosition.height + 'px',\n minWidth: offsetOriginPosition.width + 'px',\n placement: 'bottom',\n offset: -offsetOriginPosition.height,\n initialState: {\n fieldId: fieldId,\n recordId: recordId,\n aiTable: aiTable\n },\n panelClass: 'grid-cell-editor',\n outsideClosable: false,\n hasBackdrop: false,\n manualClosure: true,\n animationDisabled: true,\n autoAdaptive: true\n });\n\n if (this.cellEditorPopoverRef) {\n const wheelEvent = fromEvent<WheelEvent>(\n this.cellEditorPopoverRef.componentInstance.elementRef.nativeElement,\n 'wheel'\n ).subscribe((event: WheelEvent) => {\n event.preventDefault();\n this.aiTable.context?.scrollAction({\n deltaX: event.deltaX,\n deltaY: event.deltaY,\n shiftKey: event.shiftKey,\n callback: () => {\n const originPosition = this.getOriginPosition(aiTable, options);\n const positionStrategy = (this.cellEditorPopoverRef as ThyAbstractInternalOverlayRef<any, any, any>)\n .getOverlayRef()\n .getConfig().positionStrategy as FlexibleConnectedPositionStrategy;\n positionStrategy.setOrigin(originPosition);\n positionStrategy.apply();\n }\n });\n });\n this.cellEditorPopoverRef.afterClosed().subscribe(() => {\n wheelEvent.unsubscribe();\n this.cellEditorPopoverRef = null;\n });\n (this.cellEditorPopoverRef.componentInstance as AbstractEditCellEditor<any>).updateFieldValue.subscribe((value) => {\n options.updateFieldValue(value);\n });\n }\n return this.cellEditorPopoverRef;\n }\n\n closeCellEditor() {\n if (this.cellEditorPopoverRef) {\n this.cellEditorPopoverRef.close();\n this.cellEditorPopoverRef = null;\n }\n }\n\n getCurrentEditCell() {\n if (this.cellEditorPopoverRef) {\n const recordId = this.cellEditorPopoverRef.componentInstance?.recordId;\n const fieldId = this.cellEditorPopoverRef.componentInstance?.fieldId;\n\n if (recordId && fieldId) {\n return {\n recordId,\n fieldId\n };\n }\n return null;\n }\n return null;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n model,\n NgZone,\n OnInit,\n output,\n Signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { mergeWith } from 'rxjs';\nimport { DBL_CLICK_EDIT_TYPE, MOUSEOVER_EDIT_TYPE } from './constants';\nimport {\n AddFieldOptions,\n AddRecordOptions,\n AIPlugin,\n AITable,\n AITableFields,\n AITableFieldType,\n AITableRecords,\n AITableSelectOptionStyle,\n AITableValue,\n createAITable,\n createDefaultField,\n UpdateFieldValueOptions\n} from './core';\nimport { AITableGridEventService } from './services/event.service';\nimport { AI_TABLE_GRID_FIELD_SERVICE_MAP, AITableGridFieldService } from './services/field.service';\nimport { AITableGridSelectionService } from './services/selection.service';\nimport { AIFieldConfig, AITableFieldMenuItem, AITableReferences } from './types';\nimport { AITableFieldPropertyEditor } from './components';\n\n@Component({\n selector: 'ai-table-grid-base',\n template: '',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableGridBase implements OnInit {\n aiRecords = model.required<AITableRecords>();\n\n aiFields = model.required<AITableFields>();\n\n aiFieldConfig = input<AIFieldConfig>();\n\n aiReadonly = input<boolean>();\n\n aiPlugins = input<AIPlugin[]>();\n\n aiReferences = input.required<AITableReferences>();\n\n aiBuildRenderDataFn = input<(aiTable: AITable) => AITableValue>();\n\n AITableFieldType = AITableFieldType;\n\n AITableSelectOptionStyle = AITableSelectOptionStyle;\n\n aiTable!: AITable;\n\n isSelectedAll = computed(() => {\n return this.aiTable.selection().selectedRecords.size === this.aiRecords().length;\n });\n\n aiTableInitialized = output<AITable>();\n\n aiAddRecord = output<AddRecordOptions>();\n\n aiAddField = output<AddFieldOptions>();\n\n aiUpdateFieldValue = output<UpdateFieldValueOptions>();\n\n fieldMenus: Signal<AITableFieldMenuItem[]> = computed(() => {\n return this.aiFieldConfig()?.fieldMenus || [];\n });\n\n mouseoverRef!: ThyPopoverRef<any>;\n\n gridData = computed(() => {\n if (this.aiBuildRenderDataFn && this.aiBuildRenderDataFn() && this.aiTable) {\n return this.aiBuildRenderDataFn()!(this.aiTable);\n }\n return {\n records: this.aiRecords(),\n fields: this.aiFields()\n };\n });\n\n protected ngZone = inject(NgZone);\n protected elementRef = inject(ElementRef);\n protected destroyRef = inject(DestroyRef);\n protected aiTableGridFieldService = inject(AITableGridFieldService);\n protected aiTableGridEventService = inject(AITableGridEventService);\n protected aiTableGridSelectionService = inject(AITableGridSelectionService);\n\n ngOnInit(): void {\n this.initAITable();\n this.initService();\n }\n\n initAITable() {\n this.aiTable = createAITable(this.aiRecords, this.aiFields);\n this.aiPlugins()?.forEach((plugin) => {\n this.aiTable = plugin(this.aiTable);\n });\n this.aiTableInitialized.emit(this.aiTable);\n }\n\n initService() {\n this.aiTableGridEventService.initialize(this.aiTable, this.aiFieldConfig()?.fieldPropertyEditor);\n this.aiTableGridSelectionService.initialize(this.aiTable);\n this.aiTableGridEventService.registerEvents(this.elementRef.nativeElement);\n this.aiTableGridFieldService.initAIFieldConfig(this.aiFieldConfig());\n AI_TABLE_GRID_FIELD_SERVICE_MAP.set(this.aiTable, this.aiTableGridFieldService);\n }\n\n addRecord() {\n const records = this.gridData().records;\n const recordCount = records.length;\n this.aiAddRecord.emit({\n originId: recordCount > 0 ? records[records.length - 1]._id : ''\n });\n }\n\n selectRecord(recordId: string) {\n this.aiTableGridSelectionService.selectRecord(recordId);\n }\n\n toggleSelectAll(checked: boolean) {\n this.aiTableGridSelectionService.toggleSelectAll(checked);\n }\n\n addField(gridColumnBlank?: HTMLElement, position?: { x: number; y: number }) {\n const field = createDefaultField(this.aiTable, AITableFieldType.text);\n const popoverRef = this.aiTableGridFieldService.editFieldProperty(this.aiTable, {\n field,\n isUpdate: false,\n origin: gridColumnBlank!,\n position\n });\n if (popoverRef && !this.aiFieldConfig()?.fieldPropertyEditor) {\n (popoverRef.componentInstance as AITableFieldPropertyEditor).addField.subscribe((defaultValue) => {\n const fields = this.gridData().fields;\n const fieldCount = fields.length;\n this.aiAddField.emit({\n originId: fieldCount > 0 ? fields[fields.length - 1]._id : '',\n defaultValue\n });\n });\n }\n }\n\n public subscribeEvents() {\n this.ngZone.runOutsideAngular(() => {\n this.aiTableGridEventService.dblClickEvent$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n this.dblClick(event);\n });\n this.aiTableGridEventService.mousedownEvent$\n .pipe(mergeWith(this.aiTableGridEventService.globalMousedownEvent$), takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.aiTableGridSelectionService.updateSelect(event);\n });\n\n this.aiTableGridEventService.mouseoverEvent$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n this.mouseoverHandle(event);\n });\n this.aiTableGridEventService.globalMouseoverEvent$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n this.closeHoverCellEditor(event);\n });\n });\n }\n\n private dblClick(event: MouseEvent) {\n const cellDom = (event.target as HTMLElement).closest('.grid-cell') as HTMLElement;\n const type = cellDom && (cellDom.getAttribute('type')! as AITableFieldType);\n if (type && DBL_CLICK_EDIT_TYPE.includes(type)) {\n this.aiTableGridEventService.openEdit(cellDom);\n }\n }\n\n private mouseoverHandle(event: MouseEvent) {\n if (this.mouseoverRef) {\n this.mouseoverRef?.close();\n }\n const cellDom = (event.target as HTMLElement).closest('.grid-cell') as HTMLElement;\n const type = cellDom && (cellDom.getAttribute('type')! as AITableFieldType);\n if (type && MOUSEOVER_EDIT_TYPE.includes(type)) {\n this.mouseoverRef = this.aiTableGridEventService.openEdit(cellDom);\n }\n }\n\n private closeHoverCellEditor(e: MouseEvent) {\n if (this.mouseoverRef) {\n const hasGrid = e.target && (e.target as HTMLElement).closest('.ai-table-grid');\n const hasCellEditor = e.target && (e.target as HTMLElement).closest('.grid-cell-editor');\n if (!hasGrid && !hasCellEditor) {\n this.mouseoverRef.close();\n }\n }\n }\n}\n","import { CommonModule, NgClass, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyAction } from 'ngx-tethys/action';\nimport { ThyAvatarModule } from 'ngx-tethys/avatar';\nimport { ThyCheckboxModule } from 'ngx-tethys/checkbox';\nimport { ThyDatePickerFormatPipe } from 'ngx-tethys/date-picker';\nimport { ThyDropdownDirective, ThyDropdownMenuComponent } from 'ngx-tethys/dropdown';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\nimport { ThyProgress } from 'ngx-tethys/progress';\nimport { ThyRate } from 'ngx-tethys/rate';\nimport { ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { ThyTag } from 'ngx-tethys/tag';\nimport { ProgressEditorComponent, SelectOptionComponent } from './components';\nimport { FieldMenu } from './components/field-menu/field-menu.component';\nimport { AITableFieldPropertyEditor } from './components/field-property-editor/field-property-editor.component';\nimport { AITableField } from './core';\nimport { AITableGridBase } from './grid-base.component';\nimport { IsSelectRecordPipe, MemberSettingPipe, SelectOptionPipe, SelectOptionsPipe, SelectSettingPipe, UserPipe } from './pipes/grid.pipe';\nimport { AITableGridEventService } from './services/event.service';\nimport { AITableGridFieldService } from './services/field.service';\nimport { AITableGridSelectionService } from './services/selection.service';\nimport { buildGridData } from './utils';\n\n@Component({\n selector: 'ai-table-dom-grid',\n templateUrl: './dom-grid.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ai-table-grid ai-table-dom-grid'\n },\n imports: [\n NgClass,\n NgComponentOutlet,\n CommonModule,\n FormsModule,\n SelectOptionPipe,\n SelectOptionsPipe,\n ThyTag,\n ThyPopoverModule,\n ThyIcon,\n ThyRate,\n ThyProgress,\n AITableFieldPropertyEditor,\n ThyDatePickerFormatPipe,\n ThyFlexibleText,\n ThyStopPropagationDirective,\n FieldMenu,\n ThyAction,\n ThyDropdownDirective,\n ThyDropdownMenuComponent,\n ThyCheckboxModule,\n ProgressEditorComponent,\n ThyAvatarModule,\n NgTemplateOutlet,\n IsSelectRecordPipe,\n ProgressEditorComponent,\n SelectOptionComponent,\n UserPipe,\n SelectSettingPipe,\n MemberSettingPipe\n ],\n providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService]\n})\nexport class AITableDomGrid extends AITableGridBase implements OnInit {\n override ngOnInit(): void {\n super.ngOnInit();\n this.subscribeEvents();\n }\n\n openFieldMenu(e: Event, field: AITableField, fieldAction: HTMLElement) {\n const moreBtn = (e.target as HTMLElement)!.closest('.grid-field-action');\n this.aiTableGridFieldService.openFieldMenu(this.aiTable, {\n origin: moreBtn,\n editOrigin: fieldAction,\n fieldId: field._id,\n fieldMenus: this.fieldMenus()\n });\n }\n}\n","<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n href=\"javascript:;\"\n class=\"grid-field-action\"\n thyAction\n thyIcon=\"more-vertical\"\n (click)=\"openFieldMenu($event, field, fieldAction)\"\n >\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n #cell\n class=\"grid-cell\"\n [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @let fieldValue = record.values[field._id];\n @let settings = field.settings! | selectSetting;\n @let options = settings['options'];\n @let optionStyle = settings['option_style'] || AITableSelectOptionStyle.tag;\n @let isTagStyle = optionStyle === AITableSelectOptionStyle.tag;\n\n @if (!settings['is_multiple'] && fieldValue | selectOption: options; as selectedOption) {\n @if (isTagStyle) {\n <select-option class=\"mb-1 mr-1\" [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"selectedOption\"></select-option>\n </div>\n }\n } @else {\n @let maxShowCount = 2;\n\n <div class=\"d-flex\">\n @if (fieldValue | selectOptions: options; as selectedOptions) {\n @for (option of selectedOptions; track option!._id; let i = $index) {\n @if (i + 1 <= maxShowCount) {\n @if (isTagStyle) {\n <select-option\n class=\"mb-1 mr-1\"\n [field]=\"field\"\n [displayOption]=\"option!\"\n ></select-option>\n } @else {\n <div thyTag class=\"mb-1 mr-1\">\n <select-option [field]=\"field\" [displayOption]=\"option!\"></select-option>\n </div>\n }\n }\n }\n\n @let selectedLength = selectedOptions.length || 0;\n @if (selectedOptions && maxShowCount < selectedLength) {\n @let shape = isTagStyle ? 'pill' : 'rectangle';\n @let isHidden = maxShowCount >= selectedLength;\n\n <thy-tag\n class=\"cursor-pointer\"\n [class.multi-property-value-hidden]=\"isHidden\"\n [thyShape]=\"shape\"\n >\n <span class=\"text-truncate\"> +{{ selectedLength - maxShowCount }} </span>\n </thy-tag>\n }\n }\n </div>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id].timestamp | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id] || 0\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] || 0 }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @let settings = field.settings! | memberSetting;\n\n @if (!settings!['is_multiple']) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n } @else {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of recordValues; track $index) {\n <thy-avatar [thyName]=\"item.display_name!\" [thySrc]=\"item.avatar!\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @case (AITableFieldType.updatedBy) {\n @let recordValues = record.values[field._id] | user: aiReferences()!;\n\n @if (recordValues && recordValues.length) {\n <thy-avatar\n [thyName]=\"recordValues[0].display_name!\"\n [thySrc]=\"recordValues[0].avatar!\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>\n","import { InjectionToken } from '@angular/core';\n\nexport const KO_CONTAINER_TOKEN = new InjectionToken<any>('KO_CONTAINER_TOKEN');\n","import Konva from 'konva';\nimport Node = Konva.Node;\n\nexport default function updatePicture(node: Node) {\n const drawingNode = node.getLayer() || node.getStage();\n if (drawingNode) {\n drawingNode.batchDraw();\n }\n}\n","// adapted FROM: https://github.com/lavrton/react-konva/blob/master/src/react-konva-fiber.js\n\nimport { KonvaEventObject } from 'konva/lib/Node';\nimport { KoComponent } from '../interfaces/component';\nimport { KoEventObject } from '../interfaces/event-object';\nimport { KoPropsType } from './types';\nimport updatePicture from './update-picture';\n\nexport default function applyNodeProps(component: KoComponent, props: KoPropsType = {}, oldProps: KoPropsType = {}): void {\n if ('id' in props) {\n const message = `You are using \"id\" attribute for Konva node. In some very rare cases it may produce bugs. Currently we recommend not to use it and use \"name\" attribute instead.`;\n console.warn(message);\n }\n\n const instance = component.getNode();\n const updatedProps: KoPropsType = {};\n let hasUpdates = false;\n\n Object.keys(oldProps).forEach((key) => {\n const isEvent = key.slice(0, 2) === 'ko';\n const propChanged = oldProps[key] !== props[key];\n if (isEvent && propChanged) {\n let eventName = key.slice(2).toLowerCase();\n if (eventName.slice(0, 7) === 'content') {\n eventName = 'content' + eventName.slice(7, 8).toUpperCase() + eventName.slice(8);\n }\n instance.off(eventName, oldProps[key]);\n }\n const toRemove = !Object.hasOwn(props, key);\n if (toRemove) {\n instance.setAttr(key, undefined);\n }\n });\n Object.keys(props).forEach((key) => {\n const isEvent = key.slice(0, 2) === 'ko';\n const toAdd = oldProps[key] !== props[key];\n if (isEvent && toAdd) {\n let eventName = key.slice(2).toLowerCase();\n if (eventName.slice(0, 7) === 'content') {\n eventName = 'content' + eventName.slice(7, 8).toUpperCase() + eventName.slice(8);\n }\n if (props[key]) {\n instance.off(eventName);\n instance.on(eventName, (event: KonvaEventObject<unknown>) => {\n props[key]({\n angularComponent: component,\n event\n } as KoEventObject<unknown>);\n });\n }\n }\n if (!isEvent && (props[key] !== oldProps[key] || props[key] !== instance.getAttr(key))) {\n hasUpdates = true;\n updatedProps[key] = props[key];\n }\n });\n\n if (hasUpdates) {\n instance.setAttrs(updatedProps);\n updatePicture(instance);\n let val;\n Object.keys(updatedProps).forEach((prop) => {\n val = updatedProps[prop];\n if (val instanceof Image && !val.complete) {\n const node = instance;\n val.addEventListener('load', function () {\n const layer = node.getLayer();\n if (layer) {\n layer.batchDraw();\n }\n });\n }\n });\n }\n}\n","import { EventEmitter } from '@angular/core';\nimport { KoComponent } from '../interfaces/component';\nimport applyNodeProps from './apply-node-props';\nimport { KoListenerRecord } from './types';\nimport updatePicture from './update-picture';\n\nfunction camelize(str: string): string {\n return str\n .replace(/^\\w|[A-Z]|\\b\\w/g, function (letter, index) {\n return index == 0 ? letter.toLowerCase() : letter.toUpperCase();\n })\n .replace(/\\s+/g, '');\n}\n\nfunction capitalizeFirstLetter(string: string): string {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function getName(componentTag: string): string {\n return capitalizeFirstLetter(camelize(componentTag.slice(3).replace('-', ' ')));\n}\n\nexport function createListener(instance: KoComponent): KoListenerRecord {\n const output: KoListenerRecord = {};\n [\n 'koMouseover',\n 'koMousemove',\n 'koMouseout',\n 'koMouseenter',\n 'koMouseleave',\n 'koMousedown',\n 'koMouseup',\n 'koWheel',\n 'koContextmenu',\n 'koClick',\n 'koDblclick',\n 'koTouchstart',\n 'koTouchmove',\n 'koTouchend',\n 'koTap',\n 'koDbltap',\n 'koDragstart',\n 'koDragmove',\n 'koDragend'\n ].forEach((eventName) => {\n const name: keyof KoComponent = <keyof KoComponent>eventName;\n\n const eventEmitter: EventEmitter<unknown> = <EventEmitter<unknown>>instance[name];\n if (eventEmitter.observed) {\n output[eventName] = eventEmitter.emit.bind(eventEmitter);\n }\n });\n return output;\n}\n\nexport { applyNodeProps, updatePicture };\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n OnDestroy,\n OnInit,\n Output,\n effect,\n inject,\n input\n} from '@angular/core';\nimport Konva from 'konva';\nimport { FastLayer } from 'konva/lib/FastLayer';\nimport { Group } from 'konva/lib/Group';\nimport { Layer } from 'konva/lib/Layer';\nimport { Shape } from 'konva/lib/Shape';\nimport { Arc } from 'konva/lib/shapes/Arc';\nimport { Arrow } from 'konva/lib/shapes/Arrow';\nimport { Circle } from 'konva/lib/shapes/Circle';\nimport { Ellipse } from 'konva/lib/shapes/Ellipse';\nimport { Image } from 'konva/lib/shapes/Image';\nimport { Label, Tag } from 'konva/lib/shapes/Label';\nimport { Line } from 'konva/lib/shapes/Line';\nimport { Path } from 'konva/lib/shapes/Path';\nimport { Rect } from 'konva/lib/shapes/Rect';\nimport { RegularPolygon } from 'konva/lib/shapes/RegularPolygon';\nimport { Ring } from 'konva/lib/shapes/Ring';\nimport { Sprite, SpriteConfig } from 'konva/lib/shapes/Sprite';\nimport { Star } from 'konva/lib/shapes/Star';\nimport { Text } from 'konva/lib/shapes/Text';\nimport { TextPath } from 'konva/lib/shapes/TextPath';\nimport { Transformer } from 'konva/lib/shapes/Transformer';\nimport { Wedge } from 'konva/lib/shapes/Wedge';\nimport { KoComponent, KoEventObject, KoShapeConfigTypes, KoShapeTypes } from '../interfaces';\nimport { applyNodeProps, createListener, getName, updatePicture } from '../utils';\nimport { KO_CONTAINER_TOKEN } from './container.token';\n\n@Component({\n selector:\n 'ko-shape, ko-circle, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer',\n standalone: true,\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KoShape implements OnInit, AfterViewInit, OnDestroy, KoComponent {\n config = input<KoShapeConfigTypes>();\n\n @Output() koMouseover = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMousemove = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseout = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseenter = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseleave = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMousedown = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseup = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koWheel = new EventEmitter<KoEventObject<WheelEvent>>();\n\n @Output() koContextmenu = new EventEmitter<KoEventObject<PointerEvent>>();\n\n @Output() koClick = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDblclick = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koTouchstart = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTouchmove = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTouchend = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTap = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koDbltap = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koDragstart = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDragmove = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDragend = new EventEmitter<KoEventObject<MouseEvent>>();\n\n private elementRef = inject(ElementRef<HTMLElement>);\n\n private container = inject(KO_CONTAINER_TOKEN, { skipSelf: true });\n\n private cacheProps: KoShapeConfigTypes = {};\n\n private nameNode: keyof typeof KoShapeTypes | 'Shape' | 'Sprite' = getName(this.elementRef.nativeElement.localName) as\n | keyof typeof KoShapeTypes\n | 'Shape'\n | 'Sprite';\n\n private _node!:\n | Shape\n | Arc\n | Arrow\n | Circle\n | Ellipse\n | Image\n | Label\n | Tag\n | Line\n | Path\n | Rect\n | RegularPolygon\n | Ring\n | Sprite\n | Star\n | Text\n | TextPath\n | Transformer\n | Wedge\n | Group\n | Layer\n | FastLayer;\n\n constructor() {\n effect(() => {\n if (this.config()) {\n this.updateNode(this.config()!);\n }\n });\n }\n\n public getNode():\n | Shape\n | Arc\n | Arrow\n | Circle\n | Ellipse\n | Image\n | Label\n | Tag\n | Line\n | Path\n | Rect\n | RegularPolygon\n | Ring\n | Sprite\n | Star\n | Text\n | TextPath\n | Transformer\n | Wedge\n | Group\n | Layer\n | FastLayer {\n return this._node;\n }\n\n ngOnInit(): void {\n this.initKonva();\n }\n\n private initKonva(): void {\n if (!this._node) {\n this._node = new Shape();\n }\n if (this.nameNode === 'Shape') {\n this._node = new Shape();\n } else if (this.nameNode === 'Sprite') {\n this._node = new Sprite(this.config() as SpriteConfig);\n } else {\n this._node = new Konva[this.nameNode](undefined);\n }\n\n const animationStage = this._node.to.bind(this._node);\n this._node.to = (newConfig: KoShapeConfigTypes): void => {\n animationStage(newConfig);\n setTimeout(() => {\n Object.keys(this._node.attrs).forEach((key) => {\n if (typeof this._node.attrs[key] !== 'function') {\n this.config()![key] = this._node.attrs[key];\n }\n });\n }, 200);\n };\n\n if (this.config()) {\n this.updateNode(this.config()!);\n }\n }\n\n private updateNode(config: KoShapeConfigTypes): void {\n if (!this._node) return;\n const props = {\n ...config,\n ...createListener(this)\n };\n applyNodeProps(this, props, this.cacheProps);\n this.cacheProps = props;\n }\n\n ngAfterViewInit(): void {\n const container = this.container.getNode();\n container.add(<Layer>this.getNode());\n updatePicture(this.container.getNode());\n }\n\n ngOnDestroy(): void {\n this._node?.destroy();\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { KO_CONTAINER_TOKEN } from './container.token';\nimport { KoShape } from './shape.component';\n\n@Component({\n selector: 'ko-layer, ko-fastlayer, ko-group',\n standalone: true,\n template: `<ng-content></ng-content>`,\n providers: [\n {\n provide: KO_CONTAINER_TOKEN,\n useExisting: KoContainer\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KoContainer extends KoShape {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n OnDestroy,\n OnInit,\n Output,\n effect,\n inject,\n input\n} from '@angular/core';\nimport { ContainerConfig } from 'konva/lib/Container';\nimport { Stage } from 'konva/lib/Stage';\nimport { KoEventObject, KoShapeConfigTypes } from '../interfaces';\nimport { KoComponent } from '../interfaces/component';\nimport { applyNodeProps, createListener } from '../utils';\nimport { KO_CONTAINER_TOKEN } from './container.token';\n\n@Component({\n selector: 'ko-stage',\n standalone: true,\n template: `<ng-content></ng-content>`,\n providers: [\n {\n provide: KO_CONTAINER_TOKEN,\n useExisting: KoStage\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KoStage implements KoComponent, OnInit, OnDestroy {\n config = input<ContainerConfig>();\n\n @Output() koMouseover = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMousemove = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseout = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseenter = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseleave = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMousedown = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koMouseup = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koWheel = new EventEmitter<KoEventObject<WheelEvent>>();\n\n @Output() koContextmenu = new EventEmitter<KoEventObject<PointerEvent>>();\n\n @Output() koClick = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDblclick = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koTouchstart = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTouchmove = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTouchend = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koTap = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koDbltap = new EventEmitter<KoEventObject<TouchEvent>>();\n\n @Output() koDragstart = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDragmove = new EventEmitter<KoEventObject<MouseEvent>>();\n\n @Output() koDragend = new EventEmitter<KoEventObject<MouseEvent>>();\n\n private _stage!: Stage;\n\n private cacheProps: KoShapeConfigTypes = {};\n\n private nodeContainer = inject(ElementRef).nativeElement;\n\n constructor() {\n effect(() => {\n if (this.config()) {\n if (!this._stage) {\n this.initStage();\n }\n this.updateNode(this.config()!);\n }\n });\n }\n\n ngOnInit() {\n this.initStage();\n }\n\n public getNode(): Stage {\n return this._stage;\n }\n\n private initStage(): void {\n this._stage = new Stage({\n ...this.config(),\n container: this.nodeContainer\n });\n }\n\n private updateNode(config: ContainerConfig): void {\n const props = {\n ...config,\n ...createListener(this)\n };\n applyNodeProps(this, props, this.cacheProps);\n this.cacheProps = props;\n }\n\n ngOnDestroy(): void {\n this._stage?.destroy();\n }\n}\n","import { Component, EventEmitter } from '@angular/core';\nimport { FastLayer } from 'konva/lib/FastLayer';\nimport { Group } from 'konva/lib/Group';\nimport { Layer } from 'konva/lib/Layer';\nimport { Shape } from 'konva/lib/Shape';\nimport { Arc } from 'konva/lib/shapes/Arc';\nimport { Arrow } from 'konva/lib/shapes/Arrow';\nimport { Circle } from 'konva/lib/shapes/Circle';\nimport { Ellipse } from 'konva/lib/shapes/Ellipse';\nimport { Image } from 'konva/lib/shapes/Image';\nimport { Label, Tag } from 'konva/lib/shapes/Label';\nimport { Line } from 'konva/lib/shapes/Line';\nimport { Path } from 'konva/lib/shapes/Path';\nimport { Rect } from 'konva/lib/shapes/Rect';\nimport { RegularPolygon } from 'konva/lib/shapes/RegularPolygon';\nimport { Ring } from 'konva/lib/shapes/Ring';\nimport { Sprite } from 'konva/lib/shapes/Sprite';\nimport { Star } from 'konva/lib/shapes/Star';\nimport { Text } from 'konva/lib/shapes/Text';\nimport { TextPath } from 'konva/lib/shapes/TextPath';\nimport { Transformer } from 'konva/lib/shapes/Transformer';\nimport { Wedge } from 'konva/lib/shapes/Wedge';\nimport { Stage } from 'konva/lib/Stage';\nimport { KoShapeConfigTypes } from './config';\nimport { KoEventObject } from './event-object';\n\nexport abstract class KoComponent extends Component {\n config!: KoShapeConfigTypes;\n\n koMouseover?: EventEmitter<KoEventObject<MouseEvent>>;\n koMousemove?: EventEmitter<KoEventObject<MouseEvent>>;\n koMouseout?: EventEmitter<KoEventObject<MouseEvent>>;\n koMouseenter?: EventEmitter<KoEventObject<MouseEvent>>;\n koMouseleave?: EventEmitter<KoEventObject<MouseEvent>>;\n koMousedown?: EventEmitter<KoEventObject<MouseEvent>>;\n koMouseup?: EventEmitter<KoEventObject<MouseEvent>>;\n koWheel?: EventEmitter<KoEventObject<WheelEvent>>;\n koContextmenu?: EventEmitter<KoEventObject<PointerEvent>>;\n koClick?: EventEmitter<KoEventObject<MouseEvent>>;\n koDblclick?: EventEmitter<KoEventObject<MouseEvent>>;\n koTouchstart?: EventEmitter<KoEventObject<TouchEvent>>;\n koTouchmove?: EventEmitter<KoEventObject<TouchEvent>>;\n koTouchend?: EventEmitter<KoEventObject<TouchEvent>>;\n koTap?: EventEmitter<KoEventObject<TouchEvent>>;\n koDbltap?: EventEmitter<KoEventObject<TouchEvent>>;\n koDragstart?: EventEmitter<KoEventObject<MouseEvent>>;\n koDragmove?: EventEmitter<KoEventObject<MouseEvent>>;\n koDragend?: EventEmitter<KoEventObject<MouseEvent>>;\n\n getNode!: () =>\n | Stage\n | Shape\n | Arc\n | Arrow\n | Circle\n | Ellipse\n | Image\n | Label\n | Tag\n | Line\n | Path\n | Rect\n | RegularPolygon\n | Ring\n | Sprite\n | Star\n | Text\n | TextPath\n | Transformer\n | Wedge\n | Group\n | Layer\n | FastLayer;\n}\n","import { FastLayer } from 'konva/lib/FastLayer';\nimport { Group } from 'konva/lib/Group';\nimport { Layer } from 'konva/lib/Layer';\nimport { Arc } from 'konva/lib/shapes/Arc';\nimport { Arrow } from 'konva/lib/shapes/Arrow';\nimport { Circle } from 'konva/lib/shapes/Circle';\nimport { Ellipse } from 'konva/lib/shapes/Ellipse';\nimport { Image } from 'konva/lib/shapes/Image';\nimport { Label, Tag } from 'konva/lib/shapes/Label';\nimport { Line } from 'konva/lib/shapes/Line';\nimport { Path } from 'konva/lib/shapes/Path';\nimport { Rect } from 'konva/lib/shapes/Rect';\nimport { RegularPolygon } from 'konva/lib/shapes/RegularPolygon';\nimport { Ring } from 'konva/lib/shapes/Ring';\nimport { Star } from 'konva/lib/shapes/Star';\nimport { Text } from 'konva/lib/shapes/Text';\nimport { TextPath } from 'konva/lib/shapes/TextPath';\nimport { Transformer } from 'konva/lib/shapes/Transformer';\nimport { Wedge } from 'konva/lib/shapes/Wedge';\n\nexport const KoShapeTypes = {\n Arc,\n Arrow,\n Circle,\n Ellipse,\n Image,\n Label,\n Tag,\n Line,\n Path,\n Rect,\n RegularPolygon,\n Ring,\n Star,\n Text,\n TextPath,\n Transformer,\n Wedge,\n Group,\n Layer,\n FastLayer\n};\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { StageConfig } from 'konva/lib/Stage';\nimport { KoContainer } from '../../angular-konva';\nimport { KoShape } from '../../angular-konva/components/shape.component';\nimport { Check, Colors, DEFAULT_ICON_SIZE, Unchecked } from '../../constants';\nimport { AITableCheckType, AITableIconConfig } from '../../types';\n\n@Component({\n selector: 'ai-table-icon',\n template: `\n <ko-group [config]=\"groupConfig()\">\n <ko-rect [config]=\"squareShapeConfig()\"></ko-rect>\n <ko-path [config]=\"iconConfig()\"></ko-path>\n </ko-group>\n `,\n standalone: true,\n imports: [KoContainer, KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableIcon {\n config = input.required<AITableIconConfig>();\n\n groupConfig = computed<Partial<StageConfig>>(() => {\n const { x, y, listening } = this.config();\n return { x, y, listening };\n });\n\n squareShapeConfig = computed(() => {\n const {\n name,\n backgroundWidth,\n backgroundHeight,\n size = DEFAULT_ICON_SIZE,\n strokeWidth = 1,\n background,\n cornerRadius,\n opacity\n } = this.config();\n return {\n name,\n width: backgroundWidth || size,\n height: backgroundHeight || size,\n strokeWidth: strokeWidth,\n fill: background || Colors.transparent,\n cornerRadius,\n opacity\n };\n });\n\n iconConfig = computed(() => {\n const {\n type,\n data,\n backgroundWidth,\n backgroundHeight,\n size = DEFAULT_ICON_SIZE,\n stroke,\n strokeWidth = 1,\n scaleX,\n scaleY,\n offsetX,\n offsetY,\n rotation,\n fill = Colors.gray600,\n transformsEnabled = 'position'\n } = this.config();\n\n let pathData = data;\n\n switch (type) {\n case AITableCheckType.checked:\n pathData = Check;\n break;\n case AITableCheckType.unchecked:\n pathData = Unchecked;\n break;\n }\n\n return {\n x: backgroundWidth && (backgroundWidth - size * (scaleX || 1)) / 2,\n y: backgroundHeight && (backgroundHeight - size * (scaleY || 1)) / 2,\n data: pathData,\n width: size,\n height: size,\n fill,\n offsetX,\n offsetY,\n scaleX,\n scaleY,\n rotation,\n stroke,\n strokeWidth,\n transformsEnabled,\n perfectDrawEnabled: false,\n listening: false\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { StageConfig } from 'konva/lib/Stage';\nimport { KoContainer, KoShape } from '../../angular-konva';\nimport {\n AddOutlinedPath,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_ADD_BUTTON,\n AI_TABLE_FIELD_ADD_BUTTON_WIDTH,\n AI_TABLE_FIELD_HEAD,\n AI_TABLE_ICON_COMMON_SIZE,\n AI_TABLE_OFFSET,\n Colors\n} from '../../constants';\nimport { AITableAddFieldConfig, AITableIconConfig } from '../../types';\nimport { generateTargetName } from '../../utils';\nimport { AITableIcon } from './icon.component';\nimport { isNil } from 'lodash';\n\n@Component({\n selector: 'ai-table-add-field',\n template: `\n <ko-group [config]=\"{ x: x() }\">\n <ko-group>\n <ko-rect [config]=\"rectConfig()\"></ko-rect>\n </ko-group>\n <ko-group>\n @if (addIconConfig().visible) {\n <ai-table-icon [config]=\"addIconConfig()\"></ai-table-icon>\n }\n </ko-group>\n </ko-group>\n `,\n standalone: true,\n imports: [KoContainer, KoShape, AITableIcon],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableAddField {\n config = input.required<AITableAddFieldConfig>();\n\n btnWidth = AI_TABLE_FIELD_ADD_BUTTON_WIDTH;\n\n x = computed(() => {\n const lastColumnWidth = this.config().coordinate.getColumnWidth(this.config().columnStopIndex);\n const lastColumnOffset = this.config().coordinate.getColumnOffset(this.config().columnStopIndex);\n return lastColumnWidth + lastColumnOffset;\n });\n\n rectConfig = computed<Partial<StageConfig>>(() => {\n const {\n pointPosition: { targetName },\n readonly\n } = this.config();\n const fill = targetName === AI_TABLE_FIELD_ADD_BUTTON ? Colors.gray80 : Colors.white;\n return {\n name: generateTargetName({\n targetName: AI_TABLE_FIELD_ADD_BUTTON,\n fieldId: this.config().fields[this.config().columnStopIndex]._id,\n mouseStyle: readonly ? 'default' : 'pointer'\n }),\n x: AI_TABLE_OFFSET,\n y: AI_TABLE_OFFSET,\n width:\n this.config().coordinate.containerWidth - this.x() < this.btnWidth\n ? this.btnWidth\n : this.config().coordinate.containerWidth - this.x(),\n height: this.config().coordinate.rowInitSize,\n stroke: Colors.gray200,\n strokeWidth: 1,\n listening: true,\n fill\n };\n });\n\n addIconConfig = computed<AITableIconConfig>(() => {\n const { readonly } = this.config();\n const offsetY = (this.config().coordinate.rowInitSize - AI_TABLE_ICON_COMMON_SIZE) / 2;\n return {\n x: AI_TABLE_CELL_PADDING,\n y: offsetY,\n data: AddOutlinedPath,\n fill: Colors.gray600,\n listening: false,\n visible: isNil(readonly) ? true : !readonly\n };\n });\n}\n","import GraphemeSplitter from 'grapheme-splitter';\nimport {\n AI_TABLE_OFFSET,\n AI_TABLE_TAG_FONT_SIZE,\n AI_TABLE_TAG_PADDING,\n DEFAULT_FONT_FAMILY,\n DEFAULT_FONT_SIZE,\n DEFAULT_FONT_WEIGHT,\n DEFAULT_TEXT_ALIGN_CENTER,\n DEFAULT_TEXT_ALIGN_LEFT,\n DEFAULT_TEXT_DECORATION,\n DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n DEFAULT_TEXT_VERTICAL_ALIGN_TOP,\n DEFAULT_WRAP_TEXT_MAX_ROW,\n FONT_SIZE_SM,\n WebOutlinedPath\n} from '../../constants';\nimport { AITable } from '../../core';\nimport {\n AITableArc,\n AITableAvatarSize,\n AITableAvatarType,\n AITableCtxStyle,\n AITableImage,\n AITableLabel,\n AITableLine,\n AITableRect,\n AITableText,\n AITableTextEllipsis,\n AITableWrapText,\n AITableWrapTextData\n} from '../../types';\nimport { getTextWidth, imageCache, textDataCache, TextMeasure } from '../../utils';\n\n// 用于正确地分割字符串,包括表情符号\nexport const graphemeSplitter = new GraphemeSplitter();\n\n/**\n * 用于在 Canvas 上进行的各种绘图操作,包含了文本绘制、矩形绘制、路径绘制以及一些几何计算等功能\n */\nexport class Drawer {\n ctx: CanvasRenderingContext2D = TextMeasure().context!;\n needDraw = false;\n colors = AITable.getColors();\n\n public initCtx(ctx: CanvasRenderingContext2D) {\n this.needDraw = Boolean(ctx);\n this.ctx = ctx || TextMeasure().context!;\n /**\n * textBaseline 指定为 middle,兼容浏览器差异\n */\n this.ctx.textBaseline = DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE;\n }\n\n // 设置样式\n public setStyle(options: AITableCtxStyle) {\n const { fontSize, fontWeight, fillStyle, strokeStyle } = options;\n\n if (fontSize || fontWeight) {\n this.ctx.font = `${fontWeight || DEFAULT_FONT_WEIGHT} ${fontSize || DEFAULT_FONT_SIZE}px ${DEFAULT_FONT_FAMILY}`;\n }\n if (fillStyle) {\n this.ctx.fillStyle = fillStyle;\n }\n if (strokeStyle) {\n this.ctx.strokeStyle = strokeStyle;\n }\n }\n\n // 文本省略\n public textEllipsis(options: AITableTextEllipsis) {\n const { text, maxWidth, fontSize = DEFAULT_FONT_SIZE, fontWeight = DEFAULT_FONT_WEIGHT } = options;\n\n if (text == null)\n return {\n text: '',\n textWidth: 0,\n isEllipsis: false\n };\n const fontStyle = `${fontWeight} ${fontSize}px ${DEFAULT_FONT_FAMILY}`;\n\n if (!maxWidth) {\n return {\n text,\n textWidth: getTextWidth(this.ctx, text, fontStyle),\n isEllipsis: false\n };\n }\n\n const ellipsis = '…';\n const textSize = text.length;\n // 预先确定传入文本的阈值宽度\n let guessSize = Math.ceil(maxWidth / fontSize);\n let guessText = text.substr(0, guessSize);\n let guessWidth = getTextWidth(this.ctx, guessText, fontStyle);\n\n while (guessWidth <= maxWidth) {\n if (textSize <= guessSize) {\n return {\n text,\n textWidth: guessWidth,\n isEllipsis: false\n };\n }\n guessSize++;\n guessText = text.substr(0, guessSize);\n guessWidth = getTextWidth(this.ctx, guessText, fontStyle);\n }\n\n const ellipsisWidth = getTextWidth(this.ctx, ellipsis, fontStyle);\n while (guessSize >= 0 && guessWidth + ellipsisWidth > maxWidth) {\n guessSize--;\n guessText = text.substr(0, guessSize);\n guessWidth = getTextWidth(this.ctx, guessText, fontStyle);\n }\n\n return {\n text: `${guessText || text[0]}${ellipsis}`,\n textWidth: maxWidth,\n isEllipsis: true\n };\n }\n\n // 绘制线段\n public line(options: AITableLine) {\n const { x, y, points, stroke, closed = false } = options;\n const length = points.length;\n\n this.ctx.save();\n this.ctx.beginPath();\n if (stroke) this.ctx.strokeStyle = stroke;\n this.ctx.lineWidth = 1;\n this.ctx.translate(x, y);\n this.ctx.moveTo(points[0], points[1]);\n\n for (let n = 2; n < length; n += 2) {\n this.ctx.lineTo(points[n], points[n + 1]);\n }\n\n if (closed) {\n this.ctx.closePath();\n }\n this.ctx.stroke();\n this.ctx.restore();\n }\n\n // 绘制圆\n public arc(options: AITableArc) {\n const { x, y, stroke, fill, radius } = options;\n this.ctx.beginPath();\n if (fill) this.setStyle({ fillStyle: fill });\n if (stroke) this.setStyle({ strokeStyle: stroke });\n this.ctx.arc(x, y, radius, 0, 2 * Math.PI, false);\n if (fill) {\n this.ctx.fill();\n }\n if (stroke) {\n this.ctx.stroke();\n }\n }\n\n // 绘制矩形\n public rect(options: AITableRect) {\n const { x, y, width, height, radius, fill, stroke } = options;\n\n this.ctx.beginPath();\n if (fill) this.setStyle({ fillStyle: fill });\n if (stroke) this.setStyle({ strokeStyle: stroke });\n\n if (!radius) {\n this.ctx.rect(x, y, width, height);\n } else {\n let topLeft = 0;\n let topRight = 0;\n let bottomLeft = 0;\n let bottomRight = 0;\n\n if (typeof radius === 'number') {\n topLeft = topRight = bottomLeft = bottomRight = Math.min(radius, width / 2, height / 2);\n } else {\n topLeft = Math.min(radius[0] || 0, width / 2, height / 2);\n topRight = Math.min(radius[1] || 0, width / 2, height / 2);\n bottomRight = Math.min(radius[2] || 0, width / 2, height / 2);\n bottomLeft = Math.min(radius[3] || 0, width / 2, height / 2);\n }\n\n this.ctx.moveTo(x + topLeft, y);\n this.ctx.lineTo(x + width - topRight, y);\n this.ctx.arc(x + width - topRight, y + topRight, topRight, (Math.PI * 3) / 2, 0, false);\n this.ctx.lineTo(x + width, y + height - bottomRight);\n this.ctx.arc(x + width - bottomRight, y + height - bottomRight, bottomRight, 0, Math.PI / 2, false);\n this.ctx.lineTo(x + bottomLeft, y + height);\n this.ctx.arc(x + bottomLeft, y + height - bottomLeft, bottomLeft, Math.PI / 2, Math.PI, false);\n this.ctx.lineTo(x, y + topLeft);\n this.ctx.arc(x + topLeft, y + topLeft, topLeft, Math.PI, (Math.PI * 3) / 2, false);\n }\n\n this.ctx.closePath();\n\n if (fill) {\n this.ctx.fill();\n }\n if (stroke) {\n this.ctx.stroke();\n }\n }\n\n public customRect(options: AITableRect) {\n const { x, y, width, height, fill, strokes } = options;\n if (fill) this.setStyle({ fillStyle: fill });\n this.ctx.fillRect(x, y, width, height);\n if (strokes) {\n const { top, right, bottom, left } = strokes;\n // 上边框\n this.ctx.beginPath();\n this.setStyle({ strokeStyle: top ?? this.colors.transparent });\n this.ctx.moveTo(x, y);\n this.ctx.lineTo(x + width, y);\n this.ctx.stroke();\n // 右边框\n this.ctx.beginPath();\n this.setStyle({ strokeStyle: right ?? this.colors.transparent });\n this.ctx.moveTo(x + width, y);\n this.ctx.lineTo(x + width, y + height);\n this.ctx.stroke();\n // 下边框\n this.ctx.beginPath();\n this.setStyle({ strokeStyle: bottom ?? this.colors.transparent });\n this.ctx.moveTo(x, y + height);\n this.ctx.lineTo(x + width, y + height);\n this.ctx.stroke();\n // 左边框\n this.ctx.beginPath();\n this.setStyle({ strokeStyle: left ?? this.colors.transparent });\n this.ctx.moveTo(x, y);\n this.ctx.lineTo(x, y + height);\n this.ctx.stroke();\n }\n }\n\n // 换行文本绘制\n public wrapText(options: AITableWrapText) {\n const {\n x,\n y,\n text,\n maxWidth,\n lineHeight,\n maxRow = DEFAULT_WRAP_TEXT_MAX_ROW,\n fontSize = DEFAULT_FONT_SIZE,\n fillStyle = this.colors.gray800,\n textAlign = DEFAULT_TEXT_ALIGN_LEFT,\n verticalAlign = DEFAULT_TEXT_VERTICAL_ALIGN_TOP,\n fontWeight = DEFAULT_FONT_WEIGHT,\n textDecoration = DEFAULT_TEXT_DECORATION,\n fieldType,\n needDraw = false\n } = options;\n let offsetX = 0;\n let offsetY = 0;\n const baselineOffset = verticalAlign === DEFAULT_TEXT_VERTICAL_ALIGN_TOP ? fontSize / 2 : 0;\n const fontStyle = `${fontWeight}-${fontSize}px`;\n const isUnderline = textDecoration === 'underline';\n const textRenderer = (textDataList: any[]) => {\n textDataList.forEach((data) => {\n const { offsetX, offsetY, text, width, linkUrl } = data;\n this.ctx.fillText(text, x + offsetX, y + offsetY + baselineOffset);\n if (linkUrl || isUnderline) {\n this.line({\n x: x + offsetX,\n y: y + offsetY + AI_TABLE_OFFSET,\n points: [0, fontSize, width, fontSize],\n stroke: fillStyle\n });\n }\n });\n };\n\n if (fillStyle) this.setStyle({ fillStyle });\n this.ctx.textAlign = textAlign;\n\n const cacheKey = `${fontStyle}-${maxRow}-${maxWidth || 0}-${fieldType}-${text}`;\n const cacheTextData = textDataCache.get(cacheKey);\n if (cacheTextData) {\n if (this.needDraw && needDraw) {\n textRenderer(cacheTextData.data);\n }\n return cacheTextData;\n }\n\n const resultData: AITableWrapTextData = [];\n // 准确切分包含表情符号的字符串\n const arrText = graphemeSplitter.splitGraphemes(text);\n const textLength = arrText.length;\n const ellipsisWidth = this.ctx.measureText('…').width;\n let showText = ''; // 每个片段显示的文本\n let showTextWidth = 0; // 每段的宽度\n let showLineWidth = 0; // 当前每行显示文字的宽度\n let rowCount = 0;\n\n const isEllipsis = this.textEllipsis({ text, maxWidth: maxWidth }).isEllipsis;\n\n for (let n = 0; n < textLength; n++) {\n const curText = arrText[n];\n const isLineBreak = ['\\n', '\\r'].includes(curText);\n const singleText = isLineBreak ? '' : curText;\n const composeText = showText + singleText;\n const isLimitRow = maxRow ? rowCount >= maxRow - 1 : false;\n const singleTextWidth = isLineBreak ? 0 : this.ctx.measureText(singleText).width;\n showLineWidth += singleTextWidth;\n const diffWidth = isLimitRow ? showLineWidth + (isEllipsis ? ellipsisWidth : 0) : showLineWidth;\n const isLineEnd = diffWidth > maxWidth;\n\n // 遇到换行符或行尾\n if ((isLineEnd || isLineBreak) && rowCount < maxRow) {\n const isLastLetter = n === arrText.length - 1;\n resultData.push({\n offsetX,\n offsetY,\n width: Math.ceil(showTextWidth),\n text: isLimitRow ? (isLastLetter ? composeText : `${showText}…`) : showText\n });\n showText = singleText;\n offsetX = 0;\n showTextWidth = singleTextWidth;\n showLineWidth = singleTextWidth;\n\n if (isLimitRow) {\n showText = '';\n break;\n }\n rowCount++;\n offsetY += lineHeight;\n continue;\n }\n\n showText = composeText;\n showTextWidth += singleTextWidth;\n }\n\n if (showText) {\n resultData.push({\n offsetX,\n offsetY,\n width: Math.ceil(showTextWidth),\n text: showText\n });\n }\n\n if (this.needDraw && needDraw) {\n textRenderer(resultData);\n }\n\n const res = {\n height: rowCount < maxRow ? offsetY + lineHeight : offsetY,\n data: resultData\n };\n\n textDataCache.set(cacheKey, res);\n return res;\n }\n\n // 绘制单行文本\n public text(options: AITableText) {\n const {\n x,\n y,\n text,\n fontSize = DEFAULT_FONT_SIZE,\n fillStyle = this.colors.gray800,\n textAlign = DEFAULT_TEXT_ALIGN_LEFT,\n verticalAlign = DEFAULT_TEXT_VERTICAL_ALIGN_TOP,\n fontWeight = DEFAULT_FONT_WEIGHT,\n textDecoration = DEFAULT_TEXT_DECORATION\n } = options;\n\n const fontStyle = `${fontWeight} ${fontSize}px ${DEFAULT_FONT_FAMILY}`;\n\n if (textDecoration === 'underline') {\n const textWidth = getTextWidth(this.ctx, text, fontStyle);\n this.line({\n x: x,\n y: y + AI_TABLE_OFFSET,\n points: [0, fontSize, textWidth, fontSize],\n stroke: fillStyle\n });\n }\n\n const baselineOffset = verticalAlign === DEFAULT_TEXT_VERTICAL_ALIGN_TOP ? fontSize / 2 : 0;\n if (fillStyle) this.setStyle({ fillStyle });\n this.ctx.textAlign = textAlign;\n this.ctx.font = fontStyle;\n this.ctx.fillText(text, x, y + baselineOffset);\n }\n\n // 绘制标签\n public tag(options: AITableLabel): { width: number; height: number } {\n const {\n x,\n y,\n width,\n height,\n text,\n radius,\n background,\n color = this.colors.gray800,\n fontSize = AI_TABLE_TAG_FONT_SIZE,\n fontWeight = DEFAULT_FONT_WEIGHT,\n stroke\n } = options;\n\n // 背景\n this.rect({\n x,\n y,\n width,\n height,\n radius,\n fill: background,\n stroke\n });\n\n this.text({\n x: x + AI_TABLE_TAG_PADDING,\n y: y + (height - fontSize) / 2,\n text,\n fillStyle: color,\n fontSize,\n fontWeight\n });\n\n return {\n width,\n height\n };\n }\n\n public image(options: AITableImage, crossOrigin?: boolean, allowDefault?: boolean) {\n const { x, y, url, width, height, opacity = 1, clipFunc } = options;\n const colors = AITable.getColors();\n if (!url) {\n return;\n }\n const image = imageCache.getImage(url);\n // Not loaded successfully\n if (image === false) {\n if (allowDefault) {\n this.path({\n x,\n y: y + 2,\n data: WebOutlinedPath,\n size: 16,\n fill: colors.gray600\n });\n }\n return;\n }\n // Unloaded\n if (image == null) {\n return imageCache.loadImage(url, url, { crossOrigin });\n }\n const isOrigin = opacity === 1;\n\n if (!clipFunc && isOrigin) {\n return this.ctx.drawImage(image, x, y, width, height);\n }\n\n if (!clipFunc && !isOrigin) {\n this.ctx.save();\n this.ctx.globalAlpha = opacity;\n this.ctx.drawImage(image, x, y, width, height);\n this.ctx.restore();\n return;\n }\n\n if (clipFunc) {\n this.ctx.save();\n this.ctx.beginPath();\n clipFunc(this.ctx);\n this.ctx.clip();\n this.ctx.globalAlpha = opacity;\n this.ctx.drawImage(image, x, y, width, height);\n this.ctx.restore();\n }\n }\n\n public avatar(options: {\n x: number;\n y: number;\n url: string;\n id: string;\n title: string;\n type?: AITableAvatarType;\n size?: AITableAvatarSize;\n opacity?: number;\n bgColor?: string;\n }) {\n const {\n x = 0,\n y = 0,\n id,\n url,\n title,\n bgColor = this.colors.white,\n size = AITableAvatarSize.size36,\n type = AITableAvatarType.member,\n opacity = 1\n } = options;\n\n if (title == null || id == null) return null;\n const colors = AITable.getColors();\n const avatarSrc = url || '';\n const avatarName = title;\n const avatarBg = avatarSrc ? colors.white : bgColor;\n\n switch (type) {\n case AITableAvatarType.member: {\n const radius = size / 2;\n if (!avatarSrc) {\n this.ctx.fillStyle = avatarBg;\n this.ctx.beginPath();\n this.ctx.arc(x + radius, y + radius, radius, 0, Math.PI * 2, false);\n this.ctx.closePath();\n this.ctx.fill();\n return this.text({\n x: x + radius,\n y: y + radius,\n text: avatarName,\n textAlign: DEFAULT_TEXT_ALIGN_CENTER,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n fontSize: FONT_SIZE_SM,\n fillStyle: colors.white\n });\n }\n return this.image({\n name: avatarSrc,\n x,\n y,\n url: avatarSrc,\n width: size,\n height: size,\n clipFunc: (ctx) => {\n ctx.fillStyle = avatarBg;\n ctx.arc(x + radius, y + radius, radius, 0, Math.PI * 2, false);\n ctx.fill();\n },\n opacity\n });\n }\n }\n }\n\n /**\n * 方法将椭圆弧的端点参数化形式转换为中心参数化形式\n * 接受弧线的端点参数,并计算出弧线的中心点坐标、起始角度、终止角度等参数\n * 返回值:一个包含中心点坐标、半径、旋转角度、起始角度以及角度差的对象,这些参数可以直接用于绘制椭圆弧\n * @returns [cx, cy, rx, ry, theta, dTheta, psi, fs]\n */\n private convertEndpointToCenterParameterization(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n fa: any,\n fs: number,\n rx: number,\n ry: number,\n psiDeg: number\n ) {\n const psi = psiDeg * (Math.PI / 180.0);\n const xp = (Math.cos(psi) * (x1 - x2)) / 2.0 + (Math.sin(psi) * (y1 - y2)) / 2.0;\n const yp = (-1 * Math.sin(psi) * (x1 - x2)) / 2.0 + (Math.cos(psi) * (y1 - y2)) / 2.0;\n\n const lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n let f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) / (rx * rx * (yp * yp) + ry * ry * (xp * xp)));\n\n if (fa === fs) {\n f *= -1;\n }\n if (isNaN(f)) {\n f = 0;\n }\n\n const cxp = (f * rx * yp) / ry;\n const cyp = (f * -ry * xp) / rx;\n\n const cx = (x1 + x2) / 2.0 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;\n const cy = (y1 + y2) / 2.0 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;\n\n const vMag = function (v: number[]) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n };\n const vRatio = function (u: number[], v: number[]) {\n return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n };\n const vAngle = function (u: number[], v: number[]) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n };\n const theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);\n const u = [(xp - cxp) / rx, (yp - cyp) / ry];\n const v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n let dTheta = vAngle(u, v);\n\n if (vRatio(u, v) <= -1) {\n dTheta = Math.PI;\n }\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n if (fs === 0 && dTheta > 0) {\n dTheta = dTheta - 2 * Math.PI;\n }\n if (fs === 1 && dTheta < 0) {\n dTheta = dTheta + 2 * Math.PI;\n }\n return [cx, cy, rx, ry, theta, dTheta, psi, fs];\n }\n\n /**\n * 计算两个点 (x1, y1) 和 (x2, y2) 之间的直线距离\n * @returns 两个点 (x1, y1) 和 (x2, y2) 之间的直线距离,单位与输入的坐标值相同\n */\n private getLineLength(x1: number, y1: number, x2: number, y2: number) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n }\n\n /**\n * 计算三次贝塞尔曲线上给定参数 t 对应的点的坐标.\n * 可以在指定的 t 参数下计算出曲线上精确的一个点,这个点可以用于绘制平滑曲线的一部分\n * @param pct - 0 到 1 之间的参数,用于指定曲线上的点的位置\n * @param P1x - 曲线的起点 x 坐标\n * @param P1y - 曲线的起点 y 坐标\n * @param P2x - 曲线的第一个控制点 x 坐标\n * @param P2y - 曲线的第一个控制点 y 坐标\n * @param P3x - 曲线的第二个控制点 x 坐标\n * @param P3y - 曲线的第二个控制点 y 坐标\n * @param P4x - 曲线的终点 x 坐标\n * @param P4y - 曲线的终点 y 坐标\n * @returns\n */\n private getPointOnCubicBezier(\n pct: number,\n P1x: number,\n P1y: number,\n P2x: number,\n P2y: number,\n P3x: number,\n P3y: number,\n P4x: number,\n P4y: number\n ) {\n function CB1(t: number) {\n return t * t * t;\n }\n\n function CB2(t: number) {\n return 3 * t * t * (1 - t);\n }\n\n function CB3(t: number) {\n return 3 * t * (1 - t) * (1 - t);\n }\n\n function CB4(t: number) {\n return (1 - t) * (1 - t) * (1 - t);\n }\n\n const x = P4x * CB1(pct) + P3x * CB2(pct) + P2x * CB3(pct) + P1x * CB4(pct);\n const y = P4y * CB1(pct) + P3y * CB2(pct) + P2y * CB3(pct) + P1y * CB4(pct);\n\n return {\n x: x,\n y: y\n };\n }\n\n /**\n * 计算二次贝塞尔曲线上给定参数 t 对应的点的坐标\n * @param pct - 0 到 1 之间的参数,用于指定曲线上的点的位置\n * @param P1x - 曲线的起点 x 坐标\n * @param P1y - 曲线的起点 y 坐标\n * @param P2x - 曲线的控制点 x 坐标\n * @param P2y - 曲线的控制点 y 坐标\n * @param P3x - 曲线的终点 x 坐标\n * @param P3y - 曲线的终点 y 坐标\n * @returns\n */\n private getPointOnQuadraticBezier(pct: number, P1x: number, P1y: number, P2x: number, P2y: number, P3x: number, P3y: number) {\n function QB1(t: number) {\n return t * t;\n }\n\n function QB2(t: number) {\n return 2 * t * (1 - t);\n }\n\n function QB3(t: number) {\n return (1 - t) * (1 - t);\n }\n\n const x = P3x * QB1(pct) + P2x * QB2(pct) + P1x * QB3(pct);\n const y = P3y * QB1(pct) + P2y * QB2(pct) + P1y * QB3(pct);\n\n return {\n x: x,\n y: y\n };\n }\n\n /**\n * 计算椭圆弧上给定角度 θ 对应的点的坐标\n * @param cx - 椭圆的中心点 x 坐标\n * @param cy - 椭圆的中心点 y 坐标\n * @param rx - 椭圆的 x 轴半径\n * @param ry - 椭圆的 y 轴半径\n * @param theta - 椭圆弧的起始角度\n * @param psi - 椭圆弧的旋转角度\n * @returns\n */\n private getPointOnEllipticalArc(cx: number, cy: number, rx: number, ry: number, theta: number, psi: number) {\n const cosPsi = Math.cos(psi);\n const sinPsi = Math.sin(psi);\n const pt = {\n x: rx * Math.cos(theta),\n y: ry * Math.sin(theta)\n };\n return {\n x: cx + (pt.x * cosPsi - pt.y * sinPsi),\n y: cy + (pt.x * sinPsi + pt.y * cosPsi)\n };\n }\n\n /**\n * 计算基于不同路径命令的长度\n * @param x - 起点 x 坐标\n * @param y - 起点 y 坐标\n * @param cmd - 路径命令\n * @param points - 与路径命令相关的点的坐标或控制参数\n * @returns\n */\n private calcLength(x: number, y: number, cmd: string, points: number[]) {\n let len, p1, p2, t;\n\n switch (cmd) {\n case 'L':\n return this.getLineLength(x, y, points[0], points[1]);\n case 'C':\n len = 0.0;\n p1 = this.getPointOnCubicBezier(0, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnCubicBezier(t, x, y, points[0], points[1], points[2], points[3], points[4], points[5]);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n return len;\n case 'Q':\n len = 0.0;\n p1 = this.getPointOnQuadraticBezier(0, x, y, points[0], points[1], points[2], points[3]);\n for (t = 0.01; t <= 1; t += 0.01) {\n p2 = this.getPointOnQuadraticBezier(t, x, y, points[0], points[1], points[2], points[3]);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n return len;\n case 'A':\n len = 0.0;\n const start = points[4];\n const dTheta = points[5];\n const end = points[4] + dTheta;\n let inc = Math.PI / 180.0;\n if (Math.abs(start - end) < inc) {\n inc = Math.abs(start - end);\n }\n p1 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], start, 0);\n if (dTheta < 0) {\n for (t = start - inc; t > end; t -= inc) {\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n } else {\n for (t = start + inc; t < end; t += inc) {\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], t, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n p1 = p2;\n }\n }\n p2 = this.getPointOnEllipticalArc(points[0], points[1], points[2], points[3], end, 0);\n len += this.getLineLength(p1.x, p1.y, p2.x, p2.y);\n return len;\n }\n return 0;\n }\n\n /**\n * 解析 SVG 路径数据字符串,将其转换为一个包含路径命令和坐标点的数组对象\n * @param data - SVG 路径数据字符串\n * @returns\n */\n private parsePathData(data: string) {\n if (!data) {\n return [];\n }\n\n let cs = data;\n const cc = ['m', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z', 'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'];\n\n cs = cs.replace(new RegExp(' ', 'g'), ',');\n for (let n = 0; n < cc.length; n++) {\n cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);\n }\n const arr = cs.split('|');\n const ca: any = [];\n const coords: any = [];\n let cpx = 0;\n let cpy = 0;\n\n const re = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:e[-+]?\\d+)?)/gi;\n let match: RegExpExecArray | null;\n for (let n = 1; n < arr.length; n++) {\n let str = arr[n];\n let c = str.charAt(0);\n str = str.slice(1);\n\n coords.length = 0;\n while ((match = re.exec(str))) {\n coords.push(match[0]);\n }\n\n const p: any = [];\n\n for (let j = 0, jlen = coords.length; j < jlen; j++) {\n if (coords[j] === '00') {\n p.push(0, 0);\n continue;\n }\n const parsed = parseFloat(coords[j]);\n if (!isNaN(parsed)) {\n p.push(parsed);\n } else {\n p.push(0);\n }\n }\n\n while (p.length > 0) {\n if (isNaN(p[0])) {\n break;\n }\n\n let cmd: string | null = null;\n let points: any = [];\n const startX = cpx;\n const startY = cpy;\n let prevCmd, ctlPtx, ctlPty;\n let rx, ry, psi, fa, fs, x1, y1;\n\n switch (c) {\n case 'l':\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'L':\n cpx = p.shift();\n cpy = p.shift();\n points.push(cpx, cpy);\n break;\n case 'm':\n const dx = p.shift();\n const dy = p.shift();\n cpx += dx;\n cpy += dy;\n cmd = 'M';\n if (ca.length > 2 && ca[ca.length - 1].command === 'z') {\n for (let idx = ca.length - 2; idx >= 0; idx--) {\n if (ca[idx].command === 'M') {\n cpx = ca[idx].points[0] + dx;\n cpy = ca[idx].points[1] + dy;\n break;\n }\n }\n }\n points.push(cpx, cpy);\n c = 'l';\n break;\n case 'M':\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'M';\n points.push(cpx, cpy);\n c = 'L';\n break;\n\n case 'h':\n cpx += p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'H':\n cpx = p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'v':\n cpy += p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'V':\n cpy = p.shift();\n cmd = 'L';\n points.push(cpx, cpy);\n break;\n case 'C':\n points.push(p.shift(), p.shift(), p.shift(), p.shift());\n cpx = p.shift();\n cpy = p.shift();\n points.push(cpx, cpy);\n break;\n case 'c':\n points.push(cpx + p.shift(), cpy + p.shift(), cpx + p.shift(), cpy + p.shift());\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'C';\n points.push(cpx, cpy);\n break;\n case 'S':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'C') {\n ctlPtx = cpx + (cpx - prevCmd.points[2]);\n ctlPty = cpy + (cpy - prevCmd.points[3]);\n }\n points.push(ctlPtx, ctlPty, p.shift(), p.shift());\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'C';\n points.push(cpx, cpy);\n break;\n case 's':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'C') {\n ctlPtx = cpx + (cpx - prevCmd.points[2]);\n ctlPty = cpy + (cpy - prevCmd.points[3]);\n }\n points.push(ctlPtx, ctlPty, cpx + p.shift(), cpy + p.shift());\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'C';\n points.push(cpx, cpy);\n break;\n case 'Q':\n points.push(p.shift(), p.shift());\n cpx = p.shift();\n cpy = p.shift();\n points.push(cpx, cpy);\n break;\n case 'q':\n points.push(cpx + p.shift(), cpy + p.shift());\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'Q';\n points.push(cpx, cpy);\n break;\n case 'T':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'Q') {\n ctlPtx = cpx + (cpx - prevCmd.points[0]);\n ctlPty = cpy + (cpy - prevCmd.points[1]);\n }\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'Q';\n points.push(ctlPtx, ctlPty, cpx, cpy);\n break;\n case 't':\n ctlPtx = cpx;\n ctlPty = cpy;\n prevCmd = ca[ca.length - 1];\n if (prevCmd.command === 'Q') {\n ctlPtx = cpx + (cpx - prevCmd.points[0]);\n ctlPty = cpy + (cpy - prevCmd.points[1]);\n }\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'Q';\n points.push(ctlPtx, ctlPty, cpx, cpy);\n break;\n case 'A':\n rx = p.shift();\n ry = p.shift();\n psi = p.shift();\n fa = p.shift();\n fs = p.shift();\n x1 = cpx;\n y1 = cpy;\n cpx = p.shift();\n cpy = p.shift();\n cmd = 'A';\n points = this.convertEndpointToCenterParameterization(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);\n break;\n case 'a':\n rx = p.shift();\n ry = p.shift();\n psi = p.shift();\n fa = p.shift();\n fs = p.shift();\n x1 = cpx;\n y1 = cpy;\n cpx += p.shift();\n cpy += p.shift();\n cmd = 'A';\n points = this.convertEndpointToCenterParameterization(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);\n break;\n }\n\n ca.push({\n command: cmd || c,\n points: points,\n start: {\n x: startX,\n y: startY\n },\n pathLength: this.calcLength(startX, startY, cmd || c, points)\n });\n }\n\n if (c === 'z' || c === 'Z') {\n ca.push({\n command: 'z',\n points: [],\n start: undefined,\n pathLength: 0\n });\n }\n }\n\n return ca;\n }\n\n /**\n * 根据传入的路径数据 data 在画布上绘制路径\n * @param options\n */\n public path(options: { x: number; y: number; data: string; size?: number; scaleX?: number; scaleY?: number; fill: string }) {\n const { x, y, scaleX = 1, scaleY = 1, data, fill } = options;\n const dataArray = this.parsePathData(data);\n\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.fillStyle = fill;\n this.ctx.translate(x, y);\n this.ctx.scale(scaleX, scaleY);\n let isClosed = false;\n for (let n = 0; n < dataArray.length; n++) {\n const c = dataArray[n].command;\n const p = dataArray[n].points;\n switch (c) {\n case 'L':\n this.ctx.lineTo(p[0], p[1]);\n break;\n case 'M':\n this.ctx.moveTo(p[0], p[1]);\n break;\n case 'C':\n this.ctx.bezierCurveTo(p[0], p[1], p[2], p[3], p[4], p[5]);\n break;\n case 'Q':\n this.ctx.quadraticCurveTo(p[0], p[1], p[2], p[3]);\n break;\n case 'A':\n const cx = p[0];\n const cy = p[1];\n const rx = p[2];\n const ry = p[3];\n const theta = p[4];\n const dTheta = p[5];\n const psi = p[6];\n const fs = p[7];\n const r = rx > ry ? rx : ry;\n const scaleX = rx > ry ? 1 : rx / ry;\n const scaleY = rx > ry ? ry / rx : 1;\n\n this.ctx.translate(cx, cy);\n this.ctx.rotate(psi);\n this.ctx.scale(scaleX, scaleY);\n this.ctx.arc(0, 0, r, theta, theta + dTheta, (1 - fs) as any);\n this.ctx.scale(1 / scaleX, 1 / scaleY);\n this.ctx.rotate(-psi);\n this.ctx.translate(-cx, -cy);\n\n break;\n case 'z':\n isClosed = true;\n this.ctx.closePath();\n break;\n }\n }\n\n if (!isClosed) {\n this.ctx.stroke();\n } else {\n this.ctx.fill();\n }\n this.ctx.restore();\n }\n}\n\nexport const drawer = new Drawer();\n","import { AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_OFFSET } from '../../constants/table';\nimport { AITableCell, AITableLayout } from '../../types';\nimport { Drawer } from './drawer';\n\n/**\n * 用于处理表格行或单元格的布局和绘制。\n * 它提供了基本的布局信息(如位置、大小等),并定义了常用的绘图方法(如渲染缩进区域、添加新字段的空白区域等)。\n * 该类继承自 Drawer,并被其他更具体的布局类(如 RecordRowLayout)扩展和使用\n */\nexport class Layout extends Drawer {\n // 定义当前单元格或行的位置\n protected x = 0;\n protected y = 0;\n // 行高\n protected rowHeight = 0;\n // 列宽\n protected columnWidth = 0;\n // 行索引\n protected rowIndex = 0;\n // 列索引\n protected columnIndex = 0;\n // 列数\n protected columnCount = 0;\n\n protected containerWidth = 0;\n\n // 用于初始化或重置布局的基本属性。这个方法通常在每次渲染新的一行或单元格时调用,确保布局信息是最新的\n init({ x, y, rowIndex, columnIndex, rowHeight, columnWidth, columnCount, containerWidth }: AITableLayout) {\n this.x = x;\n this.y = y;\n this.rowIndex = rowIndex;\n this.columnIndex = columnIndex;\n this.rowHeight = rowHeight;\n this.columnWidth = columnWidth;\n this.columnCount = columnCount;\n this.containerWidth = containerWidth;\n }\n\n // 当前单元格是否是行的第一列\n protected get isFirst() {\n return this.columnIndex === 0;\n }\n\n // 当前单元格是否是行的最后一列\n protected get isLast() {\n return this.columnIndex === this.columnCount - 1;\n }\n\n protected renderAddFieldBlank({ style, isHoverRow }: Pick<AITableCell, 'isHoverRow' | 'style'>) {\n const rowHeight = this.rowHeight;\n const fill = style?.fill || (isHoverRow ? this.colors.gray80 : this.colors.transparent);\n const addFieldBlankX = this.x + this.columnWidth + AI_TABLE_OFFSET;\n this.rect({\n x: addFieldBlankX,\n y: this.y + AI_TABLE_OFFSET,\n width:\n this.containerWidth - addFieldBlankX < AI_TABLE_FIELD_ADD_BUTTON_WIDTH\n ? AI_TABLE_FIELD_ADD_BUTTON_WIDTH\n : this.containerWidth - addFieldBlankX,\n height: rowHeight,\n fill\n });\n }\n}\n","import {\n AddOutlinedPath,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_ADD_BUTTON_WIDTH,\n AI_TABLE_ICON_COMMON_SIZE,\n AI_TABLE_OFFSET,\n AI_TABLE_ROW_HEAD_SIZE,\n AI_TABLE_ROW_HEAD_WIDTH\n} from '../../constants';\nimport { AITableCell } from '../../types';\nimport { Layout } from './layout-drawer';\n\nexport class AddRowLayout extends Layout {\n override renderAddFieldBlank({ isHoverRow }: Pick<AITableCell, 'isHoverRow'>) {\n super.renderAddFieldBlank({ isHoverRow });\n const rowHeight = this.rowHeight;\n const defaultWidth = AI_TABLE_FIELD_ADD_BUTTON_WIDTH;\n const width = this.containerWidth - this.x < defaultWidth ? defaultWidth : this.containerWidth - this.x;\n this.line({\n x: this.x + this.columnWidth,\n y: this.y,\n points: [0, rowHeight, width, rowHeight],\n stroke: this.colors.gray200\n });\n }\n\n private renderCell({ width, isHoverRow }: Pick<AITableCell, 'width' | 'isHoverRow'>) {\n const x = this.x;\n const y = this.y;\n const rowHeight = this.rowHeight;\n const fill = isHoverRow ? this.colors.gray80 : this.colors.transparent;\n\n this.rect({\n x,\n y: y + AI_TABLE_OFFSET,\n width: width as number,\n height: rowHeight,\n fill\n });\n this.line({\n x,\n y: y + rowHeight,\n points: [0, 0, width as number, 0],\n stroke: this.colors.gray200\n });\n }\n\n private renderFirstCell({ isHoverRow }: Pick<AITableCell, 'isHoverRow'>) {\n if (!this.isFirst) return;\n const y = this.y;\n const rowHeight = this.rowHeight;\n const columnWidth = this.columnWidth;\n const frozenOffset = AI_TABLE_OFFSET;\n const fill = isHoverRow ? this.colors.gray80 : this.colors.transparent;\n\n this.rect({\n x: frozenOffset,\n y: y + AI_TABLE_OFFSET,\n width: columnWidth + AI_TABLE_ROW_HEAD_WIDTH - frozenOffset + 1,\n height: rowHeight,\n fill\n });\n this.line({\n x: frozenOffset,\n y,\n points: [0, rowHeight, columnWidth + AI_TABLE_ROW_HEAD_WIDTH - frozenOffset + 1, rowHeight],\n stroke: this.colors.gray200\n });\n\n this.path({\n x: AI_TABLE_CELL_PADDING,\n y: y + (rowHeight - AI_TABLE_ICON_COMMON_SIZE) / 2 - AI_TABLE_OFFSET,\n data: AddOutlinedPath,\n size: AI_TABLE_ROW_HEAD_SIZE,\n fill: this.colors.gray600\n });\n }\n\n private renderLastCell({ isHoverRow }: Pick<AITableCell, 'isHoverRow'>) {\n if (!this.isLast) return;\n const width = this.columnWidth;\n if (!this.isFirst) {\n this.renderCell({\n width,\n isHoverRow\n });\n }\n this.renderAddFieldBlank({ isHoverRow });\n }\n\n private renderCommonCell({ isHoverRow }: Pick<AITableCell, 'isHoverRow'>) {\n if (this.isFirst || this.isLast) return;\n this.renderCell({\n width: this.columnWidth,\n isHoverRow\n });\n }\n\n render({ isHoverRow }: Pick<AITableCell, 'isHoverRow'>) {\n this.renderFirstCell({\n isHoverRow\n });\n this.renderCommonCell({\n isHoverRow\n });\n this.renderLastCell({\n isHoverRow\n });\n }\n}\n\nexport const addRowLayout = new AddRowLayout();\n","import _ from 'lodash';\nimport {\n AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE,\n AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE,\n AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET,\n AI_TABLE_CELL_EMOJI_PADDING,\n AI_TABLE_CELL_EMOJI_SIZE,\n AI_TABLE_CELL_MAX_ROW_COUNT,\n AI_TABLE_CELL_MEMBER_ITEM_HEIGHT,\n AI_TABLE_CELL_MEMBER_ITEM_PADDING,\n AI_TABLE_CELL_MULTI_DOT_RADIUS,\n AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP,\n AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH,\n AI_TABLE_CELL_MULTI_PADDING_LEFT,\n AI_TABLE_CELL_MULTI_PADDING_TOP,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_COMMON_FONT_SIZE,\n AI_TABLE_DOT_RADIUS,\n AI_TABLE_MEMBER_AVATAR_SIZE,\n AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT,\n AI_TABLE_MEMBER_ITEM_PADDING_RIGHT,\n AI_TABLE_MIN_TEXT_WIDTH,\n AI_TABLE_OFFSET,\n AI_TABLE_OPTION_ITEM_FONT_SIZE,\n AI_TABLE_OPTION_ITEM_HEIGHT,\n AI_TABLE_OPTION_ITEM_PADDING,\n AI_TABLE_OPTION_ITEM_RADIUS,\n AI_TABLE_PIECE_RADIUS,\n AI_TABLE_PIECE_WIDTH,\n AI_TABLE_PROGRESS_BAR_HEIGHT,\n AI_TABLE_PROGRESS_BAR_RADIUS,\n AI_TABLE_PROGRESS_TEXT_Width,\n AI_TABLE_ROW_BLANK_HEIGHT,\n AI_TABLE_TAG_FONT_SIZE,\n AI_TABLE_TAG_PADDING,\n AI_TABLE_TEXT_GAP,\n Colors,\n DEFAULT_FONT_FAMILY,\n DEFAULT_FONT_SIZE,\n DEFAULT_FONT_WEIGHT,\n DEFAULT_TEXT_ALIGN_LEFT,\n DEFAULT_TEXT_ALIGN_RIGHT,\n DEFAULT_TEXT_DECORATION,\n DEFAULT_TEXT_LINE_HEIGHT,\n DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n FONT_SIZE_SM,\n StarFill\n} from '../../constants';\nimport { AITable, AITableField, AITableFieldType, AITableSelectOptionStyle, MemberSettings, RateFieldValue } from '../../core';\nimport { AITableAvatarSize, AITableAvatarType, AITableMemberType, AITableRender, AITableSelectField } from '../../types';\nimport { getAvatarBgColor, getAvatarShortName, getTextWidth } from '../../utils';\nimport { Drawer } from './drawer';\n\n/**\n * 处理和渲染表格单元格的内容\n */\nexport class CellDrawer extends Drawer {\n // 样式初始化\n public initStyle(field: AITableField, styleProps: { fontWeight: any }): void | null {\n const { type: fieldType } = field;\n const { fontWeight = DEFAULT_FONT_WEIGHT } = styleProps;\n\n switch (fieldType) {\n case AITableFieldType.text:\n case AITableFieldType.date:\n case AITableFieldType.createdAt:\n case AITableFieldType.updatedAt:\n case AITableFieldType.rate:\n case AITableFieldType.progress:\n case AITableFieldType.member:\n case AITableFieldType.createdBy:\n case AITableFieldType.updatedBy:\n return this.setStyle({ fontSize: DEFAULT_FONT_SIZE, fontWeight });\n default:\n return null;\n }\n }\n\n // 单元格渲染\n public renderCell(render: AITableRender, ctx?: CanvasRenderingContext2D | undefined) {\n const { field } = render;\n const fieldType = field.type;\n\n switch (fieldType) {\n case AITableFieldType.text:\n case AITableFieldType.number:\n case AITableFieldType.link:\n return this.renderCellText(render, ctx);\n case AITableFieldType.select:\n return this.renderCellSelect(render, ctx);\n case AITableFieldType.date:\n case AITableFieldType.createdAt:\n case AITableFieldType.updatedAt:\n return this.renderCellDate(render, ctx);\n case AITableFieldType.rate:\n return this.renderCellRate(render, ctx);\n case AITableFieldType.progress:\n return this.renderCellProgress(render, ctx);\n case AITableFieldType.member:\n case AITableFieldType.createdBy:\n case AITableFieldType.updatedBy:\n return this.renderCellMember(render, ctx);\n default:\n return null;\n }\n }\n\n private renderCellText(render: AITableRender, ctx?: any) {\n const { x, y, transformValue, field, columnWidth, style } = render;\n const fieldType = field.type;\n let renderText: string | null = fieldType === AITableFieldType.link ? transformValue.text : transformValue;\n if (renderText == null) {\n return;\n }\n const isSingleLine = !columnWidth;\n const isTextField = fieldType === AITableFieldType.text;\n const isNumberField = fieldType === AITableFieldType.number;\n\n if (isTextField && isSingleLine) {\n renderText = renderText.replace(/\\r|\\n/g, ' ');\n }\n\n const color = style?.color || this.colors.gray800;\n const textAlign = style?.textAlign || DEFAULT_TEXT_ALIGN_LEFT;\n const fontWeight = style?.fontWeight;\n const textMaxWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING;\n const renderX = textAlign === DEFAULT_TEXT_ALIGN_RIGHT ? x + columnWidth - AI_TABLE_CELL_PADDING : x + AI_TABLE_CELL_PADDING;\n const renderY = y + AI_TABLE_ROW_BLANK_HEIGHT / 2;\n const textDecoration = DEFAULT_TEXT_DECORATION;\n\n if (isNumberField) {\n renderText = String(renderText);\n const { text } = this.textEllipsis({\n text: renderText,\n maxWidth: columnWidth && textMaxWidth,\n fontWeight\n });\n if (ctx) {\n let pureText = text;\n this.text({\n x: renderX,\n y: renderY,\n text: pureText,\n textAlign,\n fillStyle: color,\n fontWeight,\n textDecoration,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE\n });\n }\n } else {\n this.wrapText({\n x: renderX,\n y: renderY,\n text: renderText,\n maxWidth: textMaxWidth,\n maxRow: AI_TABLE_CELL_MAX_ROW_COUNT,\n lineHeight: DEFAULT_TEXT_LINE_HEIGHT,\n textAlign,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n fillStyle: fieldType === AITableFieldType.link ? Colors.primary : color,\n fontWeight,\n textDecoration,\n fieldType,\n needDraw: true\n });\n }\n }\n\n private renderCellSelect(render: AITableRender, ctx?: any) {\n const { field } = render;\n if ((field as AITableSelectField).settings?.is_multiple) {\n this.renderCellMultiSelect(render, ctx);\n } else {\n this.renderSingleSelectCell(render, ctx);\n }\n }\n\n private renderCellMultiSelect(render: AITableRender, ctx?: any) {\n const { x, y, field, transformValue, columnWidth } = render;\n if (!transformValue?.length || !Array.isArray(transformValue)) return;\n let currentX = x + AI_TABLE_CELL_PADDING;\n const maxContainerWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING;\n const optionStyle = (field as AITableSelectField).settings.option_style;\n const fontStyle = `${DEFAULT_FONT_WEIGHT} ${AI_TABLE_OPTION_ITEM_FONT_SIZE}px ${DEFAULT_FONT_FAMILY}`;\n const isDotOrPiece = optionStyle === AITableSelectOptionStyle.dot || optionStyle === AITableSelectOptionStyle.piece;\n\n let totalWidth = 0;\n const cellItemInfoMap = new Map();\n let drawableIndex = 0;\n transformValue.forEach((optionId, index) => {\n const item = (field as AITableSelectField).settings.options?.find((option) => option._id === optionId);\n const textWidth = getTextWidth(ctx, item?.text as string, fontStyle);\n totalWidth += textWidth + 2 * AI_TABLE_CELL_PADDING;\n if (index < transformValue.length - 1) {\n totalWidth += AI_TABLE_CELL_MULTI_PADDING_LEFT;\n }\n if (isDotOrPiece) {\n totalWidth += AI_TABLE_CELL_MULTI_DOT_RADIUS * 2 + AI_TABLE_CELL_MULTI_PADDING_LEFT;\n }\n if (totalWidth < maxContainerWidth || totalWidth === maxContainerWidth) {\n drawableIndex = index;\n }\n cellItemInfoMap.set(optionId, { textWidth, item, offset: totalWidth });\n });\n\n const baseWidth = AI_TABLE_MIN_TEXT_WIDTH + AI_TABLE_CELL_PADDING * 2;\n const minWidth = isDotOrPiece ? baseWidth + AI_TABLE_CELL_MULTI_DOT_RADIUS * 2 + AI_TABLE_CELL_MULTI_PADDING_LEFT : baseWidth;\n\n if (transformValue[drawableIndex + 1]) {\n const { offset: currentOffset } = cellItemInfoMap.get(transformValue[drawableIndex]);\n const canDrawerNext = maxContainerWidth - currentOffset > minWidth;\n drawableIndex = canDrawerNext ? drawableIndex + 1 : drawableIndex;\n // 上面过程是 没有 +数字 的情况下最大能放几个;\n const number = transformValue.length - (drawableIndex + 1);\n\n if (number > 0) {\n // 说明有 +数字,重新计算\n const circleWidth = getTextWidth(ctx, `+{number}`, fontStyle) + 2 * AI_TABLE_CELL_PADDING;\n const max = maxContainerWidth - AI_TABLE_CELL_MULTI_PADDING_LEFT - circleWidth;\n // 如果当前已经超出了,看是否能容下当前的,不能就减去 1;\n const currentItemHasOver = currentOffset > max;\n if (currentItemHasOver) {\n const lastOffset = drawableIndex === 0 ? 0 : cellItemInfoMap.get(transformValue[drawableIndex - 1]);\n drawableIndex = max - lastOffset > minWidth ? drawableIndex : drawableIndex - 1;\n } else {\n // 还有剩余空间, 看是否能多渲染一个\n drawableIndex = max - currentOffset > minWidth ? drawableIndex + 1 : drawableIndex;\n }\n }\n }\n\n const circleText = `+${transformValue.length - (drawableIndex + 1)}`;\n const circleWidth =\n transformValue.length - (drawableIndex + 1) > 0 ? getTextWidth(ctx, circleText, fontStyle) + 2 * AI_TABLE_CELL_PADDING : 0;\n // 剩余空间\n let remainSpace = maxContainerWidth - circleWidth - (circleWidth > 0 ? AI_TABLE_CELL_MULTI_PADDING_LEFT : 0);\n\n for (let index = 0; index < transformValue.length; index++) {\n const optionId = transformValue[index];\n const bgConfig = {\n x: currentX,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_HEIGHT) / 2,\n height: AI_TABLE_OPTION_ITEM_HEIGHT,\n radius: AI_TABLE_PIECE_RADIUS,\n fill: Colors.gray100,\n width: 0\n };\n\n const commonItem = (optionStyle: AITableSelectOptionStyle, shape: string) => {\n const baseWidth = isDotOrPiece\n ? AI_TABLE_CELL_MULTI_DOT_RADIUS * 2 + AI_TABLE_CELL_MULTI_PADDING_LEFT + AI_TABLE_CELL_PADDING * 2\n : AI_TABLE_CELL_PADDING * 2;\n if (remainSpace < minWidth) {\n return;\n }\n const { textWidth, item } = cellItemInfoMap.get(optionId);\n const completeWidth = baseWidth + textWidth;\n if (index !== transformValue.length - 1) {\n remainSpace -= AI_TABLE_CELL_MULTI_PADDING_LEFT;\n }\n const bgWidth = remainSpace > completeWidth ? completeWidth : remainSpace;\n bgConfig.width = bgWidth;\n if (isDotOrPiece) {\n this.rect(bgConfig);\n if (shape === 'rect') {\n this.rect({\n x: bgConfig.x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_CELL_MULTI_DOT_RADIUS * 2) / 2,\n width: AI_TABLE_CELL_MULTI_DOT_RADIUS * 2,\n height: AI_TABLE_CELL_MULTI_DOT_RADIUS * 2,\n radius: AI_TABLE_PIECE_RADIUS,\n fill: item?.bg_color ?? item?.color ?? Colors.primary\n });\n } else if (shape === 'arc') {\n this.arc({\n x: bgConfig.x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_CELL_MULTI_DOT_RADIUS * 2) / 2 + AI_TABLE_CELL_MULTI_DOT_RADIUS,\n radius: AI_TABLE_CELL_MULTI_DOT_RADIUS,\n fill: item?.bg_color ?? item?.color ?? Colors.primary\n });\n }\n\n this.text({\n x: bgConfig.x + AI_TABLE_CELL_PADDING + AI_TABLE_CELL_MULTI_DOT_RADIUS * 2 + AI_TABLE_CELL_MULTI_PADDING_LEFT,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_FONT_SIZE) / 2,\n text: this.textEllipsis({\n text: item.text,\n maxWidth: bgWidth - baseWidth,\n fontSize: AI_TABLE_OPTION_ITEM_FONT_SIZE\n }).text,\n fillStyle: Colors.gray700,\n fontSize: AI_TABLE_OPTION_ITEM_FONT_SIZE\n });\n } else if (optionStyle === AITableSelectOptionStyle.tag) {\n this.tag({\n x: bgConfig.x,\n y: bgConfig.y,\n width: bgConfig.width,\n text: this.textEllipsis({\n text: item.text,\n maxWidth: bgWidth - baseWidth,\n fontSize: AI_TABLE_TAG_FONT_SIZE\n }).text,\n radius: AI_TABLE_OPTION_ITEM_RADIUS,\n fontSize: AI_TABLE_TAG_FONT_SIZE,\n height: bgConfig.height,\n color: Colors.white,\n padding: AI_TABLE_CELL_PADDING,\n background: item?.bg_color ?? item?.color ?? Colors.primary\n });\n } else {\n this.rect(bgConfig);\n this.text({\n x: bgConfig.x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_TAG_FONT_SIZE) / 2,\n text: this.textEllipsis({\n text: item.text,\n maxWidth: bgWidth - baseWidth,\n fontSize: AI_TABLE_TAG_FONT_SIZE\n }).text,\n fillStyle: Colors.gray700,\n fontSize: AI_TABLE_TAG_FONT_SIZE\n });\n }\n const currentWidth = bgConfig.width;\n remainSpace -= currentWidth;\n currentX += currentWidth + AI_TABLE_CELL_MULTI_PADDING_LEFT;\n };\n\n switch (optionStyle) {\n case AITableSelectOptionStyle.dot:\n commonItem(AITableSelectOptionStyle.dot, 'arc');\n break;\n case AITableSelectOptionStyle.piece:\n commonItem(AITableSelectOptionStyle.piece, 'rect');\n break;\n case AITableSelectOptionStyle.tag:\n commonItem(AITableSelectOptionStyle.tag, '');\n break;\n default:\n commonItem(AITableSelectOptionStyle.text, '');\n break;\n }\n }\n\n if (circleWidth > 0) {\n if (optionStyle === AITableSelectOptionStyle.tag) {\n this.tag({\n x: currentX,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_HEIGHT) / 2,\n width: circleWidth,\n height: AI_TABLE_OPTION_ITEM_HEIGHT,\n text: circleText,\n background: Colors.gray100,\n color: Colors.gray700,\n radius: AI_TABLE_OPTION_ITEM_RADIUS,\n padding: AI_TABLE_CELL_PADDING,\n fontSize: AI_TABLE_TAG_FONT_SIZE\n });\n } else {\n this.rect({\n x: currentX,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_HEIGHT) / 2,\n width: circleWidth,\n height: AI_TABLE_OPTION_ITEM_HEIGHT,\n fill: Colors.gray100,\n radius: AI_TABLE_PIECE_RADIUS\n });\n this.text({\n x: currentX + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_TAG_FONT_SIZE) / 2,\n text: circleText,\n fillStyle: Colors.gray700,\n fontSize: AI_TABLE_TAG_FONT_SIZE\n });\n }\n }\n }\n\n private renderSingleSelectCell(render: AITableRender, ctx?: any) {\n const { x, y, transformValue, field, columnWidth, isActive } = render;\n const isValid = transformValue && Array.isArray(transformValue);\n if (!isValid || transformValue.length === 0) {\n return;\n }\n if (!transformValue[0]) {\n console.warn(`single select field unexpected value: ${transformValue[0]}`);\n }\n const isOperating = isActive;\n const item = (field as AITableSelectField).settings.options?.find((option) => option._id === transformValue[0]);\n const itemName = item?.text || '';\n const getTextEllipsis = (maxTextWidth: number, fontSize: number = AI_TABLE_COMMON_FONT_SIZE) => {\n maxTextWidth -= isOperating ? AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE - AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET : 0;\n return this.textEllipsis({\n text: itemName,\n maxWidth: columnWidth && maxTextWidth,\n fontSize: fontSize\n });\n };\n if (ctx) {\n ctx.save();\n ctx.globalAlpha = 1;\n const colors = AITable.getColors();\n const optionStyle = (field as AITableSelectField).settings.option_style;\n let background = item?.bg_color ?? item?.color ?? colors.primary;\n const dotMaxTextWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING - AI_TABLE_PIECE_WIDTH - AI_TABLE_TEXT_GAP;\n const borderWidth = 1;\n switch (optionStyle) {\n case AITableSelectOptionStyle.dot:\n // 这里的 AI_TABLE_OFFSET 偏移不确定是为啥(包括 piece 的),只是为了保持和编辑组件中的对齐\n this.arc({\n x: x + AI_TABLE_CELL_PADDING + AI_TABLE_DOT_RADIUS,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_PIECE_WIDTH) / 2 + AI_TABLE_DOT_RADIUS - AI_TABLE_OFFSET,\n radius: AI_TABLE_DOT_RADIUS,\n fill: background\n });\n this.text({\n x: x + AI_TABLE_PIECE_WIDTH + AI_TABLE_TEXT_GAP + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_FONT_SIZE) / 2,\n text: getTextEllipsis(dotMaxTextWidth).text,\n fillStyle: colors.gray800\n });\n break;\n case AITableSelectOptionStyle.piece:\n this.rect({\n x: x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_PIECE_WIDTH) / 2 - AI_TABLE_OFFSET,\n width: AI_TABLE_PIECE_WIDTH,\n height: AI_TABLE_PIECE_WIDTH,\n radius: AI_TABLE_PIECE_RADIUS,\n fill: background\n });\n this.text({\n x: x + AI_TABLE_PIECE_WIDTH + AI_TABLE_TEXT_GAP + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_FONT_SIZE) / 2,\n text: getTextEllipsis(dotMaxTextWidth).text,\n fillStyle: colors.gray800\n });\n break;\n\n case AITableSelectOptionStyle.tag:\n const maxTextWidth = columnWidth - 2 * (AI_TABLE_CELL_PADDING + AI_TABLE_TAG_PADDING);\n const { textWidth, text } = getTextEllipsis(maxTextWidth, AI_TABLE_TAG_FONT_SIZE);\n const width = Math.max(textWidth + 2 * AI_TABLE_TAG_PADDING, AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH);\n this.tag({\n x: x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_HEIGHT) / 2,\n width,\n height: AI_TABLE_OPTION_ITEM_HEIGHT,\n text,\n background,\n color: colors.white,\n radius: AI_TABLE_OPTION_ITEM_RADIUS,\n padding: AI_TABLE_OPTION_ITEM_PADDING,\n fontSize: AI_TABLE_TAG_FONT_SIZE,\n stroke: background\n });\n break;\n default:\n const textMaxTextWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING;\n this.text({\n x: x + AI_TABLE_CELL_PADDING,\n y: y + (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_OPTION_ITEM_FONT_SIZE) / 2,\n text: getTextEllipsis(textMaxTextWidth).text,\n fillStyle: colors.gray800\n });\n break;\n }\n\n ctx.restore();\n }\n }\n\n private renderCellDate(render: AITableRender, ctx?: any) {\n const { x, y, transformValue, columnWidth, style } = render;\n const colors = AITable.getColors();\n let cellText = transformValue;\n\n if (cellText == null || !_.isString(cellText)) {\n return;\n }\n\n const textMaxWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING;\n const { text } = this.textEllipsis({ text: cellText, maxWidth: columnWidth && textMaxWidth });\n if (ctx) {\n const color = style?.color || colors.gray800;\n this.text({\n x: x + AI_TABLE_CELL_PADDING,\n y: y + AI_TABLE_ROW_BLANK_HEIGHT / 2,\n text,\n fillStyle: color,\n fontWeight: style?.fontWeight,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE\n });\n }\n }\n\n private renderCellRate(render: AITableRender, ctx?: CanvasRenderingContext2D | undefined) {\n const { x, y, transformValue: _cellValue } = render;\n const max = 5;\n const cellValue = (_cellValue as RateFieldValue) || 0;\n const size = AI_TABLE_CELL_EMOJI_SIZE;\n\n return [...Array(max).keys()].map((item, index) => {\n const value = index + 1;\n const checked = value <= cellValue;\n const iconX = index * size + AI_TABLE_CELL_PADDING + index * AI_TABLE_CELL_EMOJI_PADDING;\n const iconY = (AI_TABLE_ROW_BLANK_HEIGHT - size) / 2;\n\n if (ctx && checked) {\n this.path({\n x: x + iconX,\n y: y + iconY,\n size: 22,\n data: StarFill,\n fill: this.colors.waring,\n scaleX: 1.14,\n scaleY: 1.14\n });\n }\n });\n }\n\n private renderCellProgress(render: AITableRender, ctx?: any) {\n const { x, y, transformValue, columnWidth, style } = render;\n const colors = AITable.getColors();\n const cellText = transformValue;\n\n if (cellText == null || !_.isNumber(cellText)) {\n return;\n }\n\n const width = columnWidth - 2 * AI_TABLE_CELL_PADDING - AI_TABLE_PROGRESS_TEXT_Width;\n const height = AI_TABLE_PROGRESS_BAR_HEIGHT;\n const textHeight = AI_TABLE_COMMON_FONT_SIZE;\n const offsetX = AI_TABLE_CELL_PADDING;\n const offsetY = (AI_TABLE_ROW_BLANK_HEIGHT - AI_TABLE_PROGRESS_BAR_HEIGHT) / 2;\n const textOffsetY = (AI_TABLE_ROW_BLANK_HEIGHT - textHeight) / 2;\n\n // 绘制背景\n this.rect({\n x: x + offsetX,\n y: y + offsetY,\n width,\n height,\n radius: AI_TABLE_PROGRESS_BAR_RADIUS,\n fill: colors.gray200\n });\n\n // 计算并绘制进度\n const progressWidth = (transformValue / 100) * width;\n this.rect({\n x: x + offsetX,\n y: y + offsetY,\n width: progressWidth,\n height,\n radius: AI_TABLE_PROGRESS_BAR_RADIUS,\n fill: colors.success\n });\n\n this.text({\n x: x + offsetX + width + AI_TABLE_TEXT_GAP,\n y: y + textOffsetY,\n text: `${transformValue}%`,\n fillStyle: colors.gray800\n });\n }\n\n private renderCellMember(render: AITableRender, ctx?: CanvasRenderingContext2D | undefined) {\n const { references, x, y, field, transformValue: _cellValue, rowHeight, columnWidth, isActive } = render;\n const cellValue = _cellValue;\n\n if (!cellValue?.length || !references) {\n return;\n }\n const settings = field.settings as MemberSettings;\n const avatarSize = AI_TABLE_MEMBER_AVATAR_SIZE;\n const itemHeight = AI_TABLE_CELL_MEMBER_ITEM_HEIGHT;\n const isOperating = isActive;\n const isMulti = settings?.is_multiple;\n\n let currentX = AI_TABLE_CELL_PADDING;\n let currentY = (AI_TABLE_ROW_BLANK_HEIGHT - avatarSize) / 2;\n const itemOtherWidth = avatarSize + AI_TABLE_MEMBER_ITEM_PADDING_RIGHT + AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT;\n const maxHeight = isActive ? 130 - AI_TABLE_CELL_MULTI_PADDING_TOP : rowHeight - AI_TABLE_CELL_MULTI_PADDING_TOP;\n const maxTextWidth = isOperating\n ? columnWidth - 2 * AI_TABLE_CELL_PADDING - itemOtherWidth - AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE - 12\n : columnWidth - 2 * AI_TABLE_CELL_PADDING - itemOtherWidth;\n\n const listCount = cellValue.length;\n let isOverflow = false;\n\n for (let index = 0; index < listCount; index++) {\n const userInfo = references?.members[cellValue[index]];\n if (!userInfo) continue;\n\n const { uid, display_name, avatar } = userInfo;\n const type = AITableMemberType.member;\n const itemWidth = AITableAvatarSize.size24 + (isMulti ? AI_TABLE_CELL_MEMBER_ITEM_PADDING : 0);\n\n currentX = AI_TABLE_CELL_PADDING + index * itemWidth;\n\n let realMaxTextWidth = maxTextWidth < 0 ? 0 : maxTextWidth;\n if (index === 0 && isOperating) {\n const operatingMaxWidth = maxTextWidth - (AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE + 4);\n // item No space to display, then perform a line feed\n if (operatingMaxWidth <= 20) {\n currentX = AI_TABLE_CELL_PADDING;\n currentY += AI_TABLE_OPTION_ITEM_HEIGHT + AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP;\n } else {\n realMaxTextWidth = operatingMaxWidth;\n }\n }\n\n let isMore = currentX + itemWidth > columnWidth - 2 * AI_TABLE_CELL_PADDING;\n if (columnWidth != null) {\n // 在非活动状态下,当超出列宽时,不会渲染后续内容\n if (!isActive && currentX >= columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n break;\n }\n // 如果不是非活动状态的最后一行,则换行渲染溢出内容\n if (!isActive && currentX > columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n }\n if (isActive && currentX + itemWidth > columnWidth - AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n currentY += itemHeight;\n }\n if (isActive && currentY >= maxHeight) {\n isOverflow = true;\n }\n }\n\n if (ctx && !isActive) {\n this.avatar({\n x: x + currentX,\n y: y + currentY,\n url: avatar!,\n id: uid!,\n title: getAvatarShortName(display_name),\n bgColor: getAvatarBgColor(display_name!),\n type: AITableAvatarType.member,\n size: AITableAvatarSize.size24\n });\n\n if (isMore) {\n ctx.save();\n ctx.globalAlpha = 0.3;\n this.rect({\n x: x + currentX,\n y: y + currentY,\n width: AITableAvatarSize.size24,\n height: AITableAvatarSize.size24,\n radius: 24,\n fill: this.colors.black\n });\n ctx.restore();\n this.text({\n x: x + currentX + FONT_SIZE_SM / 2,\n y: y + AI_TABLE_ROW_BLANK_HEIGHT / 2,\n fillStyle: this.colors.white,\n fontSize: FONT_SIZE_SM,\n text: `+${listCount - index - 1}`,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE\n });\n }\n }\n }\n }\n}\n\nexport const cellDrawer = new CellDrawer();\n","import {\n AI_TABLE_FIELD_ADD_BUTTON_WIDTH,\n AI_TABLE_FIELD_HEAD_HEIGHT,\n AI_TABLE_OFFSET,\n AI_TABLE_ROW_HEAD_WIDTH,\n DEFAULT_FONT_SIZE\n} from '../../constants';\nimport { DEFAULT_TEXT_ALIGN_CENTER, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE } from '../../constants/text';\nimport { AITable } from '../../core';\nimport { AITableCell } from '../../types';\nimport { Layout } from './layout-drawer';\n\n/**\n * 绘制行的布局,通过直接操作 Canvas 提供高效的渲染方法。\n * 它继承自 Layout 类,包含了用于绘制行中单元格(尤其是首列和尾列)的几个方法\n */\nexport class RecordRowLayout extends Layout {\n // 首列\n private renderFirstCell({ row, style, isHoverRow, isCheckedRow }: AITableCell) {\n if (!this.isFirst) return;\n\n const { fill } = style;\n const y = this.y;\n const rowHeight = this.rowHeight;\n const columnWidth = this.columnWidth;\n const colors = AITable.getColors();\n // 编号的上下边框\n let fillBg = colors.transparent;\n if (isCheckedRow) {\n fillBg = colors.itemActiveBgColor;\n } else if (isHoverRow) {\n fillBg = colors.gray80;\n }\n this.customRect({\n x: AI_TABLE_OFFSET,\n y,\n width: AI_TABLE_ROW_HEAD_WIDTH - AI_TABLE_OFFSET,\n height: rowHeight,\n fill: fillBg,\n strokes: {\n right: colors.gray200,\n bottom: colors.gray200\n }\n });\n // 第一列单元格\n this.rect({\n x: AI_TABLE_ROW_HEAD_WIDTH,\n y,\n width: columnWidth + AI_TABLE_OFFSET,\n height: rowHeight,\n fill: fill,\n stroke: colors.gray200\n });\n\n if (!isCheckedRow && !isHoverRow) {\n // 设置字体样式,居中绘制行号\n this.setStyle({ fontSize: DEFAULT_FONT_SIZE });\n this.text({\n x: AI_TABLE_ROW_HEAD_WIDTH / 2,\n y: y + AI_TABLE_FIELD_HEAD_HEIGHT / 2,\n text: String(row.displayIndex),\n textAlign: DEFAULT_TEXT_ALIGN_CENTER,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE\n });\n }\n }\n\n // 尾列\n private renderLastCell({ style, isHoverRow }: Pick<AITableCell, 'style' | 'isHoverRow'>) {\n if (!this.isLast || this.isFirst) return;\n\n const { fill, stroke } = style;\n const colors = AITable.getColors();\n\n // 背景、边框\n this.rect({\n x: this.x,\n y: this.y,\n width: this.columnWidth,\n height: this.rowHeight,\n fill: fill || colors.white,\n stroke: stroke || colors.gray200\n });\n\n // 延伸到 FIELD_ADD_BUTTON\n super.renderAddFieldBlank({ style, isHoverRow });\n const rowHeight = this.rowHeight;\n const startX = this.x + this.columnWidth;\n const lineWidth =\n this.containerWidth - startX < AI_TABLE_FIELD_ADD_BUTTON_WIDTH ? AI_TABLE_FIELD_ADD_BUTTON_WIDTH : this.containerWidth - startX;\n this.line({\n x: startX,\n y: this.y,\n points: [0, rowHeight, lineWidth, rowHeight],\n stroke: this.colors.gray200\n });\n }\n\n // 绘制中间的普通单元格\n private renderCommonCell({ style }: Pick<AITableCell, 'style'>) {\n if (this.isFirst || this.isLast) return;\n\n const { fill, stroke } = style;\n const colors = AITable.getColors();\n\n // 背景、边框\n this.rect({\n x: this.x,\n y: this.y,\n width: this.columnWidth,\n height: this.rowHeight,\n fill: fill || colors.white,\n stroke: stroke || colors.gray200\n });\n }\n\n render(config: AITableCell) {\n const { row, style, isCheckedRow, isHoverRow } = config;\n this.renderFirstCell({ row, style, isCheckedRow, isHoverRow });\n this.renderCommonCell({ style });\n this.renderLastCell({ style, isHoverRow });\n }\n}\n\nexport const recordRowLayout = new RecordRowLayout();\n","import {\n AI_TABLE_FIELD_HEAD,\n AI_TABLE_FIELD_HEAD_HEIGHT,\n AI_TABLE_OFFSET,\n AI_TABLE_ROW_ADD_BUTTON,\n DEFAULT_FONT_STYLE\n} from '../../constants';\nimport { AITable, AITableQueries, RendererContext } from '../../core';\nimport { AITableAreaType, AITableCellsDrawerConfig, AITableRender, AITableRowType } from '../../types';\nimport { getCellHorizontalPosition, transformCellValue } from '../../utils';\nimport { addRowLayout } from '../drawers/add-row-layout-drawer';\nimport { cellDrawer } from '../drawers/cell-drawer';\nimport { recordRowLayout } from '../drawers/record-row-layout-drawer';\n\n/**\n * 绘制单元格内容的函数\n * 利用 Canvas API 绘制每个单元格的背景颜色、文本以及其他可能的样式。这个函数通常用于自定义表格渲染,尤其是在处理大量数据时,通过直接操作 Canvas 来提高渲染性能\n * @param config\n */\nexport const createCells = (config: AITableCellsDrawerConfig) => {\n const { aiTable, coordinate, references, ctx, rowStartIndex, rowStopIndex, columnStartIndex, columnStopIndex } = config;\n const context = aiTable.context as RendererContext;\n const { rowHeight, columnCount, rowCount } = coordinate;\n const colors = AITable.getColors();\n const visibleColumns = AITable.getVisibleFields(aiTable);\n\n // 初始化绘图上下文, 为后续的绘制操作做准备\n cellDrawer.initCtx(ctx as CanvasRenderingContext2D);\n addRowLayout.initCtx(ctx as CanvasRenderingContext2D);\n recordRowLayout.initCtx(ctx as CanvasRenderingContext2D);\n\n // 遍历列, 确定在哪些列上绘制单元格\n for (let columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n if (columnIndex > columnCount - 1) break;\n\n // 获取该列对应的 field,如果 field 不再展示范围,则跳过该列\n const field = visibleColumns[columnIndex];\n if (field == null) continue;\n\n // 获取该列对应的宽度\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n const x = coordinate.getColumnOffset(columnIndex) + AI_TABLE_OFFSET;\n const isLastColumn = columnIndex === aiTable.fields.length - 1;\n\n if (columnIndex === 1) {\n cellDrawer.initStyle(field, { fontWeight: DEFAULT_FONT_STYLE });\n }\n\n // 遍历行, 从 rowStartIndex 到 rowStopIndex 的所有行,决定将在哪些行上绘制单元格\n for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n if (rowIndex > rowCount - 1) break;\n const row = context.linearRows()[rowIndex];\n const { _id: recordId, type } = row;\n const y = coordinate.getRowOffset(rowIndex) + AI_TABLE_OFFSET;\n const { rowIndex: pointRowIndex, targetName } = context.pointPosition();\n const isHover = pointRowIndex === rowIndex;\n\n switch (type) {\n case AITableRowType.add: {\n const isHoverRow = isHover && targetName === AI_TABLE_ROW_ADD_BUTTON;\n addRowLayout.init({\n x,\n y,\n rowIndex,\n columnIndex,\n columnWidth,\n rowHeight: AI_TABLE_FIELD_HEAD_HEIGHT,\n columnCount,\n containerWidth: coordinate.containerWidth\n });\n addRowLayout.render({\n isHoverRow\n });\n break;\n }\n case AITableRowType.record: {\n let background = colors.white;\n const isCheckedRow = aiTable.selection().selectedRecords.has(row._id);\n const isSelected = aiTable.selection().selectedFields.has(field._id);\n const isHoverRow = isHover && targetName !== AI_TABLE_FIELD_HEAD;\n if (isCheckedRow || isSelected) {\n background = colors.itemActiveBgColor;\n } else if (isHoverRow) {\n background = colors.gray80;\n }\n recordRowLayout.init({\n x,\n y,\n rowIndex,\n columnIndex,\n columnWidth,\n rowHeight,\n columnCount,\n containerWidth: coordinate.containerWidth\n });\n recordRowLayout.render({\n row,\n style: { fill: background },\n isHoverRow,\n isCheckedRow\n });\n const { width, offset } = getCellHorizontalPosition({\n columnIndex,\n columnWidth,\n columnCount\n });\n const realX = x + offset + AI_TABLE_OFFSET;\n const realY = y + AI_TABLE_OFFSET;\n const style = { fontWeight: DEFAULT_FONT_STYLE };\n const cellValue = AITableQueries.getFieldValue(aiTable, [recordId, field._id]);\n const transformValue = transformCellValue(aiTable, field, cellValue);\n const render = {\n aiTable,\n x: realX,\n y: realY,\n columnWidth: width,\n rowHeight,\n recordId: recordId,\n field,\n cellValue,\n transformValue,\n references,\n isActive: isSelected,\n style,\n colors\n };\n\n cellDrawer.initStyle(field, style);\n // 最后一列,且单元格内容存在,需要裁剪内容,以防止文本溢出单元格边界\n // 然后,根据计算好的样式和布局绘制单元格内容\n if (isLastColumn && cellValue != null) {\n ctx.save();\n ctx.rect(realX, realY, width, rowHeight);\n ctx.clip();\n cellDrawer.renderCell(render as AITableRender, ctx as CanvasRenderingContext2D);\n ctx.restore();\n } else {\n cellDrawer.renderCell(render as AITableRender, ctx as CanvasRenderingContext2D);\n }\n }\n }\n }\n }\n};\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport Konva from 'konva';\nimport { KoShape } from '../../angular-konva';\nimport { AITableCellsConfig } from '../../types';\nimport { createCells } from '../creations/create-cells';\n\n@Component({\n selector: 'ai-table-cells',\n template: ` <ko-shape [config]=\"cellsShapeConfig()\"></ko-shape> `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableCells {\n config = input.required<AITableCellsConfig>();\n\n cellsShapeConfig = computed(() => {\n const { coordinate, columnStartIndex } = this.config();\n const { frozenColumnCount } = coordinate;\n return {\n listening: false,\n perfectDrawEnabled: false,\n sceneFunc: (ctx: Konva.Context) =>\n createCells({\n ...this.config(),\n ctx,\n columnStartIndex: Math.max(columnStartIndex, frozenColumnCount)\n })\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport {\n ColumnCalendarFilledPath,\n ColumnLinkOutlinedPath,\n ColumnMemberFilledPath,\n ColumnMultipleFillPath,\n ColumnNumberFilledPath,\n ColumnProgressFilledPath,\n ColumnRatingFilledPath,\n ColumnSelectFilledPath,\n ColumnTextFilledPath\n} from '../../constants';\nimport { AITableFieldType, SelectSettings } from '../../core';\nimport { AITableFieldTypeIconConfig } from '../../types';\nimport { AITableIcon } from './icon.component';\n\n@Component({\n selector: 'ai-table-field-icon',\n template: ` <ai-table-icon [config]=\"iconConfig()\"></ai-table-icon> `,\n standalone: true,\n imports: [AITableIcon],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableFieldIcon {\n config = input.required<AITableFieldTypeIconConfig>();\n\n iconConfig = computed(() => {\n const { field, x, y, width, height, fill } = this.config();\n let data = null;\n switch (field.type) {\n case AITableFieldType.text:\n data = ColumnTextFilledPath;\n break;\n case AITableFieldType.select:\n data = (field.settings as SelectSettings)?.is_multiple ? ColumnMultipleFillPath : ColumnSelectFilledPath;\n break;\n case AITableFieldType.date:\n case AITableFieldType.createdAt:\n case AITableFieldType.updatedAt:\n data = ColumnCalendarFilledPath;\n break;\n case AITableFieldType.number:\n data = ColumnNumberFilledPath;\n break;\n case AITableFieldType.link:\n data = ColumnLinkOutlinedPath;\n break;\n case AITableFieldType.rate:\n data = ColumnRatingFilledPath;\n break;\n case AITableFieldType.member:\n case AITableFieldType.createdBy:\n case AITableFieldType.updatedBy:\n data = ColumnMemberFilledPath;\n break;\n case AITableFieldType.progress:\n data = ColumnProgressFilledPath;\n break;\n }\n return {\n x,\n y,\n size: width,\n backgroundHeight: height,\n listening: false,\n data,\n fill\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport Konva from 'konva';\nimport { KoShape } from '../../angular-konva/components/shape.component';\nimport {\n DEFAULT_FONT_FAMILY,\n DEFAULT_FONT_SIZE,\n DEFAULT_FONT_STYLE,\n DEFAULT_TEXT_ALIGN_LEFT,\n DEFAULT_TEXT_ELLIPSIS,\n DEFAULT_TEXT_FILL,\n DEFAULT_TEXT_LISTENING,\n DEFAULT_TEXT_TRANSFORMS_ENABLED,\n DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n DEFAULT_TEXT_WRAP\n} from '../../constants';\n\n@Component({\n selector: 'ai-table-text',\n template: ` <ko-text [config]=\"textConfig()\"></ko-text> `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableText {\n config = input.required<Konva.ShapeConfig>();\n\n textConfig = computed(() => {\n const {\n x,\n y,\n width,\n height,\n text,\n padding,\n align = DEFAULT_TEXT_ALIGN_LEFT,\n verticalAlign = DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE,\n fill = DEFAULT_TEXT_FILL,\n textDecoration,\n fontSize = DEFAULT_FONT_SIZE,\n fontStyle = DEFAULT_FONT_STYLE,\n ellipsis = DEFAULT_TEXT_ELLIPSIS,\n wrap = DEFAULT_TEXT_WRAP,\n transformsEnabled = DEFAULT_TEXT_TRANSFORMS_ENABLED,\n listening = DEFAULT_TEXT_LISTENING,\n fontFamily = DEFAULT_FONT_FAMILY,\n ...rest\n } = this.config();\n return {\n x,\n y,\n width,\n height,\n text,\n padding,\n align,\n verticalAlign,\n fill,\n textDecoration,\n fontSize,\n fontStyle,\n ellipsis,\n wrap,\n transformsEnabled,\n listening,\n fontFamily,\n ...rest\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { StageConfig } from 'konva/lib/Stage';\nimport { KoContainer, KoShape, KoStage } from '../../angular-konva';\nimport {\n AI_TABLE_ACTION_COMMON_SIZE,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_HEAD,\n AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE,\n AI_TABLE_FIELD_HEAD_MORE,\n AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH,\n AI_TABLE_ICON_COMMON_SIZE,\n AI_TABLE_OFFSET,\n Colors,\n DEFAULT_FONT_SIZE,\n MoreStandOutlinedPath\n} from '../../constants';\nimport { AITableFieldHeadConfig } from '../../types';\nimport { generateTargetName, TextMeasure } from '../../utils';\nimport { AITableFieldIcon } from './field-icon.component';\nimport { AITableIcon } from './icon.component';\nimport { AITableText } from './text.component';\n\n@Component({\n selector: 'ai-table-field-head',\n template: `\n <ko-group [config]=\"groupConfig()\">\n <ko-rect [config]=\"bgConfig()\"></ko-rect>\n <ko-group>\n <ai-table-field-icon [config]=\"fieldIconConfig()\"></ai-table-field-icon>\n <ai-table-text [config]=\"textConfig()\"></ai-table-text>\n @if (config().iconVisible) {\n <ai-table-icon [config]=\"moreIconConfig()\"></ai-table-icon>\n }\n </ko-group>\n </ko-group>\n `,\n standalone: true,\n imports: [KoContainer, KoShape, AITableFieldIcon, AITableText, AITableIcon],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableFieldHead {\n config = input.required<AITableFieldHeadConfig>();\n\n textOffset = AI_TABLE_CELL_PADDING + AI_TABLE_ICON_COMMON_SIZE + AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE;\n\n textMeasure = TextMeasure();\n\n availableTextWidth = computed(() => {\n const { width, iconVisible } = this.config();\n return (\n width -\n (iconVisible\n ? 2 * (AI_TABLE_CELL_PADDING + AI_TABLE_ICON_COMMON_SIZE + AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE)\n : 2 * AI_TABLE_CELL_PADDING + AI_TABLE_ICON_COMMON_SIZE + AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE)\n );\n });\n\n textData = computed(() => {\n const fieldName = this.config().field.name.replace(/\\r|\\n/g, ' ');\n this.textMeasure.setFont({ fontSize: DEFAULT_FONT_SIZE });\n const { width, height, isOverflow } = this.textMeasure.measureText(fieldName, this.availableTextWidth(), 1);\n return {\n width: Math.min(width, this.availableTextWidth()),\n height,\n isOverflow\n };\n });\n\n groupConfig = computed<Partial<StageConfig>>(() => {\n return {\n x: this.config().x,\n y: this.config().y\n };\n });\n\n bgConfig = computed(() => {\n const { field, width, height, stroke, isSelected, iconVisible } = this.config();\n return {\n x: AI_TABLE_OFFSET,\n y: AI_TABLE_OFFSET,\n name: generateTargetName({\n targetName: AI_TABLE_FIELD_HEAD,\n fieldId: field._id\n }),\n width: width,\n height: height,\n fill: isSelected ? Colors.headSelectedBgColor : iconVisible ? Colors.gray80 : Colors.white,\n stroke: stroke || Colors.gray200,\n strokeWidth: 1,\n opacity: 1\n };\n });\n\n fieldIconConfig = computed(() => {\n const { field, height } = this.config();\n return {\n field: field,\n x: AI_TABLE_CELL_PADDING,\n y: (height - AI_TABLE_ICON_COMMON_SIZE) / 2,\n width: AI_TABLE_ICON_COMMON_SIZE,\n height: AI_TABLE_ICON_COMMON_SIZE,\n fill: Colors.gray600\n };\n });\n\n textConfig = computed(() => {\n const { field, height } = this.config();\n return {\n x: this.textOffset,\n y: undefined,\n width: Math.max(this.textData().width, AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH),\n height: height + 2,\n text: field.name,\n lineHeight: 1.84\n };\n });\n\n moreIconConfig = computed(() => {\n const { field, width, height, isHoverIcon, isSelected } = this.config();\n const commonIconOffsetY = (height - AI_TABLE_ACTION_COMMON_SIZE) / 2;\n return {\n name: generateTargetName({\n targetName: AI_TABLE_FIELD_HEAD_MORE,\n fieldId: field._id\n }),\n x: width - AI_TABLE_ACTION_COMMON_SIZE,\n y: commonIconOffsetY,\n data: MoreStandOutlinedPath,\n fill: isHoverIcon ? Colors.primary : Colors.gray600,\n background: Colors.transparent,\n backgroundWidth: AI_TABLE_ACTION_COMMON_SIZE,\n backgroundHeight: AI_TABLE_ACTION_COMMON_SIZE,\n cornerRadius: 4\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport Konva from 'konva';\nimport { KoShape } from '../../angular-konva';\nimport { AITableCellsConfig } from '../../types';\nimport { createCells } from '../creations/create-cells';\n\n@Component({\n selector: 'ai-table-frozen-cells',\n template: `<ko-shape [config]=\"frozenCellsConfig()\"></ko-shape>`,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableFrozenCells {\n config = input.required<AITableCellsConfig>();\n\n frozenCellsConfig = computed(() => {\n const { coordinate } = this.config();\n const { frozenColumnCount } = coordinate;\n return {\n listening: false,\n perfectDrawEnabled: false,\n sceneFunc: (ctx: Konva.Context) =>\n createCells({\n ...this.config(),\n ctx,\n columnStartIndex: 0,\n columnStopIndex: frozenColumnCount - 1\n })\n };\n });\n}\n","import { AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_MORE, Colors } from '../../constants';\nimport { AITableColumnHeadsConfig, AITableFieldHeadConfig } from '../../types';\n\nexport const createColumnHeads = (config: AITableColumnHeadsConfig) => {\n const { coordinate, columnStartIndex, columnStopIndex, pointPosition, aiTable } = config;\n const colors = Colors;\n const { columnCount, rowInitSize: fieldHeadHeight } = coordinate;\n const { columnIndex: pointColumnIndex, targetName: pointTargetName } = pointPosition;\n const { fields } = aiTable;\n\n const getFieldHeadStatus = (fieldId: string) => {\n const iconVisible =\n [AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_MORE].includes(pointTargetName) && fields()[pointColumnIndex]?._id === fieldId;\n const isHoverIcon = pointTargetName === AI_TABLE_FIELD_HEAD_MORE && fields()[pointColumnIndex]?._id === fieldId;\n const isSelected = aiTable.selection().selectedFields.has(fieldId);\n return {\n iconVisible,\n isSelected,\n isHoverIcon\n };\n };\n\n const fieldHeads: AITableFieldHeadConfig[] = [];\n for (let columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n if (columnIndex > columnCount - 1) break;\n if (columnIndex < 0) continue;\n const field = fields()[columnIndex];\n if (field == null) continue;\n const x = coordinate.getColumnOffset(columnIndex);\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n const { iconVisible, isSelected, isHoverIcon } = getFieldHeadStatus(field._id);\n const fieldHead = {\n x,\n y: 0,\n width: columnWidth,\n height: fieldHeadHeight,\n field,\n stroke: columnIndex === 0 ? colors.transparent : undefined,\n iconVisible,\n isSelected,\n isHoverIcon\n };\n\n fieldHeads.push(fieldHead);\n }\n return fieldHeads;\n};\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { StageConfig } from 'konva/lib/Stage';\nimport { KoShape, KoContainer } from '../../angular-konva';\nimport {\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX,\n AI_TABLE_ICON_COMMON_SIZE,\n AI_TABLE_OFFSET,\n AI_TABLE_ROW_HEAD_WIDTH,\n Colors\n} from '../../constants';\nimport { AITableCheckType, AITableColumnHeadsConfig } from '../../types';\nimport { createColumnHeads } from '../creations/create-heads';\nimport { AITableFieldHead } from './field-head.component';\nimport { AITableIcon } from './icon.component';\n\n@Component({\n selector: 'ai-table-frozen-column-heads',\n template: `\n <ko-rect [config]=\"numberHeadBgConfig()\"></ko-rect>\n <ko-line [config]=\"topLineConfig\"></ko-line>\n <ko-line [config]=\"bottomLineConfig()\"></ko-line>\n <ko-group>\n <ai-table-icon [config]=\"iconConfig()\"></ai-table-icon>\n </ko-group>\n @for (config of headConfigs(); track $index) {\n <ai-table-field-head [config]=\"config\"></ai-table-field-head>\n }\n <ko-rect [config]=\"headBgConfig()\"></ko-rect>\n `,\n standalone: true,\n imports: [KoShape, AITableFieldHead, AITableIcon, KoContainer],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableFrozenColumnHeads {\n config = input.required<AITableColumnHeadsConfig>();\n\n coordinate = computed(() => {\n return this.config().coordinate;\n });\n\n isChecked = computed(() => {\n const { selection, records } = this.config().aiTable;\n return selection().selectedRecords.size === records().length;\n });\n\n fieldHeadHeight = computed(() => {\n return this.coordinate().rowInitSize;\n });\n\n headConfigs = computed(() => {\n return createColumnHeads({\n ...this.config(),\n columnStartIndex: 0,\n columnStopIndex: this.coordinate().frozenColumnCount - 1\n });\n });\n\n numberHeadBgConfig = computed<Partial<StageConfig>>(() => {\n return {\n x: AI_TABLE_OFFSET,\n y: AI_TABLE_OFFSET,\n width: AI_TABLE_ROW_HEAD_WIDTH,\n height: this.fieldHeadHeight(),\n fill: Colors.white,\n listening: false\n };\n });\n\n topLineConfig = {\n x: AI_TABLE_OFFSET,\n y: AI_TABLE_OFFSET,\n points: [0, 0, AI_TABLE_ROW_HEAD_WIDTH, 0],\n stroke: Colors.gray200,\n strokeWidth: 1,\n listening: false\n };\n\n bottomLineConfig = computed(() => {\n return {\n x: AI_TABLE_OFFSET,\n y: AI_TABLE_OFFSET,\n points: [AI_TABLE_ROW_HEAD_WIDTH, this.fieldHeadHeight(), 0, this.fieldHeadHeight()],\n stroke: Colors.gray200,\n strokeWidth: 1,\n listening: false\n };\n });\n\n iconConfig = computed(() => {\n return {\n name: AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX,\n x: AI_TABLE_CELL_PADDING,\n y: (this.fieldHeadHeight() - AI_TABLE_ICON_COMMON_SIZE) / 2,\n type: this.isChecked() ? AITableCheckType.checked : AITableCheckType.unchecked,\n fill:\n this.isChecked() || (this.config().pointPosition.targetName === AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX && !this.isChecked())\n ? Colors.primary\n : Colors.gray300\n };\n });\n\n headBgConfig = computed(() => {\n const { frozenColumnWidth } = this.coordinate();\n return {\n x: AI_TABLE_ROW_HEAD_WIDTH,\n y: AI_TABLE_OFFSET,\n width: frozenColumnWidth + AI_TABLE_OFFSET,\n height: this.fieldHeadHeight(),\n stroke: Colors.gray200,\n strokeWidth: 1,\n fill: Colors.transparent,\n listening: false\n };\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { KoShape } from '../../angular-konva';\nimport { AITableCellsConfig } from '../../types';\nimport { getPlaceHolderCellsConfigs } from '../../utils';\n\n@Component({\n selector: 'ai-table-frozen-placeholder-cells',\n template: `\n @for (item of frozenPlaceHolderCellsConfig(); track $index) {\n <ko-rect [config]=\"item\"></ko-rect>\n }\n `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableFrozenPlaceholderCells {\n config = input.required<AITableCellsConfig>();\n\n frozenPlaceHolderCellsConfig = computed(() => {\n const { coordinate } = this.config();\n return getPlaceHolderCellsConfigs({\n ...this.config(),\n columnStartIndex: 0,\n columnStopIndex: coordinate.frozenColumnCount - 1\n });\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { AITableColumnHeadsConfig } from '../../types';\nimport { createColumnHeads } from '../creations/create-heads';\nimport { AITableFieldHead } from './field-head.component';\n\n@Component({\n selector: 'ai-table-column-heads',\n template: `\n @for (config of headConfigs(); track $index) {\n <ai-table-field-head [config]=\"config\"></ai-table-field-head>\n }\n `,\n standalone: true,\n imports: [AITableFieldHead],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableColumnHeads {\n config = input.required<AITableColumnHeadsConfig>();\n\n headConfigs = computed(() => {\n const { coordinate, columnStartIndex } = this.config();\n const { frozenColumnCount } = coordinate;\n return createColumnHeads({\n ...this.config(),\n columnStartIndex: Math.max(columnStartIndex, frozenColumnCount)\n });\n });\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { KoContainer, KoShape } from '../../angular-konva';\nimport {\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_HEAD,\n AI_TABLE_FIELD_HEAD_HEIGHT,\n AI_TABLE_ROW_HEAD,\n AI_TABLE_ROW_HEAD_WIDTH,\n AI_TABLE_ROW_SELECT_CHECKBOX,\n Colors\n} from '../../constants';\nimport { RendererContext } from '../../core';\nimport { AITableAreaType, AITableCheckType, AITablePointPosition, AITableRowHeadsConfig, AITableRowType } from '../../types';\nimport { generateTargetName } from '../../utils';\nimport { AITableIcon } from './icon.component';\n\n@Component({\n selector: 'ai-table-hover-row-heads',\n template: `\n @for (config of headConfigs(); track config.recordId) {\n <ko-group [config]=\"{ x: 0, y: config.y, name: 'hover-heads' }\">\n @if (config.bgConfig) {\n <ko-rect [config]=\"config.bgConfig\"></ko-rect>\n }\n @if (config.iconConfig) {\n <ai-table-icon [config]=\"config.iconConfig\"></ai-table-icon>\n }\n </ko-group>\n }\n `,\n standalone: true,\n imports: [KoContainer, KoShape, AITableIcon],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableHoverRowHeads {\n config = input.required<AITableRowHeadsConfig>();\n\n pointPosition = computed(() => {\n return this.config().aiTable.context!.pointPosition();\n });\n\n headConfigs = computed(() => {\n return this.createHoverRowHeads(this.pointPosition());\n });\n\n createHoverRowHeads = (pointPosition: AITablePointPosition) => {\n const { coordinate, rowStartIndex, rowStopIndex, aiTable } = this.config();\n const context = aiTable.context as RendererContext;\n const headConfigs: any[] = [];\n\n for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n if (rowIndex > coordinate.rowCount - 1) {\n break;\n }\n\n const row = context.linearRows()[rowIndex];\n if (row == null) {\n continue;\n }\n\n const { type, _id: recordId } = row;\n if (type !== AITableRowType.record || recordId == null) {\n continue;\n }\n\n const isCheckedRow = aiTable.selection().selectedRecords.has(recordId);\n const { areaType, rowIndex: pointRowIndex, targetName } = pointPosition;\n\n if (!isCheckedRow && areaType === AITableAreaType.none) {\n continue;\n }\n\n let isHoverRow;\n if (pointRowIndex > -1) {\n const { type: pointRowType, _id: pointRecordId } = context.linearRows()[pointRowIndex];\n isHoverRow = recordId === pointRecordId && pointRowType === AITableRowType.record && targetName !== AI_TABLE_FIELD_HEAD;\n }\n\n let operationGroup: { recordId: string; y: number; bgConfig: any; iconConfig?: any };\n\n operationGroup = {\n recordId,\n y: coordinate.getRowOffset(rowIndex),\n bgConfig: {\n name: generateTargetName({ targetName: AI_TABLE_ROW_HEAD, recordId }),\n width: AI_TABLE_ROW_HEAD_WIDTH + 1,\n height: coordinate.rowHeight,\n fill: Colors.transparent\n }\n };\n\n if (isCheckedRow || isHoverRow) {\n const iconOffsetY = (AI_TABLE_FIELD_HEAD_HEIGHT - 16) / 2;\n operationGroup.iconConfig = {\n name: generateTargetName({\n targetName: AI_TABLE_ROW_SELECT_CHECKBOX,\n recordId\n }),\n x: AI_TABLE_CELL_PADDING,\n y: iconOffsetY,\n type: isCheckedRow ? AITableCheckType.checked : AITableCheckType.unchecked,\n fill: isCheckedRow || (targetName === AI_TABLE_ROW_SELECT_CHECKBOX && !isCheckedRow) ? Colors.primary : Colors.gray300\n };\n headConfigs.push(operationGroup);\n }\n }\n\n return headConfigs;\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { KoShape } from '../../angular-konva';\nimport { AI_TABLE_ROW_ADD_BUTTON } from '../../constants';\nimport { RendererContext } from '../../core';\nimport { AITableRowHeadsConfig, AITableRowType } from '../../types';\n\n@Component({\n selector: 'ai-table-other-rows',\n template: `\n @for (config of otherConfigs(); track $index) {\n @switch (config.type) {\n @case (AITableRowType.add) {\n <ko-rect [config]=\"config.addBtnConfig\"></ko-rect>\n }\n }\n }\n `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableOtherRows {\n config = input.required<AITableRowHeadsConfig>();\n\n AITableRowType = AITableRowType;\n\n otherConfigs = computed(() => {\n return this.createOtherRows(this.config());\n });\n\n createOtherRows = (config: AITableRowHeadsConfig) => {\n const { coordinate, rowStartIndex, rowStopIndex, aiTable } = config;\n const otherRowConfigs = [];\n for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n if (rowIndex > coordinate.rowCount - 1) break;\n const { _id, type } = (aiTable.context as RendererContext).linearRows()[rowIndex];\n if (type === AITableRowType.record) continue;\n const y = coordinate.getRowOffset(rowIndex);\n const curHeight = coordinate.getRowHeight(rowIndex);\n\n otherRowConfigs.push({\n type,\n addBtnConfig: {\n key: `row-add-${_id}`,\n y: y + 1,\n name: AI_TABLE_ROW_ADD_BUTTON,\n width: coordinate.containerWidth,\n height: curHeight - 1,\n fill: 'transparent'\n }\n });\n }\n return otherRowConfigs;\n };\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { KoShape } from '../../angular-konva';\nimport { AITableCellsConfig } from '../../types';\nimport { getPlaceHolderCellsConfigs } from '../../utils';\n\n@Component({\n selector: 'ai-table-placeholder-cells',\n template: `\n @for (item of frozenPlaceHolderCellsConfig(); track $index) {\n <ko-rect [config]=\"item\"></ko-rect>\n }\n `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITablePlaceholderCells {\n config = input.required<AITableCellsConfig>();\n\n frozenPlaceHolderCellsConfig = computed(() => {\n return getPlaceHolderCellsConfigs(this.config());\n });\n}\n","import { RectConfig } from 'konva/lib/shapes/Rect';\nimport { AI_TABLE_CELL_BORDER, AI_TABLE_OFFSET } from '../../constants';\nimport { AITable } from '../../core';\nimport { AITableCellsConfig, AITableRowType } from '../../types';\nimport { getCellHorizontalPosition } from '../../utils';\n\nexport const createActiveCellBorder = (config: AITableCellsConfig) => {\n const { aiTable, coordinate, columnStartIndex, columnStopIndex, rowStartIndex, rowStopIndex } = config;\n const { linearRows } = aiTable.context!;\n const { rowHeight, frozenColumnCount } = coordinate;\n const colors = AITable.getColors();\n const visibleColumns = AITable.getVisibleFields(aiTable);\n const activeCell = AITable.getActiveCell(aiTable);\n const totalColumnCount = visibleColumns.length;\n\n let activeCellBorder: RectConfig | null = null;\n let frozenActiveCellBorder: RectConfig | null = null;\n\n if (activeCell != null) {\n const { fieldId } = activeCell;\n const { rowIndex, columnIndex } = AITable.getCellIndex(aiTable, activeCell)!;\n\n const checkIsVisible = (rowIndex: number, columnIndex: number) => {\n if (columnIndex < frozenColumnCount) {\n return true;\n }\n return (\n rowIndex >= rowStartIndex && rowIndex <= rowStopIndex && columnIndex >= columnStartIndex && columnIndex <= columnStopIndex\n );\n };\n\n if (rowIndex != null && columnIndex != null && checkIsVisible(rowIndex, columnIndex)) {\n const { type } = linearRows()[rowIndex];\n\n if (type === AITableRowType.record) {\n const activeField = visibleColumns.find((field) => field._id === fieldId);\n if (activeField == null) {\n return {\n activeCellBorder,\n frozenActiveCellBorder\n };\n }\n\n const x = coordinate.getColumnOffset(columnIndex);\n const y = coordinate.getRowOffset(rowIndex);\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n const isFrozenColumn = columnIndex < frozenColumnCount;\n const { offset, width } = getCellHorizontalPosition({\n columnWidth,\n columnIndex,\n columnCount: totalColumnCount\n });\n // active 外边界和非 active 外边界 box 大小保持一致\n const currentConfig = {\n x: x + offset + AI_TABLE_OFFSET,\n y: y + AI_TABLE_OFFSET,\n width: width - AI_TABLE_CELL_BORDER / 2,\n height: rowHeight - AI_TABLE_CELL_BORDER / 2,\n strokeWidth: AI_TABLE_CELL_BORDER,\n stroke: colors.primary,\n fillEnabled: false,\n listening: false\n };\n\n if (isFrozenColumn) {\n frozenActiveCellBorder = currentConfig;\n } else {\n activeCellBorder = currentConfig;\n }\n }\n }\n }\n\n return {\n activeCellBorder,\n frozenActiveCellBorder\n };\n};\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport Konva from 'konva';\nimport { StageConfig } from 'konva/lib/Stage';\nimport { KoContainer, KoEventObject, KoShape, KoStage } from '../angular-konva';\nimport { AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_ROW_HEAD_WIDTH } from '../constants';\nimport { AITable } from '../core';\nimport { AITableRendererConfig } from '../types';\nimport { getVisibleRangeInfo } from '../utils';\nimport {\n AITableAddField,\n AITableCells,\n AITableColumnHeads,\n AITableFieldHead,\n AITableFrozenCells,\n AITableFrozenColumnHeads,\n AITableFrozenPlaceholderCells,\n AITableHoverRowHeads,\n AITableIcon,\n AITableOtherRows,\n AITablePlaceholderCells\n} from './components';\nimport { createActiveCellBorder } from './creations/create-active-cell-border';\n\nKonva.pixelRatio = 2;\n\n@Component({\n selector: 'ai-table-renderer',\n templateUrl: './renderer.component.html',\n standalone: true,\n imports: [\n KoContainer,\n KoStage,\n KoShape,\n AITableColumnHeads,\n AITableFrozenColumnHeads,\n AITableCells,\n AITableFrozenCells,\n AITableFrozenPlaceholderCells,\n AITablePlaceholderCells,\n AITableAddField,\n AITableHoverRowHeads,\n AITableOtherRows\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableRenderer {\n config = input.required<AITableRendererConfig>();\n\n koMousemove = output<KoEventObject<MouseEvent>>();\n\n koMousedown = output<KoEventObject<MouseEvent>>();\n\n koWheel = output<KoEventObject<WheelEvent>>();\n\n koClick = output<KoEventObject<MouseEvent>>();\n\n koDblclick = output<KoEventObject<MouseEvent>>();\n\n fields = computed(() => {\n return AITable.getVisibleFields(this.config().aiTable);\n });\n\n readonly = computed(() => {\n return this.config()?.readonly;\n });\n\n coordinate = computed(() => {\n return this.config()?.coordinate;\n });\n\n containerWidth = computed<number>(() => {\n return this.config().containerWidth;\n });\n\n containerHeight = computed<number>(() => {\n return this.config().containerHeight;\n });\n\n scrollState = computed(() => {\n return this.config()?.aiTable!.context!.scrollState();\n });\n\n visibleRangeInfo = computed(() => {\n return getVisibleRangeInfo(this.coordinate()!, this.scrollState()!);\n });\n\n frozenAreaWidth = computed(() => {\n return AI_TABLE_ROW_HEAD_WIDTH + this.coordinate()!.frozenColumnWidth!;\n });\n\n lastColumnWidth = computed(() => {\n return this.coordinate()!.getColumnWidth(this.visibleRangeInfo().columnStopIndex);\n });\n\n lastColumnOffset = computed(() => {\n return this.coordinate()!.getColumnOffset(this.visibleRangeInfo().columnStopIndex);\n });\n\n cellGroupClipWidth = computed(() => {\n return this.containerWidth() - this.frozenAreaWidth();\n });\n\n stageConfig = computed<Partial<StageConfig>>(() => {\n const { isScrolling } = this.scrollState()!;\n return {\n width: this.containerWidth(),\n height: this.containerHeight(),\n listening: isScrolling ? false : true\n };\n });\n\n gridGroupConfig = computed<Partial<StageConfig>>(() => {\n return {\n clipX: 0,\n clipY: 0,\n clipWidth: this.containerWidth(),\n clipHeight: this.containerHeight()\n };\n });\n\n commonGroupConfig = computed<Partial<StageConfig>>(() => {\n return {\n clipX: this.frozenAreaWidth() + 1,\n clipY: 0,\n clipWidth: this.cellGroupClipWidth(),\n clipHeight: this.containerHeight()\n };\n });\n\n attachGroupConfig = computed<Partial<StageConfig>>(() => {\n return {\n clipX: this.frozenAreaWidth() - 1,\n clipY: this.coordinate()!.rowInitSize - 1,\n clipWidth: this.containerWidth() - this.frozenAreaWidth(),\n clipHeight: this.containerHeight() - this.coordinate()!.rowInitSize\n };\n });\n\n frozenAttachGroupConfig = computed<Partial<StageConfig>>(() => {\n return {\n clipX: 0,\n clipY: this.coordinate()!.rowInitSize - 1,\n clipWidth: this.frozenAreaWidth() + 4,\n clipHeight: this.containerHeight() - this.coordinate()!.rowInitSize\n };\n });\n\n offsetYConfig = computed<Partial<StageConfig>>(() => {\n const { scrollTop } = this.scrollState()!;\n return {\n offsetY: scrollTop\n };\n });\n\n offsetXConfig = computed<Partial<StageConfig>>(() => {\n const { scrollLeft } = this.scrollState()!;\n return {\n offsetX: scrollLeft\n };\n });\n\n offsetConfig = computed<Partial<StageConfig>>(() => {\n const { scrollLeft, scrollTop } = this.scrollState()!;\n return {\n offsetX: scrollLeft,\n offsetY: scrollTop\n };\n });\n\n columnHeadOrAddFieldConfig = computed(() => {\n const { columnStartIndex, columnStopIndex } = this.visibleRangeInfo();\n const { aiTable, coordinate, readonly } = this.config();\n const { pointPosition } = aiTable.context!;\n const fields = this.fields();\n return {\n aiTable,\n coordinate,\n fields,\n columnStartIndex,\n columnStopIndex,\n pointPosition: pointPosition(),\n readonly\n };\n });\n\n cellsConfig = computed(() => {\n const { aiTable, coordinate, references } = this.config();\n const { rowStartIndex, rowStopIndex, columnStartIndex, columnStopIndex } = this.visibleRangeInfo();\n return {\n aiTable,\n coordinate,\n references,\n rowStartIndex,\n rowStopIndex,\n columnStartIndex,\n columnStopIndex\n };\n });\n\n activeCellBorderConfig = computed(() => {\n return createActiveCellBorder(this.cellsConfig());\n });\n\n stageMousemove(e: KoEventObject<MouseEvent>) {\n this.koMousemove.emit(e as KoEventObject<MouseEvent>);\n }\n\n stageMousedown(e: KoEventObject<MouseEvent>) {\n this.koMousedown.emit(e as KoEventObject<MouseEvent>);\n }\n\n stageClick(e: KoEventObject<MouseEvent>) {\n this.koClick.emit(e as KoEventObject<MouseEvent>);\n }\n\n stageDblclick(e: KoEventObject<MouseEvent>) {\n this.koDblclick.emit(e as KoEventObject<MouseEvent>);\n }\n}\n","<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n OnDestroy,\n OnInit,\n Signal,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent } from 'rxjs';\nimport { KoEventObject } from './angular-konva';\nimport {\n AI_TABLE_CELL,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_FIELD_ADD_BUTTON,\n AI_TABLE_FIELD_ADD_BUTTON_WIDTH,\n AI_TABLE_FIELD_HEAD,\n AI_TABLE_FIELD_HEAD_HEIGHT,\n AI_TABLE_FIELD_HEAD_MORE,\n AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX,\n AI_TABLE_POPOVER_LEFT_OFFSET,\n AI_TABLE_ROW_ADD_BUTTON,\n AI_TABLE_ROW_HEAD_WIDTH,\n AI_TABLE_ROW_SELECT_CHECKBOX,\n DBL_CLICK_EDIT_TYPE,\n DEFAULT_POINT_POSITION,\n DEFAULT_SCROLL_STATE,\n MOUSEOVER_EDIT_TYPE\n} from './constants';\nimport { AITable, Coordinate, RendererContext, UpdateFieldValueOptions } from './core';\nimport { AITableGridBase } from './grid-base.component';\nimport { AITableRenderer } from './renderer/renderer.component';\nimport { AITableGridEventService } from './services/event.service';\nimport { AITableGridFieldService } from './services/field.service';\nimport { AITableGridSelectionService } from './services/selection.service';\nimport { AITableMouseDownType, AITableRendererConfig, ScrollActionOptions } from './types';\nimport { buildGridLinearRows, getColumnIndicesMap, getDetailByTargetName, handleMouseStyle, isWindows } from './utils';\nimport { getMousePosition } from './utils/position';\n\n@Component({\n selector: 'ai-table-grid',\n templateUrl: './grid.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ai-table-grid'\n },\n imports: [AITableRenderer],\n providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService]\n})\nexport class AITableGrid extends AITableGridBase implements OnInit, OnDestroy {\n timer!: number | null;\n\n resizeObserver!: ResizeObserver;\n\n fieldHeadHeight = AI_TABLE_FIELD_HEAD_HEIGHT;\n\n containerRect = signal({ width: 0, height: 0 });\n\n hasContainerRect = computed(() => {\n return this.containerRect().width > 0 && this.containerRect().height > 0;\n });\n\n container = viewChild<ElementRef>('container');\n\n verticalBarRef = viewChild<ElementRef>('verticalBar');\n\n horizontalBarRef = viewChild<ElementRef>('horizontalBar');\n\n linearRows = computed(() => {\n return buildGridLinearRows(this.gridData().records, !this.aiReadonly());\n });\n\n visibleColumnsMap = computed(() => {\n const columns = AITable.getVisibleFields(this.aiTable);\n return new Map(columns?.map((item, index) => [item._id, index]));\n });\n\n visibleRowsIndexMap = computed(() => {\n return new Map(this.linearRows().map((row, index) => [row._id, index]));\n });\n\n containerElement = computed(() => {\n return this.container()!.nativeElement;\n });\n\n rendererConfig: Signal<AITableRendererConfig> = computed(() => {\n const fields = AITable.getVisibleFields(this.aiTable);\n const coordinate = new Coordinate({\n container: this.containerElement(),\n rowHeight: AI_TABLE_FIELD_HEAD_HEIGHT,\n rowCount: this.linearRows().length,\n columnCount: fields.length,\n rowInitSize: AI_TABLE_FIELD_HEAD_HEIGHT,\n columnInitSize: AI_TABLE_ROW_HEAD_WIDTH,\n rowIndicesMap: {},\n columnIndicesMap: getColumnIndicesMap(fields),\n frozenColumnCount: 1\n });\n return {\n aiTable: this.aiTable,\n container: this.containerElement(),\n coordinate: coordinate,\n containerWidth: this.containerRect().width,\n containerHeight: this.containerRect().height,\n references: this.aiReferences(),\n readonly: this.aiReadonly()\n };\n });\n\n coordinate = computed(() => {\n return this.rendererConfig().coordinate;\n });\n\n scrollTotalHeight = computed(() => {\n return Math.max(this.coordinate().totalHeight, this.containerRect().height - this.fieldHeadHeight);\n });\n\n scrollbarWidth = computed(() => {\n return this.coordinate().totalWidth + AI_TABLE_FIELD_ADD_BUTTON_WIDTH;\n });\n\n constructor() {\n super();\n afterNextRender(() => {\n this.setContainerRect();\n this.bindGlobalMousedown();\n this.containerResizeListener();\n this.bindWheel();\n });\n effect(() => {\n if (this.hasContainerRect() && this.horizontalBarRef() && this.verticalBarRef()) {\n this.bindScrollBarScroll();\n }\n });\n effect(() => {\n if (!this.aiReadonly() && this.aiTable.context?.pointPosition()) {\n this.toggleHoverCellEditor();\n }\n });\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.initContext();\n }\n\n ngOnDestroy(): void {\n this.resizeObserver?.disconnect();\n }\n\n private initContext() {\n this.aiTable.context = new RendererContext({\n linearRows: this.linearRows,\n visibleColumnsMap: this.visibleColumnsMap,\n visibleRowsIndexMap: this.visibleRowsIndexMap,\n pointPosition: signal(DEFAULT_POINT_POSITION),\n scrollState: signal(DEFAULT_SCROLL_STATE),\n scrollAction: this.scrollAction\n });\n }\n\n stageMousemove(e: KoEventObject<MouseEvent>) {\n if (this.timer) {\n cancelAnimationFrame(this.timer);\n }\n this.timer = requestAnimationFrame(() => {\n const targetName = e.event.target.name();\n const gridStage = e.event.currentTarget.getStage();\n const pos = gridStage?.getPointerPosition();\n if (pos == null) return;\n const { context } = this.aiTable;\n const { x, y } = pos;\n const curMousePosition = getMousePosition(\n x,\n y,\n this.coordinate(),\n AITable.getVisibleFields(this.aiTable),\n context!,\n targetName\n );\n handleMouseStyle(curMousePosition.realTargetName, curMousePosition.areaType, this.containerElement());\n context!.setPointPosition(curMousePosition);\n this.timer = null;\n });\n }\n\n stageMousedown(e: KoEventObject<MouseEvent>) {\n const mouseEvent = e.event.evt;\n const _targetName = e.event.target.name();\n\n const { targetName, fieldId, recordId } = getDetailByTargetName(_targetName);\n switch (targetName) {\n case AI_TABLE_FIELD_HEAD:\n mouseEvent.preventDefault();\n if (!fieldId) return;\n this.aiTableGridSelectionService.selectField(fieldId);\n return;\n case AI_TABLE_CELL:\n if (!recordId || !fieldId) return;\n this.aiTableGridEventService.closeCellEditor();\n this.aiTableGridSelectionService.selectCell(recordId, fieldId);\n return;\n case AI_TABLE_ROW_ADD_BUTTON:\n case AI_TABLE_FIELD_ADD_BUTTON:\n case AI_TABLE_ROW_SELECT_CHECKBOX:\n case AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX:\n return;\n default:\n this.aiTableGridSelectionService.clearSelection();\n }\n }\n\n stageClick(e: KoEventObject<MouseEvent>) {\n const mouseEvent = e.event.evt;\n mouseEvent.preventDefault();\n const { context } = this.aiTable;\n const { targetName, rowIndex: pointRowIndex } = context!.pointPosition();\n if (mouseEvent.button !== AITableMouseDownType.Left || (targetName !== AI_TABLE_FIELD_HEAD_MORE && this.aiReadonly())) return;\n switch (targetName) {\n case AI_TABLE_ROW_ADD_BUTTON: {\n this.aiTableGridSelectionService.clearSelection();\n this.addRecord();\n return;\n }\n case AI_TABLE_ROW_SELECT_CHECKBOX: {\n const pointRecordId = context!.linearRows()[pointRowIndex]?._id;\n this.selectRecord(pointRecordId);\n return;\n }\n case AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX: {\n const isChecked = this.aiTable.selection().selectedRecords.size === this.aiTable.records().length;\n this.toggleSelectAll(!isChecked);\n return;\n }\n case AI_TABLE_FIELD_ADD_BUTTON: {\n this.aiTableGridSelectionService.clearSelection();\n const fieldGroupRect = e.event.target.getParent()?.getClientRect()!;\n const containerRect = this.containerElement().getBoundingClientRect();\n this.addField(this.containerElement(), {\n x: fieldGroupRect.x + containerRect.x,\n y: containerRect.y + fieldGroupRect.y + fieldGroupRect.height\n });\n return;\n }\n case AI_TABLE_FIELD_HEAD_MORE:\n mouseEvent.preventDefault();\n const _targetName = e.event.target.name();\n const { fieldId } = getDetailByTargetName(_targetName);\n if (fieldId) {\n const moreRect = e.event.target.getClientRect();\n const fieldGroupRect = e.event.target.getParent()?.getParent()?.getClientRect()!;\n const containerRect = this.containerElement().getBoundingClientRect();\n\n const position = {\n x: containerRect.x + moreRect.x,\n y: containerRect.y + moreRect.y + moreRect.height\n };\n const editFieldPosition = {\n x: containerRect.x + fieldGroupRect.x - AI_TABLE_CELL_PADDING,\n y: containerRect.y + fieldGroupRect.y + fieldGroupRect.height\n };\n\n const editOrigin = this.containerElement().querySelector('.konvajs-content') as HTMLElement;\n this.aiTableGridFieldService.openFieldMenu(this.aiTable, {\n fieldId: fieldId,\n fieldMenus: this.fieldMenus(),\n origin: this.containerElement(),\n position,\n editOrigin: editOrigin,\n editFieldPosition\n });\n }\n return;\n }\n }\n\n stageDblclick(e: KoEventObject<MouseEvent>) {\n if (this.aiReadonly()) {\n return;\n }\n const _targetName = e.event.target.name();\n const { fieldId, recordId } = getDetailByTargetName(_targetName);\n if (!recordId || !fieldId) {\n return;\n }\n const field = this.aiTable.fieldsMap()[fieldId];\n const fieldType = field.type;\n if (!DBL_CLICK_EDIT_TYPE.includes(fieldType)) {\n return;\n }\n setTimeout(() => {\n this.aiTableGridEventService.openCellEditor(this.aiTable, {\n container: this.containerElement(),\n coordinate: this.coordinate(),\n fieldId: fieldId!,\n recordId: recordId!,\n updateFieldValue: (value: UpdateFieldValueOptions<any>) => {\n this.aiUpdateFieldValue.emit(value);\n }\n });\n }, 0);\n }\n\n private bindWheel() {\n fromEvent<WheelEvent>(this.containerElement(), 'wheel', { passive: false })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((e: WheelEvent) => {\n e.preventDefault();\n this.aiTableGridEventService.closeCellEditor();\n this.scrollAction({ deltaX: e.deltaX, deltaY: e.deltaY, shiftKey: e.shiftKey });\n });\n }\n\n scrollAction = (options: ScrollActionOptions) => {\n if (this.timer) {\n cancelAnimationFrame(this.timer);\n }\n this.timer = requestAnimationFrame(() => {\n const { deltaX, deltaY, shiftKey } = options;\n const fixedDeltaY = shiftKey && isWindows ? 0 : deltaY;\n const fixedDeltaX = shiftKey && isWindows ? deltaY : deltaX;\n const horizontalBar = this.horizontalBarRef()?.nativeElement;\n const verticalBar = this.verticalBarRef()?.nativeElement;\n if (horizontalBar) {\n horizontalBar.scrollLeft = horizontalBar.scrollLeft + fixedDeltaX;\n }\n if (verticalBar) {\n verticalBar.scrollTop = verticalBar.scrollTop + fixedDeltaY;\n }\n options.callback && options.callback();\n this.timer = null;\n });\n };\n\n private bindScrollBarScroll() {\n fromEvent<WheelEvent>(this.horizontalBarRef()!.nativeElement, 'scroll', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((e) => {\n this.horizontalScroll(e);\n });\n\n fromEvent<WheelEvent>(this.verticalBarRef()!.nativeElement, 'scroll', { passive: true })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((e) => {\n this.verticalScroll(e);\n });\n }\n\n private bindGlobalMousedown() {\n fromEvent<MouseEvent>(document, 'mousedown', { passive: true })\n .pipe(\n filter((e) => e.target instanceof Element && !this.containerElement().contains(e.target)),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.aiTableGridSelectionService.clearSelection();\n });\n }\n\n private resetScrolling = () => {\n this.aiTable.context!.setScrollState({\n isScrolling: false\n });\n };\n\n private horizontalScroll = (e: any) => {\n const { scrollLeft } = e.target;\n this.aiTable.context!.setScrollState({\n scrollLeft,\n isScrolling: true\n });\n this.resetScrolling();\n };\n\n private verticalScroll(e: any) {\n const { scrollTop } = e.target;\n this.aiTable.context!.setScrollState({\n scrollTop,\n isScrolling: true\n });\n this.resetScrolling();\n }\n\n private setContainerRect() {\n this.containerRect.set({\n width: this.containerElement().offsetWidth,\n height: this.containerElement().offsetHeight\n });\n }\n\n private containerResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n const containerWidth = this.containerElement().offsetWidth;\n const totalWidth = this.coordinate().totalWidth + AI_TABLE_FIELD_ADD_BUTTON_WIDTH;\n this.setContainerRect();\n if (containerWidth >= totalWidth) {\n this.aiTable.context!.setScrollState({ scrollLeft: 0 });\n return;\n }\n });\n this.resizeObserver.observe(this.containerElement());\n }\n\n private toggleHoverCellEditor() {\n const { realTargetName } = this.aiTable.context?.pointPosition()!;\n const { targetName, fieldId, recordId } = getDetailByTargetName(realTargetName!);\n const editingCell = this.aiTableGridEventService.getCurrentEditCell();\n\n if (targetName === AI_TABLE_CELL && recordId && fieldId) {\n const field = this.aiTable.fieldsMap()[fieldId];\n\n if (!field) {\n return;\n }\n\n const fieldType = field.type;\n const editingFieldType = editingCell ? this.aiTable.fieldsMap()[editingCell.fieldId].type : null;\n const isEditingFieldTypeHovered = editingFieldType ? MOUSEOVER_EDIT_TYPE.includes(editingFieldType) : false;\n const isFieldTypeHovered = MOUSEOVER_EDIT_TYPE.includes(fieldType);\n\n if (editingCell && isEditingFieldTypeHovered) {\n this.aiTableGridEventService.closeCellEditor();\n }\n\n if (!editingCell && !isFieldTypeHovered) {\n this.aiTableGridEventService.closeCellEditor();\n return;\n }\n\n if (editingCell && ((!isEditingFieldTypeHovered && isFieldTypeHovered) || !isFieldTypeHovered)) {\n return;\n }\n\n setTimeout(() => {\n this.aiTableGridEventService.openCellEditor(this.aiTable, {\n container: this.containerElement(),\n coordinate: this.coordinate(),\n fieldId: fieldId!,\n recordId: recordId!,\n isHoverEdit: true,\n updateFieldValue: (value: UpdateFieldValueOptions<any>) => {\n this.aiUpdateFieldValue.emit(value);\n }\n });\n });\n } else {\n // 鼠标位于非单元格区域时,如果当前有 mouseover 编辑元素,则结束编辑\n if (editingCell && MOUSEOVER_EDIT_TYPE.includes(this.aiTable.fieldsMap()[editingCell.fieldId].type)) {\n this.aiTableGridEventService.closeCellEditor();\n }\n }\n }\n}\n","<div #container class=\"ai-table-grid-view\">\n @if (hasContainerRect()) {\n <ai-table-renderer\n [config]=\"rendererConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n >\n <div #horizontalBar class=\"ai-table-horizontal-scroll-bar-wrapper\" [style.width.px]=\"containerRect().width\">\n <div class=\"ai-table-scroll-bar-inner\" [style.width.px]=\"scrollbarWidth()\"></div>\n </div>\n <div\n #verticalBar\n class=\"ai-table-vertical-scroll-bar-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n <div class=\"ai-table-scroll-bar-inner\" [style.height.px]=\"scrollTotalHeight()\"></div>\n </div>\n </ai-table-renderer>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i2","Image","_"],"mappings":"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"}
|