ngx-tethys 19.1.0-next.1 → 19.1.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +105 -0
- package/arrow-switcher/arrow-switcher.component.d.ts +5 -1
- package/badge/badge.component.d.ts +1 -1
- package/color-picker/coordinates.directive.d.ts +1 -2
- package/date-picker/abstract-picker.component.d.ts +50 -52
- package/date-picker/abstract-picker.directive.d.ts +15 -40
- package/date-picker/base-picker.component.d.ts +12 -40
- package/date-picker/date-picker.config.d.ts +3 -0
- package/date-picker/lib/calendar/calendar-footer.component.d.ts +24 -19
- package/date-picker/lib/calendar/calendar-header.component.d.ts +15 -15
- package/date-picker/lib/calendar/calendar-table.component.d.ts +15 -16
- package/date-picker/lib/date/date-table-cell.component.d.ts +6 -3
- package/date-picker/lib/date/date-table.component.d.ts +2 -3
- package/date-picker/lib/date-carousel/date-carousel.component.d.ts +2 -3
- package/date-picker/lib/decade/decade-header.component.d.ts +2 -5
- package/date-picker/lib/decade/decade-table.component.d.ts +3 -5
- package/date-picker/lib/month/month-table.component.d.ts +1 -2
- package/date-picker/lib/popups/date-popup.component.d.ts +33 -34
- package/date-picker/lib/popups/inner-popup.component.d.ts +22 -29
- package/date-picker/lib/quarter/quarter-table.component.d.ts +1 -4
- package/date-picker/lib/year/year-header.component.d.ts +2 -4
- package/date-picker/lib/year/year-table.component.d.ts +2 -4
- package/date-picker/month-picker.component.d.ts +2 -2
- package/date-picker/picker.component.d.ts +31 -36
- package/date-picker/picker.pipes.d.ts +4 -5
- package/date-picker/picker.util.d.ts +5 -5
- package/date-picker/picker.validators.d.ts +4 -8
- package/date-picker/quarter-picker.component.d.ts +2 -3
- package/date-picker/styles/range-picker.scss +1 -0
- package/date-picker/week-picker.component.d.ts +0 -1
- package/date-picker/year-picker.component.d.ts +2 -3
- package/dropdown/dropdown-menu.component.d.ts +1 -1
- package/dropdown/dropdown.directive.d.ts +4 -3
- package/empty/empty.component.d.ts +2 -1
- package/fesm2022/ngx-tethys-arrow-switcher.mjs +15 -3
- package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
- package/fesm2022/ngx-tethys-autocomplete.mjs +4 -4
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-checkbox.mjs +2 -2
- package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-tethys-color-picker.mjs +4 -6
- package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-copy.mjs +2 -2
- package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +855 -1072
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-divider.mjs +5 -5
- package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +9 -11
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-empty.mjs +5 -2
- package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
- package/fesm2022/ngx-tethys-flexible-text.mjs +4 -5
- package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
- package/fesm2022/ngx-tethys-i18n.mjs +26 -6
- package/fesm2022/ngx-tethys-i18n.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +5 -7
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-layout.mjs +291 -334
- package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs +183 -217
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-message.mjs +29 -36
- package/fesm2022/ngx-tethys-message.mjs.map +1 -1
- package/fesm2022/ngx-tethys-notify.mjs +33 -41
- package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +4 -4
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +20 -17
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +164 -228
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +423 -587
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-skeleton.mjs +1 -2
- package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
- package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +1 -2
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +244 -271
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +109 -93
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +215 -281
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-upload.mjs +2 -2
- package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/i18n/i18n.d.ts +7 -2
- package/i18n/locales/de-de.d.ts +5 -1
- package/i18n/locales/en-us.d.ts +5 -1
- package/i18n/locales/ja-jp.d.ts +5 -1
- package/i18n/locales/zh-hans.d.ts +5 -1
- package/i18n/locales/zh-hant.d.ts +5 -1
- package/image/preview/image-preview.component.d.ts +2 -2
- package/layout/header.component.d.ts +15 -19
- package/layout/layout.component.d.ts +3 -2
- package/layout/sidebar-header.component.d.ts +7 -8
- package/layout/sidebar.component.d.ts +32 -62
- package/list/list-item-meta.component.d.ts +7 -9
- package/list/list-item.component.d.ts +0 -2
- package/list/list.component.d.ts +2 -8
- package/list/selection/selection-list.d.ts +33 -46
- package/message/abstract/abstract-message.component.d.ts +2 -3
- package/message/message-container.component.d.ts +0 -1
- package/message/message.component.d.ts +1 -3
- package/notify/notify-container.component.d.ts +0 -1
- package/notify/notify.component.d.ts +7 -12
- package/package.json +1 -1
- package/resizable/resizable.directive.d.ts +2 -1
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/select/custom-select/custom-select.component.d.ts +33 -56
- package/select/native-select/native-select.component.d.ts +7 -13
- package/shared/base-form-check.component.d.ts +6 -8
- package/shared/directives/string-or-template-outlet.directive.d.ts +5 -6
- package/shared/directives/thy-autofocus.directive.d.ts +4 -6
- package/shared/directives/thy-contextmenu.directive.d.ts +2 -2
- package/shared/directives/thy-ctrl-enter.directive.d.ts +2 -2
- package/shared/directives/thy-enter.directive.d.ts +2 -2
- package/shared/directives/thy-scroll.directive.d.ts +5 -8
- package/shared/directives/thy-show.d.ts +5 -6
- package/shared/directives/thy-stop-propagation.directive.d.ts +4 -4
- package/shared/directives/view-outlet.directive.d.ts +6 -7
- package/shared/ng-transclude.directive.d.ts +2 -3
- package/shared/option/group/option-group.component.d.ts +5 -9
- package/shared/option/list-option/list-option.component.d.ts +9 -13
- package/shared/option/option.component.d.ts +10 -17
- package/shared/option/option.token.d.ts +4 -3
- package/shared/option/options-container.component.d.ts +1 -1
- package/shared/select/select-control/select-control.component.d.ts +38 -53
- package/stepper/stepper.component.d.ts +1 -1
- package/table/table-column.component.d.ts +15 -5
- package/time-picker/inner/inner-time-picker.class.d.ts +15 -13
- package/time-picker/inner/inner-time-picker.component.d.ts +26 -26
- package/time-picker/time-picker-panel.component.d.ts +18 -20
- package/time-picker/time-picker.component.d.ts +22 -30
- package/tooltip/tooltip.directive.d.ts +20 -22
- package/tree-select/tree-select.component.d.ts +53 -70
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-tree-select.mjs","sources":["../../../src/tree-select/tree-select.component.ts","../../../src/tree-select/tree-select.component.html","../../../src/tree-select/tree-select-nodes.component.html","../../../src/tree-select/module.ts","../../../src/tree-select/ngx-tethys-tree-select.ts"],"sourcesContent":["import {\n EXPANDED_DROPDOWN_POSITIONS,\n injectPanelEmptyIcon,\n scaleYMotion,\n TabIndexDisabledControlValueAccessorMixin,\n ThyClickDispatcher\n} from 'ngx-tethys/core';\nimport { ThyEmpty } from 'ngx-tethys/empty';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThySelectControl, ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { ThyTreeNode } from 'ngx-tethys/tree';\nimport { coerceBooleanProperty, elementMatchClosest, isArray, isObject, produce, warnDeprecation } from 'ngx-tethys/util';\nimport { Observable, of, Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectionPositionPair, ViewportRuler } from '@angular/cdk/overlay';\nimport { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { isPlatformBrowser, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n forwardRef,\n HostBinding,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n PLATFORM_ID,\n TemplateRef,\n ViewChild,\n inject,\n Signal,\n output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ThyTreeSelectNode, ThyTreeSelectType } from './tree-select.class';\nimport { injectLocale, ThyTreeSelectLocale } from 'ngx-tethys/i18n';\n\ntype InputSize = 'xs' | 'sm' | 'md' | 'lg' | '';\n\nexport function filterTreeData(treeNodes: ThyTreeSelectNode[], searchText: string, searchKey: string = 'name') {\n const filterNodes = (node: ThyTreeSelectNode, result: ThyTreeSelectNode[]) => {\n if (node[searchKey] && node[searchKey].indexOf(searchText) !== -1) {\n result.push(node);\n return result;\n }\n if (Array.isArray(node.children)) {\n const nodes = node.children.reduce((previous, current) => filterNodes(current, previous), [] as ThyTreeSelectNode[]);\n if (nodes.length) {\n const parentNode = { ...node, children: nodes, expand: true };\n result.push(parentNode);\n }\n }\n return result;\n };\n const treeData = treeNodes.reduce((previous, current) => filterNodes(current, previous), [] as ThyTreeSelectNode[]);\n return treeData;\n}\n\n/**\n * 树选择组件\n * @name thy-tree-select\n * @order 10\n */\n@Component({\n selector: 'thy-tree-select',\n templateUrl: './tree-select.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyTreeSelect),\n multi: true\n }\n ],\n imports: [\n CdkOverlayOrigin,\n ThySelectControl,\n NgTemplateOutlet,\n CdkConnectedOverlay,\n forwardRef(() => ThyTreeSelectNodes),\n ThyStopPropagationDirective\n ],\n host: {\n '[attr.tabindex]': 'tabIndex',\n '(focus)': 'onFocus($event)',\n '(blur)': 'onBlur($event)'\n },\n animations: [scaleYMotion]\n})\nexport class ThyTreeSelect extends TabIndexDisabledControlValueAccessorMixin implements OnInit, OnDestroy, ControlValueAccessor {\n elementRef = inject(ElementRef);\n private ngZone = inject(NgZone);\n private ref = inject(ChangeDetectorRef);\n private platformId = inject(PLATFORM_ID);\n private thyClickDispatcher = inject(ThyClickDispatcher);\n private viewportRuler = inject(ViewportRuler);\n\n @HostBinding('class.thy-select-custom') treeSelectClass = true;\n\n @HostBinding('class.thy-select') isTreeSelect = true;\n\n // 菜单是否展开\n @HostBinding('class.menu-is-opened') expandTreeSelectOptions = false;\n\n @HostBinding('class.thy-select-custom--multiple') isMulti = false;\n\n public treeNodes: ThyTreeSelectNode[];\n\n public selectedValue: any;\n\n public selectedNode: ThyTreeSelectNode;\n\n public selectedNodes: ThyTreeSelectNode[] = [];\n\n public flattenTreeNodes: ThyTreeSelectNode[] = [];\n\n virtualTreeNodes: ThyTreeSelectNode[] = [];\n\n public cdkConnectOverlayWidth = 0;\n\n public expandedDropdownPositions: ConnectionPositionPair[] = EXPANDED_DROPDOWN_POSITIONS;\n\n public icons: { expand: string; collapse: string; gap?: number } = {\n expand: 'angle-down',\n collapse: 'angle-right',\n gap: 15\n };\n\n private initialled = false;\n\n private destroy$ = new Subject<void>();\n\n private locale: Signal<ThyTreeSelectLocale> = injectLocale('treeSelect');\n\n public valueIsObject = false;\n\n originTreeNodes: ThyTreeSelectNode[];\n\n @ContentChild('thyTreeSelectTriggerDisplay')\n thyTreeSelectTriggerDisplayRef: TemplateRef<any>;\n\n @ContentChild('treeNodeTemplate')\n treeNodeTemplateRef: TemplateRef<any>;\n\n @ViewChild(CdkOverlayOrigin, { static: true }) cdkOverlayOrigin: CdkOverlayOrigin;\n\n @ViewChild(CdkConnectedOverlay, { static: true }) cdkConnectedOverlay: CdkConnectedOverlay;\n\n @ViewChild('customDisplayTemplate', { static: true }) customDisplayTemplate: TemplateRef<any>;\n\n /**\n * treeNodes 数据\n * @type ThyTreeSelectNode[]\n */\n @Input()\n set thyTreeNodes(value: ThyTreeSelectNode[]) {\n this.treeNodes = value;\n this.originTreeNodes = value;\n if (this.initialled) {\n this.flattenTreeNodes = this.flattenNodes(this.treeNodes, this.flattenTreeNodes, []);\n this.setSelectedNodes();\n\n if (this.thyVirtualScroll) {\n this.buildFlattenTreeNodes();\n }\n }\n }\n\n /**\n * 开启虚拟滚动\n */\n @Input({ transform: coerceBooleanProperty }) thyVirtualScroll: boolean = false;\n\n /**\n * 树节点的唯一标识\n * @type string\n */\n @Input() thyPrimaryKey = '_id';\n\n /**\n * 树节点的显示的字段 key\n * @type string\n */\n @Input() thyShowKey = 'name';\n\n @Input() thyChildCountKey = 'childCount';\n\n /**\n * 单选时,是否显示清除按钮,当为 true 时,显示清除按钮\n * @default false\n */\n @Input({ transform: coerceBooleanProperty }) thyAllowClear: boolean;\n\n /**\n * 是否多选\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyMultiple = false;\n\n /**\n * 是否禁用树选择器,当为 true 禁用树选择器\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyDisable = false;\n\n get thyDisabled(): boolean {\n return this.thyDisable;\n }\n\n /**\n * 树选择框默认文字\n * @type string\n */\n @Input() thyPlaceholder = this.locale().placeholder;\n\n get placeholder() {\n return this.thyPlaceholder;\n }\n\n /**\n * 控制树选择的输入框大小\n * @type xs | sm | md | default | lg\n */\n @Input() thySize: InputSize;\n\n /**\n * 改变空选项的情况下的提示文本\n * @type string\n */\n @Input() thyEmptyOptionsText = this.locale().empty;\n\n /**\n * 设置是否隐藏节点(不可进行任何操作),优先级高于 thyHiddenNodeFn\n * @type string\n */\n @Input() thyHiddenNodeKey = 'hidden';\n\n /**\n * 设置是否禁用节点(不可进行任何操作),优先级高于 thyDisableNodeFn\n * @type string\n */\n @Input() thyDisableNodeKey = 'disabled';\n\n /**\n * 是否异步加载节点的子节点(显示加载状态),当为 true 时,异步获取\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyAsyncNode = false;\n\n /**\n * 是否展示全名\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyShowWholeName = false;\n\n /**\n * 是否展示搜索\n * @type boolean\n */\n @Input({ transform: coerceBooleanProperty }) thyShowSearch = false;\n\n /**\n * 图标类型,支持 default | especial,已废弃\n * @deprecated\n */\n @Input()\n set thyIconType(type: ThyTreeSelectType) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n warnDeprecation('This parameter has been deprecation');\n }\n // if (type === 'especial') {\n // this.icons = { expand: 'minus-square', collapse: 'plus-square', gap: 20 };\n // } else {\n // this.icons = { expand: 'caret-right-down', collapse: 'caret-right', gap: 15 };\n // }\n }\n\n /**\n * 设置是否隐藏节点(不可进行任何操作),优先级低于 thyHiddenNodeKey。\n * @default (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.hidden\n */\n @Input() thyHiddenNodeFn: (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.hidden;\n\n /**\n * 设置是否禁用节点(不可进行任何操作),优先级低于 thyDisableNodeKey。\n * @default (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.disabled\n */\n @Input() thyDisableNodeFn: (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.disabled;\n\n /**\n * 获取节点的子节点,返回 Observable<ThyTreeSelectNode>。\n * @default (node: ThyTreeSelectNode) => Observable<ThyTreeSelectNode> = (node: ThyTreeSelectNode) => of([])\n */\n @Input() thyGetNodeChildren: (node: ThyTreeSelectNode) => Observable<ThyTreeSelectNode> = (node: ThyTreeSelectNode) => of([]);\n\n /**\n * 树选择组件展开和折叠状态事件\n */\n readonly thyExpandStatusChange = output<boolean>();\n\n private _getNgModelType() {\n if (this.thyMultiple) {\n this.valueIsObject = !this.selectedValue[0] || isObject(this.selectedValue[0]);\n } else {\n this.valueIsObject = isObject(this.selectedValue);\n }\n }\n\n public buildFlattenTreeNodes() {\n this.virtualTreeNodes = this.getFlattenTreeNodes(this.treeNodes);\n }\n\n private getFlattenTreeNodes(rootTrees: ThyTreeSelectNode[] = this.treeNodes) {\n const forEachTree = (tree: ThyTreeSelectNode[], fn: any, result: ThyTreeSelectNode[] = []) => {\n tree.forEach(item => {\n result.push(item);\n if (item.children && fn(item)) {\n forEachTree(item.children, fn, result);\n }\n });\n return result;\n };\n return forEachTree(rootTrees, (node: ThyTreeSelectNode) => !!node.expand);\n }\n\n writeValue(value: any): void {\n this.selectedValue = value;\n\n if (value) {\n this._getNgModelType();\n }\n this.setSelectedNodes();\n }\n\n constructor() {\n super();\n }\n\n ngOnInit() {\n this.isMulti = this.thyMultiple;\n this.flattenTreeNodes = this.flattenNodes(this.treeNodes, this.flattenTreeNodes, []);\n this.setSelectedNodes();\n this.initialled = true;\n\n if (this.thyVirtualScroll) {\n this.buildFlattenTreeNodes();\n }\n\n if (isPlatformBrowser(this.platformId)) {\n this.thyClickDispatcher\n .clicked(0)\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => {\n event.stopPropagation();\n if (!this.elementRef.nativeElement.contains(event.target) && this.expandTreeSelectOptions) {\n this.ngZone.run(() => {\n this.close();\n this.ref.markForCheck();\n });\n }\n });\n }\n this.viewportRuler\n .change()\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.init();\n });\n }\n\n onFocus($event: FocusEvent) {\n const inputElement: HTMLInputElement = this.elementRef.nativeElement.querySelector('input');\n inputElement?.focus();\n }\n\n onBlur($event: FocusEvent) {\n // 1. Tab 聚焦后自动聚焦到 input 输入框,此分支下直接返回,无需触发 onTouchedFn\n // 2. 打开选择框后如果点击弹框内导致 input 失焦,无需触发 onTouchedFn\n if (elementMatchClosest($event?.relatedTarget as HTMLElement, ['thy-tree-select', 'thy-tree-select-nodes'])) {\n return;\n }\n this.onTouchedFn();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n get selectedValueObject() {\n return this.thyMultiple ? this.selectedNodes : this.selectedNode;\n }\n\n searchValue(searchText: string) {\n this.treeNodes = filterTreeData(this.originTreeNodes, searchText.trim(), this.thyShowKey);\n }\n\n public setPosition() {\n this.ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this.cdkConnectedOverlay.overlayRef.updatePosition();\n });\n }\n\n private init() {\n this.cdkConnectOverlayWidth = this.cdkOverlayOrigin.elementRef.nativeElement.getBoundingClientRect().width;\n }\n\n private flattenNodes(\n nodes: ThyTreeSelectNode[] = [],\n resultNodes: ThyTreeSelectNode[] = [],\n parentPrimaryValue: string[] = []\n ): ThyTreeSelectNode[] {\n resultNodes = resultNodes.concat(nodes);\n let nodesLeafs: ThyTreeSelectNode[] = [];\n (nodes || []).forEach(item => {\n item.parentValues = parentPrimaryValue;\n item.level = item.parentValues.length;\n if (item.children && isArray(item.children)) {\n const nodeLeafs = this.flattenNodes(item.children, resultNodes, [...parentPrimaryValue, item[this.thyPrimaryKey]]);\n nodesLeafs = [...nodesLeafs, ...nodeLeafs];\n }\n });\n return [...nodes, ...nodesLeafs];\n }\n\n private _findTreeNode(value: string): ThyTreeSelectNode {\n return (this.flattenTreeNodes || []).find(item => item[this.thyPrimaryKey] === value);\n }\n\n private setSelectedNodes() {\n if (this.selectedValue) {\n // 多选数据初始化\n if (this.thyMultiple) {\n if (this.selectedValue.length > 0) {\n if (this.valueIsObject && Object.keys(this.selectedValue[0]).indexOf(this.thyPrimaryKey) >= 0) {\n this.selectedNodes = this.selectedValue.map((item: any) => {\n return this._findTreeNode(item[this.thyPrimaryKey]);\n });\n } else {\n this.selectedNodes = this.selectedValue.map((item: any) => {\n return this._findTreeNode(item);\n });\n }\n }\n } else {\n // 单选数据初始化\n if (this.valueIsObject) {\n if (Object.keys(this.selectedValue).indexOf(this.thyPrimaryKey) >= 0) {\n this.selectedNode = this._findTreeNode(this.selectedValue[this.thyPrimaryKey]);\n }\n } else {\n this.selectedNode = this._findTreeNode(this.selectedValue);\n }\n }\n } else {\n this.selectedNodes = [];\n this.selectedNode = null;\n }\n }\n\n openSelectPop() {\n if (this.thyDisable) {\n return;\n }\n this.cdkConnectOverlayWidth = this.cdkOverlayOrigin.elementRef.nativeElement.getBoundingClientRect().width;\n this.expandTreeSelectOptions = !this.expandTreeSelectOptions;\n this.thyExpandStatusChange.emit(this.expandTreeSelectOptions);\n }\n\n close() {\n if (this.expandTreeSelectOptions) {\n this.expandTreeSelectOptions = false;\n this.thyExpandStatusChange.emit(this.expandTreeSelectOptions);\n this.onTouchedFn();\n }\n }\n\n clearSelectedValue(event: Event) {\n event.stopPropagation();\n this.selectedValue = null;\n this.selectedNode = null;\n this.selectedNodes = [];\n this.onChangeFn(this.selectedValue);\n }\n\n private _changeSelectValue() {\n if (this.valueIsObject) {\n this.selectedValue = this.thyMultiple ? this.selectedNodes : this.selectedNode;\n } else {\n this.selectedValue = this.thyMultiple\n ? this.selectedNodes.map(item => item[this.thyPrimaryKey])\n : this.selectedNode[this.thyPrimaryKey];\n }\n this.onChangeFn(this.selectedValue);\n if (!this.thyMultiple) {\n this.onTouchedFn();\n }\n }\n\n removeMultipleSelectedNode(event: { item: ThyTreeSelectNode; $eventOrigin: Event }) {\n this.removeSelectedNode(event.item, event.$eventOrigin);\n }\n\n // thyMultiple = true 时,移除数据时调用\n removeSelectedNode(node: ThyTreeSelectNode, event?: Event) {\n if (event) {\n event.stopPropagation();\n }\n if (this.thyDisable) {\n return;\n }\n if (this.thyMultiple) {\n this.selectedNodes = produce(this.selectedNodes).remove((item: ThyTreeSelectNode) => {\n return item[this.thyPrimaryKey] === node[this.thyPrimaryKey];\n });\n this._changeSelectValue();\n }\n }\n\n selectNode(node: ThyTreeSelectNode) {\n if (!this.thyMultiple) {\n this.selectedNode = node;\n this.expandTreeSelectOptions = false;\n this.thyExpandStatusChange.emit(this.expandTreeSelectOptions);\n this._changeSelectValue();\n } else {\n if (\n this.selectedNodes.find(item => {\n return item[this.thyPrimaryKey] === node[this.thyPrimaryKey];\n })\n ) {\n this.removeSelectedNode(node);\n } else {\n this.selectedNodes = produce(this.selectedNodes).add(node);\n this._changeSelectValue();\n }\n }\n }\n\n getNodeChildren(node: ThyTreeSelectNode) {\n const result = this.thyGetNodeChildren(node);\n if (result && result.subscribe) {\n result.pipe().subscribe((data: ThyTreeSelectNode[]) => {\n const nodes = this.flattenNodes(data, this.flattenTreeNodes, [...node.parentValues, node[this.thyPrimaryKey]]);\n const otherNodes = nodes.filter((item: ThyTreeNode) => {\n return !this.flattenTreeNodes.find(hasItem => {\n return hasItem[this.thyPrimaryKey] === item[this.thyPrimaryKey];\n });\n });\n this.flattenTreeNodes = [...this.flattenTreeNodes, ...otherNodes];\n node.children = data;\n });\n return result;\n }\n }\n}\n\nconst DEFAULT_ITEM_SIZE = 40;\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-tree-select-nodes',\n templateUrl: './tree-select-nodes.component.html',\n imports: [\n NgTemplateOutlet,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n ThyEmpty,\n NgClass,\n NgStyle,\n ThyIcon,\n ThyFlexibleText\n ],\n host: {\n '[attr.tabindex]': '-1'\n }\n})\nexport class ThyTreeSelectNodes implements OnInit {\n parent = inject(ThyTreeSelect);\n emptyIcon: Signal<string> = injectPanelEmptyIcon();\n\n @HostBinding('class') class: string;\n\n nodeList: ThyTreeSelectNode[] = [];\n\n @Input() set treeNodes(value: ThyTreeSelectNode[]) {\n const treeSelectHeight = this.defaultItemSize * value.length;\n // 父级设置了max-height:300 & padding:10 0; 故此处最多设置280,否则将出现滚动条\n this.thyVirtualHeight = treeSelectHeight > 300 ? '280px' : `${treeSelectHeight}px`;\n this.nodeList = value;\n this.hasNodeChildren = this.nodeList.every(\n item => !item.hasOwnProperty('children') || (!item?.children?.length && !item?.childCount)\n );\n }\n\n @Input() thyVirtualScroll: boolean = false;\n\n public primaryKey = this.parent.thyPrimaryKey;\n\n public showKey = this.parent.thyShowKey;\n\n public isMultiple = this.parent.thyMultiple;\n\n public valueIsObject = this.parent.valueIsObject;\n\n public selectedValue = this.parent.selectedValue;\n\n public childCountKey = this.parent.thyChildCountKey;\n\n public treeNodeTemplateRef = this.parent.treeNodeTemplateRef;\n\n public defaultItemSize = DEFAULT_ITEM_SIZE;\n\n public thyVirtualHeight: string = null;\n\n public hasNodeChildren: boolean = false;\n\n ngOnInit() {\n this.class = this.isMultiple ? 'thy-tree-select-dropdown thy-tree-select-dropdown-multiple' : 'thy-tree-select-dropdown';\n }\n\n treeNodeIsSelected(node: ThyTreeSelectNode) {\n if (this.parent.thyMultiple) {\n return (this.parent.selectedNodes || []).find(item => {\n return item[this.primaryKey] === node[this.primaryKey];\n });\n } else {\n return this.parent.selectedNode && this.parent.selectedNode[this.primaryKey] === node[this.primaryKey];\n }\n }\n\n treeNodeIsHidden(node: ThyTreeSelectNode) {\n if (this.parent.thyHiddenNodeKey) {\n return node[this.parent.thyHiddenNodeKey];\n }\n if (this.parent.thyHiddenNodeFn) {\n return this.parent.thyHiddenNodeFn(node);\n }\n return false;\n }\n\n treeNodeIsDisable(node: ThyTreeSelectNode) {\n if (this.parent.thyDisableNodeKey) {\n return node[this.parent.thyDisableNodeKey];\n }\n if (this.parent.thyDisableNodeFn) {\n return this.parent.thyDisableNodeFn(node);\n }\n return false;\n }\n\n treeNodeIsExpand(node: ThyTreeSelectNode) {\n let isSelectedNodeParent = false;\n if (this.parent.thyMultiple) {\n isSelectedNodeParent = !!(this.parent.selectedNodes || []).find(item => {\n return item.parentValues.indexOf(node[this.primaryKey]) > -1;\n });\n } else {\n isSelectedNodeParent = this.parent.selectedNode\n ? this.parent.selectedNode.parentValues.indexOf(node[this.primaryKey]) > -1\n : false;\n }\n const isExpand = node.expand || (Object.keys(node).indexOf('expand') < 0 && isSelectedNodeParent);\n node.expand = isExpand;\n return isExpand;\n }\n\n getNodeChildren(node: ThyTreeSelectNode) {\n return this.parent.getNodeChildren(node);\n }\n\n selectTreeNode(event: Event, node: ThyTreeSelectNode) {\n if (!this.treeNodeIsDisable(node)) {\n this.parent.selectNode(node);\n }\n }\n\n nodeExpandToggle(event: Event, node: ThyTreeSelectNode) {\n event.stopPropagation();\n if (Object.keys(node).indexOf('expand') > -1) {\n node.expand = !node.expand;\n } else {\n if (this.treeNodeIsExpand(node)) {\n node.expand = false;\n } else {\n node.expand = true;\n }\n }\n\n if (node.expand && this.parent.thyAsyncNode) {\n this.getNodeChildren(node).subscribe(() => {\n this.parent.setPosition();\n });\n }\n // this.parent.setPosition();\n if (this.thyVirtualScroll) {\n this.parent.buildFlattenTreeNodes();\n }\n }\n\n tabTrackBy(index: number, item: ThyTreeSelectNode) {\n return index;\n }\n}\n","<div\n cdkOverlayOrigin\n thySelectControl\n (click)=\"openSelectPop()\"\n #origin=\"cdkOverlayOrigin\"\n [thyPanelOpened]=\"expandTreeSelectOptions\"\n [thySelectedOptions]=\"selectedValueObject\"\n [thyIsMultiple]=\"thyMultiple\"\n [thyAllowClear]=\"thyAllowClear\"\n [thySize]=\"thySize\"\n [thyPlaceholder]=\"placeholder\"\n [customDisplayTemplate]=\"customDisplayTemplate\"\n [thyShowSearch]=\"thyShowSearch\"\n [thyDisabled]=\"thyDisable\"\n (thyOnBlur)=\"onBlur($event)\"\n (thyOnClear)=\"clearSelectedValue($event)\"\n (thyOnRemove)=\"removeMultipleSelectedNode($event)\"\n (thyOnSearch)=\"searchValue($event)\">\n <ng-template #customDisplayTemplate let-node>\n @if (thyTreeSelectTriggerDisplayRef) {\n <ng-template [ngTemplateOutlet]=\"thyTreeSelectTriggerDisplayRef\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n } @else {\n {{ node[thyShowKey] }}\n }\n </ng-template>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayMinWidth]=\"cdkConnectOverlayWidth\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayOpen]=\"expandTreeSelectOptions\"\n cdkConnectedOverlayTransformOriginOn=\".thy-tree-select-dropdown\"\n [cdkConnectedOverlayPositions]=\"expandedDropdownPositions\"\n (detach)=\"close()\">\n <thy-tree-select-nodes\n thyStopPropagation\n [thyVirtualScroll]=\"thyVirtualScroll\"\n [treeNodes]=\"thyVirtualScroll ? virtualTreeNodes : treeNodes\"\n [@scaleYMotion]=\"'enter'\">\n </thy-tree-select-nodes>\n</ng-template>\n","@if (nodeList?.length > 0) {\n <div class=\"thy-tree-select-options\">\n <div class=\"thy-tree-select-node\">\n @if (!thyVirtualScroll) {\n @for (node of nodeList; track $index) {\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n }\n }\n @if (thyVirtualScroll) {\n <cdk-virtual-scroll-viewport #viewport [itemSize]=\"defaultItemSize\" [style.height]=\"thyVirtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n </div>\n </div>\n} @else {\n <thy-empty\n class=\"thy-select-empty-content\"\n thySize=\"sm\"\n [thyMessage]=\"parent.thyEmptyOptionsText\"\n [thyIconName]=\"emptyIcon()\"></thy-empty>\n}\n\n<ng-template #treeSelectNode let-node>\n <ng-container>\n @if (!treeNodeIsHidden(node)) {\n <a\n class=\"thy-option-item\"\n [ngClass]=\"{ active: treeNodeIsSelected(node), 'pl-0': hasNodeChildren }\"\n [class.disabled]=\"treeNodeIsDisable(node)\"\n [ngStyle]=\"{ 'padding-left.px': 20 * node.level + parent.icons.gap }\"\n (click)=\"selectTreeNode($event, node)\">\n <span\n class=\"thy-tree-select-option-icon\"\n [class.invisible]=\"!(node.children?.length > 0 || (node[childCountKey] && node[childCountKey] > 0))\"\n (click)=\"nodeExpandToggle($event, node)\">\n <thy-icon\n class=\"node-expand-icon\"\n [thyIconName]=\"treeNodeIsExpand(node) ? parent.icons.expand : parent.icons.collapse\"></thy-icon>\n </span>\n <span class=\"thy-tree-select-option-text\" [ngClass]=\"{ 'ml-1': hasNodeChildren }\">\n @if (treeNodeTemplateRef) {\n <ng-template [ngTemplateOutlet]=\"treeNodeTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n } @else {\n <span thyFlexibleText [thyTooltipContent]=\"node[showKey]\">{{ node[showKey] }}</span>\n }\n </span>\n @if (isMultiple) {\n <thy-icon class=\"checked-icon\" thyIconName=\"check\"></thy-icon>\n }\n </a>\n }\n @if (!thyVirtualScroll && treeNodeIsExpand(node) && node.children?.length > 0) {\n @for (node of node.children; track $index) {\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n }\n }\n </ng-container>\n</ng-template>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyListModule } from 'ngx-tethys/list';\nimport { ThySelectCommonModule, ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyTreeSelect, ThyTreeSelectNodes } from './tree-select.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n ThyListModule,\n ThyIconModule,\n ThyEmptyModule,\n ThySelectCommonModule,\n ThySharedModule,\n ThyTreeSelect,\n ThyTreeSelectNodes\n ],\n exports: [ThyTreeSelect, ThyTreeSelectNodes]\n})\nexport class ThyTreeSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-tree-select.mjs","sources":["../../../src/tree-select/tree-select.component.ts","../../../src/tree-select/tree-select.component.html","../../../src/tree-select/tree-select-nodes.component.html","../../../src/tree-select/module.ts","../../../src/tree-select/ngx-tethys-tree-select.ts"],"sourcesContent":["import {\n EXPANDED_DROPDOWN_POSITIONS,\n injectPanelEmptyIcon,\n scaleYMotion,\n TabIndexDisabledControlValueAccessorMixin,\n ThyClickDispatcher\n} from 'ngx-tethys/core';\nimport { ThyEmpty } from 'ngx-tethys/empty';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { ThySelectControl, ThyStopPropagationDirective } from 'ngx-tethys/shared';\nimport { ThyTreeNode } from 'ngx-tethys/tree';\nimport { coerceBooleanProperty, elementMatchClosest, isArray, isObject, produce } from 'ngx-tethys/util';\nimport { Observable, of } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectionPositionPair, ViewportRuler } from '@angular/cdk/overlay';\nimport { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { isPlatformBrowser, NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n Input,\n NgZone,\n PLATFORM_ID,\n TemplateRef,\n inject,\n Signal,\n output,\n input,\n effect,\n computed,\n signal,\n afterNextRender,\n DestroyRef,\n contentChild,\n viewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ThyTreeSelectNode, ThyTreeSelectType } from './tree-select.class';\nimport { injectLocale, ThyTreeSelectLocale } from 'ngx-tethys/i18n';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\ntype InputSize = 'xs' | 'sm' | 'md' | 'lg' | '';\n\nexport function filterTreeData(treeNodes: ThyTreeSelectNode[], searchText: string, searchKey: string = 'name') {\n const filterNodes = (node: ThyTreeSelectNode, result: ThyTreeSelectNode[]) => {\n if (node[searchKey] && node[searchKey].indexOf(searchText) !== -1) {\n result.push(node);\n return result;\n }\n if (Array.isArray(node.children)) {\n const nodes = node.children.reduce((previous, current) => filterNodes(current, previous), [] as ThyTreeSelectNode[]);\n if (nodes.length) {\n const parentNode = { ...node, children: nodes, expand: true };\n result.push(parentNode);\n }\n }\n return result;\n };\n const treeData = treeNodes.reduce((previous, current) => filterNodes(current, previous), [] as ThyTreeSelectNode[]);\n return treeData;\n}\n\n/**\n * 树选择组件\n * @name thy-tree-select\n * @order 10\n */\n@Component({\n selector: 'thy-tree-select',\n templateUrl: './tree-select.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThyTreeSelect),\n multi: true\n }\n ],\n imports: [\n CdkOverlayOrigin,\n ThySelectControl,\n NgTemplateOutlet,\n CdkConnectedOverlay,\n forwardRef(() => ThyTreeSelectNodes),\n ThyStopPropagationDirective\n ],\n host: {\n class: 'thy-select-custom thy-select',\n '[class.thy-select-custom--multiple]': 'thyMultiple()',\n '[class.menu-is-opened]': 'expandTreeSelectOptions()',\n '[attr.tabindex]': 'tabIndex',\n '(focus)': 'onFocus($event)',\n '(blur)': 'onBlur($event)'\n },\n animations: [scaleYMotion]\n})\nexport class ThyTreeSelect extends TabIndexDisabledControlValueAccessorMixin implements ControlValueAccessor {\n elementRef = inject(ElementRef);\n private ngZone = inject(NgZone);\n private ref = inject(ChangeDetectorRef);\n private platformId = inject(PLATFORM_ID);\n private thyClickDispatcher = inject(ThyClickDispatcher);\n private viewportRuler = inject(ViewportRuler);\n private destroyRef = inject(DestroyRef);\n\n // 菜单是否展开\n public expandTreeSelectOptions = signal(false);\n\n public selectedValue = signal<any>(undefined);\n\n public selectedNode = signal<ThyTreeSelectNode>(null);\n\n public selectedNodes = signal<ThyTreeSelectNode[]>([]);\n\n public flattenTreeNodes = signal<ThyTreeSelectNode[]>([]);\n\n virtualTreeNodes = signal<ThyTreeSelectNode[]>([]);\n\n public cdkConnectOverlayWidth = signal(0);\n\n public expandedDropdownPositions: ConnectionPositionPair[] = EXPANDED_DROPDOWN_POSITIONS;\n\n public icons: { expand: string; collapse: string; gap?: number } = {\n expand: 'angle-down',\n collapse: 'angle-right',\n gap: 15\n };\n\n private locale: Signal<ThyTreeSelectLocale> = injectLocale('treeSelect');\n\n public valueIsObject = computed(() => {\n const selectedValue = this.selectedValue();\n if (this.thyMultiple()) {\n return selectedValue && (!selectedValue[0] || isObject(selectedValue[0]));\n } else {\n return isObject(selectedValue);\n }\n });\n\n public searchText = signal('');\n\n readonly thyTreeSelectTriggerDisplayRef = contentChild<TemplateRef<any>>('thyTreeSelectTriggerDisplay');\n\n readonly treeNodeTemplateRef = contentChild<TemplateRef<any>>('treeNodeTemplate');\n\n readonly cdkOverlayOrigin = viewChild(CdkOverlayOrigin);\n\n readonly cdkConnectedOverlay = viewChild(CdkConnectedOverlay);\n\n readonly customDisplayTemplate = viewChild<TemplateRef<any>>('customDisplayTemplate');\n\n /**\n * treeNodes 数据\n * @type ThyTreeSelectNode[]\n */\n readonly thyTreeNodes = input<ThyTreeSelectNode[]>([]);\n\n treeNodes = computed(() => {\n return filterTreeData(this.thyTreeNodes(), this.searchText(), this.thyShowKey());\n });\n\n /**\n * 开启虚拟滚动\n */\n readonly thyVirtualScroll = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 树节点的唯一标识\n * @type string\n */\n readonly thyPrimaryKey = input('_id');\n\n /**\n * 树节点的显示的字段 key\n * @type string\n */\n readonly thyShowKey = input('name');\n\n readonly thyChildCountKey = input('childCount');\n\n /**\n * 单选时,是否显示清除按钮,当为 true 时,显示清除按钮\n * @default false\n */\n readonly thyAllowClear = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否多选\n * @type boolean\n */\n readonly thyMultiple = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否禁用树选择器,当为 true 禁用树选择器\n * @type boolean\n */\n readonly thyDisable = input(false, { transform: coerceBooleanProperty });\n\n get thyDisabled(): boolean {\n return this.thyDisable();\n }\n\n /**\n * 树选择框默认文字\n * @type string\n */\n readonly thyPlaceholder = input(this.locale().placeholder);\n\n /**\n * 控制树选择的输入框大小\n * @type xs | sm | md | default | lg\n */\n readonly thySize = input<InputSize>(undefined);\n\n /**\n * 改变空选项的情况下的提示文本\n * @type string\n */\n readonly thyEmptyOptionsText = input(this.locale().empty);\n\n /**\n * 设置是否隐藏节点(不可进行任何操作),优先级高于 thyHiddenNodeFn\n * @type string\n */\n readonly thyHiddenNodeKey = input('hidden');\n\n /**\n * 设置是否禁用节点(不可进行任何操作),优先级高于 thyDisableNodeFn\n * @type string\n */\n readonly thyDisableNodeKey = input('disabled');\n\n /**\n * 是否异步加载节点的子节点(显示加载状态),当为 true 时,异步获取\n * @type boolean\n */\n readonly thyAsyncNode = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否展示全名\n * @type boolean\n */\n readonly thyShowWholeName = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否展示搜索\n * @type boolean\n */\n readonly thyShowSearch = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 图标类型,支持 default | especial,已废弃\n * @deprecated\n */\n readonly thyIconType = input<ThyTreeSelectType>(undefined);\n\n /**\n * 设置是否隐藏节点(不可进行任何操作),优先级低于 thyHiddenNodeKey。\n * @default (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.hidden\n */\n @Input() thyHiddenNodeFn: (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.hidden;\n\n /**\n * 设置是否禁用节点(不可进行任何操作),优先级低于 thyDisableNodeKey。\n * @default (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.disabled\n */\n @Input() thyDisableNodeFn: (node: ThyTreeSelectNode) => boolean = (node: ThyTreeSelectNode) => node.disabled;\n\n /**\n * 获取节点的子节点,返回 Observable<ThyTreeSelectNode>。\n * @default (node: ThyTreeSelectNode) => Observable<ThyTreeSelectNode> = (node: ThyTreeSelectNode) => of([])\n */\n @Input() thyGetNodeChildren: (node: ThyTreeSelectNode) => Observable<ThyTreeSelectNode> = (node: ThyTreeSelectNode) => of([]);\n\n /**\n * 树选择组件展开和折叠状态事件\n */\n readonly thyExpandStatusChange = output<boolean>();\n\n public buildFlattenTreeNodes() {\n this.virtualTreeNodes.set(this.getFlattenTreeNodes(this.treeNodes()));\n }\n\n private getFlattenTreeNodes(rootTrees: ThyTreeSelectNode[] = this.treeNodes()) {\n const forEachTree = (tree: ThyTreeSelectNode[], fn: any, result: ThyTreeSelectNode[] = []) => {\n tree.forEach(item => {\n result.push(item);\n if (item.children && fn(item)) {\n forEachTree(item.children, fn, result);\n }\n });\n return result;\n };\n return forEachTree(rootTrees, (node: ThyTreeSelectNode) => !!node.expand);\n }\n\n writeValue(value: any): void {\n this.selectedValue.set(value);\n }\n\n constructor() {\n super();\n\n this.bindClickEvent();\n this.bindResizeEvent();\n\n effect(() => {\n this.setSelectedNodes();\n });\n\n effect(() => {\n if (this.thyVirtualScroll()) {\n this.buildFlattenTreeNodes();\n }\n });\n\n effect(() => {\n this.flattenTreeNodes.set(this.flattenNodes(this.treeNodes(), []));\n });\n }\n\n private bindClickEvent() {\n if (isPlatformBrowser(this.platformId)) {\n this.thyClickDispatcher\n .clicked(0)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(event => {\n event.stopPropagation();\n if (!this.elementRef.nativeElement.contains(event.target) && this.expandTreeSelectOptions()) {\n this.ngZone.run(() => {\n this.close();\n });\n }\n });\n }\n }\n\n private bindResizeEvent() {\n this.viewportRuler\n .change()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.cdkConnectOverlayWidth.set(this.cdkOverlayOrigin().elementRef.nativeElement.getBoundingClientRect().width);\n });\n }\n\n onFocus($event: FocusEvent) {\n const inputElement: HTMLInputElement = this.elementRef.nativeElement.querySelector('input');\n inputElement?.focus();\n }\n\n onBlur($event: FocusEvent) {\n // 1. Tab 聚焦后自动聚焦到 input 输入框,此分支下直接返回,无需触发 onTouchedFn\n // 2. 打开选择框后如果点击弹框内导致 input 失焦,无需触发 onTouchedFn\n if (elementMatchClosest($event?.relatedTarget as HTMLElement, ['thy-tree-select', 'thy-tree-select-nodes'])) {\n return;\n }\n this.onTouchedFn();\n }\n\n public readonly selectedValueObject = computed(() => {\n return this.thyMultiple() ? this.selectedNodes() : this.selectedNode();\n });\n\n searchValue(searchText: string) {\n this.searchText.set(searchText.trim());\n }\n\n public setPosition() {\n this.ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n this.cdkConnectedOverlay().overlayRef.updatePosition();\n });\n }\n\n private flattenNodes(nodes: ThyTreeSelectNode[] = [], parentPrimaryValue: string[] = []): ThyTreeSelectNode[] {\n let flattenedNodes: ThyTreeSelectNode[] = [];\n (nodes || []).forEach(item => {\n item.parentValues = parentPrimaryValue;\n item.level = item.parentValues.length;\n flattenedNodes.push(item);\n if (item.children && isArray(item.children)) {\n const childNodes = this.flattenNodes(item.children, [...parentPrimaryValue, item[this.thyPrimaryKey()]]);\n flattenedNodes = flattenedNodes.concat(childNodes);\n }\n });\n return flattenedNodes;\n }\n\n private _findTreeNode(value: string): ThyTreeSelectNode {\n return (this.flattenTreeNodes() || []).find(item => item[this.thyPrimaryKey()] === value);\n }\n\n private setSelectedNodes() {\n const isMultiple = this.thyMultiple();\n const primaryKey = this.thyPrimaryKey();\n const selectedValue = this.selectedValue();\n const valueIsObject = this.valueIsObject();\n if (selectedValue) {\n // 多选数据初始化\n if (isMultiple) {\n if (selectedValue.length > 0) {\n if (valueIsObject && Object.keys(selectedValue[0]).indexOf(primaryKey) >= 0) {\n this.selectedNodes.set(\n selectedValue.map((item: any) => {\n return this._findTreeNode(item[primaryKey]);\n })\n );\n } else {\n this.selectedNodes.set(\n selectedValue.map((item: any) => {\n return this._findTreeNode(item);\n })\n );\n }\n }\n } else {\n // 单选数据初始化\n if (valueIsObject) {\n if (Object.keys(selectedValue).indexOf(primaryKey) >= 0) {\n this.selectedNode.set(this._findTreeNode(selectedValue[primaryKey]));\n }\n } else {\n this.selectedNode.set(this._findTreeNode(selectedValue));\n }\n }\n } else {\n this.selectedNodes.set([]);\n this.selectedNode.set(null);\n }\n }\n\n openSelectPop() {\n if (this.thyDisable()) {\n return;\n }\n this.cdkConnectOverlayWidth.set(this.cdkOverlayOrigin().elementRef.nativeElement.getBoundingClientRect().width);\n this.expandTreeSelectOptions.set(!this.expandTreeSelectOptions());\n this.thyExpandStatusChange.emit(this.expandTreeSelectOptions());\n }\n\n close() {\n if (this.expandTreeSelectOptions()) {\n this.expandTreeSelectOptions.set(false);\n this.thyExpandStatusChange.emit(false);\n this.onTouchedFn();\n }\n }\n\n clearSelectedValue(event: Event) {\n event.stopPropagation();\n this.selectedValue.set(null);\n this.selectedNode.set(null);\n this.selectedNodes.set([]);\n this.onChangeFn(null);\n }\n\n private _changeSelectValue() {\n const selectedNodes = this.selectedNodes();\n const selectedNode = this.selectedNode();\n if (this.valueIsObject()) {\n this.selectedValue.set(this.thyMultiple() ? selectedNodes : selectedNode);\n } else {\n const value = this.thyMultiple() ? selectedNodes.map(item => item[this.thyPrimaryKey()]) : selectedNode[this.thyPrimaryKey()];\n this.selectedValue.set(value);\n }\n this.onChangeFn(this.selectedValue());\n if (!this.thyMultiple()) {\n this.onTouchedFn();\n }\n }\n\n removeMultipleSelectedNode(event: { item: ThyTreeSelectNode; $eventOrigin: Event }) {\n this.removeSelectedNode(event.item, event.$eventOrigin);\n }\n\n // thyMultiple = true 时,移除数据时调用\n removeSelectedNode(node: ThyTreeSelectNode, event?: Event) {\n if (event) {\n event.stopPropagation();\n }\n if (this.thyDisable()) {\n return;\n }\n if (this.thyMultiple()) {\n this.selectedNodes.set(\n produce(this.selectedNodes()).remove((item: ThyTreeSelectNode) => {\n return item[this.thyPrimaryKey()] === node[this.thyPrimaryKey()];\n })\n );\n this._changeSelectValue();\n }\n }\n\n selectNode(node: ThyTreeSelectNode) {\n if (!this.thyMultiple()) {\n this.selectedNode.set(node);\n this.expandTreeSelectOptions.set(false);\n this.thyExpandStatusChange.emit(false);\n this._changeSelectValue();\n } else {\n if (\n this.selectedNodes().find(item => {\n return item[this.thyPrimaryKey()] === node[this.thyPrimaryKey()];\n })\n ) {\n this.removeSelectedNode(node);\n } else {\n this.selectedNodes.set(produce(this.selectedNodes()).add(node));\n this._changeSelectValue();\n }\n }\n }\n\n getNodeChildren(node: ThyTreeSelectNode) {\n const result = this.thyGetNodeChildren(node);\n if (result && result.subscribe) {\n result.subscribe((data: ThyTreeSelectNode[]) => {\n const flattenTreeNodes = this.flattenTreeNodes();\n const nodes = this.flattenNodes(data, [...node.parentValues, node[this.thyPrimaryKey()]]);\n const otherNodes = nodes.filter((item: ThyTreeNode) => {\n return !flattenTreeNodes.find(hasItem => {\n return hasItem[this.thyPrimaryKey()] === item[this.thyPrimaryKey() as keyof ThyTreeNode];\n });\n });\n this.flattenTreeNodes.set(flattenTreeNodes.concat(otherNodes));\n node.children = data;\n });\n return result;\n }\n }\n}\n\nconst DEFAULT_ITEM_SIZE = 40;\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-tree-select-nodes',\n templateUrl: './tree-select-nodes.component.html',\n imports: [\n NgTemplateOutlet,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n ThyEmpty,\n NgClass,\n NgStyle,\n ThyIcon,\n ThyFlexibleText\n ],\n host: {\n '[attr.tabindex]': '-1',\n class: 'thy-tree-select-dropdown',\n '[class.thy-tree-select-dropdown-multiple]': 'isMultiple()'\n }\n})\nexport class ThyTreeSelectNodes {\n parent = inject(ThyTreeSelect);\n\n emptyIcon: Signal<string> = injectPanelEmptyIcon();\n\n readonly treeNodes = input<ThyTreeSelectNode[]>([]);\n\n readonly thyVirtualScroll = input<boolean>(false);\n\n public readonly isMultiple = computed(() => this.parent.thyMultiple());\n\n public readonly childCountKey = computed(() => this.parent.thyChildCountKey());\n\n public readonly treeNodeTemplateRef = computed(() => this.parent.treeNodeTemplateRef());\n\n public defaultItemSize = DEFAULT_ITEM_SIZE;\n\n public readonly thyPrimaryKey = computed(() => this.parent.thyPrimaryKey());\n\n public readonly selectedNodes = computed(() => this.parent.selectedNodes());\n\n public readonly selectedNode = computed(() => this.parent.selectedNode());\n\n public readonly hiddenNodeKey = computed(() => this.parent.thyHiddenNodeKey());\n\n public readonly disableNodeKey = computed(() => this.parent.thyDisableNodeKey());\n\n public readonly thyVirtualHeight = computed(() => {\n const treeSelectHeight = this.defaultItemSize * this.treeNodes().length;\n // 父级设置了max-height:300 & padding:10 0; 故此处最多设置280,否则将出现滚动条\n return treeSelectHeight > 300 ? '280px' : `${treeSelectHeight}px`;\n });\n\n public readonly hasNodeChildren = computed(() => {\n return this.treeNodes().every(item => !item.hasOwnProperty('children') || (!item?.children?.length && !item?.childCount));\n });\n\n treeNodeIsSelected(node: ThyTreeSelectNode) {\n const primaryKey = this.thyPrimaryKey();\n const isMultiple = this.isMultiple();\n if (isMultiple) {\n const selectedNodes = this.selectedNodes() || [];\n return selectedNodes.find(item => {\n return item[primaryKey] === node[primaryKey];\n });\n } else {\n return this.selectedNode() && this.selectedNode()[primaryKey] === node[primaryKey];\n }\n }\n\n treeNodeIsHidden(node: ThyTreeSelectNode) {\n const hiddenNodeKey = this.hiddenNodeKey();\n if (hiddenNodeKey) {\n return node[hiddenNodeKey];\n }\n const thyHiddenNodeFn = this.parent.thyHiddenNodeFn;\n if (thyHiddenNodeFn) {\n return thyHiddenNodeFn(node);\n }\n return false;\n }\n\n treeNodeIsDisable(node: ThyTreeSelectNode) {\n const disableNodeKey = this.disableNodeKey();\n if (disableNodeKey) {\n return node[disableNodeKey];\n }\n const thyDisableNodeFn = this.parent.thyDisableNodeFn;\n if (thyDisableNodeFn) {\n return thyDisableNodeFn(node);\n }\n return false;\n }\n\n treeNodeIsExpand(node: ThyTreeSelectNode) {\n const isMultiple = this.isMultiple();\n const primaryKey = this.thyPrimaryKey();\n let isSelectedNodeParent = false;\n if (isMultiple) {\n const selectedNodes = this.selectedNodes() || [];\n isSelectedNodeParent = !!selectedNodes.find(item => {\n return item.parentValues.indexOf(node[primaryKey]) > -1;\n });\n } else {\n isSelectedNodeParent = this.selectedNode() ? this.selectedNode().parentValues.indexOf(node[primaryKey]) > -1 : false;\n }\n const isExpand = node.expand || (Object.keys(node).indexOf('expand') < 0 && isSelectedNodeParent);\n node.expand = isExpand;\n return isExpand;\n }\n\n getNodeChildren(node: ThyTreeSelectNode) {\n return this.parent.getNodeChildren(node);\n }\n\n selectTreeNode(event: Event, node: ThyTreeSelectNode) {\n if (!this.treeNodeIsDisable(node)) {\n this.parent.selectNode(node);\n }\n }\n\n nodeExpandToggle(event: Event, node: ThyTreeSelectNode) {\n event.stopPropagation();\n if (Object.keys(node).indexOf('expand') > -1) {\n node.expand = !node.expand;\n } else {\n if (this.treeNodeIsExpand(node)) {\n node.expand = false;\n } else {\n node.expand = true;\n }\n }\n\n if (node.expand && this.parent.thyAsyncNode()) {\n this.getNodeChildren(node).subscribe(() => {\n this.parent.setPosition();\n });\n }\n // this.parent.setPosition();\n if (this.thyVirtualScroll()) {\n this.parent.buildFlattenTreeNodes();\n }\n }\n\n tabTrackBy(index: number, item: ThyTreeSelectNode) {\n return index;\n }\n}\n","<div\n cdkOverlayOrigin\n thySelectControl\n (click)=\"openSelectPop()\"\n #origin=\"cdkOverlayOrigin\"\n [thyPanelOpened]=\"expandTreeSelectOptions()\"\n [thySelectedOptions]=\"selectedValueObject()\"\n [thyIsMultiple]=\"thyMultiple()\"\n [thyAllowClear]=\"thyAllowClear()\"\n [thySize]=\"thySize()\"\n [thyPlaceholder]=\"thyPlaceholder()\"\n [customDisplayTemplate]=\"customDisplayTemplate\"\n [thyShowSearch]=\"thyShowSearch()\"\n [thyDisabled]=\"thyDisable()\"\n (thyOnBlur)=\"onBlur($event)\"\n (thyOnClear)=\"clearSelectedValue($event)\"\n (thyOnRemove)=\"removeMultipleSelectedNode($event)\"\n (thyOnSearch)=\"searchValue($event)\">\n <ng-template #customDisplayTemplate let-node>\n @if (thyTreeSelectTriggerDisplayRef()) {\n <ng-template [ngTemplateOutlet]=\"thyTreeSelectTriggerDisplayRef()\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n } @else {\n {{ node[thyShowKey()] }}\n }\n </ng-template>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayMinWidth]=\"cdkConnectOverlayWidth()\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayOpen]=\"expandTreeSelectOptions()\"\n cdkConnectedOverlayTransformOriginOn=\".thy-tree-select-dropdown\"\n [cdkConnectedOverlayPositions]=\"expandedDropdownPositions\"\n (detach)=\"close()\">\n <thy-tree-select-nodes\n thyStopPropagation\n [thyVirtualScroll]=\"thyVirtualScroll()\"\n [treeNodes]=\"thyVirtualScroll() ? virtualTreeNodes() : treeNodes()\"\n [@scaleYMotion]=\"'enter'\">\n </thy-tree-select-nodes>\n</ng-template>\n","@let nodeList = treeNodes();\n@let hasChildren = hasNodeChildren();\n@let virtualHeight = thyVirtualHeight();\n@let isVirtualScroll = thyVirtualScroll();\n@let showKey = this.parent.thyShowKey();\n\n@if (nodeList?.length > 0) {\n <div class=\"thy-tree-select-options\">\n <div class=\"thy-tree-select-node\">\n @if (!isVirtualScroll) {\n @for (node of nodeList; track $index) {\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-container>\n }\n }\n @if (isVirtualScroll) {\n <cdk-virtual-scroll-viewport #viewport [itemSize]=\"defaultItemSize\" [style.height]=\"virtualHeight\">\n <ng-container *cdkVirtualFor=\"let node of nodeList; trackBy: tabTrackBy\">\n <ng-template [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n </div>\n </div>\n} @else {\n <thy-empty\n class=\"thy-select-empty-content\"\n thySize=\"sm\"\n [thyMessage]=\"parent.thyEmptyOptionsText()\"\n [thyIconName]=\"emptyIcon()\"></thy-empty>\n}\n\n<ng-template #treeSelectNode let-node>\n <ng-container>\n @if (!treeNodeIsHidden(node)) {\n <a\n class=\"thy-option-item\"\n [ngClass]=\"{ active: treeNodeIsSelected(node), 'pl-0': hasChildren }\"\n [class.disabled]=\"treeNodeIsDisable(node)\"\n [ngStyle]=\"{ 'padding-left.px': 20 * node.level + parent.icons.gap }\"\n (click)=\"selectTreeNode($event, node)\">\n <span\n class=\"thy-tree-select-option-icon\"\n [class.invisible]=\"!(node.children?.length > 0 || (node[childCountKey()] && node[childCountKey()] > 0))\"\n (click)=\"nodeExpandToggle($event, node)\">\n <thy-icon\n class=\"node-expand-icon\"\n [thyIconName]=\"treeNodeIsExpand(node) ? parent.icons.expand : parent.icons.collapse\"></thy-icon>\n </span>\n <span class=\"thy-tree-select-option-text\" [ngClass]=\"{ 'ml-1': hasChildren }\">\n @if (treeNodeTemplateRef()) {\n <ng-template [ngTemplateOutlet]=\"treeNodeTemplateRef()\" [ngTemplateOutletContext]=\"{ $implicit: node }\"></ng-template>\n } @else {\n <span thyFlexibleText [thyTooltipContent]=\"node[showKey]\">{{ node[showKey] }}</span>\n }\n </span>\n @if (isMultiple()) {\n <thy-icon class=\"checked-icon\" thyIconName=\"check\"></thy-icon>\n }\n </a>\n }\n @if (!isVirtualScroll && treeNodeIsExpand(node) && node.children?.length > 0) {\n @for (node of node.children; track $index) {\n <ng-container [ngTemplateOutlet]=\"treeSelectNode\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n }\n }\n </ng-container>\n</ng-template>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyEmptyModule } from 'ngx-tethys/empty';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyListModule } from 'ngx-tethys/list';\nimport { ThySelectCommonModule, ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyTreeSelect, ThyTreeSelectNodes } from './tree-select.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n ThyListModule,\n ThyIconModule,\n ThyEmptyModule,\n ThySelectCommonModule,\n ThySharedModule,\n ThyTreeSelect,\n ThyTreeSelectNodes\n ],\n exports: [ThyTreeSelect, ThyTreeSelectNodes]\n})\nexport class ThyTreeSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -96,8 +96,8 @@ const MIME_Map = {
|
|
|
96
96
|
'.z': 'application/x-compress',
|
|
97
97
|
'.zip': 'application/x-zip-compressed',
|
|
98
98
|
'.ico': 'image/vnd.microsoft.icon',
|
|
99
|
-
'.md': 'text/markdown',
|
|
100
|
-
'.markdown': 'text/markdown',
|
|
99
|
+
'.md': 'text/markdown,.md',
|
|
100
|
+
'.markdown': 'text/markdown,.markdown',
|
|
101
101
|
'': '*/*'
|
|
102
102
|
};
|
|
103
103
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-upload.mjs","sources":["../../../src/upload/upload.config.ts","../../../src/upload/constant.ts","../../../src/upload/util.ts","../../../src/upload/file-select-base.ts","../../../src/upload/file-drop.directive.ts","../../../src/upload/file-select.component.ts","../../../src/upload/file-select.component.html","../../../src/upload/upload.service.ts","../../../src/upload/module.ts","../../../src/upload/ngx-tethys-upload.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { ThyFileSizeExceedsContext, ThySizeExceedsHandler } from './types';\n\nexport interface ThyUploadConfig {\n sizeThreshold?: number;\n sizeExceedsHandler?: ThySizeExceedsHandler;\n acceptType?: string;\n}\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS = new InjectionToken<ThyUploadConfig>('thy-uploader-default-options');\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_UPLOAD_DEFAULT_OPTIONS,\n useValue: {\n acceptType: '',\n sizeThreshold: 0,\n sizeExceedsHandler: sizeExceedsHandler\n }\n};\n\nexport function sizeExceedsHandler(event: ThyFileSizeExceedsContext): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const exceedsFilesMessage = event.exceedsFiles\n .map(item => {\n return `file: ${item.name}, size: ${item.size}`;\n })\n .join(',');\n console.error(`some files(${exceedsFilesMessage}) size exceeds threshold ${event.sizeThreshold}`);\n }\n}\n","// Multipurpose Internet Mail Extensions\nexport const MIME_Map = {\n '.3gp': 'video/3gpp',\n '.apk': 'application/vnd.android.package-archive',\n '.asf': 'video/x-ms-asf',\n '.avi': 'video/x-msvideo',\n '.bin': 'application/octet-stream',\n '.bmp': 'image/bmp',\n '.c': 'text/plain',\n '.class': 'application/octet-stream',\n '.conf': 'text/plain',\n '.cpp': 'text/plain',\n '.doc': 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/msword',\n '.xls': 'application/vnd.ms-excel,.xls,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx,application/vnd.ms-excel,.xls',\n '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n '.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',\n '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n '.exe': 'application/octet-stream',\n '.gif': 'image/gif',\n '.gtar': 'application/x-gtar',\n '.gz': 'application/x-gzip',\n '.h': 'text/plain',\n '.htm': 'text/html',\n '.html': 'text/html',\n '.jar': 'application/java-archive',\n '.jpeg': 'image/jpeg',\n '.jpg': 'image/jpeg',\n '.js': 'application/x-javascript',\n '.json': 'application/json',\n '.log': 'text/plain',\n '.m3u': 'audio/x-mpegurl',\n '.m4a': 'audio/mp4a-latm',\n '.m4b': 'audio/mp4a-latm',\n '.m4p': 'audio/mp4a-latm',\n '.m4u': 'video/vnd.mpegurl',\n '.m4v': 'video/x-m4v',\n '.mov': 'video/quicktime',\n '.mp2': 'audio/x-mpeg',\n '.mp3': 'audio/x-mpeg',\n '.mp4': 'video/mp4',\n '.mpc': 'application/vnd.mpohun.certificate',\n '.mpe': 'video/mpeg',\n '.mpeg': 'video/mpeg',\n '.mpg': 'video/mpeg',\n '.mpg4': 'video/mp4',\n '.mpga': 'audio/mpeg',\n '.msg': 'application/vnd.ms-outlook',\n '.ogg': 'audio/ogg',\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.pps': 'application/vnd.ms-powerpoint',\n '.ppt': 'application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation',\n '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-powerpoint',\n '.prop': 'text/plain',\n '.rc': 'text/plain',\n '.rmvb': 'audio/x-pn-realaudio',\n '.rtf': 'application/rtf',\n '.sh': 'text/plain',\n '.tar': 'application/x-tar',\n '.tgz': 'application/x-compressed',\n '.txt': 'text/plain',\n '.wav': 'audio/x-wav',\n '.wma': 'audio/x-ms-wma',\n '.wmv': 'audio/x-ms-wmv',\n '.wps': 'application/vnd.ms-works',\n '.z': 'application/x-compress',\n '.zip': 'application/x-zip-compressed',\n '.ico': 'image/vnd.microsoft.icon',\n '.md': 'text/markdown',\n '.markdown': 'text/markdown',\n '': '*/*'\n};\n","import { isString, isArray } from 'ngx-tethys/util';\nimport { MIME_Map } from './constant';\n\nexport function mimeTypeConvert(value: Array<string> | string): string {\n let inputTypes: Array<string>;\n const acceptTypes: Array<string> = [];\n if (isArray(value)) {\n inputTypes = value as Array<string>;\n } else if (isString(value)) {\n inputTypes = value.split(',');\n } else {\n inputTypes = [];\n }\n\n if (inputTypes.length > 0) {\n inputTypes.forEach(n => {\n if (MIME_Map[n]) {\n acceptTypes.push(MIME_Map[n]);\n } else {\n acceptTypes.push(n);\n }\n });\n }\n return acceptTypes.join(',');\n}\n","import { isNumber } from 'ngx-tethys/util';\nimport { Directive, ElementRef, Input, NgZone, numberAttribute, inject, Inject, input, OutputEmitterRef } from '@angular/core';\nimport { ThyFileSelectEvent, ThySizeExceedsHandler } from './types';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\n\n/**\n * @private\n */\n@Directive()\nexport class FileSelectBaseDirective {\n readonly thySizeThreshold = input(this.defaultConfig.sizeThreshold, {\n transform: (inputValue: string | number) => {\n const sizeThreshold = numberAttribute(inputValue);\n if (isNumber(sizeThreshold)) {\n return sizeThreshold;\n }\n return this.defaultConfig.sizeThreshold;\n }\n });\n\n readonly thySizeExceedsHandler = input(this.defaultConfig.sizeExceedsHandler, {\n transform: (inputValue: ThySizeExceedsHandler) => {\n if (inputValue) {\n return inputValue;\n }\n return this.defaultConfig.sizeExceedsHandler;\n }\n });\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n */\n thyAcceptType = input(mimeTypeConvert(this.defaultConfig.acceptType), {\n transform: (inputValue: Array<string> | string) => {\n return mimeTypeConvert(inputValue);\n }\n });\n\n constructor(\n public elementRef: ElementRef,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig\n ) {}\n\n handleSizeExceeds(event: Event, files: File[]) {\n let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.thySizeThreshold());\n if (sizeExceedsFiles.length > 0) {\n const sizeExceedContext = {\n files: files,\n exceedsFiles: sizeExceedsFiles,\n nativeEvent: event,\n sizeThreshold: this.thySizeThreshold()\n };\n return this.thySizeExceedsHandler()(sizeExceedContext);\n }\n return files;\n }\n\n selectFiles(event: Event, files: File[], eventEmitter: OutputEmitterRef<ThyFileSelectEvent>) {\n let successFiles: File[] | void = files;\n if (this.thySizeThreshold() && this.thySizeThreshold() > 0) {\n successFiles = this.handleSizeExceeds(event, files);\n }\n if (successFiles) {\n eventEmitter.emit({\n files: successFiles,\n nativeEvent: event\n });\n }\n }\n}\n","import { isEmpty, isString } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\n\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnInit,\n Output,\n Renderer2,\n inject,\n input,\n output,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { ThyFileSelectEvent } from './types';\n\n/**\n * @name thyFileDrop\n */\n@Directive({\n selector: '[thyFileDrop]',\n host: {\n '[class.thy-drop-over]': 'isDragOver()',\n '[class.drop-over]': 'isDragOver()'\n }\n})\nexport class ThyFileDropDirective extends FileSelectBaseDirective implements OnInit {\n protected isDragOver = signal(false);\n\n readonly thyFileDropClassName = input<string>();\n\n readonly thyOnDrop = output<ThyFileSelectEvent>();\n\n /**\n * 当拖拽的文件中有不符合 thyAcceptType 中定义的类型时触发\n * @description.en-us It is triggered when there are files in the dragged files that do not conform to the types defined in thyAcceptType.\n */\n thyFilesReject = output<File[]>();\n\n private destroyRef = inject(DestroyRef);\n\n constructor(\n public elementRef: ElementRef,\n public renderer: Renderer2,\n public ngZone: NgZone,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig\n ) {\n super(elementRef, defaultConfig);\n }\n\n public ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.elementRef.nativeElement, 'dragenter')\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n tap((event: DragEvent) => {\n event.preventDefault();\n }),\n filter(event => event.dataTransfer.items && event.dataTransfer.items.length > 0)\n )\n .subscribe((event: DragEvent) => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(Array.from(event.dataTransfer.items));\n if (!isEmpty(files)) {\n this.ngZone.run(() => {\n this.isDragOver.set(true);\n this.toggleDropOverClassName();\n });\n }\n }\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragover')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event: any) => {\n event.preventDefault();\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragleave')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event: any) => {\n this.ngZone.run(() => {\n if (!this.elementRef.nativeElement.contains(event.fromElement)) {\n this.resetDragOver();\n this.toggleDropOverClassName();\n }\n });\n });\n\n fromEvent(this.elementRef.nativeElement, 'drop')\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n tap((event: DragEvent) => {\n event.preventDefault();\n })\n )\n .subscribe((event: DragEvent) => {\n this.ngZone.run(() => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const originFiles = event.dataTransfer ? Array.from(event.dataTransfer.files) : [];\n const files = this.filterFilesOrItems(originFiles) as File[];\n\n if (files.length !== originFiles.length) {\n const differentFiles = originFiles.filter(item => !files.includes(item));\n this.thyFilesReject.emit(differentFiles);\n }\n if (!isEmpty(files)) {\n this.selectFiles(event, files, this.thyOnDrop);\n }\n }\n this.resetDragOver();\n this.toggleDropOverClassName();\n });\n });\n });\n }\n\n private checkRejectFolderAndHtmlElement(event: DragEvent) {\n // 排除文件夹和HTML元素拖拽\n const items: DataTransferItemList | DataTransferItem[] = event.dataTransfer ? event.dataTransfer.items : [];\n let res = true;\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const entry = this.getAsEntry(item);\n if (item.kind !== 'file' || (entry && !entry.isFile)) {\n res = false;\n // console.error(`file extensions not support drag upload, kind: ${item.kind}, type: ${item.type}`);\n }\n }\n return res;\n }\n\n private getAsEntry(item: DataTransferItem): FileSystemEntry {\n let entry: FileSystemEntry;\n if ((item as unknown as { getAsEntry: () => FileSystemEntry })['getAsEntry']) {\n // https://wiki.whatwg.org/wiki/DragAndDropEntries\n entry = (item as unknown as { getAsEntry: () => FileSystemEntry })['getAsEntry']();\n } else if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n }\n return entry;\n }\n\n private filterFilesOrItems(items: Array<DataTransferItem | File>): Array<DataTransferItem | File> {\n const acceptType = this.thyAcceptType();\n if (acceptType && acceptType != '*/*') {\n return items.filter(item => {\n const isValidType = isString(item.type) && item.type.length > 0;\n return isValidType && acceptType.includes(item.type);\n });\n } else {\n return Array.from(items);\n }\n }\n\n private toggleDropOverClassName() {\n const dragOverCustomClass = this.thyFileDropClassName();\n if (dragOverCustomClass) {\n if (this.isDragOver()) {\n this.renderer.addClass(this.elementRef.nativeElement, dragOverCustomClass);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, dragOverCustomClass);\n }\n }\n }\n private resetDragOver() {\n this.isDragOver.set(false);\n }\n}\n","import { fromEvent } from 'rxjs';\nimport { Component, ElementRef, NgZone, inject, Inject, viewChild, output, input, DestroyRef, effect } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { ThyFileSelectEvent } from './types';\n\n/**\n * 文件上传组件\n * @name thy-file-select,[thyFileSelect]\n * @order 10\n */\n@Component({\n selector: '[thyFileSelect],thy-file-select',\n templateUrl: './file-select.component.html'\n})\nexport class ThyFileSelect extends FileSelectBaseDirective {\n /**\n * 文件选择事件\n */\n readonly thyOnFileSelect = output<ThyFileSelectEvent>();\n\n protected readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n /**\n * 文件是否多选\n * @default false\n */\n readonly thyMultiple = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否接受文件夹\n */\n readonly thyAcceptFolder = input(false, { transform: coerceBooleanProperty });\n\n private destroyRef = inject(DestroyRef);\n\n constructor(\n public elementRef: ElementRef,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig,\n private ngZone: NgZone\n ) {\n super(elementRef, defaultConfig);\n\n this.ngZone.runOutsideAngular(() =>\n fromEvent(this.elementRef.nativeElement, 'click')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.fileInput().nativeElement.click();\n })\n );\n\n effect(() => {\n const multiple = this.thyMultiple();\n const acceptFolder = this.thyAcceptFolder();\n const inputElement = this.fileInput().nativeElement;\n if (multiple) {\n inputElement.setAttribute('multiple', '');\n } else {\n inputElement.removeAttribute('multiple');\n }\n if (acceptFolder) {\n inputElement.setAttribute('webkitdirectory', '');\n } else {\n inputElement.removeAttribute('webkitdirectory');\n }\n });\n }\n\n selectFile($event: Event) {\n const files = this.fileInput().nativeElement.files;\n if (files && files.length > 0) {\n this.selectFiles($event, Array.from(files), this.thyOnFileSelect);\n this.fileInput().nativeElement.value = '';\n }\n }\n}\n","<ng-content></ng-content>\n<input\n style=\"width: 0; height: 0\"\n thyStopPropagation=\"true\"\n [hidden]=\"'true'\"\n #fileInput\n type=\"file\"\n (change)=\"selectFile($event)\"\n [attr.accept]=\"thyAcceptType()\"\n/>\n","import { coerceArray, humanizeBytes, TinyDate } from 'ngx-tethys/util';\nimport { from, Observable, Subscriber } from 'rxjs';\nimport { map, mergeMap, tap } from 'rxjs/operators';\n\nimport { XhrFactory } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\nexport enum ThyUploadStatus {\n pending = 'pending',\n started = 'started',\n uploading = 'uploading',\n done = 'done'\n}\n\nexport interface ThyUploadResponse {\n status: ThyUploadStatus;\n uploadFile?: ThyUploadFile;\n}\n\n/**\n * 文件上传进度\n * @public\n * @order 40\n */\nexport interface ThyUploadFileProgress {\n /**\n * 上传状态\n * @default pending\n */\n status: ThyUploadStatus;\n\n /**\n * 进度百分比\n */\n percentage: number;\n\n /**\n * 上传速度\n */\n speed?: number;\n\n /**\n * 人类可读的上传速度,比如: 120 kb/s\n */\n speedHuman?: string;\n\n /**\n * 开始上传时间\n */\n startTime: number | null;\n\n /**\n * 结束上传时间\n */\n endTime?: number | null;\n\n /**\n * 上传时间\n */\n estimatedTime?: number | null;\n\n /**\n * 人类可读的上传时间,比如: 00:12:23\n */\n estimatedTimeHuman?: string | null;\n}\n\n/**\n * 文件上传对象\n * @public\n * @order 30\n */\nexport interface ThyUploadFile {\n /**\n * 文件唯一标识\n */\n identifier?: string;\n\n /**\n * 上传方法\n */\n method: string;\n\n /**\n * 远程上传地址\n */\n url: string;\n\n /**\n * 是否携带认证信息\n */\n withCredentials?: boolean;\n\n /**\n * 原始文件\n */\n nativeFile: File;\n\n /**\n * 文件字段\n */\n fileField?: string;\n\n /**\n * 文件名\n */\n fileName?: string;\n\n /**\n * 请求头\n */\n headers?: Record<string, string>;\n\n /**\n * 请求数据\n */\n data?: Record<string, string>;\n\n /**\n * 响应状态\n */\n responseStatus?: any;\n\n /**\n * 上传响应结果\n */\n response?: any;\n\n /**\n * 响应头\n */\n responseHeaders?: any;\n\n /**\n * 上传进度\n */\n progress?: ThyUploadFileProgress;\n}\n\nexport interface ThyUploadFilesOptions {\n onStarted?: (item: ThyUploadFile) => void;\n onDone?: (item: ThyUploadFile) => void;\n}\n\n/**\n * 文件远程上传服务\n * @order 20\n */\n@Injectable()\nexport class ThyUploadService {\n private xhrFactory = inject(XhrFactory);\n\n private secondsToHuman(sec: number): string {\n return new TinyDate(sec * 1000).nativeDate.toISOString().slice(11, 19);\n }\n\n private normalizeUploadFiles(uploadFiles: ThyUploadFile | ThyUploadFile[]) {\n coerceArray(uploadFiles).forEach(uploadFile => {\n if (!uploadFile.progress) {\n uploadFile.progress = {\n status: ThyUploadStatus.pending,\n percentage: 0,\n startTime: 0\n };\n }\n });\n }\n\n private uploadByXhr(observer: Subscriber<ThyUploadResponse>, uploadFile: ThyUploadFile) {\n const xhr = this.xhrFactory.build();\n const time: number = new TinyDate().getTime();\n let speed = 0;\n let estimatedTime: number | null = null;\n\n uploadFile.progress = {\n status: ThyUploadStatus.started,\n percentage: 0,\n startTime: time\n };\n\n const onProgress = (event: ProgressEvent): void => {\n if (event.lengthComputable) {\n let percentage = Math.round((event.loaded * 100) / event.total);\n if (percentage === 100) {\n percentage = 99;\n }\n const diff = new TinyDate().getTime() - time;\n speed = Math.round((event.loaded / diff) * 1000);\n const progressStartTime = (uploadFile.progress && uploadFile.progress.startTime) || new TinyDate().getTime();\n estimatedTime = Math.ceil((event.total - event.loaded) / speed);\n\n uploadFile.progress.status = ThyUploadStatus.uploading;\n uploadFile.progress.percentage = percentage;\n uploadFile.progress.speed = speed;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.startTime = progressStartTime;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime);\n\n observer.next({ status: ThyUploadStatus.uploading, uploadFile: uploadFile });\n }\n };\n\n const onError = (error: ErrorEvent) => observer.error(error);\n\n const onReadyStateChange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedTime = (new TinyDate().getTime() - uploadFile.progress.startTime) * 1000;\n const speedAverage = Math.round(uploadFile.nativeFile.size / speedTime);\n\n uploadFile.progress.status = ThyUploadStatus.done;\n uploadFile.progress.percentage = 100;\n uploadFile.progress.speed = speedAverage;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime || 0);\n\n uploadFile.responseStatus = xhr.status;\n\n try {\n uploadFile.response = JSON.parse(xhr.response);\n } catch (e) {\n uploadFile.response = xhr.response;\n }\n\n // file.responseHeaders = this.parseResponseHeaders(xhr.getAllResponseHeaders());\n\n observer.next({ status: ThyUploadStatus.done, uploadFile: uploadFile });\n\n observer.complete();\n }\n };\n\n xhr.upload.addEventListener('progress', onProgress, false);\n xhr.upload.addEventListener('error', onError);\n // When using the [timeout attribute](https://xhr.spec.whatwg.org/#the-timeout-attribute) and an XHR\n // request times out, browsers trigger the `timeout` event (and executes the XHR's `ontimeout`\n // callback). Additionally, Safari 9 handles timed-out requests in the same way, even if no `timeout`\n // has been explicitly set on the XHR.\n xhr.upload.addEventListener('timeout', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('readystatechange', onReadyStateChange);\n\n xhr.open(uploadFile.method, uploadFile.url, true);\n xhr.withCredentials = uploadFile.withCredentials ? true : false;\n\n try {\n const formData = new FormData();\n\n Object.keys(uploadFile.data || {}).forEach(key => formData.append(key, uploadFile.data[key]));\n Object.keys(uploadFile.headers || {}).forEach(key => xhr.setRequestHeader(key, uploadFile.headers[key]));\n\n formData.append(uploadFile.fileField || 'file', uploadFile.nativeFile, uploadFile.fileName);\n\n observer.next({ status: ThyUploadStatus.started, uploadFile: uploadFile });\n xhr.send(formData);\n } catch (error) {\n observer.error(error);\n }\n\n return {\n xhr,\n cleanup: () => {\n xhr.upload.removeEventListener('progress', onProgress);\n xhr.upload.removeEventListener('error', onError);\n xhr.upload.removeEventListener('timeout', onError);\n xhr.removeEventListener('timeout', onError);\n xhr.removeEventListener('readystatechange', onReadyStateChange);\n }\n };\n }\n\n private ensureFileName(uploadFile: ThyUploadFile) {\n uploadFile.fileName = uploadFile.fileName || uploadFile.nativeFile.name;\n }\n\n /**\n * 上传单个文件\n * @param uploadFile 上传文件对象\n */\n upload(uploadFile: ThyUploadFile): Observable<ThyUploadResponse> {\n this.ensureFileName(uploadFile);\n\n return new Observable(observer => {\n const { xhr, cleanup } = this.uploadByXhr(observer, uploadFile);\n return () => {\n cleanup();\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n };\n });\n }\n\n /**\n * 并发上传多个文件\n * @param uploadFiles 上传文件列表\n * @param concurrent 并发上传数, 默认 5\n * @param options onStared, onDone 回调\n */\n uploadBulk(uploadFiles: ThyUploadFile[], concurrent = 5, options?: ThyUploadFilesOptions): Observable<ThyUploadResponse> {\n this.normalizeUploadFiles(uploadFiles);\n const result = from(uploadFiles).pipe(\n mergeMap(uploadFile => {\n return this.upload(uploadFile).pipe(\n tap(uploadResponse => {\n if (options && options.onStarted && uploadResponse.status === ThyUploadStatus.started) {\n options.onStarted(uploadResponse.uploadFile);\n }\n if (options && options.onDone && uploadResponse.status === ThyUploadStatus.done) {\n options.onDone(uploadResponse.uploadFile);\n }\n })\n );\n }, concurrent),\n map(response => {\n return response;\n })\n );\n\n return result;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ThyFileDropDirective } from './file-drop.directive';\nimport { ThyFileSelect } from './file-select.component';\nimport { THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER } from './upload.config';\nimport { ThyUploadService } from './upload.service';\n\n// import { ThyDirectiveModule } from 'ngx-tethys/directive';\n\n@NgModule({\n exports: [ThyFileSelect, ThyFileDropDirective],\n imports: [CommonModule, ThyFileSelect, ThyFileDropDirective],\n providers: [ThyUploadService, THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER]\n})\nexport class ThyUploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-upload.mjs","sources":["../../../src/upload/upload.config.ts","../../../src/upload/constant.ts","../../../src/upload/util.ts","../../../src/upload/file-select-base.ts","../../../src/upload/file-drop.directive.ts","../../../src/upload/file-select.component.ts","../../../src/upload/file-select.component.html","../../../src/upload/upload.service.ts","../../../src/upload/module.ts","../../../src/upload/ngx-tethys-upload.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { ThyFileSizeExceedsContext, ThySizeExceedsHandler } from './types';\n\nexport interface ThyUploadConfig {\n sizeThreshold?: number;\n sizeExceedsHandler?: ThySizeExceedsHandler;\n acceptType?: string;\n}\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS = new InjectionToken<ThyUploadConfig>('thy-uploader-default-options');\n\nexport const THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_UPLOAD_DEFAULT_OPTIONS,\n useValue: {\n acceptType: '',\n sizeThreshold: 0,\n sizeExceedsHandler: sizeExceedsHandler\n }\n};\n\nexport function sizeExceedsHandler(event: ThyFileSizeExceedsContext): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n const exceedsFilesMessage = event.exceedsFiles\n .map(item => {\n return `file: ${item.name}, size: ${item.size}`;\n })\n .join(',');\n console.error(`some files(${exceedsFilesMessage}) size exceeds threshold ${event.sizeThreshold}`);\n }\n}\n","// Multipurpose Internet Mail Extensions\nexport const MIME_Map = {\n '.3gp': 'video/3gpp',\n '.apk': 'application/vnd.android.package-archive',\n '.asf': 'video/x-ms-asf',\n '.avi': 'video/x-msvideo',\n '.bin': 'application/octet-stream',\n '.bmp': 'image/bmp',\n '.c': 'text/plain',\n '.class': 'application/octet-stream',\n '.conf': 'text/plain',\n '.cpp': 'text/plain',\n '.doc': 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/msword',\n '.xls': 'application/vnd.ms-excel,.xls,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx',\n '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,.xlsx,application/vnd.ms-excel,.xls',\n '.xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n '.xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',\n '.xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n '.exe': 'application/octet-stream',\n '.gif': 'image/gif',\n '.gtar': 'application/x-gtar',\n '.gz': 'application/x-gzip',\n '.h': 'text/plain',\n '.htm': 'text/html',\n '.html': 'text/html',\n '.jar': 'application/java-archive',\n '.jpeg': 'image/jpeg',\n '.jpg': 'image/jpeg',\n '.js': 'application/x-javascript',\n '.json': 'application/json',\n '.log': 'text/plain',\n '.m3u': 'audio/x-mpegurl',\n '.m4a': 'audio/mp4a-latm',\n '.m4b': 'audio/mp4a-latm',\n '.m4p': 'audio/mp4a-latm',\n '.m4u': 'video/vnd.mpegurl',\n '.m4v': 'video/x-m4v',\n '.mov': 'video/quicktime',\n '.mp2': 'audio/x-mpeg',\n '.mp3': 'audio/x-mpeg',\n '.mp4': 'video/mp4',\n '.mpc': 'application/vnd.mpohun.certificate',\n '.mpe': 'video/mpeg',\n '.mpeg': 'video/mpeg',\n '.mpg': 'video/mpeg',\n '.mpg4': 'video/mp4',\n '.mpga': 'audio/mpeg',\n '.msg': 'application/vnd.ms-outlook',\n '.ogg': 'audio/ogg',\n '.pdf': 'application/pdf',\n '.png': 'image/png',\n '.pps': 'application/vnd.ms-powerpoint',\n '.ppt': 'application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation',\n '.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-powerpoint',\n '.prop': 'text/plain',\n '.rc': 'text/plain',\n '.rmvb': 'audio/x-pn-realaudio',\n '.rtf': 'application/rtf',\n '.sh': 'text/plain',\n '.tar': 'application/x-tar',\n '.tgz': 'application/x-compressed',\n '.txt': 'text/plain',\n '.wav': 'audio/x-wav',\n '.wma': 'audio/x-ms-wma',\n '.wmv': 'audio/x-ms-wmv',\n '.wps': 'application/vnd.ms-works',\n '.z': 'application/x-compress',\n '.zip': 'application/x-zip-compressed',\n '.ico': 'image/vnd.microsoft.icon',\n '.md': 'text/markdown,.md',\n '.markdown': 'text/markdown,.markdown',\n '': '*/*'\n};\n","import { isString, isArray } from 'ngx-tethys/util';\nimport { MIME_Map } from './constant';\n\nexport function mimeTypeConvert(value: Array<string> | string): string {\n let inputTypes: Array<string>;\n const acceptTypes: Array<string> = [];\n if (isArray(value)) {\n inputTypes = value as Array<string>;\n } else if (isString(value)) {\n inputTypes = value.split(',');\n } else {\n inputTypes = [];\n }\n\n if (inputTypes.length > 0) {\n inputTypes.forEach(n => {\n if (MIME_Map[n]) {\n acceptTypes.push(MIME_Map[n]);\n } else {\n acceptTypes.push(n);\n }\n });\n }\n return acceptTypes.join(',');\n}\n","import { isNumber } from 'ngx-tethys/util';\nimport { Directive, ElementRef, Input, NgZone, numberAttribute, inject, Inject, input, OutputEmitterRef } from '@angular/core';\nimport { ThyFileSelectEvent, ThySizeExceedsHandler } from './types';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { mimeTypeConvert } from './util';\n\n/**\n * @private\n */\n@Directive()\nexport class FileSelectBaseDirective {\n readonly thySizeThreshold = input(this.defaultConfig.sizeThreshold, {\n transform: (inputValue: string | number) => {\n const sizeThreshold = numberAttribute(inputValue);\n if (isNumber(sizeThreshold)) {\n return sizeThreshold;\n }\n return this.defaultConfig.sizeThreshold;\n }\n });\n\n readonly thySizeExceedsHandler = input(this.defaultConfig.sizeExceedsHandler, {\n transform: (inputValue: ThySizeExceedsHandler) => {\n if (inputValue) {\n return inputValue;\n }\n return this.defaultConfig.sizeExceedsHandler;\n }\n });\n\n /**\n * 指定文件后缀类型(MIME_Map),例如\".xls,xlsx\",\"[\".doc\",\".docx\"]\"\n */\n thyAcceptType = input(mimeTypeConvert(this.defaultConfig.acceptType), {\n transform: (inputValue: Array<string> | string) => {\n return mimeTypeConvert(inputValue);\n }\n });\n\n constructor(\n public elementRef: ElementRef,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig\n ) {}\n\n handleSizeExceeds(event: Event, files: File[]) {\n let sizeExceedsFiles = files.filter(item => item.size / 1024 > this.thySizeThreshold());\n if (sizeExceedsFiles.length > 0) {\n const sizeExceedContext = {\n files: files,\n exceedsFiles: sizeExceedsFiles,\n nativeEvent: event,\n sizeThreshold: this.thySizeThreshold()\n };\n return this.thySizeExceedsHandler()(sizeExceedContext);\n }\n return files;\n }\n\n selectFiles(event: Event, files: File[], eventEmitter: OutputEmitterRef<ThyFileSelectEvent>) {\n let successFiles: File[] | void = files;\n if (this.thySizeThreshold() && this.thySizeThreshold() > 0) {\n successFiles = this.handleSizeExceeds(event, files);\n }\n if (successFiles) {\n eventEmitter.emit({\n files: successFiles,\n nativeEvent: event\n });\n }\n }\n}\n","import { isEmpty, isString } from 'ngx-tethys/util';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\n\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnInit,\n Output,\n Renderer2,\n inject,\n input,\n output,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { ThyFileSelectEvent } from './types';\n\n/**\n * @name thyFileDrop\n */\n@Directive({\n selector: '[thyFileDrop]',\n host: {\n '[class.thy-drop-over]': 'isDragOver()',\n '[class.drop-over]': 'isDragOver()'\n }\n})\nexport class ThyFileDropDirective extends FileSelectBaseDirective implements OnInit {\n protected isDragOver = signal(false);\n\n readonly thyFileDropClassName = input<string>();\n\n readonly thyOnDrop = output<ThyFileSelectEvent>();\n\n /**\n * 当拖拽的文件中有不符合 thyAcceptType 中定义的类型时触发\n * @description.en-us It is triggered when there are files in the dragged files that do not conform to the types defined in thyAcceptType.\n */\n thyFilesReject = output<File[]>();\n\n private destroyRef = inject(DestroyRef);\n\n constructor(\n public elementRef: ElementRef,\n public renderer: Renderer2,\n public ngZone: NgZone,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig\n ) {\n super(elementRef, defaultConfig);\n }\n\n public ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.elementRef.nativeElement, 'dragenter')\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n tap((event: DragEvent) => {\n event.preventDefault();\n }),\n filter(event => event.dataTransfer.items && event.dataTransfer.items.length > 0)\n )\n .subscribe((event: DragEvent) => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const files = this.filterFilesOrItems(Array.from(event.dataTransfer.items));\n if (!isEmpty(files)) {\n this.ngZone.run(() => {\n this.isDragOver.set(true);\n this.toggleDropOverClassName();\n });\n }\n }\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragover')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event: any) => {\n event.preventDefault();\n });\n\n fromEvent(this.elementRef.nativeElement, 'dragleave')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event: any) => {\n this.ngZone.run(() => {\n if (!this.elementRef.nativeElement.contains(event.fromElement)) {\n this.resetDragOver();\n this.toggleDropOverClassName();\n }\n });\n });\n\n fromEvent(this.elementRef.nativeElement, 'drop')\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n tap((event: DragEvent) => {\n event.preventDefault();\n })\n )\n .subscribe((event: DragEvent) => {\n this.ngZone.run(() => {\n if (this.checkRejectFolderAndHtmlElement(event)) {\n const originFiles = event.dataTransfer ? Array.from(event.dataTransfer.files) : [];\n const files = this.filterFilesOrItems(originFiles) as File[];\n\n if (files.length !== originFiles.length) {\n const differentFiles = originFiles.filter(item => !files.includes(item));\n this.thyFilesReject.emit(differentFiles);\n }\n if (!isEmpty(files)) {\n this.selectFiles(event, files, this.thyOnDrop);\n }\n }\n this.resetDragOver();\n this.toggleDropOverClassName();\n });\n });\n });\n }\n\n private checkRejectFolderAndHtmlElement(event: DragEvent) {\n // 排除文件夹和HTML元素拖拽\n const items: DataTransferItemList | DataTransferItem[] = event.dataTransfer ? event.dataTransfer.items : [];\n let res = true;\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const entry = this.getAsEntry(item);\n if (item.kind !== 'file' || (entry && !entry.isFile)) {\n res = false;\n // console.error(`file extensions not support drag upload, kind: ${item.kind}, type: ${item.type}`);\n }\n }\n return res;\n }\n\n private getAsEntry(item: DataTransferItem): FileSystemEntry {\n let entry: FileSystemEntry;\n if ((item as unknown as { getAsEntry: () => FileSystemEntry })['getAsEntry']) {\n // https://wiki.whatwg.org/wiki/DragAndDropEntries\n entry = (item as unknown as { getAsEntry: () => FileSystemEntry })['getAsEntry']();\n } else if (item.webkitGetAsEntry) {\n entry = item.webkitGetAsEntry();\n }\n return entry;\n }\n\n private filterFilesOrItems(items: Array<DataTransferItem | File>): Array<DataTransferItem | File> {\n const acceptType = this.thyAcceptType();\n if (acceptType && acceptType != '*/*') {\n return items.filter(item => {\n const isValidType = isString(item.type) && item.type.length > 0;\n return isValidType && acceptType.includes(item.type);\n });\n } else {\n return Array.from(items);\n }\n }\n\n private toggleDropOverClassName() {\n const dragOverCustomClass = this.thyFileDropClassName();\n if (dragOverCustomClass) {\n if (this.isDragOver()) {\n this.renderer.addClass(this.elementRef.nativeElement, dragOverCustomClass);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, dragOverCustomClass);\n }\n }\n }\n private resetDragOver() {\n this.isDragOver.set(false);\n }\n}\n","import { fromEvent } from 'rxjs';\nimport { Component, ElementRef, NgZone, inject, Inject, viewChild, output, input, DestroyRef, effect } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FileSelectBaseDirective } from './file-select-base';\nimport { THY_UPLOAD_DEFAULT_OPTIONS, ThyUploadConfig } from './upload.config';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { ThyFileSelectEvent } from './types';\n\n/**\n * 文件上传组件\n * @name thy-file-select,[thyFileSelect]\n * @order 10\n */\n@Component({\n selector: '[thyFileSelect],thy-file-select',\n templateUrl: './file-select.component.html'\n})\nexport class ThyFileSelect extends FileSelectBaseDirective {\n /**\n * 文件选择事件\n */\n readonly thyOnFileSelect = output<ThyFileSelectEvent>();\n\n protected readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\n\n /**\n * 文件是否多选\n * @default false\n */\n readonly thyMultiple = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否接受文件夹\n */\n readonly thyAcceptFolder = input(false, { transform: coerceBooleanProperty });\n\n private destroyRef = inject(DestroyRef);\n\n constructor(\n public elementRef: ElementRef,\n @Inject(THY_UPLOAD_DEFAULT_OPTIONS) public defaultConfig: ThyUploadConfig,\n private ngZone: NgZone\n ) {\n super(elementRef, defaultConfig);\n\n this.ngZone.runOutsideAngular(() =>\n fromEvent(this.elementRef.nativeElement, 'click')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.fileInput().nativeElement.click();\n })\n );\n\n effect(() => {\n const multiple = this.thyMultiple();\n const acceptFolder = this.thyAcceptFolder();\n const inputElement = this.fileInput().nativeElement;\n if (multiple) {\n inputElement.setAttribute('multiple', '');\n } else {\n inputElement.removeAttribute('multiple');\n }\n if (acceptFolder) {\n inputElement.setAttribute('webkitdirectory', '');\n } else {\n inputElement.removeAttribute('webkitdirectory');\n }\n });\n }\n\n selectFile($event: Event) {\n const files = this.fileInput().nativeElement.files;\n if (files && files.length > 0) {\n this.selectFiles($event, Array.from(files), this.thyOnFileSelect);\n this.fileInput().nativeElement.value = '';\n }\n }\n}\n","<ng-content></ng-content>\n<input\n style=\"width: 0; height: 0\"\n thyStopPropagation=\"true\"\n [hidden]=\"'true'\"\n #fileInput\n type=\"file\"\n (change)=\"selectFile($event)\"\n [attr.accept]=\"thyAcceptType()\"\n/>\n","import { coerceArray, humanizeBytes, TinyDate } from 'ngx-tethys/util';\nimport { from, Observable, Subscriber } from 'rxjs';\nimport { map, mergeMap, tap } from 'rxjs/operators';\n\nimport { XhrFactory } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\nexport enum ThyUploadStatus {\n pending = 'pending',\n started = 'started',\n uploading = 'uploading',\n done = 'done'\n}\n\nexport interface ThyUploadResponse {\n status: ThyUploadStatus;\n uploadFile?: ThyUploadFile;\n}\n\n/**\n * 文件上传进度\n * @public\n * @order 40\n */\nexport interface ThyUploadFileProgress {\n /**\n * 上传状态\n * @default pending\n */\n status: ThyUploadStatus;\n\n /**\n * 进度百分比\n */\n percentage: number;\n\n /**\n * 上传速度\n */\n speed?: number;\n\n /**\n * 人类可读的上传速度,比如: 120 kb/s\n */\n speedHuman?: string;\n\n /**\n * 开始上传时间\n */\n startTime: number | null;\n\n /**\n * 结束上传时间\n */\n endTime?: number | null;\n\n /**\n * 上传时间\n */\n estimatedTime?: number | null;\n\n /**\n * 人类可读的上传时间,比如: 00:12:23\n */\n estimatedTimeHuman?: string | null;\n}\n\n/**\n * 文件上传对象\n * @public\n * @order 30\n */\nexport interface ThyUploadFile {\n /**\n * 文件唯一标识\n */\n identifier?: string;\n\n /**\n * 上传方法\n */\n method: string;\n\n /**\n * 远程上传地址\n */\n url: string;\n\n /**\n * 是否携带认证信息\n */\n withCredentials?: boolean;\n\n /**\n * 原始文件\n */\n nativeFile: File;\n\n /**\n * 文件字段\n */\n fileField?: string;\n\n /**\n * 文件名\n */\n fileName?: string;\n\n /**\n * 请求头\n */\n headers?: Record<string, string>;\n\n /**\n * 请求数据\n */\n data?: Record<string, string>;\n\n /**\n * 响应状态\n */\n responseStatus?: any;\n\n /**\n * 上传响应结果\n */\n response?: any;\n\n /**\n * 响应头\n */\n responseHeaders?: any;\n\n /**\n * 上传进度\n */\n progress?: ThyUploadFileProgress;\n}\n\nexport interface ThyUploadFilesOptions {\n onStarted?: (item: ThyUploadFile) => void;\n onDone?: (item: ThyUploadFile) => void;\n}\n\n/**\n * 文件远程上传服务\n * @order 20\n */\n@Injectable()\nexport class ThyUploadService {\n private xhrFactory = inject(XhrFactory);\n\n private secondsToHuman(sec: number): string {\n return new TinyDate(sec * 1000).nativeDate.toISOString().slice(11, 19);\n }\n\n private normalizeUploadFiles(uploadFiles: ThyUploadFile | ThyUploadFile[]) {\n coerceArray(uploadFiles).forEach(uploadFile => {\n if (!uploadFile.progress) {\n uploadFile.progress = {\n status: ThyUploadStatus.pending,\n percentage: 0,\n startTime: 0\n };\n }\n });\n }\n\n private uploadByXhr(observer: Subscriber<ThyUploadResponse>, uploadFile: ThyUploadFile) {\n const xhr = this.xhrFactory.build();\n const time: number = new TinyDate().getTime();\n let speed = 0;\n let estimatedTime: number | null = null;\n\n uploadFile.progress = {\n status: ThyUploadStatus.started,\n percentage: 0,\n startTime: time\n };\n\n const onProgress = (event: ProgressEvent): void => {\n if (event.lengthComputable) {\n let percentage = Math.round((event.loaded * 100) / event.total);\n if (percentage === 100) {\n percentage = 99;\n }\n const diff = new TinyDate().getTime() - time;\n speed = Math.round((event.loaded / diff) * 1000);\n const progressStartTime = (uploadFile.progress && uploadFile.progress.startTime) || new TinyDate().getTime();\n estimatedTime = Math.ceil((event.total - event.loaded) / speed);\n\n uploadFile.progress.status = ThyUploadStatus.uploading;\n uploadFile.progress.percentage = percentage;\n uploadFile.progress.speed = speed;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.startTime = progressStartTime;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime);\n\n observer.next({ status: ThyUploadStatus.uploading, uploadFile: uploadFile });\n }\n };\n\n const onError = (error: ErrorEvent) => observer.error(error);\n\n const onReadyStateChange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n const speedTime = (new TinyDate().getTime() - uploadFile.progress.startTime) * 1000;\n const speedAverage = Math.round(uploadFile.nativeFile.size / speedTime);\n\n uploadFile.progress.status = ThyUploadStatus.done;\n uploadFile.progress.percentage = 100;\n uploadFile.progress.speed = speedAverage;\n uploadFile.progress.speedHuman = `${humanizeBytes(speed, false, 2)}/s`;\n uploadFile.progress.estimatedTime = estimatedTime;\n uploadFile.progress.estimatedTimeHuman = this.secondsToHuman(estimatedTime || 0);\n\n uploadFile.responseStatus = xhr.status;\n\n try {\n uploadFile.response = JSON.parse(xhr.response);\n } catch (e) {\n uploadFile.response = xhr.response;\n }\n\n // file.responseHeaders = this.parseResponseHeaders(xhr.getAllResponseHeaders());\n\n observer.next({ status: ThyUploadStatus.done, uploadFile: uploadFile });\n\n observer.complete();\n }\n };\n\n xhr.upload.addEventListener('progress', onProgress, false);\n xhr.upload.addEventListener('error', onError);\n // When using the [timeout attribute](https://xhr.spec.whatwg.org/#the-timeout-attribute) and an XHR\n // request times out, browsers trigger the `timeout` event (and executes the XHR's `ontimeout`\n // callback). Additionally, Safari 9 handles timed-out requests in the same way, even if no `timeout`\n // has been explicitly set on the XHR.\n xhr.upload.addEventListener('timeout', onError);\n xhr.addEventListener('timeout', onError);\n xhr.addEventListener('readystatechange', onReadyStateChange);\n\n xhr.open(uploadFile.method, uploadFile.url, true);\n xhr.withCredentials = uploadFile.withCredentials ? true : false;\n\n try {\n const formData = new FormData();\n\n Object.keys(uploadFile.data || {}).forEach(key => formData.append(key, uploadFile.data[key]));\n Object.keys(uploadFile.headers || {}).forEach(key => xhr.setRequestHeader(key, uploadFile.headers[key]));\n\n formData.append(uploadFile.fileField || 'file', uploadFile.nativeFile, uploadFile.fileName);\n\n observer.next({ status: ThyUploadStatus.started, uploadFile: uploadFile });\n xhr.send(formData);\n } catch (error) {\n observer.error(error);\n }\n\n return {\n xhr,\n cleanup: () => {\n xhr.upload.removeEventListener('progress', onProgress);\n xhr.upload.removeEventListener('error', onError);\n xhr.upload.removeEventListener('timeout', onError);\n xhr.removeEventListener('timeout', onError);\n xhr.removeEventListener('readystatechange', onReadyStateChange);\n }\n };\n }\n\n private ensureFileName(uploadFile: ThyUploadFile) {\n uploadFile.fileName = uploadFile.fileName || uploadFile.nativeFile.name;\n }\n\n /**\n * 上传单个文件\n * @param uploadFile 上传文件对象\n */\n upload(uploadFile: ThyUploadFile): Observable<ThyUploadResponse> {\n this.ensureFileName(uploadFile);\n\n return new Observable(observer => {\n const { xhr, cleanup } = this.uploadByXhr(observer, uploadFile);\n return () => {\n cleanup();\n\n if (xhr.readyState !== xhr.DONE) {\n xhr.abort();\n }\n };\n });\n }\n\n /**\n * 并发上传多个文件\n * @param uploadFiles 上传文件列表\n * @param concurrent 并发上传数, 默认 5\n * @param options onStared, onDone 回调\n */\n uploadBulk(uploadFiles: ThyUploadFile[], concurrent = 5, options?: ThyUploadFilesOptions): Observable<ThyUploadResponse> {\n this.normalizeUploadFiles(uploadFiles);\n const result = from(uploadFiles).pipe(\n mergeMap(uploadFile => {\n return this.upload(uploadFile).pipe(\n tap(uploadResponse => {\n if (options && options.onStarted && uploadResponse.status === ThyUploadStatus.started) {\n options.onStarted(uploadResponse.uploadFile);\n }\n if (options && options.onDone && uploadResponse.status === ThyUploadStatus.done) {\n options.onDone(uploadResponse.uploadFile);\n }\n })\n );\n }, concurrent),\n map(response => {\n return response;\n })\n );\n\n return result;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ThyFileDropDirective } from './file-drop.directive';\nimport { ThyFileSelect } from './file-select.component';\nimport { THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER } from './upload.config';\nimport { ThyUploadService } from './upload.service';\n\n// import { ThyDirectiveModule } from 'ngx-tethys/directive';\n\n@NgModule({\n exports: [ThyFileSelect, ThyFileDropDirective],\n imports: [CommonModule, ThyFileSelect, ThyFileDropDirective],\n providers: [ThyUploadService, THY_UPLOAD_DEFAULT_OPTIONS_PROVIDER]\n})\nexport class ThyUploadModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/fesm2022/ngx-tethys.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('19.1.0-next.
|
|
1
|
+
{"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('19.1.0-next.10');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,gBAAgB;;ACFnD;;AAEG;;;;"}
|
package/i18n/i18n.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ThyModuleType = 'datePicker' | 'layout' | 'dateRange' | 'timePicker' | 'calendar' | 'autocomplete' | 'transfer' | 'colorPicker' | 'strength' | 'guider' | 'copy' | 'nav' | 'dialog' | 'select' | 'treeSelect' | 'cascader' | 'pagination' | 'form' | 'empty' | 'image';
|
|
1
|
+
export type ThyModuleType = 'datePicker' | 'layout' | 'dateRange' | 'timePicker' | 'calendar' | 'autocomplete' | 'transfer' | 'colorPicker' | 'strength' | 'guider' | 'copy' | 'nav' | 'dialog' | 'select' | 'treeSelect' | 'cascader' | 'pagination' | 'form' | 'empty' | 'image' | 'shared';
|
|
2
2
|
export type ThyModuleLocaleType<K extends ThyModuleType> = ThyI18nLocale[K];
|
|
3
3
|
export declare enum ThyLocaleType {
|
|
4
4
|
zhHans = "zh-hans",
|
|
@@ -29,6 +29,7 @@ export interface ThyI18nLocale {
|
|
|
29
29
|
form: ThyFormLocale;
|
|
30
30
|
empty: ThyEmptyLocale;
|
|
31
31
|
image: ThyImageLocale;
|
|
32
|
+
shared: ThySharedLocale;
|
|
32
33
|
}
|
|
33
34
|
export interface ThyLayoutLocale {
|
|
34
35
|
collapse: string;
|
|
@@ -37,11 +38,12 @@ export interface ThyLayoutLocale {
|
|
|
37
38
|
export interface ThyDatePickerLocale {
|
|
38
39
|
yearFormat: string;
|
|
39
40
|
monthFormat: string;
|
|
40
|
-
zhMonthFormat: string;
|
|
41
41
|
weekFormat: string;
|
|
42
42
|
fullWeekFormat: string;
|
|
43
43
|
weekThFormat: string;
|
|
44
44
|
dateFormat: string;
|
|
45
|
+
yearQuarterFormat: string;
|
|
46
|
+
yearMonthFormat: string;
|
|
45
47
|
yearText: string;
|
|
46
48
|
quarterText: string;
|
|
47
49
|
monthText: string;
|
|
@@ -176,3 +178,6 @@ export interface ThyImageLocale {
|
|
|
176
178
|
prev: string;
|
|
177
179
|
next: string;
|
|
178
180
|
}
|
|
181
|
+
export interface ThySharedLocale {
|
|
182
|
+
comma: string;
|
|
183
|
+
}
|
package/i18n/locales/de-de.d.ts
CHANGED
|
@@ -8,11 +8,12 @@ declare const _default: {
|
|
|
8
8
|
datePicker: {
|
|
9
9
|
yearFormat: string;
|
|
10
10
|
monthFormat: string;
|
|
11
|
-
zhMonthFormat: string;
|
|
12
11
|
weekFormat: string;
|
|
13
12
|
fullWeekFormat: string;
|
|
14
13
|
weekThFormat: string;
|
|
15
14
|
dateFormat: string;
|
|
15
|
+
yearQuarterFormat: string;
|
|
16
|
+
yearMonthFormat: string;
|
|
16
17
|
yearText: string;
|
|
17
18
|
quarterText: string;
|
|
18
19
|
monthText: string;
|
|
@@ -147,5 +148,8 @@ declare const _default: {
|
|
|
147
148
|
prev: string;
|
|
148
149
|
next: string;
|
|
149
150
|
};
|
|
151
|
+
shared: {
|
|
152
|
+
comma: string;
|
|
153
|
+
};
|
|
150
154
|
};
|
|
151
155
|
export default _default;
|
package/i18n/locales/en-us.d.ts
CHANGED
|
@@ -8,11 +8,12 @@ declare const _default: {
|
|
|
8
8
|
datePicker: {
|
|
9
9
|
yearFormat: string;
|
|
10
10
|
monthFormat: string;
|
|
11
|
-
zhMonthFormat: string;
|
|
12
11
|
weekFormat: string;
|
|
13
12
|
fullWeekFormat: string;
|
|
14
13
|
weekThFormat: string;
|
|
15
14
|
dateFormat: string;
|
|
15
|
+
yearQuarterFormat: string;
|
|
16
|
+
yearMonthFormat: string;
|
|
16
17
|
yearText: string;
|
|
17
18
|
quarterText: string;
|
|
18
19
|
monthText: string;
|
|
@@ -147,6 +148,9 @@ declare const _default: {
|
|
|
147
148
|
prev: string;
|
|
148
149
|
next: string;
|
|
149
150
|
};
|
|
151
|
+
shared: {
|
|
152
|
+
comma: string;
|
|
153
|
+
};
|
|
150
154
|
};
|
|
151
155
|
export default _default;
|
|
152
156
|
/**
|