@bigbluebutton/tldraw 2.0.0-alpha.24 → 2.0.0-alpha.26

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 (90) hide show
  1. package/dist-cjs/index.d.ts +9 -1
  2. package/dist-cjs/lib/defaultShapeUtils.js +3 -1
  3. package/dist-cjs/lib/defaultShapeUtils.js.map +2 -2
  4. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  5. package/dist-cjs/lib/shapes/poll/PollShapeTool.js +30 -0
  6. package/dist-cjs/lib/shapes/poll/PollShapeTool.js.map +7 -0
  7. package/dist-cjs/lib/shapes/poll/PollShapeUtil.js +121 -0
  8. package/dist-cjs/lib/shapes/poll/PollShapeUtil.js.map +7 -0
  9. package/dist-cjs/lib/shapes/poll/components/poll-content.js +101 -0
  10. package/dist-cjs/lib/shapes/poll/components/poll-content.js.map +7 -0
  11. package/dist-cjs/lib/shapes/poll/components/styles.js +53 -0
  12. package/dist-cjs/lib/shapes/poll/components/styles.js.map +7 -0
  13. package/dist-cjs/lib/shapes/poll/poll-shape-migrations.js +45 -0
  14. package/dist-cjs/lib/shapes/poll/poll-shape-migrations.js.map +7 -0
  15. package/dist-cjs/lib/shapes/poll/poll-shape-props.js +39 -0
  16. package/dist-cjs/lib/shapes/poll/poll-shape-props.js.map +7 -0
  17. package/dist-cjs/lib/shapes/poll/poll-shape-types.js +17 -0
  18. package/dist-cjs/lib/shapes/poll/poll-shape-types.js.map +7 -0
  19. package/dist-cjs/lib/tools/HandTool/HandTool.js +3 -3
  20. package/dist-cjs/lib/tools/HandTool/HandTool.js.map +2 -2
  21. package/dist-cjs/lib/ui/components/ContextMenu.js +0 -1
  22. package/dist-cjs/lib/ui/components/ContextMenu.js.map +2 -2
  23. package/dist-cjs/lib/ui/components/MenuZone.js +1 -23
  24. package/dist-cjs/lib/ui/components/MenuZone.js.map +2 -2
  25. package/dist-cjs/lib/ui/components/Toolbar/Toolbar.js +3 -15
  26. package/dist-cjs/lib/ui/components/Toolbar/Toolbar.js.map +2 -2
  27. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  28. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +6 -1
  29. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  30. package/dist-esm/index.d.mts +9 -1
  31. package/dist-esm/lib/defaultShapeUtils.mjs +3 -1
  32. package/dist-esm/lib/defaultShapeUtils.mjs.map +2 -2
  33. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  34. package/dist-esm/lib/shapes/poll/PollShapeTool.mjs +10 -0
  35. package/dist-esm/lib/shapes/poll/PollShapeTool.mjs.map +7 -0
  36. package/dist-esm/lib/shapes/poll/PollShapeUtil.mjs +97 -0
  37. package/dist-esm/lib/shapes/poll/PollShapeUtil.mjs.map +7 -0
  38. package/dist-esm/lib/shapes/poll/components/poll-content.mjs +71 -0
  39. package/dist-esm/lib/shapes/poll/components/poll-content.mjs.map +7 -0
  40. package/dist-esm/lib/shapes/poll/components/styles.mjs +23 -0
  41. package/dist-esm/lib/shapes/poll/components/styles.mjs.map +7 -0
  42. package/dist-esm/lib/shapes/poll/poll-shape-migrations.mjs +25 -0
  43. package/dist-esm/lib/shapes/poll/poll-shape-migrations.mjs.map +7 -0
  44. package/dist-esm/lib/shapes/poll/poll-shape-props.mjs +19 -0
  45. package/dist-esm/lib/shapes/poll/poll-shape-props.mjs.map +7 -0
  46. package/dist-esm/lib/shapes/poll/poll-shape-types.mjs +1 -0
  47. package/dist-esm/lib/shapes/poll/poll-shape-types.mjs.map +7 -0
  48. package/dist-esm/lib/tools/HandTool/HandTool.mjs +3 -3
  49. package/dist-esm/lib/tools/HandTool/HandTool.mjs.map +2 -2
  50. package/dist-esm/lib/ui/components/ContextMenu.mjs +0 -1
  51. package/dist-esm/lib/ui/components/ContextMenu.mjs.map +2 -2
  52. package/dist-esm/lib/ui/components/MenuZone.mjs +3 -25
  53. package/dist-esm/lib/ui/components/MenuZone.mjs.map +2 -2
  54. package/dist-esm/lib/ui/components/Toolbar/Toolbar.mjs +3 -15
  55. package/dist-esm/lib/ui/components/Toolbar/Toolbar.mjs.map +2 -2
  56. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +6 -1
  57. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  58. package/package.json +4 -3
  59. package/src/lib/Tldraw.test.tsx +9 -13
  60. package/src/lib/defaultShapeUtils.ts +2 -0
  61. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +1 -1
  62. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.ts.snap +6 -6
  63. package/src/lib/shapes/poll/PollShapeTool.tsx +7 -0
  64. package/src/lib/shapes/poll/PollShapeUtil.tsx +108 -0
  65. package/src/lib/shapes/poll/components/poll-content.tsx +100 -0
  66. package/src/lib/shapes/poll/components/styles.ts +21 -0
  67. package/src/lib/shapes/poll/poll-shape-migrations.ts +23 -0
  68. package/src/lib/shapes/poll/poll-shape-props.ts +17 -0
  69. package/src/lib/shapes/poll/poll-shape-types.ts +21 -0
  70. package/src/lib/tools/HandTool/HandTool.ts +4 -5
  71. package/src/lib/ui/components/ContextMenu.tsx +1 -1
  72. package/src/lib/ui/components/MenuZone.tsx +8 -15
  73. package/src/lib/ui/components/Toolbar/Toolbar.tsx +3 -6
  74. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +5 -0
  75. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +5 -0
  76. package/src/test/Editor.test.tsx +2 -2
  77. package/src/test/HandTool.test.ts +55 -56
  78. package/src/test/TLSessionStateSnapshot.test.ts +5 -5
  79. package/src/test/TestEditor.ts +4 -1
  80. package/src/test/TldrawEditor.test.tsx +28 -30
  81. package/src/test/__snapshots__/resizing.test.ts.snap +8 -8
  82. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +20 -20
  83. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  84. package/src/test/commands/createShapes.test.ts +1 -1
  85. package/src/test/commands/putContent.test.ts +4 -4
  86. package/src/test/commands/updateShapes.test.ts +1 -1
  87. package/src/test/resizing.test.ts +203 -203
  88. package/src/test/selection-omnibus.test.ts +41 -41
  89. package/src/test/test-jsx.tsx +7 -3
  90. package/src/test/translating.test.ts +42 -42
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var poll_content_exports = {};
30
+ __export(poll_content_exports, {
31
+ default: () => poll_content_default
32
+ });
33
+ module.exports = __toCommonJS(poll_content_exports);
34
+ var import_jsx_runtime = require("react/jsx-runtime");
35
+ var import_recharts = require("recharts");
36
+ var import_styles = __toESM(require("./styles"));
37
+ const caseInsensitiveReducer = (acc, item) => {
38
+ const index = acc.findIndex((ans) => ans.key.toLowerCase() === item.key.toLowerCase());
39
+ if (index !== -1) {
40
+ if (acc[index].numVotes >= item.numVotes)
41
+ acc[index].numVotes += item.numVotes;
42
+ else {
43
+ const tempVotes = acc[index].numVotes;
44
+ acc[index] = item;
45
+ acc[index].numVotes += tempVotes;
46
+ }
47
+ } else {
48
+ acc.push(item);
49
+ }
50
+ return acc;
51
+ };
52
+ function assertAsMetadata(metadata) {
53
+ if (typeof metadata !== "object" || metadata === null) {
54
+ throw new Error("metadata is not an object");
55
+ }
56
+ if (typeof metadata.id !== "string") {
57
+ throw new Error("metadata.id is not a string");
58
+ }
59
+ if (typeof metadata.numRespondents !== "number") {
60
+ throw new Error("metadata.numRespondents is not a number");
61
+ }
62
+ if (typeof metadata.numResponders !== "number") {
63
+ throw new Error("metadata.numResponders is not a number");
64
+ }
65
+ if (typeof metadata.questionText !== "string") {
66
+ throw new Error("metadata.questionText is not a string");
67
+ }
68
+ if (typeof metadata.questionType !== "string") {
69
+ throw new Error("metadata.questionType is not a string");
70
+ }
71
+ if (!Array.isArray(metadata.answers)) {
72
+ throw new Error("metadata.answers is not an array");
73
+ }
74
+ }
75
+ const ChatPollContent = ({
76
+ metadata: string,
77
+ height = void 0
78
+ }) => {
79
+ const pollData = JSON.parse(string);
80
+ assertAsMetadata(pollData);
81
+ const answers = pollData.answers.reduce(caseInsensitiveReducer, []);
82
+ const translatedAnswers = answers.map((answer) => {
83
+ const translationKey = answer.key;
84
+ const pollAnswer = translationKey ? translationKey : answer.key;
85
+ return {
86
+ ...answer,
87
+ pollAnswer
88
+ };
89
+ });
90
+ const useHeight = height || translatedAnswers.length * 50;
91
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_styles.default.PollWrapper, { "data-test": "chatPollMessageText", children: [
92
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.default.PollText, { children: pollData.questionText }),
93
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_recharts.ResponsiveContainer, { width: "90%", height: useHeight, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_recharts.BarChart, { data: translatedAnswers, layout: "vertical", children: [
94
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_recharts.XAxis, { type: "number", allowDecimals: false }),
95
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_recharts.YAxis, { width: 80, type: "category", dataKey: "pollAnswer" }),
96
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_recharts.Bar, { dataKey: "numVotes", fill: "#0C57A7" })
97
+ ] }) })
98
+ ] });
99
+ };
100
+ var poll_content_default = ChatPollContent;
101
+ //# sourceMappingURL=poll-content.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/lib/shapes/poll/components/poll-content.tsx"],
4
+ "sourcesContent": ["/* eslint-disable import/no-extraneous-dependencies */\nimport React from 'react'\nimport { Bar, BarChart, ResponsiveContainer, XAxis, YAxis } from 'recharts'\nimport { TLUiTranslationKey } from '../../../ui/hooks/useTranslation/TLUiTranslationKey'\nimport Styled from './styles'\n\nconst caseInsensitiveReducer = (acc: any[], item: { key: string; numVotes: number }) => {\n\tconst index = acc.findIndex((ans) => ans.key.toLowerCase() === item.key.toLowerCase())\n\tif (index !== -1) {\n\t\tif (acc[index].numVotes >= item.numVotes) acc[index].numVotes += item.numVotes\n\t\telse {\n\t\t\tconst tempVotes = acc[index].numVotes\n\t\t\tacc[index] = item\n\t\t\tacc[index].numVotes += tempVotes\n\t\t}\n\t} else {\n\t\tacc.push(item)\n\t}\n\treturn acc\n}\n\ninterface ChatPollContentProps {\n\tmetadata: string\n\theight?: number\n}\n\ninterface Metadata {\n\tid: string\n\tquestion: string\n\tnumRespondents: number\n\tnumResponders: number\n\tquestionText: string\n\tquestionType: string\n\tanswers: Array<Answers>\n}\n\ninterface Answers {\n\tkey: string\n\tnumVotes: number\n\tid: number\n}\n\nfunction assertAsMetadata(metadata: unknown): asserts metadata is Metadata {\n\tif (typeof metadata !== 'object' || metadata === null) {\n\t\tthrow new Error('metadata is not an object')\n\t}\n\tif (typeof (metadata as Metadata).id !== 'string') {\n\t\tthrow new Error('metadata.id is not a string')\n\t}\n\tif (typeof (metadata as Metadata).numRespondents !== 'number') {\n\t\tthrow new Error('metadata.numRespondents is not a number')\n\t}\n\tif (typeof (metadata as Metadata).numResponders !== 'number') {\n\t\tthrow new Error('metadata.numResponders is not a number')\n\t}\n\tif (typeof (metadata as Metadata).questionText !== 'string') {\n\t\tthrow new Error('metadata.questionText is not a string')\n\t}\n\tif (typeof (metadata as Metadata).questionType !== 'string') {\n\t\tthrow new Error('metadata.questionType is not a string')\n\t}\n\tif (!Array.isArray((metadata as Metadata).answers)) {\n\t\tthrow new Error('metadata.answers is not an array')\n\t}\n}\n\nconst ChatPollContent: React.FC<ChatPollContentProps> = ({\n\tmetadata: string,\n\theight = undefined,\n}) => {\n\tconst pollData = JSON.parse(string) as unknown\n\tassertAsMetadata(pollData)\n\n\tconst answers = pollData.answers.reduce(caseInsensitiveReducer, [])\n\n\tconst translatedAnswers = answers.map((answer: Answers) => {\n\t\tconst translationKey = answer.key as TLUiTranslationKey\n\t\tconst pollAnswer = translationKey ? translationKey : answer.key\n\t\treturn {\n\t\t\t...answer,\n\t\t\tpollAnswer,\n\t\t}\n\t})\n\n\tconst useHeight = height || translatedAnswers.length * 50\n\treturn (\n\t\t<Styled.PollWrapper data-test=\"chatPollMessageText\">\n\t\t\t<Styled.PollText>{pollData.questionText}</Styled.PollText>\n\t\t\t<ResponsiveContainer width=\"90%\" height={useHeight}>\n\t\t\t\t<BarChart data={translatedAnswers} layout=\"vertical\">\n\t\t\t\t\t<XAxis type=\"number\" allowDecimals={false} />\n\t\t\t\t\t<YAxis width={80} type=\"category\" dataKey=\"pollAnswer\" />\n\t\t\t\t\t<Bar dataKey=\"numVotes\" fill=\"#0C57A7\" />\n\t\t\t\t</BarChart>\n\t\t\t</ResponsiveContainer>\n\t\t</Styled.PollWrapper>\n\t)\n}\n\nexport default ChatPollContent\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuFG;AArFH,sBAAiE;AAEjE,oBAAmB;AAEnB,MAAM,yBAAyB,CAAC,KAAY,SAA4C;AACvF,QAAM,QAAQ,IAAI,UAAU,CAAC,QAAQ,IAAI,IAAI,YAAY,MAAM,KAAK,IAAI,YAAY,CAAC;AACrF,MAAI,UAAU,IAAI;AACjB,QAAI,IAAI,KAAK,EAAE,YAAY,KAAK;AAAU,UAAI,KAAK,EAAE,YAAY,KAAK;AAAA,SACjE;AACJ,YAAM,YAAY,IAAI,KAAK,EAAE;AAC7B,UAAI,KAAK,IAAI;AACb,UAAI,KAAK,EAAE,YAAY;AAAA,IACxB;AAAA,EACD,OAAO;AACN,QAAI,KAAK,IAAI;AAAA,EACd;AACA,SAAO;AACR;AAuBA,SAAS,iBAAiB,UAAiD;AAC1E,MAAI,OAAO,aAAa,YAAY,aAAa,MAAM;AACtD,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC5C;AACA,MAAI,OAAQ,SAAsB,OAAO,UAAU;AAClD,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC9C;AACA,MAAI,OAAQ,SAAsB,mBAAmB,UAAU;AAC9D,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC1D;AACA,MAAI,OAAQ,SAAsB,kBAAkB,UAAU;AAC7D,UAAM,IAAI,MAAM,wCAAwC;AAAA,EACzD;AACA,MAAI,OAAQ,SAAsB,iBAAiB,UAAU;AAC5D,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACxD;AACA,MAAI,OAAQ,SAAsB,iBAAiB,UAAU;AAC5D,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACxD;AACA,MAAI,CAAC,MAAM,QAAS,SAAsB,OAAO,GAAG;AACnD,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACnD;AACD;AAEA,MAAM,kBAAkD,CAAC;AAAA,EACxD,UAAU;AAAA,EACV,SAAS;AACV,MAAM;AACL,QAAM,WAAW,KAAK,MAAM,MAAM;AAClC,mBAAiB,QAAQ;AAEzB,QAAM,UAAU,SAAS,QAAQ,OAAO,wBAAwB,CAAC,CAAC;AAElE,QAAM,oBAAoB,QAAQ,IAAI,CAAC,WAAoB;AAC1D,UAAM,iBAAiB,OAAO;AAC9B,UAAM,aAAa,iBAAiB,iBAAiB,OAAO;AAC5D,WAAO;AAAA,MACN,GAAG;AAAA,MACH;AAAA,IACD;AAAA,EACD,CAAC;AAED,QAAM,YAAY,UAAU,kBAAkB,SAAS;AACvD,SACC,6CAAC,cAAAA,QAAO,aAAP,EAAmB,aAAU,uBAC7B;AAAA,gDAAC,cAAAA,QAAO,UAAP,EAAiB,mBAAS,cAAa;AAAA,IACxC,4CAAC,uCAAoB,OAAM,OAAM,QAAQ,WACxC,uDAAC,4BAAS,MAAM,mBAAmB,QAAO,YACzC;AAAA,kDAAC,yBAAM,MAAK,UAAS,eAAe,OAAO;AAAA,MAC3C,4CAAC,yBAAM,OAAO,IAAI,MAAK,YAAW,SAAQ,cAAa;AAAA,MACvD,4CAAC,uBAAI,SAAQ,YAAW,MAAK,WAAU;AAAA,OACxC,GACD;AAAA,KACD;AAEF;AAEA,IAAO,uBAAQ;",
6
+ "names": ["Styled"]
7
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var styles_exports = {};
30
+ __export(styles_exports, {
31
+ PollText: () => PollText,
32
+ PollWrapper: () => PollWrapper,
33
+ default: () => styles_default
34
+ });
35
+ module.exports = __toCommonJS(styles_exports);
36
+ var import_styled_components = __toESM(require("styled-components"));
37
+ const PollText = import_styled_components.default.div`
38
+ margin-top: 0.5rem;
39
+ margin-bottom: 0.5rem;
40
+ font-size: 1.25rem;
41
+ font-weight: 500;
42
+ margin-left: 2.75rem;
43
+ color: var(--color-text, var(--color-gray, #4e5a66));
44
+ word-break: break-word;
45
+ `;
46
+ const PollWrapper = import_styled_components.default.div`
47
+ width: 100%;
48
+ `;
49
+ var styles_default = {
50
+ PollText,
51
+ PollWrapper
52
+ };
53
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/lib/shapes/poll/components/styles.ts"],
4
+ "sourcesContent": ["/* eslint-disable import/no-extraneous-dependencies */\nimport styled from 'styled-components'\n\nexport const PollText = styled.div`\n\tmargin-top: 0.5rem;\n\tmargin-bottom: 0.5rem;\n\tfont-size: 1.25rem;\n\tfont-weight: 500;\n\tmargin-left: 2.75rem;\n\tcolor: var(--color-text, var(--color-gray, #4e5a66));\n\tword-break: break-word;\n`\n\nexport const PollWrapper = styled.div`\n\twidth: 100%;\n`\n\nexport default {\n\tPollText,\n\tPollWrapper,\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,+BAAmB;AAEZ,MAAM,WAAW,yBAAAA,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUxB,MAAM,cAAc,yBAAAA,QAAO;AAAA;AAAA;AAIlC,IAAO,iBAAQ;AAAA,EACd;AAAA,EACA;AACD;",
6
+ "names": ["styled"]
7
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var poll_shape_migrations_exports = {};
20
+ __export(poll_shape_migrations_exports, {
21
+ default: () => poll_shape_migrations_default,
22
+ pollShapeMigrations: () => pollShapeMigrations
23
+ });
24
+ module.exports = __toCommonJS(poll_shape_migrations_exports);
25
+ var import_editor = require("@bigbluebutton/editor");
26
+ const pollShapeMigrations = (0, import_editor.defineMigrations)({
27
+ currentVersion: 1,
28
+ migrators: {
29
+ 1: {
30
+ // example, removing a property from the shape
31
+ up(shape) {
32
+ const migratedUpShape = { ...shape };
33
+ delete migratedUpShape.somePropertyToRemove;
34
+ return migratedUpShape;
35
+ },
36
+ down(shape) {
37
+ const migratedDownShape = { ...shape };
38
+ migratedDownShape.somePropertyToRemove = "some value";
39
+ return migratedDownShape;
40
+ }
41
+ }
42
+ }
43
+ });
44
+ var poll_shape_migrations_default = pollShapeMigrations;
45
+ //# sourceMappingURL=poll-shape-migrations.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/lib/shapes/poll/poll-shape-migrations.ts"],
4
+ "sourcesContent": ["import { defineMigrations } from '@bigbluebutton/editor'\n\n// Migrations for the custom poll shape (optional but very helpful)\nexport const pollShapeMigrations = defineMigrations({\n\tcurrentVersion: 1,\n\tmigrators: {\n\t\t1: {\n\t\t\t// example, removing a property from the shape\n\t\t\tup(shape) {\n\t\t\t\tconst migratedUpShape = { ...shape }\n\t\t\t\tdelete migratedUpShape.somePropertyToRemove\n\t\t\t\treturn migratedUpShape\n\t\t\t},\n\t\t\tdown(shape) {\n\t\t\t\tconst migratedDownShape = { ...shape }\n\t\t\t\tmigratedDownShape.somePropertyToRemove = 'some value'\n\t\t\t\treturn migratedDownShape\n\t\t\t},\n\t\t},\n\t},\n})\n\nexport default pollShapeMigrations\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAiC;AAG1B,MAAM,0BAAsB,gCAAiB;AAAA,EACnD,gBAAgB;AAAA,EAChB,WAAW;AAAA,IACV,GAAG;AAAA;AAAA,MAEF,GAAG,OAAO;AACT,cAAM,kBAAkB,EAAE,GAAG,MAAM;AACnC,eAAO,gBAAgB;AACvB,eAAO;AAAA,MACR;AAAA,MACA,KAAK,OAAO;AACX,cAAM,oBAAoB,EAAE,GAAG,MAAM;AACrC,0BAAkB,uBAAuB;AACzC,eAAO;AAAA,MACR;AAAA,IACD;AAAA,EACD;AACD,CAAC;AAED,IAAO,gCAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var poll_shape_props_exports = {};
20
+ __export(poll_shape_props_exports, {
21
+ default: () => poll_shape_props_default,
22
+ pollShapeProps: () => pollShapeProps
23
+ });
24
+ module.exports = __toCommonJS(poll_shape_props_exports);
25
+ var import_editor = require("@bigbluebutton/editor");
26
+ const pollShapeProps = {
27
+ w: import_editor.T.number,
28
+ h: import_editor.T.number,
29
+ color: import_editor.DefaultColorStyle,
30
+ fill: import_editor.T.string,
31
+ question: import_editor.T.string,
32
+ numRespondents: import_editor.T.number,
33
+ numResponders: import_editor.T.number,
34
+ questionText: import_editor.T.string,
35
+ questionType: import_editor.T.string,
36
+ answers: import_editor.T.any
37
+ };
38
+ var poll_shape_props_default = pollShapeProps;
39
+ //# sourceMappingURL=poll-shape-props.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/lib/shapes/poll/poll-shape-props.ts"],
4
+ "sourcesContent": ["import { DefaultColorStyle, ShapeProps, T } from '@bigbluebutton/editor'\nimport { IPollShape } from './poll-shape-types'\n\nexport const pollShapeProps: ShapeProps<IPollShape> = {\n\tw: T.number,\n\th: T.number,\n\tcolor: DefaultColorStyle,\n\tfill: T.string,\n\tquestion: T.string,\n\tnumRespondents: T.number,\n\tnumResponders: T.number,\n\tquestionText: T.string,\n\tquestionType: T.string,\n\tanswers: T.any,\n}\n\nexport default pollShapeProps\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAiD;AAG1C,MAAM,iBAAyC;AAAA,EACrD,GAAG,gBAAE;AAAA,EACL,GAAG,gBAAE;AAAA,EACL,OAAO;AAAA,EACP,MAAM,gBAAE;AAAA,EACR,UAAU,gBAAE;AAAA,EACZ,gBAAgB,gBAAE;AAAA,EAClB,eAAe,gBAAE;AAAA,EACjB,cAAc,gBAAE;AAAA,EAChB,cAAc,gBAAE;AAAA,EAChB,SAAS,gBAAE;AACZ;AAEA,IAAO,2BAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var poll_shape_types_exports = {};
16
+ module.exports = __toCommonJS(poll_shape_types_exports);
17
+ //# sourceMappingURL=poll-shape-types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/lib/shapes/poll/poll-shape-types.ts"],
4
+ "sourcesContent": ["import { TLBaseShape, TLDefaultColorStyle } from '@bigbluebutton/editor'\n\nexport type IPollShape = TLBaseShape<\n\t'poll',\n\t{\n\t\tw: number\n\t\th: number\n\t\tcolor: TLDefaultColorStyle\n\t\tfill: string\n\t\tquestion: string\n\t\tnumRespondents: number\n\t\tnumResponders: number\n\t\tquestionText: string\n\t\tquestionType: string\n\t\tanswers: Array<{\n\t\t\tid: number\n\t\t\tkey: string\n\t\t\tnumVotes: number\n\t\t}>\n\t}\n>\n"],
5
+ "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -29,11 +29,11 @@ class HandTool extends import_editor.StateNode {
29
29
  static id = "hand";
30
30
  static initial = "idle";
31
31
  static children = () => [import_Idle.Idle, import_Pointing.Pointing, import_Dragging.Dragging];
32
- onDoubleClick = (info) => {
32
+ onDoubleClick = (_info) => {
33
33
  };
34
- onTripleClick = (info) => {
34
+ onTripleClick = (_info) => {
35
35
  };
36
- onQuadrupleClick = (info) => {
36
+ onQuadrupleClick = (_info) => {
37
37
  };
38
38
  }
39
39
  //# sourceMappingURL=HandTool.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/tools/HandTool/HandTool.ts"],
4
- "sourcesContent": ["import { EASINGS, StateNode, TLClickEvent } from '@bigbluebutton/editor'\nimport { Dragging } from './childStates/Dragging'\nimport { Idle } from './childStates/Idle'\nimport { Pointing } from './childStates/Pointing'\n\n/** @public */\nexport class HandTool extends StateNode {\n\tstatic override id = 'hand'\n\tstatic override initial = 'idle'\n\tstatic override children = () => [Idle, Pointing, Dragging]\n\n\toverride onDoubleClick: TLClickEvent = (info) => {\n\t\t// if (info.phase === 'settle') {\n\t\t// \tconst { currentScreenPoint } = this.editor.inputs\n\t\t// \tthis.editor.zoomIn(currentScreenPoint, { duration: 220, easing: EASINGS.easeOutQuint })\n\t\t// }\n\t}\n\n\toverride onTripleClick: TLClickEvent = (info) => {\n\t\t// if (info.phase === 'settle') {\n\t\t// \tconst { currentScreenPoint } = this.editor.inputs\n\t\t// \tthis.editor.zoomOut(currentScreenPoint, { duration: 320, easing: EASINGS.easeOutQuint })\n\t\t// }\n\t}\n\n\toverride onQuadrupleClick: TLClickEvent = (info) => {\n\t\t// if (info.phase === 'settle') {\n\t\t// \tconst zoomLevel = this.editor.getZoomLevel()\n\t\t// \tconst {\n\t\t// \t\tinputs: { currentScreenPoint },\n\t\t// \t} = this.editor\n\n\t\t// \tif (zoomLevel === 1) {\n\t\t// \t\tthis.editor.zoomToFit({ duration: 400, easing: EASINGS.easeOutQuint })\n\t\t// \t} else {\n\t\t// \t\tthis.editor.resetZoom(currentScreenPoint, { duration: 320, easing: EASINGS.easeOutQuint })\n\t\t// \t}\n\t\t// }\n\t}\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAiD;AACjD,sBAAyB;AACzB,kBAAqB;AACrB,sBAAyB;AAGlB,MAAM,iBAAiB,wBAAU;AAAA,EACvC,OAAgB,KAAK;AAAA,EACrB,OAAgB,UAAU;AAAA,EAC1B,OAAgB,WAAW,MAAM,CAAC,kBAAM,0BAAU,wBAAQ;AAAA,EAEjD,gBAA8B,CAAC,SAAS;AAAA,EAKjD;AAAA,EAES,gBAA8B,CAAC,SAAS;AAAA,EAKjD;AAAA,EAES,mBAAiC,CAAC,SAAS;AAAA,EAapD;AACD;",
4
+ "sourcesContent": ["import { StateNode, TLClickEvent } from '@bigbluebutton/editor'\nimport { Dragging } from './childStates/Dragging'\nimport { Idle } from './childStates/Idle'\nimport { Pointing } from './childStates/Pointing'\n\n/** @public */\nexport class HandTool extends StateNode {\n\tstatic override id = 'hand'\n\tstatic override initial = 'idle'\n\tstatic override children = () => [Idle, Pointing, Dragging]\n\n\toverride onDoubleClick: TLClickEvent = (_info) => {\n\t\t// if (info.phase === 'settle') {\n\t\t// \tconst { currentScreenPoint } = this.editor.inputs\n\t\t// \tthis.editor.zoomIn(currentScreenPoint, { duration: 220, easing: EASINGS.easeOutQuint })\n\t\t// }\n\t}\n\n\toverride onTripleClick: TLClickEvent = (_info) => {\n\t\t// if (info.phase === 'settle') {\n\t\t// \tconst { currentScreenPoint } = this.editor.inputs\n\t\t// \tthis.editor.zoomOut(currentScreenPoint, { duration: 320, easing: EASINGS.easeOutQuint })\n\t\t// }\n\t}\n\n\toverride onQuadrupleClick: TLClickEvent = (_info) => {\n\t\t// if (info.phase === 'settle') {\n\t\t// \tconst zoomLevel = this.editor.getZoomLevel()\n\t\t// \tconst {\n\t\t// \t\tinputs: { currentScreenPoint },\n\t\t// \t} = this.editor\n\t\t// \tif (zoomLevel === 1) {\n\t\t// \t\tthis.editor.zoomToFit({ duration: 400, easing: EASINGS.easeOutQuint })\n\t\t// \t} else {\n\t\t// \t\tthis.editor.resetZoom(currentScreenPoint, { duration: 320, easing: EASINGS.easeOutQuint })\n\t\t// \t}\n\t\t// }\n\t}\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAwC;AACxC,sBAAyB;AACzB,kBAAqB;AACrB,sBAAyB;AAGlB,MAAM,iBAAiB,wBAAU;AAAA,EACvC,OAAgB,KAAK;AAAA,EACrB,OAAgB,UAAU;AAAA,EAC1B,OAAgB,WAAW,MAAM,CAAC,kBAAM,0BAAU,wBAAQ;AAAA,EAEjD,gBAA8B,CAAC,UAAU;AAAA,EAKlD;AAAA,EAES,gBAA8B,CAAC,UAAU;AAAA,EAKlD;AAAA,EAES,mBAAiC,CAAC,UAAU;AAAA,EAYrD;AACD;",
6
6
  "names": []
7
7
  }
@@ -77,7 +77,6 @@ const ContextMenu = function ContextMenu2({ children }) {
77
77
  },
78
78
  [editor]
79
79
  );
80
- const container = (0, import_editor.useContainer)();
81
80
  const [isOpen, handleOpenChange] = (0, import_useMenuIsOpen.useMenuIsOpen)("context menu", cb);
82
81
  const isReadonly = (0, import_useReadonly.useReadonly)();
83
82
  const noItemsToShow = contextTLUiMenuSchema.length === 0 || isReadonly && contextTLUiMenuSchema.every((item) => !item.readonlyOk);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/ui/components/ContextMenu.tsx"],
4
- "sourcesContent": ["import { Editor, preventDefault, useContainer, useEditor, useValue } from '@bigbluebutton/editor'\nimport * as _ContextMenu from '@radix-ui/react-context-menu'\nimport classNames from 'classnames'\nimport { forwardRef, useCallback, useState } from 'react'\nimport { TLUiMenuChild } from '../hooks/menuHelpers'\nimport { useBreakpoint } from '../hooks/useBreakpoint'\nimport { useContextMenuSchema } from '../hooks/useContextMenuSchema'\nimport { useMenuIsOpen } from '../hooks/useMenuIsOpen'\nimport { useReadonly } from '../hooks/useReadonly'\nimport { TLUiTranslationKey } from '../hooks/useTranslation/TLUiTranslationKey'\nimport { useTranslation } from '../hooks/useTranslation/useTranslation'\nimport { TLUiIconType } from '../icon-types'\nimport { MoveToPageMenu } from './MoveToPageMenu'\nimport { Button } from './primitives/Button'\nimport { Icon } from './primitives/Icon'\nimport { Kbd } from './primitives/Kbd'\n\n/** @public */\nexport interface TLUiContextMenuProps {\n\tchildren: any\n}\n\n/** @public */\nexport const ContextMenu = function ContextMenu({ children }: { children: any }) {\n\tconst editor = useEditor()\n\n\tconst contextTLUiMenuSchema = useContextMenuSchema()\n\n\tconst cb = useCallback(\n\t\t(isOpen: boolean) => {\n\t\t\tif (!isOpen) {\n\t\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\n\t\t\t\tif (onlySelectedShape && editor.isShapeOrAncestorLocked(onlySelectedShape)) {\n\t\t\t\t\teditor.setSelectedShapes([])\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Weird route: selecting locked shapes on long press\n\t\t\t\tif (editor.getInstanceState().isCoarsePointer) {\n\t\t\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\t\t\t\t\tconst {\n\t\t\t\t\t\tinputs: { currentPagePoint },\n\t\t\t\t\t} = editor\n\n\t\t\t\t\t// get all of the shapes under the current pointer\n\t\t\t\t\tconst shapesAtPoint = editor.getShapesAtPoint(currentPagePoint)\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t// if there are no selected shapes\n\t\t\t\t\t\t!editor.getSelectedShapes().length ||\n\t\t\t\t\t\t// OR if none of the shapes at the point include the selected shape\n\t\t\t\t\t\t!shapesAtPoint.some((s) => selectedShapes.includes(s))\n\t\t\t\t\t) {\n\t\t\t\t\t\t// then are there any locked shapes under the current pointer?\n\t\t\t\t\t\tconst lockedShapes = shapesAtPoint.filter((s) => editor.isShapeOrAncestorLocked(s))\n\n\t\t\t\t\t\tif (lockedShapes.length) {\n\t\t\t\t\t\t\t// nice, let's select them\n\t\t\t\t\t\t\teditor.select(...lockedShapes.map((s) => s.id))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[editor]\n\t)\n\n\tconst container = useContainer()\n\n\tconst [isOpen, handleOpenChange] = useMenuIsOpen('context menu', cb)\n\n\t// If every item in the menu is readonly, then we don't want to show the menu\n\tconst isReadonly = useReadonly()\n\n\tconst noItemsToShow =\n\t\tcontextTLUiMenuSchema.length === 0 ||\n\t\t(isReadonly && contextTLUiMenuSchema.every((item) => !item.readonlyOk))\n\n\tconst selectToolActive = useValue(\n\t\t'isSelectToolActive',\n\t\t() => editor.getCurrentToolId() === 'select',\n\t\t[editor]\n\t)\n\n\tconst disabled = !selectToolActive || noItemsToShow\n\n\treturn (\n\t\t<_ContextMenu.Root dir=\"ltr\" onOpenChange={handleOpenChange} modal={false}>\n\t\t\t<_ContextMenu.Trigger\n\t\t\t\tonContextMenu={disabled ? preventDefault : undefined}\n\t\t\t\tdir=\"ltr\"\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</_ContextMenu.Trigger>\n\t\t\t{isOpen && <ContextMenuContent />}\n\t\t</_ContextMenu.Root>\n\t)\n}\n\nconst ContextMenuContent = forwardRef(function ContextMenuContent() {\n\tconst editor = useEditor()\n\tconst msg = useTranslation()\n\tconst menuSchema = useContextMenuSchema()\n\tconst [_, handleSubOpenChange] = useMenuIsOpen('context menu sub')\n\n\tconst isReadonly = useReadonly()\n\tconst breakpoint = useBreakpoint()\n\tconst container = useContainer()\n\n\tconst [disableClicks, setDisableClicks] = useState(false)\n\n\tfunction getContextMenuItem(\n\t\teditor: Editor,\n\t\titem: TLUiMenuChild,\n\t\tparent: TLUiMenuChild | null,\n\t\tdepth: number\n\t) {\n\t\tif (!item) return null\n\t\tif (isReadonly && !item.readonlyOk) return null\n\n\t\tswitch (item.type) {\n\t\t\tcase 'custom': {\n\t\t\t\tswitch (item.id) {\n\t\t\t\t\tcase 'MOVE_TO_PAGE_MENU': {\n\t\t\t\t\t\treturn <MoveToPageMenu key={item.id} />\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'group': {\n\t\t\t\treturn (\n\t\t\t\t\t<_ContextMenu.Group\n\t\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\t\tclassName={classNames('tlui-menu__group', {\n\t\t\t\t\t\t\t'tlui-menu__group__small': parent?.type === 'submenu',\n\t\t\t\t\t\t})}\n\t\t\t\t\t\tdata-testid={`menu-item.${item.id}`}\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t>\n\t\t\t\t\t\t{item.children.map((child) => getContextMenuItem(editor, child, item, depth + 1))}\n\t\t\t\t\t</_ContextMenu.Group>\n\t\t\t\t)\n\t\t\t}\n\t\t\tcase 'submenu': {\n\t\t\t\treturn (\n\t\t\t\t\t<_ContextMenu.Sub key={item.id} onOpenChange={handleSubOpenChange}>\n\t\t\t\t\t\t<_ContextMenu.SubTrigger dir=\"ltr\" disabled={item.disabled} asChild>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"menu\"\n\t\t\t\t\t\t\t\tlabel={item.label as TLUiTranslationKey}\n\t\t\t\t\t\t\t\tdata-testid={`menu-item.${item.id}`}\n\t\t\t\t\t\t\t\ticon=\"chevron-right\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</_ContextMenu.SubTrigger>\n\t\t\t\t\t\t<_ContextMenu.Portal container={container}>\n\t\t\t\t\t\t\t<_ContextMenu.SubContent className=\"tlui-menu\" sideOffset={-4} collisionPadding={4}>\n\t\t\t\t\t\t\t\t{item.children.map((child) => getContextMenuItem(editor, child, item, depth + 1))}\n\t\t\t\t\t\t\t</_ContextMenu.SubContent>\n\t\t\t\t\t\t</_ContextMenu.Portal>\n\t\t\t\t\t</_ContextMenu.Sub>\n\t\t\t\t)\n\t\t\t}\n\t\t\tcase 'item': {\n\t\t\t\tif (isReadonly && !item.readonlyOk) return null\n\n\t\t\t\tconst { id, checkbox, contextMenuLabel, label, onSelect, kbd, icon } = item.actionItem\n\t\t\t\tconst labelToUse = contextMenuLabel ?? label\n\t\t\t\tconst labelStr = labelToUse ? msg(labelToUse as TLUiTranslationKey) : undefined\n\n\t\t\t\tif (checkbox) {\n\t\t\t\t\t// Item is in a checkbox group\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<_ContextMenu.CheckboxItem\n\t\t\t\t\t\t\tkey={id}\n\t\t\t\t\t\t\tclassName=\"tlui-button tlui-button__menu tlui-button__checkbox\"\n\t\t\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\t\t\tonSelect('context-menu')\n\t\t\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttitle={labelStr ? labelStr : undefined}\n\t\t\t\t\t\t\tchecked={item.checked}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon small icon={item.checked ? 'check' : 'checkbox-empty'} />\n\t\t\t\t\t\t\t{labelStr && (\n\t\t\t\t\t\t\t\t<span className=\"tlui-button__label\" draggable={false}>\n\t\t\t\t\t\t\t\t\t{labelStr}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{kbd && <Kbd>{kbd}</Kbd>}\n\t\t\t\t\t\t</_ContextMenu.CheckboxItem>\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<_ContextMenu.Item key={id} dir=\"ltr\" asChild>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"menu\"\n\t\t\t\t\t\t\tdata-testid={`menu-item.${id}`}\n\t\t\t\t\t\t\tkbd={kbd}\n\t\t\t\t\t\t\tlabel={labelToUse as TLUiTranslationKey}\n\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\ticonLeft={breakpoint < 3 && depth > 2 ? (icon as TLUiIconType) : undefined}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tif (disableClicks) {\n\t\t\t\t\t\t\t\t\tsetDisableClicks(false)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tonSelect('context-menu')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</_ContextMenu.Item>\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (\n\t\t<_ContextMenu.Portal container={container}>\n\t\t\t<_ContextMenu.Content\n\t\t\t\tclassName=\"tlui-menu scrollable\"\n\t\t\t\talignOffset={-4}\n\t\t\t\tcollisionPadding={4}\n\t\t\t\tonContextMenu={preventDefault}\n\t\t\t>\n\t\t\t\t{menuSchema.map((item) => getContextMenuItem(editor, item, null, 0))}\n\t\t\t</_ContextMenu.Content>\n\t\t</_ContextMenu.Portal>\n\t)\n})\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Editor, preventDefault, useContainer, useEditor, useValue } from '@bigbluebutton/editor'\nimport * as _ContextMenu from '@radix-ui/react-context-menu'\nimport classNames from 'classnames'\nimport { forwardRef, useCallback, useState } from 'react'\nimport { TLUiMenuChild } from '../hooks/menuHelpers'\nimport { useBreakpoint } from '../hooks/useBreakpoint'\nimport { useContextMenuSchema } from '../hooks/useContextMenuSchema'\nimport { useMenuIsOpen } from '../hooks/useMenuIsOpen'\nimport { useReadonly } from '../hooks/useReadonly'\nimport { TLUiTranslationKey } from '../hooks/useTranslation/TLUiTranslationKey'\nimport { useTranslation } from '../hooks/useTranslation/useTranslation'\nimport { TLUiIconType } from '../icon-types'\nimport { MoveToPageMenu } from './MoveToPageMenu'\nimport { Button } from './primitives/Button'\nimport { Icon } from './primitives/Icon'\nimport { Kbd } from './primitives/Kbd'\n\n/** @public */\nexport interface TLUiContextMenuProps {\n\tchildren: any\n}\n\n/** @public */\nexport const ContextMenu = function ContextMenu({ children }: { children: any }) {\n\tconst editor = useEditor()\n\n\tconst contextTLUiMenuSchema = useContextMenuSchema()\n\n\tconst cb = useCallback(\n\t\t(isOpen: boolean) => {\n\t\t\tif (!isOpen) {\n\t\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\n\t\t\t\tif (onlySelectedShape && editor.isShapeOrAncestorLocked(onlySelectedShape)) {\n\t\t\t\t\teditor.setSelectedShapes([])\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Weird route: selecting locked shapes on long press\n\t\t\t\tif (editor.getInstanceState().isCoarsePointer) {\n\t\t\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\t\t\t\t\tconst {\n\t\t\t\t\t\tinputs: { currentPagePoint },\n\t\t\t\t\t} = editor\n\n\t\t\t\t\t// get all of the shapes under the current pointer\n\t\t\t\t\tconst shapesAtPoint = editor.getShapesAtPoint(currentPagePoint)\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t// if there are no selected shapes\n\t\t\t\t\t\t!editor.getSelectedShapes().length ||\n\t\t\t\t\t\t// OR if none of the shapes at the point include the selected shape\n\t\t\t\t\t\t!shapesAtPoint.some((s) => selectedShapes.includes(s))\n\t\t\t\t\t) {\n\t\t\t\t\t\t// then are there any locked shapes under the current pointer?\n\t\t\t\t\t\tconst lockedShapes = shapesAtPoint.filter((s) => editor.isShapeOrAncestorLocked(s))\n\n\t\t\t\t\t\tif (lockedShapes.length) {\n\t\t\t\t\t\t\t// nice, let's select them\n\t\t\t\t\t\t\teditor.select(...lockedShapes.map((s) => s.id))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[editor]\n\t)\n\n\t// const container = useContainer()\n\n\tconst [isOpen, handleOpenChange] = useMenuIsOpen('context menu', cb)\n\n\t// If every item in the menu is readonly, then we don't want to show the menu\n\tconst isReadonly = useReadonly()\n\n\tconst noItemsToShow =\n\t\tcontextTLUiMenuSchema.length === 0 ||\n\t\t(isReadonly && contextTLUiMenuSchema.every((item) => !item.readonlyOk))\n\n\tconst selectToolActive = useValue(\n\t\t'isSelectToolActive',\n\t\t() => editor.getCurrentToolId() === 'select',\n\t\t[editor]\n\t)\n\n\tconst disabled = !selectToolActive || noItemsToShow\n\n\treturn (\n\t\t<_ContextMenu.Root dir=\"ltr\" onOpenChange={handleOpenChange} modal={false}>\n\t\t\t<_ContextMenu.Trigger\n\t\t\t\tonContextMenu={disabled ? preventDefault : undefined}\n\t\t\t\tdir=\"ltr\"\n\t\t\t\tdisabled={disabled}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</_ContextMenu.Trigger>\n\t\t\t{isOpen && <ContextMenuContent />}\n\t\t</_ContextMenu.Root>\n\t)\n}\n\nconst ContextMenuContent = forwardRef(function ContextMenuContent() {\n\tconst editor = useEditor()\n\tconst msg = useTranslation()\n\tconst menuSchema = useContextMenuSchema()\n\tconst [_, handleSubOpenChange] = useMenuIsOpen('context menu sub')\n\n\tconst isReadonly = useReadonly()\n\tconst breakpoint = useBreakpoint()\n\tconst container = useContainer()\n\n\tconst [disableClicks, setDisableClicks] = useState(false)\n\n\tfunction getContextMenuItem(\n\t\teditor: Editor,\n\t\titem: TLUiMenuChild,\n\t\tparent: TLUiMenuChild | null,\n\t\tdepth: number\n\t) {\n\t\tif (!item) return null\n\t\tif (isReadonly && !item.readonlyOk) return null\n\n\t\tswitch (item.type) {\n\t\t\tcase 'custom': {\n\t\t\t\tswitch (item.id) {\n\t\t\t\t\tcase 'MOVE_TO_PAGE_MENU': {\n\t\t\t\t\t\treturn <MoveToPageMenu key={item.id} />\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'group': {\n\t\t\t\treturn (\n\t\t\t\t\t<_ContextMenu.Group\n\t\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\t\tclassName={classNames('tlui-menu__group', {\n\t\t\t\t\t\t\t'tlui-menu__group__small': parent?.type === 'submenu',\n\t\t\t\t\t\t})}\n\t\t\t\t\t\tdata-testid={`menu-item.${item.id}`}\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t>\n\t\t\t\t\t\t{item.children.map((child) => getContextMenuItem(editor, child, item, depth + 1))}\n\t\t\t\t\t</_ContextMenu.Group>\n\t\t\t\t)\n\t\t\t}\n\t\t\tcase 'submenu': {\n\t\t\t\treturn (\n\t\t\t\t\t<_ContextMenu.Sub key={item.id} onOpenChange={handleSubOpenChange}>\n\t\t\t\t\t\t<_ContextMenu.SubTrigger dir=\"ltr\" disabled={item.disabled} asChild>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"menu\"\n\t\t\t\t\t\t\t\tlabel={item.label as TLUiTranslationKey}\n\t\t\t\t\t\t\t\tdata-testid={`menu-item.${item.id}`}\n\t\t\t\t\t\t\t\ticon=\"chevron-right\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</_ContextMenu.SubTrigger>\n\t\t\t\t\t\t<_ContextMenu.Portal container={container}>\n\t\t\t\t\t\t\t<_ContextMenu.SubContent className=\"tlui-menu\" sideOffset={-4} collisionPadding={4}>\n\t\t\t\t\t\t\t\t{item.children.map((child) => getContextMenuItem(editor, child, item, depth + 1))}\n\t\t\t\t\t\t\t</_ContextMenu.SubContent>\n\t\t\t\t\t\t</_ContextMenu.Portal>\n\t\t\t\t\t</_ContextMenu.Sub>\n\t\t\t\t)\n\t\t\t}\n\t\t\tcase 'item': {\n\t\t\t\tif (isReadonly && !item.readonlyOk) return null\n\n\t\t\t\tconst { id, checkbox, contextMenuLabel, label, onSelect, kbd, icon } = item.actionItem\n\t\t\t\tconst labelToUse = contextMenuLabel ?? label\n\t\t\t\tconst labelStr = labelToUse ? msg(labelToUse as TLUiTranslationKey) : undefined\n\n\t\t\t\tif (checkbox) {\n\t\t\t\t\t// Item is in a checkbox group\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<_ContextMenu.CheckboxItem\n\t\t\t\t\t\t\tkey={id}\n\t\t\t\t\t\t\tclassName=\"tlui-button tlui-button__menu tlui-button__checkbox\"\n\t\t\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\t\t\tonSelect('context-menu')\n\t\t\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttitle={labelStr ? labelStr : undefined}\n\t\t\t\t\t\t\tchecked={item.checked}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon small icon={item.checked ? 'check' : 'checkbox-empty'} />\n\t\t\t\t\t\t\t{labelStr && (\n\t\t\t\t\t\t\t\t<span className=\"tlui-button__label\" draggable={false}>\n\t\t\t\t\t\t\t\t\t{labelStr}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{kbd && <Kbd>{kbd}</Kbd>}\n\t\t\t\t\t\t</_ContextMenu.CheckboxItem>\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<_ContextMenu.Item key={id} dir=\"ltr\" asChild>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"menu\"\n\t\t\t\t\t\t\tdata-testid={`menu-item.${id}`}\n\t\t\t\t\t\t\tkbd={kbd}\n\t\t\t\t\t\t\tlabel={labelToUse as TLUiTranslationKey}\n\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\ticonLeft={breakpoint < 3 && depth > 2 ? (icon as TLUiIconType) : undefined}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tif (disableClicks) {\n\t\t\t\t\t\t\t\t\tsetDisableClicks(false)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tonSelect('context-menu')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</_ContextMenu.Item>\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (\n\t\t<_ContextMenu.Portal container={container}>\n\t\t\t<_ContextMenu.Content\n\t\t\t\tclassName=\"tlui-menu scrollable\"\n\t\t\t\talignOffset={-4}\n\t\t\t\tcollisionPadding={4}\n\t\t\t\tonContextMenu={preventDefault}\n\t\t\t>\n\t\t\t\t{menuSchema.map((item) => getContextMenuItem(editor, item, null, 0))}\n\t\t\t</_ContextMenu.Content>\n\t\t</_ContextMenu.Portal>\n\t)\n})\n"],
5
+ "mappings": "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",
6
6
  "names": ["ContextMenu", "isOpen", "ContextMenuContent", "editor", "classNames"]
7
7
  }
@@ -23,29 +23,7 @@ __export(MenuZone_exports, {
23
23
  module.exports = __toCommonJS(MenuZone_exports);
24
24
  var import_jsx_runtime = require("react/jsx-runtime");
25
25
  var import_editor = require("@bigbluebutton/editor");
26
- var import_useBreakpoint = require("../hooks/useBreakpoint");
27
- var import_useReadonly = require("../hooks/useReadonly");
28
- var import_ActionsMenu = require("./ActionsMenu");
29
- var import_DuplicateButton = require("./DuplicateButton");
30
- var import_Menu = require("./Menu");
31
- var import_PageMenu = require("./PageMenu/PageMenu");
32
- var import_RedoButton = require("./RedoButton");
33
- var import_TrashButton = require("./TrashButton");
34
- var import_UndoButton = require("./UndoButton");
35
26
  const MenuZone = (0, import_editor.track)(function MenuZone2() {
36
- const editor = (0, import_editor.useEditor)();
37
- const breakpoint = (0, import_useBreakpoint.useBreakpoint)();
38
- const isReadonly = (0, import_useReadonly.useReadonly)();
39
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "tlui-menu-zone", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-buttons__horizontal", children: [
40
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Menu.Menu, {}),
41
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_PageMenu.PageMenu, {}),
42
- breakpoint >= 6 && !isReadonly && !editor.isInAny("hand", "zoom") && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
43
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_UndoButton.UndoButton, {}),
44
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_RedoButton.RedoButton, {}),
45
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TrashButton.TrashButton, {}),
46
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DuplicateButton.DuplicateButton, {}),
47
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ActionsMenu.ActionsMenu, {})
48
- ] })
49
- ] }) });
27
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "tlui-menu-zone", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "tlui-buttons__horizontal" }) });
50
28
  });
