@activecollab/components 2.0.408 → 2.0.409

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 (83) hide show
  1. package/dist/cjs/components/Icons/collection/Project.js +98 -0
  2. package/dist/cjs/components/Icons/collection/Project.js.map +1 -0
  3. package/dist/cjs/components/Icons/collection/Task.js +61 -0
  4. package/dist/cjs/components/Icons/collection/Task.js.map +1 -0
  5. package/dist/cjs/components/Icons/collection/index.js +14 -0
  6. package/dist/cjs/components/Icons/collection/index.js.map +1 -1
  7. package/dist/cjs/presentation/stackedCard/content/NoteCard.js +7 -3
  8. package/dist/cjs/presentation/stackedCard/content/NoteCard.js.map +1 -1
  9. package/dist/cjs/presentation/stackedCard/content/ProjectCard.js +136 -0
  10. package/dist/cjs/presentation/stackedCard/content/ProjectCard.js.map +1 -0
  11. package/dist/cjs/presentation/stackedCard/content/TaskCard.js +183 -56
  12. package/dist/cjs/presentation/stackedCard/content/TaskCard.js.map +1 -1
  13. package/dist/cjs/presentation/stackedCard/content/index.js +11 -0
  14. package/dist/cjs/presentation/stackedCard/content/index.js.map +1 -1
  15. package/dist/cjs/presentation/stackedCard/content/shared.js +66 -19
  16. package/dist/cjs/presentation/stackedCard/content/shared.js.map +1 -1
  17. package/dist/cjs/presentation/whiteboard/bottomDock.js +95 -32
  18. package/dist/cjs/presentation/whiteboard/bottomDock.js.map +1 -1
  19. package/dist/cjs/presentation/whiteboard/canvasElements.js +196 -8
  20. package/dist/cjs/presentation/whiteboard/canvasElements.js.map +1 -1
  21. package/dist/cjs/presentation/whiteboard/inspector.js +149 -47
  22. package/dist/cjs/presentation/whiteboard/inspector.js.map +1 -1
  23. package/dist/cjs/presentation/whiteboard/outline.js +91 -18
  24. package/dist/cjs/presentation/whiteboard/outline.js.map +1 -1
  25. package/dist/cjs/presentation/whiteboard/projectElements.js +883 -0
  26. package/dist/cjs/presentation/whiteboard/projectElements.js.map +1 -0
  27. package/dist/esm/components/Icons/collection/Project.d.ts +36 -0
  28. package/dist/esm/components/Icons/collection/Project.d.ts.map +1 -0
  29. package/dist/esm/components/Icons/collection/Project.js +91 -0
  30. package/dist/esm/components/Icons/collection/Project.js.map +1 -0
  31. package/dist/esm/components/Icons/collection/Task.d.ts +32 -0
  32. package/dist/esm/components/Icons/collection/Task.d.ts.map +1 -0
  33. package/dist/esm/components/Icons/collection/Task.js +54 -0
  34. package/dist/esm/components/Icons/collection/Task.js.map +1 -0
  35. package/dist/esm/components/Icons/collection/index.d.ts +2 -0
  36. package/dist/esm/components/Icons/collection/index.d.ts.map +1 -1
  37. package/dist/esm/components/Icons/collection/index.js +2 -0
  38. package/dist/esm/components/Icons/collection/index.js.map +1 -1
  39. package/dist/esm/presentation/stackedCard/content/NoteCard.d.ts +8 -1
  40. package/dist/esm/presentation/stackedCard/content/NoteCard.d.ts.map +1 -1
  41. package/dist/esm/presentation/stackedCard/content/NoteCard.js +8 -4
  42. package/dist/esm/presentation/stackedCard/content/NoteCard.js.map +1 -1
  43. package/dist/esm/presentation/stackedCard/content/ProjectCard.d.ts +64 -0
  44. package/dist/esm/presentation/stackedCard/content/ProjectCard.d.ts.map +1 -0
  45. package/dist/esm/presentation/stackedCard/content/ProjectCard.js +128 -0
  46. package/dist/esm/presentation/stackedCard/content/ProjectCard.js.map +1 -0
  47. package/dist/esm/presentation/stackedCard/content/TaskCard.d.ts +64 -2
  48. package/dist/esm/presentation/stackedCard/content/TaskCard.d.ts.map +1 -1
  49. package/dist/esm/presentation/stackedCard/content/TaskCard.js +181 -58
  50. package/dist/esm/presentation/stackedCard/content/TaskCard.js.map +1 -1
  51. package/dist/esm/presentation/stackedCard/content/index.d.ts +1 -0
  52. package/dist/esm/presentation/stackedCard/content/index.d.ts.map +1 -1
  53. package/dist/esm/presentation/stackedCard/content/index.js +1 -0
  54. package/dist/esm/presentation/stackedCard/content/index.js.map +1 -1
  55. package/dist/esm/presentation/stackedCard/content/shared.d.ts +30 -0
  56. package/dist/esm/presentation/stackedCard/content/shared.d.ts.map +1 -1
  57. package/dist/esm/presentation/stackedCard/content/shared.js +66 -19
  58. package/dist/esm/presentation/stackedCard/content/shared.js.map +1 -1
  59. package/dist/esm/presentation/whiteboard/bottomDock.d.ts +30 -7
  60. package/dist/esm/presentation/whiteboard/bottomDock.d.ts.map +1 -1
  61. package/dist/esm/presentation/whiteboard/bottomDock.js +79 -32
  62. package/dist/esm/presentation/whiteboard/bottomDock.js.map +1 -1
  63. package/dist/esm/presentation/whiteboard/canvasElements.d.ts +4 -1
  64. package/dist/esm/presentation/whiteboard/canvasElements.d.ts.map +1 -1
  65. package/dist/esm/presentation/whiteboard/canvasElements.js +158 -7
  66. package/dist/esm/presentation/whiteboard/canvasElements.js.map +1 -1
  67. package/dist/esm/presentation/whiteboard/inspector.d.ts +35 -1
  68. package/dist/esm/presentation/whiteboard/inspector.d.ts.map +1 -1
  69. package/dist/esm/presentation/whiteboard/inspector.js +170 -68
  70. package/dist/esm/presentation/whiteboard/inspector.js.map +1 -1
  71. package/dist/esm/presentation/whiteboard/outline.d.ts +23 -3
  72. package/dist/esm/presentation/whiteboard/outline.d.ts.map +1 -1
  73. package/dist/esm/presentation/whiteboard/outline.js +89 -18
  74. package/dist/esm/presentation/whiteboard/outline.js.map +1 -1
  75. package/dist/esm/presentation/whiteboard/projectElements.d.ts +267 -0
  76. package/dist/esm/presentation/whiteboard/projectElements.d.ts.map +1 -0
  77. package/dist/esm/presentation/whiteboard/projectElements.js +824 -0
  78. package/dist/esm/presentation/whiteboard/projectElements.js.map +1 -0
  79. package/dist/index.js +629 -490
  80. package/dist/index.js.map +1 -1
  81. package/dist/index.min.js +1 -1
  82. package/dist/index.min.js.map +1 -1
  83. package/package.json +1 -1
