@mmlogic/components 0.4.2 → 0.5.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.
Files changed (98) hide show
  1. package/dist/cjs/client-layout-RZ3Ix-4a.js +87 -0
  2. package/dist/cjs/{index-CAzwGt9u.js → index-DzRfoAPz.js} +36 -9
  3. package/dist/cjs/index.cjs.js +56 -81
  4. package/dist/cjs/loader.cjs.js +2 -2
  5. package/dist/cjs/mosterdcomponents.cjs.js +3 -3
  6. package/dist/cjs/{mrd-boolean-field_24.cjs.entry.js → mrd-boolean-field_23.cjs.entry.js} +175 -287
  7. package/dist/collection/collection-manifest.json +1 -2
  8. package/dist/collection/components/documents/mrd-document-container/mrd-document-container.css +0 -17
  9. package/dist/collection/components/documents/mrd-document-container/mrd-document-container.js +20 -5
  10. package/dist/collection/components/documents/mrd-document-list/mrd-document-list.css +9 -43
  11. package/dist/collection/components/documents/mrd-document-list/mrd-document-list.js +36 -11
  12. package/dist/collection/components/documents/mrd-document-list/tree-view.js +1 -1
  13. package/dist/collection/components/documents/mrd-document-view/mrd-document-view.css +3 -44
  14. package/dist/collection/components/documents/mrd-document-view/mrd-document-view.js +37 -85
  15. package/dist/collection/components/fields/mrd-boolean-field/mrd-boolean-field.css +0 -10
  16. package/dist/collection/components/fields/mrd-currency-field/mrd-currency-field.css +0 -7
  17. package/dist/collection/components/fields/mrd-file-field/mrd-file-field.css +0 -11
  18. package/dist/collection/components/fields/mrd-hyperlink-field/mrd-hyperlink-field.css +0 -3
  19. package/dist/collection/components/fields/mrd-image-field/mrd-image-field.css +6 -20
  20. package/dist/collection/components/fields/mrd-list-field/mrd-list-field.css +0 -4
  21. package/dist/collection/components/fields/mrd-longtext-field/mrd-longtext-field.css +0 -1
  22. package/dist/collection/components/fields/mrd-relation-field/mrd-relation-field.css +9 -35
  23. package/dist/collection/components/fields/mrd-textarea-field/mrd-textarea-field.css +0 -9
  24. package/dist/collection/components/form/mrd-field/mrd-field.css +0 -13
  25. package/dist/collection/components/form/mrd-form/mrd-form.css +0 -19
  26. package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.css +3 -58
  27. package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.js +33 -67
  28. package/dist/collection/components/table/mrd-table/mrd-table.css +38 -185
  29. package/dist/collection/components/table/mrd-table/mrd-table.js +20 -6
  30. package/dist/collection/dev/app.js +80 -43
  31. package/dist/collection/index.js +1 -0
  32. package/dist/collection/utils/document-attachments.js +20 -0
  33. package/dist/collection/{components/documents/mrd-file-preview → utils}/file-preview-kind.js +4 -4
  34. package/dist/collection/utils/i18n.js +0 -32
  35. package/dist/collection/utils/query-params.js +0 -4
  36. package/dist/components/document-attachments.js +1 -0
  37. package/dist/components/field-helpers.js +1 -1
  38. package/dist/components/i18n.js +1 -1
  39. package/dist/components/index.js +1 -1
  40. package/dist/components/mrd-document-container2.js +1 -1
  41. package/dist/components/mrd-document-list2.js +1 -1
  42. package/dist/components/mrd-document-view2.js +1 -1
  43. package/dist/components/mrd-email-field2.js +1 -1
  44. package/dist/components/mrd-form.js +1 -1
  45. package/dist/components/mrd-hyperlink-field2.js +1 -1
  46. package/dist/components/mrd-image-field2.js +1 -1
  47. package/dist/components/mrd-layout-section.js +1 -1
  48. package/dist/components/mrd-number-field2.js +1 -1
  49. package/dist/components/mrd-relation-field2.js +1 -1
  50. package/dist/components/mrd-table2.js +1 -1
  51. package/dist/esm/client-layout-DCOAAH92.js +84 -0
  52. package/dist/esm/{index-DiSEJMA8.js → index-DiSe6vjv.js} +36 -9
  53. package/dist/esm/index.js +30 -80
  54. package/dist/esm/loader.js +3 -3
  55. package/dist/esm/mosterdcomponents.js +4 -4
  56. package/dist/esm/{mrd-boolean-field_24.entry.js → mrd-boolean-field_23.entry.js} +85 -196
  57. package/dist/mosterdcomponents/index.esm.js +1 -1
  58. package/dist/mosterdcomponents/mosterdcomponents.css +7 -1
  59. package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
  60. package/dist/mosterdcomponents/p-DCOAAH92.js +1 -0
  61. package/dist/mosterdcomponents/p-DiSe6vjv.js +2 -0
  62. package/dist/mosterdcomponents/p-b56f9802.entry.js +1 -0
  63. package/dist/types/components/documents/mrd-document-container/mrd-document-container.d.ts +6 -2
  64. package/dist/types/components/documents/mrd-document-list/mrd-document-list.d.ts +13 -2
  65. package/dist/types/components/documents/mrd-document-list/tree-view.d.ts +1 -1
  66. package/dist/types/components/documents/mrd-document-view/mrd-document-view.d.ts +21 -27
  67. package/dist/types/components/layout/mrd-layout-section/mrd-layout-section.d.ts +14 -15
  68. package/dist/types/components/table/mrd-table/mrd-table.d.ts +8 -2
  69. package/dist/types/components.d.ts +54 -190
  70. package/dist/types/index.d.ts +3 -0
  71. package/dist/types/stencil-public-runtime.d.ts +1 -0
  72. package/dist/types/types/client-layout.d.ts +8 -0
  73. package/dist/types/utils/document-attachments.d.ts +8 -0
  74. package/dist/types/utils/file-preview-kind.d.ts +9 -0
  75. package/dist/types/utils/query-params.d.ts +14 -0
  76. package/package.json +10 -12
  77. package/dist/collection/components/documents/mrd-file-preview/mrd-file-preview.css +0 -59
  78. package/dist/collection/components/documents/mrd-file-preview/mrd-file-preview.js +0 -212
  79. package/dist/components/mrd-file-preview.d.ts +0 -11
  80. package/dist/components/mrd-file-preview.js +0 -1
  81. package/dist/components/mrd-file-preview2.js +0 -1
  82. package/dist/mosterdcomponents/cell-renderer-PbcEU4ph.js.map +0 -1
  83. package/dist/mosterdcomponents/client-layout-DCOAAH92.js.map +0 -1
  84. package/dist/mosterdcomponents/field-helpers-CASS3akr.js.map +0 -1
  85. package/dist/mosterdcomponents/file-upload-common-D1ndi6cN.js.map +0 -1
  86. package/dist/mosterdcomponents/format-BAfsQfy1.js.map +0 -1
  87. package/dist/mosterdcomponents/i18n-B1IIkRF9.js.map +0 -1
  88. package/dist/mosterdcomponents/index-AokUFVX0.js.map +0 -1
  89. package/dist/mosterdcomponents/index-CprJSlzK.js.map +0 -1
  90. package/dist/mosterdcomponents/index.esm.js.map +0 -1
  91. package/dist/mosterdcomponents/mosterdcomponents.esm.js.map +0 -1
  92. package/dist/mosterdcomponents/p-DiSEJMA8.js +0 -2
  93. package/dist/mosterdcomponents/p-aae8a9dc.entry.js +0 -1
  94. package/dist/mosterdcomponents/query-params-B1HfnMOl.js.map +0 -1
  95. package/dist/mosterdcomponents/quill-C9pgw_k-.js.map +0 -1
  96. package/dist/mosterdcomponents/validation-DbEViuiw.js.map +0 -1
  97. package/dist/types/components/documents/mrd-file-preview/file-preview-kind.d.ts +0 -9
  98. package/dist/types/components/documents/mrd-file-preview/mrd-file-preview.d.ts +0 -41
