@paperless/angular 1.42.5 → 1.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,9 @@
1
1
  export * from './table-cell/table-cell.component';
2
2
  export * from './table-column/table-column.component';
3
3
  export * from './table/table.component';
4
+ export * from './table-row-action/table-row-action.component';
4
5
  import { TableCell } from './table-cell/table-cell.component';
5
6
  import { TableColumn } from './table-column/table-column.component';
7
+ import { TableRowAction } from './table-row-action/table-row-action.component';
6
8
  import { Table } from './table/table.component';
7
- export declare const TABLE_COMPONENTS: (typeof TableCell | typeof TableColumn | typeof Table)[];
9
+ export declare const TABLE_COMPONENTS: (typeof TableCell | typeof TableColumn | typeof TableRowAction | typeof Table)[];
@@ -1,10 +1,12 @@
1
- import { EventEmitter, OnChanges, OnInit, QueryList, SimpleChanges, TemplateRef } from '@angular/core';
1
+ import { ChangeDetectorRef, EventEmitter, OnChanges, OnInit, QueryList, SimpleChanges, TemplateRef } from '@angular/core';
2
2
  import { QuickFilter, RowClickEvent } from '@paperless/core';
3
3
  import { IconVariant, IllustrationVariant } from '@paperless/core/dist/types/components';
4
4
  import { BehaviorSubject } from 'rxjs';
5
5
  import { TableColumn } from '../table-column/table-column.component';
6
+ import { TableRowAction } from '../table-row-action/table-row-action.component';
6
7
  import * as i0 from "@angular/core";
