@mmlogic/components 0.4.1 → 0.4.3

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 (82) hide show
  1. package/dist/cjs/index.cjs.js +8 -0
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/mosterdcomponents.cjs.js +1 -1
  4. package/dist/cjs/{mrd-boolean-field_23.cjs.entry.js → mrd-boolean-field_24.cjs.entry.js} +269 -50
  5. package/dist/collection/collection-manifest.json +1 -0
  6. package/dist/collection/components/documents/mrd-document-container/mrd-document-container.css +14 -1
  7. package/dist/collection/components/documents/mrd-document-container/mrd-document-container.js +30 -8
  8. package/dist/collection/components/documents/mrd-document-list/mrd-document-list.css +8 -5
  9. package/dist/collection/components/documents/mrd-document-list/mrd-document-list.js +28 -11
  10. package/dist/collection/components/documents/mrd-document-list/tree-view.js +14 -2
  11. package/dist/collection/components/documents/mrd-document-view/mrd-document-view.css +39 -29
  12. package/dist/collection/components/documents/mrd-document-view/mrd-document-view.js +109 -8
  13. package/dist/collection/components/documents/mrd-file-preview/file-preview-kind.js +30 -0
  14. package/dist/collection/components/documents/mrd-file-preview/mrd-file-preview.css +59 -0
  15. package/dist/collection/components/documents/mrd-file-preview/mrd-file-preview.js +212 -0
  16. package/dist/collection/components/fields/mrd-boolean-field/mrd-boolean-field.js +1 -1
  17. package/dist/collection/components/fields/mrd-currency-field/mrd-currency-field.js +1 -1
  18. package/dist/collection/components/fields/mrd-date-field/mrd-date-field.js +1 -1
  19. package/dist/collection/components/fields/mrd-datetime-field/mrd-datetime-field.js +1 -1
  20. package/dist/collection/components/fields/mrd-email-field/mrd-email-field.js +1 -1
  21. package/dist/collection/components/fields/mrd-file-field/mrd-file-field.js +1 -1
  22. package/dist/collection/components/fields/mrd-image-field/mrd-image-field.js +1 -1
  23. package/dist/collection/components/fields/mrd-longtext-field/mrd-longtext-field.js +1 -1
  24. package/dist/collection/components/fields/mrd-number-field/mrd-number-field.js +1 -1
  25. package/dist/collection/components/fields/mrd-secret-field/mrd-secret-field.js +2 -2
  26. package/dist/collection/components/fields/mrd-text-field/mrd-text-field.js +1 -1
  27. package/dist/collection/components/fields/mrd-textarea-field/mrd-textarea-field.js +1 -1
  28. package/dist/collection/components/fields/mrd-time-field/mrd-time-field.js +1 -1
  29. package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.css +5 -0
  30. package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.js +99 -9
  31. package/dist/collection/components/table/mrd-table/mrd-table.js +19 -5
  32. package/dist/collection/dev/api.js +9 -0
  33. package/dist/collection/dev/app.js +105 -6
  34. package/dist/collection/dev/example-data.js +24 -0
  35. package/dist/collection/types/client-layout.js +8 -0
  36. package/dist/collection/utils/i18n.js +32 -0
  37. package/dist/collection/utils/query-params.js +0 -4
  38. package/dist/components/client-layout.js +1 -1
  39. package/dist/components/i18n.js +1 -1
  40. package/dist/components/index.js +1 -1
  41. package/dist/components/mrd-boolean-field2.js +1 -1
  42. package/dist/components/mrd-currency-field2.js +1 -1
  43. package/dist/components/mrd-date-field2.js +1 -1
  44. package/dist/components/mrd-datetime-field2.js +1 -1
  45. package/dist/components/mrd-document-container2.js +1 -1
  46. package/dist/components/mrd-document-list2.js +1 -1
  47. package/dist/components/mrd-document-view2.js +1 -1
  48. package/dist/components/mrd-email-field2.js +1 -1
  49. package/dist/components/mrd-file-field2.js +1 -1
  50. package/dist/components/mrd-file-preview.d.ts +11 -0
  51. package/dist/components/mrd-file-preview.js +1 -0
  52. package/dist/components/mrd-file-preview2.js +1 -0
  53. package/dist/components/mrd-image-field2.js +1 -1
  54. package/dist/components/mrd-layout-section.js +1 -1
  55. package/dist/components/mrd-longtext-field2.js +1 -1
  56. package/dist/components/mrd-number-field2.js +1 -1
  57. package/dist/components/mrd-secret-field2.js +1 -1
  58. package/dist/components/mrd-table2.js +1 -1
  59. package/dist/components/mrd-text-field2.js +1 -1
  60. package/dist/components/mrd-textarea-field2.js +1 -1
  61. package/dist/components/mrd-time-field2.js +1 -1
  62. package/dist/esm/index.js +9 -1
  63. package/dist/esm/loader.js +1 -1
  64. package/dist/esm/mosterdcomponents.js +1 -1
  65. package/dist/esm/{mrd-boolean-field_23.entry.js → mrd-boolean-field_24.entry.js} +270 -52
  66. package/dist/mosterdcomponents/index.esm.js +1 -1
  67. package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
  68. package/dist/mosterdcomponents/p-e816d459.entry.js +1 -0
  69. package/dist/types/components/documents/mrd-document-container/mrd-document-container.d.ts +8 -2
  70. package/dist/types/components/documents/mrd-document-list/mrd-document-list.d.ts +8 -1
  71. package/dist/types/components/documents/mrd-document-list/tree-view.d.ts +1 -1
  72. package/dist/types/components/documents/mrd-document-view/mrd-document-view.d.ts +29 -1
  73. package/dist/types/components/documents/mrd-file-preview/file-preview-kind.d.ts +9 -0
  74. package/dist/types/components/documents/mrd-file-preview/mrd-file-preview.d.ts +41 -0
  75. package/dist/types/components/layout/mrd-layout-section/mrd-layout-section.d.ts +19 -1
  76. package/dist/types/components/table/mrd-table/mrd-table.d.ts +8 -2
  77. package/dist/types/components.d.ts +186 -13
  78. package/dist/types/index.d.ts +1 -0
  79. package/dist/types/types/client-layout.d.ts +10 -0
  80. package/dist/types/utils/query-params.d.ts +14 -0
  81. package/package.json +1 -1
  82. package/dist/mosterdcomponents/p-b1a2e108.entry.js +0 -1
