UNPKG

@rxap/data-grid

Version:

Provides a data grid component for Angular applications. It supports plain and form modes, custom header and cell templates, and integration with Rxap Forms and Data Sources. The component allows for displaying and editing data in a tabular format with fe

1 lines 38.5 kB
{"version":3,"file":"rxap-data-grid.mjs","sources":["../../../../../packages/angular/data-grid/src/lib/data-grid-cell-def.directive.ts","../../../../../packages/angular/data-grid/src/lib/data-grid-edit-cell-def.directive.ts","../../../../../packages/angular/data-grid/src/lib/data-grid-header-cell-def.directive.ts","../../../../../packages/angular/data-grid/src/lib/data-grid-row-def.directive.ts","../../../../../packages/angular/data-grid/src/lib/data-grid-value.pipe.ts","../../../../../packages/angular/data-grid/src/lib/is-empty.pipe.ts","../../../../../packages/angular/data-grid/src/lib/data-grid.component.ts","../../../../../packages/angular/data-grid/src/lib/data-grid.component.html","../../../../../packages/angular/data-grid/src/lib/data-grid.module.ts","../../../../../packages/angular/data-grid/src/index.ts","../../../../../packages/angular/data-grid/src/rxap-data-grid.ts"],"sourcesContent":["import {\n Directive,\n Inject,\n TemplateRef,\n} from '@angular/core';\n\nexport interface DataGridCellDefDirectiveContext<T extends Record<string, any> = Record<string, any>> {\n $implicit: T[keyof T];\n data: T;\n}\n\n@Directive({\n selector: '[rxapDataGridCellDef]',\n standalone: true,\n})\nexport class DataGridCellDefDirective<T extends Record<string, any>> {\n public static ngTemplateContextGuard<T extends Record<string, any>>(\n dir: DataGridCellDefDirective<T>,\n ctx: any,\n ): ctx is DataGridCellDefDirectiveContext<T> {\n return true;\n }\n\n $implicit!: T[keyof T];\n data!: T;\n\n constructor(\n @Inject(TemplateRef)\n public template: TemplateRef<DataGridCellDefDirectiveContext<T>>,\n ) {\n }\n}\n","import {\n Directive,\n Inject,\n TemplateRef,\n} from '@angular/core';\n\nexport interface DataGridEditCellDefDirectiveContext<T extends Record<string, any> = Record<string, any>> {\n $implicit: T[keyof T];\n data: T;\n}\n\n@Directive({\n selector: '[rxapDataGridEditCellDef]',\n standalone: true,\n})\nexport class DataGridEditCellDefDirective<T extends Record<string, any>> {\n public static ngTemplateContextGuard<T extends Record<string, any>>(\n dir: DataGridEditCellDefDirective<T>,\n ctx: any,\n ): ctx is DataGridEditCellDefDirectiveContext<T> {\n return true;\n }\n\n constructor(\n @Inject(TemplateRef)\n public template: TemplateRef<DataGridEditCellDefDirectiveContext<T>>,\n ) {\n }\n}\n","import {\n Directive,\n Inject,\n TemplateRef,\n} from '@angular/core';\n\nexport interface DataGridHeaderCellDefDirectiveContext {\n $implicit: string;\n}\n\n@Directive({\n selector: '[rxapDataGridHeaderCellDef]',\n standalone: true,\n})\nexport class DataGridHeaderCellDefDirective {\n public static ngTemplateContextGuard(\n dir: DataGridHeaderCellDefDirective,\n ctx: any,\n ): ctx is DataGridHeaderCellDefDirectiveContext {\n return true;\n }\n\n constructor(\n @Inject(TemplateRef)\n public template: TemplateRef<DataGridHeaderCellDefDirectiveContext>,\n ) {\n }\n}\n","import {\n ContentChild,\n Directive,\n Input,\n} from '@angular/core';\nimport { DataGridCellDefDirective } from './data-grid-cell-def.directive';\nimport { DataGridHeaderCellDefDirective } from './data-grid-header-cell-def.directive';\nimport { DataGridEditCellDefDirective } from './data-grid-edit-cell-def.directive';\n\n@Directive({\n selector: '[rxapDataGridRowDef]',\n standalone: true,\n})\nexport class DataGridRowDefDirective<T extends Record<string, any>> {\n\n @Input()\n public data: any | null = null;\n\n @Input('rxapDataGridRowDef')\n public name?: string;\n\n /**\n * true - the header and content cell are \"rotated\" by 90°. The header is above the content cell and both have a\n * colspan\n *\n * **flip: false**\n * Label | Value\n * --- | ---\n * Header | Content\n *\n * **flip: true**\n * Label | Value\n * --- | ---\n * Header (colspan 2)\n * Content (colspan 2)\n *\n */\n @Input()\n public flip = false;\n\n @ContentChild(DataGridCellDefDirective)\n public cell?: DataGridCellDefDirective<T>;\n\n @ContentChild(DataGridHeaderCellDefDirective)\n public headerCell?: DataGridHeaderCellDefDirective;\n\n @ContentChild(DataGridEditCellDefDirective)\n public editCell?: DataGridEditCellDefDirective<T>;\n\n public get isSubHeader() {\n return !this.name;\n }\n\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport { getFromObject } from '@rxap/utilities';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Pipe({\n name: 'dataGridValue',\n standalone: true,\n})\nexport class DataGridValuePipe<T extends Record<string, unknown>> implements PipeTransform {\n\n public transform(data: Observable<T>, path?: string): Observable<unknown> {\n if (!path) {\n throw new Error('FATAL: The path is required! Ensure the data grid row has a defined name property!');\n }\n return data.pipe(\n map(source => getFromObject(source, path)),\n );\n }\n\n}\n","import {\n Pipe,\n PipeTransform,\n} from '@angular/core';\nimport { getFromObject } from '@rxap/utilities';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Pipe({\n name: 'isEmpty',\n standalone: true,\n})\nexport class IsEmptyPipe<T extends Record<string, unknown>> implements PipeTransform {\n\n transform(data: Observable<T>, path?: string): Observable<boolean> {\n if (!path) {\n throw new Error('FATAL: The path is required! Ensure the data grid row has a defined name property!');\n }\n return data.pipe(\n map(source => getFromObject(source, path)),\n map(value => value === null || value === undefined || value === ''),\n );\n }\n\n}\n","import {\n AsyncPipe,\n NgClass,\n NgFor,\n NgIf,\n NgTemplateOutlet,\n} from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n EventEmitter,\n Input,\n isDevMode,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport {\n ActivationEnd,\n Router,\n} from '@angular/router';\nimport {\n FormDirective,\n RxapFormsModule,\n} from '@rxap/forms';\nimport {\n DataSource,\n DataSourceViewer,\n} from '@rxap/pattern';\nimport {\n EscapeQuotationMarkPipe,\n GetFromObjectPipe,\n ReplacePipe,\n} from '@rxap/pipes';\nimport { ToggleSubject } from '@rxap/rxjs';\nimport { clone } from '@rxap/utilities';\nimport {\n BehaviorSubject,\n combineLatest,\n debounceTime,\n EMPTY,\n merge,\n Observable,\n of,\n Subscription,\n} from 'rxjs';\nimport {\n filter,\n map,\n shareReplay,\n take,\n tap,\n} from 'rxjs/operators';\nimport { DataGridRowDefDirective } from './data-grid-row-def.directive';\nimport { DataGridValuePipe } from './data-grid-value.pipe';\nimport { IsEmptyPipe } from './is-empty.pipe';\n\nexport enum DataGridMode {\n /**\n * The view cell template is used to display the property value\n */\n PLAIN = 'plain',\n /**\n * The edit cell template is used to display the property value, but the form and all controls are marked as disabled\n */\n FORM = 'form',\n}\n\nfunction IsDataGridMode(value: string): value is DataGridMode {\n return [ DataGridMode.PLAIN, DataGridMode.FORM ].includes(value as any);\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'rxap-data-grid',\n templateUrl: './data-grid.component.html',\n styleUrls: ['./data-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n NgIf,\n NgFor,\n MatButtonModule,\n MatIconModule,\n GetFromObjectPipe,\n ReplacePipe,\n EscapeQuotationMarkPipe,\n RxapFormsModule,\n DataGridValuePipe,\n MatProgressSpinnerModule,\n MatDividerModule,\n NgTemplateOutlet,\n MatFormFieldModule,\n NgClass,\n IsEmptyPipe,\n ]\n})\nexport class DataGridComponent<T extends Record<string, any>> implements OnInit, OnDestroy, AfterContentInit {\n\n public isDevMode = isDevMode();\n\n @Input()\n public header = false;\n\n @Input()\n public dataSource?: DataSource<T>;\n\n public data$!: Observable<T>;\n\n @Input()\n public viewer: DataSourceViewer = this;\n\n @Input()\n public data?: T;\n\n @Input()\n public displayProperties: string[] | null = null;\n\n @Input()\n public hideEmptyProperties = false;\n\n @ContentChildren(DataGridRowDefDirective)\n public rows!: QueryList<DataGridRowDefDirective<T>>;\n @Output()\n public editModeChange = new EventEmitter<{\n mode: boolean,\n data?: T,\n done: () => void\n }>();\n public rows$: Observable<QueryList<DataGridRowDefDirective<T>>> = EMPTY;\n public hasError$: Observable<boolean> = of(false);\n public dataLoading$: Observable<boolean> = of(false);\n public loading$ = new ToggleSubject();\n public readonly isEditMode$: Observable<boolean>;\n public readonly mode$: Observable<DataGridMode>;\n public readonly isFormMode$: Observable<boolean>;\n public readonly isPlainMode$: Observable<boolean>;\n private _editMode$ = new BehaviorSubject<boolean>(false);\n private _mode$ = new BehaviorSubject<DataGridMode>(DataGridMode.PLAIN);\n private _routerEventSubscription: Subscription | null = null;\n\n constructor(\n private readonly cdr: ChangeDetectorRef,\n private readonly router: Router,\n @Optional()\n private readonly formDirective?: FormDirective,\n ) {\n this.isEditMode$ = this._editMode$.asObservable();\n this.mode$ = this._mode$.asObservable();\n this.isFormMode$ = this.mode$.pipe(map(mode => mode === DataGridMode.FORM));\n this.isPlainMode$ = this.mode$.pipe(map(mode => mode === DataGridMode.PLAIN));\n }\n\n @Input()\n public set mode(value: DataGridMode | string) {\n if (IsDataGridMode(value)) {\n this._mode$.next(value);\n } else {\n throw new Error(`The data grid mode only support 'plain' and 'form' - given '${ value }'`);\n }\n }\n\n public get isFormModeOrHasAnyEditCells() {\n return this._mode$.value === DataGridMode.FORM || this.hasAnyEditCells;\n }\n\n public get isFormMode() {\n return this._mode$.value === DataGridMode.FORM;\n }\n\n public get hasAnyEditCells() {\n return this.rows?.some(row => !!row.editCell) ?? false;\n }\n\n public get isEditMode() {\n return this._editMode$.value;\n }\n\n public set editMode(value: boolean) {\n this._editMode$.next(value);\n }\n\n /**\n * @deprecated use the loading$ property instead\n */\n public get loading() {\n return this.loading$.value;\n }\n\n public ngAfterContentInit() {\n this.rows$ = merge(\n of(this.rows),\n this.rows.changes,\n );\n }\n\n public logCurrentFormState() {\n console.log(clone(this.formDirective?.form.value));\n }\n\n public ngOnInit() {\n // resets the edit mode if this component is used in a sibling router path\n // if not reset the edit mode is president after the route changes\n this._routerEventSubscription = this.router.events.pipe(\n filter(event => event instanceof ActivationEnd),\n tap(() => this.disableEditMode()),\n ).subscribe();\n\n if (this.dataSource && this.data) {\n throw new Error('You can not use both dataSource and data input');\n }\n\n let data$: Observable<T> = EMPTY;\n\n if (this.dataSource) {\n data$ = this.dataSource.connect(this.viewer);\n }\n\n if (this.data) {\n data$ = of(this.data);\n }\n\n if (data$ === EMPTY && isDevMode()) {\n console.warn('No data source or data input provided');\n }\n\n this.data$ = data$.pipe(\n debounceTime(100),\n tap(data => this.data = data),\n tap(data => {\n if (this.formDirective && this.isFormMode) {\n this.formDirective.form.patchValue(data, {\n coerce: true,\n strict: true,\n });\n if (this.isFormMode) {\n this.formDirective.form.disable();\n }\n }\n }),\n shareReplay(1),\n );\n if (this.dataSource) {\n this.hasError$ = this.dataSource.hasError$ ?? this.hasError$;\n this.dataLoading$ = this.dataSource.loading$ ?? this.dataLoading$;\n }\n if (this.formDirective && this.isFormMode) {\n this.formDirective.form.disabledWhile(combineLatest([\n this._editMode$,\n this._mode$,\n ]).pipe(\n map(([ editMode, mode ]) => !editMode && mode === 'form'),\n ), {onlySelf: false});\n }\n }\n\n public ngOnDestroy() {\n this.dataSource?.disconnect(this.viewer);\n this._routerEventSubscription?.unsubscribe();\n }\n\n public enableEditMode(skipPatchValue = false) {\n if (!this.isFormModeOrHasAnyEditCells) {\n if (isDevMode()) {\n console.warn('Can not enable edit mode if the mode is not form');\n }\n return;\n }\n if (!this.formDirective) {\n if (isDevMode()) {\n console.warn('Can not enable edit mode without a form directive');\n }\n return;\n }\n this.editMode = true;\n if (!skipPatchValue && this.data) {\n this.formDirective.form.patchValue(this.data, {\n coerce: true,\n strict: true,\n });\n }\n }\n\n public disableEditMode() {\n if (!this.isFormModeOrHasAnyEditCells) {\n if (isDevMode()) {\n console.warn('Can not disable edit mode if the mode is not form');\n }\n return;\n }\n if (!this.formDirective) {\n if (isDevMode()) {\n console.warn('Can not enable edit mode without a form directive');\n }\n return;\n }\n this.editMode = false;\n }\n\n public submit() {\n if (!this.isFormModeOrHasAnyEditCells) {\n if (isDevMode()) {\n console.warn('Can not submit if the mode is not form');\n }\n return;\n }\n if (!this.formDirective) {\n if (isDevMode()) {\n console.warn('Can not support without a form directive');\n }\n return;\n }\n this.loading$.enable();\n this.formDirective.form.markAllAsDirty();\n this.formDirective.form.markAllAsTouched();\n this.formDirective.cdr.markForCheck();\n this.formDirective.rxapSubmit.pipe(\n take(1),\n tap(() => {\n this.disableEditMode();\n }),\n ).subscribe();\n this.formDirective.invalidSubmit.pipe(\n take(1),\n tap(() => {\n this.loading$.disable();\n }),\n ).subscribe();\n this.formDirective.submitError$.pipe(\n filter(Boolean), // if the error is undefined we do not want to disable the loading\n take(1),\n tap(() => {\n this.loading$.disable();\n this.enableEditMode(true);\n }),\n ).subscribe();\n this.formDirective.submitSuccessful$.pipe(\n take(1),\n tap(() => {\n this.loading$.disable();\n this.refresh();\n }),\n ).subscribe();\n this.formDirective.onSubmit(new Event('submit'));\n }\n\n public reset() {\n if (this.formDirective && this.data && this.isFormModeOrHasAnyEditCells) {\n this.formDirective.form.patchValue(this.data, {\n coerce: true,\n strict: true,\n });\n }\n }\n\n public refresh() {\n if (this.dataSource) {\n this.dataSource.refresh();\n } else if (isDevMode()) {\n console.warn('can not refresh the data. data source is not defined');\n }\n }\n\n public cancel() {\n this.reset();\n this.disableEditMode();\n }\n\n retry() {\n this.refresh();\n }\n}\n","<div *ngIf=\"(hasError$ | async)\" class=\"flex flex-col items-center justify-center gap-y-8\">\n <span i18n>Something has gone wrong!</span>\n <button (click)=\"retry()\" i18n mat-stroked-button type=\"button\">Retry</button>\n</div>\n<div *ngIf=\"(dataLoading$ | async)\" class=\"flex flex-col items-center justify-center gap-y-8\">\n <mat-spinner></mat-spinner>\n</div>\n<!-- if the dataSource input is used. It is possible the the hasError$ or loading$ property is === EMPTY. this would\nresults in an null as output. If the === false check is used this can result into the behavior that the data grid is\nnever shown. -->\n<!-- eslint-disable-next-line @angular-eslint/template/no-negated-async -->\n<table *ngIf=\"!(hasError$ | async) && !(dataLoading$ | async)\" class=\"w-full table-auto\">\n <thead *ngIf=\"header\">\n <tr>\n <th class=\"py-2\" i18n>Label</th>\n <th class=\"py-2\" i18n>Value</th>\n </tr>\n </thead>\n <tbody>\n <ng-template [ngForOf]=\"rows$ | async\" let-first=\"first\" let-row ngFor>\n <ng-template\n [ngIf]=\"(!displayProperties || row.isSubHeader || (row.name && displayProperties.includes(row.name))) && (!hideEmptyProperties || false === (data$ | isEmpty: row.name | async))\">\n <!-- region horizontal view -->\n <ng-template [ngIfElse]=\"normal\" [ngIf]=\"row.flip\">\n <tr>\n <td class=\"py-2\" colspan=\"2\">\n <mat-divider></mat-divider>\n </td>\n </tr>\n <tr [attr.data-name]=\"row.name + '-header'\">\n <ng-container\n *ngTemplateOutlet=\"row.headerCell?.template ?? defaultHeaderCell; context: { $implicit: row.name }\"></ng-container>\n </tr>\n <tr [attr.data-name]=\"row.name + '-value'\">\n <ng-template [ngIfThen]=\"content\" [ngIf]=\"row.name\"></ng-template>\n </tr>\n <tr>\n <td class=\"py-4\" colspan=\"2\">\n <mat-divider></mat-divider>\n </td>\n </tr>\n </ng-template>\n <!-- endregion -->\n <!-- region normal view -->\n <ng-template #normal>\n <tr *ngIf=\"!first && row.isSubHeader\">\n <td class=\"py-4\" colspan=\"2\">\n <mat-divider></mat-divider>\n </td>\n </tr>\n <tr [attr.data-name]=\"row.name\" [ngClass]=\"{ 'sub-header text-2xl': row.isSubHeader }\">\n <ng-container\n *ngTemplateOutlet=\"row.headerCell?.template ?? defaultHeaderCell; context: { $implicit: row.name }\"></ng-container>\n <ng-template [ngIfThen]=\"content\" [ngIf]=\"row.name\"></ng-template>\n </tr>\n </ng-template>\n <!-- endregion -->\n </ng-template>\n <ng-template #content>\n <td [attr.colspan]=\"row.flip ? 2 : 1\" [ngClass]=\"{\n 'h-20': row.editCell?.template && (isEditMode || isFormMode) && false,\n }\" class=\"pl-8 pr-4 w-full py-2\">\n <ng-template [ngIfThen]=\"editMode\" [ngIf]=\"row.editCell?.template && (isEditMode || isFormMode)\"></ng-template>\n <ng-template [ngIfThen]=\"viewMode\"\n [ngIf]=\"!row.editCell?.template || (!isEditMode && !isFormMode)\"></ng-template>\n </td>\n <ng-template #viewMode>\n <ng-container\n *ngTemplateOutlet=\"row.cell?.template ?? defaultCell;context: { $implicit: data$ | dataGridValue: row.name | async, data: data$ | async }\"></ng-container>\n </ng-template>\n <ng-template #editMode>\n <ng-container\n *ngTemplateOutlet=\"row.editCell?.template ?? row.cell?.template ?? defaultCell;context: { $implicit: data$ | dataGridValue: row.name | async, data: data$ | async }\"></ng-container>\n </ng-template>\n </ng-template>\n </ng-template>\n </tbody>\n <tfoot *ngIf=\"hasAnyEditCells\">\n <tr>\n <td class=\"py-2\" colspan=\"2\">\n <ng-template [ngIfElse]=\"viewModeButton\" [ngIf]=\"isEditMode\">\n <div class=\"pt-8 flex flex-col gap-y-6\">\n <div class=\"flex flex-row gap-x-6 items-center justify-start\">\n <button (click)=\"submit()\" [disabled]=\"loading$ | async\" color=\"primary\" mat-raised-button type=\"button\">\n <span class=\"flex flex-row gap-x-6 items-center justify-center\">\n <span i18n>Save</span>\n <mat-spinner *ngIf=\"loading$ | async\" color=\"accent\" diameter=\"15\"></mat-spinner>\n </span>\n </button>\n <button (click)=\"reset()\" [disabled]=\"loading$ | async\" mat-stroked-button type=\"button\">\n <ng-container i18n>Reset</ng-container>\n </button>\n <button (click)=\"cancel()\" [disabled]=\"loading$ | async\" color=\"warn\" mat-stroked-button type=\"button\">\n <ng-container i18n>Cancel</ng-container>\n </button>\n <button (click)=\"logCurrentFormState()\" *ngIf=\"isDevMode\" mat-button type=\"button\">\n <ng-container i18n>Current Form State</ng-container>\n </button>\n </div>\n\n <ng-template rxapFormSubmitInvalid>\n <mat-error i18n>Ensure all formula fields are valid.</mat-error>\n </ng-template>\n\n <ng-template let-error rxapFormSubmitFailed>\n <mat-error>{{ error.error?.message ?? error.message }}</mat-error>\n </ng-template>\n\n <ng-template rxapFormSubmitSuccessful>\n <span i18n>Submit successfully.</span>\n </ng-template>\n\n </div>\n </ng-template>\n <ng-template #viewModeButton>\n <div class=\"pt-8\">\n <button (click)=\"enableEditMode()\" color=\"primary\" mat-raised-button type=\"button\">\n <span class=\"flex flex-row gap-x-6 items-center justify-center\">\n <span i18n>Edit</span>\n <mat-spinner *ngIf=\"loading$ | async\" color=\"accent\" diameter=\"15\"></mat-spinner>\n </span>\n </button>\n </div>\n </ng-template>\n </td>\n </tr>\n </tfoot>\n</table>\n\n<ng-template #defaultCell let-value>\n <span>{{ value }}</span>\n</ng-template>\n<ng-template #defaultHeaderCell let-name>\n <th class=\"py-2 whitespace-nowrap\">{{ name }}</th>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { DataGridCellDefDirective } from './data-grid-cell-def.directive';\nimport { DataGridEditCellDefDirective } from './data-grid-edit-cell-def.directive';\nimport { DataGridComponent } from './data-grid.component';\nimport { DataGridHeaderCellDefDirective } from './data-grid-header-cell-def.directive';\nimport { DataGridRowDefDirective } from './data-grid-row-def.directive';\n\n@NgModule({\n imports: [\n DataGridComponent,\n DataGridRowDefDirective,\n DataGridHeaderCellDefDirective,\n DataGridCellDefDirective,\n DataGridEditCellDefDirective,\n ],\n exports: [\n DataGridComponent,\n DataGridRowDefDirective,\n DataGridHeaderCellDefDirective,\n DataGridCellDefDirective,\n DataGridEditCellDefDirective,\n ],\n})\nexport class DataGridModule {\n}\n","// region \nexport * from './lib/data-grid-cell-def.directive';\nexport * from './lib/data-grid-edit-cell-def.directive';\nexport * from './lib/data-grid-header-cell-def.directive';\nexport * from './lib/data-grid-row-def.directive';\nexport * from './lib/data-grid-value.pipe';\nexport * from './lib/data-grid.component';\nexport * from './lib/data-grid.module';\nexport * from './lib/is-empty.pipe';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}