@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.
- package/dist/cjs/client-layout-RZ3Ix-4a.js +87 -0
- package/dist/cjs/{index-CAzwGt9u.js → index-DzRfoAPz.js} +36 -9
- package/dist/cjs/index.cjs.js +56 -81
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/mosterdcomponents.cjs.js +3 -3
- package/dist/cjs/{mrd-boolean-field_24.cjs.entry.js → mrd-boolean-field_23.cjs.entry.js} +175 -287
- package/dist/collection/collection-manifest.json +1 -2
- package/dist/collection/components/documents/mrd-document-container/mrd-document-container.css +0 -17
- package/dist/collection/components/documents/mrd-document-container/mrd-document-container.js +20 -5
- package/dist/collection/components/documents/mrd-document-list/mrd-document-list.css +9 -43
- package/dist/collection/components/documents/mrd-document-list/mrd-document-list.js +36 -11
- package/dist/collection/components/documents/mrd-document-list/tree-view.js +1 -1
- package/dist/collection/components/documents/mrd-document-view/mrd-document-view.css +3 -44
- package/dist/collection/components/documents/mrd-document-view/mrd-document-view.js +37 -85
- package/dist/collection/components/fields/mrd-boolean-field/mrd-boolean-field.css +0 -10
- package/dist/collection/components/fields/mrd-currency-field/mrd-currency-field.css +0 -7
- package/dist/collection/components/fields/mrd-file-field/mrd-file-field.css +0 -11
- package/dist/collection/components/fields/mrd-hyperlink-field/mrd-hyperlink-field.css +0 -3
- package/dist/collection/components/fields/mrd-image-field/mrd-image-field.css +6 -20
- package/dist/collection/components/fields/mrd-list-field/mrd-list-field.css +0 -4
- package/dist/collection/components/fields/mrd-longtext-field/mrd-longtext-field.css +0 -1
- package/dist/collection/components/fields/mrd-relation-field/mrd-relation-field.css +9 -35
- package/dist/collection/components/fields/mrd-textarea-field/mrd-textarea-field.css +0 -9
- package/dist/collection/components/form/mrd-field/mrd-field.css +0 -13
- package/dist/collection/components/form/mrd-form/mrd-form.css +0 -19
- package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.css +3 -58
- package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.js +33 -67
- package/dist/collection/components/table/mrd-table/mrd-table.css +38 -185
- package/dist/collection/components/table/mrd-table/mrd-table.js +20 -6
- package/dist/collection/dev/app.js +80 -43
- package/dist/collection/index.js +1 -0
- package/dist/collection/utils/document-attachments.js +20 -0
- package/dist/collection/{components/documents/mrd-file-preview → utils}/file-preview-kind.js +4 -4
- package/dist/collection/utils/i18n.js +0 -32
- package/dist/collection/utils/query-params.js +0 -4
- package/dist/components/document-attachments.js +1 -0
- package/dist/components/field-helpers.js +1 -1
- package/dist/components/i18n.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/mrd-document-container2.js +1 -1
- package/dist/components/mrd-document-list2.js +1 -1
- package/dist/components/mrd-document-view2.js +1 -1
- package/dist/components/mrd-email-field2.js +1 -1
- package/dist/components/mrd-form.js +1 -1
- package/dist/components/mrd-hyperlink-field2.js +1 -1
- package/dist/components/mrd-image-field2.js +1 -1
- package/dist/components/mrd-layout-section.js +1 -1
- package/dist/components/mrd-number-field2.js +1 -1
- package/dist/components/mrd-relation-field2.js +1 -1
- package/dist/components/mrd-table2.js +1 -1
- package/dist/esm/client-layout-DCOAAH92.js +84 -0
- package/dist/esm/{index-DiSEJMA8.js → index-DiSe6vjv.js} +36 -9
- package/dist/esm/index.js +30 -80
- package/dist/esm/loader.js +3 -3
- package/dist/esm/mosterdcomponents.js +4 -4
- package/dist/esm/{mrd-boolean-field_24.entry.js → mrd-boolean-field_23.entry.js} +85 -196
- package/dist/mosterdcomponents/index.esm.js +1 -1
- package/dist/mosterdcomponents/mosterdcomponents.css +7 -1
- package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
- package/dist/mosterdcomponents/p-DCOAAH92.js +1 -0
- package/dist/mosterdcomponents/p-DiSe6vjv.js +2 -0
- package/dist/mosterdcomponents/p-b56f9802.entry.js +1 -0
- package/dist/types/components/documents/mrd-document-container/mrd-document-container.d.ts +6 -2
- package/dist/types/components/documents/mrd-document-list/mrd-document-list.d.ts +13 -2
- package/dist/types/components/documents/mrd-document-list/tree-view.d.ts +1 -1
- package/dist/types/components/documents/mrd-document-view/mrd-document-view.d.ts +21 -27
- package/dist/types/components/layout/mrd-layout-section/mrd-layout-section.d.ts +14 -15
- package/dist/types/components/table/mrd-table/mrd-table.d.ts +8 -2
- package/dist/types/components.d.ts +54 -190
- package/dist/types/index.d.ts +3 -0
- package/dist/types/stencil-public-runtime.d.ts +1 -0
- package/dist/types/types/client-layout.d.ts +8 -0
- package/dist/types/utils/document-attachments.d.ts +8 -0
- package/dist/types/utils/file-preview-kind.d.ts +9 -0
- package/dist/types/utils/query-params.d.ts +14 -0
- package/package.json +10 -12
- package/dist/collection/components/documents/mrd-file-preview/mrd-file-preview.css +0 -59
- package/dist/collection/components/documents/mrd-file-preview/mrd-file-preview.js +0 -212
- package/dist/components/mrd-file-preview.d.ts +0 -11
- package/dist/components/mrd-file-preview.js +0 -1
- package/dist/components/mrd-file-preview2.js +0 -1
- package/dist/mosterdcomponents/cell-renderer-PbcEU4ph.js.map +0 -1
- package/dist/mosterdcomponents/client-layout-DCOAAH92.js.map +0 -1
- package/dist/mosterdcomponents/field-helpers-CASS3akr.js.map +0 -1
- package/dist/mosterdcomponents/file-upload-common-D1ndi6cN.js.map +0 -1
- package/dist/mosterdcomponents/format-BAfsQfy1.js.map +0 -1
- package/dist/mosterdcomponents/i18n-B1IIkRF9.js.map +0 -1
- package/dist/mosterdcomponents/index-AokUFVX0.js.map +0 -1
- package/dist/mosterdcomponents/index-CprJSlzK.js.map +0 -1
- package/dist/mosterdcomponents/index.esm.js.map +0 -1
- package/dist/mosterdcomponents/mosterdcomponents.esm.js.map +0 -1
- package/dist/mosterdcomponents/p-DiSEJMA8.js +0 -2
- package/dist/mosterdcomponents/p-aae8a9dc.entry.js +0 -1
- package/dist/mosterdcomponents/query-params-B1HfnMOl.js.map +0 -1
- package/dist/mosterdcomponents/quill-C9pgw_k-.js.map +0 -1
- package/dist/mosterdcomponents/validation-DbEViuiw.js.map +0 -1
- package/dist/types/components/documents/mrd-file-preview/file-preview-kind.d.ts +0 -9
- 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.
|
|
30
|
+
"version": "4.43.5",
|
|
32
31
|
"typescriptVersion": "5.8.3"
|
|
33
32
|
},
|
|
34
33
|
"collections": [],
|
package/dist/collection/components/documents/mrd-document-container/mrd-document-container.css
CHANGED
|
@@ -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;
|
package/dist/collection/components/documents/mrd-document-container/mrd-document-container.js
CHANGED
|
@@ -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: '
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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: '
|
|
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: '
|
|
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:
|
|
6
|
+
max-width: 640px;
|
|
9
7
|
}
|
|
10
|
-
|
|
11
8
|
.mrd-document-view__body {
|
|
12
|
-
display:
|
|
13
|
-
|
|
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);
|