@@ -3,7 +3,6 @@
3
3
  "components/documents/mrd-document-container/mrd-document-container.js",
4
4
  "components/documents/mrd-document-list/mrd-document-list.js",
5
5
  "components/documents/mrd-document-view/mrd-document-view.js",
6
- "components/documents/mrd-file-preview/mrd-file-preview.js",
7
6
  "components/fields/mrd-boolean-field/mrd-boolean-field.js",
8
7
  "components/fields/mrd-currency-field/mrd-currency-field.js",
9
8
  "components/fields/mrd-date-field/mrd-date-field.js",
@@ -28,7 +27,7 @@
28
27
  "mixins": [],
29
28
  "compiler": {
30
29
  "name": "@stencil/core",
31
- "version": "4.43.2",
30
+ "version": "4.43.5",
32
31
  "typescriptVersion": "5.8.3"
33
32
  },
34
33
  "collections": [],
@@ -7,23 +7,14 @@
7
7
  align-items: center;
8
8
  justify-content: flex-end;
9
9
  gap: var(--mrd-space-2);
10
- /* Horizontal padding intentionally 0: mrd-table__toolbar is flush with its
11
- card body too, so the two sibling views' buttons line up on the same
12
- left/right edge as their bodies below. */
13
10
  padding: var(--mrd-space-2) 0;
14
11
  border-bottom: 1px solid var(--mrd-color-neutral-100);
15
12
  }
