@smartsoft001-mobilems/objects-shell-angular 2.129.0 → 2.130.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.
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { TemplateRef, ModuleWithProviders, Signal, AfterViewInit, WritableSignal, OnInit, ResourceRef } from '@angular/core';
|
|
2
|
+
import { TemplateRef, ModuleWithProviders, Signal, AfterViewInit, WritableSignal, OnInit, ResourceRef, ElementRef } from '@angular/core';
|
|
3
3
|
import * as _smartsoft001_crud_shell_angular from '@smartsoft001/crud-shell-angular';
|
|
4
4
|
import { ICrudModuleOptionsWithoutRoutng, CrudFacade, State as State$1, CrudListPageBaseComponent, CrudItemPageBaseComponent, CrudService, ICrudFilter, ICrudFilterQueryItem } from '@smartsoft001/crud-shell-angular';
|
|
5
5
|
import { IEntity } from '@smartsoft001/domain-core';
|
|
6
6
|
import * as _smartsoft001_mobilems_angular from '@smartsoft001-mobilems/angular';
|
|
7
|
-
import { FiltersBaseComponent, CrudBaseService, SeoService, TranslationService, IDictionaryPage, ICatalogOptions, ICatalog, ISeoMetadata, INamedEntrySource, INamedEntryParts, FilterType, IDictionaryEntry, FiltersContext, ThemeTag, ShareLinkBaseComponent } from '@smartsoft001-mobilems/angular';
|
|
7
|
+
import { FiltersBaseComponent, CrudBaseService, SeoService, TranslationService, IDictionaryPage, ICatalogOptions, ICatalog, ISeoMetadata, INamedEntrySource, INamedEntryParts, FilterType, IDictionaryEntry, FiltersContext, ThemeTag, ShareLinkBaseComponent, FileUrlService, WidgetAudioItem } from '@smartsoft001-mobilems/angular';
|
|
8
8
|
import * as i1 from '@angular/common';
|
|
9
9
|
import { MsObject } from '@smartsoft001-mobilems/objects-domain';
|
|
10
10
|
import * as dist_packages_objects_domain_src from 'dist/packages/objects/domain/src';
|
|
@@ -16,6 +16,9 @@ import { MsFile } from '@smartsoft001-mobilems/models';
|
|
|
16
16
|
import { ListMode } from '@smartsoft001/angular';
|
|
17
17
|
import * as rxjs from 'rxjs';
|
|
18
18
|
import { Observable } from 'rxjs';
|
|
19
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
20
|
+
import { SafeResourceUrl } from '@angular/platform-browser';
|
|
21
|
+
import * as _smartsoft001_mobilems_objects_shell_angular from '@smartsoft001-mobilems/objects-shell-angular';
|
|
19
22
|
|
|
20
23
|
declare class FiltersComponent extends FiltersBaseComponent<MsObject> {
|
|
21
24
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FiltersComponent, never>;
|
|
@@ -1080,5 +1083,540 @@ declare abstract class ObjectsShareResultsBaseComponent extends ShareLinkBaseCom
|
|
|
1080
1083
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectsShareResultsBaseComponent, never, never, { "filter": { "alias": "filter"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1081
1084
|
}
|
|
1082
1085
|
|
|
1083
|
-
|
|
1084
|
-
|
|
1086
|
+
/**
|
|
1087
|
+
* Logic-only base of an object media tab (MOB-1801), from Muzeum Podlasia's
|
|
1088
|
+
* `components/tabs`: the `item` and `formFeatureTypes` inputs and `models` —
|
|
1089
|
+
* the object's `additionalImages` of the given form feature types, sorted by
|
|
1090
|
+
* `position`. The tab keeps its template, styles and `host`.
|
|
1091
|
+
*
|
|
1092
|
+
* `mediaTabFilterModels(models)` is a hook (identity by default) that a tab
|
|
1093
|
+
* overrides to narrow the list further.
|
|
1094
|
+
*
|
|
1095
|
+
* ```ts
|
|
1096
|
+
* export class OtherFilesTabComponent extends ObjectMediaTabBaseComponent<IAnimationObject> {}
|
|
1097
|
+
* ```
|
|
1098
|
+
*/
|
|
1099
|
+
declare abstract class ObjectMediaTabBaseComponent<TMedia extends {
|
|
1100
|
+
id: number | string;
|
|
1101
|
+
}> {
|
|
1102
|
+
protected readonly mediaTabFileUrl: FileUrlService;
|
|
1103
|
+
protected readonly mediaTabTranslate: TranslateService;
|
|
1104
|
+
/** The object whose media the tab shows. */
|
|
1105
|
+
readonly item: _angular_core.InputSignal<MsObject>;
|
|
1106
|
+
/** The form feature types (`FormFeatureType`) the tab shows. */
|
|
1107
|
+
readonly formFeatureTypes: _angular_core.InputSignal<FormFeatureType[]>;
|
|
1108
|
+
/** The object's media of `formFeatureTypes`, sorted by `position`, then through `mediaTabFilterModels`. */
|
|
1109
|
+
readonly models: Signal<TMedia[]>;
|
|
1110
|
+
/** Narrows the sorted list. Identity by default. */
|
|
1111
|
+
protected mediaTabFilterModels(models: TMedia[]): TMedia[];
|
|
1112
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectMediaTabBaseComponent<any>, never>;
|
|
1113
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectMediaTabBaseComponent<any>, never, never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "formFeatureTypes": { "alias": "formFeatureTypes"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
/**
|
|
1117
|
+
* Logic-only base of the media tabs' download button, from Muzeum Podlasia's
|
|
1118
|
+
* `download-button`: `download()` fetches `url`, saves the blob as `filename`
|
|
1119
|
+
* through a temporary `<a download>` and revokes the object URL. It runs only
|
|
1120
|
+
* from a click, so never on the server. The button keeps its template.
|
|
1121
|
+
*
|
|
1122
|
+
* ```ts
|
|
1123
|
+
* export class DownloadButtonComponent extends ObjectDownloadButtonBaseComponent {}
|
|
1124
|
+
* ```
|
|
1125
|
+
*/
|
|
1126
|
+
declare abstract class ObjectDownloadButtonBaseComponent {
|
|
1127
|
+
private readonly downloadButtonDocument;
|
|
1128
|
+
/** The file URL. An empty URL does nothing. */
|
|
1129
|
+
readonly url: _angular_core.InputSignal<string>;
|
|
1130
|
+
/** The name the file is saved under. */
|
|
1131
|
+
readonly filename: _angular_core.InputSignal<string>;
|
|
1132
|
+
/** `true` while the file is being fetched. */
|
|
1133
|
+
readonly isDownloading: _angular_core.WritableSignal<boolean>;
|
|
1134
|
+
download(): Promise<void>;
|
|
1135
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectDownloadButtonBaseComponent, never>;
|
|
1136
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectDownloadButtonBaseComponent, never, never, { "url": { "alias": "url"; "required": true; "isSignal": true; }; "filename": { "alias": "filename"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
/** The `archeoMap` field of an object card (coordinates as strings). */
|
|
1140
|
+
interface IObjectArcheoMap {
|
|
1141
|
+
latitude: string;
|
|
1142
|
+
longitude: string;
|
|
1143
|
+
}
|
|
1144
|
+
/**
|
|
1145
|
+
* Logic-only base of the object map tab, from Muzeum Podlasia's `map-tab`:
|
|
1146
|
+
* the object's `archeoMap` coordinates. The tab keeps its template (the map
|
|
1147
|
+
* component and its zoom).
|
|
1148
|
+
*
|
|
1149
|
+
* ```ts
|
|
1150
|
+
* export class MapTabComponent extends ObjectMapTabBaseComponent {}
|
|
1151
|
+
* ```
|
|
1152
|
+
*/
|
|
1153
|
+
declare abstract class ObjectMapTabBaseComponent {
|
|
1154
|
+
/** The object whose `archeoMap` the tab shows. */
|
|
1155
|
+
readonly item: _angular_core.InputSignal<MsObject>;
|
|
1156
|
+
private readonly mapTabArcheoMap;
|
|
1157
|
+
/** Truthy (the longitude string) when both coordinates are set. */
|
|
1158
|
+
readonly hasCoordinates: _angular_core.Signal<string>;
|
|
1159
|
+
/** `parseFloat(latitude)`, `0` when missing. */
|
|
1160
|
+
readonly latitude: _angular_core.Signal<number>;
|
|
1161
|
+
/** `parseFloat(longitude)`, `0` when missing. */
|
|
1162
|
+
readonly longitude: _angular_core.Signal<number>;
|
|
1163
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectMapTabBaseComponent, never>;
|
|
1164
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectMapTabBaseComponent, never, never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1165
|
+
}
|
|
1166
|
+
|
|
1167
|
+
/**
|
|
1168
|
+
* Logic-only base of an object tab with native `<audio>` players (MOB-1801):
|
|
1169
|
+
* the file URL, title, aria label and download file name of each recording,
|
|
1170
|
+
* shared by `ObjectAudioTabBaseComponent` and
|
|
1171
|
+
* `ObjectAudioDescriptionTabBaseComponent`. The fallback label comes from
|
|
1172
|
+
* `audioMediaTabLabelKey`, read lazily, so a subclass overrides it with a
|
|
1173
|
+
* field.
|
|
1174
|
+
*
|
|
1175
|
+
* ```ts
|
|
1176
|
+
* protected override readonly audioMediaTabLabelKey = 'DETAILS_PAGE.tabs.audio';
|
|
1177
|
+
* ```
|
|
1178
|
+
*/
|
|
1179
|
+
declare abstract class ObjectAudioMediaTabBaseComponent<TMedia extends IAnimationObject = IAnimationObject> extends ObjectMediaTabBaseComponent<TMedia> {
|
|
1180
|
+
/** Translation key of the player label; read lazily, so a subclass can override it. */
|
|
1181
|
+
protected readonly audioMediaTabLabelKey: string;
|
|
1182
|
+
/** The recording's file URL (`noCache`). */
|
|
1183
|
+
getAudioUrl(audio: TMedia): string;
|
|
1184
|
+
/** Alt text in the current language, then the description, then the label key. */
|
|
1185
|
+
getAudioTitle(audio: TMedia): string;
|
|
1186
|
+
/** `<label>: <title>`. */
|
|
1187
|
+
getAudioAriaLabel(audio: TMedia): string;
|
|
1188
|
+
/** The object title, alt text, description or `audio`, plus the extension (`mp3` by default). */
|
|
1189
|
+
getDownloadFilename(audio: TMedia): string;
|
|
1190
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectAudioMediaTabBaseComponent<any>, never>;
|
|
1191
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectAudioMediaTabBaseComponent<any>, never, never, {}, {}, never, never, true, never>;
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
/** Options of `ObjectAudioTabBaseComponent`, passed to `super(options)`. */
|
|
1195
|
+
interface IObjectAudioTabOptions {
|
|
1196
|
+
/**
|
|
1197
|
+
* Keep only recordings with a file (`filePath`), so the "Audio 1, 2…"
|
|
1198
|
+
* numbering counts what is shown (MOB-1872 review). Default `true`
|
|
1199
|
+
* (Muzeum Podlasia); `false` keeps the unfiltered list (sztuki-2, template).
|
|
1200
|
+
*/
|
|
1201
|
+
playableOnly?: boolean;
|
|
1202
|
+
}
|
|
1203
|
+
/**
|
|
1204
|
+
* Logic-only base of the object audio tab (MOB-1801). Muzeum Podlasia renders
|
|
1205
|
+
* the article player (`app-widget-audio` on `WidgetAudioBaseComponent`,
|
|
1206
|
+
* MOB-1805 / MOB-1872) through `widgetItem` and `trackName`; sztuki-2 and the
|
|
1207
|
+
* template render a native `<audio>` with a download button through
|
|
1208
|
+
* `getAudioUrl`, `getAudioTitle`, `getAudioAriaLabel` and
|
|
1209
|
+
* `getDownloadFilename` (`ObjectAudioMediaTabBaseComponent`, label
|
|
1210
|
+
* `DETAILS_PAGE.tabs.audio`), with `playableOnly: false`. The tab keeps its
|
|
1211
|
+
* template, styles and `host`.
|
|
1212
|
+
*
|
|
1213
|
+
* ```ts
|
|
1214
|
+
* export class AudioTabComponent extends ObjectAudioTabBaseComponent {
|
|
1215
|
+
* constructor() {
|
|
1216
|
+
* super(); // sztuki-2 / template: super({ playableOnly: false })
|
|
1217
|
+
* }
|
|
1218
|
+
* }
|
|
1219
|
+
* ```
|
|
1220
|
+
*/
|
|
1221
|
+
declare abstract class ObjectAudioTabBaseComponent extends ObjectAudioMediaTabBaseComponent {
|
|
1222
|
+
protected readonly audioMediaTabLabelKey: string;
|
|
1223
|
+
private readonly audioTabOptions;
|
|
1224
|
+
protected constructor(options?: IObjectAudioTabOptions);
|
|
1225
|
+
/** With `playableOnly` (default) only recordings with a file. */
|
|
1226
|
+
protected mediaTabFilterModels(models: IAnimationObject[]): IAnimationObject[];
|
|
1227
|
+
/**
|
|
1228
|
+
* The recording in the audio widget's shape: the file in `file`, the
|
|
1229
|
+
* heading from the description (without one — a player without a heading,
|
|
1230
|
+
* as in the mock-up).
|
|
1231
|
+
*/
|
|
1232
|
+
widgetItem(audio: IAnimationObject): WidgetAudioItem;
|
|
1233
|
+
/**
|
|
1234
|
+
* The recording's name for screen readers (the player's button and
|
|
1235
|
+
* slider): the alt text in the current language or the description;
|
|
1236
|
+
* several recordings without names — "Audio 1", "Audio 2"… (MOB-1872
|
|
1237
|
+
* review); a single one — `null`.
|
|
1238
|
+
*/
|
|
1239
|
+
trackName(audio: IAnimationObject, index: number): string | null;
|
|
1240
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectAudioTabBaseComponent, never>;
|
|
1241
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectAudioTabBaseComponent, never, never, {}, {}, never, never, true, never>;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
/**
|
|
1245
|
+
* Logic-only base of the object audio description tab (MOB-1801), from Muzeum
|
|
1246
|
+
* Podlasia's `audio-description-tab.component.ts` (sztuki-2 and the template
|
|
1247
|
+
* differ by one template class only): the main image above the players and
|
|
1248
|
+
* the names of each recording (`ObjectAudioMediaTabBaseComponent`, label
|
|
1249
|
+
* `OBJECTS.filters.multimedia.audio`). The tab keeps its template, styles and `host`.
|
|
1250
|
+
*
|
|
1251
|
+
* ```ts
|
|
1252
|
+
* export class AudioDescriptionTabComponent extends ObjectAudioDescriptionTabBaseComponent {}
|
|
1253
|
+
* ```
|
|
1254
|
+
*/
|
|
1255
|
+
declare abstract class ObjectAudioDescriptionTabBaseComponent extends ObjectAudioMediaTabBaseComponent {
|
|
1256
|
+
/** The object's main image (`big` = full resolution without cache); `null` without one or for the no-image placeholder. */
|
|
1257
|
+
readonly mainImageUrl: Signal<string | null>;
|
|
1258
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectAudioDescriptionTabBaseComponent, never>;
|
|
1259
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectAudioDescriptionTabBaseComponent, never, never, {}, {}, never, never, true, never>;
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
/**
|
|
1263
|
+
* Logic-only base of the object documents tab (MOB-1801), from Muzeum
|
|
1264
|
+
* Podlasia's `documents-tab.component.ts` (sztuki-2 and the template differ by
|
|
1265
|
+
* one template class only): each document's URL, display name and download
|
|
1266
|
+
* file name. The tab keeps its template, styles and `host`.
|
|
1267
|
+
*
|
|
1268
|
+
* ```ts
|
|
1269
|
+
* export class DocumentsTabComponent extends ObjectDocumentsTabBaseComponent {}
|
|
1270
|
+
* ```
|
|
1271
|
+
*/
|
|
1272
|
+
declare abstract class ObjectDocumentsTabBaseComponent extends ObjectMediaTabBaseComponent<IAnimationObject> {
|
|
1273
|
+
/** The document's file URL (`noCache`). */
|
|
1274
|
+
getDocumentUrl(doc: IAnimationObject): string;
|
|
1275
|
+
/** Alt text in the current language, then the description, then the upper-case extension (`PDF` by default). */
|
|
1276
|
+
getDocumentDisplayName(doc: IAnimationObject): string;
|
|
1277
|
+
/** Alt text in the current language, description or `document`, plus the extension (`pdf` by default). */
|
|
1278
|
+
getDocumentFileName(doc: IAnimationObject): string;
|
|
1279
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectDocumentsTabBaseComponent, never>;
|
|
1280
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectDocumentsTabBaseComponent, never, never, {}, {}, never, never, true, never>;
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
/**
|
|
1284
|
+
* Logic-only base of an object tab with one video at a time and a dropdown
|
|
1285
|
+
* (MOB-1801), shared by `ObjectAnimationTabBaseComponent` and
|
|
1286
|
+
* `ObjectVideoTabBaseComponent`, 1:1 from Muzeum Podlasia's animation and
|
|
1287
|
+
* video tabs: the selector state, the player reset on a change and the
|
|
1288
|
+
* player helpers. The translation keys and the download fallback name are
|
|
1289
|
+
* abstract fields, read lazily.
|
|
1290
|
+
*/
|
|
1291
|
+
declare abstract class ObjectVideoMediaTabBaseComponent<TMedia extends IAnimationObject = IAnimationObject> extends ObjectMediaTabBaseComponent<TMedia> {
|
|
1292
|
+
/** Translation key of a dropdown option without a name (`<label> <n>`). */
|
|
1293
|
+
protected abstract readonly videoMediaTabOptionLabelKey: string;
|
|
1294
|
+
/** Translation key of the player title and aria label. */
|
|
1295
|
+
protected abstract readonly videoMediaTabTitleKey: string;
|
|
1296
|
+
/** Download file name without the object title, alt text and description. */
|
|
1297
|
+
protected abstract readonly videoMediaTabDownloadName: string;
|
|
1298
|
+
/** The template's native `<video #videoPlayer>`, if it has one. */
|
|
1299
|
+
readonly videoPlayer: Signal<ElementRef<HTMLVideoElement>>;
|
|
1300
|
+
private readonly videoMediaTabPicker;
|
|
1301
|
+
/** The chosen video's key; the first video of each new object. */
|
|
1302
|
+
readonly selectedVideoKey: WritableSignal<string | null>;
|
|
1303
|
+
/** Dropdown options: alt text, description or `<label> <n>`. */
|
|
1304
|
+
readonly videoOptions: Signal<IKeyValue[]>;
|
|
1305
|
+
/** The chosen video, the first one by default. */
|
|
1306
|
+
readonly selectedVideo: Signal<TMedia | null>;
|
|
1307
|
+
/** The dropdown option of `selectedVideo`. */
|
|
1308
|
+
readonly selectedVideoOption: Signal<IKeyValue>;
|
|
1309
|
+
/** Selects a video; a native `#videoPlayer` is paused and rewound. */
|
|
1310
|
+
videoChange(key: string): void;
|
|
1311
|
+
/** The video's file URL (`noCache`). */
|
|
1312
|
+
getVideoUrl(video: TMedia): string;
|
|
1313
|
+
/** Alt text in the current language, then the description, then the title key. */
|
|
1314
|
+
getVideoTitle(video: TMedia): string;
|
|
1315
|
+
/** `<title key>: <title>`. */
|
|
1316
|
+
getVideoAriaLabel(video: TMedia): string;
|
|
1317
|
+
/** The object title, alt text, description or the fallback name, plus the extension (`mp4` by default). */
|
|
1318
|
+
getDownloadFilename(video: TMedia): string;
|
|
1319
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectVideoMediaTabBaseComponent<any>, never>;
|
|
1320
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectVideoMediaTabBaseComponent<any>, never, never, {}, {}, never, never, true, never>;
|
|
1321
|
+
}
|
|
1322
|
+
|
|
1323
|
+
/**
|
|
1324
|
+
* Logic-only base of the object animation tab (MOB-1801), 1:1 from Muzeum
|
|
1325
|
+
* Podlasia (sztuki-2 and the template are identical): options without a name
|
|
1326
|
+
* are `OBJECTS.filters.multimedia.animation <n>`, the player is titled with
|
|
1327
|
+
* `OBJECTS.filters.multimedia.video`, the download falls back to
|
|
1328
|
+
* `animation.mp4`, and `videoChange` pauses and rewinds `#videoPlayer`. The
|
|
1329
|
+
* tab keeps its template, styles and `host`.
|
|
1330
|
+
*
|
|
1331
|
+
* ```ts
|
|
1332
|
+
* export class AnimationTabComponent extends ObjectAnimationTabBaseComponent {}
|
|
1333
|
+
* ```
|
|
1334
|
+
*/
|
|
1335
|
+
declare abstract class ObjectAnimationTabBaseComponent extends ObjectVideoMediaTabBaseComponent {
|
|
1336
|
+
protected readonly videoMediaTabOptionLabelKey: string;
|
|
1337
|
+
protected readonly videoMediaTabTitleKey: string;
|
|
1338
|
+
protected readonly videoMediaTabDownloadName: string;
|
|
1339
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectAnimationTabBaseComponent, never>;
|
|
1340
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectAnimationTabBaseComponent, never, never, {}, {}, never, never, true, never>;
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1343
|
+
/**
|
|
1344
|
+
* Logic-only base of the object video tab (MOB-1801). Options, title and
|
|
1345
|
+
* aria label use `DETAILS_PAGE.tabs.video`. Muzeum Podlasia renders the app's
|
|
1346
|
+
* video player (a new source resets it — a still frame with a play button,
|
|
1347
|
+
* no playback), so its template has no `#videoPlayer` and `videoChange` only
|
|
1348
|
+
* selects the video. Sztuki-2 and the template render a native
|
|
1349
|
+
* `<video #videoPlayer>`, which `videoChange` pauses and rewinds, and a
|
|
1350
|
+
* download button named by `getDownloadFilename` (fallback `video.mp4`). The
|
|
1351
|
+
* tab keeps its template, styles and `host`.
|
|
1352
|
+
*
|
|
1353
|
+
* ```ts
|
|
1354
|
+
* export class VideoTabComponent extends ObjectVideoTabBaseComponent {}
|
|
1355
|
+
* ```
|
|
1356
|
+
*/
|
|
1357
|
+
declare abstract class ObjectVideoTabBaseComponent extends ObjectVideoMediaTabBaseComponent {
|
|
1358
|
+
protected readonly videoMediaTabOptionLabelKey: string;
|
|
1359
|
+
protected readonly videoMediaTabTitleKey: string;
|
|
1360
|
+
protected readonly videoMediaTabDownloadName: string;
|
|
1361
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectVideoTabBaseComponent, never>;
|
|
1362
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectVideoTabBaseComponent, never, never, {}, {}, never, never, true, never>;
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
/**
|
|
1366
|
+
* Logic-only base of the object virtual walk tab (MOB-1801), 1:1 from Muzeum
|
|
1367
|
+
* Podlasia (sztuki-2 and the template are identical): the walk dropdown, the
|
|
1368
|
+
* trusted iframe source and the fullscreen toggle of `#walkContainer`. The
|
|
1369
|
+
* `fullscreenchange` listener is registered in the browser only, through the
|
|
1370
|
+
* injected `DOCUMENT`, and removed on destroy. The tab keeps its template,
|
|
1371
|
+
* styles and `host`.
|
|
1372
|
+
*
|
|
1373
|
+
* ```ts
|
|
1374
|
+
* export class VirtualWalkTabComponent extends ObjectVirtualWalkTabBaseComponent {
|
|
1375
|
+
* constructor() {
|
|
1376
|
+
* super();
|
|
1377
|
+
* }
|
|
1378
|
+
* }
|
|
1379
|
+
* ```
|
|
1380
|
+
*/
|
|
1381
|
+
declare abstract class ObjectVirtualWalkTabBaseComponent extends ObjectMediaTabBaseComponent<IModel3DObject> {
|
|
1382
|
+
private readonly virtualWalkTabSanitizer;
|
|
1383
|
+
private readonly virtualWalkTabDocument;
|
|
1384
|
+
/** The template's `#iframeContainer`. */
|
|
1385
|
+
readonly iframeContainer: Signal<ElementRef<any>>;
|
|
1386
|
+
/** The template's `#walkContainer`, the element shown fullscreen. */
|
|
1387
|
+
readonly walkContainer: Signal<ElementRef<any>>;
|
|
1388
|
+
private readonly virtualWalkTabPicker;
|
|
1389
|
+
/** The chosen walk's key; the first walk of each new object. */
|
|
1390
|
+
readonly selectedWalkKey: WritableSignal<string | null>;
|
|
1391
|
+
/** Dropdown options: alt text, description or `OBJECTS.filters.multimedia.virtualWalk <n>`. */
|
|
1392
|
+
readonly walkOptions: Signal<IKeyValue[]>;
|
|
1393
|
+
/** The chosen walk, the first one by default. */
|
|
1394
|
+
readonly selectedWalk: Signal<IModel3DObject | null>;
|
|
1395
|
+
/** The dropdown option of `selectedWalk`. */
|
|
1396
|
+
readonly selectedWalkOption: Signal<IKeyValue>;
|
|
1397
|
+
/** The selected walk's `iframeSource`, trusted; `null` without one. */
|
|
1398
|
+
readonly safeIframeUrl: Signal<SafeResourceUrl | null>;
|
|
1399
|
+
/** Whether the document is in fullscreen (follows `fullscreenchange`, e.g. Escape). */
|
|
1400
|
+
readonly isFullscreen: WritableSignal<boolean>;
|
|
1401
|
+
protected constructor();
|
|
1402
|
+
/** Selects a walk. */
|
|
1403
|
+
walkChange(key: string): void;
|
|
1404
|
+
/** Alt text in the current language, then the description, then `OBJECTS.filters.multimedia.virtualWalk`. */
|
|
1405
|
+
getWalkTitle(walk: IModel3DObject): string;
|
|
1406
|
+
/** Shows `#walkContainer` fullscreen, or leaves fullscreen. */
|
|
1407
|
+
toggleFullscreen(): void;
|
|
1408
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectVirtualWalkTabBaseComponent, never>;
|
|
1409
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectVirtualWalkTabBaseComponent, never, never, {}, {}, never, never, true, never>;
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
/** The `online-3d-viewer` `Viewer` calls the 3D tab makes. */
|
|
1413
|
+
interface IObjectModel3dViewer {
|
|
1414
|
+
SetUpVector(direction: unknown, animate: boolean): void;
|
|
1415
|
+
GetBoundingSphere(filter: (meshUserData: unknown) => boolean): unknown;
|
|
1416
|
+
AdjustClippingPlanesToSphere(sphere: unknown): void;
|
|
1417
|
+
FitSphereToWindow(sphere: unknown, animate: boolean): void;
|
|
1418
|
+
SetEdgeSettings(settings: unknown): void;
|
|
1419
|
+
}
|
|
1420
|
+
/** The `online-3d-viewer` `EmbeddedViewer` calls the 3D tab makes. */
|
|
1421
|
+
interface IObjectModel3dEmbeddedViewer {
|
|
1422
|
+
LoadModelFromUrlList(urls: string[]): void;
|
|
1423
|
+
Destroy(): void;
|
|
1424
|
+
GetViewer(): IObjectModel3dViewer;
|
|
1425
|
+
}
|
|
1426
|
+
/**
|
|
1427
|
+
* The part of the `online-3d-viewer` module the 3D tab uses. The framework
|
|
1428
|
+
* does not depend on the library: the museum returns its own
|
|
1429
|
+
* `import('online-3d-viewer')` from `loadModel3dLibrary()`, which is
|
|
1430
|
+
* assignable without a cast.
|
|
1431
|
+
*
|
|
1432
|
+
* The colour and edge slots of the `EmbeddedViewer` parameters and the
|
|
1433
|
+
* `EdgeSettings` colour are `any`: constructor parameters are checked
|
|
1434
|
+
* contravariantly (`strictFunctionTypes`), so anything narrower would have to
|
|
1435
|
+
* restate the library's `RGBAColor`, `RGBColor` and `EdgeSettings` classes
|
|
1436
|
+
* member by member. The values come from the same module's constructors.
|
|
1437
|
+
*/
|
|
1438
|
+
interface IObjectModel3dViewerLibrary {
|
|
1439
|
+
EmbeddedViewer: new (parentElement: HTMLElement, parameters: {
|
|
1440
|
+
backgroundColor: any;
|
|
1441
|
+
defaultColor: any;
|
|
1442
|
+
edgeSettings: any;
|
|
1443
|
+
onModelLoaded: () => void;
|
|
1444
|
+
}) => IObjectModel3dEmbeddedViewer;
|
|
1445
|
+
RGBAColor: new (r: number, g: number, b: number, a: number) => unknown;
|
|
1446
|
+
RGBColor: new (r: number, g: number, b: number) => unknown;
|
|
1447
|
+
EdgeSettings: new (showEdges: boolean, edgeColor: any, edgeThreshold: number) => unknown;
|
|
1448
|
+
Direction: {
|
|
1449
|
+
Y: unknown;
|
|
1450
|
+
};
|
|
1451
|
+
}
|
|
1452
|
+
/** Options of `ObjectModel3dTabBaseComponent`, passed to `super(options)`. */
|
|
1453
|
+
interface IObjectModel3dTabOptions {
|
|
1454
|
+
/**
|
|
1455
|
+
* Keep only models with at least one file to load (`files[].filePath`) —
|
|
1456
|
+
* the same condition as the tab counter, so the default model does not end
|
|
1457
|
+
* in "No files found" (MOB-1872 review). Default `true` (Muzeum Podlasia);
|
|
1458
|
+
* `false` keeps the unfiltered list (sztuki-2, template).
|
|
1459
|
+
*/
|
|
1460
|
+
loadableOnly?: boolean;
|
|
1461
|
+
}
|
|
1462
|
+
/**
|
|
1463
|
+
* Logic-only base of the object 3D model tab (MOB-1801), 1:1 from Muzeum
|
|
1464
|
+
* Podlasia: the model list, the lazily loaded `online-3d-viewer`, the model
|
|
1465
|
+
* switch, the camera reset, the wireframe and the fullscreen toggle. The tab
|
|
1466
|
+
* keeps its template, styles and `host`, and returns its own
|
|
1467
|
+
* `import('online-3d-viewer')` from `loadModel3dLibrary()` — the framework does
|
|
1468
|
+
* not depend on the library, and the viewer is never loaded on the server.
|
|
1469
|
+
* Podlasie's model file URI panel (MOB-981) stays in Podlasie and follows
|
|
1470
|
+
* `selectedModel`.
|
|
1471
|
+
*
|
|
1472
|
+
* ```ts
|
|
1473
|
+
* export class Model3dTabComponent extends ObjectModel3dTabBaseComponent {
|
|
1474
|
+
* constructor() {
|
|
1475
|
+
* super(); // sztuki-2 / template: super({ loadableOnly: false })
|
|
1476
|
+
* }
|
|
1477
|
+
*
|
|
1478
|
+
* protected loadModel3dLibrary() {
|
|
1479
|
+
* return import('online-3d-viewer');
|
|
1480
|
+
* }
|
|
1481
|
+
* }
|
|
1482
|
+
* ```
|
|
1483
|
+
*/
|
|
1484
|
+
declare abstract class ObjectModel3dTabBaseComponent extends ObjectMediaTabBaseComponent<IModel3DObject> {
|
|
1485
|
+
/** The template's `#viewer3d`, the viewer's canvas container. */
|
|
1486
|
+
readonly viewer3d: _angular_core.Signal<ElementRef<any>>;
|
|
1487
|
+
/** The chosen model's index, bound with `ngModel` (may arrive as a string). */
|
|
1488
|
+
selectedModelIndex: number;
|
|
1489
|
+
/** The chosen model's index as a signal, next to `selectedModelIndex` (`onModelChange`). */
|
|
1490
|
+
readonly selectedModel: WritableSignal<number>;
|
|
1491
|
+
/** A model is loading. */
|
|
1492
|
+
readonly isLoading: WritableSignal<boolean>;
|
|
1493
|
+
/** The load error, `null` without one. */
|
|
1494
|
+
readonly error: WritableSignal<string | null>;
|
|
1495
|
+
/** The edges are shown. */
|
|
1496
|
+
readonly isWireframe: WritableSignal<boolean>;
|
|
1497
|
+
/** Whether the document is in fullscreen (follows `fullscreenchange`, e.g. Escape). */
|
|
1498
|
+
readonly isFullscreen: WritableSignal<boolean>;
|
|
1499
|
+
private readonly model3dTabOptions;
|
|
1500
|
+
private readonly model3dTabDocument;
|
|
1501
|
+
private readonly model3dTabPlatformId;
|
|
1502
|
+
private readonly model3dTabTimeouts;
|
|
1503
|
+
/**
|
|
1504
|
+
* `online-3d-viewer` (+ `three`, ~1.1 MB) is loaded only on the first
|
|
1505
|
+
* init — a static import put the library in the chunk of the whole objects
|
|
1506
|
+
* module, loaded on the `/obiekty` list and every card, also without a 3D
|
|
1507
|
+
* model (Lighthouse, MOB-1850, MOB-1895). One load is shared between
|
|
1508
|
+
* concurrent calls. Created on first use.
|
|
1509
|
+
*/
|
|
1510
|
+
private model3dTabLibraryLoader;
|
|
1511
|
+
/** The number of the latest init — an older call after `await` does not overwrite a newer one. */
|
|
1512
|
+
private model3dTabInitToken;
|
|
1513
|
+
private model3dTabViewer;
|
|
1514
|
+
protected constructor(options?: IObjectModel3dTabOptions);
|
|
1515
|
+
/** The museum's `import('online-3d-viewer')`. Called once, in the browser, on the first init. */
|
|
1516
|
+
protected abstract loadModel3dLibrary(): Promise<IObjectModel3dViewerLibrary>;
|
|
1517
|
+
/** With `loadableOnly` (default) only models with a file to load. */
|
|
1518
|
+
protected mediaTabFilterModels(models: IModel3DObject[]): IModel3DObject[];
|
|
1519
|
+
/** Follows the `selectedModelIndex` dropdown: sets `selectedModel` and loads that model. */
|
|
1520
|
+
onModelChange(): void;
|
|
1521
|
+
/** Fits the model to the window with the Y axis up. A no-op before the library is loaded. */
|
|
1522
|
+
resetCamera(): void;
|
|
1523
|
+
/** Shows or hides the edges. A no-op before the library is loaded. */
|
|
1524
|
+
toggleWireframe(): void;
|
|
1525
|
+
/** Shows the parent of `#viewer3d` fullscreen, or leaves fullscreen. */
|
|
1526
|
+
toggleFullscreen(): void;
|
|
1527
|
+
private model3dTabLibrary;
|
|
1528
|
+
private model3dTabInitViewer;
|
|
1529
|
+
private model3dTabLoadModel;
|
|
1530
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectModel3dTabBaseComponent, never>;
|
|
1531
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectModel3dTabBaseComponent, never, never, {}, {}, never, never, true, never>;
|
|
1532
|
+
}
|
|
1533
|
+
|
|
1534
|
+
/**
|
|
1535
|
+
* Logic-only base of the sztuki-2 / template `media-sections`: an object's
|
|
1536
|
+
* multimedia as landing-page sections (Figma), each with a heading like
|
|
1537
|
+
* „Galeria zdjęć”; a section without data is not rendered. Order: HD photos →
|
|
1538
|
+
* 3D model → animation → video → audio → virtual walk → audio description →
|
|
1539
|
+
* map → other files. The component keeps its template, heading class and
|
|
1540
|
+
* tab imports.
|
|
1541
|
+
*
|
|
1542
|
+
* ```ts
|
|
1543
|
+
* export class MediaSectionsComponent extends ObjectMediaSectionsBaseComponent {
|
|
1544
|
+
* readonly sectionHeadingClass = '…';
|
|
1545
|
+
* }
|
|
1546
|
+
* ```
|
|
1547
|
+
*/
|
|
1548
|
+
declare abstract class ObjectMediaSectionsBaseComponent {
|
|
1549
|
+
private readonly mediaSectionsFileUrl;
|
|
1550
|
+
private readonly mediaSectionsMedia;
|
|
1551
|
+
/** The object whose multimedia the sections show. */
|
|
1552
|
+
readonly item: _angular_core.InputSignal<MsObject>;
|
|
1553
|
+
/**
|
|
1554
|
+
* Multimedia already shown in the object card's gallery frame (the video /
|
|
1555
|
+
* 3D tabs, MOB-1961) — not repeated in the sections. Default `[]`.
|
|
1556
|
+
*/
|
|
1557
|
+
readonly exclude: _angular_core.InputSignal<readonly ("video" | "model3d")[]>;
|
|
1558
|
+
/** `[IMAGES_HD]` */
|
|
1559
|
+
readonly imagesHDTypes: FormFeatureType[];
|
|
1560
|
+
/** `[MODEL_3D]` */
|
|
1561
|
+
readonly model3DTypes: FormFeatureType[];
|
|
1562
|
+
/** `[ANIMATION]` */
|
|
1563
|
+
readonly animationTypes: FormFeatureType[];
|
|
1564
|
+
/** `[AUDIO_DESKRYPCJA]` */
|
|
1565
|
+
readonly adTypes: FormFeatureType[];
|
|
1566
|
+
/** `[VIRTUAL_WALK]` */
|
|
1567
|
+
readonly virtualWalkTypes: FormFeatureType[];
|
|
1568
|
+
/** `[VIDEO]` */
|
|
1569
|
+
readonly videoTypes: FormFeatureType[];
|
|
1570
|
+
/** `[AUDIO]` */
|
|
1571
|
+
readonly audioTypes: FormFeatureType[];
|
|
1572
|
+
/** `[OTHER]` */
|
|
1573
|
+
readonly otherTypes: FormFeatureType[];
|
|
1574
|
+
/** HD photo thumbnails (without the main image) — fullscreen on click. */
|
|
1575
|
+
readonly hdThumbnailUrls: _angular_core.Signal<string[]>;
|
|
1576
|
+
/** HD photo gallery items (without the main image) for the fullscreen. */
|
|
1577
|
+
readonly hdGalleryItems: _angular_core.Signal<_smartsoft001_mobilems_objects_shell_angular.IObjectGalleryItem[]>;
|
|
1578
|
+
/** Whether the HD fullscreen gallery is open. */
|
|
1579
|
+
readonly hdFullscreenOpen: _angular_core.WritableSignal<boolean>;
|
|
1580
|
+
/** The photo the HD fullscreen gallery shows. */
|
|
1581
|
+
readonly hdFullscreenIndex: _angular_core.WritableSignal<number>;
|
|
1582
|
+
/** Opens the HD fullscreen gallery at the clicked thumbnail. */
|
|
1583
|
+
openHdFullscreen(index: number): void;
|
|
1584
|
+
/** The object title without HTML tags (alt text). */
|
|
1585
|
+
readonly altTitle: _angular_core.Signal<string>;
|
|
1586
|
+
/** HD photos section: any HD thumbnail. */
|
|
1587
|
+
readonly showPhotosHD: _angular_core.Signal<boolean>;
|
|
1588
|
+
/** 3D model section: a real file URL, unless excluded. */
|
|
1589
|
+
readonly showModel3D: _angular_core.Signal<boolean>;
|
|
1590
|
+
/** Animation section: a real file URL. */
|
|
1591
|
+
readonly showAnimation: _angular_core.Signal<boolean>;
|
|
1592
|
+
/**
|
|
1593
|
+
* Video section: a file with a `filePath` (`FileUrlService` gives a
|
|
1594
|
+
* placeholder for non-image extensions), unless excluded.
|
|
1595
|
+
*/
|
|
1596
|
+
readonly showVideo: _angular_core.Signal<boolean>;
|
|
1597
|
+
/** Audio section: a file with a `filePath`. */
|
|
1598
|
+
readonly showAudio: _angular_core.Signal<boolean>;
|
|
1599
|
+
/** Virtual walk section: a walk with an `iframeSource` (not a file URL). */
|
|
1600
|
+
readonly showVirtualWalk: _angular_core.Signal<boolean>;
|
|
1601
|
+
/** The number of audio description files with a real URL. */
|
|
1602
|
+
readonly audioDescriptionCount: _angular_core.Signal<number>;
|
|
1603
|
+
/** Audio description section: any audio description. */
|
|
1604
|
+
readonly showAudioDescription: _angular_core.Signal<boolean>;
|
|
1605
|
+
/** Map section: both `archeoMap` coordinates set. */
|
|
1606
|
+
readonly showMap: _angular_core.Signal<boolean>;
|
|
1607
|
+
/** Other files section (PDF, etc.): a real file URL. */
|
|
1608
|
+
readonly showOther: _angular_core.Signal<boolean>;
|
|
1609
|
+
/** Whether any section is visible. */
|
|
1610
|
+
readonly hasVisibleSections: _angular_core.Signal<boolean>;
|
|
1611
|
+
/**
|
|
1612
|
+
* Whether an additional file of the types has a URL from `FileUrlService`
|
|
1613
|
+
* that is not the no-image placeholder. Reads `item()`, so the calling
|
|
1614
|
+
* `computed` tracks it.
|
|
1615
|
+
*/
|
|
1616
|
+
private mediaSectionsHasContent;
|
|
1617
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectMediaSectionsBaseComponent, never>;
|
|
1618
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ObjectMediaSectionsBaseComponent, never, never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "exclude": { "alias": "exclude"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1619
|
+
}
|
|
1620
|
+
|
|
1621
|
+
export { ASK_ABOUT_OBJECT_KEYS, AdvancedFilterType, ComponentsModule, FiltersComponent, FormFeatureType, ListComponent, MULTIMEDIA_DICTIONARY, OBJECTS_CATALOG_DEFAULTS, OBJECTS_CATALOG_SEO, OBJECTS_FILTER_SINGLE_VALUE_LABELS, OBJECTS_LIMIT_OPTIONS, OBJECTS_NEW_TYPE_SORT_OPTIONS, OBJECTS_SHARE_COPIED_TIMEOUT, OBJECTS_SORT_OPTIONS, OBJECTS_THEME_TAGS_FILTER_KEY, ObjectAnimationTabBaseComponent, ObjectAudioDescriptionTabBaseComponent, ObjectAudioMediaTabBaseComponent, ObjectAudioTabBaseComponent, ObjectDetailsBaseComponent, ObjectDocumentsTabBaseComponent, ObjectDownloadButtonBaseComponent, ObjectMapTabBaseComponent, ObjectMediaSectionsBaseComponent, ObjectMediaService, ObjectMediaTabBaseComponent, ObjectModel3dTabBaseComponent, ObjectVideoMediaTabBaseComponent, ObjectVideoTabBaseComponent, ObjectVirtualWalkTabBaseComponent, ObjectsAdvancedFiltersBaseComponent, ObjectsCatalogBaseComponent, ObjectsDataService, ObjectsFacade, ObjectsFiltersBarBaseComponent, ObjectsItemComponent, ObjectsListComponent, ObjectsModule, ObjectsSearchPanelBaseComponent, ObjectsService, ObjectsShareResultsBaseComponent, ObjectsSharedModule, SERVICES, askAboutObjectHref, bibliography, buildObjectsResultsUrl, descriptionHtml, getObjectsState, getReducer, initialState, inventoryValues, objectTitle, objectsSortFromKey, objectsSortKey, relatedArticles, tagValues };
|
|
1622
|
+
export type { ArchaeologicalSegregation, AskTranslate, FileType, IAnimationObject, IAskAboutObject, IKeyValue, IModel3DObject, IMultimediaDictionaryItem, IObjectArcheoMap, IObjectAudioTabOptions, IObjectBibliographyEntry, IObjectCollectionSummary, IObjectDetailLink, IObjectDetailSource, IObjectDetailsOptions, IObjectGalleryItem, IObjectModel3dEmbeddedViewer, IObjectModel3dTabOptions, IObjectModel3dViewer, IObjectModel3dViewerLibrary, IObjectRelated, IObjectsAdvancedFilterField, IObjectsAdvancedFilterWrite, IObjectsAdvancedFiltersOptions, IObjectsCatalogLoadMore, IObjectsCatalogOptions, IObjectsCatalogSeo, IObjectsDateRange, IObjectsFilterWrite, IObjectsFiltersBarOptions, ISpecificObject, ObjectDetailValue, ObjectsAdvancedFilterBoolean, ObjectsAdvancedFilterMode, SortType, State };
|