aril 1.2.21 → 1.2.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/ui-business/enumPicker/src/enum-picker.component.mjs +21 -10
- package/esm2022/ui-business/trace-drawer/src/trace-drawer.component.mjs +9 -3
- package/fesm2022/aril-ui-business-enumPicker.mjs +21 -10
- package/fesm2022/aril-ui-business-enumPicker.mjs.map +1 -1
- package/fesm2022/aril-ui-business-trace-drawer.mjs +8 -2
- package/fesm2022/aril-ui-business-trace-drawer.mjs.map +1 -1
- package/package.json +215 -215
- package/ui-business/enumPicker/src/enum-picker.component.d.ts +1 -1
- package/ui-business/trace-drawer/src/trace-drawer.component.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aril-ui-business-enumPicker.mjs","sources":["../../projects/aril/ui-business/enumPicker/src/enum-picker.component.ts","../../projects/aril/ui-business/enumPicker/src/enum-picker.component.html","../../projects/aril/ui-business/enumPicker/aril-ui-business-enumPicker.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { Component, EventEmitter, Output, effect, input, signal } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\n\r\nimport { TranslocoModule, TranslocoService } from '@ngneat/transloco';\r\nimport { DxSelectBoxModule } from 'devextreme-angular/ui/select-box';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\nimport DataSource from 'devextreme/data/data_source';\r\nimport ArrayStore from 'devextreme/data/array_store';\r\n\r\nimport { API_CONFIGS } from 'aril/boot/config/api';\r\nimport { Apps } from 'aril/boot/config/apps';\r\nimport {\r\n\tBaseInputComponent,\r\n\tDXInputErrorMessagePipe,\r\n\tInputErrorMessagePipe,\r\n\tValueAccessorDirective\r\n} from 'aril/ui/lib';\r\n\r\nimport { GroupedSelectionItem, SelectBoxItem, SelectionGroupDTO, SelectionItem, SelectionRequestDTO } from './interface';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\n\r\n@Component({\r\n\tstandalone: true,\r\n\tselector: 'enum-picker[ngModel], enum-picker[formControl], enum-picker[formControlName]',\r\n\ttemplateUrl: './enum-picker.component.html',\r\n\timports: [ReactiveFormsModule, DxSelectBoxModule, DXInputErrorMessagePipe, TranslocoModule, MultiSelectModule, TooltipModule],\r\n\tproviders: [InputErrorMessagePipe],\r\n\thostDirectives: [ValueAccessorDirective]\r\n})\r\nexport class EnumPickerComponent extends BaseInputComponent {\r\n\tselectionItems = signal<SelectBoxItem[] | null>(null);\r\n\tselectBoxDataSource = signal<DataSource | null>(null);\r\n\tgroupedSelectionItems = signal<GroupedSelectionItem[] | null>(null);\r\n\tisGrouped = signal<boolean>(false);\r\n\tprivate originalSelectionItems: SelectionItem[] = [];\r\n\tprivate rawParentItems: SelectionItem[] = [];\r\n\tprivate rawGroups: { parentKey: string; items: SelectionItem[] }[] = [];\r\n\t/**\r\n\t * Single Select States\r\n\t */\r\n\r\n\titemKey = input('key');\r\n\titemText = input('text');\r\n\tgroupName = input('');\r\n\tparentSelectionKey = input(null);\r\n\tparentGroupName = input<string>('');\r\n\ttabindex = input<number>(0);\r\n\titems = input<SelectBoxItem[]>();\r\n\tisMultiple = input<boolean>(false);\r\n\t// Cross-validation RemoveItem action ile set edilir; verilen selectionKey'leri item listesinden filtreler.\r\n\texcludedKeys = input<string[]>([]);\r\n\tselectedItemText = '';\r\n\t/** * @description when grouped = true, option item structure { key:string, items:[] } */\r\n\tgrouped = input(false);\r\n\tshowClearButton = input<boolean>(true);\r\n\tplaceholder = input<string>('');\r\n\tsearchExpr = input<string | string[]>('');\r\n\tacceptCustomValue = input<boolean>(false);\r\n\ttextClampCharacters = input<number>(40);\r\n\r\n\t/**\r\n\t * Virtual Scroll States\r\n\t */\r\n\tuseVirtualScroll = input<boolean>(false);\r\n\tvirtualScrollItemSize = input<number>(30);\r\n\tscrollHeight = input<string>('300px');\r\n\r\n\t/**\r\n\t * Multi Select States\r\n\t */\r\n\r\n\tselectedItemsLabel = input<string>('{0} değer seçildi'); // default value -> ({0} items selected\r\n\tappendTo = input<string>('body');\r\n\tstyle = input<object>({});\r\n\tstyleClass = input<string>('');\r\n\ttooltip = input<string>('');\r\n\ttooltipPosition = input<any>('top');\r\n\r\n\t@Output() onSelectionChanged = new EventEmitter<SelectBoxItem>();\r\n\r\n\tconstructor(\r\n\t\tprivate readonly http: HttpClient,\r\n\t\tpublic translocoService: TranslocoService\r\n\t) {\r\n\t\tsuper();\r\n\t\teffect(() => {\r\n\t\t\tconst psk = this.parentSelectionKey() as string[] | string | null;\r\n\t\t\tif (this.groupName() || psk) {\r\n\t\t\t\tif (this.isMultiple() && Array.isArray(psk) && psk.length >= 2) {\r\n\t\t\t\t\tthis.getGroupedSelectionItems(psk);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.getSelectionItems();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// excludedKeys değişince item listesini yeniden filtrele (cache korunur, refetch yok)\r\n\t\teffect(() => {\r\n\t\t\tthis.excludedKeys();\r\n\t\t\tif (this.rawGroups.length > 0) {\r\n\t\t\t\tthis.buildGroupedFromRaw();\r\n\t\t\t} else if (this.originalSelectionItems.length > 0) {\r\n\t\t\t\tthis.updateSelectionItemsText();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.translocoService.langChanges$.subscribe(() => {\r\n\t\t\tif (this.rawGroups.length > 0) {\r\n\t\t\t\tthis.buildGroupedFromRaw();\r\n\t\t\t} else if (this.selectionItems() && (this.selectionItems() as SelectBoxItem[])?.length > 0) {\r\n\t\t\t\tthis.updateSelectionItemsText();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetTitle(event?: any) {\r\n\t\tif (event && event[this.itemText()].length > 25) {\r\n\t\t\tthis.selectedItemText = event ? event[this.itemText()] : '';\r\n\t\t}\r\n\t\tthis.onSelectionChanged.emit(event);\r\n\t}\r\n\r\n\tasync getSelectionItems() {\r\n\t\tconst payload: Partial<SelectionRequestDTO> = {\r\n\t\t\tgroupName: this.groupName()\r\n\t\t};\r\n\r\n\t\tif (Array.isArray(this.parentSelectionKey())) {\r\n\t\t\tpayload.parentSelectionKeys = this.parentSelectionKey();\r\n\t\t} else {\r\n\t\t\tpayload.parentSelectionKey = this.parentSelectionKey();\r\n\t\t}\r\n\r\n\t\tconst hostApi = API_CONFIGS.getExternalAppEndpoint(Apps.MNG);\r\n\r\n\t\ttry {\r\n\t\t\tconst selectionGroup = await firstValueFrom(\r\n\t\t\t\tthis.http.post<SelectionGroupDTO>(hostApi + '/selection-group/load', payload)\r\n\t\t\t);\r\n\r\n\t\t\tthis.originalSelectionItems = selectionGroup?.selectionItems || [];\r\n\t\t} catch (error) {\r\n\t\t\tthis.originalSelectionItems = [];\r\n\t\t}\r\n\t\t// Flat moda dön (await sonrası — effect context dışı olduğu için signal yazımı güvenli)\r\n\t\tthis.rawGroups = [];\r\n\t\tthis.rawParentItems = [];\r\n\t\tthis.groupedSelectionItems.set(null);\r\n\t\tthis.isGrouped.set(false);\r\n\t\tthis.updateSelectionItemsText();\r\n\t}\r\n\r\n\t// Parent (multiple) ≥2 seçiliyken her parent için ayrı istek atılır (load-all batch)\r\n\t// ve child item'lar parent başına gruplanır. Grup başlığı parent'ın lokalize display'idir.\r\n\tasync getGroupedSelectionItems(parentKeys: string[]) {\r\n\t\tconst childGroupName = this.groupName();\r\n\t\tconst parentGroupName = this.parentGroupName();\r\n\t\tconst hasParentGroup = !!parentGroupName;\r\n\r\n\t\tconst requests: Partial<SelectionRequestDTO>[] = [];\r\n\t\tif (hasParentGroup) {\r\n\t\t\trequests.push({ groupName: parentGroupName });\r\n\t\t}\r\n\t\tparentKeys.forEach((key) => {\r\n\t\t\trequests.push({ groupName: childGroupName, parentSelectionKey: key });\r\n\t\t});\r\n\r\n\t\tconst hostApi = API_CONFIGS.getExternalAppEndpoint(Apps.MNG);\r\n\r\n\t\tlet groups: SelectionGroupDTO[] = [];\r\n\t\ttry {\r\n\t\t\tgroups =\r\n\t\t\t\t(await firstValueFrom(\r\n\t\t\t\t\tthis.http.post<SelectionGroupDTO[]>(hostApi + '/selection-group/load-all', requests)\r\n\t\t\t\t)) || [];\r\n\t\t} catch (error) {\r\n\t\t\tgroups = [];\r\n\t\t}\r\n\r\n\t\tthis.rawParentItems = hasParentGroup ? groups[0]?.selectionItems || [] : [];\r\n\t\tconst childGroups = hasParentGroup ? groups.slice(1) : groups;\r\n\t\tthis.rawGroups = parentKeys.map((parentKey, index) => ({\r\n\t\t\tparentKey,\r\n\t\t\titems: childGroups[index]?.selectionItems || []\r\n\t\t}));\r\n\r\n\t\tthis.buildGroupedFromRaw();\r\n\t}\r\n\r\n\tprivate buildGroupedFromRaw() {\r\n\t\tconst excluded = new Set(this.excludedKeys() || []);\r\n\t\tconst parentDisplayMap = new Map<string, string>();\r\n\t\tthis.rawParentItems.forEach((item: SelectionItem) => {\r\n\t\t\tparentDisplayMap.set(item.selectionKey, this.resolveDisplay(item));\r\n\t\t});\r\n\r\n\t\tconst built: GroupedSelectionItem[] = this.rawGroups.map((group) => ({\r\n\t\t\tlabel: parentDisplayMap.get(group.parentKey) ?? group.parentKey,\r\n\t\t\titems: group.items\r\n\t\t\t\t.filter((item: SelectionItem) => !excluded.has(item.selectionKey))\r\n\t\t\t\t.map((item: SelectionItem) => ({\r\n\t\t\t\t\tkey: item.selectionKey,\r\n\t\t\t\t\ttext: this.resolveDisplay(item)\r\n\t\t\t\t}))\r\n\t\t}));\r\n\r\n\t\tthis.selectionItems.set(null);\r\n\t\tthis.selectBoxDataSource.set(null);\r\n\t\tthis.groupedSelectionItems.set(built);\r\n\t\tthis.isGrouped.set(true);\r\n\t\tthis.filterCurrentValueBySelectionItems();\r\n\t}\r\n\r\n\tprivate resolveDisplay(item: SelectionItem): string {\r\n\t\tconst lang = this.translocoService.getActiveLang();\r\n\t\treturn item?.selectionMultiLanguageDisplays?.[lang] || item.selectionDisplay;\r\n\t}\r\n\r\n\tprivate getVisibleItems(): SelectBoxItem[] {\r\n\t\tif (this.isGrouped()) {\r\n\t\t\treturn (this.groupedSelectionItems() || []).flatMap((group) => group.items);\r\n\t\t}\r\n\t\treturn this.selectionItems() || [];\r\n\t}\r\n\r\n\tprivate updateSelectionItemsText() {\r\n\t\tif (!this.originalSelectionItems || this.originalSelectionItems.length === 0) {\r\n\t\t\tthis.selectionItems.set(null);\r\n\t\t\tthis.selectBoxDataSource.set(null);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.selectionItems.set(null);\r\n\r\n\t\tconst excluded = new Set(this.excludedKeys() || []);\r\n\t\tconst mappedItems = this.originalSelectionItems\r\n\t\t\t.filter((item: SelectionItem) => !excluded.has(item.selectionKey))\r\n\t\t\t.map((item: SelectionItem) => ({\r\n\t\t\t\tkey: item.selectionKey,\r\n\t\t\t\ttext: this.resolveDisplay(item),\r\n\t\t\t\tparentSelectionKey: item.parentSelectionKey\r\n\t\t\t}));\r\n\r\n\t\tthis.selectionItems.set(mappedItems);\r\n\t\tthis.rebuildSelectBoxDataSource(mappedItems);\r\n\t\tthis.filterCurrentValueBySelectionItems();\r\n\t}\r\n\r\n\t// Parent enum (multiple) değiştiğinde veya excludedKeys aktifken\r\n\t// form'daki geçersiz key'leri temizler (selectionItems zaten filtrelenmiş haliyle gelir).\r\n\tfilterCurrentValueBySelectionItems(): void {\r\n\t\tconst hasExcluded = (this.excludedKeys() || []).length > 0;\r\n\t\tif (!this.parentSelectionKey() && !hasExcluded) return;\r\n\t\tconst currentValue = this.ngControl.control?.value;\r\n\t\tconst validKeys = new Set(\r\n\t\t\tthis.getVisibleItems().map((item: any) => item[this.itemKey()])\r\n\t\t);\r\n\r\n\t\tif (this.isMultiple()) {\r\n\t\t\t// Child multi-select: geçersiz key'leri filtrele, geçerlileri bırak\r\n\t\t\tif (!Array.isArray(currentValue) || currentValue.length === 0) return;\r\n\t\t\tconst filtered = (currentValue as string[]).filter((key) => validKeys.has(key));\r\n\t\t\tif (filtered.length !== currentValue.length) {\r\n\t\t\t\tthis.ngControl.control?.setValue(filtered, { emitEvent: true });\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (!currentValue) return;\r\n\r\n\t\t\tif (!validKeys.has(currentValue)) {\r\n\t\t\t\tthis.ngControl.control?.reset(null, { emitEvent: true });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tonCustomItemCreating(event: any) {\r\n\t\tif (!event.text) {\r\n\t\t\tevent.customItem = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst newItem = {\r\n\t\t\t[this.itemKey()]: event.text,\r\n\t\t\t[this.itemText()]: event.text\r\n\t\t};\r\n\t\tconst currentItems = this.selectionItems() || [];\r\n\t\tconst updatedItems = [...currentItems, newItem];\r\n\t\tthis.selectionItems.set(updatedItems);\r\n\t\tthis.rebuildSelectBoxDataSource(updatedItems);\r\n\t\tevent.customItem = newItem;\r\n\t}\r\n\r\n\t\tprivate rebuildSelectBoxDataSource(items: SelectBoxItem[]): void {\r\n\t\tif (!this.useVirtualScroll()) {\r\n\t\t\tthis.selectBoxDataSource.set(null);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.selectBoxDataSource.set(\r\n\t\t\tnew DataSource({\r\n\t\t\t\tstore: new ArrayStore({\r\n\t\t\t\t\tdata: items,\r\n\t\t\t\t\tkey: this.itemKey()\r\n\t\t\t\t}),\r\n\t\t\t\tpaginate: true,\r\n\t\t\t\tpageSize: 50\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n}\r\n","@if (isMultiple()) {\r\n\t<p-multiSelect\r\n\t\t[options]=\"isGrouped() ? (groupedSelectionItems() || []) : (selectionItems() || items() || [])\"\r\n\t\t[group]=\"isGrouped()\"\r\n\t\t[optionValue]=\"itemKey()\"\r\n\t\t[optionLabel]=\"itemText()\"\r\n\t\t[defaultLabel]=\"placeholder()\"\r\n\t\t[selectedItemsLabel]=\"selectedItemsLabel()\"\r\n\t\t[style]=\"style()\"\r\n\t\t[styleClass]=\"styleClass()\"\r\n\t\t[tooltip]=\"tooltip()\"\r\n\t\t[tooltipPosition]=\"tooltipPosition()\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n\t\t[maxSelectedLabels]=\"2\"\r\n\t\t[appendTo]=\"appendTo()\"\r\n\t\t[virtualScroll]=\"useVirtualScroll()\"\r\n\t\t[virtualScrollItemSize]=\"virtualScrollItemSize()\"\r\n\t\t[scrollHeight]=\"scrollHeight()\"\r\n\t\t[filter]=\"true\"\r\n\t\t[panelStyle]=\"{ 'max-width': '400px', 'min-width': 'auto' }\">\r\n\t\t@if (isGrouped()) {\r\n\t\t\t<ng-template let-group pTemplate=\"group\">\r\n\t\t\t\t<span>{{ group.label }}</span>\r\n\t\t\t</ng-template>\r\n\t\t}\r\n\t\t<ng-template let-enum pTemplate=\"item\">\r\n\t\t\t<div [pTooltip]=\"enum[itemText()]?.length > textClampCharacters() ? enum[itemText()] : ''\">\r\n\t\t\t\t@if (enum[itemText()]?.length > textClampCharacters()) {\r\n\t\t\t\t\t{{ enum[itemText()].slice(0, textClampCharacters()) }}...\r\n\t\t\t\t} @else {\r\n\t\t\t\t\t{{ enum[itemText()] }}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</p-multiSelect>\r\n} @else {\r\n\t<dx-select-box\r\n [dataSource]=\"useVirtualScroll() ? selectBoxDataSource() : (selectionItems() || items() || [])\"\r\n\t\t[valueExpr]=\"itemKey()\"\r\n\t\t[displayExpr]=\"itemText()\"\r\n\t\t[searchEnabled]=\"true\"\r\n\t\t[searchExpr]=\"searchExpr()\"\r\n\t\t[tabIndex]=\"tabindex()\"\r\n\t\t[grouped]=\"grouped()\"\r\n\t\t[placeholder]=\"placeholder()\"\r\n\t\t[showClearButton]=\"showClearButton()\"\r\n\t\t[acceptCustomValue]=\"acceptCustomValue()\"\r\n\t\t(onCustomItemCreating)=\"onCustomItemCreating($event)\"\r\n\t\t[isValid]=\"ngControl?.control?.valid || ngControl?.control?.pristine || ngControl?.control?.disabled || false\"\r\n\t\t[validationError]=\"ngControl?.control?.errors | dxInputErrorMessage: ngControl?.control\"\r\n\t\tvalidationMessagePosition=\"top\"\r\n\t\t[noDataText]=\"translocoService.translate('messages.noDataToDisplay')\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged.emit($event.selectedItem);setTitle($event.selectedItem)\"\r\n [inputAttr]=\"{ 'title': selectedItemText }\">\r\n\t</dx-select-box>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aril-ui-business-enumPicker.mjs","sources":["../../projects/aril/ui-business/enumPicker/src/enum-picker.component.ts","../../projects/aril/ui-business/enumPicker/src/enum-picker.component.html","../../projects/aril/ui-business/enumPicker/aril-ui-business-enumPicker.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { Component, EventEmitter, Output, effect, input, signal } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { MultiSelectModule } from 'primeng/multiselect';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\n\r\nimport { TranslocoModule, TranslocoService } from '@ngneat/transloco';\r\nimport { DxSelectBoxModule } from 'devextreme-angular/ui/select-box';\r\nimport ArrayStore from 'devextreme/data/array_store';\r\nimport DataSource from 'devextreme/data/data_source';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\nimport { API_CONFIGS } from 'aril/boot/config/api';\r\nimport { Apps } from 'aril/boot/config/apps';\r\nimport {\r\n\tBaseInputComponent,\r\n\tDXInputErrorMessagePipe,\r\n\tInputErrorMessagePipe,\r\n\tValueAccessorDirective\r\n} from 'aril/ui/lib';\r\n\r\nimport {\r\n\tGroupedSelectionItem,\r\n\tSelectBoxItem,\r\n\tSelectionGroupDTO,\r\n\tSelectionItem,\r\n\tSelectionRequestDTO\r\n} from './interface';\r\n\r\n@Component({\r\n\tstandalone: true,\r\n\tselector: 'enum-picker[ngModel], enum-picker[formControl], enum-picker[formControlName]',\r\n\ttemplateUrl: './enum-picker.component.html',\r\n\timports: [\r\n\t\tReactiveFormsModule,\r\n\t\tDxSelectBoxModule,\r\n\t\tDXInputErrorMessagePipe,\r\n\t\tTranslocoModule,\r\n\t\tMultiSelectModule,\r\n\t\tTooltipModule\r\n\t],\r\n\tproviders: [InputErrorMessagePipe],\r\n\thostDirectives: [ValueAccessorDirective]\r\n})\r\nexport class EnumPickerComponent extends BaseInputComponent {\r\n\tselectionItems = signal<SelectBoxItem[] | null>(null);\r\n\tselectBoxDataSource = signal<DataSource | null>(null);\r\n\tgroupedSelectionItems = signal<GroupedSelectionItem[] | null>(null);\r\n\tisGrouped = signal<boolean>(false);\r\n\tprivate originalSelectionItems: SelectionItem[] = [];\r\n\tprivate rawParentItems: SelectionItem[] = [];\r\n\tprivate rawGroups: { parentKey: string; items: SelectionItem[] }[] = [];\r\n\t/**\r\n\t * Single Select States\r\n\t */\r\n\r\n\titemKey = input('key');\r\n\titemText = input('text');\r\n\tgroupName = input('');\r\n\tparentSelectionKey = input<string | null>(null);\r\n\tparentGroupName = input<string>('');\r\n\ttabindex = input<number>(0);\r\n\titems = input<SelectBoxItem[]>();\r\n\tisMultiple = input<boolean>(false);\r\n\t// Cross-validation RemoveItem action ile set edilir; verilen selectionKey'leri item listesinden filtreler.\r\n\texcludedKeys = input<string[]>([]);\r\n\tselectedItemText = '';\r\n\t/** * @description when grouped = true, option item structure { key:string, items:[] } */\r\n\tgrouped = input(false);\r\n\tshowClearButton = input<boolean>(true);\r\n\tplaceholder = input<string>('');\r\n\tsearchExpr = input<string | string[]>('');\r\n\tacceptCustomValue = input<boolean>(false);\r\n\ttextClampCharacters = input<number>(40);\r\n\r\n\t/**\r\n\t * Virtual Scroll States\r\n\t */\r\n\tuseVirtualScroll = input<boolean>(false);\r\n\tvirtualScrollItemSize = input<number>(30);\r\n\tscrollHeight = input<string>('300px');\r\n\r\n\t/**\r\n\t * Multi Select States\r\n\t */\r\n\r\n\tselectedItemsLabel = input<string>('{0} değer seçildi'); // default value -> ({0} items selected\r\n\tappendTo = input<string>('body');\r\n\tstyle = input<object>({});\r\n\tstyleClass = input<string>('');\r\n\ttooltip = input<string>('');\r\n\ttooltipPosition = input<any>('top');\r\n\r\n\t@Output() onSelectionChanged = new EventEmitter<SelectBoxItem>();\r\n\r\n\tconstructor(\r\n\t\tprivate readonly http: HttpClient,\r\n\t\tpublic translocoService: TranslocoService\r\n\t) {\r\n\t\tsuper();\r\n\t\teffect(() => {\r\n\t\t\tconst psk = this.parentSelectionKey() as string[] | string | null;\r\n\t\t\tif (this.groupName() || psk) {\r\n\t\t\t\tif (this.isMultiple() && Array.isArray(psk) && psk.length >= 2) {\r\n\t\t\t\t\tthis.getGroupedSelectionItems(psk);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.getSelectionItems();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// excludedKeys değişince item listesini yeniden filtrele (cache korunur, refetch yok)\r\n\t\t// allowSignalWrites: excludedKeys runtime'da (item'lar yüklendikten sonra) değişince\r\n\t\t// buildGroupedFromRaw/updateSelectionItemsText senkron signal yazar; bu effect içinde izinli olmalı (NG0600).\r\n\t\teffect(\r\n\t\t\t() => {\r\n\t\t\t\tthis.excludedKeys();\r\n\t\t\t\tif (this.rawGroups.length > 0) {\r\n\t\t\t\t\tthis.buildGroupedFromRaw();\r\n\t\t\t\t} else if (this.originalSelectionItems.length > 0) {\r\n\t\t\t\t\tthis.updateSelectionItemsText();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{ allowSignalWrites: true }\r\n\t\t);\r\n\r\n\t\tthis.translocoService.langChanges$.subscribe(() => {\r\n\t\t\tif (this.rawGroups.length > 0) {\r\n\t\t\t\tthis.buildGroupedFromRaw();\r\n\t\t\t} else if (this.selectionItems() && (this.selectionItems() as SelectBoxItem[])?.length > 0) {\r\n\t\t\t\tthis.updateSelectionItemsText();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetTitle(event?: any) {\r\n\t\tif (event && event[this.itemText()].length > 25) {\r\n\t\t\tthis.selectedItemText = event ? event[this.itemText()] : '';\r\n\t\t}\r\n\t\tthis.onSelectionChanged.emit(event);\r\n\t}\r\n\r\n\tasync getSelectionItems() {\r\n\t\tconst payload: Partial<SelectionRequestDTO> = {\r\n\t\t\tgroupName: this.groupName()\r\n\t\t};\r\n\r\n\t\tconst psk = this.parentSelectionKey() as string | string[] | null;\r\n\t\tif (Array.isArray(psk)) {\r\n\t\t\tpayload.parentSelectionKeys = psk;\r\n\t\t} else {\r\n\t\t\tpayload.parentSelectionKey = psk;\r\n\t\t}\r\n\r\n\t\tconst hostApi = API_CONFIGS.getExternalAppEndpoint(Apps.MNG);\r\n\r\n\t\ttry {\r\n\t\t\tconst selectionGroup = await firstValueFrom(\r\n\t\t\t\tthis.http.post<SelectionGroupDTO>(hostApi + '/selection-group/load', payload)\r\n\t\t\t);\r\n\r\n\t\t\tthis.originalSelectionItems = selectionGroup?.selectionItems || [];\r\n\t\t} catch (error) {\r\n\t\t\tthis.originalSelectionItems = [];\r\n\t\t}\r\n\t\t// Flat moda dön (await sonrası — effect context dışı olduğu için signal yazımı güvenli)\r\n\t\tthis.rawGroups = [];\r\n\t\tthis.rawParentItems = [];\r\n\t\tthis.groupedSelectionItems.set(null);\r\n\t\tthis.isGrouped.set(false);\r\n\t\tthis.updateSelectionItemsText();\r\n\t}\r\n\r\n\t// Parent (multiple) ≥2 seçiliyken her parent için ayrı istek atılır (load-all batch)\r\n\t// ve child item'lar parent başına gruplanır. Grup başlığı parent'ın lokalize display'idir.\r\n\tasync getGroupedSelectionItems(parentKeys: string[]) {\r\n\t\tconst childGroupName = this.groupName();\r\n\t\tconst parentGroupName = this.parentGroupName();\r\n\t\tconst hasParentGroup = !!parentGroupName;\r\n\r\n\t\tconst requests: Partial<SelectionRequestDTO>[] = [];\r\n\t\tif (hasParentGroup) {\r\n\t\t\trequests.push({ groupName: parentGroupName });\r\n\t\t}\r\n\t\tparentKeys.forEach((key) => {\r\n\t\t\trequests.push({ groupName: childGroupName, parentSelectionKey: key });\r\n\t\t});\r\n\r\n\t\tconst hostApi = API_CONFIGS.getExternalAppEndpoint(Apps.MNG);\r\n\r\n\t\tlet groups: SelectionGroupDTO[] = [];\r\n\t\ttry {\r\n\t\t\tgroups =\r\n\t\t\t\t(await firstValueFrom(this.http.post<SelectionGroupDTO[]>(hostApi + '/selection-group/load-all', requests))) ||\r\n\t\t\t\t[];\r\n\t\t} catch (error) {\r\n\t\t\tgroups = [];\r\n\t\t}\r\n\r\n\t\tthis.rawParentItems = hasParentGroup ? groups[0]?.selectionItems || [] : [];\r\n\t\tconst childGroups = hasParentGroup ? groups.slice(1) : groups;\r\n\t\tthis.rawGroups = parentKeys.map((parentKey, index) => ({\r\n\t\t\tparentKey,\r\n\t\t\titems: childGroups[index]?.selectionItems || []\r\n\t\t}));\r\n\r\n\t\tthis.buildGroupedFromRaw();\r\n\t}\r\n\r\n\tprivate buildGroupedFromRaw() {\r\n\t\tconst excluded = new Set(this.excludedKeys() || []);\r\n\t\tconst parentDisplayMap = new Map<string, string>();\r\n\t\tthis.rawParentItems.forEach((item: SelectionItem) => {\r\n\t\t\tparentDisplayMap.set(item.selectionKey, this.resolveDisplay(item));\r\n\t\t});\r\n\r\n\t\tconst built: GroupedSelectionItem[] = this.rawGroups.map((group) => ({\r\n\t\t\tlabel: parentDisplayMap.get(group.parentKey) ?? group.parentKey,\r\n\t\t\titems: group.items\r\n\t\t\t\t.filter((item: SelectionItem) => !excluded.has(item.selectionKey))\r\n\t\t\t\t.map((item: SelectionItem) => ({\r\n\t\t\t\t\tkey: item.selectionKey,\r\n\t\t\t\t\ttext: this.resolveDisplay(item)\r\n\t\t\t\t}))\r\n\t\t}));\r\n\r\n\t\tthis.selectionItems.set(null);\r\n\t\tthis.selectBoxDataSource.set(null);\r\n\t\tthis.groupedSelectionItems.set(built);\r\n\t\tthis.isGrouped.set(true);\r\n\t\tthis.filterCurrentValueBySelectionItems();\r\n\t}\r\n\r\n\tprivate resolveDisplay(item: SelectionItem): string {\r\n\t\tconst lang = this.translocoService.getActiveLang();\r\n\t\treturn item?.selectionMultiLanguageDisplays?.[lang] || item.selectionDisplay;\r\n\t}\r\n\r\n\tprivate getVisibleItems(): SelectBoxItem[] {\r\n\t\tif (this.isGrouped()) {\r\n\t\t\treturn (this.groupedSelectionItems() || []).flatMap((group) => group.items);\r\n\t\t}\r\n\t\treturn this.selectionItems() || [];\r\n\t}\r\n\r\n\tprivate updateSelectionItemsText() {\r\n\t\tif (!this.originalSelectionItems || this.originalSelectionItems.length === 0) {\r\n\t\t\tthis.selectionItems.set(null);\r\n\t\t\tthis.selectBoxDataSource.set(null);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.selectionItems.set(null);\r\n\r\n\t\tconst excluded = new Set(this.excludedKeys() || []);\r\n\t\tconst mappedItems = this.originalSelectionItems\r\n\t\t\t.filter((item: SelectionItem) => !excluded.has(item.selectionKey))\r\n\t\t\t.map((item: SelectionItem) => ({\r\n\t\t\t\tkey: item.selectionKey,\r\n\t\t\t\ttext: this.resolveDisplay(item),\r\n\t\t\t\tparentSelectionKey: item.parentSelectionKey\r\n\t\t\t}));\r\n\r\n\t\tthis.selectionItems.set(mappedItems);\r\n\t\tthis.rebuildSelectBoxDataSource(mappedItems);\r\n\t\tthis.filterCurrentValueBySelectionItems();\r\n\t}\r\n\r\n\t// Parent enum (multiple) değiştiğinde veya excludedKeys aktifken\r\n\t// form'daki geçersiz key'leri temizler (selectionItems zaten filtrelenmiş haliyle gelir).\r\n\tfilterCurrentValueBySelectionItems(): void {\r\n\t\tconst hasExcluded = (this.excludedKeys() || []).length > 0;\r\n\t\tif (!this.parentSelectionKey() && !hasExcluded) return;\r\n\t\tconst currentValue = this.ngControl.control?.value;\r\n\t\tconst validKeys = new Set(this.getVisibleItems().map((item: any) => item[this.itemKey()]));\r\n\r\n\t\tif (this.isMultiple()) {\r\n\t\t\t// Child multi-select: geçersiz key'leri filtrele, geçerlileri bırak\r\n\t\t\tif (!Array.isArray(currentValue) || currentValue.length === 0) return;\r\n\t\t\tconst filtered = (currentValue as string[]).filter((key) => validKeys.has(key));\r\n\t\t\tif (filtered.length !== currentValue.length) {\r\n\t\t\t\tthis.ngControl.control?.setValue(filtered, { emitEvent: true });\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (!currentValue) return;\r\n\r\n\t\t\tif (!validKeys.has(currentValue)) {\r\n\t\t\t\tthis.ngControl.control?.reset(null, { emitEvent: true });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tonCustomItemCreating(event: any) {\r\n\t\tif (!event.text) {\r\n\t\t\tevent.customItem = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst newItem = {\r\n\t\t\t[this.itemKey()]: event.text,\r\n\t\t\t[this.itemText()]: event.text\r\n\t\t};\r\n\t\tconst currentItems = this.selectionItems() || [];\r\n\t\tconst updatedItems = [...currentItems, newItem];\r\n\t\tthis.selectionItems.set(updatedItems);\r\n\t\tthis.rebuildSelectBoxDataSource(updatedItems);\r\n\t\tevent.customItem = newItem;\r\n\t}\r\n\r\n\tprivate rebuildSelectBoxDataSource(items: SelectBoxItem[]): void {\r\n\t\tif (!this.useVirtualScroll()) {\r\n\t\t\tthis.selectBoxDataSource.set(null);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.selectBoxDataSource.set(\r\n\t\t\tnew DataSource({\r\n\t\t\t\tstore: new ArrayStore({\r\n\t\t\t\t\tdata: items,\r\n\t\t\t\t\tkey: this.itemKey()\r\n\t\t\t\t}),\r\n\t\t\t\tpaginate: true,\r\n\t\t\t\tpageSize: 50\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n}\r\n","@if (isMultiple()) {\r\n\t<p-multiSelect\r\n\t\t[options]=\"isGrouped() ? (groupedSelectionItems() || []) : (selectionItems() || items() || [])\"\r\n\t\t[group]=\"isGrouped()\"\r\n\t\t[optionValue]=\"itemKey()\"\r\n\t\t[optionLabel]=\"itemText()\"\r\n\t\t[defaultLabel]=\"placeholder()\"\r\n\t\t[selectedItemsLabel]=\"selectedItemsLabel()\"\r\n\t\t[style]=\"style()\"\r\n\t\t[styleClass]=\"styleClass()\"\r\n\t\t[tooltip]=\"tooltip()\"\r\n\t\t[tooltipPosition]=\"tooltipPosition()\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n\t\t[maxSelectedLabels]=\"2\"\r\n\t\t[appendTo]=\"appendTo()\"\r\n\t\t[virtualScroll]=\"useVirtualScroll()\"\r\n\t\t[virtualScrollItemSize]=\"virtualScrollItemSize()\"\r\n\t\t[scrollHeight]=\"scrollHeight()\"\r\n\t\t[filter]=\"true\"\r\n\t\t[panelStyle]=\"{ 'max-width': '400px', 'min-width': 'auto' }\">\r\n\t\t@if (isGrouped()) {\r\n\t\t\t<ng-template let-group pTemplate=\"group\">\r\n\t\t\t\t<span>{{ group.label }}</span>\r\n\t\t\t</ng-template>\r\n\t\t}\r\n\t\t<ng-template let-enum pTemplate=\"item\">\r\n\t\t\t<div [pTooltip]=\"enum[itemText()]?.length > textClampCharacters() ? enum[itemText()] : ''\">\r\n\t\t\t\t@if (enum[itemText()]?.length > textClampCharacters()) {\r\n\t\t\t\t\t{{ enum[itemText()].slice(0, textClampCharacters()) }}...\r\n\t\t\t\t} @else {\r\n\t\t\t\t\t{{ enum[itemText()] }}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</p-multiSelect>\r\n} @else {\r\n\t<dx-select-box\r\n [dataSource]=\"useVirtualScroll() ? selectBoxDataSource() : (selectionItems() || items() || [])\"\r\n\t\t[valueExpr]=\"itemKey()\"\r\n\t\t[displayExpr]=\"itemText()\"\r\n\t\t[searchEnabled]=\"true\"\r\n\t\t[searchExpr]=\"searchExpr()\"\r\n\t\t[tabIndex]=\"tabindex()\"\r\n\t\t[grouped]=\"grouped()\"\r\n\t\t[placeholder]=\"placeholder()\"\r\n\t\t[showClearButton]=\"showClearButton()\"\r\n\t\t[acceptCustomValue]=\"acceptCustomValue()\"\r\n\t\t(onCustomItemCreating)=\"onCustomItemCreating($event)\"\r\n\t\t[isValid]=\"ngControl?.control?.valid || ngControl?.control?.pristine || ngControl?.control?.disabled || false\"\r\n\t\t[validationError]=\"ngControl?.control?.errors | dxInputErrorMessage: ngControl?.control\"\r\n\t\tvalidationMessagePosition=\"top\"\r\n\t\t[noDataText]=\"translocoService.translate('messages.noDataToDisplay')\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged.emit($event.selectedItem);setTitle($event.selectedItem)\"\r\n [inputAttr]=\"{ 'title': selectedItemText }\">\r\n\t</dx-select-box>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA6CM,MAAO,mBAAoB,SAAQ,kBAAkB,CAAA;IAmD1D,WAAA,CACkB,IAAgB,EAC1B,gBAAkC,EAAA;AAEzC,QAAA,KAAK,EAAE;QAHU,IAAA,CAAA,IAAI,GAAJ,IAAI;QACd,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;AApDxB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAyB,IAAI,CAAC;AACrD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAoB,IAAI,CAAC;AACrD,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAgC,IAAI,CAAC;AACnE,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAU,KAAK,CAAC;QAC1B,IAAA,CAAA,sBAAsB,GAAoB,EAAE;QAC5C,IAAA,CAAA,cAAc,GAAoB,EAAE;QACpC,IAAA,CAAA,SAAS,GAAoD,EAAE;AACvE;;AAEG;AAEH,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;AACtB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;AACxB,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC;AACrB,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAgB,IAAI,CAAC;AAC/C,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAS,EAAE,CAAC;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,CAAC,CAAC;QAC3B,IAAA,CAAA,KAAK,GAAG,KAAK,EAAmB;AAChC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,KAAK,CAAC;;AAElC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAW,EAAE,CAAC;QAClC,IAAA,CAAA,gBAAgB,GAAG,EAAE;;AAErB,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;AACtB,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAU,IAAI,CAAC;AACtC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAoB,EAAE,CAAC;AACzC,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAU,KAAK,CAAC;AACzC,QAAA,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAS,EAAE,CAAC;AAEvC;;AAEG;AACH,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC;AACxC,QAAA,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAS,EAAE,CAAC;AACzC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,OAAO,CAAC;AAErC;;AAEG;AAEH,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAS,oBAAoB,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,MAAM,CAAC;AAChC,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE,CAAC;AACzB,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,EAAE,CAAC;AAC9B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAS,EAAE,CAAC;AAC3B,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAM,KAAK,CAAC;AAEzB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAiB;QAO/D,MAAM,CAAC,MAAK;AACX,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAA8B;AACjE,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE;AAC5B,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE;AAC/D,oBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;gBACnC;qBAAO;oBACN,IAAI,CAAC,iBAAiB,EAAE;gBACzB;YACD;AACD,QAAA,CAAC,CAAC;;;;QAKF,MAAM,CACL,MAAK;YACJ,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,IAAI,CAAC,mBAAmB,EAAE;YAC3B;iBAAO,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClD,IAAI,CAAC,wBAAwB,EAAE;YAChC;AACD,QAAA,CAAC,EACD,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC3B;QAED,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;YACjD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,IAAI,CAAC,mBAAmB,EAAE;YAC3B;AAAO,iBAAA,IAAI,IAAI,CAAC,cAAc,EAAE,IAAK,IAAI,CAAC,cAAc,EAAsB,EAAE,MAAM,GAAG,CAAC,EAAE;gBAC3F,IAAI,CAAC,wBAAwB,EAAE;YAChC;AACD,QAAA,CAAC,CAAC;IACH;AAEA,IAAA,QAAQ,CAAC,KAAW,EAAA;AACnB,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE;AAChD,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE;QAC5D;AACA,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;AAEA,IAAA,MAAM,iBAAiB,GAAA;AACtB,QAAA,MAAM,OAAO,GAAiC;AAC7C,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS;SACzB;AAED,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAA8B;AACjE,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACvB,YAAA,OAAO,CAAC,mBAAmB,GAAG,GAAG;QAClC;aAAO;AACN,YAAA,OAAO,CAAC,kBAAkB,GAAG,GAAG;QACjC;QAEA,MAAM,OAAO,GAAG,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;AAE5D,QAAA,IAAI;AACH,YAAA,MAAM,cAAc,GAAG,MAAM,cAAc,CAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAoB,OAAO,GAAG,uBAAuB,EAAE,OAAO,CAAC,CAC7E;YAED,IAAI,CAAC,sBAAsB,GAAG,cAAc,EAAE,cAAc,IAAI,EAAE;QACnE;QAAE,OAAO,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;QACjC;;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,wBAAwB,EAAE;IAChC;;;IAIA,MAAM,wBAAwB,CAAC,UAAoB,EAAA;AAClD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE;AACvC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,QAAA,MAAM,cAAc,GAAG,CAAC,CAAC,eAAe;QAExC,MAAM,QAAQ,GAAmC,EAAE;QACnD,IAAI,cAAc,EAAE;YACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;QAC9C;AACA,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC1B,YAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC;AACtE,QAAA,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;QAE5D,IAAI,MAAM,GAAwB,EAAE;AACpC,QAAA,IAAI;YACH,MAAM;AACL,gBAAA,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAsB,OAAO,GAAG,2BAA2B,EAAE,QAAQ,CAAC,CAAC;AAC3G,oBAAA,EAAE;QACJ;QAAE,OAAO,KAAK,EAAE;YACf,MAAM,GAAG,EAAE;QACZ;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,IAAI,EAAE,GAAG,EAAE;AAC3E,QAAA,MAAM,WAAW,GAAG,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM;AAC7D,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,MAAM;YACtD,SAAS;YACT,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,cAAc,IAAI;AAC7C,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,EAAE;IAC3B;IAEQ,mBAAmB,GAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;AACnD,QAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB;QAClD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAmB,KAAI;AACnD,YAAA,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACnE,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,KAAK,GAA2B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AACpE,YAAA,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS;YAC/D,KAAK,EAAE,KAAK,CAAC;AACX,iBAAA,MAAM,CAAC,CAAC,IAAmB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;AAChE,iBAAA,GAAG,CAAC,CAAC,IAAmB,MAAM;gBAC9B,GAAG,EAAE,IAAI,CAAC,YAAY;AACtB,gBAAA,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAC9B,aAAA,CAAC;AACH,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,kCAAkC,EAAE;IAC1C;AAEQ,IAAA,cAAc,CAAC,IAAmB,EAAA;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE;QAClD,OAAO,IAAI,EAAE,8BAA8B,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB;IAC7E;IAEQ,eAAe,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACrB,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;QAC5E;AACA,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE;IACnC;IAEQ,wBAAwB,GAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7E,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;YAClC;QACD;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAE7B,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;AACnD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC;AACvB,aAAA,MAAM,CAAC,CAAC,IAAmB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;AAChE,aAAA,GAAG,CAAC,CAAC,IAAmB,MAAM;YAC9B,GAAG,EAAE,IAAI,CAAC,YAAY;AACtB,YAAA,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAC/B,kBAAkB,EAAE,IAAI,CAAC;AACzB,SAAA,CAAC,CAAC;AAEJ,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC;AACpC,QAAA,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC;QAC5C,IAAI,CAAC,kCAAkC,EAAE;IAC1C;;;IAIA,kCAAkC,GAAA;AACjC,QAAA,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,WAAW;YAAE;QAChD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK;QAClD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAE1F,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;;AAEtB,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;gBAAE;AAC/D,YAAA,MAAM,QAAQ,GAAI,YAAyB,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/E,IAAI,QAAQ,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE;AAC5C,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAChE;QACD;aAAO;AACN,YAAA,IAAI,CAAC,YAAY;gBAAE;YAEnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YACzD;QACD;IACD;AAEA,IAAA,oBAAoB,CAAC,KAAU,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AAChB,YAAA,KAAK,CAAC,UAAU,GAAG,IAAI;YACvB;QACD;AACA,QAAA,MAAM,OAAO,GAAG;YACf,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI;YAC5B,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC;SACzB;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE;QAChD,MAAM,YAAY,GAAG,CAAC,GAAG,YAAY,EAAE,OAAO,CAAC;AAC/C,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC;AACrC,QAAA,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;AAC7C,QAAA,KAAK,CAAC,UAAU,GAAG,OAAO;IAC3B;AAEQ,IAAA,0BAA0B,CAAC,KAAsB,EAAA;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;YAClC;QACD;AACA,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAC3B,IAAI,UAAU,CAAC;YACd,KAAK,EAAE,IAAI,UAAU,CAAC;AACrB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,GAAG,EAAE,IAAI,CAAC,OAAO;aACjB,CAAC;AACF,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE;AACV,SAAA,CAAC,CACF;IACF;+GAvRY,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,u+GAHpB,CAAC,qBAAqB,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1CnC,0lFA2DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxBE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,iBAAiB,4qFACjB,uBAAuB,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACvB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,iBAAiB,27CACjB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKF,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAf/B,SAAS;iCACG,IAAI,EAAA,QAAA,EACN,8EAA8E,EAAA,OAAA,EAE/E;wBACR,mBAAmB;wBACnB,iBAAiB;wBACjB,uBAAuB;wBACvB,eAAe;wBACf,iBAAiB;wBACjB;AACA,qBAAA,EAAA,SAAA,EACU,CAAC,qBAAqB,CAAC,EAAA,cAAA,EAClB,CAAC,sBAAsB,CAAC,EAAA,QAAA,EAAA,0lFAAA,EAAA;8GAmD9B,kBAAkB,EAAA,CAAA;sBAA3B;;;AE9FF;;AAEG;;;;"}
|
|
@@ -183,6 +183,12 @@ class TraceDrawerComponent {
|
|
|
183
183
|
if (id)
|
|
184
184
|
this.fetch(id);
|
|
185
185
|
}
|
|
186
|
+
refresh() {
|
|
187
|
+
const id = this.traceId();
|
|
188
|
+
if (!id || this.loading())
|
|
189
|
+
return;
|
|
190
|
+
this.fetch(id);
|
|
191
|
+
}
|
|
186
192
|
shareLink() {
|
|
187
193
|
const id = this.traceId();
|
|
188
194
|
if (!id)
|
|
@@ -323,11 +329,11 @@ class TraceDrawerComponent {
|
|
|
323
329
|
}
|
|
324
330
|
}
|
|
325
331
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraceDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
326
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TraceDrawerComponent, isStandalone: true, selector: "aril-trace-drawer", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, traceId: { classPropertyName: "traceId", publicName: "traceId", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, startTime: { classPropertyName: "startTime", publicName: "startTime", isSignal: true, isRequired: false, transformFunction: null }, endTime: { classPropertyName: "endTime", publicName: "endTime", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n\t<p-sidebar\r\n\t\t[visible]=\"visible()\"\r\n\t\t(visibleChange)=\"onVisibleChange($event)\"\r\n\t\t[position]=\"position()\"\r\n\t\t[style]=\"{ width: width() }\"\r\n\t\t[modal]=\"modal()\"\r\n\t\t[dismissible]=\"true\"\r\n\t\t[showCloseIcon]=\"true\"\r\n\t\tstyleClass=\"aril-trace-drawer\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<div class=\"aril-trace-drawer__header\">\r\n\t\t\t\t<i class=\"pi pi-sitemap\"></i>\r\n\t\t\t\t<span class=\"aril-trace-drawer__title\">{{ t('traceDrawer.title') }}</span>\r\n\t\t\t\t<code class=\"aril-trace-drawer__chip\">{{ traceId() }}</code>\r\n\t\t\t\t<i\r\n\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\tclass=\"pi pi-share-alt aril-trace-drawer__share\"\r\n\t\t\t\t\t[pTooltip]=\"t('traceDrawer.shareLink')\"\r\n\t\t\t\t\ttooltipPosition=\"bottom\"\r\n\t\t\t\t\t(click)=\"shareLink()\"></i>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t<div class=\"aril-trace-drawer__body\">\r\n\t\t\t@if (loading()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<p-progressSpinner strokeWidth=\"3\" styleClass=\"w-3rem h-3rem\"></p-progressSpinner>\r\n\t\t\t\t\t<span>{{ t('traceDrawer.loading') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (errorMessage()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state aril-trace-drawer__state--error\">\r\n\t\t\t\t\t<i class=\"pi pi-exclamation-triangle\"></i>\r\n\t\t\t\t\t<p>{{ errorMessage() }}</p>\r\n\t\t\t\t\t<aril-button [label]=\"t('traceDrawer.retry')\" icon=\"REFRESH\" color=\"primary\" (clickEvent)=\"retry()\" />\r\n\t\t\t\t</div>\r\n\t\t\t} @else {\r\n\t\t\t\t@if (refValueEntries().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-tags\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.refValuesHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"refValueEntries().length.toString()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t<div class=\"ref-values\">\r\n\t\t\t\t\t\t\t@for (entry of refValueEntries(); track entry[0]) {\r\n\t\t\t\t\t\t\t\t<div class=\"ref-values__row\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"ref-values__key\">{{ entry[0] }}</span>\r\n\t\t\t\t\t\t\t\t\t<div class=\"ref-values__chips\">\r\n\t\t\t\t\t\t\t\t\t\t@for (val of entry[1]; track val) {\r\n\t\t\t\t\t\t\t\t\t\t\t<code class=\"ref-values__chip\">{{ val }}</code>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (apisixHits().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-globe\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.apisixHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"apisixHits().length + ' / ' + totalItem()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (hit of apisixHits(); track hit.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ statusSeverity(hit.status) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"hit.status.toString()\" [severity]=\"statusSeverity(hit.status)\" />\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ hit.requestMethod }}</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ hit.requestUri }}</span>\r\n\t\t\t\t\t\t\t\t\t<aril-badge\r\n\t\t\t\t\t\t\t\t\t\t[value]=\"formatDuration(hit.responseTime)\"\r\n\t\t\t\t\t\t\t\t\t\t[severity]=\"durationSeverity(hit.responseTime)\" />\r\n\t\t\t\t\t\t\t\t\t@if (hit.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(hit.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-code trace-row__action\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"t('traceDrawer.copyCurl')\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"left\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); $event.stopPropagation(); copyAsCurl(hit)\"></i>\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.routeName) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.route') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.routeName }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.sourceApp || hit.sourceModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.source') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.sourceApp }}{{ hit.sourceModule ? ' / ' + hit.sourceModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.targetApp || hit.targetModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.targetApp }}{{ hit.targetModule ? ' / ' + hit.targetModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.upstreamHost) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.upstream') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.upstreamHost }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.requestSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.requestSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.requestSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.responseSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.responseSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.responseSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t@if (hit.requestBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.requestBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.requestBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.requestBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (hit.responseBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.responseBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.responseBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.responseBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (hasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMore()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (appLogs().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-list\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.appLogsHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"appLogs().length + ' / ' + appLogsTotal()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (log of appLogs(); track log.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ levelSeverity(log.level) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t@if (log.level) {\r\n\t\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"log.level\" [severity]=\"levelSeverity(log.level)\" />\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.module) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ log.module }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ log.message }}</span>\r\n\t\t\t\t\t\t\t\t\t@if (log.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(log.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t@if (log.message) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__message\">{{ log.message }}</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.username || log.app) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.app) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.app }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.errorDetail) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\" open>\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogErrorDetail') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.errorDetail }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.referenceFields?.length) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogRefFields') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t@for (rf of log.referenceFields; track rf.field) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ rf.field }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ rf.value }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (appLogsHasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMoreAppLogs()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (!apisixHits().length && !appLogs().length && !refValueEntries().length) {\r\n\t\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t\t<i class=\"pi pi-inbox\"></i>\r\n\t\t\t\t\t\t<p>{{ t('traceDrawer.empty') }}</p>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</p-sidebar>\r\n</ng-container>\r\n", styles: [":host ::ng-deep .aril-trace-drawer{display:flex;flex-direction:column;height:100%}:host ::ng-deep .aril-trace-drawer .p-sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid var(--surface-border, #e5e7eb);flex:0 0 auto}:host ::ng-deep .aril-trace-drawer .p-sidebar-content{padding:0;flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden}.aril-trace-drawer__header{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}.aril-trace-drawer__header .pi-sitemap{font-size:1.25rem;color:var(--primary-color, #1890ff)}.aril-trace-drawer__title{font-weight:600;font-size:1.1rem}.aril-trace-drawer__chip{font-size:.875rem;padding:.2rem .55rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color-secondary, #6b7280);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.aril-trace-drawer__share{cursor:pointer;font-size:1rem;padding:.4rem;border-radius:4px;color:var(--primary-color, #1890ff);transition:background .15s ease}.aril-trace-drawer__share:hover{background:var(--surface-100, #f3f4f6)}.aril-trace-drawer__body{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:1.5rem;min-height:min-content}.aril-trace-drawer__state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;padding:3rem 1rem;color:var(--text-color-secondary, #6b7280);text-align:center;font-size:.95rem}.aril-trace-drawer__state .pi{font-size:2rem}.aril-trace-drawer__state--error .pi{color:var(--red-500, #ef4444)}.aril-trace-drawer__section-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .5rem;font-size:1rem;font-weight:600}.aril-trace-drawer__section-title .pi{color:var(--primary-color, #1890ff)}.trace-row{display:block;border:1px solid var(--surface-border, #e5e7eb);border-left:3px solid var(--surface-border, #e5e7eb);background:var(--surface-card, #ffffff);border-radius:4px;overflow:hidden;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}.trace-row+.trace-row{margin-top:.4rem}.trace-row:hover{border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 3px #0000000a}.trace-row[open]{background:var(--surface-50, #fafafa);border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 4px #0000000d}.trace-row--success{border-left-color:var(--green-500, #22c55e)}.trace-row--info{border-left-color:var(--blue-500, #3b82f6)}.trace-row--warning{border-left-color:var(--orange-500, #f97316)}.trace-row--danger{border-left-color:var(--red-500, #ef4444)}.trace-row--secondary{border-left-color:var(--gray-400, #9ca3af)}.trace-row__summary{cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none;display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem}.trace-row__summary::-webkit-details-marker{display:none}.trace-row__summary:hover{background:var(--surface-50, #fafafa)}.trace-row[open] .trace-row__summary:hover{background:var(--surface-100, #f3f4f6)}.trace-row__chevron{color:var(--text-color-secondary, #6b7280);font-size:.7rem;transition:transform .15s ease;flex-shrink:0}.trace-row[open] .trace-row__chevron{transform:rotate(90deg)}.trace-row__tag{font-weight:600;color:var(--primary-color, #1890ff);font-size:.8rem;white-space:nowrap;flex-shrink:0;letter-spacing:.02em}.trace-row__main{font-size:.85rem;color:var(--text-color, #111827);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.trace-row__time{font-size:.75rem;color:var(--text-color-secondary, #6b7280);font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0}.trace-row__action{cursor:pointer;padding:.25rem;border-radius:4px;color:var(--text-color-secondary, #6b7280);flex-shrink:0;transition:background .15s ease,color .15s ease}.trace-row__action:hover{background:var(--surface-100, #f3f4f6);color:var(--primary-color, #1890ff)}.trace-row__body{padding:.5rem .75rem .75rem;border-top:1px solid var(--surface-border, #e5e7eb);display:flex;flex-direction:column;gap:.5rem;background:var(--surface-0, #ffffff)}.trace-row__message{font-size:.85rem;color:var(--text-color, #111827);line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;background:var(--surface-100, #f3f4f6);border-radius:4px;padding:.5rem .65rem}.trace-row__meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.25rem .75rem;font-size:.8rem}.trace-row__meta>div{display:grid;grid-template-columns:max-content 1fr;column-gap:.4rem;align-items:baseline;min-width:0}.trace-row__meta .meta-label{color:var(--text-color-secondary, #6b7280);font-weight:500}.trace-row__meta .meta-label:after{content:\":\"}.trace-row__meta span:not(.meta-label){color:var(--text-color, #111827);word-break:break-word}.trace-row__sub{margin:0}.trace-row__sub summary{cursor:pointer;font-size:.8rem;color:var(--primary-color, #1890ff);padding:.15rem 0;-webkit-user-select:none;user-select:none}.trace-row__sub summary:hover{text-decoration:underline}.trace-row__sub pre{margin:.25rem 0 0;padding:.5rem .75rem;background:var(--surface-100, #f3f4f6);border-radius:4px;font-size:.78rem;line-height:1.45;max-height:320px;overflow:auto;white-space:pre-wrap;word-break:break-word}.aril-trace-drawer__load-more{display:flex;justify-content:center;margin-top:.5rem}.ref-values{display:flex;flex-direction:column;gap:.4rem;border:1px solid var(--surface-border, #e5e7eb);border-radius:4px;background:var(--surface-card, #ffffff);padding:.6rem .75rem}.ref-values__row{display:grid;grid-template-columns:minmax(120px,max-content) 1fr;column-gap:.75rem;row-gap:.25rem;align-items:baseline}.ref-values__key{font-size:.8rem;font-weight:600;color:var(--text-color-secondary, #6b7280);letter-spacing:.02em;overflow-wrap:anywhere}.ref-values__key:after{content:\":\"}.ref-values__chips{display:flex;flex-wrap:wrap;gap:.3rem;min-width:0}.ref-values__chip{font-size:.78rem;padding:.15rem .5rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color, #111827);border:1px solid var(--surface-border, #e5e7eb);white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}\n"], dependencies: [{ kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i2.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: BadgeComponent, selector: "aril-badge", inputs: ["icon", "value", "severity", "rounded", "background", "styleClass", "textColor", "borderColor", "textClampCharacters"] }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
332
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TraceDrawerComponent, isStandalone: true, selector: "aril-trace-drawer", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, traceId: { classPropertyName: "traceId", publicName: "traceId", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, startTime: { classPropertyName: "startTime", publicName: "startTime", isSignal: true, isRequired: false, transformFunction: null }, endTime: { classPropertyName: "endTime", publicName: "endTime", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n\t<p-sidebar\r\n\t\t[visible]=\"visible()\"\r\n\t\t(visibleChange)=\"onVisibleChange($event)\"\r\n\t\t[position]=\"position()\"\r\n\t\t[style]=\"{ width: width() }\"\r\n\t\t[modal]=\"modal()\"\r\n\t\t[dismissible]=\"true\"\r\n\t\t[showCloseIcon]=\"true\"\r\n\t\tstyleClass=\"aril-trace-drawer\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<div class=\"aril-trace-drawer__header\">\r\n\t\t\t\t<i class=\"pi pi-sitemap\"></i>\r\n\t\t\t\t<span class=\"aril-trace-drawer__title\">{{ t('traceDrawer.title') }}</span>\r\n\t\t\t\t<code class=\"aril-trace-drawer__chip\">{{ traceId() }}</code>\r\n\t\t\t\t<i\r\n\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\tclass=\"pi pi-refresh aril-trace-drawer__refresh\"\r\n\t\t\t\t\t[class.pi-spin]=\"loading()\"\r\n\t\t\t\t\t[pTooltip]=\"t('traceDrawer.refresh')\"\r\n\t\t\t\t\ttooltipPosition=\"bottom\"\r\n\t\t\t\t\t(click)=\"refresh()\"></i>\r\n\t\t\t\t<i\r\n\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\tclass=\"pi pi-share-alt aril-trace-drawer__share\"\r\n\t\t\t\t\t[pTooltip]=\"t('traceDrawer.shareLink')\"\r\n\t\t\t\t\ttooltipPosition=\"bottom\"\r\n\t\t\t\t\t(click)=\"shareLink()\"></i>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t<div class=\"aril-trace-drawer__body\">\r\n\t\t\t@if (loading()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<p-progressSpinner strokeWidth=\"3\" styleClass=\"w-3rem h-3rem\"></p-progressSpinner>\r\n\t\t\t\t\t<span>{{ t('traceDrawer.loading') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (errorMessage()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state aril-trace-drawer__state--error\">\r\n\t\t\t\t\t<i class=\"pi pi-exclamation-triangle\"></i>\r\n\t\t\t\t\t<p>{{ errorMessage() }}</p>\r\n\t\t\t\t\t<aril-button [label]=\"t('traceDrawer.retry')\" icon=\"REFRESH\" color=\"primary\" (clickEvent)=\"retry()\" />\r\n\t\t\t\t</div>\r\n\t\t\t} @else {\r\n\t\t\t\t@if (refValueEntries().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-tags\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.refValuesHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"refValueEntries().length.toString()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t<div class=\"ref-values\">\r\n\t\t\t\t\t\t\t@for (entry of refValueEntries(); track entry[0]) {\r\n\t\t\t\t\t\t\t\t<div class=\"ref-values__row\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"ref-values__key\">{{ entry[0] }}</span>\r\n\t\t\t\t\t\t\t\t\t<div class=\"ref-values__chips\">\r\n\t\t\t\t\t\t\t\t\t\t@for (val of entry[1]; track val) {\r\n\t\t\t\t\t\t\t\t\t\t\t<code class=\"ref-values__chip\">{{ val }}</code>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (apisixHits().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-globe\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.apisixHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"apisixHits().length + ' / ' + totalItem()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (hit of apisixHits(); track hit.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ statusSeverity(hit.status) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"hit.status.toString()\" [severity]=\"statusSeverity(hit.status)\" />\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ hit.requestMethod }}</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ hit.requestUri }}</span>\r\n\t\t\t\t\t\t\t\t\t<aril-badge\r\n\t\t\t\t\t\t\t\t\t\t[value]=\"formatDuration(hit.responseTime)\"\r\n\t\t\t\t\t\t\t\t\t\t[severity]=\"durationSeverity(hit.responseTime)\" />\r\n\t\t\t\t\t\t\t\t\t@if (hit.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(hit.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-code trace-row__action\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"t('traceDrawer.copyCurl')\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"left\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); $event.stopPropagation(); copyAsCurl(hit)\"></i>\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.routeName) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.route') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.routeName }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.sourceApp || hit.sourceModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.source') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.sourceApp }}{{ hit.sourceModule ? ' / ' + hit.sourceModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.targetApp || hit.targetModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.targetApp }}{{ hit.targetModule ? ' / ' + hit.targetModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.upstreamHost) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.upstream') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.upstreamHost }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.requestSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.requestSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.requestSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.responseSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.responseSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.responseSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t@if (hit.requestBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.requestBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.requestBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.requestBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (hit.responseBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.responseBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.responseBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.responseBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (hasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMore()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (appLogs().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-list\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.appLogsHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"appLogs().length + ' / ' + appLogsTotal()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (log of appLogs(); track log.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ levelSeverity(log.level) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t@if (log.level) {\r\n\t\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"log.level\" [severity]=\"levelSeverity(log.level)\" />\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.module) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ log.module }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ log.message }}</span>\r\n\t\t\t\t\t\t\t\t\t@if (log.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(log.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t@if (log.message) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__message\">{{ log.message }}</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.username || log.app) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.app) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.app }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.errorDetail) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\" open>\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogErrorDetail') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.errorDetail }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.referenceFields?.length) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogRefFields') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t@for (rf of log.referenceFields; track rf.field) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ rf.field }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ rf.value }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (appLogsHasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMoreAppLogs()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (!apisixHits().length && !appLogs().length && !refValueEntries().length) {\r\n\t\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t\t<i class=\"pi pi-inbox\"></i>\r\n\t\t\t\t\t\t<p>{{ t('traceDrawer.empty') }}</p>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</p-sidebar>\r\n</ng-container>\r\n", styles: [":host ::ng-deep .aril-trace-drawer{display:flex;flex-direction:column;height:100%}:host ::ng-deep .aril-trace-drawer .p-sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid var(--surface-border, #e5e7eb);flex:0 0 auto}:host ::ng-deep .aril-trace-drawer .p-sidebar-content{padding:0;flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden}.aril-trace-drawer__header{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}.aril-trace-drawer__header .pi-sitemap{font-size:1.25rem;color:var(--primary-color, #1890ff)}.aril-trace-drawer__title{font-weight:600;font-size:1.1rem}.aril-trace-drawer__chip{font-size:.875rem;padding:.2rem .55rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color-secondary, #6b7280);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.aril-trace-drawer__refresh,.aril-trace-drawer__share{cursor:pointer;font-size:1rem;padding:.4rem;border-radius:4px;color:var(--primary-color, #1890ff);transition:background .15s ease}.aril-trace-drawer__refresh:hover,.aril-trace-drawer__share:hover{background:var(--surface-100, #f3f4f6)}.aril-trace-drawer__body{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:1.5rem;min-height:min-content}.aril-trace-drawer__state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;padding:3rem 1rem;color:var(--text-color-secondary, #6b7280);text-align:center;font-size:.95rem}.aril-trace-drawer__state .pi{font-size:2rem}.aril-trace-drawer__state--error .pi{color:var(--red-500, #ef4444)}.aril-trace-drawer__section-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .5rem;font-size:1rem;font-weight:600}.aril-trace-drawer__section-title .pi{color:var(--primary-color, #1890ff)}.trace-row{display:block;border:1px solid var(--surface-border, #e5e7eb);border-left:3px solid var(--surface-border, #e5e7eb);background:var(--surface-card, #ffffff);border-radius:4px;overflow:hidden;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}.trace-row+.trace-row{margin-top:.4rem}.trace-row:hover{border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 3px #0000000a}.trace-row[open]{background:var(--surface-50, #fafafa);border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 4px #0000000d}.trace-row--success{border-left-color:var(--green-500, #22c55e)}.trace-row--info{border-left-color:var(--blue-500, #3b82f6)}.trace-row--warning{border-left-color:var(--orange-500, #f97316)}.trace-row--danger{border-left-color:var(--red-500, #ef4444)}.trace-row--secondary{border-left-color:var(--gray-400, #9ca3af)}.trace-row__summary{cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none;display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem}.trace-row__summary::-webkit-details-marker{display:none}.trace-row__summary:hover{background:var(--surface-50, #fafafa)}.trace-row[open] .trace-row__summary:hover{background:var(--surface-100, #f3f4f6)}.trace-row__chevron{color:var(--text-color-secondary, #6b7280);font-size:.7rem;transition:transform .15s ease;flex-shrink:0}.trace-row[open] .trace-row__chevron{transform:rotate(90deg)}.trace-row__tag{font-weight:600;color:var(--primary-color, #1890ff);font-size:.8rem;white-space:nowrap;flex-shrink:0;letter-spacing:.02em}.trace-row__main{font-size:.85rem;color:var(--text-color, #111827);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.trace-row__time{font-size:.75rem;color:var(--text-color-secondary, #6b7280);font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0}.trace-row__action{cursor:pointer;padding:.25rem;border-radius:4px;color:var(--text-color-secondary, #6b7280);flex-shrink:0;transition:background .15s ease,color .15s ease}.trace-row__action:hover{background:var(--surface-100, #f3f4f6);color:var(--primary-color, #1890ff)}.trace-row__body{padding:.5rem .75rem .75rem;border-top:1px solid var(--surface-border, #e5e7eb);display:flex;flex-direction:column;gap:.5rem;background:var(--surface-0, #ffffff)}.trace-row__message{font-size:.85rem;color:var(--text-color, #111827);line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;background:var(--surface-100, #f3f4f6);border-radius:4px;padding:.5rem .65rem}.trace-row__meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.25rem .75rem;font-size:.8rem}.trace-row__meta>div{display:grid;grid-template-columns:max-content 1fr;column-gap:.4rem;align-items:baseline;min-width:0}.trace-row__meta .meta-label{color:var(--text-color-secondary, #6b7280);font-weight:500}.trace-row__meta .meta-label:after{content:\":\"}.trace-row__meta span:not(.meta-label){color:var(--text-color, #111827);word-break:break-word}.trace-row__sub{margin:0}.trace-row__sub summary{cursor:pointer;font-size:.8rem;color:var(--primary-color, #1890ff);padding:.15rem 0;-webkit-user-select:none;user-select:none}.trace-row__sub summary:hover{text-decoration:underline}.trace-row__sub pre{margin:.25rem 0 0;padding:.5rem .75rem;background:var(--surface-100, #f3f4f6);border-radius:4px;font-size:.78rem;line-height:1.45;max-height:320px;overflow:auto;white-space:pre-wrap;word-break:break-word}.aril-trace-drawer__load-more{display:flex;justify-content:center;margin-top:.5rem}.ref-values{display:flex;flex-direction:column;gap:.4rem;border:1px solid var(--surface-border, #e5e7eb);border-radius:4px;background:var(--surface-card, #ffffff);padding:.6rem .75rem}.ref-values__row{display:grid;grid-template-columns:minmax(120px,max-content) 1fr;column-gap:.75rem;row-gap:.25rem;align-items:baseline}.ref-values__key{font-size:.8rem;font-weight:600;color:var(--text-color-secondary, #6b7280);letter-spacing:.02em;overflow-wrap:anywhere}.ref-values__key:after{content:\":\"}.ref-values__chips{display:flex;flex-wrap:wrap;gap:.3rem;min-width:0}.ref-values__chip{font-size:.78rem;padding:.15rem .5rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color, #111827);border:1px solid var(--surface-border, #e5e7eb);white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}\n"], dependencies: [{ kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i1.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i2.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: BadgeComponent, selector: "aril-badge", inputs: ["icon", "value", "severity", "rounded", "background", "styleClass", "textColor", "borderColor", "textClampCharacters"] }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
327
333
|
}
|
|
328
334
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TraceDrawerComponent, decorators: [{
|
|
329
335
|
type: Component,
|
|
330
|
-
args: [{ standalone: true, selector: 'aril-trace-drawer', imports: [JsonPipe, TranslocoModule, SidebarModule, ProgressSpinnerModule, TooltipModule, BadgeComponent, ButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *transloco=\"let t\">\r\n\t<p-sidebar\r\n\t\t[visible]=\"visible()\"\r\n\t\t(visibleChange)=\"onVisibleChange($event)\"\r\n\t\t[position]=\"position()\"\r\n\t\t[style]=\"{ width: width() }\"\r\n\t\t[modal]=\"modal()\"\r\n\t\t[dismissible]=\"true\"\r\n\t\t[showCloseIcon]=\"true\"\r\n\t\tstyleClass=\"aril-trace-drawer\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<div class=\"aril-trace-drawer__header\">\r\n\t\t\t\t<i class=\"pi pi-sitemap\"></i>\r\n\t\t\t\t<span class=\"aril-trace-drawer__title\">{{ t('traceDrawer.title') }}</span>\r\n\t\t\t\t<code class=\"aril-trace-drawer__chip\">{{ traceId() }}</code>\r\n\t\t\t\t<i\r\n\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\tclass=\"pi pi-share-alt aril-trace-drawer__share\"\r\n\t\t\t\t\t[pTooltip]=\"t('traceDrawer.shareLink')\"\r\n\t\t\t\t\ttooltipPosition=\"bottom\"\r\n\t\t\t\t\t(click)=\"shareLink()\"></i>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t<div class=\"aril-trace-drawer__body\">\r\n\t\t\t@if (loading()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<p-progressSpinner strokeWidth=\"3\" styleClass=\"w-3rem h-3rem\"></p-progressSpinner>\r\n\t\t\t\t\t<span>{{ t('traceDrawer.loading') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (errorMessage()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state aril-trace-drawer__state--error\">\r\n\t\t\t\t\t<i class=\"pi pi-exclamation-triangle\"></i>\r\n\t\t\t\t\t<p>{{ errorMessage() }}</p>\r\n\t\t\t\t\t<aril-button [label]=\"t('traceDrawer.retry')\" icon=\"REFRESH\" color=\"primary\" (clickEvent)=\"retry()\" />\r\n\t\t\t\t</div>\r\n\t\t\t} @else {\r\n\t\t\t\t@if (refValueEntries().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-tags\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.refValuesHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"refValueEntries().length.toString()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t<div class=\"ref-values\">\r\n\t\t\t\t\t\t\t@for (entry of refValueEntries(); track entry[0]) {\r\n\t\t\t\t\t\t\t\t<div class=\"ref-values__row\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"ref-values__key\">{{ entry[0] }}</span>\r\n\t\t\t\t\t\t\t\t\t<div class=\"ref-values__chips\">\r\n\t\t\t\t\t\t\t\t\t\t@for (val of entry[1]; track val) {\r\n\t\t\t\t\t\t\t\t\t\t\t<code class=\"ref-values__chip\">{{ val }}</code>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (apisixHits().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-globe\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.apisixHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"apisixHits().length + ' / ' + totalItem()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (hit of apisixHits(); track hit.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ statusSeverity(hit.status) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"hit.status.toString()\" [severity]=\"statusSeverity(hit.status)\" />\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ hit.requestMethod }}</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ hit.requestUri }}</span>\r\n\t\t\t\t\t\t\t\t\t<aril-badge\r\n\t\t\t\t\t\t\t\t\t\t[value]=\"formatDuration(hit.responseTime)\"\r\n\t\t\t\t\t\t\t\t\t\t[severity]=\"durationSeverity(hit.responseTime)\" />\r\n\t\t\t\t\t\t\t\t\t@if (hit.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(hit.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-code trace-row__action\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"t('traceDrawer.copyCurl')\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"left\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); $event.stopPropagation(); copyAsCurl(hit)\"></i>\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.routeName) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.route') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.routeName }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.sourceApp || hit.sourceModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.source') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.sourceApp }}{{ hit.sourceModule ? ' / ' + hit.sourceModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.targetApp || hit.targetModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.targetApp }}{{ hit.targetModule ? ' / ' + hit.targetModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.upstreamHost) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.upstream') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.upstreamHost }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.requestSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.requestSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.requestSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.responseSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.responseSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.responseSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t@if (hit.requestBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.requestBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.requestBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.requestBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (hit.responseBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.responseBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.responseBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.responseBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (hasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMore()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (appLogs().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-list\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.appLogsHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"appLogs().length + ' / ' + appLogsTotal()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (log of appLogs(); track log.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ levelSeverity(log.level) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t@if (log.level) {\r\n\t\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"log.level\" [severity]=\"levelSeverity(log.level)\" />\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.module) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ log.module }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ log.message }}</span>\r\n\t\t\t\t\t\t\t\t\t@if (log.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(log.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t@if (log.message) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__message\">{{ log.message }}</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.username || log.app) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.app) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.app }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.errorDetail) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\" open>\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogErrorDetail') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.errorDetail }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.referenceFields?.length) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogRefFields') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t@for (rf of log.referenceFields; track rf.field) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ rf.field }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ rf.value }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (appLogsHasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMoreAppLogs()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (!apisixHits().length && !appLogs().length && !refValueEntries().length) {\r\n\t\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t\t<i class=\"pi pi-inbox\"></i>\r\n\t\t\t\t\t\t<p>{{ t('traceDrawer.empty') }}</p>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</p-sidebar>\r\n</ng-container>\r\n", styles: [":host ::ng-deep .aril-trace-drawer{display:flex;flex-direction:column;height:100%}:host ::ng-deep .aril-trace-drawer .p-sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid var(--surface-border, #e5e7eb);flex:0 0 auto}:host ::ng-deep .aril-trace-drawer .p-sidebar-content{padding:0;flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden}.aril-trace-drawer__header{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}.aril-trace-drawer__header .pi-sitemap{font-size:1.25rem;color:var(--primary-color, #1890ff)}.aril-trace-drawer__title{font-weight:600;font-size:1.1rem}.aril-trace-drawer__chip{font-size:.875rem;padding:.2rem .55rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color-secondary, #6b7280);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.aril-trace-drawer__share{cursor:pointer;font-size:1rem;padding:.4rem;border-radius:4px;color:var(--primary-color, #1890ff);transition:background .15s ease}.aril-trace-drawer__share:hover{background:var(--surface-100, #f3f4f6)}.aril-trace-drawer__body{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:1.5rem;min-height:min-content}.aril-trace-drawer__state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;padding:3rem 1rem;color:var(--text-color-secondary, #6b7280);text-align:center;font-size:.95rem}.aril-trace-drawer__state .pi{font-size:2rem}.aril-trace-drawer__state--error .pi{color:var(--red-500, #ef4444)}.aril-trace-drawer__section-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .5rem;font-size:1rem;font-weight:600}.aril-trace-drawer__section-title .pi{color:var(--primary-color, #1890ff)}.trace-row{display:block;border:1px solid var(--surface-border, #e5e7eb);border-left:3px solid var(--surface-border, #e5e7eb);background:var(--surface-card, #ffffff);border-radius:4px;overflow:hidden;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}.trace-row+.trace-row{margin-top:.4rem}.trace-row:hover{border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 3px #0000000a}.trace-row[open]{background:var(--surface-50, #fafafa);border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 4px #0000000d}.trace-row--success{border-left-color:var(--green-500, #22c55e)}.trace-row--info{border-left-color:var(--blue-500, #3b82f6)}.trace-row--warning{border-left-color:var(--orange-500, #f97316)}.trace-row--danger{border-left-color:var(--red-500, #ef4444)}.trace-row--secondary{border-left-color:var(--gray-400, #9ca3af)}.trace-row__summary{cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none;display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem}.trace-row__summary::-webkit-details-marker{display:none}.trace-row__summary:hover{background:var(--surface-50, #fafafa)}.trace-row[open] .trace-row__summary:hover{background:var(--surface-100, #f3f4f6)}.trace-row__chevron{color:var(--text-color-secondary, #6b7280);font-size:.7rem;transition:transform .15s ease;flex-shrink:0}.trace-row[open] .trace-row__chevron{transform:rotate(90deg)}.trace-row__tag{font-weight:600;color:var(--primary-color, #1890ff);font-size:.8rem;white-space:nowrap;flex-shrink:0;letter-spacing:.02em}.trace-row__main{font-size:.85rem;color:var(--text-color, #111827);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.trace-row__time{font-size:.75rem;color:var(--text-color-secondary, #6b7280);font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0}.trace-row__action{cursor:pointer;padding:.25rem;border-radius:4px;color:var(--text-color-secondary, #6b7280);flex-shrink:0;transition:background .15s ease,color .15s ease}.trace-row__action:hover{background:var(--surface-100, #f3f4f6);color:var(--primary-color, #1890ff)}.trace-row__body{padding:.5rem .75rem .75rem;border-top:1px solid var(--surface-border, #e5e7eb);display:flex;flex-direction:column;gap:.5rem;background:var(--surface-0, #ffffff)}.trace-row__message{font-size:.85rem;color:var(--text-color, #111827);line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;background:var(--surface-100, #f3f4f6);border-radius:4px;padding:.5rem .65rem}.trace-row__meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.25rem .75rem;font-size:.8rem}.trace-row__meta>div{display:grid;grid-template-columns:max-content 1fr;column-gap:.4rem;align-items:baseline;min-width:0}.trace-row__meta .meta-label{color:var(--text-color-secondary, #6b7280);font-weight:500}.trace-row__meta .meta-label:after{content:\":\"}.trace-row__meta span:not(.meta-label){color:var(--text-color, #111827);word-break:break-word}.trace-row__sub{margin:0}.trace-row__sub summary{cursor:pointer;font-size:.8rem;color:var(--primary-color, #1890ff);padding:.15rem 0;-webkit-user-select:none;user-select:none}.trace-row__sub summary:hover{text-decoration:underline}.trace-row__sub pre{margin:.25rem 0 0;padding:.5rem .75rem;background:var(--surface-100, #f3f4f6);border-radius:4px;font-size:.78rem;line-height:1.45;max-height:320px;overflow:auto;white-space:pre-wrap;word-break:break-word}.aril-trace-drawer__load-more{display:flex;justify-content:center;margin-top:.5rem}.ref-values{display:flex;flex-direction:column;gap:.4rem;border:1px solid var(--surface-border, #e5e7eb);border-radius:4px;background:var(--surface-card, #ffffff);padding:.6rem .75rem}.ref-values__row{display:grid;grid-template-columns:minmax(120px,max-content) 1fr;column-gap:.75rem;row-gap:.25rem;align-items:baseline}.ref-values__key{font-size:.8rem;font-weight:600;color:var(--text-color-secondary, #6b7280);letter-spacing:.02em;overflow-wrap:anywhere}.ref-values__key:after{content:\":\"}.ref-values__chips{display:flex;flex-wrap:wrap;gap:.3rem;min-width:0}.ref-values__chip{font-size:.78rem;padding:.15rem .5rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color, #111827);border:1px solid var(--surface-border, #e5e7eb);white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}\n"] }]
|
|
336
|
+
args: [{ standalone: true, selector: 'aril-trace-drawer', imports: [JsonPipe, TranslocoModule, SidebarModule, ProgressSpinnerModule, TooltipModule, BadgeComponent, ButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *transloco=\"let t\">\r\n\t<p-sidebar\r\n\t\t[visible]=\"visible()\"\r\n\t\t(visibleChange)=\"onVisibleChange($event)\"\r\n\t\t[position]=\"position()\"\r\n\t\t[style]=\"{ width: width() }\"\r\n\t\t[modal]=\"modal()\"\r\n\t\t[dismissible]=\"true\"\r\n\t\t[showCloseIcon]=\"true\"\r\n\t\tstyleClass=\"aril-trace-drawer\">\r\n\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t<div class=\"aril-trace-drawer__header\">\r\n\t\t\t\t<i class=\"pi pi-sitemap\"></i>\r\n\t\t\t\t<span class=\"aril-trace-drawer__title\">{{ t('traceDrawer.title') }}</span>\r\n\t\t\t\t<code class=\"aril-trace-drawer__chip\">{{ traceId() }}</code>\r\n\t\t\t\t<i\r\n\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\tclass=\"pi pi-refresh aril-trace-drawer__refresh\"\r\n\t\t\t\t\t[class.pi-spin]=\"loading()\"\r\n\t\t\t\t\t[pTooltip]=\"t('traceDrawer.refresh')\"\r\n\t\t\t\t\ttooltipPosition=\"bottom\"\r\n\t\t\t\t\t(click)=\"refresh()\"></i>\r\n\t\t\t\t<i\r\n\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\tclass=\"pi pi-share-alt aril-trace-drawer__share\"\r\n\t\t\t\t\t[pTooltip]=\"t('traceDrawer.shareLink')\"\r\n\t\t\t\t\ttooltipPosition=\"bottom\"\r\n\t\t\t\t\t(click)=\"shareLink()\"></i>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t<div class=\"aril-trace-drawer__body\">\r\n\t\t\t@if (loading()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t<p-progressSpinner strokeWidth=\"3\" styleClass=\"w-3rem h-3rem\"></p-progressSpinner>\r\n\t\t\t\t\t<span>{{ t('traceDrawer.loading') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t} @else if (errorMessage()) {\r\n\t\t\t\t<div class=\"aril-trace-drawer__state aril-trace-drawer__state--error\">\r\n\t\t\t\t\t<i class=\"pi pi-exclamation-triangle\"></i>\r\n\t\t\t\t\t<p>{{ errorMessage() }}</p>\r\n\t\t\t\t\t<aril-button [label]=\"t('traceDrawer.retry')\" icon=\"REFRESH\" color=\"primary\" (clickEvent)=\"retry()\" />\r\n\t\t\t\t</div>\r\n\t\t\t} @else {\r\n\t\t\t\t@if (refValueEntries().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-tags\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.refValuesHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"refValueEntries().length.toString()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t<div class=\"ref-values\">\r\n\t\t\t\t\t\t\t@for (entry of refValueEntries(); track entry[0]) {\r\n\t\t\t\t\t\t\t\t<div class=\"ref-values__row\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"ref-values__key\">{{ entry[0] }}</span>\r\n\t\t\t\t\t\t\t\t\t<div class=\"ref-values__chips\">\r\n\t\t\t\t\t\t\t\t\t\t@for (val of entry[1]; track val) {\r\n\t\t\t\t\t\t\t\t\t\t\t<code class=\"ref-values__chip\">{{ val }}</code>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (apisixHits().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-globe\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.apisixHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"apisixHits().length + ' / ' + totalItem()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (hit of apisixHits(); track hit.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ statusSeverity(hit.status) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"hit.status.toString()\" [severity]=\"statusSeverity(hit.status)\" />\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ hit.requestMethod }}</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ hit.requestUri }}</span>\r\n\t\t\t\t\t\t\t\t\t<aril-badge\r\n\t\t\t\t\t\t\t\t\t\t[value]=\"formatDuration(hit.responseTime)\"\r\n\t\t\t\t\t\t\t\t\t\t[severity]=\"durationSeverity(hit.responseTime)\" />\r\n\t\t\t\t\t\t\t\t\t@if (hit.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(hit.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\trole=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"pi pi-code trace-row__action\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"t('traceDrawer.copyCurl')\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"left\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"$event.preventDefault(); $event.stopPropagation(); copyAsCurl(hit)\"></i>\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.routeName) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.route') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.routeName }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.sourceApp || hit.sourceModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.source') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.sourceApp }}{{ hit.sourceModule ? ' / ' + hit.sourceModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.targetApp || hit.targetModule) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ hit.targetApp }}{{ hit.targetModule ? ' / ' + hit.targetModule : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.upstreamHost) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.upstream') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.upstreamHost }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ hit.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.requestSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.requestSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.requestSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t@if (hit.responseSize !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.responseSize') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ formatBytes(hit.responseSize) }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t@if (hit.requestBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.requestBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.requestBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.requestBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (hit.responseBody) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.responseBody') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t@if (tryParseJson(hit.responseBody); as parsed) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ parsed | json }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<pre>{{ hit.responseBody }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (hasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"loadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMore()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (appLogs().length) {\r\n\t\t\t\t\t<section class=\"aril-trace-drawer__section\">\r\n\t\t\t\t\t\t<h3 class=\"aril-trace-drawer__section-title\">\r\n\t\t\t\t\t\t\t<i class=\"pi pi-list\"></i>\r\n\t\t\t\t\t\t\t{{ t('traceDrawer.appLogsHeader') }}\r\n\t\t\t\t\t\t\t<aril-badge [value]=\"appLogs().length + ' / ' + appLogsTotal()\" [rounded]=\"true\" />\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t\t@for (log of appLogs(); track log.id) {\r\n\t\t\t\t\t\t\t<details class=\"trace-row trace-row--{{ levelSeverity(log.level) }}\">\r\n\t\t\t\t\t\t\t\t<summary class=\"trace-row__summary\">\r\n\t\t\t\t\t\t\t\t\t<i class=\"pi pi-chevron-right trace-row__chevron\"></i>\r\n\t\t\t\t\t\t\t\t\t@if (log.level) {\r\n\t\t\t\t\t\t\t\t\t\t<aril-badge [value]=\"log.level\" [severity]=\"levelSeverity(log.level)\" />\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.module) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__tag\">{{ log.module }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t<span class=\"trace-row__main\">{{ log.message }}</span>\r\n\t\t\t\t\t\t\t\t\t@if (log.timestamp) {\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"trace-row__time\">{{ formatTimestamp(log.timestamp) }}</span>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</summary>\r\n\t\t\t\t\t\t\t\t<div class=\"trace-row__body\">\r\n\t\t\t\t\t\t\t\t\t@if (log.message) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__message\">{{ log.message }}</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.username || log.app) {\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.app) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.target') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.app }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t@if (log.username) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ t('traceDrawer.user') }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ log.username }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.errorDetail) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\" open>\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogErrorDetail') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<pre>{{ log.errorDetail }}</pre>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t@if (log.referenceFields?.length) {\r\n\t\t\t\t\t\t\t\t\t\t<details class=\"trace-row__sub\">\r\n\t\t\t\t\t\t\t\t\t\t\t<summary>{{ t('traceDrawer.appLogRefFields') }}</summary>\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"trace-row__meta\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t@for (rf of log.referenceFields; track rf.field) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"meta-label\">{{ rf.field }}</span\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t><span>{{ rf.value }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</details>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@if (appLogsHasMore()) {\r\n\t\t\t\t\t\t\t<div class=\"aril-trace-drawer__load-more\">\r\n\t\t\t\t\t\t\t\t<aril-button\r\n\t\t\t\t\t\t\t\t\t[label]=\"t('traceDrawer.loadMore')\"\r\n\t\t\t\t\t\t\t\t\ticon=\"CHEVRON_DOWN\"\r\n\t\t\t\t\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\t\t\t\t\t[outlined]=\"true\"\r\n\t\t\t\t\t\t\t\t\t[loading]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t[disabled]=\"appLogsLoadingMore()\"\r\n\t\t\t\t\t\t\t\t\t(clickEvent)=\"loadMoreAppLogs()\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</section>\r\n\t\t\t\t}\r\n\t\t\t\t@if (!apisixHits().length && !appLogs().length && !refValueEntries().length) {\r\n\t\t\t\t\t<div class=\"aril-trace-drawer__state\">\r\n\t\t\t\t\t\t<i class=\"pi pi-inbox\"></i>\r\n\t\t\t\t\t\t<p>{{ t('traceDrawer.empty') }}</p>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t</div>\r\n\t</p-sidebar>\r\n</ng-container>\r\n", styles: [":host ::ng-deep .aril-trace-drawer{display:flex;flex-direction:column;height:100%}:host ::ng-deep .aril-trace-drawer .p-sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid var(--surface-border, #e5e7eb);flex:0 0 auto}:host ::ng-deep .aril-trace-drawer .p-sidebar-content{padding:0;flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden}.aril-trace-drawer__header{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}.aril-trace-drawer__header .pi-sitemap{font-size:1.25rem;color:var(--primary-color, #1890ff)}.aril-trace-drawer__title{font-weight:600;font-size:1.1rem}.aril-trace-drawer__chip{font-size:.875rem;padding:.2rem .55rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color-secondary, #6b7280);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}.aril-trace-drawer__refresh,.aril-trace-drawer__share{cursor:pointer;font-size:1rem;padding:.4rem;border-radius:4px;color:var(--primary-color, #1890ff);transition:background .15s ease}.aril-trace-drawer__refresh:hover,.aril-trace-drawer__share:hover{background:var(--surface-100, #f3f4f6)}.aril-trace-drawer__body{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:1.5rem;min-height:min-content}.aril-trace-drawer__state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;padding:3rem 1rem;color:var(--text-color-secondary, #6b7280);text-align:center;font-size:.95rem}.aril-trace-drawer__state .pi{font-size:2rem}.aril-trace-drawer__state--error .pi{color:var(--red-500, #ef4444)}.aril-trace-drawer__section-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .5rem;font-size:1rem;font-weight:600}.aril-trace-drawer__section-title .pi{color:var(--primary-color, #1890ff)}.trace-row{display:block;border:1px solid var(--surface-border, #e5e7eb);border-left:3px solid var(--surface-border, #e5e7eb);background:var(--surface-card, #ffffff);border-radius:4px;overflow:hidden;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}.trace-row+.trace-row{margin-top:.4rem}.trace-row:hover{border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 3px #0000000a}.trace-row[open]{background:var(--surface-50, #fafafa);border-top-color:var(--surface-300, #d1d5db);border-right-color:var(--surface-300, #d1d5db);border-bottom-color:var(--surface-300, #d1d5db);box-shadow:0 1px 4px #0000000d}.trace-row--success{border-left-color:var(--green-500, #22c55e)}.trace-row--info{border-left-color:var(--blue-500, #3b82f6)}.trace-row--warning{border-left-color:var(--orange-500, #f97316)}.trace-row--danger{border-left-color:var(--red-500, #ef4444)}.trace-row--secondary{border-left-color:var(--gray-400, #9ca3af)}.trace-row__summary{cursor:pointer;-webkit-user-select:none;user-select:none;list-style:none;display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem}.trace-row__summary::-webkit-details-marker{display:none}.trace-row__summary:hover{background:var(--surface-50, #fafafa)}.trace-row[open] .trace-row__summary:hover{background:var(--surface-100, #f3f4f6)}.trace-row__chevron{color:var(--text-color-secondary, #6b7280);font-size:.7rem;transition:transform .15s ease;flex-shrink:0}.trace-row[open] .trace-row__chevron{transform:rotate(90deg)}.trace-row__tag{font-weight:600;color:var(--primary-color, #1890ff);font-size:.8rem;white-space:nowrap;flex-shrink:0;letter-spacing:.02em}.trace-row__main{font-size:.85rem;color:var(--text-color, #111827);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.trace-row__time{font-size:.75rem;color:var(--text-color-secondary, #6b7280);font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0}.trace-row__action{cursor:pointer;padding:.25rem;border-radius:4px;color:var(--text-color-secondary, #6b7280);flex-shrink:0;transition:background .15s ease,color .15s ease}.trace-row__action:hover{background:var(--surface-100, #f3f4f6);color:var(--primary-color, #1890ff)}.trace-row__body{padding:.5rem .75rem .75rem;border-top:1px solid var(--surface-border, #e5e7eb);display:flex;flex-direction:column;gap:.5rem;background:var(--surface-0, #ffffff)}.trace-row__message{font-size:.85rem;color:var(--text-color, #111827);line-height:1.5;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;background:var(--surface-100, #f3f4f6);border-radius:4px;padding:.5rem .65rem}.trace-row__meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.25rem .75rem;font-size:.8rem}.trace-row__meta>div{display:grid;grid-template-columns:max-content 1fr;column-gap:.4rem;align-items:baseline;min-width:0}.trace-row__meta .meta-label{color:var(--text-color-secondary, #6b7280);font-weight:500}.trace-row__meta .meta-label:after{content:\":\"}.trace-row__meta span:not(.meta-label){color:var(--text-color, #111827);word-break:break-word}.trace-row__sub{margin:0}.trace-row__sub summary{cursor:pointer;font-size:.8rem;color:var(--primary-color, #1890ff);padding:.15rem 0;-webkit-user-select:none;user-select:none}.trace-row__sub summary:hover{text-decoration:underline}.trace-row__sub pre{margin:.25rem 0 0;padding:.5rem .75rem;background:var(--surface-100, #f3f4f6);border-radius:4px;font-size:.78rem;line-height:1.45;max-height:320px;overflow:auto;white-space:pre-wrap;word-break:break-word}.aril-trace-drawer__load-more{display:flex;justify-content:center;margin-top:.5rem}.ref-values{display:flex;flex-direction:column;gap:.4rem;border:1px solid var(--surface-border, #e5e7eb);border-radius:4px;background:var(--surface-card, #ffffff);padding:.6rem .75rem}.ref-values__row{display:grid;grid-template-columns:minmax(120px,max-content) 1fr;column-gap:.75rem;row-gap:.25rem;align-items:baseline}.ref-values__key{font-size:.8rem;font-weight:600;color:var(--text-color-secondary, #6b7280);letter-spacing:.02em;overflow-wrap:anywhere}.ref-values__key:after{content:\":\"}.ref-values__chips{display:flex;flex-wrap:wrap;gap:.3rem;min-width:0}.ref-values__chip{font-size:.78rem;padding:.15rem .5rem;border-radius:4px;background:var(--surface-100, #f3f4f6);color:var(--text-color, #111827);border:1px solid var(--surface-border, #e5e7eb);white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}\n"] }]
|
|
331
337
|
}], ctorParameters: () => [], propDecorators: { visibleChange: [{
|
|
332
338
|
type: Output
|
|
333
339
|
}] } });
|