@@ -3,11 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.outlineLabel = exports.UNGROUPED = exports.StyledSidebarHeader = exports.StyledPanelChooseSlot = exports.StyledOutlineTypeIcon = exports.StyledOutlineToggle = exports.StyledOutlineSignifiers = exports.StyledOutlineSidebar = exports.StyledOutlineRow = exports.StyledOutlineResizer = exports.StyledOutlineName = exports.StyledOutlineGroupRow = exports.StyledOutlineElementMenu = exports.StyledOutlineCounter = exports.StyledOutlineChildRow = exports.StyledOutlineBody = exports.StyledNewGroupRow = exports.StyledInfoPanel = exports.StyledChooseRow = exports.OutlineMenuSliderStyle = exports.OutlineGroupOptionsMenu = exports.OutlineElementOptionsMenu = exports.OutlineCounter = exports.OUTLINE_WIDTH = exports.OUTLINE_TYPE_LABELS = exports.OUTLINE_TYPE_ICONS = exports.OUTLINE_MIN_WIDTH = exports.OUTLINE_MENU_WIDTH = exports.OUTLINE_MENU_LIST_STYLE = exports.OUTLINE_MAX_WIDTH = exports.OUTLINE_GROUPS = exports.OUTLINE_ELEMENTS = exports.LeftSidebar = exports.LeftMenuContents = exports.InfoPanelContent = exports.INFO_ROWS = exports.ARRANGE_ITEMS = void 0;
6
+ exports.outlineLabel = exports.entityOutlineRows = exports.UNGROUPED = exports.StyledSidebarHeader = exports.StyledPanelChooseSlot = exports.StyledOutlineTypeIcon = exports.StyledOutlineToggle = exports.StyledOutlineSignifiers = exports.StyledOutlineSidebar = exports.StyledOutlineRow = exports.StyledOutlineResizer = exports.StyledOutlineName = exports.StyledOutlineGroupRow = exports.StyledOutlineElementMenu = exports.StyledOutlineCounter = exports.StyledOutlineChildRow = exports.StyledOutlineBody = exports.StyledNewGroupRow = exports.StyledInfoPanel = exports.StyledChooseRow = exports.OutlineMenuSliderStyle = exports.OutlineGroupOptionsMenu = exports.OutlineElementOptionsMenu = exports.OutlineCounter = exports.OUTLINE_WIDTH = exports.OUTLINE_TYPE_LABELS = exports.OUTLINE_TYPE_ICONS = exports.OUTLINE_MIN_WIDTH = exports.OUTLINE_MENU_WIDTH = exports.OUTLINE_MENU_LIST_STYLE = exports.OUTLINE_MAX_WIDTH = exports.OUTLINE_GROUPS = exports.OUTLINE_ELEMENTS = exports.LeftSidebar = exports.LeftMenuContents = exports.InfoPanelContent = exports.INFO_ROWS = exports.ARRANGE_ITEMS = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
9
9
  var _elements = require("./elements");
