@object-ui/plugin-detail 17.7.0 → 18.0.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 (57) hide show
  1. package/CHANGELOG.md +1014 -0
  2. package/README.md +153 -0
  3. package/dist/CommentAuthorControls.d.ts +40 -0
  4. package/dist/CommentAuthorControls.d.ts.map +1 -0
  5. package/dist/ConcurrentUpdateDialog.d.ts +1 -2
  6. package/dist/ConcurrentUpdateDialog.d.ts.map +1 -1
  7. package/dist/DetailSection.d.ts.map +1 -1
  8. package/dist/DetailSectionNode.d.ts +2 -2
  9. package/dist/DetailView.d.ts +13 -0
  10. package/dist/DetailView.d.ts.map +1 -1
  11. package/dist/HeaderHighlight.d.ts.map +1 -1
  12. package/dist/HistoryTimeline.d.ts +13 -3
  13. package/dist/HistoryTimeline.d.ts.map +1 -1
  14. package/dist/InlineEditSaveBar.d.ts.map +1 -1
  15. package/dist/InlineFieldInput.d.ts +1 -1
  16. package/dist/InlineFieldInput.d.ts.map +1 -1
  17. package/dist/RecordActivityTimeline.d.ts +13 -0
  18. package/dist/RecordActivityTimeline.d.ts.map +1 -1
  19. package/dist/RecordChatterPanel.d.ts +4 -0
  20. package/dist/RecordChatterPanel.d.ts.map +1 -1
  21. package/dist/RecordDetailPanel.d.ts.map +1 -1
  22. package/dist/RelatedList.d.ts.map +1 -1
  23. package/dist/ThreadedReplies.d.ts +8 -0
  24. package/dist/ThreadedReplies.d.ts.map +1 -1
  25. package/dist/fieldEnrichment.d.ts +3 -2
  26. package/dist/fieldEnrichment.d.ts.map +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +2509 -1931
  29. package/dist/index.umd.cjs +2 -2
  30. package/dist/recordPageProvenance.d.ts +39 -0
  31. package/dist/recordPageProvenance.d.ts.map +1 -0
  32. package/dist/renderers/record-activity.d.ts.map +1 -1
  33. package/dist/renderers/record-alert.d.ts.map +1 -1
  34. package/dist/renderers/record-chatter.d.ts.map +1 -1
  35. package/dist/renderers/record-details.d.ts +10 -0
  36. package/dist/renderers/record-details.d.ts.map +1 -1
  37. package/dist/renderers/record-highlights.d.ts +10 -0
  38. package/dist/renderers/record-highlights.d.ts.map +1 -1
  39. package/dist/renderers/record-history.d.ts.map +1 -1
  40. package/dist/renderers/record-path.d.ts.map +1 -1
  41. package/dist/renderers/record-quick-actions.d.ts +10 -0
  42. package/dist/renderers/record-quick-actions.d.ts.map +1 -1
  43. package/dist/renderers/record-reference-rail.d.ts.map +1 -1
  44. package/dist/renderers/record-related-list.d.ts +14 -4
  45. package/dist/renderers/record-related-list.d.ts.map +1 -1
  46. package/dist/renderers/recordActivityFeed.d.ts +69 -11
  47. package/dist/renderers/recordActivityFeed.d.ts.map +1 -1
  48. package/dist/renderers/recordBinding.d.ts +180 -0
  49. package/dist/renderers/recordBinding.d.ts.map +1 -0
  50. package/dist/synth/buildDefaultPageSchema.d.ts +90 -4
  51. package/dist/synth/buildDefaultPageSchema.d.ts.map +1 -1
  52. package/dist/useDetailTranslation.d.ts.map +1 -1
  53. package/dist/useRecordEditable.d.ts +4 -1
  54. package/dist/useRecordEditable.d.ts.map +1 -1
  55. package/package.json +16 -16
  56. package/dist/renderers/PermissionFacetLink.d.ts +0 -38
  57. package/dist/renderers/PermissionFacetLink.d.ts.map +0 -1
