@ai-table/grid 0.0.41 → 0.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/components/cell-editors/link/link-editor.component.mjs +2 -2
- package/esm2022/components/drag/drag.component.mjs +2 -2
- package/esm2022/grid.component.mjs +4 -3
- package/esm2022/utils/clipboard/clipboard.mjs +19 -8
- package/esm2022/utils/clipboard/paste.mjs +43 -27
- package/esm2022/utils/field/model/date.mjs +36 -7
- package/esm2022/utils/field/model/select.mjs +2 -2
- package/fesm2022/ai-table-grid.mjs +100 -44
- package/fesm2022/ai-table-grid.mjs.map +1 -1
- package/grid.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/utils/clipboard/clipboard.d.ts.map +1 -1
- package/utils/clipboard/paste.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/types/view.ts","../../../packages/grid/src/core/coordinate.ts","../../../packages/grid/src/core/utils/shoft-id.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/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/pipes/grid.pipe.ts","../../../packages/grid/src/components/field-setting/field-setting.component.ts","../../../packages/grid/src/components/field-setting/field-setting.component.html","../../../packages/grid/src/services/selection.service.ts","../../../packages/grid/src/components/context-menu/context-menu.component.ts","../../../packages/grid/src/components/context-menu/context-menu.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/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/clipboard/clipboard.ts","../../../packages/grid/src/utils/clipboard/extract.ts","../../../packages/grid/src/utils/field/operate.ts","../../../packages/grid/src/utils/field/model/field.ts","../../../packages/grid/src/utils/field/model/attachment.ts","../../../packages/grid/src/utils/field/model/date.ts","../../../packages/grid/src/utils/field/model/link.ts","../../../packages/grid/src/utils/field/model/member.ts","../../../packages/grid/src/utils/field/model/number.ts","../../../packages/grid/src/utils/field/model/progress.ts","../../../packages/grid/src/utils/field/model/rate.ts","../../../packages/grid/src/utils/field/model/select.ts","../../../packages/grid/src/utils/field/model/text.ts","../../../packages/grid/src/utils/field/model/index.ts","../../../packages/grid/src/utils/clipboard/copy.ts","../../../packages/grid/src/utils/clipboard/paste.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/utils/match-keywords.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/container.token.ts","../../../packages/grid/src/angular-konva/components/shape.component.ts","../../../packages/grid/src/angular-konva/components/container.component.ts","../../../packages/grid/src/renderer/components/text.component.ts","../../../packages/grid/src/renderer/drawers/drawer.ts","../../../packages/grid/src/renderer/components/cells/link.component.ts","../../../packages/grid/src/renderer/components/cells/cells.ts","../../../packages/grid/src/utils/hover-cell.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/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/layout-drawer.ts","../../../packages/grid/src/renderer/drawers/add-row-layout-drawer.ts","../../../packages/grid/src/constants/file-icon.ts","../../../packages/grid/src/utils/icon.ts","../../../packages/grid/src/utils/file.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/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/components/hover-cell.component.ts","../../../packages/grid/src/renderer/renderer.component.ts","../../../packages/grid/src/renderer/renderer.component.html","../../../packages/grid/src/components/drag/drag.component.ts","../../../packages/grid/src/components/drag/drag.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 itemMatchBgColor: '#ff9f731a',\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 { AIRecordFieldIdPath, AITableDragState, AITableField, AITableFields, AITableRecord, AITableRecords, AITableValue } from './core';\n\nexport interface AITable {\n records: WritableSignal<AITableRecords>;\n fields: WritableSignal<AITableFields>;\n gridData: Signal<AITableValue>;\n context?: RendererContext;\n selection: WritableSignal<AITableSelection>;\n keywordsMatchedCells: WritableSignal<Set<string>>; // [`${recordId}:${fieldId}`]\n recordsMap: Signal<{ [key: string]: AITableRecord }>;\n fieldsMap: Signal<{ [key: string]: AITableField }>;\n recordsWillHidden: WritableSignal<string[]>;\n recordsWillMove: WritableSignal<string[]>;\n dragState?: WritableSignal<AITableDragState>;\n}\n\nexport type AIPlugin = (aiTable: AITable) => AITable;\n\nexport const AITable = {\n getColors() {\n return Colors;\n },\n getVisibleFields(aiTable: AITable): AITableFields {\n return aiTable.gridData().fields.filter((field) => !field.hidden);\n },\n getVisibleRows(aiTable: AITable): AITableRecords {\n return aiTable.records();\n },\n getActiveCell(aiTable: AITable): AIRecordFieldIdPath | null {\n return aiTable.selection().activeCell;\n },\n getActiveRecordIds(aiTable: AITable): string[] {\n const selectedRecords = aiTable.selection().selectedRecords;\n const selectedCells = aiTable.selection().selectedCells;\n let selectedRecordIds: string[] = [];\n if (selectedRecords.size > 0) {\n selectedRecordIds = [...selectedRecords.keys()];\n } else if (selectedCells.size > 0) {\n selectedRecordIds = [...selectedCells].map((item) => item.split(':')[0]);\n } else {\n selectedRecordIds = [];\n }\n return selectedRecordIds;\n },\n isCellVisible(aiTable: AITable, cell: AIRecordFieldIdPath): boolean {\n const visibleRowIndexMap = aiTable.context!.visibleRowsIndexMap();\n const visibleColumnIndexMap = aiTable.context!.visibleColumnsIndexMap();\n const [recordId, fieldId] = cell || [];\n const isVisible = visibleRowIndexMap!.has(recordId) && visibleColumnIndexMap.has(fieldId);\n return isVisible;\n },\n getCellIndex(aiTable: AITable, cell: AIRecordFieldIdPath): { rowIndex: number; columnIndex: number } | null {\n const visibleRowIndexMap = aiTable.context!.visibleRowsIndexMap();\n const visibleColumnIndexMap = aiTable.context!.visibleColumnsIndexMap();\n if (AITable.isCellVisible(aiTable, cell)) {\n const [recordId, fieldId] = cell;\n return {\n rowIndex: visibleRowIndexMap!.get(recordId)!,\n columnIndex: visibleColumnIndexMap.get(fieldId)!\n };\n }\n return null;\n },\n isFrozenColumn(aiTable: AITable, columnIndex: number) {\n const frozenColumnCount = aiTable.context!.frozenColumnCount();\n if (columnIndex <= frozenColumnCount - 1) {\n return true;\n }\n return false;\n }\n};\n","import { Vector2d } from 'konva/lib/types';\nimport { Id } from 'ngx-tethys/types';\nimport { Coordinate } from '../coordinate';\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 attachment = 'attachment',\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 | AttachmentSettings;\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 AttachmentSettings {}\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 LinkFieldValue = { url: string; text: 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 AttachmentFieldValue = string[];\n\nexport type ProgressFieldValue = number; // [0,1]\n\nexport type RateFieldValue = 1 | 2 | 3 | 4 | 5;\n\nexport type FieldValue =\n | TextFieldValue\n | LinkFieldValue\n | SelectFieldValue\n | NumberFieldValue\n | DateFieldValue\n | MemberFieldValue\n | ProgressFieldValue\n | RateFieldValue\n | AttachmentFieldValue\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 short_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 isCopy?: boolean;\n count?: number;\n}\n\nexport interface UpdateFieldValueOptions<T = unknown> {\n value: T;\n path: AIRecordFieldIdPath;\n}\n\nexport interface SetFieldOptions<T = unknown> {\n field: AITableField;\n path: IdPath;\n}\n\nexport interface MoveFieldOptions {\n path: NumberPath;\n newPath: NumberPath;\n}\n\nexport type NumberPath = [number];\n\nexport type IdPath = [string];\n\nexport type AIRecordFieldIdPath = [string, string];\n\nexport type Path = NumberPath | IdPath | AIRecordFieldIdPath;\n\nexport enum DragType {\n record = 'record',\n field = 'field',\n columnWidth = 'columnWidth',\n none = 'none'\n}\n\nexport interface AITableDragState {\n type: DragType;\n sourceIds: Set<string>;\n scroll?: Vector2d;\n coordinate?: Coordinate;\n}\n\nexport interface DragEndData {\n type: DragType;\n targetIndex?: number;\n fieldIds?: Set<string>;\n fieldsIndex?: number[];\n recordIds?: Set<string>;\n recordsIndex?: number[];\n changeSize?: number;\n}\n","import { AITableFieldOption, AITableFieldType } from '../types';\n\nexport const AI_TABLE_FIELD_MINI_WIDTH = 140;\nexport const AI_TABLE_FIELD_MIN_WIDTH = 160;\nexport const AI_TABLE_FIELD_MIDDLE_WIDTH = 200;\nexport const AI_TABLE_FIELD_MAX_WIDTH = 300;\n\nexport const FieldOptions: AITableFieldOption[] = [\n {\n type: AITableFieldType.text,\n name: '单行文本',\n icon: 'font',\n width: AI_TABLE_FIELD_MAX_WIDTH\n },\n // 多行文本\n {\n type: AITableFieldType.select,\n name: '单选',\n icon: 'check-circle',\n width: AI_TABLE_FIELD_MIN_WIDTH\n },\n {\n type: AITableFieldType.select,\n name: '多选',\n icon: 'list-check',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH,\n settings: {\n is_multiple: true\n }\n },\n {\n type: AITableFieldType.number,\n name: '数字',\n icon: 'hashtag',\n width: AI_TABLE_FIELD_MINI_WIDTH\n },\n {\n type: AITableFieldType.date,\n name: '日期',\n icon: 'calendar',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n },\n {\n type: AITableFieldType.member,\n name: '成员',\n icon: 'user',\n width: AI_TABLE_FIELD_MIN_WIDTH,\n settings: {\n is_multiple: false\n }\n },\n // 级联单选\n // 级联多选\n {\n type: AITableFieldType.progress,\n name: '进度',\n icon: 'progress',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n },\n {\n type: AITableFieldType.rate,\n name: '评分',\n icon: 'star-circle',\n width: AI_TABLE_FIELD_MIN_WIDTH\n },\n {\n type: AITableFieldType.link,\n name: '链接',\n icon: 'link-insert',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n },\n {\n type: AITableFieldType.attachment,\n name: '附件',\n icon: 'attachment',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n },\n {\n type: AITableFieldType.createdBy,\n name: '创建人',\n icon: 'user',\n width: AI_TABLE_FIELD_MIN_WIDTH\n },\n {\n type: AITableFieldType.createdAt,\n name: '创建时间',\n icon: 'calendar',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n },\n {\n type: AITableFieldType.updatedBy,\n name: '更新人',\n icon: 'user',\n width: AI_TABLE_FIELD_MIN_WIDTH\n },\n {\n type: AITableFieldType.updatedAt,\n name: '更新时间',\n icon: 'calendar',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n }\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';\nimport { AITableRender } from './cell';\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 AITableHoverCellConfig {\n aiTable: AITable;\n coordinate: Coordinate;\n field: AITableField;\n x: number;\n y: number;\n render: AITableRender;\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, ViewContainerRef, WritableSignal } from '@angular/core';\nimport { Dictionary } from 'ngx-tethys/types';\nimport {\n AIRecordFieldIdPath,\n AITable,\n AITableField,\n AITableFields,\n AITableFieldType,\n AITableRecord,\n Coordinate,\n FieldValue,\n UpdateFieldValueOptions\n} 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 AITableContent {\n records: Partial<AITableRecord>[];\n fields: AITableFields;\n}\n\nexport interface AITableGridData extends AITableContent {\n type: 'grid';\n}\n\nexport interface AITableSelection {\n selectedRecords: Set<string>; // `${recordId}`\n selectedFields: Set<string>; // `${fieldId}`\n selectedCells: Set<string>; // `${recordId}:${fieldId}`\n activeCell: AIRecordFieldIdPath | null;\n selectAllState: AITableSelectAllState; // 'all','partial','none'\n}\n\nexport interface AIFieldConfig {\n fieldRenderers?: Partial<Record<AITableFieldType, AITableGridCellRenderSchema>>;\n fieldSettingComponent?: any;\n fieldMenus?: AITableFieldMenuItem[];\n}\n\nexport interface AITableUserInfo {\n uid?: string;\n display_name?: string;\n avatar?: string;\n [key: string]: any;\n}\n\nexport interface AITableAttachmentInfo {\n _id: string;\n title: string;\n addition: {\n ext: string;\n summary?: string;\n size?: number;\n path?: string;\n [key: string]: any;\n };\n token?: string;\n [key: string]: any;\n}\n\nexport interface AITableReferences {\n members: Dictionary<AITableUserInfo>;\n attachments: Dictionary<AITableAttachmentInfo>;\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 rowIndicesSizeMap: AITableSizeMap;\n columnIndicesSizeMap: 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 references: AITableReferences;\n container?: HTMLDivElement;\n isHoverEdit?: boolean;\n viewContainerRef?: ViewContainerRef;\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 visibleColumnsIndexMap: Signal<Map<string, number>>;\n visibleRowsIndexMap: Signal<Map<string, number>>;\n frozenColumnCount: Signal<number>;\n references: Signal<AITableReferences>;\n aiFieldConfig: Signal<AIFieldConfig | undefined>;\n}\n\nexport enum AITableSelectAllState {\n all = 'all',\n partial = 'partial',\n none = 'none'\n}\n","import { ElementRef, ViewContainerRef } from '@angular/core';\nimport { AITable, Coordinate } from '../core';\nimport { AITableGridSelectionService } from '../services/selection.service';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\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\nexport interface AITableContextMenuItem {\n type: string;\n name?: string;\n icon?: string;\n shortcutKey?: string;\n exec?: (\n aiTable: AITable,\n targetName: string,\n position: { x: number; y: number },\n aiTableGridSelectionService: AITableGridSelectionService,\n notifyService: ThyNotifyService\n ) => void;\n hidden?: (aiTable: AITable, targetName: string, position: { x: number; y: number }) => boolean;\n disabled?: (aiTable: AITable, targetName: string, position: { x: number; y: number }) => boolean;\n}\n\nexport interface AITableContextMenuOptions {\n origin: ElementRef<any> | HTMLElement;\n position: { x: number; y: number };\n menuItems: AITableContextMenuItem[];\n targetName: string;\n viewContainerRef: ViewContainerRef;\n}\n","import { Id } from 'ngx-tethys/types';\n\nexport enum AITableFilterOperation {\n eq = 'eq',\n gte = 'gte',\n lte = 'lte',\n gt = 'gt',\n lt = 'lt',\n in = 'in',\n contain = 'contain',\n ne = 'ne',\n nin = 'nin',\n between = 'between',\n besides = 'besides',\n empty = 'empty',\n exists = 'exists',\n notContain = 'not_contain'\n}\n\nexport interface AITableFilterCondition<TValue = unknown> {\n field_id: Id;\n operation: AITableFilterOperation;\n value: TValue;\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 rowIndicesSizeMap: AITableSizeMap = {};\n // 用 index 映射 每一列 的 宽度\n public columnIndicesSizeMap: 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 rowIndicesSizeMap = {},\n columnIndicesSizeMap = {},\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.rowIndicesSizeMap = rowIndicesSizeMap;\n this.columnIndicesSizeMap = columnIndicesSizeMap;\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.rowIndicesSizeMap[index] ?? this.rowHeight;\n }\n\n /**\n * 根据 columnIndex 获取对应列宽\n */\n public getColumnWidth(index: number) {\n return this.columnIndicesSizeMap[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.columnIndicesSizeMap[i] : (this.rowIndicesSizeMap[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 { customAlphabet } from 'nanoid';\nimport { isNil, isNumber, isString, includes, values } from 'lodash';\n\nexport enum AlphabetType {\n url = 1,\n numbers = 2,\n lowercase = 3,\n uppercase = 4,\n alphanumeric = 5\n}\n\nexport enum AlphabetDictionary {\n url = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-',\n numbers = '0123456789',\n lowercase = 'abcdefghijklmnopqrstuvwxyz',\n uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n alphanumeric = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n}\n\nconst buildInAlphabets = {\n [AlphabetType.url]: customAlphabet(AlphabetDictionary.url),\n [AlphabetType.numbers]: customAlphabet(AlphabetDictionary.numbers),\n [AlphabetType.lowercase]: customAlphabet(AlphabetDictionary.lowercase),\n [AlphabetType.uppercase]: customAlphabet(AlphabetDictionary.uppercase),\n [AlphabetType.alphanumeric]: customAlphabet(AlphabetDictionary.alphanumeric)\n};\n\n/**\n * 使用nanoid实现\n * @param alphabet\n * @param size [number] id 长度 [6,32]之间 默认为6\n */\nexport function shortId(alphabet?: AlphabetType | string, size?: number): string;\n\n/**\n * 使用nanoid实现\n * @param alphabet [string | AlphabetType] 默认为 AlphabetType.url\n * @param size [number] id 长度 [6,32]之间 默认为6\n * @param quantity [number] id 个数\n */\nexport function shortId(alphabet?: AlphabetType | string, size?: number, quantity?: number): string[];\n\nexport function shortId(alphabet: AlphabetType | string = AlphabetType.url, size: number = 6, quantity?: number): string | string[] {\n if (size < 6 || size > 32) {\n throw new Error(`Invalid size \"${size}\", size must in 6-32`);\n }\n let idGenerator: (size?: number) => string;\n if (isNumber(alphabet)) {\n if (!includes(values(AlphabetType), alphabet)) {\n throw new Error(`Invalid alphabet \"${alphabet}\", alphabet must one of ${Object.values(AlphabetType).join(' ')}`);\n }\n idGenerator = buildInAlphabets[alphabet];\n } else if (isString(alphabet)) {\n idGenerator = customAlphabet(alphabet);\n } else {\n throw new Error(`Invalid alphabet \"${alphabet}\", alphabet type must be AlphabetType or string`);\n }\n if (!isNil(quantity)) {\n if (!isNumber(quantity)) {\n throw new Error(`Invalid quantity \"${quantity}\", quantity type must be number`);\n }\n const idTasks = Array.from({ length: quantity }, () => idGenerator(size));\n const ids = idTasks;\n return ids;\n }\n return idGenerator(size);\n}\n","import ObjectID from 'bson-objectid';\nimport { shortId } from './shoft-id';\n\nexport function idCreator() {\n return ObjectID().toHexString();\n}\n\nexport function idsCreator(count: number) {\n if (count <= 0) return [];\n const newIds: string[] = [];\n for (let i = 0; i < count; i++) {\n newIds.push(idCreator());\n }\n return newIds;\n}\n\nexport function shortIdCreator() {\n return shortId(undefined, 8);\n}\n\nexport function shortIdsCreator(count: number) {\n return shortId(undefined, 8, count);\n}\n","import { FieldOptions, AI_TABLE_FIELD_MIDDLE_WIDTH } from '../constants/field';\nimport { AITable, AITableField, AITableFieldOption, AITableFieldType, IsMultiple, MemberSettings } from '../types';\nimport { idCreator } from './id-creator';\n\nexport const isArrayField = (field: AITableField) => {\n return [\n AITableFieldType.member,\n AITableFieldType.createdBy,\n AITableFieldType.updatedBy,\n AITableFieldType.select,\n AITableFieldType.attachment\n ].includes(field.type);\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 null;\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 let fieldOption = FieldOptions.find((item) => isSameFieldOption(item, field));\n if (fieldOption && field.type === AITableFieldType.member && (field.settings as MemberSettings)?.is_multiple) {\n fieldOption.width = AI_TABLE_FIELD_MIDDLE_WIDTH;\n }\n return fieldOption;\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 { Signal, WritableSignal, computed, signal } from '@angular/core';\nimport { AITable, AITableField, AITableFields, AITableRecord, AITableRecords, AITableValue } from '../types';\nimport { AITableSelectAllState } from '../../types';\n\nexport function createAITable(records: WritableSignal<AITableRecords>, fields: WritableSignal<AITableFields>, gridData: Signal<AITableValue>): AITable {\n const aiTable: AITable = {\n records,\n fields,\n gridData,\n selection: signal({\n selectedRecords: new Set(),\n selectedFields: new Set(),\n selectedCells: new Set(),\n activeCell: null,\n selectAllState: AITableSelectAllState.none\n }),\n keywordsMatchedCells: signal(new Set()),\n recordsMap: computed(() => {\n return records().reduce(\n (object, item) => {\n object[item._id] = item;\n return object;\n },\n {} as { [key: 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 { [key: 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 AIRecordFieldIdPath,\n IdPath,\n NumberPath,\n AITableFieldType,\n SystemFieldTypes,\n DateFieldValue,\n MemberFieldValue\n} from '../types';\nimport { isSystemField } from './field';\n\nexport function getFieldValue(record: Partial<AITableRecord>, field: AITableField) {\n if (isSystemField(field)) {\n return getSystemFieldValue(record, field.type as SystemFieldTypes);\n }\n return record.values?.[field._id];\n}\n\nexport function getSystemFieldValue(record: Partial<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\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: AIRecordFieldIdPath): 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 return getFieldValue(record, field);\n },\n getSystemFieldValue(record: Partial<AITableRecord>, type: SystemFieldTypes) {\n return getSystemFieldValue(record, 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 {\n AIFieldConfig,\n AITableContext,\n AITableLinearRow,\n AITablePointPosition,\n AITableReferences,\n AITableScrollState,\n ScrollActionOptions\n} from '../types';\n\nexport class RendererContext {\n linearRows: Signal<AITableLinearRow[]>;\n pointPosition: WritableSignal<AITablePointPosition>;\n scrollState: WritableSignal<AITableScrollState>;\n visibleColumnsIndexMap: Signal<Map<string, number>>;\n visibleRowsIndexMap: Signal<Map<string, number>>;\n frozenColumnCount: Signal<number>;\n references: Signal<AITableReferences>;\n aiFieldConfig: Signal<AIFieldConfig | undefined>;\n scrollAction: (options: ScrollActionOptions) => void;\n\n constructor(options: AITableContext) {\n const {\n linearRows,\n pointPosition,\n scrollState,\n visibleColumnsIndexMap,\n visibleRowsIndexMap,\n frozenColumnCount,\n references,\n aiFieldConfig,\n scrollAction\n } = options;\n this.linearRows = linearRows;\n this.pointPosition = pointPosition;\n this.scrollState = scrollState;\n this.scrollAction = scrollAction;\n this.visibleColumnsIndexMap = visibleColumnsIndexMap;\n this.visibleRowsIndexMap = visibleRowsIndexMap;\n this.frozenColumnCount = frozenColumnCount;\n this.references = references;\n this.aiFieldConfig = aiFieldConfig;\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, Input, OnInit, output } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { AITable, AITableField, AITableQueries, UpdateFieldValueOptions } from '../../core';\nimport { AITableReferences } from '../../types';\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 @Input({ required: true }) references!: AITableReferences;\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 { 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 { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThySelect, ThySelectModule } from 'ngx-tethys/select';\nimport { ThyOption } from 'ngx-tethys/shared';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { AITableQueries, AITableSelectOptionStyle } from '../../../core';\nimport { AITableSelectField } from '../../../types';\nimport { SelectOptionComponent } from '../../cell-views/select/option.component';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\nimport { ThyFormModule } from 'ngx-tethys/form';\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 ThySelect,\n ThyOption,\n ThyTooltipModule,\n SelectOptionComponent,\n CommonModule,\n ThyEmptyModule,\n ThyFormModule,\n FormsModule,\n ThySelectModule\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 onOpenChange(value: boolean) {\n if (!value) {\n this.closePopover();\n }\n }\n\n onModelChange(event: any) {\n this.updateValueFn();\n }\n\n updateValueFn() {\n const value = (this.isMultiple ? this.modelValue : (this.modelValue && ([this.modelValue] as string[])) || []) as string[];\n const originValue = AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id]) as string[];\n if (!value.every((v, i) => v === originValue[i]) || value.length !== originValue.length) {\n this.updateFieldValue.emit({\n value: value,\n path: [this.record()._id, this.field()._id]\n });\n }\n }\n}\n","<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"true\"\n [thyAllowClear]=\"true\"\n [thyPlaceHolder]=\"''\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (ngModelChange)=\"onModelChange($event)\"\n (thyOnExpandStatusChange)=\"onOpenChange($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 private maxHeight = 148;\n\n private minHeight = 24;\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 this.render2.setStyle(textarea, 'height', 'auto');\n const scrollHeight = textarea.scrollHeight;\n const newHeight = Math.max(this.minHeight, Math.min(scrollHeight, this.maxHeight)) + 4;\n\n this.render2.setStyle(textarea, 'max-height', `${this.maxHeight}px`);\n this.render2.setStyle(textarea, 'height', `${newHeight}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 { Pipe, PipeTransform } from '@angular/core';\nimport {\n AITableField,\n AITableFieldOption,\n AITableFieldSettings,\n AITableSelectOption,\n isSameFieldOption,\n MemberSettings,\n SelectSettings\n} 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\n@Pipe({\n name: 'fieldIsSameOption',\n standalone: true\n})\nexport class AITableFieldIsSameOptionPipe implements PipeTransform {\n transform(fieldOption: AITableFieldOption, field: Partial<AITableField>) {\n return isSameFieldOption(fieldOption, field);\n }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n TemplateRef,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButton } from 'ngx-tethys/button';\nimport {\n ThyDropdownDirective,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemExtendIconDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemNameDirective\n} from 'ngx-tethys/dropdown';\nimport { ThyFormModule, ThyFormValidatorConfig, ThyUniqueCheckValidator } from 'ngx-tethys/form';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyInputCount, ThyInputDirective, ThyInputGroup } from 'ngx-tethys/input';\nimport { ThySwitch } from 'ngx-tethys/switch';\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 AITableFieldType,\n MemberSettings\n} from '../../core';\nimport { AITableFieldIsSameOptionPipe } from '../../pipes';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'ai-table-field-setting',\n templateUrl: './field-setting.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n FormsModule,\n ThyIcon,\n ThyInputGroup,\n ThyInputCount,\n ThyInputDirective,\n ThyUniqueCheckValidator,\n ThyDropdownMenuComponent,\n ThyDropdownDirective,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemNameDirective,\n ThyDropdownMenuItemExtendIconDirective,\n ThyButton,\n ThySwitch,\n ThyFormModule,\n NgTemplateOutlet,\n ThyAutofocusDirective,\n AITableFieldIsSameOptionPipe\n ],\n host: {\n class: 'field-setting 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 AITableFieldSetting implements OnInit {\n aiEditField = model.required<AITableField>();\n\n aiTable = input.required<AITable>();\n\n aiExternalTemplate = input<TemplateRef<any> | null>(null);\n\n isUpdate = input<boolean, unknown>(false, { transform: booleanAttribute });\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 = _.cloneDeep(FieldOptions);\n\n aITableFieldType = AITableFieldType;\n\n isMultipleMember = false;\n\n protected thyPopoverRef = inject(ThyPopoverRef<AITableFieldSetting>);\n\n ngOnInit(): void {\n this.isMultipleMember =\n this.aiEditField().type === AITableFieldType.member && !!(this.aiEditField().settings as MemberSettings)?.is_multiple;\n }\n\n checkUniqueName = (fieldName: string) => {\n fieldName = fieldName?.trim();\n return of(\n !!this.aiTable()\n .fields()\n ?.find((field) => field.name === fieldName && this.aiEditField()?._id !== field._id)\n );\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 setTimeout(() => {\n this.thyPopoverRef.updatePosition();\n }, 0);\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 multipleMemberChange() {\n this.aiEditField.set({\n ...this.aiEditField(),\n settings: {\n ...(this.aiEditField().settings || {}),\n is_multiple: this.isMultipleMember\n }\n });\n }\n\n fieldTypeClick(e: Event) {\n e.preventDefault();\n e.stopPropagation();\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=\"thy-dropdown-menu py-0\">\n <div class=\"ml-n5 mr-n5\">\n <span\n thyDropdownMenuItem\n [thyDropdown]=\"menu\"\n [thyDisabled]=\"isUpdate()\"\n thyTrigger=\"hover\"\n thyPlacement=\"right\"\n (click)=\"fieldTypeClick($event)\"\n >\n <thy-icon thyDropdownMenuItemIcon [thyIconName]=\"selectedFieldOption().icon\"></thy-icon>\n <span thyDropdownMenuItemName>{{ selectedFieldOption().name }}</span>\n <thy-icon thyDropdownMenuItemExtendIcon thyIconName=\"angle-right\" class=\"text-desc\"></thy-icon>\n </span>\n </div>\n </div>\n\n @if (selectedFieldOption().type === aITableFieldType.member) {\n <div class=\"d-flex justify-content-between mt-3\">\n 允许选择多个成员\n <thy-switch\n name=\"isMultipleMember\"\n [thyDisabled]=\"isUpdate()\"\n [(ngModel)]=\"isMultipleMember\"\n (ngModelChange)=\"multipleMemberChange()\"\n thySize=\"sm\"\n ></thy-switch>\n </div>\n }\n </thy-form-group>\n @if (aiExternalTemplate()) {\n <ng-container *ngTemplateOutlet=\"aiExternalTemplate()\"></ng-container>\n }\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\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{\n active: (item | fieldIsSameOption: aiEditField())\n }\"\n (click)=\"selectFieldType(item)\"\n >\n <thy-icon [thyIconName]=\"item.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n </a>\n }\n</thy-dropdown-menu>\n","import { computed, Injectable, signal } from '@angular/core';\nimport { AIRecordFieldIdPath, AITable, AITableDragState, DragType } from '../core';\nimport { AITableSelectAllState } from '../types';\n\n@Injectable()\nexport class AITableGridSelectionService {\n aiTable!: AITable;\n\n selectAllState = computed(() => {\n const selectedRecords = this.aiTable.selection().selectedRecords;\n return selectedRecords.size === this.aiTable.records().length\n ? AITableSelectAllState.all\n : selectedRecords.size === 0\n ? AITableSelectAllState.none\n : AITableSelectAllState.partial;\n });\n\n constructor() {}\n\n initialize(aiTable: AITable) {\n this.aiTable = aiTable;\n this.aiTable.dragState = signal({\n type: DragType.none,\n sourceIds: new Set()\n });\n }\n\n clearSelection() {\n this.aiTable.selection.set({\n selectedRecords: new Set(),\n selectedFields: new Set(),\n selectedCells: new Set(),\n activeCell: null,\n selectAllState: AITableSelectAllState.none\n });\n }\n\n setActiveCell(activeCell: AIRecordFieldIdPath) {\n this.aiTable.selection().activeCell = activeCell;\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.add(fieldId);\n }\n\n get selectedFields() {\n return this.aiTable.selection().selectedFields;\n }\n\n get selectedRecords() {\n return this.aiTable.selection().selectedRecords;\n }\n\n drag(config: AITableDragState) {\n this.aiTable.dragState!.set(config);\n }\n\n clearDrag() {\n this.aiTable.dragState!.set({\n type: DragType.none,\n sourceIds: new Set()\n });\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.add(recordId);\n }\n const selectedRecords = this.aiTable.selection().selectedRecords;\n this.aiTable.selection.set({\n selectedRecords: selectedRecords,\n selectedFields: new Set(),\n selectedCells: new Set(),\n activeCell: null,\n selectAllState: this.selectAllState()\n });\n }\n\n toggleSelectAll(checked: boolean) {\n if (checked) {\n if (this.aiTable.records().length === 0) {\n this.aiTable.selection.set({\n ...this.aiTable.selection(),\n selectAllState: AITableSelectAllState.all\n });\n } else {\n this.aiTable.records().forEach((item) => {\n this.selectRecord(item._id);\n });\n }\n } else {\n this.clearSelection();\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.selectCells([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 selectCells(startCell: AIRecordFieldIdPath, endCell?: AIRecordFieldIdPath) {\n const [startRecordId, startFieldId] = startCell;\n const records = this.aiTable.context!.linearRows();\n const fields = AITable.getVisibleFields(this.aiTable);\n const selectedCells = new Set<string>();\n\n if (!endCell) {\n selectedCells.add(`${startRecordId}:${startFieldId}`);\n } else {\n const [endRecordId, endFieldId] = endCell;\n\n const startRowIndex = this.aiTable.context!.visibleRowsIndexMap().get(startRecordId)!;\n const endRowIndex = this.aiTable.context!.visibleRowsIndexMap().get(endRecordId)!;\n const startColIndex = this.aiTable.context!.visibleColumnsIndexMap().get(startFieldId)!;\n const endColIndex = this.aiTable.context!.visibleColumnsIndexMap().get(endFieldId)!;\n\n const minRowIndex = Math.min(startRowIndex, endRowIndex);\n const maxRowIndex = Math.max(startRowIndex, endRowIndex);\n const minColIndex = Math.min(startColIndex, endColIndex);\n const maxColIndex = Math.max(startColIndex, endColIndex);\n\n for (let i = minRowIndex; i <= maxRowIndex; i++) {\n for (let j = minColIndex; j <= maxColIndex; j++) {\n selectedCells.add(`${records[i]._id}:${fields[j]._id}`);\n }\n }\n }\n\n this.clearSelection();\n this.setActiveCell(startCell);\n this.aiTable.selection().selectedCells = selectedCells;\n }\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport {\n ThyDropdownAbstractMenu,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemNameDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemMetaDirective\n} from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyDivider } from 'ngx-tethys/divider';\nimport { AITable } from '../../core';\nimport { AITableContextMenuItem } from '../../types';\nimport { AITableGridSelectionService } from '../../services/selection.service';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\n\n@Component({\n selector: 'ai-table-context-menu',\n templateUrl: './context-menu.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'context-menu'\n },\n imports: [\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemNameDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemMetaDirective,\n ThyIcon,\n NgClass,\n ThyDivider\n ]\n})\nexport class AITableContextMenu extends ThyDropdownAbstractMenu {\n aiTableGridSelectionService = inject(AITableGridSelectionService);\n\n notifyService = inject(ThyNotifyService);\n\n aiTable = input.required<AITable>();\n\n menuItems = input.required<AITableContextMenuItem[]>();\n\n targetName = input.required<string>();\n\n position = input.required<{ x: number; y: number }>();\n\n execute(menu: AITableContextMenuItem) {\n if ((menu.disabled && !menu.disabled(this.aiTable(), this.targetName(), this.position())) || !menu.disabled) {\n menu.exec &&\n menu.exec(this.aiTable(), this.targetName(), this.position(), this.aiTableGridSelectionService, this.notifyService);\n }\n }\n}\n","@for (menu of menuItems(); track $index) {\n @if ((menu.hidden && !menu.hidden(aiTable(), targetName(), position())) || !menu.hidden) {\n @if (menu.type === 'divider') {\n <thy-divider thyStyle=\"solid\"></thy-divider>\n } @else {\n @let disabled = !!(menu.disabled && menu.disabled(aiTable(), targetName(), position()));\n @let isRemoveRecords = menu.type === 'removeRecords';\n @let isPreventClearSelection = menu.type === 'copyCells' || menu.type === 'pasteCells' || menu.type === 'removeRecords';\n\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{\n 'remove-record': isRemoveRecords && !disabled,\n 'ai-table-prevent-clear-selection': isPreventClearSelection && !disabled\n }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n <thy-icon thyDropdownMenuItemIcon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ menu.name }}</span>\n <span thyDropdownMenuItemMeta class=\"text-desc\">{{ menu.shortcutKey }}</span>\n </a>\n }\n }\n}\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_PREVENT_CLEAR_SELECTION_CLASS = '.ai-table-prevent-clear-selection';\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_FILE_ICON_ITEM_HEIGHT = 20; // 文件字段项高度\nexport const AI_TABLE_FILE_ICON_SIZE = 20; // 文件图标大小\nexport const AI_TABLE_CELL_FIELD_ITEM_HEIGHT = 8; // 文件字段项右边距\nexport const AI_TABLE_FIELD_ITEM_MARGIN_RIGHT = 4; // 文件图标之间的间距\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.attachment,\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 = `M8 4.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5zm0 5a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5zm0 5a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.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\nexport const AttachmentPath = `M9.1 6.5V10a3.1 3.1 0 0 1-6.2.006l-.047-4.979a.6.6 0 0 1 1.2-.011L4.1 10a1.9 1.9 0 0 0 3.8 0V4.48C7.9 2.9 6.5 1.6 4.75 1.6S1.6 2.9 1.6 4.48v5.728c0 2.413 1.97 4.371 4.4 4.371 2.43 0 4.4-1.958 4.4-4.37v-5.16a.6.6 0 0 1 1.2 0v5.16c0 3.077-2.508 5.57-5.6 5.57-3.092 0-5.6-2.493-5.6-5.57V4.48C.4 2.216 2.357.4 4.75.4S9.1 2.216 9.1 4.48V6.5z`;\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 { ThyDropdownAbstractMenu, ThyDropdownMenuItemDirective } from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { AITable } from '../../core';\nimport { AITableFieldMenuItem } from '../../types/field';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'ai-table-field-menu',\n templateUrl: './field-menu.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'field-menu'\n },\n imports: [ThyIcon, ThyDivider, ThyDropdownMenuItemDirective, NgClass]\n})\nexport class AITableFieldMenu 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 @let disabled = !!(menu.disabled && menu.disabled(aiTable, field));\n @let isRemoveField = menu.type === 'removeField';\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{ 'remove-field': isRemoveField && !disabled }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\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 { AITableFieldSetting } from '../components';\nimport { AITableFieldMenu } 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?.fieldSettingComponent ?? AITableFieldSetting;\n return this.thyPopover.open(component, {\n origin,\n originPosition: position,\n placement: 'bottomLeft',\n manualClosure: true,\n originActiveClass: undefined,\n height: 'auto',\n panelClass: 'ai-table-field-setting-panel',\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(AITableFieldMenu, {\n origin,\n originPosition: position,\n placement: 'bottomLeft',\n originActiveClass: undefined,\n insideClosable: true,\n initialState: {\n origin: editOrigin,\n position: options.editFieldPosition,\n aiTable,\n fieldId,\n fieldMenus\n }\n });\n return ref;\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 getColumnIndicesSizeMap(fields: AITableField[]) {\n const columnIndicesSizeMap: AITableSizeMap = {};\n fields?.forEach((field, index) => {\n columnIndicesSizeMap[index] = field.width ?? (getFieldOptionByField(field) as AITableFieldOption).width;\n });\n return columnIndicesSizeMap;\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 { isArray, isEmpty as isArrayEmpty, isObject, isUndefinedOrNull } from 'ngx-tethys/util';\nimport { 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\nexport function isEmpty(value: any) {\n if (isArray(value)) {\n return isArrayEmpty(value);\n }\n\n if (isObject(value)) {\n return Reflect.ownKeys(value).length === 0;\n }\n\n return isUndefinedOrNull(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 * 2;\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 * 2;\n const { width, offset } = getCellHorizontalPosition({\n columnWidth,\n columnIndex,\n columnCount\n });\n\n const height = rowHeight - AI_TABLE_OFFSET * 4;\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: width - AI_TABLE_OFFSET * 4,\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 { ClipboardContent } from '../../types';\n\nexport const isClipboardWriteSupported = () => {\n return 'clipboard' in navigator && 'write' in navigator.clipboard;\n};\n\nexport const isClipboardWriteTextSupported = () => {\n return 'clipboard' in navigator && 'writeText' in navigator.clipboard;\n};\n\nexport const isClipboardReadSupported = () => {\n return 'clipboard' in navigator && 'read' in navigator.clipboard;\n};\n\nexport const isClipboardReadTextSupported = () => {\n return 'clipboard' in navigator && 'readText' in navigator.clipboard;\n};\n\nexport const writeToClipboard = async (data: ClipboardContent) => {\n try {\n const { text, html } = data;\n if (isClipboardWriteSupported()) {\n const clipboardItem = new ClipboardItem({\n 'text/plain': new Blob([text!], { type: 'text/plain' }),\n 'text/html': new Blob([html!], { type: 'text/html' })\n });\n await navigator.clipboard.write([clipboardItem]);\n } else if (isClipboardWriteTextSupported()) {\n await navigator.clipboard.writeText(text!);\n } else {\n const textarea = document.createElement('textarea');\n textarea.value = text!;\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n }\n } catch (error) {\n console.warn('Failed to write clipboard:', error);\n }\n};\n\nexport const readFromClipboard = async () => {\n try {\n let clipboardData: ClipboardContent = {};\n if (isClipboardReadSupported()) {\n const clipboardItems = await navigator.clipboard.read();\n if (Array.isArray(clipboardItems) && clipboardItems[0] instanceof ClipboardItem) {\n for (const item of clipboardItems) {\n if (item.types.includes('text/html')) {\n const blob = await item.getType('text/html');\n clipboardData.html = await blob.text();\n }\n if (item.types.includes('text/plain')) {\n const blob = await item.getType('text/plain');\n clipboardData.text = await blob.text();\n }\n }\n }\n } else if (isClipboardReadTextSupported()) {\n const clipboardText = await navigator.clipboard.readText();\n clipboardData.text = clipboardText;\n } else {\n const textarea = document.createElement('textarea');\n document.body.appendChild(textarea);\n textarea.focus();\n document.execCommand('paste');\n const text = textarea.value;\n document.body.removeChild(textarea);\n clipboardData.text = text;\n }\n return clipboardData;\n } catch (error) {\n console.warn('Failed to read clipboard:', error);\n return null;\n }\n};\n","export function extractText(text: string): string {\n let plainText = text;\n if (text.includes('<a')) {\n const aTagMatch = text.match(/<a[^>]*>(.*?)<\\/a>/i);\n if (aTagMatch && aTagMatch[1] && aTagMatch[1].trim()) {\n plainText = aTagMatch[1];\n }\n }\n return plainText;\n}\n\nexport function extractLinkHref(text: string): string | null {\n let href: string | null = null;\n const hrefMatch = text.match(/href=\"([^\"]+)\"/);\n if (hrefMatch && hrefMatch[1] && hrefMatch[1].trim()) {\n href = hrefMatch[1];\n }\n return href;\n}\n","import { isEmpty } from '../common';\n\nexport const zhIntlCollator = typeof Intl !== 'undefined' ? new Intl.Collator('zh-CN') : undefined;\n\nexport function compareNumber(a: number, b: number): number {\n if (isEmpty(a) && isEmpty(b)) {\n return 0;\n }\n if (isEmpty(a)) {\n return -1;\n }\n if (isEmpty(b)) {\n return 1;\n }\n return a === b ? 0 : a > b ? 1 : -1;\n}\n\nexport function compareString(a: string | null, b: string | null): number {\n if (a === b) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n\n // pinyin sort\n return a === b ? 0 : zhIntlCollator ? zhIntlCollator.compare(a, b) : a.localeCompare(b, 'zh-CN') > 0 ? 1 : -1;\n}\n\nexport function stringInclude(str: string, searchStr: string) {\n return str.toLowerCase().includes(searchStr.trim().toLowerCase());\n}\n\n/**\n * 两数组是否有交集\n */\nexport function hasIntersect<T extends number | string>(array1: T[], array2: T[]) {\n if (!Array.isArray(array1) || !Array.isArray(array2)) {\n return false;\n }\n const set1 = new Set(array1);\n const set2 = new Set(array2);\n for (const element of set1) {\n if (set2.has(element)) {\n return true;\n }\n }\n return false;\n}\n","import { AITableFilterCondition, AITableFilterOperation, AITableReferences } from '../../../types';\nimport { AITableField, FieldValue } from '../../../core';\nimport { isEmpty } from '../../common';\n\nexport abstract class Field {\n // 排序\n abstract compare(\n cellValue1: FieldValue,\n cellValue2: FieldValue,\n field: AITableField,\n references?: AITableReferences,\n sortKey?: string\n ): number;\n\n // 粘贴\n abstract toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null,\n references?: AITableReferences\n ): FieldValue | null;\n\n // 筛选\n isMeetFilter(condition: AITableFilterCondition, cellValue: FieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n case AITableFilterOperation.exists: {\n return this.isEmptyOrNot(condition.operation, cellValue);\n }\n default: {\n return true;\n }\n }\n }\n\n // 查找\n cellFullText(transformValue: any, field: AITableField, references?: AITableReferences): string[] {\n let fullText: string[] = [];\n if (!isEmpty(transformValue)) {\n fullText.push(String(transformValue));\n }\n return fullText;\n }\n\n isEmptyOrNot(operation: AITableFilterOperation.empty | AITableFilterOperation.exists, cellValue: FieldValue) {\n switch (operation) {\n case AITableFilterOperation.empty: {\n return isEmpty(cellValue);\n }\n case AITableFilterOperation.exists: {\n return !isEmpty(cellValue);\n }\n default: {\n throw new Error('compare operator type error');\n }\n }\n }\n}\n","import { AITableField, AttachmentFieldValue, FieldValue } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation, AITableReferences } from '../../../types';\nimport { isEmpty } from '../../common';\nimport { compareString, hasIntersect } from '../operate';\nimport { Field } from './field';\n\nexport class AttachmentField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: AttachmentFieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.in:\n return Array.isArray(condition.value) && hasIntersect(cellValue, condition.value);\n case AITableFilterOperation.nin:\n return Array.isArray(condition.value) && !hasIntersect(cellValue, condition.value);\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(\n cellValue1: AttachmentFieldValue,\n cellValue2: AttachmentFieldValue,\n field: AITableField,\n references: AITableReferences,\n sortKey: string\n ): number {\n const value1 = cellValueToSortValue(cellValue1, field, references, sortKey);\n const value2 = cellValueToSortValue(cellValue2, field, references, sortKey);\n return compareString(value1, value2);\n }\n\n override cellFullText(transformValue: string[], field: AITableField, references?: AITableReferences): string[] {\n let fullText: string[] = [];\n if (transformValue?.length && references) {\n for (let index = 0; index < transformValue.length; index++) {\n const attachmentInfo = references?.attachments[transformValue[index]];\n if (!attachmentInfo) {\n continue;\n }\n if (attachmentInfo.title) {\n fullText.push(attachmentInfo.title);\n }\n }\n }\n return fullText;\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: AttachmentFieldValue },\n references?: AITableReferences\n ): AttachmentFieldValue | null {\n return toAttachmentFieldValue(plainText, targetField, originData, references);\n }\n}\n\nexport function toAttachmentFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: AttachmentFieldValue },\n references?: AITableReferences\n): FieldValue | null {\n return null;\n}\n\nfunction cellValueToSortValue(\n cellValue: AttachmentFieldValue,\n field: AITableField,\n references: AITableReferences,\n sortKey = 'title'\n): string | null {\n let values: string[] = [];\n if (cellValue?.length && references) {\n for (let index = 0; index < cellValue.length; index++) {\n const attachmentInfo = references?.attachments[cellValue[index]];\n if (!attachmentInfo) {\n continue;\n }\n\n const value = attachmentInfo[sortKey];\n if (value) {\n values.push(value);\n }\n }\n }\n return values && values.length ? values.join(', ') : null;\n}\n","import { fromUnixTime, subDays } from 'date-fns';\nimport { isArray, TinyDate } from 'ngx-tethys/util';\nimport { Field } from './field';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { AITableField, AITableFieldType, DateFieldValue, FieldValue } from '../../../core';\nimport { compareNumber } from '../operate';\nimport { isEmpty } from '../../common';\n\nexport class DateField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: DateFieldValue) {\n const [left, right] = this.getTimeRange(condition.value);\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue.timestamp) || cellValue.timestamp === 0;\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue.timestamp) && cellValue.timestamp !== 0;\n case AITableFilterOperation.eq:\n return left <= cellValue.timestamp && cellValue.timestamp < right;\n case AITableFilterOperation.gt:\n return cellValue.timestamp > right;\n case AITableFilterOperation.lt:\n return cellValue.timestamp < left;\n case AITableFilterOperation.between:\n return left <= cellValue.timestamp && cellValue.timestamp < right;\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: DateFieldValue, cellValue2: DateFieldValue): number {\n const value1 = cellValueToSortValue(cellValue1);\n const value2 = cellValueToSortValue(cellValue2);\n return compareNumber(value1, value2);\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n ): FieldValue | null {\n return toDateFieldValue(plainText, targetField, originData);\n }\n\n getTimeRange(value: string | number | number[]) {\n switch (value) {\n case 'today':\n return [new TinyDate(new Date()).startOfDay().getUnixTime(), new TinyDate(new Date()).endOfDay().getUnixTime()];\n case 'current_week':\n return [\n new TinyDate().startOfWeek({ weekStartsOn: 1 }).getUnixTime(),\n new TinyDate().endOfWeek({ weekStartsOn: 1 }).getUnixTime()\n ];\n case 'yesterday':\n return [\n new TinyDate(subDays(new Date(), 1)).startOfDay().getUnixTime(),\n new TinyDate(subDays(new Date(), 1)).endOfDay().getUnixTime()\n ];\n case 'current_month':\n return [new TinyDate().startOfMonth().getUnixTime(), new TinyDate().endOfMonth().getUnixTime()];\n default:\n if (isArray(value)) {\n return [\n new TinyDate(fromUnixTime(value[0] as number)).startOfDay().getUnixTime(),\n new TinyDate(fromUnixTime(value[1] as number)).endOfDay().getUnixTime()\n ];\n }\n return [\n new TinyDate(fromUnixTime(value as number)).startOfDay().getUnixTime(),\n new TinyDate(fromUnixTime(value as number)).endOfDay().getUnixTime()\n ];\n }\n }\n}\n\nexport function toDateFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n): FieldValue | null {\n if (targetField.type === AITableFieldType.createdAt || targetField.type === AITableFieldType.updatedAt) {\n return null;\n }\n\n if (originData) {\n const { field, cellValue } = originData;\n switch (field.type) {\n case AITableFieldType.date:\n return cellValue;\n case AITableFieldType.text:\n const dateValue = transformDateValue(cellValue);\n if (dateValue) {\n return dateValue;\n }\n break;\n default:\n break;\n }\n } else {\n const dateValue = transformDateValue(plainText);\n if (dateValue) {\n return dateValue;\n }\n }\n\n return null;\n}\n\nfunction cellValueToSortValue(cellValue: DateFieldValue): number {\n return cellValue?.timestamp;\n}\n\nfunction transformDateValue(text: string): FieldValue | null {\n const value = text.trim();\n const pattern = /^\\d{4}-\\d{1,2}-\\d{1,2}$/;\n\n if (value && !isEmpty(value) && pattern.test(value)) {\n const dateValue = {\n timestamp: new TinyDate(value).getUnixTime()\n };\n return dateValue;\n }\n return null;\n}\n","import { AITableField, AITableFieldType, FieldValue, LinkFieldValue } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { extractText, extractLinkHref } from '../../clipboard';\nimport { isEmpty } from '../../common';\nimport { compareString, stringInclude } from '../operate';\nimport { Field } from './field';\n\nexport class LinkField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: FieldValue) {\n const cellTextValue = cellValue?.text;\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellTextValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellTextValue);\n case AITableFilterOperation.contain:\n return !isEmpty(cellTextValue) && stringInclude(cellTextValue, condition.value);\n default:\n return super.isMeetFilter(condition, cellTextValue);\n }\n }\n\n override compare(cellValue1: FieldValue, cellValue2: FieldValue): number {\n return compareString(cellValueToSortValue(cellValue1), cellValueToSortValue(cellValue2));\n }\n\n override cellFullText(transformValue: LinkFieldValue): string[] {\n let texts: string[] = [];\n if (!isEmpty(transformValue?.text)) {\n texts.push(transformValue.text);\n }\n return texts;\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null\n ): FieldValue | null {\n return toLinkFieldValue(plainText, targetField, originData);\n }\n}\n\nexport function toLinkFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null\n): FieldValue | null {\n if (originData) {\n const { field, cellValue } = originData;\n if (field.type === AITableFieldType.link) {\n return cellValue;\n }\n } else {\n const url = extractLinkHref(plainText);\n const text = extractText(plainText);\n if (url && text) {\n return {\n url,\n text\n };\n }\n }\n return null;\n}\n\nfunction cellValueToSortValue(cellValue: LinkFieldValue): string | null {\n return (cellValue && cellValue.text && cellValue.text.trim()) || null;\n}\n","import { Id } from 'ngx-tethys/types';\nimport { AITableField, AITableFieldType, FieldValue, MemberFieldValue, MemberSettings } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation, AITableReferences } from '../../../types';\nimport { isEmpty } from '../../common';\nimport { compareString, hasIntersect } from '../operate';\nimport { Field } from './field';\n\nexport class MemberField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: MemberFieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.in:\n return Array.isArray(condition.value) && hasIntersect(cellValue, condition.value);\n case AITableFilterOperation.nin:\n return Array.isArray(condition.value) && !hasIntersect(cellValue, condition.value);\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(\n cellValue1: FieldValue,\n cellValue2: FieldValue,\n field: AITableField,\n references: AITableReferences,\n sortKey: string\n ): number {\n const value1 = cellValueToSortValue(cellValue1, field, references, sortKey);\n const value2 = cellValueToSortValue(cellValue2, field, references, sortKey);\n return compareString(value1, value2);\n }\n\n override cellFullText(transformValue: string[], field: AITableField, references?: AITableReferences): string[] {\n let fullText: string[] = [];\n if (transformValue?.length && references) {\n for (let index = 0; index < transformValue.length; index++) {\n const userInfo = references?.members[transformValue[index]];\n if (!userInfo) {\n continue;\n }\n if (userInfo.display_name) {\n fullText.push(userInfo.display_name);\n }\n }\n }\n return fullText;\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue },\n references?: AITableReferences\n ): FieldValue | null {\n return toMemberFieldValue(plainText, targetField, originData, references);\n }\n}\n\nexport function toMemberFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue },\n references?: AITableReferences\n): FieldValue | null {\n if (targetField.type == AITableFieldType.createdBy || targetField.type == AITableFieldType.updatedBy) {\n return null;\n }\n\n const isMultiple = (targetField.settings as MemberSettings)?.is_multiple;\n if (originData) {\n const { field, cellValue } = originData;\n switch (field.type) {\n case AITableFieldType.member:\n if (Array.isArray(cellValue) && cellValue.length) {\n return isMultiple ? cellValue : [cellValue[0]];\n }\n break;\n default:\n break;\n }\n }\n\n plainText = plainText.trim();\n const hasMemberInfo = references && references.members && Object.keys(references.members).length;\n if (plainText && hasMemberInfo) {\n const memberNames = plainText.split(',').map((id) => id.trim());\n const memberInfos = Object.values(references.members);\n let validMemberIds: MemberFieldValue = [];\n memberNames.forEach((memberName) => {\n const memberInfo = memberInfos.find((member) => member.display_name === memberName);\n if (memberInfo) {\n validMemberIds.push(memberInfo.uid as Id);\n }\n });\n if (validMemberIds.length) {\n return isMultiple ? validMemberIds : [validMemberIds[0]];\n }\n }\n\n return null;\n}\n\nfunction cellValueToSortValue(\n cellValue: MemberFieldValue,\n field: AITableField,\n references: AITableReferences,\n sortKey = 'display_name'\n): string | null {\n let values: string[] = [];\n if (cellValue?.length && references) {\n for (let index = 0; index < cellValue.length; index++) {\n const userInfo = references?.members[cellValue[index]];\n if (!userInfo) {\n continue;\n }\n\n const value = userInfo[sortKey];\n if (value) {\n values.push(value);\n }\n }\n }\n return values && values.length ? values.join(', ') : null;\n}\n","import { helpers } from 'ngx-tethys/util';\nimport { AITableField, AITableFieldType, FieldValue, SelectSettings } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { isEmpty } from '../../common';\nimport { compareNumber } from '../operate';\nimport { Field } from './field';\n\nexport class NumberField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<number>, cellValue: FieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.eq:\n return !Number.isNaN(condition.value) && cellValue != null && cellValue !== '' && condition.value === cellValue;\n case AITableFilterOperation.gte:\n return cellValue != null && cellValue !== '' && cellValue >= condition.value;\n case AITableFilterOperation.lte:\n return cellValue != null && cellValue !== '' && cellValue <= condition.value;\n case AITableFilterOperation.gt:\n return cellValue != null && cellValue !== '' && cellValue > condition.value;\n case AITableFilterOperation.lt:\n return cellValue != null && cellValue !== '' && cellValue < condition.value;\n case AITableFilterOperation.ne:\n return cellValue == null || cellValue == '' || Number.isNaN(condition.value) || cellValue !== condition.value;\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: number, cellValue2: number): number {\n return compareNumber(cellValue1, cellValue2);\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n ): FieldValue | null {\n return toNumberFieldValue(plainText, targetField, originData);\n }\n}\n\nexport function toNumberFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n): FieldValue | null {\n let text = plainText.trim();\n\n if (originData) {\n const { field, cellValue } = originData;\n const fieldType = field.type;\n\n switch (fieldType) {\n case AITableFieldType.number:\n case AITableFieldType.rate:\n case AITableFieldType.progress:\n return cellValue;\n case AITableFieldType.select:\n if (cellValue && Array.isArray(cellValue) && cellValue.length) {\n const optionsMap = helpers.keyBy((field.settings as SelectSettings).options || [], '_id');\n text = optionsMap[cellValue[0]]?.text;\n }\n break;\n default:\n break;\n }\n }\n\n if (text && !isEmpty(text) && !Number.isNaN(Number(text))) {\n return Number(text);\n }\n return null;\n}\n","import { helpers } from 'ngx-tethys/util';\nimport { AITableField, AITableFieldType, FieldValue, SelectSettings } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { compareNumber, isEmpty } from '../../index';\nimport { Field } from './field';\n\nexport class ProgressField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<number>, cellValue: FieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.eq:\n return !Number.isNaN(condition.value) && cellValue != null && cellValue !== '' && condition.value === cellValue;\n case AITableFilterOperation.gte:\n return cellValue != null && cellValue !== '' && cellValue >= condition.value;\n case AITableFilterOperation.lte:\n return cellValue != null && cellValue !== '' && cellValue <= condition.value;\n case AITableFilterOperation.gt:\n return cellValue != null && cellValue !== '' && cellValue > condition.value;\n case AITableFilterOperation.lt:\n return cellValue != null && cellValue !== '' && cellValue < condition.value;\n case AITableFilterOperation.ne:\n return cellValue == null || cellValue == '' || Number.isNaN(condition.value) || cellValue !== condition.value;\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: number, cellValue2: number): number {\n return compareNumber(cellValue1, cellValue2);\n }\n\n override cellFullText(transformValue: number): string[] {\n let fullText: string[] = [];\n if (!isEmpty(transformValue)) {\n fullText.push(`${transformValue}%`);\n }\n return fullText;\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n ): FieldValue | null {\n return toProgressFieldValue(plainText, targetField, originData);\n }\n}\n\nexport function toProgressFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n): FieldValue | null {\n let value: any = plainText.trim();\n if (originData) {\n const { field, cellValue } = originData;\n switch (field.type) {\n case AITableFieldType.progress:\n case AITableFieldType.rate:\n case AITableFieldType.number:\n value = cellValue;\n break;\n case AITableFieldType.select:\n if (cellValue && Array.isArray(cellValue) && cellValue.length) {\n const optionsMap = helpers.keyBy((field.settings as SelectSettings).options || [], '_id');\n value = optionsMap[cellValue[0]]?.text;\n }\n break;\n default:\n break;\n }\n }\n\n if (!isEmpty(value)) {\n const progressValue = Number(value);\n if (!Number.isNaN(progressValue) && progressValue >= 0 && progressValue <= 100) {\n return progressValue;\n }\n }\n\n return null;\n}\n","import { helpers } from 'ngx-tethys/util';\nimport { AITableField, AITableFieldType, FieldValue, RateFieldValue, SelectSettings } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { isEmpty } from '../../common';\nimport { compareNumber } from '../operate';\nimport { Field } from './field';\n\nexport class RateField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string[]>, cellValue: RateFieldValue | string) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.in:\n const isContain = condition.value.some((item) => String(item) === String(cellValue));\n return !isEmpty(cellValue) && isContain;\n case AITableFilterOperation.nin:\n const noContain = condition.value.every((item) => String(item) !== String(cellValue));\n return isEmpty(cellValue) || noContain;\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: number, cellValue2: number): number {\n return compareNumber(cellValue1, cellValue2);\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n ): FieldValue | null {\n return toRateFieldValue(plainText, targetField, originData);\n }\n}\n\nexport function toRateFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n): FieldValue | null {\n let value: any = plainText.trim();\n if (originData) {\n const { field, cellValue } = originData;\n switch (field.type) {\n case AITableFieldType.rate:\n case AITableFieldType.number:\n case AITableFieldType.progress:\n value = cellValue;\n break;\n case AITableFieldType.select:\n if (cellValue && Array.isArray(cellValue) && cellValue.length) {\n const optionsMap = helpers.keyBy((field.settings as SelectSettings).options || [], '_id');\n value = optionsMap[cellValue[0]]?.text;\n }\n break;\n default:\n break;\n }\n }\n\n if (!isEmpty(value)) {\n const rateValue = Number(value);\n if (!Number.isNaN(rateValue) && rateValue > 0 && rateValue < 5) {\n return Math.round(rateValue);\n }\n return 5;\n }\n\n return null;\n}\n","import { helpers } from 'ngx-tethys/util';\nimport { Field } from './field';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { AITableField, AITableFieldType, AITableSelectOption, FieldValue, SelectFieldValue, SelectSettings } from '../../../core';\nimport { isEmpty } from '../../common';\nimport { compareString, hasIntersect } from '../operate';\n\nexport class SelectField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: SelectFieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.in:\n return Array.isArray(condition.value) && hasIntersect(cellValue, condition.value);\n case AITableFilterOperation.nin:\n return Array.isArray(condition.value) && !hasIntersect(cellValue, condition.value);\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: FieldValue, cellValue2: FieldValue, field: AITableField): number {\n const value1 = cellValueToSortValue(cellValue1, field);\n const value2 = cellValueToSortValue(cellValue2, field);\n return compareString(value1, value2);\n }\n\n override cellFullText(transformValue: string[], field: AITableField): string[] {\n let fullText: string[] = [];\n const optionsMap = helpers.keyBy((field.settings as SelectSettings).options || [], '_id');\n if (transformValue && Array.isArray(transformValue) && transformValue.length) {\n transformValue.forEach((optionId) => {\n const option = optionsMap[optionId];\n if (option && option.text) {\n fullText.push(option.text);\n }\n });\n }\n return fullText;\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null\n ): FieldValue | null {\n return toSelectFieldValue(plainText, targetField, originData);\n }\n}\n\nexport function toSelectFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null\n): FieldValue | null {\n return null;\n}\n\nexport function processPastedValueForSelect(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null\n): { existOptionIds: string[]; newOptions: Partial<AITableSelectOption>[] } {\n const targetFieldOptions = (targetField.settings as SelectSettings)?.options || [];\n let existOptionIds: string[] = [];\n let newOptions: Partial<AITableSelectOption>[] = [];\n let cellFullTexts: string[] = plainText.split(',').map((text) => text.trim());\n\n const { field, cellValue } = originData || {};\n if (field && field.type === AITableFieldType.select) {\n if (cellValue && Array.isArray(cellValue) && cellValue.length) {\n const targetOptionIds = targetFieldOptions.map((option) => option._id);\n const originOptionsMap = helpers.keyBy((field.settings as SelectSettings)?.options || [], '_id');\n cellValue.forEach((id) => {\n if (targetOptionIds.includes(id)) {\n existOptionIds.push(id);\n } else if (targetFieldOptions.some((option) => option.text === originOptionsMap[id].text)) {\n const option = targetFieldOptions.find((option: AITableSelectOption) => option.text === originOptionsMap[id].text);\n existOptionIds.push(option!._id);\n } else {\n const originOption = originOptionsMap[id];\n if (originOption) {\n newOptions.push({\n text: originOption.text,\n icon: originOption.icon,\n color: originOption.color,\n bg_color: originOption.bg_color\n });\n }\n }\n });\n }\n } else {\n cellFullTexts.forEach((text) => {\n const option = targetFieldOptions.find((option) => option.text === text);\n option ? existOptionIds.push(option._id) : newOptions.push({ text });\n });\n }\n\n const isMultiple = (targetField.settings as SelectSettings)?.is_multiple;\n if (isMultiple) {\n return { existOptionIds, newOptions };\n } else {\n if (existOptionIds.length) {\n return { existOptionIds: [existOptionIds[0]], newOptions: [] };\n } else {\n if (newOptions.length) {\n return { existOptionIds: [], newOptions: [newOptions[0]] };\n } else {\n return { existOptionIds: [], newOptions: [] };\n }\n }\n }\n}\n\nfunction cellValueToSortValue(cellValue: SelectFieldValue, field: AITableField): string | null {\n if (!cellValue) {\n return null;\n }\n const texts: string[] = [];\n const optionsMap = helpers.keyBy((field.settings as SelectSettings).options || [], '_id');\n if (cellValue && Array.isArray(cellValue) && cellValue.length) {\n cellValue.forEach((optionId) => {\n const option = optionsMap[optionId];\n if (option && option.text) {\n texts.push(option.text);\n }\n });\n }\n return texts && texts.length ? texts.join(',') : null;\n}\n","import { FieldValue } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { isEmpty } from '../../common';\nimport { compareString, stringInclude } from '../operate';\nimport { Field } from './field';\n\nexport class TextField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: FieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.contain:\n return !isEmpty(cellValue) && stringInclude(cellValue, condition.value);\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: FieldValue, cellValue2: FieldValue): number {\n const value1 = cellValueToSortValue(cellValue1);\n const value2 = cellValueToSortValue(cellValue2);\n return compareString(value1, value2);\n }\n\n override toFieldValue(plainText: string): FieldValue | null {\n return toTextFieldValue(plainText);\n }\n}\n\nexport function toTextFieldValue(plainText: string): FieldValue | null {\n return plainText.trim();\n}\n\nfunction cellValueToSortValue(cellValue: FieldValue): string | null {\n return (cellValue && cellValue.trim()) || null;\n}\n","import { AITableFieldType } from '../../../core';\nimport { AttachmentField } from './attachment';\nimport { DateField } from './date';\nimport { Field } from './field';\n\nimport { LinkField } from './link';\nimport { MemberField } from './member';\nimport { NumberField } from './number';\nimport { ProgressField } from './progress';\nimport { RateField } from './rate';\nimport { SelectField } from './select';\nimport { TextField } from './text';\n\nexport const FieldModelMap: Record<AITableFieldType, Field> = {\n [AITableFieldType.text]: new TextField(),\n [AITableFieldType.richText]: new TextField(),\n [AITableFieldType.select]: new SelectField(),\n [AITableFieldType.date]: new DateField(),\n [AITableFieldType.createdAt]: new DateField(),\n [AITableFieldType.updatedAt]: new DateField(),\n [AITableFieldType.number]: new NumberField(),\n [AITableFieldType.rate]: new RateField(),\n [AITableFieldType.link]: new LinkField(),\n [AITableFieldType.member]: new MemberField(),\n [AITableFieldType.progress]: new ProgressField(),\n [AITableFieldType.createdBy]: new MemberField(),\n [AITableFieldType.updatedBy]: new MemberField(),\n [AITableFieldType.attachment]: new AttachmentField()\n};\n","import { AITable, AITableFieldType, AITableRecord, getFieldValue, getSystemFieldValue, isSystemField, SystemFieldTypes } from '../../core';\nimport { FieldModelMap } from '../field/model';\nimport { transformCellValue } from '../cell';\nimport { AITableContent, ClipboardContent } from '../../types';\n\nexport const aiTableFragmentAttribute = 'ai-table-fragment';\n\nexport const buildClipboardData = (aiTable: AITable): ClipboardContent | null => {\n const copiedCells = Array.from(aiTable.selection().selectedCells);\n if (!copiedCells.length) {\n return null;\n }\n\n let copiedFieldIds = new Set<string>();\n let copiedRecordIds = new Set<string>();\n copiedCells.forEach((cellPath: string) => {\n const [recordId, fieldId] = cellPath.split(':');\n copiedFieldIds.add(fieldId);\n copiedRecordIds.add(recordId);\n });\n\n const fieldIds = Array.from(copiedFieldIds);\n const recordIds = Array.from(copiedRecordIds);\n const aiTableContent = buildAITableContent(aiTable, fieldIds, recordIds);\n const clipboardContent = buildClipboardContent(aiTable, fieldIds, recordIds);\n\n return mergeClipboardContent(clipboardContent, aiTableContent);\n};\n\nconst encodeAITableContent = (aiTableContent: AITableContent) => {\n const stringifiedData = JSON.stringify(aiTableContent);\n return window.btoa(encodeURIComponent(stringifiedData));\n};\n\nfunction mergeClipboardContent(clipboardContent: ClipboardContent[][], aiTableContent: AITableContent): ClipboardContent {\n const encodedAITableContent = encodeAITableContent(aiTableContent);\n const formattedContent: ClipboardContent = {\n text: clipboardContent.map((row) => row.map((column) => column.text).join('\\t')).join('\\n'),\n html: `<table ${aiTableFragmentAttribute}=\"${encodedAITableContent}\">${clipboardContent.map((row) => `<tr>${row.map((column) => `<td>${column.html}</td>`).join('')}</tr>`).join('')}</table>`\n };\n return formattedContent;\n}\n\nfunction buildAITableContent(aiTable: AITable, fieldIds: string[], recordIds: string[]): AITableContent {\n const fields = fieldIds.map((fieldId) => {\n return aiTable.fieldsMap()[fieldId];\n });\n\n const records = recordIds.map((recordId) => {\n const record = aiTable.recordsMap()[recordId];\n let newRecord: Partial<AITableRecord> = {\n _id: record._id,\n values: {}\n };\n fieldIds.forEach((fieldId) => {\n const field = aiTable.fieldsMap()[fieldId];\n if (isSystemField(field)) {\n const fieldType: SystemFieldTypes = field.type as SystemFieldTypes;\n newRecord = {\n ...newRecord,\n [fieldType]: getSystemFieldValue(record, fieldType)\n };\n } else {\n newRecord.values = {\n ...newRecord.values,\n [fieldId]: getFieldValue(record, field)\n };\n }\n });\n return newRecord;\n });\n\n return {\n fields,\n records\n };\n}\n\nfunction buildClipboardContent(aiTable: AITable, fieldIds: string[], recordIds: string[]): ClipboardContent[][] {\n const clipboardContent: ClipboardContent[][] = [];\n const references = aiTable.context!.references();\n recordIds.forEach((recordId) => {\n const record = aiTable.recordsMap()[recordId];\n const row: { text: string; html: string }[] = [];\n fieldIds.forEach((fieldId) => {\n const field = aiTable.fieldsMap()[fieldId];\n const cellValue = getFieldValue(record, field);\n const transformValue = transformCellValue(aiTable, field, cellValue);\n const cellTexts: string[] = FieldModelMap[field.type].cellFullText(transformValue, field, references);\n let cellContent = {\n text: cellTexts.join(','),\n html: cellTexts.join(',')\n };\n if (field.type === AITableFieldType.link && cellValue && cellValue.url) {\n cellContent.html = `<a href=\"${cellValue.url}\" target=\"_blank\">${cellValue.text}</a>`;\n }\n row.push(cellContent);\n });\n clipboardContent.push(row);\n });\n return clipboardContent;\n}\n","import { AITableContent, AITableReferences } from '../../types';\nimport {\n AITable,\n AITableField,\n AITableFieldType,\n AITableRecord,\n createDefaultField,\n createDefaultFieldName,\n FieldOptions,\n FieldValue,\n getFieldValue,\n idCreator,\n SelectSettings,\n UpdateFieldValueOptions\n} from '../../core';\nimport { readFromClipboard, aiTableFragmentAttribute, extractText } from '../clipboard';\nimport { FieldModelMap } from '../field/model';\nimport { processPastedValueForSelect } from '../field/model/select';\nimport { AddRecordOptions, AddFieldOptions } from '../../core';\n\nconst aiTableAttributePattern = new RegExp(`${aiTableFragmentAttribute}=\"(.+?)\"`, 'm');\n\nconst decodeClipboardJsonData = (encoded: string) => {\n const decoded = decodeURIComponent(window.atob(encoded));\n return JSON.parse(decoded);\n};\n\nfunction extractContentFromClipboardText(clipboardText: string): string[][] {\n const contents = clipboardText\n .split('\\n')\n .map((row) => row.split('\\t'))\n .filter((row) => row.length > 0 && row.some((cell) => cell.trim().length > 0));\n\n return contents;\n}\n\nfunction extractContentFromClipboardHtml(clipboardHtml: string): string[][] {\n const tablePattern = /<table[^>]*>([\\s\\S]*?)<\\/table>/i;\n const trPattern = /<tr[^>]*>([\\s\\S]*?)<\\/tr>/gi;\n const cellPattern = /<td[^>]*>([\\s\\S]*?)<\\/td>/gi;\n const contents: string[][] = [];\n\n try {\n const tableMatch = clipboardHtml.match(tablePattern);\n const tableContent = tableMatch ? tableMatch[1] : clipboardHtml;\n const rows = tableContent.match(trPattern) || [];\n\n rows.forEach((row) => {\n const rowContent: string[] = [];\n const cells = row.match(cellPattern) || [];\n\n cells.forEach((cell) => {\n const content = cell.replace(/<td>|<\\/td>/g, '').trim();\n rowContent.push(content);\n });\n\n contents.push(rowContent);\n });\n\n return contents;\n } catch (error) {\n return [];\n }\n}\n\nfunction extractAITableContentFromClipboardHtml(clipboardHtml: string): AITableContent | null {\n const aiTableFragment = clipboardHtml.match(aiTableAttributePattern);\n if (aiTableFragment && !!aiTableFragment.length) {\n return decodeClipboardJsonData(aiTableFragment[1]);\n }\n return null;\n}\n\nconst readClipboardData = async (): Promise<{ clipboardContent: string[][]; aiTableContent: AITableContent | null }> => {\n const clipboardData = await readFromClipboard();\n let clipboardContent: string[][] = [];\n let aiTableContent: AITableContent | null = null;\n\n if (clipboardData) {\n const clipboardHtml = clipboardData.html;\n const clipboardText = clipboardData.text;\n\n if (clipboardHtml) {\n aiTableContent = extractAITableContentFromClipboardHtml(clipboardHtml);\n clipboardContent = extractContentFromClipboardHtml(clipboardHtml);\n }\n\n if (!clipboardContent.length && clipboardText) {\n clipboardContent = extractContentFromClipboardText(clipboardText);\n }\n }\n\n return {\n clipboardContent,\n aiTableContent\n };\n};\n\nfunction getPasteValue(\n plainText: string,\n aiTableContent: AITableContent | null,\n recordIndex: number,\n fieldIndex: number,\n targetField: AITableField,\n references: AITableReferences\n): {\n value: FieldValue | null;\n newField: AITableField | null;\n} {\n let field: AITableField | null = null;\n let record: Partial<AITableRecord> | null = null;\n\n if (aiTableContent) {\n const { fields, records } = aiTableContent;\n field = fields[fieldIndex];\n record = records[recordIndex];\n }\n\n if (targetField.type === AITableFieldType.attachment || (field && field.type === AITableFieldType.attachment)) {\n return { value: null, newField: null };\n }\n if (targetField.type !== AITableFieldType.link) {\n plainText = extractText(plainText);\n }\n\n let originData = field && record ? { field, cellValue: getFieldValue(record, field) } : null;\n if (targetField.type === AITableFieldType.select) {\n let { existOptionIds, newOptions } = processPastedValueForSelect(plainText, targetField, originData);\n\n newOptions = newOptions.map((option) => {\n return {\n ...option,\n _id: idCreator()\n };\n });\n const newField = {\n ...targetField,\n settings: {\n ...targetField.settings,\n options: [...((targetField.settings as SelectSettings)?.options || []), ...newOptions]\n }\n };\n const newOptionIds = newOptions.map((option) => option._id).filter((id) => !!id) as string[];\n const selectFieldValue = [...existOptionIds, ...newOptionIds];\n return {\n value: selectFieldValue,\n newField\n };\n }\n\n return { value: FieldModelMap[targetField.type].toFieldValue(plainText, targetField, originData, references), newField: null };\n}\n\nexport interface AITablePasteActions {\n updateFieldValue: (data: UpdateFieldValueOptions) => void;\n setField: (field: AITableField) => void;\n addRecord: (data: AddRecordOptions) => void;\n addField: (data: AddFieldOptions) => void;\n}\n\nfunction appendRecord(aiTable: AITable, actions: AITablePasteActions) {\n const allRecords = aiTable.records();\n const lastRecordId = allRecords.length > 0 ? allRecords[allRecords.length - 1]._id : '';\n actions.addRecord({\n originId: lastRecordId\n });\n}\n\nfunction appendField(aiTable: AITable, originField: AITableField | null, actions: AITablePasteActions) {\n const lastFieldId = aiTable.fields().length > 0 ? aiTable.fields()[aiTable.fields().length - 1]._id : '';\n let defaultFieldValue: Partial<AITableField>;\n if (originField) {\n defaultFieldValue = {\n ...originField,\n name: createDefaultFieldName(aiTable, FieldOptions.find((item) => item.type === originField.type)!),\n _id: idCreator()\n };\n } else {\n defaultFieldValue = createDefaultField(aiTable, AITableFieldType.text);\n }\n\n actions.addField({\n originId: lastFieldId,\n defaultValue: defaultFieldValue\n });\n}\n\nexport const writeToAITable = async (aiTable: AITable, actions: AITablePasteActions) => {\n const selectedCells = Array.from(aiTable.selection().selectedCells);\n if (!selectedCells.length) {\n return;\n }\n const { clipboardContent, aiTableContent } = await readClipboardData();\n if (!clipboardContent.length) {\n return;\n }\n\n const [firstCell] = selectedCells;\n const [startRecordId, startFieldId] = firstCell.split(':');\n const startRowIndex = aiTable.context!.visibleRowsIndexMap().get(startRecordId) ?? 0;\n const startColIndex = aiTable.context!.visibleColumnsIndexMap().get(startFieldId) ?? 0;\n const references = aiTable.context!.references();\n let isPasteSuccess = false;\n\n clipboardContent.forEach((row, i) => {\n const targetRowIndex = startRowIndex + i;\n if (targetRowIndex >= aiTable.context!.linearRows().length - 1) {\n appendRecord(aiTable, actions);\n }\n\n row.forEach((plainText, j) => {\n const targetColIndex = startColIndex + j;\n if (targetColIndex >= AITable.getVisibleFields(aiTable).length) {\n const originField = aiTableContent?.fields[j] || null;\n appendField(aiTable, originField, actions);\n }\n\n const targetRecord = aiTable.context!.linearRows()[targetRowIndex];\n const targetField = AITable.getVisibleFields(aiTable)[targetColIndex];\n const recordIndex = i;\n const fieldIndex = j;\n const { value, newField } = getPasteValue(plainText, aiTableContent, recordIndex, fieldIndex, targetField, references);\n\n if (newField) {\n actions.setField(newField);\n }\n\n if (value !== null) {\n try {\n actions.updateFieldValue({\n value,\n path: [targetRecord._id, targetField._id]\n });\n isPasteSuccess = true;\n } catch (error) {}\n }\n });\n });\n\n return isPasteSuccess;\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 { AITable, AITableField, AITableQueries } from '../core';\nimport { AITableReferences } from '../types';\nimport { transformCellValue } from './cell';\nimport { FieldModelMap } from './field/model';\n\nexport const isCellMatchKeywords = (\n aiTable: AITable,\n field: AITableField,\n recordId: string,\n keywords: string,\n references: AITableReferences\n) => {\n const cellValue = AITableQueries.getFieldValue(aiTable, [recordId, field._id]);\n const transformValue = transformCellValue(aiTable, field, cellValue);\n const fieldMethod = FieldModelMap[field.type];\n let cellFullText: string[] = fieldMethod.cellFullText(transformValue, field, references);\n return keywords && cellFullText.length && cellFullText.some((text) => text.toLowerCase().includes(keywords.toLowerCase()));\n};\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 { InjectionToken } from '@angular/core';\n\nexport const KO_CONTAINER_TOKEN = new InjectionToken<any>('KO_CONTAINER_TOKEN');\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 { ChangeDetectionStrategy, Component, computed, EventEmitter, input, output, Output } from '@angular/core';\nimport Konva from 'konva';\nimport { KoShape } from '../../angular-konva/components/shape.component';\nimport {\n AI_TABLE_OFFSET,\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';\nimport { KoEventObject } from '../../angular-konva';\nimport { TextConfig } from 'konva/lib/shapes/Text';\nimport { Context } from 'konva/lib/Context';\n\n@Component({\n selector: 'ai-table-text',\n template: ` <ko-text [config]=\"textConfig()\" (koClick)=\"onClick($event)\" (koMousemove)=\"onMousemove($event)\"></ko-text> `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableText {\n config = input.required<Konva.ShapeConfig>();\n\n // @Output() koClick = new EventEmitter<KoEventObject<MouseEvent>>();\n koClick = output<KoEventObject<MouseEvent>>();\n\n koMouseMove = output<KoEventObject<MouseEvent>>();\n\n textConfig = computed<TextConfig>(() => {\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 const tmpText = new Konva.Text({\n text,\n fontSize,\n fontFamily\n });\n const textBounds = tmpText.getClientRect();\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 hitFunc: function (context: Context) {\n context.beginPath();\n context.rect(AI_TABLE_OFFSET, (height! - textBounds.height) / 2 - AI_TABLE_OFFSET, textBounds.width, textBounds.height);\n context.closePath();\n context.fillStrokeShape(this as any);\n },\n ...rest\n };\n });\n\n onClick(e: KoEventObject<MouseEvent>) {\n this.koClick.emit(e);\n }\n onMousemove(e: KoEventObject<MouseEvent>) {\n this.koMouseMove.emit(e);\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 fontStyle = `${fontWeight} ${fontSize}px ${DEFAULT_FONT_FAMILY}`;\n const baselineOffset = verticalAlign === DEFAULT_TEXT_VERTICAL_ALIGN_TOP ? fontSize / 2 : 0;\n const fontStyleKey = `${fontWeight}-${fontSize}px`;\n const isUnderline = textDecoration === 'underline';\n this.ctx.font = fontStyle;\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 const cacheKey = `${fontStyleKey}-${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 } else {\n imageCache.imageMapOnload(() => {\n this.image(options, crossOrigin, allowDefault);\n });\n }\n return;\n }\n // Unloaded\n if (image == null) {\n imageCache.loadImage(url, url, { crossOrigin });\n imageCache.imageMapOnload(() => {\n this.image(options, crossOrigin, allowDefault);\n });\n return;\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 { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { KoShape } from '../../../angular-konva/components/shape.component';\nimport { AI_TABLE_CELL_PADDING, AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE, AI_TABLE_FIELD_HEAD_MORE, Colors } from '../../../constants';\nimport { KoContainer } from '../../../angular-konva/components/container.component';\nimport { getMousePosition, getTextWidth, handleMouseStyle, TextMeasure } from '../../../utils';\nimport { AITableText } from '../text.component';\nimport { AITableHoverCellConfig, AITableRender } from '../../../types';\nimport { KoEventObject } from '../../../angular-konva';\nimport { AITable, AITableFieldType } from '../../../core';\nimport { TextConfig } from 'konva/lib/shapes/Text';\nimport { drawer } from '../../drawers/drawer';\nimport { HoverCellComponent } from '../../interfaces';\n\n@Component({\n selector: 'ai-table-link',\n template: `\n @if (showLink()) {\n <ai-table-text [config]=\"textConfig()!\" (koClick)=\"linkClick($event)\" (koMouseMove)=\"linkMouseMove($event)\"></ai-table-text>\n }\n `,\n standalone: true,\n imports: [KoContainer, KoShape, AITableText],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableCellLink implements HoverCellComponent {\n static fieldType = AITableFieldType.link;\n\n config = input<AITableHoverCellConfig | undefined>();\n\n textOffset = AI_TABLE_CELL_PADDING + AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE;\n\n render = computed<AITableRender | undefined>(() => this.config()?.render);\n\n transformValue = computed<{ text: string; url: string }>(() => this.render()?.transformValue);\n\n showLink = computed<boolean>(() => !!this.transformValue()?.text);\n\n textConfig = computed<TextConfig | undefined>(() => {\n const render = this.config()?.render;\n if (render) {\n const { x, y, transformValue, field, columnWidth, rowHeight, style, zIndex } = render;\n let textRender: string | null = transformValue.text;\n if (textRender == null) {\n return;\n }\n\n textRender = textRender.replace(/\\r|\\n/g, ' ');\n const fontWeight = style?.fontWeight;\n const textMaxWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING;\n const { text, textWidth } = drawer.textEllipsis({\n text: textRender,\n maxWidth: textMaxWidth,\n fontWeight\n });\n\n return {\n x,\n y,\n text,\n wrap: 'none',\n width: textWidth,\n fillStyle: Colors.primary,\n fill: Colors.primary,\n height: rowHeight + 2,\n lineHeight: 1.84,\n listening: true,\n ellipsis: true,\n textDecoration: 'underline',\n zIndex\n };\n }\n return;\n });\n\n linkClick(e: KoEventObject<MouseEvent>) {\n e.event.cancelBubble = true;\n window.open(this.transformValue().url, '_blank', 'noopener,noreferrer');\n }\n\n linkMouseMove(e: KoEventObject<MouseEvent>) {\n e.event.cancelBubble = true;\n const { aiTable, coordinate } = this.config()!;\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 } = aiTable;\n const { x, y } = pos;\n const curMousePosition = getMousePosition(x, y, coordinate, AITable.getVisibleFields(aiTable), context!, targetName);\n handleMouseStyle(AI_TABLE_FIELD_HEAD_MORE, curMousePosition.areaType, coordinate.container);\n }\n}\n","import { Constructor } from 'ngx-tethys/core';\nimport { AITableFieldType } from '../../../core';\nimport { HoverCellComponent } from '../../interfaces';\n\nimport * as cellComponents from '.';\n\nexport const componentMap: Partial<Record<AITableFieldType, Constructor<HoverCellComponent>>> = {};\n\nObject.values(cellComponents).forEach((cellComponent) => {\n componentMap[cellComponent.fieldType] = cellComponent;\n});\n","import { AITable, AITableQueries } from '../core';\nimport { componentMap } from '../renderer/components/cells/cells';\nimport { transformCellValue } from './cell';\nimport { getDetailByTargetName } from './common';\n\nexport function getHoverCell(aiTable: AITable) {\n const pointPosition = aiTable.context!.pointPosition();\n const { fieldId, recordId } = getDetailByTargetName(pointPosition.realTargetName!) ?? {};\n if (!recordId || !fieldId) {\n return;\n }\n const record = aiTable.recordsMap()[recordId!];\n const field = aiTable.fieldsMap()[fieldId!];\n\n if (!record || !field || !recordId || !fieldId) {\n return;\n }\n const cellValue = AITableQueries.getFieldValue(aiTable, [recordId, fieldId]);\n const transformValue = transformCellValue(aiTable, field, cellValue) || {};\n if (Object.keys(transformValue).length === 0) {\n return;\n }\n\n const renderComponentDefinition = componentMap[field?.type];\n if (!renderComponentDefinition) {\n return;\n }\n return {\n field,\n recordId,\n fieldId,\n renderComponentDefinition\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 { AIRecordFieldIdPath, AITable, AITableFieldType } from '../core';\nimport { AITableContextMenuOptions, AITableGridCellRenderSchema, AITableOpenEditOptions } from '../types';\nimport { getCellHorizontalPosition, getEditorBoxOffset, getEditorSpace, getHoverEditorBoxOffset, getHoverEditorSpace } from '../utils';\nimport { AITableContextMenu } from '../components/context-menu/context-menu.component';\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 const filedRenderSchema = this.aiFieldRenderers && this.aiFieldRenderers[type];\n if (filedRenderSchema && filedRenderSchema.editor) {\n return {\n component: filedRenderSchema.editor,\n isInternalComponent: false\n };\n }\n return {\n component: GRID_CELL_EDITOR_MAP[type],\n isInternalComponent: true\n };\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 cell: AIRecordFieldIdPath = [recordId, fieldId];\n const { rowIndex, columnIndex } = AITable.getCellIndex(aiTable, cell)!;\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 isFrozenColumn = AITable.isFrozenColumn(aiTable, columnIndex);\n const scrollLeft = isFrozenColumn ? 0 : scrollState().scrollLeft;\n const scrollTop = scrollState().scrollTop;\n const originPosition = {\n x: originX + originOffset - scrollLeft + originRect.x,\n y: originY - 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, references } = options;\n const { component, isInternalComponent } = this.getEditorComponent(this.aiTable.fieldsMap()[fieldId].type);\n const offsetOriginPosition = this.getOriginPosition(aiTable, options);\n this.cellEditorPopoverRef = this.thyPopover.open(component, {\n viewContainerRef: isInternalComponent ? undefined : options?.viewContainerRef,\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 references,\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 const field = aiTable.fieldsMap()[fieldId];\n if (field.type === AITableFieldType.text || field.type === AITableFieldType.richText) {\n return;\n }\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 openContextMenu(aiTable: AITable, options: AITableContextMenuOptions) {\n const { origin, position, menuItems, targetName, viewContainerRef } = options;\n const ref = this.thyPopover.open(AITableContextMenu, {\n origin: origin as HTMLElement,\n originPosition: position,\n placement: 'bottomLeft',\n insideClosable: true,\n viewContainerRef,\n initialState: {\n aiTable,\n menuItems,\n targetName,\n position\n }\n });\n return ref;\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 AITableField,\n AITableFields,\n AITableFieldType,\n AITableRecords,\n AITableSelectOptionStyle,\n AITableValue,\n createAITable,\n createDefaultField,\n MoveFieldOptions,\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, AITableContextMenuItem, AITableReferences } from './types';\nimport { AITableFieldSetting } 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 aiContextMenuItems = input<AITableContextMenuItem[]>([]);\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 aiKeywords = input<string>();\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 aiMoveField = output<MoveFieldOptions>();\n\n aiUpdateFieldValue = output<UpdateFieldValueOptions>();\n\n aiSetField = output<AITableField>();\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, this.gridData);\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()?.fieldRenderers);\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.aiRecords();\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()?.fieldSettingComponent) {\n (popoverRef.componentInstance as AITableFieldSetting).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, 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 { AITableFieldMenu } from './components/field-menu/field-menu.component';\nimport { AITableFieldSetting } from './components/field-setting/field-setting.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';\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 AITableFieldSetting,\n ThyDatePickerFormatPipe,\n ThyFlexibleText,\n ThyStopPropagationDirective,\n AITableFieldMenu,\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 <!-- [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 <div\n #cell\n class=\"grid-cell\"\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 {\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 { 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({ isHoverRow, isCheckedRow }: Pick<AITableCell, 'isHoverRow' | 'isCheckedRow'>) {\n const rowHeight = this.rowHeight;\n const fill = isCheckedRow ? this.colors.itemActiveBgColor : 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, isCheckedRow }: Pick<AITableCell, 'isHoverRow' | 'isCheckedRow'>) {\n super.renderAddFieldBlank({ isHoverRow, isCheckedRow });\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, isCheckedRow }: Pick<AITableCell, 'isHoverRow' | 'isCheckedRow'>) {\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, isCheckedRow });\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, isCheckedRow }: Pick<AITableCell, 'isHoverRow' | 'isCheckedRow'>) {\n this.renderFirstCell({\n isHoverRow\n });\n this.renderCommonCell({\n isHoverRow\n });\n this.renderLastCell({\n isHoverRow,\n isCheckedRow\n });\n }\n}\n\nexport const addRowLayout = new AddRowLayout();\n","// 自动生成的图标常量文件\nexport const apk = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/APK</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/APK\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"APK\" transform=\"translate(2.000000, 0.000000)\">\n <path d=\"M14.1176471,0 L2.74128887,0 C1.22731689,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.22731689,24 2.74128887,24 L17.2587111,24 C18.7726831,24 20,22.765548 20,21.2427744 L20,6 C20,6 14.1176471,0 14.1176471,0 Z\" id=\"路径\" fill=\"#78B354\"></path>\n <path d=\"M12.4981525,12.5063279 L13.3031073,11.0370821 C13.3468152,10.9603305 13.3176766,10.8616498 13.2393665,10.8196191 C13.1628776,10.7775885 13.0645347,10.8049998 13.0226479,10.8835788 L12.2085874,12.367444 C11.5256507,12.0640922 10.7607616,11.8941421 9.95216453,11.8941421 C9.14356748,11.8941421 8.37867837,12.0640922 7.69574167,12.3656165 L6.88168113,10.8835788 C6.83979434,10.8049998 6.74145146,10.7775885 6.66496255,10.8196191 C6.58665247,10.8616498 6.55751384,10.9603305 6.60122179,11.0370821 L7.40617651,12.5063279 C5.8254057,13.3250121 4.75638212,14.881974 4.75638212,16.6673635 L15.1461281,16.6673635 C15.1479469,14.8801466 14.0789234,13.3250121 12.4981525,12.5063279 Z M7.58829297,14.7832933 C7.34789925,14.7832933 7.15303464,14.5877594 7.15303464,14.3465399 C7.15303464,14.1053205 7.34789925,13.9097865 7.58829297,13.9097865 C7.82868668,13.9097865 8.02355129,14.1053205 8.02355129,14.3465399 C8.02173013,14.5877594 7.82686552,14.7832933 7.58829297,14.7832933 Z M12.3178573,14.7832933 C12.0774635,14.7832933 11.8825989,14.5877594 11.8825989,14.3465399 C11.8825989,14.1053205 12.0774635,13.9097865 12.3178573,13.9097865 C12.558251,13.9097865 12.7531156,14.1053205 12.7531156,14.3465399 C12.7512944,14.5877594 12.5564298,14.7832933 12.3178573,14.7832933 Z\" id=\"形状\" fill=\"#FFFFFF\" fill-rule=\"nonzero\"></path>\n <path d=\"M14.1176471,0 L20,6 L15.3176471,6 C14.6549054,6 14.1176471,5.4627417 14.1176471,4.8 L14.1176471,0 L14.1176471,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const bak = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/BAK </title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/BAK-\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"BAK\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#E75A71\"></path>\n <path d=\"M5.75267634,16.8 C6.25452726,16.8 6.64412206,16.6941176 6.92146073,16.4823529 C7.24502251,16.2252101 7.41010505,15.8319328 7.41010505,15.287395 C7.41010505,14.9243697 7.33086543,14.6294118 7.17238619,14.410084 C7.01390695,14.1907563 6.77618809,14.0470588 6.46583292,13.9789916 C6.70355178,13.8806723 6.88184092,13.7294118 7.01390695,13.5327731 C7.14597299,13.3210084 7.212006,13.0638655 7.212006,12.7613445 C7.212006,12.3453782 7.08654327,12.0201681 6.83561781,11.7781513 C6.57148574,11.5210084 6.21490745,11.4 5.75267634,11.4 L3.6,11.4 L3.6,16.8 L5.75267634,16.8 Z M5.56118059,13.6915966 L4.31975988,13.6915966 L4.31975988,12.0806723 L5.57438719,12.0806723 C5.89134567,12.0806723 6.12906453,12.1411765 6.27433717,12.2697479 C6.4196098,12.3907563 6.49224612,12.587395 6.49224612,12.8596639 C6.49224612,13.1470588 6.4196098,13.3588235 6.27433717,13.494958 C6.12906453,13.6235294 5.89134567,13.6915966 5.56118059,13.6915966 Z M5.65362681,16.1193277 L4.31975988,16.1193277 L4.31975988,14.3647059 L5.67343672,14.3647059 C6.0168084,14.3647059 6.27433717,14.4327731 6.43941971,14.5764706 C6.60450225,14.7201681 6.69034517,14.9546218 6.69034517,15.2722689 C6.69034517,15.5823529 6.57808904,15.8092437 6.36678339,15.9529412 C6.19509755,16.0588235 5.95737869,16.1193277 5.65362681,16.1193277 Z M8.44022011,16.8 L8.88264132,15.4084034 L10.9098549,15.4084034 L11.3522761,16.8 L12.1248624,16.8 L10.3089545,11.4 L9.49014507,11.4 L7.67423712,16.8 L8.44022011,16.8 Z M10.691946,14.7277311 L9.10055028,14.7277311 L9.88634317,12.2848739 L9.91275638,12.2848739 L10.691946,14.7277311 Z M13.3068534,16.8 L13.3068534,14.9319328 L13.9209605,14.2588235 L15.835918,16.8 L16.8,16.8 L14.4096048,13.7218487 L16.4962481,11.4 L15.5849925,11.4 L13.3068534,14.0092437 L13.3068534,11.4 L12.5870935,11.4 L12.5870935,16.8 L13.3068534,16.8 Z\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const bat = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/BAT</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/BAT\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"bat\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#378FE8\"></path>\n <path d=\"M5.87562136,16.8 C6.40613432,16.8 6.8179799,16.6941176 7.11115812,16.4823529 C7.45319937,16.2252101 7.62771021,15.8319328 7.62771021,15.287395 C7.62771021,14.9243697 7.543945,14.6294118 7.3764146,14.410084 C7.20888419,14.1907563 6.95758858,14.0470588 6.6295082,13.9789916 C6.88080381,13.8806723 7.06927552,13.7294118 7.20888419,13.5327731 C7.34849286,13.3210084 7.4182972,13.0638655 7.4182972,12.7613445 C7.4182972,12.3453782 7.28566896,12.0201681 7.02041248,11.7781513 C6.74119513,11.5210084 6.36425172,11.4 5.87562136,11.4 L3.6,11.4 L3.6,16.8 L5.87562136,16.8 Z M5.67318879,13.6915966 L4.36086727,13.6915966 L4.36086727,12.0806723 L5.68714966,12.0806723 C6.02221047,12.0806723 6.27350608,12.1411765 6.42707562,12.2697479 C6.58064516,12.3907563 6.65742993,12.587395 6.65742993,12.8596639 C6.65742993,13.1470588 6.58064516,13.3588235 6.42707562,13.494958 C6.27350608,13.6235294 6.02221047,13.6915966 5.67318879,13.6915966 Z M5.77091486,16.1193277 L4.36086727,16.1193277 L4.36086727,14.3647059 L5.79185616,14.3647059 C6.15483871,14.3647059 6.42707562,14.4327731 6.60158646,14.5764706 C6.7760973,14.7201681 6.86684294,14.9546218 6.86684294,15.2722689 C6.86684294,15.5823529 6.74817557,15.8092437 6.52480169,15.9529412 C6.34331042,16.0588235 6.09201481,16.1193277 5.77091486,16.1193277 Z M8.71665785,16.8 L9.18434691,15.4084034 L11.32734,15.4084034 L11.7950291,16.8 L12.6117398,16.8 L10.6921206,11.4 L9.8265468,11.4 L7.90692755,16.8 L8.71665785,16.8 Z M11.0969857,14.7277311 L9.41470122,14.7277311 L10.2453728,12.2848739 L10.2732946,12.2848739 L11.0969857,14.7277311 Z M15.1386568,16.8 L15.1386568,12.1033613 L16.8,12.1033613 L16.8,11.4 L12.7164463,11.4 L12.7164463,12.1033613 L14.38477,12.1033613 L14.38477,16.8 L15.1386568,16.8 Z\" id=\"BAT\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const cs = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/C#</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/C#\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"c#\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#78B354\"></path>\n <path d=\"M9.92568659,18 C10.3457189,17.993617 10.7592892,17.9425532 11.1663974,17.8468085 C11.4894992,17.7702128 11.7996769,17.6585106 12.0969305,17.5117021 L11.6122779,16.037234 C11.3731826,16.1585106 11.1211632,16.2446809 10.8562197,16.2957447 C10.5912763,16.3468085 10.3231018,16.3723404 10.0516963,16.3723404 C9.76736672,16.3723404 9.49596123,16.3117021 9.23747981,16.1904255 C8.96607431,16.056383 8.73021002,15.8776596 8.52988691,15.6542553 C8.12924071,15.1819149 7.93214863,14.6361702 7.93861066,14.0170213 C7.93861066,13.7234043 7.97415186,13.4329787 8.04523425,13.1457447 C8.12924071,12.8329787 8.27786753,12.5489362 8.4911147,12.293617 C8.6914378,12.0765957 8.93053312,11.9106383 9.20840065,11.7957447 C9.49919225,11.693617 9.80290792,11.6393617 10.1195477,11.6329787 C10.6558966,11.6265957 11.1793215,11.7191489 11.6898223,11.9106383 L11.7576737,10.3882979 C11.1567044,10.1393617 10.5298869,10.0117021 9.87722132,10.0053191 C9.57996769,10.0117021 9.28917609,10.0404255 9.00484653,10.0914894 C8.73344103,10.1489362 8.47172859,10.2287234 8.21970921,10.3308511 C7.72859451,10.5414894 7.30533118,10.8446809 6.94991922,11.2404255 C6.59450727,11.6617021 6.33925687,12.1340426 6.18416801,12.6574468 C6.06785137,13.1042553 6.00646204,13.5574468 6,14.0170213 C6,14.4893617 6.06138934,14.9489362 6.18416801,15.3957447 C6.26817447,15.6638298 6.37802908,15.9223404 6.51373183,16.1712766 C6.64297254,16.4010638 6.79483037,16.6148936 6.96930533,16.812766 C7.33117932,17.1957447 7.76090468,17.4893617 8.25848142,17.693617 C8.79483037,17.8978723 9.35056543,18 9.92568659,18 Z M13.1728595,12.4659574 L13.3231018,11.3601064 L14.0306947,11.3601064 L13.8707593,12.4659574 L14.1470113,12.4659574 L14.3069467,11.3601064 L14.8594507,11.3601064 L14.8594507,11.1111702 L14.3408724,11.1111702 L14.447496,10.3547872 L15,10.3547872 L15,10.1058511 L14.4814216,10.1058511 L14.641357,9 L14.365105,9 L14.2051696,10.1058511 L13.4975767,10.1058511 L13.6672052,9 L13.3909532,9 L13.2310178,10.1058511 L12.6785137,10.1058511 L12.6785137,10.3547872 L13.1970921,10.3547872 L13.0904685,11.1111702 L12.5379645,11.1111702 L12.5379645,11.3601064 L13.0565428,11.3601064 L12.8966074,12.4659574 L13.1728595,12.4659574 Z M14.0646204,11.1111702 L13.3570275,11.1111702 L13.4636511,10.3547872 L14.1712439,10.3547872 L14.0646204,11.1111702 Z\" id=\"形状结合\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const css = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/CSS</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/CSS\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"css\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#53ADEF\"></path>\n <polygon id=\"路径\" fill=\"#FFFFFF\" points=\"13.6581388 11.660821 10.231646 13.1830211 10.2234617 13.1863691 13.5370112 13.1863691 13.1578054 17.7139099 10.2371022 18.6 10.231646 18.598326 10.231646 18.6 7.29511973 17.6971702 7.10524401 15.41666 8.56368596 15.41666 8.6580782 16.5979275 10.2185511 17.007493 10.231646 17.0035871 10.231646 17.0052611 11.8472264 16.5326425 11.9579873 14.6298924 10.231646 14.6243125 7.01085177 14.6131527 6.90009093 13.1858111 10.231646 11.7445197 10.4258866 11.660821 6.77405273 11.660821 6.6 10.2 13.8 10.2 13.6581388 11.6602631\"></polygon>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const csv = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/CSV</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/CSV\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"csv\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#14BC64\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n <path d=\"M5.86532461,16.8 C6.37684952,16.8 6.81529945,16.6398922 7.18067438,16.3196765 C7.57262204,15.977628 7.81841973,15.5045822 7.92471062,14.9005391 L7.22053347,14.9005391 C7.12752894,15.3080863 6.96144942,15.6137466 6.72229492,15.8175202 C6.49642677,16.0067385 6.20412682,16.1013477 5.85868143,16.1013477 C5.32722698,16.1013477 4.93527932,15.919407 4.68283845,15.5555256 C4.44368395,15.2134771 4.32410669,14.7331536 4.32410669,14.1072776 C4.32410669,13.5032345 4.44368395,13.0229111 4.68948163,12.6735849 C4.94856568,12.2878706 5.33387016,12.0986523 5.84539507,12.0986523 C6.19084046,12.0986523 6.46985405,12.1787062 6.69572219,12.3460916 C6.92159034,12.5134771 7.07438349,12.7754717 7.15410166,13.1247978 L7.85827881,13.1247978 C7.78520382,12.6008086 7.57262204,12.1787062 7.22717665,11.8730458 C6.86844489,11.5528302 6.41006543,11.4 5.85868143,11.4 C5.10135883,11.4 4.53004529,11.6692722 4.13145445,12.222372 C3.7727227,12.709973 3.6,13.3358491 3.6,14.1072776 C3.6,14.8932615 3.76607952,15.5191375 4.11152491,15.9849057 C4.50347257,16.5234501 5.08807247,16.8 5.86532461,16.8 Z M10.3893306,16.8 C10.9872169,16.8 11.4522396,16.6690027 11.7843986,16.4070081 C12.1165576,16.1377358 12.2826371,15.7738544 12.2826371,15.3080863 C12.2826371,14.8277628 12.0766985,14.4566038 11.6714645,14.1873315 C11.4854555,14.0636119 11.0669351,13.8962264 10.4291897,13.6778976 C9.98409663,13.532345 9.71172622,13.4231806 9.60543533,13.3576819 C9.36628083,13.219407 9.25334675,13.0374663 9.25334675,12.8045822 C9.25334675,12.5425876 9.35299446,12.3533693 9.55893306,12.2369272 C9.72501258,12.1350404 9.96416709,12.084097 10.2763966,12.084097 C10.6351283,12.084097 10.9008556,12.1568733 11.0868646,12.3097035 C11.2728737,12.4552561 11.3924509,12.7026954 11.4588827,13.0374663 L12.1763463,13.0374663 C12.129844,12.4698113 11.9438349,12.0549865 11.6116759,11.7857143 C11.2994464,11.5237197 10.8676397,11.4 10.3162557,11.4 C9.81137393,11.4 9.39285355,11.5237197 9.06069451,11.771159 C8.70860594,12.0331536 8.53588324,12.3897574 8.53588324,12.848248 C8.53588324,13.2994609 8.71524912,13.6487871 9.08062406,13.8889488 C9.22677403,13.9762803 9.58550579,14.1145553 10.1701057,14.3183288 C10.694917,14.4929919 11.0071465,14.609434 11.1134373,14.667655 C11.4123805,14.8350404 11.5651736,15.0606469 11.5651736,15.351752 C11.5651736,15.5846361 11.4588827,15.7665768 11.246301,15.8975741 C11.0337192,16.0285714 10.7480624,16.1013477 10.3893306,16.1013477 C9.99073981,16.1013477 9.69843986,16.0212938 9.50578762,15.861186 C9.29320584,15.6865229 9.16034222,15.3881402 9.10719678,14.980593 L8.38973327,14.980593 C8.42959235,15.6355795 8.64217413,16.115903 9.03412179,16.4215633 C9.35963764,16.6690027 9.81137393,16.8 10.3893306,16.8 Z M15.0993457,16.6981132 L16.8,11.5018868 L16.0161047,11.5018868 L14.6741822,15.8102426 L14.6542526,15.8102426 L13.305687,11.5018868 L12.5217916,11.5018868 L14.2224459,16.6981132 L15.0993457,16.6981132 Z\" id=\"CSV\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const defaultFile = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/文件</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/文件\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"pdf\" transform=\"translate(2.000000, 0.000000)\">\n <path d=\"M14.1176471,0 L2.74128887,0 C1.22731689,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.22731689,24 2.74128887,24 L17.2587111,24 C18.7726831,24 20,22.765548 20,21.2427744 L20,6 C20,6 14.1176471,0 14.1176471,0 Z\" id=\"路径\" fill=\"#378FE8\"></path>\n <path d=\"M14.1176471,0 L20,6 L15.3176471,6 C14.6549054,6 14.1176471,5.4627417 14.1176471,4.8 L14.1176471,0 L14.1176471,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n <path d=\"M14.5880967,13.1173301 C14.8152676,13.1173301 15,13.3453703 15,13.6274691 L15,13.6274691 L14.0557428,17.489861 C14.0557428,17.7719598 13.8716345,18 13.6438394,18 L13.6438394,18 L5.9674589,18 C5.74028797,18 5.55555556,17.7719598 5.55555556,17.489861 L5.55555556,17.489861 L6.49981277,13.6274691 C6.49981277,13.3453703 6.68454518,13.1173301 6.91171612,13.1173301 L6.91171612,13.1173301 Z M8.54763993,10 C8.74912861,10 9.00458747,10.1412782 9.17909105,10.4590101 C9.3284104,10.7759998 9.5345565,10.9507235 9.79752937,10.9831811 L9.79752937,10.9831811 L9.89693802,10.9920475 C10.2885983,11.0188347 11.410488,11.0333709 13.2626071,11.0356559 C13.712505,11.0318676 13.8888889,11.3623841 13.8888889,11.6829992 L13.8888889,11.6829992 L13.8888889,12.2278307 L6.32346878,12.2278307 C6.07820429,12.2278307 5.88031363,12.4654087 5.88031363,12.7566149 L5.88031363,12.7566149 L5,15.9677076 L5,15.9677076 L5,10.8633729 C5,10.0518557 5.7639779,10 5.96546658,10 Z\" id=\"形状结合\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const doc = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/DOC</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/DOC\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"word\" transform=\"translate(1.800000, 0.000000)\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#378FE8\"></path>\n <polygon id=\"W\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" points=\"8.75949099 18 10.1847296 12.5848739 10.2254507 12.5848739 11.640509 18 12.9028632 18 15 10.8 13.6562036 10.8 12.2920467 16.2756303 12.2513256 16.2756303 10.8159067 10.8 9.58409332 10.8 8.14867444 16.2756303 8.10795334 16.2756303 6.74379639 10.8 5.4 10.8 7.48695652 18\"></polygon>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const exe = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/EXE</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/EXE\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"EXE\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z M8.15340312,5.27127736 L6.60000001,5.27127736 L6.60000001,6.80307537 L8.15340312,6.80307537 L8.15340312,8.33487339 L6.60000001,8.33487339 L6.60000001,9.8666714 L8.15340312,9.8666714 L8.15340312,11.3984694 L6.59997259,11.3984694 L6.59997259,9.8666714 L5.04656949,9.8666714 L5.04656949,8.33487339 L6.59997259,8.33487339 L6.59997259,6.80307537 L5.04656949,6.80307537 L5.04656949,5.27127736 L6.59997259,5.27127736 L6.59997259,3.73947935 L5.04656949,3.73947935 L5.04656949,2.20768134 L6.60000001,2.20768134 L6.60000001,3.73947935 L8.15340312,3.73947935 L8.15340312,5.27127736 Z\" id=\"形状\" fill=\"#667580\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n <path d=\"M8.181848,19.8 L8.181848,19.3310924 L5.97211591,19.3310924 L5.97211591,18.1865546 L7.96664844,18.1865546 L7.96664844,17.7176471 L5.97211591,17.7176471 L5.97211591,16.6689076 L8.09261892,16.6689076 L8.09261892,16.2 L5.4,16.2 L5.4,19.8 L8.181848,19.8 Z M9.1213778,19.8 L10.1238928,18.3731092 L11.1264079,19.8 L11.8244943,19.8 L10.4650629,17.9394958 L11.7352652,16.2 L11.0371788,16.2 L10.1238928,17.5008403 L9.21060689,16.2 L8.5125205,16.2 L9.77222526,17.9394958 L8.42329142,19.8 L9.1213778,19.8 Z M15,19.8 L15,19.3310924 L12.7902679,19.3310924 L12.7902679,18.1865546 L14.7848004,18.1865546 L14.7848004,17.7176471 L12.7902679,17.7176471 L12.7902679,16.6689076 L14.9107709,16.6689076 L14.9107709,16.2 L12.218152,16.2 L12.218152,19.8 L15,19.8 Z\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const fla = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/FLA</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/FLA\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"FLA\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#F26225\"></path>\n <path d=\"M4.41013514,16.8 L4.41013514,14.3798319 L7.04864865,14.3798319 L7.04864865,13.6764706 L4.41013514,13.6764706 L4.41013514,12.1033613 L7.20472973,12.1033613 L7.20472973,11.4 L3.6,11.4 L3.6,16.8 L4.41013514,16.8 Z M11.6418919,16.8 L11.6418919,16.0966387 L8.72094595,16.0966387 L8.72094595,11.4 L7.91824324,11.4 L7.91824324,16.8 L11.6418919,16.8 Z M12.6527027,16.8 L13.1506757,15.4084034 L15.4324324,15.4084034 L15.9304054,16.8 L16.8,16.8 L14.7560811,11.4 L13.8344595,11.4 L11.7905405,16.8 L12.6527027,16.8 Z M15.1871622,14.7277311 L13.3959459,14.7277311 L14.2804054,12.2848739 L14.3101351,12.2848739 L15.1871622,14.7277311 Z\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const html = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/HTML</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/HTML\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"HTML\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#F26225\"></path>\n <polygon id=\"路径\" fill=\"#FFFFFF\" points=\"13.72 11.6913838 8.24 11.6913838 8.34 13.1169713 13.54 13.1169713 13.18 17.7446475 10.16 18.6 7.24 17.7446475 7.04 15.3759791 8.5 15.3759791 8.6 16.5164491 10.16 16.9770235 11.8 16.5164491 11.9 14.6302872 6.96 14.6302872 6.6 10.2 13.8 10.2 13.72 11.6913838\"></polygon>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const img = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/图片</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/图片\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"excel\" transform=\"translate(1.800000, 0.000000)\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#53ADEF\"></path>\n <path d=\"M13.824,10.32 C14.4072127,10.32 14.88,10.7927873 14.88,11.376 L14.88,16.344 C14.88,16.9272127 14.4072127,17.4 13.824,17.4 L6.696,17.4 C6.1127873,17.4 5.64,16.9272127 5.64,16.344 L5.64,11.376 C5.64,10.7927873 6.1127873,10.32 6.696,10.32 L13.824,10.32 Z M11.32246,13.5878637 L9.69467725,15.2453409 C9.55321852,15.4095412 9.31061521,15.4382669 9.13500743,15.3157947 L9.11341755,15.299697 L8.30168,14.6534455 L6.34,16.0480344 L6.34,16.7548593 C6.34,16.7645794 6.34633183,16.7728232 6.35511699,16.7757318 L6.36210526,16.7768528 L14.1578947,16.7768528 C14.1676669,16.7768528 14.175951,16.7705551 14.1788737,16.7618135 L14.18,16.7548593 L14.18,16.0816037 L11.32246,13.5878637 Z M8.24842105,11.5809568 C7.70719972,11.5809568 7.26842105,12.0175157 7.26842105,12.5559989 C7.26842105,13.0944822 7.70719972,13.5310411 8.24842105,13.5310411 C8.78964239,13.5310411 9.22842105,13.0944822 9.22842105,12.5559989 C9.22842105,12.0175157 8.78964239,11.5809568 8.24842105,11.5809568 Z\" id=\"形状结合\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const ipa = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/IPA</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/IPA\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"IPA\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#53ADEF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n <path d=\"M5.43226366,16.8 L5.43226366,11.4 L4.8,11.4 L4.8,16.8 L5.43226366,16.8 Z M7.86244579,16.8 L7.86244579,14.5915966 L9.49384215,14.5915966 C10.7739809,14.5915966 11.421856,14.0546218 11.421856,12.9882353 C11.421856,11.9294118 10.7817866,11.4 9.50164788,11.4 L7.22237641,11.4 L7.22237641,16.8 L7.86244579,16.8 Z M9.46261925,14.0546218 L7.86244579,14.0546218 L7.86244579,11.9369748 L9.46261925,11.9369748 C9.90754553,11.9369748 10.2353859,12.0201681 10.4539462,12.2016807 C10.6725065,12.3605042 10.7817866,12.6252101 10.7817866,12.9882353 C10.7817866,13.3512605 10.6725065,13.6159664 10.461752,13.789916 C10.2431917,13.9638655 9.91535126,14.0546218 9.46261925,14.0546218 Z M12.3585429,16.8 L12.951778,15.287395 L15.5120555,15.287395 L16.1052905,16.8 L16.8,16.8 L14.6065915,11.4 L13.8650477,11.4 L11.6716392,16.8 L12.3585429,16.8 Z M15.3091067,14.7655462 L13.1547268,14.7655462 L14.224111,12.0655462 L14.2553339,12.0655462 L15.3091067,14.7655462 Z\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const java = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/JAVA</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/JAVA\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"java\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#F59203\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n <path d=\"M12.6345082,9.54776364 C12.3269346,9.75591328 12.0273145,9.93314034 11.6981721,10.1903736 C11.449332,10.3857816 11.0000782,10.6528974 10.9758547,11.0127809 C10.9383581,11.5600927 11.8159607,12.0662807 11.3504576,12.7602158 C11.1739354,13.0247912 10.8743257,13.1379515 10.4944135,13.2998766 C10.4489634,13.2201892 10.5932879,13.1532534 10.655008,13.0684554 C11.2382997,12.2562593 10.0478143,11.9865933 10.200113,10.9869589 C10.3471026,10.0207975 11.5322787,9.68386685 12.6345082,9.54776364 L12.6345082,9.54776364 Z M8.91639428,12.8883592 C8.64099764,13.0117208 8.18079344,13.0349924 7.98005813,13.2995579 C8.18344807,13.4461911 8.48041354,13.4407717 8.75581018,13.453842 C9.88457556,13.5026069 11.2970333,13.4101679 12.2599157,13.2482427 C12.2920926,13.3151885 12.1261993,13.4305704 12.0190292,13.5051671 C11.4118355,13.9316577 9.52324579,14.052469 8.22061282,13.967681 C7.78463208,13.9393087 6.78690772,13.8290175 6.77596776,13.4538321 C6.76269464,12.9989692 7.98503556,12.9502044 8.48803522,12.9141812 C8.58692001,12.9065302 8.77172757,12.8679567 8.91606245,12.8883592 L8.91639428,12.8883592 Z M8.35466103,14.044828 C8.48041354,14.0601299 8.26639474,14.1321664 8.3012367,14.2246154 C8.76144089,14.661626 10.192481,14.5382744 10.8958945,14.4043927 C11.0428736,14.3760205 11.190195,14.2912224 11.2970333,14.3014337 C11.5644661,14.3247053 11.7356686,14.6227436 11.9659367,14.6613072 C11.1526984,15.0135398 9.58264303,15.1805755 8.43495308,14.9695568 C8.13799798,14.9156813 7.62171482,14.7613972 7.60579743,14.5325362 C7.58157398,14.2214175 8.11676097,14.0904149 8.35466103,14.0441904 L8.35466103,14.044828 Z M8.70238585,15.0986466 C8.78533252,15.1244686 8.67285314,15.1681427 8.67550777,15.2016057 C8.9190489,15.6077137 10.1227971,15.4636307 10.7353,15.3300679 C10.8583979,15.3016956 10.9814958,15.2194579 11.0830249,15.2271088 C11.3932531,15.2475114 11.5110417,15.5586201 11.7784745,15.6124855 C10.925085,16.1135828 8.85732886,16.3166318 8.00660439,15.6896326 C7.96645318,15.2322095 8.34900958,15.1808943 8.70205402,15.0986466 L8.70238585,15.0986466 Z M7.9266338,15.8697288 C7.67247416,15.931564 7.01452111,15.8439068 6.99030802,16.1779684 C6.98234415,16.3064306 7.21493496,16.4581644 7.36491092,16.5120299 C8.2368724,16.8282392 9.98909106,16.877014 11.4307393,16.7176292 C12.099653,16.6430424 13.3568256,16.4272319 13.1962415,15.7667697 C13.3969768,15.7900413 13.5761432,15.9134029 13.5973802,16.1008313 C13.6776827,16.8100682 11.9815326,17.1081066 11.2970333,17.180153 C9.80693814,17.3369775 7.94521618,17.3060649 6.80317767,16.9232286 C6.4312294,16.799867 5.98197554,16.570996 6.00055791,16.2292935 C6.03274525,15.6536094 7.47705847,15.4942345 7.92664417,15.86941 L7.9266338,15.8697288 Z M10.2004449,18 C9.19742163,17.8944906 8.23156315,17.7532768 7.41832489,17.409024 C9.54481462,17.89991 12.6451267,17.8638968 14.1325672,16.818038 C14.2128697,16.7616222 14.2878524,16.6510122 14.4,16.6637638 C14.0253971,17.7430756 12.5863931,17.8176723 11.3504576,18 L10.200113,18 L10.2004449,18 Z M10.8958945,7.8 C11.0830249,7.96957611 11.2167309,8.28578544 11.2167309,8.62239731 C11.2167309,9.61692104 10.1201425,10.1926051 9.58496583,10.8581779 C9.46716683,11.0073615 9.31487844,11.2359136 9.31753306,11.4749759 C9.32284231,12.0171871 9.90614439,12.6237938 10.1201425,13.0684554 C9.74554992,12.8319434 9.29098681,12.5160529 8.96980825,12.1434178 C8.64896151,11.773343 8.32778295,11.1721557 8.62208343,10.6528974 C9.06337342,9.87161396 10.3769567,9.40654984 10.8424702,8.57140095 C10.9549495,8.36835193 11.0432055,8.05755206 10.8958945,7.80031879 L10.8958945,7.8 Z M12.4742559,13.1456024 C13.0253603,12.6932799 13.95871,12.870507 13.9988612,13.6339482 C14.0443113,14.5283819 13.0250285,15.0294693 12.2867834,15.0731434 C12.629199,14.7594745 13.5333478,14.2558468 13.3568256,13.5312979 C13.2844974,13.2383602 12.9045956,13.0611232 12.4742456,13.1459212 L12.4742559,13.1456024 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const js = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/JS</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/JS\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"js\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#FBC100\"></path>\n <path d=\"M9.16868571,9.76744186 L7.45714286,9.76744186 L7.45714286,14.1104651 C7.45714286,15.1831395 7.07314286,15.4866279 6.3984,15.4866279 C6.08571429,15.4866279 5.80045714,15.4343023 5.58102857,15.3610465 L5.4,16.6325581 C5.71268571,16.7372093 6.20091429,16.8 6.57394286,16.8 C8.11542857,16.8 9.16868571,16.1093023 9.16868571,14.1209302 L9.16868571,9.76744186 Z M12.9099429,9.6 C11.2477714,9.6 10.2,10.5 10.2,11.6877907 C10.2,12.7133721 11.0064,13.3517442 12.1858286,13.7651163 C13.0361143,14.052907 13.3707429,14.3145349 13.3707429,14.7383721 C13.3707429,15.2040698 12.9812571,15.5023256 12.2461714,15.5023256 C11.5659429,15.5023256 10.9460571,15.2825581 10.5236571,15.0680233 L10.2,16.3604651 C10.6004571,16.5802326 11.3465143,16.7947674 12.1529143,16.7947674 C14.0948571,16.7947674 15,15.8005814 15,14.6337209 C15,13.6395349 14.424,13.0011628 13.1732571,12.5459302 C12.2461714,12.1953488 11.8621714,11.9965116 11.8621714,11.5517442 C11.8621714,11.2011628 12.1968,10.8819767 12.8934857,10.8819767 C13.5737143,10.8819767 14.0454857,11.1017442 14.3197714,11.2377907 L14.7312,9.92965116 C14.2978286,9.75174419 13.7163429,9.6 12.9099429,9.6 L12.9099429,9.6 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const key = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/KEY</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/KEY\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"keynote\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#378FE8\"></path>\n <path d=\"M14.9911156,14.5898439 L14.9911156,15.1248048 L10.4736066,15.1248048 L10.4736066,17.8869141 L11.6598352,17.8869141 C11.8614793,17.8869141 12.024944,18.0465438 12.024944,18.243457 C12.024944,18.4403703 11.8614793,18.6 11.6598352,18.6 L8.74016477,18.6 C8.53852074,18.6 8.37505596,18.4403703 8.37505596,18.243457 C8.37505596,18.0465438 8.53852074,17.8869141 8.74016477,17.8869141 L9.9263934,17.8869141 L9.9263934,15.1253907 L5.40948438,15.1253907 L5.40948438,14.5904298 L14.9911156,14.5904298 L14.9911156,14.5898439 Z M13.6638836,9.60000011 C13.9224898,9.60000011 14.1462952,9.77695335 14.1996965,10.024219 L14.9881156,13.6775392 C15.0223332,13.8352785 14.9817865,13.9996722 14.8777768,14.1248996 C14.7737671,14.2501269 14.6174161,14.3227976 14.4523026,14.3226566 L5.94769737,14.3226566 C5.78258395,14.3227976 5.62623288,14.2501269 5.5222232,14.1248996 C5.41821351,13.9996722 5.37766679,13.8352785 5.41188445,13.6775392 L6.20030346,10.024219 C6.25366803,9.77684681 6.47724125,9.59983737 6.73611641,9.60000011 L13.6638836,9.60000011 L13.6638836,9.60000011 Z M12.9612666,10.5662111 L12.9120655,10.5703127 L11.9358419,10.7841799 C11.8708856,10.7984107 11.819027,10.8460683 11.8005407,10.9085205 C11.7820544,10.9709728 11.7998766,11.0382999 11.8470397,11.0841799 L12.0114437,11.2441408 L11.317227,11.9226564 C11.2323411,12.04108 11.0938739,12.1118994 10.9458497,12.1125982 C10.7978254,12.1132971 10.6586634,12.0437885 10.572609,11.926172 L10.3470035,11.6718752 L10.1921998,11.4996096 C10.0024563,11.253348 9.70373817,11.1103231 9.3881804,11.1146486 C9.11037369,11.1146486 8.85956764,11.2248049 8.67836328,11.401758 L8.66576298,11.4140627 L7.53653571,12.536133 C7.41893287,12.6708986 7.41893287,12.7957033 7.53653571,12.9146486 C7.65353854,13.0318361 7.78194165,13.0318361 7.92354507,12.9146486 L9.02457163,11.8382814 C9.10958742,11.7201665 9.24796462,11.6496296 9.39580529,11.6490475 C9.54364595,11.6484653 9.68260115,11.7179102 9.76858958,11.8353517 L9.99419502,12.0896486 L10.1483988,12.2619142 C10.3380033,12.508008 10.6374105,12.6515626 10.9524182,12.6468752 C11.2302249,12.6468752 11.4810309,12.5367189 11.6622353,12.3597658 L11.6754356,12.3474611 L12.4014531,11.6255861 L12.603658,11.8230471 C12.6506402,11.8691037 12.7195849,11.8865078 12.7835375,11.8684552 C12.8474902,11.8504026 12.8962927,11.7997607 12.9108654,11.7363283 L13.1298707,10.783008 C13.1434944,10.7234958 13.1249957,10.6613137 13.0808396,10.6181935 C13.0366834,10.5750733 12.9730075,10.5570086 12.9120655,10.5703127 L12.9612666,10.5662111 L12.9612666,10.5662111 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const mp3 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/MP3</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/MP3\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"MP3\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#14BC64\"></path>\n <path d=\"M14.3998147,10.9584359 L14.3998147,9.80061073 C14.3998147,9.73573225 14.365358,9.67500695 14.3073452,9.63722297 C14.2490817,9.59963677 14.1742711,9.58982737 14.1071891,9.61093933 L8.22903883,11.4501715 C8.13751771,11.4786009 8.0773139,11.5575705 8.07973383,11.6451233 L8.1083369,12.6102117 L8.1083369,16.7193896 C7.77229436,16.679529 7.3953856,16.7339158 7.05961556,16.872434 C6.66888489,17.0340022 6.35183113,17.2932788 6.1673609,17.602789 C5.97248064,17.9307116 5.94675531,18.2751183 6.0956352,18.5727029 C6.21928028,18.8205583 6.44682953,19.0064721 6.75383298,19.1109441 C6.92647609,19.1700576 7.11490322,19.2 7.31322806,19.2 C7.58703929,19.2 7.87219801,19.1414897 8.1392836,19.0314406 C8.64383795,18.8232282 9.02443109,18.4467135 9.15185867,18.0358462 C9.19777184,17.9667057 9.19777184,17.871519 9.19777184,17.8186649 L9.19777184,17.7787055 C9.1988837,17.7512154 9.1988837,17.7185735 9.19769554,17.6866831 L9.19570074,17.6866831 C9.19801166,17.5156317 9.19801166,16.7122797 9.19801166,12.6933345 L13.2973972,11.4398973 L13.2973972,14.9378371 C12.9612674,14.8979864 12.5845331,14.9523633 12.2486758,15.09101 C11.4194046,15.4335972 10.9863689,16.19608 11.2846846,16.7913482 C11.4775264,17.1770988 11.9453132,17.4165489 12.5052424,17.4165489 C12.7794024,17.4165489 13.0638635,17.359067 13.3275045,17.2500858 C13.8620136,17.0294634 14.2504552,16.629068 14.3574551,16.1951307 C14.3868103,16.1330507 14.3868103,16.0577794 14.3868103,16.007971 C14.388162,15.9688422 14.3878677,15.936576 14.3867449,15.9047944 L14.3806188,15.90518 C14.3870937,15.6899567 14.3870937,14.8190761 14.3870937,11.0271907 C14.3952801,11.0055349 14.4,10.9825243 14.4,10.9585744 L14.3998147,10.9584359 Z\" id=\"路径\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const page = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/文档</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/文档\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"pages\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#9466CD\"></path>\n <path d=\"M14.0506888,10.580838 L13.1550425,11.3323745 L12.1459551,10.1297794 L13.0412113,9.37820876 C13.3451781,9.12313077 13.6002437,9.42711776 13.6002437,9.42711776 L14.0995997,10.0217845 C14.0995987,10.0217951 14.3546653,10.3257715 14.0506888,10.580838 Z M5.66861701,16.5899183 L7.68476284,15.9221129 L6.67171032,14.7148039 L5.66861701,16.5899183 Z M7.97860307,15.6762747 L12.8292113,11.6061311 L11.8198728,10.4032484 L6.96925313,14.4734016 L7.97860307,15.6762747 Z M5.7,17.4 L14.7,17.4 C14.8656854,17.4 15,17.5343146 15,17.7 C15,17.8656854 14.8656854,18 14.7,18 L5.7,18 C5.53431458,18 5.4,17.8656854 5.4,17.7 C5.4,17.5343146 5.53431458,17.4 5.7,17.4 Z\" id=\"形状结合\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const pdf = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/PDF</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/PDF\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"pdf\" transform=\"translate(2.000000, 0.000000)\">\n <path d=\"M14.1176471,0 L2.74128887,0 C1.22731689,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.22731689,24 2.74128887,24 L17.2587111,24 C18.7726831,24 20,22.765548 20,21.2427744 L20,6 C20,6 14.1176471,0 14.1176471,0 Z\" id=\"形状\" fill=\"#DD2A42\"></path>\n <path d=\"M13.465286,16.1960788 C12.7331102,16.140608 12.0280521,15.863254 11.458582,15.3640169 C10.3467596,15.6136354 9.28917236,15.9741956 8.23158516,16.417962 C7.39093891,17.9434089 6.60452791,18.72 5.92658739,18.72 C5.79099929,18.72 5.62829356,18.6922646 5.51982309,18.6090584 C5.22152926,18.4703814 5.05882353,18.165292 5.05882353,17.8602027 C5.05882353,17.6105841 5.11305877,16.9171991 7.68923274,15.7800478 C8.2858204,14.6706319 8.74681995,13.5334806 9.12646664,12.3408585 C8.8010552,11.675209 8.09599706,10.0388205 8.58411423,9.20675855 C8.74681995,8.90166918 9.0722314,8.73525679 9.42476047,8.76299218 C9.69593668,8.76299218 9.96711289,8.90166917 10.1298186,9.12355235 C10.4823477,9.62278951 10.4552301,10.6767346 9.99423051,12.2299169 C10.4281124,13.0619788 10.9975825,13.8108346 11.675523,14.4487487 C12.244993,14.3378071 12.8144631,14.254601 13.3839331,14.2546009 C14.6584613,14.2823363 14.8482846,14.8925151 14.821167,15.2530753 C14.821167,16.1960788 13.9262855,16.1960788 13.465286,16.1960788 L13.465286,16.1960788 Z M5.76470588,17.76 L5.85294118,17.7351724 C6.26470588,17.6110345 6.5882353,17.3627586 6.82352941,17.04 C6.38235294,17.1889655 6.02941176,17.4372414 5.76470588,17.76 Z M9.42619971,9.48 L9.34098347,9.48 C9.31257806,9.48 9.25576723,9.48 9.22736181,9.51 C9.11374016,10.02 9.1989564,10.56 9.3977943,11.04 C9.56822678,10.53 9.56822678,9.98999999 9.42619971,9.48 L9.42619971,9.48 Z M9.66013073,13.56 L9.63398693,13.6148571 L9.60784314,13.5874286 C9.37254903,14.2182857 9.11111112,14.8491429 8.82352941,15.4525714 L8.87581699,15.4251429 L8.87581699,15.48 C9.4509804,15.2605714 10.0784314,15.0685714 10.6535948,14.9314286 L10.627451,14.904 L10.7058824,14.904 C10.3137255,14.4925714 9.94771242,14.0262857 9.66013073,13.56 L9.66013073,13.56 Z M13.4964706,15.12 C13.2635294,15.12 13.0564706,15.12 12.8235294,15.189282 C13.0823529,15.3624871 13.3411765,15.4317692 13.6,15.4664102 C13.7811765,15.5010512 13.9623529,15.4664102 14.1176471,15.3971281 C14.1176471,15.2932051 14.0141176,15.12 13.4964706,15.12 Z\" id=\"形状备份\" fill=\"#FFFFFF\" fill-rule=\"nonzero\"></path>\n <path d=\"M14.1176471,0 L20,6 L15.3176471,6 C14.6549054,6 14.1176471,5.4627417 14.1176471,4.8 L14.1176471,0 L14.1176471,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const php = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/PHP</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/PHP\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"php\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#AC8FD7\"></path>\n <path d=\"M7.16456528,13.4691011 C6.93145216,14.7205056 6.10817921,14.5907303 5.09605513,14.5907303 L5.5003146,12.4092697 C6.62161825,12.4092697 7.38292442,12.2825843 7.16456528,13.4691011 Z M3.6,16.8 L4.68294326,16.8 L4.93966278,15.4157303 C6.1524412,15.4157303 6.90489496,15.508427 7.60128355,14.8255618 C8.37144211,14.0839888 8.57209644,12.7646067 8.02324781,12.1033708 C7.7370203,11.7573034 7.27669565,11.5873596 6.65112624,11.5873596 L4.5649113,11.5873596 L3.6,16.8 Z M9.07963388,10.2 L10.1566755,10.2 L9.89995603,11.5842697 C10.8294577,11.5842697 11.6910911,11.5132022 12.1071537,11.9148876 C12.543872,12.3351124 12.3343653,12.8727528 11.8622374,15.4095506 L10.7704418,15.4095506 C11.2248648,12.9561798 11.310438,12.7522472 11.1451932,12.5668539 C10.9858501,12.3876404 10.6229018,12.4247191 9.74651448,12.4247191 L9.19176425,15.4095506 L8.11472259,15.4095506 L9.07963388,10.2 L9.07963388,10.2 Z M15.627457,13.4691011 C15.3913931,14.7390449 14.5445138,14.5907303 13.5589469,14.5907303 L13.9632064,12.4092697 C15.0904116,12.4092697 15.8458162,12.2825843 15.627457,13.4691011 L15.627457,13.4691011 Z M12.0628917,16.8 L13.1487858,16.8 L13.4055053,15.4157303 C14.6802505,15.4157303 15.3854915,15.4929775 16.0671261,14.8255618 C16.8372847,14.0839888 17.037939,12.7646067 16.4890904,12.1033708 C16.2028629,11.7573034 15.7425382,11.5873596 15.1169688,11.5873596 L13.0307538,11.5873596 L12.0628917,16.8 L12.0628917,16.8 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const ppt = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/PPT</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/PPT\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"ppt\" transform=\"translate(2.000000, 0.000000)\">\n <path d=\"M14.1176471,0 L2.74128887,0 C1.22731689,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.22731689,24 2.74128887,24 L17.2587111,24 C18.7726831,24 20,22.765548 20,21.2427744 L20,6 C20,6 14.1176471,0 14.1176471,0 Z\" id=\"路径\" fill=\"#F59203\"></path>\n <path d=\"M14.1176471,0 L20,6 L15.3176471,6 C14.6549054,6 14.1176471,5.4627417 14.1176471,4.8 L14.1176471,0 L14.1176471,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n <path d=\"M8.54689984,18 L8.54689984,14.7764706 L10.7980922,14.7764706 C13.0111288,14.7764706 14.1176471,13.9058824 14.1176471,12.1764706 C14.1176471,10.4588235 13.0111288,9.6 10.8235294,9.6 L7.05882353,9.6 L7.05882353,18 L8.54689984,18 Z M10.709062,13.6 L8.54689984,13.6 L8.54689984,10.7764706 L10.709062,10.7764706 C11.3577107,10.7764706 11.8410175,10.8823529 12.1462639,11.1058824 C12.4515103,11.3176471 12.6168521,11.6705882 12.6168521,12.1764706 C12.6168521,12.6823529 12.4642289,13.0470588 12.1589825,13.2705882 C11.8537361,13.4823529 11.3704293,13.6 10.709062,13.6 Z\" id=\"P\" fill=\"#FFFFFF\" fill-rule=\"nonzero\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const rar = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/RAR</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/RAR\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"rar\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M10.9766879,14.4620385 L10.9766879,15.9938365 L9.42325733,15.9938365 L9.42325733,14.4620385 L10.9766879,14.4620385 Z M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z M11.7533757,16.759749 L8.64656949,16.759749 L8.64656949,12.164355 L11.7533757,12.164355 L11.7533757,16.759749 Z M11.7534031,5.27127736 L10.2,5.27127736 L10.2,6.80307537 L11.7534031,6.80307537 L11.7534031,8.33487339 L10.2,8.33487339 L10.2,9.8666714 L11.7534031,9.8666714 L11.7534031,11.3984694 L10.1999726,11.3984694 L10.1999726,9.8666714 L8.64656949,9.8666714 L8.64656949,8.33487339 L10.1999726,8.33487339 L10.1999726,6.80307537 L8.64656949,6.80307537 L8.64656949,5.27127736 L10.1999726,5.27127736 L10.1999726,3.73947935 L8.64656949,3.73947935 L8.64656949,2.20768134 L10.2,2.20768134 L10.2,3.73947935 L11.7534031,3.73947935 L11.7534031,5.27127736 Z\" id=\"形状\" fill=\"#667580\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const snippet = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/CODE</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/CODE\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"code\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#53ADEF\"></path>\n <path d=\"M4.8,14.1768 L7.8126,16.1139 L7.8126,14.7156 L6.0189,13.608 L7.8126,12.5004 L7.8126,11.0925 L4.8,13.0395 L4.8,14.1768 Z M9.0498,16.8 L10.0866,16.8 L11.6058,9.6 L10.5621,9.6 L9.0498,16.8 Z M12.5877,11.0925 L12.5877,12.5004 L14.3808,13.608 L12.5877,14.7153 L12.5877,16.1136 L15.6,14.1768 L15.6,13.0395 L12.5877,11.0925 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const swf = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/SWF</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/SWF\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"swf\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#DD2A42\"></path>\n <path d=\"M11.313582,13.2692357 L12.922225,13.2692357 L12.922225,14.994972 L10.6066688,14.994972 C9.16864306,18.5966934 6.78000001,18.6216932 6.12221874,18.5966934 L6,18.5966934 L6,16.8709571 C6.95061736,16.8709571 7.94987778,16.7459581 9.04666876,13.7944816 C10.6066688,9.09226891 13.8,9.61751474 13.8,9.61751474 L13.8,11.343251 C11.9962958,11.2682516 11.3140708,13.2692357 11.3140708,13.2692357 L11.313582,13.2692357 Z\" id=\"路径\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const ttf = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/TTF</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/TTF\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"ttf\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#9466CD\"></path>\n <path d=\"M7.3704,16.2138 L7.3704,15.9546 C7.986,15.9546 8.2992,15.6846 8.2992,15.1554 L8.2992,11.1702 C8.2992,10.9542 8.1588,10.8462 7.878,10.8462 C7.5,10.8462 7.1868,10.965 6.9492,11.2134 C6.7116,11.4618 6.528,11.8398 6.42,12.3258 L6.15,12.261 L6.3876,10.425 C6.5172,10.4466 6.6468,10.4574 6.7656,10.4682 C6.8844,10.479 6.9924,10.4898 7.1112,10.4898 L10.4376,10.4898 C10.5564,10.4898 10.686,10.479 10.8048,10.4682 C10.9344,10.4574 11.064,10.4466 11.1936,10.425 L11.1936,12.2286 L10.956,12.261 C10.8912,11.343 10.4268,10.8786 9.5844,10.8786 C9.2928,10.8786 9.1524,10.9758 9.1524,11.1702 L9.1524,15.1554 C9.1524,15.6846 9.4656,15.9546 10.0812,15.9546 L10.0812,16.2138 L7.3704,16.2138 Z\" id=\"路径\" fill=\"#FFFFFF\" opacity=\"0.5\"></path>\n <path d=\"M10.7724,17.7798 L10.7724,17.5206 C11.388,17.5206 11.7012,17.2506 11.7012,16.7214 L11.7012,12.747 C11.7012,12.531 11.5608,12.423 11.28,12.423 C10.902,12.423 10.5888,12.5418 10.3512,12.7902 C10.1136,13.0386 9.9408,13.4058 9.822,13.9026 L9.552,13.8378 L9.7896,12.0018 C9.9192,12.0234 10.0488,12.0342 10.1676,12.045 C10.2864,12.0558 10.3944,12.0666 10.5132,12.0666 L13.8396,12.0666 C13.9584,12.0666 14.088,12.0558 14.2068,12.045 C14.3364,12.0342 14.466,12.0234 14.5956,12.0018 L14.5956,13.8054 L14.358,13.8378 C14.2932,12.9198 13.8288,12.4554 12.9864,12.4554 C12.6948,12.4554 12.5544,12.5526 12.5544,12.747 L12.5544,16.7322 C12.5544,17.2614 12.8676,17.5314 13.4832,17.5314 L13.4832,17.7906 L10.7724,17.7906 L10.7724,17.7798 Z\" id=\"路径\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const txt = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/TXT</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/TXT\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"txt\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#378FE8\"></path>\n <path d=\"M6.06390533,16.8 L6.06390533,12.1033613 L7.75384615,12.1033613 L7.75384615,11.4 L3.6,11.4 L3.6,12.1033613 L5.29704142,12.1033613 L5.29704142,16.8 L6.06390533,16.8 Z M8.84733728,16.8 L10.2035503,14.6596639 L11.5597633,16.8 L12.504142,16.8 L10.6650888,14.0092437 L12.383432,11.4 L11.4390533,11.4 L10.2035503,13.3512605 L8.96804734,11.4 L8.02366864,11.4 L9.72781065,14.0092437 L7.90295858,16.8 L8.84733728,16.8 Z M15.1100592,16.8 L15.1100592,12.1033613 L16.8,12.1033613 L16.8,11.4 L12.6461538,11.4 L12.6461538,12.1033613 L14.3431953,12.1033613 L14.3431953,16.8 L15.1100592,16.8 Z\" id=\"TXT\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const video = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/MP4</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/MP4\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"MP4\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#F59203\"></path>\n <path d=\"M12.6365884,15.4065782 L12.6365884,13.4525858 C12.634444,13.341072 12.6681817,13.2319401 12.7325839,13.1420676 L14.0617532,11.7939643 C14.4974254,11.3546946 14.999556,11.2259432 14.999556,11.7030809 L14.999556,17.1560831 C14.999556,17.6332208 14.4974254,17.5044694 14.0617532,17.0651998 L12.7325839,15.7170964 C12.6681817,15.6272239 12.634444,15.518092 12.6365884,15.4065782 Z M12.0458465,16.7016663 C12.0458465,17.1199454 11.7152413,17.4590277 11.3074191,17.4590277 L6.13842738,17.4590277 C5.7306052,17.4590277 5.4,17.1199454 5.4,16.7016663 L5.4,12.1574977 C5.4,11.7392186 5.7306052,11.4001363 6.13842738,11.4001363 L11.3074191,11.4001363 C11.7152413,11.4001363 12.0458465,11.7392186 12.0458465,12.1574977 L12.0458465,16.7016663 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const vss = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/VSS</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/VSS\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"vss\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#FECD4D\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n <path d=\"M6.27866109,16.6981132 L8.0460251,11.5018868 L7.23138075,11.5018868 L5.83682008,15.8102426 L5.81610879,15.8102426 L4.41464435,11.5018868 L3.6,11.5018868 L5.36736402,16.6981132 L6.27866109,16.6981132 Z M10.3656904,16.8 C10.9870293,16.8 11.4702929,16.6690027 11.8154812,16.4070081 C12.1606695,16.1377358 12.3332636,15.7738544 12.3332636,15.3080863 C12.3332636,14.8277628 12.1192469,14.4566038 11.6981172,14.1873315 C11.5048117,14.0636119 11.0698745,13.8962264 10.407113,13.6778976 C9.94456067,13.532345 9.66150628,13.4231806 9.55104603,13.3576819 C9.30251046,13.219407 9.18514644,13.0374663 9.18514644,12.8045822 C9.18514644,12.5425876 9.28870293,12.3533693 9.50271967,12.2369272 C9.67531381,12.1350404 9.92384937,12.084097 10.2483264,12.084097 C10.6211297,12.084097 10.8972803,12.1568733 11.0905858,12.3097035 C11.2838912,12.4552561 11.408159,12.7026954 11.4771967,13.0374663 L12.2228033,13.0374663 C12.174477,12.4698113 11.9811715,12.0549865 11.6359833,11.7857143 C11.3115063,11.5237197 10.8627615,11.4 10.289749,11.4 C9.76506276,11.4 9.33012552,11.5237197 8.98493724,11.771159 C8.61903766,12.0331536 8.43953975,12.3897574 8.43953975,12.848248 C8.43953975,13.2994609 8.62594142,13.6487871 9.00564854,13.8889488 C9.15753138,13.9762803 9.53033473,14.1145553 10.1378661,14.3183288 C10.6832636,14.4929919 11.0077406,14.609434 11.1182008,14.667655 C11.4288703,14.8350404 11.5876569,15.0606469 11.5876569,15.351752 C11.5876569,15.5846361 11.4771967,15.7665768 11.2562762,15.8975741 C11.0353556,16.0285714 10.7384937,16.1013477 10.3656904,16.1013477 C9.95146444,16.1013477 9.64769874,16.0212938 9.44748954,15.861186 C9.22656904,15.6865229 9.08849372,15.3881402 9.0332636,14.980593 L8.2876569,14.980593 C8.3290795,15.6355795 8.55,16.115903 8.95732218,16.4215633 C9.29560669,16.6690027 9.76506276,16.8 10.3656904,16.8 Z M14.8324268,16.8 C15.4537657,16.8 15.9370293,16.6690027 16.2822176,16.4070081 C16.6274059,16.1377358 16.8,15.7738544 16.8,15.3080863 C16.8,14.8277628 16.5859833,14.4566038 16.1648536,14.1873315 C15.9715481,14.0636119 15.5366109,13.8962264 14.8738494,13.6778976 C14.4112971,13.532345 14.1282427,13.4231806 14.0177824,13.3576819 C13.7692469,13.219407 13.6518828,13.0374663 13.6518828,12.8045822 C13.6518828,12.5425876 13.7554393,12.3533693 13.9694561,12.2369272 C14.1420502,12.1350404 14.3905858,12.084097 14.7150628,12.084097 C15.0878661,12.084097 15.3640167,12.1568733 15.5573222,12.3097035 C15.7506276,12.4552561 15.8748954,12.7026954 15.9439331,13.0374663 L16.6895397,13.0374663 C16.6412134,12.4698113 16.4479079,12.0549865 16.1027197,11.7857143 C15.7782427,11.5237197 15.3294979,11.4 14.7564854,11.4 C14.2317992,11.4 13.7968619,11.5237197 13.4516736,11.771159 C13.0857741,12.0331536 12.9062762,12.3897574 12.9062762,12.848248 C12.9062762,13.2994609 13.0926778,13.6487871 13.4723849,13.8889488 C13.6242678,13.9762803 13.9970711,14.1145553 14.6046025,14.3183288 C15.15,14.4929919 15.474477,14.609434 15.5849372,14.667655 C15.8956067,14.8350404 16.0543933,15.0606469 16.0543933,15.351752 C16.0543933,15.5846361 15.9439331,15.7665768 15.7230126,15.8975741 C15.5020921,16.0285714 15.2052301,16.1013477 14.8324268,16.1013477 C14.4182008,16.1013477 14.1144351,16.0212938 13.9142259,15.861186 C13.6933054,15.6865229 13.5552301,15.3881402 13.5,14.980593 L12.7543933,14.980593 C12.7958159,15.6355795 13.0167364,16.115903 13.4240586,16.4215633 C13.7623431,16.6690027 14.2317992,16.8 14.8324268,16.8 Z\" id=\"VSS\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const xls = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/XLS</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/XLS\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"excel\" transform=\"translate(1.800000, 0.000000)\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#14BC64\"></path>\n <polygon id=\"x\" stroke=\"#10B981\" stroke-width=\"0.5\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" points=\"8.01923077 18 10.2161538 14.7992263 12.3969231 18 14.4 18 11.1530769 13.5319149 14.0446154 9.6 12.0415385 9.6 10.2161538 12.2646035 8.37461538 9.6 6.37153846 9.6 9.26307692 13.5319149 6 18\"></polygon>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const xsd = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/XSD</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/XSD\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"xsd\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#53ADEF\"></path>\n <path d=\"M4.48846154,16.6981132 L5.76437247,14.6385445 L7.0402834,16.6981132 L7.92874494,16.6981132 L6.198583,14.0126685 L7.81518219,11.5018868 L6.92672065,11.5018868 L5.76437247,13.3795148 L4.60202429,11.5018868 L3.71356275,11.5018868 L5.31680162,14.0126685 L3.6,16.6981132 L4.48846154,16.6981132 Z M10.1732794,16.8 C10.7744939,16.8 11.2421053,16.6690027 11.5761134,16.4070081 C11.9101215,16.1377358 12.0771255,15.7738544 12.0771255,15.3080863 C12.0771255,14.8277628 11.8700405,14.4566038 11.4625506,14.1873315 C11.2755061,14.0636119 10.8546559,13.8962264 10.2133603,13.6778976 C9.76578947,13.532345 9.49190283,13.4231806 9.38502024,13.3576819 C9.14453441,13.219407 9.03097166,13.0374663 9.03097166,12.8045822 C9.03097166,12.5425876 9.13117409,12.3533693 9.33825911,12.2369272 C9.50526316,12.1350404 9.74574899,12.084097 10.0597166,12.084097 C10.4204453,12.084097 10.6876518,12.1568733 10.8746964,12.3097035 C11.0617409,12.4552561 11.1819838,12.7026954 11.2487854,13.0374663 L11.9702429,13.0374663 C11.9234818,12.4698113 11.7364372,12.0549865 11.4024291,11.7857143 C11.0884615,11.5237197 10.654251,11.4 10.0997976,11.4 C9.59210526,11.4 9.17125506,11.5237197 8.83724696,11.771159 C8.48319838,12.0331536 8.30951417,12.3897574 8.30951417,12.848248 C8.30951417,13.2994609 8.48987854,13.6487871 8.85728745,13.8889488 C9.00425101,13.9762803 9.36497976,14.1145553 9.95283401,14.3183288 C10.4805668,14.4929919 10.7945344,14.609434 10.901417,14.667655 C11.2020243,14.8350404 11.355668,15.0606469 11.355668,15.351752 C11.355668,15.5846361 11.2487854,15.7665768 11.0350202,15.8975741 C10.8212551,16.0285714 10.5340081,16.1013477 10.1732794,16.1013477 C9.77246964,16.1013477 9.47854251,16.0212938 9.28481781,15.861186 C9.07105263,15.6865229 8.93744939,15.3881402 8.8840081,14.980593 L8.16255061,14.980593 C8.20263158,15.6355795 8.41639676,16.115903 8.81052632,16.4215633 C9.13785425,16.6690027 9.59210526,16.8 10.1732794,16.8 Z M14.4753036,16.6981132 C15.2435223,16.6981132 15.8246964,16.4652291 16.2255061,15.9994609 C16.6062753,15.548248 16.8,14.9150943 16.8,14.1 C16.8,13.277628 16.6129555,12.6444744 16.2388664,12.2078167 C15.8380567,11.7347709 15.2568826,11.5018868 14.488664,11.5018868 L12.7518219,11.5018868 L12.7518219,16.6981132 L14.4753036,16.6981132 Z M14.3417004,16.0212938 L13.4799595,16.0212938 L13.4799595,12.1787062 L14.3550607,12.1787062 C14.9562753,12.1787062 15.397166,12.3315364 15.6777328,12.6444744 C15.9449393,12.9501348 16.0852227,13.4304582 16.0852227,14.1 C16.0852227,14.7549865 15.9449393,15.23531 15.6710526,15.548248 C15.3904858,15.861186 14.942915,16.0212938 14.3417004,16.0212938 Z\" id=\"XSD\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const zip = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/ZIP</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/ZIP\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"rar\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M10.9766879,14.4620385 L10.9766879,15.9938365 L9.42325733,15.9938365 L9.42325733,14.4620385 L10.9766879,14.4620385 Z M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z M11.7533757,16.759749 L8.64656949,16.759749 L8.64656949,12.164355 L11.7533757,12.164355 L11.7533757,16.759749 Z M11.7534031,5.27127736 L10.2,5.27127736 L10.2,6.80307537 L11.7534031,6.80307537 L11.7534031,8.33487339 L10.2,8.33487339 L10.2,9.8666714 L11.7534031,9.8666714 L11.7534031,11.3984694 L10.1999726,11.3984694 L10.1999726,9.8666714 L8.64656949,9.8666714 L8.64656949,8.33487339 L10.1999726,8.33487339 L10.1999726,6.80307537 L8.64656949,6.80307537 L8.64656949,5.27127736 L10.1999726,5.27127736 L10.1999726,3.73947935 L8.64656949,3.73947935 L8.64656949,2.20768134 L10.2,2.20768134 L10.2,3.73947935 L11.7534031,3.73947935 L11.7534031,5.27127736 Z\" id=\"形状\" fill=\"#667580\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n","import * as fileIcons from '../constants/file-icon';\n\nexport function parseSVGToCanvasObjects(svgString: string) {\n const parser = new DOMParser();\n const svgDoc = parser.parseFromString(svgString, 'image/svg+xml');\n const elements = svgDoc.querySelectorAll('path, polyline, polygon');\n const canvasObjects: {\n d: string | null;\n fill: string;\n stroke: string;\n strokeWidth: string | number;\n opacity: number;\n fillRule: CanvasFillRule;\n }[] = [];\n\n elements.forEach((element) => {\n let d;\n if (element.tagName === 'path') {\n d = element.getAttribute('d');\n } else if (element.tagName === 'polyline' || element.tagName === 'polygon') {\n const points = element.getAttribute('points') || '';\n const pointArray = points.split(/\\s+|,/).filter(Boolean);\n d = 'M' + pointArray[0] + ' ' + pointArray[1];\n for (let i = 2; i < pointArray.length; i += 2) {\n d += ' L' + pointArray[i] + ' ' + pointArray[i + 1];\n }\n if (element.tagName === 'polygon') {\n d += ' Z';\n }\n }\n\n const fill = element.getAttribute('fill') || 'black';\n const stroke = 'none';\n const strokeWidth = element.getAttribute('stroke-width') || 0;\n const opacity = parseFloat(element?.getAttribute('opacity') || '1');\n const fillRule = element.getAttribute('fill-rule') || 'nonzero';\n if (d) {\n canvasObjects.push({\n d,\n fill,\n stroke,\n strokeWidth,\n opacity,\n fillRule: fillRule as CanvasFillRule\n });\n }\n });\n\n return canvasObjects;\n}\nexport const FileIcons = (() => {\n const result: {\n [T in string]: {\n d: string | null;\n fill: string;\n stroke: string;\n strokeWidth: string | number;\n opacity: number;\n fillRule: CanvasFillRule;\n }[];\n } = {};\n Object.entries(fileIcons).forEach((fileIcon) => {\n result[fileIcon[0]] = parseSVGToCanvasObjects(fileIcon[1]);\n });\n return result;\n})();\n","import * as fileIcons from '../constants/file-icon';\nimport { FileIcons } from './icon';\n\nexport function getFileThumbnailName(ext: string) {\n let result = 'defaultFile';\n switch (ext) {\n case 'doc':\n case 'docx':\n result = 'doc';\n break;\n case 'ppt':\n case 'pptx':\n result = 'ppt';\n break;\n case 'xls':\n case 'xlsx':\n result = 'xls';\n break;\n case 'css':\n case 'scss':\n case 'sass':\n case 'less':\n result = 'css';\n break;\n case 'png':\n case 'jpeg':\n case 'jpg':\n case 'gif':\n case 'bmp':\n case 'svg':\n result = 'img';\n break;\n case 'mp4':\n case 'mkv':\n case 'webm':\n case 'mov':\n case 'flv':\n case '3gp':\n case 'mpv':\n case 'avi':\n case 'mpeg':\n case 'wmv':\n result = 'video';\n break;\n case 'mp3':\n case 'wma':\n case 'wav':\n case 'ape':\n case 'flac':\n case 'ogg':\n case 'm4r':\n case 'm4a':\n result = 'mp3';\n break;\n case 'pdf':\n case 'txt':\n case 'apk':\n case 'bak':\n case 'cs':\n case 'csv':\n case 'exe':\n case 'fla':\n case 'html':\n case 'ipa':\n case 'java':\n case 'js':\n case 'php':\n case 'rar':\n case 'swf':\n case 'ttf':\n case 'vss':\n case 'xsd':\n case 'zip':\n case 'youdaonote':\n case 'evernote':\n case 'yinxiang':\n case 'quip':\n case 'onenote':\n case 'onedrive':\n case 'box':\n case 'shimo':\n case 'processon':\n result = ext;\n break;\n default:\n result = 'defaultFile';\n break;\n }\n return result;\n}\n\nexport function getFileThumbnailSvgString(ext: string) {\n let result = 'defaultFile';\n switch (ext) {\n case 'doc':\n case 'docx':\n result = fileIcons.doc;\n break;\n case 'ppt':\n case 'pptx':\n result = fileIcons.ppt;\n break;\n case 'xls':\n case 'xlsx':\n result = fileIcons.xls;\n break;\n case 'css':\n case 'scss':\n case 'sass':\n case 'less':\n result = fileIcons.css;\n break;\n case 'png':\n case 'jpeg':\n case 'jpg':\n case 'gif':\n case 'bmp':\n case 'svg':\n result = fileIcons.img;\n break;\n case 'mp4':\n case 'mkv':\n case 'webm':\n case 'mov':\n case 'flv':\n case '3gp':\n case 'mpv':\n case 'avi':\n case 'mpeg':\n case 'wmv':\n result = fileIcons.video;\n break;\n case 'mp3':\n case 'wma':\n case 'wav':\n case 'ape':\n case 'flac':\n case 'ogg':\n case 'm4r':\n case 'm4a':\n result = fileIcons.mp3;\n break;\n case 'pdf':\n result = fileIcons.pdf;\n break;\n case 'txt':\n result = fileIcons.txt;\n break;\n case 'apk':\n result = fileIcons.apk;\n break;\n case 'bak':\n result = fileIcons.apk;\n break;\n case 'cs':\n result = fileIcons.cs;\n break;\n case 'csv':\n result = fileIcons.csv;\n break;\n case 'exe':\n result = fileIcons.exe;\n break;\n case 'fla':\n result = fileIcons.fla;\n break;\n case 'html':\n result = fileIcons.html;\n break;\n case 'ipa':\n result = fileIcons.ipa;\n break;\n case 'java':\n result = fileIcons.java;\n break;\n case 'js':\n result = fileIcons.js;\n break;\n case 'php':\n result = fileIcons.php;\n break;\n case 'rar':\n result = fileIcons.rar;\n break;\n case 'swf':\n result = fileIcons.swf;\n break;\n case 'ttf':\n result = fileIcons.ttf;\n break;\n case 'vss':\n result = fileIcons.vss;\n break;\n case 'xsd':\n result = fileIcons.xsd;\n break;\n case 'zip':\n result = fileIcons.zip;\n break;\n default:\n result = fileIcons.defaultFile;\n break;\n }\n return result;\n}\n\nexport function getFileCanvasPaths(ext: string) {\n const fileThumbnailName = getFileThumbnailName(ext);\n return FileIcons[fileThumbnailName];\n}\n","import _, { isNil } 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_FIELD_ITEM_MARGIN_RIGHT,\n AI_TABLE_FILE_ICON_ITEM_HEIGHT,\n AI_TABLE_FILE_ICON_SIZE,\n AI_TABLE_MEMBER_AVATAR_SIZE,\n AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_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, AITableRender, AITableSelectField } from '../../types';\nimport { getAvatarBgColor, getAvatarShortName, getTextWidth } from '../../utils';\nimport { Drawer } from './drawer';\nimport { helpers } from 'ngx-tethys/util';\nimport { getFileThumbnailSvgString } from '../../utils/file';\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 case AITableFieldType.attachment:\n return this.renderCellAttachment(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 getValidSelectedValue(field: AITableField, transformValue: string[]) {\n const fieldOptionsMap = helpers.keyBy((field as AITableSelectField).settings.options || [], '_id');\n return (transformValue || []).filter((optionId: string) => !!fieldOptionsMap[optionId]);\n }\n\n private renderCellMultiSelect(render: AITableRender, ctx?: any) {\n const { x, y, field, columnWidth } = render;\n let transformValue = this.getValidSelectedValue(field, render.transformValue);\n if (!transformValue.length) {\n return;\n }\n\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, field, columnWidth, isActive } = render;\n const transformValue = this.getValidSelectedValue(field, render.transformValue);\n if (!transformValue.length) {\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;\n const size = AI_TABLE_CELL_EMOJI_SIZE;\n const isEmpty = isNil(cellValue);\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 || isEmpty)) {\n this.path({\n x: x + iconX,\n y: y + iconY,\n size: 22,\n data: StarFill,\n fill: isEmpty ? this.colors.gray100 : 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 let cellValue = transformValue;\n if (isNil(cellValue)) {\n cellValue = 0;\n }\n if (!_.isNumber(cellValue)) {\n return;\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 = (cellValue / 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: `${cellValue}%`,\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 isMultiple = 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_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 itemWidth = AITableAvatarSize.size24 + (isMultiple ? 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 (currentX >= columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n break;\n }\n // 如果不是非活动状态的最后一行,则换行渲染溢出内容\n if (currentX > columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n }\n if (currentX + itemWidth > columnWidth - AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n currentY += itemHeight;\n }\n if (currentY >= maxHeight) {\n isOverflow = true;\n }\n }\n\n if (ctx) {\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 // 在非多选模式下显示名称\n if (!isMultiple) {\n const textX = x + currentX + AITableAvatarSize.size24 + AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT;\n this.text({\n x: textX,\n y: y + AI_TABLE_ROW_BLANK_HEIGHT / 2,\n text: this.textEllipsis({\n text: display_name || '',\n maxWidth: maxTextWidth,\n fontSize: AI_TABLE_COMMON_FONT_SIZE\n }).text,\n fillStyle: this.colors.gray800,\n fontSize: AI_TABLE_COMMON_FONT_SIZE,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE\n });\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 private renderCellAttachment(render: AITableRender, ctx?: CanvasRenderingContext2D | undefined) {\n const { references, x, y, field, transformValue: _cellValue, rowHeight, columnWidth, isActive } = render;\n const cellValue = _cellValue;\n if (!cellValue?.length || !references) {\n return;\n }\n\n const fileIconSize = AI_TABLE_FILE_ICON_SIZE;\n const itemHeight = AI_TABLE_FILE_ICON_ITEM_HEIGHT;\n const isOperating = isActive;\n\n let currentX = AI_TABLE_CELL_PADDING;\n let currentY = (AI_TABLE_ROW_BLANK_HEIGHT - fileIconSize) / 2;\n const itemOtherWidth = fileIconSize + AI_TABLE_FIELD_ITEM_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 attachmentInfo = references.attachments[cellValue[index]];\n if (!attachmentInfo) continue;\n const { title, addition } = attachmentInfo;\n const itemWidth = AI_TABLE_FILE_ICON_SIZE + AI_TABLE_FIELD_ITEM_MARGIN_RIGHT;\n currentX = AI_TABLE_CELL_PADDING + index * itemWidth;\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 if (columnWidth != null) {\n // 在非活动状态下,当超出列宽时,不会渲染后续内容\n if (currentX >= columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n break;\n }\n // 如果不是非活动状态的最后一行,则换行渲染溢出内容\n if (currentX > columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n }\n if (currentX + itemWidth > columnWidth - AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n currentY += itemHeight;\n }\n if (currentY >= maxHeight) {\n isOverflow = true;\n }\n }\n const svgString = getFileThumbnailSvgString(addition?.ext);\n const img = new Image();\n img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgString)}`;\n if (ctx) {\n this.image({\n name: img.src,\n x: x + currentX,\n y: y + currentY,\n url: img.src,\n width: AI_TABLE_FILE_ICON_SIZE,\n height: AI_TABLE_FILE_ICON_SIZE\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 protected override renderAddFieldBlank({ isHoverRow, isCheckedRow }: Pick<AITableCell, 'isHoverRow' | 'isCheckedRow'>): void {\n super.renderAddFieldBlank({ isHoverRow, isCheckedRow });\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 // 首列\n private renderFirstCell({ row, style, isHoverRow, isCheckedRow }: AITableCell) {\n if (!this.isFirst) return;\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 if (this.isLast) {\n this.renderAddFieldBlank({ isHoverRow, isCheckedRow });\n }\n }\n\n // 尾列\n private renderLastCell({ style, isHoverRow, isCheckedRow }: Pick<AITableCell, 'style' | 'isHoverRow' | 'isCheckedRow'>) {\n if (!this.isLast || this.isFirst) return;\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 this.renderAddFieldBlank({ isHoverRow, isCheckedRow });\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, isCheckedRow, 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 { AIRecordFieldIdPath, AITable, AITableQueries, RendererContext } from '../../core';\nimport { AITableCellsDrawerConfig, AITableRender, AITableRowType } from '../../types';\nimport { getCellHorizontalPosition, getHoverCell, 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 const hoverCell = getHoverCell(aiTable);\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 const isCheckedRow = aiTable.selection().selectedRecords.has(row._id);\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 isCheckedRow\n });\n break;\n }\n case AITableRowType.record: {\n const fieldId = field._id;\n const cell: AIRecordFieldIdPath = [recordId, fieldId];\n let background = getCellBackground(cell, isHover, targetName, aiTable);\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: isHoverRecord(isHover, targetName),\n isCheckedRow: isSelectedRecord(recordId, aiTable)\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, fieldId]);\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: isSelectedField(fieldId, aiTable),\n style,\n colors\n };\n // hover 组件渲染时,底层的 cell 渲染为空\n if (hoverCell && hoverCell.recordId === recordId && hoverCell.fieldId === fieldId) {\n render.cellValue = '';\n render.transformValue = '';\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\nconst getCellBackground = (cell: AIRecordFieldIdPath, isHover: boolean, targetName: string, aiTable: AITable): string => {\n const colors = AITable.getColors();\n const [recordId, fieldId] = cell;\n let background = colors.white;\n\n const _isHoverRecord = isHoverRecord(isHover, targetName);\n const _isSelectedRecord = isSelectedRecord(recordId, aiTable);\n const _isSelectedField = isSelectedField(fieldId, aiTable);\n const _isSiblingCell = isSiblingCell(cell, aiTable);\n const _isActiveCell = isActiveCell(cell, aiTable);\n const _isSelectedCell = isSelectedCell(cell, aiTable);\n const _isKeywordsMatchedCell = isKeywordsMatchedCell(cell, aiTable);\n\n if (_isKeywordsMatchedCell) {\n background = colors.itemMatchBgColor;\n } else if (_isSelectedRecord || _isSelectedField || _isSiblingCell || (_isSelectedCell && !_isActiveCell)) {\n background = colors.itemActiveBgColor;\n } else if (_isHoverRecord && !_isActiveCell) {\n background = colors.gray80;\n }\n\n return background;\n};\n\nconst isActiveCell = (cell: AIRecordFieldIdPath, aiTable: AITable): boolean => {\n const [recordId, fieldId] = cell;\n const [activeRecordId, activeFieldId] = AITable.getActiveCell(aiTable) || [];\n return recordId === activeRecordId && fieldId === activeFieldId;\n};\n\nconst isSiblingCell = (cell: AIRecordFieldIdPath, aiTable: AITable): boolean => {\n const [recordId, fieldId] = cell;\n const [activeRecordId, activeFieldId] = AITable.getActiveCell(aiTable) || [];\n return AITable.getActiveRecordIds(aiTable).length === 1 && recordId === activeRecordId && fieldId !== activeFieldId;\n};\n\nconst isKeywordsMatchedCell = (cell: AIRecordFieldIdPath, aiTable: AITable): boolean => {\n const [recordId, fieldId] = cell;\n return aiTable.keywordsMatchedCells().has(`${recordId}:${fieldId}`);\n};\n\nconst isSelectedCell = (cell: AIRecordFieldIdPath, aiTable: AITable): boolean => {\n const [recordId, fieldId] = cell;\n return aiTable.selection().selectedCells.has(`${recordId}:${fieldId}`);\n};\n\nexport const isSelectedField = (fieldId: string, aiTable: AITable): boolean => {\n return aiTable.selection().selectedFields.has(fieldId);\n};\n\nconst isSelectedRecord = (recordId: string, aiTable: AITable): boolean => {\n return aiTable.selection().selectedRecords.has(recordId);\n};\n\nconst isHoverRecord = (isHover: boolean, targetName: string): boolean => {\n return isHover && targetName !== AI_TABLE_FIELD_HEAD;\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 AttachmentPath,\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 case AITableFieldType.attachment:\n data = AttachmentPath;\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 { 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.gridData().fields;\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 const fieldMenus = config.aiTable.context?.aiFieldConfig()?.fieldMenus || [];\n let noMoreIcon = false;\n if (fieldMenus.length === 0) {\n noMoreIcon = true;\n }\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: noMoreIcon ? false : 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, AITableSelectAllState } 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 // 目前只需要展示全部选中和空的状态\n return this.config().aiTable.selection().selectAllState === AITableSelectAllState.all;\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 && !!context.linearRows().length && pointRowIndex < context.linearRows().length) {\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 (\n Array.isArray(activeCell) &&\n !!activeCell.length &&\n aiTable.context!.visibleRowsIndexMap().has(activeCell[0]) &&\n aiTable.context!.visibleColumnsIndexMap().has(activeCell[1])\n ) {\n const fieldId = activeCell[1];\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, effect, input, SimpleChanges } from '@angular/core';\nimport { KoContainer, KoShape } from '../../angular-konva';\nimport { AITableCellsConfig, AITableHoverCellConfig } from '../../types';\nimport { AITableField, AITableFieldType, AITableQueries } from '../../core';\nimport { AITableCellLink } from './cells/link.component';\nimport { CommonModule } from '@angular/common';\nimport {\n AI_TABLE_CELL_BORDER,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_OFFSET,\n Colors,\n DEFAULT_TEXT_ALIGN_LEFT,\n DEFAULT_TEXT_ALIGN_RIGHT\n} from '../../constants';\nimport { getCellHorizontalPosition, getHoverCell, transformCellValue } from '../../utils';\nimport { isSelectedField } from '../creations/create-cells';\nimport _ from 'lodash';\n\nimport * as cellComponents from './cells';\nimport { HoverCellComponent } from '../interfaces';\nimport { Constructor } from 'ngx-tethys/core';\n\n@Component({\n selector: 'ai-table-hover-cell',\n template: `\n @if (hoverCell()) {\n <ko-group [config]=\"groupConfig()\">\n <ng-container *ngComponentOutlet=\"hoverCell()!.renderComponentDefinition; inputs: { config: hoverCellConfig() }\">\n </ng-container>\n </ko-group>\n }\n `,\n standalone: true,\n imports: [KoShape, KoContainer, CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableHoverCells {\n config = input.required<AITableCellsConfig>();\n\n componentMap: Partial<Record<AITableFieldType, Constructor<HoverCellComponent>>> = {};\n\n groupConfig = computed(() => {\n return {\n x: this.hoverCellConfig()?.x,\n y: this.hoverCellConfig()?.y\n };\n });\n\n hoverCellConfig = computed(() => {\n const { aiTable, coordinate } = this.config();\n const pointPosition = aiTable.context!.pointPosition();\n const hoverCell = this.hoverCell();\n if (!hoverCell) {\n return;\n }\n const { field, recordId, fieldId, renderComponentDefinition } = hoverCell;\n const cellValue = AITableQueries.getFieldValue(aiTable, [recordId, field._id]);\n const transformValue = transformCellValue(aiTable, field, cellValue) || {};\n if (Object.keys(transformValue).length === 0) {\n return;\n }\n\n const { rowHeight, columnCount, rowCount } = coordinate;\n const columnIndex = pointPosition.columnIndex;\n const rowIndex = pointPosition.rowIndex;\n\n const x = coordinate.getColumnOffset(columnIndex) + AI_TABLE_OFFSET;\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n const y = coordinate.getRowOffset(rowIndex) + AI_TABLE_OFFSET;\n const { width } = getCellHorizontalPosition({\n columnWidth,\n columnIndex,\n columnCount\n });\n\n const style = {\n textAlign: DEFAULT_TEXT_ALIGN_LEFT\n } as any;\n const textAlign = style.textAlign;\n const renderX =\n textAlign === DEFAULT_TEXT_ALIGN_RIGHT\n ? columnWidth - AI_TABLE_CELL_PADDING + AI_TABLE_OFFSET\n : AI_TABLE_CELL_PADDING + AI_TABLE_OFFSET;\n const renderY = 0 - AI_TABLE_OFFSET * 2;\n\n const result: AITableHoverCellConfig = {\n field,\n aiTable,\n coordinate,\n x,\n y,\n render: {\n aiTable,\n recordId,\n field,\n isActive: isSelectedField(field._id, aiTable),\n x: renderX,\n y: renderY,\n columnWidth: width,\n rowHeight,\n cellValue,\n transformValue,\n style\n }\n };\n\n return result;\n });\n\n hoverCell = computed(() => getHoverCell(this.config().aiTable));\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_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 AITableFrozenCells,\n AITableFrozenColumnHeads,\n AITableFrozenPlaceholderCells,\n AITableHoverRowHeads,\n AITableOtherRows,\n AITablePlaceholderCells\n} from './components';\nimport { createActiveCellBorder } from './creations/create-active-cell-border';\nimport { AITableHoverCells } from './components/hover-cell.component';\nimport { AITableCellLink } from './components/cells/link.component';\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 AITableHoverCells,\n AITablePlaceholderCells,\n AITableAddField,\n AITableHoverRowHeads,\n AITableOtherRows,\n AITableCellLink\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 koMouseup = output<KoEventObject<MouseEvent>>();\n\n koContextmenu = 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 stageMouseup(e: KoEventObject<MouseEvent>) {\n this.koMouseup.emit(e as KoEventObject<MouseEvent>);\n }\n\n stageContextmenu(e: KoEventObject<MouseEvent>) {\n this.koContextmenu.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 (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($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 <ai-table-hover-cell [config]=\"cellsConfig()\"></ai-table-hover-cell>\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 <ai-table-hover-cell [config]=\"cellsConfig()\"></ai-table-hover-cell>\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 { ChangeDetectionStrategy, Component, effect, ElementRef, inject, OnDestroy, OnInit, output, Renderer2 } from '@angular/core';\nimport { AITableDragState, DragEndData, DragType } from '../../core';\nimport { AITableGridSelectionService } from '../../services/selection.service';\n\n@Component({\n selector: 'ai-table-drag',\n templateUrl: './drag.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'drag-container'\n }\n})\nexport class AITableDragComponent implements OnInit, OnDestroy {\n dragEnd = output<DragEndData>();\n\n private aiTableGridSelectionService = inject(AITableGridSelectionService);\n\n private render2 = inject(Renderer2);\n\n elementRef: ElementRef<HTMLElement> = inject(ElementRef<HTMLElement>);\n\n private rect!: HTMLElement;\n\n private line!: HTMLElement;\n\n private draggedData: DragEndData | null = null;\n\n private mouseStartPosition: { x: number; y: number } | null = null;\n\n private aiTableDrag: AITableDragState | null = null;\n\n private timer!: number | null;\n\n private mousedownListener?: () => void;\n private mousemoveListener?: () => void;\n private mouseupListener?: () => void;\n\n constructor() {\n effect(() => {\n const drag = this.aiTableGridSelectionService.aiTable.dragState?.();\n if (drag && drag.sourceIds.size > 0) {\n if (!this.rect || !this.line) {\n return;\n }\n this.aiTableDrag = drag;\n } else {\n this.aiTableDrag = null;\n }\n });\n }\n\n ngOnInit() {\n this.rect = this.elementRef.nativeElement.querySelector('.rect')!;\n this.line = this.elementRef.nativeElement.querySelector('.line')!;\n this.mousedownListener = this.render2.listen('window', 'mousedown', (e) => {\n this.mouseStartPosition = { x: e.x, y: e.y };\n });\n this.mousemoveListener = this.render2.listen('window', 'mousemove', (e) => {\n if (this.timer) {\n cancelAnimationFrame(this.timer);\n }\n this.timer = requestAnimationFrame(() => {\n if (this.mouseStartPosition && this.aiTableDrag) {\n this.handleDrag(e, this.aiTableDrag);\n }\n });\n });\n this.mouseupListener = this.render2.listen('window', 'mouseup', () => {\n this.mouseStartPosition = null;\n this.aiTableDrag = null;\n this.handleDragEnd();\n });\n }\n\n private handleDrag(e: MouseEvent, drag: AITableDragState) {\n if (drag.type !== DragType.none) {\n this.render2.setStyle(this.elementRef.nativeElement, 'display', 'block');\n } else {\n return;\n }\n const moveX = e.x - this.mouseStartPosition!.x;\n const aiTable = this.aiTableGridSelectionService.aiTable;\n const scroll = drag.scroll || { x: 0, y: 0 };\n const coordinate = drag.coordinate!;\n switch (drag.type) {\n case DragType.field:\n const fields = aiTable.fields();\n let width = 0;\n fields.forEach((field, index) => {\n if (drag.sourceIds.has(field._id)) {\n width += coordinate.columnIndicesSizeMap[index] || 0;\n }\n });\n const visibleColumnIndexMap = aiTable.context!.visibleColumnsIndexMap();\n const sourceColumnIndex = visibleColumnIndexMap.get(drag.sourceIds.values().next().value!) || 0;\n const sourceColumnStartX = coordinate.getColumnOffset(sourceColumnIndex);\n const sourceColumnWidth = coordinate.getColumnWidth(sourceColumnIndex);\n // TODO: 目前默认第一列为冻结列,后期支持设置冻结列需要处理\n const isSourceColumnFrozen = sourceColumnIndex === 0;\n const pointerX = moveX + sourceColumnStartX;\n // 拖拽中心点\n const dragCenter = sourceColumnWidth / 2;\n let targetColumnIndex = coordinate.getColumnStartIndex(pointerX + (isSourceColumnFrozen ? scroll.x : 0) + dragCenter);\n let targetColumnStartX = coordinate.getColumnOffset(targetColumnIndex);\n this.render2.setStyle(this.rect, 'cursor', 'move');\n this.render2.setStyle(this.rect, 'width', `${width}px`);\n this.render2.setStyle(this.rect, 'height', `100%`);\n this.render2.setStyle(this.rect, 'top', 0);\n this.render2.setStyle(this.rect, 'left', `${pointerX - (isSourceColumnFrozen ? 0 : scroll.x)}px`);\n\n const lastColumnOffset = coordinate.getColumnOffset(coordinate.columnCount - 1);\n const lastColumnWidth = coordinate.getColumnWidth(coordinate.columnCount - 1);\n\n let isLastColumn = false;\n // 处理最后一列\n if (pointerX + dragCenter > lastColumnOffset + lastColumnWidth) {\n targetColumnIndex = coordinate.columnCount;\n targetColumnStartX = lastColumnOffset + lastColumnWidth;\n isLastColumn = true;\n }\n if (\n (targetColumnIndex >= 0 && (targetColumnIndex - sourceColumnIndex > 1 || targetColumnIndex - sourceColumnIndex < 0)) ||\n isLastColumn\n ) {\n this.render2.setStyle(this.line, 'width', `2px`);\n this.render2.setStyle(this.line, 'height', `100%`);\n this.render2.setStyle(this.line, 'top', 0);\n this.render2.setStyle(this.line, 'left', `${targetColumnStartX - scroll.x}px`);\n const fieldsIndex: number[] = [];\n drag.sourceIds.forEach((id) => {\n const index = visibleColumnIndexMap.get(id) || 0;\n fieldsIndex.push(index);\n });\n // 向右移动目标在目标列的前一列\n if (targetColumnIndex > sourceColumnIndex) {\n targetColumnIndex -= 1;\n }\n this.draggedData = { type: DragType.field, targetIndex: targetColumnIndex, fieldIds: drag.sourceIds, fieldsIndex };\n } else {\n this.render2.setStyle(this.line, 'width', 0);\n this.draggedData = null;\n }\n break;\n case DragType.record:\n break;\n case DragType.columnWidth:\n break;\n }\n }\n\n private handleDragEnd() {\n this.render2.setStyle(this.elementRef.nativeElement, 'display', 'none');\n if (this.draggedData) {\n this.dragEnd.emit({ ...this.draggedData });\n this.draggedData = null;\n }\n }\n\n ngOnDestroy() {\n if (this.mousedownListener) this.mousedownListener();\n if (this.mousemoveListener) this.mousemoveListener();\n if (this.mouseupListener) this.mouseupListener();\n\n if (this.timer) {\n cancelAnimationFrame(this.timer);\n this.timer = null;\n }\n }\n}\n","<div class=\"rect\"></div>\n<div class=\"line\"></div>","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n OnDestroy,\n OnInit,\n Signal,\n signal,\n untracked,\n viewChild,\n ViewContainerRef\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_PREVENT_CLEAR_SELECTION_CLASS,\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 {\n AddFieldOptions,\n AddRecordOptions,\n AITableField,\n Coordinate,\n RendererContext,\n UpdateFieldValueOptions,\n DragEndData,\n DragType,\n AIRecordFieldIdPath,\n AITable\n} 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, AITableSelectAllState, ScrollActionOptions } from './types';\nimport {\n buildGridLinearRows,\n getColumnIndicesSizeMap,\n getDetailByTargetName,\n handleMouseStyle,\n isCellMatchKeywords,\n isWindows\n} from './utils';\nimport { getMousePosition } from './utils/position';\nimport { AITableDragComponent } from './components/drag/drag.component';\nimport { buildClipboardData, writeToClipboard, writeToAITable, AITablePasteActions } from './utils/clipboard';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\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, AITableDragComponent],\n providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService]\n})\nexport class AITableGrid extends AITableGridBase implements OnInit, OnDestroy {\n private viewContainerRef = inject(ViewContainerRef);\n\n private isDragSelecting = false;\n\n private dragSelectionStart: AIRecordFieldIdPath | null = null;\n\n private notifyService = inject(ThyNotifyService);\n\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 frozenColumnCount = signal(1);\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 visibleColumnsIndexMap = 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 rowIndicesSizeMap: {},\n columnIndicesSizeMap: getColumnIndicesSizeMap(fields),\n frozenColumnCount: this.frozenColumnCount()\n });\n return {\n aiTable: this.aiTable,\n gridData: this.gridData(),\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 this.bindClipboardShortcuts();\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 effect(\n () => {\n this.setKeywordsMatchedCells();\n },\n { allowSignalWrites: true }\n );\n\n effect(\n () => {\n const recordIdSet = new Set<string>(this.aiTable.records().map((item) => item._id));\n untracked(() => {\n const selectedRecords = this.aiTable.selection().selectedRecords;\n for (const selectedRecordId of selectedRecords.values()) {\n if (!recordIdSet.has(selectedRecordId)) {\n selectedRecords.delete(selectedRecordId);\n }\n }\n this.aiTable.selection.update((item) => {\n return {\n ...item,\n selectedRecords,\n selectAllState: this.aiTableGridSelectionService.selectAllState()\n };\n });\n });\n },\n { allowSignalWrites: true }\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 visibleColumnsIndexMap: this.visibleColumnsIndexMap,\n visibleRowsIndexMap: this.visibleRowsIndexMap,\n pointPosition: signal(DEFAULT_POINT_POSITION),\n scrollState: signal(DEFAULT_SCROLL_STATE),\n frozenColumnCount: this.frozenColumnCount,\n references: this.aiReferences,\n aiFieldConfig: this.aiFieldConfig,\n scrollAction: this.scrollAction\n });\n }\n\n private setKeywordsMatchedCells() {\n const keywords = this.aiKeywords();\n let matchedCells = new Set<string>();\n\n if (keywords) {\n const references = this.aiReferences();\n this.aiTable.records().forEach((record) => {\n this.aiTable.fields().forEach((field) => {\n if (isCellMatchKeywords(this.aiTable, field, record._id, keywords, references)) {\n matchedCells.add(`${record._id}:${field._id}`);\n }\n });\n });\n }\n\n this.aiTable.keywordsMatchedCells.set(matchedCells);\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 if (this.isDragSelecting) {\n const { fieldId, recordId } = getDetailByTargetName(curMousePosition.realTargetName);\n if (fieldId && recordId) {\n const startCell = this.dragSelectionStart;\n const endCell: AIRecordFieldIdPath = [recordId, fieldId];\n if (startCell && !!startCell.length) {\n this.aiTableGridSelectionService.selectCells(startCell, endCell);\n }\n }\n }\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 if (\n mouseEvent.button === AITableMouseDownType.Right &&\n recordId &&\n fieldId &&\n (this.aiTable.selection().selectedRecords.has(recordId) || this.aiTable.selection().selectedCells.has(`${recordId}:${fieldId}`))\n ) {\n return;\n }\n\n switch (targetName) {\n case AI_TABLE_FIELD_HEAD:\n mouseEvent.preventDefault();\n if (!fieldId) return;\n this.aiTableGridSelectionService.selectField(fieldId);\n this.handleFieldDragStart();\n return;\n case AI_TABLE_CELL:\n if (!recordId || !fieldId) return;\n const dragSelectionStart: AIRecordFieldIdPath = [recordId, fieldId];\n this.updateDragSelectionState(true, dragSelectionStart);\n this.aiTableGridSelectionService.selectCells(dragSelectionStart);\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 stageMouseup(e: KoEventObject<MouseEvent>) {\n this.updateDragSelectionState(false, null);\n }\n\n stageContextmenu(e: KoEventObject<MouseEvent>) {\n const mouseEvent = e.event.evt;\n mouseEvent.preventDefault();\n\n if (this.aiReadonly()) {\n return;\n }\n\n const targetName = e.event.target.name();\n const { fieldId, recordId } = getDetailByTargetName(targetName);\n if (!recordId || !fieldId) {\n return;\n }\n\n const position = {\n x: mouseEvent.x,\n y: mouseEvent.y\n };\n const menuItems = this.aiContextMenuItems();\n if (!menuItems.length || menuItems.every((item) => !!(item.hidden && item.hidden(this.aiTable, targetName, position)))) {\n return;\n }\n\n this.aiTableGridEventService.openContextMenu(this.aiTable, {\n origin: this.containerElement(),\n menuItems,\n position,\n targetName,\n viewContainerRef: this.viewContainerRef\n });\n }\n\n stageClick(e: KoEventObject<MouseEvent>) {\n const mouseEvent = e.event.evt;\n mouseEvent.preventDefault();\n this.aiTableGridEventService.closeCellEditor();\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().selectAllState === AITableSelectAllState.all;\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 viewContainerRef: this.viewContainerRef,\n container: this.containerElement(),\n coordinate: this.coordinate(),\n fieldId: fieldId!,\n recordId: recordId!,\n references: this.aiReferences(),\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(\n (e) =>\n e.target instanceof Element &&\n !this.containerElement().contains(e.target) &&\n !e.target.closest(AI_TABLE_PREVENT_CLEAR_SELECTION_CLASS)\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.updateDragSelectionState(false, null);\n this.aiTableGridSelectionService.clearSelection();\n });\n }\n\n private updateDragSelectionState(isDragSelecting: boolean, dragSelectionStart: AIRecordFieldIdPath | null) {\n this.isDragSelecting = isDragSelecting;\n this.dragSelectionStart = dragSelectionStart;\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 viewContainerRef: this.viewContainerRef,\n container: this.containerElement(),\n coordinate: this.coordinate(),\n fieldId: fieldId!,\n recordId: recordId!,\n references: this.aiReferences(),\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 private bindClipboardShortcuts() {\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n filter((event) => (event.ctrlKey || event.metaKey) && (event.key === 'c' || event.key === 'v')),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(async (event) => {\n if (event.key === 'c') {\n const clipboardData = buildClipboardData(this.aiTable);\n if (clipboardData) {\n writeToClipboard(clipboardData).then(() => {\n const copiedCellsCount = this.aiTable.selection().selectedCells.size;\n this.notifyService.success(`已复制 ${copiedCellsCount} 个单元格`, undefined, {\n placement: 'bottomLeft'\n });\n });\n }\n } else if (event.key === 'v') {\n event.preventDefault();\n\n const actions: AITablePasteActions = {\n updateFieldValue: (data: UpdateFieldValueOptions) => {\n this.aiUpdateFieldValue.emit(data);\n },\n setField: (field: AITableField) => {\n this.aiSetField.emit(field);\n },\n addField: (data: AddFieldOptions) => {\n this.aiAddField.emit(data);\n },\n addRecord: (data: AddRecordOptions) => {\n this.addRecord();\n }\n };\n\n writeToAITable(this.aiTable, actions).then((isPasteSuccess) => {\n if (!isPasteSuccess) {\n this.notifyService.error('粘贴内容不符合当前类型', undefined, {\n placement: 'bottomLeft'\n });\n }\n });\n }\n });\n }\n\n private handleFieldDragStart() {\n if (this.aiTableGridSelectionService.selectedFields.size > 0) {\n this.aiTableGridSelectionService.drag({\n type: DragType.field,\n sourceIds: this.aiTableGridSelectionService.selectedFields,\n scroll: this.getScrollPosition(),\n coordinate: this.coordinate()\n });\n }\n }\n\n private getScrollPosition() {\n const horizontalBar = this.horizontalBarRef()?.nativeElement;\n const verticalBar = this.verticalBarRef()?.nativeElement;\n let scrollLeft = horizontalBar?.scrollLeft || 0;\n let scrollTop = verticalBar?.scrollTop || 0;\n return { x: scrollLeft, y: scrollTop };\n }\n\n dragEnd(data: DragEndData) {\n switch (data.type) {\n case DragType.field:\n if (data.fieldsIndex && data.targetIndex) {\n for (let i = 0; i < data.fieldsIndex.length; i++) {\n this.aiMoveField.emit({\n path: [data.fieldsIndex[i]],\n newPath: [data.targetIndex + i]\n });\n }\n }\n break;\n case DragType.columnWidth:\n break;\n case DragType.record:\n return;\n }\n this.aiTableGridSelectionService.clearDrag();\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 (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($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 <ai-table-drag (dragEnd)=\"dragEnd($event)\"></ai-table-drag>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i2","isArrayEmpty","cellValueToSortValue","Image","fileIcons.doc","fileIcons.ppt","fileIcons.xls","fileIcons.css","fileIcons.img","fileIcons.video","fileIcons.mp3","fileIcons.pdf","fileIcons.txt","fileIcons.apk","fileIcons.cs","fileIcons.csv","fileIcons.exe","fileIcons.fla","fileIcons.html","fileIcons.ipa","fileIcons.java","fileIcons.js","fileIcons.php","fileIcons.rar","fileIcons.swf","fileIcons.ttf","fileIcons.vss","fileIcons.xsd","fileIcons.zip","fileIcons.defaultFile","_"],"mappings":"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"}
|
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/types/view.ts","../../../packages/grid/src/core/coordinate.ts","../../../packages/grid/src/core/utils/shoft-id.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/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/pipes/grid.pipe.ts","../../../packages/grid/src/components/field-setting/field-setting.component.ts","../../../packages/grid/src/components/field-setting/field-setting.component.html","../../../packages/grid/src/services/selection.service.ts","../../../packages/grid/src/components/context-menu/context-menu.component.ts","../../../packages/grid/src/components/context-menu/context-menu.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/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/clipboard/clipboard.ts","../../../packages/grid/src/utils/clipboard/extract.ts","../../../packages/grid/src/utils/field/operate.ts","../../../packages/grid/src/utils/field/model/field.ts","../../../packages/grid/src/utils/field/model/attachment.ts","../../../packages/grid/src/utils/field/model/date.ts","../../../packages/grid/src/utils/field/model/link.ts","../../../packages/grid/src/utils/field/model/member.ts","../../../packages/grid/src/utils/field/model/number.ts","../../../packages/grid/src/utils/field/model/progress.ts","../../../packages/grid/src/utils/field/model/rate.ts","../../../packages/grid/src/utils/field/model/select.ts","../../../packages/grid/src/utils/field/model/text.ts","../../../packages/grid/src/utils/field/model/index.ts","../../../packages/grid/src/utils/clipboard/copy.ts","../../../packages/grid/src/utils/clipboard/paste.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/utils/match-keywords.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/container.token.ts","../../../packages/grid/src/angular-konva/components/shape.component.ts","../../../packages/grid/src/angular-konva/components/container.component.ts","../../../packages/grid/src/renderer/components/text.component.ts","../../../packages/grid/src/renderer/drawers/drawer.ts","../../../packages/grid/src/renderer/components/cells/link.component.ts","../../../packages/grid/src/renderer/components/cells/cells.ts","../../../packages/grid/src/utils/hover-cell.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/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/layout-drawer.ts","../../../packages/grid/src/renderer/drawers/add-row-layout-drawer.ts","../../../packages/grid/src/constants/file-icon.ts","../../../packages/grid/src/utils/icon.ts","../../../packages/grid/src/utils/file.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/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/components/hover-cell.component.ts","../../../packages/grid/src/renderer/renderer.component.ts","../../../packages/grid/src/renderer/renderer.component.html","../../../packages/grid/src/components/drag/drag.component.ts","../../../packages/grid/src/components/drag/drag.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 itemMatchBgColor: '#ff9f731a',\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 { AIRecordFieldIdPath, AITableDragState, AITableField, AITableFields, AITableRecord, AITableRecords, AITableValue } from './core';\n\nexport interface AITable {\n records: WritableSignal<AITableRecords>;\n fields: WritableSignal<AITableFields>;\n gridData: Signal<AITableValue>;\n context?: RendererContext;\n selection: WritableSignal<AITableSelection>;\n keywordsMatchedCells: WritableSignal<Set<string>>; // [`${recordId}:${fieldId}`]\n recordsMap: Signal<{ [key: string]: AITableRecord }>;\n fieldsMap: Signal<{ [key: string]: AITableField }>;\n recordsWillHidden: WritableSignal<string[]>;\n recordsWillMove: WritableSignal<string[]>;\n dragState?: WritableSignal<AITableDragState>;\n}\n\nexport type AIPlugin = (aiTable: AITable) => AITable;\n\nexport const AITable = {\n getColors() {\n return Colors;\n },\n getVisibleFields(aiTable: AITable): AITableFields {\n return aiTable.gridData().fields.filter((field) => !field.hidden);\n },\n getVisibleRows(aiTable: AITable): AITableRecords {\n return aiTable.records();\n },\n getActiveCell(aiTable: AITable): AIRecordFieldIdPath | null {\n return aiTable.selection().activeCell;\n },\n getActiveRecordIds(aiTable: AITable): string[] {\n const selectedRecords = aiTable.selection().selectedRecords;\n const selectedCells = aiTable.selection().selectedCells;\n let selectedRecordIds: string[] = [];\n if (selectedRecords.size > 0) {\n selectedRecordIds = [...selectedRecords.keys()];\n } else if (selectedCells.size > 0) {\n selectedRecordIds = [...selectedCells].map((item) => item.split(':')[0]);\n } else {\n selectedRecordIds = [];\n }\n return selectedRecordIds;\n },\n isCellVisible(aiTable: AITable, cell: AIRecordFieldIdPath): boolean {\n const visibleRowIndexMap = aiTable.context!.visibleRowsIndexMap();\n const visibleColumnIndexMap = aiTable.context!.visibleColumnsIndexMap();\n const [recordId, fieldId] = cell || [];\n const isVisible = visibleRowIndexMap!.has(recordId) && visibleColumnIndexMap.has(fieldId);\n return isVisible;\n },\n getCellIndex(aiTable: AITable, cell: AIRecordFieldIdPath): { rowIndex: number; columnIndex: number } | null {\n const visibleRowIndexMap = aiTable.context!.visibleRowsIndexMap();\n const visibleColumnIndexMap = aiTable.context!.visibleColumnsIndexMap();\n if (AITable.isCellVisible(aiTable, cell)) {\n const [recordId, fieldId] = cell;\n return {\n rowIndex: visibleRowIndexMap!.get(recordId)!,\n columnIndex: visibleColumnIndexMap.get(fieldId)!\n };\n }\n return null;\n },\n isFrozenColumn(aiTable: AITable, columnIndex: number) {\n const frozenColumnCount = aiTable.context!.frozenColumnCount();\n if (columnIndex <= frozenColumnCount - 1) {\n return true;\n }\n return false;\n }\n};\n","import { Vector2d } from 'konva/lib/types';\nimport { Id } from 'ngx-tethys/types';\nimport { Coordinate } from '../coordinate';\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 attachment = 'attachment',\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 | AttachmentSettings;\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 AttachmentSettings {}\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 LinkFieldValue = { url: string; text: 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 AttachmentFieldValue = string[];\n\nexport type ProgressFieldValue = number; // [0,1]\n\nexport type RateFieldValue = 1 | 2 | 3 | 4 | 5;\n\nexport type FieldValue =\n | TextFieldValue\n | LinkFieldValue\n | SelectFieldValue\n | NumberFieldValue\n | DateFieldValue\n | MemberFieldValue\n | ProgressFieldValue\n | RateFieldValue\n | AttachmentFieldValue\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 short_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 isCopy?: boolean;\n count?: number;\n}\n\nexport interface UpdateFieldValueOptions<T = unknown> {\n value: T;\n path: AIRecordFieldIdPath;\n}\n\nexport interface SetFieldOptions<T = unknown> {\n field: AITableField;\n path: IdPath;\n}\n\nexport interface MoveFieldOptions {\n path: NumberPath;\n newPath: NumberPath;\n}\n\nexport type NumberPath = [number];\n\nexport type IdPath = [string];\n\nexport type AIRecordFieldIdPath = [string, string];\n\nexport type Path = NumberPath | IdPath | AIRecordFieldIdPath;\n\nexport enum DragType {\n record = 'record',\n field = 'field',\n columnWidth = 'columnWidth',\n none = 'none'\n}\n\nexport interface AITableDragState {\n type: DragType;\n sourceIds: Set<string>;\n scroll?: Vector2d;\n coordinate?: Coordinate;\n}\n\nexport interface DragEndData {\n type: DragType;\n targetIndex?: number;\n fieldIds?: Set<string>;\n fieldsIndex?: number[];\n recordIds?: Set<string>;\n recordsIndex?: number[];\n changeSize?: number;\n}\n","import { AITableFieldOption, AITableFieldType } from '../types';\n\nexport const AI_TABLE_FIELD_MINI_WIDTH = 140;\nexport const AI_TABLE_FIELD_MIN_WIDTH = 160;\nexport const AI_TABLE_FIELD_MIDDLE_WIDTH = 200;\nexport const AI_TABLE_FIELD_MAX_WIDTH = 300;\n\nexport const FieldOptions: AITableFieldOption[] = [\n {\n type: AITableFieldType.text,\n name: '单行文本',\n icon: 'font',\n width: AI_TABLE_FIELD_MAX_WIDTH\n },\n // 多行文本\n {\n type: AITableFieldType.select,\n name: '单选',\n icon: 'check-circle',\n width: AI_TABLE_FIELD_MIN_WIDTH\n },\n {\n type: AITableFieldType.select,\n name: '多选',\n icon: 'list-check',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH,\n settings: {\n is_multiple: true\n }\n },\n {\n type: AITableFieldType.number,\n name: '数字',\n icon: 'hashtag',\n width: AI_TABLE_FIELD_MINI_WIDTH\n },\n {\n type: AITableFieldType.date,\n name: '日期',\n icon: 'calendar',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n },\n {\n type: AITableFieldType.member,\n name: '成员',\n icon: 'user',\n width: AI_TABLE_FIELD_MIN_WIDTH,\n settings: {\n is_multiple: false\n }\n },\n // 级联单选\n // 级联多选\n {\n type: AITableFieldType.progress,\n name: '进度',\n icon: 'progress',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n },\n {\n type: AITableFieldType.rate,\n name: '评分',\n icon: 'star-circle',\n width: AI_TABLE_FIELD_MIN_WIDTH\n },\n {\n type: AITableFieldType.link,\n name: '链接',\n icon: 'link-insert',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n },\n {\n type: AITableFieldType.attachment,\n name: '附件',\n icon: 'attachment',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n },\n {\n type: AITableFieldType.createdBy,\n name: '创建人',\n icon: 'user',\n width: AI_TABLE_FIELD_MIN_WIDTH\n },\n {\n type: AITableFieldType.createdAt,\n name: '创建时间',\n icon: 'calendar',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n },\n {\n type: AITableFieldType.updatedBy,\n name: '更新人',\n icon: 'user',\n width: AI_TABLE_FIELD_MIN_WIDTH\n },\n {\n type: AITableFieldType.updatedAt,\n name: '更新时间',\n icon: 'calendar',\n width: AI_TABLE_FIELD_MIDDLE_WIDTH\n }\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';\nimport { AITableRender } from './cell';\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 AITableHoverCellConfig {\n aiTable: AITable;\n coordinate: Coordinate;\n field: AITableField;\n x: number;\n y: number;\n render: AITableRender;\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, ViewContainerRef, WritableSignal } from '@angular/core';\nimport { Dictionary } from 'ngx-tethys/types';\nimport {\n AIRecordFieldIdPath,\n AITable,\n AITableField,\n AITableFields,\n AITableFieldType,\n AITableRecord,\n Coordinate,\n FieldValue,\n UpdateFieldValueOptions\n} 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 AITableContent {\n records: Partial<AITableRecord>[];\n fields: AITableFields;\n}\n\nexport interface AITableGridData extends AITableContent {\n type: 'grid';\n}\n\nexport interface AITableSelection {\n selectedRecords: Set<string>; // `${recordId}`\n selectedFields: Set<string>; // `${fieldId}`\n selectedCells: Set<string>; // `${recordId}:${fieldId}`\n activeCell: AIRecordFieldIdPath | null;\n selectAllState: AITableSelectAllState; // 'all','partial','none'\n}\n\nexport interface AIFieldConfig {\n fieldRenderers?: Partial<Record<AITableFieldType, AITableGridCellRenderSchema>>;\n fieldSettingComponent?: any;\n fieldMenus?: AITableFieldMenuItem[];\n}\n\nexport interface AITableUserInfo {\n uid?: string;\n display_name?: string;\n avatar?: string;\n [key: string]: any;\n}\n\nexport interface AITableAttachmentInfo {\n _id: string;\n title: string;\n addition: {\n ext: string;\n summary?: string;\n size?: number;\n path?: string;\n [key: string]: any;\n };\n token?: string;\n [key: string]: any;\n}\n\nexport interface AITableReferences {\n members: Dictionary<AITableUserInfo>;\n attachments: Dictionary<AITableAttachmentInfo>;\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 rowIndicesSizeMap: AITableSizeMap;\n columnIndicesSizeMap: 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 references: AITableReferences;\n container?: HTMLDivElement;\n isHoverEdit?: boolean;\n viewContainerRef?: ViewContainerRef;\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 visibleColumnsIndexMap: Signal<Map<string, number>>;\n visibleRowsIndexMap: Signal<Map<string, number>>;\n frozenColumnCount: Signal<number>;\n references: Signal<AITableReferences>;\n aiFieldConfig: Signal<AIFieldConfig | undefined>;\n}\n\nexport enum AITableSelectAllState {\n all = 'all',\n partial = 'partial',\n none = 'none'\n}\n","import { ElementRef, ViewContainerRef } from '@angular/core';\nimport { AITable, Coordinate } from '../core';\nimport { AITableGridSelectionService } from '../services/selection.service';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\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\nexport interface AITableContextMenuItem {\n type: string;\n name?: string;\n icon?: string;\n shortcutKey?: string;\n exec?: (\n aiTable: AITable,\n targetName: string,\n position: { x: number; y: number },\n aiTableGridSelectionService: AITableGridSelectionService,\n notifyService: ThyNotifyService\n ) => void;\n hidden?: (aiTable: AITable, targetName: string, position: { x: number; y: number }) => boolean;\n disabled?: (aiTable: AITable, targetName: string, position: { x: number; y: number }) => boolean;\n}\n\nexport interface AITableContextMenuOptions {\n origin: ElementRef<any> | HTMLElement;\n position: { x: number; y: number };\n menuItems: AITableContextMenuItem[];\n targetName: string;\n viewContainerRef: ViewContainerRef;\n}\n","import { Id } from 'ngx-tethys/types';\n\nexport enum AITableFilterOperation {\n eq = 'eq',\n gte = 'gte',\n lte = 'lte',\n gt = 'gt',\n lt = 'lt',\n in = 'in',\n contain = 'contain',\n ne = 'ne',\n nin = 'nin',\n between = 'between',\n besides = 'besides',\n empty = 'empty',\n exists = 'exists',\n notContain = 'not_contain'\n}\n\nexport interface AITableFilterCondition<TValue = unknown> {\n field_id: Id;\n operation: AITableFilterOperation;\n value: TValue;\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 rowIndicesSizeMap: AITableSizeMap = {};\n // 用 index 映射 每一列 的 宽度\n public columnIndicesSizeMap: 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 rowIndicesSizeMap = {},\n columnIndicesSizeMap = {},\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.rowIndicesSizeMap = rowIndicesSizeMap;\n this.columnIndicesSizeMap = columnIndicesSizeMap;\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.rowIndicesSizeMap[index] ?? this.rowHeight;\n }\n\n /**\n * 根据 columnIndex 获取对应列宽\n */\n public getColumnWidth(index: number) {\n return this.columnIndicesSizeMap[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.columnIndicesSizeMap[i] : (this.rowIndicesSizeMap[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 { customAlphabet } from 'nanoid';\nimport { isNil, isNumber, isString, includes, values } from 'lodash';\n\nexport enum AlphabetType {\n url = 1,\n numbers = 2,\n lowercase = 3,\n uppercase = 4,\n alphanumeric = 5\n}\n\nexport enum AlphabetDictionary {\n url = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-',\n numbers = '0123456789',\n lowercase = 'abcdefghijklmnopqrstuvwxyz',\n uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n alphanumeric = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n}\n\nconst buildInAlphabets = {\n [AlphabetType.url]: customAlphabet(AlphabetDictionary.url),\n [AlphabetType.numbers]: customAlphabet(AlphabetDictionary.numbers),\n [AlphabetType.lowercase]: customAlphabet(AlphabetDictionary.lowercase),\n [AlphabetType.uppercase]: customAlphabet(AlphabetDictionary.uppercase),\n [AlphabetType.alphanumeric]: customAlphabet(AlphabetDictionary.alphanumeric)\n};\n\n/**\n * 使用nanoid实现\n * @param alphabet\n * @param size [number] id 长度 [6,32]之间 默认为6\n */\nexport function shortId(alphabet?: AlphabetType | string, size?: number): string;\n\n/**\n * 使用nanoid实现\n * @param alphabet [string | AlphabetType] 默认为 AlphabetType.url\n * @param size [number] id 长度 [6,32]之间 默认为6\n * @param quantity [number] id 个数\n */\nexport function shortId(alphabet?: AlphabetType | string, size?: number, quantity?: number): string[];\n\nexport function shortId(alphabet: AlphabetType | string = AlphabetType.url, size: number = 6, quantity?: number): string | string[] {\n if (size < 6 || size > 32) {\n throw new Error(`Invalid size \"${size}\", size must in 6-32`);\n }\n let idGenerator: (size?: number) => string;\n if (isNumber(alphabet)) {\n if (!includes(values(AlphabetType), alphabet)) {\n throw new Error(`Invalid alphabet \"${alphabet}\", alphabet must one of ${Object.values(AlphabetType).join(' ')}`);\n }\n idGenerator = buildInAlphabets[alphabet];\n } else if (isString(alphabet)) {\n idGenerator = customAlphabet(alphabet);\n } else {\n throw new Error(`Invalid alphabet \"${alphabet}\", alphabet type must be AlphabetType or string`);\n }\n if (!isNil(quantity)) {\n if (!isNumber(quantity)) {\n throw new Error(`Invalid quantity \"${quantity}\", quantity type must be number`);\n }\n const idTasks = Array.from({ length: quantity }, () => idGenerator(size));\n const ids = idTasks;\n return ids;\n }\n return idGenerator(size);\n}\n","import ObjectID from 'bson-objectid';\nimport { shortId } from './shoft-id';\n\nexport function idCreator() {\n return ObjectID().toHexString();\n}\n\nexport function idsCreator(count: number) {\n if (count <= 0) return [];\n const newIds: string[] = [];\n for (let i = 0; i < count; i++) {\n newIds.push(idCreator());\n }\n return newIds;\n}\n\nexport function shortIdCreator() {\n return shortId(undefined, 8);\n}\n\nexport function shortIdsCreator(count: number) {\n return shortId(undefined, 8, count);\n}\n","import { FieldOptions, AI_TABLE_FIELD_MIDDLE_WIDTH } from '../constants/field';\nimport { AITable, AITableField, AITableFieldOption, AITableFieldType, IsMultiple, MemberSettings } from '../types';\nimport { idCreator } from './id-creator';\n\nexport const isArrayField = (field: AITableField) => {\n return [\n AITableFieldType.member,\n AITableFieldType.createdBy,\n AITableFieldType.updatedBy,\n AITableFieldType.select,\n AITableFieldType.attachment\n ].includes(field.type);\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 null;\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 let fieldOption = FieldOptions.find((item) => isSameFieldOption(item, field));\n if (fieldOption && field.type === AITableFieldType.member && (field.settings as MemberSettings)?.is_multiple) {\n fieldOption.width = AI_TABLE_FIELD_MIDDLE_WIDTH;\n }\n return fieldOption;\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 { Signal, WritableSignal, computed, signal } from '@angular/core';\nimport { AITable, AITableField, AITableFields, AITableRecord, AITableRecords, AITableValue } from '../types';\nimport { AITableSelectAllState } from '../../types';\n\nexport function createAITable(records: WritableSignal<AITableRecords>, fields: WritableSignal<AITableFields>, gridData: Signal<AITableValue>): AITable {\n const aiTable: AITable = {\n records,\n fields,\n gridData,\n selection: signal({\n selectedRecords: new Set(),\n selectedFields: new Set(),\n selectedCells: new Set(),\n activeCell: null,\n selectAllState: AITableSelectAllState.none\n }),\n keywordsMatchedCells: signal(new Set()),\n recordsMap: computed(() => {\n return records().reduce(\n (object, item) => {\n object[item._id] = item;\n return object;\n },\n {} as { [key: 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 { [key: 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 AIRecordFieldIdPath,\n IdPath,\n NumberPath,\n AITableFieldType,\n SystemFieldTypes,\n DateFieldValue,\n MemberFieldValue\n} from '../types';\nimport { isSystemField } from './field';\n\nexport function getFieldValue(record: Partial<AITableRecord>, field: AITableField) {\n if (isSystemField(field)) {\n return getSystemFieldValue(record, field.type as SystemFieldTypes);\n }\n return record.values?.[field._id];\n}\n\nexport function getSystemFieldValue(record: Partial<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\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: AIRecordFieldIdPath): 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 return getFieldValue(record, field);\n },\n getSystemFieldValue(record: Partial<AITableRecord>, type: SystemFieldTypes) {\n return getSystemFieldValue(record, 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 {\n AIFieldConfig,\n AITableContext,\n AITableLinearRow,\n AITablePointPosition,\n AITableReferences,\n AITableScrollState,\n ScrollActionOptions\n} from '../types';\n\nexport class RendererContext {\n linearRows: Signal<AITableLinearRow[]>;\n pointPosition: WritableSignal<AITablePointPosition>;\n scrollState: WritableSignal<AITableScrollState>;\n visibleColumnsIndexMap: Signal<Map<string, number>>;\n visibleRowsIndexMap: Signal<Map<string, number>>;\n frozenColumnCount: Signal<number>;\n references: Signal<AITableReferences>;\n aiFieldConfig: Signal<AIFieldConfig | undefined>;\n scrollAction: (options: ScrollActionOptions) => void;\n\n constructor(options: AITableContext) {\n const {\n linearRows,\n pointPosition,\n scrollState,\n visibleColumnsIndexMap,\n visibleRowsIndexMap,\n frozenColumnCount,\n references,\n aiFieldConfig,\n scrollAction\n } = options;\n this.linearRows = linearRows;\n this.pointPosition = pointPosition;\n this.scrollState = scrollState;\n this.scrollAction = scrollAction;\n this.visibleColumnsIndexMap = visibleColumnsIndexMap;\n this.visibleRowsIndexMap = visibleRowsIndexMap;\n this.frozenColumnCount = frozenColumnCount;\n this.references = references;\n this.aiFieldConfig = aiFieldConfig;\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, Input, OnInit, output } from '@angular/core';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { AITable, AITableField, AITableQueries, UpdateFieldValueOptions } from '../../core';\nimport { AITableReferences } from '../../types';\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 @Input({ required: true }) references!: AITableReferences;\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('链接格式不正确');\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 { 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 { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThySelect, ThySelectModule } from 'ngx-tethys/select';\nimport { ThyOption } from 'ngx-tethys/shared';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\nimport { AITableQueries, AITableSelectOptionStyle } from '../../../core';\nimport { AITableSelectField } from '../../../types';\nimport { SelectOptionComponent } from '../../cell-views/select/option.component';\nimport { AbstractEditCellEditor } from '../abstract-cell-editor.component';\nimport { ThyFormModule } from 'ngx-tethys/form';\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 ThySelect,\n ThyOption,\n ThyTooltipModule,\n SelectOptionComponent,\n CommonModule,\n ThyEmptyModule,\n ThyFormModule,\n FormsModule,\n ThySelectModule\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 onOpenChange(value: boolean) {\n if (!value) {\n this.closePopover();\n }\n }\n\n onModelChange(event: any) {\n this.updateValueFn();\n }\n\n updateValueFn() {\n const value = (this.isMultiple ? this.modelValue : (this.modelValue && ([this.modelValue] as string[])) || []) as string[];\n const originValue = AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id]) as string[];\n if (!value.every((v, i) => v === originValue[i]) || value.length !== originValue.length) {\n this.updateFieldValue.emit({\n value: value,\n path: [this.record()._id, this.field()._id]\n });\n }\n }\n}\n","<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"true\"\n [thyAllowClear]=\"true\"\n [thyPlaceHolder]=\"''\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (ngModelChange)=\"onModelChange($event)\"\n (thyOnExpandStatusChange)=\"onOpenChange($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 private maxHeight = 148;\n\n private minHeight = 24;\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 this.render2.setStyle(textarea, 'height', 'auto');\n const scrollHeight = textarea.scrollHeight;\n const newHeight = Math.max(this.minHeight, Math.min(scrollHeight, this.maxHeight)) + 4;\n\n this.render2.setStyle(textarea, 'max-height', `${this.maxHeight}px`);\n this.render2.setStyle(textarea, 'height', `${newHeight}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 { Pipe, PipeTransform } from '@angular/core';\nimport {\n AITableField,\n AITableFieldOption,\n AITableFieldSettings,\n AITableSelectOption,\n isSameFieldOption,\n MemberSettings,\n SelectSettings\n} 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\n@Pipe({\n name: 'fieldIsSameOption',\n standalone: true\n})\nexport class AITableFieldIsSameOptionPipe implements PipeTransform {\n transform(fieldOption: AITableFieldOption, field: Partial<AITableField>) {\n return isSameFieldOption(fieldOption, field);\n }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n OnInit,\n TemplateRef,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButton } from 'ngx-tethys/button';\nimport {\n ThyDropdownDirective,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemExtendIconDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemNameDirective\n} from 'ngx-tethys/dropdown';\nimport { ThyFormModule, ThyFormValidatorConfig, ThyUniqueCheckValidator } from 'ngx-tethys/form';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyInputCount, ThyInputDirective, ThyInputGroup } from 'ngx-tethys/input';\nimport { ThySwitch } from 'ngx-tethys/switch';\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 AITableFieldType,\n MemberSettings\n} from '../../core';\nimport { AITableFieldIsSameOptionPipe } from '../../pipes';\nimport * as _ from 'lodash';\n\n@Component({\n selector: 'ai-table-field-setting',\n templateUrl: './field-setting.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n FormsModule,\n ThyIcon,\n ThyInputGroup,\n ThyInputCount,\n ThyInputDirective,\n ThyUniqueCheckValidator,\n ThyDropdownMenuComponent,\n ThyDropdownDirective,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemNameDirective,\n ThyDropdownMenuItemExtendIconDirective,\n ThyButton,\n ThySwitch,\n ThyFormModule,\n NgTemplateOutlet,\n ThyAutofocusDirective,\n AITableFieldIsSameOptionPipe\n ],\n host: {\n class: 'field-setting 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 AITableFieldSetting implements OnInit {\n aiEditField = model.required<AITableField>();\n\n aiTable = input.required<AITable>();\n\n aiExternalTemplate = input<TemplateRef<any> | null>(null);\n\n isUpdate = input<boolean, unknown>(false, { transform: booleanAttribute });\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 = _.cloneDeep(FieldOptions);\n\n aITableFieldType = AITableFieldType;\n\n isMultipleMember = false;\n\n protected thyPopoverRef = inject(ThyPopoverRef<AITableFieldSetting>);\n\n ngOnInit(): void {\n this.isMultipleMember =\n this.aiEditField().type === AITableFieldType.member && !!(this.aiEditField().settings as MemberSettings)?.is_multiple;\n }\n\n checkUniqueName = (fieldName: string) => {\n fieldName = fieldName?.trim();\n return of(\n !!this.aiTable()\n .fields()\n ?.find((field) => field.name === fieldName && this.aiEditField()?._id !== field._id)\n );\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 setTimeout(() => {\n this.thyPopoverRef.updatePosition();\n }, 0);\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 multipleMemberChange() {\n this.aiEditField.set({\n ...this.aiEditField(),\n settings: {\n ...(this.aiEditField().settings || {}),\n is_multiple: this.isMultipleMember\n }\n });\n }\n\n fieldTypeClick(e: Event) {\n e.preventDefault();\n e.stopPropagation();\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=\"thy-dropdown-menu py-0\">\n <div class=\"ml-n5 mr-n5\">\n <span\n thyDropdownMenuItem\n [thyDropdown]=\"menu\"\n [thyDisabled]=\"isUpdate()\"\n thyTrigger=\"hover\"\n thyPlacement=\"right\"\n (click)=\"fieldTypeClick($event)\"\n >\n <thy-icon thyDropdownMenuItemIcon [thyIconName]=\"selectedFieldOption().icon\"></thy-icon>\n <span thyDropdownMenuItemName>{{ selectedFieldOption().name }}</span>\n <thy-icon thyDropdownMenuItemExtendIcon thyIconName=\"angle-right\" class=\"text-desc\"></thy-icon>\n </span>\n </div>\n </div>\n\n @if (selectedFieldOption().type === aITableFieldType.member) {\n <div class=\"d-flex justify-content-between mt-3\">\n 允许选择多个成员\n <thy-switch\n name=\"isMultipleMember\"\n [thyDisabled]=\"isUpdate()\"\n [(ngModel)]=\"isMultipleMember\"\n (ngModelChange)=\"multipleMemberChange()\"\n thySize=\"sm\"\n ></thy-switch>\n </div>\n }\n </thy-form-group>\n @if (aiExternalTemplate()) {\n <ng-container *ngTemplateOutlet=\"aiExternalTemplate()\"></ng-container>\n }\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\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{\n active: (item | fieldIsSameOption: aiEditField())\n }\"\n (click)=\"selectFieldType(item)\"\n >\n <thy-icon [thyIconName]=\"item.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ item.name }}</span>\n </a>\n }\n</thy-dropdown-menu>\n","import { computed, Injectable, signal } from '@angular/core';\nimport { AIRecordFieldIdPath, AITable, AITableDragState, DragType } from '../core';\nimport { AITableSelectAllState } from '../types';\n\n@Injectable()\nexport class AITableGridSelectionService {\n aiTable!: AITable;\n\n selectAllState = computed(() => {\n const selectedRecords = this.aiTable.selection().selectedRecords;\n return selectedRecords.size === this.aiTable.records().length\n ? AITableSelectAllState.all\n : selectedRecords.size === 0\n ? AITableSelectAllState.none\n : AITableSelectAllState.partial;\n });\n\n constructor() {}\n\n initialize(aiTable: AITable) {\n this.aiTable = aiTable;\n this.aiTable.dragState = signal({\n type: DragType.none,\n sourceIds: new Set()\n });\n }\n\n clearSelection() {\n this.aiTable.selection.set({\n selectedRecords: new Set(),\n selectedFields: new Set(),\n selectedCells: new Set(),\n activeCell: null,\n selectAllState: AITableSelectAllState.none\n });\n }\n\n setActiveCell(activeCell: AIRecordFieldIdPath) {\n this.aiTable.selection().activeCell = activeCell;\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.add(fieldId);\n }\n\n get selectedFields() {\n return this.aiTable.selection().selectedFields;\n }\n\n get selectedRecords() {\n return this.aiTable.selection().selectedRecords;\n }\n\n drag(config: AITableDragState) {\n this.aiTable.dragState!.set(config);\n }\n\n clearDrag() {\n this.aiTable.dragState!.set({\n type: DragType.none,\n sourceIds: new Set()\n });\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.add(recordId);\n }\n const selectedRecords = this.aiTable.selection().selectedRecords;\n this.aiTable.selection.set({\n selectedRecords: selectedRecords,\n selectedFields: new Set(),\n selectedCells: new Set(),\n activeCell: null,\n selectAllState: this.selectAllState()\n });\n }\n\n toggleSelectAll(checked: boolean) {\n if (checked) {\n if (this.aiTable.records().length === 0) {\n this.aiTable.selection.set({\n ...this.aiTable.selection(),\n selectAllState: AITableSelectAllState.all\n });\n } else {\n this.aiTable.records().forEach((item) => {\n this.selectRecord(item._id);\n });\n }\n } else {\n this.clearSelection();\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.selectCells([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 selectCells(startCell: AIRecordFieldIdPath, endCell?: AIRecordFieldIdPath) {\n const [startRecordId, startFieldId] = startCell;\n const records = this.aiTable.context!.linearRows();\n const fields = AITable.getVisibleFields(this.aiTable);\n const selectedCells = new Set<string>();\n\n if (!endCell) {\n selectedCells.add(`${startRecordId}:${startFieldId}`);\n } else {\n const [endRecordId, endFieldId] = endCell;\n\n const startRowIndex = this.aiTable.context!.visibleRowsIndexMap().get(startRecordId)!;\n const endRowIndex = this.aiTable.context!.visibleRowsIndexMap().get(endRecordId)!;\n const startColIndex = this.aiTable.context!.visibleColumnsIndexMap().get(startFieldId)!;\n const endColIndex = this.aiTable.context!.visibleColumnsIndexMap().get(endFieldId)!;\n\n const minRowIndex = Math.min(startRowIndex, endRowIndex);\n const maxRowIndex = Math.max(startRowIndex, endRowIndex);\n const minColIndex = Math.min(startColIndex, endColIndex);\n const maxColIndex = Math.max(startColIndex, endColIndex);\n\n for (let i = minRowIndex; i <= maxRowIndex; i++) {\n for (let j = minColIndex; j <= maxColIndex; j++) {\n selectedCells.add(`${records[i]._id}:${fields[j]._id}`);\n }\n }\n }\n\n this.clearSelection();\n this.setActiveCell(startCell);\n this.aiTable.selection().selectedCells = selectedCells;\n }\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport {\n ThyDropdownAbstractMenu,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemNameDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemMetaDirective\n} from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThyDivider } from 'ngx-tethys/divider';\nimport { AITable } from '../../core';\nimport { AITableContextMenuItem } from '../../types';\nimport { AITableGridSelectionService } from '../../services/selection.service';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\n\n@Component({\n selector: 'ai-table-context-menu',\n templateUrl: './context-menu.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'context-menu'\n },\n imports: [\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemNameDirective,\n ThyDropdownMenuItemIconDirective,\n ThyDropdownMenuItemMetaDirective,\n ThyIcon,\n NgClass,\n ThyDivider\n ]\n})\nexport class AITableContextMenu extends ThyDropdownAbstractMenu {\n aiTableGridSelectionService = inject(AITableGridSelectionService);\n\n notifyService = inject(ThyNotifyService);\n\n aiTable = input.required<AITable>();\n\n menuItems = input.required<AITableContextMenuItem[]>();\n\n targetName = input.required<string>();\n\n position = input.required<{ x: number; y: number }>();\n\n execute(menu: AITableContextMenuItem) {\n if ((menu.disabled && !menu.disabled(this.aiTable(), this.targetName(), this.position())) || !menu.disabled) {\n menu.exec &&\n menu.exec(this.aiTable(), this.targetName(), this.position(), this.aiTableGridSelectionService, this.notifyService);\n }\n }\n}\n","@for (menu of menuItems(); track $index) {\n @if ((menu.hidden && !menu.hidden(aiTable(), targetName(), position())) || !menu.hidden) {\n @if (menu.type === 'divider') {\n <thy-divider thyStyle=\"solid\"></thy-divider>\n } @else {\n @let disabled = !!(menu.disabled && menu.disabled(aiTable(), targetName(), position()));\n @let isRemoveRecords = menu.type === 'removeRecords';\n @let isPreventClearSelection = menu.type === 'copyCells' || menu.type === 'pasteCells' || menu.type === 'removeRecords';\n\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{\n 'remove-record': isRemoveRecords && !disabled,\n 'ai-table-prevent-clear-selection': isPreventClearSelection && !disabled\n }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n <thy-icon thyDropdownMenuItemIcon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ menu.name }}</span>\n <span thyDropdownMenuItemMeta class=\"text-desc\">{{ menu.shortcutKey }}</span>\n </a>\n }\n }\n}\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_PREVENT_CLEAR_SELECTION_CLASS = '.ai-table-prevent-clear-selection';\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_FILE_ICON_ITEM_HEIGHT = 20; // 文件字段项高度\nexport const AI_TABLE_FILE_ICON_SIZE = 20; // 文件图标大小\nexport const AI_TABLE_CELL_FIELD_ITEM_HEIGHT = 8; // 文件字段项右边距\nexport const AI_TABLE_FIELD_ITEM_MARGIN_RIGHT = 4; // 文件图标之间的间距\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.attachment,\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 = `M8 4.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5zm0 5a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5zm0 5a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.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\nexport const AttachmentPath = `M9.1 6.5V10a3.1 3.1 0 0 1-6.2.006l-.047-4.979a.6.6 0 0 1 1.2-.011L4.1 10a1.9 1.9 0 0 0 3.8 0V4.48C7.9 2.9 6.5 1.6 4.75 1.6S1.6 2.9 1.6 4.48v5.728c0 2.413 1.97 4.371 4.4 4.371 2.43 0 4.4-1.958 4.4-4.37v-5.16a.6.6 0 0 1 1.2 0v5.16c0 3.077-2.508 5.57-5.6 5.57-3.092 0-5.6-2.493-5.6-5.57V4.48C.4 2.216 2.357.4 4.75.4S9.1 2.216 9.1 4.48V6.5z`;\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 { ThyDropdownAbstractMenu, ThyDropdownMenuItemDirective } from 'ngx-tethys/dropdown';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { AITable } from '../../core';\nimport { AITableFieldMenuItem } from '../../types/field';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'ai-table-field-menu',\n templateUrl: './field-menu.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'field-menu'\n },\n imports: [ThyIcon, ThyDivider, ThyDropdownMenuItemDirective, NgClass]\n})\nexport class AITableFieldMenu 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 @let disabled = !!(menu.disabled && menu.disabled(aiTable, field));\n @let isRemoveField = menu.type === 'removeField';\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{ 'remove-field': isRemoveField && !disabled }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\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 { AITableFieldSetting } from '../components';\nimport { AITableFieldMenu } 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?.fieldSettingComponent ?? AITableFieldSetting;\n return this.thyPopover.open(component, {\n origin,\n originPosition: position,\n placement: 'bottomLeft',\n manualClosure: true,\n originActiveClass: undefined,\n height: 'auto',\n panelClass: 'ai-table-field-setting-panel',\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(AITableFieldMenu, {\n origin,\n originPosition: position,\n placement: 'bottomLeft',\n originActiveClass: undefined,\n insideClosable: true,\n initialState: {\n origin: editOrigin,\n position: options.editFieldPosition,\n aiTable,\n fieldId,\n fieldMenus\n }\n });\n return ref;\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 getColumnIndicesSizeMap(fields: AITableField[]) {\n const columnIndicesSizeMap: AITableSizeMap = {};\n fields?.forEach((field, index) => {\n columnIndicesSizeMap[index] = field.width ?? (getFieldOptionByField(field) as AITableFieldOption).width;\n });\n return columnIndicesSizeMap;\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 { isArray, isEmpty as isArrayEmpty, isObject, isUndefinedOrNull } from 'ngx-tethys/util';\nimport { 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\nexport function isEmpty(value: any) {\n if (isArray(value)) {\n return isArrayEmpty(value);\n }\n\n if (isObject(value)) {\n return Reflect.ownKeys(value).length === 0;\n }\n\n return isUndefinedOrNull(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 * 2;\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 * 2;\n const { width, offset } = getCellHorizontalPosition({\n columnWidth,\n columnIndex,\n columnCount\n });\n\n const height = rowHeight - AI_TABLE_OFFSET * 4;\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: width - AI_TABLE_OFFSET * 4,\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 { ClipboardContent } from '../../types';\n\nexport const isClipboardWriteSupported = () => {\n return 'clipboard' in navigator && 'write' in navigator.clipboard;\n};\n\nexport const isClipboardWriteTextSupported = () => {\n return 'clipboard' in navigator && 'writeText' in navigator.clipboard;\n};\n\nexport const isClipboardReadSupported = () => {\n return 'clipboard' in navigator && 'read' in navigator.clipboard;\n};\n\nexport const isClipboardReadTextSupported = () => {\n return 'clipboard' in navigator && 'readText' in navigator.clipboard;\n};\n\nexport const writeToClipboard = async (data: ClipboardContent) => {\n try {\n const { text, html } = data;\n if (isClipboardWriteSupported()) {\n const clipboardItem = new ClipboardItem({\n 'text/plain': new Blob([text!], { type: 'text/plain' }),\n 'text/html': new Blob([html!], { type: 'text/html' })\n });\n await navigator.clipboard.write([clipboardItem]);\n } else if (isClipboardWriteTextSupported()) {\n await navigator.clipboard.writeText(text!);\n } else {\n const textarea = document.createElement('textarea');\n textarea.value = text!;\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n }\n } catch (error) {\n console.warn('Failed to write clipboard:', error);\n }\n};\n\nexport const readFromClipboard = async () => {\n try {\n let clipboardData: ClipboardContent = {};\n if (isClipboardReadSupported()) {\n const clipboardItems = await navigator.clipboard.read();\n if (Array.isArray(clipboardItems) && clipboardItems[0] instanceof ClipboardItem) {\n for (const item of clipboardItems) {\n if (item.types.includes('text/html')) {\n const blob = await item.getType('text/html');\n clipboardData.html = await blob.text();\n }\n if (item.types.includes('text/plain')) {\n const blob = await item.getType('text/plain');\n clipboardData.text = await blob.text();\n }\n }\n }\n } else if (isClipboardReadTextSupported()) {\n const clipboardText = await navigator.clipboard.readText();\n clipboardData.text = clipboardText;\n } else {\n const pastePromise = new Promise<ClipboardContent>((resolve) => {\n const textarea = document.createElement('textarea');\n document.body.appendChild(textarea);\n const handlePaste = (e: ClipboardEvent) => {\n const text = e.clipboardData?.getData('text') || '';\n const html = e.clipboardData?.getData('text/html') || '';\n\n resolve({\n text,\n html: html || undefined\n });\n\n textarea.removeEventListener('paste', handlePaste);\n };\n textarea.addEventListener('paste', handlePaste);\n textarea.focus();\n document.execCommand('paste');\n document.body.removeChild(textarea);\n });\n clipboardData = await pastePromise;\n }\n return clipboardData;\n } catch (error) {\n console.warn('Failed to read clipboard:', error);\n return null;\n }\n};\n","export function extractText(text: string): string {\n let plainText = text;\n if (text.includes('<a')) {\n const aTagMatch = text.match(/<a[^>]*>(.*?)<\\/a>/i);\n if (aTagMatch && aTagMatch[1] && aTagMatch[1].trim()) {\n plainText = aTagMatch[1];\n }\n }\n return plainText;\n}\n\nexport function extractLinkHref(text: string): string | null {\n let href: string | null = null;\n const hrefMatch = text.match(/href=\"([^\"]+)\"/);\n if (hrefMatch && hrefMatch[1] && hrefMatch[1].trim()) {\n href = hrefMatch[1];\n }\n return href;\n}\n","import { isEmpty } from '../common';\n\nexport const zhIntlCollator = typeof Intl !== 'undefined' ? new Intl.Collator('zh-CN') : undefined;\n\nexport function compareNumber(a: number, b: number): number {\n if (isEmpty(a) && isEmpty(b)) {\n return 0;\n }\n if (isEmpty(a)) {\n return -1;\n }\n if (isEmpty(b)) {\n return 1;\n }\n return a === b ? 0 : a > b ? 1 : -1;\n}\n\nexport function compareString(a: string | null, b: string | null): number {\n if (a === b) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n\n // pinyin sort\n return a === b ? 0 : zhIntlCollator ? zhIntlCollator.compare(a, b) : a.localeCompare(b, 'zh-CN') > 0 ? 1 : -1;\n}\n\nexport function stringInclude(str: string, searchStr: string) {\n return str.toLowerCase().includes(searchStr.trim().toLowerCase());\n}\n\n/**\n * 两数组是否有交集\n */\nexport function hasIntersect<T extends number | string>(array1: T[], array2: T[]) {\n if (!Array.isArray(array1) || !Array.isArray(array2)) {\n return false;\n }\n const set1 = new Set(array1);\n const set2 = new Set(array2);\n for (const element of set1) {\n if (set2.has(element)) {\n return true;\n }\n }\n return false;\n}\n","import { AITableFilterCondition, AITableFilterOperation, AITableReferences } from '../../../types';\nimport { AITableField, FieldValue } from '../../../core';\nimport { isEmpty } from '../../common';\n\nexport abstract class Field {\n // 排序\n abstract compare(\n cellValue1: FieldValue,\n cellValue2: FieldValue,\n field: AITableField,\n references?: AITableReferences,\n sortKey?: string\n ): number;\n\n // 粘贴\n abstract toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null,\n references?: AITableReferences\n ): FieldValue | null;\n\n // 筛选\n isMeetFilter(condition: AITableFilterCondition, cellValue: FieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n case AITableFilterOperation.exists: {\n return this.isEmptyOrNot(condition.operation, cellValue);\n }\n default: {\n return true;\n }\n }\n }\n\n // 查找\n cellFullText(transformValue: any, field: AITableField, references?: AITableReferences): string[] {\n let fullText: string[] = [];\n if (!isEmpty(transformValue)) {\n fullText.push(String(transformValue));\n }\n return fullText;\n }\n\n isEmptyOrNot(operation: AITableFilterOperation.empty | AITableFilterOperation.exists, cellValue: FieldValue) {\n switch (operation) {\n case AITableFilterOperation.empty: {\n return isEmpty(cellValue);\n }\n case AITableFilterOperation.exists: {\n return !isEmpty(cellValue);\n }\n default: {\n throw new Error('compare operator type error');\n }\n }\n }\n}\n","import { AITableField, AttachmentFieldValue, FieldValue } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation, AITableReferences } from '../../../types';\nimport { isEmpty } from '../../common';\nimport { compareString, hasIntersect } from '../operate';\nimport { Field } from './field';\n\nexport class AttachmentField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: AttachmentFieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.in:\n return Array.isArray(condition.value) && hasIntersect(cellValue, condition.value);\n case AITableFilterOperation.nin:\n return Array.isArray(condition.value) && !hasIntersect(cellValue, condition.value);\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(\n cellValue1: AttachmentFieldValue,\n cellValue2: AttachmentFieldValue,\n field: AITableField,\n references: AITableReferences,\n sortKey: string\n ): number {\n const value1 = cellValueToSortValue(cellValue1, field, references, sortKey);\n const value2 = cellValueToSortValue(cellValue2, field, references, sortKey);\n return compareString(value1, value2);\n }\n\n override cellFullText(transformValue: string[], field: AITableField, references?: AITableReferences): string[] {\n let fullText: string[] = [];\n if (transformValue?.length && references) {\n for (let index = 0; index < transformValue.length; index++) {\n const attachmentInfo = references?.attachments[transformValue[index]];\n if (!attachmentInfo) {\n continue;\n }\n if (attachmentInfo.title) {\n fullText.push(attachmentInfo.title);\n }\n }\n }\n return fullText;\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: AttachmentFieldValue },\n references?: AITableReferences\n ): AttachmentFieldValue | null {\n return toAttachmentFieldValue(plainText, targetField, originData, references);\n }\n}\n\nexport function toAttachmentFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: AttachmentFieldValue },\n references?: AITableReferences\n): FieldValue | null {\n return null;\n}\n\nfunction cellValueToSortValue(\n cellValue: AttachmentFieldValue,\n field: AITableField,\n references: AITableReferences,\n sortKey = 'title'\n): string | null {\n let values: string[] = [];\n if (cellValue?.length && references) {\n for (let index = 0; index < cellValue.length; index++) {\n const attachmentInfo = references?.attachments[cellValue[index]];\n if (!attachmentInfo) {\n continue;\n }\n\n const value = attachmentInfo[sortKey];\n if (value) {\n values.push(value);\n }\n }\n }\n return values && values.length ? values.join(', ') : null;\n}\n","import { fromUnixTime, subDays } from 'date-fns';\nimport { isArray, TinyDate } from 'ngx-tethys/util';\nimport { Field } from './field';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { AITableField, AITableFieldType, DateFieldValue, FieldValue } from '../../../core';\nimport { compareNumber } from '../operate';\nimport { isEmpty } from '../../common';\n\nexport class DateField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: DateFieldValue) {\n const [left, right] = this.getTimeRange(condition.value);\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue.timestamp) || cellValue.timestamp === 0;\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue.timestamp) && cellValue.timestamp !== 0;\n case AITableFilterOperation.eq:\n return left <= cellValue.timestamp && cellValue.timestamp < right;\n case AITableFilterOperation.gt:\n return cellValue.timestamp > right;\n case AITableFilterOperation.lt:\n return cellValue.timestamp < left;\n case AITableFilterOperation.between:\n return left <= cellValue.timestamp && cellValue.timestamp < right;\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: DateFieldValue, cellValue2: DateFieldValue): number {\n const value1 = cellValueToSortValue(cellValue1);\n const value2 = cellValueToSortValue(cellValue2);\n return compareNumber(value1, value2);\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n ): FieldValue | null {\n return toDateFieldValue(plainText, targetField, originData);\n }\n\n getTimeRange(value: string | number | number[]) {\n switch (value) {\n case 'today':\n return [new TinyDate(new Date()).startOfDay().getUnixTime(), new TinyDate(new Date()).endOfDay().getUnixTime()];\n case 'current_week':\n return [\n new TinyDate().startOfWeek({ weekStartsOn: 1 }).getUnixTime(),\n new TinyDate().endOfWeek({ weekStartsOn: 1 }).getUnixTime()\n ];\n case 'yesterday':\n return [\n new TinyDate(subDays(new Date(), 1)).startOfDay().getUnixTime(),\n new TinyDate(subDays(new Date(), 1)).endOfDay().getUnixTime()\n ];\n case 'current_month':\n return [new TinyDate().startOfMonth().getUnixTime(), new TinyDate().endOfMonth().getUnixTime()];\n default:\n if (isArray(value)) {\n return [\n new TinyDate(fromUnixTime(value[0] as number)).startOfDay().getUnixTime(),\n new TinyDate(fromUnixTime(value[1] as number)).endOfDay().getUnixTime()\n ];\n }\n return [\n new TinyDate(fromUnixTime(value as number)).startOfDay().getUnixTime(),\n new TinyDate(fromUnixTime(value as number)).endOfDay().getUnixTime()\n ];\n }\n }\n}\n\nexport function toDateFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n): FieldValue | null {\n if (targetField.type === AITableFieldType.createdAt || targetField.type === AITableFieldType.updatedAt) {\n return null;\n }\n\n if (originData) {\n const { field, cellValue } = originData;\n switch (field.type) {\n case AITableFieldType.date:\n return cellValue;\n case AITableFieldType.text:\n const dateValue = transformDateValue(cellValue);\n if (dateValue) {\n return dateValue;\n }\n break;\n default:\n break;\n }\n } else {\n const dateValue = transformDateValue(plainText);\n if (dateValue) {\n return dateValue;\n }\n }\n\n return null;\n}\n\nfunction cellValueToSortValue(cellValue: DateFieldValue): number {\n return cellValue?.timestamp;\n}\n\nfunction transformDateValue(text: string): FieldValue | null {\n const value = text.trim();\n if (!value || isEmpty(value)) return null;\n\n // 基础日期格式:支持识别 - / . 年月日 作为分隔符\n const datePattern = String.raw`(?:(\\d{2}|\\d{4})[-/.年](\\d{1,2})[-/.月](\\d{1,2})日?)`;\n const timePattern = String.raw`(?:\\s+(\\d{1,2}):(\\d{1,2})(?::(\\d{1,2}))?)?`;\n\n const pattern = new RegExp(`^${datePattern}${timePattern}$`);\n const match = value.match(pattern);\n\n if (!match) return null;\n\n try {\n let [_, year, month, day] = match;\n\n if (year.length === 2) {\n const currentYear = new Date().getFullYear();\n const century = Math.floor(currentYear / 100) * 100;\n const twoDigitYear = parseInt(year);\n year = String(twoDigitYear > currentYear % 100 ? century - 100 + twoDigitYear : century + twoDigitYear);\n }\n\n const monthNum = parseInt(month);\n const dayNum = parseInt(day);\n\n if (monthNum < 1 || monthNum > 12) {\n console.warn('Invalid month:', monthNum);\n return null;\n }\n\n const maxDays = new Date(parseInt(year), monthNum, 0).getDate();\n if (dayNum < 1 || dayNum > maxDays) {\n console.warn('Invalid day:', dayNum);\n return null;\n }\n\n const standardDate = `${year}-${String(monthNum).padStart(2, '0')}-${String(dayNum).padStart(2, '0')}`;\n return {\n timestamp: new TinyDate(standardDate).getUnixTime()\n };\n } catch (error) {\n console.warn('Invalid date:', value);\n return null;\n }\n}\n","import { AITableField, AITableFieldType, FieldValue, LinkFieldValue } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { extractText, extractLinkHref } from '../../clipboard';\nimport { isEmpty } from '../../common';\nimport { compareString, stringInclude } from '../operate';\nimport { Field } from './field';\n\nexport class LinkField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: FieldValue) {\n const cellTextValue = cellValue?.text;\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellTextValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellTextValue);\n case AITableFilterOperation.contain:\n return !isEmpty(cellTextValue) && stringInclude(cellTextValue, condition.value);\n default:\n return super.isMeetFilter(condition, cellTextValue);\n }\n }\n\n override compare(cellValue1: FieldValue, cellValue2: FieldValue): number {\n return compareString(cellValueToSortValue(cellValue1), cellValueToSortValue(cellValue2));\n }\n\n override cellFullText(transformValue: LinkFieldValue): string[] {\n let texts: string[] = [];\n if (!isEmpty(transformValue?.text)) {\n texts.push(transformValue.text);\n }\n return texts;\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null\n ): FieldValue | null {\n return toLinkFieldValue(plainText, targetField, originData);\n }\n}\n\nexport function toLinkFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null\n): FieldValue | null {\n if (originData) {\n const { field, cellValue } = originData;\n if (field.type === AITableFieldType.link) {\n return cellValue;\n }\n } else {\n const url = extractLinkHref(plainText);\n const text = extractText(plainText);\n if (url && text) {\n return {\n url,\n text\n };\n }\n }\n return null;\n}\n\nfunction cellValueToSortValue(cellValue: LinkFieldValue): string | null {\n return (cellValue && cellValue.text && cellValue.text.trim()) || null;\n}\n","import { Id } from 'ngx-tethys/types';\nimport { AITableField, AITableFieldType, FieldValue, MemberFieldValue, MemberSettings } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation, AITableReferences } from '../../../types';\nimport { isEmpty } from '../../common';\nimport { compareString, hasIntersect } from '../operate';\nimport { Field } from './field';\n\nexport class MemberField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: MemberFieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.in:\n return Array.isArray(condition.value) && hasIntersect(cellValue, condition.value);\n case AITableFilterOperation.nin:\n return Array.isArray(condition.value) && !hasIntersect(cellValue, condition.value);\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(\n cellValue1: FieldValue,\n cellValue2: FieldValue,\n field: AITableField,\n references: AITableReferences,\n sortKey: string\n ): number {\n const value1 = cellValueToSortValue(cellValue1, field, references, sortKey);\n const value2 = cellValueToSortValue(cellValue2, field, references, sortKey);\n return compareString(value1, value2);\n }\n\n override cellFullText(transformValue: string[], field: AITableField, references?: AITableReferences): string[] {\n let fullText: string[] = [];\n if (transformValue?.length && references) {\n for (let index = 0; index < transformValue.length; index++) {\n const userInfo = references?.members[transformValue[index]];\n if (!userInfo) {\n continue;\n }\n if (userInfo.display_name) {\n fullText.push(userInfo.display_name);\n }\n }\n }\n return fullText;\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue },\n references?: AITableReferences\n ): FieldValue | null {\n return toMemberFieldValue(plainText, targetField, originData, references);\n }\n}\n\nexport function toMemberFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue },\n references?: AITableReferences\n): FieldValue | null {\n if (targetField.type == AITableFieldType.createdBy || targetField.type == AITableFieldType.updatedBy) {\n return null;\n }\n\n const isMultiple = (targetField.settings as MemberSettings)?.is_multiple;\n if (originData) {\n const { field, cellValue } = originData;\n switch (field.type) {\n case AITableFieldType.member:\n if (Array.isArray(cellValue) && cellValue.length) {\n return isMultiple ? cellValue : [cellValue[0]];\n }\n break;\n default:\n break;\n }\n }\n\n plainText = plainText.trim();\n const hasMemberInfo = references && references.members && Object.keys(references.members).length;\n if (plainText && hasMemberInfo) {\n const memberNames = plainText.split(',').map((id) => id.trim());\n const memberInfos = Object.values(references.members);\n let validMemberIds: MemberFieldValue = [];\n memberNames.forEach((memberName) => {\n const memberInfo = memberInfos.find((member) => member.display_name === memberName);\n if (memberInfo) {\n validMemberIds.push(memberInfo.uid as Id);\n }\n });\n if (validMemberIds.length) {\n return isMultiple ? validMemberIds : [validMemberIds[0]];\n }\n }\n\n return null;\n}\n\nfunction cellValueToSortValue(\n cellValue: MemberFieldValue,\n field: AITableField,\n references: AITableReferences,\n sortKey = 'display_name'\n): string | null {\n let values: string[] = [];\n if (cellValue?.length && references) {\n for (let index = 0; index < cellValue.length; index++) {\n const userInfo = references?.members[cellValue[index]];\n if (!userInfo) {\n continue;\n }\n\n const value = userInfo[sortKey];\n if (value) {\n values.push(value);\n }\n }\n }\n return values && values.length ? values.join(', ') : null;\n}\n","import { helpers } from 'ngx-tethys/util';\nimport { AITableField, AITableFieldType, FieldValue, SelectSettings } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { isEmpty } from '../../common';\nimport { compareNumber } from '../operate';\nimport { Field } from './field';\n\nexport class NumberField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<number>, cellValue: FieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.eq:\n return !Number.isNaN(condition.value) && cellValue != null && cellValue !== '' && condition.value === cellValue;\n case AITableFilterOperation.gte:\n return cellValue != null && cellValue !== '' && cellValue >= condition.value;\n case AITableFilterOperation.lte:\n return cellValue != null && cellValue !== '' && cellValue <= condition.value;\n case AITableFilterOperation.gt:\n return cellValue != null && cellValue !== '' && cellValue > condition.value;\n case AITableFilterOperation.lt:\n return cellValue != null && cellValue !== '' && cellValue < condition.value;\n case AITableFilterOperation.ne:\n return cellValue == null || cellValue == '' || Number.isNaN(condition.value) || cellValue !== condition.value;\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: number, cellValue2: number): number {\n return compareNumber(cellValue1, cellValue2);\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n ): FieldValue | null {\n return toNumberFieldValue(plainText, targetField, originData);\n }\n}\n\nexport function toNumberFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n): FieldValue | null {\n let text = plainText.trim();\n\n if (originData) {\n const { field, cellValue } = originData;\n const fieldType = field.type;\n\n switch (fieldType) {\n case AITableFieldType.number:\n case AITableFieldType.rate:\n case AITableFieldType.progress:\n return cellValue;\n case AITableFieldType.select:\n if (cellValue && Array.isArray(cellValue) && cellValue.length) {\n const optionsMap = helpers.keyBy((field.settings as SelectSettings).options || [], '_id');\n text = optionsMap[cellValue[0]]?.text;\n }\n break;\n default:\n break;\n }\n }\n\n if (text && !isEmpty(text) && !Number.isNaN(Number(text))) {\n return Number(text);\n }\n return null;\n}\n","import { helpers } from 'ngx-tethys/util';\nimport { AITableField, AITableFieldType, FieldValue, SelectSettings } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { compareNumber, isEmpty } from '../../index';\nimport { Field } from './field';\n\nexport class ProgressField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<number>, cellValue: FieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.eq:\n return !Number.isNaN(condition.value) && cellValue != null && cellValue !== '' && condition.value === cellValue;\n case AITableFilterOperation.gte:\n return cellValue != null && cellValue !== '' && cellValue >= condition.value;\n case AITableFilterOperation.lte:\n return cellValue != null && cellValue !== '' && cellValue <= condition.value;\n case AITableFilterOperation.gt:\n return cellValue != null && cellValue !== '' && cellValue > condition.value;\n case AITableFilterOperation.lt:\n return cellValue != null && cellValue !== '' && cellValue < condition.value;\n case AITableFilterOperation.ne:\n return cellValue == null || cellValue == '' || Number.isNaN(condition.value) || cellValue !== condition.value;\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: number, cellValue2: number): number {\n return compareNumber(cellValue1, cellValue2);\n }\n\n override cellFullText(transformValue: number): string[] {\n let fullText: string[] = [];\n if (!isEmpty(transformValue)) {\n fullText.push(`${transformValue}%`);\n }\n return fullText;\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n ): FieldValue | null {\n return toProgressFieldValue(plainText, targetField, originData);\n }\n}\n\nexport function toProgressFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n): FieldValue | null {\n let value: any = plainText.trim();\n if (originData) {\n const { field, cellValue } = originData;\n switch (field.type) {\n case AITableFieldType.progress:\n case AITableFieldType.rate:\n case AITableFieldType.number:\n value = cellValue;\n break;\n case AITableFieldType.select:\n if (cellValue && Array.isArray(cellValue) && cellValue.length) {\n const optionsMap = helpers.keyBy((field.settings as SelectSettings).options || [], '_id');\n value = optionsMap[cellValue[0]]?.text;\n }\n break;\n default:\n break;\n }\n }\n\n if (!isEmpty(value)) {\n const progressValue = Number(value);\n if (!Number.isNaN(progressValue) && progressValue >= 0 && progressValue <= 100) {\n return progressValue;\n }\n }\n\n return null;\n}\n","import { helpers } from 'ngx-tethys/util';\nimport { AITableField, AITableFieldType, FieldValue, RateFieldValue, SelectSettings } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { isEmpty } from '../../common';\nimport { compareNumber } from '../operate';\nimport { Field } from './field';\n\nexport class RateField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string[]>, cellValue: RateFieldValue | string) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.in:\n const isContain = condition.value.some((item) => String(item) === String(cellValue));\n return !isEmpty(cellValue) && isContain;\n case AITableFilterOperation.nin:\n const noContain = condition.value.every((item) => String(item) !== String(cellValue));\n return isEmpty(cellValue) || noContain;\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: number, cellValue2: number): number {\n return compareNumber(cellValue1, cellValue2);\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n ): FieldValue | null {\n return toRateFieldValue(plainText, targetField, originData);\n }\n}\n\nexport function toRateFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue }\n): FieldValue | null {\n let value: any = plainText.trim();\n if (originData) {\n const { field, cellValue } = originData;\n switch (field.type) {\n case AITableFieldType.rate:\n case AITableFieldType.number:\n case AITableFieldType.progress:\n value = cellValue;\n break;\n case AITableFieldType.select:\n if (cellValue && Array.isArray(cellValue) && cellValue.length) {\n const optionsMap = helpers.keyBy((field.settings as SelectSettings).options || [], '_id');\n value = optionsMap[cellValue[0]]?.text;\n }\n break;\n default:\n break;\n }\n }\n\n if (!isEmpty(value)) {\n const rateValue = Number(value);\n if (!Number.isNaN(rateValue) && rateValue > 0 && rateValue < 5) {\n return Math.round(rateValue);\n }\n return 5;\n }\n\n return null;\n}\n","import { helpers } from 'ngx-tethys/util';\nimport { Field } from './field';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { AITableField, AITableFieldType, AITableSelectOption, FieldValue, SelectFieldValue, SelectSettings } from '../../../core';\nimport { isEmpty } from '../../common';\nimport { compareString, hasIntersect } from '../operate';\n\nexport class SelectField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: SelectFieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.in:\n return Array.isArray(condition.value) && hasIntersect(cellValue, condition.value);\n case AITableFilterOperation.nin:\n return Array.isArray(condition.value) && !hasIntersect(cellValue, condition.value);\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: FieldValue, cellValue2: FieldValue, field: AITableField): number {\n const value1 = cellValueToSortValue(cellValue1, field);\n const value2 = cellValueToSortValue(cellValue2, field);\n return compareString(value1, value2);\n }\n\n override cellFullText(transformValue: string[], field: AITableField): string[] {\n let fullText: string[] = [];\n const optionsMap = helpers.keyBy((field.settings as SelectSettings).options || [], '_id');\n if (transformValue && Array.isArray(transformValue) && transformValue.length) {\n transformValue.forEach((optionId) => {\n const option = optionsMap[optionId];\n if (option && option.text) {\n fullText.push(option.text);\n }\n });\n }\n return fullText;\n }\n\n override toFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null\n ): FieldValue | null {\n return toSelectFieldValue(plainText, targetField, originData);\n }\n}\n\nexport function toSelectFieldValue(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null\n): FieldValue | null {\n return null;\n}\n\nexport function processPastedValueForSelect(\n plainText: string,\n targetField: AITableField,\n originData?: { field: AITableField; cellValue: FieldValue } | null\n): { existOptionIds: string[]; newOptions: Partial<AITableSelectOption>[] } {\n const targetFieldOptions = (targetField.settings as SelectSettings)?.options || [];\n let existOptionIds: string[] = [];\n let newOptions: Partial<AITableSelectOption>[] = [];\n let cellFullTexts: string[] = plainText.split(',').map((text) => text.trim());\n\n const { field, cellValue } = originData || {};\n if (field && field.type === AITableFieldType.select) {\n if (cellValue && Array.isArray(cellValue) && cellValue.length) {\n const targetOptionIds = targetFieldOptions.map((option) => option._id);\n const originOptionsMap = helpers.keyBy((field.settings as SelectSettings)?.options || [], '_id');\n cellValue.forEach((id) => {\n if (targetOptionIds.includes(id)) {\n existOptionIds.push(id);\n } else if (targetFieldOptions.some((option) => option.text === originOptionsMap[id]?.text)) {\n const option = targetFieldOptions.find((option: AITableSelectOption) => option.text === originOptionsMap[id].text);\n existOptionIds.push(option!._id);\n } else {\n const originOption = originOptionsMap[id];\n if (originOption) {\n newOptions.push({\n text: originOption.text,\n icon: originOption.icon,\n color: originOption.color,\n bg_color: originOption.bg_color\n });\n }\n }\n });\n }\n } else {\n cellFullTexts.forEach((text) => {\n const option = targetFieldOptions.find((option) => option.text === text);\n option ? existOptionIds.push(option._id) : newOptions.push({ text });\n });\n }\n\n const isMultiple = (targetField.settings as SelectSettings)?.is_multiple;\n if (isMultiple) {\n return { existOptionIds, newOptions };\n } else {\n if (existOptionIds.length) {\n return { existOptionIds: [existOptionIds[0]], newOptions: [] };\n } else {\n if (newOptions.length) {\n return { existOptionIds: [], newOptions: [newOptions[0]] };\n } else {\n return { existOptionIds: [], newOptions: [] };\n }\n }\n }\n}\n\nfunction cellValueToSortValue(cellValue: SelectFieldValue, field: AITableField): string | null {\n if (!cellValue) {\n return null;\n }\n const texts: string[] = [];\n const optionsMap = helpers.keyBy((field.settings as SelectSettings).options || [], '_id');\n if (cellValue && Array.isArray(cellValue) && cellValue.length) {\n cellValue.forEach((optionId) => {\n const option = optionsMap[optionId];\n if (option && option.text) {\n texts.push(option.text);\n }\n });\n }\n return texts && texts.length ? texts.join(',') : null;\n}\n","import { FieldValue } from '../../../core';\nimport { AITableFilterCondition, AITableFilterOperation } from '../../../types';\nimport { isEmpty } from '../../common';\nimport { compareString, stringInclude } from '../operate';\nimport { Field } from './field';\n\nexport class TextField extends Field {\n override isMeetFilter(condition: AITableFilterCondition<string>, cellValue: FieldValue) {\n switch (condition.operation) {\n case AITableFilterOperation.empty:\n return isEmpty(cellValue);\n case AITableFilterOperation.exists:\n return !isEmpty(cellValue);\n case AITableFilterOperation.contain:\n return !isEmpty(cellValue) && stringInclude(cellValue, condition.value);\n default:\n return super.isMeetFilter(condition, cellValue);\n }\n }\n\n override compare(cellValue1: FieldValue, cellValue2: FieldValue): number {\n const value1 = cellValueToSortValue(cellValue1);\n const value2 = cellValueToSortValue(cellValue2);\n return compareString(value1, value2);\n }\n\n override toFieldValue(plainText: string): FieldValue | null {\n return toTextFieldValue(plainText);\n }\n}\n\nexport function toTextFieldValue(plainText: string): FieldValue | null {\n return plainText.trim();\n}\n\nfunction cellValueToSortValue(cellValue: FieldValue): string | null {\n return (cellValue && cellValue.trim()) || null;\n}\n","import { AITableFieldType } from '../../../core';\nimport { AttachmentField } from './attachment';\nimport { DateField } from './date';\nimport { Field } from './field';\n\nimport { LinkField } from './link';\nimport { MemberField } from './member';\nimport { NumberField } from './number';\nimport { ProgressField } from './progress';\nimport { RateField } from './rate';\nimport { SelectField } from './select';\nimport { TextField } from './text';\n\nexport const FieldModelMap: Record<AITableFieldType, Field> = {\n [AITableFieldType.text]: new TextField(),\n [AITableFieldType.richText]: new TextField(),\n [AITableFieldType.select]: new SelectField(),\n [AITableFieldType.date]: new DateField(),\n [AITableFieldType.createdAt]: new DateField(),\n [AITableFieldType.updatedAt]: new DateField(),\n [AITableFieldType.number]: new NumberField(),\n [AITableFieldType.rate]: new RateField(),\n [AITableFieldType.link]: new LinkField(),\n [AITableFieldType.member]: new MemberField(),\n [AITableFieldType.progress]: new ProgressField(),\n [AITableFieldType.createdBy]: new MemberField(),\n [AITableFieldType.updatedBy]: new MemberField(),\n [AITableFieldType.attachment]: new AttachmentField()\n};\n","import { AITable, AITableFieldType, AITableRecord, getFieldValue, getSystemFieldValue, isSystemField, SystemFieldTypes } from '../../core';\nimport { FieldModelMap } from '../field/model';\nimport { transformCellValue } from '../cell';\nimport { AITableContent, ClipboardContent } from '../../types';\n\nexport const aiTableFragmentAttribute = 'ai-table-fragment';\n\nexport const buildClipboardData = (aiTable: AITable): ClipboardContent | null => {\n const copiedCells = Array.from(aiTable.selection().selectedCells);\n if (!copiedCells.length) {\n return null;\n }\n\n let copiedFieldIds = new Set<string>();\n let copiedRecordIds = new Set<string>();\n copiedCells.forEach((cellPath: string) => {\n const [recordId, fieldId] = cellPath.split(':');\n copiedFieldIds.add(fieldId);\n copiedRecordIds.add(recordId);\n });\n\n const fieldIds = Array.from(copiedFieldIds);\n const recordIds = Array.from(copiedRecordIds);\n const aiTableContent = buildAITableContent(aiTable, fieldIds, recordIds);\n const clipboardContent = buildClipboardContent(aiTable, fieldIds, recordIds);\n\n return mergeClipboardContent(clipboardContent, aiTableContent);\n};\n\nconst encodeAITableContent = (aiTableContent: AITableContent) => {\n const stringifiedData = JSON.stringify(aiTableContent);\n return window.btoa(encodeURIComponent(stringifiedData));\n};\n\nfunction mergeClipboardContent(clipboardContent: ClipboardContent[][], aiTableContent: AITableContent): ClipboardContent {\n const encodedAITableContent = encodeAITableContent(aiTableContent);\n const formattedContent: ClipboardContent = {\n text: clipboardContent.map((row) => row.map((column) => column.text).join('\\t')).join('\\n'),\n html: `<table ${aiTableFragmentAttribute}=\"${encodedAITableContent}\">${clipboardContent.map((row) => `<tr>${row.map((column) => `<td>${column.html}</td>`).join('')}</tr>`).join('')}</table>`\n };\n return formattedContent;\n}\n\nfunction buildAITableContent(aiTable: AITable, fieldIds: string[], recordIds: string[]): AITableContent {\n const fields = fieldIds.map((fieldId) => {\n return aiTable.fieldsMap()[fieldId];\n });\n\n const records = recordIds.map((recordId) => {\n const record = aiTable.recordsMap()[recordId];\n let newRecord: Partial<AITableRecord> = {\n _id: record._id,\n values: {}\n };\n fieldIds.forEach((fieldId) => {\n const field = aiTable.fieldsMap()[fieldId];\n if (isSystemField(field)) {\n const fieldType: SystemFieldTypes = field.type as SystemFieldTypes;\n newRecord = {\n ...newRecord,\n [fieldType]: getSystemFieldValue(record, fieldType)\n };\n } else {\n newRecord.values = {\n ...newRecord.values,\n [fieldId]: getFieldValue(record, field)\n };\n }\n });\n return newRecord;\n });\n\n return {\n fields,\n records\n };\n}\n\nfunction buildClipboardContent(aiTable: AITable, fieldIds: string[], recordIds: string[]): ClipboardContent[][] {\n const clipboardContent: ClipboardContent[][] = [];\n const references = aiTable.context!.references();\n recordIds.forEach((recordId) => {\n const record = aiTable.recordsMap()[recordId];\n const row: { text: string; html: string }[] = [];\n fieldIds.forEach((fieldId) => {\n const field = aiTable.fieldsMap()[fieldId];\n const cellValue = getFieldValue(record, field);\n const transformValue = transformCellValue(aiTable, field, cellValue);\n const cellTexts: string[] = FieldModelMap[field.type].cellFullText(transformValue, field, references);\n let cellContent = {\n text: cellTexts.join(','),\n html: cellTexts.join(',')\n };\n if (field.type === AITableFieldType.link && cellValue && cellValue.url) {\n cellContent.html = `<a href=\"${cellValue.url}\" target=\"_blank\">${cellValue.text}</a>`;\n }\n row.push(cellContent);\n });\n clipboardContent.push(row);\n });\n return clipboardContent;\n}\n","import { AITableContent, AITableReferences } from '../../types';\nimport {\n AITable,\n AITableField,\n AITableFieldType,\n AITableRecord,\n createDefaultField,\n createDefaultFieldName,\n FieldOptions,\n FieldValue,\n getFieldValue,\n idCreator,\n SelectSettings,\n UpdateFieldValueOptions\n} from '../../core';\nimport { readFromClipboard, aiTableFragmentAttribute, extractText } from '../clipboard';\nimport { FieldModelMap } from '../field/model';\nimport { processPastedValueForSelect } from '../field/model/select';\nimport { AddRecordOptions, AddFieldOptions } from '../../core';\n\nconst aiTableAttributePattern = new RegExp(`${aiTableFragmentAttribute}=\"(.+?)\"`, 'm');\n\nconst decodeClipboardJsonData = (encoded: string) => {\n const decoded = decodeURIComponent(window.atob(encoded));\n return JSON.parse(decoded);\n};\n\nfunction extractContentFromClipboardText(clipboardText: string): string[][] {\n const contents = clipboardText\n .split('\\n')\n .map((row) => row.split('\\t'))\n .filter((row) => row.length > 0 && row.some((cell) => cell.trim().length > 0));\n\n return contents;\n}\n\nfunction processTableCell(cellHtml: string): string {\n const linkPattern = /<a[^>]*?href=[\"']([^\"']+)[\"'][^>]*?>([^<]*?)<\\/a>/i;\n const match = cellHtml.match(linkPattern);\n const link = match ? { href: match[1], text: match[2] } : null;\n const content = link ? cellHtml.replace(linkPattern, `[LINK:${link.text}](${link.href})`) : cellHtml;\n\n const cleanContent = content\n .replace(/<[^>]+>/g, '')\n .replace(/ /g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n return link ? cleanContent.replace(`[LINK:${link.text}](${link.href})`, `<a href=\"${link.href}\">${link.text}</a>`) : cleanContent;\n}\n\nfunction extractContentFromClipboardHtml(clipboardHtml: string): string[][] {\n const tablePattern = /<table[^>]*>([\\s\\S]*?)<\\/table>/i;\n const trPattern = /<tr[^>]*>([\\s\\S]*?)<\\/tr>/gi;\n const tdPattern = /<td[^>]*?>([\\s\\S]*?)<\\/td>/gi;\n\n try {\n const tableMatch = clipboardHtml.match(tablePattern);\n const tableContent = tableMatch ? tableMatch[1] : clipboardHtml;\n const rows = tableContent.match(trPattern) || [];\n\n return rows\n .map((row) => {\n const contents: string[] = [];\n let tdMatch;\n\n while ((tdMatch = tdPattern.exec(row)) !== null) {\n contents.push(processTableCell(tdMatch[1]));\n }\n\n return contents;\n })\n .filter((row) => row.length > 0);\n } catch (error) {\n console.warn('Failed to extract content from HTML:', error);\n return [];\n }\n}\n\nfunction extractAITableContentFromClipboardHtml(clipboardHtml: string): AITableContent | null {\n const aiTableFragment = clipboardHtml.match(aiTableAttributePattern);\n if (aiTableFragment && !!aiTableFragment.length) {\n return decodeClipboardJsonData(aiTableFragment[1]);\n }\n return null;\n}\n\nconst readClipboardData = async (): Promise<{ clipboardContent: string[][]; aiTableContent: AITableContent | null }> => {\n const clipboardData = await readFromClipboard();\n let clipboardContent: string[][] = [];\n let aiTableContent: AITableContent | null = null;\n\n if (clipboardData) {\n const clipboardHtml = clipboardData.html;\n const clipboardText = clipboardData.text;\n\n if (clipboardHtml) {\n aiTableContent = extractAITableContentFromClipboardHtml(clipboardHtml);\n clipboardContent = extractContentFromClipboardHtml(clipboardHtml);\n }\n\n if (!clipboardContent.length && clipboardText) {\n clipboardContent = extractContentFromClipboardText(clipboardText);\n }\n }\n\n return {\n clipboardContent,\n aiTableContent\n };\n};\n\nfunction getPasteValue(\n plainText: string,\n aiTableContent: AITableContent | null,\n recordIndex: number,\n fieldIndex: number,\n targetField: AITableField,\n references: AITableReferences\n): {\n value: FieldValue | null;\n newField: AITableField | null;\n} {\n let field: AITableField | null = null;\n let record: Partial<AITableRecord> | null = null;\n\n if (aiTableContent) {\n const { fields, records } = aiTableContent;\n field = fields[fieldIndex];\n record = records[recordIndex];\n }\n\n if (targetField.type === AITableFieldType.attachment || (field && field.type === AITableFieldType.attachment)) {\n return { value: null, newField: null };\n }\n if (targetField.type !== AITableFieldType.link) {\n plainText = extractText(plainText);\n }\n\n let originData = field && record ? { field, cellValue: getFieldValue(record, field) } : null;\n if (targetField.type === AITableFieldType.select) {\n let { existOptionIds, newOptions } = processPastedValueForSelect(plainText, targetField, originData);\n let newField: AITableField | null = null;\n let newOptionIds: string[] = [];\n\n if (newOptions.length) {\n newOptions = newOptions.map((option) => {\n return {\n ...option,\n _id: idCreator()\n };\n });\n newField = {\n ...targetField,\n settings: {\n ...targetField.settings,\n options: [...((targetField.settings as SelectSettings)?.options || []), ...newOptions]\n }\n };\n newOptionIds = newOptions.map((option) => option._id).filter((id) => !!id) as string[];\n }\n\n const selectFieldValue = newOptionIds?.length ? [...existOptionIds, ...newOptionIds] : existOptionIds;\n return {\n value: selectFieldValue,\n newField\n };\n }\n\n return { value: FieldModelMap[targetField.type].toFieldValue(plainText, targetField, originData, references), newField: null };\n}\n\nexport interface AITablePasteActions {\n updateFieldValue: (data: UpdateFieldValueOptions) => void;\n setField: (field: AITableField) => void;\n addRecord: (data: AddRecordOptions) => void;\n addField: (data: AddFieldOptions) => void;\n}\n\nfunction appendRecord(aiTable: AITable, actions: AITablePasteActions) {\n const allRecords = aiTable.records();\n const lastRecordId = allRecords.length > 0 ? allRecords[allRecords.length - 1]._id : '';\n actions.addRecord({\n originId: lastRecordId\n });\n}\n\nfunction appendField(aiTable: AITable, originField: AITableField | null, actions: AITablePasteActions) {\n const lastFieldId = aiTable.fields().length > 0 ? aiTable.fields()[aiTable.fields().length - 1]._id : '';\n let defaultFieldValue: Partial<AITableField>;\n if (originField) {\n defaultFieldValue = {\n ...originField,\n name: createDefaultFieldName(aiTable, FieldOptions.find((item) => item.type === originField.type)!),\n _id: idCreator()\n };\n } else {\n defaultFieldValue = createDefaultField(aiTable, AITableFieldType.text);\n }\n\n actions.addField({\n originId: lastFieldId,\n defaultValue: defaultFieldValue\n });\n}\n\nexport const writeToAITable = async (aiTable: AITable, actions: AITablePasteActions) => {\n const selectedCells = Array.from(aiTable.selection().selectedCells);\n if (!selectedCells.length) {\n return;\n }\n const { clipboardContent, aiTableContent } = await readClipboardData();\n if (!clipboardContent.length) {\n return;\n }\n\n const [firstCell] = selectedCells;\n const [startRecordId, startFieldId] = firstCell.split(':');\n const startRowIndex = aiTable.context!.visibleRowsIndexMap().get(startRecordId) ?? 0;\n const startColIndex = aiTable.context!.visibleColumnsIndexMap().get(startFieldId) ?? 0;\n const references = aiTable.context!.references();\n let isPasteSuccess = false;\n\n clipboardContent.forEach((row, i) => {\n const targetRowIndex = startRowIndex + i;\n if (targetRowIndex >= aiTable.context!.linearRows().length - 1) {\n appendRecord(aiTable, actions);\n }\n\n row.forEach((plainText, j) => {\n const targetColIndex = startColIndex + j;\n if (targetColIndex >= AITable.getVisibleFields(aiTable).length) {\n const originField = aiTableContent?.fields[j] || null;\n appendField(aiTable, originField, actions);\n }\n\n const targetRecord = aiTable.context!.linearRows()[targetRowIndex];\n const targetField = AITable.getVisibleFields(aiTable)[targetColIndex];\n const recordIndex = i;\n const fieldIndex = j;\n const { value, newField } = getPasteValue(plainText, aiTableContent, recordIndex, fieldIndex, targetField, references);\n\n if (newField) {\n actions.setField(newField);\n }\n\n if (value !== null) {\n try {\n actions.updateFieldValue({\n value,\n path: [targetRecord._id, targetField._id]\n });\n isPasteSuccess = true;\n } catch (error) {}\n }\n });\n });\n\n return isPasteSuccess;\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 { AITable, AITableField, AITableQueries } from '../core';\nimport { AITableReferences } from '../types';\nimport { transformCellValue } from './cell';\nimport { FieldModelMap } from './field/model';\n\nexport const isCellMatchKeywords = (\n aiTable: AITable,\n field: AITableField,\n recordId: string,\n keywords: string,\n references: AITableReferences\n) => {\n const cellValue = AITableQueries.getFieldValue(aiTable, [recordId, field._id]);\n const transformValue = transformCellValue(aiTable, field, cellValue);\n const fieldMethod = FieldModelMap[field.type];\n let cellFullText: string[] = fieldMethod.cellFullText(transformValue, field, references);\n return keywords && cellFullText.length && cellFullText.some((text) => text.toLowerCase().includes(keywords.toLowerCase()));\n};\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 { InjectionToken } from '@angular/core';\n\nexport const KO_CONTAINER_TOKEN = new InjectionToken<any>('KO_CONTAINER_TOKEN');\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 { ChangeDetectionStrategy, Component, computed, EventEmitter, input, output, Output } from '@angular/core';\nimport Konva from 'konva';\nimport { KoShape } from '../../angular-konva/components/shape.component';\nimport {\n AI_TABLE_OFFSET,\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';\nimport { KoEventObject } from '../../angular-konva';\nimport { TextConfig } from 'konva/lib/shapes/Text';\nimport { Context } from 'konva/lib/Context';\n\n@Component({\n selector: 'ai-table-text',\n template: ` <ko-text [config]=\"textConfig()\" (koClick)=\"onClick($event)\" (koMousemove)=\"onMousemove($event)\"></ko-text> `,\n standalone: true,\n imports: [KoShape],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableText {\n config = input.required<Konva.ShapeConfig>();\n\n // @Output() koClick = new EventEmitter<KoEventObject<MouseEvent>>();\n koClick = output<KoEventObject<MouseEvent>>();\n\n koMouseMove = output<KoEventObject<MouseEvent>>();\n\n textConfig = computed<TextConfig>(() => {\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 const tmpText = new Konva.Text({\n text,\n fontSize,\n fontFamily\n });\n const textBounds = tmpText.getClientRect();\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 hitFunc: function (context: Context) {\n context.beginPath();\n context.rect(AI_TABLE_OFFSET, (height! - textBounds.height) / 2 - AI_TABLE_OFFSET, textBounds.width, textBounds.height);\n context.closePath();\n context.fillStrokeShape(this as any);\n },\n ...rest\n };\n });\n\n onClick(e: KoEventObject<MouseEvent>) {\n this.koClick.emit(e);\n }\n onMousemove(e: KoEventObject<MouseEvent>) {\n this.koMouseMove.emit(e);\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 fontStyle = `${fontWeight} ${fontSize}px ${DEFAULT_FONT_FAMILY}`;\n const baselineOffset = verticalAlign === DEFAULT_TEXT_VERTICAL_ALIGN_TOP ? fontSize / 2 : 0;\n const fontStyleKey = `${fontWeight}-${fontSize}px`;\n const isUnderline = textDecoration === 'underline';\n this.ctx.font = fontStyle;\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 const cacheKey = `${fontStyleKey}-${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 } else {\n imageCache.imageMapOnload(() => {\n this.image(options, crossOrigin, allowDefault);\n });\n }\n return;\n }\n // Unloaded\n if (image == null) {\n imageCache.loadImage(url, url, { crossOrigin });\n imageCache.imageMapOnload(() => {\n this.image(options, crossOrigin, allowDefault);\n });\n return;\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 { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { KoShape } from '../../../angular-konva/components/shape.component';\nimport { AI_TABLE_CELL_PADDING, AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE, AI_TABLE_FIELD_HEAD_MORE, Colors } from '../../../constants';\nimport { KoContainer } from '../../../angular-konva/components/container.component';\nimport { getMousePosition, getTextWidth, handleMouseStyle, TextMeasure } from '../../../utils';\nimport { AITableText } from '../text.component';\nimport { AITableHoverCellConfig, AITableRender } from '../../../types';\nimport { KoEventObject } from '../../../angular-konva';\nimport { AITable, AITableFieldType } from '../../../core';\nimport { TextConfig } from 'konva/lib/shapes/Text';\nimport { drawer } from '../../drawers/drawer';\nimport { HoverCellComponent } from '../../interfaces';\n\n@Component({\n selector: 'ai-table-link',\n template: `\n @if (showLink()) {\n <ai-table-text [config]=\"textConfig()!\" (koClick)=\"linkClick($event)\" (koMouseMove)=\"linkMouseMove($event)\"></ai-table-text>\n }\n `,\n standalone: true,\n imports: [KoContainer, KoShape, AITableText],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableCellLink implements HoverCellComponent {\n static fieldType = AITableFieldType.link;\n\n config = input<AITableHoverCellConfig | undefined>();\n\n textOffset = AI_TABLE_CELL_PADDING + AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE;\n\n render = computed<AITableRender | undefined>(() => this.config()?.render);\n\n transformValue = computed<{ text: string; url: string }>(() => this.render()?.transformValue);\n\n showLink = computed<boolean>(() => !!this.transformValue()?.text);\n\n textConfig = computed<TextConfig | undefined>(() => {\n const render = this.config()?.render;\n if (render) {\n const { x, y, transformValue, field, columnWidth, rowHeight, style, zIndex } = render;\n let textRender: string | null = transformValue.text;\n if (textRender == null) {\n return;\n }\n\n textRender = textRender.replace(/\\r|\\n/g, ' ');\n const fontWeight = style?.fontWeight;\n const textMaxWidth = columnWidth - 2 * AI_TABLE_CELL_PADDING;\n const { text, textWidth } = drawer.textEllipsis({\n text: textRender,\n maxWidth: textMaxWidth,\n fontWeight\n });\n\n return {\n x,\n y,\n text,\n wrap: 'none',\n width: textWidth,\n fillStyle: Colors.primary,\n fill: Colors.primary,\n height: rowHeight + 2,\n lineHeight: 1.84,\n listening: true,\n ellipsis: true,\n textDecoration: 'underline',\n zIndex\n };\n }\n return;\n });\n\n linkClick(e: KoEventObject<MouseEvent>) {\n e.event.cancelBubble = true;\n window.open(this.transformValue().url, '_blank', 'noopener,noreferrer');\n }\n\n linkMouseMove(e: KoEventObject<MouseEvent>) {\n e.event.cancelBubble = true;\n const { aiTable, coordinate } = this.config()!;\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 } = aiTable;\n const { x, y } = pos;\n const curMousePosition = getMousePosition(x, y, coordinate, AITable.getVisibleFields(aiTable), context!, targetName);\n handleMouseStyle(AI_TABLE_FIELD_HEAD_MORE, curMousePosition.areaType, coordinate.container);\n }\n}\n","import { Constructor } from 'ngx-tethys/core';\nimport { AITableFieldType } from '../../../core';\nimport { HoverCellComponent } from '../../interfaces';\n\nimport * as cellComponents from '.';\n\nexport const componentMap: Partial<Record<AITableFieldType, Constructor<HoverCellComponent>>> = {};\n\nObject.values(cellComponents).forEach((cellComponent) => {\n componentMap[cellComponent.fieldType] = cellComponent;\n});\n","import { AITable, AITableQueries } from '../core';\nimport { componentMap } from '../renderer/components/cells/cells';\nimport { transformCellValue } from './cell';\nimport { getDetailByTargetName } from './common';\n\nexport function getHoverCell(aiTable: AITable) {\n const pointPosition = aiTable.context!.pointPosition();\n const { fieldId, recordId } = getDetailByTargetName(pointPosition.realTargetName!) ?? {};\n if (!recordId || !fieldId) {\n return;\n }\n const record = aiTable.recordsMap()[recordId!];\n const field = aiTable.fieldsMap()[fieldId!];\n\n if (!record || !field || !recordId || !fieldId) {\n return;\n }\n const cellValue = AITableQueries.getFieldValue(aiTable, [recordId, fieldId]);\n const transformValue = transformCellValue(aiTable, field, cellValue) || {};\n if (Object.keys(transformValue).length === 0) {\n return;\n }\n\n const renderComponentDefinition = componentMap[field?.type];\n if (!renderComponentDefinition) {\n return;\n }\n return {\n field,\n recordId,\n fieldId,\n renderComponentDefinition\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 { AIRecordFieldIdPath, AITable, AITableFieldType } from '../core';\nimport { AITableContextMenuOptions, AITableGridCellRenderSchema, AITableOpenEditOptions } from '../types';\nimport { getCellHorizontalPosition, getEditorBoxOffset, getEditorSpace, getHoverEditorBoxOffset, getHoverEditorSpace } from '../utils';\nimport { AITableContextMenu } from '../components/context-menu/context-menu.component';\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 const filedRenderSchema = this.aiFieldRenderers && this.aiFieldRenderers[type];\n if (filedRenderSchema && filedRenderSchema.editor) {\n return {\n component: filedRenderSchema.editor,\n isInternalComponent: false\n };\n }\n return {\n component: GRID_CELL_EDITOR_MAP[type],\n isInternalComponent: true\n };\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 cell: AIRecordFieldIdPath = [recordId, fieldId];\n const { rowIndex, columnIndex } = AITable.getCellIndex(aiTable, cell)!;\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 isFrozenColumn = AITable.isFrozenColumn(aiTable, columnIndex);\n const scrollLeft = isFrozenColumn ? 0 : scrollState().scrollLeft;\n const scrollTop = scrollState().scrollTop;\n const originPosition = {\n x: originX + originOffset - scrollLeft + originRect.x,\n y: originY - 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, references } = options;\n const { component, isInternalComponent } = this.getEditorComponent(this.aiTable.fieldsMap()[fieldId].type);\n const offsetOriginPosition = this.getOriginPosition(aiTable, options);\n this.cellEditorPopoverRef = this.thyPopover.open(component, {\n viewContainerRef: isInternalComponent ? undefined : options?.viewContainerRef,\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 references,\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 const field = aiTable.fieldsMap()[fieldId];\n if (field.type === AITableFieldType.text || field.type === AITableFieldType.richText) {\n return;\n }\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 openContextMenu(aiTable: AITable, options: AITableContextMenuOptions) {\n const { origin, position, menuItems, targetName, viewContainerRef } = options;\n const ref = this.thyPopover.open(AITableContextMenu, {\n origin: origin as HTMLElement,\n originPosition: position,\n placement: 'bottomLeft',\n insideClosable: true,\n viewContainerRef,\n initialState: {\n aiTable,\n menuItems,\n targetName,\n position\n }\n });\n return ref;\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 AITableField,\n AITableFields,\n AITableFieldType,\n AITableRecords,\n AITableSelectOptionStyle,\n AITableValue,\n createAITable,\n createDefaultField,\n MoveFieldOptions,\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, AITableContextMenuItem, AITableReferences } from './types';\nimport { AITableFieldSetting } 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 aiContextMenuItems = input<AITableContextMenuItem[]>([]);\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 aiKeywords = input<string>();\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 aiMoveField = output<MoveFieldOptions>();\n\n aiUpdateFieldValue = output<UpdateFieldValueOptions>();\n\n aiSetField = output<AITableField>();\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, this.gridData);\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()?.fieldRenderers);\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.aiRecords();\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()?.fieldSettingComponent) {\n (popoverRef.componentInstance as AITableFieldSetting).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, 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 { AITableFieldMenu } from './components/field-menu/field-menu.component';\nimport { AITableFieldSetting } from './components/field-setting/field-setting.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';\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 AITableFieldSetting,\n ThyDatePickerFormatPipe,\n ThyFlexibleText,\n ThyStopPropagationDirective,\n AITableFieldMenu,\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 <!-- [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 <div\n #cell\n class=\"grid-cell\"\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 {\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 { 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({ isHoverRow, isCheckedRow }: Pick<AITableCell, 'isHoverRow' | 'isCheckedRow'>) {\n const rowHeight = this.rowHeight;\n const fill = isCheckedRow ? this.colors.itemActiveBgColor : 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, isCheckedRow }: Pick<AITableCell, 'isHoverRow' | 'isCheckedRow'>) {\n super.renderAddFieldBlank({ isHoverRow, isCheckedRow });\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, isCheckedRow }: Pick<AITableCell, 'isHoverRow' | 'isCheckedRow'>) {\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, isCheckedRow });\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, isCheckedRow }: Pick<AITableCell, 'isHoverRow' | 'isCheckedRow'>) {\n this.renderFirstCell({\n isHoverRow\n });\n this.renderCommonCell({\n isHoverRow\n });\n this.renderLastCell({\n isHoverRow,\n isCheckedRow\n });\n }\n}\n\nexport const addRowLayout = new AddRowLayout();\n","// 自动生成的图标常量文件\nexport const apk = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/APK</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/APK\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"APK\" transform=\"translate(2.000000, 0.000000)\">\n <path d=\"M14.1176471,0 L2.74128887,0 C1.22731689,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.22731689,24 2.74128887,24 L17.2587111,24 C18.7726831,24 20,22.765548 20,21.2427744 L20,6 C20,6 14.1176471,0 14.1176471,0 Z\" id=\"路径\" fill=\"#78B354\"></path>\n <path d=\"M12.4981525,12.5063279 L13.3031073,11.0370821 C13.3468152,10.9603305 13.3176766,10.8616498 13.2393665,10.8196191 C13.1628776,10.7775885 13.0645347,10.8049998 13.0226479,10.8835788 L12.2085874,12.367444 C11.5256507,12.0640922 10.7607616,11.8941421 9.95216453,11.8941421 C9.14356748,11.8941421 8.37867837,12.0640922 7.69574167,12.3656165 L6.88168113,10.8835788 C6.83979434,10.8049998 6.74145146,10.7775885 6.66496255,10.8196191 C6.58665247,10.8616498 6.55751384,10.9603305 6.60122179,11.0370821 L7.40617651,12.5063279 C5.8254057,13.3250121 4.75638212,14.881974 4.75638212,16.6673635 L15.1461281,16.6673635 C15.1479469,14.8801466 14.0789234,13.3250121 12.4981525,12.5063279 Z M7.58829297,14.7832933 C7.34789925,14.7832933 7.15303464,14.5877594 7.15303464,14.3465399 C7.15303464,14.1053205 7.34789925,13.9097865 7.58829297,13.9097865 C7.82868668,13.9097865 8.02355129,14.1053205 8.02355129,14.3465399 C8.02173013,14.5877594 7.82686552,14.7832933 7.58829297,14.7832933 Z M12.3178573,14.7832933 C12.0774635,14.7832933 11.8825989,14.5877594 11.8825989,14.3465399 C11.8825989,14.1053205 12.0774635,13.9097865 12.3178573,13.9097865 C12.558251,13.9097865 12.7531156,14.1053205 12.7531156,14.3465399 C12.7512944,14.5877594 12.5564298,14.7832933 12.3178573,14.7832933 Z\" id=\"形状\" fill=\"#FFFFFF\" fill-rule=\"nonzero\"></path>\n <path d=\"M14.1176471,0 L20,6 L15.3176471,6 C14.6549054,6 14.1176471,5.4627417 14.1176471,4.8 L14.1176471,0 L14.1176471,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const bak = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/BAK </title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/BAK-\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"BAK\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#E75A71\"></path>\n <path d=\"M5.75267634,16.8 C6.25452726,16.8 6.64412206,16.6941176 6.92146073,16.4823529 C7.24502251,16.2252101 7.41010505,15.8319328 7.41010505,15.287395 C7.41010505,14.9243697 7.33086543,14.6294118 7.17238619,14.410084 C7.01390695,14.1907563 6.77618809,14.0470588 6.46583292,13.9789916 C6.70355178,13.8806723 6.88184092,13.7294118 7.01390695,13.5327731 C7.14597299,13.3210084 7.212006,13.0638655 7.212006,12.7613445 C7.212006,12.3453782 7.08654327,12.0201681 6.83561781,11.7781513 C6.57148574,11.5210084 6.21490745,11.4 5.75267634,11.4 L3.6,11.4 L3.6,16.8 L5.75267634,16.8 Z M5.56118059,13.6915966 L4.31975988,13.6915966 L4.31975988,12.0806723 L5.57438719,12.0806723 C5.89134567,12.0806723 6.12906453,12.1411765 6.27433717,12.2697479 C6.4196098,12.3907563 6.49224612,12.587395 6.49224612,12.8596639 C6.49224612,13.1470588 6.4196098,13.3588235 6.27433717,13.494958 C6.12906453,13.6235294 5.89134567,13.6915966 5.56118059,13.6915966 Z M5.65362681,16.1193277 L4.31975988,16.1193277 L4.31975988,14.3647059 L5.67343672,14.3647059 C6.0168084,14.3647059 6.27433717,14.4327731 6.43941971,14.5764706 C6.60450225,14.7201681 6.69034517,14.9546218 6.69034517,15.2722689 C6.69034517,15.5823529 6.57808904,15.8092437 6.36678339,15.9529412 C6.19509755,16.0588235 5.95737869,16.1193277 5.65362681,16.1193277 Z M8.44022011,16.8 L8.88264132,15.4084034 L10.9098549,15.4084034 L11.3522761,16.8 L12.1248624,16.8 L10.3089545,11.4 L9.49014507,11.4 L7.67423712,16.8 L8.44022011,16.8 Z M10.691946,14.7277311 L9.10055028,14.7277311 L9.88634317,12.2848739 L9.91275638,12.2848739 L10.691946,14.7277311 Z M13.3068534,16.8 L13.3068534,14.9319328 L13.9209605,14.2588235 L15.835918,16.8 L16.8,16.8 L14.4096048,13.7218487 L16.4962481,11.4 L15.5849925,11.4 L13.3068534,14.0092437 L13.3068534,11.4 L12.5870935,11.4 L12.5870935,16.8 L13.3068534,16.8 Z\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const bat = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/BAT</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/BAT\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"bat\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#378FE8\"></path>\n <path d=\"M5.87562136,16.8 C6.40613432,16.8 6.8179799,16.6941176 7.11115812,16.4823529 C7.45319937,16.2252101 7.62771021,15.8319328 7.62771021,15.287395 C7.62771021,14.9243697 7.543945,14.6294118 7.3764146,14.410084 C7.20888419,14.1907563 6.95758858,14.0470588 6.6295082,13.9789916 C6.88080381,13.8806723 7.06927552,13.7294118 7.20888419,13.5327731 C7.34849286,13.3210084 7.4182972,13.0638655 7.4182972,12.7613445 C7.4182972,12.3453782 7.28566896,12.0201681 7.02041248,11.7781513 C6.74119513,11.5210084 6.36425172,11.4 5.87562136,11.4 L3.6,11.4 L3.6,16.8 L5.87562136,16.8 Z M5.67318879,13.6915966 L4.36086727,13.6915966 L4.36086727,12.0806723 L5.68714966,12.0806723 C6.02221047,12.0806723 6.27350608,12.1411765 6.42707562,12.2697479 C6.58064516,12.3907563 6.65742993,12.587395 6.65742993,12.8596639 C6.65742993,13.1470588 6.58064516,13.3588235 6.42707562,13.494958 C6.27350608,13.6235294 6.02221047,13.6915966 5.67318879,13.6915966 Z M5.77091486,16.1193277 L4.36086727,16.1193277 L4.36086727,14.3647059 L5.79185616,14.3647059 C6.15483871,14.3647059 6.42707562,14.4327731 6.60158646,14.5764706 C6.7760973,14.7201681 6.86684294,14.9546218 6.86684294,15.2722689 C6.86684294,15.5823529 6.74817557,15.8092437 6.52480169,15.9529412 C6.34331042,16.0588235 6.09201481,16.1193277 5.77091486,16.1193277 Z M8.71665785,16.8 L9.18434691,15.4084034 L11.32734,15.4084034 L11.7950291,16.8 L12.6117398,16.8 L10.6921206,11.4 L9.8265468,11.4 L7.90692755,16.8 L8.71665785,16.8 Z M11.0969857,14.7277311 L9.41470122,14.7277311 L10.2453728,12.2848739 L10.2732946,12.2848739 L11.0969857,14.7277311 Z M15.1386568,16.8 L15.1386568,12.1033613 L16.8,12.1033613 L16.8,11.4 L12.7164463,11.4 L12.7164463,12.1033613 L14.38477,12.1033613 L14.38477,16.8 L15.1386568,16.8 Z\" id=\"BAT\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const cs = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/C#</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/C#\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"c#\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#78B354\"></path>\n <path d=\"M9.92568659,18 C10.3457189,17.993617 10.7592892,17.9425532 11.1663974,17.8468085 C11.4894992,17.7702128 11.7996769,17.6585106 12.0969305,17.5117021 L11.6122779,16.037234 C11.3731826,16.1585106 11.1211632,16.2446809 10.8562197,16.2957447 C10.5912763,16.3468085 10.3231018,16.3723404 10.0516963,16.3723404 C9.76736672,16.3723404 9.49596123,16.3117021 9.23747981,16.1904255 C8.96607431,16.056383 8.73021002,15.8776596 8.52988691,15.6542553 C8.12924071,15.1819149 7.93214863,14.6361702 7.93861066,14.0170213 C7.93861066,13.7234043 7.97415186,13.4329787 8.04523425,13.1457447 C8.12924071,12.8329787 8.27786753,12.5489362 8.4911147,12.293617 C8.6914378,12.0765957 8.93053312,11.9106383 9.20840065,11.7957447 C9.49919225,11.693617 9.80290792,11.6393617 10.1195477,11.6329787 C10.6558966,11.6265957 11.1793215,11.7191489 11.6898223,11.9106383 L11.7576737,10.3882979 C11.1567044,10.1393617 10.5298869,10.0117021 9.87722132,10.0053191 C9.57996769,10.0117021 9.28917609,10.0404255 9.00484653,10.0914894 C8.73344103,10.1489362 8.47172859,10.2287234 8.21970921,10.3308511 C7.72859451,10.5414894 7.30533118,10.8446809 6.94991922,11.2404255 C6.59450727,11.6617021 6.33925687,12.1340426 6.18416801,12.6574468 C6.06785137,13.1042553 6.00646204,13.5574468 6,14.0170213 C6,14.4893617 6.06138934,14.9489362 6.18416801,15.3957447 C6.26817447,15.6638298 6.37802908,15.9223404 6.51373183,16.1712766 C6.64297254,16.4010638 6.79483037,16.6148936 6.96930533,16.812766 C7.33117932,17.1957447 7.76090468,17.4893617 8.25848142,17.693617 C8.79483037,17.8978723 9.35056543,18 9.92568659,18 Z M13.1728595,12.4659574 L13.3231018,11.3601064 L14.0306947,11.3601064 L13.8707593,12.4659574 L14.1470113,12.4659574 L14.3069467,11.3601064 L14.8594507,11.3601064 L14.8594507,11.1111702 L14.3408724,11.1111702 L14.447496,10.3547872 L15,10.3547872 L15,10.1058511 L14.4814216,10.1058511 L14.641357,9 L14.365105,9 L14.2051696,10.1058511 L13.4975767,10.1058511 L13.6672052,9 L13.3909532,9 L13.2310178,10.1058511 L12.6785137,10.1058511 L12.6785137,10.3547872 L13.1970921,10.3547872 L13.0904685,11.1111702 L12.5379645,11.1111702 L12.5379645,11.3601064 L13.0565428,11.3601064 L12.8966074,12.4659574 L13.1728595,12.4659574 Z M14.0646204,11.1111702 L13.3570275,11.1111702 L13.4636511,10.3547872 L14.1712439,10.3547872 L14.0646204,11.1111702 Z\" id=\"形状结合\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const css = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/CSS</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/CSS\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"css\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#53ADEF\"></path>\n <polygon id=\"路径\" fill=\"#FFFFFF\" points=\"13.6581388 11.660821 10.231646 13.1830211 10.2234617 13.1863691 13.5370112 13.1863691 13.1578054 17.7139099 10.2371022 18.6 10.231646 18.598326 10.231646 18.6 7.29511973 17.6971702 7.10524401 15.41666 8.56368596 15.41666 8.6580782 16.5979275 10.2185511 17.007493 10.231646 17.0035871 10.231646 17.0052611 11.8472264 16.5326425 11.9579873 14.6298924 10.231646 14.6243125 7.01085177 14.6131527 6.90009093 13.1858111 10.231646 11.7445197 10.4258866 11.660821 6.77405273 11.660821 6.6 10.2 13.8 10.2 13.6581388 11.6602631\"></polygon>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const csv = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/CSV</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/CSV\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"csv\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#14BC64\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n <path d=\"M5.86532461,16.8 C6.37684952,16.8 6.81529945,16.6398922 7.18067438,16.3196765 C7.57262204,15.977628 7.81841973,15.5045822 7.92471062,14.9005391 L7.22053347,14.9005391 C7.12752894,15.3080863 6.96144942,15.6137466 6.72229492,15.8175202 C6.49642677,16.0067385 6.20412682,16.1013477 5.85868143,16.1013477 C5.32722698,16.1013477 4.93527932,15.919407 4.68283845,15.5555256 C4.44368395,15.2134771 4.32410669,14.7331536 4.32410669,14.1072776 C4.32410669,13.5032345 4.44368395,13.0229111 4.68948163,12.6735849 C4.94856568,12.2878706 5.33387016,12.0986523 5.84539507,12.0986523 C6.19084046,12.0986523 6.46985405,12.1787062 6.69572219,12.3460916 C6.92159034,12.5134771 7.07438349,12.7754717 7.15410166,13.1247978 L7.85827881,13.1247978 C7.78520382,12.6008086 7.57262204,12.1787062 7.22717665,11.8730458 C6.86844489,11.5528302 6.41006543,11.4 5.85868143,11.4 C5.10135883,11.4 4.53004529,11.6692722 4.13145445,12.222372 C3.7727227,12.709973 3.6,13.3358491 3.6,14.1072776 C3.6,14.8932615 3.76607952,15.5191375 4.11152491,15.9849057 C4.50347257,16.5234501 5.08807247,16.8 5.86532461,16.8 Z M10.3893306,16.8 C10.9872169,16.8 11.4522396,16.6690027 11.7843986,16.4070081 C12.1165576,16.1377358 12.2826371,15.7738544 12.2826371,15.3080863 C12.2826371,14.8277628 12.0766985,14.4566038 11.6714645,14.1873315 C11.4854555,14.0636119 11.0669351,13.8962264 10.4291897,13.6778976 C9.98409663,13.532345 9.71172622,13.4231806 9.60543533,13.3576819 C9.36628083,13.219407 9.25334675,13.0374663 9.25334675,12.8045822 C9.25334675,12.5425876 9.35299446,12.3533693 9.55893306,12.2369272 C9.72501258,12.1350404 9.96416709,12.084097 10.2763966,12.084097 C10.6351283,12.084097 10.9008556,12.1568733 11.0868646,12.3097035 C11.2728737,12.4552561 11.3924509,12.7026954 11.4588827,13.0374663 L12.1763463,13.0374663 C12.129844,12.4698113 11.9438349,12.0549865 11.6116759,11.7857143 C11.2994464,11.5237197 10.8676397,11.4 10.3162557,11.4 C9.81137393,11.4 9.39285355,11.5237197 9.06069451,11.771159 C8.70860594,12.0331536 8.53588324,12.3897574 8.53588324,12.848248 C8.53588324,13.2994609 8.71524912,13.6487871 9.08062406,13.8889488 C9.22677403,13.9762803 9.58550579,14.1145553 10.1701057,14.3183288 C10.694917,14.4929919 11.0071465,14.609434 11.1134373,14.667655 C11.4123805,14.8350404 11.5651736,15.0606469 11.5651736,15.351752 C11.5651736,15.5846361 11.4588827,15.7665768 11.246301,15.8975741 C11.0337192,16.0285714 10.7480624,16.1013477 10.3893306,16.1013477 C9.99073981,16.1013477 9.69843986,16.0212938 9.50578762,15.861186 C9.29320584,15.6865229 9.16034222,15.3881402 9.10719678,14.980593 L8.38973327,14.980593 C8.42959235,15.6355795 8.64217413,16.115903 9.03412179,16.4215633 C9.35963764,16.6690027 9.81137393,16.8 10.3893306,16.8 Z M15.0993457,16.6981132 L16.8,11.5018868 L16.0161047,11.5018868 L14.6741822,15.8102426 L14.6542526,15.8102426 L13.305687,11.5018868 L12.5217916,11.5018868 L14.2224459,16.6981132 L15.0993457,16.6981132 Z\" id=\"CSV\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const defaultFile = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/文件</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/文件\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"pdf\" transform=\"translate(2.000000, 0.000000)\">\n <path d=\"M14.1176471,0 L2.74128887,0 C1.22731689,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.22731689,24 2.74128887,24 L17.2587111,24 C18.7726831,24 20,22.765548 20,21.2427744 L20,6 C20,6 14.1176471,0 14.1176471,0 Z\" id=\"路径\" fill=\"#378FE8\"></path>\n <path d=\"M14.1176471,0 L20,6 L15.3176471,6 C14.6549054,6 14.1176471,5.4627417 14.1176471,4.8 L14.1176471,0 L14.1176471,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n <path d=\"M14.5880967,13.1173301 C14.8152676,13.1173301 15,13.3453703 15,13.6274691 L15,13.6274691 L14.0557428,17.489861 C14.0557428,17.7719598 13.8716345,18 13.6438394,18 L13.6438394,18 L5.9674589,18 C5.74028797,18 5.55555556,17.7719598 5.55555556,17.489861 L5.55555556,17.489861 L6.49981277,13.6274691 C6.49981277,13.3453703 6.68454518,13.1173301 6.91171612,13.1173301 L6.91171612,13.1173301 Z M8.54763993,10 C8.74912861,10 9.00458747,10.1412782 9.17909105,10.4590101 C9.3284104,10.7759998 9.5345565,10.9507235 9.79752937,10.9831811 L9.79752937,10.9831811 L9.89693802,10.9920475 C10.2885983,11.0188347 11.410488,11.0333709 13.2626071,11.0356559 C13.712505,11.0318676 13.8888889,11.3623841 13.8888889,11.6829992 L13.8888889,11.6829992 L13.8888889,12.2278307 L6.32346878,12.2278307 C6.07820429,12.2278307 5.88031363,12.4654087 5.88031363,12.7566149 L5.88031363,12.7566149 L5,15.9677076 L5,15.9677076 L5,10.8633729 C5,10.0518557 5.7639779,10 5.96546658,10 Z\" id=\"形状结合\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const doc = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/DOC</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/DOC\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"word\" transform=\"translate(1.800000, 0.000000)\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#378FE8\"></path>\n <polygon id=\"W\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" points=\"8.75949099 18 10.1847296 12.5848739 10.2254507 12.5848739 11.640509 18 12.9028632 18 15 10.8 13.6562036 10.8 12.2920467 16.2756303 12.2513256 16.2756303 10.8159067 10.8 9.58409332 10.8 8.14867444 16.2756303 8.10795334 16.2756303 6.74379639 10.8 5.4 10.8 7.48695652 18\"></polygon>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const exe = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/EXE</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/EXE\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"EXE\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z M8.15340312,5.27127736 L6.60000001,5.27127736 L6.60000001,6.80307537 L8.15340312,6.80307537 L8.15340312,8.33487339 L6.60000001,8.33487339 L6.60000001,9.8666714 L8.15340312,9.8666714 L8.15340312,11.3984694 L6.59997259,11.3984694 L6.59997259,9.8666714 L5.04656949,9.8666714 L5.04656949,8.33487339 L6.59997259,8.33487339 L6.59997259,6.80307537 L5.04656949,6.80307537 L5.04656949,5.27127736 L6.59997259,5.27127736 L6.59997259,3.73947935 L5.04656949,3.73947935 L5.04656949,2.20768134 L6.60000001,2.20768134 L6.60000001,3.73947935 L8.15340312,3.73947935 L8.15340312,5.27127736 Z\" id=\"形状\" fill=\"#667580\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n <path d=\"M8.181848,19.8 L8.181848,19.3310924 L5.97211591,19.3310924 L5.97211591,18.1865546 L7.96664844,18.1865546 L7.96664844,17.7176471 L5.97211591,17.7176471 L5.97211591,16.6689076 L8.09261892,16.6689076 L8.09261892,16.2 L5.4,16.2 L5.4,19.8 L8.181848,19.8 Z M9.1213778,19.8 L10.1238928,18.3731092 L11.1264079,19.8 L11.8244943,19.8 L10.4650629,17.9394958 L11.7352652,16.2 L11.0371788,16.2 L10.1238928,17.5008403 L9.21060689,16.2 L8.5125205,16.2 L9.77222526,17.9394958 L8.42329142,19.8 L9.1213778,19.8 Z M15,19.8 L15,19.3310924 L12.7902679,19.3310924 L12.7902679,18.1865546 L14.7848004,18.1865546 L14.7848004,17.7176471 L12.7902679,17.7176471 L12.7902679,16.6689076 L14.9107709,16.6689076 L14.9107709,16.2 L12.218152,16.2 L12.218152,19.8 L15,19.8 Z\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const fla = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/FLA</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/FLA\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"FLA\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#F26225\"></path>\n <path d=\"M4.41013514,16.8 L4.41013514,14.3798319 L7.04864865,14.3798319 L7.04864865,13.6764706 L4.41013514,13.6764706 L4.41013514,12.1033613 L7.20472973,12.1033613 L7.20472973,11.4 L3.6,11.4 L3.6,16.8 L4.41013514,16.8 Z M11.6418919,16.8 L11.6418919,16.0966387 L8.72094595,16.0966387 L8.72094595,11.4 L7.91824324,11.4 L7.91824324,16.8 L11.6418919,16.8 Z M12.6527027,16.8 L13.1506757,15.4084034 L15.4324324,15.4084034 L15.9304054,16.8 L16.8,16.8 L14.7560811,11.4 L13.8344595,11.4 L11.7905405,16.8 L12.6527027,16.8 Z M15.1871622,14.7277311 L13.3959459,14.7277311 L14.2804054,12.2848739 L14.3101351,12.2848739 L15.1871622,14.7277311 Z\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const html = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/HTML</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/HTML\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"HTML\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#F26225\"></path>\n <polygon id=\"路径\" fill=\"#FFFFFF\" points=\"13.72 11.6913838 8.24 11.6913838 8.34 13.1169713 13.54 13.1169713 13.18 17.7446475 10.16 18.6 7.24 17.7446475 7.04 15.3759791 8.5 15.3759791 8.6 16.5164491 10.16 16.9770235 11.8 16.5164491 11.9 14.6302872 6.96 14.6302872 6.6 10.2 13.8 10.2 13.72 11.6913838\"></polygon>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const img = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/图片</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/图片\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"excel\" transform=\"translate(1.800000, 0.000000)\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#53ADEF\"></path>\n <path d=\"M13.824,10.32 C14.4072127,10.32 14.88,10.7927873 14.88,11.376 L14.88,16.344 C14.88,16.9272127 14.4072127,17.4 13.824,17.4 L6.696,17.4 C6.1127873,17.4 5.64,16.9272127 5.64,16.344 L5.64,11.376 C5.64,10.7927873 6.1127873,10.32 6.696,10.32 L13.824,10.32 Z M11.32246,13.5878637 L9.69467725,15.2453409 C9.55321852,15.4095412 9.31061521,15.4382669 9.13500743,15.3157947 L9.11341755,15.299697 L8.30168,14.6534455 L6.34,16.0480344 L6.34,16.7548593 C6.34,16.7645794 6.34633183,16.7728232 6.35511699,16.7757318 L6.36210526,16.7768528 L14.1578947,16.7768528 C14.1676669,16.7768528 14.175951,16.7705551 14.1788737,16.7618135 L14.18,16.7548593 L14.18,16.0816037 L11.32246,13.5878637 Z M8.24842105,11.5809568 C7.70719972,11.5809568 7.26842105,12.0175157 7.26842105,12.5559989 C7.26842105,13.0944822 7.70719972,13.5310411 8.24842105,13.5310411 C8.78964239,13.5310411 9.22842105,13.0944822 9.22842105,12.5559989 C9.22842105,12.0175157 8.78964239,11.5809568 8.24842105,11.5809568 Z\" id=\"形状结合\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const ipa = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/IPA</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/IPA\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"IPA\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#53ADEF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n <path d=\"M5.43226366,16.8 L5.43226366,11.4 L4.8,11.4 L4.8,16.8 L5.43226366,16.8 Z M7.86244579,16.8 L7.86244579,14.5915966 L9.49384215,14.5915966 C10.7739809,14.5915966 11.421856,14.0546218 11.421856,12.9882353 C11.421856,11.9294118 10.7817866,11.4 9.50164788,11.4 L7.22237641,11.4 L7.22237641,16.8 L7.86244579,16.8 Z M9.46261925,14.0546218 L7.86244579,14.0546218 L7.86244579,11.9369748 L9.46261925,11.9369748 C9.90754553,11.9369748 10.2353859,12.0201681 10.4539462,12.2016807 C10.6725065,12.3605042 10.7817866,12.6252101 10.7817866,12.9882353 C10.7817866,13.3512605 10.6725065,13.6159664 10.461752,13.789916 C10.2431917,13.9638655 9.91535126,14.0546218 9.46261925,14.0546218 Z M12.3585429,16.8 L12.951778,15.287395 L15.5120555,15.287395 L16.1052905,16.8 L16.8,16.8 L14.6065915,11.4 L13.8650477,11.4 L11.6716392,16.8 L12.3585429,16.8 Z M15.3091067,14.7655462 L13.1547268,14.7655462 L14.224111,12.0655462 L14.2553339,12.0655462 L15.3091067,14.7655462 Z\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const java = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/JAVA</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/JAVA\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"java\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#F59203\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n <path d=\"M12.6345082,9.54776364 C12.3269346,9.75591328 12.0273145,9.93314034 11.6981721,10.1903736 C11.449332,10.3857816 11.0000782,10.6528974 10.9758547,11.0127809 C10.9383581,11.5600927 11.8159607,12.0662807 11.3504576,12.7602158 C11.1739354,13.0247912 10.8743257,13.1379515 10.4944135,13.2998766 C10.4489634,13.2201892 10.5932879,13.1532534 10.655008,13.0684554 C11.2382997,12.2562593 10.0478143,11.9865933 10.200113,10.9869589 C10.3471026,10.0207975 11.5322787,9.68386685 12.6345082,9.54776364 L12.6345082,9.54776364 Z M8.91639428,12.8883592 C8.64099764,13.0117208 8.18079344,13.0349924 7.98005813,13.2995579 C8.18344807,13.4461911 8.48041354,13.4407717 8.75581018,13.453842 C9.88457556,13.5026069 11.2970333,13.4101679 12.2599157,13.2482427 C12.2920926,13.3151885 12.1261993,13.4305704 12.0190292,13.5051671 C11.4118355,13.9316577 9.52324579,14.052469 8.22061282,13.967681 C7.78463208,13.9393087 6.78690772,13.8290175 6.77596776,13.4538321 C6.76269464,12.9989692 7.98503556,12.9502044 8.48803522,12.9141812 C8.58692001,12.9065302 8.77172757,12.8679567 8.91606245,12.8883592 L8.91639428,12.8883592 Z M8.35466103,14.044828 C8.48041354,14.0601299 8.26639474,14.1321664 8.3012367,14.2246154 C8.76144089,14.661626 10.192481,14.5382744 10.8958945,14.4043927 C11.0428736,14.3760205 11.190195,14.2912224 11.2970333,14.3014337 C11.5644661,14.3247053 11.7356686,14.6227436 11.9659367,14.6613072 C11.1526984,15.0135398 9.58264303,15.1805755 8.43495308,14.9695568 C8.13799798,14.9156813 7.62171482,14.7613972 7.60579743,14.5325362 C7.58157398,14.2214175 8.11676097,14.0904149 8.35466103,14.0441904 L8.35466103,14.044828 Z M8.70238585,15.0986466 C8.78533252,15.1244686 8.67285314,15.1681427 8.67550777,15.2016057 C8.9190489,15.6077137 10.1227971,15.4636307 10.7353,15.3300679 C10.8583979,15.3016956 10.9814958,15.2194579 11.0830249,15.2271088 C11.3932531,15.2475114 11.5110417,15.5586201 11.7784745,15.6124855 C10.925085,16.1135828 8.85732886,16.3166318 8.00660439,15.6896326 C7.96645318,15.2322095 8.34900958,15.1808943 8.70205402,15.0986466 L8.70238585,15.0986466 Z M7.9266338,15.8697288 C7.67247416,15.931564 7.01452111,15.8439068 6.99030802,16.1779684 C6.98234415,16.3064306 7.21493496,16.4581644 7.36491092,16.5120299 C8.2368724,16.8282392 9.98909106,16.877014 11.4307393,16.7176292 C12.099653,16.6430424 13.3568256,16.4272319 13.1962415,15.7667697 C13.3969768,15.7900413 13.5761432,15.9134029 13.5973802,16.1008313 C13.6776827,16.8100682 11.9815326,17.1081066 11.2970333,17.180153 C9.80693814,17.3369775 7.94521618,17.3060649 6.80317767,16.9232286 C6.4312294,16.799867 5.98197554,16.570996 6.00055791,16.2292935 C6.03274525,15.6536094 7.47705847,15.4942345 7.92664417,15.86941 L7.9266338,15.8697288 Z M10.2004449,18 C9.19742163,17.8944906 8.23156315,17.7532768 7.41832489,17.409024 C9.54481462,17.89991 12.6451267,17.8638968 14.1325672,16.818038 C14.2128697,16.7616222 14.2878524,16.6510122 14.4,16.6637638 C14.0253971,17.7430756 12.5863931,17.8176723 11.3504576,18 L10.200113,18 L10.2004449,18 Z M10.8958945,7.8 C11.0830249,7.96957611 11.2167309,8.28578544 11.2167309,8.62239731 C11.2167309,9.61692104 10.1201425,10.1926051 9.58496583,10.8581779 C9.46716683,11.0073615 9.31487844,11.2359136 9.31753306,11.4749759 C9.32284231,12.0171871 9.90614439,12.6237938 10.1201425,13.0684554 C9.74554992,12.8319434 9.29098681,12.5160529 8.96980825,12.1434178 C8.64896151,11.773343 8.32778295,11.1721557 8.62208343,10.6528974 C9.06337342,9.87161396 10.3769567,9.40654984 10.8424702,8.57140095 C10.9549495,8.36835193 11.0432055,8.05755206 10.8958945,7.80031879 L10.8958945,7.8 Z M12.4742559,13.1456024 C13.0253603,12.6932799 13.95871,12.870507 13.9988612,13.6339482 C14.0443113,14.5283819 13.0250285,15.0294693 12.2867834,15.0731434 C12.629199,14.7594745 13.5333478,14.2558468 13.3568256,13.5312979 C13.2844974,13.2383602 12.9045956,13.0611232 12.4742456,13.1459212 L12.4742559,13.1456024 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const js = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/JS</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/JS\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"js\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#FBC100\"></path>\n <path d=\"M9.16868571,9.76744186 L7.45714286,9.76744186 L7.45714286,14.1104651 C7.45714286,15.1831395 7.07314286,15.4866279 6.3984,15.4866279 C6.08571429,15.4866279 5.80045714,15.4343023 5.58102857,15.3610465 L5.4,16.6325581 C5.71268571,16.7372093 6.20091429,16.8 6.57394286,16.8 C8.11542857,16.8 9.16868571,16.1093023 9.16868571,14.1209302 L9.16868571,9.76744186 Z M12.9099429,9.6 C11.2477714,9.6 10.2,10.5 10.2,11.6877907 C10.2,12.7133721 11.0064,13.3517442 12.1858286,13.7651163 C13.0361143,14.052907 13.3707429,14.3145349 13.3707429,14.7383721 C13.3707429,15.2040698 12.9812571,15.5023256 12.2461714,15.5023256 C11.5659429,15.5023256 10.9460571,15.2825581 10.5236571,15.0680233 L10.2,16.3604651 C10.6004571,16.5802326 11.3465143,16.7947674 12.1529143,16.7947674 C14.0948571,16.7947674 15,15.8005814 15,14.6337209 C15,13.6395349 14.424,13.0011628 13.1732571,12.5459302 C12.2461714,12.1953488 11.8621714,11.9965116 11.8621714,11.5517442 C11.8621714,11.2011628 12.1968,10.8819767 12.8934857,10.8819767 C13.5737143,10.8819767 14.0454857,11.1017442 14.3197714,11.2377907 L14.7312,9.92965116 C14.2978286,9.75174419 13.7163429,9.6 12.9099429,9.6 L12.9099429,9.6 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const key = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/KEY</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/KEY\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"keynote\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#378FE8\"></path>\n <path d=\"M14.9911156,14.5898439 L14.9911156,15.1248048 L10.4736066,15.1248048 L10.4736066,17.8869141 L11.6598352,17.8869141 C11.8614793,17.8869141 12.024944,18.0465438 12.024944,18.243457 C12.024944,18.4403703 11.8614793,18.6 11.6598352,18.6 L8.74016477,18.6 C8.53852074,18.6 8.37505596,18.4403703 8.37505596,18.243457 C8.37505596,18.0465438 8.53852074,17.8869141 8.74016477,17.8869141 L9.9263934,17.8869141 L9.9263934,15.1253907 L5.40948438,15.1253907 L5.40948438,14.5904298 L14.9911156,14.5904298 L14.9911156,14.5898439 Z M13.6638836,9.60000011 C13.9224898,9.60000011 14.1462952,9.77695335 14.1996965,10.024219 L14.9881156,13.6775392 C15.0223332,13.8352785 14.9817865,13.9996722 14.8777768,14.1248996 C14.7737671,14.2501269 14.6174161,14.3227976 14.4523026,14.3226566 L5.94769737,14.3226566 C5.78258395,14.3227976 5.62623288,14.2501269 5.5222232,14.1248996 C5.41821351,13.9996722 5.37766679,13.8352785 5.41188445,13.6775392 L6.20030346,10.024219 C6.25366803,9.77684681 6.47724125,9.59983737 6.73611641,9.60000011 L13.6638836,9.60000011 L13.6638836,9.60000011 Z M12.9612666,10.5662111 L12.9120655,10.5703127 L11.9358419,10.7841799 C11.8708856,10.7984107 11.819027,10.8460683 11.8005407,10.9085205 C11.7820544,10.9709728 11.7998766,11.0382999 11.8470397,11.0841799 L12.0114437,11.2441408 L11.317227,11.9226564 C11.2323411,12.04108 11.0938739,12.1118994 10.9458497,12.1125982 C10.7978254,12.1132971 10.6586634,12.0437885 10.572609,11.926172 L10.3470035,11.6718752 L10.1921998,11.4996096 C10.0024563,11.253348 9.70373817,11.1103231 9.3881804,11.1146486 C9.11037369,11.1146486 8.85956764,11.2248049 8.67836328,11.401758 L8.66576298,11.4140627 L7.53653571,12.536133 C7.41893287,12.6708986 7.41893287,12.7957033 7.53653571,12.9146486 C7.65353854,13.0318361 7.78194165,13.0318361 7.92354507,12.9146486 L9.02457163,11.8382814 C9.10958742,11.7201665 9.24796462,11.6496296 9.39580529,11.6490475 C9.54364595,11.6484653 9.68260115,11.7179102 9.76858958,11.8353517 L9.99419502,12.0896486 L10.1483988,12.2619142 C10.3380033,12.508008 10.6374105,12.6515626 10.9524182,12.6468752 C11.2302249,12.6468752 11.4810309,12.5367189 11.6622353,12.3597658 L11.6754356,12.3474611 L12.4014531,11.6255861 L12.603658,11.8230471 C12.6506402,11.8691037 12.7195849,11.8865078 12.7835375,11.8684552 C12.8474902,11.8504026 12.8962927,11.7997607 12.9108654,11.7363283 L13.1298707,10.783008 C13.1434944,10.7234958 13.1249957,10.6613137 13.0808396,10.6181935 C13.0366834,10.5750733 12.9730075,10.5570086 12.9120655,10.5703127 L12.9612666,10.5662111 L12.9612666,10.5662111 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const mp3 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/MP3</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/MP3\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"MP3\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#14BC64\"></path>\n <path d=\"M14.3998147,10.9584359 L14.3998147,9.80061073 C14.3998147,9.73573225 14.365358,9.67500695 14.3073452,9.63722297 C14.2490817,9.59963677 14.1742711,9.58982737 14.1071891,9.61093933 L8.22903883,11.4501715 C8.13751771,11.4786009 8.0773139,11.5575705 8.07973383,11.6451233 L8.1083369,12.6102117 L8.1083369,16.7193896 C7.77229436,16.679529 7.3953856,16.7339158 7.05961556,16.872434 C6.66888489,17.0340022 6.35183113,17.2932788 6.1673609,17.602789 C5.97248064,17.9307116 5.94675531,18.2751183 6.0956352,18.5727029 C6.21928028,18.8205583 6.44682953,19.0064721 6.75383298,19.1109441 C6.92647609,19.1700576 7.11490322,19.2 7.31322806,19.2 C7.58703929,19.2 7.87219801,19.1414897 8.1392836,19.0314406 C8.64383795,18.8232282 9.02443109,18.4467135 9.15185867,18.0358462 C9.19777184,17.9667057 9.19777184,17.871519 9.19777184,17.8186649 L9.19777184,17.7787055 C9.1988837,17.7512154 9.1988837,17.7185735 9.19769554,17.6866831 L9.19570074,17.6866831 C9.19801166,17.5156317 9.19801166,16.7122797 9.19801166,12.6933345 L13.2973972,11.4398973 L13.2973972,14.9378371 C12.9612674,14.8979864 12.5845331,14.9523633 12.2486758,15.09101 C11.4194046,15.4335972 10.9863689,16.19608 11.2846846,16.7913482 C11.4775264,17.1770988 11.9453132,17.4165489 12.5052424,17.4165489 C12.7794024,17.4165489 13.0638635,17.359067 13.3275045,17.2500858 C13.8620136,17.0294634 14.2504552,16.629068 14.3574551,16.1951307 C14.3868103,16.1330507 14.3868103,16.0577794 14.3868103,16.007971 C14.388162,15.9688422 14.3878677,15.936576 14.3867449,15.9047944 L14.3806188,15.90518 C14.3870937,15.6899567 14.3870937,14.8190761 14.3870937,11.0271907 C14.3952801,11.0055349 14.4,10.9825243 14.4,10.9585744 L14.3998147,10.9584359 Z\" id=\"路径\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const page = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/文档</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/文档\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"pages\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#9466CD\"></path>\n <path d=\"M14.0506888,10.580838 L13.1550425,11.3323745 L12.1459551,10.1297794 L13.0412113,9.37820876 C13.3451781,9.12313077 13.6002437,9.42711776 13.6002437,9.42711776 L14.0995997,10.0217845 C14.0995987,10.0217951 14.3546653,10.3257715 14.0506888,10.580838 Z M5.66861701,16.5899183 L7.68476284,15.9221129 L6.67171032,14.7148039 L5.66861701,16.5899183 Z M7.97860307,15.6762747 L12.8292113,11.6061311 L11.8198728,10.4032484 L6.96925313,14.4734016 L7.97860307,15.6762747 Z M5.7,17.4 L14.7,17.4 C14.8656854,17.4 15,17.5343146 15,17.7 C15,17.8656854 14.8656854,18 14.7,18 L5.7,18 C5.53431458,18 5.4,17.8656854 5.4,17.7 C5.4,17.5343146 5.53431458,17.4 5.7,17.4 Z\" id=\"形状结合\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const pdf = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/PDF</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/PDF\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"pdf\" transform=\"translate(2.000000, 0.000000)\">\n <path d=\"M14.1176471,0 L2.74128887,0 C1.22731689,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.22731689,24 2.74128887,24 L17.2587111,24 C18.7726831,24 20,22.765548 20,21.2427744 L20,6 C20,6 14.1176471,0 14.1176471,0 Z\" id=\"形状\" fill=\"#DD2A42\"></path>\n <path d=\"M13.465286,16.1960788 C12.7331102,16.140608 12.0280521,15.863254 11.458582,15.3640169 C10.3467596,15.6136354 9.28917236,15.9741956 8.23158516,16.417962 C7.39093891,17.9434089 6.60452791,18.72 5.92658739,18.72 C5.79099929,18.72 5.62829356,18.6922646 5.51982309,18.6090584 C5.22152926,18.4703814 5.05882353,18.165292 5.05882353,17.8602027 C5.05882353,17.6105841 5.11305877,16.9171991 7.68923274,15.7800478 C8.2858204,14.6706319 8.74681995,13.5334806 9.12646664,12.3408585 C8.8010552,11.675209 8.09599706,10.0388205 8.58411423,9.20675855 C8.74681995,8.90166918 9.0722314,8.73525679 9.42476047,8.76299218 C9.69593668,8.76299218 9.96711289,8.90166917 10.1298186,9.12355235 C10.4823477,9.62278951 10.4552301,10.6767346 9.99423051,12.2299169 C10.4281124,13.0619788 10.9975825,13.8108346 11.675523,14.4487487 C12.244993,14.3378071 12.8144631,14.254601 13.3839331,14.2546009 C14.6584613,14.2823363 14.8482846,14.8925151 14.821167,15.2530753 C14.821167,16.1960788 13.9262855,16.1960788 13.465286,16.1960788 L13.465286,16.1960788 Z M5.76470588,17.76 L5.85294118,17.7351724 C6.26470588,17.6110345 6.5882353,17.3627586 6.82352941,17.04 C6.38235294,17.1889655 6.02941176,17.4372414 5.76470588,17.76 Z M9.42619971,9.48 L9.34098347,9.48 C9.31257806,9.48 9.25576723,9.48 9.22736181,9.51 C9.11374016,10.02 9.1989564,10.56 9.3977943,11.04 C9.56822678,10.53 9.56822678,9.98999999 9.42619971,9.48 L9.42619971,9.48 Z M9.66013073,13.56 L9.63398693,13.6148571 L9.60784314,13.5874286 C9.37254903,14.2182857 9.11111112,14.8491429 8.82352941,15.4525714 L8.87581699,15.4251429 L8.87581699,15.48 C9.4509804,15.2605714 10.0784314,15.0685714 10.6535948,14.9314286 L10.627451,14.904 L10.7058824,14.904 C10.3137255,14.4925714 9.94771242,14.0262857 9.66013073,13.56 L9.66013073,13.56 Z M13.4964706,15.12 C13.2635294,15.12 13.0564706,15.12 12.8235294,15.189282 C13.0823529,15.3624871 13.3411765,15.4317692 13.6,15.4664102 C13.7811765,15.5010512 13.9623529,15.4664102 14.1176471,15.3971281 C14.1176471,15.2932051 14.0141176,15.12 13.4964706,15.12 Z\" id=\"形状备份\" fill=\"#FFFFFF\" fill-rule=\"nonzero\"></path>\n <path d=\"M14.1176471,0 L20,6 L15.3176471,6 C14.6549054,6 14.1176471,5.4627417 14.1176471,4.8 L14.1176471,0 L14.1176471,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const php = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/PHP</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/PHP\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"php\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#AC8FD7\"></path>\n <path d=\"M7.16456528,13.4691011 C6.93145216,14.7205056 6.10817921,14.5907303 5.09605513,14.5907303 L5.5003146,12.4092697 C6.62161825,12.4092697 7.38292442,12.2825843 7.16456528,13.4691011 Z M3.6,16.8 L4.68294326,16.8 L4.93966278,15.4157303 C6.1524412,15.4157303 6.90489496,15.508427 7.60128355,14.8255618 C8.37144211,14.0839888 8.57209644,12.7646067 8.02324781,12.1033708 C7.7370203,11.7573034 7.27669565,11.5873596 6.65112624,11.5873596 L4.5649113,11.5873596 L3.6,16.8 Z M9.07963388,10.2 L10.1566755,10.2 L9.89995603,11.5842697 C10.8294577,11.5842697 11.6910911,11.5132022 12.1071537,11.9148876 C12.543872,12.3351124 12.3343653,12.8727528 11.8622374,15.4095506 L10.7704418,15.4095506 C11.2248648,12.9561798 11.310438,12.7522472 11.1451932,12.5668539 C10.9858501,12.3876404 10.6229018,12.4247191 9.74651448,12.4247191 L9.19176425,15.4095506 L8.11472259,15.4095506 L9.07963388,10.2 L9.07963388,10.2 Z M15.627457,13.4691011 C15.3913931,14.7390449 14.5445138,14.5907303 13.5589469,14.5907303 L13.9632064,12.4092697 C15.0904116,12.4092697 15.8458162,12.2825843 15.627457,13.4691011 L15.627457,13.4691011 Z M12.0628917,16.8 L13.1487858,16.8 L13.4055053,15.4157303 C14.6802505,15.4157303 15.3854915,15.4929775 16.0671261,14.8255618 C16.8372847,14.0839888 17.037939,12.7646067 16.4890904,12.1033708 C16.2028629,11.7573034 15.7425382,11.5873596 15.1169688,11.5873596 L13.0307538,11.5873596 L12.0628917,16.8 L12.0628917,16.8 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const ppt = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/PPT</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/PPT\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"ppt\" transform=\"translate(2.000000, 0.000000)\">\n <path d=\"M14.1176471,0 L2.74128887,0 C1.22731689,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.22731689,24 2.74128887,24 L17.2587111,24 C18.7726831,24 20,22.765548 20,21.2427744 L20,6 C20,6 14.1176471,0 14.1176471,0 Z\" id=\"路径\" fill=\"#F59203\"></path>\n <path d=\"M14.1176471,0 L20,6 L15.3176471,6 C14.6549054,6 14.1176471,5.4627417 14.1176471,4.8 L14.1176471,0 L14.1176471,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n <path d=\"M8.54689984,18 L8.54689984,14.7764706 L10.7980922,14.7764706 C13.0111288,14.7764706 14.1176471,13.9058824 14.1176471,12.1764706 C14.1176471,10.4588235 13.0111288,9.6 10.8235294,9.6 L7.05882353,9.6 L7.05882353,18 L8.54689984,18 Z M10.709062,13.6 L8.54689984,13.6 L8.54689984,10.7764706 L10.709062,10.7764706 C11.3577107,10.7764706 11.8410175,10.8823529 12.1462639,11.1058824 C12.4515103,11.3176471 12.6168521,11.6705882 12.6168521,12.1764706 C12.6168521,12.6823529 12.4642289,13.0470588 12.1589825,13.2705882 C11.8537361,13.4823529 11.3704293,13.6 10.709062,13.6 Z\" id=\"P\" fill=\"#FFFFFF\" fill-rule=\"nonzero\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const rar = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/RAR</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/RAR\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"rar\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M10.9766879,14.4620385 L10.9766879,15.9938365 L9.42325733,15.9938365 L9.42325733,14.4620385 L10.9766879,14.4620385 Z M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z M11.7533757,16.759749 L8.64656949,16.759749 L8.64656949,12.164355 L11.7533757,12.164355 L11.7533757,16.759749 Z M11.7534031,5.27127736 L10.2,5.27127736 L10.2,6.80307537 L11.7534031,6.80307537 L11.7534031,8.33487339 L10.2,8.33487339 L10.2,9.8666714 L11.7534031,9.8666714 L11.7534031,11.3984694 L10.1999726,11.3984694 L10.1999726,9.8666714 L8.64656949,9.8666714 L8.64656949,8.33487339 L10.1999726,8.33487339 L10.1999726,6.80307537 L8.64656949,6.80307537 L8.64656949,5.27127736 L10.1999726,5.27127736 L10.1999726,3.73947935 L8.64656949,3.73947935 L8.64656949,2.20768134 L10.2,2.20768134 L10.2,3.73947935 L11.7534031,3.73947935 L11.7534031,5.27127736 Z\" id=\"形状\" fill=\"#667580\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const snippet = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/CODE</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/CODE\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"code\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#53ADEF\"></path>\n <path d=\"M4.8,14.1768 L7.8126,16.1139 L7.8126,14.7156 L6.0189,13.608 L7.8126,12.5004 L7.8126,11.0925 L4.8,13.0395 L4.8,14.1768 Z M9.0498,16.8 L10.0866,16.8 L11.6058,9.6 L10.5621,9.6 L9.0498,16.8 Z M12.5877,11.0925 L12.5877,12.5004 L14.3808,13.608 L12.5877,14.7153 L12.5877,16.1136 L15.6,14.1768 L15.6,13.0395 L12.5877,11.0925 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const swf = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/SWF</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/SWF\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"swf\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#DD2A42\"></path>\n <path d=\"M11.313582,13.2692357 L12.922225,13.2692357 L12.922225,14.994972 L10.6066688,14.994972 C9.16864306,18.5966934 6.78000001,18.6216932 6.12221874,18.5966934 L6,18.5966934 L6,16.8709571 C6.95061736,16.8709571 7.94987778,16.7459581 9.04666876,13.7944816 C10.6066688,9.09226891 13.8,9.61751474 13.8,9.61751474 L13.8,11.343251 C11.9962958,11.2682516 11.3140708,13.2692357 11.3140708,13.2692357 L11.313582,13.2692357 Z\" id=\"路径\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const ttf = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/TTF</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/TTF\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"ttf\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#9466CD\"></path>\n <path d=\"M7.3704,16.2138 L7.3704,15.9546 C7.986,15.9546 8.2992,15.6846 8.2992,15.1554 L8.2992,11.1702 C8.2992,10.9542 8.1588,10.8462 7.878,10.8462 C7.5,10.8462 7.1868,10.965 6.9492,11.2134 C6.7116,11.4618 6.528,11.8398 6.42,12.3258 L6.15,12.261 L6.3876,10.425 C6.5172,10.4466 6.6468,10.4574 6.7656,10.4682 C6.8844,10.479 6.9924,10.4898 7.1112,10.4898 L10.4376,10.4898 C10.5564,10.4898 10.686,10.479 10.8048,10.4682 C10.9344,10.4574 11.064,10.4466 11.1936,10.425 L11.1936,12.2286 L10.956,12.261 C10.8912,11.343 10.4268,10.8786 9.5844,10.8786 C9.2928,10.8786 9.1524,10.9758 9.1524,11.1702 L9.1524,15.1554 C9.1524,15.6846 9.4656,15.9546 10.0812,15.9546 L10.0812,16.2138 L7.3704,16.2138 Z\" id=\"路径\" fill=\"#FFFFFF\" opacity=\"0.5\"></path>\n <path d=\"M10.7724,17.7798 L10.7724,17.5206 C11.388,17.5206 11.7012,17.2506 11.7012,16.7214 L11.7012,12.747 C11.7012,12.531 11.5608,12.423 11.28,12.423 C10.902,12.423 10.5888,12.5418 10.3512,12.7902 C10.1136,13.0386 9.9408,13.4058 9.822,13.9026 L9.552,13.8378 L9.7896,12.0018 C9.9192,12.0234 10.0488,12.0342 10.1676,12.045 C10.2864,12.0558 10.3944,12.0666 10.5132,12.0666 L13.8396,12.0666 C13.9584,12.0666 14.088,12.0558 14.2068,12.045 C14.3364,12.0342 14.466,12.0234 14.5956,12.0018 L14.5956,13.8054 L14.358,13.8378 C14.2932,12.9198 13.8288,12.4554 12.9864,12.4554 C12.6948,12.4554 12.5544,12.5526 12.5544,12.747 L12.5544,16.7322 C12.5544,17.2614 12.8676,17.5314 13.4832,17.5314 L13.4832,17.7906 L10.7724,17.7906 L10.7724,17.7798 Z\" id=\"路径\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const txt = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/TXT</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/TXT\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"txt\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#378FE8\"></path>\n <path d=\"M6.06390533,16.8 L6.06390533,12.1033613 L7.75384615,12.1033613 L7.75384615,11.4 L3.6,11.4 L3.6,12.1033613 L5.29704142,12.1033613 L5.29704142,16.8 L6.06390533,16.8 Z M8.84733728,16.8 L10.2035503,14.6596639 L11.5597633,16.8 L12.504142,16.8 L10.6650888,14.0092437 L12.383432,11.4 L11.4390533,11.4 L10.2035503,13.3512605 L8.96804734,11.4 L8.02366864,11.4 L9.72781065,14.0092437 L7.90295858,16.8 L8.84733728,16.8 Z M15.1100592,16.8 L15.1100592,12.1033613 L16.8,12.1033613 L16.8,11.4 L12.6461538,11.4 L12.6461538,12.1033613 L14.3431953,12.1033613 L14.3431953,16.8 L15.1100592,16.8 Z\" id=\"TXT\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const video = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/MP4</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/MP4\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"MP4\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#F59203\"></path>\n <path d=\"M12.6365884,15.4065782 L12.6365884,13.4525858 C12.634444,13.341072 12.6681817,13.2319401 12.7325839,13.1420676 L14.0617532,11.7939643 C14.4974254,11.3546946 14.999556,11.2259432 14.999556,11.7030809 L14.999556,17.1560831 C14.999556,17.6332208 14.4974254,17.5044694 14.0617532,17.0651998 L12.7325839,15.7170964 C12.6681817,15.6272239 12.634444,15.518092 12.6365884,15.4065782 Z M12.0458465,16.7016663 C12.0458465,17.1199454 11.7152413,17.4590277 11.3074191,17.4590277 L6.13842738,17.4590277 C5.7306052,17.4590277 5.4,17.1199454 5.4,16.7016663 L5.4,12.1574977 C5.4,11.7392186 5.7306052,11.4001363 6.13842738,11.4001363 L11.3074191,11.4001363 C11.7152413,11.4001363 12.0458465,11.7392186 12.0458465,12.1574977 L12.0458465,16.7016663 Z\" id=\"形状\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const vss = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/VSS</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/VSS\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"vss\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#FECD4D\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n <path d=\"M6.27866109,16.6981132 L8.0460251,11.5018868 L7.23138075,11.5018868 L5.83682008,15.8102426 L5.81610879,15.8102426 L4.41464435,11.5018868 L3.6,11.5018868 L5.36736402,16.6981132 L6.27866109,16.6981132 Z M10.3656904,16.8 C10.9870293,16.8 11.4702929,16.6690027 11.8154812,16.4070081 C12.1606695,16.1377358 12.3332636,15.7738544 12.3332636,15.3080863 C12.3332636,14.8277628 12.1192469,14.4566038 11.6981172,14.1873315 C11.5048117,14.0636119 11.0698745,13.8962264 10.407113,13.6778976 C9.94456067,13.532345 9.66150628,13.4231806 9.55104603,13.3576819 C9.30251046,13.219407 9.18514644,13.0374663 9.18514644,12.8045822 C9.18514644,12.5425876 9.28870293,12.3533693 9.50271967,12.2369272 C9.67531381,12.1350404 9.92384937,12.084097 10.2483264,12.084097 C10.6211297,12.084097 10.8972803,12.1568733 11.0905858,12.3097035 C11.2838912,12.4552561 11.408159,12.7026954 11.4771967,13.0374663 L12.2228033,13.0374663 C12.174477,12.4698113 11.9811715,12.0549865 11.6359833,11.7857143 C11.3115063,11.5237197 10.8627615,11.4 10.289749,11.4 C9.76506276,11.4 9.33012552,11.5237197 8.98493724,11.771159 C8.61903766,12.0331536 8.43953975,12.3897574 8.43953975,12.848248 C8.43953975,13.2994609 8.62594142,13.6487871 9.00564854,13.8889488 C9.15753138,13.9762803 9.53033473,14.1145553 10.1378661,14.3183288 C10.6832636,14.4929919 11.0077406,14.609434 11.1182008,14.667655 C11.4288703,14.8350404 11.5876569,15.0606469 11.5876569,15.351752 C11.5876569,15.5846361 11.4771967,15.7665768 11.2562762,15.8975741 C11.0353556,16.0285714 10.7384937,16.1013477 10.3656904,16.1013477 C9.95146444,16.1013477 9.64769874,16.0212938 9.44748954,15.861186 C9.22656904,15.6865229 9.08849372,15.3881402 9.0332636,14.980593 L8.2876569,14.980593 C8.3290795,15.6355795 8.55,16.115903 8.95732218,16.4215633 C9.29560669,16.6690027 9.76506276,16.8 10.3656904,16.8 Z M14.8324268,16.8 C15.4537657,16.8 15.9370293,16.6690027 16.2822176,16.4070081 C16.6274059,16.1377358 16.8,15.7738544 16.8,15.3080863 C16.8,14.8277628 16.5859833,14.4566038 16.1648536,14.1873315 C15.9715481,14.0636119 15.5366109,13.8962264 14.8738494,13.6778976 C14.4112971,13.532345 14.1282427,13.4231806 14.0177824,13.3576819 C13.7692469,13.219407 13.6518828,13.0374663 13.6518828,12.8045822 C13.6518828,12.5425876 13.7554393,12.3533693 13.9694561,12.2369272 C14.1420502,12.1350404 14.3905858,12.084097 14.7150628,12.084097 C15.0878661,12.084097 15.3640167,12.1568733 15.5573222,12.3097035 C15.7506276,12.4552561 15.8748954,12.7026954 15.9439331,13.0374663 L16.6895397,13.0374663 C16.6412134,12.4698113 16.4479079,12.0549865 16.1027197,11.7857143 C15.7782427,11.5237197 15.3294979,11.4 14.7564854,11.4 C14.2317992,11.4 13.7968619,11.5237197 13.4516736,11.771159 C13.0857741,12.0331536 12.9062762,12.3897574 12.9062762,12.848248 C12.9062762,13.2994609 13.0926778,13.6487871 13.4723849,13.8889488 C13.6242678,13.9762803 13.9970711,14.1145553 14.6046025,14.3183288 C15.15,14.4929919 15.474477,14.609434 15.5849372,14.667655 C15.8956067,14.8350404 16.0543933,15.0606469 16.0543933,15.351752 C16.0543933,15.5846361 15.9439331,15.7665768 15.7230126,15.8975741 C15.5020921,16.0285714 15.2052301,16.1013477 14.8324268,16.1013477 C14.4182008,16.1013477 14.1144351,16.0212938 13.9142259,15.861186 C13.6933054,15.6865229 13.5552301,15.3881402 13.5,14.980593 L12.7543933,14.980593 C12.7958159,15.6355795 13.0167364,16.115903 13.4240586,16.4215633 C13.7623431,16.6690027 14.2317992,16.8 14.8324268,16.8 Z\" id=\"VSS\" fill=\"#FFFFFF\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const xls = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/XLS</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/XLS\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"excel\" transform=\"translate(1.800000, 0.000000)\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#14BC64\"></path>\n <polygon id=\"x\" stroke=\"#10B981\" stroke-width=\"0.5\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" points=\"8.01923077 18 10.2161538 14.7992263 12.3969231 18 14.4 18 11.1530769 13.5319149 14.0446154 9.6 12.0415385 9.6 10.2161538 12.2646035 8.37461538 9.6 6.37153846 9.6 9.26307692 13.5319149 6 18\"></polygon>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" fill-rule=\"nonzero\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const xsd = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/XSD</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/XSD\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"xsd\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z\" id=\"路径\" fill=\"#53ADEF\"></path>\n <path d=\"M4.48846154,16.6981132 L5.76437247,14.6385445 L7.0402834,16.6981132 L7.92874494,16.6981132 L6.198583,14.0126685 L7.81518219,11.5018868 L6.92672065,11.5018868 L5.76437247,13.3795148 L4.60202429,11.5018868 L3.71356275,11.5018868 L5.31680162,14.0126685 L3.6,16.6981132 L4.48846154,16.6981132 Z M10.1732794,16.8 C10.7744939,16.8 11.2421053,16.6690027 11.5761134,16.4070081 C11.9101215,16.1377358 12.0771255,15.7738544 12.0771255,15.3080863 C12.0771255,14.8277628 11.8700405,14.4566038 11.4625506,14.1873315 C11.2755061,14.0636119 10.8546559,13.8962264 10.2133603,13.6778976 C9.76578947,13.532345 9.49190283,13.4231806 9.38502024,13.3576819 C9.14453441,13.219407 9.03097166,13.0374663 9.03097166,12.8045822 C9.03097166,12.5425876 9.13117409,12.3533693 9.33825911,12.2369272 C9.50526316,12.1350404 9.74574899,12.084097 10.0597166,12.084097 C10.4204453,12.084097 10.6876518,12.1568733 10.8746964,12.3097035 C11.0617409,12.4552561 11.1819838,12.7026954 11.2487854,13.0374663 L11.9702429,13.0374663 C11.9234818,12.4698113 11.7364372,12.0549865 11.4024291,11.7857143 C11.0884615,11.5237197 10.654251,11.4 10.0997976,11.4 C9.59210526,11.4 9.17125506,11.5237197 8.83724696,11.771159 C8.48319838,12.0331536 8.30951417,12.3897574 8.30951417,12.848248 C8.30951417,13.2994609 8.48987854,13.6487871 8.85728745,13.8889488 C9.00425101,13.9762803 9.36497976,14.1145553 9.95283401,14.3183288 C10.4805668,14.4929919 10.7945344,14.609434 10.901417,14.667655 C11.2020243,14.8350404 11.355668,15.0606469 11.355668,15.351752 C11.355668,15.5846361 11.2487854,15.7665768 11.0350202,15.8975741 C10.8212551,16.0285714 10.5340081,16.1013477 10.1732794,16.1013477 C9.77246964,16.1013477 9.47854251,16.0212938 9.28481781,15.861186 C9.07105263,15.6865229 8.93744939,15.3881402 8.8840081,14.980593 L8.16255061,14.980593 C8.20263158,15.6355795 8.41639676,16.115903 8.81052632,16.4215633 C9.13785425,16.6690027 9.59210526,16.8 10.1732794,16.8 Z M14.4753036,16.6981132 C15.2435223,16.6981132 15.8246964,16.4652291 16.2255061,15.9994609 C16.6062753,15.548248 16.8,14.9150943 16.8,14.1 C16.8,13.277628 16.6129555,12.6444744 16.2388664,12.2078167 C15.8380567,11.7347709 15.2568826,11.5018868 14.488664,11.5018868 L12.7518219,11.5018868 L12.7518219,16.6981132 L14.4753036,16.6981132 Z M14.3417004,16.0212938 L13.4799595,16.0212938 L13.4799595,12.1787062 L14.3550607,12.1787062 C14.9562753,12.1787062 15.397166,12.3315364 15.6777328,12.6444744 C15.9449393,12.9501348 16.0852227,13.4304582 16.0852227,14.1 C16.0852227,14.7549865 15.9449393,15.23531 15.6710526,15.548248 C15.3904858,15.861186 14.942915,16.0212938 14.3417004,16.0212938 Z\" id=\"XSD\" fill=\"#FFFFFF\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n\nexport const zip = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <title>1.Base基础/1.icon图标/12.文件类型/ZIP</title>\n <g id=\"1.Base基础/1.icon图标/12.文件类型/ZIP\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"rar\" transform=\"translate(1.800000, 0.000000)\" fill-rule=\"nonzero\">\n <path d=\"M10.9766879,14.4620385 L10.9766879,15.9938365 L9.42325733,15.9938365 L9.42325733,14.4620385 L10.9766879,14.4620385 Z M14.4,0 L2.79611465,0 C1.25186323,0 0,1.23445202 0,2.75725265 L0,21.2427743 C0,22.765548 1.25186323,24 2.79611465,24 L17.6038853,24 C19.1481368,24 20.4,22.765548 20.4,21.2427744 L20.4,6 C20.4,6 14.4,0 14.4,0 Z M11.7533757,16.759749 L8.64656949,16.759749 L8.64656949,12.164355 L11.7533757,12.164355 L11.7533757,16.759749 Z M11.7534031,5.27127736 L10.2,5.27127736 L10.2,6.80307537 L11.7534031,6.80307537 L11.7534031,8.33487339 L10.2,8.33487339 L10.2,9.8666714 L11.7534031,9.8666714 L11.7534031,11.3984694 L10.1999726,11.3984694 L10.1999726,9.8666714 L8.64656949,9.8666714 L8.64656949,8.33487339 L10.1999726,8.33487339 L10.1999726,6.80307537 L8.64656949,6.80307537 L8.64656949,5.27127736 L10.1999726,5.27127736 L10.1999726,3.73947935 L8.64656949,3.73947935 L8.64656949,2.20768134 L10.2,2.20768134 L10.2,3.73947935 L11.7534031,3.73947935 L11.7534031,5.27127736 Z\" id=\"形状\" fill=\"#667580\"></path>\n <path d=\"M14.4,0 L20.4,6 L15.6,6 C14.9372583,6 14.4,5.4627417 14.4,4.8 L14.4,0 L14.4,0 Z\" id=\"矩形\" fill=\"#FFFFFF\" opacity=\"0.400000006\"></path>\n </g>\n </g>\n</svg>`;\n","import * as fileIcons from '../constants/file-icon';\n\nexport function parseSVGToCanvasObjects(svgString: string) {\n const parser = new DOMParser();\n const svgDoc = parser.parseFromString(svgString, 'image/svg+xml');\n const elements = svgDoc.querySelectorAll('path, polyline, polygon');\n const canvasObjects: {\n d: string | null;\n fill: string;\n stroke: string;\n strokeWidth: string | number;\n opacity: number;\n fillRule: CanvasFillRule;\n }[] = [];\n\n elements.forEach((element) => {\n let d;\n if (element.tagName === 'path') {\n d = element.getAttribute('d');\n } else if (element.tagName === 'polyline' || element.tagName === 'polygon') {\n const points = element.getAttribute('points') || '';\n const pointArray = points.split(/\\s+|,/).filter(Boolean);\n d = 'M' + pointArray[0] + ' ' + pointArray[1];\n for (let i = 2; i < pointArray.length; i += 2) {\n d += ' L' + pointArray[i] + ' ' + pointArray[i + 1];\n }\n if (element.tagName === 'polygon') {\n d += ' Z';\n }\n }\n\n const fill = element.getAttribute('fill') || 'black';\n const stroke = 'none';\n const strokeWidth = element.getAttribute('stroke-width') || 0;\n const opacity = parseFloat(element?.getAttribute('opacity') || '1');\n const fillRule = element.getAttribute('fill-rule') || 'nonzero';\n if (d) {\n canvasObjects.push({\n d,\n fill,\n stroke,\n strokeWidth,\n opacity,\n fillRule: fillRule as CanvasFillRule\n });\n }\n });\n\n return canvasObjects;\n}\nexport const FileIcons = (() => {\n const result: {\n [T in string]: {\n d: string | null;\n fill: string;\n stroke: string;\n strokeWidth: string | number;\n opacity: number;\n fillRule: CanvasFillRule;\n }[];\n } = {};\n Object.entries(fileIcons).forEach((fileIcon) => {\n result[fileIcon[0]] = parseSVGToCanvasObjects(fileIcon[1]);\n });\n return result;\n})();\n","import * as fileIcons from '../constants/file-icon';\nimport { FileIcons } from './icon';\n\nexport function getFileThumbnailName(ext: string) {\n let result = 'defaultFile';\n switch (ext) {\n case 'doc':\n case 'docx':\n result = 'doc';\n break;\n case 'ppt':\n case 'pptx':\n result = 'ppt';\n break;\n case 'xls':\n case 'xlsx':\n result = 'xls';\n break;\n case 'css':\n case 'scss':\n case 'sass':\n case 'less':\n result = 'css';\n break;\n case 'png':\n case 'jpeg':\n case 'jpg':\n case 'gif':\n case 'bmp':\n case 'svg':\n result = 'img';\n break;\n case 'mp4':\n case 'mkv':\n case 'webm':\n case 'mov':\n case 'flv':\n case '3gp':\n case 'mpv':\n case 'avi':\n case 'mpeg':\n case 'wmv':\n result = 'video';\n break;\n case 'mp3':\n case 'wma':\n case 'wav':\n case 'ape':\n case 'flac':\n case 'ogg':\n case 'm4r':\n case 'm4a':\n result = 'mp3';\n break;\n case 'pdf':\n case 'txt':\n case 'apk':\n case 'bak':\n case 'cs':\n case 'csv':\n case 'exe':\n case 'fla':\n case 'html':\n case 'ipa':\n case 'java':\n case 'js':\n case 'php':\n case 'rar':\n case 'swf':\n case 'ttf':\n case 'vss':\n case 'xsd':\n case 'zip':\n case 'youdaonote':\n case 'evernote':\n case 'yinxiang':\n case 'quip':\n case 'onenote':\n case 'onedrive':\n case 'box':\n case 'shimo':\n case 'processon':\n result = ext;\n break;\n default:\n result = 'defaultFile';\n break;\n }\n return result;\n}\n\nexport function getFileThumbnailSvgString(ext: string) {\n let result = 'defaultFile';\n switch (ext) {\n case 'doc':\n case 'docx':\n result = fileIcons.doc;\n break;\n case 'ppt':\n case 'pptx':\n result = fileIcons.ppt;\n break;\n case 'xls':\n case 'xlsx':\n result = fileIcons.xls;\n break;\n case 'css':\n case 'scss':\n case 'sass':\n case 'less':\n result = fileIcons.css;\n break;\n case 'png':\n case 'jpeg':\n case 'jpg':\n case 'gif':\n case 'bmp':\n case 'svg':\n result = fileIcons.img;\n break;\n case 'mp4':\n case 'mkv':\n case 'webm':\n case 'mov':\n case 'flv':\n case '3gp':\n case 'mpv':\n case 'avi':\n case 'mpeg':\n case 'wmv':\n result = fileIcons.video;\n break;\n case 'mp3':\n case 'wma':\n case 'wav':\n case 'ape':\n case 'flac':\n case 'ogg':\n case 'm4r':\n case 'm4a':\n result = fileIcons.mp3;\n break;\n case 'pdf':\n result = fileIcons.pdf;\n break;\n case 'txt':\n result = fileIcons.txt;\n break;\n case 'apk':\n result = fileIcons.apk;\n break;\n case 'bak':\n result = fileIcons.apk;\n break;\n case 'cs':\n result = fileIcons.cs;\n break;\n case 'csv':\n result = fileIcons.csv;\n break;\n case 'exe':\n result = fileIcons.exe;\n break;\n case 'fla':\n result = fileIcons.fla;\n break;\n case 'html':\n result = fileIcons.html;\n break;\n case 'ipa':\n result = fileIcons.ipa;\n break;\n case 'java':\n result = fileIcons.java;\n break;\n case 'js':\n result = fileIcons.js;\n break;\n case 'php':\n result = fileIcons.php;\n break;\n case 'rar':\n result = fileIcons.rar;\n break;\n case 'swf':\n result = fileIcons.swf;\n break;\n case 'ttf':\n result = fileIcons.ttf;\n break;\n case 'vss':\n result = fileIcons.vss;\n break;\n case 'xsd':\n result = fileIcons.xsd;\n break;\n case 'zip':\n result = fileIcons.zip;\n break;\n default:\n result = fileIcons.defaultFile;\n break;\n }\n return result;\n}\n\nexport function getFileCanvasPaths(ext: string) {\n const fileThumbnailName = getFileThumbnailName(ext);\n return FileIcons[fileThumbnailName];\n}\n","import _, { isNil } 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_FIELD_ITEM_MARGIN_RIGHT,\n AI_TABLE_FILE_ICON_ITEM_HEIGHT,\n AI_TABLE_FILE_ICON_SIZE,\n AI_TABLE_MEMBER_AVATAR_SIZE,\n AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_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, AITableRender, AITableSelectField } from '../../types';\nimport { getAvatarBgColor, getAvatarShortName, getTextWidth } from '../../utils';\nimport { Drawer } from './drawer';\nimport { helpers } from 'ngx-tethys/util';\nimport { getFileThumbnailSvgString } from '../../utils/file';\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 case AITableFieldType.attachment:\n return this.renderCellAttachment(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 getValidSelectedValue(field: AITableField, transformValue: string[]) {\n const fieldOptionsMap = helpers.keyBy((field as AITableSelectField).settings.options || [], '_id');\n return (transformValue || []).filter((optionId: string) => !!fieldOptionsMap[optionId]);\n }\n\n private renderCellMultiSelect(render: AITableRender, ctx?: any) {\n const { x, y, field, columnWidth } = render;\n let transformValue = this.getValidSelectedValue(field, render.transformValue);\n if (!transformValue.length) {\n return;\n }\n\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, field, columnWidth, isActive } = render;\n const transformValue = this.getValidSelectedValue(field, render.transformValue);\n if (!transformValue.length) {\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;\n const size = AI_TABLE_CELL_EMOJI_SIZE;\n const isEmpty = isNil(cellValue);\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 || isEmpty)) {\n this.path({\n x: x + iconX,\n y: y + iconY,\n size: 22,\n data: StarFill,\n fill: isEmpty ? this.colors.gray100 : 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 let cellValue = transformValue;\n if (isNil(cellValue)) {\n cellValue = 0;\n }\n if (!_.isNumber(cellValue)) {\n return;\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 = (cellValue / 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: `${cellValue}%`,\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 isMultiple = 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_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 itemWidth = AITableAvatarSize.size24 + (isMultiple ? 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 (currentX >= columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n break;\n }\n // 如果不是非活动状态的最后一行,则换行渲染溢出内容\n if (currentX > columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n }\n if (currentX + itemWidth > columnWidth - AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n currentY += itemHeight;\n }\n if (currentY >= maxHeight) {\n isOverflow = true;\n }\n }\n\n if (ctx) {\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 // 在非多选模式下显示名称\n if (!isMultiple) {\n const textX = x + currentX + AITableAvatarSize.size24 + AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT;\n this.text({\n x: textX,\n y: y + AI_TABLE_ROW_BLANK_HEIGHT / 2,\n text: this.textEllipsis({\n text: display_name || '',\n maxWidth: maxTextWidth,\n fontSize: AI_TABLE_COMMON_FONT_SIZE\n }).text,\n fillStyle: this.colors.gray800,\n fontSize: AI_TABLE_COMMON_FONT_SIZE,\n verticalAlign: DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE\n });\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 private renderCellAttachment(render: AITableRender, ctx?: CanvasRenderingContext2D | undefined) {\n const { references, x, y, field, transformValue: _cellValue, rowHeight, columnWidth, isActive } = render;\n const cellValue = _cellValue;\n if (!cellValue?.length || !references) {\n return;\n }\n\n const fileIconSize = AI_TABLE_FILE_ICON_SIZE;\n const itemHeight = AI_TABLE_FILE_ICON_ITEM_HEIGHT;\n const isOperating = isActive;\n\n let currentX = AI_TABLE_CELL_PADDING;\n let currentY = (AI_TABLE_ROW_BLANK_HEIGHT - fileIconSize) / 2;\n const itemOtherWidth = fileIconSize + AI_TABLE_FIELD_ITEM_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 attachmentInfo = references.attachments[cellValue[index]];\n if (!attachmentInfo) continue;\n const { title, addition } = attachmentInfo;\n const itemWidth = AI_TABLE_FILE_ICON_SIZE + AI_TABLE_FIELD_ITEM_MARGIN_RIGHT;\n currentX = AI_TABLE_CELL_PADDING + index * itemWidth;\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 if (columnWidth != null) {\n // 在非活动状态下,当超出列宽时,不会渲染后续内容\n if (currentX >= columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n break;\n }\n // 如果不是非活动状态的最后一行,则换行渲染溢出内容\n if (currentX > columnWidth - 2 * AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n }\n if (currentX + itemWidth > columnWidth - AI_TABLE_CELL_PADDING) {\n currentX = AI_TABLE_CELL_PADDING;\n currentY += itemHeight;\n }\n if (currentY >= maxHeight) {\n isOverflow = true;\n }\n }\n const svgString = getFileThumbnailSvgString(addition?.ext);\n const img = new Image();\n img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgString)}`;\n if (ctx) {\n this.image({\n name: img.src,\n x: x + currentX,\n y: y + currentY,\n url: img.src,\n width: AI_TABLE_FILE_ICON_SIZE,\n height: AI_TABLE_FILE_ICON_SIZE\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 protected override renderAddFieldBlank({ isHoverRow, isCheckedRow }: Pick<AITableCell, 'isHoverRow' | 'isCheckedRow'>): void {\n super.renderAddFieldBlank({ isHoverRow, isCheckedRow });\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 // 首列\n private renderFirstCell({ row, style, isHoverRow, isCheckedRow }: AITableCell) {\n if (!this.isFirst) return;\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 if (this.isLast) {\n this.renderAddFieldBlank({ isHoverRow, isCheckedRow });\n }\n }\n\n // 尾列\n private renderLastCell({ style, isHoverRow, isCheckedRow }: Pick<AITableCell, 'style' | 'isHoverRow' | 'isCheckedRow'>) {\n if (!this.isLast || this.isFirst) return;\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 this.renderAddFieldBlank({ isHoverRow, isCheckedRow });\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, isCheckedRow, 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 { AIRecordFieldIdPath, AITable, AITableQueries, RendererContext } from '../../core';\nimport { AITableCellsDrawerConfig, AITableRender, AITableRowType } from '../../types';\nimport { getCellHorizontalPosition, getHoverCell, 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 const hoverCell = getHoverCell(aiTable);\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 const isCheckedRow = aiTable.selection().selectedRecords.has(row._id);\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 isCheckedRow\n });\n break;\n }\n case AITableRowType.record: {\n const fieldId = field._id;\n const cell: AIRecordFieldIdPath = [recordId, fieldId];\n let background = getCellBackground(cell, isHover, targetName, aiTable);\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: isHoverRecord(isHover, targetName),\n isCheckedRow: isSelectedRecord(recordId, aiTable)\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, fieldId]);\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: isSelectedField(fieldId, aiTable),\n style,\n colors\n };\n // hover 组件渲染时,底层的 cell 渲染为空\n if (hoverCell && hoverCell.recordId === recordId && hoverCell.fieldId === fieldId) {\n render.cellValue = '';\n render.transformValue = '';\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\nconst getCellBackground = (cell: AIRecordFieldIdPath, isHover: boolean, targetName: string, aiTable: AITable): string => {\n const colors = AITable.getColors();\n const [recordId, fieldId] = cell;\n let background = colors.white;\n\n const _isHoverRecord = isHoverRecord(isHover, targetName);\n const _isSelectedRecord = isSelectedRecord(recordId, aiTable);\n const _isSelectedField = isSelectedField(fieldId, aiTable);\n const _isSiblingCell = isSiblingCell(cell, aiTable);\n const _isActiveCell = isActiveCell(cell, aiTable);\n const _isSelectedCell = isSelectedCell(cell, aiTable);\n const _isKeywordsMatchedCell = isKeywordsMatchedCell(cell, aiTable);\n\n if (_isKeywordsMatchedCell) {\n background = colors.itemMatchBgColor;\n } else if (_isSelectedRecord || _isSelectedField || _isSiblingCell || (_isSelectedCell && !_isActiveCell)) {\n background = colors.itemActiveBgColor;\n } else if (_isHoverRecord && !_isActiveCell) {\n background = colors.gray80;\n }\n\n return background;\n};\n\nconst isActiveCell = (cell: AIRecordFieldIdPath, aiTable: AITable): boolean => {\n const [recordId, fieldId] = cell;\n const [activeRecordId, activeFieldId] = AITable.getActiveCell(aiTable) || [];\n return recordId === activeRecordId && fieldId === activeFieldId;\n};\n\nconst isSiblingCell = (cell: AIRecordFieldIdPath, aiTable: AITable): boolean => {\n const [recordId, fieldId] = cell;\n const [activeRecordId, activeFieldId] = AITable.getActiveCell(aiTable) || [];\n return AITable.getActiveRecordIds(aiTable).length === 1 && recordId === activeRecordId && fieldId !== activeFieldId;\n};\n\nconst isKeywordsMatchedCell = (cell: AIRecordFieldIdPath, aiTable: AITable): boolean => {\n const [recordId, fieldId] = cell;\n return aiTable.keywordsMatchedCells().has(`${recordId}:${fieldId}`);\n};\n\nconst isSelectedCell = (cell: AIRecordFieldIdPath, aiTable: AITable): boolean => {\n const [recordId, fieldId] = cell;\n return aiTable.selection().selectedCells.has(`${recordId}:${fieldId}`);\n};\n\nexport const isSelectedField = (fieldId: string, aiTable: AITable): boolean => {\n return aiTable.selection().selectedFields.has(fieldId);\n};\n\nconst isSelectedRecord = (recordId: string, aiTable: AITable): boolean => {\n return aiTable.selection().selectedRecords.has(recordId);\n};\n\nconst isHoverRecord = (isHover: boolean, targetName: string): boolean => {\n return isHover && targetName !== AI_TABLE_FIELD_HEAD;\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 AttachmentPath,\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 case AITableFieldType.attachment:\n data = AttachmentPath;\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 { 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.gridData().fields;\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 const fieldMenus = config.aiTable.context?.aiFieldConfig()?.fieldMenus || [];\n let noMoreIcon = false;\n if (fieldMenus.length === 0) {\n noMoreIcon = true;\n }\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: noMoreIcon ? false : 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, AITableSelectAllState } 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 // 目前只需要展示全部选中和空的状态\n return this.config().aiTable.selection().selectAllState === AITableSelectAllState.all;\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 && !!context.linearRows().length && pointRowIndex < context.linearRows().length) {\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 (\n Array.isArray(activeCell) &&\n !!activeCell.length &&\n aiTable.context!.visibleRowsIndexMap().has(activeCell[0]) &&\n aiTable.context!.visibleColumnsIndexMap().has(activeCell[1])\n ) {\n const fieldId = activeCell[1];\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, effect, input, SimpleChanges } from '@angular/core';\nimport { KoContainer, KoShape } from '../../angular-konva';\nimport { AITableCellsConfig, AITableHoverCellConfig } from '../../types';\nimport { AITableField, AITableFieldType, AITableQueries } from '../../core';\nimport { AITableCellLink } from './cells/link.component';\nimport { CommonModule } from '@angular/common';\nimport {\n AI_TABLE_CELL_BORDER,\n AI_TABLE_CELL_PADDING,\n AI_TABLE_OFFSET,\n Colors,\n DEFAULT_TEXT_ALIGN_LEFT,\n DEFAULT_TEXT_ALIGN_RIGHT\n} from '../../constants';\nimport { getCellHorizontalPosition, getHoverCell, transformCellValue } from '../../utils';\nimport { isSelectedField } from '../creations/create-cells';\nimport _ from 'lodash';\n\nimport * as cellComponents from './cells';\nimport { HoverCellComponent } from '../interfaces';\nimport { Constructor } from 'ngx-tethys/core';\n\n@Component({\n selector: 'ai-table-hover-cell',\n template: `\n @if (hoverCell()) {\n <ko-group [config]=\"groupConfig()\">\n <ng-container *ngComponentOutlet=\"hoverCell()!.renderComponentDefinition; inputs: { config: hoverCellConfig() }\">\n </ng-container>\n </ko-group>\n }\n `,\n standalone: true,\n imports: [KoShape, KoContainer, CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AITableHoverCells {\n config = input.required<AITableCellsConfig>();\n\n componentMap: Partial<Record<AITableFieldType, Constructor<HoverCellComponent>>> = {};\n\n groupConfig = computed(() => {\n return {\n x: this.hoverCellConfig()?.x,\n y: this.hoverCellConfig()?.y\n };\n });\n\n hoverCellConfig = computed(() => {\n const { aiTable, coordinate } = this.config();\n const pointPosition = aiTable.context!.pointPosition();\n const hoverCell = this.hoverCell();\n if (!hoverCell) {\n return;\n }\n const { field, recordId, fieldId, renderComponentDefinition } = hoverCell;\n const cellValue = AITableQueries.getFieldValue(aiTable, [recordId, field._id]);\n const transformValue = transformCellValue(aiTable, field, cellValue) || {};\n if (Object.keys(transformValue).length === 0) {\n return;\n }\n\n const { rowHeight, columnCount, rowCount } = coordinate;\n const columnIndex = pointPosition.columnIndex;\n const rowIndex = pointPosition.rowIndex;\n\n const x = coordinate.getColumnOffset(columnIndex) + AI_TABLE_OFFSET;\n const columnWidth = coordinate.getColumnWidth(columnIndex);\n const y = coordinate.getRowOffset(rowIndex) + AI_TABLE_OFFSET;\n const { width } = getCellHorizontalPosition({\n columnWidth,\n columnIndex,\n columnCount\n });\n\n const style = {\n textAlign: DEFAULT_TEXT_ALIGN_LEFT\n } as any;\n const textAlign = style.textAlign;\n const renderX =\n textAlign === DEFAULT_TEXT_ALIGN_RIGHT\n ? columnWidth - AI_TABLE_CELL_PADDING + AI_TABLE_OFFSET\n : AI_TABLE_CELL_PADDING + AI_TABLE_OFFSET;\n const renderY = 0 - AI_TABLE_OFFSET * 2;\n\n const result: AITableHoverCellConfig = {\n field,\n aiTable,\n coordinate,\n x,\n y,\n render: {\n aiTable,\n recordId,\n field,\n isActive: isSelectedField(field._id, aiTable),\n x: renderX,\n y: renderY,\n columnWidth: width,\n rowHeight,\n cellValue,\n transformValue,\n style\n }\n };\n\n return result;\n });\n\n hoverCell = computed(() => getHoverCell(this.config().aiTable));\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_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 AITableFrozenCells,\n AITableFrozenColumnHeads,\n AITableFrozenPlaceholderCells,\n AITableHoverRowHeads,\n AITableOtherRows,\n AITablePlaceholderCells\n} from './components';\nimport { createActiveCellBorder } from './creations/create-active-cell-border';\nimport { AITableHoverCells } from './components/hover-cell.component';\nimport { AITableCellLink } from './components/cells/link.component';\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 AITableHoverCells,\n AITablePlaceholderCells,\n AITableAddField,\n AITableHoverRowHeads,\n AITableOtherRows,\n AITableCellLink\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 koMouseup = output<KoEventObject<MouseEvent>>();\n\n koContextmenu = 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 stageMouseup(e: KoEventObject<MouseEvent>) {\n this.koMouseup.emit(e as KoEventObject<MouseEvent>);\n }\n\n stageContextmenu(e: KoEventObject<MouseEvent>) {\n this.koContextmenu.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 (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($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 <ai-table-hover-cell [config]=\"cellsConfig()\"></ai-table-hover-cell>\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 <ai-table-hover-cell [config]=\"cellsConfig()\"></ai-table-hover-cell>\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 { ChangeDetectionStrategy, Component, effect, ElementRef, inject, OnDestroy, OnInit, output, Renderer2 } from '@angular/core';\nimport { AITableDragState, DragEndData, DragType } from '../../core';\nimport { AITableGridSelectionService } from '../../services/selection.service';\n\n@Component({\n selector: 'ai-table-drag',\n templateUrl: './drag.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'drag-container'\n }\n})\nexport class AITableDragComponent implements OnInit, OnDestroy {\n dragEnd = output<DragEndData>();\n\n private aiTableGridSelectionService = inject(AITableGridSelectionService);\n\n private render2 = inject(Renderer2);\n\n elementRef: ElementRef<HTMLElement> = inject(ElementRef<HTMLElement>);\n\n private rect!: HTMLElement;\n\n private line!: HTMLElement;\n\n private draggedData: DragEndData | null = null;\n\n private mouseStartPosition: { x: number; y: number } | null = null;\n\n private aiTableDrag: AITableDragState | null = null;\n\n private timer!: number | null;\n\n private mousedownListener?: () => void;\n private mousemoveListener?: () => void;\n private mouseupListener?: () => void;\n\n constructor() {\n effect(() => {\n const drag = this.aiTableGridSelectionService.aiTable.dragState?.();\n if (drag && drag.sourceIds.size > 0) {\n if (!this.rect || !this.line) {\n return;\n }\n this.aiTableDrag = drag;\n } else {\n this.aiTableDrag = null;\n }\n });\n }\n\n ngOnInit() {\n this.rect = this.elementRef.nativeElement.querySelector('.rect')!;\n this.line = this.elementRef.nativeElement.querySelector('.line')!;\n this.mousedownListener = this.render2.listen('window', 'mousedown', (e) => {\n this.mouseStartPosition = { x: e.x, y: e.y };\n });\n this.mousemoveListener = this.render2.listen('window', 'mousemove', (e) => {\n if (this.timer) {\n cancelAnimationFrame(this.timer);\n }\n this.timer = requestAnimationFrame(() => {\n if (this.mouseStartPosition && this.aiTableDrag) {\n this.handleDrag(e, this.aiTableDrag);\n }\n });\n });\n this.mouseupListener = this.render2.listen('window', 'mouseup', () => {\n this.mouseStartPosition = null;\n this.aiTableDrag = null;\n this.handleDragEnd();\n });\n }\n\n private handleDrag(e: MouseEvent, drag: AITableDragState) {\n if (drag.type !== DragType.none) {\n this.render2.setStyle(this.elementRef.nativeElement, 'display', 'block');\n } else {\n return;\n }\n const moveX = e.x - this.mouseStartPosition!.x;\n const aiTable = this.aiTableGridSelectionService.aiTable;\n const scroll = drag.scroll || { x: 0, y: 0 };\n const coordinate = drag.coordinate!;\n switch (drag.type) {\n case DragType.field:\n const fields = aiTable.gridData().fields;\n let width = 0;\n fields.forEach((field, index) => {\n if (drag.sourceIds.has(field._id)) {\n width += coordinate.columnIndicesSizeMap[index] || 0;\n }\n });\n const visibleColumnIndexMap = aiTable.context!.visibleColumnsIndexMap();\n const sourceColumnIndex = visibleColumnIndexMap.get(drag.sourceIds.values().next().value!) || 0;\n const sourceColumnStartX = coordinate.getColumnOffset(sourceColumnIndex);\n const sourceColumnWidth = coordinate.getColumnWidth(sourceColumnIndex);\n // TODO: 目前默认第一列为冻结列,后期支持设置冻结列需要处理\n const isSourceColumnFrozen = sourceColumnIndex === 0;\n const pointerX = moveX + sourceColumnStartX;\n // 拖拽中心点\n const dragCenter = sourceColumnWidth / 2;\n let targetColumnIndex = coordinate.getColumnStartIndex(pointerX + (isSourceColumnFrozen ? scroll.x : 0) + dragCenter);\n let targetColumnStartX = coordinate.getColumnOffset(targetColumnIndex);\n this.render2.setStyle(this.rect, 'cursor', 'move');\n this.render2.setStyle(this.rect, 'width', `${width}px`);\n this.render2.setStyle(this.rect, 'height', `100%`);\n this.render2.setStyle(this.rect, 'top', 0);\n this.render2.setStyle(this.rect, 'left', `${pointerX - (isSourceColumnFrozen ? 0 : scroll.x)}px`);\n\n const lastColumnOffset = coordinate.getColumnOffset(coordinate.columnCount - 1);\n const lastColumnWidth = coordinate.getColumnWidth(coordinate.columnCount - 1);\n\n let isLastColumn = false;\n // 处理最后一列\n if (pointerX + dragCenter > lastColumnOffset + lastColumnWidth) {\n targetColumnIndex = coordinate.columnCount;\n targetColumnStartX = lastColumnOffset + lastColumnWidth;\n isLastColumn = true;\n }\n if (\n (targetColumnIndex >= 0 && (targetColumnIndex - sourceColumnIndex > 1 || targetColumnIndex - sourceColumnIndex < 0)) ||\n isLastColumn\n ) {\n this.render2.setStyle(this.line, 'width', `2px`);\n this.render2.setStyle(this.line, 'height', `100%`);\n this.render2.setStyle(this.line, 'top', 0);\n this.render2.setStyle(this.line, 'left', `${targetColumnStartX - scroll.x}px`);\n const fieldsIndex: number[] = [];\n drag.sourceIds.forEach((id) => {\n const index = visibleColumnIndexMap.get(id) || 0;\n fieldsIndex.push(index);\n });\n // 向右移动目标在目标列的前一列\n if (targetColumnIndex > sourceColumnIndex) {\n targetColumnIndex -= 1;\n }\n this.draggedData = { type: DragType.field, targetIndex: targetColumnIndex, fieldIds: drag.sourceIds, fieldsIndex };\n } else {\n this.render2.setStyle(this.line, 'width', 0);\n this.draggedData = null;\n }\n break;\n case DragType.record:\n break;\n case DragType.columnWidth:\n break;\n }\n }\n\n private handleDragEnd() {\n this.render2.setStyle(this.elementRef.nativeElement, 'display', 'none');\n if (this.draggedData) {\n this.dragEnd.emit({ ...this.draggedData });\n this.draggedData = null;\n }\n }\n\n ngOnDestroy() {\n if (this.mousedownListener) this.mousedownListener();\n if (this.mousemoveListener) this.mousemoveListener();\n if (this.mouseupListener) this.mouseupListener();\n\n if (this.timer) {\n cancelAnimationFrame(this.timer);\n this.timer = null;\n }\n }\n}\n","<div class=\"rect\"></div>\n<div class=\"line\"></div>","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n OnDestroy,\n OnInit,\n Signal,\n signal,\n untracked,\n viewChild,\n ViewContainerRef\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_PREVENT_CLEAR_SELECTION_CLASS,\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 {\n AddFieldOptions,\n AddRecordOptions,\n AITableField,\n Coordinate,\n RendererContext,\n UpdateFieldValueOptions,\n DragEndData,\n DragType,\n AIRecordFieldIdPath,\n AITable\n} 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, AITableSelectAllState, ScrollActionOptions } from './types';\nimport {\n buildGridLinearRows,\n getColumnIndicesSizeMap,\n getDetailByTargetName,\n handleMouseStyle,\n isCellMatchKeywords,\n isWindows\n} from './utils';\nimport { getMousePosition } from './utils/position';\nimport { AITableDragComponent } from './components/drag/drag.component';\nimport { buildClipboardData, writeToClipboard, writeToAITable, AITablePasteActions } from './utils/clipboard';\nimport { ThyNotifyService } from 'ngx-tethys/notify';\nimport { isNumber } from 'lodash';\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, AITableDragComponent],\n providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService]\n})\nexport class AITableGrid extends AITableGridBase implements OnInit, OnDestroy {\n private viewContainerRef = inject(ViewContainerRef);\n\n private isDragSelecting = false;\n\n private dragSelectionStart: AIRecordFieldIdPath | null = null;\n\n private notifyService = inject(ThyNotifyService);\n\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 frozenColumnCount = signal(1);\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 visibleColumnsIndexMap = 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 rowIndicesSizeMap: {},\n columnIndicesSizeMap: getColumnIndicesSizeMap(fields),\n frozenColumnCount: this.frozenColumnCount()\n });\n return {\n aiTable: this.aiTable,\n gridData: this.gridData(),\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 this.bindClipboardShortcuts();\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 effect(\n () => {\n this.setKeywordsMatchedCells();\n },\n { allowSignalWrites: true }\n );\n\n effect(\n () => {\n const recordIdSet = new Set<string>(this.aiTable.records().map((item) => item._id));\n untracked(() => {\n const selectedRecords = this.aiTable.selection().selectedRecords;\n for (const selectedRecordId of selectedRecords.values()) {\n if (!recordIdSet.has(selectedRecordId)) {\n selectedRecords.delete(selectedRecordId);\n }\n }\n this.aiTable.selection.update((item) => {\n return {\n ...item,\n selectedRecords,\n selectAllState: this.aiTableGridSelectionService.selectAllState()\n };\n });\n });\n },\n { allowSignalWrites: true }\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 visibleColumnsIndexMap: this.visibleColumnsIndexMap,\n visibleRowsIndexMap: this.visibleRowsIndexMap,\n pointPosition: signal(DEFAULT_POINT_POSITION),\n scrollState: signal(DEFAULT_SCROLL_STATE),\n frozenColumnCount: this.frozenColumnCount,\n references: this.aiReferences,\n aiFieldConfig: this.aiFieldConfig,\n scrollAction: this.scrollAction\n });\n }\n\n private setKeywordsMatchedCells() {\n const keywords = this.aiKeywords();\n let matchedCells = new Set<string>();\n\n if (keywords) {\n const references = this.aiReferences();\n this.aiTable.records().forEach((record) => {\n this.aiTable.fields().forEach((field) => {\n if (isCellMatchKeywords(this.aiTable, field, record._id, keywords, references)) {\n matchedCells.add(`${record._id}:${field._id}`);\n }\n });\n });\n }\n\n this.aiTable.keywordsMatchedCells.set(matchedCells);\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 if (this.isDragSelecting) {\n const { fieldId, recordId } = getDetailByTargetName(curMousePosition.realTargetName);\n if (fieldId && recordId) {\n const startCell = this.dragSelectionStart;\n const endCell: AIRecordFieldIdPath = [recordId, fieldId];\n if (startCell && !!startCell.length) {\n this.aiTableGridSelectionService.selectCells(startCell, endCell);\n }\n }\n }\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 if (\n mouseEvent.button === AITableMouseDownType.Right &&\n recordId &&\n fieldId &&\n (this.aiTable.selection().selectedRecords.has(recordId) || this.aiTable.selection().selectedCells.has(`${recordId}:${fieldId}`))\n ) {\n return;\n }\n\n switch (targetName) {\n case AI_TABLE_FIELD_HEAD:\n mouseEvent.preventDefault();\n if (!fieldId) return;\n this.aiTableGridSelectionService.selectField(fieldId);\n this.handleFieldDragStart();\n return;\n case AI_TABLE_CELL:\n if (!recordId || !fieldId) return;\n const dragSelectionStart: AIRecordFieldIdPath = [recordId, fieldId];\n this.updateDragSelectionState(true, dragSelectionStart);\n this.aiTableGridSelectionService.selectCells(dragSelectionStart);\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 stageMouseup(e: KoEventObject<MouseEvent>) {\n this.updateDragSelectionState(false, null);\n }\n\n stageContextmenu(e: KoEventObject<MouseEvent>) {\n const mouseEvent = e.event.evt;\n mouseEvent.preventDefault();\n\n if (this.aiReadonly()) {\n return;\n }\n\n const targetName = e.event.target.name();\n const { fieldId, recordId } = getDetailByTargetName(targetName);\n if (!recordId || !fieldId) {\n return;\n }\n\n const position = {\n x: mouseEvent.x,\n y: mouseEvent.y\n };\n const menuItems = this.aiContextMenuItems();\n if (!menuItems.length || menuItems.every((item) => !!(item.hidden && item.hidden(this.aiTable, targetName, position)))) {\n return;\n }\n\n this.aiTableGridEventService.openContextMenu(this.aiTable, {\n origin: this.containerElement(),\n menuItems,\n position,\n targetName,\n viewContainerRef: this.viewContainerRef\n });\n }\n\n stageClick(e: KoEventObject<MouseEvent>) {\n const mouseEvent = e.event.evt;\n mouseEvent.preventDefault();\n this.aiTableGridEventService.closeCellEditor();\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().selectAllState === AITableSelectAllState.all;\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 viewContainerRef: this.viewContainerRef,\n container: this.containerElement(),\n coordinate: this.coordinate(),\n fieldId: fieldId!,\n recordId: recordId!,\n references: this.aiReferences(),\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(\n (e) =>\n e.target instanceof Element &&\n !this.containerElement().contains(e.target) &&\n !e.target.closest(AI_TABLE_PREVENT_CLEAR_SELECTION_CLASS)\n ),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.updateDragSelectionState(false, null);\n this.aiTableGridSelectionService.clearSelection();\n });\n }\n\n private updateDragSelectionState(isDragSelecting: boolean, dragSelectionStart: AIRecordFieldIdPath | null) {\n this.isDragSelecting = isDragSelecting;\n this.dragSelectionStart = dragSelectionStart;\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 viewContainerRef: this.viewContainerRef,\n container: this.containerElement(),\n coordinate: this.coordinate(),\n fieldId: fieldId!,\n recordId: recordId!,\n references: this.aiReferences(),\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 private bindClipboardShortcuts() {\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n filter((event) => (event.ctrlKey || event.metaKey) && (event.key === 'c' || event.key === 'v')),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(async (event) => {\n if (event.key === 'c') {\n const clipboardData = buildClipboardData(this.aiTable);\n if (clipboardData) {\n writeToClipboard(clipboardData).then(() => {\n const copiedCellsCount = this.aiTable.selection().selectedCells.size;\n this.notifyService.success(`已复制 ${copiedCellsCount} 个单元格`, undefined, {\n placement: 'bottomLeft'\n });\n });\n }\n } else if (event.key === 'v') {\n event.preventDefault();\n\n const actions: AITablePasteActions = {\n updateFieldValue: (data: UpdateFieldValueOptions) => {\n this.aiUpdateFieldValue.emit(data);\n },\n setField: (field: AITableField) => {\n this.aiSetField.emit(field);\n },\n addField: (data: AddFieldOptions) => {\n this.aiAddField.emit(data);\n },\n addRecord: (data: AddRecordOptions) => {\n this.addRecord();\n }\n };\n\n writeToAITable(this.aiTable, actions).then((isPasteSuccess) => {\n if (!isPasteSuccess) {\n this.notifyService.error('粘贴内容不符合当前类型', undefined, {\n placement: 'bottomLeft'\n });\n }\n });\n }\n });\n }\n\n private handleFieldDragStart() {\n if (!this.aiReadonly() && this.aiTableGridSelectionService.selectedFields.size > 0) {\n this.aiTableGridSelectionService.drag({\n type: DragType.field,\n sourceIds: this.aiTableGridSelectionService.selectedFields,\n scroll: this.getScrollPosition(),\n coordinate: this.coordinate()\n });\n }\n }\n\n private getScrollPosition() {\n const horizontalBar = this.horizontalBarRef()?.nativeElement;\n const verticalBar = this.verticalBarRef()?.nativeElement;\n let scrollLeft = horizontalBar?.scrollLeft || 0;\n let scrollTop = verticalBar?.scrollTop || 0;\n return { x: scrollLeft, y: scrollTop };\n }\n\n dragEnd(data: DragEndData) {\n switch (data.type) {\n case DragType.field:\n if (data.fieldsIndex && isNumber(data.targetIndex)) {\n for (let i = 0; i < data.fieldsIndex.length; i++) {\n this.aiMoveField.emit({\n path: [data.fieldsIndex[i]],\n newPath: [data.targetIndex + i]\n });\n }\n }\n break;\n case DragType.columnWidth:\n break;\n case DragType.record:\n return;\n }\n this.aiTableGridSelectionService.clearDrag();\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 (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($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 <ai-table-drag (dragEnd)=\"dragEnd($event)\"></ai-table-drag>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i2","isArrayEmpty","cellValueToSortValue","Image","fileIcons.doc","fileIcons.ppt","fileIcons.xls","fileIcons.css","fileIcons.img","fileIcons.video","fileIcons.mp3","fileIcons.pdf","fileIcons.txt","fileIcons.apk","fileIcons.cs","fileIcons.csv","fileIcons.exe","fileIcons.fla","fileIcons.html","fileIcons.ipa","fileIcons.java","fileIcons.js","fileIcons.php","fileIcons.rar","fileIcons.swf","fileIcons.ttf","fileIcons.vss","fileIcons.xsd","fileIcons.zip","fileIcons.defaultFile","_"],"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,gBAAgB,EAAE,WAAW;AAC7B,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,OAAO,EAAE;;;ACMA,MAAA,OAAO,GAAG;IACnB,SAAS,GAAA;AACL,QAAA,OAAO,MAAM;KAChB;AACD,IAAA,gBAAgB,CAAC,OAAgB,EAAA;AAC7B,QAAA,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;KACpE;AACD,IAAA,cAAc,CAAC,OAAgB,EAAA;AAC3B,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;KAC3B;AACD,IAAA,aAAa,CAAC,OAAgB,EAAA;AAC1B,QAAA,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU;KACxC;AACD,IAAA,kBAAkB,CAAC,OAAgB,EAAA;QAC/B,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe;QAC3D,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,aAAa;QACvD,IAAI,iBAAiB,GAAa,EAAE;AACpC,QAAA,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE;YAC1B,iBAAiB,GAAG,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;;AAC5C,aAAA,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE;YAC/B,iBAAiB,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;aACrE;YACH,iBAAiB,GAAG,EAAE;;AAE1B,QAAA,OAAO,iBAAiB;KAC3B;IACD,aAAa,CAAC,OAAgB,EAAE,IAAyB,EAAA;QACrD,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAQ,CAAC,mBAAmB,EAAE;QACjE,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAQ,CAAC,sBAAsB,EAAE;QACvE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,EAAE;AACtC,QAAA,MAAM,SAAS,GAAG,kBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC;AACzF,QAAA,OAAO,SAAS;KACnB;IACD,YAAY,CAAC,OAAgB,EAAE,IAAyB,EAAA;QACpD,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAQ,CAAC,mBAAmB,EAAE;QACjE,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAQ,CAAC,sBAAsB,EAAE;QACvE,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;AACtC,YAAA,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI;YAChC,OAAO;AACH,gBAAA,QAAQ,EAAE,kBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAE;AAC5C,gBAAA,WAAW,EAAE,qBAAqB,CAAC,GAAG,CAAC,OAAO;aACjD;;AAEL,QAAA,OAAO,IAAI;KACd;IACD,cAAc,CAAC,OAAgB,EAAE,WAAmB,EAAA;QAChD,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAQ,CAAC,iBAAiB,EAAE;AAC9D,QAAA,IAAI,WAAW,IAAI,iBAAiB,GAAG,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;;;ICpER;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AACxB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,WAAsB;AACtB,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;;AAEjB,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,gBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AACxB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AACxB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AACxB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,YAAwB;AAC5B,CAAC,EAhBW,gBAAgB,KAAhB,gBAAgB,GAgB3B,EAAA,CAAA,CAAA;IAQW;AAAZ,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,eAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,eAAA,CAAA,eAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY;AACZ,IAAA,eAAA,CAAA,eAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT,IAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACV,IAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACV,IAAA,eAAA,CAAA,eAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB;AAChB,IAAA,eAAA,CAAA,eAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB;AACjB,IAAA,eAAA,CAAA,eAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB;AACjB,IAAA,eAAA,CAAA,eAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO;AACP,IAAA,eAAA,CAAA,eAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,eAAA,CAAA,eAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAQ;AACR,IAAA,eAAA,CAAA,eAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAQ;AACR,IAAA,eAAA,CAAA,eAAA,CAAA,iBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,iBAAoB;AACpB,IAAA,eAAA,CAAA,eAAA,CAAA,mBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,mBAAsB;AACtB,IAAA,eAAA,CAAA,eAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAY;AACZ,IAAA,eAAA,CAAA,eAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAc;AACd,IAAA,eAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,gBAAmB;AACnB,IAAA,eAAA,CAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,kBAAqB;AACzB,CAAC,EAnBW,eAAe,KAAf,eAAe,GAmB1B,EAAA,CAAA,CAAA;IAiDW;AAAZ,CAAA,UAAY,wBAAwB,EAAA;AAChC,IAAA,wBAAA,CAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,wBAAA,CAAA,wBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO;AACP,IAAA,wBAAA,CAAA,wBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO;AACP,IAAA,wBAAA,CAAA,wBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACb,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,GAKnC,EAAA,CAAA,CAAA;IAoEW;AAAZ,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACnB,CAAC,EAHW,SAAS,KAAT,SAAS,GAGpB,EAAA,CAAA,CAAA;IAyCW;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAChB,IAAA,QAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,QAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,QAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,QAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EALW,QAAQ,KAAR,QAAQ,GAKnB,EAAA,CAAA,CAAA;;ACxNM,MAAM,yBAAyB,GAAG;AAClC,MAAM,wBAAwB,GAAG;AACjC,MAAM,2BAA2B,GAAG;AACpC,MAAM,wBAAwB,GAAG;AAE3B,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;AACV,KAAA;;AAED,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,MAAM;AAC7B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,cAAc;AACpB,QAAA,KAAK,EAAE;AACV,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,MAAM;AAC7B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,KAAK,EAAE,2BAA2B;AAClC,QAAA,QAAQ,EAAE;AACN,YAAA,WAAW,EAAE;AAChB;AACJ,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,MAAM;AAC7B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,KAAK,EAAE;AACV,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,IAAI;AAC3B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,KAAK,EAAE;AACV,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,MAAM;AAC7B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE,wBAAwB;AAC/B,QAAA,QAAQ,EAAE;AACN,YAAA,WAAW,EAAE;AAChB;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;AACV,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,IAAI;AAC3B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,KAAK,EAAE;AACV,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,IAAI;AAC3B,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,KAAK,EAAE;AACV,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,UAAU;AACjC,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,YAAY;AAClB,QAAA,KAAK,EAAE;AACV,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,SAAS;AAChC,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE;AACV,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,SAAS;AAChC,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,KAAK,EAAE;AACV,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,SAAS;AAChC,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,KAAK,EAAE;AACV,KAAA;AACD,IAAA;QACI,IAAI,EAAE,gBAAgB,CAAC,SAAS;AAChC,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,KAAK,EAAE;AACV;;;ICpGO;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,SAAa;AACb,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,GAAA,CAAA,GAAA,SAAa;AACjB,CAAC,EAZW,iBAAiB,KAAjB,iBAAiB,GAY5B,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,iBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACR,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAI5B,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,iBAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACd,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAI5B,EAAA,CAAA,CAAA;;IC+CW;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC5B,IAAA,oBAAA,CAAA,oBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,oBAAA,CAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACN,IAAA,oBAAA,CAAA,oBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACT,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,GAI/B,EAAA,CAAA,CAAA;;ICKW;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC5B,IAAA,oBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,GAG/B,EAAA,CAAA,CAAA;IAgBW;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AACxB,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AAC3B,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,GAG3B,EAAA,CAAA,CAAA;IAeW;AAAZ,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EAHW,eAAe,KAAf,eAAe,GAG1B,EAAA,CAAA,CAAA;IA4CW;AAAZ,CAAA,UAAY,qBAAqB,EAAA;AAC7B,IAAA,qBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,qBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EAJW,qBAAqB,KAArB,qBAAqB,GAIhC,EAAA,CAAA,CAAA;;ICnKW;AAAZ,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA;;ICNW;AAAZ,CAAA,UAAY,sBAAsB,EAAA;AAC9B,IAAA,sBAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,sBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,sBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,sBAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,sBAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,sBAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,sBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,sBAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,sBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,sBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,sBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,sBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,sBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,sBAAA,CAAA,YAAA,CAAA,GAAA,aAA0B;AAC9B,CAAC,EAfW,sBAAsB,KAAtB,sBAAsB,GAejC,EAAA,CAAA,CAAA;;ACfD;;AAEG;MACU,UAAU,CAAA;AAuBnB,IAAA,WAAA,CAAY,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,EACT,iBAAiB,GAAG,EAAE,EACtB,oBAAoB,GAAG,EAAE,EACzB,WAAW,GAAG,CAAC,EACf,cAAc,GAAG,CAAC,EAClB,iBAAiB,GAAG,CAAC,EACL,EAAA;;QAzBb,IAAiB,CAAA,iBAAA,GAAmB,EAAE;;QAEtC,IAAoB,CAAA,oBAAA,GAAmB,EAAE;;QAMzC,IAAY,CAAA,YAAA,GAAG,CAAC,CAAC;;QAEjB,IAAe,CAAA,eAAA,GAAG,CAAC,CAAC;QACpB,IAAc,CAAA,cAAA,GAAwC,EAAE;QACxD,IAAiB,CAAA,iBAAA,GAAwC,EAAE;AAc9D,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,WAAW;AAC3C,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,QAAA,IAAI,CAAC,oBAAoB,GAAG,oBAAoB;AAChD,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,YAAY;AAC7C,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;AAG9B,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU;;IAG1B,IAAW,SAAS,CAAC,MAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;;AAG5B;;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;QAChG,OAAO,MAAM,GAAG,IAAI;;AAGxB;;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;QAC1F,OAAO,MAAM,GAAG,IAAI;;AAGxB;;AAEG;AACI,IAAA,YAAY,CAAC,KAAa,EAAA;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS;;AAG1D;;AAEG;AACI,IAAA,cAAc,CAAC,KAAa,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;;AAG3C;;AAEG;IACO,eAAe,CAAC,KAAa,EAAE,QAA8B,EAAA;AACnE,QAAA,IAAI,eAAe,EAAE,iBAAiB,EAAE,MAAM;AAC9C,QAAA,MAAM,YAAY,GAAG,QAAQ,KAAK,oBAAoB,CAAC,MAAM;QAC7D,IAAI,YAAY,EAAE;AACd,YAAA,MAAM,GAAG,IAAI,CAAC,cAAc;AAC5B,YAAA,iBAAiB,GAAG,IAAI,CAAC,eAAe;AACxC,YAAA,eAAe,GAAG,IAAI,CAAC,iBAAiB;;aACrC;AACH,YAAA,MAAM,GAAG,IAAI,CAAC,WAAW;AACzB,YAAA,iBAAiB,GAAG,IAAI,CAAC,YAAY;AACrC,YAAA,eAAe,GAAG,IAAI,CAAC,cAAc;;AAEzC,QAAA,IAAI,KAAK,GAAG,iBAAiB,EAAE;AAC3B,YAAA,IAAI,iBAAiB,IAAI,CAAC,EAAE;AACxB,gBAAA,MAAM,YAAY,GAAG,eAAe,CAAC,iBAAiB,CAAC;gBACvD,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI;;AAGpD,YAAA,KAAK,IAAI,CAAC,GAAG,iBAAiB,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;gBACjD,MAAM,IAAI,GAAG,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;gBAExG,eAAe,CAAC,CAAC,CAAC,GAAG;oBACjB,MAAM;oBACN;iBACH;gBACD,MAAM,IAAI,IAAI;;YAElB,IAAI,YAAY,EAAE;AACd,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;;iBACzB;AACH,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;;;AAGjC,QAAA,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;;AAG3D;;;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;QAC7F,IAAI,QAAQ,GAAG,CAAC;AAEhB,QAAA,OAAO,KAAK,GAAG,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE;YAC/E,KAAK,IAAI,QAAQ;YACjB,QAAQ,IAAI,CAAC;;AAGjB,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;;AAGtH;;;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;AACjD,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,MAAM;AAEnE,YAAA,IAAI,aAAa,KAAK,MAAM,EAAE;AAC1B,gBAAA,OAAO,MAAM;;AACV,iBAAA,IAAI,aAAa,GAAG,MAAM,EAAE;AAC/B,gBAAA,GAAG,GAAG,MAAM,GAAG,CAAC;;AACb,iBAAA,IAAI,aAAa,GAAG,MAAM,EAAE;AAC/B,gBAAA,IAAI,GAAG,MAAM,GAAG,CAAC;;;AAGzB,QAAA,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;;AAGjC;;AAEG;IACI,oBAAoB,CAAC,MAAc,EAAE,QAA8B,EAAA;AACtE,QAAA,IAAI,SAAS;AACb,QAAA,IAAI,QAAQ,KAAK,oBAAoB,CAAC,MAAM,EAAE;AAC1C,YAAA,SAAS,GAAG,IAAI,CAAC,eAAe;;aAC7B;AACH,YAAA,SAAS,GAAG,IAAI,CAAC,YAAY;;AAEjC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,MAAM;AACnE,QAAA,MAAM,sBAAsB,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC;AAE7D,QAAA,IAAI,sBAAsB,IAAI,MAAM,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;;AAE7E,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC;;AAG/E;;AAEG;AACI,IAAA,gBAAgB,CAAC,MAAc,EAAA;QAClC,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAAG,CAAC;;AAGtE;;AAEG;IACI,eAAe,CAAC,UAAkB,EAAE,SAAiB,EAAA;AACxD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,oBAAoB,CAAC,GAAG,CAAC;AAC/E,QAAA,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,eAAe;QAClD,IAAI,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI;QACpD,IAAI,SAAS,GAAG,UAAU;AAE1B,QAAA,OAAO,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,MAAM,GAAG,SAAS,EAAE;AACxD,YAAA,SAAS,EAAE;AACX,YAAA,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI;;AAE5E,QAAA,OAAO,SAAS;;AAGpB;;AAEG;AACI,IAAA,mBAAmB,CAAC,MAAc,EAAA;QACrC,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC;;AAGzE;;AAEG;IACI,kBAAkB,CAAC,UAAkB,EAAE,UAAkB,EAAA;AAC5D,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,oBAAoB,CAAC,MAAM,CAAC;AAClF,QAAA,MAAM,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC,cAAc;QAClD,IAAI,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI;QACpD,IAAI,SAAS,GAAG,UAAU;AAE1B,QAAA,OAAO,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,MAAM,GAAG,SAAS,EAAE;AAC3D,YAAA,SAAS,EAAE;AACX,YAAA,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI;;AAE/E,QAAA,OAAO,SAAS;;AAGpB;;AAEG;AACI,IAAA,YAAY,CAAC,QAAgB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM;;AAG1E;;AAEG;AACI,IAAA,eAAe,CAAC,WAAmB,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,MAAM;;AAGhF;;AAEG;AACH,IAAA,IAAI,iBAAiB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,cAAc;;AAG7E;;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;QAC5F,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,oBAAoB,CAAC,MAAM,CAAC;QACjG,OAAO;YACH,CAAC;YACD,CAAC;YACD,KAAK;YACL;SACH;;AAER;;ACrQD,IAAY,YAMX;AAND,CAAA,UAAY,YAAY,EAAA;AACpB,IAAA,YAAA,CAAA,YAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO;AACP,IAAA,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,YAAA,CAAA,YAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa;AACb,IAAA,YAAA,CAAA,YAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa;AACb,IAAA,YAAA,CAAA,YAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB;AACpB,CAAC,EANW,YAAY,KAAZ,YAAY,GAMvB,EAAA,CAAA,CAAA;AAED,IAAY,kBAMX;AAND,CAAA,UAAY,kBAAkB,EAAA;AAC1B,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,kEAAwE;AACxE,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,YAAsB;AACtB,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,4BAAwC;AACxC,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,4BAAwC;AACxC,IAAA,kBAAA,CAAA,cAAA,CAAA,GAAA,gEAA+E;AACnF,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,GAM7B,EAAA,CAAA,CAAA;AAED,MAAM,gBAAgB,GAAG;IACrB,CAAC,YAAY,CAAC,GAAG,GAAG,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC;IAC1D,CAAC,YAAY,CAAC,OAAO,GAAG,cAAc,CAAC,kBAAkB,CAAC,OAAO,CAAC;IAClE,CAAC,YAAY,CAAC,SAAS,GAAG,cAAc,CAAC,kBAAkB,CAAC,SAAS,CAAC;IACtE,CAAC,YAAY,CAAC,SAAS,GAAG,cAAc,CAAC,kBAAkB,CAAC,SAAS,CAAC;IACtE,CAAC,YAAY,CAAC,YAAY,GAAG,cAAc,CAAC,kBAAkB,CAAC,YAAY;CAC9E;AAiBK,SAAU,OAAO,CAAC,QAAkC,GAAA,YAAY,CAAC,GAAG,EAAE,IAAA,GAAe,CAAC,EAAE,QAAiB,EAAA;IAC3G,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,EAAE;AACvB,QAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAA,oBAAA,CAAsB,CAAC;;AAEhE,IAAA,IAAI,WAAsC;AAC1C,IAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,EAAE;AAC3C,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAA,wBAAA,EAA2B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;;AAEpH,QAAA,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC;;AACrC,SAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC3B,QAAA,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC;;SACnC;AACH,QAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAA,+CAAA,CAAiD,CAAC;;AAEnG,IAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAA,+BAAA,CAAiC,CAAC;;QAEnF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,GAAG,GAAG,OAAO;AACnB,QAAA,OAAO,GAAG;;AAEd,IAAA,OAAO,WAAW,CAAC,IAAI,CAAC;AAC5B;;SC/DgB,SAAS,GAAA;AACrB,IAAA,OAAO,QAAQ,EAAE,CAAC,WAAW,EAAE;AACnC;AAEM,SAAU,UAAU,CAAC,KAAa,EAAA;IACpC,IAAI,KAAK,IAAI,CAAC;AAAE,QAAA,OAAO,EAAE;IACzB,MAAM,MAAM,GAAa,EAAE;AAC3B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC5B,QAAA,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;;AAE5B,IAAA,OAAO,MAAM;AACjB;SAEgB,cAAc,GAAA;AAC1B,IAAA,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;AAChC;AAEM,SAAU,eAAe,CAAC,KAAa,EAAA;IACzC,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC;AACvC;;AClBa,MAAA,YAAY,GAAG,CAAC,KAAmB,KAAI;IAChD,OAAO;AACH,QAAA,gBAAgB,CAAC,MAAM;AACvB,QAAA,gBAAgB,CAAC,SAAS;AAC1B,QAAA,gBAAgB,CAAC,SAAS;AAC1B,QAAA,gBAAgB,CAAC,MAAM;AACvB,QAAA,gBAAgB,CAAC;AACpB,KAAA,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AAC1B;AAEa,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;AACL;AAEa,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;AAC3G;AAEM,SAAU,oBAAoB,CAAC,KAAmB,EAAA;AACpD,IAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACrB,QAAA,OAAO,EAAE;;AAEb,IAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,IAAI;;AAEf,IAAA,OAAO,EAAE;AACb;AAEgB,SAAA,sBAAsB,CAAC,OAAgB,EAAE,KAAyB,EAAA;AAC9E,IAAA,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC;IAChD,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;SACxC,CAAC,CAAC,MAAM;AACT,QAAA,OAAO,KAAK,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK;;AAE1E,IAAA,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;AAC/B;AAEM,SAAU,qBAAqB,CAAC,KAA4B,EAAA;AAC9D,IAAA,IAAI,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7E,IAAA,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,IAAK,KAAK,CAAC,QAA2B,EAAE,WAAW,EAAE;AAC1G,QAAA,WAAW,CAAC,KAAK,GAAG,2BAA2B;;AAEnD,IAAA,OAAO,WAAW;AACtB;AAEgB,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;AACnC,cAAE,CAAC,CAAE,WAAW,CAAC,QAAuB,EAAE,WAAW,KAAK,CAAC,CAAE,KAAK,CAAC,QAAuB,EAAE;AAC5F,cAAE,IAAI,CAAC;AAEnB;AAEM,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;AACpE,IAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,sBAAsB,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;AACzF;;SC7DgB,aAAa,CAAC,OAAuC,EAAE,MAAqC,EAAE,QAA8B,EAAA;AACxI,IAAA,MAAM,OAAO,GAAY;QACrB,OAAO;QACP,MAAM;QACN,QAAQ;QACR,SAAS,EAAE,MAAM,CAAC;YACd,eAAe,EAAE,IAAI,GAAG,EAAE;YAC1B,cAAc,EAAE,IAAI,GAAG,EAAE;YACzB,aAAa,EAAE,IAAI,GAAG,EAAE;AACxB,YAAA,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,qBAAqB,CAAC;SACzC,CAAC;AACF,QAAA,oBAAoB,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;AACvC,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;AACvB,gBAAA,OAAO,MAAM;aAChB,EACD,EAAsC,CACzC;AACL,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;AACvB,gBAAA,OAAO,MAAM;aAChB,EACD,EAAqC,CACxC;AACL,SAAC,CAAC;AACF,QAAA,iBAAiB,EAAE,MAAM,CAAC,EAAE,CAAC;AAC7B,QAAA,eAAe,EAAE,MAAM,CAAC,EAAE;KAC7B;AACD,IAAA,OAAO,OAAO;AAClB;;ACxBgB,SAAA,aAAa,CAAC,MAA8B,EAAE,KAAmB,EAAA;AAC7E,IAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;QACtB,OAAO,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAwB,CAAC;;IAEtE,OAAO,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;AACrC;AAEgB,SAAA,mBAAmB,CAAC,MAA8B,EAAE,IAAsB,EAAA;AACtF,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;AAC1B,IAAA,IAAI,IAAI,KAAK,gBAAgB,CAAC,SAAS,IAAI,IAAI,KAAK,gBAAgB,CAAC,SAAS,EAAE;AAC5E,QAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAoB;;AAEjD,IAAA,IAAI,IAAI,KAAK,gBAAgB,CAAC,SAAS,IAAI,IAAI,KAAK,gBAAgB,CAAC,SAAS,EAAE;QAC5E,OAAO,CAAC,KAAK,CAAqB;;AAEtC,IAAA,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAA,CAAE,CAAC;AACzC;AAEa,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;QAC/D,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE;YACrD,OAAO,CAAC,WAAW,CAAe;;AAEtC,QAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC;KAC5F;IACD,aAAa,CAAC,OAAgB,EAAE,KAAmB,EAAA;AAC/C,QAAA,MAAM,UAAU,GAAG,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3D,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,EAAE;YACnD,OAAO,CAAC,UAAU,CAAe;;AAErC,QAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC;KAC1F;IACD,aAAa,CAAC,OAAgB,EAAE,IAAyB,EAAA;QACrD,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC;;AAE7C,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;AACpB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC;;AAE7C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,CAAuB,CAAC;;QAE5C,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAA,CAAA,CAAG,CAAC;;AAE5D,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAA,CAAA,CAAG,CAAC;;AAE5D,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAA,CAAA,CAAG,CAAC;;AAE3D,QAAA,OAAO,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;KACtC;IACD,mBAAmB,CAAC,MAA8B,EAAE,IAAsB,EAAA;AACtE,QAAA,OAAO,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC;KAC3C;IACD,QAAQ,CAAC,OAAgB,EAAE,IAAY,EAAA;QACnC,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC;;QAE7C,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAA,CAAA,CAAG,CAAC;;QAE5D,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;KAC/D;IAED,SAAS,CAAC,OAAgB,EAAE,IAAgB,EAAA;QACxC,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC;;QAE7C,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAA,CAAA,CAAG,CAAC;;QAE5D,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;MChF5B,eAAe,CAAA;AAWxB,IAAA,WAAA,CAAY,OAAuB,EAAA;QAC/B,MAAM,EACF,UAAU,EACV,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,YAAY,EACf,GAAG,OAAO;AACX,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,sBAAsB,GAAG,sBAAsB;AACpD,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AAC9C,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;;AAGtC,IAAA,gBAAgB,CAAC,QAAuC,EAAA;AACpD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;AACxC,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;AACnD,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;;;AAI3C,IAAA,cAAc,CAAC,WAAwC,EAAA;AACnD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC;;AAEtE;;MClDqB,sBAAsB,CAAA;AAN5C,IAAA,WAAA,GAAA;QAeI,IAAgB,CAAA,gBAAA,GAAG,MAAM,EAAmC;AAI5D,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YAClB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO,CAAe;AAC/D,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;YACnB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAA4B,MAAM,EAAC,UAAuB,EAAC;AAE3D,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,EAAC,aAA6C,GAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAqBtG;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;SAC3F,CAAC,EAAE;;IAGR,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;;AAEJ,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;AAC7C,SAAA,CAAC;;IAGN,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE;;+GA1Cb,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,qOAJ9B,CAAE,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAIM,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;AAC5C,iBAAA;8BAE8B,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,QAAQ,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,UAAU,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;ACevB,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;YAC/F,IAAI,CAAC,KAAK,EAAE;gBACR,OAAO;AACH,oBAAA,SAAS,EAAE;iBACd;;AAEL,YAAA,OAAO,KAAK;SACf,CAAC,EAAE;;AAGR,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;AAC7C,SAAA,CAAC;QACF,IAAI,CAAC,YAAY,EAAE;;AAGvB,IAAA,aAAa,CAAC,MAAe,EAAA;QACzB,IAAI,CAAC,MAAM,EAAE;YACT,IAAI,CAAC,YAAY,EAAE;;;+GAvBlB,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;;;;;;;;;;;;;;;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;;4FAKhD,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA1BnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;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;AACV;AACJ,iBAAA;;;AChBM,MAAM,cAAc,GAAG,oDAAoD;AAElF;;AAEG;MAeU,iBAAiB,CAAA;AAiB1B,IAAA,WAAA,CAAmB,aAAqC,EAAA;QAArC,IAAa,CAAA,aAAA,GAAb,aAAa;QAhBvB,IAAG,CAAA,GAAA,GAAG,EAAE;QAER,IAAI,CAAA,IAAA,GAAG,EAAE;AAER,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAiC;QAE9D,IAAQ,CAAA,QAAA,GAAG,cAAc;AAEhC,QAAA,IAAA,CAAA,eAAe,GAAG;AACd,YAAA,kBAAkB,EAAE;AAChB,gBAAA,GAAG,EAAE;AACD,oBAAA,OAAO,EAAE;AACZ;AACJ;SACJ;;AAID,IAAA,QAAQ;IAER,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;;AAG9B,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;YACtD;;QAGJ,IAAI,CAAC,KAAK,EAAE;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QAC3B,MAAM,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS;AAC9D,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;+GAnClB,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;4FAGR,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;AACH,qBAAA,EAAA,QAAA,EAAA,s/BAAA,EAAA;oFAGQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,OAAO,EAAA,CAAA;sBAAhB;;;AEPC,MAAO,uBAAwB,SAAQ,sBAAqD,CAAA;AApBlG,IAAA,WAAA,GAAA;;QAwBI,IAAI,CAAA,IAAA,GAAG,EAAE;QAET,IAAG,CAAA,GAAA,GAAG,EAAE;QAER,IAAW,CAAA,WAAA,GAAG,EAAE;AAEhB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE/B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAExC,IAAQ,CAAA,QAAA,GAAG,KAAK;AA2EnB;AAzEG,IAAA,WAAW,CAAC,IAAmC,EAAA;QAC3C,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;AACrB,YAAA,OAAO,IAAI;;AAEf,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACX,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEzC,QAAA,OAAO,IAAI;;AAGf,IAAA,eAAe,CAAC,IAAmC,EAAA;QAC/C,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAC/B,IAAI,CAAC,IAAI,EAAE;YACP,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;;aACzB;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE;AAC5B,YAAA,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE;;;AAI/C,IAAA,IAAI,CAAC,KAAiB,EAAA;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC;QACxE,IAAI,CAAE,KAAK,CAAC,aAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;YACzD,IAAI,CAAC,WAAW,EAAE;;;IAIjB,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE;QACvC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,EAAE;;IAGzC,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;AAC7D,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;YACnC;;QAEJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC;AAChF,QAAA,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;YAC/C,KAAK,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU;;;IAI1C,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,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;AACtB;AACJ,SAAA,CAAC;QAEF,IAAI,UAAU,EAAE;YACZ,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAoC,KAAI;AACpF,gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;AACtB,gBAAA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG;gBACpB,IAAI,CAAC,WAAW,EAAE;AACtB,aAAC,CAAC;AAEF,YAAA,UAAU,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,MAAK;AACrC,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC3B,aAAC,CAAC;;;+GAxFD,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;4FAOhB,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;qBACH,EACK,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE;AACV,qBAAA,EAAA,QAAA,EAAA,0rBAAA,EAAA;8BAID,YAAY,EAAA,CAAA;sBADX,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;AEZ1C,MAAO,yBAA0B,SAAQ,sBAA8B,CAAA;IACzE,WAAW,GAAA;QACP,KAAK,CAAC,MAAM,EAAE;QACd,IAAI,CAAC,YAAY,EAAE;;+GAHd,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;4FAKtE,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;AACV;AACJ,iBAAA;;;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;SACT;AAWJ;AARG,IAAA,gBAAgB,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE;;AAG1B,IAAA,sBAAsB,CAAC,KAAY,EAAA;QAC/B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;;+GAjBlB,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;;;;;;;;;;;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;;4FAQvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAzBnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE;;;;;;;;;;;;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;AACtB;AACJ,iBAAA;8BAYG,gBAAgB,EAAA,CAAA;sBADf,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;;AClCnC,MAAO,yBAA0B,SAAQ,sBAA8B,CAAA;+GAAhE,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;4FAKrB,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;AACV;AACJ,iBAAA;;;MCKY,qBAAqB,CAAA;AAXlC,IAAA,WAAA,GAAA;AAYI,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAgB;AAEtC,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAuB;AAErD,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,OAAQ,IAAI,CAAC,KAAK,EAAyB,CAAC,QAAQ,CAAC,YAAY,IAAI,wBAAwB,CAAC,IAAI;AACtG,SAAC,CAAC;QAEF,IAAwB,CAAA,wBAAA,GAAG,wBAAwB;AACtD;+GAVY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArB,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;;4FAE3D,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;qBAChC,EACQ,OAAA,EAAA,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,0qDAAA,EAAA;;;AEgBnE,MAAO,yBAA0B,SAAQ,sBAA6D,CAAA;AASxG,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,WAAW;;AAG9C,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAbX,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;YAC1B,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO;AACxC,SAAC,CAAC;AAEF,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;AAChI,SAAC,CAAC;;IAUO,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;AAC/F,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,gBAAA,OAAO,KAAK,CAAC,CAAC,CAAC;;YAEnB,OAAO,KAAK,IAAI,EAAE;SACrB,CAAC,EAAE;;AAGR,IAAA,YAAY,CAAC,KAAc,EAAA;QACvB,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,YAAY,EAAE;;;AAI3B,IAAA,aAAa,CAAC,KAAU,EAAA;QACpB,IAAI,CAAC,aAAa,EAAE;;IAGxB,aAAa,GAAA;AACT,QAAA,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAK,CAAC,IAAI,CAAC,UAAU,CAAc,KAAK,EAAE,CAAa;QAC1H,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAa;AACjH,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE;AACrF,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;AAC7C,aAAA,CAAC;;;+GA5CD,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,mKCjCtC,uzBAmBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDGQ,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,gNACT,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,qBAAqB,EACrB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8BACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,8VACX,eAAe,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAGV,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBApBrC,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;qBACV,EACQ,OAAA,EAAA;wBACL,SAAS;wBACT,SAAS;wBACT,gBAAgB;wBAChB,qBAAqB;wBACrB,YAAY;wBACZ,cAAc;wBACd,aAAa;wBACb,WAAW;wBACX;AACH,qBAAA,EAAA,QAAA,EAAA,uzBAAA,EAAA;;;AEJC,MAAO,uBAAwB,SAAQ,sBAA8B,CAAA;AAMvE,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AANH,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;QAC3B,IAAS,CAAA,SAAA,GAAG,GAAG;QAEf,IAAS,CAAA,SAAA,GAAG,EAAE;;IAMtB,eAAe,GAAA;QACX,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,WAAW,EAAE;AACtB,SAAC,CAAC;;IAGN,WAAW,GAAA;AACP,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC;QACxE,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;AACjD,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;AAEtF,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA,EAAA,CAAI,CAAC;AACpE,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAA,EAAG,SAAS,CAAA,EAAA,CAAI,CAAC;YAC3D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;;;IAIzD,WAAW,GAAA;QACP,IAAI,CAAC,WAAW,EAAE;;IAGtB,WAAW,GAAA;QACP,KAAK,CAAC,MAAM,EAAE;QACd,IAAI,CAAC,YAAY,EAAE;;+GAnCd,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;;;;;;;;;;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;;4FAKzE,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBArBnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE;;;;;;;;;;;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;AACV;AACJ,iBAAA;;;MCVY,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;;+GAF7D,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,UAAU,EAAE;AACf,iBAAA;;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;AAClD,aAAC,CAAC;AACN,YAAA,EAAE;;+GAPD,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE;AACf,iBAAA;;MAiBY,kBAAkB,CAAA;IAC3B,SAAS,CAAC,QAAgB,EAAE,SAA2B,EAAA;QACnD,OAAO,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;;+GAFzC,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,UAAU,EAAE;AACf,iBAAA;;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;AACzC,aAAC,CAAC;AACN,YAAA,EAAE;;+GAPD,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,CAAA;;4FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAJpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,UAAU,EAAE;AACf,iBAAA;;MAiBY,iBAAiB,CAAA;AAC1B,IAAA,SAAS,CAAC,QAA8B,EAAA;AACpC,QAAA,OAAO,QAA0B;;+GAF5B,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE;AACf,iBAAA;;MAWY,iBAAiB,CAAA;AAC1B,IAAA,SAAS,CAAC,QAA8B,EAAA;AACpC,QAAA,OAAO,QAA0B;;+GAF5B,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE;AACf,iBAAA;;MAWY,4BAA4B,CAAA;IACrC,SAAS,CAAC,WAA+B,EAAE,KAA4B,EAAA;AACnE,QAAA,OAAO,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC;;+GAFvC,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,CAAA,CAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,mBAAmB;AACzB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCNY,mBAAmB,CAAA;AArChC,IAAA,WAAA,GAAA;AAsCI,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAgB;AAE5C,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAW;AAEnC,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAA0B,IAAI,CAAC;QAEzD,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAmB,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;QAE1E,IAAQ,CAAA,QAAA,GAAG,MAAM,EAAgB;QAEjC,IAAQ,CAAA,QAAA,GAAG,MAAM,EAAmB;AAEpC,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAE;AACrD,SAAC,CAAC;QAEF,IAAc,CAAA,cAAA,GAAG,EAAE;AAEnB,QAAA,IAAA,CAAA,eAAe,GAA2B;AACtC,YAAA,kBAAkB,EAAE;AAChB,gBAAA,SAAS,EAAE;AACP,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,cAAc,EAAE;AACnB;AACJ;SACJ;AAED,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC;QAExC,IAAgB,CAAA,gBAAA,GAAG,gBAAgB;QAEnC,IAAgB,CAAA,gBAAA,GAAG,KAAK;AAEd,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,EAAC,aAAkC,EAAC;AAOpE,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,SAAiB,KAAI;AACpC,YAAA,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE;AAC7B,YAAA,OAAO,EAAE,CACL,CAAC,CAAC,IAAI,CAAC,OAAO;AACT,iBAAA,MAAM;kBACL,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAC3F;AACL,SAAC;AA4CJ;IAxDG,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,gBAAgB;YACjB,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAE,IAAI,CAAC,WAAW,EAAE,CAAC,QAA2B,EAAE,WAAW;;AAY7H,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;AACvC,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE;YACrC,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;AAC1D,YAAA,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;AACvD,SAAC,CAAC;QACF,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;SACtC,EAAE,CAAC,CAAC;;IAGT,iBAAiB,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjB,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;AAChC,aAAA,CAAC;;aACC;YACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;;AAE1C,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;;IAG9B,oBAAoB,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;YACjB,GAAG,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,QAAQ,EAAE;gBACN,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACtC,WAAW,EAAE,IAAI,CAAC;AACrB;AACJ,SAAA,CAAC;;AAGN,IAAA,cAAc,CAAC,CAAQ,EAAA;QACnB,CAAC,CAAC,cAAc,EAAE;QAClB,CAAC,CAAC,eAAe,EAAE;;IAGvB,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;;+GA1FrB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,syBCjFhC,ojGAyEA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvBQ,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,WAAW,EACX,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,EAAA,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,aAAa,+KACb,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,iBAAiB,EACjB,QAAA,EAAA,uDAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,yFACvB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,oBAAoB,EAAA,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,EACpB,4BAA4B,EAC5B,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gCAAgC,sEAChC,gCAAgC,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,sCAAsC,EACtC,QAAA,EAAA,iCAAA,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,SAAS,2IACT,aAAa,EAAA,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,EACb,gBAAgB,EAChB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,6HACrB,4BAA4B,EAAA,IAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAavB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBArC/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,cAEtB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACL,OAAO;wBACP,WAAW;wBACX,OAAO;wBACP,aAAa;wBACb,aAAa;wBACb,iBAAiB;wBACjB,uBAAuB;wBACvB,wBAAwB;wBACxB,oBAAoB;wBACpB,4BAA4B;wBAC5B,gCAAgC;wBAChC,gCAAgC;wBAChC,sCAAsC;wBACtC,SAAS;wBACT,SAAS;wBACT,aAAa;wBACb,gBAAgB;wBAChB,qBAAqB;wBACrB;qBACH,EACK,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE;AACV,qBAAA,EAAA,QAAA,EAAA,ojGAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA;;;MEnEQ,2BAA2B,CAAA;AAYpC,IAAA,WAAA,GAAA;AATA,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe;YAChE,OAAO,eAAe,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;kBACjD,qBAAqB,CAAC;AACxB,kBAAE,eAAe,CAAC,IAAI,KAAK;sBACvB,qBAAqB,CAAC;AACxB,sBAAE,qBAAqB,CAAC,OAAO;AACzC,SAAC,CAAC;;AAIF,IAAA,UAAU,CAAC,OAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;YAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,SAAS,EAAE,IAAI,GAAG;AACrB,SAAA,CAAC;;IAGN,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;AACxB,YAAA,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,qBAAqB,CAAC;AACzC,SAAA,CAAC;;AAGN,IAAA,aAAa,CAAC,UAA+B,EAAA;QACzC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU,GAAG,UAAU;;AAGpD,IAAA,WAAW,CAAC,OAAe,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACtD;;QAEJ,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;;AAGxD,IAAA,IAAI,cAAc,GAAA;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,cAAc;;AAGlD,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe;;AAGnD,IAAA,IAAI,CAAC,MAAwB,EAAA;QACzB,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,GAAG,CAAC,MAAM,CAAC;;IAGvC,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,OAAO,CAAC,SAAU,CAAC,GAAG,CAAC;YACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,SAAS,EAAE,IAAI,GAAG;AACrB,SAAA,CAAC;;AAGN,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;;aACtD;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;;QAE1D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe;AAChE,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;AACvB,YAAA,eAAe,EAAE,eAAe;YAChC,cAAc,EAAE,IAAI,GAAG,EAAE;YACzB,aAAa,EAAE,IAAI,GAAG,EAAE;AACxB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc;AACtC,SAAA,CAAC;;AAGN,IAAA,eAAe,CAAC,OAAgB,EAAA;QAC5B,IAAI,OAAO,EAAE;YACT,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;AACvB,oBAAA,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;oBAC3B,cAAc,EAAE,qBAAqB,CAAC;AACzC,iBAAA,CAAC;;iBACC;gBACH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACpC,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/B,iBAAC,CAAC;;;aAEH;YACH,IAAI,CAAC,cAAc,EAAE;;;AAI7B,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,KAAK,EAAE,MAAqB;QAC3C,IAAI,CAAC,MAAM,EAAE;YACT;;QAEJ,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,KAAK,OAAO,IAAK,MAA2B,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACnI,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;QACxD,IAAI,OAAO,EAAE;YACT,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC;YAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;AACjD,YAAA,OAAO,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;;AAEhE,QAAA,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE;YACxB,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;AAC9C,YAAA,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;;QAExC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;YAClC,IAAI,CAAC,cAAc,EAAE;;;IAI7B,WAAW,CAAC,SAA8B,EAAE,OAA6B,EAAA;AACrE,QAAA,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,SAAS;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,UAAU,EAAE;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;AACrD,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU;QAEvC,IAAI,CAAC,OAAO,EAAE;YACV,aAAa,CAAC,GAAG,CAAC,CAAA,EAAG,aAAa,CAAI,CAAA,EAAA,YAAY,CAAE,CAAA,CAAC;;aAClD;AACH,YAAA,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,OAAO;AAEzC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,aAAa,CAAE;AACrF,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,WAAW,CAAE;AACjF,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,sBAAsB,EAAE,CAAC,GAAG,CAAC,YAAY,CAAE;AACvF,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,sBAAsB,EAAE,CAAC,GAAG,CAAC,UAAU,CAAE;YAEnF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC;YACxD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC;YACxD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC;YACxD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC;AAExD,YAAA,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;AAC7C,gBAAA,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;AAC7C,oBAAA,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA,CAAE,CAAC;;;;QAKnE,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,aAAa,GAAG,aAAa;;+GArJjD,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA3B,2BAA2B,EAAA,CAAA,CAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;AC8BK,MAAO,kBAAmB,SAAQ,uBAAuB,CAAA;AAlB/D,IAAA,WAAA,GAAA;;AAmBI,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;AAEjE,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAExC,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAW;AAEnC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAA4B;AAEtD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAU;AAErC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAA4B;AAQxD;AANG,IAAA,OAAO,CAAC,IAA4B,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;AACzG,YAAA,IAAI,CAAC,IAAI;gBACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,2BAA2B,EAAE,IAAI,CAAC,aAAa,CAAC;;;+GAhBtH,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EClC/B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,yvCA0BA,EDDQ,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,4BAA4B,sGAC5B,gCAAgC,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,gCAAgC,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,gCAAgC,EAChC,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,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,oFACP,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAGL,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlB9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAErB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE;qBACV,EACQ,OAAA,EAAA;wBACL,4BAA4B;wBAC5B,gCAAgC;wBAChC,gCAAgC;wBAChC,gCAAgC;wBAChC,OAAO;wBACP,OAAO;wBACP;AACH,qBAAA,EAAA,QAAA,EAAA,yvCAAA,EAAA;;;AErBQ,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;;;ACnBpB,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;AAE5D,MAAM,sCAAsC,GAAG;AAEzC,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;AACxC,MAAM,mCAAmC,GAAG;AAC5C,MAAM,gCAAgC,GAAG;AAChD;AACO,MAAM,uBAAuB,GAAG;AAChC,MAAM,8BAA8B,GAAG;AACvC,MAAM,oCAAoC,GAAG;AACvC,MAAA,qCAAqC,GAAG,EAAE;AAC1C,MAAA,4CAA4C,GAAG,GAAG;AAClD,MAAA,kCAAkC,GAAG,GAAG;AACxC,MAAA,2BAA2B,GAAG,EAAE;AACtC,MAAM,wBAAwB,GAAG;AACjC,MAAM,2BAA2B,GAAG;AAC9B,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,8BAA8B,GAAG,GAAG;AACpC,MAAA,uBAAuB,GAAG,GAAG;AAC7B,MAAA,+BAA+B,GAAG,EAAE;AACpC,MAAA,gCAAgC,GAAG,EAAE;AAErC,MAAA,4BAA4B,GAAG,GAAG;AACxC,MAAM,2BAA2B,GAAG;AACpC,MAAM,8BAA8B,GAAG;AACvC,MAAM,2BAA2B,GAAG;AACpC,MAAM,oBAAoB,GAAG;AAC7B,MAAM,sBAAsB,GAAG;AAE/B,MAAM,oBAAoB,GAAG;AAC7B,MAAM,qBAAqB,GAAG;AAC9B,MAAM,yBAAyB,GAAG;AAClC,MAAM,mBAAmB,GAAG;AAE5B,MAAM,4BAA4B,GAAG;AACrC,MAAM,4BAA4B,GAAG;AACrC,MAAM,4BAA4B,GAAG;AACrC,MAAM,4BAA4B,GAAG;;ACtErC,MAAM,gBAAgB,GAAG;AAEnB,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,UAAU;AAC3B,IAAA,gBAAgB,CAAC;;AAGd,MAAM,mBAAmB,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,IAAI;AAEvE,MAAA,SAAS,GAAG;AACrB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,SAAS,EAAE;;AAGF,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;;AAGH,MAAA,oBAAoB,GAAG;AAChC,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE;;;ACxCV,MAAM,kBAAkB,GAAG;AAC3B,MAAM,iBAAiB,GAAG;AAEpB,MAAA,KAAK,GAAG;;;;;AAMR,MAAA,SAAS,GAAG;;;;AAKlB,MAAM,oBAAoB,GAAG;AAE7B,MAAM,sBAAsB,GAAG;AAE/B,MAAM,sBAAsB,GAAG;AAE/B,MAAM,wBAAwB,GAAG;AAEjC,MAAM,sBAAsB,GAAG;AAE/B,MAAM,sBAAsB,GAAG;AAE/B,MAAM,sBAAsB,GAAG;AAE/B,MAAM,sBAAsB,GAAG;AAE/B,MAAM,wBAAwB,GAAG;AAEjC,MAAM,eAAe,GAAG;AAExB,MAAM,qBAAqB,GAAG;AAE9B,MAAM,QAAQ,GAAG;AAEjB,MAAM,eAAe,GAAG;AAExB,MAAM,sBAAsB,GAAG;AAE/B,MAAM,cAAc,GAAG;;ACxCvB,MAAM,iBAAiB,GAAG;AAC1B,MAAM,mBAAmB,GAC5B;AACG,MAAM,kBAAkB,GAAG;AAC3B,MAAM,wBAAwB,GAAG;AAC3B,MAAA,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,mBAAmB,GAAG;AAC5B,MAAM,iBAAiB,GAAG;AAC1B,MAAM,+BAA+B,GAAG;AACxC,MAAM,qBAAqB,GAAG;AAC9B,MAAM,sBAAsB,GAAG;AAC/B,MAAM,uBAAuB,GAAG;AAChC,MAAM,yBAAyB,GAAG;AAClC,MAAM,wBAAwB,GAAG;AACjC,MAAM,kCAAkC,GAAG;AAC3C,MAAM,uBAAuB,GAAG;AAChC,MAAM,yBAAyB,GAAG;AAClC,MAAM,+BAA+B,GAAG;AACxC,MAAM,uBAAuB,GAAG;AAChC,MAAM,kBAAkB,GAAG;AAC3B,MAAM,sBAAsB,GAAG;AAC/B,MAAM,YAAY,GAAG;;ACLtB,MAAO,gBAAiB,SAAQ,uBAAuB,CAAA;AAV7D,IAAA,WAAA,GAAA;;AAqBI,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;AAC3E,SAAC,CAAC;AAOL;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;;;+GAjB3E,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB7B,i0BAoBA,EDJc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,sMAAE,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAE3D,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cAEnB,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE;qBACV,EACQ,OAAA,EAAA,CAAC,OAAO,EAAE,UAAU,EAAE,4BAA4B,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,i0BAAA,EAAA;8BAG1C,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,UAAU,EAAA,CAAA;sBAApC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,MAAM,EAAA,CAAA;sBAAd;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;;;AEvBQ,MAAA,mBAAmB,GAAG,CAAC,cAA8B,EAAE,eAAA,GAA2B,IAAI,KAAwB;IACvH,MAAM,UAAU,GAAuB,EAAE;IACzC,IAAI,eAAe,GAAG,CAAC;AACvB,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;YACjB,UAAU,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,cAAc,CAAC,MAAM;gBAC3B,GAAG,EAAE,GAAG,CAAC,GAAG;AACZ,gBAAA,YAAY,EAAE;AACjB,aAAA,CAAC;;AAEN,QAAA,IAAI,eAAe,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;YAC7B,UAAU,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,cAAc,CAAC,GAAG;AACxB,gBAAA,GAAG,EAAE;AACR,aAAA,CAAC;;AAEV,KAAC,CAAC;AACF,IAAA,OAAO,UAAU;AACrB;MAEa,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;QAC1E,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;SACrC;AACL,KAAC,CAAC;IACF,OAAO;AACH,QAAA,IAAI,EAAE,MAAM;QACZ,MAAM;AACN,QAAA,OAAO,EAAE;KACZ;AACL;;ACjCa,MAAA,+BAA+B,GAAG,IAAI,OAAO;MAG7C,uBAAuB,CAAA;AAGhC,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU;;AAE9B,IAAA,iBAAiB,CAAC,aAAwC,EAAA;AACtD,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;;IAGtC,iBAAiB,CAAC,OAAgB,EAAE,OAAgC,EAAA;QAChE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,qBAAqB,IAAI,mBAAmB;AAClF,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;YACnC,MAAM;AACN,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,UAAU,EAAE,8BAA8B;AAC1C,YAAA,YAAY,EAAE;gBACV,OAAO;AACP,gBAAA,WAAW,EAAE,KAAK;gBAClB;AACH;AACJ,SAAA,CAAC;;IAGN,aAAa,CAAC,OAAgB,EAAE,OAAgC,EAAA;AAC5D,QAAA,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC/C,MAAM;AACN,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,YAAY,EAAE;AACV,gBAAA,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,OAAO,CAAC,iBAAiB;gBACnC,OAAO;gBACP,OAAO;gBACP;AACH;AACJ,SAAA,CAAC;AACF,QAAA,OAAO,GAAG;;+GA5CL,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAvB,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACLK,SAAU,uBAAuB,CAAC,MAAsB,EAAA;IAC1D,MAAM,oBAAoB,GAAmB,EAAE;IAC/C,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC7B,QAAA,oBAAoB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,IAAK,qBAAqB,CAAC,KAAK,CAAwB,CAAC,KAAK;AAC3G,KAAC,CAAC;AACF,IAAA,OAAO,oBAAoB;AAC/B;AAEA;;;AAGG;AACG,SAAU,yBAAyB,CAAC,OAA0E,EAAA;AAChH,IAAA,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO;IAC/B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE;AAC5C;SAEgB,kBAAkB,CAAU,OAAgB,EAAE,KAAmB,EAAE,SAAqB,EAAA;IACpG,MAAM,YAAY,GAAG,+BAA+B,CAAC,GAAG,CAAC,OAAO,CAAC;IAEjE,IAAI,CAAC,YAAY,EAAE;AACf,QAAA,OAAO,SAAS;;AAGpB,IAAA,MAAM,cAAc,GAAG,YAAY,CAAC,aAAa,EAAE,cAAc;IACjE,IAAI,CAAC,cAAc,EAAE;AACjB,QAAA,OAAO,SAAS;;IAGpB,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS;IAC3D,IAAI,CAAC,aAAa,EAAE;AAChB,QAAA,OAAO,SAAS;;IAGpB,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC;AAEhD,IAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClB,QAAA,OAAO,SAAS;;AAGpB,IAAA,OAAO,QAAQ;AACnB;AAEA;;;AAGG;AACH,MAAM,wBAAwB,GAAG,oBAAoB;AAErD,MAAM,oBAAoB,GAAG,gBAAgB;AAEvC,SAAU,kBAAkB,CAAC,IAA+B,EAAA;IAC9D,IAAI,CAAC,IAAI,EAAE;AACP,QAAA,OAAO,EAAE;;AAGb,IAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAElB,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;;AAGtC,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;AACvC,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;;IAGtE,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;AAChF;AAEM,SAAU,gBAAgB,CAAC,IAAY,EAAA;IACzC,IAAI,CAAC,IAAI,EAAE;QACP;;IAEJ,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAClH,MAAM,SAAS,GAAa,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1C,MAAM,IAAI,GACN,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG;UAChB,SAAS,CAAC,MAAM,CACZ,UAAU,MAAM,EAAE,IAAI,EAAA;YAClB,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAClC,YAAA,OAAO,MAAM;SAChB,EACD,EAAE,KAAK,EAAE,CAAC,EAAE,CACf,CAAC;UACF,CAAC;AACX,IAAA,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;AAC3B;;ACvFA;;AAEG;AACI,MAAM,kBAAkB,GAAG,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAA4B,KAAI;IAC1G,MAAM,IAAI,GAAG,GAAG;AAChB,IAAA,OAAO,CAAG,EAAA,UAAU,CAAI,CAAA,EAAA,OAAO,IAAI,IAAI,CAAA,CAAA,EAAI,QAAQ,IAAI,IAAI,CAAI,CAAA,EAAA,UAAU,IAAI,IAAI,EAAE;AACvF;AAEA;;AAEG;AACU,MAAA,aAAa,GAAG,CAAC,UAA0B,KAAI;AACxD,IAAA,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,EAAE;AAAE,QAAA,OAAO,cAAc;IAClE,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnC;AAEA;;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;SACf;;IAGL,MAAM,IAAI,GAAG,GAAG;AAChB,IAAA,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1E,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;KAC5C;AACL;AAEA;;;;AAIG;AACU,MAAA,YAAY,GAAG,CAAC,KAAa,KAAmB;AACzD,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,QAAA,OAAO,IAAI;;AAEf,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK;AAC5D;AAEM,SAAU,OAAO,CAAC,KAAU,EAAA;AAC9B,IAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AAChB,QAAA,OAAOG,SAAY,CAAC,KAAK,CAAC;;AAG9B,IAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;QACjB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;;IAG9C,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;AACnD;;AC3DM,SAAU,0BAA0B,CAAC,OAA2B,EAAA;AAClE,IAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,OAAO;AACvG,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,OAAQ;IACvC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,UAAU;IACvD,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC;IAExD,IAAI,OAAO,GAAG,EAAE;AAChB,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;;AAEb,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG;;AAGzB,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,OAAO,EAAE;;;AAIb,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,eAAe,GAAG,CAAC;QACvE,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC;AAE1D,QAAA,KAAK,IAAI,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,EAAE,EAAE;;AAErE,YAAA,IAAI,QAAQ,GAAG,QAAQ,GAAG,CAAC,EAAE;gBACzB;;AAGJ,YAAA,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC,QAAQ,CAAC;YAClC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG;AACnC,YAAA,IAAI,IAAI,KAAK,cAAc,CAAC,MAAM,EAAE;gBAChC;;;AAIJ,YAAA,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,eAAe,GAAG,CAAC;AACjE,YAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,yBAAyB,CAAC;gBAChD,WAAW;gBACX,WAAW;gBACX;AACH,aAAA,CAAC;AAEF,YAAA,MAAM,MAAM,GAAG,SAAS,GAAG,eAAe,GAAG,CAAC;YAC9C,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;iBACH,CAAC;gBACF,CAAC,EAAE,CAAC,GAAG,MAAM;gBACb,CAAC;AACD,gBAAA,KAAK,EAAE,KAAK,GAAG,eAAe,GAAG,CAAC;gBAClC,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;AAClB,aAAA,CAAC;;;AAGV,IAAA,OAAO,OAAO;AAClB;;ACpEA,MAAM,SAAS,GAAgD,EAAE;AACpD,MAAA,aAAa,GAAG,IAAI,QAAQ,CAAgC;AACrE,IAAA,GAAG,EAAE;AACR,CAAA;AAED;;;AAGG;AACU,MAAA,YAAY,GAAG,CAAC,GAA6B,EAAE,IAAY,EAAE,IAAY,KAAI;IACtF,IAAI,KAAK,GAAuB,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACnC,QAAA,OAAO,KAAK;;AAEhB,IAAA,IAAI,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC,WAAW,EAAE;QACd,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC;AACzC,YAAA,GAAG,EAAE;AACR,SAAA,CAAC;;AAEN,IAAA,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,QAAA,GAAG,CAAC,IAAI,GAAG,IAAI;QACf,KAAK,GAAG,GAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK;AACpC,QAAA,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;;AAGhC,IAAA,OAAO,KAAK;AAChB;;AC5Ba,MAAA,UAAU,GAAG,CAAC,MAAK;IAC5B,MAAM,QAAQ,GAKV,EAAE;IACN,MAAM,WAAW,GAAQ,EAAE;AAE3B,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;AAEvB,YAAA,GAAG,CAAC,GAAG,GAAG,GAAG;AACb,YAAA,GAAG,CAAC,cAAc,GAAG,aAAa;AAElC,YAAA,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;AACtB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW;;YAGjC,QAAQ,CAAC,IAAI,CAAC,GAAG;gBACb,GAAG;AACH,gBAAA,OAAO,EAAE;aACZ;AAED,YAAA,IAAI;AACA,gBAAA,GAAG,CAAC,MAAM,GAAG,MAAK;oBACd,QAAQ,CAAC,IAAI,CAAC,GAAG;wBACb,GAAG;AACH,wBAAA,OAAO,EAAE;qBACZ;AACD,oBAAA,OAAO,CAAC;wBACJ,IAAI;wBACJ;AACH,qBAAA,CAAC;AACN,iBAAC;;YACH,OAAO,GAAG,EAAE;gBACV,QAAQ,CAAC,IAAI,CAAC,GAAG;oBACb,GAAG;AACH,oBAAA,OAAO,EAAE;iBACZ;gBACD,MAAM,CAAC,GAAG,CAAC;;SAElB,CAAC,CACL;;IAGL,SAAS,cAAc,CAAC,QAAa,EAAA;QACjC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;;IAG3C,SAAS,QAAQ,CAAC,IAAY,EAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;AAE9B,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,IAAI;;AAGf,QAAA,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO;AAEhC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;AAC1B,QAAA,OAAO,GAAG;;IAGd,OAAO;QACH,SAAS;QACT,QAAQ;QACR,cAAc;QACd;KACH;AACL,CAAC;;AC3EM,MAAM,WAAW,GAAG,MAAK;IAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE;AAC/C,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC5D,QAAA,OAAO,IAAI;;AAEf,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC5D,QAAA,OAAO,IAAI;;AAEf,IAAA,OAAO,KAAK;AAChB;AAEa,MAAA,SAAS,GAAG,WAAW;AAG7B,MAAM,KAAK,GAAG,MAAK;AACtB,IAAA,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS;AACjC,IAAA,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC;;ACfO,MAAM,yBAAyB,GAAG,MAAK;IAC1C,OAAO,WAAW,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,CAAC,SAAS;AACrE;AAEO,MAAM,6BAA6B,GAAG,MAAK;IAC9C,OAAO,WAAW,IAAI,SAAS,IAAI,WAAW,IAAI,SAAS,CAAC,SAAS;AACzE;AAEO,MAAM,wBAAwB,GAAG,MAAK;IACzC,OAAO,WAAW,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,CAAC,SAAS;AACpE;AAEO,MAAM,4BAA4B,GAAG,MAAK;IAC7C,OAAO,WAAW,IAAI,SAAS,IAAI,UAAU,IAAI,SAAS,CAAC,SAAS;AACxE;MAEa,gBAAgB,GAAG,OAAO,IAAsB,KAAI;AAC7D,IAAA,IAAI;AACA,QAAA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI;QAC3B,IAAI,yBAAyB,EAAE,EAAE;AAC7B,YAAA,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;AACpC,gBAAA,YAAY,EAAE,IAAI,IAAI,CAAC,CAAC,IAAK,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AACvD,gBAAA,WAAW,EAAE,IAAI,IAAI,CAAC,CAAC,IAAK,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;AACvD,aAAA,CAAC;YACF,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;;aAC7C,IAAI,6BAA6B,EAAE,EAAE;YACxC,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAK,CAAC;;aACvC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AACnD,YAAA,QAAQ,CAAC,KAAK,GAAG,IAAK;AACtB,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;YACnC,QAAQ,CAAC,MAAM,EAAE;AACjB,YAAA,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;AAC5B,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;;;IAEzC,OAAO,KAAK,EAAE;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,CAAC;;AAEzD;AAEa,MAAA,iBAAiB,GAAG,YAAW;AACxC,IAAA,IAAI;QACA,IAAI,aAAa,GAAqB,EAAE;QACxC,IAAI,wBAAwB,EAAE,EAAE;YAC5B,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE;AACvD,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,YAAY,aAAa,EAAE;AAC7E,gBAAA,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE;oBAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;wBAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;wBAC5C,aAAa,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;;oBAE1C,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;wBACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;wBAC7C,aAAa,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;;;;;aAI/C,IAAI,4BAA4B,EAAE,EAAE;YACvC,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE;AAC1D,YAAA,aAAa,CAAC,IAAI,GAAG,aAAa;;aAC/B;YACH,MAAM,YAAY,GAAG,IAAI,OAAO,CAAmB,CAAC,OAAO,KAAI;gBAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AACnD,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AACnC,gBAAA,MAAM,WAAW,GAAG,CAAC,CAAiB,KAAI;AACtC,oBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;AACnD,oBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;AAExD,oBAAA,OAAO,CAAC;wBACJ,IAAI;wBACJ,IAAI,EAAE,IAAI,IAAI;AACjB,qBAAA,CAAC;AAEF,oBAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC;AACtD,iBAAC;AACD,gBAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC;gBAC/C,QAAQ,CAAC,KAAK,EAAE;AAChB,gBAAA,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;AAC7B,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AACvC,aAAC,CAAC;YACF,aAAa,GAAG,MAAM,YAAY;;AAEtC,QAAA,OAAO,aAAa;;IACtB,OAAO,KAAK,EAAE;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC;AAChD,QAAA,OAAO,IAAI;;AAEnB;;ACzFM,SAAU,WAAW,CAAC,IAAY,EAAA;IACpC,IAAI,SAAS,GAAG,IAAI;AACpB,IAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC;AACnD,QAAA,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;AAClD,YAAA,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;;;AAGhC,IAAA,OAAO,SAAS;AACpB;AAEM,SAAU,eAAe,CAAC,IAAY,EAAA;IACxC,IAAI,IAAI,GAAkB,IAAI;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;AAC9C,IAAA,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;AAClD,QAAA,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;;AAEvB,IAAA,OAAO,IAAI;AACf;;MChBa,cAAc,GAAG,OAAO,IAAI,KAAK,WAAW,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG;AAEzE,SAAA,aAAa,CAAC,CAAS,EAAE,CAAS,EAAA;IAC9C,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;AAC1B,QAAA,OAAO,CAAC;;AAEZ,IAAA,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;QACZ,OAAO,CAAC,CAAC;;AAEb,IAAA,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;AACZ,QAAA,OAAO,CAAC;;IAEZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvC;AAEgB,SAAA,aAAa,CAAC,CAAgB,EAAE,CAAgB,EAAA;AAC5D,IAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACT,QAAA,OAAO,CAAC;;AAEZ,IAAA,IAAI,CAAC,IAAI,IAAI,EAAE;QACX,OAAO,CAAC,CAAC;;AAEb,IAAA,IAAI,CAAC,IAAI,IAAI,EAAE;AACX,QAAA,OAAO,CAAC;;;IAIZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjH;AAEgB,SAAA,aAAa,CAAC,GAAW,EAAE,SAAiB,EAAA;AACxD,IAAA,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACrE;AAEA;;AAEG;AACa,SAAA,YAAY,CAA4B,MAAW,EAAE,MAAW,EAAA;AAC5E,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAClD,QAAA,OAAO,KAAK;;AAEhB,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;AAC5B,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;AAC5B,IAAA,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACnB,YAAA,OAAO,IAAI;;;AAGnB,IAAA,OAAO,KAAK;AAChB;;MC/CsB,KAAK,CAAA;;IAmBvB,YAAY,CAAC,SAAiC,EAAE,SAAqB,EAAA;AACjE,QAAA,QAAQ,SAAS,CAAC,SAAS;YACvB,KAAK,sBAAsB,CAAC,KAAK;AACjC,YAAA,KAAK,sBAAsB,CAAC,MAAM,EAAE;gBAChC,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;;YAE5D,SAAS;AACL,gBAAA,OAAO,IAAI;;;;;AAMvB,IAAA,YAAY,CAAC,cAAmB,EAAE,KAAmB,EAAE,UAA8B,EAAA;QACjF,IAAI,QAAQ,GAAa,EAAE;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;YAC1B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;;AAEzC,QAAA,OAAO,QAAQ;;IAGnB,YAAY,CAAC,SAAuE,EAAE,SAAqB,EAAA;QACvG,QAAQ,SAAS;AACb,YAAA,KAAK,sBAAsB,CAAC,KAAK,EAAE;AAC/B,gBAAA,OAAO,OAAO,CAAC,SAAS,CAAC;;AAE7B,YAAA,KAAK,sBAAsB,CAAC,MAAM,EAAE;AAChC,gBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;;YAE9B,SAAS;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;;;;AAI7D;;ACnDK,MAAO,eAAgB,SAAQ,KAAK,CAAA;IAC7B,YAAY,CAAC,SAAyC,EAAE,SAA+B,EAAA;AAC5F,QAAA,QAAQ,SAAS,CAAC,SAAS;YACvB,KAAK,sBAAsB,CAAC,KAAK;AAC7B,gBAAA,OAAO,OAAO,CAAC,SAAS,CAAC;YAC7B,KAAK,sBAAsB,CAAC,MAAM;AAC9B,gBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YAC9B,KAAK,sBAAsB,CAAC,EAAE;AAC1B,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC;YACrF,KAAK,sBAAsB,CAAC,GAAG;AAC3B,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC;AACtF,YAAA;gBACI,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC;;;IAIlD,OAAO,CACZ,UAAgC,EAChC,UAAgC,EAChC,KAAmB,EACnB,UAA6B,EAC7B,OAAe,EAAA;AAEf,QAAA,MAAM,MAAM,GAAGC,sBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;AAC3E,QAAA,MAAM,MAAM,GAAGA,sBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;AAC3E,QAAA,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;;AAG/B,IAAA,YAAY,CAAC,cAAwB,EAAE,KAAmB,EAAE,UAA8B,EAAA;QAC/F,IAAI,QAAQ,GAAa,EAAE;AAC3B,QAAA,IAAI,cAAc,EAAE,MAAM,IAAI,UAAU,EAAE;AACtC,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACxD,MAAM,cAAc,GAAG,UAAU,EAAE,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBACrE,IAAI,CAAC,cAAc,EAAE;oBACjB;;AAEJ,gBAAA,IAAI,cAAc,CAAC,KAAK,EAAE;AACtB,oBAAA,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;;;;AAI/C,QAAA,OAAO,QAAQ;;AAGV,IAAA,YAAY,CACjB,SAAiB,EACjB,WAAyB,EACzB,UAAqE,EACrE,UAA8B,EAAA;QAE9B,OAAO,sBAAsB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC;;AAEpF;AAEK,SAAU,sBAAsB,CAClC,SAAiB,EACjB,WAAyB,EACzB,UAAqE,EACrE,UAA8B,EAAA;AAE9B,IAAA,OAAO,IAAI;AACf;AAEA,SAASA,sBAAoB,CACzB,SAA+B,EAC/B,KAAmB,EACnB,UAA6B,EAC7B,OAAO,GAAG,OAAO,EAAA;IAEjB,IAAI,MAAM,GAAa,EAAE;AACzB,IAAA,IAAI,SAAS,EAAE,MAAM,IAAI,UAAU,EAAE;AACjC,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACnD,MAAM,cAAc,GAAG,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,CAAC,cAAc,EAAE;gBACjB;;AAGJ,YAAA,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC;YACrC,IAAI,KAAK,EAAE;AACP,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;;;AAI9B,IAAA,OAAO,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AAC7D;;AClFM,MAAO,SAAU,SAAQ,KAAK,CAAA;IACvB,YAAY,CAAC,SAAyC,EAAE,SAAyB,EAAA;AACtF,QAAA,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC;AACxD,QAAA,QAAQ,SAAS,CAAC,SAAS;YACvB,KAAK,sBAAsB,CAAC,KAAK;AAC7B,gBAAA,OAAO,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,SAAS,KAAK,CAAC;YACpE,KAAK,sBAAsB,CAAC,MAAM;AAC9B,gBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,SAAS,KAAK,CAAC;YACrE,KAAK,sBAAsB,CAAC,EAAE;gBAC1B,OAAO,IAAI,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,GAAG,KAAK;YACrE,KAAK,sBAAsB,CAAC,EAAE;AAC1B,gBAAA,OAAO,SAAS,CAAC,SAAS,GAAG,KAAK;YACtC,KAAK,sBAAsB,CAAC,EAAE;AAC1B,gBAAA,OAAO,SAAS,CAAC,SAAS,GAAG,IAAI;YACrC,KAAK,sBAAsB,CAAC,OAAO;gBAC/B,OAAO,IAAI,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,GAAG,KAAK;AACrE,YAAA;gBACI,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC;;;IAIlD,OAAO,CAAC,UAA0B,EAAE,UAA0B,EAAA;AACnE,QAAA,MAAM,MAAM,GAAGA,sBAAoB,CAAC,UAAU,CAAC;AAC/C,QAAA,MAAM,MAAM,GAAGA,sBAAoB,CAAC,UAAU,CAAC;AAC/C,QAAA,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;;AAG/B,IAAA,YAAY,CACjB,SAAiB,EACjB,WAAyB,EACzB,UAA2D,EAAA;QAE3D,OAAO,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;;AAG/D,IAAA,YAAY,CAAC,KAAiC,EAAA;QAC1C,QAAQ,KAAK;AACT,YAAA,KAAK,OAAO;AACR,gBAAA,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;AACnH,YAAA,KAAK,cAAc;gBACf,OAAO;AACH,oBAAA,IAAI,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;AAC7D,oBAAA,IAAI,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW;iBAC5D;AACL,YAAA,KAAK,WAAW;gBACZ,OAAO;AACH,oBAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE;AAC/D,oBAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW;iBAC9D;AACL,YAAA,KAAK,eAAe;gBAChB,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,QAAQ,EAAE,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC;AACnG,YAAA;AACI,gBAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;oBAChB,OAAO;AACH,wBAAA,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE;AACzE,wBAAA,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW;qBACxE;;gBAEL,OAAO;AACH,oBAAA,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAe,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE;AACtE,oBAAA,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW;iBACrE;;;AAGhB;SAEe,gBAAgB,CAC5B,SAAiB,EACjB,WAAyB,EACzB,UAA2D,EAAA;AAE3D,IAAA,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,CAAC,SAAS,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,CAAC,SAAS,EAAE;AACpG,QAAA,OAAO,IAAI;;IAGf,IAAI,UAAU,EAAE;AACZ,QAAA,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,UAAU;AACvC,QAAA,QAAQ,KAAK,CAAC,IAAI;YACd,KAAK,gBAAgB,CAAC,IAAI;AACtB,gBAAA,OAAO,SAAS;YACpB,KAAK,gBAAgB,CAAC,IAAI;AACtB,gBAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC;gBAC/C,IAAI,SAAS,EAAE;AACX,oBAAA,OAAO,SAAS;;gBAEpB;AACJ,YAAA;gBACI;;;SAEL;AACH,QAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC;QAC/C,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,SAAS;;;AAIxB,IAAA,OAAO,IAAI;AACf;AAEA,SAASA,sBAAoB,CAAC,SAAyB,EAAA;IACnD,OAAO,SAAS,EAAE,SAAS;AAC/B;AAEA,SAAS,kBAAkB,CAAC,IAAY,EAAA;AACpC,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE;AACzB,IAAA,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;;AAGzC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA,mDAAmD;AACjF,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA,4CAA4C;IAE1E,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,CAAI,CAAA,EAAA,WAAW,CAAG,EAAA,WAAW,CAAG,CAAA,CAAA,CAAC;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAElC,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AAEvB,IAAA,IAAI;QACA,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK;AAEjC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACnB,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC5C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;AACnD,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;YACnC,IAAI,GAAG,MAAM,CAAC,YAAY,GAAG,WAAW,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,CAAC;;AAG3G,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC;AAChC,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;QAE5B,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,EAAE,EAAE;AAC/B,YAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC;AACxC,YAAA,OAAO,IAAI;;AAGf,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;QAC/D,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,OAAO,EAAE;AAChC,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;AACpC,YAAA,OAAO,IAAI;;AAGf,QAAA,MAAM,YAAY,GAAG,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QACtG,OAAO;YACH,SAAS,EAAE,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW;SACpD;;IACH,OAAO,KAAK,EAAE;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC;AACpC,QAAA,OAAO,IAAI;;AAEnB;;ACrJM,MAAO,SAAU,SAAQ,KAAK,CAAA;IACvB,YAAY,CAAC,SAAyC,EAAE,SAAqB,EAAA;AAClF,QAAA,MAAM,aAAa,GAAG,SAAS,EAAE,IAAI;AACrC,QAAA,QAAQ,SAAS,CAAC,SAAS;YACvB,KAAK,sBAAsB,CAAC,KAAK;AAC7B,gBAAA,OAAO,OAAO,CAAC,aAAa,CAAC;YACjC,KAAK,sBAAsB,CAAC,MAAM;AAC9B,gBAAA,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;YAClC,KAAK,sBAAsB,CAAC,OAAO;AAC/B,gBAAA,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC;AACnF,YAAA;gBACI,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,CAAC;;;IAItD,OAAO,CAAC,UAAsB,EAAE,UAAsB,EAAA;AAC3D,QAAA,OAAO,aAAa,CAACA,sBAAoB,CAAC,UAAU,CAAC,EAAEA,sBAAoB,CAAC,UAAU,CAAC,CAAC;;AAGnF,IAAA,YAAY,CAAC,cAA8B,EAAA;QAChD,IAAI,KAAK,GAAa,EAAE;QACxB,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE;AAChC,YAAA,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;;AAEnC,QAAA,OAAO,KAAK;;AAGP,IAAA,YAAY,CACjB,SAAiB,EACjB,WAAyB,EACzB,UAAkE,EAAA;QAElE,OAAO,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;;AAElE;SAEe,gBAAgB,CAC5B,SAAiB,EACjB,WAAyB,EACzB,UAAkE,EAAA;IAElE,IAAI,UAAU,EAAE;AACZ,QAAA,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,UAAU;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,EAAE;AACtC,YAAA,OAAO,SAAS;;;SAEjB;AACH,QAAA,MAAM,GAAG,GAAG,eAAe,CAAC,SAAS,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC;AACnC,QAAA,IAAI,GAAG,IAAI,IAAI,EAAE;YACb,OAAO;gBACH,GAAG;gBACH;aACH;;;AAGT,IAAA,OAAO,IAAI;AACf;AAEA,SAASA,sBAAoB,CAAC,SAAyB,EAAA;AACnD,IAAA,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI;AACzE;;AC7DM,MAAO,WAAY,SAAQ,KAAK,CAAA;IACzB,YAAY,CAAC,SAAyC,EAAE,SAA2B,EAAA;AACxF,QAAA,QAAQ,SAAS,CAAC,SAAS;YACvB,KAAK,sBAAsB,CAAC,KAAK;AAC7B,gBAAA,OAAO,OAAO,CAAC,SAAS,CAAC;YAC7B,KAAK,sBAAsB,CAAC,MAAM;AAC9B,gBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YAC9B,KAAK,sBAAsB,CAAC,EAAE;AAC1B,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC;YACrF,KAAK,sBAAsB,CAAC,GAAG;AAC3B,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC;AACtF,YAAA;gBACI,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC;;;IAIlD,OAAO,CACZ,UAAsB,EACtB,UAAsB,EACtB,KAAmB,EACnB,UAA6B,EAC7B,OAAe,EAAA;AAEf,QAAA,MAAM,MAAM,GAAGA,sBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;AAC3E,QAAA,MAAM,MAAM,GAAGA,sBAAoB,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;AAC3E,QAAA,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;;AAG/B,IAAA,YAAY,CAAC,cAAwB,EAAE,KAAmB,EAAE,UAA8B,EAAA;QAC/F,IAAI,QAAQ,GAAa,EAAE;AAC3B,QAAA,IAAI,cAAc,EAAE,MAAM,IAAI,UAAU,EAAE;AACtC,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACxD,MAAM,QAAQ,GAAG,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3D,IAAI,CAAC,QAAQ,EAAE;oBACX;;AAEJ,gBAAA,IAAI,QAAQ,CAAC,YAAY,EAAE;AACvB,oBAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;;;;AAIhD,QAAA,OAAO,QAAQ;;AAGV,IAAA,YAAY,CACjB,SAAiB,EACjB,WAAyB,EACzB,UAA2D,EAC3D,UAA8B,EAAA;QAE9B,OAAO,kBAAkB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC;;AAEhF;AAEK,SAAU,kBAAkB,CAC9B,SAAiB,EACjB,WAAyB,EACzB,UAA2D,EAC3D,UAA8B,EAAA;AAE9B,IAAA,IAAI,WAAW,CAAC,IAAI,IAAI,gBAAgB,CAAC,SAAS,IAAI,WAAW,CAAC,IAAI,IAAI,gBAAgB,CAAC,SAAS,EAAE;AAClG,QAAA,OAAO,IAAI;;AAGf,IAAA,MAAM,UAAU,GAAI,WAAW,CAAC,QAA2B,EAAE,WAAW;IACxE,IAAI,UAAU,EAAE;AACZ,QAAA,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,UAAU;AACvC,QAAA,QAAQ,KAAK,CAAC,IAAI;YACd,KAAK,gBAAgB,CAAC,MAAM;gBACxB,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE;AAC9C,oBAAA,OAAO,UAAU,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;gBAElD;AACJ,YAAA;gBACI;;;AAIZ,IAAA,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE;AAC5B,IAAA,MAAM,aAAa,GAAG,UAAU,IAAI,UAAU,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM;AAChG,IAAA,IAAI,SAAS,IAAI,aAAa,EAAE;QAC5B,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;QACrD,IAAI,cAAc,GAAqB,EAAE;AACzC,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AAC/B,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,YAAY,KAAK,UAAU,CAAC;YACnF,IAAI,UAAU,EAAE;AACZ,gBAAA,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAS,CAAC;;AAEjD,SAAC,CAAC;AACF,QAAA,IAAI,cAAc,CAAC,MAAM,EAAE;AACvB,YAAA,OAAO,UAAU,GAAG,cAAc,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;;;AAIhE,IAAA,OAAO,IAAI;AACf;AAEA,SAASA,sBAAoB,CACzB,SAA2B,EAC3B,KAAmB,EACnB,UAA6B,EAC7B,OAAO,GAAG,cAAc,EAAA;IAExB,IAAI,MAAM,GAAa,EAAE;AACzB,IAAA,IAAI,SAAS,EAAE,MAAM,IAAI,UAAU,EAAE;AACjC,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACnD,MAAM,QAAQ,GAAG,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,QAAQ,EAAE;gBACX;;AAGJ,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC/B,IAAI,KAAK,EAAE;AACP,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;;;AAI9B,IAAA,OAAO,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AAC7D;;ACvHM,MAAO,WAAY,SAAQ,KAAK,CAAA;IACzB,YAAY,CAAC,SAAyC,EAAE,SAAqB,EAAA;AAClF,QAAA,QAAQ,SAAS,CAAC,SAAS;YACvB,KAAK,sBAAsB,CAAC,KAAK;AAC7B,gBAAA,OAAO,OAAO,CAAC,SAAS,CAAC;YAC7B,KAAK,sBAAsB,CAAC,MAAM;AAC9B,gBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YAC9B,KAAK,sBAAsB,CAAC,EAAE;gBAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;YACnH,KAAK,sBAAsB,CAAC,GAAG;AAC3B,gBAAA,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK;YAChF,KAAK,sBAAsB,CAAC,GAAG;AAC3B,gBAAA,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK;YAChF,KAAK,sBAAsB,CAAC,EAAE;AAC1B,gBAAA,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK;YAC/E,KAAK,sBAAsB,CAAC,EAAE;AAC1B,gBAAA,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK;YAC/E,KAAK,sBAAsB,CAAC,EAAE;gBAC1B,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC,KAAK;AACjH,YAAA;gBACI,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC;;;IAIlD,OAAO,CAAC,UAAkB,EAAE,UAAkB,EAAA;AACnD,QAAA,OAAO,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC;;AAGvC,IAAA,YAAY,CACjB,SAAiB,EACjB,WAAyB,EACzB,UAA2D,EAAA;QAE3D,OAAO,kBAAkB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;;AAEpE;SAEe,kBAAkB,CAC9B,SAAiB,EACjB,WAAyB,EACzB,UAA2D,EAAA;AAE3D,IAAA,IAAI,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE;IAE3B,IAAI,UAAU,EAAE;AACZ,QAAA,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,UAAU;AACvC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;QAE5B,QAAQ,SAAS;YACb,KAAK,gBAAgB,CAAC,MAAM;YAC5B,KAAK,gBAAgB,CAAC,IAAI;YAC1B,KAAK,gBAAgB,CAAC,QAAQ;AAC1B,gBAAA,OAAO,SAAS;YACpB,KAAK,gBAAgB,CAAC,MAAM;AACxB,gBAAA,IAAI,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE;AAC3D,oBAAA,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAE,KAAK,CAAC,QAA2B,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC;oBACzF,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI;;gBAEzC;AACJ,YAAA;gBACI;;;AAIZ,IAAA,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;AACvD,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC;;AAEvB,IAAA,OAAO,IAAI;AACf;;ACrEM,MAAO,aAAc,SAAQ,KAAK,CAAA;IAC3B,YAAY,CAAC,SAAyC,EAAE,SAAqB,EAAA;AAClF,QAAA,QAAQ,SAAS,CAAC,SAAS;YACvB,KAAK,sBAAsB,CAAC,KAAK;AAC7B,gBAAA,OAAO,OAAO,CAAC,SAAS,CAAC;YAC7B,KAAK,sBAAsB,CAAC,MAAM;AAC9B,gBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YAC9B,KAAK,sBAAsB,CAAC,EAAE;gBAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;YACnH,KAAK,sBAAsB,CAAC,GAAG;AAC3B,gBAAA,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK;YAChF,KAAK,sBAAsB,CAAC,GAAG;AAC3B,gBAAA,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK;YAChF,KAAK,sBAAsB,CAAC,EAAE;AAC1B,gBAAA,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK;YAC/E,KAAK,sBAAsB,CAAC,EAAE;AAC1B,gBAAA,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK;YAC/E,KAAK,sBAAsB,CAAC,EAAE;gBAC1B,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC,KAAK;AACjH,YAAA;gBACI,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC;;;IAIlD,OAAO,CAAC,UAAkB,EAAE,UAAkB,EAAA;AACnD,QAAA,OAAO,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC;;AAGvC,IAAA,YAAY,CAAC,cAAsB,EAAA;QACxC,IAAI,QAAQ,GAAa,EAAE;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AAC1B,YAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,cAAc,CAAA,CAAA,CAAG,CAAC;;AAEvC,QAAA,OAAO,QAAQ;;AAGV,IAAA,YAAY,CACjB,SAAiB,EACjB,WAAyB,EACzB,UAA2D,EAAA;QAE3D,OAAO,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;;AAEtE;SAEe,oBAAoB,CAChC,SAAiB,EACjB,WAAyB,EACzB,UAA2D,EAAA;AAE3D,IAAA,IAAI,KAAK,GAAQ,SAAS,CAAC,IAAI,EAAE;IACjC,IAAI,UAAU,EAAE;AACZ,QAAA,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,UAAU;AACvC,QAAA,QAAQ,KAAK,CAAC,IAAI;YACd,KAAK,gBAAgB,CAAC,QAAQ;YAC9B,KAAK,gBAAgB,CAAC,IAAI;YAC1B,KAAK,gBAAgB,CAAC,MAAM;gBACxB,KAAK,GAAG,SAAS;gBACjB;YACJ,KAAK,gBAAgB,CAAC,MAAM;AACxB,gBAAA,IAAI,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE;AAC3D,oBAAA,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAE,KAAK,CAAC,QAA2B,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC;oBACzF,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI;;gBAE1C;AACJ,YAAA;gBACI;;;AAIZ,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACjB,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,aAAa,IAAI,CAAC,IAAI,aAAa,IAAI,GAAG,EAAE;AAC5E,YAAA,OAAO,aAAa;;;AAI5B,IAAA,OAAO,IAAI;AACf;;AC7EM,MAAO,SAAU,SAAQ,KAAK,CAAA;IACvB,YAAY,CAAC,SAA2C,EAAE,SAAkC,EAAA;AACjG,QAAA,QAAQ,SAAS,CAAC,SAAS;YACvB,KAAK,sBAAsB,CAAC,KAAK;AAC7B,gBAAA,OAAO,OAAO,CAAC,SAAS,CAAC;YAC7B,KAAK,sBAAsB,CAAC,MAAM;AAC9B,gBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YAC9B,KAAK,sBAAsB,CAAC,EAAE;gBAC1B,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC;AACpF,gBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS;YAC3C,KAAK,sBAAsB,CAAC,GAAG;gBAC3B,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC;AACrF,gBAAA,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS;AAC1C,YAAA;gBACI,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC;;;IAIlD,OAAO,CAAC,UAAkB,EAAE,UAAkB,EAAA;AACnD,QAAA,OAAO,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC;;AAGvC,IAAA,YAAY,CACjB,SAAiB,EACjB,WAAyB,EACzB,UAA2D,EAAA;QAE3D,OAAO,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;;AAElE;SAEe,gBAAgB,CAC5B,SAAiB,EACjB,WAAyB,EACzB,UAA2D,EAAA;AAE3D,IAAA,IAAI,KAAK,GAAQ,SAAS,CAAC,IAAI,EAAE;IACjC,IAAI,UAAU,EAAE;AACZ,QAAA,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,UAAU;AACvC,QAAA,QAAQ,KAAK,CAAC,IAAI;YACd,KAAK,gBAAgB,CAAC,IAAI;YAC1B,KAAK,gBAAgB,CAAC,MAAM;YAC5B,KAAK,gBAAgB,CAAC,QAAQ;gBAC1B,KAAK,GAAG,SAAS;gBACjB;YACJ,KAAK,gBAAgB,CAAC,MAAM;AACxB,gBAAA,IAAI,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE;AAC3D,oBAAA,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAE,KAAK,CAAC,QAA2B,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC;oBACzF,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI;;gBAE1C;AACJ,YAAA;gBACI;;;AAIZ,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACjB,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE;AAC5D,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;;AAEhC,QAAA,OAAO,CAAC;;AAGZ,IAAA,OAAO,IAAI;AACf;;ACjEM,MAAO,WAAY,SAAQ,KAAK,CAAA;IACzB,YAAY,CAAC,SAAyC,EAAE,SAA2B,EAAA;AACxF,QAAA,QAAQ,SAAS,CAAC,SAAS;YACvB,KAAK,sBAAsB,CAAC,KAAK;AAC7B,gBAAA,OAAO,OAAO,CAAC,SAAS,CAAC;YAC7B,KAAK,sBAAsB,CAAC,MAAM;AAC9B,gBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YAC9B,KAAK,sBAAsB,CAAC,EAAE;AAC1B,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC;YACrF,KAAK,sBAAsB,CAAC,GAAG;AAC3B,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC;AACtF,YAAA;gBACI,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC;;;AAIlD,IAAA,OAAO,CAAC,UAAsB,EAAE,UAAsB,EAAE,KAAmB,EAAA;QAChF,MAAM,MAAM,GAAGA,sBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC;QACtD,MAAM,MAAM,GAAGA,sBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC;AACtD,QAAA,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;;IAG/B,YAAY,CAAC,cAAwB,EAAE,KAAmB,EAAA;QAC/D,IAAI,QAAQ,GAAa,EAAE;AAC3B,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAE,KAAK,CAAC,QAA2B,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC;AACzF,QAAA,IAAI,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE;AAC1E,YAAA,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAChC,gBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;AACnC,gBAAA,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;AACvB,oBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;;AAElC,aAAC,CAAC;;AAEN,QAAA,OAAO,QAAQ;;AAGV,IAAA,YAAY,CACjB,SAAiB,EACjB,WAAyB,EACzB,UAAkE,EAAA;QAElE,OAAO,kBAAkB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;;AAEpE;SAEe,kBAAkB,CAC9B,SAAiB,EACjB,WAAyB,EACzB,UAAkE,EAAA;AAElE,IAAA,OAAO,IAAI;AACf;SAEgB,2BAA2B,CACvC,SAAiB,EACjB,WAAyB,EACzB,UAAkE,EAAA;IAElE,MAAM,kBAAkB,GAAI,WAAW,CAAC,QAA2B,EAAE,OAAO,IAAI,EAAE;IAClF,IAAI,cAAc,GAAa,EAAE;IACjC,IAAI,UAAU,GAAmC,EAAE;IACnD,IAAI,aAAa,GAAa,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;IAE7E,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,UAAU,IAAI,EAAE;IAC7C,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,EAAE;AACjD,QAAA,IAAI,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE;AAC3D,YAAA,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC;AACtE,YAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAE,KAAK,CAAC,QAA2B,EAAE,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC;AAChG,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACrB,gBAAA,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC9B,oBAAA,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;;qBACpB,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;oBACxF,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAA2B,KAAK,MAAM,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;AAClH,oBAAA,cAAc,CAAC,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC;;qBAC7B;AACH,oBAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,EAAE,CAAC;oBACzC,IAAI,YAAY,EAAE;wBACd,UAAU,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,YAAY,CAAC,IAAI;4BACvB,IAAI,EAAE,YAAY,CAAC,IAAI;4BACvB,KAAK,EAAE,YAAY,CAAC,KAAK;4BACzB,QAAQ,EAAE,YAAY,CAAC;AAC1B,yBAAA,CAAC;;;AAGd,aAAC,CAAC;;;SAEH;AACH,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC3B,YAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;YACxE,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;AACxE,SAAC,CAAC;;AAGN,IAAA,MAAM,UAAU,GAAI,WAAW,CAAC,QAA2B,EAAE,WAAW;IACxE,IAAI,UAAU,EAAE;AACZ,QAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE;;SAClC;AACH,QAAA,IAAI,cAAc,CAAC,MAAM,EAAE;AACvB,YAAA,OAAO,EAAE,cAAc,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;;aAC3D;AACH,YAAA,IAAI,UAAU,CAAC,MAAM,EAAE;AACnB,gBAAA,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;;iBACvD;gBACH,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;;;;AAI7D;AAEA,SAASA,sBAAoB,CAAC,SAA2B,EAAE,KAAmB,EAAA;IAC1E,IAAI,CAAC,SAAS,EAAE;AACZ,QAAA,OAAO,IAAI;;IAEf,MAAM,KAAK,GAAa,EAAE;AAC1B,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAE,KAAK,CAAC,QAA2B,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC;AACzF,IAAA,IAAI,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE;AAC3D,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC3B,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;AACnC,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;AACvB,gBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;;AAE/B,SAAC,CAAC;;AAEN,IAAA,OAAO,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;AACzD;;AC9HM,MAAO,SAAU,SAAQ,KAAK,CAAA;IACvB,YAAY,CAAC,SAAyC,EAAE,SAAqB,EAAA;AAClF,QAAA,QAAQ,SAAS,CAAC,SAAS;YACvB,KAAK,sBAAsB,CAAC,KAAK;AAC7B,gBAAA,OAAO,OAAO,CAAC,SAAS,CAAC;YAC7B,KAAK,sBAAsB,CAAC,MAAM;AAC9B,gBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YAC9B,KAAK,sBAAsB,CAAC,OAAO;AAC/B,gBAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC;AAC3E,YAAA;gBACI,OAAO,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC;;;IAIlD,OAAO,CAAC,UAAsB,EAAE,UAAsB,EAAA;AAC3D,QAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC;AAC/C,QAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC;AAC/C,QAAA,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;;AAG/B,IAAA,YAAY,CAAC,SAAiB,EAAA;AACnC,QAAA,OAAO,gBAAgB,CAAC,SAAS,CAAC;;AAEzC;AAEK,SAAU,gBAAgB,CAAC,SAAiB,EAAA;AAC9C,IAAA,OAAO,SAAS,CAAC,IAAI,EAAE;AAC3B;AAEA,SAAS,oBAAoB,CAAC,SAAqB,EAAA;IAC/C,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,IAAI;AAClD;;ACxBa,MAAA,aAAa,GAAoC;AAC1D,IAAA,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,SAAS,EAAE;AACxC,IAAA,CAAC,gBAAgB,CAAC,QAAQ,GAAG,IAAI,SAAS,EAAE;AAC5C,IAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,WAAW,EAAE;AAC5C,IAAA,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,SAAS,EAAE;AACxC,IAAA,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE;AAC7C,IAAA,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE;AAC7C,IAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,WAAW,EAAE;AAC5C,IAAA,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,SAAS,EAAE;AACxC,IAAA,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,SAAS,EAAE;AACxC,IAAA,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,WAAW,EAAE;AAC5C,IAAA,CAAC,gBAAgB,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE;AAChD,IAAA,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,WAAW,EAAE;AAC/C,IAAA,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,WAAW,EAAE;AAC/C,IAAA,CAAC,gBAAgB,CAAC,UAAU,GAAG,IAAI,eAAe;;;ACtB/C,MAAM,wBAAwB,GAAG;AAE3B,MAAA,kBAAkB,GAAG,CAAC,OAAgB,KAA6B;AAC5E,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC;AACjE,IAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACrB,QAAA,OAAO,IAAI;;AAGf,IAAA,IAAI,cAAc,GAAG,IAAI,GAAG,EAAU;AACtC,IAAA,IAAI,eAAe,GAAG,IAAI,GAAG,EAAU;AACvC,IAAA,WAAW,CAAC,OAAO,CAAC,CAAC,QAAgB,KAAI;AACrC,QAAA,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/C,QAAA,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;AAC3B,QAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjC,KAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IAC7C,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;IACxE,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;AAE5E,IAAA,OAAO,qBAAqB,CAAC,gBAAgB,EAAE,cAAc,CAAC;AAClE;AAEA,MAAM,oBAAoB,GAAG,CAAC,cAA8B,KAAI;IAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;IACtD,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,qBAAqB,CAAC,gBAAsC,EAAE,cAA8B,EAAA;AACjG,IAAA,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,cAAc,CAAC;AAClE,IAAA,MAAM,gBAAgB,GAAqB;AACvC,QAAA,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3F,QAAA,IAAI,EAAE,CAAU,OAAA,EAAA,wBAAwB,KAAK,qBAAqB,CAAA,EAAA,EAAK,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAO,IAAA,EAAA,MAAM,CAAC,IAAI,CAAA,KAAA,CAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAU,QAAA;KACjM;AACD,IAAA,OAAO,gBAAgB;AAC3B;AAEA,SAAS,mBAAmB,CAAC,OAAgB,EAAE,QAAkB,EAAE,SAAmB,EAAA;IAClF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;AACpC,QAAA,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC;AACvC,KAAC,CAAC;IAEF,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;QACvC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;AAC7C,QAAA,IAAI,SAAS,GAA2B;YACpC,GAAG,EAAE,MAAM,CAAC,GAAG;AACf,YAAA,MAAM,EAAE;SACX;AACD,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC;AAC1C,YAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AACtB,gBAAA,MAAM,SAAS,GAAqB,KAAK,CAAC,IAAwB;AAClE,gBAAA,SAAS,GAAG;AACR,oBAAA,GAAG,SAAS;oBACZ,CAAC,SAAS,GAAG,mBAAmB,CAAC,MAAM,EAAE,SAAS;iBACrD;;iBACE;gBACH,SAAS,CAAC,MAAM,GAAG;oBACf,GAAG,SAAS,CAAC,MAAM;oBACnB,CAAC,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK;iBACzC;;AAET,SAAC,CAAC;AACF,QAAA,OAAO,SAAS;AACpB,KAAC,CAAC;IAEF,OAAO;QACH,MAAM;QACN;KACH;AACL;AAEA,SAAS,qBAAqB,CAAC,OAAgB,EAAE,QAAkB,EAAE,SAAmB,EAAA;IACpF,MAAM,gBAAgB,GAAyB,EAAE;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAQ,CAAC,UAAU,EAAE;AAChD,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;QAC7C,MAAM,GAAG,GAAqC,EAAE;AAChD,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACzB,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC;YAC1C,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;YAC9C,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;AACpE,YAAA,MAAM,SAAS,GAAa,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC;AACrG,YAAA,IAAI,WAAW,GAAG;AACd,gBAAA,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACzB,gBAAA,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG;aAC3B;AACD,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,IAAI,SAAS,IAAI,SAAS,CAAC,GAAG,EAAE;AACpE,gBAAA,WAAW,CAAC,IAAI,GAAG,CAAA,SAAA,EAAY,SAAS,CAAC,GAAG,CAAA,kBAAA,EAAqB,SAAS,CAAC,IAAI,CAAA,IAAA,CAAM;;AAEzF,YAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AACzB,SAAC,CAAC;AACF,QAAA,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B,KAAC,CAAC;AACF,IAAA,OAAO,gBAAgB;AAC3B;;ACjFA,MAAM,uBAAuB,GAAG,IAAI,MAAM,CAAC,CAAG,EAAA,wBAAwB,CAAU,QAAA,CAAA,EAAE,GAAG,CAAC;AAEtF,MAAM,uBAAuB,GAAG,CAAC,OAAe,KAAI;IAChD,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxD,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAC9B,CAAC;AAED,SAAS,+BAA+B,CAAC,aAAqB,EAAA;IAC1D,MAAM,QAAQ,GAAG;SACZ,KAAK,CAAC,IAAI;AACV,SAAA,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAC5B,SAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAElF,IAAA,OAAO,QAAQ;AACnB;AAEA,SAAS,gBAAgB,CAAC,QAAgB,EAAA;IACtC,MAAM,WAAW,GAAG,oDAAoD;IACxE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAC9D,MAAM,OAAO,GAAG,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,IAAI,CAAK,EAAA,EAAA,IAAI,CAAC,IAAI,CAAG,CAAA,CAAA,CAAC,GAAG,QAAQ;IAEpG,MAAM,YAAY,GAAG;AAChB,SAAA,OAAO,CAAC,UAAU,EAAE,EAAE;AACtB,SAAA,OAAO,CAAC,SAAS,EAAE,GAAG;AACtB,SAAA,OAAO,CAAC,MAAM,EAAE,GAAG;AACnB,SAAA,IAAI,EAAE;AAEX,IAAA,OAAO,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA,MAAA,EAAS,IAAI,CAAC,IAAI,CAAA,EAAA,EAAK,IAAI,CAAC,IAAI,CAAG,CAAA,CAAA,EAAE,CAAY,SAAA,EAAA,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAA,IAAA,CAAM,CAAC,GAAG,YAAY;AACrI;AAEA,SAAS,+BAA+B,CAAC,aAAqB,EAAA;IAC1D,MAAM,YAAY,GAAG,kCAAkC;IACvD,MAAM,SAAS,GAAG,6BAA6B;IAC/C,MAAM,SAAS,GAAG,8BAA8B;AAEhD,IAAA,IAAI;QACA,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;AACpD,QAAA,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa;QAC/D,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;AAEhD,QAAA,OAAO;AACF,aAAA,GAAG,CAAC,CAAC,GAAG,KAAI;YACT,MAAM,QAAQ,GAAa,EAAE;AAC7B,YAAA,IAAI,OAAO;AAEX,YAAA,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE;gBAC7C,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;AAG/C,YAAA,OAAO,QAAQ;AACnB,SAAC;AACA,aAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;;IACtC,OAAO,KAAK,EAAE;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC;AAC3D,QAAA,OAAO,EAAE;;AAEjB;AAEA,SAAS,sCAAsC,CAAC,aAAqB,EAAA;IACjE,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,uBAAuB,CAAC;IACpE,IAAI,eAAe,IAAI,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE;AAC7C,QAAA,OAAO,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;AAEtD,IAAA,OAAO,IAAI;AACf;AAEA,MAAM,iBAAiB,GAAG,YAA6F;AACnH,IAAA,MAAM,aAAa,GAAG,MAAM,iBAAiB,EAAE;IAC/C,IAAI,gBAAgB,GAAe,EAAE;IACrC,IAAI,cAAc,GAA0B,IAAI;IAEhD,IAAI,aAAa,EAAE;AACf,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI;AACxC,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI;QAExC,IAAI,aAAa,EAAE;AACf,YAAA,cAAc,GAAG,sCAAsC,CAAC,aAAa,CAAC;AACtE,YAAA,gBAAgB,GAAG,+BAA+B,CAAC,aAAa,CAAC;;AAGrE,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,aAAa,EAAE;AAC3C,YAAA,gBAAgB,GAAG,+BAA+B,CAAC,aAAa,CAAC;;;IAIzE,OAAO;QACH,gBAAgB;QAChB;KACH;AACL,CAAC;AAED,SAAS,aAAa,CAClB,SAAiB,EACjB,cAAqC,EACrC,WAAmB,EACnB,UAAkB,EAClB,WAAyB,EACzB,UAA6B,EAAA;IAK7B,IAAI,KAAK,GAAwB,IAAI;IACrC,IAAI,MAAM,GAAkC,IAAI;IAEhD,IAAI,cAAc,EAAE;AAChB,QAAA,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc;AAC1C,QAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1B,QAAA,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;;IAGjC,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,UAAU,CAAC,EAAE;QAC3G,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;;IAE1C,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,EAAE;AAC5C,QAAA,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;;IAGtC,IAAI,UAAU,GAAG,KAAK,IAAI,MAAM,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI;IAC5F,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,CAAC,MAAM,EAAE;AAC9C,QAAA,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,2BAA2B,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;QACpG,IAAI,QAAQ,GAAwB,IAAI;QACxC,IAAI,YAAY,GAAa,EAAE;AAE/B,QAAA,IAAI,UAAU,CAAC,MAAM,EAAE;YACnB,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBACnC,OAAO;AACH,oBAAA,GAAG,MAAM;oBACT,GAAG,EAAE,SAAS;iBACjB;AACL,aAAC,CAAC;AACF,YAAA,QAAQ,GAAG;AACP,gBAAA,GAAG,WAAW;AACd,gBAAA,QAAQ,EAAE;oBACN,GAAG,WAAW,CAAC,QAAQ;AACvB,oBAAA,OAAO,EAAE,CAAC,IAAK,WAAW,CAAC,QAA2B,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,UAAU;AACxF;aACJ;YACD,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAa;;AAG1F,QAAA,MAAM,gBAAgB,GAAG,YAAY,EAAE,MAAM,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,YAAY,CAAC,GAAG,cAAc;QACrG,OAAO;AACH,YAAA,KAAK,EAAE,gBAAgB;YACvB;SACH;;IAGL,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;AAClI;AASA,SAAS,YAAY,CAAC,OAAgB,EAAE,OAA4B,EAAA;AAChE,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE;IACpC,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;IACvF,OAAO,CAAC,SAAS,CAAC;AACd,QAAA,QAAQ,EAAE;AACb,KAAA,CAAC;AACN;AAEA,SAAS,WAAW,CAAC,OAAgB,EAAE,WAAgC,EAAE,OAA4B,EAAA;AACjG,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;AACxG,IAAA,IAAI,iBAAwC;IAC5C,IAAI,WAAW,EAAE;AACb,QAAA,iBAAiB,GAAG;AAChB,YAAA,GAAG,WAAW;YACd,IAAI,EAAE,sBAAsB,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAE,CAAC;YACnG,GAAG,EAAE,SAAS;SACjB;;SACE;QACH,iBAAiB,GAAG,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC;;IAG1E,OAAO,CAAC,QAAQ,CAAC;AACb,QAAA,QAAQ,EAAE,WAAW;AACrB,QAAA,YAAY,EAAE;AACjB,KAAA,CAAC;AACN;AAEa,MAAA,cAAc,GAAG,OAAO,OAAgB,EAAE,OAA4B,KAAI;AACnF,IAAA,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC;AACnE,IAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;QACvB;;IAEJ,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,MAAM,iBAAiB,EAAE;AACtE,IAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;QAC1B;;AAGJ,IAAA,MAAM,CAAC,SAAS,CAAC,GAAG,aAAa;AACjC,IAAA,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1D,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,OAAQ,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;AACpF,IAAA,MAAM,aAAa,GAAG,OAAO,CAAC,OAAQ,CAAC,sBAAsB,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;IACtF,MAAM,UAAU,GAAG,OAAO,CAAC,OAAQ,CAAC,UAAU,EAAE;IAChD,IAAI,cAAc,GAAG,KAAK;IAE1B,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AAChC,QAAA,MAAM,cAAc,GAAG,aAAa,GAAG,CAAC;AACxC,QAAA,IAAI,cAAc,IAAI,OAAO,CAAC,OAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5D,YAAA,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;;QAGlC,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,KAAI;AACzB,YAAA,MAAM,cAAc,GAAG,aAAa,GAAG,CAAC;YACxC,IAAI,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;gBAC5D,MAAM,WAAW,GAAG,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI;AACrD,gBAAA,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC;;YAG9C,MAAM,YAAY,GAAG,OAAO,CAAC,OAAQ,CAAC,UAAU,EAAE,CAAC,cAAc,CAAC;YAClE,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC;YACrE,MAAM,WAAW,GAAG,CAAC;YACrB,MAAM,UAAU,GAAG,CAAC;YACpB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC;YAEtH,IAAI,QAAQ,EAAE;AACV,gBAAA,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAG9B,YAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAChB,gBAAA,IAAI;oBACA,OAAO,CAAC,gBAAgB,CAAC;wBACrB,KAAK;wBACL,IAAI,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG;AAC3C,qBAAA,CAAC;oBACF,cAAc,GAAG,IAAI;;AACvB,gBAAA,OAAO,KAAK,EAAE;;AAExB,SAAC,CAAC;AACN,KAAC,CAAC;AAEF,IAAA,OAAO,cAAc;AACzB;;MC/Pa,mBAAmB,GAAG,CAAC,UAAsB,EAAE,WAA+B,KAAI;AAC3F,IAAA,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,WAAW;IAC7C,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,UAAU;;IAG/D,MAAM,oBAAoB,GAAG,MAAK;QAC9B,MAAM,UAAU,GAAG,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC;QACzD,MAAM,SAAS,GAAG,UAAU,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC;QAEnE,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;SAClE;AACL,KAAC;;IAGD,MAAM,sBAAsB,GAAG,MAAK;QAChC,MAAM,UAAU,GAAG,UAAU,CAAC,mBAAmB,CAAC,UAAU,CAAC;QAC7D,MAAM,SAAS,GAAG,UAAU,CAAC,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC;QAEvE,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;SACxF;AACL,KAAC;IAED,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,oBAAoB,EAAE;IAC9D,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,sBAAsB,EAAE;IACtE,OAAO;QACH,aAAa;QACb,YAAY;QACZ,gBAAgB;QAChB;KACH;AACL;MAEa,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;AACD,IAAA,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE;AAC7E,IAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE;AAC9C;;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;AACvD,IAAA,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;AACzE,IAAA,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC;IAC/B,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC;IACvD,MAAM,UAAU,GAAG,4BAA4B,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC;IACrG,MAAM,WAAW,GAAG,UAAU,CAAC,mBAAmB,CAAC,UAAU,CAAC;IAC9D,MAAM,QAAQ,GAAG,UAAU,IAAI,cAAc,IAAI,SAAS,IAAI,eAAe,GAAG,eAAe,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI;AAC3H,IAAA,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC;IAC7C,OAAO;QACH,QAAQ;AACR,QAAA,UAAU;AACV,QAAA,cAAc,EAAE,WAAW,IAAI,cAAc;QAC7C,QAAQ;QACR,WAAW;QACX,SAAS;QACT,UAAU;QACV,CAAC;QACD;KACH;AACL;MAEa,4BAA4B,GAAG,CAAC,CAAS,EAAE,iBAAyB,KAAI;AACjF,IAAA,MAAM,GAAG,GAAG,uBAAuB,GAAG,iBAAiB;IACvD,MAAM,GAAG,GAAG,uBAAuB;AACnC,IAAA,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG;AAC7B;AAEa,MAAA,cAAc,GAAG,CAAC,aAAqB,KAAI;AACpD,IAAA,OAAO,aAAa,GAAG,eAAe,GAAG,CAAC;AAC9C;AAEO,MAAM,kBAAkB,GAAG,MAAK;IACnC,OAAO,CAAC,eAAe;AAC3B;AAEO,MAAM,wBAAwB,GAAG,MAAK;AACzC,IAAA,OAAO,iCAAiC,GAAG,CAAC,GAAG,eAAe,GAAG,CAAC;AACtE;AAEa,MAAA,mBAAmB,GAAG,CAAC,aAAqB,KAAI;AACzD,IAAA,MAAM,WAAW,GAAG,wBAAwB,EAAE;IAC9C,OAAO,aAAa,GAAG,WAAW;AACtC;AAEO,MAAM,uBAAuB,GAAG,MAAK;AACxC,IAAA,MAAM,WAAW,GAAG,wBAAwB,EAAE;IAC9C,OAAO,WAAW,GAAG,CAAC;AAC1B;;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;AACxE,IAAA,IAAI,UAAU;AAAE,QAAA,OAAO,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC;AAC3D,IAAA,IAAI,QAAQ,KAAK,eAAe,CAAC,IAAI;AAAE,QAAA,OAAO,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC;IACjF,QAAQ,UAAU;AACd,QAAA,KAAK,mCAAmC;AACxC,QAAA,KAAK,wBAAwB;AAC7B,QAAA,KAAK,4BAA4B;AACjC,QAAA,KAAK,uBAAuB;QAC5B,KAAK,yBAAyB,EAAE;AAC5B,YAAA,OAAO,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC;;AAE9C,QAAA;AACI,YAAA,OAAO,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC;;AAEtD;MAEa,aAAa,GAAG,CAAC,UAAkB,EAAE,SAAyB,KAAI;AAC3E,IAAA,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU;AACvC;;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;AACZ,IAAA,MAAM,CAAC,GAAwC;QAC3C,UAAU;QACV,QAAQ;QACR,UAAU;QACV,SAAS;QACT,UAAU;QACV;KACH;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,IAAA,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI;AAEvD,IAAA,MAAM,mBAAmB,GAAG,CAAC,UAAkB,KAAI;AAC/C,QAAA,OAAO;aACF,KAAK,CAAC,GAAG;AACT,aAAA,GAAG,CAAC,CAAC,MAAM,KAAI;AACZ,YAAA,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE;YACtB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACzC,YAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtE,YAAA,IAAI,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,gBAAA,MAAM,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG;;AAE1B,YAAA,OAAO,MAAM;AACjB,SAAC;aACA,IAAI,CAAC,IAAI,CAAC;AACnB,KAAC;;AAGD,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;;QAE9D,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;;AAEvG,KAAC;;IAGD,MAAM,qBAAqB,GAAG,CAAC,IAAmB,EAAE,QAAiB,EAAE,YAAqB,KAAI;QAC5F,IAAI,KAAK,GAAG,CAAC;QACb,IAAI,MAAM,GAAG,CAAC;QACd,IAAI,SAAS,GAAG,CAAC;AACjB,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE;;QAE9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,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;AACtB,YAAA,MAAM,SAAS,GAAG,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC;YACvD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;YAClC,SAAS,GAAG,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AACvE,YAAA,MAAM,IAAI,CAAC,CAAC,UAAU,GAAG,SAAS;;AAEtC,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;aACjC;;QAGL,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9B,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;QAClB,IAAI,UAAU,GAAG,KAAK;AACtB,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;AAEjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAE;AAC9B,YAAA,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU;;AAEzC,YAAA,UAAU,GAAG,YAAY,GAAG,QAAQ,KAAK,YAAY,GAAG,CAAC,GAAG,KAAK;AACjE,YAAA,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW;YAChE,SAAS,IAAI,UAAU;AACvB,YAAA,MAAM,SAAS,GAAG,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,CAAC;AAC9D,YAAA,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;YACrD,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;gBACxC,UAAU,IAAI,UAAU;AACxB,gBAAA,QAAQ,EAAE;gBACV,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;;oBAElE;;;iBAED;gBACH,QAAQ,GAAG,WAAW;;;QAG9B,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;SAC1D;AACL,KAAC;;;IAID,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,QAAiB,EAAE,YAAqB,KAAI;QAC3E,OAAO,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC;AAC5E,KAAC;;IAGD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC;IAErC,OAAO,CAAC,CAAC,CAAC;IAEV,OAAO;QACH,OAAO;QACP,WAAW;QACX,OAAO;QACP;KACH;AACL;;ACnJO,MAAM,mBAAmB,GAAG,CAC/B,OAAgB,EAChB,KAAmB,EACnB,QAAgB,EAChB,QAAgB,EAChB,UAA6B,KAC7B;AACA,IAAA,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9E,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;IACpE,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;AAC7C,IAAA,IAAI,YAAY,GAAa,WAAW,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC;AACxF,IAAA,OAAO,QAAQ,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9H;;ACdwB,SAAA,aAAa,CAAC,IAAU,EAAA;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;IACtD,IAAI,WAAW,EAAE;QACb,WAAW,CAAC,SAAS,EAAE;;AAE/B;;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;AAClL,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;;AAGzB,IAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,EAAE;IACpC,MAAM,YAAY,GAAgB,EAAE;IACpC,IAAI,UAAU,GAAG,KAAK;IAEtB,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;QACxC,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC;AAChD,QAAA,IAAI,OAAO,IAAI,WAAW,EAAE;YACxB,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAC1C,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;;YAEpF,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;;QAE1C,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;QAC3C,IAAI,QAAQ,EAAE;AACV,YAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;;AAExC,KAAC,CAAC;IACF,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;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC;AAC1C,QAAA,IAAI,OAAO,IAAI,KAAK,EAAE;YAClB,IAAI,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAC1C,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;;AAEpF,YAAA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;AACZ,gBAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;gBACvB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAgC,KAAI;oBACxD,KAAK,CAAC,GAAG,CAAC,CAAC;AACP,wBAAA,gBAAgB,EAAE,SAAS;wBAC3B;AACuB,qBAAA,CAAC;AAChC,iBAAC,CAAC;;;QAGV,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;YACjB,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;;AAEtC,KAAC,CAAC;IAEF,IAAI,UAAU,EAAE;AACZ,QAAA,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC/B,aAAa,CAAC,QAAQ,CAAC;AACvB,QAAA,IAAI,GAAG;QACP,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACvC,YAAA,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC;YACxB,IAAI,GAAG,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACvC,MAAM,IAAI,GAAG,QAAQ;AACrB,gBAAA,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAA;AACzB,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;oBAC7B,IAAI,KAAK,EAAE;wBACP,KAAK,CAAC,SAAS,EAAE;;AAEzB,iBAAC,CAAC;;AAEV,SAAC,CAAC;;AAEV;;ACpEA,SAAS,QAAQ,CAAC,GAAW,EAAA;AACzB,IAAA,OAAO;AACF,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;AACnE,KAAC;AACA,SAAA,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AAC5B;AAEA,SAAS,qBAAqB,CAAC,MAAc,EAAA;AACzC,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3D;AAEM,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;AACnF;AAEM,SAAU,cAAc,CAAC,QAAqB,EAAA;IAChD,MAAM,MAAM,GAAqB,EAAE;AACnC,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;AACH,KAAA,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;QACpB,MAAM,IAAI,GAAyC,SAAS;AAE5D,QAAA,MAAM,YAAY,GAAiD,QAAQ,CAAC,IAAI,CAAC;AACjF,QAAA,IAAI,YAAY,CAAC,QAAQ,EAAE;AACvB,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;;AAEhE,KAAC,CAAC;AACF,IAAA,OAAO,MAAM;AACjB;;ACnDO,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAAM,oBAAoB,CAAC;;MC4ClE,OAAO,CAAA;AA4EhB,IAAA,WAAA,GAAA;QA3EA,IAAM,CAAA,MAAA,GAAG,KAAK,EAAsB;AAE1B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAE3D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAE3D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B;AAE1D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B;AAE5D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B;AAE5D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAE3D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAA6B;AAEzD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAA6B;AAEvD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA+B;AAE/D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAA6B;AAEvD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B;AAE1D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B;AAE5D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAE3D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B;AAE1D,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAA6B;AAErD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAA6B;AAExD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAE3D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B;AAE1D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAA6B;AAE3D,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;QAE5C,IAAS,CAAA,SAAA,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAE1D,IAAU,CAAA,UAAA,GAAuB,EAAE;QAEnC,IAAQ,CAAA,QAAA,GAAmD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAGpG;QA2BV,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAG,CAAC;;AAEvC,SAAC,CAAC;;IAGC,OAAO,GAAA;QAuBV,OAAO,IAAI,CAAC,KAAK;;IAGrB,QAAQ,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE;;IAGZ,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE;;AAE5B,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE;;AACrB,aAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACnC,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAkB,CAAC;;aACnD;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;;AAGpD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,SAA6B,KAAU;YACpD,cAAc,CAAC,SAAS,CAAC;YACzB,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;;AAEnD,iBAAC,CAAC;aACL,EAAE,GAAG,CAAC;AACX,SAAC;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAG,CAAC;;;AAI/B,IAAA,UAAU,CAAC,MAA0B,EAAA;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AACjB,QAAA,MAAM,KAAK,GAAG;AACV,YAAA,GAAG,MAAM;YACT,GAAG,cAAc,CAAC,IAAI;SACzB;QACD,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;IAG3B,eAAe,GAAA;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QAC1C,SAAS,CAAC,GAAG,CAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;;IAG3C,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;;+GAhKhB,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,OAAO,s4BAHN,CAA2B,yBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAG5B,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;AAC5C,iBAAA;wDAIa,WAAW,EAAA,CAAA;sBAApB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAES,SAAS,EAAA,CAAA;sBAAlB;gBAES,OAAO,EAAA,CAAA;sBAAhB;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBAES,OAAO,EAAA,CAAA;sBAAhB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAES,KAAK,EAAA,CAAA;sBAAd;gBAES,QAAQ,EAAA,CAAA;sBAAjB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAES,SAAS,EAAA,CAAA;sBAAlB;;;ACrEC,MAAO,WAAY,SAAQ,OAAO,CAAA;+GAA3B,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;AAChB;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;;4FAS5B,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;AAC3B;AACJ,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;MCYY,WAAW,CAAA;AAPxB,IAAA,WAAA,GAAA;AAQI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAqB;;QAG5C,IAAO,CAAA,OAAA,GAAG,MAAM,EAA6B;QAE7C,IAAW,CAAA,WAAA,GAAG,MAAM,EAA6B;AAEjD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAa,MAAK;AACnC,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;AACjB,YAAA,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC;gBAC3B,IAAI;gBACJ,QAAQ;gBACR;AACH,aAAA,CAAC;AACF,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE;YAC1C,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;gBACV,OAAO,EAAE,UAAU,OAAgB,EAAA;oBAC/B,OAAO,CAAC,SAAS,EAAE;oBACnB,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,MAAO,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,eAAe,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;oBACvH,OAAO,CAAC,SAAS,EAAE;AACnB,oBAAA,OAAO,CAAC,eAAe,CAAC,IAAW,CAAC;iBACvC;AACD,gBAAA,GAAG;aACN;AACL,SAAC,CAAC;AAQL;AANG,IAAA,OAAO,CAAC,CAA4B,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;;AAExB,IAAA,WAAW,CAAC,CAA4B,EAAA;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;;+GAnEnB,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAX,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,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALV,CAA+G,6GAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAE/G,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;;4FAGR,WAAW,EAAA,UAAA,EAAA,CAAA;kBAPvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,CAA+G,6GAAA,CAAA;AACzH,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;ACQD;AACO,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE;AAEtD;;AAEG;MACU,MAAM,CAAA;AAAnB,IAAA,WAAA,GAAA;AACI,QAAA,IAAA,CAAA,GAAG,GAA6B,WAAW,EAAE,CAAC,OAAQ;QACtD,IAAQ,CAAA,QAAA,GAAG,KAAK;AAChB,QAAA,IAAA,CAAA,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;;AAErB,IAAA,OAAO,CAAC,GAA6B,EAAA;AACxC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;QAC5B,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC,OAAQ;AACxC;;AAEG;AACH,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,kCAAkC;;;AAIvD,IAAA,QAAQ,CAAC,OAAwB,EAAA;QACpC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO;AAEhE,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;;QAEpH,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS;;QAElC,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,WAAW;;;;AAKnC,IAAA,YAAY,CAAC,OAA4B,EAAA;AAC5C,QAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,iBAAiB,EAAE,UAAU,GAAG,mBAAmB,EAAE,GAAG,OAAO;QAElG,IAAI,IAAI,IAAI,IAAI;YACZ,OAAO;AACH,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,SAAS,EAAE,CAAC;AACZ,gBAAA,UAAU,EAAE;aACf;QACL,MAAM,SAAS,GAAG,CAAG,EAAA,UAAU,IAAI,QAAQ,CAAA,GAAA,EAAM,mBAAmB,CAAA,CAAE;QAEtE,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;aACf;;QAGL,MAAM,QAAQ,GAAG,GAAG;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM;;QAE5B,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9C,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC;AACzC,QAAA,IAAI,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC;AAE7D,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;iBACf;;AAEL,YAAA,SAAS,EAAE;YACX,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC;YACrC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC;;AAG7D,QAAA,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC;QACjE,OAAO,SAAS,IAAI,CAAC,IAAI,UAAU,GAAG,aAAa,GAAG,QAAQ,EAAE;AAC5D,YAAA,SAAS,EAAE;YACX,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC;YACrC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC;;QAG7D,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;SACf;;;AAIE,IAAA,IAAI,CAAC,OAAoB,EAAA;AAC5B,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO;AACxD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAE5B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACpB,QAAA,IAAI,MAAM;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM;AACzC,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAErC,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;;QAG7C,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;;AAExB,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;;;AAIf,IAAA,GAAG,CAAC,OAAmB,EAAA;AAC1B,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO;AAC9C,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACpB,QAAA,IAAI,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC5C,QAAA,IAAI,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC;QACjD,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;;QAEnB,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;;;;AAKlB,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;AAE7D,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACpB,QAAA,IAAI,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC5C,QAAA,IAAI,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;QAElD,IAAI,CAAC,MAAM,EAAE;AACT,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;;aAC/B;YACH,IAAI,OAAO,GAAG,CAAC;YACf,IAAI,QAAQ,GAAG,CAAC;YAChB,IAAI,UAAU,GAAG,CAAC;YAClB,IAAI,WAAW,GAAG,CAAC;AAEnB,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;;iBACpF;gBACH,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;gBACzD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;gBAC1D,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;gBAC7D,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;;YAGhE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC;AACxC,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;AACvF,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,WAAW,CAAC;AACpD,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;AACnG,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC;AAC3C,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;YAC9F,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;AAC/B,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;;AAGtF,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;QAEpB,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;;QAEnB,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;;;AAIlB,IAAA,UAAU,CAAC,OAAoB,EAAA;AAClC,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO;AACtD,QAAA,IAAI,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;QACtC,IAAI,OAAO,EAAE;YACT,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO;;AAE5C,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC9D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;;AAEjB,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAChE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;;AAEjB,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACjE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;AACtC,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;;AAEjB,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC/D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;;;;AAKlB,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;QACX,IAAI,OAAO,GAAG,CAAC;QACf,IAAI,OAAO,GAAG,CAAC;QACf,MAAM,SAAS,GAAG,CAAG,EAAA,UAAU,IAAI,QAAQ,CAAA,GAAA,EAAM,mBAAmB,CAAA,CAAE;AACtE,QAAA,MAAM,cAAc,GAAG,aAAa,KAAK,+BAA+B,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC;AAC3F,QAAA,MAAM,YAAY,GAAG,CAAA,EAAG,UAAU,CAAI,CAAA,EAAA,QAAQ,IAAI;AAClD,QAAA,MAAM,WAAW,GAAG,cAAc,KAAK,WAAW;AAClD,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,SAAS;AACzB,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;AACvD,gBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,GAAG,cAAc,CAAC;AAClE,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;AACX,qBAAA,CAAC;;AAEV,aAAC,CAAC;AACN,SAAC;AAED,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS;AAC9B,QAAA,MAAM,QAAQ,GAAG,CAAG,EAAA,YAAY,IAAI,MAAM,CAAA,CAAA,EAAI,QAAQ,IAAI,CAAC,CAAI,CAAA,EAAA,SAAS,CAAI,CAAA,EAAA,IAAI,EAAE;QAClF,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;QACjD,IAAI,aAAa,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;AAC3B,gBAAA,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC;;AAEpC,YAAA,OAAO,aAAa;;QAGxB,MAAM,UAAU,GAAwB,EAAE;;QAE1C,MAAM,OAAO,GAAG,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC;AACrD,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;AACjC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK;AACrD,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;AAEhB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU;AAE7E,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;AAC1B,YAAA,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAClD,MAAM,UAAU,GAAG,WAAW,GAAG,EAAE,GAAG,OAAO;AAC7C,YAAA,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU;AACzC,YAAA,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,IAAI,MAAM,GAAG,CAAC,GAAG,KAAK;YAC1D,MAAM,eAAe,GAAG,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,KAAK;YAChF,aAAa,IAAI,eAAe;YAChC,MAAM,SAAS,GAAG,UAAU,GAAG,aAAa,IAAI,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC,GAAG,aAAa;AAC/F,YAAA,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ;;YAGtC,IAAI,CAAC,SAAS,IAAI,WAAW,KAAK,QAAQ,GAAG,MAAM,EAAE;gBACjD,MAAM,YAAY,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC;gBAC7C,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;AACtE,iBAAA,CAAC;gBACF,QAAQ,GAAG,UAAU;gBACrB,OAAO,GAAG,CAAC;gBACX,aAAa,GAAG,eAAe;gBAC/B,aAAa,GAAG,eAAe;gBAE/B,IAAI,UAAU,EAAE;oBACZ,QAAQ,GAAG,EAAE;oBACb;;AAEJ,gBAAA,QAAQ,EAAE;gBACV,OAAO,IAAI,UAAU;gBACrB;;YAGJ,QAAQ,GAAG,WAAW;YACtB,aAAa,IAAI,eAAe;;QAGpC,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;AACT,aAAA,CAAC;;AAGN,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;YAC3B,YAAY,CAAC,UAAU,CAAC;;AAG5B,QAAA,MAAM,GAAG,GAAG;AACR,YAAA,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO;AAC1D,YAAA,IAAI,EAAE;SACT;AAED,QAAA,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;AAChC,QAAA,OAAO,GAAG;;;AAIP,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;QAEX,MAAM,SAAS,GAAG,CAAG,EAAA,UAAU,IAAI,QAAQ,CAAA,GAAA,EAAM,mBAAmB,CAAA,CAAE;AAEtE,QAAA,IAAI,cAAc,KAAK,WAAW,EAAE;AAChC,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;YACzD,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;AACX,aAAA,CAAC;;AAGN,QAAA,MAAM,cAAc,GAAG,aAAa,KAAK,+BAA+B,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC;AAC3F,QAAA,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,SAAS;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC;;;AAI3C,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;;QAGX,IAAI,CAAC,IAAI,CAAC;YACN,CAAC;YACD,CAAC;YACD,KAAK;YACL,MAAM;YACN,MAAM;AACN,YAAA,IAAI,EAAE,UAAU;YAChB;AACH,SAAA,CAAC;QAEF,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;AACH,SAAA,CAAC;QAEF,OAAO;YACH,KAAK;YACL;SACH;;AAGE,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;AACnE,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;QAClC,IAAI,CAAC,GAAG,EAAE;YACN;;QAEJ,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;;AAEtC,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;AAChB,iBAAA,CAAC;;iBACC;AACH,gBAAA,UAAU,CAAC,cAAc,CAAC,MAAK;oBAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC;AAClD,iBAAC,CAAC;;YAEN;;;AAGJ,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACf,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC;AAC/C,YAAA,UAAU,CAAC,cAAc,CAAC,MAAK;gBAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC;AAClD,aAAC,CAAC;YACF;;AAEJ,QAAA,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC;AAE9B,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;;AAGzD,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;AAC9C,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YAClB;;QAGJ,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACpB,YAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACf,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC;AAC9C,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;;;AAInB,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;AAEX,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;AAC5C,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,SAAS,GAAG,GAAG,IAAI,EAAE;QAC3B,MAAM,UAAU,GAAG,KAAK;AACxB,QAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO;QAEnD,QAAQ,IAAI;AACR,YAAA,KAAK,iBAAiB,CAAC,MAAM,EAAE;AAC3B,gBAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;gBACvB,IAAI,CAAC,SAAS,EAAE;AACZ,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ;AAC7B,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;oBACpB,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;AACnE,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACpB,oBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;oBACf,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;AACrB,qBAAA,CAAC;;gBAEN,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;wBACxB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC;wBAC9D,GAAG,CAAC,IAAI,EAAE;qBACb;oBACD;AACH,iBAAA,CAAC;;;;AAKd;;;;;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;AACtC,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;AAChF,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;QAErF,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAE5D,QAAA,IAAI,MAAM,GAAG,CAAC,EAAE;AACZ,YAAA,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACvB,YAAA,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;AAG3B,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;AAElI,QAAA,IAAI,EAAE,KAAK,EAAE,EAAE;YACX,CAAC,IAAI,CAAC,CAAC;;AAEX,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;YACV,CAAC,GAAG,CAAC;;QAGT,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AAC9B,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;QAE/B,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;QACtE,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;QAEtE,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;AAC/C,SAAC;AACD,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;AAC5D,SAAC;AACD,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;AACzE,SAAC;AACD,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;AAChE,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC;QACtD,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;QAEzB,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;AACpB,YAAA,MAAM,GAAG,IAAI,CAAC,EAAE;;QAEpB,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;YACnB,MAAM,GAAG,CAAC;;QAEd,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;YACxB,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE;;QAEjC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;YACxB,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE;;AAEjC,QAAA,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;;AAGnD;;;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;;AAGnE;;;;;;;;;;;;;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;;QAGpB,SAAS,GAAG,CAAC,CAAS,EAAA;YAClB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;QAG9B,SAAS,GAAG,CAAC,CAAS,EAAA;AAClB,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;QAGpC,SAAS,GAAG,CAAC,CAAS,EAAA;AAClB,YAAA,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAGtC,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;AAC3E,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;QAE3E,OAAO;AACH,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE;SACN;;AAGL;;;;;;;;;;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;;QAGhB,SAAS,GAAG,CAAC,CAAS,EAAA;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;QAG1B,SAAS,GAAG,CAAC,CAAS,EAAA;YAClB,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;QAG5B,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QAC1D,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QAE1D,OAAO;AACH,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE;SACN;;AAGL;;;;;;;;;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;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5B,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;SACzB;QACD,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;SACzC;;AAGL;;;;;;;AAOG;AACK,IAAA,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,GAAW,EAAE,MAAgB,EAAA;AAClE,QAAA,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAElB,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;AACzD,YAAA,KAAK,GAAG;gBACJ,GAAG,GAAG,GAAG;AACT,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;AAC1G,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;oBAC1G,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBACjD,EAAE,GAAG,EAAE;;AAEX,gBAAA,OAAO,GAAG;AACd,YAAA,KAAK,GAAG;gBACJ,GAAG,GAAG,GAAG;AACT,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;AACxF,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;oBACxF,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBACjD,EAAE,GAAG,EAAE;;AAEX,gBAAA,OAAO,GAAG;AACd,YAAA,KAAK,GAAG;gBACJ,GAAG,GAAG,GAAG;AACT,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACvB,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;gBACxB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM;AAC9B,gBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK;gBACzB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE;oBAC7B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;;AAE/B,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;AACvF,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;wBACnF,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;wBACjD,EAAE,GAAG,EAAE;;;qBAER;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;wBACnF,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;wBACjD,EAAE,GAAG,EAAE;;;AAGf,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;gBACrF,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACjD,gBAAA,OAAO,GAAG;;AAElB,QAAA,OAAO,CAAC;;AAGZ;;;;AAIG;AACK,IAAA,aAAa,CAAC,IAAY,EAAA;QAC9B,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,OAAO,EAAE;;QAGb,IAAI,EAAE,GAAG,IAAI;AACb,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;AAE/G,QAAA,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC;AAC1C,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;;QAExD,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,GAAQ,EAAE;QAClB,MAAM,MAAM,GAAQ,EAAE;QACtB,IAAI,GAAG,GAAG,CAAC;QACX,IAAI,GAAG,GAAG,CAAC;QAEX,MAAM,EAAE,GAAG,qDAAqD;AAChE,QAAA,IAAI,KAA6B;AACjC,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;YAChB,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACrB,YAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAElB,YAAA,MAAM,CAAC,MAAM,GAAG,CAAC;YACjB,QAAQ,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;gBAC3B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;YAGzB,MAAM,CAAC,GAAQ,EAAE;AAEjB,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;oBACZ;;gBAEJ,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpC,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAChB,oBAAA,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;qBACX;AACH,oBAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;;;AAIjB,YAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjB,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBACb;;gBAGJ,IAAI,GAAG,GAAkB,IAAI;gBAC7B,IAAI,MAAM,GAAQ,EAAE;gBACpB,MAAM,MAAM,GAAG,GAAG;gBAClB,MAAM,MAAM,GAAG,GAAG;AAClB,gBAAA,IAAI,OAAO,EAAE,MAAM,EAAE,MAAM;AAC3B,gBAAA,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;gBAE/B,QAAQ,CAAC;AACL,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;AAChB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;wBAChB,GAAG,GAAG,GAAG;AACT,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,oBAAA,KAAK,GAAG;AACJ,wBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;AACpB,wBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;wBACpB,GAAG,IAAI,EAAE;wBACT,GAAG,IAAI,EAAE;wBACT,GAAG,GAAG,GAAG;AACT,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;AAC5B,oCAAA,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;oCAC5B;;;;AAIZ,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB,CAAC,GAAG,GAAG;wBACP;AACJ,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;wBACf,GAAG,GAAG,GAAG;AACT,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB,CAAC,GAAG,GAAG;wBACP;AAEJ,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;wBAChB,GAAG,GAAG,GAAG;AACT,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;wBACf,GAAG,GAAG,GAAG;AACT,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;wBAChB,GAAG,GAAG,GAAG;AACT,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,oBAAA,KAAK,GAAG;AACJ,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;wBACf,GAAG,GAAG,GAAG;AACT,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,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;AACvD,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,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;AAC/E,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;AAChB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;wBAChB,GAAG,GAAG,GAAG;AACT,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,oBAAA,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG;wBACZ,MAAM,GAAG,GAAG;wBACZ,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,wBAAA,IAAI,OAAO,CAAC,OAAO,KAAK,GAAG,EAAE;AACzB,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxC,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;AAE5C,wBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AACjD,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;wBACf,GAAG,GAAG,GAAG;AACT,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,oBAAA,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG;wBACZ,MAAM,GAAG,GAAG;wBACZ,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,wBAAA,IAAI,OAAO,CAAC,OAAO,KAAK,GAAG,EAAE;AACzB,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxC,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;wBAE5C,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAC7D,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;AAChB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;wBAChB,GAAG,GAAG,GAAG;AACT,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,oBAAA,KAAK,GAAG;AACJ,wBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AACjC,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,oBAAA,KAAK,GAAG;AACJ,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AAC7C,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;AAChB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;wBAChB,GAAG,GAAG,GAAG;AACT,wBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;wBACrB;AACJ,oBAAA,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG;wBACZ,MAAM,GAAG,GAAG;wBACZ,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,wBAAA,IAAI,OAAO,CAAC,OAAO,KAAK,GAAG,EAAE;AACzB,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxC,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;AAE5C,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;wBACf,GAAG,GAAG,GAAG;wBACT,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;wBACrC;AACJ,oBAAA,KAAK,GAAG;wBACJ,MAAM,GAAG,GAAG;wBACZ,MAAM,GAAG,GAAG;wBACZ,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,wBAAA,IAAI,OAAO,CAAC,OAAO,KAAK,GAAG,EAAE;AACzB,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxC,4BAAA,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;AAE5C,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;AAChB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;wBAChB,GAAG,GAAG,GAAG;wBACT,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;wBACrC;AACJ,oBAAA,KAAK,GAAG;AACJ,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;AACd,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;AACd,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;AACd,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;wBACd,EAAE,GAAG,GAAG;wBACR,EAAE,GAAG,GAAG;AACR,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;wBACf,GAAG,GAAG,GAAG;wBACT,MAAM,GAAG,IAAI,CAAC,uCAAuC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;wBAC5F;AACJ,oBAAA,KAAK,GAAG;AACJ,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;AACd,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;AACd,wBAAA,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE;AACf,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;AACd,wBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;wBACd,EAAE,GAAG,GAAG;wBACR,EAAE,GAAG,GAAG;AACR,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;AAChB,wBAAA,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE;wBAChB,GAAG,GAAG,GAAG;wBACT,MAAM,GAAG,IAAI,CAAC,uCAAuC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;wBAC5F;;gBAGR,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;AACN,qBAAA;AACD,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM;AAC/D,iBAAA,CAAC;;YAGN,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;AACf,iBAAA,CAAC;;;AAIV,QAAA,OAAO,EAAE;;AAGb;;;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;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAE1C,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI;QACzB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;QAC9B,IAAI,QAAQ,GAAG,KAAK;AACpB,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;YAC9B,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM;YAC7B,QAAQ,CAAC;AACL,gBAAA,KAAK,GAAG;AACJ,oBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B;AACJ,gBAAA,KAAK,GAAG;AACJ,oBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B;AACJ,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;oBAC1D;AACJ,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;oBACjD;AACJ,gBAAA,KAAK,GAAG;AACJ,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,oBAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,oBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB,oBAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,oBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,oBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC3B,oBAAA,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;AACpC,oBAAA,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;oBAEpC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;AAC1B,oBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;oBACpB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;oBAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,EAAS;AAC7D,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;oBACtC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;oBACrB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oBAE5B;AACJ,gBAAA,KAAK,GAAG;oBACJ,QAAQ,GAAG,IAAI;AACf,oBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;oBACpB;;;QAIZ,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;;aACd;AACH,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;;AAEnB,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;;AAEzB;AAEM,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE;;MCjlCrB,eAAe,CAAA;AAX5B,IAAA,WAAA,GAAA;QAcI,IAAM,CAAA,MAAA,GAAG,KAAK,EAAsC;AAEpD,QAAA,IAAA,CAAA,UAAU,GAAG,qBAAqB,GAAG,iCAAiC;AAEtE,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAA4B,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC;AAEzE,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAgC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC;AAE7F,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAU,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC;AAEjE,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAyB,MAAK;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM;YACpC,IAAI,MAAM,EAAE;AACR,gBAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;AACrF,gBAAA,IAAI,UAAU,GAAkB,cAAc,CAAC,IAAI;AACnD,gBAAA,IAAI,UAAU,IAAI,IAAI,EAAE;oBACpB;;gBAGJ,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC9C,gBAAA,MAAM,UAAU,GAAG,KAAK,EAAE,UAAU;AACpC,gBAAA,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB;gBAC5D,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5C,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,QAAQ,EAAE,YAAY;oBACtB;AACH,iBAAA,CAAC;gBAEF,OAAO;oBACH,CAAC;oBACD,CAAC;oBACD,IAAI;AACJ,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,SAAS;oBAChB,SAAS,EAAE,MAAM,CAAC,OAAO;oBACzB,IAAI,EAAE,MAAM,CAAC,OAAO;oBACpB,MAAM,EAAE,SAAS,GAAG,CAAC;AACrB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,cAAc,EAAE,WAAW;oBAC3B;iBACH;;YAEL;AACJ,SAAC,CAAC;AAmBL;AAlEU,IAAA,SAAA,IAAA,CAAA,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAiDzC,IAAA,SAAS,CAAC,CAA4B,EAAA;AAClC,QAAA,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI;AAC3B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC;;AAG3E,IAAA,aAAa,CAAC,CAA4B,EAAA;AACtC,QAAA,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI;QAC3B,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAG;QAC9C,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;QACxC,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;AAClD,QAAA,MAAM,GAAG,GAAG,SAAS,EAAE,kBAAkB,EAAE;QAC3C,IAAI,GAAG,IAAI,IAAI;YAAE;AACjB,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO;AAC3B,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG;QACpB,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAQ,EAAE,UAAU,CAAC;QACpH,gBAAgB,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC;;+GAjEtF,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EATd,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,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;AAIT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAE+B,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAGlC,eAAe,EAAA,UAAA,EAAA,CAAA;kBAX3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE;;;;AAIT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC;oBAC5C,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;;;;;;ACjBM,MAAM,YAAY,GAAuE,EAAE;AAElG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,KAAI;AACpD,IAAA,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,aAAa;AACzD,CAAC,CAAC;;ACLI,SAAU,YAAY,CAAC,OAAgB,EAAA;IACzC,MAAM,aAAa,GAAG,OAAO,CAAC,OAAQ,CAAC,aAAa,EAAE;AACtD,IAAA,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,aAAa,CAAC,cAAe,CAAC,IAAI,EAAE;AACxF,IAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;QACvB;;IAEJ,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,QAAS,CAAC;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,OAAQ,CAAC;AAE3C,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;QAC5C;;AAEJ,IAAA,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5E,IAAA,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE;IAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1C;;IAGJ,MAAM,yBAAyB,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;IAC3D,IAAI,CAAC,yBAAyB,EAAE;QAC5B;;IAEJ,OAAO;QACH,KAAK;QACL,QAAQ;QACR,OAAO;QACP;KACH;AACL;;MCnBa,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAMI,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAc;AAE1C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAc;AAE3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAc;AAE3C,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,OAAO,EAAc;AAEjD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,OAAO,EAAc;AAIzC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAwO1C;IAtOG,UAAU,CAAC,OAAgB,EAAE,gBAAiF,EAAA;AAC1G,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;;AAG5C,IAAA,cAAc,CAAC,OAAoB,EAAA;QAC/B,SAAS,CAAa,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACvD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC,SAAC,CAAC;QAEN,SAAS,CAAa,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACxD,aAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1D,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,SAAC,CAAC;QAEN,SAAS,CAAa,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACzD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1C,SAAC,CAAC;QAEN,SAAS,CAAa,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACxD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,SAAC,CAAC;QAEN,SAAS,CAAa,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACzD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAmB,CAAC;AACxD,SAAC,CAAC;;AAGF,IAAA,kBAAkB,CAAC,IAAsB,EAAA;AAC7C,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC9E,QAAA,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,EAAE;YAC/C,OAAO;gBACH,SAAS,EAAE,iBAAiB,CAAC,MAAM;AACnC,gBAAA,mBAAmB,EAAE;aACxB;;QAEL,OAAO;AACH,YAAA,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC;AACrC,YAAA,mBAAmB,EAAE;SACxB;;AAGL,IAAA,QAAQ,CAAC,OAAoB,EAAA;AACzB,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE;QAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAE;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAE;QAClD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;QACrF,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;AACpB,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;AACjB,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;AACjB,SAAA,CAAC;AACF,QAAA,OAAO,GAAG;;IAGd,iBAAiB,CAAC,OAAgB,EAAE,OAA+B,EAAA;AAC/D,QAAA,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO;AACzE,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,OAAQ;AACxC,QAAA,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,UAAU;AAC7C,QAAA,MAAM,IAAI,GAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC;AACrD,QAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAE;QACtE,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC;QACvD,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;QACjD,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC;QAC1D,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,yBAAyB,CAAC;YAC3E,WAAW;YACX,WAAW;YACX;AACH,SAAA,CAAC;AACF,QAAA,MAAM,UAAU,GAAG,SAAU,CAAC,qBAAqB,EAAE;QACrD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC;AACnE,QAAA,MAAM,UAAU,GAAG,cAAc,GAAG,CAAC,GAAG,WAAW,EAAE,CAAC,UAAU;AAChE,QAAA,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC,SAAS;AACzC,QAAA,MAAM,cAAc,GAAG;YACnB,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;AACrD,YAAA,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;AACrC,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,MAAM,EAAE;SACX;QACD,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,kBAAkB,EAAE;QAC/C,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,kBAAkB,EAAE;QAC/C,IAAI,KAAK,GAAG,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC;QAChD,IAAI,MAAM,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC;;QAElD,IAAI,WAAW,EAAE;AACb,YAAA,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,uBAAuB,EAAE;AAChD,YAAA,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,uBAAuB,EAAE;AAChD,YAAA,KAAK,GAAG,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC;AACjD,YAAA,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,MAAM,CAAC;;QAEvD,OAAO;AACH,YAAA,GAAG,cAAc;AACjB,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE;SACX;;IAGL,cAAc,CAAC,OAAgB,EAAE,OAA+B,EAAA;AAC5D,QAAA,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO;QACzE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;QAC1G,MAAM,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC;QACrE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE;YACxD,gBAAgB,EAAE,mBAAmB,GAAG,SAAS,GAAG,OAAO,EAAE,gBAAgB;AAC7E,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;gBAClB,UAAU;AACV,gBAAA,OAAO,EAAE;AACZ,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;AACjB,SAAA,CAAC;AAEF,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,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC;AAC1C,gBAAA,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,QAAQ,EAAE;oBAClF;;gBAEJ,KAAK,CAAC,cAAc,EAAE;AACtB,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;AAC/D,wBAAA,MAAM,gBAAgB,GAAI,IAAI,CAAC;AAC1B,6BAAA,aAAa;6BACb,SAAS,EAAE,CAAC,gBAAqD;AACtE,wBAAA,gBAAgB,CAAC,SAAS,CAAC,cAAc,CAAC;wBAC1C,gBAAgB,CAAC,KAAK,EAAE;;AAE/B,iBAAA,CAAC;AACN,aAAC,CAAC;YACF,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAK;gBACnD,UAAU,CAAC,WAAW,EAAE;AACxB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AACpC,aAAC,CAAC;AACD,YAAA,IAAI,CAAC,oBAAoB,CAAC,iBAAiD,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC9G,gBAAA,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACnC,aAAC,CAAC;;QAEN,OAAO,IAAI,CAAC,oBAAoB;;IAGpC,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACjC,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;;;IAIxC,kBAAkB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,QAAQ;YACtE,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,OAAO;AAEpE,YAAA,IAAI,QAAQ,IAAI,OAAO,EAAE;gBACrB,OAAO;oBACH,QAAQ;oBACR;iBACH;;AAEL,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,IAAI;;IAGf,eAAe,CAAC,OAAgB,EAAE,OAAkC,EAAA;AAChE,QAAA,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,OAAO;QAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACjD,YAAA,MAAM,EAAE,MAAqB;AAC7B,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,cAAc,EAAE,IAAI;YACpB,gBAAgB;AAChB,YAAA,YAAY,EAAE;gBACV,OAAO;gBACP,SAAS;gBACT,UAAU;gBACV;AACH;AACJ,SAAA,CAAC;AACF,QAAA,OAAO,GAAG;;+GAzPL,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAvB,uBAAuB,EAAA,CAAA,CAAA;;4FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC;;;MCiCY,eAAe,CAAA;AAN5B,IAAA,WAAA,GAAA;AAOI,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAkB;AAE5C,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAiB;AAE1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAA2B,EAAE,CAAC;QAExD,IAAa,CAAA,aAAA,GAAG,KAAK,EAAiB;QAEtC,IAAU,CAAA,UAAA,GAAG,KAAK,EAAW;QAE7B,IAAS,CAAA,SAAA,GAAG,KAAK,EAAc;AAE/B,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAqB;QAElD,IAAmB,CAAA,mBAAA,GAAG,KAAK,EAAsC;QAEjE,IAAU,CAAA,UAAA,GAAG,KAAK,EAAU;QAE5B,IAAgB,CAAA,gBAAA,GAAG,gBAAgB;QAEnC,IAAwB,CAAA,wBAAA,GAAG,wBAAwB;AAInD,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;AACpF,SAAC,CAAC;QAEF,IAAkB,CAAA,kBAAA,GAAG,MAAM,EAAW;QAEtC,IAAW,CAAA,WAAA,GAAG,MAAM,EAAoB;QAExC,IAAU,CAAA,UAAA,GAAG,MAAM,EAAmB;QAEtC,IAAW,CAAA,WAAA,GAAG,MAAM,EAAoB;QAExC,IAAkB,CAAA,kBAAA,GAAG,MAAM,EAA2B;QAEtD,IAAU,CAAA,UAAA,GAAG,MAAM,EAAgB;AAEnC,QAAA,IAAA,CAAA,UAAU,GAAmC,QAAQ,CAAC,MAAK;YACvD,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,UAAU,IAAI,EAAE;AACjD,SAAC,CAAC;AAIF,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;;YAEpD,OAAO;AACH,gBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE;AACzB,gBAAA,MAAM,EAAE,IAAI,CAAC,QAAQ;aACxB;AACL,SAAC,CAAC;AAEQ,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACzD,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACzD,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;AA2G9E;IAzGG,QAAQ,GAAA;QACJ,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,WAAW,EAAE;;IAGtB,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC1E,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC,MAAM,KAAI;YACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACvC,SAAC,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;IAG9C,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,cAAc,CAAC;QAC3F,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QACzD,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAC1E,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACpE,+BAA+B,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC;;IAGnF,SAAS,GAAA;AACL,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE;AAChC,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM;AAClC,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;AACjE,SAAA,CAAC;;AAGN,IAAA,YAAY,CAAC,QAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,QAAQ,CAAC;;AAG3D,IAAA,eAAe,CAAC,OAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,2BAA2B,CAAC,eAAe,CAAC,OAAO,CAAC;;IAG7D,QAAQ,CAAC,eAA6B,EAAE,QAAmC,EAAA;AACvE,QAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC;QACrE,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;AACH,SAAA,CAAC;QACF,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,qBAAqB,EAAE;YAC3D,UAAU,CAAC,iBAAyC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,YAAY,KAAI;gBACtF,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM;AACrC,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM;AAChC,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;AACH,iBAAA,CAAC;AACN,aAAC,CAAC;;;IAIH,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;AACxB,aAAC,CAAC;YACF,IAAI,CAAC,uBAAuB,CAAC;AACxB,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACvG,iBAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACjB,gBAAA,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,KAAK,CAAC;AACxD,aAAC,CAAC;YAEN,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;AAC/B,aAAC,CAAC;YACF,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;AACpC,aAAC,CAAC;AACN,SAAC,CAAC;;AAGE,IAAA,QAAQ,CAAC,KAAiB,EAAA;QAC9B,MAAM,OAAO,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,YAAY,CAAgB;QAClF,MAAM,IAAI,GAAG,OAAO,IAAK,OAAO,CAAC,YAAY,CAAC,MAAM,CAAuB;QAC3E,IAAI,IAAI,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC;;;AAI9C,IAAA,eAAe,CAAC,KAAiB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE;;QAE9B,MAAM,OAAO,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,YAAY,CAAgB;QAClF,MAAM,IAAI,GAAG,OAAO,IAAK,OAAO,CAAC,YAAY,CAAC,MAAM,CAAuB;QAC3E,IAAI,IAAI,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC;;;AAIlE,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;AAC/E,YAAA,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,IAAK,CAAC,CAAC,MAAsB,CAAC,OAAO,CAAC,mBAAmB,CAAC;AACxF,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;AAC5B,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;;;;+GArK5B,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,mlDAJd,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAIH,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;AAC5C,iBAAA;;;ACqBK,MAAO,cAAe,SAAQ,eAAe,CAAA;IACtC,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,eAAe,EAAE;;AAG1B,IAAA,aAAa,CAAC,CAAQ,EAAE,KAAmB,EAAE,WAAwB,EAAA;QACjE,MAAM,OAAO,GAAI,CAAC,CAAC,MAAuB,CAAC,OAAO,CAAC,oBAAoB,CAAC;QACxE,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;AAClB,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU;AAC9B,SAAA,CAAC;;+GAbG,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAd,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,EChE9F,6/XA2NA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzLQ,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,EAAAJ,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;;4FAIZ,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;qBACV,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,mBAAmB;wBACnB,uBAAuB;wBACvB,eAAe;wBACf,2BAA2B;wBAC3B,gBAAgB;wBAChB,SAAS;wBACT,oBAAoB;wBACpB,wBAAwB;wBACxB,iBAAiB;wBACjB,uBAAuB;wBACvB,eAAe;wBACf,gBAAgB;wBAChB,kBAAkB;wBAClB,uBAAuB;wBACvB,qBAAqB;wBACrB,QAAQ;wBACR,iBAAiB;wBACjB;AACH,qBAAA,EAAA,SAAA,EACU,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAA,QAAA,EAAA,6/XAAA,EAAA;;;MEjCjF,OAAO,CAAA;AA+ChB,IAAA,WAAA,GAAA;QA9CA,IAAM,CAAA,MAAA,GAAG,KAAK,EAAmB;AAEvB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAE3D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAE3D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B;AAE1D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B;AAE5D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B;AAE5D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAE3D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAA6B;AAEzD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAA6B;AAEvD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA+B;AAE/D,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAA6B;AAEvD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B;AAE1D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA6B;AAE5D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAE3D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B;AAE1D,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAA6B;AAErD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAA6B;AAExD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B;AAE3D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA6B;AAE1D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAA6B;QAI3D,IAAU,CAAA,UAAA,GAAuB,EAAE;AAEnC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;QAGpD,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACf,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBACd,IAAI,CAAC,SAAS,EAAE;;gBAEpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAG,CAAC;;AAEvC,SAAC,CAAC;;IAGN,QAAQ,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE;;IAGb,OAAO,GAAA;QACV,OAAO,IAAI,CAAC,MAAM;;IAGd,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC;YACpB,GAAG,IAAI,CAAC,MAAM,EAAE;YAChB,SAAS,EAAE,IAAI,CAAC;AACnB,SAAA,CAAC;;AAGE,IAAA,UAAU,CAAC,MAAuB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG;AACV,YAAA,GAAG,MAAM;YACT,GAAG,cAAc,CAAC,IAAI;SACzB;QACD,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;IAG3B,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;;+GAnFjB,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;AAChB;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;;4FAS5B,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;AACvB;AACJ,qBAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;wDAIa,WAAW,EAAA,CAAA;sBAApB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAES,SAAS,EAAA,CAAA;sBAAlB;gBAES,OAAO,EAAA,CAAA;sBAAhB;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBAES,OAAO,EAAA,CAAA;sBAAhB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAES,KAAK,EAAA,CAAA;sBAAd;gBAES,QAAQ,EAAA,CAAA;sBAAjB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAES,SAAS,EAAA,CAAA;sBAAlB;;;AC5CC,MAAgB,WAAY,SAAQ,SAAS,CAAA;AA+ClD;;ACrDM,MAAM,YAAY,GAAG;IACxB,GAAG;IACH,KAAK;IACL,MAAM;IACN,OAAO;WACPI,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;CACH;;MCtBY,WAAW,CAAA;AAZxB,IAAA,WAAA,GAAA;AAaI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAqB;AAE5C,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAuB,MAAK;AAC9C,YAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACzC,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE;AAC9B,SAAC,CAAC;AAEF,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;YACjB,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;aACH;AACL,SAAC,CAAC;AAEF,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;YAEjB,IAAI,QAAQ,GAAG,IAAI;YAEnB,QAAQ,IAAI;gBACR,KAAK,gBAAgB,CAAC,OAAO;oBACzB,QAAQ,GAAG,KAAK;oBAChB;gBACJ,KAAK,gBAAgB,CAAC,SAAS;oBAC3B,QAAQ,GAAG,SAAS;oBACpB;;YAGR,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;aACd;AACL,SAAC,CAAC;AACL;+GA9EY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;;;;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;;4FAGrB,WAAW,EAAA,UAAA,EAAA,CAAA;kBAZvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE;;;;;AAKT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC;oBAC/B,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;MCkBY,eAAe,CAAA;AAlB5B,IAAA,WAAA,GAAA;AAmBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAyB;QAEhD,IAAQ,CAAA,QAAA,GAAG,+BAA+B;AAE1C,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;AAC9F,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC;YAChG,OAAO,eAAe,GAAG,gBAAgB;AAC7C,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAuB,MAAK;AAC7C,YAAA,MAAM,EACF,aAAa,EAAE,EAAE,UAAU,EAAE,EAC7B,QAAQ,EACX,GAAG,IAAI,CAAC,MAAM,EAAE;AACjB,YAAA,MAAM,IAAI,GAAG,UAAU,KAAK,yBAAyB,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK;YACpF,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;oBAChE,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG;iBACtC,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;sBACpD,IAAI,CAAC;AACP,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;aACH;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAoB,MAAK;YAC7C,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AAClC,YAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,GAAG,yBAAyB,IAAI,CAAC;YACtF,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;AAChB,gBAAA,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC;aACtC;AACL,SAAC,CAAC;AACL;+GAjDY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAhBd,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;;;;;;;;;;;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;;4FAGlC,eAAe,EAAA,UAAA,EAAA,CAAA;kBAlB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC;oBAC5C,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;AC/BD;;;;AAIG;AACG,MAAO,MAAO,SAAQ,MAAM,CAAA;AAAlC,IAAA,WAAA,GAAA;;;QAEc,IAAC,CAAA,CAAA,GAAG,CAAC;QACL,IAAC,CAAA,CAAA,GAAG,CAAC;;QAEL,IAAS,CAAA,SAAA,GAAG,CAAC;;QAEb,IAAW,CAAA,WAAA,GAAG,CAAC;;QAEf,IAAQ,CAAA,QAAA,GAAG,CAAC;;QAEZ,IAAW,CAAA,WAAA,GAAG,CAAC;;QAEf,IAAW,CAAA,WAAA,GAAG,CAAC;QAEf,IAAc,CAAA,cAAA,GAAG,CAAC;;;AAG5B,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;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;;;AAIxC,IAAA,IAAc,OAAO,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,CAAC;;;AAIjC,IAAA,IAAc,MAAM,GAAA;QAChB,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC;;AAG1C,IAAA,mBAAmB,CAAC,EAAE,UAAU,EAAE,YAAY,EAAoD,EAAA;AACxG,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAChC,QAAA,MAAM,IAAI,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;QACrH,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,eAAe;QAClE,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;AACnC,kBAAE;AACF,kBAAE,IAAI,CAAC,cAAc,GAAG,cAAc;AAC9C,YAAA,MAAM,EAAE,SAAS;YACjB;AACH,SAAA,CAAC;;AAET;;ACnDK,MAAO,YAAa,SAAQ,MAAM,CAAA;AAC3B,IAAA,mBAAmB,CAAC,EAAE,UAAU,EAAE,YAAY,EAAoD,EAAA;QACvG,KAAK,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AACvD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;QAChC,MAAM,YAAY,GAAG,+BAA+B;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,GAAG,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;QACvG,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;AACvB,SAAA,CAAC;;AAGE,IAAA,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAA6C,EAAA;AAC/E,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAChC,QAAA,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;QAEtE,IAAI,CAAC,IAAI,CAAC;YACN,CAAC;YACD,CAAC,EAAE,CAAC,GAAG,eAAe;AACtB,YAAA,KAAK,EAAE,KAAe;AACtB,YAAA,MAAM,EAAE,SAAS;YACjB;AACH,SAAA,CAAC;QACF,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;AACvB,SAAA,CAAC;;IAGE,eAAe,CAAC,EAAE,UAAU,EAAmC,EAAA;QACnE,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACnB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAChC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW;QACpC,MAAM,YAAY,GAAG,eAAe;AACpC,QAAA,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;QAEtE,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;AACH,SAAA,CAAC;QACF,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;AACvB,SAAA,CAAC;QAEF,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;AACrB,SAAA,CAAC;;AAGE,IAAA,cAAc,CAAC,EAAE,UAAU,EAAE,YAAY,EAAoD,EAAA;QACjG,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,UAAU,CAAC;gBACZ,KAAK;gBACL;AACH,aAAA,CAAC;;QAEN,IAAI,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;;IAGlD,gBAAgB,CAAC,EAAE,UAAU,EAAmC,EAAA;AACpE,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;YAAE;QACjC,IAAI,CAAC,UAAU,CAAC;YACZ,KAAK,EAAE,IAAI,CAAC,WAAW;YACvB;AACH,SAAA,CAAC;;AAGN,IAAA,MAAM,CAAC,EAAE,UAAU,EAAE,YAAY,EAAoD,EAAA;QACjF,IAAI,CAAC,eAAe,CAAC;YACjB;AACH,SAAA,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC;YAClB;AACH,SAAA,CAAC;QACF,IAAI,CAAC,cAAc,CAAC;YAChB,UAAU;YACV;AACH,SAAA,CAAC;;AAET;AAEM,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE;;AChH9C;AACO,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,EAAE,GAAG,CAAA;;;;;;;;;;OAUX;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,WAAW,GAAG,CAAA;;;;;;;;;;OAUpB;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,IAAI,GAAG,CAAA;;;;;;;;;;OAUb;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,IAAI,GAAG,CAAA;;;;;;;;;;OAUb;AAEA,MAAM,EAAE,GAAG,CAAA;;;;;;;;;;OAUX;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,IAAI,GAAG,CAAA;;;;;;;;;;OAUb;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;OASZ;AAEA,MAAM,OAAO,GAAG,CAAA;;;;;;;;;;OAUhB;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;OAWZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,KAAK,GAAG,CAAA;;;;;;;;;;OAUd;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;OAUZ;AAEA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;OASZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChXD,SAAU,uBAAuB,CAAC,SAAiB,EAAA;AACrD,IAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC;IACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC;IACnE,MAAM,aAAa,GAOb,EAAE;AAER,IAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACzB,QAAA,IAAI,CAAC;AACL,QAAA,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE;AAC5B,YAAA,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;;AAC1B,aAAA,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE;YACxE,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE;AACnD,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACxD,YAAA,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC;AAC7C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3C,gBAAA,CAAC,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;;AAEvD,YAAA,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE;gBAC/B,CAAC,IAAI,IAAI;;;QAIjB,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,OAAO;QACpD,MAAM,MAAM,GAAG,MAAM;QACrB,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC;AAC7D,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;QACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,SAAS;QAC/D,IAAI,CAAC,EAAE;YACH,aAAa,CAAC,IAAI,CAAC;gBACf,CAAC;gBACD,IAAI;gBACJ,MAAM;gBACN,WAAW;gBACX,OAAO;AACP,gBAAA,QAAQ,EAAE;AACb,aAAA,CAAC;;AAEV,KAAC,CAAC;AAEF,IAAA,OAAO,aAAa;AACxB;AACO,MAAM,SAAS,GAAG,CAAC,MAAK;IAC3B,MAAM,MAAM,GASR,EAAE;IACN,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC3C,QAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9D,KAAC,CAAC;AACF,IAAA,OAAO,MAAM;AACjB,CAAC,GAAG;;AC9DE,SAAU,oBAAoB,CAAC,GAAW,EAAA;IAC5C,IAAI,MAAM,GAAG,aAAa;IAC1B,QAAQ,GAAG;AACP,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;YACP,MAAM,GAAG,KAAK;YACd;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;YACP,MAAM,GAAG,KAAK;YACd;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;YACP,MAAM,GAAG,KAAK;YACd;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,MAAM;YACP,MAAM,GAAG,KAAK;YACd;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;YACN,MAAM,GAAG,KAAK;YACd;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,KAAK;YACN,MAAM,GAAG,OAAO;YAChB;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;YACN,MAAM,GAAG,KAAK;YACd;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,IAAI;AACT,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,IAAI;AACT,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,YAAY;AACjB,QAAA,KAAK,UAAU;AACf,QAAA,KAAK,UAAU;AACf,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,UAAU;AACf,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,OAAO;AACZ,QAAA,KAAK,WAAW;YACZ,MAAM,GAAG,GAAG;YACZ;AACJ,QAAA;YACI,MAAM,GAAG,aAAa;YACtB;;AAER,IAAA,OAAO,MAAM;AACjB;AAEM,SAAU,yBAAyB,CAAC,GAAW,EAAA;IACjD,IAAI,MAAM,GAAG,aAAa;IAC1B,QAAQ,GAAG;AACP,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACP,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACP,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACP,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,MAAM;AACP,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,KAAe;YACxB;AACJ,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACV,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGA,GAAa;YACtB;AACJ,QAAA,KAAK,IAAI;AACL,YAAA,MAAM,GAAGC,EAAY;YACrB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,MAAM;AACP,YAAA,MAAM,GAAGC,IAAc;YACvB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,MAAM;AACP,YAAA,MAAM,GAAGC,IAAc;YACvB;AACJ,QAAA,KAAK,IAAI;AACL,YAAA,MAAM,GAAGC,EAAY;YACrB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA,KAAK,KAAK;AACN,YAAA,MAAM,GAAGC,GAAa;YACtB;AACJ,QAAA;AACI,YAAA,MAAM,GAAGC,WAAqB;YAC9B;;AAER,IAAA,OAAO,MAAM;AACjB;AAEM,SAAU,kBAAkB,CAAC,GAAW,EAAA;AAC1C,IAAA,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,GAAG,CAAC;AACnD,IAAA,OAAO,SAAS,CAAC,iBAAiB,CAAC;AACvC;;ACxJA;;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;AACjC,QAAA,MAAM,EAAE,UAAU,GAAG,mBAAmB,EAAE,GAAG,UAAU;QAEvD,QAAQ,SAAS;YACb,KAAK,gBAAgB,CAAC,IAAI;YAC1B,KAAK,gBAAgB,CAAC,IAAI;YAC1B,KAAK,gBAAgB,CAAC,SAAS;YAC/B,KAAK,gBAAgB,CAAC,SAAS;YAC/B,KAAK,gBAAgB,CAAC,IAAI;YAC1B,KAAK,gBAAgB,CAAC,QAAQ;YAC9B,KAAK,gBAAgB,CAAC,MAAM;YAC5B,KAAK,gBAAgB,CAAC,SAAS;YAC/B,KAAK,gBAAgB,CAAC,SAAS;AAC3B,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AACrE,YAAA;AACI,gBAAA,OAAO,IAAI;;;;IAKhB,UAAU,CAAC,MAAqB,EAAE,GAA0C,EAAA;AAC/E,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM;AACxB,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;QAE5B,QAAQ,SAAS;YACb,KAAK,gBAAgB,CAAC,IAAI;YAC1B,KAAK,gBAAgB,CAAC,MAAM;YAC5B,KAAK,gBAAgB,CAAC,IAAI;gBACtB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC;YAC3C,KAAK,gBAAgB,CAAC,MAAM;gBACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC;YAC7C,KAAK,gBAAgB,CAAC,IAAI;YAC1B,KAAK,gBAAgB,CAAC,SAAS;YAC/B,KAAK,gBAAgB,CAAC,SAAS;gBAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC;YAC3C,KAAK,gBAAgB,CAAC,IAAI;gBACtB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC;YAC3C,KAAK,gBAAgB,CAAC,QAAQ;gBAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC;YAC/C,KAAK,gBAAgB,CAAC,MAAM;YAC5B,KAAK,gBAAgB,CAAC,SAAS;YAC/B,KAAK,gBAAgB,CAAC,SAAS;gBAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC;YAC7C,KAAK,gBAAgB,CAAC,UAAU;gBAC5B,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC;AACjD,YAAA;AACI,gBAAA,OAAO,IAAI;;;IAIf,cAAc,CAAC,MAAqB,EAAE,GAAS,EAAA;AACnD,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM;AAClE,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;AAC5B,QAAA,IAAI,UAAU,GAAkB,SAAS,KAAK,gBAAgB,CAAC,IAAI,GAAG,cAAc,EAAE,IAAI,GAAG,cAAc;AAC3G,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;YACpB;;AAEJ,QAAA,MAAM,YAAY,GAAG,CAAC,WAAW;AACjC,QAAA,MAAM,WAAW,GAAG,SAAS,KAAK,gBAAgB,CAAC,IAAI;AACvD,QAAA,MAAM,aAAa,GAAG,SAAS,KAAK,gBAAgB,CAAC,MAAM;AAE3D,QAAA,IAAI,WAAW,IAAI,YAAY,EAAE;YAC7B,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;;QAGlD,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;AACjD,QAAA,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,uBAAuB;AAC7D,QAAA,MAAM,UAAU,GAAG,KAAK,EAAE,UAAU;AACpC,QAAA,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB;AAC5D,QAAA,MAAM,OAAO,GAAG,SAAS,KAAK,wBAAwB,GAAG,CAAC,GAAG,WAAW,GAAG,qBAAqB,GAAG,CAAC,GAAG,qBAAqB;AAC5H,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,yBAAyB,GAAG,CAAC;QACjD,MAAM,cAAc,GAAG,uBAAuB;QAE9C,IAAI,aAAa,EAAE;AACf,YAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,gBAAA,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,WAAW,IAAI,YAAY;gBACrC;AACH,aAAA,CAAC;YACF,IAAI,GAAG,EAAE;gBACL,IAAI,QAAQ,GAAG,IAAI;gBACnB,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;AAClB,iBAAA,CAAC;;;aAEH;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;AACb,aAAA,CAAC;;;IAIF,gBAAgB,CAAC,MAAqB,EAAE,GAAS,EAAA;AACrD,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM;AACxB,QAAA,IAAK,KAA4B,CAAC,QAAQ,EAAE,WAAW,EAAE;AACrD,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC;;aACpC;AACH,YAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC;;;IAIxC,qBAAqB,CAAC,KAAmB,EAAE,cAAwB,EAAA;AACvE,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAE,KAA4B,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC;QAClG,OAAO,CAAC,cAAc,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,QAAgB,KAAK,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;;IAGnF,qBAAqB,CAAC,MAAqB,EAAE,GAAS,EAAA;QAC1D,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM;AAC3C,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;AAC7E,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YACxB;;AAGJ,QAAA,IAAI,QAAQ,GAAG,CAAC,GAAG,qBAAqB;AACxC,QAAA,MAAM,iBAAiB,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB;AACjE,QAAA,MAAM,WAAW,GAAI,KAA4B,CAAC,QAAQ,CAAC,YAAY;QACvE,MAAM,SAAS,GAAG,CAAG,EAAA,mBAAmB,IAAI,8BAA8B,CAAA,GAAA,EAAM,mBAAmB,CAAA,CAAE;AACrG,QAAA,MAAM,YAAY,GAAG,WAAW,KAAK,wBAAwB,CAAC,GAAG,IAAI,WAAW,KAAK,wBAAwB,CAAC,KAAK;QAEnH,IAAI,UAAU,GAAG,CAAC;AAClB,QAAA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAE;QACjC,IAAI,aAAa,GAAG,CAAC;QACrB,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;AACtG,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,IAAc,EAAE,SAAS,CAAC;AACpE,YAAA,UAAU,IAAI,SAAS,GAAG,CAAC,GAAG,qBAAqB;YACnD,IAAI,KAAK,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,UAAU,IAAI,gCAAgC;;YAElD,IAAI,YAAY,EAAE;AACd,gBAAA,UAAU,IAAI,8BAA8B,GAAG,CAAC,GAAG,gCAAgC;;YAEvF,IAAI,UAAU,GAAG,iBAAiB,IAAI,UAAU,KAAK,iBAAiB,EAAE;gBACpE,aAAa,GAAG,KAAK;;AAEzB,YAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAC1E,SAAC,CAAC;AAEF,QAAA,MAAM,SAAS,GAAG,uBAAuB,GAAG,qBAAqB,GAAG,CAAC;AACrE,QAAA,MAAM,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,8BAA8B,GAAG,CAAC,GAAG,gCAAgC,GAAG,SAAS;AAE7H,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;AACpF,YAAA,MAAM,aAAa,GAAG,iBAAiB,GAAG,aAAa,GAAG,QAAQ;AAClE,YAAA,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,CAAC,GAAG,aAAa;;YAEjE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC,CAAC;AAE1D,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;AACzF,gBAAA,MAAM,GAAG,GAAG,iBAAiB,GAAG,gCAAgC,GAAG,WAAW;;AAE9E,gBAAA,MAAM,kBAAkB,GAAG,aAAa,GAAG,GAAG;gBAC9C,IAAI,kBAAkB,EAAE;oBACpB,MAAM,UAAU,GAAG,aAAa,KAAK,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;AACnG,oBAAA,aAAa,GAAG,GAAG,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,GAAG,aAAa,GAAG,CAAC;;qBAC5E;;AAEH,oBAAA,aAAa,GAAG,GAAG,GAAG,aAAa,GAAG,QAAQ,GAAG,aAAa,GAAG,CAAC,GAAG,aAAa;;;;AAK9F,QAAA,MAAM,UAAU,GAAG,CAAI,CAAA,EAAA,cAAc,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE;AACpE,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;;AAE9H,QAAA,IAAI,WAAW,GAAG,iBAAiB,GAAG,WAAW,IAAI,WAAW,GAAG,CAAC,GAAG,gCAAgC,GAAG,CAAC,CAAC;AAE5G,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;AACtC,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;aACV;AAED,YAAA,MAAM,UAAU,GAAG,CAAC,WAAqC,EAAE,KAAa,KAAI;gBACxE,MAAM,SAAS,GAAG;sBACZ,8BAA8B,GAAG,CAAC,GAAG,gCAAgC,GAAG,qBAAqB,GAAG;AAClG,sBAAE,qBAAqB,GAAG,CAAC;AAC/B,gBAAA,IAAI,WAAW,GAAG,QAAQ,EAAE;oBACxB;;AAEJ,gBAAA,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzD,gBAAA,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS;gBAC3C,IAAI,KAAK,KAAK,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBACrC,WAAW,IAAI,gCAAgC;;AAEnD,gBAAA,MAAM,OAAO,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG,WAAW;AACzE,gBAAA,QAAQ,CAAC,KAAK,GAAG,OAAO;gBACxB,IAAI,YAAY,EAAE;AACd,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnB,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;AACjD,yBAAA,CAAC;;AACC,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;AACjD,yBAAA,CAAC;;oBAGN,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;AACb,yBAAA,CAAC,CAAC,IAAI;wBACP,SAAS,EAAE,MAAM,CAAC,OAAO;AACzB,wBAAA,QAAQ,EAAE;AACb,qBAAA,CAAC;;AACC,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;AACb,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;AACvD,qBAAA,CAAC;;qBACC;AACH,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACnB,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;AACb,yBAAA,CAAC,CAAC,IAAI;wBACP,SAAS,EAAE,MAAM,CAAC,OAAO;AACzB,wBAAA,QAAQ,EAAE;AACb,qBAAA,CAAC;;AAEN,gBAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK;gBACnC,WAAW,IAAI,YAAY;AAC3B,gBAAA,QAAQ,IAAI,YAAY,GAAG,gCAAgC;AAC/D,aAAC;YAED,QAAQ,WAAW;gBACf,KAAK,wBAAwB,CAAC,GAAG;AAC7B,oBAAA,UAAU,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC;oBAC/C;gBACJ,KAAK,wBAAwB,CAAC,KAAK;AAC/B,oBAAA,UAAU,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC;oBAClD;gBACJ,KAAK,wBAAwB,CAAC,GAAG;AAC7B,oBAAA,UAAU,CAAC,wBAAwB,CAAC,GAAG,EAAE,EAAE,CAAC;oBAC5C;AACJ,gBAAA;AACI,oBAAA,UAAU,CAAC,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC7C;;;AAIZ,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;AACb,iBAAA,CAAC;;iBACC;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;AACX,iBAAA,CAAC;gBACF,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;AACb,iBAAA,CAAC;;;;IAKN,sBAAsB,CAAC,MAAqB,EAAE,GAAS,EAAA;AAC3D,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM;AACrD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;AAC/E,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YACxB;;AAEJ,QAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;YACpB,OAAO,CAAC,IAAI,CAAC,CAAyC,sCAAA,EAAA,cAAc,CAAC,CAAC,CAAC,CAAE,CAAA,CAAC;;QAE9E,MAAM,WAAW,GAAG,QAAQ;QAC5B,MAAM,IAAI,GAAI,KAA4B,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC;AAC/G,QAAA,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE;QACjC,MAAM,eAAe,GAAG,CAAC,YAAoB,EAAE,QAAmB,GAAA,yBAAyB,KAAI;AAC3F,YAAA,YAAY,IAAI,WAAW,GAAG,qCAAqC,GAAG,4CAA4C,GAAG,CAAC;YACtH,OAAO,IAAI,CAAC,YAAY,CAAC;AACrB,gBAAA,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,WAAW,IAAI,YAAY;AACrC,gBAAA,QAAQ,EAAE;AACb,aAAA,CAAC;AACN,SAAC;QACD,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,IAAI,EAAE;AACV,YAAA,GAAG,CAAC,WAAW,GAAG,CAAC;AACnB,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;AAClC,YAAA,MAAM,WAAW,GAAI,KAA4B,CAAC,QAAQ,CAAC,YAAY;AACvE,YAAA,IAAI,UAAU,GAAG,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,OAAO;YAChE,MAAM,eAAe,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,GAAG,oBAAoB,GAAG,iBAAiB;YAC1G,MAAM,WAAW,GAAG,CAAC;YACrB,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;AACT,qBAAA,CAAC;oBACF,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;AACrB,qBAAA,CAAC;oBACF;gBACJ,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;AACT,qBAAA,CAAC;oBACF,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;AACrB,qBAAA,CAAC;oBACF;gBAEJ,KAAK,wBAAwB,CAAC,GAAG;oBAC7B,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,IAAI,qBAAqB,GAAG,oBAAoB,CAAC;AACrF,oBAAA,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,YAAY,EAAE,sBAAsB,CAAC;AACjF,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,oBAAoB,EAAE,kCAAkC,CAAC;oBAChG,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;AACX,qBAAA,CAAC;oBACF;AACJ,gBAAA;AACI,oBAAA,MAAM,gBAAgB,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB;oBAChE,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;AACrB,qBAAA,CAAC;oBACF;;YAGR,GAAG,CAAC,OAAO,EAAE;;;IAIb,cAAc,CAAC,MAAqB,EAAE,GAAS,EAAA;AACnD,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM;AAC3D,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;QAClC,IAAI,QAAQ,GAAG,cAAc;AAE7B,QAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,CAACC,UAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC3C;;AAGJ,QAAA,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB;QAC5D,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,IAAI,YAAY,EAAE,CAAC;QAC7F,IAAI,GAAG,EAAE;YACL,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,MAAM,CAAC,OAAO;YAC5C,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;AAClB,aAAA,CAAC;;;IAIF,cAAc,CAAC,MAAqB,EAAE,GAA0C,EAAA;QACpF,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,MAAM;QACnD,MAAM,GAAG,GAAG,CAAC;QACb,MAAM,SAAS,GAAG,UAA4B;QAC9C,MAAM,IAAI,GAAG,wBAAwB;AACrC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;AAChC,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;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,IAAI,SAAS;YAClC,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,qBAAqB,GAAG,KAAK,GAAG,2BAA2B;YACxF,MAAM,KAAK,GAAG,CAAC,yBAAyB,GAAG,IAAI,IAAI,CAAC;YAEpD,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,CAAC,EAAE;gBAC7B,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,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AACxD,oBAAA,MAAM,EAAE,IAAI;AACZ,oBAAA,MAAM,EAAE;AACX,iBAAA,CAAC;;AAEV,SAAC,CAAC;;IAGE,kBAAkB,CAAC,MAAqB,EAAE,GAAS,EAAA;AACvD,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,MAAM;AAC3D,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;QAClC,IAAI,SAAS,GAAG,cAAc;AAC9B,QAAA,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE;YAClB,SAAS,GAAG,CAAC;;QAEjB,IAAI,CAACA,UAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACxB;;QAEJ,MAAM,KAAK,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,GAAG,4BAA4B;QACpF,MAAM,MAAM,GAAG,4BAA4B;QAC3C,MAAM,UAAU,GAAG,yBAAyB;QAC5C,MAAM,OAAO,GAAG,qBAAqB;QACrC,MAAM,OAAO,GAAG,CAAC,yBAAyB,GAAG,4BAA4B,IAAI,CAAC;QAC9E,MAAM,WAAW,GAAG,CAAC,yBAAyB,GAAG,UAAU,IAAI,CAAC;;QAGhE,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;AAChB,SAAA,CAAC;;QAGF,MAAM,aAAa,GAAG,CAAC,SAAS,GAAG,GAAG,IAAI,KAAK;QAC/C,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;AAChB,SAAA,CAAC;QAEF,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,SAAS,CAAG,CAAA,CAAA;YACrB,SAAS,EAAE,MAAM,CAAC;AACrB,SAAA,CAAC;;IAGE,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;QACxG,MAAM,SAAS,GAAG,UAAU;QAE5B,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YACnC;;AAEJ,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAA0B;QACjD,MAAM,UAAU,GAAG,2BAA2B;QAC9C,MAAM,UAAU,GAAG,gCAAgC;QACnD,MAAM,WAAW,GAAG,QAAQ;AAC5B,QAAA,MAAM,UAAU,GAAG,QAAQ,EAAE,WAAW;QAExC,IAAI,QAAQ,GAAG,qBAAqB;QACpC,IAAI,QAAQ,GAAG,CAAC,yBAAyB,GAAG,UAAU,IAAI,CAAC;AAC3D,QAAA,MAAM,cAAc,GAAG,UAAU,GAAG,wCAAwC;AAC5E,QAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,GAAG,GAAG,+BAA+B,GAAG,SAAS,GAAG,+BAA+B;QAChH,MAAM,YAAY,GAAG;cACf,WAAW,GAAG,CAAC,GAAG,qBAAqB,GAAG,cAAc,GAAG,qCAAqC,GAAG;cACnG,WAAW,GAAG,CAAC,GAAG,qBAAqB,GAAG,cAAc;AAE9D,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM;QAClC,IAAI,UAAU,GAAG,KAAK;AAEtB,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;AACtD,YAAA,IAAI,CAAC,QAAQ;gBAAE;YAEf,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,QAAQ;AAC9C,YAAA,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,IAAI,UAAU,GAAG,iCAAiC,GAAG,CAAC,CAAC;AAEjG,YAAA,QAAQ,GAAG,qBAAqB,GAAG,KAAK,GAAG,SAAS;AAEpD,YAAA,IAAI,gBAAgB,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY;AAC1D,YAAA,IAAI,KAAK,KAAK,CAAC,IAAI,WAAW,EAAE;gBAC5B,MAAM,iBAAiB,GAAG,YAAY,IAAI,kCAAkC,GAAG,CAAC,CAAC;;AAEjF,gBAAA,IAAI,iBAAiB,IAAI,EAAE,EAAE;oBACzB,QAAQ,GAAG,qBAAqB;AAChC,oBAAA,QAAQ,IAAI,2BAA2B,GAAG,mCAAmC;;qBAC1E;oBACH,gBAAgB,GAAG,iBAAiB;;;YAI5C,IAAI,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB;AAC3E,YAAA,IAAI,WAAW,IAAI,IAAI,EAAE;;gBAErB,IAAI,QAAQ,IAAI,WAAW,GAAG,CAAC,GAAG,qBAAqB,EAAE;oBACrD;;;gBAGJ,IAAI,QAAQ,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,EAAE;oBACpD,QAAQ,GAAG,qBAAqB;;gBAEpC,IAAI,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,qBAAqB,EAAE;oBAC5D,QAAQ,GAAG,qBAAqB;oBAChC,QAAQ,IAAI,UAAU;;AAE1B,gBAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;oBACvB,UAAU,GAAG,IAAI;;;YAIzB,IAAI,GAAG,EAAE;gBACL,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;AAC3B,iBAAA,CAAC;;gBAGF,IAAI,CAAC,UAAU,EAAE;oBACb,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,GAAG,iBAAiB,CAAC,MAAM,GAAG,wCAAwC;oBAChG,IAAI,CAAC,IAAI,CAAC;AACN,wBAAA,CAAC,EAAE,KAAK;AACR,wBAAA,CAAC,EAAE,CAAC,GAAG,yBAAyB,GAAG,CAAC;AACpC,wBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;4BACpB,IAAI,EAAE,YAAY,IAAI,EAAE;AACxB,4BAAA,QAAQ,EAAE,YAAY;AACtB,4BAAA,QAAQ,EAAE;AACb,yBAAA,CAAC,CAAC,IAAI;AACP,wBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;AAC9B,wBAAA,QAAQ,EAAE,yBAAyB;AACnC,wBAAA,aAAa,EAAE;AAClB,qBAAA,CAAC;;gBAGN,IAAI,MAAM,EAAE;oBACR,GAAG,CAAC,IAAI,EAAE;AACV,oBAAA,GAAG,CAAC,WAAW,GAAG,GAAG;oBACrB,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;AACrB,qBAAA,CAAC;oBACF,GAAG,CAAC,OAAO,EAAE;oBACb,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;AAClB,qBAAA,CAAC;;;;;IAMV,oBAAoB,CAAC,MAAqB,EAAE,GAA0C,EAAA;QAC1F,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM;QACxG,MAAM,SAAS,GAAG,UAAU;QAC5B,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YACnC;;QAGJ,MAAM,YAAY,GAAG,uBAAuB;QAC5C,MAAM,UAAU,GAAG,8BAA8B;QACjD,MAAM,WAAW,GAAG,QAAQ;QAE5B,IAAI,QAAQ,GAAG,qBAAqB;QACpC,IAAI,QAAQ,GAAG,CAAC,yBAAyB,GAAG,YAAY,IAAI,CAAC;AAC7D,QAAA,MAAM,cAAc,GAAG,YAAY,GAAG,gCAAgC;AACtE,QAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,GAAG,GAAG,+BAA+B,GAAG,SAAS,GAAG,+BAA+B;QAChH,MAAM,YAAY,GAAG;cACf,WAAW,GAAG,CAAC,GAAG,qBAAqB,GAAG,cAAc,GAAG,qCAAqC,GAAG;cACnG,WAAW,GAAG,CAAC,GAAG,qBAAqB,GAAG,cAAc;AAE9D,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM;QAClC,IAAI,UAAU,GAAG,KAAK;AAEtB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE;YAC5C,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,cAAc;gBAAE;AACrB,YAAA,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc;AAC1C,YAAA,MAAM,SAAS,GAAG,uBAAuB,GAAG,gCAAgC;AAC5E,YAAA,QAAQ,GAAG,qBAAqB,GAAG,KAAK,GAAG,SAAS;AACpD,YAAA,IAAI,gBAAgB,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY;AAC1D,YAAA,IAAI,KAAK,KAAK,CAAC,IAAI,WAAW,EAAE;gBAC5B,MAAM,iBAAiB,GAAG,YAAY,IAAI,kCAAkC,GAAG,CAAC,CAAC;;AAEjF,gBAAA,IAAI,iBAAiB,IAAI,EAAE,EAAE;oBACzB,QAAQ,GAAG,qBAAqB;AAChC,oBAAA,QAAQ,IAAI,2BAA2B,GAAG,mCAAmC;;qBAC1E;oBACH,gBAAgB,GAAG,iBAAiB;;;AAG5C,YAAA,IAAI,WAAW,IAAI,IAAI,EAAE;;gBAErB,IAAI,QAAQ,IAAI,WAAW,GAAG,CAAC,GAAG,qBAAqB,EAAE;oBACrD;;;gBAGJ,IAAI,QAAQ,GAAG,WAAW,GAAG,CAAC,GAAG,qBAAqB,EAAE;oBACpD,QAAQ,GAAG,qBAAqB;;gBAEpC,IAAI,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,qBAAqB,EAAE;oBAC5D,QAAQ,GAAG,qBAAqB;oBAChC,QAAQ,IAAI,UAAU;;AAE1B,gBAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;oBACvB,UAAU,GAAG,IAAI;;;YAGzB,MAAM,SAAS,GAAG,yBAAyB,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC1D,YAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;YACvB,GAAG,CAAC,GAAG,GAAG,CAAA,iCAAA,EAAoC,kBAAkB,CAAC,SAAS,CAAC,CAAA,CAAE;YAC7E,IAAI,GAAG,EAAE;gBACL,IAAI,CAAC,KAAK,CAAC;oBACP,IAAI,EAAE,GAAG,CAAC,GAAG;oBACb,CAAC,EAAE,CAAC,GAAG,QAAQ;oBACf,CAAC,EAAE,CAAC,GAAG,QAAQ;oBACf,GAAG,EAAE,GAAG,CAAC,GAAG;AACZ,oBAAA,KAAK,EAAE,uBAAuB;AAC9B,oBAAA,MAAM,EAAE;AACX,iBAAA,CAAC;;;;AAIjB;AAEM,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE;;AC5vB1C;;;AAGG;AACG,MAAO,eAAgB,SAAQ,MAAM,CAAA;AACpB,IAAA,mBAAmB,CAAC,EAAE,UAAU,EAAE,YAAY,EAAoD,EAAA;QACjH,KAAK,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AACvD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW;QACxC,MAAM,SAAS,GACX,IAAI,CAAC,cAAc,GAAG,MAAM,GAAG,+BAA+B,GAAG,+BAA+B,GAAG,IAAI,CAAC,cAAc,GAAG,MAAM;QACnI,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;AACvB,SAAA,CAAC;;;IAKE,eAAe,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAe,EAAA;QACzE,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACnB,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK;AACtB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;AAChC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW;AACpC,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;;AAElC,QAAA,IAAI,MAAM,GAAG,MAAM,CAAC,WAAW;QAC/B,IAAI,YAAY,EAAE;AACd,YAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB;;aAC9B,IAAI,UAAU,EAAE;AACnB,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM;;QAE1B,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;AAClB;AACJ,SAAA,CAAC;;QAEF,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;AAClB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE;;YAE9B,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;YAC9C,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;AAClB,aAAA,CAAC;;AAGN,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;;;;AAKtD,IAAA,cAAc,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAA8D,EAAA;AAClH,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE;AAClC,QAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK;AAC9B,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;;QAGlC,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;AAC5B,SAAA,CAAC;QAEF,IAAI,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;;;IAIlD,gBAAgB,CAAC,EAAE,KAAK,EAA8B,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;YAAE;AAEjC,QAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK;AAC9B,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;;QAGlC,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;AAC5B,SAAA,CAAC;;AAGN,IAAA,MAAM,CAAC,MAAmB,EAAA;QACtB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,MAAM;AACvD,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;;AAE/D;AAEM,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE;;ACpHpD;;;;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;AACvH,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAA0B;IAClD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,UAAU;AACvD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;IAClC,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC;;AAGxD,IAAA,UAAU,CAAC,OAAO,CAAC,GAA+B,CAAC;AACnD,IAAA,YAAY,CAAC,OAAO,CAAC,GAA+B,CAAC;AACrD,IAAA,eAAe,CAAC,OAAO,CAAC,GAA+B,CAAC;AAExD,IAAA,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;;AAGvC,IAAA,KAAK,IAAI,WAAW,GAAG,gBAAgB,EAAE,WAAW,IAAI,eAAe,EAAE,WAAW,EAAE,EAAE;AACpF,QAAA,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC;YAAE;;AAGnC,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC;QACzC,IAAI,KAAK,IAAI,IAAI;YAAE;;QAGnB,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC;QAC1D,MAAM,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,eAAe;QACnE,MAAM,YAAY,GAAG,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAE9D,QAAA,IAAI,WAAW,KAAK,CAAC,EAAE;YACnB,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;;;AAInE,QAAA,KAAK,IAAI,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,EAAE,EAAE;AACrE,YAAA,IAAI,QAAQ,GAAG,QAAQ,GAAG,CAAC;gBAAE;YAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;YAC1C,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG;YACnC,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,eAAe;AAC7D,YAAA,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE;AACvE,YAAA,MAAM,OAAO,GAAG,aAAa,KAAK,QAAQ;YAE1C,QAAQ,IAAI;AACR,gBAAA,KAAK,cAAc,CAAC,GAAG,EAAE;AACrB,oBAAA,MAAM,UAAU,GAAG,OAAO,IAAI,UAAU,KAAK,uBAAuB;AACpE,oBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,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;AAC9B,qBAAA,CAAC;oBACF,YAAY,CAAC,MAAM,CAAC;wBAChB,UAAU;wBACV;AACH,qBAAA,CAAC;oBACF;;AAEJ,gBAAA,KAAK,cAAc,CAAC,MAAM,EAAE;AACxB,oBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG;AACzB,oBAAA,MAAM,IAAI,GAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC;AACrD,oBAAA,IAAI,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC;oBAEtE,eAAe,CAAC,IAAI,CAAC;wBACjB,CAAC;wBACD,CAAC;wBACD,QAAQ;wBACR,WAAW;wBACX,WAAW;wBACX,SAAS;wBACT,WAAW;wBACX,cAAc,EAAE,UAAU,CAAC;AAC9B,qBAAA,CAAC;oBACF,eAAe,CAAC,MAAM,CAAC;wBACnB,GAAG;AACH,wBAAA,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;AAC3B,wBAAA,UAAU,EAAE,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC;AAC9C,wBAAA,YAAY,EAAE,gBAAgB,CAAC,QAAQ,EAAE,OAAO;AACnD,qBAAA,CAAC;AACF,oBAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,yBAAyB,CAAC;wBAChD,WAAW;wBACX,WAAW;wBACX;AACH,qBAAA,CAAC;AACF,oBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,eAAe;AAC1C,oBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,eAAe;AACjC,oBAAA,MAAM,KAAK,GAAG,EAAE,UAAU,EAAE,kBAAkB,EAAE;AAChD,oBAAA,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAC5E,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;AACpE,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,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;wBAC3C,KAAK;wBACL;qBACH;;AAED,oBAAA,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,IAAI,SAAS,CAAC,OAAO,KAAK,OAAO,EAAE;AAC/E,wBAAA,MAAM,CAAC,SAAS,GAAG,EAAE;AACrB,wBAAA,MAAM,CAAC,cAAc,GAAG,EAAE;;AAG9B,oBAAA,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;;;AAGlC,oBAAA,IAAI,YAAY,IAAI,SAAS,IAAI,IAAI,EAAE;wBACnC,GAAG,CAAC,IAAI,EAAE;wBACV,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;wBACxC,GAAG,CAAC,IAAI,EAAE;AACV,wBAAA,UAAU,CAAC,UAAU,CAAC,MAAuB,EAAE,GAA+B,CAAC;wBAC/E,GAAG,CAAC,OAAO,EAAE;;yBACV;AACH,wBAAA,UAAU,CAAC,UAAU,CAAC,MAAuB,EAAE,GAA+B,CAAC;;;;;;AAMvG;AAEA,MAAM,iBAAiB,GAAG,CAAC,IAAyB,EAAE,OAAgB,EAAE,UAAkB,EAAE,OAAgB,KAAY;AACpH,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;AAClC,IAAA,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI;AAChC,IAAA,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK;IAE7B,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC;IACzD,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC7D,MAAM,gBAAgB,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1D,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;IACnD,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;IACjD,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC;IACrD,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC;IAEnE,IAAI,sBAAsB,EAAE;AACxB,QAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB;;AACjC,SAAA,IAAI,iBAAiB,IAAI,gBAAgB,IAAI,cAAc,KAAK,eAAe,IAAI,CAAC,aAAa,CAAC,EAAE;AACvG,QAAA,UAAU,GAAG,MAAM,CAAC,iBAAiB;;AAClC,SAAA,IAAI,cAAc,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,UAAU,GAAG,MAAM,CAAC,MAAM;;AAG9B,IAAA,OAAO,UAAU;AACrB,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,IAAyB,EAAE,OAAgB,KAAa;AAC1E,IAAA,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI;AAChC,IAAA,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE;AAC5E,IAAA,OAAO,QAAQ,KAAK,cAAc,IAAI,OAAO,KAAK,aAAa;AACnE,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,IAAyB,EAAE,OAAgB,KAAa;AAC3E,IAAA,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI;AAChC,IAAA,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE;AAC5E,IAAA,OAAO,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,cAAc,IAAI,OAAO,KAAK,aAAa;AACvH,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,IAAyB,EAAE,OAAgB,KAAa;AACnF,IAAA,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI;AAChC,IAAA,OAAO,OAAO,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAC;AACvE,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,IAAyB,EAAE,OAAgB,KAAa;AAC5E,IAAA,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI;AAChC,IAAA,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAC;AAC1E,CAAC;MAEY,eAAe,GAAG,CAAC,OAAe,EAAE,OAAgB,KAAa;IAC1E,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;AAC1D;AAEA,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,OAAgB,KAAa;IACrE,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5D,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAE,UAAkB,KAAa;AACpE,IAAA,OAAO,OAAO,IAAI,UAAU,KAAK,mBAAmB;AACxD,CAAC;;MChMY,YAAY,CAAA;AAPzB,IAAA,WAAA,GAAA;AAQI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAsB;AAE7C,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;YAC7B,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACtD,YAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU;YACxC,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;iBACjE;aACR;AACL,SAAC,CAAC;AACL;+GAjBY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAZ,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;;4FAGR,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;AAC5C,iBAAA;;;MCYY,gBAAgB,CAAA;AAP7B,IAAA,WAAA,GAAA;AAQI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA8B;AAErD,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;YAC1D,IAAI,IAAI,GAAG,IAAI;AACf,YAAA,QAAQ,KAAK,CAAC,IAAI;gBACd,KAAK,gBAAgB,CAAC,IAAI;oBACtB,IAAI,GAAG,oBAAoB;oBAC3B;gBACJ,KAAK,gBAAgB,CAAC,MAAM;AACxB,oBAAA,IAAI,GAAI,KAAK,CAAC,QAA2B,EAAE,WAAW,GAAG,sBAAsB,GAAG,sBAAsB;oBACxG;gBACJ,KAAK,gBAAgB,CAAC,IAAI;gBAC1B,KAAK,gBAAgB,CAAC,SAAS;gBAC/B,KAAK,gBAAgB,CAAC,SAAS;oBAC3B,IAAI,GAAG,wBAAwB;oBAC/B;gBACJ,KAAK,gBAAgB,CAAC,MAAM;oBACxB,IAAI,GAAG,sBAAsB;oBAC7B;gBACJ,KAAK,gBAAgB,CAAC,IAAI;oBACtB,IAAI,GAAG,sBAAsB;oBAC7B;gBACJ,KAAK,gBAAgB,CAAC,IAAI;oBACtB,IAAI,GAAG,sBAAsB;oBAC7B;gBACJ,KAAK,gBAAgB,CAAC,MAAM;gBAC5B,KAAK,gBAAgB,CAAC,SAAS;gBAC/B,KAAK,gBAAgB,CAAC,SAAS;oBAC3B,IAAI,GAAG,sBAAsB;oBAC7B;gBACJ,KAAK,gBAAgB,CAAC,QAAQ;oBAC1B,IAAI,GAAG,wBAAwB;oBAC/B;gBACJ,KAAK,gBAAgB,CAAC,UAAU;oBAC5B,IAAI,GAAG,cAAc;oBACrB;;YAER,OAAO;gBACH,CAAC;gBACD,CAAC;AACD,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,gBAAgB,EAAE,MAAM;AACxB,gBAAA,SAAS,EAAE,KAAK;gBAChB,IAAI;gBACJ;aACH;AACL,SAAC,CAAC;AACL;+GAjDY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAhB,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;;4FAGZ,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;AAC5C,iBAAA;;;MCiBY,gBAAgB,CAAA;AAlB7B,IAAA,WAAA,GAAA;AAmBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA0B;AAEjD,QAAA,IAAA,CAAA,UAAU,GAAG,qBAAqB,GAAG,yBAAyB,GAAG,iCAAiC;QAElG,IAAW,CAAA,WAAA,GAAG,WAAW,EAAE;AAE3B,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;YAC/B,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5C,YAAA,QACI,KAAK;AACL,iBAAC;sBACK,CAAC,IAAI,qBAAqB,GAAG,yBAAyB,GAAG,iCAAiC;sBAC1F,CAAC,GAAG,qBAAqB,GAAG,yBAAyB,GAAG,iCAAiC,CAAC;AAExG,SAAC,CAAC;AAEF,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;YACjE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;YACzD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YAC3G,OAAO;gBACH,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACjD,MAAM;gBACN;aACH;AACL,SAAC,CAAC;AAEF,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;aACpB;AACL,SAAC,CAAC;AAEF,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;YAC/E,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;iBAClB,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;aACZ;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YAC5B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;YACvC,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;aAChB;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YACvB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;YACvC,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;aACf;AACL,SAAC,CAAC;AAEF,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;YACvE,MAAM,iBAAiB,GAAG,CAAC,MAAM,GAAG,2BAA2B,IAAI,CAAC;YACpE,OAAO;gBACH,IAAI,EAAE,kBAAkB,CAAC;AACrB,oBAAA,UAAU,EAAE,wBAAwB;oBACpC,OAAO,EAAE,KAAK,CAAC;iBAClB,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;aACjB;AACL,SAAC,CAAC;AACL;+GA/FY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;;;;;;;;;;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,mHAAE,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAGjE,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAlB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE;;;;;;;;;;;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;AAC5C,iBAAA;;;MC1BY,kBAAkB,CAAA;AAP/B,IAAA,WAAA,GAAA;AAQI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAsB;AAE7C,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YAC9B,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACpC,YAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU;YACxC,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;iBACxC;aACR;AACL,SAAC,CAAC;AACL;+GAlBY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlB,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;;4FAGR,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;AAC5C,iBAAA;;;ACTM,MAAM,iBAAiB,GAAG,CAAC,MAAgC,KAAI;AAClE,IAAA,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,MAAM;IACxF,MAAM,MAAM,GAAG,MAAM;IACrB,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,UAAU;IAChE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,aAAa;IACpF,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM;AAExC,IAAA,MAAM,kBAAkB,GAAG,CAAC,OAAe,KAAI;QAC3C,MAAM,WAAW,GACb,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,GAAG,KAAK,OAAO;AAC1H,QAAA,MAAM,WAAW,GAAG,eAAe,KAAK,wBAAwB,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,GAAG,KAAK,OAAO;AAC7G,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;QAClE,OAAO;YACH,WAAW;YACX,UAAU;YACV;SACH;AACL,KAAC;IAED,MAAM,UAAU,GAA6B,EAAE;AAC/C,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,UAAU,IAAI,EAAE;IAC5E,IAAI,UAAU,GAAG,KAAK;AACtB,IAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QACzB,UAAU,GAAG,IAAI;;AAErB,IAAA,KAAK,IAAI,WAAW,GAAG,gBAAgB,EAAE,WAAW,IAAI,eAAe,EAAE,WAAW,EAAE,EAAE;AACpF,QAAA,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC;YAAE;QACnC,IAAI,WAAW,GAAG,CAAC;YAAE;AACrB,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC;QACjC,IAAI,KAAK,IAAI,IAAI;YAAE;QACnB,MAAM,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC;QACjD,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC;AAC1D,QAAA,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9E,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,EAAE,UAAU,GAAG,KAAK,GAAG,WAAW;YAC7C,UAAU;YACV;SACH;AAED,QAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;;AAE9B,IAAA,OAAO,UAAU;AACrB,CAAC;;MCjBY,wBAAwB,CAAA;AAlBrC,IAAA,WAAA,GAAA;AAmBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA4B;AAEnD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU;AACnC,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;;AAEtB,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,cAAc,KAAK,qBAAqB,CAAC,GAAG;AACzF,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW;AACxC,SAAC,CAAC;AAEF,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;AAC1D,aAAA,CAAC;AACN,SAAC,CAAC;AAEF,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;aACd;AACL,SAAC,CAAC;AAEF,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;SACd;AAED,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;aACd;AACL,SAAC,CAAC;AAEF,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;sBAClH,MAAM,CAAC;sBACP,MAAM,CAAC;aACpB;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YACzB,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;YAC/C,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;aACd;AACL,SAAC,CAAC;AACL;+GAjFY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;;;;;;;;;;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;;4FAGpD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlBpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,QAAQ,EAAE;;;;;;;;;;;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;AAC5C,iBAAA;;;MCjBY,6BAA6B,CAAA;AAX1C,IAAA,WAAA,GAAA;AAYI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAsB;AAE7C,QAAA,IAAA,CAAA,4BAA4B,GAAG,QAAQ,CAAC,MAAK;YACzC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACpC,YAAA,OAAO,0BAA0B,CAAC;gBAC9B,GAAG,IAAI,CAAC,MAAM,EAAE;AAChB,gBAAA,gBAAgB,EAAE,CAAC;AACnB,gBAAA,eAAe,EAAE,UAAU,CAAC,iBAAiB,GAAG;AACnD,aAAA,CAAC;AACN,SAAC,CAAC;AACL;+GAXY,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;;;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;;4FAGR,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAXzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mCAAmC;AAC7C,oBAAA,QAAQ,EAAE;;;;AAIT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;MCCY,kBAAkB,CAAA;AAX/B,IAAA,WAAA,GAAA;AAYI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAA4B;AAEnD,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACxB,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACtD,YAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU;AACxC,YAAA,OAAO,iBAAiB,CAAC;gBACrB,GAAG,IAAI,CAAC,MAAM,EAAE;gBAChB,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,iBAAiB;AACjE,aAAA,CAAC;AACN,SAAC,CAAC;AACL;+GAXY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;;;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;;4FAGjB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAX9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE;;;;AAIT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;MCmBY,oBAAoB,CAAA;AAlBjC,IAAA,WAAA,GAAA;AAmBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAyB;AAEhD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;YAC1B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAQ,CAAC,aAAa,EAAE;AACzD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACxB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AACzD,SAAC,CAAC;AAEF,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;AAC1E,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAA0B;YAClD,MAAM,WAAW,GAAU,EAAE;AAE7B,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;;gBAGJ,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;AAC1C,gBAAA,IAAI,GAAG,IAAI,IAAI,EAAE;oBACb;;gBAGJ,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG;gBACnC,IAAI,IAAI,KAAK,cAAc,CAAC,MAAM,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpD;;AAGJ,gBAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACtE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,aAAa;gBAEvE,IAAI,CAAC,YAAY,IAAI,QAAQ,KAAK,eAAe,CAAC,IAAI,EAAE;oBACpD;;AAGJ,gBAAA,IAAI,UAAU;gBACd,IAAI,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,IAAI,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE;AACpG,oBAAA,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC;AACtF,oBAAA,UAAU,GAAG,QAAQ,KAAK,aAAa,IAAI,YAAY,KAAK,cAAc,CAAC,MAAM,IAAI,UAAU,KAAK,mBAAmB;;AAG3H,gBAAA,IAAI,cAAgF;AAEpF,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;AAChB;iBACJ;AAED,gBAAA,IAAI,YAAY,IAAI,UAAU,EAAE;oBAC5B,MAAM,WAAW,GAAG,CAAC,0BAA0B,GAAG,EAAE,IAAI,CAAC;oBACzD,cAAc,CAAC,UAAU,GAAG;wBACxB,IAAI,EAAE,kBAAkB,CAAC;AACrB,4BAAA,UAAU,EAAE,4BAA4B;4BACxC;yBACH,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;qBAClH;AACD,oBAAA,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC;;;AAIxC,YAAA,OAAO,WAAW;AACtB,SAAC;AACJ;+GA3EY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;;;;;;;;;;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;;4FAGlC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAlBhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC;oBAC5C,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;MCZY,gBAAgB,CAAA;AAf7B,IAAA,WAAA,GAAA;AAgBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAyB;QAEhD,IAAc,CAAA,cAAA,GAAG,cAAc;AAE/B,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YACzB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAC9C,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,MAA6B,KAAI;YAChD,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,MAAM;YACnE,MAAM,eAAe,GAAG,EAAE;AAC1B,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;AACxC,gBAAA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAI,OAAO,CAAC,OAA2B,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;AACjF,gBAAA,IAAI,IAAI,KAAK,cAAc,CAAC,MAAM;oBAAE;gBACpC,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAEnD,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;AACT;AACJ,iBAAA,CAAC;;AAEN,YAAA,OAAO,eAAe;AAC1B,SAAC;AACJ;+GAjCY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;;;;;;;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;;4FAGR,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAf5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE;;;;;;;;AAQT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;MCJY,uBAAuB,CAAA;AAXpC,IAAA,WAAA,GAAA;AAYI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAsB;AAE7C,QAAA,IAAA,CAAA,4BAA4B,GAAG,QAAQ,CAAC,MAAK;AACzC,YAAA,OAAO,0BAA0B,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACpD,SAAC,CAAC;AACL;+GANY,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,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;;;;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;;4FAGR,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAXnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,QAAQ,EAAE;;;;AAIT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,OAAO,CAAC;oBAClB,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;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;AACtG,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,OAAQ;AACvC,IAAA,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,UAAU;AACnD,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;IAClC,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC;IACxD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;AACjD,IAAA,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM;IAE9C,IAAI,gBAAgB,GAAsB,IAAI;IAC9C,IAAI,sBAAsB,GAAsB,IAAI;AAEpD,IAAA,IACI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QACzB,CAAC,CAAC,UAAU,CAAC,MAAM;AACnB,QAAA,OAAO,CAAC,OAAQ,CAAC,mBAAmB,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzD,QAAA,OAAO,CAAC,OAAQ,CAAC,sBAAsB,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAC9D;AACE,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;AAC7B,QAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAE;AAE5E,QAAA,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,WAAmB,KAAI;AAC7D,YAAA,IAAI,WAAW,GAAG,iBAAiB,EAAE;AACjC,gBAAA,OAAO,IAAI;;AAEf,YAAA,QACI,QAAQ,IAAI,aAAa,IAAI,QAAQ,IAAI,YAAY,IAAI,WAAW,IAAI,gBAAgB,IAAI,WAAW,IAAI,eAAe;AAElI,SAAC;AAED,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;AAEvC,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;AACzE,gBAAA,IAAI,WAAW,IAAI,IAAI,EAAE;oBACrB,OAAO;wBACH,gBAAgB;wBAChB;qBACH;;gBAGL,MAAM,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC;gBACjD,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC3C,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC;AAC1D,gBAAA,MAAM,cAAc,GAAG,WAAW,GAAG,iBAAiB;AACtD,gBAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,yBAAyB,CAAC;oBAChD,WAAW;oBACX,WAAW;AACX,oBAAA,WAAW,EAAE;AAChB,iBAAA,CAAC;;AAEF,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;iBACd;gBAED,IAAI,cAAc,EAAE;oBAChB,sBAAsB,GAAG,aAAa;;qBACnC;oBACH,gBAAgB,GAAG,aAAa;;;;;IAMhD,OAAO;QACH,gBAAgB;QAChB;KACH;AACL;;MC9Ca,iBAAiB,CAAA;AAd9B,IAAA,WAAA,GAAA;AAeI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAsB;QAE7C,IAAY,CAAA,YAAA,GAAuE,EAAE;AAErF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACxB,OAAO;AACH,gBAAA,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;AAC5B,gBAAA,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE;aAC9B;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YAC5B,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;YAC7C,MAAM,aAAa,GAAG,OAAO,CAAC,OAAQ,CAAC,aAAa,EAAE;AACtD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAClC,IAAI,CAAC,SAAS,EAAE;gBACZ;;YAEJ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,yBAAyB,EAAE,GAAG,SAAS;AACzE,YAAA,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9E,YAAA,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE;YAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1C;;YAGJ,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,UAAU;AACvD,YAAA,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW;AAC7C,YAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ;YAEvC,MAAM,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,eAAe;YACnE,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC;YAC1D,MAAM,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,eAAe;AAC7D,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,yBAAyB,CAAC;gBACxC,WAAW;gBACX,WAAW;gBACX;AACH,aAAA,CAAC;AAEF,YAAA,MAAM,KAAK,GAAG;AACV,gBAAA,SAAS,EAAE;aACP;AACR,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS;AACjC,YAAA,MAAM,OAAO,GACT,SAAS,KAAK;AACV,kBAAE,WAAW,GAAG,qBAAqB,GAAG;AACxC,kBAAE,qBAAqB,GAAG,eAAe;AACjD,YAAA,MAAM,OAAO,GAAG,CAAC,GAAG,eAAe,GAAG,CAAC;AAEvC,YAAA,MAAM,MAAM,GAA2B;gBACnC,KAAK;gBACL,OAAO;gBACP,UAAU;gBACV,CAAC;gBACD,CAAC;AACD,gBAAA,MAAM,EAAE;oBACJ,OAAO;oBACP,QAAQ;oBACR,KAAK;oBACL,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;AAC7C,oBAAA,CAAC,EAAE,OAAO;AACV,oBAAA,CAAC,EAAE,OAAO;AACV,oBAAA,WAAW,EAAE,KAAK;oBAClB,SAAS;oBACT,SAAS;oBACT,cAAc;oBACd;AACH;aACJ;AAED,YAAA,OAAO,MAAM;AACjB,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;AAClE;+GA1EY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAZhB,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;;;;;;;KAOT,EAEkB,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,4EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAhC,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,kCAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAGnC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAd7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE;;;;;;;AAOT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC;oBAC7C,eAAe,EAAE,uBAAuB,CAAC;AAC5C,iBAAA;;;ACZD,KAAK,CAAC,UAAU,GAAG,CAAC;MAwBP,eAAe,CAAA;AAtB5B,IAAA,WAAA,GAAA;AAuBI,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAyB;QAEhD,IAAW,CAAA,WAAA,GAAG,MAAM,EAA6B;QAEjD,IAAW,CAAA,WAAA,GAAG,MAAM,EAA6B;QAEjD,IAAS,CAAA,SAAA,GAAG,MAAM,EAA6B;QAE/C,IAAa,CAAA,aAAA,GAAG,MAAM,EAA6B;QAEnD,IAAO,CAAA,OAAA,GAAG,MAAM,EAA6B;QAE7C,IAAO,CAAA,OAAA,GAAG,MAAM,EAA6B;QAE7C,IAAU,CAAA,UAAA,GAAG,MAAM,EAA6B;AAEhD,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;YACnB,OAAO,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC;AAC1D,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACrB,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ;AAClC,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU;AACpC,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAS,MAAK;AACnC,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,cAAc;AACvC,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAS,MAAK;AACpC,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,eAAe;AACxC,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACxB,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,OAAQ,CAAC,OAAQ,CAAC,WAAW,EAAE;AACzD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAG,EAAE,IAAI,CAAC,WAAW,EAAG,CAAC;AACvE,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;YAC5B,OAAO,uBAAuB,GAAG,IAAI,CAAC,UAAU,EAAG,CAAC,iBAAkB;AAC1E,SAAC,CAAC;AAEF,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;AACrF,SAAC,CAAC;AAEF,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;AACtF,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;YAC/B,OAAO,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;AACzD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAuB,MAAK;YAC9C,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,EAAG;YAC3C,OAAO;AACH,gBAAA,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE;AAC5B,gBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE;gBAC9B,SAAS,EAAE,WAAW,GAAG,KAAK,GAAG;aACpC;AACL,SAAC,CAAC;AAEF,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;aACnC;AACL,SAAC,CAAC;AAEF,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;aACnC;AACL,SAAC,CAAC;AAEF,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;aAC3D;AACL,SAAC,CAAC;AAEF,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;aAC3D;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAuB,MAAK;YAChD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,EAAG;YACzC,OAAO;AACH,gBAAA,OAAO,EAAE;aACZ;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAuB,MAAK;YAChD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,EAAG;YAC1C,OAAO;AACH,gBAAA,OAAO,EAAE;aACZ;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAuB,MAAK;YAC/C,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,EAAG;YACrD,OAAO;AACH,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,OAAO,EAAE;aACZ;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,0BAA0B,GAAG,QAAQ,CAAC,MAAK;YACvC,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACrE,YAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACvD,YAAA,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,OAAQ;AAC1C,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5B,OAAO;gBACH,OAAO;gBACP,UAAU;gBACV,MAAM;gBACN,gBAAgB;gBAChB,eAAe;gBACf,aAAa,EAAE,aAAa,EAAE;gBAC9B;aACH;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACxB,YAAA,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACzD,YAAA,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;YAClG,OAAO;gBACH,OAAO;gBACP,UAAU;gBACV,UAAU;gBACV,aAAa;gBACb,YAAY;gBACZ,gBAAgB;gBAChB;aACH;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,OAAO,sBAAsB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACrD,SAAC,CAAC;AAyBL;AAvBG,IAAA,cAAc,CAAC,CAA4B,EAAA;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAA8B,CAAC;;AAGzD,IAAA,cAAc,CAAC,CAA4B,EAAA;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAA8B,CAAC;;AAGzD,IAAA,YAAY,CAAC,CAA4B,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAA8B,CAAC;;AAGvD,IAAA,gBAAgB,CAAC,CAA4B,EAAA;AACzC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAA8B,CAAC;;AAG3D,IAAA,UAAU,CAAC,CAA4B,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAA8B,CAAC;;AAGrD,IAAA,aAAa,CAAC,CAA4B,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAA8B,CAAC;;+GAvL/C,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAf,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,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/C5B,qoFAwDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1BQ,WAAW,EAAA,QAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,OAAO,EAAA,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,EACP,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,EACP,kBAAkB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,wBAAwB,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,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,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,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;;4FAKX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAtB3B,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,iBAAiB;wBACjB,uBAAuB;wBACvB,eAAe;wBACf,oBAAoB;wBACpB,gBAAgB;wBAChB;qBACH,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qoFAAA,EAAA;;;MEhCtC,oBAAoB,CAAA;AAyB7B,IAAA,WAAA,GAAA;QAxBA,IAAO,CAAA,OAAA,GAAG,MAAM,EAAe;AAEvB,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAC,2BAA2B,CAAC;AAEjE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;AAEnC,QAAA,IAAA,CAAA,UAAU,GAA4B,MAAM,EAAC,UAAuB,EAAC;QAM7D,IAAW,CAAA,WAAA,GAAuB,IAAI;QAEtC,IAAkB,CAAA,kBAAA,GAAoC,IAAI;QAE1D,IAAW,CAAA,WAAA,GAA4B,IAAI;QAS/C,MAAM,CAAC,MAAK;YACR,MAAM,IAAI,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,SAAS,IAAI;YACnE,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE;gBACjC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAC1B;;AAEJ,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;iBACpB;AACH,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;AAE/B,SAAC,CAAC;;IAGN,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAE;AACjE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAE;AACjE,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,KAAI;AACtE,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AAChD,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,KAAI;AACtE,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,gBAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEpC,YAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAK;gBACpC,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,EAAE;oBAC7C,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC;;AAE5C,aAAC,CAAC;AACN,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAK;AACjE,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,IAAI,CAAC,aAAa,EAAE;AACxB,SAAC,CAAC;;IAGE,UAAU,CAAC,CAAa,EAAE,IAAsB,EAAA;QACpD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC;;aACrE;YACH;;QAEJ,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAmB,CAAC,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO;AACxD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC5C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAW;AACnC,QAAA,QAAQ,IAAI,CAAC,IAAI;YACb,KAAK,QAAQ,CAAC,KAAK;gBACf,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM;gBACxC,IAAI,KAAK,GAAG,CAAC;gBACb,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;oBAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;wBAC/B,KAAK,IAAI,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC;;AAE5D,iBAAC,CAAC;gBACF,MAAM,qBAAqB,GAAG,OAAO,CAAC,OAAQ,CAAC,sBAAsB,EAAE;gBACvE,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,IAAI,CAAC;gBAC/F,MAAM,kBAAkB,GAAG,UAAU,CAAC,eAAe,CAAC,iBAAiB,CAAC;gBACxE,MAAM,iBAAiB,GAAG,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC;;AAEtE,gBAAA,MAAM,oBAAoB,GAAG,iBAAiB,KAAK,CAAC;AACpD,gBAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,kBAAkB;;AAE3C,gBAAA,MAAM,UAAU,GAAG,iBAAiB,GAAG,CAAC;gBACxC,IAAI,iBAAiB,GAAG,UAAU,CAAC,mBAAmB,CAAC,QAAQ,IAAI,oBAAoB,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;gBACrH,IAAI,kBAAkB,GAAG,UAAU,CAAC,eAAe,CAAC,iBAAiB,CAAC;AACtE,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;AAClD,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC;AACvD,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAA,IAAA,CAAM,CAAC;AAClD,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1C,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA,EAAG,QAAQ,IAAI,oBAAoB,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC;AAEjG,gBAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;AAC/E,gBAAA,MAAM,eAAe,GAAG,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;gBAE7E,IAAI,YAAY,GAAG,KAAK;;gBAExB,IAAI,QAAQ,GAAG,UAAU,GAAG,gBAAgB,GAAG,eAAe,EAAE;AAC5D,oBAAA,iBAAiB,GAAG,UAAU,CAAC,WAAW;AAC1C,oBAAA,kBAAkB,GAAG,gBAAgB,GAAG,eAAe;oBACvD,YAAY,GAAG,IAAI;;AAEvB,gBAAA,IACI,CAAC,iBAAiB,IAAI,CAAC,KAAK,iBAAiB,GAAG,iBAAiB,GAAG,CAAC,IAAI,iBAAiB,GAAG,iBAAiB,GAAG,CAAC,CAAC;AACnH,oBAAA,YAAY,EACd;AACE,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAA,GAAA,CAAK,CAAC;AAChD,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAA,IAAA,CAAM,CAAC;AAClD,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1C,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA,EAAG,kBAAkB,GAAG,MAAM,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC;oBAC9E,MAAM,WAAW,GAAa,EAAE;oBAChC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;wBAC1B,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;AAChD,wBAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,qBAAC,CAAC;;AAEF,oBAAA,IAAI,iBAAiB,GAAG,iBAAiB,EAAE;wBACvC,iBAAiB,IAAI,CAAC;;oBAE1B,IAAI,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE;;qBAC/G;AACH,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;gBAE3B;YACJ,KAAK,QAAQ,CAAC,MAAM;gBAChB;YACJ,KAAK,QAAQ,CAAC,WAAW;gBACrB;;;IAIJ,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,CAAC;AACvE,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;;IAI/B,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,iBAAiB;YAAE,IAAI,CAAC,iBAAiB,EAAE;QACpD,IAAI,IAAI,CAAC,iBAAiB;YAAE,IAAI,CAAC,iBAAiB,EAAE;QACpD,IAAI,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,eAAe,EAAE;AAEhD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;;+GAzJhB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,sJCbjC,wDACwB,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FDYX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAThC,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;AACV,qBAAA,EAAA,QAAA,EAAA,wDAAA,EAAA;;;AEqEC,MAAO,WAAY,SAAQ,eAAe,CAAA;AAmF5C,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAnFH,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAE3C,IAAe,CAAA,eAAA,GAAG,KAAK;QAEvB,IAAkB,CAAA,kBAAA,GAA+B,IAAI;AAErD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAMhD,IAAe,CAAA,eAAA,GAAG,0BAA0B;AAE5C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAE/C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC;AAE7B,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;AAC5E,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAa,WAAW,CAAC;AAE9C,QAAA,IAAA,CAAA,cAAc,GAAG,SAAS,CAAa,aAAa,CAAC;AAErD,QAAA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAa,eAAe,CAAC;AAEzD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AAC3E,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;YACnC,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;YACtD,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AACpE,SAAC,CAAC;AAEF,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;AAC3E,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,OAAO,IAAI,CAAC,SAAS,EAAG,CAAC,aAAa;AAC1C,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAkC,QAAQ,CAAC,MAAK;YAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;AACrD,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,iBAAiB,EAAE,EAAE;AACrB,gBAAA,oBAAoB,EAAE,uBAAuB,CAAC,MAAM,CAAC;AACrD,gBAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AAC5C,aAAA,CAAC;YACF,OAAO;gBACH,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,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;AAC/B,gBAAA,QAAQ,EAAE,IAAI,CAAC,UAAU;aAC5B;AACL,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACvB,YAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,UAAU;AAC3C,SAAC,CAAC;AAEF,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;AACtG,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YAC3B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,GAAG,+BAA+B;AACzE,SAAC,CAAC;AAgTF,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,OAA4B,KAAI;AAC5C,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,gBAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEpC,YAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAK;gBACpC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO;AAC5C,gBAAA,MAAM,WAAW,GAAG,QAAQ,IAAI,SAAS,GAAG,CAAC,GAAG,MAAM;AACtD,gBAAA,MAAM,WAAW,GAAG,QAAQ,IAAI,SAAS,GAAG,MAAM,GAAG,MAAM;gBAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa;gBAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa;gBACxD,IAAI,aAAa,EAAE;oBACf,aAAa,CAAC,UAAU,GAAG,aAAa,CAAC,UAAU,GAAG,WAAW;;gBAErE,IAAI,WAAW,EAAE;oBACb,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,GAAG,WAAW;;AAE/D,gBAAA,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE;AACtC,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACrB,aAAC,CAAC;AACN,SAAC;QAsCO,IAAc,CAAA,cAAA,GAAG,MAAK;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,cAAc,CAAC;AACjC,gBAAA,WAAW,EAAE;AAChB,aAAA,CAAC;AACN,SAAC;AAEO,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,CAAM,KAAI;AAClC,YAAA,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,MAAM;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,cAAc,CAAC;gBACjC,UAAU;AACV,gBAAA,WAAW,EAAE;AAChB,aAAA,CAAC;YACF,IAAI,CAAC,cAAc,EAAE;AACzB,SAAC;QAlXG,eAAe,CAAC,MAAK;YACjB,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,sBAAsB,EAAE;AACjC,SAAC,CAAC;QACF,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;;AAElC,SAAC,CAAC;QACF,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE;gBAC7D,IAAI,CAAC,qBAAqB,EAAE;;AAEpC,SAAC,CAAC;QACF,MAAM,CACF,MAAK;YACD,IAAI,CAAC,uBAAuB,EAAE;AAClC,SAAC,EACD,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC9B;QAED,MAAM,CACF,MAAK;YACD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC;YACnF,SAAS,CAAC,MAAK;gBACX,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe;gBAChE,KAAK,MAAM,gBAAgB,IAAI,eAAe,CAAC,MAAM,EAAE,EAAE;oBACrD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;AACpC,wBAAA,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC;;;gBAGhD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;oBACnC,OAAO;AACH,wBAAA,GAAG,IAAI;wBACP,eAAe;AACf,wBAAA,cAAc,EAAE,IAAI,CAAC,2BAA2B,CAAC,cAAc;qBAClE;AACL,iBAAC,CAAC;AACN,aAAC,CAAC;AACN,SAAC,EACD,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC9B;;IAGI,QAAQ,GAAA;QACb,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,WAAW,EAAE;;IAGtB,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;;IAG7B,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC;YACvC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;YACnD,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;AAC7C,YAAA,aAAa,EAAE,MAAM,CAAC,sBAAsB,CAAC;AAC7C,YAAA,WAAW,EAAE,MAAM,CAAC,oBAAoB,CAAC;YACzC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,UAAU,EAAE,IAAI,CAAC,YAAY;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC;AACtB,SAAA,CAAC;;IAGE,uBAAuB,GAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;AAClC,QAAA,IAAI,YAAY,GAAG,IAAI,GAAG,EAAU;QAEpC,IAAI,QAAQ,EAAE;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBACtC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACpC,oBAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE;AAC5E,wBAAA,YAAY,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAC,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,GAAG,CAAA,CAAE,CAAC;;AAEtD,iBAAC,CAAC;AACN,aAAC,CAAC;;QAGN,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC;;AAGvD,IAAA,cAAc,CAAC,CAA4B,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEpC,QAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAK;YACpC,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;YACxC,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;AAClD,YAAA,MAAM,GAAG,GAAG,SAAS,EAAE,kBAAkB,EAAE;YAC3C,IAAI,GAAG,IAAI,IAAI;gBAAE;AACjB,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO;AAChC,YAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG;YACpB,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;AACD,YAAA,gBAAgB,CAAC,gBAAgB,CAAC,cAAc,EAAE,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACrG,YAAA,OAAQ,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;AAC3C,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,cAAc,CAAC;AACpF,gBAAA,IAAI,OAAO,IAAI,QAAQ,EAAE;AACrB,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB;AACzC,oBAAA,MAAM,OAAO,GAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC;oBACxD,IAAI,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE;wBACjC,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC;;;;AAIhF,SAAC,CAAC;;AAGN,IAAA,cAAc,CAAC,CAA4B,EAAA;AACvC,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG;QAC9B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;AAEzC,QAAA,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,WAAW,CAAC;AAC5E,QAAA,IACI,UAAU,CAAC,MAAM,KAAK,oBAAoB,CAAC,KAAK;YAChD,QAAQ;YACR,OAAO;AACP,aAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAG,EAAA,QAAQ,IAAI,OAAO,CAAA,CAAE,CAAC,CAAC,EAClI;YACE;;QAGJ,QAAQ,UAAU;AACd,YAAA,KAAK,mBAAmB;gBACpB,UAAU,CAAC,cAAc,EAAE;AAC3B,gBAAA,IAAI,CAAC,OAAO;oBAAE;AACd,gBAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,OAAO,CAAC;gBACrD,IAAI,CAAC,oBAAoB,EAAE;gBAC3B;AACJ,YAAA,KAAK,aAAa;AACd,gBAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;oBAAE;AAC3B,gBAAA,MAAM,kBAAkB,GAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC;AACnE,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,CAAC;AACvD,gBAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,kBAAkB,CAAC;gBAChE;AACJ,YAAA,KAAK,uBAAuB;AAC5B,YAAA,KAAK,yBAAyB;AAC9B,YAAA,KAAK,4BAA4B;AACjC,YAAA,KAAK,mCAAmC;gBACpC;AACJ,YAAA;AACI,gBAAA,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE;;;AAI7D,IAAA,YAAY,CAAC,CAA4B,EAAA;AACrC,QAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC;;AAG9C,IAAA,gBAAgB,CAAC,CAA4B,EAAA;AACzC,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG;QAC9B,UAAU,CAAC,cAAc,EAAE;AAE3B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACnB;;QAGJ,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;QACxC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,UAAU,CAAC;AAC/D,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;YACvB;;AAGJ,QAAA,MAAM,QAAQ,GAAG;YACb,CAAC,EAAE,UAAU,CAAC,CAAC;YACf,CAAC,EAAE,UAAU,CAAC;SACjB;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC3C,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;YACpH;;QAGJ,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE;AACvD,YAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE;YAC/B,SAAS;YACT,QAAQ;YACR,UAAU;YACV,gBAAgB,EAAE,IAAI,CAAC;AAC1B,SAAA,CAAC;;AAGN,IAAA,UAAU,CAAC,CAA4B,EAAA;AACnC,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG;QAC9B,UAAU,CAAC,cAAc,EAAE;AAC3B,QAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE;AAC9C,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO;AAChC,QAAA,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAQ,CAAC,aAAa,EAAE;AACxE,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,oBAAoB,CAAC,IAAI,KAAK,UAAU,KAAK,wBAAwB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAAE;QACvH,QAAQ,UAAU;YACd,KAAK,uBAAuB,EAAE;AAC1B,gBAAA,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE;gBACjD,IAAI,CAAC,SAAS,EAAE;gBAChB;;YAEJ,KAAK,4BAA4B,EAAE;gBAC/B,MAAM,aAAa,GAAG,OAAQ,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,EAAE,GAAG;AAC/D,gBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;gBAChC;;YAEJ,KAAK,mCAAmC,EAAE;AACtC,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,cAAc,KAAK,qBAAqB,CAAC,GAAG;AACvF,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC;gBAChC;;YAEJ,KAAK,yBAAyB,EAAE;AAC5B,gBAAA,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE;AACjD,gBAAA,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,aAAa,EAAG;gBACnE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,qBAAqB,EAAE;AACrE,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;AAC1D,iBAAA,CAAC;gBACF;;AAEJ,YAAA,KAAK,wBAAwB;gBACzB,UAAU,CAAC,cAAc,EAAE;gBAC3B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;gBACzC,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,WAAW,CAAC;gBACtD,IAAI,OAAO,EAAE;oBACT,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE;AAC/C,oBAAA,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,aAAa,EAAG;oBAChF,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,qBAAqB,EAAE;AAErE,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;qBAC9C;AACD,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;qBAC1D;oBAED,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAgB;oBAC3F,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE;AACrD,wBAAA,OAAO,EAAE,OAAO;AAChB,wBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,wBAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE;wBAC/B,QAAQ;AACR,wBAAA,UAAU,EAAE,UAAU;wBACtB;AACH,qBAAA,CAAC;;gBAEN;;;AAIZ,IAAA,aAAa,CAAC,CAA4B,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACnB;;QAEJ,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;QACzC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,WAAW,CAAC;AAChE,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;YACvB;;QAEJ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC;AAC/C,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;QAC5B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YAC1C;;QAEJ,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE;gBACtD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,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,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;AAC/B,gBAAA,gBAAgB,EAAE,CAAC,KAAmC,KAAI;AACtD,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAE1C,aAAA,CAAC;SACL,EAAE,CAAC,CAAC;;IAGD,SAAS,GAAA;AACb,QAAA,SAAS,CAAa,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;AACrE,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,CAAa,KAAI;YACzB,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE;YAC9C,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AACnF,SAAC,CAAC;;IAwBF,mBAAmB,GAAA;AACvB,QAAA,SAAS,CAAa,IAAI,CAAC,gBAAgB,EAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACpF,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACb,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC5B,SAAC,CAAC;AAEN,QAAA,SAAS,CAAa,IAAI,CAAC,cAAc,EAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AAClF,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACb,YAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AAC1B,SAAC,CAAC;;IAGF,mBAAmB,GAAA;QACvB,SAAS,CAAa,QAAQ,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACzD,aAAA,IAAI,CACD,MAAM,CACF,CAAC,CAAC,KACE,CAAC,CAAC,MAAM,YAAY,OAAO;YAC3B,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3C,YAAA,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAChE,EACD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aAEtC,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC;AAC1C,YAAA,IAAI,CAAC,2BAA2B,CAAC,cAAc,EAAE;AACrD,SAAC,CAAC;;IAGF,wBAAwB,CAAC,eAAwB,EAAE,kBAA8C,EAAA;AACrG,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;;AAkBxC,IAAA,cAAc,CAAC,CAAM,EAAA;AACzB,QAAA,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,MAAM;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,cAAc,CAAC;YACjC,SAAS;AACT,YAAA,WAAW,EAAE;AAChB,SAAA,CAAC;QACF,IAAI,CAAC,cAAc,EAAE;;IAGjB,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;AACnC,SAAA,CAAC;;IAGE,uBAAuB,GAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;YAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW;YAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,GAAG,+BAA+B;YACjF,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,cAAc,IAAI,UAAU,EAAE;AAC9B,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;gBACvD;;AAER,SAAC,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;;IAGhD,qBAAqB,GAAA;AACzB,QAAA,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAG;AACjE,QAAA,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC,cAAe,CAAC;QAChF,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,EAAE;QAErE,IAAI,UAAU,KAAK,aAAa,IAAI,QAAQ,IAAI,OAAO,EAAE;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC;YAE/C,IAAI,CAAC,KAAK,EAAE;gBACR;;AAGJ,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;YAC5B,MAAM,gBAAgB,GAAG,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,IAAI;AAChG,YAAA,MAAM,yBAAyB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,KAAK;YAC3G,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC;AAElE,YAAA,IAAI,WAAW,IAAI,yBAAyB,EAAE;AAC1C,gBAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE;;AAGlD,YAAA,IAAI,CAAC,WAAW,IAAI,CAAC,kBAAkB,EAAE;AACrC,gBAAA,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE;gBAC9C;;AAGJ,YAAA,IAAI,WAAW,KAAK,CAAC,CAAC,yBAAyB,IAAI,kBAAkB,KAAK,CAAC,kBAAkB,CAAC,EAAE;gBAC5F;;YAGJ,UAAU,CAAC,MAAK;gBACZ,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE;oBACtD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,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,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;AAC/B,oBAAA,WAAW,EAAE,IAAI;AACjB,oBAAA,gBAAgB,EAAE,CAAC,KAAmC,KAAI;AACtD,wBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAE1C,iBAAA,CAAC;AACN,aAAC,CAAC;;aACC;;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;;;;IAKlD,sBAAsB,GAAA;AAC1B,QAAA,SAAS,CAAgB,QAAQ,EAAE,SAAS;AACvC,aAAA,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,EAC/F,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEtC,aAAA,SAAS,CAAC,OAAO,KAAK,KAAI;AACvB,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBACnB,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;gBACtD,IAAI,aAAa,EAAE;AACf,oBAAA,gBAAgB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAK;AACtC,wBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,IAAI;wBACpE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,gBAAgB,CAAA,KAAA,CAAO,EAAE,SAAS,EAAE;AAClE,4BAAA,SAAS,EAAE;AACd,yBAAA,CAAC;AACN,qBAAC,CAAC;;;AAEH,iBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;gBAC1B,KAAK,CAAC,cAAc,EAAE;AAEtB,gBAAA,MAAM,OAAO,GAAwB;AACjC,oBAAA,gBAAgB,EAAE,CAAC,IAA6B,KAAI;AAChD,wBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;qBACrC;AACD,oBAAA,QAAQ,EAAE,CAAC,KAAmB,KAAI;AAC9B,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;qBAC9B;AACD,oBAAA,QAAQ,EAAE,CAAC,IAAqB,KAAI;AAChC,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;qBAC7B;AACD,oBAAA,SAAS,EAAE,CAAC,IAAsB,KAAI;wBAClC,IAAI,CAAC,SAAS,EAAE;;iBAEvB;AAED,gBAAA,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,KAAI;oBAC1D,IAAI,CAAC,cAAc,EAAE;wBACjB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE;AAC/C,4BAAA,SAAS,EAAE;AACd,yBAAA,CAAC;;AAEV,iBAAC,CAAC;;AAEV,SAAC,CAAC;;IAGF,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE;AAChF,YAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC;gBAClC,IAAI,EAAE,QAAQ,CAAC,KAAK;AACpB,gBAAA,SAAS,EAAE,IAAI,CAAC,2BAA2B,CAAC,cAAc;AAC1D,gBAAA,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAChC,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU;AAC9B,aAAA,CAAC;;;IAIF,iBAAiB,GAAA;QACrB,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa;AACxD,QAAA,IAAI,UAAU,GAAG,aAAa,EAAE,UAAU,IAAI,CAAC;AAC/C,QAAA,IAAI,SAAS,GAAG,WAAW,EAAE,SAAS,IAAI,CAAC;QAC3C,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE;;AAG1C,IAAA,OAAO,CAAC,IAAiB,EAAA;AACrB,QAAA,QAAQ,IAAI,CAAC,IAAI;YACb,KAAK,QAAQ,CAAC,KAAK;gBACf,IAAI,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAChD,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,wBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;4BAClB,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3B,4BAAA,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC;AACjC,yBAAA,CAAC;;;gBAGV;YACJ,KAAK,QAAQ,CAAC,WAAW;gBACrB;YACJ,KAAK,QAAQ,CAAC,MAAM;gBAChB;;AAER,QAAA,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE;;+GA5mBvC,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAW,EAFT,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAAA,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EC9E9F,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,EAAA,wsCA0BA,EDmDc,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,6LAAE,oBAAoB,EAAA,QAAA,EAAA,eAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAGtC,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;AACV,qBAAA,EAAA,OAAA,EACQ,CAAC,eAAe,EAAE,oBAAoB,CAAC,EAAA,SAAA,EACrC,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAA,QAAA,EAAA,wsCAAA,EAAA;;;AE9E9F;;AAEG;;;;"}
|