@activecollab/components 2.0.367 → 2.0.369

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 (34) hide show
  1. package/dist/cjs/components/StepSequence/StepSequence.js +64 -0
  2. package/dist/cjs/components/StepSequence/StepSequence.js.map +1 -0
  3. package/dist/cjs/components/StepSequence/Styles.js +22 -0
  4. package/dist/cjs/components/StepSequence/Styles.js.map +1 -0
  5. package/dist/cjs/components/StepSequence/index.js +17 -0
  6. package/dist/cjs/components/StepSequence/index.js.map +1 -0
  7. package/dist/cjs/components/index.js +11 -0
  8. package/dist/cjs/components/index.js.map +1 -1
  9. package/dist/cjs/presentation/shared/SourceCodeSection.js +200 -154
  10. package/dist/cjs/presentation/shared/SourceCodeSection.js.map +1 -1
  11. package/dist/esm/components/StepSequence/StepSequence.d.ts +22 -0
  12. package/dist/esm/components/StepSequence/StepSequence.d.ts.map +1 -0
  13. package/dist/esm/components/StepSequence/StepSequence.js +54 -0
  14. package/dist/esm/components/StepSequence/StepSequence.js.map +1 -0
  15. package/dist/esm/components/StepSequence/Styles.d.ts +3 -0
  16. package/dist/esm/components/StepSequence/Styles.d.ts.map +1 -0
  17. package/dist/esm/components/StepSequence/Styles.js +15 -0
  18. package/dist/esm/components/StepSequence/Styles.js.map +1 -0
  19. package/dist/esm/components/StepSequence/index.d.ts +2 -0
  20. package/dist/esm/components/StepSequence/index.d.ts.map +1 -0
  21. package/dist/esm/components/StepSequence/index.js +2 -0
  22. package/dist/esm/components/StepSequence/index.js.map +1 -0
  23. package/dist/esm/components/index.d.ts +1 -0
  24. package/dist/esm/components/index.d.ts.map +1 -1
  25. package/dist/esm/components/index.js +1 -0
  26. package/dist/esm/components/index.js.map +1 -1
  27. package/dist/esm/presentation/shared/SourceCodeSection.d.ts.map +1 -1
  28. package/dist/esm/presentation/shared/SourceCodeSection.js +198 -151
  29. package/dist/esm/presentation/shared/SourceCodeSection.js.map +1 -1
  30. package/dist/index.js +64 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/index.min.js +1 -1
  33. package/dist/index.min.js.map +1 -1
  34. package/package.json +1 -1
@@ -10,14 +10,17 @@ var _LinkBranchOrPullRequestDialog = require("./LinkBranchOrPullRequestDialog");
10
10
  var _LinkingCommandsButton = require("./LinkingCommandsButton");
11
11
  var _RoundAvatar = require("./RoundAvatar");
12
12
  var _tokens = require("./tokens");
13
+ var _AvatarGroup = require("../../components/AvatarGroup");
13
14
  var _Button = require("../../components/Button");
14
15
  var _AddToListButton = require("../../components/Button/AddToListButton");
16
+ var _Chip = require("../../components/Chip");
15
17
  var _Dialog = require("../../components/Dialog");
16
18
  var _IconButton = require("../../components/IconButton");
17
19
  var _Icons = require("../../components/Icons");
20
+ var _StepSequence = require("../../components/StepSequence");
18
21
  var _Tooltip = require("../../components/Tooltip");
19
- var _Trigger = require("../../components/Trigger");
20
22
  var _Typography = require("../../components/Typography");
23
+ var _excluded = ["size", "bg", "initials", "alt"];
21
24
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
25
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
23
26
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
@@ -26,6 +29,8 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
26
29
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
27
30
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
28
31
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
32
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
33
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
29
34
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
30
35
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
31
36
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -59,56 +64,24 @@ var iconColorProps = function iconColorProps(icon) {
59
64
  };
60
65
 
61
66
  /* ================================================================== */
62
- /* Issue markers (open / closed) — small inline glyphs so the */
63
- /* open-vs-closed state reads crisply; they inherit `currentColor`. */
67
+ /* Issue state glyphs (open / closed) — mirror the app's IssueStateIcon */
68
+ /* (`CircleDotIcon` when open, filled `CheckboxBlankTogglerIcon` when */
69
+ /* closed). Kept as a helper so the row lead and the status chip share */
70
+ /* the same glyph. */
64
71
  /* ================================================================== */