@@ -1,5 +1,6 @@
1
1
  import { EventEmitter } from '../../../stencil-public-runtime';
2
- import { ClientArchetype, ClientLayoutItem } from '../../../types/client-layout';
2
+ import { ClientArchetype, ClientLayoutItem, ClientLayoutNavigateBehaviour } from '../../../types/client-layout';
3
+ import { ListNavigationContext } from '../../../utils/query-params';
3
4
  /**
4
5
  * Owns a document collection view: a single toolbar (view switch + collection
5
6
  * actions like "New folder", and — later — upload / drag-drop) plus the two
@@ -49,10 +50,15 @@ export declare class MrdDocumentContainer {
49
50
  qs: string;
50
51
  aggQs: string;
51
52
  }>;
52
- /** A row / document was activated. Host routes to the object page. */
53
+ /** A row / document was activated. Host routes to the object page. Documents
54
+ * are always the "quick look" use case, so navigateBehaviour is hardcoded
55
+ * to OVERLAY_PAGE here — unlike the generic VIEW/RELATED_VIEW table path in
56
+ * mrd-layout-section, which takes it from the item's configuration. */
53
57
  mrdNavigate: EventEmitter<{
54
58
  href?: string;
55
59
  label: string;
60
+ navigateBehaviour?: ClientLayoutNavigateBehaviour;
61
+ listContext?: ListNavigationContext;
56
62
  }>;
57
63
  /** A table toolbar action was triggered. */