10
10
  var _peopleMenu = require("./peopleMenu");
11
+ var _projectElements = require("./projectElements");
11
12
  var _Button = require("../../components/Button");
12
13
  var _Chip = require("../../components/Chip");
13
14
  var _ChooseV = require("../../components/ChooseV2");
@@ -85,7 +86,9 @@ var OUTLINE_TYPE_ICONS = exports.OUTLINE_TYPE_ICONS = {
85
86
  text: _Icons.TextIcon,
86
87
  freehand: _Icons.DrawIcon,
87
88
  link: _Icons.InsertLinkIcon,
88
- file: _Icons.AttachmentIcon
89
+ file: _Icons.AttachmentIcon,
90
+ task: _Icons.TaskIcon,
91
+ project: _Icons.ProjectIcon
89
92
  };
90
93
 
91
94
  /* Fallback label when an element has no name. Deliberately reads as a
@@ -99,7 +102,9 @@ var OUTLINE_TYPE_LABELS = exports.OUTLINE_TYPE_LABELS = {
99
102
  text: "Text",
100
103
  freehand: "Freehand",
101
104
  link: "Link",
102
- file: "File"
105
+ file: "File",
106
+ task: "Task",
107
+ project: "Project"
103
108
  };
104
109
  /* Ids prefixed `shape-` / `sticky` are the elements really on the canvas, so
105
110
  selection syncs both ways for them. The rest stand in for the parts of a
@@ -292,12 +297,50 @@ var StyledOutlineTypeIcon = exports.StyledOutlineTypeIcon = _styledComponents.de
292
297
  var StyledOutlineName = exports.StyledOutlineName = _styledComponents.default.div.withConfig({
293
298
  displayName: "outline__StyledOutlineName",
294
299
  componentId: "sc-173k9fg-10"
295
- })(["display:flex;align-items:center;flex:0 1 auto;min-width:0;> div{max-width:100%;}> .typography{display:block;padding-left:4px;padding-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}&.unnamed .presentation,&.unnamed input{font-style:italic;color:var(--color-theme-500);}"]);
300
+ })(["display:flex;align-items:center;flex:0 1 auto;min-width:0;> div{max-width:100%;}> .typography{display:block;padding-left:4px;padding-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}&.unnamed .presentation,&.unnamed input,&.unnamed > .typography{font-style:italic;color:var(--color-theme-500);}"]);
301
+
302
+ /* A limited row is labelled before its type is consulted, because the type
303
+ label would say "Task" or "Project" — and which KIND of record is hidden is
304
+ itself something the viewer is not entitled to. The card face and the
305
+ Inspector header withhold it too. */
296
306
  var outlineLabel = exports.outlineLabel = function outlineLabel(element) {
297
307
  var _element$name;
308
+ if (element.limited) {
309
+ return _projectElements.LIMITED_ACCESS_LABEL;
310
+ }
298
311
  return (_element$name = element.name) !== null && _element$name !== void 0 ? _element$name : OUTLINE_TYPE_LABELS[element.type];
299
312
  };
