@activecollab/components 2.0.343 → 2.0.345

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 (33) hide show
  1. package/dist/cjs/components/Icons/collection/{SourceCode.js → GitRepository.js} +13 -11
  2. package/dist/cjs/components/Icons/collection/GitRepository.js.map +1 -0
  3. package/dist/cjs/components/Icons/collection/GitRepositoryConnect.js +95 -0
  4. package/dist/cjs/components/Icons/collection/GitRepositoryConnect.js.map +1 -0
  5. package/dist/cjs/components/Icons/collection/index.js +14 -7
  6. package/dist/cjs/components/Icons/collection/index.js.map +1 -1
  7. package/dist/cjs/presentation/shared/headers.js +326 -47
  8. package/dist/cjs/presentation/shared/headers.js.map +1 -1
  9. package/dist/esm/components/Icons/collection/GitRepository.d.ts +16 -0
  10. package/dist/esm/components/Icons/collection/GitRepository.d.ts.map +1 -0
  11. package/dist/esm/components/Icons/collection/{SourceCode.js → GitRepository.js} +13 -11
  12. package/dist/esm/components/Icons/collection/GitRepository.js.map +1 -0
  13. package/dist/esm/components/Icons/collection/GitRepositoryConnect.d.ts +17 -0
  14. package/dist/esm/components/Icons/collection/GitRepositoryConnect.d.ts.map +1 -0
  15. package/dist/esm/components/Icons/collection/GitRepositoryConnect.js +78 -0
  16. package/dist/esm/components/Icons/collection/GitRepositoryConnect.js.map +1 -0
  17. package/dist/esm/components/Icons/collection/index.d.ts +2 -1
  18. package/dist/esm/components/Icons/collection/index.d.ts.map +1 -1
  19. package/dist/esm/components/Icons/collection/index.js +2 -1
  20. package/dist/esm/components/Icons/collection/index.js.map +1 -1
  21. package/dist/esm/presentation/shared/headers.d.ts +8 -1
  22. package/dist/esm/presentation/shared/headers.d.ts.map +1 -1
  23. package/dist/esm/presentation/shared/headers.js +294 -43
  24. package/dist/esm/presentation/shared/headers.js.map +1 -1
  25. package/dist/index.js +529 -449
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.min.js +1 -1
  28. package/dist/index.min.js.map +1 -1
  29. package/package.json +1 -1
  30. package/dist/cjs/components/Icons/collection/SourceCode.js.map +0 -1
  31. package/dist/esm/components/Icons/collection/SourceCode.d.ts +0 -16
  32. package/dist/esm/components/Icons/collection/SourceCode.d.ts.map +0 -1
  33. package/dist/esm/components/Icons/collection/SourceCode.js.map +0 -1
@@ -5,12 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.TabHeader = exports.ProjectPageHeader = exports.PageHeader = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
- var _styledComponents = _interopRequireDefault(require("styled-components"));
8
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
9
+ var _ConnectRepositoryDialog = require("./ConnectRepositoryDialog");
10
+ var _RoundAvatar = require("./RoundAvatar");
9
11
  var _tokens = require("./tokens");
10
12
  var _Button = require("../../components/Button");
11
13
  var _GlobalAddButton = require("../../components/Button/GlobalAddButton");
12
- var _Checkbox = require("../../components/Checkbox");
14
+ var _CompleteCheckbox = require("../../components/CompleteCheckbox");
13
15
  var _CounterButton = require("../../components/CounterButton");
16
+ var _Dialog = require("../../components/Dialog");
14
17
  var _Header = require("../../components/Header");
15
18
  var _IconButton = require("../../components/IconButton");
16
19
  var _Icons = require("../../components/Icons");
@@ -19,8 +22,8 @@ var _Menu = require("../../components/Menu");
19
22
  var _Nav = require("../../components/Nav");
20
23
  var _ProgressPie = require("../../components/ProgressPie");
21
24
  var _Tooltip = require("../../components/Tooltip");
25
+ var _Transitions = require("../../components/Transitions");
22
26
  var _Typography = require("../../components/Typography");
23
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
24
27
  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); }
25
28
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
26
29
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -28,6 +31,9 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
28
31
  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; }
29
32
  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; } }
