ai-text-summary-ng 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +118 -0
  2. package/ai-text-summary-ng-1.0.0.tgz +0 -0
  3. package/app/app.component.d.ts +38 -0
  4. package/app/components/fmode-avatar/fmode-avatar.component.d.ts +16 -0
  5. package/app/components/fmode-badge/fmode-badge.component.d.ts +8 -0
  6. package/app/components/fmode-button/fmode-button.component.d.ts +10 -0
  7. package/app/components/fmode-card/fmode-card.component.d.ts +6 -0
  8. package/app/components/fmode-digital-human/fmode-digital-human.component.d.ts +10 -0
  9. package/app/components/fmode-divider/fmode-divider.component.d.ts +7 -0
  10. package/app/components/fmode-header/fmode-header.component.d.ts +7 -0
  11. package/app/components/fmode-list/fmode-list.component.d.ts +9 -0
  12. package/app/components/fmode-loading/fmode-loading.component.d.ts +6 -0
  13. package/app/components/fmode-select/fmode-select.component.d.ts +17 -0
  14. package/app/components/fmode-tag/fmode-tag.component.d.ts +9 -0
  15. package/app/components/fmode-textarea/fmode-textarea.component.d.ts +15 -0
  16. package/esm2022/ai-text-summary-ng.mjs +5 -0
  17. package/esm2022/app/app.component.mjs +533 -0
  18. package/esm2022/app/components/fmode-avatar/fmode-avatar.component.mjs +83 -0
  19. package/esm2022/app/components/fmode-badge/fmode-badge.component.mjs +49 -0
  20. package/esm2022/app/components/fmode-button/fmode-button.component.mjs +52 -0
  21. package/esm2022/app/components/fmode-card/fmode-card.component.mjs +34 -0
  22. package/esm2022/app/components/fmode-digital-human/fmode-digital-human.component.mjs +119 -0
  23. package/esm2022/app/components/fmode-divider/fmode-divider.component.mjs +35 -0
  24. package/esm2022/app/components/fmode-header/fmode-header.component.mjs +33 -0
  25. package/esm2022/app/components/fmode-list/fmode-list.component.mjs +50 -0
  26. package/esm2022/app/components/fmode-loading/fmode-loading.component.mjs +25 -0
  27. package/esm2022/app/components/fmode-select/fmode-select.component.mjs +62 -0
  28. package/esm2022/app/components/fmode-tag/fmode-tag.component.mjs +54 -0
  29. package/esm2022/app/components/fmode-textarea/fmode-textarea.component.mjs +75 -0
  30. package/esm2022/public-api.mjs +15 -0
  31. package/fesm2022/ai-text-summary-ng.mjs +1155 -0
  32. package/fesm2022/ai-text-summary-ng.mjs.map +1 -0
  33. package/index.d.ts +5 -0
  34. package/package.json +42 -0
  35. package/public-api.d.ts +13 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-text-summary-ng.mjs","sources":["../../../src/app/components/fmode-header/fmode-header.component.ts","../../../src/app/components/fmode-card/fmode-card.component.ts","../../../src/app/components/fmode-textarea/fmode-textarea.component.ts","../../../src/app/components/fmode-select/fmode-select.component.ts","../../../src/app/components/fmode-button/fmode-button.component.ts","../../../src/app/components/fmode-loading/fmode-loading.component.ts","../../../src/app/components/fmode-list/fmode-list.component.ts","../../../src/app/components/fmode-avatar/fmode-avatar.component.ts","../../../src/app/components/fmode-badge/fmode-badge.component.ts","../../../src/app/components/fmode-divider/fmode-divider.component.ts","../../../src/app/components/fmode-tag/fmode-tag.component.ts","../../../src/app/components/fmode-digital-human/fmode-digital-human.component.ts","../../../src/app/app.component.ts","../../../src/public-api.ts","../../../src/ai-text-summary-ng.ts"],"sourcesContent":["import { Component, Input, ContentChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'fmode-header',\n standalone: true,\n imports: [CommonModule],\n template: `\n <header class=\"fmode-header\">\n <div class=\"header-content\">\n <h1 class=\"header-title\">{{ title }}</h1>\n <p class=\"header-subtitle\" *ngIf=\"subtitle\">{{ subtitle }}</p>\n </div>\n </header>\n `,\n styles: [`\n .fmode-header {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n padding: 1.5rem 2rem;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n\n .header-content {\n max-width: 1400px;\n margin: 0 auto;\n }\n\n .header-title {\n margin: 0;\n font-size: 1.75rem;\n font-weight: 700;\n letter-spacing: 0.5px;\n }\n\n .header-subtitle {\n margin: 0.5rem 0 0 0;\n font-size: 1rem;\n opacity: 0.9;\n }\n `]\n})\nexport class FmodeHeaderComponent {\n @Input() title = '';\n @Input() subtitle = '';\n}","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'fmode-card',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"fmode-card\">\n <div class=\"card-header\" *ngIf=\"title\">\n <h2 class=\"card-title\">{{ title }}</h2>\n </div>\n <div class=\"card-body\">\n <ng-content></ng-content>\n </div>\n </div>\n `,\n styles: [`\n .fmode-card {\n background: white;\n border-radius: 12px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n overflow: hidden;\n transition: transform 0.3s, box-shadow 0.3s;\n }\n\n .fmode-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);\n }\n\n .card-header {\n background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);\n padding: 1rem 1.5rem;\n border-bottom: 2px solid #dee2e6;\n }\n\n .card-title {\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: #495057;\n }\n\n .card-body {\n padding: 1.5rem;\n }\n `]\n})\nexport class FmodeCardComponent {\n @Input() title = '';\n}","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'fmode-textarea',\n standalone: true,\n imports: [CommonModule, FormsModule],\n template: `\n <div class=\"fmode-textarea-wrapper\">\n <label *ngIf=\"label\" class=\"textarea-label\">{{ label }}</label>\n <textarea\n [value]=\"value\"\n (input)=\"onInputChange($event)\"\n [placeholder]=\"placeholder\"\n [rows]=\"rows\"\n [disabled]=\"disabled\"\n [maxLength]=\"maxLength\"\n class=\"fmode-textarea\"\n ></textarea>\n <div class=\"textarea-footer\" *ngIf=\"showCharCount\">\n <span class=\"char-count\">{{ value?.length || 0 }}/{{ maxLength }}</span>\n </div>\n </div>\n `,\n styles: [`\n .fmode-textarea-wrapper {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n\n .textarea-label {\n font-weight: 600;\n color: #495057;\n font-size: 0.9rem;\n }\n\n .fmode-textarea {\n width: 100%;\n padding: 1rem;\n border: 2px solid #dee2e6;\n border-radius: 8px;\n font-size: 1rem;\n font-family: inherit;\n line-height: 1.6;\n resize: vertical;\n transition: border-color 0.3s, box-shadow 0.3s;\n box-sizing: border-box;\n }\n\n .fmode-textarea:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n }\n\n .fmode-textarea:disabled {\n background: #f8f9fa;\n cursor: not-allowed;\n opacity: 0.7;\n }\n\n .textarea-footer {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n }\n\n .char-count {\n font-size: 0.85rem;\n color: #6c757d;\n }\n `]\n})\nexport class FmodeTextareaComponent {\n @Input() value = '';\n @Output() valueChange = new EventEmitter<string>();\n @Input() placeholder = '';\n @Input() label = '';\n @Input() rows = 4;\n @Input() disabled = false;\n @Input() maxLength = 10000;\n @Input() showCharCount = true;\n\n onInputChange(event: any) {\n const newValue = event.target.value;\n console.log('Textarea onInputChange - newValue:', newValue);\n this.valueChange.emit(newValue);\n }\n}","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\ninterface SelectOption {\n value: string;\n label: string;\n}\n\n@Component({\n selector: 'fmode-select',\n standalone: true,\n imports: [CommonModule, FormsModule],\n template: `\n <div class=\"fmode-select-wrapper\">\n <label *ngIf=\"label\" class=\"select-label\">{{ label }}</label>\n <select\n [value]=\"value\"\n (change)=\"onSelectChange($event)\"\n [disabled]=\"disabled\"\n class=\"fmode-select\"\n >\n <option *ngFor=\"let option of options\" [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n </div>\n `,\n styles: [`\n .fmode-select-wrapper {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n\n .select-label {\n font-weight: 600;\n color: #495057;\n font-size: 0.9rem;\n }\n\n .fmode-select {\n width: 100%;\n padding: 0.75rem 1rem;\n border: 2px solid #dee2e6;\n border-radius: 8px;\n font-size: 1rem;\n font-family: inherit;\n background: white;\n cursor: pointer;\n transition: border-color 0.3s, box-shadow 0.3s;\n box-sizing: border-box;\n }\n\n .fmode-select:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n }\n\n .fmode-select:disabled {\n background: #f8f9fa;\n cursor: not-allowed;\n opacity: 0.7;\n }\n\n .fmode-select option {\n padding: 0.5rem;\n }\n `]\n})\nexport class FmodeSelectComponent {\n @Input() value = '';\n @Output() valueChange = new EventEmitter<string>();\n @Input() label = '';\n @Input() disabled = false;\n @Input() options: SelectOption[] = [];\n\n onSelectChange(event: any) {\n const newValue = event.target.value;\n this.valueChange.emit(newValue);\n }\n}","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'fmode-button',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button\n [disabled]=\"disabled\"\n [class.primary]=\"type === 'primary'\"\n [class.secondary]=\"type === 'secondary'\"\n [class.success]=\"type === 'success'\"\n [class.danger]=\"type === 'danger'\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n (click)=\"onClick.emit()\"\n class=\"fmode-button\"\n >\n <ng-content></ng-content>\n </button>\n `,\n styles: [`\n .fmode-button {\n padding: 0.75rem 1.5rem;\n border: none;\n border-radius: 8px;\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.3s;\n font-family: inherit;\n box-sizing: border-box;\n }\n\n .fmode-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .fmode-button.primary {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n }\n\n .fmode-button.primary:hover:not(:disabled) {\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\n }\n\n .fmode-button.secondary {\n background: #6c757d;\n color: white;\n }\n\n .fmode-button.secondary:hover:not(:disabled) {\n background: #5a6268;\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(108, 117, 125, 0.4);\n }\n\n .fmode-button.success {\n background: #28a745;\n color: white;\n }\n\n .fmode-button.success:hover:not(:disabled) {\n background: #218838;\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(40, 167, 69, 0.4);\n }\n\n .fmode-button.danger {\n background: #dc3545;\n color: white;\n }\n\n .fmode-button.danger:hover:not(:disabled) {\n background: #c82333;\n transform: translateY(-2px);\n box-shadow: 0 4px 12px rgba(220, 53, 69, 0.4);\n }\n\n .fmode-button.small {\n padding: 0.5rem 1rem;\n font-size: 0.875rem;\n }\n\n .fmode-button.large {\n padding: 1rem 2rem;\n font-size: 1.125rem;\n }\n `]\n})\nexport class FmodeButtonComponent {\n @Input() disabled = false;\n @Input() type: 'primary' | 'secondary' | 'success' | 'danger' = 'primary';\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\n @Output() onClick = new EventEmitter<void>();\n}","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'fmode-loading',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"fmode-loading\">\n <div class=\"loading-spinner\"></div>\n <div class=\"loading-text\">{{ loadingText || '加载中...' }}</div>\n </div>\n `,\n styles: [`\n .fmode-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n padding: 2rem;\n }\n\n .loading-spinner {\n width: 50px;\n height: 50px;\n border: 4px solid #f3f3f3;\n border-top: 4px solid #667eea;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n }\n\n .loading-text {\n color: #667eea;\n font-weight: 600;\n font-size: 1.1rem;\n }\n\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `]\n})\nexport class FmodeLoadingComponent {\n @Input() loadingText = '';\n}","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'fmode-list',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"fmode-list\">\n <div \n *ngFor=\"let item of items\"\n (click)=\"onItemClick(item)\"\n class=\"list-item\"\n >\n <div class=\"item-content\">{{ item }}</div>\n </div>\n \n <div *ngIf=\"items.length === 0\" class=\"empty-state\">\n <span>暂无数据</span>\n </div>\n </div>\n `,\n styles: [`\n .fmode-list {\n background: white;\n border-radius: 8px;\n overflow: hidden;\n }\n\n .list-item {\n padding: 1rem;\n border-bottom: 1px solid #e9ecef;\n cursor: pointer;\n transition: background 0.3s;\n }\n\n .list-item:hover {\n background: #f8f9fa;\n }\n\n .list-item:last-child {\n border-bottom: none;\n }\n\n .item-content {\n color: #495057;\n line-height: 1.6;\n }\n\n .empty-state {\n padding: 2rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n `]\n})\nexport class FmodeListComponent {\n @Input() items: any[] = [];\n @Output() itemClick = new EventEmitter<any>();\n\n onItemClick(item: any) {\n this.itemClick.emit(item);\n }\n}","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'fmode-avatar',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div \n class=\"fmode-avatar\"\n [class.small]=\"size === 'small'\"\n [class.medium]=\"size === 'medium'\"\n [class.large]=\"size === 'large'\"\n [class.xlarge]=\"size === 'xlarge'\"\n [class.rounded]=\"rounded\"\n [class.clickable]=\"clickable\"\n [style.background-image]=\"imageUrl ? 'url(' + imageUrl + ')' : ''\"\n [style.background-color]=\"!imageUrl ? backgroundColor : ''\"\n [style.color]=\"textColor\"\n (click)=\"onClick.emit()\"\n >\n <span *ngIf=\"!imageUrl\" class=\"avatar-text\">{{ initials }}</span>\n <img *ngIf=\"imageUrl\" [src]=\"imageUrl\" [alt]=\"alt\" class=\"avatar-image\">\n </div>\n `,\n styles: [`\n .fmode-avatar {\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n overflow: hidden;\n font-weight: 600;\n font-size: 1.2rem;\n cursor: default;\n transition: transform 0.3s, box-shadow 0.3s;\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n\n .fmode-avatar.small {\n width: 32px;\n height: 32px;\n font-size: 0.8rem;\n }\n\n .fmode-avatar.medium {\n width: 48px;\n height: 48px;\n font-size: 1rem;\n }\n\n .fmode-avatar.large {\n width: 64px;\n height: 64px;\n font-size: 1.2rem;\n }\n\n .fmode-avatar.xlarge {\n width: 96px;\n height: 96px;\n font-size: 1.5rem;\n }\n\n .fmode-avatar.rounded {\n border-radius: 12px;\n }\n\n .fmode-avatar.clickable {\n cursor: pointer;\n }\n\n .fmode-avatar.clickable:hover {\n transform: scale(1.05);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n .avatar-text {\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .avatar-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n `]\n})\nexport class FmodeAvatarComponent {\n @Input() name = '';\n @Input() imageUrl = '';\n @Input() size: 'small' | 'medium' | 'large' | 'xlarge' = 'medium';\n @Input() backgroundColor = '#667eea';\n @Input() textColor = '#ffffff';\n @Input() alt = 'Avatar';\n @Input() rounded = false;\n @Input() clickable = false;\n @Output() onClick = new EventEmitter<void>();\n\n get initials(): string {\n if (!this.name) return '';\n const words = this.name.trim().split(/\\s+/);\n if (words.length >= 2) {\n return (words[0][0] + words[words.length - 1][0]).toUpperCase();\n }\n return this.name.substring(0, 2).toUpperCase();\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'fmode-badge',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span\n class=\"fmode-badge\"\n [class.primary]=\"type === 'primary'\"\n [class.secondary]=\"type === 'secondary'\"\n [class.success]=\"type === 'success'\"\n [class.warning]=\"type === 'warning'\"\n [class.danger]=\"type === 'danger'\"\n [class.info]=\"type === 'info'\"\n [class.pill]=\"pill\"\n [class.outline]=\"outline\"\n >\n <ng-content></ng-content>\n </span>\n `,\n styles: [`\n .fmode-badge {\n display: inline-block;\n padding: 0.25rem 0.75rem;\n font-size: 0.875rem;\n font-weight: 600;\n border-radius: 4px;\n letter-spacing: 0.5px;\n transition: all 0.3s;\n }\n\n .fmode-badge.primary {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n }\n\n .fmode-badge.secondary {\n background: #6c757d;\n color: white;\n }\n\n .fmode-badge.success {\n background: #28a745;\n color: white;\n }\n\n .fmode-badge.warning {\n background: #ffc107;\n color: #212529;\n }\n\n .fmode-badge.danger {\n background: #dc3545;\n color: white;\n }\n\n .fmode-badge.info {\n background: #17a2b8;\n color: white;\n }\n\n .fmode-badge.outline {\n background: transparent;\n border: 2px solid currentColor;\n }\n\n .fmode-badge.outline.primary {\n color: #667eea;\n border-color: #667eea;\n }\n\n .fmode-badge.outline.secondary {\n color: #6c757d;\n border-color: #6c757d;\n }\n\n .fmode-badge.outline.success {\n color: #28a745;\n border-color: #28a745;\n }\n\n .fmode-badge.outline.warning {\n color: #ffc107;\n border-color: #ffc107;\n }\n\n .fmode-badge.outline.danger {\n color: #dc3545;\n border-color: #dc3545;\n }\n\n .fmode-badge.outline.info {\n color: #17a2b8;\n border-color: #17a2b8;\n }\n\n .fmode-badge.pill {\n border-radius: 50px;\n padding: 0.375rem 1rem;\n }\n\n .fmode-badge:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n }\n `]\n})\nexport class FmodeBadgeComponent {\n @Input() type: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' = 'primary';\n @Input() pill = false;\n @Input() outline = false;\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'fmode-divider',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div\n class=\"fmode-divider\"\n [class.vertical]=\"vertical\"\n [class.with-text]=\"!!text\"\n >\n <span *ngIf=\"text\" class=\"divider-text\">{{ text }}</span>\n </div>\n `,\n styles: [`\n .fmode-divider {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n height: 1px;\n background: linear-gradient(90deg, transparent, #e9ecef, transparent);\n margin: 1.5rem 0;\n }\n\n .fmode-divider.vertical {\n width: 1px;\n height: 100%;\n background: linear-gradient(180deg, transparent, #e9ecef, transparent);\n margin: 0 1.5rem;\n }\n\n .fmode-divider.with-text::before,\n .fmode-divider.with-text::after {\n content: '';\n flex: 1;\n height: 1px;\n background: linear-gradient(90deg, transparent, #e9ecef, transparent);\n }\n\n .fmode-divider.vertical.with-text::before,\n .fmode-divider.vertical.with-text::after {\n width: 1px;\n height: 100%;\n background: linear-gradient(180deg, transparent, #e9ecef, transparent);\n }\n\n .divider-text {\n padding: 0 1rem;\n color: #6c757d;\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n background: transparent;\n }\n `]\n})\nexport class FmodeDividerComponent {\n @Input() text = '';\n @Input() vertical = false;\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'fmode-tag',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span\n class=\"fmode-tag\"\n [class.closable]=\"closable\"\n [class.primary]=\"color === 'primary'\"\n [class.secondary]=\"color === 'secondary'\"\n [class.success]=\"color === 'success'\"\n [class.warning]=\"color === 'warning'\"\n [class.danger]=\"color === 'danger'\"\n [class.info]=\"color === 'info'\"\n >\n <span class=\"tag-content\">\n <ng-content></ng-content>\n </span>\n <span *ngIf=\"closable\" class=\"tag-close\" (click)=\"onClose.emit()\">×</span>\n </span>\n `,\n styles: [`\n .fmode-tag {\n display: inline-flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n border-radius: 6px;\n font-size: 0.875rem;\n font-weight: 500;\n transition: all 0.3s;\n gap: 0.5rem;\n }\n\n .fmode-tag.primary {\n background: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%);\n color: #667eea;\n border: 1px solid rgba(102, 126, 234, 0.2);\n }\n\n .fmode-tag.secondary {\n background: rgba(108, 117, 125, 0.1);\n color: #6c757d;\n border: 1px solid rgba(108, 117, 125, 0.2);\n }\n\n .fmode-tag.success {\n background: rgba(40, 167, 69, 0.1);\n color: #28a745;\n border: 1px solid rgba(40, 167, 69, 0.2);\n }\n\n .fmode-tag.warning {\n background: rgba(255, 193, 7, 0.1);\n color: #ffc107;\n border: 1px solid rgba(255, 193, 7, 0.2);\n }\n\n .fmode-tag.danger {\n background: rgba(220, 53, 69, 0.1);\n color: #dc3545;\n border: 1px solid rgba(220, 53, 69, 0.2);\n }\n\n .fmode-tag.info {\n background: rgba(23, 162, 184, 0.1);\n color: #17a2b8;\n border: 1px solid rgba(23, 162, 184, 0.2);\n }\n\n .fmode-tag:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n }\n\n .fmode-tag.closable {\n padding-right: 0.5rem;\n }\n\n .tag-content {\n display: inline-block;\n }\n\n .tag-close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n cursor: pointer;\n transition: all 0.3s;\n font-size: 1.2rem;\n line-height: 1;\n }\n\n .tag-close:hover {\n background: rgba(0, 0, 0, 0.1);\n transform: scale(1.1);\n }\n `]\n})\nexport class FmodeTagComponent {\n @Input() color: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' = 'primary';\n @Input() closable = false;\n @Output() onClose = new EventEmitter<void>();\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'fmode-digital-human',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div \n class=\"fmode-digital-human\"\n [class.small]=\"size === 'small'\"\n [class.medium]=\"size === 'medium'\"\n [class.large]=\"size === 'large'\"\n [class.xlarge]=\"size === 'xlarge'\"\n >\n <div class=\"digital-human-container\">\n <div class=\"digital-human-avatar\">\n <img src=\"https://trae-api-cn.mchost.guru/api/ide/v1/text_to_image?prompt=friendly%20digital%20assistant%20avatar%20with%20glasses%20and%20professional%20appearance&image_size=square_hd\" \n alt=\"Digital Assistant\" class=\"avatar-image\">\n </div>\n \n <div class=\"digital-human-animations\">\n <div *ngIf=\"state === 'waiting'\" class=\"animation waiting\">\n <div class=\"pulse\"></div>\n <div class=\"pulse\"></div>\n <div class=\"pulse\"></div>\n </div>\n \n <div *ngIf=\"state === 'listening'\" class=\"animation listening\">\n <div class=\"wave\">\n <span></span>\n <span></span>\n <span></span>\n <span></span>\n <span></span>\n </div>\n </div>\n \n <div *ngIf=\"state === 'thinking'\" class=\"animation thinking\">\n <div class=\"brain\">\n <div class=\"neuron\"></div>\n <div class=\"neuron\"></div>\n <div class=\"neuron\"></div>\n </div>\n </div>\n \n <div *ngIf=\"state === 'speaking'\" class=\"animation speaking\">\n <div class=\"speech-bubble\">\n <span>{{ speechText }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .fmode-digital-human {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1rem;\n }\n\n .digital-human-container {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .digital-human-avatar {\n border-radius: 50%;\n overflow: hidden;\n box-shadow: 0 4px 16px rgba(102, 126, 234, 0.3);\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n transition: all 0.3s;\n }\n\n .avatar-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n\n .fmode-digital-human.small .digital-human-avatar {\n width: 64px;\n height: 64px;\n }\n\n .fmode-digital-human.medium .digital-human-avatar {\n width: 96px;\n height: 96px;\n }\n\n .fmode-digital-human.large .digital-human-avatar {\n width: 128px;\n height: 128px;\n }\n\n .fmode-digital-human.xlarge .digital-human-avatar {\n width: 160px;\n height: 160px;\n }\n\n .digital-human-animations {\n position: absolute;\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-top: 0.5rem;\n width: 100%;\n display: flex;\n justify-content: center;\n }\n\n .animation {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Waiting Animation */\n .waiting .pulse {\n width: 8px;\n height: 8px;\n background: #667eea;\n border-radius: 50%;\n margin: 0 3px;\n animation: pulse 1.5s infinite ease-in-out;\n }\n\n .waiting .pulse:nth-child(2) {\n animation-delay: 0.2s;\n }\n\n .waiting .pulse:nth-child(3) {\n animation-delay: 0.4s;\n }\n\n @keyframes pulse {\n 0%, 100% {\n transform: scale(0.8);\n opacity: 0.5;\n }\n 50% {\n transform: scale(1.2);\n opacity: 1;\n }\n }\n\n /* Listening Animation */\n .listening .wave {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .listening .wave span {\n width: 4px;\n background: #667eea;\n border-radius: 2px;\n animation: wave 1.5s infinite ease-in-out;\n }\n\n .listening .wave span:nth-child(1) {\n height: 8px;\n animation-delay: 0s;\n }\n\n .listening .wave span:nth-child(2) {\n height: 12px;\n animation-delay: 0.1s;\n }\n\n .listening .wave span:nth-child(3) {\n height: 16px;\n animation-delay: 0.2s;\n }\n\n .listening .wave span:nth-child(4) {\n height: 12px;\n animation-delay: 0.3s;\n }\n\n .listening .wave span:nth-child(5) {\n height: 8px;\n animation-delay: 0.4s;\n }\n\n @keyframes wave {\n 0%, 100% {\n transform: scaleY(0.5);\n opacity: 0.5;\n }\n 50% {\n transform: scaleY(1);\n opacity: 1;\n }\n }\n\n /* Thinking Animation */\n .thinking .brain {\n position: relative;\n width: 40px;\n height: 30px;\n }\n\n .thinking .neuron {\n position: absolute;\n width: 6px;\n height: 6px;\n background: #667eea;\n border-radius: 50%;\n animation: neuron 2s infinite ease-in-out;\n }\n\n .thinking .neuron:nth-child(1) {\n top: 0;\n left: 17px;\n animation-delay: 0s;\n }\n\n .thinking .neuron:nth-child(2) {\n top: 12px;\n left: 4px;\n animation-delay: 0.3s;\n }\n\n .thinking .neuron:nth-child(3) {\n top: 12px;\n right: 4px;\n animation-delay: 0.6s;\n }\n\n @keyframes neuron {\n 0%, 100% {\n transform: scale(0.5);\n opacity: 0;\n }\n 50% {\n transform: scale(1);\n opacity: 1;\n }\n }\n\n /* Speaking Animation */\n .speaking .speech-bubble {\n background: white;\n padding: 0.5rem 1rem;\n border-radius: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n max-width: 200px;\n text-align: center;\n animation: speech 1s infinite ease-in-out;\n }\n\n .speaking .speech-bubble::after {\n content: '';\n position: absolute;\n bottom: -8px;\n left: 50%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-top: 8px solid white;\n }\n\n .speaking .speech-bubble span {\n font-size: 0.875rem;\n color: #495057;\n font-weight: 500;\n }\n\n @keyframes speech {\n 0%, 100% {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-2px);\n }\n }\n `]\n})\nexport class FmodeDigitalHumanComponent implements OnInit {\n @Input() size: 'small' | 'medium' | 'large' | 'xlarge' = 'medium';\n @Input() state: 'waiting' | 'listening' | 'thinking' | 'speaking' = 'waiting';\n @Input() speechText = '正在处理...';\n\n ngOnInit() {\n // 初始化状态\n }\n}\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FmodeHeaderComponent } from './components/fmode-header/fmode-header.component';\nimport { FmodeCardComponent } from './components/fmode-card/fmode-card.component';\nimport { FmodeTextareaComponent } from './components/fmode-textarea/fmode-textarea.component';\nimport { FmodeSelectComponent } from './components/fmode-select/fmode-select.component';\nimport { FmodeButtonComponent } from './components/fmode-button/fmode-button.component';\nimport { FmodeLoadingComponent } from './components/fmode-loading/fmode-loading.component';\nimport { FmodeListComponent } from './components/fmode-list/fmode-list.component';\nimport { FmodeAvatarComponent } from './components/fmode-avatar/fmode-avatar.component';\nimport { FmodeBadgeComponent } from './components/fmode-badge/fmode-badge.component';\nimport { FmodeDividerComponent } from './components/fmode-divider/fmode-divider.component';\nimport { FmodeTagComponent } from './components/fmode-tag/fmode-tag.component';\nimport { FmodeDigitalHumanComponent } from './components/fmode-digital-human/fmode-digital-human.component';\n\ninterface SummaryHistory {\n id: number;\n originalText: string;\n summaryText: string;\n timestamp: Date;\n}\n\n@Component({\n selector: 'app-root',\n standalone: true,\n imports: [\n CommonModule,\n FmodeHeaderComponent,\n FmodeCardComponent,\n FmodeTextareaComponent,\n FmodeSelectComponent,\n FmodeButtonComponent,\n FmodeLoadingComponent,\n FmodeListComponent,\n FmodeAvatarComponent,\n FmodeBadgeComponent,\n FmodeDividerComponent,\n FmodeTagComponent,\n FmodeDigitalHumanComponent\n ],\n template: `\n <div class=\"app-container\">\n <fmode-header title=\"AI 文本智能总结助手\" subtitle=\"基于 fmode-ng UI 组件库\"></fmode-header>\n \n <div class=\"main-content\">\n <div class=\"left-panel\">\n <fmode-card title=\"文本输入\" class=\"input-card\">\n <div class=\"input-header\">\n <fmode-avatar name=\"AI\" size=\"large\" backgroundColor=\"#667eea\" textColor=\"#ffffff\"></fmode-avatar>\n <div class=\"input-info\">\n <h3>智能文本总结</h3>\n <p>输入长文本,AI 自动生成精简总结</p>\n </div>\n </div>\n \n <div class=\"test-texts-section\">\n <h4>测试文本</h4>\n <div class=\"test-texts-buttons\">\n <fmode-button *ngFor=\"let testText of testTexts; let i = index\"\n (onClick)=\"loadTestText(i)\"\n type=\"secondary\"\n size=\"small\"\n >\n {{ testText.title }}\n </fmode-button>\n </div>\n </div>\n \n <fmode-divider></fmode-divider>\n \n <fmode-textarea\n [value]=\"inputText\"\n (valueChange)=\"onInputTextChange($event)\"\n placeholder=\"请输入需要总结的长文本内容...\"\n [rows]=\"12\"\n [disabled]=\"isLoading\"\n [showCharCount]=\"true\"\n [maxLength]=\"10000\"\n ></fmode-textarea>\n \n <div class=\"control-bar\">\n <fmode-select\n [value]=\"summaryLength\"\n (valueChange)=\"onSummaryLengthChange($event)\"\n [options]=\"lengthOptions\"\n label=\"总结长度\"\n [disabled]=\"isLoading\"\n ></fmode-select>\n \n <div class=\"button-group\">\n <fmode-button\n (onClick)=\"summarizeText()\"\n [disabled]=\"isLoading\"\n type=\"primary\"\n >\n 智能总结\n </fmode-button>\n <fmode-button\n (onClick)=\"clearInput()\"\n [disabled]=\"isLoading\"\n type=\"secondary\"\n >\n 清空\n </fmode-button>\n </div>\n </div>\n </fmode-card>\n \n <fmode-card title=\"历史记录\" class=\"history-card\">\n <div class=\"history-header\">\n <div class=\"history-info\">\n <fmode-avatar name=\"历史\" size=\"small\" backgroundColor=\"#6c757d\" textColor=\"#ffffff\"></fmode-avatar>\n <span class=\"history-count\">共 {{ history.length }} 条记录</span>\n </div>\n <fmode-button\n (onClick)=\"clearHistory()\"\n [disabled]=\"history.length === 0\"\n type=\"danger\"\n >\n 清空历史\n </fmode-button>\n </div>\n \n <fmode-divider></fmode-divider>\n \n <div class=\"history-list\">\n <div \n *ngFor=\"let item of history\"\n (click)=\"loadHistoryItem(item)\"\n class=\"history-item\"\n >\n <div class=\"history-item-header\">\n <fmode-avatar [name]=\"formatTime(item.timestamp)\" size=\"small\" backgroundColor=\"#17a2b8\" textColor=\"#ffffff\"></fmode-avatar>\n <div class=\"history-meta\">\n <div class=\"history-time\">{{ formatTime(item.timestamp) }}</div>\n <fmode-tag type=\"info\">{{ item.originalText.length }} 字符</fmode-tag>\n </div>\n </div>\n <div class=\"history-text\">{{ item.originalText.substring(0, 100) }}...</div>\n </div>\n \n <div *ngIf=\"history.length === 0\" class=\"empty-history\">\n <fmode-avatar name=\"空\" size=\"large\" backgroundColor=\"#e9ecef\" textColor=\"#6c757d\"></fmode-avatar>\n <p>暂无历史记录</p>\n </div>\n </div>\n </fmode-card>\n </div>\n \n <div class=\"right-panel\">\n <fmode-card title=\"总结结果\" class=\"result-card\">\n <div class=\"result-header\">\n <fmode-digital-human \n size=\"large\" \n [state]=\"digitalHumanState\" \n [speechText]=\"digitalHumanSpeech\"\n ></fmode-digital-human>\n <div class=\"result-badges\">\n <fmode-badge *ngIf=\"currentSummary\" type=\"success\" [pill]=\"true\">已完成</fmode-badge>\n <fmode-badge *ngIf=\"!currentSummary\" type=\"secondary\" [pill]=\"true\">等待中</fmode-badge>\n </div>\n </div>\n \n <fmode-divider></fmode-divider>\n \n <div *ngIf=\"isLoading\" class=\"loading-container\">\n <fmode-loading loadingText=\"正在智能总结中...\"></fmode-loading>\n </div>\n \n <div *ngIf=\"!isLoading && !currentSummary\" class=\"empty-result\">\n <fmode-avatar name=\"空\" size=\"xlarge\" backgroundColor=\"#e9ecef\" textColor=\"#6c757d\"></fmode-avatar>\n <p>输入文本并点击\"智能总结\"按钮</p>\n </div>\n \n <div *ngIf=\"!isLoading && currentSummary\" class=\"result-content\">\n <pre class=\"summary-text\">{{ currentSummary }}</pre>\n \n <fmode-divider></fmode-divider>\n \n <div class=\"result-actions\">\n <div class=\"result-info\">\n <fmode-tag type=\"success\">{{ currentSummary.length }} 字符</fmode-tag>\n <fmode-tag type=\"primary\">{{ summaryLength === 'short' ? '简短' : '详细' }}</fmode-tag>\n </div>\n <fmode-button\n (onClick)=\"copySummary()\"\n type=\"success\"\n >\n 复制结果\n </fmode-button>\n </div>\n </div>\n </fmode-card>\n </div>\n </div>\n </div>\n `,\n styles: [`\n .app-container {\n min-height: 100vh;\n background: linear-gradient(135deg, #f5f7fa 0%, #e4e8eb 100%);\n }\n\n .main-content {\n max-width: 1400px;\n margin: 0 auto;\n padding: 2rem;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 2rem;\n }\n\n .left-panel {\n display: flex;\n flex-direction: column;\n gap: 2rem;\n }\n\n .input-card {\n flex: 1;\n }\n\n .input-header {\n display: flex;\n align-items: center;\n gap: 1rem;\n margin-bottom: 1rem;\n }\n\n .input-info {\n flex: 1;\n }\n\n .input-info h3 {\n margin: 0 0 0.25rem 0;\n color: #495057;\n font-size: 1.25rem;\n }\n\n .input-info p {\n margin: 0;\n color: #6c757d;\n font-size: 0.875rem;\n }\n\n .test-texts-section {\n margin: 1rem 0;\n }\n\n .test-texts-section h4 {\n margin: 0 0 0.75rem 0;\n color: #495057;\n font-size: 1rem;\n }\n\n .test-texts-buttons {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 0.5rem;\n }\n\n .input-badges {\n display: flex;\n gap: 0.5rem;\n }\n\n .control-bar {\n margin-top: 1.5rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n }\n\n .button-group {\n display: flex;\n gap: 1rem;\n }\n\n .history-card {\n flex: 1;\n }\n\n .history-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 1rem;\n padding-bottom: 1rem;\n border-bottom: 2px solid #e9ecef;\n }\n\n .history-info {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n }\n\n .history-count {\n font-weight: 600;\n color: #495057;\n }\n\n .history-list {\n max-height: 300px;\n overflow-y: auto;\n }\n\n .history-item {\n padding: 1rem;\n border-bottom: 1px solid #e9ecef;\n cursor: pointer;\n transition: background 0.3s;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n }\n\n .history-item-header {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n }\n\n .history-meta {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n }\n\n .history-item:hover {\n background: #f8f9fa;\n }\n\n .history-item:last-child {\n border-bottom: none;\n }\n\n .history-time {\n font-size: 0.85rem;\n color: #6c757d;\n }\n\n .history-text {\n color: #495057;\n line-height: 1.5;\n }\n\n .empty-history {\n padding: 2rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n }\n\n .right-panel {\n display: flex;\n flex-direction: column;\n }\n\n .result-card {\n flex: 1;\n display: flex;\n flex-direction: column;\n }\n\n .result-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 1rem;\n }\n\n .result-badges {\n display: flex;\n gap: 0.5rem;\n }\n\n .loading-container {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .empty-result {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1rem;\n color: #6c757d;\n }\n\n .empty-icon {\n font-size: 4rem;\n opacity: 0.5;\n }\n\n .result-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n }\n\n .summary-text {\n flex: 1;\n background: #f8f9fa;\n padding: 1.5rem;\n border-radius: 8px;\n border: 2px solid #e9ecef;\n font-family: 'Courier New', monospace;\n line-height: 1.8;\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow-y: auto;\n max-height: 500px;\n }\n\n .result-actions {\n margin-top: 1rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .result-info {\n display: flex;\n gap: 0.5rem;\n }\n\n .empty-history {\n padding: 2rem;\n text-align: center;\n color: #6c757d;\n font-style: italic;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1rem;\n }\n\n .empty-result {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1.5rem;\n color: #6c757d;\n }\n\n .empty-icon {\n font-size: 4rem;\n opacity: 0.5;\n }\n\n @media (max-width: 1024px) {\n .main-content {\n grid-template-columns: 1fr;\n padding: 1rem;\n }\n\n .left-panel {\n order: 1;\n }\n\n .right-panel {\n order: 2;\n }\n }\n `]\n})\nexport class AppComponent {\n inputText = '';\n currentSummary = '';\n isLoading = false;\n summaryLength = 'short';\n history: SummaryHistory[] = [];\n digitalHumanState: 'waiting' | 'listening' | 'thinking' | 'speaking' = 'waiting';\n digitalHumanSpeech = '等待输入...';\n\n lengthOptions = [\n { value: 'short', label: '简短' },\n { value: 'long', label: '详细' }\n ];\n\n testTexts = [\n {\n id: 1,\n title: '人工智能简介',\n content: '人工智能(Artificial Intelligence,简称AI)是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的\"容器\"。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。'\n },\n {\n id: 2,\n title: '气候变化与环境保护',\n content: '气候变化是指气候状态的变化,特别是平均天气模式的长期变化,这种变化可能是由自然内部过程或外部强迫引起的,也可能是由于人类活动改变了地球大气的组成。气候变化对人类社会和自然生态系统产生了深远的影响,包括海平面上升、极端天气事件增加、生物多样性减少等。为了应对气候变化,国际社会采取了一系列措施,如减少温室气体排放、发展可再生能源、提高能源效率等。环境保护是指人类为解决现实或潜在的环境问题,协调人类与环境的关系,保障经济社会的可持续发展而采取的各种行动的总称。'\n },\n {\n id: 3,\n title: '健康生活方式',\n content: '健康的生活方式对于维持身体和心理健康至关重要。这包括均衡的饮食、定期的体育锻炼、充足的睡眠、减少压力以及避免有害习惯如吸烟和过度饮酒。均衡饮食意味着摄入各种营养素,包括蛋白质、碳水化合物、脂肪、维生素和矿物质。定期锻炼可以增强心肺功能、提高肌肉力量和灵活性,并有助于控制体重。充足的睡眠对于身体恢复和大脑功能至关重要。管理压力可以通过冥想、瑜伽、深呼吸或其他放松技巧来实现。避免吸烟和限制酒精摄入可以降低患心脏病、癌症和其他慢性疾病的风险。'\n },\n {\n id: 4,\n title: '科技创新与未来',\n content: '科技创新是推动社会进步和经济发展的重要动力。近年来,人工智能、大数据、物联网、区块链、量子计算等新兴技术的快速发展,正在深刻改变着我们的生活和工作方式。人工智能正在各个领域得到广泛应用,从智能助手到自动驾驶汽车。大数据分析帮助企业做出更明智的决策。物联网连接了各种设备,使我们的生活更加便捷。区块链技术提供了安全、透明的交易方式。量子计算有望解决传统计算机难以处理的复杂问题。这些技术的发展将继续推动产业升级和社会变革,为未来创造更多可能性。'\n },\n {\n id: 5,\n title: '教育的重要性',\n content: '教育是人类社会发展的基石,对于个人和社会都具有重要意义。教育不仅传授知识和技能,还培养人的思维能力、创造力和社会责任感。通过教育,个人可以获得更好的就业机会,提高生活质量。对于社会而言,教育可以促进经济发展、减少贫困、提高社会凝聚力。教育还可以培养公民的民主意识和参与能力,促进社会的公平与正义。在当今快速变化的世界中,终身学习变得越来越重要,人们需要不断更新知识和技能以适应社会的发展。因此,投资教育是对未来最好的投资。'\n }\n ];\n\n onInputTextChange(value: string) {\n console.log('onInputTextChange:', value);\n this.inputText = value;\n }\n\n onSummaryLengthChange(value: string) {\n console.log('onSummaryLengthChange:', value);\n this.summaryLength = value;\n }\n\n loadTestText(index: number) {\n console.log('Loading test text:', index);\n const testText = this.testTexts[index];\n if (testText) {\n this.inputText = testText.content;\n console.log('Test text loaded:', testText.title);\n }\n }\n\n async summarizeText() {\n console.log('=== summarizeText called ===');\n console.log('inputText:', this.inputText);\n console.log('inputText.trim():', this.inputText.trim());\n console.log('isLoading:', this.isLoading);\n \n if (!this.inputText.trim() || this.isLoading) {\n console.log('Early return: empty text or already loading');\n return;\n }\n \n const text = this.inputText.trim();\n console.log('Text length:', text.length);\n \n if (text.length < 50) {\n alert('请输入至少50个字符的文本内容');\n return;\n }\n \n if (text.length > 10000) {\n alert('文本长度不能超过10000个字符');\n return;\n }\n \n // 数字人状态:开始聆听\n this.digitalHumanState = 'listening';\n this.digitalHumanSpeech = '正在聆听...';\n this.isLoading = true;\n console.log('Starting summary generation...');\n \n try {\n // 模拟聆听过程\n await new Promise(resolve => setTimeout(resolve, 1000));\n \n // 数字人状态:开始思考\n this.digitalHumanState = 'thinking';\n this.digitalHumanSpeech = '正在思考...';\n \n const summary = await this.mockAISummary(text, this.summaryLength);\n console.log('Summary generated:', summary);\n \n // 数字人状态:开始说话\n this.digitalHumanState = 'speaking';\n this.digitalHumanSpeech = '总结完成!';\n \n this.currentSummary = summary;\n console.log('currentSummary set to:', this.currentSummary);\n \n const historyItem: SummaryHistory = {\n id: Date.now(),\n originalText: text,\n summaryText: summary,\n timestamp: new Date()\n };\n \n this.history.unshift(historyItem);\n \n if (this.history.length > 10) {\n this.history = this.history.slice(0, 10);\n }\n \n // 3秒后恢复到等待状态\n setTimeout(() => {\n this.digitalHumanState = 'waiting';\n this.digitalHumanSpeech = '等待输入...';\n }, 3000);\n \n } catch (error) {\n console.error('总结失败:', error);\n alert('总结过程中出现错误,请重试');\n \n // 错误时恢复到等待状态\n this.digitalHumanState = 'waiting';\n this.digitalHumanSpeech = '等待输入...';\n } finally {\n this.isLoading = false;\n console.log('Loading complete');\n }\n }\n\n async mockAISummary(text: string, length: string): Promise<string> {\n return new Promise((resolve) => {\n setTimeout(() => {\n const sentences = text.split(/[。!?.!?]/).filter((s: string) => s.trim());\n \n let summary = '';\n const ratio = length === 'short' ? 0.3 : length === 'medium' ? 0.5 : 0.7;\n const targetCount = Math.max(1, Math.floor(sentences.length * ratio));\n \n if (sentences.length <= 2) {\n summary = `【智能总结】\\n${text}`;\n } else {\n const keyPoints = sentences.slice(0, Math.min(3, sentences.length));\n summary = `【智能总结】\\n核心要点:\\n`;\n keyPoints.forEach((point: string, index: number) => {\n summary += `${index + 1}. ${point.trim()}\\n`;\n });\n \n const selectedSentences = sentences.slice(0, targetCount);\n const summaryText = selectedSentences.join('。');\n summary += `\\n总结:${summaryText}。`;\n }\n \n resolve(summary);\n }, 1500);\n });\n }\n\n clearInput() {\n this.inputText = '';\n this.currentSummary = '';\n }\n\n clearHistory() {\n if (confirm('确定要清空所有历史记录吗?')) {\n this.history = [];\n }\n }\n\n loadHistoryItem(item: SummaryHistory) {\n this.inputText = item.originalText;\n this.currentSummary = item.summaryText;\n }\n\n copySummary() {\n if (this.currentSummary) {\n navigator.clipboard.writeText(this.currentSummary).then(() => {\n alert('已复制到剪贴板');\n }).catch(() => {\n alert('复制失败,请手动复制');\n });\n }\n }\n\n formatTime(timestamp: Date): string {\n const date = new Date(timestamp);\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n \n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n \n if (minutes < 1) return '刚刚';\n if (minutes < 60) return `${minutes}分钟前`;\n if (hours < 24) return `${hours}小时前`;\n if (days < 7) return `${days}天前`;\n \n return date.toLocaleDateString('zh-CN');\n }\n}","// 导出组件和模块\nexport * from './app/app.component';\nexport * from './app/components/fmode-avatar/fmode-avatar.component';\nexport * from './app/components/fmode-badge/fmode-badge.component';\nexport * from './app/components/fmode-button/fmode-button.component';\nexport * from './app/components/fmode-card/fmode-card.component';\nexport * from './app/components/fmode-divider/fmode-divider.component';\nexport * from './app/components/fmode-digital-human/fmode-digital-human.component';\nexport * from './app/components/fmode-header/fmode-header.component';\nexport * from './app/components/fmode-loading/fmode-loading.component';\nexport * from './app/components/fmode-list/fmode-list.component';\nexport * from './app/components/fmode-select/fmode-select.component';\nexport * from './app/components/fmode-tag/fmode-tag.component';\nexport * from './app/components/fmode-textarea/fmode-textarea.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;MA0Ca,oBAAoB,CAAA;IACtB,KAAK,GAAG,EAAE;IACV,QAAQ,GAAG,EAAE;wGAFX,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnCrB;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4TAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EARS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAoCX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAvChC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;AAOT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,4TAAA,CAAA,EAAA;8BA6BQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;;;MCKU,kBAAkB,CAAA;IACpB,KAAK,GAAG,EAAE;wGADR,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1CnB;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0aAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAVS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FA2CX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA9C9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;AAST,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0aAAA,CAAA,EAAA;8BAkCQ,KAAK,EAAA,CAAA;sBAAb;;;MCyBU,sBAAsB,CAAA;IACxB,KAAK,GAAG,EAAE;AACT,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;IACzC,WAAW,GAAG,EAAE;IAChB,KAAK,GAAG,EAAE;IACV,IAAI,GAAG,CAAC;IACR,QAAQ,GAAG,KAAK;IAChB,SAAS,GAAG,KAAK;IACjB,aAAa,GAAG,IAAI;AAE7B,IAAA,aAAa,CAAC,KAAU,EAAA;AACtB,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;AACnC,QAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,QAAQ,CAAC;AAC3D,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;IACjC;wGAdW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnEvB;;;;;;;;;;;;;;;;GAgBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,onBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAjBS,YAAY,kIAAE,WAAW,EAAA,CAAA,EAAA,CAAA;;4FAoExB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAvElC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAC1B;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,onBAAA,CAAA,EAAA;8BAoDQ,KAAK,EAAA,CAAA;sBAAb;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,aAAa,EAAA,CAAA;sBAArB;;;MCZU,oBAAoB,CAAA;IACtB,KAAK,GAAG,EAAE;AACT,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;IACzC,KAAK,GAAG,EAAE;IACV,QAAQ,GAAG,KAAK;IAChB,OAAO,GAAmB,EAAE;AAErC,IAAA,cAAc,CAAC,KAAU,EAAA;AACvB,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;IACjC;wGAVW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1DrB;;;;;;;;;;;;;;GAcT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8hBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAfS,YAAY,+PAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FA2DxB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA9DhC,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAC1B;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,8hBAAA,CAAA,EAAA;8BA6CQ,KAAK,EAAA,CAAA;sBAAb;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,OAAO,EAAA,CAAA;sBAAf;;;MCkBU,oBAAoB,CAAA;IACtB,QAAQ,GAAG,KAAK;IAChB,IAAI,GAAmD,SAAS;IAChE,IAAI,GAAiC,QAAQ;AAC5C,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;wGAJjC,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvFrB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2hCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAfS,YAAY,EAAA,CAAA,EAAA,CAAA;;4FAwFX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA3FhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2hCAAA,CAAA,EAAA;8BA0EQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACS,OAAO,EAAA,CAAA;sBAAhB;;;MCtDU,qBAAqB,CAAA;IACvB,WAAW,GAAG,EAAE;wGADd,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArCtB;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yYAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EANS,YAAY,EAAA,CAAA,EAAA,CAAA;;4FAsCX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAzCjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;AAKT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,yYAAA,CAAA,EAAA;8BAiCQ,WAAW,EAAA,CAAA;sBAAnB;;;MCYU,kBAAkB,CAAA;IACpB,KAAK,GAAU,EAAE;AAChB,IAAA,SAAS,GAAG,IAAI,YAAY,EAAO;AAE7C,IAAA,WAAW,CAAC,IAAS,EAAA;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;wGANW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlDnB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAfS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAmDX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAtD9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wWAAA,CAAA,EAAA;8BAqCQ,KAAK,EAAA,CAAA;sBAAb;gBACS,SAAS,EAAA,CAAA;sBAAlB;;;MCiCU,oBAAoB,CAAA;IACtB,IAAI,GAAG,EAAE;IACT,QAAQ,GAAG,EAAE;IACb,IAAI,GAA4C,QAAQ;IACxD,eAAe,GAAG,SAAS;IAC3B,SAAS,GAAG,SAAS;IACrB,GAAG,GAAG,QAAQ;IACd,OAAO,GAAG,KAAK;IACf,SAAS,GAAG,KAAK;AAChB,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAE5C,IAAA,IAAI,QAAQ,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;AACzB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AAC3C,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;YACrB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;QACjE;AACA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE;IAChD;wGAlBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,GAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArFrB;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlBS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAsFX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAzFhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cACZ,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,g0BAAA,CAAA,EAAA;8BAqEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,GAAG,EAAA,CAAA;sBAAX;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACS,OAAO,EAAA,CAAA;sBAAhB;;;MCQU,mBAAmB,CAAA;IACrB,IAAI,GAAwE,SAAS;IACrF,IAAI,GAAG,KAAK;IACZ,OAAO,GAAG,KAAK;wGAHb,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtGpB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yjCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAfS,YAAY,EAAA,CAAA,EAAA,CAAA;;4FAuGX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA1G/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cACX,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,yjCAAA,CAAA,EAAA;8BAyFQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,OAAO,EAAA,CAAA;sBAAf;;;MCrDU,qBAAqB,CAAA;IACvB,IAAI,GAAG,EAAE;IACT,QAAQ,GAAG,KAAK;wGAFd,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApDtB;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+uBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EATS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAqDX,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAxDjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;AAQT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+uBAAA,CAAA,EAAA;8BA6CQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;;;MC2CU,iBAAiB,CAAA;IACnB,KAAK,GAAwE,SAAS;IACtF,QAAQ,GAAG,KAAK;AACf,IAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;wGAHjC,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjGlB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kmCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAjBS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAkGX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBArG7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cACT,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,kmCAAA,CAAA,EAAA;8BAkFQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,OAAO,EAAA,CAAA;sBAAhB;;;MCmLU,0BAA0B,CAAA;IAC5B,IAAI,GAA4C,QAAQ;IACxD,KAAK,GAAsD,SAAS;IACpE,UAAU,GAAG,SAAS;IAE/B,QAAQ,GAAA;;IAER;wGAPW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvR3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+zFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhDS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAwRX,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA3RtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+zFAAA,CAAA,EAAA;8BAyOQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,UAAU,EAAA,CAAA;sBAAlB;;;MCyLU,YAAY,CAAA;IACvB,SAAS,GAAG,EAAE;IACd,cAAc,GAAG,EAAE;IACnB,SAAS,GAAG,KAAK;IACjB,aAAa,GAAG,OAAO;IACvB,OAAO,GAAqB,EAAE;IAC9B,iBAAiB,GAAsD,SAAS;IAChF,kBAAkB,GAAG,SAAS;AAE9B,IAAA,aAAa,GAAG;AACd,QAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;AAC/B,QAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI;KAC7B;AAED,IAAA,SAAS,GAAG;AACV,QAAA;AACE,YAAA,EAAE,EAAE,CAAC;AACL,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,CAAC;AACL,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,CAAC;AACL,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,CAAC;AACL,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,OAAO,EAAE;AACV,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,CAAC;AACL,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,OAAO,EAAE;AACV;KACF;AAED,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;AAEA,IAAA,qBAAqB,CAAC,KAAa,EAAA;AACjC,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC5C,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IAC5B;AAEA,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACtC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO;YACjC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC,KAAK,CAAC;QAClD;IACF;AAEA,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;AACzC,QAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;AAEzC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5C,YAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC;YAC1D;QACF;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QAClC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;AAExC,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE;YACpB,KAAK,CAAC,iBAAiB,CAAC;YACxB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE;YACvB,KAAK,CAAC,kBAAkB,CAAC;YACzB;QACF;;AAGA,QAAA,IAAI,CAAC,iBAAiB,GAAG,WAAW;AACpC,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;AAE7C,QAAA,IAAI;;AAEF,YAAA,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;;AAGvD,YAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU;AACnC,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;AAEnC,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC;AAClE,YAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC;;AAG1C,YAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU;AACnC,YAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO;AAEjC,YAAA,IAAI,CAAC,cAAc,GAAG,OAAO;YAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,cAAc,CAAC;AAE1D,YAAA,MAAM,WAAW,GAAmB;AAClC,gBAAA,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;AACd,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,WAAW,EAAE,OAAO;gBACpB,SAAS,EAAE,IAAI,IAAI;aACpB;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YAEjC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE;AAC5B,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1C;;YAGA,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;YACrC,CAAC,EAAE,IAAI,CAAC;QAEV;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;YAC7B,KAAK,CAAC,eAAe,CAAC;;AAGtB,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;QACrC;gBAAU;AACR,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACjC;IACF;AAEA,IAAA,MAAM,aAAa,CAAC,IAAY,EAAE,MAAc,EAAA;AAC9C,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,UAAU,CAAC,MAAK;gBACd,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;gBAExE,IAAI,OAAO,GAAG,EAAE;gBAChB,MAAM,KAAK,GAAG,MAAM,KAAK,OAAO,GAAG,GAAG,GAAG,MAAM,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG;AACxE,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AAErE,gBAAA,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;AACzB,oBAAA,OAAO,GAAG,CAAA,QAAA,EAAW,IAAI,CAAA,CAAE;gBAC7B;qBAAO;AACL,oBAAA,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;oBACnE,OAAO,GAAG,iBAAiB;oBAC3B,SAAS,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,KAAa,KAAI;wBACjD,OAAO,IAAI,CAAA,EAAG,KAAK,GAAG,CAAC,CAAA,EAAA,EAAK,KAAK,CAAC,IAAI,EAAE,CAAA,EAAA,CAAI;AAC9C,oBAAA,CAAC,CAAC;oBAEF,MAAM,iBAAiB,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;oBACzD,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/C,oBAAA,OAAO,IAAI,CAAA,KAAA,EAAQ,WAAW,CAAA,CAAA,CAAG;gBACnC;gBAEA,OAAO,CAAC,OAAO,CAAC;YAClB,CAAC,EAAE,IAAI,CAAC;AACV,QAAA,CAAC,CAAC;IACJ;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;IAC1B;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,OAAO,CAAC,eAAe,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;QACnB;IACF;AAEA,IAAA,eAAe,CAAC,IAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY;AAClC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW;IACxC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAK;gBAC3D,KAAK,CAAC,SAAS,CAAC;AAClB,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;gBACZ,KAAK,CAAC,YAAY,CAAC;AACrB,YAAA,CAAC,CAAC;QACJ;IACF;AAEA,IAAA,UAAU,CAAC,SAAe,EAAA;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;QACtB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QAE3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QAExC,IAAI,OAAO,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;QAC5B,IAAI,OAAO,GAAG,EAAE;YAAE,OAAO,CAAA,EAAG,OAAO,CAAA,GAAA,CAAK;QACxC,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO,CAAA,EAAG,KAAK,CAAA,GAAA,CAAK;QACpC,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI;AAEhC,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;IACzC;wGAlNW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlbb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4JT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,64FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1KC,YAAY,gQACZ,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,oBAAoB,qHACpB,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAErB,oBAAoB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,KAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,mBAAmB,6FACnB,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAobjB,YAAY,EAAA,UAAA,EAAA,CAAA;kBApcxB,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,oBAAoB;wBACpB,kBAAkB;wBAClB,sBAAsB;wBACtB,oBAAoB;wBACpB,oBAAoB;wBACpB,qBAAqB;wBACrB,kBAAkB;wBAClB,oBAAoB;wBACpB,mBAAmB;wBACnB,qBAAqB;wBACrB,iBAAiB;wBACjB;qBACD,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4JT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,64FAAA,CAAA,EAAA;;;ACpMH;;ACAA;;AAEG;;;;"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="ai-text-summary-ng" />