16
-
17
- /* Card frame matching .mrd-table__scroll, so the tree view reads as an inset
18
- panel like the sibling table view instead of bleeding to the tab edges.
19
- The list mode doesn't need this: the embedded mrd-table already draws its
20
- own .mrd-table__scroll frame. */
21
13
  .mrd-document-container__body--tree {
22
14
  border: 1px solid var(--mrd-border-color);
23
15
  border-radius: var(--mrd-border-radius);
24
16
  overflow: hidden;
25
17
  }
26
-
27
18
  .mrd-document-container__action {
28
19
  display: inline-flex;
29
20
  align-items: center;
@@ -38,23 +29,19 @@
38
29
  cursor: pointer;
39
30
  transition: background var(--mrd-transition-fast), border-color var(--mrd-transition-fast);
40
31
  }
41
-
42
32
  .mrd-document-container__action svg {
43
33
  width: 1rem;
44
34
  height: 1rem;
45
35
  color: var(--mrd-color-folder);
46
36
  }
47
-
48
37
  .mrd-document-container__action:hover:not(:disabled) {
49
38
  background: var(--mrd-color-neutral-50);
50
39
  border-color: var(--mrd-color-neutral-300);
51
40
  }
52
-
53
41
  .mrd-document-container__action:disabled {
54
42
  opacity: 0.5;
55
43
  cursor: not-allowed;
56
44
  }
57
-
58
45
  .mrd-document-container__seg {
59
46
  display: inline-flex;
60
47
  gap: 2px;
@@ -62,7 +49,6 @@
62
49
  background: var(--mrd-color-neutral-100);
63
50
  border-radius: var(--mrd-border-radius);
64
51
  }
65
-
66
52
  .mrd-document-container__seg-btn {
67
53
  width: 1.875rem;
68
54
  height: 1.625rem;
@@ -75,17 +61,14 @@
75
61
  cursor: pointer;
76
62
  transition: color var(--mrd-transition-fast), background var(--mrd-transition-fast);
77
63
  }
78
-
79
64
  .mrd-document-container__seg-btn:hover {
80
65
  color: var(--mrd-color-neutral-800);
81
66
  }
82
-
83
67
  .mrd-document-container__seg-btn[aria-pressed=true] {
84
68
  background: var(--mrd-color-white);
85
69
  color: var(--mrd-color-primary-dark);
86
70
  box-shadow: var(--mrd-shadow-sm);
87
71
  }
