ngx-edu-sharing-ui 10.0.25 → 10.0.26

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 (32) hide show
  1. package/assets/scss/branding.scss +4 -3
  2. package/assets/scss/material-theme.scss +9 -3
  3. package/assets/scss/mixins.scss +2 -2
  4. package/assets/scss/variables-scss.scss +2 -1
  5. package/assets/scss/variables.scss +7 -1
  6. package/fesm2022/ngx-edu-sharing-ui.mjs +1963 -1812
  7. package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
  8. package/lib/directives/icon.directive.d.ts +3 -1
  9. package/lib/edu-sharing-ui-configuration.d.ts +7 -0
  10. package/lib/edu-sharing-ui.module.d.ts +2 -2
  11. package/lib/index.d.ts +3 -0
  12. package/lib/mds/mds-helper.service.d.ts +14 -2
  13. package/lib/mds-viewer/mds-editor-instance-service.abstract.d.ts +1 -1
  14. package/lib/mds-viewer/mds-viewer.component.d.ts +1 -0
  15. package/lib/mds-viewer/mds-viewer.service.d.ts +14 -1
  16. package/lib/mds-viewer/widget/mds-widget.component.d.ts +14 -12
  17. package/lib/node-entries/entries-model.d.ts +10 -1
  18. package/lib/node-entries/node-entries-global.service.d.ts +3 -0
  19. package/lib/node-entries/node-entries-table/node-entries-table.component.d.ts +2 -0
  20. package/lib/node-entries/node-entries-templates.service.d.ts +4 -0
  21. package/lib/node-entries/node-entries-wrapper.component.d.ts +15 -3
  22. package/lib/node-entries/node-entries.module.d.ts +1 -1
  23. package/lib/node-entries/node-type-badge/node-type-badge.component.d.ts +10 -3
  24. package/lib/pipes/node-image.pipe.d.ts +1 -1
  25. package/lib/services/node-entries.service.d.ts +5 -1
  26. package/lib/services/node-helper.service.d.ts +6 -4
  27. package/lib/services/render-helper.service.d.ts +2 -1
  28. package/lib/translations/translation-loader.d.ts +3 -3
  29. package/lib/types/injection-tokens.d.ts +9 -16
  30. package/lib/types/option-item.d.ts +5 -4
  31. package/lib/util/ui-constants.d.ts +1 -0
  32. package/package.json +1 -1