58
64
  mrdAction: EventEmitter<{
@@ -1,5 +1,6 @@
1
1
  import { EventEmitter } from '../../../stencil-public-runtime';
2
2
  import { ClientArchetype, ClientLayoutItem } from '../../../types/client-layout';
3
+ import { ListNavigationContext } from '../../../utils/query-params';
3
4
  import { DistinctValue, DocRow } from './folder-tree';
4
5
  /**
5
6
  * Archetype-driven document collection view. Renders documents as a lazy,
@@ -48,10 +49,12 @@ export declare class MrdDocumentList {
48
49
  path: string;
49
50
  qs: string;
50
51
  }>;
51
- /** A document row was clicked. Host routes to the document object page. */
52
+ /** A document row was clicked. Host routes to the document object page. `listContext` can
53
+ * be used to re-fetch this exact record (or its neighbours) via `{path}?{qs}&page={index}&size=1`. */
52
54
  mrdNavigate: EventEmitter<{
53
55
  href?: string;
54
56
  label: string;
57
+ listContext?: ListNavigationContext;
55
58
  }>;
56
59
  /** Emitted whenever the "can create a folder here" state changes, so a host
57
60
  * toolbar (mrd-document-container) can enable/disable its New folder button. */
@@ -143,6 +146,10 @@ export declare class MrdDocumentList {
143
146
  private baseParams;
144
147
  private emitContainerDistinct;
145
148
  private emitFolderDistinct;
149
+ /** Filter qs scoping a folder's documents: view-level filters + container/folder match.
150
+ * Shared by emitDocuments() (the fetch) and openDoc() (prev/next list context), so both
151
+ * always agree on exactly what query a document belongs to. */
152
+ private buildDocQs;
146
153
  private emitDocuments;
147
154
  /** Inject distinct values for a node. `nodeId` is the sentinel root (containers)
148
155
  * or a container node id (folders). */
@@ -14,7 +14,7 @@ export interface TreeViewContext {
14
14
  on: {
15
15
  toggleContainer: (node: TreeNode) => void;
16
16
  toggleFolder: (container: TreeNode, node: TreeNode) => void;
17
- openDoc: (doc: DocRow) => void;
17
+ openDoc: (doc: DocRow, node: TreeNode, container: TreeNode) => void;
18
18
  docDragStart: (e: DragEvent, doc: DocRow, node: TreeNode) => void;
19
19
  docDragEnd: () => void;
20
20
  nodeDragOver: (e: DragEvent, node: TreeNode) => void;
@@ -16,6 +16,15 @@ export declare class MrdDocumentView {
16
16
  /** The data record from the /data endpoint. Fields keyed by name; relations under `_links`. */
17
17
  data: Record<string, unknown>;
18
18
  locale: string;
19
+ /** Signed URL for the file's inline preview (mrd-file-preview), resolved by
20
+ * the host in response to mrdLoadPreview. Empty while unresolved — the
21
+ * preview area shows a loading state until the host injects a value. */
22
+ previewUrl: string;
23
+ /** Minimum height (px) of the inline preview area — it stretches to fill the
24
+ * available row height in the wide side-by-side layout (see mrd-document-view.scss),
25
+ * and falls back to this height when stacked. Overlay hosts typically pass a
26
+ * smaller value than the full-page default to fit available chrome. */
27
+ previewHeight: number;
19
28
  /** Navigate to the container (dossier). Host resolves the href and routes. */
20
29
  mrdNavigate: EventEmitter<{
21
30
  href?: string;
@@ -26,11 +35,30 @@ export declare class MrdDocumentView {
26
35
  href: string;
27
36
  fileName: string;
28
37
  }>;
38
+ /** The file slot has an href and needs a signed URL for inline preview.
39
+ * Fired once on load and again whenever the file href changes (e.g. the
40
+ * overlay is reused for a different document via prev/next). Host resolves
41
+ * it and calls back with `previewUrl` — the same pattern as mrdLoadImage /
42
+ * setImagePreview on mrd-layout-section. */
43
+ mrdLoadPreview: EventEmitter<{
44
+ href: string;
45
+ }>;
46
+ /** Tracks the href a preview was last requested for, so componentDidLoad and
47
+ * the data watcher don't emit duplicate requests for the same file. */
48
+ private lastPreviewHref;
49
+ componentDidLoad(): void;
50
+ dataChanged(): void;
51
+ private requestPreviewIfNeeded;
29
52
  /** Value of a value-slot: reads data[field] via the slot→field map. */
30
53
  private slotValue;
31
54
  /** Relation link for a relation-slot: reads data._links[field]. */
32
55
  private slotLink;
33
56
  private renderContainer;
34
- private renderFile;
57
+ /** Filename + download button — part of the metadata column, not the preview
58
+ * panel, so it stays next to the title/summary in the wide side-by-side layout. */
59
+ private renderFileMeta;
60
+ /** The preview panel itself (iframe/image/loading state) — its own grid
61
+ * column in the wide layout, so it can take the full available height. */
62
+ private renderPreviewPanel;
35
63
  render(): any;
36
64
  }
@@ -0,0 +1,9 @@
1
+ /** Pure classification logic for mrd-file-preview — no Stencil dependency. */
2
+ export type FilePreviewKind = 'pdf' | 'image' | 'unsupported';
3
+ /**
4
+ * Decide how to render a file given its declared mime type and/or file name.
5
+ * A declared mime type is authoritative when present (a mismatched file name
6
+ * extension is ignored); the file name extension is only consulted as a
7
+ * fallback when no mime type is known.
8
+ */
9
+ export declare function detectPreviewKind(mimeType?: string | null, fileName?: string | null): FilePreviewKind;
@@ -0,0 +1,41 @@
1
+ import { EventEmitter } from '../../../stencil-public-runtime';
2
+ /**
3
+ * Renders a signed URL inline as a PDF (native browser viewer, via `<iframe>`)
4
+ * or an image (`<img>`), picked from `mimeType`/`fileName`. Purely
5
+ * presentational: the signed URL is used directly as element `src` — a
6
+ * navigation, not a fetch/XHR, so no CORS handling is needed here. Fetching
7
+ * the signed URL itself is the host's responsibility, same as `mrdLoadImage` /
8
+ * `setImagePreview` on mrd-layout-section.
9
+ */
10
+ export declare class MrdFilePreview {
11
+ /** Signed URL to render. */
12
+ src: string;
13
+ /** Declared mime type (e.g. 'application/pdf', 'image/png'), when known.
14
+ * Authoritative over `fileName` when present. */
15
+ mimeType: string;
16
+ /** Original file name — used for extension-based detection when `mimeType`
17
+ * is absent, and as alt/title text. */
18
+ fileName: string;
19
+ /** The file's own reference href (not the signed preview URL in `src`).
20
+ * When set, an unsupported type falls back to the same download button
21
+ * used elsewhere in the library, so hosts need no new wiring. */
22
+ href: string;
23
+ locale: string;
24
+ /** The image failed to load — most likely an expired signed URL. Host
25
+ * should fetch a fresh signed URL and update `src`.
26
+ * Note: this is only raised for images. Browsers don't reliably surface
27
+ * HTTP-level failures (e.g. a 403 on an expired URL) through an iframe's
28
+ * load/error events, so the same detection isn't available for PDFs. */
29
+ mrdPreviewReload: EventEmitter<void>;
30
+ /** Download the file. Same shape as mrd-document-view / mrd-layout-section's
31
+ * mrdDownload — host resolves `href` to a signed URL. */
32
+ mrdDownload: EventEmitter<{
33
+ href: string;
34
+ fileName: string;
35
+ }>;
36
+ private imageFailed;
37
+ srcChanged(): void;
38
+ private onImageError;
39
+ private retry;
40
+ render(): any;
41
+ }
@@ -1,6 +1,7 @@
1
1
  import { EventEmitter } from '../../../stencil-public-runtime';
2
- import { ClientLayoutItem, ClientLayoutItemNavigate, ClientViewMetadata, ClientArchetype, RelationSearchResult } from '../../../types/client-layout';
2
+ import { ClientLayoutItem, ClientLayoutItemNavigate, ClientLayoutNavigateBehaviour, ClientViewMetadata, ClientArchetype, RelationSearchResult } from '../../../types/client-layout';
3
3
  import { DistinctValue } from '../../documents/mrd-document-list/folder-tree';
4
+ import { ListNavigationContext } from '../../../utils/query-params';
4
5
  export declare class MrdLayoutSection {
5
6
  el: HTMLElement;
6
7
  /** Items from one layout entry in ClientDashboardMetadata.layouts[]. */
@@ -17,16 +18,24 @@ export declare class MrdLayoutSection {
17
18
  /** Top-level archetypes on the object dashboard. When it contains commons.document,
18
19
  * the record is rendered as a single-document view instead of generic fields. */
19
20
  archetypes: ClientArchetype[];
21
+ /** Minimum height (px) of the commons.document inline file preview — it
22
+ * stretches taller in the wide side-by-side layout. Pass a smaller value
23
+ * when embedding the record in an overlay with limited height. */
24
+ documentPreviewHeight: number;
20
25
  private searchQueryMap;
21
26
  private searchResultsMap;
22
27
  private imagePreviewUrl;
23
28
  private imagePreviews;
24
29
  private openHistoryField;
30
+ /** Signed URL for the commons.document archetype's inline file preview. */
31
+ private documentPreviewUrl;
25
32
  private historyClickOutside;
26
33
  mrdNavigate: EventEmitter<{
27
34
  href?: string;
28
35
  label: string;
29
36
  navigate?: ClientLayoutItemNavigate;
37
+ navigateBehaviour?: ClientLayoutNavigateBehaviour;
38
+ listContext?: ListNavigationContext;
30
39
  }>;
31
40
  mrdSearch: EventEmitter<{
32
41
  query: string;
@@ -51,6 +60,12 @@ export declare class MrdLayoutSection {
51
60
  fieldName: string;
52
61
  href: string;
53
62
  }>;
63
+ /** Re-emitted from an embedded mrd-document-view's mrdLoadPreview (commons.document
64
+ * single-object view); host resolves the file href to a signed URL and calls
65
+ * setDocumentPreviewUrl(). */
66
+ mrdLoadDocumentPreview: EventEmitter<{
67
+ href: string;
68
+ }>;
54
69
  /** Re-emitted from an embedded mrd-table's mrdAction; host builds the target URL from dataClass. */
55
70
  mrdViewAction: EventEmitter<{
56
71
  name: string;
@@ -125,6 +140,9 @@ export declare class MrdLayoutSection {
125
140
  setImagePreview(fieldName: string, url: string): Promise<void>;
126
141
  /** Open the lightbox directly with a URL (e.g. after mrdDownload on a FILE field). */
127
142
  openImagePreview(url: string): Promise<void>;
143
+ /** Provide a resolved signed URL for the commons.document archetype's inline
144
+ * file preview, in response to mrdLoadDocumentPreview. */
145
+ setDocumentPreviewUrl(url: string): Promise<void>;
128
146
  private resolveSearchKey;
129
147
  private handleViewLoadPage;
130
148
  private handleSearchInput;
@@ -1,6 +1,7 @@
1
1
  import { EventEmitter } from '../../../stencil-public-runtime';
2
2
  import { ColumnFilter } from '../../../utils/cell-renderer';
3
3
  import { AggregationResult, ClientLayoutItem } from '../../../types/client-layout';
4
+ import { ListNavigationContext } from '../../../utils/query-params';
4
5
  export declare class MrdTable {
5
6
  el: HTMLElement;
6
7
  private pendingPages;
@@ -93,8 +94,13 @@ export declare class MrdTable {
93
94
  mrdPageError: EventEmitter<{
94
95
  page: number;
95
96
  }>;
96
- /** Fired when a data row is clicked. Detail is the full row object including _links. */
97
- mrdRowClick: EventEmitter<Record<string, any>>;
97
+ /** Fired when a data row is clicked. `listContext` is included in paginated mode and can
98
+ * be used to re-fetch this exact record (or its neighbours) via `{path}?{qs}&page={index}&size=1`
99
+ * — omitted in non-paginated (`rows` prop) mode since the host already holds the full array. */
100
+ mrdRowClick: EventEmitter<{
101
+ row: Record<string, any>;
102
+ listContext?: ListNavigationContext;
103
+ }>;
98
104
  /** Fired when a toolbar action button is clicked.
99
105
  * For 'export': includes `path` (relative excel path) and `qs` (current sort+filter params).
100
106
  * For 'create': includes `dataClass` (target type) and `parentPath` (e.g. /buyers/123 for RELATED_VIEW). */
@@ -6,10 +6,12 @@
6
6
  */
7
7
  import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
8
8
  import { ClientLayout, ClientLayoutItem as ClientLayoutItem1, ClientLayoutItemFieldDataType, ClientLayoutItemRelationDisplayType, ClientLayoutItemRelationEditBehavior, ClientListValue, CurrencyValue, RelationSearchResult } from "./types";
9
- import { AggregationResult, ClientArchetype, ClientLayoutItem, ClientLayoutItemNavigate, ClientViewMetadata, HyperlinkValue, RelationSearchResult as RelationSearchResult1 } from "./types/client-layout";
9
+ import { AggregationResult, ClientArchetype, ClientLayoutItem, ClientLayoutItemNavigate, ClientLayoutNavigateBehaviour, ClientViewMetadata, HyperlinkValue, RelationSearchResult as RelationSearchResult1 } from "./types/client-layout";
10
+ import { ListNavigationContext } from "./utils/query-params";
10
11
  import { DistinctValue, DocRow } from "./components/documents/mrd-document-list/folder-tree";
11
12
  export { ClientLayout, ClientLayoutItem as ClientLayoutItem1, ClientLayoutItemFieldDataType, ClientLayoutItemRelationDisplayType, ClientLayoutItemRelationEditBehavior, ClientListValue, CurrencyValue, RelationSearchResult } from "./types";
12
- export { AggregationResult, ClientArchetype, ClientLayoutItem, ClientLayoutItemNavigate, ClientViewMetadata, HyperlinkValue, RelationSearchResult as RelationSearchResult1 } from "./types/client-layout";
13
+ export { AggregationResult, ClientArchetype, ClientLayoutItem, ClientLayoutItemNavigate, ClientLayoutNavigateBehaviour, ClientViewMetadata, HyperlinkValue, RelationSearchResult as RelationSearchResult1 } from "./types/client-layout";
14
+ export { ListNavigationContext } from "./utils/query-params";
13
15
  export { DistinctValue, DocRow } from "./components/documents/mrd-document-list/folder-tree";
14
16
  export namespace Components {
15
17
  interface MrdBooleanField {
@@ -245,6 +247,16 @@ export namespace Components {
245
247
  * @default navigator.language
246
248
  */
247
249
  "locale": string;
250
+ /**
251
+ * Minimum height (px) of the inline preview area — it stretches to fill the available row height in the wide side-by-side layout (see mrd-document-view.scss), and falls back to this height when stacked. Overlay hosts typically pass a smaller value than the full-page default to fit available chrome.
252
+ * @default 640
253
+ */
254
+ "previewHeight": number;
255
+ /**
256
+ * Signed URL for the file's inline preview (mrd-file-preview), resolved by the host in response to mrdLoadPreview. Empty while unresolved — the preview area shows a loading state until the host injects a value.
257
+ * @default ''
258
+ */
259
+ "previewUrl": string;
248
260
  }
249
261
  interface MrdEmailField {
250
262
  /**
@@ -318,6 +330,40 @@ export namespace Components {
318
330
  */
319
331
  "value": unknown;
320
332
  }
333
+ /**
334
+ * Renders a signed URL inline as a PDF (native browser viewer, via `<iframe>`)
335
+ * or an image (`<img>`), picked from `mimeType`/`fileName`. Purely
336
+ * presentational: the signed URL is used directly as element `src` — a
337
+ * navigation, not a fetch/XHR, so no CORS handling is needed here. Fetching
338
+ * the signed URL itself is the host's responsibility, same as `mrdLoadImage` /
339
+ * `setImagePreview` on mrd-layout-section.
340
+ */
341
+ interface MrdFilePreview {
342
+ /**
343
+ * Original file name — used for extension-based detection when `mimeType` is absent, and as alt/title text.
344
+ * @default ''
345
+ */
346
+ "fileName": string;
347
+ /**
348
+ * The file's own reference href (not the signed preview URL in `src`). When set, an unsupported type falls back to the same download button used elsewhere in the library, so hosts need no new wiring.
349
+ * @default ''
350
+ */
351
+ "href": string;
352
+ /**
353
+ * @default navigator.language
354
+ */
355
+ "locale": string;
356
+ /**
357
+ * Declared mime type (e.g. 'application/pdf', 'image/png'), when known. Authoritative over `fileName` when present.
358
+ * @default ''
359
+ */
360
+ "mimeType": string;
361
+ /**
362
+ * Signed URL to render.
363
+ * @default ''
364
+ */
365
+ "src": string;
366
+ }
321
367
  interface MrdForm {
322
368
  "layout": ClientLayout;
323
369
  /**
@@ -425,6 +471,11 @@ export namespace Components {
425
471
  * @default {}
426
472
  */
427
473
  "data": Record<string, unknown>;
474
+ /**
475
+ * Minimum height (px) of the commons.document inline file preview — it stretches taller in the wide side-by-side layout. Pass a smaller value when embedding the record in an overlay with limited height.
476
+ * @default 640
477
+ */
478
+ "documentPreviewHeight": number;
428
479
  /**
429
480
  * Items from one layout entry in ClientDashboardMetadata.layouts[].
430
481
  * @default []
@@ -443,6 +494,10 @@ export namespace Components {
443
494
  * Open the lightbox directly with a URL (e.g. after mrdDownload on a FILE field).
444
495
  */
445
496
  "openImagePreview": (url: string) => Promise<void>;
497
+ /**
498
+ * Provide a resolved signed URL for the commons.document archetype's inline file preview, in response to mrdLoadDocumentPreview.
499
+ */
500
+ "setDocumentPreviewUrl": (url: string) => Promise<void>;
446
501
  /**
447
502
  * Provide a resolved URL for an IMAGE field. Shows as thumbnail; clicking opens the lightbox.
448
503
  */
@@ -848,6 +903,10 @@ export interface MrdFileFieldCustomEvent<T> extends CustomEvent<T> {
848
903
  detail: T;
849
904
  target: HTMLMrdFileFieldElement;
850
905
  }
906
+ export interface MrdFilePreviewCustomEvent<T> extends CustomEvent<T> {
907
+ detail: T;
908
+ target: HTMLMrdFilePreviewElement;
909
+ }
851
910
  export interface MrdFormCustomEvent<T> extends CustomEvent<T> {
852
911
  detail: T;
853
912
  target: HTMLMrdFormElement;
@@ -977,7 +1036,7 @@ declare global {
977
1036
  "mrdLoadPage": { page: number; sort: string; path: string; qs: string; nodeId?: string };
978
1037
  "mrdLoadDistinct": { nodeId: string; distinct: string; path: string; qs: string };
979
1038
  "mrdLoadAggregations": { path: string; qs: string; aggQs: string };
980
- "mrdNavigate": { href?: string; label: string };
1039
+ "mrdNavigate": { href?: string; label: string; navigateBehaviour?: ClientLayoutNavigateBehaviour; listContext?: ListNavigationContext };
981
1040
  "mrdAction": { action: string; path?: string; qs?: string; parentPath?: string | null; basicType?: string };
982
1041
  "mrdUpdateObject": { href: string; values: Record<string, unknown> };
983
1042
  "mrdUpload": { file: File };
@@ -1011,7 +1070,7 @@ declare global {
1011
1070
  interface HTMLMrdDocumentListElementEventMap {
1012
1071
  "mrdLoadDistinct": { nodeId: string; distinct: string; path: string; qs: string };
1013
1072
  "mrdLoadPage": { nodeId: string; page: number; sort: string; path: string; qs: string };
1014
- "mrdNavigate": { href?: string; label: string };
1073
+ "mrdNavigate": { href?: string; label: string; listContext?: ListNavigationContext };
1015
1074
  "mrdCanCreate": boolean;
1016
1075
  "mrdUpdateObject": { href: string; values: Record<string, unknown> };
1017
1076
  "mrdUpload": { file: File };
@@ -1049,6 +1108,7 @@ declare global {
1049
1108
  interface HTMLMrdDocumentViewElementEventMap {
1050
1109
  "mrdNavigate": { href?: string; label: string };
1051
1110
  "mrdDownload": { href: string; fileName: string };
1111
+ "mrdLoadPreview": { href: string };
1052
1112
  }
1053
1113
  /**
1054
1114
  * Archetype-driven single-document view. Given a `commons.document` binding and a
@@ -1131,6 +1191,32 @@ declare global {
1131
1191
  prototype: HTMLMrdFileFieldElement;
1132
1192
  new (): HTMLMrdFileFieldElement;
1133
1193
  };
1194
+ interface HTMLMrdFilePreviewElementEventMap {
1195
+ "mrdPreviewReload": void;
1196
+ "mrdDownload": { href: string; fileName: string };
1197
+ }
1198
+ /**
1199
+ * Renders a signed URL inline as a PDF (native browser viewer, via `<iframe>`)
1200
+ * or an image (`<img>`), picked from `mimeType`/`fileName`. Purely
1201
+ * presentational: the signed URL is used directly as element `src` — a
1202
+ * navigation, not a fetch/XHR, so no CORS handling is needed here. Fetching
1203
+ * the signed URL itself is the host's responsibility, same as `mrdLoadImage` /
1204
+ * `setImagePreview` on mrd-layout-section.
1205
+ */
1206
+ interface HTMLMrdFilePreviewElement extends Components.MrdFilePreview, HTMLStencilElement {
1207
+ addEventListener<K extends keyof HTMLMrdFilePreviewElementEventMap>(type: K, listener: (this: HTMLMrdFilePreviewElement, ev: MrdFilePreviewCustomEvent<HTMLMrdFilePreviewElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
1208
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
1209
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
1210
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
1211
+ removeEventListener<K extends keyof HTMLMrdFilePreviewElementEventMap>(type: K, listener: (this: HTMLMrdFilePreviewElement, ev: MrdFilePreviewCustomEvent<HTMLMrdFilePreviewElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
1212
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
1213
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
1214
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
1215
+ }
1216
+ var HTMLMrdFilePreviewElement: {
1217
+ prototype: HTMLMrdFilePreviewElement;
1218
+ new (): HTMLMrdFilePreviewElement;
1219
+ };
1134
1220
  interface HTMLMrdFormElementEventMap {
1135
1221
  "mrdSubmit": Record<string, unknown>;
1136
1222
  "mrdCancel": void;
@@ -1190,11 +1276,12 @@ declare global {
1190
1276
  new (): HTMLMrdImageFieldElement;
1191
1277
  };
1192
1278
  interface HTMLMrdLayoutSectionElementEventMap {
1193
- "mrdNavigate": { href?: string; label: string; navigate?: ClientLayoutItemNavigate };
1279
+ "mrdNavigate": { href?: string; label: string; navigate?: ClientLayoutItemNavigate; navigateBehaviour?: ClientLayoutNavigateBehaviour; listContext?: ListNavigationContext };
1194
1280
  "mrdSearch": { query: string; dataClass: string };
1195
1281
  "mrdDownload": { href: string; fileName: string };
1196
1282
  "mrdLoadViewPage": { name: string; page: number; sort: string; path: string; qs: string; nodeId?: string };
1197
1283
  "mrdLoadImage": { fieldName: string; href: string };
1284
+ "mrdLoadDocumentPreview": { href: string };
1198
1285
  "mrdViewAction": { name: string; action: string; dataClass: string; path?: string; qs?: string; parentPath?: string | null; basicType?: string };
1199
1286
  "mrdLoadViewAggregations": { name: string; dataClass: string; path: string; qs: string; aggQs: string };
1200
1287
  "mrdLoadViewDistinct": { name: string; nodeId: string; distinct: string; path: string; qs: string };
@@ -1311,7 +1398,7 @@ declare global {
1311
1398
  interface HTMLMrdTableElementEventMap {
1312
1399
  "mrdLoadPage": { page: number; sort: string; path: string; qs: string };
1313
1400
  "mrdPageError": { page: number };
1314
- "mrdRowClick": Record<string, any>;
1401
+ "mrdRowClick": { row: Record<string, any>; listContext?: ListNavigationContext };
1315
1402
  "mrdAction": { action: string; path?: string; qs?: string; dataClass?: string; parentPath?: string | null; basicType?: string };
1316
1403
  "mrdDownload": { href: string; fileName: string };
1317
1404
  "mrdLoadAggregations": { path: string; qs: string; aggQs: string };
@@ -1395,6 +1482,7 @@ declare global {
1395
1482
  "mrd-email-field": HTMLMrdEmailFieldElement;
1396
1483
  "mrd-field": HTMLMrdFieldElement;
1397
1484
  "mrd-file-field": HTMLMrdFileFieldElement;
1485
+ "mrd-file-preview": HTMLMrdFilePreviewElement;
1398
1486
  "mrd-form": HTMLMrdFormElement;
1399
1487
  "mrd-hyperlink-field": HTMLMrdHyperlinkFieldElement;
1400
1488
  "mrd-image-field": HTMLMrdImageFieldElement;
@@ -1579,9 +1667,9 @@ declare namespace LocalJSX {
1579
1667
  */
1580
1668
  "onMrdLoadPage"?: (event: MrdDocumentContainerCustomEvent<{ page: number; sort: string; path: string; qs: string; nodeId?: string }>) => void;
1581
1669
  /**
1582
- * A row / document was activated. Host routes to the object page.
1670
+ * A row / document was activated. Host routes to the object page. Documents are always the "quick look" use case, so navigateBehaviour is hardcoded to OVERLAY_PAGE here — unlike the generic VIEW/RELATED_VIEW table path in mrd-layout-section, which takes it from the item's configuration.
1583
1671
  */
1584
- "onMrdNavigate"?: (event: MrdDocumentContainerCustomEvent<{ href?: string; label: string }>) => void;
1672
+ "onMrdNavigate"?: (event: MrdDocumentContainerCustomEvent<{ href?: string; label: string; navigateBehaviour?: ClientLayoutNavigateBehaviour; listContext?: ListNavigationContext }>) => void;
1585
1673
  /**
1586
1674
  * Generic "update an existing object" request, re-emitted from the folder tree (a document was dragged into another folder/container).
1587
1675
  */
@@ -1652,9 +1740,9 @@ declare namespace LocalJSX {
1652
1740
  */
1653
1741
  "onMrdLoadPage"?: (event: MrdDocumentListCustomEvent<{ nodeId: string; page: number; sort: string; path: string; qs: string }>) => void;
1654
1742
  /**
1655
- * A document row was clicked. Host routes to the document object page.
1743
+ * A document row was clicked. Host routes to the document object page. `listContext` can be used to re-fetch this exact record (or its neighbours) via `{path}?{qs}&page={index}&size=1`.
1656
1744
  */
1657
- "onMrdNavigate"?: (event: MrdDocumentListCustomEvent<{ href?: string; label: string }>) => void;
1745
+ "onMrdNavigate"?: (event: MrdDocumentListCustomEvent<{ href?: string; label: string; listContext?: ListNavigationContext }>) => void;
1658
1746
  /**
1659
1747
  * Generic "update an existing object" request — fired when a document is dragged into another folder/container. Host PATCHes `href` with `values` (no move/folder knowledge needed). `values` carries the new folder string (or null for the container root) and, on a cross-container move, the new container relation href.
1660
1748
  */
@@ -1696,10 +1784,24 @@ declare namespace LocalJSX {
1696
1784
  * Download the document file. Host resolves the href to a signed URL.
1697
1785
  */
1698
1786
  "onMrdDownload"?: (event: MrdDocumentViewCustomEvent<{ href: string; fileName: string }>) => void;
1787
+ /**
1788
+ * The file slot has an href and needs a signed URL for inline preview. Fired once on load and again whenever the file href changes (e.g. the overlay is reused for a different document via prev/next). Host resolves it and calls back with `previewUrl` — the same pattern as mrdLoadImage / setImagePreview on mrd-layout-section.
1789
+ */
1790
+ "onMrdLoadPreview"?: (event: MrdDocumentViewCustomEvent<{ href: string }>) => void;
1699
1791
  /**
1700
1792
  * Navigate to the container (dossier). Host resolves the href and routes.
1701
1793
  */
1702
1794
  "onMrdNavigate"?: (event: MrdDocumentViewCustomEvent<{ href?: string; label: string }>) => void;
1795
+ /**
1796
+ * Minimum height (px) of the inline preview area — it stretches to fill the available row height in the wide side-by-side layout (see mrd-document-view.scss), and falls back to this height when stacked. Overlay hosts typically pass a smaller value than the full-page default to fit available chrome.
1797
+ * @default 640
1798
+ */
1799
+ "previewHeight"?: number;
1800
+ /**
1801
+ * Signed URL for the file's inline preview (mrd-file-preview), resolved by the host in response to mrdLoadPreview. Empty while unresolved — the preview area shows a loading state until the host injects a value.
1802
+ * @default ''
1803
+ */
1804
+ "previewUrl"?: string;
1703
1805
  }
1704
1806
  interface MrdEmailField {
1705
1807
  /**
@@ -1786,6 +1888,48 @@ declare namespace LocalJSX {
1786
1888
  */
1787
1889
  "value"?: unknown;
1788
1890
  }
1891
+ /**
1892
+ * Renders a signed URL inline as a PDF (native browser viewer, via `<iframe>`)
1893
+ * or an image (`<img>`), picked from `mimeType`/`fileName`. Purely
1894
+ * presentational: the signed URL is used directly as element `src` — a
1895
+ * navigation, not a fetch/XHR, so no CORS handling is needed here. Fetching
1896
+ * the signed URL itself is the host's responsibility, same as `mrdLoadImage` /
1897
+ * `setImagePreview` on mrd-layout-section.
1898
+ */
1899
+ interface MrdFilePreview {
1900
+ /**
1901
+ * Original file name — used for extension-based detection when `mimeType` is absent, and as alt/title text.
1902
+ * @default ''
1903
+ */
1904
+ "fileName"?: string;
1905
+ /**
1906
+ * The file's own reference href (not the signed preview URL in `src`). When set, an unsupported type falls back to the same download button used elsewhere in the library, so hosts need no new wiring.
1907
+ * @default ''
1908
+ */
1909
+ "href"?: string;
1910
+ /**
1911
+ * @default navigator.language
1912
+ */
1913
+ "locale"?: string;
1914
+ /**
1915
+ * Declared mime type (e.g. 'application/pdf', 'image/png'), when known. Authoritative over `fileName` when present.
1916
+ * @default ''
1917
+ */
1918
+ "mimeType"?: string;
1919
+ /**
1920
+ * Download the file. Same shape as mrd-document-view / mrd-layout-section's mrdDownload — host resolves `href` to a signed URL.
1921
+ */
1922
+ "onMrdDownload"?: (event: MrdFilePreviewCustomEvent<{ href: string; fileName: string }>) => void;
1923
+ /**
1924
+ * The image failed to load — most likely an expired signed URL. Host should fetch a fresh signed URL and update `src`. Note: this is only raised for images. Browsers don't reliably surface HTTP-level failures (e.g. a 403 on an expired URL) through an iframe's load/error events, so the same detection isn't available for PDFs.
1925
+ */
1926
+ "onMrdPreviewReload"?: (event: MrdFilePreviewCustomEvent<void>) => void;
1927
+ /**
1928
+ * Signed URL to render.
1929
+ * @default ''
1930
+ */
1931
+ "src"?: string;
1932
+ }
1789
1933
  interface MrdForm {
1790
1934
  "layout": ClientLayout;
1791
1935
  /**
@@ -1905,6 +2049,11 @@ declare namespace LocalJSX {
1905
2049
  * @default {}
1906
2050
  */
1907
2051
  "data"?: Record<string, unknown>;
2052
+ /**
2053
+ * Minimum height (px) of the commons.document inline file preview — it stretches taller in the wide side-by-side layout. Pass a smaller value when embedding the record in an overlay with limited height.
2054
+ * @default 640
2055
+ */
2056
+ "documentPreviewHeight"?: number;
1908
2057
  /**
1909
2058
  * Items from one layout entry in ClientDashboardMetadata.layouts[].
1910
2059
  * @default []
@@ -1924,6 +2073,10 @@ declare namespace LocalJSX {
1924
2073
  */
1925
2074
  "onMrdCreateObject"?: (event: MrdLayoutSectionCustomEvent<{ name: string; path: string; values: Record<string, unknown> }>) => void;
1926
2075
  "onMrdDownload"?: (event: MrdLayoutSectionCustomEvent<{ href: string; fileName: string }>) => void;
2076
+ /**
2077
+ * Re-emitted from an embedded mrd-document-view's mrdLoadPreview (commons.document single-object view); host resolves the file href to a signed URL and calls setDocumentPreviewUrl().
2078
+ */
2079
+ "onMrdLoadDocumentPreview"?: (event: MrdLayoutSectionCustomEvent<{ href: string }>) => void;
1927
2080
  /**
1928
2081
  * Fired once on load for each IMAGE field that has an href; host resolves the URL and calls setImagePreview().
1929
2082
  */
@@ -1940,7 +2093,7 @@ declare namespace LocalJSX {
1940
2093
  * Re-emitted from an embedded mrd-table's or mrd-document-list's mrdLoadPage; host fetches the rows and calls setViewPage(). `nodeId` is present for a document-list folder load.
1941
2094
  */
1942
2095
  "onMrdLoadViewPage"?: (event: MrdLayoutSectionCustomEvent<{ name: string; page: number; sort: string; path: string; qs: string; nodeId?: string }>) => void;
1943
- "onMrdNavigate"?: (event: MrdLayoutSectionCustomEvent<{ href?: string; label: string; navigate?: ClientLayoutItemNavigate }>) => void;
2096
+ "onMrdNavigate"?: (event: MrdLayoutSectionCustomEvent<{ href?: string; label: string; navigate?: ClientLayoutItemNavigate; navigateBehaviour?: ClientLayoutNavigateBehaviour; listContext?: ListNavigationContext }>) => void;
1944
2097
  "onMrdSearch"?: (event: MrdLayoutSectionCustomEvent<{ query: string; dataClass: string }>) => void;
1945
2098
  /**
1946
2099
  * Generic "update an existing object" request from an embedded document view (a document dragged into another folder). Host PATCHes `href` with `values`.
@@ -2186,9 +2339,9 @@ declare namespace LocalJSX {
2186
2339
  */
2187
2340
  "onMrdPageError"?: (event: MrdTableCustomEvent<{ page: number }>) => void;
2188
2341
  /**
2189
- * Fired when a data row is clicked. Detail is the full row object including _links.
2342
+ * Fired when a data row is clicked. `listContext` is included in paginated mode and can be used to re-fetch this exact record (or its neighbours) via `{path}?{qs}&page={index}&size=1` — omitted in non-paginated (`rows` prop) mode since the host already holds the full array.
2190
2343
  */
2191
- "onMrdRowClick"?: (event: MrdTableCustomEvent<Record<string, any>>) => void;
2344
+ "onMrdRowClick"?: (event: MrdTableCustomEvent<{ row: Record<string, any>; listContext?: ListNavigationContext }>) => void;
2192
2345
  /**
2193
2346
  * Records per page (must match the API page size).
2194
2347
  * @default 20
@@ -2363,6 +2516,8 @@ declare namespace LocalJSX {
2363
2516
  }
2364
2517
  interface MrdDocumentViewAttributes {
2365
2518
  "locale": string;
2519
+ "previewUrl": string;
2520
+ "previewHeight": number;
2366
2521
  }
2367
2522
  interface MrdEmailFieldAttributes {
2368
2523
  "name": string;
@@ -2385,6 +2540,13 @@ declare namespace LocalJSX {
2385
2540
  "accept": string;
2386
2541
  "maxSize": number;
2387
2542
  }
2543
+ interface MrdFilePreviewAttributes {
2544
+ "src": string;
2545
+ "mimeType": string;
2546
+ "fileName": string;
2547
+ "href": string;
2548
+ "locale": string;
2549
+ }
2388
2550
  interface MrdFormAttributes {
2389
2551
  "locale": string;
2390
2552
  "referenceHref": string;
@@ -2411,6 +2573,7 @@ declare namespace LocalJSX {
2411
2573
  }
2412
2574
  interface MrdLayoutSectionAttributes {
2413
2575
  "locale": string;
2576
+ "documentPreviewHeight": number;
2414
2577
  }
2415
2578
  interface MrdListFieldAttributes {
2416
2579
  "name": string;
@@ -2511,6 +2674,7 @@ declare namespace LocalJSX {
2511
2674
  "mrd-email-field": Omit<MrdEmailField, keyof MrdEmailFieldAttributes> & { [K in keyof MrdEmailField & keyof MrdEmailFieldAttributes]?: MrdEmailField[K] } & { [K in keyof MrdEmailField & keyof MrdEmailFieldAttributes as `attr:${K}`]?: MrdEmailFieldAttributes[K] } & { [K in keyof MrdEmailField & keyof MrdEmailFieldAttributes as `prop:${K}`]?: MrdEmailField[K] };
2512
2675
  "mrd-field": Omit<MrdField, keyof MrdFieldAttributes> & { [K in keyof MrdField & keyof MrdFieldAttributes]?: MrdField[K] } & { [K in keyof MrdField & keyof MrdFieldAttributes as `attr:${K}`]?: MrdFieldAttributes[K] } & { [K in keyof MrdField & keyof MrdFieldAttributes as `prop:${K}`]?: MrdField[K] };
2513
2676
  "mrd-file-field": Omit<MrdFileField, keyof MrdFileFieldAttributes> & { [K in keyof MrdFileField & keyof MrdFileFieldAttributes]?: MrdFileField[K] } & { [K in keyof MrdFileField & keyof MrdFileFieldAttributes as `attr:${K}`]?: MrdFileFieldAttributes[K] } & { [K in keyof MrdFileField & keyof MrdFileFieldAttributes as `prop:${K}`]?: MrdFileField[K] };
2677
+ "mrd-file-preview": Omit<MrdFilePreview, keyof MrdFilePreviewAttributes> & { [K in keyof MrdFilePreview & keyof MrdFilePreviewAttributes]?: MrdFilePreview[K] } & { [K in keyof MrdFilePreview & keyof MrdFilePreviewAttributes as `attr:${K}`]?: MrdFilePreviewAttributes[K] } & { [K in keyof MrdFilePreview & keyof MrdFilePreviewAttributes as `prop:${K}`]?: MrdFilePreview[K] };
2514
2678
  "mrd-form": Omit<MrdForm, keyof MrdFormAttributes> & { [K in keyof MrdForm & keyof MrdFormAttributes]?: MrdForm[K] } & { [K in keyof MrdForm & keyof MrdFormAttributes as `attr:${K}`]?: MrdFormAttributes[K] } & { [K in keyof MrdForm & keyof MrdFormAttributes as `prop:${K}`]?: MrdForm[K] };
2515
2679
  "mrd-hyperlink-field": Omit<MrdHyperlinkField, keyof MrdHyperlinkFieldAttributes> & { [K in keyof MrdHyperlinkField & keyof MrdHyperlinkFieldAttributes]?: MrdHyperlinkField[K] } & { [K in keyof MrdHyperlinkField & keyof MrdHyperlinkFieldAttributes as `attr:${K}`]?: MrdHyperlinkFieldAttributes[K] } & { [K in keyof MrdHyperlinkField & keyof MrdHyperlinkFieldAttributes as `prop:${K}`]?: MrdHyperlinkField[K] };
2516
2680
  "mrd-image-field": Omit<MrdImageField, keyof MrdImageFieldAttributes> & { [K in keyof MrdImageField & keyof MrdImageFieldAttributes]?: MrdImageField[K] } & { [K in keyof MrdImageField & keyof MrdImageFieldAttributes as `attr:${K}`]?: MrdImageFieldAttributes[K] } & { [K in keyof MrdImageField & keyof MrdImageFieldAttributes as `prop:${K}`]?: MrdImageField[K] };
@@ -2575,6 +2739,15 @@ declare module "@stencil/core" {
2575
2739
  "mrd-email-field": LocalJSX.IntrinsicElements["mrd-email-field"] & JSXBase.HTMLAttributes<HTMLMrdEmailFieldElement>;
2576
2740
  "mrd-field": LocalJSX.IntrinsicElements["mrd-field"] & JSXBase.HTMLAttributes<HTMLMrdFieldElement>;
2577
2741
  "mrd-file-field": LocalJSX.IntrinsicElements["mrd-file-field"] & JSXBase.HTMLAttributes<HTMLMrdFileFieldElement>;
2742
+ /**
2743
+ * Renders a signed URL inline as a PDF (native browser viewer, via `<iframe>`)
2744
+ * or an image (`<img>`), picked from `mimeType`/`fileName`. Purely
2745
+ * presentational: the signed URL is used directly as element `src` — a
2746
+ * navigation, not a fetch/XHR, so no CORS handling is needed here. Fetching
2747
+ * the signed URL itself is the host's responsibility, same as `mrdLoadImage` /
2748
+ * `setImagePreview` on mrd-layout-section.
2749
+ */
2750
+ "mrd-file-preview": LocalJSX.IntrinsicElements["mrd-file-preview"] & JSXBase.HTMLAttributes<HTMLMrdFilePreviewElement>;
2578
2751
  "mrd-form": LocalJSX.IntrinsicElements["mrd-form"] & JSXBase.HTMLAttributes<HTMLMrdFormElement>;
2579
2752
  "mrd-hyperlink-field": LocalJSX.IntrinsicElements["mrd-hyperlink-field"] & JSXBase.HTMLAttributes<HTMLMrdHyperlinkFieldElement>;
2580
2753
  "mrd-image-field": LocalJSX.IntrinsicElements["mrd-image-field"] & JSXBase.HTMLAttributes<HTMLMrdImageFieldElement>;
@@ -1,2 +1,3 @@
1
1
  export * from './types';
2
2
  export type { AlternativeView, ColumnFilter, TableAction, TableColumn } from './utils/cell-renderer';
3
+ export type { ListNavigationContext } from './utils/query-params';