65
72
 
66
- var IssueOpenIcon = function IssueOpenIcon(_ref) {
67
- var _ref$width = _ref.width,
68
- width = _ref$width === void 0 ? 16 : _ref$width,
69
- _ref$height = _ref.height,
70
- height = _ref$height === void 0 ? 16 : _ref$height;
71
- return /*#__PURE__*/_react.default.createElement("svg", {
72
- width: width,
73
- height: height,
74
- viewBox: "0 0 16 16",
75
- fill: "none"
76
- }, /*#__PURE__*/_react.default.createElement("circle", {
77
- cx: "8",
78
- cy: "8",
79
- r: "6.4",
80
- stroke: "currentColor",
81
- strokeWidth: "1.6"
82
- }), /*#__PURE__*/_react.default.createElement("circle", {
83
- cx: "8",
84
- cy: "8",
85
- r: "2.2",
86
- fill: "currentColor"
87
- }));
88
- };
89
- var IssueClosedIcon = function IssueClosedIcon(_ref2) {
90
- var _ref2$width = _ref2.width,
91
- width = _ref2$width === void 0 ? 16 : _ref2$width,
92
- _ref2$height = _ref2.height,
93
- height = _ref2$height === void 0 ? 16 : _ref2$height;
94
- return /*#__PURE__*/_react.default.createElement("svg", {
95
- width: width,
96
- height: height,
97
- viewBox: "0 0 16 16",
98
- fill: "none"
99
- }, /*#__PURE__*/_react.default.createElement("circle", {
100
- cx: "8",
101
- cy: "8",
102
- r: "6.4",
103
- stroke: "currentColor",
104
- strokeWidth: "1.6"
105
- }), /*#__PURE__*/_react.default.createElement("path", {
106
- d: "M5.2 8.1l1.9 1.9 3.7-3.9",
107
- stroke: "currentColor",
108
- strokeWidth: "1.6",
109
- strokeLinecap: "round",
110
- strokeLinejoin: "round"
111
- }));
73
+ var IssueStateIcon = function IssueStateIcon(_ref) {
74
+ var closed = _ref.closed,
75
+ _ref$size = _ref.size,
76
+ size = _ref$size === void 0 ? 16 : _ref$size;
77
+ return closed ? /*#__PURE__*/_react.default.createElement(_Icons.CheckboxBlankTogglerIcon, {
78
+ width: size,
79
+ height: size,
80
+ fill: "var(--color-primary)"
81
+ }) : /*#__PURE__*/_react.default.createElement(_Icons.CircleDotIcon, {
82
+ width: size,
83
+ height: size
84
+ });
112
85
  };
113
86
 
114
87
  /* ================================================================== */
@@ -820,9 +793,9 @@ var CODE_ENTRIES = [{
820
793
  /* Spine + history dialog (for branches / pull requests) */
821
794
  /* ================================================================== */
822
795
 
823
- var StageTip = function StageTip(_ref3) {
824
- var name = _ref3.name,
825
- details = _ref3.details;
796
+ var StageTip = function StageTip(_ref2) {
797
+ var name = _ref2.name,
798
+ details = _ref2.details;
826
799
  return /*#__PURE__*/_react.default.createElement("span", {
827
800
  style: {
828
801
  display: "block",
@@ -843,55 +816,35 @@ var StageTip = function StageTip(_ref3) {
843
816
  }, d);
844
817
  }));
845
818
  };
846
- var SpineTrigger = (0, _styledComponents.default)(_Trigger.Trigger).withConfig({
847
- displayName: "SourceCodeSection__SpineTrigger",
819
+ var StyledSpineSequence = (0, _styledComponents.default)(_StepSequence.StepSequence).withConfig({
820
+ displayName: "SourceCodeSection__StyledSpineSequence",
848
821
  componentId: "sc-rvqbh5-0"
849
- })(["display:inline-flex;align-items:center;align-self:center;flex-shrink:0;padding:6px 8px;border-radius:8px;transition:background-color 200ms ease;&:hover{background-color:var(--color-theme-200);}&:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px;}"]);
850
- var StyledSpine = _styledComponents.default.div.withConfig({
851
- displayName: "SourceCodeSection__StyledSpine",
852
- componentId: "sc-rvqbh5-1"
853
- })(["display:flex;align-items:flex-start;.circle{width:22px;height:22px;border-radius:50%;box-sizing:border-box;display:flex;align-items:center;justify-content:center;}.circle.done{background:var(--color-sucess-green);}.circle.progress{background:var(--color-primary);}.circle.failed{background:var(--red-alert);}.circle.todo{background:transparent;border:2px solid var(--color-theme-400);}.dot{border-radius:50%;}.dot-progress{width:7px;height:7px;background:#fff;}.dot-todo{width:6px;height:6px;background:var(--color-theme-500);}.connector{width:13px;height:2px;margin-top:10px;background:var(--color-theme-400);}.connector.on{background:var(--color-sucess-green);}"]);
854
- var Spine = exports.Spine = function Spine(_ref4) {
855
- var items = _ref4.items,
856
- onClick = _ref4.onClick;
857
- return /*#__PURE__*/_react.default.createElement(SpineTrigger, {
858
- type: "button",
822
+ })(["align-self:center;flex-shrink:0;"]);
823
+ var Spine = exports.Spine = function Spine(_ref3) {
824
+ var items = _ref3.items,
825
+ onClick = _ref3.onClick;
826
+ return /*#__PURE__*/_react.default.createElement(StyledSpineSequence, {
827
+ ariaLabel: "Open source code history",
859
828
  onClick: onClick,
860
- "aria-label": "Open source code history"
861
- }, /*#__PURE__*/_react.default.createElement(StyledSpine, null, items.map(function (s, i) {
862
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
863
- key: s.name
864
- }, /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
865
- title: /*#__PURE__*/_react.default.createElement(StageTip, s)
866
- }, /*#__PURE__*/_react.default.createElement("div", {
867
- className: "circle ".concat(s.state)
868
- }, s.state === "done" && /*#__PURE__*/_react.default.createElement(_Icons.CheckIcon, {
869
- fill: "#fff",
870
- width: 14,
871
- height: 14
872
- }), s.state === "failed" && /*#__PURE__*/_react.default.createElement(_Icons.CloseIcon, {
873
- fill: "#fff",
874
- width: 12,
875
- height: 12
876
- }), s.state === "progress" && /*#__PURE__*/_react.default.createElement("span", {
877
- className: "dot dot-progress"
878
- }), s.state === "todo" && /*#__PURE__*/_react.default.createElement("span", {
879
- className: "dot dot-todo"
880
- }))), i < items.length - 1 && /*#__PURE__*/_react.default.createElement("span", {
881
- className: items[i + 1].state !== "todo" ? "connector on" : "connector"
882
- }));
883
- })));
829
+ steps: items.map(function (s) {
830
+ return {
831
+ key: s.name,
832
+ state: s.state,
833
+ tooltip: /*#__PURE__*/_react.default.createElement(StageTip, s)
834
+ };
835
+ })
836
+ });
884
837
  };
