@sumaris-net/ngx-components 18.26.13 → 18.26.14-alpha2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/doc/changelog.md +44 -1
  2. package/esm2022/public_api.mjs +2 -1
  3. package/esm2022/src/app/admin/users/users.mjs +2 -2
  4. package/esm2022/src/app/core/about/about.modal.mjs +74 -13
  5. package/esm2022/src/app/core/account/account.page.mjs +1 -1
  6. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +2 -2
  7. package/esm2022/src/app/core/form/properties/properties.form.mjs +20 -3
  8. package/esm2022/src/app/core/form/properties/properties.table.mjs +3 -3
  9. package/esm2022/src/app/core/menu/menu.component.mjs +3 -3
  10. package/esm2022/src/app/core/register/register.form.mjs +1 -1
  11. package/esm2022/src/app/core/services/account.service.mjs +10 -5
  12. package/esm2022/src/app/core/services/config/core.config.mjs +6 -1
  13. package/esm2022/src/app/core/services/local-settings.service.mjs +3 -7
  14. package/esm2022/src/app/core/services/network.service.mjs +7 -1
  15. package/esm2022/src/app/core/services/platform.service.mjs +37 -7
  16. package/esm2022/src/app/core/settings/settings.page.mjs +55 -22
  17. package/esm2022/src/app/core/table/async-table.class.mjs +28 -15
  18. package/esm2022/src/app/core/table/column/row-field.component.mjs +8 -6
  19. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +1 -1
  20. package/esm2022/src/app/core/table/table.class.mjs +20 -14
  21. package/esm2022/src/app/shared/alerts.mjs +42 -8
  22. package/esm2022/src/app/shared/capacitor/plugins.mjs +2 -1
  23. package/esm2022/src/app/shared/form/field.component.mjs +7 -3
  24. package/esm2022/src/app/shared/gitlab/gitlab.utils.mjs +170 -0
  25. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +5 -5
  26. package/esm2022/src/app/shared/image/gallery/slideshow/image-gallery-slideshow.component.mjs +2 -2
  27. package/esm2022/src/app/shared/image/image.service.mjs +3 -3
  28. package/esm2022/src/app/shared/markdown/markdown.component.mjs +6 -5
  29. package/esm2022/src/app/shared/markdown/markdown.utils.mjs +3 -12
  30. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +2 -2
  31. package/esm2022/src/app/shared/material/material.animations.mjs +7 -6
  32. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +25 -14
  33. package/esm2022/src/app/shared/platforms.mjs +23 -1
  34. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +10 -4
  35. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +41 -4
  36. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +1 -1
  37. package/esm2022/src/app/shared/version/versions.mjs +10 -3
  38. package/esm2022/src/app/social/feed/feed.component.mjs +3 -3
  39. package/esm2022/src/environments/environment.class.mjs +2 -1
  40. package/esm2022/src/environments/environment.mjs +2 -1
  41. package/fesm2022/sumaris-net.ngx-components.mjs +595 -144
  42. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  43. package/package.json +14 -13
  44. package/public_api.d.ts +1 -0
  45. package/src/app/core/about/about.modal.d.ts +9 -2
  46. package/src/app/core/form/entity/entity-editor.class.d.ts +4 -1
  47. package/src/app/core/form/properties/properties.form.d.ts +1 -0
  48. package/src/app/core/services/account.service.d.ts +1 -1
  49. package/src/app/core/services/config/core.config.d.ts +1 -0
  50. package/src/app/core/services/platform.service.d.ts +2 -0
  51. package/src/app/core/settings/settings.page.d.ts +2 -1
  52. package/src/app/core/table/async-table.class.d.ts +15 -3
  53. package/src/app/core/table/column/row-field.component.d.ts +3 -2
  54. package/src/app/core/table/table.class.d.ts +13 -3
  55. package/src/app/shared/alerts.d.ts +39 -4
  56. package/src/app/shared/capacitor/plugins.d.ts +1 -0
  57. package/src/app/shared/form/field.component.d.ts +2 -1
  58. package/src/app/shared/gitlab/gitlab.utils.d.ts +109 -0
  59. package/src/app/shared/image/gallery/image-gallery.component.d.ts +4 -0
  60. package/src/app/shared/markdown/markdown.utils.d.ts +0 -2
  61. package/src/app/shared/material/paginator/material.paginator-i18n.d.ts +5 -1
  62. package/src/app/shared/platforms.d.ts +1 -0
  63. package/src/app/shared/upload-file/upload-file-popover.component.d.ts +5 -1
  64. package/src/app/shared/upload-file/upload-file.component.d.ts +6 -2
  65. package/src/app/shared/upload-file/upload-file.model.d.ts +7 -0
  66. package/src/assets/i18n/en-US.json +4 -1
  67. package/src/assets/i18n/en.json +4 -1
  68. package/src/assets/i18n/fr.json +4 -1
  69. package/src/assets/manifest.json +1 -1
  70. package/src/environments/environment.class.d.ts +1 -0
  71. package/src/theme/_ngx-components.table.scss +5 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sumaris-net/ngx-components",
3
3
  "description": "SUMARiS Angular components",
4
- "version": "18.26.13",
4
+ "version": "18.26.14-alpha2",
5
5
  "author": "contact@e-is.pro",
6
6
  "license": "AGPL-3.0",
7
7
  "readmeFilename": "README.md",
@@ -43,19 +43,20 @@
43
43
  "@awesome-cordova-plugins/core": "^6.16.0",
44
44
  "@awesome-cordova-plugins/downloader": "^6.16.0",
45
45
  "@capacitor-community/native-audio": "^7.0.1",
46
- "@capacitor/android": "^7.4.4",
47
- "@capacitor/app": "^7.1.0",
48
- "@capacitor/browser": "^7.0.3",
49
- "@capacitor/camera": "^7.0.2",
50
- "@capacitor/clipboard": "^7.0.2",
51
- "@capacitor/core": "^7.4.4",
46
+ "@capacitor/android": "^7.4.5",
47
+ "@capacitor/app": "^7.1.2",
48
+ "@capacitor/browser": "^7.0.5",
49
+ "@capacitor/camera": "^7.0.5",
50
+ "@capacitor/clipboard": "^7.0.4",
51
+ "@capacitor/core": "^7.4.5",
52
+ "@capacitor/device": "^7.0.5",
52
53
  "@capacitor/geolocation": "^7.1.6",