88
-
89
72
  .mrd-document-container__seg-btn svg {
90
73
  width: 1rem;
91
74
  height: 1rem;
@@ -1,6 +1,7 @@
1
1
  import { Host, h } from "@stencil/core";
2
2
  import { ClientLayoutNavigateBehaviour } from "../../../types/client-layout";
3
3
  import { t } from "../../../utils/i18n";
4
+ import { attachmentsFromRecord } from "../../../utils/document-attachments";
4
5
  /**
5
6
  * Owns a document collection view: a single toolbar (view switch + collection
6
7
  * actions like "New folder", and — later — upload / drag-drop) plus the two
@@ -98,11 +99,13 @@ export class MrdDocumentContainer {
98
99
  }, onMrdRowClick: (e) => {
99
100
  var _a, _b, _c;
100
101
  e.stopPropagation();
101
- const row = e.detail;
102
+ const { row, listContext } = e.detail;
102
103
  this.mrdNavigate.emit({
103
104
  href: (_b = (_a = row === null || row === void 0 ? void 0 : row._links) === null || _a === void 0 ? void 0 : _a.self) === null || _b === void 0 ? void 0 : _b.href,
104
105
  label: (_c = row === null || row === void 0 ? void 0 : row.name) !== null && _c !== void 0 ? _c : '',
105
106
  navigateBehaviour: ClientLayoutNavigateBehaviour.OVERLAY_PAGE,
107
+ listContext,
108
+ attachments: attachmentsFromRecord(this.archetype, row),
106
109
  });
107
110
  }, onMrdAction: (e) => {
108
111
  e.stopPropagation();
@@ -111,7 +114,7 @@ export class MrdDocumentContainer {
111
114
  }
112
115
  render() {
113
116
  const treeMode = this.mode === 'tree';
114
- return (h(Host, { key: 'e8d37d2f818b9b2260fb2ccd3d784393a28385c4' }, this.renderToolbar(), h("div", { key: 'fa80a1343e9b2f1e74f30317bfbfbab78ea63e5d', class: {
117
+ return (h(Host, { key: '4d21f26c956773c63cbf5118394c6afa29d6014d' }, this.renderToolbar(), h("div", { key: 'bc070236bf9a7d0eba57aa2cd70fa3ae36cbf5f1', class: {
115
118
  'mrd-document-container__body': true,
116
119
  'mrd-document-container__body--tree': treeMode,
117
120
  }, style: treeMode ? { height: `${this.height}px`, overflowY: 'auto' } : {} }, treeMode ? this.renderTree() : this.renderList())));
@@ -341,17 +344,29 @@ export class MrdDocumentContainer {
341
344
  "composed": true,
342
345
  "docs": {
343
346
  "tags": [],
344
- "text": "A row / document was activated. Host routes to the object page. Documents\nare always the \"quick look\" use case, so navigateBehaviour is hardcoded\nto OVERLAY_PAGE here \u2014 unlike the generic VIEW/RELATED_VIEW table path in\nmrd-layout-section, which takes it from the item's configuration."
347
+ "text": "A row / document was activated. Host routes to the object page. Documents\nare always the \"quick look\" use case, so navigateBehaviour is hardcoded\nto OVERLAY_PAGE here \u2014 unlike the generic VIEW/RELATED_VIEW table path in\nmrd-layout-section, which takes it from the item's configuration.\n`attachments` prefetches the clicked row's file slot (see TASK-0169)."
345
348
  },
346
349
  "complexType": {
347
- "original": "{ href?: string; label: string; navigateBehaviour?: ClientLayoutNavigateBehaviour }",
348
- "resolved": "{ href?: string | undefined; label: string; navigateBehaviour?: ClientLayoutNavigateBehaviour | undefined; }",
350
+ "original": "{ href?: string; label: string; navigateBehaviour?: ClientLayoutNavigateBehaviour; listContext?: ListNavigationContext; attachments?: DocumentAttachment[] }",
351
+ "resolved": "{ href?: string | undefined; label: string; navigateBehaviour?: ClientLayoutNavigateBehaviour | undefined; listContext?: ListNavigationContext | undefined; attachments?: DocumentAttachment[] | undefined; }",
349
352
  "references": {
350
353
  "ClientLayoutNavigateBehaviour": {
351
354
  "location": "import",
352
355
  "path": "../../../types/client-layout",
353
356
  "id": "src/types/client-layout.ts::ClientLayoutNavigateBehaviour",
354
357
  "referenceLocation": "ClientLayoutNavigateBehaviour"
358
+ },
359
+ "ListNavigationContext": {
360
+ "location": "import",
361
+ "path": "../../../utils/query-params",
362
+ "id": "src/utils/query-params.ts::ListNavigationContext",
363
+ "referenceLocation": "ListNavigationContext"
364
+ },
365
+ "DocumentAttachment": {
366
+ "location": "import",
367
+ "path": "../../../types/client-layout",
368
+ "id": "src/types/client-layout.ts::DocumentAttachment",
369
+ "referenceLocation": "DocumentAttachment"
355
370
  }
356
371
  }
357
372
  }
@@ -1,4 +1,3 @@
1
- @charset "UTF-8";
2
1
  :host {
3
2
  display: block;
4
3
  height: 100%;
@@ -9,68 +8,54 @@
9
8
  min-height: 100%;
10
9
  box-sizing: border-box;
11
10
  }
12
-
13
- /* Whole-area highlight while a file/document is dragged over the root (dossier
14
- context) — makes the drop target obvious, Finder-style. */
15
11
  .mrd-document-list--drop-active {
16
12
  outline: 2px dashed var(--mrd-color-primary);
17
13
  outline-offset: -4px;
18
14
  background: var(--mrd-color-primary-50, rgba(22, 163, 74, 0.06));
19
15
  }
20
-
21
16
  .mrd-document-list__row {
22
17
  display: flex;
23
18
  align-items: center;
24
19
  gap: var(--mrd-space-1);
25
20
  height: 2.125rem;
26
- /* Asymmetric: a narrow left gutter (Finder-style — the disclosure triangle
27
- sits in the margin, not indented behind a full column) vs. a roomier
28
- right side for the count/date columns. */
29
21
  padding: 0 var(--mrd-space-4) 0 var(--mrd-space-2);
30
22
  cursor: pointer;
31
23
  user-select: none;
32
24
  font-size: var(--mrd-font-size-sm);
33
25
  color: var(--mrd-color-neutral-800);
34
26
  }
35
-
36
27
  .mrd-document-list__row:hover {
37
28
  background: var(--mrd-color-neutral-50);
38
29
  }
39
-
40
30
  .mrd-document-list__row--selected {
41
31
  background: var(--mrd-color-primary-50, rgba(22, 163, 74, 0.1));
42
32
  }
43
-
44
33
  .mrd-document-list__row--selected:hover {
45
34
  background: var(--mrd-color-primary-50, rgba(22, 163, 74, 0.1));
46
35
  }
47
-
48
36
  .mrd-document-list__row--pending .mrd-document-list__label {
49
37
  font-style: italic;
50
38
  color: var(--mrd-color-neutral-500);
51
39
  }
52
-
53
40
  .mrd-document-list__row--doc {
54
41
  cursor: grab;
55
42
  }
56
-
57
43
  .mrd-document-list__row--doc:active {
58
44
  cursor: grabbing;
59
45
  }
60
-
61
46
  .mrd-document-list__row--drop {
62
47
  background: var(--mrd-color-primary-50, rgba(22, 163, 74, 0.1));
63
48
  box-shadow: inset 0 0 0 1px var(--mrd-color-primary);
64
49
  }
65
-
66
50
  .mrd-document-list__row--drop:hover {
67
51
  background: var(--mrd-color-primary-50, rgba(22, 163, 74, 0.1));
68
52
  }
69
-
70
53
  .mrd-document-list__row--edit {
71
54
  cursor: default;
72
55
  }
73
-
56
+ .mrd-document-list__row--dossier .mrd-document-list__label {
57
+ font-weight: var(--mrd-font-weight-semibold);
58
+ }
74
59
  .mrd-document-list__name-input {
75
60
  flex: 1;
76
61
  min-width: 0;
@@ -84,22 +69,15 @@
84
69
  outline: none;
85
70
  box-shadow: var(--mrd-shadow-focus);
86
71
  }
87
-
88
72
  .mrd-document-list__error {
89
73
  font-size: var(--mrd-font-size-xs);
90
74
  color: var(--mrd-color-danger, #dc2626);
91
75
  padding-top: 0.125rem;
92
76
  padding-bottom: 0.25rem;
93
77
  }
94
-
95
- .mrd-document-list__row--dossier .mrd-document-list__label {
96
- font-weight: var(--mrd-font-weight-semibold);
97
- }
98
-
99
78
  .mrd-document-list__indent {
100
79
  flex: none;
101
80
  }
102
-
103
81
  .mrd-document-list__chev {
104
82
  width: 0.875rem;
105
83
  height: 1rem;
@@ -109,45 +87,36 @@
109
87
  color: var(--mrd-color-neutral-400);
110
88
  transition: transform var(--mrd-transition-fast);
111
89
  }
112
-
113
90
  .mrd-document-list__chev svg {
114
91
  width: 0.6875rem;
115
92
  height: 0.6875rem;
116
93
  }
117
-
118
94
  .mrd-document-list__chev--open {
119
95
  transform: rotate(90deg);
120
96
  }
121
-
122
97
  .mrd-document-list__chev--leaf {
123
98
  visibility: hidden;
124
99
  }
125
-
126
100
  .mrd-document-list__icon {
127
101
  width: 1.0625rem;
128
102
  height: 1.0625rem;
129
103
  flex: none;
130
104
  }
131
-
132
105
  .mrd-document-list__icon--dossier {
133
106
  color: var(--mrd-color-primary);
134
107
  }
135
-
136
108
  .mrd-document-list__icon--folder {
137
109
  color: var(--mrd-color-folder);
138
110
  }
139
-
140
111
  .mrd-document-list__icon--doc {
141
112
  color: var(--mrd-color-neutral-400);
142
113
  }
143
-
144
114
  .mrd-document-list__label {
145
115
  flex: 1;
146
116
  white-space: nowrap;
147
117
  overflow: hidden;
148
118
  text-overflow: ellipsis;
149
119
  }
150
-
151
120
  .mrd-document-list__count {
152
121
  flex: none;
153
122
  font-family: var(--mrd-font-family-mono);
@@ -157,14 +126,12 @@
157
126
  border-radius: var(--mrd-border-radius-full);
158
127
  padding: 0.0625rem 0.5rem;
159
128
  }
160
-
161
129
  .mrd-document-list__date {
162
130
  flex: none;
163
131
  font-size: var(--mrd-font-size-xs);
164
132
  color: var(--mrd-color-neutral-400);
165
133
  font-variant-numeric: tabular-nums;
166
134
  }
167
-
168
135
  .mrd-document-list__loading {
169
136
  display: flex;
170
137
  align-items: center;
@@ -174,7 +141,6 @@
174
141
  font-size: var(--mrd-font-size-xs);
175
142
  color: var(--mrd-color-neutral-400);
176
143
  }
177
-
178
144
  .mrd-document-list__spinner {
179
145
  width: 0.75rem;
180
146
  height: 0.75rem;
@@ -183,15 +149,15 @@
183
149
  border-radius: 50%;
184
150
  animation: mrd-document-list-spin 0.7s linear infinite;
185
151
  }
186
-
187
- @keyframes mrd-document-list-spin {
188
- to {
189
- transform: rotate(360deg);
190
- }
191
- }
192
152
  .mrd-document-list__empty {
193
153
  padding: var(--mrd-space-8) var(--mrd-space-4);
194
154
  text-align: center;
195
155
  color: var(--mrd-color-neutral-400);
196
156
  font-size: var(--mrd-font-size-sm);
157
+ }
158
+
159
+ @keyframes mrd-document-list-spin {
160
+ to {
161
+ transform: rotate(360deg);
162
+ }
197
163
  }
@@ -2,6 +2,7 @@ import { Host, h } from "@stencil/core";
2
2
  import { ClientLayoutItemType } from "../../../types/client-layout";
3
3
  import { t } from "../../../utils/i18n";
4
4
  import { applyViewFilters, buildListPath } from "../../../utils/query-params";
5
+ import { attachmentsFromRecord } from "../../../utils/document-attachments";
5
6
  import { makeContainerNode, makeFolderNode, computeTotals, segmentsOf, folderStringOf, stripExtension, applyFolderDistinct, applyDocMove, } from "./folder-tree";
6
7
  import { renderLoadingRow, renderNodeChildren, renderContainerNode } from "./tree-view";
7
8
  /**
@@ -320,18 +321,24 @@ export class MrdDocumentList {
320
321
  qs: p.toString(),
321
322
  });
322
323
  }
323
- emitDocuments(container, node) {
324
+ /** Filter qs scoping a folder's documents: view-level filters + container/folder match.
325
+ * Shared by emitDocuments() (the fetch) and openDoc() (prev/next list context), so both
326
+ * always agree on exactly what query a document belongs to. */
327
+ buildDocQs(container, node) {
324
328
  var _a, _b;
325
329
  const p = this.baseParams();
326
330
  p.set(this.containerField + '_href', (_a = container.href) !== null && _a !== void 0 ? _a : '');
327
331
  p.set(this.folderField, (_b = node.fullPath) !== null && _b !== void 0 ? _b : '');
332
+ return p.toString();
333
+ }
334
+ emitDocuments(container, node) {
328
335
  node.loading = true;
329
336
  this.mrdLoadPage.emit({
330
337
  nodeId: node.id,
331
338
  page: 0,
332
339
  sort: '',
333
340
  path: this.buildDataPath(),
334
- qs: p.toString(),
341
+ qs: this.buildDocQs(container, node),
335
342
  });
336
343
  }
337
344
  // ── Public injection API ─────────────────────────────────────────────────
@@ -600,11 +607,16 @@ export class MrdDocumentList {
600
607
  container.totalCount = Math.max(0, container.totalCount + delta);
601
608
  }
602
609
  }
603
- openDoc(doc) {
610
+ openDoc(doc, node, container) {
604
611
  var _a, _b, _c, _d;
605
612
  const href = (_b = (_a = doc === null || doc === void 0 ? void 0 : doc._links) === null || _a === void 0 ? void 0 : _a.self) === null || _b === void 0 ? void 0 : _b.href;
606
613
  const label = (_d = (_c = doc === null || doc === void 0 ? void 0 : doc[this.titleField]) !== null && _c !== void 0 ? _c : doc === null || doc === void 0 ? void 0 : doc.name) !== null && _d !== void 0 ? _d : '';
607
- this.mrdNavigate.emit({ href, label });
614
+ const index = node.docs.indexOf(doc);
615
+ const listContext = index >= 0
616
+ ? { index, sort: '', path: this.buildDataPath(), qs: this.buildDocQs(container, node) }
617
+ : undefined;
618
+ const attachments = attachmentsFromRecord(this.archetype, doc);
619
+ this.mrdNavigate.emit({ href, label, listContext, attachments });
608
620
  }
609
621
  // ── Render ───────────────────────────────────────────────────────────────
610
622
  treeCtx() {
@@ -618,7 +630,7 @@ export class MrdDocumentList {
618
630
  on: {
619
631
  toggleContainer: node => this.toggleContainer(node),
620
632
  toggleFolder: (container, node) => this.toggleFolder(container, node),
621
- openDoc: doc => this.openDoc(doc),
633
+ openDoc: (doc, node, container) => this.openDoc(doc, node, container),
622
634
  docDragStart: this.onDocDragStart,
623
635
  docDragEnd: this.onDocDragEnd,
624
636
  nodeDragOver: this.onNodeDragOver,
@@ -638,7 +650,7 @@ export class MrdDocumentList {
638
650
  body = renderLoadingRow(ctx, 0);
639
651
  }
640
652
  else if (this.containers.length === 0) {
641
- body = h("div", { key: 'ce40dab51ab61447838e5059159ae4778209a6f3', class: "mrd-document-list__empty" }, t('no_results', this.locale));
653
+ body = h("div", { key: '308725d741deb384082bd514edd34593f7d662a2', class: "mrd-document-list__empty" }, t('no_results', this.locale));
642
654
  }
643
655
  else if (this.singleContainer) {
644
656
  // Dossier context: render the single container's folder tree at the root.
@@ -656,7 +668,7 @@ export class MrdDocumentList {
656
668
  else {
657
669
  body = this.containers.map(c => renderContainerNode(ctx, c, 0));
658
670
  }
659
- return (h(Host, { key: '9e1f7805ae18bce506c530a481db902900ad95f3' }, h("div", { key: 'a51334634e94310a71650ad49f17f0a20e2aed4d', class: 'mrd-document-list' + (this.rootDropActive ? ' mrd-document-list--drop-active' : ''), onDragOver: this.onRootDragOver, onDragLeave: this.onRootDragLeave, onDrop: this.onRootDrop }, body)));
671
+ return (h(Host, { key: '9d5fde912999b57a0f0b737980d59e94f385f11d' }, h("div", { key: '17191411c2e626995f08b66bad755342fe3b13ae', class: 'mrd-document-list' + (this.rootDropActive ? ' mrd-document-list--drop-active' : ''), onDragOver: this.onRootDragOver, onDragLeave: this.onRootDragLeave, onDrop: this.onRootDrop }, body)));
660
672
  }
661
673
  static get is() { return "mrd-document-list"; }
662
674
  static get encapsulation() { return "scoped"; }
@@ -833,12 +845,25 @@ export class MrdDocumentList {
833
845
  "composed": true,
834
846
  "docs": {
835
847
  "tags": [],
836
- "text": "A document row was clicked. Host routes to the document object page."
848
+ "text": "A document row was clicked. Host routes to the document object page. `listContext` can\nbe used to re-fetch this exact record (or its neighbours) via `{path}?{qs}&page={index}&size=1`.\n`attachments` is a prefetch of the clicked row's own file slot (derived from `archetype`)\nso the host can render a preview immediately, without waiting for the navigated-to\npage's own mrdAttachments \u2014 see TASK-0169 / FINDING-0111."
837
849
  },
838
850
  "complexType": {
839
- "original": "{ href?: string; label: string }",
840
- "resolved": "{ href?: string | undefined; label: string; }",
841
- "references": {}
851
+ "original": "{ href?: string; label: string; listContext?: ListNavigationContext; attachments?: DocumentAttachment[] }",
852
+ "resolved": "{ href?: string | undefined; label: string; listContext?: ListNavigationContext | undefined; attachments?: DocumentAttachment[] | undefined; }",
853
+ "references": {
854
+ "ListNavigationContext": {
855
+ "location": "import",
856
+ "path": "../../../utils/query-params",
857
+ "id": "src/utils/query-params.ts::ListNavigationContext",
858
+ "referenceLocation": "ListNavigationContext"
859
+ },
860
+ "DocumentAttachment": {
861
+ "location": "import",
862
+ "path": "../../../types/client-layout",
863
+ "id": "src/types/client-layout.ts::DocumentAttachment",
864
+ "referenceLocation": "DocumentAttachment"
865
+ }
866
+ }
842
867
  }
843
868
  }, {
844
869
  "method": "mrdCanCreate",
@@ -39,7 +39,7 @@ function renderDocRow(ctx, doc, node, container, depth) {
39
39
  const label = (_b = (_a = doc === null || doc === void 0 ? void 0 : doc[ctx.titleField]) !== null && _a !== void 0 ? _a : doc === null || doc === void 0 ? void 0 : doc.name) !== null && _b !== void 0 ? _b : '';
40
40
  const dateRaw = ctx.dateField ? doc === null || doc === void 0 ? void 0 : doc[ctx.dateField] : undefined;
41
41
  const date = dateRaw ? formatDate(dateRaw, ctx.locale) : '';
42
- return (h("div", { class: "mrd-document-list__row mrd-document-list__row--doc", key: (_e = (_d = (_c = doc === null || doc === void 0 ? void 0 : doc._links) === null || _c === void 0 ? void 0 : _c.self) === null || _d === void 0 ? void 0 : _d.href) !== null && _e !== void 0 ? _e : label, draggable: true, onClick: () => ctx.on.openDoc(doc), onDragStart: (e) => ctx.on.docDragStart(e, doc, node), onDragEnd: ctx.on.docDragEnd, onDragOver: (e) => ctx.on.nodeDragOver(e, node), onDragLeave: () => ctx.on.nodeDragLeave(node), onDrop: (e) => ctx.on.nodeDrop(e, node, container) }, indent(depth), chevron(false, true), docIcon(), h("span", { class: "mrd-document-list__label" }, label), date && h("span", { class: "mrd-document-list__date" }, date)));
42
+ return (h("div", { class: "mrd-document-list__row mrd-document-list__row--doc", key: (_e = (_d = (_c = doc === null || doc === void 0 ? void 0 : doc._links) === null || _c === void 0 ? void 0 : _c.self) === null || _d === void 0 ? void 0 : _d.href) !== null && _e !== void 0 ? _e : label, draggable: true, onClick: () => ctx.on.openDoc(doc, node, container), onDragStart: (e) => ctx.on.docDragStart(e, doc, node), onDragEnd: ctx.on.docDragEnd, onDragOver: (e) => ctx.on.nodeDragOver(e, node), onDragLeave: () => ctx.on.nodeDragLeave(node), onDrop: (e) => ctx.on.nodeDrop(e, node, container) }, indent(depth), chevron(false, true), docIcon(), h("span", { class: "mrd-document-list__label" }, label), date && h("span", { class: "mrd-document-list__date" }, date)));
43
43
  }
44
44
  function renderFolderEditRow(ctx, node, depth) {
45
45
  return (h("div", { class: "mrd-document-list__node", key: node.id }, h("div", { class: "mrd-document-list__row mrd-document-list__row--edit" }, indent(depth), chevron(false, true), folderIcon(), h("input", { class: "mrd-document-list__name-input", type: "text", placeholder: t('folder_name_placeholder', ctx.locale), ref: el => ctx.on.setPendingInputEl(el), onInput: ctx.on.pendingInput, onKeyDown: ctx.on.pendingKeyDown, onBlur: () => ctx.on.cancelFolder() })), node.error && (h("div", { class: "mrd-document-list__error", style: { paddingLeft: `${labelOffset(depth)}px` } }, node.error))));
@@ -1,28 +1,15 @@
1
1
  :host {
2
2
  display: block;
3
- container-type: inline-size;
4
- container-name: mrd-document-view;
5
3
  }
6
4
 
7
5
  .mrd-document-view {
8
- max-width: 1200px;
6
+ max-width: 640px;
9
7
  }
10
-
11
8
  .mrd-document-view__body {
12
- display: grid;
13
- grid-template-columns: 1fr;
9
+ display: flex;
10
+ flex-direction: column;
14
11
  gap: var(--mrd-space-6);
15
12
  }
16
-
17
- @container mrd-document-view (min-width: 640px) {
18
- .mrd-document-view__body {
19
- grid-template-columns: minmax(220px, 320px) 1fr !important;
20
- align-items: stretch !important;
21
- }
22
- .mrd-document-view__crumb {
23
- margin-bottom: var(--mrd-space-2) !important;
24
- }
25
- }
26
13
  .mrd-document-view__crumb {
27
14
  display: inline-flex;
28
15
  align-items: center;
@@ -37,17 +24,14 @@
37
24
  color: var(--mrd-color-primary-dark);
38
25
  cursor: pointer;
39
26
  }
40
-
41
27
  .mrd-document-view__crumb:hover {
42
28
  border-color: var(--mrd-color-primary);
43
29
  }
44
-
45
30
  .mrd-document-view__crumb-icon {
46
31
  width: 0.875rem;
47
32
  height: 0.875rem;
48
33
  flex-shrink: 0;
49
34
  }
50
-
51
35
  .mrd-document-view__title {
52
36
  font-size: var(--mrd-font-size-2xl);
53
37
  font-weight: var(--mrd-font-weight-bold);
@@ -55,21 +39,18 @@
55
39
  letter-spacing: -0.02em;
56
40
  margin: 0 0 var(--mrd-space-1) 0;
57
41
  }
58
-
59
42
  .mrd-document-view__date {
60
43
  font-size: var(--mrd-font-size-sm);
61
44
  color: var(--mrd-color-neutral-400);
62
45
  font-variant-numeric: tabular-nums;
63
46
  margin: 0 0 var(--mrd-space-6) 0;
64
47
  }
65
-
66
48
  .mrd-document-view__file-meta {
67
49
  display: flex;
68
50
  align-items: center;
69
51
  gap: var(--mrd-space-4);
70
52
  margin-bottom: var(--mrd-space-2);
71
53
  }
72
-
73
54
  .mrd-document-view__file-name {
74
55
  flex: 1;
75
56
  min-width: 0;
@@ -78,25 +59,6 @@
78
59
  color: var(--mrd-color-neutral-800);
79
60
  word-break: break-word;
80
61
  }
81
-
82
- .mrd-document-view__preview {
83
- width: 100%;
84
- overflow: hidden;
85
- border: 1px solid var(--mrd-border-color);
86
- border-radius: var(--mrd-border-radius-md);
87
- background: var(--mrd-color-neutral-50);
88
- }
89
-
90
- .mrd-document-view__preview-loading {
91
- display: flex;
92
- align-items: center;
93
- justify-content: center;
94
- width: 100%;
95
- height: 100%;
96
- color: var(--mrd-color-neutral-500);
97
- font-size: var(--mrd-font-size-sm);
98
- }
99
-
100
62
  .mrd-document-view__download {
101
63
  display: inline-flex;
102
64
  align-items: center;
@@ -113,17 +75,14 @@
113
75
  color: var(--mrd-color-neutral-700);
114
76
  cursor: pointer;
115
77
  }
116
-
117
78
  .mrd-document-view__download:hover {
118
79
  background: var(--mrd-color-neutral-100);
119
80
  color: var(--mrd-color-neutral-900);
120
81
  }
121
-
122
82
  .mrd-document-view__download svg {
123
83
  width: 0.9375rem;
124
84
  height: 0.9375rem;
125
85
  }
126
-
127
86
  .mrd-document-view__summary-body {
128
87
  font-size: var(--mrd-font-size-base);
129
88
  color: var(--mrd-color-neutral-700);