885
838
 
886
839
  /* The whole content scrolls together (header + stream + note) once the stream
887
840
  is long — the dialog title bar stays fixed, everything below scrolls. */
888
841
  var StyledHistory = _styledComponents.default.div.withConfig({
889
842
  displayName: "SourceCodeSection__StyledHistory",
890
- componentId: "sc-rvqbh5-2"
843
+ componentId: "sc-rvqbh5-1"
891
844
  })(["font-family:", ";max-height:60vh;overflow-y:auto;padding-right:4px;.hist-header{padding-bottom:20px;margin-bottom:20px;border-bottom:1px solid var(--border-primary);}.hist-name{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}.hist-branches{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:8px;font-size:13px;color:var(--color-theme-600);}.hist-branch{display:inline-flex;align-items:center;gap:4px;}.hist-repo{display:inline-flex;align-items:center;gap:4px;margin-top:6px;font-size:13px;color:var(--color-theme-600);}.sc-chip{display:inline-flex;align-items:center;gap:3px;height:20px;padding:0 8px;border-radius:6px;font-size:11px;font-weight:700;letter-spacing:0.02em;flex-shrink:0;}.sc-chip.done{color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 15%,transparent);}.sc-chip.gone{color:var(--color-theme-900);background:var(--color-theme-200);border:1px solid var(--border-primary);}.sc-chip.fail{color:var(--red-alert);background:color-mix(in srgb,var(--red-alert) 15%,transparent);}.hist-event{display:flex;align-items:center;gap:12px;padding-bottom:20px;}.hist-event:last-child{padding-bottom:0;}.hist-icon{flex-shrink:0;width:22px;height:22px;display:flex;align-items:center;justify-content:center;}.hist-body{flex:1 1 auto;min-width:0;}.hist-title{display:flex;align-items:center;gap:6px;min-width:0;}.hist-title > *:first-child{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.hist-status{flex-shrink:0;display:inline-flex;}.hist-line{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:13px;line-height:1.5;color:var(--color-theme-600);}.hist-meta{flex-shrink:0;align-self:flex-start;text-align:right;white-space:nowrap;}.hist-note{display:flex;align-items:center;gap:6px;margin-top:16px;color:var(--color-theme-500);}.hist-note svg{flex-shrink:0;}"], SANS);
