@mmlogic/components 0.3.10 → 0.4.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 (149) hide show
  1. package/dist/cjs/{index-BPj2cBXs.js → index-CAzwGt9u.js} +38 -0
  2. package/dist/cjs/loader.cjs.js +2 -2
  3. package/dist/cjs/mosterdcomponents.cjs.js +2 -2
  4. package/dist/cjs/mrd-boolean-field_23.cjs.entry.js +1280 -1073
  5. package/dist/collection/collection-manifest.json +23 -23
  6. package/dist/collection/components/{mrd-document-container/mrd-document-container.scss → documents/mrd-document-container/mrd-document-container.css} +3 -3
  7. package/dist/collection/components/{mrd-document-container → documents/mrd-document-container}/mrd-document-container.js +54 -8
  8. package/dist/collection/components/documents/mrd-document-list/folder-tree.js +109 -0
  9. package/dist/collection/components/{mrd-document-list/mrd-document-list.scss → documents/mrd-document-list/mrd-document-list.css} +17 -4
  10. package/dist/collection/components/{mrd-document-list → documents/mrd-document-list}/mrd-document-list.js +166 -237
  11. package/dist/collection/components/documents/mrd-document-list/tree-view.js +75 -0
  12. package/dist/collection/components/{mrd-document-view/mrd-document-view.scss → documents/mrd-document-view/mrd-document-view.css} +1 -1
  13. package/dist/collection/components/{mrd-document-view → documents/mrd-document-view}/mrd-document-view.js +4 -4
  14. package/dist/collection/components/fields/field-helpers.js +17 -0
  15. package/dist/collection/components/fields/file-upload-common.js +38 -0
  16. package/dist/collection/components/{mrd-boolean-field/mrd-boolean-field.scss → fields/mrd-boolean-field/mrd-boolean-field.css} +3 -3
  17. package/dist/collection/components/{mrd-boolean-field → fields/mrd-boolean-field}/mrd-boolean-field.js +1 -1
  18. package/dist/collection/components/{mrd-currency-field/mrd-currency-field.scss → fields/mrd-currency-field/mrd-currency-field.css} +11 -9
  19. package/dist/collection/components/{mrd-currency-field → fields/mrd-currency-field}/mrd-currency-field.js +7 -13
  20. package/dist/collection/components/{mrd-date-field/mrd-date-field.scss → fields/mrd-date-field/mrd-date-field.css} +8 -10
  21. package/dist/collection/components/{mrd-date-field → fields/mrd-date-field}/mrd-date-field.js +3 -10
  22. package/dist/collection/components/{mrd-datetime-field/mrd-datetime-field.scss → fields/mrd-datetime-field/mrd-datetime-field.css} +8 -10
  23. package/dist/collection/components/{mrd-datetime-field → fields/mrd-datetime-field}/mrd-datetime-field.js +3 -10
  24. package/dist/collection/components/{mrd-email-field/mrd-email-field.scss → fields/mrd-email-field/mrd-email-field.css} +2 -11
  25. package/dist/collection/components/{mrd-email-field → fields/mrd-email-field}/mrd-email-field.js +6 -13
  26. package/dist/collection/components/{mrd-file-field/mrd-file-field.scss → fields/mrd-file-field/mrd-file-field.css} +19 -24
  27. package/dist/collection/components/{mrd-file-field → fields/mrd-file-field}/mrd-file-field.js +13 -24
  28. package/dist/collection/components/{mrd-hyperlink-field/mrd-hyperlink-field.scss → fields/mrd-hyperlink-field/mrd-hyperlink-field.css} +7 -16
  29. package/dist/collection/components/{mrd-hyperlink-field → fields/mrd-hyperlink-field}/mrd-hyperlink-field.js +9 -15
  30. package/dist/collection/components/{mrd-image-field/mrd-image-field.scss → fields/mrd-image-field/mrd-image-field.css} +15 -24
  31. package/dist/collection/components/{mrd-image-field → fields/mrd-image-field}/mrd-image-field.js +13 -28
  32. package/dist/collection/components/{mrd-list-field/mrd-list-field.scss → fields/mrd-list-field/mrd-list-field.css} +18 -21
  33. package/dist/collection/components/{mrd-list-field → fields/mrd-list-field}/mrd-list-field.js +10 -25
  34. package/dist/collection/components/{mrd-longtext-field/mrd-longtext-field.scss → fields/mrd-longtext-field/mrd-longtext-field.css} +21 -18
  35. package/dist/collection/components/{mrd-longtext-field → fields/mrd-longtext-field}/mrd-longtext-field.js +3 -10
  36. package/dist/collection/components/{mrd-number-field/mrd-number-field.scss → fields/mrd-number-field/mrd-number-field.css} +9 -10
  37. package/dist/collection/components/{mrd-number-field → fields/mrd-number-field}/mrd-number-field.js +7 -6
  38. package/dist/collection/components/{mrd-relation-field/mrd-relation-field.scss → fields/mrd-relation-field/mrd-relation-field.css} +61 -59
  39. package/dist/collection/components/{mrd-relation-field → fields/mrd-relation-field}/mrd-relation-field.js +16 -26
  40. package/dist/collection/components/{mrd-secret-field/mrd-secret-field.scss → fields/mrd-secret-field/mrd-secret-field.css} +7 -10
  41. package/dist/collection/components/{mrd-secret-field → fields/mrd-secret-field}/mrd-secret-field.js +4 -11
  42. package/dist/collection/components/{mrd-text-field/mrd-text-field.scss → fields/mrd-text-field/mrd-text-field.css} +2 -11
  43. package/dist/collection/components/{mrd-text-field → fields/mrd-text-field}/mrd-text-field.js +3 -10
  44. package/dist/collection/components/{mrd-textarea-field/mrd-textarea-field.scss → fields/mrd-textarea-field/mrd-textarea-field.css} +7 -10
  45. package/dist/collection/components/{mrd-textarea-field → fields/mrd-textarea-field}/mrd-textarea-field.js +3 -9
  46. package/dist/collection/components/{mrd-time-field/mrd-time-field.scss → fields/mrd-time-field/mrd-time-field.css} +8 -10
  47. package/dist/collection/components/{mrd-time-field → fields/mrd-time-field}/mrd-time-field.js +3 -10
  48. package/dist/collection/components/{mrd-field/mrd-field.scss → form/mrd-field/mrd-field.css} +1 -1
  49. package/dist/collection/components/{mrd-field → form/mrd-field}/mrd-field.js +3 -3
  50. package/dist/collection/components/{mrd-form/mrd-form.scss → form/mrd-form/mrd-form.css} +1 -1
  51. package/dist/collection/components/{mrd-form → form/mrd-form}/mrd-form.js +5 -5
  52. package/dist/collection/components/layout/mrd-layout-section/field-value.js +111 -0
  53. package/dist/collection/components/layout/mrd-layout-section/layout-helpers.js +29 -0
  54. package/dist/collection/components/{mrd-layout-section/mrd-layout-section.scss → layout/mrd-layout-section/mrd-layout-section.css} +4 -4
  55. package/dist/collection/components/{mrd-layout-section → layout/mrd-layout-section}/mrd-layout-section.js +58 -133
  56. package/dist/collection/components/{mrd-table/mrd-table.scss → table/mrd-table/mrd-table.css} +11 -13
  57. package/dist/collection/components/{mrd-table → table/mrd-table}/mrd-table.js +111 -439
  58. package/dist/collection/components/table/mrd-table/table-filter-popup.js +85 -0
  59. package/dist/collection/components/table/mrd-table/table-parts.js +110 -0
  60. package/dist/collection/components/table/mrd-table/table-query.js +178 -0
  61. package/dist/collection/components/table/mrd-table/virtual-scroll.js +49 -0
  62. package/dist/collection/dev/app.js +19 -18
  63. package/dist/collection/dev/example-data.js +58 -43
  64. package/dist/collection/utils/i18n.js +10 -0
  65. package/dist/collection/utils/query-params.js +43 -0
  66. package/dist/components/field-helpers.js +1 -0
  67. package/dist/components/file-upload-common.js +1 -0
  68. package/dist/components/i18n.js +1 -1
  69. package/dist/components/mrd-boolean-field2.js +1 -1
  70. package/dist/components/mrd-currency-field2.js +1 -1
  71. package/dist/components/mrd-date-field2.js +1 -1
  72. package/dist/components/mrd-datetime-field2.js +1 -1
  73. package/dist/components/mrd-document-container2.js +1 -1
  74. package/dist/components/mrd-document-list2.js +1 -1
  75. package/dist/components/mrd-document-view2.js +1 -1
  76. package/dist/components/mrd-email-field2.js +1 -1
  77. package/dist/components/mrd-file-field2.js +1 -1
  78. package/dist/components/mrd-form.js +1 -1
  79. package/dist/components/mrd-hyperlink-field2.js +1 -1
  80. package/dist/components/mrd-image-field2.js +1 -1
  81. package/dist/components/mrd-layout-section.js +1 -1
  82. package/dist/components/mrd-list-field2.js +1 -1
  83. package/dist/components/mrd-longtext-field2.js +1 -1
  84. package/dist/components/mrd-number-field2.js +1 -1
  85. package/dist/components/mrd-relation-field2.js +1 -1
  86. package/dist/components/mrd-secret-field2.js +1 -1
  87. package/dist/components/mrd-table2.js +1 -1
  88. package/dist/components/mrd-text-field2.js +1 -1
  89. package/dist/components/mrd-textarea-field2.js +1 -1
  90. package/dist/components/mrd-time-field2.js +1 -1
  91. package/dist/components/query-params.js +1 -0
  92. package/dist/esm/{index-_tsCCkAi.js → index-DiSEJMA8.js} +38 -1
  93. package/dist/esm/loader.js +3 -3
  94. package/dist/esm/mosterdcomponents.js +3 -3
  95. package/dist/esm/mrd-boolean-field_23.entry.js +1280 -1073
  96. package/dist/mosterdcomponents/mosterdcomponents.css +1 -1
  97. package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
  98. package/dist/mosterdcomponents/p-9b3c0917.entry.js +1 -0
  99. package/dist/mosterdcomponents/p-DiSEJMA8.js +2 -0
  100. package/dist/types/components/{mrd-document-container → documents/mrd-document-container}/mrd-document-container.d.ts +7 -2
  101. package/dist/types/components/documents/mrd-document-list/folder-tree.d.ts +66 -0
  102. package/dist/types/components/{mrd-document-list → documents/mrd-document-list}/mrd-document-list.d.ts +28 -38
  103. package/dist/types/components/documents/mrd-document-list/tree-view.d.ts +32 -0
  104. package/dist/types/components/{mrd-document-view → documents/mrd-document-view}/mrd-document-view.d.ts +2 -2
  105. package/dist/types/components/fields/field-helpers.d.ts +18 -0
  106. package/dist/types/components/fields/file-upload-common.d.ts +18 -0
  107. package/dist/types/components/{mrd-boolean-field → fields/mrd-boolean-field}/mrd-boolean-field.d.ts +1 -1
  108. package/dist/types/components/{mrd-currency-field → fields/mrd-currency-field}/mrd-currency-field.d.ts +2 -2
  109. package/dist/types/components/{mrd-date-field → fields/mrd-date-field}/mrd-date-field.d.ts +1 -1
  110. package/dist/types/components/{mrd-datetime-field → fields/mrd-datetime-field}/mrd-datetime-field.d.ts +1 -1
  111. package/dist/types/components/{mrd-email-field → fields/mrd-email-field}/mrd-email-field.d.ts +1 -1
  112. package/dist/types/components/{mrd-file-field → fields/mrd-file-field}/mrd-file-field.d.ts +2 -4
  113. package/dist/types/components/{mrd-hyperlink-field → fields/mrd-hyperlink-field}/mrd-hyperlink-field.d.ts +2 -2
  114. package/dist/types/components/{mrd-image-field → fields/mrd-image-field}/mrd-image-field.d.ts +2 -4
  115. package/dist/types/components/{mrd-list-field → fields/mrd-list-field}/mrd-list-field.d.ts +2 -2
  116. package/dist/types/components/{mrd-longtext-field → fields/mrd-longtext-field}/mrd-longtext-field.d.ts +1 -1
  117. package/dist/types/components/{mrd-number-field → fields/mrd-number-field}/mrd-number-field.d.ts +2 -2
  118. package/dist/types/components/{mrd-relation-field → fields/mrd-relation-field}/mrd-relation-field.d.ts +2 -2
  119. package/dist/types/components/{mrd-secret-field → fields/mrd-secret-field}/mrd-secret-field.d.ts +1 -1
  120. package/dist/types/components/{mrd-text-field → fields/mrd-text-field}/mrd-text-field.d.ts +1 -1
  121. package/dist/types/components/{mrd-textarea-field → fields/mrd-textarea-field}/mrd-textarea-field.d.ts +1 -1
  122. package/dist/types/components/{mrd-time-field → fields/mrd-time-field}/mrd-time-field.d.ts +1 -1
  123. package/dist/types/components/{mrd-field → form/mrd-field}/mrd-field.d.ts +2 -2
  124. package/dist/types/components/{mrd-form → form/mrd-form}/mrd-form.d.ts +2 -2
  125. package/dist/types/components/layout/mrd-layout-section/field-value.d.ts +22 -0
  126. package/dist/types/components/layout/mrd-layout-section/layout-helpers.d.ts +8 -0
  127. package/dist/types/components/{mrd-layout-section → layout/mrd-layout-section}/mrd-layout-section.d.ts +4 -8
  128. package/dist/types/components/{mrd-table → table/mrd-table}/mrd-table.d.ts +6 -13
  129. package/dist/types/components/table/mrd-table/table-filter-popup.d.ts +35 -0
  130. package/dist/types/components/table/mrd-table/table-parts.d.ts +61 -0
  131. package/dist/types/components/table/mrd-table/table-query.d.ts +50 -0
  132. package/dist/types/components/table/mrd-table/virtual-scroll.d.ts +26 -0
  133. package/dist/types/components.d.ts +36 -5
  134. package/dist/types/types/client-layout.d.ts +5 -0
  135. package/dist/types/utils/query-params.d.ts +14 -0
  136. package/package.json +7 -2
  137. package/dist/components/validation.js +0 -1
  138. package/dist/mosterdcomponents/cell-renderer-B-AJDBcj.js.map +0 -1
  139. package/dist/mosterdcomponents/client-layout-ChqRA3AF.js.map +0 -1
  140. package/dist/mosterdcomponents/format-BAfsQfy1.js.map +0 -1
  141. package/dist/mosterdcomponents/i18n-s1XrKcD2.js.map +0 -1
  142. package/dist/mosterdcomponents/index-DkY-NQj0.js.map +0 -1
  143. package/dist/mosterdcomponents/index-DwF_Sp__.js.map +0 -1
  144. package/dist/mosterdcomponents/index.esm.js.map +0 -1
  145. package/dist/mosterdcomponents/mosterdcomponents.esm.js.map +0 -1
  146. package/dist/mosterdcomponents/p-69452249.entry.js +0 -1
  147. package/dist/mosterdcomponents/p-_tsCCkAi.js +0 -2
  148. package/dist/mosterdcomponents/quill-C9pgw_k-.js.map +0 -1
  149. package/dist/mosterdcomponents/validation-Br9k2Ztw.js.map +0 -1
