@activecollab/components 2.0.343 → 2.0.344
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.
- package/dist/cjs/components/Icons/collection/{SourceCode.js → GitRepository.js} +13 -11
- package/dist/cjs/components/Icons/collection/GitRepository.js.map +1 -0
- package/dist/cjs/components/Icons/collection/index.js +7 -7
- package/dist/cjs/components/Icons/collection/index.js.map +1 -1
- package/dist/cjs/presentation/shared/headers.js +259 -32
- package/dist/cjs/presentation/shared/headers.js.map +1 -1
- package/dist/esm/components/Icons/collection/GitRepository.d.ts +16 -0
- package/dist/esm/components/Icons/collection/GitRepository.d.ts.map +1 -0
- package/dist/esm/components/Icons/collection/{SourceCode.js → GitRepository.js} +13 -11
- package/dist/esm/components/Icons/collection/GitRepository.js.map +1 -0
- package/dist/esm/components/Icons/collection/index.d.ts +1 -1
- package/dist/esm/components/Icons/collection/index.d.ts.map +1 -1
- package/dist/esm/components/Icons/collection/index.js +1 -1
- package/dist/esm/components/Icons/collection/index.js.map +1 -1
- package/dist/esm/presentation/shared/headers.d.ts +8 -1
- package/dist/esm/presentation/shared/headers.d.ts.map +1 -1
- package/dist/esm/presentation/shared/headers.js +224 -30
- package/dist/esm/presentation/shared/headers.js.map +1 -1
- package/dist/index.js +229 -227
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/components/Icons/collection/SourceCode.js.map +0 -1
- package/dist/esm/components/Icons/collection/SourceCode.d.ts +0 -16
- package/dist/esm/components/Icons/collection/SourceCode.d.ts.map +0 -1
- package/dist/esm/components/Icons/collection/SourceCode.js.map +0 -1
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
2
|
import styled from "styled-components";
|
|
3
|
-
import {
|
|
3
|
+
import { CONNECTABLE_REPOSITORIES, CONNECTIONS, ConnectRepositoryDialog, serviceLabel } from "./ConnectRepositoryDialog";
|
|
4
|
+
import { RoundAvatar } from "./RoundAvatar";
|
|
5
|
+
import { AVATAR_COLORS, MD, SM, TRANSITION } from "./tokens";
|
|
4
6
|
import { Button } from "../../components/Button";
|
|
5
7
|
import { GlobalAddButton } from "../../components/Button/GlobalAddButton";
|
|
6
|
-
import {
|
|
8
|
+
import { CompleteCheckbox } from "../../components/CompleteCheckbox";
|
|
7
9
|
import { CounterButton } from "../../components/CounterButton";
|
|
10
|
+
import { Dialog } from "../../components/Dialog";
|
|
8
11
|
import { Header } from "../../components/Header";
|
|
9
12
|
import { IconButton } from "../../components/IconButton";
|
|
10
|
-
import { ArrowLeftIcon, CheckboxBlankTogglerIcon, DuplicateIcon, EditIcon, EditMultipleIcon, FilterIcon, InfoIcon, InsertLinkIcon, LabelsIcon, NotificationBellIcon, PeopleIcon, ProjectTemplateConvertIcon, ProjectTemplateIcon, StarIcon, TrashIcon, TreeDotsIcon, ViewListIcon, ViewTimelineIcon } from "../../components/Icons";
|
|
13
|
+
import { AddCrossIcon, AddCrossTinyIcon, ArrowLeftIcon, CaretRightIcon, CheckboxBlankTogglerIcon, CloseSmallIcon, CrownBlankIcon, CrownSelectedIcon, DownloadIcon, DuplicateIcon, EditIcon, EditMultipleIcon, FilterIcon, GitRepositoryIcon, InfoIcon, InsertLinkIcon, LabelsIcon, NotificationBellIcon, PeopleIcon, ProjectTemplateConvertIcon, ProjectTemplateIcon, StarIcon, TrashIcon, TreeDotsIcon, ViewListIcon, ViewTimelineIcon } from "../../components/Icons";
|
|
11
14
|
import { List, ListItem, ListSeparator } from "../../components/List";
|
|
12
|
-
import { Menu } from "../../components/Menu";
|
|
15
|
+
import { Menu, MenuHeader } from "../../components/Menu";
|
|
13
16
|
import { Item, Nav } from "../../components/Nav";
|
|
14
17
|
import { ProgressPie } from "../../components/ProgressPie";
|
|
15
18
|
import { Tooltip } from "../../components/Tooltip";
|
|
16
|
-
import { Body2, Header2, Title2 } from "../../components/Typography";
|
|
19
|
+
import { Body2, Caption1, Header2, Title2 } from "../../components/Typography";
|
|
20
|
+
|
|
21
|
+
/** Gold used for the project-leader cues (a data colour, not a theme token). */
|
|
22
|
+
const LEADER_GOLD = "#FFCC6B";
|
|
17
23
|
|
|
18
24
|
/* ------------------------------------------------------------------ */
|
|
19
25
|
/* Page header row (mirrors PageHeader.jsx) */
|
|
@@ -55,12 +61,97 @@ const StyledProjectHeaderChildren = styled.div.withConfig({
|
|
|
55
61
|
const StyledProjectMenu = styled.div.withConfig({
|
|
56
62
|
displayName: "headers__StyledProjectMenu",
|
|
57
63
|
componentId: "sc-yf6o6n-2"
|
|
58
|
-
})([".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;}"]);
|
|
59
|
-
|
|
64
|
+
})([".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;}"]);
|
|
65
|
+
|
|
66
|
+
/** Submenu row label for a connected repository: "path (Connection, Type)",
|
|
67
|
+
* matching the grouped picker headers in the Link Branch / Pull Request
|
|
68
|
+
* dialog. */
|
|
69
|
+
const repositoryMenuLabel = repo => {
|
|
70
|
+
const connection = CONNECTIONS.find(c => c.id === repo.connectionId);
|
|
71
|
+
return connection ? repo.name + " (" + connection.name + ", " + serviceLabel(connection.service) + ")" : repo.name;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The "Repositories" item and its fly-out submenu. Rendered only when the
|
|
76
|
+
* `source` module is loaded. The item carries a right caret and opens a
|
|
77
|
+
* submenu that lists the project's connected repositories (sorted by name)
|
|
78
|
+
* above a "Connect Repository" action, separated by a divider. Connecting a
|
|
79
|
+
* repository adds it to the list; clicking a repository closes the menu (and,
|
|
80
|
+
* in production, opens the repository in a new tab).
|
|
81
|
+
*/
|
|
82
|
+
const RepositoriesMenuItem = _ref2 => {
|
|
83
|
+
let repositories = _ref2.repositories,
|
|
84
|
+
onConnect = _ref2.onConnect,
|
|
85
|
+
onOpenRepository = _ref2.onOpenRepository;
|
|
60
86
|
const _useState = useState(false),
|
|
61
87
|
open = _useState[0],
|
|
62
88
|
setOpen = _useState[1];
|
|
63
89
|
return /*#__PURE__*/React.createElement(Menu, {
|
|
90
|
+
open: open,
|
|
91
|
+
onOpen: () => setOpen(true),
|
|
92
|
+
onClose: () => setOpen(false),
|
|
93
|
+
position: "right-start",
|
|
94
|
+
mode: "wider",
|
|
95
|
+
target: /*#__PURE__*/React.createElement(ListItem, {
|
|
96
|
+
className: "toggle-item submenu-item"
|
|
97
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
98
|
+
className: "opt-left"
|
|
99
|
+
}, /*#__PURE__*/React.createElement(GitRepositoryIcon, null), "Repositories"), /*#__PURE__*/React.createElement(CaretRightIcon, {
|
|
100
|
+
className: "repo-caret",
|
|
101
|
+
width: 16,
|
|
102
|
+
height: 16
|
|
103
|
+
}))
|
|
104
|
+
}, /*#__PURE__*/React.createElement(StyledProjectMenu, null, /*#__PURE__*/React.createElement(List, {
|
|
105
|
+
style: {
|
|
106
|
+
padding: "8px 0"
|
|
107
|
+
},
|
|
108
|
+
tabIndex: -1
|
|
109
|
+
}, repositories.map(repo => /*#__PURE__*/React.createElement(ListItem, {
|
|
110
|
+
key: repo.id,
|
|
111
|
+
className: "repo-row",
|
|
112
|
+
onClick: () => onOpenRepository(repo)
|
|
113
|
+
}, /*#__PURE__*/React.createElement(GitRepositoryIcon, null), /*#__PURE__*/React.createElement("span", {
|
|
114
|
+
className: "repo-name"
|
|
115
|
+
}, repositoryMenuLabel(repo)))), repositories.length > 0 ? /*#__PURE__*/React.createElement(ListSeparator, null) : null, /*#__PURE__*/React.createElement(ListItem, {
|
|
116
|
+
onClick: onConnect
|
|
117
|
+
}, /*#__PURE__*/React.createElement(AddCrossIcon, null), "Connect Repository"))));
|
|
118
|
+
};
|
|
119
|
+
const ProjectOptionsMenu = _ref3 => {
|
|
120
|
+
let _ref3$sourceModuleLoa = _ref3.sourceModuleLoaded,
|
|
121
|
+
sourceModuleLoaded = _ref3$sourceModuleLoa === void 0 ? false : _ref3$sourceModuleLoa;
|
|
122
|
+
const _useState2 = useState(false),
|
|
123
|
+
open = _useState2[0],
|
|
124
|
+
setOpen = _useState2[1];
|
|
125
|
+
const _useState3 = useState([]),
|
|
126
|
+
connectedRepos = _useState3[0],
|
|
127
|
+
setConnectedRepos = _useState3[1];
|
|
128
|
+
const _useState4 = useState(false),
|
|
129
|
+
connectOpen = _useState4[0],
|
|
130
|
+
setConnectOpen = _useState4[1];
|
|
131
|
+
const _useState5 = useState(false),
|
|
132
|
+
infoOpen = _useState5[0],
|
|
133
|
+
setInfoOpen = _useState5[1];
|
|
134
|
+
|
|
135
|
+
// Repositories still available to connect (not already on the project).
|
|
136
|
+
const connectableRepos = CONNECTABLE_REPOSITORIES.filter(r => !connectedRepos.some(c => c.id === r.id));
|
|
137
|
+
|
|
138
|
+
// Connected repositories are listed in the submenu sorted by name.
|
|
139
|
+
const sortedRepos = [...connectedRepos].sort((a, b) => a.name.localeCompare(b.name));
|
|
140
|
+
const handleConnected = repo => {
|
|
141
|
+
setConnectedRepos(prev => prev.some(r => r.id === repo.id) ? prev : [...prev, repo]);
|
|
142
|
+
};
|
|
143
|
+
const handleConnect = () => {
|
|
144
|
+
setOpen(false);
|
|
145
|
+
setConnectOpen(true);
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// In production this closes the menu and opens the repository in a new tab;
|
|
149
|
+
// in the mock we surface that behaviour in a small dialog instead.
|
|
150
|
+
const handleOpenRepository = () => {
|
|
151
|
+
setOpen(false);
|
|
152
|
+
setInfoOpen(true);
|
|
153
|
+
};
|
|
154
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Menu, {
|
|
64
155
|
open: open,
|
|
65
156
|
onOpen: () => setOpen(true),
|
|
66
157
|
onClose: () => setOpen(false),
|
|
@@ -79,22 +170,127 @@ const ProjectOptionsMenu = () => {
|
|
|
79
170
|
className: "toggle-item"
|
|
80
171
|
}, /*#__PURE__*/React.createElement("span", {
|
|
81
172
|
className: "opt-left"
|
|
82
|
-
}, /*#__PURE__*/React.createElement(StarIcon, null), "Mark as Favorite"), /*#__PURE__*/React.createElement(
|
|
83
|
-
|
|
84
|
-
|
|
173
|
+
}, /*#__PURE__*/React.createElement(StarIcon, null), "Mark as Favorite"), /*#__PURE__*/React.createElement(CompleteCheckbox, {
|
|
174
|
+
primary: true,
|
|
175
|
+
completed: true
|
|
85
176
|
})), /*#__PURE__*/React.createElement(ListItem, {
|
|
86
177
|
className: "toggle-item"
|
|
87
178
|
}, /*#__PURE__*/React.createElement("span", {
|
|
88
179
|
className: "opt-left"
|
|
89
|
-
}, /*#__PURE__*/React.createElement(NotificationBellIcon, null), "Subscribe to Everything"), /*#__PURE__*/React.createElement(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
})), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(LabelsIcon, null), "Manage Task Labels"), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(InsertLinkIcon, null), "Copy Link"), /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(CheckboxBlankTogglerIcon, null), "Complete"), /*#__PURE__*/React.createElement(
|
|
180
|
+
}, /*#__PURE__*/React.createElement(NotificationBellIcon, null), "Subscribe to Everything"), /*#__PURE__*/React.createElement(CompleteCheckbox, {
|
|
181
|
+
primary: true,
|
|
182
|
+
completed: false
|
|
183
|
+
})), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(LabelsIcon, null), "Manage Task Labels"), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(InsertLinkIcon, null), "Copy Link"), /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(CheckboxBlankTogglerIcon, null), "Complete"), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(DownloadIcon, null), "Export"), sourceModuleLoaded ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement(RepositoriesMenuItem, {
|
|
184
|
+
repositories: sortedRepos,
|
|
185
|
+
onConnect: handleConnect,
|
|
186
|
+
onOpenRepository: handleOpenRepository
|
|
187
|
+
})) : null, /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(DuplicateIcon, null), "Duplicate"), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(ProjectTemplateIcon, null), "Apply Template"), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(ProjectTemplateConvertIcon, null), "Convert to Template"), /*#__PURE__*/React.createElement(ListSeparator, null), /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(TrashIcon, null), "Delete")))), /*#__PURE__*/React.createElement(ConnectRepositoryDialog, {
|
|
188
|
+
open: connectOpen,
|
|
189
|
+
onClose: () => setConnectOpen(false),
|
|
190
|
+
onConnect: handleConnected,
|
|
191
|
+
repositories: connectableRepos,
|
|
192
|
+
connections: CONNECTIONS
|
|
193
|
+
}), /*#__PURE__*/React.createElement(Dialog, {
|
|
194
|
+
open: infoOpen,
|
|
195
|
+
onClose: () => setInfoOpen(false),
|
|
196
|
+
enableBackgroundClick: true
|
|
197
|
+
}, /*#__PURE__*/React.createElement(Dialog.Title, null, "Open Repository"), /*#__PURE__*/React.createElement(Dialog.ContentDivider, null), /*#__PURE__*/React.createElement(Dialog.Content, null, /*#__PURE__*/React.createElement(Body2, null, "In production, this click would close the menu and open the repository in a new browser tab.")), /*#__PURE__*/React.createElement(Dialog.ContentDivider, null), /*#__PURE__*/React.createElement(Dialog.Actions, null, /*#__PURE__*/React.createElement(Button, {
|
|
198
|
+
variant: "primary",
|
|
199
|
+
onClick: () => setInfoOpen(false)
|
|
200
|
+
}, "Got it"))));
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
/* People popover (mirrors the project header People dropdown): a header row
|
|
204
|
+
("People" + add button), a "Members" section and a row per member. The
|
|
205
|
+
project leader shows a gold crown; other members reveal a "set as leader"
|
|
206
|
+
crown and a remove button on hover. Clicks are no-ops. */
|
|
207
|
+
|
|
208
|
+
const PROJECT_MEMBERS = [{
|
|
209
|
+
name: "Theo Brandt",
|
|
210
|
+
initials: "TB",
|
|
211
|
+
color: AVATAR_COLORS.blue,
|
|
212
|
+
leader: true
|
|
213
|
+
}, {
|
|
214
|
+
name: "Iris Calloway",
|
|
215
|
+
initials: "IC",
|
|
216
|
+
color: AVATAR_COLORS.purple
|
|
217
|
+
}, {
|
|
218
|
+
name: "Account Director",
|
|
219
|
+
initials: "AD",
|
|
220
|
+
color: "#8A8F98"
|
|
221
|
+
}, {
|
|
222
|
+
name: "Grace Bennett",
|
|
223
|
+
initials: "GB",
|
|
224
|
+
color: AVATAR_COLORS.orange
|
|
225
|
+
}];
|
|
226
|
+
const StyledPeopleMenu = styled.div.withConfig({
|
|
227
|
+
displayName: "headers__StyledPeopleMenu",
|
|
228
|
+
componentId: "sc-yf6o6n-3"
|
|
229
|
+
})(["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;}"], TRANSITION, LEADER_GOLD, LEADER_GOLD);
|
|
230
|
+
const PeoplePopover = () => {
|
|
231
|
+
const _useState6 = useState(false),
|
|
232
|
+
open = _useState6[0],
|
|
233
|
+
setOpen = _useState6[1];
|
|
234
|
+
return /*#__PURE__*/React.createElement(Menu, {
|
|
235
|
+
open: open,
|
|
236
|
+
onOpen: () => setOpen(true),
|
|
237
|
+
onClose: () => setOpen(false),
|
|
238
|
+
position: "bottom-end",
|
|
239
|
+
target: /*#__PURE__*/React.createElement(CounterButton, {
|
|
240
|
+
label: String(PROJECT_MEMBERS.length),
|
|
241
|
+
icon: /*#__PURE__*/React.createElement(PeopleIcon, null),
|
|
242
|
+
active: open,
|
|
243
|
+
onClearAll: () => undefined
|
|
244
|
+
})
|
|
245
|
+
}, /*#__PURE__*/React.createElement(StyledPeopleMenu, null, /*#__PURE__*/React.createElement(MenuHeader, {
|
|
246
|
+
title: "People",
|
|
247
|
+
rightElement: /*#__PURE__*/React.createElement(IconButton, {
|
|
248
|
+
type: "button",
|
|
249
|
+
variant: "text gray",
|
|
250
|
+
size: "small",
|
|
251
|
+
"aria-label": "Add People"
|
|
252
|
+
}, /*#__PURE__*/React.createElement(AddCrossTinyIcon, null))
|
|
253
|
+
}), /*#__PURE__*/React.createElement(Caption1, {
|
|
254
|
+
weight: "bold",
|
|
255
|
+
className: "members-label"
|
|
256
|
+
}, "Members"), PROJECT_MEMBERS.map(member => /*#__PURE__*/React.createElement("div", {
|
|
257
|
+
className: member.leader ? "member-row leader" : "member-row",
|
|
258
|
+
key: member.name
|
|
259
|
+
}, /*#__PURE__*/React.createElement(RoundAvatar, {
|
|
260
|
+
className: "member-avatar",
|
|
261
|
+
$bg: member.color,
|
|
262
|
+
$bordered: false
|
|
263
|
+
}, member.initials), /*#__PURE__*/React.createElement(Body2, {
|
|
264
|
+
className: "member-name"
|
|
265
|
+
}, member.name), /*#__PURE__*/React.createElement("span", {
|
|
266
|
+
className: "member-right"
|
|
267
|
+
}, member.leader && /*#__PURE__*/React.createElement(CrownSelectedIcon, {
|
|
268
|
+
className: "leader-crown",
|
|
269
|
+
style: {
|
|
270
|
+
fill: LEADER_GOLD
|
|
271
|
+
}
|
|
272
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
273
|
+
className: "member-options"
|
|
274
|
+
}, !member.leader && /*#__PURE__*/React.createElement(Tooltip, {
|
|
275
|
+
title: "Set as Project Leader"
|
|
276
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
277
|
+
type: "button",
|
|
278
|
+
variant: "text gray",
|
|
279
|
+
size: "small"
|
|
280
|
+
}, /*#__PURE__*/React.createElement(CrownBlankIcon, null))), /*#__PURE__*/React.createElement(Tooltip, {
|
|
281
|
+
title: "Remove from Project"
|
|
282
|
+
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
283
|
+
type: "button",
|
|
284
|
+
variant: "text gray",
|
|
285
|
+
size: "small"
|
|
286
|
+
}, /*#__PURE__*/React.createElement(CloseSmallIcon, null)))))))));
|
|
93
287
|
};
|
|
94
288
|
/** The project page header: back arrow, title, progress, info, people, options. */
|
|
95
|
-
export const ProjectPageHeader =
|
|
96
|
-
let
|
|
97
|
-
title =
|
|
289
|
+
export const ProjectPageHeader = _ref4 => {
|
|
290
|
+
let _ref4$title = _ref4.title,
|
|
291
|
+
title = _ref4$title === void 0 ? "#131: Ime projekta" : _ref4$title,
|
|
292
|
+
_ref4$sourceModuleLoa = _ref4.sourceModuleLoaded,
|
|
293
|
+
sourceModuleLoaded = _ref4$sourceModuleLoa === void 0 ? false : _ref4$sourceModuleLoa;
|
|
98
294
|
return /*#__PURE__*/React.createElement(StyledPageHeader, null, /*#__PURE__*/React.createElement("div", {
|
|
99
295
|
className: "page-header-left"
|
|
100
296
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
@@ -117,11 +313,9 @@ export const ProjectPageHeader = _ref2 => {
|
|
|
117
313
|
title: "Project Info"
|
|
118
314
|
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
119
315
|
variant: "text gray"
|
|
120
|
-
}, /*#__PURE__*/React.createElement(InfoIcon, null))), /*#__PURE__*/React.createElement(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
onClearAll: () => undefined
|
|
124
|
-
}), /*#__PURE__*/React.createElement(ProjectOptionsMenu, null)))), /*#__PURE__*/React.createElement("div", {
|
|
316
|
+
}, /*#__PURE__*/React.createElement(InfoIcon, null))), /*#__PURE__*/React.createElement(PeoplePopover, null), /*#__PURE__*/React.createElement(ProjectOptionsMenu, {
|
|
317
|
+
sourceModuleLoaded: sourceModuleLoaded
|
|
318
|
+
})))), /*#__PURE__*/React.createElement("div", {
|
|
125
319
|
className: "page-header-spacer"
|
|
126
320
|
}));
|
|
127
321
|
};
|
|
@@ -134,19 +328,19 @@ ProjectPageHeader.displayName = "ProjectPageHeader";
|
|
|
134
328
|
const NAV_TABS = ["Tasks", "Discussions", "Files", "Notes", "Activity"];
|
|
135
329
|
const StyledTabHeader = styled(Header).withConfig({
|
|
136
330
|
displayName: "headers__StyledTabHeader",
|
|
137
|
-
componentId: "sc-yf6o6n-
|
|
331
|
+
componentId: "sc-yf6o6n-4"
|
|
138
332
|
})(["justify-content:space-between;align-items:center;margin-bottom:16px;min-height:64px;flex-shrink:0;"]);
|
|
139
333
|
const StyledTabControls = styled.div.withConfig({
|
|
140
334
|
displayName: "headers__StyledTabControls",
|
|
141
|
-
componentId: "sc-yf6o6n-
|
|
335
|
+
componentId: "sc-yf6o6n-5"
|
|
142
336
|
})(["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;}"]);
|
|
143
337
|
/** The Tasks/Discussions/… tab bar plus the right-hand view toolbar. */
|
|
144
|
-
export const TabHeader =
|
|
145
|
-
let
|
|
146
|
-
activeView =
|
|
147
|
-
const
|
|
148
|
-
active =
|
|
149
|
-
setActive =
|
|
338
|
+
export const TabHeader = _ref5 => {
|
|
339
|
+
let _ref5$activeView = _ref5.activeView,
|
|
340
|
+
activeView = _ref5$activeView === void 0 ? "list" : _ref5$activeView;
|
|
341
|
+
const _useState7 = useState(0),
|
|
342
|
+
active = _useState7[0],
|
|
343
|
+
setActive = _useState7[1];
|
|
150
344
|
return /*#__PURE__*/React.createElement(StyledTabHeader, null, /*#__PURE__*/React.createElement(Nav, {
|
|
151
345
|
onSelect: setActive
|
|
152
346
|
}, NAV_TABS.map((label, index) => /*#__PURE__*/React.createElement(Item, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.js","names":["React","useState","styled","MD","SM","Button","GlobalAddButton","Checkbox","CounterButton","Header","IconButton","ArrowLeftIcon","CheckboxBlankTogglerIcon","DuplicateIcon","EditIcon","EditMultipleIcon","FilterIcon","InfoIcon","InsertLinkIcon","LabelsIcon","NotificationBellIcon","PeopleIcon","ProjectTemplateConvertIcon","ProjectTemplateIcon","StarIcon","TrashIcon","TreeDotsIcon","ViewListIcon","ViewTimelineIcon","List","ListItem","ListSeparator","Menu","Item","Nav","ProgressPie","Tooltip","Body2","Header2","Title2","StyledPageHeader","div","withConfig","displayName","componentId","PageHeader","_ref","title","children","createElement","className","StyledProjectHeaderChildren","StyledProjectMenu","ProjectOptionsMenu","_useState","open","setOpen","onOpen","onClose","position","target","type","variant","active","style","padding","tabIndex","id","onChange","undefined","ProjectPageHeader","_ref2","_ref2$title","radius","progress","progressColor","backgroundColor","label","icon","onClearAll","NAV_TABS","StyledTabHeader","StyledTabControls","TabHeader","_ref3","_ref3$activeView","activeView","_useState2","setActive","onSelect","map","index","key","name","color","weight","transform"],"sources":["../../../../src/presentation/shared/headers.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { MD, SM } from \"./tokens\";\nimport { Button } from \"../../components/Button\";\nimport { GlobalAddButton } from \"../../components/Button/GlobalAddButton\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { CounterButton } from \"../../components/CounterButton\";\nimport { Header } from \"../../components/Header\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n ArrowLeftIcon,\n CheckboxBlankTogglerIcon,\n DuplicateIcon,\n EditIcon,\n EditMultipleIcon,\n FilterIcon,\n InfoIcon,\n InsertLinkIcon,\n LabelsIcon,\n NotificationBellIcon,\n PeopleIcon,\n ProjectTemplateConvertIcon,\n ProjectTemplateIcon,\n StarIcon,\n TrashIcon,\n TreeDotsIcon,\n ViewListIcon,\n ViewTimelineIcon,\n} from \"../../components/Icons\";\nimport { List, ListItem, ListSeparator } from \"../../components/List\";\nimport { Menu } from \"../../components/Menu\";\nimport { Item, Nav } from \"../../components/Nav\";\nimport { ProgressPie } from \"../../components/ProgressPie\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2, Header2, Title2 } from \"../../components/Typography\";\n\n/* ------------------------------------------------------------------ */\n/* Page header row (mirrors PageHeader.jsx) */\n/* ------------------------------------------------------------------ */\n\nconst StyledPageHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 12px 0;\n width: 100%;\n height: 40px;\n flex-shrink: 0;\n\n .page-header-left {\n display: flex;\n align-items: center;\n width: 100%;\n max-width: 100%;\n\n @media (min-width: ${SM}) {\n min-width: 0;\n }\n }\n\n /* back button spacing (tw-shrink-0 tw-mr-1 md:tw-mr-2) */\n .back-button {\n flex-shrink: 0;\n margin-right: 4px;\n\n @media (min-width: ${MD}) {\n margin-right: 8px;\n }\n }\n\n .page-title-desktop {\n display: none;\n margin-right: 8px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n @media (min-width: ${MD}) {\n display: block;\n }\n }\n\n .page-title-mobile {\n display: block;\n margin-right: 8px;\n font-weight: 300;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n @media (min-width: ${MD}) {\n display: none;\n }\n }\n\n .page-header-children {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n }\n\n /* spacer that keeps the header clear of the absolutely positioned\n top-right controls, same as in the app (tw-w-52) */\n .page-header-spacer {\n display: none;\n height: 100%;\n width: 208px;\n flex-shrink: 0;\n\n @media (min-width: ${SM}) {\n display: flex;\n }\n }\n`;\n\nexport interface PageHeaderProps {\n title: string;\n children?: ReactNode;\n}\n\n/** Generic page header (title + optional controls), mirrors PageHeader.jsx. */\nexport const PageHeader = ({\n title,\n children,\n}: PageHeaderProps): ReactElement => (\n <StyledPageHeader>\n <div className=\"page-header-left\">\n <Title2 className=\"page-title-desktop\">{title}</Title2>\n <Header2 className=\"page-title-mobile\">{title}</Header2>\n <div className=\"page-header-children\">{children}</div>\n </div>\n <div className=\"page-header-spacer\" />\n </StyledPageHeader>\n);\n\nPageHeader.displayName = \"PageHeader\";\n\n/* ------------------------------------------------------------------ */\n/* Project page header (mirrors ProjectPage.js Page.Header children) */\n/* ------------------------------------------------------------------ */\n\nconst StyledProjectHeaderChildren = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n\n .project-progress {\n display: flex;\n align-items: center;\n margin-left: 4px;\n }\n`;\n\n/* Project \"...\" options menu (Menu + List with leading-icon items). Two items\n (Favorite, Subscribe) have a checkbox on the right. Clicks are no-ops. */\nconst StyledProjectMenu = styled.div`\n .toggle-item {\n justify-content: space-between;\n }\n\n .toggle-item .opt-left {\n display: flex;\n align-items: center;\n min-width: 0;\n }\n\n .toggle-item .opt-left svg {\n margin-right: 8px;\n flex-shrink: 0;\n }\n`;\n\nconst ProjectOptionsMenu = (): ReactElement => {\n const [open, setOpen] = useState(false);\n return (\n <Menu\n open={open}\n onOpen={() => setOpen(true)}\n onClose={() => setOpen(false)}\n position=\"bottom-end\"\n target={\n <IconButton type=\"button\" variant=\"text gray\" active={open}>\n <TreeDotsIcon />\n </IconButton>\n }\n >\n <StyledProjectMenu>\n <List style={{ padding: \"8px 0\" }} tabIndex={-1}>\n <ListItem>\n <EditIcon />\n Edit\n </ListItem>\n <ListItem className=\"toggle-item\">\n <span className=\"opt-left\">\n <StarIcon />\n Mark as Favorite\n </span>\n <Checkbox id=\"proj-favorite\" onChange={() => undefined} />\n </ListItem>\n <ListItem className=\"toggle-item\">\n <span className=\"opt-left\">\n <NotificationBellIcon />\n Subscribe to Everything\n </span>\n <Checkbox id=\"proj-subscribe\" onChange={() => undefined} />\n </ListItem>\n <ListItem>\n <LabelsIcon />\n Manage Task Labels\n </ListItem>\n <ListItem>\n <InsertLinkIcon />\n Copy Link\n </ListItem>\n <ListSeparator />\n <ListItem>\n <CheckboxBlankTogglerIcon />\n Complete\n </ListItem>\n <ListSeparator />\n <ListItem>\n <DuplicateIcon />\n Duplicate\n </ListItem>\n <ListItem>\n <ProjectTemplateIcon />\n Apply Template\n </ListItem>\n <ListItem>\n <ProjectTemplateConvertIcon />\n Convert to Template\n </ListItem>\n <ListSeparator />\n <ListItem>\n <TrashIcon />\n Delete\n </ListItem>\n </List>\n </StyledProjectMenu>\n </Menu>\n );\n};\n\nexport interface ProjectPageHeaderProps {\n title?: string;\n}\n\n/** The project page header: back arrow, title, progress, info, people, options. */\nexport const ProjectPageHeader = ({\n title = \"#131: Ime projekta\",\n}: ProjectPageHeaderProps): ReactElement => (\n <StyledPageHeader>\n <div className=\"page-header-left\">\n <IconButton variant=\"text gray\" className=\"back-button\">\n <ArrowLeftIcon />\n </IconButton>\n <Title2 className=\"page-title-desktop\">{title}</Title2>\n <Header2 className=\"page-title-mobile\">{title}</Header2>\n <div className=\"page-header-children\">\n <StyledProjectHeaderChildren>\n <span className=\"project-progress\">\n <ProgressPie\n radius={11}\n progress={64}\n progressColor=\"var(--color-secondary)\"\n backgroundColor=\"var(--color-theme-300)\"\n />\n </span>\n <Tooltip title=\"Project Info\">\n <IconButton variant=\"text gray\">\n <InfoIcon />\n </IconButton>\n </Tooltip>\n <CounterButton\n label=\"5\"\n icon={<PeopleIcon />}\n onClearAll={() => undefined}\n />\n <ProjectOptionsMenu />\n </StyledProjectHeaderChildren>\n </div>\n </div>\n <div className=\"page-header-spacer\" />\n </StyledPageHeader>\n);\n\nProjectPageHeader.displayName = \"ProjectPageHeader\";\n\n/* ------------------------------------------------------------------ */\n/* Tab bar (mirrors the <Header> with <Nav> on ProjectPage.js) */\n/* ------------------------------------------------------------------ */\n\nconst NAV_TABS = [\"Tasks\", \"Discussions\", \"Files\", \"Notes\", \"Activity\"];\n\nconst StyledTabHeader = styled(Header)`\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n min-height: 64px;\n flex-shrink: 0;\n`;\n\nconst StyledTabControls = styled.div`\n display: flex;\n align-items: center;\n flex-shrink: 0;\n gap: 4px;\n\n .vertical-separator {\n width: 1px;\n height: 24px;\n background-color: var(--color-theme-400);\n margin: 0 8px;\n }\n\n .filter-button {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n`;\n\nexport interface TabHeaderProps {\n /** Which view-mode toggle is highlighted as active. */\n activeView?: \"list\" | \"column\" | \"timeline\";\n}\n\n/** The Tasks/Discussions/… tab bar plus the right-hand view toolbar. */\nexport const TabHeader = ({\n activeView = \"list\",\n}: TabHeaderProps): ReactElement => {\n const [active, setActive] = useState(0);\n return (\n <StyledTabHeader>\n <Nav onSelect={setActive}>\n {NAV_TABS.map((label, index) => (\n <Item active={index === active} key={label} name={label}>\n <Body2 color=\"secondary\" weight=\"medium\">\n {label}\n </Body2>\n </Item>\n ))}\n </Nav>\n <StyledTabControls>\n <Tooltip title=\"Batch Edit\">\n <IconButton variant=\"text gray\">\n <EditMultipleIcon />\n </IconButton>\n </Tooltip>\n <span className=\"vertical-separator\" />\n <Button variant=\"text gray\" className=\"filter-button\">\n <FilterIcon />\n Filter\n </Button>\n <Tooltip title=\"List view\">\n <IconButton variant=\"text gray\" active={activeView === \"list\"}>\n <ViewListIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Column view\">\n <IconButton variant=\"text gray\" active={activeView === \"column\"}>\n <ViewListIcon style={{ transform: \"rotate(90deg)\" }} />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Timeline view\">\n <IconButton variant=\"text gray\" active={activeView === \"timeline\"}>\n <ViewTimelineIcon />\n </IconButton>\n </Tooltip>\n <span className=\"vertical-separator\" />\n <Tooltip title=\"Add New\">\n <GlobalAddButton />\n </Tooltip>\n </StyledTabControls>\n </StyledTabHeader>\n );\n};\n\nTabHeader.displayName = \"TabHeader\";\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"headers.js","names":["React","useState","styled","CONNECTABLE_REPOSITORIES","CONNECTIONS","ConnectRepositoryDialog","serviceLabel","RoundAvatar","AVATAR_COLORS","MD","SM","TRANSITION","Button","GlobalAddButton","CompleteCheckbox","CounterButton","Dialog","Header","IconButton","AddCrossIcon","AddCrossTinyIcon","ArrowLeftIcon","CaretRightIcon","CheckboxBlankTogglerIcon","CloseSmallIcon","CrownBlankIcon","CrownSelectedIcon","DownloadIcon","DuplicateIcon","EditIcon","EditMultipleIcon","FilterIcon","GitRepositoryIcon","InfoIcon","InsertLinkIcon","LabelsIcon","NotificationBellIcon","PeopleIcon","ProjectTemplateConvertIcon","ProjectTemplateIcon","StarIcon","TrashIcon","TreeDotsIcon","ViewListIcon","ViewTimelineIcon","List","ListItem","ListSeparator","Menu","MenuHeader","Item","Nav","ProgressPie","Tooltip","Body2","Caption1","Header2","Title2","LEADER_GOLD","StyledPageHeader","div","withConfig","displayName","componentId","PageHeader","_ref","title","children","createElement","className","StyledProjectHeaderChildren","StyledProjectMenu","repositoryMenuLabel","repo","connection","find","c","id","connectionId","name","service","RepositoriesMenuItem","_ref2","repositories","onConnect","onOpenRepository","_useState","open","setOpen","onOpen","onClose","position","mode","target","width","height","style","padding","tabIndex","map","key","onClick","length","ProjectOptionsMenu","_ref3","_ref3$sourceModuleLoa","sourceModuleLoaded","_useState2","_useState3","connectedRepos","setConnectedRepos","_useState4","connectOpen","setConnectOpen","_useState5","infoOpen","setInfoOpen","connectableRepos","filter","r","some","sortedRepos","sort","a","b","localeCompare","handleConnected","prev","handleConnect","handleOpenRepository","Fragment","type","variant","active","primary","completed","connections","enableBackgroundClick","Title","ContentDivider","Content","Actions","PROJECT_MEMBERS","initials","color","blue","leader","purple","orange","StyledPeopleMenu","PeoplePopover","_useState6","label","String","icon","onClearAll","undefined","rightElement","size","weight","member","$bg","$bordered","fill","ProjectPageHeader","_ref4","_ref4$title","_ref4$sourceModuleLoa","radius","progress","progressColor","backgroundColor","NAV_TABS","StyledTabHeader","StyledTabControls","TabHeader","_ref5","_ref5$activeView","activeView","_useState7","setActive","onSelect","index","transform"],"sources":["../../../../src/presentation/shared/headers.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport {\n CONNECTABLE_REPOSITORIES,\n CONNECTIONS,\n ConnectRepositoryDialog,\n Repository,\n serviceLabel,\n} from \"./ConnectRepositoryDialog\";\nimport { RoundAvatar } from \"./RoundAvatar\";\nimport { AVATAR_COLORS, MD, SM, TRANSITION } from \"./tokens\";\nimport { Button } from \"../../components/Button\";\nimport { GlobalAddButton } from \"../../components/Button/GlobalAddButton\";\nimport { CompleteCheckbox } from \"../../components/CompleteCheckbox\";\nimport { CounterButton } from \"../../components/CounterButton\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { Header } from \"../../components/Header\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n AddCrossIcon,\n AddCrossTinyIcon,\n ArrowLeftIcon,\n CaretRightIcon,\n CheckboxBlankTogglerIcon,\n CloseSmallIcon,\n CrownBlankIcon,\n CrownSelectedIcon,\n DownloadIcon,\n DuplicateIcon,\n EditIcon,\n EditMultipleIcon,\n FilterIcon,\n GitRepositoryIcon,\n InfoIcon,\n InsertLinkIcon,\n LabelsIcon,\n NotificationBellIcon,\n PeopleIcon,\n ProjectTemplateConvertIcon,\n ProjectTemplateIcon,\n StarIcon,\n TrashIcon,\n TreeDotsIcon,\n ViewListIcon,\n ViewTimelineIcon,\n} from \"../../components/Icons\";\nimport { List, ListItem, ListSeparator } from \"../../components/List\";\nimport { Menu, MenuHeader } from \"../../components/Menu\";\nimport { Item, Nav } from \"../../components/Nav\";\nimport { ProgressPie } from \"../../components/ProgressPie\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2, Caption1, Header2, Title2 } from \"../../components/Typography\";\n\n/** Gold used for the project-leader cues (a data colour, not a theme token). */\nconst LEADER_GOLD = \"#FFCC6B\";\n\n/* ------------------------------------------------------------------ */\n/* Page header row (mirrors PageHeader.jsx) */\n/* ------------------------------------------------------------------ */\n\nconst StyledPageHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 12px 0;\n width: 100%;\n height: 40px;\n flex-shrink: 0;\n\n .page-header-left {\n display: flex;\n align-items: center;\n width: 100%;\n max-width: 100%;\n\n @media (min-width: ${SM}) {\n min-width: 0;\n }\n }\n\n /* back button spacing (tw-shrink-0 tw-mr-1 md:tw-mr-2) */\n .back-button {\n flex-shrink: 0;\n margin-right: 4px;\n\n @media (min-width: ${MD}) {\n margin-right: 8px;\n }\n }\n\n .page-title-desktop {\n display: none;\n margin-right: 8px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n @media (min-width: ${MD}) {\n display: block;\n }\n }\n\n .page-title-mobile {\n display: block;\n margin-right: 8px;\n font-weight: 300;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n @media (min-width: ${MD}) {\n display: none;\n }\n }\n\n .page-header-children {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n }\n\n /* spacer that keeps the header clear of the absolutely positioned\n top-right controls, same as in the app (tw-w-52) */\n .page-header-spacer {\n display: none;\n height: 100%;\n width: 208px;\n flex-shrink: 0;\n\n @media (min-width: ${SM}) {\n display: flex;\n }\n }\n`;\n\nexport interface PageHeaderProps {\n title: string;\n children?: ReactNode;\n}\n\n/** Generic page header (title + optional controls), mirrors PageHeader.jsx. */\nexport const PageHeader = ({\n title,\n children,\n}: PageHeaderProps): ReactElement => (\n <StyledPageHeader>\n <div className=\"page-header-left\">\n <Title2 className=\"page-title-desktop\">{title}</Title2>\n <Header2 className=\"page-title-mobile\">{title}</Header2>\n <div className=\"page-header-children\">{children}</div>\n </div>\n <div className=\"page-header-spacer\" />\n </StyledPageHeader>\n);\n\nPageHeader.displayName = \"PageHeader\";\n\n/* ------------------------------------------------------------------ */\n/* Project page header (mirrors ProjectPage.js Page.Header children) */\n/* ------------------------------------------------------------------ */\n\nconst StyledProjectHeaderChildren = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n\n .project-progress {\n display: flex;\n align-items: center;\n margin-left: 4px;\n }\n`;\n\n/* Project \"...\" options menu (Menu + List with leading-icon items). Two items\n (Favorite, Subscribe) have a checkbox on the right. Clicks are no-ops. */\nconst StyledProjectMenu = styled.div`\n .toggle-item {\n justify-content: space-between;\n }\n\n .toggle-item .opt-left {\n display: flex;\n align-items: center;\n min-width: 0;\n }\n\n .toggle-item .opt-left svg {\n margin-right: 8px;\n flex-shrink: 0;\n }\n\n /* the app renders the toggle as a small rounded (not circular) CompleteCheckbox */\n .toggle-item .c-complete-checkbox {\n width: 16px;\n height: 16px;\n border-radius: 3px;\n align-self: center;\n flex-shrink: 0;\n }\n\n /* \"Repositories\" item: caret pushed to the right edge */\n .submenu-item {\n justify-content: space-between;\n }\n\n .submenu-item .repo-caret {\n flex-shrink: 0;\n fill: var(--color-theme-600);\n }\n\n /* a connected-repository row inside the submenu — long \"path (Connection,\n Type)\" labels truncate with an ellipsis rather than wrapping */\n .repo-row {\n min-width: 0;\n }\n\n .repo-row > svg {\n flex-shrink: 0;\n }\n\n .repo-name {\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`;\n\n/** Submenu row label for a connected repository: \"path (Connection, Type)\",\n * matching the grouped picker headers in the Link Branch / Pull Request\n * dialog. */\nconst repositoryMenuLabel = (repo: Repository): string => {\n const connection = CONNECTIONS.find((c) => c.id === repo.connectionId);\n return connection\n ? `${repo.name} (${connection.name}, ${serviceLabel(connection.service)})`\n : repo.name;\n};\n\n/**\n * The \"Repositories\" item and its fly-out submenu. Rendered only when the\n * `source` module is loaded. The item carries a right caret and opens a\n * submenu that lists the project's connected repositories (sorted by name)\n * above a \"Connect Repository\" action, separated by a divider. Connecting a\n * repository adds it to the list; clicking a repository closes the menu (and,\n * in production, opens the repository in a new tab).\n */\nconst RepositoriesMenuItem = ({\n repositories,\n onConnect,\n onOpenRepository,\n}: {\n repositories: Repository[];\n onConnect: () => void;\n onOpenRepository: (repository: Repository) => void;\n}): ReactElement => {\n const [open, setOpen] = useState(false);\n\n return (\n <Menu\n open={open}\n onOpen={() => setOpen(true)}\n onClose={() => setOpen(false)}\n position=\"right-start\"\n mode=\"wider\"\n target={\n <ListItem className=\"toggle-item submenu-item\">\n <span className=\"opt-left\">\n <GitRepositoryIcon />\n Repositories\n </span>\n <CaretRightIcon className=\"repo-caret\" width={16} height={16} />\n </ListItem>\n }\n >\n <StyledProjectMenu>\n <List style={{ padding: \"8px 0\" }} tabIndex={-1}>\n {repositories.map((repo) => (\n <ListItem\n key={repo.id}\n className=\"repo-row\"\n onClick={() => onOpenRepository(repo)}\n >\n <GitRepositoryIcon />\n <span className=\"repo-name\">{repositoryMenuLabel(repo)}</span>\n </ListItem>\n ))}\n {repositories.length > 0 ? <ListSeparator /> : null}\n <ListItem onClick={onConnect}>\n <AddCrossIcon />\n Connect Repository\n </ListItem>\n </List>\n </StyledProjectMenu>\n </Menu>\n );\n};\n\nexport interface ProjectOptionsMenuProps {\n /** When the `source` module is loaded, show the Repositories section. */\n sourceModuleLoaded?: boolean;\n}\n\nconst ProjectOptionsMenu = ({\n sourceModuleLoaded = false,\n}: ProjectOptionsMenuProps): ReactElement => {\n const [open, setOpen] = useState(false);\n const [connectedRepos, setConnectedRepos] = useState<Repository[]>([]);\n const [connectOpen, setConnectOpen] = useState(false);\n const [infoOpen, setInfoOpen] = useState(false);\n\n // Repositories still available to connect (not already on the project).\n const connectableRepos = CONNECTABLE_REPOSITORIES.filter(\n (r) => !connectedRepos.some((c) => c.id === r.id)\n );\n\n // Connected repositories are listed in the submenu sorted by name.\n const sortedRepos = [...connectedRepos].sort((a, b) =>\n a.name.localeCompare(b.name)\n );\n\n const handleConnected = (repo: Repository): void => {\n setConnectedRepos((prev) =>\n prev.some((r) => r.id === repo.id) ? prev : [...prev, repo]\n );\n };\n\n const handleConnect = (): void => {\n setOpen(false);\n setConnectOpen(true);\n };\n\n // In production this closes the menu and opens the repository in a new tab;\n // in the mock we surface that behaviour in a small dialog instead.\n const handleOpenRepository = (): void => {\n setOpen(false);\n setInfoOpen(true);\n };\n\n return (\n <>\n <Menu\n open={open}\n onOpen={() => setOpen(true)}\n onClose={() => setOpen(false)}\n position=\"bottom-end\"\n target={\n <IconButton type=\"button\" variant=\"text gray\" active={open}>\n <TreeDotsIcon />\n </IconButton>\n }\n >\n <StyledProjectMenu>\n <List style={{ padding: \"8px 0\" }} tabIndex={-1}>\n <ListItem>\n <EditIcon />\n Edit\n </ListItem>\n <ListItem className=\"toggle-item\">\n <span className=\"opt-left\">\n <StarIcon />\n Mark as Favorite\n </span>\n <CompleteCheckbox primary completed />\n </ListItem>\n <ListItem className=\"toggle-item\">\n <span className=\"opt-left\">\n <NotificationBellIcon />\n Subscribe to Everything\n </span>\n <CompleteCheckbox primary completed={false} />\n </ListItem>\n <ListItem>\n <LabelsIcon />\n Manage Task Labels\n </ListItem>\n <ListItem>\n <InsertLinkIcon />\n Copy Link\n </ListItem>\n <ListSeparator />\n <ListItem>\n <CheckboxBlankTogglerIcon />\n Complete\n </ListItem>\n <ListItem>\n <DownloadIcon />\n Export\n </ListItem>\n {sourceModuleLoaded ? (\n <>\n <ListSeparator />\n <RepositoriesMenuItem\n repositories={sortedRepos}\n onConnect={handleConnect}\n onOpenRepository={handleOpenRepository}\n />\n </>\n ) : null}\n <ListSeparator />\n <ListItem>\n <DuplicateIcon />\n Duplicate\n </ListItem>\n <ListItem>\n <ProjectTemplateIcon />\n Apply Template\n </ListItem>\n <ListItem>\n <ProjectTemplateConvertIcon />\n Convert to Template\n </ListItem>\n <ListSeparator />\n <ListItem>\n <TrashIcon />\n Delete\n </ListItem>\n </List>\n </StyledProjectMenu>\n </Menu>\n\n <ConnectRepositoryDialog\n open={connectOpen}\n onClose={() => setConnectOpen(false)}\n onConnect={handleConnected}\n repositories={connectableRepos}\n connections={CONNECTIONS}\n />\n\n <Dialog\n open={infoOpen}\n onClose={() => setInfoOpen(false)}\n enableBackgroundClick\n >\n <Dialog.Title>Open Repository</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <Body2>\n In production, this click would close the menu and open the\n repository in a new browser tab.\n </Body2>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions>\n <Button variant=\"primary\" onClick={() => setInfoOpen(false)}>\n Got it\n </Button>\n </Dialog.Actions>\n </Dialog>\n </>\n );\n};\n\n/* People popover (mirrors the project header People dropdown): a header row\n (\"People\" + add button), a \"Members\" section and a row per member. The\n project leader shows a gold crown; other members reveal a \"set as leader\"\n crown and a remove button on hover. Clicks are no-ops. */\ninterface ProjectMember {\n name: string;\n initials: string;\n color: string;\n leader?: boolean;\n}\n\nconst PROJECT_MEMBERS: ProjectMember[] = [\n {\n name: \"Theo Brandt\",\n initials: \"TB\",\n color: AVATAR_COLORS.blue,\n leader: true,\n },\n { name: \"Iris Calloway\", initials: \"IC\", color: AVATAR_COLORS.purple },\n { name: \"Account Director\", initials: \"AD\", color: \"#8A8F98\" },\n { name: \"Grace Bennett\", initials: \"GB\", color: AVATAR_COLORS.orange },\n];\n\nconst StyledPeopleMenu = styled.div`\n width: 256px;\n\n .members-label {\n display: block;\n margin: 8px 0;\n padding: 0 16px;\n }\n\n .member-row {\n position: relative;\n display: flex;\n align-items: center;\n min-height: 40px;\n margin: 0 8px;\n padding: 2px 8px;\n border-radius: 4px;\n cursor: default;\n transition: background-color ${TRANSITION};\n }\n\n .member-row:hover {\n background-color: var(--color-theme-200);\n }\n\n /* gold left bar on the project-leader row */\n .member-row.leader::before {\n content: \"\";\n position: absolute;\n top: 4px;\n bottom: 4px;\n left: 0;\n width: 4px;\n border-radius: 4px;\n background-color: ${LEADER_GOLD};\n }\n\n /* gold ring on the leader's avatar */\n .member-row.leader .member-avatar {\n outline: 2px solid ${LEADER_GOLD};\n outline-offset: -2px;\n }\n\n .member-name {\n flex: 1;\n margin-left: 12px;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .member-right {\n display: flex;\n align-items: center;\n gap: 2px;\n flex-shrink: 0;\n margin-left: 8px;\n }\n\n .leader-crown {\n flex-shrink: 0;\n }\n\n /* member actions (set-as-leader / remove) appear on hover, like the app */\n .member-options {\n display: none;\n align-items: center;\n gap: 2px;\n }\n\n .member-row:hover .member-options {\n display: flex;\n }\n`;\n\nconst PeoplePopover = (): ReactElement => {\n const [open, setOpen] = useState(false);\n return (\n <Menu\n open={open}\n onOpen={() => setOpen(true)}\n onClose={() => setOpen(false)}\n position=\"bottom-end\"\n target={\n <CounterButton\n label={String(PROJECT_MEMBERS.length)}\n icon={<PeopleIcon />}\n active={open}\n onClearAll={() => undefined}\n />\n }\n >\n <StyledPeopleMenu>\n <MenuHeader\n title=\"People\"\n rightElement={\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n size=\"small\"\n aria-label=\"Add People\"\n >\n <AddCrossTinyIcon />\n </IconButton>\n }\n />\n <Caption1 weight=\"bold\" className=\"members-label\">\n Members\n </Caption1>\n {PROJECT_MEMBERS.map((member) => (\n <div\n className={member.leader ? \"member-row leader\" : \"member-row\"}\n key={member.name}\n >\n <RoundAvatar\n className=\"member-avatar\"\n $bg={member.color}\n $bordered={false}\n >\n {member.initials}\n </RoundAvatar>\n <Body2 className=\"member-name\">{member.name}</Body2>\n <span className=\"member-right\">\n {member.leader && (\n <CrownSelectedIcon\n className=\"leader-crown\"\n style={{ fill: LEADER_GOLD }}\n />\n )}\n <span className=\"member-options\">\n {!member.leader && (\n <Tooltip title=\"Set as Project Leader\">\n <IconButton type=\"button\" variant=\"text gray\" size=\"small\">\n <CrownBlankIcon />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip title=\"Remove from Project\">\n <IconButton type=\"button\" variant=\"text gray\" size=\"small\">\n <CloseSmallIcon />\n </IconButton>\n </Tooltip>\n </span>\n </span>\n </div>\n ))}\n </StyledPeopleMenu>\n </Menu>\n );\n};\n\nexport interface ProjectPageHeaderProps {\n title?: string;\n /** When the `source` module is loaded, the \"...\" menu shows a Repositories\n * section (connected repositories + Connect Repository). */\n sourceModuleLoaded?: boolean;\n}\n\n/** The project page header: back arrow, title, progress, info, people, options. */\nexport const ProjectPageHeader = ({\n title = \"#131: Ime projekta\",\n sourceModuleLoaded = false,\n}: ProjectPageHeaderProps): ReactElement => (\n <StyledPageHeader>\n <div className=\"page-header-left\">\n <IconButton variant=\"text gray\" className=\"back-button\">\n <ArrowLeftIcon />\n </IconButton>\n <Title2 className=\"page-title-desktop\">{title}</Title2>\n <Header2 className=\"page-title-mobile\">{title}</Header2>\n <div className=\"page-header-children\">\n <StyledProjectHeaderChildren>\n <span className=\"project-progress\">\n <ProgressPie\n radius={11}\n progress={64}\n progressColor=\"var(--color-secondary)\"\n backgroundColor=\"var(--color-theme-300)\"\n />\n </span>\n <Tooltip title=\"Project Info\">\n <IconButton variant=\"text gray\">\n <InfoIcon />\n </IconButton>\n </Tooltip>\n <PeoplePopover />\n <ProjectOptionsMenu sourceModuleLoaded={sourceModuleLoaded} />\n </StyledProjectHeaderChildren>\n </div>\n </div>\n <div className=\"page-header-spacer\" />\n </StyledPageHeader>\n);\n\nProjectPageHeader.displayName = \"ProjectPageHeader\";\n\n/* ------------------------------------------------------------------ */\n/* Tab bar (mirrors the <Header> with <Nav> on ProjectPage.js) */\n/* ------------------------------------------------------------------ */\n\nconst NAV_TABS = [\"Tasks\", \"Discussions\", \"Files\", \"Notes\", \"Activity\"];\n\nconst StyledTabHeader = styled(Header)`\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n min-height: 64px;\n flex-shrink: 0;\n`;\n\nconst StyledTabControls = styled.div`\n display: flex;\n align-items: center;\n flex-shrink: 0;\n gap: 4px;\n\n .vertical-separator {\n width: 1px;\n height: 24px;\n background-color: var(--color-theme-400);\n margin: 0 8px;\n }\n\n .filter-button {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n`;\n\nexport interface TabHeaderProps {\n /** Which view-mode toggle is highlighted as active. */\n activeView?: \"list\" | \"column\" | \"timeline\";\n}\n\n/** The Tasks/Discussions/… tab bar plus the right-hand view toolbar. */\nexport const TabHeader = ({\n activeView = \"list\",\n}: TabHeaderProps): ReactElement => {\n const [active, setActive] = useState(0);\n return (\n <StyledTabHeader>\n <Nav onSelect={setActive}>\n {NAV_TABS.map((label, index) => (\n <Item active={index === active} key={label} name={label}>\n <Body2 color=\"secondary\" weight=\"medium\">\n {label}\n </Body2>\n </Item>\n ))}\n </Nav>\n <StyledTabControls>\n <Tooltip title=\"Batch Edit\">\n <IconButton variant=\"text gray\">\n <EditMultipleIcon />\n </IconButton>\n </Tooltip>\n <span className=\"vertical-separator\" />\n <Button variant=\"text gray\" className=\"filter-button\">\n <FilterIcon />\n Filter\n </Button>\n <Tooltip title=\"List view\">\n <IconButton variant=\"text gray\" active={activeView === \"list\"}>\n <ViewListIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Column view\">\n <IconButton variant=\"text gray\" active={activeView === \"column\"}>\n <ViewListIcon style={{ transform: \"rotate(90deg)\" }} />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Timeline view\">\n <IconButton variant=\"text gray\" active={activeView === \"timeline\"}>\n <ViewTimelineIcon />\n </IconButton>\n </Tooltip>\n <span className=\"vertical-separator\" />\n <Tooltip title=\"Add New\">\n <GlobalAddButton />\n </Tooltip>\n </StyledTabControls>\n </StyledTabHeader>\n );\n};\n\nTabHeader.displayName = \"TabHeader\";\n"],"mappings":"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","ignoreList":[]}
|