892
- var HistoryDialog = exports.HistoryDialog = function HistoryDialog(_ref5) {
893
- var entry = _ref5.entry,
894
- onClose = _ref5.onClose;
845
+ var HistoryDialog = exports.HistoryDialog = function HistoryDialog(_ref4) {
846
+ var entry = _ref4.entry,
847
+ onClose = _ref4.onClose;
895
848
  return /*#__PURE__*/_react.default.createElement(_Dialog.Dialog, {
896
849
  open: !!entry,
897
850
  onClose: onClose,
@@ -995,17 +948,108 @@ var HistoryDialog = exports.HistoryDialog = function HistoryDialog(_ref5) {
995
948
 
996
949
  var StyledSourceCode = _styledComponents.default.div.withConfig({
997
950
  displayName: "SourceCodeSection__StyledSourceCode",
998
- componentId: "sc-rvqbh5-3"
999
- })(["font-family:", ";margin:0 0 16px;padding-bottom:16px;border-bottom:1px solid var(--border-primary);.sc-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px;}.sc-completed-row{display:flex;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid var(--border-primary);}.sc-add{margin-top:8px;padding-top:12px;border-top:1px solid var(--border-primary);}.sc-add .c--add-to-list-btn svg{box-sizing:content-box;}.sc-item{padding:12px 0;}.sc-item + .sc-item{border-top:1px solid var(--border-primary);}.sc-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;}.sc-main{flex:1 1 0%;min-width:0;}.sc-name{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;min-width:0;}.sc-lead{flex-shrink:0;display:inline-flex;color:var(--color-theme-600);}.sc-title{flex:0 1 auto;min-width:0;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.sc-title.strike{text-decoration:line-through;}.sc-title.strike-link{text-decoration:line-through;}.sc-title.strike-link:hover{text-decoration:none;}.sc-sigs{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:10px;font-size:13px;color:var(--color-theme-600);}.sc-sig{display:inline-flex;align-items:center;gap:4px;}.sc-chip{display:inline-flex;align-items:center;gap:3px;height:20px;padding:0 8px;border-radius:6px;font-size:11px;font-weight:700;letter-spacing:0.02em;flex-shrink:0;}.sc-chip.done{color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 15%,transparent);}.sc-chip.gone{color:var(--color-theme-900);background:var(--color-theme-200);border:1px solid var(--border-primary);}.sc-avatars{display:flex;align-items:center;}.sc-sha{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;color:var(--color-theme-600);}.sc-diff .add{color:var(--color-sucess-green);}.sc-diff .del{color:var(--red-alert);}.sc-muted{color:var(--color-theme-600);}.sc-refs{display:inline-flex;align-items:center;gap:6px;}.sc-refs .ref-link{color:var(--color-primary);font-weight:500;}"], SANS);
951
+ componentId: "sc-rvqbh5-2"
952
+ })(["font-family:", ";margin:0 0 16px;padding-bottom:16px;border-bottom:1px solid var(--border-primary);.sc-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px;}.sc-completed-row{display:flex;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid var(--border-primary);}.sc-add{margin-top:8px;padding-top:12px;border-top:1px solid var(--border-primary);}.sc-add .c--add-to-list-btn svg{box-sizing:content-box;}.sc-item{padding:12px 0;}.sc-item + .sc-item{border-top:1px solid var(--border-primary);}.sc-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;}.sc-main{flex:1 1 0%;min-width:0;}.sc-name{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;min-width:0;}.sc-lead{flex-shrink:0;display:inline-flex;color:var(--color-theme-600);}.sc-title{flex:0 1 auto;min-width:0;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.sc-title.strike{text-decoration:line-through;}.sc-title.strike-link{text-decoration:line-through;}.sc-title.strike-link:hover{text-decoration:none;}.sc-sigs{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:10px;font-size:12px;color:var(--color-theme-600);}.sc-sig{display:inline-flex;align-items:center;gap:4px;}.sc-sha{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}.sc-muted{color:var(--color-theme-600);}.sc-refs{display:inline-flex;align-items:center;gap:6px;}.sc-refs .ref-link{color:var(--color-primary);font-weight:500;}"], SANS);
1000
953
 
1001
954
  /* Element name — a link that opens the object in a new tab. Keeps the row's
1002
955
  typography (inherits color + weight), turns primary on hover, link cursor. */
1003
956
  var TitleLink = _styledComponents.default.a.withConfig({
1004
957
  displayName: "SourceCodeSection__TitleLink",
1005
- componentId: "sc-rvqbh5-4"
958
+ componentId: "sc-rvqbh5-3"
1006
959
  })(["color:inherit;text-decoration:none;cursor:pointer;transition:color 200ms ease;&:hover{color:var(--color-primary);}"]);
1007
- var IssueRow = exports.IssueRow = function IssueRow(_ref6) {
1008
- var issue = _ref6.issue;
960
+
961
+ /* Status label chip — the DS `Chip` styled to match the app's
962
+ `SourceCodeStatusChip`: a "done" tone (primary text on a translucent-primary
963
+ fill) and a "gone" tone (muted text on a bordered theme-200 fill). */
964
+ var CHIP_BASE_STYLE = {
965
+ height: "1.25rem",
966
+ paddingLeft: "0.5rem",
967
+ paddingRight: "0.5rem",
968
+ borderRadius: "0.375rem",
969
+ gap: "3px",
970
+ flexShrink: 0
971
+ };
972
+ var CHIP_DONE_STYLE = _objectSpread(_objectSpread({}, CHIP_BASE_STYLE), {}, {
973
+ backgroundColor: "color-mix(in srgb, var(--color-primary) 15%, transparent)"
974
+ });
975
+ var CHIP_GONE_STYLE = _objectSpread(_objectSpread({}, CHIP_BASE_STYLE), {}, {
976
+ backgroundColor: "var(--color-theme-200)",
977
+ border: "1px solid var(--border-primary)"
978
+ });
979
+ var StatusChip = function StatusChip(_ref5) {
980
+ var label = _ref5.label,
981
+ tone = _ref5.tone,
982
+ glyph = _ref5.glyph;
983
+ return /*#__PURE__*/_react.default.createElement(_Chip.Chip, {
984
+ label: label,
985
+ startAdornment: glyph,
986
+ color: tone === "done" ? "var(--color-primary)" : undefined,
987
+ style: tone === "done" ? CHIP_DONE_STYLE : CHIP_GONE_STYLE,
988
+ typographyProps: {
989
+ variant: "Caption 1",
990
+ weight: "bold",
991
+ align: "center"
992
+ }
993
+ });
994
+ };
995
+
996
+ /* Contributor avatars — the app renders real user images through the DS
997
+ `AvatarGroup` (`ContributorAvatars.jsx`). The mock feeds that same component
998
+ initials avatars via `MockAvatar`, which honours AvatarGroup's cloneElement
999
+ contract (it injects `size`, `alt` and `style` — the overlap margin + paper
1000
+ ring), so the grouping, overlap and "+N" overflow behave identically. */
1001
+ var CONTRIBUTOR_NAMES = {
1002
+ DA: "Dragana A.",
1003
+ IS: "Ilija Studen",
1004
+ MK: "Marko K."
1005
+ };
1006
+ var MockAvatar = /*#__PURE__*/_react.default.forwardRef(function (_ref6, ref) {
1007
+ var _ref6$size = _ref6.size,
1008
+ size = _ref6$size === void 0 ? 20 : _ref6$size,
1009
+ bg = _ref6.bg,
1010
+ initials = _ref6.initials,
1011
+ alt = _ref6.alt,
1012
+ rest = _objectWithoutProperties(_ref6, _excluded);
1013
+ return (
1014
+ /*#__PURE__*/
1015
+ // `...rest` carries the props AvatarGroup and its Tooltip inject via
1016
+ // cloneElement — `style` (overlap margin + paper ring) and the hover handlers
1017
+ // (`onMouseOver` / `onMouseLeave`) — plus the forwarded `ref`, all of which
1018
+ // must reach the DOM node for the tooltip to open.
1019
+ _react.default.createElement(_RoundAvatar.RoundAvatar, _extends({
1020
+ ref: ref,
1021
+ $bg: bg,
1022
+ $size: size,
1023
+ $bordered: false
1024
+ }, rest), initials)
1025
+ );
1026
+ });
1027
+ MockAvatar.displayName = "MockAvatar";
1028
+
1029
+ /* The app removes AvatarGroup's default padding with `tw-p-0`; the mock does
1030
+ the same through a styled wrapper (`tw-` classes don't run in Storybook). */
1031
+ var StyledAvatarGroup = (0, _styledComponents.default)(_AvatarGroup.AvatarGroup).withConfig({
1032
+ displayName: "SourceCodeSection__StyledAvatarGroup",
1033
+ componentId: "sc-rvqbh5-4"
1034
+ })(["&&{padding:0;}"]);
1035
+ var ContributorAvatars = function ContributorAvatars(_ref7) {
1036
+ var contributors = _ref7.contributors;
1037
+ return /*#__PURE__*/_react.default.createElement(StyledAvatarGroup, {
1038
+ limit: 4,
1039
+ size: 20,
1040
+ hasTooltip: true
1041
+ }, contributors.map(function (c) {
1042
+ var _CONTRIBUTOR_NAMES$c$;
1043
+ return /*#__PURE__*/_react.default.createElement(MockAvatar, {
1044
+ key: c.initials,
1045
+ bg: c.bg,
1046
+ initials: c.initials,
1047
+ alt: (_CONTRIBUTOR_NAMES$c$ = CONTRIBUTOR_NAMES[c.initials]) !== null && _CONTRIBUTOR_NAMES$c$ !== void 0 ? _CONTRIBUTOR_NAMES$c$ : c.initials
1048
+ });
1049
+ }));
1050
+ };
1051
+ var IssueRow = exports.IssueRow = function IssueRow(_ref8) {
1052
+ var issue = _ref8.issue;
1009
1053
  var closed = issue.state === "closed";
1010
1054
  return /*#__PURE__*/_react.default.createElement("div", {
1011
1055
  className: "sc-row"
@@ -1018,19 +1062,23 @@ var IssueRow = exports.IssueRow = function IssueRow(_ref6) {
1018
1062
  style: {
1019
1063
  color: closed ? "var(--color-primary)" : undefined
1020
1064
  }
1021
- }, closed ? /*#__PURE__*/_react.default.createElement(IssueClosedIcon, null) : /*#__PURE__*/_react.default.createElement(IssueOpenIcon, null)), /*#__PURE__*/_react.default.createElement(_Typography.Body1, {
1065
+ }, /*#__PURE__*/_react.default.createElement(IssueStateIcon, {
1066
+ closed: closed
1067
+ })), /*#__PURE__*/_react.default.createElement(_Typography.Body1, {
1022
1068
  weight: "medium",
1023
1069
  className: "sc-title"
1024
1070
  }, /*#__PURE__*/_react.default.createElement(TitleLink, {
1025
1071
  href: issueUrl(issue),
1026
1072
  target: "_blank",
1027
1073
  rel: "noopener noreferrer"
1028
- }, issue.title)), closed && /*#__PURE__*/_react.default.createElement("span", {
1029
- className: "sc-chip done"
1030
- }, /*#__PURE__*/_react.default.createElement(IssueClosedIcon, {
1031
- width: 12,
1032
- height: 12
1033
- }), "Closed")), /*#__PURE__*/_react.default.createElement("div", {
1074
+ }, issue.title)), closed && /*#__PURE__*/_react.default.createElement(StatusChip, {
1075
+ label: "Closed",
1076
+ tone: "done",
1077
+ glyph: /*#__PURE__*/_react.default.createElement(IssueStateIcon, {
1078
+ closed: true,
1079
+ size: 12
1080
+ })
1081
+ })), /*#__PURE__*/_react.default.createElement("div", {
1034
1082
  className: "sc-sigs"
1035
1083
  }, /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
1036
1084
  title: "Repository: ".concat(issue.repoFull)
@@ -1043,37 +1091,42 @@ var IssueRow = exports.IssueRow = function IssueRow(_ref6) {
1043
1091
  className: "sc-muted"
1044
1092
  }, issue.updatedLabel))));