@@ -0,0 +1,39 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import * as React from 'react';
9
+ /**
10
+ * Whether the record PAGE draws a `DetailView`'s provenance footer for it
11
+ * (objectui#12307).
12
+ *
13
+ * A record page shows ONE record, so its `RecordMetaFooter` is the page's and
14
+ * is drawn once, by the page host (app-shell's `RecordDetailView`, and the
15
+ * Studio `PagePreview` that mirrors it), whatever the number of
16
+ * `record:details` nodes the page carries. Before this, every `DetailView`
17
+ * mounted its own: a page with two `record:details` nodes printed the same
18
+ * line twice, and a node whose sections were all hidden drew a block holding
19
+ * nothing but that line.
20
+ *
21
+ * `record:details` provides `true` around the one `DetailView` it mounts when
22
+ * the node reads the page's record, i.e. when it carries no `dataSource`
23
+ * binding (`renderers/record-details.tsx`). Everything else reads the default,
24
+ * `false`, and keeps its footer:
25
+ *
26
+ * - a standalone `DetailView` (the `detail-view` node, the record drawer and
27
+ * overlay panel, a direct React caller) has no page to draw it for it;
28
+ * - a BOUND `record:details` shows the first row of its own query, a record
29
+ * the page does not show, so the page's footer is not that record's.
30
+ *
31
+ * ⛔ Module-internal on purpose: not re-exported from the package barrel, and
32
+ * neither a `DetailView` prop nor a `DetailViewSchema` key. Where the footer
33
+ * sits is the renderer's placement, not something a page authors (the triage
34
+ * on objectui#12307 ruled out a prop and a spec key for it). It lives in its
35
+ * own module, not in `DetailView.tsx`, so that file keeps exporting
36
+ * components only.
37
+ */
38
+ export declare const RecordPageProvenanceContext: React.Context<boolean>;
39
+ //# sourceMappingURL=recordPageProvenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordPageProvenance.d.ts","sourceRoot":"","sources":["../src/recordPageProvenance.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,2BAA2B,wBAAsC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"record-activity.d.ts","sourceRoot":"","sources":["../../src/renderers/record-activity.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,QAAQ,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AA2B/E,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE,4BAA4B,GAAG;QACtC;oEAC4D;QAC5D,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;QACnB,uDAAuD;QACvD,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CA+MxE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"record-activity.d.ts","sourceRoot":"","sources":["../../src/renderers/record-activity.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,QAAQ,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AA2B/E,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE,4BAA4B,GAAG;QACtC;oEAC4D;QAC5D,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;QACnB,uDAAuD;QACvD,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAuNxE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"record-alert.d.ts","sourceRoot":"","sources":["../../src/renderers/record-alert.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8EG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAuB/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,KAAK,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,UAAU,wBAAwB;IAChC,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE;YACX,QAAQ,CAAC,EAAE,QAAQ,CAAC;YACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YAC1B,OAAO,CAAC,EAAE,GAAG,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE;gBAAE,UAAU,EAAE,MAAM,CAAC;gBAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;gBAAC,OAAO,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;YAC9E,WAAW,CAAC,EAAE,OAAO,CAAC;YACtB,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;QAEF,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9E,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAwBD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA6KlE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"record-alert.d.ts","sourceRoot":"","sources":["../../src/renderers/record-alert.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8EG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAuB/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,KAAK,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,UAAU,wBAAwB;IAChC,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE;YACX,QAAQ,CAAC,EAAE,QAAQ,CAAC;YACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YAC1B,OAAO,CAAC,EAAE,GAAG,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE;gBAAE,UAAU,EAAE,MAAM,CAAC;gBAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;gBAAC,OAAO,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;YAC9E,WAAW,CAAC,EAAE,OAAO,CAAC;YACtB,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;QAEF,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,OAAO,CAAC,EAAE,GAAG,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9E,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAwBD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAgLlE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"record-chatter.d.ts","sourceRoot":"","sources":["../../src/renderers/record-chatter.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAA0C,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAW5G,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,2BAA2B,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAiLtE,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"record-chatter.d.ts","sourceRoot":"","sources":["../../src/renderers/record-chatter.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAA0C,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAW5G,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,2BAA2B,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAqLtE,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -7,6 +7,16 @@ export interface RecordDetailsRendererProps {
7
7
  className?: string;
8
8
  [k: string]: any;
9
9
  }
10
+ /**
11
+ * `record:details` with the spec's per-element `dataSource` binding honoured
12
+ * (objectui#12294). Unbound, the body reads the record page's record exactly as
13
+ * before; bound, it reads the FIRST row of the bound set. `recordBindingBlock`
14
+ * (`./recordBinding`, which states the semantics) wraps the body in the gate and
15
+ * the one-record scope, and passes the result through the declaration seam.
16
+ *
17
+ * Wraps the EXPORTED name, as `record:related_list` does, so a host that
18
+ * imports this renderer directly gets the binding too.
19
+ */
10
20
  export declare const RecordDetailsRenderer: React.FC<RecordDetailsRendererProps>;
