@activecollab/components 2.0.440 → 2.0.442
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/Dialog/Dialog.js +8 -1
- package/dist/cjs/components/Dialog/Dialog.js.map +1 -1
- package/dist/cjs/components/Modal/Modal.js +16 -4
- package/dist/cjs/components/Modal/Modal.js.map +1 -1
- package/dist/cjs/components/Transitions/Fade/Fade.js +3 -2
- package/dist/cjs/components/Transitions/Fade/Fade.js.map +1 -1
- package/dist/cjs/components/Transitions/SlideFromTop/SlideFromTop.js +7 -5
- package/dist/cjs/components/Transitions/SlideFromTop/SlideFromTop.js.map +1 -1
- package/dist/cjs/presentation/shared/UserDetailsDialog.js +125 -0
- package/dist/cjs/presentation/shared/UserDetailsDialog.js.map +1 -0
- package/dist/cjs/presentation/shared/index.js +15 -0
- package/dist/cjs/presentation/shared/index.js.map +1 -1
- package/dist/cjs/presentation/whiteboard/bottomDock.js +10 -3
- package/dist/cjs/presentation/whiteboard/bottomDock.js.map +1 -1
- package/dist/cjs/presentation/whiteboard/canvasElements.js +114 -25
- package/dist/cjs/presentation/whiteboard/canvasElements.js.map +1 -1
- package/dist/cjs/presentation/whiteboard/entityCardActions.js +79 -0
- package/dist/cjs/presentation/whiteboard/entityCardActions.js.map +1 -0
- package/dist/cjs/presentation/whiteboard/inspector.js +20 -5
- package/dist/cjs/presentation/whiteboard/inspector.js.map +1 -1
- package/dist/cjs/presentation/whiteboard/outline.js +4 -2
- package/dist/cjs/presentation/whiteboard/outline.js.map +1 -1
- package/dist/cjs/presentation/whiteboard/projectElements.js +188 -53
- package/dist/cjs/presentation/whiteboard/projectElements.js.map +1 -1
- package/dist/esm/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/esm/components/Dialog/Dialog.js +10 -3
- package/dist/esm/components/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/Modal/Modal.d.ts +5 -0
- package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
- package/dist/esm/components/Modal/Modal.js +16 -4
- package/dist/esm/components/Modal/Modal.js.map +1 -1
- package/dist/esm/components/Transitions/Fade/Fade.d.ts +1 -0
- package/dist/esm/components/Transitions/Fade/Fade.d.ts.map +1 -1
- package/dist/esm/components/Transitions/Fade/Fade.js +2 -1
- package/dist/esm/components/Transitions/Fade/Fade.js.map +1 -1
- package/dist/esm/components/Transitions/SlideFromTop/SlideFromTop.d.ts +2 -0
- package/dist/esm/components/Transitions/SlideFromTop/SlideFromTop.d.ts.map +1 -1
- package/dist/esm/components/Transitions/SlideFromTop/SlideFromTop.js +6 -4
- package/dist/esm/components/Transitions/SlideFromTop/SlideFromTop.js.map +1 -1
- package/dist/esm/presentation/shared/UserDetailsDialog.d.ts +45 -0
- package/dist/esm/presentation/shared/UserDetailsDialog.d.ts.map +1 -0
- package/dist/esm/presentation/shared/UserDetailsDialog.js +115 -0
- package/dist/esm/presentation/shared/UserDetailsDialog.js.map +1 -0
- package/dist/esm/presentation/shared/index.d.ts +2 -0
- package/dist/esm/presentation/shared/index.d.ts.map +1 -1
- package/dist/esm/presentation/shared/index.js +1 -0
- package/dist/esm/presentation/shared/index.js.map +1 -1
- package/dist/esm/presentation/whiteboard/bottomDock.d.ts +3 -2
- package/dist/esm/presentation/whiteboard/bottomDock.d.ts.map +1 -1
- package/dist/esm/presentation/whiteboard/bottomDock.js +9 -4
- package/dist/esm/presentation/whiteboard/bottomDock.js.map +1 -1
- package/dist/esm/presentation/whiteboard/canvasElements.d.ts.map +1 -1
- package/dist/esm/presentation/whiteboard/canvasElements.js +94 -25
- package/dist/esm/presentation/whiteboard/canvasElements.js.map +1 -1
- package/dist/esm/presentation/whiteboard/entityCardActions.d.ts +37 -0
- package/dist/esm/presentation/whiteboard/entityCardActions.d.ts.map +1 -0
- package/dist/esm/presentation/whiteboard/entityCardActions.js +69 -0
- package/dist/esm/presentation/whiteboard/entityCardActions.js.map +1 -0
- package/dist/esm/presentation/whiteboard/inspector.d.ts.map +1 -1
- package/dist/esm/presentation/whiteboard/inspector.js +29 -7
- package/dist/esm/presentation/whiteboard/inspector.js.map +1 -1
- package/dist/esm/presentation/whiteboard/outline.d.ts +1 -1
- package/dist/esm/presentation/whiteboard/outline.d.ts.map +1 -1
- package/dist/esm/presentation/whiteboard/outline.js +5 -3
- package/dist/esm/presentation/whiteboard/outline.js.map +1 -1
- package/dist/esm/presentation/whiteboard/projectElements.d.ts +40 -8
- package/dist/esm/presentation/whiteboard/projectElements.d.ts.map +1 -1
- package/dist/esm/presentation/whiteboard/projectElements.js +181 -55
- package/dist/esm/presentation/whiteboard/projectElements.js.map +1 -1
- package/dist/index.js +34 -10
- 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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.taskDisplayName = exports.projectElementTitle = exports.projectClientLabel = exports.projectCardWidth = exports.isProjectTool = exports.groupTasks = exports.groupProjects = exports.TaskElementCard = exports.TASK_CARD_WIDTH = exports.StyledResolving = exports.StyledProjectElementBox = exports.StyledProjectDraft = exports.StyledPlaceholder = exports.StyledLimitedCard = exports.SEEDED_PROJECT_ELEMENT_POSITIONS = exports.SEEDED_PROJECT_ELEMENTS = exports.RESOLVE_MS = exports.ProjectElementPicker = exports.ProjectElementNode = exports.ProjectElementCard = exports.PROJECT_CARD_WIDTH = exports.PLACEHOLDER_MIN_WIDTH = exports.PLACEHOLDER_MIN_HEIGHT = exports.PICKER_PROJECT_LABELS = exports.PICKER_PROJECTS = exports.PICKER_PEOPLE = exports.PICKER_LABELS = exports.LimitedElementCard = exports.LIMITED_ACCESS_MESSAGE = exports.LIMITED_ACCESS_LABEL = exports.INTERNAL_CLIENT_LABEL = void 0;
|
|
6
|
+
exports.taskDisplayName = exports.projectElementTitle = exports.projectClientLabel = exports.projectCardWidth = exports.isProjectTool = exports.groupTasks = exports.groupProjects = exports.clampPersonSize = exports.TaskElementCard = exports.TASK_CARD_WIDTH = exports.StyledResolving = exports.StyledProjectElementBox = exports.StyledProjectDraft = exports.StyledPlaceholder = exports.StyledPersonResolving = exports.StyledPersonPlaceholder = exports.StyledPersonFace = exports.StyledPersonDraft = exports.StyledLimitedCard = exports.SEEDED_PROJECT_ELEMENT_POSITIONS = exports.SEEDED_PROJECT_ELEMENTS = exports.RESOLVE_MS = exports.ProjectElementPicker = exports.ProjectElementNode = exports.ProjectElementCard = exports.PersonElementFace = exports.PROJECT_CARD_WIDTH = exports.PLACEHOLDER_MIN_WIDTH = exports.PLACEHOLDER_MIN_HEIGHT = exports.PICKER_PROJECT_LABELS = exports.PICKER_PROJECTS = exports.PICKER_PEOPLE_LIST = exports.PICKER_PEOPLE = exports.PICKER_LABELS = exports.PERSON_MIN_SIZE = exports.PERSON_MAX_SIZE = exports.PERSON_DEFAULT_SIZE = exports.LimitedElementCard = exports.LIMITED_ACCESS_MESSAGE = exports.LIMITED_ACCESS_LABEL = exports.INTERNAL_CLIENT_LABEL = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
9
9
|
var _elements = require("./elements");
|
|
@@ -21,17 +21,17 @@ var _shared = require("../shared");
|
|
|
21
21
|
var _content = require("../stackedCard/content");
|
|
22
22
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
23
|
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); }
|
|
24
|
+
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; }
|
|
25
|
+
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; }
|
|
26
|
+
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; }
|
|
27
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
28
|
+
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); }
|
|
24
29
|
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
25
30
|
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."); }
|
|
26
31
|
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; } }
|
|
27
32
|
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; }
|
|
28
33
|
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; } }
|
|
29
34
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
30
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
31
|
-
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; }
|
|
32
|
-
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; }
|
|
33
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
34
|
-
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); }
|
|
35
35
|
/* ------------------------------------------------------------------ */
|
|
36
36
|
/* Project elements — placeholder → picker → resolved card */
|
|
37
37
|
/* ------------------------------------------------------------------ */
|
|
@@ -71,9 +71,19 @@ var TASK_CARD_WIDTH = exports.TASK_CARD_WIDTH = 260;
|
|
|
71
71
|
|
|
72
72
|
/* How long the "details are being resolved from the backend" flash lasts. */
|
|
73
73
|
var RESOLVE_MS = exports.RESOLVE_MS = 480;
|
|
74
|
-
/** True for the
|
|
74
|
+
/** True for the three board tools this module owns. */
|
|
75
75
|
var isProjectTool = exports.isProjectTool = function isProjectTool(tool) {
|
|
76
|
-
return tool === "project" || tool === "task";
|
|
76
|
+
return tool === "project" || tool === "task" || tool === "person";
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/* A person is not a card: a square whose width IS its height, so the avatar
|
|
80
|
+
circle stays a circle. The drawn width is its side, clamped to these bounds —
|
|
81
|
+
the same 1:1 lock the app enforces on the canvas grip and in the Inspector. */
|
|
82
|
+
var PERSON_DEFAULT_SIZE = exports.PERSON_DEFAULT_SIZE = 96;
|
|
83
|
+
var PERSON_MIN_SIZE = exports.PERSON_MIN_SIZE = 48;
|
|
84
|
+
var PERSON_MAX_SIZE = exports.PERSON_MAX_SIZE = 240;
|
|
85
|
+
var clampPersonSize = exports.clampPersonSize = function clampPersonSize(size) {
|
|
86
|
+
return Math.min(PERSON_MAX_SIZE, Math.max(PERSON_MIN_SIZE, Math.round(size)));
|
|
77
87
|
};
|
|
78
88
|
|
|
79
89
|
/* ------------------------------------------------------------------ */
|
|
@@ -138,6 +148,21 @@ var PICKER_PEOPLE = exports.PICKER_PEOPLE = {
|
|
|
138
148
|
}
|
|
139
149
|
};
|
|
140
150
|
|
|
151
|
+
/* The People picker's one flat list: everyone the board knows, by name, with
|
|
152
|
+
no company or project layer — a person chip points at a user, not at a
|
|
153
|
+
membership. The record key doubles as the row id. */
|
|
154
|
+
var PICKER_PEOPLE_LIST = exports.PICKER_PEOPLE_LIST = Object.entries(PICKER_PEOPLE).map(function (_ref) {
|
|
155
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
156
|
+
id = _ref2[0],
|
|
157
|
+
person = _ref2[1];
|
|
158
|
+
return {
|
|
159
|
+
id,
|
|
160
|
+
person
|
|
161
|
+
};
|
|
162
|
+
}).sort(function (a, b) {
|
|
163
|
+
return a.person.name.localeCompare(b.person.name);
|
|
164
|
+
});
|
|
165
|
+
|
|
141
166
|
/* Label colours are data too: they are the label's own colour in the app. */
|
|
142
167
|
var PICKER_LABELS = exports.PICKER_LABELS = {
|
|
143
168
|
assigned: {
|
|
@@ -450,6 +475,10 @@ var projectElementTitle = exports.projectElementTitle = function projectElementT
|
|
|
450
475
|
if (element.limited) {
|
|
451
476
|
return LIMITED_ACCESS_LABEL;
|
|
452
477
|
}
|
|
478
|
+
if (element.kind === "person") {
|
|
479
|
+
var _element$person$name, _element$person;
|
|
480
|
+
return (_element$person$name = (_element$person = element.person) === null || _element$person === void 0 ? void 0 : _element$person.name) !== null && _element$person$name !== void 0 ? _element$person$name : "Person";
|
|
481
|
+
}
|
|
453
482
|
if (element.kind === "project") {
|
|
454
483
|
var _element$project$name, _element$project;
|
|
455
484
|
return (_element$project$name = (_element$project = element.project) === null || _element$project === void 0 ? void 0 : _element$project.name) !== null && _element$project$name !== void 0 ? _element$project$name : "Project";
|
|
@@ -483,7 +512,8 @@ var SEEDED = [{
|
|
|
483
512
|
status: "resolved",
|
|
484
513
|
limited: true,
|
|
485
514
|
project: null,
|
|
486
|
-
task: null
|
|
515
|
+
task: null,
|
|
516
|
+
person: null
|
|
487
517
|
},
|
|
488
518
|
x: 120,
|
|
489
519
|
y: 200
|
|
@@ -496,7 +526,8 @@ var SEEDED = [{
|
|
|
496
526
|
status: "resolved",
|
|
497
527
|
limited: true,
|
|
498
528
|
project: null,
|
|
499
|
-
task: null
|
|
529
|
+
task: null,
|
|
530
|
+
person: null
|
|
500
531
|
},
|
|
501
532
|
x: 120,
|
|
502
533
|
y: 380
|
|
@@ -522,7 +553,7 @@ var SEEDED_PROJECT_ELEMENT_POSITIONS = exports.SEEDED_PROJECT_ELEMENT_POSITIONS
|
|
|
522
553
|
var StyledProjectElementBox = exports.StyledProjectElementBox = (0, _styledComponents.default)(_elements.StyledCanvasElement).withConfig({
|
|
523
554
|
displayName: "projectElements__StyledProjectElementBox",
|
|
524
555
|
componentId: "sc-1cayxi5-0"
|
|
525
|
-
})(["border-radius:8px;transition:width 160ms ease;&.limited{cursor:not-allowed;}"]);
|
|
556
|
+
})(["border-radius:8px;transition:width 160ms ease;&.limited{cursor:not-allowed;}&.person{border-radius:50%;}"]);
|
|
526
557
|
|
|
527
558
|
/* The rubber band and the armed tool's hover preview — the same blue dashed
|
|
528
559
|
box the link tool draws, so the gesture reads as one board convention. */
|
|
@@ -531,18 +562,44 @@ var StyledProjectDraft = exports.StyledProjectDraft = _styledComponents.default.
|
|
|
531
562
|
componentId: "sc-1cayxi5-1"
|
|
532
563
|
})(["position:absolute;box-sizing:border-box;border:1.5px dashed ", ";border-radius:8px;background-color:rgba(59,130,246,0.08);pointer-events:none;"], _elements.SELECTION_BLUE);
|
|
533
564
|
|
|
565
|
+
/* The person rubber band and hover preview: the same dashed blue, round. */
|
|
566
|
+
var StyledPersonDraft = exports.StyledPersonDraft = (0, _styledComponents.default)(StyledProjectDraft).withConfig({
|
|
567
|
+
displayName: "projectElements__StyledPersonDraft",
|
|
568
|
+
componentId: "sc-1cayxi5-2"
|
|
569
|
+
})(["border-radius:50%;"]);
|
|
570
|
+
|
|
534
571
|
/* The placeholder that waits for the picker's answer. Card-like on purpose:
|
|
535
572
|
rounded, dashed, tinted — a card-shaped hole, not a selection marquee. */
|
|
536
573
|
var StyledPlaceholder = exports.StyledPlaceholder = _styledComponents.default.div.withConfig({
|
|
537
574
|
displayName: "projectElements__StyledPlaceholder",
|
|
538
|
-
componentId: "sc-1cayxi5-
|
|
575
|
+
componentId: "sc-1cayxi5-3"
|
|
539
576
|
})(["box-sizing:border-box;width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:12px;border:1.5px dashed var(--border-primary);border-radius:8px;background-color:var(--color-theme-200);user-select:none;"]);
|
|
540
577
|
|
|
578
|
+
/* A person's placeholder is the circle its avatar will fill — dashed and
|
|
579
|
+
tinted like the card placeholder, with the person glyph where the face will
|
|
580
|
+
be, so the pick swaps one circle for another without a change of shape. */
|
|
581
|
+
var StyledPersonPlaceholder = exports.StyledPersonPlaceholder = (0, _styledComponents.default)(StyledPlaceholder).withConfig({
|
|
582
|
+
displayName: "projectElements__StyledPersonPlaceholder",
|
|
583
|
+
componentId: "sc-1cayxi5-4"
|
|
584
|
+
})(["border-radius:50%;padding:0;color:var(--color-theme-600);svg{width:40%;height:40%;fill:currentColor;}"]);
|
|
585
|
+
var StyledPersonResolving = exports.StyledPersonResolving = _styledComponents.default.div.withConfig({
|
|
586
|
+
displayName: "projectElements__StyledPersonResolving",
|
|
587
|
+
componentId: "sc-1cayxi5-5"
|
|
588
|
+
})(["width:100%;height:100%;border-radius:50%;overflow:hidden;.c-loader{width:100%;height:100%;border-radius:50%;}"]);
|
|
589
|
+
|
|
590
|
+
/* The resolved chip. The avatar fills the element's square and the name hangs
|
|
591
|
+
below it, outside the box: the circle is the whole footprint the board
|
|
592
|
+
measures, so the caption never changes the element's size. */
|
|
593
|
+
var StyledPersonFace = exports.StyledPersonFace = _styledComponents.default.div.withConfig({
|
|
594
|
+
displayName: "projectElements__StyledPersonFace",
|
|
595
|
+
componentId: "sc-1cayxi5-6"
|
|
596
|
+
})(["position:relative;width:100%;height:100%;border-radius:50%;user-select:none;.person-avatar{width:100%;height:100%;}.person-name{position:absolute;top:100%;left:50%;transform:translateX(-50%);margin-top:6px;white-space:nowrap;}"]);
|
|
597
|
+
|
|
541
598
|
/* The resolving flash: the placeholder's box, with the card's rows sketched in
|
|
542
599
|
so the swap to the real card does not read as a different element. */
|
|
543
600
|
var StyledResolving = exports.StyledResolving = (0, _styledComponents.default)(StyledPlaceholder).withConfig({
|
|
544
601
|
displayName: "projectElements__StyledResolving",
|
|
545
|
-
componentId: "sc-1cayxi5-
|
|
602
|
+
componentId: "sc-1cayxi5-7"
|
|
546
603
|
})(["flex-direction:column;align-items:stretch;justify-content:center;gap:10px;.c-loader{height:12px;}"]);
|
|
547
604
|
|
|
548
605
|
/**
|
|
@@ -564,8 +621,8 @@ var StyledResolving = exports.StyledResolving = (0, _styledComponents.default)(S
|
|
|
564
621
|
*/
|
|
565
622
|
var StyledLimitedCard = exports.StyledLimitedCard = _styledComponents.default.div.withConfig({
|
|
566
623
|
displayName: "projectElements__StyledLimitedCard",
|
|
567
|
-
componentId: "sc-1cayxi5-
|
|
568
|
-
})(["box-sizing:border-box;width:100%;height:100%;min-height:96px;display:flex;align-items:center;justify-content:center;padding:12px;border:1px solid var(--border-primary);border-radius:8px;background-color:var(--muted-surface);background-image:repeating-linear-gradient( -45deg,transparent,transparent 5px,var(--stripe-pattern) 5px,var(--stripe-pattern) 5.7px );color:var(--muted-surface-text);cursor:not-allowed;user-select:none;.limited-label{color:var(--muted-surface-text);}"]);
|
|
624
|
+
componentId: "sc-1cayxi5-8"
|
|
625
|
+
})(["box-sizing:border-box;width:100%;height:100%;min-height:96px;display:flex;align-items:center;justify-content:center;padding:12px;border:1px solid var(--border-primary);border-radius:8px;background-color:var(--muted-surface);background-image:repeating-linear-gradient( -45deg,transparent,transparent 5px,var(--stripe-pattern) 5px,var(--stripe-pattern) 5.7px );color:var(--muted-surface-text);cursor:not-allowed;user-select:none;.limited-label{color:var(--muted-surface-text);}&.round{border-radius:50%;min-height:0;}"]);
|
|
569
626
|
|
|
570
627
|
/**
|
|
571
628
|
* Both resolved faces are the design system's `StackedCard` — the same shell the
|
|
@@ -578,7 +635,7 @@ var StyledLimitedCard = exports.StyledLimitedCard = _styledComponents.default.di
|
|
|
578
635
|
*/
|
|
579
636
|
var StyledEntityCard = (0, _styledComponents.default)(_StackedCard.StackedCard).withConfig({
|
|
580
637
|
displayName: "projectElements__StyledEntityCard",
|
|
581
|
-
componentId: "sc-1cayxi5-
|
|
638
|
+
componentId: "sc-1cayxi5-9"
|
|
582
639
|
})(["&&{width:100%;}user-select:none;"]);
|
|
583
640
|
/**
|
|
584
641
|
* The task face — the shared `TaskCard`, with the project line switched on.
|
|
@@ -593,11 +650,11 @@ var StyledEntityCard = (0, _styledComponents.default)(_StackedCard.StackedCard).
|
|
|
593
650
|
* The title is the app's own display name (`#123: Name`, `taskDisplayName`), so
|
|
594
651
|
* the card's separate task-number prefix stays off.
|
|
595
652
|
*/
|
|
596
|
-
var TaskElementCard = exports.TaskElementCard = function TaskElementCard(
|
|
653
|
+
var TaskElementCard = exports.TaskElementCard = function TaskElementCard(_ref3) {
|
|
597
654
|
var _task$subtasks, _task$comments, _task$date;
|
|
598
|
-
var project =
|
|
599
|
-
task =
|
|
600
|
-
selected =
|
|
655
|
+
var project = _ref3.project,
|
|
656
|
+
task = _ref3.task,
|
|
657
|
+
selected = _ref3.selected;
|
|
601
658
|
return /*#__PURE__*/_react.default.createElement(StyledEntityCard, {
|
|
602
659
|
selected: selected
|
|
603
660
|
}, /*#__PURE__*/_react.default.createElement(_content.TaskCard, {
|
|
@@ -622,9 +679,9 @@ var TaskElementCard = exports.TaskElementCard = function TaskElementCard(_ref) {
|
|
|
622
679
|
* right. No progress indicator, and no row at all when the project has neither a
|
|
623
680
|
* leader nor a label.
|
|
624
681
|
*/
|
|
625
|
-
var ProjectElementCard = exports.ProjectElementCard = function ProjectElementCard(
|
|
626
|
-
var project =
|
|
627
|
-
selected =
|
|
682
|
+
var ProjectElementCard = exports.ProjectElementCard = function ProjectElementCard(_ref4) {
|
|
683
|
+
var project = _ref4.project,
|
|
684
|
+
selected = _ref4.selected;
|
|
628
685
|
return /*#__PURE__*/_react.default.createElement(StyledEntityCard, {
|
|
629
686
|
selected: selected
|
|
630
687
|
}, /*#__PURE__*/_react.default.createElement(_content.ProjectCard, {
|
|
@@ -650,25 +707,74 @@ var ProjectElementCard = exports.ProjectElementCard = function ProjectElementCar
|
|
|
650
707
|
* not the entity's identity — the opposite of the tooltip Workload disables on
|
|
651
708
|
* a limited event, which would have leaked the name.
|
|
652
709
|
*/
|
|
653
|
-
var LimitedElementCard = exports.LimitedElementCard = function LimitedElementCard() {
|
|
710
|
+
var LimitedElementCard = exports.LimitedElementCard = function LimitedElementCard(_ref5) {
|
|
711
|
+
var _ref5$round = _ref5.round,
|
|
712
|
+
round = _ref5$round === void 0 ? false : _ref5$round;
|
|
654
713
|
return /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
|
|
655
714
|
title: LIMITED_ACCESS_MESSAGE
|
|
656
715
|
}, /*#__PURE__*/_react.default.createElement(StyledLimitedCard, {
|
|
657
|
-
"data-testid": "wb-limited-card"
|
|
716
|
+
"data-testid": "wb-limited-card",
|
|
717
|
+
className: round ? "round" : undefined
|
|
658
718
|
}, /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
|
|
659
719
|
weight: "bold",
|
|
660
720
|
className: "limited-label"
|
|
661
721
|
}, LIMITED_ACCESS_LABEL)));
|
|
662
722
|
};
|
|
723
|
+
/**
|
|
724
|
+
* The person face — an avatar circle with a name caption. Always a chip: never
|
|
725
|
+
* a StackedCard, it never expands, no hover card, no online-status dot. The
|
|
726
|
+
* initials avatar stands in for the server-rendered avatar, as it does on the
|
|
727
|
+
* cards.
|
|
728
|
+
*/
|
|
729
|
+
var PersonElementFace = exports.PersonElementFace = function PersonElementFace(_ref6) {
|
|
730
|
+
var person = _ref6.person,
|
|
731
|
+
size = _ref6.size;
|
|
732
|
+
return /*#__PURE__*/_react.default.createElement(StyledPersonFace, {
|
|
733
|
+
"data-testid": "wb-person-face"
|
|
734
|
+
}, /*#__PURE__*/_react.default.createElement(_shared.RoundAvatar, {
|
|
735
|
+
className: "person-avatar",
|
|
736
|
+
$bg: person.color,
|
|
737
|
+
$size: size,
|
|
738
|
+
$bordered: false,
|
|
739
|
+
style: {
|
|
740
|
+
fontSize: Math.round(size * 0.28)
|
|
741
|
+
},
|
|
742
|
+
"aria-label": person.name
|
|
743
|
+
}, person.initials), /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
|
|
744
|
+
weight: "bold",
|
|
745
|
+
className: "person-name"
|
|
746
|
+
}, person.name));
|
|
747
|
+
};
|
|
663
748
|
|
|
664
749
|
/** One board element, in whichever of its three states it currently is. */
|
|
665
|
-
var ProjectElementNode = exports.ProjectElementNode = function ProjectElementNode(
|
|
666
|
-
var element =
|
|
667
|
-
selected =
|
|
750
|
+
var ProjectElementNode = exports.ProjectElementNode = function ProjectElementNode(_ref7) {
|
|
751
|
+
var element = _ref7.element,
|
|
752
|
+
selected = _ref7.selected;
|
|
668
753
|
/* Checked before anything else: a limited element must never be able to fall
|
|
669
754
|
through to a branch that renders entity data. */
|
|
670
755
|
if (element.limited) {
|
|
671
|
-
return /*#__PURE__*/_react.default.createElement(LimitedElementCard,
|
|
756
|
+
return /*#__PURE__*/_react.default.createElement(LimitedElementCard, {
|
|
757
|
+
round: element.kind === "person"
|
|
758
|
+
});
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
/* A person is the board's second non-card render: every state is a circle. */
|
|
762
|
+
if (element.kind === "person") {
|
|
763
|
+
if (element.status === "placeholder") {
|
|
764
|
+
return /*#__PURE__*/_react.default.createElement(StyledPersonPlaceholder, {
|
|
765
|
+
"aria-label": "Pick a person"
|
|
766
|
+
}, /*#__PURE__*/_react.default.createElement(_Icons.PersonIcon, null));
|
|
767
|
+
}
|
|
768
|
+
if (element.status === "resolving") {
|
|
769
|
+
return /*#__PURE__*/_react.default.createElement(StyledPersonResolving, null, /*#__PURE__*/_react.default.createElement(_Loaders.SkeletonLoader, null));
|
|
770
|
+
}
|
|
771
|
+
if (element.person) {
|
|
772
|
+
return /*#__PURE__*/_react.default.createElement(PersonElementFace, {
|
|
773
|
+
person: element.person,
|
|
774
|
+
size: element.width
|
|
775
|
+
});
|
|
776
|
+
}
|
|
777
|
+
return /*#__PURE__*/_react.default.createElement(StyledPersonPlaceholder, null);
|
|
672
778
|
}
|
|
673
779
|
if (element.status === "placeholder") {
|
|
674
780
|
return /*#__PURE__*/_react.default.createElement(StyledPlaceholder, null, /*#__PURE__*/_react.default.createElement(_Typography.Caption1, {
|
|
@@ -716,30 +822,31 @@ var ProjectElementNode = exports.ProjectElementNode = function ProjectElementNod
|
|
|
716
822
|
share: the portal, the overlay, the focus lock and the Esc handler. */
|
|
717
823
|
var StyledPickerPanel = (0, _styledComponents.default)(_Paper.Paper).withConfig({
|
|
718
824
|
displayName: "projectElements__StyledPickerPanel",
|
|
719
|
-
componentId: "sc-1cayxi5-
|
|
825
|
+
componentId: "sc-1cayxi5-10"
|
|
720
826
|
})(["position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;flex-direction:column;width:470px;max-width:calc(100vw - 32px);max-height:70vh;overflow:hidden;&&{border-radius:12px;border:1px solid var(--border-primary);box-shadow:0 18px 48px rgba(0,0,0,0.24);}"]);
|
|
721
827
|
|
|
722
828
|
/* Search + adornments, mirroring `Select`'s own form row: the back arrow is a
|
|
723
829
|
start adornment (TaskList), the group-by sort a end adornment (ProjectList). */
|
|
724
830
|
var StyledPickerHeader = _styledComponents.default.div.withConfig({
|
|
725
831
|
displayName: "projectElements__StyledPickerHeader",
|
|
726
|
-
componentId: "sc-1cayxi5-
|
|
832
|
+
componentId: "sc-1cayxi5-11"
|
|
727
833
|
})(["display:flex;align-items:center;gap:8px;flex-shrink:0;padding:12px 12px 8px;.picker-search{width:100%;border-radius:8px;}.picker-search:focus-within{border-color:var(--color-primary);outline:1px solid var(--color-primary);}"]);
|
|
728
834
|
var StyledPickerList = _styledComponents.default.div.withConfig({
|
|
729
835
|
displayName: "projectElements__StyledPickerList",
|
|
730
|
-
componentId: "sc-1cayxi5-
|
|
836
|
+
componentId: "sc-1cayxi5-12"
|
|
731
837
|
})(["flex:1 1 auto;min-height:0;overflow-y:auto;padding:4px 0 12px;.picker-group-header{box-sizing:border-box;height:36px;display:flex;align-items:center;padding:0 20px;margin-top:4px;}.picker-empty{padding:24px 20px;text-align:center;}"]);
|
|
732
838
|
|
|
733
839
|
/* A generously spaced row: the name on the left, an empty radio on the right —
|
|
734
840
|
the shape `Select` gives a single-choice option, at picker scale. */
|
|
735
841
|
var StyledPickerRow = _styledComponents.default.div.withConfig({
|
|
736
842
|
displayName: "projectElements__StyledPickerRow",
|
|
737
|
-
componentId: "sc-1cayxi5-
|
|
738
|
-
})(["box-sizing:border-box;height:56px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 20px;cursor:pointer;outline:none;&:hover,&:focus-visible{background-color:var(--color-theme-200);}.row-name{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.c-radio-btn{flex-shrink:0;}"]);
|
|
739
|
-
var PickerRow = function PickerRow(
|
|
740
|
-
var id =
|
|
741
|
-
name =
|
|
742
|
-
|
|
843
|
+
componentId: "sc-1cayxi5-13"
|
|
844
|
+
})(["box-sizing:border-box;height:56px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 20px;cursor:pointer;outline:none;&:hover,&:focus-visible{background-color:var(--color-theme-200);}.row-lead{display:flex;align-items:center;gap:12px;min-width:0;}.row-name{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.c-radio-btn{flex-shrink:0;}"]);
|
|
845
|
+
var PickerRow = function PickerRow(_ref8) {
|
|
846
|
+
var id = _ref8.id,
|
|
847
|
+
name = _ref8.name,
|
|
848
|
+
avatar = _ref8.avatar,
|
|
849
|
+
onSelect = _ref8.onSelect;
|
|
743
850
|
return /*#__PURE__*/_react.default.createElement(StyledPickerRow, {
|
|
744
851
|
role: "button",
|
|
745
852
|
tabIndex: 0,
|
|
@@ -751,23 +858,31 @@ var PickerRow = function PickerRow(_ref4) {
|
|
|
751
858
|
}
|
|
752
859
|
}
|
|
753
860
|
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
861
|
+
className: "row-lead"
|
|
862
|
+
}, avatar ? /*#__PURE__*/_react.default.createElement(_shared.RoundAvatar, {
|
|
863
|
+
$bg: avatar.color,
|
|
864
|
+
$size: 24,
|
|
865
|
+
$bordered: false
|
|
866
|
+
}, avatar.initials) : null, /*#__PURE__*/_react.default.createElement("span", {
|
|
754
867
|
className: "row-name"
|
|
755
|
-
}, /*#__PURE__*/_react.default.createElement(_Typography.Body2, null, name)), /*#__PURE__*/_react.default.createElement(_RadioButton.RadioButton, {
|
|
868
|
+
}, /*#__PURE__*/_react.default.createElement(_Typography.Body2, null, name))), /*#__PURE__*/_react.default.createElement(_RadioButton.RadioButton, {
|
|
756
869
|
id: "wb-picker-".concat(id),
|
|
757
870
|
tabIndex: -1
|
|
758
871
|
}));
|
|
759
872
|
};
|
|
760
873
|
/**
|
|
761
|
-
* One picker,
|
|
762
|
-
* `MenuSelector/ProjectList` (one step)
|
|
763
|
-
* then task)
|
|
764
|
-
*
|
|
874
|
+
* One picker, three flows — the same split the app makes between
|
|
875
|
+
* `MenuSelector/ProjectList` (one step), `ProjectTaskMenuSelector` (project,
|
|
876
|
+
* then task) and the flat People list (one step, no grouping). The task flow
|
|
877
|
+
* deliberately drops the app's "Directly on project" default option: a task
|
|
878
|
+
* card has to be a task.
|
|
765
879
|
*/
|
|
766
|
-
var ProjectElementPicker = exports.ProjectElementPicker = function ProjectElementPicker(
|
|
767
|
-
var kind =
|
|
768
|
-
onSelectProject =
|
|
769
|
-
onSelectTask =
|
|
770
|
-
|
|
880
|
+
var ProjectElementPicker = exports.ProjectElementPicker = function ProjectElementPicker(_ref9) {
|
|
881
|
+
var kind = _ref9.kind,
|
|
882
|
+
onSelectProject = _ref9.onSelectProject,
|
|
883
|
+
onSelectTask = _ref9.onSelectTask,
|
|
884
|
+
onSelectPerson = _ref9.onSelectPerson,
|
|
885
|
+
onCancel = _ref9.onCancel;
|
|
771
886
|
var _useState = (0, _react.useState)(null),
|
|
772
887
|
_useState2 = _slicedToArray(_useState, 2),
|
|
773
888
|
project = _useState2[0],
|
|
@@ -783,6 +898,7 @@ var ProjectElementPicker = exports.ProjectElementPicker = function ProjectElemen
|
|
|
783
898
|
gesture that created it. */
|
|
784
899
|
var pressedInsideRef = (0, _react.useRef)(false);
|
|
785
900
|
var onTaskStep = kind === "task" && project !== null;
|
|
901
|
+
var onPeopleStep = kind === "person";
|
|
786
902
|
var projectGroups = (0, _react.useMemo)(function () {
|
|
787
903
|
return groupProjects(PICKER_PROJECTS.filter(function (entry) {
|
|
788
904
|
return matchesQuery(entry.name, query);
|
|
@@ -805,7 +921,14 @@ var ProjectElementPicker = exports.ProjectElementPicker = function ProjectElemen
|
|
|
805
921
|
setProject(null);
|
|
806
922
|
setQuery("");
|
|
807
923
|
};
|
|
808
|
-
var
|
|
924
|
+
var people = (0, _react.useMemo)(function () {
|
|
925
|
+
return PICKER_PEOPLE_LIST.filter(function (entry) {
|
|
926
|
+
return matchesQuery(entry.person.name, query);
|
|
927
|
+
});
|
|
928
|
+
}, [query]);
|
|
929
|
+
var isEmpty = onPeopleStep ? people.length === 0 : onTaskStep ? taskGroups.length === 0 : projectGroups.length === 0;
|
|
930
|
+
var searchPlaceholder = onPeopleStep ? "Search a person" : onTaskStep ? "Search a task" : "Search a project";
|
|
931
|
+
var emptyLabel = onPeopleStep ? "No people" : onTaskStep ? "No Result" : "No Projects";
|
|
809
932
|
return /*#__PURE__*/_react.default.createElement(_Modal.Modal, {
|
|
810
933
|
open: true,
|
|
811
934
|
onClose: onCancel,
|
|
@@ -831,11 +954,11 @@ var ProjectElementPicker = exports.ProjectElementPicker = function ProjectElemen
|
|
|
831
954
|
className: "picker-search",
|
|
832
955
|
autoFocus: true,
|
|
833
956
|
value: query,
|
|
834
|
-
placeholder:
|
|
957
|
+
placeholder: searchPlaceholder,
|
|
835
958
|
onChange: function onChange(event) {
|
|
836
959
|
return setQuery(event.target.value);
|
|
837
960
|
}
|
|
838
|
-
}), onTaskStep ? null : /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
|
|
961
|
+
}), onTaskStep || onPeopleStep ? null : /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
|
|
839
962
|
title: "Group by"
|
|
840
963
|
}, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
|
|
841
964
|
type: "button",
|
|
@@ -844,7 +967,19 @@ var ProjectElementPicker = exports.ProjectElementPicker = function ProjectElemen
|
|
|
844
967
|
className: "picker-empty"
|
|
845
968
|
}, /*#__PURE__*/_react.default.createElement(_Typography.Body2, {
|
|
846
969
|
color: "tertiary"
|
|
847
|
-
},
|
|
970
|
+
}, emptyLabel)) : null, onPeopleStep ? people.map(function (_ref0) {
|
|
971
|
+
var id = _ref0.id,
|
|
972
|
+
person = _ref0.person;
|
|
973
|
+
return /*#__PURE__*/_react.default.createElement(PickerRow, {
|
|
974
|
+
key: id,
|
|
975
|
+
id: id,
|
|
976
|
+
name: person.name,
|
|
977
|
+
avatar: person,
|
|
978
|
+
onSelect: function onSelect() {
|
|
979
|
+
return onSelectPerson(person);
|
|
980
|
+
}
|
|
981
|
+
});
|
|
982
|
+
}) : null, onTaskStep && project ? taskGroups.map(function (group) {
|
|
848
983
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
849
984
|
key: group.taskList
|
|
850
985
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -861,7 +996,7 @@ var ProjectElementPicker = exports.ProjectElementPicker = function ProjectElemen
|
|
|
861
996
|
}
|
|
862
997
|
});
|
|
863
998
|
}));
|
|
864
|
-
}) : null, onTaskStep ? null : projectGroups.map(function (group) {
|
|
999
|
+
}) : null, onTaskStep || onPeopleStep ? null : projectGroups.map(function (group) {
|
|
865
1000
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
866
1001
|
key: group.client
|
|
867
1002
|
}, /*#__PURE__*/_react.default.createElement("div", {
|