30
33
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
34
+ /** Gold used for the project-leader cues (a data colour, not a theme token). */
35
+ var LEADER_GOLD = "#FFCC6B";
36
+
31
37
  /* ------------------------------------------------------------------ */
32
38
  /* Page header row (mirrors PageHeader.jsx) */
33
39
  /* ------------------------------------------------------------------ */
@@ -68,55 +74,332 @@ var StyledProjectHeaderChildren = _styledComponents.default.div.withConfig({
68
74
  var StyledProjectMenu = _styledComponents.default.div.withConfig({
69
75
  displayName: "headers__StyledProjectMenu",
70
76
  componentId: "sc-yf6o6n-2"
71
- })([".toggle-item{justify-content:space-between;}.toggle-item .opt-left{display:flex;align-items:center;min-width:0;}.toggle-item .opt-left svg{margin-right:8px;flex-shrink:0;}"]);
72
- var ProjectOptionsMenu = function ProjectOptionsMenu() {
77
+ })([".toggle-item{justify-content:space-between;}.toggle-item .opt-left{display:flex;align-items:center;min-width:0;}.toggle-item .opt-left svg{margin-right:8px;flex-shrink:0;}.toggle-item .c-complete-checkbox{width:16px;height:16px;border-radius:3px;align-self:center;flex-shrink:0;}.submenu-item{justify-content:space-between;}.submenu-item .repo-caret{flex-shrink:0;fill:var(--color-theme-600);}.repo-row{min-width:0;}.repo-row > svg{flex-shrink:0;}.repo-name{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}"]);
78
+
79
+ /** Submenu row label for a connected repository: "path (Connection, Type)",
80
+ * matching the grouped picker headers in the Link Branch / Pull Request
81
+ * dialog. */
82
+ var repositoryMenuLabel = function repositoryMenuLabel(repo) {
83
+ var connection = _ConnectRepositoryDialog.CONNECTIONS.find(function (c) {
84
+ return c.id === repo.connectionId;
85
+ });
86
+ return connection ? "".concat(repo.name, " (").concat(connection.name, ", ").concat((0, _ConnectRepositoryDialog.serviceLabel)(connection.service), ")") : repo.name;
87
+ };
88
+
89
+ /** Width of the project "..." menu (matches the DS "normal" menu mode). */
90
+ var PROJECT_MENU_WIDTH = 260;
91
+
92
+ /* The menu drills in place (index → Repositories), so the paper must clip the
93
+ sliding panels and give them a positioning context. */
94
+ var ProjectMenuSliderStyle = (0, _styledComponents.createGlobalStyle)([".c-simple-menu__paper.project-options-menu{overflow:hidden;position:relative;}"]);
95
+ /**
96
+ * The project "..." options menu. When the `source` module is loaded it gains
97
+ * a **Repositories** item that, instead of flying out to the side, **drills in
98
+ * within the same menu** (the pattern used across the app — see `Filter`): the
99
+ * index slides out to the left and the Repositories view (a back-arrow header,
100
+ * the connected repositories sorted by name, and a **Connect Repository**
101
+ * action) slides in. Connecting adds a repository to the list; clicking one
102
+ * would, in production, open it in a new tab (surfaced here via a dialog).
103
+ */
104
+ var ProjectOptionsMenu = function ProjectOptionsMenu(_ref2) {
105
+ var _ref2$sourceModuleLoa = _ref2.sourceModuleLoaded,
106
+ sourceModuleLoaded = _ref2$sourceModuleLoa === void 0 ? false : _ref2$sourceModuleLoa;
73
107
  var _useState = (0, _react.useState)(false),
74
108
  _useState2 = _slicedToArray(_useState, 2),
75
109
  open = _useState2[0],
76
110
  setOpen = _useState2[1];
77
- return /*#__PURE__*/_react.default.createElement(_Menu.Menu, {
111
+ var _useState3 = (0, _react.useState)("index"),
112
+ _useState4 = _slicedToArray(_useState3, 2),
113
+ view = _useState4[0],
114
+ setView = _useState4[1];
115
+ var _useState5 = (0, _react.useState)(true),
116
+ _useState6 = _slicedToArray(_useState5, 2),
117
+ isLeft = _useState6[0],
118
+ setIsLeft = _useState6[1];
119
+ var _useState7 = (0, _react.useState)(0),
120
+ _useState8 = _slicedToArray(_useState7, 2),
121
+ height = _useState8[0],
122
+ setHeight = _useState8[1];
123
+ var _useState9 = (0, _react.useState)([]),
124
+ _useState0 = _slicedToArray(_useState9, 2),
125
+ connectedRepos = _useState0[0],
126
+ setConnectedRepos = _useState0[1];
127
+ var _useState1 = (0, _react.useState)(false),
128
+ _useState10 = _slicedToArray(_useState1, 2),
129
+ connectOpen = _useState10[0],
130
+ setConnectOpen = _useState10[1];
131
+ var _useState11 = (0, _react.useState)(false),
132
+ _useState12 = _slicedToArray(_useState11, 2),
133
+ infoOpen = _useState12[0],
134
+ setInfoOpen = _useState12[1];
135
+
136
+ // Repositories still available to connect (not already on the project).
137
+ var connectableRepos = _ConnectRepositoryDialog.CONNECTABLE_REPOSITORIES.filter(function (r) {
138
+ return !connectedRepos.some(function (c) {
139
+ return c.id === r.id;
140
+ });
141
+ });
142
+
143
+ // Connected repositories are listed in the submenu sorted by name.
144
+ var sortedRepos = [...connectedRepos].sort(function (a, b) {
145
+ return a.name.localeCompare(b.name);
146
+ });
147
+
148
+ // Each view measures itself as it mounts so the paper can animate its height.
149
+ var measure = (0, _react.useCallback)(function (node) {
150
+ if (node) {
151
+ setHeight(node.offsetHeight);
152
+ }
153
+ }, []);
154
+ var goToRepositories = function goToRepositories() {
155
+ setView("repositories");
156
+ setIsLeft(true);
157
+ };
158
+ var backToIndex = function backToIndex() {
159
+ setView("index");
160
+ setIsLeft(false);
161
+ };
162
+ var handleClose = function handleClose() {
163
+ setOpen(false);
164
+ // Reset to the index so the next open starts at the top level.
165
+ setView("index");
166
+ setIsLeft(true);
167
+ };
168
+ var handleConnected = function handleConnected(repo) {
169
+ setConnectedRepos(function (prev) {
170
+ return prev.some(function (r) {
171
+ return r.id === repo.id;
172
+ }) ? prev : [...prev, repo];
173
+ });
174
+ };
175
+ var handleConnect = function handleConnect() {
176
+ handleClose();
177
+ setConnectOpen(true);
178
+ };
179
+
180
+ // In production this closes the menu and opens the repository in a new tab;
181
+ // in the mock we surface that behaviour in a small dialog instead.
182
+ var handleOpenRepository = function handleOpenRepository() {
183
+ handleClose();
184
+ setInfoOpen(true);
185
+ };
186
+ var indexView = /*#__PURE__*/_react.default.createElement(StyledProjectMenu, null, /*#__PURE__*/_react.default.createElement(_List.List, {
187
+ style: {
188
+ padding: "8px 0"
189
+ },
190
+ tabIndex: -1
191
+ }, /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.EditIcon, null), "Edit"), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
192
+ className: "toggle-item"
193
+ }, /*#__PURE__*/_react.default.createElement("span", {
194
+ className: "opt-left"
195
+ }, /*#__PURE__*/_react.default.createElement(_Icons.StarIcon, null), "Mark as Favorite"), /*#__PURE__*/_react.default.createElement(_CompleteCheckbox.CompleteCheckbox, {
196
+ primary: true,
197
+ completed: true
198
+ })), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
199
+ className: "toggle-item"
200
+ }, /*#__PURE__*/_react.default.createElement("span", {
201
+ className: "opt-left"
202
+ }, /*#__PURE__*/_react.default.createElement(_Icons.NotificationBellIcon, null), "Subscribe to Everything"), /*#__PURE__*/_react.default.createElement(_CompleteCheckbox.CompleteCheckbox, {
203
+ primary: true,
204
+ completed: false
205
+ })), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.LabelsIcon, null), "Manage Task Labels"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.InsertLinkIcon, null), "Copy Link"), /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.CheckboxBlankTogglerIcon, null), "Complete"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.DownloadIcon, null), "Export"), sourceModuleLoaded ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
206
+ className: "toggle-item submenu-item",
207
+ onClick: goToRepositories
208
+ }, /*#__PURE__*/_react.default.createElement("span", {
209
+ className: "opt-left"
210
+ }, /*#__PURE__*/_react.default.createElement(_Icons.GitRepositoryIcon, null), "Repositories"), /*#__PURE__*/_react.default.createElement(_Icons.CaretRightIcon, {
211
+ className: "repo-caret",
212
+ width: 16,
213
+ height: 16
214
+ }))) : null, /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.DuplicateIcon, null), "Duplicate"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.ProjectTemplateIcon, null), "Apply Template"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.ProjectTemplateConvertIcon, null), "Convert to Template"), /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.TrashIcon, null), "Delete")));
215
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(ProjectMenuSliderStyle, null), /*#__PURE__*/_react.default.createElement(_Menu.Menu, {
78
216
  open: open,
79
217
  onOpen: function onOpen() {
80
218
  return setOpen(true);
81
219
  },
82
- onClose: function onClose() {
83
- return setOpen(false);
84
- },
220
+ onClose: handleClose,
85
221
  position: "bottom-end",
222
+ menuClassName: sourceModuleLoaded ? "project-options-menu" : undefined,
86
223
  target: /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
87
224
  type: "button",
88
225
  variant: "text gray",
89
226
  active: open
90
227
  }, /*#__PURE__*/_react.default.createElement(_Icons.TreeDotsIcon, null))