53
- "@capacitor/haptics": "^7.0.2",
54
- "@capacitor/ios": "^7.4.4",
55
- "@capacitor/keyboard": "^7.0.3",
56
- "@capacitor/network": "^7.0.3",
57
- "@capacitor/splash-screen": "^7.0.3",
58
- "@capacitor/status-bar": "^7.0.3",
54
+ "@capacitor/haptics": "^7.0.5",
55
+ "@capacitor/ios": "^7.4.5",
56
+ "@capacitor/keyboard": "^7.0.6",
57
+ "@capacitor/network": "^7.0.4",
58
+ "@capacitor/splash-screen": "^7.0.5",
59
+ "@capacitor/status-bar": "^7.0.6",
59
60
  "@capawesome/capacitor-android-edge-to-edge-support": "^7.2.3",
60
61
  "@e-is/cordova-plugin-audiomanagement": "^1.0.3",
61
62
  "@e-is/cordova-plugin-downloader": "^1.2.0",
package/public_api.d.ts CHANGED
@@ -167,6 +167,7 @@ export * from './src/app/shared/markdown/markdown.directive';
167
167
  export * from './src/app/shared/markdown/markdown.component';
168
168
  export * from './src/app/shared/markdown/markdown.modal';
169
169
  export * from './src/app/shared/print/print.service';
170
+ export * from './src/app/shared/gitlab/gitlab.utils';
170
171
  export * from './src/app/core/core.module';
171
172
  export * from './src/app/core/services/model/account.model';
172
173
  export * from './src/app/core/services/model/token.model';
@@ -7,6 +7,8 @@ import { Configuration } from '../services/model/config.model';
7
7
  import { Observable } from 'rxjs';
8
8
  import { NetworkService } from '../services/network.service';
9
9
  import { NodeInfo } from '../services/network.utils';
10
+ import { HttpClient } from '@angular/common/http';
11
+ import { PlatformService } from '../services/platform.service';
10
12
  import * as i0 from "@angular/core";
11
13
  export declare const APP_ABOUT_DEVELOPERS: InjectionToken<Partial<Department>[]>;
12
14
  export declare const APP_ABOUT_PARTNERS: InjectionToken<Partial<Department>[]>;
