@activecollab/components 2.0.397 → 2.0.399

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 (61) hide show
  1. package/dist/cjs/presentation/whiteboard/bottomDock.js +194 -0
  2. package/dist/cjs/presentation/whiteboard/bottomDock.js.map +1 -0
  3. package/dist/cjs/presentation/whiteboard/canvasElements.js +877 -0
  4. package/dist/cjs/presentation/whiteboard/canvasElements.js.map +1 -0
  5. package/dist/cjs/presentation/whiteboard/elements.js +816 -0
  6. package/dist/cjs/presentation/whiteboard/elements.js.map +1 -0
  7. package/dist/cjs/presentation/whiteboard/fileElement.js +457 -0
  8. package/dist/cjs/presentation/whiteboard/fileElement.js.map +1 -0
  9. package/dist/cjs/presentation/whiteboard/glyphs.js +67 -0
  10. package/dist/cjs/presentation/whiteboard/glyphs.js.map +1 -0
  11. package/dist/cjs/presentation/whiteboard/inspector.js +884 -0
  12. package/dist/cjs/presentation/whiteboard/inspector.js.map +1 -0
  13. package/dist/cjs/presentation/whiteboard/linkElement.js +357 -0
  14. package/dist/cjs/presentation/whiteboard/linkElement.js.map +1 -0
  15. package/dist/cjs/presentation/whiteboard/outline.js +966 -0
  16. package/dist/cjs/presentation/whiteboard/outline.js.map +1 -0
  17. package/dist/cjs/presentation/whiteboard/peopleMenu.js +516 -0
  18. package/dist/cjs/presentation/whiteboard/peopleMenu.js.map +1 -0
  19. package/dist/cjs/presentation/whiteboard/settingsMenu.js +177 -0
  20. package/dist/cjs/presentation/whiteboard/settingsMenu.js.map +1 -0
  21. package/dist/esm/presentation/whiteboard/bottomDock.d.ts +51 -0
  22. package/dist/esm/presentation/whiteboard/bottomDock.d.ts.map +1 -0
  23. package/dist/esm/presentation/whiteboard/bottomDock.js +162 -0
  24. package/dist/esm/presentation/whiteboard/bottomDock.js.map +1 -0
  25. package/dist/esm/presentation/whiteboard/canvasElements.d.ts +61 -0
  26. package/dist/esm/presentation/whiteboard/canvasElements.d.ts.map +1 -0
  27. package/dist/esm/presentation/whiteboard/canvasElements.js +746 -0
  28. package/dist/esm/presentation/whiteboard/canvasElements.js.map +1 -0
  29. package/dist/esm/presentation/whiteboard/elements.d.ts +180 -0
  30. package/dist/esm/presentation/whiteboard/elements.d.ts.map +1 -0
  31. package/dist/esm/presentation/whiteboard/elements.js +736 -0
  32. package/dist/esm/presentation/whiteboard/elements.js.map +1 -0
  33. package/dist/esm/presentation/whiteboard/fileElement.d.ts +113 -0
  34. package/dist/esm/presentation/whiteboard/fileElement.d.ts.map +1 -0
  35. package/dist/esm/presentation/whiteboard/fileElement.js +430 -0
  36. package/dist/esm/presentation/whiteboard/fileElement.js.map +1 -0
  37. package/dist/esm/presentation/whiteboard/glyphs.d.ts +32 -0
  38. package/dist/esm/presentation/whiteboard/glyphs.d.ts.map +1 -0
  39. package/dist/esm/presentation/whiteboard/glyphs.js +50 -0
  40. package/dist/esm/presentation/whiteboard/glyphs.js.map +1 -0
  41. package/dist/esm/presentation/whiteboard/inspector.d.ts +100 -0
  42. package/dist/esm/presentation/whiteboard/inspector.d.ts.map +1 -0
  43. package/dist/esm/presentation/whiteboard/inspector.js +753 -0
  44. package/dist/esm/presentation/whiteboard/inspector.js.map +1 -0
  45. package/dist/esm/presentation/whiteboard/linkElement.d.ts +97 -0
  46. package/dist/esm/presentation/whiteboard/linkElement.d.ts.map +1 -0
  47. package/dist/esm/presentation/whiteboard/linkElement.js +327 -0
  48. package/dist/esm/presentation/whiteboard/linkElement.js.map +1 -0
  49. package/dist/esm/presentation/whiteboard/outline.d.ts +89 -0
  50. package/dist/esm/presentation/whiteboard/outline.d.ts.map +1 -0
  51. package/dist/esm/presentation/whiteboard/outline.js +870 -0
  52. package/dist/esm/presentation/whiteboard/outline.js.map +1 -0
  53. package/dist/esm/presentation/whiteboard/peopleMenu.d.ts +44 -0
  54. package/dist/esm/presentation/whiteboard/peopleMenu.d.ts.map +1 -0
  55. package/dist/esm/presentation/whiteboard/peopleMenu.js +440 -0
  56. package/dist/esm/presentation/whiteboard/peopleMenu.js.map +1 -0
  57. package/dist/esm/presentation/whiteboard/settingsMenu.d.ts +13 -0
  58. package/dist/esm/presentation/whiteboard/settingsMenu.d.ts.map +1 -0
  59. package/dist/esm/presentation/whiteboard/settingsMenu.js +155 -0
  60. package/dist/esm/presentation/whiteboard/settingsMenu.js.map +1 -0
  61. package/package.json +1 -1