91
- }, /*#__PURE__*/_react.default.createElement(StyledProjectMenu, null, /*#__PURE__*/_react.default.createElement(_List.List, {
228
+ }, sourceModuleLoaded ? /*#__PURE__*/_react.default.createElement(_Transitions.ResizeTransition, {
229
+ in: true,
230
+ style: {
231
+ height,
232
+ width: PROJECT_MENU_WIDTH
233
+ }
234
+ }, /*#__PURE__*/_react.default.createElement("div", {
235
+ style: {
236
+ position: "relative",
237
+ overflow: "hidden"
238
+ }
239
+ }, /*#__PURE__*/_react.default.createElement(_Transitions.SlideLeftRightTransition, {
240
+ in: view === "index",
241
+ direction: isLeft ? "left" : "right"
242
+ }, /*#__PURE__*/_react.default.createElement("div", {
243
+ ref: measure,
244
+ style: {
245
+ width: PROJECT_MENU_WIDTH
246
+ }
247
+ }, indexView)), /*#__PURE__*/_react.default.createElement(_Transitions.SlideLeftRightTransition, {
248
+ in: view === "repositories",
249
+ direction: isLeft ? "left" : "right"
250
+ }, /*#__PURE__*/_react.default.createElement("div", {
251
+ ref: measure,
252
+ style: {
253
+ width: PROJECT_MENU_WIDTH
254
+ }
255
+ }, /*#__PURE__*/_react.default.createElement(_Menu.MenuHeader, {
256
+ title: "Repositories",
257
+ leftElement: /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
258
+ type: "button",
259
+ variant: "text gray",
260
+ size: "small",
261
+ onClick: backToIndex,
262
+ "aria-label": "Back"
263
+ }, /*#__PURE__*/_react.default.createElement(_Icons.ArrowLeftIcon, null))
264
+ }), /*#__PURE__*/_react.default.createElement(StyledProjectMenu, null, /*#__PURE__*/_react.default.createElement(_List.List, {
92
265
  style: {
93
266
  padding: "8px 0"
94
267
  },
95
268
  tabIndex: -1
96
- }, /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.EditIcon, null), "Edit"), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
97
- className: "toggle-item"
98
- }, /*#__PURE__*/_react.default.createElement("span", {
99
- className: "opt-left"
100
- }, /*#__PURE__*/_react.default.createElement(_Icons.StarIcon, null), "Mark as Favorite"), /*#__PURE__*/_react.default.createElement(_Checkbox.Checkbox, {
101
- id: "proj-favorite",
102
- onChange: function onChange() {
103
- return undefined;
104
- }
105
- })), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
106
- className: "toggle-item"
107
- }, /*#__PURE__*/_react.default.createElement("span", {
108
- className: "opt-left"
109
- }, /*#__PURE__*/_react.default.createElement(_Icons.NotificationBellIcon, null), "Subscribe to Everything"), /*#__PURE__*/_react.default.createElement(_Checkbox.Checkbox, {
110
- id: "proj-subscribe",
111
- onChange: function onChange() {
112
- return undefined;
269
+ }, sortedRepos.map(function (repo) {
270
+ return /*#__PURE__*/_react.default.createElement(_List.ListItem, {
271
+ key: repo.id,
272
+ className: "repo-row",
273
+ onClick: function onClick() {
274
+ return handleOpenRepository();
275
+ }
276
+ }, /*#__PURE__*/_react.default.createElement(_Icons.GitRepositoryIcon, null), /*#__PURE__*/_react.default.createElement("span", {
277
+ className: "repo-name"
278
+ }, repositoryMenuLabel(repo)));
279
+ }), sortedRepos.length > 0 ? /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null) : null, /*#__PURE__*/_react.default.createElement(_List.ListItem, {
280
+ onClick: handleConnect
281
+ }, /*#__PURE__*/_react.default.createElement(_Icons.GitRepositoryConnectIcon, null), "Connect Repository"))))))) : indexView), /*#__PURE__*/_react.default.createElement(_ConnectRepositoryDialog.ConnectRepositoryDialog, {
282
+ open: connectOpen,
283
+ onClose: function onClose() {
284
+ return setConnectOpen(false);
285
+ },
286
+ onConnect: handleConnected,
287
+ repositories: connectableRepos,
288
+ connections: _ConnectRepositoryDialog.CONNECTIONS
289
+ }), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog, {
290
+ open: infoOpen,
291
+ onClose: function onClose() {
292
+ return setInfoOpen(false);
293
+ },
294
+ enableBackgroundClick: true
295
+ }, /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Title, null, "Open Repository"), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.ContentDivider, null), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Content, null, /*#__PURE__*/_react.default.createElement(_Typography.Body2, null, "In production, this click would close the menu and open the repository in a new browser tab.")), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.ContentDivider, null), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Actions, null, /*#__PURE__*/_react.default.createElement(_Button.Button, {
296
+ variant: "primary",
297
+ onClick: function onClick() {
298
+ return setInfoOpen(false);
113
299
  }
114
- })), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.LabelsIcon, null), "Manage Task Labels"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.InsertLinkIcon, null), "Copy Link"), /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.CheckboxBlankTogglerIcon, null), "Complete"), /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.DuplicateIcon, null), "Duplicate"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.ProjectTemplateIcon, null), "Apply Template"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.ProjectTemplateConvertIcon, null), "Convert to Template"), /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.TrashIcon, null), "Delete"))));
300
+ }, "Got it"))));
301
+ };
302
+
303
+ /* People popover (mirrors the project header People dropdown): a header row
304
+ ("People" + add button), a "Members" section and a row per member. The
305
+ project leader shows a gold crown; other members reveal a "set as leader"
306
+ crown and a remove button on hover. Clicks are no-ops. */
307
+
308
+ var PROJECT_MEMBERS = [{
309
+ name: "Theo Brandt",
310
+ initials: "TB",
311
+ color: _tokens.AVATAR_COLORS.blue,
312
+ leader: true
313
+ }, {
314
+ name: "Iris Calloway",
315
+ initials: "IC",
316
+ color: _tokens.AVATAR_COLORS.purple
317
+ }, {
318
+ name: "Account Director",
319
+ initials: "AD",
320
+ color: "#8A8F98"
321
+ }, {
322
+ name: "Grace Bennett",
323
+ initials: "GB",
324
+ color: _tokens.AVATAR_COLORS.orange
325
+ }];
326
+ var StyledPeopleMenu = _styledComponents.default.div.withConfig({
327
+ displayName: "headers__StyledPeopleMenu",
328
+ componentId: "sc-yf6o6n-3"
329
+ })(["width:256px;.members-label{display:block;margin:8px 0;padding:0 16px;}.member-row{position:relative;display:flex;align-items:center;min-height:40px;margin:0 8px;padding:2px 8px;border-radius:4px;cursor:default;transition:background-color ", ";}.member-row:hover{background-color:var(--color-theme-200);}.member-row.leader::before{content:\"\";position:absolute;top:4px;bottom:4px;left:0;width:4px;border-radius:4px;background-color:", ";}.member-row.leader .member-avatar{outline:2px solid ", ";outline-offset:-2px;}.member-name{flex:1;margin-left:12px;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.member-right{display:flex;align-items:center;gap:2px;flex-shrink:0;margin-left:8px;}.leader-crown{flex-shrink:0;}.member-options{display:none;align-items:center;gap:2px;}.member-row:hover .member-options{display:flex;}"], _tokens.TRANSITION, LEADER_GOLD, LEADER_GOLD);
330
+ var PeoplePopover = function PeoplePopover() {
331
+ var _useState13 = (0, _react.useState)(false),
332
+ _useState14 = _slicedToArray(_useState13, 2),
333
+ open = _useState14[0],
334
+ setOpen = _useState14[1];
335
+ return /*#__PURE__*/_react.default.createElement(_Menu.Menu, {
336
+ open: open,
337
+ onOpen: function onOpen() {
338
+ return setOpen(true);
339
+ },
340
+ onClose: function onClose() {
341
+ return setOpen(false);
342
+ },
343
+ position: "bottom-end",
344
+ target: /*#__PURE__*/_react.default.createElement(_CounterButton.CounterButton, {
345
+ label: String(PROJECT_MEMBERS.length),
346
+ icon: /*#__PURE__*/_react.default.createElement(_Icons.PeopleIcon, null),
347
+ active: open,
348
+ onClearAll: function onClearAll() {
349
+ return undefined;
350
+ }
351
+ })
352
+ }, /*#__PURE__*/_react.default.createElement(StyledPeopleMenu, null, /*#__PURE__*/_react.default.createElement(_Menu.MenuHeader, {
353
+ title: "People",
354
+ rightElement: /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
355
+ type: "button",
356
+ variant: "text gray",
357
+ size: "small",
358
+ "aria-label": "Add People"
359
+ }, /*#__PURE__*/_react.default.createElement(_Icons.AddCrossTinyIcon, null))
360
+ }), /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
361
+ weight: "bold",
362
+ className: "members-label"
363
+ }, "Members"), PROJECT_MEMBERS.map(function (member) {
364
+ return /*#__PURE__*/_react.default.createElement("div", {
365
+ className: member.leader ? "member-row leader" : "member-row",
366
+ key: member.name
367
+ }, /*#__PURE__*/_react.default.createElement(_RoundAvatar.RoundAvatar, {
368
+ className: "member-avatar",
369
+ $bg: member.color,
370
+ $bordered: false
371
+ }, member.initials), /*#__PURE__*/_react.default.createElement(_Typography.Body2, {
372
+ className: "member-name"
373
+ }, member.name), /*#__PURE__*/_react.default.createElement("span", {
374
+ className: "member-right"
375
+ }, member.leader && /*#__PURE__*/_react.default.createElement(_Icons.CrownSelectedIcon, {
376
+ className: "leader-crown",
377
+ style: {
378
+ fill: LEADER_GOLD
379
+ }
380
+ }), /*#__PURE__*/_react.default.createElement("span", {
381
+ className: "member-options"
382
+ }, !member.leader && /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
383
+ title: "Set as Project Leader"
384
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
385
+ type: "button",
386
+ variant: "text gray",
387
+ size: "small"
388
+ }, /*#__PURE__*/_react.default.createElement(_Icons.CrownBlankIcon, null))), /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
389
+ title: "Remove from Project"
390
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
391
+ type: "button",
392
+ variant: "text gray",
393
+ size: "small"
394
+ }, /*#__PURE__*/_react.default.createElement(_Icons.CloseSmallIcon, null))))));
395
+ })));
115
396
  };