@@ -22,6 +22,7 @@ export declare class IconDirective implements OnInit, OnDestroy {
22
22
  private renderer;
23
23
  private config;
24
24
  private originalId$;
25
+ private iconContext$;
25
26
  private _id;
26
27
  private _aria;
27
28
  private altTextSpan;
@@ -38,6 +39,7 @@ export declare class IconDirective implements OnInit, OnDestroy {
38
39
  /** If true, an alt text (see above) will be set based on the icon. */
39
40
  set aria(aria: boolean);
40
41
  set esIcon(id: string);
42
+ set esIconContext(context: string);
41
43
  constructor(element: ElementRef<HTMLElement>, http: HttpClient, translate: TranslateService, renderer: Renderer2, config: ConfigService);
42
44
  ngOnInit(): Promise<void>;
43
45
  ngOnDestroy(): void;
@@ -46,5 +48,5 @@ export declare class IconDirective implements OnInit, OnDestroy {
46
48
  private setAltText;
47
49
  private insertAltTextSpan;
48
50
  static ɵfac: i0.ɵɵFactoryDeclaration<IconDirective, [null, null, null, null, { optional: true; }]>;
49
- static ɵdir: i0.ɵɵDirectiveDeclaration<IconDirective, "i[esIcon], i.material-icons", never, { "altText": { "alias": "altText"; "required": false; }; "aria": { "alias": "aria"; "required": false; }; "esIcon": { "alias": "esIcon"; "required": false; }; }, {}, never, never, false, never>;
51
+ static ɵdir: i0.ɵɵDirectiveDeclaration<IconDirective, "i[esIcon], i.material-icons", never, { "altText": { "alias": "altText"; "required": false; }; "aria": { "alias": "aria"; "required": false; }; "esIcon": { "alias": "esIcon"; "required": false; }; "esIconContext": { "alias": "esIconContext"; "required": false; }; }, {}, never, never, false, never>;
50
52
  }
@@ -8,6 +8,13 @@ export declare class EduSharingUiConfiguration {
8
8
  * web page.
9
9
  */
10
10
  isEmbedded: boolean;
11
+ /**
12
+ * A custom base path for the assets directory.
13
+ *
14
+ * This is useful when the application cannot be served from the base HREF set in index.html. This
15
+ * is the case when it is embedded as a web component into another website.
16
+ */
17
+ assetsBasePath?: string;
11
18
  static create(params?: EduSharingUiConfigurationParams): EduSharingUiConfiguration;
12
19
  static ɵfac: i0.ɵɵFactoryDeclaration<EduSharingUiConfiguration, never>;
13
20
  static ɵprov: i0.ɵɵInjectableDeclaration<EduSharingUiConfiguration>;
@@ -1,4 +1,4 @@
1
- import { ModuleWithProviders } from '@angular/core';
1
+ import { ModuleWithProviders, Provider } from '@angular/core';
2
2
  import { EduSharingUiConfigurationParams } from './edu-sharing-ui-configuration';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
@@ -13,7 +13,7 @@ import * as i9 from "./pipes/format-date.pipe";
13
13
  import * as i10 from "./node-entries/list-item-label.pipe";
14
14
  import * as i11 from "./sort-dropdown/sort-dropdown.component";
15
15
  export declare class EduSharingUiModule {
16
- static forRoot(config: EduSharingUiConfigurationParams): ModuleWithProviders<EduSharingUiModule>;
16
+ static forRoot(config: EduSharingUiConfigurationParams, providers?: Provider[]): ModuleWithProviders<EduSharingUiModule>;
17
17
  static ɵfac: i0.ɵɵFactoryDeclaration<EduSharingUiModule, never>;
18
18
  static ɵmod: i0.ɵɵNgModuleDeclaration<EduSharingUiModule, never, [typeof i1.CommonModule, typeof i2.TranslateModule, typeof i3.EduSharingUiCommonModule, typeof i4.ListItemsModule, typeof i5.NodeEntriesModule], [typeof i1.CommonModule, typeof i6.MdsModule, typeof i7.MatTooltipModule, typeof i2.TranslateModule, typeof i3.EduSharingUiCommonModule, typeof i4.ListItemsModule, typeof i5.NodeEntriesModule, typeof i8.NodeImageSizePipe, typeof i9.FormatDatePipe, typeof i4.ListItemsModule, typeof i10.ListItemLabelPipe, typeof i11.SortDropdownComponent]>;
19
19
  static ɵinj: i0.ɵɵInjectorDeclaration<EduSharingUiModule>;
package/lib/index.d.ts CHANGED
@@ -29,6 +29,9 @@ export * from './node-entries/entries-model';
29
29
  export * from './node-entries/items-cap';
30
30
  export * from './node-entries/list-item-label.pipe';
31
31
  export * from './node-entries/node-cache';
32
+ export * from './node-entries/node-rating/node-rating.component';
33
+ export * from './node-entries/node-type-badge/node-type-badge.component';
34
+ export * from './node-entries/node-stats-badges/node-stats-badges.component';
32
35
  export * from './node-entries/node-data-source';
33
36
  export * from './node-entries/node-data-source-remote';
34
37
  export * from './node-entries/node-entries-global.service';
@@ -2,10 +2,21 @@ import { TranslateService } from '@ngx-translate/core';
2
2
  import { AuthenticationService, MdsDefinition, MdsSort, MdsWidget } from 'ngx-edu-sharing-api';
3
3
  import { ListItem } from '../types/list-item';
4
4
  import * as i0 from "@angular/core";
5
+ type ColumnTypeInternal<T extends string> = {
6
+ [k in T]?: ListItem[];
7
+ };
8
+ export type ColumnType = ColumnTypeInternal<'Default' | 'Table'>;
5
9
  export declare class MdsHelperService {
6
10
  private authentication;
11
+ private translate;
7
12
  static getSortInfo(mdsSet: MdsDefinition, name: string): MdsSort;
8
- static getColumns(translate: TranslateService, mdsSet: any, name: string): ListItem[];
13
+ /**
14
+ *
15
+ * get columns as an object structure
16
+ * There are always Columns in the result.Default but there can also be further types
17
+ * See @ColumnType
18
+ */
19
+ getColumns(mdsSet: MdsDefinition, name: string): ColumnType;
9
20
  /**
10
21
  * Finds the appropriate widget with the id, but will not check any widget conditions
11
22
  * @param cid
@@ -13,7 +24,7 @@ export declare class MdsHelperService {
13
24
  * @param widgets
14
25
  */
15
26
  static getWidget(cid: string, template: string | undefined | null, widgets: MdsWidget[]): MdsWidget;
16
- constructor(authentication: AuthenticationService);
27
+ constructor(authentication: AuthenticationService, translate: TranslateService);
17
28
  /**
18
29
  * Same as getWidget, but will also check the widget conditions
19
30
  * @param connector
@@ -35,3 +46,4 @@ export declare class MdsHelperService {
35
46
  static ɵfac: i0.ɵɵFactoryDeclaration<MdsHelperService, never>;
36
47
  static ɵprov: i0.ɵɵInjectableDeclaration<MdsHelperService>;
37
48
  }
49
+ export {};
@@ -10,5 +10,5 @@ export declare abstract class MdsEditorInstanceServiceAbstract {
10
10
  /** Nodes with updated and complete metadata. */
11
11
  nodes$: BehaviorSubject<Node[]>;
12
12
  abstract saveWidgetValue(widget: any): Promise<void>;
13
- abstract fetchDisplayValues(widget: any): Promise<void>;
13
+ abstract fetchDisplayValues(widget: any, additionalKeys?: string[]): Promise<void>;
14
14
  }
@@ -47,6 +47,7 @@ export declare class MdsViewerComponent implements OnChanges {
47
47
  */
48
48
  private prepareHTML;
49
49
  ngOnChanges(changes: SimpleChanges): Promise<void>;
50
+ private hideEmpty;
50
51
  static ɵfac: i0.ɵɵFactoryDeclaration<MdsViewerComponent, never>;
51
52
  static ɵcmp: i0.ɵɵComponentDeclaration<MdsViewerComponent, "es-mds-viewer", never, { "mdsEditorInstanceService": { "alias": "mdsEditorInstanceService"; "required": false; }; "groupId": { "alias": "groupId"; "required": false; }; "setId": { "alias": "setId"; "required": false; }; "data": { "alias": "data"; "required": false; }; "mds": { "alias": "mds"; "required": false; }; "showGroupHeadings": { "alias": "showGroupHeadings"; "required": false; }; "headingLevel": { "alias": "headingLevel"; "required": false; }; }, {}, never, never, false, never>;
52
53
  }
@@ -1,12 +1,25 @@
1
1
  import { ElementRef, QueryList } from '@angular/core';
2
- import { MdsDefinition } from 'ngx-edu-sharing-api';
2
+ import { MdsDefinition, MdsWidget } from 'ngx-edu-sharing-api';
3
3
  import { BehaviorSubject } from 'rxjs';
4
4
  import { Values } from '../services/search-helper.service';
5
+ import { TranslateService } from '@ngx-translate/core';
5
6
  import * as i0 from "@angular/core";
6
7
  export declare class MdsViewerService {
8
+ private translate;
7
9
  container: QueryList<ElementRef>;
8
10
  values$: BehaviorSubject<Values>;
9
11
  mds$: BehaviorSubject<MdsDefinition>;
12
+ constructor(translate: TranslateService);
13
+ getFormattedValue(value: string[], definition: MdsWidget, basicType: string): string[];
14
+ private formatVCard;
15
+ private formatDate;
16
+ private formatText;
17
+ private formatNumber;
18
+ /**
19
+ * returns the basic type for a widget definition
20
+ * @param flat (flatten trees?)
21
+ */
22
+ static getBasicType(definition: MdsWidget, flat?: boolean): string;
10
23
  static ɵfac: i0.ɵɵFactoryDeclaration<MdsViewerService, never>;
11
24
  static ɵprov: i0.ɵɵInjectableDeclaration<MdsViewerService>;
12
25
  }
@@ -1,10 +1,10 @@
1
- import { ElementRef, Injector, OnChanges, OnInit, SimpleChanges } from '@angular/core';
1
+ import { ElementRef, Injector, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
2
2
  import { TranslateService } from '@ngx-translate/core';
3
3
  import { MatRipple } from '@angular/material/core';
4
4
  import { MdsValue, MdsWidget, Suggestion } from 'ngx-edu-sharing-api';
5
5
  import { UIService } from '../../services/ui.service';
6
6
  import { ViewInstanceService } from '../view-instance.service';
7
- import { BehaviorSubject } from 'rxjs';
7
+ import { BehaviorSubject, Subject } from 'rxjs';
8
8
  import { MdsViewerService } from '../mds-viewer.service';
9
9
  import { NodeHelperService } from '../../services/node-helper.service';
10
10
  import { MdsEditorInstanceServiceAbstract } from '../mds-editor-instance-service.abstract';
@@ -23,10 +23,11 @@ export declare enum MdsType {
23
23
  export interface MdsValueList {
24
24
  values: Suggestion[];
25
25
  }
26
- export interface MdsViewerWidget {
26
+ export declare abstract class MdsViewerWidget {
27
27
  definition: MdsWidget;
28
- getInitalValuesAsync(): Promise<InitialValues>;
29
- getInitialDisplayValues(): BehaviorSubject<MdsValueList>;
28
+ focusTrigger: Subject<void>;
29
+ abstract getInitalValuesAsync(): Promise<InitialValues>;
30
+ abstract getInitialDisplayValues(): BehaviorSubject<MdsValueList>;
30
31
  }
31
32
  export declare enum MdsWidgetType {
32
33
  Text = "text",
@@ -55,7 +56,8 @@ export declare enum MdsWidgetType {
55
56
  SingleValueSuggestBadges = "singlevalueSuggestBadges",
56
57
  MultiValueTree = "multivalueTree",
57
58
  DefaultValue = "defaultvalue",
58
- FacetList = "facetList"
59
+ FacetList = "facetList",
60
+ Toggle = "toggle"
59
61
  }
60
62
  export interface InitialValues {
61
63
  /** Values that are initially present in all nodes. */
@@ -72,7 +74,7 @@ export declare enum ValueType {
72
74
  MultiValue = 1,
73
75
  Range = 2
74
76
  }
75
- export declare class MdsWidgetComponent implements OnInit, OnChanges {
77
+ export declare class MdsWidgetComponent implements OnInit, OnDestroy, OnChanges {
76
78
  private mdsEditorInstance;
77
79
  translate: TranslateService;
78
80
  private ui;
@@ -81,6 +83,8 @@ export declare class MdsWidgetComponent implements OnInit, OnChanges {
81
83
  private injector;
82
84
  private nodeHelper;
83
85
  readonly ROUTER_PREFIX: string;
86
+ readonly focusTrigger: Subject<void>;
87
+ readonly destroyed$: Subject<void>;
84
88
  private static readonly inlineEditing;
85
89
  readonly valueType = ValueType.String;
86
90
  widget: MdsViewerWidget;
@@ -107,18 +111,16 @@ export declare class MdsWidgetComponent implements OnInit, OnChanges {
107
111
  value: import("@angular/core").WritableSignal<string[]>;
108
112
  private temporaryValue;
109
113
  constructor(mdsEditorInstance: MdsEditorInstanceServiceAbstract, translate: TranslateService, ui: UIService, viewInstance: ViewInstanceService, mdsViewerService: MdsViewerService, injector: Injector, nodeHelper: NodeHelperService);
114
+ ngOnDestroy(): void;
110
115
  ngOnChanges(changes: SimpleChanges): Promise<void>;
111
116
  ngOnInit(): Promise<void>;
112
117
  getDefinition(): MdsWidget;
113
- getBasicType(): "number" | "text" | "date" | "vcard" | "slider" | "range" | "duration" | "license" | "array" | "tree" | "unknown";
114
118
  supportsInlineEditing(): boolean;
115
119
  private getNodeValues;
116
120
  private getNodeValue;
117
121
  getValue(data: string[]): any[];
118
122
  click(): void;
119
- formatDate(): string[];
120
- formatNumber(): string[];
121
- formatText(): string[];
123
+ formatValue(): string[];
122
124
  finishEdit(instance: any, store?: boolean): Promise<void>;
123
125
  isEditable(): boolean;
124
126
  focus(): Promise<void>;
@@ -132,7 +134,7 @@ export declare class MdsWidgetComponent implements OnInit, OnChanges {
132
134
  */
133
135
  private getRawValue;
134
136
  getSearchParams(key: MdsValue): any;
135
- startEdit(event: MouseEvent): void;
137
+ startEdit(event?: MouseEvent): void;
136
138
  static ɵfac: i0.ɵɵFactoryDeclaration<MdsWidgetComponent, [{ optional: true; }, null, null, null, null, null, null]>;
137
139
  static ɵcmp: i0.ɵɵComponentDeclaration<MdsWidgetComponent, "es-mds-widget", never, { "widget": { "alias": "widget"; "required": false; }; "showCaption": { "alias": "showCaption"; "required": false; }; "inlineEditing": { "alias": "inlineEditing"; "required": false; }; "definition": { "alias": "definition"; "required": false; }; "view": { "alias": "view"; "required": false; }; }, {}, never, never, false, never>;
138
140
  }
@@ -3,7 +3,7 @@ import { SelectionModel } from '@angular/cdk/collections';
3
3
  import { CustomOptions, OptionItem, Target } from '../types/option-item';
4
4
  import { ListItem, ListItemSort } from '../types/list-item';
5
5
  import { CanDrop, DragData, DropAction } from '../types/drag-drop';
6
- import { Node, GenericAuthority } from 'ngx-edu-sharing-api';
6
+ import { GenericAuthority, Node } from 'ngx-edu-sharing-api';
7
7
  import { ActionbarComponent } from '../actionbar/actionbar.component';
8
8
  import { Observable } from 'rxjs';
9
9
  export type NodeRoot = 'MY_FILES' | 'COLLECTION_HOME' | 'SHARED_FILES' | 'MY_SHARED_FILES' | 'TO_ME_SHARED_FILES' | 'WORKFLOW_RECEIVE' | 'RECYCLE' | 'ALL_FILES';
@@ -75,6 +75,15 @@ export type GridConfig = {
75
75
  */
76
76
  layout?: GridLayout;
77
77
  };
78
+ export type TableConfig = {
79
+ dataColumnWidth?: number;
80
+ /**
81
+ * how the columns should be shown (in table mode)
82
+ * limit: limits the max amount based on the avgColumnWidth
83
+ * scroll: horizontal scrolling
84
+ */
85
+ dataColumnLayout: 'scroll' | 'limit';
86
+ };
78
87
  export interface ListEventInterface<T extends NodeEntriesDataType> {
79
88
  updateNodes(nodes: void | T[]): void;
80
89
  onDisplayTypeChange(): Observable<NodeEntriesDisplayType>;
@@ -49,6 +49,9 @@ export declare class NodeEntriesGlobalService {
49
49
  * Registers a custom (node) attribute you want to render via the given template.
50
50
  *
51
51
  * You may also override existing attributes if you want to provide a custom view.
52
+ * each template gets two bindings:
53
+ * node: the current node
54
+ * entriesService: the injected service which provides state & config infos of the current view *
52
55
  */
53
56
  registerCustomFieldRendering(customFieldInfo: CustomFieldInfo): void;
54
57
  static ɵfac: i0.ɵɵFactoryDeclaration<NodeEntriesGlobalService, never>;
@@ -38,6 +38,7 @@ export declare class NodeEntriesTableComponent<T extends NodeEntriesDataType> im
38
38
  columnChooserTrigger: CdkOverlayOrigin;
39
39
  dropdown: DropdownComponent;
40
40
  menuTrigger: MatMenuTrigger;
41
+ isScroll: boolean;
41
42
  dropdownLeft: number;
42
43
  dropdownTop: number;
43
44
  loading: Observable<boolean>;
@@ -52,6 +53,7 @@ export declare class NodeEntriesTableComponent<T extends NodeEntriesDataType> im
52
53
  readonly visibleDataColumns$: rxjs.Observable<ListItem[]>;
53
54
  readonly visibleColumnNames$: rxjs.Observable<string[]>;
54
55
  private destroyed;
56
+ containerWidth$: rxjs.BehaviorSubject<number>;
55
57
  constructor(entriesService: NodeEntriesService<T>, entriesGlobalService: NodeEntriesGlobalService, applicationRef: ApplicationRef, toast: Toast, translations: TranslationsService, nodeHelperService: NodeHelperService, changeDetectorRef: ChangeDetectorRef, ui: UIService, ngZone: NgZone, elementRef: ElementRef<HTMLElement>);
56
58
  ngAfterViewInit(): void;
57
59
  ngOnChanges(changes: SimpleChanges): void;
@@ -22,6 +22,10 @@ export declare class NodeEntriesTemplatesService {
22
22
  * custom container for showing an overlay across each element
23
23
  */
24
24
  overlay: TemplateRef<any>;
25
+ /**
26
+ * custom container for showing an own card layout
27
+ */
28
+ customCard: TemplateRef<any>;
25
29
  constructor();
26
30
  static ɵfac: i0.ɵɵFactoryDeclaration<NodeEntriesTemplatesService, never>;
27
31
  static ɵprov: i0.ɵɵInjectableDeclaration<NodeEntriesTemplatesService>;
@@ -1,7 +1,7 @@
1
1
  import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, NgZone, OnChanges, OnDestroy, OnInit, SimpleChange, TemplateRef, Type, ViewContainerRef } from '@angular/core';
2
2
  import { NodeEntriesTemplatesService } from './node-entries-templates.service';
3
3
  import { NodeEntriesComponent } from './node-entries.component';
4
- import { FetchEvent, GridConfig, InteractionType, ListDragGropConfig, ListEventInterface, ListOptions, ListOptionsConfig, ListSortConfig, NodeClickEvent, NodeEntriesDataType, NodeEntriesDisplayType } from './entries-model';
4
+ import { FetchEvent, GridConfig, InteractionType, ListDragGropConfig, ListEventInterface, ListOptions, ListOptionsConfig, ListSortConfig, NodeClickEvent, NodeEntriesDataType, NodeEntriesDisplayType, TableConfig } from './entries-model';
5
5
  import { NodeDataSource } from './node-data-source';
6
6
  import { CustomSelectionModel, NodeEntriesService } from '../services/node-entries.service';
7
7
  import { OptionItem, Scope } from '../types/option-item';
@@ -11,6 +11,7 @@ import { TemporaryStorageService } from '../services/temporary-storage.service';
11
11
  import { Node, NodeService } from 'ngx-edu-sharing-api';
12
12
  import { OptionsHelperDataService } from '../services/options-helper-data.service';
13
13
  import { UIService } from '../services/ui.service';
14
+ import { ColumnType } from '../mds/mds-helper.service';
14
15
  import * as i0 from "@angular/core";
15
16
  export declare class NodeEntriesWrapperComponent<T extends NodeEntriesDataType> implements AfterViewInit, OnInit, OnChanges, OnDestroy, ListEventInterface<T> {
16
17
  private viewContainerRef;
@@ -40,10 +41,14 @@ export declare class NodeEntriesWrapperComponent<T extends NodeEntriesDataType>
40
41
  * custom area for an overlay "above" each card (i.e. to show disabled infos), only for NodeEntriesDisplayType.SmallGrid & odeEntriesDisplayType.Grid
41
42
  */
42
43
  overlayRef: TemplateRef<any>;
44
+ /**
45
+ * custom card template for each card only for NodeEntriesDisplayType.Grid
46
+ */
47
+ customCard: TemplateRef<any>;
43
48
  nodeEntriesComponentRef: NodeEntriesComponent<T>;
44
49
  dataSource: NodeDataSource<T>;
45
50
  scope: Scope;
46
- columns: ListItem[];
51
+ columns: ColumnType;
47
52
  configureColumns: boolean;
48
53
  checkbox: boolean;
49
54
  /**
@@ -58,6 +63,7 @@ export declare class NodeEntriesWrapperComponent<T extends NodeEntriesDataType>
58
63
  sort: ListSortConfig;
59
64
  dragDrop: ListDragGropConfig<T>;
60
65
  gridConfig: GridConfig;
66
+ tableConfig: TableConfig;
61
67
  /**
62
68
  * This color defines the base color of gradients visually limiting a grid in scroll direction.
63
69
  * Defaults to white.
@@ -94,6 +100,10 @@ export declare class NodeEntriesWrapperComponent<T extends NodeEntriesDataType>
94
100
  * Do not load more data on scroll.
95
101
  */
96
102
  disableInfiniteScroll: boolean;
103
+ /**
104
+ * show the icon column (table view only)
105
+ */
106
+ showIconColumn: boolean;
97
107
  fetchData: EventEmitter<FetchEvent>;
98
108
  clickItem: EventEmitter<NodeClickEvent<T>>;
99
109
  dblClickItem: EventEmitter<NodeClickEvent<T>>;
@@ -102,7 +112,9 @@ export declare class NodeEntriesWrapperComponent<T extends NodeEntriesDataType>
102
112
  displayTypeChanged: EventEmitter<NodeEntriesDisplayType>;
103
113
  customNodeListComponent: Type<NodeEntriesComponent<T>>;
104
114
  private componentRef;
115
+ lastLoadingCompleted: number;
105
116
  private options;
117
+ private dataSourceDestroy$;
106
118
  private destroyed;
107
119
  constructor(viewContainerRef: ViewContainerRef, temporaryStorageService: TemporaryStorageService, ngZone: NgZone, entriesService: NodeEntriesService<T>, nodeService: NodeService, optionsHelper: OptionsHelperDataService, nodeHelperService: NodeHelperService, uiService: UIService, templatesService: NodeEntriesTemplatesService, changeDetectorRef: ChangeDetectorRef, elementRef: ElementRef);
108
120
  ngOnInit(): void;
@@ -137,5 +149,5 @@ export declare class NodeEntriesWrapperComponent<T extends NodeEntriesDataType>
137
149
  resetPagination(): void;
138
150
  deleteNodes(objects: T[]): void;
139
151
  static ɵfac: i0.ɵɵFactoryDeclaration<NodeEntriesWrapperComponent<any>, never>;
140
- static ɵcmp: i0.ɵɵComponentDeclaration<NodeEntriesWrapperComponent<any>, "es-node-entries-wrapper", never, { "dataSource": { "alias": "dataSource"; "required": false; }; "scope": { "alias": "scope"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "configureColumns": { "alias": "configureColumns"; "required": false; }; "checkbox": { "alias": "checkbox"; "required": false; }; "globalOptions": { "alias": "globalOptions"; "required": false; }; "displayType": { "alias": "displayType"; "required": false; }; "elementInteractionType": { "alias": "elementInteractionType"; "required": false; }; "sort": { "alias": "sort"; "required": false; }; "dragDrop": { "alias": "dragDrop"; "required": false; }; "gridConfig": { "alias": "gridConfig"; "required": false; }; "scrollGradientColor": { "alias": "scrollGradientColor"; "required": false; }; "initConfig": { "alias": "initConfig"; "required": false; }; "primaryInstance": { "alias": "primaryInstance"; "required": false; }; "singleClickHint": { "alias": "singleClickHint"; "required": false; }; "disableInfiniteScroll": { "alias": "disableInfiniteScroll"; "required": false; }; }, { "columnsChange": "columnsChange"; "displayTypeChange": "displayTypeChange"; "fetchData": "fetchData"; "clickItem": "clickItem"; "dblClickItem": "dblClickItem"; "sortChange": "sortChange"; "virtualNodesAdded": "virtualNodesAdded"; "displayTypeChanged": "displayTypeChanged"; }, ["titleRef", "emptyRef", "actionAreaRef", "overlayRef"], never, false, never>;
152
+ static ɵcmp: i0.ɵɵComponentDeclaration<NodeEntriesWrapperComponent<any>, "es-node-entries-wrapper", never, { "dataSource": { "alias": "dataSource"; "required": false; }; "scope": { "alias": "scope"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "configureColumns": { "alias": "configureColumns"; "required": false; }; "checkbox": { "alias": "checkbox"; "required": false; }; "globalOptions": { "alias": "globalOptions"; "required": false; }; "displayType": { "alias": "displayType"; "required": false; }; "elementInteractionType": { "alias": "elementInteractionType"; "required": false; }; "sort": { "alias": "sort"; "required": false; }; "dragDrop": { "alias": "dragDrop"; "required": false; }; "gridConfig": { "alias": "gridConfig"; "required": false; }; "tableConfig": { "alias": "tableConfig"; "required": false; }; "scrollGradientColor": { "alias": "scrollGradientColor"; "required": false; }; "initConfig": { "alias": "initConfig"; "required": false; }; "primaryInstance": { "alias": "primaryInstance"; "required": false; }; "singleClickHint": { "alias": "singleClickHint"; "required": false; }; "disableInfiniteScroll": { "alias": "disableInfiniteScroll"; "required": false; }; "showIconColumn": { "alias": "showIconColumn"; "required": false; }; }, { "columnsChange": "columnsChange"; "displayTypeChange": "displayTypeChange"; "fetchData": "fetchData"; "clickItem": "clickItem"; "dblClickItem": "dblClickItem"; "sortChange": "sortChange"; "virtualNodesAdded": "virtualNodesAdded"; "displayTypeChanged": "displayTypeChanged"; }, ["titleRef", "emptyRef", "actionAreaRef", "overlayRef", "customCard"], never, false, never>;
141
153
  }
@@ -38,6 +38,6 @@ import * as i36 from "@angular/material/tooltip";
38
38
  import * as i37 from "@ngx-translate/core";
39
39
  export declare class NodeEntriesModule {
40
40
  static ɵfac: i0.ɵɵFactoryDeclaration<NodeEntriesModule, never>;
41
- static ɵmod: i0.ɵɵNgModuleDeclaration<NodeEntriesModule, [typeof i1.ColumnChooserComponent, typeof i2.DragPreviewComponent, typeof i3.ListItemLabelPipe, typeof i4.NodeEntriesCardComponent, typeof i5.NodeEntriesCardGridComponent, typeof i6.NodeEntriesCardSmallComponent, typeof i7.NodeEntriesTableComponent, typeof i8.NodeRatingComponent, typeof i9.PreviewImageComponent, typeof i10.NodeEntriesComponent, typeof i11.NodeEntriesWrapperComponent, typeof i8.NodeRatingComponent, typeof i12.NodeTypeBadgeComponent, typeof i13.OptionButtonComponent, typeof i9.PreviewImageComponent, typeof i14.SortSelectPanelComponent, typeof i15.NodesDragDirective, typeof i16.NodesDragSourceDirective, typeof i17.NodesDropTargetDirective, typeof i18.NodeEntriesGlobalOptionsComponent, typeof i19.NodeStatsBadgesComponent], [typeof i20.CommonModule, typeof i21.FormsModule, typeof i22.A11yModule, typeof i23.OverlayModule, typeof i24.DragDropModule, typeof i25.EduSharingUiCommonModule, typeof i26.ListItemsModule, typeof i27.MatCheckboxModule, typeof i28.MatButtonModule, typeof i29.MatBadgeModule, typeof i30.MatMenuModule, typeof i31.MatTableModule, typeof i27.MatCheckboxModule, typeof i32.MatPaginatorModule, typeof i33.MatRippleModule, typeof i34.MatSlideToggleModule, typeof i35.MatSortModule, typeof i36.MatTooltipModule, typeof i37.TranslateModule], [typeof i11.NodeEntriesWrapperComponent, typeof i15.NodesDragDirective, typeof i16.NodesDragSourceDirective, typeof i17.NodesDropTargetDirective, typeof i3.ListItemLabelPipe]>;
41
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NodeEntriesModule, [typeof i1.ColumnChooserComponent, typeof i2.DragPreviewComponent, typeof i3.ListItemLabelPipe, typeof i4.NodeEntriesCardComponent, typeof i5.NodeEntriesCardGridComponent, typeof i6.NodeEntriesCardSmallComponent, typeof i7.NodeEntriesTableComponent, typeof i8.NodeRatingComponent, typeof i9.PreviewImageComponent, typeof i10.NodeEntriesComponent, typeof i11.NodeEntriesWrapperComponent, typeof i8.NodeRatingComponent, typeof i12.NodeTypeBadgeComponent, typeof i13.OptionButtonComponent, typeof i9.PreviewImageComponent, typeof i14.SortSelectPanelComponent, typeof i15.NodesDragDirective, typeof i16.NodesDragSourceDirective, typeof i17.NodesDropTargetDirective, typeof i18.NodeEntriesGlobalOptionsComponent, typeof i19.NodeStatsBadgesComponent], [typeof i20.CommonModule, typeof i21.FormsModule, typeof i22.A11yModule, typeof i23.OverlayModule, typeof i24.DragDropModule, typeof i25.EduSharingUiCommonModule, typeof i26.ListItemsModule, typeof i27.MatCheckboxModule, typeof i28.MatButtonModule, typeof i29.MatBadgeModule, typeof i30.MatMenuModule, typeof i31.MatTableModule, typeof i27.MatCheckboxModule, typeof i32.MatPaginatorModule, typeof i33.MatRippleModule, typeof i34.MatSlideToggleModule, typeof i35.MatSortModule, typeof i36.MatTooltipModule, typeof i37.TranslateModule], [typeof i3.ListItemLabelPipe, typeof i11.NodeEntriesWrapperComponent, typeof i8.NodeRatingComponent, typeof i15.NodesDragDirective, typeof i16.NodesDragSourceDirective, typeof i17.NodesDropTargetDirective, typeof i19.NodeStatsBadgesComponent, typeof i12.NodeTypeBadgeComponent]>;
42
42
  static ɵinj: i0.ɵɵInjectorDeclaration<NodeEntriesModule>;
43
43
  }
@@ -2,6 +2,7 @@ import { OnChanges } from '@angular/core';
2
2
  import { Node } from 'ngx-edu-sharing-api';
3
3
  import { NodeEntriesGlobalService } from '../node-entries-global.service';
4
4
  import { NodeHelperService } from '../../services/node-helper.service';
5
+ import { NodeEntriesService } from '../../services/node-entries.service';
5
6
  import * as i0 from "@angular/core";
6
7
  /**
7
8
  * A small circular badge that depicts the node's type.
@@ -11,11 +12,17 @@ import * as i0 from "@angular/core";
11
12
  export declare class NodeTypeBadgeComponent implements OnChanges {
12
13
  nodeHelper: NodeHelperService;
13
14
  private nodeEntriesGlobalService;
15
+ nodeEntriesService: NodeEntriesService<Node>;
14
16
  node: Node;
17
+ /**
18
+ * when true, collection icons will resolve based on their type (editorial, private...)
19
+ * When false, the generic svg image is used
20
+ */
21
+ collectionIcons: boolean;
15
22
  isCollection: boolean;
16
- constructor(nodeHelper: NodeHelperService, nodeEntriesGlobalService: NodeEntriesGlobalService);
23
+ constructor(nodeHelper: NodeHelperService, nodeEntriesGlobalService: NodeEntriesGlobalService, nodeEntriesService: NodeEntriesService<Node>);
17
24
  ngOnChanges(): void;
18
25
  getCustomTemplate(): import("@angular/core").TemplateRef<unknown>;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<NodeTypeBadgeComponent, never>;
20
- static ɵcmp: i0.ɵɵComponentDeclaration<NodeTypeBadgeComponent, "es-node-type-badge", never, { "node": { "alias": "node"; "required": false; }; }, {}, never, never, false, never>;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<NodeTypeBadgeComponent, [null, null, { optional: true; }]>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<NodeTypeBadgeComponent, "es-node-type-badge", never, { "node": { "alias": "node"; "required": false; }; "collectionIcons": { "alias": "collectionIcons"; "required": false; }; }, {}, never, never, false, never>;
21
28
  }
@@ -18,7 +18,7 @@ export declare class NodeImagePipe implements PipeTransform {
18
18
  private repoUrlService;
19
19
  private networkApi;
20
20
  constructor(nodeHelper: NodeHelperService, sanitizer: DomSanitizer, repoUrlService: RepoUrlService, networkApi: NetworkService);
21
- transform(node: Node, preferences: NodeImagePreferences): Observable<SafeResourceUrl>;
21
+ transform(node: Node, preferences?: NodeImagePreferences): Observable<SafeResourceUrl>;
22
22
  private getPreviewUrl;
23
23
  private isEduSharingNode;
24
24
  static ɵfac: i0.ɵɵFactoryDeclaration<NodeImagePipe, never>;
@@ -1,7 +1,7 @@
1
1
  import { SelectionModel } from '@angular/cdk/collections';
2
2
  import { EventEmitter, WritableSignal } from '@angular/core';
3
3
  import { BehaviorSubject } from 'rxjs';
4
- import { ClickSource, FetchEvent, GridConfig, InteractionType, ListDragGropConfig, ListEventInterface, ListOptions, ListSortConfig, NodeClickEvent, NodeEntriesDataType, NodeEntriesDisplayType } from '../node-entries/entries-model';
4
+ import { ClickSource, FetchEvent, GridConfig, InteractionType, ListDragGropConfig, ListEventInterface, ListOptions, ListSortConfig, NodeClickEvent, NodeEntriesDataType, NodeEntriesDisplayType, TableConfig } from '../node-entries/entries-model';
5
5
  import { NodeDataSource } from '../node-entries/node-data-source';
6
6
  import { NodeEntriesGlobalService, PaginationStrategy } from '../node-entries/node-entries-global.service';
7
7
  import { OptionItem, Scope } from '../types/option-item';
@@ -79,11 +79,15 @@ export declare class NodeEntriesService<T extends NodeEntriesDataType> {
79
79
  dblClickItem: EventEmitter<NodeClickEvent<T>>;
80
80
  fetchData: EventEmitter<FetchEvent>;
81
81
  readonly gridConfig$: BehaviorSubject<GridConfig>;
82
+ readonly tableConfig$: BehaviorSubject<TableConfig>;
82
83
  get gridConfig(): GridConfig;
83
84
  set gridConfig(value: GridConfig);
85
+ get tableConfig(): TableConfig;
86
+ set tableConfig(value: TableConfig);
84
87
  primaryInstance: boolean;
85
88
  singleClickHint: 'dynamic' | 'static';
86
89
  disableInfiniteScroll: boolean;
90
+ showIconColumn: BehaviorSubject<boolean>;
87
91
  scrollGradientColor: WritableSignal<string>;
88
92
  constructor(uiService: UIService, toast: Toast, entriesGlobal: NodeEntriesGlobalService);
89
93
  onClicked({ event, ...data }: NodeClickEvent<T> & {
@@ -4,18 +4,19 @@ import * as Workflow from '../types/workflow';
4
4
  import { RepoUrlService } from './repo-url.service';
5
5
  import { Params } from '@angular/router';
6
6
  import { NodesRightMode } from '../types/option-item';
7
+ import { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';
7
8
  import * as i0 from "@angular/core";
8
9
  export declare class NodeHelperService {
9
10
  protected translate: TranslateService;
10
11
  protected apiHelpersService: ApiHelpersService;
11
12
  protected networkService: NetworkService;
12
13
  protected configService: ConfigService;
14
+ protected configuration: EduSharingUiConfiguration;
13
15
  protected repoUrlService: RepoUrlService;
14
- private assetsBasePath;
15
16
  readonly LICENSE_URLS: {
16
17
  [key: string]: string;
17
18
  };
18
- constructor(translate: TranslateService, apiHelpersService: ApiHelpersService, networkService: NetworkService, configService: ConfigService, repoUrlService: RepoUrlService, assetsBasePath: string);
19
+ constructor(translate: TranslateService, apiHelpersService: ApiHelpersService, networkService: NetworkService, configService: ConfigService, configuration: EduSharingUiConfiguration, repoUrlService: RepoUrlService);
19
20
  getCollectionScopeInfo(node: Node): {
20
21
  icon: string;
21
22
  scopeName: string;
@@ -53,10 +54,11 @@ export declare class NodeHelperService {
53
54
  getWorkflowStatus(node: Node, useFromConfig?: boolean): Workflow.WorkflowDefinitionStatus;
54
55
  getDefaultWorkflowStatus(useFromConfig?: boolean): Workflow.WorkflowDefinitionStatus;
55
56
  getWorkflows(): Workflow.WorkflowDefinition[];
57
+ getFilenameWithoutExtension(filename: string): string;
56
58
  copyDataToNode<T extends Node | User>(target: T, source: T): void;
57
59
  isNodeCollection(node: Node): boolean;
58
60
  getSourceIconPath(src: string): string;
59
- getNodeLink(mode: 'routerLink' | 'queryParams', node: Node): string | Params;
61
+ getNodeLink(mode: 'routerLink' | 'queryParams', node: Node, short?: boolean): string | Params;
60
62
  /**
61
63
  * Returns true if this node is a copy of another node, just used as a publish target.
62
64
  */
@@ -73,6 +75,6 @@ export declare class NodeHelperService {
73
75
  * Effective: check only rights of the original node this refers to (collection ref). If it is not a collection ref, fallback to local
74
76
  */
75
77
  getNodesRight(nodes: Node[], right: string, mode?: NodesRightMode): boolean;
76
- static ɵfac: i0.ɵɵFactoryDeclaration<NodeHelperService, [null, null, null, null, null, { optional: true; }]>;
78
+ static ɵfac: i0.ɵɵFactoryDeclaration<NodeHelperService, [{ optional: true; }, null, null, null, null, null]>;
77
79
  static ɵprov: i0.ɵɵInjectableDeclaration<NodeHelperService>;
78
80
  }
@@ -17,8 +17,9 @@ export declare class RenderHelperService {
17
17
  private userService;
18
18
  private optionsHelperDataService;
19
19
  constructor(injector: Injector, aboutService: AboutService, nodeApiUnwrapped: NodeServiceUnwrapped, configuration: EduSharingUiConfiguration, userService: UserService, optionsHelperDataService: OptionsHelperDataService);
20
- getRenderData(nodeId: string, version?: string): Promise<CombinedRenderData>;
20
+ getRenderData(nodeId: string, version?: string, repository?: string): Promise<CombinedRenderData>;
21
21
  getRenderDataForLms(encodedNode: string, signature: string, jwt: string, renderUrl: string, encodedUser: string): Promise<CombinedRenderData>;
22
+ prepareRootUrl(): Promise<void>;
22
23
  static ɵfac: i0.ɵɵFactoryDeclaration<RenderHelperService, [null, null, null, null, null, { optional: true; }]>;
23
24
  static ɵprov: i0.ɵɵInjectableDeclaration<RenderHelperService>;
24
25
  }
@@ -3,19 +3,19 @@ import { TranslateLoader } from '@ngx-translate/core';
3
3
  import { ConfigService } from 'ngx-edu-sharing-api';
4
4
  import { Observable } from 'rxjs';
5
5
  import { EduSharingUiConfiguration } from '../edu-sharing-ui-configuration';
6
+ import { I18nConfig } from '../types/injection-tokens';
6
7
  export declare const TRANSLATION_LIST: string[];
7
8
  type Dictionary = {
8
9
  [key: string]: string | Dictionary;
9
10
  };
10
11
  export declare class TranslationLoader implements TranslateLoader {
11
- private assetsBasePath;
12
- private additionalI18nProvider;
13
12
  private http;
14
13
  private configService;
15
14
  private configuration;
15
+ private i18nConfig;
16
16
  private prefix;
17
17
  private suffix;
18
- static create(http: HttpClient, configService: ConfigService, configuration: EduSharingUiConfiguration, assetsBasePath?: string, additionalI18nProvider?: (lang: string) => string[]): TranslationLoader;
18
+ static create(http: HttpClient, configService: ConfigService, configuration: EduSharingUiConfiguration, i18nConfig: I18nConfig): TranslationLoader;
19
19
  private constructor();
20
20
  private readonly source;
21
21
  /**
@@ -1,28 +1,21 @@
1
1
  import { InjectionToken } from '@angular/core';
2
- /**
3
- * A custom base path for the assets directory.
4
- *
5
- * This is useful when the application cannot be served from the base HREF set in index.html. This
6
- * is the case when it is embedded as a web component into another website.
7
- */
8
- export declare const ASSETS_BASE_PATH: InjectionToken<string>;
9
2
  export declare class I18nConfig {
10
3
  /**
11
4
  * shall the user profile be read
12
5
  * If not set, defaults to true
13
6
  */
14
7
  obeyUserProfile?: boolean;
8
+ /**
9
+ * custom additional uris to fetch language files from
10
+ *
11
+ * Might be used if additional angular modules require language data
12
+ *
13
+ * Example
14
+ * {provide: I18N_CONFIG, useValue: { ... }},
15
+ */
16
+ additionalI18nProvider?: (lang: string) => string[];
15
17
  }
16
18
  /**
17
19
  * additional configuration options
18
20
  */
19
21
  export declare const I18N_CONFIG: InjectionToken<I18nConfig>;
20
- /**
21
- * custom additional uris to fetch language files from
22
- *
23
- * Might be used if additional angular modules require language data
24
- *
25
- * Example
26
- *{provide: ADDITIONAL_I18N_PROVIDER, useValue: (lang: string) => { return ['/edu-sharing/assets/i18n/myI18n/' + lang + '.json']}},
27
- */
28
- export declare const ADDITIONAL_I18N_PROVIDER: InjectionToken<(lang: string) => string[]>;
@@ -240,10 +240,11 @@ export declare enum Constrain {
240
240
  ClipboardContent = 10,// Only visible when the clipboard has content
241
241
  AddObjects = 11,// Only visible when it is possible to add objects into the current list
242
242
  HomeRepository = 12,// Only visible when the nodes are from the local (home) repository
243
- User = 13,// Only visible when a user is present and logged in
244
- NoScope = 14,// Only visible when no current scope (i.e "safe" scope) is set
245
- ReurlMode = 15,// Only visible when a reurl is present (called to pick object from lms)
246
- LTIMode = 16
243
+ GuestOrNotLoggedIn = 13,// Only visible when a user is NOT present (guest or not logged in)
244
+ User = 14,// Only visible when a user is present and logged in
245
+ NoScope = 15,// Only visible when no current scope (i.e "safe" scope) is set
246
+ ReurlMode = 16,// Only visible when a reurl is present (called to pick object from lms)
247
+ LTIMode = 17
247
248
  }
248
249
  export declare enum Target {
249
250
  List = 0,// Target is the ListTableComponent
@@ -1,5 +1,6 @@
1
1
  export declare class UIConstants {
2
2
  static ROUTER_PREFIX: string;
3
+ static ROUTER_PREFIX_SHORT: string;
3
4
  static MOBILE_WIDTH: number;
4
5
  static MOBILE_HEIGHT: number;
5
6
  static MOBILE_HEIGHT_WITH_KEYBOARD: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-edu-sharing-ui",
3
- "version": "10.0.25",
3
+ "version": "10.0.26",
4
4
  "license": "GNU GPL v2",
5
5
  "description": "Angular components for Edu-Sharing UX parts",
6
6
  "peerDependencies": {