1045
1093
  };
1046
- var CodeStatusChip = function CodeStatusChip(_ref7) {
1047
- var entry = _ref7.entry;
1094
+ var CodeStatusChip = function CodeStatusChip(_ref9) {
1095
+ var entry = _ref9.entry;
1048
1096
  if (entry.status === "merged") {
1049
- return /*#__PURE__*/_react.default.createElement("span", {
1050
- className: "sc-chip done"
1051
- }, /*#__PURE__*/_react.default.createElement(_Icons.GitPullRequestIcon, {
1052
- width: 12,
1053
- height: 12,
1054
- fill: "var(--color-primary)"
1055
- }), "Merged");
1097
+ return /*#__PURE__*/_react.default.createElement(StatusChip, {
1098
+ label: "Merged",
1099
+ tone: "done",
1100
+ glyph: /*#__PURE__*/_react.default.createElement(_Icons.GitPullRequestIcon, {
1101
+ width: 12,
1102
+ height: 12,
1103
+ fill: "var(--color-primary)"
1104
+ })
1105
+ });
1056
1106
  }
1057
1107
  if (entry.status === "deleted") {
1058
- return /*#__PURE__*/_react.default.createElement("span", {
1059
- className: "sc-chip gone"
1060
- }, /*#__PURE__*/_react.default.createElement(_Icons.TrashIcon, {
1061
- width: 12,
1062
- height: 12,
1063
- fill: "var(--color-theme-900)"
1064
- }), "Deleted");
1108
+ return /*#__PURE__*/_react.default.createElement(StatusChip, {
1109
+ label: "Deleted",
1110
+ tone: "gone",
1111
+ glyph: /*#__PURE__*/_react.default.createElement(_Icons.TrashIcon, {
1112
+ width: 12,
1113
+ height: 12,
1114
+ fill: "var(--color-theme-900)"
1115
+ })
1116
+ });
1065
1117
  }
1066
1118
  if (entry.status === "closed") {
1067
- return /*#__PURE__*/_react.default.createElement("span", {
1068
- className: "sc-chip gone"
1069
- }, "Closed");
1119
+ return /*#__PURE__*/_react.default.createElement(StatusChip, {
1120
+ label: "Closed",
1121
+ tone: "gone"
1122
+ });
1070
1123
  }
1071
1124
  // Open branches / PRs show no status label.
1072
1125
  return null;
1073
1126
  };
1074
- var CodeRow = exports.CodeRow = function CodeRow(_ref8) {
1075
- var entry = _ref8.entry,
1076
- onOpenHistory = _ref8.onOpenHistory;
1127
+ var CodeRow = exports.CodeRow = function CodeRow(_ref0) {
1128
+ var entry = _ref0.entry,
1129
+ onOpenHistory = _ref0.onOpenHistory;
1077
1130
  var deleted = entry.status === "deleted";
1078
1131
  // A closed-without-merge PR is still a live link, but its name is struck
1079
1132
  // through to signal the dead-end; the strike lifts on hover so it reads as a
@@ -1114,52 +1167,45 @@ var CodeRow = exports.CodeRow = function CodeRow(_ref8) {
1114
1167
  }, /*#__PURE__*/_react.default.createElement(_Icons.GitRepositoryIcon, {
1115
1168
  width: 14,
1116
1169
  height: 14
1117
- }), entry.repo)), /*#__PURE__*/_react.default.createElement("span", {
1118
- className: "sc-avatars"
1119
- }, entry.contributors.map(function (c) {
1120
- return /*#__PURE__*/_react.default.createElement(_RoundAvatar.RoundAvatar, {
1121
- key: c.initials,
1122
- $bg: c.bg,
1123
- $size: 20,
1124
- $overlap: true
1125
- }, c.initials);
1126
- })), /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
1170
+ }), entry.repo)), /*#__PURE__*/_react.default.createElement(ContributorAvatars, {
1171
+ contributors: entry.contributors
1172
+ }), /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
1127
1173
  title: entry.commits.tip
