@activecollab/components 2.0.398 → 2.0.400

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,194 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.verticalDivider = exports.isShapeTool = exports.ToolSurface = exports.ToolButton = exports.TOOL_HINTS = exports.StyledShapePicker = exports.StyledHint = exports.StyledBottomDock = exports.SHAPE_TOOLS = exports.SHAPE_DEFAULT_SIZES = exports.CARD_PREVIEW_HEIGHT = exports.BottomDock = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
9
+ var _IconButton = require("../../components/IconButton");
10
+ var _Icons = require("../../components/Icons");
11
+ var _Tooltip = require("../../components/Tooltip");
12
+ var _Typography = require("../../components/Typography");
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ 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); }
15
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
16
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
17
+ 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."); }
18
+ 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; } }
19
+ 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; }
20
+ 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; } }
21
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
22
+ /* ------------------------------------------------------------------ */
23
+ /* Floating toolbar surfaces */
24
+ /* ------------------------------------------------------------------ */
25
+
26
+ /* A floating, rounded toolbar surface (paper + shadow). */
27
+ var ToolSurface = exports.ToolSurface = _styledComponents.default.div.withConfig({
28
+ displayName: "bottomDock__ToolSurface",
29
+ componentId: "sc-1xsxwg0-0"
30
+ })(["display:flex;align-items:center;gap:2px;padding:6px;border-radius:14px;background-color:var(--page-paper-main);box-shadow:0 6px 24px rgba(0,0,0,0.16);border:1px solid var(--border-primary);"]);
31
+
32
+ /* vertical separator used inside the toolbars */
33
+ var verticalDivider = exports.verticalDivider = "\n .divider {\n width: 1px;\n height: 24px;\n background-color: var(--color-theme-400);\n margin: 0 6px;\n flex-shrink: 0;\n }\n";
34
+ var StyledBottomDock = exports.StyledBottomDock = _styledComponents.default.div.withConfig({
35
+ displayName: "bottomDock__StyledBottomDock",
36
+ componentId: "sc-1xsxwg0-1"
37
+ })(["position:absolute;left:50%;bottom:18px;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:10px;max-width:calc(100% - 32px);"]);
38
+
39
+ /* shape sub-toolbar: Circle / Rectangle / Triangle */
40
+ var StyledShapePicker = exports.StyledShapePicker = (0, _styledComponents.default)(ToolSurface).withConfig({
41
+ displayName: "bottomDock__StyledShapePicker",
42
+ componentId: "sc-1xsxwg0-2"
43
+ })([""]);
44
+
45
+ /* Reserve two Caption1 lines (2 × 16px) so showing/hiding the hint never
46
+ shifts the dock; visibility keeps the reserved space when hidden. */
47
+ var StyledHint = exports.StyledHint = (0, _styledComponents.default)(_Typography.Caption1).withConfig({
48
+ displayName: "bottomDock__StyledHint",
49
+ componentId: "sc-1xsxwg0-3"
50
+ })(["text-align:center;padding:0 16px;min-height:32px;&.hint-hidden{visibility:hidden;}"]);
51
+
52
+ /* Per-tool hint shown under the dock only while that tool is hovered. */
53
+ var TOOL_HINTS = exports.TOOL_HINTS = {
54
+ circle: "Click to drop a default circle, or draw one to size. Press O for a circle.",
55
+ roundedRectangle: "Click to drop a default rectangle, or draw one to size. Press R for a rectangle.",
56
+ triangle: "Click to drop a default triangle, or draw one to size. Press Y for a triangle.",
57
+ connector: "Drag from one element to another to connect them. Press C to connect.",
58
+ link: "Draw a box to place a link, or paste a URL anywhere. Press L for link.",
59
+ file: "Draw a box to place a file, or drop one on the board. Press F for file.",
60
+ sticky: "Click anywhere on the canvas to drop a sticky note. Press S for a sticky note.",
61
+ text: "Click anywhere on the canvas to start typing. Press T for text.",
62
+ draw: "Click and drag to draw freehand. Press D for the pen.",
63
+ shapes: "Start drawing the shape on canvas to see the result. Press R to draw a rectangle."
64
+ };
65
+
66
+ /**
67
+ * The armed board tool. Link, File and the three shapes are wired — arming one
68
+ * turns the next canvas click into "drop the default-size element here" and a
69
+ * drag into "draw one this big"; everything else stays a mock, so the board is
70
+ * otherwise always in select mode.
71
+ */
72
+
73
+ var SHAPE_TOOLS = exports.SHAPE_TOOLS = ["circle", "roundedRectangle", "triangle"];
74
+ var isShapeTool = exports.isShapeTool = function isShapeTool(tool) {
75
+ return SHAPE_TOOLS.includes(tool);
76
+ };
77
+
78
+ /* What a plain click drops — mirrors DEFAULT_SHAPE_SIZES in
79
+ new-activecollab-front, and is exactly what the hover preview promises. */
80
+ var SHAPE_DEFAULT_SIZES = exports.SHAPE_DEFAULT_SIZES = {
81
+ roundedRectangle: {
82
+ width: 100,
83
+ height: 60
84
+ },
85
+ circle: {
86
+ width: 80,
87
+ height: 80
88
+ },
89
+ triangle: {
90
+ width: 80,
91
+ height: 80
92
+ }
93
+ };
94
+
95
+ /* Cards are auto-height, so their hover preview uses the app's nominal wire
96
+ height (DEFAULT_LINK_CARD_SIZE / DEFAULT_FILE_CARD_SIZE). */
97
+ var CARD_PREVIEW_HEIGHT = exports.CARD_PREVIEW_HEIGHT = 240;
98
+
99
+ /** The kinds of card the draw gesture can place. */
100
+
101
+ var ToolButton = exports.ToolButton = function ToolButton(_ref) {
102
+ var tip = _ref.tip,
103
+ active = _ref.active,
104
+ children = _ref.children,
105
+ onClick = _ref.onClick,
106
+ onMouseEnter = _ref.onMouseEnter,
107
+ onMouseLeave = _ref.onMouseLeave;
108
+ return /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
109
+ title: tip
110
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, {
111
+ variant: "text gray",
112
+ active: active,
113
+ onClick: onClick,
114
+ onMouseEnter: onMouseEnter,
115
+ onMouseLeave: onMouseLeave
116
+ }, children));
117
+ };
118
+ /* Bottom-centre tool dock (shape picker + main toolbar + hint). */
119
+ var BottomDock = exports.BottomDock = function BottomDock(_ref2) {
120
+ var activeTool = _ref2.activeTool,
121
+ onToolChange = _ref2.onToolChange;
122
+ var _useState = (0, _react.useState)(null),
123
+ _useState2 = _slicedToArray(_useState, 2),
124
+ hoverHint = _useState2[0],
125
+ setHoverHint = _useState2[1];
126
+ var hoverProps = function hoverProps(tool) {
127
+ return {
128
+ onMouseEnter: function onMouseEnter() {
129
+ return setHoverHint(TOOL_HINTS[tool]);
130
+ },
131
+ onMouseLeave: function onMouseLeave() {
132
+ return setHoverHint(null);
133
+ }
134
+ };
135
+ };
136
+
137
+ /* An armed tool keeps its hint up after the pointer leaves the dock — the
138
+ gesture happens on the canvas, so that is exactly when the instruction is
139
+ needed. */
140
+ var hint = hoverHint !== null && hoverHint !== void 0 ? hoverHint : activeTool === "select" ? null : TOOL_HINTS[activeTool];
141
+ return /*#__PURE__*/_react.default.createElement(StyledBottomDock, null, /*#__PURE__*/_react.default.createElement(StyledShapePicker, null, /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
142
+ title: "Circle"
143
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, _extends({
144
+ variant: "text gray",
145
+ active: activeTool === "circle",
146
+ onClick: function onClick() {
147
+ return onToolChange(activeTool === "circle" ? "select" : "circle");
148
+ }
149
+ }, hoverProps("circle")), /*#__PURE__*/_react.default.createElement(_Icons.CircleIcon, null))), /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
150
+ title: "Rectangle"
151
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, _extends({
152
+ variant: "text gray",
153
+ active: activeTool === "roundedRectangle",
154
+ onClick: function onClick() {
155
+ return onToolChange(activeTool === "roundedRectangle" ? "select" : "roundedRectangle");
156
+ }
157
+ }, hoverProps("roundedRectangle")), /*#__PURE__*/_react.default.createElement(_Icons.RoundedRectangleIcon, null))), /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
158
+ title: "Triangle"
159
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, _extends({
160
+ variant: "text gray",
161
+ active: activeTool === "triangle",
162
+ onClick: function onClick() {
163
+ return onToolChange(activeTool === "triangle" ? "select" : "triangle");
164
+ }
165
+ }, hoverProps("triangle")), /*#__PURE__*/_react.default.createElement(_Icons.TriangleIcon, null)))), /*#__PURE__*/_react.default.createElement(ToolSurface, null, /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
166
+ title: "Sticky Note"
167
+ }, /*#__PURE__*/_react.default.createElement(_IconButton.IconButton, _extends({
168
+ variant: "text gray"
169
+ }, hoverProps("sticky")), /*#__PURE__*/_react.default.createElement(_Icons.NoteIcon, null))), /*#__PURE__*/_react.default.createElement(ToolButton, _extends({
170
+ tip: "Text"
171
+ }, hoverProps("text")), /*#__PURE__*/_react.default.createElement(_Icons.TextIcon, null)), /*#__PURE__*/_react.default.createElement(ToolButton, _extends({
172
+ tip: "Draw"
173
+ }, hoverProps("draw")), /*#__PURE__*/_react.default.createElement(_Icons.DrawIcon, null)), /*#__PURE__*/_react.default.createElement(ToolButton, _extends({
174
+ tip: "Shape"
175
+ }, hoverProps("shapes")), /*#__PURE__*/_react.default.createElement(_Icons.ShapesIcon, null)), /*#__PURE__*/_react.default.createElement(ToolButton, _extends({
176
+ tip: "Connect"
177
+ }, hoverProps("connector")), /*#__PURE__*/_react.default.createElement(_Icons.ConnectionIcon, null)), /*#__PURE__*/_react.default.createElement(ToolButton, _extends({
178
+ tip: "Link",
179
+ active: activeTool === "link",
180
+ onClick: function onClick() {
181
+ return onToolChange(activeTool === "link" ? "select" : "link");
182
+ }
183
+ }, hoverProps("link")), /*#__PURE__*/_react.default.createElement(_Icons.InsertLinkIcon, null)), /*#__PURE__*/_react.default.createElement(ToolButton, _extends({
184
+ tip: "File",
185
+ active: activeTool === "file",
186
+ onClick: function onClick() {
187
+ return onToolChange(activeTool === "file" ? "select" : "file");
188
+ }
189
+ }, hoverProps("file")), /*#__PURE__*/_react.default.createElement(_Icons.AttachmentIcon, null))), /*#__PURE__*/_react.default.createElement(StyledHint, {
190
+ color: "tertiary",
191
+ className: hint ? undefined : "hint-hidden"
192
+ }, hint !== null && hint !== void 0 ? hint : " "));
193
+ };
194
+ //# sourceMappingURL=bottomDock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottomDock.js","names":["_react","_interopRequireWildcard","require","_styledComponents","_interopRequireDefault","_IconButton","_Icons","_Tooltip","_Typography","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","l","Symbol","iterator","u","next","done","push","value","return","isArray","ToolSurface","exports","styled","div","withConfig","displayName","componentId","verticalDivider","StyledBottomDock","StyledShapePicker","StyledHint","Caption1","TOOL_HINTS","circle","roundedRectangle","triangle","connector","link","file","sticky","text","draw","shapes","SHAPE_TOOLS","isShapeTool","tool","includes","SHAPE_DEFAULT_SIZES","width","height","CARD_PREVIEW_HEIGHT","ToolButton","_ref","tip","active","children","onClick","onMouseEnter","onMouseLeave","createElement","Tooltip","title","IconButton","variant","BottomDock","_ref2","activeTool","onToolChange","_useState","useState","_useState2","hoverHint","setHoverHint","hoverProps","hint","CircleIcon","RoundedRectangleIcon","TriangleIcon","NoteIcon","TextIcon","DrawIcon","ShapesIcon","ConnectionIcon","InsertLinkIcon","AttachmentIcon","color","className","undefined"],"sources":["../../../../src/presentation/whiteboard/bottomDock.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n AttachmentIcon,\n CircleIcon,\n ConnectionIcon,\n DrawIcon,\n InsertLinkIcon,\n RoundedRectangleIcon,\n ShapesIcon,\n NoteIcon,\n TextIcon,\n TriangleIcon,\n} from \"../../components/Icons\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Caption1 } from \"../../components/Typography\";\n\n/* ------------------------------------------------------------------ */\n/* Floating toolbar surfaces */\n/* ------------------------------------------------------------------ */\n\n/* A floating, rounded toolbar surface (paper + shadow). */\nexport const ToolSurface = styled.div`\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 6px;\n border-radius: 14px;\n background-color: var(--page-paper-main);\n box-shadow: 0 6px 24px rgba(0, 0, 0, 0.16);\n border: 1px solid var(--border-primary);\n`;\n\n/* vertical separator used inside the toolbars */\nexport const verticalDivider = `\n .divider {\n width: 1px;\n height: 24px;\n background-color: var(--color-theme-400);\n margin: 0 6px;\n flex-shrink: 0;\n }\n`;\n\nexport const StyledBottomDock = styled.div`\n position: absolute;\n left: 50%;\n bottom: 18px;\n transform: translateX(-50%);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n max-width: calc(100% - 32px);\n`;\n\n/* shape sub-toolbar: Circle / Rectangle / Triangle */\nexport const StyledShapePicker = styled(ToolSurface)``;\n\n/* Reserve two Caption1 lines (2 × 16px) so showing/hiding the hint never\n shifts the dock; visibility keeps the reserved space when hidden. */\nexport const StyledHint = styled(Caption1)`\n text-align: center;\n padding: 0 16px;\n min-height: 32px;\n\n &.hint-hidden {\n visibility: hidden;\n }\n`;\n\n/* Per-tool hint shown under the dock only while that tool is hovered. */\nexport const TOOL_HINTS = {\n circle:\n \"Click to drop a default circle, or draw one to size. Press O for a circle.\",\n roundedRectangle:\n \"Click to drop a default rectangle, or draw one to size. Press R for a rectangle.\",\n triangle:\n \"Click to drop a default triangle, or draw one to size. Press Y for a triangle.\",\n connector:\n \"Drag from one element to another to connect them. Press C to connect.\",\n link: \"Draw a box to place a link, or paste a URL anywhere. Press L for link.\",\n file: \"Draw a box to place a file, or drop one on the board. Press F for file.\",\n sticky:\n \"Click anywhere on the canvas to drop a sticky note. Press S for a sticky note.\",\n text: \"Click anywhere on the canvas to start typing. Press T for text.\",\n draw: \"Click and drag to draw freehand. Press D for the pen.\",\n shapes:\n \"Start drawing the shape on canvas to see the result. Press R to draw a rectangle.\",\n} as const;\n\nexport type ToolHintKey = keyof typeof TOOL_HINTS;\n\nexport type ShapeTool = \"circle\" | \"roundedRectangle\" | \"triangle\";\n\n/**\n * The armed board tool. Link, File and the three shapes are wired — arming one\n * turns the next canvas click into \"drop the default-size element here\" and a\n * drag into \"draw one this big\"; everything else stays a mock, so the board is\n * otherwise always in select mode.\n */\nexport type BoardTool = \"select\" | \"link\" | \"file\" | ShapeTool;\n\nexport const SHAPE_TOOLS: readonly ShapeTool[] = [\n \"circle\",\n \"roundedRectangle\",\n \"triangle\",\n];\n\nexport const isShapeTool = (tool: BoardTool): tool is ShapeTool =>\n (SHAPE_TOOLS as readonly string[]).includes(tool);\n\n/* What a plain click drops — mirrors DEFAULT_SHAPE_SIZES in\n new-activecollab-front, and is exactly what the hover preview promises. */\nexport const SHAPE_DEFAULT_SIZES: Record<\n ShapeTool,\n { width: number; height: number }\n> = {\n roundedRectangle: { width: 100, height: 60 },\n circle: { width: 80, height: 80 },\n triangle: { width: 80, height: 80 },\n};\n\n/* Cards are auto-height, so their hover preview uses the app's nominal wire\n height (DEFAULT_LINK_CARD_SIZE / DEFAULT_FILE_CARD_SIZE). */\nexport const CARD_PREVIEW_HEIGHT = 240;\n\n/** The kinds of card the draw gesture can place. */\nexport type DrawableTool = Exclude<BoardTool, \"select\">;\n\nexport interface ToolButtonProps {\n tip: string;\n active?: boolean;\n children: ReactNode;\n onClick?: () => void;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n}\n\nexport const ToolButton = ({\n tip,\n active,\n children,\n onClick,\n onMouseEnter,\n onMouseLeave,\n}: ToolButtonProps): ReactElement => (\n <Tooltip title={tip}>\n <IconButton\n variant=\"text gray\"\n active={active}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {children}\n </IconButton>\n </Tooltip>\n);\n\nexport interface BottomDockProps {\n activeTool: BoardTool;\n onToolChange: (tool: BoardTool) => void;\n}\n\n/* Bottom-centre tool dock (shape picker + main toolbar + hint). */\nexport const BottomDock = ({\n activeTool,\n onToolChange,\n}: BottomDockProps): ReactElement => {\n const [hoverHint, setHoverHint] = useState<string | null>(null);\n\n const hoverProps = (tool: ToolHintKey): Record<string, () => void> => ({\n onMouseEnter: () => setHoverHint(TOOL_HINTS[tool]),\n onMouseLeave: () => setHoverHint(null),\n });\n\n /* An armed tool keeps its hint up after the pointer leaves the dock — the\n gesture happens on the canvas, so that is exactly when the instruction is\n needed. */\n const hint =\n hoverHint ?? (activeTool === \"select\" ? null : TOOL_HINTS[activeTool]);\n\n return (\n <StyledBottomDock>\n <StyledShapePicker>\n <Tooltip title=\"Circle\">\n <IconButton\n variant=\"text gray\"\n active={activeTool === \"circle\"}\n onClick={() =>\n onToolChange(activeTool === \"circle\" ? \"select\" : \"circle\")\n }\n {...hoverProps(\"circle\")}\n >\n <CircleIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Rectangle\">\n <IconButton\n variant=\"text gray\"\n active={activeTool === \"roundedRectangle\"}\n onClick={() =>\n onToolChange(\n activeTool === \"roundedRectangle\"\n ? \"select\"\n : \"roundedRectangle\"\n )\n }\n {...hoverProps(\"roundedRectangle\")}\n >\n <RoundedRectangleIcon />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Triangle\">\n <IconButton\n variant=\"text gray\"\n active={activeTool === \"triangle\"}\n onClick={() =>\n onToolChange(activeTool === \"triangle\" ? \"select\" : \"triangle\")\n }\n {...hoverProps(\"triangle\")}\n >\n <TriangleIcon />\n </IconButton>\n </Tooltip>\n </StyledShapePicker>\n\n <ToolSurface>\n <Tooltip title=\"Sticky Note\">\n <IconButton variant=\"text gray\" {...hoverProps(\"sticky\")}>\n <NoteIcon />\n </IconButton>\n </Tooltip>\n <ToolButton tip=\"Text\" {...hoverProps(\"text\")}>\n <TextIcon />\n </ToolButton>\n <ToolButton tip=\"Draw\" {...hoverProps(\"draw\")}>\n <DrawIcon />\n </ToolButton>\n <ToolButton tip=\"Shape\" {...hoverProps(\"shapes\")}>\n <ShapesIcon />\n </ToolButton>\n <ToolButton tip=\"Connect\" {...hoverProps(\"connector\")}>\n <ConnectionIcon />\n </ToolButton>\n <ToolButton\n tip=\"Link\"\n active={activeTool === \"link\"}\n onClick={() =>\n onToolChange(activeTool === \"link\" ? \"select\" : \"link\")\n }\n {...hoverProps(\"link\")}\n >\n <InsertLinkIcon />\n </ToolButton>\n <ToolButton\n tip=\"File\"\n active={activeTool === \"file\"}\n onClick={() =>\n onToolChange(activeTool === \"file\" ? \"select\" : \"file\")\n }\n {...hoverProps(\"file\")}\n >\n <AttachmentIcon />\n </ToolButton>\n </ToolSurface>\n\n <StyledHint color=\"tertiary\" className={hint ? undefined : \"hint-hidden\"}>\n {hint ?? \" \"}\n </StyledHint>\n </StyledBottomDock>\n );\n};\n"],"mappings":"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","ignoreList":[]}