5
+ export * from './public-api';
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "ai-text-summary-ng",
3
+ "version": "1.0.0",
4
+ "description": "AI 文本智能总结助手 - 基于 Angular + fmode-ng UI 组件库",
5
+ "private": false,
6
+ "keywords": [
7
+ "angular",
8
+ "ai",
9
+ "text-summary",
10
+ "fmode-ng",
11
+ "digital-human"
12
+ ],
13
+ "author": "AI Assistant",
14
+ "license": "MIT",
15
+ "dependencies": {
16
+ "@angular/animations": "^17.0.0",
17
+ "@angular/common": "^17.0.0",
18
+ "@angular/compiler": "^17.0.0",
19
+ "@angular/core": "^17.0.0",
20
+ "@angular/forms": "^17.0.0",
21
+ "@angular/platform-browser": "^17.0.0",
22
+ "@angular/platform-browser-dynamic": "^17.0.0",
23
+ "@angular/router": "^17.0.0",
24
+ "rxjs": "~7.8.0",
25
+ "tslib": "^2.3.0",
26
+ "zone.js": "~0.14.3"
27
+ },
28
+ "module": "fesm2022/ai-text-summary-ng.mjs",
29
+ "typings": "index.d.ts",
30
+ "exports": {
31
+ "./package.json": {
32
+ "default": "./package.json"
33
+ },
34
+ ".": {
35
+ "types": "./index.d.ts",
36
+ "esm2022": "./esm2022/ai-text-summary-ng.mjs",
37
+ "esm": "./esm2022/ai-text-summary-ng.mjs",
38
+ "default": "./fesm2022/ai-text-summary-ng.mjs"
39
+ }
40
+ },
41
+ "sideEffects": false
42
+ }
@@ -0,0 +1,13 @@
1
+ export * from './app/app.component';
2
+ export * from './app/components/fmode-avatar/fmode-avatar.component';
3
+ export * from './app/components/fmode-badge/fmode-badge.component';
4
+ export * from './app/components/fmode-button/fmode-button.component';
5
+ export * from './app/components/fmode-card/fmode-card.component';
6
+ export * from './app/components/fmode-divider/fmode-divider.component';
7
+ export * from './app/components/fmode-digital-human/fmode-digital-human.component';
8
+ export * from './app/components/fmode-header/fmode-header.component';
9
+ export * from './app/components/fmode-loading/fmode-loading.component';
10
+ export * from './app/components/fmode-list/fmode-list.component';
11
+ export * from './app/components/fmode-select/fmode-select.component';
12
+ export * from './app/components/fmode-tag/fmode-tag.component';
13
+ export * from './app/components/fmode-textarea/fmode-textarea.component';