@@ -0,0 +1,516 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.WhiteboardPeopleMenu = exports.StyledRowCheckbox = exports.StyledPeopleMenu = exports.StyledDialogFields = exports.StyledCandidateRow = exports.PeopleMenuSection = exports.INVITE_COMPANIES = exports.BOARD_MEMBERS = exports.AddMembersDialogStyle = exports.AddMembersDialog = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
9
+ var _Button = require("../../components/Button");
10
+ var _Checkbox = require("../../components/Checkbox");
11
+ var _ConfirmDialog = require("../../components/ConfirmDialog");
12
+ var _CounterButton = require("../../components/CounterButton");
13
+ var _Dialog = require("../../components/Dialog");
14
+ var _IconButton = require("../../components/IconButton");
15
+ var _Icons = require("../../components/Icons");
16
+ var _Label = require("../../components/Label");
17
+ var _List = require("../../components/List");
18
+ var _Menu = require("../../components/Menu");
19
+ var _Select = require("../../components/Select");
20
+ var _SelectTrigger = require("../../components/SelectTrigger");
21
+ var _Textarea = require("../../components/Textarea");
22
+ var _Tooltip = require("../../components/Tooltip");
23
+ var _Typography = require("../../components/Typography");
24
+ var _shared = require("../shared");
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); }
26
+ 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; }
27
+ 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; }
28
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
29
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
30
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
31
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
32
+ 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."); }
33
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
34
+ 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; }
35
+ 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; } }
36
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
37
+ /* ------------------------------------------------------------------ */
38
+ /* People menu (copy of the project header People popover) */
39
+ /* ------------------------------------------------------------------ */
40
+
41
+ /* 12 people (9 members + 3 clients) so the 330px list visibly scrolls.
42
+ Jasna (id 1) starts as the board manager. */
43
+ var BOARD_MEMBERS = exports.BOARD_MEMBERS = [{
44
+ id: 1,
45
+ name: "Jasna Simic",
46
+ initials: "JS",
47
+ color: _shared.AVATAR_COLORS.purple
48
+ }, {
49
+ id: 2,
50
+ name: "Marko Antic",
51
+ initials: "MA",
52
+ color: _shared.AVATAR_COLORS.teal
53
+ }, {
54
+ id: 3,
55
+ name: "Dario Kovac",
56
+ initials: "DK",
57
+ color: _shared.AVATAR_COLORS.orange
58
+ }, {
59
+ id: 4,
60
+ name: "Ivana Lukic",
61
+ initials: "IL",
62
+ color: _shared.AVATAR_COLORS.green
63
+ }, {
64
+ id: 5,
65
+ name: "Petar Novak",
66
+ initials: "PN",
67
+ color: _shared.AVATAR_COLORS.blue
68
+ }, {
69
+ id: 6,
70
+ name: "Sara Milic",
71
+ initials: "SM",
72
+ color: _shared.AVATAR_COLORS.yellow
73
+ }, {
74
+ id: 7,
75
+ name: "Luka Peric",
76
+ initials: "LP",
77
+ color: _shared.AVATAR_COLORS.purple
78
+ }, {
79
+ id: 8,
80
+ name: "Mia Radic",
81
+ initials: "MR",
82
+ color: _shared.AVATAR_COLORS.teal
83
+ }, {
84
+ id: 9,
85
+ name: "Nikola Vukic",
86
+ initials: "NV",
87
+ color: _shared.AVATAR_COLORS.orange
88
+ }, {
89
+ id: 10,
90
+ name: "Ana Klein",
91
+ initials: "AK",
92
+ color: _shared.AVATAR_COLORS.green,
93
+ isClient: true
94
+ }, {
95
+ id: 11,
96
+ name: "Tom Becker",
97
+ initials: "TB",
98
+ color: _shared.AVATAR_COLORS.blue,
99
+ isClient: true
100
+ }, {
101
+ id: 12,
102
+ name: "Eva Fischer",
103
+ initials: "EF",
104
+ color: _shared.AVATAR_COLORS.yellow,
105
+ isClient: true
106
+ }];
107
+
108
+ /* Mirrors ProjectPeopleWrapper + view.project_top_bar.less:
109
+ Menu 260px, "People" MenuHeader with an (inert) "+", 330px scroll area,
110
+ Members/Clients Caption1 section labels, rows with hover-only options. */
111
+ var StyledPeopleMenu = exports.StyledPeopleMenu = _styledComponents.default.div.withConfig({
112
+ displayName: "peopleMenu__StyledPeopleMenu",
113
+ componentId: "sc-uidi4w-0"
114
+ })([".people-scroll{max-height:330px;overflow-y:auto;overflow-x:hidden;padding-bottom:8px;}.people-section-label{display:block;margin:8px 0;padding:0 16px;}.member-item{justify-content:space-between;margin:4px 8px;padding:0 8px;border-radius:4px;cursor:auto;}.member-options{display:none;align-items:center;}.member-item:hover .member-options{display:flex;}.member-side{display:flex;align-items:center;flex-shrink:0;}.member-user{display:inline-flex;align-items:center;gap:8px;padding:2px 0;overflow:hidden;.member-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}}.manager-avatar{outline:2px #ffcc6b solid;outline-offset:-2px;}"]);
115
+ /* Rows sorted by name. Manager: gold crown + ring, no hover options (the
116
+ role must be handed over before removal). Crown option only on non-client
117
+ rows; X on everyone else. */
118
+ var PeopleMenuSection = exports.PeopleMenuSection = function PeopleMenuSection(_ref) {
119
+ var label = _ref.label,
120
+ people = _ref.people,
121
+ managerId = _ref.managerId,
122
+ onMakeManager = _ref.onMakeManager,
123
+ onRemove = _ref.onRemove;
124
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
125
+ weight: "bold",
126
+ className: "people-section-label"
127
+ }, label), /*#__PURE__*/_react.default.createElement(_List.List, null, [...people].sort(function (a, b) {
128
+ return a.name.localeCompare(b.name);
129
+ }).map(function (person) {
130
+ var isManager = person.id === managerId;
131
+ return /*#__PURE__*/_react.default.createElement(_List.ListItem, {
132
+ key: person.id,
133
+ className: "member-item"
134
+ }, /*#__PURE__*/_react.default.createElement("span", {
135
+ className: "member-user"
136
+ }, /*#__PURE__*/_react.default.createElement(_shared.RoundAvatar, {
137
+ $bg: person.color,
138
+ $bordered: false,
139
+ className: isManager ? "manager-avatar" : undefined
140
+ }, person.initials), /*#__PURE__*/_react.default.createElement(_Typography.Body2, {
141
+ className: "member-name"
142
+ }, person.name)), /*#__PURE__*/_react.default.createElement("span", {
143
+ className: "member-side"
144
+ }, isManager ? /*#__PURE__*/_react.default.createElement(_Icons.CrownSelectedIcon, {
145
+ fill: "#FFCC6B"
146
+ }) : null, /*#__PURE__*/_react.default.createElement("span", {
147
+ className: "member-options"
148
+ }, !isManager && !person.isClient ? /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
149
+ title: "Set as Whiteboard Manager"
150
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
151
+ size: "small",
152
+ variant: "text gray",
153
+ onClick: function onClick() {
154
+ return onMakeManager(person);
155
+ }
156
+ }, /*#__PURE__*/_react.default.createElement(_Icons.CrownBlankIcon, null))) : null, !isManager ? /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
157
+ title: "Remove from Whiteboard"
158
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
159
+ size: "small",
160
+ variant: "text gray",
161
+ onClick: function onClick() {
162
+ return onRemove(person);
163
+ }
164
+ }, /*#__PURE__*/_react.default.createElement(_Icons.CloseSmallIcon, null))) : null)));
165
+ })));
166
+ };
167
+
168
+ /* ------------------------------------------------------------------ */
169
+ /* Add-members dialog (people "+" → DS Dialog + invite-style picker) */
170
+ /* ------------------------------------------------------------------ */
171
+
172
+ /* Owner company first, remaining companies sorted by name; people sorted
173
+ by name within each company — same ordering as the real user picker.
174
+ Members of non-owner companies join the board as clients. */
175
+ var INVITE_COMPANIES = exports.INVITE_COMPANIES = [{
176
+ name: "ActiveCollab",
177
+ isOwnerCompany: true,
178
+ people: [{
179
+ id: 101,
180
+ name: "Ana Ilic",
181
+ initials: "AI",
182
+ color: _shared.AVATAR_COLORS.green
183
+ }, {
184
+ id: 102,
185
+ name: "Bojan Peric",
186
+ initials: "BP",
187
+ color: _shared.AVATAR_COLORS.blue
188
+ }, {
189
+ id: 103,
190
+ name: "Goran Simovic",
191
+ initials: "GS",
192
+ color: _shared.AVATAR_COLORS.orange
193
+ }, {
194
+ id: 104,
195
+ name: "Vera Antic",
196
+ initials: "VA",
197
+ color: _shared.AVATAR_COLORS.purple
198
+ }]
199
+ }, {
200
+ name: "Bitlab Studio",
201
+ people: [{
202
+ id: 201,
203
+ name: "Elena Weber",
204
+ initials: "EW",
205
+ color: _shared.AVATAR_COLORS.teal
206
+ }, {
207
+ id: 202,
208
+ name: "Jonas Richter",
209
+ initials: "JR",
210
+ color: _shared.AVATAR_COLORS.yellow
211
+ }]
212
+ }, {
213
+ name: "Nova Consulting",
214
+ people: [{
215
+ id: 301,
216
+ name: "Iris Novak",
217
+ initials: "IN",
218
+ color: _shared.AVATAR_COLORS.blue
219
+ }, {
220
+ id: 302,
221
+ name: "Karlo Babic",
222
+ initials: "KB",
223
+ color: _shared.AVATAR_COLORS.green
224
+ }, {
225
+ id: 303,
226
+ name: "Tea Grgic",
227
+ initials: "TG",
228
+ color: _shared.AVATAR_COLORS.purple
229
+ }]
230
+ }];
231
+
232
+ /* The Select panel and the Dialog render through portals, so they can only
233
+ be styled via real global classes — wrapper descendant selectors can't
234
+ reach them. Actions gap 12px = the app's "tw-flex tw-gap-3" on
235
+ Dialog.Actions (InviteToProjectsDialog). */
236
+ var AddMembersDialogStyle = exports.AddMembersDialogStyle = (0, _styledComponents.createGlobalStyle)([".wb-user-select{width:480px;max-width:calc(100vw - 32px);}.wb-dialog-actions{display:flex;gap:12px;}"]);
237
+ var StyledCandidateRow = exports.StyledCandidateRow = _styledComponents.default.span.withConfig({
238
+ displayName: "peopleMenu__StyledCandidateRow",
239
+ componentId: "sc-uidi4w-1"
240
+ })(["display:inline-flex;align-items:center;gap:8px;min-width:0;flex-grow:1;.candidate-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}"]);
241
+
242
+ /* same offset the Select's built-in row checkbox has */
243
+ var StyledRowCheckbox = exports.StyledRowCheckbox = (0, _styledComponents.default)(_Checkbox.Checkbox).withConfig({
244
+ displayName: "peopleMenu__StyledRowCheckbox",
245
+ componentId: "sc-uidi4w-2"
246
+ })(["margin-left:12px;"]);
247
+ var StyledDialogFields = exports.StyledDialogFields = _styledComponents.default.div.withConfig({
248
+ displayName: "peopleMenu__StyledDialogFields",
249
+ componentId: "sc-uidi4w-3"
250
+ })(["display:flex;flex-direction:column;.field{display:flex;flex-direction:column;gap:4px;}.field + .field{margin-top:16px;}button.wb-user-trigger{width:100%;}textarea.wb-invite-message{width:100%;box-sizing:border-box;}"]);
251
+ /* Closes on Esc (DS Dialog default) and Cancel; background click stays
252
+ disabled (enableBackgroundClick not set). Add is disabled until at least
253
+ one user is selected; on Add the selection joins the members list (in the
254
+ real app this also sends the invitation email with the optional message,
255
+ and Add stays disabled while the request is in flight). */
256
+ var AddMembersDialog = exports.AddMembersDialog = function AddMembersDialog(_ref2) {
257
+ var open = _ref2.open,
258
+ onClose = _ref2.onClose,
259
+ existingIds = _ref2.existingIds,
260
+ onAdd = _ref2.onAdd;
261
+ var _useState = (0, _react.useState)([]),
262
+ _useState2 = _slicedToArray(_useState, 2),
263
+ selectedIds = _useState2[0],
264
+ setSelectedIds = _useState2[1];
265
+ var _useState3 = (0, _react.useState)(""),
266
+ _useState4 = _slicedToArray(_useState3, 2),
267
+ message = _useState4[0],
268
+ setMessage = _useState4[1];
269
+
270
+ /* current members drop out of the picker; companies left empty disappear */
271
+ var options = (0, _react.useMemo)(function () {
272
+ return INVITE_COMPANIES.map(function (company, index) {
273
+ return {
274
+ id: 1000 + index,
275
+ name: company.name,
276
+ options: company.people.filter(function (person) {
277
+ return !existingIds.includes(person.id);
278
+ }).map(function (person) {
279
+ return _objectSpread({}, person);
280
+ })
281
+ };
282
+ }).filter(function (company) {
283
+ return company.options.length > 0;
284
+ });
285
+ }, [existingIds]);
286
+ var triggerText = selectedIds.length === 0 ? "Choose users" : "".concat(selectedIds.length, " ").concat(selectedIds.length === 1 ? "user" : "users", " selected");
287
+ var handleAdd = (0, _react.useCallback)(function () {
288
+ var added = INVITE_COMPANIES.flatMap(function (company) {
289
+ return company.people.filter(function (person) {
290
+ return selectedIds.includes(person.id);
291
+ }).map(function (person) {
292
+ return {
293
+ id: person.id,
294
+ name: person.name,
295
+ initials: person.initials,
296
+ color: person.color,
297
+ isClient: !company.isOwnerCompany
298
+ };
299
+ });
300
+ });
301
+ onAdd(added);
302
+ setSelectedIds([]);
303
+ setMessage("");
304
+ onClose();
305
+ }, [onAdd, onClose, selectedIds]);
306
+ return /*#__PURE__*/_react.default.createElement(_Dialog.Dialog, {
307
+ open: open,
308
+ onClose: onClose
309
+ }, /*#__PURE__*/_react.default.createElement(AddMembersDialogStyle, null), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Title, null, "Add Users"), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.ContentDivider, null), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Content, null, /*#__PURE__*/_react.default.createElement(StyledDialogFields, null, /*#__PURE__*/_react.default.createElement("div", {
310
+ className: "field"
311
+ }, /*#__PURE__*/_react.default.createElement(_Label.Label, {
312
+ htmlFor: "wb-users",
313
+ required: true
314
+ }, "Users"), /*#__PURE__*/_react.default.createElement(_Select.Select, {
315
+ type: "multiple",
316
+ options: options,
317
+ selected: selectedIds,
318
+ onChange: function onChange(value) {
319
+ return setSelectedIds(Array.isArray(value) ? value : []);
320
+ },
321
+ noResultText: "No results",
322
+ selectClassName: "wb-user-select",
323
+ target: /*#__PURE__*/_react.default.createElement(_SelectTrigger.SelectTrigger, {
324
+ id: "wb-users",
325
+ className: "wb-user-trigger",
326
+ typographyProps: {
327
+ color: selectedIds.length > 0 ? "primary" : "quaternary"
328
+ }
329
+ }, triggerText),
330
+ endAdornment: /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
331
+ title: "Group by"
332
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
333
+ variant: "text gray"
334
+ }, /*#__PURE__*/_react.default.createElement(_Icons.SortGeneralIcon, null))),
335
+ renderOption: function renderOption(option, data) {
336
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(StyledCandidateRow, null, /*#__PURE__*/_react.default.createElement(_shared.RoundAvatar, {
337
+ $bg: String(option.color),
338
+ $size: 24,
339
+ $bordered: false
340
+ }, option.initials), /*#__PURE__*/_react.default.createElement(_Typography.Body2, {
341
+ className: "candidate-name"
342
+ }, option.name)), /*#__PURE__*/_react.default.createElement(StyledRowCheckbox, data));
343
+ }
344
+ })), /*#__PURE__*/_react.default.createElement("div", {
345
+ className: "field"
346
+ }, /*#__PURE__*/_react.default.createElement(_Label.Label, {
347
+ htmlFor: "wb-invite-message"
348
+ }, "Message to Users"), /*#__PURE__*/_react.default.createElement(_Textarea.Textarea, {
349
+ id: "wb-invite-message",
350
+ className: "wb-invite-message",
351
+ placeholder: "Short note to invited users",
352
+ value: message,
353
+ onChange: function onChange(event) {
354
+ return setMessage(event.target.value);
355
+ }
356
+ }), /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
357
+ color: "tertiary"
358
+ }, "Let people know what this whiteboard is for and why you're inviting them. If provided, this message is included in the invitation email.")))), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.ContentDivider, null), /*#__PURE__*/_react.default.createElement(_Dialog.Dialog.Actions, {
359
+ className: "wb-dialog-actions"
360
+ }, /*#__PURE__*/_react.default.createElement(_Button.Button, {
361
+ variant: "primary",
362
+ disabled: selectedIds.length === 0,
363
+ onClick: handleAdd
364
+ }, "Add"), /*#__PURE__*/_react.default.createElement(_Button.Button, {
365
+ variant: "secondary",
366
+ onClick: onClose
367
+ }, "Cancel")));
368
+ };
369
+
370
+ /* People trigger (icon + member count) + the popover + the dialogs.
371
+
372
+ Flows mirror the implementation spec. The mock acts as a non-owner
373
+ manager, so a crown click always shows the confirm dialog (owners would
374
+ transfer immediately), and hover options stay visible after a transfer so
375
+ the flows can be replayed. */
376
+ var WhiteboardPeopleMenu = exports.WhiteboardPeopleMenu = function WhiteboardPeopleMenu() {
377
+ var _removeTarget$name$sp;
378
+ var _useState5 = (0, _react.useState)(false),
379
+ _useState6 = _slicedToArray(_useState5, 2),
380
+ open = _useState6[0],
381
+ setOpen = _useState6[1];
382
+ var handleOpen = (0, _react.useCallback)(function () {
383
+ return setOpen(true);
384
+ }, []);
385
+ var handleClose = (0, _react.useCallback)(function () {
386
+ return setOpen(false);
387
+ }, []);
388
+ var _useState7 = (0, _react.useState)(BOARD_MEMBERS),
389
+ _useState8 = _slicedToArray(_useState7, 2),
390
+ boardMembers = _useState8[0],
391
+ setBoardMembers = _useState8[1];
392
+ var _useState9 = (0, _react.useState)(1),
393
+ _useState0 = _slicedToArray(_useState9, 2),
394
+ managerId = _useState0[0],
395
+ setManagerId = _useState0[1];
396
+ var _useState1 = (0, _react.useState)(null),
397
+ _useState10 = _slicedToArray(_useState1, 2),
398
+ managerTarget = _useState10[0],
399
+ setManagerTarget = _useState10[1];
400
+ var _useState11 = (0, _react.useState)(null),
401
+ _useState12 = _slicedToArray(_useState11, 2),
402
+ removeTarget = _useState12[0],
403
+ setRemoveTarget = _useState12[1];
404
+ var _useState13 = (0, _react.useState)(false),
405
+ _useState14 = _slicedToArray(_useState13, 2),
406
+ dialogOpen = _useState14[0],
407
+ setDialogOpen = _useState14[1];
408
+ var handleDialogOpen = (0, _react.useCallback)(function () {
409
+ setOpen(false);
410
+ setDialogOpen(true);
411
+ }, []);
412
+ var handleDialogClose = (0, _react.useCallback)(function () {
413
+ return setDialogOpen(false);
414
+ }, []);
415
+ var handleAddMembers = (0, _react.useCallback)(function (added) {
416
+ setBoardMembers(function (current) {
417
+ return [...current, ...added];
418
+ });
419
+ }, []);
420
+
421
+ /* close the menu before opening any dialog (menus-that-open-dialogs rule) */
422
+ var handleMakeManager = (0, _react.useCallback)(function (person) {
423
+ setOpen(false);
424
+ setManagerTarget(person);
425
+ }, []);
426
+ var handleRemove = (0, _react.useCallback)(function (person) {
427
+ setOpen(false);
428
+ setRemoveTarget(person);
429
+ }, []);
430
+ var handleManagerConfirm = (0, _react.useCallback)(function () {
431
+ if (managerTarget) {
432
+ setManagerId(managerTarget.id);
433
+ }
434
+ setManagerTarget(null);
435
+ }, [managerTarget]);
436
+ var handleRemoveConfirm = (0, _react.useCallback)(function () {
437
+ if (removeTarget) {
438
+ setBoardMembers(function (current) {
439
+ return current.filter(function (person) {
440
+ return person.id !== removeTarget.id;
441
+ });
442
+ });
443
+ }
444
+ setRemoveTarget(null);
445
+ }, [removeTarget]);
446
+ var members = boardMembers.filter(function (person) {
447
+ return !person.isClient;
448
+ });
449
+ var clients = boardMembers.filter(function (person) {
450
+ return person.isClient;
451
+ });
452
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(AddMembersDialog, {
453
+ open: dialogOpen,
454
+ onClose: handleDialogClose,
455
+ existingIds: boardMembers.map(function (person) {
456
+ return person.id;
457
+ }),
458
+ onAdd: handleAddMembers
459
+ }), /*#__PURE__*/_react.default.createElement(_ConfirmDialog.ConfirmDialog, {
460
+ open: managerTarget !== null,
461
+ dialogTitle: "Change Whiteboard Manager",
462
+ dialogContent: "By changing the Whiteboard Manager, you'll lose the ability to manage this whiteboard.",
463
+ confirmBtnText: "Change",
464
+ shouldShowCancelButton: true,
465
+ onConfirm: handleManagerConfirm,
466
+ onCancel: function onCancel() {
467
+ return setManagerTarget(null);
468
+ }
469
+ }), /*#__PURE__*/_react.default.createElement(_ConfirmDialog.ConfirmDialog, {
470
+ open: removeTarget !== null,
471
+ dialogTitle: "Remove from Whiteboard",
472
+ dialogContent: "Remove ".concat((_removeTarget$name$sp = removeTarget === null || removeTarget === void 0 ? void 0 : removeTarget.name.split(" ")[0]) !== null && _removeTarget$name$sp !== void 0 ? _removeTarget$name$sp : "", " from this whiteboard? They will immediately lose access to it."),
473
+ confirmBtnText: "Remove",
474
+ shouldShowCancelButton: true,
475
+ onConfirm: handleRemoveConfirm,
476
+ onCancel: function onCancel() {
477
+ return setRemoveTarget(null);
478
+ }
479
+ }), /*#__PURE__*/_react.default.createElement(_Menu.Menu, {
480
+ open: open,
481
+ onOpen: handleOpen,
482
+ onClose: handleClose,
483
+ position: "bottom-start",
484
+ target: /*#__PURE__*/_react.default.createElement(_CounterButton.CounterButton, {
485
+ active: open,
486
+ label: String(boardMembers.length),
487
+ icon: /*#__PURE__*/_react.default.createElement(_Icons.PeopleIcon, null),
488
+ className: open ? "open" : undefined,
489
+ onClearAll: function onClearAll() {
490
+ return undefined;
491
+ }
492
+ })
493
+ }, /*#__PURE__*/_react.default.createElement(StyledPeopleMenu, null, /*#__PURE__*/_react.default.createElement(_Menu.MenuHeader, {
494
+ title: "People",
495
+ rightElement: /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
496
+ size: "small",
497
+ variant: "text gray",
498
+ onClick: handleDialogOpen
499
+ }, /*#__PURE__*/_react.default.createElement(_Icons.AddCrossTinyIcon, null))
500
+ }), /*#__PURE__*/_react.default.createElement("div", {
501
+ className: "people-scroll"
502
+ }, /*#__PURE__*/_react.default.createElement(PeopleMenuSection, {
503
+ label: "Members",
504
+ people: members,
505
+ managerId: managerId,
506
+ onMakeManager: handleMakeManager,
507
+ onRemove: handleRemove
508
+ }), clients.length > 0 ? /*#__PURE__*/_react.default.createElement(PeopleMenuSection, {
509
+ label: "Clients",
510
+ people: clients,
511
+ managerId: managerId,
512
+ onMakeManager: handleMakeManager,
513
+ onRemove: handleRemove
514
+ }) : null))));
515
+ };
516
+ //# sourceMappingURL=peopleMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peopleMenu.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_Button","_Checkbox","_ConfirmDialog","_CounterButton","_Dialog","_IconButton","_Icons","_Label","_List","_Menu","_Select","_SelectTrigger","_Textarea","_Tooltip","_Typography","_shared","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","l","iterator","u","next","done","return","isArray","BOARD_MEMBERS","exports","id","initials","color","AVATAR_COLORS","purple","teal","orange","green","blue","yellow","isClient","StyledPeopleMenu","styled","div","withConfig","displayName","componentId","PeopleMenuSection","_ref","label","people","managerId","onMakeManager","onRemove","createElement","Fragment","Caption1","weight","className","List","sort","b","localeCompare","map","person","isManager","ListItem","key","RoundAvatar","$bg","$bordered","undefined","Body2","CrownSelectedIcon","fill","Tooltip","title","IconButton","size","variant","onClick","CrownBlankIcon","CloseSmallIcon","INVITE_COMPANIES","isOwnerCompany","AddMembersDialogStyle","createGlobalStyle","StyledCandidateRow","span","StyledRowCheckbox","Checkbox","StyledDialogFields","AddMembersDialog","_ref2","open","onClose","existingIds","onAdd","_useState","useState","_useState2","selectedIds","setSelectedIds","_useState3","_useState4","message","setMessage","options","useMemo","company","index","includes","triggerText","concat","handleAdd","useCallback","added","flatMap","Dialog","Title","ContentDivider","Content","Label","htmlFor","required","Select","type","selected","onChange","noResultText","selectClassName","target","SelectTrigger","typographyProps","endAdornment","SortGeneralIcon","renderOption","option","data","$size","Textarea","placeholder","event","Actions","Button","disabled","WhiteboardPeopleMenu","_removeTarget$name$sp","_useState5","_useState6","setOpen","handleOpen","handleClose","_useState7","_useState8","boardMembers","setBoardMembers","_useState9","_useState0","setManagerId","_useState1","_useState10","managerTarget","setManagerTarget","_useState11","_useState12","removeTarget","setRemoveTarget","_useState13","_useState14","dialogOpen","setDialogOpen","handleDialogOpen","handleDialogClose","handleAddMembers","current","handleMakeManager","handleRemove","handleManagerConfirm","handleRemoveConfirm","members","clients","ConfirmDialog","dialogTitle","dialogContent","confirmBtnText","shouldShowCancelButton","onConfirm","onCancel","split","Menu","onOpen","position","CounterButton","active","icon","PeopleIcon","onClearAll","MenuHeader","rightElement","AddCrossTinyIcon"],"sources":["../../../../src/presentation/whiteboard/peopleMenu.tsx"],"sourcesContent":["import React, { ReactElement, useCallback, useMemo, useState } from \"react\";\n\nimport styled, { createGlobalStyle } from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { ConfirmDialog } from \"../../components/ConfirmDialog\";\nimport { CounterButton } from \"../../components/CounterButton\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n AddCrossTinyIcon,\n CloseSmallIcon,\n CrownBlankIcon,\n CrownSelectedIcon,\n PeopleIcon,\n SortGeneralIcon,\n} from \"../../components/Icons\";\nimport { Label } from \"../../components/Label\";\nimport { List, ListItem } from \"../../components/List\";\nimport { Menu, MenuHeader } from \"../../components/Menu\";\nimport { Select } from \"../../components/Select\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\nimport { Textarea } from \"../../components/Textarea\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Body2, Caption1 } from \"../../components/Typography\";\nimport { AVATAR_COLORS, RoundAvatar } from \"../shared\";\n\n/* ------------------------------------------------------------------ */\n/* People menu (copy of the project header People popover) */\n/* ------------------------------------------------------------------ */\n\nexport interface BoardMember {\n id: number;\n name: string;\n initials: string;\n color: string;\n isClient?: boolean;\n}\n\n/* 12 people (9 members + 3 clients) so the 330px list visibly scrolls.\n Jasna (id 1) starts as the board manager. */\nexport const BOARD_MEMBERS: BoardMember[] = [\n { id: 1, name: \"Jasna Simic\", initials: \"JS\", color: AVATAR_COLORS.purple },\n { id: 2, name: \"Marko Antic\", initials: \"MA\", color: AVATAR_COLORS.teal },\n { id: 3, name: \"Dario Kovac\", initials: \"DK\", color: AVATAR_COLORS.orange },\n { id: 4, name: \"Ivana Lukic\", initials: \"IL\", color: AVATAR_COLORS.green },\n { id: 5, name: \"Petar Novak\", initials: \"PN\", color: AVATAR_COLORS.blue },\n { id: 6, name: \"Sara Milic\", initials: \"SM\", color: AVATAR_COLORS.yellow },\n { id: 7, name: \"Luka Peric\", initials: \"LP\", color: AVATAR_COLORS.purple },\n { id: 8, name: \"Mia Radic\", initials: \"MR\", color: AVATAR_COLORS.teal },\n { id: 9, name: \"Nikola Vukic\", initials: \"NV\", color: AVATAR_COLORS.orange },\n {\n id: 10,\n name: \"Ana Klein\",\n initials: \"AK\",\n color: AVATAR_COLORS.green,\n isClient: true,\n },\n {\n id: 11,\n name: \"Tom Becker\",\n initials: \"TB\",\n color: AVATAR_COLORS.blue,\n isClient: true,\n },\n {\n id: 12,\n name: \"Eva Fischer\",\n initials: \"EF\",\n color: AVATAR_COLORS.yellow,\n isClient: true,\n },\n];\n\n/* Mirrors ProjectPeopleWrapper + view.project_top_bar.less:\n Menu 260px, \"People\" MenuHeader with an (inert) \"+\", 330px scroll area,\n Members/Clients Caption1 section labels, rows with hover-only options. */\nexport const StyledPeopleMenu = styled.div`\n .people-scroll {\n max-height: 330px;\n overflow-y: auto;\n overflow-x: hidden;\n padding-bottom: 8px;\n }\n\n .people-section-label {\n display: block;\n margin: 8px 0;\n padding: 0 16px;\n }\n\n /* .project-members li overrides: radius, 8px h-padding, tw-mx-2 */\n .member-item {\n justify-content: space-between;\n margin: 4px 8px;\n padding: 0 8px;\n border-radius: 4px;\n cursor: auto;\n }\n\n /* options hidden until row hover (.project-member-options pattern) */\n .member-options {\n display: none;\n align-items: center;\n }\n\n .member-item:hover .member-options {\n display: flex;\n }\n\n .member-side {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n /* UserLink: avatar + name, 8px gap, truncated (2px v-padding) */\n .member-user {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 2px 0;\n overflow: hidden;\n\n .member-name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n\n /* gold ring on the manager's avatar (.project-leader-avatar) */\n .manager-avatar {\n outline: 2px #ffcc6b solid;\n outline-offset: -2px;\n }\n`;\n\nexport interface PeopleMenuSectionProps {\n label: string;\n people: BoardMember[];\n managerId: number;\n onMakeManager: (person: BoardMember) => void;\n onRemove: (person: BoardMember) => void;\n}\n\n/* Rows sorted by name. Manager: gold crown + ring, no hover options (the\n role must be handed over before removal). Crown option only on non-client\n rows; X on everyone else. */\nexport const PeopleMenuSection = ({\n label,\n people,\n managerId,\n onMakeManager,\n onRemove,\n}: PeopleMenuSectionProps): ReactElement => (\n <>\n <Caption1 weight=\"bold\" className=\"people-section-label\">\n {label}\n </Caption1>\n <List>\n {[...people]\n .sort((a, b) => a.name.localeCompare(b.name))\n .map((person) => {\n const isManager = person.id === managerId;\n\n return (\n <ListItem key={person.id} className=\"member-item\">\n <span className=\"member-user\">\n <RoundAvatar\n $bg={person.color}\n $bordered={false}\n className={isManager ? \"manager-avatar\" : undefined}\n >\n {person.initials}\n </RoundAvatar>\n <Body2 className=\"member-name\">{person.name}</Body2>\n </span>\n <span className=\"member-side\">\n {isManager ? <CrownSelectedIcon fill=\"#FFCC6B\" /> : null}\n <span className=\"member-options\">\n {!isManager && !person.isClient ? (\n <Tooltip title=\"Set as Whiteboard Manager\">\n <IconButton\n size=\"small\"\n variant=\"text gray\"\n onClick={() => onMakeManager(person)}\n >\n <CrownBlankIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n {!isManager ? (\n <Tooltip title=\"Remove from Whiteboard\">\n <IconButton\n size=\"small\"\n variant=\"text gray\"\n onClick={() => onRemove(person)}\n >\n <CloseSmallIcon />\n </IconButton>\n </Tooltip>\n ) : null}\n </span>\n </span>\n </ListItem>\n );\n })}\n </List>\n </>\n);\n\n/* ------------------------------------------------------------------ */\n/* Add-members dialog (people \"+\" → DS Dialog + invite-style picker) */\n/* ------------------------------------------------------------------ */\n\nexport interface InviteCandidate {\n id: number;\n name: string;\n initials: string;\n color: string;\n}\n\nexport interface InviteCompany {\n name: string;\n isOwnerCompany?: boolean;\n people: InviteCandidate[];\n}\n\n/* Owner company first, remaining companies sorted by name; people sorted\n by name within each company — same ordering as the real user picker.\n Members of non-owner companies join the board as clients. */\nexport const INVITE_COMPANIES: InviteCompany[] = [\n {\n name: \"ActiveCollab\",\n isOwnerCompany: true,\n people: [\n { id: 101, name: \"Ana Ilic\", initials: \"AI\", color: AVATAR_COLORS.green },\n {\n id: 102,\n name: \"Bojan Peric\",\n initials: \"BP\",\n color: AVATAR_COLORS.blue,\n },\n {\n id: 103,\n name: \"Goran Simovic\",\n initials: \"GS\",\n color: AVATAR_COLORS.orange,\n },\n {\n id: 104,\n name: \"Vera Antic\",\n initials: \"VA\",\n color: AVATAR_COLORS.purple,\n },\n ],\n },\n {\n name: \"Bitlab Studio\",\n people: [\n {\n id: 201,\n name: \"Elena Weber\",\n initials: \"EW\",\n color: AVATAR_COLORS.teal,\n },\n {\n id: 202,\n name: \"Jonas Richter\",\n initials: \"JR\",\n color: AVATAR_COLORS.yellow,\n },\n ],\n },\n {\n name: \"Nova Consulting\",\n people: [\n {\n id: 301,\n name: \"Iris Novak\",\n initials: \"IN\",\n color: AVATAR_COLORS.blue,\n },\n {\n id: 302,\n name: \"Karlo Babic\",\n initials: \"KB\",\n color: AVATAR_COLORS.green,\n },\n {\n id: 303,\n name: \"Tea Grgic\",\n initials: \"TG\",\n color: AVATAR_COLORS.purple,\n },\n ],\n },\n];\n\n/* The Select panel and the Dialog render through portals, so they can only\n be styled via real global classes — wrapper descendant selectors can't\n reach them. Actions gap 12px = the app's \"tw-flex tw-gap-3\" on\n Dialog.Actions (InviteToProjectsDialog). */\nexport const AddMembersDialogStyle = createGlobalStyle`\n .wb-user-select {\n width: 480px;\n max-width: calc(100vw - 32px);\n }\n\n .wb-dialog-actions {\n display: flex;\n gap: 12px;\n }\n`;\n\nexport const StyledCandidateRow = styled.span`\n display: inline-flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-grow: 1;\n\n .candidate-name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n`;\n\n/* same offset the Select's built-in row checkbox has */\nexport const StyledRowCheckbox = styled(Checkbox)`\n margin-left: 12px;\n`;\n\nexport const StyledDialogFields = styled.div`\n display: flex;\n flex-direction: column;\n\n .field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .field + .field {\n margin-top: 16px;\n }\n\n /* DS fixed widths (SelectTrigger 300px, Textarea 360px) → full width */\n button.wb-user-trigger {\n width: 100%;\n }\n\n textarea.wb-invite-message {\n width: 100%;\n box-sizing: border-box;\n }\n`;\n\nexport interface AddMembersDialogProps {\n open: boolean;\n onClose: () => void;\n /** ids of current board members — excluded from the picker */\n existingIds: number[];\n onAdd: (people: BoardMember[]) => void;\n}\n\n/* Closes on Esc (DS Dialog default) and Cancel; background click stays\n disabled (enableBackgroundClick not set). Add is disabled until at least\n one user is selected; on Add the selection joins the members list (in the\n real app this also sends the invitation email with the optional message,\n and Add stays disabled while the request is in flight). */\nexport const AddMembersDialog = ({\n open,\n onClose,\n existingIds,\n onAdd,\n}: AddMembersDialogProps): ReactElement => {\n const [selectedIds, setSelectedIds] = useState<(string | number)[]>([]);\n const [message, setMessage] = useState(\"\");\n\n /* current members drop out of the picker; companies left empty disappear */\n const options = useMemo(\n () =>\n INVITE_COMPANIES.map((company, index) => ({\n id: 1000 + index,\n name: company.name,\n options: company.people\n .filter((person) => !existingIds.includes(person.id))\n .map((person) => ({ ...person })),\n })).filter((company) => company.options.length > 0),\n [existingIds]\n );\n\n const triggerText =\n selectedIds.length === 0\n ? \"Choose users\"\n : `${selectedIds.length} ${\n selectedIds.length === 1 ? \"user\" : \"users\"\n } selected`;\n\n const handleAdd = useCallback(() => {\n const added = INVITE_COMPANIES.flatMap((company) =>\n company.people\n .filter((person) => selectedIds.includes(person.id))\n .map((person) => ({\n id: person.id,\n name: person.name,\n initials: person.initials,\n color: person.color,\n isClient: !company.isOwnerCompany,\n }))\n );\n\n onAdd(added);\n setSelectedIds([]);\n setMessage(\"\");\n onClose();\n }, [onAdd, onClose, selectedIds]);\n\n return (\n <Dialog open={open} onClose={onClose}>\n <AddMembersDialogStyle />\n <Dialog.Title>Add Users</Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledDialogFields>\n <div className=\"field\">\n <Label htmlFor=\"wb-users\" required>\n Users\n </Label>\n <Select\n type=\"multiple\"\n options={options}\n selected={selectedIds}\n onChange={(value) =>\n setSelectedIds(Array.isArray(value) ? value : [])\n }\n noResultText=\"No results\"\n selectClassName=\"wb-user-select\"\n target={\n <SelectTrigger\n id=\"wb-users\"\n className=\"wb-user-trigger\"\n typographyProps={{\n color: selectedIds.length > 0 ? \"primary\" : \"quaternary\",\n }}\n >\n {triggerText}\n </SelectTrigger>\n }\n endAdornment={\n <Tooltip title=\"Group by\">\n <IconButton variant=\"text gray\">\n <SortGeneralIcon />\n </IconButton>\n </Tooltip>\n }\n renderOption={(option, data) => (\n <>\n <StyledCandidateRow>\n <RoundAvatar\n $bg={String(option.color)}\n $size={24}\n $bordered={false}\n >\n {option.initials}\n </RoundAvatar>\n <Body2 className=\"candidate-name\">{option.name}</Body2>\n </StyledCandidateRow>\n <StyledRowCheckbox\n {...(data as {\n id?: string;\n checked?: boolean;\n onChange?: () => void;\n })}\n />\n </>\n )}\n />\n </div>\n <div className=\"field\">\n <Label htmlFor=\"wb-invite-message\">Message to Users</Label>\n <Textarea\n id=\"wb-invite-message\"\n className=\"wb-invite-message\"\n placeholder=\"Short note to invited users\"\n value={message}\n onChange={(event) => setMessage(event.target.value)}\n />\n <Caption1 color=\"tertiary\">\n Let people know what this whiteboard is for and why you&apos;re\n inviting them. If provided, this message is included in the\n invitation email.\n </Caption1>\n </div>\n </StyledDialogFields>\n </Dialog.Content>\n <Dialog.ContentDivider />\n <Dialog.Actions className=\"wb-dialog-actions\">\n <Button\n variant=\"primary\"\n disabled={selectedIds.length === 0}\n onClick={handleAdd}\n >\n Add\n </Button>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n </Dialog.Actions>\n </Dialog>\n );\n};\n\n/* People trigger (icon + member count) + the popover + the dialogs.\n\n Flows mirror the implementation spec. The mock acts as a non-owner\n manager, so a crown click always shows the confirm dialog (owners would\n transfer immediately), and hover options stay visible after a transfer so\n the flows can be replayed. */\nexport const WhiteboardPeopleMenu = (): ReactElement => {\n const [open, setOpen] = useState(false);\n const handleOpen = useCallback(() => setOpen(true), []);\n const handleClose = useCallback(() => setOpen(false), []);\n\n const [boardMembers, setBoardMembers] = useState(BOARD_MEMBERS);\n const [managerId, setManagerId] = useState(1);\n const [managerTarget, setManagerTarget] = useState<BoardMember | null>(null);\n const [removeTarget, setRemoveTarget] = useState<BoardMember | null>(null);\n\n const [dialogOpen, setDialogOpen] = useState(false);\n const handleDialogOpen = useCallback(() => {\n setOpen(false);\n setDialogOpen(true);\n }, []);\n const handleDialogClose = useCallback(() => setDialogOpen(false), []);\n\n const handleAddMembers = useCallback((added: BoardMember[]) => {\n setBoardMembers((current) => [...current, ...added]);\n }, []);\n\n /* close the menu before opening any dialog (menus-that-open-dialogs rule) */\n const handleMakeManager = useCallback((person: BoardMember) => {\n setOpen(false);\n setManagerTarget(person);\n }, []);\n\n const handleRemove = useCallback((person: BoardMember) => {\n setOpen(false);\n setRemoveTarget(person);\n }, []);\n\n const handleManagerConfirm = useCallback(() => {\n if (managerTarget) {\n setManagerId(managerTarget.id);\n }\n setManagerTarget(null);\n }, [managerTarget]);\n\n const handleRemoveConfirm = useCallback(() => {\n if (removeTarget) {\n setBoardMembers((current) =>\n current.filter((person) => person.id !== removeTarget.id)\n );\n }\n setRemoveTarget(null);\n }, [removeTarget]);\n\n const members = boardMembers.filter((person) => !person.isClient);\n const clients = boardMembers.filter((person) => person.isClient);\n\n return (\n <>\n <AddMembersDialog\n open={dialogOpen}\n onClose={handleDialogClose}\n existingIds={boardMembers.map((person) => person.id)}\n onAdd={handleAddMembers}\n />\n <ConfirmDialog\n open={managerTarget !== null}\n dialogTitle=\"Change Whiteboard Manager\"\n dialogContent=\"By changing the Whiteboard Manager, you'll lose the ability to manage this whiteboard.\"\n confirmBtnText=\"Change\"\n shouldShowCancelButton\n onConfirm={handleManagerConfirm}\n onCancel={() => setManagerTarget(null)}\n />\n <ConfirmDialog\n open={removeTarget !== null}\n dialogTitle=\"Remove from Whiteboard\"\n dialogContent={`Remove ${\n removeTarget?.name.split(\" \")[0] ?? \"\"\n } from this whiteboard? They will immediately lose access to it.`}\n confirmBtnText=\"Remove\"\n shouldShowCancelButton\n onConfirm={handleRemoveConfirm}\n onCancel={() => setRemoveTarget(null)}\n />\n <Menu\n open={open}\n onOpen={handleOpen}\n onClose={handleClose}\n position=\"bottom-start\"\n target={\n <CounterButton\n active={open}\n label={String(boardMembers.length)}\n icon={<PeopleIcon />}\n className={open ? \"open\" : undefined}\n onClearAll={() => undefined}\n />\n }\n >\n <StyledPeopleMenu>\n <MenuHeader\n title=\"People\"\n rightElement={\n <IconButton\n size=\"small\"\n variant=\"text gray\"\n onClick={handleDialogOpen}\n >\n <AddCrossTinyIcon />\n </IconButton>\n }\n />\n <div className=\"people-scroll\">\n <PeopleMenuSection\n label=\"Members\"\n people={members}\n managerId={managerId}\n onMakeManager={handleMakeManager}\n onRemove={handleRemove}\n />\n {clients.length > 0 ? (\n <PeopleMenuSection\n label=\"Clients\"\n people={clients}\n managerId={managerId}\n onMakeManager={handleMakeManager}\n onRemove={handleRemove}\n />\n ) : null}\n </div>\n </StyledPeopleMenu>\n </Menu>\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}