@mmlogic/components 0.5.14 → 0.5.16

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 (91) hide show
  1. package/dist/cjs/{cell-renderer-mjS630f1.js → cell-renderer-CLVKTVVQ.js} +105 -1
  2. package/dist/cjs/{client-layout-CqVuJumR.js → client-layout-Eg2VwW-7.js} +2 -0
  3. package/dist/cjs/index.cjs.js +2 -1
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/mosterdcomponents.cjs.js +1 -1
  6. package/dist/cjs/{mrd-boolean-field_25.cjs.entry.js → mrd-boolean-field_28.cjs.entry.js} +1168 -314
  7. package/dist/cjs/mrd-merge-view.cjs.entry.js +4 -4
  8. package/dist/collection/collection-manifest.json +3 -0
  9. package/dist/collection/components/fields/mrd-textarea-field/mrd-textarea-field.js +47 -2
  10. package/dist/collection/components/form/mrd-field/mrd-field.css +69 -0
  11. package/dist/collection/components/form/mrd-field/mrd-field.js +95 -25
  12. package/dist/collection/components/form/mrd-form/mrd-form.css +29 -0
  13. package/dist/collection/components/form/mrd-form/mrd-form.js +44 -8
  14. package/dist/collection/components/layout/mrd-layout-section/field-value.js +19 -2
  15. package/dist/collection/components/layout/mrd-layout-section/layout-helpers.js +10 -0
  16. package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.css +4 -3
  17. package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.js +169 -18
  18. package/dist/collection/components/memo/mrd-memo-container/mrd-memo-container.css +204 -0
  19. package/dist/collection/components/memo/mrd-memo-container/mrd-memo-container.js +769 -0
  20. package/dist/collection/components/memo/mrd-memo-list/mrd-memo-list.css +164 -0
  21. package/dist/collection/components/memo/mrd-memo-list/mrd-memo-list.js +559 -0
  22. package/dist/collection/components/memo/mrd-memo-view/mrd-memo-view.css +108 -0
  23. package/dist/collection/components/memo/mrd-memo-view/mrd-memo-view.js +204 -0
  24. package/dist/collection/components/merge/mrd-merge-view/mrd-merge-view.js +2 -2
  25. package/dist/collection/components/table/mrd-table/mrd-table.js +9 -6
  26. package/dist/collection/dev/app.js +30 -15
  27. package/dist/collection/dev/example-data.js +15 -1
  28. package/dist/collection/types/client-layout.js +1 -0
  29. package/dist/collection/utils/i18n.js +104 -0
  30. package/dist/collection/utils/query-params.js +9 -0
  31. package/dist/components/client-layout.js +1 -1
  32. package/dist/components/i18n.js +1 -1
  33. package/dist/components/index.js +1 -1
  34. package/dist/components/mrd-field2.js +1 -1
  35. package/dist/components/mrd-form.js +1 -1
  36. package/dist/components/mrd-layout-section.js +1 -1
  37. package/dist/components/mrd-memo-container.d.ts +11 -0
  38. package/dist/components/mrd-memo-container.js +1 -0
  39. package/dist/components/mrd-memo-container2.js +1 -0
  40. package/dist/components/mrd-memo-list.d.ts +11 -0
  41. package/dist/components/mrd-memo-list.js +1 -0
  42. package/dist/components/mrd-memo-list2.js +1 -0
  43. package/dist/components/mrd-memo-view.d.ts +11 -0
  44. package/dist/components/mrd-memo-view.js +1 -0
  45. package/dist/components/mrd-memo-view2.js +1 -0
  46. package/dist/components/mrd-merge-view.js +1 -1
  47. package/dist/components/mrd-table2.js +1 -1
  48. package/dist/components/mrd-textarea-field2.js +1 -1
  49. package/dist/components/query-params.js +1 -1
  50. package/dist/components/table-query.js +1 -0
  51. package/dist/esm/{cell-renderer-BDY8UXkH.js → cell-renderer-4NKEzZWw.js} +105 -1
  52. package/dist/esm/{client-layout-Bc42CfJB.js → client-layout-BJkVeSq6.js} +2 -1
  53. package/dist/esm/index.js +1 -1
  54. package/dist/esm/loader.js +1 -1
  55. package/dist/esm/mosterdcomponents.js +1 -1
  56. package/dist/esm/{mrd-boolean-field_25.entry.js → mrd-boolean-field_28.entry.js} +1166 -315
  57. package/dist/esm/mrd-merge-view.entry.js +4 -4
  58. package/dist/mosterdcomponents/{cell-renderer-B8u5BCK-.js.map → cell-renderer-CMUxFREW.js.map} +1 -1
  59. package/dist/mosterdcomponents/client-layout-BJkVeSq6.js.map +1 -0
  60. package/dist/mosterdcomponents/{field-helpers-CNQcI3Hf.js.map → field-helpers-BWAp5fD8.js.map} +1 -1
  61. package/dist/mosterdcomponents/{file-upload-common-C9wp47CB.js.map → file-upload-common-DDWuC9-3.js.map} +1 -1
  62. package/dist/mosterdcomponents/i18n-OzbszktW.js.map +1 -0
  63. package/dist/mosterdcomponents/index-CkcFwdPc.js.map +1 -0
  64. package/dist/mosterdcomponents/index.esm.js +1 -1
  65. package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
  66. package/dist/mosterdcomponents/p-8a7fa81d.entry.js +3 -0
  67. package/dist/mosterdcomponents/{p-Bc42CfJB.js → p-BJkVeSq6.js} +1 -1
  68. package/dist/mosterdcomponents/p-BMx6VAJ6.js +1 -0
  69. package/dist/mosterdcomponents/{p-e8b0880f.entry.js → p-e68dfbb0.entry.js} +1 -1
  70. package/dist/mosterdcomponents/query-params-3TXd5CUO.js.map +1 -0
  71. package/dist/mosterdcomponents/table-query-DJq1uKqJ.js.map +1 -0
  72. package/dist/mosterdcomponents/{validation-CjjTt66G.js.map → validation-B_0Lx9DE.js.map} +1 -1
  73. package/dist/types/components/fields/mrd-textarea-field/mrd-textarea-field.d.ts +10 -0
  74. package/dist/types/components/form/mrd-field/mrd-field.d.ts +16 -0
  75. package/dist/types/components/form/mrd-form/mrd-form.d.ts +6 -0
  76. package/dist/types/components/layout/mrd-layout-section/field-value.d.ts +4 -0
  77. package/dist/types/components/layout/mrd-layout-section/layout-helpers.d.ts +3 -0
  78. package/dist/types/components/layout/mrd-layout-section/mrd-layout-section.d.ts +25 -1
  79. package/dist/types/components/memo/mrd-memo-container/mrd-memo-container.d.ts +173 -0
  80. package/dist/types/components/memo/mrd-memo-list/mrd-memo-list.d.ts +91 -0
  81. package/dist/types/components/memo/mrd-memo-view/mrd-memo-view.d.ts +33 -0
  82. package/dist/types/components.d.ts +571 -1
  83. package/dist/types/types/client-layout.d.ts +1 -0
  84. package/dist/types/utils/query-params.d.ts +16 -0
  85. package/package.json +1 -1
  86. package/dist/mosterdcomponents/client-layout-Bc42CfJB.js.map +0 -1
  87. package/dist/mosterdcomponents/i18n-ydNM87-Q.js.map +0 -1
  88. package/dist/mosterdcomponents/index-DhffneUF.js.map +0 -1
  89. package/dist/mosterdcomponents/p-Dkm4WxMy.js +0 -1
  90. package/dist/mosterdcomponents/p-c834951a.entry.js +0 -3
  91. package/dist/mosterdcomponents/query-params-BZbQoeYF.js.map +0 -1