@@ -1,28 +1,28 @@
1
1
  {
2
2
  "entries": [
3
- "components/mrd-document-list/mrd-document-list.js",
4
- "components/mrd-boolean-field/mrd-boolean-field.js",
5
- "components/mrd-currency-field/mrd-currency-field.js",
6
- "components/mrd-date-field/mrd-date-field.js",
7
- "components/mrd-datetime-field/mrd-datetime-field.js",
8
- "components/mrd-document-container/mrd-document-container.js",
9
- "components/mrd-document-view/mrd-document-view.js",
10
- "components/mrd-email-field/mrd-email-field.js",
11
- "components/mrd-field/mrd-field.js",
12
- "components/mrd-file-field/mrd-file-field.js",
13
- "components/mrd-form/mrd-form.js",
14
- "components/mrd-hyperlink-field/mrd-hyperlink-field.js",
15
- "components/mrd-image-field/mrd-image-field.js",
16
- "components/mrd-layout-section/mrd-layout-section.js",
17
- "components/mrd-list-field/mrd-list-field.js",
18
- "components/mrd-longtext-field/mrd-longtext-field.js",
19
- "components/mrd-number-field/mrd-number-field.js",
20
- "components/mrd-relation-field/mrd-relation-field.js",
21
- "components/mrd-secret-field/mrd-secret-field.js",
22
- "components/mrd-table/mrd-table.js",
23
- "components/mrd-text-field/mrd-text-field.js",
24
- "components/mrd-textarea-field/mrd-textarea-field.js",
25
- "components/mrd-time-field/mrd-time-field.js"
3
+ "components/documents/mrd-document-container/mrd-document-container.js",
4
+ "components/documents/mrd-document-list/mrd-document-list.js",
5
+ "components/documents/mrd-document-view/mrd-document-view.js",
6
+ "components/fields/mrd-boolean-field/mrd-boolean-field.js",
7
+ "components/fields/mrd-currency-field/mrd-currency-field.js",
8
+ "components/fields/mrd-date-field/mrd-date-field.js",
9
+ "components/fields/mrd-datetime-field/mrd-datetime-field.js",
10
+ "components/fields/mrd-email-field/mrd-email-field.js",
11
+ "components/fields/mrd-file-field/mrd-file-field.js",
12
+ "components/fields/mrd-hyperlink-field/mrd-hyperlink-field.js",
13
+ "components/fields/mrd-image-field/mrd-image-field.js",
14
+ "components/fields/mrd-list-field/mrd-list-field.js",
15
+ "components/fields/mrd-longtext-field/mrd-longtext-field.js",
16
+ "components/fields/mrd-number-field/mrd-number-field.js",
17
+ "components/fields/mrd-relation-field/mrd-relation-field.js",
18
+ "components/fields/mrd-secret-field/mrd-secret-field.js",
19
+ "components/fields/mrd-text-field/mrd-text-field.js",
20
+ "components/fields/mrd-textarea-field/mrd-textarea-field.js",
21
+ "components/fields/mrd-time-field/mrd-time-field.js",
22
+ "components/form/mrd-field/mrd-field.js",
23
+ "components/form/mrd-form/mrd-form.js",
24
+ "components/layout/mrd-layout-section/mrd-layout-section.js",
25
+ "components/table/mrd-table/mrd-table.js"
26
26
  ],
27
27
  "mixins": [],
28
28
  "compiler": {
@@ -29,7 +29,7 @@
29
29
  .mrd-document-container__action svg {
30
30
  width: 1rem;
31
31
  height: 1rem;
32
- color: #d9a441;
32
+ color: var(--mrd-color-folder);
33
33
  }
34
34
 
35
35
  .mrd-document-container__action:hover:not(:disabled) {
@@ -67,7 +67,7 @@
67
67
  color: var(--mrd-color-neutral-800);
68
68
  }
69
69
 
70
- .mrd-document-container__seg-btn[aria-pressed='true'] {
70
+ .mrd-document-container__seg-btn[aria-pressed=true] {
71
71
  background: var(--mrd-color-white);
72
72
  color: var(--mrd-color-primary-dark);
73
73
  box-shadow: var(--mrd-shadow-sm);
@@ -76,4 +76,4 @@
76
76
  .mrd-document-container__seg-btn svg {
77
77
  width: 1rem;
78
78
  height: 1rem;
79
- }
79
+ }
@@ -1,5 +1,5 @@
1
1
  import { Host, h } from "@stencil/core";
2
- import { t } from "../../utils/i18n";
2
+ import { t } from "../../../utils/i18n";
3
3
  /**
4
4
  * Owns a document collection view: a single toolbar (view switch + collection
5
5
  * actions like "New folder", and — later — upload / drag-drop) plus the two
@@ -18,8 +18,13 @@ export class MrdDocumentContainer {
18
18
  this.item = null;
19
19
  /** Parent record id — required for RELATED_VIEW path building. */
20
20
  this.parentId = '';
21
+ /** Canonical parent href, forwarded to the folder tree for single-container seeding. */
22
+ this.containerHref = '';
21
23
  /** Lookup key used for the embedded `data-doclist` / `data-view` attributes. */
22
24
  this.viewKey = '';
25
+ /** Fixed height (px) of the scrolling folder-tree body — the toolbar stays put
26
+ * on top, Finder-style. The table manages its own height. */
27
+ this.height = 460;
23
28
  this.locale = navigator.language;
24
29
  /** Active body: folder tree or flat table. */
25
30
  this.mode = 'tree';
@@ -28,8 +33,8 @@ export class MrdDocumentContainer {
28
33
  /** Whether the currently mounted table has been init()'d. Reset on every mode switch. */
29
34
  this.tableInited = false;
30
35
  this.createFolder = () => {
31
- var _a, _b;
32
- (_b = (_a = this.listEl) === null || _a === void 0 ? void 0 : _a.createFolder) === null || _b === void 0 ? void 0 : _b.call(_a);
36
+ var _a;
37
+ (_a = this.listEl) === null || _a === void 0 ? void 0 : _a.createFolder();
33
38
  };
34
39
  }
35
40
  /** The embedded table does not self-load: like every mrd-table it waits for the
@@ -41,7 +46,7 @@ export class MrdDocumentContainer {
41
46
  if (this.mode === 'list' && this.tableEl && !this.tableInited) {
42
47
  this.tableInited = true;
43
48
  const table = this.tableEl;
44
- Promise.resolve((_a = table.componentOnReady) === null || _a === void 0 ? void 0 : _a.call(table)).then(() => { var _a; return (_a = table.init) === null || _a === void 0 ? void 0 : _a.call(table); });
49
+ Promise.resolve((_a = table.componentOnReady) === null || _a === void 0 ? void 0 : _a.call(table)).then(() => table.init());
45
50
  }
46
51
  }
47
52
  setMode(mode) {
@@ -59,7 +64,7 @@ export class MrdDocumentContainer {
59
64
  }
60
65
  // ── Bodies ───────────────────────────────────────────────────────────────
61
66
  renderTree() {
62
- return (h("mrd-document-list", { "data-doclist": this.viewKey, ref: el => (this.listEl = el), item: this.item, archetype: this.archetype, parentId: this.parentId, locale: this.locale, onMrdLoadDistinct: (e) => {
67
+ return (h("mrd-document-list", { "data-doclist": this.viewKey, ref: el => (this.listEl = el), item: this.item, archetype: this.archetype, parentId: this.parentId, containerHref: this.containerHref, locale: this.locale, onMrdLoadDistinct: (e) => {
63
68
  e.stopPropagation();
64
69
  this.mrdLoadDistinct.emit(e.detail);
65
70
  }, onMrdLoadPage: (e) => {
@@ -100,7 +105,8 @@ export class MrdDocumentContainer {
100
105
  } }));
101
106
  }
102
107
  render() {
103
- return (h(Host, { key: 'a5393d484bdc202b57c6d32d9ce917e760aff95a' }, this.renderToolbar(), h("div", { key: '52f82de8f7734e13f34d323e3e831e6de5676f46', class: "mrd-document-container__body" }, this.mode === 'tree' ? this.renderTree() : this.renderList())));
108
+ const treeMode = this.mode === 'tree';
109
+ return (h(Host, { key: '018c9eacd169fdf7d352a51472651348af2b45df' }, this.renderToolbar(), h("div", { key: '5ff2ac77d4d12369905696ff075f99785dc1c809', class: "mrd-document-container__body", style: treeMode ? { height: `${this.height}px`, overflowY: 'auto' } : {} }, treeMode ? this.renderTree() : this.renderList())));
104
110
  }
105
111
  static get is() { return "mrd-document-container"; }
106
112
  static get encapsulation() { return "scoped"; }
@@ -125,7 +131,7 @@ export class MrdDocumentContainer {
125
131
  "references": {
126
132
  "ClientLayoutItem": {
127
133
  "location": "import",
128
- "path": "../../types/client-layout",
134
+ "path": "../../../types/client-layout",
129
135
  "id": "src/types/client-layout.ts::ClientLayoutItem",
130
136
  "referenceLocation": "ClientLayoutItem"
131
137
  }
@@ -150,7 +156,7 @@ export class MrdDocumentContainer {
150
156
  "references": {
151
157
  "ClientArchetype": {
152
158
  "location": "import",
153
- "path": "../../types/client-layout",
159
+ "path": "../../../types/client-layout",
154
160
  "id": "src/types/client-layout.ts::ClientArchetype",
155
161
  "referenceLocation": "ClientArchetype"
156
162
  }
@@ -185,6 +191,26 @@ export class MrdDocumentContainer {
185
191
  "attribute": "parent-id",
186
192
  "defaultValue": "''"
187
193
  },
194
+ "containerHref": {
195
+ "type": "string",
196
+ "mutable": false,
197
+ "complexType": {
198
+ "original": "string",
199
+ "resolved": "string",
200
+ "references": {}
201
+ },
202
+ "required": false,
203
+ "optional": false,
204
+ "docs": {
205
+ "tags": [],
206
+ "text": "Canonical parent href, forwarded to the folder tree for single-container seeding."
207
+ },
208
+ "getter": false,
209
+ "setter": false,
210
+ "reflect": false,
211
+ "attribute": "container-href",
212
+ "defaultValue": "''"
213
+ },
188
214
  "viewKey": {
189
215
  "type": "string",
190
216
  "mutable": false,
@@ -205,6 +231,26 @@ export class MrdDocumentContainer {
205
231
  "attribute": "view-key",
206
232
  "defaultValue": "''"
207
233
  },
234
+ "height": {
235
+ "type": "number",
236
+ "mutable": false,
237
+ "complexType": {
238
+ "original": "number",
239
+ "resolved": "number",
240
+ "references": {}
241
+ },
242
+ "required": false,
243
+ "optional": false,
244
+ "docs": {
245
+ "tags": [],
246
+ "text": "Fixed height (px) of the scrolling folder-tree body \u2014 the toolbar stays put\non top, Finder-style. The table manages its own height."
247
+ },
248
+ "getter": false,
249
+ "setter": false,
250
+ "reflect": false,
251
+ "attribute": "height",
252
+ "defaultValue": "460"
253
+ },
208
254
  "locale": {
209
255
  "type": "string",
210
256
  "mutable": false,
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Tree model and pure tree logic for mrd-document-list.
3
+ * Nodes are mutated in place; the component triggers re-renders via bump().
4
+ */
5
+ /** Normalise a folder path: null/""/"/" → root ([]); else split on "/" dropping empties. */
6
+ export function splitFolder(path) {
7
+ if (path == null)
8
+ return [];
9
+ const s = String(path).trim();
10
+ if (s === '' || s === '/')
11
+ return [];
12
+ return s.split('/').map(x => x.trim()).filter(Boolean);
13
+ }
14
+ export function makeContainerNode(href, label, count) {
15
+ return {
16
+ id: 'c:' + href, kind: 'container', label, href,
17
+ hasDocs: false, docCount: 0, totalCount: count, children: [],
18
+ open: false, loading: false, foldersLoaded: false, docsLoaded: false, docs: [],
19
+ };
20
+ }
21
+ export function makeFolderNode(id, label, containerId) {
22
+ return {
23
+ id, kind: 'folder', label, containerId,
24
+ hasDocs: false, docCount: 0, totalCount: 0, children: [],
25
+ open: false, loading: false, foldersLoaded: false, docsLoaded: false, docs: [],
26
+ };
27
+ }
28
+ /** Recompute totalCount over the subtree; returns the node's aggregate. */
29
+ export function computeTotals(node) {
30
+ let total = node.docCount;
31
+ for (const c of node.children)
32
+ total += computeTotals(c);
33
+ node.totalCount = total;
34
+ return total;
35
+ }
36
+ /** Folder path segments of a node relative to its container (derived from its id). */
37
+ export function segmentsOf(node, container) {
38
+ if (node.kind === 'container')
39
+ return [];
40
+ const prefix = container.id + '/';
41
+ const rest = node.id.startsWith(prefix) ? node.id.slice(prefix.length) : '';
42
+ return rest ? rest.split('/') : [];
43
+ }
44
+ /** Folder string a node represents: the raw distinct value when it holds
45
+ * documents, else derived from its path segments; null for a container root. */
46
+ export function folderStringOf(node, container) {
47
+ if (node.kind === 'container')
48
+ return null;
49
+ if (node.fullPath != null && node.fullPath !== '')
50
+ return node.fullPath;
51
+ const segs = segmentsOf(node, container);
52
+ return segs.length ? '/' + segs.join('/') : null;
53
+ }
54
+ /** Strip a single trailing extension for the document title. */
55
+ export function stripExtension(name) {
56
+ return name.replace(/\.[^./\\]+$/, '');
57
+ }
58
+ /** Rebuild a container's folder subtree from the /distinct folder strings.
59
+ * New nodes are registered in `nodeIndex`; the container is mutated in place. */
60
+ export function applyFolderDistinct(container, values, nodeIndex) {
61
+ container.children = [];
62
+ container.hasDocs = false;
63
+ container.docCount = 0;
64
+ for (const v of values) {
65
+ const raw = typeof v.value === 'string' ? v.value : v.value == null ? '' : String(v.value);
66
+ const segs = splitFolder(raw);
67
+ if (segs.length === 0) {
68
+ // Root documents — the container's own direct documents.
69
+ container.hasDocs = true;
70
+ container.docCount = v.count;
71
+ container.fullPath = raw;
72
+ continue;
73
+ }
74
+ let node = container;
75
+ const acc = [];
76
+ for (const seg of segs) {
77
+ acc.push(seg);
78
+ let child = node.children.find(c => c.label === seg);
79
+ if (!child) {
80
+ child = makeFolderNode(container.id + '/' + acc.join('/'), seg, container.id);
81
+ node.children.push(child);
82
+ nodeIndex.set(child.id, child);
83
+ }
84
+ node = child;
85
+ }
86
+ node.hasDocs = true;
87
+ node.docCount = v.count;
88
+ node.fullPath = raw;
89
+ }
90
+ computeTotals(container);
91
+ container.foldersLoaded = true;
92
+ container.loading = false;
93
+ }
94
+ /** Optimistic in-place tree update for a document moved between folders. */
95
+ export function applyDocMove(doc, fromNode, toNode, targetFolder) {
96
+ fromNode.docs = fromNode.docs.filter(d => d !== doc);
97
+ fromNode.docCount = Math.max(0, fromNode.docCount - 1);
98
+ // A now-empty folder should stop showing an expand chevron (it disappears on
99
+ // the next reload anyway, since it is derived from document folder strings).
100
+ if (fromNode.docsLoaded)
101
+ fromNode.hasDocs = fromNode.docs.length > 0;
102
+ toNode.hasDocs = true;
103
+ toNode.pending = false; // a pending folder is now materialised
104
+ toNode.docCount += 1;
105
+ if (toNode.kind === 'folder')
106
+ toNode.fullPath = targetFolder !== null && targetFolder !== void 0 ? targetFolder : '';
107
+ if (toNode.docsLoaded)
108
+ toNode.docs = [...toNode.docs, doc];
109
+ }
@@ -1,9 +1,21 @@
1
+ @charset "UTF-8";
1
2
  :host {
2
3
  display: block;
4
+ height: 100%;
3
5
  }
4
6
 
5
7
  .mrd-document-list {
6
8
  padding: var(--mrd-space-2) 0;
9
+ min-height: 100%;
10
+ box-sizing: border-box;
11
+ }
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
+ .mrd-document-list--drop-active {
16
+ outline: 2px dashed var(--mrd-color-primary);
17
+ outline-offset: -4px;
18
+ background: var(--mrd-color-primary-50, rgba(22, 163, 74, 0.06));
7
19
  }
8
20
 
9
21
  .mrd-document-list__row {
@@ -119,7 +131,7 @@
119
131
  }
120
132
 
121
133
  .mrd-document-list__icon--folder {
122
- color: #d9a441;
134
+ color: var(--mrd-color-folder);
123
135
  }
124
136
 
125
137
  .mrd-document-list__icon--doc {
@@ -170,12 +182,13 @@
170
182
  }
171
183
 
172
184
  @keyframes mrd-document-list-spin {
173
- to { transform: rotate(360deg); }
185
+ to {
186
+ transform: rotate(360deg);
187
+ }
174
188
  }
175
-
176
189
  .mrd-document-list__empty {
177
190
  padding: var(--mrd-space-8) var(--mrd-space-4);
178
191
  text-align: center;
179
192
  color: var(--mrd-color-neutral-400);
180
193
  font-size: var(--mrd-font-size-sm);
181
- }
194
+ }