cmat 0.0.83 → 0.0.85

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.
Files changed (39) hide show
  1. package/fesm2022/cmat-components-code-editor.mjs.map +1 -1
  2. package/fesm2022/cmat-components-custom-formly.mjs +1 -2
  3. package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
  4. package/fesm2022/cmat-components-date-range.mjs.map +1 -1
  5. package/fesm2022/cmat-components-date-time-display.mjs.map +1 -1
  6. package/fesm2022/cmat-components-drawer.mjs +0 -2
  7. package/fesm2022/cmat-components-drawer.mjs.map +1 -1
  8. package/fesm2022/cmat-components-empty-state.mjs.map +1 -1
  9. package/fesm2022/cmat-components-file-preview.mjs.map +1 -1
  10. package/fesm2022/cmat-components-filter-toolbar.mjs.map +1 -1
  11. package/fesm2022/cmat-components-form-actions.mjs.map +1 -1
  12. package/fesm2022/cmat-components-inline-loading.mjs.map +1 -1
  13. package/fesm2022/cmat-components-org-chart.mjs.map +1 -1
  14. package/fesm2022/cmat-components-page-header.mjs.map +1 -1
  15. package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
  16. package/fesm2022/cmat-components-qrcode.mjs.map +1 -1
  17. package/fesm2022/cmat-components-rich-text-editor.mjs.map +1 -1
  18. package/fesm2022/cmat-components-select-search.mjs.map +1 -1
  19. package/fesm2022/cmat-components-select-table.mjs.map +1 -1
  20. package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
  21. package/fesm2022/cmat-components-skeleton.mjs.map +1 -1
  22. package/fesm2022/cmat-components-status-tag.mjs.map +1 -1
  23. package/fesm2022/cmat-components-table-toolbar.mjs.map +1 -1
  24. package/fesm2022/cmat-components-upload.mjs +23 -10
  25. package/fesm2022/cmat-components-upload.mjs.map +1 -1
  26. package/fesm2022/cmat-directives-data-exporter.mjs.map +1 -1
  27. package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
  28. package/fesm2022/cmat-pipes-group-by.mjs.map +1 -1
  29. package/fesm2022/cmat-services-local-storage.mjs.map +1 -1
  30. package/fesm2022/cmat.mjs +24 -14
  31. package/fesm2022/cmat.mjs.map +1 -1
  32. package/package.json +16 -16
  33. package/types/cmat-components-date-range.d.ts +1 -0
  34. package/types/cmat-components-drawer.d.ts +0 -1
  35. package/types/cmat-components-upload.d.ts +48 -50
  36. package/types/cmat-directives-data-exporter.d.ts +1 -1
  37. package/types/cmat-pipes-group-by.d.ts +1 -0
  38. package/types/cmat-services-local-storage.d.ts +5 -1
  39. package/types/cmat.d.ts +40 -39
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-components-select-tree.mjs","sources":["../../../projects/cmat/components/select-tree/select-tree.flatnode.ts","../../../projects/cmat/components/select-tree/select-tree.component.ts","../../../projects/cmat/components/select-tree/select-tree.component.html","../../../projects/cmat/components/select-tree/select-tree.node.ts","../../../projects/cmat/components/select-tree/cmat-components-select-tree.ts"],"sourcesContent":["export class CmatSelectTreeFlatNode {\r\n id: string | number;\r\n name: string;\r\n level: number;\r\n expandable: boolean;\r\n}\r\n","/* eslint-disable @typescript-eslint/member-ordering */\r\nimport { coerceBooleanProperty, BooleanInput } from '@angular/cdk/coercion';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { CdkTree } from '@angular/cdk/tree';\r\nimport { NgClass } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, DestroyRef, HostBinding, HostListener, Input, OnChanges, OnDestroy, SimpleChanges, ViewChild, ViewEncapsulation, inject, signal } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule, NgControl } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelect, MatSelectModule } from '@angular/material/select';\r\nimport { MatTreeModule } from '@angular/material/tree';\r\nimport { CmatSelectSearchComponent } from 'cmat/components/select-search';\r\nimport { isNil, isUndefined } from 'lodash-es';\r\nimport { Subject, debounceTime } from 'rxjs';\r\nimport { CmatSelectTreeFlatNode } from './select-tree.flatnode';\r\nimport { CmatSelectTreeNode } from './select-tree.node';\r\n\r\nlet NEXT_ID = 0;\r\n\r\ntype CmatSelectTreeValueItem = CmatSelectTreeNode | CmatSelectTreeFlatNode;\r\ntype CmatSelectTreeValue = CmatSelectTreeValueItem[] | CmatSelectTreeValueItem | null;\r\n\r\n@Component({\r\n selector: 'cmat-select-tree',\r\n templateUrl: './select-tree.component.html',\r\n styleUrls: ['./select-tree.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [{ provide: MatFormFieldControl, useExisting: CmatSelectTreeComponent }],\r\n exportAs: 'cmatSelectTree',\r\n imports: [MatIconModule, MatSelectModule, CmatSelectSearchComponent,\r\n ReactiveFormsModule, MatTreeModule, NgClass, MatButtonModule, MatCheckboxModule]\r\n})\r\nexport class CmatSelectTreeComponent implements MatFormFieldControl<any>, ControlValueAccessor, OnChanges, AfterViewInit, OnDestroy {\r\n @HostBinding('attr.id')\r\n @Input()\r\n public id = `cmat-select-tree-${NEXT_ID++}`;\r\n\r\n @Input() dataSource: CmatSelectTreeNode[];\r\n\r\n @Input() noEntriesFoundLabel = '无结果';\r\n\r\n @Input() showNoFoundLabel = true;\r\n\r\n @Input() multiple: boolean = false;\r\n\r\n @Input() overallSearchEnabled: boolean = true;\r\n\r\n @Input() canNull: boolean = false;\r\n\r\n @Input() customTriggerLabelFn?: (value: CmatSelectTreeFlatNode[]) => string;\r\n\r\n @Input() customTriggerLabelTemplate: string;\r\n\r\n @Input() expandable: boolean;\r\n\r\n @Input() showToggleAllCheckbox: boolean = false;\r\n\r\n @Input() compareWith: (o1: CmatSelectTreeNode | CmatSelectTreeFlatNode | null, o2: CmatSelectTreeNode | CmatSelectTreeFlatNode | null) => boolean = (o1, o2) => {\r\n return o1 && o2 ? o1?.name === o2?.name && o1?.id === o2?.id : o1 === o2;\r\n }\r\n\r\n flatNodeMap = new Map<CmatSelectTreeFlatNode, CmatSelectTreeNode>();\r\n\r\n nestedNodeMap = new Map<CmatSelectTreeNode, CmatSelectTreeFlatNode>();\r\n private readonly _flatNodeById = new Map<string | number, CmatSelectTreeFlatNode>();\r\n private readonly _parentFlatNodeById = new Map<string | number, CmatSelectTreeFlatNode | null>();\r\n private readonly _selectedFlatNodeIds = new Set<string | number>();\r\n\r\n checklistSelection = new SelectionModel<CmatSelectTreeFlatNode>(true);\r\n\r\n readonly treeDataSource = signal<CmatSelectTreeNode[]>([]);\r\n readonly dataFlatNodes = signal<CmatSelectTreeFlatNode[]>([]);\r\n\r\n overallFilterControl: FormControl = new FormControl();\r\n\r\n readonly isIndeterminate = signal(false);\r\n readonly isChecked = signal(false);\r\n\r\n readonly checkCount = signal(0);\r\n\r\n selectControl: FormControl = new FormControl();\r\n readonly matSelectData = signal<CmatSelectTreeFlatNode[]>([]);\r\n\r\n readonly stateChanges: Subject<void> = new Subject<void>();\r\n focused: boolean = false;\r\n touched: boolean = false;\r\n\r\n ngControl = inject(NgControl, { optional: true, self: true })!;\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n private _matSelect: MatSelect;\r\n\r\n constructor() {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n @ViewChild('componentTree', { static: false }) tree: CdkTree<CmatSelectTreeNode>;\r\n\r\n @ViewChild('componentSelect', { static: false }) set matSelect(m: MatSelect) {\r\n const existsSelect = !isUndefined(this._matSelect);\r\n this._matSelect = m;\r\n\r\n if (!existsSelect) {\r\n this._init(this.value);\r\n\r\n this._matSelect.setDisabledState(this.disabled);\r\n }\r\n }\r\n\r\n @HostListener('document:click')\r\n clickedOut(): void {\r\n if (!this._matSelect?.panelOpen) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n getLevel = (dataNode: CmatSelectTreeFlatNode): number => dataNode.level;\r\n\r\n childrenAccessor: (node: CmatSelectTreeNode) => CmatSelectTreeNode[] = (node: CmatSelectTreeNode) => node.children ?? [];\r\n\r\n hasChild: (_: number, node: CmatSelectTreeNode) => boolean = (_: number, node: CmatSelectTreeNode) => !!node.children && node.children.length > 0;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // 数据源变化时,重建节点索引和缓存\r\n if (changes['dataSource']) {\r\n this.flatNodeMap.clear();\r\n this.nestedNodeMap.clear();\r\n this._flatNodeById.clear();\r\n this._parentFlatNodeById.clear();\r\n\r\n this.treeDataSource.set(this.dataSource);\r\n this.dataFlatNodes.set(this._getFlattenNodes(this.dataSource));\r\n this.matSelectData.set([...this.dataFlatNodes()]);\r\n\r\n if (this.dataSource.length > 0) {\r\n this._init(this.value);\r\n }\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // 初始化下拉面板样式,并监听筛选输入变化\r\n let panelClass: string[] = ['overflow-y-auto','scrollbar-custom'];\r\n\r\n if (this._matSelect.panelClass) {\r\n if (Array.isArray(this._matSelect.panelClass)) {\r\n this._matSelect.panelClass = [this.matSelect.panelClass,...panelClass];\r\n } else if (typeof this._matSelect.panelClass === 'string') {\r\n this._matSelect.panelClass = [this._matSelect.panelClass,...panelClass];\r\n } else if (typeof this._matSelect.panelClass === 'object') {\r\n const panelClassEntries = this._matSelect.panelClass as Record<string, boolean>;\r\n\r\n panelClass.forEach((i) => {\r\n panelClassEntries[i] = true;\r\n });\r\n }\r\n } else {\r\n this._matSelect.panelClass = panelClass;\r\n }\r\n\r\n this.overallFilterControl.valueChanges\r\n .pipe(takeUntilDestroyed(this._destroyRef), debounceTime(200))\r\n .subscribe(() => {\r\n const filterValue = `${this.overallFilterControl.value ?? ''}`.toLowerCase();\r\n const dataClone: CmatSelectTreeNode[] = this._cloneTreeNodes(this.dataSource);\r\n\r\n const arr: number[] = [];\r\n\r\n for (let i = dataClone.length - 1; i >= 0; i--) {\r\n if (!this._applyColumnLevelFilters(dataClone[i], filterValue)) {\r\n arr.push(i);\r\n }\r\n }\r\n arr.forEach((v) => { dataClone.splice(v, 1); });\r\n\r\n this.treeDataSource.set(dataClone);\r\n this.dataFlatNodes.set(this._getFlattenNodes(dataClone));\r\n this.matSelectData.set([...this.dataFlatNodes()]);\r\n\r\n if (this.expandable) {\r\n this.tree.expandAll();\r\n }\r\n this._updateSelect(this.checklistSelection.selected);\r\n\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n }\r\n\r\n @Input()\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n private _placeholder: string = '';\r\n\r\n @Input()\r\n get value(): CmatSelectTreeValue {\r\n return this._value;\r\n }\r\n set value(value: CmatSelectTreeValue) {\r\n if (value !== this.value) {\r\n this._value = value;\r\n\r\n this.stateChanges.next();\r\n\r\n this._onModelChange(value);\r\n }\r\n }\r\n protected _value: CmatSelectTreeValue;\r\n\r\n get empty(): boolean {\r\n return !this._value;\r\n }\r\n\r\n get errorState(): boolean {\r\n if (this.ngControl == null)\r\n return false;\r\n\r\n return (this.touched && this.ngControl?.invalid) ?? false;\r\n }\r\n\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n @Input()\r\n get required(): boolean { return this._required; }\r\n set required(value: BooleanInput) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n protected _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n if (!isNil(this.ngControl?.disabled)) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: BooleanInput) {\r\n this._disabled = coerceBooleanProperty(value);\r\n\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n protected _disabled = false;\r\n\r\n registerOnChange(fn: (value: CmatSelectTreeValue) => void): void {\r\n this._onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouchedChange = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this._matSelect?.setDisabledState(isDisabled);\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n this._matSelect?.setDescribedByIds(ids);\r\n }\r\n\r\n onContainerClick(): void {\r\n if (!this.focused) {\r\n this._matSelect?.focus();\r\n }\r\n }\r\n\r\n onFocusIn(): void {\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onFocusOut(event: FocusEvent): void {\r\n const relatedTarget = event.relatedTarget;\r\n const panelElement = this._matSelect.panel.nativeElement as HTMLElement;\r\n\r\n if (!(relatedTarget instanceof Element) || !panelElement.contains(relatedTarget)) {\r\n this.touched = true;\r\n this.focused = false;\r\n this._onTouchedChange();\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n writeValue(value: CmatSelectTreeValue): void {\r\n this._init(value);\r\n }\r\n\r\n simpleTriggerLabelFn(value: CmatSelectTreeFlatNode[]): string {\r\n return value.map((node) => {\r\n\r\n if (isNil(node)) {\r\n return '';\r\n }\r\n if (isNil(this.customTriggerLabelTemplate)\r\n || typeof this.customTriggerLabelTemplate !== 'string'\r\n || this.customTriggerLabelTemplate.trim().length === 0) {\r\n return `${node.id}`;\r\n }\r\n let atLeastPartialSubstitution = false;\r\n const nodeRecord = node as CmatSelectTreeFlatNode & Record<string, unknown>;\r\n const substitution: string = this.customTriggerLabelTemplate.replace(/[$][{]([^}]+)[}]/g, (_, key) => {\r\n const nodeValue = nodeRecord[key as keyof typeof nodeRecord];\r\n\r\n if (isNil(nodeValue) || (typeof nodeValue !== 'string' && typeof nodeValue !== 'number' && typeof nodeValue !== 'boolean' && typeof nodeValue !== 'bigint')) {\r\n return '';\r\n }\r\n\r\n atLeastPartialSubstitution = true;\r\n return String(nodeValue);\r\n });\r\n if (atLeastPartialSubstitution === false) {\r\n return `${node.id}`;\r\n }\r\n return substitution.trim();\r\n }).join(', ');\r\n }\r\n\r\n openedChange(opened: boolean): void {\r\n // 面板打开/关闭时,同步树节点和选中值\r\n if (opened) {\r\n if (this.multiple) {\r\n this.checklistSelection.selected.forEach((node) => {\r\n if (node.expandable) {\r\n const descendants = this._getDescendants(node);\r\n this.checklistSelection.select(...descendants);\r\n }\r\n });\r\n\r\n this._updateSelect(this.checklistSelection.selected);\r\n }\r\n\r\n if (this.expandable) {\r\n this.tree.expandAll();\r\n }\r\n } else {\r\n setTimeout(() => {\r\n if (!isNil(this.checklistSelection.selected)) {\r\n\r\n if (this.multiple) {\r\n const findOutNode: CmatSelectTreeFlatNode[] = [];\r\n this.checklistSelection.selected.forEach((node) => {\r\n const parentNode = this._getParentNode(node);\r\n if (parentNode && this.checklistSelection.isSelected(parentNode)) {\r\n findOutNode.push(node);\r\n }\r\n });\r\n\r\n findOutNode.forEach((node) => {\r\n this.checklistSelection.deselect(node);\r\n });\r\n\r\n this.value = this.checklistSelection.selected.length > 0 ? [...this.checklistSelection.selected] : null;\r\n } else {\r\n if (this.checklistSelection.selected && this.checklistSelection.selected.length > 0) {\r\n this.value = { ...this.checklistSelection.selected[0] };\r\n }\r\n }\r\n\r\n this._matSelect.writeValue(this.value);\r\n this._matSelect._onChange(this.value);\r\n }\r\n }, 100);\r\n }\r\n }\r\n \r\n descendantsAllSelected(node: CmatSelectTreeFlatNode): boolean {\r\n // 判断当前节点的所有后代是否都已选中\r\n const descendants = this._getDescendants(node);\r\n return descendants.every(child =>\r\n this._selectedFlatNodeIds.has(child.id)\r\n );\r\n }\r\n\r\n \r\n descendantsPartiallySelected(node: CmatSelectTreeFlatNode): boolean {\r\n // 判断当前节点是否处于半选状态\r\n const descendants = this._getDescendants(node);\r\n const result = descendants.some(child => this._selectedFlatNodeIds.has(child.id));\r\n return result && !descendants.every(child => this._selectedFlatNodeIds.has(child.id));\r\n }\r\n\r\n \r\n todoItemSelectionToggle(event: MouseEvent, node: CmatSelectTreeFlatNode): void {\r\n // 切换分支节点的选中状态\r\n event.stopPropagation();\r\n if (this.multiple) {\r\n this.checklistSelection.toggle(node);\r\n\r\n const descendants = this._getDescendants(node);\r\n\r\n if (this.checklistSelection.isSelected(node)) {\r\n this.checklistSelection.select(...descendants);\r\n\r\n } else {\r\n this.checklistSelection.deselect(...descendants);\r\n }\r\n\r\n this._checkAllParentsSelection(node);\r\n\r\n this._syncSelectedFlatNodeIds();\r\n this._updateCheckState();\r\n } else {\r\n this.checklistSelection.clear();\r\n this.checklistSelection.select(node);\r\n\r\n this._syncSelectedFlatNodeIds();\r\n this._matSelect.close();\r\n }\r\n }\r\n\r\n \r\n todoLeafItemSelectionToggle(event: MouseEvent, node: CmatSelectTreeFlatNode): void {\r\n // 切换叶子节点的选中状态\r\n event.stopPropagation();\r\n if (this.multiple) {\r\n this.checklistSelection.toggle(node);\r\n\r\n this._checkAllParentsSelection(node);\r\n\r\n this._syncSelectedFlatNodeIds();\r\n this._updateCheckState();\r\n } else {\r\n this.checklistSelection.clear();\r\n this.checklistSelection.select(node);\r\n\r\n this._syncSelectedFlatNodeIds();\r\n this._matSelect.close();\r\n }\r\n }\r\n\r\n clearSelection(): void {\r\n // 清空所有选择\r\n this.checklistSelection.clear();\r\n this.isChecked.set(false);\r\n this.isIndeterminate.set(false);\r\n\r\n this.checkCount.set(0);\r\n this._selectedFlatNodeIds.clear();\r\n\r\n this.value = null;\r\n this._matSelect.writeValue(null);\r\n this._matSelect._onChange(null);\r\n }\r\n\r\n\r\n\r\n toggleSelectAll(selectAllValue: boolean): void {\r\n // 全选或取消全选\r\n if (selectAllValue) {\r\n this.checklistSelection.select(...this.dataFlatNodes());\r\n this.isIndeterminate.set(false);\r\n this.isChecked.set(true);\r\n\r\n this._syncSelectedFlatNodeIds();\r\n } else {\r\n this.checklistSelection.clear();\r\n this.isChecked.set(false);\r\n this.isIndeterminate.set(false);\r\n\r\n this.checkCount.set(0);\r\n this._selectedFlatNodeIds.clear();\r\n }\r\n }\r\n\r\n getChecklistSelectionIsSelected(i: CmatSelectTreeNode): boolean {\r\n // 根据原始节点判断是否已选中\r\n const flatNode = this.nestedNodeMap.get(i);\r\n return !!flatNode && this._selectedFlatNodeIds.has(flatNode.id);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onModelChange: (value: CmatSelectTreeValue) => void = () => { };\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onTouchedChange: () => void = () => { };\r\n\r\n private _init(v: CmatSelectTreeValue): void {\r\n // 初始化内部值和选中状态\r\n if (this.dataSource.length > 0 && this.treeDataSource().length > 0 && this._matSelect) {\r\n if (this.expandable) {\r\n this.tree.expandAll();\r\n }\r\n\r\n if (!isNil(v)) {\r\n this._updateChecklistSelection(v);\r\n } else {\r\n this.checklistSelection.clear();\r\n }\r\n\r\n if (Array.isArray(v) && v.length > 0) {\r\n\r\n if (this.multiple) {\r\n const findOutNode: CmatSelectTreeFlatNode[] = [];\r\n this.checklistSelection.selected.forEach((node) => {\r\n const parentNode = this._getParentNode(node);\r\n if (parentNode && this.checklistSelection.isSelected(parentNode)) {\r\n findOutNode.push(node);\r\n }\r\n });\r\n\r\n findOutNode.forEach((node) => {\r\n this.checklistSelection.deselect(node);\r\n });\r\n\r\n this.value = [...this.checklistSelection.selected];\r\n\r\n } else {\r\n this.value = this.checklistSelection.selected.length > 0 ? { ...this.checklistSelection.selected[0] } : null;\r\n }\r\n\r\n } else {\r\n this.value = v;\r\n }\r\n this._matSelect.writeValue(this.value);\r\n this._matSelect._onChange(this.value);\r\n\r\n this._updateCheckState();\r\n\r\n } else {\r\n this.value = v;\r\n }\r\n }\r\n private _checkAllParentsSelection(node: CmatSelectTreeFlatNode): void {\r\n // 级联更新父节点的选中状态\r\n let parent: CmatSelectTreeFlatNode | null = this._getParentNode(node);\r\n while (parent) {\r\n parent.expandable = true;\r\n this.tree.expand(this.flatNodeMap.get(parent)!);\r\n this._checkRootNodeSelection(parent);\r\n parent = this._getParentNode(parent);\r\n }\r\n }\r\n\r\n \r\n private _checkRootNodeSelection(node: CmatSelectTreeFlatNode): void {\r\n // 根据子节点状态同步父节点选中状态\r\n const nodeSelected = this.checklistSelection.isSelected(node);\r\n const descendants = this._getDescendants(node);\r\n const descAllSelected = descendants.every(child =>\r\n this.checklistSelection.isSelected(child)\r\n );\r\n if (nodeSelected && !descAllSelected) {\r\n this.checklistSelection.deselect(node);\r\n } else if (!nodeSelected && (descAllSelected || descendants.length === 0)) {\r\n this.checklistSelection.select(node);\r\n }\r\n\r\n this._updateCheckState();\r\n }\r\n\r\n private _getParentNode(node: CmatSelectTreeFlatNode): CmatSelectTreeFlatNode | null {\r\n // 通过缓存获取父节点\r\n return this._parentFlatNodeById.get(node.id) ?? null;\r\n }\r\n\r\n private _updateChecklistSelection(value: CmatSelectTreeValueItem[] | CmatSelectTreeValueItem): void {\r\n // 根据外部值同步内部选择状态\r\n this.checklistSelection.clear();\r\n if (!isNil(value)) {\r\n const valueArray = !Array.isArray(value) ? [value] : value;\r\n valueArray.forEach((item) => {\r\n const nodeFound = this._flatNodeById.get(item.id);\r\n\r\n if (isNil(nodeFound)) {\r\n return;\r\n }\r\n\r\n this.checklistSelection.select(nodeFound);\r\n });\r\n\r\n this._syncSelectedFlatNodeIds();\r\n }\r\n }\r\n\r\n private _updateSelect(value: CmatSelectTreeValueItem[] | CmatSelectTreeValueItem): void {\r\n // 根据当前值同步显示选择\r\n if (!isNil(value)) {\r\n const valueArray = !Array.isArray(value) ? [value] : value;\r\n\r\n if (this.overallSearchEnabled) // 有搜索功能时,将选中节点转换为当前数据源节点\r\n {\r\n valueArray.forEach((item) => {\r\n const nodeFound = this._flatNodeById.get(item.id);\r\n if (isNil(nodeFound)) {\r\n return;\r\n }\r\n\r\n this.checklistSelection.deselect(item as CmatSelectTreeFlatNode);\r\n\r\n this.checklistSelection.select(nodeFound);\r\n });\r\n }\r\n\r\n if (this.multiple) {\r\n this.checklistSelection.selected.forEach((item) => {\r\n this._checkAllParentsSelection(item);\r\n });\r\n }\r\n\r\n this._syncSelectedFlatNodeIds();\r\n this._updateCheckState();\r\n }\r\n }\r\n\r\n private _applyColumnLevelFilters(node: CmatSelectTreeNode, filter: string): boolean {\r\n // 递归过滤节点及其子节点\r\n let result = false;\r\n\r\n if (node?.children && node.children.length > 0) {\r\n for (let i = node.children.length - 1; i >= 0; i--) {\r\n const resultTemp = this._applyColumnLevelFilters(node.children[i], filter);\r\n\r\n if (!resultTemp) {\r\n node.children.splice(i, 1);\r\n }\r\n\r\n result = resultTemp || result;\r\n }\r\n }\r\n\r\n if (node?.children?.length === 0) {\r\n node.children = null;\r\n }\r\n\r\n const cellValue = node.name.toLowerCase();\r\n if (cellValue.includes(filter)) {\r\n result = true;\r\n }\r\n return result;\r\n }\r\n\r\n private _updateCheckState(): void {\r\n // 更新全选与半选状态\r\n if (this.showToggleAllCheckbox && this.dataSource.length > 0) {\r\n const selectedCount = this._selectedFlatNodeIds.size;\r\n this.checkCount.set(selectedCount);\r\n this.isIndeterminate.set(selectedCount < this.dataFlatNodes().length && selectedCount > 0);\r\n this.isChecked.set(selectedCount === this.dataFlatNodes().length && selectedCount > 0);\r\n }\r\n }\r\n\r\n private _getFlattenNodes(nodes: CmatSelectTreeNode[], i: number = 0, parent: CmatSelectTreeFlatNode | null = null): CmatSelectTreeFlatNode[] {\r\n // 将树结构平铺为节点列表\r\n const flattenedNodes: CmatSelectTreeFlatNode[] = [];\r\n\r\n for (const node of nodes) {\r\n const flatNode = this._transformer(node, i, parent);\r\n\r\n flattenedNodes.push(flatNode);\r\n if (node.children) {\r\n flattenedNodes.push(...this._getFlattenNodes(node.children, i + 1, flatNode));\r\n }\r\n }\r\n return flattenedNodes;\r\n }\r\n\r\n private _cloneTreeNodes(nodes: CmatSelectTreeNode[]): CmatSelectTreeNode[] {\r\n return nodes.map(node => ({\r\n id: node.id,\r\n name: node.name,\r\n children: node.children ? this._cloneTreeNodes(node.children) : null\r\n }));\r\n }\r\n\r\n private _syncSelectedFlatNodeIds(): void {\r\n // 同步选中节点 ID 缓存\r\n this._selectedFlatNodeIds.clear();\r\n\r\n this.checklistSelection.selected.forEach((node) => {\r\n this._selectedFlatNodeIds.add(node.id);\r\n });\r\n\r\n this.checkCount.set(this._selectedFlatNodeIds.size);\r\n }\r\n\r\n private _transformer = (node: CmatSelectTreeNode, level: number, parent: CmatSelectTreeFlatNode | null = null): CmatSelectTreeFlatNode => {\r\n // 构建平铺节点并缓存映射关系\r\n const existingNode = this.nestedNodeMap.get(node);\r\n const flatNode = existingNode?.name === node.name\r\n ? existingNode\r\n : new CmatSelectTreeFlatNode();\r\n flatNode.id = node.id;\r\n flatNode.name = node.name;\r\n flatNode.level = level;\r\n flatNode.expandable = !!node.children && node.children.length > 0;\r\n this.flatNodeMap.set(flatNode, node);\r\n this.nestedNodeMap.set(node, flatNode);\r\n this._flatNodeById.set(flatNode.id, flatNode);\r\n this._parentFlatNodeById.set(flatNode.id, parent);\r\n return flatNode;\r\n };\r\n\r\n private _getDescendants(dataNode: CmatSelectTreeFlatNode): CmatSelectTreeFlatNode[] {\r\n // 收集当前节点的所有后代\r\n const node = this.flatNodeMap.get(dataNode);\r\n\r\n if (!node?.children?.length) {\r\n return [];\r\n }\r\n\r\n const descendants: CmatSelectTreeFlatNode[] = [];\r\n\r\n const collect = (children: CmatSelectTreeNode[]): void => {\r\n for (const child of children) {\r\n const flatNode = this.nestedNodeMap.get(child);\r\n\r\n if (flatNode) {\r\n descendants.push(flatNode);\r\n }\r\n\r\n if (child.children?.length) {\r\n collect(child.children);\r\n }\r\n }\r\n };\r\n\r\n collect(node.children);\r\n\r\n return descendants;\r\n }\r\n\r\n}","@if(multiple){\r\n<mat-select #componentSelect multiple [placeholder]=\"placeholder\" [required]=\"required\"\r\n [formControl]=\"selectControl\" [compareWith]=\"compareWith\" (openedChange)=\"openedChange($event)\" (focusin)=\"onFocusIn()\">\r\n <mat-select-trigger>\r\n @if (!customTriggerLabelFn) {\r\n {{ simpleTriggerLabelFn(checklistSelection.selected) }}\r\n } @else {\r\n {{ customTriggerLabelFn(checklistSelection.selected) }}\r\n }\r\n </mat-select-trigger>\r\n\r\n <div (focusout)=\"onFocusOut($event)\">\r\n @if (overallSearchEnabled) {\r\n <mat-option>\r\n <cmat-select-search [showNoFoundLabel]=\"showNoFoundLabel\" [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n [formControl]=\"overallFilterControl\" [clearSearchInput]=\"true\"\r\n [toggleAllCheckboxIndeterminate]=\"isIndeterminate()\" [toggleAllCheckboxChecked]=\"isChecked()\"\r\n [showToggleAllCheckbox]=\"showToggleAllCheckbox&&multiple\" (toggleAll)=\"toggleSelectAll($event)\">\r\n </cmat-select-search>\r\n </mat-option>\r\n }\r\n @for (selectData of matSelectData(); track selectData.id) {\r\n <mat-option class=\"hidden\" [value]=\"selectData\">{{selectData.name}}</mat-option>\r\n }\r\n <mat-tree #componentTree [dataSource]=\"treeDataSource()\" [childrenAccessor]=\"childrenAccessor\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding\r\n [ngClass]=\"getChecklistSelectionIsSelected(node)?'selected':''\"\r\n (click)=\"todoLeafItemSelectionToggle($event,nestedNodeMap.get(node)!)\">\r\n <button type=\"button\" matIconButton disabled>\r\n\r\n </button>\r\n <mat-checkbox class=\"checklist-leaf-node text-current\" [color]=\"'primary'\"\r\n [checked]=\"getChecklistSelectionIsSelected(node)\">{{node.name}}</mat-checkbox>\r\n\r\n </mat-tree-node>\r\n\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding\r\n [ngClass]=\"getChecklistSelectionIsSelected(node)?'selected':''\"\r\n (click)=\"todoItemSelectionToggle($event,nestedNodeMap.get(node)!)\">\r\n <button type=\"button\" matIconButton matTreeNodeToggle [attr.aria-label]=\"'toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\"\r\n [svgIcon]=\"componentTree.isExpanded(node) ? 'mat_outline:expand_more' : 'mat_outline:chevron_right'\">\r\n </mat-icon>\r\n </button>\r\n\r\n <mat-checkbox class=\"text-current\" [checked]=\"descendantsAllSelected(nestedNodeMap.get(node)!)\"\r\n [color]=\"'primary'\"\r\n [indeterminate]=\"descendantsPartiallySelected(nestedNodeMap.get(node)!)\">{{node.name}}</mat-checkbox>\r\n\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n</mat-select>\r\n}\r\n@else {\r\n<mat-select #componentSelect [placeholder]=\"placeholder\"\r\n [required]=\"required\" [formControl]=\"selectControl\" [compareWith]=\"compareWith\" (focusin)=\"onFocusIn()\" (openedChange)=\"openedChange($event)\">\r\n <mat-select-trigger>\r\n @if (!customTriggerLabelFn) {\r\n {{ simpleTriggerLabelFn(checklistSelection.selected) }}\r\n } @else {\r\n {{ customTriggerLabelFn(checklistSelection.selected) }}\r\n }\r\n </mat-select-trigger>\r\n\r\n <div (focusout)=\"onFocusOut($event)\">\r\n @if (overallSearchEnabled) {\r\n <mat-option>\r\n <cmat-select-search [showNoFoundLabel]=\"showNoFoundLabel\" [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n [formControl]=\"overallFilterControl\" [clearSearchInput]=\"true\"\r\n [toggleAllCheckboxIndeterminate]=\"isIndeterminate()\" [toggleAllCheckboxChecked]=\"isChecked()\"\r\n [showToggleAllCheckbox]=\"false\" (toggleAll)=\"toggleSelectAll($event)\">\r\n </cmat-select-search>\r\n </mat-option>\r\n }\r\n @if (canNull&&treeDataSource().length!==0) {\r\n <mat-option class=\"pl-10\" (click)=\"clearSelection()\">空</mat-option>\r\n }\r\n @for (selectData of matSelectData(); track selectData.id) {\r\n <mat-option class=\"hidden\" [value]=\"selectData\">{{selectData.name}}</mat-option>\r\n }\r\n\r\n <mat-tree #componentTree [dataSource]=\"treeDataSource()\" [childrenAccessor]=\"childrenAccessor\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding\r\n [ngClass]=\"getChecklistSelectionIsSelected(node)?'selected':''\"\r\n (click)=\"todoLeafItemSelectionToggle($event,nestedNodeMap.get(node)!)\">\r\n <button type=\"button\" matIconButton disabled>\r\n\r\n </button>\r\n <span class=\"text-current\">{{node.name}}</span>\r\n\r\n </mat-tree-node>\r\n\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding\r\n [ngClass]=\"getChecklistSelectionIsSelected(node)?'selected':''\"\r\n (click)=\"todoItemSelectionToggle($event,nestedNodeMap.get(node)!)\">\r\n <button type=\"button\" matIconButton matTreeNodeToggle [attr.aria-label]=\"'toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\"\r\n [svgIcon]=\"componentTree.isExpanded(node) ? 'mat_outline:expand_more' : 'mat_outline:chevron_right'\">\r\n </mat-icon>\r\n </button>\r\n <span class=\"text-current\">{{node.name}}</span>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n</mat-select>\r\n}\r\n","export class CmatSelectTreeNode {\r\n id: string | number;\r\n children: CmatSelectTreeNode[] | null;\r\n name: string;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cmat-components-select-tree.mjs","sources":["../../../projects/cmat/components/select-tree/select-tree.flatnode.ts","../../../projects/cmat/components/select-tree/select-tree.component.ts","../../../projects/cmat/components/select-tree/select-tree.component.html","../../../projects/cmat/components/select-tree/select-tree.node.ts","../../../projects/cmat/components/select-tree/cmat-components-select-tree.ts"],"sourcesContent":["export class CmatSelectTreeFlatNode {\r\n id: string | number;\r\n name: string;\r\n level: number;\r\n expandable: boolean;\r\n}\r\n","/* eslint-disable @typescript-eslint/member-ordering */\r\nimport { coerceBooleanProperty, BooleanInput } from '@angular/cdk/coercion';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { CdkTree } from '@angular/cdk/tree';\r\nimport { NgClass } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, DestroyRef, HostBinding, HostListener, Input, OnChanges, OnDestroy, SimpleChanges, ViewChild, ViewEncapsulation, inject, signal } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule, NgControl } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelect, MatSelectModule } from '@angular/material/select';\r\nimport { MatTreeModule } from '@angular/material/tree';\r\nimport { CmatSelectSearchComponent } from 'cmat/components/select-search';\r\nimport { isNil, isUndefined } from 'lodash-es';\r\nimport { Subject, debounceTime } from 'rxjs';\r\nimport { CmatSelectTreeFlatNode } from './select-tree.flatnode';\r\nimport { CmatSelectTreeNode } from './select-tree.node';\r\n\r\nlet NEXT_ID = 0;\r\n\r\ntype CmatSelectTreeValueItem = CmatSelectTreeNode | CmatSelectTreeFlatNode;\r\ntype CmatSelectTreeValue = CmatSelectTreeValueItem[] | CmatSelectTreeValueItem | null;\r\n\r\n@Component({\r\n selector: 'cmat-select-tree',\r\n templateUrl: './select-tree.component.html',\r\n styleUrls: ['./select-tree.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [{ provide: MatFormFieldControl, useExisting: CmatSelectTreeComponent }],\r\n exportAs: 'cmatSelectTree',\r\n imports: [MatIconModule, MatSelectModule, CmatSelectSearchComponent,\r\n ReactiveFormsModule, MatTreeModule, NgClass, MatButtonModule, MatCheckboxModule]\r\n})\r\nexport class CmatSelectTreeComponent implements MatFormFieldControl<any>, ControlValueAccessor, OnChanges, AfterViewInit, OnDestroy {\r\n @HostBinding('attr.id')\r\n @Input()\r\n public id = `cmat-select-tree-${NEXT_ID++}`;\r\n\r\n @Input() dataSource: CmatSelectTreeNode[];\r\n\r\n @Input() noEntriesFoundLabel:string = '无结果';\r\n\r\n @Input() showNoFoundLabel: boolean = true;\r\n\r\n @Input() multiple: boolean = false;\r\n\r\n @Input() overallSearchEnabled: boolean = true;\r\n\r\n @Input() canNull: boolean = false;\r\n\r\n @Input() customTriggerLabelFn?: (value: CmatSelectTreeFlatNode[]) => string;\r\n\r\n @Input() customTriggerLabelTemplate: string;\r\n\r\n @Input() expandable: boolean;\r\n\r\n @Input() showToggleAllCheckbox: boolean = false;\r\n\r\n @Input() compareWith: (o1: CmatSelectTreeNode | CmatSelectTreeFlatNode | null, o2: CmatSelectTreeNode | CmatSelectTreeFlatNode | null) => boolean = (o1, o2) => {\r\n return o1 && o2 ? o1?.name === o2?.name && o1?.id === o2?.id : o1 === o2;\r\n }\r\n\r\n flatNodeMap = new Map<CmatSelectTreeFlatNode, CmatSelectTreeNode>();\r\n\r\n nestedNodeMap = new Map<CmatSelectTreeNode, CmatSelectTreeFlatNode>();\r\n private readonly _flatNodeById = new Map<string | number, CmatSelectTreeFlatNode>();\r\n private readonly _parentFlatNodeById = new Map<string | number, CmatSelectTreeFlatNode | null>();\r\n private readonly _selectedFlatNodeIds = new Set<string | number>();\r\n\r\n checklistSelection = new SelectionModel<CmatSelectTreeFlatNode>(true);\r\n\r\n readonly treeDataSource = signal<CmatSelectTreeNode[]>([]);\r\n readonly dataFlatNodes = signal<CmatSelectTreeFlatNode[]>([]);\r\n\r\n overallFilterControl: FormControl = new FormControl();\r\n\r\n readonly isIndeterminate = signal(false);\r\n readonly isChecked = signal(false);\r\n\r\n readonly checkCount = signal(0);\r\n\r\n selectControl: FormControl = new FormControl();\r\n readonly matSelectData = signal<CmatSelectTreeFlatNode[]>([]);\r\n\r\n readonly stateChanges: Subject<void> = new Subject<void>();\r\n focused: boolean = false;\r\n touched: boolean = false;\r\n\r\n ngControl = inject(NgControl, { optional: true, self: true })!;\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n private _matSelect: MatSelect;\r\n\r\n constructor() {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n @ViewChild('componentTree', { static: false }) tree: CdkTree<CmatSelectTreeNode>;\r\n\r\n @ViewChild('componentSelect', { static: false }) set matSelect(m: MatSelect) {\r\n const existsSelect = !isUndefined(this._matSelect);\r\n this._matSelect = m;\r\n\r\n if (!existsSelect) {\r\n this._init(this.value);\r\n\r\n this._matSelect.setDisabledState(this.disabled);\r\n }\r\n }\r\n\r\n @HostListener('document:click')\r\n clickedOut(): void {\r\n if (!this._matSelect?.panelOpen) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n getLevel = (dataNode: CmatSelectTreeFlatNode): number => dataNode.level;\r\n\r\n childrenAccessor: (node: CmatSelectTreeNode) => CmatSelectTreeNode[] = (node: CmatSelectTreeNode) => node.children ?? [];\r\n\r\n hasChild: (_: number, node: CmatSelectTreeNode) => boolean = (_: number, node: CmatSelectTreeNode) => !!node.children && node.children.length > 0;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // 数据源变化时,重建节点索引和缓存\r\n if (changes['dataSource']) {\r\n this.flatNodeMap.clear();\r\n this.nestedNodeMap.clear();\r\n this._flatNodeById.clear();\r\n this._parentFlatNodeById.clear();\r\n\r\n this.treeDataSource.set(this.dataSource);\r\n this.dataFlatNodes.set(this._getFlattenNodes(this.dataSource));\r\n this.matSelectData.set([...this.dataFlatNodes()]);\r\n\r\n if (this.dataSource.length > 0) {\r\n this._init(this.value);\r\n }\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // 初始化下拉面板样式,并监听筛选输入变化\r\n let panelClass: string[] = ['overflow-y-auto','scrollbar-custom'];\r\n\r\n if (this._matSelect.panelClass) {\r\n if (Array.isArray(this._matSelect.panelClass)) {\r\n this._matSelect.panelClass = [this.matSelect.panelClass,...panelClass];\r\n } else if (typeof this._matSelect.panelClass === 'string') {\r\n this._matSelect.panelClass = [this._matSelect.panelClass,...panelClass];\r\n } else if (typeof this._matSelect.panelClass === 'object') {\r\n const panelClassEntries = this._matSelect.panelClass as Record<string, boolean>;\r\n\r\n panelClass.forEach((i) => {\r\n panelClassEntries[i] = true;\r\n });\r\n }\r\n } else {\r\n this._matSelect.panelClass = panelClass;\r\n }\r\n\r\n this.overallFilterControl.valueChanges\r\n .pipe(takeUntilDestroyed(this._destroyRef), debounceTime(200))\r\n .subscribe(() => {\r\n const filterValue = `${this.overallFilterControl.value ?? ''}`.toLowerCase();\r\n const dataClone: CmatSelectTreeNode[] = this._cloneTreeNodes(this.dataSource);\r\n\r\n const arr: number[] = [];\r\n\r\n for (let i = dataClone.length - 1; i >= 0; i--) {\r\n if (!this._applyColumnLevelFilters(dataClone[i], filterValue)) {\r\n arr.push(i);\r\n }\r\n }\r\n arr.forEach((v) => { dataClone.splice(v, 1); });\r\n\r\n this.treeDataSource.set(dataClone);\r\n this.dataFlatNodes.set(this._getFlattenNodes(dataClone));\r\n this.matSelectData.set([...this.dataFlatNodes()]);\r\n\r\n if (this.expandable) {\r\n this.tree.expandAll();\r\n }\r\n this._updateSelect(this.checklistSelection.selected);\r\n\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n }\r\n\r\n @Input()\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n private _placeholder: string = '';\r\n\r\n @Input()\r\n get value(): CmatSelectTreeValue {\r\n return this._value;\r\n }\r\n set value(value: CmatSelectTreeValue) {\r\n if (value !== this.value) {\r\n this._value = value;\r\n\r\n this.stateChanges.next();\r\n\r\n this._onModelChange(value);\r\n }\r\n }\r\n protected _value: CmatSelectTreeValue;\r\n\r\n get empty(): boolean {\r\n return !this._value;\r\n }\r\n\r\n get errorState(): boolean {\r\n if (this.ngControl == null)\r\n return false;\r\n\r\n return (this.touched && this.ngControl?.invalid) ?? false;\r\n }\r\n\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n @Input()\r\n get required(): boolean { return this._required; }\r\n set required(value: BooleanInput) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n protected _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n if (!isNil(this.ngControl?.disabled)) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: BooleanInput) {\r\n this._disabled = coerceBooleanProperty(value);\r\n\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n protected _disabled = false;\r\n\r\n registerOnChange(fn: (value: CmatSelectTreeValue) => void): void {\r\n this._onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouchedChange = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this._matSelect?.setDisabledState(isDisabled);\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n this._matSelect?.setDescribedByIds(ids);\r\n }\r\n\r\n onContainerClick(): void {\r\n if (!this.focused) {\r\n this._matSelect?.focus();\r\n }\r\n }\r\n\r\n onFocusIn(): void {\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onFocusOut(event: FocusEvent): void {\r\n const relatedTarget = event.relatedTarget;\r\n const panelElement = this._matSelect.panel.nativeElement as HTMLElement;\r\n\r\n if (!(relatedTarget instanceof Element) || !panelElement.contains(relatedTarget)) {\r\n this.touched = true;\r\n this.focused = false;\r\n this._onTouchedChange();\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n writeValue(value: CmatSelectTreeValue): void {\r\n this._init(value);\r\n }\r\n\r\n simpleTriggerLabelFn(value: CmatSelectTreeFlatNode[]): string {\r\n return value.map((node) => {\r\n\r\n if (isNil(node)) {\r\n return '';\r\n }\r\n if (isNil(this.customTriggerLabelTemplate)\r\n || typeof this.customTriggerLabelTemplate !== 'string'\r\n || this.customTriggerLabelTemplate.trim().length === 0) {\r\n return `${node.id}`;\r\n }\r\n let atLeastPartialSubstitution = false;\r\n const nodeRecord = node as CmatSelectTreeFlatNode & Record<string, unknown>;\r\n const substitution: string = this.customTriggerLabelTemplate.replace(/[$][{]([^}]+)[}]/g, (_, key) => {\r\n const nodeValue = nodeRecord[key as keyof typeof nodeRecord];\r\n\r\n if (isNil(nodeValue) || (typeof nodeValue !== 'string' && typeof nodeValue !== 'number' && typeof nodeValue !== 'boolean' && typeof nodeValue !== 'bigint')) {\r\n return '';\r\n }\r\n\r\n atLeastPartialSubstitution = true;\r\n return String(nodeValue);\r\n });\r\n if (atLeastPartialSubstitution === false) {\r\n return `${node.id}`;\r\n }\r\n return substitution.trim();\r\n }).join(', ');\r\n }\r\n\r\n openedChange(opened: boolean): void {\r\n // 面板打开/关闭时,同步树节点和选中值\r\n if (opened) {\r\n if (this.multiple) {\r\n this.checklistSelection.selected.forEach((node) => {\r\n if (node.expandable) {\r\n const descendants = this._getDescendants(node);\r\n this.checklistSelection.select(...descendants);\r\n }\r\n });\r\n\r\n this._updateSelect(this.checklistSelection.selected);\r\n }\r\n\r\n if (this.expandable) {\r\n this.tree.expandAll();\r\n }\r\n } else {\r\n setTimeout(() => {\r\n if (!isNil(this.checklistSelection.selected)) {\r\n\r\n if (this.multiple) {\r\n const findOutNode: CmatSelectTreeFlatNode[] = [];\r\n this.checklistSelection.selected.forEach((node) => {\r\n const parentNode = this._getParentNode(node);\r\n if (parentNode && this.checklistSelection.isSelected(parentNode)) {\r\n findOutNode.push(node);\r\n }\r\n });\r\n\r\n findOutNode.forEach((node) => {\r\n this.checklistSelection.deselect(node);\r\n });\r\n\r\n this.value = this.checklistSelection.selected.length > 0 ? [...this.checklistSelection.selected] : null;\r\n } else {\r\n if (this.checklistSelection.selected && this.checklistSelection.selected.length > 0) {\r\n this.value = { ...this.checklistSelection.selected[0] };\r\n }\r\n }\r\n\r\n this._matSelect.writeValue(this.value);\r\n this._matSelect._onChange(this.value);\r\n }\r\n }, 100);\r\n }\r\n }\r\n \r\n descendantsAllSelected(node: CmatSelectTreeFlatNode): boolean {\r\n // 判断当前节点的所有后代是否都已选中\r\n const descendants = this._getDescendants(node);\r\n return descendants.every(child =>\r\n this._selectedFlatNodeIds.has(child.id)\r\n );\r\n }\r\n\r\n \r\n descendantsPartiallySelected(node: CmatSelectTreeFlatNode): boolean {\r\n // 判断当前节点是否处于半选状态\r\n const descendants = this._getDescendants(node);\r\n const result = descendants.some(child => this._selectedFlatNodeIds.has(child.id));\r\n return result && !descendants.every(child => this._selectedFlatNodeIds.has(child.id));\r\n }\r\n\r\n \r\n todoItemSelectionToggle(event: MouseEvent, node: CmatSelectTreeFlatNode): void {\r\n // 切换分支节点的选中状态\r\n event.stopPropagation();\r\n if (this.multiple) {\r\n this.checklistSelection.toggle(node);\r\n\r\n const descendants = this._getDescendants(node);\r\n\r\n if (this.checklistSelection.isSelected(node)) {\r\n this.checklistSelection.select(...descendants);\r\n\r\n } else {\r\n this.checklistSelection.deselect(...descendants);\r\n }\r\n\r\n this._checkAllParentsSelection(node);\r\n\r\n this._syncSelectedFlatNodeIds();\r\n this._updateCheckState();\r\n } else {\r\n this.checklistSelection.clear();\r\n this.checklistSelection.select(node);\r\n\r\n this._syncSelectedFlatNodeIds();\r\n this._matSelect.close();\r\n }\r\n }\r\n\r\n \r\n todoLeafItemSelectionToggle(event: MouseEvent, node: CmatSelectTreeFlatNode): void {\r\n // 切换叶子节点的选中状态\r\n event.stopPropagation();\r\n if (this.multiple) {\r\n this.checklistSelection.toggle(node);\r\n\r\n this._checkAllParentsSelection(node);\r\n\r\n this._syncSelectedFlatNodeIds();\r\n this._updateCheckState();\r\n } else {\r\n this.checklistSelection.clear();\r\n this.checklistSelection.select(node);\r\n\r\n this._syncSelectedFlatNodeIds();\r\n this._matSelect.close();\r\n }\r\n }\r\n\r\n clearSelection(): void {\r\n // 清空所有选择\r\n this.checklistSelection.clear();\r\n this.isChecked.set(false);\r\n this.isIndeterminate.set(false);\r\n\r\n this.checkCount.set(0);\r\n this._selectedFlatNodeIds.clear();\r\n\r\n this.value = null;\r\n this._matSelect.writeValue(null);\r\n this._matSelect._onChange(null);\r\n }\r\n\r\n\r\n\r\n toggleSelectAll(selectAllValue: boolean): void {\r\n // 全选或取消全选\r\n if (selectAllValue) {\r\n this.checklistSelection.select(...this.dataFlatNodes());\r\n this.isIndeterminate.set(false);\r\n this.isChecked.set(true);\r\n\r\n this._syncSelectedFlatNodeIds();\r\n } else {\r\n this.checklistSelection.clear();\r\n this.isChecked.set(false);\r\n this.isIndeterminate.set(false);\r\n\r\n this.checkCount.set(0);\r\n this._selectedFlatNodeIds.clear();\r\n }\r\n }\r\n\r\n getChecklistSelectionIsSelected(i: CmatSelectTreeNode): boolean {\r\n // 根据原始节点判断是否已选中\r\n const flatNode = this.nestedNodeMap.get(i);\r\n return !!flatNode && this._selectedFlatNodeIds.has(flatNode.id);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onModelChange: (value: CmatSelectTreeValue) => void = () => { };\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onTouchedChange: () => void = () => { };\r\n\r\n private _init(v: CmatSelectTreeValue): void {\r\n // 初始化内部值和选中状态\r\n if (this.dataSource.length > 0 && this.treeDataSource().length > 0 && this._matSelect) {\r\n if (this.expandable) {\r\n this.tree.expandAll();\r\n }\r\n\r\n if (!isNil(v)) {\r\n this._updateChecklistSelection(v);\r\n } else {\r\n this.checklistSelection.clear();\r\n }\r\n\r\n if (Array.isArray(v) && v.length > 0) {\r\n\r\n if (this.multiple) {\r\n const findOutNode: CmatSelectTreeFlatNode[] = [];\r\n this.checklistSelection.selected.forEach((node) => {\r\n const parentNode = this._getParentNode(node);\r\n if (parentNode && this.checklistSelection.isSelected(parentNode)) {\r\n findOutNode.push(node);\r\n }\r\n });\r\n\r\n findOutNode.forEach((node) => {\r\n this.checklistSelection.deselect(node);\r\n });\r\n\r\n this.value = [...this.checklistSelection.selected];\r\n\r\n } else {\r\n this.value = this.checklistSelection.selected.length > 0 ? { ...this.checklistSelection.selected[0] } : null;\r\n }\r\n\r\n } else {\r\n this.value = v;\r\n }\r\n this._matSelect.writeValue(this.value);\r\n this._matSelect._onChange(this.value);\r\n\r\n this._updateCheckState();\r\n\r\n } else {\r\n this.value = v;\r\n }\r\n }\r\n private _checkAllParentsSelection(node: CmatSelectTreeFlatNode): void {\r\n // 级联更新父节点的选中状态\r\n let parent: CmatSelectTreeFlatNode | null = this._getParentNode(node);\r\n while (parent) {\r\n parent.expandable = true;\r\n this.tree.expand(this.flatNodeMap.get(parent)!);\r\n this._checkRootNodeSelection(parent);\r\n parent = this._getParentNode(parent);\r\n }\r\n }\r\n\r\n \r\n private _checkRootNodeSelection(node: CmatSelectTreeFlatNode): void {\r\n // 根据子节点状态同步父节点选中状态\r\n const nodeSelected = this.checklistSelection.isSelected(node);\r\n const descendants = this._getDescendants(node);\r\n const descAllSelected = descendants.every(child =>\r\n this.checklistSelection.isSelected(child)\r\n );\r\n if (nodeSelected && !descAllSelected) {\r\n this.checklistSelection.deselect(node);\r\n } else if (!nodeSelected && (descAllSelected || descendants.length === 0)) {\r\n this.checklistSelection.select(node);\r\n }\r\n\r\n this._updateCheckState();\r\n }\r\n\r\n private _getParentNode(node: CmatSelectTreeFlatNode): CmatSelectTreeFlatNode | null {\r\n // 通过缓存获取父节点\r\n return this._parentFlatNodeById.get(node.id) ?? null;\r\n }\r\n\r\n private _updateChecklistSelection(value: CmatSelectTreeValueItem[] | CmatSelectTreeValueItem): void {\r\n // 根据外部值同步内部选择状态\r\n this.checklistSelection.clear();\r\n if (!isNil(value)) {\r\n const valueArray = !Array.isArray(value) ? [value] : value;\r\n valueArray.forEach((item) => {\r\n const nodeFound = this._flatNodeById.get(item.id);\r\n\r\n if (isNil(nodeFound)) {\r\n return;\r\n }\r\n\r\n this.checklistSelection.select(nodeFound);\r\n });\r\n\r\n this._syncSelectedFlatNodeIds();\r\n }\r\n }\r\n\r\n private _updateSelect(value: CmatSelectTreeValueItem[] | CmatSelectTreeValueItem): void {\r\n // 根据当前值同步显示选择\r\n if (!isNil(value)) {\r\n const valueArray = !Array.isArray(value) ? [value] : value;\r\n\r\n if (this.overallSearchEnabled) // 有搜索功能时,将选中节点转换为当前数据源节点\r\n {\r\n valueArray.forEach((item) => {\r\n const nodeFound = this._flatNodeById.get(item.id);\r\n if (isNil(nodeFound)) {\r\n return;\r\n }\r\n\r\n this.checklistSelection.deselect(item as CmatSelectTreeFlatNode);\r\n\r\n this.checklistSelection.select(nodeFound);\r\n });\r\n }\r\n\r\n if (this.multiple) {\r\n this.checklistSelection.selected.forEach((item) => {\r\n this._checkAllParentsSelection(item);\r\n });\r\n }\r\n\r\n this._syncSelectedFlatNodeIds();\r\n this._updateCheckState();\r\n }\r\n }\r\n\r\n private _applyColumnLevelFilters(node: CmatSelectTreeNode, filter: string): boolean {\r\n // 递归过滤节点及其子节点\r\n let result = false;\r\n\r\n if (node?.children && node.children.length > 0) {\r\n for (let i = node.children.length - 1; i >= 0; i--) {\r\n const resultTemp = this._applyColumnLevelFilters(node.children[i], filter);\r\n\r\n if (!resultTemp) {\r\n node.children.splice(i, 1);\r\n }\r\n\r\n result = resultTemp || result;\r\n }\r\n }\r\n\r\n if (node?.children?.length === 0) {\r\n node.children = null;\r\n }\r\n\r\n const cellValue = node.name.toLowerCase();\r\n if (cellValue.includes(filter)) {\r\n result = true;\r\n }\r\n return result;\r\n }\r\n\r\n private _updateCheckState(): void {\r\n // 更新全选与半选状态\r\n if (this.showToggleAllCheckbox && this.dataSource.length > 0) {\r\n const selectedCount = this._selectedFlatNodeIds.size;\r\n this.checkCount.set(selectedCount);\r\n this.isIndeterminate.set(selectedCount < this.dataFlatNodes().length && selectedCount > 0);\r\n this.isChecked.set(selectedCount === this.dataFlatNodes().length && selectedCount > 0);\r\n }\r\n }\r\n\r\n private _getFlattenNodes(nodes: CmatSelectTreeNode[], i: number = 0, parent: CmatSelectTreeFlatNode | null = null): CmatSelectTreeFlatNode[] {\r\n // 将树结构平铺为节点列表\r\n const flattenedNodes: CmatSelectTreeFlatNode[] = [];\r\n\r\n for (const node of nodes) {\r\n const flatNode = this._transformer(node, i, parent);\r\n\r\n flattenedNodes.push(flatNode);\r\n if (node.children) {\r\n flattenedNodes.push(...this._getFlattenNodes(node.children, i + 1, flatNode));\r\n }\r\n }\r\n return flattenedNodes;\r\n }\r\n\r\n private _cloneTreeNodes(nodes: CmatSelectTreeNode[]): CmatSelectTreeNode[] {\r\n return nodes.map(node => ({\r\n id: node.id,\r\n name: node.name,\r\n children: node.children ? this._cloneTreeNodes(node.children) : null\r\n }));\r\n }\r\n\r\n private _syncSelectedFlatNodeIds(): void {\r\n // 同步选中节点 ID 缓存\r\n this._selectedFlatNodeIds.clear();\r\n\r\n this.checklistSelection.selected.forEach((node) => {\r\n this._selectedFlatNodeIds.add(node.id);\r\n });\r\n\r\n this.checkCount.set(this._selectedFlatNodeIds.size);\r\n }\r\n\r\n private _transformer = (node: CmatSelectTreeNode, level: number, parent: CmatSelectTreeFlatNode | null = null): CmatSelectTreeFlatNode => {\r\n // 构建平铺节点并缓存映射关系\r\n const existingNode = this.nestedNodeMap.get(node);\r\n const flatNode = existingNode?.name === node.name\r\n ? existingNode\r\n : new CmatSelectTreeFlatNode();\r\n flatNode.id = node.id;\r\n flatNode.name = node.name;\r\n flatNode.level = level;\r\n flatNode.expandable = !!node.children && node.children.length > 0;\r\n this.flatNodeMap.set(flatNode, node);\r\n this.nestedNodeMap.set(node, flatNode);\r\n this._flatNodeById.set(flatNode.id, flatNode);\r\n this._parentFlatNodeById.set(flatNode.id, parent);\r\n return flatNode;\r\n };\r\n\r\n private _getDescendants(dataNode: CmatSelectTreeFlatNode): CmatSelectTreeFlatNode[] {\r\n // 收集当前节点的所有后代\r\n const node = this.flatNodeMap.get(dataNode);\r\n\r\n if (!node?.children?.length) {\r\n return [];\r\n }\r\n\r\n const descendants: CmatSelectTreeFlatNode[] = [];\r\n\r\n const collect = (children: CmatSelectTreeNode[]): void => {\r\n for (const child of children) {\r\n const flatNode = this.nestedNodeMap.get(child);\r\n\r\n if (flatNode) {\r\n descendants.push(flatNode);\r\n }\r\n\r\n if (child.children?.length) {\r\n collect(child.children);\r\n }\r\n }\r\n };\r\n\r\n collect(node.children);\r\n\r\n return descendants;\r\n }\r\n\r\n}","@if(multiple){\r\n<mat-select #componentSelect multiple [placeholder]=\"placeholder\" [required]=\"required\"\r\n [formControl]=\"selectControl\" [compareWith]=\"compareWith\" (openedChange)=\"openedChange($event)\" (focusin)=\"onFocusIn()\">\r\n <mat-select-trigger>\r\n @if (!customTriggerLabelFn) {\r\n {{ simpleTriggerLabelFn(checklistSelection.selected) }}\r\n } @else {\r\n {{ customTriggerLabelFn(checklistSelection.selected) }}\r\n }\r\n </mat-select-trigger>\r\n\r\n <div (focusout)=\"onFocusOut($event)\">\r\n @if (overallSearchEnabled) {\r\n <mat-option>\r\n <cmat-select-search [showNoFoundLabel]=\"showNoFoundLabel\" [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n [formControl]=\"overallFilterControl\" [clearSearchInput]=\"true\"\r\n [toggleAllCheckboxIndeterminate]=\"isIndeterminate()\" [toggleAllCheckboxChecked]=\"isChecked()\"\r\n [showToggleAllCheckbox]=\"showToggleAllCheckbox&&multiple\" (toggleAll)=\"toggleSelectAll($event)\">\r\n </cmat-select-search>\r\n </mat-option>\r\n }\r\n @for (selectData of matSelectData(); track selectData.id) {\r\n <mat-option class=\"hidden\" [value]=\"selectData\">{{selectData.name}}</mat-option>\r\n }\r\n <mat-tree #componentTree [dataSource]=\"treeDataSource()\" [childrenAccessor]=\"childrenAccessor\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding\r\n [ngClass]=\"getChecklistSelectionIsSelected(node)?'selected':''\"\r\n (click)=\"todoLeafItemSelectionToggle($event,nestedNodeMap.get(node)!)\">\r\n <button type=\"button\" matIconButton disabled>\r\n\r\n </button>\r\n <mat-checkbox class=\"checklist-leaf-node text-current\" [color]=\"'primary'\"\r\n [checked]=\"getChecklistSelectionIsSelected(node)\">{{node.name}}</mat-checkbox>\r\n\r\n </mat-tree-node>\r\n\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding\r\n [ngClass]=\"getChecklistSelectionIsSelected(node)?'selected':''\"\r\n (click)=\"todoItemSelectionToggle($event,nestedNodeMap.get(node)!)\">\r\n <button type=\"button\" matIconButton matTreeNodeToggle [attr.aria-label]=\"'toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\"\r\n [svgIcon]=\"componentTree.isExpanded(node) ? 'mat_outline:expand_more' : 'mat_outline:chevron_right'\">\r\n </mat-icon>\r\n </button>\r\n\r\n <mat-checkbox class=\"text-current\" [checked]=\"descendantsAllSelected(nestedNodeMap.get(node)!)\"\r\n [color]=\"'primary'\"\r\n [indeterminate]=\"descendantsPartiallySelected(nestedNodeMap.get(node)!)\">{{node.name}}</mat-checkbox>\r\n\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n</mat-select>\r\n}\r\n@else {\r\n<mat-select #componentSelect [placeholder]=\"placeholder\"\r\n [required]=\"required\" [formControl]=\"selectControl\" [compareWith]=\"compareWith\" (focusin)=\"onFocusIn()\" (openedChange)=\"openedChange($event)\">\r\n <mat-select-trigger>\r\n @if (!customTriggerLabelFn) {\r\n {{ simpleTriggerLabelFn(checklistSelection.selected) }}\r\n } @else {\r\n {{ customTriggerLabelFn(checklistSelection.selected) }}\r\n }\r\n </mat-select-trigger>\r\n\r\n <div (focusout)=\"onFocusOut($event)\">\r\n @if (overallSearchEnabled) {\r\n <mat-option>\r\n <cmat-select-search [showNoFoundLabel]=\"showNoFoundLabel\" [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n [formControl]=\"overallFilterControl\" [clearSearchInput]=\"true\"\r\n [toggleAllCheckboxIndeterminate]=\"isIndeterminate()\" [toggleAllCheckboxChecked]=\"isChecked()\"\r\n [showToggleAllCheckbox]=\"false\" (toggleAll)=\"toggleSelectAll($event)\">\r\n </cmat-select-search>\r\n </mat-option>\r\n }\r\n @if (canNull&&treeDataSource().length!==0) {\r\n <mat-option class=\"pl-10\" (click)=\"clearSelection()\">空</mat-option>\r\n }\r\n @for (selectData of matSelectData(); track selectData.id) {\r\n <mat-option class=\"hidden\" [value]=\"selectData\">{{selectData.name}}</mat-option>\r\n }\r\n\r\n <mat-tree #componentTree [dataSource]=\"treeDataSource()\" [childrenAccessor]=\"childrenAccessor\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding\r\n [ngClass]=\"getChecklistSelectionIsSelected(node)?'selected':''\"\r\n (click)=\"todoLeafItemSelectionToggle($event,nestedNodeMap.get(node)!)\">\r\n <button type=\"button\" matIconButton disabled>\r\n\r\n </button>\r\n <span class=\"text-current\">{{node.name}}</span>\r\n\r\n </mat-tree-node>\r\n\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding\r\n [ngClass]=\"getChecklistSelectionIsSelected(node)?'selected':''\"\r\n (click)=\"todoItemSelectionToggle($event,nestedNodeMap.get(node)!)\">\r\n <button type=\"button\" matIconButton matTreeNodeToggle [attr.aria-label]=\"'toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\"\r\n [svgIcon]=\"componentTree.isExpanded(node) ? 'mat_outline:expand_more' : 'mat_outline:chevron_right'\">\r\n </mat-icon>\r\n </button>\r\n <span class=\"text-current\">{{node.name}}</span>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n</mat-select>\r\n}\r\n","export class CmatSelectTreeNode {\r\n id: string | number;\r\n children: CmatSelectTreeNode[] | null;\r\n name: string;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-components-skeleton.mjs","sources":["../../../projects/cmat/components/skeleton/skeleton.component.ts","../../../projects/cmat/components/skeleton/skeleton.component.html","../../../projects/cmat/components/skeleton/cmat-components-skeleton.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cmat-skeleton',\r\n templateUrl: './skeleton.component.html',\r\n styleUrls: ['./skeleton.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: []\r\n})\r\nexport class CmatSkeletonComponent {\r\n \r\n @Input() count = 1;\r\n\r\n \r\n @Input() variant: 'line' | 'block' | 'avatar' | 'card' = 'line';\r\n\r\n \r\n @Input() width = '100%';\r\n\r\n \r\n @Input() height = '1rem';\r\n\r\n \r\n @Input() animated = true;\r\n\r\n @HostBinding('class') hostClass = 'block';\r\n\r\n \r\n get items(): number[] {\r\n return Array.from({ length: Math.max(1, this.count) }, (_, index) => index);\r\n }\r\n}\r\n","<!-- eslint-disable @angular-eslint/template/no-inline-styles -->\r\n<div class=\"cmat-skeleton\" [class.cmat-skeleton-animated]=\"animated\" [attr.data-variant]=\"variant\">\r\n @for (item of items; track item) {\r\n @switch (variant) {\r\n @case ('avatar') {\r\n <div class=\"cmat-skeleton-avatar\"></div>\r\n }\r\n @case ('block') {\r\n <div class=\"cmat-skeleton-block\" [style.width]=\"width\" [style.height]=\"height\"></div>\r\n }\r\n @case ('card') {\r\n <div class=\"cmat-skeleton-card\">\r\n <div class=\"cmat-skeleton-line cmat-skeleton-line-title\"></div>\r\n <div class=\"cmat-skeleton-line\"></div>\r\n <div class=\"cmat-skeleton-line\"></div>\r\n </div>\r\n }\r\n @default {\r\n <div class=\"cmat-skeleton-line\" [style.width]=\"width\" [style.height]=\"height\"></div>\r\n }\r\n }\r\n }\r\n</div>\r\n<!-- eslint-enable @angular-eslint/template/no-inline-styles -->\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MASa,qBAAqB,CAAA;AAPlC,IAAA,WAAA,GAAA;QASa,IAAA,CAAA,KAAK,GAAG,CAAC;QAGT,IAAA,CAAA,OAAO,GAAyC,MAAM;QAGtD,IAAA,CAAA,KAAK,GAAG,MAAM;QAGd,IAAA,CAAA,MAAM,GAAG,MAAM;QAGf,IAAA,CAAA,QAAQ,GAAG,IAAI;QAEF,IAAA,CAAA,SAAS,GAAG,OAAO;AAM5C,IAAA;AAHG,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC;IAC/E;8GArBS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,sOCTlC,smCAwBA,EAAA,MAAA,EAAA,CAAA,2hDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDfa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,WACtC,EAAE,EAAA,QAAA,EAAA,smCAAA,EAAA,MAAA,EAAA,CAAA,2hDAAA,CAAA,EAAA;;sBAIV;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAEA,WAAW;uBAAC,OAAO;;;AEzBxB;;AAEG;;;;"}
1
+ {"version":3,"file":"cmat-components-skeleton.mjs","sources":["../../../projects/cmat/components/skeleton/skeleton.component.ts","../../../projects/cmat/components/skeleton/skeleton.component.html","../../../projects/cmat/components/skeleton/cmat-components-skeleton.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cmat-skeleton',\r\n templateUrl: './skeleton.component.html',\r\n styleUrls: ['./skeleton.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: []\r\n})\r\nexport class CmatSkeletonComponent {\r\n \r\n @Input() count:number = 1;\r\n\r\n \r\n @Input() variant: 'line' | 'block' | 'avatar' | 'card' = 'line';\r\n\r\n \r\n @Input() width:string = '100%';\r\n\r\n \r\n @Input() height:string = '1rem';\r\n\r\n \r\n @Input() animated: boolean = true;\r\n\r\n @HostBinding('class') hostClass = 'block';\r\n\r\n \r\n get items(): number[] {\r\n return Array.from({ length: Math.max(1, this.count) }, (_, index) => index);\r\n }\r\n}\r\n","<!-- eslint-disable @angular-eslint/template/no-inline-styles -->\r\n<div class=\"cmat-skeleton\" [class.cmat-skeleton-animated]=\"animated\" [attr.data-variant]=\"variant\">\r\n @for (item of items; track item) {\r\n @switch (variant) {\r\n @case ('avatar') {\r\n <div class=\"cmat-skeleton-avatar\"></div>\r\n }\r\n @case ('block') {\r\n <div class=\"cmat-skeleton-block\" [style.width]=\"width\" [style.height]=\"height\"></div>\r\n }\r\n @case ('card') {\r\n <div class=\"cmat-skeleton-card\">\r\n <div class=\"cmat-skeleton-line cmat-skeleton-line-title\"></div>\r\n <div class=\"cmat-skeleton-line\"></div>\r\n <div class=\"cmat-skeleton-line\"></div>\r\n </div>\r\n }\r\n @default {\r\n <div class=\"cmat-skeleton-line\" [style.width]=\"width\" [style.height]=\"height\"></div>\r\n }\r\n }\r\n }\r\n</div>\r\n<!-- eslint-enable @angular-eslint/template/no-inline-styles -->\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MASa,qBAAqB,CAAA;AAPlC,IAAA,WAAA,GAAA;QASa,IAAA,CAAA,KAAK,GAAU,CAAC;QAGhB,IAAA,CAAA,OAAO,GAAyC,MAAM;QAGtD,IAAA,CAAA,KAAK,GAAU,MAAM;QAGrB,IAAA,CAAA,MAAM,GAAU,MAAM;QAGtB,IAAA,CAAA,QAAQ,GAAY,IAAI;QAEX,IAAA,CAAA,SAAS,GAAG,OAAO;AAM5C,IAAA;AAHG,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC;IAC/E;8GArBS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,sOCTlC,smCAwBA,EAAA,MAAA,EAAA,CAAA,2hDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDfa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,WACtC,EAAE,EAAA,QAAA,EAAA,smCAAA,EAAA,MAAA,EAAA,CAAA,2hDAAA,CAAA,EAAA;;sBAIV;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAEA,WAAW;uBAAC,OAAO;;;AEzBxB;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-components-status-tag.mjs","sources":["../../../projects/cmat/components/status-tag/status-tag.component.ts","../../../projects/cmat/components/status-tag/status-tag.component.html","../../../projects/cmat/components/status-tag/cmat-components-status-tag.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cmat-status-tag',\r\n templateUrl: './status-tag.component.html',\r\n styleUrls: ['./status-tag.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [NgClass]\r\n})\r\nexport class CmatStatusTagComponent {\r\n \r\n @Input() label = '';\r\n\r\n \r\n @Input() variant: 'soft' | 'filled' | 'outline' = 'soft';\r\n\r\n \r\n @Input() tone: 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info' = 'neutral';\r\n\r\n \r\n @Input() dot = false;\r\n\r\n @HostBinding('class') hostClass = 'inline-flex';\r\n\r\n \r\n get classMap(): Record<string, boolean> {\r\n return {\r\n 'cmat-status-tag': true,\r\n 'cmat-status-tag-soft': this.variant === 'soft',\r\n 'cmat-status-tag-filled': this.variant === 'filled',\r\n 'cmat-status-tag-outline': this.variant === 'outline',\r\n 'cmat-status-tag-neutral': this.tone === 'neutral',\r\n 'cmat-status-tag-primary': this.tone === 'primary',\r\n 'cmat-status-tag-success': this.tone === 'success',\r\n 'cmat-status-tag-warning': this.tone === 'warning',\r\n 'cmat-status-tag-danger': this.tone === 'danger',\r\n 'cmat-status-tag-info': this.tone === 'info'\r\n };\r\n }\r\n}\r\n","<span class=\"cmat-status-tag__root\" [ngClass]=\"classMap\">\r\n @if (dot) {\r\n <span class=\"cmat-status-tag__dot\"></span>\r\n }\r\n <span class=\"cmat-status-tag__label\">{{ label }}</span>\r\n</span>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAAA;MAWa,sBAAsB,CAAA;AAPnC,IAAA,WAAA,GAAA;QASa,IAAA,CAAA,KAAK,GAAG,EAAE;QAGV,IAAA,CAAA,OAAO,GAAkC,MAAM;QAG/C,IAAA,CAAA,IAAI,GAAsE,SAAS;QAGnF,IAAA,CAAA,GAAG,GAAG,KAAK;QAEE,IAAA,CAAA,SAAS,GAAG,aAAa;AAiBlD,IAAA;AAdG,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO;AACH,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,sBAAsB,EAAE,IAAI,CAAC,OAAO,KAAK,MAAM;AAC/C,YAAA,wBAAwB,EAAE,IAAI,CAAC,OAAO,KAAK,QAAQ;AACnD,YAAA,yBAAyB,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS;AACrD,YAAA,yBAAyB,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS;AAClD,YAAA,yBAAyB,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS;AAClD,YAAA,yBAAyB,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS;AAClD,YAAA,yBAAyB,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS;AAClD,YAAA,wBAAwB,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ;AAChD,YAAA,sBAAsB,EAAE,IAAI,CAAC,IAAI,KAAK;SACzC;IACL;8GA7BS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXnC,mOAMA,EAAA,MAAA,EAAA,CAAA,0qGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDGc,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;;2FAER,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,mBAGV,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,mOAAA,EAAA,MAAA,EAAA,CAAA,0qGAAA,CAAA,EAAA;;sBAIjB;;sBAGA;;sBAGA;;sBAGA;;sBAEA,WAAW;uBAAC,OAAO;;;AExBxB;;AAEG;;;;"}
1
+ {"version":3,"file":"cmat-components-status-tag.mjs","sources":["../../../projects/cmat/components/status-tag/status-tag.component.ts","../../../projects/cmat/components/status-tag/status-tag.component.html","../../../projects/cmat/components/status-tag/cmat-components-status-tag.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cmat-status-tag',\r\n templateUrl: './status-tag.component.html',\r\n styleUrls: ['./status-tag.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [NgClass]\r\n})\r\nexport class CmatStatusTagComponent {\r\n \r\n @Input() label:string = '';\r\n\r\n \r\n @Input() variant: 'soft' | 'filled' | 'outline' = 'soft';\r\n\r\n \r\n @Input() tone: 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info' = 'neutral';\r\n\r\n \r\n @Input() dot: boolean = false;\r\n\r\n @HostBinding('class') hostClass = 'inline-flex';\r\n\r\n \r\n get classMap(): Record<string, boolean> {\r\n return {\r\n 'cmat-status-tag': true,\r\n 'cmat-status-tag-soft': this.variant === 'soft',\r\n 'cmat-status-tag-filled': this.variant === 'filled',\r\n 'cmat-status-tag-outline': this.variant === 'outline',\r\n 'cmat-status-tag-neutral': this.tone === 'neutral',\r\n 'cmat-status-tag-primary': this.tone === 'primary',\r\n 'cmat-status-tag-success': this.tone === 'success',\r\n 'cmat-status-tag-warning': this.tone === 'warning',\r\n 'cmat-status-tag-danger': this.tone === 'danger',\r\n 'cmat-status-tag-info': this.tone === 'info'\r\n };\r\n }\r\n}\r\n","<span class=\"cmat-status-tag__root\" [ngClass]=\"classMap\">\r\n @if (dot) {\r\n <span class=\"cmat-status-tag__dot\"></span>\r\n }\r\n <span class=\"cmat-status-tag__label\">{{ label }}</span>\r\n</span>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAAA;MAWa,sBAAsB,CAAA;AAPnC,IAAA,WAAA,GAAA;QASa,IAAA,CAAA,KAAK,GAAU,EAAE;QAGjB,IAAA,CAAA,OAAO,GAAkC,MAAM;QAG/C,IAAA,CAAA,IAAI,GAAsE,SAAS;QAGnF,IAAA,CAAA,GAAG,GAAY,KAAK;QAEP,IAAA,CAAA,SAAS,GAAG,aAAa;AAiBlD,IAAA;AAdG,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO;AACH,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,sBAAsB,EAAE,IAAI,CAAC,OAAO,KAAK,MAAM;AAC/C,YAAA,wBAAwB,EAAE,IAAI,CAAC,OAAO,KAAK,QAAQ;AACnD,YAAA,yBAAyB,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS;AACrD,YAAA,yBAAyB,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS;AAClD,YAAA,yBAAyB,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS;AAClD,YAAA,yBAAyB,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS;AAClD,YAAA,yBAAyB,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS;AAClD,YAAA,wBAAwB,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ;AAChD,YAAA,sBAAsB,EAAE,IAAI,CAAC,IAAI,KAAK;SACzC;IACL;8GA7BS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXnC,mOAMA,EAAA,MAAA,EAAA,CAAA,0qGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDGc,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;;2FAER,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,mBAGV,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,mOAAA,EAAA,MAAA,EAAA,CAAA,0qGAAA,CAAA,EAAA;;sBAIjB;;sBAGA;;sBAGA;;sBAGA;;sBAEA,WAAW;uBAAC,OAAO;;;AExBxB;;AAEG;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-components-table-toolbar.mjs","sources":["../../../projects/cmat/components/table-toolbar/table-toolbar.component.ts","../../../projects/cmat/components/table-toolbar/table-toolbar.component.html","../../../projects/cmat/components/table-toolbar/cmat-components-table-toolbar.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cmat-table-toolbar',\r\n templateUrl: './table-toolbar.component.html',\r\n styleUrls: ['./table-toolbar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule]\r\n})\r\nexport class CmatTableToolbarComponent {\r\n \r\n @Input() title = '';\r\n\r\n \r\n @Input() description = '';\r\n\r\n \r\n @Input() count = 0;\r\n\r\n \r\n @Input() showCount = true;\r\n}\r\n","<div class=\"flex flex-col gap-3 rounded-2xl border border-default bg-card p-4 shadow-sm md:flex-row md:items-center md:justify-between\">\r\n <div class=\"min-w-0\">\r\n @if (title) {\r\n <div class=\"flex items-center gap-2 text-lg font-semibold text-default\">\r\n <span>{{ title }}</span>\r\n @if (showCount) {\r\n <span class=\"rounded-full bg-hover px-2 py-0.5 text-xs text-secondary\">{{ count }}</span>\r\n }\r\n </div>\r\n }\r\n\r\n @if (description) {\r\n <p class=\"mt-1 text-sm leading-6 text-secondary\">{{ description }}</p>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-wrap items-center gap-2\">\r\n <ng-content select=\"[cmatTableToolbarActions]\"></ng-content>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAUa,yBAAyB,CAAA;AAPtC,IAAA,WAAA,GAAA;QASa,IAAA,CAAA,KAAK,GAAG,EAAE;QAGV,IAAA,CAAA,WAAW,GAAG,EAAE;QAGhB,IAAA,CAAA,KAAK,GAAG,CAAC;QAGT,IAAA,CAAA,SAAS,GAAG,IAAI;AAC5B,IAAA;8GAZY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECVtC,m1BAoBA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDZc,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEb,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,mBAGb,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,m1BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;sBAItB;;sBAGA;;sBAGA;;sBAGA;;;AErBL;;AAEG;;;;"}
1
+ {"version":3,"file":"cmat-components-table-toolbar.mjs","sources":["../../../projects/cmat/components/table-toolbar/table-toolbar.component.ts","../../../projects/cmat/components/table-toolbar/table-toolbar.component.html","../../../projects/cmat/components/table-toolbar/cmat-components-table-toolbar.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'cmat-table-toolbar',\r\n templateUrl: './table-toolbar.component.html',\r\n styleUrls: ['./table-toolbar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule]\r\n})\r\nexport class CmatTableToolbarComponent {\r\n \r\n @Input() title:string = '';\r\n\r\n \r\n @Input() description:string = '';\r\n\r\n \r\n @Input() count:number = 0;\r\n\r\n \r\n @Input() showCount:boolean = true;\r\n}\r\n","<div class=\"flex flex-col gap-3 rounded-2xl border border-default bg-card p-4 shadow-sm md:flex-row md:items-center md:justify-between\">\r\n <div class=\"min-w-0\">\r\n @if (title) {\r\n <div class=\"flex items-center gap-2 text-lg font-semibold text-default\">\r\n <span>{{ title }}</span>\r\n @if (showCount) {\r\n <span class=\"rounded-full bg-hover px-2 py-0.5 text-xs text-secondary\">{{ count }}</span>\r\n }\r\n </div>\r\n }\r\n\r\n @if (description) {\r\n <p class=\"mt-1 text-sm leading-6 text-secondary\">{{ description }}</p>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-wrap items-center gap-2\">\r\n <ng-content select=\"[cmatTableToolbarActions]\"></ng-content>\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAUa,yBAAyB,CAAA;AAPtC,IAAA,WAAA,GAAA;QASa,IAAA,CAAA,KAAK,GAAU,EAAE;QAGjB,IAAA,CAAA,WAAW,GAAU,EAAE;QAGvB,IAAA,CAAA,KAAK,GAAU,CAAC;QAGhB,IAAA,CAAA,SAAS,GAAW,IAAI;AACpC,IAAA;8GAZY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECVtC,m1BAoBA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDZc,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEb,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,mBAGb,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,m1BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;sBAItB;;sBAGA;;sBAGA;;sBAGA;;;AErBL;;AAEG;;;;"}
@@ -136,6 +136,10 @@ class CmatUploadComponent {
136
136
  get fileType() {
137
137
  return CmatUtilsService.getFileType(this.file.type);
138
138
  }
139
+ // eslint-disable-next-line @typescript-eslint/member-ordering
140
+ get fileSize() {
141
+ return Number(this.file.size);
142
+ }
139
143
  ngOnInit() {
140
144
  if (this.autoUpload && this.id === null) {
141
145
  this.upload();
@@ -150,12 +154,13 @@ class CmatUploadComponent {
150
154
  fileCategory: this.fileCategory,
151
155
  isPublic: this.isPublic,
152
156
  filePath: this.filePath,
153
- fileType: 'file',
154
- data: this.file
157
+ fileType: this.fileType,
158
+ data: this._file
155
159
  };
156
- fileModel.fileType = this.fileType;
157
160
  const formData = new FormData();
158
- formData.set('fileData', this._file, this._file.name);
161
+ if (this._file.data) {
162
+ formData.set(this.fileAlias, this._file.data, this._file.fileName);
163
+ }
159
164
  formData.append('fileInfo', JSON.stringify(fileModel));
160
165
  this._fileService.uploadFile(formData).pipe(takeUntilDestroyed(this._destroyRef)).subscribe((event) => {
161
166
  if (event.type === HttpEventType.UploadProgress && typeof event.total === 'number') {
@@ -187,11 +192,11 @@ class CmatUploadComponent {
187
192
  this.removeEvent.emit(this);
188
193
  }
189
194
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
190
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CmatUploadComponent, isStandalone: true, selector: "cmat-upload", inputs: { fileAlias: "fileAlias", filePath: "filePath", fileCategory: "fileCategory", isPublic: "isPublic", editMode: "editMode", autoUpload: "autoUpload", id: "id", file: "file" }, outputs: { removeEvent: "removeEvent", uploadEvent: "uploadEvent" }, exportAs: ["cmatUpload"], ngImport: i0, template: "<div class=\"flex flex-col\">\r\n <div class=\"flex flex-row items-center\">\r\n <span class=\"flex items-center px-1\">\r\n <mat-icon class=\"icon-size-6 text-hint\"\r\n [svgIcon]=\"fileType\"></mat-icon>\r\n </span>\r\n <span matTooltip=\"{{file.name}}\"\r\n class=\"text-sm flex flex-auto whitespace-nowrap overflow-x-hidden text-ellipsis\">{{file.name}}({{file.size | cmatBytes}})</span>\r\n <span class=\"flex flex-row gap-1 print:hidden\">\r\n @if(id===null){\r\n <button matIconButton color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" [ngClass]=\"{'disabled' : isUploading()}\"\r\n (click)=\"upload()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(id!==null){\r\n <button matIconButton color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"download()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_download'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(editMode){\r\n <button matIconButton color=\"warn\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"remove()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon>\r\n </button>\r\n }\r\n </span>\r\n </div>\r\n @if(id===null){\r\n <mat-progress-bar [value]=\"progressPercentage()\"></mat-progress-bar>\r\n <div class=\"text-sm block whitespace-nowrap overflow-x-hidden text-ellipsis\">\r\n <span>{{progressPercentage()}}%</span><span> {{loaded() | cmatBytes}} of {{total() | cmatBytes}}</span>\r\n </div>\r\n }\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i3$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: CmatBytesPipe, name: "cmatBytes" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
195
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CmatUploadComponent, isStandalone: true, selector: "cmat-upload", inputs: { fileAlias: "fileAlias", filePath: "filePath", fileCategory: "fileCategory", isPublic: "isPublic", editMode: "editMode", autoUpload: "autoUpload", id: "id", file: "file" }, outputs: { removeEvent: "removeEvent", uploadEvent: "uploadEvent" }, exportAs: ["cmatUpload"], ngImport: i0, template: "<div class=\"flex flex-col\">\r\n <div class=\"flex flex-row items-center\">\r\n <span class=\"flex items-center px-1\">\r\n <mat-icon class=\"icon-size-6 text-hint\" [svgIcon]=\"fileType\"></mat-icon>\r\n </span>\r\n <span matTooltip=\"{{file.name}}\"\r\n class=\"text-sm flex flex-auto whitespace-nowrap overflow-x-hidden text-ellipsis\">{{file.name}}({{fileSize |\r\n cmatBytes}})</span>\r\n <span class=\"flex flex-row gap-1 print:hidden\">\r\n @if(id===null){\r\n <button matIconButton color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" [ngClass]=\"{'disabled' : isUploading()}\"\r\n (click)=\"upload()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(id!==null){\r\n <button matIconButton color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"download()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_download'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(editMode){\r\n <button matIconButton color=\"warn\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"remove()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon>\r\n </button>\r\n }\r\n </span>\r\n </div>\r\n @if(id===null){\r\n <mat-progress-bar [value]=\"progressPercentage()\"></mat-progress-bar>\r\n <div class=\"text-sm block whitespace-nowrap overflow-x-hidden text-ellipsis\">\r\n <span>{{progressPercentage()}}%</span><span> {{loaded() | cmatBytes}} of {{total() | cmatBytes}}</span>\r\n </div>\r\n }\r\n</div>", dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i3$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: CmatBytesPipe, name: "cmatBytes" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
191
196
  }
192
197
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatUploadComponent, decorators: [{
193
198
  type: Component,
194
- args: [{ selector: 'cmat-upload', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatUpload', imports: [MatButtonModule, MatIconModule, MatProgressBarModule, MatTooltipModule, CmatBytesPipe, NgClass], template: "<div class=\"flex flex-col\">\r\n <div class=\"flex flex-row items-center\">\r\n <span class=\"flex items-center px-1\">\r\n <mat-icon class=\"icon-size-6 text-hint\"\r\n [svgIcon]=\"fileType\"></mat-icon>\r\n </span>\r\n <span matTooltip=\"{{file.name}}\"\r\n class=\"text-sm flex flex-auto whitespace-nowrap overflow-x-hidden text-ellipsis\">{{file.name}}({{file.size | cmatBytes}})</span>\r\n <span class=\"flex flex-row gap-1 print:hidden\">\r\n @if(id===null){\r\n <button matIconButton color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" [ngClass]=\"{'disabled' : isUploading()}\"\r\n (click)=\"upload()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(id!==null){\r\n <button matIconButton color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"download()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_download'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(editMode){\r\n <button matIconButton color=\"warn\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"remove()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon>\r\n </button>\r\n }\r\n </span>\r\n </div>\r\n @if(id===null){\r\n <mat-progress-bar [value]=\"progressPercentage()\"></mat-progress-bar>\r\n <div class=\"text-sm block whitespace-nowrap overflow-x-hidden text-ellipsis\">\r\n <span>{{progressPercentage()}}%</span><span> {{loaded() | cmatBytes}} of {{total() | cmatBytes}}</span>\r\n </div>\r\n }\r\n</div>\r\n" }]
199
+ args: [{ selector: 'cmat-upload', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatUpload', imports: [MatButtonModule, MatIconModule, MatProgressBarModule, MatTooltipModule, CmatBytesPipe, NgClass], template: "<div class=\"flex flex-col\">\r\n <div class=\"flex flex-row items-center\">\r\n <span class=\"flex items-center px-1\">\r\n <mat-icon class=\"icon-size-6 text-hint\" [svgIcon]=\"fileType\"></mat-icon>\r\n </span>\r\n <span matTooltip=\"{{file.name}}\"\r\n class=\"text-sm flex flex-auto whitespace-nowrap overflow-x-hidden text-ellipsis\">{{file.name}}({{fileSize |\r\n cmatBytes}})</span>\r\n <span class=\"flex flex-row gap-1 print:hidden\">\r\n @if(id===null){\r\n <button matIconButton color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" [ngClass]=\"{'disabled' : isUploading()}\"\r\n (click)=\"upload()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(id!==null){\r\n <button matIconButton color=\"primary\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"download()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_outline:file_download'\"></mat-icon>\r\n </button>\r\n }\r\n\r\n @if(editMode){\r\n <button matIconButton color=\"warn\" class=\"w-8 min-h-8 h-8 max-w-8\" (click)=\"remove()\">\r\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon>\r\n </button>\r\n }\r\n </span>\r\n </div>\r\n @if(id===null){\r\n <mat-progress-bar [value]=\"progressPercentage()\"></mat-progress-bar>\r\n <div class=\"text-sm block whitespace-nowrap overflow-x-hidden text-ellipsis\">\r\n <span>{{progressPercentage()}}%</span><span> {{loaded() | cmatBytes}} of {{total() | cmatBytes}}</span>\r\n </div>\r\n }\r\n</div>" }]
195
200
  }], propDecorators: { fileAlias: [{
196
201
  type: Input
197
202
  }], filePath: [{
@@ -231,6 +236,7 @@ class CmatUploadQueueComponent {
231
236
  this.outputFilesDataEvent = new EventEmitter();
232
237
  this.id = 'cmatupload-' + crypto.randomUUID().slice(0, 8);
233
238
  this.isHandSet = signal(false, ...(ngDevMode ? [{ debugName: "isHandSet" }] : /* istanbul ignore next */ []));
239
+ this.fileDataSource = signal([], ...(ngDevMode ? [{ debugName: "fileDataSource" }] : /* istanbul ignore next */ []));
234
240
  this._cmatMediaWatcherService = inject(CmatMediaWatcherService);
235
241
  this._elementRef = inject(ElementRef);
236
242
  this._destroyRef = inject(DestroyRef);
@@ -254,6 +260,11 @@ class CmatUploadQueueComponent {
254
260
  onDropOver(event) {
255
261
  event.preventDefault();
256
262
  }
263
+ ngOnChanges(changes) {
264
+ if (changes['filesData']) {
265
+ this.fileDataSource.set(this.filesData);
266
+ }
267
+ }
257
268
  ngAfterViewInit() {
258
269
  const fileUpload = this._elementRef.nativeElement.querySelector(`#${this.id}`);
259
270
  if (!(fileUpload instanceof HTMLInputElement)) {
@@ -280,11 +291,12 @@ class CmatUploadQueueComponent {
280
291
  this.filesData = [...this.filesData, file];
281
292
  this.fileUploads.first.remove();
282
293
  }
294
+ this.fileDataSource.set(this.filesData);
283
295
  }
284
296
  upload(event) {
285
- const uploadId = event instanceof CmatUploadComponent ? event.id : event.id;
286
- this.outputUploadIdEvent.emit(uploadId ?? '');
297
+ this.outputUploadIdEvent.emit(event.id ?? '');
287
298
  this.outputFilesDataEvent.emit(this.filesData);
299
+ this.fileDataSource.set(this.filesData);
288
300
  }
289
301
  remove(event) {
290
302
  if (this.filesData) {
@@ -295,6 +307,7 @@ class CmatUploadQueueComponent {
295
307
  this.outputRemoveIdEvent.emit(event.file.id);
296
308
  }
297
309
  this.outputFilesDataEvent.emit(this.filesData);
310
+ this.fileDataSource.set(this.filesData);
298
311
  }
299
312
  }
300
313
  }
@@ -325,11 +338,11 @@ class CmatUploadQueueComponent {
325
338
  });
326
339
  }
327
340
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatUploadQueueComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
328
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CmatUploadQueueComponent, isStandalone: true, selector: "cmat-upload-queue", inputs: { fileAlias: "fileAlias", filePath: "filePath", fileCategory: "fileCategory", isPublic: "isPublic", required: "required", autoUpload: "autoUpload", multiple: "multiple", accept: "accept", title: "title", editMode: "editMode", filesData: "filesData" }, outputs: { outputRemoveIdEvent: "outputRemoveIdEvent", outputUploadIdEvent: "outputUploadIdEvent", outputFilesDataEvent: "outputFilesDataEvent" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDropOver($event)" } }, viewQueries: [{ propertyName: "fileUploads", predicate: i0.forwardRef(() => CmatUploadComponent), descendants: true }], exportAs: ["cmatUploadQueue"], ngImport: i0, template: "<mat-card>\r\n <mat-card-header>\r\n <mat-card-title>\r\n <legend class=\"text-lg\">\r\n {{title}}\r\n @if(required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n </mat-card-title>\r\n </mat-card-header>\r\n <input type=\"file\" class=\"hidden\" [id]=\"id\" [multiple]=\"multiple\" [accept]=\"accept\" />\r\n\r\n @if(editMode){\r\n <mat-card-actions class=\"flex flex-row gap-1 print:hidden\">\r\n @if(!isHandSet()){\r\n <button matButton=\"filled\" color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n <span class=\"ml-2\">\u9009\u62E9</span>\r\n </button>\r\n @if(filesData&&multiple&&filesData.length > 0){\r\n @if(!autoUpload){\r\n <button matButton=\"filled\" color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon><span class=\"ml-2\">\u4E0A\u4F20\u5168\u90E8</span></button>\r\n }\r\n\r\n <button matButton=\"filled\" color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon><span class=\"ml-2\">\u5220\u9664\u5168\u90E8</span></button>\r\n }\r\n }@else {\r\n <button matIconButton color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n </button>\r\n\r\n @if(filesData&&multiple&&filesData.length > 0){\r\n @if(!autoUpload){\r\n <button matIconButton color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon></button>\r\n }\r\n\r\n <button matIconButton color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon></button>\r\n }\r\n }\r\n </mat-card-actions>\r\n }\r\n\r\n <mat-card-content>\r\n <mat-list class=\"border-t\">\r\n @for (file of filesData; track $index) {\r\n <mat-list-item class=\"cmat-upload-file-item h-full\">\r\n <cmat-upload class=\"my-2\" [fileAlias]=\"fileAlias\" [filePath]=\"filePath\" [fileCategory]=\"fileCategory\"\r\n [autoUpload]=\"autoUpload\" [editMode]=\"editMode\" [file]=\"file\" [id]=\"file.id||null\" [isPublic]=\"isPublic\"\r\n (removeEvent)=\"remove($event)\" (uploadEvent)=\"upload($event)\"></cmat-upload>\r\n </mat-list-item>\r\n }\r\n </mat-list>\r\n </mat-card-content>\r\n</mat-card>\r\n", dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i1.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i1.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$1.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i2$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: CmatUploadComponent, selector: "cmat-upload", inputs: ["fileAlias", "filePath", "fileCategory", "isPublic", "editMode", "autoUpload", "id", "file"], outputs: ["removeEvent", "uploadEvent"], exportAs: ["cmatUpload"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
341
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CmatUploadQueueComponent, isStandalone: true, selector: "cmat-upload-queue", inputs: { fileAlias: "fileAlias", filePath: "filePath", fileCategory: "fileCategory", isPublic: "isPublic", required: "required", autoUpload: "autoUpload", multiple: "multiple", accept: "accept", title: "title", editMode: "editMode", filesData: "filesData" }, outputs: { outputRemoveIdEvent: "outputRemoveIdEvent", outputUploadIdEvent: "outputUploadIdEvent", outputFilesDataEvent: "outputFilesDataEvent" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDropOver($event)" } }, viewQueries: [{ propertyName: "fileUploads", predicate: i0.forwardRef(() => CmatUploadComponent), descendants: true }], exportAs: ["cmatUploadQueue"], usesOnChanges: true, ngImport: i0, template: "<mat-card>\r\n <mat-card-header>\r\n <mat-card-title>\r\n <legend class=\"text-lg\">\r\n {{title}}\r\n @if(required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n </mat-card-title>\r\n </mat-card-header>\r\n <input type=\"file\" class=\"hidden\" [id]=\"id\" [multiple]=\"multiple\" [accept]=\"accept\" />\r\n\r\n @if(editMode){\r\n <mat-card-actions class=\"flex flex-row gap-1 print:hidden\">\r\n @if(!isHandSet()){\r\n <button matButton=\"filled\" color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n <span class=\"ml-2\">\u9009\u62E9</span>\r\n </button>\r\n @if(fileDataSource()&&multiple&&fileDataSource().length > 0){\r\n @if(!autoUpload){\r\n <button matButton=\"filled\" color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon><span class=\"ml-2\">\u4E0A\u4F20\u5168\u90E8</span></button>\r\n }\r\n\r\n <button matButton=\"filled\" color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon><span class=\"ml-2\">\u5220\u9664\u5168\u90E8</span></button>\r\n }\r\n }@else {\r\n <button matIconButton color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n </button>\r\n\r\n @if(fileDataSource()&&multiple&&fileDataSource().length > 0){\r\n @if(!autoUpload){\r\n <button matIconButton color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon></button>\r\n }\r\n\r\n <button matIconButton color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon></button>\r\n }\r\n }\r\n </mat-card-actions>\r\n }\r\n\r\n <mat-card-content>\r\n <mat-list class=\"border-t\">\r\n @for (file of fileDataSource(); track $index) {\r\n <mat-list-item class=\"cmat-upload-file-item h-full\">\r\n <cmat-upload class=\"my-2\" [fileAlias]=\"fileAlias\" [filePath]=\"filePath\" [fileCategory]=\"fileCategory\"\r\n [autoUpload]=\"autoUpload\" [editMode]=\"editMode\" [file]=\"file\" [id]=\"file.id||null\" [isPublic]=\"isPublic\"\r\n (removeEvent)=\"remove($event)\" (uploadEvent)=\"upload($event)\"></cmat-upload>\r\n </mat-list-item>\r\n }\r\n </mat-list>\r\n </mat-card-content>\r\n</mat-card>\r\n", dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i1.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i1.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i2$1.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i2$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: CmatUploadComponent, selector: "cmat-upload", inputs: ["fileAlias", "filePath", "fileCategory", "isPublic", "editMode", "autoUpload", "id", "file"], outputs: ["removeEvent", "uploadEvent"], exportAs: ["cmatUpload"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
329
342
  }
330
343
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CmatUploadQueueComponent, decorators: [{
331
344
  type: Component,
332
- args: [{ selector: 'cmat-upload-queue', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatUploadQueue', imports: [MatCardModule, MatListModule, MatButtonModule, MatIconModule, CmatUploadComponent], template: "<mat-card>\r\n <mat-card-header>\r\n <mat-card-title>\r\n <legend class=\"text-lg\">\r\n {{title}}\r\n @if(required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n </mat-card-title>\r\n </mat-card-header>\r\n <input type=\"file\" class=\"hidden\" [id]=\"id\" [multiple]=\"multiple\" [accept]=\"accept\" />\r\n\r\n @if(editMode){\r\n <mat-card-actions class=\"flex flex-row gap-1 print:hidden\">\r\n @if(!isHandSet()){\r\n <button matButton=\"filled\" color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n <span class=\"ml-2\">\u9009\u62E9</span>\r\n </button>\r\n @if(filesData&&multiple&&filesData.length > 0){\r\n @if(!autoUpload){\r\n <button matButton=\"filled\" color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon><span class=\"ml-2\">\u4E0A\u4F20\u5168\u90E8</span></button>\r\n }\r\n\r\n <button matButton=\"filled\" color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon><span class=\"ml-2\">\u5220\u9664\u5168\u90E8</span></button>\r\n }\r\n }@else {\r\n <button matIconButton color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n </button>\r\n\r\n @if(filesData&&multiple&&filesData.length > 0){\r\n @if(!autoUpload){\r\n <button matIconButton color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon></button>\r\n }\r\n\r\n <button matIconButton color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon></button>\r\n }\r\n }\r\n </mat-card-actions>\r\n }\r\n\r\n <mat-card-content>\r\n <mat-list class=\"border-t\">\r\n @for (file of filesData; track $index) {\r\n <mat-list-item class=\"cmat-upload-file-item h-full\">\r\n <cmat-upload class=\"my-2\" [fileAlias]=\"fileAlias\" [filePath]=\"filePath\" [fileCategory]=\"fileCategory\"\r\n [autoUpload]=\"autoUpload\" [editMode]=\"editMode\" [file]=\"file\" [id]=\"file.id||null\" [isPublic]=\"isPublic\"\r\n (removeEvent)=\"remove($event)\" (uploadEvent)=\"upload($event)\"></cmat-upload>\r\n </mat-list-item>\r\n }\r\n </mat-list>\r\n </mat-card-content>\r\n</mat-card>\r\n" }]
345
+ args: [{ selector: 'cmat-upload-queue', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'cmatUploadQueue', imports: [MatCardModule, MatListModule, MatButtonModule, MatIconModule, CmatUploadComponent], template: "<mat-card>\r\n <mat-card-header>\r\n <mat-card-title>\r\n <legend class=\"text-lg\">\r\n {{title}}\r\n @if(required){\r\n <span>*</span>\r\n }\r\n </legend>\r\n </mat-card-title>\r\n </mat-card-header>\r\n <input type=\"file\" class=\"hidden\" [id]=\"id\" [multiple]=\"multiple\" [accept]=\"accept\" />\r\n\r\n @if(editMode){\r\n <mat-card-actions class=\"flex flex-row gap-1 print:hidden\">\r\n @if(!isHandSet()){\r\n <button matButton=\"filled\" color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n <span class=\"ml-2\">\u9009\u62E9</span>\r\n </button>\r\n @if(fileDataSource()&&multiple&&fileDataSource().length > 0){\r\n @if(!autoUpload){\r\n <button matButton=\"filled\" color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon><span class=\"ml-2\">\u4E0A\u4F20\u5168\u90E8</span></button>\r\n }\r\n\r\n <button matButton=\"filled\" color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon><span class=\"ml-2\">\u5220\u9664\u5168\u90E8</span></button>\r\n }\r\n }@else {\r\n <button matIconButton color=\"primary\" (click)=\"choose()\">\r\n @if(autoUpload){\r\n <mat-icon [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon>\r\n }@else {\r\n <mat-icon [svgIcon]=\"'mat_outline:add_box'\"></mat-icon>\r\n }\r\n </button>\r\n\r\n @if(fileDataSource()&&multiple&&fileDataSource().length > 0){\r\n @if(!autoUpload){\r\n <button matIconButton color=\"accent\" (click)=\"uploadAll()\"><mat-icon\r\n [svgIcon]=\"'mat_outline:file_upload'\"></mat-icon></button>\r\n }\r\n\r\n <button matIconButton color=\"warn\" (click)=\"removeAll()\"><mat-icon\r\n [svgIcon]=\"'heroicons_solid:trash'\"></mat-icon></button>\r\n }\r\n }\r\n </mat-card-actions>\r\n }\r\n\r\n <mat-card-content>\r\n <mat-list class=\"border-t\">\r\n @for (file of fileDataSource(); track $index) {\r\n <mat-list-item class=\"cmat-upload-file-item h-full\">\r\n <cmat-upload class=\"my-2\" [fileAlias]=\"fileAlias\" [filePath]=\"filePath\" [fileCategory]=\"fileCategory\"\r\n [autoUpload]=\"autoUpload\" [editMode]=\"editMode\" [file]=\"file\" [id]=\"file.id||null\" [isPublic]=\"isPublic\"\r\n (removeEvent)=\"remove($event)\" (uploadEvent)=\"upload($event)\"></cmat-upload>\r\n </mat-list-item>\r\n }\r\n </mat-list>\r\n </mat-card-content>\r\n</mat-card>\r\n" }]
333
346
  }], ctorParameters: () => [], propDecorators: { fileUploads: [{
334
347
  type: ViewChildren,
335
348
  args: [forwardRef(() => CmatUploadComponent)]