@@ -403,6 +403,11 @@ export namespace Components {
403
403
  * @default false
404
404
  */
405
405
  "showCancel": boolean;
406
+ /**
407
+ * When true, a delete button is shown next to the submit button (edit mode only — the host decides when a delete affordance makes sense, e.g. only for an existing record). Deletion itself (confirmation, the actual API call) is entirely the host's responsibility; mrd-form only emits the request via mrdDelete.
408
+ * @default false
409
+ */
410
+ "showDelete": boolean;
406
411
  /**
407
412
  * @default {}
408
413
  */
@@ -535,6 +540,11 @@ export namespace Components {
535
540
  * @default navigator.language
536
541
  */
537
542
  "locale": string;
543
+ /**
544
+ * The active account's linked person record (userProfile.links.person), if any. Threaded to mrd-memo-container so a top-level memo VIEW (no parent record to attach a new memo to) can still offer "New memo" by falling back to the account's own record as the container.
545
+ * @default null
546
+ */
547
+ "me": RelationSearchResult1 | null;
538
548
  /**
539
549
  * Open the lightbox directly with a URL (e.g. after mrdDownload on a FILE field).
540
550
  */
@@ -557,7 +567,7 @@ export namespace Components {
557
567
  */
558
568
  "setViewAggregations": (name: string, data: any) => Promise<void>;
559
569
  /**
560
- * Inject the created document's href after a file-drop create, so the optimistic row becomes navigable (see mrdCreateObject).
570
+ * Inject the created document's href after a file-drop create, so the optimistic row becomes navigable (see mrdCreateObject). For a memo quick-create there is no optimistic row to resolve — simply reload the container's current body so the new memo shows up.
561
571
  */
562
572
  "setViewCreatedObject": (name: string, href: string) => Promise<void>;
563
573
  /**
@@ -643,6 +653,177 @@ export namespace Components {
643
653
  */
644
654
  "value": string;
645
655
  }
656
+ /**
657
+ * Owns a memo collection view: a single toolbar (view switch + "New memo") plus
658
+ * the two interchangeable bodies — the card list (`mrd-memo-list`) and the flat
659
+ * table (`mrd-table`). Mirrors `mrd-document-container`'s structure.
660
+ * There is no memo detail page: both "New memo" and clicking an existing memo
661
+ * (card or table row) open the same small dialog — just the fields a person
662
+ * actually fills in (body, and only the optional slots the archetype actually
663
+ * maps: title/labels/important). date/author/container are already known
664
+ * context and never shown. Create emits `mrdCreateObject` (same contract
665
+ * mrd-document-list already uses for its inline file-drop create); editing an
666
+ * existing memo emits `mrdUpdateObject` (same generic PATCH contract used
667
+ * elsewhere, e.g. mrd-document-list's drag-move) and optimistically patches the
668
+ * displayed row/card itself, since that PATCH is fire-and-forget on the host.
669
+ * `mrd-layout-section` renders one of these per memo VIEW / RELATED_VIEW and
670
+ * forwards the re-emitted load/action/create/update events to the host.
671
+ */
672
+ interface MrdMemoContainer {
673
+ /**
674
+ * Resolved `commons.memo` archetype binding.
675
+ */
676
+ "archetype": ClientArchetype;
677
+ /**
678
+ * Canonical parent href — set when this is a RELATED_VIEW embedded under a parent record, which already gives a new memo something to attach to.
679
+ * @default ''
680
+ */
681
+ "containerHref": string;
682
+ /**
683
+ * False when this RELATED_VIEW's parent is related via a relation other than the archetype's container slot (e.g. a person's "memos I authored" list, related via `author`) — mrd-layout-section resolves this from the item's `inverseRelation`. In that case the parent is not a valid container for a new memo, and — unlike a top-level VIEW with no context at all — falling back to `me` would be wrong too (creating a memo "on myself" from someone else's authored-memos list makes no sense), so "New memo" is hidden outright.
684
+ * @default true
685
+ */
686
+ "containerRelated": boolean;
687
+ /**
688
+ * The VIEW or RELATED_VIEW layout item (dataClass, fromClass, view config).
689
+ * @default null
690
+ */
691
+ "item": ClientLayoutItem | null;
692
+ /**
693
+ * listItems of the FIELD bound to the `labels` slot; forwarded to whichever body is mounted and used to render the dialog's label checkboxes.
694
+ * @default null
695
+ */
696
+ "labelsListItems": ClientListValue[] | null;
697
+ /**
698
+ * @default navigator.language
699
+ */
700
+ "locale": string;
701
+ /**
702
+ * The active account's linked person record (userProfile.links.person), if any. Used both to gate "New memo" (see effectiveContainerHref) and, on submit, to fill the author slot.
703
+ * @default null
704
+ */
705
+ "me": RelationSearchResult1 | null;
706
+ /**
707
+ * Parent record id — required for RELATED_VIEW path building.
708
+ * @default ''
709
+ */
710
+ "parentId": string;
711
+ /**
712
+ * When true, this dashboard is read-only: "New memo" is disabled with a tooltip, cards/rows are not clickable, and the embedded table's own create action is disabled too.
713
+ * @default false
714
+ */
715
+ "readOnly": boolean;
716
+ /**
717
+ * Re-request page 0 of whichever body is currently mounted — called by mrd-layout-section after a successful mrdCreateObject, and by this component itself after an edit to a table row (which has no per-row optimistic-patch method the way mrd-memo-list does).
718
+ */
719
+ "refresh": () => Promise<void>;
720
+ /**
721
+ * True unless this is a container-scoped RELATED_VIEW (a company's own memo tab, say) where every card's container is obviously the page you're already on — forwarded to mrd-memo-list to show/hide its per-card container link. A top-level VIEW or an author-scoped RELATED_VIEW both still need it, since the container isn't implied by the page context.
722
+ * @default true
723
+ */
724
+ "showContainerLink": boolean;
725
+ /**
726
+ * Lookup key used for the embedded `data-view` attribute.
727
+ * @default ''
728
+ */
729
+ "viewKey": string;
730
+ }
731
+ /**
732
+ * Card-view body for a `commons.memo` collection — the alternative to the flat
733
+ * `mrd-table` a `mrd-memo-container` can switch to. Deliberately simpler than
734
+ * `mrd-table`'s virtual-scroll internals: memo cards accumulate via a plain
735
+ * "load more" affordance rather than windowed rendering, since a bounded card
736
+ * list of notes doesn't need that complexity.
737
+ * Mirrors `mrd-table`'s external contract for the parts a host / mrd-layout-
738
+ * section already knows how to drive — `init()`, `setPage()`, the `mrdLoadPage`
739
+ * event shape `{ page, sort, path, qs }` — so no new host-side wiring is needed
740
+ * to feed it data.
741
+ * There is no separate memo detail page: clicking a card opens mrd-memo-
742
+ * container's quick-edit dialog directly (mrdEdit), the same dialog "New memo"
743
+ * uses for creation.
744
+ */
745
+ interface MrdMemoList {
746
+ /**
747
+ * Resolved `commons.memo` archetype binding.
748
+ */
749
+ "archetype": ClientArchetype;
750
+ /**
751
+ * Reset and request page 0. Call after setting all props, mirrors mrd-table.init().
752
+ */
753
+ "init": () => Promise<void>;
754
+ /**
755
+ * The VIEW or RELATED_VIEW layout item (dataClass, fromClass, view config).
756
+ * @default null
757
+ */
758
+ "item": ClientLayoutItem | null;
759
+ /**
760
+ * listItems of the FIELD bound to the `labels` slot, resolved by mrd-layout-section from its own items array, same reason mrd-memo-view needs it.
761
+ * @default null
762
+ */
763
+ "labelsListItems": ClientListValue[] | null;
764
+ /**
765
+ * @default navigator.language
766
+ */
767
+ "locale": string;
768
+ /**
769
+ * Records per page (must match API page size).
770
+ * @default 20
771
+ */
772
+ "pageSize": number;
773
+ /**
774
+ * Parent record id — required for RELATED_VIEW path building.
775
+ * @default ''
776
+ */
777
+ "parentId": string;
778
+ /**
779
+ * Optimistically merge an edit into the matching row — mrdUpdateObject's PATCH is fire-and-forget on the host side, so this is what makes an edit visible immediately rather than only after the next full reload.
780
+ */
781
+ "patchRow": (href: string, values: Record<string, unknown>) => Promise<void>;
782
+ /**
783
+ * When true, cards are not clickable (no mrdEdit) — matches mrd-table's own readOnly gating on its create action.
784
+ * @default false
785
+ */
786
+ "readOnly": boolean;
787
+ /**
788
+ * Optimistically drop a deleted row — mrdDeleteObject's DELETE is fire-and- forget on the host side, same reasoning as patchRow().
789
+ */
790
+ "removeRow": (href: string) => Promise<void>;
791
+ /**
792
+ * Inject the rows for a page (0-based); page 0 replaces, later pages append.
793
+ */
794
+ "setPage": (pageNumber: number, rows: Record<string, unknown>[], hasNext?: boolean) => Promise<void>;
795
+ /**
796
+ * False when the list is already scoped to its own container (a company's own memo tab) — showing "belongs to: <this same company>" on every card there would be redundant. True everywhere else (top-level VIEW, or a RELATED_VIEW scoped by a different relation, e.g. a person's authored-memos list).
797
+ * @default true
798
+ */
799
+ "showContainerLink": boolean;
800
+ }
801
+ /**
802
+ * Archetype-driven single-memo view. Given a `commons.memo` binding and a data
803
+ * record, renders the memo the way a note should read: the title and body are
804
+ * the prominent content, author and timestamp sit below as a subtle metadata
805
+ * line — not the other way around.
806
+ */
807
+ interface MrdMemoView {
808
+ /**
809
+ * Resolved `commons.memo` binding: slot name → concrete field/relation name.
810
+ */
811
+ "archetype": ClientArchetype;
812
+ /**
813
+ * The data record from the /data endpoint. Fields keyed by name; relations under `_links`.
814
+ * @default {}
815
+ */
816
+ "data": Record<string, unknown>;
817
+ /**
818
+ * listItems of the FIELD bound to the `labels` slot, resolved by mrd-layout-section from its own items array (archetype metadata does not publish listItems), so the label badges get a real label/color instead of the raw stored key.
819
+ * @default null
820
+ */
821
+ "labelsListItems": ClientListValue[] | null;
822
+ /**
823
+ * @default navigator.language
824
+ */
825
+ "locale": string;
826
+ }
646
827
  /**
647
828
  * Merges two DataObjects of the same basic type (FINDING-0114 / TASK-0177).
648
829
  * Never performs network I/O itself: it emits `mrdSearch` (host searches and
@@ -909,6 +1090,11 @@ export namespace Components {
909
1090
  "value": string;
910
1091
  }
911
1092
  interface MrdTextareaField {
1093
+ /**
1094
+ * Focus the editor as soon as it's ready — opt-in, since auto-focusing every textarea field on mount would be wrong for a regular multi-field form.
1095
+ * @default false
1096
+ */
1097
+ "autofocus": boolean;
912
1098
  /**
913
1099
  * @default false
914
1100
  */
@@ -1037,6 +1223,18 @@ export interface MrdLongtextFieldCustomEvent<T> extends CustomEvent<T> {
1037
1223
  detail: T;
1038
1224
  target: HTMLMrdLongtextFieldElement;
1039
1225
  }
1226
+ export interface MrdMemoContainerCustomEvent<T> extends CustomEvent<T> {
1227
+ detail: T;
1228
+ target: HTMLMrdMemoContainerElement;
1229
+ }
1230
+ export interface MrdMemoListCustomEvent<T> extends CustomEvent<T> {
1231
+ detail: T;
1232
+ target: HTMLMrdMemoListElement;
1233
+ }
1234
+ export interface MrdMemoViewCustomEvent<T> extends CustomEvent<T> {
1235
+ detail: T;
1236
+ target: HTMLMrdMemoViewElement;
1237
+ }
1040
1238
  export interface MrdMergeViewCustomEvent<T> extends CustomEvent<T> {
1041
1239
  detail: T;
1042
1240
  target: HTMLMrdMergeViewElement;
@@ -1341,6 +1539,7 @@ declare global {
1341
1539
  interface HTMLMrdFormElementEventMap {
1342
1540
  "mrdSubmit": Record<string, unknown>;
1343
1541
  "mrdCancel": void;
1542
+ "mrdDelete": void;
1344
1543
  "mrdSearch": { name: string; query: string; relatedClass: string };
1345
1544
  "mrdFetchAll": { name: string; relatedClass: string; mostSignificantClass?: string; commonRelation?: string; filter?: string; filterValue?: string };
1346
1545
  "mrdUpload": { name: string; file: File };
@@ -1440,6 +1639,7 @@ declare global {
1440
1639
  "mrdLoadViewAggregations": { name: string; dataClass: string; path: string; qs: string; aggQs: string };
1441
1640
  "mrdLoadViewDistinct": { name: string; nodeId: string; distinct: string; path: string; qs: string };
1442
1641
  "mrdUpdateObject": { href: string; values: Record<string, unknown> };
1642
+ "mrdDeleteObject": { href: string };
1443
1643
  "mrdViewUpload": { name: string; file: File };
1444
1644
  "mrdCreateObject": { name: string; path: string; values: Record<string, unknown> };
1445
1645
  }
@@ -1493,6 +1693,101 @@ declare global {
1493
1693
  prototype: HTMLMrdLongtextFieldElement;
1494
1694
  new (): HTMLMrdLongtextFieldElement;
1495
1695
  };
1696
+ interface HTMLMrdMemoContainerElementEventMap {
1697
+ "mrdLoadPage": { page: number; sort: string; path: string; qs: string };
1698
+ "mrdLoadAggregations": { path: string; qs: string; aggQs: string };
1699
+ "mrdNavigate": { href?: string; label: string };
1700
+ "mrdAction": { action: string; path?: string; qs?: string; parentPath?: string | null; basicType?: string };
1701
+ "mrdCreateObject": { path: string; values: Record<string, unknown> };
1702
+ "mrdUpdateObject": { href: string; values: Record<string, unknown> };
1703
+ "mrdDeleteObject": { href: string };
1704
+ }
1705
+ /**
1706
+ * Owns a memo collection view: a single toolbar (view switch + "New memo") plus
1707
+ * the two interchangeable bodies — the card list (`mrd-memo-list`) and the flat
1708
+ * table (`mrd-table`). Mirrors `mrd-document-container`'s structure.
1709
+ * There is no memo detail page: both "New memo" and clicking an existing memo
1710
+ * (card or table row) open the same small dialog — just the fields a person
1711
+ * actually fills in (body, and only the optional slots the archetype actually
1712
+ * maps: title/labels/important). date/author/container are already known
1713
+ * context and never shown. Create emits `mrdCreateObject` (same contract
1714
+ * mrd-document-list already uses for its inline file-drop create); editing an
1715
+ * existing memo emits `mrdUpdateObject` (same generic PATCH contract used
1716
+ * elsewhere, e.g. mrd-document-list's drag-move) and optimistically patches the
1717
+ * displayed row/card itself, since that PATCH is fire-and-forget on the host.
1718
+ * `mrd-layout-section` renders one of these per memo VIEW / RELATED_VIEW and
1719
+ * forwards the re-emitted load/action/create/update events to the host.
1720
+ */
1721
+ interface HTMLMrdMemoContainerElement extends Components.MrdMemoContainer, HTMLStencilElement {
1722
+ addEventListener<K extends keyof HTMLMrdMemoContainerElementEventMap>(type: K, listener: (this: HTMLMrdMemoContainerElement, ev: MrdMemoContainerCustomEvent<HTMLMrdMemoContainerElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
1723
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
1724
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
1725
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
1726
+ removeEventListener<K extends keyof HTMLMrdMemoContainerElementEventMap>(type: K, listener: (this: HTMLMrdMemoContainerElement, ev: MrdMemoContainerCustomEvent<HTMLMrdMemoContainerElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
1727
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
1728
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
1729
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
1730
+ }
1731
+ var HTMLMrdMemoContainerElement: {
1732
+ prototype: HTMLMrdMemoContainerElement;
1733
+ new (): HTMLMrdMemoContainerElement;
1734
+ };
1735
+ interface HTMLMrdMemoListElementEventMap {
1736
+ "mrdLoadPage": { page: number; sort: string; path: string; qs: string };
1737
+ "mrdEdit": { row: Record<string, unknown> };
1738
+ "mrdNavigate": { href?: string; label: string };
1739
+ }
1740
+ /**
1741
+ * Card-view body for a `commons.memo` collection — the alternative to the flat
1742
+ * `mrd-table` a `mrd-memo-container` can switch to. Deliberately simpler than
1743
+ * `mrd-table`'s virtual-scroll internals: memo cards accumulate via a plain
1744
+ * "load more" affordance rather than windowed rendering, since a bounded card
1745
+ * list of notes doesn't need that complexity.
1746
+ * Mirrors `mrd-table`'s external contract for the parts a host / mrd-layout-
1747
+ * section already knows how to drive — `init()`, `setPage()`, the `mrdLoadPage`
1748
+ * event shape `{ page, sort, path, qs }` — so no new host-side wiring is needed
1749
+ * to feed it data.
1750
+ * There is no separate memo detail page: clicking a card opens mrd-memo-
1751
+ * container's quick-edit dialog directly (mrdEdit), the same dialog "New memo"
1752
+ * uses for creation.
1753
+ */
1754
+ interface HTMLMrdMemoListElement extends Components.MrdMemoList, HTMLStencilElement {
1755
+ addEventListener<K extends keyof HTMLMrdMemoListElementEventMap>(type: K, listener: (this: HTMLMrdMemoListElement, ev: MrdMemoListCustomEvent<HTMLMrdMemoListElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
1756
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
1757
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
1758
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
1759
+ removeEventListener<K extends keyof HTMLMrdMemoListElementEventMap>(type: K, listener: (this: HTMLMrdMemoListElement, ev: MrdMemoListCustomEvent<HTMLMrdMemoListElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
1760
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
1761
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
1762
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
1763
+ }
1764
+ var HTMLMrdMemoListElement: {
1765
+ prototype: HTMLMrdMemoListElement;
1766
+ new (): HTMLMrdMemoListElement;
1767
+ };
1768
+ interface HTMLMrdMemoViewElementEventMap {
1769
+ "mrdNavigate": { href?: string; label: string };
1770
+ }
1771
+ /**
1772
+ * Archetype-driven single-memo view. Given a `commons.memo` binding and a data
1773
+ * record, renders the memo the way a note should read: the title and body are
1774
+ * the prominent content, author and timestamp sit below as a subtle metadata
1775
+ * line — not the other way around.
1776
+ */
1777
+ interface HTMLMrdMemoViewElement extends Components.MrdMemoView, HTMLStencilElement {
1778
+ addEventListener<K extends keyof HTMLMrdMemoViewElementEventMap>(type: K, listener: (this: HTMLMrdMemoViewElement, ev: MrdMemoViewCustomEvent<HTMLMrdMemoViewElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
1779
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
1780
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
1781
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
1782
+ removeEventListener<K extends keyof HTMLMrdMemoViewElementEventMap>(type: K, listener: (this: HTMLMrdMemoViewElement, ev: MrdMemoViewCustomEvent<HTMLMrdMemoViewElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
1783
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
1784
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
1785
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
1786
+ }
1787
+ var HTMLMrdMemoViewElement: {
1788
+ prototype: HTMLMrdMemoViewElement;
1789
+ new (): HTMLMrdMemoViewElement;
1790
+ };
1496
1791
  interface HTMLMrdMergeViewElementEventMap {
1497
1792
  "mrdSearch": { query: string; basicType: string; mostSignificantClass?: string };
1498
1793
  "mrdMerge": { winnerHref: string; loserHref: string; patch: Record<string, unknown> };
@@ -1672,6 +1967,9 @@ declare global {
1672
1967
  "mrd-layout-section": HTMLMrdLayoutSectionElement;
1673
1968
  "mrd-list-field": HTMLMrdListFieldElement;
1674
1969
  "mrd-longtext-field": HTMLMrdLongtextFieldElement;
1970
+ "mrd-memo-container": HTMLMrdMemoContainerElement;
1971
+ "mrd-memo-list": HTMLMrdMemoListElement;
1972
+ "mrd-memo-view": HTMLMrdMemoViewElement;
1675
1973
  "mrd-merge-view": HTMLMrdMergeViewElement;
1676
1974
  "mrd-number-field": HTMLMrdNumberFieldElement;
1677
1975
  "mrd-relation-field": HTMLMrdRelationFieldElement;
@@ -2137,6 +2435,7 @@ declare namespace LocalJSX {
2137
2435
  */
2138
2436
  "me"?: RelationSearchResult | null;
2139
2437
  "onMrdCancel"?: (event: MrdFormCustomEvent<void>) => void;
2438
+ "onMrdDelete"?: (event: MrdFormCustomEvent<void>) => void;
2140
2439
  "onMrdFetchAll"?: (event: MrdFormCustomEvent<{ name: string; relatedClass: string; mostSignificantClass?: string; commonRelation?: string; filter?: string; filterValue?: string }>) => void;
2141
2440
  "onMrdSearch"?: (event: MrdFormCustomEvent<{ name: string; query: string; relatedClass: string }>) => void;
2142
2441
  "onMrdSubmit"?: (event: MrdFormCustomEvent<Record<string, unknown>>) => void;
@@ -2156,6 +2455,11 @@ declare namespace LocalJSX {
2156
2455
  * @default false
2157
2456
  */
2158
2457
  "showCancel"?: boolean;
2458
+ /**
2459
+ * When true, a delete button is shown next to the submit button (edit mode only — the host decides when a delete affordance makes sense, e.g. only for an existing record). Deletion itself (confirmation, the actual API call) is entirely the host's responsibility; mrd-form only emits the request via mrdDelete.
2460
+ * @default false
2461
+ */
2462
+ "showDelete"?: boolean;
2159
2463
  /**
2160
2464
  * @default {}
2161
2465
  */
@@ -2308,6 +2612,11 @@ declare namespace LocalJSX {
2308
2612
  * @default navigator.language
2309
2613
  */
2310
2614
  "locale"?: string;
2615
+ /**
2616
+ * The active account's linked person record (userProfile.links.person), if any. Threaded to mrd-memo-container so a top-level memo VIEW (no parent record to attach a new memo to) can still offer "New memo" by falling back to the account's own record as the container.
2617
+ * @default null
2618
+ */
2619
+ "me"?: RelationSearchResult1 | null;
2311
2620
  /**
2312
2621
  * Re-emitted from an embedded mrd-document-view (commons.document single-object view) whenever its file slot's value changes. The component never renders the file itself — the host resolves the href(s) and decides how/whether to show them, e.g. in a panel next to this mrd-layout-section.
2313
2622
  */
@@ -2316,6 +2625,10 @@ declare namespace LocalJSX {
2316
2625
  * Create a new document from an uploaded file; host POSTs `values` to `path`, then calls setViewCreatedObject(name, href) with the new object's href.
2317
2626
  */
2318
2627
  "onMrdCreateObject"?: (event: MrdLayoutSectionCustomEvent<{ name: string; path: string; values: Record<string, unknown> }>) => void;
2628
+ /**
2629
+ * Confirmed delete from an embedded memo dialog. Host DELETEs `href` — fire- and-forget, the row is already removed optimistically on the component side.
2630
+ */
2631
+ "onMrdDeleteObject"?: (event: MrdLayoutSectionCustomEvent<{ href: string }>) => void;
2319
2632
  "onMrdDownload"?: (event: MrdLayoutSectionCustomEvent<{ href: string; fileName: string }>) => void;
2320
2633
  /**
2321
2634
  * Fired once on load for each IMAGE field that has an href; host resolves the URL and calls setImagePreview().
@@ -2430,6 +2743,195 @@ declare namespace LocalJSX {
2430
2743
  */
2431
2744
  "value"?: string;
2432
2745
  }
2746
+ /**
2747
+ * Owns a memo collection view: a single toolbar (view switch + "New memo") plus
2748
+ * the two interchangeable bodies — the card list (`mrd-memo-list`) and the flat
2749
+ * table (`mrd-table`). Mirrors `mrd-document-container`'s structure.
2750
+ * There is no memo detail page: both "New memo" and clicking an existing memo
2751
+ * (card or table row) open the same small dialog — just the fields a person
2752
+ * actually fills in (body, and only the optional slots the archetype actually
2753
+ * maps: title/labels/important). date/author/container are already known
2754
+ * context and never shown. Create emits `mrdCreateObject` (same contract
2755
+ * mrd-document-list already uses for its inline file-drop create); editing an
2756
+ * existing memo emits `mrdUpdateObject` (same generic PATCH contract used
2757
+ * elsewhere, e.g. mrd-document-list's drag-move) and optimistically patches the
2758
+ * displayed row/card itself, since that PATCH is fire-and-forget on the host.
2759
+ * `mrd-layout-section` renders one of these per memo VIEW / RELATED_VIEW and
2760
+ * forwards the re-emitted load/action/create/update events to the host.
2761
+ */
2762
+ interface MrdMemoContainer {
2763
+ /**
2764
+ * Resolved `commons.memo` archetype binding.
2765
+ */
2766
+ "archetype": ClientArchetype;
2767
+ /**
2768
+ * Canonical parent href — set when this is a RELATED_VIEW embedded under a parent record, which already gives a new memo something to attach to.
2769
+ * @default ''
2770
+ */
2771
+ "containerHref"?: string;
2772
+ /**
2773
+ * False when this RELATED_VIEW's parent is related via a relation other than the archetype's container slot (e.g. a person's "memos I authored" list, related via `author`) — mrd-layout-section resolves this from the item's `inverseRelation`. In that case the parent is not a valid container for a new memo, and — unlike a top-level VIEW with no context at all — falling back to `me` would be wrong too (creating a memo "on myself" from someone else's authored-memos list makes no sense), so "New memo" is hidden outright.
2774
+ * @default true
2775
+ */
2776
+ "containerRelated"?: boolean;
2777
+ /**
2778
+ * The VIEW or RELATED_VIEW layout item (dataClass, fromClass, view config).
2779
+ * @default null
2780
+ */
2781
+ "item"?: ClientLayoutItem | null;
2782
+ /**
2783
+ * listItems of the FIELD bound to the `labels` slot; forwarded to whichever body is mounted and used to render the dialog's label checkboxes.
2784
+ * @default null
2785
+ */
2786
+ "labelsListItems"?: ClientListValue[] | null;
2787
+ /**
2788
+ * @default navigator.language
2789
+ */
2790
+ "locale"?: string;
2791
+ /**
2792
+ * The active account's linked person record (userProfile.links.person), if any. Used both to gate "New memo" (see effectiveContainerHref) and, on submit, to fill the author slot.
2793
+ * @default null
2794
+ */
2795
+ "me"?: RelationSearchResult1 | null;
2796
+ /**
2797
+ * Only the embedded table's own toolbar (export, etc.) still routes through this.
2798
+ */
2799
+ "onMrdAction"?: (event: MrdMemoContainerCustomEvent<{ action: string; path?: string; qs?: string; parentPath?: string | null; basicType?: string }>) => void;
2800
+ /**
2801
+ * Quick-create submit. Host POSTs `values` to `path`, same as mrd-document-list's.
2802
+ */
2803
+ "onMrdCreateObject"?: (event: MrdMemoContainerCustomEvent<{ path: string; values: Record<string, unknown> }>) => void;
2804
+ /**
2805
+ * Confirmed delete. Host DELETEs `href` — fire-and-forget, same as mrdUpdateObject; the row is removed optimistically here rather than waiting on a callback.
2806
+ */
2807
+ "onMrdDeleteObject"?: (event: MrdMemoContainerCustomEvent<{ href: string }>) => void;
2808
+ "onMrdLoadAggregations"?: (event: MrdMemoContainerCustomEvent<{ path: string; qs: string; aggQs: string }>) => void;
2809
+ "onMrdLoadPage"?: (event: MrdMemoContainerCustomEvent<{ page: number; sort: string; path: string; qs: string }>) => void;
2810
+ /**
2811
+ * A card's container link was clicked — real navigation, unrelated to the quick-edit dialog (mrdEdit is internal, handled by this component itself).
2812
+ */
2813
+ "onMrdNavigate"?: (event: MrdMemoContainerCustomEvent<{ href?: string; label: string }>) => void;
2814
+ /**
2815
+ * Quick-edit submit. Host PATCHes `href` with `values`, same as mrd-document-list's drag-move.
2816
+ */
2817
+ "onMrdUpdateObject"?: (event: MrdMemoContainerCustomEvent<{ href: string; values: Record<string, unknown> }>) => void;
2818
+ /**
2819
+ * Parent record id — required for RELATED_VIEW path building.
2820
+ * @default ''
2821
+ */
2822
+ "parentId"?: string;
2823
+ /**
2824
+ * When true, this dashboard is read-only: "New memo" is disabled with a tooltip, cards/rows are not clickable, and the embedded table's own create action is disabled too.
2825
+ * @default false
2826
+ */
2827
+ "readOnly"?: boolean;
2828
+ /**
2829
+ * True unless this is a container-scoped RELATED_VIEW (a company's own memo tab, say) where every card's container is obviously the page you're already on — forwarded to mrd-memo-list to show/hide its per-card container link. A top-level VIEW or an author-scoped RELATED_VIEW both still need it, since the container isn't implied by the page context.
2830
+ * @default true
2831
+ */
2832
+ "showContainerLink"?: boolean;
2833
+ /**
2834
+ * Lookup key used for the embedded `data-view` attribute.
2835
+ * @default ''
2836
+ */
2837
+ "viewKey"?: string;
2838
+ }
2839
+ /**
2840
+ * Card-view body for a `commons.memo` collection — the alternative to the flat
2841
+ * `mrd-table` a `mrd-memo-container` can switch to. Deliberately simpler than
2842
+ * `mrd-table`'s virtual-scroll internals: memo cards accumulate via a plain
2843
+ * "load more" affordance rather than windowed rendering, since a bounded card
2844
+ * list of notes doesn't need that complexity.
2845
+ * Mirrors `mrd-table`'s external contract for the parts a host / mrd-layout-
2846
+ * section already knows how to drive — `init()`, `setPage()`, the `mrdLoadPage`
2847
+ * event shape `{ page, sort, path, qs }` — so no new host-side wiring is needed
2848
+ * to feed it data.
2849
+ * There is no separate memo detail page: clicking a card opens mrd-memo-
2850
+ * container's quick-edit dialog directly (mrdEdit), the same dialog "New memo"
2851
+ * uses for creation.
2852
+ */
2853
+ interface MrdMemoList {
2854
+ /**
2855
+ * Resolved `commons.memo` archetype binding.
2856
+ */
2857
+ "archetype": ClientArchetype;
2858
+ /**
2859
+ * The VIEW or RELATED_VIEW layout item (dataClass, fromClass, view config).
2860
+ * @default null
2861
+ */
2862
+ "item"?: ClientLayoutItem | null;
2863
+ /**
2864
+ * listItems of the FIELD bound to the `labels` slot, resolved by mrd-layout-section from its own items array, same reason mrd-memo-view needs it.
2865
+ * @default null
2866
+ */
2867
+ "labelsListItems"?: ClientListValue[] | null;
2868
+ /**
2869
+ * @default navigator.language
2870
+ */
2871
+ "locale"?: string;
2872
+ /**
2873
+ * A card was clicked (and not read-only). mrd-memo-container opens its quick- edit dialog pre-filled from `row` — no navigation, no detail page.
2874
+ */
2875
+ "onMrdEdit"?: (event: MrdMemoListCustomEvent<{ row: Record<string, unknown> }>) => void;
2876
+ /**
2877
+ * Fired when a page needs fetching; same shape as mrd-table's mrdLoadPage minus `qs`'s column-filter support (cards have no filter UI) — host calls setPage() with the result.
2878
+ */
2879
+ "onMrdLoadPage"?: (event: MrdMemoListCustomEvent<{ page: number; sort: string; path: string; qs: string }>) => void;
2880
+ /**
2881
+ * The container link on a card was clicked — this is real navigation (to the container record), unrelated to mrdEdit.
2882
+ */
2883
+ "onMrdNavigate"?: (event: MrdMemoListCustomEvent<{ href?: string; label: string }>) => void;
2884
+ /**
2885
+ * Records per page (must match API page size).
2886
+ * @default 20
2887
+ */
2888
+ "pageSize"?: number;
2889
+ /**
2890
+ * Parent record id — required for RELATED_VIEW path building.
2891
+ * @default ''
2892
+ */
2893
+ "parentId"?: string;
2894
+ /**
2895
+ * When true, cards are not clickable (no mrdEdit) — matches mrd-table's own readOnly gating on its create action.
2896
+ * @default false
2897
+ */
2898
+ "readOnly"?: boolean;
2899
+ /**
2900
+ * False when the list is already scoped to its own container (a company's own memo tab) — showing "belongs to: <this same company>" on every card there would be redundant. True everywhere else (top-level VIEW, or a RELATED_VIEW scoped by a different relation, e.g. a person's authored-memos list).
2901
+ * @default true
2902
+ */
2903
+ "showContainerLink"?: boolean;
2904
+ }
2905
+ /**
2906
+ * Archetype-driven single-memo view. Given a `commons.memo` binding and a data
2907
+ * record, renders the memo the way a note should read: the title and body are
2908
+ * the prominent content, author and timestamp sit below as a subtle metadata
2909
+ * line — not the other way around.
2910
+ */
2911
+ interface MrdMemoView {
2912
+ /**
2913
+ * Resolved `commons.memo` binding: slot name → concrete field/relation name.
2914
+ */
2915
+ "archetype": ClientArchetype;
2916
+ /**
2917
+ * The data record from the /data endpoint. Fields keyed by name; relations under `_links`.
2918
+ * @default {}
2919
+ */
2920
+ "data"?: Record<string, unknown>;
2921
+ /**
2922
+ * listItems of the FIELD bound to the `labels` slot, resolved by mrd-layout-section from its own items array (archetype metadata does not publish listItems), so the label badges get a real label/color instead of the raw stored key.
2923
+ * @default null
2924
+ */
2925
+ "labelsListItems"?: ClientListValue[] | null;
2926
+ /**
2927
+ * @default navigator.language
2928
+ */
2929
+ "locale"?: string;
2930
+ /**
2931
+ * Navigate to the author or the container. Host resolves the href and routes.
2932
+ */
2933
+ "onMrdNavigate"?: (event: MrdMemoViewCustomEvent<{ href?: string; label: string }>) => void;
2934
+ }
2433
2935
  /**
2434
2936
  * Merges two DataObjects of the same basic type (FINDING-0114 / TASK-0177).
2435
2937
  * Never performs network I/O itself: it emits `mrdSearch` (host searches and
@@ -2712,6 +3214,11 @@ declare namespace LocalJSX {
2712
3214
  "value"?: string;
2713
3215
  }
2714
3216
  interface MrdTextareaField {
3217
+ /**
3218
+ * Focus the editor as soon as it's ready — opt-in, since auto-focusing every textarea field on mount would be wrong for a regular multi-field form.
3219
+ * @default false
3220
+ */
3221
+ "autofocus"?: boolean;
2715
3222
  /**
2716
3223
  * @default false
2717
3224
  */
@@ -2850,6 +3357,7 @@ declare namespace LocalJSX {
2850
3357
  "referenceHref": string;
2851
3358
  "referenceClass": string;
2852
3359
  "showCancel": boolean;
3360
+ "showDelete": boolean;
2853
3361
  }
2854
3362
  interface MrdHyperlinkFieldAttributes {
2855
3363
  "name": string;
@@ -2895,6 +3403,25 @@ declare namespace LocalJSX {
2895
3403
  "disabled": boolean;
2896
3404
  "locale": string;
2897
3405
  }
3406
+ interface MrdMemoContainerAttributes {
3407
+ "parentId": string;
3408
+ "containerHref": string;
3409
+ "containerRelated": boolean;
3410
+ "showContainerLink": boolean;
3411
+ "viewKey": string;
3412
+ "locale": string;
3413
+ "readOnly": boolean;
3414
+ }
3415
+ interface MrdMemoListAttributes {
3416
+ "parentId": string;
3417
+ "pageSize": number;
3418
+ "locale": string;
3419
+ "readOnly": boolean;
3420
+ "showContainerLink": boolean;
3421
+ }
3422
+ interface MrdMemoViewAttributes {
3423
+ "locale": string;
3424
+ }
2898
3425
  interface MrdMergeViewAttributes {
2899
3426
  "locale": string;
2900
3427
  "basicType": string;
@@ -2963,6 +3490,7 @@ declare namespace LocalJSX {
2963
3490
  "required": boolean;
2964
3491
  "disabled": boolean;
2965
3492
  "locale": string;
3493
+ "autofocus": boolean;
2966
3494
  }
2967
3495
  interface MrdTimeFieldAttributes {
2968
3496
  "name": string;
@@ -2992,6 +3520,9 @@ declare namespace LocalJSX {
2992
3520
  "mrd-layout-section": Omit<MrdLayoutSection, keyof MrdLayoutSectionAttributes> & { [K in keyof MrdLayoutSection & keyof MrdLayoutSectionAttributes]?: MrdLayoutSection[K] } & { [K in keyof MrdLayoutSection & keyof MrdLayoutSectionAttributes as `attr:${K}`]?: MrdLayoutSectionAttributes[K] } & { [K in keyof MrdLayoutSection & keyof MrdLayoutSectionAttributes as `prop:${K}`]?: MrdLayoutSection[K] };
2993
3521
  "mrd-list-field": Omit<MrdListField, keyof MrdListFieldAttributes> & { [K in keyof MrdListField & keyof MrdListFieldAttributes]?: MrdListField[K] } & { [K in keyof MrdListField & keyof MrdListFieldAttributes as `attr:${K}`]?: MrdListFieldAttributes[K] } & { [K in keyof MrdListField & keyof MrdListFieldAttributes as `prop:${K}`]?: MrdListField[K] };
2994
3522
  "mrd-longtext-field": Omit<MrdLongtextField, keyof MrdLongtextFieldAttributes> & { [K in keyof MrdLongtextField & keyof MrdLongtextFieldAttributes]?: MrdLongtextField[K] } & { [K in keyof MrdLongtextField & keyof MrdLongtextFieldAttributes as `attr:${K}`]?: MrdLongtextFieldAttributes[K] } & { [K in keyof MrdLongtextField & keyof MrdLongtextFieldAttributes as `prop:${K}`]?: MrdLongtextField[K] };
3523
+ "mrd-memo-container": Omit<MrdMemoContainer, keyof MrdMemoContainerAttributes> & { [K in keyof MrdMemoContainer & keyof MrdMemoContainerAttributes]?: MrdMemoContainer[K] } & { [K in keyof MrdMemoContainer & keyof MrdMemoContainerAttributes as `attr:${K}`]?: MrdMemoContainerAttributes[K] } & { [K in keyof MrdMemoContainer & keyof MrdMemoContainerAttributes as `prop:${K}`]?: MrdMemoContainer[K] };
3524
+ "mrd-memo-list": Omit<MrdMemoList, keyof MrdMemoListAttributes> & { [K in keyof MrdMemoList & keyof MrdMemoListAttributes]?: MrdMemoList[K] } & { [K in keyof MrdMemoList & keyof MrdMemoListAttributes as `attr:${K}`]?: MrdMemoListAttributes[K] } & { [K in keyof MrdMemoList & keyof MrdMemoListAttributes as `prop:${K}`]?: MrdMemoList[K] };
3525
+ "mrd-memo-view": Omit<MrdMemoView, keyof MrdMemoViewAttributes> & { [K in keyof MrdMemoView & keyof MrdMemoViewAttributes]?: MrdMemoView[K] } & { [K in keyof MrdMemoView & keyof MrdMemoViewAttributes as `attr:${K}`]?: MrdMemoViewAttributes[K] } & { [K in keyof MrdMemoView & keyof MrdMemoViewAttributes as `prop:${K}`]?: MrdMemoView[K] };
2995
3526
  "mrd-merge-view": Omit<MrdMergeView, keyof MrdMergeViewAttributes> & { [K in keyof MrdMergeView & keyof MrdMergeViewAttributes]?: MrdMergeView[K] } & { [K in keyof MrdMergeView & keyof MrdMergeViewAttributes as `attr:${K}`]?: MrdMergeViewAttributes[K] } & { [K in keyof MrdMergeView & keyof MrdMergeViewAttributes as `prop:${K}`]?: MrdMergeView[K] };
2996
3527
  "mrd-number-field": Omit<MrdNumberField, keyof MrdNumberFieldAttributes> & { [K in keyof MrdNumberField & keyof MrdNumberFieldAttributes]?: MrdNumberField[K] } & { [K in keyof MrdNumberField & keyof MrdNumberFieldAttributes as `attr:${K}`]?: MrdNumberFieldAttributes[K] } & { [K in keyof MrdNumberField & keyof MrdNumberFieldAttributes as `prop:${K}`]?: MrdNumberField[K] };
2997
3528
  "mrd-relation-field": Omit<MrdRelationField, keyof MrdRelationFieldAttributes> & { [K in keyof MrdRelationField & keyof MrdRelationFieldAttributes]?: MrdRelationField[K] } & { [K in keyof MrdRelationField & keyof MrdRelationFieldAttributes as `attr:${K}`]?: MrdRelationFieldAttributes[K] } & { [K in keyof MrdRelationField & keyof MrdRelationFieldAttributes as `prop:${K}`]?: MrdRelationField[K] };
@@ -3090,6 +3621,45 @@ declare module "@stencil/core" {
3090
3621
  "mrd-layout-section": LocalJSX.IntrinsicElements["mrd-layout-section"] & JSXBase.HTMLAttributes<HTMLMrdLayoutSectionElement>;
3091
3622
  "mrd-list-field": LocalJSX.IntrinsicElements["mrd-list-field"] & JSXBase.HTMLAttributes<HTMLMrdListFieldElement>;
3092
3623
  "mrd-longtext-field": LocalJSX.IntrinsicElements["mrd-longtext-field"] & JSXBase.HTMLAttributes<HTMLMrdLongtextFieldElement>;
3624
+ /**
3625
+ * Owns a memo collection view: a single toolbar (view switch + "New memo") plus
3626
+ * the two interchangeable bodies — the card list (`mrd-memo-list`) and the flat
3627
+ * table (`mrd-table`). Mirrors `mrd-document-container`'s structure.
3628
+ * There is no memo detail page: both "New memo" and clicking an existing memo
3629
+ * (card or table row) open the same small dialog — just the fields a person
3630
+ * actually fills in (body, and only the optional slots the archetype actually
3631
+ * maps: title/labels/important). date/author/container are already known
3632
+ * context and never shown. Create emits `mrdCreateObject` (same contract
3633
+ * mrd-document-list already uses for its inline file-drop create); editing an
3634
+ * existing memo emits `mrdUpdateObject` (same generic PATCH contract used
3635
+ * elsewhere, e.g. mrd-document-list's drag-move) and optimistically patches the
3636
+ * displayed row/card itself, since that PATCH is fire-and-forget on the host.
3637
+ * `mrd-layout-section` renders one of these per memo VIEW / RELATED_VIEW and
3638
+ * forwards the re-emitted load/action/create/update events to the host.
3639
+ */
3640
+ "mrd-memo-container": LocalJSX.IntrinsicElements["mrd-memo-container"] & JSXBase.HTMLAttributes<HTMLMrdMemoContainerElement>;
3641
+ /**
3642
+ * Card-view body for a `commons.memo` collection — the alternative to the flat
3643
+ * `mrd-table` a `mrd-memo-container` can switch to. Deliberately simpler than
3644
+ * `mrd-table`'s virtual-scroll internals: memo cards accumulate via a plain
3645
+ * "load more" affordance rather than windowed rendering, since a bounded card
3646
+ * list of notes doesn't need that complexity.
3647
+ * Mirrors `mrd-table`'s external contract for the parts a host / mrd-layout-
3648
+ * section already knows how to drive — `init()`, `setPage()`, the `mrdLoadPage`
3649
+ * event shape `{ page, sort, path, qs }` — so no new host-side wiring is needed
3650
+ * to feed it data.
3651
+ * There is no separate memo detail page: clicking a card opens mrd-memo-
3652
+ * container's quick-edit dialog directly (mrdEdit), the same dialog "New memo"
3653
+ * uses for creation.
3654
+ */
3655
+ "mrd-memo-list": LocalJSX.IntrinsicElements["mrd-memo-list"] & JSXBase.HTMLAttributes<HTMLMrdMemoListElement>;
3656
+ /**
3657
+ * Archetype-driven single-memo view. Given a `commons.memo` binding and a data
3658
+ * record, renders the memo the way a note should read: the title and body are
3659
+ * the prominent content, author and timestamp sit below as a subtle metadata
3660
+ * line — not the other way around.
3661
+ */
3662
+ "mrd-memo-view": LocalJSX.IntrinsicElements["mrd-memo-view"] & JSXBase.HTMLAttributes<HTMLMrdMemoViewElement>;
3093
3663
  /**
3094
3664
  * Merges two DataObjects of the same basic type (FINDING-0114 / TASK-0177).
3095
3665
  * Never performs network I/O itself: it emits `mrdSearch` (host searches and