11
21
  export default RecordDetailsRenderer;
12
22
  //# sourceMappingURL=record-details.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record-details.d.ts","sourceRoot":"","sources":["../../src/renderers/record-details.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAkGpE,+EAA+E;AAC/E,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,2BAA2B,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAouBtE,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"record-details.d.ts","sourceRoot":"","sources":["../../src/renderers/record-details.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AA0GpE,+EAA+E;AAC/E,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD;AAmND,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,2BAA2B,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AA41BD;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAA2D,CAAC;AAEnI,eAAe,qBAAqB,CAAC"}
@@ -5,6 +5,16 @@ export interface RecordHighlightsRendererProps {
5
5
  className?: string;
6
6
  [k: string]: any;
7
7
  }
8
+ /**
9
+ * `record:highlights` with the spec's per-element `dataSource` binding honoured
10
+ * (objectui#12294). Unbound, the body reads the record page's record exactly as
11
+ * before; bound, it reads the FIRST row of the bound set. `recordBindingBlock`
12
+ * (`./recordBinding`, which states the semantics) wraps the body in the gate and
13
+ * the one-record scope, and passes the result through the declaration seam.
14
+ *
15
+ * Wraps the EXPORTED name, as `record:related_list` does, so a host that
16
+ * imports this renderer directly gets the binding too.
17
+ */
8
18
  export declare const RecordHighlightsRenderer: React.FC<RecordHighlightsRendererProps>;
9
19
  export default RecordHighlightsRenderer;
10
20
  //# sourceMappingURL=record-highlights.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record-highlights.d.ts","sourceRoot":"","sources":["../../src/renderers/record-highlights.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AASvE,MAAM,WAAW,6BAA6B;IAC5C,MAAM,CAAC,EAAE,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CA2J5E,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"record-highlights.d.ts","sourceRoot":"","sources":["../../src/renderers/record-highlights.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAUvE,MAAM,WAAW,6BAA6B;IAC5C,MAAM,CAAC,EAAE,8BAA8B,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AA+JD;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAAiE,CAAC;AAE/I,eAAe,wBAAwB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"record-history.d.ts","sourceRoot":"","sources":["../../src/renderers/record-history.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOxE,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAuFD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAsFtE,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"record-history.d.ts","sourceRoot":"","sources":["../../src/renderers/record-history.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQxE,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAsGD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CA8FtE,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"record-path.d.ts","sourceRoot":"","sources":["../../src/renderers/record-path.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAmDjE,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAoXhE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"record-path.d.ts","sourceRoot":"","sources":["../../src/renderers/record-path.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAmDjE,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAkYhE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -34,6 +34,16 @@ export interface RecordQuickActionsRendererProps {
34
34
  className?: string;
35
35
  [k: string]: any;
36
36
  }
37
+ /**
38
+ * `record:quick_actions` with the spec's per-element `dataSource` binding honoured
39
+ * (objectui#12294). Unbound, the body reads the record page's record exactly as
40
+ * before; bound, it reads the FIRST row of the bound set. `recordBindingBlock`
41
+ * (`./recordBinding`, which states the semantics) wraps the body in the gate and
42
+ * the one-record scope, and passes the result through the declaration seam.
43
+ *
44
+ * Wraps the EXPORTED name, as `record:related_list` does, so a host that
45
+ * imports this renderer directly gets the binding too.
46
+ */
37
47
  export declare const RecordQuickActionsRenderer: React.FC<RecordQuickActionsRendererProps>;
38
48
  export default RecordQuickActionsRenderer;
39
49
  //# sourceMappingURL=record-quick-actions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record-quick-actions.d.ts","sourceRoot":"","sources":["../../src/renderers/record-quick-actions.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjE,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA4CpF,MAAM,WAAW,+BAA+B;IAC9C,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;QACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;QAC1B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;QAC/B,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,CAAC;QACjF;;;;;;;;;;;;;;;;;WAiBG;QACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CAwOhF,CAAC;AAsDF,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"record-quick-actions.d.ts","sourceRoot":"","sources":["../../src/renderers/record-quick-actions.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjE,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAkEpF,MAAM,WAAW,+BAA+B;IAC9C,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;QACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;QAC1B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;QAC/B,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,CAAC;QACjF;;;;;;;;;;;;;;;;;WAiBG;QACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAkYD;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CAAsE,CAAC;AAExJ,eAAe,0BAA0B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"record-reference-rail.d.ts","sourceRoot":"","sources":["../../src/renderers/record-reference-rail.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAU/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO/D,MAAM,WAAW,gCAAgC;IAC/C,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;WA2BG;QACH,UAAU,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAA;SAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AASD;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AA4F9C,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CAoYlF,CAAC;AAEF,eAAe,2BAA2B,CAAC"}