1128
- }, /*#__PURE__*/_react.default.createElement("span", {
1174
+ }, /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
1175
+ color: "tertiary",
1129
1176
  className: "sc-sig"
1130
1177
  }, /*#__PURE__*/_react.default.createElement(_Icons.GitCommitIcon, {
1131
1178
  width: 14,
1132
1179
  height: 14
1133
1180
  }), entry.commits.value)), /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
1134
1181
  title: "Head commit: ".concat(entry.headSha)
1135
- }, /*#__PURE__*/_react.default.createElement("span", {
1182
+ }, /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
1183
+ color: "tertiary",
1136
1184
  className: "sc-sig sc-sha"
1137
1185
  }, entry.headSha.slice(0, 8))), entry.diff && /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
1138
1186
  title: entry.diff.tip
1139
1187
  }, /*#__PURE__*/_react.default.createElement("span", {
1140
1188
  className: "sc-sig sc-diff"
1141
- }, /*#__PURE__*/_react.default.createElement("span", {
1142
- className: "add"
1143
- }, "+", entry.diff.add), " ", /*#__PURE__*/_react.default.createElement("span", {
1144
- className: "del"
1189
+ }, /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
1190
+ color: "success"
1191
+ }, "+", entry.diff.add), /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
1192
+ color: "alert"
1145
1193
  }, "\u2212", entry.diff.del))), entry.comments && /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