116
397
  /** The project page header: back arrow, title, progress, info, people, options. */
117
- var ProjectPageHeader = exports.ProjectPageHeader = function ProjectPageHeader(_ref2) {
118
- var _ref2$title = _ref2.title,
119
- title = _ref2$title === void 0 ? "#131: Ime projekta" : _ref2$title;
398
+ var ProjectPageHeader = exports.ProjectPageHeader = function ProjectPageHeader(_ref3) {
399
+ var _ref3$title = _ref3.title,
400
+ title = _ref3$title === void 0 ? "#131: Ime projekta" : _ref3$title,
401
+ _ref3$sourceModuleLoa = _ref3.sourceModuleLoaded,
402
+ sourceModuleLoaded = _ref3$sourceModuleLoa === void 0 ? false : _ref3$sourceModuleLoa;
120
403
  return /*#__PURE__*/_react.default.createElement(StyledPageHeader, null, /*#__PURE__*/_react.default.createElement("div", {
121
404
  className: "page-header-left"
122
405
  }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
@@ -139,13 +422,9 @@ var ProjectPageHeader = exports.ProjectPageHeader = function ProjectPageHeader(_
139
422
  title: "Project Info"
140
423
  }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
141
424
  variant: "text gray"
142
- }, /*#__PURE__*/_react.default.createElement(_Icons.InfoIcon, null))), /*#__PURE__*/_react.default.createElement(_CounterButton.CounterButton, {
143
- label: "5",
144
- icon: /*#__PURE__*/_react.default.createElement(_Icons.PeopleIcon, null),
145
- onClearAll: function onClearAll() {
146
- return undefined;
147
- }
148
- }), /*#__PURE__*/_react.default.createElement(ProjectOptionsMenu, null)))), /*#__PURE__*/_react.default.createElement("div", {
425
+ }, /*#__PURE__*/_react.default.createElement(_Icons.InfoIcon, null))), /*#__PURE__*/_react.default.createElement(PeoplePopover, null), /*#__PURE__*/_react.default.createElement(ProjectOptionsMenu, {
426
+ sourceModuleLoaded: sourceModuleLoaded
427
+ })))), /*#__PURE__*/_react.default.createElement("div", {
149
428
  className: "page-header-spacer"
150
429
  }));