7
8
  export declare class Table implements OnInit, OnChanges {
9
+ private _changeDetection;
8
10
  /**
9
11
  * The items to be fed to the table
10
12
  */
@@ -65,7 +67,6 @@ export declare class Table implements OnInit, OnChanges {
65
67
  * The template for amount selected item in the floating menu
66
68
  */
67
69
  floatingMenuAmountSelectedTemplate: any;
68
- floatingMenuContentTemplate: TemplateRef<any> | undefined;
69
70
  /**
70
71
  * Wether the floating menu has been shown atleast once
71
72
  */
@@ -228,6 +229,10 @@ export declare class Table implements OnInit, OnChanges {
228
229
  get columnDefinitions(): QueryList<TableColumn>;
229
230
  filterModalTemplate: TemplateRef<any> | undefined;
230
231
  filterModalShow$: BehaviorSubject<boolean>;
232
+ private _rowActions;
233
+ private _rowActionsSubscriptions;
234
+ set rowActions(v: QueryList<TableRowAction>);
235
+ get rowActions(): QueryList<TableRowAction>;
231
236
  filterModalHeaderText: string;
232
237
  filterModalSaveText: string;
233
238
  filterModalCancelText: string;
@@ -237,8 +242,16 @@ export declare class Table implements OnInit, OnChanges {
237
242
  filterModalShow: EventEmitter<boolean>;
238
243
  filterModalSave: EventEmitter<void>;
239
244
  filterModalReset: EventEmitter<boolean>;
245
+ rowActionsRow$: BehaviorSubject<TableRowAction[]>;
246
+ rowActionsFloating$: BehaviorSubject<TableRowAction[]>;
247
+ isMobile$: BehaviorSubject<boolean>;
248
+ private _resizeTimeout;
249
+ private _inputEnableRowSelection;
250
+ private _inputRowSelectionLimit;
251
+ constructor(_changeDetection: ChangeDetectorRef);
240
252
  ngOnInit(): void;
241
253
  ngOnChanges(changes: SimpleChanges): void;
254
+ onResize(): void;
242
255
  keyDown({ key }: {
243
256
  key: string;
244
257
  }): void;
@@ -264,8 +277,10 @@ export declare class Table implements OnInit, OnChanges {
264
277
  _selectionContainsAll(): boolean;
265
278
  _selectionIndeterminate(): boolean;
266
279
  _rowClick($event: MouseEvent, index: number): void;
280
+ _rowActionClick(action: TableRowAction, rowIndex?: number): void;
267
281
  private _findRow;
268
282
  private _findRowAction;
283
+ private _setRowSelectionData;
269
284
  static ɵfac: i0.ɵɵFactoryDeclaration<Table, never>;
270
- static ɵcmp: i0.ɵɵComponentDeclaration<Table, "p-table-ngx", never, { "items": "items"; "loading": "loading"; "headerLoading": "headerLoading"; "footerLoading": "footerLoading"; "amountOfLoadingRows": "amountOfLoadingRows"; "enableRowSelection": "enableRowSelection"; "rowSelectionLimit": "rowSelectionLimit"; "enableRowClick": "enableRowClick"; "selectedRows": "selectedRows"; "selectionKey": "selectionKey"; "canSelectKey": "canSelectKey"; "enableFloatingMenu": "enableFloatingMenu"; "floatingMenuAmountSelectedText": "floatingMenuAmountSelectedText"; "floatingMenuAmountSelectedTemplate": "floatingMenuAmountSelectedTemplate"; "enableHeader": "enableHeader"; "quickFilters": "quickFilters"; "activeQuickFilterIdentifier": "activeQuickFilterIdentifier"; "enableSearch": "enableSearch"; "query": "query"; "enableFilter": "enableFilter"; "selectedFiltersAmount": "selectedFiltersAmount"; "filterButtonTemplate": "filterButtonTemplate"; "enableAction": "enableAction"; "actionButtonLoading": "actionButtonLoading"; "actionButtonIcon": "actionButtonIcon"; "actionButtonEnabled": "actionButtonEnabled"; "actionButtonText": "actionButtonText"; "actionButtonTemplate": "actionButtonTemplate"; "enableFooter": "enableFooter"; "enablePageSize": "enablePageSize"; "enablePagination": "enablePagination"; "enableExport": "enableExport"; "page": "page"; "total": "total"; "pageSize": "pageSize"; "pageSizeOptions": "pageSizeOptions"; "hideOnSinglePage": "hideOnSinglePage"; "emptyStateType": "emptyStateType"; "emptyStateIllustration": "emptyStateIllustration"; "emptyStateHeader": "emptyStateHeader"; "emptyStateContent": "emptyStateContent"; "emptyStateAction": "emptyStateAction"; "enableEmptyStateAction": "enableEmptyStateAction"; "emptyStateFilteredIllustration": "emptyStateFilteredIllustration"; "emptyStateFilteredHeader": "emptyStateFilteredHeader"; "emptyStateFilteredContent": "emptyStateFilteredContent"; "shadow": "shadow"; "filterModalHeaderText": "filterModalHeaderText"; "filterModalSaveText": "filterModalSaveText"; "filterModalCancelText": "filterModalCancelText"; "filterModalResetText": "filterModalResetText"; "filterModalShowReset": "filterModalShowReset"; "filterModalShowResetMobile": "filterModalShowResetMobile"; }, { "selectedRowsChange": "selectedRowsChange"; "rowClick": "rowClick"; "rowSelected": "rowSelected"; "rowDeselected": "rowDeselected"; "quickFilter": "quickFilter"; "queryChange": "queryChange"; "filter": "filter"; "action": "action"; "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; "export": "export"; "emptyStateActionClick": "emptyStateActionClick"; "filterModalShow": "filterModalShow"; "filterModalSave": "filterModalSave"; "filterModalReset": "filterModalReset"; }, ["floatingMenuContentTemplate", "headerCustomFilterTemplate", "filterModalTemplate", "columnDefinitions"], never, false, never>;
285
+ static ɵcmp: i0.ɵɵComponentDeclaration<Table, "p-table-ngx", never, { "items": "items"; "loading": "loading"; "headerLoading": "headerLoading"; "footerLoading": "footerLoading"; "amountOfLoadingRows": "amountOfLoadingRows"; "enableRowSelection": "enableRowSelection"; "rowSelectionLimit": "rowSelectionLimit"; "enableRowClick": "enableRowClick"; "selectedRows": "selectedRows"; "selectionKey": "selectionKey"; "canSelectKey": "canSelectKey"; "enableFloatingMenu": "enableFloatingMenu"; "floatingMenuAmountSelectedText": "floatingMenuAmountSelectedText"; "floatingMenuAmountSelectedTemplate": "floatingMenuAmountSelectedTemplate"; "enableHeader": "enableHeader"; "quickFilters": "quickFilters"; "activeQuickFilterIdentifier": "activeQuickFilterIdentifier"; "enableSearch": "enableSearch"; "query": "query"; "enableFilter": "enableFilter"; "selectedFiltersAmount": "selectedFiltersAmount"; "filterButtonTemplate": "filterButtonTemplate"; "enableAction": "enableAction"; "actionButtonLoading": "actionButtonLoading"; "actionButtonIcon": "actionButtonIcon"; "actionButtonEnabled": "actionButtonEnabled"; "actionButtonText": "actionButtonText"; "actionButtonTemplate": "actionButtonTemplate"; "enableFooter": "enableFooter"; "enablePageSize": "enablePageSize"; "enablePagination": "enablePagination"; "enableExport": "enableExport"; "page": "page"; "total": "total"; "pageSize": "pageSize"; "pageSizeOptions": "pageSizeOptions"; "hideOnSinglePage": "hideOnSinglePage"; "emptyStateType": "emptyStateType"; "emptyStateIllustration": "emptyStateIllustration"; "emptyStateHeader": "emptyStateHeader"; "emptyStateContent": "emptyStateContent"; "emptyStateAction": "emptyStateAction"; "enableEmptyStateAction": "enableEmptyStateAction"; "emptyStateFilteredIllustration": "emptyStateFilteredIllustration"; "emptyStateFilteredHeader": "emptyStateFilteredHeader"; "emptyStateFilteredContent": "emptyStateFilteredContent"; "shadow": "shadow"; "filterModalHeaderText": "filterModalHeaderText"; "filterModalSaveText": "filterModalSaveText"; "filterModalCancelText": "filterModalCancelText"; "filterModalResetText": "filterModalResetText"; "filterModalShowReset": "filterModalShowReset"; "filterModalShowResetMobile": "filterModalShowResetMobile"; }, { "selectedRowsChange": "selectedRowsChange"; "rowClick": "rowClick"; "rowSelected": "rowSelected"; "rowDeselected": "rowDeselected"; "quickFilter": "quickFilter"; "queryChange": "queryChange"; "filter": "filter"; "action": "action"; "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; "export": "export"; "emptyStateActionClick": "emptyStateActionClick"; "filterModalShow": "filterModalShow"; "filterModalSave": "filterModalSave"; "filterModalReset": "filterModalReset"; }, ["headerCustomFilterTemplate", "filterModalTemplate", "columnDefinitions", "rowActions"], never, false, never>;
271
286
  }
@@ -5,7 +5,7 @@ export declare class TableCell {
5
5
  /**
6
6
  * The variant of the column
7
7
  */
8
- variant: 'default' | 'loading' | 'header';
8
+ variant: 'default' | 'loading' | 'header' | 'actions';
9
9
  /**
10
10
  * The index of the column
11
11
  */
@@ -26,6 +26,10 @@ export declare class TableCell {
26
26
  * The value of the column
27
27
  */
28
28
  value: any;
29
+ /**
30
+ * Wether the table has actions
31
+ */
32
+ tableHasActions: boolean;
29
33
  /**
30
34
  * The checkbox templateRef
31
35
  */
@@ -41,5 +45,5 @@ export declare class TableCell {
41
45
  getColumnClasses(): any;
42
46
  private _getSizes;
43
47
  static ɵfac: i0.ɵɵFactoryDeclaration<TableCell, never>;
44
- static ɵcmp: i0.ɵɵComponentDeclaration<TableCell, "p-table-cell-ngx", never, { "variant": "variant"; "index": "index"; "rowIndex": "rowIndex"; "definition": "definition"; "item": "item"; "value": "value"; "checkbox": "checkbox"; "template": "template"; }, {}, never, never, false, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableCell, "p-table-cell-ngx", never, { "variant": "variant"; "index": "index"; "rowIndex": "rowIndex"; "definition": "definition"; "item": "item"; "value": "value"; "tableHasActions": "tableHasActions"; "checkbox": "checkbox"; "template": "template"; }, {}, never, never, false, never>;
45
49
  }
@@ -0,0 +1,29 @@
1
+ import { ChangeDetectorRef, ElementRef, EventEmitter, NgZone, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { Components } from '@paperless/core';
3
+ import * as i0 from "@angular/core";
4
+ export interface TableRowActionClickEvent {
5
+ item?: any;
6
+ items?: any[];
7
+ multi: boolean;
8
+ ctrlDown: boolean;
9
+ }
10
+ export declare interface TableRowAction extends Omit<Components.PTableRowAction, 'action'> {
11
+ action: EventEmitter<TableRowActionClickEvent>;
12
+ }
13
+ export declare class TableRowAction implements OnChanges {
14
+ private _c;
15
+ protected z: NgZone;
16
+ protected el: HTMLElement;
17
+ /**
18
+ * Event whenever a row is clicked
19
+ */
20
+ action: EventEmitter<TableRowActionClickEvent>;
21
+ /**
22
+ * Event whenever loading has changed
23
+ */
24
+ _loadingChanged: EventEmitter<boolean>;
25
+ constructor(_c: ChangeDetectorRef, z: NgZone, r: ElementRef);
26
+ ngOnChanges(changes: SimpleChanges): void;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableRowAction, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableRowAction, "p-table-row-action", never, { "disabled": "disabled"; "icon": "icon"; "iconFlip": "iconFlip"; "iconOnly": "iconOnly"; "iconRotate": "iconRotate"; "label": "label"; "type": "type"; "loading": "loading"; }, { "action": "action"; "_loadingChanged": "_loadingChanged"; }, never, ["*"], false, never>;
29
+ }
@@ -1,14 +1,12 @@
1
1
  export * from './p-table-custom-filter.directive';
2
2
  export * from './p-table-filter-modal.directive';
3
- export * from './p-table-floating-menu-content.directive';
4
3
  export * from './p-table-footer.directive';
5
4
  export * from './p-table-header.directive';
6
5
  export * from './p-table-ngx.directive';
7
6
  export * from './p-table.directive';
8
7
  import { TableCustomFilterDirective } from './p-table-custom-filter.directive';
9
- import { TableFloatingMenuContentDirective } from './p-table-floating-menu-content.directive';
10
8
  import { TableFooterDirective } from './p-table-footer.directive';
11
9
  import { TableHeaderDirective } from './p-table-header.directive';
12
10
  import { TableNgxDirective } from './p-table-ngx.directive';
13
11
  import { TableDirective } from './p-table.directive';
14
- export declare const TABLE_DIRECTIVES: (typeof TableCustomFilterDirective | typeof TableFloatingMenuContentDirective | typeof TableFooterDirective | typeof TableHeaderDirective | typeof TableNgxDirective | typeof TableDirective)[];
12
+ export declare const TABLE_DIRECTIVES: (typeof TableCustomFilterDirective | typeof TableFooterDirective | typeof TableHeaderDirective | typeof TableNgxDirective | typeof TableDirective)[];
@@ -2,17 +2,17 @@ import * as i0 from "@angular/core";
2
2
  import * as i1 from "./components/table/table.component";
3
3
  import * as i2 from "./components/table-cell/table-cell.component";
4
4
  import * as i3 from "./components/table-column/table-column.component";
5
- import * as i4 from "./directives/p-table-footer.directive";
6
- import * as i5 from "./directives/p-table-header.directive";
7
- import * as i6 from "./directives/p-table.directive";
8
- import * as i7 from "./directives/p-table-ngx.directive";
9
- import * as i8 from "./directives/p-table-filter-modal.directive";
10
- import * as i9 from "./directives/p-table-custom-filter.directive";
11
- import * as i10 from "./directives/p-table-floating-menu-content.directive";
5
+ import * as i4 from "./components/table-row-action/table-row-action.component";
6
+ import * as i5 from "./directives/p-table-footer.directive";
7
+ import * as i6 from "./directives/p-table-header.directive";
8
+ import * as i7 from "./directives/p-table.directive";
9
+ import * as i8 from "./directives/p-table-ngx.directive";
10
+ import * as i9 from "./directives/p-table-filter-modal.directive";
11
+ import * as i10 from "./directives/p-table-custom-filter.directive";
12
12
  import * as i11 from "@angular/common";
13
13
  import * as i12 from "../../stencil.module";
14
14
  export declare class TableModule {
15
15
  static ɵfac: i0.ɵɵFactoryDeclaration<TableModule, never>;
16
- static ɵmod: i0.ɵɵNgModuleDeclaration<TableModule, [typeof i1.Table, typeof i2.TableCell, typeof i3.TableColumn, typeof i4.TableFooterDirective, typeof i5.TableHeaderDirective, typeof i6.TableDirective, typeof i7.TableNgxDirective, typeof i8.TableFilterModalDirective, typeof i9.TableCustomFilterDirective, typeof i10.TableFloatingMenuContentDirective], [typeof i11.CommonModule, typeof i12.StencilModule], [typeof i1.Table, typeof i2.TableCell, typeof i3.TableColumn, typeof i4.TableFooterDirective, typeof i5.TableHeaderDirective, typeof i6.TableDirective, typeof i7.TableNgxDirective, typeof i8.TableFilterModalDirective, typeof i9.TableCustomFilterDirective, typeof i10.TableFloatingMenuContentDirective]>;
16
+ static ɵmod: i0.ɵɵNgModuleDeclaration<TableModule, [typeof i1.Table, typeof i2.TableCell, typeof i3.TableColumn, typeof i4.TableRowAction, typeof i5.TableFooterDirective, typeof i6.TableHeaderDirective, typeof i7.TableDirective, typeof i8.TableNgxDirective, typeof i9.TableFilterModalDirective, typeof i10.TableCustomFilterDirective], [typeof i11.CommonModule, typeof i12.StencilModule], [typeof i1.Table, typeof i2.TableCell, typeof i3.TableColumn, typeof i4.TableRowAction, typeof i5.TableFooterDirective, typeof i6.TableHeaderDirective, typeof i7.TableDirective, typeof i8.TableNgxDirective, typeof i9.TableFilterModalDirective, typeof i10.TableCustomFilterDirective]>;
17
17
  static ɵinj: i0.ɵɵInjectorDeclaration<TableModule>;
18
18
  }
@@ -265,7 +265,7 @@ export declare class PFloatingMenuItem {
265
265
  protected el: HTMLElement;
266
266
  constructor(c: ChangeDetectorRef, r: ElementRef, z: NgZone);
267
267
  static ɵfac: i0.ɵɵFactoryDeclaration<PFloatingMenuItem, never>;
268
- static ɵcmp: i0.ɵɵComponentDeclaration<PFloatingMenuItem, "p-floating-menu-item", never, { "hover": "hover"; }, {}, never, ["*"], false, never>;
268
+ static ɵcmp: i0.ɵɵComponentDeclaration<PFloatingMenuItem, "p-floating-menu-item", never, { "disabled": "disabled"; "hover": "hover"; }, {}, never, ["*"], false, never>;
269
269
  }
270
270
  export declare interface PFloatingMenuItem extends Components.PFloatingMenuItem {
271
271
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paperless/angular",
3
- "version": "1.42.5",
3
+ "version": "1.44.0",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^13.3.0 || ^14.0.0 || ^15.0.0 || ^17.0.0",
6
6
  "@angular/common": "^13.3.0 || ^14.0.0 || ^15.0.0",
package/paperless.css CHANGED
@@ -192,6 +192,10 @@
192
192
  justify-content: space-between !important
193
193
  }
194
194
 
195
+ .gap-2 {
196
+ gap: 0.5rem !important
197
+ }
198
+
195
199
  .gap-4 {
196
200
  gap: 1rem !important
197
201
  }
@@ -277,6 +281,14 @@
277
281
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1) !important
278
282
  }
279
283
 
284
+ .group:hover .group-hover\:flex {
285
+ display: flex !important
286
+ }
287
+
288
+ .group:hover .group-hover\:hidden {
289
+ display: none !important
290
+ }
291
+
280
292
  @media (min-width: 40rem) {
281
293
  .tablet\:flex {
282
294
  display: flex !important
@@ -1,16 +0,0 @@
1
- import { Directive } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class TableFloatingMenuContentDirective {
4
- constructor(template) {
5
- this.template = template;
6
- }
7
- }
8
- TableFloatingMenuContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TableFloatingMenuContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
9
- TableFloatingMenuContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: TableFloatingMenuContentDirective, selector: "[p-table-floating-menu-content]", ngImport: i0 });
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TableFloatingMenuContentDirective, decorators: [{
11
- type: Directive,
12
- args: [{
13
- selector: '[p-table-floating-menu-content]',
14
- }]
15
- }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicC10YWJsZS1mbG9hdGluZy1tZW51LWNvbnRlbnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFwZXJsZXNzL3NyYy9saWIvbW9kdWxlcy90YWJsZS9kaXJlY3RpdmVzL3AtdGFibGUtZmxvYXRpbmctbWVudS1jb250ZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDOztBQUt2RCxNQUFNLE9BQU8saUNBQWlDO0lBQzFDLFlBQW1CLFFBQTBCO1FBQTFCLGFBQVEsR0FBUixRQUFRLENBQWtCO0lBQUcsQ0FBQzs7OEhBRHhDLGlDQUFpQztrSEFBakMsaUNBQWlDOzJGQUFqQyxpQ0FBaUM7a0JBSDdDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGlDQUFpQztpQkFDOUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3AtdGFibGUtZmxvYXRpbmctbWVudS1jb250ZW50XScsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlRmxvYXRpbmdNZW51Q29udGVudERpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuIl19
@@ -1,8 +0,0 @@
1
- import { TemplateRef } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export declare class TableFloatingMenuContentDirective {
4
- template: TemplateRef<any>;
5
- constructor(template: TemplateRef<any>);
6
- static ɵfac: i0.ɵɵFactoryDeclaration<TableFloatingMenuContentDirective, never>;
7
- static ɵdir: i0.ɵɵDirectiveDeclaration<TableFloatingMenuContentDirective, "[p-table-floating-menu-content]", never, {}, {}, never, never, false, never>;
8
- }