1
+ {"version":3,"file":"record-reference-rail.d.ts","sourceRoot":"","sources":["../../src/renderers/record-reference-rail.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAU/D,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO/D,MAAM,WAAW,gCAAgC;IAC/C,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;WA2BG;QACH,UAAU,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAA;SAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AASD;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AA6H9C,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CA6elF,CAAC;AAEF,eAAe,2BAA2B,CAAC"}
@@ -59,11 +59,21 @@ export interface RecordRelatedListRendererProps {
59
59
  'data-obj-type'?: string;
60
60
  }
61
61
  /**
62
- * `record:related_list` with the spec's per-element `dataSource` binding mapped
63
- * onto the keys the body reads (objectstack#6953).
62
+ * `record:related_list`, with its TWO bindings (ruling B on objectui#12296):
64
63
  *
65
- * The gate wraps the EXPORTED name rather than being added at the registration
66
- * site, so a host that imports this renderer directly gets the binding too — a
64
+ * - the PARENT record — `parentDataSource`, the spec row's member, read by
65
+ * {@link ParentRecordBinding}: the first row of the binding by its `sort`
66
+ * becomes the record context the body reads, and no row is a loud absence.
67
+ * Absent, the parent is the record page's record context, as it always was;
68
+ * - the CHILD rows — the node's `dataSource`, mapped onto the keys the body
69
+ * reads by {@link RecordRelatedListChildRows}. It keeps its published
70
+ * meaning and is never read as the parent.
71
+ *
72
+ * The parent scope sits OUTSIDE the child gate because the child gate and the
73
+ * body read the parent's record context (its id, its row, its adapter).
74
+ *
75
+ * The gates wrap the EXPORTED name rather than being added at the registration
76
+ * site, so a host that imports this renderer directly gets both bindings too — a
67
77
  * block bound under one entry point and unbound under another is the same
68
78
  * "declared but not reached" shape in miniature.
69
79
  */
@@ -1 +1 @@
1
- {"version":3,"file":"record-related-list.d.ts","sourceRoot":"","sources":["../../src/renderers/record-related-list.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AA+DxE,MAAM,WAAW,8BAA8B;IAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC,+BAA+B,EAAE,YAAY,CAAC,GAC1D,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,YAAY,CAAC,CAAC,GAAG;QAC7D;;;;;WAKG;QACH,UAAU,CAAC,EAAE,uBAAuB,CAAC;KACtC,CAAC;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAkcD;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,8BAA8B,CAiB7E,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"record-related-list.d.ts","sourceRoot":"","sources":["../../src/renderers/record-related-list.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kBAAkB,CAAC;AAgGxE,MAAM,WAAW,8BAA8B;IAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC,+BAA+B,EAAE,YAAY,CAAC,GAC1D,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,YAAY,CAAC,CAAC,GAAG;QAC7D;;;;;WAKG;QACH,UAAU,CAAC,EAAE,uBAAuB,CAAC;KACtC,CAAC;IACJ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAylBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,8BAA8B,CAkB7E,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
@@ -39,22 +39,28 @@ export declare const DEFAULT_ACTIVITY_LIMIT = 20;
39
39
  * ADR-0052 §5b.2 `activityMilestones[].type` is applied verbatim by
40
40
  * plugin-audit's `audit-writers.ts` (`if (milestone.type) activityType =
41
41
  * milestone.type`). That is how `completed` is produced, and it is a general
42
- * door, not a special case.
42
+ * door, not a special case. A row that door wrote also carries
43
+ * `metadata.kind: 'milestone'`, and the mapper overrides this table's
44
+ * `completed` entry for it: see {@link MILESTONE_ACTIVITY_FEED_TYPE}
45
+ * (objectui#12106).
43
46
  *
44
47
  * So `scheduled` is a value that is written, stored and queryable while being
45
48
  * undeclared upstream. Dropping it was not a decision this map made; it was the
46
- * absence of one. Its producer is HotCRM's `schedule_meeting` action
47
- * (`src/actions/global.actions.ts` — `type: EVENT_STATUS === 'held' ?
48
- * 'completed' : 'scheduled'`), registered for `crm_lead`, `crm_contact`,
49
- * `crm_account`, `crm_opportunity` and `crm_case`: the held branch reached the
50
- * timeline, the scheduled branch never did.
49
+ * absence of one. Its producer is HotCRM's activity-action factory
50
+ * (`src/sales/actions/activity-actions.ts`, once `src/actions/global.actions.ts`
51
+ * — `type: EVENT_STATUS === 'held' ? 'completed' : 'scheduled'`), which builds
52
+ * `log_call`, `log_meeting` and `schedule_meeting` for `crm_lead`,
53
+ * `crm_contact`, `crm_account`, `crm_opportunity` and `crm_case`: the held
54
+ * branch reached the timeline, the scheduled branch never did.
51
55
  *
52
56
  * `scheduled` → `event` is the semantic pairing and it is what makes the
53
- * declared `event` feed type reachable at all. Note the two branches of that
54
- * one producer now land at different DEFAULT visibility, which is the intended
55
- * reading: a held meeting is `completed` → `task`, hidden unless
56
- * `showCompleted`; a not-yet-held meeting is `scheduled` → `event`, shown,
57
- * because an upcoming meeting is the part of a timeline you still act on.
57
+ * declared `event` feed type reachable at all. Both branches of that producer
58
+ * show by default: a not-yet-held meeting is `scheduled` → `event`, because an
59
+ * upcoming meeting is the part of a timeline you still act on; a held one is
60
+ * `completed` → `task`, and shows because it is a LOGGED INTERACTION, a `task`
61
+ * item that points at the record it was logged as (objectui#12228, see
62
+ * {@link isLoggedInteraction}). Until objectui#12228 the held branch was hidden
63
+ * unless `showCompleted`.
58
64
  *
59
65
  * ## The vocabulary is OPEN — ruled. Do NOT restore set-equality.
60
66
  *
@@ -110,6 +116,31 @@ export declare const ACTIVITY_TYPE_TO_FEED_TYPE: Readonly<Record<string, FeedIte
110
116
  * names each one so somebody can.
111
117
  */
112
118
  export declare const UNMAPPED_ACTIVITY_FEED_TYPE: FeedItemType;
119
+ /**
120
+ * The feed type a milestone row renders as when its `type` would otherwise land
121
+ * on a feed type `showCompleted` hides (objectui#12106).
122
+ *
123
+ * Today that is a `completed` row that a milestone fired, such as "Case
124
+ * resolved", or a task's own "Task completed" on that task's page. Triage
125
+ * ruled route B: a milestone is not a completed activity, so it shows whatever
126
+ * `showCompleted` says. `showCompleted` keeps its spec meaning ("Include
127
+ * completed activities") for every row without the marker.
128
+ *
129
+ * `system`, not `task` with an exemption, because every other reader of the
130
+ * feed type then stays right with no new member on `FeedItem`:
131
+ *
132
+ * - `filterMode: 'tasks_only'` and `types: ['task']` keep meaning tasks. A
133
+ * case milestone is not one.
134
+ * - {@link COMPLETED_FEED_TYPES} stays exact: `task` is still produced only by
135
+ * completed activities.
136
+ * - The icon and colour are the ones every other author-typed milestone
137
+ * already gets (`escalated` reaches `system` through
138
+ * {@link UNMAPPED_ACTIVITY_FEED_TYPE}), and the ones app-shell's
139
+ * `ActivityItem` surface gives `completed`.
140
+ * - A host feed arrives already mapped, so the rule needs nothing carried
141
+ * past this module.
142
+ */
143
+ export declare const MILESTONE_ACTIVITY_FEED_TYPE: FeedItemType;
113
144
  /**
114
145
  * Feed kinds an ObjectUI surface produces WITHOUT going through
115
146
  * {@link ACTIVITY_TYPE_TO_FEED_TYPE}.
@@ -338,6 +369,27 @@ export declare function describeRefusedFeedLimit(block: string, authored: unknow
338
369
  export declare function activityTimestamp(row: SysActivityRow): string;
339
370
  /** Test seam: forget which unknown types have already been warned about. */
340
371
  export declare function resetUnknownActivityTypeWarnings(): void;
372
+ /**
373
+ * The name of whoever acted on a `sys_activity` row, or `null` when the row
374
+ * names nobody this viewer can name (objectui#12067). One reading for every
375
+ * surface that shows these rows: `record:history`, and through
376
+ * {@link activityRowToFeedItem} the `record:activity` block and the console
377
+ * record page's merged feed.
378
+ *
379
+ * 1. `actor_name`, when it is non-blank. It is the snapshot the writer took at
380
+ * the time of the action, so it wins even over the user's current name.
381
+ * 2. `actor_id`, a lookup to `sys_user`. A read that passes
382
+ * `$expand: ['actor_id']` gets the user's record in place of the id, and
383
+ * that record's `name` (`sys_user`'s declared name field) names the actor.
384
+ * The engine expands every row of a page in one batched read. This is the
385
+ * row the `@objectstack/*` 17.7.0 writer leaves: `actor_id` set and no
386
+ * `actor_name` (objectstack#22510 fills `actor_name` from then on).
387
+ * 3. `null`, so the caller shows its existing fallback. That covers a row
388
+ * with neither, and an `actor_id` the engine kept as the bare id because
389
+ * this viewer may not read that user or the user is gone. A raw id is
390
+ * never shown as a name.
391
+ */
392
+ export declare function activityActorName(row: SysActivityRow): string | null;
341
393
  /**
342
394
  * One `sys_activity` row → one {@link FeedItem}, or `null` when the row is not
343
395
  * record activity (see {@link ACTIVITY_TYPE_TO_FEED_TYPE}).
@@ -354,6 +406,12 @@ export declare function resetUnknownActivityTypeWarnings(): void;
354
406
  * {@link UNMAPPED_ACTIVITY_FEED_TYPE} and says so once. It used to return
355
407
  * `null` here, which made every extended value invisible — the same outcome
356
408
  * objectui#5840 was filed for, reached by a different route.
409
+ *
410
+ * One override sits on top of the first outcome (objectui#12106): a row whose
411
+ * type maps to a feed type `showCompleted` hides, but which carries the
412
+ * milestone marker, renders as {@link MILESTONE_ACTIVITY_FEED_TYPE}. A
413
+ * milestone is not a completed activity. A row without the marker is mapped
414
+ * exactly as before.
357
415
  */
358
416
  export declare function activityRowToFeedItem(row: SysActivityRow, systemActorLabel: string): FeedItem | null;
359
417
  /** The subset of `RecordActivityProps` that decides which items survive. */
@@ -1 +1 @@
1
- {"version":3,"file":"recordActivityFeed.d.ts","sourceRoot":"","sources":["../../src/renderers/recordActivityFeed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recordActivityFeed.d.ts","sourceRoot":"","sources":["../../src/renderers/recordActivityFeed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ *
8
+ * The ONE-RECORD binding of the record blocks (objectui#12294).
9
+ *
10
+ * `PageComponentSchema.dataSource` is the spec's per-element data binding, and
11
+ * the spec declares it on every page component ("Overrides the page-level
12
+ * object context for this block"). `ElementDataSourceGate` (`@object-ui/react`)
13
+ * honours it for the LIST-shaped blocks by mapping the binding onto keys the
14
+ * block then queries with. The record blocks query nothing: they read the row
15
+ * the record page put in `RecordContextProvider`. So on an `app` page, with no
16
+ * record page around them, `record:details`, `record:highlights` and
17
+ * `record:quick_actions` drew an empty box or "no actions configured" even
18
+ * with a binding that returns one row.
19
+ *
20
+ * This module is the one-record consumer those three share, and
21
+ * {@link recordBindingBlock} is the one way a record block takes it. The gate
22
+ * still resolves the binding (the named view, the AND-combined filter, the
23
+ * sort, and every configuration panel the family draws), so a record block's
24
+ * binding means exactly what it means on a list block. What this adds is the
25
+ * last hop: read the bound set, take its FIRST row, and provide that row
26
+ * through the existing `RecordContextProvider` — so the block bodies are
27
+ * unchanged and there is no second rendering path inside a block.
28
+ *
29
+ * ## Semantics of the bound set (the card's, verbatim in intent)
30
+ *
31
+ * - 0 rows → the block's authored `emptyState` when it declares one (see
32
+ * "The authored empty state" below). Without one, the block is mounted under
33
+ * a record context that names the bound object and NO record, so each block
34
+ * draws what it draws for a record that is not there: `record:details` its
35
+ * "record not found" state, `record:highlights` nothing,
36
+ * `record:quick_actions` its empty bar. A row the caller may not read never
37
+ * comes back from the server, and a read the server refuses outright
38
+ * (`classifyLoadError` → `forbidden`) is treated the same, so "absent" and
39
+ * "not yours to read" are indistinguishable — and the authored empty state
40
+ * is drawn for both.
41
+ * - 1 row → that record.
42
+ * - more than one row → the FIRST by the binding's `sort`. Only one row is
43
+ * ever asked for (`$top: 1`): the first row of the authored `limit` and the
44
+ * first row of a one-row read are the same row under the same `sort`.
45
+ * `objectui validate` warns on a record block whose binding has no
46
+ * `limit: 1`, so an author says which one they mean.
47
+ *
48
+ * The row is read with the adapter the page already uses, so under the
49
+ * caller's identity: nothing here widens what the server serves.
50
+ *
51
+ * ## The authored empty state (objectui#12932)
52
+ *
53
+ * The spec declares `emptyState` on the three bound record blocks
54
+ * (`RecordDetailsProps`, `RecordHighlightsProps`, `RecordQuickActionsProps`;
55
+ * objectstack#24266), the list view's own `EmptyStateSchema` by reference:
56
+ * `{ title, message, icon, link }`. It is drawn on ONE condition, the spec's:
57
+ * the block carries a `dataSource` binding and the settled read answered no
58
+ * row. {@link BoundRecordEmptyState} draws it IN PLACE of the block body, with
59
+ * the pieces `ObjectGrid` draws its authored empty state with —
60
+ * `DataEmptyState`, `resolveIcon` for the `icon`, the spec's own
61
+ * `resolveI18nLabel` for `title` and `message` against the display locale,
62
+ * and the one shared `EmptyStateLink` for `link` — so one key draws one
63
+ * picture on every surface that takes it.
64
+ *
65
+ * It is NOT drawn while the read is in flight (the loading state), for a read
66
+ * that failed (the error panel stays the error panel), for a bound row that is
67
+ * there but leaves the block nothing to show, or on an unbound block: an
68
+ * unbound block reads the record page's record and never reaches this module's
69
+ * read. A block that declares none keeps its own no-record state above.
70
+ *
71
+ * ## The record page path is untouched
72
+ *
73
+ * {@link BoundRecordScope} renders its children AS THEY ARE when the block
74
+ * carries no binding: no provider, no element, no fetch. A record page's own
75
+ * `RecordContextProvider` therefore still reaches the block, byte-identically.
76
+ * With a binding, the binding wins, as the spec says it does: the bound record
77
+ * shadows the page record for this block only.
78
+ *
79
+ * ## Freshness: the data-invalidation bus (objectstack#4444's bar)
80
+ *
81
+ * A fetching record context that does not listen to the bus shows a STALE
82
+ * record that looks correct after a write elsewhere on the page — harder to
83
+ * notice than an empty one. So the read is keyed on `useDataInvalidation` for
84
+ * the bound OBJECT, the same bus `RecordDetailView` keys its record read on.
85
+ * Object-scoped, not row-scoped, because the binding is a query: a write to any
86
+ * row of the object can change which row is first. A refetch replaces the row
87
+ * in place (no remount), and an equal answer is not republished as a new object
88
+ * (AGENTS.md #10).
89
+ *
90
+ * ## What a bound block does NOT join
91
+ *
92
+ * A bound block sits inside the record page's providers when it is placed on a
93
+ * record page, and two of them are about THAT page's record:
94
+ *
95
+ * - the page's inline-edit session (`InlineEditProvider`): a bound
96
+ * `record:details` or `record:highlights` joining it would put the bound
97
+ * record's fields into the page record's draft, and the page's Save bar
98
+ * would write them to the page record. The bound scope mounts a read-only
99
+ * session instead (`canEdit: false`), which is also what an `app` page,
100
+ * with no session at all, already gives these blocks;
101
+ * - the page's highlight-field registry (`HighlightFieldsProvider`): a bound
102
+ * `record:highlights` would otherwise hide fields from the PAGE record's
103
+ * `record:details`. The bound scope gets its own registry.
104
+ *
105
+ * ## The PARENT binding of `record:related_list` ({@link ParentRecordBinding})
106
+ *
107
+ * `record:related_list` is the one record block with two bindings (ruling B on
108
+ * objectui#12296): its node-level `dataSource` is the CHILD rows the list
109
+ * draws (objectstack#6953), and the spec row's `parentDataSource` is the record
110
+ * the list hangs off. The parent binding is read here, by the same one-record
111
+ * read: the same gate, the same first row by `sort`, the same invalidation bus,
112
+ * provided through the same `RecordContextProvider` the related-list body
113
+ * already reads. It differs from the three blocks above in ONE place, and the
114
+ * spec's describe is why: no row is a LOUD ABSENCE drawn in the block's place,
115
+ * never an empty record context — under one the list would query nothing and
116
+ * draw an empty list, which reads as "this record has no related records", a
117
+ * wrong fact in the silent direction.
118
+ */
119
+ import * as React from 'react';
120
+ /**
121
+ * Wrap a record block's body so its `dataSource` binding supplies its record,
122
+ * and declare the key through the seam.
123
+ *
124
+ * The one way a record block takes the binding, so a fourth one cannot take it
125
+ * differently: `ElementDataSourceGate` resolves the binding (and draws the
126
+ * family's panels for an unresolvable view, a refused filter, or no adapter),
127
+ * {@link BoundRecordScope} reads and provides the first row, and
128
+ * `elementDataSourceBlock` makes the registration publish the injected
129
+ * `dataSource` input — from `@object-ui/core`, the import source
130
+ * `check:element-data-source-declaration` holds every call site to.
131
+ *
132
+ * `requiresDataSource` is set for a BOUND block only: a bound block with no
133
+ * adapter has nothing to read its row with, and says so through the family's
134
+ * no-data-source panel. An unbound block is the record page path, left as it was.
135
+ *
136
+ * @param Body The block's renderer, unchanged: it reads `useRecordContext()`.
137
+ * @param blockKey The registry key (`record:details`, …); the panel test ids are
138
+ * derived from it the way `record-related-list` spells its own.
139
+ */
140
+ export declare function recordBindingBlock<RendererProps extends {
141
+ schema?: unknown;
142
+ }>(Body: React.ComponentType<RendererProps>, blockKey: string): React.FC<RendererProps>;
143
+ export interface ParentRecordBindingProps {
144
+ /**
145
+ * The PARENT binding as authored — `record:related_list`'s
146
+ * `parentDataSource`, the spec's `ElementDataSourceSchema` by reference.
147
+ * Anything that is not a binding the gate would resolve (absent included)
148
+ * leaves the children exactly as they are.
149
+ */
150
+ binding: unknown;
151
+ /** The block's registry key, named in the no-adapter panel. */
152
+ blockKey: string;
153
+ /** `data-testid` stem for this scope's states (`<stem>-loading-record`, …). */
154
+ testId: string;
155
+ /** Heading of the panels a binding that cannot be read draws. */
156
+ errorTitle?: string;
157
+ /** What the block draws in its own place when no row answers: the loud absence. */
158
+ absent: React.ReactNode;
159
+ children: React.ReactNode;
160
+ }
161
+ /**
162
+ * The parent record of a block, from a binding of its own (ruling B on
163
+ * objectui#12296, the spec's `RecordRelatedListProps.parentDataSource`).
164
+ *
165
+ * Unbound → the children as they are, so the record page's own context still
166
+ * reaches the block, byte-identically. Bound → the binding is resolved by
167
+ * `ElementDataSourceGate` (a named view, the AND-combined filter, the sort, and
168
+ * the family's panels for a view that does not resolve, a refused filter, or no
169
+ * adapter), its FIRST row is read by {@link BoundRecordProvider} — the one
170
+ * read the three one-record blocks take, keyed on the same invalidation bus —
171
+ * and provided through `RecordContextProvider` as the children's record. No row
172
+ * draws `absent` instead of the children.
173
+ *
174
+ * The gate is handed the parent binding ALONE, as a node's `dataSource`, and
175
+ * never the block's own schema: with the schema, the gate's filter and sort
176
+ * mapping would compose the block's own `filter` and `sort` — the CHILD list's
177
+ * — into the parent's query.
178
+ */
179
+ export declare function ParentRecordBinding({ binding, blockKey, testId, errorTitle, absent, children, }: ParentRecordBindingProps): React.ReactElement;
180
+ //# sourceMappingURL=recordBinding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordBinding.d.ts","sourceRoot":"","sources":["../../src/renderers/recordBinding.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqHG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA+C/B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,SAAS;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3E,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,EACxC,QAAQ,EAAE,MAAM,GACf,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,CA0BzB;AA6FD,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,QAAQ,EACR,MAAM,EACN,UAAU,EACV,MAAM,EACN,QAAQ,GACT,EAAE,wBAAwB,GAAG,KAAK,CAAC,YAAY,CAgC/C"}