151
430
  };
@@ -158,20 +437,20 @@ ProjectPageHeader.displayName = "ProjectPageHeader";
158
437
  var NAV_TABS = ["Tasks", "Discussions", "Files", "Notes", "Activity"];
159
438
  var StyledTabHeader = (0, _styledComponents.default)(_Header.Header).withConfig({
160
439
  displayName: "headers__StyledTabHeader",
161
- componentId: "sc-yf6o6n-3"
440
+ componentId: "sc-yf6o6n-4"
162
441
  })(["justify-content:space-between;align-items:center;margin-bottom:16px;min-height:64px;flex-shrink:0;"]);
163
442
  var StyledTabControls = _styledComponents.default.div.withConfig({
164
443
  displayName: "headers__StyledTabControls",
165
- componentId: "sc-yf6o6n-4"
444
+ componentId: "sc-yf6o6n-5"
166
445
  })(["display:flex;align-items:center;flex-shrink:0;gap:4px;.vertical-separator{width:1px;height:24px;background-color:var(--color-theme-400);margin:0 8px;}.filter-button{display:flex;align-items:center;gap:6px;}"]);
167
446
  /** The Tasks/Discussions/… tab bar plus the right-hand view toolbar. */
168
- var TabHeader = exports.TabHeader = function TabHeader(_ref3) {
169
- var _ref3$activeView = _ref3.activeView,
170
- activeView = _ref3$activeView === void 0 ? "list" : _ref3$activeView;
171
- var _useState3 = (0, _react.useState)(0),
172
- _useState4 = _slicedToArray(_useState3, 2),
173
- active = _useState4[0],
174
- setActive = _useState4[1];
447
+ var TabHeader = exports.TabHeader = function TabHeader(_ref4) {
448
+ var _ref4$activeView = _ref4.activeView,
449
+ activeView = _ref4$activeView === void 0 ? "list" : _ref4$activeView;
450
+ var _useState15 = (0, _react.useState)(0),
451
+ _useState16 = _slicedToArray(_useState15, 2),
452
+ active = _useState16[0],
453
+ setActive = _useState16[1];
175
454
  return /*#__PURE__*/_react.default.createElement(StyledTabHeader, null, /*#__PURE__*/_react.default.createElement(_Nav.Nav, {
176
455
  onSelect: setActive
177
456
  }, NAV_TABS.map(function (label, index) {