1146
1194
  title: entry.comments.tip
1147
- }, /*#__PURE__*/_react.default.createElement("span", {
1195
+ }, /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
1196
+ color: "tertiary",
1148
1197
  className: "sc-sig"
1149
- }, /*#__PURE__*/_react.default.createElement(_Icons.MessageIcon, {
1150
- width: 14,
1151
- height: 14
1152
- }), entry.comments.value)), /*#__PURE__*/_react.default.createElement("span", {
1198
+ }, /*#__PURE__*/_react.default.createElement(_Icons.MessageSmallIcon, null), entry.comments.value)), /*#__PURE__*/_react.default.createElement("span", {
1153
1199
  className: "sc-muted"
1154
1200
  }, entry.updatedLabel))), /*#__PURE__*/_react.default.createElement(Spine, {
1155
1201
  items: entry.stages,
1156
1202
  onClick: onOpenHistory
1157
1203
  }));
1158
1204
  };
1159
- var CompletedHeader = exports.CompletedHeader = function CompletedHeader(_ref9) {
1160
- var expanded = _ref9.expanded,
1161
- count = _ref9.count,
1162
- onToggle = _ref9.onToggle;
1205
+ var CompletedHeader = exports.CompletedHeader = function CompletedHeader(_ref1) {
1206
+ var expanded = _ref1.expanded,
1207
+ count = _ref1.count,
1208
+ onToggle = _ref1.onToggle;
1163
1209
  return /*#__PURE__*/_react.default.createElement("div", {
1164
1210
  className: "sc-completed-row"
1165
1211
  }, /*#__PURE__*/_react.default.createElement(_Button.Button, {
@@ -1172,9 +1218,9 @@ var CompletedHeader = exports.CompletedHeader = function CompletedHeader(_ref9)
1172
1218
  }
1173
1219
  }, expanded ? "Hide completed elements" : "Show ".concat(count, " more completed elements")));
1174
1220
  };
1175
- var SourceCodeSection = exports.SourceCodeSection = function SourceCodeSection(_ref0) {
1176
- var _ref0$variant = _ref0.variant,
1177
- variant = _ref0$variant === void 0 ? "mix" : _ref0$variant;
1221
+ var SourceCodeSection = exports.SourceCodeSection = function SourceCodeSection(_ref10) {
1222
+ var _ref10$variant = _ref10.variant,
1223
+ variant = _ref10$variant === void 0 ? "mix" : _ref10$variant;
1178
1224
  var _useState = (0, _react.useState)(null),
1179
1225
  _useState2 = _slicedToArray(_useState, 2),
1180
1226
  openEntry = _useState2[0],