51
29
  //# sourceMappingURL=MenuZone.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/ui/components/MenuZone.tsx"],
4
- "sourcesContent": ["import { track, useEditor } from '@bigbluebutton/editor'\nimport { useBreakpoint } from '../hooks/useBreakpoint'\nimport { useReadonly } from '../hooks/useReadonly'\nimport { ActionsMenu } from './ActionsMenu'\nimport { DuplicateButton } from './DuplicateButton'\nimport { Menu } from './Menu'\nimport { PageMenu } from './PageMenu/PageMenu'\nimport { RedoButton } from './RedoButton'\nimport { TrashButton } from './TrashButton'\nimport { UndoButton } from './UndoButton'\n\nexport const MenuZone = track(function MenuZone() {\n\tconst editor = useEditor()\n\n\tconst breakpoint = useBreakpoint()\n\tconst isReadonly = useReadonly()\n\n\treturn (\n\t\t<div className=\"tlui-menu-zone\">\n\t\t\t<div className=\"tlui-buttons__horizontal\">\n\t\t\t\t<Menu />\n\t\t\t\t<PageMenu />\n\t\t\t\t{breakpoint >= 6 && !isReadonly && !editor.isInAny('hand', 'zoom') && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<UndoButton />\n\t\t\t\t\t\t<RedoButton />\n\t\t\t\t\t\t<TrashButton />\n\t\t\t\t\t\t<DuplicateButton />\n\t\t\t\t\t\t<ActionsMenu />\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n})\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBI;AApBJ,oBAAiC;AACjC,2BAA8B;AAC9B,yBAA4B;AAC5B,yBAA4B;AAC5B,6BAAgC;AAChC,kBAAqB;AACrB,sBAAyB;AACzB,wBAA2B;AAC3B,yBAA4B;AAC5B,wBAA2B;AAEpB,MAAM,eAAW,qBAAM,SAASA,YAAW;AACjD,QAAM,aAAS,yBAAU;AAEzB,QAAM,iBAAa,oCAAc;AACjC,QAAM,iBAAa,gCAAY;AAE/B,SACC,4CAAC,SAAI,WAAU,kBACd,uDAAC,SAAI,WAAU,4BACd;AAAA,gDAAC,oBAAK;AAAA,IACN,4CAAC,4BAAS;AAAA,IACT,cAAc,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,QAAQ,MAAM,KAChE,4EACC;AAAA,kDAAC,gCAAW;AAAA,MACZ,4CAAC,gCAAW;AAAA,MACZ,4CAAC,kCAAY;AAAA,MACb,4CAAC,0CAAgB;AAAA,MACjB,4CAAC,kCAAY;AAAA,OACd;AAAA,KAEF,GACD;AAEF,CAAC;",
4
+ "sourcesContent": ["import { track } from '@bigbluebutton/editor'\n// import { useBreakpoint } from '../hooks/useBreakpoint'\n// import { useReadonly } from '../hooks/useReadonly'\n\nexport const MenuZone = track(function MenuZone() {\n\t// const editor = useEditor()\n\n\t// const breakpoint = useBreakpoint()\n\t// const isReadonly = useReadonly()\n\n\treturn (\n\t\t<div className=\"tlui-menu-zone\">\n\t\t\t<div className=\"tlui-buttons__horizontal\">\n\t\t\t\t{/* <Menu />\n\t\t\t\t<PageMenu />\n\t\t\t\t{breakpoint >= 6 && !isReadonly && !editor.isInAny('hand', 'zoom') && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<UndoButton />\n\t\t\t\t\t\t<RedoButton />\n\t\t\t\t\t\t<TrashButton />\n\t\t\t\t\t\t<DuplicateButton />\n\t\t\t\t\t\t<ActionsMenu />\n\t\t\t\t\t</>\n\t\t\t\t)} */}\n\t\t\t</div>\n\t\t</div>\n\t)\n})\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAYG;AAZH,oBAAsB;AAIf,MAAM,eAAW,qBAAM,SAASA,YAAW;AAMjD,SACC,4CAAC,SAAI,WAAU,kBACd,sDAAC,SAAI,WAAU,4BAYf,GACD;AAEF,CAAC;",
6
6
  "names": ["MenuZone"]
7
7
  }
@@ -40,11 +40,7 @@ var import_useReadonly = require("../../hooks/useReadonly");
40
40
  var import_useToolbarSchema = require("../../hooks/useToolbarSchema");
41
41
  var import_useTranslation = require("../../hooks/useTranslation/useTranslation");
42
42
  var import_ActionsMenu = require("../ActionsMenu");
43
- var import_DuplicateButton = require("../DuplicateButton");
44
43
  var import_MobileStylePanel = require("../MobileStylePanel");
45
- var import_RedoButton = require("../RedoButton");
46
- var import_TrashButton = require("../TrashButton");
47
- var import_UndoButton = require("../UndoButton");
48
44
  var import_Button = require("../primitives/Button");
49
45
  var M = __toESM(require("../primitives/DropdownMenu"));
50
46
  var import_shared = require("../primitives/shared");
@@ -103,16 +99,7 @@ const Toolbar = (0, import_react.memo)(function Toolbar2() {
103
99
  }, [toolbarItems, activeTLUiToolbarItem, breakpoint]);
104
100
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "tlui-toolbar", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-toolbar__inner", children: [
105
101
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-toolbar__left", children: [
106
- !isReadonly && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-toolbar__extras", children: [
107
- breakpoint < 6 && !(activeToolId === "hand" || activeToolId === "zoom") && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-toolbar__extras__controls tlui-buttons__horizontal", children: [
108
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_UndoButton.UndoButton, {}),
109
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_RedoButton.RedoButton, {}),
110
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TrashButton.TrashButton, {}),
111
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DuplicateButton.DuplicateButton, {}),
112
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ActionsMenu.ActionsMenu, {})
113
- ] }),
114
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ToggleToolLockedButton.ToggleToolLockedButton, { activeToolId })
115
- ] }),
102
+ !isReadonly && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "tlui-toolbar__extras", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ToggleToolLockedButton.ToggleToolLockedButton, { activeToolId }) }),
116
103
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
117
104
  "div",
118
105
  {
@@ -185,7 +172,8 @@ const Toolbar = (0, import_react.memo)(function Toolbar2() {
185
172
  }
186
173
  ) }),
187
174
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(M.Content, { side: "top", align: "center", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OverflowToolsContent, { toolbarItems: itemsInDropdown }) })
188
- ] })
175
+ ] }),
176
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ActionsMenu.ActionsMenu, {})
189
177
  ] }) : null
190
178
  ] })
191
179
  ]
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/Toolbar/Toolbar.tsx"],
4
- "sourcesContent": ["import { GeoShapeGeoStyle, preventDefault, track, useEditor, useValue } from '@bigbluebutton/editor'\nimport classNames from 'classnames'\nimport React, { memo } from 'react'\nimport { useBreakpoint } from '../../hooks/useBreakpoint'\nimport { useReadonly } from '../../hooks/useReadonly'\nimport { TLUiToolbarItem, useToolbarSchema } from '../../hooks/useToolbarSchema'\nimport { TLUiToolItem } from '../../hooks/useTools'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { ActionsMenu } from '../ActionsMenu'\nimport { DuplicateButton } from '../DuplicateButton'\nimport { MobileStylePanel } from '../MobileStylePanel'\nimport { RedoButton } from '../RedoButton'\nimport { TrashButton } from '../TrashButton'\nimport { UndoButton } from '../UndoButton'\nimport { Button } from '../primitives/Button'\nimport * as M from '../primitives/DropdownMenu'\nimport { kbdStr } from '../primitives/shared'\nimport { ToggleToolLockedButton } from './ToggleToolLockedButton'\n\n/** @public */\nexport const Toolbar = memo(function Toolbar() {\n\tconst editor = useEditor()\n\tconst msg = useTranslation()\n\tconst breakpoint = useBreakpoint()\n\n\tconst rMostRecentlyActiveDropdownItem = React.useRef<TLUiToolbarItem | undefined>(undefined)\n\n\tconst isReadonly = useReadonly()\n\tconst toolbarItems = useToolbarSchema()\n\tconst laserTool = toolbarItems.find((item) => item.toolItem.id === 'laser')\n\n\tconst activeToolId = useValue('current tool id', () => editor.getCurrentToolId(), [editor])\n\n\tconst geoState = useValue(\n\t\t'geo',\n\t\t() => editor.getSharedStyles().getAsKnownValue(GeoShapeGeoStyle),\n\t\t[editor]\n\t)\n\n\tconst showEditingTools = !isReadonly\n\n\tconst getTitle = (item: TLUiToolItem) =>\n\t\titem.label ? `${msg(item.label)} ${item.kbd ? kbdStr(item.kbd) : ''}` : ''\n\n\tconst activeTLUiToolbarItem = toolbarItems.find((item) => {\n\t\treturn isActiveTLUiToolItem(item.toolItem, activeToolId, geoState)\n\t})\n\n\tconst { itemsInPanel, itemsInDropdown, dropdownFirstItem } = React.useMemo(() => {\n\t\tconst itemsInPanel: TLUiToolbarItem[] = []\n\t\tconst itemsInDropdown: TLUiToolbarItem[] = []\n\t\tlet dropdownFirstItem: TLUiToolbarItem | undefined\n\n\t\tconst overflowIndex = Math.min(8, 5 + breakpoint)\n\n\t\tfor (let i = 4; i < toolbarItems.length; i++) {\n\t\t\tconst item = toolbarItems[i]\n\t\t\tif (i < overflowIndex) {\n\t\t\t\t// Items below the overflow index will always be in the panel\n\t\t\t\titemsInPanel.push(item)\n\t\t\t} else {\n\t\t\t\t// Items above will be in the dropdown menu unless the item\n\t\t\t\t// is active (or was the most recently selected active item)\n\t\t\t\tif (item === activeTLUiToolbarItem) {\n\t\t\t\t\t// If the dropdown item is active, make it the dropdownFirstItem\n\t\t\t\t\tdropdownFirstItem = item\n\t\t\t\t}\n\t\t\t\t// Otherwise, add it to the items in dropdown menu\n\t\t\t\titemsInDropdown.push(item)\n\t\t\t}\n\t\t}\n\n\t\tif (dropdownFirstItem) {\n\t\t\t// noop\n\t\t} else {\n\t\t\t// If we don't have a currently active dropdown item, use the most\n\t\t\t// recently active dropdown item as the current dropdown first item.\n\n\t\t\t// If haven't ever had a most recently active dropdown item, then\n\t\t\t// make the first item in the dropdown menu the most recently\n\t\t\t// active dropdown item.\n\t\t\tif (!rMostRecentlyActiveDropdownItem.current) {\n\t\t\t\trMostRecentlyActiveDropdownItem.current = itemsInDropdown[0]\n\t\t\t}\n\n\t\t\tdropdownFirstItem = rMostRecentlyActiveDropdownItem.current\n\n\t\t\t// If the most recently active dropdown item is no longer in the\n\t\t\t// dropdown (because the breakpoint has changed) then make the\n\t\t\t// first item in the dropdown menu the most recently active\n\t\t\t// dropdown item.\n\t\t\tif (!itemsInDropdown.includes(dropdownFirstItem)) {\n\t\t\t\tdropdownFirstItem = itemsInDropdown[0]\n\t\t\t}\n\t\t}\n\n\t\t// We want this ref set to remember which item from the current\n\t\t// set of dropdown items was most recently active\n\t\trMostRecentlyActiveDropdownItem.current = dropdownFirstItem\n\n\t\tif (itemsInDropdown.length <= 2) {\n\t\t\titemsInPanel.push(...itemsInDropdown)\n\t\t\titemsInDropdown.length = 0\n\t\t}\n\n\t\treturn { itemsInPanel, itemsInDropdown, dropdownFirstItem }\n\t}, [toolbarItems, activeTLUiToolbarItem, breakpoint])\n\n\treturn (\n\t\t<div className=\"tlui-toolbar\">\n\t\t\t<div className=\"tlui-toolbar__inner\">\n\t\t\t\t<div className=\"tlui-toolbar__left\">\n\t\t\t\t\t{!isReadonly && (\n\t\t\t\t\t\t<div className=\"tlui-toolbar__extras\">\n\t\t\t\t\t\t\t{breakpoint < 6 && !(activeToolId === 'hand' || activeToolId === 'zoom') && (\n\t\t\t\t\t\t\t\t<div className=\"tlui-toolbar__extras__controls tlui-buttons__horizontal\">\n\t\t\t\t\t\t\t\t\t<UndoButton />\n\t\t\t\t\t\t\t\t\t<RedoButton />\n\t\t\t\t\t\t\t\t\t<TrashButton />\n\t\t\t\t\t\t\t\t\t<DuplicateButton />\n\t\t\t\t\t\t\t\t\t<ActionsMenu />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ToggleToolLockedButton activeToolId={activeToolId} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={classNames('tlui-toolbar__tools', {\n\t\t\t\t\t\t\t'tlui-toolbar__tools__mobile': breakpoint < 5,\n\t\t\t\t\t\t})}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Select / Hand */}\n\t\t\t\t\t\t{toolbarItems.slice(0, 2).map(({ toolItem }) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\t\tkey={toolItem.id}\n\t\t\t\t\t\t\t\t\titem={toolItem}\n\t\t\t\t\t\t\t\t\ttitle={getTitle(toolItem)}\n\t\t\t\t\t\t\t\t\tisSelected={isActiveTLUiToolItem(toolItem, activeToolId, geoState)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{isReadonly && laserTool && (\n\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\tkey={laserTool.toolItem.id}\n\t\t\t\t\t\t\t\titem={laserTool.toolItem}\n\t\t\t\t\t\t\t\ttitle={getTitle(laserTool.toolItem)}\n\t\t\t\t\t\t\t\tisSelected={isActiveTLUiToolItem(laserTool.toolItem, activeToolId, geoState)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showEditingTools && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{/* Draw / Eraser */}\n\t\t\t\t\t\t\t\t{toolbarItems.slice(2, 4).map(({ toolItem }) => (\n\t\t\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\t\t\tkey={toolItem.id}\n\t\t\t\t\t\t\t\t\t\titem={toolItem}\n\t\t\t\t\t\t\t\t\t\ttitle={getTitle(toolItem)}\n\t\t\t\t\t\t\t\t\t\tisSelected={isActiveTLUiToolItem(toolItem, activeToolId, geoState)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t{/* Everything Else */}\n\t\t\t\t\t\t\t\t{itemsInPanel.map(({ toolItem }) => (\n\t\t\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\t\t\tkey={toolItem.id}\n\t\t\t\t\t\t\t\t\t\titem={toolItem}\n\t\t\t\t\t\t\t\t\t\ttitle={getTitle(toolItem)}\n\t\t\t\t\t\t\t\t\t\tisSelected={isActiveTLUiToolItem(toolItem, activeToolId, geoState)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t{/* Overflowing Shapes */}\n\t\t\t\t\t\t\t\t{itemsInDropdown.length ? (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{/* Last selected (or first) item from the overflow */}\n\t\t\t\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\t\t\t\tkey={dropdownFirstItem.toolItem.id}\n\t\t\t\t\t\t\t\t\t\t\titem={dropdownFirstItem.toolItem}\n\t\t\t\t\t\t\t\t\t\t\ttitle={getTitle(dropdownFirstItem.toolItem)}\n\t\t\t\t\t\t\t\t\t\t\tisSelected={isActiveTLUiToolItem(\n\t\t\t\t\t\t\t\t\t\t\t\tdropdownFirstItem.toolItem,\n\t\t\t\t\t\t\t\t\t\t\t\tactiveToolId,\n\t\t\t\t\t\t\t\t\t\t\t\tgeoState\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{/* The dropdown to select everything else */}\n\t\t\t\t\t\t\t\t\t\t<M.Root id=\"toolbar overflow\" modal={false}>\n\t\t\t\t\t\t\t\t\t\t\t<M.Trigger>\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"tlui-toolbar__overflow\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon=\"chevron-up\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"tool\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata-testid=\"tools.more\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={msg('tool-panel.more')}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</M.Trigger>\n\t\t\t\t\t\t\t\t\t\t\t<M.Content side=\"top\" align=\"center\">\n\t\t\t\t\t\t\t\t\t\t\t\t<OverflowToolsContent toolbarItems={itemsInDropdown} />\n\t\t\t\t\t\t\t\t\t\t\t</M.Content>\n\t\t\t\t\t\t\t\t\t\t</M.Root>\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{breakpoint < 5 && !isReadonly && (\n\t\t\t\t\t<div className=\"tlui-toolbar__tools\">\n\t\t\t\t\t\t<MobileStylePanel />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n})\n\nconst OverflowToolsContent = track(function OverflowToolsContent({\n\ttoolbarItems,\n}: {\n\ttoolbarItems: TLUiToolbarItem[]\n}) {\n\tconst msg = useTranslation()\n\n\treturn (\n\t\t<div className=\"tlui-buttons__grid\">\n\t\t\t{toolbarItems.map(({ toolItem: { id, meta, kbd, label, onSelect, icon } }) => {\n\t\t\t\treturn (\n\t\t\t\t\t<M.Item\n\t\t\t\t\t\tkey={id}\n\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\tclassName=\"tlui-button-grid__button\"\n\t\t\t\t\t\tdata-testid={`tools.more.${id}`}\n\t\t\t\t\t\tdata-tool={id}\n\t\t\t\t\t\tdata-geo={meta?.geo ?? ''}\n\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\tonClick={() => onSelect('toolbar')}\n\t\t\t\t\t\ttitle={label ? `${msg(label)} ${kbd ? kbdStr(kbd) : ''}` : ''}\n\t\t\t\t\t\ticon={icon}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t})}\n\t\t</div>\n\t)\n})\n\nfunction ToolbarButton({\n\titem,\n\ttitle,\n\tisSelected,\n}: {\n\titem: TLUiToolItem\n\ttitle: string\n\tisSelected: boolean\n}) {\n\treturn (\n\t\t<Button\n\t\t\ttype=\"tool\"\n\t\t\tdata-testid={`tools.${item.id}`}\n\t\t\tdata-tool={item.id}\n\t\t\tdata-geo={item.meta?.geo ?? ''}\n\t\t\taria-label={item.label}\n\t\t\ttitle={title}\n\t\t\ticon={item.icon}\n\t\t\tdata-state={isSelected ? 'selected' : undefined}\n\t\t\tonClick={() => item.onSelect('toolbar')}\n\t\t\tonTouchStart={(e) => {\n\t\t\t\tpreventDefault(e)\n\t\t\t\titem.onSelect('toolbar')\n\t\t\t}}\n\t\t/>\n\t)\n}\n\nconst isActiveTLUiToolItem = (\n\titem: TLUiToolItem,\n\tactiveToolId: string | undefined,\n\tgeoState: string | null | undefined\n) => {\n\treturn item.meta?.geo\n\t\t? activeToolId === 'geo' && geoState === item.meta?.geo\n\t\t: activeToolId === item.id\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmHQ;AAnHR,oBAA6E;AAC7E,wBAAuB;AACvB,mBAA4B;AAC5B,2BAA8B;AAC9B,yBAA4B;AAC5B,8BAAkD;AAElD,4BAA+B;AAC/B,yBAA4B;AAC5B,6BAAgC;AAChC,8BAAiC;AACjC,wBAA2B;AAC3B,yBAA4B;AAC5B,wBAA2B;AAC3B,oBAAuB;AACvB,QAAmB;AACnB,oBAAuB;AACvB,oCAAuC;AAGhC,MAAM,cAAU,mBAAK,SAASA,WAAU;AAC9C,QAAM,aAAS,yBAAU;AACzB,QAAM,UAAM,sCAAe;AAC3B,QAAM,iBAAa,oCAAc;AAEjC,QAAM,kCAAkC,aAAAC,QAAM,OAAoC,MAAS;AAE3F,QAAM,iBAAa,gCAAY;AAC/B,QAAM,mBAAe,0CAAiB;AACtC,QAAM,YAAY,aAAa,KAAK,CAAC,SAAS,KAAK,SAAS,OAAO,OAAO;AAE1E,QAAM,mBAAe,wBAAS,mBAAmB,MAAM,OAAO,iBAAiB,GAAG,CAAC,MAAM,CAAC;AAE1F,QAAM,eAAW;AAAA,IAChB;AAAA,IACA,MAAM,OAAO,gBAAgB,EAAE,gBAAgB,8BAAgB;AAAA,IAC/D,CAAC,MAAM;AAAA,EACR;AAEA,QAAM,mBAAmB,CAAC;AAE1B,QAAM,WAAW,CAAC,SACjB,KAAK,QAAQ,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,UAAM,sBAAO,KAAK,GAAG,IAAI,EAAE,KAAK;AAEzE,QAAM,wBAAwB,aAAa,KAAK,CAAC,SAAS;AACzD,WAAO,qBAAqB,KAAK,UAAU,cAAc,QAAQ;AAAA,EAClE,CAAC;AAED,QAAM,EAAE,cAAc,iBAAiB,kBAAkB,IAAI,aAAAA,QAAM,QAAQ,MAAM;AAChF,UAAMC,gBAAkC,CAAC;AACzC,UAAMC,mBAAqC,CAAC;AAC5C,QAAIC;AAEJ,UAAM,gBAAgB,KAAK,IAAI,GAAG,IAAI,UAAU;AAEhD,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC7C,YAAM,OAAO,aAAa,CAAC;AAC3B,UAAI,IAAI,eAAe;AAEtB,QAAAF,cAAa,KAAK,IAAI;AAAA,MACvB,OAAO;AAGN,YAAI,SAAS,uBAAuB;AAEnC,UAAAE,qBAAoB;AAAA,QACrB;AAEA,QAAAD,iBAAgB,KAAK,IAAI;AAAA,MAC1B;AAAA,IACD;AAEA,QAAIC,oBAAmB;AAAA,IAEvB,OAAO;AAON,UAAI,CAAC,gCAAgC,SAAS;AAC7C,wCAAgC,UAAUD,iBAAgB,CAAC;AAAA,MAC5D;AAEA,MAAAC,qBAAoB,gCAAgC;AAMpD,UAAI,CAACD,iBAAgB,SAASC,kBAAiB,GAAG;AACjD,QAAAA,qBAAoBD,iBAAgB,CAAC;AAAA,MACtC;AAAA,IACD;AAIA,oCAAgC,UAAUC;AAE1C,QAAID,iBAAgB,UAAU,GAAG;AAChC,MAAAD,cAAa,KAAK,GAAGC,gBAAe;AACpC,MAAAA,iBAAgB,SAAS;AAAA,IAC1B;AAEA,WAAO,EAAE,cAAAD,eAAc,iBAAAC,kBAAiB,mBAAAC,mBAAkB;AAAA,EAC3D,GAAG,CAAC,cAAc,uBAAuB,UAAU,CAAC;AAEpD,SACC,4CAAC,SAAI,WAAU,gBACd,uDAAC,SAAI,WAAU,uBACd;AAAA,iDAAC,SAAI,WAAU,sBACb;AAAA,OAAC,cACD,6CAAC,SAAI,WAAU,wBACb;AAAA,qBAAa,KAAK,EAAE,iBAAiB,UAAU,iBAAiB,WAChE,6CAAC,SAAI,WAAU,2DACd;AAAA,sDAAC,gCAAW;AAAA,UACZ,4CAAC,gCAAW;AAAA,UACZ,4CAAC,kCAAY;AAAA,UACb,4CAAC,0CAAgB;AAAA,UACjB,4CAAC,kCAAY;AAAA,WACd;AAAA,QAED,4CAAC,wDAAuB,cAA4B;AAAA,SACrD;AAAA,MAED;AAAA,QAAC;AAAA;AAAA,UACA,eAAW,kBAAAC,SAAW,uBAAuB;AAAA,YAC5C,+BAA+B,aAAa;AAAA,UAC7C,CAAC;AAAA,UAGA;AAAA,yBAAa,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,MAAM;AAC/C,qBACC;AAAA,gBAAC;AAAA;AAAA,kBAEA,MAAM;AAAA,kBACN,OAAO,SAAS,QAAQ;AAAA,kBACxB,YAAY,qBAAqB,UAAU,cAAc,QAAQ;AAAA;AAAA,gBAH5D,SAAS;AAAA,cAIf;AAAA,YAEF,CAAC;AAAA,YACA,cAAc,aACd;AAAA,cAAC;AAAA;AAAA,gBAEA,MAAM,UAAU;AAAA,gBAChB,OAAO,SAAS,UAAU,QAAQ;AAAA,gBAClC,YAAY,qBAAqB,UAAU,UAAU,cAAc,QAAQ;AAAA;AAAA,cAHtE,UAAU,SAAS;AAAA,YAIzB;AAAA,YAEA,oBACA,4EAEE;AAAA,2BAAa,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,MACzC;AAAA,gBAAC;AAAA;AAAA,kBAEA,MAAM;AAAA,kBACN,OAAO,SAAS,QAAQ;AAAA,kBACxB,YAAY,qBAAqB,UAAU,cAAc,QAAQ;AAAA;AAAA,gBAH5D,SAAS;AAAA,cAIf,CACA;AAAA,cAEA,aAAa,IAAI,CAAC,EAAE,SAAS,MAC7B;AAAA,gBAAC;AAAA;AAAA,kBAEA,MAAM;AAAA,kBACN,OAAO,SAAS,QAAQ;AAAA,kBACxB,YAAY,qBAAqB,UAAU,cAAc,QAAQ;AAAA;AAAA,gBAH5D,SAAS;AAAA,cAIf,CACA;AAAA,cAEA,gBAAgB,SAChB,4EAEC;AAAA;AAAA,kBAAC;AAAA;AAAA,oBAEA,MAAM,kBAAkB;AAAA,oBACxB,OAAO,SAAS,kBAAkB,QAAQ;AAAA,oBAC1C,YAAY;AAAA,sBACX,kBAAkB;AAAA,sBAClB;AAAA,sBACA;AAAA,oBACD;AAAA;AAAA,kBAPK,kBAAkB,SAAS;AAAA,gBAQjC;AAAA,gBAEA,6CAAC,EAAE,MAAF,EAAO,IAAG,oBAAmB,OAAO,OACpC;AAAA,8DAAC,EAAE,SAAF,EACA;AAAA,oBAAC;AAAA;AAAA,sBACA,WAAU;AAAA,sBACV,MAAK;AAAA,sBACL,MAAK;AAAA,sBACL,eAAY;AAAA,sBACZ,OAAO,IAAI,iBAAiB;AAAA;AAAA,kBAC7B,GACD;AAAA,kBACA,4CAAC,EAAE,SAAF,EAAU,MAAK,OAAM,OAAM,UAC3B,sDAAC,wBAAqB,cAAc,iBAAiB,GACtD;AAAA,mBACD;AAAA,iBACD,IACG;AAAA,eACL;AAAA;AAAA;AAAA,MAEF;AAAA,OACD;AAAA,IACC,aAAa,KAAK,CAAC,cACnB,4CAAC,SAAI,WAAU,uBACd,sDAAC,4CAAiB,GACnB;AAAA,KAEF,GACD;AAEF,CAAC;AAED,MAAM,2BAAuB,qBAAM,SAASC,sBAAqB;AAAA,EAChE;AACD,GAEG;AACF,QAAM,UAAM,sCAAe;AAE3B,SACC,4CAAC,SAAI,WAAU,sBACb,uBAAa,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,MAAM,KAAK,OAAO,UAAU,KAAK,EAAE,MAAM;AAC7E,WACC;AAAA,MAAC,EAAE;AAAA,MAAF;AAAA,QAEA,MAAK;AAAA,QACL,WAAU;AAAA,QACV,eAAa,cAAc,EAAE;AAAA,QAC7B,aAAW;AAAA,QACX,YAAU,MAAM,OAAO;AAAA,QACvB,cAAY;AAAA,QACZ,SAAS,MAAM,SAAS,SAAS;AAAA,QACjC,OAAO,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,UAAM,sBAAO,GAAG,IAAI,EAAE,KAAK;AAAA,QAC3D;AAAA;AAAA,MATK;AAAA,IAUN;AAAA,EAEF,CAAC,GACF;AAEF,CAAC;AAED,SAAS,cAAc;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AACD,GAIG;AACF,SACC;AAAA,IAAC;AAAA;AAAA,MACA,MAAK;AAAA,MACL,eAAa,SAAS,KAAK,EAAE;AAAA,MAC7B,aAAW,KAAK;AAAA,MAChB,YAAU,KAAK,MAAM,OAAO;AAAA,MAC5B,cAAY,KAAK;AAAA,MACjB;AAAA,MACA,MAAM,KAAK;AAAA,MACX,cAAY,aAAa,aAAa;AAAA,MACtC,SAAS,MAAM,KAAK,SAAS,SAAS;AAAA,MACtC,cAAc,CAAC,MAAM;AACpB,0CAAe,CAAC;AAChB,aAAK,SAAS,SAAS;AAAA,MACxB;AAAA;AAAA,EACD;AAEF;AAEA,MAAM,uBAAuB,CAC5B,MACA,cACA,aACI;AACJ,SAAO,KAAK,MAAM,MACf,iBAAiB,SAAS,aAAa,KAAK,MAAM,MAClD,iBAAiB,KAAK;AAC1B;",
4
+ "sourcesContent": ["import { GeoShapeGeoStyle, preventDefault, track, useEditor, useValue } from '@bigbluebutton/editor'\nimport classNames from 'classnames'\nimport React, { memo } from 'react'\nimport { useBreakpoint } from '../../hooks/useBreakpoint'\nimport { useReadonly } from '../../hooks/useReadonly'\nimport { TLUiToolbarItem, useToolbarSchema } from '../../hooks/useToolbarSchema'\nimport { TLUiToolItem } from '../../hooks/useTools'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { ActionsMenu } from '../ActionsMenu'\nimport { MobileStylePanel } from '../MobileStylePanel'\nimport { Button } from '../primitives/Button'\nimport * as M from '../primitives/DropdownMenu'\nimport { kbdStr } from '../primitives/shared'\nimport { ToggleToolLockedButton } from './ToggleToolLockedButton'\n\n/** @public */\nexport const Toolbar = memo(function Toolbar() {\n\tconst editor = useEditor()\n\tconst msg = useTranslation()\n\tconst breakpoint = useBreakpoint()\n\n\tconst rMostRecentlyActiveDropdownItem = React.useRef<TLUiToolbarItem | undefined>(undefined)\n\n\tconst isReadonly = useReadonly()\n\tconst toolbarItems = useToolbarSchema()\n\tconst laserTool = toolbarItems.find((item) => item.toolItem.id === 'laser')\n\n\tconst activeToolId = useValue('current tool id', () => editor.getCurrentToolId(), [editor])\n\n\tconst geoState = useValue(\n\t\t'geo',\n\t\t() => editor.getSharedStyles().getAsKnownValue(GeoShapeGeoStyle),\n\t\t[editor]\n\t)\n\n\tconst showEditingTools = !isReadonly\n\n\tconst getTitle = (item: TLUiToolItem) =>\n\t\titem.label ? `${msg(item.label)} ${item.kbd ? kbdStr(item.kbd) : ''}` : ''\n\n\tconst activeTLUiToolbarItem = toolbarItems.find((item) => {\n\t\treturn isActiveTLUiToolItem(item.toolItem, activeToolId, geoState)\n\t})\n\n\tconst { itemsInPanel, itemsInDropdown, dropdownFirstItem } = React.useMemo(() => {\n\t\tconst itemsInPanel: TLUiToolbarItem[] = []\n\t\tconst itemsInDropdown: TLUiToolbarItem[] = []\n\t\tlet dropdownFirstItem: TLUiToolbarItem | undefined\n\n\t\tconst overflowIndex = Math.min(8, 5 + breakpoint)\n\n\t\tfor (let i = 4; i < toolbarItems.length; i++) {\n\t\t\tconst item = toolbarItems[i]\n\t\t\tif (i < overflowIndex) {\n\t\t\t\t// Items below the overflow index will always be in the panel\n\t\t\t\titemsInPanel.push(item)\n\t\t\t} else {\n\t\t\t\t// Items above will be in the dropdown menu unless the item\n\t\t\t\t// is active (or was the most recently selected active item)\n\t\t\t\tif (item === activeTLUiToolbarItem) {\n\t\t\t\t\t// If the dropdown item is active, make it the dropdownFirstItem\n\t\t\t\t\tdropdownFirstItem = item\n\t\t\t\t}\n\t\t\t\t// Otherwise, add it to the items in dropdown menu\n\t\t\t\titemsInDropdown.push(item)\n\t\t\t}\n\t\t}\n\n\t\tif (dropdownFirstItem) {\n\t\t\t// noop\n\t\t} else {\n\t\t\t// If we don't have a currently active dropdown item, use the most\n\t\t\t// recently active dropdown item as the current dropdown first item.\n\n\t\t\t// If haven't ever had a most recently active dropdown item, then\n\t\t\t// make the first item in the dropdown menu the most recently\n\t\t\t// active dropdown item.\n\t\t\tif (!rMostRecentlyActiveDropdownItem.current) {\n\t\t\t\trMostRecentlyActiveDropdownItem.current = itemsInDropdown[0]\n\t\t\t}\n\n\t\t\tdropdownFirstItem = rMostRecentlyActiveDropdownItem.current\n\n\t\t\t// If the most recently active dropdown item is no longer in the\n\t\t\t// dropdown (because the breakpoint has changed) then make the\n\t\t\t// first item in the dropdown menu the most recently active\n\t\t\t// dropdown item.\n\t\t\tif (!itemsInDropdown.includes(dropdownFirstItem)) {\n\t\t\t\tdropdownFirstItem = itemsInDropdown[0]\n\t\t\t}\n\t\t}\n\n\t\t// We want this ref set to remember which item from the current\n\t\t// set of dropdown items was most recently active\n\t\trMostRecentlyActiveDropdownItem.current = dropdownFirstItem\n\n\t\tif (itemsInDropdown.length <= 2) {\n\t\t\titemsInPanel.push(...itemsInDropdown)\n\t\t\titemsInDropdown.length = 0\n\t\t}\n\n\t\treturn { itemsInPanel, itemsInDropdown, dropdownFirstItem }\n\t}, [toolbarItems, activeTLUiToolbarItem, breakpoint])\n\n\treturn (\n\t\t<div className=\"tlui-toolbar\">\n\t\t\t<div className=\"tlui-toolbar__inner\">\n\t\t\t\t<div className=\"tlui-toolbar__left\">\n\t\t\t\t\t{!isReadonly && (\n\t\t\t\t\t\t<div className=\"tlui-toolbar__extras\">\n\t\t\t\t\t\t\t{/* {breakpoint < 6 && !(activeToolId === 'hand' || activeToolId === 'zoom') && (\n\t\t\t\t\t\t\t\t<div className=\"tlui-toolbar__extras__controls tlui-buttons__horizontal\">\n\t\t\t\t\t\t\t\t\t<UndoButton />\n\t\t\t\t\t\t\t\t\t<RedoButton />\n\t\t\t\t\t\t\t\t\t<TrashButton />\n\t\t\t\t\t\t\t\t\t<DuplicateButton />\n\t\t\t\t\t\t\t\t\t<ActionsMenu />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)} */}\n\t\t\t\t\t\t\t<ToggleToolLockedButton activeToolId={activeToolId} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={classNames('tlui-toolbar__tools', {\n\t\t\t\t\t\t\t'tlui-toolbar__tools__mobile': breakpoint < 5,\n\t\t\t\t\t\t})}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Select / Hand */}\n\t\t\t\t\t\t{toolbarItems.slice(0, 2).map(({ toolItem }) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\t\tkey={toolItem.id}\n\t\t\t\t\t\t\t\t\titem={toolItem}\n\t\t\t\t\t\t\t\t\ttitle={getTitle(toolItem)}\n\t\t\t\t\t\t\t\t\tisSelected={isActiveTLUiToolItem(toolItem, activeToolId, geoState)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{isReadonly && laserTool && (\n\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\tkey={laserTool.toolItem.id}\n\t\t\t\t\t\t\t\titem={laserTool.toolItem}\n\t\t\t\t\t\t\t\ttitle={getTitle(laserTool.toolItem)}\n\t\t\t\t\t\t\t\tisSelected={isActiveTLUiToolItem(laserTool.toolItem, activeToolId, geoState)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showEditingTools && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{/* Draw / Eraser */}\n\t\t\t\t\t\t\t\t{toolbarItems.slice(2, 4).map(({ toolItem }) => (\n\t\t\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\t\t\tkey={toolItem.id}\n\t\t\t\t\t\t\t\t\t\titem={toolItem}\n\t\t\t\t\t\t\t\t\t\ttitle={getTitle(toolItem)}\n\t\t\t\t\t\t\t\t\t\tisSelected={isActiveTLUiToolItem(toolItem, activeToolId, geoState)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t{/* Everything Else */}\n\t\t\t\t\t\t\t\t{itemsInPanel.map(({ toolItem }) => (\n\t\t\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\t\t\tkey={toolItem.id}\n\t\t\t\t\t\t\t\t\t\titem={toolItem}\n\t\t\t\t\t\t\t\t\t\ttitle={getTitle(toolItem)}\n\t\t\t\t\t\t\t\t\t\tisSelected={isActiveTLUiToolItem(toolItem, activeToolId, geoState)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t{/* Overflowing Shapes */}\n\t\t\t\t\t\t\t\t{itemsInDropdown.length ? (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{/* Last selected (or first) item from the overflow */}\n\t\t\t\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\t\t\t\tkey={dropdownFirstItem.toolItem.id}\n\t\t\t\t\t\t\t\t\t\t\titem={dropdownFirstItem.toolItem}\n\t\t\t\t\t\t\t\t\t\t\ttitle={getTitle(dropdownFirstItem.toolItem)}\n\t\t\t\t\t\t\t\t\t\t\tisSelected={isActiveTLUiToolItem(\n\t\t\t\t\t\t\t\t\t\t\t\tdropdownFirstItem.toolItem,\n\t\t\t\t\t\t\t\t\t\t\t\tactiveToolId,\n\t\t\t\t\t\t\t\t\t\t\t\tgeoState\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{/* The dropdown to select everything else */}\n\t\t\t\t\t\t\t\t\t\t<M.Root id=\"toolbar overflow\" modal={false}>\n\t\t\t\t\t\t\t\t\t\t\t<M.Trigger>\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"tlui-toolbar__overflow\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon=\"chevron-up\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"tool\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata-testid=\"tools.more\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={msg('tool-panel.more')}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</M.Trigger>\n\t\t\t\t\t\t\t\t\t\t\t<M.Content side=\"top\" align=\"center\">\n\t\t\t\t\t\t\t\t\t\t\t\t<OverflowToolsContent toolbarItems={itemsInDropdown} />\n\t\t\t\t\t\t\t\t\t\t\t</M.Content>\n\t\t\t\t\t\t\t\t\t\t</M.Root>\n\t\t\t\t\t\t\t\t\t\t<ActionsMenu />\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{breakpoint < 5 && !isReadonly && (\n\t\t\t\t\t<div className=\"tlui-toolbar__tools\">\n\t\t\t\t\t\t<MobileStylePanel />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n})\n\nconst OverflowToolsContent = track(function OverflowToolsContent({\n\ttoolbarItems,\n}: {\n\ttoolbarItems: TLUiToolbarItem[]\n}) {\n\tconst msg = useTranslation()\n\n\treturn (\n\t\t<div className=\"tlui-buttons__grid\">\n\t\t\t{toolbarItems.map(({ toolItem: { id, meta, kbd, label, onSelect, icon } }) => {\n\t\t\t\treturn (\n\t\t\t\t\t<M.Item\n\t\t\t\t\t\tkey={id}\n\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\tclassName=\"tlui-button-grid__button\"\n\t\t\t\t\t\tdata-testid={`tools.more.${id}`}\n\t\t\t\t\t\tdata-tool={id}\n\t\t\t\t\t\tdata-geo={meta?.geo ?? ''}\n\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\tonClick={() => onSelect('toolbar')}\n\t\t\t\t\t\ttitle={label ? `${msg(label)} ${kbd ? kbdStr(kbd) : ''}` : ''}\n\t\t\t\t\t\ticon={icon}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t})}\n\t\t</div>\n\t)\n})\n\nfunction ToolbarButton({\n\titem,\n\ttitle,\n\tisSelected,\n}: {\n\titem: TLUiToolItem\n\ttitle: string\n\tisSelected: boolean\n}) {\n\treturn (\n\t\t<Button\n\t\t\ttype=\"tool\"\n\t\t\tdata-testid={`tools.${item.id}`}\n\t\t\tdata-tool={item.id}\n\t\t\tdata-geo={item.meta?.geo ?? ''}\n\t\t\taria-label={item.label}\n\t\t\ttitle={title}\n\t\t\ticon={item.icon}\n\t\t\tdata-state={isSelected ? 'selected' : undefined}\n\t\t\tonClick={() => item.onSelect('toolbar')}\n\t\t\tonTouchStart={(e) => {\n\t\t\t\tpreventDefault(e)\n\t\t\t\titem.onSelect('toolbar')\n\t\t\t}}\n\t\t/>\n\t)\n}\n\nconst isActiveTLUiToolItem = (\n\titem: TLUiToolItem,\n\tactiveToolId: string | undefined,\n\tgeoState: string | null | undefined\n) => {\n\treturn item.meta?.geo\n\t\t? activeToolId === 'geo' && geoState === item.meta?.geo\n\t\t: activeToolId === item.id\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["Toolbar", "React", "itemsInPanel", "itemsInDropdown", "dropdownFirstItem", "classNames", "OverflowToolsContent"]
7
7
  }