@@ -15,6 +17,8 @@ export declare class AboutModal implements OnInit, OnDestroy {
15
17
  protected modalController: ModalController;
16
18
  protected configService: ConfigService;
17
19
  protected networkService: NetworkService;
20
+ protected platformService: PlatformService;
21
+ protected http: HttpClient;
18
22
  protected cd: ChangeDetectorRef;
19
23
  protected environment: any;
20
24
  developers: Partial<Department>[];
@@ -28,17 +32,20 @@ export declare class AboutModal implements OnInit, OnDestroy {
28
32
  protected reportIssueUrl: string;
29
33
  protected forumUrl: string;
30
34
  protected helpUrl: string;
35
+ protected changelogUrl: string;
31
36
  protected showVersionDetails: boolean;
32
37
  protected nodeInfo: NodeInfo;
33
38
  protected buildDate: string;
34
39
  protected get allowVersionDetails(): boolean;
35
- constructor(translate: TranslateService, modalController: ModalController, configService: ConfigService, networkService: NetworkService, cd: ChangeDetectorRef, environment: any, developers: Partial<Department>[], partners: Partial<Department>[]);
40
+ constructor(translate: TranslateService, modalController: ModalController, configService: ConfigService, networkService: NetworkService, platformService: PlatformService, http: HttpClient, cd: ChangeDetectorRef, environment: any, developers: Partial<Department>[], partners: Partial<Department>[]);
36
41
  ngOnInit(): void;
37
42
  ngOnDestroy(): void;
38
43
  close(): Promise<void>;
39
44
  protected setConfig(config?: Configuration): void;
45
+ protected getChangelogUrl(config?: Configuration): any;
46
+ protected openChangelog(event: Event): Promise<void | import("@ionic/core").OverlayEventDetail<any>>;
40
47
  protected loadNodeInfo(): Promise<void>;
41
48
  protected getNodeInfo(): Promise<NodeInfo>;
42
- static ɵfac: i0.ɵɵFactoryDeclaration<AboutModal, [null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
49
+ static ɵfac: i0.ɵɵFactoryDeclaration<AboutModal, [null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
43
50
  static ɵcmp: i0.ɵɵComponentDeclaration<AboutModal, "app-about-modal", never, {}, {}, never, never, false, never>;
44
51
  }
@@ -139,7 +139,10 @@ export declare abstract class AppEntityEditor<T extends Entity<T, ID>, S extends
139
139
  * Save data (if dirty and valid), and return it. Otherwise, return nil value.
140
140
  */
141
141
  saveAndGetDataIfValid(): Promise<T | undefined>;
142
- delete(event?: Event, opts?: DO): Promise<boolean>;
142
+ delete(event?: Event, opts?: DO & {
143
+ backdropDismiss?: boolean;
144
+ keyboardClose?: boolean;
145
+ }): Promise<boolean>;
143
146
  reload(): Promise<void>;
144
147
  unload(opts?: {
145
148
  emitEvent?: boolean;
@@ -84,6 +84,7 @@ export declare class AppPropertiesForm<O = any, T extends Property<O> = Property
84
84
  setValue(data: PropertyMap | T[], opts?: {
85
85
  emitEvent?: boolean;
86
86
  }): Promise<void>;
87
+ getRawValueAsJson(): PropertyMap;
87
88
  getValueAsJson(): PropertyMap;
88
89
  clear(): void;
89
90
  protected toggleShowHintKeys(): void;
@@ -209,7 +209,7 @@ export declare class AccountService extends BaseGraphqlService<Account, any, num
209
209
  * Save account into the local storage
210
210
  */
211
211
  protected saveLocally(): Promise<void>;
212
- saveLocalSettingsRemotely(source: LocalSettings): Promise<void>;
212
+ saveLocalSettingsRemotely(source: LocalSettings, force?: boolean): Promise<void>;
213
213
  /**
214
214
  * Create or update an user account
215
215
  *
@@ -21,6 +21,7 @@ export declare const CORE_CONFIG_OPTIONS: Readonly<{
21
21
  HELP_URL: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any, any>;
22
22
  FORUM_URL: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any, any>;
23
23
  REPORT_ISSUE_URL: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any, any>;
24
+ CHANGELOG_URL: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any, any>;
24
25
  PRIVACY_POLICY_URL: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any, any>;
25
26
  TERMS_OF_USE_URL: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any, any>;
26
27
  LOGO_LARGE: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any, any>;
@@ -19,6 +19,7 @@ import { OpenOptions } from '@capacitor/browser';
19
19
  import { ILoggingService } from '../../shared/logging/logger.model';
20
20
  import { Clipboard as CdkClipboard } from '@angular/cdk/clipboard';
21
21
  import { WriteOptions } from '@capacitor/clipboard/dist/esm/definitions';
22
+ import { DeviceInfo } from '@capacitor/device';
22
23
  import * as i0 from "@angular/core";
23
24
  export declare const AndroidOsEnvironment: Readonly<{
24
25
  DIRECTORY_DOWNLOADS: "Download";
@@ -112,6 +113,7 @@ export declare class PlatformService extends StartableService {
112
113
  }) => void): Promise<Subscription>;
113
114
  showToast(opts: ShowToastOptions): Promise<HTMLIonToastElement>;
114
115
  closeToast(id?: string): Promise<boolean>;
116
+ getDeviceInfo(): Promise<DeviceInfo>;
115
117
  protected configureTheme(mobile: boolean, win?: any): Promise<void>;
116
118
  protected configureCapacitorPlugins(): Promise<void>;
117
119
  protected configureTranslate(): void;
@@ -52,8 +52,9 @@ export declare class SettingsPage extends AppForm<LocalSettings> implements OnIn
52
52
  save(event?: Event, options?: any): Promise<boolean>;
53
53
  setAccountInheritance(enable: boolean, opts?: {
54
54
  emitEvent?: boolean;
55
+ updateInheritanceValues?: boolean;
55
56
  }): void;
56
- showSelectPeerModal(opts?: Partial<ISelectPeerModalOptions>): Promise<void>;
57
+ showSelectPeerModal(event?: Event, opts?: Partial<ISelectPeerModalOptions>): Promise<void>;
57
58
  protected setForceOffline(value: boolean): void;
58
59
  cancel(event?: Event): Promise<void>;
59
60
  close(_?: Event): Promise<boolean>;
@@ -91,6 +91,7 @@ export declare abstract class AppAsyncTable<T extends IEntity<T, ID>, F = any, I
91
91
  propagateRowError: boolean;
92
92
  permanentSelectionAllowed: boolean;
93
93
  openRowThrottleTime: number;
94
+ loadingDebounceTime: number;
94
95
  defaultSortBy: string;
95
96
  defaultSortDirection: SortDirection;
96
97
  defaultPageSize: number;
@@ -331,6 +332,7 @@ export declare abstract class AppAsyncTable<T extends IEntity<T, ID>, F = any, I
331
332
  translateFormPath(path: string): string;
332
333
  protected editRow(event: Event | undefined, row: AsyncTableElement<T>, opts?: {
333
334
  focusColumn?: string;
335
+ canceling?: boolean;
334
336
  }): Promise<boolean>;
335
337
  /**
336
338
  * Try to select row, by row.id, or by data. WIll use EntityUtils.equals()
@@ -350,6 +352,8 @@ export declare abstract class AppAsyncTable<T extends IEntity<T, ID>, F = any, I
350
352
  }): Promise<boolean>;
351
353
  protected canCancelRows(rows?: AsyncTableElement<T>[], opts?: {
352
354
  interactive?: boolean;
355
+ backdropDismiss?: boolean;
356
+ keyboardClose?: boolean;
353
357
  }): Promise<boolean>;
354
358
  protected saveBeforeAction(saveAction: SaveActionType): Promise<boolean>;
355
359
  /**
@@ -392,9 +396,17 @@ export declare abstract class AppAsyncTable<T extends IEntity<T, ID>, F = any, I
392
396
  protected detectChanges(): void;
393
397
  protected askDeleteConfirmation(event?: Event, rows?: AsyncTableElement<T>[], opts?: {
394
398
  messageKey?: string;
399
+ backdropDismiss?: boolean;
400
+ keyboardClose?: boolean;
401
+ }): Promise<boolean>;
402
+ protected askCancelConfirmation(event?: Event, rows?: AsyncTableElement<T>[], opts?: {
403
+ backdropDismiss?: boolean;
404
+ keyboardClose?: boolean;
405
+ }): Promise<boolean>;
406
+ protected askRestoreConfirmation(event?: Event, opts?: {
407
+ backdropDismiss?: boolean;
408
+ keyboardClose?: boolean;
395
409
  }): Promise<boolean>;
396
- protected askCancelConfirmation(event?: Event, rows?: AsyncTableElement<T>[]): Promise<boolean>;
397
- protected askRestoreConfirmation(event?: Event): Promise<boolean>;
398
410
  protected showToast(opts: ShowToastOptions): Promise<import("@ionic/core").OverlayEventDetail<any>>;
399
411
  protected resetError(opts?: {
400
412
  emitEvent?: boolean;
@@ -442,5 +454,5 @@ export declare abstract class AppAsyncTable<T extends IEntity<T, ID>, F = any, I
442
454
  private startCellValueChanges;
443
455
  private stopCellValueChanges;
444
456
  static ɵfac: i0.ɵɵFactoryDeclaration<AppAsyncTable<any, any, any>, never>;
445
- static ɵdir: i0.ɵɵDirectiveDeclaration<AppAsyncTable<any, any, any>, never, never, { "settingsId": { "alias": "settingsId"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; "i18nColumnPrefix": { "alias": "i18nColumnPrefix"; "required": false; }; "i18nColumnSuffix": { "alias": "i18nColumnSuffix"; "required": false; }; "autoLoad": { "alias": "autoLoad"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "inlineEdition": { "alias": "inlineEdition"; "required": false; }; "focusFirstColumn": { "alias": "focusFirstColumn"; "required": false; }; "confirmBeforeDelete": { "alias": "confirmBeforeDelete"; "required": false; }; "confirmBeforeCancel": { "alias": "confirmBeforeCancel"; "required": false; }; "undoableDeletion": { "alias": "undoableDeletion"; "required": false; }; "saveBeforeDelete": { "alias": "saveBeforeDelete"; "required": false; }; "keepEditedRowOnSave": { "alias": "keepEditedRowOnSave"; "required": false; }; "saveBeforeSort": { "alias": "saveBeforeSort"; "required": false; }; "saveBeforeFilter": { "alias": "saveBeforeFilter"; "required": false; }; "propagateRowError": { "alias": "propagateRowError"; "required": false; }; "permanentSelectionAllowed": { "alias": "permanentSelectionAllowed"; "required": false; }; "openRowThrottleTime": { "alias": "openRowThrottleTime"; "required": false; }; "defaultSortBy": { "alias": "defaultSortBy"; "required": false; }; "defaultSortDirection": { "alias": "defaultSortDirection"; "required": false; }; "defaultPageSize": { "alias": "defaultPageSize"; "required": false; }; "defaultPageSizeOptions": { "alias": "defaultPageSizeOptions"; "required": false; }; "focusColumn": { "alias": "focusColumn"; "required": false; }; "dataSource": { "alias": "dataSource"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "paginator": { "alias": "paginator"; "required": false; }; }, { "onRefresh": "onRefresh"; "onClickRow": "onClickRow"; "onOpenRow": "onOpenRow"; "onNewRow": "onNewRow"; "onStartEditingRow": "onStartEditingRow"; "onConfirmEditCreateRow": "onConfirmEditCreateRow"; "onCancelOrDeleteRow": "onCancelOrDeleteRow"; "onBeforeDeleteRows": "onBeforeDeleteRows"; "onBeforeCancelRows": "onBeforeCancelRows"; "onBeforeSave": "onBeforeSave"; "onAfterDeletedRows": "onAfterDeletedRows"; "onSort": "onSort"; "onDirty": "onDirty"; "onError": "onError"; }, never, never, false, never>;
457
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AppAsyncTable<any, any, any>, never, never, { "settingsId": { "alias": "settingsId"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; "i18nColumnPrefix": { "alias": "i18nColumnPrefix"; "required": false; }; "i18nColumnSuffix": { "alias": "i18nColumnSuffix"; "required": false; }; "autoLoad": { "alias": "autoLoad"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "inlineEdition": { "alias": "inlineEdition"; "required": false; }; "focusFirstColumn": { "alias": "focusFirstColumn"; "required": false; }; "confirmBeforeDelete": { "alias": "confirmBeforeDelete"; "required": false; }; "confirmBeforeCancel": { "alias": "confirmBeforeCancel"; "required": false; }; "undoableDeletion": { "alias": "undoableDeletion"; "required": false; }; "saveBeforeDelete": { "alias": "saveBeforeDelete"; "required": false; }; "keepEditedRowOnSave": { "alias": "keepEditedRowOnSave"; "required": false; }; "saveBeforeSort": { "alias": "saveBeforeSort"; "required": false; }; "saveBeforeFilter": { "alias": "saveBeforeFilter"; "required": false; }; "propagateRowError": { "alias": "propagateRowError"; "required": false; }; "permanentSelectionAllowed": { "alias": "permanentSelectionAllowed"; "required": false; }; "openRowThrottleTime": { "alias": "openRowThrottleTime"; "required": false; }; "loadingDebounceTime": { "alias": "loadingDebounceTime"; "required": false; }; "defaultSortBy": { "alias": "defaultSortBy"; "required": false; }; "defaultSortDirection": { "alias": "defaultSortDirection"; "required": false; }; "defaultPageSize": { "alias": "defaultPageSize"; "required": false; }; "defaultPageSizeOptions": { "alias": "defaultPageSizeOptions"; "required": false; }; "focusColumn": { "alias": "focusColumn"; "required": false; }; "dataSource": { "alias": "dataSource"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "paginator": { "alias": "paginator"; "required": false; }; }, { "onRefresh": "onRefresh"; "onClickRow": "onClickRow"; "onOpenRow": "onOpenRow"; "onNewRow": "onNewRow"; "onStartEditingRow": "onStartEditingRow"; "onConfirmEditCreateRow": "onConfirmEditCreateRow"; "onCancelOrDeleteRow": "onCancelOrDeleteRow"; "onBeforeDeleteRows": "onBeforeDeleteRows"; "onBeforeCancelRows": "onBeforeCancelRows"; "onBeforeSave": "onBeforeSave"; "onAfterDeletedRows": "onAfterDeletedRows"; "onSort": "onSort"; "onDirty": "onDirty"; "onError": "onError"; }, never, never, false, never>;
446
458
  }
@@ -17,7 +17,6 @@ export declare class AppRowField implements OnInit, OnDestroy {
17
17
  headerI18n: string;
18
18
  sortable: boolean;
19
19
  resizable: boolean;
20
- required: boolean;
21
20
  readonly: boolean;
22
21
  sticky: boolean;
23
22
  draggable: boolean;
@@ -33,9 +32,11 @@ export declare class AppRowField implements OnInit, OnDestroy {
33
32
  classList: string;
34
33
  debug: boolean;
35
34
  protected logPrefix: string;
35
+ protected required: boolean;
36
36
  constructor(cd: ChangeDetectorRef, matTable: MatTable<any>);
37
37
  ngOnInit(): void;
38
38
  ngOnDestroy(): void;
39
+ protected onDefinitionChanged(defintion: FormFieldDefinition): void;
39
40
  static ɵfac: i0.ɵɵFactoryDeclaration<AppRowField, never>;
40
- static ɵcmp: i0.ɵɵComponentDeclaration<AppRowField, "app-row-field", never, { "name": { "alias": "name"; "required": false; }; "definition": { "alias": "definition"; "required": false; }; "definitionFn": { "alias": "definitionFn"; "required": false; }; "headerI18n": { "alias": "headerI18n"; "required": false; }; "sortable": { "alias": "sortable"; "required": false; }; "resizable": { "alias": "resizable"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "sticky": { "alias": "sticky"; "required": false; }; "draggable": { "alias": "draggable"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "floatLabel": { "alias": "floatLabel"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "tabindex": { "alias": "tabindex"; "required": false; }; "autofocus": { "alias": "autofocus"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "chipColor": { "alias": "chipColor"; "required": false; }; "classList": { "alias": "class"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; }, {}, never, never, false, never>;
41
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppRowField, "app-row-field", never, { "name": { "alias": "name"; "required": false; }; "definition": { "alias": "definition"; "required": false; }; "definitionFn": { "alias": "definitionFn"; "required": false; }; "headerI18n": { "alias": "headerI18n"; "required": false; }; "sortable": { "alias": "sortable"; "required": false; }; "resizable": { "alias": "resizable"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "sticky": { "alias": "sticky"; "required": false; }; "draggable": { "alias": "draggable"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "floatLabel": { "alias": "floatLabel"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "tabindex": { "alias": "tabindex"; "required": false; }; "autofocus": { "alias": "autofocus"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "chipColor": { "alias": "chipColor"; "required": false; }; "classList": { "alias": "class"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; }, {}, never, never, false, never>;
41
42
  }
@@ -95,6 +95,7 @@ export declare abstract class AppTable<T extends IEntity<T, ID>, F = any, ID = n
95
95
  propagateRowError: boolean;
96
96
  permanentSelectionAllowed: boolean;
97
97
  openRowThrottleTime: number;
98
+ loadingDebounceTime: number;
98
99
  defaultSortBy: string;
99
100
  defaultSortDirection: SortDirection;
100
101
  defaultPageSize: number;
@@ -312,6 +313,7 @@ export declare abstract class AppTable<T extends IEntity<T, ID>, F = any, ID = n
312
313
  translateFormPath(path: string): string;
313
314
  protected editRow(event: Event | undefined, row: TableElement<T>, opts?: {
314
315
  focusColumn?: string;
316
+ canceling?: boolean;
315
317
  }): boolean;
316
318
  /**
317
319
  * Try to select row, by row.id, or by data. WIll use EntityUtils.equals()
@@ -373,9 +375,17 @@ export declare abstract class AppTable<T extends IEntity<T, ID>, F = any, ID = n
373
375
  protected detectChanges(): void;
374
376
  protected askDeleteConfirmation(event?: Event, rows?: TableElement<T>[], opts?: {
375
377
  messageKey?: string;
378
+ backdropDismiss?: boolean;
379
+ keyboardClose?: boolean;
380
+ }): Promise<boolean>;
381
+ protected askCancelConfirmation(event?: Event, rows?: TableElement<T>[], opts?: {
382
+ backdropDismiss?: boolean;
383
+ keyboardClose?: boolean;
384
+ }): Promise<boolean>;
385
+ protected askRestoreConfirmation(event?: Event, opts?: {
386
+ backdropDismiss?: boolean;
387
+ keyboardClose?: boolean;
376
388
  }): Promise<boolean>;
377
- protected askCancelConfirmation(event?: Event, rows?: TableElement<T>[]): Promise<boolean>;
378
- protected askRestoreConfirmation(event?: Event): Promise<boolean>;
379
389
  protected showToast(opts: ShowToastOptions): Promise<import("@ionic/core").OverlayEventDetail<any>>;
380
390
  protected resetError(opts?: {
381
391
  emitEvent?: boolean;
@@ -423,5 +433,5 @@ export declare abstract class AppTable<T extends IEntity<T, ID>, F = any, ID = n
423
433
  private startCellValueChanges;
424
434
  private stopCellValueChanges;
425
435
  static ɵfac: i0.ɵɵFactoryDeclaration<AppTable<any, any, any>, never>;
426
- static ɵdir: i0.ɵɵDirectiveDeclaration<AppTable<any, any, any>, never, never, { "settingsId": { "alias": "settingsId"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; "i18nColumnPrefix": { "alias": "i18nColumnPrefix"; "required": false; }; "i18nColumnSuffix": { "alias": "i18nColumnSuffix"; "required": false; }; "autoLoad": { "alias": "autoLoad"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "inlineEdition": { "alias": "inlineEdition"; "required": false; }; "focusFirstColumn": { "alias": "focusFirstColumn"; "required": false; }; "confirmBeforeDelete": { "alias": "confirmBeforeDelete"; "required": false; }; "confirmBeforeCancel": { "alias": "confirmBeforeCancel"; "required": false; }; "undoableDeletion": { "alias": "undoableDeletion"; "required": false; }; "saveBeforeDelete": { "alias": "saveBeforeDelete"; "required": false; }; "keepEditedRowOnSave": { "alias": "keepEditedRowOnSave"; "required": false; }; "saveBeforeSort": { "alias": "saveBeforeSort"; "required": false; }; "saveBeforeFilter": { "alias": "saveBeforeFilter"; "required": false; }; "propagateRowError": { "alias": "propagateRowError"; "required": false; }; "permanentSelectionAllowed": { "alias": "permanentSelectionAllowed"; "required": false; }; "openRowThrottleTime": { "alias": "openRowThrottleTime"; "required": false; }; "defaultSortBy": { "alias": "defaultSortBy"; "required": false; }; "defaultSortDirection": { "alias": "defaultSortDirection"; "required": false; }; "defaultPageSize": { "alias": "defaultPageSize"; "required": false; }; "defaultPageSizeOptions": { "alias": "defaultPageSizeOptions"; "required": false; }; "focusColumn": { "alias": "focusColumn"; "required": false; }; "dataSource": { "alias": "dataSource"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "paginator": { "alias": "paginator"; "required": false; }; }, { "onRefresh": "onRefresh"; "onClickRow": "onClickRow"; "onOpenRow": "onOpenRow"; "onNewRow": "onNewRow"; "onStartEditingRow": "onStartEditingRow"; "onConfirmEditCreateRow": "onConfirmEditCreateRow"; "onCancelOrDeleteRow": "onCancelOrDeleteRow"; "onBeforeDeleteRows": "onBeforeDeleteRows"; "onBeforeCancelRows": "onBeforeCancelRows"; "onBeforeSave": "onBeforeSave"; "onAfterDeletedRows": "onAfterDeletedRows"; "onSort": "onSort"; "onDirty": "onDirty"; "onError": "onError"; }, never, never, false, never>;
436
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AppTable<any, any, any>, never, never, { "settingsId": { "alias": "settingsId"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; "i18nColumnPrefix": { "alias": "i18nColumnPrefix"; "required": false; }; "i18nColumnSuffix": { "alias": "i18nColumnSuffix"; "required": false; }; "autoLoad": { "alias": "autoLoad"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; "inlineEdition": { "alias": "inlineEdition"; "required": false; }; "focusFirstColumn": { "alias": "focusFirstColumn"; "required": false; }; "confirmBeforeDelete": { "alias": "confirmBeforeDelete"; "required": false; }; "confirmBeforeCancel": { "alias": "confirmBeforeCancel"; "required": false; }; "undoableDeletion": { "alias": "undoableDeletion"; "required": false; }; "saveBeforeDelete": { "alias": "saveBeforeDelete"; "required": false; }; "keepEditedRowOnSave": { "alias": "keepEditedRowOnSave"; "required": false; }; "saveBeforeSort": { "alias": "saveBeforeSort"; "required": false; }; "saveBeforeFilter": { "alias": "saveBeforeFilter"; "required": false; }; "propagateRowError": { "alias": "propagateRowError"; "required": false; }; "permanentSelectionAllowed": { "alias": "permanentSelectionAllowed"; "required": false; }; "openRowThrottleTime": { "alias": "openRowThrottleTime"; "required": false; }; "loadingDebounceTime": { "alias": "loadingDebounceTime"; "required": false; }; "defaultSortBy": { "alias": "defaultSortBy"; "required": false; }; "defaultSortDirection": { "alias": "defaultSortDirection"; "required": false; }; "defaultPageSize": { "alias": "defaultPageSize"; "required": false; }; "defaultPageSizeOptions": { "alias": "defaultPageSizeOptions"; "required": false; }; "focusColumn": { "alias": "focusColumn"; "required": false; }; "dataSource": { "alias": "dataSource"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "paginator": { "alias": "paginator"; "required": false; }; }, { "onRefresh": "onRefresh"; "onClickRow": "onClickRow"; "onOpenRow": "onOpenRow"; "onNewRow": "onNewRow"; "onStartEditingRow": "onStartEditingRow"; "onConfirmEditCreateRow": "onConfirmEditCreateRow"; "onCancelOrDeleteRow": "onCancelOrDeleteRow"; "onBeforeDeleteRows": "onBeforeDeleteRows"; "onBeforeCancelRows": "onBeforeCancelRows"; "onBeforeSave": "onBeforeSave"; "onAfterDeletedRows": "onAfterDeletedRows"; "onSort": "onSort"; "onDirty": "onDirty"; "onError": "onError"; }, never, never, false, never>;
427
437
  }
@@ -9,8 +9,14 @@ export declare class Alerts {
9
9
  * @param alertCtrl
10
10
  * @param translate
11
11
  * @param event
12
+ * @param opts
13
+ * @param opts.backdropDismiss Whether the alert can be dismissed by clicking the backdrop (default: true)
14
+ * @param opts.keyboardClose Whether the alert can be dismissed by pressing the back button (default: true)
12
15
  */
13
- static askSaveBeforeLeave(alertCtrl: AlertController, translate: TranslateService, event?: Event): Promise<boolean | undefined>;
16
+ static askSaveBeforeLeave(alertCtrl: AlertController, translate: TranslateService, event?: Event, opts?: {
17
+ backdropDismiss?: boolean;
18
+ keyboardClose?: boolean;
19
+ }): Promise<boolean | undefined>;
14
20
  /**
15
21
  * Ask the user to conform an action. If return undefined: user has cancelled
16
22
  *
@@ -19,8 +25,15 @@ export declare class Alerts {
19
25
  * @param immediate is action has an immediate effect ?
20
26
  * @param event
21
27
  * @param interpolateParams
28
+ * @param opts
29
+ * @param opts.backdropDismiss Whether the alert can be dismissed by clicking the backdrop (default: true)
30
+ * @param opts.keyboardClose Whether the alert can be dismissed by pressing the back button (default: true)
22
31
  */
23
- static askActionConfirmation(alertCtrl: AlertController, translate: TranslateService, immediate?: boolean, event?: Event, interpolateParams?: any): Promise<boolean | undefined>;
32
+ static askActionConfirmation(alertCtrl: AlertController, translate: TranslateService, immediate?: boolean, event?: Event, opts?: {
33
+ backdropDismiss?: boolean;
34
+ keyboardClose?: boolean;
35
+ [key: string]: any;
36
+ }, interpolateParams?: any): Promise<boolean | undefined>;
24
37
  /**
25
38
  * Ask the user to confirm. If return undefined: user has cancelled
26
39
  *
@@ -30,8 +43,17 @@ export declare class Alerts {
30
43
  * @param translate
31
44
  * @param event
32
45
  * @param interpolateParams
46
+ * @param opts
47
+ * @param opts.backdropDismiss Whether the alert can be dismissed by clicking the backdrop (default: true)
48
+ * @param opts.keyboardClose Whether the alert can be dismissed by pressing the back button (default: true)
49
+ *
50
+ * Note: interpolateParams and opts are merged for translation for compatibility
33
51
  */
34
- static askConfirmation(messageKey: string, alertCtrl: AlertController, translate: TranslateService, event?: Event, interpolateParams?: any): Promise<boolean | undefined>;
52
+ static askConfirmation(messageKey: string, alertCtrl: AlertController, translate: TranslateService, event?: Event, opts?: {
53
+ backdropDismiss?: boolean;
54
+ keyboardClose?: boolean;
55
+ [key: string]: any;
56
+ }, interpolateParams?: any): Promise<boolean | undefined>;
35
57
  /**
36
58
  * Ask the user to save before leaving. If return undefined: user has cancelled
37
59
  *
@@ -39,17 +61,30 @@ export declare class Alerts {
39
61
  * @param translate
40
62
  * @param event
41
63
  * @param interpolateParams
64
+ * @param opts
65
+ * @param opts.backdropDismiss Whether the alert can be dismissed by clicking the backdrop (default: true)
66
+ * @param opts.keyboardClose Whether the alert can be dismissed by pressing the back button (default: true)
67
+ *
68
+ * Note: interpolateParams and opts are merged for translation for compatibility
42
69
  */
43
- static askDeleteConfirmation(alertCtrl: AlertController, translate: TranslateService, event?: Event, interpolateParams?: any): Promise<boolean | undefined>;
70
+ static askDeleteConfirmation(alertCtrl: AlertController, translate: TranslateService, event?: Event, opts?: {
71
+ backdropDismiss?: boolean;
72
+ keyboardClose?: boolean;
73
+ [key: string]: any;
74
+ }, interpolateParams?: any): Promise<boolean | undefined>;
44
75
  static askSaveBeforeAction(alertCtrl: AlertController, translate: TranslateService, opts?: {
45
76
  valid?: boolean;
46
77
  validMessageI18n?: string;
47
78
  invalidMessageI18n?: string;
79
+ backdropDismiss?: boolean;
80
+ keyboardClose?: boolean;
48
81
  }, interpolateParams?: any): Promise<{
49
82
  confirmed: boolean;
50
83
  save: boolean;
51
84
  } | undefined>;
52
85
  static showError(messageKey: string, alertCtrl: AlertController, translate: TranslateService, opts?: {
53
86
  titleKey?: string;
87
+ backdropDismiss?: boolean;
88
+ keyboardClose?: boolean;
54
89
  }, interpolateParams?: any): Promise<void>;
55
90
  }
@@ -4,5 +4,6 @@ export declare class CapacitorPlugins {
4
4
  static readonly StatusBar = "StatusBar";
5
5
  static readonly Keyboard = "Keyboard";
6
6
  static readonly EdgeToEdge = "EdgeToEdge";
7
+ static readonly Device = "Device";
7
8
  static isAvailable: (name: string) => boolean;
8
9
  }
@@ -41,6 +41,7 @@ export declare class AppFormField implements OnInit, ControlValueAccessor {
41
41
  panelClass: string;
42
42
  panelWidth: string;
43
43
  onKeyupEnter: EventEmitter<any>;
44
+ definitionChanged: EventEmitter<FormFieldDefinition<string, FormFieldType, any, any>>;
44
45
  get value(): any;
45
46
  matInput: ElementRef;
46
47
  autocompleteField: MatAutocompleteField;
@@ -70,7 +71,7 @@ export declare class AppFormField implements OnInit, ControlValueAccessor {
70
71
  }): void;
71
72
  protected updateTabIndex(timeout?: number): void;
72
73
  static ɵfac: i0.ɵɵFactoryDeclaration<AppFormField, [null, null, null, { optional: true; }]>;
73
- static ɵcmp: i0.ɵɵComponentDeclaration<AppFormField, "app-form-field", never, { "definition": { "alias": "definition"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "formControl": { "alias": "formControl"; "required": false; }; "formControlName": { "alias": "formControlName"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "required": { "alias": "required"; "required": false; }; "hideRequiredMarker": { "alias": "hideRequiredMarker"; "required": false; }; "floatLabel": { "alias": "floatLabel"; "required": false; }; "label": { "alias": "label"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "subscriptSizing": { "alias": "subscriptSizing"; "required": false; }; "tabindex": { "alias": "tabindex"; "required": false; }; "autofocus": { "alias": "autofocus"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "chipColor": { "alias": "chipColor"; "required": false; }; "classList": { "alias": "class"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; }, { "onKeyupEnter": "keyup.enter"; }, never, ["[matSuffix]", "mat-error", "[matSuffix]", "mat-error", "[matSuffix]", "mat-error", "[matSuffix]", "mat-error", "[matSuffix]", "mat-error", "[matPrefix]", "[matSuffix]", "mat-error", "[matPrefix]", "[matSuffix]", "mat-error", "mat-error", "[matSuffix]", "mat-error", "[matPrefix]", "[matSuffix]", "mat-error", "[matPrefix]", "[matSuffix]", "mat-error", "[matSuffix]", "mat-error"], false, never>;
74
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppFormField, "app-form-field", never, { "definition": { "alias": "definition"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "formControl": { "alias": "formControl"; "required": false; }; "formControlName": { "alias": "formControlName"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "required": { "alias": "required"; "required": false; }; "hideRequiredMarker": { "alias": "hideRequiredMarker"; "required": false; }; "floatLabel": { "alias": "floatLabel"; "required": false; }; "label": { "alias": "label"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "subscriptSizing": { "alias": "subscriptSizing"; "required": false; }; "tabindex": { "alias": "tabindex"; "required": false; }; "autofocus": { "alias": "autofocus"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "chipColor": { "alias": "chipColor"; "required": false; }; "classList": { "alias": "class"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; }, { "onKeyupEnter": "keyup.enter"; "definitionChanged": "definitionChanged"; }, never, ["[matSuffix]", "mat-error", "[matSuffix]", "mat-error", "[matSuffix]", "mat-error", "[matSuffix]", "mat-error", "[matSuffix]", "mat-error", "[matPrefix]", "[matSuffix]", "mat-error", "[matPrefix]", "[matSuffix]", "mat-error", "mat-error", "[matSuffix]", "mat-error", "[matPrefix]", "[matSuffix]", "mat-error", "[matPrefix]", "[matSuffix]", "mat-error", "[matSuffix]", "mat-error"], false, never>;
74
75
  static ngAcceptInputType_readonly: unknown;
75
76
  static ngAcceptInputType_disabled: unknown;
76
77
  static ngAcceptInputType_compact: unknown;
@@ -0,0 +1,109 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ export interface IGitlabRelease {
3
+ name: string;
4
+ tag_name: string;
5
+ description: string;
6
+ }
7
+ export declare class GitlabUtils {
8
+ static API_V4_PATH: string;
9
+ static API_V4_PROJECTS_PATH: string;
10
+ /**
11
+ * Checks whether a URL points to a Gitlab instance.
12
+ *
13
+ * A URL is considered a Gitlab URL either when its host starts with 'gitlab.'
14
+ * (e.g. 'https://gitlab.ifremer.fr/...'), or when it is a repository file URL
15
+ * (see {@link isRepoFileUrl}) - in which case the host is NOT checked, since
16
+ * a self-hosted Gitlab instance may use a custom domain name.
17
+ *
18
+ * @example
19
+ * GitlabUtils.isGitlabUrl('https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-app'); // true
20
+ * GitlabUtils.isGitlabUrl('https://my-custom-domain.com/foo/-/raw/master/README.md'); // true (repo file URL)
21
+ * GitlabUtils.isGitlabUrl('https://github.com/foo/bar'); // false
22
+ */
23
+ static isGitlabUrl(url: string): boolean;
24
+ /**
25
+ * Checks whether a URL is a Gitlab repository file URL, i.e. a URL used to
26
+ * view a single file in a repository ('/-/blob/') or to download its raw
27
+ * content ('/-/raw/').
28
+ *
29
+ * @example
30
+ * GitlabUtils.isRepoFileUrl('https://gitlab.ifremer.fr/a/b/-/raw/master/README.md'); // true
31
+ * GitlabUtils.isRepoFileUrl('https://gitlab.ifremer.fr/a/b/-/blob/master/README.md'); // true
32
+ * GitlabUtils.isRepoFileUrl('https://gitlab.ifremer.fr/api/v4/projects/a%2Fb'); // false
33
+ */
34
+ static isRepoFileUrl(url: string): boolean;
35
+ /**
36
+ * Converts a repository file URL into its 'raw content' equivalent, by
37
+ * replacing the '/-/blob/' (file viewer) or '/-/tree/' (directory viewer)
38
+ * segment with '/-/raw/'.
39
+ *
40
+ * If the URL is not a repository file URL (see {@link isRepoFileUrl}), it is
41
+ * returned unchanged.
42
+ *
43
+ * @example
44
+ * GitlabUtils.getRawRepoFileUrl('https://gitlab.ifremer.fr/a/b/-/blob/master/README.md');
45
+ * // 'https://gitlab.ifremer.fr/a/b/-/raw/master/README.md'
46
+ */
47
+ static getRawRepoFileUrl(url: string): string;
48
+ /**
49
+ * Checks whether a URL targets the Gitlab REST API (any endpoint under
50
+ * '/api/v4/'). Repository file URLs (see {@link isRepoFileUrl}) are always
51
+ * excluded, even if they happen to contain '/api/v4/' somewhere in their path.
52
+ */
53
+ static isApiUrl(url: string): boolean;
54
+ /**
55
+ * Checks whether a URL targets the Gitlab 'projects' REST API (any endpoint
56
+ * under '/api/v4/projects/'), e.g. project releases, branches, etc.
57
+ */
58
+ static isApiProjectsUrl(url: string): boolean;
59
+ /**
60
+ * Checks whether a URL targets the Gitlab project releases REST API, e.g.
61
+ * 'https://gitlab.ifremer.fr/api/v4/projects/{id}/releases' (all releases)
62
+ * or 'https://gitlab.ifremer.fr/api/v4/projects/{id}/releases/{tag_name}'
63
+ * (a single release).
64
+ */
65
+ static isProjectReleasesApiUrl(url: string): boolean;
66
+ /**
67
+ * Fetches releases from the Gitlab project releases REST API.
68
+ *
69
+ * The given URL can either target the collection endpoint
70
+ * ('.../releases', returning all releases), or a single release endpoint
71
+ * ('.../releases/{tag_name}', returning one release, wrapped into an array).
72
+ *
73
+ * @return the list of releases, an empty array if the API call failed for a
74
+ * single release, or `null` if the URL is not a project releases API URL.
75
+ */
76
+ static getProjectReleases(http: HttpClient, url: string): Promise<IGitlabRelease[]>;
77
+ /**
78
+ * Extracts the URL-encoded project path (e.g. 'group%2Fsubgroup%2Fproject')
79
+ * from a Gitlab 'projects' API URL. The returned value is NOT decoded, so it
80
+ * still contains '%2F' in place of '/'.
81
+ *
82
+ * @example
83
+ * GitlabUtils.getProjectNameFromApiUrl('https://gitlab.ifremer.fr/api/v4/projects/sih-public%2Fsumaris%2Fsumaris-app/releases');
84
+ * // 'sih-public%2Fsumaris%2Fsumaris-app'
85
+ */
86
+ static getProjectNameFromApiUrl(url: string): string;
87
+ /**
88
+ * Resolves the Gitlab web page associated to a URL:
89
+ * - for an API 'projects' URL (see {@link isApiUrl}), this is the project's
90
+ * home page, e.g. 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-app';
91
+ * - for a repository file URL (see {@link isRepoFileUrl}), this is the
92
+ * project's raw content base path (e.g. '.../my-project/-/raw/'), since
93
+ * the project path cannot be reliably distinguished from the file path
94
+ * once slashes are un-encoded.
95
+ *
96
+ * @return `null` if the project page cannot be resolved from the given URL.
97
+ */
98
+ static getProjectPage(url: string): string;
99
+ /**
100
+ * Builds the URL of the Gitlab web page listing a project's releases (e.g.
101
+ * 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-app/-/releases'),
102
+ * optionally anchored on a specific version/tag.
103
+ *
104
+ * @param url any URL from which the project page can be resolved (see {@link getProjectPage})
105
+ * @param version optional tag name (e.g. '2.16.2') appended to the releases page
106
+ * @return `null` if the project page cannot be resolved from the given URL.
107
+ */
108
+ static getProjectReleasePage(url: string, version?: string): string;
109
+ }
@@ -140,6 +140,8 @@ export declare class AppImageGalleryComponent<T extends Image> implements OnInit
140
140
  } & Omit<ImageOptions, 'resultType'>): Promise<void>;
141
141
  delete(event: Event, row: TableElement<T>, opts?: {
142
142
  interactive?: boolean;
143
+ backdropDismiss?: boolean;
144
+ keyboardClose?: boolean;
143
145
  }): Promise<boolean>;
144
146
  toggleViewMode(_?: Event): void;
145
147
  setViewMode(mode: GalleryMode): void;
@@ -171,6 +173,8 @@ export declare class AppImageGalleryComponent<T extends Image> implements OnInit
171
173
  }>): Promise<void>;
172
174
  protected canDeleteRows(rows: TableElement<T>[], opts?: {
173
175
  interactive?: boolean;
176
+ backdropDismiss?: boolean;
177
+ keyboardClose?: boolean;
174
178
  }): Promise<boolean>;
175
179
  protected getImageSizeQueryParams(mode?: GalleryMode | 'modal'): {
176
180
  [key: string]: any;
@@ -20,7 +20,5 @@ export declare class MarkdownUtils {
20
20
  static resolveRelativeUrl(baseUrl: string, relativePath: string, opts?: {
21
21
  absoluteByDefault: boolean;
22
22
  }): string;
23
- static isGitlabUrl(url: string): boolean;
24
- static fixGitlabUrlToRaw(url: string): string;
25
23
  static getRootUrl(url: string): string;
26
24
  }
@@ -1,12 +1,16 @@
1
1
  import { TranslateService } from '@ngx-translate/core';
2
+ import { OnDestroy } from '@angular/core';
2
3
  import { MatPaginatorIntl } from '@angular/material/paginator';
3
4
  import * as i0 from "@angular/core";
4
- export declare class MatPaginatorI18n extends MatPaginatorIntl {
5
+ export declare class MatPaginatorI18n extends MatPaginatorIntl implements OnDestroy {
5
6
  protected translate: TranslateService;
6
7
  ofLabel: string;
8
+ private _subscription;
7
9
  constructor(translate: TranslateService);
10
+ ngOnDestroy(): void;
8
11
  getRangeLabel: (page: number, pageSize: number, length: number) => string;
9
12
  protected _getTranslationValue(translations: any, key: string, defaultValue: string): string;
13
+ private _updateTranslations;
10
14
  static ɵfac: i0.ɵɵFactoryDeclaration<MatPaginatorI18n, never>;
11
15
  static ɵprov: i0.ɵɵInjectableDeclaration<MatPaginatorI18n>;
12
16
  }
@@ -14,3 +14,4 @@ export declare function isAndroid(win: Window): boolean;
14
14
  export declare function isCapacitor(win: any): boolean;
15
15
  export declare function isMobile(win: Window): any;
16
16
  export declare function isPrint(win?: Window): boolean;
17
+ export declare function isWebAnimationsSupported(): boolean;