300
313
 
314
+ /**
315
+ * Outline rows for the entity cards on the canvas.
316
+ *
317
+ * They are DERIVED on every render rather than seeded into the outline's own
318
+ * state the way the mock elements are. That is the whole trick that keeps this
319
+ * cheap: the canvas already owns these elements, so there is no second copy to
320
+ * reconcile when one is added, resolved or cancelled, and the drag-reorder and
321
+ * grouping state the outline holds for its mock rows is left completely alone.
322
+ *
323
+ * The row id IS the canvas element id, which is what makes selection sync free
324
+ * in both directions — the sidebar and the canvas already share `selectedId`.
325
+ */
326
+ var entityOutlineRows = exports.entityOutlineRows = function entityOutlineRows(elements, locks) {
327
+ return elements.map(function (element) {
328
+ var _locks$element$id;
329
+ return {
330
+ id: element.id,
331
+ /* No name for a limited card — nothing about the entity exists to show. */
332
+ name: element.limited ? null : (0, _projectElements.projectElementTitle)(element),
333
+ type: element.kind,
334
+ renamable: false,
335
+ limited: element.limited === true,
336
+ /* A limited card is locked for this viewer, always. Everything else follows
337
+ the same lock flag the Inspector's checkbox writes. */
338
+ locked: element.limited === true || ((_locks$element$id = locks[element.id]) !== null && _locks$element$id !== void 0 ? _locks$element$id : false),
339
+ groupId: null
340
+ };
341
+ });
342
+ };
343
+
301
344
  /* Both menus follow the shared TaskListOptionsMenu shape: Menu in normal mode
302
345
  (260px bubble), an IconButton + TreeDots trigger whose `.open` class keeps it
303
346
  visible while the menu is up, and a flat List of leading-icon ListItems
@@ -336,7 +379,9 @@ var ARRANGE_ITEMS = exports.ARRANGE_ITEMS = [{
336
379
  }];
337
380
  var OutlineElementOptionsMenu = exports.OutlineElementOptionsMenu = function OutlineElementOptionsMenu(_ref2) {
338
381
  var locked = _ref2.locked,
339
- onToggleLock = _ref2.onToggleLock;
382
+ onToggleLock = _ref2.onToggleLock,
383
+ _ref2$renamable = _ref2.renamable,
384
+ renamable = _ref2$renamable === void 0 ? true : _ref2$renamable;
340
385
  var _useState = (0, _react.useState)(false),
341
386
  _useState2 = _slicedToArray(_useState, 2),
342
387
  open = _useState2[0],
@@ -374,7 +419,7 @@ var OutlineElementOptionsMenu = exports.OutlineElementOptionsMenu = function Out
374
419
  var indexView = /*#__PURE__*/_react.default.createElement(StyledOutlineElementMenu, null, /*#__PURE__*/_react.default.createElement(_List.List, {
375
420
  style: OUTLINE_MENU_LIST_STYLE,
376
421
  tabIndex: -1
377
- }, /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.EditIcon, null), "Rename"), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.DuplicateIcon, null), "Duplicate"), /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.FolderMoveIcon, null), "Move to Group"), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
422
+ }, renamable ? /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.EditIcon, null), "Rename") : null, /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.DuplicateIcon, null), "Duplicate"), /*#__PURE__*/_react.default.createElement(_List.ListSeparator, null), /*#__PURE__*/_react.default.createElement(_List.ListItem, null, /*#__PURE__*/_react.default.createElement(_Icons.FolderMoveIcon, null), "Move to Group"), /*#__PURE__*/_react.default.createElement(_List.ListItem, {
378
423
  className: "drill-item",
379
424
  onClick: goToArrange
380
425
  }, /*#__PURE__*/_react.default.createElement("span", {
@@ -576,7 +621,10 @@ var LeftSidebar = exports.LeftSidebar = function LeftSidebar(_ref8) {
576
621
  sidebarOpen = _ref8.sidebarOpen,
577
622
  onToggleSidebar = _ref8.onToggleSidebar,
578
623
  boardName = _ref8.boardName,
579
- onRenameBoard = _ref8.onRenameBoard;
624
+ onRenameBoard = _ref8.onRenameBoard,
625
+ projectElements = _ref8.projectElements,
626
+ locks = _ref8.locks,
627
+ onToggleElementLock = _ref8.onToggleElementLock;
580
628
  var _useState1 = (0, _react.useState)(OUTLINE_WIDTH),
581
629
  _useState10 = _slicedToArray(_useState1, 2),
582
630
  width = _useState10[0],
@@ -615,6 +663,13 @@ var LeftSidebar = exports.LeftSidebar = function LeftSidebar(_ref8) {
615
663
  return element.groupId === groupId;
616
664
  });
617
665
  }, [elements]);
666
+
667
+ /* Derived, never stored. Entity rows join the Ungrouped bucket — the section
668
+ the outline itself describes as "where everything starts out and where new
669
+ work lands" — and they join it at the END, after the mock rows, so the
670
+ hand-ordered list a designer is looking at does not shuffle when a card is
671
+ added to the board. */
672
+ var entityRows = entityOutlineRows(projectElements, locks);
618
673
  var toggleCollapsed = (0, _react.useCallback)(function (id) {
619
674
  setCollapsed(function (current) {
620
675
  return current.includes(id) ? current.filter(function (entry) {
@@ -813,21 +868,30 @@ var LeftSidebar = exports.LeftSidebar = function LeftSidebar(_ref8) {
813
868
  return "drop-".concat(dropSpot.kind);
814
869
  }, [dragId, dropSpot]);
815
870
  var renderElementRow = function renderElementRow(element) {
816
- var TypeIcon = OUTLINE_TYPE_ICONS[element.type];
871
+ /* A limited row takes the neutral lock glyph, not its type glyph: the type
872
+ glyph would say whether a task or a project is hidden. */
873
+ var TypeIcon = element.limited ? _Icons.LockIcon : OUTLINE_TYPE_ICONS[element.type];
817
874
  var selected = element.id === selectedId;
875
+ var renamable = element.renamable !== false;
876
+ /* Muted + italic covers both "never named" and "not yours to see". */
877
+ var muted = element.limited === true || !element.name;
818
878
  return /*#__PURE__*/_react.default.createElement(StyledOutlineChildRow, _extends({
819
879
  key: element.id,
820
880
  className: "".concat(selected ? "selected" : "", " ").concat(dropClass(element.id)),
821
881
  onClick: function onClick() {
822
882
  return onSelect(element.id);
823
883
  }
824
- }, rowDragProps(element.id)), /*#__PURE__*/_react.default.createElement(StyledOutlineTypeIcon, null, /*#__PURE__*/_react.default.createElement(TypeIcon, {
884
+ /* Entity rows are derived, so they are deliberately NOT draggable: they
885
+ have no place in the mock's ordered model, and dropping one into a
886
+ group would be an edit with nowhere to land. Grouping and reorder for
887
+ every other row are unchanged. */
888
+ }, renamable ? rowDragProps(element.id) : {}), /*#__PURE__*/_react.default.createElement(StyledOutlineTypeIcon, null, /*#__PURE__*/_react.default.createElement(TypeIcon, {
825
889
  width: 16,
826
890
  height: 16,
827
- fill: element.name ? "var(--color-theme-700)" : "var(--color-theme-500)"
891
+ fill: muted ? "var(--color-theme-500)" : "var(--color-theme-700)"
828
892
  })), /*#__PURE__*/_react.default.createElement(StyledOutlineName, {
829
- className: element.name ? "" : "unnamed"
830
- }, /*#__PURE__*/_react.default.createElement(_EditableText.EditableText, {
893
+ className: muted ? "unnamed" : ""
894
+ }, renamable ? /*#__PURE__*/_react.default.createElement(_EditableText.EditableText, {
831
895
  value: outlineLabel(element),
832
896
  variant: "Body 2",
833
897
  weight: "medium",
@@ -838,7 +902,13 @@ var LeftSidebar = exports.LeftSidebar = function LeftSidebar(_ref8) {
838
902
  inputProps: {
839
903
  maxLength: 150
840
904
  }
841
- })), element.locked || element.connections ? /*#__PURE__*/_react.default.createElement(StyledOutlineSignifiers, {
905
+ }) :
906
+ /*#__PURE__*/
907
+ /* Plain Typography, so there is no input to click into at all —
908
+ the name belongs to the linked entity. */
909
+ _react.default.createElement(_Typography.Body2, {
910
+ weight: "medium"
911
+ }, outlineLabel(element))), element.locked || element.connections ? /*#__PURE__*/_react.default.createElement(StyledOutlineSignifiers, {
842
912
  className: "outline-trailing"
843
913
  }, element.connections ? /*#__PURE__*/_react.default.createElement(_Signifier.Signifier, {
844
914
  type: _Icons.DependencySmallIcon,
@@ -847,12 +917,15 @@ var LeftSidebar = exports.LeftSidebar = function LeftSidebar(_ref8) {
847
917
  }) : null, element.locked ? /*#__PURE__*/_react.default.createElement(_Signifier.Signifier, {
848
918
  type: _Icons.LockSmallIcon,
849
919
  tooltipText: "Locked"
850
- }) : null) : null, /*#__PURE__*/_react.default.createElement("span", {
920
+ }) : null) : null, element.limited ? null : /*#__PURE__*/_react.default.createElement("span", {
851
921
  className: "outline-options outline-hover"
852
922
  }, /*#__PURE__*/_react.default.createElement(OutlineElementOptionsMenu, {
853
- locked: Boolean(element.locked),
923
+ renamable: renamable,
924
+ locked: Boolean(element.locked)
925
+ /* Mock rows keep their own flag; an entity row's lock is the
926
+ board's, so it goes to the shared map the Inspector uses. */,
854
927
  onToggleLock: function onToggleLock() {
855
- return toggleLock(element.id);
928
+ return renamable ? toggleLock(element.id) : onToggleElementLock(element.id);
856
929
  }
857
930
  })));
858
931
  };
@@ -918,8 +991,8 @@ var LeftSidebar = exports.LeftSidebar = function LeftSidebar(_ref8) {
918
991
  })), /*#__PURE__*/_react.default.createElement(StyledOutlineName, null, /*#__PURE__*/_react.default.createElement(_Typography.Header3, {
919
992
  color: "primary"
920
993
  }, "Ungrouped")), /*#__PURE__*/_react.default.createElement(OutlineCounter, {
921
- count: membersOf(null).length
922
- })), collapsed.includes(UNGROUPED) ? null : membersOf(null).map(renderElementRow), groups.map(function (group) {
994
+ count: membersOf(null).length + entityRows.length
995
+ })), collapsed.includes(UNGROUPED) ? null : [...membersOf(null), ...entityRows].map(renderElementRow), groups.map(function (group) {
923
996
  var members = membersOf(group.id);
924
997
  var isOpen = !collapsed.includes(group.id);
925
998
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {