From c72477ef4e8bbd5a336fe8afa17ba05c09a39216 Mon Sep 17 00:00:00 2001 From: guiiBecker Date: Fri, 26 Jun 2026 10:55:10 -0300 Subject: [PATCH 1/9] feat: migrate buttons to bbb-ui-components-react lib --- package.json | 2 +- src/components/panel/component.tsx | 36 +++++++++++++++++------------- src/components/panel/styles.ts | 20 ++++++++++++++++- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index d094a79..bfc8b8b 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "@types/react": "^18.2.13", "@types/react-dom": "^18.2.6", "babel-plugin-syntax-dynamic-import": "^6.18.0", - "bbb-ui-components-react": "npm:@mconf/bbb-ui-components-react@^1.0.0", + "@mconf/bbb-ui-components-react": "2.1.0", "bigbluebutton-html-plugin-sdk": "0.1.17", "d3": "^7.9.0", "d3-cloud": "^1.2.7", diff --git a/src/components/panel/component.tsx b/src/components/panel/component.tsx index 44be3ee..0e2683e 100644 --- a/src/components/panel/component.tsx +++ b/src/components/panel/component.tsx @@ -4,7 +4,7 @@ import { BBBToggle, BBBTypography, BBBDivider, -} from 'bbb-ui-components-react'; +} from '@mconf/bbb-ui-components-react'; import { pluginLogger } from 'bigbluebutton-html-plugin-sdk'; import { PanelProps } from './types'; import Styled from './styles'; @@ -93,20 +93,26 @@ function Panel({ - - + + + + + + + + diff --git a/src/components/panel/styles.ts b/src/components/panel/styles.ts index 47e5744..afdbcee 100644 --- a/src/components/panel/styles.ts +++ b/src/components/panel/styles.ts @@ -50,11 +50,27 @@ const AttendeeContent = styled.div` const ButtonsContainer = styled.div` display: flex; flex-direction: column; - gap: 1rem; + align-items: stretch; + gap: 0.75rem; margin-top: auto; padding-top: 1rem; `; +const ButtonRow = styled.div` + display: flex; + flex-direction: column; + width: 100%; + gap: 0.75rem; +`; + +const ButtonWrapper = styled.div` + display: flex; + + > * { + width: 100%; + } +`; + const StatusIndicator = styled.div<{ isActive: boolean }>` display: flex; align-items: center; @@ -103,6 +119,8 @@ export default { SectionContent, AttendeeContent, ButtonsContainer, + ButtonRow, + ButtonWrapper, StatusIndicator, StatusDot, StatusText, From cb068bf30603aa8772cff85a54867a8c1ee8f502 Mon Sep 17 00:00:00 2001 From: guiiBecker Date: Fri, 26 Jun 2026 10:55:10 -0300 Subject: [PATCH 2/9] fix: add package-lock and pin bbb-ui-components-react to 2.1.0 --- package-lock.json | 49 ++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78e5cb5..99894a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", + "@mconf/bbb-ui-components-react": "2.1.0", "@mui/material": "^7.3.1", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", @@ -18,7 +19,6 @@ "@types/react": "^18.2.13", "@types/react-dom": "^18.2.6", "babel-plugin-syntax-dynamic-import": "^6.18.0", - "bbb-ui-components-react": "npm:@mconf/bbb-ui-components-react@^1.0.0", "bigbluebutton-html-plugin-sdk": "0.1.17", "d3": "^7.9.0", "d3-cloud": "^1.2.7", @@ -2234,6 +2234,27 @@ "dev": true, "license": "MIT" }, + "node_modules/@mconf/bbb-ui-components-react": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@mconf/bbb-ui-components-react/-/bbb-ui-components-react-2.1.0.tgz", + "integrity": "sha512-cSF69JDZO1jWjMuYBZeqW1aKSzVBfq9RRjMwW9bjUIPKP5XeFA/1Nkg+JbFnXDye48G87ElbcM9Nwb96e8jo5g==", + "license": "LGPL-3.0", + "peerDependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@mui/icons-material": "^7.3.1", + "@mui/material": "^7.3.1", + "@mui/styles": "^6.4.8", + "@tippyjs/react": "^4.2.6", + "prop-types": "^15.8.1", + "react": ">=18.0.0", + "react-dom": ">=18.0.0", + "react-icons": "^5.5.0", + "react-modal": ">=3.16.1", + "styled-components": ">=5.3.0", + "tippy.js": "^6.3.7" + } + }, "node_modules/@mui/core-downloads-tracker": { "version": "7.3.11", "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.11.tgz", @@ -2249,6 +2270,7 @@ "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.11.tgz", "integrity": "sha512-+hz5ilwHZ3djd5es3sCErLioqe/NhZcYTsV/TNXZAMdJdb23F4xzJjqnnZdnurc3S1+ietcssRNqieOhPQLZ7Q==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.28.6" }, @@ -4523,31 +4545,6 @@ "dev": true, "license": "MIT" }, - "node_modules/bbb-ui-components-react": { - "name": "@mconf/bbb-ui-components-react", - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@mconf/bbb-ui-components-react/-/bbb-ui-components-react-1.0.0.tgz", - "integrity": "sha512-RlS1+QW49acvGcVyyqnFa2Xs256nnFlk6FpeV4pAuItk3x5K81WtjHYDdvTi1ysRgn1+RsdUhjxs+4+AHw3Z3w==", - "license": "LGPL-3.0", - "dependencies": { - "@mui/icons-material": "^7.3.1", - "@tippyjs/react": "^4.2.6", - "react-modal": "^3.16.3", - "tippy.js": "^6.3.7" - }, - "peerDependencies": { - "@emotion/react": "^11.14.0", - "@emotion/styled": "^11.14.1", - "@mui/material": "^7.3.1", - "@mui/styles": "^6.4.8", - "prop-types": "^15.8.1", - "react": ">=18.0.0", - "react-dom": ">=18.0.0", - "react-icons": "^5.5.0", - "react-modal": ">=3.16.1", - "styled-components": ">=5.3.0" - } - }, "node_modules/bigbluebutton-html-plugin-sdk": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/bigbluebutton-html-plugin-sdk/-/bigbluebutton-html-plugin-sdk-0.1.17.tgz", From 5302ed0d8f7baf06b3f324551c5a65ddf63f9aba Mon Sep 17 00:00:00 2001 From: guiiBecker Date: Fri, 26 Jun 2026 11:06:54 -0300 Subject: [PATCH 3/9] fix: update tsconfig with skipLibCheck, es2021 target and allowSyntheticDefaultImports --- tsconfig.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 82dcac4..c1920a8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,11 +2,14 @@ "compilerOptions": { "outDir": "./dist-tsc/", "noImplicitAny": true, + "skipLibCheck": true, "module": "es6", - "target": "es6", // Changed from es5 to es6 + "target": "es2021", "jsx": "react", "allowJs": true, - "moduleResolution": "node" + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true }, "include": ["src/**/*"], // Update to include subdirectories "paths": { From 754bc3e38a8a5d75b71127dbd976855263b0d617 Mon Sep 17 00:00:00 2001 From: guiiBecker Date: Fri, 26 Jun 2026 11:20:28 -0300 Subject: [PATCH 4/9] fix: resolve pre-existing lint errors in word cloud plugin Co-Authored-By: Claude Sonnet 4.6 --- .eslintignore | 3 +- .../word-cloud-plugin/component.tsx | 18 +++--- src/plugin-word-cloud/component.tsx | 63 +++++++++---------- 3 files changed, 40 insertions(+), 44 deletions(-) diff --git a/.eslintignore b/.eslintignore index f06235c..4709296 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1 @@ -node_modules -dist +src/main.css diff --git a/src/components/word-cloud-plugin/component.tsx b/src/components/word-cloud-plugin/component.tsx index 2a3e16b..2ba4bef 100644 --- a/src/components/word-cloud-plugin/component.tsx +++ b/src/components/word-cloud-plugin/component.tsx @@ -1,5 +1,7 @@ import * as React from 'react'; -import { useEffect, useRef, useMemo, useCallback, useState } from 'react'; +import { + useEffect, useRef, useMemo, useCallback, useState, +} from 'react'; import * as ReactDOM from 'react-dom/client'; import { GenericContentSidekickArea, @@ -303,9 +305,9 @@ function WordCloudPlugin({ pluginApi, intl }: WordCloudPluginProps): React.React } const generatedIds = pluginApi.setGenericContentItems(items); - sidekickContentId.current = generatedIds[0]; + [sidekickContentId.current] = generatedIds; if (isActiveRef.current && generatedIds.length > 1) { - mainAreaContentId.current = generatedIds[1]; + [, mainAreaContentId.current] = generatedIds; } isInitializedRef.current = true; @@ -338,9 +340,9 @@ function WordCloudPlugin({ pluginApi, intl }: WordCloudPluginProps): React.React } const generatedIds = pluginApi.setGenericContentItems(items); - sidekickContentId.current = generatedIds[0]; + [sidekickContentId.current] = generatedIds; if (isActiveRef.current && generatedIds.length > 1) { - mainAreaContentId.current = generatedIds[1]; + [, mainAreaContentId.current] = generatedIds; } }, [roleChangeCounter, titleMessage, pluginApi]); @@ -368,8 +370,8 @@ function WordCloudPlugin({ pluginApi, intl }: WordCloudPluginProps): React.React }); const newIds = pluginApi.setGenericContentItems([sidekickArea, mainArea]); - sidekickContentId.current = newIds[0]; - mainAreaContentId.current = newIds[1]; + [sidekickContentId.current] = newIds; + [, mainAreaContentId.current] = newIds; } // Transition: active -> inactive @@ -396,7 +398,7 @@ function WordCloudPlugin({ pluginApi, intl }: WordCloudPluginProps): React.React }); const newIds = pluginApi.setGenericContentItems([sidekickArea]); - sidekickContentId.current = newIds[0]; + [sidekickContentId.current] = newIds; mainAreaContentId.current = undefined; }, FADE_DURATION); } diff --git a/src/plugin-word-cloud/component.tsx b/src/plugin-word-cloud/component.tsx index 364564f..11c6f32 100644 --- a/src/plugin-word-cloud/component.tsx +++ b/src/plugin-word-cloud/component.tsx @@ -2,12 +2,10 @@ import * as React from 'react'; import { useEffect, useState, useRef } from 'react'; // Removed useMemo, added useRef import * as d3 from 'd3'; import * as cloud from 'd3-cloud'; // Changed to namespace import -import { scaleOrdinal } from 'd3-scale'; // Using d3-scale for colors potentially import { intlMessages } from '../intlMessages'; import { PublicChatMessagesData, - ChatMessage, PluginWordCloudProps, } from './types'; import { PUBLIC_CHAT_MESSAGES_SUBSCRIPTION } from './queries'; @@ -20,6 +18,7 @@ interface WordData extends cloud.Word { } // Regex to match various emoji presentations, including flags and variation selectors +// eslint-disable-next-line max-len // Using Unicode property escapes: \p{Emoji_Presentation}, \p{Emoji} with VS16, Regional Indicators for flags // More restrictive to avoid matching Unicode numbers const emojiIsolatingRegex = /(\p{Emoji_Presentation}|\p{Emoji}\uFE0F|(?:\p{Regional_Indicator}){2})/gu; @@ -62,10 +61,8 @@ const extractWords = (text: string): string[] => { if (/\d[a-zA-Z]|[a-zA-Z]\d/.test(token)) return false; return true; }) - .map((token) => { - // Remove common punctuation from each word (including parentheses, brackets, etc.) - return token.replace(/[.,!?;:()[\]{}'"<>*#@&^%$~`\\|/+=_-]/g, ''); - }) + // eslint-disable-next-line no-useless-escape + .map((token) => token.replace(/[.,!?;:()[\]{}'"<>*#@&^%$~`\\|/+=_-]/g, '')) .filter((word) => { // Filter out empty strings after punctuation removal if (word.length === 0) return false; @@ -87,8 +84,10 @@ React.ReactElement { // State to store GLOBAL word counts (for font size) const [wordCounts, setWordCounts] = useState>({}); // State to store word counts PER CATEGORY (minute) (for layout grouping) + // eslint-disable-next-line max-len const [categorizedWordCounts, setCategorizedWordCounts] = useState>>({}); // State to keep track of processed messages with their content and category (to handle edits) + // eslint-disable-next-line max-len const [processedMessages, setProcessedMessages] = useState>({}); // State to track the current category index, incremented by "/cloud" const [currentCategoryIndex, setCurrentCategoryIndex] = useState(0); @@ -125,7 +124,9 @@ React.ReactElement { } // Destructure needed fields - const { messageId, message: messageText, editedAt, deletedAt, messageType } = message; + const { + messageId, message: messageText, editedAt, deletedAt, messageType, + } = message; // Check if this message was already processed const existingMessage = processedMessages[messageId]; @@ -220,6 +221,7 @@ React.ReactElement { setCurrentCategoryIndex((prevIndex) => prevIndex + 1); setProcessedMessages((prev) => ({ ...prev, + // eslint-disable-next-line max-len [messageId]: { content: messageText, category: String(currentCategoryIndex), editedAt }, })); } @@ -269,6 +271,7 @@ React.ReactElement { } // --- Process message (new or edited) --- + // eslint-disable-next-line max-len const currentCategory = isEdited && existingMessage ? existingMessage.category : String(currentCategoryIndex); const words = extractWords(messageText); @@ -296,13 +299,13 @@ React.ReactElement { newCategorizedCounts[currentCategory] = {}; } words.forEach((word) => { + // eslint-disable-next-line max-len newCategorizedCounts[currentCategory][word] = (newCategorizedCounts[currentCategory][word] || 0) + 1; }); return newCategorizedCounts; }); } }); - } // Depend only on the subscription data }, [subscriptionResponse.data]); // Removed processedMessageIds from dependencies @@ -314,17 +317,9 @@ React.ReactElement { const maxFontSize = 120; // Color parameters removed - will use d3.schemeCategory10 - // Calculate min and max counts for normalization (still needed for font size) - const counts = Object.values(wordCounts); - const minCount = counts.length > 0 ? Math.min(...counts) : 1; - const maxCount = counts.length > 0 ? Math.max(...counts) : 1; - - // Define a categorical color scale using a bright scheme suitable for dark backgrounds - const colorScale = d3.scaleOrdinal(d3.schemeCategory10); - // Effect to setup ResizeObserver for responsive layout useEffect(() => { - if (!svgRef.current) return; + if (!svgRef.current) return undefined; const resizeObserver = new ResizeObserver((entries) => { if (!entries || entries.length === 0) return; @@ -351,7 +346,7 @@ React.ReactElement { const [width, height] = dimensions; // Get current dimensions from state if (!svgRef.current || width === 0 || height === 0) { - return; // Don't run if ref isn't ready or dimensions are zero + return undefined; // Don't run if ref isn't ready or dimensions are zero } if (Object.keys(wordCounts).length === 0) { @@ -376,7 +371,7 @@ React.ReactElement { .style('text-anchor', 'middle') // Center text horizontally .text(intl.formatMessage(intlMessages.startTyping)); // Use intl for message - return; // Exit after drawing placeholder + return undefined; // Exit after drawing placeholder } // --- Proceed with Word Cloud Drawing --- @@ -391,7 +386,7 @@ React.ReactElement { // Ensure layout dimensions are not negative if (layoutWidth <= 0 || layoutHeight <= 0) { - return; + return undefined; } // --- Dynamic Font Size Calculation --- @@ -420,6 +415,7 @@ React.ReactElement { return (effectiveMinFontSize + maxFontSize) / 2; } // Linear interpolation between effectiveMinFontSize and maxFontSize + // eslint-disable-next-line max-len const size = effectiveMinFontSize + ((count - minCount) / (maxCount - minCount)) * (maxFontSize - effectiveMinFontSize); // Clamp within the dynamic bounds (effectiveMinFontSize to maxFontSize) return Math.max(effectiveMinFontSize, Math.min(size, maxFontSize)); @@ -429,7 +425,7 @@ React.ReactElement { // Each entry represents a unique word within a specific category (minute) const wordsData: WordData[] = []; Object.entries(categorizedWordCounts).forEach(([category, wordsInCategory]) => { - Object.entries(wordsInCategory).forEach(([wordText, countInCategory]) => { + Object.entries(wordsInCategory).forEach(([wordText]) => { // Get the GLOBAL count for font size calculation const globalCount = wordCounts[wordText] || 1; // Fallback to 1 if somehow missing wordsData.push({ @@ -458,7 +454,7 @@ React.ReactElement { if (numCategories === 0) { // Potentially draw placeholder or clear SVG if needed, though handled earlier - return; + return undefined; } // Calculate grid dimensions @@ -468,7 +464,6 @@ React.ReactElement { const cellHeight = layoutHeight / rows; const allLayoutPromises: Promise[] = []; - const allPositionedWords: WordData[] = []; // Array to collect results categories.forEach((category, index) => { const categoryWords = wordsByCategory[category]; @@ -484,7 +479,7 @@ React.ReactElement { .size([cellWidth, cellHeight]) .words(categoryWords) // Pass only words for this category .padding(1) // Maybe smaller padding within cells - .rotate(() => (~~(Math.random() * 6) - 3) * 15) // Less rotation? + .rotate(() => (Math.floor(Math.random() * 6) - 3) * 15) // Less rotation? .font('Tahoma') .fontSize((d) => d.size || 10) // Use size from WordData .on('end', (positionedWords: WordData[]) => { @@ -501,13 +496,6 @@ React.ReactElement { allLayoutPromises.push(layoutPromise); }); - // Wait for all category layouts to complete - Promise.all(allLayoutPromises).then((results) => { - const combinedWords = results.flat(); // Combine words from all categories - draw(combinedWords, width, height, margin); // Call draw with all positioned words - }); - // --- End Category-Based Layout --- - // Helper function to ensure color is not too dark const ensureLightColor = (colorString: string): string => { const darkThreshold = 0x66; // Equivalent to #666666 @@ -529,8 +517,7 @@ React.ReactElement { // Draw function: Renders the words using D3, now receives dimensions/margin // This function remains largely the same, but now receives words already positioned globally - function draw(words: WordData[], svgWidth: number, svgHeight: number, svgMargin: number) { - + const draw = (words: WordData[], svgWidth: number, svgHeight: number, svgMargin: number) => { // Select the container, ensure SVG exists, or create it const svg = d3.select(svgRef.current) .selectAll('svg') // Use selectAll for potential existing SVG @@ -589,7 +576,14 @@ React.ReactElement { .duration(1600) // Match previous transition duration .style('fill-opacity', 1) .attr('font-size', (d: WordData) => `${d.size}px`); // Add type WordData - } + }; + + // Wait for all category layouts to complete + Promise.all(allLayoutPromises).then((results) => { + const combinedWords = results.flat(); // Combine words from all categories + draw(combinedWords, width, height, margin); // Call draw with all positioned words + }); + // --- End Category-Based Layout --- // Cleanup function for when the component unmounts or dependencies change return () => { @@ -597,6 +591,7 @@ React.ReactElement { // layoutInstance.stop(); // Stop the layout process if it's still running // } }; + // eslint-disable-next-line max-len }, [wordCounts, categorizedWordCounts, dimensions]); // Re-run effect when counts or dimensions change // --- Rendering Logic --- From f5f02c995e2b8079c6358dbc0fdef9614d310d5c Mon Sep 17 00:00:00 2001 From: guiiBecker Date: Tue, 30 Jun 2026 13:58:12 -0300 Subject: [PATCH 5/9] chore(deps): pin peer dependencies to exact versions --- package-lock.json | 112 +++++++++++++++++++++++++++------------------- package.json | 26 +++++------ 2 files changed, 78 insertions(+), 60 deletions(-) diff --git a/package-lock.json b/package-lock.json index 99894a7..b2da752 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,13 +8,13 @@ "name": "plugin-word-cloud", "version": "0.1.2", "dependencies": { - "@emotion/react": "^11.14.0", - "@emotion/styled": "^11.14.0", + "@emotion/react": "11.14.0", + "@emotion/styled": "11.14.1", "@mconf/bbb-ui-components-react": "2.1.0", - "@mui/material": "^7.3.1", + "@mui/material": "7.3.1", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", - "@tippyjs/react": "^4.2.6", + "@tippyjs/react": "4.2.6", "@types/node": "^20.3.1", "@types/react": "^18.2.13", "@types/react-dom": "^18.2.6", @@ -24,14 +24,14 @@ "d3-cloud": "^1.2.7", "d3-scale": "^4.0.2", "path": "^0.12.7", - "prop-types": "^15.8.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-icons": "^5.5.0", + "prop-types": "15.8.1", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-icons": "5.5.0", "react-intl": "^7.1.11", - "react-modal": "^3.16.1", - "styled-components": "^5.3.3", - "tippy.js": "^6.3.7" + "react-modal": "3.16.1", + "styled-components": "5.3.3", + "tippy.js": "6.3.7" }, "devDependencies": { "@babel/core": "^7.21.8", @@ -60,7 +60,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-watch": "^8.0.0", "lint-staged": "11.2.0", - "react-dom": "^18.2.0", + "react-dom": "18.2.0", "style-loader": "^3.3.3", "ts-loader": "^9.4.3", "typescript": "^5.1.6", @@ -2293,22 +2293,22 @@ } }, "node_modules/@mui/material": { - "version": "7.3.11", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.11.tgz", - "integrity": "sha512-yq8bPc3LxOwKRWpcjRgDkYFmpM6aKlARfESTmOQcvLYFeJwtHte2tw6hJDrb8sk8wcvpDprHEHVaoUU0MslIkw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.1.tgz", + "integrity": "sha512-Xf6Shbo03YmcBedZMwSpEFOwpYDtU7tC+rhAHTrA9FHk0FpsDqiQ9jUa1j/9s3HLs7KWb5mDcGnlwdh9Q9KAag==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.28.6", - "@mui/core-downloads-tracker": "^7.3.11", - "@mui/system": "^7.3.11", - "@mui/types": "^7.4.12", - "@mui/utils": "^7.3.11", + "@babel/runtime": "^7.28.2", + "@mui/core-downloads-tracker": "^7.3.1", + "@mui/system": "^7.3.1", + "@mui/types": "^7.4.5", + "@mui/utils": "^7.3.1", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", - "csstype": "^3.2.3", + "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^19.2.3", + "react-is": "^19.1.1", "react-transition-group": "^4.4.5" }, "engines": { @@ -2321,7 +2321,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^7.3.11", + "@mui/material-pigment-css": "^7.3.1", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -7676,9 +7676,9 @@ } }, "node_modules/graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "version": "2.12.7", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.7.tgz", + "integrity": "sha512-xnE/NFzy+0eIesvAsREJZ284zTl/wYuBAvpsFSDhRGRdRHdnE90M21Q3xAWyYInb0J756c6x0pIQ62+vtvOs1Q==", "license": "MIT", "dependencies": { "tslib": "^2.1.0" @@ -7687,7 +7687,7 @@ "node": ">=10" }, "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/handle-thing": { @@ -10505,9 +10505,9 @@ } }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -10517,22 +10517,22 @@ } }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.23.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^18.2.0" } }, "node_modules/react-icons": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.6.0.tgz", - "integrity": "sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", "license": "MIT", "peerDependencies": { "react": "*" @@ -10576,9 +10576,9 @@ "license": "MIT" }, "node_modules/react-modal": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.3.tgz", - "integrity": "sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw==", + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.1.tgz", + "integrity": "sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg==", "license": "MIT", "dependencies": { "exenv": "^1.2.0", @@ -10586,9 +10586,12 @@ "react-lifecycles-compat": "^3.0.0", "warning": "^4.0.3" }, + "engines": { + "node": ">=8" + }, "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19", - "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19" + "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18", + "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18" } }, "node_modules/react-transition-group": { @@ -11826,14 +11829,14 @@ } }, "node_modules/styled-components": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.11.tgz", - "integrity": "sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.3.tgz", + "integrity": "sha512-++4iHwBM7ZN+x6DtPPWkCI4vdtwumQ+inA/DdAsqYd4SVgUKJie5vXyzotA00ttcFdQkCng7zc6grwlfIfw+lw==", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.0.0", "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^1.1.0", + "@emotion/is-prop-valid": "^0.8.8", "@emotion/stylis": "^0.8.4", "@emotion/unitless": "^0.7.4", "babel-plugin-styled-components": ">= 1.12.0", @@ -11855,6 +11858,21 @@ "react-is": ">= 16.8.0" } }, + "node_modules/styled-components/node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/styled-components/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "license": "MIT" + }, "node_modules/styled-components/node_modules/@emotion/unitless": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", diff --git a/package.json b/package.json index bfc8b8b..74d6994 100644 --- a/package.json +++ b/package.json @@ -4,30 +4,30 @@ "private": true, "main": "./src/index.tsx", "dependencies": { - "@emotion/react": "^11.14.0", - "@emotion/styled": "^11.14.0", - "@mui/material": "^7.3.1", + "@emotion/react": "11.14.0", + "@emotion/styled": "11.14.1", + "@mconf/bbb-ui-components-react": "2.1.0", + "@mui/material": "7.3.1", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", - "@tippyjs/react": "^4.2.6", + "@tippyjs/react": "4.2.6", "@types/node": "^20.3.1", "@types/react": "^18.2.13", "@types/react-dom": "^18.2.6", "babel-plugin-syntax-dynamic-import": "^6.18.0", - "@mconf/bbb-ui-components-react": "2.1.0", "bigbluebutton-html-plugin-sdk": "0.1.17", "d3": "^7.9.0", "d3-cloud": "^1.2.7", "d3-scale": "^4.0.2", "path": "^0.12.7", - "prop-types": "^15.8.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-icons": "^5.5.0", + "prop-types": "15.8.1", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-icons": "5.5.0", "react-intl": "^7.1.11", - "react-modal": "^3.16.1", - "styled-components": "^5.3.3", - "tippy.js": "^6.3.7" + "react-modal": "3.16.1", + "styled-components": "5.3.3", + "tippy.js": "6.3.7" }, "scripts": { "build-bundle": "webpack --mode production", @@ -76,7 +76,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-watch": "^8.0.0", "lint-staged": "11.2.0", - "react-dom": "^18.2.0", + "react-dom": "18.2.0", "style-loader": "^3.3.3", "ts-loader": "^9.4.3", "typescript": "^5.1.6", From 86595d53e1e3cebaaa553ad1b51dc5d9ce561092 Mon Sep 17 00:00:00 2001 From: guiiBecker Date: Wed, 1 Jul 2026 11:21:24 -0300 Subject: [PATCH 6/9] chore(deps): pin all dependencies to exact versions and add @mui/icons-material --- package-lock.json | 108 +++++++++++++++++++++++----------------------- package.json | 23 +++++----- 2 files changed, 66 insertions(+), 65 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2da752..2f6d01f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,24 +11,25 @@ "@emotion/react": "11.14.0", "@emotion/styled": "11.14.1", "@mconf/bbb-ui-components-react": "2.1.0", + "@mui/icons-material": "7.3.1", "@mui/material": "7.3.1", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", + "@testing-library/react": "13.4.0", + "@testing-library/user-event": "13.5.0", "@tippyjs/react": "4.2.6", - "@types/node": "^20.3.1", - "@types/react": "^18.2.13", - "@types/react-dom": "^18.2.6", - "babel-plugin-syntax-dynamic-import": "^6.18.0", + "@types/node": "20.3.1", + "@types/react": "18.2.13", + "@types/react-dom": "18.2.6", + "babel-plugin-syntax-dynamic-import": "6.18.0", "bigbluebutton-html-plugin-sdk": "0.1.17", - "d3": "^7.9.0", - "d3-cloud": "^1.2.7", - "d3-scale": "^4.0.2", - "path": "^0.12.7", + "d3": "7.9.0", + "d3-cloud": "1.2.7", + "d3-scale": "4.0.2", + "path": "0.12.7", "prop-types": "15.8.1", "react": "18.2.0", "react-dom": "18.2.0", "react-icons": "5.5.0", - "react-intl": "^7.1.11", + "react-intl": "7.1.11", "react-modal": "3.16.1", "styled-components": "5.3.3", "tippy.js": "6.3.7" @@ -2029,13 +2030,13 @@ } }, "node_modules/@formatjs/ecma402-abstract": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.6.tgz", - "integrity": "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.4.tgz", + "integrity": "sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==", "license": "MIT", "dependencies": { "@formatjs/fast-memoize": "2.2.7", - "@formatjs/intl-localematcher": "0.6.2", + "@formatjs/intl-localematcher": "0.6.1", "decimal.js": "^10.4.3", "tslib": "^2.8.0" } @@ -2050,36 +2051,36 @@ } }, "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.4.tgz", - "integrity": "sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==", + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.2.tgz", + "integrity": "sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==", "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", - "@formatjs/icu-skeleton-parser": "1.8.16", + "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/icu-skeleton-parser": "1.8.14", "tslib": "^2.8.0" } }, "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.16", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.16.tgz", - "integrity": "sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==", + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.14.tgz", + "integrity": "sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==", "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", + "@formatjs/ecma402-abstract": "2.3.4", "tslib": "^2.8.0" } }, "node_modules/@formatjs/intl": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-3.1.8.tgz", - "integrity": "sha512-LWXgwI5zTMatvR8w8kCNh/priDTOF/ZssokMBHJ7ZWXFoYLVOYo0EJERD9Eajv+xsfQO1QkuAt77KWQ1OI4mOQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-3.1.6.tgz", + "integrity": "sha512-tDkXnA4qpIFcDWac8CyVJq6oW8DR7W44QDUBsfXWIIJD/FYYen0QoH46W7XsVMFfPOVKkvbufjboZrrWbEfmww==", "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", + "@formatjs/ecma402-abstract": "2.3.4", "@formatjs/fast-memoize": "2.2.7", - "@formatjs/icu-messageformat-parser": "2.11.4", - "intl-messageformat": "10.7.18", + "@formatjs/icu-messageformat-parser": "2.11.2", + "intl-messageformat": "10.7.16", "tslib": "^2.8.0" }, "peerDependencies": { @@ -2092,9 +2093,9 @@ } }, "node_modules/@formatjs/intl-localematcher": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz", - "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.1.tgz", + "integrity": "sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==", "license": "MIT", "dependencies": { "tslib": "^2.8.0" @@ -2266,13 +2267,12 @@ } }, "node_modules/@mui/icons-material": { - "version": "7.3.11", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.11.tgz", - "integrity": "sha512-+hz5ilwHZ3djd5es3sCErLioqe/NhZcYTsV/TNXZAMdJdb23F4xzJjqnnZdnurc3S1+ietcssRNqieOhPQLZ7Q==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.1.tgz", + "integrity": "sha512-upzCtG6awpL6noEZlJ5Z01khZ9VnLNLaj7tb6iPbN6G97eYfUTs8e9OyPKy3rEms3VQWmVBfri7jzeaRxdFIzA==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/runtime": "^7.28.6" + "@babel/runtime": "^7.28.2" }, "engines": { "node": ">=14.0.0" @@ -2282,7 +2282,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^7.3.11", + "@mui/material": "^7.3.1", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -5420,9 +5420,9 @@ } }, "node_modules/d3-cloud": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/d3-cloud/-/d3-cloud-1.2.9.tgz", - "integrity": "sha512-leL1GLneC9ZQtnV+6TGWrNlGfI1WX7S2arcTv2vae12DaXo5wjm6GBCkskXbrDlyOymd/A75Pyj1H37MW4BZ/Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/d3-cloud/-/d3-cloud-1.2.7.tgz", + "integrity": "sha512-8TrgcgwRIpoZYQp7s3fGB7tATWfhckRb8KcVd1bOgqkNdkJRDGWfdSf4HkHHzZxSczwQJdSxvfPudwir5IAJ3w==", "license": "BSD-3-Clause", "dependencies": { "d3-dispatch": "^1.0.3" @@ -8175,14 +8175,14 @@ } }, "node_modules/intl-messageformat": { - "version": "10.7.18", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.18.tgz", - "integrity": "sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==", + "version": "10.7.16", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.16.tgz", + "integrity": "sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==", "license": "BSD-3-Clause", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", + "@formatjs/ecma402-abstract": "2.3.4", "@formatjs/fast-memoize": "2.2.7", - "@formatjs/icu-messageformat-parser": "2.11.4", + "@formatjs/icu-messageformat-parser": "2.11.2", "tslib": "^2.8.0" } }, @@ -10539,18 +10539,18 @@ } }, "node_modules/react-intl": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-7.1.14.tgz", - "integrity": "sha512-VE/0Wi/lHJlBC7APQpCzLUdIt3GB5B0GZrRW8Q+ACbkHI4j+Wwgg9J1TniN6zmLHmPH5gxXcMy+fkSPfw5p1WQ==", + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-7.1.11.tgz", + "integrity": "sha512-tnVoRCWvW5Ie2ikYSdPF7z3+880yCe/9xPmitFeRPw3RYDcCfR4m8ZYa4MBq19W4adt9Z+PQA4FaMBCJ7E+HCQ==", "license": "BSD-3-Clause", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.6", - "@formatjs/icu-messageformat-parser": "2.11.4", - "@formatjs/intl": "3.1.8", + "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/icu-messageformat-parser": "2.11.2", + "@formatjs/intl": "3.1.6", "@types/hoist-non-react-statics": "^3.3.1", "@types/react": "16 || 17 || 18 || 19", "hoist-non-react-statics": "^3.3.2", - "intl-messageformat": "10.7.18", + "intl-messageformat": "10.7.16", "tslib": "^2.8.0" }, "peerDependencies": { diff --git a/package.json b/package.json index 74d6994..01804f1 100644 --- a/package.json +++ b/package.json @@ -7,24 +7,25 @@ "@emotion/react": "11.14.0", "@emotion/styled": "11.14.1", "@mconf/bbb-ui-components-react": "2.1.0", + "@mui/icons-material": "7.3.1", "@mui/material": "7.3.1", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", + "@testing-library/react": "13.4.0", + "@testing-library/user-event": "13.5.0", "@tippyjs/react": "4.2.6", - "@types/node": "^20.3.1", - "@types/react": "^18.2.13", - "@types/react-dom": "^18.2.6", - "babel-plugin-syntax-dynamic-import": "^6.18.0", + "@types/node": "20.3.1", + "@types/react": "18.2.13", + "@types/react-dom": "18.2.6", + "babel-plugin-syntax-dynamic-import": "6.18.0", "bigbluebutton-html-plugin-sdk": "0.1.17", - "d3": "^7.9.0", - "d3-cloud": "^1.2.7", - "d3-scale": "^4.0.2", - "path": "^0.12.7", + "d3": "7.9.0", + "d3-cloud": "1.2.7", + "d3-scale": "4.0.2", + "path": "0.12.7", "prop-types": "15.8.1", "react": "18.2.0", "react-dom": "18.2.0", "react-icons": "5.5.0", - "react-intl": "^7.1.11", + "react-intl": "7.1.11", "react-modal": "3.16.1", "styled-components": "5.3.3", "tippy.js": "6.3.7" From 80f2ba8fa2462412afa9ec42e7b15d3e3a1af72e Mon Sep 17 00:00:00 2001 From: guiiBecker Date: Mon, 6 Jul 2026 10:56:26 -0300 Subject: [PATCH 7/9] fix(word-cloud): restore line-to-button padding and re-add punctuation comment --- src/components/panel/styles.ts | 2 +- src/plugin-word-cloud/component.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/panel/styles.ts b/src/components/panel/styles.ts index afdbcee..77e503b 100644 --- a/src/components/panel/styles.ts +++ b/src/components/panel/styles.ts @@ -51,7 +51,7 @@ const ButtonsContainer = styled.div` display: flex; flex-direction: column; align-items: stretch; - gap: 0.75rem; + gap: 1rem; margin-top: auto; padding-top: 1rem; `; diff --git a/src/plugin-word-cloud/component.tsx b/src/plugin-word-cloud/component.tsx index 11c6f32..5790b41 100644 --- a/src/plugin-word-cloud/component.tsx +++ b/src/plugin-word-cloud/component.tsx @@ -61,6 +61,7 @@ const extractWords = (text: string): string[] => { if (/\d[a-zA-Z]|[a-zA-Z]\d/.test(token)) return false; return true; }) + // Remove common punctuation from each word (including parentheses, brackets, etc.) // eslint-disable-next-line no-useless-escape .map((token) => token.replace(/[.,!?;:()[\]{}'"<>*#@&^%$~`\\|/+=_-]/g, '')) .filter((word) => { From a9030475362a1900fc6fda6b42eda24d24bcf969 Mon Sep 17 00:00:00 2001 From: guiiBecker Date: Tue, 7 Jul 2026 09:51:58 -0300 Subject: [PATCH 8/9] chore(deps): bump @mconf/bbb-ui-components-react to 2.3.0 --- package-lock.json | 322 +++------------------------------------------- package.json | 2 +- 2 files changed, 17 insertions(+), 307 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f6d01f..0b80899 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@emotion/react": "11.14.0", "@emotion/styled": "11.14.1", - "@mconf/bbb-ui-components-react": "2.1.0", + "@mconf/bbb-ui-components-react": "2.3.0", "@mui/icons-material": "7.3.1", "@mui/material": "7.3.1", "@testing-library/react": "13.4.0", @@ -2236,24 +2236,26 @@ "license": "MIT" }, "node_modules/@mconf/bbb-ui-components-react": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@mconf/bbb-ui-components-react/-/bbb-ui-components-react-2.1.0.tgz", - "integrity": "sha512-cSF69JDZO1jWjMuYBZeqW1aKSzVBfq9RRjMwW9bjUIPKP5XeFA/1Nkg+JbFnXDye48G87ElbcM9Nwb96e8jo5g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@mconf/bbb-ui-components-react/-/bbb-ui-components-react-2.3.0.tgz", + "integrity": "sha512-hRuOxajSV4Cnu+DS4FKuW5iUdJ89YW9Ggs8Vc/1t409cIBW/b7S7YSVn/1tJBb4V3gknc/GAb9rUET6BV1eqeA==", "license": "LGPL-3.0", - "peerDependencies": { - "@emotion/react": "^11.14.0", - "@emotion/styled": "^11.14.1", - "@mui/icons-material": "^7.3.1", - "@mui/material": "^7.3.1", - "@mui/styles": "^6.4.8", + "dependencies": { "@tippyjs/react": "^4.2.6", + "react-modal": ">=3.16.1", + "tippy.js": "^6.3.7" + }, + "peerDependencies": { + "@emotion/react": "^11.13.0", + "@emotion/styled": "^11.13.0", + "@mui/icons-material": "^6.1.4 || ^7.0.0", + "@mui/material": "^6.1.4 || ^7.0.0", "prop-types": "^15.8.1", - "react": ">=18.0.0", - "react-dom": ">=18.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-icons": "^5.5.0", "react-modal": ">=3.16.1", - "styled-components": ">=5.3.0", - "tippy.js": "^6.3.7" + "styled-components": ">=5.3.0" } }, "node_modules/@mui/core-downloads-tracker": { @@ -2341,80 +2343,6 @@ } } }, - "node_modules/@mui/private-theming": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.9.tgz", - "integrity": "sha512-LktcVmI5X17/Q5SkwjCcdOLBzt1hXuc14jYa7NPShog0GBDCDvKtcnP0V7a2s6EiVRlv7BzbWEJzH6+l/zaCxw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/utils": "^6.4.9", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/private-theming/node_modules/@mui/types": { - "version": "7.2.24", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.24.tgz", - "integrity": "sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==", - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/private-theming/node_modules/@mui/utils": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.9.tgz", - "integrity": "sha512-Y12Q9hbK9g+ZY0T3Rxrx9m2m10gaphDuUMgWxyV5kNJevVxXYCLclYUCC9vXaIk1/NdNDTcW2Yfr2OGvNFNmHg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/types": "~7.2.24", - "@types/prop-types": "^15.7.14", - "clsx": "^2.1.1", - "prop-types": "^15.8.1", - "react-is": "^19.0.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@mui/styled-engine": { "version": "7.3.10", "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.10.tgz", @@ -2449,94 +2377,6 @@ } } }, - "node_modules/@mui/styles": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-6.5.0.tgz", - "integrity": "sha512-DeE/S/l6adnMpKfgx6l7UaQwYuf+gD4FCp6En3Vdg2Er+CTArj4DcHNFVzb8HZ2nNqACwmSm16/P08m1vAxv2w==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.26.0", - "@emotion/hash": "^0.9.2", - "@mui/private-theming": "^6.4.9", - "@mui/types": "~7.2.24", - "@mui/utils": "^6.4.9", - "clsx": "^2.1.1", - "csstype": "^3.1.3", - "hoist-non-react-statics": "^3.3.2", - "jss": "^10.10.0", - "jss-plugin-camel-case": "^10.10.0", - "jss-plugin-default-unit": "^10.10.0", - "jss-plugin-global": "^10.10.0", - "jss-plugin-nested": "^10.10.0", - "jss-plugin-props-sort": "^10.10.0", - "jss-plugin-rule-value-function": "^10.10.0", - "jss-plugin-vendor-prefixer": "^10.10.0", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/styles/node_modules/@mui/types": { - "version": "7.2.24", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.24.tgz", - "integrity": "sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==", - "license": "MIT", - "peer": true, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/styles/node_modules/@mui/utils": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.9.tgz", - "integrity": "sha512-Y12Q9hbK9g+ZY0T3Rxrx9m2m10gaphDuUMgWxyV5kNJevVxXYCLclYUCC9vXaIk1/NdNDTcW2Yfr2OGvNFNmHg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.26.0", - "@mui/types": "~7.2.24", - "@types/prop-types": "^15.7.14", - "clsx": "^2.1.1", - "prop-types": "^15.8.1", - "react-is": "^19.0.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@mui/system": { "version": "7.3.11", "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.11.tgz", @@ -5299,17 +5139,6 @@ "postcss-value-parser": "^4.0.2" } }, - "node_modules/css-vendor": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", - "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.8.3", - "is-in-browser": "^1.0.2" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -7955,13 +7784,6 @@ "node": ">=10.17.0" } }, - "node_modules/hyphenate-style-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", - "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==", - "license": "BSD-3-Clause", - "peer": true - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -8461,13 +8283,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==", - "license": "MIT", - "peer": true - }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -8891,104 +8706,6 @@ "node": ">=6" } }, - "node_modules/jss": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz", - "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "csstype": "^3.0.2", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/jss" - } - }, - "node_modules/jss-plugin-camel-case": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz", - "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "hyphenate-style-name": "^1.0.3", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-default-unit": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz", - "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-global": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz", - "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-nested": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz", - "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "node_modules/jss-plugin-props-sort": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz", - "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-rule-value-function": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz", - "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "node_modules/jss-plugin-vendor-prefixer": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz", - "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.8", - "jss": "10.10.0" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -12089,13 +11806,6 @@ "dev": true, "license": "MIT" }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT", - "peer": true - }, "node_modules/tippy.js": { "version": "6.3.7", "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", diff --git a/package.json b/package.json index 01804f1..aab1ca6 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "dependencies": { "@emotion/react": "11.14.0", "@emotion/styled": "11.14.1", - "@mconf/bbb-ui-components-react": "2.1.0", + "@mconf/bbb-ui-components-react": "2.3.0", "@mui/icons-material": "7.3.1", "@mui/material": "7.3.1", "@testing-library/react": "13.4.0", From 93402e34a103e381643a1e47ad3253a5708dbdff Mon Sep 17 00:00:00 2001 From: guiiBecker Date: Thu, 9 Jul 2026 13:52:40 -0300 Subject: [PATCH 9/9] fix(word-cloud): fix button row layout and Stop/Start order --- src/components/panel/component.tsx | 16 ++++++++-------- src/components/panel/styles.ts | 13 ++++++++++++- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/components/panel/component.tsx b/src/components/panel/component.tsx index 0e2683e..d1e0c4a 100644 --- a/src/components/panel/component.tsx +++ b/src/components/panel/component.tsx @@ -96,20 +96,20 @@ function Panel({ diff --git a/src/components/panel/styles.ts b/src/components/panel/styles.ts index 77e503b..9eff24f 100644 --- a/src/components/panel/styles.ts +++ b/src/components/panel/styles.ts @@ -58,16 +58,27 @@ const ButtonsContainer = styled.div` const ButtonRow = styled.div` display: flex; - flex-direction: column; + flex-direction: row; width: 100%; gap: 0.75rem; `; const ButtonWrapper = styled.div` + flex: 1; + min-width: 0; display: flex; > * { width: 100%; + min-width: 0; + } + + button span { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + min-width: 0; } `;